<?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>151128</bug_id>
          
          <creation_ts>2015-11-10 20:23:20 -0800</creation_ts>
          <short_desc>Get rid of anonymous stack slots</short_desc>
          <delta_ts>2016-02-02 15:21:59 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>150279</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>ggaren</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenb</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>saam</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1141045</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-11-10 20:23:20 -0800</bug_when>
    <thetext>Air::allocateStack assumes that a Def of a StackSlot means that the StackSlot is not live before that instruction.  But this is only true if the instruction Def&apos;s the full size of the StackSlot.  This is hard to tell because currently, a Def in Air means that it could write anywhere from 1 to 8 bytes.

There are a lot of possible solutions.

For starters, B3 StackSlots are unlikely to benefit from being allocated based on liveness.  We could simply create a new notion stack slot that has the Use/Def semantics we want.  For example, we could say that the &quot;Anonymous&quot; stack slot kind actually means that any store to the stack slot changes all bytes in the StackSlot.  This would only require a documentation change.

Alternatively, we could incorporate forward flow into the notion of liveness: a Def is only a Def if just prior to it, none of the bytes in the StackSlot have had a value stored into them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1160604</commentid>
    <comment_count>1</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-01-30 17:50:14 -0800</bug_when>
    <thetext>The easiest way to resolve this issue is to hide the concept of anonymous stack slots.  They should be private to Air.  And Air should just call them &quot;spill slots&quot;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1160605</commentid>
    <comment_count>2</comment_count>
      <attachid>270331</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-01-30 17:51:15 -0800</bug_when>
    <thetext>Created attachment 270331
it&apos;s a start</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1160658</commentid>
    <comment_count>3</comment_count>
      <attachid>270341</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-01-31 11:15:58 -0800</bug_when>
    <thetext>Created attachment 270341
moar</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1160663</commentid>
    <comment_count>4</comment_count>
      <attachid>270342</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-01-31 11:42:58 -0800</bug_when>
    <thetext>Created attachment 270342
probably done

Still need to test it and stuff</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1160966</commentid>
    <comment_count>5</comment_count>
      <attachid>270410</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-02-01 12:19:48 -0800</bug_when>
    <thetext>Created attachment 270410
more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1160982</commentid>
    <comment_count>6</comment_count>
      <attachid>270413</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-02-01 13:00:34 -0800</bug_when>
    <thetext>Created attachment 270413
getting close</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1161178</commentid>
    <comment_count>7</comment_count>
      <attachid>270464</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-02-01 19:08:20 -0800</bug_when>
    <thetext>Created attachment 270464
almost done</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1161295</commentid>
    <comment_count>8</comment_count>
      <attachid>270493</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-02-02 09:55:39 -0800</bug_when>
    <thetext>Created attachment 270493
rebased patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1161296</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-02-02 09:56:54 -0800</bug_when>
    <thetext>Attachment 270493 did not pass style-queue:


ERROR: Source/JavaScriptCore/b3/B3VariableValue.h:57:  The parameter name &quot;variable&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/B3ControlValue.h:150:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
Total errors found: 2 in 68 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>1161305</commentid>
    <comment_count>10</comment_count>
      <attachid>270495</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-02-02 10:18:18 -0800</bug_when>
    <thetext>Created attachment 270495
more fixes

Fixed some rebasing issues.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1161306</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-02-02 10:20:41 -0800</bug_when>
    <thetext>Attachment 270495 did not pass style-queue:


ERROR: Source/JavaScriptCore/b3/B3VariableValue.h:57:  The parameter name &quot;variable&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/b3/B3ControlValue.h:150:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
Total errors found: 2 in 68 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>1161315</commentid>
    <comment_count>12</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-02-02 10:43:51 -0800</bug_when>
    <thetext>This change was not intended to be a speed-up, but the perf results show that it might be one.


Benchmark report for SunSpider, V8Spider, Octane, Kraken, and AsmBench on shakezilla (MacBookPro11,3).

VMs tested:
&quot;B3ToT&quot; at /Volumes/Data/quartary/OpenSource/WebKitBuild/Release/jsc (r196011)
&quot;FixStackSlot&quot; at /Volumes/Data/quinary/OpenSource/WebKitBuild/Release/jsc (r196011)

Collected 6 samples per benchmark/VM, with 6 VM invocations per benchmark. Emitted a call to gc() between sample
measurements. Used 1 benchmark iteration per VM invocation for warm-up. Used the jsc-specific preciseTime() function to
get microsecond-level timing. Reporting benchmark execution times with 95% confidence intervals in milliseconds.

                                                  B3ToT                  FixStackSlot                                   
SunSpider:
   3d-cube                                    4.7480+-0.0486     ?      4.7718+-0.0722        ?
   3d-morph                                   5.4072+-0.2233            5.3054+-0.0569          might be 1.0192x faster
   3d-raytrace                                5.5427+-0.0537     ?      5.5785+-0.0524        ?
   access-binary-trees                        2.2648+-0.1512            2.1749+-0.0858          might be 1.0413x faster
   access-fannkuch                            5.8050+-0.2445     ?      5.8069+-0.1516        ?
   access-nbody                               2.7018+-0.0133     ?      2.7232+-0.0184        ?
   access-nsieve                              3.5011+-0.0693            3.4103+-0.0553          might be 1.0266x faster
   bitops-3bit-bits-in-byte                   1.1917+-0.0505            1.1693+-0.0125          might be 1.0191x faster
   bitops-bits-in-byte                        3.1534+-0.0230     ?      3.2168+-0.0451        ? might be 1.0201x slower
   bitops-bitwise-and                         1.9707+-0.0283            1.9603+-0.0149        
   bitops-nsieve-bits                         3.0369+-0.0511     ?      3.0538+-0.0999        ?
   controlflow-recursive                      2.4565+-0.0714            2.3833+-0.0455          might be 1.0307x faster
   crypto-aes                                 4.0472+-0.0675     ?      4.0738+-0.1430        ?
   crypto-md5                                 2.5238+-0.0458     ?      2.5527+-0.0795        ? might be 1.0114x slower
   crypto-sha1                                2.4445+-0.1741     ?      2.6718+-0.1576        ? might be 1.0930x slower
   date-format-tofte                          6.8427+-0.1864     ?      7.0432+-0.1719        ? might be 1.0293x slower
   date-format-xparb                          4.8087+-0.0853            4.7933+-0.2462        
   math-cordic                                2.9539+-0.0372            2.9361+-0.0225        
   math-partial-sums                          4.8722+-0.0560            4.8697+-0.0491        
   math-spectral-norm                         2.0385+-0.0638     ?      2.1464+-0.0912        ? might be 1.0529x slower
   regexp-dna                                 6.3192+-0.2103            6.1148+-0.1756          might be 1.0334x faster
   string-base64                              4.7965+-0.1614            4.6636+-0.0741          might be 1.0285x faster
   string-fasta                               5.7413+-0.0747     ?      5.7524+-0.0570        ?
   string-tagcloud                            7.9209+-0.1224            7.9159+-0.1177        
   string-unpack-code                        17.9409+-0.1135     ?     18.7487+-1.8518        ? might be 1.0450x slower
   string-validate-input                      4.4277+-0.1414     ?      4.4420+-0.1174        ?

   &lt;arithmetic&gt;                               4.5945+-0.0175     ?      4.6261+-0.0824        ? might be 1.0069x slower

                                                  B3ToT                  FixStackSlot                                   
V8Spider:
   crypto                                    37.6754+-0.2706           37.6636+-0.2515        
   deltablue                                 52.7941+-2.7719     ?     52.9433+-1.6701        ?
   earley-boyer                              41.2561+-0.3886     ?     41.3205+-0.2763        ?
   raytrace                                  20.9548+-0.7038           20.9502+-0.5271        
   regexp                                    62.8147+-0.7418           62.2260+-1.0473        
   richards                                  40.6309+-0.6083           40.5625+-0.7045        
   splay                                     37.1233+-0.8260     ?     37.3645+-0.8885        ?

   &lt;geometric&gt;                               39.9594+-0.4885           39.9580+-0.2804          might be 1.0000x faster

                                                  B3ToT                  FixStackSlot                                   
Octane:
   encrypt                                   0.16140+-0.00368          0.16073+-0.00447       
   decrypt                                   2.79783+-0.01323          2.79723+-0.00774       
   deltablue                        x2       0.14406+-0.02129          0.13550+-0.00170         might be 1.0632x faster
   earley                                    0.28023+-0.00172          0.27850+-0.00286       
   boyer                                     4.55362+-0.18487          4.44199+-0.13664         might be 1.0251x faster
   navier-stokes                    x2       4.81771+-0.02299    ?     4.82065+-0.02585       ?
   raytrace                         x2       0.88177+-0.00452          0.88096+-0.01121       
   richards                         x2       0.08047+-0.00093          0.08017+-0.00127       
   splay                            x2       0.35205+-0.00407          0.35142+-0.00126       
   regexp                           x2      25.01267+-0.51362    ?    25.07954+-0.40898       ?
   pdfjs                            x2      37.47671+-0.29114    ?    37.61198+-0.25680       ?
   mandreel                         x2      42.93871+-0.28512         42.91171+-0.28955       
   gbemu                            x2      24.87135+-0.49699         24.63162+-0.35977       
   closure                                   0.56665+-0.00410          0.56062+-0.00260         might be 1.0108x faster
   jquery                                    7.34220+-0.04309    ^     7.26102+-0.01401       ^ definitely 1.0112x faster
   box2d                            x2       9.08035+-0.05127    ?     9.08730+-0.07989       ?
   zlib                             x2     391.23366+-9.82845        381.67175+-9.67881         might be 1.0251x faster
   typescript                       x2     673.42631+-11.23961   ?   679.24784+-11.82868      ?

   &lt;geometric&gt;                               5.25180+-0.04799          5.21408+-0.01331         might be 1.0072x faster

                                                  B3ToT                  FixStackSlot                                   
Kraken:
   ai-astar                                   95.793+-3.221             95.258+-3.986         
   audio-beat-detection                       55.538+-0.132      ?      55.750+-0.330         ?
   audio-dft                                  96.923+-2.625      ?      96.939+-3.021         ?
   audio-fft                                  43.667+-0.112             43.529+-0.251         
   audio-oscillator                           50.562+-1.938             49.785+-0.619           might be 1.0156x faster
   imaging-darkroom                           59.581+-0.198             59.483+-0.138         
   imaging-desaturate                         43.303+-0.306      ?      43.568+-0.339         ?
   imaging-gaussian-blur                      68.462+-0.842             67.959+-0.250         
   json-parse-financial                       37.898+-1.646      ?      37.919+-0.843         ?
   json-stringify-tinderbox                   22.792+-0.431      ^      22.025+-0.183         ^ definitely 1.0348x faster
   stanford-crypto-aes                        41.315+-1.218             40.813+-0.418           might be 1.0123x faster
   stanford-crypto-ccm                        36.482+-1.726      ?      37.177+-1.361         ? might be 1.0190x slower
   stanford-crypto-pbkdf2                    101.317+-0.466      ?     101.477+-0.588         ?
   stanford-crypto-sha256-iterative           38.681+-0.537             38.481+-0.200         

   &lt;arithmetic&gt;                               56.594+-0.297             56.440+-0.508           might be 1.0027x faster

                                                  B3ToT                  FixStackSlot                                   
AsmBench:
   bigfib.cpp                               424.5592+-1.0756          424.1931+-3.3810        
   cray.c                                   393.0655+-2.5063          391.8980+-0.5336        
   dry.c                                    411.3667+-7.5392          407.1241+-6.5431          might be 1.0104x faster
   FloatMM.c                                699.6375+-0.8075     ?    701.6382+-2.8382        ?
   gcc-loops.cpp                           3506.9248+-9.0975         3504.7858+-8.7061        
   n-body.c                                 854.3085+-2.6624     ?    858.5210+-15.7331       ?
   Quicksort.c                              393.5944+-3.0170     ?    395.8725+-4.3933        ?
   stepanov_container.cpp                  3243.0458+-13.0321        3239.1754+-25.5083       
   Towers.c                                 256.0876+-0.6784     ?    256.3263+-0.8264        ?

   &lt;geometric&gt;                              712.0084+-1.6787          711.8753+-1.5493          might be 1.0002x faster

                                                  B3ToT                  FixStackSlot                                   
Geomean of preferred means:
   &lt;scaled-result&gt;                           32.9517+-0.1368           32.9297+-0.1795          might be 1.0007x faster</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1161374</commentid>
    <comment_count>13</comment_count>
      <attachid>270495</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2016-02-02 13:09:15 -0800</bug_when>
    <thetext>Comment on attachment 270495
more fixes

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

r=me with some comments.

&gt; Source/JavaScriptCore/b3/B3ReduceStrength.cpp:2290
&gt; +                // accurately tha the effects() method does.

typo: tha ==&gt; than.

&gt; Source/JavaScriptCore/b3/B3VariableValue.h:57
&gt; +    VariableValue(Opcode, Origin, Variable* variable);

The &quot;variable&quot; name adds no info.  Please remove.

&gt; Websites/webkit.org/docs/b3/intermediate-representation.html:113
&gt; +      input to B3, it&apos;s a good idea to run fixSSA() manually before running the compiler. The

Did you mean to say &quot;before running the optimizer&quot; instead?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1161380</commentid>
    <comment_count>14</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-02-02 13:34:23 -0800</bug_when>
    <thetext>(In reply to comment #13)
&gt; Comment on attachment 270495 [details]
&gt; more fixes
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=270495&amp;action=review
&gt; 
&gt; r=me with some comments.
&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3ReduceStrength.cpp:2290
&gt; &gt; +                // accurately tha the effects() method does.
&gt; 
&gt; typo: tha ==&gt; than.

Fixed.

&gt; 
&gt; &gt; Source/JavaScriptCore/b3/B3VariableValue.h:57
&gt; &gt; +    VariableValue(Opcode, Origin, Variable* variable);
&gt; 
&gt; The &quot;variable&quot; name adds no info.  Please remove.

Fixed.

&gt; 
&gt; &gt; Websites/webkit.org/docs/b3/intermediate-representation.html:113
&gt; &gt; +      input to B3, it&apos;s a good idea to run fixSSA() manually before running the compiler. The
&gt; 
&gt; Did you mean to say &quot;before running the optimizer&quot; instead?

Currently, there is no difference between &quot;running the compiler&quot; and &quot;running the optimizer&quot;.  It&apos;s not possible to run &quot;just the compiler&quot;.  When running the compiler, you can specify an optLevel, and setting it to zero will disable some, but not all, optimizations.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1161432</commentid>
    <comment_count>15</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2016-02-02 15:21:59 -0800</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/196032</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>270331</attachid>
            <date>2016-01-30 17:51:15 -0800</date>
            <delta_ts>2016-01-31 11:15:58 -0800</delta_ts>
            <desc>it&apos;s a start</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>38574</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0FyZ3VtZW50UmVnVmFsdWUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNBcmd1bWVudFJlZ1ZhbHVlLmgJ
KHJldmlzaW9uIDE5NTkwMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0FyZ3VtZW50
UmVnVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtNDksOCArNDksOCBAQCBwcm90ZWN0ZWQ6CiBw
cml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7CiAKLSAgICBBcmd1bWVudFJlZ1Zh
bHVlKHVuc2lnbmVkIGluZGV4LCBPcmlnaW4gb3JpZ2luLCBSZWcgcmVnKQotICAgICAgICA6IFZh
bHVlKGluZGV4LCBDaGVja2VkT3Bjb2RlLCBBcmd1bWVudFJlZywgcmVnLmlzR1BSKCkgPyBwb2lu
dGVyVHlwZSgpIDogRG91YmxlLCBvcmlnaW4pCisgICAgQXJndW1lbnRSZWdWYWx1ZShPcmlnaW4g
b3JpZ2luLCBSZWcgcmVnKQorICAgICAgICA6IFZhbHVlKENoZWNrZWRPcGNvZGUsIEFyZ3VtZW50
UmVnLCByZWcuaXNHUFIoKSA/IHBvaW50ZXJUeXBlKCkgOiBEb3VibGUsIG9yaWdpbikKICAgICAg
ICAgLCBtX3JlZyhyZWcpCiAgICAgewogICAgICAgICBBU1NFUlQocmVnLmlzU2V0KCkpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ0NhbGxWYWx1ZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NDYWxsVmFsdWUuaAkocmV2aXNpb24gMTk1OTAx
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ0NhbGxWYWx1ZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC00OCwxNSArNDgsMTUgQEAgcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgUHJvY2Vk
dXJlOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgotICAgIENDYWxsVmFs
dWUodW5zaWduZWQgaW5kZXgsIFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdpbiwgQXJndW1lbnRzLi4u
IGFyZ3VtZW50cykKLSAgICAgICAgOiBWYWx1ZShpbmRleCwgQ2hlY2tlZE9wY29kZSwgQ0NhbGws
IHR5cGUsIG9yaWdpbiwgYXJndW1lbnRzLi4uKQorICAgIENDYWxsVmFsdWUoVHlwZSB0eXBlLCBP
cmlnaW4gb3JpZ2luLCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQorICAgICAgICA6IFZhbHVlKENo
ZWNrZWRPcGNvZGUsIENDYWxsLCB0eXBlLCBvcmlnaW4sIGFyZ3VtZW50cy4uLikKICAgICB7CiAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKG51bUNoaWxkcmVuKCkgPj0gMSk7CiAgICAgfQogCiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgotICAgIENDYWxsVmFsdWUodW5zaWduZWQg
aW5kZXgsIFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdpbiwgY29uc3QgRWZmZWN0cyYgZWZmZWN0cywg
QXJndW1lbnRzLi4uIGFyZ3VtZW50cykKLSAgICAgICAgOiBWYWx1ZShpbmRleCwgQ2hlY2tlZE9w
Y29kZSwgQ0NhbGwsIHR5cGUsIG9yaWdpbiwgYXJndW1lbnRzLi4uKQorICAgIENDYWxsVmFsdWUo
VHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luLCBjb25zdCBFZmZlY3RzJiBlZmZlY3RzLCBBcmd1bWVu
dHMuLi4gYXJndW1lbnRzKQorICAgICAgICA6IFZhbHVlKENoZWNrZWRPcGNvZGUsIENDYWxsLCB0
eXBlLCBvcmlnaW4sIGFyZ3VtZW50cy4uLikKICAgICAgICAgLCBlZmZlY3RzKGVmZmVjdHMpCiAg
ICAgewogICAgICAgICBSRUxFQVNFX0FTU0VSVChudW1DaGlsZHJlbigpID49IDEpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tWYWx1ZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tWYWx1ZS5jcHAJKHJldmlzaW9uIDE5NTkw
MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrVmFsdWUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00Niw4ICs0Niw4IEBAIFZhbHVlKiBDaGVja1ZhbHVlOjpjbG9uZUltcGwoKSBj
b25zdAogfQogCiAvLyBVc2UgdGhpcyBmb3JtIGZvciBDaGVja0FkZCwgQ2hlY2tTdWIsIGFuZCBD
aGVja011bC4KLUNoZWNrVmFsdWU6OkNoZWNrVmFsdWUodW5zaWduZWQgaW5kZXgsIE9wY29kZSBv
cGNvZGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQpCi0gICAgOiBT
dGFja21hcFZhbHVlKGluZGV4LCBDaGVja2VkT3Bjb2RlLCBvcGNvZGUsIGxlZnQtPnR5cGUoKSwg
b3JpZ2luKQorQ2hlY2tWYWx1ZTo6Q2hlY2tWYWx1ZShPcGNvZGUgb3Bjb2RlLCBPcmlnaW4gb3Jp
Z2luLCBWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0KQorICAgIDogU3RhY2ttYXBWYWx1ZShDaGVj
a2VkT3Bjb2RlLCBvcGNvZGUsIGxlZnQtPnR5cGUoKSwgb3JpZ2luKQogewogICAgIEFTU0VSVChC
Mzo6aXNJbnQodHlwZSgpKSk7CiAgICAgQVNTRVJUKGxlZnQtPnR5cGUoKSA9PSByaWdodC0+dHlw
ZSgpKTsKQEAgLTU3LDggKzU3LDggQEAgQ2hlY2tWYWx1ZTo6Q2hlY2tWYWx1ZSh1bnNpZ25lZCBp
bmRleCwgTwogfQogCiAvLyBVc2UgdGhpcyBmb3JtIGZvciBDaGVjay4KLUNoZWNrVmFsdWU6OkNo
ZWNrVmFsdWUodW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4sIFZh
bHVlKiBwcmVkaWNhdGUpCi0gICAgOiBTdGFja21hcFZhbHVlKGluZGV4LCBDaGVja2VkT3Bjb2Rl
LCBvcGNvZGUsIFZvaWQsIG9yaWdpbikKK0NoZWNrVmFsdWU6OkNoZWNrVmFsdWUoT3Bjb2RlIG9w
Y29kZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIHByZWRpY2F0ZSkKKyAgICA6IFN0YWNrbWFwVmFs
dWUoQ2hlY2tlZE9wY29kZSwgb3Bjb2RlLCBWb2lkLCBvcmlnaW4pCiB7CiAgICAgQVNTRVJUKG9w
Y29kZSA9PSBDaGVjayk7CiAgICAgYXBwZW5kKENvbnN0cmFpbmVkVmFsdWUocHJlZGljYXRlLCBW
YWx1ZVJlcDo6V2FybUFueSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hl
Y2tWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNr
VmFsdWUuaAkocmV2aXNpb24gMTk1OTAxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
Q2hlY2tWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01OCwxMCArNTgsMTAgQEAgcHJpdmF0ZToK
ICAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOwogCiAgICAgLy8gVXNlIHRoaXMgZm9ybSBmb3Ig
Q2hlY2tBZGQsIENoZWNrU3ViLCBhbmQgQ2hlY2tNdWwuCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUg
Q2hlY2tWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3Bjb2RlLCBPcmlnaW4sIFZhbHVlKiBsZWZ0LCBW
YWx1ZSogcmlnaHQpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIENoZWNrVmFsdWUoT3Bjb2RlLCBP
cmlnaW4sIFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQpOwogCiAgICAgLy8gVXNlIHRoaXMgZm9y
bSBmb3IgQ2hlY2suCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgQ2hlY2tWYWx1ZSh1bnNpZ25lZCBp
bmRleCwgT3Bjb2RlLCBPcmlnaW4sIFZhbHVlKiBwcmVkaWNhdGUpOworICAgIEpTX0VYUE9SVF9Q
UklWQVRFIENoZWNrVmFsdWUoT3Bjb2RlLCBPcmlnaW4sIFZhbHVlKiBwcmVkaWNhdGUpOwogfTsK
IAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNDb25zdDMyVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNDb25zdDMyVmFsdWUuaAkocmV2aXNpb24gMTk1OTAxKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzQ29uc3QzMlZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTc3LDggKzc3LDgg
QEAgcHJvdGVjdGVkOgogCiAgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKIAotICAgIENvbnN0
MzJWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3JpZ2luIG9yaWdpbiwgaW50MzJfdCB2YWx1ZSkKLSAg
ICAgICAgOiBWYWx1ZShpbmRleCwgQ2hlY2tlZE9wY29kZSwgQ29uc3QzMiwgSW50MzIsIG9yaWdp
bikKKyAgICBDb25zdDMyVmFsdWUoT3JpZ2luIG9yaWdpbiwgaW50MzJfdCB2YWx1ZSkKKyAgICAg
ICAgOiBWYWx1ZShDaGVja2VkT3Bjb2RlLCBDb25zdDMyLCBJbnQzMiwgb3JpZ2luKQogICAgICAg
ICAsIG1fdmFsdWUodmFsdWUpCiAgICAgewogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0NvbnN0NjRWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0NvbnN0NjRWYWx1ZS5oCShyZXZpc2lvbiAxOTU5MDEpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNDb25zdDY0VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtNzcsOCAr
NzcsOCBAQCBwcm90ZWN0ZWQ6CiAKICAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOwogCi0gICAg
Q29uc3Q2NFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcmlnaW4gb3JpZ2luLCBpbnQ2NF90IHZhbHVl
KQotICAgICAgICA6IFZhbHVlKGluZGV4LCBDaGVja2VkT3Bjb2RlLCBDb25zdDY0LCBJbnQ2NCwg
b3JpZ2luKQorICAgIENvbnN0NjRWYWx1ZShPcmlnaW4gb3JpZ2luLCBpbnQ2NF90IHZhbHVlKQor
ICAgICAgICA6IFZhbHVlKENoZWNrZWRPcGNvZGUsIENvbnN0NjQsIEludDY0LCBvcmlnaW4pCiAg
ICAgICAgICwgbV92YWx1ZSh2YWx1ZSkKICAgICB7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzQ29uc3REb3VibGVWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0RG91YmxlVmFsdWUuaAkocmV2aXNpb24gMTk1OTAxKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3REb3VibGVWYWx1ZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC03MCw4ICs3MCw4IEBAIHByb3RlY3RlZDoKIHByaXZhdGU6CiAgICAgZnJpZW5k
IGNsYXNzIFByb2NlZHVyZTsKIAotICAgIENvbnN0RG91YmxlVmFsdWUodW5zaWduZWQgaW5kZXgs
IE9yaWdpbiBvcmlnaW4sIGRvdWJsZSB2YWx1ZSkKLSAgICAgICAgOiBWYWx1ZShpbmRleCwgQ2hl
Y2tlZE9wY29kZSwgQ29uc3REb3VibGUsIERvdWJsZSwgb3JpZ2luKQorICAgIENvbnN0RG91Ymxl
VmFsdWUoT3JpZ2luIG9yaWdpbiwgZG91YmxlIHZhbHVlKQorICAgICAgICA6IFZhbHVlKENoZWNr
ZWRPcGNvZGUsIENvbnN0RG91YmxlLCBEb3VibGUsIG9yaWdpbikKICAgICAgICAgLCBtX3ZhbHVl
KHZhbHVlKQogICAgIHsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjND
b25zdEZsb2F0VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNDb25zdEZsb2F0VmFsdWUuaAkocmV2aXNpb24gMTk1OTAxKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzQ29uc3RGbG9hdFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTY4LDggKzY4
LDggQEAgcHJvdGVjdGVkOgogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOwog
Ci0gICAgQ29uc3RGbG9hdFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcmlnaW4gb3JpZ2luLCBmbG9h
dCB2YWx1ZSkKLSAgICAgICAgOiBWYWx1ZShpbmRleCwgQ2hlY2tlZE9wY29kZSwgQ29uc3RGbG9h
dCwgRmxvYXQsIG9yaWdpbikKKyAgICBDb25zdEZsb2F0VmFsdWUoT3JpZ2luIG9yaWdpbiwgZmxv
YXQgdmFsdWUpCisgICAgICAgIDogVmFsdWUoQ2hlY2tlZE9wY29kZSwgQ29uc3RGbG9hdCwgRmxv
YXQsIG9yaWdpbikKICAgICAgICAgLCBtX3ZhbHVlKHZhbHVlKQogICAgIHsKICAgICB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb250cm9sVmFsdWUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb250cm9sVmFsdWUuaAkocmV2aXNpb24gMTk1
OTAxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29udHJvbFZhbHVlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEwOSw4ICsxMDksOCBAQCBwcm90ZWN0ZWQ6CiAKICAgICAvLyBVc2UgdGhp
cyBmb3Igc3ViY2xhc3Nlcy4KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+Ci0g
ICAgQ29udHJvbFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBUeXBlIHR5cGUs
IE9yaWdpbiBvcmlnaW4sIEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCi0gICAgICAgIDogVmFsdWUo
aW5kZXgsIENoZWNrZWRPcGNvZGUsIG9wY29kZSwgdHlwZSwgb3JpZ2luLCBhcmd1bWVudHMuLi4p
CisgICAgQ29udHJvbFZhbHVlKE9wY29kZSBvcGNvZGUsIFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdp
biwgQXJndW1lbnRzLi4uIGFyZ3VtZW50cykKKyAgICAgICAgOiBWYWx1ZShDaGVja2VkT3Bjb2Rl
LCBvcGNvZGUsIHR5cGUsIG9yaWdpbiwgYXJndW1lbnRzLi4uKQogICAgIHsKICAgICAgICAgQVNT
RVJUKGFjY2VwdHMob3Bjb2RlKSk7CiAgICAgfQpAQCAtMTIyLDIyICsxMjIsMjIgQEAgcHJpdmF0
ZToKICAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOwogCiAgICAgLy8gVXNlIHRoaXMgZm9yIE9v
cHMuCi0gICAgQ29udHJvbFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBPcmln
aW4gb3JpZ2luKQotICAgICAgICA6IFZhbHVlKGluZGV4LCBDaGVja2VkT3Bjb2RlLCBvcGNvZGUs
IFZvaWQsIG9yaWdpbikKKyAgICBDb250cm9sVmFsdWUoT3Bjb2RlIG9wY29kZSwgT3JpZ2luIG9y
aWdpbikKKyAgICAgICAgOiBWYWx1ZShDaGVja2VkT3Bjb2RlLCBvcGNvZGUsIFZvaWQsIG9yaWdp
bikKICAgICB7CiAgICAgICAgIEFTU0VSVChvcGNvZGUgPT0gT29wcyk7CiAgICAgfQogCiAgICAg
Ly8gVXNlIHRoaXMgZm9yIFJldHVybi4KLSAgICBDb250cm9sVmFsdWUodW5zaWduZWQgaW5kZXgs
IE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiByZXN1bHQpCi0gICAgICAgIDog
VmFsdWUoaW5kZXgsIENoZWNrZWRPcGNvZGUsIG9wY29kZSwgVm9pZCwgb3JpZ2luLCByZXN1bHQp
CisgICAgQ29udHJvbFZhbHVlKE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBy
ZXN1bHQpCisgICAgICAgIDogVmFsdWUoQ2hlY2tlZE9wY29kZSwgb3Bjb2RlLCBWb2lkLCBvcmln
aW4sIHJlc3VsdCkKICAgICB7CiAgICAgICAgIEFTU0VSVChvcGNvZGUgPT0gUmV0dXJuKTsKICAg
ICB9CiAKICAgICAvLyBVc2UgdGhpcyBmb3IgSnVtcC4KLSAgICBDb250cm9sVmFsdWUodW5zaWdu
ZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4sIGNvbnN0IEZyZXF1ZW50ZWRC
bG9jayYgdGFyZ2V0KQotICAgICAgICA6IFZhbHVlKGluZGV4LCBDaGVja2VkT3Bjb2RlLCBvcGNv
ZGUsIFZvaWQsIG9yaWdpbikKKyAgICBDb250cm9sVmFsdWUoT3Bjb2RlIG9wY29kZSwgT3JpZ2lu
IG9yaWdpbiwgY29uc3QgRnJlcXVlbnRlZEJsb2NrJiB0YXJnZXQpCisgICAgICAgIDogVmFsdWUo
Q2hlY2tlZE9wY29kZSwgb3Bjb2RlLCBWb2lkLCBvcmlnaW4pCiAgICAgewogICAgICAgICBBU1NF
UlQob3Bjb2RlID09IEp1bXApOwogICAgICAgICBtX3N1Y2Nlc3NvcnMuYXBwZW5kKHRhcmdldCk7
CkBAIC0xNDUsOSArMTQ1LDkgQEAgcHJpdmF0ZToKIAogICAgIC8vIFVzZSB0aGlzIGZvciBCcmFu
Y2guCiAgICAgQ29udHJvbFZhbHVlKAotICAgICAgICB1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9w
Y29kZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIHByZWRpY2F0ZSwKKyAgICAgICAgT3Bjb2RlIG9w
Y29kZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIHByZWRpY2F0ZSwKICAgICAgICAgY29uc3QgRnJl
cXVlbnRlZEJsb2NrJiB5ZXMsIGNvbnN0IEZyZXF1ZW50ZWRCbG9jayYgbm8pCi0gICAgICAgIDog
VmFsdWUoaW5kZXgsIENoZWNrZWRPcGNvZGUsIG9wY29kZSwgVm9pZCwgb3JpZ2luLCBwcmVkaWNh
dGUpCisgICAgICAgIDogVmFsdWUoQ2hlY2tlZE9wY29kZSwgb3Bjb2RlLCBWb2lkLCBvcmlnaW4s
IHByZWRpY2F0ZSkKICAgICB7CiAgICAgICAgIEFTU0VSVChvcGNvZGUgPT0gQnJhbmNoKTsKICAg
ICAgICAgbV9zdWNjZXNzb3JzLmFwcGVuZCh5ZXMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzTWVtb3J5VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNNZW1vcnlWYWx1ZS5oCShyZXZpc2lvbiAxOTU5MDEpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNNZW1vcnlWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03NSwxMCArNzUs
OCBAQCBwcml2YXRlOgogCiAgICAgLy8gVXNlIHRoaXMgZm9ybSBmb3IgTG9hZCAoYnV0IG5vdCBM
b2FkOFosIExvYWQ4Uywgb3IgYW55IG9mIHRoZSBMb2FkcyB0aGF0IGhhdmUgYSBzdWZmaXggdGhh
dAogICAgIC8vIGRlc2NyaWJlcyB0aGUgcmV0dXJuZWQgdHlwZSkuCi0gICAgTWVtb3J5VmFsdWUo
Ci0gICAgICAgIHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBUeXBlIHR5cGUsIE9yaWdp
biBvcmlnaW4sIFZhbHVlKiBwb2ludGVyLAotICAgICAgICBpbnQzMl90IG9mZnNldCA9IDApCi0g
ICAgICAgIDogVmFsdWUoaW5kZXgsIENoZWNrZWRPcGNvZGUsIG9wY29kZSwgdHlwZSwgb3JpZ2lu
LCBwb2ludGVyKQorICAgIE1lbW9yeVZhbHVlKE9wY29kZSBvcGNvZGUsIFR5cGUgdHlwZSwgT3Jp
Z2luIG9yaWdpbiwgVmFsdWUqIHBvaW50ZXIsIGludDMyX3Qgb2Zmc2V0ID0gMCkKKyAgICAgICAg
OiBWYWx1ZShDaGVja2VkT3Bjb2RlLCBvcGNvZGUsIHR5cGUsIG9yaWdpbiwgcG9pbnRlcikKICAg
ICAgICAgLCBtX29mZnNldChvZmZzZXQpCiAgICAgICAgICwgbV9yYW5nZShIZWFwUmFuZ2U6OnRv
cCgpKQogICAgIHsKQEAgLTEwNCwxNiArMTAyLDE0IEBAIHByaXZhdGU6CiAgICAgfQogCiAgICAg
Ly8gVXNlIHRoaXMgZm9ybSBmb3IgbG9hZHMgd2hlcmUgdGhlIHJldHVybiB0eXBlIGlzIGltcGxp
ZWQuCi0gICAgTWVtb3J5VmFsdWUodW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIE9yaWdp
biBvcmlnaW4sIFZhbHVlKiBwb2ludGVyLCBpbnQzMl90IG9mZnNldCA9IDApCi0gICAgICAgIDog
TWVtb3J5VmFsdWUoaW5kZXgsIG9wY29kZSwgSW50MzIsIG9yaWdpbiwgcG9pbnRlciwgb2Zmc2V0
KQorICAgIE1lbW9yeVZhbHVlKE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBw
b2ludGVyLCBpbnQzMl90IG9mZnNldCA9IDApCisgICAgICAgIDogTWVtb3J5VmFsdWUob3Bjb2Rl
LCBJbnQzMiwgb3JpZ2luLCBwb2ludGVyLCBvZmZzZXQpCiAgICAgewogICAgIH0KIAogICAgIC8v
IFVzZSB0aGlzIGZvcm0gZm9yIHN0b3Jlcy4KLSAgICBNZW1vcnlWYWx1ZSgKLSAgICAgICAgdW5z
aWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiB2YWx1ZSwg
VmFsdWUqIHBvaW50ZXIsCi0gICAgICAgIGludDMyX3Qgb2Zmc2V0ID0gMCkKLSAgICAgICAgOiBW
YWx1ZShpbmRleCwgQ2hlY2tlZE9wY29kZSwgb3Bjb2RlLCBWb2lkLCBvcmlnaW4sIHZhbHVlLCBw
b2ludGVyKQorICAgIE1lbW9yeVZhbHVlKE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4sIFZh
bHVlKiB2YWx1ZSwgVmFsdWUqIHBvaW50ZXIsIGludDMyX3Qgb2Zmc2V0ID0gMCkKKyAgICAgICAg
OiBWYWx1ZShDaGVja2VkT3Bjb2RlLCBvcGNvZGUsIFZvaWQsIG9yaWdpbiwgdmFsdWUsIHBvaW50
ZXIpCiAgICAgICAgICwgbV9vZmZzZXQob2Zmc2V0KQogICAgICAgICAsIG1fcmFuZ2UoSGVhcFJh
bmdlOjp0b3AoKSkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQYXRj
aHBvaW50VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1BhdGNocG9pbnRWYWx1ZS5jcHAJKHJldmlzaW9uIDE5NTkwMSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1BhdGNocG9pbnRWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDgg
KzQ5LDggQEAgVmFsdWUqIFBhdGNocG9pbnRWYWx1ZTo6Y2xvbmVJbXBsKCkgY29ucwogICAgIHJl
dHVybiBuZXcgUGF0Y2hwb2ludFZhbHVlKCp0aGlzKTsKIH0KIAotUGF0Y2hwb2ludFZhbHVlOjpQ
YXRjaHBvaW50VmFsdWUodW5zaWduZWQgaW5kZXgsIFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdpbikK
LSAgICA6IEJhc2UoaW5kZXgsIENoZWNrZWRPcGNvZGUsIFBhdGNocG9pbnQsIHR5cGUsIG9yaWdp
bikKK1BhdGNocG9pbnRWYWx1ZTo6UGF0Y2hwb2ludFZhbHVlKFR5cGUgdHlwZSwgT3JpZ2luIG9y
aWdpbikKKyAgICA6IEJhc2UoQ2hlY2tlZE9wY29kZSwgUGF0Y2hwb2ludCwgdHlwZSwgb3JpZ2lu
KQogICAgICwgZWZmZWN0cyhFZmZlY3RzOjpmb3JDYWxsKCkpCiAgICAgLCByZXN1bHRDb25zdHJh
aW50KHR5cGUgPT0gVm9pZCA/IFZhbHVlUmVwOjpXYXJtQW55IDogVmFsdWVSZXA6OlNvbWVSZWdp
c3RlcikKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRWYWx1
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRW
YWx1ZS5oCShyZXZpc2lvbiAxOTU5MDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQ
YXRjaHBvaW50VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtNzAsNyArNzAsNyBAQCBwcm90ZWN0
ZWQ6CiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7CiAKLSAgICBKU19FWFBP
UlRfUFJJVkFURSBQYXRjaHBvaW50VmFsdWUodW5zaWduZWQgaW5kZXgsIFR5cGUsIE9yaWdpbik7
CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgUGF0Y2hwb2ludFZhbHVlKFR5cGUsIE9yaWdpbik7CiB9
OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1Byb2NlZHVyZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1Byb2NlZHVyZS5oCShyZXZpc2lvbiAxOTU5MDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNQcm9jZWR1cmUuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2lu
Y2x1ZGUgIkIzT3BhcXVlQnlwcm9kdWN0cy5oIgogI2luY2x1ZGUgIkIzT3JpZ2luLmgiCiAjaW5j
bHVkZSAiQjNQQ1RvT3JpZ2luTWFwLmgiCisjaW5jbHVkZSAiQjNTcGFyc2VDb2xsZWN0aW9uLmgi
CiAjaW5jbHVkZSAiQjNTdGFja1Nsb3RLaW5kLmgiCiAjaW5jbHVkZSAiQjNUeXBlLmgiCiAjaW5j
bHVkZSAiQjNWYWx1ZUtleS5oIgpAQCAtMzcwLDE0ICszNzEsMTAgQEAgcHJpdmF0ZToKICAgICAK
ICAgICB2b2lkIHNldEJsb2NrT3JkZXJJbXBsKFZlY3RvcjxCYXNpY0Jsb2NrKj4mKTsKIAotICAg
IHNpemVfdCBhZGRTdGFja1Nsb3RJbmRleCgpOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHNpemVf
dCBhZGRWYWx1ZUluZGV4KCk7Ci0KLSAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPFN0YWNrU2xv
dD4+IG1fc3RhY2tTbG90czsKKyAgICBTcGFyc2VDb2xsZWN0aW9uPFN0YWNrU2xvdD4gbV9zdGFj
a1Nsb3RzOworICAgIFNwYXJzZUNvbGxlY3Rpb248VmFyaWFibGU+IG1fdmFyaWFibGVzOwogICAg
IFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QmFzaWNCbG9jaz4+IG1fYmxvY2tzOwotICAgIFZlY3Rv
cjxzdGQ6OnVuaXF1ZV9wdHI8VmFsdWU+PiBtX3ZhbHVlczsKLSAgICBWZWN0b3I8c2l6ZV90PiBt
X3N0YWNrU2xvdEluZGV4RnJlZUxpc3Q7Ci0gICAgVmVjdG9yPHNpemVfdD4gbV92YWx1ZUluZGV4
RnJlZUxpc3Q7CisgICAgU3BhcnNlQ29sbGVjdGlvbjxWYWx1ZT4gbV92YWx1ZXM7CiAgICAgc3Rk
Ojp1bmlxdWVfcHRyPENGRz4gbV9jZmc7CiAgICAgc3RkOjp1bmlxdWVfcHRyPERvbWluYXRvcnM+
IG1fZG9taW5hdG9yczsKICAgICBIYXNoU2V0PFZhbHVlS2V5PiBtX2Zhc3RDb25zdGFudHM7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTbG90QmFzZVZhbHVlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU2xvdEJhc2VWYWx1ZS5oCShyZXZpc2lv
biAxOTU5MDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTbG90QmFzZVZhbHVlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTUwLDggKzUwLDggQEAgcHJvdGVjdGVkOgogcHJpdmF0ZToKICAg
ICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOwogCi0gICAgU2xvdEJhc2VWYWx1ZSh1bnNpZ25lZCBp
bmRleCwgT3JpZ2luIG9yaWdpbiwgU3RhY2tTbG90KiBzbG90KQotICAgICAgICA6IFZhbHVlKGlu
ZGV4LCBDaGVja2VkT3Bjb2RlLCBTbG90QmFzZSwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKQorICAg
IFNsb3RCYXNlVmFsdWUoT3JpZ2luIG9yaWdpbiwgU3RhY2tTbG90KiBzbG90KQorICAgICAgICA6
IFZhbHVlKENoZWNrZWRPcGNvZGUsIFNsb3RCYXNlLCBwb2ludGVyVHlwZSgpLCBvcmlnaW4pCiAg
ICAgICAgICwgbV9zbG90KHNsb3QpCiAgICAgewogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1NwYXJzZUNvbGxlY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNTcGFyc2VDb2xsZWN0aW9uLmgJKHJldmlzaW9uIDApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTcGFyc2VDb2xsZWN0aW9uLmgJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwxMzggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2lmbmRlZiBCM1NwYXJzZUNvbGxlY3Rpb25faAorI2RlZmluZSBCM1NwYXJzZUNv
bGxlY3Rpb25faAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgPHd0Zi9TdGRMaWJF
eHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgQjMgeworCisvLyBCMzo6UHJvY2VkdXJlIGFuZCBBaXI6OkNvZGUgaGF2ZSBhIGxvdCBv
ZiBjb2xsZWN0aW9ucyBvZiBpbmRleGVkIHRoaW5ncy4gVGhpcyBoYXMgYWxsIG9mIHRoZQorLy8g
bG9naWMuCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBTcGFyc2VDb2xsZWN0aW9uIHsK
KyAgICB0eXBlZGVmIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8VD4+IFZlY3RvclR5cGU7CisgICAg
CitwdWJsaWM6CisgICAgU3BhcnNlQ29sbGVjdGlvbigpCisgICAgeworICAgIH0KKworICAgIFQq
IGFkZChzdGQ6OnVuaXF1ZV9wdHI8VD4gdmFsdWUpCisgICAgeworICAgICAgICBUKiByZXN1bHQg
PSB2YWx1ZS5nZXQoKTsKKyAgICAgICAgCisgICAgICAgIHNpemVfdCBpbmRleDsKKyAgICAgICAg
aWYgKG1faW5kZXhGcmVlTGlzdC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIGluZGV4ID0gbV92
ZWN0b3Iuc2l6ZSgpOworICAgICAgICAgICAgbV92ZWN0b3IuYXBwZW5kKG51bGxwdHIpOworICAg
ICAgICB9IGVsc2UKKyAgICAgICAgICAgIGluZGV4ID0gbV9pbmRleEZyZWVMaXN0LnRha2VMYXN0
KCk7CisKKyAgICAgICAgdmFsdWUtPm1faW5kZXggPSBpbmRleDsKKworICAgICAgICBtX3ZlY3Rv
cltpbmRleF0gPSBXVEZNb3ZlKHZhbHVlKTsKKworICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
IH0KKworICAgIHZvaWQgcmVtb3ZlKFQqIHZhbHVlKQorICAgIHsKKyAgICAgICAgUkVMRUFTRV9B
U1NFUlQobV92ZWN0b3JbdmFsdWUtPm1faW5kZXhdLmdldCgpID09IHZhbHVlKTsKKyAgICAgICAg
bV9pbmRleEZyZWVMaXN0LmFwcGVuZCh2YWx1ZS0+bV9pbmRleCk7CisgICAgICAgIG1fdmFsdWVz
W3ZhbHVlLT5tX2luZGV4XSA9IG51bGxwdHI7CisgICAgfQorCisgICAgdW5zaWduZWQgc2l6ZSgp
IGNvbnN0IHsgcmV0dXJuIG1fdmVjdG9yLnNpemUoKTsgfQorICAgIFQqIGF0KHVuc2lnbmVkIGlu
ZGV4KSBjb25zdCB7IHJldHVybiBtX3ZlY3RvcltpbmRleF07IH0KKyAgICBUKiBvcGVyYXRvcltd
KHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBhdChpbmRleCk7IH0KKworICAgIGNsYXNz
IGl0ZXJhdG9yIHsKKyAgICBwdWJsaWM6CisgICAgICAgIGl0ZXJhdG9yKCkKKyAgICAgICAgICAg
IDogbV9jb2xsZWN0aW9uKG51bGxwdHIpCisgICAgICAgICAgICAsIG1faW5kZXgoMCkKKyAgICAg
ICAgeworICAgICAgICB9CisKKyAgICAgICAgaXRlcmF0b3IoY29uc3QgU3BhcnNlQ29sbGVjdGlv
biYgY29sbGVjdGlvbiwgdW5zaWduZWQgaW5kZXgpCisgICAgICAgICAgICA6IG1fY29sbGVjdGlv
bigmY29sbGVjdGlvbikKKyAgICAgICAgICAgICwgbV9pbmRleChmaW5kSW5kZXgoaW5kZXgpKQor
ICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBUKiBvcGVyYXRvciooKQorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gbV9jb2xsZWN0aW9uLT5hdChtX2luZGV4KTsKKyAgICAgICAg
fQorCisgICAgICAgIGl0ZXJhdG9yJiBvcGVyYXRvcisrKCkKKyAgICAgICAgeworICAgICAgICAg
ICAgbV9pbmRleCA9IGZpbmROZXh0KG1faW5kZXggKyAxKTsKKyAgICAgICAgICAgIHJldHVybiAq
dGhpczsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBpdGVyYXRv
ciYgb3RoZXIpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChtX2NvbGxlY3Rp
b24gPT0gb3RoZXIubV9jb2xsZWN0aW9uKTsKKyAgICAgICAgICAgIHJldHVybiBtX2luZGV4ID09
IG90aGVyLm1faW5kZXg7CisgICAgICAgIH0KKworICAgICAgICBib29sIG9wZXJhdG9yIT0oY29u
c3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4g
ISgqdGhpcyA9PSBvdGhlcik7CisgICAgICAgIH0KKworICAgIHByaXZhdGU6CisgICAgICAgIHVu
c2lnbmVkIGZpbmROZXh0KHVuc2lnbmVkIGluZGV4KQorICAgICAgICB7CisgICAgICAgICAgICB3
aGlsZSAoaW5kZXggPCBtX2NvbGxlY3Rpb24tPnNpemUoKSAmJiAhbV9jb2xsZWN0aW9uLT5hdChp
bmRleCkpCisgICAgICAgICAgICAgICAgaW5kZXgrKzsKKyAgICAgICAgICAgIHJldHVybiBpbmRl
eDsKKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0IFNwYXJzZUNvbGxlY3Rpb24qIG1fY29sbGVj
dGlvbjsKKyAgICAgICAgdW5zaWdlZCBtX2luZGV4OworICAgIH07CisKKyAgICBpdGVyYXRvciBi
ZWdpbigpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKCp0aGlzLCAwKTsgfQorICAgIGl0ZXJhdG9y
IGVuZCgpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKCp0aGlzLCBzaXplKCkpOyB9CisKK3ByaXZh
dGU6CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxUPj4gbV92ZWN0b3I7CisgICAgVmVjdG9y
PHNpemVfdD4gbV9pbmRleEZyZWVMaXN0OworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIz
CisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNTcGFyc2VDb2xsZWN0
aW9uX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tTbG90LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja1Nsb3QuY3BwCShy
ZXZpc2lvbiAxOTU5MDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja1Nsb3Qu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSwxMyArNDEsMTIgQEAgdm9pZCBTdGFja1Nsb3Q6OmR1
bXAoUHJpbnRTdHJlYW0mIG91dCkgYwogCiB2b2lkIFN0YWNrU2xvdDo6ZGVlcER1bXAoUHJpbnRT
dHJlYW0mIG91dCkgY29uc3QKIHsKLSAgICBvdXQucHJpbnQoImJ5dGVTaXplID0gIiwgbV9ieXRl
U2l6ZSwgIiwgb2Zmc2V0RnJvbUZQID0gIiwgbV9vZmZzZXRGcm9tRlAsICIsIGtpbmQgPSAiLCBt
X2tpbmQpOworICAgIG91dC5wcmludCgiYnl0ZVNpemUgPSAiLCBtX2J5dGVTaXplLCAiLCBvZmZz
ZXRGcm9tRlAgPSAiLCBtX29mZnNldEZyb21GUCk7CiB9CiAKLVN0YWNrU2xvdDo6U3RhY2tTbG90
KHVuc2lnbmVkIGluZGV4LCB1bnNpZ25lZCBieXRlU2l6ZSwgU3RhY2tTbG90S2luZCBraW5kKQor
U3RhY2tTbG90OjpTdGFja1Nsb3QodW5zaWduZWQgaW5kZXgsIHVuc2lnbmVkIGJ5dGVTaXplKQog
ICAgIDogbV9pbmRleChpbmRleCkKICAgICAsIG1fYnl0ZVNpemUoYnl0ZVNpemUpCi0gICAgLCBt
X2tpbmQoa2luZCkKIHsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3Rh
Y2tTbG90LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tT
bG90LmgJKHJldmlzaW9uIDE5NTkwMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0
YWNrU2xvdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw2IEBACiAKICNpZiBFTkFCTEUo
QjNfSklUKQogCi0jaW5jbHVkZSAiQjNTdGFja1Nsb3RLaW5kLmgiCiAjaW5jbHVkZSA8d3RmL0Zh
c3RNYWxsb2MuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNpbmNsdWRlIDx3dGYv
UHJpbnRTdHJlYW0uaD4KQEAgLTQ5LDggKzQ4LDYgQEAgcHVibGljOgogICAgIH5TdGFja1Nsb3Qo
KTsKIAogICAgIHVuc2lnbmVkIGJ5dGVTaXplKCkgY29uc3QgeyByZXR1cm4gbV9ieXRlU2l6ZTsg
fQotICAgIFN0YWNrU2xvdEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQotICAg
IGJvb2wgaXNMb2NrZWQoKSBjb25zdCB7IHJldHVybiBtX2tpbmQgPT0gU3RhY2tTbG90S2luZDo6
TG9ja2VkOyB9CiAgICAgdW5zaWduZWQgaW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4OyB9
CiAKICAgICAvLyBUaGlzIGdldHMgYXNzaWduZWQgYXQgdGhlIGVuZCBvZiBjb21waWxhdGlvbi4g
QnV0LCB5b3UgY2FuIHRvdGFsbHkgcGluIHN0YWNrIHNsb3RzLiBVc2UgdGhlCkBAIC03MCwxMSAr
NjcsMTAgQEAgcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgQWlyOjpTdGFja1Nsb3Q7CiAgICAg
ZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKIAotICAgIFN0YWNrU2xvdCh1bnNpZ25lZCBpbmRleCwg
dW5zaWduZWQgYnl0ZVNpemUsIFN0YWNrU2xvdEtpbmQpOworICAgIFN0YWNrU2xvdCh1bnNpZ25l
ZCBpbmRleCwgdW5zaWduZWQgYnl0ZVNpemUpOwogCiAgICAgdW5zaWduZWQgbV9pbmRleDsKICAg
ICB1bnNpZ25lZCBtX2J5dGVTaXplOwotICAgIFN0YWNrU2xvdEtpbmQgbV9raW5kOwogICAgIGlu
dHB0cl90IG1fb2Zmc2V0RnJvbUZQIHsgMCB9OwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzU3RhY2tTbG90S2luZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzU3RhY2tTbG90S2luZC5jcHAJKHJldmlzaW9uIDE5NTkwMSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrU2xvdEtpbmQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xLDUyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBh
cmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
Ci0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
Ci0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkIzU3RhY2tTbG90S2luZC5o
IgotCi0jaWYgRU5BQkxFKEIzX0pJVCkKLQotI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgot
Ci1uYW1lc3BhY2UgV1RGIHsKLQotdXNpbmcgbmFtZXNwYWNlIEpTQzo6QjM7Ci0KLXZvaWQgcHJp
bnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBTdGFja1Nsb3RLaW5kIGtpbmQpCi17Ci0gICAg
c3dpdGNoIChraW5kKSB7Ci0gICAgY2FzZSBTdGFja1Nsb3RLaW5kOjpMb2NrZWQ6Ci0gICAgICAg
IG91dC5wcmludCgiTG9ja2VkIik7Ci0gICAgICAgIHJldHVybjsKLSAgICBjYXNlIFN0YWNrU2xv
dEtpbmQ6OkFub255bW91czoKLSAgICAgICAgb3V0LnByaW50KCJBbm9ueW1vdXMiKTsKLSAgICAg
ICAgcmV0dXJuOwotICAgIH0KLSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQot
Ci19IC8vIG5hbWVzcGFjZSBXVEYKLQotI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja1Nsb3RLaW5kLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tTbG90S2luZC5oCShyZXZpc2lvbiAxOTU5
MDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja1Nsb3RLaW5kLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsNjMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
LSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgQjNTdGFja1Nsb3RLaW5kX2gKLSNkZWZpbmUg
QjNTdGFja1Nsb3RLaW5kX2gKLQotI2lmIEVOQUJMRShCM19KSVQpCi0KLW5hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgQjMgewotCi1lbnVtIGNsYXNzIFN0YWNrU2xvdEtpbmQgOiB1aW50OF90IHsK
LSAgICAvLyBBIGxvY2tlZCBzdGFjayBzbG90IG5lZWRzIHRvIGJlIGtlcHQgZGlzam9pbnQgZnJv
bSBhbGwgb3RoZXJzIGJlY2F1c2Ugd2UgaW50ZW5kIHRvIGVzY2FwZQotICAgIC8vIGl0IGV2ZW4g
aWYgdGhhdCdzIG5vdCBvYnZpb3VzLiBUaGlzIGhhcHBlbnMgd2hlbiB0aGUgcnVudGltZSB0YWtl
cyB0aGUgYWRkcmVzcyBvZiBhIHN0YWNrCi0gICAgLy8gc2xvdC4KLSAgICBMb2NrZWQsCi0KLSAg
ICAvLyBUaGVzZSBzdGFjayBzbG90cyBiZWhhdmUgbGlrZSB2YXJpYWJsZXMuIFVuZGVmaW5lZCBi
ZWhhdmlvciBoYXBwZW5zIGlmIHlvdSBzdG9yZSBsZXNzIHRoYW4KLSAgICAvLyB0aGUgd2lkdGgg
b2YgdGhlIHNsb3QuCi0gICAgQW5vbnltb3VzCi0KLSAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGFk
ZCBhIHRoaXJkIG1vZGUsIHdoaWNoIG1lYW5zIHRoYXQgdGhlIHN0YWNrIHNsb3Qgd2lsbCBiZSBy
ZWFkIGFzeW5jaHJvbm91c2x5Ci0gICAgLy8gYXMgd2l0aCBMb2NrZWQsIGJ1dCBuZXZlciB3cml0
dGVuIHRvIGFzeW5jaHJvbm91c2x5LiBUaGVuLCBBaXIgY291bGQgb3B0aW1pemUgc3BpbGxpbmcg
YW5kCi0gICAgLy8gZmlsbGluZyBieSB0cmFja2luZyB3aGV0aGVyIHRoZSB2YWx1ZSBoYWQgYmVl
biBzdG9yZWQgdG8gYSByZWFkLW9ubHkgbG9ja2VkIHNsb3QuIElmIGl0IGhhZCwKLSAgICAvLyB0
aGVuIHdlIGNhbiByZWZpbGwgZnJvbSB0aGF0IHNsb3QuCi0gICAgLy8gaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDU4NwotfTsKLQotfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkIzCi0KLW5hbWVzcGFjZSBXVEYgewotCi1jbGFzcyBQcmludFN0cmVhbTsKLQotdm9pZCBw
cmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpCMzo6U3RhY2tTbG90S2luZCk7Ci0KLX0g
Ly8gbmFtZXNwYWNlIFdURgotCi0jZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKLQotI2VuZGlmIC8v
IEIzU3RhY2tTbG90S2luZF9oCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0
YWNrbWFwVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1N0YWNrbWFwVmFsdWUuY3BwCShyZXZpc2lvbiAxOTU5MDEpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNTdGFja21hcFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODMsOCArODMs
OCBAQCB2b2lkIFN0YWNrbWFwVmFsdWU6OmR1bXBNZXRhKENvbW1hUHJpbnRlCiAgICAgICAgICIs
IGxhdGVDbG9iYmVyZWQgPSAiLCBtX2xhdGVDbG9iYmVyZWQsICIsIHVzZWRSZWdpc3RlcnMgPSAi
LCBtX3VzZWRSZWdpc3RlcnMpOwogfQogCi1TdGFja21hcFZhbHVlOjpTdGFja21hcFZhbHVlKHVu
c2lnbmVkIGluZGV4LCBDaGVja2VkT3Bjb2RlVGFnLCBPcGNvZGUgb3Bjb2RlLCBUeXBlIHR5cGUs
IE9yaWdpbiBvcmlnaW4pCi0gICAgOiBWYWx1ZShpbmRleCwgQ2hlY2tlZE9wY29kZSwgb3Bjb2Rl
LCB0eXBlLCBvcmlnaW4pCitTdGFja21hcFZhbHVlOjpTdGFja21hcFZhbHVlKENoZWNrZWRPcGNv
ZGVUYWcsIE9wY29kZSBvcGNvZGUsIFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdpbikKKyAgICA6IFZh
bHVlKENoZWNrZWRPcGNvZGUsIG9wY29kZSwgdHlwZSwgb3JpZ2luKQogewogICAgIEFTU0VSVChh
Y2NlcHRzKG9wY29kZSkpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3Rh
Y2ttYXBWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0
YWNrbWFwVmFsdWUuaAkocmV2aXNpb24gMTk1OTAxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzU3RhY2ttYXBWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yODQsNyArMjg0LDcgQEAg
cHJvdGVjdGVkOgogICAgIHZvaWQgZHVtcENoaWxkcmVuKENvbW1hUHJpbnRlciYsIFByaW50U3Ry
ZWFtJikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdm9pZCBkdW1wTWV0YShDb21tYVByaW50ZXImLCBQ
cmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgU3RhY2ttYXBWYWx1ZSh1bnNpZ25l
ZCBpbmRleCwgQ2hlY2tlZE9wY29kZVRhZywgT3Bjb2RlLCBUeXBlLCBPcmlnaW4pOworICAgIFN0
YWNrbWFwVmFsdWUoQ2hlY2tlZE9wY29kZVRhZywgT3Bjb2RlLCBUeXBlLCBPcmlnaW4pOwogCiBw
cml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBDaGVja1NwZWNpYWw7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNTd2l0Y2hWYWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzU3dpdGNoVmFsdWUuY3BwCShyZXZpc2lvbiAxOTU5MDEpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTd2l0Y2hWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTY4LDkgKzY4LDggQEAgVmFsdWUqIFN3aXRjaFZhbHVlOjpjbG9uZUltcGwoKSBjb25zdAog
ICAgIHJldHVybiBuZXcgU3dpdGNoVmFsdWUoKnRoaXMpOwogfQogCi1Td2l0Y2hWYWx1ZTo6U3dp
dGNoVmFsdWUoCi0gICAgdW5zaWduZWQgaW5kZXgsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBjaGls
ZCwgY29uc3QgRnJlcXVlbnRlZEJsb2NrJiBmYWxsVGhyb3VnaCkKLSAgICA6IENvbnRyb2xWYWx1
ZShpbmRleCwgU3dpdGNoLCBWb2lkLCBvcmlnaW4sIGNoaWxkKQorU3dpdGNoVmFsdWU6OlN3aXRj
aFZhbHVlKE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBjaGlsZCwgY29uc3QgRnJlcXVlbnRlZEJsb2Nr
JiBmYWxsVGhyb3VnaCkKKyAgICA6IENvbnRyb2xWYWx1ZShTd2l0Y2gsIFZvaWQsIG9yaWdpbiwg
Y2hpbGQpCiB7CiAgICAgbV9zdWNjZXNzb3JzLmFwcGVuZChmYWxsVGhyb3VnaCk7CiB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTd2l0Y2hWYWx1ZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N3aXRjaFZhbHVlLmgJKHJldmlzaW9uIDE5NTkw
MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N3aXRjaFZhbHVlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEyMSw4ICsxMjEsNyBAQCBwcm90ZWN0ZWQ6CiBwcml2YXRlOgogICAgIGZyaWVu
ZCBjbGFzcyBQcm9jZWR1cmU7CiAKLSAgICBKU19FWFBPUlRfUFJJVkFURSBTd2l0Y2hWYWx1ZSgK
LSAgICAgICAgdW5zaWduZWQgaW5kZXgsIE9yaWdpbiwgVmFsdWUqIGNoaWxkLCBjb25zdCBGcmVx
dWVudGVkQmxvY2smIGZhbGxUaHJvdWdoKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBTd2l0Y2hW
YWx1ZShPcmlnaW4sIFZhbHVlKiBjaGlsZCwgY29uc3QgRnJlcXVlbnRlZEJsb2NrJiBmYWxsVGhy
b3VnaCk7CiAKICAgICBWZWN0b3I8aW50NjRfdD4gbV92YWx1ZXM7CiB9OwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNWYWx1ZS5oCShyZXZpc2lvbiAxOTU5MDEpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNDMsMjcgKzI0MywyNCBA
QCBwcm90ZWN0ZWQ6CiAgICAgLy8gSW5zdGFudGlhdGUgdmFsdWVzIHZpYSBQcm9jZWR1cmUuCiAg
ICAgLy8gVGhpcyBmb3JtIHJlcXVpcmVzIHNwZWNpZnlpbmcgdGhlIHR5cGUgZXhwbGljaXRseToK
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+Ci0gICAgZXhwbGljaXQgVmFsdWUo
dW5zaWduZWQgaW5kZXgsIENoZWNrZWRPcGNvZGVUYWcsIE9wY29kZSBvcGNvZGUsIFR5cGUgdHlw
ZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIGZpcnN0Q2hpbGQsIEFyZ3VtZW50cy4uLiBhcmd1bWVu
dHMpCi0gICAgICAgIDogbV9pbmRleChpbmRleCkKLSAgICAgICAgLCBtX29wY29kZShvcGNvZGUp
CisgICAgZXhwbGljaXQgVmFsdWUoQ2hlY2tlZE9wY29kZVRhZywgT3Bjb2RlIG9wY29kZSwgVHlw
ZSB0eXBlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogZmlyc3RDaGlsZCwgQXJndW1lbnRzLi4uIGFy
Z3VtZW50cykKKyAgICAgICAgOiBtX29wY29kZShvcGNvZGUpCiAgICAgICAgICwgbV90eXBlKHR5
cGUpCiAgICAgICAgICwgbV9vcmlnaW4ob3JpZ2luKQogICAgICAgICAsIG1fY2hpbGRyZW57IGZp
cnN0Q2hpbGQsIGFyZ3VtZW50cy4uLiB9CiAgICAgewogICAgIH0KICAgICAvLyBUaGlzIGZvcm0g
aXMgZm9yIHNwZWNpZnlpbmcgdGhlIHR5cGUgZXhwbGljaXRseSB3aGVuIHRoZSBvcGNvZGUgaGFz
IG5vIGNoaWxkcmVuOgotICAgIGV4cGxpY2l0IFZhbHVlKHVuc2lnbmVkIGluZGV4LCBDaGVja2Vk
T3Bjb2RlVGFnLCBPcGNvZGUgb3Bjb2RlLCBUeXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4pCi0gICAg
ICAgIDogbV9pbmRleChpbmRleCkKLSAgICAgICAgLCBtX29wY29kZShvcGNvZGUpCisgICAgZXhw
bGljaXQgVmFsdWUoQ2hlY2tlZE9wY29kZVRhZywgT3Bjb2RlIG9wY29kZSwgVHlwZSB0eXBlLCBP
cmlnaW4gb3JpZ2luKQorICAgICAgICA6IG1fb3Bjb2RlKG9wY29kZSkKICAgICAgICAgLCBtX3R5
cGUodHlwZSkKICAgICAgICAgLCBtX29yaWdpbihvcmlnaW4pCiAgICAgewogICAgIH0KICAgICAv
LyBUaGlzIGZvcm0gaXMgZm9yIHRob3NlIG9wY29kZXMgdGhhdCBjYW4gaW5mZXIgdGhlaXIgdHlw
ZSBmcm9tIHRoZSBvcGNvZGUgYW5kIGZpcnN0IGNoaWxkOgogICAgIHRlbXBsYXRlPHR5cGVuYW1l
Li4uIEFyZ3VtZW50cz4KLSAgICBleHBsaWNpdCBWYWx1ZSh1bnNpZ25lZCBpbmRleCwgQ2hlY2tl
ZE9wY29kZVRhZywgT3Bjb2RlIG9wY29kZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIGZpcnN0Q2hp
bGQpCi0gICAgICAgIDogbV9pbmRleChpbmRleCkKLSAgICAgICAgLCBtX29wY29kZShvcGNvZGUp
CisgICAgZXhwbGljaXQgVmFsdWUoQ2hlY2tlZE9wY29kZVRhZywgT3Bjb2RlIG9wY29kZSwgT3Jp
Z2luIG9yaWdpbiwgVmFsdWUqIGZpcnN0Q2hpbGQpCisgICAgICAgIDogbV9vcGNvZGUob3Bjb2Rl
KQogICAgICAgICAsIG1fdHlwZSh0eXBlRm9yKG9wY29kZSwgZmlyc3RDaGlsZCkpCiAgICAgICAg
ICwgbV9vcmlnaW4ob3JpZ2luKQogICAgICAgICAsIG1fY2hpbGRyZW57IGZpcnN0Q2hpbGQgfQpA
QCAtMjcxLDkgKzI2OCw4IEBAIHByb3RlY3RlZDoKICAgICB9CiAgICAgLy8gVGhpcyBmb3JtIGlz
IGZvciB0aG9zZSBvcGNvZGVzIHRoYXQgY2FuIGluZmVyIHRoZWlyIHR5cGUgZnJvbSB0aGUgb3Bj
b2RlIGFuZCBmaXJzdCBhbmQgc2Vjb25kIGNoaWxkOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4u
IEFyZ3VtZW50cz4KLSAgICBleHBsaWNpdCBWYWx1ZSh1bnNpZ25lZCBpbmRleCwgQ2hlY2tlZE9w
Y29kZVRhZywgT3Bjb2RlIG9wY29kZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIGZpcnN0Q2hpbGQs
IFZhbHVlKiBzZWNvbmRDaGlsZCwgQXJndW1lbnRzLi4uIGFyZ3VtZW50cykKLSAgICAgICAgOiBt
X2luZGV4KGluZGV4KQotICAgICAgICAsIG1fb3Bjb2RlKG9wY29kZSkKKyAgICBleHBsaWNpdCBW
YWx1ZShDaGVja2VkT3Bjb2RlVGFnLCBPcGNvZGUgb3Bjb2RlLCBPcmlnaW4gb3JpZ2luLCBWYWx1
ZSogZmlyc3RDaGlsZCwgVmFsdWUqIHNlY29uZENoaWxkLCBBcmd1bWVudHMuLi4gYXJndW1lbnRz
KQorICAgICAgICA6IG1fb3Bjb2RlKG9wY29kZSkKICAgICAgICAgLCBtX3R5cGUodHlwZUZvcihv
cGNvZGUsIGZpcnN0Q2hpbGQsIHNlY29uZENoaWxkKSkKICAgICAgICAgLCBtX29yaWdpbihvcmln
aW4pCiAgICAgICAgICwgbV9jaGlsZHJlbnsgZmlyc3RDaGlsZCwgc2Vjb25kQ2hpbGQsIGFyZ3Vt
ZW50cy4uLiB9CkBAIC0yODEsMjUgKzI3NywyMiBAQCBwcm90ZWN0ZWQ6CiAgICAgfQogICAgIC8v
IFRoaXMgZm9ybSBpcyBmb3IgdGhvc2Ugb3Bjb2RlcyB0aGF0IGNhbiBpbmZlciB0aGVpciB0eXBl
IGZyb20gdGhlIG9wY29kZSBhbG9uZSwgYW5kIHRoYXQgZG9uJ3QKICAgICAvLyB0YWtlIGFueSBh
cmd1bWVudHM6Ci0gICAgZXhwbGljaXQgVmFsdWUodW5zaWduZWQgaW5kZXgsIENoZWNrZWRPcGNv
ZGVUYWcsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4pCi0gICAgICAgIDogbV9pbmRleChp
bmRleCkKLSAgICAgICAgLCBtX29wY29kZShvcGNvZGUpCisgICAgZXhwbGljaXQgVmFsdWUoQ2hl
Y2tlZE9wY29kZVRhZywgT3Bjb2RlIG9wY29kZSwgT3JpZ2luIG9yaWdpbikKKyAgICAgICAgOiBt
X29wY29kZShvcGNvZGUpCiAgICAgICAgICwgbV90eXBlKHR5cGVGb3Iob3Bjb2RlLCBudWxscHRy
KSkKICAgICAgICAgLCBtX29yaWdpbihvcmlnaW4pCiAgICAgewogICAgIH0KICAgICAvLyBVc2Ug
dGhpcyBmb3JtIGZvciB2YXJhcmdzLgotICAgIGV4cGxpY2l0IFZhbHVlKHVuc2lnbmVkIGluZGV4
LCBDaGVja2VkT3Bjb2RlVGFnLCBPcGNvZGUgb3Bjb2RlLCBUeXBlIHR5cGUsIE9yaWdpbiBvcmln
aW4sIGNvbnN0IEFkamFjZW5jeUxpc3QmIGNoaWxkcmVuKQotICAgICAgICA6IG1faW5kZXgoaW5k
ZXgpCi0gICAgICAgICwgbV9vcGNvZGUob3Bjb2RlKQorICAgIGV4cGxpY2l0IFZhbHVlKENoZWNr
ZWRPcGNvZGVUYWcsIE9wY29kZSBvcGNvZGUsIFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdpbiwgY29u
c3QgQWRqYWNlbmN5TGlzdCYgY2hpbGRyZW4pCisgICAgICAgIDogbV9vcGNvZGUob3Bjb2RlKQog
ICAgICAgICAsIG1fdHlwZSh0eXBlKQogICAgICAgICAsIG1fb3JpZ2luKG9yaWdpbikKICAgICAg
ICAgLCBtX2NoaWxkcmVuKGNoaWxkcmVuKQogICAgIHsKICAgICB9Ci0gICAgZXhwbGljaXQgVmFs
dWUodW5zaWduZWQgaW5kZXgsIENoZWNrZWRPcGNvZGVUYWcsIE9wY29kZSBvcGNvZGUsIFR5cGUg
dHlwZSwgT3JpZ2luIG9yaWdpbiwgQWRqYWNlbmN5TGlzdCYmIGNoaWxkcmVuKQotICAgICAgICA6
IG1faW5kZXgoaW5kZXgpCi0gICAgICAgICwgbV9vcGNvZGUob3Bjb2RlKQorICAgIGV4cGxpY2l0
IFZhbHVlKENoZWNrZWRPcGNvZGVUYWcsIE9wY29kZSBvcGNvZGUsIFR5cGUgdHlwZSwgT3JpZ2lu
IG9yaWdpbiwgQWRqYWNlbmN5TGlzdCYmIGNoaWxkcmVuKQorICAgICAgICA6IG1fb3Bjb2RlKG9w
Y29kZSkKICAgICAgICAgLCBtX3R5cGUodHlwZSkKICAgICAgICAgLCBtX29yaWdpbihvcmlnaW4p
CiAgICAgICAgICwgbV9jaGlsZHJlbihXVEZNb3ZlKGNoaWxkcmVuKSkKQEAgLTMwOSw4ICszMDIs
OCBAQCBwcm90ZWN0ZWQ6CiAgICAgLy8gVGhpcyBpcyB0aGUgY29uc3RydWN0b3IgeW91IGVuZCB1
cCBhY3R1YWxseSBjYWxsaW5nLCBpZiB5b3UncmUgaW5zdGFudGlhdGluZyBWYWx1ZQogICAgIC8v
IGRpcmVjdGx5LgogICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KLSAgICBleHBs
aWNpdCBWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgQXJndW1lbnRzJiYuLi4g
YXJndW1lbnRzKQotICAgICAgICA6IFZhbHVlKGluZGV4LCBDaGVja2VkT3Bjb2RlLCBvcGNvZGUs
IHN0ZDo6Zm9yd2FyZDxBcmd1bWVudHM+KGFyZ3VtZW50cykuLi4pCisgICAgZXhwbGljaXQgVmFs
dWUoT3Bjb2RlIG9wY29kZSwgQXJndW1lbnRzJiYuLi4gYXJndW1lbnRzKQorICAgICAgICA6IFZh
bHVlKENoZWNrZWRPcGNvZGUsIG9wY29kZSwgc3RkOjpmb3J3YXJkPEFyZ3VtZW50cz4oYXJndW1l
bnRzKS4uLikKICAgICB7CiAgICAgICAgIGNoZWNrT3Bjb2RlKG9wY29kZSk7CiAgICAgfQpAQCAt
MzIxLDcgKzMxNCw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIFR5cGUgdHlwZUZvcihPcGNvZGUs
IFZhbHVlKiBmaXJzdENoaWxkLCBWYWx1ZSogc2Vjb25kQ2hpbGQgPSBudWxscHRyKTsKIAogICAg
IC8vIFRoaXMgZ3JvdXAgb2YgZmllbGRzIGlzIGFycmFuZ2VkIHRvIGZpdCBpbiA2NCBiaXRzLgot
ICAgIHVuc2lnbmVkIG1faW5kZXg7CisgICAgdW5zaWduZWQgbV9pbmRleCB7IFVJTlRfTUFYIH07
CiAgICAgT3Bjb2RlIG1fb3Bjb2RlOwogICAgIFR5cGUgbV90eXBlOwogICAgIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTdGFja1Nsb3RLaW5kLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclN0YWNrU2xvdEtpbmQuY3BwCShy
ZXZpc2lvbiAxOTU5MDEpCShmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrU2xv
dEtpbmQuY3BwOjE5NTkwMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3Rh
Y2tTbG90S2luZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiQjNTdGFja1Nsb3RLaW5kLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisj
aW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBXVEYgeworCit1c2luZyBu
YW1lc3BhY2UgSlNDOjpCMzsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQs
IFN0YWNrU2xvdEtpbmQga2luZCkKK3sKKyAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICBjYXNlIFN0
YWNrU2xvdEtpbmQ6OkxvY2tlZDoKKyAgICAgICAgb3V0LnByaW50KCJMb2NrZWQiKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIGNhc2UgU3RhY2tTbG90S2luZDo6QW5vbnltb3VzOgorICAgICAgICBv
dXQucHJpbnQoIkFub255bW91cyIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5k
aWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyU3RhY2tTbG90S2luZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyU3RhY2tTbG90S2luZC5oCShyZXZpc2lvbiAxOTU5MDEpCShmcm9tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrU2xvdEtpbmQuaDoxOTU5MDEpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpclN0YWNrU2xvdEtpbmQuaAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDYzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4g
CisgKi8KKworI2lmbmRlZiBCM1N0YWNrU2xvdEtpbmRfaAorI2RlZmluZSBCM1N0YWNrU2xvdEtp
bmRfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBC
MyB7CisKK2VudW0gY2xhc3MgU3RhY2tTbG90S2luZCA6IHVpbnQ4X3QgeworICAgIC8vIEEgbG9j
a2VkIHN0YWNrIHNsb3QgbmVlZHMgdG8gYmUga2VwdCBkaXNqb2ludCBmcm9tIGFsbCBvdGhlcnMg
YmVjYXVzZSB3ZSBpbnRlbmQgdG8gZXNjYXBlCisgICAgLy8gaXQgZXZlbiBpZiB0aGF0J3Mgbm90
IG9idmlvdXMuIFRoaXMgaGFwcGVucyB3aGVuIHRoZSBydW50aW1lIHRha2VzIHRoZSBhZGRyZXNz
IG9mIGEgc3RhY2sKKyAgICAvLyBzbG90LgorICAgIExvY2tlZCwKKworICAgIC8vIFRoZXNlIHN0
YWNrIHNsb3RzIGJlaGF2ZSBsaWtlIHZhcmlhYmxlcy4gVW5kZWZpbmVkIGJlaGF2aW9yIGhhcHBl
bnMgaWYgeW91IHN0b3JlIGxlc3MgdGhhbgorICAgIC8vIHRoZSB3aWR0aCBvZiB0aGUgc2xvdC4K
KyAgICBBbm9ueW1vdXMKKworICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYWRkIGEgdGhpcmQgbW9k
ZSwgd2hpY2ggbWVhbnMgdGhhdCB0aGUgc3RhY2sgc2xvdCB3aWxsIGJlIHJlYWQgYXN5bmNocm9u
b3VzbHkKKyAgICAvLyBhcyB3aXRoIExvY2tlZCwgYnV0IG5ldmVyIHdyaXR0ZW4gdG8gYXN5bmNo
cm9ub3VzbHkuIFRoZW4sIEFpciBjb3VsZCBvcHRpbWl6ZSBzcGlsbGluZyBhbmQKKyAgICAvLyBm
aWxsaW5nIGJ5IHRyYWNraW5nIHdoZXRoZXIgdGhlIHZhbHVlIGhhZCBiZWVuIHN0b3JlZCB0byBh
IHJlYWQtb25seSBsb2NrZWQgc2xvdC4gSWYgaXQgaGFkLAorICAgIC8vIHRoZW4gd2UgY2FuIHJl
ZmlsbCBmcm9tIHRoYXQgc2xvdC4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTUwNTg3Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworbmFt
ZXNwYWNlIFdURiB7CisKK2NsYXNzIFByaW50U3RyZWFtOworCit2b2lkIHByaW50SW50ZXJuYWwo
UHJpbnRTdHJlYW0mLCBKU0M6OkIzOjpTdGFja1Nsb3RLaW5kKTsKKworfSAvLyBuYW1lc3BhY2Ug
V1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNTdGFja1Nsb3RL
aW5kX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTdGFja1Nsb3RL
aW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTdGFj
a1Nsb3RLaW5kLmgJKHdvcmtpbmcgY29weSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyU3RhY2tTbG90S2luZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMywyMiArMjMsMjYgQEAK
ICAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAogICovCiAKLSNpZm5kZWYgQjNTdGFja1Nsb3RLaW5kX2gKLSNkZWZp
bmUgQjNTdGFja1Nsb3RLaW5kX2gKKyNpZm5kZWYgQWlyU3RhY2tTbG90S2luZF9oCisjZGVmaW5l
IEFpclN0YWNrU2xvdEtpbmRfaAogCiAjaWYgRU5BQkxFKEIzX0pJVCkKIAotbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBCMyB7CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNw
YWNlIEFpciB7CiAKIGVudW0gY2xhc3MgU3RhY2tTbG90S2luZCA6IHVpbnQ4X3QgewotICAgIC8v
IEEgbG9ja2VkIHN0YWNrIHNsb3QgbmVlZHMgdG8gYmUga2VwdCBkaXNqb2ludCBmcm9tIGFsbCBv
dGhlcnMgYmVjYXVzZSB3ZSBpbnRlbmQgdG8gZXNjYXBlCi0gICAgLy8gaXQgZXZlbiBpZiB0aGF0
J3Mgbm90IG9idmlvdXMuIFRoaXMgaGFwcGVucyB3aGVuIHRoZSBydW50aW1lIHRha2VzIHRoZSBh
ZGRyZXNzIG9mIGEgc3RhY2sKLSAgICAvLyBzbG90LgorICAgIC8vIEEgbG9ja2VkIHN0YWNrIHNs
b3QgaXMgYW4gYXJlYSBvZiBzdGFjayByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudC4gSXQgY2Fubm90
IGJlIGtpbGxlZC4gVGhlCisgICAgLy8gY2xpZW50IGNhbiBnZXQgaXRzIEZQIG9mZnNldCBhbmQg
d3JpdGUgdG8gaXQgZnJvbSBzdGFjayB3YWxraW5nIGNvZGUsIHNvIHdlIG11c3QgYXNzdW1lCisg
ICAgLy8gdGhhdCByZWFkcyBhbmQgd3JpdGVzIHRvIGEgbG9ja2VkIHN0YWNrIHNsb3QgY2FuIGJl
IGNsb2JiZXJlZCB0aGUgc2FtZSB3YXkgYXMgcmVhZHMgYW5kCisgICAgLy8gd3JpdGVzIHRvIGFu
eSBtZW1vcnkgbG9jYXRpb24uCiAgICAgTG9ja2VkLAogCi0gICAgLy8gVGhlc2Ugc3RhY2sgc2xv
dHMgYmVoYXZlIGxpa2UgdmFyaWFibGVzLiBVbmRlZmluZWQgYmVoYXZpb3IgaGFwcGVucyBpZiB5
b3Ugc3RvcmUgbGVzcyB0aGFuCi0gICAgLy8gdGhlIHdpZHRoIG9mIHRoZSBzbG90LgotICAgIEFu
b255bW91cworICAgIC8vIEEgc3BpbGwgc2xvdC4gVGhlc2UgaGF2ZSBmdW5kYW1lbnRhbGx5IGRp
ZmZlcmVudCBiZWhhdmlvciB0aGFuIGEgdHlwaWNhbCBtZW1vcnkgbG9jYXRpb24uCisgICAgLy8g
VGhleSBhcmUgbG93ZXJlZCB0byBmcm9tIHRlbXBvcmFyaWVzLiBUaGlzIG1lYW5zIGZvciBleGFt
cGxlIHRoYXQgYSAzMi1iaXQgWkRlZiBzdG9yZSB0byBhCisgICAgLy8gOCBieXRlIHN0YWNrIHNs
b3Qgd2lsbCB6ZXJvIHRoZSB0b3AgNCBieXRlcywgZXZlbiB0aG91Z2ggYSAzMi1iaXQgWkRlZiBz
dG9yZSB0byBhbnkgb3RoZXIKKyAgICAvLyBraW5kIG9mIG1lbW9yeSBsb2NhdGlvbiB3b3VsZCBk
byBubyBzdWNoIHRoaW5nLiBVc2VBZGRyIG9uIGEgc3BpbGwgc2xvdCBpcyBub3QgYWxsb3dlZCwg
c28KKyAgICAvLyB0aGV5IG5ldmVyIGVzY2FwZS4KKyAgICBTcGlsbAogCiAgICAgLy8gRklYTUU6
IFdlIHNob3VsZCBhZGQgYSB0aGlyZCBtb2RlLCB3aGljaCBtZWFucyB0aGF0IHRoZSBzdGFjayBz
bG90IHdpbGwgYmUgcmVhZCBhc3luY2hyb25vdXNseQogICAgIC8vIGFzIHdpdGggTG9ja2VkLCBi
dXQgbmV2ZXIgd3JpdHRlbiB0byBhc3luY2hyb25vdXNseS4gVGhlbiwgQWlyIGNvdWxkIG9wdGlt
aXplIHNwaWxsaW5nIGFuZApAQCAtNDcsNyArNTEsNyBAQCBlbnVtIGNsYXNzIFN0YWNrU2xvdEtp
bmQgOiB1aW50OF90IHsKICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTUwNTg3CiB9OwogCi19IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKK30gfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkIzOjpBaXIKIAogbmFtZXNwYWNlIFdURiB7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>270341</attachid>
            <date>2016-01-31 11:15:58 -0800</date>
            <delta_ts>2016-01-31 11:42:58 -0800</delta_ts>
            <desc>moar</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>84359</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0FyZ3VtZW50UmVnVmFsdWUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNBcmd1bWVudFJlZ1ZhbHVlLmgJ
KHJldmlzaW9uIDE5NTkwMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0FyZ3VtZW50
UmVnVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtNDksOCArNDksOCBAQCBwcm90ZWN0ZWQ6CiBw
cml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7CiAKLSAgICBBcmd1bWVudFJlZ1Zh
bHVlKHVuc2lnbmVkIGluZGV4LCBPcmlnaW4gb3JpZ2luLCBSZWcgcmVnKQotICAgICAgICA6IFZh
bHVlKGluZGV4LCBDaGVja2VkT3Bjb2RlLCBBcmd1bWVudFJlZywgcmVnLmlzR1BSKCkgPyBwb2lu
dGVyVHlwZSgpIDogRG91YmxlLCBvcmlnaW4pCisgICAgQXJndW1lbnRSZWdWYWx1ZShPcmlnaW4g
b3JpZ2luLCBSZWcgcmVnKQorICAgICAgICA6IFZhbHVlKENoZWNrZWRPcGNvZGUsIEFyZ3VtZW50
UmVnLCByZWcuaXNHUFIoKSA/IHBvaW50ZXJUeXBlKCkgOiBEb3VibGUsIG9yaWdpbikKICAgICAg
ICAgLCBtX3JlZyhyZWcpCiAgICAgewogICAgICAgICBBU1NFUlQocmVnLmlzU2V0KCkpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ0NhbGxWYWx1ZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NDYWxsVmFsdWUuaAkocmV2aXNpb24gMTk1OTAx
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ0NhbGxWYWx1ZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC00OCwxNSArNDgsMTUgQEAgcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgUHJvY2Vk
dXJlOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgotICAgIENDYWxsVmFs
dWUodW5zaWduZWQgaW5kZXgsIFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdpbiwgQXJndW1lbnRzLi4u
IGFyZ3VtZW50cykKLSAgICAgICAgOiBWYWx1ZShpbmRleCwgQ2hlY2tlZE9wY29kZSwgQ0NhbGws
IHR5cGUsIG9yaWdpbiwgYXJndW1lbnRzLi4uKQorICAgIENDYWxsVmFsdWUoVHlwZSB0eXBlLCBP
cmlnaW4gb3JpZ2luLCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQorICAgICAgICA6IFZhbHVlKENo
ZWNrZWRPcGNvZGUsIENDYWxsLCB0eXBlLCBvcmlnaW4sIGFyZ3VtZW50cy4uLikKICAgICB7CiAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKG51bUNoaWxkcmVuKCkgPj0gMSk7CiAgICAgfQogCiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgotICAgIENDYWxsVmFsdWUodW5zaWduZWQg
aW5kZXgsIFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdpbiwgY29uc3QgRWZmZWN0cyYgZWZmZWN0cywg
QXJndW1lbnRzLi4uIGFyZ3VtZW50cykKLSAgICAgICAgOiBWYWx1ZShpbmRleCwgQ2hlY2tlZE9w
Y29kZSwgQ0NhbGwsIHR5cGUsIG9yaWdpbiwgYXJndW1lbnRzLi4uKQorICAgIENDYWxsVmFsdWUo
VHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luLCBjb25zdCBFZmZlY3RzJiBlZmZlY3RzLCBBcmd1bWVu
dHMuLi4gYXJndW1lbnRzKQorICAgICAgICA6IFZhbHVlKENoZWNrZWRPcGNvZGUsIENDYWxsLCB0
eXBlLCBvcmlnaW4sIGFyZ3VtZW50cy4uLikKICAgICAgICAgLCBlZmZlY3RzKGVmZmVjdHMpCiAg
ICAgewogICAgICAgICBSRUxFQVNFX0FTU0VSVChudW1DaGlsZHJlbigpID49IDEpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tWYWx1ZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tWYWx1ZS5jcHAJKHJldmlzaW9uIDE5NTkw
MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrVmFsdWUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00Niw4ICs0Niw4IEBAIFZhbHVlKiBDaGVja1ZhbHVlOjpjbG9uZUltcGwoKSBj
b25zdAogfQogCiAvLyBVc2UgdGhpcyBmb3JtIGZvciBDaGVja0FkZCwgQ2hlY2tTdWIsIGFuZCBD
aGVja011bC4KLUNoZWNrVmFsdWU6OkNoZWNrVmFsdWUodW5zaWduZWQgaW5kZXgsIE9wY29kZSBv
cGNvZGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQpCi0gICAgOiBT
dGFja21hcFZhbHVlKGluZGV4LCBDaGVja2VkT3Bjb2RlLCBvcGNvZGUsIGxlZnQtPnR5cGUoKSwg
b3JpZ2luKQorQ2hlY2tWYWx1ZTo6Q2hlY2tWYWx1ZShPcGNvZGUgb3Bjb2RlLCBPcmlnaW4gb3Jp
Z2luLCBWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0KQorICAgIDogU3RhY2ttYXBWYWx1ZShDaGVj
a2VkT3Bjb2RlLCBvcGNvZGUsIGxlZnQtPnR5cGUoKSwgb3JpZ2luKQogewogICAgIEFTU0VSVChC
Mzo6aXNJbnQodHlwZSgpKSk7CiAgICAgQVNTRVJUKGxlZnQtPnR5cGUoKSA9PSByaWdodC0+dHlw
ZSgpKTsKQEAgLTU3LDggKzU3LDggQEAgQ2hlY2tWYWx1ZTo6Q2hlY2tWYWx1ZSh1bnNpZ25lZCBp
bmRleCwgTwogfQogCiAvLyBVc2UgdGhpcyBmb3JtIGZvciBDaGVjay4KLUNoZWNrVmFsdWU6OkNo
ZWNrVmFsdWUodW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4sIFZh
bHVlKiBwcmVkaWNhdGUpCi0gICAgOiBTdGFja21hcFZhbHVlKGluZGV4LCBDaGVja2VkT3Bjb2Rl
LCBvcGNvZGUsIFZvaWQsIG9yaWdpbikKK0NoZWNrVmFsdWU6OkNoZWNrVmFsdWUoT3Bjb2RlIG9w
Y29kZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIHByZWRpY2F0ZSkKKyAgICA6IFN0YWNrbWFwVmFs
dWUoQ2hlY2tlZE9wY29kZSwgb3Bjb2RlLCBWb2lkLCBvcmlnaW4pCiB7CiAgICAgQVNTRVJUKG9w
Y29kZSA9PSBDaGVjayk7CiAgICAgYXBwZW5kKENvbnN0cmFpbmVkVmFsdWUocHJlZGljYXRlLCBW
YWx1ZVJlcDo6V2FybUFueSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hl
Y2tWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNr
VmFsdWUuaAkocmV2aXNpb24gMTk1OTAxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
Q2hlY2tWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01OCwxMCArNTgsMTAgQEAgcHJpdmF0ZToK
ICAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOwogCiAgICAgLy8gVXNlIHRoaXMgZm9ybSBmb3Ig
Q2hlY2tBZGQsIENoZWNrU3ViLCBhbmQgQ2hlY2tNdWwuCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUg
Q2hlY2tWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3Bjb2RlLCBPcmlnaW4sIFZhbHVlKiBsZWZ0LCBW
YWx1ZSogcmlnaHQpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIENoZWNrVmFsdWUoT3Bjb2RlLCBP
cmlnaW4sIFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQpOwogCiAgICAgLy8gVXNlIHRoaXMgZm9y
bSBmb3IgQ2hlY2suCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgQ2hlY2tWYWx1ZSh1bnNpZ25lZCBp
bmRleCwgT3Bjb2RlLCBPcmlnaW4sIFZhbHVlKiBwcmVkaWNhdGUpOworICAgIEpTX0VYUE9SVF9Q
UklWQVRFIENoZWNrVmFsdWUoT3Bjb2RlLCBPcmlnaW4sIFZhbHVlKiBwcmVkaWNhdGUpOwogfTsK
IAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNDb25zdDMyVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNDb25zdDMyVmFsdWUuaAkocmV2aXNpb24gMTk1OTAxKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzQ29uc3QzMlZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTc3LDggKzc3LDgg
QEAgcHJvdGVjdGVkOgogCiAgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKIAotICAgIENvbnN0
MzJWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3JpZ2luIG9yaWdpbiwgaW50MzJfdCB2YWx1ZSkKLSAg
ICAgICAgOiBWYWx1ZShpbmRleCwgQ2hlY2tlZE9wY29kZSwgQ29uc3QzMiwgSW50MzIsIG9yaWdp
bikKKyAgICBDb25zdDMyVmFsdWUoT3JpZ2luIG9yaWdpbiwgaW50MzJfdCB2YWx1ZSkKKyAgICAg
ICAgOiBWYWx1ZShDaGVja2VkT3Bjb2RlLCBDb25zdDMyLCBJbnQzMiwgb3JpZ2luKQogICAgICAg
ICAsIG1fdmFsdWUodmFsdWUpCiAgICAgewogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0NvbnN0NjRWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0NvbnN0NjRWYWx1ZS5oCShyZXZpc2lvbiAxOTU5MDEpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNDb25zdDY0VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtNzcsOCAr
NzcsOCBAQCBwcm90ZWN0ZWQ6CiAKICAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOwogCi0gICAg
Q29uc3Q2NFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcmlnaW4gb3JpZ2luLCBpbnQ2NF90IHZhbHVl
KQotICAgICAgICA6IFZhbHVlKGluZGV4LCBDaGVja2VkT3Bjb2RlLCBDb25zdDY0LCBJbnQ2NCwg
b3JpZ2luKQorICAgIENvbnN0NjRWYWx1ZShPcmlnaW4gb3JpZ2luLCBpbnQ2NF90IHZhbHVlKQor
ICAgICAgICA6IFZhbHVlKENoZWNrZWRPcGNvZGUsIENvbnN0NjQsIEludDY0LCBvcmlnaW4pCiAg
ICAgICAgICwgbV92YWx1ZSh2YWx1ZSkKICAgICB7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzQ29uc3REb3VibGVWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0RG91YmxlVmFsdWUuaAkocmV2aXNpb24gMTk1OTAxKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3REb3VibGVWYWx1ZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC03MCw4ICs3MCw4IEBAIHByb3RlY3RlZDoKIHByaXZhdGU6CiAgICAgZnJpZW5k
IGNsYXNzIFByb2NlZHVyZTsKIAotICAgIENvbnN0RG91YmxlVmFsdWUodW5zaWduZWQgaW5kZXgs
IE9yaWdpbiBvcmlnaW4sIGRvdWJsZSB2YWx1ZSkKLSAgICAgICAgOiBWYWx1ZShpbmRleCwgQ2hl
Y2tlZE9wY29kZSwgQ29uc3REb3VibGUsIERvdWJsZSwgb3JpZ2luKQorICAgIENvbnN0RG91Ymxl
VmFsdWUoT3JpZ2luIG9yaWdpbiwgZG91YmxlIHZhbHVlKQorICAgICAgICA6IFZhbHVlKENoZWNr
ZWRPcGNvZGUsIENvbnN0RG91YmxlLCBEb3VibGUsIG9yaWdpbikKICAgICAgICAgLCBtX3ZhbHVl
KHZhbHVlKQogICAgIHsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjND
b25zdEZsb2F0VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNDb25zdEZsb2F0VmFsdWUuaAkocmV2aXNpb24gMTk1OTAxKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzQ29uc3RGbG9hdFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTY4LDggKzY4
LDggQEAgcHJvdGVjdGVkOgogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOwog
Ci0gICAgQ29uc3RGbG9hdFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcmlnaW4gb3JpZ2luLCBmbG9h
dCB2YWx1ZSkKLSAgICAgICAgOiBWYWx1ZShpbmRleCwgQ2hlY2tlZE9wY29kZSwgQ29uc3RGbG9h
dCwgRmxvYXQsIG9yaWdpbikKKyAgICBDb25zdEZsb2F0VmFsdWUoT3JpZ2luIG9yaWdpbiwgZmxv
YXQgdmFsdWUpCisgICAgICAgIDogVmFsdWUoQ2hlY2tlZE9wY29kZSwgQ29uc3RGbG9hdCwgRmxv
YXQsIG9yaWdpbikKICAgICAgICAgLCBtX3ZhbHVlKHZhbHVlKQogICAgIHsKICAgICB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb250cm9sVmFsdWUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb250cm9sVmFsdWUuaAkocmV2aXNpb24gMTk1
OTAxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29udHJvbFZhbHVlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEwOSw4ICsxMDksOCBAQCBwcm90ZWN0ZWQ6CiAKICAgICAvLyBVc2UgdGhp
cyBmb3Igc3ViY2xhc3Nlcy4KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+Ci0g
ICAgQ29udHJvbFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBUeXBlIHR5cGUs
IE9yaWdpbiBvcmlnaW4sIEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCi0gICAgICAgIDogVmFsdWUo
aW5kZXgsIENoZWNrZWRPcGNvZGUsIG9wY29kZSwgdHlwZSwgb3JpZ2luLCBhcmd1bWVudHMuLi4p
CisgICAgQ29udHJvbFZhbHVlKE9wY29kZSBvcGNvZGUsIFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdp
biwgQXJndW1lbnRzLi4uIGFyZ3VtZW50cykKKyAgICAgICAgOiBWYWx1ZShDaGVja2VkT3Bjb2Rl
LCBvcGNvZGUsIHR5cGUsIG9yaWdpbiwgYXJndW1lbnRzLi4uKQogICAgIHsKICAgICAgICAgQVNT
RVJUKGFjY2VwdHMob3Bjb2RlKSk7CiAgICAgfQpAQCAtMTIyLDIyICsxMjIsMjIgQEAgcHJpdmF0
ZToKICAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOwogCiAgICAgLy8gVXNlIHRoaXMgZm9yIE9v
cHMuCi0gICAgQ29udHJvbFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBPcmln
aW4gb3JpZ2luKQotICAgICAgICA6IFZhbHVlKGluZGV4LCBDaGVja2VkT3Bjb2RlLCBvcGNvZGUs
IFZvaWQsIG9yaWdpbikKKyAgICBDb250cm9sVmFsdWUoT3Bjb2RlIG9wY29kZSwgT3JpZ2luIG9y
aWdpbikKKyAgICAgICAgOiBWYWx1ZShDaGVja2VkT3Bjb2RlLCBvcGNvZGUsIFZvaWQsIG9yaWdp
bikKICAgICB7CiAgICAgICAgIEFTU0VSVChvcGNvZGUgPT0gT29wcyk7CiAgICAgfQogCiAgICAg
Ly8gVXNlIHRoaXMgZm9yIFJldHVybi4KLSAgICBDb250cm9sVmFsdWUodW5zaWduZWQgaW5kZXgs
IE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiByZXN1bHQpCi0gICAgICAgIDog
VmFsdWUoaW5kZXgsIENoZWNrZWRPcGNvZGUsIG9wY29kZSwgVm9pZCwgb3JpZ2luLCByZXN1bHQp
CisgICAgQ29udHJvbFZhbHVlKE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBy
ZXN1bHQpCisgICAgICAgIDogVmFsdWUoQ2hlY2tlZE9wY29kZSwgb3Bjb2RlLCBWb2lkLCBvcmln
aW4sIHJlc3VsdCkKICAgICB7CiAgICAgICAgIEFTU0VSVChvcGNvZGUgPT0gUmV0dXJuKTsKICAg
ICB9CiAKICAgICAvLyBVc2UgdGhpcyBmb3IgSnVtcC4KLSAgICBDb250cm9sVmFsdWUodW5zaWdu
ZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4sIGNvbnN0IEZyZXF1ZW50ZWRC
bG9jayYgdGFyZ2V0KQotICAgICAgICA6IFZhbHVlKGluZGV4LCBDaGVja2VkT3Bjb2RlLCBvcGNv
ZGUsIFZvaWQsIG9yaWdpbikKKyAgICBDb250cm9sVmFsdWUoT3Bjb2RlIG9wY29kZSwgT3JpZ2lu
IG9yaWdpbiwgY29uc3QgRnJlcXVlbnRlZEJsb2NrJiB0YXJnZXQpCisgICAgICAgIDogVmFsdWUo
Q2hlY2tlZE9wY29kZSwgb3Bjb2RlLCBWb2lkLCBvcmlnaW4pCiAgICAgewogICAgICAgICBBU1NF
UlQob3Bjb2RlID09IEp1bXApOwogICAgICAgICBtX3N1Y2Nlc3NvcnMuYXBwZW5kKHRhcmdldCk7
CkBAIC0xNDUsOSArMTQ1LDkgQEAgcHJpdmF0ZToKIAogICAgIC8vIFVzZSB0aGlzIGZvciBCcmFu
Y2guCiAgICAgQ29udHJvbFZhbHVlKAotICAgICAgICB1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9w
Y29kZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIHByZWRpY2F0ZSwKKyAgICAgICAgT3Bjb2RlIG9w
Y29kZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIHByZWRpY2F0ZSwKICAgICAgICAgY29uc3QgRnJl
cXVlbnRlZEJsb2NrJiB5ZXMsIGNvbnN0IEZyZXF1ZW50ZWRCbG9jayYgbm8pCi0gICAgICAgIDog
VmFsdWUoaW5kZXgsIENoZWNrZWRPcGNvZGUsIG9wY29kZSwgVm9pZCwgb3JpZ2luLCBwcmVkaWNh
dGUpCisgICAgICAgIDogVmFsdWUoQ2hlY2tlZE9wY29kZSwgb3Bjb2RlLCBWb2lkLCBvcmlnaW4s
IHByZWRpY2F0ZSkKICAgICB7CiAgICAgICAgIEFTU0VSVChvcGNvZGUgPT0gQnJhbmNoKTsKICAg
ICAgICAgbV9zdWNjZXNzb3JzLmFwcGVuZCh5ZXMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzRWZmZWN0cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzRWZmZWN0cy5jcHAJKHJldmlzaW9uIDE5NTkwMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0VmZmVjdHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCw3ICs0NCw3IEBAIGJv
b2wgaW50ZXJmZXJlc1dpdGhUZXJtaW5hbChjb25zdCBFZmZlY3QKIHsKICAgICBpZiAoIXRlcm1p
bmFsLnRlcm1pbmFsKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIG90aGVyLnRl
cm1pbmFsIHx8IG90aGVyLmNvbnRyb2xEZXBlbmRlbnQgfHwgb3RoZXIud3JpdGVzU1NBU3RhdGUg
fHwgb3RoZXIud3JpdGVzOworICAgIHJldHVybiBvdGhlci50ZXJtaW5hbCB8fCBvdGhlci5jb250
cm9sRGVwZW5kZW50IHx8IG90aGVyLndyaXRlc0xvY2FsU3RhdGUgfHwgb3RoZXIud3JpdGVzOwog
fQogCiBib29sIGludGVyZmVyZXNXaXRoRXhpdFNpZGV3YXlzKGNvbnN0IEVmZmVjdHMmIGV4aXRz
U2lkZXdheXMsIGNvbnN0IEVmZmVjdHMmIG90aGVyKQpAQCAtNTQsMTEgKzU0LDExIEBAIGJvb2wg
aW50ZXJmZXJlc1dpdGhFeGl0U2lkZXdheXMoY29uc3QgRWYKICAgICByZXR1cm4gb3RoZXIuY29u
dHJvbERlcGVuZGVudCB8fCBvdGhlci53cml0ZXM7CiB9CiAKLWJvb2wgaW50ZXJmZXJlc1dpdGhX
cml0ZXNTU0FTdGF0ZShjb25zdCBFZmZlY3RzJiB3cml0ZXNTU0FTdGF0ZSwgY29uc3QgRWZmZWN0
cyYgb3RoZXIpCitib29sIGludGVyZmVyZXNXaXRoV3JpdGVzU1NBU3RhdGUoY29uc3QgRWZmZWN0
cyYgd3JpdGVzTG9jYWxTdGF0ZSwgY29uc3QgRWZmZWN0cyYgb3RoZXIpCiB7Ci0gICAgaWYgKCF3
cml0ZXNTU0FTdGF0ZS53cml0ZXNTU0FTdGF0ZSkKKyAgICBpZiAoIXdyaXRlc0xvY2FsU3RhdGUu
d3JpdGVzTG9jYWxTdGF0ZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBvdGhl
ci53cml0ZXNTU0FTdGF0ZSB8fCBvdGhlci5yZWFkc1NTQVN0YXRlOworICAgIHJldHVybiBvdGhl
ci53cml0ZXNMb2NhbFN0YXRlIHx8IG90aGVyLnJlYWRzTG9jYWxTdGF0ZTsKIH0KIAogfSAvLyBh
bm9ueW1vdXMgbmFtZXNwYWNlCkBAIC02OSw3ICs2OSw3IEBAIGJvb2wgRWZmZWN0czo6aW50ZXJm
ZXJlcyhjb25zdCBFZmZlY3RzJiAKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgaWYgKGludGVy
ZmVyZXNXaXRoRXhpdFNpZGV3YXlzKCp0aGlzLCBvdGhlcikgfHwgaW50ZXJmZXJlc1dpdGhFeGl0
U2lkZXdheXMob3RoZXIsICp0aGlzKSkKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgaWYgKGlu
dGVyZmVyZXNXaXRoV3JpdGVzU1NBU3RhdGUoKnRoaXMsIG90aGVyKSB8fCBpbnRlcmZlcmVzV2l0
aFdyaXRlc1NTQVN0YXRlKG90aGVyLCAqdGhpcykpCisgICAgaWYgKGludGVyZmVyZXNXaXRoV3Jp
dGVzTG9jYWxTdGF0ZSgqdGhpcywgb3RoZXIpIHx8IGludGVyZmVyZXNXaXRoV3JpdGVzTG9jYWxT
dGF0ZShvdGhlciwgKnRoaXMpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICByZXR1cm4gd3Jp
dGVzLm92ZXJsYXBzKG90aGVyLndyaXRlcykKICAgICAgICAgfHwgd3JpdGVzLm92ZXJsYXBzKG90
aGVyLnJlYWRzKQpAQCAtODUsMTAgKzg1LDEwIEBAIHZvaWQgRWZmZWN0czo6ZHVtcChQcmludFN0
cmVhbSYgb3V0KSBjb24KICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiRXhpdHNTaWRld2F5cyIp
OwogICAgIGlmIChjb250cm9sRGVwZW5kZW50KQogICAgICAgICBvdXQucHJpbnQoY29tbWEsICJD
b250cm9sRGVwZW5kZW50Iik7Ci0gICAgaWYgKHdyaXRlc1NTQVN0YXRlKQotICAgICAgICBvdXQu
cHJpbnQoY29tbWEsICJXcml0ZXNTU0FTdGF0ZSIpOwotICAgIGlmIChyZWFkc1NTQVN0YXRlKQot
ICAgICAgICBvdXQucHJpbnQoY29tbWEsICJSZWFkc1NTQVN0YXRlIik7CisgICAgaWYgKHdyaXRl
c0xvY2FsU3RhdGUpCisgICAgICAgIG91dC5wcmludChjb21tYSwgIldyaXRlc0xvY2FsU3RhdGUi
KTsKKyAgICBpZiAocmVhZHNMb2NhbFN0YXRlKQorICAgICAgICBvdXQucHJpbnQoY29tbWEsICJS
ZWFkc0xvY2FsU3RhdGUiKTsKICAgICBpZiAod3JpdGVzKQogICAgICAgICBvdXQucHJpbnQoY29t
bWEsICJXcml0ZXM6Iiwgd3JpdGVzKTsKICAgICBpZiAocmVhZHMpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNFZmZlY3RzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzRWZmZWN0cy5oCShyZXZpc2lvbiAxOTU5MDEpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNFZmZlY3RzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDE0ICs0OCwxNCBA
QCBzdHJ1Y3QgRWZmZWN0cyB7CiAgICAgLy8gVHJ1ZSBpZiB0aGUgaW5zdHJ1Y3Rpb24gbWF5IGNo
YW5nZSBzZW1hbnRpY3MgaWYgaG9pc3RlZCBhYm92ZSBzb21lIGNvbnRyb2wgZmxvdy4KICAgICBi
b29sIGNvbnRyb2xEZXBlbmRlbnQgeyBmYWxzZSB9OwogCi0gICAgLy8gVHJ1ZSBpZiB0aGlzIHdy
aXRlcyB0byB0aGUgU1NBIHN0YXRlLiBPcGVyYXRpb25zIHRoYXQgd3JpdGUgU1NBIHN0YXRlIGRv
bid0IHdyaXRlIHRvIGFueXRoaW5nCi0gICAgLy8gaW4gIm1lbW9yeSIgYnV0IHRoZXkgaGF2ZSBh
IHNpZGUtZWZmZWN0IGFueXdheS4gVGhpcyBpcyBmb3IgbW9kZWxpbmcgVXBzaWxvbnMuIFlvdSBj
YW4gaWdub3JlCi0gICAgLy8gdGhpcyBpZiB5b3UgaGF2ZSB5b3VyIG93biB3YXkgb2YgbW9kZWxp
bmcgVXBzaWxvbnMgb3IgaWYgeW91IGludGVuZCB0byBqdXN0IHJlYnVpbGQgdGhlbQorICAgIC8v
IFRydWUgaWYgdGhpcyB3cml0ZXMgdG8gdGhlIGxvY2FsIHN0YXRlLiBPcGVyYXRpb25zIHRoYXQg
d3JpdGUgbG9jYWwgc3RhdGUgZG9uJ3Qgd3JpdGUgdG8gYW55dGhpbmcKKyAgICAvLyBpbiAibWVt
b3J5IiBidXQgdGhleSBoYXZlIGEgc2lkZS1lZmZlY3QgYW55d2F5LiBUaGlzIGlzIGZvciBtb2Rl
bGluZyBVcHNpbG9ucyBhbmQgU2V0cy4gWW91IGNhbiBpZ25vcmUKKyAgICAvLyB0aGlzIGlmIHlv
dSBoYXZlIHlvdXIgb3duIHdheSBvZiBtb2RlbGluZyBVcHNpbG9ucyBhbmQgU2V0cyBvciBpZiB5
b3UgaW50ZW5kIHRvIGp1c3QgcmVidWlsZCB0aGVtCiAgICAgLy8gYW55d2F5LgotICAgIGJvb2wg
d3JpdGVzU1NBU3RhdGUgeyBmYWxzZSB9OworICAgIGJvb2wgd3JpdGVzTG9jYWxTdGF0ZSB7IGZh
bHNlIH07CiAKLSAgICAvLyBUcnVlIGlmIHRoaXMgcmVhZHMgZnJvbSB0aGUgU1NBIHN0YXRlLiBU
aGlzIGlzIG9ubHkgdXNlZCBmb3IgUGhpLgotICAgIGJvb2wgcmVhZHNTU0FTdGF0ZSB7IGZhbHNl
IH07CisgICAgLy8gVHJ1ZSBpZiB0aGlzIHJlYWRzIGZyb20gdGhlIGxvY2FsIHN0YXRlLiBUaGlz
IGlzIG9ubHkgdXNlZCBmb3IgUGhpIGFuZCBHZXQuCisgICAgYm9vbCByZWFkc0xvY2FsU3RhdGUg
eyBmYWxzZSB9OwogCiAgICAgSGVhcFJhbmdlIHdyaXRlczsKICAgICBIZWFwUmFuZ2UgcmVhZHM7
CkBAIC03Nyw3ICs3Nyw3IEBAIHN0cnVjdCBFZmZlY3RzIHsKIAogICAgIGJvb2wgbXVzdEV4ZWN1
dGUoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIHRlcm1pbmFsIHx8IGV4aXRzU2lkZXdh
eXMgfHwgd3JpdGVzU1NBU3RhdGUgfHwgd3JpdGVzOworICAgICAgICByZXR1cm4gdGVybWluYWwg
fHwgZXhpdHNTaWRld2F5cyB8fCB3cml0ZXNMb2NhbFN0YXRlIHx8IHdyaXRlczsKICAgICB9CiAK
ICAgICAvLyBSZXR1cm5zIHRydWUgaWYgcmVvcmRlcmluZyBpbnN0cnVjdGlvbnMgd2l0aCB0aGVz
ZSByZXNwZWN0aXZlIGVmZmVjdHMgd291bGQgY2hhbmdlIHByb2dyYW0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0ZpeFNTQS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzRml4U1NBLmNwcAkocmV2aXNpb24gMTk1OTAxKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzRml4U1NBLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsMTQgKzM0
LDEyIEBACiAjaW5jbHVkZSAiQjNEb21pbmF0b3JzLmgiCiAjaW5jbHVkZSAiQjNJbmRleFNldC5o
IgogI2luY2x1ZGUgIkIzSW5zZXJ0aW9uU2V0SW5saW5lcy5oIgotI2luY2x1ZGUgIkIzTWVtb3J5
VmFsdWUuaCIKICNpbmNsdWRlICJCM1BoYXNlU2NvcGUuaCIKICNpbmNsdWRlICJCM1Byb2NlZHVy
ZUlubGluZXMuaCIKICNpbmNsdWRlICJCM1NTQUNhbGN1bGF0b3IuaCIKLSNpbmNsdWRlICJCM1Ns
b3RCYXNlVmFsdWUuaCIKLSNpbmNsdWRlICJCM1N0YWNrU2xvdC5oIgogI2luY2x1ZGUgIkIzVXBz
aWxvblZhbHVlLmgiCiAjaW5jbHVkZSAiQjNWYWx1ZUlubGluZXMuaCIKKyNpbmNsdWRlICJCM1Zh
cmlhYmxlVmFsdWUuaCIKICNpbmNsdWRlIDx3dGYvQ29tbWFQcmludGVyLmg+CiAKIG5hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgQjMgewpAQCAtNTIsMjMgKzUwLDE2IEBAIGNvbnN0IGJvb2wgdmVy
Ym9zZSA9IGZhbHNlOwogCiB2b2lkIGRlbW90ZVZhbHVlcyhQcm9jZWR1cmUmIHByb2MsIGNvbnN0
IEluZGV4U2V0PFZhbHVlPiYgdmFsdWVzKQogewotICAgIEhhc2hNYXA8VmFsdWUqLCBTbG90QmFz
ZVZhbHVlKj4gbWFwOwotICAgIEhhc2hNYXA8VmFsdWUqLCBTbG90QmFzZVZhbHVlKj4gcGhpTWFw
OworICAgIEhhc2hNYXA8VmFsdWUqLCBWYXJpYWJsZSo+IG1hcDsKKyAgICBIYXNoTWFwPFZhbHVl
KiwgVmFyaWFibGUqPiBwaGlNYXA7CiAKICAgICAvLyBDcmVhdGUgc3RhY2sgc2xvdHMuCi0gICAg
SW5zZXJ0aW9uU2V0IGluc2VydGlvblNldChwcm9jKTsKICAgICBmb3IgKFZhbHVlKiB2YWx1ZSA6
IHZhbHVlcy52YWx1ZXMocHJvYy52YWx1ZXMoKSkpIHsKLSAgICAgICAgU2xvdEJhc2VWYWx1ZSog
c3RhY2sgPSBpbnNlcnRpb25TZXQuaW5zZXJ0PFNsb3RCYXNlVmFsdWU+KAotICAgICAgICAgICAg
MCwgdmFsdWUtPm9yaWdpbigpLCBwcm9jLmFkZEFub255bW91c1N0YWNrU2xvdCh2YWx1ZS0+dHlw
ZSgpKSk7Ci0gICAgICAgIG1hcC5hZGQodmFsdWUsIHN0YWNrKTsKLQotICAgICAgICBpZiAodmFs
dWUtPm9wY29kZSgpID09IFBoaSkgewotICAgICAgICAgICAgU2xvdEJhc2VWYWx1ZSogcGhpU3Rh
Y2sgPSBpbnNlcnRpb25TZXQuaW5zZXJ0PFNsb3RCYXNlVmFsdWU+KAotICAgICAgICAgICAgICAg
IDAsIHZhbHVlLT5vcmlnaW4oKSwgcHJvYy5hZGRBbm9ueW1vdXNTdGFja1Nsb3QodmFsdWUtPnR5
cGUoKSkpOwotICAgICAgICAgICAgcGhpTWFwLmFkZCh2YWx1ZSwgcGhpU3RhY2spOwotICAgICAg
ICB9CisgICAgICAgIG1hcC5hZGQodmFsdWUsIG1fcHJvYy5hZGRWYXJpYWJsZSh2YWx1ZS0+dHlw
ZSgpKSk7CisKKyAgICAgICAgaWYgKHZhbHVlLT5vcGNvZGUoKSA9PSBQaGkpCisgICAgICAgICAg
ICBwaGlNYXAuYWRkKHZhbHVlLCBtX3Byb2MuYWRkVmFyaWFibGUodmFsdWUtPnR5cGUoKSkpOwog
ICAgIH0KLSAgICBpbnNlcnRpb25TZXQuZXhlY3V0ZShwcm9jWzBdKTsKIAogICAgIGlmICh2ZXJi
b3NlKSB7CiAgICAgICAgIGRhdGFMb2coIkRlbW90aW5nIHZhbHVlcyBhcyBmb2xsb3dzOlxuIik7
CkBAIC04NSwzNiArNzYsMzcgQEAgdm9pZCBkZW1vdGVWYWx1ZXMoUHJvY2VkdXJlJiBwcm9jLCBj
b25zdAogICAgIH0KIAogICAgIC8vIENoYW5nZSBhY2Nlc3NlcyB0byB0aGUgdmFsdWVzIHRvIGFj
Y2Vzc2VzIHRvIHRoZSBzdGFjayBzbG90cy4KKyAgICBJbnNlcnRpb25TZXQgaW5zZXJ0aW9uU2V0
KHByb2MpOwogICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBwcm9jKSB7CiAgICAgICAgIGZv
ciAodW5zaWduZWQgdmFsdWVJbmRleCA9IDA7IHZhbHVlSW5kZXggPCBibG9jay0+c2l6ZSgpOyAr
K3ZhbHVlSW5kZXgpIHsKICAgICAgICAgICAgIFZhbHVlKiB2YWx1ZSA9IGJsb2NrLT5hdCh2YWx1
ZUluZGV4KTsKIAogICAgICAgICAgICAgaWYgKHZhbHVlLT5vcGNvZGUoKSA9PSBQaGkpIHsKLSAg
ICAgICAgICAgICAgICBpZiAoU2xvdEJhc2VWYWx1ZSogc2xvdEJhc2UgPSBwaGlNYXAuZ2V0KHZh
bHVlKSkgeworICAgICAgICAgICAgICAgIGlmIChWYXJpYWJsZSogdmFyaWFibGUgPSBwaGlNYXAu
Z2V0KHZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgICB2YWx1ZS0+cmVwbGFjZVdpdGhJZGVu
dGl0eSgKLSAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnQ8TWVtb3J5
VmFsdWU+KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlSW5kZXgsIExvYWQsIHZh
bHVlLT50eXBlKCksIHZhbHVlLT5vcmlnaW4oKSwgc2xvdEJhc2UpKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnQ8VmFyaWFibGVWYWx1ZT4oCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdmFsdWVJbmRleCwgR2V0LCB2YWx1ZS0+b3JpZ2luKCksIHZhcmlh
YmxlKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAg
ICAgICAgICBmb3IgKFZhbHVlKiYgY2hpbGQgOiB2YWx1ZS0+Y2hpbGRyZW4oKSkgewotICAgICAg
ICAgICAgICAgICAgICBpZiAoU2xvdEJhc2VWYWx1ZSogc2xvdEJhc2UgPSBtYXAuZ2V0KGNoaWxk
KSkgewotICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGQgPSBpbnNlcnRpb25TZXQuaW5zZXJ0
PE1lbW9yeVZhbHVlPigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZUluZGV4LCBM
b2FkLCBjaGlsZC0+dHlwZSgpLCB2YWx1ZS0+b3JpZ2luKCksIHNsb3RCYXNlKTsKKyAgICAgICAg
ICAgICAgICAgICAgaWYgKFZhcmlhYmxlKiB2YXJpYWJsZSA9IG1hcC5nZXQoY2hpbGQpKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBjaGlsZCA9IGluc2VydGlvblNldC5pbnNlcnQ8VmFyaWFi
bGVWYWx1ZT4oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVJbmRleCwgR2V0LCB2
YWx1ZS0+b3JpZ2luKCksIHZhcmlhYmxlKTsKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIGlmIChVcHNpbG9uVmFsdWUqIHVwc2lsb24g
PSB2YWx1ZS0+YXM8VXBzaWxvblZhbHVlPigpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChT
bG90QmFzZVZhbHVlKiBzbG90QmFzZSA9IHBoaU1hcC5nZXQodXBzaWxvbi0+cGhpKCkpKSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0PE1lbW9yeVZhbHVlPigK
LSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZUluZGV4LCBTdG9yZSwgdXBzaWxvbi0+
b3JpZ2luKCksIHVwc2lsb24tPmNoaWxkKDApLCBzbG90QmFzZSk7CisgICAgICAgICAgICAgICAg
ICAgIGlmIChWYXJpYWJsZSogdmFyaWFibGUgPSBwaGlNYXAuZ2V0KHVwc2lsb24tPnBoaSgpKSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydDxWYXJpYWJsZVZh
bHVlPigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZUluZGV4LCBTZXQsIHVwc2ls
b24tPm9yaWdpbigpLCB2YXJpYWJsZSwgdXBzaWxvbi0+Y2hpbGQoMCkpOwogICAgICAgICAgICAg
ICAgICAgICAgICAgdmFsdWUtPnJlcGxhY2VXaXRoTm9wKCk7CiAgICAgICAgICAgICAgICAgICAg
IH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgIGlmIChT
bG90QmFzZVZhbHVlKiBzbG90QmFzZSA9IG1hcC5nZXQodmFsdWUpKSB7Ci0gICAgICAgICAgICAg
ICAgaW5zZXJ0aW9uU2V0Lmluc2VydDxNZW1vcnlWYWx1ZT4oCi0gICAgICAgICAgICAgICAgICAg
IHZhbHVlSW5kZXggKyAxLCBTdG9yZSwgdmFsdWUtPm9yaWdpbigpLCB2YWx1ZSwgc2xvdEJhc2Up
OworICAgICAgICAgICAgaWYgKFZhcmlhYmxlKiB2YXJpYWJsZSA9IG1hcC5nZXQodmFsdWUpKSB7
CisgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydDxWYXJpYWJsZVZhbHVlPigKKyAg
ICAgICAgICAgICAgICAgICAgdmFsdWVJbmRleCArIDEsIFNldCwgdmFsdWUtPm9yaWdpbigpLCB2
YXJpYWJsZSwgdmFsdWUpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIGluc2Vy
dGlvblNldC5leGVjdXRlKGJsb2NrKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0ZpeFNTQS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0ZpeFNT
QS5oCShyZXZpc2lvbiAxOTU5MDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNGaXhT
U0EuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsOCArMzYsOCBAQCBuYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIEIzIHsKIAogY2xhc3MgUHJvY2VkdXJlOwogCi0vLyBUdXJucyBhbGwgbWVudGlvbnMg
b2YgdGhlIGdpdmVuIHZhbHVlcyBpbnRvIGFjY2Vzc2VzIHRvIGFub255bW91cyBzdGFjayBzbG90
cy4gVGhpcyBpcyBtZWFudAotLy8gdG8gYmUgdXNlZCBmcm9tIHBoYXNlcyB0aGF0IGRvbid0IGxp
a2UgU1NBIGZvciB3aGF0ZXZlciByZWFzb24uCisvLyBUdXJucyBhbGwgbWVudGlvbnMgb2YgdGhl
IGdpdmVuIHZhbHVlcyBpbnRvIGFjY2Vzc2VzIHRvIHZhcmlhYmxlcy4gVGhpcyBpcyBtZWFudCB0
byBiZSB1c2VkCisvLyBmcm9tIHBoYXNlcyB0aGF0IGRvbid0IGxpa2UgU1NBIGZvciB3aGF0ZXZl
ciByZWFzb24uCiB2b2lkIGRlbW90ZVZhbHVlcyhQcm9jZWR1cmUmLCBjb25zdCBJbmRleFNldDxW
YWx1ZT4mKTsKIAogLy8gVGhpcyBmaXhlcyBTU0EgZm9yIHlvdS4gVXNlIHRoaXMgYWZ0ZXIgeW91
IGhhdmUgZG9uZSBkZW1vdGVWYWx1ZXMoKSBhbmQgeW91IGhhdmUgcGVyZm9ybWVkCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAkocmV2aXNpb24gMTk1OTAx
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTUzLDYgKzUzLDcgQEAKICNpbmNsdWRlICJCM1Vwc2lsb25WYWx1ZS5oIgogI2lu
Y2x1ZGUgIkIzVXNlQ291bnRzLmgiCiAjaW5jbHVkZSAiQjNWYWx1ZUlubGluZXMuaCIKKyNpbmNs
dWRlICJCM1ZhcmlhYmxlVmFsdWUuaCIKICNpbmNsdWRlIDx3dGYvTGlzdER1bXAuaD4KIAogI2lm
IENPTVBJTEVSKEdDQykgJiYgQVNTRVJUX0RJU0FCTEVECkBAIC0xMDIsNiArMTAzLDggQEAgcHVi
bGljOgogCiAgICAgICAgIGZvciAoQjM6OlN0YWNrU2xvdCogc3RhY2sgOiBtX3Byb2NlZHVyZS5z
dGFja1Nsb3RzKCkpCiAgICAgICAgICAgICBtX3N0YWNrVG9TdGFjay5hZGQoc3RhY2ssIG1fY29k
ZS5hZGRTdGFja1Nsb3Qoc3RhY2spKTsKKyAgICAgICAgZm9yIChWYXJpYWJsZSogdmFyaWFibGUg
OiBtX3Byb2NlZHVyZS52YXJpYWJsZXMoKSkKKyAgICAgICAgICAgIG1fdmFyaWFibGVUb1N0YWNr
LmFkZCh2YXJpYWJsZSwgbV9jb2RlLm5ld1RtcChBcmc6OnR5cGVGb3JCM1R5cGUodmFyaWFibGUt
PnR5cGUoKSkpKTsKIAogICAgICAgICAvLyBGaWd1cmUgb3V0IHdoaWNoIGJsb2NrcyBhcmUgbm90
IHJhcmUuCiAgICAgICAgIG1fZmFzdFdvcmtsaXN0LnB1c2gobV9wcm9jZWR1cmVbMF0pOwpAQCAt
MjIwOCw2ICsyMjExLDIxIEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KIAorICAgICAgICBjYXNlIFNldDogeworICAgICAgICAgICAgVmFsdWUgdmFsdWUgPSBtX3Zh
bHVlLT5jaGlsZCgwKTsKKyAgICAgICAgICAgIGFwcGVuZCgKKyAgICAgICAgICAgICAgICByZWxh
eGVkTW92ZUZvclR5cGUodmFsdWUtPnR5cGUoKSksIGltbU9yVG1wKHZhbHVlKSwKKyAgICAgICAg
ICAgICAgICBtX3ZhcmlhYmxlVG9UbXAuZ2V0KG1fdmFsdWUtPmFzPFZhcmlhYmxlVmFsdWU+KCkt
PnZhcmlhYmxlKCkpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAg
IGNhc2UgR2V0OiB7CisgICAgICAgICAgICBhcHBlbmQoCisgICAgICAgICAgICAgICAgcmVsYXhl
ZE1vdmVGb3JUeXBlKG1fdmFsdWUtPnR5cGUoKSksCisgICAgICAgICAgICAgICAgbV92YXJpYWJs
ZVRvVG1wLmdldChtX3ZhbHVlLT5hczxWYXJpYWJsZVZhbHVlPigpLT52YXJpYWJsZSgpKSwgdG1w
KG1fdmFsdWUpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCiAgICAgICAgIGNh
c2UgQnJhbmNoOiB7CiAgICAgICAgICAgICBtX2luc3RzLmxhc3QoKS5hcHBlbmQoY3JlYXRlQnJh
bmNoKG1fdmFsdWUtPmNoaWxkKDApKSk7CiAgICAgICAgICAgICByZXR1cm47CkBAIC0yMjk5LDYg
KzIzMTcsNyBAQCBwcml2YXRlOgogICAgIEluZGV4TWFwPFZhbHVlLCBUbXA+IG1fcGhpVG9UbXA7
IC8vIEVhY2ggUGhpIGdldHMgaXRzIG93biBUbXAuCiAgICAgSW5kZXhNYXA8QjM6OkJhc2ljQmxv
Y2ssIEFpcjo6QmFzaWNCbG9jayo+IG1fYmxvY2tUb0Jsb2NrOwogICAgIEhhc2hNYXA8QjM6OlN0
YWNrU2xvdCosIEFpcjo6U3RhY2tTbG90Kj4gbV9zdGFja1RvU3RhY2s7CisgICAgSGFzaE1hcDxW
YXJpYWJsZSosIFRtcD4gbV92YXJpYWJsZVRvVG1wOwogCiAgICAgVXNlQ291bnRzIG1fdXNlQ291
bnRzOwogICAgIFBoaUNoaWxkcmVuIG1fcGhpQ2hpbGRyZW47CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNNZW1vcnlWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM01lbW9yeVZhbHVlLmgJKHJldmlzaW9uIDE5NTkwMSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM01lbW9yeVZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTc1LDEw
ICs3NSw4IEBAIHByaXZhdGU6CiAKICAgICAvLyBVc2UgdGhpcyBmb3JtIGZvciBMb2FkIChidXQg
bm90IExvYWQ4WiwgTG9hZDhTLCBvciBhbnkgb2YgdGhlIExvYWRzIHRoYXQgaGF2ZSBhIHN1ZmZp
eCB0aGF0CiAgICAgLy8gZGVzY3JpYmVzIHRoZSByZXR1cm5lZCB0eXBlKS4KLSAgICBNZW1vcnlW
YWx1ZSgKLSAgICAgICAgdW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIFR5cGUgdHlwZSwg
T3JpZ2luIG9yaWdpbiwgVmFsdWUqIHBvaW50ZXIsCi0gICAgICAgIGludDMyX3Qgb2Zmc2V0ID0g
MCkKLSAgICAgICAgOiBWYWx1ZShpbmRleCwgQ2hlY2tlZE9wY29kZSwgb3Bjb2RlLCB0eXBlLCBv
cmlnaW4sIHBvaW50ZXIpCisgICAgTWVtb3J5VmFsdWUoT3Bjb2RlIG9wY29kZSwgVHlwZSB0eXBl
LCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogcG9pbnRlciwgaW50MzJfdCBvZmZzZXQgPSAwKQorICAg
ICAgICA6IFZhbHVlKENoZWNrZWRPcGNvZGUsIG9wY29kZSwgdHlwZSwgb3JpZ2luLCBwb2ludGVy
KQogICAgICAgICAsIG1fb2Zmc2V0KG9mZnNldCkKICAgICAgICAgLCBtX3JhbmdlKEhlYXBSYW5n
ZTo6dG9wKCkpCiAgICAgewpAQCAtMTA0LDE2ICsxMDIsMTQgQEAgcHJpdmF0ZToKICAgICB9CiAK
ICAgICAvLyBVc2UgdGhpcyBmb3JtIGZvciBsb2FkcyB3aGVyZSB0aGUgcmV0dXJuIHR5cGUgaXMg
aW1wbGllZC4KLSAgICBNZW1vcnlWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwg
T3JpZ2luIG9yaWdpbiwgVmFsdWUqIHBvaW50ZXIsIGludDMyX3Qgb2Zmc2V0ID0gMCkKLSAgICAg
ICAgOiBNZW1vcnlWYWx1ZShpbmRleCwgb3Bjb2RlLCBJbnQzMiwgb3JpZ2luLCBwb2ludGVyLCBv
ZmZzZXQpCisgICAgTWVtb3J5VmFsdWUoT3Bjb2RlIG9wY29kZSwgT3JpZ2luIG9yaWdpbiwgVmFs
dWUqIHBvaW50ZXIsIGludDMyX3Qgb2Zmc2V0ID0gMCkKKyAgICAgICAgOiBNZW1vcnlWYWx1ZShv
cGNvZGUsIEludDMyLCBvcmlnaW4sIHBvaW50ZXIsIG9mZnNldCkKICAgICB7CiAgICAgfQogCiAg
ICAgLy8gVXNlIHRoaXMgZm9ybSBmb3Igc3RvcmVzLgotICAgIE1lbW9yeVZhbHVlKAotICAgICAg
ICB1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIHZh
bHVlLCBWYWx1ZSogcG9pbnRlciwKLSAgICAgICAgaW50MzJfdCBvZmZzZXQgPSAwKQotICAgICAg
ICA6IFZhbHVlKGluZGV4LCBDaGVja2VkT3Bjb2RlLCBvcGNvZGUsIFZvaWQsIG9yaWdpbiwgdmFs
dWUsIHBvaW50ZXIpCisgICAgTWVtb3J5VmFsdWUoT3Bjb2RlIG9wY29kZSwgT3JpZ2luIG9yaWdp
biwgVmFsdWUqIHZhbHVlLCBWYWx1ZSogcG9pbnRlciwgaW50MzJfdCBvZmZzZXQgPSAwKQorICAg
ICAgICA6IFZhbHVlKENoZWNrZWRPcGNvZGUsIG9wY29kZSwgVm9pZCwgb3JpZ2luLCB2YWx1ZSwg
cG9pbnRlcikKICAgICAgICAgLCBtX29mZnNldChvZmZzZXQpCiAgICAgICAgICwgbV9yYW5nZShI
ZWFwUmFuZ2U6OnRvcCgpKQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M09wY29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wY29k
ZS5oCShyZXZpc2lvbiAxOTU5MDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcGNv
ZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsOSArNDgsMTQgQEAgZW51bSBPcGNvZGUgOiBpbnQx
Nl90IHsKICAgICBDb25zdERvdWJsZSwKICAgICBDb25zdEZsb2F0LAogCi0gICAgLy8gVGhlIG1h
Z2ljYWwgc3RhY2sgc2xvdC4gVGhpcyBpcyB2aWV3ZWQgYXMgZXhlY3V0aW5nIGF0IHRoZSB0b3Ag
b2YgdGhlIHByb2dyYW0gcmVnYXJkbGVzcyBvZgotICAgIC8vIHdoZXJlIGluIGNvbnRyb2wgZmxv
dyB5b3UgcHV0IGl0LiBFYWNoIGluc3RhbmNlIG9mIGEgU3RhY2tTbG90IFZhbHVlIGdldHMgYSBk
aXNqb2ludCByYW5nZSBvZgotICAgIC8vIHN0YWNrIG1lbW9yeS4gVXNlIHRoZSBTdGFja1Nsb3RW
YWx1ZSBjbGFzcy4KKyAgICAvLyBCMyBzdXBwb3J0cyBub24tU1NBIHZhcmlhYmxlcy4gVGhlc2Ug
YXJlIGFjY2Vzc2VkIHVzaW5nIEdldCBhbmQgU2V0IG9wY29kZXMuIFVzZSB0aGUKKyAgICAvLyBW
YXJpYWJsZVZhbHVlIGNsYXNzLiBJdCdzIGEgZ29vZCBpZGVhIHRvIHJ1biBmaXhTU0EoKSB0byB0
dXJuIHRoZXNlIGludG8gU1NBLiBUaGUKKyAgICAvLyBvcHRpbWl6ZXIgd2lsbCBkbyB0aGF0IGV2
ZW50dWFsbHksIGJ1dCBpZiB5b3VyIGlucHV0IHRlbmRzIHRvIHVzZSB0aGVzZSBvcGNvZGVzLCB5
b3UKKyAgICAvLyBzaG91bGQgcnVuIGZpeFNTQSgpIGRpcmVjdGx5IGJlZm9yZSBsYXVuY2hpbmcg
dGhlIG9wdGltaXplci4KKyAgICBTZXQsCisgICAgR2V0LAorCisgICAgLy8gR2V0cyB0aGUgYmFz
ZSBhZGRyZXNzIG9mIGEgU3RhY2tTbG90LgogICAgIFNsb3RCYXNlLAogCiAgICAgLy8gVGhlIG1h
Z2ljYWwgYXJndW1lbnQgcmVnaXN0ZXIuIFRoaXMgaXMgdmlld2VkIGFzIGV4ZWN1dGluZyBhdCB0
aGUgdG9wIG9mIHRoZSBwcm9ncmFtCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQ
YXRjaHBvaW50VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1BhdGNocG9pbnRWYWx1ZS5jcHAJKHJldmlzaW9uIDE5NTkwMSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ5
LDggKzQ5LDggQEAgVmFsdWUqIFBhdGNocG9pbnRWYWx1ZTo6Y2xvbmVJbXBsKCkgY29ucwogICAg
IHJldHVybiBuZXcgUGF0Y2hwb2ludFZhbHVlKCp0aGlzKTsKIH0KIAotUGF0Y2hwb2ludFZhbHVl
OjpQYXRjaHBvaW50VmFsdWUodW5zaWduZWQgaW5kZXgsIFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdp
bikKLSAgICA6IEJhc2UoaW5kZXgsIENoZWNrZWRPcGNvZGUsIFBhdGNocG9pbnQsIHR5cGUsIG9y
aWdpbikKK1BhdGNocG9pbnRWYWx1ZTo6UGF0Y2hwb2ludFZhbHVlKFR5cGUgdHlwZSwgT3JpZ2lu
IG9yaWdpbikKKyAgICA6IEJhc2UoQ2hlY2tlZE9wY29kZSwgUGF0Y2hwb2ludCwgdHlwZSwgb3Jp
Z2luKQogICAgICwgZWZmZWN0cyhFZmZlY3RzOjpmb3JDYWxsKCkpCiAgICAgLCByZXN1bHRDb25z
dHJhaW50KHR5cGUgPT0gVm9pZCA/IFZhbHVlUmVwOjpXYXJtQW55IDogVmFsdWVSZXA6OlNvbWVS
ZWdpc3RlcikKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRW
YWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNocG9p
bnRWYWx1ZS5oCShyZXZpc2lvbiAxOTU5MDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNQYXRjaHBvaW50VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtNzAsNyArNzAsNyBAQCBwcm90
ZWN0ZWQ6CiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7CiAKLSAgICBKU19F
WFBPUlRfUFJJVkFURSBQYXRjaHBvaW50VmFsdWUodW5zaWduZWQgaW5kZXgsIFR5cGUsIE9yaWdp
bik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgUGF0Y2hwb2ludFZhbHVlKFR5cGUsIE9yaWdpbik7
CiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1Byb2NlZHVyZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzUHJvY2VkdXJlLmNwcAkocmV2aXNpb24gMTk1OTAxKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsNyArNDYs
NiBAQCBQcm9jZWR1cmU6OlByb2NlZHVyZSgpCiAgICAgLCBtX2xhc3RQaGFzZU5hbWUoImluaXRp
YWwiKQogICAgICwgbV9ieXByb2R1Y3RzKHN0ZDo6bWFrZV91bmlxdWU8T3BhcXVlQnlwcm9kdWN0
cz4oKSkKICAgICAsIG1fY29kZShuZXcgQWlyOjpDb2RlKCp0aGlzKSkKLSAgICAsIG1fdmFsdWVz
Q29sbGVjdGlvbigqdGhpcykKIHsKIH0KIApAQCAtNzAsNDEgKzY5LDE0IEBAIEJhc2ljQmxvY2sq
IFByb2NlZHVyZTo6YWRkQmxvY2soZG91YmxlIGYKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi12
b2lkIFByb2NlZHVyZTo6c2V0QmxvY2tPcmRlckltcGwoVmVjdG9yPEJhc2ljQmxvY2sqPiYgYmxv
Y2tzKQotewotICAgIEluZGV4U2V0PEJhc2ljQmxvY2s+IGJsb2Nrc1NldDsKLSAgICBibG9ja3NT
ZXQuYWRkQWxsKGJsb2Nrcyk7Ci0KLSAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogKnRoaXMp
IHsKLSAgICAgICAgaWYgKCFibG9ja3NTZXQuY29udGFpbnMoYmxvY2spKQotICAgICAgICAgICAg
YmxvY2tzLmFwcGVuZChibG9jayk7Ci0gICAgfQotCi0gICAgLy8gUGxhY2UgYmxvY2tzIGludG8g
dGhpcydzIGJsb2NrIGxpc3QgYnkgZmlyc3QgbGVha2luZyBhbGwgb2YgdGhlIGJsb2NrcyBhbmQg
dGhlbiByZWFkb3B0aW5nCi0gICAgLy8gdGhlbS4KLSAgICBmb3IgKGF1dG8mIGVudHJ5IDogbV9i
bG9ja3MpCi0gICAgICAgIGVudHJ5LnJlbGVhc2UoKTsKLQotICAgIG1fYmxvY2tzLnJlc2l6ZShi
bG9ja3Muc2l6ZSgpKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmxvY2tzLnNpemUo
KTsgKytpKSB7Ci0gICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gYmxvY2tzW2ldOwotICAgICAg
ICBibG9jay0+bV9pbmRleCA9IGk7Ci0gICAgICAgIG1fYmxvY2tzW2ldID0gc3RkOjp1bmlxdWVf
cHRyPEJhc2ljQmxvY2s+KGJsb2NrKTsKLSAgICB9Ci19Ci0KLVN0YWNrU2xvdCogUHJvY2VkdXJl
OjphZGRTdGFja1Nsb3QodW5zaWduZWQgYnl0ZVNpemUsIFN0YWNrU2xvdEtpbmQga2luZCkKK1N0
YWNrU2xvdCogUHJvY2VkdXJlOjphZGRTdGFja1Nsb3QodW5zaWduZWQgYnl0ZVNpemUpCiB7Ci0g
ICAgc2l6ZV90IGluZGV4ID0gYWRkU3RhY2tTbG90SW5kZXgoKTsKLSAgICBzdGQ6OnVuaXF1ZV9w
dHI8U3RhY2tTbG90PiBzbG90KG5ldyBTdGFja1Nsb3QoaW5kZXgsIGJ5dGVTaXplLCBraW5kKSk7
Ci0gICAgU3RhY2tTbG90KiByZXN1bHQgPSBzbG90LmdldCgpOwotICAgIG1fc3RhY2tTbG90c1tp
bmRleF0gPSBXVEZNb3ZlKHNsb3QpOwotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIG1f
c3RhY2tTbG90cy5hZGQobmV3IFN0YWNrU2xvdChieXRlU2l6ZSkpOwogfQogCi1TdGFja1Nsb3Qq
IFByb2NlZHVyZTo6YWRkQW5vbnltb3VzU3RhY2tTbG90KFR5cGUgdHlwZSkKK1ZhcmlhYmxlKiBQ
cm9jZWR1cmU6OmFkZFZhcmlhYmxlKFR5cGUgdHlwZSkKIHsKLSAgICByZXR1cm4gYWRkU3RhY2tT
bG90KHNpemVvZlR5cGUodHlwZSksIFN0YWNrU2xvdEtpbmQ6OkFub255bW91cyk7CisgICAgcmV0
dXJuIG1fdmFyaWFibGVzLmFkZChuZXcgVmFyaWFibGUodHlwZSkpOyAKIH0KIAogVmFsdWUqIFBy
b2NlZHVyZTo6Y2xvbmUoVmFsdWUqIHZhbHVlKQpAQCAtMjA4LDYgKzE4MCwxMSBAQCB2b2lkIFBy
b2NlZHVyZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjCiAgICAgICAgIH0KICAgICAgICAgZGF0
YUxvZygiICAgICIsIGRlZXBEdW1wKCp0aGlzLCB2YWx1ZSksICJcbiIpOwogICAgIH0KKyAgICBp
ZiAodmFyaWFibGVzKCkuc2l6ZSgpKSB7CisgICAgICAgIG91dC5wcmludCgiVmFyaWFibGVzOlxu
Iik7CisgICAgICAgIGZvciAoVmFyaWFibGUqIHZhcmlhYmxlIDogdmFyaWFibGVzKCkpCisgICAg
ICAgICAgICBvdXQucHJpbnQoIiAgICAiLCBkZWVwRHVtcCh2YXJpYWJsZSksICJcbiIpOworICAg
IH0KICAgICBpZiAoc3RhY2tTbG90cygpLnNpemUoKSkgewogICAgICAgICBvdXQucHJpbnQoIlN0
YWNrIHNsb3RzOlxuIik7CiAgICAgICAgIGZvciAoU3RhY2tTbG90KiBzbG90IDogc3RhY2tTbG90
cygpKQpAQCAtMjI5LDE3ICsyMDYsMTcgQEAgVmVjdG9yPEJhc2ljQmxvY2sqPiBQcm9jZWR1cmU6
OmJsb2Nrc0luUAogCiB2b2lkIFByb2NlZHVyZTo6ZGVsZXRlU3RhY2tTbG90KFN0YWNrU2xvdCog
c3RhY2tTbG90KQogewotICAgIFJFTEVBU0VfQVNTRVJUKG1fc3RhY2tTbG90c1tzdGFja1Nsb3Qt
PmluZGV4KCldLmdldCgpID09IHN0YWNrU2xvdCk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoIXN0YWNr
U2xvdC0+aXNMb2NrZWQoKSk7Ci0gICAgbV9zdGFja1Nsb3RJbmRleEZyZWVMaXN0LmFwcGVuZChz
dGFja1Nsb3QtPmluZGV4KCkpOwotICAgIG1fc3RhY2tTbG90c1tzdGFja1Nsb3QtPmluZGV4KCld
ID0gbnVsbHB0cjsKKyAgICBtX3N0YWNrU2xvdHMucmVtb3ZlKHN0YWNrU2xvdCk7Cit9CisKK3Zv
aWQgUHJvY2VkdXJlOjpkZWxldGVWYXJpYWJsZShWYXJpYWJsZSogdmFyaWFibGUpCit7CisgICAg
bV92YXJpYWJsZXMucmVtb3ZlKHZhcmlhYmxlKTsKIH0KIAogdm9pZCBQcm9jZWR1cmU6OmRlbGV0
ZVZhbHVlKFZhbHVlKiB2YWx1ZSkKIHsKLSAgICBSRUxFQVNFX0FTU0VSVChtX3ZhbHVlc1t2YWx1
ZS0+aW5kZXgoKV0uZ2V0KCkgPT0gdmFsdWUpOwotICAgIG1fdmFsdWVJbmRleEZyZWVMaXN0LmFw
cGVuZCh2YWx1ZS0+aW5kZXgoKSk7Ci0gICAgbV92YWx1ZXNbdmFsdWUtPmluZGV4KCldID0gbnVs
bHB0cjsKKyAgICBtX3ZhbHVlcy5yZW1vdmUodmFsdWUpOwogfQogCiB2b2lkIFByb2NlZHVyZTo6
ZGVsZXRlT3JwaGFucygpCkBAIC0zMTEsMjYgKzI4OCwzMiBAQCBjb25zdCBSZWdpc3RlckF0T2Zm
c2V0TGlzdCYgUHJvY2VkdXJlOjpjCiAgICAgcmV0dXJuIGNvZGUoKS5jYWxsZWVTYXZlUmVnaXN0
ZXJzKCk7CiB9CiAKLXNpemVfdCBQcm9jZWR1cmU6OmFkZFN0YWNrU2xvdEluZGV4KCkKK1ZhbHVl
KiBQcm9jZWR1cmU6OmFkZFZhbHVlSW1wbChWYWx1ZSogdmFsdWUpCiB7Ci0gICAgaWYgKG1fc3Rh
Y2tTbG90SW5kZXhGcmVlTGlzdC5pc0VtcHR5KCkpIHsKLSAgICAgICAgc2l6ZV90IGluZGV4ID0g
bV9zdGFja1Nsb3RzLnNpemUoKTsKLSAgICAgICAgbV9zdGFja1Nsb3RzLmFwcGVuZChudWxscHRy
KTsKLSAgICAgICAgcmV0dXJuIGluZGV4OwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gbV9zdGFj
a1Nsb3RJbmRleEZyZWVMaXN0LnRha2VMYXN0KCk7CisgICAgcmV0dXJuIG1fdmFsdWVzLmFkZCh2
YWx1ZSk7CiB9CiAKLXNpemVfdCBQcm9jZWR1cmU6OmFkZFZhbHVlSW5kZXgoKQordm9pZCBQcm9j
ZWR1cmU6OnNldEJsb2NrT3JkZXJJbXBsKFZlY3RvcjxCYXNpY0Jsb2NrKj4mIGJsb2NrcykKIHsK
LSAgICBpZiAobV92YWx1ZUluZGV4RnJlZUxpc3QuaXNFbXB0eSgpKSB7Ci0gICAgICAgIHNpemVf
dCBpbmRleCA9IG1fdmFsdWVzLnNpemUoKTsKLSAgICAgICAgbV92YWx1ZXMuYXBwZW5kKG51bGxw
dHIpOwotICAgICAgICByZXR1cm4gaW5kZXg7CisgICAgSW5kZXhTZXQ8QmFzaWNCbG9jaz4gYmxv
Y2tzU2V0OworICAgIGJsb2Nrc1NldC5hZGRBbGwoYmxvY2tzKTsKKworICAgIGZvciAoQmFzaWNC
bG9jayogYmxvY2sgOiAqdGhpcykgeworICAgICAgICBpZiAoIWJsb2Nrc1NldC5jb250YWlucyhi
bG9jaykpCisgICAgICAgICAgICBibG9ja3MuYXBwZW5kKGJsb2NrKTsKKyAgICB9CisKKyAgICAv
LyBQbGFjZSBibG9ja3MgaW50byB0aGlzJ3MgYmxvY2sgbGlzdCBieSBmaXJzdCBsZWFraW5nIGFs
bCBvZiB0aGUgYmxvY2tzIGFuZCB0aGVuIHJlYWRvcHRpbmcKKyAgICAvLyB0aGVtLgorICAgIGZv
ciAoYXV0byYgZW50cnkgOiBtX2Jsb2NrcykKKyAgICAgICAgZW50cnkucmVsZWFzZSgpOworCisg
ICAgbV9ibG9ja3MucmVzaXplKGJsb2Nrcy5zaXplKCkpOworICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBibG9ja3Muc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgQmFzaWNCbG9jayogYmxvY2sg
PSBibG9ja3NbaV07CisgICAgICAgIGJsb2NrLT5tX2luZGV4ID0gaTsKKyAgICAgICAgbV9ibG9j
a3NbaV0gPSBzdGQ6OnVuaXF1ZV9wdHI8QmFzaWNCbG9jaz4oYmxvY2spOwogICAgIH0KLSAgICAK
LSAgICByZXR1cm4gbV92YWx1ZUluZGV4RnJlZUxpc3QudGFrZUxhc3QoKTsKIH0KIAogfSB9IC8v
IG5hbWVzcGFjZSBKU0M6OkIzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9j
ZWR1cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1
cmUuaAkocmV2aXNpb24gMTk1OTAxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJv
Y2VkdXJlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJCM09w
YXF1ZUJ5cHJvZHVjdHMuaCIKICNpbmNsdWRlICJCM09yaWdpbi5oIgogI2luY2x1ZGUgIkIzUENU
b09yaWdpbk1hcC5oIgorI2luY2x1ZGUgIkIzU3BhcnNlQ29sbGVjdGlvbi5oIgogI2luY2x1ZGUg
IkIzU3RhY2tTbG90S2luZC5oIgogI2luY2x1ZGUgIkIzVHlwZS5oIgogI2luY2x1ZGUgIkIzVmFs
dWVLZXkuaCIKQEAgLTk0LDggKzk1LDggQEAgcHVibGljOgogICAgICAgICBzZXRCbG9ja09yZGVy
SW1wbChibG9ja3MpOwogICAgIH0KIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIFN0YWNrU2xvdCog
YWRkU3RhY2tTbG90KHVuc2lnbmVkIGJ5dGVTaXplLCBTdGFja1Nsb3RLaW5kKTsKLSAgICBKU19F
WFBPUlRfUFJJVkFURSBTdGFja1Nsb3QqIGFkZEFub255bW91c1N0YWNrU2xvdChUeXBlKTsKKyAg
ICBKU19FWFBPUlRfUFJJVkFURSBTdGFja1Nsb3QqIGFkZFN0YWNrU2xvdCh1bnNpZ25lZCBieXRl
U2l6ZSk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgVmFyaWFibGUqIGFkZFZhcmlhYmxlKFR5cGUp
OwogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUuLi4gQXJn
dW1lbnRzPgogICAgIFZhbHVlVHlwZSogYWRkKEFyZ3VtZW50cy4uLik7CkBAIC0xNzgsMTQzICsx
NzksMjIgQEAgcHVibGljOgogICAgIFZlY3RvcjxCYXNpY0Jsb2NrKj4gYmxvY2tzSW5QcmVPcmRl
cigpOwogICAgIFZlY3RvcjxCYXNpY0Jsb2NrKj4gYmxvY2tzSW5Qb3N0T3JkZXIoKTsKIAotICAg
IGNsYXNzIFN0YWNrU2xvdHNDb2xsZWN0aW9uIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIFN0YWNr
U2xvdHNDb2xsZWN0aW9uKGNvbnN0IFByb2NlZHVyZSYgcHJvYykKLSAgICAgICAgICAgIDogbV9w
cm9jKHByb2MpCi0gICAgICAgIHsKLSAgICAgICAgfQotCi0gICAgICAgIHVuc2lnbmVkIHNpemUo
KSBjb25zdCB7IHJldHVybiBtX3Byb2MubV9zdGFja1Nsb3RzLnNpemUoKTsgfQotICAgICAgICBT
dGFja1Nsb3QqIGF0KHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBtX3Byb2MubV9zdGFj
a1Nsb3RzW2luZGV4XS5nZXQoKTsgfQotICAgICAgICBTdGFja1Nsb3QqIG9wZXJhdG9yW10odW5z
aWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGF0KGluZGV4KTsgfQotCi0gICAgICAgIGNsYXNz
IGl0ZXJhdG9yIHsKLSAgICAgICAgcHVibGljOgotICAgICAgICAgICAgaXRlcmF0b3IoKQotICAg
ICAgICAgICAgICAgIDogbV9jb2xsZWN0aW9uKG51bGxwdHIpCi0gICAgICAgICAgICAgICAgLCBt
X2luZGV4KDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGl0
ZXJhdG9yKGNvbnN0IFN0YWNrU2xvdHNDb2xsZWN0aW9uJiBjb2xsZWN0aW9uLCB1bnNpZ25lZCBp
bmRleCkKLSAgICAgICAgICAgICAgICA6IG1fY29sbGVjdGlvbigmY29sbGVjdGlvbikKLSAgICAg
ICAgICAgICAgICAsIG1faW5kZXgoZmluZE5leHQoaW5kZXgpKQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICBTdGFja1Nsb3QqIG9wZXJhdG9yKigpCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG1fY29sbGVjdGlvbi0+YXQobV9pbmRleCk7
Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGl0ZXJhdG9yJiBvcGVyYXRvcisrKCkKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBtX2luZGV4ID0gZmluZE5leHQobV9pbmRleCAr
IDEpOwotICAgICAgICAgICAgICAgIHJldHVybiAqdGhpczsKLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbV9pbmRleCA9PSBvdGhlci5tX2lu
ZGV4OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3Qg
aXRlcmF0b3ImIG90aGVyKSBjb25zdAotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJl
dHVybiAhKCp0aGlzID09IG90aGVyKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICBwcml2YXRl
OgotICAgICAgICAgICAgdW5zaWduZWQgZmluZE5leHQodW5zaWduZWQgaW5kZXgpCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKGluZGV4IDwgbV9jb2xsZWN0aW9uLT5zaXpl
KCkgJiYgIW1fY29sbGVjdGlvbi0+YXQoaW5kZXgpKQotICAgICAgICAgICAgICAgICAgICBpbmRl
eCsrOwotICAgICAgICAgICAgICAgIHJldHVybiBpbmRleDsKLSAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgIAotICAgICAgICAgICAgY29uc3QgU3RhY2tTbG90c0NvbGxlY3Rpb24qIG1fY29sbGVj
dGlvbjsKLSAgICAgICAgICAgIHVuc2lnbmVkIG1faW5kZXg7Ci0gICAgICAgIH07Ci0KLSAgICAg
ICAgaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcigqdGhpcywgMCk7IH0K
LSAgICAgICAgaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoKnRoaXMsIHNp
emUoKSk7IH0KLQotICAgIHByaXZhdGU6Ci0gICAgICAgIGNvbnN0IFByb2NlZHVyZSYgbV9wcm9j
OwotICAgIH07Ci0KLSAgICBTdGFja1Nsb3RzQ29sbGVjdGlvbiBzdGFja1Nsb3RzKCkgY29uc3Qg
eyByZXR1cm4gU3RhY2tTbG90c0NvbGxlY3Rpb24oKnRoaXMpOyB9CisgICAgU3BhcnNlQ29sbGVj
dGlvbjxTdGFja1Nsb3Q+JiBzdGFja1Nsb3RzKCkgeyByZXR1cm4gbV9zdGFja1Nsb3RzOyB9Cisg
ICAgY29uc3QgU3BhcnNlQ29sbGVjdGlvbjxTdGFja1Nsb3Q+JiBzdGFja1Nsb3RzKCkgY29uc3Qg
eyByZXR1cm4gbV9zdGFja1Nsb3RzOyB9CiAKKyAgICAvLyBTaG9ydCBmb3Igc3RhY2tTbG90cygp
LnJlbW92ZSgpLiBJdCdzIGJldHRlciB0byBjYWxsIHRoaXMgbWV0aG9kIHNpbmNlIGl0J3Mgb3V0
IG9mIGxpbmUuCiAgICAgdm9pZCBkZWxldGVTdGFja1Nsb3QoU3RhY2tTbG90Kik7Ci0gICAgCi0g
ICAgY2xhc3MgVmFsdWVzQ29sbGVjdGlvbiB7Ci0gICAgcHVibGljOgotICAgICAgICBWYWx1ZXND
b2xsZWN0aW9uKGNvbnN0IFByb2NlZHVyZSYgcHJvY2VkdXJlKQotICAgICAgICAgICAgOiBtX3By
b2NlZHVyZShwcm9jZWR1cmUpCi0gICAgICAgIHsKLSAgICAgICAgfQogCi0gICAgICAgIGNsYXNz
IGl0ZXJhdG9yIHsKLSAgICAgICAgcHVibGljOgotICAgICAgICAgICAgaXRlcmF0b3IoKQotICAg
ICAgICAgICAgICAgIDogbV9wcm9jZWR1cmUobnVsbHB0cikKLSAgICAgICAgICAgICAgICAsIG1f
aW5kZXgoMCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaXRl
cmF0b3IoY29uc3QgUHJvY2VkdXJlJiBwcm9jZWR1cmUsIHVuc2lnbmVkIGluZGV4KQotICAgICAg
ICAgICAgICAgIDogbV9wcm9jZWR1cmUoJnByb2NlZHVyZSkKLSAgICAgICAgICAgICAgICAsIG1f
aW5kZXgoZmluZE5leHQoaW5kZXgpKQotICAgICAgICAgICAgewotICAgICAgICAgICAgfQotCi0g
ICAgICAgICAgICBWYWx1ZSogb3BlcmF0b3IqKCkgY29uc3QKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICByZXR1cm4gbV9wcm9jZWR1cmUtPm1fdmFsdWVzW21faW5kZXhdLmdldCgpOwot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpdGVyYXRvciYgb3BlcmF0b3IrKygpCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbV9pbmRleCA9IGZpbmROZXh0KG1faW5kZXggKyAx
KTsKLSAgICAgICAgICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0Ci0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKG1fcHJvY2VkdXJlID09IG90aGVyLm1f
cHJvY2VkdXJlKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gbV9pbmRleCA9PSBvdGhlci5tX2lu
ZGV4OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBib29sIG9wZXJhdG9yIT0oY29uc3Qg
aXRlcmF0b3ImIG90aGVyKSBjb25zdAotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJl
dHVybiAhKCp0aGlzID09IG90aGVyKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICBwcml2YXRl
OgotICAgICAgICAgICAgdW5zaWduZWQgZmluZE5leHQodW5zaWduZWQgaW5kZXgpCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKGluZGV4IDwgbV9wcm9jZWR1cmUtPm1fdmFs
dWVzLnNpemUoKSAmJiAhbV9wcm9jZWR1cmUtPm1fdmFsdWVzW2luZGV4XSkKLSAgICAgICAgICAg
ICAgICAgICAgaW5kZXgrKzsKLSAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXg7Ci0gICAgICAg
ICAgICB9Ci0KLSAgICAgICAgICAgIGNvbnN0IFByb2NlZHVyZSogbV9wcm9jZWR1cmU7Ci0gICAg
ICAgICAgICB1bnNpZ25lZCBtX2luZGV4OwotICAgICAgICB9OwotCi0gICAgICAgIGl0ZXJhdG9y
IGJlZ2luKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IobV9wcm9jZWR1cmUsIDApOyB9Ci0gICAg
ICAgIGl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKG1fcHJvY2VkdXJlLCBt
X3Byb2NlZHVyZS5tX3ZhbHVlcy5zaXplKCkpOyB9Ci0KLSAgICAgICAgdW5zaWduZWQgc2l6ZSgp
IGNvbnN0IHsgcmV0dXJuIG1fcHJvY2VkdXJlLm1fdmFsdWVzLnNpemUoKTsgfQotICAgICAgICBW
YWx1ZSogYXQodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvY2VkdXJlLm1fdmFs
dWVzW2luZGV4XS5nZXQoKTsgfQotICAgICAgICBWYWx1ZSogb3BlcmF0b3JbXSh1bnNpZ25lZCBp
bmRleCkgY29uc3QgeyByZXR1cm4gYXQoaW5kZXgpOyB9Ci0gICAgICAgIAotICAgIHByaXZhdGU6
Ci0gICAgICAgIGNvbnN0IFByb2NlZHVyZSYgbV9wcm9jZWR1cmU7Ci0gICAgfTsKKyAgICBTcGFy
c2VDb2xsZWN0aW9uPFZhcmlhYmxlPiYgdmFyaWFibGVzKCkgeyByZXR1cm4gbV92YXJpYWJsZXM7
IH0KKyAgICBjb25zdCBTcGFyc2VDb2xsZWN0aW9uPFZhcmlhYmxlPiYgdmFyaWFibGVzKCkgY29u
c3QgeyByZXR1cm4gbV92YXJpYWJsZXM7IH0KKworICAgIC8vIFNob3J0IGZvciB2YXJpYWJsZXMo
KS5yZW1vdmUoKS4gSXQncyBiZXR0ZXIgdG8gY2FsbCB0aGlzIG1ldGhvZCBzaW5jZSBpdCdzIG91
dCBvZiBsaW5lLgorICAgIHZvaWQgZGVsZXRlVmFyaWFibGUoVmFyaWFibGUqKTsKIAotICAgIGNv
bnN0IFZhbHVlc0NvbGxlY3Rpb24mIHZhbHVlcygpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzQ29s
bGVjdGlvbjsgfQorICAgIFNwYXJzZUNvbGxlY3Rpb248VmFsdWU+JiB2YWx1ZXMoKSB7IHJldHVy
biBtX3ZhbHVlczsgfQorICAgIGNvbnN0IFNwYXJzZUNvbGxlY3Rpb248VmFsdWU+JiB2YWx1ZXMo
KSBjb25zdCB7IHJldHVybiBtX3ZhbHVlczsgfQogCisgICAgLy8gU2hvcnQgZm9yIHZhbHVlcygp
LnJlbW92ZSgpLiBJdCdzIGJldHRlciB0byBjYWxsIHRoaXMgbWV0aG9kIHNpbmNlIGl0J3Mgb3V0
IG9mIGxpbmUuCiAgICAgdm9pZCBkZWxldGVWYWx1ZShWYWx1ZSopOwogCiAgICAgLy8gQSB2YWxp
ZCBwcm9jZWR1cmUgY2Fubm90IGNvbnRhaW4gYW55IG9ycGhhbiB2YWx1ZXMuIEFuIG9ycGhhbiBp
cyBhIHZhbHVlIHRoYXQgaXMgbm90IGluCkBAIC0zNjcsMTcgKzI0NywxNCBAQCBwdWJsaWM6CiAK
IHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEJsb2NrSW5zZXJ0aW9uU2V0OwotICAgIAotICAg
IHZvaWQgc2V0QmxvY2tPcmRlckltcGwoVmVjdG9yPEJhc2ljQmxvY2sqPiYpOwogCi0gICAgc2l6
ZV90IGFkZFN0YWNrU2xvdEluZGV4KCk7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgc2l6ZV90IGFk
ZFZhbHVlSW5kZXgoKTsKKyAgICBWYWx1ZSogYWRkVmFsdWVJbXBsKFZhbHVlKik7CisgICAgdm9p
ZCBzZXRCbG9ja09yZGVySW1wbChWZWN0b3I8QmFzaWNCbG9jayo+Jik7CiAKLSAgICBWZWN0b3I8
c3RkOjp1bmlxdWVfcHRyPFN0YWNrU2xvdD4+IG1fc3RhY2tTbG90czsKKyAgICBTcGFyc2VDb2xs
ZWN0aW9uPFN0YWNrU2xvdD4gbV9zdGFja1Nsb3RzOworICAgIFNwYXJzZUNvbGxlY3Rpb248VmFy
aWFibGU+IG1fdmFyaWFibGVzOwogICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QmFzaWNCbG9j
az4+IG1fYmxvY2tzOwotICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8VmFsdWU+PiBtX3ZhbHVl
czsKLSAgICBWZWN0b3I8c2l6ZV90PiBtX3N0YWNrU2xvdEluZGV4RnJlZUxpc3Q7Ci0gICAgVmVj
dG9yPHNpemVfdD4gbV92YWx1ZUluZGV4RnJlZUxpc3Q7CisgICAgU3BhcnNlQ29sbGVjdGlvbjxW
YWx1ZT4gbV92YWx1ZXM7CiAgICAgc3RkOjp1bmlxdWVfcHRyPENGRz4gbV9jZmc7CiAgICAgc3Rk
Ojp1bmlxdWVfcHRyPERvbWluYXRvcnM+IG1fZG9taW5hdG9yczsKICAgICBIYXNoU2V0PFZhbHVl
S2V5PiBtX2Zhc3RDb25zdGFudHM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQ
cm9jZWR1cmVJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzUHJvY2VkdXJlSW5saW5lcy5oCShyZXZpc2lvbiAxOTU5MDEpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNQcm9jZWR1cmVJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDEx
ICszNiw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewogdGVtcGxhdGU8dHlwZW5h
bWUgVmFsdWVUeXBlLCB0eXBlbmFtZS4uLiBBcmd1bWVudHM+CiBWYWx1ZVR5cGUqIFByb2NlZHVy
ZTo6YWRkKEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCiB7Ci0gICAgc2l6ZV90IGluZGV4ID0gYWRk
VmFsdWVJbmRleCgpOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxWYWx1ZVR5cGU+IHZhbHVlKG5ldyBW
YWx1ZVR5cGUoaW5kZXgsIGFyZ3VtZW50cy4uLikpOwotICAgIFZhbHVlVHlwZSogcmVzdWx0ID0g
dmFsdWUuZ2V0KCk7Ci0gICAgbV92YWx1ZXNbaW5kZXhdID0gV1RGTW92ZSh2YWx1ZSk7Ci0gICAg
cmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8VmFsdWVUeXBlKj4oYWRkVmFs
dWVJbXBsKG5ldyBWYWx1ZVR5cGUoYXJndW1lbnRzLi4uKSkpOwogfQogCiB9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6QjMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Nsb3RCYXNlVmFs
dWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTbG90QmFzZVZh
bHVlLmgJKHJldmlzaW9uIDE5NTkwMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Ns
b3RCYXNlVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtNTAsOCArNTAsOCBAQCBwcm90ZWN0ZWQ6
CiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7CiAKLSAgICBTbG90QmFzZVZh
bHVlKHVuc2lnbmVkIGluZGV4LCBPcmlnaW4gb3JpZ2luLCBTdGFja1Nsb3QqIHNsb3QpCi0gICAg
ICAgIDogVmFsdWUoaW5kZXgsIENoZWNrZWRPcGNvZGUsIFNsb3RCYXNlLCBwb2ludGVyVHlwZSgp
LCBvcmlnaW4pCisgICAgU2xvdEJhc2VWYWx1ZShPcmlnaW4gb3JpZ2luLCBTdGFja1Nsb3QqIHNs
b3QpCisgICAgICAgIDogVmFsdWUoQ2hlY2tlZE9wY29kZSwgU2xvdEJhc2UsIHBvaW50ZXJUeXBl
KCksIG9yaWdpbikKICAgICAgICAgLCBtX3Nsb3Qoc2xvdCkKICAgICB7CiAgICAgfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3BhcnNlQ29sbGVjdGlvbi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1NwYXJzZUNvbGxlY3Rpb24uaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1NwYXJzZUNvbGxlY3Rpb24uaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEzOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzU3BhcnNlQ29sbGVjdGlvbl9oCisjZGVm
aW5lIEIzU3BhcnNlQ29sbGVjdGlvbl9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVk
ZSA8d3RmL1N0ZExpYkV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKKy8vIEIzOjpQcm9jZWR1cmUgYW5kIEFpcjo6Q29k
ZSBoYXZlIGEgbG90IG9mIGNvbGxlY3Rpb25zIG9mIGluZGV4ZWQgdGhpbmdzLiBUaGlzIGhhcyBh
bGwgb2YgdGhlCisvLyBsb2dpYy4KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2NsYXNzIFNwYXJz
ZUNvbGxlY3Rpb24geworICAgIHR5cGVkZWYgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxUPj4gVmVj
dG9yVHlwZTsKKyAgICAKK3B1YmxpYzoKKyAgICBTcGFyc2VDb2xsZWN0aW9uKCkKKyAgICB7Cisg
ICAgfQorCisgICAgVCogYWRkKHN0ZDo6dW5pcXVlX3B0cjxUPiB2YWx1ZSkKKyAgICB7CisgICAg
ICAgIFQqIHJlc3VsdCA9IHZhbHVlLmdldCgpOworICAgICAgICAKKyAgICAgICAgc2l6ZV90IGlu
ZGV4OworICAgICAgICBpZiAobV9pbmRleEZyZWVMaXN0LmlzRW1wdHkoKSkgeworICAgICAgICAg
ICAgaW5kZXggPSBtX3ZlY3Rvci5zaXplKCk7CisgICAgICAgICAgICBtX3ZlY3Rvci5hcHBlbmQo
bnVsbHB0cik7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgaW5kZXggPSBtX2luZGV4RnJl
ZUxpc3QudGFrZUxhc3QoKTsKKworICAgICAgICB2YWx1ZS0+bV9pbmRleCA9IGluZGV4OworCisg
ICAgICAgIG1fdmVjdG9yW2luZGV4XSA9IFdURk1vdmUodmFsdWUpOworCisgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgfQorCisgICAgdm9pZCByZW1vdmUoVCogdmFsdWUpCisgICAgeworICAg
ICAgICBSRUxFQVNFX0FTU0VSVChtX3ZlY3Rvclt2YWx1ZS0+bV9pbmRleF0uZ2V0KCkgPT0gdmFs
dWUpOworICAgICAgICBtX2luZGV4RnJlZUxpc3QuYXBwZW5kKHZhbHVlLT5tX2luZGV4KTsKKyAg
ICAgICAgbV92YWx1ZXNbdmFsdWUtPm1faW5kZXhdID0gbnVsbHB0cjsKKyAgICB9CisKKyAgICB1
bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV92ZWN0b3Iuc2l6ZSgpOyB9CisgICAgVCog
YXQodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fdmVjdG9yW2luZGV4XS5nZXQoKTsg
fQorICAgIFQqIG9wZXJhdG9yW10odW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGF0KGlu
ZGV4KTsgfQorCisgICAgY2xhc3MgaXRlcmF0b3IgeworICAgIHB1YmxpYzoKKyAgICAgICAgaXRl
cmF0b3IoKQorICAgICAgICAgICAgOiBtX2NvbGxlY3Rpb24obnVsbHB0cikKKyAgICAgICAgICAg
ICwgbV9pbmRleCgwKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBpdGVyYXRvcihj
b25zdCBTcGFyc2VDb2xsZWN0aW9uJiBjb2xsZWN0aW9uLCB1bnNpZ25lZCBpbmRleCkKKyAgICAg
ICAgICAgIDogbV9jb2xsZWN0aW9uKCZjb2xsZWN0aW9uKQorICAgICAgICAgICAgLCBtX2luZGV4
KGZpbmRJbmRleChpbmRleCkpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIFQqIG9w
ZXJhdG9yKigpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2NvbGxlY3Rpb24tPmF0
KG1faW5kZXgpOworICAgICAgICB9CisKKyAgICAgICAgaXRlcmF0b3ImIG9wZXJhdG9yKysoKQor
ICAgICAgICB7CisgICAgICAgICAgICBtX2luZGV4ID0gZmluZE5leHQobV9pbmRleCArIDEpOwor
ICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBvcGVy
YXRvcj09KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgeworICAgICAgICAg
ICAgQVNTRVJUKG1fY29sbGVjdGlvbiA9PSBvdGhlci5tX2NvbGxlY3Rpb24pOworICAgICAgICAg
ICAgcmV0dXJuIG1faW5kZXggPT0gb3RoZXIubV9pbmRleDsKKyAgICAgICAgfQorCisgICAgICAg
IGJvb2wgb3BlcmF0b3IhPShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICAgICAgfQorCisgICAg
cHJpdmF0ZToKKyAgICAgICAgdW5zaWduZWQgZmluZE5leHQodW5zaWduZWQgaW5kZXgpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHdoaWxlIChpbmRleCA8IG1fY29sbGVjdGlvbi0+c2l6ZSgpICYm
ICFtX2NvbGxlY3Rpb24tPmF0KGluZGV4KSkKKyAgICAgICAgICAgICAgICBpbmRleCsrOworICAg
ICAgICAgICAgcmV0dXJuIGluZGV4OworICAgICAgICB9CisKKyAgICAgICAgY29uc3QgU3BhcnNl
Q29sbGVjdGlvbiogbV9jb2xsZWN0aW9uOworICAgICAgICB1bnNpZ2VkIG1faW5kZXg7CisgICAg
fTsKKworICAgIGl0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoKnRoaXMs
IDApOyB9CisgICAgaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoKnRoaXMs
IHNpemUoKSk7IH0KKworcHJpdmF0ZToKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPFQ+PiBt
X3ZlY3RvcjsKKyAgICBWZWN0b3I8c2l6ZV90PiBtX2luZGV4RnJlZUxpc3Q7Cit9OworCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRp
ZiAvLyBCM1NwYXJzZUNvbGxlY3Rpb25faAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNTdGFja1Nsb3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1N0YWNrU2xvdC5jcHAJKHJldmlzaW9uIDE5NTkwMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1N0YWNrU2xvdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDEzICs0MSwxMSBA
QCB2b2lkIFN0YWNrU2xvdDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjCiAKIHZvaWQgU3RhY2tT
bG90OjpkZWVwRHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogewotICAgIG91dC5wcmludCgi
Ynl0ZVNpemUgPSAiLCBtX2J5dGVTaXplLCAiLCBvZmZzZXRGcm9tRlAgPSAiLCBtX29mZnNldEZy
b21GUCwgIiwga2luZCA9ICIsIG1fa2luZCk7CisgICAgb3V0LnByaW50KCJieXRlU2l6ZSA9ICIs
IG1fYnl0ZVNpemUsICIsIG9mZnNldEZyb21GUCA9ICIsIG1fb2Zmc2V0RnJvbUZQKTsKIH0KIAot
U3RhY2tTbG90OjpTdGFja1Nsb3QodW5zaWduZWQgaW5kZXgsIHVuc2lnbmVkIGJ5dGVTaXplLCBT
dGFja1Nsb3RLaW5kIGtpbmQpCi0gICAgOiBtX2luZGV4KGluZGV4KQotICAgICwgbV9ieXRlU2l6
ZShieXRlU2l6ZSkKLSAgICAsIG1fa2luZChraW5kKQorU3RhY2tTbG90OjpTdGFja1Nsb3QodW5z
aWduZWQgYnl0ZVNpemUpCisgICAgOiBtX2J5dGVTaXplKGJ5dGVTaXplKQogewogfQogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja1Nsb3QuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja1Nsb3QuaAkocmV2aXNpb24gMTk1OTAxKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tTbG90LmgJKHdvcmtpbmcgY29weSkK
QEAgLTI4LDcgKzI4LDYgQEAKIAogI2lmIEVOQUJMRShCM19KSVQpCiAKLSNpbmNsdWRlICJCM1N0
YWNrU2xvdEtpbmQuaCIKICNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgogI2luY2x1ZGUgPHd0
Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgpAQCAtNDksOCAr
NDgsNiBAQCBwdWJsaWM6CiAgICAgflN0YWNrU2xvdCgpOwogCiAgICAgdW5zaWduZWQgYnl0ZVNp
emUoKSBjb25zdCB7IHJldHVybiBtX2J5dGVTaXplOyB9Ci0gICAgU3RhY2tTbG90S2luZCBraW5k
KCkgY29uc3QgeyByZXR1cm4gbV9raW5kOyB9Ci0gICAgYm9vbCBpc0xvY2tlZCgpIGNvbnN0IHsg
cmV0dXJuIG1fa2luZCA9PSBTdGFja1Nsb3RLaW5kOjpMb2NrZWQ7IH0KICAgICB1bnNpZ25lZCBp
bmRleCgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXg7IH0KIAogICAgIC8vIFRoaXMgZ2V0cyBhc3Np
Z25lZCBhdCB0aGUgZW5kIG9mIGNvbXBpbGF0aW9uLiBCdXQsIHlvdSBjYW4gdG90YWxseSBwaW4g
c3RhY2sgc2xvdHMuIFVzZSB0aGUKQEAgLTYzLDE4ICs2MCwxNyBAQCBwdWJsaWM6CiAgICAgICAg
IG1fb2Zmc2V0RnJvbUZQID0gdmFsdWU7CiAgICAgfQogCi0gICAgdm9pZCBkdW1wKFByaW50U3Ry
ZWFtJiBvdXQpIGNvbnN0OworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwogICAg
IHZvaWQgZGVlcER1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKIAogcHJpdmF0ZToKICAgICBmcmll
bmQgY2xhc3MgQWlyOjpTdGFja1Nsb3Q7CiAgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKIAot
ICAgIFN0YWNrU2xvdCh1bnNpZ25lZCBpbmRleCwgdW5zaWduZWQgYnl0ZVNpemUsIFN0YWNrU2xv
dEtpbmQpOworICAgIFN0YWNrU2xvdCh1bnNpZ25lZCBieXRlU2l6ZSk7CiAKLSAgICB1bnNpZ25l
ZCBtX2luZGV4OwotICAgIHVuc2lnbmVkIG1fYnl0ZVNpemU7Ci0gICAgU3RhY2tTbG90S2luZCBt
X2tpbmQ7CisgICAgdW5zaWduZWQgbV9pbmRleCB7IFVJTlRfTUFYIH07CisgICAgdW5zaWduZWQg
bV9ieXRlU2l6ZSB7IDAgfTsKICAgICBpbnRwdHJfdCBtX29mZnNldEZyb21GUCB7IDAgfTsKIH07
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrU2xvdEtpbmQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrU2xvdEtpbmQuY3Bw
CShyZXZpc2lvbiAxOTU5MDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja1Ns
b3RLaW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1MiArMCwwIEBACi0vKgotICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
Ci0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAq
Ci0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJCM1N0YWNrU2xvdEtpbmQuaCIKLQotI2lmIEVOQUJMRShCM19KSVQpCi0KLSNpbmNs
dWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KLQotbmFtZXNwYWNlIFdURiB7Ci0KLXVzaW5nIG5hbWVz
cGFjZSBKU0M6OkIzOwotCi12b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgU3Rh
Y2tTbG90S2luZCBraW5kKQotewotICAgIHN3aXRjaCAoa2luZCkgewotICAgIGNhc2UgU3RhY2tT
bG90S2luZDo6TG9ja2VkOgotICAgICAgICBvdXQucHJpbnQoIkxvY2tlZCIpOwotICAgICAgICBy
ZXR1cm47Ci0gICAgY2FzZSBTdGFja1Nsb3RLaW5kOjpBbm9ueW1vdXM6Ci0gICAgICAgIG91dC5w
cmludCgiQW5vbnltb3VzIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV1RGCi0KLSNlbmRpZiAv
LyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tT
bG90S2luZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNr
U2xvdEtpbmQuaAkocmV2aXNpb24gMTk1OTAxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzU3RhY2tTbG90S2luZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYzICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
Ci0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIEIz
U3RhY2tTbG90S2luZF9oCi0jZGVmaW5lIEIzU3RhY2tTbG90S2luZF9oCi0KLSNpZiBFTkFCTEUo
QjNfSklUKQotCi1uYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKLQotZW51bSBjbGFzcyBT
dGFja1Nsb3RLaW5kIDogdWludDhfdCB7Ci0gICAgLy8gQSBsb2NrZWQgc3RhY2sgc2xvdCBuZWVk
cyB0byBiZSBrZXB0IGRpc2pvaW50IGZyb20gYWxsIG90aGVycyBiZWNhdXNlIHdlIGludGVuZCB0
byBlc2NhcGUKLSAgICAvLyBpdCBldmVuIGlmIHRoYXQncyBub3Qgb2J2aW91cy4gVGhpcyBoYXBw
ZW5zIHdoZW4gdGhlIHJ1bnRpbWUgdGFrZXMgdGhlIGFkZHJlc3Mgb2YgYSBzdGFjawotICAgIC8v
IHNsb3QuCi0gICAgTG9ja2VkLAotCi0gICAgLy8gVGhlc2Ugc3RhY2sgc2xvdHMgYmVoYXZlIGxp
a2UgdmFyaWFibGVzLiBVbmRlZmluZWQgYmVoYXZpb3IgaGFwcGVucyBpZiB5b3Ugc3RvcmUgbGVz
cyB0aGFuCi0gICAgLy8gdGhlIHdpZHRoIG9mIHRoZSBzbG90LgotICAgIEFub255bW91cwotCi0g
ICAgLy8gRklYTUU6IFdlIHNob3VsZCBhZGQgYSB0aGlyZCBtb2RlLCB3aGljaCBtZWFucyB0aGF0
IHRoZSBzdGFjayBzbG90IHdpbGwgYmUgcmVhZCBhc3luY2hyb25vdXNseQotICAgIC8vIGFzIHdp
dGggTG9ja2VkLCBidXQgbmV2ZXIgd3JpdHRlbiB0byBhc3luY2hyb25vdXNseS4gVGhlbiwgQWly
IGNvdWxkIG9wdGltaXplIHNwaWxsaW5nIGFuZAotICAgIC8vIGZpbGxpbmcgYnkgdHJhY2tpbmcg
d2hldGhlciB0aGUgdmFsdWUgaGFkIGJlZW4gc3RvcmVkIHRvIGEgcmVhZC1vbmx5IGxvY2tlZCBz
bG90LiBJZiBpdCBoYWQsCi0gICAgLy8gdGhlbiB3ZSBjYW4gcmVmaWxsIGZyb20gdGhhdCBzbG90
LgotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA1ODcK
LX07Ci0KLX0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwotCi1uYW1lc3BhY2UgV1RGIHsKLQotY2xh
c3MgUHJpbnRTdHJlYW07Ci0KLXZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6
QjM6OlN0YWNrU2xvdEtpbmQpOwotCi19IC8vIG5hbWVzcGFjZSBXVEYKLQotI2VuZGlmIC8vIEVO
QUJMRShCM19KSVQpCi0KLSNlbmRpZiAvLyBCM1N0YWNrU2xvdEtpbmRfaAotCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcFZhbHVlLmNwcAkocmV2aXNpb24gMTk1
OTAxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBWYWx1ZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTgzLDggKzgzLDggQEAgdm9pZCBTdGFja21hcFZhbHVlOjpkdW1wTWV0
YShDb21tYVByaW50ZQogICAgICAgICAiLCBsYXRlQ2xvYmJlcmVkID0gIiwgbV9sYXRlQ2xvYmJl
cmVkLCAiLCB1c2VkUmVnaXN0ZXJzID0gIiwgbV91c2VkUmVnaXN0ZXJzKTsKIH0KIAotU3RhY2tt
YXBWYWx1ZTo6U3RhY2ttYXBWYWx1ZSh1bnNpZ25lZCBpbmRleCwgQ2hlY2tlZE9wY29kZVRhZywg
T3Bjb2RlIG9wY29kZSwgVHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luKQotICAgIDogVmFsdWUoaW5k
ZXgsIENoZWNrZWRPcGNvZGUsIG9wY29kZSwgdHlwZSwgb3JpZ2luKQorU3RhY2ttYXBWYWx1ZTo6
U3RhY2ttYXBWYWx1ZShDaGVja2VkT3Bjb2RlVGFnLCBPcGNvZGUgb3Bjb2RlLCBUeXBlIHR5cGUs
IE9yaWdpbiBvcmlnaW4pCisgICAgOiBWYWx1ZShDaGVja2VkT3Bjb2RlLCBvcGNvZGUsIHR5cGUs
IG9yaWdpbikKIHsKICAgICBBU1NFUlQoYWNjZXB0cyhvcGNvZGUpKTsKIH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcFZhbHVlLmgJKHJldmlzaW9uIDE5NTkwMSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwVmFsdWUuaAkod29ya2luZyBj
b3B5KQpAQCAtMjg0LDcgKzI4NCw3IEBAIHByb3RlY3RlZDoKICAgICB2b2lkIGR1bXBDaGlsZHJl
bihDb21tYVByaW50ZXImLCBQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZvaWQg
ZHVtcE1ldGEoQ29tbWFQcmludGVyJiwgUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKIAot
ICAgIFN0YWNrbWFwVmFsdWUodW5zaWduZWQgaW5kZXgsIENoZWNrZWRPcGNvZGVUYWcsIE9wY29k
ZSwgVHlwZSwgT3JpZ2luKTsKKyAgICBTdGFja21hcFZhbHVlKENoZWNrZWRPcGNvZGVUYWcsIE9w
Y29kZSwgVHlwZSwgT3JpZ2luKTsKIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgQ2hlY2tT
cGVjaWFsOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3dpdGNoVmFsdWUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N3aXRjaFZhbHVlLmNw
cAkocmV2aXNpb24gMTk1OTAxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3dpdGNo
VmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OCw5ICs2OCw4IEBAIFZhbHVlKiBTd2l0Y2hW
YWx1ZTo6Y2xvbmVJbXBsKCkgY29uc3QKICAgICByZXR1cm4gbmV3IFN3aXRjaFZhbHVlKCp0aGlz
KTsKIH0KIAotU3dpdGNoVmFsdWU6OlN3aXRjaFZhbHVlKAotICAgIHVuc2lnbmVkIGluZGV4LCBP
cmlnaW4gb3JpZ2luLCBWYWx1ZSogY2hpbGQsIGNvbnN0IEZyZXF1ZW50ZWRCbG9jayYgZmFsbFRo
cm91Z2gpCi0gICAgOiBDb250cm9sVmFsdWUoaW5kZXgsIFN3aXRjaCwgVm9pZCwgb3JpZ2luLCBj
aGlsZCkKK1N3aXRjaFZhbHVlOjpTd2l0Y2hWYWx1ZShPcmlnaW4gb3JpZ2luLCBWYWx1ZSogY2hp
bGQsIGNvbnN0IEZyZXF1ZW50ZWRCbG9jayYgZmFsbFRocm91Z2gpCisgICAgOiBDb250cm9sVmFs
dWUoU3dpdGNoLCBWb2lkLCBvcmlnaW4sIGNoaWxkKQogewogICAgIG1fc3VjY2Vzc29ycy5hcHBl
bmQoZmFsbFRocm91Z2gpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3dp
dGNoVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTd2l0
Y2hWYWx1ZS5oCShyZXZpc2lvbiAxOTU5MDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNTd2l0Y2hWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjEsOCArMTIxLDcgQEAgcHJvdGVj
dGVkOgogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOwogCi0gICAgSlNfRVhQ
T1JUX1BSSVZBVEUgU3dpdGNoVmFsdWUoCi0gICAgICAgIHVuc2lnbmVkIGluZGV4LCBPcmlnaW4s
IFZhbHVlKiBjaGlsZCwgY29uc3QgRnJlcXVlbnRlZEJsb2NrJiBmYWxsVGhyb3VnaCk7CisgICAg
SlNfRVhQT1JUX1BSSVZBVEUgU3dpdGNoVmFsdWUoT3JpZ2luLCBWYWx1ZSogY2hpbGQsIGNvbnN0
IEZyZXF1ZW50ZWRCbG9jayYgZmFsbFRocm91Z2gpOwogCiAgICAgVmVjdG9yPGludDY0X3Q+IG1f
dmFsdWVzOwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Vwc2lsb25WYWx1
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Vwc2lsb25WYWx1
ZS5oCShyZXZpc2lvbiAxOTU5MDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNVcHNp
bG9uVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtNTcsOCArNTcsOCBAQCBwcml2YXRlOgogICAg
IC8vIE5vdGUgdGhhdCBwYXNzaW5nIHRoZSBQaGkgZHVyaW5nIGNvbnN0cnVjdGlvbiBpcyBvcHRp
b25hbC4gQSB2YWxpZCBwYXR0ZXJuIGlzIHRvIGZpcnN0IGNyZWF0ZQogICAgIC8vIHRoZSBVcHNp
bG9ucyB3aXRob3V0IHRoZSBQaGksIHRoZW4gY3JlYXRlIHRoZSBQaGksIHRoZW4gZ28gYmFjayBh
bmQgdGVsbCB0aGUgVXBzaWxvbnMgYWJvdXQKICAgICAvLyB0aGUgUGhpLiBUaGlzIGFsbG93cyB5
b3UgdG8gZW1pdCBjb2RlIGluIGl0cyBuYXR1cmFsIG9yZGVyLgotICAgIFVwc2lsb25WYWx1ZSh1
bnNpZ25lZCBpbmRleCwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIHZhbHVlLCBWYWx1ZSogcGhpID0g
bnVsbHB0cikKLSAgICAgICAgOiBWYWx1ZShpbmRleCwgQ2hlY2tlZE9wY29kZSwgVXBzaWxvbiwg
Vm9pZCwgb3JpZ2luLCB2YWx1ZSkKKyAgICBVcHNpbG9uVmFsdWUoT3JpZ2luIG9yaWdpbiwgVmFs
dWUqIHZhbHVlLCBWYWx1ZSogcGhpID0gbnVsbHB0cikKKyAgICAgICAgOiBWYWx1ZShDaGVja2Vk
T3Bjb2RlLCBVcHNpbG9uLCBWb2lkLCBvcmlnaW4sIHZhbHVlKQogICAgICAgICAsIG1fcGhpKHBo
aSkKICAgICB7CiAgICAgICAgIGlmIChwaGkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNWYWxpZGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzVmFsaWRhdGUuY3BwCShyZXZpc2lvbiAxOTU5MDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNWYWxpZGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3NSw2ICszNzUsOSBAQCBw
dWJsaWM6CiAKICAgICAgICAgICAgIFZBTElEQVRFKCEodmFsdWUtPmVmZmVjdHMoKS53cml0ZXMg
JiYgdmFsdWUtPmtleSgpKSwgKCJBdCAiLCAqdmFsdWUpKTsKICAgICAgICAgfQorCisgICAgICAg
IGZvciAoVmFyaWFibGUqIHZhcmlhYmxlIDogbV9wcm9jLnZhcmlhYmxlcygpKQorICAgICAgICAg
ICAgVkFMSURBVEUodmFyaWFibGUtPnR5cGUoKSAhPSBWb2lkLCAoIkF0ICIsICp2YXJpYWJsZSkp
OwogICAgIH0KIAogcHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Zh
bHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5j
cHAJKHJldmlzaW9uIDE5NTkwMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDg0LDEwICs0ODQsMTIgQEAgRWZmZWN0cyBWYWx1ZTo6
ZWZmZWN0cygpIGNvbnN0CiAgICAgICAgIHJlc3VsdC5yZWFkcyA9IEhlYXBSYW5nZTo6dG9wKCk7
CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgVXBzaWxvbjoKLSAgICAgICAgcmVzdWx0LndyaXRl
c1NTQVN0YXRlID0gdHJ1ZTsKKyAgICBjYXNlIFNldDoKKyAgICAgICAgcmVzdWx0LndyaXRlc0xv
Y2FsU3RhdGUgPSB0cnVlOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFBoaToKLSAgICAgICAg
cmVzdWx0LnJlYWRzU1NBU3RhdGUgPSB0cnVlOworICAgIGNhc2UgU2V0OgorICAgICAgICByZXN1
bHQucmVhZHNMb2NhbFN0YXRlID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBKdW1w
OgogICAgIGNhc2UgQnJhbmNoOgpAQCAtNTk4LDYgKzYwMCw3IEBAIHZvaWQgVmFsdWU6OmNoZWNr
T3Bjb2RlKE9wY29kZSBvcGNvZGUpCiAgICAgQVNTRVJUKCFQYXRjaHBvaW50VmFsdWU6OmFjY2Vw
dHMob3Bjb2RlKSk7CiAgICAgQVNTRVJUKCFTbG90QmFzZVZhbHVlOjphY2NlcHRzKG9wY29kZSkp
OwogICAgIEFTU0VSVCghVXBzaWxvblZhbHVlOjphY2NlcHRzKG9wY29kZSkpOworICAgIEFTU0VS
VCghVmFyaWFibGVWYWx1ZTo6YWNjZXB0cyhvcGNvZGUpKTsKIH0KICNlbmRpZiAvLyAhQVNTRVJU
X0RJU0FCTEVECiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuaAkocmV2aXNpb24g
MTk1OTAxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuaAkod29ya2luZyBj
b3B5KQpAQCAtMjQzLDI3ICsyNDMsMjQgQEAgcHJvdGVjdGVkOgogICAgIC8vIEluc3RhbnRpYXRl
IHZhbHVlcyB2aWEgUHJvY2VkdXJlLgogICAgIC8vIFRoaXMgZm9ybSByZXF1aXJlcyBzcGVjaWZ5
aW5nIHRoZSB0eXBlIGV4cGxpY2l0bHk6CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1l
bnRzPgotICAgIGV4cGxpY2l0IFZhbHVlKHVuc2lnbmVkIGluZGV4LCBDaGVja2VkT3Bjb2RlVGFn
LCBPcGNvZGUgb3Bjb2RlLCBUeXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBmaXJzdENo
aWxkLCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQotICAgICAgICA6IG1faW5kZXgoaW5kZXgpCi0g
ICAgICAgICwgbV9vcGNvZGUob3Bjb2RlKQorICAgIGV4cGxpY2l0IFZhbHVlKENoZWNrZWRPcGNv
ZGVUYWcsIE9wY29kZSBvcGNvZGUsIFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIGZp
cnN0Q2hpbGQsIEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCisgICAgICAgIDogbV9vcGNvZGUob3Bj
b2RlKQogICAgICAgICAsIG1fdHlwZSh0eXBlKQogICAgICAgICAsIG1fb3JpZ2luKG9yaWdpbikK
ICAgICAgICAgLCBtX2NoaWxkcmVueyBmaXJzdENoaWxkLCBhcmd1bWVudHMuLi4gfQogICAgIHsK
ICAgICB9CiAgICAgLy8gVGhpcyBmb3JtIGlzIGZvciBzcGVjaWZ5aW5nIHRoZSB0eXBlIGV4cGxp
Y2l0bHkgd2hlbiB0aGUgb3Bjb2RlIGhhcyBubyBjaGlsZHJlbjoKLSAgICBleHBsaWNpdCBWYWx1
ZSh1bnNpZ25lZCBpbmRleCwgQ2hlY2tlZE9wY29kZVRhZywgT3Bjb2RlIG9wY29kZSwgVHlwZSB0
eXBlLCBPcmlnaW4gb3JpZ2luKQotICAgICAgICA6IG1faW5kZXgoaW5kZXgpCi0gICAgICAgICwg
bV9vcGNvZGUob3Bjb2RlKQorICAgIGV4cGxpY2l0IFZhbHVlKENoZWNrZWRPcGNvZGVUYWcsIE9w
Y29kZSBvcGNvZGUsIFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdpbikKKyAgICAgICAgOiBtX29wY29k
ZShvcGNvZGUpCiAgICAgICAgICwgbV90eXBlKHR5cGUpCiAgICAgICAgICwgbV9vcmlnaW4ob3Jp
Z2luKQogICAgIHsKICAgICB9CiAgICAgLy8gVGhpcyBmb3JtIGlzIGZvciB0aG9zZSBvcGNvZGVz
IHRoYXQgY2FuIGluZmVyIHRoZWlyIHR5cGUgZnJvbSB0aGUgb3Bjb2RlIGFuZCBmaXJzdCBjaGls
ZDoKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+Ci0gICAgZXhwbGljaXQgVmFs
dWUodW5zaWduZWQgaW5kZXgsIENoZWNrZWRPcGNvZGVUYWcsIE9wY29kZSBvcGNvZGUsIE9yaWdp
biBvcmlnaW4sIFZhbHVlKiBmaXJzdENoaWxkKQotICAgICAgICA6IG1faW5kZXgoaW5kZXgpCi0g
ICAgICAgICwgbV9vcGNvZGUob3Bjb2RlKQorICAgIGV4cGxpY2l0IFZhbHVlKENoZWNrZWRPcGNv
ZGVUYWcsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBmaXJzdENoaWxkKQor
ICAgICAgICA6IG1fb3Bjb2RlKG9wY29kZSkKICAgICAgICAgLCBtX3R5cGUodHlwZUZvcihvcGNv
ZGUsIGZpcnN0Q2hpbGQpKQogICAgICAgICAsIG1fb3JpZ2luKG9yaWdpbikKICAgICAgICAgLCBt
X2NoaWxkcmVueyBmaXJzdENoaWxkIH0KQEAgLTI3MSw5ICsyNjgsOCBAQCBwcm90ZWN0ZWQ6CiAg
ICAgfQogICAgIC8vIFRoaXMgZm9ybSBpcyBmb3IgdGhvc2Ugb3Bjb2RlcyB0aGF0IGNhbiBpbmZl
ciB0aGVpciB0eXBlIGZyb20gdGhlIG9wY29kZSBhbmQgZmlyc3QgYW5kIHNlY29uZCBjaGlsZDoK
ICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+Ci0gICAgZXhwbGljaXQgVmFsdWUo
dW5zaWduZWQgaW5kZXgsIENoZWNrZWRPcGNvZGVUYWcsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBv
cmlnaW4sIFZhbHVlKiBmaXJzdENoaWxkLCBWYWx1ZSogc2Vjb25kQ2hpbGQsIEFyZ3VtZW50cy4u
LiBhcmd1bWVudHMpCi0gICAgICAgIDogbV9pbmRleChpbmRleCkKLSAgICAgICAgLCBtX29wY29k
ZShvcGNvZGUpCisgICAgZXhwbGljaXQgVmFsdWUoQ2hlY2tlZE9wY29kZVRhZywgT3Bjb2RlIG9w
Y29kZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIGZpcnN0Q2hpbGQsIFZhbHVlKiBzZWNvbmRDaGls
ZCwgQXJndW1lbnRzLi4uIGFyZ3VtZW50cykKKyAgICAgICAgOiBtX29wY29kZShvcGNvZGUpCiAg
ICAgICAgICwgbV90eXBlKHR5cGVGb3Iob3Bjb2RlLCBmaXJzdENoaWxkLCBzZWNvbmRDaGlsZCkp
CiAgICAgICAgICwgbV9vcmlnaW4ob3JpZ2luKQogICAgICAgICAsIG1fY2hpbGRyZW57IGZpcnN0
Q2hpbGQsIHNlY29uZENoaWxkLCBhcmd1bWVudHMuLi4gfQpAQCAtMjgxLDI1ICsyNzcsMjIgQEAg
cHJvdGVjdGVkOgogICAgIH0KICAgICAvLyBUaGlzIGZvcm0gaXMgZm9yIHRob3NlIG9wY29kZXMg
dGhhdCBjYW4gaW5mZXIgdGhlaXIgdHlwZSBmcm9tIHRoZSBvcGNvZGUgYWxvbmUsIGFuZCB0aGF0
IGRvbid0CiAgICAgLy8gdGFrZSBhbnkgYXJndW1lbnRzOgotICAgIGV4cGxpY2l0IFZhbHVlKHVu
c2lnbmVkIGluZGV4LCBDaGVja2VkT3Bjb2RlVGFnLCBPcGNvZGUgb3Bjb2RlLCBPcmlnaW4gb3Jp
Z2luKQotICAgICAgICA6IG1faW5kZXgoaW5kZXgpCi0gICAgICAgICwgbV9vcGNvZGUob3Bjb2Rl
KQorICAgIGV4cGxpY2l0IFZhbHVlKENoZWNrZWRPcGNvZGVUYWcsIE9wY29kZSBvcGNvZGUsIE9y
aWdpbiBvcmlnaW4pCisgICAgICAgIDogbV9vcGNvZGUob3Bjb2RlKQogICAgICAgICAsIG1fdHlw
ZSh0eXBlRm9yKG9wY29kZSwgbnVsbHB0cikpCiAgICAgICAgICwgbV9vcmlnaW4ob3JpZ2luKQog
ICAgIHsKICAgICB9CiAgICAgLy8gVXNlIHRoaXMgZm9ybSBmb3IgdmFyYXJncy4KLSAgICBleHBs
aWNpdCBWYWx1ZSh1bnNpZ25lZCBpbmRleCwgQ2hlY2tlZE9wY29kZVRhZywgT3Bjb2RlIG9wY29k
ZSwgVHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luLCBjb25zdCBBZGphY2VuY3lMaXN0JiBjaGlsZHJl
bikKLSAgICAgICAgOiBtX2luZGV4KGluZGV4KQotICAgICAgICAsIG1fb3Bjb2RlKG9wY29kZSkK
KyAgICBleHBsaWNpdCBWYWx1ZShDaGVja2VkT3Bjb2RlVGFnLCBPcGNvZGUgb3Bjb2RlLCBUeXBl
IHR5cGUsIE9yaWdpbiBvcmlnaW4sIGNvbnN0IEFkamFjZW5jeUxpc3QmIGNoaWxkcmVuKQorICAg
ICAgICA6IG1fb3Bjb2RlKG9wY29kZSkKICAgICAgICAgLCBtX3R5cGUodHlwZSkKICAgICAgICAg
LCBtX29yaWdpbihvcmlnaW4pCiAgICAgICAgICwgbV9jaGlsZHJlbihjaGlsZHJlbikKICAgICB7
CiAgICAgfQotICAgIGV4cGxpY2l0IFZhbHVlKHVuc2lnbmVkIGluZGV4LCBDaGVja2VkT3Bjb2Rl
VGFnLCBPcGNvZGUgb3Bjb2RlLCBUeXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4sIEFkamFjZW5jeUxp
c3QmJiBjaGlsZHJlbikKLSAgICAgICAgOiBtX2luZGV4KGluZGV4KQotICAgICAgICAsIG1fb3Bj
b2RlKG9wY29kZSkKKyAgICBleHBsaWNpdCBWYWx1ZShDaGVja2VkT3Bjb2RlVGFnLCBPcGNvZGUg
b3Bjb2RlLCBUeXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4sIEFkamFjZW5jeUxpc3QmJiBjaGlsZHJl
bikKKyAgICAgICAgOiBtX29wY29kZShvcGNvZGUpCiAgICAgICAgICwgbV90eXBlKHR5cGUpCiAg
ICAgICAgICwgbV9vcmlnaW4ob3JpZ2luKQogICAgICAgICAsIG1fY2hpbGRyZW4oV1RGTW92ZShj
aGlsZHJlbikpCkBAIC0zMDksOCArMzAyLDggQEAgcHJvdGVjdGVkOgogICAgIC8vIFRoaXMgaXMg
dGhlIGNvbnN0cnVjdG9yIHlvdSBlbmQgdXAgYWN0dWFsbHkgY2FsbGluZywgaWYgeW91J3JlIGlu
c3RhbnRpYXRpbmcgVmFsdWUKICAgICAvLyBkaXJlY3RseS4KICAgICB0ZW1wbGF0ZTx0eXBlbmFt
ZS4uLiBBcmd1bWVudHM+Ci0gICAgZXhwbGljaXQgVmFsdWUodW5zaWduZWQgaW5kZXgsIE9wY29k
ZSBvcGNvZGUsIEFyZ3VtZW50cyYmLi4uIGFyZ3VtZW50cykKLSAgICAgICAgOiBWYWx1ZShpbmRl
eCwgQ2hlY2tlZE9wY29kZSwgb3Bjb2RlLCBzdGQ6OmZvcndhcmQ8QXJndW1lbnRzPihhcmd1bWVu
dHMpLi4uKQorICAgIGV4cGxpY2l0IFZhbHVlKE9wY29kZSBvcGNvZGUsIEFyZ3VtZW50cyYmLi4u
IGFyZ3VtZW50cykKKyAgICAgICAgOiBWYWx1ZShDaGVja2VkT3Bjb2RlLCBvcGNvZGUsIHN0ZDo6
Zm9yd2FyZDxBcmd1bWVudHM+KGFyZ3VtZW50cykuLi4pCiAgICAgewogICAgICAgICBjaGVja09w
Y29kZShvcGNvZGUpOwogICAgIH0KQEAgLTMyMSw3ICszMTQsNyBAQCBwcml2YXRlOgogICAgIHN0
YXRpYyBUeXBlIHR5cGVGb3IoT3Bjb2RlLCBWYWx1ZSogZmlyc3RDaGlsZCwgVmFsdWUqIHNlY29u
ZENoaWxkID0gbnVsbHB0cik7CiAKICAgICAvLyBUaGlzIGdyb3VwIG9mIGZpZWxkcyBpcyBhcnJh
bmdlZCB0byBmaXQgaW4gNjQgYml0cy4KLSAgICB1bnNpZ25lZCBtX2luZGV4OworICAgIHVuc2ln
bmVkIG1faW5kZXggeyBVSU5UX01BWCB9OwogICAgIE9wY29kZSBtX29wY29kZTsKICAgICBUeXBl
IG1fdHlwZTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhcmlhYmxl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYXJpYWJsZS5j
cHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYXJpYWJsZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
QjNWYXJpYWJsZS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBCMyB7CisKK1ZhcmlhYmxlOjp+VmFyaWFibGUoKQoreworfQorCit2b2lkIFZhcmlh
YmxlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCJ2YXIi
LCBtX2luZGV4KTsKK30KKwordm9pZCBWYXJpYWJsZTo6ZGVlcER1bXAoUHJpbnRTdHJlYW0mIG91
dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQobV90eXBlLCAiIHZhciIsIG1faW5kZXgpOworfQor
CitWYXJpYWJsZTo6VmFyaWFibGUoVHlwZSB0eXBlKQorICAgIDogbV90eXBlKHR5cGUpCit7Cisg
ICAgQVNTRVJUKHR5cGUgIT0gVm9pZCk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwor
CisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzVmFyaWFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNWYXJpYWJsZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
VmFyaWFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDkxIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNWYXJpYWJsZV9oCisj
ZGVmaW5lIEIzVmFyaWFibGVfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIz
VHlwZS5oIgorI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisjaW5jbHVkZSA8d3RmL05vbmNv
cHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBQcm9jZWR1cmU7CisKK2NsYXNzIFZhcmlhYmxlIHsK
KyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShWYXJpYWJsZSk7CisgICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CisKK3B1YmxpYzoKKyAgICB+VmFyaWFibGUoKTsKKworICAgIFR5cGUgdHlwZSgp
IGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQorICAgIHVuc2lnbmVkIGluZGV4KCkgY29uc3QgeyBy
ZXR1cm4gbV9pbmRleDsgfQorCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7Cisg
ICAgdm9pZCBkZWVwRHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworCitwcml2YXRlOgorICAgIGZy
aWVuZCBjbGFzcyBQcm9jZWR1cmU7CisKKyAgICBWYXJpYWJsZShUeXBlKTsKKyAgICAKKyAgICB1
bnNpZ25lZCBtX2luZGV4OworICAgIFR5cGUgbV90eXBlOworfTsKKworY2xhc3MgRGVlcFZhcmlh
YmxlRHVtcCB7CitwdWJsaWM6CisgICAgRGVlcFZhcmlhYmxlRHVtcChjb25zdCBWYXJpYWJsZSog
dmFyaWFibGUpCisgICAgICAgIDogbV92YXJpYWJsZSh2YXJpYWJsZSkKKyAgICB7CisgICAgfQor
CisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CisgICAgeworICAgICAgICBp
ZiAobV92YXJpYWJsZSkKKyAgICAgICAgICAgIG1fdmFyaWFibGUtPmRlZXBEdW1wKG91dCk7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIG91dC5wcmludCgiPG51bGw+Iik7CisgICAgfQorCitw
cml2YXRlOgorICAgIGNvbnN0IFZhcmlhYmxlKiBtX3ZhcmlhYmxlOworfTsKKworaW5saW5lIERl
ZXBWYXJpYWJsZUR1bXAgZGVlcER1bXAoY29uc3QgVmFyaWFibGUqIHZhcmlhYmxlKQoreworICAg
IHJldHVybiBEZWVwVmFyaWJsZUR1bXAodmFyaWFibGUpOworfQorCit9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM1Zhcmlh
YmxlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFyaWFibGVWYWx1ZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFyaWFibGVWYWx1
ZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYXJpYWJs
ZVZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY2IEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJCM1ZhcmlhYmxlVmFsdWUuaCIKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNs
dWRlICJCM1ZhcmlhYmxlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitW
YXJpYWJsZVZhbHVlOjp+VmFyaWFibGVWYWx1ZSgpCit7Cit9CisKK3ZvaWQgVmFyaWFibGVWYWx1
ZTo6ZHVtcE1ldGEoQ29tbWFQcmludGVyJiBjb21tYSwgUHJpbnRTdHJlYW0mIG91dCkgY29uc3QK
K3sKKyAgICBvdXQucHJpbnQoY29tbWEsIHBvaW50ZXJEdW1wKG1fdmFyaWFibGUpKTsKK30KKwor
VmFsdWUqIFZhcmlhYmxlVmFsdWU6OmNsb25lSW1wbCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG5l
dyBWYXJpYWJsZVZhbHVlKCp0aGlzKTsKK30KKworVmFyaWFibGVWYWx1ZTo6VmFyaWFibGVWYWx1
ZShPcGNvZGUgb3Bjb2RlLCBPcmlnaW4gb3JpZ2luLCBWYXJpYWJsZSogdmFyaWFibGUsIFZhbHVl
KiB2YWx1ZSkKKyAgICA6IFZhbHVlKENoZWNrZWRPcGNvZGUsIG9wY29kZSwgVm9pZCwgb3JpZ2lu
LCB2YWx1ZSkKKyAgICAsIG1fdmFyaWFibGUodmFyaWFibGUpCit7CisgICAgQVNTRVJUKG9wY29k
ZSA9PSBTZXQpOworfQorCitWYXJpYWJsZVZhbHVlOjpWYXJpYWJsZVZhbHVlKE9wY29kZSBvcGNv
ZGUsIE9yaWdpbiBvcmlnaW4sIFZhcmlhYmxlKiB2YXJpYWJsZSkKKyAgICA6IFZhbHVlKENoZWNr
ZWRPcGNvZGUsIG9wY29kZSwgdmFyaWFibGUtPnR5cGUoKSwgb3JpZ2luKQorICAgICwgbV92YXJp
YWJsZSh2YXJpYWJsZSkKK3sKKyAgICBBU1NFUlQob3Bjb2RlID09IEdldCk7Cit9CisKK30gfSAv
LyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFyaWFibGVWYWx1ZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhcmlhYmxlVmFsdWUuaAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhcmlhYmxlVmFsdWUuaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDY3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1ZhcmlhYmxlVmFsdWVfaAorI2RlZmluZSBCM1Zh
cmlhYmxlVmFsdWVfaAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzVmFsdWUu
aCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIFZhcmlhYmxlOwor
CitjbGFzcyBKU19FWFBPUlRfUFJJVkFURSBWYXJpYWJsZVZhbHVlIDogcHVibGljIFZhbHVlIHsK
K3B1YmxpYzoKKyAgICBzdGF0aWMgYm9vbCBhY2NlcHRzKE9wY29kZSBvcGNvZGUpIHsgcmV0dXJu
IG9wY29kZSA9PSBHZXQgfHwgb3Bjb2RlID09IFNldDsgfQorCisgICAgflZhcmlhYmxlVmFsdWUo
KTsKKworICAgIFZhcmlhYmxlKiB2YXJpYWJsZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFyaWFibGU7
IH0KKworcHJvdGVjdGVkOgorICAgIHZvaWQgZHVtcE1ldGEoQ29tbWFQcmludGVyJiwgUHJpbnRT
dHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKworICAgIFZhbHVlKiBjbG9uZUltcGwoKSBjb25zdCBv
dmVycmlkZTsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworCisgICAg
Ly8gVXNlIHRoaXMgZm9yIFNldC4KKyAgICBWYXJpYWJsZVZhbHVlKE9wY29kZSwgT3JpZ2luLCBW
YXJpYWJsZSosIFZhbHVlKik7CisKKyAgICAvLyBVc2UgdGhpcyBmb3IgR2V0LgorICAgIFZhcmlh
YmxlVmFsdWUoT3Bjb2RlLCBPcmlnaW4sIFZhcmlhYmxlKiB2YXJpYWJsZSk7CisKKyAgICBWYXJp
YWJsZSogbV92YXJpYWJsZTsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5k
aWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzVmFyaWFibGVWYWx1ZV9oCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVTdGFjay5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVN0YWNr
LmNwcAkocmV2aXNpb24gMTk1OTAxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJBbGxvY2F0ZVN0YWNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTUsMzAgKzk1LDEzIEBAIHZv
aWQgYWxsb2NhdGVTdGFjayhDb2RlJiBjb2RlKQogewogICAgIFBoYXNlU2NvcGUgcGhhc2VTY29w
ZShjb2RlLCAiYWxsb2NhdGVTdGFjayIpOwogCi0gICAgLy8gUGVyZm9ybSBhbiBlc2NhcGUgYW5h
bHlzaXMgb3ZlciBzdGFjayBzbG90cy4gQW4gZXNjYXBpbmcgc3RhY2sgc2xvdCBpcyBvbmUgdGhh
dCBpcyBsb2NrZWQgb3IKLSAgICAvLyBpcyBleHBsaWNpdGx5IGVzY2FwZWQgaW4gdGhlIGNvZGUu
Ci0gICAgSW5kZXhTZXQ8U3RhY2tTbG90PiBlc2NhcGluZ1N0YWNrU2xvdHM7Ci0gICAgZm9yIChT
dGFja1Nsb3QqIHNsb3QgOiBjb2RlLnN0YWNrU2xvdHMoKSkgewotICAgICAgICBpZiAoc2xvdC0+
aXNMb2NrZWQoKSkKLSAgICAgICAgICAgIGVzY2FwaW5nU3RhY2tTbG90cy5hZGQoc2xvdCk7Ci0g
ICAgfQotICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBjb2RlKSB7Ci0gICAgICAgIGZvciAo
SW5zdCYgaW5zdCA6ICpibG9jaykgewotICAgICAgICAgICAgaW5zdC5mb3JFYWNoQXJnKAotICAg
ICAgICAgICAgICAgIFsmXSAoQXJnJiBhcmcsIEFyZzo6Um9sZSByb2xlLCBBcmc6OlR5cGUsIEFy
Zzo6V2lkdGgpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHJvbGUgPT0gQXJnOjpVc2VBZGRy
ICYmIGFyZy5pc1N0YWNrKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBlc2NhcGluZ1N0YWNr
U2xvdHMuYWRkKGFyZy5zdGFja1Nsb3QoKSk7Ci0gICAgICAgICAgICAgICAgfSk7Ci0gICAgICAg
IH0KLSAgICB9Ci0KICAgICAvLyBBbGxvY2F0ZSBhbGwgb2YgdGhlIGVzY2FwZWQgc2xvdHMgaW4g
b3JkZXIuIFRoaXMgaXMga2luZCBvZiBhIGNyYXp5IGFsZ29yaXRobSB0byBhbGxvdyBmb3IKICAg
ICAvLyB0aGUgcG9zc2liaWxpdHkgb2Ygc3RhY2sgc2xvdHMgYmVpbmcgYXNzaWduZWQgZnJhbWUg
b2Zmc2V0cyBiZWZvcmUgd2UgZXZlbiBnZXQgaGVyZS4KICAgICBBU1NFUlQoIWNvZGUuZnJhbWVT
aXplKCkpOwogICAgIFZlY3RvcjxTdGFja1Nsb3QqPiBhc3NpZ25lZEVzY2FwZWRTdGFja1Nsb3Rz
OwogICAgIFZlY3RvcjxTdGFja1Nsb3QqPiBlc2NhcGVkU3RhY2tTbG90c1dvcmtsaXN0OwogICAg
IGZvciAoU3RhY2tTbG90KiBzbG90IDogY29kZS5zdGFja1Nsb3RzKCkpIHsKLSAgICAgICAgaWYg
KGVzY2FwaW5nU3RhY2tTbG90cy5jb250YWlucyhzbG90KSkgeworICAgICAgICBpZiAoc2xvdC0+
aXNMb2NrZWQoKSkgewogICAgICAgICAgICAgaWYgKHNsb3QtPm9mZnNldEZyb21GUCgpKQogICAg
ICAgICAgICAgICAgIGFzc2lnbmVkRXNjYXBlZFN0YWNrU2xvdHMuYXBwZW5kKHNsb3QpOwogICAg
ICAgICAgICAgZWxzZQpAQCAtMTM2LDcgKzExOSw3IEBAIHZvaWQgYWxsb2NhdGVTdGFjayhDb2Rl
JiBjb2RlKQogICAgICAgICBhc3NpZ25lZEVzY2FwZWRTdGFja1Nsb3RzLmFwcGVuZChzbG90KTsK
ICAgICB9CiAKLSAgICAvLyBOb3cgd2UgaGFuZGxlIHRoZSBhbm9ueW1vdXMgc2xvdHMuCisgICAg
Ly8gTm93IHdlIGhhbmRsZSB0aGUgc3BpbGwgc2xvdHMuCiAgICAgU3RhY2tTbG90TGl2ZW5lc3Mg
bGl2ZW5lc3MoY29kZSk7CiAgICAgSW5kZXhNYXA8U3RhY2tTbG90LCBIYXNoU2V0PFN0YWNrU2xv
dCo+PiBpbnRlcmZlcmVuY2UoY29kZS5zdGFja1Nsb3RzKCkuc2l6ZSgpKTsKICAgICBWZWN0b3I8
U3RhY2tTbG90Kj4gc2xvdHM7CkBAIC0xNTQsNyArMTM3LDcgQEAgdm9pZCBhbGxvY2F0ZVN0YWNr
KENvZGUmIGNvZGUpCiAgICAgICAgICAgICAgICAgICAgIGlmICghYXJnLmlzU3RhY2soKSkKICAg
ICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICAgU3RhY2tT
bG90KiBzbG90ID0gYXJnLnN0YWNrU2xvdCgpOwotICAgICAgICAgICAgICAgICAgICBpZiAoc2xv
dC0+a2luZCgpICE9IFN0YWNrU2xvdEtpbmQ6OkFub255bW91cykKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKHNsb3QtPmtpbmQoKSAhPSBTdGFja1Nsb3RLaW5kOjpTcGlsbCkKICAgICAgICAgICAg
ICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAgICAgICAgICAgICAgICBmb3IgKFN0YWNrU2xv
dCogb3RoZXJTbG90IDogbG9jYWxDYWxjLmxpdmUoKSkgewpAQCAtMTg3LDcgKzE3MCw3IEBAIHZv
aWQgYWxsb2NhdGVTdGFjayhDb2RlJiBjb2RlKQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAg
ICAgIFN0YWNrU2xvdCogc2xvdCA9IGFyZy5zdGFja1Nsb3QoKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChzbG90LT5raW5kKCkgIT0gU3RhY2tTbG90S2luZDo6QW5vbnltb3VzKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2xvdC0+a2luZCgpICE9IFN0YWNrU2xvdEtpbmQ6
OlNwaWxsKSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb2sgPSBmYWxzZTsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgICAgICB9
CkBAIC0yODcsNyArMjcwLDcgQEAgdm9pZCBhbGxvY2F0ZVN0YWNrKENvZGUmIGNvZGUpCiAgICAg
ICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpTdGFjazogewogICAgICAgICAgICAgICAgICAgICAg
ICAgU3RhY2tTbG90KiBzbG90ID0gYXJnLnN0YWNrU2xvdCgpOwogICAgICAgICAgICAgICAgICAg
ICAgICAgaWYgKEFyZzo6aXNaRGVmKHJvbGUpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAg
JiYgc2xvdC0+a2luZCgpID09IFN0YWNrU2xvdEtpbmQ6OkFub255bW91cworICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICYmIHNsb3QtPmtpbmQoKSA9PSBTdGFja1Nsb3RLaW5kOjpTcGlsbAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHNsb3QtPmJ5dGVTaXplKCkgPiBBcmc6OmJ5
dGVzKHdpZHRoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIEN1cnJlbnRseSB3
ZSBvbmx5IGhhbmRsZSB0aGlzIHNpbXBsZSBjYXNlIGJlY2F1c2UgaXQncyB0aGUgb25seSBvbmUK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyB0aGF0IGFyaXNlczogWkRlZidzIGFyZSBv
bmx5IDMyLWJpdCByaWdodCBub3cuIFNvLCB3aGVuIHdlIGhpdCB0aGVzZQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuY3BwCShyZXZpc2lvbiAxOTU5MDEpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02Miw3ICs2Miw3IEBAIFN0YWNrU2xvdCogQ29kZTo6YWRkU3RhY2tTbG90KHVuc2lnbmVkIGIK
IAogU3RhY2tTbG90KiBDb2RlOjphZGRTdGFja1Nsb3QoQjM6OlN0YWNrU2xvdCogYjNTbG90KQog
ewotICAgIHJldHVybiBhZGRTdGFja1Nsb3QoYjNTbG90LT5ieXRlU2l6ZSgpLCBiM1Nsb3QtPmtp
bmQoKSwgYjNTbG90KTsKKyAgICByZXR1cm4gYWRkU3RhY2tTbG90KGIzU2xvdC0+Ynl0ZVNpemUo
KSwgU3RhY2tTbG90S2luZDo6TG9ja2VkLCBiM1Nsb3QpOwogfQogCiBTcGVjaWFsKiBDb2RlOjph
ZGRTcGVjaWFsKHN0ZDo6dW5pcXVlX3B0cjxTcGVjaWFsPiBzcGVjaWFsKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJdGVyYXRlZFJl
Z2lzdGVyQ29hbGVzY2luZy5jcHAJKHJldmlzaW9uIDE5NTkwMSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlySXRlcmF0ZWRSZWdpc3RlckNvYWxlc2NpbmcuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMjE2LDcgKzEyMTYsNyBAQCBwcml2YXRlOgogCiAgICAgICAgICAgICAvLyBB
bGxvY2F0ZSBzdGFjayBzbG90IGZvciBlYWNoIHNwaWxsZWQgdmFsdWUuCiAgICAgICAgICAgICBT
dGFja1Nsb3QqIHN0YWNrU2xvdCA9IG1fY29kZS5hZGRTdGFja1Nsb3QoCi0gICAgICAgICAgICAg
ICAgbV90bXBXaWR0aC53aWR0aCh0bXApIDw9IEFyZzo6V2lkdGgzMiA/IDQgOiA4LCBTdGFja1Ns
b3RLaW5kOjpBbm9ueW1vdXMpOworICAgICAgICAgICAgICAgIG1fdG1wV2lkdGgud2lkdGgodG1w
KSA8PSBBcmc6OldpZHRoMzIgPyA0IDogOCwgU3RhY2tTbG90S2luZDo6U3BpbGwpOwogICAgICAg
ICAgICAgYm9vbCBpc05ld1RtcCA9IHN0YWNrU2xvdHMuYWRkKHRtcCwgc3RhY2tTbG90KS5pc05l
d0VudHJ5OwogICAgICAgICAgICAgQVNTRVJUX1VOVVNFRChpc05ld1RtcCwgaXNOZXdUbXApOwog
ICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNwaWxsRXZl
cnl0aGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJTcGlsbEV2ZXJ5dGhpbmcuY3BwCShyZXZpc2lvbiAxOTU5MDEpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpclNwaWxsRXZlcnl0aGluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTg4LDcgKzg4LDcgQEAgdm9pZCBzcGlsbEV2ZXJ5dGhpbmcoQ29kZSYgY29kZSkKICAgICAgICAg
QXJnOjpUeXBlIHR5cGUgPSBzdGF0aWNfY2FzdDxBcmc6OlR5cGU+KHR5cGVJbmRleCk7CiAgICAg
ICAgIHN0YWNrU2xvdHMucmVzaXplKGNvZGUubnVtVG1wcyh0eXBlKSk7CiAgICAgICAgIGZvciAo
dW5zaWduZWQgdG1wSW5kZXggPSBjb2RlLm51bVRtcHModHlwZSk7IHRtcEluZGV4LS07KQotICAg
ICAgICAgICAgc3RhY2tTbG90c1t0bXBJbmRleF0gPSBjb2RlLmFkZFN0YWNrU2xvdCg4LCBTdGFj
a1Nsb3RLaW5kOjpBbm9ueW1vdXMpOworICAgICAgICAgICAgc3RhY2tTbG90c1t0bXBJbmRleF0g
PSBjb2RlLmFkZFN0YWNrU2xvdCg4LCBTdGFja1Nsb3RLaW5kOjpTcGlsbCk7CiAgICAgfQogCiAg
ICAgSW5zZXJ0aW9uU2V0IGluc2VydGlvblNldChjb2RlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyU3RhY2tTbG90LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpclN0YWNrU2xvdC5jcHAJKHJldmlzaW9uIDE5NTkwMSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3RhY2tTbG90LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDEsNyArNDEsMTEgQEAgdm9pZCBTdGFja1Nsb3Q6OnNldE9mZnNldEZyb21GUChp
bnRwdHJfdAogCiB2b2lkIFN0YWNrU2xvdDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAog
ewotICAgIG91dC5wcmludCgic3RhY2siLCBtX2luZGV4KTsKKyAgICBpZiAoaXNTcGlsbCgpKQor
ICAgICAgICBvdXQucHJpbnQoInNwaWxsIik7CisgICAgZWxzZQorICAgICAgICBvdXQucHJpbnQo
InN0YWNrIik7CisgICAgb3V0LnByaW50KG1faW5kZXgpOwogfQogCiB2b2lkIFN0YWNrU2xvdDo6
ZGVlcER1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyU3RhY2tTbG90LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJTdGFja1Nsb3QuaAkocmV2aXNpb24gMTk1OTAxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTdGFja1Nsb3QuaAkod29ya2luZyBjb3B5KQpAQCAt
NDYsNiArNDYsNyBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgYnl0ZVNpemUoKSBjb25zdCB7IHJl
dHVybiBtX2J5dGVTaXplOyB9CiAgICAgU3RhY2tTbG90S2luZCBraW5kKCkgY29uc3QgeyByZXR1
cm4gbV9raW5kOyB9CiAgICAgYm9vbCBpc0xvY2tlZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZCA9
PSBTdGFja1Nsb3RLaW5kOjpMb2NrZWQ7IH0KKyAgICBib29sIGlzU3BpbGwoKSBjb25zdCB7IHJl
dHVybiBtX2tpbmQgPT0gU3RhY2tTbG90S2luZDo6U3BpbGw7IH0KICAgICB1bnNpZ25lZCBpbmRl
eCgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXg7IH0KIAogICAgIHZvaWQgZW5zdXJlU2l6ZSh1bnNp
Z25lZCByZXF1ZXN0ZWRTaXplKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJTdGFja1Nsb3RLaW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0FpclN0YWNrU2xvdEtpbmQuY3BwCShyZXZpc2lvbiAxOTU5MDEpCShmcm9tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrU2xvdEtpbmQuY3BwOjE5NTkwMSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3RhY2tTbG90S2luZC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNTdGFja1Nsb3RLaW5k
LmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+
CisKK25hbWVzcGFjZSBXVEYgeworCit1c2luZyBuYW1lc3BhY2UgSlNDOjpCMzsKKwordm9pZCBw
cmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIFN0YWNrU2xvdEtpbmQga2luZCkKK3sKKyAg
ICBzd2l0Y2ggKGtpbmQpIHsKKyAgICBjYXNlIFN0YWNrU2xvdEtpbmQ6OkxvY2tlZDoKKyAgICAg
ICAgb3V0LnByaW50KCJMb2NrZWQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU3RhY2tT
bG90S2luZDo6QW5vbnltb3VzOgorICAgICAgICBvdXQucHJpbnQoIkFub255bW91cyIpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3RhY2tTbG90S2luZC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTdGFja1Nsb3RLaW5kLmNw
cAkod29ya2luZyBjb3B5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTdGFj
a1Nsb3RLaW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsNyArMjQsNyBAQAogICovCiAKICNp
bmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJCM1N0YWNrU2xvdEtpbmQuaCIKKyNpbmNsdWRl
ICJBaXJTdGFja1Nsb3RLaW5kLmgiCiAKICNpZiBFTkFCTEUoQjNfSklUKQogCkBAIC0zMiw3ICsz
Miw3IEBACiAKIG5hbWVzcGFjZSBXVEYgewogCi11c2luZyBuYW1lc3BhY2UgSlNDOjpCMzsKK3Vz
aW5nIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXI7CiAKIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0
cmVhbSYgb3V0LCBTdGFja1Nsb3RLaW5kIGtpbmQpCiB7CkBAIC00MCw4ICs0MCw4IEBAIHZvaWQg
cHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBTdGEKICAgICBjYXNlIFN0YWNrU2xvdEtp
bmQ6OkxvY2tlZDoKICAgICAgICAgb3V0LnByaW50KCJMb2NrZWQiKTsKICAgICAgICAgcmV0dXJu
OwotICAgIGNhc2UgU3RhY2tTbG90S2luZDo6QW5vbnltb3VzOgotICAgICAgICBvdXQucHJpbnQo
IkFub255bW91cyIpOworICAgIGNhc2UgU3RhY2tTbG90S2luZDo6U3BpbGw6CisgICAgICAgIG91
dC5wcmludCgiU3BpbGwiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJTdGFja1Nsb3RLaW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJTdGFja1Nsb3RLaW5kLmgJKHJldmlzaW9uIDE5NTkwMSkJKGZyb20gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tTbG90S2luZC5oOjE5NTkwMSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyU3RhY2tTbG90S2luZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmIEIzU3RhY2tTbG90S2luZF9oCisjZGVmaW5lIEIzU3RhY2tTbG90S2lu
ZF9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIz
IHsKKworZW51bSBjbGFzcyBTdGFja1Nsb3RLaW5kIDogdWludDhfdCB7CisgICAgLy8gQSBsb2Nr
ZWQgc3RhY2sgc2xvdCBuZWVkcyB0byBiZSBrZXB0IGRpc2pvaW50IGZyb20gYWxsIG90aGVycyBi
ZWNhdXNlIHdlIGludGVuZCB0byBlc2NhcGUKKyAgICAvLyBpdCBldmVuIGlmIHRoYXQncyBub3Qg
b2J2aW91cy4gVGhpcyBoYXBwZW5zIHdoZW4gdGhlIHJ1bnRpbWUgdGFrZXMgdGhlIGFkZHJlc3Mg
b2YgYSBzdGFjaworICAgIC8vIHNsb3QuCisgICAgTG9ja2VkLAorCisgICAgLy8gVGhlc2Ugc3Rh
Y2sgc2xvdHMgYmVoYXZlIGxpa2UgdmFyaWFibGVzLiBVbmRlZmluZWQgYmVoYXZpb3IgaGFwcGVu
cyBpZiB5b3Ugc3RvcmUgbGVzcyB0aGFuCisgICAgLy8gdGhlIHdpZHRoIG9mIHRoZSBzbG90Lgor
ICAgIEFub255bW91cworCisgICAgLy8gRklYTUU6IFdlIHNob3VsZCBhZGQgYSB0aGlyZCBtb2Rl
LCB3aGljaCBtZWFucyB0aGF0IHRoZSBzdGFjayBzbG90IHdpbGwgYmUgcmVhZCBhc3luY2hyb25v
dXNseQorICAgIC8vIGFzIHdpdGggTG9ja2VkLCBidXQgbmV2ZXIgd3JpdHRlbiB0byBhc3luY2hy
b25vdXNseS4gVGhlbiwgQWlyIGNvdWxkIG9wdGltaXplIHNwaWxsaW5nIGFuZAorICAgIC8vIGZp
bGxpbmcgYnkgdHJhY2tpbmcgd2hldGhlciB0aGUgdmFsdWUgaGFkIGJlZW4gc3RvcmVkIHRvIGEg
cmVhZC1vbmx5IGxvY2tlZCBzbG90LiBJZiBpdCBoYWQsCisgICAgLy8gdGhlbiB3ZSBjYW4gcmVm
aWxsIGZyb20gdGhhdCBzbG90LgorICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNTA1ODcKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCituYW1l
c3BhY2UgV1RGIHsKKworY2xhc3MgUHJpbnRTdHJlYW07CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQ
cmludFN0cmVhbSYsIEpTQzo6QjM6OlN0YWNrU2xvdEtpbmQpOworCit9IC8vIG5hbWVzcGFjZSBX
VEYKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM1N0YWNrU2xvdEtp
bmRfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclN0YWNrU2xvdEtp
bmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclN0YWNr
U2xvdEtpbmQuaAkod29ya2luZyBjb3B5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJTdGFja1Nsb3RLaW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDIyICsyMywyNiBAQAog
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCiAgKi8KIAotI2lmbmRlZiBCM1N0YWNrU2xvdEtpbmRfaAotI2RlZmlu
ZSBCM1N0YWNrU2xvdEtpbmRfaAorI2lmbmRlZiBBaXJTdGFja1Nsb3RLaW5kX2gKKyNkZWZpbmUg
QWlyU3RhY2tTbG90S2luZF9oCiAKICNpZiBFTkFCTEUoQjNfSklUKQogCi1uYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIEIzIHsKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3Bh
Y2UgQWlyIHsKIAogZW51bSBjbGFzcyBTdGFja1Nsb3RLaW5kIDogdWludDhfdCB7Ci0gICAgLy8g
QSBsb2NrZWQgc3RhY2sgc2xvdCBuZWVkcyB0byBiZSBrZXB0IGRpc2pvaW50IGZyb20gYWxsIG90
aGVycyBiZWNhdXNlIHdlIGludGVuZCB0byBlc2NhcGUKLSAgICAvLyBpdCBldmVuIGlmIHRoYXQn
cyBub3Qgb2J2aW91cy4gVGhpcyBoYXBwZW5zIHdoZW4gdGhlIHJ1bnRpbWUgdGFrZXMgdGhlIGFk
ZHJlc3Mgb2YgYSBzdGFjawotICAgIC8vIHNsb3QuCisgICAgLy8gQSBsb2NrZWQgc3RhY2sgc2xv
dCBpcyBhbiBhcmVhIG9mIHN0YWNrIHJlcXVlc3RlZCBieSB0aGUgY2xpZW50LiBJdCBjYW5ub3Qg
YmUga2lsbGVkLiBUaGUKKyAgICAvLyBjbGllbnQgY2FuIGdldCBpdHMgRlAgb2Zmc2V0IGFuZCB3
cml0ZSB0byBpdCBmcm9tIHN0YWNrIHdhbGtpbmcgY29kZSwgc28gd2UgbXVzdCBhc3N1bWUKKyAg
ICAvLyB0aGF0IHJlYWRzIGFuZCB3cml0ZXMgdG8gYSBsb2NrZWQgc3RhY2sgc2xvdCBjYW4gYmUg
Y2xvYmJlcmVkIHRoZSBzYW1lIHdheSBhcyByZWFkcyBhbmQKKyAgICAvLyB3cml0ZXMgdG8gYW55
IG1lbW9yeSBsb2NhdGlvbi4KICAgICBMb2NrZWQsCiAKLSAgICAvLyBUaGVzZSBzdGFjayBzbG90
cyBiZWhhdmUgbGlrZSB2YXJpYWJsZXMuIFVuZGVmaW5lZCBiZWhhdmlvciBoYXBwZW5zIGlmIHlv
dSBzdG9yZSBsZXNzIHRoYW4KLSAgICAvLyB0aGUgd2lkdGggb2YgdGhlIHNsb3QuCi0gICAgQW5v
bnltb3VzCisgICAgLy8gQSBzcGlsbCBzbG90LiBUaGVzZSBoYXZlIGZ1bmRhbWVudGFsbHkgZGlm
ZmVyZW50IGJlaGF2aW9yIHRoYW4gYSB0eXBpY2FsIG1lbW9yeSBsb2NhdGlvbi4KKyAgICAvLyBU
aGV5IGFyZSBsb3dlcmVkIHRvIGZyb20gdGVtcG9yYXJpZXMuIFRoaXMgbWVhbnMgZm9yIGV4YW1w
bGUgdGhhdCBhIDMyLWJpdCBaRGVmIHN0b3JlIHRvIGEKKyAgICAvLyA4IGJ5dGUgc3RhY2sgc2xv
dCB3aWxsIHplcm8gdGhlIHRvcCA0IGJ5dGVzLCBldmVuIHRob3VnaCBhIDMyLWJpdCBaRGVmIHN0
b3JlIHRvIGFueSBvdGhlcgorICAgIC8vIGtpbmQgb2YgbWVtb3J5IGxvY2F0aW9uIHdvdWxkIGRv
IG5vIHN1Y2ggdGhpbmcuIFVzZUFkZHIgb24gYSBzcGlsbCBzbG90IGlzIG5vdCBhbGxvd2VkLCBz
bworICAgIC8vIHRoZXkgbmV2ZXIgZXNjYXBlLgorICAgIFNwaWxsCiAKICAgICAvLyBGSVhNRTog
V2Ugc2hvdWxkIGFkZCBhIHRoaXJkIG1vZGUsIHdoaWNoIG1lYW5zIHRoYXQgdGhlIHN0YWNrIHNs
b3Qgd2lsbCBiZSByZWFkIGFzeW5jaHJvbm91c2x5CiAgICAgLy8gYXMgd2l0aCBMb2NrZWQsIGJ1
dCBuZXZlciB3cml0dGVuIHRvIGFzeW5jaHJvbm91c2x5LiBUaGVuLCBBaXIgY291bGQgb3B0aW1p
emUgc3BpbGxpbmcgYW5kCkBAIC00Nyw3ICs1MSw3IEBAIGVudW0gY2xhc3MgU3RhY2tTbG90S2lu
ZCA6IHVpbnQ4X3QgewogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNTA1ODcKIH07CiAKLX0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworfSB9IH0gLy8gbmFt
ZXNwYWNlIEpTQzo6QjM6OkFpcgogCiBuYW1lc3BhY2UgV1RGIHsKIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9vcGNvZGVfZ2VuZXJhdG9yLnJiCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvb3Bjb2RlX2dlbmVyYXRvci5yYgkocmV2aXNpb24g
MTk1OTAxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9vcGNvZGVfZ2VuZXJhdG9y
LnJiCSh3b3JraW5nIGNvcHkpCkBAIC02ODAsNiArNjgwLDE4IEBAIHdyaXRlSCgiT3Bjb2RlVXRp
bHMiKSB7CiAgICAgICAgICAgICAgICAgZmlsdGVyID0gcHJvYyB7IGZhbHNlIH0KICAgICAgICAg
ICAgICAgICBjYWxsYmFjayA9IHByb2MgewogICAgICAgICAgICAgICAgICAgICB8IGZvcm0gfAor
ICAgICAgICAgICAgICAgICAgICAjIFRoaXMgY29uc2VydmF0aXZlbHkgc2F5cyB0aGF0IFN0YWNr
IGlzIG5vdCBhIHZhbGlkIGZvcm0gZm9yIFVzZUFkZHIsCisgICAgICAgICAgICAgICAgICAgICMg
YmVjYXVzZSBpdCdzIG9ubHkgdmFsaWQgaWYgaXQncyBub3QgYSBzcGlsbCBzbG90LiBUaGlzIGlz
IGNvbnNpc3RlbnQgd2l0aAorICAgICAgICAgICAgICAgICAgICAjIGlzVmFsaWRGb3JtKCkgYmVp
bmcgY29uc2VydmF0aXZlIGFuZCBpdCBhbHNvIGhhcHBlbnMgdG8gYmUgcHJhY3RpY2FsIHNpbmNl
CisgICAgICAgICAgICAgICAgICAgICMgd2UgZG9uJ3QgcmVhbGx5IHVzZSBpc1ZhbGlkRm9ybSBm
b3IgZGVjaWRpbmcgd2hlbiBTdGFjayBpcyBzYWZlLgorICAgICAgICAgICAgICAgICAgICBvdmVy
bG9hZC5zaWduYXR1cmUubGVuZ3RoLnRpbWVzIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHwg
aW5kZXggfAorICAgICAgICAgICAgICAgICAgICAgICAgaWYgb3ZlcmxvYWQuc2lnbmF0dXJlW2lu
ZGV4XS5yb2xlID09ICJVQSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMg
ImlmIChvcGdlbkhpZGRlblB0cklkZW50aXR5KGtpbmRzKVsje2luZGV4fV0gPT0gQXJnOjpTdGFj
aykiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICIgICAgcmV0dXJuIGZh
bHNlOyIKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBub3RDdXN0b20gPSAo
bm90IGZvcm0ua2luZHMuZGV0ZWN0IHsgfCBraW5kIHwga2luZC5jdXN0b20gfSkKICAgICAgICAg
ICAgICAgICAgICAgaWYgbm90Q3VzdG9tCiAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbkFy
Y2hzKG91dHAsIGZvcm0uYXJjaHMpCkBAIC03ODcsNiArNzk5LDExIEBAIHdyaXRlSCgiT3Bjb2Rl
R2VuZXJhdGVkIikgewogICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImlmICghQXJnOjpp
c1ZhbGlkSW1tRm9ybShhcmdzWyN7aW5kZXh9XS52YWx1ZSgpKSkiCiAgICAgICAgICAgICAgICAg
ICAgIG91dHAucHV0cyAiT1BHRU5fUkVUVVJOKGZhbHNlKTsiCiAgICAgICAgICAgICAgICAgd2hl
biAiQWRkciIKKyAgICAgICAgICAgICAgICAgICAgaWYgYXJnLnJvbGUgPT0gIlVBIgorICAgICAg
ICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJpZiAoYXJnc1sje2luZGV4fV0uaXNTdGFjaygp
ICYmIGFyZ3NbI3tpbmRleH1dLnN0YWNrU2xvdCgpLT5pc1NwaWxsKCkpIgorICAgICAgICAgICAg
ICAgICAgICAgICAgb3V0cC5wdXRzICJPUEdFTl9SRVRVUk4oZmFsc2UpOyIKKyAgICAgICAgICAg
ICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBv
dXRwLnB1dHMgImlmICghQXJnOjppc1ZhbGlkQWRkckZvcm0oYXJnc1sje2luZGV4fV0ub2Zmc2V0
KCkpKSIKICAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJPUEdFTl9SRVRVUk4oZmFsc2Up
OyIKICAgICAgICAgICAgICAgICB3aGVuICJJbmRleCIKQEAgLTgzOSw5ICs4NTYsMTAgQEAgd3Jp
dGVIKCJPcGNvZGVHZW5lcmF0ZWQiKSB7CiAgICAgICAgICAgICAgICAgbnVtTm8gPSAwCiAgICAg
ICAgICAgICAgICAgb3Bjb2RlLm92ZXJsb2Fkcy5lYWNoIHsKICAgICAgICAgICAgICAgICAgICAg
fCBvdmVybG9hZCB8CisgICAgICAgICAgICAgICAgICAgIHVzZUFkZHIgPSBvdmVybG9hZC5zaWdu
YXR1cmVbYXJnSW5kZXhdLnJvbGUgPT0gIlVBIgogICAgICAgICAgICAgICAgICAgICBvdmVybG9h
ZC5mb3Jtcy5lYWNoIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHwgZm9ybSB8Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBpZiBmb3JtLmtpbmRzW2FyZ0luZGV4XSA9PSAiQWRkciIKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIGZvcm0ua2luZHNbYXJnSW5kZXhdID09ICJBZGRyIiBhbmQg
bm90IHVzZUFkZHIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1ZZXMgKz0gMQogICAg
ICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51
bU5vICs9IDEKQEAgLTg2NCwxMiArODgyLDE0IEBAIHdyaXRlSCgiT3Bjb2RlR2VuZXJhdGVkIikg
ewogICAgICAgICAgICAgICAgICAgICBvcGNvZGUub3ZlcmxvYWRzLmVhY2ggewogICAgICAgICAg
ICAgICAgICAgICAgICAgfCBvdmVybG9hZCB8CiAKKyAgICAgICAgICAgICAgICAgICAgICAgIHVz
ZUFkZHIgPSBvdmVybG9hZC5zaWduYXR1cmVbYXJnSW5kZXhdLnJvbGUgPT0gIlVBIgorICAgICAg
ICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAjIEFnYWluLCBjaGVj
ayBpZiBhbGwgb2YgdGhlbSBkbyB3aGF0IHdlIHdhbnQuCiAgICAgICAgICAgICAgICAgICAgICAg
ICBudW1ZZXMgPSAwCiAgICAgICAgICAgICAgICAgICAgICAgICBudW1ObyA9IDAKICAgICAgICAg
ICAgICAgICAgICAgICAgIG92ZXJsb2FkLmZvcm1zLmVhY2ggewogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIHwgZm9ybSB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgZm9ybS5r
aW5kc1thcmdJbmRleF0gPT0gIkFkZHIiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg
Zm9ybS5raW5kc1thcmdJbmRleF0gPT0gIkFkZHIiIGFuZCBub3QgdXNlQWRkcgogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBudW1ZZXMgKz0gMQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtTm8gKz0gMQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>270342</attachid>
            <date>2016-01-31 11:42:58 -0800</date>
            <delta_ts>2016-02-01 12:19:48 -0800</delta_ts>
            <desc>probably done</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>105598</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0FyZ3VtZW50UmVnVmFsdWUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNBcmd1bWVudFJlZ1ZhbHVlLmgJ
KHJldmlzaW9uIDE5NTkwMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0FyZ3VtZW50
UmVnVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtNDksOCArNDksOCBAQCBwcm90ZWN0ZWQ6CiBw
cml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7CiAKLSAgICBBcmd1bWVudFJlZ1Zh
bHVlKHVuc2lnbmVkIGluZGV4LCBPcmlnaW4gb3JpZ2luLCBSZWcgcmVnKQotICAgICAgICA6IFZh
bHVlKGluZGV4LCBDaGVja2VkT3Bjb2RlLCBBcmd1bWVudFJlZywgcmVnLmlzR1BSKCkgPyBwb2lu
dGVyVHlwZSgpIDogRG91YmxlLCBvcmlnaW4pCisgICAgQXJndW1lbnRSZWdWYWx1ZShPcmlnaW4g
b3JpZ2luLCBSZWcgcmVnKQorICAgICAgICA6IFZhbHVlKENoZWNrZWRPcGNvZGUsIEFyZ3VtZW50
UmVnLCByZWcuaXNHUFIoKSA/IHBvaW50ZXJUeXBlKCkgOiBEb3VibGUsIG9yaWdpbikKICAgICAg
ICAgLCBtX3JlZyhyZWcpCiAgICAgewogICAgICAgICBBU1NFUlQocmVnLmlzU2V0KCkpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ0NhbGxWYWx1ZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NDYWxsVmFsdWUuaAkocmV2aXNpb24gMTk1OTAx
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ0NhbGxWYWx1ZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC00OCwxNSArNDgsMTUgQEAgcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgUHJvY2Vk
dXJlOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgotICAgIENDYWxsVmFs
dWUodW5zaWduZWQgaW5kZXgsIFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdpbiwgQXJndW1lbnRzLi4u
IGFyZ3VtZW50cykKLSAgICAgICAgOiBWYWx1ZShpbmRleCwgQ2hlY2tlZE9wY29kZSwgQ0NhbGws
IHR5cGUsIG9yaWdpbiwgYXJndW1lbnRzLi4uKQorICAgIENDYWxsVmFsdWUoVHlwZSB0eXBlLCBP
cmlnaW4gb3JpZ2luLCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQorICAgICAgICA6IFZhbHVlKENo
ZWNrZWRPcGNvZGUsIENDYWxsLCB0eXBlLCBvcmlnaW4sIGFyZ3VtZW50cy4uLikKICAgICB7CiAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKG51bUNoaWxkcmVuKCkgPj0gMSk7CiAgICAgfQogCiAgICAg
dGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgotICAgIENDYWxsVmFsdWUodW5zaWduZWQg
aW5kZXgsIFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdpbiwgY29uc3QgRWZmZWN0cyYgZWZmZWN0cywg
QXJndW1lbnRzLi4uIGFyZ3VtZW50cykKLSAgICAgICAgOiBWYWx1ZShpbmRleCwgQ2hlY2tlZE9w
Y29kZSwgQ0NhbGwsIHR5cGUsIG9yaWdpbiwgYXJndW1lbnRzLi4uKQorICAgIENDYWxsVmFsdWUo
VHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luLCBjb25zdCBFZmZlY3RzJiBlZmZlY3RzLCBBcmd1bWVu
dHMuLi4gYXJndW1lbnRzKQorICAgICAgICA6IFZhbHVlKENoZWNrZWRPcGNvZGUsIENDYWxsLCB0
eXBlLCBvcmlnaW4sIGFyZ3VtZW50cy4uLikKICAgICAgICAgLCBlZmZlY3RzKGVmZmVjdHMpCiAg
ICAgewogICAgICAgICBSRUxFQVNFX0FTU0VSVChudW1DaGlsZHJlbigpID49IDEpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tWYWx1ZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tWYWx1ZS5jcHAJKHJldmlzaW9uIDE5NTkw
MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrVmFsdWUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00Niw4ICs0Niw4IEBAIFZhbHVlKiBDaGVja1ZhbHVlOjpjbG9uZUltcGwoKSBj
b25zdAogfQogCiAvLyBVc2UgdGhpcyBmb3JtIGZvciBDaGVja0FkZCwgQ2hlY2tTdWIsIGFuZCBD
aGVja011bC4KLUNoZWNrVmFsdWU6OkNoZWNrVmFsdWUodW5zaWduZWQgaW5kZXgsIE9wY29kZSBv
cGNvZGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQpCi0gICAgOiBT
dGFja21hcFZhbHVlKGluZGV4LCBDaGVja2VkT3Bjb2RlLCBvcGNvZGUsIGxlZnQtPnR5cGUoKSwg
b3JpZ2luKQorQ2hlY2tWYWx1ZTo6Q2hlY2tWYWx1ZShPcGNvZGUgb3Bjb2RlLCBPcmlnaW4gb3Jp
Z2luLCBWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0KQorICAgIDogU3RhY2ttYXBWYWx1ZShDaGVj
a2VkT3Bjb2RlLCBvcGNvZGUsIGxlZnQtPnR5cGUoKSwgb3JpZ2luKQogewogICAgIEFTU0VSVChC
Mzo6aXNJbnQodHlwZSgpKSk7CiAgICAgQVNTRVJUKGxlZnQtPnR5cGUoKSA9PSByaWdodC0+dHlw
ZSgpKTsKQEAgLTU3LDggKzU3LDggQEAgQ2hlY2tWYWx1ZTo6Q2hlY2tWYWx1ZSh1bnNpZ25lZCBp
bmRleCwgTwogfQogCiAvLyBVc2UgdGhpcyBmb3JtIGZvciBDaGVjay4KLUNoZWNrVmFsdWU6OkNo
ZWNrVmFsdWUodW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4sIFZh
bHVlKiBwcmVkaWNhdGUpCi0gICAgOiBTdGFja21hcFZhbHVlKGluZGV4LCBDaGVja2VkT3Bjb2Rl
LCBvcGNvZGUsIFZvaWQsIG9yaWdpbikKK0NoZWNrVmFsdWU6OkNoZWNrVmFsdWUoT3Bjb2RlIG9w
Y29kZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIHByZWRpY2F0ZSkKKyAgICA6IFN0YWNrbWFwVmFs
dWUoQ2hlY2tlZE9wY29kZSwgb3Bjb2RlLCBWb2lkLCBvcmlnaW4pCiB7CiAgICAgQVNTRVJUKG9w
Y29kZSA9PSBDaGVjayk7CiAgICAgYXBwZW5kKENvbnN0cmFpbmVkVmFsdWUocHJlZGljYXRlLCBW
YWx1ZVJlcDo6V2FybUFueSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hl
Y2tWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNr
VmFsdWUuaAkocmV2aXNpb24gMTk1OTAxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
Q2hlY2tWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01OCwxMCArNTgsMTAgQEAgcHJpdmF0ZToK
ICAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOwogCiAgICAgLy8gVXNlIHRoaXMgZm9ybSBmb3Ig
Q2hlY2tBZGQsIENoZWNrU3ViLCBhbmQgQ2hlY2tNdWwuCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUg
Q2hlY2tWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3Bjb2RlLCBPcmlnaW4sIFZhbHVlKiBsZWZ0LCBW
YWx1ZSogcmlnaHQpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIENoZWNrVmFsdWUoT3Bjb2RlLCBP
cmlnaW4sIFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQpOwogCiAgICAgLy8gVXNlIHRoaXMgZm9y
bSBmb3IgQ2hlY2suCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgQ2hlY2tWYWx1ZSh1bnNpZ25lZCBp
bmRleCwgT3Bjb2RlLCBPcmlnaW4sIFZhbHVlKiBwcmVkaWNhdGUpOworICAgIEpTX0VYUE9SVF9Q
UklWQVRFIENoZWNrVmFsdWUoT3Bjb2RlLCBPcmlnaW4sIFZhbHVlKiBwcmVkaWNhdGUpOwogfTsK
IAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNDb25zdDMyVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNDb25zdDMyVmFsdWUuaAkocmV2aXNpb24gMTk1OTAxKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzQ29uc3QzMlZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTc3LDggKzc3LDgg
QEAgcHJvdGVjdGVkOgogCiAgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKIAotICAgIENvbnN0
MzJWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3JpZ2luIG9yaWdpbiwgaW50MzJfdCB2YWx1ZSkKLSAg
ICAgICAgOiBWYWx1ZShpbmRleCwgQ2hlY2tlZE9wY29kZSwgQ29uc3QzMiwgSW50MzIsIG9yaWdp
bikKKyAgICBDb25zdDMyVmFsdWUoT3JpZ2luIG9yaWdpbiwgaW50MzJfdCB2YWx1ZSkKKyAgICAg
ICAgOiBWYWx1ZShDaGVja2VkT3Bjb2RlLCBDb25zdDMyLCBJbnQzMiwgb3JpZ2luKQogICAgICAg
ICAsIG1fdmFsdWUodmFsdWUpCiAgICAgewogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0NvbnN0NjRWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0NvbnN0NjRWYWx1ZS5oCShyZXZpc2lvbiAxOTU5MDEpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNDb25zdDY0VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtNzcsOCAr
NzcsOCBAQCBwcm90ZWN0ZWQ6CiAKICAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOwogCi0gICAg
Q29uc3Q2NFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcmlnaW4gb3JpZ2luLCBpbnQ2NF90IHZhbHVl
KQotICAgICAgICA6IFZhbHVlKGluZGV4LCBDaGVja2VkT3Bjb2RlLCBDb25zdDY0LCBJbnQ2NCwg
b3JpZ2luKQorICAgIENvbnN0NjRWYWx1ZShPcmlnaW4gb3JpZ2luLCBpbnQ2NF90IHZhbHVlKQor
ICAgICAgICA6IFZhbHVlKENoZWNrZWRPcGNvZGUsIENvbnN0NjQsIEludDY0LCBvcmlnaW4pCiAg
ICAgICAgICwgbV92YWx1ZSh2YWx1ZSkKICAgICB7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzQ29uc3REb3VibGVWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0RG91YmxlVmFsdWUuaAkocmV2aXNpb24gMTk1OTAxKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3REb3VibGVWYWx1ZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC03MCw4ICs3MCw4IEBAIHByb3RlY3RlZDoKIHByaXZhdGU6CiAgICAgZnJpZW5k
IGNsYXNzIFByb2NlZHVyZTsKIAotICAgIENvbnN0RG91YmxlVmFsdWUodW5zaWduZWQgaW5kZXgs
IE9yaWdpbiBvcmlnaW4sIGRvdWJsZSB2YWx1ZSkKLSAgICAgICAgOiBWYWx1ZShpbmRleCwgQ2hl
Y2tlZE9wY29kZSwgQ29uc3REb3VibGUsIERvdWJsZSwgb3JpZ2luKQorICAgIENvbnN0RG91Ymxl
VmFsdWUoT3JpZ2luIG9yaWdpbiwgZG91YmxlIHZhbHVlKQorICAgICAgICA6IFZhbHVlKENoZWNr
ZWRPcGNvZGUsIENvbnN0RG91YmxlLCBEb3VibGUsIG9yaWdpbikKICAgICAgICAgLCBtX3ZhbHVl
KHZhbHVlKQogICAgIHsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjND
b25zdEZsb2F0VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNDb25zdEZsb2F0VmFsdWUuaAkocmV2aXNpb24gMTk1OTAxKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzQ29uc3RGbG9hdFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTY4LDggKzY4
LDggQEAgcHJvdGVjdGVkOgogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOwog
Ci0gICAgQ29uc3RGbG9hdFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcmlnaW4gb3JpZ2luLCBmbG9h
dCB2YWx1ZSkKLSAgICAgICAgOiBWYWx1ZShpbmRleCwgQ2hlY2tlZE9wY29kZSwgQ29uc3RGbG9h
dCwgRmxvYXQsIG9yaWdpbikKKyAgICBDb25zdEZsb2F0VmFsdWUoT3JpZ2luIG9yaWdpbiwgZmxv
YXQgdmFsdWUpCisgICAgICAgIDogVmFsdWUoQ2hlY2tlZE9wY29kZSwgQ29uc3RGbG9hdCwgRmxv
YXQsIG9yaWdpbikKICAgICAgICAgLCBtX3ZhbHVlKHZhbHVlKQogICAgIHsKICAgICB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb250cm9sVmFsdWUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb250cm9sVmFsdWUuaAkocmV2aXNpb24gMTk1
OTAxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29udHJvbFZhbHVlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEwOSw4ICsxMDksOCBAQCBwcm90ZWN0ZWQ6CiAKICAgICAvLyBVc2UgdGhp
cyBmb3Igc3ViY2xhc3Nlcy4KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+Ci0g
ICAgQ29udHJvbFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBUeXBlIHR5cGUs
IE9yaWdpbiBvcmlnaW4sIEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCi0gICAgICAgIDogVmFsdWUo
aW5kZXgsIENoZWNrZWRPcGNvZGUsIG9wY29kZSwgdHlwZSwgb3JpZ2luLCBhcmd1bWVudHMuLi4p
CisgICAgQ29udHJvbFZhbHVlKE9wY29kZSBvcGNvZGUsIFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdp
biwgQXJndW1lbnRzLi4uIGFyZ3VtZW50cykKKyAgICAgICAgOiBWYWx1ZShDaGVja2VkT3Bjb2Rl
LCBvcGNvZGUsIHR5cGUsIG9yaWdpbiwgYXJndW1lbnRzLi4uKQogICAgIHsKICAgICAgICAgQVNT
RVJUKGFjY2VwdHMob3Bjb2RlKSk7CiAgICAgfQpAQCAtMTIyLDIyICsxMjIsMjIgQEAgcHJpdmF0
ZToKICAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOwogCiAgICAgLy8gVXNlIHRoaXMgZm9yIE9v
cHMuCi0gICAgQ29udHJvbFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBPcmln
aW4gb3JpZ2luKQotICAgICAgICA6IFZhbHVlKGluZGV4LCBDaGVja2VkT3Bjb2RlLCBvcGNvZGUs
IFZvaWQsIG9yaWdpbikKKyAgICBDb250cm9sVmFsdWUoT3Bjb2RlIG9wY29kZSwgT3JpZ2luIG9y
aWdpbikKKyAgICAgICAgOiBWYWx1ZShDaGVja2VkT3Bjb2RlLCBvcGNvZGUsIFZvaWQsIG9yaWdp
bikKICAgICB7CiAgICAgICAgIEFTU0VSVChvcGNvZGUgPT0gT29wcyk7CiAgICAgfQogCiAgICAg
Ly8gVXNlIHRoaXMgZm9yIFJldHVybi4KLSAgICBDb250cm9sVmFsdWUodW5zaWduZWQgaW5kZXgs
IE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiByZXN1bHQpCi0gICAgICAgIDog
VmFsdWUoaW5kZXgsIENoZWNrZWRPcGNvZGUsIG9wY29kZSwgVm9pZCwgb3JpZ2luLCByZXN1bHQp
CisgICAgQ29udHJvbFZhbHVlKE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBy
ZXN1bHQpCisgICAgICAgIDogVmFsdWUoQ2hlY2tlZE9wY29kZSwgb3Bjb2RlLCBWb2lkLCBvcmln
aW4sIHJlc3VsdCkKICAgICB7CiAgICAgICAgIEFTU0VSVChvcGNvZGUgPT0gUmV0dXJuKTsKICAg
ICB9CiAKICAgICAvLyBVc2UgdGhpcyBmb3IgSnVtcC4KLSAgICBDb250cm9sVmFsdWUodW5zaWdu
ZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4sIGNvbnN0IEZyZXF1ZW50ZWRC
bG9jayYgdGFyZ2V0KQotICAgICAgICA6IFZhbHVlKGluZGV4LCBDaGVja2VkT3Bjb2RlLCBvcGNv
ZGUsIFZvaWQsIG9yaWdpbikKKyAgICBDb250cm9sVmFsdWUoT3Bjb2RlIG9wY29kZSwgT3JpZ2lu
IG9yaWdpbiwgY29uc3QgRnJlcXVlbnRlZEJsb2NrJiB0YXJnZXQpCisgICAgICAgIDogVmFsdWUo
Q2hlY2tlZE9wY29kZSwgb3Bjb2RlLCBWb2lkLCBvcmlnaW4pCiAgICAgewogICAgICAgICBBU1NF
UlQob3Bjb2RlID09IEp1bXApOwogICAgICAgICBtX3N1Y2Nlc3NvcnMuYXBwZW5kKHRhcmdldCk7
CkBAIC0xNDUsOSArMTQ1LDkgQEAgcHJpdmF0ZToKIAogICAgIC8vIFVzZSB0aGlzIGZvciBCcmFu
Y2guCiAgICAgQ29udHJvbFZhbHVlKAotICAgICAgICB1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9w
Y29kZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIHByZWRpY2F0ZSwKKyAgICAgICAgT3Bjb2RlIG9w
Y29kZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIHByZWRpY2F0ZSwKICAgICAgICAgY29uc3QgRnJl
cXVlbnRlZEJsb2NrJiB5ZXMsIGNvbnN0IEZyZXF1ZW50ZWRCbG9jayYgbm8pCi0gICAgICAgIDog
VmFsdWUoaW5kZXgsIENoZWNrZWRPcGNvZGUsIG9wY29kZSwgVm9pZCwgb3JpZ2luLCBwcmVkaWNh
dGUpCisgICAgICAgIDogVmFsdWUoQ2hlY2tlZE9wY29kZSwgb3Bjb2RlLCBWb2lkLCBvcmlnaW4s
IHByZWRpY2F0ZSkKICAgICB7CiAgICAgICAgIEFTU0VSVChvcGNvZGUgPT0gQnJhbmNoKTsKICAg
ICAgICAgbV9zdWNjZXNzb3JzLmFwcGVuZCh5ZXMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzRWZmZWN0cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzRWZmZWN0cy5jcHAJKHJldmlzaW9uIDE5NTkwMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0VmZmVjdHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCw3ICs0NCw3IEBAIGJv
b2wgaW50ZXJmZXJlc1dpdGhUZXJtaW5hbChjb25zdCBFZmZlY3QKIHsKICAgICBpZiAoIXRlcm1p
bmFsLnRlcm1pbmFsKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIG90aGVyLnRl
cm1pbmFsIHx8IG90aGVyLmNvbnRyb2xEZXBlbmRlbnQgfHwgb3RoZXIud3JpdGVzU1NBU3RhdGUg
fHwgb3RoZXIud3JpdGVzOworICAgIHJldHVybiBvdGhlci50ZXJtaW5hbCB8fCBvdGhlci5jb250
cm9sRGVwZW5kZW50IHx8IG90aGVyLndyaXRlc0xvY2FsU3RhdGUgfHwgb3RoZXIud3JpdGVzOwog
fQogCiBib29sIGludGVyZmVyZXNXaXRoRXhpdFNpZGV3YXlzKGNvbnN0IEVmZmVjdHMmIGV4aXRz
U2lkZXdheXMsIGNvbnN0IEVmZmVjdHMmIG90aGVyKQpAQCAtNTQsMTEgKzU0LDExIEBAIGJvb2wg
aW50ZXJmZXJlc1dpdGhFeGl0U2lkZXdheXMoY29uc3QgRWYKICAgICByZXR1cm4gb3RoZXIuY29u
dHJvbERlcGVuZGVudCB8fCBvdGhlci53cml0ZXM7CiB9CiAKLWJvb2wgaW50ZXJmZXJlc1dpdGhX
cml0ZXNTU0FTdGF0ZShjb25zdCBFZmZlY3RzJiB3cml0ZXNTU0FTdGF0ZSwgY29uc3QgRWZmZWN0
cyYgb3RoZXIpCitib29sIGludGVyZmVyZXNXaXRoV3JpdGVzU1NBU3RhdGUoY29uc3QgRWZmZWN0
cyYgd3JpdGVzTG9jYWxTdGF0ZSwgY29uc3QgRWZmZWN0cyYgb3RoZXIpCiB7Ci0gICAgaWYgKCF3
cml0ZXNTU0FTdGF0ZS53cml0ZXNTU0FTdGF0ZSkKKyAgICBpZiAoIXdyaXRlc0xvY2FsU3RhdGUu
d3JpdGVzTG9jYWxTdGF0ZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBvdGhl
ci53cml0ZXNTU0FTdGF0ZSB8fCBvdGhlci5yZWFkc1NTQVN0YXRlOworICAgIHJldHVybiBvdGhl
ci53cml0ZXNMb2NhbFN0YXRlIHx8IG90aGVyLnJlYWRzTG9jYWxTdGF0ZTsKIH0KIAogfSAvLyBh
bm9ueW1vdXMgbmFtZXNwYWNlCkBAIC02OSw3ICs2OSw3IEBAIGJvb2wgRWZmZWN0czo6aW50ZXJm
ZXJlcyhjb25zdCBFZmZlY3RzJiAKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgaWYgKGludGVy
ZmVyZXNXaXRoRXhpdFNpZGV3YXlzKCp0aGlzLCBvdGhlcikgfHwgaW50ZXJmZXJlc1dpdGhFeGl0
U2lkZXdheXMob3RoZXIsICp0aGlzKSkKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgaWYgKGlu
dGVyZmVyZXNXaXRoV3JpdGVzU1NBU3RhdGUoKnRoaXMsIG90aGVyKSB8fCBpbnRlcmZlcmVzV2l0
aFdyaXRlc1NTQVN0YXRlKG90aGVyLCAqdGhpcykpCisgICAgaWYgKGludGVyZmVyZXNXaXRoV3Jp
dGVzTG9jYWxTdGF0ZSgqdGhpcywgb3RoZXIpIHx8IGludGVyZmVyZXNXaXRoV3JpdGVzTG9jYWxT
dGF0ZShvdGhlciwgKnRoaXMpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICByZXR1cm4gd3Jp
dGVzLm92ZXJsYXBzKG90aGVyLndyaXRlcykKICAgICAgICAgfHwgd3JpdGVzLm92ZXJsYXBzKG90
aGVyLnJlYWRzKQpAQCAtODUsMTAgKzg1LDEwIEBAIHZvaWQgRWZmZWN0czo6ZHVtcChQcmludFN0
cmVhbSYgb3V0KSBjb24KICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiRXhpdHNTaWRld2F5cyIp
OwogICAgIGlmIChjb250cm9sRGVwZW5kZW50KQogICAgICAgICBvdXQucHJpbnQoY29tbWEsICJD
b250cm9sRGVwZW5kZW50Iik7Ci0gICAgaWYgKHdyaXRlc1NTQVN0YXRlKQotICAgICAgICBvdXQu
cHJpbnQoY29tbWEsICJXcml0ZXNTU0FTdGF0ZSIpOwotICAgIGlmIChyZWFkc1NTQVN0YXRlKQot
ICAgICAgICBvdXQucHJpbnQoY29tbWEsICJSZWFkc1NTQVN0YXRlIik7CisgICAgaWYgKHdyaXRl
c0xvY2FsU3RhdGUpCisgICAgICAgIG91dC5wcmludChjb21tYSwgIldyaXRlc0xvY2FsU3RhdGUi
KTsKKyAgICBpZiAocmVhZHNMb2NhbFN0YXRlKQorICAgICAgICBvdXQucHJpbnQoY29tbWEsICJS
ZWFkc0xvY2FsU3RhdGUiKTsKICAgICBpZiAod3JpdGVzKQogICAgICAgICBvdXQucHJpbnQoY29t
bWEsICJXcml0ZXM6Iiwgd3JpdGVzKTsKICAgICBpZiAocmVhZHMpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNFZmZlY3RzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzRWZmZWN0cy5oCShyZXZpc2lvbiAxOTU5MDEpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNFZmZlY3RzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDE0ICs0OCwxNCBA
QCBzdHJ1Y3QgRWZmZWN0cyB7CiAgICAgLy8gVHJ1ZSBpZiB0aGUgaW5zdHJ1Y3Rpb24gbWF5IGNo
YW5nZSBzZW1hbnRpY3MgaWYgaG9pc3RlZCBhYm92ZSBzb21lIGNvbnRyb2wgZmxvdy4KICAgICBi
b29sIGNvbnRyb2xEZXBlbmRlbnQgeyBmYWxzZSB9OwogCi0gICAgLy8gVHJ1ZSBpZiB0aGlzIHdy
aXRlcyB0byB0aGUgU1NBIHN0YXRlLiBPcGVyYXRpb25zIHRoYXQgd3JpdGUgU1NBIHN0YXRlIGRv
bid0IHdyaXRlIHRvIGFueXRoaW5nCi0gICAgLy8gaW4gIm1lbW9yeSIgYnV0IHRoZXkgaGF2ZSBh
IHNpZGUtZWZmZWN0IGFueXdheS4gVGhpcyBpcyBmb3IgbW9kZWxpbmcgVXBzaWxvbnMuIFlvdSBj
YW4gaWdub3JlCi0gICAgLy8gdGhpcyBpZiB5b3UgaGF2ZSB5b3VyIG93biB3YXkgb2YgbW9kZWxp
bmcgVXBzaWxvbnMgb3IgaWYgeW91IGludGVuZCB0byBqdXN0IHJlYnVpbGQgdGhlbQorICAgIC8v
IFRydWUgaWYgdGhpcyB3cml0ZXMgdG8gdGhlIGxvY2FsIHN0YXRlLiBPcGVyYXRpb25zIHRoYXQg
d3JpdGUgbG9jYWwgc3RhdGUgZG9uJ3Qgd3JpdGUgdG8gYW55dGhpbmcKKyAgICAvLyBpbiAibWVt
b3J5IiBidXQgdGhleSBoYXZlIGEgc2lkZS1lZmZlY3QgYW55d2F5LiBUaGlzIGlzIGZvciBtb2Rl
bGluZyBVcHNpbG9ucyBhbmQgU2V0cy4gWW91IGNhbiBpZ25vcmUKKyAgICAvLyB0aGlzIGlmIHlv
dSBoYXZlIHlvdXIgb3duIHdheSBvZiBtb2RlbGluZyBVcHNpbG9ucyBhbmQgU2V0cyBvciBpZiB5
b3UgaW50ZW5kIHRvIGp1c3QgcmVidWlsZCB0aGVtCiAgICAgLy8gYW55d2F5LgotICAgIGJvb2wg
d3JpdGVzU1NBU3RhdGUgeyBmYWxzZSB9OworICAgIGJvb2wgd3JpdGVzTG9jYWxTdGF0ZSB7IGZh
bHNlIH07CiAKLSAgICAvLyBUcnVlIGlmIHRoaXMgcmVhZHMgZnJvbSB0aGUgU1NBIHN0YXRlLiBU
aGlzIGlzIG9ubHkgdXNlZCBmb3IgUGhpLgotICAgIGJvb2wgcmVhZHNTU0FTdGF0ZSB7IGZhbHNl
IH07CisgICAgLy8gVHJ1ZSBpZiB0aGlzIHJlYWRzIGZyb20gdGhlIGxvY2FsIHN0YXRlLiBUaGlz
IGlzIG9ubHkgdXNlZCBmb3IgUGhpIGFuZCBHZXQuCisgICAgYm9vbCByZWFkc0xvY2FsU3RhdGUg
eyBmYWxzZSB9OwogCiAgICAgSGVhcFJhbmdlIHdyaXRlczsKICAgICBIZWFwUmFuZ2UgcmVhZHM7
CkBAIC03Nyw3ICs3Nyw3IEBAIHN0cnVjdCBFZmZlY3RzIHsKIAogICAgIGJvb2wgbXVzdEV4ZWN1
dGUoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIHRlcm1pbmFsIHx8IGV4aXRzU2lkZXdh
eXMgfHwgd3JpdGVzU1NBU3RhdGUgfHwgd3JpdGVzOworICAgICAgICByZXR1cm4gdGVybWluYWwg
fHwgZXhpdHNTaWRld2F5cyB8fCB3cml0ZXNMb2NhbFN0YXRlIHx8IHdyaXRlczsKICAgICB9CiAK
ICAgICAvLyBSZXR1cm5zIHRydWUgaWYgcmVvcmRlcmluZyBpbnN0cnVjdGlvbnMgd2l0aCB0aGVz
ZSByZXNwZWN0aXZlIGVmZmVjdHMgd291bGQgY2hhbmdlIHByb2dyYW0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0VsaW1pbmF0ZUNvbW1vblN1YmV4cHJlc3Npb25zLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNFbGltaW5hdGVDb21tb25TdWJl
eHByZXNzaW9ucy5jcHAJKHJldmlzaW9uIDE5NTkwMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0VsaW1pbmF0ZUNvbW1vblN1YmV4cHJlc3Npb25zLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTMxLDEyICsxMzEsMTAgQEAgcHVibGljOgogICAgICAgICAgICAgbV9pbXB1cmVCbG9ja0Rh
dGFbbV9ibG9ja10gPSBtX2RhdGE7CiAgICAgICAgIH0KIAotICAgICAgICBmb3IgKFNsb3RCYXNl
VmFsdWUqIHN0YWNrIDogbV9zdGFja3MpCi0gICAgICAgICAgICBtX2luc2VydGlvblNldC5pbnNl
cnRWYWx1ZSgwLCBzdGFjayk7CiAgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBtX3By
b2MpIHsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgdmFsdWVJbmRleCA9IDA7IHZhbHVlSW5k
ZXggPCBibG9jay0+c2l6ZSgpOyArK3ZhbHVlSW5kZXgpIHsKLSAgICAgICAgICAgICAgICBhdXRv
IGl0ZXIgPSBtX3N0b3Jlcy5maW5kKGJsb2NrLT5hdCh2YWx1ZUluZGV4KSk7Ci0gICAgICAgICAg
ICAgICAgaWYgKGl0ZXIgPT0gbV9zdG9yZXMuZW5kKCkpCisgICAgICAgICAgICAgICAgYXV0byBp
dGVyID0gbV9zZXRzLmZpbmQoYmxvY2stPmF0KHZhbHVlSW5kZXgpKTsKKyAgICAgICAgICAgICAg
ICBpZiAoaXRlciA9PSBtX3NldHMuZW5kKCkpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwogCiAgICAgICAgICAgICAgICAgZm9yIChWYWx1ZSogdmFsdWUgOiBpdGVyLT52YWx1ZSkKQEAg
LTM2OSwyMSArMzY3LDE5IEBAIHByaXZhdGU6CiAgICAgICAgIC8vIEZJWE1FOiBJdCB3b3VsZCBi
ZSB3YXkgYmV0dGVyIGlmIHRoaXMgcGhhc2UganVzdCBkaWQgU1NBIGNhbGN1bGF0aW9uIGRpcmVj
dGx5LgogICAgICAgICAvLyBSaWdodCBub3cgd2UncmUgcmVseWluZyBvbiB0aGUgZmFjdCB0aGF0
IENTRSdzIHBvc2l0aW9uIGluIHRoZSBwaGFzZSBvcmRlciBpcwogICAgICAgICAvLyBhbG1vc3Qg
cmlnaHQgYmVmb3JlIFNTQSBmaXh1cC4KLSAgICAgICAgICAgIAotICAgICAgICBTbG90QmFzZVZh
bHVlKiBzdGFjayA9IG1fcHJvYy5hZGQ8U2xvdEJhc2VWYWx1ZT4oCi0gICAgICAgICAgICBtX3Zh
bHVlLT5vcmlnaW4oKSwgbV9wcm9jLmFkZEFub255bW91c1N0YWNrU2xvdChtX3ZhbHVlLT50eXBl
KCkpKTsKLSAgICAgICAgbV9zdGFja3MuYXBwZW5kKHN0YWNrKTsKIAotICAgICAgICBNZW1vcnlW
YWx1ZSogbG9hZCA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydDxNZW1vcnlWYWx1ZT4oCi0gICAgICAg
ICAgICBtX2luZGV4LCBMb2FkLCBtX3ZhbHVlLT50eXBlKCksIG1fdmFsdWUtPm9yaWdpbigpLCBz
dGFjayk7CisgICAgICAgIFZhcmlhYmxlKiB2YXJpYWJsZSA9IG1fcHJvYy5hZGRWYXJpYWJsZSht
X3ZhbHVlLT50eXBlKCkpOworCisgICAgICAgIFZhcmlhYmxlVmFsdWUqIGdldCA9IG1faW5zZXJ0
aW9uU2V0Lmluc2VydDxWYXJpYWJsZVZhbHVlPigKKyAgICAgICAgICAgIG1faW5kZXgsIEdldCwg
bV92YWx1ZS0+b3JpZ2luKCksIHZhcmlhYmxlKTsKICAgICAgICAgaWYgKHZlcmJvc2UpCi0gICAg
ICAgICAgICBkYXRhTG9nKCIgICAgSW5zZXJ0aW5nIGxvYWQgb2YgdmFsdWU6ICIsICpsb2FkLCAi
XG4iKTsKLSAgICAgICAgbV92YWx1ZS0+cmVwbGFjZVdpdGhJZGVudGl0eShsb2FkKTsKKyAgICAg
ICAgICAgIGRhdGFMb2coIiAgICBJbnNlcnRpbmcgZ2V0IG9mIHZhbHVlOiAiLCAqZ2V0LCAiXG4i
KTsKKyAgICAgICAgbV92YWx1ZS0+cmVwbGFjZVdpdGhJZGVudGl0eShnZXQpOwogICAgICAgICAg
ICAgCiAgICAgICAgIGZvciAoTWVtb3J5VmFsdWUqIG1hdGNoIDogbWF0Y2hlcykgewotICAgICAg
ICAgICAgVmVjdG9yPFZhbHVlKj4mIHN0b3JlcyA9IG1fc3RvcmVzLmFkZChtYXRjaCwgVmVjdG9y
PFZhbHVlKj4oKSkuaXRlcmF0b3ItPnZhbHVlOworICAgICAgICAgICAgVmVjdG9yPFZhbHVlKj4m
IHNldHMgPSBtX3NldHMuYWRkKG1hdGNoLCBWZWN0b3I8VmFsdWUqPigpKS5pdGVyYXRvci0+dmFs
dWU7CiAKLSAgICAgICAgICAgIFZhbHVlKiB2YWx1ZSA9IHJlcGxhY2UobWF0Y2gsIHN0b3Jlcyk7
CisgICAgICAgICAgICBWYWx1ZSogdmFsdWUgPSByZXBsYWNlKG1hdGNoLCBzZXRzKTsKICAgICAg
ICAgICAgIGlmICghdmFsdWUpIHsKICAgICAgICAgICAgICAgICBpZiAobWF0Y2gtPmlzU3RvcmUo
KSkKICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBtYXRjaC0+Y2hpbGQoMCk7CkBAIC0zOTEs
OCArMzg3LDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBtYXRjaDsK
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIFZhbHVlKiBzdG9y
ZSA9IG1fcHJvYy5hZGQ8TWVtb3J5VmFsdWU+KFN0b3JlLCBtX3ZhbHVlLT5vcmlnaW4oKSwgdmFs
dWUsIHN0YWNrKTsKLSAgICAgICAgICAgIHN0b3Jlcy5hcHBlbmQoc3RvcmUpOworICAgICAgICAg
ICAgVmFsdWUqIHNldCA9IG1fcHJvYy5hZGQ8VmFyaWFibGVWYWx1ZT4oU2V0LCBtX3ZhbHVlLT5v
cmlnaW4oKSwgdmFyaWFibGUsIHZhbHVlKTsKKyAgICAgICAgICAgIHNldHMuYXBwZW5kKHNldCk7
CiAgICAgICAgIH0KIAogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTQ5OSw4ICs0OTUsNyBAQCBw
cml2YXRlOgogICAgIHVuc2lnbmVkIG1faW5kZXg7CiAgICAgVmFsdWUqIG1fdmFsdWU7CiAKLSAg
ICBWZWN0b3I8U2xvdEJhc2VWYWx1ZSo+IG1fc3RhY2tzOwotICAgIEhhc2hNYXA8VmFsdWUqLCBW
ZWN0b3I8VmFsdWUqPj4gbV9zdG9yZXM7CisgICAgSGFzaE1hcDxWYWx1ZSosIFZlY3RvcjxWYWx1
ZSo+PiBtX3NldHM7CiAKICAgICBJbnNlcnRpb25TZXQgbV9pbnNlcnRpb25TZXQ7CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0ZpeFNTQS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRml4U1NBLmNwcAkocmV2aXNpb24gMTk1OTAxKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRml4U1NBLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzQsMTQgKzM0LDEyIEBACiAjaW5jbHVkZSAiQjNEb21pbmF0b3JzLmgiCiAjaW5jbHVkZSAiQjNJ
bmRleFNldC5oIgogI2luY2x1ZGUgIkIzSW5zZXJ0aW9uU2V0SW5saW5lcy5oIgotI2luY2x1ZGUg
IkIzTWVtb3J5VmFsdWUuaCIKICNpbmNsdWRlICJCM1BoYXNlU2NvcGUuaCIKICNpbmNsdWRlICJC
M1Byb2NlZHVyZUlubGluZXMuaCIKICNpbmNsdWRlICJCM1NTQUNhbGN1bGF0b3IuaCIKLSNpbmNs
dWRlICJCM1Nsb3RCYXNlVmFsdWUuaCIKLSNpbmNsdWRlICJCM1N0YWNrU2xvdC5oIgogI2luY2x1
ZGUgIkIzVXBzaWxvblZhbHVlLmgiCiAjaW5jbHVkZSAiQjNWYWx1ZUlubGluZXMuaCIKKyNpbmNs
dWRlICJCM1ZhcmlhYmxlVmFsdWUuaCIKICNpbmNsdWRlIDx3dGYvQ29tbWFQcmludGVyLmg+CiAK
IG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewpAQCAtNTIsMjMgKzUwLDE2IEBAIGNvbnN0
IGJvb2wgdmVyYm9zZSA9IGZhbHNlOwogCiB2b2lkIGRlbW90ZVZhbHVlcyhQcm9jZWR1cmUmIHBy
b2MsIGNvbnN0IEluZGV4U2V0PFZhbHVlPiYgdmFsdWVzKQogewotICAgIEhhc2hNYXA8VmFsdWUq
LCBTbG90QmFzZVZhbHVlKj4gbWFwOwotICAgIEhhc2hNYXA8VmFsdWUqLCBTbG90QmFzZVZhbHVl
Kj4gcGhpTWFwOworICAgIEhhc2hNYXA8VmFsdWUqLCBWYXJpYWJsZSo+IG1hcDsKKyAgICBIYXNo
TWFwPFZhbHVlKiwgVmFyaWFibGUqPiBwaGlNYXA7CiAKICAgICAvLyBDcmVhdGUgc3RhY2sgc2xv
dHMuCi0gICAgSW5zZXJ0aW9uU2V0IGluc2VydGlvblNldChwcm9jKTsKICAgICBmb3IgKFZhbHVl
KiB2YWx1ZSA6IHZhbHVlcy52YWx1ZXMocHJvYy52YWx1ZXMoKSkpIHsKLSAgICAgICAgU2xvdEJh
c2VWYWx1ZSogc3RhY2sgPSBpbnNlcnRpb25TZXQuaW5zZXJ0PFNsb3RCYXNlVmFsdWU+KAotICAg
ICAgICAgICAgMCwgdmFsdWUtPm9yaWdpbigpLCBwcm9jLmFkZEFub255bW91c1N0YWNrU2xvdCh2
YWx1ZS0+dHlwZSgpKSk7Ci0gICAgICAgIG1hcC5hZGQodmFsdWUsIHN0YWNrKTsKLQotICAgICAg
ICBpZiAodmFsdWUtPm9wY29kZSgpID09IFBoaSkgewotICAgICAgICAgICAgU2xvdEJhc2VWYWx1
ZSogcGhpU3RhY2sgPSBpbnNlcnRpb25TZXQuaW5zZXJ0PFNsb3RCYXNlVmFsdWU+KAotICAgICAg
ICAgICAgICAgIDAsIHZhbHVlLT5vcmlnaW4oKSwgcHJvYy5hZGRBbm9ueW1vdXNTdGFja1Nsb3Qo
dmFsdWUtPnR5cGUoKSkpOwotICAgICAgICAgICAgcGhpTWFwLmFkZCh2YWx1ZSwgcGhpU3RhY2sp
OwotICAgICAgICB9CisgICAgICAgIG1hcC5hZGQodmFsdWUsIG1fcHJvYy5hZGRWYXJpYWJsZSh2
YWx1ZS0+dHlwZSgpKSk7CisKKyAgICAgICAgaWYgKHZhbHVlLT5vcGNvZGUoKSA9PSBQaGkpCisg
ICAgICAgICAgICBwaGlNYXAuYWRkKHZhbHVlLCBtX3Byb2MuYWRkVmFyaWFibGUodmFsdWUtPnR5
cGUoKSkpOwogICAgIH0KLSAgICBpbnNlcnRpb25TZXQuZXhlY3V0ZShwcm9jWzBdKTsKIAogICAg
IGlmICh2ZXJib3NlKSB7CiAgICAgICAgIGRhdGFMb2coIkRlbW90aW5nIHZhbHVlcyBhcyBmb2xs
b3dzOlxuIik7CkBAIC04NSwzNiArNzYsMzcgQEAgdm9pZCBkZW1vdGVWYWx1ZXMoUHJvY2VkdXJl
JiBwcm9jLCBjb25zdAogICAgIH0KIAogICAgIC8vIENoYW5nZSBhY2Nlc3NlcyB0byB0aGUgdmFs
dWVzIHRvIGFjY2Vzc2VzIHRvIHRoZSBzdGFjayBzbG90cy4KKyAgICBJbnNlcnRpb25TZXQgaW5z
ZXJ0aW9uU2V0KHByb2MpOwogICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBwcm9jKSB7CiAg
ICAgICAgIGZvciAodW5zaWduZWQgdmFsdWVJbmRleCA9IDA7IHZhbHVlSW5kZXggPCBibG9jay0+
c2l6ZSgpOyArK3ZhbHVlSW5kZXgpIHsKICAgICAgICAgICAgIFZhbHVlKiB2YWx1ZSA9IGJsb2Nr
LT5hdCh2YWx1ZUluZGV4KTsKIAogICAgICAgICAgICAgaWYgKHZhbHVlLT5vcGNvZGUoKSA9PSBQ
aGkpIHsKLSAgICAgICAgICAgICAgICBpZiAoU2xvdEJhc2VWYWx1ZSogc2xvdEJhc2UgPSBwaGlN
YXAuZ2V0KHZhbHVlKSkgeworICAgICAgICAgICAgICAgIGlmIChWYXJpYWJsZSogdmFyaWFibGUg
PSBwaGlNYXAuZ2V0KHZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgICB2YWx1ZS0+cmVwbGFj
ZVdpdGhJZGVudGl0eSgKLSAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNl
cnQ8TWVtb3J5VmFsdWU+KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlSW5kZXgs
IExvYWQsIHZhbHVlLT50eXBlKCksIHZhbHVlLT5vcmlnaW4oKSwgc2xvdEJhc2UpKTsKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnQ8VmFyaWFibGVWYWx1ZT4oCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVJbmRleCwgR2V0LCB2YWx1ZS0+b3JpZ2lu
KCksIHZhcmlhYmxlKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNlIHsK
ICAgICAgICAgICAgICAgICBmb3IgKFZhbHVlKiYgY2hpbGQgOiB2YWx1ZS0+Y2hpbGRyZW4oKSkg
ewotICAgICAgICAgICAgICAgICAgICBpZiAoU2xvdEJhc2VWYWx1ZSogc2xvdEJhc2UgPSBtYXAu
Z2V0KGNoaWxkKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGQgPSBpbnNlcnRpb25T
ZXQuaW5zZXJ0PE1lbW9yeVZhbHVlPigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1
ZUluZGV4LCBMb2FkLCBjaGlsZC0+dHlwZSgpLCB2YWx1ZS0+b3JpZ2luKCksIHNsb3RCYXNlKTsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKFZhcmlhYmxlKiB2YXJpYWJsZSA9IG1hcC5nZXQoY2hp
bGQpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZCA9IGluc2VydGlvblNldC5pbnNl
cnQ8VmFyaWFibGVWYWx1ZT4oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVJbmRl
eCwgR2V0LCB2YWx1ZS0+b3JpZ2luKCksIHZhcmlhYmxlKTsKICAgICAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIGlmIChVcHNpbG9uVmFsdWUq
IHVwc2lsb24gPSB2YWx1ZS0+YXM8VXBzaWxvblZhbHVlPigpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIGlmIChTbG90QmFzZVZhbHVlKiBzbG90QmFzZSA9IHBoaU1hcC5nZXQodXBzaWxvbi0+cGhp
KCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0PE1lbW9y
eVZhbHVlPigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZUluZGV4LCBTdG9yZSwg
dXBzaWxvbi0+b3JpZ2luKCksIHVwc2lsb24tPmNoaWxkKDApLCBzbG90QmFzZSk7CisgICAgICAg
ICAgICAgICAgICAgIGlmIChWYXJpYWJsZSogdmFyaWFibGUgPSBwaGlNYXAuZ2V0KHVwc2lsb24t
PnBoaSgpKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydDxW
YXJpYWJsZVZhbHVlPigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZUluZGV4LCBT
ZXQsIHVwc2lsb24tPm9yaWdpbigpLCB2YXJpYWJsZSwgdXBzaWxvbi0+Y2hpbGQoMCkpOwogICAg
ICAgICAgICAgICAgICAgICAgICAgdmFsdWUtPnJlcGxhY2VXaXRoTm9wKCk7CiAgICAgICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKLSAgICAgICAg
ICAgIGlmIChTbG90QmFzZVZhbHVlKiBzbG90QmFzZSA9IG1hcC5nZXQodmFsdWUpKSB7Ci0gICAg
ICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydDxNZW1vcnlWYWx1ZT4oCi0gICAgICAgICAg
ICAgICAgICAgIHZhbHVlSW5kZXggKyAxLCBTdG9yZSwgdmFsdWUtPm9yaWdpbigpLCB2YWx1ZSwg
c2xvdEJhc2UpOworICAgICAgICAgICAgaWYgKFZhcmlhYmxlKiB2YXJpYWJsZSA9IG1hcC5nZXQo
dmFsdWUpKSB7CisgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydDxWYXJpYWJsZVZh
bHVlPigKKyAgICAgICAgICAgICAgICAgICAgdmFsdWVJbmRleCArIDEsIFNldCwgdmFsdWUtPm9y
aWdpbigpLCB2YXJpYWJsZSwgdmFsdWUpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAg
ICAgIGluc2VydGlvblNldC5leGVjdXRlKGJsb2NrKTsKQEAgLTEyNCwxMjQgKzExNiw2MSBAQCB2
b2lkIGRlbW90ZVZhbHVlcyhQcm9jZWR1cmUmIHByb2MsIGNvbnN0CiBib29sIGZpeFNTQShQcm9j
ZWR1cmUmIHByb2MpCiB7CiAgICAgUGhhc2VTY29wZSBwaGFzZVNjb3BlKHByb2MsICJmaXhTU0Ei
KTsKLSAgICAKLSAgICAvLyBDb2xsZWN0IHRoZSBzdGFjayAidmFyaWFibGVzIi4gSWYgdGhlcmUg
YXJlbid0IGFueSwgdGhlbiB3ZSBkb24ndCBoYXZlIGFueXRoaW5nIHRvIGRvLgotICAgIC8vIFRo
YXQncyBhIGZhaXJseSBjb21tb24gY2FzZS4KLSAgICBIYXNoTWFwPFN0YWNrU2xvdCosIFR5cGU+
IHN0YWNrVmFyaWFibGU7Ci0gICAgZm9yIChWYWx1ZSogdmFsdWUgOiBwcm9jLnZhbHVlcygpKSB7
Ci0gICAgICAgIGlmIChTbG90QmFzZVZhbHVlKiBzbG90QmFzZSA9IHZhbHVlLT5hczxTbG90QmFz
ZVZhbHVlPigpKSB7Ci0gICAgICAgICAgICBTdGFja1Nsb3QqIHN0YWNrID0gc2xvdEJhc2UtPnNs
b3QoKTsKLSAgICAgICAgICAgIGlmIChzdGFjay0+a2luZCgpID09IFN0YWNrU2xvdEtpbmQ6OkFu
b255bW91cykKLSAgICAgICAgICAgICAgICBzdGFja1ZhcmlhYmxlLmFkZChzdGFjaywgVm9pZCk7
Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoc3RhY2tWYXJpYWJsZS5pc0VtcHR5KCkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHdlIGtub3cgaG93
IHRvIG9wdGltaXplIGFsbCBvZiB0aGVzZS4gV2Ugb25seSBrbm93IGhvdyB0byBoYW5kbGUgTG9h
ZCBhbmQKLSAgICAvLyBTdG9yZSBvbiBhbm9ueW1vdXMgdmFyaWFibGVzLgorICAgIC8vIEp1c3Qg
Zm9yIHNhbml0eSwgcmVtb3ZlIGFueSB1bnVzZWQgdmFyaWFibGVzIGZpcnN0LiBJdCdzIHVubGlr
ZWx5IHRoYXQgdGhpcyBjb2RlIGhhcyBhbnkKKyAgICAvLyBidWdzIGhhdmluZyB0byBkbyB3aXRo
IGRlYWQgdmFyaWFibGVzLCBidXQgaXQgd291bGQgYmUgc2lsbHkgdG8gaGF2ZSB0byBmaXggc3Vj
aCBhIGJ1ZyBpZgorICAgIC8vIGl0IGRpZCBhcmlzZS4KKyAgICBJbmRleFNldDxWYXJpYWJsZT4g
bGl2ZVZhcmlhYmxlczsKICAgICBmb3IgKFZhbHVlKiB2YWx1ZSA6IHByb2MudmFsdWVzKCkpIHsK
LSAgICAgICAgYXV0byByZWplY3QgPSBbJl0gKFZhbHVlKiB2YWx1ZSkgewotICAgICAgICAgICAg
aWYgKFNsb3RCYXNlVmFsdWUqIHNsb3RCYXNlID0gdmFsdWUtPmFzPFNsb3RCYXNlVmFsdWU+KCkp
Ci0gICAgICAgICAgICAgICAgc3RhY2tWYXJpYWJsZS5yZW1vdmUoc2xvdEJhc2UtPnNsb3QoKSk7
Ci0gICAgICAgIH07Ci0gICAgICAgIAotICAgICAgICBhdXRvIGhhbmRsZUFjY2VzcyA9IFsmXSAo
VmFsdWUqIGFjY2VzcywgVHlwZSB0eXBlKSB7Ci0gICAgICAgICAgICBTbG90QmFzZVZhbHVlKiBz
bG90QmFzZSA9IGFjY2Vzcy0+bGFzdENoaWxkKCktPmFzPFNsb3RCYXNlVmFsdWU+KCk7Ci0gICAg
ICAgICAgICBpZiAoIXNsb3RCYXNlKQotICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAg
ICAgICAgU3RhY2tTbG90KiBzdGFjayA9IHNsb3RCYXNlLT5zbG90KCk7Ci0gICAgICAgICAgICAK
LSAgICAgICAgICAgIGlmICh2YWx1ZS0+YXM8TWVtb3J5VmFsdWU+KCktPm9mZnNldCgpKSB7Ci0g
ICAgICAgICAgICAgICAgc3RhY2tWYXJpYWJsZS5yZW1vdmUoc3RhY2spOwotICAgICAgICAgICAg
ICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgYXV0byByZXN1bHQgPSBz
dGFja1ZhcmlhYmxlLmZpbmQoc3RhY2spOwotICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBzdGFj
a1ZhcmlhYmxlLmVuZCgpKQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGlm
IChyZXN1bHQtPnZhbHVlID09IFZvaWQpIHsKLSAgICAgICAgICAgICAgICByZXN1bHQtPnZhbHVl
ID0gdHlwZTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICBpZiAocmVzdWx0LT52YWx1ZSA9PSB0eXBlKQotICAgICAgICAgICAgICAgIHJldHVybjsK
LSAgICAgICAgICAgIHN0YWNrVmFyaWFibGUucmVtb3ZlKHJlc3VsdCk7Ci0gICAgICAgIH07Ci0g
ICAgICAgIAotICAgICAgICBzd2l0Y2ggKHZhbHVlLT5vcGNvZGUoKSkgewotICAgICAgICBjYXNl
IExvYWQ6Ci0gICAgICAgICAgICAvLyBXZSdyZSBPSyB3aXRoIGxvYWRzIGZyb20gc3RhY2sgdmFy
aWFibGVzIGF0IGFuIG9mZnNldCBvZiB6ZXJvLgotICAgICAgICAgICAgaGFuZGxlQWNjZXNzKHZh
bHVlLCB2YWx1ZS0+dHlwZSgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFN0
b3JlOgotICAgICAgICAgICAgLy8gV2UncmUgT0sgd2l0aCBzdG9yZXMgdG8gc3RhY2sgdmFyaWFi
bGVzLCBidXQgbm90IHN0b3Jpbmcgc3RhY2sgdmFyaWFibGVzLgotICAgICAgICAgICAgcmVqZWN0
KHZhbHVlLT5jaGlsZCgwKSk7Ci0gICAgICAgICAgICBoYW5kbGVBY2Nlc3ModmFsdWUsIHZhbHVl
LT5jaGlsZCgwKS0+dHlwZSgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0
OgotICAgICAgICAgICAgZm9yIChWYWx1ZSogY2hpbGQgOiB2YWx1ZS0+Y2hpbGRyZW4oKSkKLSAg
ICAgICAgICAgICAgICByZWplY3QoY2hpbGQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
IH0KKyAgICAgICAgaWYgKFZhcmlhYmxlVmFsdWUqIHZhcmlhYmxlVmFsdWUgPSB2YWx1ZS0+YXM8
VmFyaWFibGVWYWx1ZT4oKSkKKyAgICAgICAgICAgIGxpdmVWYXJpYWJsZXMuYWRkKHZhcmlhYmxl
VmFsdWUtPnZhcmlhYmxlKCkpOwogICAgIH0KIAotICAgIFZlY3RvcjxTdGFja1Nsb3QqPiBkZWFk
U2xvdHM7Ci0gICAgZm9yIChhdXRvJiBlbnRyeSA6IHN0YWNrVmFyaWFibGUpIHsKLSAgICAgICAg
aWYgKGVudHJ5LnZhbHVlID09IFZvaWQpCi0gICAgICAgICAgICBkZWFkU2xvdHMuYXBwZW5kKGVu
dHJ5LmtleSk7CisgICAgZm9yIChWYXJpYWJsZSogdmFyaWFibGUgOiBwcm9jLnZhcmlhYmxlcygp
KSB7CisgICAgICAgIGlmICghbGl2ZVZhcmlhYmxlcy5jb250YWlucyh2YXJpYWJsZSkpCisgICAg
ICAgICAgICBwcm9jLmRlbGV0ZVZhcmlhYmxlKHZhcmlhYmxlKTsKICAgICB9CiAKLSAgICBmb3Ig
KFN0YWNrU2xvdCogZGVhZFNsb3QgOiBkZWFkU2xvdHMpCi0gICAgICAgIHN0YWNrVmFyaWFibGUu
cmVtb3ZlKGRlYWRTbG90KTsKLQotICAgIGlmIChzdGFja1ZhcmlhYmxlLmlzRW1wdHkoKSkKLSAg
ICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChwcm9jLnZhcmlhYmxlcygpLmlzRW1wdHkoKSkK
KyAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gV2Uga25vdyB0aGF0IHdlIGhhdmUgdmFyaWFibGVz
IHRvIG9wdGltaXplLCBzbyBkbyB0aGF0IG5vdy4KICAgICBicmVha0NyaXRpY2FsRWRnZXMocHJv
Yyk7CiAKICAgICBTU0FDYWxjdWxhdG9yIHNzYShwcm9jKTsKIAotICAgIC8vIENyZWF0ZSBhIFNT
QUNhbGN1bGF0b3I6OlZhcmlhYmxlIGZvciBldmVyeSBzdGFjayB2YXJpYWJsZS4KLSAgICBWZWN0
b3I8U3RhY2tTbG90Kj4gdmFyaWFibGVUb1N0YWNrOwotICAgIEhhc2hNYXA8U3RhY2tTbG90Kiwg
U1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqPiBzdGFja1RvVmFyaWFibGU7Ci0KLSAgICBmb3IgKGF1
dG8mIGVudHJ5IDogc3RhY2tWYXJpYWJsZSkgewotICAgICAgICBTdGFja1Nsb3QqIHN0YWNrID0g
ZW50cnkua2V5OwotICAgICAgICBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSogdmFyaWFibGUgPSBz
c2EubmV3VmFyaWFibGUoKTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQodmFyaWFibGUtPmluZGV4
KCkgPT0gdmFyaWFibGVUb1N0YWNrLnNpemUoKSk7Ci0gICAgICAgIHZhcmlhYmxlVG9TdGFjay5h
cHBlbmQoc3RhY2spOwotICAgICAgICBzdGFja1RvVmFyaWFibGUuYWRkKHN0YWNrLCB2YXJpYWJs
ZSk7CisgICAgLy8gQ3JlYXRlIGEgU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUgKCJjYWxjVmFyIikg
Zm9yIGV2ZXJ5IHZhcmlhYmxlLgorICAgIFZlY3RvcjxWYXJpYWJsZSo+IGNhbGNWYXJUb1Zhcmlh
YmxlOworICAgIEluZGV4TWFwPFZhcmlhYmxlLCBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSo+IHZh
cmlhYmxlVG9DYWxjVmFyKHByb2MudmFyaWFibGVzKCkuc2l6ZSgpKTsKKworICAgIGZvciAoVmFy
aWFibGUqIHZhcmlhYmxlIDogcHJvYy52YXJpYWJsZXMoKSkgeworICAgICAgICBTU0FDYWxjdWxh
dG9yOjpWYXJpYWJsZSogY2FsY1ZhciA9IHNzYS5uZXdWYXJpYWJsZSgpOworICAgICAgICBSRUxF
QVNFX0FTU0VSVChjYWxjVmFyLT5pbmRleCgpID09IGNhbGNWYXJUb1ZhcmlhYmxlLnNpemUoKSk7
CisgICAgICAgIGNhbGNWYXJUb1ZhcmlhYmxlLmFwcGVuZCh2YXJpYWJsZSk7CisgICAgICAgIHZh
cmlhYmxlVG9DYWxjVmFyW3ZhcmlhYmxlXSA9IGNhbGNWYXI7CiAgICAgfQogCiAgICAgLy8gQ3Jl
YXRlIERlZnMgZm9yIGFsbCBvZiB0aGUgc3RvcmVzIHRvIHRoZSBzdGFjayB2YXJpYWJsZS4KICAg
ICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogcHJvYykgewogICAgICAgICBmb3IgKFZhbHVlKiB2
YWx1ZSA6ICpibG9jaykgewotICAgICAgICAgICAgaWYgKHZhbHVlLT5vcGNvZGUoKSAhPSBTdG9y
ZSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgU2xvdEJhc2VWYWx1
ZSogc2xvdEJhc2UgPSB2YWx1ZS0+Y2hpbGQoMSktPmFzPFNsb3RCYXNlVmFsdWU+KCk7Ci0gICAg
ICAgICAgICBpZiAoIXNsb3RCYXNlKQorICAgICAgICAgICAgaWYgKHZhbHVlLT5vcGNvZGUoKSAh
PSBTZXQpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgICAgIFN0YWNrU2xv
dCogc3RhY2sgPSBzbG90QmFzZS0+c2xvdCgpOworICAgICAgICAgICAgVmFyaWFibGUqIHZhcmlh
YmxlID0gdmFsdWUtPmFzPFZhcmlhYmxlVmFsdWU+KCktPnZhcmlhYmxlKCk7CiAKLSAgICAgICAg
ICAgIGlmIChTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSogdmFyaWFibGUgPSBzdGFja1RvVmFyaWFi
bGUuZ2V0KHN0YWNrKSkKLSAgICAgICAgICAgICAgICBzc2EubmV3RGVmKHZhcmlhYmxlLCBibG9j
aywgdmFsdWUtPmNoaWxkKDApKTsKKyAgICAgICAgICAgIGlmIChTU0FDYWxjdWxhdG9yOjpWYXJp
YWJsZSogY2FsY1ZhciA9IHZhcmlhYmxlVG9DYWxjVmFyW3ZhcmlhYmxlXSkKKyAgICAgICAgICAg
ICAgICBzc2EubmV3RGVmKGNhbGNWYXIsIGJsb2NrLCB2YWx1ZS0+Y2hpbGQoMCkpOwogICAgICAg
ICB9CiAgICAgfQogCiAgICAgLy8gRGVjaWRlIHdoZXJlIFBoaXMgYXJlIHRvIGJlIGluc2VydGVk
LiBUaGlzIGNyZWF0ZXMgdGhlbSBidXQgZG9lcyBub3QgaW5zZXJ0IHRoZW0uCiAgICAgc3NhLmNv
bXB1dGVQaGlzKAotICAgICAgICBbJl0gKFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKiB2YXJpYWJs
ZSwgQmFzaWNCbG9jayogYmxvY2spIC0+IFZhbHVlKiB7Ci0gICAgICAgICAgICBTdGFja1Nsb3Qq
IHN0YWNrID0gdmFyaWFibGVUb1N0YWNrW3ZhcmlhYmxlLT5pbmRleCgpXTsKLSAgICAgICAgICAg
IFZhbHVlKiBwaGkgPSBwcm9jLmFkZDxWYWx1ZT4oUGhpLCBzdGFja1ZhcmlhYmxlLmdldChzdGFj
ayksIGJsb2NrLT5hdCgwKS0+b3JpZ2luKCkpOworICAgICAgICBbJl0gKFNTQUNhbGN1bGF0b3I6
OlZhcmlhYmxlKiBjYWxjVmFyLCBCYXNpY0Jsb2NrKiBibG9jaykgLT4gVmFsdWUqIHsKKyAgICAg
ICAgICAgIFZhcmlhYmxlKiB2YXJpYWJsZSA9IGNhbGNWYXJUb1ZhcmlhYmxlW2NhbGNWYXItPmlu
ZGV4KCldOworICAgICAgICAgICAgVmFsdWUqIHBoaSA9IHByb2MuYWRkPFZhbHVlPihQaGksIHZh
cmlhYmxlLT50eXBlKCksIGJsb2NrLT5hdCgwKS0+b3JpZ2luKCkpOwogICAgICAgICAgICAgaWYg
KHZlcmJvc2UpIHsKICAgICAgICAgICAgICAgICBkYXRhTG9nKAotICAgICAgICAgICAgICAgICAg
ICAiQWRkaW5nIFBoaSBmb3IgIiwgcG9pbnRlckR1bXAoc3RhY2spLCAiIGF0ICIsICpibG9jaywg
IjogIiwKKyAgICAgICAgICAgICAgICAgICAgIkFkZGluZyBQaGkgZm9yICIsIHBvaW50ZXJEdW1w
KHZhcmlhYmxlKSwgIiBhdCAiLCAqYmxvY2ssICI6ICIsCiAgICAgICAgICAgICAgICAgICAgIGRl
ZXBEdW1wKHByb2MsIHBoaSksICJcbiIpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0
dXJuIHBoaTsKQEAgLTI0OSwyNCArMTc4LDI0IEBAIGJvb2wgZml4U1NBKFByb2NlZHVyZSYgcHJv
YykKIAogICAgIC8vIE5vdyBwZXJmb3JtIHRoZSBjb252ZXJzaW9uLgogICAgIEluc2VydGlvblNl
dCBpbnNlcnRpb25TZXQocHJvYyk7Ci0gICAgSGFzaE1hcDxTdGFja1Nsb3QqLCBWYWx1ZSo+IG1h
cHBpbmc7CisgICAgSW5kZXhNYXA8VmFyaWFibGUsIFZhbHVlKj4gbWFwcGluZzsKICAgICBmb3Ig
KEJhc2ljQmxvY2sqIGJsb2NrIDogcHJvYy5ibG9ja3NJblByZU9yZGVyKCkpIHsKICAgICAgICAg
bWFwcGluZy5jbGVhcigpOwogCi0gICAgICAgIGZvciAoYXV0byYgZW50cnkgOiBzdGFja1RvVmFy
aWFibGUpIHsKLSAgICAgICAgICAgIFN0YWNrU2xvdCogc3RhY2sgPSBlbnRyeS5rZXk7Ci0gICAg
ICAgICAgICBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSogdmFyaWFibGUgPSBlbnRyeS52YWx1ZTsK
KyAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IGNhbGNWYXJUb1ZhcmlhYmxlLnNpemUoKTsg
aW5kZXgtLTspIHsKKyAgICAgICAgICAgIFZhcmlhYmxlKiB2YXJpYWJsZSA9IGNhbGNWYXJUb1Zh
cmlhYmxlW2luZGV4XTsKKyAgICAgICAgICAgIFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKiBjYWxj
VmFyID0gc3NhLnZhcmlhYmxlKGluZGV4KTsKIAotICAgICAgICAgICAgU1NBQ2FsY3VsYXRvcjo6
RGVmKiBkZWYgPSBzc2EucmVhY2hpbmdEZWZBdEhlYWQoYmxvY2ssIHZhcmlhYmxlKTsKKyAgICAg
ICAgICAgIFNTQUNhbGN1bGF0b3I6OkRlZiogZGVmID0gc3NhLnJlYWNoaW5nRGVmQXRIZWFkKGJs
b2NrLCBjYWxjVmFyKTsKICAgICAgICAgICAgIGlmIChkZWYpCi0gICAgICAgICAgICAgICAgbWFw
cGluZy5zZXQoc3RhY2ssIGRlZi0+dmFsdWUoKSk7CisgICAgICAgICAgICAgICAgbWFwcGluZ1t2
YXJpYWJsZV0gPSBkZWYtPnZhbHVlKCk7CiAgICAgICAgIH0KIAogICAgICAgICBmb3IgKFNTQUNh
bGN1bGF0b3I6OkRlZiogcGhpRGVmIDogc3NhLnBoaXNGb3JCbG9jayhibG9jaykpIHsKLSAgICAg
ICAgICAgIFN0YWNrU2xvdCogc3RhY2sgPSB2YXJpYWJsZVRvU3RhY2tbcGhpRGVmLT52YXJpYWJs
ZSgpLT5pbmRleCgpXTsKKyAgICAgICAgICAgIFZhcmlhYmxlKiB2YXJpYWJsZSA9IGNhbGNWYXJU
b1ZhcmlhYmxlW3BoaURlZi0+dmFyaWFibGUoKS0+aW5kZXgoKV07CiAKICAgICAgICAgICAgIGlu
c2VydGlvblNldC5pbnNlcnRWYWx1ZSgwLCBwaGlEZWYtPnZhbHVlKCkpOwotICAgICAgICAgICAg
bWFwcGluZy5zZXQoc3RhY2ssIHBoaURlZi0+dmFsdWUoKSk7CisgICAgICAgICAgICBtYXBwaW5n
W3ZhcmlhYmxlXSA9IHBoaURlZi0+dmFsdWUoKTsKICAgICAgICAgfQogCiAgICAgICAgIGZvciAo
dW5zaWduZWQgdmFsdWVJbmRleCA9IDA7IHZhbHVlSW5kZXggPCBibG9jay0+c2l6ZSgpOyArK3Zh
bHVlSW5kZXgpIHsKQEAgLTI3NCwyMyArMjAzLDI1IEBAIGJvb2wgZml4U1NBKFByb2NlZHVyZSYg
cHJvYykKICAgICAgICAgICAgIHZhbHVlLT5wZXJmb3JtU3Vic3RpdHV0aW9uKCk7CiAKICAgICAg
ICAgICAgIHN3aXRjaCAodmFsdWUtPm9wY29kZSgpKSB7Ci0gICAgICAgICAgICBjYXNlIExvYWQ6
IHsKLSAgICAgICAgICAgICAgICBpZiAoU2xvdEJhc2VWYWx1ZSogc2xvdEJhc2UgPSB2YWx1ZS0+
Y2hpbGQoMCktPmFzPFNsb3RCYXNlVmFsdWU+KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgU3Rh
Y2tTbG90KiBzdGFjayA9IHNsb3RCYXNlLT5zbG90KCk7Ci0gICAgICAgICAgICAgICAgICAgIGlm
IChWYWx1ZSogcmVwbGFjZW1lbnQgPSBtYXBwaW5nLmdldChzdGFjaykpCi0gICAgICAgICAgICAg
ICAgICAgICAgICB2YWx1ZS0+cmVwbGFjZVdpdGhJZGVudGl0eShyZXBsYWNlbWVudCk7CisgICAg
ICAgICAgICBjYXNlIEdldDogeworICAgICAgICAgICAgICAgIFZhcmlhYmxlVmFsdWUqIHZhcmlh
YmxlVmFsdWUgPSB2YWx1ZS0+YXM8VmFyaWFibGVWYWx1ZT4oKTsKKyAgICAgICAgICAgICAgICBW
YXJpYWJsZSogdmFyaWFibGUgPSB2YXJpYWJsZVZhbHVlLT52YXJpYWJsZSgpOworCisgICAgICAg
ICAgICAgICAgaWYgKFZhbHVlKiByZXBsYWNlbWVudCA9IG1hcHBpbmcuZ2V0KHN0YWNrKSkKKyAg
ICAgICAgICAgICAgICAgICAgdmFsdWUtPnJlcGxhY2VXaXRoSWRlbnRpdHkocmVwbGFjZW1lbnQp
OworICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICB2YWx1ZS0+cmVw
bGFjZVdpdGhJZGVudGl0eSgKKyAgICAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0
Lmluc2VydEJvdHRvbSh2YWx1ZUluZGV4LCB2YWx1ZSkpOwogICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKLSAg
ICAgICAgICAgIGNhc2UgU3RvcmU6IHsKLSAgICAgICAgICAgICAgICBpZiAoU2xvdEJhc2VWYWx1
ZSogc2xvdEJhc2UgPSB2YWx1ZS0+Y2hpbGQoMSktPmFzPFNsb3RCYXNlVmFsdWU+KCkpIHsKLSAg
ICAgICAgICAgICAgICAgICAgU3RhY2tTbG90KiBzdGFjayA9IHNsb3RCYXNlLT5zbG90KCk7Ci0g
ICAgICAgICAgICAgICAgICAgIGlmIChzdGFja1RvVmFyaWFibGUuY29udGFpbnMoc3RhY2spKSB7
Ci0gICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nLnNldChzdGFjaywgdmFsdWUtPmNoaWxk
KDApKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLT5yZXBsYWNlV2l0aE5vcCgpOwot
ICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgY2Fz
ZSBTZXQ6IHsKKyAgICAgICAgICAgICAgICBWYXJpYWJsZVZhbHVlKiB2YXJpYWJsZVZhbHVlID0g
dmFsdWUtPmFzPFZhcmlhYmxlVmFsdWU+KCk7CisgICAgICAgICAgICAgICAgVmFyaWFibGUqIHZh
cmlhYmxlID0gdmFyaWFibGVWYWx1ZS0+dmFyaWFibGUoKTsKKworICAgICAgICAgICAgICAgIG1h
cHBpbmdbdmFyaWFibGVdID0gdmFsdWUtPmNoaWxkKDApOworICAgICAgICAgICAgICAgIHZhbHVl
LT5yZXBsYWNlV2l0aE5vcCgpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
fQogCkBAIC0zMDQsMTQgKzIzNSwxNCBAQCBib29sIGZpeFNTQShQcm9jZWR1cmUmIHByb2MpCiAg
ICAgICAgIGZvciAoQmFzaWNCbG9jayogc3VjY2Vzc29yQmxvY2sgOiBibG9jay0+c3VjY2Vzc29y
QmxvY2tzKCkpIHsKICAgICAgICAgICAgIGZvciAoU1NBQ2FsY3VsYXRvcjo6RGVmKiBwaGlEZWYg
OiBzc2EucGhpc0ZvckJsb2NrKHN1Y2Nlc3NvckJsb2NrKSkgewogICAgICAgICAgICAgICAgIFZh
bHVlKiBwaGkgPSBwaGlEZWYtPnZhbHVlKCk7Ci0gICAgICAgICAgICAgICAgU1NBQ2FsY3VsYXRv
cjo6VmFyaWFibGUqIHZhcmlhYmxlID0gcGhpRGVmLT52YXJpYWJsZSgpOwotICAgICAgICAgICAg
ICAgIFN0YWNrU2xvdCogc3RhY2sgPSB2YXJpYWJsZVRvU3RhY2tbdmFyaWFibGUtPmluZGV4KCld
OworICAgICAgICAgICAgICAgIFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKiBjYWxjVmFyID0gcGhp
RGVmLT52YXJpYWJsZSgpOworICAgICAgICAgICAgICAgIFZhcmlhYmxlKiB2YXJpYWJsZSA9IGNh
bGNWYXJUb1ZhcmlhYmxlW2NhbGNWYXItPmluZGV4KCldOwogCi0gICAgICAgICAgICAgICAgVmFs
dWUqIG1hcHBlZFZhbHVlID0gbWFwcGluZy5nZXQoc3RhY2spOworICAgICAgICAgICAgICAgIFZh
bHVlKiBtYXBwZWRWYWx1ZSA9IG1hcHBpbmdwW3ZhcmlhYmxlXTsKICAgICAgICAgICAgICAgICBp
ZiAodmVyYm9zZSkgewogICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKAotICAgICAgICAgICAg
ICAgICAgICAgICAgIk1hcHBlZCB2YWx1ZSBmb3IgIiwgKnN0YWNrLCAiIHdpdGggc3VjY2Vzc29y
IFBoaSAiLCAqcGhpLCAiIGF0IGVuZCBvZiAiLAotICAgICAgICAgICAgICAgICAgICAgICAgKmJs
b2NrLCAiOiAiLCBwb2ludGVyRHVtcChtYXBwZWRWYWx1ZSksICJcbiIpOworICAgICAgICAgICAg
ICAgICAgICAgICAgIk1hcHBlZCB2YWx1ZSBmb3IgIiwgKnZhcmlhYmxlLCAiIHdpdGggc3VjY2Vz
c29yIFBoaSAiLCAqcGhpLAorICAgICAgICAgICAgICAgICAgICAgICAgIiBhdCBlbmQgb2YgIiwg
KmJsb2NrLCAiOiAiLCBwb2ludGVyRHVtcChtYXBwZWRWYWx1ZSksICJcbiIpOwogICAgICAgICAg
ICAgICAgIH0KICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAoIW1hcHBlZFZh
bHVlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRml4U1NBLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRml4U1NBLmgJKHJldmlzaW9uIDE5NTkw
MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0ZpeFNTQS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0zNiw4ICszNiw4IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewogCiBjbGFz
cyBQcm9jZWR1cmU7CiAKLS8vIFR1cm5zIGFsbCBtZW50aW9ucyBvZiB0aGUgZ2l2ZW4gdmFsdWVz
IGludG8gYWNjZXNzZXMgdG8gYW5vbnltb3VzIHN0YWNrIHNsb3RzLiBUaGlzIGlzIG1lYW50Ci0v
LyB0byBiZSB1c2VkIGZyb20gcGhhc2VzIHRoYXQgZG9uJ3QgbGlrZSBTU0EgZm9yIHdoYXRldmVy
IHJlYXNvbi4KKy8vIFR1cm5zIGFsbCBtZW50aW9ucyBvZiB0aGUgZ2l2ZW4gdmFsdWVzIGludG8g
YWNjZXNzZXMgdG8gdmFyaWFibGVzLiBUaGlzIGlzIG1lYW50IHRvIGJlIHVzZWQKKy8vIGZyb20g
cGhhc2VzIHRoYXQgZG9uJ3QgbGlrZSBTU0EgZm9yIHdoYXRldmVyIHJlYXNvbi4KIHZvaWQgZGVt
b3RlVmFsdWVzKFByb2NlZHVyZSYsIGNvbnN0IEluZGV4U2V0PFZhbHVlPiYpOwogCiAvLyBUaGlz
IGZpeGVzIFNTQSBmb3IgeW91LiBVc2UgdGhpcyBhZnRlciB5b3UgaGF2ZSBkb25lIGRlbW90ZVZh
bHVlcygpIGFuZCB5b3UgaGF2ZSBwZXJmb3JtZWQKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0luZGV4TWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzSW5kZXhNYXAuaAkocmV2aXNpb24gMTk1OTAxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzSW5kZXhNYXAuaAkod29ya2luZyBjb3B5KQpAQCAtNDksNiArNDksMTEgQEAgcHVibGlj
OgogICAgICAgICBtX3ZlY3Rvci5maWxsKFZhbHVlKCksIHNpemUpOwogICAgIH0KIAorICAgIHZv
aWQgY2xlYXIoKQorICAgIHsKKyAgICAgICAgbV92ZWN0b3IuZmlsbChWYWx1ZSgpLCBtX3ZlY3Rv
ci5zaXplKCkpOworICAgIH0KKwogICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV92
ZWN0b3Iuc2l6ZSgpOyB9CiAKICAgICBWYWx1ZSYgb3BlcmF0b3JbXShzaXplX3QgaW5kZXgpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNJbmRleFNldC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0luZGV4U2V0LmgJKHJldmlzaW9uIDE5NTkwMSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0luZGV4U2V0LmgJKHdvcmtpbmcgY29weSkK
QEAgLTY5LDYgKzY5LDE2IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fc2V0LmdldCh2YWx1
ZS0+aW5kZXgoKSk7CiAgICAgfQogCisgICAgc2l6ZV90IHNpemUoKSBjb25zdAorICAgIHsKKyAg
ICAgICAgcmV0dXJuIG1fc2V0LmJpdENvdW50KCk7CisgICAgfQorCisgICAgYm9vbCBpc0VtcHR5
KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiAhc2l6ZSgpOworICAgIH0KKwogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIENvbGxlY3Rpb25UeXBlPgogICAgIGNsYXNzIEl0ZXJhYmxlIHsKICAg
ICBwdWJsaWM6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNw
cAkocmV2aXNpb24gMTk1OTAxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJU
b0Fpci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUzLDYgKzUzLDcgQEAKICNpbmNsdWRlICJCM1Vw
c2lsb25WYWx1ZS5oIgogI2luY2x1ZGUgIkIzVXNlQ291bnRzLmgiCiAjaW5jbHVkZSAiQjNWYWx1
ZUlubGluZXMuaCIKKyNpbmNsdWRlICJCM1ZhcmlhYmxlVmFsdWUuaCIKICNpbmNsdWRlIDx3dGYv
TGlzdER1bXAuaD4KIAogI2lmIENPTVBJTEVSKEdDQykgJiYgQVNTRVJUX0RJU0FCTEVECkBAIC0x
MDIsNiArMTAzLDggQEAgcHVibGljOgogCiAgICAgICAgIGZvciAoQjM6OlN0YWNrU2xvdCogc3Rh
Y2sgOiBtX3Byb2NlZHVyZS5zdGFja1Nsb3RzKCkpCiAgICAgICAgICAgICBtX3N0YWNrVG9TdGFj
ay5hZGQoc3RhY2ssIG1fY29kZS5hZGRTdGFja1Nsb3Qoc3RhY2spKTsKKyAgICAgICAgZm9yIChW
YXJpYWJsZSogdmFyaWFibGUgOiBtX3Byb2NlZHVyZS52YXJpYWJsZXMoKSkKKyAgICAgICAgICAg
IG1fdmFyaWFibGVUb1N0YWNrLmFkZCh2YXJpYWJsZSwgbV9jb2RlLm5ld1RtcChBcmc6OnR5cGVG
b3JCM1R5cGUodmFyaWFibGUtPnR5cGUoKSkpKTsKIAogICAgICAgICAvLyBGaWd1cmUgb3V0IHdo
aWNoIGJsb2NrcyBhcmUgbm90IHJhcmUuCiAgICAgICAgIG1fZmFzdFdvcmtsaXN0LnB1c2gobV9w
cm9jZWR1cmVbMF0pOwpAQCAtMjIwOCw2ICsyMjExLDIxIEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIH0KIAorICAgICAgICBjYXNlIFNldDogeworICAgICAgICAgICAg
VmFsdWUgdmFsdWUgPSBtX3ZhbHVlLT5jaGlsZCgwKTsKKyAgICAgICAgICAgIGFwcGVuZCgKKyAg
ICAgICAgICAgICAgICByZWxheGVkTW92ZUZvclR5cGUodmFsdWUtPnR5cGUoKSksIGltbU9yVG1w
KHZhbHVlKSwKKyAgICAgICAgICAgICAgICBtX3ZhcmlhYmxlVG9UbXAuZ2V0KG1fdmFsdWUtPmFz
PFZhcmlhYmxlVmFsdWU+KCktPnZhcmlhYmxlKCkpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorCisgICAgICAgIGNhc2UgR2V0OiB7CisgICAgICAgICAgICBhcHBlbmQoCisgICAg
ICAgICAgICAgICAgcmVsYXhlZE1vdmVGb3JUeXBlKG1fdmFsdWUtPnR5cGUoKSksCisgICAgICAg
ICAgICAgICAgbV92YXJpYWJsZVRvVG1wLmdldChtX3ZhbHVlLT5hczxWYXJpYWJsZVZhbHVlPigp
LT52YXJpYWJsZSgpKSwgdG1wKG1fdmFsdWUpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorCiAgICAgICAgIGNhc2UgQnJhbmNoOiB7CiAgICAgICAgICAgICBtX2luc3RzLmxhc3Qo
KS5hcHBlbmQoY3JlYXRlQnJhbmNoKG1fdmFsdWUtPmNoaWxkKDApKSk7CiAgICAgICAgICAgICBy
ZXR1cm47CkBAIC0yMjk5LDYgKzIzMTcsNyBAQCBwcml2YXRlOgogICAgIEluZGV4TWFwPFZhbHVl
LCBUbXA+IG1fcGhpVG9UbXA7IC8vIEVhY2ggUGhpIGdldHMgaXRzIG93biBUbXAuCiAgICAgSW5k
ZXhNYXA8QjM6OkJhc2ljQmxvY2ssIEFpcjo6QmFzaWNCbG9jayo+IG1fYmxvY2tUb0Jsb2NrOwog
ICAgIEhhc2hNYXA8QjM6OlN0YWNrU2xvdCosIEFpcjo6U3RhY2tTbG90Kj4gbV9zdGFja1RvU3Rh
Y2s7CisgICAgSGFzaE1hcDxWYXJpYWJsZSosIFRtcD4gbV92YXJpYWJsZVRvVG1wOwogCiAgICAg
VXNlQ291bnRzIG1fdXNlQ291bnRzOwogICAgIFBoaUNoaWxkcmVuIG1fcGhpQ2hpbGRyZW47Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNNZW1vcnlWYWx1ZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM01lbW9yeVZhbHVlLmgJKHJldmlzaW9uIDE5
NTkwMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM01lbW9yeVZhbHVlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTc1LDEwICs3NSw4IEBAIHByaXZhdGU6CiAKICAgICAvLyBVc2UgdGhpcyBm
b3JtIGZvciBMb2FkIChidXQgbm90IExvYWQ4WiwgTG9hZDhTLCBvciBhbnkgb2YgdGhlIExvYWRz
IHRoYXQgaGF2ZSBhIHN1ZmZpeCB0aGF0CiAgICAgLy8gZGVzY3JpYmVzIHRoZSByZXR1cm5lZCB0
eXBlKS4KLSAgICBNZW1vcnlWYWx1ZSgKLSAgICAgICAgdW5zaWduZWQgaW5kZXgsIE9wY29kZSBv
cGNvZGUsIFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIHBvaW50ZXIsCi0gICAgICAg
IGludDMyX3Qgb2Zmc2V0ID0gMCkKLSAgICAgICAgOiBWYWx1ZShpbmRleCwgQ2hlY2tlZE9wY29k
ZSwgb3Bjb2RlLCB0eXBlLCBvcmlnaW4sIHBvaW50ZXIpCisgICAgTWVtb3J5VmFsdWUoT3Bjb2Rl
IG9wY29kZSwgVHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogcG9pbnRlciwgaW50MzJf
dCBvZmZzZXQgPSAwKQorICAgICAgICA6IFZhbHVlKENoZWNrZWRPcGNvZGUsIG9wY29kZSwgdHlw
ZSwgb3JpZ2luLCBwb2ludGVyKQogICAgICAgICAsIG1fb2Zmc2V0KG9mZnNldCkKICAgICAgICAg
LCBtX3JhbmdlKEhlYXBSYW5nZTo6dG9wKCkpCiAgICAgewpAQCAtMTA0LDE2ICsxMDIsMTQgQEAg
cHJpdmF0ZToKICAgICB9CiAKICAgICAvLyBVc2UgdGhpcyBmb3JtIGZvciBsb2FkcyB3aGVyZSB0
aGUgcmV0dXJuIHR5cGUgaXMgaW1wbGllZC4KLSAgICBNZW1vcnlWYWx1ZSh1bnNpZ25lZCBpbmRl
eCwgT3Bjb2RlIG9wY29kZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIHBvaW50ZXIsIGludDMyX3Qg
b2Zmc2V0ID0gMCkKLSAgICAgICAgOiBNZW1vcnlWYWx1ZShpbmRleCwgb3Bjb2RlLCBJbnQzMiwg
b3JpZ2luLCBwb2ludGVyLCBvZmZzZXQpCisgICAgTWVtb3J5VmFsdWUoT3Bjb2RlIG9wY29kZSwg
T3JpZ2luIG9yaWdpbiwgVmFsdWUqIHBvaW50ZXIsIGludDMyX3Qgb2Zmc2V0ID0gMCkKKyAgICAg
ICAgOiBNZW1vcnlWYWx1ZShvcGNvZGUsIEludDMyLCBvcmlnaW4sIHBvaW50ZXIsIG9mZnNldCkK
ICAgICB7CiAgICAgfQogCiAgICAgLy8gVXNlIHRoaXMgZm9ybSBmb3Igc3RvcmVzLgotICAgIE1l
bW9yeVZhbHVlKAotICAgICAgICB1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgT3JpZ2lu
IG9yaWdpbiwgVmFsdWUqIHZhbHVlLCBWYWx1ZSogcG9pbnRlciwKLSAgICAgICAgaW50MzJfdCBv
ZmZzZXQgPSAwKQotICAgICAgICA6IFZhbHVlKGluZGV4LCBDaGVja2VkT3Bjb2RlLCBvcGNvZGUs
IFZvaWQsIG9yaWdpbiwgdmFsdWUsIHBvaW50ZXIpCisgICAgTWVtb3J5VmFsdWUoT3Bjb2RlIG9w
Y29kZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIHZhbHVlLCBWYWx1ZSogcG9pbnRlciwgaW50MzJf
dCBvZmZzZXQgPSAwKQorICAgICAgICA6IFZhbHVlKENoZWNrZWRPcGNvZGUsIG9wY29kZSwgVm9p
ZCwgb3JpZ2luLCB2YWx1ZSwgcG9pbnRlcikKICAgICAgICAgLCBtX29mZnNldChvZmZzZXQpCiAg
ICAgICAgICwgbV9yYW5nZShIZWFwUmFuZ2U6OnRvcCgpKQogICAgIHsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM09wY29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM09wY29kZS5oCShyZXZpc2lvbiAxOTU5MDEpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNPcGNvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsOSArNDgsMTQgQEAg
ZW51bSBPcGNvZGUgOiBpbnQxNl90IHsKICAgICBDb25zdERvdWJsZSwKICAgICBDb25zdEZsb2F0
LAogCi0gICAgLy8gVGhlIG1hZ2ljYWwgc3RhY2sgc2xvdC4gVGhpcyBpcyB2aWV3ZWQgYXMgZXhl
Y3V0aW5nIGF0IHRoZSB0b3Agb2YgdGhlIHByb2dyYW0gcmVnYXJkbGVzcyBvZgotICAgIC8vIHdo
ZXJlIGluIGNvbnRyb2wgZmxvdyB5b3UgcHV0IGl0LiBFYWNoIGluc3RhbmNlIG9mIGEgU3RhY2tT
bG90IFZhbHVlIGdldHMgYSBkaXNqb2ludCByYW5nZSBvZgotICAgIC8vIHN0YWNrIG1lbW9yeS4g
VXNlIHRoZSBTdGFja1Nsb3RWYWx1ZSBjbGFzcy4KKyAgICAvLyBCMyBzdXBwb3J0cyBub24tU1NB
IHZhcmlhYmxlcy4gVGhlc2UgYXJlIGFjY2Vzc2VkIHVzaW5nIEdldCBhbmQgU2V0IG9wY29kZXMu
IFVzZSB0aGUKKyAgICAvLyBWYXJpYWJsZVZhbHVlIGNsYXNzLiBJdCdzIGEgZ29vZCBpZGVhIHRv
IHJ1biBmaXhTU0EoKSB0byB0dXJuIHRoZXNlIGludG8gU1NBLiBUaGUKKyAgICAvLyBvcHRpbWl6
ZXIgd2lsbCBkbyB0aGF0IGV2ZW50dWFsbHksIGJ1dCBpZiB5b3VyIGlucHV0IHRlbmRzIHRvIHVz
ZSB0aGVzZSBvcGNvZGVzLCB5b3UKKyAgICAvLyBzaG91bGQgcnVuIGZpeFNTQSgpIGRpcmVjdGx5
IGJlZm9yZSBsYXVuY2hpbmcgdGhlIG9wdGltaXplci4KKyAgICBTZXQsCisgICAgR2V0LAorCisg
ICAgLy8gR2V0cyB0aGUgYmFzZSBhZGRyZXNzIG9mIGEgU3RhY2tTbG90LgogICAgIFNsb3RCYXNl
LAogCiAgICAgLy8gVGhlIG1hZ2ljYWwgYXJndW1lbnQgcmVnaXN0ZXIuIFRoaXMgaXMgdmlld2Vk
IGFzIGV4ZWN1dGluZyBhdCB0aGUgdG9wIG9mIHRoZSBwcm9ncmFtCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNQYXRjaHBvaW50VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRWYWx1ZS5jcHAJKHJldmlzaW9uIDE5NTkw
MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRWYWx1ZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQ5LDggKzQ5LDggQEAgVmFsdWUqIFBhdGNocG9pbnRWYWx1ZTo6Y2xv
bmVJbXBsKCkgY29ucwogICAgIHJldHVybiBuZXcgUGF0Y2hwb2ludFZhbHVlKCp0aGlzKTsKIH0K
IAotUGF0Y2hwb2ludFZhbHVlOjpQYXRjaHBvaW50VmFsdWUodW5zaWduZWQgaW5kZXgsIFR5cGUg
dHlwZSwgT3JpZ2luIG9yaWdpbikKLSAgICA6IEJhc2UoaW5kZXgsIENoZWNrZWRPcGNvZGUsIFBh
dGNocG9pbnQsIHR5cGUsIG9yaWdpbikKK1BhdGNocG9pbnRWYWx1ZTo6UGF0Y2hwb2ludFZhbHVl
KFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdpbikKKyAgICA6IEJhc2UoQ2hlY2tlZE9wY29kZSwgUGF0
Y2hwb2ludCwgdHlwZSwgb3JpZ2luKQogICAgICwgZWZmZWN0cyhFZmZlY3RzOjpmb3JDYWxsKCkp
CiAgICAgLCByZXN1bHRDb25zdHJhaW50KHR5cGUgPT0gVm9pZCA/IFZhbHVlUmVwOjpXYXJtQW55
IDogVmFsdWVSZXA6OlNvbWVSZWdpc3RlcikKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1BhdGNocG9pbnRWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1BhdGNocG9pbnRWYWx1ZS5oCShyZXZpc2lvbiAxOTU5MDEpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNQYXRjaHBvaW50VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAt
NzAsNyArNzAsNyBAQCBwcm90ZWN0ZWQ6CiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBQcm9j
ZWR1cmU7CiAKLSAgICBKU19FWFBPUlRfUFJJVkFURSBQYXRjaHBvaW50VmFsdWUodW5zaWduZWQg
aW5kZXgsIFR5cGUsIE9yaWdpbik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgUGF0Y2hwb2ludFZh
bHVlKFR5cGUsIE9yaWdpbik7CiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmNwcAkocmV2aXNpb24gMTk1OTAx
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDYsNyArNDYsNiBAQCBQcm9jZWR1cmU6OlByb2NlZHVyZSgpCiAgICAgLCBtX2xh
c3RQaGFzZU5hbWUoImluaXRpYWwiKQogICAgICwgbV9ieXByb2R1Y3RzKHN0ZDo6bWFrZV91bmlx
dWU8T3BhcXVlQnlwcm9kdWN0cz4oKSkKICAgICAsIG1fY29kZShuZXcgQWlyOjpDb2RlKCp0aGlz
KSkKLSAgICAsIG1fdmFsdWVzQ29sbGVjdGlvbigqdGhpcykKIHsKIH0KIApAQCAtNzAsNDEgKzY5
LDE0IEBAIEJhc2ljQmxvY2sqIFByb2NlZHVyZTo6YWRkQmxvY2soZG91YmxlIGYKICAgICByZXR1
cm4gcmVzdWx0OwogfQogCi12b2lkIFByb2NlZHVyZTo6c2V0QmxvY2tPcmRlckltcGwoVmVjdG9y
PEJhc2ljQmxvY2sqPiYgYmxvY2tzKQotewotICAgIEluZGV4U2V0PEJhc2ljQmxvY2s+IGJsb2Nr
c1NldDsKLSAgICBibG9ja3NTZXQuYWRkQWxsKGJsb2Nrcyk7Ci0KLSAgICBmb3IgKEJhc2ljQmxv
Y2sqIGJsb2NrIDogKnRoaXMpIHsKLSAgICAgICAgaWYgKCFibG9ja3NTZXQuY29udGFpbnMoYmxv
Y2spKQotICAgICAgICAgICAgYmxvY2tzLmFwcGVuZChibG9jayk7Ci0gICAgfQotCi0gICAgLy8g
UGxhY2UgYmxvY2tzIGludG8gdGhpcydzIGJsb2NrIGxpc3QgYnkgZmlyc3QgbGVha2luZyBhbGwg
b2YgdGhlIGJsb2NrcyBhbmQgdGhlbiByZWFkb3B0aW5nCi0gICAgLy8gdGhlbS4KLSAgICBmb3Ig
KGF1dG8mIGVudHJ5IDogbV9ibG9ja3MpCi0gICAgICAgIGVudHJ5LnJlbGVhc2UoKTsKLQotICAg
IG1fYmxvY2tzLnJlc2l6ZShibG9ja3Muc2l6ZSgpKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgYmxvY2tzLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0g
YmxvY2tzW2ldOwotICAgICAgICBibG9jay0+bV9pbmRleCA9IGk7Ci0gICAgICAgIG1fYmxvY2tz
W2ldID0gc3RkOjp1bmlxdWVfcHRyPEJhc2ljQmxvY2s+KGJsb2NrKTsKLSAgICB9Ci19Ci0KLVN0
YWNrU2xvdCogUHJvY2VkdXJlOjphZGRTdGFja1Nsb3QodW5zaWduZWQgYnl0ZVNpemUsIFN0YWNr
U2xvdEtpbmQga2luZCkKK1N0YWNrU2xvdCogUHJvY2VkdXJlOjphZGRTdGFja1Nsb3QodW5zaWdu
ZWQgYnl0ZVNpemUpCiB7Ci0gICAgc2l6ZV90IGluZGV4ID0gYWRkU3RhY2tTbG90SW5kZXgoKTsK
LSAgICBzdGQ6OnVuaXF1ZV9wdHI8U3RhY2tTbG90PiBzbG90KG5ldyBTdGFja1Nsb3QoaW5kZXgs
IGJ5dGVTaXplLCBraW5kKSk7Ci0gICAgU3RhY2tTbG90KiByZXN1bHQgPSBzbG90LmdldCgpOwot
ICAgIG1fc3RhY2tTbG90c1tpbmRleF0gPSBXVEZNb3ZlKHNsb3QpOwotICAgIHJldHVybiByZXN1
bHQ7CisgICAgcmV0dXJuIG1fc3RhY2tTbG90cy5hZGQobmV3IFN0YWNrU2xvdChieXRlU2l6ZSkp
OwogfQogCi1TdGFja1Nsb3QqIFByb2NlZHVyZTo6YWRkQW5vbnltb3VzU3RhY2tTbG90KFR5cGUg
dHlwZSkKK1ZhcmlhYmxlKiBQcm9jZWR1cmU6OmFkZFZhcmlhYmxlKFR5cGUgdHlwZSkKIHsKLSAg
ICByZXR1cm4gYWRkU3RhY2tTbG90KHNpemVvZlR5cGUodHlwZSksIFN0YWNrU2xvdEtpbmQ6OkFu
b255bW91cyk7CisgICAgcmV0dXJuIG1fdmFyaWFibGVzLmFkZChuZXcgVmFyaWFibGUodHlwZSkp
OyAKIH0KIAogVmFsdWUqIFByb2NlZHVyZTo6Y2xvbmUoVmFsdWUqIHZhbHVlKQpAQCAtMjA4LDYg
KzE4MCwxMSBAQCB2b2lkIFByb2NlZHVyZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjCiAgICAg
ICAgIH0KICAgICAgICAgZGF0YUxvZygiICAgICIsIGRlZXBEdW1wKCp0aGlzLCB2YWx1ZSksICJc
biIpOwogICAgIH0KKyAgICBpZiAodmFyaWFibGVzKCkuc2l6ZSgpKSB7CisgICAgICAgIG91dC5w
cmludCgiVmFyaWFibGVzOlxuIik7CisgICAgICAgIGZvciAoVmFyaWFibGUqIHZhcmlhYmxlIDog
dmFyaWFibGVzKCkpCisgICAgICAgICAgICBvdXQucHJpbnQoIiAgICAiLCBkZWVwRHVtcCh2YXJp
YWJsZSksICJcbiIpOworICAgIH0KICAgICBpZiAoc3RhY2tTbG90cygpLnNpemUoKSkgewogICAg
ICAgICBvdXQucHJpbnQoIlN0YWNrIHNsb3RzOlxuIik7CiAgICAgICAgIGZvciAoU3RhY2tTbG90
KiBzbG90IDogc3RhY2tTbG90cygpKQpAQCAtMjI5LDE3ICsyMDYsMTcgQEAgVmVjdG9yPEJhc2lj
QmxvY2sqPiBQcm9jZWR1cmU6OmJsb2Nrc0luUAogCiB2b2lkIFByb2NlZHVyZTo6ZGVsZXRlU3Rh
Y2tTbG90KFN0YWNrU2xvdCogc3RhY2tTbG90KQogewotICAgIFJFTEVBU0VfQVNTRVJUKG1fc3Rh
Y2tTbG90c1tzdGFja1Nsb3QtPmluZGV4KCldLmdldCgpID09IHN0YWNrU2xvdCk7Ci0gICAgUkVM
RUFTRV9BU1NFUlQoIXN0YWNrU2xvdC0+aXNMb2NrZWQoKSk7Ci0gICAgbV9zdGFja1Nsb3RJbmRl
eEZyZWVMaXN0LmFwcGVuZChzdGFja1Nsb3QtPmluZGV4KCkpOwotICAgIG1fc3RhY2tTbG90c1tz
dGFja1Nsb3QtPmluZGV4KCldID0gbnVsbHB0cjsKKyAgICBtX3N0YWNrU2xvdHMucmVtb3ZlKHN0
YWNrU2xvdCk7Cit9CisKK3ZvaWQgUHJvY2VkdXJlOjpkZWxldGVWYXJpYWJsZShWYXJpYWJsZSog
dmFyaWFibGUpCit7CisgICAgbV92YXJpYWJsZXMucmVtb3ZlKHZhcmlhYmxlKTsKIH0KIAogdm9p
ZCBQcm9jZWR1cmU6OmRlbGV0ZVZhbHVlKFZhbHVlKiB2YWx1ZSkKIHsKLSAgICBSRUxFQVNFX0FT
U0VSVChtX3ZhbHVlc1t2YWx1ZS0+aW5kZXgoKV0uZ2V0KCkgPT0gdmFsdWUpOwotICAgIG1fdmFs
dWVJbmRleEZyZWVMaXN0LmFwcGVuZCh2YWx1ZS0+aW5kZXgoKSk7Ci0gICAgbV92YWx1ZXNbdmFs
dWUtPmluZGV4KCldID0gbnVsbHB0cjsKKyAgICBtX3ZhbHVlcy5yZW1vdmUodmFsdWUpOwogfQog
CiB2b2lkIFByb2NlZHVyZTo6ZGVsZXRlT3JwaGFucygpCkBAIC0zMTEsMjYgKzI4OCwzMiBAQCBj
b25zdCBSZWdpc3RlckF0T2Zmc2V0TGlzdCYgUHJvY2VkdXJlOjpjCiAgICAgcmV0dXJuIGNvZGUo
KS5jYWxsZWVTYXZlUmVnaXN0ZXJzKCk7CiB9CiAKLXNpemVfdCBQcm9jZWR1cmU6OmFkZFN0YWNr
U2xvdEluZGV4KCkKK1ZhbHVlKiBQcm9jZWR1cmU6OmFkZFZhbHVlSW1wbChWYWx1ZSogdmFsdWUp
CiB7Ci0gICAgaWYgKG1fc3RhY2tTbG90SW5kZXhGcmVlTGlzdC5pc0VtcHR5KCkpIHsKLSAgICAg
ICAgc2l6ZV90IGluZGV4ID0gbV9zdGFja1Nsb3RzLnNpemUoKTsKLSAgICAgICAgbV9zdGFja1Ns
b3RzLmFwcGVuZChudWxscHRyKTsKLSAgICAgICAgcmV0dXJuIGluZGV4OwotICAgIH0KLSAgICAK
LSAgICByZXR1cm4gbV9zdGFja1Nsb3RJbmRleEZyZWVMaXN0LnRha2VMYXN0KCk7CisgICAgcmV0
dXJuIG1fdmFsdWVzLmFkZCh2YWx1ZSk7CiB9CiAKLXNpemVfdCBQcm9jZWR1cmU6OmFkZFZhbHVl
SW5kZXgoKQordm9pZCBQcm9jZWR1cmU6OnNldEJsb2NrT3JkZXJJbXBsKFZlY3RvcjxCYXNpY0Js
b2NrKj4mIGJsb2NrcykKIHsKLSAgICBpZiAobV92YWx1ZUluZGV4RnJlZUxpc3QuaXNFbXB0eSgp
KSB7Ci0gICAgICAgIHNpemVfdCBpbmRleCA9IG1fdmFsdWVzLnNpemUoKTsKLSAgICAgICAgbV92
YWx1ZXMuYXBwZW5kKG51bGxwdHIpOwotICAgICAgICByZXR1cm4gaW5kZXg7CisgICAgSW5kZXhT
ZXQ8QmFzaWNCbG9jaz4gYmxvY2tzU2V0OworICAgIGJsb2Nrc1NldC5hZGRBbGwoYmxvY2tzKTsK
KworICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiAqdGhpcykgeworICAgICAgICBpZiAoIWJs
b2Nrc1NldC5jb250YWlucyhibG9jaykpCisgICAgICAgICAgICBibG9ja3MuYXBwZW5kKGJsb2Nr
KTsKKyAgICB9CisKKyAgICAvLyBQbGFjZSBibG9ja3MgaW50byB0aGlzJ3MgYmxvY2sgbGlzdCBi
eSBmaXJzdCBsZWFraW5nIGFsbCBvZiB0aGUgYmxvY2tzIGFuZCB0aGVuIHJlYWRvcHRpbmcKKyAg
ICAvLyB0aGVtLgorICAgIGZvciAoYXV0byYgZW50cnkgOiBtX2Jsb2NrcykKKyAgICAgICAgZW50
cnkucmVsZWFzZSgpOworCisgICAgbV9ibG9ja3MucmVzaXplKGJsb2Nrcy5zaXplKCkpOworICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBibG9ja3Muc2l6ZSgpOyArK2kpIHsKKyAgICAgICAg
QmFzaWNCbG9jayogYmxvY2sgPSBibG9ja3NbaV07CisgICAgICAgIGJsb2NrLT5tX2luZGV4ID0g
aTsKKyAgICAgICAgbV9ibG9ja3NbaV0gPSBzdGQ6OnVuaXF1ZV9wdHI8QmFzaWNCbG9jaz4oYmxv
Y2spOwogICAgIH0KLSAgICAKLSAgICByZXR1cm4gbV92YWx1ZUluZGV4RnJlZUxpc3QudGFrZUxh
c3QoKTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNQcm9jZWR1cmUuaAkocmV2aXNpb24gMTk1OTAxKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcg
QEAKICNpbmNsdWRlICJCM09wYXF1ZUJ5cHJvZHVjdHMuaCIKICNpbmNsdWRlICJCM09yaWdpbi5o
IgogI2luY2x1ZGUgIkIzUENUb09yaWdpbk1hcC5oIgorI2luY2x1ZGUgIkIzU3BhcnNlQ29sbGVj
dGlvbi5oIgogI2luY2x1ZGUgIkIzU3RhY2tTbG90S2luZC5oIgogI2luY2x1ZGUgIkIzVHlwZS5o
IgogI2luY2x1ZGUgIkIzVmFsdWVLZXkuaCIKQEAgLTk0LDggKzk1LDggQEAgcHVibGljOgogICAg
ICAgICBzZXRCbG9ja09yZGVySW1wbChibG9ja3MpOwogICAgIH0KIAotICAgIEpTX0VYUE9SVF9Q
UklWQVRFIFN0YWNrU2xvdCogYWRkU3RhY2tTbG90KHVuc2lnbmVkIGJ5dGVTaXplLCBTdGFja1Ns
b3RLaW5kKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSBTdGFja1Nsb3QqIGFkZEFub255bW91c1N0
YWNrU2xvdChUeXBlKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBTdGFja1Nsb3QqIGFkZFN0YWNr
U2xvdCh1bnNpZ25lZCBieXRlU2l6ZSk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgVmFyaWFibGUq
IGFkZFZhcmlhYmxlKFR5cGUpOwogICAgIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlVHlw
ZSwgdHlwZW5hbWUuLi4gQXJndW1lbnRzPgogICAgIFZhbHVlVHlwZSogYWRkKEFyZ3VtZW50cy4u
Lik7CkBAIC0xNzgsMTQzICsxNzksMjIgQEAgcHVibGljOgogICAgIFZlY3RvcjxCYXNpY0Jsb2Nr
Kj4gYmxvY2tzSW5QcmVPcmRlcigpOwogICAgIFZlY3RvcjxCYXNpY0Jsb2NrKj4gYmxvY2tzSW5Q
b3N0T3JkZXIoKTsKIAotICAgIGNsYXNzIFN0YWNrU2xvdHNDb2xsZWN0aW9uIHsKLSAgICBwdWJs
aWM6Ci0gICAgICAgIFN0YWNrU2xvdHNDb2xsZWN0aW9uKGNvbnN0IFByb2NlZHVyZSYgcHJvYykK
LSAgICAgICAgICAgIDogbV9wcm9jKHByb2MpCi0gICAgICAgIHsKLSAgICAgICAgfQotCi0gICAg
ICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3Byb2MubV9zdGFja1Nsb3RzLnNp
emUoKTsgfQotICAgICAgICBTdGFja1Nsb3QqIGF0KHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJl
dHVybiBtX3Byb2MubV9zdGFja1Nsb3RzW2luZGV4XS5nZXQoKTsgfQotICAgICAgICBTdGFja1Ns
b3QqIG9wZXJhdG9yW10odW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGF0KGluZGV4KTsg
fQotCi0gICAgICAgIGNsYXNzIGl0ZXJhdG9yIHsKLSAgICAgICAgcHVibGljOgotICAgICAgICAg
ICAgaXRlcmF0b3IoKQotICAgICAgICAgICAgICAgIDogbV9jb2xsZWN0aW9uKG51bGxwdHIpCi0g
ICAgICAgICAgICAgICAgLCBtX2luZGV4KDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIGl0ZXJhdG9yKGNvbnN0IFN0YWNrU2xvdHNDb2xsZWN0aW9uJiBjb2xs
ZWN0aW9uLCB1bnNpZ25lZCBpbmRleCkKLSAgICAgICAgICAgICAgICA6IG1fY29sbGVjdGlvbigm
Y29sbGVjdGlvbikKLSAgICAgICAgICAgICAgICAsIG1faW5kZXgoZmluZE5leHQoaW5kZXgpKQot
ICAgICAgICAgICAgewotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBTdGFja1Nsb3QqIG9w
ZXJhdG9yKigpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG1fY29sbGVj
dGlvbi0+YXQobV9pbmRleCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGl0ZXJhdG9y
JiBvcGVyYXRvcisrKCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBtX2luZGV4ID0g
ZmluZE5leHQobV9pbmRleCArIDEpOwotICAgICAgICAgICAgICAgIHJldHVybiAqdGhpczsKLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGl0ZXJhdG9y
JiBvdGhlcikgY29uc3QKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbV9p
bmRleCA9PSBvdGhlci5tX2luZGV4OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBib29s
IG9wZXJhdG9yIT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICBwcml2YXRlOgotICAgICAgICAgICAgdW5zaWduZWQgZmluZE5leHQodW5zaWdu
ZWQgaW5kZXgpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKGluZGV4IDwg
bV9jb2xsZWN0aW9uLT5zaXplKCkgJiYgIW1fY29sbGVjdGlvbi0+YXQoaW5kZXgpKQotICAgICAg
ICAgICAgICAgICAgICBpbmRleCsrOwotICAgICAgICAgICAgICAgIHJldHVybiBpbmRleDsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgY29uc3QgU3RhY2tTbG90c0Nv
bGxlY3Rpb24qIG1fY29sbGVjdGlvbjsKLSAgICAgICAgICAgIHVuc2lnbmVkIG1faW5kZXg7Ci0g
ICAgICAgIH07Ci0KLSAgICAgICAgaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBpdGVy
YXRvcigqdGhpcywgMCk7IH0KLSAgICAgICAgaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4g
aXRlcmF0b3IoKnRoaXMsIHNpemUoKSk7IH0KLQotICAgIHByaXZhdGU6Ci0gICAgICAgIGNvbnN0
IFByb2NlZHVyZSYgbV9wcm9jOwotICAgIH07Ci0KLSAgICBTdGFja1Nsb3RzQ29sbGVjdGlvbiBz
dGFja1Nsb3RzKCkgY29uc3QgeyByZXR1cm4gU3RhY2tTbG90c0NvbGxlY3Rpb24oKnRoaXMpOyB9
CisgICAgU3BhcnNlQ29sbGVjdGlvbjxTdGFja1Nsb3Q+JiBzdGFja1Nsb3RzKCkgeyByZXR1cm4g
bV9zdGFja1Nsb3RzOyB9CisgICAgY29uc3QgU3BhcnNlQ29sbGVjdGlvbjxTdGFja1Nsb3Q+JiBz
dGFja1Nsb3RzKCkgY29uc3QgeyByZXR1cm4gbV9zdGFja1Nsb3RzOyB9CiAKKyAgICAvLyBTaG9y
dCBmb3Igc3RhY2tTbG90cygpLnJlbW92ZSgpLiBJdCdzIGJldHRlciB0byBjYWxsIHRoaXMgbWV0
aG9kIHNpbmNlIGl0J3Mgb3V0IG9mIGxpbmUuCiAgICAgdm9pZCBkZWxldGVTdGFja1Nsb3QoU3Rh
Y2tTbG90Kik7Ci0gICAgCi0gICAgY2xhc3MgVmFsdWVzQ29sbGVjdGlvbiB7Ci0gICAgcHVibGlj
OgotICAgICAgICBWYWx1ZXNDb2xsZWN0aW9uKGNvbnN0IFByb2NlZHVyZSYgcHJvY2VkdXJlKQot
ICAgICAgICAgICAgOiBtX3Byb2NlZHVyZShwcm9jZWR1cmUpCi0gICAgICAgIHsKLSAgICAgICAg
fQogCi0gICAgICAgIGNsYXNzIGl0ZXJhdG9yIHsKLSAgICAgICAgcHVibGljOgotICAgICAgICAg
ICAgaXRlcmF0b3IoKQotICAgICAgICAgICAgICAgIDogbV9wcm9jZWR1cmUobnVsbHB0cikKLSAg
ICAgICAgICAgICAgICAsIG1faW5kZXgoMCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICAgICAgaXRlcmF0b3IoY29uc3QgUHJvY2VkdXJlJiBwcm9jZWR1cmUsIHVuc2ln
bmVkIGluZGV4KQotICAgICAgICAgICAgICAgIDogbV9wcm9jZWR1cmUoJnByb2NlZHVyZSkKLSAg
ICAgICAgICAgICAgICAsIG1faW5kZXgoZmluZE5leHQoaW5kZXgpKQotICAgICAgICAgICAgewot
ICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBWYWx1ZSogb3BlcmF0b3IqKCkgY29uc3QKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbV9wcm9jZWR1cmUtPm1fdmFsdWVz
W21faW5kZXhdLmdldCgpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpdGVyYXRvciYg
b3BlcmF0b3IrKygpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbV9pbmRleCA9IGZp
bmROZXh0KG1faW5kZXggKyAxKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBpdGVyYXRvciYg
b3RoZXIpIGNvbnN0Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKG1fcHJv
Y2VkdXJlID09IG90aGVyLm1fcHJvY2VkdXJlKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gbV9p
bmRleCA9PSBvdGhlci5tX2luZGV4OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBib29s
IG9wZXJhdG9yIT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAotICAgICAgICAgICAgewot
ICAgICAgICAgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKLSAgICAgICAgICAgIH0K
LQotICAgICAgICBwcml2YXRlOgotICAgICAgICAgICAgdW5zaWduZWQgZmluZE5leHQodW5zaWdu
ZWQgaW5kZXgpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgd2hpbGUgKGluZGV4IDwg
bV9wcm9jZWR1cmUtPm1fdmFsdWVzLnNpemUoKSAmJiAhbV9wcm9jZWR1cmUtPm1fdmFsdWVzW2lu
ZGV4XSkKLSAgICAgICAgICAgICAgICAgICAgaW5kZXgrKzsKLSAgICAgICAgICAgICAgICByZXR1
cm4gaW5kZXg7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGNvbnN0IFByb2NlZHVyZSog
bV9wcm9jZWR1cmU7Ci0gICAgICAgICAgICB1bnNpZ25lZCBtX2luZGV4OwotICAgICAgICB9Owot
Ci0gICAgICAgIGl0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IobV9wcm9j
ZWR1cmUsIDApOyB9Ci0gICAgICAgIGl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIGl0ZXJh
dG9yKG1fcHJvY2VkdXJlLCBtX3Byb2NlZHVyZS5tX3ZhbHVlcy5zaXplKCkpOyB9Ci0KLSAgICAg
ICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvY2VkdXJlLm1fdmFsdWVzLnNp
emUoKTsgfQotICAgICAgICBWYWx1ZSogYXQodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJu
IG1fcHJvY2VkdXJlLm1fdmFsdWVzW2luZGV4XS5nZXQoKTsgfQotICAgICAgICBWYWx1ZSogb3Bl
cmF0b3JbXSh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gYXQoaW5kZXgpOyB9Ci0gICAg
ICAgIAotICAgIHByaXZhdGU6Ci0gICAgICAgIGNvbnN0IFByb2NlZHVyZSYgbV9wcm9jZWR1cmU7
Ci0gICAgfTsKKyAgICBTcGFyc2VDb2xsZWN0aW9uPFZhcmlhYmxlPiYgdmFyaWFibGVzKCkgeyBy
ZXR1cm4gbV92YXJpYWJsZXM7IH0KKyAgICBjb25zdCBTcGFyc2VDb2xsZWN0aW9uPFZhcmlhYmxl
PiYgdmFyaWFibGVzKCkgY29uc3QgeyByZXR1cm4gbV92YXJpYWJsZXM7IH0KKworICAgIC8vIFNo
b3J0IGZvciB2YXJpYWJsZXMoKS5yZW1vdmUoKS4gSXQncyBiZXR0ZXIgdG8gY2FsbCB0aGlzIG1l
dGhvZCBzaW5jZSBpdCdzIG91dCBvZiBsaW5lLgorICAgIHZvaWQgZGVsZXRlVmFyaWFibGUoVmFy
aWFibGUqKTsKIAotICAgIGNvbnN0IFZhbHVlc0NvbGxlY3Rpb24mIHZhbHVlcygpIGNvbnN0IHsg
cmV0dXJuIG1fdmFsdWVzQ29sbGVjdGlvbjsgfQorICAgIFNwYXJzZUNvbGxlY3Rpb248VmFsdWU+
JiB2YWx1ZXMoKSB7IHJldHVybiBtX3ZhbHVlczsgfQorICAgIGNvbnN0IFNwYXJzZUNvbGxlY3Rp
b248VmFsdWU+JiB2YWx1ZXMoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlczsgfQogCisgICAgLy8g
U2hvcnQgZm9yIHZhbHVlcygpLnJlbW92ZSgpLiBJdCdzIGJldHRlciB0byBjYWxsIHRoaXMgbWV0
aG9kIHNpbmNlIGl0J3Mgb3V0IG9mIGxpbmUuCiAgICAgdm9pZCBkZWxldGVWYWx1ZShWYWx1ZSop
OwogCiAgICAgLy8gQSB2YWxpZCBwcm9jZWR1cmUgY2Fubm90IGNvbnRhaW4gYW55IG9ycGhhbiB2
YWx1ZXMuIEFuIG9ycGhhbiBpcyBhIHZhbHVlIHRoYXQgaXMgbm90IGluCkBAIC0zNjcsMTcgKzI0
NywxNCBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEJsb2NrSW5zZXJ0
aW9uU2V0OwotICAgIAotICAgIHZvaWQgc2V0QmxvY2tPcmRlckltcGwoVmVjdG9yPEJhc2ljQmxv
Y2sqPiYpOwogCi0gICAgc2l6ZV90IGFkZFN0YWNrU2xvdEluZGV4KCk7Ci0gICAgSlNfRVhQT1JU
X1BSSVZBVEUgc2l6ZV90IGFkZFZhbHVlSW5kZXgoKTsKKyAgICBWYWx1ZSogYWRkVmFsdWVJbXBs
KFZhbHVlKik7CisgICAgdm9pZCBzZXRCbG9ja09yZGVySW1wbChWZWN0b3I8QmFzaWNCbG9jayo+
Jik7CiAKLSAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPFN0YWNrU2xvdD4+IG1fc3RhY2tTbG90
czsKKyAgICBTcGFyc2VDb2xsZWN0aW9uPFN0YWNrU2xvdD4gbV9zdGFja1Nsb3RzOworICAgIFNw
YXJzZUNvbGxlY3Rpb248VmFyaWFibGU+IG1fdmFyaWFibGVzOwogICAgIFZlY3RvcjxzdGQ6OnVu
aXF1ZV9wdHI8QmFzaWNCbG9jaz4+IG1fYmxvY2tzOwotICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9w
dHI8VmFsdWU+PiBtX3ZhbHVlczsKLSAgICBWZWN0b3I8c2l6ZV90PiBtX3N0YWNrU2xvdEluZGV4
RnJlZUxpc3Q7Ci0gICAgVmVjdG9yPHNpemVfdD4gbV92YWx1ZUluZGV4RnJlZUxpc3Q7CisgICAg
U3BhcnNlQ29sbGVjdGlvbjxWYWx1ZT4gbV92YWx1ZXM7CiAgICAgc3RkOjp1bmlxdWVfcHRyPENG
Rz4gbV9jZmc7CiAgICAgc3RkOjp1bmlxdWVfcHRyPERvbWluYXRvcnM+IG1fZG9taW5hdG9yczsK
ICAgICBIYXNoU2V0PFZhbHVlS2V5PiBtX2Zhc3RDb25zdGFudHM7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmVJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlSW5saW5lcy5oCShyZXZpc2lvbiAxOTU5MDEp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmVJbmxpbmVzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTM2LDExICszNiw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMg
ewogdGVtcGxhdGU8dHlwZW5hbWUgVmFsdWVUeXBlLCB0eXBlbmFtZS4uLiBBcmd1bWVudHM+CiBW
YWx1ZVR5cGUqIFByb2NlZHVyZTo6YWRkKEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCiB7Ci0gICAg
c2l6ZV90IGluZGV4ID0gYWRkVmFsdWVJbmRleCgpOwotICAgIHN0ZDo6dW5pcXVlX3B0cjxWYWx1
ZVR5cGU+IHZhbHVlKG5ldyBWYWx1ZVR5cGUoaW5kZXgsIGFyZ3VtZW50cy4uLikpOwotICAgIFZh
bHVlVHlwZSogcmVzdWx0ID0gdmFsdWUuZ2V0KCk7Ci0gICAgbV92YWx1ZXNbaW5kZXhdID0gV1RG
TW92ZSh2YWx1ZSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8
VmFsdWVUeXBlKj4oYWRkVmFsdWVJbXBsKG5ldyBWYWx1ZVR5cGUoYXJndW1lbnRzLi4uKSkpOwog
fQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1JlZHVjZVN0cmVuZ3RoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAJKHJldmlzaW9uIDE5NTkwMSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1JlZHVjZVN0cmVuZ3RoLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjI4MywxMyArMjI4MywxNSBAQCBwcml2YXRlOgogICAgICAgICBWZWN0b3I8VXBzaWxvblZh
bHVlKiwgNjQ+IHVwc2lsb25zOwogICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9w
cm9jKSB7CiAgICAgICAgICAgICBmb3IgKFZhbHVlKiB2YWx1ZSA6ICpibG9jaykgewotICAgICAg
ICAgICAgICAgIEVmZmVjdHMgZWZmZWN0cyA9IHZhbHVlLT5lZmZlY3RzKCk7Ci0gICAgICAgICAg
ICAgICAgLy8gV2UgZG9uJ3QgY2FyZSBhYm91dCBTU0EgRWZmZWN0cywgc2luY2Ugd2UgbW9kZWwg
dGhlbSBtb3JlIGFjY3VyYXRlbHkgdGhhbiB0aGUKLSAgICAgICAgICAgICAgICAvLyBlZmZlY3Rz
KCkgbWV0aG9kIGRvZXMuCi0gICAgICAgICAgICAgICAgZWZmZWN0cy53cml0ZXNTU0FTdGF0ZSA9
IGZhbHNlOwotICAgICAgICAgICAgICAgIGVmZmVjdHMucmVhZHNTU0FTdGF0ZSA9IGZhbHNlOwor
ICAgICAgICAgICAgICAgIEVmZmVjdHMgZWZmZWN0czsKKyAgICAgICAgICAgICAgICAvLyBXZSBk
b24ndCBjYXJlIGFib3V0IGVmZmVjdHMgb2YgU1NBIG9wZXJhdGlvbnMsIHNpbmNlIHdlIG1vZGVs
IHRoZW0gbW9yZQorICAgICAgICAgICAgICAgIC8vIGFjY3VyYXRlbHkgdGhhIHRoZSBlZmZlY3Rz
KCkgbWV0aG9kIGRvZXMuCisgICAgICAgICAgICAgICAgaWYgKHZhbHVlLT5vcGNvZGUoKSAhPSBQ
aGkgJiYgdmFsdWUtPm9wY29kZSgpICE9IFVwc2lsb24pCisgICAgICAgICAgICAgICAgICAgIGVm
ZmVjdHMgPSB2YWx1ZS0+ZWZmZWN0cygpOworICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgIGlmIChlZmZlY3RzLm11c3RFeGVjdXRlKCkpCiAgICAgICAgICAgICAgICAgICAgIHdvcmts
aXN0LnB1c2godmFsdWUpOworICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGlmIChV
cHNpbG9uVmFsdWUqIHVwc2lsb24gPSB2YWx1ZS0+YXM8VXBzaWxvblZhbHVlPigpKQogICAgICAg
ICAgICAgICAgICAgICB1cHNpbG9ucy5hcHBlbmQodXBzaWxvbik7CiAgICAgICAgICAgICB9CkBA
IC0yMzE0LDcgKzIzMTYsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9CiAKLSAgICAgICAgSW5kZXhTZXQ8U3RhY2tTbG90PiBsaXZlU3RhY2tTbG90czsKKyAg
ICAgICAgSW5kZXhTZXQ8VmFyaWFibGU+IGxpdmVWYXJpYWJsZXM7CiAgICAgICAgIAogICAgICAg
ICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9wcm9jKSB7CiAgICAgICAgICAgICBzaXplX3Qg
c291cmNlSW5kZXggPSAwOwpAQCAtMjMyMiw4ICsyMzI0LDggQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgIHdoaWxlIChzb3VyY2VJbmRleCA8IGJsb2NrLT5zaXplKCkpIHsKICAgICAgICAgICAgICAg
ICBWYWx1ZSogdmFsdWUgPSBibG9jay0+YXQoc291cmNlSW5kZXgrKyk7CiAgICAgICAgICAgICAg
ICAgaWYgKHdvcmtsaXN0LnNhdyh2YWx1ZSkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKFNs
b3RCYXNlVmFsdWUqIHNsb3RCYXNlID0gdmFsdWUtPmFzPFNsb3RCYXNlVmFsdWU+KCkpCi0gICAg
ICAgICAgICAgICAgICAgICAgICBsaXZlU3RhY2tTbG90cy5hZGQoc2xvdEJhc2UtPnNsb3QoKSk7
CisgICAgICAgICAgICAgICAgICAgIGlmIChWYXJpYWJsZVZhbHVlKiB2YXJpYWJsZVZhbHVlID0g
dmFsdWUtPmFzPFZhcmlhYmxlVmFsdWU+KCkpCisgICAgICAgICAgICAgICAgICAgICAgICBsaXZl
VmFyaWFibGVzLmFkZCh2YXJpYWJsZVZhbHVlLT52YXJpYWJsZSgpKTsKICAgICAgICAgICAgICAg
ICAgICAgYmxvY2stPmF0KHRhcmdldEluZGV4KyspID0gdmFsdWU7CiAgICAgICAgICAgICAgICAg
fSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgbV9wcm9jLmRlbGV0ZVZhbHVlKHZhbHVlKTsK
QEAgLTIzMzgsMTAgKzIzNDAsOSBAQCBwcml2YXRlOgogICAgICAgICAgICAgYmxvY2stPnZhbHVl
cygpLnJlc2l6ZSh0YXJnZXRJbmRleCk7CiAgICAgICAgIH0KIAotICAgICAgICBmb3IgKFN0YWNr
U2xvdCogc2xvdCA6IG1fcHJvYy5zdGFja1Nsb3RzKCkpIHsKLSAgICAgICAgICAgIGlmIChzbG90
LT5pc0xvY2tlZCgpIHx8IGxpdmVTdGFja1Nsb3RzLmNvbnRhaW5zKHNsb3QpKQotICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgbV9wcm9jLmRlbGV0ZVN0YWNrU2xvdChzbG90
KTsKKyAgICAgICAgZm9yIChWYXJpYWJsZSogdmFyaWFibGUgOiBtX3Byb2MudmFyaWFibGVzKCkp
CisgICAgICAgICAgICBpZiAoIWxpdmVWYXJpYWJsZXMuY29udGFpbnModmFyaWFibGUpKQorICAg
ICAgICAgICAgICAgIG1fcHJvYy5kZWxldGVWYXJpYWJsZSh2YXJpYWJsZSk7CiAgICAgICAgIH0K
ICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Nsb3RCYXNlVmFsdWUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTbG90QmFzZVZhbHVl
LmgJKHJldmlzaW9uIDE5NTkwMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Nsb3RC
YXNlVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtNTAsOCArNTAsOCBAQCBwcm90ZWN0ZWQ6CiBw
cml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7CiAKLSAgICBTbG90QmFzZVZhbHVl
KHVuc2lnbmVkIGluZGV4LCBPcmlnaW4gb3JpZ2luLCBTdGFja1Nsb3QqIHNsb3QpCi0gICAgICAg
IDogVmFsdWUoaW5kZXgsIENoZWNrZWRPcGNvZGUsIFNsb3RCYXNlLCBwb2ludGVyVHlwZSgpLCBv
cmlnaW4pCisgICAgU2xvdEJhc2VWYWx1ZShPcmlnaW4gb3JpZ2luLCBTdGFja1Nsb3QqIHNsb3Qp
CisgICAgICAgIDogVmFsdWUoQ2hlY2tlZE9wY29kZSwgU2xvdEJhc2UsIHBvaW50ZXJUeXBlKCks
IG9yaWdpbikKICAgICAgICAgLCBtX3Nsb3Qoc2xvdCkKICAgICB7CiAgICAgfQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3BhcnNlQ29sbGVjdGlvbi5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1NwYXJzZUNvbGxlY3Rpb24uaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1NwYXJzZUNvbGxlY3Rpb24uaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDE0MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzU3BhcnNlQ29sbGVjdGlvbl9oCisjZGVmaW5l
IEIzU3BhcnNlQ29sbGVjdGlvbl9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSA8
d3RmL1N0ZExpYkV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKKy8vIEIzOjpQcm9jZWR1cmUgYW5kIEFpcjo6Q29kZSBo
YXZlIGEgbG90IG9mIGNvbGxlY3Rpb25zIG9mIGluZGV4ZWQgdGhpbmdzLiBUaGlzIGhhcyBhbGwg
b2YgdGhlCisvLyBsb2dpYy4KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2NsYXNzIFNwYXJzZUNv
bGxlY3Rpb24geworICAgIHR5cGVkZWYgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxUPj4gVmVjdG9y
VHlwZTsKKyAgICAKK3B1YmxpYzoKKyAgICBTcGFyc2VDb2xsZWN0aW9uKCkKKyAgICB7CisgICAg
fQorCisgICAgVCogYWRkKHN0ZDo6dW5pcXVlX3B0cjxUPiB2YWx1ZSkKKyAgICB7CisgICAgICAg
IFQqIHJlc3VsdCA9IHZhbHVlLmdldCgpOworICAgICAgICAKKyAgICAgICAgc2l6ZV90IGluZGV4
OworICAgICAgICBpZiAobV9pbmRleEZyZWVMaXN0LmlzRW1wdHkoKSkgeworICAgICAgICAgICAg
aW5kZXggPSBtX3ZlY3Rvci5zaXplKCk7CisgICAgICAgICAgICBtX3ZlY3Rvci5hcHBlbmQobnVs
bHB0cik7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgaW5kZXggPSBtX2luZGV4RnJlZUxp
c3QudGFrZUxhc3QoKTsKKworICAgICAgICB2YWx1ZS0+bV9pbmRleCA9IGluZGV4OworCisgICAg
ICAgIG1fdmVjdG9yW2luZGV4XSA9IFdURk1vdmUodmFsdWUpOworCisgICAgICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgfQorCisgICAgdm9pZCByZW1vdmUoVCogdmFsdWUpCisgICAgeworICAgICAg
ICBSRUxFQVNFX0FTU0VSVChtX3ZlY3Rvclt2YWx1ZS0+bV9pbmRleF0uZ2V0KCkgPT0gdmFsdWUp
OworICAgICAgICBtX2luZGV4RnJlZUxpc3QuYXBwZW5kKHZhbHVlLT5tX2luZGV4KTsKKyAgICAg
ICAgbV92YWx1ZXNbdmFsdWUtPm1faW5kZXhdID0gbnVsbHB0cjsKKyAgICB9CisKKyAgICB1bnNp
Z25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV92ZWN0b3Iuc2l6ZSgpOyB9CisgICAgYm9vbCBp
c0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV92ZWN0b3IuaXNFbXB0eSgpOyB9CisgICAgCisgICAg
VCogYXQodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fdmVjdG9yW2luZGV4XS5nZXQo
KTsgfQorICAgIFQqIG9wZXJhdG9yW10odW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGF0
KGluZGV4KTsgfQorCisgICAgY2xhc3MgaXRlcmF0b3IgeworICAgIHB1YmxpYzoKKyAgICAgICAg
aXRlcmF0b3IoKQorICAgICAgICAgICAgOiBtX2NvbGxlY3Rpb24obnVsbHB0cikKKyAgICAgICAg
ICAgICwgbV9pbmRleCgwKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBpdGVyYXRv
cihjb25zdCBTcGFyc2VDb2xsZWN0aW9uJiBjb2xsZWN0aW9uLCB1bnNpZ25lZCBpbmRleCkKKyAg
ICAgICAgICAgIDogbV9jb2xsZWN0aW9uKCZjb2xsZWN0aW9uKQorICAgICAgICAgICAgLCBtX2lu
ZGV4KGZpbmRJbmRleChpbmRleCkpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAgICAgIFQq
IG9wZXJhdG9yKigpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2NvbGxlY3Rpb24t
PmF0KG1faW5kZXgpOworICAgICAgICB9CisKKyAgICAgICAgaXRlcmF0b3ImIG9wZXJhdG9yKyso
KQorICAgICAgICB7CisgICAgICAgICAgICBtX2luZGV4ID0gZmluZE5leHQobV9pbmRleCArIDEp
OworICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBv
cGVyYXRvcj09KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgeworICAgICAg
ICAgICAgQVNTRVJUKG1fY29sbGVjdGlvbiA9PSBvdGhlci5tX2NvbGxlY3Rpb24pOworICAgICAg
ICAgICAgcmV0dXJuIG1faW5kZXggPT0gb3RoZXIubV9pbmRleDsKKyAgICAgICAgfQorCisgICAg
ICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICAgICAgfQorCisg
ICAgcHJpdmF0ZToKKyAgICAgICAgdW5zaWduZWQgZmluZE5leHQodW5zaWduZWQgaW5kZXgpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIHdoaWxlIChpbmRleCA8IG1fY29sbGVjdGlvbi0+c2l6ZSgp
ICYmICFtX2NvbGxlY3Rpb24tPmF0KGluZGV4KSkKKyAgICAgICAgICAgICAgICBpbmRleCsrOwor
ICAgICAgICAgICAgcmV0dXJuIGluZGV4OworICAgICAgICB9CisKKyAgICAgICAgY29uc3QgU3Bh
cnNlQ29sbGVjdGlvbiogbV9jb2xsZWN0aW9uOworICAgICAgICB1bnNpZ2VkIG1faW5kZXg7Cisg
ICAgfTsKKworICAgIGl0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoKnRo
aXMsIDApOyB9CisgICAgaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoKnRo
aXMsIHNpemUoKSk7IH0KKworcHJpdmF0ZToKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPFQ+
PiBtX3ZlY3RvcjsKKyAgICBWZWN0b3I8c2l6ZV90PiBtX2luZGV4RnJlZUxpc3Q7Cit9OworCit9
IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNl
bmRpZiAvLyBCM1NwYXJzZUNvbGxlY3Rpb25faAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNTdGFja1Nsb3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1N0YWNrU2xvdC5jcHAJKHJldmlzaW9uIDE5NTkwMSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1N0YWNrU2xvdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDEzICs0MSwx
MSBAQCB2b2lkIFN0YWNrU2xvdDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjCiAKIHZvaWQgU3Rh
Y2tTbG90OjpkZWVwRHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogewotICAgIG91dC5wcmlu
dCgiYnl0ZVNpemUgPSAiLCBtX2J5dGVTaXplLCAiLCBvZmZzZXRGcm9tRlAgPSAiLCBtX29mZnNl
dEZyb21GUCwgIiwga2luZCA9ICIsIG1fa2luZCk7CisgICAgb3V0LnByaW50KCJieXRlU2l6ZSA9
ICIsIG1fYnl0ZVNpemUsICIsIG9mZnNldEZyb21GUCA9ICIsIG1fb2Zmc2V0RnJvbUZQKTsKIH0K
IAotU3RhY2tTbG90OjpTdGFja1Nsb3QodW5zaWduZWQgaW5kZXgsIHVuc2lnbmVkIGJ5dGVTaXpl
LCBTdGFja1Nsb3RLaW5kIGtpbmQpCi0gICAgOiBtX2luZGV4KGluZGV4KQotICAgICwgbV9ieXRl
U2l6ZShieXRlU2l6ZSkKLSAgICAsIG1fa2luZChraW5kKQorU3RhY2tTbG90OjpTdGFja1Nsb3Qo
dW5zaWduZWQgYnl0ZVNpemUpCisgICAgOiBtX2J5dGVTaXplKGJ5dGVTaXplKQogewogfQogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja1Nsb3QuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja1Nsb3QuaAkocmV2aXNpb24gMTk1OTAx
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tTbG90LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI4LDcgKzI4LDYgQEAKIAogI2lmIEVOQUJMRShCM19KSVQpCiAKLSNpbmNsdWRlICJC
M1N0YWNrU2xvdEtpbmQuaCIKICNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgogI2luY2x1ZGUg
PHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgpAQCAtNDks
OCArNDgsNiBAQCBwdWJsaWM6CiAgICAgflN0YWNrU2xvdCgpOwogCiAgICAgdW5zaWduZWQgYnl0
ZVNpemUoKSBjb25zdCB7IHJldHVybiBtX2J5dGVTaXplOyB9Ci0gICAgU3RhY2tTbG90S2luZCBr
aW5kKCkgY29uc3QgeyByZXR1cm4gbV9raW5kOyB9Ci0gICAgYm9vbCBpc0xvY2tlZCgpIGNvbnN0
IHsgcmV0dXJuIG1fa2luZCA9PSBTdGFja1Nsb3RLaW5kOjpMb2NrZWQ7IH0KICAgICB1bnNpZ25l
ZCBpbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXg7IH0KIAogICAgIC8vIFRoaXMgZ2V0cyBh
c3NpZ25lZCBhdCB0aGUgZW5kIG9mIGNvbXBpbGF0aW9uLiBCdXQsIHlvdSBjYW4gdG90YWxseSBw
aW4gc3RhY2sgc2xvdHMuIFVzZSB0aGUKQEAgLTYzLDE4ICs2MCwxNyBAQCBwdWJsaWM6CiAgICAg
ICAgIG1fb2Zmc2V0RnJvbUZQID0gdmFsdWU7CiAgICAgfQogCi0gICAgdm9pZCBkdW1wKFByaW50
U3RyZWFtJiBvdXQpIGNvbnN0OworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0Owog
ICAgIHZvaWQgZGVlcER1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKIAogcHJpdmF0ZToKICAgICBm
cmllbmQgY2xhc3MgQWlyOjpTdGFja1Nsb3Q7CiAgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsK
IAotICAgIFN0YWNrU2xvdCh1bnNpZ25lZCBpbmRleCwgdW5zaWduZWQgYnl0ZVNpemUsIFN0YWNr
U2xvdEtpbmQpOworICAgIFN0YWNrU2xvdCh1bnNpZ25lZCBieXRlU2l6ZSk7CiAKLSAgICB1bnNp
Z25lZCBtX2luZGV4OwotICAgIHVuc2lnbmVkIG1fYnl0ZVNpemU7Ci0gICAgU3RhY2tTbG90S2lu
ZCBtX2tpbmQ7CisgICAgdW5zaWduZWQgbV9pbmRleCB7IFVJTlRfTUFYIH07CisgICAgdW5zaWdu
ZWQgbV9ieXRlU2l6ZSB7IDAgfTsKICAgICBpbnRwdHJfdCBtX29mZnNldEZyb21GUCB7IDAgfTsK
IH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrU2xvdEtpbmQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrU2xvdEtpbmQu
Y3BwCShyZXZpc2lvbiAxOTU5MDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFj
a1Nsb3RLaW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1MiArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
LSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIK
LSNpbmNsdWRlICJCM1N0YWNrU2xvdEtpbmQuaCIKLQotI2lmIEVOQUJMRShCM19KSVQpCi0KLSNp
bmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KLQotbmFtZXNwYWNlIFdURiB7Ci0KLXVzaW5nIG5h
bWVzcGFjZSBKU0M6OkIzOwotCi12b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwg
U3RhY2tTbG90S2luZCBraW5kKQotewotICAgIHN3aXRjaCAoa2luZCkgewotICAgIGNhc2UgU3Rh
Y2tTbG90S2luZDo6TG9ja2VkOgotICAgICAgICBvdXQucHJpbnQoIkxvY2tlZCIpOwotICAgICAg
ICByZXR1cm47Ci0gICAgY2FzZSBTdGFja1Nsb3RLaW5kOjpBbm9ueW1vdXM6Ci0gICAgICAgIG91
dC5wcmludCgiQW5vbnltb3VzIik7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgV1RGCi0KLSNlbmRp
ZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3Rh
Y2tTbG90S2luZC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0
YWNrU2xvdEtpbmQuaAkocmV2aXNpb24gMTk1OTAxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzU3RhY2tTbG90S2luZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYzICswLDAgQEAKLS8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
LSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVm
IEIzU3RhY2tTbG90S2luZF9oCi0jZGVmaW5lIEIzU3RhY2tTbG90S2luZF9oCi0KLSNpZiBFTkFC
TEUoQjNfSklUKQotCi1uYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKLQotZW51bSBjbGFz
cyBTdGFja1Nsb3RLaW5kIDogdWludDhfdCB7Ci0gICAgLy8gQSBsb2NrZWQgc3RhY2sgc2xvdCBu
ZWVkcyB0byBiZSBrZXB0IGRpc2pvaW50IGZyb20gYWxsIG90aGVycyBiZWNhdXNlIHdlIGludGVu
ZCB0byBlc2NhcGUKLSAgICAvLyBpdCBldmVuIGlmIHRoYXQncyBub3Qgb2J2aW91cy4gVGhpcyBo
YXBwZW5zIHdoZW4gdGhlIHJ1bnRpbWUgdGFrZXMgdGhlIGFkZHJlc3Mgb2YgYSBzdGFjawotICAg
IC8vIHNsb3QuCi0gICAgTG9ja2VkLAotCi0gICAgLy8gVGhlc2Ugc3RhY2sgc2xvdHMgYmVoYXZl
IGxpa2UgdmFyaWFibGVzLiBVbmRlZmluZWQgYmVoYXZpb3IgaGFwcGVucyBpZiB5b3Ugc3RvcmUg
bGVzcyB0aGFuCi0gICAgLy8gdGhlIHdpZHRoIG9mIHRoZSBzbG90LgotICAgIEFub255bW91cwot
Ci0gICAgLy8gRklYTUU6IFdlIHNob3VsZCBhZGQgYSB0aGlyZCBtb2RlLCB3aGljaCBtZWFucyB0
aGF0IHRoZSBzdGFjayBzbG90IHdpbGwgYmUgcmVhZCBhc3luY2hyb25vdXNseQotICAgIC8vIGFz
IHdpdGggTG9ja2VkLCBidXQgbmV2ZXIgd3JpdHRlbiB0byBhc3luY2hyb25vdXNseS4gVGhlbiwg
QWlyIGNvdWxkIG9wdGltaXplIHNwaWxsaW5nIGFuZAotICAgIC8vIGZpbGxpbmcgYnkgdHJhY2tp
bmcgd2hldGhlciB0aGUgdmFsdWUgaGFkIGJlZW4gc3RvcmVkIHRvIGEgcmVhZC1vbmx5IGxvY2tl
ZCBzbG90LiBJZiBpdCBoYWQsCi0gICAgLy8gdGhlbiB3ZSBjYW4gcmVmaWxsIGZyb20gdGhhdCBz
bG90LgotICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA1
ODcKLX07Ci0KLX0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwotCi1uYW1lc3BhY2UgV1RGIHsKLQot
Y2xhc3MgUHJpbnRTdHJlYW07Ci0KLXZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpT
Qzo6QjM6OlN0YWNrU2xvdEtpbmQpOwotCi19IC8vIG5hbWVzcGFjZSBXVEYKLQotI2VuZGlmIC8v
IEVOQUJMRShCM19KSVQpCi0KLSNlbmRpZiAvLyBCM1N0YWNrU2xvdEtpbmRfaAotCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcFZhbHVlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcFZhbHVlLmNwcAkocmV2aXNpb24g
MTk1OTAxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBWYWx1ZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTgzLDggKzgzLDggQEAgdm9pZCBTdGFja21hcFZhbHVlOjpkdW1w
TWV0YShDb21tYVByaW50ZQogICAgICAgICAiLCBsYXRlQ2xvYmJlcmVkID0gIiwgbV9sYXRlQ2xv
YmJlcmVkLCAiLCB1c2VkUmVnaXN0ZXJzID0gIiwgbV91c2VkUmVnaXN0ZXJzKTsKIH0KIAotU3Rh
Y2ttYXBWYWx1ZTo6U3RhY2ttYXBWYWx1ZSh1bnNpZ25lZCBpbmRleCwgQ2hlY2tlZE9wY29kZVRh
ZywgT3Bjb2RlIG9wY29kZSwgVHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luKQotICAgIDogVmFsdWUo
aW5kZXgsIENoZWNrZWRPcGNvZGUsIG9wY29kZSwgdHlwZSwgb3JpZ2luKQorU3RhY2ttYXBWYWx1
ZTo6U3RhY2ttYXBWYWx1ZShDaGVja2VkT3Bjb2RlVGFnLCBPcGNvZGUgb3Bjb2RlLCBUeXBlIHR5
cGUsIE9yaWdpbiBvcmlnaW4pCisgICAgOiBWYWx1ZShDaGVja2VkT3Bjb2RlLCBvcGNvZGUsIHR5
cGUsIG9yaWdpbikKIHsKICAgICBBU1NFUlQoYWNjZXB0cyhvcGNvZGUpKTsKIH0KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwVmFsdWUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcFZhbHVlLmgJKHJldmlzaW9uIDE5NTkw
MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwVmFsdWUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjg0LDcgKzI4NCw3IEBAIHByb3RlY3RlZDoKICAgICB2b2lkIGR1bXBDaGls
ZHJlbihDb21tYVByaW50ZXImLCBQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZv
aWQgZHVtcE1ldGEoQ29tbWFQcmludGVyJiwgUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsK
IAotICAgIFN0YWNrbWFwVmFsdWUodW5zaWduZWQgaW5kZXgsIENoZWNrZWRPcGNvZGVUYWcsIE9w
Y29kZSwgVHlwZSwgT3JpZ2luKTsKKyAgICBTdGFja21hcFZhbHVlKENoZWNrZWRPcGNvZGVUYWcs
IE9wY29kZSwgVHlwZSwgT3JpZ2luKTsKIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgQ2hl
Y2tTcGVjaWFsOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3dpdGNoVmFsdWUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N3aXRjaFZhbHVl
LmNwcAkocmV2aXNpb24gMTk1OTAxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3dp
dGNoVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02OCw5ICs2OCw4IEBAIFZhbHVlKiBTd2l0
Y2hWYWx1ZTo6Y2xvbmVJbXBsKCkgY29uc3QKICAgICByZXR1cm4gbmV3IFN3aXRjaFZhbHVlKCp0
aGlzKTsKIH0KIAotU3dpdGNoVmFsdWU6OlN3aXRjaFZhbHVlKAotICAgIHVuc2lnbmVkIGluZGV4
LCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogY2hpbGQsIGNvbnN0IEZyZXF1ZW50ZWRCbG9jayYgZmFs
bFRocm91Z2gpCi0gICAgOiBDb250cm9sVmFsdWUoaW5kZXgsIFN3aXRjaCwgVm9pZCwgb3JpZ2lu
LCBjaGlsZCkKK1N3aXRjaFZhbHVlOjpTd2l0Y2hWYWx1ZShPcmlnaW4gb3JpZ2luLCBWYWx1ZSog
Y2hpbGQsIGNvbnN0IEZyZXF1ZW50ZWRCbG9jayYgZmFsbFRocm91Z2gpCisgICAgOiBDb250cm9s
VmFsdWUoU3dpdGNoLCBWb2lkLCBvcmlnaW4sIGNoaWxkKQogewogICAgIG1fc3VjY2Vzc29ycy5h
cHBlbmQoZmFsbFRocm91Z2gpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
U3dpdGNoVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNT
d2l0Y2hWYWx1ZS5oCShyZXZpc2lvbiAxOTU5MDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNTd2l0Y2hWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjEsOCArMTIxLDcgQEAgcHJv
dGVjdGVkOgogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOwogCi0gICAgSlNf
RVhQT1JUX1BSSVZBVEUgU3dpdGNoVmFsdWUoCi0gICAgICAgIHVuc2lnbmVkIGluZGV4LCBPcmln
aW4sIFZhbHVlKiBjaGlsZCwgY29uc3QgRnJlcXVlbnRlZEJsb2NrJiBmYWxsVGhyb3VnaCk7Cisg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgU3dpdGNoVmFsdWUoT3JpZ2luLCBWYWx1ZSogY2hpbGQsIGNv
bnN0IEZyZXF1ZW50ZWRCbG9jayYgZmFsbFRocm91Z2gpOwogCiAgICAgVmVjdG9yPGludDY0X3Q+
IG1fdmFsdWVzOwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Vwc2lsb25W
YWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Vwc2lsb25W
YWx1ZS5oCShyZXZpc2lvbiAxOTU5MDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNV
cHNpbG9uVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtNTcsOCArNTcsOCBAQCBwcml2YXRlOgog
ICAgIC8vIE5vdGUgdGhhdCBwYXNzaW5nIHRoZSBQaGkgZHVyaW5nIGNvbnN0cnVjdGlvbiBpcyBv
cHRpb25hbC4gQSB2YWxpZCBwYXR0ZXJuIGlzIHRvIGZpcnN0IGNyZWF0ZQogICAgIC8vIHRoZSBV
cHNpbG9ucyB3aXRob3V0IHRoZSBQaGksIHRoZW4gY3JlYXRlIHRoZSBQaGksIHRoZW4gZ28gYmFj
ayBhbmQgdGVsbCB0aGUgVXBzaWxvbnMgYWJvdXQKICAgICAvLyB0aGUgUGhpLiBUaGlzIGFsbG93
cyB5b3UgdG8gZW1pdCBjb2RlIGluIGl0cyBuYXR1cmFsIG9yZGVyLgotICAgIFVwc2lsb25WYWx1
ZSh1bnNpZ25lZCBpbmRleCwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIHZhbHVlLCBWYWx1ZSogcGhp
ID0gbnVsbHB0cikKLSAgICAgICAgOiBWYWx1ZShpbmRleCwgQ2hlY2tlZE9wY29kZSwgVXBzaWxv
biwgVm9pZCwgb3JpZ2luLCB2YWx1ZSkKKyAgICBVcHNpbG9uVmFsdWUoT3JpZ2luIG9yaWdpbiwg
VmFsdWUqIHZhbHVlLCBWYWx1ZSogcGhpID0gbnVsbHB0cikKKyAgICAgICAgOiBWYWx1ZShDaGVj
a2VkT3Bjb2RlLCBVcHNpbG9uLCBWb2lkLCBvcmlnaW4sIHZhbHVlKQogICAgICAgICAsIG1fcGhp
KHBoaSkKICAgICB7CiAgICAgICAgIGlmIChwaGkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNWYWxpZGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzVmFsaWRhdGUuY3BwCShyZXZpc2lvbiAxOTU5MDEpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNWYWxpZGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1Myw2ICsxNTMsMTQg
QEAgcHVibGljOgogICAgICAgICAgICAgICAgIFZBTElEQVRFKCF2YWx1ZS0+bnVtQ2hpbGRyZW4o
KSwgKCJBdCAiLCAqdmFsdWUpKTsKICAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+dHlw
ZSgpID09IEZsb2F0LCAoIkF0ICIsICp2YWx1ZSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgY2FzZSBTZXQ6CisgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPm51
bUNoaWxkcmVuKCkgPT0gMSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJ
REFURSh2YWx1ZS0+Y2hpbGQoMCktPnR5cGUoKSA9PSB2YWx1ZS0+YXM8VmFyaWFibGVWYWx1ZT4o
KS0+dmFyaWFibGUoKS0+dHlwZSgpLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgY2FzZSBHZXQ6CisgICAgICAgICAgICAgICAgVkFMSURBVEUo
IXZhbHVlLT5udW1DaGlsZHJlbigpLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAgICAgICAgICAg
IFZBTElEQVRFKHZhbHVlLT50eXBlKCkgPT0gdmFsdWUtPmFzPFZhcmlhYmxlVmFsdWU+KCktPnZh
cmlhYmxlKCktPnR5cGUoKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIGNhc2UgU2xvdEJhc2U6CiAgICAgICAgICAgICBjYXNlIEZyYW1lUG9p
bnRlcjoKICAgICAgICAgICAgICAgICBWQUxJREFURSghdmFsdWUtPm51bUNoaWxkcmVuKCksICgi
QXQgIiwgKnZhbHVlKSk7CkBAIC0zNzUsNiArMzgzLDkgQEAgcHVibGljOgogCiAgICAgICAgICAg
ICBWQUxJREFURSghKHZhbHVlLT5lZmZlY3RzKCkud3JpdGVzICYmIHZhbHVlLT5rZXkoKSksICgi
QXQgIiwgKnZhbHVlKSk7CiAgICAgICAgIH0KKworICAgICAgICBmb3IgKFZhcmlhYmxlKiB2YXJp
YWJsZSA6IG1fcHJvYy52YXJpYWJsZXMoKSkKKyAgICAgICAgICAgIFZBTElEQVRFKHZhcmlhYmxl
LT50eXBlKCkgIT0gVm9pZCwgKCJBdCAiLCAqdmFyaWFibGUpKTsKICAgICB9CiAKIHByaXZhdGU6
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuY3BwCShyZXZpc2lvbiAxOTU5MDEp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTQ4NCwxMCArNDg0LDEyIEBAIEVmZmVjdHMgVmFsdWU6OmVmZmVjdHMoKSBjb25zdAogICAg
ICAgICByZXN1bHQucmVhZHMgPSBIZWFwUmFuZ2U6OnRvcCgpOwogICAgICAgICBicmVhazsKICAg
ICBjYXNlIFVwc2lsb246Ci0gICAgICAgIHJlc3VsdC53cml0ZXNTU0FTdGF0ZSA9IHRydWU7Cisg
ICAgY2FzZSBTZXQ6CisgICAgICAgIHJlc3VsdC53cml0ZXNMb2NhbFN0YXRlID0gdHJ1ZTsKICAg
ICAgICAgYnJlYWs7CiAgICAgY2FzZSBQaGk6Ci0gICAgICAgIHJlc3VsdC5yZWFkc1NTQVN0YXRl
ID0gdHJ1ZTsKKyAgICBjYXNlIFNldDoKKyAgICAgICAgcmVzdWx0LnJlYWRzTG9jYWxTdGF0ZSA9
IHRydWU7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgSnVtcDoKICAgICBjYXNlIEJyYW5jaDoK
QEAgLTU5OCw2ICs2MDAsNyBAQCB2b2lkIFZhbHVlOjpjaGVja09wY29kZShPcGNvZGUgb3Bjb2Rl
KQogICAgIEFTU0VSVCghUGF0Y2hwb2ludFZhbHVlOjphY2NlcHRzKG9wY29kZSkpOwogICAgIEFT
U0VSVCghU2xvdEJhc2VWYWx1ZTo6YWNjZXB0cyhvcGNvZGUpKTsKICAgICBBU1NFUlQoIVVwc2ls
b25WYWx1ZTo6YWNjZXB0cyhvcGNvZGUpKTsKKyAgICBBU1NFUlQoIVZhcmlhYmxlVmFsdWU6OmFj
Y2VwdHMob3Bjb2RlKSk7CiB9CiAjZW5kaWYgLy8gIUFTU0VSVF9ESVNBQkxFRAogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmgJKHJldmlzaW9uIDE5NTkwMSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI0MywyNyArMjQz
LDI0IEBAIHByb3RlY3RlZDoKICAgICAvLyBJbnN0YW50aWF0ZSB2YWx1ZXMgdmlhIFByb2NlZHVy
ZS4KICAgICAvLyBUaGlzIGZvcm0gcmVxdWlyZXMgc3BlY2lmeWluZyB0aGUgdHlwZSBleHBsaWNp
dGx5OgogICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KLSAgICBleHBsaWNpdCBW
YWx1ZSh1bnNpZ25lZCBpbmRleCwgQ2hlY2tlZE9wY29kZVRhZywgT3Bjb2RlIG9wY29kZSwgVHlw
ZSB0eXBlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogZmlyc3RDaGlsZCwgQXJndW1lbnRzLi4uIGFy
Z3VtZW50cykKLSAgICAgICAgOiBtX2luZGV4KGluZGV4KQotICAgICAgICAsIG1fb3Bjb2RlKG9w
Y29kZSkKKyAgICBleHBsaWNpdCBWYWx1ZShDaGVja2VkT3Bjb2RlVGFnLCBPcGNvZGUgb3Bjb2Rl
LCBUeXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBmaXJzdENoaWxkLCBBcmd1bWVudHMu
Li4gYXJndW1lbnRzKQorICAgICAgICA6IG1fb3Bjb2RlKG9wY29kZSkKICAgICAgICAgLCBtX3R5
cGUodHlwZSkKICAgICAgICAgLCBtX29yaWdpbihvcmlnaW4pCiAgICAgICAgICwgbV9jaGlsZHJl
bnsgZmlyc3RDaGlsZCwgYXJndW1lbnRzLi4uIH0KICAgICB7CiAgICAgfQogICAgIC8vIFRoaXMg
Zm9ybSBpcyBmb3Igc3BlY2lmeWluZyB0aGUgdHlwZSBleHBsaWNpdGx5IHdoZW4gdGhlIG9wY29k
ZSBoYXMgbm8gY2hpbGRyZW46Ci0gICAgZXhwbGljaXQgVmFsdWUodW5zaWduZWQgaW5kZXgsIENo
ZWNrZWRPcGNvZGVUYWcsIE9wY29kZSBvcGNvZGUsIFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdpbikK
LSAgICAgICAgOiBtX2luZGV4KGluZGV4KQotICAgICAgICAsIG1fb3Bjb2RlKG9wY29kZSkKKyAg
ICBleHBsaWNpdCBWYWx1ZShDaGVja2VkT3Bjb2RlVGFnLCBPcGNvZGUgb3Bjb2RlLCBUeXBlIHR5
cGUsIE9yaWdpbiBvcmlnaW4pCisgICAgICAgIDogbV9vcGNvZGUob3Bjb2RlKQogICAgICAgICAs
IG1fdHlwZSh0eXBlKQogICAgICAgICAsIG1fb3JpZ2luKG9yaWdpbikKICAgICB7CiAgICAgfQog
ICAgIC8vIFRoaXMgZm9ybSBpcyBmb3IgdGhvc2Ugb3Bjb2RlcyB0aGF0IGNhbiBpbmZlciB0aGVp
ciB0eXBlIGZyb20gdGhlIG9wY29kZSBhbmQgZmlyc3QgY2hpbGQ6CiAgICAgdGVtcGxhdGU8dHlw
ZW5hbWUuLi4gQXJndW1lbnRzPgotICAgIGV4cGxpY2l0IFZhbHVlKHVuc2lnbmVkIGluZGV4LCBD
aGVja2VkT3Bjb2RlVGFnLCBPcGNvZGUgb3Bjb2RlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogZmly
c3RDaGlsZCkKLSAgICAgICAgOiBtX2luZGV4KGluZGV4KQotICAgICAgICAsIG1fb3Bjb2RlKG9w
Y29kZSkKKyAgICBleHBsaWNpdCBWYWx1ZShDaGVja2VkT3Bjb2RlVGFnLCBPcGNvZGUgb3Bjb2Rl
LCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogZmlyc3RDaGlsZCkKKyAgICAgICAgOiBtX29wY29kZShv
cGNvZGUpCiAgICAgICAgICwgbV90eXBlKHR5cGVGb3Iob3Bjb2RlLCBmaXJzdENoaWxkKSkKICAg
ICAgICAgLCBtX29yaWdpbihvcmlnaW4pCiAgICAgICAgICwgbV9jaGlsZHJlbnsgZmlyc3RDaGls
ZCB9CkBAIC0yNzEsOSArMjY4LDggQEAgcHJvdGVjdGVkOgogICAgIH0KICAgICAvLyBUaGlzIGZv
cm0gaXMgZm9yIHRob3NlIG9wY29kZXMgdGhhdCBjYW4gaW5mZXIgdGhlaXIgdHlwZSBmcm9tIHRo
ZSBvcGNvZGUgYW5kIGZpcnN0IGFuZCBzZWNvbmQgY2hpbGQ6CiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUuLi4gQXJndW1lbnRzPgotICAgIGV4cGxpY2l0IFZhbHVlKHVuc2lnbmVkIGluZGV4LCBDaGVj
a2VkT3Bjb2RlVGFnLCBPcGNvZGUgb3Bjb2RlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogZmlyc3RD
aGlsZCwgVmFsdWUqIHNlY29uZENoaWxkLCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQotICAgICAg
ICA6IG1faW5kZXgoaW5kZXgpCi0gICAgICAgICwgbV9vcGNvZGUob3Bjb2RlKQorICAgIGV4cGxp
Y2l0IFZhbHVlKENoZWNrZWRPcGNvZGVUYWcsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4s
IFZhbHVlKiBmaXJzdENoaWxkLCBWYWx1ZSogc2Vjb25kQ2hpbGQsIEFyZ3VtZW50cy4uLiBhcmd1
bWVudHMpCisgICAgICAgIDogbV9vcGNvZGUob3Bjb2RlKQogICAgICAgICAsIG1fdHlwZSh0eXBl
Rm9yKG9wY29kZSwgZmlyc3RDaGlsZCwgc2Vjb25kQ2hpbGQpKQogICAgICAgICAsIG1fb3JpZ2lu
KG9yaWdpbikKICAgICAgICAgLCBtX2NoaWxkcmVueyBmaXJzdENoaWxkLCBzZWNvbmRDaGlsZCwg
YXJndW1lbnRzLi4uIH0KQEAgLTI4MSwyNSArMjc3LDIyIEBAIHByb3RlY3RlZDoKICAgICB9CiAg
ICAgLy8gVGhpcyBmb3JtIGlzIGZvciB0aG9zZSBvcGNvZGVzIHRoYXQgY2FuIGluZmVyIHRoZWly
IHR5cGUgZnJvbSB0aGUgb3Bjb2RlIGFsb25lLCBhbmQgdGhhdCBkb24ndAogICAgIC8vIHRha2Ug
YW55IGFyZ3VtZW50czoKLSAgICBleHBsaWNpdCBWYWx1ZSh1bnNpZ25lZCBpbmRleCwgQ2hlY2tl
ZE9wY29kZVRhZywgT3Bjb2RlIG9wY29kZSwgT3JpZ2luIG9yaWdpbikKLSAgICAgICAgOiBtX2lu
ZGV4KGluZGV4KQotICAgICAgICAsIG1fb3Bjb2RlKG9wY29kZSkKKyAgICBleHBsaWNpdCBWYWx1
ZShDaGVja2VkT3Bjb2RlVGFnLCBPcGNvZGUgb3Bjb2RlLCBPcmlnaW4gb3JpZ2luKQorICAgICAg
ICA6IG1fb3Bjb2RlKG9wY29kZSkKICAgICAgICAgLCBtX3R5cGUodHlwZUZvcihvcGNvZGUsIG51
bGxwdHIpKQogICAgICAgICAsIG1fb3JpZ2luKG9yaWdpbikKICAgICB7CiAgICAgfQogICAgIC8v
IFVzZSB0aGlzIGZvcm0gZm9yIHZhcmFyZ3MuCi0gICAgZXhwbGljaXQgVmFsdWUodW5zaWduZWQg
aW5kZXgsIENoZWNrZWRPcGNvZGVUYWcsIE9wY29kZSBvcGNvZGUsIFR5cGUgdHlwZSwgT3JpZ2lu
IG9yaWdpbiwgY29uc3QgQWRqYWNlbmN5TGlzdCYgY2hpbGRyZW4pCi0gICAgICAgIDogbV9pbmRl
eChpbmRleCkKLSAgICAgICAgLCBtX29wY29kZShvcGNvZGUpCisgICAgZXhwbGljaXQgVmFsdWUo
Q2hlY2tlZE9wY29kZVRhZywgT3Bjb2RlIG9wY29kZSwgVHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2lu
LCBjb25zdCBBZGphY2VuY3lMaXN0JiBjaGlsZHJlbikKKyAgICAgICAgOiBtX29wY29kZShvcGNv
ZGUpCiAgICAgICAgICwgbV90eXBlKHR5cGUpCiAgICAgICAgICwgbV9vcmlnaW4ob3JpZ2luKQog
ICAgICAgICAsIG1fY2hpbGRyZW4oY2hpbGRyZW4pCiAgICAgewogICAgIH0KLSAgICBleHBsaWNp
dCBWYWx1ZSh1bnNpZ25lZCBpbmRleCwgQ2hlY2tlZE9wY29kZVRhZywgT3Bjb2RlIG9wY29kZSwg
VHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luLCBBZGphY2VuY3lMaXN0JiYgY2hpbGRyZW4pCi0gICAg
ICAgIDogbV9pbmRleChpbmRleCkKLSAgICAgICAgLCBtX29wY29kZShvcGNvZGUpCisgICAgZXhw
bGljaXQgVmFsdWUoQ2hlY2tlZE9wY29kZVRhZywgT3Bjb2RlIG9wY29kZSwgVHlwZSB0eXBlLCBP
cmlnaW4gb3JpZ2luLCBBZGphY2VuY3lMaXN0JiYgY2hpbGRyZW4pCisgICAgICAgIDogbV9vcGNv
ZGUob3Bjb2RlKQogICAgICAgICAsIG1fdHlwZSh0eXBlKQogICAgICAgICAsIG1fb3JpZ2luKG9y
aWdpbikKICAgICAgICAgLCBtX2NoaWxkcmVuKFdURk1vdmUoY2hpbGRyZW4pKQpAQCAtMzA5LDgg
KzMwMiw4IEBAIHByb3RlY3RlZDoKICAgICAvLyBUaGlzIGlzIHRoZSBjb25zdHJ1Y3RvciB5b3Ug
ZW5kIHVwIGFjdHVhbGx5IGNhbGxpbmcsIGlmIHlvdSdyZSBpbnN0YW50aWF0aW5nIFZhbHVlCiAg
ICAgLy8gZGlyZWN0bHkuCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgotICAg
IGV4cGxpY2l0IFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBBcmd1bWVudHMm
Ji4uLiBhcmd1bWVudHMpCi0gICAgICAgIDogVmFsdWUoaW5kZXgsIENoZWNrZWRPcGNvZGUsIG9w
Y29kZSwgc3RkOjpmb3J3YXJkPEFyZ3VtZW50cz4oYXJndW1lbnRzKS4uLikKKyAgICBleHBsaWNp
dCBWYWx1ZShPcGNvZGUgb3Bjb2RlLCBBcmd1bWVudHMmJi4uLiBhcmd1bWVudHMpCisgICAgICAg
IDogVmFsdWUoQ2hlY2tlZE9wY29kZSwgb3Bjb2RlLCBzdGQ6OmZvcndhcmQ8QXJndW1lbnRzPihh
cmd1bWVudHMpLi4uKQogICAgIHsKICAgICAgICAgY2hlY2tPcGNvZGUob3Bjb2RlKTsKICAgICB9
CkBAIC0zMjEsNyArMzE0LDcgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgVHlwZSB0eXBlRm9yKE9w
Y29kZSwgVmFsdWUqIGZpcnN0Q2hpbGQsIFZhbHVlKiBzZWNvbmRDaGlsZCA9IG51bGxwdHIpOwog
CiAgICAgLy8gVGhpcyBncm91cCBvZiBmaWVsZHMgaXMgYXJyYW5nZWQgdG8gZml0IGluIDY0IGJp
dHMuCi0gICAgdW5zaWduZWQgbV9pbmRleDsKKyAgICB1bnNpZ25lZCBtX2luZGV4IHsgVUlOVF9N
QVggfTsKICAgICBPcGNvZGUgbV9vcGNvZGU7CiAgICAgVHlwZSBtX3R5cGU7CiAgICAgCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYXJpYWJsZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFyaWFibGUuY3BwCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFyaWFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsNTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBi
aW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIg
aW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlk
ZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzVmFyaWFibGUuaCIKKworI2lm
IEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitWYXJp
YWJsZTo6flZhcmlhYmxlKCkKK3sKK30KKwordm9pZCBWYXJpYWJsZTo6ZHVtcChQcmludFN0cmVh
bSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgidmFyIiwgbV9pbmRleCk7Cit9CisKK3Zv
aWQgVmFyaWFibGU6OmRlZXBEdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0
LnByaW50KG1fdHlwZSwgIiB2YXIiLCBtX2luZGV4KTsKK30KKworVmFyaWFibGU6OlZhcmlhYmxl
KFR5cGUgdHlwZSkKKyAgICA6IG1fdHlwZSh0eXBlKQoreworICAgIEFTU0VSVCh0eXBlICE9IFZv
aWQpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShC
M19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhcmlhYmxlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFyaWFibGUuaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhcmlhYmxlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw5MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaWZuZGVmIEIzVmFyaWFibGVfaAorI2RlZmluZSBCM1ZhcmlhYmxlX2gK
KworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM1R5cGUuaCIKKyNpbmNsdWRlIDx3
dGYvRmFzdE1hbGxvYy5oPgorI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgorI2luY2x1ZGUg
PHd0Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwor
Y2xhc3MgUHJvY2VkdXJlOworCitjbGFzcyBWYXJpYWJsZSB7CisgICAgV1RGX01BS0VfTk9OQ09Q
WUFCTEUoVmFyaWFibGUpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworCitwdWJsaWM6
CisgICAgflZhcmlhYmxlKCk7CisKKyAgICBUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5
cGU7IH0KKyAgICB1bnNpZ25lZCBpbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXg7IH0KKwor
ICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworICAgIHZvaWQgZGVlcER1bXAoUHJp
bnRTdHJlYW0mKSBjb25zdDsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJl
OworCisgICAgVmFyaWFibGUoVHlwZSk7CisgICAgCisgICAgdW5zaWduZWQgbV9pbmRleDsKKyAg
ICBUeXBlIG1fdHlwZTsKK307CisKK2NsYXNzIERlZXBWYXJpYWJsZUR1bXAgeworcHVibGljOgor
ICAgIERlZXBWYXJpYWJsZUR1bXAoY29uc3QgVmFyaWFibGUqIHZhcmlhYmxlKQorICAgICAgICA6
IG1fdmFyaWFibGUodmFyaWFibGUpCisgICAgeworICAgIH0KKworICAgIHZvaWQgZHVtcChQcmlu
dFN0cmVhbSYgb3V0KSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKG1fdmFyaWFibGUpCisgICAg
ICAgICAgICBtX3ZhcmlhYmxlLT5kZWVwRHVtcChvdXQpOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICBvdXQucHJpbnQoIjxudWxsPiIpOworICAgIH0KKworcHJpdmF0ZToKKyAgICBjb25zdCBW
YXJpYWJsZSogbV92YXJpYWJsZTsKK307CisKK2lubGluZSBEZWVwVmFyaWFibGVEdW1wIGRlZXBE
dW1wKGNvbnN0IFZhcmlhYmxlKiB2YXJpYWJsZSkKK3sKKyAgICByZXR1cm4gRGVlcFZhcmlibGVE
dW1wKHZhcmlhYmxlKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAv
LyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNWYXJpYWJsZV9oCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhcmlhYmxlVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhcmlhYmxlVmFsdWUuY3BwCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFyaWFibGVWYWx1ZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJ
bmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBp
biBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRp
b24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMK
KyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCBy
ZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRp
b25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFs
cyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJ
UyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9S
IElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQor
ICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hB
TEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNWYXJpYWJsZVZh
bHVlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNWYXJpYWJsZS5oIgor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworVmFyaWFibGVWYWx1ZTo6flZhcmlh
YmxlVmFsdWUoKQoreworfQorCit2b2lkIFZhcmlhYmxlVmFsdWU6OmR1bXBNZXRhKENvbW1hUHJp
bnRlciYgY29tbWEsIFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KGNv
bW1hLCBwb2ludGVyRHVtcChtX3ZhcmlhYmxlKSk7Cit9CisKK1ZhbHVlKiBWYXJpYWJsZVZhbHVl
OjpjbG9uZUltcGwoKSBjb25zdAoreworICAgIHJldHVybiBuZXcgVmFyaWFibGVWYWx1ZSgqdGhp
cyk7Cit9CisKK1ZhcmlhYmxlVmFsdWU6OlZhcmlhYmxlVmFsdWUoT3Bjb2RlIG9wY29kZSwgT3Jp
Z2luIG9yaWdpbiwgVmFyaWFibGUqIHZhcmlhYmxlLCBWYWx1ZSogdmFsdWUpCisgICAgOiBWYWx1
ZShDaGVja2VkT3Bjb2RlLCBvcGNvZGUsIFZvaWQsIG9yaWdpbiwgdmFsdWUpCisgICAgLCBtX3Zh
cmlhYmxlKHZhcmlhYmxlKQoreworICAgIEFTU0VSVChvcGNvZGUgPT0gU2V0KTsKK30KKworVmFy
aWFibGVWYWx1ZTo6VmFyaWFibGVWYWx1ZShPcGNvZGUgb3Bjb2RlLCBPcmlnaW4gb3JpZ2luLCBW
YXJpYWJsZSogdmFyaWFibGUpCisgICAgOiBWYWx1ZShDaGVja2VkT3Bjb2RlLCBvcGNvZGUsIHZh
cmlhYmxlLT50eXBlKCksIG9yaWdpbikKKyAgICAsIG1fdmFyaWFibGUodmFyaWFibGUpCit7Cisg
ICAgQVNTRVJUKG9wY29kZSA9PSBHZXQpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMK
KworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1ZhcmlhYmxlVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNWYXJpYWJsZVZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNWYXJpYWJsZVZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgQjNWYXJpYWJsZVZhbHVlX2gKKyNkZWZpbmUgQjNWYXJpYWJsZVZhbHVlX2gKKworI2lm
IEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBWYXJpYWJsZTsKKworY2xhc3MgSlNfRVhQT1JUX1BS
SVZBVEUgVmFyaWFibGVWYWx1ZSA6IHB1YmxpYyBWYWx1ZSB7CitwdWJsaWM6CisgICAgc3RhdGlj
IGJvb2wgYWNjZXB0cyhPcGNvZGUgb3Bjb2RlKSB7IHJldHVybiBvcGNvZGUgPT0gR2V0IHx8IG9w
Y29kZSA9PSBTZXQ7IH0KKworICAgIH5WYXJpYWJsZVZhbHVlKCk7CisKKyAgICBWYXJpYWJsZSog
dmFyaWFibGUoKSBjb25zdCB7IHJldHVybiBtX3ZhcmlhYmxlOyB9CisKK3Byb3RlY3RlZDoKKyAg
ICB2b2lkIGR1bXBNZXRhKENvbW1hUHJpbnRlciYsIFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJp
ZGU7CisKKyAgICBWYWx1ZSogY2xvbmVJbXBsKCkgY29uc3Qgb3ZlcnJpZGU7CisKK3ByaXZhdGU6
CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKworICAgIC8vIFVzZSB0aGlzIGZvciBTZXQu
CisgICAgVmFyaWFibGVWYWx1ZShPcGNvZGUsIE9yaWdpbiwgVmFyaWFibGUqLCBWYWx1ZSopOwor
CisgICAgLy8gVXNlIHRoaXMgZm9yIEdldC4KKyAgICBWYXJpYWJsZVZhbHVlKE9wY29kZSwgT3Jp
Z2luLCBWYXJpYWJsZSogdmFyaWFibGUpOworCisgICAgVmFyaWFibGUqIG1fdmFyaWFibGU7Cit9
OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQp
CisKKyNlbmRpZiAvLyBCM1ZhcmlhYmxlVmFsdWVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpckFsbG9jYXRlU3RhY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVTdGFjay5jcHAJKHJldmlzaW9uIDE5NTkw
MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVTdGFjay5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTk1LDMwICs5NSwxMyBAQCB2b2lkIGFsbG9jYXRlU3RhY2soQ29k
ZSYgY29kZSkKIHsKICAgICBQaGFzZVNjb3BlIHBoYXNlU2NvcGUoY29kZSwgImFsbG9jYXRlU3Rh
Y2siKTsKIAotICAgIC8vIFBlcmZvcm0gYW4gZXNjYXBlIGFuYWx5c2lzIG92ZXIgc3RhY2sgc2xv
dHMuIEFuIGVzY2FwaW5nIHN0YWNrIHNsb3QgaXMgb25lIHRoYXQgaXMgbG9ja2VkIG9yCi0gICAg
Ly8gaXMgZXhwbGljaXRseSBlc2NhcGVkIGluIHRoZSBjb2RlLgotICAgIEluZGV4U2V0PFN0YWNr
U2xvdD4gZXNjYXBpbmdTdGFja1Nsb3RzOwotICAgIGZvciAoU3RhY2tTbG90KiBzbG90IDogY29k
ZS5zdGFja1Nsb3RzKCkpIHsKLSAgICAgICAgaWYgKHNsb3QtPmlzTG9ja2VkKCkpCi0gICAgICAg
ICAgICBlc2NhcGluZ1N0YWNrU2xvdHMuYWRkKHNsb3QpOwotICAgIH0KLSAgICBmb3IgKEJhc2lj
QmxvY2sqIGJsb2NrIDogY29kZSkgewotICAgICAgICBmb3IgKEluc3QmIGluc3QgOiAqYmxvY2sp
IHsKLSAgICAgICAgICAgIGluc3QuZm9yRWFjaEFyZygKLSAgICAgICAgICAgICAgICBbJl0gKEFy
ZyYgYXJnLCBBcmc6OlJvbGUgcm9sZSwgQXJnOjpUeXBlLCBBcmc6OldpZHRoKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIGlmIChyb2xlID09IEFyZzo6VXNlQWRkciAmJiBhcmcuaXNTdGFjaygpKQot
ICAgICAgICAgICAgICAgICAgICAgICAgZXNjYXBpbmdTdGFja1Nsb3RzLmFkZChhcmcuc3RhY2tT
bG90KCkpOwotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICB9Ci0gICAgfQotCiAgICAgLy8g
QWxsb2NhdGUgYWxsIG9mIHRoZSBlc2NhcGVkIHNsb3RzIGluIG9yZGVyLiBUaGlzIGlzIGtpbmQg
b2YgYSBjcmF6eSBhbGdvcml0aG0gdG8gYWxsb3cgZm9yCiAgICAgLy8gdGhlIHBvc3NpYmlsaXR5
IG9mIHN0YWNrIHNsb3RzIGJlaW5nIGFzc2lnbmVkIGZyYW1lIG9mZnNldHMgYmVmb3JlIHdlIGV2
ZW4gZ2V0IGhlcmUuCiAgICAgQVNTRVJUKCFjb2RlLmZyYW1lU2l6ZSgpKTsKICAgICBWZWN0b3I8
U3RhY2tTbG90Kj4gYXNzaWduZWRFc2NhcGVkU3RhY2tTbG90czsKICAgICBWZWN0b3I8U3RhY2tT
bG90Kj4gZXNjYXBlZFN0YWNrU2xvdHNXb3JrbGlzdDsKICAgICBmb3IgKFN0YWNrU2xvdCogc2xv
dCA6IGNvZGUuc3RhY2tTbG90cygpKSB7Ci0gICAgICAgIGlmIChlc2NhcGluZ1N0YWNrU2xvdHMu
Y29udGFpbnMoc2xvdCkpIHsKKyAgICAgICAgaWYgKHNsb3QtPmlzTG9ja2VkKCkpIHsKICAgICAg
ICAgICAgIGlmIChzbG90LT5vZmZzZXRGcm9tRlAoKSkKICAgICAgICAgICAgICAgICBhc3NpZ25l
ZEVzY2FwZWRTdGFja1Nsb3RzLmFwcGVuZChzbG90KTsKICAgICAgICAgICAgIGVsc2UKQEAgLTEz
Niw3ICsxMTksNyBAQCB2b2lkIGFsbG9jYXRlU3RhY2soQ29kZSYgY29kZSkKICAgICAgICAgYXNz
aWduZWRFc2NhcGVkU3RhY2tTbG90cy5hcHBlbmQoc2xvdCk7CiAgICAgfQogCi0gICAgLy8gTm93
IHdlIGhhbmRsZSB0aGUgYW5vbnltb3VzIHNsb3RzLgorICAgIC8vIE5vdyB3ZSBoYW5kbGUgdGhl
IHNwaWxsIHNsb3RzLgogICAgIFN0YWNrU2xvdExpdmVuZXNzIGxpdmVuZXNzKGNvZGUpOwogICAg
IEluZGV4TWFwPFN0YWNrU2xvdCwgSGFzaFNldDxTdGFja1Nsb3QqPj4gaW50ZXJmZXJlbmNlKGNv
ZGUuc3RhY2tTbG90cygpLnNpemUoKSk7CiAgICAgVmVjdG9yPFN0YWNrU2xvdCo+IHNsb3RzOwpA
QCAtMTU0LDcgKzEzNyw3IEBAIHZvaWQgYWxsb2NhdGVTdGFjayhDb2RlJiBjb2RlKQogICAgICAg
ICAgICAgICAgICAgICBpZiAoIWFyZy5pc1N0YWNrKCkpCiAgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgIFN0YWNrU2xvdCogc2xvdCA9IGFyZy5zdGFj
a1Nsb3QoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHNsb3QtPmtpbmQoKSAhPSBTdGFja1Ns
b3RLaW5kOjpBbm9ueW1vdXMpCisgICAgICAgICAgICAgICAgICAgIGlmIChzbG90LT5raW5kKCkg
IT0gU3RhY2tTbG90S2luZDo6U3BpbGwpCiAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47
CiAKICAgICAgICAgICAgICAgICAgICAgZm9yIChTdGFja1Nsb3QqIG90aGVyU2xvdCA6IGxvY2Fs
Q2FsYy5saXZlKCkpIHsKQEAgLTE4Nyw3ICsxNzAsNyBAQCB2b2lkIGFsbG9jYXRlU3RhY2soQ29k
ZSYgY29kZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICBTdGFja1Nsb3QqIHNsb3Qg
PSBhcmcuc3RhY2tTbG90KCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2xvdC0+a2lu
ZCgpICE9IFN0YWNrU2xvdEtpbmQ6OkFub255bW91cykgeworICAgICAgICAgICAgICAgICAgICAg
ICAgaWYgKHNsb3QtPmtpbmQoKSAhPSBTdGFja1Nsb3RLaW5kOjpTcGlsbCkgewogICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIG9rID0gZmFsc2U7CiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgICAgICAgfQpAQCAtMjg3LDcgKzI3MCw3IEBA
IHZvaWQgYWxsb2NhdGVTdGFjayhDb2RlJiBjb2RlKQogICAgICAgICAgICAgICAgICAgICBjYXNl
IEFyZzo6U3RhY2s6IHsKICAgICAgICAgICAgICAgICAgICAgICAgIFN0YWNrU2xvdCogc2xvdCA9
IGFyZy5zdGFja1Nsb3QoKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChBcmc6OmlzWkRl
Zihyb2xlKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHNsb3QtPmtpbmQoKSA9PSBT
dGFja1Nsb3RLaW5kOjpBbm9ueW1vdXMKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBz
bG90LT5raW5kKCkgPT0gU3RhY2tTbG90S2luZDo6U3BpbGwKICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAmJiBzbG90LT5ieXRlU2l6ZSgpID4gQXJnOjpieXRlcyh3aWR0aCkpIHsKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAvLyBDdXJyZW50bHkgd2Ugb25seSBoYW5kbGUgdGhpcyBz
aW1wbGUgY2FzZSBiZWNhdXNlIGl0J3MgdGhlIG9ubHkgb25lCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gdGhhdCBhcmlzZXM6IFpEZWYncyBhcmUgb25seSAzMi1iaXQgcmlnaHQgbm93
LiBTbywgd2hlbiB3ZSBoaXQgdGhlc2UKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyQ29kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJDb2RlLmNwcAkocmV2aXNpb24gMTk1OTAxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJDb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjIsNyArNjIsNyBAQCBTdGFj
a1Nsb3QqIENvZGU6OmFkZFN0YWNrU2xvdCh1bnNpZ25lZCBiCiAKIFN0YWNrU2xvdCogQ29kZTo6
YWRkU3RhY2tTbG90KEIzOjpTdGFja1Nsb3QqIGIzU2xvdCkKIHsKLSAgICByZXR1cm4gYWRkU3Rh
Y2tTbG90KGIzU2xvdC0+Ynl0ZVNpemUoKSwgYjNTbG90LT5raW5kKCksIGIzU2xvdCk7CisgICAg
cmV0dXJuIGFkZFN0YWNrU2xvdChiM1Nsb3QtPmJ5dGVTaXplKCksIFN0YWNrU2xvdEtpbmQ6Okxv
Y2tlZCwgYjNTbG90KTsKIH0KIAogU3BlY2lhbCogQ29kZTo6YWRkU3BlY2lhbChzdGQ6OnVuaXF1
ZV9wdHI8U3BlY2lhbD4gc3BlY2lhbCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlySXRlcmF0ZWRSZWdpc3RlckNvYWxlc2NpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySXRlcmF0ZWRSZWdpc3RlckNvYWxlc2NpbmcuY3Bw
CShyZXZpc2lvbiAxOTU5MDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckl0
ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIxNiw3ICsx
MjE2LDcgQEAgcHJpdmF0ZToKIAogICAgICAgICAgICAgLy8gQWxsb2NhdGUgc3RhY2sgc2xvdCBm
b3IgZWFjaCBzcGlsbGVkIHZhbHVlLgogICAgICAgICAgICAgU3RhY2tTbG90KiBzdGFja1Nsb3Qg
PSBtX2NvZGUuYWRkU3RhY2tTbG90KAotICAgICAgICAgICAgICAgIG1fdG1wV2lkdGgud2lkdGgo
dG1wKSA8PSBBcmc6OldpZHRoMzIgPyA0IDogOCwgU3RhY2tTbG90S2luZDo6QW5vbnltb3VzKTsK
KyAgICAgICAgICAgICAgICBtX3RtcFdpZHRoLndpZHRoKHRtcCkgPD0gQXJnOjpXaWR0aDMyID8g
NCA6IDgsIFN0YWNrU2xvdEtpbmQ6OlNwaWxsKTsKICAgICAgICAgICAgIGJvb2wgaXNOZXdUbXAg
PSBzdGFja1Nsb3RzLmFkZCh0bXAsIHN0YWNrU2xvdCkuaXNOZXdFbnRyeTsKICAgICAgICAgICAg
IEFTU0VSVF9VTlVTRUQoaXNOZXdUbXAsIGlzTmV3VG1wKTsKICAgICAgICAgfQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTcGlsbEV2ZXJ5dGhpbmcuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3BpbGxFdmVyeXRoaW5nLmNw
cAkocmV2aXNpb24gMTk1OTAxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJT
cGlsbEV2ZXJ5dGhpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OCw3ICs4OCw3IEBAIHZvaWQg
c3BpbGxFdmVyeXRoaW5nKENvZGUmIGNvZGUpCiAgICAgICAgIEFyZzo6VHlwZSB0eXBlID0gc3Rh
dGljX2Nhc3Q8QXJnOjpUeXBlPih0eXBlSW5kZXgpOwogICAgICAgICBzdGFja1Nsb3RzLnJlc2l6
ZShjb2RlLm51bVRtcHModHlwZSkpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIHRtcEluZGV4ID0g
Y29kZS5udW1UbXBzKHR5cGUpOyB0bXBJbmRleC0tOykKLSAgICAgICAgICAgIHN0YWNrU2xvdHNb
dG1wSW5kZXhdID0gY29kZS5hZGRTdGFja1Nsb3QoOCwgU3RhY2tTbG90S2luZDo6QW5vbnltb3Vz
KTsKKyAgICAgICAgICAgIHN0YWNrU2xvdHNbdG1wSW5kZXhdID0gY29kZS5hZGRTdGFja1Nsb3Qo
OCwgU3RhY2tTbG90S2luZDo6U3BpbGwpOwogICAgIH0KIAogICAgIEluc2VydGlvblNldCBpbnNl
cnRpb25TZXQoY29kZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclN0
YWNrU2xvdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJTdGFja1Nsb3QuY3BwCShyZXZpc2lvbiAxOTU5MDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpclN0YWNrU2xvdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDEx
IEBAIHZvaWQgU3RhY2tTbG90OjpzZXRPZmZzZXRGcm9tRlAoaW50cHRyX3QKIAogdm9pZCBTdGFj
a1Nsb3Q6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKIHsKLSAgICBvdXQucHJpbnQoInN0
YWNrIiwgbV9pbmRleCk7CisgICAgaWYgKGlzU3BpbGwoKSkKKyAgICAgICAgb3V0LnByaW50KCJz
cGlsbCIpOworICAgIGVsc2UKKyAgICAgICAgb3V0LnByaW50KCJzdGFjayIpOworICAgIG91dC5w
cmludChtX2luZGV4KTsKIH0KIAogdm9pZCBTdGFja1Nsb3Q6OmRlZXBEdW1wKFByaW50U3RyZWFt
JiBvdXQpIGNvbnN0CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclN0YWNr
U2xvdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3Rh
Y2tTbG90LmgJKHJldmlzaW9uIDE5NTkwMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyU3RhY2tTbG90LmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDYgKzQ2LDcgQEAgcHVibGlj
OgogICAgIHVuc2lnbmVkIGJ5dGVTaXplKCkgY29uc3QgeyByZXR1cm4gbV9ieXRlU2l6ZTsgfQog
ICAgIFN0YWNrU2xvdEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQogICAgIGJv
b2wgaXNMb2NrZWQoKSBjb25zdCB7IHJldHVybiBtX2tpbmQgPT0gU3RhY2tTbG90S2luZDo6TG9j
a2VkOyB9CisgICAgYm9vbCBpc1NwaWxsKCkgY29uc3QgeyByZXR1cm4gbV9raW5kID09IFN0YWNr
U2xvdEtpbmQ6OlNwaWxsOyB9CiAgICAgdW5zaWduZWQgaW5kZXgoKSBjb25zdCB7IHJldHVybiBt
X2luZGV4OyB9CiAKICAgICB2b2lkIGVuc3VyZVNpemUodW5zaWduZWQgcmVxdWVzdGVkU2l6ZSkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3RhY2tTbG90S2luZC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTdGFja1Nsb3RL
aW5kLmNwcAkocmV2aXNpb24gMTk1OTAxKQkoZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNTdGFja1Nsb3RLaW5kLmNwcDoxOTU5MDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpclN0YWNrU2xvdEtpbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTIgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzU3RhY2tTbG90S2luZC5oIgorCisjaWYgRU5BQkxFKEIz
X0pJVCkKKworI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgV1RGIHsK
KwordXNpbmcgbmFtZXNwYWNlIEpTQzo6QjM7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0
cmVhbSYgb3V0LCBTdGFja1Nsb3RLaW5kIGtpbmQpCit7CisgICAgc3dpdGNoIChraW5kKSB7Cisg
ICAgY2FzZSBTdGFja1Nsb3RLaW5kOjpMb2NrZWQ6CisgICAgICAgIG91dC5wcmludCgiTG9ja2Vk
Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFN0YWNrU2xvdEtpbmQ6OkFub255bW91czoK
KyAgICAgICAgb3V0LnByaW50KCJBbm9ueW1vdXMiKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBX
VEYKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpclN0YWNrU2xvdEtpbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyU3RhY2tTbG90S2luZC5jcHAJKHdvcmtpbmcgY29weSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3RhY2tTbG90S2luZC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI0LDcgKzI0LDcgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiQjNTdGFja1Nsb3RLaW5kLmgiCisjaW5jbHVkZSAiQWlyU3RhY2tTbG90S2luZC5o
IgogCiAjaWYgRU5BQkxFKEIzX0pJVCkKIApAQCAtMzIsNyArMzIsNyBAQAogCiBuYW1lc3BhY2Ug
V1RGIHsKIAotdXNpbmcgbmFtZXNwYWNlIEpTQzo6QjM7Cit1c2luZyBuYW1lc3BhY2UgSlNDOjpC
Mzo6QWlyOwogCiB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgU3RhY2tTbG90
S2luZCBraW5kKQogewpAQCAtNDAsOCArNDAsOCBAQCB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRT
dHJlYW0mIG91dCwgU3RhCiAgICAgY2FzZSBTdGFja1Nsb3RLaW5kOjpMb2NrZWQ6CiAgICAgICAg
IG91dC5wcmludCgiTG9ja2VkIik7CiAgICAgICAgIHJldHVybjsKLSAgICBjYXNlIFN0YWNrU2xv
dEtpbmQ6OkFub255bW91czoKLSAgICAgICAgb3V0LnByaW50KCJBbm9ueW1vdXMiKTsKKyAgICBj
YXNlIFN0YWNrU2xvdEtpbmQ6OlNwaWxsOgorICAgICAgICBvdXQucHJpbnQoIlNwaWxsIik7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3RhY2tTbG90S2luZC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3RhY2tTbG90S2lu
ZC5oCShyZXZpc2lvbiAxOTU5MDEpCShmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0
YWNrU2xvdEtpbmQuaDoxOTU5MDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
clN0YWNrU2xvdEtpbmQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYzIEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1N0
YWNrU2xvdEtpbmRfaAorI2RlZmluZSBCM1N0YWNrU2xvdEtpbmRfaAorCisjaWYgRU5BQkxFKEIz
X0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2VudW0gY2xhc3MgU3Rh
Y2tTbG90S2luZCA6IHVpbnQ4X3QgeworICAgIC8vIEEgbG9ja2VkIHN0YWNrIHNsb3QgbmVlZHMg
dG8gYmUga2VwdCBkaXNqb2ludCBmcm9tIGFsbCBvdGhlcnMgYmVjYXVzZSB3ZSBpbnRlbmQgdG8g
ZXNjYXBlCisgICAgLy8gaXQgZXZlbiBpZiB0aGF0J3Mgbm90IG9idmlvdXMuIFRoaXMgaGFwcGVu
cyB3aGVuIHRoZSBydW50aW1lIHRha2VzIHRoZSBhZGRyZXNzIG9mIGEgc3RhY2sKKyAgICAvLyBz
bG90LgorICAgIExvY2tlZCwKKworICAgIC8vIFRoZXNlIHN0YWNrIHNsb3RzIGJlaGF2ZSBsaWtl
IHZhcmlhYmxlcy4gVW5kZWZpbmVkIGJlaGF2aW9yIGhhcHBlbnMgaWYgeW91IHN0b3JlIGxlc3Mg
dGhhbgorICAgIC8vIHRoZSB3aWR0aCBvZiB0aGUgc2xvdC4KKyAgICBBbm9ueW1vdXMKKworICAg
IC8vIEZJWE1FOiBXZSBzaG91bGQgYWRkIGEgdGhpcmQgbW9kZSwgd2hpY2ggbWVhbnMgdGhhdCB0
aGUgc3RhY2sgc2xvdCB3aWxsIGJlIHJlYWQgYXN5bmNocm9ub3VzbHkKKyAgICAvLyBhcyB3aXRo
IExvY2tlZCwgYnV0IG5ldmVyIHdyaXR0ZW4gdG8gYXN5bmNocm9ub3VzbHkuIFRoZW4sIEFpciBj
b3VsZCBvcHRpbWl6ZSBzcGlsbGluZyBhbmQKKyAgICAvLyBmaWxsaW5nIGJ5IHRyYWNraW5nIHdo
ZXRoZXIgdGhlIHZhbHVlIGhhZCBiZWVuIHN0b3JlZCB0byBhIHJlYWQtb25seSBsb2NrZWQgc2xv
dC4gSWYgaXQgaGFkLAorICAgIC8vIHRoZW4gd2UgY2FuIHJlZmlsbCBmcm9tIHRoYXQgc2xvdC4K
KyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNTg3Cit9
OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworbmFtZXNwYWNlIFdURiB7CisKK2NsYXNz
IFByaW50U3RyZWFtOworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkIz
OjpTdGFja1Nsb3RLaW5kKTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFC
TEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNTdGFja1Nsb3RLaW5kX2gKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTdGFja1Nsb3RLaW5kLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTdGFja1Nsb3RLaW5kLmgJKHdvcmtpbmcg
Y29weSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3RhY2tTbG90S2luZC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yMywyMiArMjMsMjYgQEAKICAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAogICov
CiAKLSNpZm5kZWYgQjNTdGFja1Nsb3RLaW5kX2gKLSNkZWZpbmUgQjNTdGFja1Nsb3RLaW5kX2gK
KyNpZm5kZWYgQWlyU3RhY2tTbG90S2luZF9oCisjZGVmaW5lIEFpclN0YWNrU2xvdEtpbmRfaAog
CiAjaWYgRU5BQkxFKEIzX0pJVCkKIAotbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7Citu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CiAKIGVudW0gY2xh
c3MgU3RhY2tTbG90S2luZCA6IHVpbnQ4X3QgewotICAgIC8vIEEgbG9ja2VkIHN0YWNrIHNsb3Qg
bmVlZHMgdG8gYmUga2VwdCBkaXNqb2ludCBmcm9tIGFsbCBvdGhlcnMgYmVjYXVzZSB3ZSBpbnRl
bmQgdG8gZXNjYXBlCi0gICAgLy8gaXQgZXZlbiBpZiB0aGF0J3Mgbm90IG9idmlvdXMuIFRoaXMg
aGFwcGVucyB3aGVuIHRoZSBydW50aW1lIHRha2VzIHRoZSBhZGRyZXNzIG9mIGEgc3RhY2sKLSAg
ICAvLyBzbG90LgorICAgIC8vIEEgbG9ja2VkIHN0YWNrIHNsb3QgaXMgYW4gYXJlYSBvZiBzdGFj
ayByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudC4gSXQgY2Fubm90IGJlIGtpbGxlZC4gVGhlCisgICAg
Ly8gY2xpZW50IGNhbiBnZXQgaXRzIEZQIG9mZnNldCBhbmQgd3JpdGUgdG8gaXQgZnJvbSBzdGFj
ayB3YWxraW5nIGNvZGUsIHNvIHdlIG11c3QgYXNzdW1lCisgICAgLy8gdGhhdCByZWFkcyBhbmQg
d3JpdGVzIHRvIGEgbG9ja2VkIHN0YWNrIHNsb3QgY2FuIGJlIGNsb2JiZXJlZCB0aGUgc2FtZSB3
YXkgYXMgcmVhZHMgYW5kCisgICAgLy8gd3JpdGVzIHRvIGFueSBtZW1vcnkgbG9jYXRpb24uCiAg
ICAgTG9ja2VkLAogCi0gICAgLy8gVGhlc2Ugc3RhY2sgc2xvdHMgYmVoYXZlIGxpa2UgdmFyaWFi
bGVzLiBVbmRlZmluZWQgYmVoYXZpb3IgaGFwcGVucyBpZiB5b3Ugc3RvcmUgbGVzcyB0aGFuCi0g
ICAgLy8gdGhlIHdpZHRoIG9mIHRoZSBzbG90LgotICAgIEFub255bW91cworICAgIC8vIEEgc3Bp
bGwgc2xvdC4gVGhlc2UgaGF2ZSBmdW5kYW1lbnRhbGx5IGRpZmZlcmVudCBiZWhhdmlvciB0aGFu
IGEgdHlwaWNhbCBtZW1vcnkgbG9jYXRpb24uCisgICAgLy8gVGhleSBhcmUgbG93ZXJlZCB0byBm
cm9tIHRlbXBvcmFyaWVzLiBUaGlzIG1lYW5zIGZvciBleGFtcGxlIHRoYXQgYSAzMi1iaXQgWkRl
ZiBzdG9yZSB0byBhCisgICAgLy8gOCBieXRlIHN0YWNrIHNsb3Qgd2lsbCB6ZXJvIHRoZSB0b3Ag
NCBieXRlcywgZXZlbiB0aG91Z2ggYSAzMi1iaXQgWkRlZiBzdG9yZSB0byBhbnkgb3RoZXIKKyAg
ICAvLyBraW5kIG9mIG1lbW9yeSBsb2NhdGlvbiB3b3VsZCBkbyBubyBzdWNoIHRoaW5nLiBVc2VB
ZGRyIG9uIGEgc3BpbGwgc2xvdCBpcyBub3QgYWxsb3dlZCwgc28KKyAgICAvLyB0aGV5IG5ldmVy
IGVzY2FwZS4KKyAgICBTcGlsbAogCiAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBhZGQgYSB0aGly
ZCBtb2RlLCB3aGljaCBtZWFucyB0aGF0IHRoZSBzdGFjayBzbG90IHdpbGwgYmUgcmVhZCBhc3lu
Y2hyb25vdXNseQogICAgIC8vIGFzIHdpdGggTG9ja2VkLCBidXQgbmV2ZXIgd3JpdHRlbiB0byBh
c3luY2hyb25vdXNseS4gVGhlbiwgQWlyIGNvdWxkIG9wdGltaXplIHNwaWxsaW5nIGFuZApAQCAt
NDcsNyArNTEsNyBAQCBlbnVtIGNsYXNzIFN0YWNrU2xvdEtpbmQgOiB1aW50OF90IHsKICAgICAv
LyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNTg3CiB9OwogCi19
IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXIK
IAogbmFtZXNwYWNlIFdURiB7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
b3Bjb2RlX2dlbmVyYXRvci5yYgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL29wY29kZV9nZW5lcmF0b3IucmIJKHJldmlzaW9uIDE5NTkwMSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvb3Bjb2RlX2dlbmVyYXRvci5yYgkod29ya2luZyBjb3B5KQpA
QCAtNjgwLDYgKzY4MCwxOCBAQCB3cml0ZUgoIk9wY29kZVV0aWxzIikgewogICAgICAgICAgICAg
ICAgIGZpbHRlciA9IHByb2MgeyBmYWxzZSB9CiAgICAgICAgICAgICAgICAgY2FsbGJhY2sgPSBw
cm9jIHsKICAgICAgICAgICAgICAgICAgICAgfCBmb3JtIHwKKyAgICAgICAgICAgICAgICAgICAg
IyBUaGlzIGNvbnNlcnZhdGl2ZWx5IHNheXMgdGhhdCBTdGFjayBpcyBub3QgYSB2YWxpZCBmb3Jt
IGZvciBVc2VBZGRyLAorICAgICAgICAgICAgICAgICAgICAjIGJlY2F1c2UgaXQncyBvbmx5IHZh
bGlkIGlmIGl0J3Mgbm90IGEgc3BpbGwgc2xvdC4gVGhpcyBpcyBjb25zaXN0ZW50IHdpdGgKKyAg
ICAgICAgICAgICAgICAgICAgIyBpc1ZhbGlkRm9ybSgpIGJlaW5nIGNvbnNlcnZhdGl2ZSBhbmQg
aXQgYWxzbyBoYXBwZW5zIHRvIGJlIHByYWN0aWNhbCBzaW5jZQorICAgICAgICAgICAgICAgICAg
ICAjIHdlIGRvbid0IHJlYWxseSB1c2UgaXNWYWxpZEZvcm0gZm9yIGRlY2lkaW5nIHdoZW4gU3Rh
Y2sgaXMgc2FmZS4KKyAgICAgICAgICAgICAgICAgICAgb3ZlcmxvYWQuc2lnbmF0dXJlLmxlbmd0
aC50aW1lcyB7CisgICAgICAgICAgICAgICAgICAgICAgICB8IGluZGV4IHwKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlmIG92ZXJsb2FkLnNpZ25hdHVyZVtpbmRleF0ucm9sZSA9PSAiVUEiCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJpZiAob3BnZW5IaWRkZW5QdHJJ
ZGVudGl0eShraW5kcylbI3tpbmRleH1dID09IEFyZzo6U3RhY2spIgorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG91dHAucHV0cyAiICAgIHJldHVybiBmYWxzZTsiCisgICAgICAgICAgICAg
ICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgICAgICAgICAgbm90Q3VzdG9tID0gKG5vdCBmb3JtLmtpbmRzLmRldGVj
dCB7IHwga2luZCB8IGtpbmQuY3VzdG9tIH0pCiAgICAgICAgICAgICAgICAgICAgIGlmIG5vdEN1
c3RvbQogICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW5BcmNocyhvdXRwLCBmb3JtLmFyY2hz
KQpAQCAtNzg3LDYgKzc5OSwxMSBAQCB3cml0ZUgoIk9wY29kZUdlbmVyYXRlZCIpIHsKICAgICAg
ICAgICAgICAgICAgICAgb3V0cC5wdXRzICJpZiAoIUFyZzo6aXNWYWxpZEltbUZvcm0oYXJnc1sj
e2luZGV4fV0udmFsdWUoKSkpIgogICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgIk9QR0VO
X1JFVFVSTihmYWxzZSk7IgogICAgICAgICAgICAgICAgIHdoZW4gIkFkZHIiCisgICAgICAgICAg
ICAgICAgICAgIGlmIGFyZy5yb2xlID09ICJVQSIKKyAgICAgICAgICAgICAgICAgICAgICAgIG91
dHAucHV0cyAiaWYgKGFyZ3NbI3tpbmRleH1dLmlzU3RhY2soKSAmJiBhcmdzWyN7aW5kZXh9XS5z
dGFja1Nsb3QoKS0+aXNTcGlsbCgpKSIKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dHAucHV0
cyAiT1BHRU5fUkVUVVJOKGZhbHNlKTsiCisgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJpZiAoIUFyZzo6
aXNWYWxpZEFkZHJGb3JtKGFyZ3NbI3tpbmRleH1dLm9mZnNldCgpKSkiCiAgICAgICAgICAgICAg
ICAgICAgIG91dHAucHV0cyAiT1BHRU5fUkVUVVJOKGZhbHNlKTsiCiAgICAgICAgICAgICAgICAg
d2hlbiAiSW5kZXgiCkBAIC04MzksOSArODU2LDEwIEBAIHdyaXRlSCgiT3Bjb2RlR2VuZXJhdGVk
IikgewogICAgICAgICAgICAgICAgIG51bU5vID0gMAogICAgICAgICAgICAgICAgIG9wY29kZS5v
dmVybG9hZHMuZWFjaCB7CiAgICAgICAgICAgICAgICAgICAgIHwgb3ZlcmxvYWQgfAorICAgICAg
ICAgICAgICAgICAgICB1c2VBZGRyID0gb3ZlcmxvYWQuc2lnbmF0dXJlW2FyZ0luZGV4XS5yb2xl
ID09ICJVQSIKICAgICAgICAgICAgICAgICAgICAgb3ZlcmxvYWQuZm9ybXMuZWFjaCB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICB8IGZvcm0gfAotICAgICAgICAgICAgICAgICAgICAgICAgaWYg
Zm9ybS5raW5kc1thcmdJbmRleF0gPT0gIkFkZHIiCisgICAgICAgICAgICAgICAgICAgICAgICBp
ZiBmb3JtLmtpbmRzW2FyZ0luZGV4XSA9PSAiQWRkciIgYW5kIG5vdCB1c2VBZGRyCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgbnVtWWVzICs9IDEKICAgICAgICAgICAgICAgICAgICAgICAg
IGVsc2UKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1ObyArPSAxCkBAIC04NjQsMTIg
Kzg4MiwxNCBAQCB3cml0ZUgoIk9wY29kZUdlbmVyYXRlZCIpIHsKICAgICAgICAgICAgICAgICAg
ICAgb3Bjb2RlLm92ZXJsb2Fkcy5lYWNoIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHwgb3Zl
cmxvYWQgfAogCisgICAgICAgICAgICAgICAgICAgICAgICB1c2VBZGRyID0gb3ZlcmxvYWQuc2ln
bmF0dXJlW2FyZ0luZGV4XS5yb2xlID09ICJVQSIKKyAgICAgICAgICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgICAgICAgICAgIyBBZ2FpbiwgY2hlY2sgaWYgYWxsIG9mIHRoZW0gZG8g
d2hhdCB3ZSB3YW50LgogICAgICAgICAgICAgICAgICAgICAgICAgbnVtWWVzID0gMAogICAgICAg
ICAgICAgICAgICAgICAgICAgbnVtTm8gPSAwCiAgICAgICAgICAgICAgICAgICAgICAgICBvdmVy
bG9hZC5mb3Jtcy5lYWNoIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICB8IGZvcm0gfAot
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGZvcm0ua2luZHNbYXJnSW5kZXhdID09ICJB
ZGRyIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIGZvcm0ua2luZHNbYXJnSW5kZXhd
ID09ICJBZGRyIiBhbmQgbm90IHVzZUFkZHIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgbnVtWWVzICs9IDEKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG51bU5vICs9IDEKSW5kZXg6IFdlYnNpdGVzL3dlYmtp
dC5vcmcvZG9jcy9iMy9pbnRlcm1lZGlhdGUtcmVwcmVzZW50YXRpb24uaHRtbAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBXZWJzaXRlcy93ZWJraXQub3JnL2RvY3MvYjMvaW50ZXJtZWRpYXRlLXJlcHJlc2VudGF0
aW9uLmh0bWwJKHJldmlzaW9uIDE5NTkwMSkKKysrIFdlYnNpdGVzL3dlYmtpdC5vcmcvZG9jcy9i
My9pbnRlcm1lZGlhdGUtcmVwcmVzZW50YXRpb24uaHRtbAkod29ya2luZyBjb3B5KQpAQCAtNzYs
NyArNzYsNyBAQAogICAgICAgZm9yIHRoZSBsb2FkLiAgV2UgdXNlIHRoZSBNZW1vcnlWYWx1ZSBj
bGFzcyBmb3IgbWVtb3J5LWFjY2Vzc2luZyB2YWx1ZXMsIHdoaWNoIGFsbCBoYXZlCiAgICAgICBz
dWNoIGFuIG9mZnNldC48L3A+CiAKLSAgICA8aDI+U3RhY2sgU2xvdDwvaDI+CisgICAgPGgyPlN0
YWNrIFNsb3RzPC9oMj4KIAogICAgIDxwPkIzIGV4cG9zZXMgdGhlIGNvbmNlcHQgb2Ygc3RhY2st
YWxsb2NhdGVkIGRhdGEgYW5kIGdpdmVzIHRoZSBjbGllbnQgYSBsb3Qgb2YgY29udHJvbC4KICAg
ICAgIFlvdSBjYW4gZm9yY2Ugc3RhY2sgc2xvdHMgdG8gZW5kIHVwIGF0IGEgcGFydGljdWxhciBv
ZmZzZXQgZnJvbSB0aGUgZnJhbWUgcG9pbnRlciwgdGhvdWdoCkBAIC04NCwyNCArODQsMTkgQEAK
ICAgICAgIG9mZnNldCBmcm9tIGFueSBzdGFjayBzbG90LiAgVXN1YWxseSwgeW91IGxldCBCMyBz
ZWxlY3Qgd2hlcmUgc3RhY2sgc2xvdHMgZ28sIGFuZCB0aGVuIHVzZQogICAgICAgdGhlIFN0YWNr
U2xvdCBBUEkgdG8gZ2V0IGl0cyBGUCBvZmZzZXQgYWZ0ZXIgY29tcGlsYXRpb24uPC9wPgogCi0g
ICAgPHA+U3RhY2sgc2xvdHMgYXJlIGFsc28gdXNlZCBmb3IgY3JlYXRpbmcgbm9uLVNTQSB2YXJp
YWJsZXMgd2l0aCB0aGUgaW50ZW50aW9uIG9mIGhhdmluZyBCMwotICAgICAgY29udmVydCB0aGVt
IGludG8gU1NBLiAgVGhlcmUgYXJlIHR3byBraW5kcyBvZiBzdGFjayBsb3RzLjwvcD4KKyAgICA8
aDI+VmFyaWFibGVzPC9oMj4KIAotICAgIDxkbD4KLSAgICAgIDxkdD5Bbm9ueW1vdXM8L2R0Pgot
ICAgICAgPGRkPkFub255bW91cyBzdGFjayBzbG90cyBhcmUgdXNlZCB0byByZXByZXNlbnQgbG9j
YWwgdmFyaWFibGVzIHRoYXQgYXJlbid0IGluIFNTQSBmb3JtLgotICAgICAgICBCMyBpcyBhbGxv
d2VkIHRvIGFzc3VtZSB0aGF0IG5vYm9keSB3aWxsIHN0b3JlIHRvIGFuIGFub255bW91cyBzdGFj
ayBzbG90IGV4Y2VwdCB0aHJvdWdoCi0gICAgICAgIFN0b3JlIGluc3RydWN0aW9ucyBpbiB0aGUg
QjMgcHJvY2VkdXJlLiAgQjMgaXMgYWxsb3dlZCB0byBhc3N1bWUgdGhhdCBhIFN0b3JlIHRoYXQg
ZG9lcwotICAgICAgICBub3Qgd3JpdGUgdG8gdGhlIGVudGlyZSBhbm9ueW1vdXMgc3RhY2sgc2xv
dCBsZWF2ZXMgdGhlIHVud3JpdHRlbiBwYXJ0IGluIGFuIHVuZGVmaW5lZAotICAgICAgICBzdGF0
ZS4gIFVzdWFsbHksIGFub255bW91cyBzdGFjayBzbG90cyBhcmUgYWxsb2NhdGVkIHRvIGhhdmUg
dGhlIHNhbWUgc2l6ZSBhcyB0aGUgdHlwZQotICAgICAgICBvZiB2YXJpYWJsZSB0aGV5IGFyZSBi
ZWluZyB1c2VkIHRvIHJlcHJlc2VudC48L2RkPgotCi0gICAgICA8ZHQ+TG9ja2VkPC9kdD4KLSAg
ICAgIDxkZD5UaGVzZSBzdGFjayBzbG90cyBhcmUgYXNzdW1lZCB0byBvcGVyYXRlICJhcyBpZiIg
dGhleSB3ZXJlIGluIHRoZSBoZWFwLCBpbiB0aGUgc2Vuc2UKLSAgICAgICAgdGhhdCB0aGUgbWF5
IGdldCByZWFkIG9yIHdyaXR0ZW4gdXNpbmcgb3BlcmF0aW9ucyBub3QgdmlzaWJsZSBpbiBCMyBJ
Ui48L2RkPgotICAgIDwvZGw+Ci0KLSAgICA8cD5UaGUgZml4U1NBKCkgcGhhc2Ugd2lsbCBjb252
ZXJ0IGFub255bW91cyBzdGFjayBzbG90cyB0byBTU0EuPC9wPgorICAgIDxwPlNvbWV0aW1lcywg
U1NBIGlzIGluY29udmVuaWVudC4gRm9yIGV4YW1wbGUsIGl0J3MgaGFyZCB0byBkbyBwYXRoIHNw
ZWNpYWxpemF0aW9uIG92ZXIgU1NBLgorICAgICAgQjMgaGFzIHRoZSBjb25jZXB0IG9mIFZhcmlh
YmxlcyBhcyBhIGZhbGwtYmFjay4gVGhlIGJhY2tlbmQga25vd3MgaG93IHRvIGhhbmRsZSB0aGVt
IGFuZAorICAgICAgd2lsbCBjb2FsZXNjZSBhbmQgY29weS1wcm9wYWdhdGUgdGhlbS4gSW5zaWRl
IHRoZSBCMyBvcHRpbWl6ZXIsIHRoZXJlIGlzIGEgY2xhc3NpYyBTU0EKKyAgICAgIGJ1aWxkZXIg
dGhhdCBlbGltaW5hdGVzIHZhcmlhYmxlcyBhbmQgYnVpbGRzIFNTQSBpbiB0aGVpciBwbGFjZS48
L3A+CisKKyAgICA8cD5Zb3UgY2FuIGNyZWF0ZSBWYXJpYWJsZXMgYnkgdXNpbmcgUHJvY2VkdXJl
OjphZGRWYXJpYWJsZSgpLCBhbmQgdGhlbiB5b3UgY2FuIGFjY2VzcyB0aGVtCisgICAgICB1c2lu
ZyB0aGUgR2V0IGFuZCBTZXQgb3Bjb2Rlcy48L3A+CisKKyAgICA8cD5UaGUgZml4U1NBKCkgcGhh
c2Ugd2lsbCBjb252ZXJ0IHZhcmlhYmxlcyB0byBTU0EuIElmIHlvdSB1c2UgYSBsb3Qgb2YgdmFy
aWFibGVzIGluIHlvdXIKKyAgICAgIGlucHV0IHRvIEIzLCBpdCdzIGEgZ29vZCBpZGVhIHRvIHJ1
biBmaXhTU0EoKSBtYW51YWxseSBiZWZvcmUgcnVubmluZyB0aGUgY29tcGlsZXIuIFRoZQorICAg
ICAgZGVmYXVsdCBvcHRpbWl6ZXIgb25seSBydW5zIGZpeFNTQSgpIHRvd2FyZHMgdGhlIG1pZGRs
ZSBvZiBvcHRpbWl6YXRpb25zLiA8L3A+CiAKICAgICA8aDI+Q29udHJvbCBmbG93PC9oMj4KIApA
QCAtMTYwLDYgKzE1NSwxMyBAQAogICAgICAgPGR0PkRvdWJsZSBDb25zdERvdWJsZShjb25zdGFu
dCk8L2R0PgogICAgICAgPGRkPkRvdWJsZSBjb25zdGFudC4gIE11c3QgdXNlIHRoZSBDb25zdERv
dWJsZVZhbHVlIGNsYXNzLCB3aGljaCBoYXMgc3BhY2UgZm9yIHRoZSBkb3VibGUgY29uc3RhbnQu
PC9kZD4KIAorICAgICAgPGR0PlZvaWQgU2V0KHZhbHVlLCB2YXJpYWJsZSk8L2R0PgorICAgICAg
PGRkPkFzc2lnbnMgdGhlIGdpdmVuIHZhbHVlIHRvIHRoZSBnaXZlbiBWYXJpYWJsZS4gTXVzdCB1
c2UgdGhlIFZhcmlhYmxlVmFsdWUgY2xhc3MuPC9kZD4KKworICAgICAgPGR0PlQgR2V0KHZhcmlh
YmxlKTwvZHQ+CisgICAgICA8ZGQ+UmV0dXJucyB0aGUgY3VycmVudCB2YWx1ZSBvZiB0aGUgZ2l2
ZW4gVmFyaWFibGUuIEl0cyByZXR1cm4gdHlwZSBkZXBlbmRzIG9uIHRoZQorICAgICAgICB2YXJp
YWJsZS4gTXVzdCB1c2UgdGhlIFZhcmlhYmxlVmFsdWUgY2xhc3MuPC9kZD4KKwogICAgICAgPGR0
PkludFB0ciBTbG90QmFzZShzdGFja1Nsb3QpPC9kdD4KICAgICAgIDxkZD5SZXR1cm5zIGEgcG9p
bnRlciB0byB0aGUgYmFzZSBvZiB0aGUgZ2l2ZW4gc3RhY2sgc2xvdC4gIE11c3QgdXNlIHRoZSBT
bG90QmFzZVZhbHVlCiAgICAgICAgIGNsYXNzLjwvZGQ+Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>270410</attachid>
            <date>2016-02-01 12:19:48 -0800</date>
            <delta_ts>2016-02-01 13:00:34 -0800</delta_ts>
            <desc>more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>128178</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDE5NTk3MCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtOTcsNiArOTcsNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAgIGIzL2Fpci9B
aXJTcGVjaWFsLmNwcAogICAgIGIzL2Fpci9BaXJTcGlsbEV2ZXJ5dGhpbmcuY3BwCiAgICAgYjMv
YWlyL0FpclN0YWNrU2xvdC5jcHAKKyAgICBiMy9haXIvQWlyU3RhY2tTbG90S2luZC5jcHAKICAg
ICBiMy9haXIvQWlyVG1wLmNwcAogICAgIGIzL2Fpci9BaXJUbXBXaWR0aC5jcHAKICAgICBiMy9h
aXIvQWlyVmFsaWRhdGUuY3BwCkBAIC0xNTEsNyArMTUyLDYgQEAgc2V0KEphdmFTY3JpcHRDb3Jl
X1NPVVJDRVMKICAgICBiMy9CM1N0YWNrbWFwR2VuZXJhdGlvblBhcmFtcy5jcHAKICAgICBiMy9C
M1N0YWNrbWFwU3BlY2lhbC5jcHAKICAgICBiMy9CM1N0YWNrbWFwVmFsdWUuY3BwCi0gICAgYjMv
QjNTdGFja1Nsb3RLaW5kLmNwcAogICAgIGIzL0IzU3RhY2tTbG90LmNwcAogICAgIGIzL0IzU3dp
dGNoQ2FzZS5jcHAKICAgICBiMy9CM1N3aXRjaFZhbHVlLmNwcApAQCAtMTYzLDYgKzE2Myw4IEBA
IHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgYjMvQjNWYWx1ZS5jcHAKICAgICBiMy9C
M1ZhbHVlS2V5LmNwcAogICAgIGIzL0IzVmFsdWVSZXAuY3BwCisgICAgYjMvQjNWYXJpYWJsZS5j
cHAKKyAgICBiMy9CM1ZhcmlhYmxlVmFsdWUuY3BwCiAKICAgICBiaW5kaW5ncy9TY3JpcHRGdW5j
dGlvbkNhbGwuY3BwCiAgICAgYmluZGluZ3MvU2NyaXB0T2JqZWN0LmNwcApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE5NTk3MCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5n
IGNvcHkpCkBAIC0yMzksNiArMjM5LDEzIEBACiAJCTBGMkI5Q0Y3MTlEMEJBQzEwMEIxRDFCNSAv
KiBGVExFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjlDRjExOUQwQkFDMTAwQjFEMUI1IC8qIEZU
TEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYyQjlDRjgxOUQwQkFDMTAwQjFEMUI1IC8qIEZU
TE9wZXJhdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEYyQjlDRjIxOUQwQkFDMTAwQjFEMUI1IC8qIEZUTE9wZXJhdGlvbnMuY3BwICovOyB9
OwogCQkwRjJCOUNGOTE5RDBCQUMxMDBCMUQxQjUgLyogRlRMT3BlcmF0aW9ucy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjlDRjMxOUQwQkFDMTAw
QjFEMUI1IC8qIEZUTE9wZXJhdGlvbnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQkwRjJCQkQ5NjFDNUZGM0Y1MDAyM0VGMjMgLyogQjNTcGFyc2VD
b2xsZWN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjJCQkQ5MTFDNUZGM0Y1MDAyM0VGMjMgLyogQjNTcGFyc2VDb2xsZWN0aW9uLmggKi87IH07
CisJCTBGMkJCRDk3MUM1RkYzRjUwMDIzRUYyMyAvKiBCM1ZhcmlhYmxlLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkJCRDkyMUM1RkYzRjUwMDIz
RUYyMyAvKiBCM1ZhcmlhYmxlLmNwcCAqLzsgfTsKKwkJMEYyQkJEOTgxQzVGRjNGNTAwMjNFRjIz
IC8qIEIzVmFyaWFibGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGMkJCRDkzMUM1RkYzRjUwMDIzRUYyMyAvKiBCM1ZhcmlhYmxlLmggKi87IH07CisJ
CTBGMkJCRDk5MUM1RkYzRjUwMDIzRUYyMyAvKiBCM1ZhcmlhYmxlVmFsdWUuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQkJEOTQxQzVGRjNGNTAw
MjNFRjIzIC8qIEIzVmFyaWFibGVWYWx1ZS5jcHAgKi87IH07CisJCTBGMkJCRDlBMUM1RkYzRjUw
MDIzRUYyMyAvKiBCM1ZhcmlhYmxlVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkJCRDk1MUM1RkYzRjUwMDIzRUYyMyAvKiBCM1ZhcmlhYmxl
VmFsdWUuaCAqLzsgfTsKKwkJMEYyQkJEOUQxQzVGRjQwNTAwMjNFRjIzIC8qIEFpclN0YWNrU2xv
dEtpbmQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEYyQkJEOUIxQzVGRjQwNTAwMjNFRjIzIC8qIEFpclN0YWNrU2xvdEtpbmQuY3BwICovOyB9Owor
CQkwRjJCQkQ5RTFDNUZGNDA1MDAyM0VGMjMgLyogQWlyU3RhY2tTbG90S2luZC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQkJEOUMxQzVGRjQwNTAw
MjNFRjIzIC8qIEFpclN0YWNrU2xvdEtpbmQuaCAqLzsgfTsKIAkJMEYyQkRDMTUxNTFDNUQ0RDAw
Q0Q4OTEwIC8qIERGR0ZpeHVwUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYyQkRDMTIxNTFDNUQ0QTAwQ0Q4OTEwIC8qIERGR0ZpeHVwUGhh
c2UuY3BwICovOyB9OwogCQkwRjJCREMxNjE1MUM1RDRGMDBDRDg5MTAgLyogREZHRml4dXBQaGFz
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQkRD
MTMxNTFDNUQ0QTAwQ0Q4OTEwIC8qIERGR0ZpeHVwUGhhc2UuaCAqLzsgfTsKIAkJMEYyQkRDMjEx
NTFFODAzQjAwQ0Q4OTEwIC8qIERGR0luc2VydGlvblNldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQkRDMUYxNTFFODAzODAwQ0Q4OTEwIC8qIERG
R0luc2VydGlvblNldC5oICovOyB9OwpAQCAtODMyLDggKzgzOSw2IEBACiAJCTBGRUM4NTJEMUJE
QUNEQUMwMDgwRkY3NCAvKiBCM1Byb2NlZHVyZUlubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEUzMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M1Byb2NlZHVyZUlubGluZXMuaCAqLzsgfTsKIAkJMEZFQzg1MzAxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzU3RhY2ttYXBTcGVjaWFsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRUM4NEU2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrbWFwU3BlY2lh
bC5jcHAgKi87IH07CiAJCTBGRUM4NTMxMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrbWFwU3Bl
Y2lhbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZF
Qzg0RTcxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2ttYXBTcGVjaWFsLmggKi87IH07Ci0JCTBG
RUM4NTMyMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xvdEtpbmQuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RTgxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzU3RhY2tTbG90S2luZC5jcHAgKi87IH07Ci0JCTBGRUM4NTMzMUJEQUNEQUMwMDgw
RkY3NCAvKiBCM1N0YWNrU2xvdEtpbmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGRUM4NEU5MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xvdEtp
bmQuaCAqLzsgfTsKIAkJMEZFQzg1MzQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU2xvdEJhc2VWYWx1
ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVD
ODRFQTFCREFDREFDMDA4MEZGNzQgLyogQjNTbG90QmFzZVZhbHVlLmNwcCAqLzsgfTsKIAkJMEZF
Qzg1MzUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU2xvdEJhc2VWYWx1ZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RUIxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzU2xvdEJhc2VWYWx1ZS5oICovOyB9OwogCQkwRkVDODUzNjFCREFDREFDMDA4MEZGNzQg
LyogQjNTdWNjZXNzb3JDb2xsZWN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRFQzFCREFDREFDMDA4MEZGNzQgLyogQjNTdWNjZXNzb3JD
b2xsZWN0aW9uLmggKi87IH07CkBAIC0yNDMxLDYgKzI0MzYsMTMgQEAKIAkJMEYyQjlDRjExOUQw
QkFDMTAwQjFEMUI1IC8qIEZUTEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0
aW9uLmg7IHBhdGggPSBmdGwvRlRMRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24uaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyQjlDRjIxOUQwQkFDMTAwQjFEMUI1IC8qIEZU
TE9wZXJhdGlvbnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRlRM
T3BlcmF0aW9ucy5jcHA7IHBhdGggPSBmdGwvRlRMT3BlcmF0aW9ucy5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGMkI5Q0YzMTlEMEJBQzEwMEIxRDFCNSAvKiBGVExPcGVyYXRp
b25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTE9wZXJhdGlvbnMuaDsg
cGF0aCA9IGZ0bC9GVExPcGVyYXRpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGMkJCRDkxMUM1RkYzRjUwMDIzRUYyMyAvKiBCM1NwYXJzZUNvbGxlY3Rpb24uaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNTcGFyc2VDb2xsZWN0aW9uLmg7IHBhdGggPSBi
My9CM1NwYXJzZUNvbGxlY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYy
QkJEOTIxQzVGRjNGNTAwMjNFRjIzIC8qIEIzVmFyaWFibGUuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gQjNWYXJpYWJsZS5jcHA7IHBhdGggPSBiMy9CM1ZhcmlhYmxl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQkJEOTMxQzVGRjNGNTAwMjNF
RjIzIC8qIEIzVmFyaWFibGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNW
YXJpYWJsZS5oOyBwYXRoID0gYjMvQjNWYXJpYWJsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRjJCQkQ5NDFDNUZGM0Y1MDAyM0VGMjMgLyogQjNWYXJpYWJsZVZhbHVlLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzVmFyaWFibGVWYWx1ZS5jcHA7
IHBhdGggPSBiMy9CM1ZhcmlhYmxlVmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRjJCQkQ5NTFDNUZGM0Y1MDAyM0VGMjMgLyogQjNWYXJpYWJsZVZhbHVlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzVmFyaWFibGVWYWx1ZS5oOyBwYXRoID0gYjMv
QjNWYXJpYWJsZVZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkJCRDlC
MUM1RkY0MDUwMDIzRUYyMyAvKiBBaXJTdGFja1Nsb3RLaW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpclN0YWNrU2xvdEtpbmQuY3BwOyBwYXRoID0gYjMvYWly
L0FpclN0YWNrU2xvdEtpbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJC
QkQ5QzFDNUZGNDA1MDAyM0VGMjMgLyogQWlyU3RhY2tTbG90S2luZC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJTdGFja1Nsb3RLaW5kLmg7IHBhdGggPSBiMy9haXIvQWly
U3RhY2tTbG90S2luZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjJCREMxMjE1
MUM1RDRBMDBDRDg5MTAgLyogREZHRml4dXBQaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBERkdGaXh1cFBoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdGaXh1cFBo
YXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyQkRDMTMxNTFDNUQ0QTAw
Q0Q4OTEwIC8qIERGR0ZpeHVwUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gREZHRml4dXBQaGFzZS5oOyBwYXRoID0gZGZnL0RGR0ZpeHVwUGhhc2UuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyQkRDMUYxNTFFODAzODAwQ0Q4OTEwIC8qIERGR0luc2Vy
dGlvblNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdJbnNlcnRpb25T
ZXQuaDsgcGF0aCA9IGRmZy9ERkdJbnNlcnRpb25TZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTMwMzMsOCArMzA0NSw2IEBACiAJCTBGRUM4NEUzMUJEQUNEQUMwMDgwRkY3NCAv
KiBCM1Byb2NlZHVyZUlubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
QjNQcm9jZWR1cmVJbmxpbmVzLmg7IHBhdGggPSBiMy9CM1Byb2NlZHVyZUlubGluZXMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFQzg0RTYxQkRBQ0RBQzAwODBGRjc0IC8qIEIz
U3RhY2ttYXBTcGVjaWFsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9
IEIzU3RhY2ttYXBTcGVjaWFsLmNwcDsgcGF0aCA9IGIzL0IzU3RhY2ttYXBTcGVjaWFsLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFQzg0RTcxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzU3RhY2ttYXBTcGVjaWFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIz
U3RhY2ttYXBTcGVjaWFsLmg7IHBhdGggPSBiMy9CM1N0YWNrbWFwU3BlY2lhbC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQkwRkVDODRFODFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFj
a1Nsb3RLaW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzU3Rh
Y2tTbG90S2luZC5jcHA7IHBhdGggPSBiMy9CM1N0YWNrU2xvdEtpbmQuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQkwRkVDODRFOTFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja1Ns
b3RLaW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzU3RhY2tTbG90S2lu
ZC5oOyBwYXRoID0gYjMvQjNTdGFja1Nsb3RLaW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGRUM4NEVBMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Nsb3RCYXNlVmFsdWUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNTbG90QmFzZVZhbHVlLmNwcDsg
cGF0aCA9IGIzL0IzU2xvdEJhc2VWYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGRUM4NEVCMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Nsb3RCYXNlVmFsdWUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNTbG90QmFzZVZhbHVlLmg7IHBhdGggPSBiMy9C
M1Nsb3RCYXNlVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFQzg0RUMx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzU3VjY2Vzc29yQ29sbGVjdGlvbi5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBCM1N1Y2Nlc3NvckNvbGxlY3Rpb24uaDsgcGF0aCA9IGIzL0Iz
U3VjY2Vzc29yQ29sbGVjdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDg2
Niw2ICs0ODc2LDcgQEAKIAkJCQkwRkVDODVCODFCRTE0NjJGMDA4MEZGNzQgLyogQjNSZWR1Y2VT
dHJlbmd0aC5oICovLAogCQkJCTBGRUM4NEVBMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Nsb3RCYXNl
VmFsdWUuY3BwICovLAogCQkJCTBGRUM4NEVCMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Nsb3RCYXNl
VmFsdWUuaCAqLywKKwkJCQkwRjJCQkQ5MTFDNUZGM0Y1MDAyM0VGMjMgLyogQjNTcGFyc2VDb2xs
ZWN0aW9uLmggKi8sCiAJCQkJMEY2QjhBREExQzRFRkFDMzAwOTY5MDUyIC8qIEIzU1NBQ2FsY3Vs
YXRvci5jcHAgKi8sCiAJCQkJMEY2QjhBREIxQzRFRkFDMzAwOTY5MDUyIC8qIEIzU1NBQ2FsY3Vs
YXRvci5oICovLAogCQkJCTBGMzNGQ0Y1MUMxMzZFMjUwMDMyM0Y2NyAvKiBCM1N0YWNrbWFwR2Vu
ZXJhdGlvblBhcmFtcy5jcHAgKi8sCkBAIC00ODc2LDggKzQ4ODcsNiBAQAogCQkJCTBGMzM4REYw
MUJFOTNBRDEwMDEzQzg4RiAvKiBCM1N0YWNrbWFwVmFsdWUuaCAqLywKIAkJCQkwRjk0OTU4NTFD
NTdGNDc1MDA0MTNBNDggLyogQjNTdGFja1Nsb3QuY3BwICovLAogCQkJCTBGOTQ5NTg2MUM1N0Y0
NzUwMDQxM0E0OCAvKiBCM1N0YWNrU2xvdC5oICovLAotCQkJCTBGRUM4NEU4MUJEQUNEQUMwMDgw
RkY3NCAvKiBCM1N0YWNrU2xvdEtpbmQuY3BwICovLAotCQkJCTBGRUM4NEU5MUJEQUNEQUMwMDgw
RkY3NCAvKiBCM1N0YWNrU2xvdEtpbmQuaCAqLywKIAkJCQkwRkVDODRFQzFCREFDREFDMDA4MEZG
NzQgLyogQjNTdWNjZXNzb3JDb2xsZWN0aW9uLmggKi8sCiAJCQkJMEZFQzg0RUQxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzU3dpdGNoQ2FzZS5jcHAgKi8sCiAJCQkJMEZFQzg0RUUxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzU3dpdGNoQ2FzZS5oICovLApAQCAtNDkwMSw2ICs0OTEwLDEwIEBACiAJCQkJMEYz
MzhFMEExQkYwMjc2QzAwMTNDODhGIC8qIEIzVmFsdWVLZXlJbmxpbmVzLmggKi8sCiAJCQkJMEZF
Qzg0RkMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWVSZXAuY3BwICovLAogCQkJCTBGRUM4NEZE
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbHVlUmVwLmggKi8sCisJCQkJMEYyQkJEOTIxQzVGRjNG
NTAwMjNFRjIzIC8qIEIzVmFyaWFibGUuY3BwICovLAorCQkJCTBGMkJCRDkzMUM1RkYzRjUwMDIz
RUYyMyAvKiBCM1ZhcmlhYmxlLmggKi8sCisJCQkJMEYyQkJEOTQxQzVGRjNGNTAwMjNFRjIzIC8q
IEIzVmFyaWFibGVWYWx1ZS5jcHAgKi8sCisJCQkJMEYyQkJEOTUxQzVGRjNGNTAwMjNFRjIzIC8q
IEIzVmFyaWFibGVWYWx1ZS5oICovLAogCQkJCTBGRUM4NUFFMUJEQjVENUUwMDgwRkY3NCAvKiB0
ZXN0YjMuY3BwICovLAogCQkJKTsKIAkJCW5hbWUgPSBiMzsKQEAgLTQ5NzEsNiArNDk4NCw4IEBA
CiAJCQkJMEZFQzg1NjUxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclNwaWxsRXZlcnl0aGluZy5oICov
LAogCQkJCTBGRUM4NTY2MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTdGFja1Nsb3QuY3BwICovLAog
CQkJCTBGRUM4NTY3MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTdGFja1Nsb3QuaCAqLywKKwkJCQkw
RjJCQkQ5QjFDNUZGNDA1MDAyM0VGMjMgLyogQWlyU3RhY2tTbG90S2luZC5jcHAgKi8sCisJCQkJ
MEYyQkJEOUMxQzVGRjQwNTAwMjNFRjIzIC8qIEFpclN0YWNrU2xvdEtpbmQuaCAqLywKIAkJCQkw
RkVDODU2ODFCREFDREM3MDA4MEZGNzQgLyogQWlyVG1wLmNwcCAqLywKIAkJCQkwRkVDODU2OTFC
REFDREM3MDA4MEZGNzQgLyogQWlyVG1wLmggKi8sCiAJCQkJMEZFQzg1NkExQkRBQ0RDNzAwODBG
Rjc0IC8qIEFpclRtcElubGluZXMuaCAqLywKQEAgLTcxMjgsNyArNzE0Myw2IEBACiAJCQkJMEZF
Qzg1MkQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUHJvY2VkdXJlSW5saW5lcy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEZFQzg1QkQxQkUxNDYyRjAwODBGRjc0IC8qIEIzUmVkdWNlU3RyZW5ndGguaCBp
biBIZWFkZXJzICovLAogCQkJCTBGRUM4NTMxMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrbWFw
U3BlY2lhbC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMEZFQzg1MzMxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzU3RhY2tTbG90S2luZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1MzUxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzU2xvdEJhc2VWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1MzYx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzU3VjY2Vzc29yQ29sbGVjdGlvbi5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEZFQzg1MzgxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3dpdGNoQ2FzZS5oIGluIEhlYWRl
cnMgKi8sCkBAIC03MjEzLDYgKzcyMjcsNyBAQAogCQkJCTBGMTVGMTVGMTRCN0E3M0UwMDVERTM3
RCAvKiBDb21tb25TbG93UGF0aHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTY1NTNBMzMyMTdBMUYx
RUUwMDhDRjZGMyAvKiBDb21tb25TbG93UGF0aHNFeGNlcHRpb25zLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRkQ4MkUzOTE0MUFCMTREMDAxNzlDOTQgLyogQ29tcGFjdEpJVENvZGVNYXAuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTBGMkJCRDlFMUM1RkY0MDUwMDIzRUYyMyAvKiBBaXJTdGFja1Nsb3RL
aW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0U1QTNBODE3OTc0MzJEMDBFODkzQzAgLyogQ29t
cGlsYXRpb25SZXN1bHQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDM0Y0MEUxNkY1Q0QwMEIz
NDQ2MCAvKiBDb21wbGV0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjZGQzc1MTE5NjExMEE4
MDBFMUQwMkQgLyogQ29tcGxleEdldFN0YXR1cy5oIGluIEhlYWRlcnMgKi8sCkBAIC03Mjg2LDYg
KzczMDEsNyBAQAogCQkJCTQzNDIyQTYzMUMxNThFNkQwMEUyRUI5OCAvKiBCM0NvbnN0RmxvYXRW
YWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGQjkyMUExNkQwMkVDNTAwNTVBNURCIC8qIERG
R0Jhc2ljQmxvY2tJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0Q4OUNGNDE3QTBCOEND
MDA3NzNBRDggLyogREZHQmxvY2tJbnNlcnRpb25TZXQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBG
MkJCRDk2MUM1RkYzRjUwMDIzRUYyMyAvKiBCM1NwYXJzZUNvbGxlY3Rpb24uaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGQzNDQ0ZDMTlBREE0MTAwMDZBQzcyQSAvKiBERkdCbG9ja01hcC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEZDM0NDRkQxOUFEQTQxMDAwNkFDNzJBIC8qIERGR0Jsb2NrTWFwSW5s
aW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDM0NDRkUxOUFEQTQxMDAwNkFDNzJBIC8qIERG
R0Jsb2NrU2V0LmggaW4gSGVhZGVycyAqLywKQEAgLTc1NjUsNiArNzU4MSw3IEBACiAJCQkJMEYy
QjY2QUUxN0I2QjU0NTAwQTdBRTNGIC8qIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0LmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjJCNjZBRjE3QjZCNTQ1MDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNv
dW50ZWRTZXRJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkyQUFCQ0RFNzE4RUYyOTQyMDAw
MDIwOTYgLyogR0NMb2dnaW5nLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJCQkQ5ODFDNUZGM0Y1
MDAyM0VGMjMgLyogQjNWYXJpYWJsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTU0RThFQjAxOEJG
RkJCQjAwNTU2RDI4IC8qIEdDU2VnbWVudGVkQXJyYXkuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1
NEU4RUIxMThCRkZCQkUwMDU1NkQyOCAvKiBHQ1NlZ21lbnRlZEFycmF5SW5saW5lcy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJOTk1OUU5MzExQkQxODI3MjAwMUFBNDEzIC8qIGdlbmVyYXRlLWNvbWJp
bmVkLWluc3BlY3Rvci1qc29uLnB5IGluIEhlYWRlcnMgKi8sCkBAIC04MTc2LDYgKzgxOTMsNyBA
QAogCQkJCTBGNkI4QUREMUM0RUZBQzMwMDk2OTA1MiAvKiBCM1NTQUNhbGN1bGF0b3IuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTdCMDI0NzU5MUI4NjhFQjcwMDU0MjQ0MCAvKiBXQVNNRnVuY3Rpb25T
eW50YXhDaGVja2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQk3QjM5Rjc2RTFCNjJERTMyMDAzNjBG
QjQgLyogV0FTTU1vZHVsZVBhcnNlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQkJEOUExQzVG
RjNGNTAwMjNFRjIzIC8qIEIzVmFyaWFibGVWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0Iz
OUY3NzAxQjYyREUzMjAwMzYwRkI0IC8qIFdBU01SZWFkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUZFRDk0RjJGMTcxRTNFMjMwMEJFNzdBNCAvKiBXYXRjaGRvZy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEY5MTlEMjYxNTg1M0NFMzAwNEE0RTdEIC8qIFdhdGNocG9pbnQuaCBpbiBIZWFkZXJzICov
LApAQCAtODgyNCw3ICs4ODQyLDYgQEAKIAkJCQk0MzQyMkE2MjFDMTU4RTZBMDBFMkVCOTggLyog
QjNDb25zdEZsb2F0VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFQzg1QkMxQkUxNDYy
RjAwODBGRjc0IC8qIEIzUmVkdWNlU3RyZW5ndGguY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZF
Qzg1MzAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2ttYXBTcGVjaWFsLmNwcCBpbiBTb3VyY2Vz
ICovLAotCQkJCTBGRUM4NTMyMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xvdEtpbmQuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFQzg1MzQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU2xvdEJh
c2VWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkVDODUzNzFCREFDREFDMDA4MEZGNzQg
LyogQjNTd2l0Y2hDYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRUM4NTM5MUJEQUNEQUMw
MDgwRkY3NCAvKiBCM1N3aXRjaFZhbHVlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtOTA1OSw2ICs5
MDc2LDcgQEAKIAkJCQkwRkM5N0Y0MTE4MjAyMTE5MDAyQzlCMjYgLyogREZHV2F0Y2hwb2ludENv
bGxlY3Rpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkRCMkNFNzE3NDgzMEEyMDA3
QjNDMUIgLyogREZHV29ya2xpc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFMDUwMTcxQUE5
MDkxMTAwRDMzQjMzIC8qIERpcmVjdEFyZ3VtZW50cy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkw
RjJCQkQ5RDFDNUZGNDA1MDAyM0VGMjMgLyogQWlyU3RhY2tTbG90S2luZC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRkUwNTAxNTFBQTkwOTExMDBEMzNCMzMgLyogRGlyZWN0QXJndW1lbnRzT2Zm
c2V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGOUQzMzcwMTY1REJCOTAwMDVBRDM4NyAvKiBE
aXNhc3NlbWJsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTcwNDQ3RUQxN0EwQkQ3MDAwRjU4
OThFIC8qIER1bXBDb250ZXh0LmNwcCBpbiBTb3VyY2VzICovLApAQCAtOTU1NCwxMSArOTU3Miwx
MyBAQAogCQkJCTJBNEVDOTBCMTg2MEQ2QzIwMDk0Rjc4MiAvKiBXcml0ZUJhcnJpZXJCdWZmZXIu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZDODE1MEIxNDA0M0MwRTAwQ0ZBNjAzIC8qIFdyaXRl
QmFycmllclN1cHBvcnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdFNUFCM0ExNzk5RTRCMjAw
RDI4MzNEIC8qIFg4NkRpc2Fzc2VtYmxlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjJCQkQ5
NzFDNUZGM0Y1MDAyM0VGMjMgLyogQjNWYXJpYWJsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4
NjNDNkQ5QzE1MjExMTFBMDA1ODVFNEUgLyogWWFyckNhbm9uaWNhbGl6ZVVDUzIuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJODY3MDRCODQxMkRCQTMzNzAwQTlGRTdCIC8qIFlhcnJJbnRlcnByZXRl
ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NjcwNEI4NjEyREJBMzM3MDBBOUZFN0IgLyogWWFy
ckpJVC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NjcwNEI4OTEyREJBMzM3MDBBOUZFN0IgLyog
WWFyclBhdHRlcm4uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODY3MDRCNDIxMkRCOEE4MTAwQTlG
RTdCIC8qIFlhcnJTeW50YXhDaGVja2VyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMkJCRDk5
MUM1RkYzRjUwMDIzRUYyMyAvKiBCM1ZhcmlhYmxlVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNBcmd1bWVudFJlZ1ZhbHVlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQXJndW1lbnRSZWdWYWx1ZS5oCShy
ZXZpc2lvbiAxOTU5NzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNBcmd1bWVudFJl
Z1ZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDggKzQ5LDggQEAgcHJvdGVjdGVkOgogcHJp
dmF0ZToKICAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOwogCi0gICAgQXJndW1lbnRSZWdWYWx1
ZSh1bnNpZ25lZCBpbmRleCwgT3JpZ2luIG9yaWdpbiwgUmVnIHJlZykKLSAgICAgICAgOiBWYWx1
ZShpbmRleCwgQ2hlY2tlZE9wY29kZSwgQXJndW1lbnRSZWcsIHJlZy5pc0dQUigpID8gcG9pbnRl
clR5cGUoKSA6IERvdWJsZSwgb3JpZ2luKQorICAgIEFyZ3VtZW50UmVnVmFsdWUoT3JpZ2luIG9y
aWdpbiwgUmVnIHJlZykKKyAgICAgICAgOiBWYWx1ZShDaGVja2VkT3Bjb2RlLCBBcmd1bWVudFJl
ZywgcmVnLmlzR1BSKCkgPyBwb2ludGVyVHlwZSgpIDogRG91YmxlLCBvcmlnaW4pCiAgICAgICAg
ICwgbV9yZWcocmVnKQogICAgIHsKICAgICAgICAgQVNTRVJUKHJlZy5pc1NldCgpKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NDYWxsVmFsdWUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDQ2FsbFZhbHVlLmgJKHJldmlzaW9uIDE5NTk3MCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NDYWxsVmFsdWUuaAkod29ya2luZyBjb3B5
KQpAQCAtNDgsMTUgKzQ4LDE1IEBAIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVy
ZTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KLSAgICBDQ2FsbFZhbHVl
KHVuc2lnbmVkIGluZGV4LCBUeXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4sIEFyZ3VtZW50cy4uLiBh
cmd1bWVudHMpCi0gICAgICAgIDogVmFsdWUoaW5kZXgsIENoZWNrZWRPcGNvZGUsIENDYWxsLCB0
eXBlLCBvcmlnaW4sIGFyZ3VtZW50cy4uLikKKyAgICBDQ2FsbFZhbHVlKFR5cGUgdHlwZSwgT3Jp
Z2luIG9yaWdpbiwgQXJndW1lbnRzLi4uIGFyZ3VtZW50cykKKyAgICAgICAgOiBWYWx1ZShDaGVj
a2VkT3Bjb2RlLCBDQ2FsbCwgdHlwZSwgb3JpZ2luLCBhcmd1bWVudHMuLi4pCiAgICAgewogICAg
ICAgICBSRUxFQVNFX0FTU0VSVChudW1DaGlsZHJlbigpID49IDEpOwogICAgIH0KIAogICAgIHRl
bXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KLSAgICBDQ2FsbFZhbHVlKHVuc2lnbmVkIGlu
ZGV4LCBUeXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4sIGNvbnN0IEVmZmVjdHMmIGVmZmVjdHMsIEFy
Z3VtZW50cy4uLiBhcmd1bWVudHMpCi0gICAgICAgIDogVmFsdWUoaW5kZXgsIENoZWNrZWRPcGNv
ZGUsIENDYWxsLCB0eXBlLCBvcmlnaW4sIGFyZ3VtZW50cy4uLikKKyAgICBDQ2FsbFZhbHVlKFR5
cGUgdHlwZSwgT3JpZ2luIG9yaWdpbiwgY29uc3QgRWZmZWN0cyYgZWZmZWN0cywgQXJndW1lbnRz
Li4uIGFyZ3VtZW50cykKKyAgICAgICAgOiBWYWx1ZShDaGVja2VkT3Bjb2RlLCBDQ2FsbCwgdHlw
ZSwgb3JpZ2luLCBhcmd1bWVudHMuLi4pCiAgICAgICAgICwgZWZmZWN0cyhlZmZlY3RzKQogICAg
IHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQobnVtQ2hpbGRyZW4oKSA+PSAxKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrVmFsdWUuY3BwCShyZXZpc2lvbiAxOTU5NzAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1ZhbHVlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDYsOCArNDYsOCBAQCBWYWx1ZSogQ2hlY2tWYWx1ZTo6Y2xvbmVJbXBsKCkgY29u
c3QKIH0KIAogLy8gVXNlIHRoaXMgZm9ybSBmb3IgQ2hlY2tBZGQsIENoZWNrU3ViLCBhbmQgQ2hl
Y2tNdWwuCi1DaGVja1ZhbHVlOjpDaGVja1ZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bj
b2RlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0KQotICAgIDogU3Rh
Y2ttYXBWYWx1ZShpbmRleCwgQ2hlY2tlZE9wY29kZSwgb3Bjb2RlLCBsZWZ0LT50eXBlKCksIG9y
aWdpbikKK0NoZWNrVmFsdWU6OkNoZWNrVmFsdWUoT3Bjb2RlIG9wY29kZSwgT3JpZ2luIG9yaWdp
biwgVmFsdWUqIGxlZnQsIFZhbHVlKiByaWdodCkKKyAgICA6IFN0YWNrbWFwVmFsdWUoQ2hlY2tl
ZE9wY29kZSwgb3Bjb2RlLCBsZWZ0LT50eXBlKCksIG9yaWdpbikKIHsKICAgICBBU1NFUlQoQjM6
OmlzSW50KHR5cGUoKSkpOwogICAgIEFTU0VSVChsZWZ0LT50eXBlKCkgPT0gcmlnaHQtPnR5cGUo
KSk7CkBAIC01Nyw4ICs1Nyw4IEBAIENoZWNrVmFsdWU6OkNoZWNrVmFsdWUodW5zaWduZWQgaW5k
ZXgsIE8KIH0KIAogLy8gVXNlIHRoaXMgZm9ybSBmb3IgQ2hlY2suCi1DaGVja1ZhbHVlOjpDaGVj
a1ZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBPcmlnaW4gb3JpZ2luLCBWYWx1
ZSogcHJlZGljYXRlKQotICAgIDogU3RhY2ttYXBWYWx1ZShpbmRleCwgQ2hlY2tlZE9wY29kZSwg
b3Bjb2RlLCBWb2lkLCBvcmlnaW4pCitDaGVja1ZhbHVlOjpDaGVja1ZhbHVlKE9wY29kZSBvcGNv
ZGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBwcmVkaWNhdGUpCisgICAgOiBTdGFja21hcFZhbHVl
KENoZWNrZWRPcGNvZGUsIG9wY29kZSwgVm9pZCwgb3JpZ2luKQogewogICAgIEFTU0VSVChvcGNv
ZGUgPT0gQ2hlY2spOwogICAgIGFwcGVuZChDb25zdHJhaW5lZFZhbHVlKHByZWRpY2F0ZSwgVmFs
dWVSZXA6Oldhcm1BbnkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNr
VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1Zh
bHVlLmgJKHJldmlzaW9uIDE5NTk3MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0No
ZWNrVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtNTgsMTAgKzU4LDEwIEBAIHByaXZhdGU6CiAg
ICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKIAogICAgIC8vIFVzZSB0aGlzIGZvcm0gZm9yIENo
ZWNrQWRkLCBDaGVja1N1YiwgYW5kIENoZWNrTXVsLgotICAgIEpTX0VYUE9SVF9QUklWQVRFIENo
ZWNrVmFsdWUodW5zaWduZWQgaW5kZXgsIE9wY29kZSwgT3JpZ2luLCBWYWx1ZSogbGVmdCwgVmFs
dWUqIHJpZ2h0KTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBDaGVja1ZhbHVlKE9wY29kZSwgT3Jp
Z2luLCBWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0KTsKIAogICAgIC8vIFVzZSB0aGlzIGZvcm0g
Zm9yIENoZWNrLgotICAgIEpTX0VYUE9SVF9QUklWQVRFIENoZWNrVmFsdWUodW5zaWduZWQgaW5k
ZXgsIE9wY29kZSwgT3JpZ2luLCBWYWx1ZSogcHJlZGljYXRlKTsKKyAgICBKU19FWFBPUlRfUFJJ
VkFURSBDaGVja1ZhbHVlKE9wY29kZSwgT3JpZ2luLCBWYWx1ZSogcHJlZGljYXRlKTsKIH07CiAK
IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzQ29uc3QzMlZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzQ29uc3QzMlZhbHVlLmgJKHJldmlzaW9uIDE5NTk3MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0NvbnN0MzJWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03Nyw4ICs3Nyw4IEBA
IHByb3RlY3RlZDoKIAogICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7CiAKLSAgICBDb25zdDMy
VmFsdWUodW5zaWduZWQgaW5kZXgsIE9yaWdpbiBvcmlnaW4sIGludDMyX3QgdmFsdWUpCi0gICAg
ICAgIDogVmFsdWUoaW5kZXgsIENoZWNrZWRPcGNvZGUsIENvbnN0MzIsIEludDMyLCBvcmlnaW4p
CisgICAgQ29uc3QzMlZhbHVlKE9yaWdpbiBvcmlnaW4sIGludDMyX3QgdmFsdWUpCisgICAgICAg
IDogVmFsdWUoQ2hlY2tlZE9wY29kZSwgQ29uc3QzMiwgSW50MzIsIG9yaWdpbikKICAgICAgICAg
LCBtX3ZhbHVlKHZhbHVlKQogICAgIHsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNDb25zdDY0VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNDb25zdDY0VmFsdWUuaAkocmV2aXNpb24gMTk1OTcwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzQ29uc3Q2NFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTc3LDggKzc3
LDggQEAgcHJvdGVjdGVkOgogCiAgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKIAotICAgIENv
bnN0NjRWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3JpZ2luIG9yaWdpbiwgaW50NjRfdCB2YWx1ZSkK
LSAgICAgICAgOiBWYWx1ZShpbmRleCwgQ2hlY2tlZE9wY29kZSwgQ29uc3Q2NCwgSW50NjQsIG9y
aWdpbikKKyAgICBDb25zdDY0VmFsdWUoT3JpZ2luIG9yaWdpbiwgaW50NjRfdCB2YWx1ZSkKKyAg
ICAgICAgOiBWYWx1ZShDaGVja2VkT3Bjb2RlLCBDb25zdDY0LCBJbnQ2NCwgb3JpZ2luKQogICAg
ICAgICAsIG1fdmFsdWUodmFsdWUpCiAgICAgewogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM0NvbnN0RG91YmxlVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNDb25zdERvdWJsZVZhbHVlLmgJKHJldmlzaW9uIDE5NTk3MCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0RG91YmxlVmFsdWUuaAkod29ya2luZyBj
b3B5KQpAQCAtNzAsOCArNzAsOCBAQCBwcm90ZWN0ZWQ6CiBwcml2YXRlOgogICAgIGZyaWVuZCBj
bGFzcyBQcm9jZWR1cmU7CiAKLSAgICBDb25zdERvdWJsZVZhbHVlKHVuc2lnbmVkIGluZGV4LCBP
cmlnaW4gb3JpZ2luLCBkb3VibGUgdmFsdWUpCi0gICAgICAgIDogVmFsdWUoaW5kZXgsIENoZWNr
ZWRPcGNvZGUsIENvbnN0RG91YmxlLCBEb3VibGUsIG9yaWdpbikKKyAgICBDb25zdERvdWJsZVZh
bHVlKE9yaWdpbiBvcmlnaW4sIGRvdWJsZSB2YWx1ZSkKKyAgICAgICAgOiBWYWx1ZShDaGVja2Vk
T3Bjb2RlLCBDb25zdERvdWJsZSwgRG91YmxlLCBvcmlnaW4pCiAgICAgICAgICwgbV92YWx1ZSh2
YWx1ZSkKICAgICB7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29u
c3RGbG9hdFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
Q29uc3RGbG9hdFZhbHVlLmgJKHJldmlzaW9uIDE5NTk3MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0NvbnN0RmxvYXRWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02OCw4ICs2OCw4
IEBAIHByb3RlY3RlZDoKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKIAot
ICAgIENvbnN0RmxvYXRWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3JpZ2luIG9yaWdpbiwgZmxvYXQg
dmFsdWUpCi0gICAgICAgIDogVmFsdWUoaW5kZXgsIENoZWNrZWRPcGNvZGUsIENvbnN0RmxvYXQs
IEZsb2F0LCBvcmlnaW4pCisgICAgQ29uc3RGbG9hdFZhbHVlKE9yaWdpbiBvcmlnaW4sIGZsb2F0
IHZhbHVlKQorICAgICAgICA6IFZhbHVlKENoZWNrZWRPcGNvZGUsIENvbnN0RmxvYXQsIEZsb2F0
LCBvcmlnaW4pCiAgICAgICAgICwgbV92YWx1ZSh2YWx1ZSkKICAgICB7CiAgICAgfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29udHJvbFZhbHVlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29udHJvbFZhbHVlLmgJKHJldmlzaW9uIDE5NTk3
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnRyb2xWYWx1ZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xMDksOCArMTA5LDggQEAgcHJvdGVjdGVkOgogCiAgICAgLy8gVXNlIHRoaXMg
Zm9yIHN1YmNsYXNzZXMuCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgotICAg
IENvbnRyb2xWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgVHlwZSB0eXBlLCBP
cmlnaW4gb3JpZ2luLCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQotICAgICAgICA6IFZhbHVlKGlu
ZGV4LCBDaGVja2VkT3Bjb2RlLCBvcGNvZGUsIHR5cGUsIG9yaWdpbiwgYXJndW1lbnRzLi4uKQor
ICAgIENvbnRyb2xWYWx1ZShPcGNvZGUgb3Bjb2RlLCBUeXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4s
IEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCisgICAgICAgIDogVmFsdWUoQ2hlY2tlZE9wY29kZSwg
b3Bjb2RlLCB0eXBlLCBvcmlnaW4sIGFyZ3VtZW50cy4uLikKICAgICB7CiAgICAgICAgIEFTU0VS
VChhY2NlcHRzKG9wY29kZSkpOwogICAgIH0KQEAgLTEyMiwyMiArMTIyLDIyIEBAIHByaXZhdGU6
CiAgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKIAogICAgIC8vIFVzZSB0aGlzIGZvciBPb3Bz
LgotICAgIENvbnRyb2xWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgT3JpZ2lu
IG9yaWdpbikKLSAgICAgICAgOiBWYWx1ZShpbmRleCwgQ2hlY2tlZE9wY29kZSwgb3Bjb2RlLCBW
b2lkLCBvcmlnaW4pCisgICAgQ29udHJvbFZhbHVlKE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmln
aW4pCisgICAgICAgIDogVmFsdWUoQ2hlY2tlZE9wY29kZSwgb3Bjb2RlLCBWb2lkLCBvcmlnaW4p
CiAgICAgewogICAgICAgICBBU1NFUlQob3Bjb2RlID09IE9vcHMpOwogICAgIH0KIAogICAgIC8v
IFVzZSB0aGlzIGZvciBSZXR1cm4uCi0gICAgQ29udHJvbFZhbHVlKHVuc2lnbmVkIGluZGV4LCBP
cGNvZGUgb3Bjb2RlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogcmVzdWx0KQotICAgICAgICA6IFZh
bHVlKGluZGV4LCBDaGVja2VkT3Bjb2RlLCBvcGNvZGUsIFZvaWQsIG9yaWdpbiwgcmVzdWx0KQor
ICAgIENvbnRyb2xWYWx1ZShPcGNvZGUgb3Bjb2RlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogcmVz
dWx0KQorICAgICAgICA6IFZhbHVlKENoZWNrZWRPcGNvZGUsIG9wY29kZSwgVm9pZCwgb3JpZ2lu
LCByZXN1bHQpCiAgICAgewogICAgICAgICBBU1NFUlQob3Bjb2RlID09IFJldHVybik7CiAgICAg
fQogCiAgICAgLy8gVXNlIHRoaXMgZm9yIEp1bXAuCi0gICAgQ29udHJvbFZhbHVlKHVuc2lnbmVk
IGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBPcmlnaW4gb3JpZ2luLCBjb25zdCBGcmVxdWVudGVkQmxv
Y2smIHRhcmdldCkKLSAgICAgICAgOiBWYWx1ZShpbmRleCwgQ2hlY2tlZE9wY29kZSwgb3Bjb2Rl
LCBWb2lkLCBvcmlnaW4pCisgICAgQ29udHJvbFZhbHVlKE9wY29kZSBvcGNvZGUsIE9yaWdpbiBv
cmlnaW4sIGNvbnN0IEZyZXF1ZW50ZWRCbG9jayYgdGFyZ2V0KQorICAgICAgICA6IFZhbHVlKENo
ZWNrZWRPcGNvZGUsIG9wY29kZSwgVm9pZCwgb3JpZ2luKQogICAgIHsKICAgICAgICAgQVNTRVJU
KG9wY29kZSA9PSBKdW1wKTsKICAgICAgICAgbV9zdWNjZXNzb3JzLmFwcGVuZCh0YXJnZXQpOwpA
QCAtMTQ1LDkgKzE0NSw5IEBAIHByaXZhdGU6CiAKICAgICAvLyBVc2UgdGhpcyBmb3IgQnJhbmNo
LgogICAgIENvbnRyb2xWYWx1ZSgKLSAgICAgICAgdW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNv
ZGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBwcmVkaWNhdGUsCisgICAgICAgIE9wY29kZSBvcGNv
ZGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBwcmVkaWNhdGUsCiAgICAgICAgIGNvbnN0IEZyZXF1
ZW50ZWRCbG9jayYgeWVzLCBjb25zdCBGcmVxdWVudGVkQmxvY2smIG5vKQotICAgICAgICA6IFZh
bHVlKGluZGV4LCBDaGVja2VkT3Bjb2RlLCBvcGNvZGUsIFZvaWQsIG9yaWdpbiwgcHJlZGljYXRl
KQorICAgICAgICA6IFZhbHVlKENoZWNrZWRPcGNvZGUsIG9wY29kZSwgVm9pZCwgb3JpZ2luLCBw
cmVkaWNhdGUpCiAgICAgewogICAgICAgICBBU1NFUlQob3Bjb2RlID09IEJyYW5jaCk7CiAgICAg
ICAgIG1fc3VjY2Vzc29ycy5hcHBlbmQoeWVzKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0VmZmVjdHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0VmZmVjdHMuY3BwCShyZXZpc2lvbiAxOTU5NzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNFZmZlY3RzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsNyArNDQsNyBAQCBib29s
IGludGVyZmVyZXNXaXRoVGVybWluYWwoY29uc3QgRWZmZWN0CiB7CiAgICAgaWYgKCF0ZXJtaW5h
bC50ZXJtaW5hbCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBvdGhlci50ZXJt
aW5hbCB8fCBvdGhlci5jb250cm9sRGVwZW5kZW50IHx8IG90aGVyLndyaXRlc1NTQVN0YXRlIHx8
IG90aGVyLndyaXRlczsKKyAgICByZXR1cm4gb3RoZXIudGVybWluYWwgfHwgb3RoZXIuY29udHJv
bERlcGVuZGVudCB8fCBvdGhlci53cml0ZXNMb2NhbFN0YXRlIHx8IG90aGVyLndyaXRlczsKIH0K
IAogYm9vbCBpbnRlcmZlcmVzV2l0aEV4aXRTaWRld2F5cyhjb25zdCBFZmZlY3RzJiBleGl0c1Np
ZGV3YXlzLCBjb25zdCBFZmZlY3RzJiBvdGhlcikKQEAgLTU0LDExICs1NCwxMSBAQCBib29sIGlu
dGVyZmVyZXNXaXRoRXhpdFNpZGV3YXlzKGNvbnN0IEVmCiAgICAgcmV0dXJuIG90aGVyLmNvbnRy
b2xEZXBlbmRlbnQgfHwgb3RoZXIud3JpdGVzOwogfQogCi1ib29sIGludGVyZmVyZXNXaXRoV3Jp
dGVzU1NBU3RhdGUoY29uc3QgRWZmZWN0cyYgd3JpdGVzU1NBU3RhdGUsIGNvbnN0IEVmZmVjdHMm
IG90aGVyKQorYm9vbCBpbnRlcmZlcmVzV2l0aFdyaXRlc1NTQVN0YXRlKGNvbnN0IEVmZmVjdHMm
IHdyaXRlc0xvY2FsU3RhdGUsIGNvbnN0IEVmZmVjdHMmIG90aGVyKQogewotICAgIGlmICghd3Jp
dGVzU1NBU3RhdGUud3JpdGVzU1NBU3RhdGUpCisgICAgaWYgKCF3cml0ZXNMb2NhbFN0YXRlLndy
aXRlc0xvY2FsU3RhdGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gb3RoZXIu
d3JpdGVzU1NBU3RhdGUgfHwgb3RoZXIucmVhZHNTU0FTdGF0ZTsKKyAgICByZXR1cm4gb3RoZXIu
d3JpdGVzTG9jYWxTdGF0ZSB8fCBvdGhlci5yZWFkc0xvY2FsU3RhdGU7CiB9CiAKIH0gLy8gYW5v
bnltb3VzIG5hbWVzcGFjZQpAQCAtNjksNyArNjksNyBAQCBib29sIEVmZmVjdHM6OmludGVyZmVy
ZXMoY29uc3QgRWZmZWN0cyYgCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIGlmIChpbnRlcmZl
cmVzV2l0aEV4aXRTaWRld2F5cygqdGhpcywgb3RoZXIpIHx8IGludGVyZmVyZXNXaXRoRXhpdFNp
ZGV3YXlzKG90aGVyLCAqdGhpcykpCiAgICAgICAgIHJldHVybiB0cnVlOwotICAgIGlmIChpbnRl
cmZlcmVzV2l0aFdyaXRlc1NTQVN0YXRlKCp0aGlzLCBvdGhlcikgfHwgaW50ZXJmZXJlc1dpdGhX
cml0ZXNTU0FTdGF0ZShvdGhlciwgKnRoaXMpKQorICAgIGlmIChpbnRlcmZlcmVzV2l0aFdyaXRl
c0xvY2FsU3RhdGUoKnRoaXMsIG90aGVyKSB8fCBpbnRlcmZlcmVzV2l0aFdyaXRlc0xvY2FsU3Rh
dGUob3RoZXIsICp0aGlzKSkKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgcmV0dXJuIHdyaXRl
cy5vdmVybGFwcyhvdGhlci53cml0ZXMpCiAgICAgICAgIHx8IHdyaXRlcy5vdmVybGFwcyhvdGhl
ci5yZWFkcykKQEAgLTg1LDEwICs4NSwxMCBAQCB2b2lkIEVmZmVjdHM6OmR1bXAoUHJpbnRTdHJl
YW0mIG91dCkgY29uCiAgICAgICAgIG91dC5wcmludChjb21tYSwgIkV4aXRzU2lkZXdheXMiKTsK
ICAgICBpZiAoY29udHJvbERlcGVuZGVudCkKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiQ29u
dHJvbERlcGVuZGVudCIpOwotICAgIGlmICh3cml0ZXNTU0FTdGF0ZSkKLSAgICAgICAgb3V0LnBy
aW50KGNvbW1hLCAiV3JpdGVzU1NBU3RhdGUiKTsKLSAgICBpZiAocmVhZHNTU0FTdGF0ZSkKLSAg
ICAgICAgb3V0LnByaW50KGNvbW1hLCAiUmVhZHNTU0FTdGF0ZSIpOworICAgIGlmICh3cml0ZXNM
b2NhbFN0YXRlKQorICAgICAgICBvdXQucHJpbnQoY29tbWEsICJXcml0ZXNMb2NhbFN0YXRlIik7
CisgICAgaWYgKHJlYWRzTG9jYWxTdGF0ZSkKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiUmVh
ZHNMb2NhbFN0YXRlIik7CiAgICAgaWYgKHdyaXRlcykKICAgICAgICAgb3V0LnByaW50KGNvbW1h
LCAiV3JpdGVzOiIsIHdyaXRlcyk7CiAgICAgaWYgKHJlYWRzKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzRWZmZWN0cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0VmZmVjdHMuaAkocmV2aXNpb24gMTk1OTcwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzRWZmZWN0cy5oCSh3b3JraW5nIGNvcHkpCkBAIC00OCwxNCArNDgsMTQgQEAg
c3RydWN0IEVmZmVjdHMgewogICAgIC8vIFRydWUgaWYgdGhlIGluc3RydWN0aW9uIG1heSBjaGFu
Z2Ugc2VtYW50aWNzIGlmIGhvaXN0ZWQgYWJvdmUgc29tZSBjb250cm9sIGZsb3cuCiAgICAgYm9v
bCBjb250cm9sRGVwZW5kZW50IHsgZmFsc2UgfTsKIAotICAgIC8vIFRydWUgaWYgdGhpcyB3cml0
ZXMgdG8gdGhlIFNTQSBzdGF0ZS4gT3BlcmF0aW9ucyB0aGF0IHdyaXRlIFNTQSBzdGF0ZSBkb24n
dCB3cml0ZSB0byBhbnl0aGluZwotICAgIC8vIGluICJtZW1vcnkiIGJ1dCB0aGV5IGhhdmUgYSBz
aWRlLWVmZmVjdCBhbnl3YXkuIFRoaXMgaXMgZm9yIG1vZGVsaW5nIFVwc2lsb25zLiBZb3UgY2Fu
IGlnbm9yZQotICAgIC8vIHRoaXMgaWYgeW91IGhhdmUgeW91ciBvd24gd2F5IG9mIG1vZGVsaW5n
IFVwc2lsb25zIG9yIGlmIHlvdSBpbnRlbmQgdG8ganVzdCByZWJ1aWxkIHRoZW0KKyAgICAvLyBU
cnVlIGlmIHRoaXMgd3JpdGVzIHRvIHRoZSBsb2NhbCBzdGF0ZS4gT3BlcmF0aW9ucyB0aGF0IHdy
aXRlIGxvY2FsIHN0YXRlIGRvbid0IHdyaXRlIHRvIGFueXRoaW5nCisgICAgLy8gaW4gIm1lbW9y
eSIgYnV0IHRoZXkgaGF2ZSBhIHNpZGUtZWZmZWN0IGFueXdheS4gVGhpcyBpcyBmb3IgbW9kZWxp
bmcgVXBzaWxvbnMgYW5kIFNldHMuIFlvdSBjYW4gaWdub3JlCisgICAgLy8gdGhpcyBpZiB5b3Ug
aGF2ZSB5b3VyIG93biB3YXkgb2YgbW9kZWxpbmcgVXBzaWxvbnMgYW5kIFNldHMgb3IgaWYgeW91
IGludGVuZCB0byBqdXN0IHJlYnVpbGQgdGhlbQogICAgIC8vIGFueXdheS4KLSAgICBib29sIHdy
aXRlc1NTQVN0YXRlIHsgZmFsc2UgfTsKKyAgICBib29sIHdyaXRlc0xvY2FsU3RhdGUgeyBmYWxz
ZSB9OwogCi0gICAgLy8gVHJ1ZSBpZiB0aGlzIHJlYWRzIGZyb20gdGhlIFNTQSBzdGF0ZS4gVGhp
cyBpcyBvbmx5IHVzZWQgZm9yIFBoaS4KLSAgICBib29sIHJlYWRzU1NBU3RhdGUgeyBmYWxzZSB9
OworICAgIC8vIFRydWUgaWYgdGhpcyByZWFkcyBmcm9tIHRoZSBsb2NhbCBzdGF0ZS4gVGhpcyBp
cyBvbmx5IHVzZWQgZm9yIFBoaSBhbmQgR2V0LgorICAgIGJvb2wgcmVhZHNMb2NhbFN0YXRlIHsg
ZmFsc2UgfTsKIAogICAgIEhlYXBSYW5nZSB3cml0ZXM7CiAgICAgSGVhcFJhbmdlIHJlYWRzOwpA
QCAtNzcsNyArNzcsNyBAQCBzdHJ1Y3QgRWZmZWN0cyB7CiAKICAgICBib29sIG11c3RFeGVjdXRl
KCkgY29uc3QKICAgICB7Ci0gICAgICAgIHJldHVybiB0ZXJtaW5hbCB8fCBleGl0c1NpZGV3YXlz
IHx8IHdyaXRlc1NTQVN0YXRlIHx8IHdyaXRlczsKKyAgICAgICAgcmV0dXJuIHRlcm1pbmFsIHx8
IGV4aXRzU2lkZXdheXMgfHwgd3JpdGVzTG9jYWxTdGF0ZSB8fCB3cml0ZXM7CiAgICAgfQogCiAg
ICAgLy8gUmV0dXJucyB0cnVlIGlmIHJlb3JkZXJpbmcgaW5zdHJ1Y3Rpb25zIHdpdGggdGhlc2Ug
cmVzcGVjdGl2ZSBlZmZlY3RzIHdvdWxkIGNoYW5nZSBwcm9ncmFtCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNFbGltaW5hdGVDb21tb25TdWJleHByZXNzaW9ucy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRWxpbWluYXRlQ29tbW9uU3ViZXhw
cmVzc2lvbnMuY3BwCShyZXZpc2lvbiAxOTU5NzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNFbGltaW5hdGVDb21tb25TdWJleHByZXNzaW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEzMSwxMiArMTMxLDEwIEBAIHB1YmxpYzoKICAgICAgICAgICAgIG1faW1wdXJlQmxvY2tEYXRh
W21fYmxvY2tdID0gbV9kYXRhOwogICAgICAgICB9CiAKLSAgICAgICAgZm9yIChTbG90QmFzZVZh
bHVlKiBzdGFjayA6IG1fc3RhY2tzKQotICAgICAgICAgICAgbV9pbnNlcnRpb25TZXQuaW5zZXJ0
VmFsdWUoMCwgc3RhY2spOwogICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9wcm9j
KSB7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHZhbHVlSW5kZXggPSAwOyB2YWx1ZUluZGV4
IDwgYmxvY2stPnNpemUoKTsgKyt2YWx1ZUluZGV4KSB7Ci0gICAgICAgICAgICAgICAgYXV0byBp
dGVyID0gbV9zdG9yZXMuZmluZChibG9jay0+YXQodmFsdWVJbmRleCkpOwotICAgICAgICAgICAg
ICAgIGlmIChpdGVyID09IG1fc3RvcmVzLmVuZCgpKQorICAgICAgICAgICAgICAgIGF1dG8gaXRl
ciA9IG1fc2V0cy5maW5kKGJsb2NrLT5hdCh2YWx1ZUluZGV4KSk7CisgICAgICAgICAgICAgICAg
aWYgKGl0ZXIgPT0gbV9zZXRzLmVuZCgpKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
IAogICAgICAgICAgICAgICAgIGZvciAoVmFsdWUqIHZhbHVlIDogaXRlci0+dmFsdWUpCkBAIC0z
NjksMjEgKzM2NywxOSBAQCBwcml2YXRlOgogICAgICAgICAvLyBGSVhNRTogSXQgd291bGQgYmUg
d2F5IGJldHRlciBpZiB0aGlzIHBoYXNlIGp1c3QgZGlkIFNTQSBjYWxjdWxhdGlvbiBkaXJlY3Rs
eS4KICAgICAgICAgLy8gUmlnaHQgbm93IHdlJ3JlIHJlbHlpbmcgb24gdGhlIGZhY3QgdGhhdCBD
U0UncyBwb3NpdGlvbiBpbiB0aGUgcGhhc2Ugb3JkZXIgaXMKICAgICAgICAgLy8gYWxtb3N0IHJp
Z2h0IGJlZm9yZSBTU0EgZml4dXAuCi0gICAgICAgICAgICAKLSAgICAgICAgU2xvdEJhc2VWYWx1
ZSogc3RhY2sgPSBtX3Byb2MuYWRkPFNsb3RCYXNlVmFsdWU+KAotICAgICAgICAgICAgbV92YWx1
ZS0+b3JpZ2luKCksIG1fcHJvYy5hZGRBbm9ueW1vdXNTdGFja1Nsb3QobV92YWx1ZS0+dHlwZSgp
KSk7Ci0gICAgICAgIG1fc3RhY2tzLmFwcGVuZChzdGFjayk7CiAKLSAgICAgICAgTWVtb3J5VmFs
dWUqIGxvYWQgPSBtX2luc2VydGlvblNldC5pbnNlcnQ8TWVtb3J5VmFsdWU+KAotICAgICAgICAg
ICAgbV9pbmRleCwgTG9hZCwgbV92YWx1ZS0+dHlwZSgpLCBtX3ZhbHVlLT5vcmlnaW4oKSwgc3Rh
Y2spOworICAgICAgICBWYXJpYWJsZSogdmFyaWFibGUgPSBtX3Byb2MuYWRkVmFyaWFibGUobV92
YWx1ZS0+dHlwZSgpKTsKKworICAgICAgICBWYXJpYWJsZVZhbHVlKiBnZXQgPSBtX2luc2VydGlv
blNldC5pbnNlcnQ8VmFyaWFibGVWYWx1ZT4oCisgICAgICAgICAgICBtX2luZGV4LCBHZXQsIG1f
dmFsdWUtPm9yaWdpbigpLCB2YXJpYWJsZSk7CiAgICAgICAgIGlmICh2ZXJib3NlKQotICAgICAg
ICAgICAgZGF0YUxvZygiICAgIEluc2VydGluZyBsb2FkIG9mIHZhbHVlOiAiLCAqbG9hZCwgIlxu
Iik7Ci0gICAgICAgIG1fdmFsdWUtPnJlcGxhY2VXaXRoSWRlbnRpdHkobG9hZCk7CisgICAgICAg
ICAgICBkYXRhTG9nKCIgICAgSW5zZXJ0aW5nIGdldCBvZiB2YWx1ZTogIiwgKmdldCwgIlxuIik7
CisgICAgICAgIG1fdmFsdWUtPnJlcGxhY2VXaXRoSWRlbnRpdHkoZ2V0KTsKICAgICAgICAgICAg
IAogICAgICAgICBmb3IgKE1lbW9yeVZhbHVlKiBtYXRjaCA6IG1hdGNoZXMpIHsKLSAgICAgICAg
ICAgIFZlY3RvcjxWYWx1ZSo+JiBzdG9yZXMgPSBtX3N0b3Jlcy5hZGQobWF0Y2gsIFZlY3RvcjxW
YWx1ZSo+KCkpLml0ZXJhdG9yLT52YWx1ZTsKKyAgICAgICAgICAgIFZlY3RvcjxWYWx1ZSo+JiBz
ZXRzID0gbV9zZXRzLmFkZChtYXRjaCwgVmVjdG9yPFZhbHVlKj4oKSkuaXRlcmF0b3ItPnZhbHVl
OwogCi0gICAgICAgICAgICBWYWx1ZSogdmFsdWUgPSByZXBsYWNlKG1hdGNoLCBzdG9yZXMpOwor
ICAgICAgICAgICAgVmFsdWUqIHZhbHVlID0gcmVwbGFjZShtYXRjaCwgc2V0cyk7CiAgICAgICAg
ICAgICBpZiAoIXZhbHVlKSB7CiAgICAgICAgICAgICAgICAgaWYgKG1hdGNoLT5pc1N0b3JlKCkp
CiAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gbWF0Y2gtPmNoaWxkKDApOwpAQCAtMzkxLDgg
KzM4Nyw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gbWF0Y2g7CiAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICBWYWx1ZSogc3RvcmUg
PSBtX3Byb2MuYWRkPE1lbW9yeVZhbHVlPihTdG9yZSwgbV92YWx1ZS0+b3JpZ2luKCksIHZhbHVl
LCBzdGFjayk7Ci0gICAgICAgICAgICBzdG9yZXMuYXBwZW5kKHN0b3JlKTsKKyAgICAgICAgICAg
IFZhbHVlKiBzZXQgPSBtX3Byb2MuYWRkPFZhcmlhYmxlVmFsdWU+KFNldCwgbV92YWx1ZS0+b3Jp
Z2luKCksIHZhcmlhYmxlLCB2YWx1ZSk7CisgICAgICAgICAgICBzZXRzLmFwcGVuZChzZXQpOwog
ICAgICAgICB9CiAKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC00OTksOCArNDk1LDcgQEAgcHJp
dmF0ZToKICAgICB1bnNpZ25lZCBtX2luZGV4OwogICAgIFZhbHVlKiBtX3ZhbHVlOwogCi0gICAg
VmVjdG9yPFNsb3RCYXNlVmFsdWUqPiBtX3N0YWNrczsKLSAgICBIYXNoTWFwPFZhbHVlKiwgVmVj
dG9yPFZhbHVlKj4+IG1fc3RvcmVzOworICAgIEhhc2hNYXA8VmFsdWUqLCBWZWN0b3I8VmFsdWUq
Pj4gbV9zZXRzOwogCiAgICAgSW5zZXJ0aW9uU2V0IG1faW5zZXJ0aW9uU2V0OwogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNGaXhTU0EuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0ZpeFNTQS5jcHAJKHJldmlzaW9uIDE5NTk3MCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0ZpeFNTQS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0
LDE0ICszNCwxMiBAQAogI2luY2x1ZGUgIkIzRG9taW5hdG9ycy5oIgogI2luY2x1ZGUgIkIzSW5k
ZXhTZXQuaCIKICNpbmNsdWRlICJCM0luc2VydGlvblNldElubGluZXMuaCIKLSNpbmNsdWRlICJC
M01lbW9yeVZhbHVlLmgiCiAjaW5jbHVkZSAiQjNQaGFzZVNjb3BlLmgiCiAjaW5jbHVkZSAiQjNQ
cm9jZWR1cmVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQjNTU0FDYWxjdWxhdG9yLmgiCi0jaW5jbHVk
ZSAiQjNTbG90QmFzZVZhbHVlLmgiCi0jaW5jbHVkZSAiQjNTdGFja1Nsb3QuaCIKICNpbmNsdWRl
ICJCM1Vwc2lsb25WYWx1ZS5oIgogI2luY2x1ZGUgIkIzVmFsdWVJbmxpbmVzLmgiCisjaW5jbHVk
ZSAiQjNWYXJpYWJsZVZhbHVlLmgiCiAjaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgogCiBu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKQEAgLTUyLDIzICs1MCwxNiBAQCBjb25zdCBi
b29sIHZlcmJvc2UgPSBmYWxzZTsKIAogdm9pZCBkZW1vdGVWYWx1ZXMoUHJvY2VkdXJlJiBwcm9j
LCBjb25zdCBJbmRleFNldDxWYWx1ZT4mIHZhbHVlcykKIHsKLSAgICBIYXNoTWFwPFZhbHVlKiwg
U2xvdEJhc2VWYWx1ZSo+IG1hcDsKLSAgICBIYXNoTWFwPFZhbHVlKiwgU2xvdEJhc2VWYWx1ZSo+
IHBoaU1hcDsKKyAgICBIYXNoTWFwPFZhbHVlKiwgVmFyaWFibGUqPiBtYXA7CisgICAgSGFzaE1h
cDxWYWx1ZSosIFZhcmlhYmxlKj4gcGhpTWFwOwogCiAgICAgLy8gQ3JlYXRlIHN0YWNrIHNsb3Rz
LgotICAgIEluc2VydGlvblNldCBpbnNlcnRpb25TZXQocHJvYyk7CiAgICAgZm9yIChWYWx1ZSog
dmFsdWUgOiB2YWx1ZXMudmFsdWVzKHByb2MudmFsdWVzKCkpKSB7Ci0gICAgICAgIFNsb3RCYXNl
VmFsdWUqIHN0YWNrID0gaW5zZXJ0aW9uU2V0Lmluc2VydDxTbG90QmFzZVZhbHVlPigKLSAgICAg
ICAgICAgIDAsIHZhbHVlLT5vcmlnaW4oKSwgcHJvYy5hZGRBbm9ueW1vdXNTdGFja1Nsb3QodmFs
dWUtPnR5cGUoKSkpOwotICAgICAgICBtYXAuYWRkKHZhbHVlLCBzdGFjayk7Ci0KLSAgICAgICAg
aWYgKHZhbHVlLT5vcGNvZGUoKSA9PSBQaGkpIHsKLSAgICAgICAgICAgIFNsb3RCYXNlVmFsdWUq
IHBoaVN0YWNrID0gaW5zZXJ0aW9uU2V0Lmluc2VydDxTbG90QmFzZVZhbHVlPigKLSAgICAgICAg
ICAgICAgICAwLCB2YWx1ZS0+b3JpZ2luKCksIHByb2MuYWRkQW5vbnltb3VzU3RhY2tTbG90KHZh
bHVlLT50eXBlKCkpKTsKLSAgICAgICAgICAgIHBoaU1hcC5hZGQodmFsdWUsIHBoaVN0YWNrKTsK
LSAgICAgICAgfQorICAgICAgICBtYXAuYWRkKHZhbHVlLCBtX3Byb2MuYWRkVmFyaWFibGUodmFs
dWUtPnR5cGUoKSkpOworCisgICAgICAgIGlmICh2YWx1ZS0+b3Bjb2RlKCkgPT0gUGhpKQorICAg
ICAgICAgICAgcGhpTWFwLmFkZCh2YWx1ZSwgbV9wcm9jLmFkZFZhcmlhYmxlKHZhbHVlLT50eXBl
KCkpKTsKICAgICB9Ci0gICAgaW5zZXJ0aW9uU2V0LmV4ZWN1dGUocHJvY1swXSk7CiAKICAgICBp
ZiAodmVyYm9zZSkgewogICAgICAgICBkYXRhTG9nKCJEZW1vdGluZyB2YWx1ZXMgYXMgZm9sbG93
czpcbiIpOwpAQCAtODUsMzYgKzc2LDM3IEBAIHZvaWQgZGVtb3RlVmFsdWVzKFByb2NlZHVyZSYg
cHJvYywgY29uc3QKICAgICB9CiAKICAgICAvLyBDaGFuZ2UgYWNjZXNzZXMgdG8gdGhlIHZhbHVl
cyB0byBhY2Nlc3NlcyB0byB0aGUgc3RhY2sgc2xvdHMuCisgICAgSW5zZXJ0aW9uU2V0IGluc2Vy
dGlvblNldChwcm9jKTsKICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogcHJvYykgewogICAg
ICAgICBmb3IgKHVuc2lnbmVkIHZhbHVlSW5kZXggPSAwOyB2YWx1ZUluZGV4IDwgYmxvY2stPnNp
emUoKTsgKyt2YWx1ZUluZGV4KSB7CiAgICAgICAgICAgICBWYWx1ZSogdmFsdWUgPSBibG9jay0+
YXQodmFsdWVJbmRleCk7CiAKICAgICAgICAgICAgIGlmICh2YWx1ZS0+b3Bjb2RlKCkgPT0gUGhp
KSB7Ci0gICAgICAgICAgICAgICAgaWYgKFNsb3RCYXNlVmFsdWUqIHNsb3RCYXNlID0gcGhpTWFw
LmdldCh2YWx1ZSkpIHsKKyAgICAgICAgICAgICAgICBpZiAoVmFyaWFibGUqIHZhcmlhYmxlID0g
cGhpTWFwLmdldCh2YWx1ZSkpIHsKICAgICAgICAgICAgICAgICAgICAgdmFsdWUtPnJlcGxhY2VX
aXRoSWRlbnRpdHkoCi0gICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0
PE1lbW9yeVZhbHVlPigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZUluZGV4LCBM
b2FkLCB2YWx1ZS0+dHlwZSgpLCB2YWx1ZS0+b3JpZ2luKCksIHNsb3RCYXNlKSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0PFZhcmlhYmxlVmFsdWU+KAorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlSW5kZXgsIEdldCwgdmFsdWUtPm9yaWdpbigp
LCB2YXJpYWJsZSkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzZSB7CiAg
ICAgICAgICAgICAgICAgZm9yIChWYWx1ZSomIGNoaWxkIDogdmFsdWUtPmNoaWxkcmVuKCkpIHsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKFNsb3RCYXNlVmFsdWUqIHNsb3RCYXNlID0gbWFwLmdl
dChjaGlsZCkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkID0gaW5zZXJ0aW9uU2V0
Lmluc2VydDxNZW1vcnlWYWx1ZT4oCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVJ
bmRleCwgTG9hZCwgY2hpbGQtPnR5cGUoKSwgdmFsdWUtPm9yaWdpbigpLCBzbG90QmFzZSk7Cisg
ICAgICAgICAgICAgICAgICAgIGlmIChWYXJpYWJsZSogdmFyaWFibGUgPSBtYXAuZ2V0KGNoaWxk
KSkgeworICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGQgPSBpbnNlcnRpb25TZXQuaW5zZXJ0
PFZhcmlhYmxlVmFsdWU+KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlSW5kZXgs
IEdldCwgdmFsdWUtPm9yaWdpbigpLCB2YXJpYWJsZSk7CiAgICAgICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICB9CiAKICAgICAgICAgICAgICAgICBpZiAoVXBzaWxvblZhbHVlKiB1
cHNpbG9uID0gdmFsdWUtPmFzPFVwc2lsb25WYWx1ZT4oKSkgewotICAgICAgICAgICAgICAgICAg
ICBpZiAoU2xvdEJhc2VWYWx1ZSogc2xvdEJhc2UgPSBwaGlNYXAuZ2V0KHVwc2lsb24tPnBoaSgp
KSkgewotICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydDxNZW1vcnlW
YWx1ZT4oCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVJbmRleCwgU3RvcmUsIHVw
c2lsb24tPm9yaWdpbigpLCB1cHNpbG9uLT5jaGlsZCgwKSwgc2xvdEJhc2UpOworICAgICAgICAg
ICAgICAgICAgICBpZiAoVmFyaWFibGUqIHZhcmlhYmxlID0gcGhpTWFwLmdldCh1cHNpbG9uLT5w
aGkoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnQ8VmFy
aWFibGVWYWx1ZT4oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVJbmRleCwgU2V0
LCB1cHNpbG9uLT5vcmlnaW4oKSwgdmFyaWFibGUsIHVwc2lsb24tPmNoaWxkKDApKTsKICAgICAg
ICAgICAgICAgICAgICAgICAgIHZhbHVlLT5yZXBsYWNlV2l0aE5vcCgpOwogICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogCi0gICAgICAgICAg
ICBpZiAoU2xvdEJhc2VWYWx1ZSogc2xvdEJhc2UgPSBtYXAuZ2V0KHZhbHVlKSkgewotICAgICAg
ICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnQ8TWVtb3J5VmFsdWU+KAotICAgICAgICAgICAg
ICAgICAgICB2YWx1ZUluZGV4ICsgMSwgU3RvcmUsIHZhbHVlLT5vcmlnaW4oKSwgdmFsdWUsIHNs
b3RCYXNlKTsKKyAgICAgICAgICAgIGlmIChWYXJpYWJsZSogdmFyaWFibGUgPSBtYXAuZ2V0KHZh
bHVlKSkgeworICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnQ8VmFyaWFibGVWYWx1
ZT4oCisgICAgICAgICAgICAgICAgICAgIHZhbHVlSW5kZXggKyAxLCBTZXQsIHZhbHVlLT5vcmln
aW4oKSwgdmFyaWFibGUsIHZhbHVlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAg
ICBpbnNlcnRpb25TZXQuZXhlY3V0ZShibG9jayk7CkBAIC0xMjQsMTI0ICsxMTYsNjEgQEAgdm9p
ZCBkZW1vdGVWYWx1ZXMoUHJvY2VkdXJlJiBwcm9jLCBjb25zdAogYm9vbCBmaXhTU0EoUHJvY2Vk
dXJlJiBwcm9jKQogewogICAgIFBoYXNlU2NvcGUgcGhhc2VTY29wZShwcm9jLCAiZml4U1NBIik7
Ci0gICAgCi0gICAgLy8gQ29sbGVjdCB0aGUgc3RhY2sgInZhcmlhYmxlcyIuIElmIHRoZXJlIGFy
ZW4ndCBhbnksIHRoZW4gd2UgZG9uJ3QgaGF2ZSBhbnl0aGluZyB0byBkby4KLSAgICAvLyBUaGF0
J3MgYSBmYWlybHkgY29tbW9uIGNhc2UuCi0gICAgSGFzaE1hcDxTdGFja1Nsb3QqLCBUeXBlPiBz
dGFja1ZhcmlhYmxlOwotICAgIGZvciAoVmFsdWUqIHZhbHVlIDogcHJvYy52YWx1ZXMoKSkgewot
ICAgICAgICBpZiAoU2xvdEJhc2VWYWx1ZSogc2xvdEJhc2UgPSB2YWx1ZS0+YXM8U2xvdEJhc2VW
YWx1ZT4oKSkgewotICAgICAgICAgICAgU3RhY2tTbG90KiBzdGFjayA9IHNsb3RCYXNlLT5zbG90
KCk7Ci0gICAgICAgICAgICBpZiAoc3RhY2stPmtpbmQoKSA9PSBTdGFja1Nsb3RLaW5kOjpBbm9u
eW1vdXMpCi0gICAgICAgICAgICAgICAgc3RhY2tWYXJpYWJsZS5hZGQoc3RhY2ssIFZvaWQpOwot
ICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKHN0YWNrVmFyaWFibGUuaXNFbXB0eSgpKQotICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAvLyBNYWtlIHN1cmUgdGhhdCB3ZSBrbm93IGhvdyB0
byBvcHRpbWl6ZSBhbGwgb2YgdGhlc2UuIFdlIG9ubHkga25vdyBob3cgdG8gaGFuZGxlIExvYWQg
YW5kCi0gICAgLy8gU3RvcmUgb24gYW5vbnltb3VzIHZhcmlhYmxlcy4KKyAgICAvLyBKdXN0IGZv
ciBzYW5pdHksIHJlbW92ZSBhbnkgdW51c2VkIHZhcmlhYmxlcyBmaXJzdC4gSXQncyB1bmxpa2Vs
eSB0aGF0IHRoaXMgY29kZSBoYXMgYW55CisgICAgLy8gYnVncyBoYXZpbmcgdG8gZG8gd2l0aCBk
ZWFkIHZhcmlhYmxlcywgYnV0IGl0IHdvdWxkIGJlIHNpbGx5IHRvIGhhdmUgdG8gZml4IHN1Y2gg
YSBidWcgaWYKKyAgICAvLyBpdCBkaWQgYXJpc2UuCisgICAgSW5kZXhTZXQ8VmFyaWFibGU+IGxp
dmVWYXJpYWJsZXM7CiAgICAgZm9yIChWYWx1ZSogdmFsdWUgOiBwcm9jLnZhbHVlcygpKSB7Ci0g
ICAgICAgIGF1dG8gcmVqZWN0ID0gWyZdIChWYWx1ZSogdmFsdWUpIHsKLSAgICAgICAgICAgIGlm
IChTbG90QmFzZVZhbHVlKiBzbG90QmFzZSA9IHZhbHVlLT5hczxTbG90QmFzZVZhbHVlPigpKQot
ICAgICAgICAgICAgICAgIHN0YWNrVmFyaWFibGUucmVtb3ZlKHNsb3RCYXNlLT5zbG90KCkpOwot
ICAgICAgICB9OwotICAgICAgICAKLSAgICAgICAgYXV0byBoYW5kbGVBY2Nlc3MgPSBbJl0gKFZh
bHVlKiBhY2Nlc3MsIFR5cGUgdHlwZSkgewotICAgICAgICAgICAgU2xvdEJhc2VWYWx1ZSogc2xv
dEJhc2UgPSBhY2Nlc3MtPmxhc3RDaGlsZCgpLT5hczxTbG90QmFzZVZhbHVlPigpOwotICAgICAg
ICAgICAgaWYgKCFzbG90QmFzZSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAg
ICAgIFN0YWNrU2xvdCogc3RhY2sgPSBzbG90QmFzZS0+c2xvdCgpOwotICAgICAgICAgICAgCi0g
ICAgICAgICAgICBpZiAodmFsdWUtPmFzPE1lbW9yeVZhbHVlPigpLT5vZmZzZXQoKSkgewotICAg
ICAgICAgICAgICAgIHN0YWNrVmFyaWFibGUucmVtb3ZlKHN0YWNrKTsKLSAgICAgICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGF1dG8gcmVzdWx0ID0gc3Rh
Y2tWYXJpYWJsZS5maW5kKHN0YWNrKTsKLSAgICAgICAgICAgIGlmIChyZXN1bHQgPT0gc3RhY2tW
YXJpYWJsZS5lbmQoKSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBpZiAo
cmVzdWx0LT52YWx1ZSA9PSBWb2lkKSB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0LT52YWx1ZSA9
IHR5cGU7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotICAgICAgICAg
ICAgaWYgKHJlc3VsdC0+dmFsdWUgPT0gdHlwZSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgICAgICBzdGFja1ZhcmlhYmxlLnJlbW92ZShyZXN1bHQpOwotICAgICAgICB9OwotICAg
ICAgICAKLSAgICAgICAgc3dpdGNoICh2YWx1ZS0+b3Bjb2RlKCkpIHsKLSAgICAgICAgY2FzZSBM
b2FkOgotICAgICAgICAgICAgLy8gV2UncmUgT0sgd2l0aCBsb2FkcyBmcm9tIHN0YWNrIHZhcmlh
YmxlcyBhdCBhbiBvZmZzZXQgb2YgemVyby4KLSAgICAgICAgICAgIGhhbmRsZUFjY2Vzcyh2YWx1
ZSwgdmFsdWUtPnR5cGUoKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgY2FzZSBTdG9y
ZToKLSAgICAgICAgICAgIC8vIFdlJ3JlIE9LIHdpdGggc3RvcmVzIHRvIHN0YWNrIHZhcmlhYmxl
cywgYnV0IG5vdCBzdG9yaW5nIHN0YWNrIHZhcmlhYmxlcy4KLSAgICAgICAgICAgIHJlamVjdCh2
YWx1ZS0+Y2hpbGQoMCkpOwotICAgICAgICAgICAgaGFuZGxlQWNjZXNzKHZhbHVlLCB2YWx1ZS0+
Y2hpbGQoMCktPnR5cGUoKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgZGVmYXVsdDoK
LSAgICAgICAgICAgIGZvciAoVmFsdWUqIGNoaWxkIDogdmFsdWUtPmNoaWxkcmVuKCkpCi0gICAg
ICAgICAgICAgICAgcmVqZWN0KGNoaWxkKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9
CisgICAgICAgIGlmIChWYXJpYWJsZVZhbHVlKiB2YXJpYWJsZVZhbHVlID0gdmFsdWUtPmFzPFZh
cmlhYmxlVmFsdWU+KCkpCisgICAgICAgICAgICBsaXZlVmFyaWFibGVzLmFkZCh2YXJpYWJsZVZh
bHVlLT52YXJpYWJsZSgpKTsKICAgICB9CiAKLSAgICBWZWN0b3I8U3RhY2tTbG90Kj4gZGVhZFNs
b3RzOwotICAgIGZvciAoYXV0byYgZW50cnkgOiBzdGFja1ZhcmlhYmxlKSB7Ci0gICAgICAgIGlm
IChlbnRyeS52YWx1ZSA9PSBWb2lkKQotICAgICAgICAgICAgZGVhZFNsb3RzLmFwcGVuZChlbnRy
eS5rZXkpOworICAgIGZvciAoVmFyaWFibGUqIHZhcmlhYmxlIDogcHJvYy52YXJpYWJsZXMoKSkg
eworICAgICAgICBpZiAoIWxpdmVWYXJpYWJsZXMuY29udGFpbnModmFyaWFibGUpKQorICAgICAg
ICAgICAgcHJvYy5kZWxldGVWYXJpYWJsZSh2YXJpYWJsZSk7CiAgICAgfQogCi0gICAgZm9yIChT
dGFja1Nsb3QqIGRlYWRTbG90IDogZGVhZFNsb3RzKQotICAgICAgICBzdGFja1ZhcmlhYmxlLnJl
bW92ZShkZWFkU2xvdCk7Ci0KLSAgICBpZiAoc3RhY2tWYXJpYWJsZS5pc0VtcHR5KCkpCi0gICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBpZiAocHJvYy52YXJpYWJsZXMoKS5pc0VtcHR5KCkpCisg
ICAgICAgIHJldHVybjsKIAogICAgIC8vIFdlIGtub3cgdGhhdCB3ZSBoYXZlIHZhcmlhYmxlcyB0
byBvcHRpbWl6ZSwgc28gZG8gdGhhdCBub3cuCiAgICAgYnJlYWtDcml0aWNhbEVkZ2VzKHByb2Mp
OwogCiAgICAgU1NBQ2FsY3VsYXRvciBzc2EocHJvYyk7CiAKLSAgICAvLyBDcmVhdGUgYSBTU0FD
YWxjdWxhdG9yOjpWYXJpYWJsZSBmb3IgZXZlcnkgc3RhY2sgdmFyaWFibGUuCi0gICAgVmVjdG9y
PFN0YWNrU2xvdCo+IHZhcmlhYmxlVG9TdGFjazsKLSAgICBIYXNoTWFwPFN0YWNrU2xvdCosIFNT
QUNhbGN1bGF0b3I6OlZhcmlhYmxlKj4gc3RhY2tUb1ZhcmlhYmxlOwotCi0gICAgZm9yIChhdXRv
JiBlbnRyeSA6IHN0YWNrVmFyaWFibGUpIHsKLSAgICAgICAgU3RhY2tTbG90KiBzdGFjayA9IGVu
dHJ5LmtleTsKLSAgICAgICAgU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqIHZhcmlhYmxlID0gc3Nh
Lm5ld1ZhcmlhYmxlKCk7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKHZhcmlhYmxlLT5pbmRleCgp
ID09IHZhcmlhYmxlVG9TdGFjay5zaXplKCkpOwotICAgICAgICB2YXJpYWJsZVRvU3RhY2suYXBw
ZW5kKHN0YWNrKTsKLSAgICAgICAgc3RhY2tUb1ZhcmlhYmxlLmFkZChzdGFjaywgdmFyaWFibGUp
OworICAgIC8vIENyZWF0ZSBhIFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlICgiY2FsY1ZhciIpIGZv
ciBldmVyeSB2YXJpYWJsZS4KKyAgICBWZWN0b3I8VmFyaWFibGUqPiBjYWxjVmFyVG9WYXJpYWJs
ZTsKKyAgICBJbmRleE1hcDxWYXJpYWJsZSwgU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqPiB2YXJp
YWJsZVRvQ2FsY1Zhcihwcm9jLnZhcmlhYmxlcygpLnNpemUoKSk7CisKKyAgICBmb3IgKFZhcmlh
YmxlKiB2YXJpYWJsZSA6IHByb2MudmFyaWFibGVzKCkpIHsKKyAgICAgICAgU1NBQ2FsY3VsYXRv
cjo6VmFyaWFibGUqIGNhbGNWYXIgPSBzc2EubmV3VmFyaWFibGUoKTsKKyAgICAgICAgUkVMRUFT
RV9BU1NFUlQoY2FsY1Zhci0+aW5kZXgoKSA9PSBjYWxjVmFyVG9WYXJpYWJsZS5zaXplKCkpOwor
ICAgICAgICBjYWxjVmFyVG9WYXJpYWJsZS5hcHBlbmQodmFyaWFibGUpOworICAgICAgICB2YXJp
YWJsZVRvQ2FsY1Zhclt2YXJpYWJsZV0gPSBjYWxjVmFyOwogICAgIH0KIAogICAgIC8vIENyZWF0
ZSBEZWZzIGZvciBhbGwgb2YgdGhlIHN0b3JlcyB0byB0aGUgc3RhY2sgdmFyaWFibGUuCiAgICAg
Zm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IHByb2MpIHsKICAgICAgICAgZm9yIChWYWx1ZSogdmFs
dWUgOiAqYmxvY2spIHsKLSAgICAgICAgICAgIGlmICh2YWx1ZS0+b3Bjb2RlKCkgIT0gU3RvcmUp
Ci0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIFNsb3RCYXNlVmFsdWUq
IHNsb3RCYXNlID0gdmFsdWUtPmNoaWxkKDEpLT5hczxTbG90QmFzZVZhbHVlPigpOwotICAgICAg
ICAgICAgaWYgKCFzbG90QmFzZSkKKyAgICAgICAgICAgIGlmICh2YWx1ZS0+b3Bjb2RlKCkgIT0g
U2V0KQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgICAgICBTdGFja1Nsb3Qq
IHN0YWNrID0gc2xvdEJhc2UtPnNsb3QoKTsKKyAgICAgICAgICAgIFZhcmlhYmxlKiB2YXJpYWJs
ZSA9IHZhbHVlLT5hczxWYXJpYWJsZVZhbHVlPigpLT52YXJpYWJsZSgpOwogCi0gICAgICAgICAg
ICBpZiAoU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqIHZhcmlhYmxlID0gc3RhY2tUb1ZhcmlhYmxl
LmdldChzdGFjaykpCi0gICAgICAgICAgICAgICAgc3NhLm5ld0RlZih2YXJpYWJsZSwgYmxvY2ss
IHZhbHVlLT5jaGlsZCgwKSk7CisgICAgICAgICAgICBpZiAoU1NBQ2FsY3VsYXRvcjo6VmFyaWFi
bGUqIGNhbGNWYXIgPSB2YXJpYWJsZVRvQ2FsY1Zhclt2YXJpYWJsZV0pCisgICAgICAgICAgICAg
ICAgc3NhLm5ld0RlZihjYWxjVmFyLCBibG9jaywgdmFsdWUtPmNoaWxkKDApKTsKICAgICAgICAg
fQogICAgIH0KIAogICAgIC8vIERlY2lkZSB3aGVyZSBQaGlzIGFyZSB0byBiZSBpbnNlcnRlZC4g
VGhpcyBjcmVhdGVzIHRoZW0gYnV0IGRvZXMgbm90IGluc2VydCB0aGVtLgogICAgIHNzYS5jb21w
dXRlUGhpcygKLSAgICAgICAgWyZdIChTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSogdmFyaWFibGUs
IEJhc2ljQmxvY2sqIGJsb2NrKSAtPiBWYWx1ZSogewotICAgICAgICAgICAgU3RhY2tTbG90KiBz
dGFjayA9IHZhcmlhYmxlVG9TdGFja1t2YXJpYWJsZS0+aW5kZXgoKV07Ci0gICAgICAgICAgICBW
YWx1ZSogcGhpID0gcHJvYy5hZGQ8VmFsdWU+KFBoaSwgc3RhY2tWYXJpYWJsZS5nZXQoc3RhY2sp
LCBibG9jay0+YXQoMCktPm9yaWdpbigpKTsKKyAgICAgICAgWyZdIChTU0FDYWxjdWxhdG9yOjpW
YXJpYWJsZSogY2FsY1ZhciwgQmFzaWNCbG9jayogYmxvY2spIC0+IFZhbHVlKiB7CisgICAgICAg
ICAgICBWYXJpYWJsZSogdmFyaWFibGUgPSBjYWxjVmFyVG9WYXJpYWJsZVtjYWxjVmFyLT5pbmRl
eCgpXTsKKyAgICAgICAgICAgIFZhbHVlKiBwaGkgPSBwcm9jLmFkZDxWYWx1ZT4oUGhpLCB2YXJp
YWJsZS0+dHlwZSgpLCBibG9jay0+YXQoMCktPm9yaWdpbigpKTsKICAgICAgICAgICAgIGlmICh2
ZXJib3NlKSB7CiAgICAgICAgICAgICAgICAgZGF0YUxvZygKLSAgICAgICAgICAgICAgICAgICAg
IkFkZGluZyBQaGkgZm9yICIsIHBvaW50ZXJEdW1wKHN0YWNrKSwgIiBhdCAiLCAqYmxvY2ssICI6
ICIsCisgICAgICAgICAgICAgICAgICAgICJBZGRpbmcgUGhpIGZvciAiLCBwb2ludGVyRHVtcCh2
YXJpYWJsZSksICIgYXQgIiwgKmJsb2NrLCAiOiAiLAogICAgICAgICAgICAgICAgICAgICBkZWVw
RHVtcChwcm9jLCBwaGkpLCAiXG4iKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVy
biBwaGk7CkBAIC0yNDksMjQgKzE3OCwyNCBAQCBib29sIGZpeFNTQShQcm9jZWR1cmUmIHByb2Mp
CiAKICAgICAvLyBOb3cgcGVyZm9ybSB0aGUgY29udmVyc2lvbi4KICAgICBJbnNlcnRpb25TZXQg
aW5zZXJ0aW9uU2V0KHByb2MpOwotICAgIEhhc2hNYXA8U3RhY2tTbG90KiwgVmFsdWUqPiBtYXBw
aW5nOworICAgIEluZGV4TWFwPFZhcmlhYmxlLCBWYWx1ZSo+IG1hcHBpbmc7CiAgICAgZm9yIChC
YXNpY0Jsb2NrKiBibG9jayA6IHByb2MuYmxvY2tzSW5QcmVPcmRlcigpKSB7CiAgICAgICAgIG1h
cHBpbmcuY2xlYXIoKTsKIAotICAgICAgICBmb3IgKGF1dG8mIGVudHJ5IDogc3RhY2tUb1Zhcmlh
YmxlKSB7Ci0gICAgICAgICAgICBTdGFja1Nsb3QqIHN0YWNrID0gZW50cnkua2V5OwotICAgICAg
ICAgICAgU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqIHZhcmlhYmxlID0gZW50cnkudmFsdWU7Cisg
ICAgICAgIGZvciAodW5zaWduZWQgaW5kZXggPSBjYWxjVmFyVG9WYXJpYWJsZS5zaXplKCk7IGlu
ZGV4LS07KSB7CisgICAgICAgICAgICBWYXJpYWJsZSogdmFyaWFibGUgPSBjYWxjVmFyVG9WYXJp
YWJsZVtpbmRleF07CisgICAgICAgICAgICBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSogY2FsY1Zh
ciA9IHNzYS52YXJpYWJsZShpbmRleCk7CiAKLSAgICAgICAgICAgIFNTQUNhbGN1bGF0b3I6OkRl
ZiogZGVmID0gc3NhLnJlYWNoaW5nRGVmQXRIZWFkKGJsb2NrLCB2YXJpYWJsZSk7CisgICAgICAg
ICAgICBTU0FDYWxjdWxhdG9yOjpEZWYqIGRlZiA9IHNzYS5yZWFjaGluZ0RlZkF0SGVhZChibG9j
aywgY2FsY1Zhcik7CiAgICAgICAgICAgICBpZiAoZGVmKQotICAgICAgICAgICAgICAgIG1hcHBp
bmcuc2V0KHN0YWNrLCBkZWYtPnZhbHVlKCkpOworICAgICAgICAgICAgICAgIG1hcHBpbmdbdmFy
aWFibGVdID0gZGVmLT52YWx1ZSgpOwogICAgICAgICB9CiAKICAgICAgICAgZm9yIChTU0FDYWxj
dWxhdG9yOjpEZWYqIHBoaURlZiA6IHNzYS5waGlzRm9yQmxvY2soYmxvY2spKSB7Ci0gICAgICAg
ICAgICBTdGFja1Nsb3QqIHN0YWNrID0gdmFyaWFibGVUb1N0YWNrW3BoaURlZi0+dmFyaWFibGUo
KS0+aW5kZXgoKV07CisgICAgICAgICAgICBWYXJpYWJsZSogdmFyaWFibGUgPSBjYWxjVmFyVG9W
YXJpYWJsZVtwaGlEZWYtPnZhcmlhYmxlKCktPmluZGV4KCldOwogCiAgICAgICAgICAgICBpbnNl
cnRpb25TZXQuaW5zZXJ0VmFsdWUoMCwgcGhpRGVmLT52YWx1ZSgpKTsKLSAgICAgICAgICAgIG1h
cHBpbmcuc2V0KHN0YWNrLCBwaGlEZWYtPnZhbHVlKCkpOworICAgICAgICAgICAgbWFwcGluZ1t2
YXJpYWJsZV0gPSBwaGlEZWYtPnZhbHVlKCk7CiAgICAgICAgIH0KIAogICAgICAgICBmb3IgKHVu
c2lnbmVkIHZhbHVlSW5kZXggPSAwOyB2YWx1ZUluZGV4IDwgYmxvY2stPnNpemUoKTsgKyt2YWx1
ZUluZGV4KSB7CkBAIC0yNzQsMjMgKzIwMywyNSBAQCBib29sIGZpeFNTQShQcm9jZWR1cmUmIHBy
b2MpCiAgICAgICAgICAgICB2YWx1ZS0+cGVyZm9ybVN1YnN0aXR1dGlvbigpOwogCiAgICAgICAg
ICAgICBzd2l0Y2ggKHZhbHVlLT5vcGNvZGUoKSkgewotICAgICAgICAgICAgY2FzZSBMb2FkOiB7
Ci0gICAgICAgICAgICAgICAgaWYgKFNsb3RCYXNlVmFsdWUqIHNsb3RCYXNlID0gdmFsdWUtPmNo
aWxkKDApLT5hczxTbG90QmFzZVZhbHVlPigpKSB7Ci0gICAgICAgICAgICAgICAgICAgIFN0YWNr
U2xvdCogc3RhY2sgPSBzbG90QmFzZS0+c2xvdCgpOwotICAgICAgICAgICAgICAgICAgICBpZiAo
VmFsdWUqIHJlcGxhY2VtZW50ID0gbWFwcGluZy5nZXQoc3RhY2spKQotICAgICAgICAgICAgICAg
ICAgICAgICAgdmFsdWUtPnJlcGxhY2VXaXRoSWRlbnRpdHkocmVwbGFjZW1lbnQpOworICAgICAg
ICAgICAgY2FzZSBHZXQ6IHsKKyAgICAgICAgICAgICAgICBWYXJpYWJsZVZhbHVlKiB2YXJpYWJs
ZVZhbHVlID0gdmFsdWUtPmFzPFZhcmlhYmxlVmFsdWU+KCk7CisgICAgICAgICAgICAgICAgVmFy
aWFibGUqIHZhcmlhYmxlID0gdmFyaWFibGVWYWx1ZS0+dmFyaWFibGUoKTsKKworICAgICAgICAg
ICAgICAgIGlmIChWYWx1ZSogcmVwbGFjZW1lbnQgPSBtYXBwaW5nLmdldChzdGFjaykpCisgICAg
ICAgICAgICAgICAgICAgIHZhbHVlLT5yZXBsYWNlV2l0aElkZW50aXR5KHJlcGxhY2VtZW50KTsK
KyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUtPnJlcGxh
Y2VXaXRoSWRlbnRpdHkoCisgICAgICAgICAgICAgICAgICAgICAgICBtX2luc2VydGlvblNldC5p
bnNlcnRCb3R0b20odmFsdWVJbmRleCwgdmFsdWUpKTsKICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICBjYXNlIFN0b3JlOiB7Ci0gICAgICAgICAgICAgICAgaWYgKFNsb3RCYXNlVmFsdWUq
IHNsb3RCYXNlID0gdmFsdWUtPmNoaWxkKDEpLT5hczxTbG90QmFzZVZhbHVlPigpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIFN0YWNrU2xvdCogc3RhY2sgPSBzbG90QmFzZS0+c2xvdCgpOwotICAg
ICAgICAgICAgICAgICAgICBpZiAoc3RhY2tUb1ZhcmlhYmxlLmNvbnRhaW5zKHN0YWNrKSkgewot
ICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZy5zZXQoc3RhY2ssIHZhbHVlLT5jaGlsZCgw
KSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS0+cmVwbGFjZVdpdGhOb3AoKTsKLSAg
ICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhc2Ug
U2V0OiB7CisgICAgICAgICAgICAgICAgVmFyaWFibGVWYWx1ZSogdmFyaWFibGVWYWx1ZSA9IHZh
bHVlLT5hczxWYXJpYWJsZVZhbHVlPigpOworICAgICAgICAgICAgICAgIFZhcmlhYmxlKiB2YXJp
YWJsZSA9IHZhcmlhYmxlVmFsdWUtPnZhcmlhYmxlKCk7CisKKyAgICAgICAgICAgICAgICBtYXBw
aW5nW3ZhcmlhYmxlXSA9IHZhbHVlLT5jaGlsZCgwKTsKKyAgICAgICAgICAgICAgICB2YWx1ZS0+
cmVwbGFjZVdpdGhOb3AoKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0K
IApAQCAtMzA0LDE0ICsyMzUsMTQgQEAgYm9vbCBmaXhTU0EoUHJvY2VkdXJlJiBwcm9jKQogICAg
ICAgICBmb3IgKEJhc2ljQmxvY2sqIHN1Y2Nlc3NvckJsb2NrIDogYmxvY2stPnN1Y2Nlc3NvckJs
b2NrcygpKSB7CiAgICAgICAgICAgICBmb3IgKFNTQUNhbGN1bGF0b3I6OkRlZiogcGhpRGVmIDog
c3NhLnBoaXNGb3JCbG9jayhzdWNjZXNzb3JCbG9jaykpIHsKICAgICAgICAgICAgICAgICBWYWx1
ZSogcGhpID0gcGhpRGVmLT52YWx1ZSgpOwotICAgICAgICAgICAgICAgIFNTQUNhbGN1bGF0b3I6
OlZhcmlhYmxlKiB2YXJpYWJsZSA9IHBoaURlZi0+dmFyaWFibGUoKTsKLSAgICAgICAgICAgICAg
ICBTdGFja1Nsb3QqIHN0YWNrID0gdmFyaWFibGVUb1N0YWNrW3ZhcmlhYmxlLT5pbmRleCgpXTsK
KyAgICAgICAgICAgICAgICBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSogY2FsY1ZhciA9IHBoaURl
Zi0+dmFyaWFibGUoKTsKKyAgICAgICAgICAgICAgICBWYXJpYWJsZSogdmFyaWFibGUgPSBjYWxj
VmFyVG9WYXJpYWJsZVtjYWxjVmFyLT5pbmRleCgpXTsKIAotICAgICAgICAgICAgICAgIFZhbHVl
KiBtYXBwZWRWYWx1ZSA9IG1hcHBpbmcuZ2V0KHN0YWNrKTsKKyAgICAgICAgICAgICAgICBWYWx1
ZSogbWFwcGVkVmFsdWUgPSBtYXBwaW5ncFt2YXJpYWJsZV07CiAgICAgICAgICAgICAgICAgaWYg
KHZlcmJvc2UpIHsKICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygKLSAgICAgICAgICAgICAg
ICAgICAgICAgICJNYXBwZWQgdmFsdWUgZm9yICIsICpzdGFjaywgIiB3aXRoIHN1Y2Nlc3NvciBQ
aGkgIiwgKnBoaSwgIiBhdCBlbmQgb2YgIiwKLSAgICAgICAgICAgICAgICAgICAgICAgICpibG9j
aywgIjogIiwgcG9pbnRlckR1bXAobWFwcGVkVmFsdWUpLCAiXG4iKTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgICJNYXBwZWQgdmFsdWUgZm9yICIsICp2YXJpYWJsZSwgIiB3aXRoIHN1Y2Nlc3Nv
ciBQaGkgIiwgKnBoaSwKKyAgICAgICAgICAgICAgICAgICAgICAgICIgYXQgZW5kIG9mICIsICpi
bG9jaywgIjogIiwgcG9pbnRlckR1bXAobWFwcGVkVmFsdWUpLCAiXG4iKTsKICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgaWYgKCFtYXBwZWRWYWx1
ZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0ZpeFNTQS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0ZpeFNTQS5oCShyZXZpc2lvbiAxOTU5NzAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNGaXhTU0EuaAkod29ya2luZyBjb3B5KQpA
QCAtMzYsOCArMzYsOCBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKIAogY2xhc3Mg
UHJvY2VkdXJlOwogCi0vLyBUdXJucyBhbGwgbWVudGlvbnMgb2YgdGhlIGdpdmVuIHZhbHVlcyBp
bnRvIGFjY2Vzc2VzIHRvIGFub255bW91cyBzdGFjayBzbG90cy4gVGhpcyBpcyBtZWFudAotLy8g
dG8gYmUgdXNlZCBmcm9tIHBoYXNlcyB0aGF0IGRvbid0IGxpa2UgU1NBIGZvciB3aGF0ZXZlciBy
ZWFzb24uCisvLyBUdXJucyBhbGwgbWVudGlvbnMgb2YgdGhlIGdpdmVuIHZhbHVlcyBpbnRvIGFj
Y2Vzc2VzIHRvIHZhcmlhYmxlcy4gVGhpcyBpcyBtZWFudCB0byBiZSB1c2VkCisvLyBmcm9tIHBo
YXNlcyB0aGF0IGRvbid0IGxpa2UgU1NBIGZvciB3aGF0ZXZlciByZWFzb24uCiB2b2lkIGRlbW90
ZVZhbHVlcyhQcm9jZWR1cmUmLCBjb25zdCBJbmRleFNldDxWYWx1ZT4mKTsKIAogLy8gVGhpcyBm
aXhlcyBTU0EgZm9yIHlvdS4gVXNlIHRoaXMgYWZ0ZXIgeW91IGhhdmUgZG9uZSBkZW1vdGVWYWx1
ZXMoKSBhbmQgeW91IGhhdmUgcGVyZm9ybWVkCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNJbmRleE1hcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0luZGV4TWFwLmgJKHJldmlzaW9uIDE5NTk3MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0luZGV4TWFwLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDYgKzQ5LDExIEBAIHB1YmxpYzoK
ICAgICAgICAgbV92ZWN0b3IuZmlsbChWYWx1ZSgpLCBzaXplKTsKICAgICB9CiAKKyAgICB2b2lk
IGNsZWFyKCkKKyAgICB7CisgICAgICAgIG1fdmVjdG9yLmZpbGwoVmFsdWUoKSwgbV92ZWN0b3Iu
c2l6ZSgpKTsKKyAgICB9CisKICAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmVj
dG9yLnNpemUoKTsgfQogCiAgICAgVmFsdWUmIG9wZXJhdG9yW10oc2l6ZV90IGluZGV4KQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSW5kZXhTZXQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNJbmRleFNldC5oCShyZXZpc2lvbiAxOTU5NzApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNJbmRleFNldC5oCSh3b3JraW5nIGNvcHkpCkBA
IC02OSw2ICs2OSwxNiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX3NldC5nZXQodmFsdWUt
PmluZGV4KCkpOwogICAgIH0KIAorICAgIHNpemVfdCBzaXplKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBtX3NldC5iaXRDb3VudCgpOworICAgIH0KKworICAgIGJvb2wgaXNFbXB0eSgp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gIXNpemUoKTsKKyAgICB9CisKICAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBDb2xsZWN0aW9uVHlwZT4KICAgICBjbGFzcyBJdGVyYWJsZSB7CiAgICAg
cHVibGljOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTG93ZXJUb0Fpci5jcHAJ
KHJldmlzaW9uIDE5NTk3MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9B
aXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Myw2ICs1Myw3IEBACiAjaW5jbHVkZSAiQjNVcHNp
bG9uVmFsdWUuaCIKICNpbmNsdWRlICJCM1VzZUNvdW50cy5oIgogI2luY2x1ZGUgIkIzVmFsdWVJ
bmxpbmVzLmgiCisjaW5jbHVkZSAiQjNWYXJpYWJsZVZhbHVlLmgiCiAjaW5jbHVkZSA8d3RmL0xp
c3REdW1wLmg+CiAKICNpZiBDT01QSUxFUihHQ0MpICYmIEFTU0VSVF9ESVNBQkxFRApAQCAtMTAy
LDYgKzEwMyw4IEBAIHB1YmxpYzoKIAogICAgICAgICBmb3IgKEIzOjpTdGFja1Nsb3QqIHN0YWNr
IDogbV9wcm9jZWR1cmUuc3RhY2tTbG90cygpKQogICAgICAgICAgICAgbV9zdGFja1RvU3RhY2su
YWRkKHN0YWNrLCBtX2NvZGUuYWRkU3RhY2tTbG90KHN0YWNrKSk7CisgICAgICAgIGZvciAoVmFy
aWFibGUqIHZhcmlhYmxlIDogbV9wcm9jZWR1cmUudmFyaWFibGVzKCkpCisgICAgICAgICAgICBt
X3ZhcmlhYmxlVG9TdGFjay5hZGQodmFyaWFibGUsIG1fY29kZS5uZXdUbXAoQXJnOjp0eXBlRm9y
QjNUeXBlKHZhcmlhYmxlLT50eXBlKCkpKSk7CiAKICAgICAgICAgLy8gRmlndXJlIG91dCB3aGlj
aCBibG9ja3MgYXJlIG5vdCByYXJlLgogICAgICAgICBtX2Zhc3RXb3JrbGlzdC5wdXNoKG1fcHJv
Y2VkdXJlWzBdKTsKQEAgLTIyMjUsNiArMjIyOCwyMSBAQCBwcml2YXRlOgogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9CiAKKyAgICAgICAgY2FzZSBTZXQ6IHsKKyAgICAgICAgICAgIFZh
bHVlIHZhbHVlID0gbV92YWx1ZS0+Y2hpbGQoMCk7CisgICAgICAgICAgICBhcHBlbmQoCisgICAg
ICAgICAgICAgICAgcmVsYXhlZE1vdmVGb3JUeXBlKHZhbHVlLT50eXBlKCkpLCBpbW1PclRtcCh2
YWx1ZSksCisgICAgICAgICAgICAgICAgbV92YXJpYWJsZVRvVG1wLmdldChtX3ZhbHVlLT5hczxW
YXJpYWJsZVZhbHVlPigpLT52YXJpYWJsZSgpKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKworICAgICAgICBjYXNlIEdldDogeworICAgICAgICAgICAgYXBwZW5kKAorICAgICAg
ICAgICAgICAgIHJlbGF4ZWRNb3ZlRm9yVHlwZShtX3ZhbHVlLT50eXBlKCkpLAorICAgICAgICAg
ICAgICAgIG1fdmFyaWFibGVUb1RtcC5nZXQobV92YWx1ZS0+YXM8VmFyaWFibGVWYWx1ZT4oKS0+
dmFyaWFibGUoKSksIHRtcChtX3ZhbHVlKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKwogICAgICAgICBjYXNlIEJyYW5jaDogewogICAgICAgICAgICAgbV9pbnN0cy5sYXN0KCku
YXBwZW5kKGNyZWF0ZUJyYW5jaChtX3ZhbHVlLT5jaGlsZCgwKSkpOwogICAgICAgICAgICAgcmV0
dXJuOwpAQCAtMjMxNiw2ICsyMzM0LDcgQEAgcHJpdmF0ZToKICAgICBJbmRleE1hcDxWYWx1ZSwg
VG1wPiBtX3BoaVRvVG1wOyAvLyBFYWNoIFBoaSBnZXRzIGl0cyBvd24gVG1wLgogICAgIEluZGV4
TWFwPEIzOjpCYXNpY0Jsb2NrLCBBaXI6OkJhc2ljQmxvY2sqPiBtX2Jsb2NrVG9CbG9jazsKICAg
ICBIYXNoTWFwPEIzOjpTdGFja1Nsb3QqLCBBaXI6OlN0YWNrU2xvdCo+IG1fc3RhY2tUb1N0YWNr
OworICAgIEhhc2hNYXA8VmFyaWFibGUqLCBUbXA+IG1fdmFyaWFibGVUb1RtcDsKIAogICAgIFVz
ZUNvdW50cyBtX3VzZUNvdW50czsKICAgICBQaGlDaGlsZHJlbiBtX3BoaUNoaWxkcmVuOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTWVtb3J5VmFsdWUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNNZW1vcnlWYWx1ZS5oCShyZXZpc2lvbiAxOTU5
NzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNNZW1vcnlWYWx1ZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC03NSwxMCArNzUsOCBAQCBwcml2YXRlOgogCiAgICAgLy8gVXNlIHRoaXMgZm9y
bSBmb3IgTG9hZCAoYnV0IG5vdCBMb2FkOFosIExvYWQ4Uywgb3IgYW55IG9mIHRoZSBMb2FkcyB0
aGF0IGhhdmUgYSBzdWZmaXggdGhhdAogICAgIC8vIGRlc2NyaWJlcyB0aGUgcmV0dXJuZWQgdHlw
ZSkuCi0gICAgTWVtb3J5VmFsdWUoCi0gICAgICAgIHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bj
b2RlLCBUeXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBwb2ludGVyLAotICAgICAgICBp
bnQzMl90IG9mZnNldCA9IDApCi0gICAgICAgIDogVmFsdWUoaW5kZXgsIENoZWNrZWRPcGNvZGUs
IG9wY29kZSwgdHlwZSwgb3JpZ2luLCBwb2ludGVyKQorICAgIE1lbW9yeVZhbHVlKE9wY29kZSBv
cGNvZGUsIFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIHBvaW50ZXIsIGludDMyX3Qg
b2Zmc2V0ID0gMCkKKyAgICAgICAgOiBWYWx1ZShDaGVja2VkT3Bjb2RlLCBvcGNvZGUsIHR5cGUs
IG9yaWdpbiwgcG9pbnRlcikKICAgICAgICAgLCBtX29mZnNldChvZmZzZXQpCiAgICAgICAgICwg
bV9yYW5nZShIZWFwUmFuZ2U6OnRvcCgpKQogICAgIHsKQEAgLTEwNCwxNiArMTAyLDE0IEBAIHBy
aXZhdGU6CiAgICAgfQogCiAgICAgLy8gVXNlIHRoaXMgZm9ybSBmb3IgbG9hZHMgd2hlcmUgdGhl
IHJldHVybiB0eXBlIGlzIGltcGxpZWQuCi0gICAgTWVtb3J5VmFsdWUodW5zaWduZWQgaW5kZXgs
IE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBwb2ludGVyLCBpbnQzMl90IG9m
ZnNldCA9IDApCi0gICAgICAgIDogTWVtb3J5VmFsdWUoaW5kZXgsIG9wY29kZSwgSW50MzIsIG9y
aWdpbiwgcG9pbnRlciwgb2Zmc2V0KQorICAgIE1lbW9yeVZhbHVlKE9wY29kZSBvcGNvZGUsIE9y
aWdpbiBvcmlnaW4sIFZhbHVlKiBwb2ludGVyLCBpbnQzMl90IG9mZnNldCA9IDApCisgICAgICAg
IDogTWVtb3J5VmFsdWUob3Bjb2RlLCBJbnQzMiwgb3JpZ2luLCBwb2ludGVyLCBvZmZzZXQpCiAg
ICAgewogICAgIH0KIAogICAgIC8vIFVzZSB0aGlzIGZvcm0gZm9yIHN0b3Jlcy4KLSAgICBNZW1v
cnlWYWx1ZSgKLSAgICAgICAgdW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBv
cmlnaW4sIFZhbHVlKiB2YWx1ZSwgVmFsdWUqIHBvaW50ZXIsCi0gICAgICAgIGludDMyX3Qgb2Zm
c2V0ID0gMCkKLSAgICAgICAgOiBWYWx1ZShpbmRleCwgQ2hlY2tlZE9wY29kZSwgb3Bjb2RlLCBW
b2lkLCBvcmlnaW4sIHZhbHVlLCBwb2ludGVyKQorICAgIE1lbW9yeVZhbHVlKE9wY29kZSBvcGNv
ZGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiB2YWx1ZSwgVmFsdWUqIHBvaW50ZXIsIGludDMyX3Qg
b2Zmc2V0ID0gMCkKKyAgICAgICAgOiBWYWx1ZShDaGVja2VkT3Bjb2RlLCBvcGNvZGUsIFZvaWQs
IG9yaWdpbiwgdmFsdWUsIHBvaW50ZXIpCiAgICAgICAgICwgbV9vZmZzZXQob2Zmc2V0KQogICAg
ICAgICAsIG1fcmFuZ2UoSGVhcFJhbmdlOjp0b3AoKSkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNPcGNvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNPcGNvZGUuaAkocmV2aXNpb24gMTk1OTcwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzT3Bjb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDkgKzQ4LDE0IEBAIGVu
dW0gT3Bjb2RlIDogaW50MTZfdCB7CiAgICAgQ29uc3REb3VibGUsCiAgICAgQ29uc3RGbG9hdCwK
IAotICAgIC8vIFRoZSBtYWdpY2FsIHN0YWNrIHNsb3QuIFRoaXMgaXMgdmlld2VkIGFzIGV4ZWN1
dGluZyBhdCB0aGUgdG9wIG9mIHRoZSBwcm9ncmFtIHJlZ2FyZGxlc3Mgb2YKLSAgICAvLyB3aGVy
ZSBpbiBjb250cm9sIGZsb3cgeW91IHB1dCBpdC4gRWFjaCBpbnN0YW5jZSBvZiBhIFN0YWNrU2xv
dCBWYWx1ZSBnZXRzIGEgZGlzam9pbnQgcmFuZ2Ugb2YKLSAgICAvLyBzdGFjayBtZW1vcnkuIFVz
ZSB0aGUgU3RhY2tTbG90VmFsdWUgY2xhc3MuCisgICAgLy8gQjMgc3VwcG9ydHMgbm9uLVNTQSB2
YXJpYWJsZXMuIFRoZXNlIGFyZSBhY2Nlc3NlZCB1c2luZyBHZXQgYW5kIFNldCBvcGNvZGVzLiBV
c2UgdGhlCisgICAgLy8gVmFyaWFibGVWYWx1ZSBjbGFzcy4gSXQncyBhIGdvb2QgaWRlYSB0byBy
dW4gZml4U1NBKCkgdG8gdHVybiB0aGVzZSBpbnRvIFNTQS4gVGhlCisgICAgLy8gb3B0aW1pemVy
IHdpbGwgZG8gdGhhdCBldmVudHVhbGx5LCBidXQgaWYgeW91ciBpbnB1dCB0ZW5kcyB0byB1c2Ug
dGhlc2Ugb3Bjb2RlcywgeW91CisgICAgLy8gc2hvdWxkIHJ1biBmaXhTU0EoKSBkaXJlY3RseSBi
ZWZvcmUgbGF1bmNoaW5nIHRoZSBvcHRpbWl6ZXIuCisgICAgU2V0LAorICAgIEdldCwKKworICAg
IC8vIEdldHMgdGhlIGJhc2UgYWRkcmVzcyBvZiBhIFN0YWNrU2xvdC4KICAgICBTbG90QmFzZSwK
IAogICAgIC8vIFRoZSBtYWdpY2FsIGFyZ3VtZW50IHJlZ2lzdGVyLiBUaGlzIGlzIHZpZXdlZCBh
cyBleGVjdXRpbmcgYXQgdGhlIHRvcCBvZiB0aGUgcHJvZ3JhbQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzUGF0Y2hwb2ludFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNQYXRjaHBvaW50VmFsdWUuY3BwCShyZXZpc2lvbiAxOTU5NzAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQYXRjaHBvaW50VmFsdWUuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00OSw4ICs0OSw4IEBAIFZhbHVlKiBQYXRjaHBvaW50VmFsdWU6OmNsb25l
SW1wbCgpIGNvbnMKICAgICByZXR1cm4gbmV3IFBhdGNocG9pbnRWYWx1ZSgqdGhpcyk7CiB9CiAK
LVBhdGNocG9pbnRWYWx1ZTo6UGF0Y2hwb2ludFZhbHVlKHVuc2lnbmVkIGluZGV4LCBUeXBlIHR5
cGUsIE9yaWdpbiBvcmlnaW4pCi0gICAgOiBCYXNlKGluZGV4LCBDaGVja2VkT3Bjb2RlLCBQYXRj
aHBvaW50LCB0eXBlLCBvcmlnaW4pCitQYXRjaHBvaW50VmFsdWU6OlBhdGNocG9pbnRWYWx1ZShU
eXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4pCisgICAgOiBCYXNlKENoZWNrZWRPcGNvZGUsIFBhdGNo
cG9pbnQsIHR5cGUsIG9yaWdpbikKICAgICAsIGVmZmVjdHMoRWZmZWN0czo6Zm9yQ2FsbCgpKQog
ICAgICwgcmVzdWx0Q29uc3RyYWludCh0eXBlID09IFZvaWQgPyBWYWx1ZVJlcDo6V2FybUFueSA6
IFZhbHVlUmVwOjpTb21lUmVnaXN0ZXIpCiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNQYXRjaHBvaW50VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNQYXRjaHBvaW50VmFsdWUuaAkocmV2aXNpb24gMTk1OTcwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzUGF0Y2hwb2ludFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTcw
LDcgKzcwLDcgQEAgcHJvdGVjdGVkOgogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgUHJvY2Vk
dXJlOwogCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgUGF0Y2hwb2ludFZhbHVlKHVuc2lnbmVkIGlu
ZGV4LCBUeXBlLCBPcmlnaW4pOworICAgIEpTX0VYUE9SVF9QUklWQVRFIFBhdGNocG9pbnRWYWx1
ZShUeXBlLCBPcmlnaW4pOwogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5jcHAJKHJldmlzaW9uIDE5NTk3MCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ2LDcgKzQ2LDYgQEAgUHJvY2VkdXJlOjpQcm9jZWR1cmUoKQogICAgICwgbV9sYXN0
UGhhc2VOYW1lKCJpbml0aWFsIikKICAgICAsIG1fYnlwcm9kdWN0cyhzdGQ6Om1ha2VfdW5pcXVl
PE9wYXF1ZUJ5cHJvZHVjdHM+KCkpCiAgICAgLCBtX2NvZGUobmV3IEFpcjo6Q29kZSgqdGhpcykp
Ci0gICAgLCBtX3ZhbHVlc0NvbGxlY3Rpb24oKnRoaXMpCiB7CiB9CiAKQEAgLTcwLDQxICs2OSwx
NCBAQCBCYXNpY0Jsb2NrKiBQcm9jZWR1cmU6OmFkZEJsb2NrKGRvdWJsZSBmCiAgICAgcmV0dXJu
IHJlc3VsdDsKIH0KIAotdm9pZCBQcm9jZWR1cmU6OnNldEJsb2NrT3JkZXJJbXBsKFZlY3RvcjxC
YXNpY0Jsb2NrKj4mIGJsb2NrcykKLXsKLSAgICBJbmRleFNldDxCYXNpY0Jsb2NrPiBibG9ja3NT
ZXQ7Ci0gICAgYmxvY2tzU2V0LmFkZEFsbChibG9ja3MpOwotCi0gICAgZm9yIChCYXNpY0Jsb2Nr
KiBibG9jayA6ICp0aGlzKSB7Ci0gICAgICAgIGlmICghYmxvY2tzU2V0LmNvbnRhaW5zKGJsb2Nr
KSkKLSAgICAgICAgICAgIGJsb2Nrcy5hcHBlbmQoYmxvY2spOwotICAgIH0KLQotICAgIC8vIFBs
YWNlIGJsb2NrcyBpbnRvIHRoaXMncyBibG9jayBsaXN0IGJ5IGZpcnN0IGxlYWtpbmcgYWxsIG9m
IHRoZSBibG9ja3MgYW5kIHRoZW4gcmVhZG9wdGluZwotICAgIC8vIHRoZW0uCi0gICAgZm9yIChh
dXRvJiBlbnRyeSA6IG1fYmxvY2tzKQotICAgICAgICBlbnRyeS5yZWxlYXNlKCk7Ci0KLSAgICBt
X2Jsb2Nrcy5yZXNpemUoYmxvY2tzLnNpemUoKSk7Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGJsb2Nrcy5zaXplKCk7ICsraSkgewotICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IGJs
b2Nrc1tpXTsKLSAgICAgICAgYmxvY2stPm1faW5kZXggPSBpOwotICAgICAgICBtX2Jsb2Nrc1tp
XSA9IHN0ZDo6dW5pcXVlX3B0cjxCYXNpY0Jsb2NrPihibG9jayk7Ci0gICAgfQotfQotCi1TdGFj
a1Nsb3QqIFByb2NlZHVyZTo6YWRkU3RhY2tTbG90KHVuc2lnbmVkIGJ5dGVTaXplLCBTdGFja1Ns
b3RLaW5kIGtpbmQpCitTdGFja1Nsb3QqIFByb2NlZHVyZTo6YWRkU3RhY2tTbG90KHVuc2lnbmVk
IGJ5dGVTaXplKQogewotICAgIHNpemVfdCBpbmRleCA9IGFkZFN0YWNrU2xvdEluZGV4KCk7Ci0g
ICAgc3RkOjp1bmlxdWVfcHRyPFN0YWNrU2xvdD4gc2xvdChuZXcgU3RhY2tTbG90KGluZGV4LCBi
eXRlU2l6ZSwga2luZCkpOwotICAgIFN0YWNrU2xvdCogcmVzdWx0ID0gc2xvdC5nZXQoKTsKLSAg
ICBtX3N0YWNrU2xvdHNbaW5kZXhdID0gV1RGTW92ZShzbG90KTsKLSAgICByZXR1cm4gcmVzdWx0
OworICAgIHJldHVybiBtX3N0YWNrU2xvdHMuYWRkKG5ldyBTdGFja1Nsb3QoYnl0ZVNpemUpKTsK
IH0KIAotU3RhY2tTbG90KiBQcm9jZWR1cmU6OmFkZEFub255bW91c1N0YWNrU2xvdChUeXBlIHR5
cGUpCitWYXJpYWJsZSogUHJvY2VkdXJlOjphZGRWYXJpYWJsZShUeXBlIHR5cGUpCiB7Ci0gICAg
cmV0dXJuIGFkZFN0YWNrU2xvdChzaXplb2ZUeXBlKHR5cGUpLCBTdGFja1Nsb3RLaW5kOjpBbm9u
eW1vdXMpOworICAgIHJldHVybiBtX3ZhcmlhYmxlcy5hZGQobmV3IFZhcmlhYmxlKHR5cGUpKTsg
CiB9CiAKIFZhbHVlKiBQcm9jZWR1cmU6OmNsb25lKFZhbHVlKiB2YWx1ZSkKQEAgLTIwOCw2ICsx
ODAsMTEgQEAgdm9pZCBQcm9jZWR1cmU6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgYwogICAgICAg
ICB9CiAgICAgICAgIGRhdGFMb2coIiAgICAiLCBkZWVwRHVtcCgqdGhpcywgdmFsdWUpLCAiXG4i
KTsKICAgICB9CisgICAgaWYgKHZhcmlhYmxlcygpLnNpemUoKSkgeworICAgICAgICBvdXQucHJp
bnQoIlZhcmlhYmxlczpcbiIpOworICAgICAgICBmb3IgKFZhcmlhYmxlKiB2YXJpYWJsZSA6IHZh
cmlhYmxlcygpKQorICAgICAgICAgICAgb3V0LnByaW50KCIgICAgIiwgZGVlcER1bXAodmFyaWFi
bGUpLCAiXG4iKTsKKyAgICB9CiAgICAgaWYgKHN0YWNrU2xvdHMoKS5zaXplKCkpIHsKICAgICAg
ICAgb3V0LnByaW50KCJTdGFjayBzbG90czpcbiIpOwogICAgICAgICBmb3IgKFN0YWNrU2xvdCog
c2xvdCA6IHN0YWNrU2xvdHMoKSkKQEAgLTIyOSwxNyArMjA2LDE3IEBAIFZlY3RvcjxCYXNpY0Js
b2NrKj4gUHJvY2VkdXJlOjpibG9ja3NJblAKIAogdm9pZCBQcm9jZWR1cmU6OmRlbGV0ZVN0YWNr
U2xvdChTdGFja1Nsb3QqIHN0YWNrU2xvdCkKIHsKLSAgICBSRUxFQVNFX0FTU0VSVChtX3N0YWNr
U2xvdHNbc3RhY2tTbG90LT5pbmRleCgpXS5nZXQoKSA9PSBzdGFja1Nsb3QpOwotICAgIFJFTEVB
U0VfQVNTRVJUKCFzdGFja1Nsb3QtPmlzTG9ja2VkKCkpOwotICAgIG1fc3RhY2tTbG90SW5kZXhG
cmVlTGlzdC5hcHBlbmQoc3RhY2tTbG90LT5pbmRleCgpKTsKLSAgICBtX3N0YWNrU2xvdHNbc3Rh
Y2tTbG90LT5pbmRleCgpXSA9IG51bGxwdHI7CisgICAgbV9zdGFja1Nsb3RzLnJlbW92ZShzdGFj
a1Nsb3QpOworfQorCit2b2lkIFByb2NlZHVyZTo6ZGVsZXRlVmFyaWFibGUoVmFyaWFibGUqIHZh
cmlhYmxlKQoreworICAgIG1fdmFyaWFibGVzLnJlbW92ZSh2YXJpYWJsZSk7CiB9CiAKIHZvaWQg
UHJvY2VkdXJlOjpkZWxldGVWYWx1ZShWYWx1ZSogdmFsdWUpCiB7Ci0gICAgUkVMRUFTRV9BU1NF
UlQobV92YWx1ZXNbdmFsdWUtPmluZGV4KCldLmdldCgpID09IHZhbHVlKTsKLSAgICBtX3ZhbHVl
SW5kZXhGcmVlTGlzdC5hcHBlbmQodmFsdWUtPmluZGV4KCkpOwotICAgIG1fdmFsdWVzW3ZhbHVl
LT5pbmRleCgpXSA9IG51bGxwdHI7CisgICAgbV92YWx1ZXMucmVtb3ZlKHZhbHVlKTsKIH0KIAog
dm9pZCBQcm9jZWR1cmU6OmRlbGV0ZU9ycGhhbnMoKQpAQCAtMzExLDI2ICsyODgsMzIgQEAgY29u
c3QgUmVnaXN0ZXJBdE9mZnNldExpc3QmIFByb2NlZHVyZTo6YwogICAgIHJldHVybiBjb2RlKCku
Y2FsbGVlU2F2ZVJlZ2lzdGVycygpOwogfQogCi1zaXplX3QgUHJvY2VkdXJlOjphZGRTdGFja1Ns
b3RJbmRleCgpCitWYWx1ZSogUHJvY2VkdXJlOjphZGRWYWx1ZUltcGwoVmFsdWUqIHZhbHVlKQog
ewotICAgIGlmIChtX3N0YWNrU2xvdEluZGV4RnJlZUxpc3QuaXNFbXB0eSgpKSB7Ci0gICAgICAg
IHNpemVfdCBpbmRleCA9IG1fc3RhY2tTbG90cy5zaXplKCk7Ci0gICAgICAgIG1fc3RhY2tTbG90
cy5hcHBlbmQobnVsbHB0cik7Ci0gICAgICAgIHJldHVybiBpbmRleDsKLSAgICB9Ci0gICAgCi0g
ICAgcmV0dXJuIG1fc3RhY2tTbG90SW5kZXhGcmVlTGlzdC50YWtlTGFzdCgpOworICAgIHJldHVy
biBtX3ZhbHVlcy5hZGQodmFsdWUpOwogfQogCi1zaXplX3QgUHJvY2VkdXJlOjphZGRWYWx1ZUlu
ZGV4KCkKK3ZvaWQgUHJvY2VkdXJlOjpzZXRCbG9ja09yZGVySW1wbChWZWN0b3I8QmFzaWNCbG9j
ayo+JiBibG9ja3MpCiB7Ci0gICAgaWYgKG1fdmFsdWVJbmRleEZyZWVMaXN0LmlzRW1wdHkoKSkg
ewotICAgICAgICBzaXplX3QgaW5kZXggPSBtX3ZhbHVlcy5zaXplKCk7Ci0gICAgICAgIG1fdmFs
dWVzLmFwcGVuZChudWxscHRyKTsKLSAgICAgICAgcmV0dXJuIGluZGV4OworICAgIEluZGV4U2V0
PEJhc2ljQmxvY2s+IGJsb2Nrc1NldDsKKyAgICBibG9ja3NTZXQuYWRkQWxsKGJsb2Nrcyk7CisK
KyAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogKnRoaXMpIHsKKyAgICAgICAgaWYgKCFibG9j
a3NTZXQuY29udGFpbnMoYmxvY2spKQorICAgICAgICAgICAgYmxvY2tzLmFwcGVuZChibG9jayk7
CisgICAgfQorCisgICAgLy8gUGxhY2UgYmxvY2tzIGludG8gdGhpcydzIGJsb2NrIGxpc3QgYnkg
Zmlyc3QgbGVha2luZyBhbGwgb2YgdGhlIGJsb2NrcyBhbmQgdGhlbiByZWFkb3B0aW5nCisgICAg
Ly8gdGhlbS4KKyAgICBmb3IgKGF1dG8mIGVudHJ5IDogbV9ibG9ja3MpCisgICAgICAgIGVudHJ5
LnJlbGVhc2UoKTsKKworICAgIG1fYmxvY2tzLnJlc2l6ZShibG9ja3Muc2l6ZSgpKTsKKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmxvY2tzLnNpemUoKTsgKytpKSB7CisgICAgICAgIEJh
c2ljQmxvY2sqIGJsb2NrID0gYmxvY2tzW2ldOworICAgICAgICBibG9jay0+bV9pbmRleCA9IGk7
CisgICAgICAgIG1fYmxvY2tzW2ldID0gc3RkOjp1bmlxdWVfcHRyPEJhc2ljQmxvY2s+KGJsb2Nr
KTsKICAgICB9Ci0gICAgCi0gICAgcmV0dXJuIG1fdmFsdWVJbmRleEZyZWVMaXN0LnRha2VMYXN0
KCk7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzUHJvY2VkdXJlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzUHJvY2VkdXJlLmgJKHJldmlzaW9uIDE5NTk3MCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBA
CiAjaW5jbHVkZSAiQjNPcGFxdWVCeXByb2R1Y3RzLmgiCiAjaW5jbHVkZSAiQjNPcmlnaW4uaCIK
ICNpbmNsdWRlICJCM1BDVG9PcmlnaW5NYXAuaCIKKyNpbmNsdWRlICJCM1NwYXJzZUNvbGxlY3Rp
b24uaCIKICNpbmNsdWRlICJCM1N0YWNrU2xvdEtpbmQuaCIKICNpbmNsdWRlICJCM1R5cGUuaCIK
ICNpbmNsdWRlICJCM1ZhbHVlS2V5LmgiCkBAIC05NCw4ICs5NSw4IEBAIHB1YmxpYzoKICAgICAg
ICAgc2V0QmxvY2tPcmRlckltcGwoYmxvY2tzKTsKICAgICB9CiAKLSAgICBKU19FWFBPUlRfUFJJ
VkFURSBTdGFja1Nsb3QqIGFkZFN0YWNrU2xvdCh1bnNpZ25lZCBieXRlU2l6ZSwgU3RhY2tTbG90
S2luZCk7Ci0gICAgSlNfRVhQT1JUX1BSSVZBVEUgU3RhY2tTbG90KiBhZGRBbm9ueW1vdXNTdGFj
a1Nsb3QoVHlwZSk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgU3RhY2tTbG90KiBhZGRTdGFja1Ns
b3QodW5zaWduZWQgYnl0ZVNpemUpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIFZhcmlhYmxlKiBh
ZGRWYXJpYWJsZShUeXBlKTsKICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZVR5cGUs
IHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KICAgICBWYWx1ZVR5cGUqIGFkZChBcmd1bWVudHMuLi4p
OwpAQCAtMTc4LDE0MyArMTc5LDIyIEBAIHB1YmxpYzoKICAgICBWZWN0b3I8QmFzaWNCbG9jayo+
IGJsb2Nrc0luUHJlT3JkZXIoKTsKICAgICBWZWN0b3I8QmFzaWNCbG9jayo+IGJsb2Nrc0luUG9z
dE9yZGVyKCk7CiAKLSAgICBjbGFzcyBTdGFja1Nsb3RzQ29sbGVjdGlvbiB7Ci0gICAgcHVibGlj
OgotICAgICAgICBTdGFja1Nsb3RzQ29sbGVjdGlvbihjb25zdCBQcm9jZWR1cmUmIHByb2MpCi0g
ICAgICAgICAgICA6IG1fcHJvYyhwcm9jKQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgICAg
ICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9wcm9jLm1fc3RhY2tTbG90cy5zaXpl
KCk7IH0KLSAgICAgICAgU3RhY2tTbG90KiBhdCh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1
cm4gbV9wcm9jLm1fc3RhY2tTbG90c1tpbmRleF0uZ2V0KCk7IH0KLSAgICAgICAgU3RhY2tTbG90
KiBvcGVyYXRvcltdKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBhdChpbmRleCk7IH0K
LQotICAgICAgICBjbGFzcyBpdGVyYXRvciB7Ci0gICAgICAgIHB1YmxpYzoKLSAgICAgICAgICAg
IGl0ZXJhdG9yKCkKLSAgICAgICAgICAgICAgICA6IG1fY29sbGVjdGlvbihudWxscHRyKQotICAg
ICAgICAgICAgICAgICwgbV9pbmRleCgwKQotICAgICAgICAgICAgewotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICBpdGVyYXRvcihjb25zdCBTdGFja1Nsb3RzQ29sbGVjdGlvbiYgY29sbGVj
dGlvbiwgdW5zaWduZWQgaW5kZXgpCi0gICAgICAgICAgICAgICAgOiBtX2NvbGxlY3Rpb24oJmNv
bGxlY3Rpb24pCi0gICAgICAgICAgICAgICAgLCBtX2luZGV4KGZpbmROZXh0KGluZGV4KSkKLSAg
ICAgICAgICAgIHsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgU3RhY2tTbG90KiBvcGVy
YXRvciooKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBtX2NvbGxlY3Rp
b24tPmF0KG1faW5kZXgpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpdGVyYXRvciYg
b3BlcmF0b3IrKygpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbV9pbmRleCA9IGZp
bmROZXh0KG1faW5kZXggKyAxKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBpdGVyYXRvciYg
b3RoZXIpIGNvbnN0Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG1faW5k
ZXggPT0gb3RoZXIubV9pbmRleDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgYm9vbCBv
cGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgcHJpdmF0ZToKLSAgICAgICAgICAgIHVuc2lnbmVkIGZpbmROZXh0KHVuc2lnbmVk
IGluZGV4KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHdoaWxlIChpbmRleCA8IG1f
Y29sbGVjdGlvbi0+c2l6ZSgpICYmICFtX2NvbGxlY3Rpb24tPmF0KGluZGV4KSkKLSAgICAgICAg
ICAgICAgICAgICAgaW5kZXgrKzsKLSAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXg7Ci0gICAg
ICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGNvbnN0IFN0YWNrU2xvdHNDb2xs
ZWN0aW9uKiBtX2NvbGxlY3Rpb247Ci0gICAgICAgICAgICB1bnNpZ25lZCBtX2luZGV4OwotICAg
ICAgICB9OwotCi0gICAgICAgIGl0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0
b3IoKnRoaXMsIDApOyB9Ci0gICAgICAgIGl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIGl0
ZXJhdG9yKCp0aGlzLCBzaXplKCkpOyB9Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBjb25zdCBQ
cm9jZWR1cmUmIG1fcHJvYzsKLSAgICB9OwotCi0gICAgU3RhY2tTbG90c0NvbGxlY3Rpb24gc3Rh
Y2tTbG90cygpIGNvbnN0IHsgcmV0dXJuIFN0YWNrU2xvdHNDb2xsZWN0aW9uKCp0aGlzKTsgfQor
ICAgIFNwYXJzZUNvbGxlY3Rpb248U3RhY2tTbG90PiYgc3RhY2tTbG90cygpIHsgcmV0dXJuIG1f
c3RhY2tTbG90czsgfQorICAgIGNvbnN0IFNwYXJzZUNvbGxlY3Rpb248U3RhY2tTbG90PiYgc3Rh
Y2tTbG90cygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhY2tTbG90czsgfQogCisgICAgLy8gU2hvcnQg
Zm9yIHN0YWNrU2xvdHMoKS5yZW1vdmUoKS4gSXQncyBiZXR0ZXIgdG8gY2FsbCB0aGlzIG1ldGhv
ZCBzaW5jZSBpdCdzIG91dCBvZiBsaW5lLgogICAgIHZvaWQgZGVsZXRlU3RhY2tTbG90KFN0YWNr
U2xvdCopOwotICAgIAotICAgIGNsYXNzIFZhbHVlc0NvbGxlY3Rpb24gewotICAgIHB1YmxpYzoK
LSAgICAgICAgVmFsdWVzQ29sbGVjdGlvbihjb25zdCBQcm9jZWR1cmUmIHByb2NlZHVyZSkKLSAg
ICAgICAgICAgIDogbV9wcm9jZWR1cmUocHJvY2VkdXJlKQotICAgICAgICB7Ci0gICAgICAgIH0K
IAotICAgICAgICBjbGFzcyBpdGVyYXRvciB7Ci0gICAgICAgIHB1YmxpYzoKLSAgICAgICAgICAg
IGl0ZXJhdG9yKCkKLSAgICAgICAgICAgICAgICA6IG1fcHJvY2VkdXJlKG51bGxwdHIpCi0gICAg
ICAgICAgICAgICAgLCBtX2luZGV4KDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIGl0ZXJhdG9yKGNvbnN0IFByb2NlZHVyZSYgcHJvY2VkdXJlLCB1bnNpZ25l
ZCBpbmRleCkKLSAgICAgICAgICAgICAgICA6IG1fcHJvY2VkdXJlKCZwcm9jZWR1cmUpCi0gICAg
ICAgICAgICAgICAgLCBtX2luZGV4KGZpbmROZXh0KGluZGV4KSkKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgVmFsdWUqIG9wZXJhdG9yKigpIGNvbnN0Ci0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG1fcHJvY2VkdXJlLT5tX3ZhbHVlc1tt
X2luZGV4XS5nZXQoKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaXRlcmF0b3ImIG9w
ZXJhdG9yKysoKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG1faW5kZXggPSBmaW5k
TmV4dChtX2luZGV4ICsgMSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuICp0aGlzOwotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRlcmF0b3ImIG90
aGVyKSBjb25zdAotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIEFTU0VSVChtX3Byb2Nl
ZHVyZSA9PSBvdGhlci5tX3Byb2NlZHVyZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG1faW5k
ZXggPT0gb3RoZXIubV9pbmRleDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgYm9vbCBv
cGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgcHJpdmF0ZToKLSAgICAgICAgICAgIHVuc2lnbmVkIGZpbmROZXh0KHVuc2lnbmVk
IGluZGV4KQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHdoaWxlIChpbmRleCA8IG1f
cHJvY2VkdXJlLT5tX3ZhbHVlcy5zaXplKCkgJiYgIW1fcHJvY2VkdXJlLT5tX3ZhbHVlc1tpbmRl
eF0pCi0gICAgICAgICAgICAgICAgICAgIGluZGV4Kys7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IGluZGV4OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBjb25zdCBQcm9jZWR1cmUqIG1f
cHJvY2VkdXJlOwotICAgICAgICAgICAgdW5zaWduZWQgbV9pbmRleDsKLSAgICAgICAgfTsKLQot
ICAgICAgICBpdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKG1fcHJvY2Vk
dXJlLCAwKTsgfQotICAgICAgICBpdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBpdGVyYXRv
cihtX3Byb2NlZHVyZSwgbV9wcm9jZWR1cmUubV92YWx1ZXMuc2l6ZSgpKTsgfQotCi0gICAgICAg
IHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBtX3Byb2NlZHVyZS5tX3ZhbHVlcy5zaXpl
KCk7IH0KLSAgICAgICAgVmFsdWUqIGF0KHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBt
X3Byb2NlZHVyZS5tX3ZhbHVlc1tpbmRleF0uZ2V0KCk7IH0KLSAgICAgICAgVmFsdWUqIG9wZXJh
dG9yW10odW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGF0KGluZGV4KTsgfQotICAgICAg
ICAKLSAgICBwcml2YXRlOgotICAgICAgICBjb25zdCBQcm9jZWR1cmUmIG1fcHJvY2VkdXJlOwot
ICAgIH07CisgICAgU3BhcnNlQ29sbGVjdGlvbjxWYXJpYWJsZT4mIHZhcmlhYmxlcygpIHsgcmV0
dXJuIG1fdmFyaWFibGVzOyB9CisgICAgY29uc3QgU3BhcnNlQ29sbGVjdGlvbjxWYXJpYWJsZT4m
IHZhcmlhYmxlcygpIGNvbnN0IHsgcmV0dXJuIG1fdmFyaWFibGVzOyB9CisKKyAgICAvLyBTaG9y
dCBmb3IgdmFyaWFibGVzKCkucmVtb3ZlKCkuIEl0J3MgYmV0dGVyIHRvIGNhbGwgdGhpcyBtZXRo
b2Qgc2luY2UgaXQncyBvdXQgb2YgbGluZS4KKyAgICB2b2lkIGRlbGV0ZVZhcmlhYmxlKFZhcmlh
YmxlKik7CiAKLSAgICBjb25zdCBWYWx1ZXNDb2xsZWN0aW9uJiB2YWx1ZXMoKSBjb25zdCB7IHJl
dHVybiBtX3ZhbHVlc0NvbGxlY3Rpb247IH0KKyAgICBTcGFyc2VDb2xsZWN0aW9uPFZhbHVlPiYg
dmFsdWVzKCkgeyByZXR1cm4gbV92YWx1ZXM7IH0KKyAgICBjb25zdCBTcGFyc2VDb2xsZWN0aW9u
PFZhbHVlPiYgdmFsdWVzKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXM7IH0KIAorICAgIC8vIFNo
b3J0IGZvciB2YWx1ZXMoKS5yZW1vdmUoKS4gSXQncyBiZXR0ZXIgdG8gY2FsbCB0aGlzIG1ldGhv
ZCBzaW5jZSBpdCdzIG91dCBvZiBsaW5lLgogICAgIHZvaWQgZGVsZXRlVmFsdWUoVmFsdWUqKTsK
IAogICAgIC8vIEEgdmFsaWQgcHJvY2VkdXJlIGNhbm5vdCBjb250YWluIGFueSBvcnBoYW4gdmFs
dWVzLiBBbiBvcnBoYW4gaXMgYSB2YWx1ZSB0aGF0IGlzIG5vdCBpbgpAQCAtMzY3LDE3ICsyNDcs
MTQgQEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBCbG9ja0luc2VydGlv
blNldDsKLSAgICAKLSAgICB2b2lkIHNldEJsb2NrT3JkZXJJbXBsKFZlY3RvcjxCYXNpY0Jsb2Nr
Kj4mKTsKIAotICAgIHNpemVfdCBhZGRTdGFja1Nsb3RJbmRleCgpOwotICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHNpemVfdCBhZGRWYWx1ZUluZGV4KCk7CisgICAgVmFsdWUqIGFkZFZhbHVlSW1wbChW
YWx1ZSopOworICAgIHZvaWQgc2V0QmxvY2tPcmRlckltcGwoVmVjdG9yPEJhc2ljQmxvY2sqPiYp
OwogCi0gICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxTdGFja1Nsb3Q+PiBtX3N0YWNrU2xvdHM7
CisgICAgU3BhcnNlQ29sbGVjdGlvbjxTdGFja1Nsb3Q+IG1fc3RhY2tTbG90czsKKyAgICBTcGFy
c2VDb2xsZWN0aW9uPFZhcmlhYmxlPiBtX3ZhcmlhYmxlczsKICAgICBWZWN0b3I8c3RkOjp1bmlx
dWVfcHRyPEJhc2ljQmxvY2s+PiBtX2Jsb2NrczsKLSAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRy
PFZhbHVlPj4gbV92YWx1ZXM7Ci0gICAgVmVjdG9yPHNpemVfdD4gbV9zdGFja1Nsb3RJbmRleEZy
ZWVMaXN0OwotICAgIFZlY3RvcjxzaXplX3Q+IG1fdmFsdWVJbmRleEZyZWVMaXN0OworICAgIFNw
YXJzZUNvbGxlY3Rpb248VmFsdWU+IG1fdmFsdWVzOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxDRkc+
IG1fY2ZnOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxEb21pbmF0b3JzPiBtX2RvbWluYXRvcnM7CiAg
ICAgSGFzaFNldDxWYWx1ZUtleT4gbV9mYXN0Q29uc3RhbnRzOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlSW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZUlubGluZXMuaAkocmV2aXNpb24gMTk1OTcwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlSW5saW5lcy5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zNiwxMSArMzYsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsK
IHRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUuLi4gQXJndW1lbnRzPgogVmFs
dWVUeXBlKiBQcm9jZWR1cmU6OmFkZChBcmd1bWVudHMuLi4gYXJndW1lbnRzKQogewotICAgIHNp
emVfdCBpbmRleCA9IGFkZFZhbHVlSW5kZXgoKTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8VmFsdWVU
eXBlPiB2YWx1ZShuZXcgVmFsdWVUeXBlKGluZGV4LCBhcmd1bWVudHMuLi4pKTsKLSAgICBWYWx1
ZVR5cGUqIHJlc3VsdCA9IHZhbHVlLmdldCgpOwotICAgIG1fdmFsdWVzW2luZGV4XSA9IFdURk1v
dmUodmFsdWUpOwotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFZh
bHVlVHlwZSo+KGFkZFZhbHVlSW1wbChuZXcgVmFsdWVUeXBlKGFyZ3VtZW50cy4uLikpKTsKIH0K
IAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzUmVkdWNlU3RyZW5ndGguY3BwCShyZXZpc2lvbiAxOTU5NzApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTIyODMsMTMgKzIyODMsMTUgQEAgcHJpdmF0ZToKICAgICAgICAgVmVjdG9yPFVwc2lsb25WYWx1
ZSosIDY0PiB1cHNpbG9uczsKICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fcHJv
YykgewogICAgICAgICAgICAgZm9yIChWYWx1ZSogdmFsdWUgOiAqYmxvY2spIHsKLSAgICAgICAg
ICAgICAgICBFZmZlY3RzIGVmZmVjdHMgPSB2YWx1ZS0+ZWZmZWN0cygpOwotICAgICAgICAgICAg
ICAgIC8vIFdlIGRvbid0IGNhcmUgYWJvdXQgU1NBIEVmZmVjdHMsIHNpbmNlIHdlIG1vZGVsIHRo
ZW0gbW9yZSBhY2N1cmF0ZWx5IHRoYW4gdGhlCi0gICAgICAgICAgICAgICAgLy8gZWZmZWN0cygp
IG1ldGhvZCBkb2VzLgotICAgICAgICAgICAgICAgIGVmZmVjdHMud3JpdGVzU1NBU3RhdGUgPSBm
YWxzZTsKLSAgICAgICAgICAgICAgICBlZmZlY3RzLnJlYWRzU1NBU3RhdGUgPSBmYWxzZTsKKyAg
ICAgICAgICAgICAgICBFZmZlY3RzIGVmZmVjdHM7CisgICAgICAgICAgICAgICAgLy8gV2UgZG9u
J3QgY2FyZSBhYm91dCBlZmZlY3RzIG9mIFNTQSBvcGVyYXRpb25zLCBzaW5jZSB3ZSBtb2RlbCB0
aGVtIG1vcmUKKyAgICAgICAgICAgICAgICAvLyBhY2N1cmF0ZWx5IHRoYSB0aGUgZWZmZWN0cygp
IG1ldGhvZCBkb2VzLgorICAgICAgICAgICAgICAgIGlmICh2YWx1ZS0+b3Bjb2RlKCkgIT0gUGhp
ICYmIHZhbHVlLT5vcGNvZGUoKSAhPSBVcHNpbG9uKQorICAgICAgICAgICAgICAgICAgICBlZmZl
Y3RzID0gdmFsdWUtPmVmZmVjdHMoKTsKKyAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICBpZiAoZWZmZWN0cy5tdXN0RXhlY3V0ZSgpKQogICAgICAgICAgICAgICAgICAgICB3b3JrbGlz
dC5wdXNoKHZhbHVlKTsKKyAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAoVXBz
aWxvblZhbHVlKiB1cHNpbG9uID0gdmFsdWUtPmFzPFVwc2lsb25WYWx1ZT4oKSkKICAgICAgICAg
ICAgICAgICAgICAgdXBzaWxvbnMuYXBwZW5kKHVwc2lsb24pOwogICAgICAgICAgICAgfQpAQCAt
MjMxNCw3ICsyMzE2LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQogCi0gICAgICAgIEluZGV4U2V0PFN0YWNrU2xvdD4gbGl2ZVN0YWNrU2xvdHM7CisgICAg
ICAgIEluZGV4U2V0PFZhcmlhYmxlPiBsaXZlVmFyaWFibGVzOwogICAgICAgICAKICAgICAgICAg
Zm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fcHJvYykgewogICAgICAgICAgICAgc2l6ZV90IHNv
dXJjZUluZGV4ID0gMDsKQEAgLTIzMjIsOCArMjMyNCw4IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICB3aGlsZSAoc291cmNlSW5kZXggPCBibG9jay0+c2l6ZSgpKSB7CiAgICAgICAgICAgICAgICAg
VmFsdWUqIHZhbHVlID0gYmxvY2stPmF0KHNvdXJjZUluZGV4KyspOwogICAgICAgICAgICAgICAg
IGlmICh3b3JrbGlzdC5zYXcodmFsdWUpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChTbG90
QmFzZVZhbHVlKiBzbG90QmFzZSA9IHZhbHVlLT5hczxTbG90QmFzZVZhbHVlPigpKQotICAgICAg
ICAgICAgICAgICAgICAgICAgbGl2ZVN0YWNrU2xvdHMuYWRkKHNsb3RCYXNlLT5zbG90KCkpOwor
ICAgICAgICAgICAgICAgICAgICBpZiAoVmFyaWFibGVWYWx1ZSogdmFyaWFibGVWYWx1ZSA9IHZh
bHVlLT5hczxWYXJpYWJsZVZhbHVlPigpKQorICAgICAgICAgICAgICAgICAgICAgICAgbGl2ZVZh
cmlhYmxlcy5hZGQodmFyaWFibGVWYWx1ZS0+dmFyaWFibGUoKSk7CiAgICAgICAgICAgICAgICAg
ICAgIGJsb2NrLT5hdCh0YXJnZXRJbmRleCsrKSA9IHZhbHVlOwogICAgICAgICAgICAgICAgIH0g
ZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIG1fcHJvYy5kZWxldGVWYWx1ZSh2YWx1ZSk7CkBA
IC0yMzM4LDEwICsyMzQwLDkgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGJsb2NrLT52YWx1ZXMo
KS5yZXNpemUodGFyZ2V0SW5kZXgpOwogICAgICAgICB9CiAKLSAgICAgICAgZm9yIChTdGFja1Ns
b3QqIHNsb3QgOiBtX3Byb2Muc3RhY2tTbG90cygpKSB7Ci0gICAgICAgICAgICBpZiAoc2xvdC0+
aXNMb2NrZWQoKSB8fCBsaXZlU3RhY2tTbG90cy5jb250YWlucyhzbG90KSkKLSAgICAgICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIG1fcHJvYy5kZWxldGVTdGFja1Nsb3Qoc2xvdCk7
CisgICAgICAgIGZvciAoVmFyaWFibGUqIHZhcmlhYmxlIDogbV9wcm9jLnZhcmlhYmxlcygpKQor
ICAgICAgICAgICAgaWYgKCFsaXZlVmFyaWFibGVzLmNvbnRhaW5zKHZhcmlhYmxlKSkKKyAgICAg
ICAgICAgICAgICBtX3Byb2MuZGVsZXRlVmFyaWFibGUodmFyaWFibGUpOwogICAgICAgICB9CiAg
ICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTbG90QmFzZVZhbHVlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU2xvdEJhc2VWYWx1ZS5o
CShyZXZpc2lvbiAxOTU5NzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTbG90QmFz
ZVZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTUwLDggKzUwLDggQEAgcHJvdGVjdGVkOgogcHJp
dmF0ZToKICAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOwogCi0gICAgU2xvdEJhc2VWYWx1ZSh1
bnNpZ25lZCBpbmRleCwgT3JpZ2luIG9yaWdpbiwgU3RhY2tTbG90KiBzbG90KQotICAgICAgICA6
IFZhbHVlKGluZGV4LCBDaGVja2VkT3Bjb2RlLCBTbG90QmFzZSwgcG9pbnRlclR5cGUoKSwgb3Jp
Z2luKQorICAgIFNsb3RCYXNlVmFsdWUoT3JpZ2luIG9yaWdpbiwgU3RhY2tTbG90KiBzbG90KQor
ICAgICAgICA6IFZhbHVlKENoZWNrZWRPcGNvZGUsIFNsb3RCYXNlLCBwb2ludGVyVHlwZSgpLCBv
cmlnaW4pCiAgICAgICAgICwgbV9zbG90KHNsb3QpCiAgICAgewogICAgIH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1NwYXJzZUNvbGxlY3Rpb24uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTcGFyc2VDb2xsZWN0aW9uLmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTcGFyc2VDb2xsZWN0aW9uLmgJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwxNDAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBD
T05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICog
UFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0Us
IERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIg
Q0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09O
VFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5D
RSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1NwYXJzZUNvbGxlY3Rpb25faAorI2RlZmluZSBC
M1NwYXJzZUNvbGxlY3Rpb25faAorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgPHd0
Zi9TdGRMaWJFeHRyYXMuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CisKK25hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgQjMgeworCisvLyBCMzo6UHJvY2VkdXJlIGFuZCBBaXI6OkNvZGUgaGF2
ZSBhIGxvdCBvZiBjb2xsZWN0aW9ucyBvZiBpbmRleGVkIHRoaW5ncy4gVGhpcyBoYXMgYWxsIG9m
IHRoZQorLy8gbG9naWMuCisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitjbGFzcyBTcGFyc2VDb2xs
ZWN0aW9uIHsKKyAgICB0eXBlZGVmIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8VD4+IFZlY3RvclR5
cGU7CisgICAgCitwdWJsaWM6CisgICAgU3BhcnNlQ29sbGVjdGlvbigpCisgICAgeworICAgIH0K
KworICAgIFQqIGFkZChzdGQ6OnVuaXF1ZV9wdHI8VD4gdmFsdWUpCisgICAgeworICAgICAgICBU
KiByZXN1bHQgPSB2YWx1ZS5nZXQoKTsKKyAgICAgICAgCisgICAgICAgIHNpemVfdCBpbmRleDsK
KyAgICAgICAgaWYgKG1faW5kZXhGcmVlTGlzdC5pc0VtcHR5KCkpIHsKKyAgICAgICAgICAgIGlu
ZGV4ID0gbV92ZWN0b3Iuc2l6ZSgpOworICAgICAgICAgICAgbV92ZWN0b3IuYXBwZW5kKG51bGxw
dHIpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIGluZGV4ID0gbV9pbmRleEZyZWVMaXN0
LnRha2VMYXN0KCk7CisKKyAgICAgICAgdmFsdWUtPm1faW5kZXggPSBpbmRleDsKKworICAgICAg
ICBtX3ZlY3RvcltpbmRleF0gPSBXVEZNb3ZlKHZhbHVlKTsKKworICAgICAgICByZXR1cm4gcmVz
dWx0OworICAgIH0KKworICAgIHZvaWQgcmVtb3ZlKFQqIHZhbHVlKQorICAgIHsKKyAgICAgICAg
UkVMRUFTRV9BU1NFUlQobV92ZWN0b3JbdmFsdWUtPm1faW5kZXhdLmdldCgpID09IHZhbHVlKTsK
KyAgICAgICAgbV9pbmRleEZyZWVMaXN0LmFwcGVuZCh2YWx1ZS0+bV9pbmRleCk7CisgICAgICAg
IG1fdmFsdWVzW3ZhbHVlLT5tX2luZGV4XSA9IG51bGxwdHI7CisgICAgfQorCisgICAgdW5zaWdu
ZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmVjdG9yLnNpemUoKTsgfQorICAgIGJvb2wgaXNF
bXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fdmVjdG9yLmlzRW1wdHkoKTsgfQorICAgIAorICAgIFQq
IGF0KHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBtX3ZlY3RvcltpbmRleF0uZ2V0KCk7
IH0KKyAgICBUKiBvcGVyYXRvcltdKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBhdChp
bmRleCk7IH0KKworICAgIGNsYXNzIGl0ZXJhdG9yIHsKKyAgICBwdWJsaWM6CisgICAgICAgIGl0
ZXJhdG9yKCkKKyAgICAgICAgICAgIDogbV9jb2xsZWN0aW9uKG51bGxwdHIpCisgICAgICAgICAg
ICAsIG1faW5kZXgoMCkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgaXRlcmF0b3Io
Y29uc3QgU3BhcnNlQ29sbGVjdGlvbiYgY29sbGVjdGlvbiwgdW5zaWduZWQgaW5kZXgpCisgICAg
ICAgICAgICA6IG1fY29sbGVjdGlvbigmY29sbGVjdGlvbikKKyAgICAgICAgICAgICwgbV9pbmRl
eChmaW5kSW5kZXgoaW5kZXgpKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBUKiBv
cGVyYXRvciooKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9jb2xsZWN0aW9uLT5h
dChtX2luZGV4KTsKKyAgICAgICAgfQorCisgICAgICAgIGl0ZXJhdG9yJiBvcGVyYXRvcisrKCkK
KyAgICAgICAgeworICAgICAgICAgICAgbV9pbmRleCA9IGZpbmROZXh0KG1faW5kZXggKyAxKTsK
KyAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAgICAgfQorCisgICAgICAgIGJvb2wgb3Bl
cmF0b3I9PShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0CisgICAgICAgIHsKKyAgICAgICAg
ICAgIEFTU0VSVChtX2NvbGxlY3Rpb24gPT0gb3RoZXIubV9jb2xsZWN0aW9uKTsKKyAgICAgICAg
ICAgIHJldHVybiBtX2luZGV4ID09IG90aGVyLm1faW5kZXg7CisgICAgICAgIH0KKworICAgICAg
ICBib29sIG9wZXJhdG9yIT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICB7
CisgICAgICAgICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7CisgICAgICAgIH0KKworICAg
IHByaXZhdGU6CisgICAgICAgIHVuc2lnbmVkIGZpbmROZXh0KHVuc2lnbmVkIGluZGV4KQorICAg
ICAgICB7CisgICAgICAgICAgICB3aGlsZSAoaW5kZXggPCBtX2NvbGxlY3Rpb24tPnNpemUoKSAm
JiAhbV9jb2xsZWN0aW9uLT5hdChpbmRleCkpCisgICAgICAgICAgICAgICAgaW5kZXgrKzsKKyAg
ICAgICAgICAgIHJldHVybiBpbmRleDsKKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0IFNwYXJz
ZUNvbGxlY3Rpb24qIG1fY29sbGVjdGlvbjsKKyAgICAgICAgdW5zaWdlZCBtX2luZGV4OworICAg
IH07CisKKyAgICBpdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKCp0aGlz
LCAwKTsgfQorICAgIGl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKCp0aGlz
LCBzaXplKCkpOyB9CisKK3ByaXZhdGU6CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxUPj4g
bV92ZWN0b3I7CisgICAgVmVjdG9yPHNpemVfdD4gbV9pbmRleEZyZWVMaXN0OworfTsKKworfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5k
aWYgLy8gQjNTcGFyc2VDb2xsZWN0aW9uX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzU3RhY2tTbG90LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNTdGFja1Nsb3QuY3BwCShyZXZpc2lvbiAxOTU5NzApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNTdGFja1Nsb3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSwxMyArNDEsMTEg
QEAgdm9pZCBTdGFja1Nsb3Q6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgYwogCiB2b2lkIFN0YWNr
U2xvdDo6ZGVlcER1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKIHsKLSAgICBvdXQucHJpbnQo
ImJ5dGVTaXplID0gIiwgbV9ieXRlU2l6ZSwgIiwgb2Zmc2V0RnJvbUZQID0gIiwgbV9vZmZzZXRG
cm9tRlAsICIsIGtpbmQgPSAiLCBtX2tpbmQpOworICAgIG91dC5wcmludCgiYnl0ZVNpemUgPSAi
LCBtX2J5dGVTaXplLCAiLCBvZmZzZXRGcm9tRlAgPSAiLCBtX29mZnNldEZyb21GUCk7CiB9CiAK
LVN0YWNrU2xvdDo6U3RhY2tTbG90KHVuc2lnbmVkIGluZGV4LCB1bnNpZ25lZCBieXRlU2l6ZSwg
U3RhY2tTbG90S2luZCBraW5kKQotICAgIDogbV9pbmRleChpbmRleCkKLSAgICAsIG1fYnl0ZVNp
emUoYnl0ZVNpemUpCi0gICAgLCBtX2tpbmQoa2luZCkKK1N0YWNrU2xvdDo6U3RhY2tTbG90KHVu
c2lnbmVkIGJ5dGVTaXplKQorICAgIDogbV9ieXRlU2l6ZShieXRlU2l6ZSkKIHsKIH0KIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tTbG90LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tTbG90LmgJKHJldmlzaW9uIDE5NTk3MCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrU2xvdC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yOCw3ICsyOCw2IEBACiAKICNpZiBFTkFCTEUoQjNfSklUKQogCi0jaW5jbHVkZSAiQjNT
dGFja1Nsb3RLaW5kLmgiCiAjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KICNpbmNsdWRlIDx3
dGYvTm9uY29weWFibGUuaD4KICNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KQEAgLTQ5LDgg
KzQ4LDYgQEAgcHVibGljOgogICAgIH5TdGFja1Nsb3QoKTsKIAogICAgIHVuc2lnbmVkIGJ5dGVT
aXplKCkgY29uc3QgeyByZXR1cm4gbV9ieXRlU2l6ZTsgfQotICAgIFN0YWNrU2xvdEtpbmQga2lu
ZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQotICAgIGJvb2wgaXNMb2NrZWQoKSBjb25zdCB7
IHJldHVybiBtX2tpbmQgPT0gU3RhY2tTbG90S2luZDo6TG9ja2VkOyB9CiAgICAgdW5zaWduZWQg
aW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4OyB9CiAKICAgICAvLyBUaGlzIGdldHMgYXNz
aWduZWQgYXQgdGhlIGVuZCBvZiBjb21waWxhdGlvbi4gQnV0LCB5b3UgY2FuIHRvdGFsbHkgcGlu
IHN0YWNrIHNsb3RzLiBVc2UgdGhlCkBAIC02MywxOCArNjAsMTcgQEAgcHVibGljOgogICAgICAg
ICBtX29mZnNldEZyb21GUCA9IHZhbHVlOwogICAgIH0KIAotICAgIHZvaWQgZHVtcChQcmludFN0
cmVhbSYgb3V0KSBjb25zdDsKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKICAg
ICB2b2lkIGRlZXBEdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgZnJp
ZW5kIGNsYXNzIEFpcjo6U3RhY2tTbG90OwogICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7CiAK
LSAgICBTdGFja1Nsb3QodW5zaWduZWQgaW5kZXgsIHVuc2lnbmVkIGJ5dGVTaXplLCBTdGFja1Ns
b3RLaW5kKTsKKyAgICBTdGFja1Nsb3QodW5zaWduZWQgYnl0ZVNpemUpOwogCi0gICAgdW5zaWdu
ZWQgbV9pbmRleDsKLSAgICB1bnNpZ25lZCBtX2J5dGVTaXplOwotICAgIFN0YWNrU2xvdEtpbmQg
bV9raW5kOworICAgIHVuc2lnbmVkIG1faW5kZXggeyBVSU5UX01BWCB9OworICAgIHVuc2lnbmVk
IG1fYnl0ZVNpemUgeyAwIH07CiAgICAgaW50cHRyX3QgbV9vZmZzZXRGcm9tRlAgeyAwIH07CiB9
OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja1Nsb3RLaW5kLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja1Nsb3RLaW5kLmNw
cAkocmV2aXNpb24gMTk1OTcwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tT
bG90S2luZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNTIgKzAsMCBAQAotLyoKLSAqIENvcHly
aWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0g
KgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0g
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0j
aW5jbHVkZSAiQjNTdGFja1Nsb3RLaW5kLmgiCi0KLSNpZiBFTkFCTEUoQjNfSklUKQotCi0jaW5j
bHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+Ci0KLW5hbWVzcGFjZSBXVEYgewotCi11c2luZyBuYW1l
c3BhY2UgSlNDOjpCMzsKLQotdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIFN0
YWNrU2xvdEtpbmQga2luZCkKLXsKLSAgICBzd2l0Y2ggKGtpbmQpIHsKLSAgICBjYXNlIFN0YWNr
U2xvdEtpbmQ6OkxvY2tlZDoKLSAgICAgICAgb3V0LnByaW50KCJMb2NrZWQiKTsKLSAgICAgICAg
cmV0dXJuOwotICAgIGNhc2UgU3RhY2tTbG90S2luZDo6QW5vbnltb3VzOgotICAgICAgICBvdXQu
cHJpbnQoIkFub255bW91cyIpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIFdURgotCi0jZW5kaWYg
Ly8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNr
U2xvdEtpbmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFj
a1Nsb3RLaW5kLmgJKHJldmlzaW9uIDE5NTk3MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1N0YWNrU2xvdEtpbmQuaAkod29ya2luZyBjb3B5KQpAQCAtMSw2MyArMCwwIEBACi0vKgot
ICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0g
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBC
M1N0YWNrU2xvdEtpbmRfaAotI2RlZmluZSBCM1N0YWNrU2xvdEtpbmRfaAotCi0jaWYgRU5BQkxF
KEIzX0pJVCkKLQotbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7Ci0KLWVudW0gY2xhc3Mg
U3RhY2tTbG90S2luZCA6IHVpbnQ4X3QgewotICAgIC8vIEEgbG9ja2VkIHN0YWNrIHNsb3QgbmVl
ZHMgdG8gYmUga2VwdCBkaXNqb2ludCBmcm9tIGFsbCBvdGhlcnMgYmVjYXVzZSB3ZSBpbnRlbmQg
dG8gZXNjYXBlCi0gICAgLy8gaXQgZXZlbiBpZiB0aGF0J3Mgbm90IG9idmlvdXMuIFRoaXMgaGFw
cGVucyB3aGVuIHRoZSBydW50aW1lIHRha2VzIHRoZSBhZGRyZXNzIG9mIGEgc3RhY2sKLSAgICAv
LyBzbG90LgotICAgIExvY2tlZCwKLQotICAgIC8vIFRoZXNlIHN0YWNrIHNsb3RzIGJlaGF2ZSBs
aWtlIHZhcmlhYmxlcy4gVW5kZWZpbmVkIGJlaGF2aW9yIGhhcHBlbnMgaWYgeW91IHN0b3JlIGxl
c3MgdGhhbgotICAgIC8vIHRoZSB3aWR0aCBvZiB0aGUgc2xvdC4KLSAgICBBbm9ueW1vdXMKLQot
ICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYWRkIGEgdGhpcmQgbW9kZSwgd2hpY2ggbWVhbnMgdGhh
dCB0aGUgc3RhY2sgc2xvdCB3aWxsIGJlIHJlYWQgYXN5bmNocm9ub3VzbHkKLSAgICAvLyBhcyB3
aXRoIExvY2tlZCwgYnV0IG5ldmVyIHdyaXR0ZW4gdG8gYXN5bmNocm9ub3VzbHkuIFRoZW4sIEFp
ciBjb3VsZCBvcHRpbWl6ZSBzcGlsbGluZyBhbmQKLSAgICAvLyBmaWxsaW5nIGJ5IHRyYWNraW5n
IHdoZXRoZXIgdGhlIHZhbHVlIGhhZCBiZWVuIHN0b3JlZCB0byBhIHJlYWQtb25seSBsb2NrZWQg
c2xvdC4gSWYgaXQgaGFkLAotICAgIC8vIHRoZW4gd2UgY2FuIHJlZmlsbCBmcm9tIHRoYXQgc2xv
dC4KLSAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNTg3
Ci19OwotCi19IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKLQotbmFtZXNwYWNlIFdURiB7Ci0KLWNs
YXNzIFByaW50U3RyZWFtOwotCi12b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6
OkIzOjpTdGFja1Nsb3RLaW5kKTsKLQotfSAvLyBuYW1lc3BhY2UgV1RGCi0KLSNlbmRpZiAvLyBF
TkFCTEUoQjNfSklUKQotCi0jZW5kaWYgLy8gQjNTdGFja1Nsb3RLaW5kX2gKLQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBWYWx1ZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBWYWx1ZS5jcHAJKHJldmlzaW9uIDE5
NTk3MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwVmFsdWUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC04Myw4ICs4Myw4IEBAIHZvaWQgU3RhY2ttYXBWYWx1ZTo6ZHVtcE1l
dGEoQ29tbWFQcmludGUKICAgICAgICAgIiwgbGF0ZUNsb2JiZXJlZCA9ICIsIG1fbGF0ZUNsb2Ji
ZXJlZCwgIiwgdXNlZFJlZ2lzdGVycyA9ICIsIG1fdXNlZFJlZ2lzdGVycyk7CiB9CiAKLVN0YWNr
bWFwVmFsdWU6OlN0YWNrbWFwVmFsdWUodW5zaWduZWQgaW5kZXgsIENoZWNrZWRPcGNvZGVUYWcs
IE9wY29kZSBvcGNvZGUsIFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdpbikKLSAgICA6IFZhbHVlKGlu
ZGV4LCBDaGVja2VkT3Bjb2RlLCBvcGNvZGUsIHR5cGUsIG9yaWdpbikKK1N0YWNrbWFwVmFsdWU6
OlN0YWNrbWFwVmFsdWUoQ2hlY2tlZE9wY29kZVRhZywgT3Bjb2RlIG9wY29kZSwgVHlwZSB0eXBl
LCBPcmlnaW4gb3JpZ2luKQorICAgIDogVmFsdWUoQ2hlY2tlZE9wY29kZSwgb3Bjb2RlLCB0eXBl
LCBvcmlnaW4pCiB7CiAgICAgQVNTRVJUKGFjY2VwdHMob3Bjb2RlKSk7CiB9CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcFZhbHVlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBWYWx1ZS5oCShyZXZpc2lvbiAxOTU5NzAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcFZhbHVlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTI4NCw3ICsyODQsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBkdW1wQ2hpbGRy
ZW4oQ29tbWFQcmludGVyJiwgUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKICAgICB2b2lk
IGR1bXBNZXRhKENvbW1hUHJpbnRlciYsIFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CiAK
LSAgICBTdGFja21hcFZhbHVlKHVuc2lnbmVkIGluZGV4LCBDaGVja2VkT3Bjb2RlVGFnLCBPcGNv
ZGUsIFR5cGUsIE9yaWdpbik7CisgICAgU3RhY2ttYXBWYWx1ZShDaGVja2VkT3Bjb2RlVGFnLCBP
cGNvZGUsIFR5cGUsIE9yaWdpbik7CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIENoZWNr
U3BlY2lhbDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N3aXRjaFZhbHVlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTd2l0Y2hWYWx1ZS5j
cHAJKHJldmlzaW9uIDE5NTk3MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N3aXRj
aFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjgsOSArNjgsOCBAQCBWYWx1ZSogU3dpdGNo
VmFsdWU6OmNsb25lSW1wbCgpIGNvbnN0CiAgICAgcmV0dXJuIG5ldyBTd2l0Y2hWYWx1ZSgqdGhp
cyk7CiB9CiAKLVN3aXRjaFZhbHVlOjpTd2l0Y2hWYWx1ZSgKLSAgICB1bnNpZ25lZCBpbmRleCwg
T3JpZ2luIG9yaWdpbiwgVmFsdWUqIGNoaWxkLCBjb25zdCBGcmVxdWVudGVkQmxvY2smIGZhbGxU
aHJvdWdoKQotICAgIDogQ29udHJvbFZhbHVlKGluZGV4LCBTd2l0Y2gsIFZvaWQsIG9yaWdpbiwg
Y2hpbGQpCitTd2l0Y2hWYWx1ZTo6U3dpdGNoVmFsdWUoT3JpZ2luIG9yaWdpbiwgVmFsdWUqIGNo
aWxkLCBjb25zdCBGcmVxdWVudGVkQmxvY2smIGZhbGxUaHJvdWdoKQorICAgIDogQ29udHJvbFZh
bHVlKFN3aXRjaCwgVm9pZCwgb3JpZ2luLCBjaGlsZCkKIHsKICAgICBtX3N1Y2Nlc3NvcnMuYXBw
ZW5kKGZhbGxUaHJvdWdoKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N3
aXRjaFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3dp
dGNoVmFsdWUuaAkocmV2aXNpb24gMTk1OTcwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzU3dpdGNoVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMTIxLDggKzEyMSw3IEBAIHByb3Rl
Y3RlZDoKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKIAotICAgIEpTX0VY
UE9SVF9QUklWQVRFIFN3aXRjaFZhbHVlKAotICAgICAgICB1bnNpZ25lZCBpbmRleCwgT3JpZ2lu
LCBWYWx1ZSogY2hpbGQsIGNvbnN0IEZyZXF1ZW50ZWRCbG9jayYgZmFsbFRocm91Z2gpOworICAg
IEpTX0VYUE9SVF9QUklWQVRFIFN3aXRjaFZhbHVlKE9yaWdpbiwgVmFsdWUqIGNoaWxkLCBjb25z
dCBGcmVxdWVudGVkQmxvY2smIGZhbGxUaHJvdWdoKTsKIAogICAgIFZlY3RvcjxpbnQ2NF90PiBt
X3ZhbHVlczsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNVcHNpbG9uVmFs
dWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNVcHNpbG9uVmFs
dWUuaAkocmV2aXNpb24gMTk1OTcwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVXBz
aWxvblZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTU3LDggKzU3LDggQEAgcHJpdmF0ZToKICAg
ICAvLyBOb3RlIHRoYXQgcGFzc2luZyB0aGUgUGhpIGR1cmluZyBjb25zdHJ1Y3Rpb24gaXMgb3B0
aW9uYWwuIEEgdmFsaWQgcGF0dGVybiBpcyB0byBmaXJzdCBjcmVhdGUKICAgICAvLyB0aGUgVXBz
aWxvbnMgd2l0aG91dCB0aGUgUGhpLCB0aGVuIGNyZWF0ZSB0aGUgUGhpLCB0aGVuIGdvIGJhY2sg
YW5kIHRlbGwgdGhlIFVwc2lsb25zIGFib3V0CiAgICAgLy8gdGhlIFBoaS4gVGhpcyBhbGxvd3Mg
eW91IHRvIGVtaXQgY29kZSBpbiBpdHMgbmF0dXJhbCBvcmRlci4KLSAgICBVcHNpbG9uVmFsdWUo
dW5zaWduZWQgaW5kZXgsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiB2YWx1ZSwgVmFsdWUqIHBoaSA9
IG51bGxwdHIpCi0gICAgICAgIDogVmFsdWUoaW5kZXgsIENoZWNrZWRPcGNvZGUsIFVwc2lsb24s
IFZvaWQsIG9yaWdpbiwgdmFsdWUpCisgICAgVXBzaWxvblZhbHVlKE9yaWdpbiBvcmlnaW4sIFZh
bHVlKiB2YWx1ZSwgVmFsdWUqIHBoaSA9IG51bGxwdHIpCisgICAgICAgIDogVmFsdWUoQ2hlY2tl
ZE9wY29kZSwgVXBzaWxvbiwgVm9pZCwgb3JpZ2luLCB2YWx1ZSkKICAgICAgICAgLCBtX3BoaShw
aGkpCiAgICAgewogICAgICAgICBpZiAocGhpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzVmFsaWRhdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1ZhbGlkYXRlLmNwcAkocmV2aXNpb24gMTk1OTcwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzVmFsaWRhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTMsNiArMTUzLDE0IEBA
IHB1YmxpYzoKICAgICAgICAgICAgICAgICBWQUxJREFURSghdmFsdWUtPm51bUNoaWxkcmVuKCks
ICgiQXQgIiwgKnZhbHVlKSk7CiAgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPnR5cGUo
KSA9PSBGbG9hdCwgKCJBdCAiLCAqdmFsdWUpKTsKICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIGNhc2UgU2V0OgorICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT5udW1D
aGlsZHJlbigpID09IDEsICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgVkFMSURB
VEUodmFsdWUtPmNoaWxkKDApLT50eXBlKCkgPT0gdmFsdWUtPmFzPFZhcmlhYmxlVmFsdWU+KCkt
PnZhcmlhYmxlKCktPnR5cGUoKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIGNhc2UgR2V0OgorICAgICAgICAgICAgICAgIFZBTElEQVRFKCF2
YWx1ZS0+bnVtQ2hpbGRyZW4oKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBW
QUxJREFURSh2YWx1ZS0+dHlwZSgpID09IHZhbHVlLT5hczxWYXJpYWJsZVZhbHVlPigpLT52YXJp
YWJsZSgpLT50eXBlKCksICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICBjYXNlIFNsb3RCYXNlOgogICAgICAgICAgICAgY2FzZSBGcmFtZVBvaW50
ZXI6CiAgICAgICAgICAgICAgICAgVkFMSURBVEUoIXZhbHVlLT5udW1DaGlsZHJlbigpLCAoIkF0
ICIsICp2YWx1ZSkpOwpAQCAtMzc1LDYgKzM4Myw5IEBAIHB1YmxpYzoKIAogICAgICAgICAgICAg
VkFMSURBVEUoISh2YWx1ZS0+ZWZmZWN0cygpLndyaXRlcyAmJiB2YWx1ZS0+a2V5KCkpLCAoIkF0
ICIsICp2YWx1ZSkpOwogICAgICAgICB9CisKKyAgICAgICAgZm9yIChWYXJpYWJsZSogdmFyaWFi
bGUgOiBtX3Byb2MudmFyaWFibGVzKCkpCisgICAgICAgICAgICBWQUxJREFURSh2YXJpYWJsZS0+
dHlwZSgpICE9IFZvaWQsICgiQXQgIiwgKnZhcmlhYmxlKSk7CiAgICAgfQogCiBwcml2YXRlOgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmNwcAkocmV2aXNpb24gMTk1OTcwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00ODQsMTAgKzQ4NCwxMiBAQCBFZmZlY3RzIFZhbHVlOjplZmZlY3RzKCkgY29uc3QKICAgICAg
ICAgcmVzdWx0LnJlYWRzID0gSGVhcFJhbmdlOjp0b3AoKTsKICAgICAgICAgYnJlYWs7CiAgICAg
Y2FzZSBVcHNpbG9uOgotICAgICAgICByZXN1bHQud3JpdGVzU1NBU3RhdGUgPSB0cnVlOworICAg
IGNhc2UgU2V0OgorICAgICAgICByZXN1bHQud3JpdGVzTG9jYWxTdGF0ZSA9IHRydWU7CiAgICAg
ICAgIGJyZWFrOwogICAgIGNhc2UgUGhpOgotICAgICAgICByZXN1bHQucmVhZHNTU0FTdGF0ZSA9
IHRydWU7CisgICAgY2FzZSBTZXQ6CisgICAgICAgIHJlc3VsdC5yZWFkc0xvY2FsU3RhdGUgPSB0
cnVlOwogICAgICAgICBicmVhazsKICAgICBjYXNlIEp1bXA6CiAgICAgY2FzZSBCcmFuY2g6CkBA
IC01OTgsNiArNjAwLDcgQEAgdm9pZCBWYWx1ZTo6Y2hlY2tPcGNvZGUoT3Bjb2RlIG9wY29kZSkK
ICAgICBBU1NFUlQoIVBhdGNocG9pbnRWYWx1ZTo6YWNjZXB0cyhvcGNvZGUpKTsKICAgICBBU1NF
UlQoIVNsb3RCYXNlVmFsdWU6OmFjY2VwdHMob3Bjb2RlKSk7CiAgICAgQVNTRVJUKCFVcHNpbG9u
VmFsdWU6OmFjY2VwdHMob3Bjb2RlKSk7CisgICAgQVNTRVJUKCFWYXJpYWJsZVZhbHVlOjphY2Nl
cHRzKG9wY29kZSkpOwogfQogI2VuZGlmIC8vICFBU1NFUlRfRElTQUJMRUQKIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5oCShyZXZpc2lvbiAxOTU5NzApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNDMsMjcgKzI0Mywy
NCBAQCBwcm90ZWN0ZWQ6CiAgICAgLy8gSW5zdGFudGlhdGUgdmFsdWVzIHZpYSBQcm9jZWR1cmUu
CiAgICAgLy8gVGhpcyBmb3JtIHJlcXVpcmVzIHNwZWNpZnlpbmcgdGhlIHR5cGUgZXhwbGljaXRs
eToKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+Ci0gICAgZXhwbGljaXQgVmFs
dWUodW5zaWduZWQgaW5kZXgsIENoZWNrZWRPcGNvZGVUYWcsIE9wY29kZSBvcGNvZGUsIFR5cGUg
dHlwZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIGZpcnN0Q2hpbGQsIEFyZ3VtZW50cy4uLiBhcmd1
bWVudHMpCi0gICAgICAgIDogbV9pbmRleChpbmRleCkKLSAgICAgICAgLCBtX29wY29kZShvcGNv
ZGUpCisgICAgZXhwbGljaXQgVmFsdWUoQ2hlY2tlZE9wY29kZVRhZywgT3Bjb2RlIG9wY29kZSwg
VHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogZmlyc3RDaGlsZCwgQXJndW1lbnRzLi4u
IGFyZ3VtZW50cykKKyAgICAgICAgOiBtX29wY29kZShvcGNvZGUpCiAgICAgICAgICwgbV90eXBl
KHR5cGUpCiAgICAgICAgICwgbV9vcmlnaW4ob3JpZ2luKQogICAgICAgICAsIG1fY2hpbGRyZW57
IGZpcnN0Q2hpbGQsIGFyZ3VtZW50cy4uLiB9CiAgICAgewogICAgIH0KICAgICAvLyBUaGlzIGZv
cm0gaXMgZm9yIHNwZWNpZnlpbmcgdGhlIHR5cGUgZXhwbGljaXRseSB3aGVuIHRoZSBvcGNvZGUg
aGFzIG5vIGNoaWxkcmVuOgotICAgIGV4cGxpY2l0IFZhbHVlKHVuc2lnbmVkIGluZGV4LCBDaGVj
a2VkT3Bjb2RlVGFnLCBPcGNvZGUgb3Bjb2RlLCBUeXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4pCi0g
ICAgICAgIDogbV9pbmRleChpbmRleCkKLSAgICAgICAgLCBtX29wY29kZShvcGNvZGUpCisgICAg
ZXhwbGljaXQgVmFsdWUoQ2hlY2tlZE9wY29kZVRhZywgT3Bjb2RlIG9wY29kZSwgVHlwZSB0eXBl
LCBPcmlnaW4gb3JpZ2luKQorICAgICAgICA6IG1fb3Bjb2RlKG9wY29kZSkKICAgICAgICAgLCBt
X3R5cGUodHlwZSkKICAgICAgICAgLCBtX29yaWdpbihvcmlnaW4pCiAgICAgewogICAgIH0KICAg
ICAvLyBUaGlzIGZvcm0gaXMgZm9yIHRob3NlIG9wY29kZXMgdGhhdCBjYW4gaW5mZXIgdGhlaXIg
dHlwZSBmcm9tIHRoZSBvcGNvZGUgYW5kIGZpcnN0IGNoaWxkOgogICAgIHRlbXBsYXRlPHR5cGVu
YW1lLi4uIEFyZ3VtZW50cz4KLSAgICBleHBsaWNpdCBWYWx1ZSh1bnNpZ25lZCBpbmRleCwgQ2hl
Y2tlZE9wY29kZVRhZywgT3Bjb2RlIG9wY29kZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIGZpcnN0
Q2hpbGQpCi0gICAgICAgIDogbV9pbmRleChpbmRleCkKLSAgICAgICAgLCBtX29wY29kZShvcGNv
ZGUpCisgICAgZXhwbGljaXQgVmFsdWUoQ2hlY2tlZE9wY29kZVRhZywgT3Bjb2RlIG9wY29kZSwg
T3JpZ2luIG9yaWdpbiwgVmFsdWUqIGZpcnN0Q2hpbGQpCisgICAgICAgIDogbV9vcGNvZGUob3Bj
b2RlKQogICAgICAgICAsIG1fdHlwZSh0eXBlRm9yKG9wY29kZSwgZmlyc3RDaGlsZCkpCiAgICAg
ICAgICwgbV9vcmlnaW4ob3JpZ2luKQogICAgICAgICAsIG1fY2hpbGRyZW57IGZpcnN0Q2hpbGQg
fQpAQCAtMjcxLDkgKzI2OCw4IEBAIHByb3RlY3RlZDoKICAgICB9CiAgICAgLy8gVGhpcyBmb3Jt
IGlzIGZvciB0aG9zZSBvcGNvZGVzIHRoYXQgY2FuIGluZmVyIHRoZWlyIHR5cGUgZnJvbSB0aGUg
b3Bjb2RlIGFuZCBmaXJzdCBhbmQgc2Vjb25kIGNoaWxkOgogICAgIHRlbXBsYXRlPHR5cGVuYW1l
Li4uIEFyZ3VtZW50cz4KLSAgICBleHBsaWNpdCBWYWx1ZSh1bnNpZ25lZCBpbmRleCwgQ2hlY2tl
ZE9wY29kZVRhZywgT3Bjb2RlIG9wY29kZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIGZpcnN0Q2hp
bGQsIFZhbHVlKiBzZWNvbmRDaGlsZCwgQXJndW1lbnRzLi4uIGFyZ3VtZW50cykKLSAgICAgICAg
OiBtX2luZGV4KGluZGV4KQotICAgICAgICAsIG1fb3Bjb2RlKG9wY29kZSkKKyAgICBleHBsaWNp
dCBWYWx1ZShDaGVja2VkT3Bjb2RlVGFnLCBPcGNvZGUgb3Bjb2RlLCBPcmlnaW4gb3JpZ2luLCBW
YWx1ZSogZmlyc3RDaGlsZCwgVmFsdWUqIHNlY29uZENoaWxkLCBBcmd1bWVudHMuLi4gYXJndW1l
bnRzKQorICAgICAgICA6IG1fb3Bjb2RlKG9wY29kZSkKICAgICAgICAgLCBtX3R5cGUodHlwZUZv
cihvcGNvZGUsIGZpcnN0Q2hpbGQsIHNlY29uZENoaWxkKSkKICAgICAgICAgLCBtX29yaWdpbihv
cmlnaW4pCiAgICAgICAgICwgbV9jaGlsZHJlbnsgZmlyc3RDaGlsZCwgc2Vjb25kQ2hpbGQsIGFy
Z3VtZW50cy4uLiB9CkBAIC0yODEsMjUgKzI3NywyMiBAQCBwcm90ZWN0ZWQ6CiAgICAgfQogICAg
IC8vIFRoaXMgZm9ybSBpcyBmb3IgdGhvc2Ugb3Bjb2RlcyB0aGF0IGNhbiBpbmZlciB0aGVpciB0
eXBlIGZyb20gdGhlIG9wY29kZSBhbG9uZSwgYW5kIHRoYXQgZG9uJ3QKICAgICAvLyB0YWtlIGFu
eSBhcmd1bWVudHM6Ci0gICAgZXhwbGljaXQgVmFsdWUodW5zaWduZWQgaW5kZXgsIENoZWNrZWRP
cGNvZGVUYWcsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4pCi0gICAgICAgIDogbV9pbmRl
eChpbmRleCkKLSAgICAgICAgLCBtX29wY29kZShvcGNvZGUpCisgICAgZXhwbGljaXQgVmFsdWUo
Q2hlY2tlZE9wY29kZVRhZywgT3Bjb2RlIG9wY29kZSwgT3JpZ2luIG9yaWdpbikKKyAgICAgICAg
OiBtX29wY29kZShvcGNvZGUpCiAgICAgICAgICwgbV90eXBlKHR5cGVGb3Iob3Bjb2RlLCBudWxs
cHRyKSkKICAgICAgICAgLCBtX29yaWdpbihvcmlnaW4pCiAgICAgewogICAgIH0KICAgICAvLyBV
c2UgdGhpcyBmb3JtIGZvciB2YXJhcmdzLgotICAgIGV4cGxpY2l0IFZhbHVlKHVuc2lnbmVkIGlu
ZGV4LCBDaGVja2VkT3Bjb2RlVGFnLCBPcGNvZGUgb3Bjb2RlLCBUeXBlIHR5cGUsIE9yaWdpbiBv
cmlnaW4sIGNvbnN0IEFkamFjZW5jeUxpc3QmIGNoaWxkcmVuKQotICAgICAgICA6IG1faW5kZXgo
aW5kZXgpCi0gICAgICAgICwgbV9vcGNvZGUob3Bjb2RlKQorICAgIGV4cGxpY2l0IFZhbHVlKENo
ZWNrZWRPcGNvZGVUYWcsIE9wY29kZSBvcGNvZGUsIFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdpbiwg
Y29uc3QgQWRqYWNlbmN5TGlzdCYgY2hpbGRyZW4pCisgICAgICAgIDogbV9vcGNvZGUob3Bjb2Rl
KQogICAgICAgICAsIG1fdHlwZSh0eXBlKQogICAgICAgICAsIG1fb3JpZ2luKG9yaWdpbikKICAg
ICAgICAgLCBtX2NoaWxkcmVuKGNoaWxkcmVuKQogICAgIHsKICAgICB9Ci0gICAgZXhwbGljaXQg
VmFsdWUodW5zaWduZWQgaW5kZXgsIENoZWNrZWRPcGNvZGVUYWcsIE9wY29kZSBvcGNvZGUsIFR5
cGUgdHlwZSwgT3JpZ2luIG9yaWdpbiwgQWRqYWNlbmN5TGlzdCYmIGNoaWxkcmVuKQotICAgICAg
ICA6IG1faW5kZXgoaW5kZXgpCi0gICAgICAgICwgbV9vcGNvZGUob3Bjb2RlKQorICAgIGV4cGxp
Y2l0IFZhbHVlKENoZWNrZWRPcGNvZGVUYWcsIE9wY29kZSBvcGNvZGUsIFR5cGUgdHlwZSwgT3Jp
Z2luIG9yaWdpbiwgQWRqYWNlbmN5TGlzdCYmIGNoaWxkcmVuKQorICAgICAgICA6IG1fb3Bjb2Rl
KG9wY29kZSkKICAgICAgICAgLCBtX3R5cGUodHlwZSkKICAgICAgICAgLCBtX29yaWdpbihvcmln
aW4pCiAgICAgICAgICwgbV9jaGlsZHJlbihXVEZNb3ZlKGNoaWxkcmVuKSkKQEAgLTMwOSw4ICsz
MDIsOCBAQCBwcm90ZWN0ZWQ6CiAgICAgLy8gVGhpcyBpcyB0aGUgY29uc3RydWN0b3IgeW91IGVu
ZCB1cCBhY3R1YWxseSBjYWxsaW5nLCBpZiB5b3UncmUgaW5zdGFudGlhdGluZyBWYWx1ZQogICAg
IC8vIGRpcmVjdGx5LgogICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KLSAgICBl
eHBsaWNpdCBWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgQXJndW1lbnRzJiYu
Li4gYXJndW1lbnRzKQotICAgICAgICA6IFZhbHVlKGluZGV4LCBDaGVja2VkT3Bjb2RlLCBvcGNv
ZGUsIHN0ZDo6Zm9yd2FyZDxBcmd1bWVudHM+KGFyZ3VtZW50cykuLi4pCisgICAgZXhwbGljaXQg
VmFsdWUoT3Bjb2RlIG9wY29kZSwgQXJndW1lbnRzJiYuLi4gYXJndW1lbnRzKQorICAgICAgICA6
IFZhbHVlKENoZWNrZWRPcGNvZGUsIG9wY29kZSwgc3RkOjpmb3J3YXJkPEFyZ3VtZW50cz4oYXJn
dW1lbnRzKS4uLikKICAgICB7CiAgICAgICAgIGNoZWNrT3Bjb2RlKG9wY29kZSk7CiAgICAgfQpA
QCAtMzIxLDcgKzMxNCw3IEBAIHByaXZhdGU6CiAgICAgc3RhdGljIFR5cGUgdHlwZUZvcihPcGNv
ZGUsIFZhbHVlKiBmaXJzdENoaWxkLCBWYWx1ZSogc2Vjb25kQ2hpbGQgPSBudWxscHRyKTsKIAog
ICAgIC8vIFRoaXMgZ3JvdXAgb2YgZmllbGRzIGlzIGFycmFuZ2VkIHRvIGZpdCBpbiA2NCBiaXRz
LgotICAgIHVuc2lnbmVkIG1faW5kZXg7CisgICAgdW5zaWduZWQgbV9pbmRleCB7IFVJTlRfTUFY
IH07CiAgICAgT3Bjb2RlIG1fb3Bjb2RlOwogICAgIFR5cGUgbV90eXBlOwogICAgIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFyaWFibGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhcmlhYmxlLmNwcAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhcmlhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDU2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM1ZhcmlhYmxlLmgiCisKKyNpZiBF
TkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworVmFyaWFi
bGU6On5WYXJpYWJsZSgpCit7Cit9CisKK3ZvaWQgVmFyaWFibGU6OmR1bXAoUHJpbnRTdHJlYW0m
IG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoInZhciIsIG1faW5kZXgpOworfQorCit2b2lk
IFZhcmlhYmxlOjpkZWVwRHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5w
cmludChtX3R5cGUsICIgdmFyIiwgbV9pbmRleCk7Cit9CisKK1ZhcmlhYmxlOjpWYXJpYWJsZShU
eXBlIHR5cGUpCisgICAgOiBtX3R5cGUodHlwZSkKK3sKKyAgICBBU1NFUlQodHlwZSAhPSBWb2lk
KTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNf
SklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYXJpYWJsZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhcmlhYmxlLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYXJpYWJsZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsOTEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBCM1ZhcmlhYmxlX2gKKyNkZWZpbmUgQjNWYXJpYWJsZV9oCisK
KyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNUeXBlLmgiCisjaW5jbHVkZSA8d3Rm
L0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3
dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2Ns
YXNzIFByb2NlZHVyZTsKKworY2xhc3MgVmFyaWFibGUgeworICAgIFdURl9NQUtFX05PTkNPUFlB
QkxFKFZhcmlhYmxlKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKworcHVibGljOgor
ICAgIH5WYXJpYWJsZSgpOworCisgICAgVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBl
OyB9CisgICAgdW5zaWduZWQgaW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4OyB9CisKKyAg
ICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICB2b2lkIGRlZXBEdW1wKFByaW50
U3RyZWFtJikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsK
KworICAgIFZhcmlhYmxlKFR5cGUpOworICAgIAorICAgIHVuc2lnbmVkIG1faW5kZXg7CisgICAg
VHlwZSBtX3R5cGU7Cit9OworCitjbGFzcyBEZWVwVmFyaWFibGVEdW1wIHsKK3B1YmxpYzoKKyAg
ICBEZWVwVmFyaWFibGVEdW1wKGNvbnN0IFZhcmlhYmxlKiB2YXJpYWJsZSkKKyAgICAgICAgOiBt
X3ZhcmlhYmxlKHZhcmlhYmxlKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRT
dHJlYW0mIG91dCkgY29uc3QKKyAgICB7CisgICAgICAgIGlmIChtX3ZhcmlhYmxlKQorICAgICAg
ICAgICAgbV92YXJpYWJsZS0+ZGVlcER1bXAob3V0KTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgb3V0LnByaW50KCI8bnVsbD4iKTsKKyAgICB9CisKK3ByaXZhdGU6CisgICAgY29uc3QgVmFy
aWFibGUqIG1fdmFyaWFibGU7Cit9OworCitpbmxpbmUgRGVlcFZhcmlhYmxlRHVtcCBkZWVwRHVt
cChjb25zdCBWYXJpYWJsZSogdmFyaWFibGUpCit7CisgICAgcmV0dXJuIERlZXBWYXJpYmxlRHVt
cCh2YXJpYWJsZSk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8g
RU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzVmFyaWFibGVfaAorCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNWYXJpYWJsZVZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYXJpYWJsZVZhbHVlLmNwcAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhcmlhYmxlVmFsdWUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzVmFyaWFibGVWYWx1
ZS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzVmFyaWFibGUuaCIKKwor
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK1ZhcmlhYmxlVmFsdWU6On5WYXJpYWJs
ZVZhbHVlKCkKK3sKK30KKwordm9pZCBWYXJpYWJsZVZhbHVlOjpkdW1wTWV0YShDb21tYVByaW50
ZXImIGNvbW1hLCBQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludChjb21t
YSwgcG9pbnRlckR1bXAobV92YXJpYWJsZSkpOworfQorCitWYWx1ZSogVmFyaWFibGVWYWx1ZTo6
Y2xvbmVJbXBsKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbmV3IFZhcmlhYmxlVmFsdWUoKnRoaXMp
OworfQorCitWYXJpYWJsZVZhbHVlOjpWYXJpYWJsZVZhbHVlKE9wY29kZSBvcGNvZGUsIE9yaWdp
biBvcmlnaW4sIFZhcmlhYmxlKiB2YXJpYWJsZSwgVmFsdWUqIHZhbHVlKQorICAgIDogVmFsdWUo
Q2hlY2tlZE9wY29kZSwgb3Bjb2RlLCBWb2lkLCBvcmlnaW4sIHZhbHVlKQorICAgICwgbV92YXJp
YWJsZSh2YXJpYWJsZSkKK3sKKyAgICBBU1NFUlQob3Bjb2RlID09IFNldCk7Cit9CisKK1Zhcmlh
YmxlVmFsdWU6OlZhcmlhYmxlVmFsdWUoT3Bjb2RlIG9wY29kZSwgT3JpZ2luIG9yaWdpbiwgVmFy
aWFibGUqIHZhcmlhYmxlKQorICAgIDogVmFsdWUoQ2hlY2tlZE9wY29kZSwgb3Bjb2RlLCB2YXJp
YWJsZS0+dHlwZSgpLCBvcmlnaW4pCisgICAgLCBtX3ZhcmlhYmxlKHZhcmlhYmxlKQoreworICAg
IEFTU0VSVChvcGNvZGUgPT0gR2V0KTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisK
KyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNWYXJpYWJsZVZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzVmFyaWFibGVWYWx1ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzVmFyaWFibGVWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjcgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIEIzVmFyaWFibGVWYWx1ZV9oCisjZGVmaW5lIEIzVmFyaWFibGVWYWx1ZV9oCisKKyNpZiBF
TkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorCituYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEIzIHsKKworY2xhc3MgVmFyaWFibGU7CisKK2NsYXNzIEpTX0VYUE9SVF9QUklW
QVRFIFZhcmlhYmxlVmFsdWUgOiBwdWJsaWMgVmFsdWUgeworcHVibGljOgorICAgIHN0YXRpYyBi
b29sIGFjY2VwdHMoT3Bjb2RlIG9wY29kZSkgeyByZXR1cm4gb3Bjb2RlID09IEdldCB8fCBvcGNv
ZGUgPT0gU2V0OyB9CisKKyAgICB+VmFyaWFibGVWYWx1ZSgpOworCisgICAgVmFyaWFibGUqIHZh
cmlhYmxlKCkgY29uc3QgeyByZXR1cm4gbV92YXJpYWJsZTsgfQorCitwcm90ZWN0ZWQ6CisgICAg
dm9pZCBkdW1wTWV0YShDb21tYVByaW50ZXImLCBQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRl
OworCisgICAgVmFsdWUqIGNsb25lSW1wbCgpIGNvbnN0IG92ZXJyaWRlOworCitwcml2YXRlOgor
ICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7CisKKyAgICAvLyBVc2UgdGhpcyBmb3IgU2V0Lgor
ICAgIFZhcmlhYmxlVmFsdWUoT3Bjb2RlLCBPcmlnaW4sIFZhcmlhYmxlKiwgVmFsdWUqKTsKKwor
ICAgIC8vIFVzZSB0aGlzIGZvciBHZXQuCisgICAgVmFyaWFibGVWYWx1ZShPcGNvZGUsIE9yaWdp
biwgVmFyaWFibGUqIHZhcmlhYmxlKTsKKworICAgIFZhcmlhYmxlKiBtX3ZhcmlhYmxlOworfTsK
KworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQor
CisjZW5kaWYgLy8gQjNWYXJpYWJsZVZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVN0YWNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlU3RhY2suY3BwCShyZXZpc2lvbiAxOTU5NzAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlU3RhY2suY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC05NSwzMCArOTUsMTMgQEAgdm9pZCBhbGxvY2F0ZVN0YWNrKENvZGUm
IGNvZGUpCiB7CiAgICAgUGhhc2VTY29wZSBwaGFzZVNjb3BlKGNvZGUsICJhbGxvY2F0ZVN0YWNr
Iik7CiAKLSAgICAvLyBQZXJmb3JtIGFuIGVzY2FwZSBhbmFseXNpcyBvdmVyIHN0YWNrIHNsb3Rz
LiBBbiBlc2NhcGluZyBzdGFjayBzbG90IGlzIG9uZSB0aGF0IGlzIGxvY2tlZCBvcgotICAgIC8v
IGlzIGV4cGxpY2l0bHkgZXNjYXBlZCBpbiB0aGUgY29kZS4KLSAgICBJbmRleFNldDxTdGFja1Ns
b3Q+IGVzY2FwaW5nU3RhY2tTbG90czsKLSAgICBmb3IgKFN0YWNrU2xvdCogc2xvdCA6IGNvZGUu
c3RhY2tTbG90cygpKSB7Ci0gICAgICAgIGlmIChzbG90LT5pc0xvY2tlZCgpKQotICAgICAgICAg
ICAgZXNjYXBpbmdTdGFja1Nsb3RzLmFkZChzbG90KTsKLSAgICB9Ci0gICAgZm9yIChCYXNpY0Js
b2NrKiBibG9jayA6IGNvZGUpIHsKLSAgICAgICAgZm9yIChJbnN0JiBpbnN0IDogKmJsb2NrKSB7
Ci0gICAgICAgICAgICBpbnN0LmZvckVhY2hBcmcoCi0gICAgICAgICAgICAgICAgWyZdIChBcmcm
IGFyZywgQXJnOjpSb2xlIHJvbGUsIEFyZzo6VHlwZSwgQXJnOjpXaWR0aCkgewotICAgICAgICAg
ICAgICAgICAgICBpZiAocm9sZSA9PSBBcmc6OlVzZUFkZHIgJiYgYXJnLmlzU3RhY2soKSkKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGVzY2FwaW5nU3RhY2tTbG90cy5hZGQoYXJnLnN0YWNrU2xv
dCgpKTsKLSAgICAgICAgICAgICAgICB9KTsKLSAgICAgICAgfQotICAgIH0KLQogICAgIC8vIEFs
bG9jYXRlIGFsbCBvZiB0aGUgZXNjYXBlZCBzbG90cyBpbiBvcmRlci4gVGhpcyBpcyBraW5kIG9m
IGEgY3JhenkgYWxnb3JpdGhtIHRvIGFsbG93IGZvcgogICAgIC8vIHRoZSBwb3NzaWJpbGl0eSBv
ZiBzdGFjayBzbG90cyBiZWluZyBhc3NpZ25lZCBmcmFtZSBvZmZzZXRzIGJlZm9yZSB3ZSBldmVu
IGdldCBoZXJlLgogICAgIEFTU0VSVCghY29kZS5mcmFtZVNpemUoKSk7CiAgICAgVmVjdG9yPFN0
YWNrU2xvdCo+IGFzc2lnbmVkRXNjYXBlZFN0YWNrU2xvdHM7CiAgICAgVmVjdG9yPFN0YWNrU2xv
dCo+IGVzY2FwZWRTdGFja1Nsb3RzV29ya2xpc3Q7CiAgICAgZm9yIChTdGFja1Nsb3QqIHNsb3Qg
OiBjb2RlLnN0YWNrU2xvdHMoKSkgewotICAgICAgICBpZiAoZXNjYXBpbmdTdGFja1Nsb3RzLmNv
bnRhaW5zKHNsb3QpKSB7CisgICAgICAgIGlmIChzbG90LT5pc0xvY2tlZCgpKSB7CiAgICAgICAg
ICAgICBpZiAoc2xvdC0+b2Zmc2V0RnJvbUZQKCkpCiAgICAgICAgICAgICAgICAgYXNzaWduZWRF
c2NhcGVkU3RhY2tTbG90cy5hcHBlbmQoc2xvdCk7CiAgICAgICAgICAgICBlbHNlCkBAIC0xMzYs
NyArMTE5LDcgQEAgdm9pZCBhbGxvY2F0ZVN0YWNrKENvZGUmIGNvZGUpCiAgICAgICAgIGFzc2ln
bmVkRXNjYXBlZFN0YWNrU2xvdHMuYXBwZW5kKHNsb3QpOwogICAgIH0KIAotICAgIC8vIE5vdyB3
ZSBoYW5kbGUgdGhlIGFub255bW91cyBzbG90cy4KKyAgICAvLyBOb3cgd2UgaGFuZGxlIHRoZSBz
cGlsbCBzbG90cy4KICAgICBTdGFja1Nsb3RMaXZlbmVzcyBsaXZlbmVzcyhjb2RlKTsKICAgICBJ
bmRleE1hcDxTdGFja1Nsb3QsIEhhc2hTZXQ8U3RhY2tTbG90Kj4+IGludGVyZmVyZW5jZShjb2Rl
LnN0YWNrU2xvdHMoKS5zaXplKCkpOwogICAgIFZlY3RvcjxTdGFja1Nsb3QqPiBzbG90czsKQEAg
LTE1NCw3ICsxMzcsNyBAQCB2b2lkIGFsbG9jYXRlU3RhY2soQ29kZSYgY29kZSkKICAgICAgICAg
ICAgICAgICAgICAgaWYgKCFhcmcuaXNTdGFjaygpKQogICAgICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICAgICAgICAgICAgICBTdGFja1Nsb3QqIHNsb3QgPSBhcmcuc3RhY2tT
bG90KCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzbG90LT5raW5kKCkgIT0gU3RhY2tTbG90
S2luZDo6QW5vbnltb3VzKQorICAgICAgICAgICAgICAgICAgICBpZiAoc2xvdC0+a2luZCgpICE9
IFN0YWNrU2xvdEtpbmQ6OlNwaWxsKQogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwog
CiAgICAgICAgICAgICAgICAgICAgIGZvciAoU3RhY2tTbG90KiBvdGhlclNsb3QgOiBsb2NhbENh
bGMubGl2ZSgpKSB7CkBAIC0xODcsNyArMTcwLDcgQEAgdm9pZCBhbGxvY2F0ZVN0YWNrKENvZGUm
IGNvZGUpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgU3RhY2tTbG90KiBzbG90ID0g
YXJnLnN0YWNrU2xvdCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNsb3QtPmtpbmQo
KSAhPSBTdGFja1Nsb3RLaW5kOjpBbm9ueW1vdXMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChzbG90LT5raW5kKCkgIT0gU3RhY2tTbG90S2luZDo6U3BpbGwpIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBvayA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTI4Nyw3ICsyNzAsNyBAQCB2
b2lkIGFsbG9jYXRlU3RhY2soQ29kZSYgY29kZSkKICAgICAgICAgICAgICAgICAgICAgY2FzZSBB
cmc6OlN0YWNrOiB7CiAgICAgICAgICAgICAgICAgICAgICAgICBTdGFja1Nsb3QqIHNsb3QgPSBh
cmcuc3RhY2tTbG90KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc1pEZWYo
cm9sZSkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBzbG90LT5raW5kKCkgPT0gU3Rh
Y2tTbG90S2luZDo6QW5vbnltb3VzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgc2xv
dC0+a2luZCgpID09IFN0YWNrU2xvdEtpbmQ6OlNwaWxsCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgJiYgc2xvdC0+Ynl0ZVNpemUoKSA+IEFyZzo6Ynl0ZXMod2lkdGgpKSB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgLy8gQ3VycmVudGx5IHdlIG9ubHkgaGFuZGxlIHRoaXMgc2lt
cGxlIGNhc2UgYmVjYXVzZSBpdCdzIHRoZSBvbmx5IG9uZQogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIHRoYXQgYXJpc2VzOiBaRGVmJ3MgYXJlIG9ubHkgMzItYml0IHJpZ2h0IG5vdy4g
U28sIHdoZW4gd2UgaGl0IHRoZXNlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpckNvZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyQ29kZS5jcHAJKHJldmlzaW9uIDE5NTk3MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyQ29kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0LDIzICs1NCwxNyBAQCBCYXNp
Y0Jsb2NrKiBDb2RlOjphZGRCbG9jayhkb3VibGUgZnJlcXVlCiAKIFN0YWNrU2xvdCogQ29kZTo6
YWRkU3RhY2tTbG90KHVuc2lnbmVkIGJ5dGVTaXplLCBTdGFja1Nsb3RLaW5kIGtpbmQsIEIzOjpT
dGFja1Nsb3QqIGIzU2xvdCkKIHsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8U3RhY2tTbG90PiBzbG90
KG5ldyBTdGFja1Nsb3QoYnl0ZVNpemUsIG1fc3RhY2tTbG90cy5zaXplKCksIGtpbmQsIGIzU2xv
dCkpOwotICAgIFN0YWNrU2xvdCogcmVzdWx0ID0gc2xvdC5nZXQoKTsKLSAgICBtX3N0YWNrU2xv
dHMuYXBwZW5kKFdURk1vdmUoc2xvdCkpOwotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJu
IG1fc3RhY2tTbG90cy5hZGQobmV3IFN0YWNrU2xvdChieXRlU2l6ZSwga2luZCwgYjNTbG90KSk7
CiB9CiAKIFN0YWNrU2xvdCogQ29kZTo6YWRkU3RhY2tTbG90KEIzOjpTdGFja1Nsb3QqIGIzU2xv
dCkKIHsKLSAgICByZXR1cm4gYWRkU3RhY2tTbG90KGIzU2xvdC0+Ynl0ZVNpemUoKSwgYjNTbG90
LT5raW5kKCksIGIzU2xvdCk7CisgICAgcmV0dXJuIGFkZFN0YWNrU2xvdChiM1Nsb3QtPmJ5dGVT
aXplKCksIFN0YWNrU2xvdEtpbmQ6OkxvY2tlZCwgYjNTbG90KTsKIH0KIAogU3BlY2lhbCogQ29k
ZTo6YWRkU3BlY2lhbChzdGQ6OnVuaXF1ZV9wdHI8U3BlY2lhbD4gc3BlY2lhbCkKIHsKLSAgICBT
cGVjaWFsKiByZXN1bHQgPSBzcGVjaWFsLmdldCgpOwotICAgIHJlc3VsdC0+bV9jb2RlID0gdGhp
czsKLSAgICBtX3NwZWNpYWxzLmFwcGVuZChXVEZNb3ZlKHNwZWNpYWwpKTsKLSAgICByZXR1cm4g
cmVzdWx0OworICAgIHJldHVybiBtX3NwZWNpYWxzLmFkZChzcGVjaWFsKTsKIH0KIAogQ0NhbGxT
cGVjaWFsKiBDb2RlOjpjQ2FsbFNwZWNpYWwoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJDb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJDb2RlLmgJKHJldmlzaW9uIDE5NTk3MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyQ29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaW5j
bHVkZSAiQWlyU3BlY2lhbC5oIgogI2luY2x1ZGUgIkFpclN0YWNrU2xvdC5oIgogI2luY2x1ZGUg
IkFpclRtcC5oIgorI2luY2x1ZGUgIkIzU3BhcnNlQ29sbGVjdGlvbi5oIgogI2luY2x1ZGUgIlJl
Z2lzdGVyQXRPZmZzZXRMaXN0LmgiCiAjaW5jbHVkZSAiU3RhY2tBbGlnbm1lbnQuaCIKIApAQCAt
MTg0LDEyNSArMTg1LDExIEBAIHB1YmxpYzoKICAgICBpdGVyYXRvciBiZWdpbigpIGNvbnN0IHsg
cmV0dXJuIGl0ZXJhdG9yKCp0aGlzLCAwKTsgfQogICAgIGl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsg
cmV0dXJuIGl0ZXJhdG9yKCp0aGlzLCBzaXplKCkpOyB9CiAKLSAgICBjbGFzcyBTdGFja1Nsb3Rz
Q29sbGVjdGlvbiB7Ci0gICAgcHVibGljOgotICAgICAgICBTdGFja1Nsb3RzQ29sbGVjdGlvbihj
b25zdCBDb2RlJiBjb2RlKQotICAgICAgICAgICAgOiBtX2NvZGUoY29kZSkKLSAgICAgICAgewot
ICAgICAgICB9Ci0KLSAgICAgICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fY29k
ZS5tX3N0YWNrU2xvdHMuc2l6ZSgpOyB9Ci0gICAgICAgIFN0YWNrU2xvdCogYXQodW5zaWduZWQg
aW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fY29kZS5tX3N0YWNrU2xvdHNbaW5kZXhdLmdldCgpOyB9
Ci0gICAgICAgIFN0YWNrU2xvdCogb3BlcmF0b3JbXSh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyBy
ZXR1cm4gYXQoaW5kZXgpOyB9Ci0KLSAgICAgICAgY2xhc3MgaXRlcmF0b3IgewotICAgICAgICBw
dWJsaWM6Ci0gICAgICAgICAgICBpdGVyYXRvcigpCi0gICAgICAgICAgICAgICAgOiBtX2NvbGxl
Y3Rpb24obnVsbHB0cikKLSAgICAgICAgICAgICAgICAsIG1faW5kZXgoMCkKLSAgICAgICAgICAg
IHsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaXRlcmF0b3IoY29uc3QgU3RhY2tTbG90
c0NvbGxlY3Rpb24mIGNvbGxlY3Rpb24sIHVuc2lnbmVkIGluZGV4KQotICAgICAgICAgICAgICAg
IDogbV9jb2xsZWN0aW9uKCZjb2xsZWN0aW9uKQotICAgICAgICAgICAgICAgICwgbV9pbmRleChp
bmRleCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgU3RhY2tT
bG90KiBvcGVyYXRvciooKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBt
X2NvbGxlY3Rpb24tPmF0KG1faW5kZXgpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBp
dGVyYXRvciYgb3BlcmF0b3IrKygpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbV9p
bmRleCsrOwotICAgICAgICAgICAgICAgIHJldHVybiAqdGhpczsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbV9pbmRleCA9PSBvdGhlci5t
X2luZGV4OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBib29sIG9wZXJhdG9yIT0oY29u
c3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICBwcml2
YXRlOgotICAgICAgICAgICAgY29uc3QgU3RhY2tTbG90c0NvbGxlY3Rpb24qIG1fY29sbGVjdGlv
bjsKLSAgICAgICAgICAgIHVuc2lnbmVkIG1faW5kZXg7Ci0gICAgICAgIH07Ci0KLSAgICAgICAg
aXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcigqdGhpcywgMCk7IH0KLSAg
ICAgICAgaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoKnRoaXMsIHNpemUo
KSk7IH0KLQotICAgIHByaXZhdGU6Ci0gICAgICAgIGNvbnN0IENvZGUmIG1fY29kZTsKLSAgICB9
OwotCi0gICAgU3RhY2tTbG90c0NvbGxlY3Rpb24gc3RhY2tTbG90cygpIGNvbnN0IHsgcmV0dXJu
IFN0YWNrU2xvdHNDb2xsZWN0aW9uKCp0aGlzKTsgfQotICAgIAotICAgIGNsYXNzIFNwZWNpYWxz
Q29sbGVjdGlvbiB7Ci0gICAgcHVibGljOgotICAgICAgICBTcGVjaWFsc0NvbGxlY3Rpb24oY29u
c3QgQ29kZSYgY29kZSkKLSAgICAgICAgICAgIDogbV9jb2RlKGNvZGUpCi0gICAgICAgIHsKLSAg
ICAgICAgfQotCi0gICAgICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBtX2NvZGUu
bV9zcGVjaWFscy5zaXplKCk7IH0KLSAgICAgICAgU3BlY2lhbCogYXQodW5zaWduZWQgaW5kZXgp
IGNvbnN0IHsgcmV0dXJuIG1fY29kZS5tX3NwZWNpYWxzW2luZGV4XS5nZXQoKTsgfQotICAgICAg
ICBTcGVjaWFsKiBvcGVyYXRvcltdKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBhdChp
bmRleCk7IH0KLQotICAgICAgICBjbGFzcyBpdGVyYXRvciB7Ci0gICAgICAgIHB1YmxpYzoKLSAg
ICAgICAgICAgIGl0ZXJhdG9yKCkKLSAgICAgICAgICAgICAgICA6IG1fY29sbGVjdGlvbihudWxs
cHRyKQotICAgICAgICAgICAgICAgICwgbV9pbmRleCgwKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICBpdGVyYXRvcihjb25zdCBTcGVjaWFsc0NvbGxlY3Rpb24m
IGNvbGxlY3Rpb24sIHVuc2lnbmVkIGluZGV4KQotICAgICAgICAgICAgICAgIDogbV9jb2xsZWN0
aW9uKCZjb2xsZWN0aW9uKQotICAgICAgICAgICAgICAgICwgbV9pbmRleChpbmRleCkKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgU3BlY2lhbCogb3BlcmF0b3Iq
KCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbV9jb2xsZWN0aW9uLT5h
dChtX2luZGV4KTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaXRlcmF0b3ImIG9wZXJh
dG9yKysoKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG1faW5kZXgrKzsKLSAgICAg
ICAgICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGJv
b2wgb3BlcmF0b3I9PShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0Ci0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG1faW5kZXggPT0gb3RoZXIubV9pbmRleDsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBv
dGhlcikgY29uc3QKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gISgqdGhp
cyA9PSBvdGhlcik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZToKLSAgICAgICAg
ICAgIGNvbnN0IFNwZWNpYWxzQ29sbGVjdGlvbiogbV9jb2xsZWN0aW9uOwotICAgICAgICAgICAg
dW5zaWduZWQgbV9pbmRleDsKLSAgICAgICAgfTsKLQotICAgICAgICBpdGVyYXRvciBiZWdpbigp
IGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKCp0aGlzLCAwKTsgfQotICAgICAgICBpdGVyYXRvciBl
bmQoKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcigqdGhpcywgc2l6ZSgpKTsgfQotCi0gICAgcHJp
dmF0ZToKLSAgICAgICAgY29uc3QgQ29kZSYgbV9jb2RlOwotICAgIH07CisgICAgY29uc3QgU3Bh
cnNlQ29sbGVjdGlvbjxTdGFja1Nsb3Q+JiBzdGFja1Nsb3RzKCkgY29uc3QgeyByZXR1cm4gbV9z
dGFja1Nsb3RzOyB9CisgICAgU3BhcnNlQ29sbGVjdGlvbjxTdGFja1Nsb3Q+JiBzdGFja1Nsb3Rz
KCkgeyByZXR1cm4gbV9zdGFja1Nsb3RzOyB9CiAKLSAgICBTcGVjaWFsc0NvbGxlY3Rpb24gc3Bl
Y2lhbHMoKSBjb25zdCB7IHJldHVybiBTcGVjaWFsc0NvbGxlY3Rpb24oKnRoaXMpOyB9CisgICAg
Y29uc3QgU3BhcnNlQ29sbGVjdGlvbjxTcGVjaWFsPiYgc3BlY2lhbHMoKSBjb25zdCB7IHJldHVy
biBtX3NwZWNpYWxzOyB9CisgICAgU3BhcnNlQ29sbGVjdGlvbjxTcGVjaWFsPiYgc3BlY2lhbHMo
KSB7IHJldHVybiBtX3NwZWNpYWxzOyB9CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDYWxsYmFj
az4KICAgICB2b2lkIGZvckFsbFRtcHMoY29uc3QgQ2FsbGJhY2smIGNhbGxiYWNrKSBjb25zdApA
QCAtMzMxLDkgKzIxOCw5IEBAIHByaXZhdGU6CiAgICAgQ29kZShQcm9jZWR1cmUmKTsKIAogICAg
IFByb2NlZHVyZSYgbV9wcm9jOyAvLyBTb21lIG1ldGEtZGF0YSwgbGlrZSBieXByb2R1Y3RzLCBp
cyBzdG9yZWQgaW4gdGhlIFByb2NlZHVyZS4KLSAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPFN0
YWNrU2xvdD4+IG1fc3RhY2tTbG90czsKKyAgICBTcGFyc2VDb2xsZWN0aW9uPFN0YWNrU2xvdD4g
bV9zdGFja1Nsb3RzOwogICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8QmFzaWNCbG9jaz4+IG1f
YmxvY2tzOwotICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8U3BlY2lhbD4+IG1fc3BlY2lhbHM7
CisgICAgU3BhcnNlQ29sbGVjdGlvbjxTcGVjaWFsPiBtX3NwZWNpYWxzOwogICAgIEhhc2hTZXQ8
VG1wPiBtX2Zhc3RUbXBzOwogICAgIENDYWxsU3BlY2lhbCogbV9jQ2FsbFNwZWNpYWwgeyBudWxs
cHRyIH07CiAgICAgdW5zaWduZWQgbV9udW1HUFRtcHMgeyAwIH07CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0Fpckl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckl0ZXJhdGVkUmVnaXN0
ZXJDb2FsZXNjaW5nLmNwcAkocmV2aXNpb24gMTk1OTcwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJJdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEyMTYsNyArMTIxNiw3IEBAIHByaXZhdGU6CiAKICAgICAgICAgICAgIC8vIEFsbG9j
YXRlIHN0YWNrIHNsb3QgZm9yIGVhY2ggc3BpbGxlZCB2YWx1ZS4KICAgICAgICAgICAgIFN0YWNr
U2xvdCogc3RhY2tTbG90ID0gbV9jb2RlLmFkZFN0YWNrU2xvdCgKLSAgICAgICAgICAgICAgICBt
X3RtcFdpZHRoLndpZHRoKHRtcCkgPD0gQXJnOjpXaWR0aDMyID8gNCA6IDgsIFN0YWNrU2xvdEtp
bmQ6OkFub255bW91cyk7CisgICAgICAgICAgICAgICAgbV90bXBXaWR0aC53aWR0aCh0bXApIDw9
IEFyZzo6V2lkdGgzMiA/IDQgOiA4LCBTdGFja1Nsb3RLaW5kOjpTcGlsbCk7CiAgICAgICAgICAg
ICBib29sIGlzTmV3VG1wID0gc3RhY2tTbG90cy5hZGQodG1wLCBzdGFja1Nsb3QpLmlzTmV3RW50
cnk7CiAgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKGlzTmV3VG1wLCBpc05ld1RtcCk7CiAgICAg
ICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3BlY2lhbC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3BlY2lhbC5oCShy
ZXZpc2lvbiAxOTU5NzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNwZWNp
YWwuaAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2lmIEVOQUJMRShCM19KSVQp
CiAKICNpbmNsdWRlICJBaXJJbnN0LmgiCisjaW5jbHVkZSAiQjNTcGFyc2VDb2xsZWN0aW9uLmgi
CiAjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUu
aD4KICNpbmNsdWRlIDx3dGYvU2NvcGVkTGFtYmRhLmg+CkBAIC05OCw2ICs5OSw3IEBAIHByb3Rl
Y3RlZDoKIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgQ29kZTsKKyAgICBmcmllbmQgY2xh
c3MgU3BhcnNlQ29sbGVjdGlvbjxTcGVjaWFsPjsKIAogICAgIGNvbnN0IGNoYXIqIG1fbmFtZTsK
ICAgICB1bnNpZ25lZCBtX2luZGV4OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJTcGlsbEV2ZXJ5dGhpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyU3BpbGxFdmVyeXRoaW5nLmNwcAkocmV2aXNpb24gMTk1OTcwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTcGlsbEV2ZXJ5dGhpbmcuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC04OCw3ICs4OCw3IEBAIHZvaWQgc3BpbGxFdmVyeXRoaW5nKENvZGUmIGNv
ZGUpCiAgICAgICAgIEFyZzo6VHlwZSB0eXBlID0gc3RhdGljX2Nhc3Q8QXJnOjpUeXBlPih0eXBl
SW5kZXgpOwogICAgICAgICBzdGFja1Nsb3RzLnJlc2l6ZShjb2RlLm51bVRtcHModHlwZSkpOwog
ICAgICAgICBmb3IgKHVuc2lnbmVkIHRtcEluZGV4ID0gY29kZS5udW1UbXBzKHR5cGUpOyB0bXBJ
bmRleC0tOykKLSAgICAgICAgICAgIHN0YWNrU2xvdHNbdG1wSW5kZXhdID0gY29kZS5hZGRTdGFj
a1Nsb3QoOCwgU3RhY2tTbG90S2luZDo6QW5vbnltb3VzKTsKKyAgICAgICAgICAgIHN0YWNrU2xv
dHNbdG1wSW5kZXhdID0gY29kZS5hZGRTdGFja1Nsb3QoOCwgU3RhY2tTbG90S2luZDo6U3BpbGwp
OwogICAgIH0KIAogICAgIEluc2VydGlvblNldCBpbnNlcnRpb25TZXQoY29kZSk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclN0YWNrU2xvdC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTdGFja1Nsb3QuY3BwCShyZXZpc2lv
biAxOTU5NzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclN0YWNrU2xvdC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDExIEBAIHZvaWQgU3RhY2tTbG90OjpzZXRP
ZmZzZXRGcm9tRlAoaW50cHRyX3QKIAogdm9pZCBTdGFja1Nsb3Q6OmR1bXAoUHJpbnRTdHJlYW0m
IG91dCkgY29uc3QKIHsKLSAgICBvdXQucHJpbnQoInN0YWNrIiwgbV9pbmRleCk7CisgICAgaWYg
KGlzU3BpbGwoKSkKKyAgICAgICAgb3V0LnByaW50KCJzcGlsbCIpOworICAgIGVsc2UKKyAgICAg
ICAgb3V0LnByaW50KCJzdGFjayIpOworICAgIG91dC5wcmludChtX2luZGV4KTsKIH0KIAogdm9p
ZCBTdGFja1Nsb3Q6OmRlZXBEdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CkBAIC01MSw5ICs1
NSw4IEBAIHZvaWQgU3RhY2tTbG90OjpkZWVwRHVtcChQcmludFN0cmVhbSYgb3UKICAgICAgICAg
b3V0LnByaW50KCIsIGIzU2xvdCA9ICIsICptX2IzU2xvdCwgIjogKCIsIEIzOjpkZWVwRHVtcCht
X2IzU2xvdCksICIpIik7CiB9CiAKLVN0YWNrU2xvdDo6U3RhY2tTbG90KHVuc2lnbmVkIGJ5dGVT
aXplLCB1bnNpZ25lZCBpbmRleCwgU3RhY2tTbG90S2luZCBraW5kLCBCMzo6U3RhY2tTbG90KiBi
M1Nsb3QpCitTdGFja1Nsb3Q6OlN0YWNrU2xvdCh1bnNpZ25lZCBieXRlU2l6ZSwgU3RhY2tTbG90
S2luZCBraW5kLCBCMzo6U3RhY2tTbG90KiBiM1Nsb3QpCiAgICAgOiBtX2J5dGVTaXplKGJ5dGVT
aXplKQotICAgICwgbV9pbmRleChpbmRleCkKICAgICAsIG1fb2Zmc2V0RnJvbUZQKGIzU2xvdCA/
IGIzU2xvdC0+b2Zmc2V0RnJvbUZQKCkgOiAwKQogICAgICwgbV9raW5kKGtpbmQpCiAgICAgLCBt
X2IzU2xvdChiM1Nsb3QpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclN0
YWNrU2xvdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
U3RhY2tTbG90LmgJKHJldmlzaW9uIDE5NTk3MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyU3RhY2tTbG90LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDggQEAKIAog
I2lmIEVOQUJMRShCM19KSVQpCiAKLSNpbmNsdWRlICJCM1N0YWNrU2xvdEtpbmQuaCIKKyNpbmNs
dWRlICJBaXJTdGFja1Nsb3RLaW5kLmgiCisjaW5jbHVkZSAiQjNTcGFyc2VDb2xsZWN0aW9uLmgi
CiAjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUu
aD4KICNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KQEAgLTQ2LDYgKzQ3LDcgQEAgcHVibGlj
OgogICAgIHVuc2lnbmVkIGJ5dGVTaXplKCkgY29uc3QgeyByZXR1cm4gbV9ieXRlU2l6ZTsgfQog
ICAgIFN0YWNrU2xvdEtpbmQga2luZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZDsgfQogICAgIGJv
b2wgaXNMb2NrZWQoKSBjb25zdCB7IHJldHVybiBtX2tpbmQgPT0gU3RhY2tTbG90S2luZDo6TG9j
a2VkOyB9CisgICAgYm9vbCBpc1NwaWxsKCkgY29uc3QgeyByZXR1cm4gbV9raW5kID09IFN0YWNr
U2xvdEtpbmQ6OlNwaWxsOyB9CiAgICAgdW5zaWduZWQgaW5kZXgoKSBjb25zdCB7IHJldHVybiBt
X2luZGV4OyB9CiAKICAgICB2b2lkIGVuc3VyZVNpemUodW5zaWduZWQgcmVxdWVzdGVkU2l6ZSkK
QEAgLTc5LDE0ICs4MSwxNSBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNz
IENvZGU7CisgICAgZnJpZW5kIGNsYXNzIFNwYXJzZUNvbGxlY3Rpb248U3RhY2tTbG90PjsKIAot
ICAgIFN0YWNrU2xvdCh1bnNpZ25lZCBieXRlU2l6ZSwgdW5zaWduZWQgaW5kZXgsIFN0YWNrU2xv
dEtpbmQsIEIzOjpTdGFja1Nsb3QqKTsKKyAgICBTdGFja1Nsb3QodW5zaWduZWQgYnl0ZVNpemUs
IFN0YWNrU2xvdEtpbmQsIEIzOjpTdGFja1Nsb3QqKTsKICAgICAKLSAgICB1bnNpZ25lZCBtX2J5
dGVTaXplOwotICAgIHVuc2lnbmVkIG1faW5kZXg7Ci0gICAgaW50cHRyX3QgbV9vZmZzZXRGcm9t
RlA7Ci0gICAgU3RhY2tTbG90S2luZCBtX2tpbmQ7Ci0gICAgQjM6OlN0YWNrU2xvdCogbV9iM1Ns
b3Q7CisgICAgdW5zaWduZWQgbV9ieXRlU2l6ZSB7IDAgfTsKKyAgICB1bnNpZ25lZCBtX2luZGV4
IHsgVUlOVF9NQVggfTsKKyAgICBpbnRwdHJfdCBtX29mZnNldEZyb21GUCB7IDAgfTsKKyAgICBT
dGFja1Nsb3RLaW5kIG1fa2luZCB7IFN0YWNrU2xvdEtpbmQ6OkxvY2tlZCB9OworICAgIEIzOjpT
dGFja1Nsb3QqIG1fYjNTbG90IHsgbnVsbHB0ciB9OwogfTsKIAogY2xhc3MgRGVlcFN0YWNrU2xv
dER1bXAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTdGFja1Nsb3RL
aW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclN0
YWNrU2xvdEtpbmQuY3BwCShyZXZpc2lvbiAxOTU5MDEpCShmcm9tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1N0YWNrU2xvdEtpbmQuY3BwOjE5NTkwMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyU3RhY2tTbG90S2luZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSw1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNTdGFja1Nsb3RLaW5kLmgiCisKKyNpZiBF
TkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFj
ZSBXVEYgeworCit1c2luZyBuYW1lc3BhY2UgSlNDOjpCMzsKKwordm9pZCBwcmludEludGVybmFs
KFByaW50U3RyZWFtJiBvdXQsIFN0YWNrU2xvdEtpbmQga2luZCkKK3sKKyAgICBzd2l0Y2ggKGtp
bmQpIHsKKyAgICBjYXNlIFN0YWNrU2xvdEtpbmQ6OkxvY2tlZDoKKyAgICAgICAgb3V0LnByaW50
KCJMb2NrZWQiKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgU3RhY2tTbG90S2luZDo6QW5v
bnltb3VzOgorICAgICAgICBvdXQucHJpbnQoIkFub255bW91cyIpOworICAgICAgICByZXR1cm47
CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyU3RhY2tTbG90S2luZC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTdGFja1Nsb3RLaW5kLmNwcAkod29ya2luZyBj
b3B5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTdGFja1Nsb3RLaW5kLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjQsNyArMjQsNyBAQAogICovCiAKICNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJCM1N0YWNrU2xvdEtpbmQuaCIKKyNpbmNsdWRlICJBaXJTdGFja1Ns
b3RLaW5kLmgiCiAKICNpZiBFTkFCTEUoQjNfSklUKQogCkBAIC0zMiw3ICszMiw3IEBACiAKIG5h
bWVzcGFjZSBXVEYgewogCi11c2luZyBuYW1lc3BhY2UgSlNDOjpCMzsKK3VzaW5nIG5hbWVzcGFj
ZSBKU0M6OkIzOjpBaXI7CiAKIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBT
dGFja1Nsb3RLaW5kIGtpbmQpCiB7CkBAIC00MCw4ICs0MCw4IEBAIHZvaWQgcHJpbnRJbnRlcm5h
bChQcmludFN0cmVhbSYgb3V0LCBTdGEKICAgICBjYXNlIFN0YWNrU2xvdEtpbmQ6OkxvY2tlZDoK
ICAgICAgICAgb3V0LnByaW50KCJMb2NrZWQiKTsKICAgICAgICAgcmV0dXJuOwotICAgIGNhc2Ug
U3RhY2tTbG90S2luZDo6QW5vbnltb3VzOgotICAgICAgICBvdXQucHJpbnQoIkFub255bW91cyIp
OworICAgIGNhc2UgU3RhY2tTbG90S2luZDo6U3BpbGw6CisgICAgICAgIG91dC5wcmludCgiU3Bp
bGwiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTdGFja1Nsb3RL
aW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTdGFj
a1Nsb3RLaW5kLmgJKHJldmlzaW9uIDE5NTkwMSkJKGZyb20gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzU3RhY2tTbG90S2luZC5oOjE5NTkwMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyU3RhY2tTbG90S2luZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjMgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIEIzU3RhY2tTbG90S2luZF9oCisjZGVmaW5lIEIzU3RhY2tTbG90S2luZF9oCisKKyNpZiBF
TkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworZW51bSBj
bGFzcyBTdGFja1Nsb3RLaW5kIDogdWludDhfdCB7CisgICAgLy8gQSBsb2NrZWQgc3RhY2sgc2xv
dCBuZWVkcyB0byBiZSBrZXB0IGRpc2pvaW50IGZyb20gYWxsIG90aGVycyBiZWNhdXNlIHdlIGlu
dGVuZCB0byBlc2NhcGUKKyAgICAvLyBpdCBldmVuIGlmIHRoYXQncyBub3Qgb2J2aW91cy4gVGhp
cyBoYXBwZW5zIHdoZW4gdGhlIHJ1bnRpbWUgdGFrZXMgdGhlIGFkZHJlc3Mgb2YgYSBzdGFjawor
ICAgIC8vIHNsb3QuCisgICAgTG9ja2VkLAorCisgICAgLy8gVGhlc2Ugc3RhY2sgc2xvdHMgYmVo
YXZlIGxpa2UgdmFyaWFibGVzLiBVbmRlZmluZWQgYmVoYXZpb3IgaGFwcGVucyBpZiB5b3Ugc3Rv
cmUgbGVzcyB0aGFuCisgICAgLy8gdGhlIHdpZHRoIG9mIHRoZSBzbG90LgorICAgIEFub255bW91
cworCisgICAgLy8gRklYTUU6IFdlIHNob3VsZCBhZGQgYSB0aGlyZCBtb2RlLCB3aGljaCBtZWFu
cyB0aGF0IHRoZSBzdGFjayBzbG90IHdpbGwgYmUgcmVhZCBhc3luY2hyb25vdXNseQorICAgIC8v
IGFzIHdpdGggTG9ja2VkLCBidXQgbmV2ZXIgd3JpdHRlbiB0byBhc3luY2hyb25vdXNseS4gVGhl
biwgQWlyIGNvdWxkIG9wdGltaXplIHNwaWxsaW5nIGFuZAorICAgIC8vIGZpbGxpbmcgYnkgdHJh
Y2tpbmcgd2hldGhlciB0aGUgdmFsdWUgaGFkIGJlZW4gc3RvcmVkIHRvIGEgcmVhZC1vbmx5IGxv
Y2tlZCBzbG90LiBJZiBpdCBoYWQsCisgICAgLy8gdGhlbiB3ZSBjYW4gcmVmaWxsIGZyb20gdGhh
dCBzbG90LgorICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NTA1ODcKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCituYW1lc3BhY2UgV1RGIHsK
KworY2xhc3MgUHJpbnRTdHJlYW07CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYs
IEpTQzo6QjM6OlN0YWNrU2xvdEtpbmQpOworCit9IC8vIG5hbWVzcGFjZSBXVEYKKworI2VuZGlm
IC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM1N0YWNrU2xvdEtpbmRfaAorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclN0YWNrU2xvdEtpbmQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclN0YWNrU2xvdEtpbmQuaAko
d29ya2luZyBjb3B5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTdGFja1Ns
b3RLaW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDIyICsyMywyNiBAQAogICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCiAgKi8KIAotI2lmbmRlZiBCM1N0YWNrU2xvdEtpbmRfaAotI2RlZmluZSBCM1N0YWNrU2xv
dEtpbmRfaAorI2lmbmRlZiBBaXJTdGFja1Nsb3RLaW5kX2gKKyNkZWZpbmUgQWlyU3RhY2tTbG90
S2luZF9oCiAKICNpZiBFTkFCTEUoQjNfSklUKQogCi1uYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEIzIHsKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKIAog
ZW51bSBjbGFzcyBTdGFja1Nsb3RLaW5kIDogdWludDhfdCB7Ci0gICAgLy8gQSBsb2NrZWQgc3Rh
Y2sgc2xvdCBuZWVkcyB0byBiZSBrZXB0IGRpc2pvaW50IGZyb20gYWxsIG90aGVycyBiZWNhdXNl
IHdlIGludGVuZCB0byBlc2NhcGUKLSAgICAvLyBpdCBldmVuIGlmIHRoYXQncyBub3Qgb2J2aW91
cy4gVGhpcyBoYXBwZW5zIHdoZW4gdGhlIHJ1bnRpbWUgdGFrZXMgdGhlIGFkZHJlc3Mgb2YgYSBz
dGFjawotICAgIC8vIHNsb3QuCisgICAgLy8gQSBsb2NrZWQgc3RhY2sgc2xvdCBpcyBhbiBhcmVh
IG9mIHN0YWNrIHJlcXVlc3RlZCBieSB0aGUgY2xpZW50LiBJdCBjYW5ub3QgYmUga2lsbGVkLiBU
aGUKKyAgICAvLyBjbGllbnQgY2FuIGdldCBpdHMgRlAgb2Zmc2V0IGFuZCB3cml0ZSB0byBpdCBm
cm9tIHN0YWNrIHdhbGtpbmcgY29kZSwgc28gd2UgbXVzdCBhc3N1bWUKKyAgICAvLyB0aGF0IHJl
YWRzIGFuZCB3cml0ZXMgdG8gYSBsb2NrZWQgc3RhY2sgc2xvdCBjYW4gYmUgY2xvYmJlcmVkIHRo
ZSBzYW1lIHdheSBhcyByZWFkcyBhbmQKKyAgICAvLyB3cml0ZXMgdG8gYW55IG1lbW9yeSBsb2Nh
dGlvbi4KICAgICBMb2NrZWQsCiAKLSAgICAvLyBUaGVzZSBzdGFjayBzbG90cyBiZWhhdmUgbGlr
ZSB2YXJpYWJsZXMuIFVuZGVmaW5lZCBiZWhhdmlvciBoYXBwZW5zIGlmIHlvdSBzdG9yZSBsZXNz
IHRoYW4KLSAgICAvLyB0aGUgd2lkdGggb2YgdGhlIHNsb3QuCi0gICAgQW5vbnltb3VzCisgICAg
Ly8gQSBzcGlsbCBzbG90LiBUaGVzZSBoYXZlIGZ1bmRhbWVudGFsbHkgZGlmZmVyZW50IGJlaGF2
aW9yIHRoYW4gYSB0eXBpY2FsIG1lbW9yeSBsb2NhdGlvbi4KKyAgICAvLyBUaGV5IGFyZSBsb3dl
cmVkIHRvIGZyb20gdGVtcG9yYXJpZXMuIFRoaXMgbWVhbnMgZm9yIGV4YW1wbGUgdGhhdCBhIDMy
LWJpdCBaRGVmIHN0b3JlIHRvIGEKKyAgICAvLyA4IGJ5dGUgc3RhY2sgc2xvdCB3aWxsIHplcm8g
dGhlIHRvcCA0IGJ5dGVzLCBldmVuIHRob3VnaCBhIDMyLWJpdCBaRGVmIHN0b3JlIHRvIGFueSBv
dGhlcgorICAgIC8vIGtpbmQgb2YgbWVtb3J5IGxvY2F0aW9uIHdvdWxkIGRvIG5vIHN1Y2ggdGhp
bmcuIFVzZUFkZHIgb24gYSBzcGlsbCBzbG90IGlzIG5vdCBhbGxvd2VkLCBzbworICAgIC8vIHRo
ZXkgbmV2ZXIgZXNjYXBlLgorICAgIFNwaWxsCiAKICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGFk
ZCBhIHRoaXJkIG1vZGUsIHdoaWNoIG1lYW5zIHRoYXQgdGhlIHN0YWNrIHNsb3Qgd2lsbCBiZSBy
ZWFkIGFzeW5jaHJvbm91c2x5CiAgICAgLy8gYXMgd2l0aCBMb2NrZWQsIGJ1dCBuZXZlciB3cml0
dGVuIHRvIGFzeW5jaHJvbm91c2x5LiBUaGVuLCBBaXIgY291bGQgb3B0aW1pemUgc3BpbGxpbmcg
YW5kCkBAIC00Nyw3ICs1MSw3IEBAIGVudW0gY2xhc3MgU3RhY2tTbG90S2luZCA6IHVpbnQ4X3Qg
ewogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA1ODcK
IH07CiAKLX0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
QjM6OkFpcgogCiBuYW1lc3BhY2UgV1RGIHsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9vcGNvZGVfZ2VuZXJhdG9yLnJiCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvb3Bjb2RlX2dlbmVyYXRvci5yYgkocmV2aXNpb24gMTk1OTcwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9vcGNvZGVfZ2VuZXJhdG9yLnJiCSh3b3JraW5n
IGNvcHkpCkBAIC02ODAsNiArNjgwLDE4IEBAIHdyaXRlSCgiT3Bjb2RlVXRpbHMiKSB7CiAgICAg
ICAgICAgICAgICAgZmlsdGVyID0gcHJvYyB7IGZhbHNlIH0KICAgICAgICAgICAgICAgICBjYWxs
YmFjayA9IHByb2MgewogICAgICAgICAgICAgICAgICAgICB8IGZvcm0gfAorICAgICAgICAgICAg
ICAgICAgICAjIFRoaXMgY29uc2VydmF0aXZlbHkgc2F5cyB0aGF0IFN0YWNrIGlzIG5vdCBhIHZh
bGlkIGZvcm0gZm9yIFVzZUFkZHIsCisgICAgICAgICAgICAgICAgICAgICMgYmVjYXVzZSBpdCdz
IG9ubHkgdmFsaWQgaWYgaXQncyBub3QgYSBzcGlsbCBzbG90LiBUaGlzIGlzIGNvbnNpc3RlbnQg
d2l0aAorICAgICAgICAgICAgICAgICAgICAjIGlzVmFsaWRGb3JtKCkgYmVpbmcgY29uc2VydmF0
aXZlIGFuZCBpdCBhbHNvIGhhcHBlbnMgdG8gYmUgcHJhY3RpY2FsIHNpbmNlCisgICAgICAgICAg
ICAgICAgICAgICMgd2UgZG9uJ3QgcmVhbGx5IHVzZSBpc1ZhbGlkRm9ybSBmb3IgZGVjaWRpbmcg
d2hlbiBTdGFjayBpcyBzYWZlLgorICAgICAgICAgICAgICAgICAgICBvdmVybG9hZC5zaWduYXR1
cmUubGVuZ3RoLnRpbWVzIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHwgaW5kZXggfAorICAg
ICAgICAgICAgICAgICAgICAgICAgaWYgb3ZlcmxvYWQuc2lnbmF0dXJlW2luZGV4XS5yb2xlID09
ICJVQSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImlmIChvcGdlbkhp
ZGRlblB0cklkZW50aXR5KGtpbmRzKVsje2luZGV4fV0gPT0gQXJnOjpTdGFjaykiCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICIgICAgcmV0dXJuIGZhbHNlOyIKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBub3RDdXN0b20gPSAobm90IGZvcm0ua2lu
ZHMuZGV0ZWN0IHsgfCBraW5kIHwga2luZC5jdXN0b20gfSkKICAgICAgICAgICAgICAgICAgICAg
aWYgbm90Q3VzdG9tCiAgICAgICAgICAgICAgICAgICAgICAgICBiZWdpbkFyY2hzKG91dHAsIGZv
cm0uYXJjaHMpCkBAIC03ODcsNiArNzk5LDExIEBAIHdyaXRlSCgiT3Bjb2RlR2VuZXJhdGVkIikg
ewogICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImlmICghQXJnOjppc1ZhbGlkSW1tRm9y
bShhcmdzWyN7aW5kZXh9XS52YWx1ZSgpKSkiCiAgICAgICAgICAgICAgICAgICAgIG91dHAucHV0
cyAiT1BHRU5fUkVUVVJOKGZhbHNlKTsiCiAgICAgICAgICAgICAgICAgd2hlbiAiQWRkciIKKyAg
ICAgICAgICAgICAgICAgICAgaWYgYXJnLnJvbGUgPT0gIlVBIgorICAgICAgICAgICAgICAgICAg
ICAgICAgb3V0cC5wdXRzICJpZiAoYXJnc1sje2luZGV4fV0uaXNTdGFjaygpICYmIGFyZ3NbI3tp
bmRleH1dLnN0YWNrU2xvdCgpLT5pc1NwaWxsKCkpIgorICAgICAgICAgICAgICAgICAgICAgICAg
b3V0cC5wdXRzICJPUEdFTl9SRVRVUk4oZmFsc2UpOyIKKyAgICAgICAgICAgICAgICAgICAgZW5k
CisgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgImlm
ICghQXJnOjppc1ZhbGlkQWRkckZvcm0oYXJnc1sje2luZGV4fV0ub2Zmc2V0KCkpKSIKICAgICAg
ICAgICAgICAgICAgICAgb3V0cC5wdXRzICJPUEdFTl9SRVRVUk4oZmFsc2UpOyIKICAgICAgICAg
ICAgICAgICB3aGVuICJJbmRleCIKQEAgLTgzOSw5ICs4NTYsMTAgQEAgd3JpdGVIKCJPcGNvZGVH
ZW5lcmF0ZWQiKSB7CiAgICAgICAgICAgICAgICAgbnVtTm8gPSAwCiAgICAgICAgICAgICAgICAg
b3Bjb2RlLm92ZXJsb2Fkcy5lYWNoIHsKICAgICAgICAgICAgICAgICAgICAgfCBvdmVybG9hZCB8
CisgICAgICAgICAgICAgICAgICAgIHVzZUFkZHIgPSBvdmVybG9hZC5zaWduYXR1cmVbYXJnSW5k
ZXhdLnJvbGUgPT0gIlVBIgogICAgICAgICAgICAgICAgICAgICBvdmVybG9hZC5mb3Jtcy5lYWNo
IHsKICAgICAgICAgICAgICAgICAgICAgICAgIHwgZm9ybSB8Ci0gICAgICAgICAgICAgICAgICAg
ICAgICBpZiBmb3JtLmtpbmRzW2FyZ0luZGV4XSA9PSAiQWRkciIKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIGZvcm0ua2luZHNbYXJnSW5kZXhdID09ICJBZGRyIiBhbmQgbm90IHVzZUFkZHIK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1ZZXMgKz0gMQogICAgICAgICAgICAgICAg
ICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bU5vICs9IDEKQEAg
LTg2NCwxMiArODgyLDE0IEBAIHdyaXRlSCgiT3Bjb2RlR2VuZXJhdGVkIikgewogICAgICAgICAg
ICAgICAgICAgICBvcGNvZGUub3ZlcmxvYWRzLmVhY2ggewogICAgICAgICAgICAgICAgICAgICAg
ICAgfCBvdmVybG9hZCB8CiAKKyAgICAgICAgICAgICAgICAgICAgICAgIHVzZUFkZHIgPSBvdmVy
bG9hZC5zaWduYXR1cmVbYXJnSW5kZXhdLnJvbGUgPT0gIlVBIgorICAgICAgICAgICAgICAgICAg
ICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICAjIEFnYWluLCBjaGVjayBpZiBhbGwgb2Yg
dGhlbSBkbyB3aGF0IHdlIHdhbnQuCiAgICAgICAgICAgICAgICAgICAgICAgICBudW1ZZXMgPSAw
CiAgICAgICAgICAgICAgICAgICAgICAgICBudW1ObyA9IDAKICAgICAgICAgICAgICAgICAgICAg
ICAgIG92ZXJsb2FkLmZvcm1zLmVhY2ggewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwg
Zm9ybSB8Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgZm9ybS5raW5kc1thcmdJbmRl
eF0gPT0gIkFkZHIiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgZm9ybS5raW5kc1th
cmdJbmRleF0gPT0gIkFkZHIiIGFuZCBub3QgdXNlQWRkcgogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBudW1ZZXMgKz0gMQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtTm8gKz0gMQpJbmRleDogV2Vic2l0
ZXMvd2Via2l0Lm9yZy9kb2NzL2IzL2ludGVybWVkaWF0ZS1yZXByZXNlbnRhdGlvbi5odG1sCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYnNpdGVzL3dlYmtpdC5vcmcvZG9jcy9iMy9pbnRlcm1lZGlhdGUtcmVw
cmVzZW50YXRpb24uaHRtbAkocmV2aXNpb24gMTk1OTcwKQorKysgV2Vic2l0ZXMvd2Via2l0Lm9y
Zy9kb2NzL2IzL2ludGVybWVkaWF0ZS1yZXByZXNlbnRhdGlvbi5odG1sCSh3b3JraW5nIGNvcHkp
CkBAIC04NSw3ICs4NSw3IEBACiAgICAgICBmb3IgdGhlIGxvYWQuICBXZSB1c2UgdGhlIE1lbW9y
eVZhbHVlIGNsYXNzIGZvciBtZW1vcnktYWNjZXNzaW5nIHZhbHVlcywgd2hpY2ggYWxsIGhhdmUK
ICAgICAgIHN1Y2ggYW4gb2Zmc2V0LjwvcD4KIAotICAgIDxoMj5TdGFjayBTbG90PC9oMj4KKyAg
ICA8aDI+U3RhY2sgU2xvdHM8L2gyPgogCiAgICAgPHA+QjMgZXhwb3NlcyB0aGUgY29uY2VwdCBv
ZiBzdGFjay1hbGxvY2F0ZWQgZGF0YSBhbmQgZ2l2ZXMgdGhlIGNsaWVudCBhIGxvdCBvZiBjb250
cm9sLgogICAgICAgWW91IGNhbiBmb3JjZSBzdGFjayBzbG90cyB0byBlbmQgdXAgYXQgYSBwYXJ0
aWN1bGFyIG9mZnNldCBmcm9tIHRoZSBmcmFtZSBwb2ludGVyLCB0aG91Z2gKQEAgLTkzLDI0ICs5
MywxOSBAQAogICAgICAgb2Zmc2V0IGZyb20gYW55IHN0YWNrIHNsb3QuICBVc3VhbGx5LCB5b3Ug
bGV0IEIzIHNlbGVjdCB3aGVyZSBzdGFjayBzbG90cyBnbywgYW5kIHRoZW4gdXNlCiAgICAgICB0
aGUgU3RhY2tTbG90IEFQSSB0byBnZXQgaXRzIEZQIG9mZnNldCBhZnRlciBjb21waWxhdGlvbi48
L3A+CiAKLSAgICA8cD5TdGFjayBzbG90cyBhcmUgYWxzbyB1c2VkIGZvciBjcmVhdGluZyBub24t
U1NBIHZhcmlhYmxlcyB3aXRoIHRoZSBpbnRlbnRpb24gb2YgaGF2aW5nIEIzCi0gICAgICBjb252
ZXJ0IHRoZW0gaW50byBTU0EuICBUaGVyZSBhcmUgdHdvIGtpbmRzIG9mIHN0YWNrIGxvdHMuPC9w
PgorICAgIDxoMj5WYXJpYWJsZXM8L2gyPgogCi0gICAgPGRsPgotICAgICAgPGR0PkFub255bW91
czwvZHQ+Ci0gICAgICA8ZGQ+QW5vbnltb3VzIHN0YWNrIHNsb3RzIGFyZSB1c2VkIHRvIHJlcHJl
c2VudCBsb2NhbCB2YXJpYWJsZXMgdGhhdCBhcmVuJ3QgaW4gU1NBIGZvcm0uCi0gICAgICAgIEIz
IGlzIGFsbG93ZWQgdG8gYXNzdW1lIHRoYXQgbm9ib2R5IHdpbGwgc3RvcmUgdG8gYW4gYW5vbnlt
b3VzIHN0YWNrIHNsb3QgZXhjZXB0IHRocm91Z2gKLSAgICAgICAgU3RvcmUgaW5zdHJ1Y3Rpb25z
IGluIHRoZSBCMyBwcm9jZWR1cmUuICBCMyBpcyBhbGxvd2VkIHRvIGFzc3VtZSB0aGF0IGEgU3Rv
cmUgdGhhdCBkb2VzCi0gICAgICAgIG5vdCB3cml0ZSB0byB0aGUgZW50aXJlIGFub255bW91cyBz
dGFjayBzbG90IGxlYXZlcyB0aGUgdW53cml0dGVuIHBhcnQgaW4gYW4gdW5kZWZpbmVkCi0gICAg
ICAgIHN0YXRlLiAgVXN1YWxseSwgYW5vbnltb3VzIHN0YWNrIHNsb3RzIGFyZSBhbGxvY2F0ZWQg
dG8gaGF2ZSB0aGUgc2FtZSBzaXplIGFzIHRoZSB0eXBlCi0gICAgICAgIG9mIHZhcmlhYmxlIHRo
ZXkgYXJlIGJlaW5nIHVzZWQgdG8gcmVwcmVzZW50LjwvZGQ+Ci0KLSAgICAgIDxkdD5Mb2NrZWQ8
L2R0PgotICAgICAgPGRkPlRoZXNlIHN0YWNrIHNsb3RzIGFyZSBhc3N1bWVkIHRvIG9wZXJhdGUg
ImFzIGlmIiB0aGV5IHdlcmUgaW4gdGhlIGhlYXAsIGluIHRoZSBzZW5zZQotICAgICAgICB0aGF0
IHRoZSBtYXkgZ2V0IHJlYWQgb3Igd3JpdHRlbiB1c2luZyBvcGVyYXRpb25zIG5vdCB2aXNpYmxl
IGluIEIzIElSLjwvZGQ+Ci0gICAgPC9kbD4KLQotICAgIDxwPlRoZSBmaXhTU0EoKSBwaGFzZSB3
aWxsIGNvbnZlcnQgYW5vbnltb3VzIHN0YWNrIHNsb3RzIHRvIFNTQS48L3A+CisgICAgPHA+U29t
ZXRpbWVzLCBTU0EgaXMgaW5jb252ZW5pZW50LiBGb3IgZXhhbXBsZSwgaXQncyBoYXJkIHRvIGRv
IHBhdGggc3BlY2lhbGl6YXRpb24gb3ZlciBTU0EuCisgICAgICBCMyBoYXMgdGhlIGNvbmNlcHQg
b2YgVmFyaWFibGVzIGFzIGEgZmFsbC1iYWNrLiBUaGUgYmFja2VuZCBrbm93cyBob3cgdG8gaGFu
ZGxlIHRoZW0gYW5kCisgICAgICB3aWxsIGNvYWxlc2NlIGFuZCBjb3B5LXByb3BhZ2F0ZSB0aGVt
LiBJbnNpZGUgdGhlIEIzIG9wdGltaXplciwgdGhlcmUgaXMgYSBjbGFzc2ljIFNTQQorICAgICAg
YnVpbGRlciB0aGF0IGVsaW1pbmF0ZXMgdmFyaWFibGVzIGFuZCBidWlsZHMgU1NBIGluIHRoZWly
IHBsYWNlLjwvcD4KKworICAgIDxwPllvdSBjYW4gY3JlYXRlIFZhcmlhYmxlcyBieSB1c2luZyBQ
cm9jZWR1cmU6OmFkZFZhcmlhYmxlKCksIGFuZCB0aGVuIHlvdSBjYW4gYWNjZXNzIHRoZW0KKyAg
ICAgIHVzaW5nIHRoZSBHZXQgYW5kIFNldCBvcGNvZGVzLjwvcD4KKworICAgIDxwPlRoZSBmaXhT
U0EoKSBwaGFzZSB3aWxsIGNvbnZlcnQgdmFyaWFibGVzIHRvIFNTQS4gSWYgeW91IHVzZSBhIGxv
dCBvZiB2YXJpYWJsZXMgaW4geW91cgorICAgICAgaW5wdXQgdG8gQjMsIGl0J3MgYSBnb29kIGlk
ZWEgdG8gcnVuIGZpeFNTQSgpIG1hbnVhbGx5IGJlZm9yZSBydW5uaW5nIHRoZSBjb21waWxlci4g
VGhlCisgICAgICBkZWZhdWx0IG9wdGltaXplciBvbmx5IHJ1bnMgZml4U1NBKCkgdG93YXJkcyB0
aGUgbWlkZGxlIG9mIG9wdGltaXphdGlvbnMuIDwvcD4KIAogICAgIDxoMj5Db250cm9sIGZsb3c8
L2gyPgogCkBAIC0xNjksNiArMTY0LDEzIEBACiAgICAgICA8ZHQ+RG91YmxlIENvbnN0RG91Ymxl
KGNvbnN0YW50KTwvZHQ+CiAgICAgICA8ZGQ+RG91YmxlIGNvbnN0YW50LiAgTXVzdCB1c2UgdGhl
IENvbnN0RG91YmxlVmFsdWUgY2xhc3MsIHdoaWNoIGhhcyBzcGFjZSBmb3IgdGhlIGRvdWJsZSBj
b25zdGFudC48L2RkPgogCisgICAgICA8ZHQ+Vm9pZCBTZXQodmFsdWUsIHZhcmlhYmxlKTwvZHQ+
CisgICAgICA8ZGQ+QXNzaWducyB0aGUgZ2l2ZW4gdmFsdWUgdG8gdGhlIGdpdmVuIFZhcmlhYmxl
LiBNdXN0IHVzZSB0aGUgVmFyaWFibGVWYWx1ZSBjbGFzcy48L2RkPgorCisgICAgICA8ZHQ+VCBH
ZXQodmFyaWFibGUpPC9kdD4KKyAgICAgIDxkZD5SZXR1cm5zIHRoZSBjdXJyZW50IHZhbHVlIG9m
IHRoZSBnaXZlbiBWYXJpYWJsZS4gSXRzIHJldHVybiB0eXBlIGRlcGVuZHMgb24gdGhlCisgICAg
ICAgIHZhcmlhYmxlLiBNdXN0IHVzZSB0aGUgVmFyaWFibGVWYWx1ZSBjbGFzcy48L2RkPgorCiAg
ICAgICA8ZHQ+SW50UHRyIFNsb3RCYXNlKHN0YWNrU2xvdCk8L2R0PgogICAgICAgPGRkPlJldHVy
bnMgYSBwb2ludGVyIHRvIHRoZSBiYXNlIG9mIHRoZSBnaXZlbiBzdGFjayBzbG90LiAgTXVzdCB1
c2UgdGhlIFNsb3RCYXNlVmFsdWUKICAgICAgICAgY2xhc3MuPC9kZD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>270413</attachid>
            <date>2016-02-01 13:00:34 -0800</date>
            <delta_ts>2016-02-01 19:08:20 -0800</delta_ts>
            <desc>getting close</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>135500</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDE5NTk3MCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtOTcsNiArOTcsNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAgIGIzL2Fpci9B
aXJTcGVjaWFsLmNwcAogICAgIGIzL2Fpci9BaXJTcGlsbEV2ZXJ5dGhpbmcuY3BwCiAgICAgYjMv
YWlyL0FpclN0YWNrU2xvdC5jcHAKKyAgICBiMy9haXIvQWlyU3RhY2tTbG90S2luZC5jcHAKICAg
ICBiMy9haXIvQWlyVG1wLmNwcAogICAgIGIzL2Fpci9BaXJUbXBXaWR0aC5jcHAKICAgICBiMy9h
aXIvQWlyVmFsaWRhdGUuY3BwCkBAIC0xNTEsNyArMTUyLDYgQEAgc2V0KEphdmFTY3JpcHRDb3Jl
X1NPVVJDRVMKICAgICBiMy9CM1N0YWNrbWFwR2VuZXJhdGlvblBhcmFtcy5jcHAKICAgICBiMy9C
M1N0YWNrbWFwU3BlY2lhbC5jcHAKICAgICBiMy9CM1N0YWNrbWFwVmFsdWUuY3BwCi0gICAgYjMv
QjNTdGFja1Nsb3RLaW5kLmNwcAogICAgIGIzL0IzU3RhY2tTbG90LmNwcAogICAgIGIzL0IzU3dp
dGNoQ2FzZS5jcHAKICAgICBiMy9CM1N3aXRjaFZhbHVlLmNwcApAQCAtMTYzLDYgKzE2Myw4IEBA
IHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAgYjMvQjNWYWx1ZS5jcHAKICAgICBiMy9C
M1ZhbHVlS2V5LmNwcAogICAgIGIzL0IzVmFsdWVSZXAuY3BwCisgICAgYjMvQjNWYXJpYWJsZS5j
cHAKKyAgICBiMy9CM1ZhcmlhYmxlVmFsdWUuY3BwCiAKICAgICBiaW5kaW5ncy9TY3JpcHRGdW5j
dGlvbkNhbGwuY3BwCiAgICAgYmluZGluZ3MvU2NyaXB0T2JqZWN0LmNwcApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2Rl
cHJvai9wcm9qZWN0LnBieHByb2oJKHJldmlzaW9uIDE5NTk3MCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5n
IGNvcHkpCkBAIC0yMzksNiArMjM5LDEzIEBACiAJCTBGMkI5Q0Y3MTlEMEJBQzEwMEIxRDFCNSAv
KiBGVExFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjlDRjExOUQwQkFDMTAwQjFEMUI1IC8qIEZU
TEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEYyQjlDRjgxOUQwQkFDMTAwQjFEMUI1IC8qIEZU
TE9wZXJhdGlvbnMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEYyQjlDRjIxOUQwQkFDMTAwQjFEMUI1IC8qIEZUTE9wZXJhdGlvbnMuY3BwICovOyB9
OwogCQkwRjJCOUNGOTE5RDBCQUMxMDBCMUQxQjUgLyogRlRMT3BlcmF0aW9ucy5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjlDRjMxOUQwQkFDMTAw
QjFEMUI1IC8qIEZUTE9wZXJhdGlvbnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OworCQkwRjJCQkQ5NjFDNUZGM0Y1MDAyM0VGMjMgLyogQjNTcGFyc2VD
b2xsZWN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjJCQkQ5MTFDNUZGM0Y1MDAyM0VGMjMgLyogQjNTcGFyc2VDb2xsZWN0aW9uLmggKi87IH07
CisJCTBGMkJCRDk3MUM1RkYzRjUwMDIzRUYyMyAvKiBCM1ZhcmlhYmxlLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkJCRDkyMUM1RkYzRjUwMDIz
RUYyMyAvKiBCM1ZhcmlhYmxlLmNwcCAqLzsgfTsKKwkJMEYyQkJEOTgxQzVGRjNGNTAwMjNFRjIz
IC8qIEIzVmFyaWFibGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGMkJCRDkzMUM1RkYzRjUwMDIzRUYyMyAvKiBCM1ZhcmlhYmxlLmggKi87IH07CisJ
CTBGMkJCRDk5MUM1RkYzRjUwMDIzRUYyMyAvKiBCM1ZhcmlhYmxlVmFsdWUuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQkJEOTQxQzVGRjNGNTAw
MjNFRjIzIC8qIEIzVmFyaWFibGVWYWx1ZS5jcHAgKi87IH07CisJCTBGMkJCRDlBMUM1RkYzRjUw
MDIzRUYyMyAvKiBCM1ZhcmlhYmxlVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkJCRDk1MUM1RkYzRjUwMDIzRUYyMyAvKiBCM1ZhcmlhYmxl
VmFsdWUuaCAqLzsgfTsKKwkJMEYyQkJEOUQxQzVGRjQwNTAwMjNFRjIzIC8qIEFpclN0YWNrU2xv
dEtpbmQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEYyQkJEOUIxQzVGRjQwNTAwMjNFRjIzIC8qIEFpclN0YWNrU2xvdEtpbmQuY3BwICovOyB9Owor
CQkwRjJCQkQ5RTFDNUZGNDA1MDAyM0VGMjMgLyogQWlyU3RhY2tTbG90S2luZC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQkJEOUMxQzVGRjQwNTAw
MjNFRjIzIC8qIEFpclN0YWNrU2xvdEtpbmQuaCAqLzsgfTsKIAkJMEYyQkRDMTUxNTFDNUQ0RDAw
Q0Q4OTEwIC8qIERGR0ZpeHVwUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYyQkRDMTIxNTFDNUQ0QTAwQ0Q4OTEwIC8qIERGR0ZpeHVwUGhh
c2UuY3BwICovOyB9OwogCQkwRjJCREMxNjE1MUM1RDRGMDBDRDg5MTAgLyogREZHRml4dXBQaGFz
ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQkRD
MTMxNTFDNUQ0QTAwQ0Q4OTEwIC8qIERGR0ZpeHVwUGhhc2UuaCAqLzsgfTsKIAkJMEYyQkRDMjEx
NTFFODAzQjAwQ0Q4OTEwIC8qIERGR0luc2VydGlvblNldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQkRDMUYxNTFFODAzODAwQ0Q4OTEwIC8qIERG
R0luc2VydGlvblNldC5oICovOyB9OwpAQCAtODMyLDggKzgzOSw2IEBACiAJCTBGRUM4NTJEMUJE
QUNEQUMwMDgwRkY3NCAvKiBCM1Byb2NlZHVyZUlubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEUzMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M1Byb2NlZHVyZUlubGluZXMuaCAqLzsgfTsKIAkJMEZFQzg1MzAxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzU3RhY2ttYXBTcGVjaWFsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDBGRUM4NEU2MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrbWFwU3BlY2lh
bC5jcHAgKi87IH07CiAJCTBGRUM4NTMxMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrbWFwU3Bl
Y2lhbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZF
Qzg0RTcxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2ttYXBTcGVjaWFsLmggKi87IH07Ci0JCTBG
RUM4NTMyMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xvdEtpbmQuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RTgxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzU3RhY2tTbG90S2luZC5jcHAgKi87IH07Ci0JCTBGRUM4NTMzMUJEQUNEQUMwMDgw
RkY3NCAvKiBCM1N0YWNrU2xvdEtpbmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGRUM4NEU5MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xvdEtp
bmQuaCAqLzsgfTsKIAkJMEZFQzg1MzQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU2xvdEJhc2VWYWx1
ZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVD
ODRFQTFCREFDREFDMDA4MEZGNzQgLyogQjNTbG90QmFzZVZhbHVlLmNwcCAqLzsgfTsKIAkJMEZF
Qzg1MzUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU2xvdEJhc2VWYWx1ZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RUIxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzU2xvdEJhc2VWYWx1ZS5oICovOyB9OwogCQkwRkVDODUzNjFCREFDREFDMDA4MEZGNzQg
LyogQjNTdWNjZXNzb3JDb2xsZWN0aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRFQzFCREFDREFDMDA4MEZGNzQgLyogQjNTdWNjZXNzb3JD
b2xsZWN0aW9uLmggKi87IH07CkBAIC0yNDMxLDYgKzI0MzYsMTMgQEAKIAkJMEYyQjlDRjExOUQw
QkFDMTAwQjFEMUI1IC8qIEZUTEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0
aW9uLmg7IHBhdGggPSBmdGwvRlRMRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24uaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyQjlDRjIxOUQwQkFDMTAwQjFEMUI1IC8qIEZU
TE9wZXJhdGlvbnMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRlRM
T3BlcmF0aW9ucy5jcHA7IHBhdGggPSBmdGwvRlRMT3BlcmF0aW9ucy5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGMkI5Q0YzMTlEMEJBQzEwMEIxRDFCNSAvKiBGVExPcGVyYXRp
b25zLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTE9wZXJhdGlvbnMuaDsg
cGF0aCA9IGZ0bC9GVExPcGVyYXRpb25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CTBGMkJCRDkxMUM1RkYzRjUwMDIzRUYyMyAvKiBCM1NwYXJzZUNvbGxlY3Rpb24uaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNTcGFyc2VDb2xsZWN0aW9uLmg7IHBhdGggPSBi
My9CM1NwYXJzZUNvbGxlY3Rpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYy
QkJEOTIxQzVGRjNGNTAwMjNFRjIzIC8qIEIzVmFyaWFibGUuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gQjNWYXJpYWJsZS5jcHA7IHBhdGggPSBiMy9CM1ZhcmlhYmxl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQkJEOTMxQzVGRjNGNTAwMjNF
RjIzIC8qIEIzVmFyaWFibGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNW
YXJpYWJsZS5oOyBwYXRoID0gYjMvQjNWYXJpYWJsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OworCQkwRjJCQkQ5NDFDNUZGM0Y1MDAyM0VGMjMgLyogQjNWYXJpYWJsZVZhbHVlLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzVmFyaWFibGVWYWx1ZS5jcHA7
IHBhdGggPSBiMy9CM1ZhcmlhYmxlVmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRjJCQkQ5NTFDNUZGM0Y1MDAyM0VGMjMgLyogQjNWYXJpYWJsZVZhbHVlLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzVmFyaWFibGVWYWx1ZS5oOyBwYXRoID0gYjMv
QjNWYXJpYWJsZVZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkJCRDlC
MUM1RkY0MDUwMDIzRUYyMyAvKiBBaXJTdGFja1Nsb3RLaW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEFpclN0YWNrU2xvdEtpbmQuY3BwOyBwYXRoID0gYjMvYWly
L0FpclN0YWNrU2xvdEtpbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJC
QkQ5QzFDNUZGNDA1MDAyM0VGMjMgLyogQWlyU3RhY2tTbG90S2luZC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBBaXJTdGFja1Nsb3RLaW5kLmg7IHBhdGggPSBiMy9haXIvQWly
U3RhY2tTbG90S2luZC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjJCREMxMjE1
MUM1RDRBMDBDRDg5MTAgLyogREZHRml4dXBQaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBERkdGaXh1cFBoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdGaXh1cFBo
YXNlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyQkRDMTMxNTFDNUQ0QTAw
Q0Q4OTEwIC8qIERGR0ZpeHVwUGhhc2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1l
ID0gREZHRml4dXBQaGFzZS5oOyBwYXRoID0gZGZnL0RGR0ZpeHVwUGhhc2UuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyQkRDMUYxNTFFODAzODAwQ0Q4OTEwIC8qIERGR0luc2Vy
dGlvblNldC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdJbnNlcnRpb25T
ZXQuaDsgcGF0aCA9IGRmZy9ERkdJbnNlcnRpb25TZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKQEAgLTMwMzMsOCArMzA0NSw2IEBACiAJCTBGRUM4NEUzMUJEQUNEQUMwMDgwRkY3NCAv
KiBCM1Byb2NlZHVyZUlubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0g
QjNQcm9jZWR1cmVJbmxpbmVzLmg7IHBhdGggPSBiMy9CM1Byb2NlZHVyZUlubGluZXMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFQzg0RTYxQkRBQ0RBQzAwODBGRjc0IC8qIEIz
U3RhY2ttYXBTcGVjaWFsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9
IEIzU3RhY2ttYXBTcGVjaWFsLmNwcDsgcGF0aCA9IGIzL0IzU3RhY2ttYXBTcGVjaWFsLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFQzg0RTcxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzU3RhY2ttYXBTcGVjaWFsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIz
U3RhY2ttYXBTcGVjaWFsLmg7IHBhdGggPSBiMy9CM1N0YWNrbWFwU3BlY2lhbC5oOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwotCQkwRkVDODRFODFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFj
a1Nsb3RLaW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzU3Rh
Y2tTbG90S2luZC5jcHA7IHBhdGggPSBiMy9CM1N0YWNrU2xvdEtpbmQuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwotCQkwRkVDODRFOTFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja1Ns
b3RLaW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzU3RhY2tTbG90S2lu
ZC5oOyBwYXRoID0gYjMvQjNTdGFja1Nsb3RLaW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGRUM4NEVBMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Nsb3RCYXNlVmFsdWUuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNTbG90QmFzZVZhbHVlLmNwcDsg
cGF0aCA9IGIzL0IzU2xvdEJhc2VWYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGRUM4NEVCMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Nsb3RCYXNlVmFsdWUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNTbG90QmFzZVZhbHVlLmg7IHBhdGggPSBiMy9C
M1Nsb3RCYXNlVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFQzg0RUMx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzU3VjY2Vzc29yQ29sbGVjdGlvbi5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IG5hbWUgPSBCM1N1Y2Nlc3NvckNvbGxlY3Rpb24uaDsgcGF0aCA9IGIzL0Iz
U3VjY2Vzc29yQ29sbGVjdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDg2
Niw2ICs0ODc2LDcgQEAKIAkJCQkwRkVDODVCODFCRTE0NjJGMDA4MEZGNzQgLyogQjNSZWR1Y2VT
dHJlbmd0aC5oICovLAogCQkJCTBGRUM4NEVBMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Nsb3RCYXNl
VmFsdWUuY3BwICovLAogCQkJCTBGRUM4NEVCMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Nsb3RCYXNl
VmFsdWUuaCAqLywKKwkJCQkwRjJCQkQ5MTFDNUZGM0Y1MDAyM0VGMjMgLyogQjNTcGFyc2VDb2xs
ZWN0aW9uLmggKi8sCiAJCQkJMEY2QjhBREExQzRFRkFDMzAwOTY5MDUyIC8qIEIzU1NBQ2FsY3Vs
YXRvci5jcHAgKi8sCiAJCQkJMEY2QjhBREIxQzRFRkFDMzAwOTY5MDUyIC8qIEIzU1NBQ2FsY3Vs
YXRvci5oICovLAogCQkJCTBGMzNGQ0Y1MUMxMzZFMjUwMDMyM0Y2NyAvKiBCM1N0YWNrbWFwR2Vu
ZXJhdGlvblBhcmFtcy5jcHAgKi8sCkBAIC00ODc2LDggKzQ4ODcsNiBAQAogCQkJCTBGMzM4REYw
MUJFOTNBRDEwMDEzQzg4RiAvKiBCM1N0YWNrbWFwVmFsdWUuaCAqLywKIAkJCQkwRjk0OTU4NTFD
NTdGNDc1MDA0MTNBNDggLyogQjNTdGFja1Nsb3QuY3BwICovLAogCQkJCTBGOTQ5NTg2MUM1N0Y0
NzUwMDQxM0E0OCAvKiBCM1N0YWNrU2xvdC5oICovLAotCQkJCTBGRUM4NEU4MUJEQUNEQUMwMDgw
RkY3NCAvKiBCM1N0YWNrU2xvdEtpbmQuY3BwICovLAotCQkJCTBGRUM4NEU5MUJEQUNEQUMwMDgw
RkY3NCAvKiBCM1N0YWNrU2xvdEtpbmQuaCAqLywKIAkJCQkwRkVDODRFQzFCREFDREFDMDA4MEZG
NzQgLyogQjNTdWNjZXNzb3JDb2xsZWN0aW9uLmggKi8sCiAJCQkJMEZFQzg0RUQxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzU3dpdGNoQ2FzZS5jcHAgKi8sCiAJCQkJMEZFQzg0RUUxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzU3dpdGNoQ2FzZS5oICovLApAQCAtNDkwMSw2ICs0OTEwLDEwIEBACiAJCQkJMEYz
MzhFMEExQkYwMjc2QzAwMTNDODhGIC8qIEIzVmFsdWVLZXlJbmxpbmVzLmggKi8sCiAJCQkJMEZF
Qzg0RkMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWVSZXAuY3BwICovLAogCQkJCTBGRUM4NEZE
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1ZhbHVlUmVwLmggKi8sCisJCQkJMEYyQkJEOTIxQzVGRjNG
NTAwMjNFRjIzIC8qIEIzVmFyaWFibGUuY3BwICovLAorCQkJCTBGMkJCRDkzMUM1RkYzRjUwMDIz
RUYyMyAvKiBCM1ZhcmlhYmxlLmggKi8sCisJCQkJMEYyQkJEOTQxQzVGRjNGNTAwMjNFRjIzIC8q
IEIzVmFyaWFibGVWYWx1ZS5jcHAgKi8sCisJCQkJMEYyQkJEOTUxQzVGRjNGNTAwMjNFRjIzIC8q
IEIzVmFyaWFibGVWYWx1ZS5oICovLAogCQkJCTBGRUM4NUFFMUJEQjVENUUwMDgwRkY3NCAvKiB0
ZXN0YjMuY3BwICovLAogCQkJKTsKIAkJCW5hbWUgPSBiMzsKQEAgLTQ5NzEsNiArNDk4NCw4IEBA
CiAJCQkJMEZFQzg1NjUxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclNwaWxsRXZlcnl0aGluZy5oICov
LAogCQkJCTBGRUM4NTY2MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTdGFja1Nsb3QuY3BwICovLAog
CQkJCTBGRUM4NTY3MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJTdGFja1Nsb3QuaCAqLywKKwkJCQkw
RjJCQkQ5QjFDNUZGNDA1MDAyM0VGMjMgLyogQWlyU3RhY2tTbG90S2luZC5jcHAgKi8sCisJCQkJ
MEYyQkJEOUMxQzVGRjQwNTAwMjNFRjIzIC8qIEFpclN0YWNrU2xvdEtpbmQuaCAqLywKIAkJCQkw
RkVDODU2ODFCREFDREM3MDA4MEZGNzQgLyogQWlyVG1wLmNwcCAqLywKIAkJCQkwRkVDODU2OTFC
REFDREM3MDA4MEZGNzQgLyogQWlyVG1wLmggKi8sCiAJCQkJMEZFQzg1NkExQkRBQ0RDNzAwODBG
Rjc0IC8qIEFpclRtcElubGluZXMuaCAqLywKQEAgLTcxMjgsNyArNzE0Myw2IEBACiAJCQkJMEZF
Qzg1MkQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUHJvY2VkdXJlSW5saW5lcy5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMEZFQzg1QkQxQkUxNDYyRjAwODBGRjc0IC8qIEIzUmVkdWNlU3RyZW5ndGguaCBp
biBIZWFkZXJzICovLAogCQkJCTBGRUM4NTMxMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrbWFw
U3BlY2lhbC5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMEZFQzg1MzMxQkRBQ0RBQzAwODBGRjc0IC8q
IEIzU3RhY2tTbG90S2luZC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1MzUxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzU2xvdEJhc2VWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1MzYx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzU3VjY2Vzc29yQ29sbGVjdGlvbi5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEZFQzg1MzgxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3dpdGNoQ2FzZS5oIGluIEhlYWRl
cnMgKi8sCkBAIC03MjEzLDYgKzcyMjcsNyBAQAogCQkJCTBGMTVGMTVGMTRCN0E3M0UwMDVERTM3
RCAvKiBDb21tb25TbG93UGF0aHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTY1NTNBMzMyMTdBMUYx
RUUwMDhDRjZGMyAvKiBDb21tb25TbG93UGF0aHNFeGNlcHRpb25zLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRkQ4MkUzOTE0MUFCMTREMDAxNzlDOTQgLyogQ29tcGFjdEpJVENvZGVNYXAuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTBGMkJCRDlFMUM1RkY0MDUwMDIzRUYyMyAvKiBBaXJTdGFja1Nsb3RL
aW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0U1QTNBODE3OTc0MzJEMDBFODkzQzAgLyogQ29t
cGlsYXRpb25SZXN1bHQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDM0Y0MEUxNkY1Q0QwMEIz
NDQ2MCAvKiBDb21wbGV0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjZGQzc1MTE5NjExMEE4
MDBFMUQwMkQgLyogQ29tcGxleEdldFN0YXR1cy5oIGluIEhlYWRlcnMgKi8sCkBAIC03Mjg2LDYg
KzczMDEsNyBAQAogCQkJCTQzNDIyQTYzMUMxNThFNkQwMEUyRUI5OCAvKiBCM0NvbnN0RmxvYXRW
YWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZGQjkyMUExNkQwMkVDNTAwNTVBNURCIC8qIERG
R0Jhc2ljQmxvY2tJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBN0Q4OUNGNDE3QTBCOEND
MDA3NzNBRDggLyogREZHQmxvY2tJbnNlcnRpb25TZXQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBG
MkJCRDk2MUM1RkYzRjUwMDIzRUYyMyAvKiBCM1NwYXJzZUNvbGxlY3Rpb24uaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGQzNDQ0ZDMTlBREE0MTAwMDZBQzcyQSAvKiBERkdCbG9ja01hcC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEZDM0NDRkQxOUFEQTQxMDAwNkFDNzJBIC8qIERGR0Jsb2NrTWFwSW5s
aW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDM0NDRkUxOUFEQTQxMDAwNkFDNzJBIC8qIERG
R0Jsb2NrU2V0LmggaW4gSGVhZGVycyAqLywKQEAgLTc1NjUsNiArNzU4MSw3IEBACiAJCQkJMEYy
QjY2QUUxN0I2QjU0NTAwQTdBRTNGIC8qIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0LmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjJCNjZBRjE3QjZCNTQ1MDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNv
dW50ZWRTZXRJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkyQUFCQ0RFNzE4RUYyOTQyMDAw
MDIwOTYgLyogR0NMb2dnaW5nLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJCQkQ5ODFDNUZGM0Y1
MDAyM0VGMjMgLyogQjNWYXJpYWJsZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTU0RThFQjAxOEJG
RkJCQjAwNTU2RDI4IC8qIEdDU2VnbWVudGVkQXJyYXkuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1
NEU4RUIxMThCRkZCQkUwMDU1NkQyOCAvKiBHQ1NlZ21lbnRlZEFycmF5SW5saW5lcy5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJOTk1OUU5MzExQkQxODI3MjAwMUFBNDEzIC8qIGdlbmVyYXRlLWNvbWJp
bmVkLWluc3BlY3Rvci1qc29uLnB5IGluIEhlYWRlcnMgKi8sCkBAIC04MTc2LDYgKzgxOTMsNyBA
QAogCQkJCTBGNkI4QUREMUM0RUZBQzMwMDk2OTA1MiAvKiBCM1NTQUNhbGN1bGF0b3IuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTdCMDI0NzU5MUI4NjhFQjcwMDU0MjQ0MCAvKiBXQVNNRnVuY3Rpb25T
eW50YXhDaGVja2VyLmggaW4gSGVhZGVycyAqLywKIAkJCQk3QjM5Rjc2RTFCNjJERTMyMDAzNjBG
QjQgLyogV0FTTU1vZHVsZVBhcnNlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQkJEOUExQzVG
RjNGNTAwMjNFRjIzIC8qIEIzVmFyaWFibGVWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0Iz
OUY3NzAxQjYyREUzMjAwMzYwRkI0IC8qIFdBU01SZWFkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUZFRDk0RjJGMTcxRTNFMjMwMEJFNzdBNCAvKiBXYXRjaGRvZy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJMEY5MTlEMjYxNTg1M0NFMzAwNEE0RTdEIC8qIFdhdGNocG9pbnQuaCBpbiBIZWFkZXJzICov
LApAQCAtODgyNCw3ICs4ODQyLDYgQEAKIAkJCQk0MzQyMkE2MjFDMTU4RTZBMDBFMkVCOTggLyog
QjNDb25zdEZsb2F0VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFQzg1QkMxQkUxNDYy
RjAwODBGRjc0IC8qIEIzUmVkdWNlU3RyZW5ndGguY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZF
Qzg1MzAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2ttYXBTcGVjaWFsLmNwcCBpbiBTb3VyY2Vz
ICovLAotCQkJCTBGRUM4NTMyMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xvdEtpbmQuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFQzg1MzQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU2xvdEJh
c2VWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkVDODUzNzFCREFDREFDMDA4MEZGNzQg
LyogQjNTd2l0Y2hDYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRUM4NTM5MUJEQUNEQUMw
MDgwRkY3NCAvKiBCM1N3aXRjaFZhbHVlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtOTA1OSw2ICs5
MDc2LDcgQEAKIAkJCQkwRkM5N0Y0MTE4MjAyMTE5MDAyQzlCMjYgLyogREZHV2F0Y2hwb2ludENv
bGxlY3Rpb25QaGFzZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkRCMkNFNzE3NDgzMEEyMDA3
QjNDMUIgLyogREZHV29ya2xpc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFMDUwMTcxQUE5
MDkxMTAwRDMzQjMzIC8qIERpcmVjdEFyZ3VtZW50cy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkw
RjJCQkQ5RDFDNUZGNDA1MDAyM0VGMjMgLyogQWlyU3RhY2tTbG90S2luZC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRkUwNTAxNTFBQTkwOTExMDBEMzNCMzMgLyogRGlyZWN0QXJndW1lbnRzT2Zm
c2V0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGOUQzMzcwMTY1REJCOTAwMDVBRDM4NyAvKiBE
aXNhc3NlbWJsZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTcwNDQ3RUQxN0EwQkQ3MDAwRjU4
OThFIC8qIER1bXBDb250ZXh0LmNwcCBpbiBTb3VyY2VzICovLApAQCAtOTU1NCwxMSArOTU3Miwx
MyBAQAogCQkJCTJBNEVDOTBCMTg2MEQ2QzIwMDk0Rjc4MiAvKiBXcml0ZUJhcnJpZXJCdWZmZXIu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZDODE1MEIxNDA0M0MwRTAwQ0ZBNjAzIC8qIFdyaXRl
QmFycmllclN1cHBvcnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQTdFNUFCM0ExNzk5RTRCMjAw
RDI4MzNEIC8qIFg4NkRpc2Fzc2VtYmxlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjJCQkQ5
NzFDNUZGM0Y1MDAyM0VGMjMgLyogQjNWYXJpYWJsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4
NjNDNkQ5QzE1MjExMTFBMDA1ODVFNEUgLyogWWFyckNhbm9uaWNhbGl6ZVVDUzIuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJODY3MDRCODQxMkRCQTMzNzAwQTlGRTdCIC8qIFlhcnJJbnRlcnByZXRl
ci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NjcwNEI4NjEyREJBMzM3MDBBOUZFN0IgLyogWWFy
ckpJVC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NjcwNEI4OTEyREJBMzM3MDBBOUZFN0IgLyog
WWFyclBhdHRlcm4uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODY3MDRCNDIxMkRCOEE4MTAwQTlG
RTdCIC8qIFlhcnJTeW50YXhDaGVja2VyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMkJCRDk5
MUM1RkYzRjUwMDIzRUYyMyAvKiBCM1ZhcmlhYmxlVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkpOwogCQkJcnVuT25seUZvckRlcGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNBcmd1bWVudFJlZ1ZhbHVlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQXJndW1lbnRSZWdWYWx1ZS5oCShy
ZXZpc2lvbiAxOTU5NzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNBcmd1bWVudFJl
Z1ZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ5LDggKzQ5LDggQEAgcHJvdGVjdGVkOgogcHJp
dmF0ZToKICAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOwogCi0gICAgQXJndW1lbnRSZWdWYWx1
ZSh1bnNpZ25lZCBpbmRleCwgT3JpZ2luIG9yaWdpbiwgUmVnIHJlZykKLSAgICAgICAgOiBWYWx1
ZShpbmRleCwgQ2hlY2tlZE9wY29kZSwgQXJndW1lbnRSZWcsIHJlZy5pc0dQUigpID8gcG9pbnRl
clR5cGUoKSA6IERvdWJsZSwgb3JpZ2luKQorICAgIEFyZ3VtZW50UmVnVmFsdWUoT3JpZ2luIG9y
aWdpbiwgUmVnIHJlZykKKyAgICAgICAgOiBWYWx1ZShDaGVja2VkT3Bjb2RlLCBBcmd1bWVudFJl
ZywgcmVnLmlzR1BSKCkgPyBwb2ludGVyVHlwZSgpIDogRG91YmxlLCBvcmlnaW4pCiAgICAgICAg
ICwgbV9yZWcocmVnKQogICAgIHsKICAgICAgICAgQVNTRVJUKHJlZy5pc1NldCgpKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NDYWxsVmFsdWUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDQ2FsbFZhbHVlLmgJKHJldmlzaW9uIDE5NTk3MCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NDYWxsVmFsdWUuaAkod29ya2luZyBjb3B5
KQpAQCAtNDgsMTUgKzQ4LDE1IEBAIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVy
ZTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KLSAgICBDQ2FsbFZhbHVl
KHVuc2lnbmVkIGluZGV4LCBUeXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4sIEFyZ3VtZW50cy4uLiBh
cmd1bWVudHMpCi0gICAgICAgIDogVmFsdWUoaW5kZXgsIENoZWNrZWRPcGNvZGUsIENDYWxsLCB0
eXBlLCBvcmlnaW4sIGFyZ3VtZW50cy4uLikKKyAgICBDQ2FsbFZhbHVlKFR5cGUgdHlwZSwgT3Jp
Z2luIG9yaWdpbiwgQXJndW1lbnRzLi4uIGFyZ3VtZW50cykKKyAgICAgICAgOiBWYWx1ZShDaGVj
a2VkT3Bjb2RlLCBDQ2FsbCwgdHlwZSwgb3JpZ2luLCBhcmd1bWVudHMuLi4pCiAgICAgewogICAg
ICAgICBSRUxFQVNFX0FTU0VSVChudW1DaGlsZHJlbigpID49IDEpOwogICAgIH0KIAogICAgIHRl
bXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KLSAgICBDQ2FsbFZhbHVlKHVuc2lnbmVkIGlu
ZGV4LCBUeXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4sIGNvbnN0IEVmZmVjdHMmIGVmZmVjdHMsIEFy
Z3VtZW50cy4uLiBhcmd1bWVudHMpCi0gICAgICAgIDogVmFsdWUoaW5kZXgsIENoZWNrZWRPcGNv
ZGUsIENDYWxsLCB0eXBlLCBvcmlnaW4sIGFyZ3VtZW50cy4uLikKKyAgICBDQ2FsbFZhbHVlKFR5
cGUgdHlwZSwgT3JpZ2luIG9yaWdpbiwgY29uc3QgRWZmZWN0cyYgZWZmZWN0cywgQXJndW1lbnRz
Li4uIGFyZ3VtZW50cykKKyAgICAgICAgOiBWYWx1ZShDaGVja2VkT3Bjb2RlLCBDQ2FsbCwgdHlw
ZSwgb3JpZ2luLCBhcmd1bWVudHMuLi4pCiAgICAgICAgICwgZWZmZWN0cyhlZmZlY3RzKQogICAg
IHsKICAgICAgICAgUkVMRUFTRV9BU1NFUlQobnVtQ2hpbGRyZW4oKSA+PSAxKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrVmFsdWUuY3BwCShyZXZpc2lvbiAxOTU5NzAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1ZhbHVlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDYsOCArNDYsOCBAQCBWYWx1ZSogQ2hlY2tWYWx1ZTo6Y2xvbmVJbXBsKCkgY29u
c3QKIH0KIAogLy8gVXNlIHRoaXMgZm9ybSBmb3IgQ2hlY2tBZGQsIENoZWNrU3ViLCBhbmQgQ2hl
Y2tNdWwuCi1DaGVja1ZhbHVlOjpDaGVja1ZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bj
b2RlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0KQotICAgIDogU3Rh
Y2ttYXBWYWx1ZShpbmRleCwgQ2hlY2tlZE9wY29kZSwgb3Bjb2RlLCBsZWZ0LT50eXBlKCksIG9y
aWdpbikKK0NoZWNrVmFsdWU6OkNoZWNrVmFsdWUoT3Bjb2RlIG9wY29kZSwgT3JpZ2luIG9yaWdp
biwgVmFsdWUqIGxlZnQsIFZhbHVlKiByaWdodCkKKyAgICA6IFN0YWNrbWFwVmFsdWUoQ2hlY2tl
ZE9wY29kZSwgb3Bjb2RlLCBsZWZ0LT50eXBlKCksIG9yaWdpbikKIHsKICAgICBBU1NFUlQoQjM6
OmlzSW50KHR5cGUoKSkpOwogICAgIEFTU0VSVChsZWZ0LT50eXBlKCkgPT0gcmlnaHQtPnR5cGUo
KSk7CkBAIC01Nyw4ICs1Nyw4IEBAIENoZWNrVmFsdWU6OkNoZWNrVmFsdWUodW5zaWduZWQgaW5k
ZXgsIE8KIH0KIAogLy8gVXNlIHRoaXMgZm9ybSBmb3IgQ2hlY2suCi1DaGVja1ZhbHVlOjpDaGVj
a1ZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBPcmlnaW4gb3JpZ2luLCBWYWx1
ZSogcHJlZGljYXRlKQotICAgIDogU3RhY2ttYXBWYWx1ZShpbmRleCwgQ2hlY2tlZE9wY29kZSwg
b3Bjb2RlLCBWb2lkLCBvcmlnaW4pCitDaGVja1ZhbHVlOjpDaGVja1ZhbHVlKE9wY29kZSBvcGNv
ZGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBwcmVkaWNhdGUpCisgICAgOiBTdGFja21hcFZhbHVl
KENoZWNrZWRPcGNvZGUsIG9wY29kZSwgVm9pZCwgb3JpZ2luKQogewogICAgIEFTU0VSVChvcGNv
ZGUgPT0gQ2hlY2spOwogICAgIGFwcGVuZChDb25zdHJhaW5lZFZhbHVlKHByZWRpY2F0ZSwgVmFs
dWVSZXA6Oldhcm1BbnkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNr
VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1Zh
bHVlLmgJKHJldmlzaW9uIDE5NTk3MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0No
ZWNrVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtNTgsMTAgKzU4LDEwIEBAIHByaXZhdGU6CiAg
ICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKIAogICAgIC8vIFVzZSB0aGlzIGZvcm0gZm9yIENo
ZWNrQWRkLCBDaGVja1N1YiwgYW5kIENoZWNrTXVsLgotICAgIEpTX0VYUE9SVF9QUklWQVRFIENo
ZWNrVmFsdWUodW5zaWduZWQgaW5kZXgsIE9wY29kZSwgT3JpZ2luLCBWYWx1ZSogbGVmdCwgVmFs
dWUqIHJpZ2h0KTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBDaGVja1ZhbHVlKE9wY29kZSwgT3Jp
Z2luLCBWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0KTsKIAogICAgIC8vIFVzZSB0aGlzIGZvcm0g
Zm9yIENoZWNrLgotICAgIEpTX0VYUE9SVF9QUklWQVRFIENoZWNrVmFsdWUodW5zaWduZWQgaW5k
ZXgsIE9wY29kZSwgT3JpZ2luLCBWYWx1ZSogcHJlZGljYXRlKTsKKyAgICBKU19FWFBPUlRfUFJJ
VkFURSBDaGVja1ZhbHVlKE9wY29kZSwgT3JpZ2luLCBWYWx1ZSogcHJlZGljYXRlKTsKIH07CiAK
IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzQ29uc3QzMlZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzQ29uc3QzMlZhbHVlLmgJKHJldmlzaW9uIDE5NTk3MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0NvbnN0MzJWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03Nyw4ICs3Nyw4IEBA
IHByb3RlY3RlZDoKIAogICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7CiAKLSAgICBDb25zdDMy
VmFsdWUodW5zaWduZWQgaW5kZXgsIE9yaWdpbiBvcmlnaW4sIGludDMyX3QgdmFsdWUpCi0gICAg
ICAgIDogVmFsdWUoaW5kZXgsIENoZWNrZWRPcGNvZGUsIENvbnN0MzIsIEludDMyLCBvcmlnaW4p
CisgICAgQ29uc3QzMlZhbHVlKE9yaWdpbiBvcmlnaW4sIGludDMyX3QgdmFsdWUpCisgICAgICAg
IDogVmFsdWUoQ2hlY2tlZE9wY29kZSwgQ29uc3QzMiwgSW50MzIsIG9yaWdpbikKICAgICAgICAg
LCBtX3ZhbHVlKHZhbHVlKQogICAgIHsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNDb25zdDY0VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNDb25zdDY0VmFsdWUuaAkocmV2aXNpb24gMTk1OTcwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzQ29uc3Q2NFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTc3LDggKzc3
LDggQEAgcHJvdGVjdGVkOgogCiAgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKIAotICAgIENv
bnN0NjRWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3JpZ2luIG9yaWdpbiwgaW50NjRfdCB2YWx1ZSkK
LSAgICAgICAgOiBWYWx1ZShpbmRleCwgQ2hlY2tlZE9wY29kZSwgQ29uc3Q2NCwgSW50NjQsIG9y
aWdpbikKKyAgICBDb25zdDY0VmFsdWUoT3JpZ2luIG9yaWdpbiwgaW50NjRfdCB2YWx1ZSkKKyAg
ICAgICAgOiBWYWx1ZShDaGVja2VkT3Bjb2RlLCBDb25zdDY0LCBJbnQ2NCwgb3JpZ2luKQogICAg
ICAgICAsIG1fdmFsdWUodmFsdWUpCiAgICAgewogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM0NvbnN0RG91YmxlVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNDb25zdERvdWJsZVZhbHVlLmgJKHJldmlzaW9uIDE5NTk3MCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0RG91YmxlVmFsdWUuaAkod29ya2luZyBj
b3B5KQpAQCAtNzAsOCArNzAsOCBAQCBwcm90ZWN0ZWQ6CiBwcml2YXRlOgogICAgIGZyaWVuZCBj
bGFzcyBQcm9jZWR1cmU7CiAKLSAgICBDb25zdERvdWJsZVZhbHVlKHVuc2lnbmVkIGluZGV4LCBP
cmlnaW4gb3JpZ2luLCBkb3VibGUgdmFsdWUpCi0gICAgICAgIDogVmFsdWUoaW5kZXgsIENoZWNr
ZWRPcGNvZGUsIENvbnN0RG91YmxlLCBEb3VibGUsIG9yaWdpbikKKyAgICBDb25zdERvdWJsZVZh
bHVlKE9yaWdpbiBvcmlnaW4sIGRvdWJsZSB2YWx1ZSkKKyAgICAgICAgOiBWYWx1ZShDaGVja2Vk
T3Bjb2RlLCBDb25zdERvdWJsZSwgRG91YmxlLCBvcmlnaW4pCiAgICAgICAgICwgbV92YWx1ZSh2
YWx1ZSkKICAgICB7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29u
c3RGbG9hdFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
Q29uc3RGbG9hdFZhbHVlLmgJKHJldmlzaW9uIDE5NTk3MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0NvbnN0RmxvYXRWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02OCw4ICs2OCw4
IEBAIHByb3RlY3RlZDoKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKIAot
ICAgIENvbnN0RmxvYXRWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3JpZ2luIG9yaWdpbiwgZmxvYXQg
dmFsdWUpCi0gICAgICAgIDogVmFsdWUoaW5kZXgsIENoZWNrZWRPcGNvZGUsIENvbnN0RmxvYXQs
IEZsb2F0LCBvcmlnaW4pCisgICAgQ29uc3RGbG9hdFZhbHVlKE9yaWdpbiBvcmlnaW4sIGZsb2F0
IHZhbHVlKQorICAgICAgICA6IFZhbHVlKENoZWNrZWRPcGNvZGUsIENvbnN0RmxvYXQsIEZsb2F0
LCBvcmlnaW4pCiAgICAgICAgICwgbV92YWx1ZSh2YWx1ZSkKICAgICB7CiAgICAgfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3RQdHJWYWx1ZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0UHRyVmFsdWUuaAkocmV2aXNpb24gMTk1
OTcwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3RQdHJWYWx1ZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTU0LDEzICs1NCwxMyBAQCBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBQcm9j
ZWR1cmU7CiAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAgIENvbnN0UHRyVmFsdWUodW5z
aWduZWQgaW5kZXgsIE9yaWdpbiBvcmlnaW4sIFQqIHBvaW50ZXIpCi0gICAgICAgIDogQ29uc3RQ
dHJWYWx1ZUJhc2UoaW5kZXgsIG9yaWdpbiwgYml0d2lzZV9jYXN0PGludHB0cl90Pihwb2ludGVy
KSkKKyAgICBDb25zdFB0clZhbHVlKE9yaWdpbiBvcmlnaW4sIFQqIHBvaW50ZXIpCisgICAgICAg
IDogQ29uc3RQdHJWYWx1ZUJhc2Uob3JpZ2luLCBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KHBvaW50
ZXIpKQogICAgIHsKICAgICB9CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBDb25zdFB0
clZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcmlnaW4gb3JpZ2luLCBUIHBvaW50ZXIpCi0gICAgICAg
IDogQ29uc3RQdHJWYWx1ZUJhc2UoaW5kZXgsIG9yaWdpbiwgc3RhdGljX2Nhc3Q8aW50cHRyX3Q+
KHBvaW50ZXIpKQorICAgIENvbnN0UHRyVmFsdWUoT3JpZ2luIG9yaWdpbiwgVCBwb2ludGVyKQor
ICAgICAgICA6IENvbnN0UHRyVmFsdWVCYXNlKG9yaWdpbiwgc3RhdGljX2Nhc3Q8aW50cHRyX3Q+
KHBvaW50ZXIpKQogICAgIHsKICAgICB9CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzQ29udHJvbFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNDb250cm9sVmFsdWUuY3BwCShyZXZpc2lvbiAxOTU5NzApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNDb250cm9sVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OSw5
ICs1OSwxMCBAQCB2b2lkIENvbnRyb2xWYWx1ZTo6Y29udmVydFRvSnVtcChCYXNpY0JsCiAKICAg
ICB0aGlzLT5Db250cm9sVmFsdWU6On5Db250cm9sVmFsdWUoKTsKIAotICAgIG5ldyAodGhpcykg
Q29udHJvbFZhbHVlKGluZGV4LCBKdW1wLCBvcmlnaW4sIEZyZXF1ZW50ZWRCbG9jayhkZXN0aW5h
dGlvbikpOworICAgIG5ldyAodGhpcykgQ29udHJvbFZhbHVlKEp1bXAsIG9yaWdpbiwgRnJlcXVl
bnRlZEJsb2NrKGRlc3RpbmF0aW9uKSk7CiAKICAgICB0aGlzLT5vd25lciA9IG93bmVyOworICAg
IHRoaXMtPm1faW5kZXggPSBpbmRleDsKIH0KIAogdm9pZCBDb250cm9sVmFsdWU6OmNvbnZlcnRU
b09vcHMoKQpAQCAtNzIsOSArNzMsMTAgQEAgdm9pZCBDb250cm9sVmFsdWU6OmNvbnZlcnRUb09v
cHMoKQogCiAgICAgdGhpcy0+Q29udHJvbFZhbHVlOjp+Q29udHJvbFZhbHVlKCk7CiAKLSAgICBu
ZXcgKHRoaXMpIENvbnRyb2xWYWx1ZShpbmRleCwgT29wcywgb3JpZ2luKTsKKyAgICBuZXcgKHRo
aXMpIENvbnRyb2xWYWx1ZShPb3BzLCBvcmlnaW4pOwogCiAgICAgdGhpcy0+b3duZXIgPSBvd25l
cjsKKyAgICB0aGlzLT5tX2luZGV4ID0gaW5kZXg7CiB9CiAKIHZvaWQgQ29udHJvbFZhbHVlOjpk
dW1wTWV0YShDb21tYVByaW50ZXImIGNvbW1hLCBQcmludFN0cmVhbSYgb3V0KSBjb25zdApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29udHJvbFZhbHVlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29udHJvbFZhbHVlLmgJKHJldmlzaW9uIDE5
NTk3MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnRyb2xWYWx1ZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMDksOCArMTA5LDggQEAgcHJvdGVjdGVkOgogCiAgICAgLy8gVXNlIHRo
aXMgZm9yIHN1YmNsYXNzZXMuCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgot
ICAgIENvbnRyb2xWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgVHlwZSB0eXBl
LCBPcmlnaW4gb3JpZ2luLCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQotICAgICAgICA6IFZhbHVl
KGluZGV4LCBDaGVja2VkT3Bjb2RlLCBvcGNvZGUsIHR5cGUsIG9yaWdpbiwgYXJndW1lbnRzLi4u
KQorICAgIENvbnRyb2xWYWx1ZShPcGNvZGUgb3Bjb2RlLCBUeXBlIHR5cGUsIE9yaWdpbiBvcmln
aW4sIEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCisgICAgICAgIDogVmFsdWUoQ2hlY2tlZE9wY29k
ZSwgb3Bjb2RlLCB0eXBlLCBvcmlnaW4sIGFyZ3VtZW50cy4uLikKICAgICB7CiAgICAgICAgIEFT
U0VSVChhY2NlcHRzKG9wY29kZSkpOwogICAgIH0KQEAgLTEyMiwyMiArMTIyLDIyIEBAIHByaXZh
dGU6CiAgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKIAogICAgIC8vIFVzZSB0aGlzIGZvciBP
b3BzLgotICAgIENvbnRyb2xWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgT3Jp
Z2luIG9yaWdpbikKLSAgICAgICAgOiBWYWx1ZShpbmRleCwgQ2hlY2tlZE9wY29kZSwgb3Bjb2Rl
LCBWb2lkLCBvcmlnaW4pCisgICAgQ29udHJvbFZhbHVlKE9wY29kZSBvcGNvZGUsIE9yaWdpbiBv
cmlnaW4pCisgICAgICAgIDogVmFsdWUoQ2hlY2tlZE9wY29kZSwgb3Bjb2RlLCBWb2lkLCBvcmln
aW4pCiAgICAgewogICAgICAgICBBU1NFUlQob3Bjb2RlID09IE9vcHMpOwogICAgIH0KIAogICAg
IC8vIFVzZSB0aGlzIGZvciBSZXR1cm4uCi0gICAgQ29udHJvbFZhbHVlKHVuc2lnbmVkIGluZGV4
LCBPcGNvZGUgb3Bjb2RlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogcmVzdWx0KQotICAgICAgICA6
IFZhbHVlKGluZGV4LCBDaGVja2VkT3Bjb2RlLCBvcGNvZGUsIFZvaWQsIG9yaWdpbiwgcmVzdWx0
KQorICAgIENvbnRyb2xWYWx1ZShPcGNvZGUgb3Bjb2RlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSog
cmVzdWx0KQorICAgICAgICA6IFZhbHVlKENoZWNrZWRPcGNvZGUsIG9wY29kZSwgVm9pZCwgb3Jp
Z2luLCByZXN1bHQpCiAgICAgewogICAgICAgICBBU1NFUlQob3Bjb2RlID09IFJldHVybik7CiAg
ICAgfQogCiAgICAgLy8gVXNlIHRoaXMgZm9yIEp1bXAuCi0gICAgQ29udHJvbFZhbHVlKHVuc2ln
bmVkIGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBPcmlnaW4gb3JpZ2luLCBjb25zdCBGcmVxdWVudGVk
QmxvY2smIHRhcmdldCkKLSAgICAgICAgOiBWYWx1ZShpbmRleCwgQ2hlY2tlZE9wY29kZSwgb3Bj
b2RlLCBWb2lkLCBvcmlnaW4pCisgICAgQ29udHJvbFZhbHVlKE9wY29kZSBvcGNvZGUsIE9yaWdp
biBvcmlnaW4sIGNvbnN0IEZyZXF1ZW50ZWRCbG9jayYgdGFyZ2V0KQorICAgICAgICA6IFZhbHVl
KENoZWNrZWRPcGNvZGUsIG9wY29kZSwgVm9pZCwgb3JpZ2luKQogICAgIHsKICAgICAgICAgQVNT
RVJUKG9wY29kZSA9PSBKdW1wKTsKICAgICAgICAgbV9zdWNjZXNzb3JzLmFwcGVuZCh0YXJnZXQp
OwpAQCAtMTQ1LDkgKzE0NSw5IEBAIHByaXZhdGU6CiAKICAgICAvLyBVc2UgdGhpcyBmb3IgQnJh
bmNoLgogICAgIENvbnRyb2xWYWx1ZSgKLSAgICAgICAgdW5zaWduZWQgaW5kZXgsIE9wY29kZSBv
cGNvZGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBwcmVkaWNhdGUsCisgICAgICAgIE9wY29kZSBv
cGNvZGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBwcmVkaWNhdGUsCiAgICAgICAgIGNvbnN0IEZy
ZXF1ZW50ZWRCbG9jayYgeWVzLCBjb25zdCBGcmVxdWVudGVkQmxvY2smIG5vKQotICAgICAgICA6
IFZhbHVlKGluZGV4LCBDaGVja2VkT3Bjb2RlLCBvcGNvZGUsIFZvaWQsIG9yaWdpbiwgcHJlZGlj
YXRlKQorICAgICAgICA6IFZhbHVlKENoZWNrZWRPcGNvZGUsIG9wY29kZSwgVm9pZCwgb3JpZ2lu
LCBwcmVkaWNhdGUpCiAgICAgewogICAgICAgICBBU1NFUlQob3Bjb2RlID09IEJyYW5jaCk7CiAg
ICAgICAgIG1fc3VjY2Vzc29ycy5hcHBlbmQoeWVzKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0VmZmVjdHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0VmZmVjdHMuY3BwCShyZXZpc2lvbiAxOTU5NzApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNFZmZlY3RzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsNyArNDQsNyBAQCBi
b29sIGludGVyZmVyZXNXaXRoVGVybWluYWwoY29uc3QgRWZmZWN0CiB7CiAgICAgaWYgKCF0ZXJt
aW5hbC50ZXJtaW5hbCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBvdGhlci50
ZXJtaW5hbCB8fCBvdGhlci5jb250cm9sRGVwZW5kZW50IHx8IG90aGVyLndyaXRlc1NTQVN0YXRl
IHx8IG90aGVyLndyaXRlczsKKyAgICByZXR1cm4gb3RoZXIudGVybWluYWwgfHwgb3RoZXIuY29u
dHJvbERlcGVuZGVudCB8fCBvdGhlci53cml0ZXNMb2NhbFN0YXRlIHx8IG90aGVyLndyaXRlczsK
IH0KIAogYm9vbCBpbnRlcmZlcmVzV2l0aEV4aXRTaWRld2F5cyhjb25zdCBFZmZlY3RzJiBleGl0
c1NpZGV3YXlzLCBjb25zdCBFZmZlY3RzJiBvdGhlcikKQEAgLTU0LDExICs1NCwxMSBAQCBib29s
IGludGVyZmVyZXNXaXRoRXhpdFNpZGV3YXlzKGNvbnN0IEVmCiAgICAgcmV0dXJuIG90aGVyLmNv
bnRyb2xEZXBlbmRlbnQgfHwgb3RoZXIud3JpdGVzOwogfQogCi1ib29sIGludGVyZmVyZXNXaXRo
V3JpdGVzU1NBU3RhdGUoY29uc3QgRWZmZWN0cyYgd3JpdGVzU1NBU3RhdGUsIGNvbnN0IEVmZmVj
dHMmIG90aGVyKQorYm9vbCBpbnRlcmZlcmVzV2l0aFdyaXRlc0xvY2FsU3RhdGUoY29uc3QgRWZm
ZWN0cyYgd3JpdGVzTG9jYWxTdGF0ZSwgY29uc3QgRWZmZWN0cyYgb3RoZXIpCiB7Ci0gICAgaWYg
KCF3cml0ZXNTU0FTdGF0ZS53cml0ZXNTU0FTdGF0ZSkKKyAgICBpZiAoIXdyaXRlc0xvY2FsU3Rh
dGUud3JpdGVzTG9jYWxTdGF0ZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBv
dGhlci53cml0ZXNTU0FTdGF0ZSB8fCBvdGhlci5yZWFkc1NTQVN0YXRlOworICAgIHJldHVybiBv
dGhlci53cml0ZXNMb2NhbFN0YXRlIHx8IG90aGVyLnJlYWRzTG9jYWxTdGF0ZTsKIH0KIAogfSAv
LyBhbm9ueW1vdXMgbmFtZXNwYWNlCkBAIC02OSw3ICs2OSw3IEBAIGJvb2wgRWZmZWN0czo6aW50
ZXJmZXJlcyhjb25zdCBFZmZlY3RzJiAKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgaWYgKGlu
dGVyZmVyZXNXaXRoRXhpdFNpZGV3YXlzKCp0aGlzLCBvdGhlcikgfHwgaW50ZXJmZXJlc1dpdGhF
eGl0U2lkZXdheXMob3RoZXIsICp0aGlzKSkKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgaWYg
KGludGVyZmVyZXNXaXRoV3JpdGVzU1NBU3RhdGUoKnRoaXMsIG90aGVyKSB8fCBpbnRlcmZlcmVz
V2l0aFdyaXRlc1NTQVN0YXRlKG90aGVyLCAqdGhpcykpCisgICAgaWYgKGludGVyZmVyZXNXaXRo
V3JpdGVzTG9jYWxTdGF0ZSgqdGhpcywgb3RoZXIpIHx8IGludGVyZmVyZXNXaXRoV3JpdGVzTG9j
YWxTdGF0ZShvdGhlciwgKnRoaXMpKQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICByZXR1cm4g
d3JpdGVzLm92ZXJsYXBzKG90aGVyLndyaXRlcykKICAgICAgICAgfHwgd3JpdGVzLm92ZXJsYXBz
KG90aGVyLnJlYWRzKQpAQCAtODUsMTAgKzg1LDEwIEBAIHZvaWQgRWZmZWN0czo6ZHVtcChQcmlu
dFN0cmVhbSYgb3V0KSBjb24KICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiRXhpdHNTaWRld2F5
cyIpOwogICAgIGlmIChjb250cm9sRGVwZW5kZW50KQogICAgICAgICBvdXQucHJpbnQoY29tbWEs
ICJDb250cm9sRGVwZW5kZW50Iik7Ci0gICAgaWYgKHdyaXRlc1NTQVN0YXRlKQotICAgICAgICBv
dXQucHJpbnQoY29tbWEsICJXcml0ZXNTU0FTdGF0ZSIpOwotICAgIGlmIChyZWFkc1NTQVN0YXRl
KQotICAgICAgICBvdXQucHJpbnQoY29tbWEsICJSZWFkc1NTQVN0YXRlIik7CisgICAgaWYgKHdy
aXRlc0xvY2FsU3RhdGUpCisgICAgICAgIG91dC5wcmludChjb21tYSwgIldyaXRlc0xvY2FsU3Rh
dGUiKTsKKyAgICBpZiAocmVhZHNMb2NhbFN0YXRlKQorICAgICAgICBvdXQucHJpbnQoY29tbWEs
ICJSZWFkc0xvY2FsU3RhdGUiKTsKICAgICBpZiAod3JpdGVzKQogICAgICAgICBvdXQucHJpbnQo
Y29tbWEsICJXcml0ZXM6Iiwgd3JpdGVzKTsKICAgICBpZiAocmVhZHMpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNFZmZlY3RzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzRWZmZWN0cy5oCShyZXZpc2lvbiAxOTU5NzApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNFZmZlY3RzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDE0ICs0OCwx
NCBAQCBzdHJ1Y3QgRWZmZWN0cyB7CiAgICAgLy8gVHJ1ZSBpZiB0aGUgaW5zdHJ1Y3Rpb24gbWF5
IGNoYW5nZSBzZW1hbnRpY3MgaWYgaG9pc3RlZCBhYm92ZSBzb21lIGNvbnRyb2wgZmxvdy4KICAg
ICBib29sIGNvbnRyb2xEZXBlbmRlbnQgeyBmYWxzZSB9OwogCi0gICAgLy8gVHJ1ZSBpZiB0aGlz
IHdyaXRlcyB0byB0aGUgU1NBIHN0YXRlLiBPcGVyYXRpb25zIHRoYXQgd3JpdGUgU1NBIHN0YXRl
IGRvbid0IHdyaXRlIHRvIGFueXRoaW5nCi0gICAgLy8gaW4gIm1lbW9yeSIgYnV0IHRoZXkgaGF2
ZSBhIHNpZGUtZWZmZWN0IGFueXdheS4gVGhpcyBpcyBmb3IgbW9kZWxpbmcgVXBzaWxvbnMuIFlv
dSBjYW4gaWdub3JlCi0gICAgLy8gdGhpcyBpZiB5b3UgaGF2ZSB5b3VyIG93biB3YXkgb2YgbW9k
ZWxpbmcgVXBzaWxvbnMgb3IgaWYgeW91IGludGVuZCB0byBqdXN0IHJlYnVpbGQgdGhlbQorICAg
IC8vIFRydWUgaWYgdGhpcyB3cml0ZXMgdG8gdGhlIGxvY2FsIHN0YXRlLiBPcGVyYXRpb25zIHRo
YXQgd3JpdGUgbG9jYWwgc3RhdGUgZG9uJ3Qgd3JpdGUgdG8gYW55dGhpbmcKKyAgICAvLyBpbiAi
bWVtb3J5IiBidXQgdGhleSBoYXZlIGEgc2lkZS1lZmZlY3QgYW55d2F5LiBUaGlzIGlzIGZvciBt
b2RlbGluZyBVcHNpbG9ucyBhbmQgU2V0cy4gWW91IGNhbiBpZ25vcmUKKyAgICAvLyB0aGlzIGlm
IHlvdSBoYXZlIHlvdXIgb3duIHdheSBvZiBtb2RlbGluZyBVcHNpbG9ucyBhbmQgU2V0cyBvciBp
ZiB5b3UgaW50ZW5kIHRvIGp1c3QgcmVidWlsZCB0aGVtCiAgICAgLy8gYW55d2F5LgotICAgIGJv
b2wgd3JpdGVzU1NBU3RhdGUgeyBmYWxzZSB9OworICAgIGJvb2wgd3JpdGVzTG9jYWxTdGF0ZSB7
IGZhbHNlIH07CiAKLSAgICAvLyBUcnVlIGlmIHRoaXMgcmVhZHMgZnJvbSB0aGUgU1NBIHN0YXRl
LiBUaGlzIGlzIG9ubHkgdXNlZCBmb3IgUGhpLgotICAgIGJvb2wgcmVhZHNTU0FTdGF0ZSB7IGZh
bHNlIH07CisgICAgLy8gVHJ1ZSBpZiB0aGlzIHJlYWRzIGZyb20gdGhlIGxvY2FsIHN0YXRlLiBU
aGlzIGlzIG9ubHkgdXNlZCBmb3IgUGhpIGFuZCBHZXQuCisgICAgYm9vbCByZWFkc0xvY2FsU3Rh
dGUgeyBmYWxzZSB9OwogCiAgICAgSGVhcFJhbmdlIHdyaXRlczsKICAgICBIZWFwUmFuZ2UgcmVh
ZHM7CkBAIC03Nyw3ICs3Nyw3IEBAIHN0cnVjdCBFZmZlY3RzIHsKIAogICAgIGJvb2wgbXVzdEV4
ZWN1dGUoKSBjb25zdAogICAgIHsKLSAgICAgICAgcmV0dXJuIHRlcm1pbmFsIHx8IGV4aXRzU2lk
ZXdheXMgfHwgd3JpdGVzU1NBU3RhdGUgfHwgd3JpdGVzOworICAgICAgICByZXR1cm4gdGVybWlu
YWwgfHwgZXhpdHNTaWRld2F5cyB8fCB3cml0ZXNMb2NhbFN0YXRlIHx8IHdyaXRlczsKICAgICB9
CiAKICAgICAvLyBSZXR1cm5zIHRydWUgaWYgcmVvcmRlcmluZyBpbnN0cnVjdGlvbnMgd2l0aCB0
aGVzZSByZXNwZWN0aXZlIGVmZmVjdHMgd291bGQgY2hhbmdlIHByb2dyYW0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0VsaW1pbmF0ZUNvbW1vblN1YmV4cHJlc3Npb25zLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNFbGltaW5hdGVDb21tb25T
dWJleHByZXNzaW9ucy5jcHAJKHJldmlzaW9uIDE5NTk3MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0VsaW1pbmF0ZUNvbW1vblN1YmV4cHJlc3Npb25zLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTMxLDEyICsxMzEsMTAgQEAgcHVibGljOgogICAgICAgICAgICAgbV9pbXB1cmVCbG9j
a0RhdGFbbV9ibG9ja10gPSBtX2RhdGE7CiAgICAgICAgIH0KIAotICAgICAgICBmb3IgKFNsb3RC
YXNlVmFsdWUqIHN0YWNrIDogbV9zdGFja3MpCi0gICAgICAgICAgICBtX2luc2VydGlvblNldC5p
bnNlcnRWYWx1ZSgwLCBzdGFjayk7CiAgICAgICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBt
X3Byb2MpIHsKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgdmFsdWVJbmRleCA9IDA7IHZhbHVl
SW5kZXggPCBibG9jay0+c2l6ZSgpOyArK3ZhbHVlSW5kZXgpIHsKLSAgICAgICAgICAgICAgICBh
dXRvIGl0ZXIgPSBtX3N0b3Jlcy5maW5kKGJsb2NrLT5hdCh2YWx1ZUluZGV4KSk7Ci0gICAgICAg
ICAgICAgICAgaWYgKGl0ZXIgPT0gbV9zdG9yZXMuZW5kKCkpCisgICAgICAgICAgICAgICAgYXV0
byBpdGVyID0gbV9zZXRzLmZpbmQoYmxvY2stPmF0KHZhbHVlSW5kZXgpKTsKKyAgICAgICAgICAg
ICAgICBpZiAoaXRlciA9PSBtX3NldHMuZW5kKCkpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwogCiAgICAgICAgICAgICAgICAgZm9yIChWYWx1ZSogdmFsdWUgOiBpdGVyLT52YWx1ZSkK
QEAgLTM2OSwyMSArMzY3LDE5IEBAIHByaXZhdGU6CiAgICAgICAgIC8vIEZJWE1FOiBJdCB3b3Vs
ZCBiZSB3YXkgYmV0dGVyIGlmIHRoaXMgcGhhc2UganVzdCBkaWQgU1NBIGNhbGN1bGF0aW9uIGRp
cmVjdGx5LgogICAgICAgICAvLyBSaWdodCBub3cgd2UncmUgcmVseWluZyBvbiB0aGUgZmFjdCB0
aGF0IENTRSdzIHBvc2l0aW9uIGluIHRoZSBwaGFzZSBvcmRlciBpcwogICAgICAgICAvLyBhbG1v
c3QgcmlnaHQgYmVmb3JlIFNTQSBmaXh1cC4KLSAgICAgICAgICAgIAotICAgICAgICBTbG90QmFz
ZVZhbHVlKiBzdGFjayA9IG1fcHJvYy5hZGQ8U2xvdEJhc2VWYWx1ZT4oCi0gICAgICAgICAgICBt
X3ZhbHVlLT5vcmlnaW4oKSwgbV9wcm9jLmFkZEFub255bW91c1N0YWNrU2xvdChtX3ZhbHVlLT50
eXBlKCkpKTsKLSAgICAgICAgbV9zdGFja3MuYXBwZW5kKHN0YWNrKTsKIAotICAgICAgICBNZW1v
cnlWYWx1ZSogbG9hZCA9IG1faW5zZXJ0aW9uU2V0Lmluc2VydDxNZW1vcnlWYWx1ZT4oCi0gICAg
ICAgICAgICBtX2luZGV4LCBMb2FkLCBtX3ZhbHVlLT50eXBlKCksIG1fdmFsdWUtPm9yaWdpbigp
LCBzdGFjayk7CisgICAgICAgIFZhcmlhYmxlKiB2YXJpYWJsZSA9IG1fcHJvYy5hZGRWYXJpYWJs
ZShtX3ZhbHVlLT50eXBlKCkpOworCisgICAgICAgIFZhcmlhYmxlVmFsdWUqIGdldCA9IG1faW5z
ZXJ0aW9uU2V0Lmluc2VydDxWYXJpYWJsZVZhbHVlPigKKyAgICAgICAgICAgIG1faW5kZXgsIEdl
dCwgbV92YWx1ZS0+b3JpZ2luKCksIHZhcmlhYmxlKTsKICAgICAgICAgaWYgKHZlcmJvc2UpCi0g
ICAgICAgICAgICBkYXRhTG9nKCIgICAgSW5zZXJ0aW5nIGxvYWQgb2YgdmFsdWU6ICIsICpsb2Fk
LCAiXG4iKTsKLSAgICAgICAgbV92YWx1ZS0+cmVwbGFjZVdpdGhJZGVudGl0eShsb2FkKTsKKyAg
ICAgICAgICAgIGRhdGFMb2coIiAgICBJbnNlcnRpbmcgZ2V0IG9mIHZhbHVlOiAiLCAqZ2V0LCAi
XG4iKTsKKyAgICAgICAgbV92YWx1ZS0+cmVwbGFjZVdpdGhJZGVudGl0eShnZXQpOwogICAgICAg
ICAgICAgCiAgICAgICAgIGZvciAoTWVtb3J5VmFsdWUqIG1hdGNoIDogbWF0Y2hlcykgewotICAg
ICAgICAgICAgVmVjdG9yPFZhbHVlKj4mIHN0b3JlcyA9IG1fc3RvcmVzLmFkZChtYXRjaCwgVmVj
dG9yPFZhbHVlKj4oKSkuaXRlcmF0b3ItPnZhbHVlOworICAgICAgICAgICAgVmVjdG9yPFZhbHVl
Kj4mIHNldHMgPSBtX3NldHMuYWRkKG1hdGNoLCBWZWN0b3I8VmFsdWUqPigpKS5pdGVyYXRvci0+
dmFsdWU7CiAKLSAgICAgICAgICAgIFZhbHVlKiB2YWx1ZSA9IHJlcGxhY2UobWF0Y2gsIHN0b3Jl
cyk7CisgICAgICAgICAgICBWYWx1ZSogdmFsdWUgPSByZXBsYWNlKG1hdGNoLCBzZXRzKTsKICAg
ICAgICAgICAgIGlmICghdmFsdWUpIHsKICAgICAgICAgICAgICAgICBpZiAobWF0Y2gtPmlzU3Rv
cmUoKSkKICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBtYXRjaC0+Y2hpbGQoMCk7CkBAIC0z
OTEsOCArMzg3LDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgdmFsdWUgPSBtYXRj
aDsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgIFZhbHVlKiBz
dG9yZSA9IG1fcHJvYy5hZGQ8TWVtb3J5VmFsdWU+KFN0b3JlLCBtX3ZhbHVlLT5vcmlnaW4oKSwg
dmFsdWUsIHN0YWNrKTsKLSAgICAgICAgICAgIHN0b3Jlcy5hcHBlbmQoc3RvcmUpOworICAgICAg
ICAgICAgVmFsdWUqIHNldCA9IG1fcHJvYy5hZGQ8VmFyaWFibGVWYWx1ZT4oU2V0LCBtX3ZhbHVl
LT5vcmlnaW4oKSwgdmFyaWFibGUsIHZhbHVlKTsKKyAgICAgICAgICAgIHNldHMuYXBwZW5kKHNl
dCk7CiAgICAgICAgIH0KIAogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTQ5OSw4ICs0OTUsNyBA
QCBwcml2YXRlOgogICAgIHVuc2lnbmVkIG1faW5kZXg7CiAgICAgVmFsdWUqIG1fdmFsdWU7CiAK
LSAgICBWZWN0b3I8U2xvdEJhc2VWYWx1ZSo+IG1fc3RhY2tzOwotICAgIEhhc2hNYXA8VmFsdWUq
LCBWZWN0b3I8VmFsdWUqPj4gbV9zdG9yZXM7CisgICAgSGFzaE1hcDxWYWx1ZSosIFZlY3RvcjxW
YWx1ZSo+PiBtX3NldHM7CiAKICAgICBJbnNlcnRpb25TZXQgbV9pbnNlcnRpb25TZXQ7CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0ZpeFNTQS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRml4U1NBLmNwcAkocmV2aXNpb24gMTk1OTcwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRml4U1NBLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMzQsMTQgKzM0LDEyIEBACiAjaW5jbHVkZSAiQjNEb21pbmF0b3JzLmgiCiAjaW5jbHVkZSAi
QjNJbmRleFNldC5oIgogI2luY2x1ZGUgIkIzSW5zZXJ0aW9uU2V0SW5saW5lcy5oIgotI2luY2x1
ZGUgIkIzTWVtb3J5VmFsdWUuaCIKICNpbmNsdWRlICJCM1BoYXNlU2NvcGUuaCIKICNpbmNsdWRl
ICJCM1Byb2NlZHVyZUlubGluZXMuaCIKICNpbmNsdWRlICJCM1NTQUNhbGN1bGF0b3IuaCIKLSNp
bmNsdWRlICJCM1Nsb3RCYXNlVmFsdWUuaCIKLSNpbmNsdWRlICJCM1N0YWNrU2xvdC5oIgogI2lu
Y2x1ZGUgIkIzVXBzaWxvblZhbHVlLmgiCiAjaW5jbHVkZSAiQjNWYWx1ZUlubGluZXMuaCIKKyNp
bmNsdWRlICJCM1ZhcmlhYmxlVmFsdWUuaCIKICNpbmNsdWRlIDx3dGYvQ29tbWFQcmludGVyLmg+
CiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewpAQCAtNTIsMjMgKzUwLDE2IEBAIGNv
bnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOwogCiB2b2lkIGRlbW90ZVZhbHVlcyhQcm9jZWR1cmUm
IHByb2MsIGNvbnN0IEluZGV4U2V0PFZhbHVlPiYgdmFsdWVzKQogewotICAgIEhhc2hNYXA8VmFs
dWUqLCBTbG90QmFzZVZhbHVlKj4gbWFwOwotICAgIEhhc2hNYXA8VmFsdWUqLCBTbG90QmFzZVZh
bHVlKj4gcGhpTWFwOworICAgIEhhc2hNYXA8VmFsdWUqLCBWYXJpYWJsZSo+IG1hcDsKKyAgICBI
YXNoTWFwPFZhbHVlKiwgVmFyaWFibGUqPiBwaGlNYXA7CiAKICAgICAvLyBDcmVhdGUgc3RhY2sg
c2xvdHMuCi0gICAgSW5zZXJ0aW9uU2V0IGluc2VydGlvblNldChwcm9jKTsKICAgICBmb3IgKFZh
bHVlKiB2YWx1ZSA6IHZhbHVlcy52YWx1ZXMocHJvYy52YWx1ZXMoKSkpIHsKLSAgICAgICAgU2xv
dEJhc2VWYWx1ZSogc3RhY2sgPSBpbnNlcnRpb25TZXQuaW5zZXJ0PFNsb3RCYXNlVmFsdWU+KAot
ICAgICAgICAgICAgMCwgdmFsdWUtPm9yaWdpbigpLCBwcm9jLmFkZEFub255bW91c1N0YWNrU2xv
dCh2YWx1ZS0+dHlwZSgpKSk7Ci0gICAgICAgIG1hcC5hZGQodmFsdWUsIHN0YWNrKTsKLQotICAg
ICAgICBpZiAodmFsdWUtPm9wY29kZSgpID09IFBoaSkgewotICAgICAgICAgICAgU2xvdEJhc2VW
YWx1ZSogcGhpU3RhY2sgPSBpbnNlcnRpb25TZXQuaW5zZXJ0PFNsb3RCYXNlVmFsdWU+KAotICAg
ICAgICAgICAgICAgIDAsIHZhbHVlLT5vcmlnaW4oKSwgcHJvYy5hZGRBbm9ueW1vdXNTdGFja1Ns
b3QodmFsdWUtPnR5cGUoKSkpOwotICAgICAgICAgICAgcGhpTWFwLmFkZCh2YWx1ZSwgcGhpU3Rh
Y2spOwotICAgICAgICB9CisgICAgICAgIG1hcC5hZGQodmFsdWUsIG1fcHJvYy5hZGRWYXJpYWJs
ZSh2YWx1ZS0+dHlwZSgpKSk7CisKKyAgICAgICAgaWYgKHZhbHVlLT5vcGNvZGUoKSA9PSBQaGkp
CisgICAgICAgICAgICBwaGlNYXAuYWRkKHZhbHVlLCBtX3Byb2MuYWRkVmFyaWFibGUodmFsdWUt
PnR5cGUoKSkpOwogICAgIH0KLSAgICBpbnNlcnRpb25TZXQuZXhlY3V0ZShwcm9jWzBdKTsKIAog
ICAgIGlmICh2ZXJib3NlKSB7CiAgICAgICAgIGRhdGFMb2coIkRlbW90aW5nIHZhbHVlcyBhcyBm
b2xsb3dzOlxuIik7CkBAIC04NSwzNiArNzYsMzcgQEAgdm9pZCBkZW1vdGVWYWx1ZXMoUHJvY2Vk
dXJlJiBwcm9jLCBjb25zdAogICAgIH0KIAogICAgIC8vIENoYW5nZSBhY2Nlc3NlcyB0byB0aGUg
dmFsdWVzIHRvIGFjY2Vzc2VzIHRvIHRoZSBzdGFjayBzbG90cy4KKyAgICBJbnNlcnRpb25TZXQg
aW5zZXJ0aW9uU2V0KHByb2MpOwogICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBwcm9jKSB7
CiAgICAgICAgIGZvciAodW5zaWduZWQgdmFsdWVJbmRleCA9IDA7IHZhbHVlSW5kZXggPCBibG9j
ay0+c2l6ZSgpOyArK3ZhbHVlSW5kZXgpIHsKICAgICAgICAgICAgIFZhbHVlKiB2YWx1ZSA9IGJs
b2NrLT5hdCh2YWx1ZUluZGV4KTsKIAogICAgICAgICAgICAgaWYgKHZhbHVlLT5vcGNvZGUoKSA9
PSBQaGkpIHsKLSAgICAgICAgICAgICAgICBpZiAoU2xvdEJhc2VWYWx1ZSogc2xvdEJhc2UgPSBw
aGlNYXAuZ2V0KHZhbHVlKSkgeworICAgICAgICAgICAgICAgIGlmIChWYXJpYWJsZSogdmFyaWFi
bGUgPSBwaGlNYXAuZ2V0KHZhbHVlKSkgewogICAgICAgICAgICAgICAgICAgICB2YWx1ZS0+cmVw
bGFjZVdpdGhJZGVudGl0eSgKLSAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5p
bnNlcnQ8TWVtb3J5VmFsdWU+KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlSW5k
ZXgsIExvYWQsIHZhbHVlLT50eXBlKCksIHZhbHVlLT5vcmlnaW4oKSwgc2xvdEJhc2UpKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnQ8VmFyaWFibGVWYWx1ZT4o
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVJbmRleCwgR2V0LCB2YWx1ZS0+b3Jp
Z2luKCksIHZhcmlhYmxlKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNl
IHsKICAgICAgICAgICAgICAgICBmb3IgKFZhbHVlKiYgY2hpbGQgOiB2YWx1ZS0+Y2hpbGRyZW4o
KSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoU2xvdEJhc2VWYWx1ZSogc2xvdEJhc2UgPSBt
YXAuZ2V0KGNoaWxkKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGQgPSBpbnNlcnRp
b25TZXQuaW5zZXJ0PE1lbW9yeVZhbHVlPigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2
YWx1ZUluZGV4LCBMb2FkLCBjaGlsZC0+dHlwZSgpLCB2YWx1ZS0+b3JpZ2luKCksIHNsb3RCYXNl
KTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKFZhcmlhYmxlKiB2YXJpYWJsZSA9IG1hcC5nZXQo
Y2hpbGQpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBjaGlsZCA9IGluc2VydGlvblNldC5p
bnNlcnQ8VmFyaWFibGVWYWx1ZT4oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVJ
bmRleCwgR2V0LCB2YWx1ZS0+b3JpZ2luKCksIHZhcmlhYmxlKTsKICAgICAgICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAgICAgIGlmIChVcHNpbG9uVmFs
dWUqIHVwc2lsb24gPSB2YWx1ZS0+YXM8VXBzaWxvblZhbHVlPigpKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIGlmIChTbG90QmFzZVZhbHVlKiBzbG90QmFzZSA9IHBoaU1hcC5nZXQodXBzaWxvbi0+
cGhpKCkpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0PE1l
bW9yeVZhbHVlPigKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZUluZGV4LCBTdG9y
ZSwgdXBzaWxvbi0+b3JpZ2luKCksIHVwc2lsb24tPmNoaWxkKDApLCBzbG90QmFzZSk7CisgICAg
ICAgICAgICAgICAgICAgIGlmIChWYXJpYWJsZSogdmFyaWFibGUgPSBwaGlNYXAuZ2V0KHVwc2ls
b24tPnBoaSgpKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2Vy
dDxWYXJpYWJsZVZhbHVlPigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZUluZGV4
LCBTZXQsIHVwc2lsb24tPm9yaWdpbigpLCB2YXJpYWJsZSwgdXBzaWxvbi0+Y2hpbGQoMCkpOwog
ICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUtPnJlcGxhY2VXaXRoTm9wKCk7CiAgICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9CiAKLSAgICAg
ICAgICAgIGlmIChTbG90QmFzZVZhbHVlKiBzbG90QmFzZSA9IG1hcC5nZXQodmFsdWUpKSB7Ci0g
ICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydDxNZW1vcnlWYWx1ZT4oCi0gICAgICAg
ICAgICAgICAgICAgIHZhbHVlSW5kZXggKyAxLCBTdG9yZSwgdmFsdWUtPm9yaWdpbigpLCB2YWx1
ZSwgc2xvdEJhc2UpOworICAgICAgICAgICAgaWYgKFZhcmlhYmxlKiB2YXJpYWJsZSA9IG1hcC5n
ZXQodmFsdWUpKSB7CisgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydDxWYXJpYWJs
ZVZhbHVlPigKKyAgICAgICAgICAgICAgICAgICAgdmFsdWVJbmRleCArIDEsIFNldCwgdmFsdWUt
Pm9yaWdpbigpLCB2YXJpYWJsZSwgdmFsdWUpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAg
ICAgICAgIGluc2VydGlvblNldC5leGVjdXRlKGJsb2NrKTsKQEAgLTEyNCwxMjQgKzExNiw2MSBA
QCB2b2lkIGRlbW90ZVZhbHVlcyhQcm9jZWR1cmUmIHByb2MsIGNvbnN0CiBib29sIGZpeFNTQShQ
cm9jZWR1cmUmIHByb2MpCiB7CiAgICAgUGhhc2VTY29wZSBwaGFzZVNjb3BlKHByb2MsICJmaXhT
U0EiKTsKLSAgICAKLSAgICAvLyBDb2xsZWN0IHRoZSBzdGFjayAidmFyaWFibGVzIi4gSWYgdGhl
cmUgYXJlbid0IGFueSwgdGhlbiB3ZSBkb24ndCBoYXZlIGFueXRoaW5nIHRvIGRvLgotICAgIC8v
IFRoYXQncyBhIGZhaXJseSBjb21tb24gY2FzZS4KLSAgICBIYXNoTWFwPFN0YWNrU2xvdCosIFR5
cGU+IHN0YWNrVmFyaWFibGU7Ci0gICAgZm9yIChWYWx1ZSogdmFsdWUgOiBwcm9jLnZhbHVlcygp
KSB7Ci0gICAgICAgIGlmIChTbG90QmFzZVZhbHVlKiBzbG90QmFzZSA9IHZhbHVlLT5hczxTbG90
QmFzZVZhbHVlPigpKSB7Ci0gICAgICAgICAgICBTdGFja1Nsb3QqIHN0YWNrID0gc2xvdEJhc2Ut
PnNsb3QoKTsKLSAgICAgICAgICAgIGlmIChzdGFjay0+a2luZCgpID09IFN0YWNrU2xvdEtpbmQ6
OkFub255bW91cykKLSAgICAgICAgICAgICAgICBzdGFja1ZhcmlhYmxlLmFkZChzdGFjaywgVm9p
ZCk7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZiAoc3RhY2tWYXJpYWJsZS5pc0VtcHR5KCkp
Ci0gICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHdlIGtub3cg
aG93IHRvIG9wdGltaXplIGFsbCBvZiB0aGVzZS4gV2Ugb25seSBrbm93IGhvdyB0byBoYW5kbGUg
TG9hZCBhbmQKLSAgICAvLyBTdG9yZSBvbiBhbm9ueW1vdXMgdmFyaWFibGVzLgorICAgIC8vIEp1
c3QgZm9yIHNhbml0eSwgcmVtb3ZlIGFueSB1bnVzZWQgdmFyaWFibGVzIGZpcnN0LiBJdCdzIHVu
bGlrZWx5IHRoYXQgdGhpcyBjb2RlIGhhcyBhbnkKKyAgICAvLyBidWdzIGhhdmluZyB0byBkbyB3
aXRoIGRlYWQgdmFyaWFibGVzLCBidXQgaXQgd291bGQgYmUgc2lsbHkgdG8gaGF2ZSB0byBmaXgg
c3VjaCBhIGJ1ZyBpZgorICAgIC8vIGl0IGRpZCBhcmlzZS4KKyAgICBJbmRleFNldDxWYXJpYWJs
ZT4gbGl2ZVZhcmlhYmxlczsKICAgICBmb3IgKFZhbHVlKiB2YWx1ZSA6IHByb2MudmFsdWVzKCkp
IHsKLSAgICAgICAgYXV0byByZWplY3QgPSBbJl0gKFZhbHVlKiB2YWx1ZSkgewotICAgICAgICAg
ICAgaWYgKFNsb3RCYXNlVmFsdWUqIHNsb3RCYXNlID0gdmFsdWUtPmFzPFNsb3RCYXNlVmFsdWU+
KCkpCi0gICAgICAgICAgICAgICAgc3RhY2tWYXJpYWJsZS5yZW1vdmUoc2xvdEJhc2UtPnNsb3Qo
KSk7Ci0gICAgICAgIH07Ci0gICAgICAgIAotICAgICAgICBhdXRvIGhhbmRsZUFjY2VzcyA9IFsm
XSAoVmFsdWUqIGFjY2VzcywgVHlwZSB0eXBlKSB7Ci0gICAgICAgICAgICBTbG90QmFzZVZhbHVl
KiBzbG90QmFzZSA9IGFjY2Vzcy0+bGFzdENoaWxkKCktPmFzPFNsb3RCYXNlVmFsdWU+KCk7Ci0g
ICAgICAgICAgICBpZiAoIXNsb3RCYXNlKQotICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAg
ICAgICAgICAgU3RhY2tTbG90KiBzdGFjayA9IHNsb3RCYXNlLT5zbG90KCk7Ci0gICAgICAgICAg
ICAKLSAgICAgICAgICAgIGlmICh2YWx1ZS0+YXM8TWVtb3J5VmFsdWU+KCktPm9mZnNldCgpKSB7
Ci0gICAgICAgICAgICAgICAgc3RhY2tWYXJpYWJsZS5yZW1vdmUoc3RhY2spOwotICAgICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgYXV0byByZXN1bHQg
PSBzdGFja1ZhcmlhYmxlLmZpbmQoc3RhY2spOwotICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBz
dGFja1ZhcmlhYmxlLmVuZCgpKQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAg
IGlmIChyZXN1bHQtPnZhbHVlID09IFZvaWQpIHsKLSAgICAgICAgICAgICAgICByZXN1bHQtPnZh
bHVlID0gdHlwZTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBpZiAocmVzdWx0LT52YWx1ZSA9PSB0eXBlKQotICAgICAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgICAgIHN0YWNrVmFyaWFibGUucmVtb3ZlKHJlc3VsdCk7Ci0gICAgICAgIH07
Ci0gICAgICAgIAotICAgICAgICBzd2l0Y2ggKHZhbHVlLT5vcGNvZGUoKSkgewotICAgICAgICBj
YXNlIExvYWQ6Ci0gICAgICAgICAgICAvLyBXZSdyZSBPSyB3aXRoIGxvYWRzIGZyb20gc3RhY2sg
dmFyaWFibGVzIGF0IGFuIG9mZnNldCBvZiB6ZXJvLgotICAgICAgICAgICAgaGFuZGxlQWNjZXNz
KHZhbHVlLCB2YWx1ZS0+dHlwZSgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNl
IFN0b3JlOgotICAgICAgICAgICAgLy8gV2UncmUgT0sgd2l0aCBzdG9yZXMgdG8gc3RhY2sgdmFy
aWFibGVzLCBidXQgbm90IHN0b3Jpbmcgc3RhY2sgdmFyaWFibGVzLgotICAgICAgICAgICAgcmVq
ZWN0KHZhbHVlLT5jaGlsZCgwKSk7Ci0gICAgICAgICAgICBoYW5kbGVBY2Nlc3ModmFsdWUsIHZh
bHVlLT5jaGlsZCgwKS0+dHlwZSgpKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZh
dWx0OgotICAgICAgICAgICAgZm9yIChWYWx1ZSogY2hpbGQgOiB2YWx1ZS0+Y2hpbGRyZW4oKSkK
LSAgICAgICAgICAgICAgICByZWplY3QoY2hpbGQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIH0KKyAgICAgICAgaWYgKFZhcmlhYmxlVmFsdWUqIHZhcmlhYmxlVmFsdWUgPSB2YWx1ZS0+
YXM8VmFyaWFibGVWYWx1ZT4oKSkKKyAgICAgICAgICAgIGxpdmVWYXJpYWJsZXMuYWRkKHZhcmlh
YmxlVmFsdWUtPnZhcmlhYmxlKCkpOwogICAgIH0KIAotICAgIFZlY3RvcjxTdGFja1Nsb3QqPiBk
ZWFkU2xvdHM7Ci0gICAgZm9yIChhdXRvJiBlbnRyeSA6IHN0YWNrVmFyaWFibGUpIHsKLSAgICAg
ICAgaWYgKGVudHJ5LnZhbHVlID09IFZvaWQpCi0gICAgICAgICAgICBkZWFkU2xvdHMuYXBwZW5k
KGVudHJ5LmtleSk7CisgICAgZm9yIChWYXJpYWJsZSogdmFyaWFibGUgOiBwcm9jLnZhcmlhYmxl
cygpKSB7CisgICAgICAgIGlmICghbGl2ZVZhcmlhYmxlcy5jb250YWlucyh2YXJpYWJsZSkpCisg
ICAgICAgICAgICBwcm9jLmRlbGV0ZVZhcmlhYmxlKHZhcmlhYmxlKTsKICAgICB9CiAKLSAgICBm
b3IgKFN0YWNrU2xvdCogZGVhZFNsb3QgOiBkZWFkU2xvdHMpCi0gICAgICAgIHN0YWNrVmFyaWFi
bGUucmVtb3ZlKGRlYWRTbG90KTsKLQotICAgIGlmIChzdGFja1ZhcmlhYmxlLmlzRW1wdHkoKSkK
LSAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmIChwcm9jLnZhcmlhYmxlcygpLmlzRW1wdHko
KSkKKyAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gV2Uga25vdyB0aGF0IHdlIGhhdmUgdmFyaWFi
bGVzIHRvIG9wdGltaXplLCBzbyBkbyB0aGF0IG5vdy4KICAgICBicmVha0NyaXRpY2FsRWRnZXMo
cHJvYyk7CiAKICAgICBTU0FDYWxjdWxhdG9yIHNzYShwcm9jKTsKIAotICAgIC8vIENyZWF0ZSBh
IFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlIGZvciBldmVyeSBzdGFjayB2YXJpYWJsZS4KLSAgICBW
ZWN0b3I8U3RhY2tTbG90Kj4gdmFyaWFibGVUb1N0YWNrOwotICAgIEhhc2hNYXA8U3RhY2tTbG90
KiwgU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqPiBzdGFja1RvVmFyaWFibGU7Ci0KLSAgICBmb3Ig
KGF1dG8mIGVudHJ5IDogc3RhY2tWYXJpYWJsZSkgewotICAgICAgICBTdGFja1Nsb3QqIHN0YWNr
ID0gZW50cnkua2V5OwotICAgICAgICBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSogdmFyaWFibGUg
PSBzc2EubmV3VmFyaWFibGUoKTsKLSAgICAgICAgUkVMRUFTRV9BU1NFUlQodmFyaWFibGUtPmlu
ZGV4KCkgPT0gdmFyaWFibGVUb1N0YWNrLnNpemUoKSk7Ci0gICAgICAgIHZhcmlhYmxlVG9TdGFj
ay5hcHBlbmQoc3RhY2spOwotICAgICAgICBzdGFja1RvVmFyaWFibGUuYWRkKHN0YWNrLCB2YXJp
YWJsZSk7CisgICAgLy8gQ3JlYXRlIGEgU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUgKCJjYWxjVmFy
IikgZm9yIGV2ZXJ5IHZhcmlhYmxlLgorICAgIFZlY3RvcjxWYXJpYWJsZSo+IGNhbGNWYXJUb1Zh
cmlhYmxlOworICAgIEluZGV4TWFwPFZhcmlhYmxlLCBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSo+
IHZhcmlhYmxlVG9DYWxjVmFyKHByb2MudmFyaWFibGVzKCkuc2l6ZSgpKTsKKworICAgIGZvciAo
VmFyaWFibGUqIHZhcmlhYmxlIDogcHJvYy52YXJpYWJsZXMoKSkgeworICAgICAgICBTU0FDYWxj
dWxhdG9yOjpWYXJpYWJsZSogY2FsY1ZhciA9IHNzYS5uZXdWYXJpYWJsZSgpOworICAgICAgICBS
RUxFQVNFX0FTU0VSVChjYWxjVmFyLT5pbmRleCgpID09IGNhbGNWYXJUb1ZhcmlhYmxlLnNpemUo
KSk7CisgICAgICAgIGNhbGNWYXJUb1ZhcmlhYmxlLmFwcGVuZCh2YXJpYWJsZSk7CisgICAgICAg
IHZhcmlhYmxlVG9DYWxjVmFyW3ZhcmlhYmxlXSA9IGNhbGNWYXI7CiAgICAgfQogCiAgICAgLy8g
Q3JlYXRlIERlZnMgZm9yIGFsbCBvZiB0aGUgc3RvcmVzIHRvIHRoZSBzdGFjayB2YXJpYWJsZS4K
ICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogcHJvYykgewogICAgICAgICBmb3IgKFZhbHVl
KiB2YWx1ZSA6ICpibG9jaykgewotICAgICAgICAgICAgaWYgKHZhbHVlLT5vcGNvZGUoKSAhPSBT
dG9yZSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLQotICAgICAgICAgICAgU2xvdEJhc2VW
YWx1ZSogc2xvdEJhc2UgPSB2YWx1ZS0+Y2hpbGQoMSktPmFzPFNsb3RCYXNlVmFsdWU+KCk7Ci0g
ICAgICAgICAgICBpZiAoIXNsb3RCYXNlKQorICAgICAgICAgICAgaWYgKHZhbHVlLT5vcGNvZGUo
KSAhPSBTZXQpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgICAgIFN0YWNr
U2xvdCogc3RhY2sgPSBzbG90QmFzZS0+c2xvdCgpOworICAgICAgICAgICAgVmFyaWFibGUqIHZh
cmlhYmxlID0gdmFsdWUtPmFzPFZhcmlhYmxlVmFsdWU+KCktPnZhcmlhYmxlKCk7CiAKLSAgICAg
ICAgICAgIGlmIChTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSogdmFyaWFibGUgPSBzdGFja1RvVmFy
aWFibGUuZ2V0KHN0YWNrKSkKLSAgICAgICAgICAgICAgICBzc2EubmV3RGVmKHZhcmlhYmxlLCBi
bG9jaywgdmFsdWUtPmNoaWxkKDApKTsKKyAgICAgICAgICAgIGlmIChTU0FDYWxjdWxhdG9yOjpW
YXJpYWJsZSogY2FsY1ZhciA9IHZhcmlhYmxlVG9DYWxjVmFyW3ZhcmlhYmxlXSkKKyAgICAgICAg
ICAgICAgICBzc2EubmV3RGVmKGNhbGNWYXIsIGJsb2NrLCB2YWx1ZS0+Y2hpbGQoMCkpOwogICAg
ICAgICB9CiAgICAgfQogCiAgICAgLy8gRGVjaWRlIHdoZXJlIFBoaXMgYXJlIHRvIGJlIGluc2Vy
dGVkLiBUaGlzIGNyZWF0ZXMgdGhlbSBidXQgZG9lcyBub3QgaW5zZXJ0IHRoZW0uCiAgICAgc3Nh
LmNvbXB1dGVQaGlzKAotICAgICAgICBbJl0gKFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKiB2YXJp
YWJsZSwgQmFzaWNCbG9jayogYmxvY2spIC0+IFZhbHVlKiB7Ci0gICAgICAgICAgICBTdGFja1Ns
b3QqIHN0YWNrID0gdmFyaWFibGVUb1N0YWNrW3ZhcmlhYmxlLT5pbmRleCgpXTsKLSAgICAgICAg
ICAgIFZhbHVlKiBwaGkgPSBwcm9jLmFkZDxWYWx1ZT4oUGhpLCBzdGFja1ZhcmlhYmxlLmdldChz
dGFjayksIGJsb2NrLT5hdCgwKS0+b3JpZ2luKCkpOworICAgICAgICBbJl0gKFNTQUNhbGN1bGF0
b3I6OlZhcmlhYmxlKiBjYWxjVmFyLCBCYXNpY0Jsb2NrKiBibG9jaykgLT4gVmFsdWUqIHsKKyAg
ICAgICAgICAgIFZhcmlhYmxlKiB2YXJpYWJsZSA9IGNhbGNWYXJUb1ZhcmlhYmxlW2NhbGNWYXIt
PmluZGV4KCldOworICAgICAgICAgICAgVmFsdWUqIHBoaSA9IHByb2MuYWRkPFZhbHVlPihQaGks
IHZhcmlhYmxlLT50eXBlKCksIGJsb2NrLT5hdCgwKS0+b3JpZ2luKCkpOwogICAgICAgICAgICAg
aWYgKHZlcmJvc2UpIHsKICAgICAgICAgICAgICAgICBkYXRhTG9nKAotICAgICAgICAgICAgICAg
ICAgICAiQWRkaW5nIFBoaSBmb3IgIiwgcG9pbnRlckR1bXAoc3RhY2spLCAiIGF0ICIsICpibG9j
aywgIjogIiwKKyAgICAgICAgICAgICAgICAgICAgIkFkZGluZyBQaGkgZm9yICIsIHBvaW50ZXJE
dW1wKHZhcmlhYmxlKSwgIiBhdCAiLCAqYmxvY2ssICI6ICIsCiAgICAgICAgICAgICAgICAgICAg
IGRlZXBEdW1wKHByb2MsIHBoaSksICJcbiIpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAg
cmV0dXJuIHBoaTsKQEAgLTI0OSwyNCArMTc4LDI0IEBAIGJvb2wgZml4U1NBKFByb2NlZHVyZSYg
cHJvYykKIAogICAgIC8vIE5vdyBwZXJmb3JtIHRoZSBjb252ZXJzaW9uLgogICAgIEluc2VydGlv
blNldCBpbnNlcnRpb25TZXQocHJvYyk7Ci0gICAgSGFzaE1hcDxTdGFja1Nsb3QqLCBWYWx1ZSo+
IG1hcHBpbmc7CisgICAgSW5kZXhNYXA8VmFyaWFibGUsIFZhbHVlKj4gbWFwcGluZzsKICAgICBm
b3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogcHJvYy5ibG9ja3NJblByZU9yZGVyKCkpIHsKICAgICAg
ICAgbWFwcGluZy5jbGVhcigpOwogCi0gICAgICAgIGZvciAoYXV0byYgZW50cnkgOiBzdGFja1Rv
VmFyaWFibGUpIHsKLSAgICAgICAgICAgIFN0YWNrU2xvdCogc3RhY2sgPSBlbnRyeS5rZXk7Ci0g
ICAgICAgICAgICBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSogdmFyaWFibGUgPSBlbnRyeS52YWx1
ZTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleCA9IGNhbGNWYXJUb1ZhcmlhYmxlLnNpemUo
KTsgaW5kZXgtLTspIHsKKyAgICAgICAgICAgIFZhcmlhYmxlKiB2YXJpYWJsZSA9IGNhbGNWYXJU
b1ZhcmlhYmxlW2luZGV4XTsKKyAgICAgICAgICAgIFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKiBj
YWxjVmFyID0gc3NhLnZhcmlhYmxlKGluZGV4KTsKIAotICAgICAgICAgICAgU1NBQ2FsY3VsYXRv
cjo6RGVmKiBkZWYgPSBzc2EucmVhY2hpbmdEZWZBdEhlYWQoYmxvY2ssIHZhcmlhYmxlKTsKKyAg
ICAgICAgICAgIFNTQUNhbGN1bGF0b3I6OkRlZiogZGVmID0gc3NhLnJlYWNoaW5nRGVmQXRIZWFk
KGJsb2NrLCBjYWxjVmFyKTsKICAgICAgICAgICAgIGlmIChkZWYpCi0gICAgICAgICAgICAgICAg
bWFwcGluZy5zZXQoc3RhY2ssIGRlZi0+dmFsdWUoKSk7CisgICAgICAgICAgICAgICAgbWFwcGlu
Z1t2YXJpYWJsZV0gPSBkZWYtPnZhbHVlKCk7CiAgICAgICAgIH0KIAogICAgICAgICBmb3IgKFNT
QUNhbGN1bGF0b3I6OkRlZiogcGhpRGVmIDogc3NhLnBoaXNGb3JCbG9jayhibG9jaykpIHsKLSAg
ICAgICAgICAgIFN0YWNrU2xvdCogc3RhY2sgPSB2YXJpYWJsZVRvU3RhY2tbcGhpRGVmLT52YXJp
YWJsZSgpLT5pbmRleCgpXTsKKyAgICAgICAgICAgIFZhcmlhYmxlKiB2YXJpYWJsZSA9IGNhbGNW
YXJUb1ZhcmlhYmxlW3BoaURlZi0+dmFyaWFibGUoKS0+aW5kZXgoKV07CiAKICAgICAgICAgICAg
IGluc2VydGlvblNldC5pbnNlcnRWYWx1ZSgwLCBwaGlEZWYtPnZhbHVlKCkpOwotICAgICAgICAg
ICAgbWFwcGluZy5zZXQoc3RhY2ssIHBoaURlZi0+dmFsdWUoKSk7CisgICAgICAgICAgICBtYXBw
aW5nW3ZhcmlhYmxlXSA9IHBoaURlZi0+dmFsdWUoKTsKICAgICAgICAgfQogCiAgICAgICAgIGZv
ciAodW5zaWduZWQgdmFsdWVJbmRleCA9IDA7IHZhbHVlSW5kZXggPCBibG9jay0+c2l6ZSgpOyAr
K3ZhbHVlSW5kZXgpIHsKQEAgLTI3NCwyMyArMjAzLDI1IEBAIGJvb2wgZml4U1NBKFByb2NlZHVy
ZSYgcHJvYykKICAgICAgICAgICAgIHZhbHVlLT5wZXJmb3JtU3Vic3RpdHV0aW9uKCk7CiAKICAg
ICAgICAgICAgIHN3aXRjaCAodmFsdWUtPm9wY29kZSgpKSB7Ci0gICAgICAgICAgICBjYXNlIExv
YWQ6IHsKLSAgICAgICAgICAgICAgICBpZiAoU2xvdEJhc2VWYWx1ZSogc2xvdEJhc2UgPSB2YWx1
ZS0+Y2hpbGQoMCktPmFzPFNsb3RCYXNlVmFsdWU+KCkpIHsKLSAgICAgICAgICAgICAgICAgICAg
U3RhY2tTbG90KiBzdGFjayA9IHNsb3RCYXNlLT5zbG90KCk7Ci0gICAgICAgICAgICAgICAgICAg
IGlmIChWYWx1ZSogcmVwbGFjZW1lbnQgPSBtYXBwaW5nLmdldChzdGFjaykpCi0gICAgICAgICAg
ICAgICAgICAgICAgICB2YWx1ZS0+cmVwbGFjZVdpdGhJZGVudGl0eShyZXBsYWNlbWVudCk7Cisg
ICAgICAgICAgICBjYXNlIEdldDogeworICAgICAgICAgICAgICAgIFZhcmlhYmxlVmFsdWUqIHZh
cmlhYmxlVmFsdWUgPSB2YWx1ZS0+YXM8VmFyaWFibGVWYWx1ZT4oKTsKKyAgICAgICAgICAgICAg
ICBWYXJpYWJsZSogdmFyaWFibGUgPSB2YXJpYWJsZVZhbHVlLT52YXJpYWJsZSgpOworCisgICAg
ICAgICAgICAgICAgaWYgKFZhbHVlKiByZXBsYWNlbWVudCA9IG1hcHBpbmcuZ2V0KHN0YWNrKSkK
KyAgICAgICAgICAgICAgICAgICAgdmFsdWUtPnJlcGxhY2VXaXRoSWRlbnRpdHkocmVwbGFjZW1l
bnQpOworICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICB2YWx1ZS0+
cmVwbGFjZVdpdGhJZGVudGl0eSgKKyAgICAgICAgICAgICAgICAgICAgICAgIG1faW5zZXJ0aW9u
U2V0Lmluc2VydEJvdHRvbSh2YWx1ZUluZGV4LCB2YWx1ZSkpOwogICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgIGNhc2UgU3RvcmU6IHsKLSAgICAgICAgICAgICAgICBpZiAoU2xvdEJhc2VW
YWx1ZSogc2xvdEJhc2UgPSB2YWx1ZS0+Y2hpbGQoMSktPmFzPFNsb3RCYXNlVmFsdWU+KCkpIHsK
LSAgICAgICAgICAgICAgICAgICAgU3RhY2tTbG90KiBzdGFjayA9IHNsb3RCYXNlLT5zbG90KCk7
Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzdGFja1RvVmFyaWFibGUuY29udGFpbnMoc3RhY2sp
KSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtYXBwaW5nLnNldChzdGFjaywgdmFsdWUtPmNo
aWxkKDApKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLT5yZXBsYWNlV2l0aE5vcCgp
OwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
Y2FzZSBTZXQ6IHsKKyAgICAgICAgICAgICAgICBWYXJpYWJsZVZhbHVlKiB2YXJpYWJsZVZhbHVl
ID0gdmFsdWUtPmFzPFZhcmlhYmxlVmFsdWU+KCk7CisgICAgICAgICAgICAgICAgVmFyaWFibGUq
IHZhcmlhYmxlID0gdmFyaWFibGVWYWx1ZS0+dmFyaWFibGUoKTsKKworICAgICAgICAgICAgICAg
IG1hcHBpbmdbdmFyaWFibGVdID0gdmFsdWUtPmNoaWxkKDApOworICAgICAgICAgICAgICAgIHZh
bHVlLT5yZXBsYWNlV2l0aE5vcCgpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgfQogCkBAIC0zMDQsMTQgKzIzNSwxNCBAQCBib29sIGZpeFNTQShQcm9jZWR1cmUmIHByb2Mp
CiAgICAgICAgIGZvciAoQmFzaWNCbG9jayogc3VjY2Vzc29yQmxvY2sgOiBibG9jay0+c3VjY2Vz
c29yQmxvY2tzKCkpIHsKICAgICAgICAgICAgIGZvciAoU1NBQ2FsY3VsYXRvcjo6RGVmKiBwaGlE
ZWYgOiBzc2EucGhpc0ZvckJsb2NrKHN1Y2Nlc3NvckJsb2NrKSkgewogICAgICAgICAgICAgICAg
IFZhbHVlKiBwaGkgPSBwaGlEZWYtPnZhbHVlKCk7Ci0gICAgICAgICAgICAgICAgU1NBQ2FsY3Vs
YXRvcjo6VmFyaWFibGUqIHZhcmlhYmxlID0gcGhpRGVmLT52YXJpYWJsZSgpOwotICAgICAgICAg
ICAgICAgIFN0YWNrU2xvdCogc3RhY2sgPSB2YXJpYWJsZVRvU3RhY2tbdmFyaWFibGUtPmluZGV4
KCldOworICAgICAgICAgICAgICAgIFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKiBjYWxjVmFyID0g
cGhpRGVmLT52YXJpYWJsZSgpOworICAgICAgICAgICAgICAgIFZhcmlhYmxlKiB2YXJpYWJsZSA9
IGNhbGNWYXJUb1ZhcmlhYmxlW2NhbGNWYXItPmluZGV4KCldOwogCi0gICAgICAgICAgICAgICAg
VmFsdWUqIG1hcHBlZFZhbHVlID0gbWFwcGluZy5nZXQoc3RhY2spOworICAgICAgICAgICAgICAg
IFZhbHVlKiBtYXBwZWRWYWx1ZSA9IG1hcHBpbmdwW3ZhcmlhYmxlXTsKICAgICAgICAgICAgICAg
ICBpZiAodmVyYm9zZSkgewogICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKAotICAgICAgICAg
ICAgICAgICAgICAgICAgIk1hcHBlZCB2YWx1ZSBmb3IgIiwgKnN0YWNrLCAiIHdpdGggc3VjY2Vz
c29yIFBoaSAiLCAqcGhpLCAiIGF0IGVuZCBvZiAiLAotICAgICAgICAgICAgICAgICAgICAgICAg
KmJsb2NrLCAiOiAiLCBwb2ludGVyRHVtcChtYXBwZWRWYWx1ZSksICJcbiIpOworICAgICAgICAg
ICAgICAgICAgICAgICAgIk1hcHBlZCB2YWx1ZSBmb3IgIiwgKnZhcmlhYmxlLCAiIHdpdGggc3Vj
Y2Vzc29yIFBoaSAiLCAqcGhpLAorICAgICAgICAgICAgICAgICAgICAgICAgIiBhdCBlbmQgb2Yg
IiwgKmJsb2NrLCAiOiAiLCBwb2ludGVyRHVtcChtYXBwZWRWYWx1ZSksICJcbiIpOwogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAoIW1hcHBl
ZFZhbHVlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRml4U1NBLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRml4U1NBLmgJKHJldmlzaW9uIDE5
NTk3MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0ZpeFNTQS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zNiw4ICszNiw4IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewogCiBj
bGFzcyBQcm9jZWR1cmU7CiAKLS8vIFR1cm5zIGFsbCBtZW50aW9ucyBvZiB0aGUgZ2l2ZW4gdmFs
dWVzIGludG8gYWNjZXNzZXMgdG8gYW5vbnltb3VzIHN0YWNrIHNsb3RzLiBUaGlzIGlzIG1lYW50
Ci0vLyB0byBiZSB1c2VkIGZyb20gcGhhc2VzIHRoYXQgZG9uJ3QgbGlrZSBTU0EgZm9yIHdoYXRl
dmVyIHJlYXNvbi4KKy8vIFR1cm5zIGFsbCBtZW50aW9ucyBvZiB0aGUgZ2l2ZW4gdmFsdWVzIGlu
dG8gYWNjZXNzZXMgdG8gdmFyaWFibGVzLiBUaGlzIGlzIG1lYW50IHRvIGJlIHVzZWQKKy8vIGZy
b20gcGhhc2VzIHRoYXQgZG9uJ3QgbGlrZSBTU0EgZm9yIHdoYXRldmVyIHJlYXNvbi4KIHZvaWQg
ZGVtb3RlVmFsdWVzKFByb2NlZHVyZSYsIGNvbnN0IEluZGV4U2V0PFZhbHVlPiYpOwogCiAvLyBU
aGlzIGZpeGVzIFNTQSBmb3IgeW91LiBVc2UgdGhpcyBhZnRlciB5b3UgaGF2ZSBkb25lIGRlbW90
ZVZhbHVlcygpIGFuZCB5b3UgaGF2ZSBwZXJmb3JtZWQKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0luZGV4TWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzSW5kZXhNYXAuaAkocmV2aXNpb24gMTk1OTcwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzSW5kZXhNYXAuaAkod29ya2luZyBjb3B5KQpAQCAtNDksNiArNDksMTEgQEAgcHVi
bGljOgogICAgICAgICBtX3ZlY3Rvci5maWxsKFZhbHVlKCksIHNpemUpOwogICAgIH0KIAorICAg
IHZvaWQgY2xlYXIoKQorICAgIHsKKyAgICAgICAgbV92ZWN0b3IuZmlsbChWYWx1ZSgpLCBtX3Zl
Y3Rvci5zaXplKCkpOworICAgIH0KKwogICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4g
bV92ZWN0b3Iuc2l6ZSgpOyB9CiAKICAgICBWYWx1ZSYgb3BlcmF0b3JbXShzaXplX3QgaW5kZXgp
CkBAIC03MSwxMSArNzYsNiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX3ZlY3RvcltrZXkt
PmluZGV4KCldOwogICAgIH0KIAotICAgIHZvaWQgY2xlYXIoKQotICAgIHsKLSAgICAgICAgbV92
ZWN0b3IuY2xlYXIoKTsKLSAgICB9Ci0gICAgCiBwcml2YXRlOgogICAgIFZlY3RvcjxWYWx1ZT4g
bV92ZWN0b3I7CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSW5kZXhTZXQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNJbmRleFNldC5oCShy
ZXZpc2lvbiAxOTU5NzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNJbmRleFNldC5o
CSh3b3JraW5nIGNvcHkpCkBAIC02OSw2ICs2OSwxNiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVy
biBtX3NldC5nZXQodmFsdWUtPmluZGV4KCkpOwogICAgIH0KIAorICAgIHNpemVfdCBzaXplKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3NldC5iaXRDb3VudCgpOworICAgIH0KKwor
ICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gIXNpemUoKTsK
KyAgICB9CisKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xsZWN0aW9uVHlwZT4KICAgICBjbGFz
cyBJdGVyYWJsZSB7CiAgICAgcHVibGljOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzTG93ZXJUb0Fpci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzTG93ZXJUb0Fpci5jcHAJKHJldmlzaW9uIDE5NTk3MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Myw2ICs1Myw4IEBA
CiAjaW5jbHVkZSAiQjNVcHNpbG9uVmFsdWUuaCIKICNpbmNsdWRlICJCM1VzZUNvdW50cy5oIgog
I2luY2x1ZGUgIkIzVmFsdWVJbmxpbmVzLmgiCisjaW5jbHVkZSAiQjNWYXJpYWJsZS5oIgorI2lu
Y2x1ZGUgIkIzVmFyaWFibGVWYWx1ZS5oIgogI2luY2x1ZGUgPHd0Zi9MaXN0RHVtcC5oPgogCiAj
aWYgQ09NUElMRVIoR0NDKSAmJiBBU1NFUlRfRElTQUJMRUQKQEAgLTEwMiw2ICsxMDQsOCBAQCBw
dWJsaWM6CiAKICAgICAgICAgZm9yIChCMzo6U3RhY2tTbG90KiBzdGFjayA6IG1fcHJvY2VkdXJl
LnN0YWNrU2xvdHMoKSkKICAgICAgICAgICAgIG1fc3RhY2tUb1N0YWNrLmFkZChzdGFjaywgbV9j
b2RlLmFkZFN0YWNrU2xvdChzdGFjaykpOworICAgICAgICBmb3IgKFZhcmlhYmxlKiB2YXJpYWJs
ZSA6IG1fcHJvY2VkdXJlLnZhcmlhYmxlcygpKQorICAgICAgICAgICAgbV92YXJpYWJsZVRvVG1w
LmFkZCh2YXJpYWJsZSwgbV9jb2RlLm5ld1RtcChBcmc6OnR5cGVGb3JCM1R5cGUodmFyaWFibGUt
PnR5cGUoKSkpKTsKIAogICAgICAgICAvLyBGaWd1cmUgb3V0IHdoaWNoIGJsb2NrcyBhcmUgbm90
IHJhcmUuCiAgICAgICAgIG1fZmFzdFdvcmtsaXN0LnB1c2gobV9wcm9jZWR1cmVbMF0pOwpAQCAt
MjIyNSw2ICsyMjI5LDIxIEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KIAorICAgICAgICBjYXNlIFNldDogeworICAgICAgICAgICAgVmFsdWUqIHZhbHVlID0gbV92
YWx1ZS0+Y2hpbGQoMCk7CisgICAgICAgICAgICBhcHBlbmQoCisgICAgICAgICAgICAgICAgcmVs
YXhlZE1vdmVGb3JUeXBlKHZhbHVlLT50eXBlKCkpLCBpbW1PclRtcCh2YWx1ZSksCisgICAgICAg
ICAgICAgICAgbV92YXJpYWJsZVRvVG1wLmdldChtX3ZhbHVlLT5hczxWYXJpYWJsZVZhbHVlPigp
LT52YXJpYWJsZSgpKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAg
ICBjYXNlIEdldDogeworICAgICAgICAgICAgYXBwZW5kKAorICAgICAgICAgICAgICAgIHJlbGF4
ZWRNb3ZlRm9yVHlwZShtX3ZhbHVlLT50eXBlKCkpLAorICAgICAgICAgICAgICAgIG1fdmFyaWFi
bGVUb1RtcC5nZXQobV92YWx1ZS0+YXM8VmFyaWFibGVWYWx1ZT4oKS0+dmFyaWFibGUoKSksIHRt
cChtX3ZhbHVlKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwogICAgICAgICBj
YXNlIEJyYW5jaDogewogICAgICAgICAgICAgbV9pbnN0cy5sYXN0KCkuYXBwZW5kKGNyZWF0ZUJy
YW5jaChtX3ZhbHVlLT5jaGlsZCgwKSkpOwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMjMxNiw2
ICsyMzM1LDcgQEAgcHJpdmF0ZToKICAgICBJbmRleE1hcDxWYWx1ZSwgVG1wPiBtX3BoaVRvVG1w
OyAvLyBFYWNoIFBoaSBnZXRzIGl0cyBvd24gVG1wLgogICAgIEluZGV4TWFwPEIzOjpCYXNpY0Js
b2NrLCBBaXI6OkJhc2ljQmxvY2sqPiBtX2Jsb2NrVG9CbG9jazsKICAgICBIYXNoTWFwPEIzOjpT
dGFja1Nsb3QqLCBBaXI6OlN0YWNrU2xvdCo+IG1fc3RhY2tUb1N0YWNrOworICAgIEhhc2hNYXA8
VmFyaWFibGUqLCBUbXA+IG1fdmFyaWFibGVUb1RtcDsKIAogICAgIFVzZUNvdW50cyBtX3VzZUNv
dW50czsKICAgICBQaGlDaGlsZHJlbiBtX3BoaUNoaWxkcmVuOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzTWVtb3J5VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNNZW1vcnlWYWx1ZS5oCShyZXZpc2lvbiAxOTU5NzApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNNZW1vcnlWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03NSwx
MCArNzUsOCBAQCBwcml2YXRlOgogCiAgICAgLy8gVXNlIHRoaXMgZm9ybSBmb3IgTG9hZCAoYnV0
IG5vdCBMb2FkOFosIExvYWQ4Uywgb3IgYW55IG9mIHRoZSBMb2FkcyB0aGF0IGhhdmUgYSBzdWZm
aXggdGhhdAogICAgIC8vIGRlc2NyaWJlcyB0aGUgcmV0dXJuZWQgdHlwZSkuCi0gICAgTWVtb3J5
VmFsdWUoCi0gICAgICAgIHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBUeXBlIHR5cGUs
IE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBwb2ludGVyLAotICAgICAgICBpbnQzMl90IG9mZnNldCA9
IDApCi0gICAgICAgIDogVmFsdWUoaW5kZXgsIENoZWNrZWRPcGNvZGUsIG9wY29kZSwgdHlwZSwg
b3JpZ2luLCBwb2ludGVyKQorICAgIE1lbW9yeVZhbHVlKE9wY29kZSBvcGNvZGUsIFR5cGUgdHlw
ZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIHBvaW50ZXIsIGludDMyX3Qgb2Zmc2V0ID0gMCkKKyAg
ICAgICAgOiBWYWx1ZShDaGVja2VkT3Bjb2RlLCBvcGNvZGUsIHR5cGUsIG9yaWdpbiwgcG9pbnRl
cikKICAgICAgICAgLCBtX29mZnNldChvZmZzZXQpCiAgICAgICAgICwgbV9yYW5nZShIZWFwUmFu
Z2U6OnRvcCgpKQogICAgIHsKQEAgLTEwNCwxNiArMTAyLDE0IEBAIHByaXZhdGU6CiAgICAgfQog
CiAgICAgLy8gVXNlIHRoaXMgZm9ybSBmb3IgbG9hZHMgd2hlcmUgdGhlIHJldHVybiB0eXBlIGlz
IGltcGxpZWQuCi0gICAgTWVtb3J5VmFsdWUodW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUs
IE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBwb2ludGVyLCBpbnQzMl90IG9mZnNldCA9IDApCi0gICAg
ICAgIDogTWVtb3J5VmFsdWUoaW5kZXgsIG9wY29kZSwgSW50MzIsIG9yaWdpbiwgcG9pbnRlciwg
b2Zmc2V0KQorICAgIE1lbW9yeVZhbHVlKE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4sIFZh
bHVlKiBwb2ludGVyLCBpbnQzMl90IG9mZnNldCA9IDApCisgICAgICAgIDogTWVtb3J5VmFsdWUo
b3Bjb2RlLCBJbnQzMiwgb3JpZ2luLCBwb2ludGVyLCBvZmZzZXQpCiAgICAgewogICAgIH0KIAog
ICAgIC8vIFVzZSB0aGlzIGZvcm0gZm9yIHN0b3Jlcy4KLSAgICBNZW1vcnlWYWx1ZSgKLSAgICAg
ICAgdW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiB2
YWx1ZSwgVmFsdWUqIHBvaW50ZXIsCi0gICAgICAgIGludDMyX3Qgb2Zmc2V0ID0gMCkKLSAgICAg
ICAgOiBWYWx1ZShpbmRleCwgQ2hlY2tlZE9wY29kZSwgb3Bjb2RlLCBWb2lkLCBvcmlnaW4sIHZh
bHVlLCBwb2ludGVyKQorICAgIE1lbW9yeVZhbHVlKE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmln
aW4sIFZhbHVlKiB2YWx1ZSwgVmFsdWUqIHBvaW50ZXIsIGludDMyX3Qgb2Zmc2V0ID0gMCkKKyAg
ICAgICAgOiBWYWx1ZShDaGVja2VkT3Bjb2RlLCBvcGNvZGUsIFZvaWQsIG9yaWdpbiwgdmFsdWUs
IHBvaW50ZXIpCiAgICAgICAgICwgbV9vZmZzZXQob2Zmc2V0KQogICAgICAgICAsIG1fcmFuZ2Uo
SGVhcFJhbmdlOjp0b3AoKSkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNPcGNvZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09w
Y29kZS5jcHAJKHJldmlzaW9uIDE5NTk3MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M09wY29kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk1LDYgKzk1LDEyIEBAIHZvaWQgcHJpbnRJ
bnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBPcGMKICAgICBjYXNlIENvbnN0RmxvYXQ6CiAgICAg
ICAgIG91dC5wcmludCgiQ29uc3RGbG9hdCIpOwogICAgICAgICByZXR1cm47CisgICAgY2FzZSBH
ZXQ6CisgICAgICAgIG91dC5wcmludCgiR2V0Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IFNldDoKKyAgICAgICAgb3V0LnByaW50KCJTZXQiKTsKKyAgICAgICAgcmV0dXJuOwogICAgIGNh
c2UgU2xvdEJhc2U6CiAgICAgICAgIG91dC5wcmludCgiU2xvdEJhc2UiKTsKICAgICAgICAgcmV0
dXJuOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3Bjb2RlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3Bjb2RlLmgJKHJldmlzaW9uIDE5NTk3
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wY29kZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC00OCw5ICs0OCwxNCBAQCBlbnVtIE9wY29kZSA6IGludDE2X3QgewogICAgIENvbnN0RG91
YmxlLAogICAgIENvbnN0RmxvYXQsCiAKLSAgICAvLyBUaGUgbWFnaWNhbCBzdGFjayBzbG90LiBU
aGlzIGlzIHZpZXdlZCBhcyBleGVjdXRpbmcgYXQgdGhlIHRvcCBvZiB0aGUgcHJvZ3JhbSByZWdh
cmRsZXNzIG9mCi0gICAgLy8gd2hlcmUgaW4gY29udHJvbCBmbG93IHlvdSBwdXQgaXQuIEVhY2gg
aW5zdGFuY2Ugb2YgYSBTdGFja1Nsb3QgVmFsdWUgZ2V0cyBhIGRpc2pvaW50IHJhbmdlIG9mCi0g
ICAgLy8gc3RhY2sgbWVtb3J5LiBVc2UgdGhlIFN0YWNrU2xvdFZhbHVlIGNsYXNzLgorICAgIC8v
IEIzIHN1cHBvcnRzIG5vbi1TU0EgdmFyaWFibGVzLiBUaGVzZSBhcmUgYWNjZXNzZWQgdXNpbmcg
R2V0IGFuZCBTZXQgb3Bjb2Rlcy4gVXNlIHRoZQorICAgIC8vIFZhcmlhYmxlVmFsdWUgY2xhc3Mu
IEl0J3MgYSBnb29kIGlkZWEgdG8gcnVuIGZpeFNTQSgpIHRvIHR1cm4gdGhlc2UgaW50byBTU0Eu
IFRoZQorICAgIC8vIG9wdGltaXplciB3aWxsIGRvIHRoYXQgZXZlbnR1YWxseSwgYnV0IGlmIHlv
dXIgaW5wdXQgdGVuZHMgdG8gdXNlIHRoZXNlIG9wY29kZXMsIHlvdQorICAgIC8vIHNob3VsZCBy
dW4gZml4U1NBKCkgZGlyZWN0bHkgYmVmb3JlIGxhdW5jaGluZyB0aGUgb3B0aW1pemVyLgorICAg
IFNldCwKKyAgICBHZXQsCisKKyAgICAvLyBHZXRzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgYSBTdGFj
a1Nsb3QuCiAgICAgU2xvdEJhc2UsCiAKICAgICAvLyBUaGUgbWFnaWNhbCBhcmd1bWVudCByZWdp
c3Rlci4gVGhpcyBpcyB2aWV3ZWQgYXMgZXhlY3V0aW5nIGF0IHRoZSB0b3Agb2YgdGhlIHByb2dy
YW0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRWYWx1ZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGF0Y2hwb2ludFZhbHVl
LmNwcAkocmV2aXNpb24gMTk1OTcwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGF0
Y2hwb2ludFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDksOCArNDksOCBAQCBWYWx1ZSog
UGF0Y2hwb2ludFZhbHVlOjpjbG9uZUltcGwoKSBjb25zCiAgICAgcmV0dXJuIG5ldyBQYXRjaHBv
aW50VmFsdWUoKnRoaXMpOwogfQogCi1QYXRjaHBvaW50VmFsdWU6OlBhdGNocG9pbnRWYWx1ZSh1
bnNpZ25lZCBpbmRleCwgVHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luKQotICAgIDogQmFzZShpbmRl
eCwgQ2hlY2tlZE9wY29kZSwgUGF0Y2hwb2ludCwgdHlwZSwgb3JpZ2luKQorUGF0Y2hwb2ludFZh
bHVlOjpQYXRjaHBvaW50VmFsdWUoVHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luKQorICAgIDogQmFz
ZShDaGVja2VkT3Bjb2RlLCBQYXRjaHBvaW50LCB0eXBlLCBvcmlnaW4pCiAgICAgLCBlZmZlY3Rz
KEVmZmVjdHM6OmZvckNhbGwoKSkKICAgICAsIHJlc3VsdENvbnN0cmFpbnQodHlwZSA9PSBWb2lk
ID8gVmFsdWVSZXA6Oldhcm1BbnkgOiBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKQogewpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGF0Y2hwb2ludFZhbHVlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGF0Y2hwb2ludFZhbHVlLmgJKHJldmlzaW9u
IDE5NTk3MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRWYWx1ZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC03MCw3ICs3MCw3IEBAIHByb3RlY3RlZDoKIHByaXZhdGU6CiAg
ICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIFBhdGNo
cG9pbnRWYWx1ZSh1bnNpZ25lZCBpbmRleCwgVHlwZSwgT3JpZ2luKTsKKyAgICBKU19FWFBPUlRf
UFJJVkFURSBQYXRjaHBvaW50VmFsdWUoVHlwZSwgT3JpZ2luKTsKIH07CiAKIH0gfSAvLyBuYW1l
c3BhY2UgSlNDOjpCMwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUu
Y3BwCShyZXZpc2lvbiAxOTU5NzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9j
ZWR1cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSAiQjNP
cGFxdWVCeXByb2R1Y3RzLmgiCiAjaW5jbHVkZSAiQjNTdGFja1Nsb3QuaCIKICNpbmNsdWRlICJC
M1ZhbHVlSW5saW5lcy5oIgorI2luY2x1ZGUgIkIzVmFyaWFibGUuaCIKIAogbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBCMyB7CiAKQEAgLTQ2LDcgKzQ3LDYgQEAgUHJvY2VkdXJlOjpQcm9jZWR1
cmUoKQogICAgICwgbV9sYXN0UGhhc2VOYW1lKCJpbml0aWFsIikKICAgICAsIG1fYnlwcm9kdWN0
cyhzdGQ6Om1ha2VfdW5pcXVlPE9wYXF1ZUJ5cHJvZHVjdHM+KCkpCiAgICAgLCBtX2NvZGUobmV3
IEFpcjo6Q29kZSgqdGhpcykpCi0gICAgLCBtX3ZhbHVlc0NvbGxlY3Rpb24oKnRoaXMpCiB7CiB9
CiAKQEAgLTcwLDUxICs3MCwyMiBAQCBCYXNpY0Jsb2NrKiBQcm9jZWR1cmU6OmFkZEJsb2NrKGRv
dWJsZSBmCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBQcm9jZWR1cmU6OnNldEJsb2Nr
T3JkZXJJbXBsKFZlY3RvcjxCYXNpY0Jsb2NrKj4mIGJsb2NrcykKK1N0YWNrU2xvdCogUHJvY2Vk
dXJlOjphZGRTdGFja1Nsb3QodW5zaWduZWQgYnl0ZVNpemUpCiB7Ci0gICAgSW5kZXhTZXQ8QmFz
aWNCbG9jaz4gYmxvY2tzU2V0OwotICAgIGJsb2Nrc1NldC5hZGRBbGwoYmxvY2tzKTsKLQotICAg
IGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiAqdGhpcykgewotICAgICAgICBpZiAoIWJsb2Nrc1Nl
dC5jb250YWlucyhibG9jaykpCi0gICAgICAgICAgICBibG9ja3MuYXBwZW5kKGJsb2NrKTsKLSAg
ICB9Ci0KLSAgICAvLyBQbGFjZSBibG9ja3MgaW50byB0aGlzJ3MgYmxvY2sgbGlzdCBieSBmaXJz
dCBsZWFraW5nIGFsbCBvZiB0aGUgYmxvY2tzIGFuZCB0aGVuIHJlYWRvcHRpbmcKLSAgICAvLyB0
aGVtLgotICAgIGZvciAoYXV0byYgZW50cnkgOiBtX2Jsb2NrcykKLSAgICAgICAgZW50cnkucmVs
ZWFzZSgpOwotCi0gICAgbV9ibG9ja3MucmVzaXplKGJsb2Nrcy5zaXplKCkpOwotICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBibG9ja3Muc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgQmFzaWNC
bG9jayogYmxvY2sgPSBibG9ja3NbaV07Ci0gICAgICAgIGJsb2NrLT5tX2luZGV4ID0gaTsKLSAg
ICAgICAgbV9ibG9ja3NbaV0gPSBzdGQ6OnVuaXF1ZV9wdHI8QmFzaWNCbG9jaz4oYmxvY2spOwot
ICAgIH0KLX0KLQotU3RhY2tTbG90KiBQcm9jZWR1cmU6OmFkZFN0YWNrU2xvdCh1bnNpZ25lZCBi
eXRlU2l6ZSwgU3RhY2tTbG90S2luZCBraW5kKQotewotICAgIHNpemVfdCBpbmRleCA9IGFkZFN0
YWNrU2xvdEluZGV4KCk7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFN0YWNrU2xvdD4gc2xvdChuZXcg
U3RhY2tTbG90KGluZGV4LCBieXRlU2l6ZSwga2luZCkpOwotICAgIFN0YWNrU2xvdCogcmVzdWx0
ID0gc2xvdC5nZXQoKTsKLSAgICBtX3N0YWNrU2xvdHNbaW5kZXhdID0gV1RGTW92ZShzbG90KTsK
LSAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiBtX3N0YWNrU2xvdHMuYWRkTmV3KGJ5dGVT
aXplKTsKIH0KIAotU3RhY2tTbG90KiBQcm9jZWR1cmU6OmFkZEFub255bW91c1N0YWNrU2xvdChU
eXBlIHR5cGUpCitWYXJpYWJsZSogUHJvY2VkdXJlOjphZGRWYXJpYWJsZShUeXBlIHR5cGUpCiB7
Ci0gICAgcmV0dXJuIGFkZFN0YWNrU2xvdChzaXplb2ZUeXBlKHR5cGUpLCBTdGFja1Nsb3RLaW5k
OjpBbm9ueW1vdXMpOworICAgIHJldHVybiBtX3ZhcmlhYmxlcy5hZGROZXcodHlwZSk7IAogfQog
CiBWYWx1ZSogUHJvY2VkdXJlOjpjbG9uZShWYWx1ZSogdmFsdWUpCiB7CiAgICAgc3RkOjp1bmlx
dWVfcHRyPFZhbHVlPiBjbG9uZSh2YWx1ZS0+Y2xvbmVJbXBsKCkpOwotICAgIFZhbHVlKiByZXN1
bHQgPSBjbG9uZS5nZXQoKTsKLSAgICBjbG9uZS0+bV9pbmRleCA9IGFkZFZhbHVlSW5kZXgoKTsK
KyAgICBjbG9uZS0+bV9pbmRleCA9IFVJTlRfTUFYOwogICAgIGNsb25lLT5vd25lciA9IG51bGxw
dHI7Ci0gICAgbV92YWx1ZXNbY2xvbmUtPm1faW5kZXhdID0gV1RGTW92ZShjbG9uZSk7Ci0gICAg
cmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gbV92YWx1ZXMuYWRkKFdURk1vdmUoY2xvbmUpKTsK
IH0KIAogVmFsdWUqIFByb2NlZHVyZTo6YWRkSW50Q29uc3RhbnQoT3JpZ2luIG9yaWdpbiwgVHlw
ZSB0eXBlLCBpbnQ2NF90IHZhbHVlKQpAQCAtMjA4LDYgKzE3OSwxMSBAQCB2b2lkIFByb2NlZHVy
ZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjCiAgICAgICAgIH0KICAgICAgICAgZGF0YUxvZygi
ICAgICIsIGRlZXBEdW1wKCp0aGlzLCB2YWx1ZSksICJcbiIpOwogICAgIH0KKyAgICBpZiAodmFy
aWFibGVzKCkuc2l6ZSgpKSB7CisgICAgICAgIG91dC5wcmludCgiVmFyaWFibGVzOlxuIik7Cisg
ICAgICAgIGZvciAoVmFyaWFibGUqIHZhcmlhYmxlIDogdmFyaWFibGVzKCkpCisgICAgICAgICAg
ICBvdXQucHJpbnQoIiAgICAiLCBkZWVwRHVtcCh2YXJpYWJsZSksICJcbiIpOworICAgIH0KICAg
ICBpZiAoc3RhY2tTbG90cygpLnNpemUoKSkgewogICAgICAgICBvdXQucHJpbnQoIlN0YWNrIHNs
b3RzOlxuIik7CiAgICAgICAgIGZvciAoU3RhY2tTbG90KiBzbG90IDogc3RhY2tTbG90cygpKQpA
QCAtMjI5LDE3ICsyMDUsMTcgQEAgVmVjdG9yPEJhc2ljQmxvY2sqPiBQcm9jZWR1cmU6OmJsb2Nr
c0luUAogCiB2b2lkIFByb2NlZHVyZTo6ZGVsZXRlU3RhY2tTbG90KFN0YWNrU2xvdCogc3RhY2tT
bG90KQogewotICAgIFJFTEVBU0VfQVNTRVJUKG1fc3RhY2tTbG90c1tzdGFja1Nsb3QtPmluZGV4
KCldLmdldCgpID09IHN0YWNrU2xvdCk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoIXN0YWNrU2xvdC0+
aXNMb2NrZWQoKSk7Ci0gICAgbV9zdGFja1Nsb3RJbmRleEZyZWVMaXN0LmFwcGVuZChzdGFja1Ns
b3QtPmluZGV4KCkpOwotICAgIG1fc3RhY2tTbG90c1tzdGFja1Nsb3QtPmluZGV4KCldID0gbnVs
bHB0cjsKKyAgICBtX3N0YWNrU2xvdHMucmVtb3ZlKHN0YWNrU2xvdCk7Cit9CisKK3ZvaWQgUHJv
Y2VkdXJlOjpkZWxldGVWYXJpYWJsZShWYXJpYWJsZSogdmFyaWFibGUpCit7CisgICAgbV92YXJp
YWJsZXMucmVtb3ZlKHZhcmlhYmxlKTsKIH0KIAogdm9pZCBQcm9jZWR1cmU6OmRlbGV0ZVZhbHVl
KFZhbHVlKiB2YWx1ZSkKIHsKLSAgICBSRUxFQVNFX0FTU0VSVChtX3ZhbHVlc1t2YWx1ZS0+aW5k
ZXgoKV0uZ2V0KCkgPT0gdmFsdWUpOwotICAgIG1fdmFsdWVJbmRleEZyZWVMaXN0LmFwcGVuZCh2
YWx1ZS0+aW5kZXgoKSk7Ci0gICAgbV92YWx1ZXNbdmFsdWUtPmluZGV4KCldID0gbnVsbHB0cjsK
KyAgICBtX3ZhbHVlcy5yZW1vdmUodmFsdWUpOwogfQogCiB2b2lkIFByb2NlZHVyZTo6ZGVsZXRl
T3JwaGFucygpCkBAIC0zMTEsMjYgKzI4NywzMiBAQCBjb25zdCBSZWdpc3RlckF0T2Zmc2V0TGlz
dCYgUHJvY2VkdXJlOjpjCiAgICAgcmV0dXJuIGNvZGUoKS5jYWxsZWVTYXZlUmVnaXN0ZXJzKCk7
CiB9CiAKLXNpemVfdCBQcm9jZWR1cmU6OmFkZFN0YWNrU2xvdEluZGV4KCkKK1ZhbHVlKiBQcm9j
ZWR1cmU6OmFkZFZhbHVlSW1wbChWYWx1ZSogdmFsdWUpCiB7Ci0gICAgaWYgKG1fc3RhY2tTbG90
SW5kZXhGcmVlTGlzdC5pc0VtcHR5KCkpIHsKLSAgICAgICAgc2l6ZV90IGluZGV4ID0gbV9zdGFj
a1Nsb3RzLnNpemUoKTsKLSAgICAgICAgbV9zdGFja1Nsb3RzLmFwcGVuZChudWxscHRyKTsKLSAg
ICAgICAgcmV0dXJuIGluZGV4OwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gbV9zdGFja1Nsb3RJ
bmRleEZyZWVMaXN0LnRha2VMYXN0KCk7CisgICAgcmV0dXJuIG1fdmFsdWVzLmFkZChzdGQ6OnVu
aXF1ZV9wdHI8VmFsdWU+KHZhbHVlKSk7CiB9CiAKLXNpemVfdCBQcm9jZWR1cmU6OmFkZFZhbHVl
SW5kZXgoKQordm9pZCBQcm9jZWR1cmU6OnNldEJsb2NrT3JkZXJJbXBsKFZlY3RvcjxCYXNpY0Js
b2NrKj4mIGJsb2NrcykKIHsKLSAgICBpZiAobV92YWx1ZUluZGV4RnJlZUxpc3QuaXNFbXB0eSgp
KSB7Ci0gICAgICAgIHNpemVfdCBpbmRleCA9IG1fdmFsdWVzLnNpemUoKTsKLSAgICAgICAgbV92
YWx1ZXMuYXBwZW5kKG51bGxwdHIpOwotICAgICAgICByZXR1cm4gaW5kZXg7CisgICAgSW5kZXhT
ZXQ8QmFzaWNCbG9jaz4gYmxvY2tzU2V0OworICAgIGJsb2Nrc1NldC5hZGRBbGwoYmxvY2tzKTsK
KworICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiAqdGhpcykgeworICAgICAgICBpZiAoIWJs
b2Nrc1NldC5jb250YWlucyhibG9jaykpCisgICAgICAgICAgICBibG9ja3MuYXBwZW5kKGJsb2Nr
KTsKKyAgICB9CisKKyAgICAvLyBQbGFjZSBibG9ja3MgaW50byB0aGlzJ3MgYmxvY2sgbGlzdCBi
eSBmaXJzdCBsZWFraW5nIGFsbCBvZiB0aGUgYmxvY2tzIGFuZCB0aGVuIHJlYWRvcHRpbmcKKyAg
ICAvLyB0aGVtLgorICAgIGZvciAoYXV0byYgZW50cnkgOiBtX2Jsb2NrcykKKyAgICAgICAgZW50
cnkucmVsZWFzZSgpOworCisgICAgbV9ibG9ja3MucmVzaXplKGJsb2Nrcy5zaXplKCkpOworICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBibG9ja3Muc2l6ZSgpOyArK2kpIHsKKyAgICAgICAg
QmFzaWNCbG9jayogYmxvY2sgPSBibG9ja3NbaV07CisgICAgICAgIGJsb2NrLT5tX2luZGV4ID0g
aTsKKyAgICAgICAgbV9ibG9ja3NbaV0gPSBzdGQ6OnVuaXF1ZV9wdHI8QmFzaWNCbG9jaz4oYmxv
Y2spOwogICAgIH0KLSAgICAKLSAgICByZXR1cm4gbV92YWx1ZUluZGV4RnJlZUxpc3QudGFrZUxh
c3QoKTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNQcm9jZWR1cmUuaAkocmV2aXNpb24gMTk1OTcwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcg
QEAKICNpbmNsdWRlICJCM09wYXF1ZUJ5cHJvZHVjdHMuaCIKICNpbmNsdWRlICJCM09yaWdpbi5o
IgogI2luY2x1ZGUgIkIzUENUb09yaWdpbk1hcC5oIgotI2luY2x1ZGUgIkIzU3RhY2tTbG90S2lu
ZC5oIgorI2luY2x1ZGUgIkIzU3BhcnNlQ29sbGVjdGlvbi5oIgogI2luY2x1ZGUgIkIzVHlwZS5o
IgogI2luY2x1ZGUgIkIzVmFsdWVLZXkuaCIKICNpbmNsdWRlICJQdXJlTmFOLmgiCkBAIC01Myw2
ICs1Myw3IEBAIGNsYXNzIENGRzsKIGNsYXNzIERvbWluYXRvcnM7CiBjbGFzcyBTdGFja1Nsb3Q7
CiBjbGFzcyBWYWx1ZTsKK2NsYXNzIFZhcmlhYmxlOwogCiBuYW1lc3BhY2UgQWlyIHsgY2xhc3Mg
Q29kZTsgfQogCkBAIC05NCw4ICs5NSw4IEBAIHB1YmxpYzoKICAgICAgICAgc2V0QmxvY2tPcmRl
ckltcGwoYmxvY2tzKTsKICAgICB9CiAKLSAgICBKU19FWFBPUlRfUFJJVkFURSBTdGFja1Nsb3Qq
IGFkZFN0YWNrU2xvdCh1bnNpZ25lZCBieXRlU2l6ZSwgU3RhY2tTbG90S2luZCk7Ci0gICAgSlNf
RVhQT1JUX1BSSVZBVEUgU3RhY2tTbG90KiBhZGRBbm9ueW1vdXNTdGFja1Nsb3QoVHlwZSk7Cisg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgU3RhY2tTbG90KiBhZGRTdGFja1Nsb3QodW5zaWduZWQgYnl0
ZVNpemUpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIFZhcmlhYmxlKiBhZGRWYXJpYWJsZShUeXBl
KTsKICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lLi4uIEFy
Z3VtZW50cz4KICAgICBWYWx1ZVR5cGUqIGFkZChBcmd1bWVudHMuLi4pOwpAQCAtMTc4LDE0MyAr
MTc5LDIyIEBAIHB1YmxpYzoKICAgICBWZWN0b3I8QmFzaWNCbG9jayo+IGJsb2Nrc0luUHJlT3Jk
ZXIoKTsKICAgICBWZWN0b3I8QmFzaWNCbG9jayo+IGJsb2Nrc0luUG9zdE9yZGVyKCk7CiAKLSAg
ICBjbGFzcyBTdGFja1Nsb3RzQ29sbGVjdGlvbiB7Ci0gICAgcHVibGljOgotICAgICAgICBTdGFj
a1Nsb3RzQ29sbGVjdGlvbihjb25zdCBQcm9jZWR1cmUmIHByb2MpCi0gICAgICAgICAgICA6IG1f
cHJvYyhwcm9jKQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgICAgICB1bnNpZ25lZCBzaXpl
KCkgY29uc3QgeyByZXR1cm4gbV9wcm9jLm1fc3RhY2tTbG90cy5zaXplKCk7IH0KLSAgICAgICAg
U3RhY2tTbG90KiBhdCh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9wcm9jLm1fc3Rh
Y2tTbG90c1tpbmRleF0uZ2V0KCk7IH0KLSAgICAgICAgU3RhY2tTbG90KiBvcGVyYXRvcltdKHVu
c2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBhdChpbmRleCk7IH0KLQotICAgICAgICBjbGFz
cyBpdGVyYXRvciB7Ci0gICAgICAgIHB1YmxpYzoKLSAgICAgICAgICAgIGl0ZXJhdG9yKCkKLSAg
ICAgICAgICAgICAgICA6IG1fY29sbGVjdGlvbihudWxscHRyKQotICAgICAgICAgICAgICAgICwg
bV9pbmRleCgwKQotICAgICAgICAgICAgewotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBp
dGVyYXRvcihjb25zdCBTdGFja1Nsb3RzQ29sbGVjdGlvbiYgY29sbGVjdGlvbiwgdW5zaWduZWQg
aW5kZXgpCi0gICAgICAgICAgICAgICAgOiBtX2NvbGxlY3Rpb24oJmNvbGxlY3Rpb24pCi0gICAg
ICAgICAgICAgICAgLCBtX2luZGV4KGZpbmROZXh0KGluZGV4KSkKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgU3RhY2tTbG90KiBvcGVyYXRvciooKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBtX2NvbGxlY3Rpb24tPmF0KG1faW5kZXgp
OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpdGVyYXRvciYgb3BlcmF0b3IrKygpCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbV9pbmRleCA9IGZpbmROZXh0KG1faW5kZXgg
KyAxKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0Ci0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG1faW5kZXggPT0gb3RoZXIubV9p
bmRleDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0
IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0
ZToKLSAgICAgICAgICAgIHVuc2lnbmVkIGZpbmROZXh0KHVuc2lnbmVkIGluZGV4KQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIHdoaWxlIChpbmRleCA8IG1fY29sbGVjdGlvbi0+c2l6
ZSgpICYmICFtX2NvbGxlY3Rpb24tPmF0KGluZGV4KSkKLSAgICAgICAgICAgICAgICAgICAgaW5k
ZXgrKzsKLSAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXg7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIGNvbnN0IFN0YWNrU2xvdHNDb2xsZWN0aW9uKiBtX2NvbGxl
Y3Rpb247Ci0gICAgICAgICAgICB1bnNpZ25lZCBtX2luZGV4OwotICAgICAgICB9OwotCi0gICAg
ICAgIGl0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoKnRoaXMsIDApOyB9
Ci0gICAgICAgIGl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKCp0aGlzLCBz
aXplKCkpOyB9Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBjb25zdCBQcm9jZWR1cmUmIG1fcHJv
YzsKLSAgICB9OwotCi0gICAgU3RhY2tTbG90c0NvbGxlY3Rpb24gc3RhY2tTbG90cygpIGNvbnN0
IHsgcmV0dXJuIFN0YWNrU2xvdHNDb2xsZWN0aW9uKCp0aGlzKTsgfQorICAgIFNwYXJzZUNvbGxl
Y3Rpb248U3RhY2tTbG90PiYgc3RhY2tTbG90cygpIHsgcmV0dXJuIG1fc3RhY2tTbG90czsgfQor
ICAgIGNvbnN0IFNwYXJzZUNvbGxlY3Rpb248U3RhY2tTbG90PiYgc3RhY2tTbG90cygpIGNvbnN0
IHsgcmV0dXJuIG1fc3RhY2tTbG90czsgfQogCisgICAgLy8gU2hvcnQgZm9yIHN0YWNrU2xvdHMo
KS5yZW1vdmUoKS4gSXQncyBiZXR0ZXIgdG8gY2FsbCB0aGlzIG1ldGhvZCBzaW5jZSBpdCdzIG91
dCBvZiBsaW5lLgogICAgIHZvaWQgZGVsZXRlU3RhY2tTbG90KFN0YWNrU2xvdCopOwotICAgIAot
ICAgIGNsYXNzIFZhbHVlc0NvbGxlY3Rpb24gewotICAgIHB1YmxpYzoKLSAgICAgICAgVmFsdWVz
Q29sbGVjdGlvbihjb25zdCBQcm9jZWR1cmUmIHByb2NlZHVyZSkKLSAgICAgICAgICAgIDogbV9w
cm9jZWR1cmUocHJvY2VkdXJlKQotICAgICAgICB7Ci0gICAgICAgIH0KIAotICAgICAgICBjbGFz
cyBpdGVyYXRvciB7Ci0gICAgICAgIHB1YmxpYzoKLSAgICAgICAgICAgIGl0ZXJhdG9yKCkKLSAg
ICAgICAgICAgICAgICA6IG1fcHJvY2VkdXJlKG51bGxwdHIpCi0gICAgICAgICAgICAgICAgLCBt
X2luZGV4KDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGl0
ZXJhdG9yKGNvbnN0IFByb2NlZHVyZSYgcHJvY2VkdXJlLCB1bnNpZ25lZCBpbmRleCkKLSAgICAg
ICAgICAgICAgICA6IG1fcHJvY2VkdXJlKCZwcm9jZWR1cmUpCi0gICAgICAgICAgICAgICAgLCBt
X2luZGV4KGZpbmROZXh0KGluZGV4KSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgVmFsdWUqIG9wZXJhdG9yKigpIGNvbnN0Ci0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIG1fcHJvY2VkdXJlLT5tX3ZhbHVlc1ttX2luZGV4XS5nZXQoKTsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaXRlcmF0b3ImIG9wZXJhdG9yKysoKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIG1faW5kZXggPSBmaW5kTmV4dChtX2luZGV4ICsg
MSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuICp0aGlzOwotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIEFTU0VSVChtX3Byb2NlZHVyZSA9PSBvdGhlci5t
X3Byb2NlZHVyZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG1faW5kZXggPT0gb3RoZXIubV9p
bmRleDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0
IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0
ZToKLSAgICAgICAgICAgIHVuc2lnbmVkIGZpbmROZXh0KHVuc2lnbmVkIGluZGV4KQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIHdoaWxlIChpbmRleCA8IG1fcHJvY2VkdXJlLT5tX3Zh
bHVlcy5zaXplKCkgJiYgIW1fcHJvY2VkdXJlLT5tX3ZhbHVlc1tpbmRleF0pCi0gICAgICAgICAg
ICAgICAgICAgIGluZGV4Kys7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4OwotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICBjb25zdCBQcm9jZWR1cmUqIG1fcHJvY2VkdXJlOwotICAg
ICAgICAgICAgdW5zaWduZWQgbV9pbmRleDsKLSAgICAgICAgfTsKLQotICAgICAgICBpdGVyYXRv
ciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKG1fcHJvY2VkdXJlLCAwKTsgfQotICAg
ICAgICBpdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcihtX3Byb2NlZHVyZSwg
bV9wcm9jZWR1cmUubV92YWx1ZXMuc2l6ZSgpKTsgfQotCi0gICAgICAgIHVuc2lnbmVkIHNpemUo
KSBjb25zdCB7IHJldHVybiBtX3Byb2NlZHVyZS5tX3ZhbHVlcy5zaXplKCk7IH0KLSAgICAgICAg
VmFsdWUqIGF0KHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBtX3Byb2NlZHVyZS5tX3Zh
bHVlc1tpbmRleF0uZ2V0KCk7IH0KLSAgICAgICAgVmFsdWUqIG9wZXJhdG9yW10odW5zaWduZWQg
aW5kZXgpIGNvbnN0IHsgcmV0dXJuIGF0KGluZGV4KTsgfQotICAgICAgICAKLSAgICBwcml2YXRl
OgotICAgICAgICBjb25zdCBQcm9jZWR1cmUmIG1fcHJvY2VkdXJlOwotICAgIH07CisgICAgU3Bh
cnNlQ29sbGVjdGlvbjxWYXJpYWJsZT4mIHZhcmlhYmxlcygpIHsgcmV0dXJuIG1fdmFyaWFibGVz
OyB9CisgICAgY29uc3QgU3BhcnNlQ29sbGVjdGlvbjxWYXJpYWJsZT4mIHZhcmlhYmxlcygpIGNv
bnN0IHsgcmV0dXJuIG1fdmFyaWFibGVzOyB9CisKKyAgICAvLyBTaG9ydCBmb3IgdmFyaWFibGVz
KCkucmVtb3ZlKCkuIEl0J3MgYmV0dGVyIHRvIGNhbGwgdGhpcyBtZXRob2Qgc2luY2UgaXQncyBv
dXQgb2YgbGluZS4KKyAgICB2b2lkIGRlbGV0ZVZhcmlhYmxlKFZhcmlhYmxlKik7CiAKLSAgICBj
b25zdCBWYWx1ZXNDb2xsZWN0aW9uJiB2YWx1ZXMoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlc0Nv
bGxlY3Rpb247IH0KKyAgICBTcGFyc2VDb2xsZWN0aW9uPFZhbHVlPiYgdmFsdWVzKCkgeyByZXR1
cm4gbV92YWx1ZXM7IH0KKyAgICBjb25zdCBTcGFyc2VDb2xsZWN0aW9uPFZhbHVlPiYgdmFsdWVz
KCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXM7IH0KIAorICAgIC8vIFNob3J0IGZvciB2YWx1ZXMo
KS5yZW1vdmUoKS4gSXQncyBiZXR0ZXIgdG8gY2FsbCB0aGlzIG1ldGhvZCBzaW5jZSBpdCdzIG91
dCBvZiBsaW5lLgogICAgIHZvaWQgZGVsZXRlVmFsdWUoVmFsdWUqKTsKIAogICAgIC8vIEEgdmFs
aWQgcHJvY2VkdXJlIGNhbm5vdCBjb250YWluIGFueSBvcnBoYW4gdmFsdWVzLiBBbiBvcnBoYW4g
aXMgYSB2YWx1ZSB0aGF0IGlzIG5vdCBpbgpAQCAtMzY3LDE3ICsyNDcsMTQgQEAgcHVibGljOgog
CiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBCbG9ja0luc2VydGlvblNldDsKLSAgICAKLSAg
ICB2b2lkIHNldEJsb2NrT3JkZXJJbXBsKFZlY3RvcjxCYXNpY0Jsb2NrKj4mKTsKIAotICAgIHNp
emVfdCBhZGRTdGFja1Nsb3RJbmRleCgpOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHNpemVfdCBh
ZGRWYWx1ZUluZGV4KCk7CisgICAgVmFsdWUqIGFkZFZhbHVlSW1wbChWYWx1ZSopOworICAgIHZv
aWQgc2V0QmxvY2tPcmRlckltcGwoVmVjdG9yPEJhc2ljQmxvY2sqPiYpOwogCi0gICAgVmVjdG9y
PHN0ZDo6dW5pcXVlX3B0cjxTdGFja1Nsb3Q+PiBtX3N0YWNrU2xvdHM7CisgICAgU3BhcnNlQ29s
bGVjdGlvbjxTdGFja1Nsb3Q+IG1fc3RhY2tTbG90czsKKyAgICBTcGFyc2VDb2xsZWN0aW9uPFZh
cmlhYmxlPiBtX3ZhcmlhYmxlczsKICAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEJhc2ljQmxv
Y2s+PiBtX2Jsb2NrczsKLSAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPFZhbHVlPj4gbV92YWx1
ZXM7Ci0gICAgVmVjdG9yPHNpemVfdD4gbV9zdGFja1Nsb3RJbmRleEZyZWVMaXN0OwotICAgIFZl
Y3RvcjxzaXplX3Q+IG1fdmFsdWVJbmRleEZyZWVMaXN0OworICAgIFNwYXJzZUNvbGxlY3Rpb248
VmFsdWU+IG1fdmFsdWVzOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxDRkc+IG1fY2ZnOwogICAgIHN0
ZDo6dW5pcXVlX3B0cjxEb21pbmF0b3JzPiBtX2RvbWluYXRvcnM7CiAgICAgSGFzaFNldDxWYWx1
ZUtleT4gbV9mYXN0Q29uc3RhbnRzOwpAQCAtMzg2LDcgKzI2Myw2IEBAIHByaXZhdGU6CiAgICAg
c3RkOjp1bmlxdWVfcHRyPEFpcjo6Q29kZT4gbV9jb2RlOwogICAgIFJlZlB0cjxTaGFyZWRUYXNr
PHZvaWQoUHJpbnRTdHJlYW0mLCBPcmlnaW4pPj4gbV9vcmlnaW5QcmludGVyOwogICAgIGNvbnN0
IHZvaWQqIG1fZnJvbnRlbmREYXRhOwotICAgIFZhbHVlc0NvbGxlY3Rpb24gbV92YWx1ZXNDb2xs
ZWN0aW9uOwogICAgIFBDVG9PcmlnaW5NYXAgbV9wY1RvT3JpZ2luTWFwOwogfTsKIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlSW5saW5lcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZUlubGluZXMuaAkocmV2aXNp
b24gMTk1OTcwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlSW5saW5l
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiwxMSArMzYsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIEIzIHsKIHRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlVHlwZSwgdHlwZW5hbWUuLi4gQXJn
dW1lbnRzPgogVmFsdWVUeXBlKiBQcm9jZWR1cmU6OmFkZChBcmd1bWVudHMuLi4gYXJndW1lbnRz
KQogewotICAgIHNpemVfdCBpbmRleCA9IGFkZFZhbHVlSW5kZXgoKTsKLSAgICBzdGQ6OnVuaXF1
ZV9wdHI8VmFsdWVUeXBlPiB2YWx1ZShuZXcgVmFsdWVUeXBlKGluZGV4LCBhcmd1bWVudHMuLi4p
KTsKLSAgICBWYWx1ZVR5cGUqIHJlc3VsdCA9IHZhbHVlLmdldCgpOwotICAgIG1fdmFsdWVzW2lu
ZGV4XSA9IFdURk1vdmUodmFsdWUpOwotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIHN0
YXRpY19jYXN0PFZhbHVlVHlwZSo+KGFkZFZhbHVlSW1wbChuZXcgVmFsdWVUeXBlKGFyZ3VtZW50
cy4uLikpKTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzUmVkdWNlU3RyZW5ndGguY3BwCShyZXZpc2lvbiAxOTU5NzAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQ1LDYgKzQ1LDggQEAKICNpbmNsdWRlICJCM1Vwc2lsb25WYWx1ZS5oIgog
I2luY2x1ZGUgIkIzVmFsdWVLZXlJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQjNWYWx1ZUlubGluZXMu
aCIKKyNpbmNsdWRlICJCM1ZhcmlhYmxlLmgiCisjaW5jbHVkZSAiQjNWYXJpYWJsZVZhbHVlLmgi
CiAjaW5jbHVkZSA8d3RmL0dyYXBoTm9kZVdvcmtsaXN0Lmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hN
YXAuaD4KIApAQCAtMjI4MywxMyArMjI4NSwxNSBAQCBwcml2YXRlOgogICAgICAgICBWZWN0b3I8
VXBzaWxvblZhbHVlKiwgNjQ+IHVwc2lsb25zOwogICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJs
b2NrIDogbV9wcm9jKSB7CiAgICAgICAgICAgICBmb3IgKFZhbHVlKiB2YWx1ZSA6ICpibG9jaykg
ewotICAgICAgICAgICAgICAgIEVmZmVjdHMgZWZmZWN0cyA9IHZhbHVlLT5lZmZlY3RzKCk7Ci0g
ICAgICAgICAgICAgICAgLy8gV2UgZG9uJ3QgY2FyZSBhYm91dCBTU0EgRWZmZWN0cywgc2luY2Ug
d2UgbW9kZWwgdGhlbSBtb3JlIGFjY3VyYXRlbHkgdGhhbiB0aGUKLSAgICAgICAgICAgICAgICAv
LyBlZmZlY3RzKCkgbWV0aG9kIGRvZXMuCi0gICAgICAgICAgICAgICAgZWZmZWN0cy53cml0ZXNT
U0FTdGF0ZSA9IGZhbHNlOwotICAgICAgICAgICAgICAgIGVmZmVjdHMucmVhZHNTU0FTdGF0ZSA9
IGZhbHNlOworICAgICAgICAgICAgICAgIEVmZmVjdHMgZWZmZWN0czsKKyAgICAgICAgICAgICAg
ICAvLyBXZSBkb24ndCBjYXJlIGFib3V0IGVmZmVjdHMgb2YgU1NBIG9wZXJhdGlvbnMsIHNpbmNl
IHdlIG1vZGVsIHRoZW0gbW9yZQorICAgICAgICAgICAgICAgIC8vIGFjY3VyYXRlbHkgdGhhIHRo
ZSBlZmZlY3RzKCkgbWV0aG9kIGRvZXMuCisgICAgICAgICAgICAgICAgaWYgKHZhbHVlLT5vcGNv
ZGUoKSAhPSBQaGkgJiYgdmFsdWUtPm9wY29kZSgpICE9IFVwc2lsb24pCisgICAgICAgICAgICAg
ICAgICAgIGVmZmVjdHMgPSB2YWx1ZS0+ZWZmZWN0cygpOworICAgICAgICAgICAgICAgIAogICAg
ICAgICAgICAgICAgIGlmIChlZmZlY3RzLm11c3RFeGVjdXRlKCkpCiAgICAgICAgICAgICAgICAg
ICAgIHdvcmtsaXN0LnB1c2godmFsdWUpOworICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgIGlmIChVcHNpbG9uVmFsdWUqIHVwc2lsb24gPSB2YWx1ZS0+YXM8VXBzaWxvblZhbHVlPigp
KQogICAgICAgICAgICAgICAgICAgICB1cHNpbG9ucy5hcHBlbmQodXBzaWxvbik7CiAgICAgICAg
ICAgICB9CkBAIC0yMzE0LDcgKzIzMTgsNyBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9CiAKLSAgICAgICAgSW5kZXhTZXQ8U3RhY2tTbG90PiBsaXZlU3RhY2tT
bG90czsKKyAgICAgICAgSW5kZXhTZXQ8VmFyaWFibGU+IGxpdmVWYXJpYWJsZXM7CiAgICAgICAg
IAogICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9wcm9jKSB7CiAgICAgICAgICAg
ICBzaXplX3Qgc291cmNlSW5kZXggPSAwOwpAQCAtMjMyMiw4ICsyMzI2LDggQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgIHdoaWxlIChzb3VyY2VJbmRleCA8IGJsb2NrLT5zaXplKCkpIHsKICAgICAg
ICAgICAgICAgICBWYWx1ZSogdmFsdWUgPSBibG9jay0+YXQoc291cmNlSW5kZXgrKyk7CiAgICAg
ICAgICAgICAgICAgaWYgKHdvcmtsaXN0LnNhdyh2YWx1ZSkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKFNsb3RCYXNlVmFsdWUqIHNsb3RCYXNlID0gdmFsdWUtPmFzPFNsb3RCYXNlVmFsdWU+
KCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBsaXZlU3RhY2tTbG90cy5hZGQoc2xvdEJhc2Ut
PnNsb3QoKSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChWYXJpYWJsZVZhbHVlKiB2YXJpYWJs
ZVZhbHVlID0gdmFsdWUtPmFzPFZhcmlhYmxlVmFsdWU+KCkpCisgICAgICAgICAgICAgICAgICAg
ICAgICBsaXZlVmFyaWFibGVzLmFkZCh2YXJpYWJsZVZhbHVlLT52YXJpYWJsZSgpKTsKICAgICAg
ICAgICAgICAgICAgICAgYmxvY2stPmF0KHRhcmdldEluZGV4KyspID0gdmFsdWU7CiAgICAgICAg
ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgbV9wcm9jLmRlbGV0ZVZhbHVl
KHZhbHVlKTsKQEAgLTIzMzgsMTAgKzIzNDIsOSBAQCBwcml2YXRlOgogICAgICAgICAgICAgYmxv
Y2stPnZhbHVlcygpLnJlc2l6ZSh0YXJnZXRJbmRleCk7CiAgICAgICAgIH0KIAotICAgICAgICBm
b3IgKFN0YWNrU2xvdCogc2xvdCA6IG1fcHJvYy5zdGFja1Nsb3RzKCkpIHsKLSAgICAgICAgICAg
IGlmIChzbG90LT5pc0xvY2tlZCgpIHx8IGxpdmVTdGFja1Nsb3RzLmNvbnRhaW5zKHNsb3QpKQot
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgbV9wcm9jLmRlbGV0ZVN0YWNr
U2xvdChzbG90KTsKKyAgICAgICAgZm9yIChWYXJpYWJsZSogdmFyaWFibGUgOiBtX3Byb2MudmFy
aWFibGVzKCkpIHsKKyAgICAgICAgICAgIGlmICghbGl2ZVZhcmlhYmxlcy5jb250YWlucyh2YXJp
YWJsZSkpCisgICAgICAgICAgICAgICAgbV9wcm9jLmRlbGV0ZVZhcmlhYmxlKHZhcmlhYmxlKTsK
ICAgICAgICAgfQogICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU2xv
dEJhc2VWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Ns
b3RCYXNlVmFsdWUuaAkocmV2aXNpb24gMTk1OTcwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzU2xvdEJhc2VWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCw4ICs1MCw4IEBAIHBy
b3RlY3RlZDoKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKIAotICAgIFNs
b3RCYXNlVmFsdWUodW5zaWduZWQgaW5kZXgsIE9yaWdpbiBvcmlnaW4sIFN0YWNrU2xvdCogc2xv
dCkKLSAgICAgICAgOiBWYWx1ZShpbmRleCwgQ2hlY2tlZE9wY29kZSwgU2xvdEJhc2UsIHBvaW50
ZXJUeXBlKCksIG9yaWdpbikKKyAgICBTbG90QmFzZVZhbHVlKE9yaWdpbiBvcmlnaW4sIFN0YWNr
U2xvdCogc2xvdCkKKyAgICAgICAgOiBWYWx1ZShDaGVja2VkT3Bjb2RlLCBTbG90QmFzZSwgcG9p
bnRlclR5cGUoKSwgb3JpZ2luKQogICAgICAgICAsIG1fc2xvdChzbG90KQogICAgIHsKICAgICB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTcGFyc2VDb2xsZWN0aW9uLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3BhcnNlQ29sbGVjdGlvbi5o
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3BhcnNlQ29sbGVj
dGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQ2IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNTcGFyc2VDb2xsZWN0aW9u
X2gKKyNkZWZpbmUgQjNTcGFyc2VDb2xsZWN0aW9uX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisK
KyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgor
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworLy8gQjM6OlByb2NlZHVyZSBhbmQg
QWlyOjpDb2RlIGhhdmUgYSBsb3Qgb2YgY29sbGVjdGlvbnMgb2YgaW5kZXhlZCB0aGluZ3MuIFRo
aXMgaGFzIGFsbCBvZiB0aGUKKy8vIGxvZ2ljLgorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorY2xh
c3MgU3BhcnNlQ29sbGVjdGlvbiB7CisgICAgdHlwZWRlZiBWZWN0b3I8c3RkOjp1bmlxdWVfcHRy
PFQ+PiBWZWN0b3JUeXBlOworICAgIAorcHVibGljOgorICAgIFNwYXJzZUNvbGxlY3Rpb24oKQor
ICAgIHsKKyAgICB9CisKKyAgICBUKiBhZGQoc3RkOjp1bmlxdWVfcHRyPFQ+IHZhbHVlKQorICAg
IHsKKyAgICAgICAgVCogcmVzdWx0ID0gdmFsdWUuZ2V0KCk7CisgICAgICAgIAorICAgICAgICBz
aXplX3QgaW5kZXg7CisgICAgICAgIGlmIChtX2luZGV4RnJlZUxpc3QuaXNFbXB0eSgpKSB7Cisg
ICAgICAgICAgICBpbmRleCA9IG1fdmVjdG9yLnNpemUoKTsKKyAgICAgICAgICAgIG1fdmVjdG9y
LmFwcGVuZChudWxscHRyKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAgICBpbmRleCA9IG1f
aW5kZXhGcmVlTGlzdC50YWtlTGFzdCgpOworCisgICAgICAgIHZhbHVlLT5tX2luZGV4ID0gaW5k
ZXg7CisKKyAgICAgICAgbV92ZWN0b3JbaW5kZXhdID0gV1RGTW92ZSh2YWx1ZSk7CisKKyAgICAg
ICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1
bWVudHM+CisgICAgVCogYWRkTmV3KEFyZ3VtZW50cyYmLi4uIGFyZ3VtZW50cykKKyAgICB7Cisg
ICAgICAgIHJldHVybiBhZGQoc3RkOjp1bmlxdWVfcHRyPFQ+KG5ldyBUKHN0ZDo6Zm9yd2FyZDxB
cmd1bWVudHM+KGFyZ3VtZW50cykuLi4pKSk7CisgICAgfQorCisgICAgdm9pZCByZW1vdmUoVCog
dmFsdWUpCisgICAgeworICAgICAgICBSRUxFQVNFX0FTU0VSVChtX3ZlY3Rvclt2YWx1ZS0+bV9p
bmRleF0uZ2V0KCkgPT0gdmFsdWUpOworICAgICAgICBtX2luZGV4RnJlZUxpc3QuYXBwZW5kKHZh
bHVlLT5tX2luZGV4KTsKKyAgICAgICAgbV92ZWN0b3JbdmFsdWUtPm1faW5kZXhdID0gbnVsbHB0
cjsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV92ZWN0b3Iu
c2l6ZSgpOyB9CisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyByZXR1cm4gbV92ZWN0b3IuaXNF
bXB0eSgpOyB9CisgICAgCisgICAgVCogYXQodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJu
IG1fdmVjdG9yW2luZGV4XS5nZXQoKTsgfQorICAgIFQqIG9wZXJhdG9yW10odW5zaWduZWQgaW5k
ZXgpIGNvbnN0IHsgcmV0dXJuIGF0KGluZGV4KTsgfQorCisgICAgY2xhc3MgaXRlcmF0b3Igewor
ICAgIHB1YmxpYzoKKyAgICAgICAgaXRlcmF0b3IoKQorICAgICAgICAgICAgOiBtX2NvbGxlY3Rp
b24obnVsbHB0cikKKyAgICAgICAgICAgICwgbV9pbmRleCgwKQorICAgICAgICB7CisgICAgICAg
IH0KKworICAgICAgICBpdGVyYXRvcihjb25zdCBTcGFyc2VDb2xsZWN0aW9uJiBjb2xsZWN0aW9u
LCB1bnNpZ25lZCBpbmRleCkKKyAgICAgICAgICAgIDogbV9jb2xsZWN0aW9uKCZjb2xsZWN0aW9u
KQorICAgICAgICAgICAgLCBtX2luZGV4KGZpbmROZXh0KGluZGV4KSkKKyAgICAgICAgeworICAg
ICAgICB9CisKKyAgICAgICAgVCogb3BlcmF0b3IqKCkKKyAgICAgICAgeworICAgICAgICAgICAg
cmV0dXJuIG1fY29sbGVjdGlvbi0+YXQobV9pbmRleCk7CisgICAgICAgIH0KKworICAgICAgICBp
dGVyYXRvciYgb3BlcmF0b3IrKygpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1faW5kZXggPSBm
aW5kTmV4dChtX2luZGV4ICsgMSk7CisgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAg
IH0KKworICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25z
dAorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQobV9jb2xsZWN0aW9uID09IG90aGVyLm1f
Y29sbGVjdGlvbik7CisgICAgICAgICAgICByZXR1cm4gbV9pbmRleCA9PSBvdGhlci5tX2luZGV4
OworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBv
dGhlcikgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3Ro
ZXIpOworICAgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICB1bnNpZ25lZCBmaW5kTmV4
dCh1bnNpZ25lZCBpbmRleCkKKyAgICAgICAgeworICAgICAgICAgICAgd2hpbGUgKGluZGV4IDwg
bV9jb2xsZWN0aW9uLT5zaXplKCkgJiYgIW1fY29sbGVjdGlvbi0+YXQoaW5kZXgpKQorICAgICAg
ICAgICAgICAgIGluZGV4Kys7CisgICAgICAgICAgICByZXR1cm4gaW5kZXg7CisgICAgICAgIH0K
KworICAgICAgICBjb25zdCBTcGFyc2VDb2xsZWN0aW9uKiBtX2NvbGxlY3Rpb247CisgICAgICAg
IHVuc2lnbmVkIG1faW5kZXg7CisgICAgfTsKKworICAgIGl0ZXJhdG9yIGJlZ2luKCkgY29uc3Qg
eyByZXR1cm4gaXRlcmF0b3IoKnRoaXMsIDApOyB9CisgICAgaXRlcmF0b3IgZW5kKCkgY29uc3Qg
eyByZXR1cm4gaXRlcmF0b3IoKnRoaXMsIHNpemUoKSk7IH0KKworcHJpdmF0ZToKKyAgICBWZWN0
b3I8c3RkOjp1bmlxdWVfcHRyPFQ+PiBtX3ZlY3RvcjsKKyAgICBWZWN0b3I8c2l6ZV90PiBtX2lu
ZGV4RnJlZUxpc3Q7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8v
IEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM1NwYXJzZUNvbGxlY3Rpb25faAorCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja1Nsb3QuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrU2xvdC5jcHAJKHJldmlzaW9uIDE5NTk3
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrU2xvdC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTQxLDEzICs0MSwxMSBAQCB2b2lkIFN0YWNrU2xvdDo6ZHVtcChQcmludFN0cmVh
bSYgb3V0KSBjCiAKIHZvaWQgU3RhY2tTbG90OjpkZWVwRHVtcChQcmludFN0cmVhbSYgb3V0KSBj
b25zdAogewotICAgIG91dC5wcmludCgiYnl0ZVNpemUgPSAiLCBtX2J5dGVTaXplLCAiLCBvZmZz
ZXRGcm9tRlAgPSAiLCBtX29mZnNldEZyb21GUCwgIiwga2luZCA9ICIsIG1fa2luZCk7CisgICAg
b3V0LnByaW50KCJieXRlU2l6ZSA9ICIsIG1fYnl0ZVNpemUsICIsIG9mZnNldEZyb21GUCA9ICIs
IG1fb2Zmc2V0RnJvbUZQKTsKIH0KIAotU3RhY2tTbG90OjpTdGFja1Nsb3QodW5zaWduZWQgaW5k
ZXgsIHVuc2lnbmVkIGJ5dGVTaXplLCBTdGFja1Nsb3RLaW5kIGtpbmQpCi0gICAgOiBtX2luZGV4
KGluZGV4KQotICAgICwgbV9ieXRlU2l6ZShieXRlU2l6ZSkKLSAgICAsIG1fa2luZChraW5kKQor
U3RhY2tTbG90OjpTdGFja1Nsb3QodW5zaWduZWQgYnl0ZVNpemUpCisgICAgOiBtX2J5dGVTaXpl
KGJ5dGVTaXplKQogewogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFj
a1Nsb3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja1Ns
b3QuaAkocmV2aXNpb24gMTk1OTcwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3Rh
Y2tTbG90LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcgQEAKIAogI2lmIEVOQUJMRShC
M19KSVQpCiAKLSNpbmNsdWRlICJCM1N0YWNrU2xvdEtpbmQuaCIKKyNpbmNsdWRlICJCM1NwYXJz
ZUNvbGxlY3Rpb24uaCIKICNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgogI2luY2x1ZGUgPHd0
Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgpAQCAtNDksOCAr
NDksNiBAQCBwdWJsaWM6CiAgICAgflN0YWNrU2xvdCgpOwogCiAgICAgdW5zaWduZWQgYnl0ZVNp
emUoKSBjb25zdCB7IHJldHVybiBtX2J5dGVTaXplOyB9Ci0gICAgU3RhY2tTbG90S2luZCBraW5k
KCkgY29uc3QgeyByZXR1cm4gbV9raW5kOyB9Ci0gICAgYm9vbCBpc0xvY2tlZCgpIGNvbnN0IHsg
cmV0dXJuIG1fa2luZCA9PSBTdGFja1Nsb3RLaW5kOjpMb2NrZWQ7IH0KICAgICB1bnNpZ25lZCBp
bmRleCgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXg7IH0KIAogICAgIC8vIFRoaXMgZ2V0cyBhc3Np
Z25lZCBhdCB0aGUgZW5kIG9mIGNvbXBpbGF0aW9uLiBCdXQsIHlvdSBjYW4gdG90YWxseSBwaW4g
c3RhY2sgc2xvdHMuIFVzZSB0aGUKQEAgLTYzLDE4ICs2MSwxOCBAQCBwdWJsaWM6CiAgICAgICAg
IG1fb2Zmc2V0RnJvbUZQID0gdmFsdWU7CiAgICAgfQogCi0gICAgdm9pZCBkdW1wKFByaW50U3Ry
ZWFtJiBvdXQpIGNvbnN0OworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OwogICAg
IHZvaWQgZGVlcER1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKIAogcHJpdmF0ZToKICAgICBmcmll
bmQgY2xhc3MgQWlyOjpTdGFja1Nsb3Q7CiAgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKyAg
ICBmcmllbmQgY2xhc3MgU3BhcnNlQ29sbGVjdGlvbjxTdGFja1Nsb3Q+OwogCi0gICAgU3RhY2tT
bG90KHVuc2lnbmVkIGluZGV4LCB1bnNpZ25lZCBieXRlU2l6ZSwgU3RhY2tTbG90S2luZCk7Cisg
ICAgU3RhY2tTbG90KHVuc2lnbmVkIGJ5dGVTaXplKTsKIAotICAgIHVuc2lnbmVkIG1faW5kZXg7
Ci0gICAgdW5zaWduZWQgbV9ieXRlU2l6ZTsKLSAgICBTdGFja1Nsb3RLaW5kIG1fa2luZDsKKyAg
ICB1bnNpZ25lZCBtX2luZGV4IHsgVUlOVF9NQVggfTsKKyAgICB1bnNpZ25lZCBtX2J5dGVTaXpl
IHsgMCB9OwogICAgIGludHB0cl90IG1fb2Zmc2V0RnJvbUZQIHsgMCB9OwogfTsKIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tTbG90S2luZC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tTbG90S2luZC5jcHAJKHJldmlzaW9u
IDE5NTk3MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrU2xvdEtpbmQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUyICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQot
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUgIkIz
U3RhY2tTbG90S2luZC5oIgotCi0jaWYgRU5BQkxFKEIzX0pJVCkKLQotI2luY2x1ZGUgPHd0Zi9Q
cmludFN0cmVhbS5oPgotCi1uYW1lc3BhY2UgV1RGIHsKLQotdXNpbmcgbmFtZXNwYWNlIEpTQzo6
QjM7Ci0KLXZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBTdGFja1Nsb3RLaW5k
IGtpbmQpCi17Ci0gICAgc3dpdGNoIChraW5kKSB7Ci0gICAgY2FzZSBTdGFja1Nsb3RLaW5kOjpM
b2NrZWQ6Ci0gICAgICAgIG91dC5wcmludCgiTG9ja2VkIik7Ci0gICAgICAgIHJldHVybjsKLSAg
ICBjYXNlIFN0YWNrU2xvdEtpbmQ6OkFub255bW91czoKLSAgICAgICAgb3V0LnByaW50KCJBbm9u
eW1vdXMiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXVEYKLQotI2VuZGlmIC8vIEVOQUJMRShC
M19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja1Nsb3RLaW5kLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tTbG90S2luZC5o
CShyZXZpc2lvbiAxOTU5NzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja1Ns
b3RLaW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNjMgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
LSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgQjNTdGFja1Nsb3RL
aW5kX2gKLSNkZWZpbmUgQjNTdGFja1Nsb3RLaW5kX2gKLQotI2lmIEVOQUJMRShCM19KSVQpCi0K
LW5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewotCi1lbnVtIGNsYXNzIFN0YWNrU2xvdEtp
bmQgOiB1aW50OF90IHsKLSAgICAvLyBBIGxvY2tlZCBzdGFjayBzbG90IG5lZWRzIHRvIGJlIGtl
cHQgZGlzam9pbnQgZnJvbSBhbGwgb3RoZXJzIGJlY2F1c2Ugd2UgaW50ZW5kIHRvIGVzY2FwZQot
ICAgIC8vIGl0IGV2ZW4gaWYgdGhhdCdzIG5vdCBvYnZpb3VzLiBUaGlzIGhhcHBlbnMgd2hlbiB0
aGUgcnVudGltZSB0YWtlcyB0aGUgYWRkcmVzcyBvZiBhIHN0YWNrCi0gICAgLy8gc2xvdC4KLSAg
ICBMb2NrZWQsCi0KLSAgICAvLyBUaGVzZSBzdGFjayBzbG90cyBiZWhhdmUgbGlrZSB2YXJpYWJs
ZXMuIFVuZGVmaW5lZCBiZWhhdmlvciBoYXBwZW5zIGlmIHlvdSBzdG9yZSBsZXNzIHRoYW4KLSAg
ICAvLyB0aGUgd2lkdGggb2YgdGhlIHNsb3QuCi0gICAgQW5vbnltb3VzCi0KLSAgICAvLyBGSVhN
RTogV2Ugc2hvdWxkIGFkZCBhIHRoaXJkIG1vZGUsIHdoaWNoIG1lYW5zIHRoYXQgdGhlIHN0YWNr
IHNsb3Qgd2lsbCBiZSByZWFkIGFzeW5jaHJvbm91c2x5Ci0gICAgLy8gYXMgd2l0aCBMb2NrZWQs
IGJ1dCBuZXZlciB3cml0dGVuIHRvIGFzeW5jaHJvbm91c2x5LiBUaGVuLCBBaXIgY291bGQgb3B0
aW1pemUgc3BpbGxpbmcgYW5kCi0gICAgLy8gZmlsbGluZyBieSB0cmFja2luZyB3aGV0aGVyIHRo
ZSB2YWx1ZSBoYWQgYmVlbiBzdG9yZWQgdG8gYSByZWFkLW9ubHkgbG9ja2VkIHNsb3QuIElmIGl0
IGhhZCwKLSAgICAvLyB0aGVuIHdlIGNhbiByZWZpbGwgZnJvbSB0aGF0IHNsb3QuCi0gICAgLy8g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MDU4NwotfTsKLQotfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkIzCi0KLW5hbWVzcGFjZSBXVEYgewotCi1jbGFzcyBQcmludFN0
cmVhbTsKLQotdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpCMzo6U3RhY2tT
bG90S2luZCk7Ci0KLX0gLy8gbmFtZXNwYWNlIFdURgotCi0jZW5kaWYgLy8gRU5BQkxFKEIzX0pJ
VCkKLQotI2VuZGlmIC8vIEIzU3RhY2tTbG90S2luZF9oCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1N0YWNrbWFwVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwVmFsdWUuY3BwCShyZXZpc2lvbiAxOTU5NzApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcFZhbHVlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtODMsOCArODMsOCBAQCB2b2lkIFN0YWNrbWFwVmFsdWU6OmR1bXBNZXRhKENvbW1hUHJp
bnRlCiAgICAgICAgICIsIGxhdGVDbG9iYmVyZWQgPSAiLCBtX2xhdGVDbG9iYmVyZWQsICIsIHVz
ZWRSZWdpc3RlcnMgPSAiLCBtX3VzZWRSZWdpc3RlcnMpOwogfQogCi1TdGFja21hcFZhbHVlOjpT
dGFja21hcFZhbHVlKHVuc2lnbmVkIGluZGV4LCBDaGVja2VkT3Bjb2RlVGFnLCBPcGNvZGUgb3Bj
b2RlLCBUeXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4pCi0gICAgOiBWYWx1ZShpbmRleCwgQ2hlY2tl
ZE9wY29kZSwgb3Bjb2RlLCB0eXBlLCBvcmlnaW4pCitTdGFja21hcFZhbHVlOjpTdGFja21hcFZh
bHVlKENoZWNrZWRPcGNvZGVUYWcsIE9wY29kZSBvcGNvZGUsIFR5cGUgdHlwZSwgT3JpZ2luIG9y
aWdpbikKKyAgICA6IFZhbHVlKENoZWNrZWRPcGNvZGUsIG9wY29kZSwgdHlwZSwgb3JpZ2luKQog
ewogICAgIEFTU0VSVChhY2NlcHRzKG9wY29kZSkpOwogfQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzU3RhY2ttYXBWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1N0YWNrbWFwVmFsdWUuaAkocmV2aXNpb24gMTk1OTcwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
ODQsNyArMjg0LDcgQEAgcHJvdGVjdGVkOgogICAgIHZvaWQgZHVtcENoaWxkcmVuKENvbW1hUHJp
bnRlciYsIFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CiAgICAgdm9pZCBkdW1wTWV0YShD
b21tYVByaW50ZXImLCBQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgU3RhY2tt
YXBWYWx1ZSh1bnNpZ25lZCBpbmRleCwgQ2hlY2tlZE9wY29kZVRhZywgT3Bjb2RlLCBUeXBlLCBP
cmlnaW4pOworICAgIFN0YWNrbWFwVmFsdWUoQ2hlY2tlZE9wY29kZVRhZywgT3Bjb2RlLCBUeXBl
LCBPcmlnaW4pOwogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBDaGVja1NwZWNpYWw7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTd2l0Y2hWYWx1ZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3dpdGNoVmFsdWUuY3BwCShyZXZpc2lv
biAxOTU5NzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTd2l0Y2hWYWx1ZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTY4LDkgKzY4LDggQEAgVmFsdWUqIFN3aXRjaFZhbHVlOjpjbG9u
ZUltcGwoKSBjb25zdAogICAgIHJldHVybiBuZXcgU3dpdGNoVmFsdWUoKnRoaXMpOwogfQogCi1T
d2l0Y2hWYWx1ZTo6U3dpdGNoVmFsdWUoCi0gICAgdW5zaWduZWQgaW5kZXgsIE9yaWdpbiBvcmln
aW4sIFZhbHVlKiBjaGlsZCwgY29uc3QgRnJlcXVlbnRlZEJsb2NrJiBmYWxsVGhyb3VnaCkKLSAg
ICA6IENvbnRyb2xWYWx1ZShpbmRleCwgU3dpdGNoLCBWb2lkLCBvcmlnaW4sIGNoaWxkKQorU3dp
dGNoVmFsdWU6OlN3aXRjaFZhbHVlKE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBjaGlsZCwgY29uc3Qg
RnJlcXVlbnRlZEJsb2NrJiBmYWxsVGhyb3VnaCkKKyAgICA6IENvbnRyb2xWYWx1ZShTd2l0Y2gs
IFZvaWQsIG9yaWdpbiwgY2hpbGQpCiB7CiAgICAgbV9zdWNjZXNzb3JzLmFwcGVuZChmYWxsVGhy
b3VnaCk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTd2l0Y2hWYWx1ZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N3aXRjaFZhbHVlLmgJ
KHJldmlzaW9uIDE5NTk3MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N3aXRjaFZh
bHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyMSw4ICsxMjEsNyBAQCBwcm90ZWN0ZWQ6CiBwcml2
YXRlOgogICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7CiAKLSAgICBKU19FWFBPUlRfUFJJVkFU
RSBTd2l0Y2hWYWx1ZSgKLSAgICAgICAgdW5zaWduZWQgaW5kZXgsIE9yaWdpbiwgVmFsdWUqIGNo
aWxkLCBjb25zdCBGcmVxdWVudGVkQmxvY2smIGZhbGxUaHJvdWdoKTsKKyAgICBKU19FWFBPUlRf
UFJJVkFURSBTd2l0Y2hWYWx1ZShPcmlnaW4sIFZhbHVlKiBjaGlsZCwgY29uc3QgRnJlcXVlbnRl
ZEJsb2NrJiBmYWxsVGhyb3VnaCk7CiAKICAgICBWZWN0b3I8aW50NjRfdD4gbV92YWx1ZXM7CiB9
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVXBzaWxvblZhbHVlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVXBzaWxvblZhbHVlLmgJKHJldmlz
aW9uIDE5NTk3MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Vwc2lsb25WYWx1ZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC01Nyw4ICs1Nyw4IEBAIHByaXZhdGU6CiAgICAgLy8gTm90ZSB0
aGF0IHBhc3NpbmcgdGhlIFBoaSBkdXJpbmcgY29uc3RydWN0aW9uIGlzIG9wdGlvbmFsLiBBIHZh
bGlkIHBhdHRlcm4gaXMgdG8gZmlyc3QgY3JlYXRlCiAgICAgLy8gdGhlIFVwc2lsb25zIHdpdGhv
dXQgdGhlIFBoaSwgdGhlbiBjcmVhdGUgdGhlIFBoaSwgdGhlbiBnbyBiYWNrIGFuZCB0ZWxsIHRo
ZSBVcHNpbG9ucyBhYm91dAogICAgIC8vIHRoZSBQaGkuIFRoaXMgYWxsb3dzIHlvdSB0byBlbWl0
IGNvZGUgaW4gaXRzIG5hdHVyYWwgb3JkZXIuCi0gICAgVXBzaWxvblZhbHVlKHVuc2lnbmVkIGlu
ZGV4LCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogdmFsdWUsIFZhbHVlKiBwaGkgPSBudWxscHRyKQot
ICAgICAgICA6IFZhbHVlKGluZGV4LCBDaGVja2VkT3Bjb2RlLCBVcHNpbG9uLCBWb2lkLCBvcmln
aW4sIHZhbHVlKQorICAgIFVwc2lsb25WYWx1ZShPcmlnaW4gb3JpZ2luLCBWYWx1ZSogdmFsdWUs
IFZhbHVlKiBwaGkgPSBudWxscHRyKQorICAgICAgICA6IFZhbHVlKENoZWNrZWRPcGNvZGUsIFVw
c2lsb24sIFZvaWQsIG9yaWdpbiwgdmFsdWUpCiAgICAgICAgICwgbV9waGkocGhpKQogICAgIHsK
ICAgICAgICAgaWYgKHBoaSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbGlk
YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWxpZGF0
ZS5jcHAJKHJldmlzaW9uIDE5NTk3MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Zh
bGlkYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcsOCBAQAogI2luY2x1ZGUgIkIz
U3RhY2tTbG90LmgiCiAjaW5jbHVkZSAiQjNVcHNpbG9uVmFsdWUuaCIKICNpbmNsdWRlICJCM1Zh
bHVlSW5saW5lcy5oIgorI2luY2x1ZGUgIkIzVmFyaWFibGUuaCIKKyNpbmNsdWRlICJCM1Zhcmlh
YmxlVmFsdWUuaCIKICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9TdHJp
bmdQcmludFN0cmVhbS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NTdHJpbmcuaD4KQEAgLTE1Myw2
ICsxNTUsMTQgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIFZBTElEQVRFKCF2YWx1ZS0+bnVt
Q2hpbGRyZW4oKSwgKCJBdCAiLCAqdmFsdWUpKTsKICAgICAgICAgICAgICAgICBWQUxJREFURSh2
YWx1ZS0+dHlwZSgpID09IEZsb2F0LCAoIkF0ICIsICp2YWx1ZSkpOwogICAgICAgICAgICAgICAg
IGJyZWFrOworICAgICAgICAgICAgY2FzZSBTZXQ6CisgICAgICAgICAgICAgICAgVkFMSURBVEUo
dmFsdWUtPm51bUNoaWxkcmVuKCkgPT0gMSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAg
ICAgICBWQUxJREFURSh2YWx1ZS0+Y2hpbGQoMCktPnR5cGUoKSA9PSB2YWx1ZS0+YXM8VmFyaWFi
bGVWYWx1ZT4oKS0+dmFyaWFibGUoKS0+dHlwZSgpLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBHZXQ6CisgICAgICAgICAgICAgICAg
VkFMSURBVEUoIXZhbHVlLT5udW1DaGlsZHJlbigpLCAoIkF0ICIsICp2YWx1ZSkpOworICAgICAg
ICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT50eXBlKCkgPT0gdmFsdWUtPmFzPFZhcmlhYmxlVmFs
dWU+KCktPnZhcmlhYmxlKCktPnR5cGUoKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgU2xvdEJhc2U6CiAgICAgICAgICAgICBjYXNl
IEZyYW1lUG9pbnRlcjoKICAgICAgICAgICAgICAgICBWQUxJREFURSghdmFsdWUtPm51bUNoaWxk
cmVuKCksICgiQXQgIiwgKnZhbHVlKSk7CkBAIC0zNzUsNiArMzg1LDkgQEAgcHVibGljOgogCiAg
ICAgICAgICAgICBWQUxJREFURSghKHZhbHVlLT5lZmZlY3RzKCkud3JpdGVzICYmIHZhbHVlLT5r
ZXkoKSksICgiQXQgIiwgKnZhbHVlKSk7CiAgICAgICAgIH0KKworICAgICAgICBmb3IgKFZhcmlh
YmxlKiB2YXJpYWJsZSA6IG1fcHJvY2VkdXJlLnZhcmlhYmxlcygpKQorICAgICAgICAgICAgVkFM
SURBVEUodmFyaWFibGUtPnR5cGUoKSAhPSBWb2lkLCAoIkF0ICIsICp2YXJpYWJsZSkpOwogICAg
IH0KIAogcHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5jcHAJKHJl
dmlzaW9uIDE5NTk3MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksNyBAQAogI2luY2x1ZGUgIkIzVXBzaWxvblZhbHVl
LmgiCiAjaW5jbHVkZSAiQjNWYWx1ZUlubGluZXMuaCIKICNpbmNsdWRlICJCM1ZhbHVlS2V5SW5s
aW5lcy5oIgorI2luY2x1ZGUgIkIzVmFyaWFibGVWYWx1ZS5oIgogI2luY2x1ZGUgPHd0Zi9Db21t
YVByaW50ZXIuaD4KICNpbmNsdWRlIDx3dGYvU3RyaW5nUHJpbnRTdHJlYW0uaD4KIApAQCAtNzIs
OSArNzMsMTAgQEAgdm9pZCBWYWx1ZTo6cmVwbGFjZVdpdGhJZGVudGl0eShWYWx1ZSogdgogCiAg
ICAgdGhpcy0+VmFsdWU6On5WYWx1ZSgpOwogCi0gICAgbmV3ICh0aGlzKSBWYWx1ZShpbmRleCwg
SWRlbnRpdHksIHR5cGUsIG9yaWdpbiwgdmFsdWUpOworICAgIG5ldyAodGhpcykgVmFsdWUoSWRl
bnRpdHksIHR5cGUsIG9yaWdpbiwgdmFsdWUpOwogCiAgICAgdGhpcy0+b3duZXIgPSBvd25lcjsK
KyAgICB0aGlzLT5tX2luZGV4ID0gaW5kZXg7CiB9CiAKIHZvaWQgVmFsdWU6OnJlcGxhY2VXaXRo
Tm9wKCkKQEAgLTg1LDkgKzg3LDEwIEBAIHZvaWQgVmFsdWU6OnJlcGxhY2VXaXRoTm9wKCkKIAog
ICAgIHRoaXMtPlZhbHVlOjp+VmFsdWUoKTsKIAotICAgIG5ldyAodGhpcykgVmFsdWUoaW5kZXgs
IE5vcCwgVm9pZCwgb3JpZ2luKTsKKyAgICBuZXcgKHRoaXMpIFZhbHVlKE5vcCwgVm9pZCwgb3Jp
Z2luKTsKIAogICAgIHRoaXMtPm93bmVyID0gb3duZXI7CisgICAgdGhpcy0+bV9pbmRleCA9IGlu
ZGV4OwogfQogCiB2b2lkIFZhbHVlOjpyZXBsYWNlV2l0aFBoaSgpCkBAIC0xMDQsOSArMTA3LDEw
IEBAIHZvaWQgVmFsdWU6OnJlcGxhY2VXaXRoUGhpKCkKIAogICAgIHRoaXMtPlZhbHVlOjp+VmFs
dWUoKTsKIAotICAgIG5ldyAodGhpcykgVmFsdWUoaW5kZXgsIFBoaSwgdHlwZSwgb3JpZ2luKTsK
KyAgICBuZXcgKHRoaXMpIFZhbHVlKFBoaSwgdHlwZSwgb3JpZ2luKTsKIAogICAgIHRoaXMtPm93
bmVyID0gb3duZXI7CisgICAgdGhpcy0+bV9pbmRleCA9IGluZGV4OwogfQogCiB2b2lkIFZhbHVl
OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CkBAIC00ODQsMTAgKzQ4OCwxMiBAQCBFZmZl
Y3RzIFZhbHVlOjplZmZlY3RzKCkgY29uc3QKICAgICAgICAgcmVzdWx0LnJlYWRzID0gSGVhcFJh
bmdlOjp0b3AoKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBVcHNpbG9uOgotICAgICAgICBy
ZXN1bHQud3JpdGVzU1NBU3RhdGUgPSB0cnVlOworICAgIGNhc2UgU2V0OgorICAgICAgICByZXN1
bHQud3JpdGVzTG9jYWxTdGF0ZSA9IHRydWU7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgUGhp
OgotICAgICAgICByZXN1bHQucmVhZHNTU0FTdGF0ZSA9IHRydWU7CisgICAgY2FzZSBHZXQ6Cisg
ICAgICAgIHJlc3VsdC5yZWFkc0xvY2FsU3RhdGUgPSB0cnVlOwogICAgICAgICBicmVhazsKICAg
ICBjYXNlIEp1bXA6CiAgICAgY2FzZSBCcmFuY2g6CkBAIC01OTgsNiArNjA0LDcgQEAgdm9pZCBW
YWx1ZTo6Y2hlY2tPcGNvZGUoT3Bjb2RlIG9wY29kZSkKICAgICBBU1NFUlQoIVBhdGNocG9pbnRW
YWx1ZTo6YWNjZXB0cyhvcGNvZGUpKTsKICAgICBBU1NFUlQoIVNsb3RCYXNlVmFsdWU6OmFjY2Vw
dHMob3Bjb2RlKSk7CiAgICAgQVNTRVJUKCFVcHNpbG9uVmFsdWU6OmFjY2VwdHMob3Bjb2RlKSk7
CisgICAgQVNTRVJUKCFWYXJpYWJsZVZhbHVlOjphY2NlcHRzKG9wY29kZSkpOwogfQogI2VuZGlm
IC8vICFBU1NFUlRfRElTQUJMRUQKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5o
CShyZXZpc2lvbiAxOTU5NzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiQjNFZmZlY3RzLmgi
CiAjaW5jbHVkZSAiQjNPcGNvZGUuaCIKICNpbmNsdWRlICJCM09yaWdpbi5oIgorI2luY2x1ZGUg
IkIzU3BhcnNlQ29sbGVjdGlvbi5oIgogI2luY2x1ZGUgIkIzVHlwZS5oIgogI2luY2x1ZGUgIkIz
VmFsdWVLZXkuaCIKICNpbmNsdWRlIDx3dGYvQ29tbWFQcmludGVyLmg+CkBAIC0yMjYsNiArMjI3
LDcgQEAgcHJvdGVjdGVkOgogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7
CisgICAgZnJpZW5kIGNsYXNzIFNwYXJzZUNvbGxlY3Rpb248VmFsdWU+OwogCiAgICAgLy8gQ2hl
Y2tzIHRoYXQgdGhpcyBvcGNvZGUgaXMgdmFsaWQgZm9yIHVzZSB3aXRoIEIzOjpWYWx1ZS4KICNp
ZiBBU1NFUlRfRElTQUJMRUQKQEAgLTI0MywyNyArMjQ1LDI0IEBAIHByb3RlY3RlZDoKICAgICAv
LyBJbnN0YW50aWF0ZSB2YWx1ZXMgdmlhIFByb2NlZHVyZS4KICAgICAvLyBUaGlzIGZvcm0gcmVx
dWlyZXMgc3BlY2lmeWluZyB0aGUgdHlwZSBleHBsaWNpdGx5OgogICAgIHRlbXBsYXRlPHR5cGVu
YW1lLi4uIEFyZ3VtZW50cz4KLSAgICBleHBsaWNpdCBWYWx1ZSh1bnNpZ25lZCBpbmRleCwgQ2hl
Y2tlZE9wY29kZVRhZywgT3Bjb2RlIG9wY29kZSwgVHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luLCBW
YWx1ZSogZmlyc3RDaGlsZCwgQXJndW1lbnRzLi4uIGFyZ3VtZW50cykKLSAgICAgICAgOiBtX2lu
ZGV4KGluZGV4KQotICAgICAgICAsIG1fb3Bjb2RlKG9wY29kZSkKKyAgICBleHBsaWNpdCBWYWx1
ZShDaGVja2VkT3Bjb2RlVGFnLCBPcGNvZGUgb3Bjb2RlLCBUeXBlIHR5cGUsIE9yaWdpbiBvcmln
aW4sIFZhbHVlKiBmaXJzdENoaWxkLCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQorICAgICAgICA6
IG1fb3Bjb2RlKG9wY29kZSkKICAgICAgICAgLCBtX3R5cGUodHlwZSkKICAgICAgICAgLCBtX29y
aWdpbihvcmlnaW4pCiAgICAgICAgICwgbV9jaGlsZHJlbnsgZmlyc3RDaGlsZCwgYXJndW1lbnRz
Li4uIH0KICAgICB7CiAgICAgfQogICAgIC8vIFRoaXMgZm9ybSBpcyBmb3Igc3BlY2lmeWluZyB0
aGUgdHlwZSBleHBsaWNpdGx5IHdoZW4gdGhlIG9wY29kZSBoYXMgbm8gY2hpbGRyZW46Ci0gICAg
ZXhwbGljaXQgVmFsdWUodW5zaWduZWQgaW5kZXgsIENoZWNrZWRPcGNvZGVUYWcsIE9wY29kZSBv
cGNvZGUsIFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdpbikKLSAgICAgICAgOiBtX2luZGV4KGluZGV4
KQotICAgICAgICAsIG1fb3Bjb2RlKG9wY29kZSkKKyAgICBleHBsaWNpdCBWYWx1ZShDaGVja2Vk
T3Bjb2RlVGFnLCBPcGNvZGUgb3Bjb2RlLCBUeXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4pCisgICAg
ICAgIDogbV9vcGNvZGUob3Bjb2RlKQogICAgICAgICAsIG1fdHlwZSh0eXBlKQogICAgICAgICAs
IG1fb3JpZ2luKG9yaWdpbikKICAgICB7CiAgICAgfQogICAgIC8vIFRoaXMgZm9ybSBpcyBmb3Ig
dGhvc2Ugb3Bjb2RlcyB0aGF0IGNhbiBpbmZlciB0aGVpciB0eXBlIGZyb20gdGhlIG9wY29kZSBh
bmQgZmlyc3QgY2hpbGQ6CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgotICAg
IGV4cGxpY2l0IFZhbHVlKHVuc2lnbmVkIGluZGV4LCBDaGVja2VkT3Bjb2RlVGFnLCBPcGNvZGUg
b3Bjb2RlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogZmlyc3RDaGlsZCkKLSAgICAgICAgOiBtX2lu
ZGV4KGluZGV4KQotICAgICAgICAsIG1fb3Bjb2RlKG9wY29kZSkKKyAgICBleHBsaWNpdCBWYWx1
ZShDaGVja2VkT3Bjb2RlVGFnLCBPcGNvZGUgb3Bjb2RlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSog
Zmlyc3RDaGlsZCkKKyAgICAgICAgOiBtX29wY29kZShvcGNvZGUpCiAgICAgICAgICwgbV90eXBl
KHR5cGVGb3Iob3Bjb2RlLCBmaXJzdENoaWxkKSkKICAgICAgICAgLCBtX29yaWdpbihvcmlnaW4p
CiAgICAgICAgICwgbV9jaGlsZHJlbnsgZmlyc3RDaGlsZCB9CkBAIC0yNzEsOSArMjcwLDggQEAg
cHJvdGVjdGVkOgogICAgIH0KICAgICAvLyBUaGlzIGZvcm0gaXMgZm9yIHRob3NlIG9wY29kZXMg
dGhhdCBjYW4gaW5mZXIgdGhlaXIgdHlwZSBmcm9tIHRoZSBvcGNvZGUgYW5kIGZpcnN0IGFuZCBz
ZWNvbmQgY2hpbGQ6CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgotICAgIGV4
cGxpY2l0IFZhbHVlKHVuc2lnbmVkIGluZGV4LCBDaGVja2VkT3Bjb2RlVGFnLCBPcGNvZGUgb3Bj
b2RlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogZmlyc3RDaGlsZCwgVmFsdWUqIHNlY29uZENoaWxk
LCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQotICAgICAgICA6IG1faW5kZXgoaW5kZXgpCi0gICAg
ICAgICwgbV9vcGNvZGUob3Bjb2RlKQorICAgIGV4cGxpY2l0IFZhbHVlKENoZWNrZWRPcGNvZGVU
YWcsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBmaXJzdENoaWxkLCBWYWx1
ZSogc2Vjb25kQ2hpbGQsIEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCisgICAgICAgIDogbV9vcGNv
ZGUob3Bjb2RlKQogICAgICAgICAsIG1fdHlwZSh0eXBlRm9yKG9wY29kZSwgZmlyc3RDaGlsZCwg
c2Vjb25kQ2hpbGQpKQogICAgICAgICAsIG1fb3JpZ2luKG9yaWdpbikKICAgICAgICAgLCBtX2No
aWxkcmVueyBmaXJzdENoaWxkLCBzZWNvbmRDaGlsZCwgYXJndW1lbnRzLi4uIH0KQEAgLTI4MSwy
NSArMjc5LDIyIEBAIHByb3RlY3RlZDoKICAgICB9CiAgICAgLy8gVGhpcyBmb3JtIGlzIGZvciB0
aG9zZSBvcGNvZGVzIHRoYXQgY2FuIGluZmVyIHRoZWlyIHR5cGUgZnJvbSB0aGUgb3Bjb2RlIGFs
b25lLCBhbmQgdGhhdCBkb24ndAogICAgIC8vIHRha2UgYW55IGFyZ3VtZW50czoKLSAgICBleHBs
aWNpdCBWYWx1ZSh1bnNpZ25lZCBpbmRleCwgQ2hlY2tlZE9wY29kZVRhZywgT3Bjb2RlIG9wY29k
ZSwgT3JpZ2luIG9yaWdpbikKLSAgICAgICAgOiBtX2luZGV4KGluZGV4KQotICAgICAgICAsIG1f
b3Bjb2RlKG9wY29kZSkKKyAgICBleHBsaWNpdCBWYWx1ZShDaGVja2VkT3Bjb2RlVGFnLCBPcGNv
ZGUgb3Bjb2RlLCBPcmlnaW4gb3JpZ2luKQorICAgICAgICA6IG1fb3Bjb2RlKG9wY29kZSkKICAg
ICAgICAgLCBtX3R5cGUodHlwZUZvcihvcGNvZGUsIG51bGxwdHIpKQogICAgICAgICAsIG1fb3Jp
Z2luKG9yaWdpbikKICAgICB7CiAgICAgfQogICAgIC8vIFVzZSB0aGlzIGZvcm0gZm9yIHZhcmFy
Z3MuCi0gICAgZXhwbGljaXQgVmFsdWUodW5zaWduZWQgaW5kZXgsIENoZWNrZWRPcGNvZGVUYWcs
IE9wY29kZSBvcGNvZGUsIFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdpbiwgY29uc3QgQWRqYWNlbmN5
TGlzdCYgY2hpbGRyZW4pCi0gICAgICAgIDogbV9pbmRleChpbmRleCkKLSAgICAgICAgLCBtX29w
Y29kZShvcGNvZGUpCisgICAgZXhwbGljaXQgVmFsdWUoQ2hlY2tlZE9wY29kZVRhZywgT3Bjb2Rl
IG9wY29kZSwgVHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luLCBjb25zdCBBZGphY2VuY3lMaXN0JiBj
aGlsZHJlbikKKyAgICAgICAgOiBtX29wY29kZShvcGNvZGUpCiAgICAgICAgICwgbV90eXBlKHR5
cGUpCiAgICAgICAgICwgbV9vcmlnaW4ob3JpZ2luKQogICAgICAgICAsIG1fY2hpbGRyZW4oY2hp
bGRyZW4pCiAgICAgewogICAgIH0KLSAgICBleHBsaWNpdCBWYWx1ZSh1bnNpZ25lZCBpbmRleCwg
Q2hlY2tlZE9wY29kZVRhZywgT3Bjb2RlIG9wY29kZSwgVHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2lu
LCBBZGphY2VuY3lMaXN0JiYgY2hpbGRyZW4pCi0gICAgICAgIDogbV9pbmRleChpbmRleCkKLSAg
ICAgICAgLCBtX29wY29kZShvcGNvZGUpCisgICAgZXhwbGljaXQgVmFsdWUoQ2hlY2tlZE9wY29k
ZVRhZywgT3Bjb2RlIG9wY29kZSwgVHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luLCBBZGphY2VuY3lM
aXN0JiYgY2hpbGRyZW4pCisgICAgICAgIDogbV9vcGNvZGUob3Bjb2RlKQogICAgICAgICAsIG1f
dHlwZSh0eXBlKQogICAgICAgICAsIG1fb3JpZ2luKG9yaWdpbikKICAgICAgICAgLCBtX2NoaWxk
cmVuKFdURk1vdmUoY2hpbGRyZW4pKQpAQCAtMzA5LDggKzMwNCw4IEBAIHByb3RlY3RlZDoKICAg
ICAvLyBUaGlzIGlzIHRoZSBjb25zdHJ1Y3RvciB5b3UgZW5kIHVwIGFjdHVhbGx5IGNhbGxpbmcs
IGlmIHlvdSdyZSBpbnN0YW50aWF0aW5nIFZhbHVlCiAgICAgLy8gZGlyZWN0bHkuCiAgICAgdGVt
cGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgotICAgIGV4cGxpY2l0IFZhbHVlKHVuc2lnbmVk
IGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBBcmd1bWVudHMmJi4uLiBhcmd1bWVudHMpCi0gICAgICAg
IDogVmFsdWUoaW5kZXgsIENoZWNrZWRPcGNvZGUsIG9wY29kZSwgc3RkOjpmb3J3YXJkPEFyZ3Vt
ZW50cz4oYXJndW1lbnRzKS4uLikKKyAgICBleHBsaWNpdCBWYWx1ZShPcGNvZGUgb3Bjb2RlLCBB
cmd1bWVudHMmJi4uLiBhcmd1bWVudHMpCisgICAgICAgIDogVmFsdWUoQ2hlY2tlZE9wY29kZSwg
b3Bjb2RlLCBzdGQ6OmZvcndhcmQ8QXJndW1lbnRzPihhcmd1bWVudHMpLi4uKQogICAgIHsKICAg
ICAgICAgY2hlY2tPcGNvZGUob3Bjb2RlKTsKICAgICB9CkBAIC0zMjEsNyArMzE2LDkgQEAgcHJp
dmF0ZToKICAgICBzdGF0aWMgVHlwZSB0eXBlRm9yKE9wY29kZSwgVmFsdWUqIGZpcnN0Q2hpbGQs
IFZhbHVlKiBzZWNvbmRDaGlsZCA9IG51bGxwdHIpOwogCiAgICAgLy8gVGhpcyBncm91cCBvZiBm
aWVsZHMgaXMgYXJyYW5nZWQgdG8gZml0IGluIDY0IGJpdHMuCi0gICAgdW5zaWduZWQgbV9pbmRl
eDsKK3Byb3RlY3RlZDoKKyAgICB1bnNpZ25lZCBtX2luZGV4IHsgVUlOVF9NQVggfTsKK3ByaXZh
dGU6CiAgICAgT3Bjb2RlIG1fb3Bjb2RlOwogICAgIFR5cGUgbV90eXBlOwogICAgIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFyaWFibGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhcmlhYmxlLmNwcAkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhcmlhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDU2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM1ZhcmlhYmxlLmgiCisKKyNpZiBF
TkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworVmFyaWFi
bGU6On5WYXJpYWJsZSgpCit7Cit9CisKK3ZvaWQgVmFyaWFibGU6OmR1bXAoUHJpbnRTdHJlYW0m
IG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoInZhciIsIG1faW5kZXgpOworfQorCit2b2lk
IFZhcmlhYmxlOjpkZWVwRHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5w
cmludChtX3R5cGUsICIgdmFyIiwgbV9pbmRleCk7Cit9CisKK1ZhcmlhYmxlOjpWYXJpYWJsZShU
eXBlIHR5cGUpCisgICAgOiBtX3R5cGUodHlwZSkKK3sKKyAgICBBU1NFUlQodHlwZSAhPSBWb2lk
KTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNf
SklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYXJpYWJsZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhcmlhYmxlLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYXJpYWJsZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsOTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTYgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBCM1ZhcmlhYmxlX2gKKyNkZWZpbmUgQjNWYXJpYWJsZV9oCisK
KyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNTcGFyc2VDb2xsZWN0aW9uLmgiCisj
aW5jbHVkZSAiQjNUeXBlLmgiCisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRl
IDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIFByb2NlZHVyZTsKKworY2xhc3Mg
VmFyaWFibGUgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFZhcmlhYmxlKTsKKyAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKKworcHVibGljOgorICAgIH5WYXJpYWJsZSgpOworCisgICAg
VHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9CisgICAgdW5zaWduZWQgaW5kZXgo
KSBjb25zdCB7IHJldHVybiBtX2luZGV4OyB9CisKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0m
KSBjb25zdDsKKyAgICB2b2lkIGRlZXBEdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisKK3ByaXZh
dGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKyAgICBmcmllbmQgY2xhc3MgU3BhcnNl
Q29sbGVjdGlvbjxWYXJpYWJsZT47CisKKyAgICBWYXJpYWJsZShUeXBlKTsKKyAgICAKKyAgICB1
bnNpZ25lZCBtX2luZGV4OworICAgIFR5cGUgbV90eXBlOworfTsKKworY2xhc3MgRGVlcFZhcmlh
YmxlRHVtcCB7CitwdWJsaWM6CisgICAgRGVlcFZhcmlhYmxlRHVtcChjb25zdCBWYXJpYWJsZSog
dmFyaWFibGUpCisgICAgICAgIDogbV92YXJpYWJsZSh2YXJpYWJsZSkKKyAgICB7CisgICAgfQor
CisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CisgICAgeworICAgICAgICBp
ZiAobV92YXJpYWJsZSkKKyAgICAgICAgICAgIG1fdmFyaWFibGUtPmRlZXBEdW1wKG91dCk7Cisg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgIG91dC5wcmludCgiPG51bGw+Iik7CisgICAgfQorCitw
cml2YXRlOgorICAgIGNvbnN0IFZhcmlhYmxlKiBtX3ZhcmlhYmxlOworfTsKKworaW5saW5lIERl
ZXBWYXJpYWJsZUR1bXAgZGVlcER1bXAoY29uc3QgVmFyaWFibGUqIHZhcmlhYmxlKQoreworICAg
IHJldHVybiBEZWVwVmFyaWFibGVEdW1wKHZhcmlhYmxlKTsKK30KKworfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNWYXJp
YWJsZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhcmlhYmxlVmFsdWUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhcmlhYmxlVmFs
dWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFyaWFi
bGVWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NiBAQAorLyoKKyAqIENvcHly
aWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMg
b2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
LgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRo
ZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiQjNWYXJpYWJsZVZhbHVlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5j
bHVkZSAiQjNWYXJpYWJsZS5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKwor
VmFyaWFibGVWYWx1ZTo6flZhcmlhYmxlVmFsdWUoKQoreworfQorCit2b2lkIFZhcmlhYmxlVmFs
dWU6OmR1bXBNZXRhKENvbW1hUHJpbnRlciYgY29tbWEsIFByaW50U3RyZWFtJiBvdXQpIGNvbnN0
Cit7CisgICAgb3V0LnByaW50KGNvbW1hLCBwb2ludGVyRHVtcChtX3ZhcmlhYmxlKSk7Cit9CisK
K1ZhbHVlKiBWYXJpYWJsZVZhbHVlOjpjbG9uZUltcGwoKSBjb25zdAoreworICAgIHJldHVybiBu
ZXcgVmFyaWFibGVWYWx1ZSgqdGhpcyk7Cit9CisKK1ZhcmlhYmxlVmFsdWU6OlZhcmlhYmxlVmFs
dWUoT3Bjb2RlIG9wY29kZSwgT3JpZ2luIG9yaWdpbiwgVmFyaWFibGUqIHZhcmlhYmxlLCBWYWx1
ZSogdmFsdWUpCisgICAgOiBWYWx1ZShDaGVja2VkT3Bjb2RlLCBvcGNvZGUsIFZvaWQsIG9yaWdp
biwgdmFsdWUpCisgICAgLCBtX3ZhcmlhYmxlKHZhcmlhYmxlKQoreworICAgIEFTU0VSVChvcGNv
ZGUgPT0gU2V0KTsKK30KKworVmFyaWFibGVWYWx1ZTo6VmFyaWFibGVWYWx1ZShPcGNvZGUgb3Bj
b2RlLCBPcmlnaW4gb3JpZ2luLCBWYXJpYWJsZSogdmFyaWFibGUpCisgICAgOiBWYWx1ZShDaGVj
a2VkT3Bjb2RlLCBvcGNvZGUsIHZhcmlhYmxlLT50eXBlKCksIG9yaWdpbikKKyAgICAsIG1fdmFy
aWFibGUodmFyaWFibGUpCit7CisgICAgQVNTRVJUKG9wY29kZSA9PSBHZXQpOworfQorCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhcmlhYmxlVmFsdWUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYXJpYWJsZVZhbHVlLmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYXJpYWJsZVZhbHVlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSw2NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNWYXJpYWJsZVZhbHVlX2gKKyNkZWZpbmUgQjNW
YXJpYWJsZVZhbHVlX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlICJCM1ZhbHVl
LmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBWYXJpYWJsZTsK
KworY2xhc3MgSlNfRVhQT1JUX1BSSVZBVEUgVmFyaWFibGVWYWx1ZSA6IHB1YmxpYyBWYWx1ZSB7
CitwdWJsaWM6CisgICAgc3RhdGljIGJvb2wgYWNjZXB0cyhPcGNvZGUgb3Bjb2RlKSB7IHJldHVy
biBvcGNvZGUgPT0gR2V0IHx8IG9wY29kZSA9PSBTZXQ7IH0KKworICAgIH5WYXJpYWJsZVZhbHVl
KCk7CisKKyAgICBWYXJpYWJsZSogdmFyaWFibGUoKSBjb25zdCB7IHJldHVybiBtX3ZhcmlhYmxl
OyB9CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGR1bXBNZXRhKENvbW1hUHJpbnRlciYsIFByaW50
U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBWYWx1ZSogY2xvbmVJbXBsKCkgY29uc3Qg
b3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKworICAg
IC8vIFVzZSB0aGlzIGZvciBTZXQuCisgICAgVmFyaWFibGVWYWx1ZShPcGNvZGUsIE9yaWdpbiwg
VmFyaWFibGUqLCBWYWx1ZSopOworCisgICAgLy8gVXNlIHRoaXMgZm9yIEdldC4KKyAgICBWYXJp
YWJsZVZhbHVlKE9wY29kZSwgT3JpZ2luLCBWYXJpYWJsZSogdmFyaWFibGUpOworCisgICAgVmFy
aWFibGUqIG1fdmFyaWFibGU7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2Vu
ZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM1ZhcmlhYmxlVmFsdWVfaAorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlU3RhY2suY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVTdGFj
ay5jcHAJKHJldmlzaW9uIDE5NTk3MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyQWxsb2NhdGVTdGFjay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk1LDMwICs5NSwxMyBAQCB2
b2lkIGFsbG9jYXRlU3RhY2soQ29kZSYgY29kZSkKIHsKICAgICBQaGFzZVNjb3BlIHBoYXNlU2Nv
cGUoY29kZSwgImFsbG9jYXRlU3RhY2siKTsKIAotICAgIC8vIFBlcmZvcm0gYW4gZXNjYXBlIGFu
YWx5c2lzIG92ZXIgc3RhY2sgc2xvdHMuIEFuIGVzY2FwaW5nIHN0YWNrIHNsb3QgaXMgb25lIHRo
YXQgaXMgbG9ja2VkIG9yCi0gICAgLy8gaXMgZXhwbGljaXRseSBlc2NhcGVkIGluIHRoZSBjb2Rl
LgotICAgIEluZGV4U2V0PFN0YWNrU2xvdD4gZXNjYXBpbmdTdGFja1Nsb3RzOwotICAgIGZvciAo
U3RhY2tTbG90KiBzbG90IDogY29kZS5zdGFja1Nsb3RzKCkpIHsKLSAgICAgICAgaWYgKHNsb3Qt
PmlzTG9ja2VkKCkpCi0gICAgICAgICAgICBlc2NhcGluZ1N0YWNrU2xvdHMuYWRkKHNsb3QpOwot
ICAgIH0KLSAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogY29kZSkgewotICAgICAgICBmb3Ig
KEluc3QmIGluc3QgOiAqYmxvY2spIHsKLSAgICAgICAgICAgIGluc3QuZm9yRWFjaEFyZygKLSAg
ICAgICAgICAgICAgICBbJl0gKEFyZyYgYXJnLCBBcmc6OlJvbGUgcm9sZSwgQXJnOjpUeXBlLCBB
cmc6OldpZHRoKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChyb2xlID09IEFyZzo6VXNlQWRk
ciAmJiBhcmcuaXNTdGFjaygpKQotICAgICAgICAgICAgICAgICAgICAgICAgZXNjYXBpbmdTdGFj
a1Nsb3RzLmFkZChhcmcuc3RhY2tTbG90KCkpOwotICAgICAgICAgICAgICAgIH0pOwotICAgICAg
ICB9Ci0gICAgfQotCiAgICAgLy8gQWxsb2NhdGUgYWxsIG9mIHRoZSBlc2NhcGVkIHNsb3RzIGlu
IG9yZGVyLiBUaGlzIGlzIGtpbmQgb2YgYSBjcmF6eSBhbGdvcml0aG0gdG8gYWxsb3cgZm9yCiAg
ICAgLy8gdGhlIHBvc3NpYmlsaXR5IG9mIHN0YWNrIHNsb3RzIGJlaW5nIGFzc2lnbmVkIGZyYW1l
IG9mZnNldHMgYmVmb3JlIHdlIGV2ZW4gZ2V0IGhlcmUuCiAgICAgQVNTRVJUKCFjb2RlLmZyYW1l
U2l6ZSgpKTsKICAgICBWZWN0b3I8U3RhY2tTbG90Kj4gYXNzaWduZWRFc2NhcGVkU3RhY2tTbG90
czsKICAgICBWZWN0b3I8U3RhY2tTbG90Kj4gZXNjYXBlZFN0YWNrU2xvdHNXb3JrbGlzdDsKICAg
ICBmb3IgKFN0YWNrU2xvdCogc2xvdCA6IGNvZGUuc3RhY2tTbG90cygpKSB7Ci0gICAgICAgIGlm
IChlc2NhcGluZ1N0YWNrU2xvdHMuY29udGFpbnMoc2xvdCkpIHsKKyAgICAgICAgaWYgKHNsb3Qt
PmlzTG9ja2VkKCkpIHsKICAgICAgICAgICAgIGlmIChzbG90LT5vZmZzZXRGcm9tRlAoKSkKICAg
ICAgICAgICAgICAgICBhc3NpZ25lZEVzY2FwZWRTdGFja1Nsb3RzLmFwcGVuZChzbG90KTsKICAg
ICAgICAgICAgIGVsc2UKQEAgLTEzNiw3ICsxMTksNyBAQCB2b2lkIGFsbG9jYXRlU3RhY2soQ29k
ZSYgY29kZSkKICAgICAgICAgYXNzaWduZWRFc2NhcGVkU3RhY2tTbG90cy5hcHBlbmQoc2xvdCk7
CiAgICAgfQogCi0gICAgLy8gTm93IHdlIGhhbmRsZSB0aGUgYW5vbnltb3VzIHNsb3RzLgorICAg
IC8vIE5vdyB3ZSBoYW5kbGUgdGhlIHNwaWxsIHNsb3RzLgogICAgIFN0YWNrU2xvdExpdmVuZXNz
IGxpdmVuZXNzKGNvZGUpOwogICAgIEluZGV4TWFwPFN0YWNrU2xvdCwgSGFzaFNldDxTdGFja1Ns
b3QqPj4gaW50ZXJmZXJlbmNlKGNvZGUuc3RhY2tTbG90cygpLnNpemUoKSk7CiAgICAgVmVjdG9y
PFN0YWNrU2xvdCo+IHNsb3RzOwpAQCAtMTU0LDcgKzEzNyw3IEBAIHZvaWQgYWxsb2NhdGVTdGFj
ayhDb2RlJiBjb2RlKQogICAgICAgICAgICAgICAgICAgICBpZiAoIWFyZy5pc1N0YWNrKCkpCiAg
ICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgIFN0YWNr
U2xvdCogc2xvdCA9IGFyZy5zdGFja1Nsb3QoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHNs
b3QtPmtpbmQoKSAhPSBTdGFja1Nsb3RLaW5kOjpBbm9ueW1vdXMpCisgICAgICAgICAgICAgICAg
ICAgIGlmIChzbG90LT5raW5kKCkgIT0gU3RhY2tTbG90S2luZDo6U3BpbGwpCiAgICAgICAgICAg
ICAgICAgICAgICAgICByZXR1cm47CiAKICAgICAgICAgICAgICAgICAgICAgZm9yIChTdGFja1Ns
b3QqIG90aGVyU2xvdCA6IGxvY2FsQ2FsYy5saXZlKCkpIHsKQEAgLTE4Nyw3ICsxNzAsNyBAQCB2
b2lkIGFsbG9jYXRlU3RhY2soQ29kZSYgY29kZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAg
ICAgICBTdGFja1Nsb3QqIHNsb3QgPSBhcmcuc3RhY2tTbG90KCk7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBpZiAoc2xvdC0+a2luZCgpICE9IFN0YWNrU2xvdEtpbmQ6OkFub255bW91cykgewor
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNsb3QtPmtpbmQoKSAhPSBTdGFja1Nsb3RLaW5k
OjpTcGlsbCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9rID0gZmFsc2U7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgICAgICAg
fQpAQCAtMjg3LDcgKzI3MCw3IEBAIHZvaWQgYWxsb2NhdGVTdGFjayhDb2RlJiBjb2RlKQogICAg
ICAgICAgICAgICAgICAgICBjYXNlIEFyZzo6U3RhY2s6IHsKICAgICAgICAgICAgICAgICAgICAg
ICAgIFN0YWNrU2xvdCogc2xvdCA9IGFyZy5zdGFja1Nsb3QoKTsKICAgICAgICAgICAgICAgICAg
ICAgICAgIGlmIChBcmc6OmlzWkRlZihyb2xlKQotICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICYmIHNsb3QtPmtpbmQoKSA9PSBTdGFja1Nsb3RLaW5kOjpBbm9ueW1vdXMKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAmJiBzbG90LT5raW5kKCkgPT0gU3RhY2tTbG90S2luZDo6U3BpbGwK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmJiBzbG90LT5ieXRlU2l6ZSgpID4gQXJnOjpi
eXRlcyh3aWR0aCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDdXJyZW50bHkg
d2Ugb25seSBoYW5kbGUgdGhpcyBzaW1wbGUgY2FzZSBiZWNhdXNlIGl0J3MgdGhlIG9ubHkgb25l
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhhdCBhcmlzZXM6IFpEZWYncyBhcmUg
b25seSAzMi1iaXQgcmlnaHQgbm93LiBTbywgd2hlbiB3ZSBoaXQgdGhlc2UKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmNwcAkocmV2aXNpb24gMTk1OTcwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNTQsMjMgKzU0LDE3IEBAIEJhc2ljQmxvY2sqIENvZGU6OmFkZEJsb2NrKGRvdWJsZSBmcmVx
dWUKIAogU3RhY2tTbG90KiBDb2RlOjphZGRTdGFja1Nsb3QodW5zaWduZWQgYnl0ZVNpemUsIFN0
YWNrU2xvdEtpbmQga2luZCwgQjM6OlN0YWNrU2xvdCogYjNTbG90KQogewotICAgIHN0ZDo6dW5p
cXVlX3B0cjxTdGFja1Nsb3Q+IHNsb3QobmV3IFN0YWNrU2xvdChieXRlU2l6ZSwgbV9zdGFja1Ns
b3RzLnNpemUoKSwga2luZCwgYjNTbG90KSk7Ci0gICAgU3RhY2tTbG90KiByZXN1bHQgPSBzbG90
LmdldCgpOwotICAgIG1fc3RhY2tTbG90cy5hcHBlbmQoV1RGTW92ZShzbG90KSk7Ci0gICAgcmV0
dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gbV9zdGFja1Nsb3RzLmFkZE5ldyhieXRlU2l6ZSwga2lu
ZCwgYjNTbG90KTsKIH0KIAogU3RhY2tTbG90KiBDb2RlOjphZGRTdGFja1Nsb3QoQjM6OlN0YWNr
U2xvdCogYjNTbG90KQogewotICAgIHJldHVybiBhZGRTdGFja1Nsb3QoYjNTbG90LT5ieXRlU2l6
ZSgpLCBiM1Nsb3QtPmtpbmQoKSwgYjNTbG90KTsKKyAgICByZXR1cm4gYWRkU3RhY2tTbG90KGIz
U2xvdC0+Ynl0ZVNpemUoKSwgU3RhY2tTbG90S2luZDo6TG9ja2VkLCBiM1Nsb3QpOwogfQogCiBT
cGVjaWFsKiBDb2RlOjphZGRTcGVjaWFsKHN0ZDo6dW5pcXVlX3B0cjxTcGVjaWFsPiBzcGVjaWFs
KQogewotICAgIFNwZWNpYWwqIHJlc3VsdCA9IHNwZWNpYWwuZ2V0KCk7Ci0gICAgcmVzdWx0LT5t
X2NvZGUgPSB0aGlzOwotICAgIG1fc3BlY2lhbHMuYXBwZW5kKFdURk1vdmUoc3BlY2lhbCkpOwot
ICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIG1fc3BlY2lhbHMuYWRkKFdURk1vdmUoc3Bl
Y2lhbCkpOwogfQogCiBDQ2FsbFNwZWNpYWwqIENvZGU6OmNDYWxsU3BlY2lhbCgpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuaAkocmV2aXNpb24gMTk1OTcwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJBaXJTcGVjaWFsLmgiCiAjaW5jbHVkZSAiQWlyU3Rh
Y2tTbG90LmgiCiAjaW5jbHVkZSAiQWlyVG1wLmgiCisjaW5jbHVkZSAiQjNTcGFyc2VDb2xsZWN0
aW9uLmgiCiAjaW5jbHVkZSAiUmVnaXN0ZXJBdE9mZnNldExpc3QuaCIKICNpbmNsdWRlICJTdGFj
a0FsaWdubWVudC5oIgogCkBAIC0xODQsMTI1ICsxODUsMTEgQEAgcHVibGljOgogICAgIGl0ZXJh
dG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoKnRoaXMsIDApOyB9CiAgICAgaXRl
cmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoKnRoaXMsIHNpemUoKSk7IH0KIAot
ICAgIGNsYXNzIFN0YWNrU2xvdHNDb2xsZWN0aW9uIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIFN0
YWNrU2xvdHNDb2xsZWN0aW9uKGNvbnN0IENvZGUmIGNvZGUpCi0gICAgICAgICAgICA6IG1fY29k
ZShjb2RlKQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgICAgICB1bnNpZ25lZCBzaXplKCkg
Y29uc3QgeyByZXR1cm4gbV9jb2RlLm1fc3RhY2tTbG90cy5zaXplKCk7IH0KLSAgICAgICAgU3Rh
Y2tTbG90KiBhdCh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9jb2RlLm1fc3RhY2tT
bG90c1tpbmRleF0uZ2V0KCk7IH0KLSAgICAgICAgU3RhY2tTbG90KiBvcGVyYXRvcltdKHVuc2ln
bmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBhdChpbmRleCk7IH0KLQotICAgICAgICBjbGFzcyBp
dGVyYXRvciB7Ci0gICAgICAgIHB1YmxpYzoKLSAgICAgICAgICAgIGl0ZXJhdG9yKCkKLSAgICAg
ICAgICAgICAgICA6IG1fY29sbGVjdGlvbihudWxscHRyKQotICAgICAgICAgICAgICAgICwgbV9p
bmRleCgwKQotICAgICAgICAgICAgewotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpdGVy
YXRvcihjb25zdCBTdGFja1Nsb3RzQ29sbGVjdGlvbiYgY29sbGVjdGlvbiwgdW5zaWduZWQgaW5k
ZXgpCi0gICAgICAgICAgICAgICAgOiBtX2NvbGxlY3Rpb24oJmNvbGxlY3Rpb24pCi0gICAgICAg
ICAgICAgICAgLCBtX2luZGV4KGluZGV4KQotICAgICAgICAgICAgewotICAgICAgICAgICAgfQot
Ci0gICAgICAgICAgICBTdGFja1Nsb3QqIG9wZXJhdG9yKigpCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIG1fY29sbGVjdGlvbi0+YXQobV9pbmRleCk7Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIGl0ZXJhdG9yJiBvcGVyYXRvcisrKCkKLSAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICBtX2luZGV4Kys7Ci0gICAgICAgICAgICAgICAgcmV0dXJuICp0aGlz
OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRl
cmF0b3ImIG90aGVyKSBjb25zdAotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVy
biBtX2luZGV4ID09IG90aGVyLm1faW5kZXg7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IGJvb2wgb3BlcmF0b3IhPShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0Ci0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOwotICAgICAgICAg
ICAgfQotCi0gICAgICAgIHByaXZhdGU6Ci0gICAgICAgICAgICBjb25zdCBTdGFja1Nsb3RzQ29s
bGVjdGlvbiogbV9jb2xsZWN0aW9uOwotICAgICAgICAgICAgdW5zaWduZWQgbV9pbmRleDsKLSAg
ICAgICAgfTsKLQotICAgICAgICBpdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIGl0ZXJh
dG9yKCp0aGlzLCAwKTsgfQotICAgICAgICBpdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBp
dGVyYXRvcigqdGhpcywgc2l6ZSgpKTsgfQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgY29uc3Qg
Q29kZSYgbV9jb2RlOwotICAgIH07Ci0KLSAgICBTdGFja1Nsb3RzQ29sbGVjdGlvbiBzdGFja1Ns
b3RzKCkgY29uc3QgeyByZXR1cm4gU3RhY2tTbG90c0NvbGxlY3Rpb24oKnRoaXMpOyB9Ci0gICAg
Ci0gICAgY2xhc3MgU3BlY2lhbHNDb2xsZWN0aW9uIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIFNw
ZWNpYWxzQ29sbGVjdGlvbihjb25zdCBDb2RlJiBjb2RlKQotICAgICAgICAgICAgOiBtX2NvZGUo
Y29kZSkKLSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAgdW5zaWduZWQgc2l6ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fY29kZS5tX3NwZWNpYWxzLnNpemUoKTsgfQotICAgICAgICBTcGVjaWFs
KiBhdCh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9jb2RlLm1fc3BlY2lhbHNbaW5k
ZXhdLmdldCgpOyB9Ci0gICAgICAgIFNwZWNpYWwqIG9wZXJhdG9yW10odW5zaWduZWQgaW5kZXgp
IGNvbnN0IHsgcmV0dXJuIGF0KGluZGV4KTsgfQotCi0gICAgICAgIGNsYXNzIGl0ZXJhdG9yIHsK
LSAgICAgICAgcHVibGljOgotICAgICAgICAgICAgaXRlcmF0b3IoKQotICAgICAgICAgICAgICAg
IDogbV9jb2xsZWN0aW9uKG51bGxwdHIpCi0gICAgICAgICAgICAgICAgLCBtX2luZGV4KDApCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGl0ZXJhdG9yKGNvbnN0
IFNwZWNpYWxzQ29sbGVjdGlvbiYgY29sbGVjdGlvbiwgdW5zaWduZWQgaW5kZXgpCi0gICAgICAg
ICAgICAgICAgOiBtX2NvbGxlY3Rpb24oJmNvbGxlY3Rpb24pCi0gICAgICAgICAgICAgICAgLCBt
X2luZGV4KGluZGV4KQotICAgICAgICAgICAgewotICAgICAgICAgICAgfQotCi0gICAgICAgICAg
ICBTcGVjaWFsKiBvcGVyYXRvciooKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJl
dHVybiBtX2NvbGxlY3Rpb24tPmF0KG1faW5kZXgpOwotICAgICAgICAgICAgfQotCi0gICAgICAg
ICAgICBpdGVyYXRvciYgb3BlcmF0b3IrKygpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAg
ICAgbV9pbmRleCsrOwotICAgICAgICAgICAgICAgIHJldHVybiAqdGhpczsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikg
Y29uc3QKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbV9pbmRleCA9PSBv
dGhlci5tX2luZGV4OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBib29sIG9wZXJhdG9y
IT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAotICAgICAgICAgICAgewotICAgICAgICAg
ICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKLSAgICAgICAgICAgIH0KLQotICAgICAg
ICBwcml2YXRlOgotICAgICAgICAgICAgY29uc3QgU3BlY2lhbHNDb2xsZWN0aW9uKiBtX2NvbGxl
Y3Rpb247Ci0gICAgICAgICAgICB1bnNpZ25lZCBtX2luZGV4OwotICAgICAgICB9OwotCi0gICAg
ICAgIGl0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoKnRoaXMsIDApOyB9
Ci0gICAgICAgIGl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKCp0aGlzLCBz
aXplKCkpOyB9Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBjb25zdCBDb2RlJiBtX2NvZGU7Ci0g
ICAgfTsKKyAgICBjb25zdCBTcGFyc2VDb2xsZWN0aW9uPFN0YWNrU2xvdD4mIHN0YWNrU2xvdHMo
KSBjb25zdCB7IHJldHVybiBtX3N0YWNrU2xvdHM7IH0KKyAgICBTcGFyc2VDb2xsZWN0aW9uPFN0
YWNrU2xvdD4mIHN0YWNrU2xvdHMoKSB7IHJldHVybiBtX3N0YWNrU2xvdHM7IH0KIAotICAgIFNw
ZWNpYWxzQ29sbGVjdGlvbiBzcGVjaWFscygpIGNvbnN0IHsgcmV0dXJuIFNwZWNpYWxzQ29sbGVj
dGlvbigqdGhpcyk7IH0KKyAgICBjb25zdCBTcGFyc2VDb2xsZWN0aW9uPFNwZWNpYWw+JiBzcGVj
aWFscygpIGNvbnN0IHsgcmV0dXJuIG1fc3BlY2lhbHM7IH0KKyAgICBTcGFyc2VDb2xsZWN0aW9u
PFNwZWNpYWw+JiBzcGVjaWFscygpIHsgcmV0dXJuIG1fc3BlY2lhbHM7IH0KIAogICAgIHRlbXBs
YXRlPHR5cGVuYW1lIENhbGxiYWNrPgogICAgIHZvaWQgZm9yQWxsVG1wcyhjb25zdCBDYWxsYmFj
ayYgY2FsbGJhY2spIGNvbnN0CkBAIC0zMzEsOSArMjE4LDkgQEAgcHJpdmF0ZToKICAgICBDb2Rl
KFByb2NlZHVyZSYpOwogCiAgICAgUHJvY2VkdXJlJiBtX3Byb2M7IC8vIFNvbWUgbWV0YS1kYXRh
LCBsaWtlIGJ5cHJvZHVjdHMsIGlzIHN0b3JlZCBpbiB0aGUgUHJvY2VkdXJlLgotICAgIFZlY3Rv
cjxzdGQ6OnVuaXF1ZV9wdHI8U3RhY2tTbG90Pj4gbV9zdGFja1Nsb3RzOworICAgIFNwYXJzZUNv
bGxlY3Rpb248U3RhY2tTbG90PiBtX3N0YWNrU2xvdHM7CiAgICAgVmVjdG9yPHN0ZDo6dW5pcXVl
X3B0cjxCYXNpY0Jsb2NrPj4gbV9ibG9ja3M7Ci0gICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxT
cGVjaWFsPj4gbV9zcGVjaWFsczsKKyAgICBTcGFyc2VDb2xsZWN0aW9uPFNwZWNpYWw+IG1fc3Bl
Y2lhbHM7CiAgICAgSGFzaFNldDxUbXA+IG1fZmFzdFRtcHM7CiAgICAgQ0NhbGxTcGVjaWFsKiBt
X2NDYWxsU3BlY2lhbCB7IG51bGxwdHIgfTsKICAgICB1bnNpZ25lZCBtX251bUdQVG1wcyB7IDAg
fTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zdElubGluZXMuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3RJbmxpbmVz
LmgJKHJldmlzaW9uIDE5NTk3MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
SW5zdElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUg
IkFpckluc3QuaCIKICNpbmNsdWRlICJBaXJPcGNvZGVVdGlscy5oIgogI2luY2x1ZGUgIkFpclNw
ZWNpYWwuaCIKKyNpbmNsdWRlICJBaXJTdGFja1Nsb3QuaCIKICNpbmNsdWRlICJCM1ZhbHVlLmgi
CiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySXRlcmF0ZWRSZWdpc3RlckNvYWxlc2Np
bmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySXRl
cmF0ZWRSZWdpc3RlckNvYWxlc2NpbmcuY3BwCShyZXZpc2lvbiAxOTU5NzApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTIxNiw3ICsxMjE2LDcgQEAgcHJpdmF0ZToKIAogICAgICAgICAg
ICAgLy8gQWxsb2NhdGUgc3RhY2sgc2xvdCBmb3IgZWFjaCBzcGlsbGVkIHZhbHVlLgogICAgICAg
ICAgICAgU3RhY2tTbG90KiBzdGFja1Nsb3QgPSBtX2NvZGUuYWRkU3RhY2tTbG90KAotICAgICAg
ICAgICAgICAgIG1fdG1wV2lkdGgud2lkdGgodG1wKSA8PSBBcmc6OldpZHRoMzIgPyA0IDogOCwg
U3RhY2tTbG90S2luZDo6QW5vbnltb3VzKTsKKyAgICAgICAgICAgICAgICBtX3RtcFdpZHRoLndp
ZHRoKHRtcCkgPD0gQXJnOjpXaWR0aDMyID8gNCA6IDgsIFN0YWNrU2xvdEtpbmQ6OlNwaWxsKTsK
ICAgICAgICAgICAgIGJvb2wgaXNOZXdUbXAgPSBzdGFja1Nsb3RzLmFkZCh0bXAsIHN0YWNrU2xv
dCkuaXNOZXdFbnRyeTsKICAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoaXNOZXdUbXAsIGlzTmV3
VG1wKTsKICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJM
aXZlbmVzcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
TGl2ZW5lc3MuaAkocmV2aXNpb24gMTk1OTcwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJMaXZlbmVzcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaW5j
bHVkZSAiQWlyQmFzaWNCbG9jay5oIgogI2luY2x1ZGUgIkFpckNvZGUuaCIKICNpbmNsdWRlICJB
aXJJbnN0SW5saW5lcy5oIgorI2luY2x1ZGUgIkFpclN0YWNrU2xvdC5oIgogI2luY2x1ZGUgIkFp
clRtcElubGluZXMuaCIKICNpbmNsdWRlICJCM0luZGV4TWFwLmgiCiAjaW5jbHVkZSAiQjNJbmRl
eFNldC5oIgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTcGVjaWFsLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTcGVjaWFsLmgJ
KHJldmlzaW9uIDE5NTk3MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3Bl
Y2lhbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaWYgRU5BQkxFKEIzX0pJ
VCkKIAogI2luY2x1ZGUgIkFpckluc3QuaCIKKyNpbmNsdWRlICJCM1NwYXJzZUNvbGxlY3Rpb24u
aCIKICNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJs
ZS5oPgogI2luY2x1ZGUgPHd0Zi9TY29wZWRMYW1iZGEuaD4KQEAgLTk4LDYgKzk5LDcgQEAgcHJv
dGVjdGVkOgogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBDb2RlOworICAgIGZyaWVuZCBj
bGFzcyBTcGFyc2VDb2xsZWN0aW9uPFNwZWNpYWw+OwogCiAgICAgY29uc3QgY2hhciogbV9uYW1l
OwogICAgIHVuc2lnbmVkIG1faW5kZXg7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpclNwaWxsRXZlcnl0aGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJTcGlsbEV2ZXJ5dGhpbmcuY3BwCShyZXZpc2lvbiAxOTU5NzApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNwaWxsRXZlcnl0aGluZy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTg4LDcgKzg4LDcgQEAgdm9pZCBzcGlsbEV2ZXJ5dGhpbmcoQ29kZSYg
Y29kZSkKICAgICAgICAgQXJnOjpUeXBlIHR5cGUgPSBzdGF0aWNfY2FzdDxBcmc6OlR5cGU+KHR5
cGVJbmRleCk7CiAgICAgICAgIHN0YWNrU2xvdHMucmVzaXplKGNvZGUubnVtVG1wcyh0eXBlKSk7
CiAgICAgICAgIGZvciAodW5zaWduZWQgdG1wSW5kZXggPSBjb2RlLm51bVRtcHModHlwZSk7IHRt
cEluZGV4LS07KQotICAgICAgICAgICAgc3RhY2tTbG90c1t0bXBJbmRleF0gPSBjb2RlLmFkZFN0
YWNrU2xvdCg4LCBTdGFja1Nsb3RLaW5kOjpBbm9ueW1vdXMpOworICAgICAgICAgICAgc3RhY2tT
bG90c1t0bXBJbmRleF0gPSBjb2RlLmFkZFN0YWNrU2xvdCg4LCBTdGFja1Nsb3RLaW5kOjpTcGls
bCk7CiAgICAgfQogCiAgICAgSW5zZXJ0aW9uU2V0IGluc2VydGlvblNldChjb2RlKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3RhY2tTbG90LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclN0YWNrU2xvdC5jcHAJKHJldmlz
aW9uIDE5NTk3MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3RhY2tTbG90
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsMTEgQEAgdm9pZCBTdGFja1Nsb3Q6OnNl
dE9mZnNldEZyb21GUChpbnRwdHJfdAogCiB2b2lkIFN0YWNrU2xvdDo6ZHVtcChQcmludFN0cmVh
bSYgb3V0KSBjb25zdAogewotICAgIG91dC5wcmludCgic3RhY2siLCBtX2luZGV4KTsKKyAgICBp
ZiAoaXNTcGlsbCgpKQorICAgICAgICBvdXQucHJpbnQoInNwaWxsIik7CisgICAgZWxzZQorICAg
ICAgICBvdXQucHJpbnQoInN0YWNrIik7CisgICAgb3V0LnByaW50KG1faW5kZXgpOwogfQogCiB2
b2lkIFN0YWNrU2xvdDo6ZGVlcER1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKQEAgLTUxLDkg
KzU1LDggQEAgdm9pZCBTdGFja1Nsb3Q6OmRlZXBEdW1wKFByaW50U3RyZWFtJiBvdQogICAgICAg
ICBvdXQucHJpbnQoIiwgYjNTbG90ID0gIiwgKm1fYjNTbG90LCAiOiAoIiwgQjM6OmRlZXBEdW1w
KG1fYjNTbG90KSwgIikiKTsKIH0KIAotU3RhY2tTbG90OjpTdGFja1Nsb3QodW5zaWduZWQgYnl0
ZVNpemUsIHVuc2lnbmVkIGluZGV4LCBTdGFja1Nsb3RLaW5kIGtpbmQsIEIzOjpTdGFja1Nsb3Qq
IGIzU2xvdCkKK1N0YWNrU2xvdDo6U3RhY2tTbG90KHVuc2lnbmVkIGJ5dGVTaXplLCBTdGFja1Ns
b3RLaW5kIGtpbmQsIEIzOjpTdGFja1Nsb3QqIGIzU2xvdCkKICAgICA6IG1fYnl0ZVNpemUoYnl0
ZVNpemUpCi0gICAgLCBtX2luZGV4KGluZGV4KQogICAgICwgbV9vZmZzZXRGcm9tRlAoYjNTbG90
ID8gYjNTbG90LT5vZmZzZXRGcm9tRlAoKSA6IDApCiAgICAgLCBtX2tpbmQoa2luZCkKICAgICAs
IG1fYjNTbG90KGIzU2xvdCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
U3RhY2tTbG90LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJTdGFja1Nsb3QuaAkocmV2aXNpb24gMTk1OTcwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJTdGFja1Nsb3QuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsOCBAQAog
CiAjaWYgRU5BQkxFKEIzX0pJVCkKIAotI2luY2x1ZGUgIkIzU3RhY2tTbG90S2luZC5oIgorI2lu
Y2x1ZGUgIkFpclN0YWNrU2xvdEtpbmQuaCIKKyNpbmNsdWRlICJCM1NwYXJzZUNvbGxlY3Rpb24u
aCIKICNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJs
ZS5oPgogI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgpAQCAtNDYsNiArNDcsNyBAQCBwdWJs
aWM6CiAgICAgdW5zaWduZWQgYnl0ZVNpemUoKSBjb25zdCB7IHJldHVybiBtX2J5dGVTaXplOyB9
CiAgICAgU3RhY2tTbG90S2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4gbV9raW5kOyB9CiAgICAg
Ym9vbCBpc0xvY2tlZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZCA9PSBTdGFja1Nsb3RLaW5kOjpM
b2NrZWQ7IH0KKyAgICBib29sIGlzU3BpbGwoKSBjb25zdCB7IHJldHVybiBtX2tpbmQgPT0gU3Rh
Y2tTbG90S2luZDo6U3BpbGw7IH0KICAgICB1bnNpZ25lZCBpbmRleCgpIGNvbnN0IHsgcmV0dXJu
IG1faW5kZXg7IH0KIAogICAgIHZvaWQgZW5zdXJlU2l6ZSh1bnNpZ25lZCByZXF1ZXN0ZWRTaXpl
KQpAQCAtNzksMTQgKzgxLDE1IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xh
c3MgQ29kZTsKKyAgICBmcmllbmQgY2xhc3MgU3BhcnNlQ29sbGVjdGlvbjxTdGFja1Nsb3Q+Owog
Ci0gICAgU3RhY2tTbG90KHVuc2lnbmVkIGJ5dGVTaXplLCB1bnNpZ25lZCBpbmRleCwgU3RhY2tT
bG90S2luZCwgQjM6OlN0YWNrU2xvdCopOworICAgIFN0YWNrU2xvdCh1bnNpZ25lZCBieXRlU2l6
ZSwgU3RhY2tTbG90S2luZCwgQjM6OlN0YWNrU2xvdCopOwogICAgIAotICAgIHVuc2lnbmVkIG1f
Ynl0ZVNpemU7Ci0gICAgdW5zaWduZWQgbV9pbmRleDsKLSAgICBpbnRwdHJfdCBtX29mZnNldEZy
b21GUDsKLSAgICBTdGFja1Nsb3RLaW5kIG1fa2luZDsKLSAgICBCMzo6U3RhY2tTbG90KiBtX2Iz
U2xvdDsKKyAgICB1bnNpZ25lZCBtX2J5dGVTaXplIHsgMCB9OworICAgIHVuc2lnbmVkIG1faW5k
ZXggeyBVSU5UX01BWCB9OworICAgIGludHB0cl90IG1fb2Zmc2V0RnJvbUZQIHsgMCB9OworICAg
IFN0YWNrU2xvdEtpbmQgbV9raW5kIHsgU3RhY2tTbG90S2luZDo6TG9ja2VkIH07CisgICAgQjM6
OlN0YWNrU2xvdCogbV9iM1Nsb3QgeyBudWxscHRyIH07CiB9OwogCiBjbGFzcyBEZWVwU3RhY2tT
bG90RHVtcCB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclN0YWNrU2xv
dEtpbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
U3RhY2tTbG90S2luZC5jcHAJKHJldmlzaW9uIDE5NTkwMSkJKGZyb20gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzU3RhY2tTbG90S2luZC5jcHA6MTk1OTAxKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJTdGFja1Nsb3RLaW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM1N0YWNrU2xvdEtpbmQuaCIKKworI2lm
IEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNw
YWNlIFdURiB7CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M6OkIzOworCit2b2lkIHByaW50SW50ZXJu
YWwoUHJpbnRTdHJlYW0mIG91dCwgU3RhY2tTbG90S2luZCBraW5kKQoreworICAgIHN3aXRjaCAo
a2luZCkgeworICAgIGNhc2UgU3RhY2tTbG90S2luZDo6TG9ja2VkOgorICAgICAgICBvdXQucHJp
bnQoIkxvY2tlZCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBTdGFja1Nsb3RLaW5kOjpB
bm9ueW1vdXM6CisgICAgICAgIG91dC5wcmludCgiQW5vbnltb3VzIik7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTdGFja1Nsb3RLaW5kLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclN0YWNrU2xvdEtpbmQuY3BwCSh3b3JraW5n
IGNvcHkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclN0YWNrU2xvdEtpbmQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw3ICsyNCw3IEBACiAgKi8KIAogI2luY2x1ZGUgImNv
bmZpZy5oIgotI2luY2x1ZGUgIkIzU3RhY2tTbG90S2luZC5oIgorI2luY2x1ZGUgIkFpclN0YWNr
U2xvdEtpbmQuaCIKIAogI2lmIEVOQUJMRShCM19KSVQpCiAKQEAgLTMyLDcgKzMyLDcgQEAKIAog
bmFtZXNwYWNlIFdURiB7CiAKLXVzaW5nIG5hbWVzcGFjZSBKU0M6OkIzOwordXNpbmcgbmFtZXNw
YWNlIEpTQzo6QjM6OkFpcjsKIAogdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQs
IFN0YWNrU2xvdEtpbmQga2luZCkKIHsKQEAgLTQwLDggKzQwLDggQEAgdm9pZCBwcmludEludGVy
bmFsKFByaW50U3RyZWFtJiBvdXQsIFN0YQogICAgIGNhc2UgU3RhY2tTbG90S2luZDo6TG9ja2Vk
OgogICAgICAgICBvdXQucHJpbnQoIkxvY2tlZCIpOwogICAgICAgICByZXR1cm47Ci0gICAgY2Fz
ZSBTdGFja1Nsb3RLaW5kOjpBbm9ueW1vdXM6Ci0gICAgICAgIG91dC5wcmludCgiQW5vbnltb3Vz
Iik7CisgICAgY2FzZSBTdGFja1Nsb3RLaW5kOjpTcGlsbDoKKyAgICAgICAgb3V0LnByaW50KCJT
cGlsbCIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclN0YWNrU2xv
dEtpbmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclN0
YWNrU2xvdEtpbmQuaAkocmV2aXNpb24gMTk1OTAxKQkoZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNTdGFja1Nsb3RLaW5kLmg6MTk1OTAxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJTdGFja1Nsb3RLaW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MyBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
Zm5kZWYgQjNTdGFja1Nsb3RLaW5kX2gKKyNkZWZpbmUgQjNTdGFja1Nsb3RLaW5kX2gKKworI2lm
IEVOQUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitlbnVt
IGNsYXNzIFN0YWNrU2xvdEtpbmQgOiB1aW50OF90IHsKKyAgICAvLyBBIGxvY2tlZCBzdGFjayBz
bG90IG5lZWRzIHRvIGJlIGtlcHQgZGlzam9pbnQgZnJvbSBhbGwgb3RoZXJzIGJlY2F1c2Ugd2Ug
aW50ZW5kIHRvIGVzY2FwZQorICAgIC8vIGl0IGV2ZW4gaWYgdGhhdCdzIG5vdCBvYnZpb3VzLiBU
aGlzIGhhcHBlbnMgd2hlbiB0aGUgcnVudGltZSB0YWtlcyB0aGUgYWRkcmVzcyBvZiBhIHN0YWNr
CisgICAgLy8gc2xvdC4KKyAgICBMb2NrZWQsCisKKyAgICAvLyBUaGVzZSBzdGFjayBzbG90cyBi
ZWhhdmUgbGlrZSB2YXJpYWJsZXMuIFVuZGVmaW5lZCBiZWhhdmlvciBoYXBwZW5zIGlmIHlvdSBz
dG9yZSBsZXNzIHRoYW4KKyAgICAvLyB0aGUgd2lkdGggb2YgdGhlIHNsb3QuCisgICAgQW5vbnlt
b3VzCisKKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGFkZCBhIHRoaXJkIG1vZGUsIHdoaWNoIG1l
YW5zIHRoYXQgdGhlIHN0YWNrIHNsb3Qgd2lsbCBiZSByZWFkIGFzeW5jaHJvbm91c2x5CisgICAg
Ly8gYXMgd2l0aCBMb2NrZWQsIGJ1dCBuZXZlciB3cml0dGVuIHRvIGFzeW5jaHJvbm91c2x5LiBU
aGVuLCBBaXIgY291bGQgb3B0aW1pemUgc3BpbGxpbmcgYW5kCisgICAgLy8gZmlsbGluZyBieSB0
cmFja2luZyB3aGV0aGVyIHRoZSB2YWx1ZSBoYWQgYmVlbiBzdG9yZWQgdG8gYSByZWFkLW9ubHkg
bG9ja2VkIHNsb3QuIElmIGl0IGhhZCwKKyAgICAvLyB0aGVuIHdlIGNhbiByZWZpbGwgZnJvbSB0
aGF0IHNsb3QuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE1MDU4NworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKK25hbWVzcGFjZSBXVEYg
eworCitjbGFzcyBQcmludFN0cmVhbTsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFt
JiwgSlNDOjpCMzo6U3RhY2tTbG90S2luZCk7CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5k
aWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzU3RhY2tTbG90S2luZF9oCisKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3RhY2tTbG90S2luZC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3RhY2tTbG90S2luZC5o
CSh3b3JraW5nIGNvcHkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclN0YWNr
U2xvdEtpbmQuaAkod29ya2luZyBjb3B5KQpAQCAtMjMsMjIgKzIzLDI2IEBACiAgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLiAKICAqLwogCi0jaWZuZGVmIEIzU3RhY2tTbG90S2luZF9oCi0jZGVmaW5lIEIzU3RhY2tT
bG90S2luZF9oCisjaWZuZGVmIEFpclN0YWNrU2xvdEtpbmRfaAorI2RlZmluZSBBaXJTdGFja1Ns
b3RLaW5kX2gKIAogI2lmIEVOQUJMRShCM19KSVQpCiAKLW5hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgQjMgeworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgewog
CiBlbnVtIGNsYXNzIFN0YWNrU2xvdEtpbmQgOiB1aW50OF90IHsKLSAgICAvLyBBIGxvY2tlZCBz
dGFjayBzbG90IG5lZWRzIHRvIGJlIGtlcHQgZGlzam9pbnQgZnJvbSBhbGwgb3RoZXJzIGJlY2F1
c2Ugd2UgaW50ZW5kIHRvIGVzY2FwZQotICAgIC8vIGl0IGV2ZW4gaWYgdGhhdCdzIG5vdCBvYnZp
b3VzLiBUaGlzIGhhcHBlbnMgd2hlbiB0aGUgcnVudGltZSB0YWtlcyB0aGUgYWRkcmVzcyBvZiBh
IHN0YWNrCi0gICAgLy8gc2xvdC4KKyAgICAvLyBBIGxvY2tlZCBzdGFjayBzbG90IGlzIGFuIGFy
ZWEgb2Ygc3RhY2sgcmVxdWVzdGVkIGJ5IHRoZSBjbGllbnQuIEl0IGNhbm5vdCBiZSBraWxsZWQu
IFRoZQorICAgIC8vIGNsaWVudCBjYW4gZ2V0IGl0cyBGUCBvZmZzZXQgYW5kIHdyaXRlIHRvIGl0
IGZyb20gc3RhY2sgd2Fsa2luZyBjb2RlLCBzbyB3ZSBtdXN0IGFzc3VtZQorICAgIC8vIHRoYXQg
cmVhZHMgYW5kIHdyaXRlcyB0byBhIGxvY2tlZCBzdGFjayBzbG90IGNhbiBiZSBjbG9iYmVyZWQg
dGhlIHNhbWUgd2F5IGFzIHJlYWRzIGFuZAorICAgIC8vIHdyaXRlcyB0byBhbnkgbWVtb3J5IGxv
Y2F0aW9uLgogICAgIExvY2tlZCwKIAotICAgIC8vIFRoZXNlIHN0YWNrIHNsb3RzIGJlaGF2ZSBs
aWtlIHZhcmlhYmxlcy4gVW5kZWZpbmVkIGJlaGF2aW9yIGhhcHBlbnMgaWYgeW91IHN0b3JlIGxl
c3MgdGhhbgotICAgIC8vIHRoZSB3aWR0aCBvZiB0aGUgc2xvdC4KLSAgICBBbm9ueW1vdXMKKyAg
ICAvLyBBIHNwaWxsIHNsb3QuIFRoZXNlIGhhdmUgZnVuZGFtZW50YWxseSBkaWZmZXJlbnQgYmVo
YXZpb3IgdGhhbiBhIHR5cGljYWwgbWVtb3J5IGxvY2F0aW9uLgorICAgIC8vIFRoZXkgYXJlIGxv
d2VyZWQgdG8gZnJvbSB0ZW1wb3Jhcmllcy4gVGhpcyBtZWFucyBmb3IgZXhhbXBsZSB0aGF0IGEg
MzItYml0IFpEZWYgc3RvcmUgdG8gYQorICAgIC8vIDggYnl0ZSBzdGFjayBzbG90IHdpbGwgemVy
byB0aGUgdG9wIDQgYnl0ZXMsIGV2ZW4gdGhvdWdoIGEgMzItYml0IFpEZWYgc3RvcmUgdG8gYW55
IG90aGVyCisgICAgLy8ga2luZCBvZiBtZW1vcnkgbG9jYXRpb24gd291bGQgZG8gbm8gc3VjaCB0
aGluZy4gVXNlQWRkciBvbiBhIHNwaWxsIHNsb3QgaXMgbm90IGFsbG93ZWQsIHNvCisgICAgLy8g
dGhleSBuZXZlciBlc2NhcGUuCisgICAgU3BpbGwKIAogICAgIC8vIEZJWE1FOiBXZSBzaG91bGQg
YWRkIGEgdGhpcmQgbW9kZSwgd2hpY2ggbWVhbnMgdGhhdCB0aGUgc3RhY2sgc2xvdCB3aWxsIGJl
IHJlYWQgYXN5bmNocm9ub3VzbHkKICAgICAvLyBhcyB3aXRoIExvY2tlZCwgYnV0IG5ldmVyIHdy
aXR0ZW4gdG8gYXN5bmNocm9ub3VzbHkuIFRoZW4sIEFpciBjb3VsZCBvcHRpbWl6ZSBzcGlsbGlu
ZyBhbmQKQEAgLTQ3LDEzICs1MSwxMyBAQCBlbnVtIGNsYXNzIFN0YWNrU2xvdEtpbmQgOiB1aW50
OF90IHsKICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUw
NTg3CiB9OwogCi19IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKK30gfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkIzOjpBaXIKIAogbmFtZXNwYWNlIFdURiB7CiAKIGNsYXNzIFByaW50U3RyZWFtOwogCi12
b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkIzOjpTdGFja1Nsb3RLaW5kKTsK
K3ZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6QjM6OkFpcjo6U3RhY2tTbG90
S2luZCk7CiAKIH0gLy8gbmFtZXNwYWNlIFdURgogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL29wY29kZV9nZW5lcmF0b3IucmIKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9vcGNvZGVfZ2VuZXJhdG9yLnJiCShyZXZpc2lvbiAxOTU5NzApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL29wY29kZV9nZW5lcmF0b3IucmIJKHdvcmtp
bmcgY29weSkKQEAgLTY4MCw2ICs2ODAsMTggQEAgd3JpdGVIKCJPcGNvZGVVdGlscyIpIHsKICAg
ICAgICAgICAgICAgICBmaWx0ZXIgPSBwcm9jIHsgZmFsc2UgfQogICAgICAgICAgICAgICAgIGNh
bGxiYWNrID0gcHJvYyB7CiAgICAgICAgICAgICAgICAgICAgIHwgZm9ybSB8CisgICAgICAgICAg
ICAgICAgICAgICMgVGhpcyBjb25zZXJ2YXRpdmVseSBzYXlzIHRoYXQgU3RhY2sgaXMgbm90IGEg
dmFsaWQgZm9ybSBmb3IgVXNlQWRkciwKKyAgICAgICAgICAgICAgICAgICAgIyBiZWNhdXNlIGl0
J3Mgb25seSB2YWxpZCBpZiBpdCdzIG5vdCBhIHNwaWxsIHNsb3QuIFRoaXMgaXMgY29uc2lzdGVu
dCB3aXRoCisgICAgICAgICAgICAgICAgICAgICMgaXNWYWxpZEZvcm0oKSBiZWluZyBjb25zZXJ2
YXRpdmUgYW5kIGl0IGFsc28gaGFwcGVucyB0byBiZSBwcmFjdGljYWwgc2luY2UKKyAgICAgICAg
ICAgICAgICAgICAgIyB3ZSBkb24ndCByZWFsbHkgdXNlIGlzVmFsaWRGb3JtIGZvciBkZWNpZGlu
ZyB3aGVuIFN0YWNrIGlzIHNhZmUuCisgICAgICAgICAgICAgICAgICAgIG92ZXJsb2FkLnNpZ25h
dHVyZS5sZW5ndGgudGltZXMgeworICAgICAgICAgICAgICAgICAgICAgICAgfCBpbmRleCB8Cisg
ICAgICAgICAgICAgICAgICAgICAgICBpZiBvdmVybG9hZC5zaWduYXR1cmVbaW5kZXhdLnJvbGUg
PT0gIlVBIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiaWYgKG9wZ2Vu
SGlkZGVuUHRySWRlbnRpdHkoa2luZHMpWyN7aW5kZXh9XSA9PSBBcmc6OlN0YWNrKSIKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgIiAgICByZXR1cm4gZmFsc2U7IgorICAg
ICAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIG5vdEN1c3RvbSA9IChub3QgZm9ybS5r
aW5kcy5kZXRlY3QgeyB8IGtpbmQgfCBraW5kLmN1c3RvbSB9KQogICAgICAgICAgICAgICAgICAg
ICBpZiBub3RDdXN0b20KICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luQXJjaHMob3V0cCwg
Zm9ybS5hcmNocykKQEAgLTc4Nyw2ICs3OTksMTEgQEAgd3JpdGVIKCJPcGNvZGVHZW5lcmF0ZWQi
KSB7CiAgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiaWYgKCFBcmc6OmlzVmFsaWRJbW1G
b3JtKGFyZ3NbI3tpbmRleH1dLnZhbHVlKCkpKSIKICAgICAgICAgICAgICAgICAgICAgb3V0cC5w
dXRzICJPUEdFTl9SRVRVUk4oZmFsc2UpOyIKICAgICAgICAgICAgICAgICB3aGVuICJBZGRyIgor
ICAgICAgICAgICAgICAgICAgICBpZiBhcmcucm9sZSA9PSAiVUEiCisgICAgICAgICAgICAgICAg
ICAgICAgICBvdXRwLnB1dHMgImlmIChhcmdzWyN7aW5kZXh9XS5pc1N0YWNrKCkgJiYgYXJnc1sj
e2luZGV4fV0uc3RhY2tTbG90KCktPmlzU3BpbGwoKSkiCisgICAgICAgICAgICAgICAgICAgICAg
ICBvdXRwLnB1dHMgIk9QR0VOX1JFVFVSTihmYWxzZSk7IgorICAgICAgICAgICAgICAgICAgICBl
bmQKKyAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAi
aWYgKCFBcmc6OmlzVmFsaWRBZGRyRm9ybShhcmdzWyN7aW5kZXh9XS5vZmZzZXQoKSkpIgogICAg
ICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgIk9QR0VOX1JFVFVSTihmYWxzZSk7IgogICAgICAg
ICAgICAgICAgIHdoZW4gIkluZGV4IgpAQCAtODM5LDkgKzg1NiwxMSBAQCB3cml0ZUgoIk9wY29k
ZUdlbmVyYXRlZCIpIHsKICAgICAgICAgICAgICAgICBudW1ObyA9IDAKICAgICAgICAgICAgICAg
ICBvcGNvZGUub3ZlcmxvYWRzLmVhY2ggewogICAgICAgICAgICAgICAgICAgICB8IG92ZXJsb2Fk
IHwKKyAgICAgICAgICAgICAgICAgICAgdXNlQWRkciA9IChvdmVybG9hZC5zaWduYXR1cmVbYXJn
SW5kZXhdIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJsb2FkLnNpZ25h
dHVyZVthcmdJbmRleF0ucm9sZSA9PSAiVUEiKQogICAgICAgICAgICAgICAgICAgICBvdmVybG9h
ZC5mb3Jtcy5lYWNoIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHwgZm9ybSB8Ci0gICAgICAg
ICAgICAgICAgICAgICAgICBpZiBmb3JtLmtpbmRzW2FyZ0luZGV4XSA9PSAiQWRkciIKKyAgICAg
ICAgICAgICAgICAgICAgICAgIGlmIGZvcm0ua2luZHNbYXJnSW5kZXhdID09ICJBZGRyIiBhbmQg
bm90IHVzZUFkZHIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1ZZXMgKz0gMQogICAg
ICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51
bU5vICs9IDEKQEAgLTg2NCwxMiArODgzLDE1IEBAIHdyaXRlSCgiT3Bjb2RlR2VuZXJhdGVkIikg
ewogICAgICAgICAgICAgICAgICAgICBvcGNvZGUub3ZlcmxvYWRzLmVhY2ggewogICAgICAgICAg
ICAgICAgICAgICAgICAgfCBvdmVybG9hZCB8CiAKKyAgICAgICAgICAgICAgICAgICAgICAgIHVz
ZUFkZHIgPSAob3ZlcmxvYWQuc2lnbmF0dXJlW2FyZ0luZGV4XSBhbmQKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgb3ZlcmxvYWQuc2lnbmF0dXJlW2FyZ0luZGV4XS5yb2xlID09
ICJVQSIpCisgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAg
ICMgQWdhaW4sIGNoZWNrIGlmIGFsbCBvZiB0aGVtIGRvIHdoYXQgd2Ugd2FudC4KICAgICAgICAg
ICAgICAgICAgICAgICAgIG51bVllcyA9IDAKICAgICAgICAgICAgICAgICAgICAgICAgIG51bU5v
ID0gMAogICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmxvYWQuZm9ybXMuZWFjaCB7CiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgfCBmb3JtIHwKLSAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBpZiBmb3JtLmtpbmRzW2FyZ0luZGV4XSA9PSAiQWRkciIKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBpZiBmb3JtLmtpbmRzW2FyZ0luZGV4XSA9PSAiQWRkciIgYW5kIG5vdCB1c2VB
ZGRyCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bVllcyArPSAxCiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBudW1ObyArPSAxCkluZGV4OiBXZWJzaXRlcy93ZWJraXQub3JnL2RvY3MvYjMvaW50ZXJtZWRp
YXRlLXJlcHJlc2VudGF0aW9uLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vic2l0ZXMvd2Via2l0Lm9y
Zy9kb2NzL2IzL2ludGVybWVkaWF0ZS1yZXByZXNlbnRhdGlvbi5odG1sCShyZXZpc2lvbiAxOTU5
NzApCisrKyBXZWJzaXRlcy93ZWJraXQub3JnL2RvY3MvYjMvaW50ZXJtZWRpYXRlLXJlcHJlc2Vu
dGF0aW9uLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTg1LDcgKzg1LDcgQEAKICAgICAgIGZvciB0
aGUgbG9hZC4gIFdlIHVzZSB0aGUgTWVtb3J5VmFsdWUgY2xhc3MgZm9yIG1lbW9yeS1hY2Nlc3Np
bmcgdmFsdWVzLCB3aGljaCBhbGwgaGF2ZQogICAgICAgc3VjaCBhbiBvZmZzZXQuPC9wPgogCi0g
ICAgPGgyPlN0YWNrIFNsb3Q8L2gyPgorICAgIDxoMj5TdGFjayBTbG90czwvaDI+CiAKICAgICA8
cD5CMyBleHBvc2VzIHRoZSBjb25jZXB0IG9mIHN0YWNrLWFsbG9jYXRlZCBkYXRhIGFuZCBnaXZl
cyB0aGUgY2xpZW50IGEgbG90IG9mIGNvbnRyb2wuCiAgICAgICBZb3UgY2FuIGZvcmNlIHN0YWNr
IHNsb3RzIHRvIGVuZCB1cCBhdCBhIHBhcnRpY3VsYXIgb2Zmc2V0IGZyb20gdGhlIGZyYW1lIHBv
aW50ZXIsIHRob3VnaApAQCAtOTMsMjQgKzkzLDE5IEBACiAgICAgICBvZmZzZXQgZnJvbSBhbnkg
c3RhY2sgc2xvdC4gIFVzdWFsbHksIHlvdSBsZXQgQjMgc2VsZWN0IHdoZXJlIHN0YWNrIHNsb3Rz
IGdvLCBhbmQgdGhlbiB1c2UKICAgICAgIHRoZSBTdGFja1Nsb3QgQVBJIHRvIGdldCBpdHMgRlAg
b2Zmc2V0IGFmdGVyIGNvbXBpbGF0aW9uLjwvcD4KIAotICAgIDxwPlN0YWNrIHNsb3RzIGFyZSBh
bHNvIHVzZWQgZm9yIGNyZWF0aW5nIG5vbi1TU0EgdmFyaWFibGVzIHdpdGggdGhlIGludGVudGlv
biBvZiBoYXZpbmcgQjMKLSAgICAgIGNvbnZlcnQgdGhlbSBpbnRvIFNTQS4gIFRoZXJlIGFyZSB0
d28ga2luZHMgb2Ygc3RhY2sgbG90cy48L3A+CisgICAgPGgyPlZhcmlhYmxlczwvaDI+CiAKLSAg
ICA8ZGw+Ci0gICAgICA8ZHQ+QW5vbnltb3VzPC9kdD4KLSAgICAgIDxkZD5Bbm9ueW1vdXMgc3Rh
Y2sgc2xvdHMgYXJlIHVzZWQgdG8gcmVwcmVzZW50IGxvY2FsIHZhcmlhYmxlcyB0aGF0IGFyZW4n
dCBpbiBTU0EgZm9ybS4KLSAgICAgICAgQjMgaXMgYWxsb3dlZCB0byBhc3N1bWUgdGhhdCBub2Jv
ZHkgd2lsbCBzdG9yZSB0byBhbiBhbm9ueW1vdXMgc3RhY2sgc2xvdCBleGNlcHQgdGhyb3VnaAot
ICAgICAgICBTdG9yZSBpbnN0cnVjdGlvbnMgaW4gdGhlIEIzIHByb2NlZHVyZS4gIEIzIGlzIGFs
bG93ZWQgdG8gYXNzdW1lIHRoYXQgYSBTdG9yZSB0aGF0IGRvZXMKLSAgICAgICAgbm90IHdyaXRl
IHRvIHRoZSBlbnRpcmUgYW5vbnltb3VzIHN0YWNrIHNsb3QgbGVhdmVzIHRoZSB1bndyaXR0ZW4g
cGFydCBpbiBhbiB1bmRlZmluZWQKLSAgICAgICAgc3RhdGUuICBVc3VhbGx5LCBhbm9ueW1vdXMg
c3RhY2sgc2xvdHMgYXJlIGFsbG9jYXRlZCB0byBoYXZlIHRoZSBzYW1lIHNpemUgYXMgdGhlIHR5
cGUKLSAgICAgICAgb2YgdmFyaWFibGUgdGhleSBhcmUgYmVpbmcgdXNlZCB0byByZXByZXNlbnQu
PC9kZD4KLQotICAgICAgPGR0PkxvY2tlZDwvZHQ+Ci0gICAgICA8ZGQ+VGhlc2Ugc3RhY2sgc2xv
dHMgYXJlIGFzc3VtZWQgdG8gb3BlcmF0ZSAiYXMgaWYiIHRoZXkgd2VyZSBpbiB0aGUgaGVhcCwg
aW4gdGhlIHNlbnNlCi0gICAgICAgIHRoYXQgdGhlIG1heSBnZXQgcmVhZCBvciB3cml0dGVuIHVz
aW5nIG9wZXJhdGlvbnMgbm90IHZpc2libGUgaW4gQjMgSVIuPC9kZD4KLSAgICA8L2RsPgotCi0g
ICAgPHA+VGhlIGZpeFNTQSgpIHBoYXNlIHdpbGwgY29udmVydCBhbm9ueW1vdXMgc3RhY2sgc2xv
dHMgdG8gU1NBLjwvcD4KKyAgICA8cD5Tb21ldGltZXMsIFNTQSBpcyBpbmNvbnZlbmllbnQuIEZv
ciBleGFtcGxlLCBpdCdzIGhhcmQgdG8gZG8gcGF0aCBzcGVjaWFsaXphdGlvbiBvdmVyIFNTQS4K
KyAgICAgIEIzIGhhcyB0aGUgY29uY2VwdCBvZiBWYXJpYWJsZXMgYXMgYSBmYWxsLWJhY2suIFRo
ZSBiYWNrZW5kIGtub3dzIGhvdyB0byBoYW5kbGUgdGhlbSBhbmQKKyAgICAgIHdpbGwgY29hbGVz
Y2UgYW5kIGNvcHktcHJvcGFnYXRlIHRoZW0uIEluc2lkZSB0aGUgQjMgb3B0aW1pemVyLCB0aGVy
ZSBpcyBhIGNsYXNzaWMgU1NBCisgICAgICBidWlsZGVyIHRoYXQgZWxpbWluYXRlcyB2YXJpYWJs
ZXMgYW5kIGJ1aWxkcyBTU0EgaW4gdGhlaXIgcGxhY2UuPC9wPgorCisgICAgPHA+WW91IGNhbiBj
cmVhdGUgVmFyaWFibGVzIGJ5IHVzaW5nIFByb2NlZHVyZTo6YWRkVmFyaWFibGUoKSwgYW5kIHRo
ZW4geW91IGNhbiBhY2Nlc3MgdGhlbQorICAgICAgdXNpbmcgdGhlIEdldCBhbmQgU2V0IG9wY29k
ZXMuPC9wPgorCisgICAgPHA+VGhlIGZpeFNTQSgpIHBoYXNlIHdpbGwgY29udmVydCB2YXJpYWJs
ZXMgdG8gU1NBLiBJZiB5b3UgdXNlIGEgbG90IG9mIHZhcmlhYmxlcyBpbiB5b3VyCisgICAgICBp
bnB1dCB0byBCMywgaXQncyBhIGdvb2QgaWRlYSB0byBydW4gZml4U1NBKCkgbWFudWFsbHkgYmVm
b3JlIHJ1bm5pbmcgdGhlIGNvbXBpbGVyLiBUaGUKKyAgICAgIGRlZmF1bHQgb3B0aW1pemVyIG9u
bHkgcnVucyBmaXhTU0EoKSB0b3dhcmRzIHRoZSBtaWRkbGUgb2Ygb3B0aW1pemF0aW9ucy4gPC9w
PgogCiAgICAgPGgyPkNvbnRyb2wgZmxvdzwvaDI+CiAKQEAgLTE2OSw2ICsxNjQsMTMgQEAKICAg
ICAgIDxkdD5Eb3VibGUgQ29uc3REb3VibGUoY29uc3RhbnQpPC9kdD4KICAgICAgIDxkZD5Eb3Vi
bGUgY29uc3RhbnQuICBNdXN0IHVzZSB0aGUgQ29uc3REb3VibGVWYWx1ZSBjbGFzcywgd2hpY2gg
aGFzIHNwYWNlIGZvciB0aGUgZG91YmxlIGNvbnN0YW50LjwvZGQ+CiAKKyAgICAgIDxkdD5Wb2lk
IFNldCh2YWx1ZSwgdmFyaWFibGUpPC9kdD4KKyAgICAgIDxkZD5Bc3NpZ25zIHRoZSBnaXZlbiB2
YWx1ZSB0byB0aGUgZ2l2ZW4gVmFyaWFibGUuIE11c3QgdXNlIHRoZSBWYXJpYWJsZVZhbHVlIGNs
YXNzLjwvZGQ+CisKKyAgICAgIDxkdD5UIEdldCh2YXJpYWJsZSk8L2R0PgorICAgICAgPGRkPlJl
dHVybnMgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGdpdmVuIFZhcmlhYmxlLiBJdHMgcmV0dXJu
IHR5cGUgZGVwZW5kcyBvbiB0aGUKKyAgICAgICAgdmFyaWFibGUuIE11c3QgdXNlIHRoZSBWYXJp
YWJsZVZhbHVlIGNsYXNzLjwvZGQ+CisKICAgICAgIDxkdD5JbnRQdHIgU2xvdEJhc2Uoc3RhY2tT
bG90KTwvZHQ+CiAgICAgICA8ZGQ+UmV0dXJucyBhIHBvaW50ZXIgdG8gdGhlIGJhc2Ugb2YgdGhl
IGdpdmVuIHN0YWNrIHNsb3QuICBNdXN0IHVzZSB0aGUgU2xvdEJhc2VWYWx1ZQogICAgICAgICBj
bGFzcy48L2RkPgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>270464</attachid>
            <date>2016-02-01 19:08:20 -0800</date>
            <delta_ts>2016-02-02 09:55:39 -0800</delta_ts>
            <desc>almost done</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>160095</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTk2MDAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMwOSBA
QAorMjAxNi0wMi0wMSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEdldCByaWQgb2YgYW5vbnltb3VzIHN0YWNrIHNsb3RzCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTExMjgKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXaGVuIEkgZmlyc3QgZGVzaWduZWQgc3RhY2sgc2xv
dHMsIHRoZSBpZGVhIHdhcyB0aGF0IGFuICJhbm9ueW1vdXMiIHN0YWNrIHNsb3Qgd2FzIG9uZSB0
aGF0CisgICAgICAgIGJlaGF2ZWQgZXhhY3RseSBsaWtlIGEgQyB2YXJpYWJsZTogaWYgaXQgbmV2
ZXIgZXNjYXBlZCwgaXQgd291bGQgbm90IG5lZWQgdG8gZ2V0IHN0YWNrIHNwYWNlCisgICAgICAg
IGZvciB0aGUgZW50aXJlIGxpZmV0aW1lIG9mIHRoZSBmdW5jdGlvbiAtIGl0IGNvdWxkIGdldCBh
bnkgc2xhYiBvZiBzdGFjayBzbyBsb25nIGFzIGl0CisgICAgICAgIGRpZG4ndCBpbnRlcmZlcmUg
d2l0aCBvdGhlciBzdGFjayBzbG90cyB0aGF0IHdvdWxkIGJlIGxpdmUgYXQgdGhlIHNhbWUgdGlt
ZS4gVGhlIHJlYXNvbiBJCisgICAgICAgIGNhbGxlZCB0aGVtICJhbm9ueW1vdXMiIGlzIHRoYXQg
ZXh0ZXJuYWwgY29kZSBjb3VsZCBub3QgZ2V0IGl0cyBhZGRyZXNzLiBUaGlzIGZlbHQgbGlrZSBp
dAorICAgICAgICBnYXZlIHRoZSBzdGFjayBzbG90IGFub255bWl0eS4gQnV0IGl0IHdhcyBuZXZl
ciBhIGdvb2QgbmFtZSBmb3IgdGhpcyBjb25jZXB0LgorCisgICAgICAgIFRoZW4gSSBoYWQgdGhl
IHJlZ2lzdGVyIGFsbG9jYXRvciBsb3dlciB0ZW1wb3JhcmllcyB0byBhbm9ueW1vdXMgc3RhY2sg
c2xvdHMgd2hlbiBpdCBzcGlsbGVkCisgICAgICAgIHRoZW0uIFNwaWxsaW5nIGJlY2FtZSB0aGUg
c29sZSBjbGllbnQgb2YgYW5vbnltb3VzIHN0YWNrIHNsb3RzLgorCisgICAgICAgIFRoZW4gSSBy
ZWFsaXplZCB0aGF0IHRoZXJlIHdhcyBhbiBhc3BlY3Qgb2YgaG93IHNwaWxsIHNsb3RzIHdvcmsg
dGhhdCBtYWtlIHRoZW0gd2FudAorICAgICAgICBzbGlnaHRseSBkaWZmZXJlbnQgc2VtYW50aWNz
IHRoYW4gYSBub3JtYWwgQyB2YXJpYWJsZS4gQSBDIHZhcmlhYmxlIGlzIGEgcHJvcGVyIG1lbW9y
eQorICAgICAgICBsb2NhdGlvbiAtIHlvdSBjb3VsZCBkbyBhIHN0b3JlIHRvIG9ubHkgc29tZSBi
eXRlcyBpbiB0aGUgdmFyaWFibGUsIGFuZCBpdCdzIHJlYXNvbmFibGUgdG8KKyAgICAgICAgZXhw
ZWN0IHRoYXQgdGhpcyB3aWxsIG5vdCBkZXN0cm95IHRoZSBvdGhlciBieXRlcyBpbiB0aGUgdmFy
aWFibGUuIEJ1dCB0aGF0IG1lYW5zIHRoYXQgdG8KKyAgICAgICAgY29tcHV0ZSB0aGVpciBsaXZl
bmVzcywgeW91IGhhdmUgdG8gZG8gc29tZXRoaW5nIGxpa2UgYSBwZXItYnl0ZSBsaXZlbmVzcy4g
VGhhdCdzIG92ZXJraWxsCisgICAgICAgIGZvciBzcGlsbCBzbG90cy4gWW91IHdhbnQgYW55IHN0
b3JlIHRvIHRoZSBzcGlsbCBzbG90IHRvIGtpbGwgdGhlIHdob2xlIHNsb3QgZXZlbiBpZiBpdAor
ICAgICAgICB3cml0ZXMgdG8ganVzdCBwYXJ0IG9mIHRoZSBzbG90LiBUaGlzIG1hdGNoZXMgaG93
IHRlbXBvcmFyaWVzIHdvcmsuIFNvIHJhdGhlciB0aGFuIGltcGxlbWVudAorICAgICAgICBwZXIt
Ynl0ZSBsaXZlbmVzcywgSSBkZWNpZGVkIHRvIGNoYW5nZSB0aGUgc2VtYW50aWNzIG9mIGFub255
bW91cyBzdGFjayBzbG90cyB0byBtYWtlIHRoZW0KKyAgICAgICAgd29yayBsaWtlIGhvdyBJIHdh
bnRlZCBzcGlsbCBzbG90cyB0byB3b3JrLiBUaGlzIHdhcyBxdWl0ZSBkaXJ0eSwgYW5kIHB1dCBC
MyBpbiB0aGUgYXdrd2FyZAorICAgICAgICBzaXR1YXRpb24gdGhhdCBCMydzIGFub255bW91cyBz
dGFjayBzbG90cyBiZWhhdmVkIGxpa2Ugc3BpbGwgc2xvdHMuIEJ1dCBpdCB3YXMgT0sgc2luY2UK
KyAgICAgICAgbm9ib2R5IHVzZWQgYW5vbnltb3VzIHN0YWNrIHNsb3RzIGluIEIzLgorCisgICAg
ICAgIFRoZW4gSSBhZGRlZCB0YWlsIGR1cGxpY2F0aW9uLCB3aGljaCByZXF1aXJlZCBoYXZpbmcg
YSBtZWNoYW5pc20gZm9yIGludHJvZHVjaW5nIG5vbi1TU0EKKyAgICAgICAgdmFyaWFibGVzIGlu
IEIzLiBJIGRlY2lkZWQgdG8gdXNlIGFub255bW91cyBzdGFjayBzbG90cyBmb3IgdGhpcyBwdXJw
b3NlLiBBbGwgb2YgYSBzdWRkZW4KKyAgICAgICAgdGhpcyBhbGwgZmVsdCBsaWtlIGl0IG1hZGUg
c2Vuc2U6IGFub255bW91cyBzdGFjayBzbG90cyB3ZXJlIGp1c3QgbGlrZSB2YXJpYWJsZXMhIEhv
b3JheSBmb3IKKyAgICAgICAgdGhlIGFtYXppbmcgZm9yZXNpZ2h0IG9mIGFub255bW91cyBzdGFj
ayBzbG90cyEKKworICAgICAgICBCdXQgdGhlbiBJIHJlYWxpemVkIHRoYXQgdGhpcyB3YXMgYWxs
IHZlcnkgYmFkLiBXZSB3YW50IEIzIHRvIGJlIGFibGUgdG8gb3B0aW1pemUgU3RvcmUgYW5kCisg
ICAgICAgIExvYWQgb3BlcmF0aW9ucyBieSByZWFzb25pbmcgYWJvdXQgaG93IHRoZXkgYWZmZWN0
IGJ5dGVzIGluIG1lbW9yeS4gRm9yIGV4YW1wbGUsIGlmIHlvdSBkbworICAgICAgICBhIExvYWQg
b2YgYSA2NC1iaXQgdmFsdWUsIGFuZCB0aGVuIHlvdSBtb2RpZnkganVzdCB0aGUgbG93IDMyIGJp
dHMgb2YgdGhhdCB2YWx1ZSwgYW5kIHRoZW4KKyAgICAgICAgeW91IGRvIGEgNjQtYml0IHN0b3Jl
IGJhY2sgdG8gdGhlIHNhbWUgbG9jYXRpb24sIHRoZW4gaXQgd291bGQgYmUgYmV0dGVyIHRvIHRy
YW5zZm9ybSB0aGlzCisgICAgICAgIGludG8gMzItYml0IG9wZXJhdGlvbnMuIFdlIGRvbid0IGRv
IHRoaXMgb3B0aW1pemF0aW9uIHlldCwgYnV0IGl0J3MgdGhlIGtpbmQgb2YgdGhpbmcgdGhhdAor
ICAgICAgICB3ZSB3YW50IEIzIHRvIGJlIGFibGUgdG8gZG8uIFRvIGRvIGl0LCB3ZSBuZWVkIFN0
b3JlIHRvIG1lYW4gdGhhdCBpdCBvbmx5IGFmZmVjdHMgTiBieXRlcworICAgICAgICBzdGFydGlu
ZyBhdCB0aGUgcG9pbnRlciwgd2hlcmUgTiBpcyB0aGUgc2l6ZSBvZiB0aGUgdGhpbmcgYmVpbmcg
c3RvcmVkLiBCdXQgdGhhdCdzIG5vdCB3aGF0CisgICAgICAgIFN0b3JlIG1lYW5zIGZvciBhbm9u
eW1vdXMgc3RhY2sgc2xvdHMuIEZvciBhbm9ueW1vdXMgc2xvdHMsIHN0b3JpbmcgdG8gYW55IGJ5
dGUgaW4gdGhlIHNsb3QKKyAgICAgICAgY2xvYmJlcnMgYWxsIGJ5dGVzIGluIHRoZSBzbG90LiBX
ZSB3ZXJlIG5ldmVyIGNsZWFyIGlmIHlvdSBuZWVkIHRvIHN0b3JlIGRpcmVjdGx5IHRvIGFuCisg
ICAgICAgIGFub255bW91cyBzbG90IHRvIGdldCB0aGlzIGJlaGF2aW9yLCBvciBpZiBhbnkgcG9p
bnRlciB0aGF0IHBvaW50cyB0byBhbiBhbm95bW91cyBzbG90IG11c3QKKyAgICAgICAgZXhoaWJp
dCB0aGlzIGJlaGF2aW9yIHdoZW4gc3RvcmVkIHRvLiBOZWl0aGVyIGtpbmRzIG9mIHNlbWFudGlj
cyBtYWtlIHNlbnNlIHRvIG1lLgorCisgICAgICAgIFRoaXMgY2hhbmdlIGZpeGVzIHRoZSBwcm9i
bGVtIGJ5IGVyYWRpY2F0aW5nIGFub255bW91cyBzdGFjayBzbG90cy4gSW4gQjMsIHRoZXkgYXJl
IHJlcGxhY2VkCisgICAgICAgIHdpdGggVmFyaWFibGVzLiBJbiBBaXIsIHRoZXkgYXJlIHJlcGxh
Y2VkIHdpdGggYSBkaWZmZXJlbnQgc3RhY2sgc2xvdCBraW5kLCBjYWxsZWQgU3BpbGwuCisgICAg
ICAgIFRoZXJlIGlzIG5vIHN1Y2ggdGhpbmcgYXMgc3RhY2sgc2xvdCBraW5kcyBpbiBCMyBhbnlt
b3JlLCBhbGwgQjMgc3RhY2sgc2xvdHMgYXJlIGxvY2tlZC4gSW4KKyAgICAgICAgQWlyLCB0aGVy
ZSBpcyBzdGlsbCB0aGUgY29uY2VwdCBvZiBzdGFjayBzbG90IGtpbmQgLSBMb2NrZWQgb3IgU3Bp
bGwuCisKKyAgICAgICAgQjMgVmFyaWFibGVzIGFyZSBhd2Vzb21lLiBUaGV5IGFyZSBleGFjdGx5
IHdoYXQgdGhleSBzZWVtIHRvIGJlLiBUaGV5IGhhdmUgYSB0eXBlLiBUaGV5IGFyZQorICAgICAg
ICBkZWNsYXJlZCBhdCB0aGUgdG9wIGxldmVsIGluIHRoZSBQcm9jZWR1cmUuIFlvdSBjYW4gYWNj
ZXNzIHRoZW0gd2l0aCBuZXcgb3Bjb2RlcywgR2V0IGFuZAorICAgICAgICBTZXQuIFRoaXMgZ3Jl
YXRseSBzaW1wbGlmaWVzIGRlbW90aW5nIFNTQSB2YWx1ZXMgdG8gdmFyaWFibGVzIGFuZCBwcm9t
b3RpbmcgdGhlbSBiYWNrIHRvCisgICAgICAgIFNTQS4gSSBldmVuIG1hZGUgdGhlIGluc3RydWN0
aW9uIHNlbGVjdG9yIGRvIHRoZSByaWdodCB0aGluZ3MgZm9yIHZhcmlhYmxlcywgd2hpY2ggbWVh
bnMKKyAgICAgICAgdGhhdCBpbnRyb2R1Y2luZyB2YXJpYWJsZXMgd29uJ3QgaHVydCBpbnN0cnVj
dGlvbiBzZWxlY3Rpb24gKHRoZXJlIHdpbGwgYmUgZXh0cmEgbW92ZXMsIGJ1dAorICAgICAgICBJ
UkMgd2lsbCBraWxsIHRoZW0pLiBJdCdzIGdyZWF0IHRvIGhhdmUgbm9uLVNTQSB2YXJpYWJsZXMg
YXMgYW4gZXhwbGljaXQgY29uY2VwdCBpbiBJUgorICAgICAgICBiZWNhdXNlIGl0IG1lYW5zIHRo
YXQgeW91IGRvbid0IGhhdmUgdG8gZG8gYW55IG1hZ2ljIHRvIHVzZSB0aGVtIC0gdGhleSBKdXN0
IFdvcmsuCisKKyAgICAgICAgQWlyIHNwaWxsIHNsb3RzIGJlaGF2ZSBhbG1vc3QgbGlrZSBhbm9u
eW1vdXMgc3RhY2sgc2xvdHMsIHdpdGggb25lIGV4Y2VwdGlvbjogeW91IGNhbm5vdAorICAgICAg
ICBlc2NhcGUgdGhlbS4gV2UgdmFsaWRhdGUgdGhpcyBieSBtYWtpbmcgaXQgaWxsZWdhbCB0byBV
c2VBZGRyIG9uIGEgc3BpbGwgc2xvdC4gVGhpcyByZW1vdmVzCisgICAgICAgIHRoZSBuZWVkIHRv
IGFuc3dlciBhd2t3YXJkIHF1ZXN0aW9ucyBsaWtlOiBkb2VzIGEgMzItYml0IERlZiBvbiBhIHBv
aW50ZXIgdGhhdCBtYXkgcG9pbnQgdG8KKyAgICAgICAgYSA2NC1iaXQgc3BpbGwgc2xvdCBkbyBh
bnl0aGluZyB0byB0aGUgMzIgYml0cyBhYm92ZSB0aGUgcG9pbnRlcj8gIERvZXMgaXQgd3JpdGUg
emVybyB0byBpdD8KKyAgICAgICAgRG9lcyBpdCB3cml0ZSB6ZXJvIHRvIGl0IGp1c3Qgd2hlbiB0
aGUgcG9pbnRlciBhY3R1YWxseSBwb2ludHMgdG8gYSBzcGlsbCBzbG90IG9yIGFsd2F5cz8KKyAg
ICAgICAgVGhlc2UgYXJlIHNpbGx5IHF1ZXN0aW9ucywgYW5kIHdlIGRvbid0IGhhdmUgdG8gYW5z
d2VyIHRoZW0gYmVjYXVzZSB0aGUgb25seSB3YXkgdG8gcmVmZXIgdG8KKyAgICAgICAgYSBzcGls
bCBzbG90IGlzIGRpcmVjdGx5LiBObyBlc2NhcGluZyBtZWFucyBubyBhbGlhc2luZy4KKworICAg
ICAgICBUaGlzIGRvZXNuJ3QgYWZmZWN0IHBlcmZvcm1hbmNlLiBJdCBqdXN0IG1ha2VzIHRoZSBj
b21waWxlciBtb3JlIGZ1biB0byB3b3JrIHdpdGggYnkKKyAgICAgICAgcmVtb3Zpbmcgc29tZSBj
b2duaXRpdmUgZGlzc29uYW5jZS4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAg
ICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICog
YjMvQjNBcmd1bWVudFJlZ1ZhbHVlLmg6CisgICAgICAgICogYjMvQjNDQ2FsbFZhbHVlLmg6Cisg
ICAgICAgICogYjMvQjNDaGVja1ZhbHVlLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OkNoZWNrVmFs
dWU6OmNsb25lSW1wbCk6CisgICAgICAgIChKU0M6OkIzOjpDaGVja1ZhbHVlOjpDaGVja1ZhbHVl
KToKKyAgICAgICAgKiBiMy9CM0NoZWNrVmFsdWUuaDoKKyAgICAgICAgKiBiMy9CM0NvbnN0MzJW
YWx1ZS5oOgorICAgICAgICAqIGIzL0IzQ29uc3Q2NFZhbHVlLmg6CisgICAgICAgICogYjMvQjND
b25zdERvdWJsZVZhbHVlLmg6CisgICAgICAgICogYjMvQjNDb25zdEZsb2F0VmFsdWUuaDoKKyAg
ICAgICAgKiBiMy9CM0NvbnN0UHRyVmFsdWUuaDoKKyAgICAgICAgKEpTQzo6QjM6OkNvbnN0UHRy
VmFsdWU6OkNvbnN0UHRyVmFsdWUpOgorICAgICAgICAqIGIzL0IzQ29udHJvbFZhbHVlLmNwcDoK
KyAgICAgICAgKEpTQzo6QjM6OkNvbnRyb2xWYWx1ZTo6Y29udmVydFRvSnVtcCk6CisgICAgICAg
IChKU0M6OkIzOjpDb250cm9sVmFsdWU6OmNvbnZlcnRUb09vcHMpOgorICAgICAgICAoSlNDOjpC
Mzo6Q29udHJvbFZhbHVlOjpkdW1wTWV0YSk6CisgICAgICAgICogYjMvQjNDb250cm9sVmFsdWUu
aDoKKyAgICAgICAgKiBiMy9CM0VmZmVjdHMuY3BwOgorICAgICAgICAoSlNDOjpCMzo6RWZmZWN0
czo6aW50ZXJmZXJlcyk6CisgICAgICAgIChKU0M6OkIzOjpFZmZlY3RzOjpkdW1wKToKKyAgICAg
ICAgKiBiMy9CM0VmZmVjdHMuaDoKKyAgICAgICAgKEpTQzo6QjM6OkVmZmVjdHM6Om11c3RFeGVj
dXRlKToKKyAgICAgICAgKiBiMy9CM0VsaW1pbmF0ZUNvbW1vblN1YmV4cHJlc3Npb25zLmNwcDoK
KyAgICAgICAgKiBiMy9CM0ZpeFNTQS5jcHA6CisgICAgICAgIChKU0M6OkIzOjpkZW1vdGVWYWx1
ZXMpOgorICAgICAgICAoSlNDOjpCMzo6Zml4U1NBKToKKyAgICAgICAgKiBiMy9CM0ZpeFNTQS5o
OgorICAgICAgICAqIGIzL0IzSW5kZXhNYXAuaDoKKyAgICAgICAgKEpTQzo6QjM6OkluZGV4TWFw
OjpyZXNpemUpOgorICAgICAgICAoSlNDOjpCMzo6SW5kZXhNYXA6OmNsZWFyKToKKyAgICAgICAg
KEpTQzo6QjM6OkluZGV4TWFwOjpzaXplKToKKyAgICAgICAgKEpTQzo6QjM6OkluZGV4TWFwOjpv
cGVyYXRvcltdKToKKyAgICAgICAgKiBiMy9CM0luZGV4U2V0Lmg6CisgICAgICAgIChKU0M6OkIz
OjpJbmRleFNldDo6Y29udGFpbnMpOgorICAgICAgICAoSlNDOjpCMzo6SW5kZXhTZXQ6OnNpemUp
OgorICAgICAgICAoSlNDOjpCMzo6SW5kZXhTZXQ6OmlzRW1wdHkpOgorICAgICAgICAqIGIzL0Iz
TG93ZXJUb0Fpci5jcHA6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OnJ1bik6
CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6Omxvd2VyKToKKyAgICAgICAgKiBi
My9CM01lbW9yeVZhbHVlLmg6CisgICAgICAgICogYjMvQjNPcGNvZGUuY3BwOgorICAgICAgICAo
V1RGOjpwcmludEludGVybmFsKToKKyAgICAgICAgKiBiMy9CM09wY29kZS5oOgorICAgICAgICAq
IGIzL0IzUGF0Y2hwb2ludFZhbHVlLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OlBhdGNocG9pbnRW
YWx1ZTo6Y2xvbmVJbXBsKToKKyAgICAgICAgKEpTQzo6QjM6OlBhdGNocG9pbnRWYWx1ZTo6UGF0
Y2hwb2ludFZhbHVlKToKKyAgICAgICAgKiBiMy9CM1BhdGNocG9pbnRWYWx1ZS5oOgorICAgICAg
ICAqIGIzL0IzUHJvY2VkdXJlLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6UHJv
Y2VkdXJlKToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6YWRkQmxvY2spOgorICAgICAg
ICAoSlNDOjpCMzo6UHJvY2VkdXJlOjphZGRTdGFja1Nsb3QpOgorICAgICAgICAoSlNDOjpCMzo6
UHJvY2VkdXJlOjphZGRWYXJpYWJsZSk6CisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6OmNs
b25lKToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6YWRkSW50Q29uc3RhbnQpOgorICAg
ICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpkdW1wKToKKyAgICAgICAgKEpTQzo6QjM6OlByb2Nl
ZHVyZTo6ZGVsZXRlU3RhY2tTbG90KToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6ZGVs
ZXRlVmFyaWFibGUpOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpkZWxldGVWYWx1ZSk6
CisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6OmRlbGV0ZU9ycGhhbnMpOgorICAgICAgICAo
SlNDOjpCMzo6UHJvY2VkdXJlOjpjYWxsZWVTYXZlUmVnaXN0ZXJzKToKKyAgICAgICAgKEpTQzo6
QjM6OlByb2NlZHVyZTo6YWRkVmFsdWVJbXBsKToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVy
ZTo6c2V0QmxvY2tPcmRlckltcGwpOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjphZGRB
bm9ueW1vdXNTdGFja1Nsb3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJl
OjphZGRTdGFja1Nsb3RJbmRleCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1
cmU6OmFkZFZhbHVlSW5kZXgpOiBEZWxldGVkLgorICAgICAgICAqIGIzL0IzUHJvY2VkdXJlLmg6
CisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6OnNldEJsb2NrT3JkZXIpOgorICAgICAgICAo
SlNDOjpCMzo6UHJvY2VkdXJlOjpzdGFja1Nsb3RzKToKKyAgICAgICAgKEpTQzo6QjM6OlByb2Nl
ZHVyZTo6dmFyaWFibGVzKToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6dmFsdWVzKToK
KyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6U3RhY2tTbG90c0NvbGxlY3Rpb246OlN0YWNr
U2xvdHNDb2xsZWN0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6
U3RhY2tTbG90c0NvbGxlY3Rpb246OnNpemUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCMzo6
UHJvY2VkdXJlOjpTdGFja1Nsb3RzQ29sbGVjdGlvbjo6YXQpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpCMzo6UHJvY2VkdXJlOjpTdGFja1Nsb3RzQ29sbGVjdGlvbjo6b3BlcmF0b3JbXSk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6OlN0YWNrU2xvdHNDb2xsZWN0aW9u
OjppdGVyYXRvcjo6aXRlcmF0b3IpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCMzo6UHJvY2Vk
dXJlOjpTdGFja1Nsb3RzQ29sbGVjdGlvbjo6aXRlcmF0b3I6Om9wZXJhdG9yKik6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6OlN0YWNrU2xvdHNDb2xsZWN0aW9uOjppdGVy
YXRvcjo6b3BlcmF0b3IrKyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6
OlN0YWNrU2xvdHNDb2xsZWN0aW9uOjppdGVyYXRvcjo6b3BlcmF0b3I9PSk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6OlN0YWNrU2xvdHNDb2xsZWN0aW9uOjppdGVyYXRv
cjo6b3BlcmF0b3IhPSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6OlN0
YWNrU2xvdHNDb2xsZWN0aW9uOjppdGVyYXRvcjo6ZmluZE5leHQpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpTdGFja1Nsb3RzQ29sbGVjdGlvbjo6YmVnaW4pOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpTdGFja1Nsb3RzQ29sbGVjdGlvbjo6
ZW5kKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6VmFsdWVzQ29sbGVj
dGlvbjo6VmFsdWVzQ29sbGVjdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkIzOjpQcm9j
ZWR1cmU6OlZhbHVlc0NvbGxlY3Rpb246Oml0ZXJhdG9yOjppdGVyYXRvcik6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6OlZhbHVlc0NvbGxlY3Rpb246Oml0ZXJhdG9yOjpv
cGVyYXRvciopOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpWYWx1ZXND
b2xsZWN0aW9uOjppdGVyYXRvcjo6b3BlcmF0b3IrKyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OkIzOjpQcm9jZWR1cmU6OlZhbHVlc0NvbGxlY3Rpb246Oml0ZXJhdG9yOjpvcGVyYXRvcj09KTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6VmFsdWVzQ29sbGVjdGlvbjo6
aXRlcmF0b3I6Om9wZXJhdG9yIT0pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCMzo6UHJvY2Vk
dXJlOjpWYWx1ZXNDb2xsZWN0aW9uOjppdGVyYXRvcjo6ZmluZE5leHQpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpWYWx1ZXNDb2xsZWN0aW9uOjpiZWdpbik6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6OlZhbHVlc0NvbGxlY3Rpb246OmVuZCk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6OlZhbHVlc0NvbGxlY3Rpb246
OnNpemUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpWYWx1ZXNDb2xs
ZWN0aW9uOjphdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6OlZhbHVl
c0NvbGxlY3Rpb246Om9wZXJhdG9yW10pOiBEZWxldGVkLgorICAgICAgICAqIGIzL0IzUHJvY2Vk
dXJlSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjphZGQpOgorICAgICAg
ICAqIGIzL0IzUmVkdWNlU3RyZW5ndGguY3BwOgorICAgICAgICAqIGIzL0IzU2xvdEJhc2VWYWx1
ZS5oOgorICAgICAgICAqIGIzL0IzU3BhcnNlQ29sbGVjdGlvbi5oOiBBZGRlZC4KKyAgICAgICAg
KEpTQzo6QjM6OlNwYXJzZUNvbGxlY3Rpb246OlNwYXJzZUNvbGxlY3Rpb24pOgorICAgICAgICAo
SlNDOjpCMzo6U3BhcnNlQ29sbGVjdGlvbjo6YWRkKToKKyAgICAgICAgKEpTQzo6QjM6OlNwYXJz
ZUNvbGxlY3Rpb246OmFkZE5ldyk6CisgICAgICAgIChKU0M6OkIzOjpTcGFyc2VDb2xsZWN0aW9u
OjpyZW1vdmUpOgorICAgICAgICAoSlNDOjpCMzo6U3BhcnNlQ29sbGVjdGlvbjo6c2l6ZSk6Cisg
ICAgICAgIChKU0M6OkIzOjpTcGFyc2VDb2xsZWN0aW9uOjppc0VtcHR5KToKKyAgICAgICAgKEpT
Qzo6QjM6OlNwYXJzZUNvbGxlY3Rpb246OmF0KToKKyAgICAgICAgKEpTQzo6QjM6OlNwYXJzZUNv
bGxlY3Rpb246Om9wZXJhdG9yW10pOgorICAgICAgICAoSlNDOjpCMzo6U3BhcnNlQ29sbGVjdGlv
bjo6aXRlcmF0b3I6Oml0ZXJhdG9yKToKKyAgICAgICAgKEpTQzo6QjM6OlNwYXJzZUNvbGxlY3Rp
b246Oml0ZXJhdG9yOjpvcGVyYXRvciopOgorICAgICAgICAoSlNDOjpCMzo6U3BhcnNlQ29sbGVj
dGlvbjo6aXRlcmF0b3I6Om9wZXJhdG9yKyspOgorICAgICAgICAoSlNDOjpCMzo6U3BhcnNlQ29s
bGVjdGlvbjo6aXRlcmF0b3I6Om9wZXJhdG9yPT0pOgorICAgICAgICAoSlNDOjpCMzo6U3BhcnNl
Q29sbGVjdGlvbjo6aXRlcmF0b3I6Om9wZXJhdG9yIT0pOgorICAgICAgICAoSlNDOjpCMzo6U3Bh
cnNlQ29sbGVjdGlvbjo6aXRlcmF0b3I6OmZpbmROZXh0KToKKyAgICAgICAgKEpTQzo6QjM6OlNw
YXJzZUNvbGxlY3Rpb246OmJlZ2luKToKKyAgICAgICAgKEpTQzo6QjM6OlNwYXJzZUNvbGxlY3Rp
b246OmVuZCk6CisgICAgICAgICogYjMvQjNTdGFja1Nsb3QuY3BwOgorICAgICAgICAoSlNDOjpC
Mzo6U3RhY2tTbG90OjpkZWVwRHVtcCk6CisgICAgICAgIChKU0M6OkIzOjpTdGFja1Nsb3Q6OlN0
YWNrU2xvdCk6CisgICAgICAgICogYjMvQjNTdGFja1Nsb3QuaDoKKyAgICAgICAgKEpTQzo6QjM6
OlN0YWNrU2xvdDo6Ynl0ZVNpemUpOgorICAgICAgICAoSlNDOjpCMzo6U3RhY2tTbG90OjppbmRl
eCk6CisgICAgICAgIChKU0M6OkIzOjpTdGFja1Nsb3Q6OnNldE9mZnNldEZyb21GUCk6CisgICAg
ICAgIChKU0M6OkIzOjpTdGFja1Nsb3Q6OmtpbmQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpC
Mzo6U3RhY2tTbG90Ojppc0xvY2tlZCk6IERlbGV0ZWQuCisgICAgICAgICogYjMvQjNTdGFja1Ns
b3RLaW5kLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBiMy9CM1N0YWNrU2xvdEtpbmQuaDogUmVt
b3ZlZC4KKyAgICAgICAgKiBiMy9CM1N0YWNrbWFwVmFsdWUuY3BwOgorICAgICAgICAoSlNDOjpC
Mzo6U3RhY2ttYXBWYWx1ZTo6ZHVtcE1ldGEpOgorICAgICAgICAoSlNDOjpCMzo6U3RhY2ttYXBW
YWx1ZTo6U3RhY2ttYXBWYWx1ZSk6CisgICAgICAgICogYjMvQjNTdGFja21hcFZhbHVlLmg6Cisg
ICAgICAgICogYjMvQjNTd2l0Y2hWYWx1ZS5jcHA6CisgICAgICAgIChKU0M6OkIzOjpTd2l0Y2hW
YWx1ZTo6Y2xvbmVJbXBsKToKKyAgICAgICAgKEpTQzo6QjM6OlN3aXRjaFZhbHVlOjpTd2l0Y2hW
YWx1ZSk6CisgICAgICAgICogYjMvQjNTd2l0Y2hWYWx1ZS5oOgorICAgICAgICAqIGIzL0IzVXBz
aWxvblZhbHVlLmg6CisgICAgICAgICogYjMvQjNWYWxpZGF0ZS5jcHA6CisgICAgICAgICogYjMv
QjNWYWx1ZS5jcHA6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZTo6cmVwbGFjZVdpdGhJZGVudGl0
eSk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZTo6cmVwbGFjZVdpdGhOb3ApOgorICAgICAgICAo
SlNDOjpCMzo6VmFsdWU6OnJlcGxhY2VXaXRoUGhpKToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVl
OjpkdW1wKToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjplZmZlY3RzKToKKyAgICAgICAgKEpT
Qzo6QjM6OlZhbHVlOjpjaGVja09wY29kZSk6CisgICAgICAgICogYjMvQjNWYWx1ZS5oOgorICAg
ICAgICAqIGIzL0IzVmFyaWFibGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlZhcmlh
YmxlOjp+VmFyaWFibGUpOgorICAgICAgICAoSlNDOjpCMzo6VmFyaWFibGU6OmR1bXApOgorICAg
ICAgICAoSlNDOjpCMzo6VmFyaWFibGU6OmRlZXBEdW1wKToKKyAgICAgICAgKEpTQzo6QjM6OlZh
cmlhYmxlOjpWYXJpYWJsZSk6CisgICAgICAgICogYjMvQjNWYXJpYWJsZS5oOiBBZGRlZC4KKyAg
ICAgICAgKEpTQzo6QjM6OlZhcmlhYmxlOjp0eXBlKToKKyAgICAgICAgKEpTQzo6QjM6OlZhcmlh
YmxlOjppbmRleCk6CisgICAgICAgIChKU0M6OkIzOjpEZWVwVmFyaWFibGVEdW1wOjpEZWVwVmFy
aWFibGVEdW1wKToKKyAgICAgICAgKEpTQzo6QjM6OkRlZXBWYXJpYWJsZUR1bXA6OmR1bXApOgor
ICAgICAgICAoSlNDOjpCMzo6ZGVlcER1bXApOgorICAgICAgICAqIGIzL0IzVmFyaWFibGVWYWx1
ZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6VmFyaWFibGVWYWx1ZTo6flZhcmlhYmxl
VmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6VmFyaWFibGVWYWx1ZTo6ZHVtcE1ldGEpOgorICAg
ICAgICAoSlNDOjpCMzo6VmFyaWFibGVWYWx1ZTo6Y2xvbmVJbXBsKToKKyAgICAgICAgKEpTQzo6
QjM6OlZhcmlhYmxlVmFsdWU6OlZhcmlhYmxlVmFsdWUpOgorICAgICAgICAqIGIzL0IzVmFyaWFi
bGVWYWx1ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBiMy9haXIvQWlyQWxsb2NhdGVTdGFjay5jcHA6
CisgICAgICAgIChKU0M6OkIzOjpBaXI6OmFsbG9jYXRlU3RhY2spOgorICAgICAgICAqIGIzL2Fp
ci9BaXJDb2RlLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6YWRkU3RhY2tTbG90
KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6YWRkU3BlY2lhbCk6CisgICAgICAgIChK
U0M6OkIzOjpBaXI6OkNvZGU6OmNDYWxsU3BlY2lhbCk6CisgICAgICAgICogYjMvYWlyL0FpckNv
ZGUuaDoKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6YmVnaW4pOgorICAgICAgICAoSlND
OjpCMzo6QWlyOjpDb2RlOjplbmQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpzdGFj
a1Nsb3RzKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6c3BlY2lhbHMpOgorICAgICAg
ICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpmb3JBbGxUbXBzKToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6Q29kZTo6U3RhY2tTbG90c0NvbGxlY3Rpb246OlN0YWNrU2xvdHNDb2xsZWN0aW9uKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6U3RhY2tTbG90c0NvbGxlY3Rpb246
OnNpemUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpTdGFja1Nsb3Rz
Q29sbGVjdGlvbjo6YXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpT
dGFja1Nsb3RzQ29sbGVjdGlvbjo6b3BlcmF0b3JbXSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OkIzOjpBaXI6OkNvZGU6OlN0YWNrU2xvdHNDb2xsZWN0aW9uOjppdGVyYXRvcjo6aXRlcmF0b3Ip
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpTdGFja1Nsb3RzQ29sbGVj
dGlvbjo6aXRlcmF0b3I6Om9wZXJhdG9yKik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkIzOjpB
aXI6OkNvZGU6OlN0YWNrU2xvdHNDb2xsZWN0aW9uOjppdGVyYXRvcjo6b3BlcmF0b3IrKyk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OlN0YWNrU2xvdHNDb2xsZWN0aW9u
OjppdGVyYXRvcjo6b3BlcmF0b3I9PSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6
OkNvZGU6OlN0YWNrU2xvdHNDb2xsZWN0aW9uOjppdGVyYXRvcjo6b3BlcmF0b3IhPSk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OlN0YWNrU2xvdHNDb2xsZWN0aW9uOjpi
ZWdpbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OlN0YWNrU2xvdHND
b2xsZWN0aW9uOjplbmQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpT
cGVjaWFsc0NvbGxlY3Rpb246OlNwZWNpYWxzQ29sbGVjdGlvbik6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OkIzOjpBaXI6OkNvZGU6OlNwZWNpYWxzQ29sbGVjdGlvbjo6c2l6ZSk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OlNwZWNpYWxzQ29sbGVjdGlvbjo6YXQpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpTcGVjaWFsc0NvbGxlY3Rpb246
Om9wZXJhdG9yW10pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpTcGVj
aWFsc0NvbGxlY3Rpb246Oml0ZXJhdG9yOjppdGVyYXRvcik6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OkIzOjpBaXI6OkNvZGU6OlNwZWNpYWxzQ29sbGVjdGlvbjo6aXRlcmF0b3I6Om9wZXJhdG9y
Kik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OlNwZWNpYWxzQ29sbGVj
dGlvbjo6aXRlcmF0b3I6Om9wZXJhdG9yKyspOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpDb2RlOjpTcGVjaWFsc0NvbGxlY3Rpb246Oml0ZXJhdG9yOjpvcGVyYXRvcj09KTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6U3BlY2lhbHNDb2xsZWN0aW9uOjpp
dGVyYXRvcjo6b3BlcmF0b3IhPSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNv
ZGU6OlNwZWNpYWxzQ29sbGVjdGlvbjo6YmVnaW4pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpDb2RlOjpTcGVjaWFsc0NvbGxlY3Rpb246OmVuZCk6IERlbGV0ZWQuCisgICAgICAg
ICogYjMvYWlyL0FpckZpeE9idmlvdXNTcGlsbHMuY3BwOgorICAgICAgICAqIGIzL2Fpci9BaXJJ
bnN0SW5saW5lcy5oOgorICAgICAgICAqIGIzL2Fpci9BaXJJdGVyYXRlZFJlZ2lzdGVyQ29hbGVz
Y2luZy5jcHA6CisgICAgICAgICogYjMvYWlyL0FpckxpdmVuZXNzLmg6CisgICAgICAgICogYjMv
YWlyL0Fpckxvd2VyQWZ0ZXJSZWdBbGxvYy5jcHA6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Omxv
d2VyQWZ0ZXJSZWdBbGxvYyk6CisgICAgICAgICogYjMvYWlyL0FpclNwZWNpYWwuY3BwOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpTcGVjaWFsOjpTcGVjaWFsKToKKyAgICAgICAgKiBiMy9haXIv
QWlyU3BlY2lhbC5oOgorICAgICAgICAqIGIzL2Fpci9BaXJTcGlsbEV2ZXJ5dGhpbmcuY3BwOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpzcGlsbEV2ZXJ5dGhpbmcpOgorICAgICAgICAqIGIzL2Fp
ci9BaXJTdGFja1Nsb3QuY3BwOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpTdGFja1Nsb3Q6OmR1
bXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpTdGFja1Nsb3Q6OmRlZXBEdW1wKToKKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6U3RhY2tTbG90OjpTdGFja1Nsb3QpOgorICAgICAgICAqIGIzL2Fp
ci9BaXJTdGFja1Nsb3QuaDoKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6U3RhY2tTbG90OjpieXRl
U2l6ZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlN0YWNrU2xvdDo6a2luZCk6CisgICAgICAg
IChKU0M6OkIzOjpBaXI6OlN0YWNrU2xvdDo6aXNMb2NrZWQpOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpTdGFja1Nsb3Q6OmlzU3BpbGwpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpTdGFja1Ns
b3Q6OmluZGV4KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6U3RhY2tTbG90OjplbnN1cmVTaXpl
KToKKyAgICAgICAgKiBiMy9haXIvQWlyU3RhY2tTbG90S2luZC5jcHA6IENvcGllZCBmcm9tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrU2xvdEtpbmQuY3BwLgorICAgICAgICAoV1RG
OjpwcmludEludGVybmFsKToKKyAgICAgICAgKiBiMy9haXIvQWlyU3RhY2tTbG90S2luZC5oOiBD
b3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja1Nsb3RLaW5kLmguCisg
ICAgICAgICogYjMvYWlyL29wY29kZV9nZW5lcmF0b3IucmI6CisgICAgICAgICogYjMvYWlyL3Rl
c3RhaXIuY3BwOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjp0ZXN0U2h1ZmZsZUJyb2FkY2FzdEFs
bFJlZ3MpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjp0ZXN0U2h1ZmZsZVNoaWZ0QWxsUmVncyk6
CisgICAgICAgIChKU0M6OkIzOjpBaXI6OnRlc3RTaHVmZmxlUm90YXRlQWxsUmVncyk6CisgICAg
ICAgICogYjMvdGVzdGIzLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RTdGFja1Nsb3QpOgor
ICAgICAgICAoSlNDOjpCMzo6dGVzdFN0b3JlTG9hZFN0YWNrU2xvdCk6CisgICAgICAgICogZnRs
L0ZUTEIzT3V0cHV0LmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpPdXRwdXQ6OmxvY2tlZFN0YWNr
U2xvdCk6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0OjpuZWcpOgorICAgICAgICAqIGZ0bC9G
VExMb3dlckRGR1RvTExWTS5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1Rv
TExWTTo6Y29tcGlsZUludmFsaWRhdGlvblBvaW50KToKKwogMjAxNi0wMi0wMSAgSm9zZXBoIFBl
Y29yYXJvICA8cGVjb3Jhcm9AYXBwbGUuY29tPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IEhp
Z2ggTGV2ZWwgTWVtb3J5IE92ZXJ2aWV3IEluc3RydW1lbnQKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9DTWFrZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ01ha2VMaXN0cy50eHQJKHJldmlzaW9uIDE5NTk3MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9DTWFrZUxpc3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtOTcsNiArOTcsNyBAQCBzZXQo
SmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAgIGIzL2Fpci9BaXJTcGVjaWFsLmNwcAogICAgIGIz
L2Fpci9BaXJTcGlsbEV2ZXJ5dGhpbmcuY3BwCiAgICAgYjMvYWlyL0FpclN0YWNrU2xvdC5jcHAK
KyAgICBiMy9haXIvQWlyU3RhY2tTbG90S2luZC5jcHAKICAgICBiMy9haXIvQWlyVG1wLmNwcAog
ICAgIGIzL2Fpci9BaXJUbXBXaWR0aC5jcHAKICAgICBiMy9haXIvQWlyVmFsaWRhdGUuY3BwCkBA
IC0xNTEsNyArMTUyLDYgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBiMy9CM1N0
YWNrbWFwR2VuZXJhdGlvblBhcmFtcy5jcHAKICAgICBiMy9CM1N0YWNrbWFwU3BlY2lhbC5jcHAK
ICAgICBiMy9CM1N0YWNrbWFwVmFsdWUuY3BwCi0gICAgYjMvQjNTdGFja1Nsb3RLaW5kLmNwcAog
ICAgIGIzL0IzU3RhY2tTbG90LmNwcAogICAgIGIzL0IzU3dpdGNoQ2FzZS5jcHAKICAgICBiMy9C
M1N3aXRjaFZhbHVlLmNwcApAQCAtMTYzLDYgKzE2Myw4IEBAIHNldChKYXZhU2NyaXB0Q29yZV9T
T1VSQ0VTCiAgICAgYjMvQjNWYWx1ZS5jcHAKICAgICBiMy9CM1ZhbHVlS2V5LmNwcAogICAgIGIz
L0IzVmFsdWVSZXAuY3BwCisgICAgYjMvQjNWYXJpYWJsZS5jcHAKKyAgICBiMy9CM1ZhcmlhYmxl
VmFsdWUuY3BwCiAKICAgICBiaW5kaW5ncy9TY3JpcHRGdW5jdGlvbkNhbGwuY3BwCiAgICAgYmlu
ZGluZ3MvU2NyaXB0T2JqZWN0LmNwcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHJldmlzaW9uIDE5NTk3MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0yMzksNiArMjM5
LDEzIEBACiAJCTBGMkI5Q0Y3MTlEMEJBQzEwMEIxRDFCNSAvKiBGVExFeGl0VGltZU9iamVjdE1h
dGVyaWFsaXphdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEYyQjlDRjExOUQwQkFDMTAwQjFEMUI1IC8qIEZUTEV4aXRUaW1lT2JqZWN0TWF0ZXJp
YWxpemF0aW9uLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJMEYyQjlDRjgxOUQwQkFDMTAwQjFEMUI1IC8qIEZUTE9wZXJhdGlvbnMuY3BwIGluIFNv
dXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQjlDRjIxOUQwQkFD
MTAwQjFEMUI1IC8qIEZUTE9wZXJhdGlvbnMuY3BwICovOyB9OwogCQkwRjJCOUNGOTE5RDBCQUMx
MDBCMUQxQjUgLyogRlRMT3BlcmF0aW9ucy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYyQjlDRjMxOUQwQkFDMTAwQjFEMUI1IC8qIEZUTE9wZXJhdGlv
bnMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkw
RjJCQkQ5NjFDNUZGM0Y1MDAyM0VGMjMgLyogQjNTcGFyc2VDb2xsZWN0aW9uLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCQkQ5MTFDNUZGM0Y1MDAy
M0VGMjMgLyogQjNTcGFyc2VDb2xsZWN0aW9uLmggKi87IH07CisJCTBGMkJCRDk3MUM1RkYzRjUw
MDIzRUYyMyAvKiBCM1ZhcmlhYmxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGMkJCRDkyMUM1RkYzRjUwMDIzRUYyMyAvKiBCM1ZhcmlhYmxlLmNw
cCAqLzsgfTsKKwkJMEYyQkJEOTgxQzVGRjNGNTAwMjNFRjIzIC8qIEIzVmFyaWFibGUuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGMkJCRDkzMUM1RkYz
RjUwMDIzRUYyMyAvKiBCM1ZhcmlhYmxlLmggKi87IH07CisJCTBGMkJCRDk5MUM1RkYzRjUwMDIz
RUYyMyAvKiBCM1ZhcmlhYmxlVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYyQkJEOTQxQzVGRjNGNTAwMjNFRjIzIC8qIEIzVmFyaWFibGVW
YWx1ZS5jcHAgKi87IH07CisJCTBGMkJCRDlBMUM1RkYzRjUwMDIzRUYyMyAvKiBCM1ZhcmlhYmxl
VmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
MkJCRDk1MUM1RkYzRjUwMDIzRUYyMyAvKiBCM1ZhcmlhYmxlVmFsdWUuaCAqLzsgfTsKKwkJMEYy
QkJEOUQxQzVGRjQwNTAwMjNFRjIzIC8qIEFpclN0YWNrU2xvdEtpbmQuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQkJEOUIxQzVGRjQwNTAwMjNF
RjIzIC8qIEFpclN0YWNrU2xvdEtpbmQuY3BwICovOyB9OworCQkwRjJCQkQ5RTFDNUZGNDA1MDAy
M0VGMjMgLyogQWlyU3RhY2tTbG90S2luZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVp
bGRGaWxlOyBmaWxlUmVmID0gMEYyQkJEOUMxQzVGRjQwNTAwMjNFRjIzIC8qIEFpclN0YWNrU2xv
dEtpbmQuaCAqLzsgfTsKIAkJMEYyQkRDMTUxNTFDNUQ0RDAwQ0Q4OTEwIC8qIERGR0ZpeHVwUGhh
c2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYy
QkRDMTIxNTFDNUQ0QTAwQ0Q4OTEwIC8qIERGR0ZpeHVwUGhhc2UuY3BwICovOyB9OwogCQkwRjJC
REMxNjE1MUM1RDRGMDBDRDg5MTAgLyogREZHRml4dXBQaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQkRDMTMxNTFDNUQ0QTAwQ0Q4OTEwIC8q
IERGR0ZpeHVwUGhhc2UuaCAqLzsgfTsKIAkJMEYyQkRDMjExNTFFODAzQjAwQ0Q4OTEwIC8qIERG
R0luc2VydGlvblNldC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEYyQkRDMUYxNTFFODAzODAwQ0Q4OTEwIC8qIERGR0luc2VydGlvblNldC5oICovOyB9
OwpAQCAtODMyLDggKzgzOSw2IEBACiAJCTBGRUM4NTJEMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1By
b2NlZHVyZUlubGluZXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGRUM4NEUzMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Byb2NlZHVyZUlubGluZXMuaCAq
LzsgfTsKIAkJMEZFQzg1MzAxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2ttYXBTcGVjaWFsLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEU2
MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrbWFwU3BlY2lhbC5jcHAgKi87IH07CiAJCTBGRUM4
NTMxMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrbWFwU3BlY2lhbC5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RTcxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzU3RhY2ttYXBTcGVjaWFsLmggKi87IH07Ci0JCTBGRUM4NTMyMUJEQUNEQUMwMDgwRkY3
NCAvKiBCM1N0YWNrU2xvdEtpbmQuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEZFQzg0RTgxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2tTbG90S2lu
ZC5jcHAgKi87IH07Ci0JCTBGRUM4NTMzMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xvdEtp
bmQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4
NEU5MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xvdEtpbmQuaCAqLzsgfTsKIAkJMEZFQzg1
MzQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU2xvdEJhc2VWYWx1ZS5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRFQTFCREFDREFDMDA4MEZGNzQg
LyogQjNTbG90QmFzZVZhbHVlLmNwcCAqLzsgfTsKIAkJMEZFQzg1MzUxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzU2xvdEJhc2VWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZFQzg0RUIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU2xvdEJhc2VWYWx1ZS5o
ICovOyB9OwogCQkwRkVDODUzNjFCREFDREFDMDA4MEZGNzQgLyogQjNTdWNjZXNzb3JDb2xsZWN0
aW9uLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVD
ODRFQzFCREFDREFDMDA4MEZGNzQgLyogQjNTdWNjZXNzb3JDb2xsZWN0aW9uLmggKi87IH07CkBA
IC0yNDMxLDYgKzI0MzYsMTMgQEAKIAkJMEYyQjlDRjExOUQwQkFDMTAwQjFEMUI1IC8qIEZUTEV4
aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IEZUTEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uLmg7IHBhdGggPSBmdGwvRlRM
RXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEYyQjlDRjIxOUQwQkFDMTAwQjFEMUI1IC8qIEZUTE9wZXJhdGlvbnMuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRlRMT3BlcmF0aW9ucy5jcHA7IHBhdGgg
PSBmdGwvRlRMT3BlcmF0aW9ucy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
MkI5Q0YzMTlEMEJBQzEwMEIxRDFCNSAvKiBGVExPcGVyYXRpb25zLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgbmFtZSA9IEZUTE9wZXJhdGlvbnMuaDsgcGF0aCA9IGZ0bC9GVExPcGVyYXRp
b25zLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkJCRDkxMUM1RkYzRjUwMDIz
RUYyMyAvKiBCM1NwYXJzZUNvbGxlY3Rpb24uaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gQjNTcGFyc2VDb2xsZWN0aW9uLmg7IHBhdGggPSBiMy9CM1NwYXJzZUNvbGxlY3Rpb24u
aDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEYyQkJEOTIxQzVGRjNGNTAwMjNFRjIz
IC8qIEIzVmFyaWFibGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
QjNWYXJpYWJsZS5jcHA7IHBhdGggPSBiMy9CM1ZhcmlhYmxlLmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJMEYyQkJEOTMxQzVGRjNGNTAwMjNFRjIzIC8qIEIzVmFyaWFibGUuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNWYXJpYWJsZS5oOyBwYXRoID0gYjMv
QjNWYXJpYWJsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCQkQ5NDFDNUZG
M0Y1MDAyM0VGMjMgLyogQjNWYXJpYWJsZVZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgbmFtZSA9IEIzVmFyaWFibGVWYWx1ZS5jcHA7IHBhdGggPSBiMy9CM1ZhcmlhYmxl
VmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCQkQ5NTFDNUZGM0Y1
MDAyM0VGMjMgLyogQjNWYXJpYWJsZVZhbHVlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IEIzVmFyaWFibGVWYWx1ZS5oOyBwYXRoID0gYjMvQjNWYXJpYWJsZVZhbHVlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGMkJCRDlCMUM1RkY0MDUwMDIzRUYyMyAvKiBB
aXJTdGFja1Nsb3RLaW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9
IEFpclN0YWNrU2xvdEtpbmQuY3BwOyBwYXRoID0gYjMvYWlyL0FpclN0YWNrU2xvdEtpbmQuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCQkQ5QzFDNUZGNDA1MDAyM0VGMjMg
LyogQWlyU3RhY2tTbG90S2luZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBB
aXJTdGFja1Nsb3RLaW5kLmg7IHBhdGggPSBiMy9haXIvQWlyU3RhY2tTbG90S2luZC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjJCREMxMjE1MUM1RDRBMDBDRDg5MTAgLyogREZH
Rml4dXBQaGFzZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdG
aXh1cFBoYXNlLmNwcDsgcGF0aCA9IGRmZy9ERkdGaXh1cFBoYXNlLmNwcDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKIAkJMEYyQkRDMTMxNTFDNUQ0QTAwQ0Q4OTEwIC8qIERGR0ZpeHVwUGhh
c2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHRml4dXBQaGFzZS5oOyBw
YXRoID0gZGZnL0RGR0ZpeHVwUGhhc2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEYyQkRDMUYxNTFFODAzODAwQ0Q4OTEwIC8qIERGR0luc2VydGlvblNldC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdJbnNlcnRpb25TZXQuaDsgcGF0aCA9IGRmZy9ERkdJ
bnNlcnRpb25TZXQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTMwMzMsOCArMzA0
NSw2IEBACiAJCTBGRUM4NEUzMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Byb2NlZHVyZUlubGluZXMu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNQcm9jZWR1cmVJbmxpbmVzLmg7
IHBhdGggPSBiMy9CM1Byb2NlZHVyZUlubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEZFQzg0RTYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2ttYXBTcGVjaWFsLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzU3RhY2ttYXBTcGVjaWFsLmNw
cDsgcGF0aCA9IGIzL0IzU3RhY2ttYXBTcGVjaWFsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEZFQzg0RTcxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2ttYXBTcGVjaWFsLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzU3RhY2ttYXBTcGVjaWFsLmg7IHBh
dGggPSBiMy9CM1N0YWNrbWFwU3BlY2lhbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owot
CQkwRkVDODRFODFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja1Nsb3RLaW5kLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IEIzU3RhY2tTbG90S2luZC5jcHA7IHBhdGgg
PSBiMy9CM1N0YWNrU2xvdEtpbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkw
RkVDODRFOTFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja1Nsb3RLaW5kLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzU3RhY2tTbG90S2luZC5oOyBwYXRoID0gYjMvQjNTdGFj
a1Nsb3RLaW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUM4NEVBMUJEQUNE
QUMwMDgwRkY3NCAvKiBCM1Nsb3RCYXNlVmFsdWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gQjNTbG90QmFzZVZhbHVlLmNwcDsgcGF0aCA9IGIzL0IzU2xvdEJhc2VW
YWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRUM4NEVCMUJEQUNEQUMw
MDgwRkY3NCAvKiBCM1Nsb3RCYXNlVmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gQjNTbG90QmFzZVZhbHVlLmg7IHBhdGggPSBiMy9CM1Nsb3RCYXNlVmFsdWUuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZFQzg0RUMxQkRBQ0RBQzAwODBGRjc0IC8qIEIz
U3VjY2Vzc29yQ29sbGVjdGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBC
M1N1Y2Nlc3NvckNvbGxlY3Rpb24uaDsgcGF0aCA9IGIzL0IzU3VjY2Vzc29yQ29sbGVjdGlvbi5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtNDg2Niw2ICs0ODc2LDcgQEAKIAkJCQkw
RkVDODVCODFCRTE0NjJGMDA4MEZGNzQgLyogQjNSZWR1Y2VTdHJlbmd0aC5oICovLAogCQkJCTBG
RUM4NEVBMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Nsb3RCYXNlVmFsdWUuY3BwICovLAogCQkJCTBG
RUM4NEVCMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Nsb3RCYXNlVmFsdWUuaCAqLywKKwkJCQkwRjJC
QkQ5MTFDNUZGM0Y1MDAyM0VGMjMgLyogQjNTcGFyc2VDb2xsZWN0aW9uLmggKi8sCiAJCQkJMEY2
QjhBREExQzRFRkFDMzAwOTY5MDUyIC8qIEIzU1NBQ2FsY3VsYXRvci5jcHAgKi8sCiAJCQkJMEY2
QjhBREIxQzRFRkFDMzAwOTY5MDUyIC8qIEIzU1NBQ2FsY3VsYXRvci5oICovLAogCQkJCTBGMzNG
Q0Y1MUMxMzZFMjUwMDMyM0Y2NyAvKiBCM1N0YWNrbWFwR2VuZXJhdGlvblBhcmFtcy5jcHAgKi8s
CkBAIC00ODc2LDggKzQ4ODcsNiBAQAogCQkJCTBGMzM4REYwMUJFOTNBRDEwMDEzQzg4RiAvKiBC
M1N0YWNrbWFwVmFsdWUuaCAqLywKIAkJCQkwRjk0OTU4NTFDNTdGNDc1MDA0MTNBNDggLyogQjNT
dGFja1Nsb3QuY3BwICovLAogCQkJCTBGOTQ5NTg2MUM1N0Y0NzUwMDQxM0E0OCAvKiBCM1N0YWNr
U2xvdC5oICovLAotCQkJCTBGRUM4NEU4MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xvdEtp
bmQuY3BwICovLAotCQkJCTBGRUM4NEU5MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xvdEtp
bmQuaCAqLywKIAkJCQkwRkVDODRFQzFCREFDREFDMDA4MEZGNzQgLyogQjNTdWNjZXNzb3JDb2xs
ZWN0aW9uLmggKi8sCiAJCQkJMEZFQzg0RUQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3dpdGNoQ2Fz
ZS5jcHAgKi8sCiAJCQkJMEZFQzg0RUUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3dpdGNoQ2FzZS5o
ICovLApAQCAtNDkwMSw2ICs0OTEwLDEwIEBACiAJCQkJMEYzMzhFMEExQkYwMjc2QzAwMTNDODhG
IC8qIEIzVmFsdWVLZXlJbmxpbmVzLmggKi8sCiAJCQkJMEZFQzg0RkMxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzVmFsdWVSZXAuY3BwICovLAogCQkJCTBGRUM4NEZEMUJEQUNEQUMwMDgwRkY3NCAvKiBC
M1ZhbHVlUmVwLmggKi8sCisJCQkJMEYyQkJEOTIxQzVGRjNGNTAwMjNFRjIzIC8qIEIzVmFyaWFi
bGUuY3BwICovLAorCQkJCTBGMkJCRDkzMUM1RkYzRjUwMDIzRUYyMyAvKiBCM1ZhcmlhYmxlLmgg
Ki8sCisJCQkJMEYyQkJEOTQxQzVGRjNGNTAwMjNFRjIzIC8qIEIzVmFyaWFibGVWYWx1ZS5jcHAg
Ki8sCisJCQkJMEYyQkJEOTUxQzVGRjNGNTAwMjNFRjIzIC8qIEIzVmFyaWFibGVWYWx1ZS5oICov
LAogCQkJCTBGRUM4NUFFMUJEQjVENUUwMDgwRkY3NCAvKiB0ZXN0YjMuY3BwICovLAogCQkJKTsK
IAkJCW5hbWUgPSBiMzsKQEAgLTQ5NzEsNiArNDk4NCw4IEBACiAJCQkJMEZFQzg1NjUxQkRBQ0RD
NzAwODBGRjc0IC8qIEFpclNwaWxsRXZlcnl0aGluZy5oICovLAogCQkJCTBGRUM4NTY2MUJEQUNE
QzcwMDgwRkY3NCAvKiBBaXJTdGFja1Nsb3QuY3BwICovLAogCQkJCTBGRUM4NTY3MUJEQUNEQzcw
MDgwRkY3NCAvKiBBaXJTdGFja1Nsb3QuaCAqLywKKwkJCQkwRjJCQkQ5QjFDNUZGNDA1MDAyM0VG
MjMgLyogQWlyU3RhY2tTbG90S2luZC5jcHAgKi8sCisJCQkJMEYyQkJEOUMxQzVGRjQwNTAwMjNF
RjIzIC8qIEFpclN0YWNrU2xvdEtpbmQuaCAqLywKIAkJCQkwRkVDODU2ODFCREFDREM3MDA4MEZG
NzQgLyogQWlyVG1wLmNwcCAqLywKIAkJCQkwRkVDODU2OTFCREFDREM3MDA4MEZGNzQgLyogQWly
VG1wLmggKi8sCiAJCQkJMEZFQzg1NkExQkRBQ0RDNzAwODBGRjc0IC8qIEFpclRtcElubGluZXMu
aCAqLywKQEAgLTcxMjgsNyArNzE0Myw2IEBACiAJCQkJMEZFQzg1MkQxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzUHJvY2VkdXJlSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1QkQxQkUx
NDYyRjAwODBGRjc0IC8qIEIzUmVkdWNlU3RyZW5ndGguaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
RUM4NTMxMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrbWFwU3BlY2lhbC5oIGluIEhlYWRlcnMg
Ki8sCi0JCQkJMEZFQzg1MzMxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2tTbG90S2luZC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1MzUxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU2xvdEJhc2VW
YWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1MzYxQkRBQ0RBQzAwODBGRjc0IC8qIEIz
U3VjY2Vzc29yQ29sbGVjdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1MzgxQkRBQ0RB
QzAwODBGRjc0IC8qIEIzU3dpdGNoQ2FzZS5oIGluIEhlYWRlcnMgKi8sCkBAIC03MjEzLDYgKzcy
MjcsNyBAQAogCQkJCTBGMTVGMTVGMTRCN0E3M0UwMDVERTM3RCAvKiBDb21tb25TbG93UGF0aHMu
aCBpbiBIZWFkZXJzICovLAogCQkJCTY1NTNBMzMyMTdBMUYxRUUwMDhDRjZGMyAvKiBDb21tb25T
bG93UGF0aHNFeGNlcHRpb25zLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkQ4MkUzOTE0MUFCMTRE
MDAxNzlDOTQgLyogQ29tcGFjdEpJVENvZGVNYXAuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkJC
RDlFMUM1RkY0MDUwMDIzRUYyMyAvKiBBaXJTdGFja1Nsb3RLaW5kLmggaW4gSGVhZGVycyAqLywK
IAkJCQlBN0U1QTNBODE3OTc0MzJEMDBFODkzQzAgLyogQ29tcGlsYXRpb25SZXN1bHQuaCBpbiBI
ZWFkZXJzICovLAogCQkJCUJDMThDM0Y0MEUxNkY1Q0QwMEIzNDQ2MCAvKiBDb21wbGV0aW9uLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRjZGQzc1MTE5NjExMEE4MDBFMUQwMkQgLyogQ29tcGxleEdl
dFN0YXR1cy5oIGluIEhlYWRlcnMgKi8sCkBAIC03Mjg2LDYgKzczMDEsNyBAQAogCQkJCTQzNDIy
QTYzMUMxNThFNkQwMEUyRUI5OCAvKiBCM0NvbnN0RmxvYXRWYWx1ZS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEZGQjkyMUExNkQwMkVDNTAwNTVBNURCIC8qIERGR0Jhc2ljQmxvY2tJbmxpbmVzLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBN0Q4OUNGNDE3QTBCOENDMDA3NzNBRDggLyogREZHQmxvY2tJ
bnNlcnRpb25TZXQuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkJCRDk2MUM1RkYzRjUwMDIzRUYy
MyAvKiBCM1NwYXJzZUNvbGxlY3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQzNDQ0ZDMTlB
REE0MTAwMDZBQzcyQSAvKiBERkdCbG9ja01hcC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDM0ND
RkQxOUFEQTQxMDAwNkFDNzJBIC8qIERGR0Jsb2NrTWFwSW5saW5lcy5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJMEZDM0NDRkUxOUFEQTQxMDAwNkFDNzJBIC8qIERGR0Jsb2NrU2V0LmggaW4gSGVhZGVy
cyAqLywKQEAgLTc1NjUsNiArNzU4MSw3IEBACiAJCQkJMEYyQjY2QUUxN0I2QjU0NTAwQTdBRTNG
IC8qIEdDSW5jb21pbmdSZWZDb3VudGVkU2V0LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZB
RjE3QjZCNTQ1MDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXRJbmxpbmVzLmggaW4g
SGVhZGVycyAqLywKIAkJCQkyQUFCQ0RFNzE4RUYyOTQyMDAwMDIwOTYgLyogR0NMb2dnaW5nLmgg
aW4gSGVhZGVycyAqLywKKwkJCQkwRjJCQkQ5ODFDNUZGM0Y1MDAyM0VGMjMgLyogQjNWYXJpYWJs
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTU0RThFQjAxOEJGRkJCQjAwNTU2RDI4IC8qIEdDU2Vn
bWVudGVkQXJyYXkuaCBpbiBIZWFkZXJzICovLAogCQkJCUE1NEU4RUIxMThCRkZCQkUwMDU1NkQy
OCAvKiBHQ1NlZ21lbnRlZEFycmF5SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTk1OUU5
MzExQkQxODI3MjAwMUFBNDEzIC8qIGdlbmVyYXRlLWNvbWJpbmVkLWluc3BlY3Rvci1qc29uLnB5
IGluIEhlYWRlcnMgKi8sCkBAIC04MTc2LDYgKzgxOTMsNyBAQAogCQkJCTBGNkI4QUREMUM0RUZB
QzMwMDk2OTA1MiAvKiBCM1NTQUNhbGN1bGF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTdCMDI0
NzU5MUI4NjhFQjcwMDU0MjQ0MCAvKiBXQVNNRnVuY3Rpb25TeW50YXhDaGVja2VyLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk3QjM5Rjc2RTFCNjJERTMyMDAzNjBGQjQgLyogV0FTTU1vZHVsZVBhcnNl
ci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQkJEOUExQzVGRjNGNTAwMjNFRjIzIC8qIEIzVmFy
aWFibGVWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0IzOUY3NzAxQjYyREUzMjAwMzYwRkI0
IC8qIFdBU01SZWFkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFRDk0RjJGMTcxRTNFMjMwMEJF
NzdBNCAvKiBXYXRjaGRvZy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5MTlEMjYxNTg1M0NFMzAw
NEE0RTdEIC8qIFdhdGNocG9pbnQuaCBpbiBIZWFkZXJzICovLApAQCAtODgyNCw3ICs4ODQyLDYg
QEAKIAkJCQk0MzQyMkE2MjFDMTU4RTZBMDBFMkVCOTggLyogQjNDb25zdEZsb2F0VmFsdWUuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFQzg1QkMxQkUxNDYyRjAwODBGRjc0IC8qIEIzUmVkdWNl
U3RyZW5ndGguY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFQzg1MzAxQkRBQ0RBQzAwODBGRjc0
IC8qIEIzU3RhY2ttYXBTcGVjaWFsLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTBGRUM4NTMyMUJE
QUNEQUMwMDgwRkY3NCAvKiBCM1N0YWNrU2xvdEtpbmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJ
MEZFQzg1MzQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU2xvdEJhc2VWYWx1ZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRkVDODUzNzFCREFDREFDMDA4MEZGNzQgLyogQjNTd2l0Y2hDYXNlLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBGRUM4NTM5MUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N3aXRjaFZh
bHVlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtOTA1OSw2ICs5MDc2LDcgQEAKIAkJCQkwRkM5N0Y0
MTE4MjAyMTE5MDAyQzlCMjYgLyogREZHV2F0Y2hwb2ludENvbGxlY3Rpb25QaGFzZS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkwRkRCMkNFNzE3NDgzMEEyMDA3QjNDMUIgLyogREZHV29ya2xpc3Qu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFMDUwMTcxQUE5MDkxMTAwRDMzQjMzIC8qIERpcmVj
dEFyZ3VtZW50cy5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjJCQkQ5RDFDNUZGNDA1MDAyM0VG
MjMgLyogQWlyU3RhY2tTbG90S2luZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkUwNTAxNTFB
QTkwOTExMDBEMzNCMzMgLyogRGlyZWN0QXJndW1lbnRzT2Zmc2V0LmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGOUQzMzcwMTY1REJCOTAwMDVBRDM4NyAvKiBEaXNhc3NlbWJsZXIuY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJQTcwNDQ3RUQxN0EwQkQ3MDAwRjU4OThFIC8qIER1bXBDb250ZXh0LmNw
cCBpbiBTb3VyY2VzICovLApAQCAtOTU1NCwxMSArOTU3MiwxMyBAQAogCQkJCTJBNEVDOTBCMTg2
MEQ2QzIwMDk0Rjc4MiAvKiBXcml0ZUJhcnJpZXJCdWZmZXIuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEZDODE1MEIxNDA0M0MwRTAwQ0ZBNjAzIC8qIFdyaXRlQmFycmllclN1cHBvcnQuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJQTdFNUFCM0ExNzk5RTRCMjAwRDI4MzNEIC8qIFg4NkRpc2Fzc2Vt
Ymxlci5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjJCQkQ5NzFDNUZGM0Y1MDAyM0VGMjMgLyog
QjNWYXJpYWJsZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NjNDNkQ5QzE1MjExMTFBMDA1ODVF
NEUgLyogWWFyckNhbm9uaWNhbGl6ZVVDUzIuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODY3MDRC
ODQxMkRCQTMzNzAwQTlGRTdCIC8qIFlhcnJJbnRlcnByZXRlci5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk4NjcwNEI4NjEyREJBMzM3MDBBOUZFN0IgLyogWWFyckpJVC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk4NjcwNEI4OTEyREJBMzM3MDBBOUZFN0IgLyogWWFyclBhdHRlcm4uY3BwIGluIFNv
dXJjZXMgKi8sCiAJCQkJODY3MDRCNDIxMkRCOEE4MTAwQTlGRTdCIC8qIFlhcnJTeW50YXhDaGVj
a2VyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGMkJCRDk5MUM1RkYzRjUwMDIzRUYyMyAvKiBC
M1ZhcmlhYmxlVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkpOwogCQkJcnVuT25seUZvckRl
cGxveW1lbnRQb3N0cHJvY2Vzc2luZyA9IDA7CiAJCX07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNBcmd1bWVudFJlZ1ZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzQXJndW1lbnRSZWdWYWx1ZS5oCShyZXZpc2lvbiAxOTU5NzApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNBcmd1bWVudFJlZ1ZhbHVlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQ5LDggKzQ5LDggQEAgcHJvdGVjdGVkOgogcHJpdmF0ZToKICAgICBmcmllbmQgY2xh
c3MgUHJvY2VkdXJlOwogCi0gICAgQXJndW1lbnRSZWdWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3Jp
Z2luIG9yaWdpbiwgUmVnIHJlZykKLSAgICAgICAgOiBWYWx1ZShpbmRleCwgQ2hlY2tlZE9wY29k
ZSwgQXJndW1lbnRSZWcsIHJlZy5pc0dQUigpID8gcG9pbnRlclR5cGUoKSA6IERvdWJsZSwgb3Jp
Z2luKQorICAgIEFyZ3VtZW50UmVnVmFsdWUoT3JpZ2luIG9yaWdpbiwgUmVnIHJlZykKKyAgICAg
ICAgOiBWYWx1ZShDaGVja2VkT3Bjb2RlLCBBcmd1bWVudFJlZywgcmVnLmlzR1BSKCkgPyBwb2lu
dGVyVHlwZSgpIDogRG91YmxlLCBvcmlnaW4pCiAgICAgICAgICwgbV9yZWcocmVnKQogICAgIHsK
ICAgICAgICAgQVNTRVJUKHJlZy5pc1NldCgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0NDYWxsVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNDQ2FsbFZhbHVlLmgJKHJldmlzaW9uIDE5NTk3MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0NDYWxsVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsMTUgKzQ4LDE1IEBA
IHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKIAogICAgIHRlbXBsYXRlPHR5
cGVuYW1lLi4uIEFyZ3VtZW50cz4KLSAgICBDQ2FsbFZhbHVlKHVuc2lnbmVkIGluZGV4LCBUeXBl
IHR5cGUsIE9yaWdpbiBvcmlnaW4sIEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCi0gICAgICAgIDog
VmFsdWUoaW5kZXgsIENoZWNrZWRPcGNvZGUsIENDYWxsLCB0eXBlLCBvcmlnaW4sIGFyZ3VtZW50
cy4uLikKKyAgICBDQ2FsbFZhbHVlKFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdpbiwgQXJndW1lbnRz
Li4uIGFyZ3VtZW50cykKKyAgICAgICAgOiBWYWx1ZShDaGVja2VkT3Bjb2RlLCBDQ2FsbCwgdHlw
ZSwgb3JpZ2luLCBhcmd1bWVudHMuLi4pCiAgICAgewogICAgICAgICBSRUxFQVNFX0FTU0VSVChu
dW1DaGlsZHJlbigpID49IDEpOwogICAgIH0KIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFy
Z3VtZW50cz4KLSAgICBDQ2FsbFZhbHVlKHVuc2lnbmVkIGluZGV4LCBUeXBlIHR5cGUsIE9yaWdp
biBvcmlnaW4sIGNvbnN0IEVmZmVjdHMmIGVmZmVjdHMsIEFyZ3VtZW50cy4uLiBhcmd1bWVudHMp
Ci0gICAgICAgIDogVmFsdWUoaW5kZXgsIENoZWNrZWRPcGNvZGUsIENDYWxsLCB0eXBlLCBvcmln
aW4sIGFyZ3VtZW50cy4uLikKKyAgICBDQ2FsbFZhbHVlKFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdp
biwgY29uc3QgRWZmZWN0cyYgZWZmZWN0cywgQXJndW1lbnRzLi4uIGFyZ3VtZW50cykKKyAgICAg
ICAgOiBWYWx1ZShDaGVja2VkT3Bjb2RlLCBDQ2FsbCwgdHlwZSwgb3JpZ2luLCBhcmd1bWVudHMu
Li4pCiAgICAgICAgICwgZWZmZWN0cyhlZmZlY3RzKQogICAgIHsKICAgICAgICAgUkVMRUFTRV9B
U1NFUlQobnVtQ2hpbGRyZW4oKSA+PSAxKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0NoZWNrVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM0NoZWNrVmFsdWUuY3BwCShyZXZpc2lvbiAxOTU5NzApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNDaGVja1ZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDYsOCArNDYsOCBA
QCBWYWx1ZSogQ2hlY2tWYWx1ZTo6Y2xvbmVJbXBsKCkgY29uc3QKIH0KIAogLy8gVXNlIHRoaXMg
Zm9ybSBmb3IgQ2hlY2tBZGQsIENoZWNrU3ViLCBhbmQgQ2hlY2tNdWwuCi1DaGVja1ZhbHVlOjpD
aGVja1ZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBPcmlnaW4gb3JpZ2luLCBW
YWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0KQotICAgIDogU3RhY2ttYXBWYWx1ZShpbmRleCwgQ2hl
Y2tlZE9wY29kZSwgb3Bjb2RlLCBsZWZ0LT50eXBlKCksIG9yaWdpbikKK0NoZWNrVmFsdWU6OkNo
ZWNrVmFsdWUoT3Bjb2RlIG9wY29kZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIGxlZnQsIFZhbHVl
KiByaWdodCkKKyAgICA6IFN0YWNrbWFwVmFsdWUoQ2hlY2tlZE9wY29kZSwgb3Bjb2RlLCBsZWZ0
LT50eXBlKCksIG9yaWdpbikKIHsKICAgICBBU1NFUlQoQjM6OmlzSW50KHR5cGUoKSkpOwogICAg
IEFTU0VSVChsZWZ0LT50eXBlKCkgPT0gcmlnaHQtPnR5cGUoKSk7CkBAIC01Nyw4ICs1Nyw4IEBA
IENoZWNrVmFsdWU6OkNoZWNrVmFsdWUodW5zaWduZWQgaW5kZXgsIE8KIH0KIAogLy8gVXNlIHRo
aXMgZm9ybSBmb3IgQ2hlY2suCi1DaGVja1ZhbHVlOjpDaGVja1ZhbHVlKHVuc2lnbmVkIGluZGV4
LCBPcGNvZGUgb3Bjb2RlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogcHJlZGljYXRlKQotICAgIDog
U3RhY2ttYXBWYWx1ZShpbmRleCwgQ2hlY2tlZE9wY29kZSwgb3Bjb2RlLCBWb2lkLCBvcmlnaW4p
CitDaGVja1ZhbHVlOjpDaGVja1ZhbHVlKE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4sIFZh
bHVlKiBwcmVkaWNhdGUpCisgICAgOiBTdGFja21hcFZhbHVlKENoZWNrZWRPcGNvZGUsIG9wY29k
ZSwgVm9pZCwgb3JpZ2luKQogewogICAgIEFTU0VSVChvcGNvZGUgPT0gQ2hlY2spOwogICAgIGFw
cGVuZChDb25zdHJhaW5lZFZhbHVlKHByZWRpY2F0ZSwgVmFsdWVSZXA6Oldhcm1BbnkpKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrVmFsdWUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDaGVja1ZhbHVlLmgJKHJldmlzaW9uIDE5NTk3
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrVmFsdWUuaAkod29ya2luZyBj
b3B5KQpAQCAtNTgsMTAgKzU4LDEwIEBAIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIFByb2Nl
ZHVyZTsKIAogICAgIC8vIFVzZSB0aGlzIGZvcm0gZm9yIENoZWNrQWRkLCBDaGVja1N1YiwgYW5k
IENoZWNrTXVsLgotICAgIEpTX0VYUE9SVF9QUklWQVRFIENoZWNrVmFsdWUodW5zaWduZWQgaW5k
ZXgsIE9wY29kZSwgT3JpZ2luLCBWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0KTsKKyAgICBKU19F
WFBPUlRfUFJJVkFURSBDaGVja1ZhbHVlKE9wY29kZSwgT3JpZ2luLCBWYWx1ZSogbGVmdCwgVmFs
dWUqIHJpZ2h0KTsKIAogICAgIC8vIFVzZSB0aGlzIGZvcm0gZm9yIENoZWNrLgotICAgIEpTX0VY
UE9SVF9QUklWQVRFIENoZWNrVmFsdWUodW5zaWduZWQgaW5kZXgsIE9wY29kZSwgT3JpZ2luLCBW
YWx1ZSogcHJlZGljYXRlKTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBDaGVja1ZhbHVlKE9wY29k
ZSwgT3JpZ2luLCBWYWx1ZSogcHJlZGljYXRlKTsKIH07CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlND
OjpCMwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3QzMlZhbHVlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3QzMlZhbHVlLmgJKHJl
dmlzaW9uIDE5NTk3MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0MzJWYWx1
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03Nyw4ICs3Nyw4IEBAIHByb3RlY3RlZDoKIAogICAgIGZy
aWVuZCBjbGFzcyBQcm9jZWR1cmU7CiAKLSAgICBDb25zdDMyVmFsdWUodW5zaWduZWQgaW5kZXgs
IE9yaWdpbiBvcmlnaW4sIGludDMyX3QgdmFsdWUpCi0gICAgICAgIDogVmFsdWUoaW5kZXgsIENo
ZWNrZWRPcGNvZGUsIENvbnN0MzIsIEludDMyLCBvcmlnaW4pCisgICAgQ29uc3QzMlZhbHVlKE9y
aWdpbiBvcmlnaW4sIGludDMyX3QgdmFsdWUpCisgICAgICAgIDogVmFsdWUoQ2hlY2tlZE9wY29k
ZSwgQ29uc3QzMiwgSW50MzIsIG9yaWdpbikKICAgICAgICAgLCBtX3ZhbHVlKHZhbHVlKQogICAg
IHsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDY0VmFsdWUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDY0VmFsdWUu
aAkocmV2aXNpb24gMTk1OTcwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3Q2
NFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTc3LDggKzc3LDggQEAgcHJvdGVjdGVkOgogCiAg
ICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKIAotICAgIENvbnN0NjRWYWx1ZSh1bnNpZ25lZCBp
bmRleCwgT3JpZ2luIG9yaWdpbiwgaW50NjRfdCB2YWx1ZSkKLSAgICAgICAgOiBWYWx1ZShpbmRl
eCwgQ2hlY2tlZE9wY29kZSwgQ29uc3Q2NCwgSW50NjQsIG9yaWdpbikKKyAgICBDb25zdDY0VmFs
dWUoT3JpZ2luIG9yaWdpbiwgaW50NjRfdCB2YWx1ZSkKKyAgICAgICAgOiBWYWx1ZShDaGVja2Vk
T3Bjb2RlLCBDb25zdDY0LCBJbnQ2NCwgb3JpZ2luKQogICAgICAgICAsIG1fdmFsdWUodmFsdWUp
CiAgICAgewogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0RG91
YmxlVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25z
dERvdWJsZVZhbHVlLmgJKHJldmlzaW9uIDE5NTk3MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0NvbnN0RG91YmxlVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtNzAsOCArNzAsOCBA
QCBwcm90ZWN0ZWQ6CiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7CiAKLSAg
ICBDb25zdERvdWJsZVZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcmlnaW4gb3JpZ2luLCBkb3VibGUg
dmFsdWUpCi0gICAgICAgIDogVmFsdWUoaW5kZXgsIENoZWNrZWRPcGNvZGUsIENvbnN0RG91Ymxl
LCBEb3VibGUsIG9yaWdpbikKKyAgICBDb25zdERvdWJsZVZhbHVlKE9yaWdpbiBvcmlnaW4sIGRv
dWJsZSB2YWx1ZSkKKyAgICAgICAgOiBWYWx1ZShDaGVja2VkT3Bjb2RlLCBDb25zdERvdWJsZSwg
RG91YmxlLCBvcmlnaW4pCiAgICAgICAgICwgbV92YWx1ZSh2YWx1ZSkKICAgICB7CiAgICAgfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3RGbG9hdFZhbHVlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3RGbG9hdFZhbHVlLmgJKHJl
dmlzaW9uIDE5NTk3MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0RmxvYXRW
YWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC02OCw4ICs2OCw4IEBAIHByb3RlY3RlZDoKIHByaXZh
dGU6CiAgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKIAotICAgIENvbnN0RmxvYXRWYWx1ZSh1
bnNpZ25lZCBpbmRleCwgT3JpZ2luIG9yaWdpbiwgZmxvYXQgdmFsdWUpCi0gICAgICAgIDogVmFs
dWUoaW5kZXgsIENoZWNrZWRPcGNvZGUsIENvbnN0RmxvYXQsIEZsb2F0LCBvcmlnaW4pCisgICAg
Q29uc3RGbG9hdFZhbHVlKE9yaWdpbiBvcmlnaW4sIGZsb2F0IHZhbHVlKQorICAgICAgICA6IFZh
bHVlKENoZWNrZWRPcGNvZGUsIENvbnN0RmxvYXQsIEZsb2F0LCBvcmlnaW4pCiAgICAgICAgICwg
bV92YWx1ZSh2YWx1ZSkKICAgICB7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzQ29uc3RQdHJWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0NvbnN0UHRyVmFsdWUuaAkocmV2aXNpb24gMTk1OTcwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzQ29uc3RQdHJWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTU0LDEzICs1NCwx
MyBAQCBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7CiAKICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBUPgotICAgIENvbnN0UHRyVmFsdWUodW5zaWduZWQgaW5kZXgsIE9yaWdpbiBv
cmlnaW4sIFQqIHBvaW50ZXIpCi0gICAgICAgIDogQ29uc3RQdHJWYWx1ZUJhc2UoaW5kZXgsIG9y
aWdpbiwgYml0d2lzZV9jYXN0PGludHB0cl90Pihwb2ludGVyKSkKKyAgICBDb25zdFB0clZhbHVl
KE9yaWdpbiBvcmlnaW4sIFQqIHBvaW50ZXIpCisgICAgICAgIDogQ29uc3RQdHJWYWx1ZUJhc2Uo
b3JpZ2luLCBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+KHBvaW50ZXIpKQogICAgIHsKICAgICB9CiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KLSAgICBDb25zdFB0clZhbHVlKHVuc2lnbmVkIGluZGV4
LCBPcmlnaW4gb3JpZ2luLCBUIHBvaW50ZXIpCi0gICAgICAgIDogQ29uc3RQdHJWYWx1ZUJhc2Uo
aW5kZXgsIG9yaWdpbiwgc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KHBvaW50ZXIpKQorICAgIENvbnN0
UHRyVmFsdWUoT3JpZ2luIG9yaWdpbiwgVCBwb2ludGVyKQorICAgICAgICA6IENvbnN0UHRyVmFs
dWVCYXNlKG9yaWdpbiwgc3RhdGljX2Nhc3Q8aW50cHRyX3Q+KHBvaW50ZXIpKQogICAgIHsKICAg
ICB9CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29udHJvbFZhbHVlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb250cm9sVmFsdWUu
Y3BwCShyZXZpc2lvbiAxOTU5NzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb250
cm9sVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OSw5ICs1OSwxMCBAQCB2b2lkIENvbnRy
b2xWYWx1ZTo6Y29udmVydFRvSnVtcChCYXNpY0JsCiAKICAgICB0aGlzLT5Db250cm9sVmFsdWU6
On5Db250cm9sVmFsdWUoKTsKIAotICAgIG5ldyAodGhpcykgQ29udHJvbFZhbHVlKGluZGV4LCBK
dW1wLCBvcmlnaW4sIEZyZXF1ZW50ZWRCbG9jayhkZXN0aW5hdGlvbikpOworICAgIG5ldyAodGhp
cykgQ29udHJvbFZhbHVlKEp1bXAsIG9yaWdpbiwgRnJlcXVlbnRlZEJsb2NrKGRlc3RpbmF0aW9u
KSk7CiAKICAgICB0aGlzLT5vd25lciA9IG93bmVyOworICAgIHRoaXMtPm1faW5kZXggPSBpbmRl
eDsKIH0KIAogdm9pZCBDb250cm9sVmFsdWU6OmNvbnZlcnRUb09vcHMoKQpAQCAtNzIsOSArNzMs
MTAgQEAgdm9pZCBDb250cm9sVmFsdWU6OmNvbnZlcnRUb09vcHMoKQogCiAgICAgdGhpcy0+Q29u
dHJvbFZhbHVlOjp+Q29udHJvbFZhbHVlKCk7CiAKLSAgICBuZXcgKHRoaXMpIENvbnRyb2xWYWx1
ZShpbmRleCwgT29wcywgb3JpZ2luKTsKKyAgICBuZXcgKHRoaXMpIENvbnRyb2xWYWx1ZShPb3Bz
LCBvcmlnaW4pOwogCiAgICAgdGhpcy0+b3duZXIgPSBvd25lcjsKKyAgICB0aGlzLT5tX2luZGV4
ID0gaW5kZXg7CiB9CiAKIHZvaWQgQ29udHJvbFZhbHVlOjpkdW1wTWV0YShDb21tYVByaW50ZXIm
IGNvbW1hLCBQcmludFN0cmVhbSYgb3V0KSBjb25zdApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzQ29udHJvbFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzQ29udHJvbFZhbHVlLmgJKHJldmlzaW9uIDE5NTk3MCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0NvbnRyb2xWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDksOCAr
MTA5LDggQEAgcHJvdGVjdGVkOgogCiAgICAgLy8gVXNlIHRoaXMgZm9yIHN1YmNsYXNzZXMuCiAg
ICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgotICAgIENvbnRyb2xWYWx1ZSh1bnNp
Z25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgVHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luLCBBcmd1
bWVudHMuLi4gYXJndW1lbnRzKQotICAgICAgICA6IFZhbHVlKGluZGV4LCBDaGVja2VkT3Bjb2Rl
LCBvcGNvZGUsIHR5cGUsIG9yaWdpbiwgYXJndW1lbnRzLi4uKQorICAgIENvbnRyb2xWYWx1ZShP
cGNvZGUgb3Bjb2RlLCBUeXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4sIEFyZ3VtZW50cy4uLiBhcmd1
bWVudHMpCisgICAgICAgIDogVmFsdWUoQ2hlY2tlZE9wY29kZSwgb3Bjb2RlLCB0eXBlLCBvcmln
aW4sIGFyZ3VtZW50cy4uLikKICAgICB7CiAgICAgICAgIEFTU0VSVChhY2NlcHRzKG9wY29kZSkp
OwogICAgIH0KQEAgLTEyMiwyMiArMTIyLDIyIEBAIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNz
IFByb2NlZHVyZTsKIAogICAgIC8vIFVzZSB0aGlzIGZvciBPb3BzLgotICAgIENvbnRyb2xWYWx1
ZSh1bnNpZ25lZCBpbmRleCwgT3Bjb2RlIG9wY29kZSwgT3JpZ2luIG9yaWdpbikKLSAgICAgICAg
OiBWYWx1ZShpbmRleCwgQ2hlY2tlZE9wY29kZSwgb3Bjb2RlLCBWb2lkLCBvcmlnaW4pCisgICAg
Q29udHJvbFZhbHVlKE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4pCisgICAgICAgIDogVmFs
dWUoQ2hlY2tlZE9wY29kZSwgb3Bjb2RlLCBWb2lkLCBvcmlnaW4pCiAgICAgewogICAgICAgICBB
U1NFUlQob3Bjb2RlID09IE9vcHMpOwogICAgIH0KIAogICAgIC8vIFVzZSB0aGlzIGZvciBSZXR1
cm4uCi0gICAgQ29udHJvbFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBPcmln
aW4gb3JpZ2luLCBWYWx1ZSogcmVzdWx0KQotICAgICAgICA6IFZhbHVlKGluZGV4LCBDaGVja2Vk
T3Bjb2RlLCBvcGNvZGUsIFZvaWQsIG9yaWdpbiwgcmVzdWx0KQorICAgIENvbnRyb2xWYWx1ZShP
cGNvZGUgb3Bjb2RlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogcmVzdWx0KQorICAgICAgICA6IFZh
bHVlKENoZWNrZWRPcGNvZGUsIG9wY29kZSwgVm9pZCwgb3JpZ2luLCByZXN1bHQpCiAgICAgewog
ICAgICAgICBBU1NFUlQob3Bjb2RlID09IFJldHVybik7CiAgICAgfQogCiAgICAgLy8gVXNlIHRo
aXMgZm9yIEp1bXAuCi0gICAgQ29udHJvbFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bj
b2RlLCBPcmlnaW4gb3JpZ2luLCBjb25zdCBGcmVxdWVudGVkQmxvY2smIHRhcmdldCkKLSAgICAg
ICAgOiBWYWx1ZShpbmRleCwgQ2hlY2tlZE9wY29kZSwgb3Bjb2RlLCBWb2lkLCBvcmlnaW4pCisg
ICAgQ29udHJvbFZhbHVlKE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4sIGNvbnN0IEZyZXF1
ZW50ZWRCbG9jayYgdGFyZ2V0KQorICAgICAgICA6IFZhbHVlKENoZWNrZWRPcGNvZGUsIG9wY29k
ZSwgVm9pZCwgb3JpZ2luKQogICAgIHsKICAgICAgICAgQVNTRVJUKG9wY29kZSA9PSBKdW1wKTsK
ICAgICAgICAgbV9zdWNjZXNzb3JzLmFwcGVuZCh0YXJnZXQpOwpAQCAtMTQ1LDkgKzE0NSw5IEBA
IHByaXZhdGU6CiAKICAgICAvLyBVc2UgdGhpcyBmb3IgQnJhbmNoLgogICAgIENvbnRyb2xWYWx1
ZSgKLSAgICAgICAgdW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4s
IFZhbHVlKiBwcmVkaWNhdGUsCisgICAgICAgIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4s
IFZhbHVlKiBwcmVkaWNhdGUsCiAgICAgICAgIGNvbnN0IEZyZXF1ZW50ZWRCbG9jayYgeWVzLCBj
b25zdCBGcmVxdWVudGVkQmxvY2smIG5vKQotICAgICAgICA6IFZhbHVlKGluZGV4LCBDaGVja2Vk
T3Bjb2RlLCBvcGNvZGUsIFZvaWQsIG9yaWdpbiwgcHJlZGljYXRlKQorICAgICAgICA6IFZhbHVl
KENoZWNrZWRPcGNvZGUsIG9wY29kZSwgVm9pZCwgb3JpZ2luLCBwcmVkaWNhdGUpCiAgICAgewog
ICAgICAgICBBU1NFUlQob3Bjb2RlID09IEJyYW5jaCk7CiAgICAgICAgIG1fc3VjY2Vzc29ycy5h
cHBlbmQoeWVzKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0VmZmVjdHMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0VmZmVjdHMuY3BwCShy
ZXZpc2lvbiAxOTU5NzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNFZmZlY3RzLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDQsNyArNDQsNyBAQCBib29sIGludGVyZmVyZXNXaXRoVGVy
bWluYWwoY29uc3QgRWZmZWN0CiB7CiAgICAgaWYgKCF0ZXJtaW5hbC50ZXJtaW5hbCkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBvdGhlci50ZXJtaW5hbCB8fCBvdGhlci5jb250
cm9sRGVwZW5kZW50IHx8IG90aGVyLndyaXRlc1NTQVN0YXRlIHx8IG90aGVyLndyaXRlczsKKyAg
ICByZXR1cm4gb3RoZXIudGVybWluYWwgfHwgb3RoZXIuY29udHJvbERlcGVuZGVudCB8fCBvdGhl
ci53cml0ZXNMb2NhbFN0YXRlIHx8IG90aGVyLndyaXRlczsKIH0KIAogYm9vbCBpbnRlcmZlcmVz
V2l0aEV4aXRTaWRld2F5cyhjb25zdCBFZmZlY3RzJiBleGl0c1NpZGV3YXlzLCBjb25zdCBFZmZl
Y3RzJiBvdGhlcikKQEAgLTU0LDExICs1NCwxMSBAQCBib29sIGludGVyZmVyZXNXaXRoRXhpdFNp
ZGV3YXlzKGNvbnN0IEVmCiAgICAgcmV0dXJuIG90aGVyLmNvbnRyb2xEZXBlbmRlbnQgfHwgb3Ro
ZXIud3JpdGVzOwogfQogCi1ib29sIGludGVyZmVyZXNXaXRoV3JpdGVzU1NBU3RhdGUoY29uc3Qg
RWZmZWN0cyYgd3JpdGVzU1NBU3RhdGUsIGNvbnN0IEVmZmVjdHMmIG90aGVyKQorYm9vbCBpbnRl
cmZlcmVzV2l0aFdyaXRlc0xvY2FsU3RhdGUoY29uc3QgRWZmZWN0cyYgd3JpdGVzTG9jYWxTdGF0
ZSwgY29uc3QgRWZmZWN0cyYgb3RoZXIpCiB7Ci0gICAgaWYgKCF3cml0ZXNTU0FTdGF0ZS53cml0
ZXNTU0FTdGF0ZSkKKyAgICBpZiAoIXdyaXRlc0xvY2FsU3RhdGUud3JpdGVzTG9jYWxTdGF0ZSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBvdGhlci53cml0ZXNTU0FTdGF0ZSB8
fCBvdGhlci5yZWFkc1NTQVN0YXRlOworICAgIHJldHVybiBvdGhlci53cml0ZXNMb2NhbFN0YXRl
IHx8IG90aGVyLnJlYWRzTG9jYWxTdGF0ZTsKIH0KIAogfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNl
CkBAIC02OSw3ICs2OSw3IEBAIGJvb2wgRWZmZWN0czo6aW50ZXJmZXJlcyhjb25zdCBFZmZlY3Rz
JiAKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgaWYgKGludGVyZmVyZXNXaXRoRXhpdFNpZGV3
YXlzKCp0aGlzLCBvdGhlcikgfHwgaW50ZXJmZXJlc1dpdGhFeGl0U2lkZXdheXMob3RoZXIsICp0
aGlzKSkKICAgICAgICAgcmV0dXJuIHRydWU7Ci0gICAgaWYgKGludGVyZmVyZXNXaXRoV3JpdGVz
U1NBU3RhdGUoKnRoaXMsIG90aGVyKSB8fCBpbnRlcmZlcmVzV2l0aFdyaXRlc1NTQVN0YXRlKG90
aGVyLCAqdGhpcykpCisgICAgaWYgKGludGVyZmVyZXNXaXRoV3JpdGVzTG9jYWxTdGF0ZSgqdGhp
cywgb3RoZXIpIHx8IGludGVyZmVyZXNXaXRoV3JpdGVzTG9jYWxTdGF0ZShvdGhlciwgKnRoaXMp
KQogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICByZXR1cm4gd3JpdGVzLm92ZXJsYXBzKG90aGVy
LndyaXRlcykKICAgICAgICAgfHwgd3JpdGVzLm92ZXJsYXBzKG90aGVyLnJlYWRzKQpAQCAtODUs
MTAgKzg1LDEwIEBAIHZvaWQgRWZmZWN0czo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb24KICAg
ICAgICAgb3V0LnByaW50KGNvbW1hLCAiRXhpdHNTaWRld2F5cyIpOwogICAgIGlmIChjb250cm9s
RGVwZW5kZW50KQogICAgICAgICBvdXQucHJpbnQoY29tbWEsICJDb250cm9sRGVwZW5kZW50Iik7
Ci0gICAgaWYgKHdyaXRlc1NTQVN0YXRlKQotICAgICAgICBvdXQucHJpbnQoY29tbWEsICJXcml0
ZXNTU0FTdGF0ZSIpOwotICAgIGlmIChyZWFkc1NTQVN0YXRlKQotICAgICAgICBvdXQucHJpbnQo
Y29tbWEsICJSZWFkc1NTQVN0YXRlIik7CisgICAgaWYgKHdyaXRlc0xvY2FsU3RhdGUpCisgICAg
ICAgIG91dC5wcmludChjb21tYSwgIldyaXRlc0xvY2FsU3RhdGUiKTsKKyAgICBpZiAocmVhZHNM
b2NhbFN0YXRlKQorICAgICAgICBvdXQucHJpbnQoY29tbWEsICJSZWFkc0xvY2FsU3RhdGUiKTsK
ICAgICBpZiAod3JpdGVzKQogICAgICAgICBvdXQucHJpbnQoY29tbWEsICJXcml0ZXM6Iiwgd3Jp
dGVzKTsKICAgICBpZiAocmVhZHMpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNF
ZmZlY3RzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRWZmZWN0
cy5oCShyZXZpc2lvbiAxOTU5NzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNFZmZl
Y3RzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDE0ICs0OCwxNCBAQCBzdHJ1Y3QgRWZmZWN0cyB7
CiAgICAgLy8gVHJ1ZSBpZiB0aGUgaW5zdHJ1Y3Rpb24gbWF5IGNoYW5nZSBzZW1hbnRpY3MgaWYg
aG9pc3RlZCBhYm92ZSBzb21lIGNvbnRyb2wgZmxvdy4KICAgICBib29sIGNvbnRyb2xEZXBlbmRl
bnQgeyBmYWxzZSB9OwogCi0gICAgLy8gVHJ1ZSBpZiB0aGlzIHdyaXRlcyB0byB0aGUgU1NBIHN0
YXRlLiBPcGVyYXRpb25zIHRoYXQgd3JpdGUgU1NBIHN0YXRlIGRvbid0IHdyaXRlIHRvIGFueXRo
aW5nCi0gICAgLy8gaW4gIm1lbW9yeSIgYnV0IHRoZXkgaGF2ZSBhIHNpZGUtZWZmZWN0IGFueXdh
eS4gVGhpcyBpcyBmb3IgbW9kZWxpbmcgVXBzaWxvbnMuIFlvdSBjYW4gaWdub3JlCi0gICAgLy8g
dGhpcyBpZiB5b3UgaGF2ZSB5b3VyIG93biB3YXkgb2YgbW9kZWxpbmcgVXBzaWxvbnMgb3IgaWYg
eW91IGludGVuZCB0byBqdXN0IHJlYnVpbGQgdGhlbQorICAgIC8vIFRydWUgaWYgdGhpcyB3cml0
ZXMgdG8gdGhlIGxvY2FsIHN0YXRlLiBPcGVyYXRpb25zIHRoYXQgd3JpdGUgbG9jYWwgc3RhdGUg
ZG9uJ3Qgd3JpdGUgdG8gYW55dGhpbmcKKyAgICAvLyBpbiAibWVtb3J5IiBidXQgdGhleSBoYXZl
IGEgc2lkZS1lZmZlY3QgYW55d2F5LiBUaGlzIGlzIGZvciBtb2RlbGluZyBVcHNpbG9ucyBhbmQg
U2V0cy4gWW91IGNhbiBpZ25vcmUKKyAgICAvLyB0aGlzIGlmIHlvdSBoYXZlIHlvdXIgb3duIHdh
eSBvZiBtb2RlbGluZyBVcHNpbG9ucyBhbmQgU2V0cyBvciBpZiB5b3UgaW50ZW5kIHRvIGp1c3Qg
cmVidWlsZCB0aGVtCiAgICAgLy8gYW55d2F5LgotICAgIGJvb2wgd3JpdGVzU1NBU3RhdGUgeyBm
YWxzZSB9OworICAgIGJvb2wgd3JpdGVzTG9jYWxTdGF0ZSB7IGZhbHNlIH07CiAKLSAgICAvLyBU
cnVlIGlmIHRoaXMgcmVhZHMgZnJvbSB0aGUgU1NBIHN0YXRlLiBUaGlzIGlzIG9ubHkgdXNlZCBm
b3IgUGhpLgotICAgIGJvb2wgcmVhZHNTU0FTdGF0ZSB7IGZhbHNlIH07CisgICAgLy8gVHJ1ZSBp
ZiB0aGlzIHJlYWRzIGZyb20gdGhlIGxvY2FsIHN0YXRlLiBUaGlzIGlzIG9ubHkgdXNlZCBmb3Ig
UGhpIGFuZCBHZXQuCisgICAgYm9vbCByZWFkc0xvY2FsU3RhdGUgeyBmYWxzZSB9OwogCiAgICAg
SGVhcFJhbmdlIHdyaXRlczsKICAgICBIZWFwUmFuZ2UgcmVhZHM7CkBAIC03Nyw3ICs3Nyw3IEBA
IHN0cnVjdCBFZmZlY3RzIHsKIAogICAgIGJvb2wgbXVzdEV4ZWN1dGUoKSBjb25zdAogICAgIHsK
LSAgICAgICAgcmV0dXJuIHRlcm1pbmFsIHx8IGV4aXRzU2lkZXdheXMgfHwgd3JpdGVzU1NBU3Rh
dGUgfHwgd3JpdGVzOworICAgICAgICByZXR1cm4gdGVybWluYWwgfHwgZXhpdHNTaWRld2F5cyB8
fCB3cml0ZXNMb2NhbFN0YXRlIHx8IHdyaXRlczsKICAgICB9CiAKICAgICAvLyBSZXR1cm5zIHRy
dWUgaWYgcmVvcmRlcmluZyBpbnN0cnVjdGlvbnMgd2l0aCB0aGVzZSByZXNwZWN0aXZlIGVmZmVj
dHMgd291bGQgY2hhbmdlIHByb2dyYW0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0VsaW1pbmF0ZUNvbW1vblN1YmV4cHJlc3Npb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNFbGltaW5hdGVDb21tb25TdWJleHByZXNzaW9ucy5jcHAJKHJl
dmlzaW9uIDE5NTk3MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0VsaW1pbmF0ZUNv
bW1vblN1YmV4cHJlc3Npb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsNiArNDEsOCBAQAog
I2luY2x1ZGUgIkIzU3RhY2tTbG90LmgiCiAjaW5jbHVkZSAiQjNWYWx1ZUtleS5oIgogI2luY2x1
ZGUgIkIzVmFsdWVJbmxpbmVzLmgiCisjaW5jbHVkZSAiQjNWYXJpYWJsZS5oIgorI2luY2x1ZGUg
IkIzVmFyaWFibGVWYWx1ZS5oIgogI2luY2x1ZGUgIkRGR0dyYXBoLmgiCiAjaW5jbHVkZSA8d3Rm
L0NvbW1hUHJpbnRlci5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CkBAIC0xMzEsMTIgKzEz
MywxMCBAQCBwdWJsaWM6CiAgICAgICAgICAgICBtX2ltcHVyZUJsb2NrRGF0YVttX2Jsb2NrXSA9
IG1fZGF0YTsKICAgICAgICAgfQogCi0gICAgICAgIGZvciAoU2xvdEJhc2VWYWx1ZSogc3RhY2sg
OiBtX3N0YWNrcykKLSAgICAgICAgICAgIG1faW5zZXJ0aW9uU2V0Lmluc2VydFZhbHVlKDAsIHN0
YWNrKTsKICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fcHJvYykgewogICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCB2YWx1ZUluZGV4ID0gMDsgdmFsdWVJbmRleCA8IGJsb2NrLT5z
aXplKCk7ICsrdmFsdWVJbmRleCkgewotICAgICAgICAgICAgICAgIGF1dG8gaXRlciA9IG1fc3Rv
cmVzLmZpbmQoYmxvY2stPmF0KHZhbHVlSW5kZXgpKTsKLSAgICAgICAgICAgICAgICBpZiAoaXRl
ciA9PSBtX3N0b3Jlcy5lbmQoKSkKKyAgICAgICAgICAgICAgICBhdXRvIGl0ZXIgPSBtX3NldHMu
ZmluZChibG9jay0+YXQodmFsdWVJbmRleCkpOworICAgICAgICAgICAgICAgIGlmIChpdGVyID09
IG1fc2V0cy5lbmQoKSkKICAgICAgICAgICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAg
ICAgICAgICBmb3IgKFZhbHVlKiB2YWx1ZSA6IGl0ZXItPnZhbHVlKQpAQCAtMzY5LDIxICszNjks
MTkgQEAgcHJpdmF0ZToKICAgICAgICAgLy8gRklYTUU6IEl0IHdvdWxkIGJlIHdheSBiZXR0ZXIg
aWYgdGhpcyBwaGFzZSBqdXN0IGRpZCBTU0EgY2FsY3VsYXRpb24gZGlyZWN0bHkuCiAgICAgICAg
IC8vIFJpZ2h0IG5vdyB3ZSdyZSByZWx5aW5nIG9uIHRoZSBmYWN0IHRoYXQgQ1NFJ3MgcG9zaXRp
b24gaW4gdGhlIHBoYXNlIG9yZGVyIGlzCiAgICAgICAgIC8vIGFsbW9zdCByaWdodCBiZWZvcmUg
U1NBIGZpeHVwLgotICAgICAgICAgICAgCi0gICAgICAgIFNsb3RCYXNlVmFsdWUqIHN0YWNrID0g
bV9wcm9jLmFkZDxTbG90QmFzZVZhbHVlPigKLSAgICAgICAgICAgIG1fdmFsdWUtPm9yaWdpbigp
LCBtX3Byb2MuYWRkQW5vbnltb3VzU3RhY2tTbG90KG1fdmFsdWUtPnR5cGUoKSkpOwotICAgICAg
ICBtX3N0YWNrcy5hcHBlbmQoc3RhY2spOwogCi0gICAgICAgIE1lbW9yeVZhbHVlKiBsb2FkID0g
bV9pbnNlcnRpb25TZXQuaW5zZXJ0PE1lbW9yeVZhbHVlPigKLSAgICAgICAgICAgIG1faW5kZXgs
IExvYWQsIG1fdmFsdWUtPnR5cGUoKSwgbV92YWx1ZS0+b3JpZ2luKCksIHN0YWNrKTsKKyAgICAg
ICAgVmFyaWFibGUqIHZhcmlhYmxlID0gbV9wcm9jLmFkZFZhcmlhYmxlKG1fdmFsdWUtPnR5cGUo
KSk7CisKKyAgICAgICAgVmFyaWFibGVWYWx1ZSogZ2V0ID0gbV9pbnNlcnRpb25TZXQuaW5zZXJ0
PFZhcmlhYmxlVmFsdWU+KAorICAgICAgICAgICAgbV9pbmRleCwgR2V0LCBtX3ZhbHVlLT5vcmln
aW4oKSwgdmFyaWFibGUpOwogICAgICAgICBpZiAodmVyYm9zZSkKLSAgICAgICAgICAgIGRhdGFM
b2coIiAgICBJbnNlcnRpbmcgbG9hZCBvZiB2YWx1ZTogIiwgKmxvYWQsICJcbiIpOwotICAgICAg
ICBtX3ZhbHVlLT5yZXBsYWNlV2l0aElkZW50aXR5KGxvYWQpOworICAgICAgICAgICAgZGF0YUxv
ZygiICAgIEluc2VydGluZyBnZXQgb2YgdmFsdWU6ICIsICpnZXQsICJcbiIpOworICAgICAgICBt
X3ZhbHVlLT5yZXBsYWNlV2l0aElkZW50aXR5KGdldCk7CiAgICAgICAgICAgICAKICAgICAgICAg
Zm9yIChNZW1vcnlWYWx1ZSogbWF0Y2ggOiBtYXRjaGVzKSB7Ci0gICAgICAgICAgICBWZWN0b3I8
VmFsdWUqPiYgc3RvcmVzID0gbV9zdG9yZXMuYWRkKG1hdGNoLCBWZWN0b3I8VmFsdWUqPigpKS5p
dGVyYXRvci0+dmFsdWU7CisgICAgICAgICAgICBWZWN0b3I8VmFsdWUqPiYgc2V0cyA9IG1fc2V0
cy5hZGQobWF0Y2gsIFZlY3RvcjxWYWx1ZSo+KCkpLml0ZXJhdG9yLT52YWx1ZTsKIAotICAgICAg
ICAgICAgVmFsdWUqIHZhbHVlID0gcmVwbGFjZShtYXRjaCwgc3RvcmVzKTsKKyAgICAgICAgICAg
IFZhbHVlKiB2YWx1ZSA9IHJlcGxhY2UobWF0Y2gsIHNldHMpOwogICAgICAgICAgICAgaWYgKCF2
YWx1ZSkgewogICAgICAgICAgICAgICAgIGlmIChtYXRjaC0+aXNTdG9yZSgpKQogICAgICAgICAg
ICAgICAgICAgICB2YWx1ZSA9IG1hdGNoLT5jaGlsZCgwKTsKQEAgLTM5MSw4ICszODksOCBAQCBw
cml2YXRlOgogICAgICAgICAgICAgICAgICAgICB2YWx1ZSA9IG1hdGNoOwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgVmFsdWUqIHN0b3JlID0gbV9wcm9jLmFk
ZDxNZW1vcnlWYWx1ZT4oU3RvcmUsIG1fdmFsdWUtPm9yaWdpbigpLCB2YWx1ZSwgc3RhY2spOwot
ICAgICAgICAgICAgc3RvcmVzLmFwcGVuZChzdG9yZSk7CisgICAgICAgICAgICBWYWx1ZSogc2V0
ID0gbV9wcm9jLmFkZDxWYXJpYWJsZVZhbHVlPihTZXQsIG1fdmFsdWUtPm9yaWdpbigpLCB2YXJp
YWJsZSwgdmFsdWUpOworICAgICAgICAgICAgc2V0cy5hcHBlbmQoc2V0KTsKICAgICAgICAgfQog
CiAgICAgICAgIHJldHVybiB0cnVlOwpAQCAtNDk5LDggKzQ5Nyw3IEBAIHByaXZhdGU6CiAgICAg
dW5zaWduZWQgbV9pbmRleDsKICAgICBWYWx1ZSogbV92YWx1ZTsKIAotICAgIFZlY3RvcjxTbG90
QmFzZVZhbHVlKj4gbV9zdGFja3M7Ci0gICAgSGFzaE1hcDxWYWx1ZSosIFZlY3RvcjxWYWx1ZSo+
PiBtX3N0b3JlczsKKyAgICBIYXNoTWFwPFZhbHVlKiwgVmVjdG9yPFZhbHVlKj4+IG1fc2V0czsK
IAogICAgIEluc2VydGlvblNldCBtX2luc2VydGlvblNldDsKIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzRml4U1NBLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNGaXhTU0EuY3BwCShyZXZpc2lvbiAxOTU5NzApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNGaXhTU0EuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNCwxNCArMzQsMTMg
QEAKICNpbmNsdWRlICJCM0RvbWluYXRvcnMuaCIKICNpbmNsdWRlICJCM0luZGV4U2V0LmgiCiAj
aW5jbHVkZSAiQjNJbnNlcnRpb25TZXRJbmxpbmVzLmgiCi0jaW5jbHVkZSAiQjNNZW1vcnlWYWx1
ZS5oIgogI2luY2x1ZGUgIkIzUGhhc2VTY29wZS5oIgogI2luY2x1ZGUgIkIzUHJvY2VkdXJlSW5s
aW5lcy5oIgogI2luY2x1ZGUgIkIzU1NBQ2FsY3VsYXRvci5oIgotI2luY2x1ZGUgIkIzU2xvdEJh
c2VWYWx1ZS5oIgotI2luY2x1ZGUgIkIzU3RhY2tTbG90LmgiCiAjaW5jbHVkZSAiQjNVcHNpbG9u
VmFsdWUuaCIKICNpbmNsdWRlICJCM1ZhbHVlSW5saW5lcy5oIgorI2luY2x1ZGUgIkIzVmFyaWFi
bGUuaCIKKyNpbmNsdWRlICJCM1ZhcmlhYmxlVmFsdWUuaCIKICNpbmNsdWRlIDx3dGYvQ29tbWFQ
cmludGVyLmg+CiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewpAQCAtNTIsMjMgKzUx
LDE2IEBAIGNvbnN0IGJvb2wgdmVyYm9zZSA9IGZhbHNlOwogCiB2b2lkIGRlbW90ZVZhbHVlcyhQ
cm9jZWR1cmUmIHByb2MsIGNvbnN0IEluZGV4U2V0PFZhbHVlPiYgdmFsdWVzKQogewotICAgIEhh
c2hNYXA8VmFsdWUqLCBTbG90QmFzZVZhbHVlKj4gbWFwOwotICAgIEhhc2hNYXA8VmFsdWUqLCBT
bG90QmFzZVZhbHVlKj4gcGhpTWFwOworICAgIEhhc2hNYXA8VmFsdWUqLCBWYXJpYWJsZSo+IG1h
cDsKKyAgICBIYXNoTWFwPFZhbHVlKiwgVmFyaWFibGUqPiBwaGlNYXA7CiAKICAgICAvLyBDcmVh
dGUgc3RhY2sgc2xvdHMuCi0gICAgSW5zZXJ0aW9uU2V0IGluc2VydGlvblNldChwcm9jKTsKICAg
ICBmb3IgKFZhbHVlKiB2YWx1ZSA6IHZhbHVlcy52YWx1ZXMocHJvYy52YWx1ZXMoKSkpIHsKLSAg
ICAgICAgU2xvdEJhc2VWYWx1ZSogc3RhY2sgPSBpbnNlcnRpb25TZXQuaW5zZXJ0PFNsb3RCYXNl
VmFsdWU+KAotICAgICAgICAgICAgMCwgdmFsdWUtPm9yaWdpbigpLCBwcm9jLmFkZEFub255bW91
c1N0YWNrU2xvdCh2YWx1ZS0+dHlwZSgpKSk7Ci0gICAgICAgIG1hcC5hZGQodmFsdWUsIHN0YWNr
KTsKLQotICAgICAgICBpZiAodmFsdWUtPm9wY29kZSgpID09IFBoaSkgewotICAgICAgICAgICAg
U2xvdEJhc2VWYWx1ZSogcGhpU3RhY2sgPSBpbnNlcnRpb25TZXQuaW5zZXJ0PFNsb3RCYXNlVmFs
dWU+KAotICAgICAgICAgICAgICAgIDAsIHZhbHVlLT5vcmlnaW4oKSwgcHJvYy5hZGRBbm9ueW1v
dXNTdGFja1Nsb3QodmFsdWUtPnR5cGUoKSkpOwotICAgICAgICAgICAgcGhpTWFwLmFkZCh2YWx1
ZSwgcGhpU3RhY2spOwotICAgICAgICB9CisgICAgICAgIG1hcC5hZGQodmFsdWUsIHByb2MuYWRk
VmFyaWFibGUodmFsdWUtPnR5cGUoKSkpOworCisgICAgICAgIGlmICh2YWx1ZS0+b3Bjb2RlKCkg
PT0gUGhpKQorICAgICAgICAgICAgcGhpTWFwLmFkZCh2YWx1ZSwgcHJvYy5hZGRWYXJpYWJsZSh2
YWx1ZS0+dHlwZSgpKSk7CiAgICAgfQotICAgIGluc2VydGlvblNldC5leGVjdXRlKHByb2NbMF0p
OwogCiAgICAgaWYgKHZlcmJvc2UpIHsKICAgICAgICAgZGF0YUxvZygiRGVtb3RpbmcgdmFsdWVz
IGFzIGZvbGxvd3M6XG4iKTsKQEAgLTg1LDM2ICs3NywzNyBAQCB2b2lkIGRlbW90ZVZhbHVlcyhQ
cm9jZWR1cmUmIHByb2MsIGNvbnN0CiAgICAgfQogCiAgICAgLy8gQ2hhbmdlIGFjY2Vzc2VzIHRv
IHRoZSB2YWx1ZXMgdG8gYWNjZXNzZXMgdG8gdGhlIHN0YWNrIHNsb3RzLgorICAgIEluc2VydGlv
blNldCBpbnNlcnRpb25TZXQocHJvYyk7CiAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IHBy
b2MpIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCB2YWx1ZUluZGV4ID0gMDsgdmFsdWVJbmRleCA8
IGJsb2NrLT5zaXplKCk7ICsrdmFsdWVJbmRleCkgewogICAgICAgICAgICAgVmFsdWUqIHZhbHVl
ID0gYmxvY2stPmF0KHZhbHVlSW5kZXgpOwogCiAgICAgICAgICAgICBpZiAodmFsdWUtPm9wY29k
ZSgpID09IFBoaSkgewotICAgICAgICAgICAgICAgIGlmIChTbG90QmFzZVZhbHVlKiBzbG90QmFz
ZSA9IHBoaU1hcC5nZXQodmFsdWUpKSB7CisgICAgICAgICAgICAgICAgaWYgKFZhcmlhYmxlKiB2
YXJpYWJsZSA9IHBoaU1hcC5nZXQodmFsdWUpKSB7CiAgICAgICAgICAgICAgICAgICAgIHZhbHVl
LT5yZXBsYWNlV2l0aElkZW50aXR5KAotICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9u
U2V0Lmluc2VydDxNZW1vcnlWYWx1ZT4oCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFs
dWVJbmRleCwgTG9hZCwgdmFsdWUtPnR5cGUoKSwgdmFsdWUtPm9yaWdpbigpLCBzbG90QmFzZSkp
OworICAgICAgICAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydDxWYXJpYWJsZVZh
bHVlPigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZUluZGV4LCBHZXQsIHZhbHVl
LT5vcmlnaW4oKSwgdmFyaWFibGUpKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9
IGVsc2UgewogICAgICAgICAgICAgICAgIGZvciAoVmFsdWUqJiBjaGlsZCA6IHZhbHVlLT5jaGls
ZHJlbigpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChTbG90QmFzZVZhbHVlKiBzbG90QmFz
ZSA9IG1hcC5nZXQoY2hpbGQpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjaGlsZCA9IGlu
c2VydGlvblNldC5pbnNlcnQ8TWVtb3J5VmFsdWU+KAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHZhbHVlSW5kZXgsIExvYWQsIGNoaWxkLT50eXBlKCksIHZhbHVlLT5vcmlnaW4oKSwgc2xv
dEJhc2UpOworICAgICAgICAgICAgICAgICAgICBpZiAoVmFyaWFibGUqIHZhcmlhYmxlID0gbWFw
LmdldChjaGlsZCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkID0gaW5zZXJ0aW9u
U2V0Lmluc2VydDxWYXJpYWJsZVZhbHVlPigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB2
YWx1ZUluZGV4LCBHZXQsIHZhbHVlLT5vcmlnaW4oKSwgdmFyaWFibGUpOwogICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogCiAgICAgICAgICAgICAgICAgaWYgKFVwc2ls
b25WYWx1ZSogdXBzaWxvbiA9IHZhbHVlLT5hczxVcHNpbG9uVmFsdWU+KCkpIHsKLSAgICAgICAg
ICAgICAgICAgICAgaWYgKFNsb3RCYXNlVmFsdWUqIHNsb3RCYXNlID0gcGhpTWFwLmdldCh1cHNp
bG9uLT5waGkoKSkpIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNl
cnQ8TWVtb3J5VmFsdWU+KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlSW5kZXgs
IFN0b3JlLCB1cHNpbG9uLT5vcmlnaW4oKSwgdXBzaWxvbi0+Y2hpbGQoMCksIHNsb3RCYXNlKTsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKFZhcmlhYmxlKiB2YXJpYWJsZSA9IHBoaU1hcC5nZXQo
dXBzaWxvbi0+cGhpKCkpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQu
aW5zZXJ0PFZhcmlhYmxlVmFsdWU+KAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVl
SW5kZXgsIFNldCwgdXBzaWxvbi0+b3JpZ2luKCksIHZhcmlhYmxlLCB1cHNpbG9uLT5jaGlsZCgw
KSk7CiAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS0+cmVwbGFjZVdpdGhOb3AoKTsKICAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0KIAot
ICAgICAgICAgICAgaWYgKFNsb3RCYXNlVmFsdWUqIHNsb3RCYXNlID0gbWFwLmdldCh2YWx1ZSkp
IHsKLSAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0PE1lbW9yeVZhbHVlPigKLSAg
ICAgICAgICAgICAgICAgICAgdmFsdWVJbmRleCArIDEsIFN0b3JlLCB2YWx1ZS0+b3JpZ2luKCks
IHZhbHVlLCBzbG90QmFzZSk7CisgICAgICAgICAgICBpZiAoVmFyaWFibGUqIHZhcmlhYmxlID0g
bWFwLmdldCh2YWx1ZSkpIHsKKyAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0PFZh
cmlhYmxlVmFsdWU+KAorICAgICAgICAgICAgICAgICAgICB2YWx1ZUluZGV4ICsgMSwgU2V0LCB2
YWx1ZS0+b3JpZ2luKCksIHZhcmlhYmxlLCB2YWx1ZSk7CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KICAgICAgICAgaW5zZXJ0aW9uU2V0LmV4ZWN1dGUoYmxvY2spOwpAQCAtMTI0LDgwICsxMTcs
MjIgQEAgdm9pZCBkZW1vdGVWYWx1ZXMoUHJvY2VkdXJlJiBwcm9jLCBjb25zdAogYm9vbCBmaXhT
U0EoUHJvY2VkdXJlJiBwcm9jKQogewogICAgIFBoYXNlU2NvcGUgcGhhc2VTY29wZShwcm9jLCAi
Zml4U1NBIik7Ci0gICAgCi0gICAgLy8gQ29sbGVjdCB0aGUgc3RhY2sgInZhcmlhYmxlcyIuIElm
IHRoZXJlIGFyZW4ndCBhbnksIHRoZW4gd2UgZG9uJ3QgaGF2ZSBhbnl0aGluZyB0byBkby4KLSAg
ICAvLyBUaGF0J3MgYSBmYWlybHkgY29tbW9uIGNhc2UuCi0gICAgSGFzaE1hcDxTdGFja1Nsb3Qq
LCBUeXBlPiBzdGFja1ZhcmlhYmxlOwotICAgIGZvciAoVmFsdWUqIHZhbHVlIDogcHJvYy52YWx1
ZXMoKSkgewotICAgICAgICBpZiAoU2xvdEJhc2VWYWx1ZSogc2xvdEJhc2UgPSB2YWx1ZS0+YXM8
U2xvdEJhc2VWYWx1ZT4oKSkgewotICAgICAgICAgICAgU3RhY2tTbG90KiBzdGFjayA9IHNsb3RC
YXNlLT5zbG90KCk7Ci0gICAgICAgICAgICBpZiAoc3RhY2stPmtpbmQoKSA9PSBTdGFja1Nsb3RL
aW5kOjpBbm9ueW1vdXMpCi0gICAgICAgICAgICAgICAgc3RhY2tWYXJpYWJsZS5hZGQoc3RhY2ss
IFZvaWQpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgaWYgKHN0YWNrVmFyaWFibGUuaXNFbXB0
eSgpKQotICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAvLyBNYWtlIHN1cmUgdGhhdCB3ZSBr
bm93IGhvdyB0byBvcHRpbWl6ZSBhbGwgb2YgdGhlc2UuIFdlIG9ubHkga25vdyBob3cgdG8gaGFu
ZGxlIExvYWQgYW5kCi0gICAgLy8gU3RvcmUgb24gYW5vbnltb3VzIHZhcmlhYmxlcy4KKyAgICAv
LyBKdXN0IGZvciBzYW5pdHksIHJlbW92ZSBhbnkgdW51c2VkIHZhcmlhYmxlcyBmaXJzdC4gSXQn
cyB1bmxpa2VseSB0aGF0IHRoaXMgY29kZSBoYXMgYW55CisgICAgLy8gYnVncyBoYXZpbmcgdG8g
ZG8gd2l0aCBkZWFkIHZhcmlhYmxlcywgYnV0IGl0IHdvdWxkIGJlIHNpbGx5IHRvIGhhdmUgdG8g
Zml4IHN1Y2ggYSBidWcgaWYKKyAgICAvLyBpdCBkaWQgYXJpc2UuCisgICAgSW5kZXhTZXQ8VmFy
aWFibGU+IGxpdmVWYXJpYWJsZXM7CiAgICAgZm9yIChWYWx1ZSogdmFsdWUgOiBwcm9jLnZhbHVl
cygpKSB7Ci0gICAgICAgIGF1dG8gcmVqZWN0ID0gWyZdIChWYWx1ZSogdmFsdWUpIHsKLSAgICAg
ICAgICAgIGlmIChTbG90QmFzZVZhbHVlKiBzbG90QmFzZSA9IHZhbHVlLT5hczxTbG90QmFzZVZh
bHVlPigpKQotICAgICAgICAgICAgICAgIHN0YWNrVmFyaWFibGUucmVtb3ZlKHNsb3RCYXNlLT5z
bG90KCkpOwotICAgICAgICB9OwotICAgICAgICAKLSAgICAgICAgYXV0byBoYW5kbGVBY2Nlc3Mg
PSBbJl0gKFZhbHVlKiBhY2Nlc3MsIFR5cGUgdHlwZSkgewotICAgICAgICAgICAgU2xvdEJhc2VW
YWx1ZSogc2xvdEJhc2UgPSBhY2Nlc3MtPmxhc3RDaGlsZCgpLT5hczxTbG90QmFzZVZhbHVlPigp
OwotICAgICAgICAgICAgaWYgKCFzbG90QmFzZSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0K
LSAgICAgICAgICAgIFN0YWNrU2xvdCogc3RhY2sgPSBzbG90QmFzZS0+c2xvdCgpOwotICAgICAg
ICAgICAgCi0gICAgICAgICAgICBpZiAodmFsdWUtPmFzPE1lbW9yeVZhbHVlPigpLT5vZmZzZXQo
KSkgewotICAgICAgICAgICAgICAgIHN0YWNrVmFyaWFibGUucmVtb3ZlKHN0YWNrKTsKLSAgICAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGF1dG8gcmVz
dWx0ID0gc3RhY2tWYXJpYWJsZS5maW5kKHN0YWNrKTsKLSAgICAgICAgICAgIGlmIChyZXN1bHQg
PT0gc3RhY2tWYXJpYWJsZS5lbmQoKSkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAg
ICAgICBpZiAocmVzdWx0LT52YWx1ZSA9PSBWb2lkKSB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0
LT52YWx1ZSA9IHR5cGU7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgaWYgKHJlc3VsdC0+dmFsdWUgPT0gdHlwZSkKLSAgICAgICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgICAgICBzdGFja1ZhcmlhYmxlLnJlbW92ZShyZXN1bHQpOwotICAgICAg
ICB9OwotICAgICAgICAKLSAgICAgICAgc3dpdGNoICh2YWx1ZS0+b3Bjb2RlKCkpIHsKLSAgICAg
ICAgY2FzZSBMb2FkOgotICAgICAgICAgICAgLy8gV2UncmUgT0sgd2l0aCBsb2FkcyBmcm9tIHN0
YWNrIHZhcmlhYmxlcyBhdCBhbiBvZmZzZXQgb2YgemVyby4KLSAgICAgICAgICAgIGhhbmRsZUFj
Y2Vzcyh2YWx1ZSwgdmFsdWUtPnR5cGUoKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
Y2FzZSBTdG9yZToKLSAgICAgICAgICAgIC8vIFdlJ3JlIE9LIHdpdGggc3RvcmVzIHRvIHN0YWNr
IHZhcmlhYmxlcywgYnV0IG5vdCBzdG9yaW5nIHN0YWNrIHZhcmlhYmxlcy4KLSAgICAgICAgICAg
IHJlamVjdCh2YWx1ZS0+Y2hpbGQoMCkpOwotICAgICAgICAgICAgaGFuZGxlQWNjZXNzKHZhbHVl
LCB2YWx1ZS0+Y2hpbGQoMCktPnR5cGUoKSk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ZGVmYXVsdDoKLSAgICAgICAgICAgIGZvciAoVmFsdWUqIGNoaWxkIDogdmFsdWUtPmNoaWxkcmVu
KCkpCi0gICAgICAgICAgICAgICAgcmVqZWN0KGNoaWxkKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9CisgICAgICAgIGlmIChWYXJpYWJsZVZhbHVlKiB2YXJpYWJsZVZhbHVlID0gdmFs
dWUtPmFzPFZhcmlhYmxlVmFsdWU+KCkpCisgICAgICAgICAgICBsaXZlVmFyaWFibGVzLmFkZCh2
YXJpYWJsZVZhbHVlLT52YXJpYWJsZSgpKTsKICAgICB9CiAKLSAgICBWZWN0b3I8U3RhY2tTbG90
Kj4gZGVhZFNsb3RzOwotICAgIGZvciAoYXV0byYgZW50cnkgOiBzdGFja1ZhcmlhYmxlKSB7Ci0g
ICAgICAgIGlmIChlbnRyeS52YWx1ZSA9PSBWb2lkKQotICAgICAgICAgICAgZGVhZFNsb3RzLmFw
cGVuZChlbnRyeS5rZXkpOworICAgIGZvciAoVmFyaWFibGUqIHZhcmlhYmxlIDogcHJvYy52YXJp
YWJsZXMoKSkgeworICAgICAgICBpZiAoIWxpdmVWYXJpYWJsZXMuY29udGFpbnModmFyaWFibGUp
KQorICAgICAgICAgICAgcHJvYy5kZWxldGVWYXJpYWJsZSh2YXJpYWJsZSk7CiAgICAgfQogCi0g
ICAgZm9yIChTdGFja1Nsb3QqIGRlYWRTbG90IDogZGVhZFNsb3RzKQotICAgICAgICBzdGFja1Zh
cmlhYmxlLnJlbW92ZShkZWFkU2xvdCk7Ci0KLSAgICBpZiAoc3RhY2tWYXJpYWJsZS5pc0VtcHR5
KCkpCisgICAgaWYgKHByb2MudmFyaWFibGVzKCkuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKICAgICAvLyBXZSBrbm93IHRoYXQgd2UgaGF2ZSB2YXJpYWJsZXMgdG8gb3B0aW1p
emUsIHNvIGRvIHRoYXQgbm93LgpAQCAtMjA1LDQzICsxNDAsMzggQEAgYm9vbCBmaXhTU0EoUHJv
Y2VkdXJlJiBwcm9jKQogCiAgICAgU1NBQ2FsY3VsYXRvciBzc2EocHJvYyk7CiAKLSAgICAvLyBD
cmVhdGUgYSBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSBmb3IgZXZlcnkgc3RhY2sgdmFyaWFibGUu
Ci0gICAgVmVjdG9yPFN0YWNrU2xvdCo+IHZhcmlhYmxlVG9TdGFjazsKLSAgICBIYXNoTWFwPFN0
YWNrU2xvdCosIFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKj4gc3RhY2tUb1ZhcmlhYmxlOwotCi0g
ICAgZm9yIChhdXRvJiBlbnRyeSA6IHN0YWNrVmFyaWFibGUpIHsKLSAgICAgICAgU3RhY2tTbG90
KiBzdGFjayA9IGVudHJ5LmtleTsKLSAgICAgICAgU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqIHZh
cmlhYmxlID0gc3NhLm5ld1ZhcmlhYmxlKCk7Ci0gICAgICAgIFJFTEVBU0VfQVNTRVJUKHZhcmlh
YmxlLT5pbmRleCgpID09IHZhcmlhYmxlVG9TdGFjay5zaXplKCkpOwotICAgICAgICB2YXJpYWJs
ZVRvU3RhY2suYXBwZW5kKHN0YWNrKTsKLSAgICAgICAgc3RhY2tUb1ZhcmlhYmxlLmFkZChzdGFj
aywgdmFyaWFibGUpOworICAgIC8vIENyZWF0ZSBhIFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlICgi
Y2FsY1ZhciIpIGZvciBldmVyeSB2YXJpYWJsZS4KKyAgICBWZWN0b3I8VmFyaWFibGUqPiBjYWxj
VmFyVG9WYXJpYWJsZTsKKyAgICBJbmRleE1hcDxWYXJpYWJsZSwgU1NBQ2FsY3VsYXRvcjo6VmFy
aWFibGUqPiB2YXJpYWJsZVRvQ2FsY1Zhcihwcm9jLnZhcmlhYmxlcygpLnNpemUoKSk7CisKKyAg
ICBmb3IgKFZhcmlhYmxlKiB2YXJpYWJsZSA6IHByb2MudmFyaWFibGVzKCkpIHsKKyAgICAgICAg
U1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqIGNhbGNWYXIgPSBzc2EubmV3VmFyaWFibGUoKTsKKyAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoY2FsY1Zhci0+aW5kZXgoKSA9PSBjYWxjVmFyVG9WYXJpYWJs
ZS5zaXplKCkpOworICAgICAgICBjYWxjVmFyVG9WYXJpYWJsZS5hcHBlbmQodmFyaWFibGUpOwor
ICAgICAgICB2YXJpYWJsZVRvQ2FsY1Zhclt2YXJpYWJsZV0gPSBjYWxjVmFyOwogICAgIH0KIAog
ICAgIC8vIENyZWF0ZSBEZWZzIGZvciBhbGwgb2YgdGhlIHN0b3JlcyB0byB0aGUgc3RhY2sgdmFy
aWFibGUuCiAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IHByb2MpIHsKICAgICAgICAgZm9y
IChWYWx1ZSogdmFsdWUgOiAqYmxvY2spIHsKLSAgICAgICAgICAgIGlmICh2YWx1ZS0+b3Bjb2Rl
KCkgIT0gU3RvcmUpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0KLSAgICAgICAgICAgIFNs
b3RCYXNlVmFsdWUqIHNsb3RCYXNlID0gdmFsdWUtPmNoaWxkKDEpLT5hczxTbG90QmFzZVZhbHVl
PigpOwotICAgICAgICAgICAgaWYgKCFzbG90QmFzZSkKKyAgICAgICAgICAgIGlmICh2YWx1ZS0+
b3Bjb2RlKCkgIT0gU2V0KQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgICAg
ICBTdGFja1Nsb3QqIHN0YWNrID0gc2xvdEJhc2UtPnNsb3QoKTsKKyAgICAgICAgICAgIFZhcmlh
YmxlKiB2YXJpYWJsZSA9IHZhbHVlLT5hczxWYXJpYWJsZVZhbHVlPigpLT52YXJpYWJsZSgpOwog
Ci0gICAgICAgICAgICBpZiAoU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqIHZhcmlhYmxlID0gc3Rh
Y2tUb1ZhcmlhYmxlLmdldChzdGFjaykpCi0gICAgICAgICAgICAgICAgc3NhLm5ld0RlZih2YXJp
YWJsZSwgYmxvY2ssIHZhbHVlLT5jaGlsZCgwKSk7CisgICAgICAgICAgICBpZiAoU1NBQ2FsY3Vs
YXRvcjo6VmFyaWFibGUqIGNhbGNWYXIgPSB2YXJpYWJsZVRvQ2FsY1Zhclt2YXJpYWJsZV0pCisg
ICAgICAgICAgICAgICAgc3NhLm5ld0RlZihjYWxjVmFyLCBibG9jaywgdmFsdWUtPmNoaWxkKDAp
KTsKICAgICAgICAgfQogICAgIH0KIAogICAgIC8vIERlY2lkZSB3aGVyZSBQaGlzIGFyZSB0byBi
ZSBpbnNlcnRlZC4gVGhpcyBjcmVhdGVzIHRoZW0gYnV0IGRvZXMgbm90IGluc2VydCB0aGVtLgog
ICAgIHNzYS5jb21wdXRlUGhpcygKLSAgICAgICAgWyZdIChTU0FDYWxjdWxhdG9yOjpWYXJpYWJs
ZSogdmFyaWFibGUsIEJhc2ljQmxvY2sqIGJsb2NrKSAtPiBWYWx1ZSogewotICAgICAgICAgICAg
U3RhY2tTbG90KiBzdGFjayA9IHZhcmlhYmxlVG9TdGFja1t2YXJpYWJsZS0+aW5kZXgoKV07Ci0g
ICAgICAgICAgICBWYWx1ZSogcGhpID0gcHJvYy5hZGQ8VmFsdWU+KFBoaSwgc3RhY2tWYXJpYWJs
ZS5nZXQoc3RhY2spLCBibG9jay0+YXQoMCktPm9yaWdpbigpKTsKKyAgICAgICAgWyZdIChTU0FD
YWxjdWxhdG9yOjpWYXJpYWJsZSogY2FsY1ZhciwgQmFzaWNCbG9jayogYmxvY2spIC0+IFZhbHVl
KiB7CisgICAgICAgICAgICBWYXJpYWJsZSogdmFyaWFibGUgPSBjYWxjVmFyVG9WYXJpYWJsZVtj
YWxjVmFyLT5pbmRleCgpXTsKKyAgICAgICAgICAgIFZhbHVlKiBwaGkgPSBwcm9jLmFkZDxWYWx1
ZT4oUGhpLCB2YXJpYWJsZS0+dHlwZSgpLCBibG9jay0+YXQoMCktPm9yaWdpbigpKTsKICAgICAg
ICAgICAgIGlmICh2ZXJib3NlKSB7CiAgICAgICAgICAgICAgICAgZGF0YUxvZygKLSAgICAgICAg
ICAgICAgICAgICAgIkFkZGluZyBQaGkgZm9yICIsIHBvaW50ZXJEdW1wKHN0YWNrKSwgIiBhdCAi
LCAqYmxvY2ssICI6ICIsCisgICAgICAgICAgICAgICAgICAgICJBZGRpbmcgUGhpIGZvciAiLCBw
b2ludGVyRHVtcCh2YXJpYWJsZSksICIgYXQgIiwgKmJsb2NrLCAiOiAiLAogICAgICAgICAgICAg
ICAgICAgICBkZWVwRHVtcChwcm9jLCBwaGkpLCAiXG4iKTsKICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIHJldHVybiBwaGk7CkBAIC0yNDksMjQgKzE3OSwyNCBAQCBib29sIGZpeFNTQShQcm9j
ZWR1cmUmIHByb2MpCiAKICAgICAvLyBOb3cgcGVyZm9ybSB0aGUgY29udmVyc2lvbi4KICAgICBJ
bnNlcnRpb25TZXQgaW5zZXJ0aW9uU2V0KHByb2MpOwotICAgIEhhc2hNYXA8U3RhY2tTbG90Kiwg
VmFsdWUqPiBtYXBwaW5nOworICAgIEluZGV4TWFwPFZhcmlhYmxlLCBWYWx1ZSo+IG1hcHBpbmco
cHJvYy52YXJpYWJsZXMoKS5zaXplKCkpOwogICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiBw
cm9jLmJsb2Nrc0luUHJlT3JkZXIoKSkgewogICAgICAgICBtYXBwaW5nLmNsZWFyKCk7CiAKLSAg
ICAgICAgZm9yIChhdXRvJiBlbnRyeSA6IHN0YWNrVG9WYXJpYWJsZSkgewotICAgICAgICAgICAg
U3RhY2tTbG90KiBzdGFjayA9IGVudHJ5LmtleTsKLSAgICAgICAgICAgIFNTQUNhbGN1bGF0b3I6
OlZhcmlhYmxlKiB2YXJpYWJsZSA9IGVudHJ5LnZhbHVlOworICAgICAgICBmb3IgKHVuc2lnbmVk
IGluZGV4ID0gY2FsY1ZhclRvVmFyaWFibGUuc2l6ZSgpOyBpbmRleC0tOykgeworICAgICAgICAg
ICAgVmFyaWFibGUqIHZhcmlhYmxlID0gY2FsY1ZhclRvVmFyaWFibGVbaW5kZXhdOworICAgICAg
ICAgICAgU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqIGNhbGNWYXIgPSBzc2EudmFyaWFibGUoaW5k
ZXgpOwogCi0gICAgICAgICAgICBTU0FDYWxjdWxhdG9yOjpEZWYqIGRlZiA9IHNzYS5yZWFjaGlu
Z0RlZkF0SGVhZChibG9jaywgdmFyaWFibGUpOworICAgICAgICAgICAgU1NBQ2FsY3VsYXRvcjo6
RGVmKiBkZWYgPSBzc2EucmVhY2hpbmdEZWZBdEhlYWQoYmxvY2ssIGNhbGNWYXIpOwogICAgICAg
ICAgICAgaWYgKGRlZikKLSAgICAgICAgICAgICAgICBtYXBwaW5nLnNldChzdGFjaywgZGVmLT52
YWx1ZSgpKTsKKyAgICAgICAgICAgICAgICBtYXBwaW5nW3ZhcmlhYmxlXSA9IGRlZi0+dmFsdWUo
KTsKICAgICAgICAgfQogCiAgICAgICAgIGZvciAoU1NBQ2FsY3VsYXRvcjo6RGVmKiBwaGlEZWYg
OiBzc2EucGhpc0ZvckJsb2NrKGJsb2NrKSkgewotICAgICAgICAgICAgU3RhY2tTbG90KiBzdGFj
ayA9IHZhcmlhYmxlVG9TdGFja1twaGlEZWYtPnZhcmlhYmxlKCktPmluZGV4KCldOworICAgICAg
ICAgICAgVmFyaWFibGUqIHZhcmlhYmxlID0gY2FsY1ZhclRvVmFyaWFibGVbcGhpRGVmLT52YXJp
YWJsZSgpLT5pbmRleCgpXTsKIAogICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydFZhbHVl
KDAsIHBoaURlZi0+dmFsdWUoKSk7Ci0gICAgICAgICAgICBtYXBwaW5nLnNldChzdGFjaywgcGhp
RGVmLT52YWx1ZSgpKTsKKyAgICAgICAgICAgIG1hcHBpbmdbdmFyaWFibGVdID0gcGhpRGVmLT52
YWx1ZSgpOwogICAgICAgICB9CiAKICAgICAgICAgZm9yICh1bnNpZ25lZCB2YWx1ZUluZGV4ID0g
MDsgdmFsdWVJbmRleCA8IGJsb2NrLT5zaXplKCk7ICsrdmFsdWVJbmRleCkgewpAQCAtMjc0LDIz
ICsyMDQsMjUgQEAgYm9vbCBmaXhTU0EoUHJvY2VkdXJlJiBwcm9jKQogICAgICAgICAgICAgdmFs
dWUtPnBlcmZvcm1TdWJzdGl0dXRpb24oKTsKIAogICAgICAgICAgICAgc3dpdGNoICh2YWx1ZS0+
b3Bjb2RlKCkpIHsKLSAgICAgICAgICAgIGNhc2UgTG9hZDogewotICAgICAgICAgICAgICAgIGlm
IChTbG90QmFzZVZhbHVlKiBzbG90QmFzZSA9IHZhbHVlLT5jaGlsZCgwKS0+YXM8U2xvdEJhc2VW
YWx1ZT4oKSkgewotICAgICAgICAgICAgICAgICAgICBTdGFja1Nsb3QqIHN0YWNrID0gc2xvdEJh
c2UtPnNsb3QoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKFZhbHVlKiByZXBsYWNlbWVudCA9
IG1hcHBpbmcuZ2V0KHN0YWNrKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlLT5yZXBs
YWNlV2l0aElkZW50aXR5KHJlcGxhY2VtZW50KTsKKyAgICAgICAgICAgIGNhc2UgR2V0OiB7Cisg
ICAgICAgICAgICAgICAgVmFyaWFibGVWYWx1ZSogdmFyaWFibGVWYWx1ZSA9IHZhbHVlLT5hczxW
YXJpYWJsZVZhbHVlPigpOworICAgICAgICAgICAgICAgIFZhcmlhYmxlKiB2YXJpYWJsZSA9IHZh
cmlhYmxlVmFsdWUtPnZhcmlhYmxlKCk7CisKKyAgICAgICAgICAgICAgICBpZiAoVmFsdWUqIHJl
cGxhY2VtZW50ID0gbWFwcGluZ1t2YXJpYWJsZV0pCisgICAgICAgICAgICAgICAgICAgIHZhbHVl
LT5yZXBsYWNlV2l0aElkZW50aXR5KHJlcGxhY2VtZW50KTsKKyAgICAgICAgICAgICAgICBlbHNl
IHsKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUtPnJlcGxhY2VXaXRoSWRlbnRpdHkoCisgICAg
ICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0Qm90dG9tKHZhbHVlSW5kZXgs
IHZhbHVlKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgY2FzZSBTdG9yZTogewot
ICAgICAgICAgICAgICAgIGlmIChTbG90QmFzZVZhbHVlKiBzbG90QmFzZSA9IHZhbHVlLT5jaGls
ZCgxKS0+YXM8U2xvdEJhc2VWYWx1ZT4oKSkgewotICAgICAgICAgICAgICAgICAgICBTdGFja1Ns
b3QqIHN0YWNrID0gc2xvdEJhc2UtPnNsb3QoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHN0
YWNrVG9WYXJpYWJsZS5jb250YWlucyhzdGFjaykpIHsKLSAgICAgICAgICAgICAgICAgICAgICAg
IG1hcHBpbmcuc2V0KHN0YWNrLCB2YWx1ZS0+Y2hpbGQoMCkpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgdmFsdWUtPnJlcGxhY2VXaXRoTm9wKCk7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICBjYXNlIFNldDogeworICAgICAgICAgICAgICAg
IFZhcmlhYmxlVmFsdWUqIHZhcmlhYmxlVmFsdWUgPSB2YWx1ZS0+YXM8VmFyaWFibGVWYWx1ZT4o
KTsKKyAgICAgICAgICAgICAgICBWYXJpYWJsZSogdmFyaWFibGUgPSB2YXJpYWJsZVZhbHVlLT52
YXJpYWJsZSgpOworCisgICAgICAgICAgICAgICAgbWFwcGluZ1t2YXJpYWJsZV0gPSB2YWx1ZS0+
Y2hpbGQoMCk7CisgICAgICAgICAgICAgICAgdmFsdWUtPnJlcGxhY2VXaXRoTm9wKCk7CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAKQEAgLTMwNCwxNCArMjM2LDE0IEBA
IGJvb2wgZml4U1NBKFByb2NlZHVyZSYgcHJvYykKICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBz
dWNjZXNzb3JCbG9jayA6IGJsb2NrLT5zdWNjZXNzb3JCbG9ja3MoKSkgewogICAgICAgICAgICAg
Zm9yIChTU0FDYWxjdWxhdG9yOjpEZWYqIHBoaURlZiA6IHNzYS5waGlzRm9yQmxvY2soc3VjY2Vz
c29yQmxvY2spKSB7CiAgICAgICAgICAgICAgICAgVmFsdWUqIHBoaSA9IHBoaURlZi0+dmFsdWUo
KTsKLSAgICAgICAgICAgICAgICBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSogdmFyaWFibGUgPSBw
aGlEZWYtPnZhcmlhYmxlKCk7Ci0gICAgICAgICAgICAgICAgU3RhY2tTbG90KiBzdGFjayA9IHZh
cmlhYmxlVG9TdGFja1t2YXJpYWJsZS0+aW5kZXgoKV07CisgICAgICAgICAgICAgICAgU1NBQ2Fs
Y3VsYXRvcjo6VmFyaWFibGUqIGNhbGNWYXIgPSBwaGlEZWYtPnZhcmlhYmxlKCk7CisgICAgICAg
ICAgICAgICAgVmFyaWFibGUqIHZhcmlhYmxlID0gY2FsY1ZhclRvVmFyaWFibGVbY2FsY1Zhci0+
aW5kZXgoKV07CiAKLSAgICAgICAgICAgICAgICBWYWx1ZSogbWFwcGVkVmFsdWUgPSBtYXBwaW5n
LmdldChzdGFjayk7CisgICAgICAgICAgICAgICAgVmFsdWUqIG1hcHBlZFZhbHVlID0gbWFwcGlu
Z1t2YXJpYWJsZV07CiAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpIHsKICAgICAgICAgICAg
ICAgICAgICAgZGF0YUxvZygKLSAgICAgICAgICAgICAgICAgICAgICAgICJNYXBwZWQgdmFsdWUg
Zm9yICIsICpzdGFjaywgIiB3aXRoIHN1Y2Nlc3NvciBQaGkgIiwgKnBoaSwgIiBhdCBlbmQgb2Yg
IiwKLSAgICAgICAgICAgICAgICAgICAgICAgICpibG9jaywgIjogIiwgcG9pbnRlckR1bXAobWFw
cGVkVmFsdWUpLCAiXG4iKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICJNYXBwZWQgdmFsdWUg
Zm9yICIsICp2YXJpYWJsZSwgIiB3aXRoIHN1Y2Nlc3NvciBQaGkgIiwgKnBoaSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgICIgYXQgZW5kIG9mICIsICpibG9jaywgIjogIiwgcG9pbnRlckR1bXAo
bWFwcGVkVmFsdWUpLCAiXG4iKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICAgICAgaWYgKCFtYXBwZWRWYWx1ZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM0ZpeFNTQS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM0ZpeFNTQS5oCShyZXZpc2lvbiAxOTU5NzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNGaXhTU0EuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsOCArMzYsOCBAQCBuYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKIAogY2xhc3MgUHJvY2VkdXJlOwogCi0vLyBUdXJucyBh
bGwgbWVudGlvbnMgb2YgdGhlIGdpdmVuIHZhbHVlcyBpbnRvIGFjY2Vzc2VzIHRvIGFub255bW91
cyBzdGFjayBzbG90cy4gVGhpcyBpcyBtZWFudAotLy8gdG8gYmUgdXNlZCBmcm9tIHBoYXNlcyB0
aGF0IGRvbid0IGxpa2UgU1NBIGZvciB3aGF0ZXZlciByZWFzb24uCisvLyBUdXJucyBhbGwgbWVu
dGlvbnMgb2YgdGhlIGdpdmVuIHZhbHVlcyBpbnRvIGFjY2Vzc2VzIHRvIHZhcmlhYmxlcy4gVGhp
cyBpcyBtZWFudCB0byBiZSB1c2VkCisvLyBmcm9tIHBoYXNlcyB0aGF0IGRvbid0IGxpa2UgU1NB
IGZvciB3aGF0ZXZlciByZWFzb24uCiB2b2lkIGRlbW90ZVZhbHVlcyhQcm9jZWR1cmUmLCBjb25z
dCBJbmRleFNldDxWYWx1ZT4mKTsKIAogLy8gVGhpcyBmaXhlcyBTU0EgZm9yIHlvdS4gVXNlIHRo
aXMgYWZ0ZXIgeW91IGhhdmUgZG9uZSBkZW1vdGVWYWx1ZXMoKSBhbmQgeW91IGhhdmUgcGVyZm9y
bWVkCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNJbmRleE1hcC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0luZGV4TWFwLmgJKHJldmlzaW9uIDE5
NTk3MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0luZGV4TWFwLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQ5LDYgKzQ5LDExIEBAIHB1YmxpYzoKICAgICAgICAgbV92ZWN0b3IuZmlsbChW
YWx1ZSgpLCBzaXplKTsKICAgICB9CiAKKyAgICB2b2lkIGNsZWFyKCkKKyAgICB7CisgICAgICAg
IG1fdmVjdG9yLmZpbGwoVmFsdWUoKSwgbV92ZWN0b3Iuc2l6ZSgpKTsKKyAgICB9CisKICAgICBz
aXplX3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmVjdG9yLnNpemUoKTsgfQogCiAgICAgVmFs
dWUmIG9wZXJhdG9yW10oc2l6ZV90IGluZGV4KQpAQCAtNzEsMTEgKzc2LDYgQEAgcHVibGljOgog
ICAgICAgICByZXR1cm4gbV92ZWN0b3Jba2V5LT5pbmRleCgpXTsKICAgICB9CiAKLSAgICB2b2lk
IGNsZWFyKCkKLSAgICB7Ci0gICAgICAgIG1fdmVjdG9yLmNsZWFyKCk7Ci0gICAgfQotICAgIAog
cHJpdmF0ZToKICAgICBWZWN0b3I8VmFsdWU+IG1fdmVjdG9yOwogfTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0luZGV4U2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzSW5kZXhTZXQuaAkocmV2aXNpb24gMTk1OTcwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzSW5kZXhTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtNjksNiArNjks
MTYgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gbV9zZXQuZ2V0KHZhbHVlLT5pbmRleCgpKTsK
ICAgICB9CiAKKyAgICBzaXplX3Qgc2l6ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4g
bV9zZXQuYml0Q291bnQoKTsKKyAgICB9CisKKyAgICBib29sIGlzRW1wdHkoKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuICFzaXplKCk7CisgICAgfQorCiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgQ29sbGVjdGlvblR5cGU+CiAgICAgY2xhc3MgSXRlcmFibGUgewogICAgIHB1YmxpYzoKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCShyZXZpc2lvbiAx
OTU5NzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNMb3dlclRvQWlyLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTMsNiArNTMsOCBAQAogI2luY2x1ZGUgIkIzVXBzaWxvblZhbHVlLmgi
CiAjaW5jbHVkZSAiQjNVc2VDb3VudHMuaCIKICNpbmNsdWRlICJCM1ZhbHVlSW5saW5lcy5oIgor
I2luY2x1ZGUgIkIzVmFyaWFibGUuaCIKKyNpbmNsdWRlICJCM1ZhcmlhYmxlVmFsdWUuaCIKICNp
bmNsdWRlIDx3dGYvTGlzdER1bXAuaD4KIAogI2lmIENPTVBJTEVSKEdDQykgJiYgQVNTRVJUX0RJ
U0FCTEVECkBAIC0xMDIsNiArMTA0LDggQEAgcHVibGljOgogCiAgICAgICAgIGZvciAoQjM6OlN0
YWNrU2xvdCogc3RhY2sgOiBtX3Byb2NlZHVyZS5zdGFja1Nsb3RzKCkpCiAgICAgICAgICAgICBt
X3N0YWNrVG9TdGFjay5hZGQoc3RhY2ssIG1fY29kZS5hZGRTdGFja1Nsb3Qoc3RhY2spKTsKKyAg
ICAgICAgZm9yIChWYXJpYWJsZSogdmFyaWFibGUgOiBtX3Byb2NlZHVyZS52YXJpYWJsZXMoKSkK
KyAgICAgICAgICAgIG1fdmFyaWFibGVUb1RtcC5hZGQodmFyaWFibGUsIG1fY29kZS5uZXdUbXAo
QXJnOjp0eXBlRm9yQjNUeXBlKHZhcmlhYmxlLT50eXBlKCkpKSk7CiAKICAgICAgICAgLy8gRmln
dXJlIG91dCB3aGljaCBibG9ja3MgYXJlIG5vdCByYXJlLgogICAgICAgICBtX2Zhc3RXb3JrbGlz
dC5wdXNoKG1fcHJvY2VkdXJlWzBdKTsKQEAgLTIyMjUsNiArMjIyOSwyMSBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKKyAgICAgICAgY2FzZSBTZXQ6IHsKKyAg
ICAgICAgICAgIFZhbHVlKiB2YWx1ZSA9IG1fdmFsdWUtPmNoaWxkKDApOworICAgICAgICAgICAg
YXBwZW5kKAorICAgICAgICAgICAgICAgIHJlbGF4ZWRNb3ZlRm9yVHlwZSh2YWx1ZS0+dHlwZSgp
KSwgaW1tT3JUbXAodmFsdWUpLAorICAgICAgICAgICAgICAgIG1fdmFyaWFibGVUb1RtcC5nZXQo
bV92YWx1ZS0+YXM8VmFyaWFibGVWYWx1ZT4oKS0+dmFyaWFibGUoKSkpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgY2FzZSBHZXQ6IHsKKyAgICAgICAgICAgIGFw
cGVuZCgKKyAgICAgICAgICAgICAgICByZWxheGVkTW92ZUZvclR5cGUobV92YWx1ZS0+dHlwZSgp
KSwKKyAgICAgICAgICAgICAgICBtX3ZhcmlhYmxlVG9UbXAuZ2V0KG1fdmFsdWUtPmFzPFZhcmlh
YmxlVmFsdWU+KCktPnZhcmlhYmxlKCkpLCB0bXAobV92YWx1ZSkpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisKICAgICAgICAgY2FzZSBCcmFuY2g6IHsKICAgICAgICAgICAgIG1f
aW5zdHMubGFzdCgpLmFwcGVuZChjcmVhdGVCcmFuY2gobV92YWx1ZS0+Y2hpbGQoMCkpKTsKICAg
ICAgICAgICAgIHJldHVybjsKQEAgLTIzMTYsNiArMjMzNSw3IEBAIHByaXZhdGU6CiAgICAgSW5k
ZXhNYXA8VmFsdWUsIFRtcD4gbV9waGlUb1RtcDsgLy8gRWFjaCBQaGkgZ2V0cyBpdHMgb3duIFRt
cC4KICAgICBJbmRleE1hcDxCMzo6QmFzaWNCbG9jaywgQWlyOjpCYXNpY0Jsb2NrKj4gbV9ibG9j
a1RvQmxvY2s7CiAgICAgSGFzaE1hcDxCMzo6U3RhY2tTbG90KiwgQWlyOjpTdGFja1Nsb3QqPiBt
X3N0YWNrVG9TdGFjazsKKyAgICBIYXNoTWFwPFZhcmlhYmxlKiwgVG1wPiBtX3ZhcmlhYmxlVG9U
bXA7CiAKICAgICBVc2VDb3VudHMgbV91c2VDb3VudHM7CiAgICAgUGhpQ2hpbGRyZW4gbV9waGlD
aGlsZHJlbjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM01lbW9yeVZhbHVlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTWVtb3J5VmFsdWUuaAko
cmV2aXNpb24gMTk1OTcwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzTWVtb3J5VmFs
dWUuaAkod29ya2luZyBjb3B5KQpAQCAtNzUsMTAgKzc1LDggQEAgcHJpdmF0ZToKIAogICAgIC8v
IFVzZSB0aGlzIGZvcm0gZm9yIExvYWQgKGJ1dCBub3QgTG9hZDhaLCBMb2FkOFMsIG9yIGFueSBv
ZiB0aGUgTG9hZHMgdGhhdCBoYXZlIGEgc3VmZml4IHRoYXQKICAgICAvLyBkZXNjcmliZXMgdGhl
IHJldHVybmVkIHR5cGUpLgotICAgIE1lbW9yeVZhbHVlKAotICAgICAgICB1bnNpZ25lZCBpbmRl
eCwgT3Bjb2RlIG9wY29kZSwgVHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogcG9pbnRl
ciwKLSAgICAgICAgaW50MzJfdCBvZmZzZXQgPSAwKQotICAgICAgICA6IFZhbHVlKGluZGV4LCBD
aGVja2VkT3Bjb2RlLCBvcGNvZGUsIHR5cGUsIG9yaWdpbiwgcG9pbnRlcikKKyAgICBNZW1vcnlW
YWx1ZShPcGNvZGUgb3Bjb2RlLCBUeXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBwb2lu
dGVyLCBpbnQzMl90IG9mZnNldCA9IDApCisgICAgICAgIDogVmFsdWUoQ2hlY2tlZE9wY29kZSwg
b3Bjb2RlLCB0eXBlLCBvcmlnaW4sIHBvaW50ZXIpCiAgICAgICAgICwgbV9vZmZzZXQob2Zmc2V0
KQogICAgICAgICAsIG1fcmFuZ2UoSGVhcFJhbmdlOjp0b3AoKSkKICAgICB7CkBAIC0xMDQsMTYg
KzEwMiwxNCBAQCBwcml2YXRlOgogICAgIH0KIAogICAgIC8vIFVzZSB0aGlzIGZvcm0gZm9yIGxv
YWRzIHdoZXJlIHRoZSByZXR1cm4gdHlwZSBpcyBpbXBsaWVkLgotICAgIE1lbW9yeVZhbHVlKHVu
c2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogcG9pbnRl
ciwgaW50MzJfdCBvZmZzZXQgPSAwKQotICAgICAgICA6IE1lbW9yeVZhbHVlKGluZGV4LCBvcGNv
ZGUsIEludDMyLCBvcmlnaW4sIHBvaW50ZXIsIG9mZnNldCkKKyAgICBNZW1vcnlWYWx1ZShPcGNv
ZGUgb3Bjb2RlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogcG9pbnRlciwgaW50MzJfdCBvZmZzZXQg
PSAwKQorICAgICAgICA6IE1lbW9yeVZhbHVlKG9wY29kZSwgSW50MzIsIG9yaWdpbiwgcG9pbnRl
ciwgb2Zmc2V0KQogICAgIHsKICAgICB9CiAKICAgICAvLyBVc2UgdGhpcyBmb3JtIGZvciBzdG9y
ZXMuCi0gICAgTWVtb3J5VmFsdWUoCi0gICAgICAgIHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bj
b2RlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogdmFsdWUsIFZhbHVlKiBwb2ludGVyLAotICAgICAg
ICBpbnQzMl90IG9mZnNldCA9IDApCi0gICAgICAgIDogVmFsdWUoaW5kZXgsIENoZWNrZWRPcGNv
ZGUsIG9wY29kZSwgVm9pZCwgb3JpZ2luLCB2YWx1ZSwgcG9pbnRlcikKKyAgICBNZW1vcnlWYWx1
ZShPcGNvZGUgb3Bjb2RlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogdmFsdWUsIFZhbHVlKiBwb2lu
dGVyLCBpbnQzMl90IG9mZnNldCA9IDApCisgICAgICAgIDogVmFsdWUoQ2hlY2tlZE9wY29kZSwg
b3Bjb2RlLCBWb2lkLCBvcmlnaW4sIHZhbHVlLCBwb2ludGVyKQogICAgICAgICAsIG1fb2Zmc2V0
KG9mZnNldCkKICAgICAgICAgLCBtX3JhbmdlKEhlYXBSYW5nZTo6dG9wKCkpCiAgICAgewpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3Bjb2RlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcGNvZGUuY3BwCShyZXZpc2lvbiAxOTU5NzApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNPcGNvZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC05NSw2ICs5NSwxMiBAQCB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgT3Bj
CiAgICAgY2FzZSBDb25zdEZsb2F0OgogICAgICAgICBvdXQucHJpbnQoIkNvbnN0RmxvYXQiKTsK
ICAgICAgICAgcmV0dXJuOworICAgIGNhc2UgR2V0OgorICAgICAgICBvdXQucHJpbnQoIkdldCIp
OworICAgICAgICByZXR1cm47CisgICAgY2FzZSBTZXQ6CisgICAgICAgIG91dC5wcmludCgiU2V0
Iik7CisgICAgICAgIHJldHVybjsKICAgICBjYXNlIFNsb3RCYXNlOgogICAgICAgICBvdXQucHJp
bnQoIlNsb3RCYXNlIik7CiAgICAgICAgIHJldHVybjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM09wY29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM09wY29kZS5oCShyZXZpc2lvbiAxOTU5NzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNPcGNvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDgsOSArNDgsMTQgQEAgZW51bSBPcGNv
ZGUgOiBpbnQxNl90IHsKICAgICBDb25zdERvdWJsZSwKICAgICBDb25zdEZsb2F0LAogCi0gICAg
Ly8gVGhlIG1hZ2ljYWwgc3RhY2sgc2xvdC4gVGhpcyBpcyB2aWV3ZWQgYXMgZXhlY3V0aW5nIGF0
IHRoZSB0b3Agb2YgdGhlIHByb2dyYW0gcmVnYXJkbGVzcyBvZgotICAgIC8vIHdoZXJlIGluIGNv
bnRyb2wgZmxvdyB5b3UgcHV0IGl0LiBFYWNoIGluc3RhbmNlIG9mIGEgU3RhY2tTbG90IFZhbHVl
IGdldHMgYSBkaXNqb2ludCByYW5nZSBvZgotICAgIC8vIHN0YWNrIG1lbW9yeS4gVXNlIHRoZSBT
dGFja1Nsb3RWYWx1ZSBjbGFzcy4KKyAgICAvLyBCMyBzdXBwb3J0cyBub24tU1NBIHZhcmlhYmxl
cy4gVGhlc2UgYXJlIGFjY2Vzc2VkIHVzaW5nIEdldCBhbmQgU2V0IG9wY29kZXMuIFVzZSB0aGUK
KyAgICAvLyBWYXJpYWJsZVZhbHVlIGNsYXNzLiBJdCdzIGEgZ29vZCBpZGVhIHRvIHJ1biBmaXhT
U0EoKSB0byB0dXJuIHRoZXNlIGludG8gU1NBLiBUaGUKKyAgICAvLyBvcHRpbWl6ZXIgd2lsbCBk
byB0aGF0IGV2ZW50dWFsbHksIGJ1dCBpZiB5b3VyIGlucHV0IHRlbmRzIHRvIHVzZSB0aGVzZSBv
cGNvZGVzLCB5b3UKKyAgICAvLyBzaG91bGQgcnVuIGZpeFNTQSgpIGRpcmVjdGx5IGJlZm9yZSBs
YXVuY2hpbmcgdGhlIG9wdGltaXplci4KKyAgICBTZXQsCisgICAgR2V0LAorCisgICAgLy8gR2V0
cyB0aGUgYmFzZSBhZGRyZXNzIG9mIGEgU3RhY2tTbG90LgogICAgIFNsb3RCYXNlLAogCiAgICAg
Ly8gVGhlIG1hZ2ljYWwgYXJndW1lbnQgcmVnaXN0ZXIuIFRoaXMgaXMgdmlld2VkIGFzIGV4ZWN1
dGluZyBhdCB0aGUgdG9wIG9mIHRoZSBwcm9ncmFtCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNQYXRjaHBvaW50VmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1BhdGNocG9pbnRWYWx1ZS5jcHAJKHJldmlzaW9uIDE5NTk3MCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRWYWx1ZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ5LDggKzQ5LDggQEAgVmFsdWUqIFBhdGNocG9pbnRWYWx1ZTo6Y2xvbmVJbXBsKCkg
Y29ucwogICAgIHJldHVybiBuZXcgUGF0Y2hwb2ludFZhbHVlKCp0aGlzKTsKIH0KIAotUGF0Y2hw
b2ludFZhbHVlOjpQYXRjaHBvaW50VmFsdWUodW5zaWduZWQgaW5kZXgsIFR5cGUgdHlwZSwgT3Jp
Z2luIG9yaWdpbikKLSAgICA6IEJhc2UoaW5kZXgsIENoZWNrZWRPcGNvZGUsIFBhdGNocG9pbnQs
IHR5cGUsIG9yaWdpbikKK1BhdGNocG9pbnRWYWx1ZTo6UGF0Y2hwb2ludFZhbHVlKFR5cGUgdHlw
ZSwgT3JpZ2luIG9yaWdpbikKKyAgICA6IEJhc2UoQ2hlY2tlZE9wY29kZSwgUGF0Y2hwb2ludCwg
dHlwZSwgb3JpZ2luKQogICAgICwgZWZmZWN0cyhFZmZlY3RzOjpmb3JDYWxsKCkpCiAgICAgLCBy
ZXN1bHRDb25zdHJhaW50KHR5cGUgPT0gVm9pZCA/IFZhbHVlUmVwOjpXYXJtQW55IDogVmFsdWVS
ZXA6OlNvbWVSZWdpc3RlcikKIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Bh
dGNocG9pbnRWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1BhdGNocG9pbnRWYWx1ZS5oCShyZXZpc2lvbiAxOTU5NzApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNQYXRjaHBvaW50VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtNzAsNyArNzAs
NyBAQCBwcm90ZWN0ZWQ6CiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7CiAK
LSAgICBKU19FWFBPUlRfUFJJVkFURSBQYXRjaHBvaW50VmFsdWUodW5zaWduZWQgaW5kZXgsIFR5
cGUsIE9yaWdpbik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgUGF0Y2hwb2ludFZhbHVlKFR5cGUs
IE9yaWdpbik7CiB9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmNwcAkocmV2aXNpb24gMTk1OTcwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzgsNiArMzgsNyBAQAogI2luY2x1ZGUgIkIzT3BhcXVlQnlwcm9kdWN0cy5oIgogI2luY2x1ZGUg
IkIzU3RhY2tTbG90LmgiCiAjaW5jbHVkZSAiQjNWYWx1ZUlubGluZXMuaCIKKyNpbmNsdWRlICJC
M1ZhcmlhYmxlLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewogCkBAIC00Niw3
ICs0Nyw2IEBAIFByb2NlZHVyZTo6UHJvY2VkdXJlKCkKICAgICAsIG1fbGFzdFBoYXNlTmFtZSgi
aW5pdGlhbCIpCiAgICAgLCBtX2J5cHJvZHVjdHMoc3RkOjptYWtlX3VuaXF1ZTxPcGFxdWVCeXBy
b2R1Y3RzPigpKQogICAgICwgbV9jb2RlKG5ldyBBaXI6OkNvZGUoKnRoaXMpKQotICAgICwgbV92
YWx1ZXNDb2xsZWN0aW9uKCp0aGlzKQogewogfQogCkBAIC03MCw1MSArNzAsMjIgQEAgQmFzaWNC
bG9jayogUHJvY2VkdXJlOjphZGRCbG9jayhkb3VibGUgZgogICAgIHJldHVybiByZXN1bHQ7CiB9
CiAKLXZvaWQgUHJvY2VkdXJlOjpzZXRCbG9ja09yZGVySW1wbChWZWN0b3I8QmFzaWNCbG9jayo+
JiBibG9ja3MpCitTdGFja1Nsb3QqIFByb2NlZHVyZTo6YWRkU3RhY2tTbG90KHVuc2lnbmVkIGJ5
dGVTaXplKQogewotICAgIEluZGV4U2V0PEJhc2ljQmxvY2s+IGJsb2Nrc1NldDsKLSAgICBibG9j
a3NTZXQuYWRkQWxsKGJsb2Nrcyk7Ci0KLSAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogKnRo
aXMpIHsKLSAgICAgICAgaWYgKCFibG9ja3NTZXQuY29udGFpbnMoYmxvY2spKQotICAgICAgICAg
ICAgYmxvY2tzLmFwcGVuZChibG9jayk7Ci0gICAgfQotCi0gICAgLy8gUGxhY2UgYmxvY2tzIGlu
dG8gdGhpcydzIGJsb2NrIGxpc3QgYnkgZmlyc3QgbGVha2luZyBhbGwgb2YgdGhlIGJsb2NrcyBh
bmQgdGhlbiByZWFkb3B0aW5nCi0gICAgLy8gdGhlbS4KLSAgICBmb3IgKGF1dG8mIGVudHJ5IDog
bV9ibG9ja3MpCi0gICAgICAgIGVudHJ5LnJlbGVhc2UoKTsKLQotICAgIG1fYmxvY2tzLnJlc2l6
ZShibG9ja3Muc2l6ZSgpKTsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmxvY2tzLnNp
emUoKTsgKytpKSB7Ci0gICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gYmxvY2tzW2ldOwotICAg
ICAgICBibG9jay0+bV9pbmRleCA9IGk7Ci0gICAgICAgIG1fYmxvY2tzW2ldID0gc3RkOjp1bmlx
dWVfcHRyPEJhc2ljQmxvY2s+KGJsb2NrKTsKLSAgICB9Ci19Ci0KLVN0YWNrU2xvdCogUHJvY2Vk
dXJlOjphZGRTdGFja1Nsb3QodW5zaWduZWQgYnl0ZVNpemUsIFN0YWNrU2xvdEtpbmQga2luZCkK
LXsKLSAgICBzaXplX3QgaW5kZXggPSBhZGRTdGFja1Nsb3RJbmRleCgpOwotICAgIHN0ZDo6dW5p
cXVlX3B0cjxTdGFja1Nsb3Q+IHNsb3QobmV3IFN0YWNrU2xvdChpbmRleCwgYnl0ZVNpemUsIGtp
bmQpKTsKLSAgICBTdGFja1Nsb3QqIHJlc3VsdCA9IHNsb3QuZ2V0KCk7Ci0gICAgbV9zdGFja1Ns
b3RzW2luZGV4XSA9IFdURk1vdmUoc2xvdCk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1
cm4gbV9zdGFja1Nsb3RzLmFkZE5ldyhieXRlU2l6ZSk7CiB9CiAKLVN0YWNrU2xvdCogUHJvY2Vk
dXJlOjphZGRBbm9ueW1vdXNTdGFja1Nsb3QoVHlwZSB0eXBlKQorVmFyaWFibGUqIFByb2NlZHVy
ZTo6YWRkVmFyaWFibGUoVHlwZSB0eXBlKQogewotICAgIHJldHVybiBhZGRTdGFja1Nsb3Qoc2l6
ZW9mVHlwZSh0eXBlKSwgU3RhY2tTbG90S2luZDo6QW5vbnltb3VzKTsKKyAgICByZXR1cm4gbV92
YXJpYWJsZXMuYWRkTmV3KHR5cGUpOyAKIH0KIAogVmFsdWUqIFByb2NlZHVyZTo6Y2xvbmUoVmFs
dWUqIHZhbHVlKQogewogICAgIHN0ZDo6dW5pcXVlX3B0cjxWYWx1ZT4gY2xvbmUodmFsdWUtPmNs
b25lSW1wbCgpKTsKLSAgICBWYWx1ZSogcmVzdWx0ID0gY2xvbmUuZ2V0KCk7Ci0gICAgY2xvbmUt
Pm1faW5kZXggPSBhZGRWYWx1ZUluZGV4KCk7CisgICAgY2xvbmUtPm1faW5kZXggPSBVSU5UX01B
WDsKICAgICBjbG9uZS0+b3duZXIgPSBudWxscHRyOwotICAgIG1fdmFsdWVzW2Nsb25lLT5tX2lu
ZGV4XSA9IFdURk1vdmUoY2xvbmUpOwotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIG1f
dmFsdWVzLmFkZChXVEZNb3ZlKGNsb25lKSk7CiB9CiAKIFZhbHVlKiBQcm9jZWR1cmU6OmFkZElu
dENvbnN0YW50KE9yaWdpbiBvcmlnaW4sIFR5cGUgdHlwZSwgaW50NjRfdCB2YWx1ZSkKQEAgLTIw
OCw2ICsxNzksMTEgQEAgdm9pZCBQcm9jZWR1cmU6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgYwog
ICAgICAgICB9CiAgICAgICAgIGRhdGFMb2coIiAgICAiLCBkZWVwRHVtcCgqdGhpcywgdmFsdWUp
LCAiXG4iKTsKICAgICB9CisgICAgaWYgKHZhcmlhYmxlcygpLnNpemUoKSkgeworICAgICAgICBv
dXQucHJpbnQoIlZhcmlhYmxlczpcbiIpOworICAgICAgICBmb3IgKFZhcmlhYmxlKiB2YXJpYWJs
ZSA6IHZhcmlhYmxlcygpKQorICAgICAgICAgICAgb3V0LnByaW50KCIgICAgIiwgZGVlcER1bXAo
dmFyaWFibGUpLCAiXG4iKTsKKyAgICB9CiAgICAgaWYgKHN0YWNrU2xvdHMoKS5zaXplKCkpIHsK
ICAgICAgICAgb3V0LnByaW50KCJTdGFjayBzbG90czpcbiIpOwogICAgICAgICBmb3IgKFN0YWNr
U2xvdCogc2xvdCA6IHN0YWNrU2xvdHMoKSkKQEAgLTIyOSwxNyArMjA1LDE3IEBAIFZlY3RvcjxC
YXNpY0Jsb2NrKj4gUHJvY2VkdXJlOjpibG9ja3NJblAKIAogdm9pZCBQcm9jZWR1cmU6OmRlbGV0
ZVN0YWNrU2xvdChTdGFja1Nsb3QqIHN0YWNrU2xvdCkKIHsKLSAgICBSRUxFQVNFX0FTU0VSVCht
X3N0YWNrU2xvdHNbc3RhY2tTbG90LT5pbmRleCgpXS5nZXQoKSA9PSBzdGFja1Nsb3QpOwotICAg
IFJFTEVBU0VfQVNTRVJUKCFzdGFja1Nsb3QtPmlzTG9ja2VkKCkpOwotICAgIG1fc3RhY2tTbG90
SW5kZXhGcmVlTGlzdC5hcHBlbmQoc3RhY2tTbG90LT5pbmRleCgpKTsKLSAgICBtX3N0YWNrU2xv
dHNbc3RhY2tTbG90LT5pbmRleCgpXSA9IG51bGxwdHI7CisgICAgbV9zdGFja1Nsb3RzLnJlbW92
ZShzdGFja1Nsb3QpOworfQorCit2b2lkIFByb2NlZHVyZTo6ZGVsZXRlVmFyaWFibGUoVmFyaWFi
bGUqIHZhcmlhYmxlKQoreworICAgIG1fdmFyaWFibGVzLnJlbW92ZSh2YXJpYWJsZSk7CiB9CiAK
IHZvaWQgUHJvY2VkdXJlOjpkZWxldGVWYWx1ZShWYWx1ZSogdmFsdWUpCiB7Ci0gICAgUkVMRUFT
RV9BU1NFUlQobV92YWx1ZXNbdmFsdWUtPmluZGV4KCldLmdldCgpID09IHZhbHVlKTsKLSAgICBt
X3ZhbHVlSW5kZXhGcmVlTGlzdC5hcHBlbmQodmFsdWUtPmluZGV4KCkpOwotICAgIG1fdmFsdWVz
W3ZhbHVlLT5pbmRleCgpXSA9IG51bGxwdHI7CisgICAgbV92YWx1ZXMucmVtb3ZlKHZhbHVlKTsK
IH0KIAogdm9pZCBQcm9jZWR1cmU6OmRlbGV0ZU9ycGhhbnMoKQpAQCAtMzExLDI2ICsyODcsMzIg
QEAgY29uc3QgUmVnaXN0ZXJBdE9mZnNldExpc3QmIFByb2NlZHVyZTo6YwogICAgIHJldHVybiBj
b2RlKCkuY2FsbGVlU2F2ZVJlZ2lzdGVycygpOwogfQogCi1zaXplX3QgUHJvY2VkdXJlOjphZGRT
dGFja1Nsb3RJbmRleCgpCitWYWx1ZSogUHJvY2VkdXJlOjphZGRWYWx1ZUltcGwoVmFsdWUqIHZh
bHVlKQogewotICAgIGlmIChtX3N0YWNrU2xvdEluZGV4RnJlZUxpc3QuaXNFbXB0eSgpKSB7Ci0g
ICAgICAgIHNpemVfdCBpbmRleCA9IG1fc3RhY2tTbG90cy5zaXplKCk7Ci0gICAgICAgIG1fc3Rh
Y2tTbG90cy5hcHBlbmQobnVsbHB0cik7Ci0gICAgICAgIHJldHVybiBpbmRleDsKLSAgICB9Ci0g
ICAgCi0gICAgcmV0dXJuIG1fc3RhY2tTbG90SW5kZXhGcmVlTGlzdC50YWtlTGFzdCgpOworICAg
IHJldHVybiBtX3ZhbHVlcy5hZGQoc3RkOjp1bmlxdWVfcHRyPFZhbHVlPih2YWx1ZSkpOwogfQog
Ci1zaXplX3QgUHJvY2VkdXJlOjphZGRWYWx1ZUluZGV4KCkKK3ZvaWQgUHJvY2VkdXJlOjpzZXRC
bG9ja09yZGVySW1wbChWZWN0b3I8QmFzaWNCbG9jayo+JiBibG9ja3MpCiB7Ci0gICAgaWYgKG1f
dmFsdWVJbmRleEZyZWVMaXN0LmlzRW1wdHkoKSkgewotICAgICAgICBzaXplX3QgaW5kZXggPSBt
X3ZhbHVlcy5zaXplKCk7Ci0gICAgICAgIG1fdmFsdWVzLmFwcGVuZChudWxscHRyKTsKLSAgICAg
ICAgcmV0dXJuIGluZGV4OworICAgIEluZGV4U2V0PEJhc2ljQmxvY2s+IGJsb2Nrc1NldDsKKyAg
ICBibG9ja3NTZXQuYWRkQWxsKGJsb2Nrcyk7CisKKyAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2Nr
IDogKnRoaXMpIHsKKyAgICAgICAgaWYgKCFibG9ja3NTZXQuY29udGFpbnMoYmxvY2spKQorICAg
ICAgICAgICAgYmxvY2tzLmFwcGVuZChibG9jayk7CisgICAgfQorCisgICAgLy8gUGxhY2UgYmxv
Y2tzIGludG8gdGhpcydzIGJsb2NrIGxpc3QgYnkgZmlyc3QgbGVha2luZyBhbGwgb2YgdGhlIGJs
b2NrcyBhbmQgdGhlbiByZWFkb3B0aW5nCisgICAgLy8gdGhlbS4KKyAgICBmb3IgKGF1dG8mIGVu
dHJ5IDogbV9ibG9ja3MpCisgICAgICAgIGVudHJ5LnJlbGVhc2UoKTsKKworICAgIG1fYmxvY2tz
LnJlc2l6ZShibG9ja3Muc2l6ZSgpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYmxv
Y2tzLnNpemUoKTsgKytpKSB7CisgICAgICAgIEJhc2ljQmxvY2sqIGJsb2NrID0gYmxvY2tzW2ld
OworICAgICAgICBibG9jay0+bV9pbmRleCA9IGk7CisgICAgICAgIG1fYmxvY2tzW2ldID0gc3Rk
Ojp1bmlxdWVfcHRyPEJhc2ljQmxvY2s+KGJsb2NrKTsKICAgICB9Ci0gICAgCi0gICAgcmV0dXJu
IG1fdmFsdWVJbmRleEZyZWVMaXN0LnRha2VMYXN0KCk7CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpCMwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmgJKHJldmlz
aW9uIDE5NTk3MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBACiAjaW5jbHVkZSAiQjNPcGFxdWVCeXByb2R1
Y3RzLmgiCiAjaW5jbHVkZSAiQjNPcmlnaW4uaCIKICNpbmNsdWRlICJCM1BDVG9PcmlnaW5NYXAu
aCIKLSNpbmNsdWRlICJCM1N0YWNrU2xvdEtpbmQuaCIKKyNpbmNsdWRlICJCM1NwYXJzZUNvbGxl
Y3Rpb24uaCIKICNpbmNsdWRlICJCM1R5cGUuaCIKICNpbmNsdWRlICJCM1ZhbHVlS2V5LmgiCiAj
aW5jbHVkZSAiUHVyZU5hTi5oIgpAQCAtNTMsNiArNTMsNyBAQCBjbGFzcyBDRkc7CiBjbGFzcyBE
b21pbmF0b3JzOwogY2xhc3MgU3RhY2tTbG90OwogY2xhc3MgVmFsdWU7CitjbGFzcyBWYXJpYWJs
ZTsKIAogbmFtZXNwYWNlIEFpciB7IGNsYXNzIENvZGU7IH0KIApAQCAtOTQsOCArOTUsOCBAQCBw
dWJsaWM6CiAgICAgICAgIHNldEJsb2NrT3JkZXJJbXBsKGJsb2Nrcyk7CiAgICAgfQogCi0gICAg
SlNfRVhQT1JUX1BSSVZBVEUgU3RhY2tTbG90KiBhZGRTdGFja1Nsb3QodW5zaWduZWQgYnl0ZVNp
emUsIFN0YWNrU2xvdEtpbmQpOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIFN0YWNrU2xvdCogYWRk
QW5vbnltb3VzU3RhY2tTbG90KFR5cGUpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIFN0YWNrU2xv
dCogYWRkU3RhY2tTbG90KHVuc2lnbmVkIGJ5dGVTaXplKTsKKyAgICBKU19FWFBPUlRfUFJJVkFU
RSBWYXJpYWJsZSogYWRkVmFyaWFibGUoVHlwZSk7CiAgICAgCiAgICAgdGVtcGxhdGU8dHlwZW5h
bWUgVmFsdWVUeXBlLCB0eXBlbmFtZS4uLiBBcmd1bWVudHM+CiAgICAgVmFsdWVUeXBlKiBhZGQo
QXJndW1lbnRzLi4uKTsKQEAgLTE3OCwxNDMgKzE3OSwyMiBAQCBwdWJsaWM6CiAgICAgVmVjdG9y
PEJhc2ljQmxvY2sqPiBibG9ja3NJblByZU9yZGVyKCk7CiAgICAgVmVjdG9yPEJhc2ljQmxvY2sq
PiBibG9ja3NJblBvc3RPcmRlcigpOwogCi0gICAgY2xhc3MgU3RhY2tTbG90c0NvbGxlY3Rpb24g
ewotICAgIHB1YmxpYzoKLSAgICAgICAgU3RhY2tTbG90c0NvbGxlY3Rpb24oY29uc3QgUHJvY2Vk
dXJlJiBwcm9jKQotICAgICAgICAgICAgOiBtX3Byb2MocHJvYykKLSAgICAgICAgewotICAgICAg
ICB9Ci0KLSAgICAgICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcHJvYy5tX3N0
YWNrU2xvdHMuc2l6ZSgpOyB9Ci0gICAgICAgIFN0YWNrU2xvdCogYXQodW5zaWduZWQgaW5kZXgp
IGNvbnN0IHsgcmV0dXJuIG1fcHJvYy5tX3N0YWNrU2xvdHNbaW5kZXhdLmdldCgpOyB9Ci0gICAg
ICAgIFN0YWNrU2xvdCogb3BlcmF0b3JbXSh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4g
YXQoaW5kZXgpOyB9Ci0KLSAgICAgICAgY2xhc3MgaXRlcmF0b3IgewotICAgICAgICBwdWJsaWM6
Ci0gICAgICAgICAgICBpdGVyYXRvcigpCi0gICAgICAgICAgICAgICAgOiBtX2NvbGxlY3Rpb24o
bnVsbHB0cikKLSAgICAgICAgICAgICAgICAsIG1faW5kZXgoMCkKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgaXRlcmF0b3IoY29uc3QgU3RhY2tTbG90c0NvbGxl
Y3Rpb24mIGNvbGxlY3Rpb24sIHVuc2lnbmVkIGluZGV4KQotICAgICAgICAgICAgICAgIDogbV9j
b2xsZWN0aW9uKCZjb2xsZWN0aW9uKQotICAgICAgICAgICAgICAgICwgbV9pbmRleChmaW5kTmV4
dChpbmRleCkpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIFN0
YWNrU2xvdCogb3BlcmF0b3IqKCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1
cm4gbV9jb2xsZWN0aW9uLT5hdChtX2luZGV4KTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgaXRlcmF0b3ImIG9wZXJhdG9yKysoKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IG1faW5kZXggPSBmaW5kTmV4dChtX2luZGV4ICsgMSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
ICp0aGlzOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBib29sIG9wZXJhdG9yPT0oY29u
c3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IHJldHVybiBtX2luZGV4ID09IG90aGVyLm1faW5kZXg7Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0Ci0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOwotICAg
ICAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGU6Ci0gICAgICAgICAgICB1bnNpZ25lZCBmaW5k
TmV4dCh1bnNpZ25lZCBpbmRleCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB3aGls
ZSAoaW5kZXggPCBtX2NvbGxlY3Rpb24tPnNpemUoKSAmJiAhbV9jb2xsZWN0aW9uLT5hdChpbmRl
eCkpCi0gICAgICAgICAgICAgICAgICAgIGluZGV4Kys7Ci0gICAgICAgICAgICAgICAgcmV0dXJu
IGluZGV4OwotICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgICAgICBjb25zdCBT
dGFja1Nsb3RzQ29sbGVjdGlvbiogbV9jb2xsZWN0aW9uOwotICAgICAgICAgICAgdW5zaWduZWQg
bV9pbmRleDsKLSAgICAgICAgfTsKLQotICAgICAgICBpdGVyYXRvciBiZWdpbigpIGNvbnN0IHsg
cmV0dXJuIGl0ZXJhdG9yKCp0aGlzLCAwKTsgfQotICAgICAgICBpdGVyYXRvciBlbmQoKSBjb25z
dCB7IHJldHVybiBpdGVyYXRvcigqdGhpcywgc2l6ZSgpKTsgfQotCi0gICAgcHJpdmF0ZToKLSAg
ICAgICAgY29uc3QgUHJvY2VkdXJlJiBtX3Byb2M7Ci0gICAgfTsKLQotICAgIFN0YWNrU2xvdHND
b2xsZWN0aW9uIHN0YWNrU2xvdHMoKSBjb25zdCB7IHJldHVybiBTdGFja1Nsb3RzQ29sbGVjdGlv
bigqdGhpcyk7IH0KKyAgICBTcGFyc2VDb2xsZWN0aW9uPFN0YWNrU2xvdD4mIHN0YWNrU2xvdHMo
KSB7IHJldHVybiBtX3N0YWNrU2xvdHM7IH0KKyAgICBjb25zdCBTcGFyc2VDb2xsZWN0aW9uPFN0
YWNrU2xvdD4mIHN0YWNrU2xvdHMoKSBjb25zdCB7IHJldHVybiBtX3N0YWNrU2xvdHM7IH0KIAor
ICAgIC8vIFNob3J0IGZvciBzdGFja1Nsb3RzKCkucmVtb3ZlKCkuIEl0J3MgYmV0dGVyIHRvIGNh
bGwgdGhpcyBtZXRob2Qgc2luY2UgaXQncyBvdXQgb2YgbGluZS4KICAgICB2b2lkIGRlbGV0ZVN0
YWNrU2xvdChTdGFja1Nsb3QqKTsKLSAgICAKLSAgICBjbGFzcyBWYWx1ZXNDb2xsZWN0aW9uIHsK
LSAgICBwdWJsaWM6Ci0gICAgICAgIFZhbHVlc0NvbGxlY3Rpb24oY29uc3QgUHJvY2VkdXJlJiBw
cm9jZWR1cmUpCi0gICAgICAgICAgICA6IG1fcHJvY2VkdXJlKHByb2NlZHVyZSkKLSAgICAgICAg
ewotICAgICAgICB9CiAKLSAgICAgICAgY2xhc3MgaXRlcmF0b3IgewotICAgICAgICBwdWJsaWM6
Ci0gICAgICAgICAgICBpdGVyYXRvcigpCi0gICAgICAgICAgICAgICAgOiBtX3Byb2NlZHVyZShu
dWxscHRyKQotICAgICAgICAgICAgICAgICwgbV9pbmRleCgwKQotICAgICAgICAgICAgewotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICBpdGVyYXRvcihjb25zdCBQcm9jZWR1cmUmIHByb2Nl
ZHVyZSwgdW5zaWduZWQgaW5kZXgpCi0gICAgICAgICAgICAgICAgOiBtX3Byb2NlZHVyZSgmcHJv
Y2VkdXJlKQotICAgICAgICAgICAgICAgICwgbV9pbmRleChmaW5kTmV4dChpbmRleCkpCi0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIFZhbHVlKiBvcGVyYXRvcioo
KSBjb25zdAotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBtX3Byb2NlZHVy
ZS0+bV92YWx1ZXNbbV9pbmRleF0uZ2V0KCk7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAg
IGl0ZXJhdG9yJiBvcGVyYXRvcisrKCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBt
X2luZGV4ID0gZmluZE5leHQobV9pbmRleCArIDEpOwotICAgICAgICAgICAgICAgIHJldHVybiAq
dGhpczsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0
IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBB
U1NFUlQobV9wcm9jZWR1cmUgPT0gb3RoZXIubV9wcm9jZWR1cmUpOwotICAgICAgICAgICAgICAg
IHJldHVybiBtX2luZGV4ID09IG90aGVyLm1faW5kZXg7Ci0gICAgICAgICAgICB9Ci0KLSAgICAg
ICAgICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0Ci0gICAg
ICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOwotICAg
ICAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGU6Ci0gICAgICAgICAgICB1bnNpZ25lZCBmaW5k
TmV4dCh1bnNpZ25lZCBpbmRleCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICB3aGls
ZSAoaW5kZXggPCBtX3Byb2NlZHVyZS0+bV92YWx1ZXMuc2l6ZSgpICYmICFtX3Byb2NlZHVyZS0+
bV92YWx1ZXNbaW5kZXhdKQotICAgICAgICAgICAgICAgICAgICBpbmRleCsrOwotICAgICAgICAg
ICAgICAgIHJldHVybiBpbmRleDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgY29uc3Qg
UHJvY2VkdXJlKiBtX3Byb2NlZHVyZTsKLSAgICAgICAgICAgIHVuc2lnbmVkIG1faW5kZXg7Ci0g
ICAgICAgIH07Ci0KLSAgICAgICAgaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBpdGVy
YXRvcihtX3Byb2NlZHVyZSwgMCk7IH0KLSAgICAgICAgaXRlcmF0b3IgZW5kKCkgY29uc3QgeyBy
ZXR1cm4gaXRlcmF0b3IobV9wcm9jZWR1cmUsIG1fcHJvY2VkdXJlLm1fdmFsdWVzLnNpemUoKSk7
IH0KLQotICAgICAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9wcm9jZWR1cmUu
bV92YWx1ZXMuc2l6ZSgpOyB9Ci0gICAgICAgIFZhbHVlKiBhdCh1bnNpZ25lZCBpbmRleCkgY29u
c3QgeyByZXR1cm4gbV9wcm9jZWR1cmUubV92YWx1ZXNbaW5kZXhdLmdldCgpOyB9Ci0gICAgICAg
IFZhbHVlKiBvcGVyYXRvcltdKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBhdChpbmRl
eCk7IH0KLSAgICAgICAgCi0gICAgcHJpdmF0ZToKLSAgICAgICAgY29uc3QgUHJvY2VkdXJlJiBt
X3Byb2NlZHVyZTsKLSAgICB9OworICAgIFNwYXJzZUNvbGxlY3Rpb248VmFyaWFibGU+JiB2YXJp
YWJsZXMoKSB7IHJldHVybiBtX3ZhcmlhYmxlczsgfQorICAgIGNvbnN0IFNwYXJzZUNvbGxlY3Rp
b248VmFyaWFibGU+JiB2YXJpYWJsZXMoKSBjb25zdCB7IHJldHVybiBtX3ZhcmlhYmxlczsgfQor
CisgICAgLy8gU2hvcnQgZm9yIHZhcmlhYmxlcygpLnJlbW92ZSgpLiBJdCdzIGJldHRlciB0byBj
YWxsIHRoaXMgbWV0aG9kIHNpbmNlIGl0J3Mgb3V0IG9mIGxpbmUuCisgICAgdm9pZCBkZWxldGVW
YXJpYWJsZShWYXJpYWJsZSopOwogCi0gICAgY29uc3QgVmFsdWVzQ29sbGVjdGlvbiYgdmFsdWVz
KCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXNDb2xsZWN0aW9uOyB9CisgICAgU3BhcnNlQ29sbGVj
dGlvbjxWYWx1ZT4mIHZhbHVlcygpIHsgcmV0dXJuIG1fdmFsdWVzOyB9CisgICAgY29uc3QgU3Bh
cnNlQ29sbGVjdGlvbjxWYWx1ZT4mIHZhbHVlcygpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWVzOyB9
CiAKKyAgICAvLyBTaG9ydCBmb3IgdmFsdWVzKCkucmVtb3ZlKCkuIEl0J3MgYmV0dGVyIHRvIGNh
bGwgdGhpcyBtZXRob2Qgc2luY2UgaXQncyBvdXQgb2YgbGluZS4KICAgICB2b2lkIGRlbGV0ZVZh
bHVlKFZhbHVlKik7CiAKICAgICAvLyBBIHZhbGlkIHByb2NlZHVyZSBjYW5ub3QgY29udGFpbiBh
bnkgb3JwaGFuIHZhbHVlcy4gQW4gb3JwaGFuIGlzIGEgdmFsdWUgdGhhdCBpcyBub3QgaW4KQEAg
LTM2NywxNyArMjQ3LDE0IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3Mg
QmxvY2tJbnNlcnRpb25TZXQ7Ci0gICAgCi0gICAgdm9pZCBzZXRCbG9ja09yZGVySW1wbChWZWN0
b3I8QmFzaWNCbG9jayo+Jik7CiAKLSAgICBzaXplX3QgYWRkU3RhY2tTbG90SW5kZXgoKTsKLSAg
ICBKU19FWFBPUlRfUFJJVkFURSBzaXplX3QgYWRkVmFsdWVJbmRleCgpOworICAgIEpTX0VYUE9S
VF9QUklWQVRFIFZhbHVlKiBhZGRWYWx1ZUltcGwoVmFsdWUqKTsKKyAgICB2b2lkIHNldEJsb2Nr
T3JkZXJJbXBsKFZlY3RvcjxCYXNpY0Jsb2NrKj4mKTsKIAotICAgIFZlY3RvcjxzdGQ6OnVuaXF1
ZV9wdHI8U3RhY2tTbG90Pj4gbV9zdGFja1Nsb3RzOworICAgIFNwYXJzZUNvbGxlY3Rpb248U3Rh
Y2tTbG90PiBtX3N0YWNrU2xvdHM7CisgICAgU3BhcnNlQ29sbGVjdGlvbjxWYXJpYWJsZT4gbV92
YXJpYWJsZXM7CiAgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxCYXNpY0Jsb2NrPj4gbV9ibG9j
a3M7Ci0gICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxWYWx1ZT4+IG1fdmFsdWVzOwotICAgIFZl
Y3RvcjxzaXplX3Q+IG1fc3RhY2tTbG90SW5kZXhGcmVlTGlzdDsKLSAgICBWZWN0b3I8c2l6ZV90
PiBtX3ZhbHVlSW5kZXhGcmVlTGlzdDsKKyAgICBTcGFyc2VDb2xsZWN0aW9uPFZhbHVlPiBtX3Zh
bHVlczsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q0ZHPiBtX2NmZzsKICAgICBzdGQ6OnVuaXF1ZV9w
dHI8RG9taW5hdG9ycz4gbV9kb21pbmF0b3JzOwogICAgIEhhc2hTZXQ8VmFsdWVLZXk+IG1fZmFz
dENvbnN0YW50czsKQEAgLTM4Niw3ICsyNjMsNiBAQCBwcml2YXRlOgogICAgIHN0ZDo6dW5pcXVl
X3B0cjxBaXI6OkNvZGU+IG1fY29kZTsKICAgICBSZWZQdHI8U2hhcmVkVGFzazx2b2lkKFByaW50
U3RyZWFtJiwgT3JpZ2luKT4+IG1fb3JpZ2luUHJpbnRlcjsKICAgICBjb25zdCB2b2lkKiBtX2Zy
b250ZW5kRGF0YTsKLSAgICBWYWx1ZXNDb2xsZWN0aW9uIG1fdmFsdWVzQ29sbGVjdGlvbjsKICAg
ICBQQ1RvT3JpZ2luTWFwIG1fcGNUb09yaWdpbk1hcDsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZUlubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmVJbmxpbmVzLmgJKHJldmlzaW9uIDE5NTk3MCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVyZUlubGluZXMuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzYsMTEgKzM2LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7
CiB0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KIFZh
bHVlVHlwZSogUHJvY2VkdXJlOjphZGQoQXJndW1lbnRzLi4uIGFyZ3VtZW50cykKIHsKLSAgICBz
aXplX3QgaW5kZXggPSBhZGRWYWx1ZUluZGV4KCk7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFZhbHVl
VHlwZT4gdmFsdWUobmV3IFZhbHVlVHlwZShpbmRleCwgYXJndW1lbnRzLi4uKSk7Ci0gICAgVmFs
dWVUeXBlKiByZXN1bHQgPSB2YWx1ZS5nZXQoKTsKLSAgICBtX3ZhbHVlc1tpbmRleF0gPSBXVEZN
b3ZlKHZhbHVlKTsKLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiBzdGF0aWNfY2FzdDxW
YWx1ZVR5cGUqPihhZGRWYWx1ZUltcGwobmV3IFZhbHVlVHlwZShhcmd1bWVudHMuLi4pKSk7CiB9
CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzUmVkdWNlU3RyZW5ndGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1JlZHVjZVN0cmVuZ3RoLmNwcAkocmV2aXNpb24gMTk1OTcwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzUmVkdWNlU3RyZW5ndGguY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00NSw2ICs0NSw4IEBACiAjaW5jbHVkZSAiQjNVcHNpbG9uVmFsdWUuaCIKICNpbmNsdWRlICJC
M1ZhbHVlS2V5SW5saW5lcy5oIgogI2luY2x1ZGUgIkIzVmFsdWVJbmxpbmVzLmgiCisjaW5jbHVk
ZSAiQjNWYXJpYWJsZS5oIgorI2luY2x1ZGUgIkIzVmFyaWFibGVWYWx1ZS5oIgogI2luY2x1ZGUg
PHd0Zi9HcmFwaE5vZGVXb3JrbGlzdC5oPgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CiAKQEAg
LTIyODMsMTMgKzIyODUsMTUgQEAgcHJpdmF0ZToKICAgICAgICAgVmVjdG9yPFVwc2lsb25WYWx1
ZSosIDY0PiB1cHNpbG9uczsKICAgICAgICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fcHJv
YykgewogICAgICAgICAgICAgZm9yIChWYWx1ZSogdmFsdWUgOiAqYmxvY2spIHsKLSAgICAgICAg
ICAgICAgICBFZmZlY3RzIGVmZmVjdHMgPSB2YWx1ZS0+ZWZmZWN0cygpOwotICAgICAgICAgICAg
ICAgIC8vIFdlIGRvbid0IGNhcmUgYWJvdXQgU1NBIEVmZmVjdHMsIHNpbmNlIHdlIG1vZGVsIHRo
ZW0gbW9yZSBhY2N1cmF0ZWx5IHRoYW4gdGhlCi0gICAgICAgICAgICAgICAgLy8gZWZmZWN0cygp
IG1ldGhvZCBkb2VzLgotICAgICAgICAgICAgICAgIGVmZmVjdHMud3JpdGVzU1NBU3RhdGUgPSBm
YWxzZTsKLSAgICAgICAgICAgICAgICBlZmZlY3RzLnJlYWRzU1NBU3RhdGUgPSBmYWxzZTsKKyAg
ICAgICAgICAgICAgICBFZmZlY3RzIGVmZmVjdHM7CisgICAgICAgICAgICAgICAgLy8gV2UgZG9u
J3QgY2FyZSBhYm91dCBlZmZlY3RzIG9mIFNTQSBvcGVyYXRpb25zLCBzaW5jZSB3ZSBtb2RlbCB0
aGVtIG1vcmUKKyAgICAgICAgICAgICAgICAvLyBhY2N1cmF0ZWx5IHRoYSB0aGUgZWZmZWN0cygp
IG1ldGhvZCBkb2VzLgorICAgICAgICAgICAgICAgIGlmICh2YWx1ZS0+b3Bjb2RlKCkgIT0gUGhp
ICYmIHZhbHVlLT5vcGNvZGUoKSAhPSBVcHNpbG9uKQorICAgICAgICAgICAgICAgICAgICBlZmZl
Y3RzID0gdmFsdWUtPmVmZmVjdHMoKTsKKyAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICBpZiAoZWZmZWN0cy5tdXN0RXhlY3V0ZSgpKQogICAgICAgICAgICAgICAgICAgICB3b3JrbGlz
dC5wdXNoKHZhbHVlKTsKKyAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAoVXBz
aWxvblZhbHVlKiB1cHNpbG9uID0gdmFsdWUtPmFzPFVwc2lsb25WYWx1ZT4oKSkKICAgICAgICAg
ICAgICAgICAgICAgdXBzaWxvbnMuYXBwZW5kKHVwc2lsb24pOwogICAgICAgICAgICAgfQpAQCAt
MjMxNCw3ICsyMzE4LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQogCi0gICAgICAgIEluZGV4U2V0PFN0YWNrU2xvdD4gbGl2ZVN0YWNrU2xvdHM7CisgICAg
ICAgIEluZGV4U2V0PFZhcmlhYmxlPiBsaXZlVmFyaWFibGVzOwogICAgICAgICAKICAgICAgICAg
Zm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IG1fcHJvYykgewogICAgICAgICAgICAgc2l6ZV90IHNv
dXJjZUluZGV4ID0gMDsKQEAgLTIzMjIsOCArMjMyNiw4IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICB3aGlsZSAoc291cmNlSW5kZXggPCBibG9jay0+c2l6ZSgpKSB7CiAgICAgICAgICAgICAgICAg
VmFsdWUqIHZhbHVlID0gYmxvY2stPmF0KHNvdXJjZUluZGV4KyspOwogICAgICAgICAgICAgICAg
IGlmICh3b3JrbGlzdC5zYXcodmFsdWUpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChTbG90
QmFzZVZhbHVlKiBzbG90QmFzZSA9IHZhbHVlLT5hczxTbG90QmFzZVZhbHVlPigpKQotICAgICAg
ICAgICAgICAgICAgICAgICAgbGl2ZVN0YWNrU2xvdHMuYWRkKHNsb3RCYXNlLT5zbG90KCkpOwor
ICAgICAgICAgICAgICAgICAgICBpZiAoVmFyaWFibGVWYWx1ZSogdmFyaWFibGVWYWx1ZSA9IHZh
bHVlLT5hczxWYXJpYWJsZVZhbHVlPigpKQorICAgICAgICAgICAgICAgICAgICAgICAgbGl2ZVZh
cmlhYmxlcy5hZGQodmFyaWFibGVWYWx1ZS0+dmFyaWFibGUoKSk7CiAgICAgICAgICAgICAgICAg
ICAgIGJsb2NrLT5hdCh0YXJnZXRJbmRleCsrKSA9IHZhbHVlOwogICAgICAgICAgICAgICAgIH0g
ZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIG1fcHJvYy5kZWxldGVWYWx1ZSh2YWx1ZSk7CkBA
IC0yMzM4LDEwICsyMzQyLDkgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGJsb2NrLT52YWx1ZXMo
KS5yZXNpemUodGFyZ2V0SW5kZXgpOwogICAgICAgICB9CiAKLSAgICAgICAgZm9yIChTdGFja1Ns
b3QqIHNsb3QgOiBtX3Byb2Muc3RhY2tTbG90cygpKSB7Ci0gICAgICAgICAgICBpZiAoc2xvdC0+
aXNMb2NrZWQoKSB8fCBsaXZlU3RhY2tTbG90cy5jb250YWlucyhzbG90KSkKLSAgICAgICAgICAg
ICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIG1fcHJvYy5kZWxldGVTdGFja1Nsb3Qoc2xvdCk7
CisgICAgICAgIGZvciAoVmFyaWFibGUqIHZhcmlhYmxlIDogbV9wcm9jLnZhcmlhYmxlcygpKSB7
CisgICAgICAgICAgICBpZiAoIWxpdmVWYXJpYWJsZXMuY29udGFpbnModmFyaWFibGUpKQorICAg
ICAgICAgICAgICAgIG1fcHJvYy5kZWxldGVWYXJpYWJsZSh2YXJpYWJsZSk7CiAgICAgICAgIH0K
ICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Nsb3RCYXNlVmFsdWUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTbG90QmFzZVZhbHVl
LmgJKHJldmlzaW9uIDE5NTk3MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Nsb3RC
YXNlVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtNTAsOCArNTAsOCBAQCBwcm90ZWN0ZWQ6CiBw
cml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7CiAKLSAgICBTbG90QmFzZVZhbHVl
KHVuc2lnbmVkIGluZGV4LCBPcmlnaW4gb3JpZ2luLCBTdGFja1Nsb3QqIHNsb3QpCi0gICAgICAg
IDogVmFsdWUoaW5kZXgsIENoZWNrZWRPcGNvZGUsIFNsb3RCYXNlLCBwb2ludGVyVHlwZSgpLCBv
cmlnaW4pCisgICAgU2xvdEJhc2VWYWx1ZShPcmlnaW4gb3JpZ2luLCBTdGFja1Nsb3QqIHNsb3Qp
CisgICAgICAgIDogVmFsdWUoQ2hlY2tlZE9wY29kZSwgU2xvdEJhc2UsIHBvaW50ZXJUeXBlKCks
IG9yaWdpbikKICAgICAgICAgLCBtX3Nsb3Qoc2xvdCkKICAgICB7CiAgICAgfQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3BhcnNlQ29sbGVjdGlvbi5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1NwYXJzZUNvbGxlY3Rpb24uaAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1NwYXJzZUNvbGxlY3Rpb24uaAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDE0NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzU3BhcnNlQ29sbGVjdGlvbl9oCisjZGVmaW5l
IEIzU3BhcnNlQ29sbGVjdGlvbl9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSA8
d3RmL1N0ZExpYkV4dHJhcy5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKKy8vIEIzOjpQcm9jZWR1cmUgYW5kIEFpcjo6Q29kZSBo
YXZlIGEgbG90IG9mIGNvbGxlY3Rpb25zIG9mIGluZGV4ZWQgdGhpbmdzLiBUaGlzIGhhcyBhbGwg
b2YgdGhlCisvLyBsb2dpYy4KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK2NsYXNzIFNwYXJzZUNv
bGxlY3Rpb24geworICAgIHR5cGVkZWYgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxUPj4gVmVjdG9y
VHlwZTsKKyAgICAKK3B1YmxpYzoKKyAgICBTcGFyc2VDb2xsZWN0aW9uKCkKKyAgICB7CisgICAg
fQorCisgICAgVCogYWRkKHN0ZDo6dW5pcXVlX3B0cjxUPiB2YWx1ZSkKKyAgICB7CisgICAgICAg
IFQqIHJlc3VsdCA9IHZhbHVlLmdldCgpOworICAgICAgICAKKyAgICAgICAgc2l6ZV90IGluZGV4
OworICAgICAgICBpZiAobV9pbmRleEZyZWVMaXN0LmlzRW1wdHkoKSkgeworICAgICAgICAgICAg
aW5kZXggPSBtX3ZlY3Rvci5zaXplKCk7CisgICAgICAgICAgICBtX3ZlY3Rvci5hcHBlbmQobnVs
bHB0cik7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgaW5kZXggPSBtX2luZGV4RnJlZUxp
c3QudGFrZUxhc3QoKTsKKworICAgICAgICB2YWx1ZS0+bV9pbmRleCA9IGluZGV4OworCisgICAg
ICAgIG1fdmVjdG9yW2luZGV4XSA9IFdURk1vdmUodmFsdWUpOworCisgICAgICAgIHJldHVybiBy
ZXN1bHQ7CisgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgorICAg
IFQqIGFkZE5ldyhBcmd1bWVudHMmJi4uLiBhcmd1bWVudHMpCisgICAgeworICAgICAgICByZXR1
cm4gYWRkKHN0ZDo6dW5pcXVlX3B0cjxUPihuZXcgVChzdGQ6OmZvcndhcmQ8QXJndW1lbnRzPihh
cmd1bWVudHMpLi4uKSkpOworICAgIH0KKworICAgIHZvaWQgcmVtb3ZlKFQqIHZhbHVlKQorICAg
IHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQobV92ZWN0b3JbdmFsdWUtPm1faW5kZXhdLmdldCgp
ID09IHZhbHVlKTsKKyAgICAgICAgbV9pbmRleEZyZWVMaXN0LmFwcGVuZCh2YWx1ZS0+bV9pbmRl
eCk7CisgICAgICAgIG1fdmVjdG9yW3ZhbHVlLT5tX2luZGV4XSA9IG51bGxwdHI7CisgICAgfQor
CisgICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmVjdG9yLnNpemUoKTsgfQor
ICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0IHsgcmV0dXJuIG1fdmVjdG9yLmlzRW1wdHkoKTsgfQor
ICAgIAorICAgIFQqIGF0KHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBtX3ZlY3Rvcltp
bmRleF0uZ2V0KCk7IH0KKyAgICBUKiBvcGVyYXRvcltdKHVuc2lnbmVkIGluZGV4KSBjb25zdCB7
IHJldHVybiBhdChpbmRleCk7IH0KKworICAgIGNsYXNzIGl0ZXJhdG9yIHsKKyAgICBwdWJsaWM6
CisgICAgICAgIGl0ZXJhdG9yKCkKKyAgICAgICAgICAgIDogbV9jb2xsZWN0aW9uKG51bGxwdHIp
CisgICAgICAgICAgICAsIG1faW5kZXgoMCkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAg
ICAgaXRlcmF0b3IoY29uc3QgU3BhcnNlQ29sbGVjdGlvbiYgY29sbGVjdGlvbiwgdW5zaWduZWQg
aW5kZXgpCisgICAgICAgICAgICA6IG1fY29sbGVjdGlvbigmY29sbGVjdGlvbikKKyAgICAgICAg
ICAgICwgbV9pbmRleChmaW5kTmV4dChpbmRleCkpCisgICAgICAgIHsKKyAgICAgICAgfQorCisg
ICAgICAgIFQqIG9wZXJhdG9yKigpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBtX2Nv
bGxlY3Rpb24tPmF0KG1faW5kZXgpOworICAgICAgICB9CisKKyAgICAgICAgaXRlcmF0b3ImIG9w
ZXJhdG9yKysoKQorICAgICAgICB7CisgICAgICAgICAgICBtX2luZGV4ID0gZmluZE5leHQobV9p
bmRleCArIDEpOworICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICB9CisKKyAgICAg
ICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAg
eworICAgICAgICAgICAgQVNTRVJUKG1fY29sbGVjdGlvbiA9PSBvdGhlci5tX2NvbGxlY3Rpb24p
OworICAgICAgICAgICAgcmV0dXJuIG1faW5kZXggPT0gb3RoZXIubV9pbmRleDsKKyAgICAgICAg
fQorCisgICAgICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKKyAgICAg
ICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgdW5zaWduZWQgZmluZE5leHQodW5zaWduZWQg
aW5kZXgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHdoaWxlIChpbmRleCA8IG1fY29sbGVjdGlv
bi0+c2l6ZSgpICYmICFtX2NvbGxlY3Rpb24tPmF0KGluZGV4KSkKKyAgICAgICAgICAgICAgICBp
bmRleCsrOworICAgICAgICAgICAgcmV0dXJuIGluZGV4OworICAgICAgICB9CisKKyAgICAgICAg
Y29uc3QgU3BhcnNlQ29sbGVjdGlvbiogbV9jb2xsZWN0aW9uOworICAgICAgICB1bnNpZ25lZCBt
X2luZGV4OworICAgIH07CisKKyAgICBpdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIGl0
ZXJhdG9yKCp0aGlzLCAwKTsgfQorICAgIGl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIGl0
ZXJhdG9yKCp0aGlzLCBzaXplKCkpOyB9CisKK3ByaXZhdGU6CisgICAgVmVjdG9yPHN0ZDo6dW5p
cXVlX3B0cjxUPj4gbV92ZWN0b3I7CisgICAgVmVjdG9yPHNpemVfdD4gbV9pbmRleEZyZWVMaXN0
OworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNf
SklUKQorCisjZW5kaWYgLy8gQjNTcGFyc2VDb2xsZWN0aW9uX2gKKwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tTbG90LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNTdGFja1Nsb3QuY3BwCShyZXZpc2lvbiAxOTU5NzApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja1Nsb3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
MSwxMyArNDEsMTEgQEAgdm9pZCBTdGFja1Nsb3Q6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgYwog
CiB2b2lkIFN0YWNrU2xvdDo6ZGVlcER1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKIHsKLSAg
ICBvdXQucHJpbnQoImJ5dGVTaXplID0gIiwgbV9ieXRlU2l6ZSwgIiwgb2Zmc2V0RnJvbUZQID0g
IiwgbV9vZmZzZXRGcm9tRlAsICIsIGtpbmQgPSAiLCBtX2tpbmQpOworICAgIG91dC5wcmludCgi
Ynl0ZVNpemUgPSAiLCBtX2J5dGVTaXplLCAiLCBvZmZzZXRGcm9tRlAgPSAiLCBtX29mZnNldEZy
b21GUCk7CiB9CiAKLVN0YWNrU2xvdDo6U3RhY2tTbG90KHVuc2lnbmVkIGluZGV4LCB1bnNpZ25l
ZCBieXRlU2l6ZSwgU3RhY2tTbG90S2luZCBraW5kKQotICAgIDogbV9pbmRleChpbmRleCkKLSAg
ICAsIG1fYnl0ZVNpemUoYnl0ZVNpemUpCi0gICAgLCBtX2tpbmQoa2luZCkKK1N0YWNrU2xvdDo6
U3RhY2tTbG90KHVuc2lnbmVkIGJ5dGVTaXplKQorICAgIDogbV9ieXRlU2l6ZShieXRlU2l6ZSkK
IHsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tTbG90LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tTbG90LmgJKHJldmlz
aW9uIDE5NTk3MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrU2xvdC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw3IEBACiAKICNpZiBFTkFCTEUoQjNfSklUKQogCi0j
aW5jbHVkZSAiQjNTdGFja1Nsb3RLaW5kLmgiCisjaW5jbHVkZSAiQjNTcGFyc2VDb2xsZWN0aW9u
LmgiCiAjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFi
bGUuaD4KICNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KQEAgLTQ5LDggKzQ5LDYgQEAgcHVi
bGljOgogICAgIH5TdGFja1Nsb3QoKTsKIAogICAgIHVuc2lnbmVkIGJ5dGVTaXplKCkgY29uc3Qg
eyByZXR1cm4gbV9ieXRlU2l6ZTsgfQotICAgIFN0YWNrU2xvdEtpbmQga2luZCgpIGNvbnN0IHsg
cmV0dXJuIG1fa2luZDsgfQotICAgIGJvb2wgaXNMb2NrZWQoKSBjb25zdCB7IHJldHVybiBtX2tp
bmQgPT0gU3RhY2tTbG90S2luZDo6TG9ja2VkOyB9CiAgICAgdW5zaWduZWQgaW5kZXgoKSBjb25z
dCB7IHJldHVybiBtX2luZGV4OyB9CiAKICAgICAvLyBUaGlzIGdldHMgYXNzaWduZWQgYXQgdGhl
IGVuZCBvZiBjb21waWxhdGlvbi4gQnV0LCB5b3UgY2FuIHRvdGFsbHkgcGluIHN0YWNrIHNsb3Rz
LiBVc2UgdGhlCkBAIC02MywxOCArNjEsMTggQEAgcHVibGljOgogICAgICAgICBtX29mZnNldEZy
b21GUCA9IHZhbHVlOwogICAgIH0KIAotICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYgb3V0KSBj
b25zdDsKKyAgICB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKICAgICB2b2lkIGRlZXBE
dW1wKFByaW50U3RyZWFtJikgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIEFp
cjo6U3RhY2tTbG90OwogICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7CisgICAgZnJpZW5kIGNs
YXNzIFNwYXJzZUNvbGxlY3Rpb248U3RhY2tTbG90PjsKIAotICAgIFN0YWNrU2xvdCh1bnNpZ25l
ZCBpbmRleCwgdW5zaWduZWQgYnl0ZVNpemUsIFN0YWNrU2xvdEtpbmQpOworICAgIFN0YWNrU2xv
dCh1bnNpZ25lZCBieXRlU2l6ZSk7CiAKLSAgICB1bnNpZ25lZCBtX2luZGV4OwotICAgIHVuc2ln
bmVkIG1fYnl0ZVNpemU7Ci0gICAgU3RhY2tTbG90S2luZCBtX2tpbmQ7CisgICAgdW5zaWduZWQg
bV9pbmRleCB7IFVJTlRfTUFYIH07CisgICAgdW5zaWduZWQgbV9ieXRlU2l6ZSB7IDAgfTsKICAg
ICBpbnRwdHJfdCBtX29mZnNldEZyb21GUCB7IDAgfTsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1N0YWNrU2xvdEtpbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrU2xvdEtpbmQuY3BwCShyZXZpc2lvbiAxOTU5NzApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja1Nsb3RLaW5kLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1MiArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0g
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJCM1N0YWNrU2xvdEtp
bmQuaCIKLQotI2lmIEVOQUJMRShCM19KSVQpCi0KLSNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0u
aD4KLQotbmFtZXNwYWNlIFdURiB7Ci0KLXVzaW5nIG5hbWVzcGFjZSBKU0M6OkIzOwotCi12b2lk
IHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgU3RhY2tTbG90S2luZCBraW5kKQotewot
ICAgIHN3aXRjaCAoa2luZCkgewotICAgIGNhc2UgU3RhY2tTbG90S2luZDo6TG9ja2VkOgotICAg
ICAgICBvdXQucHJpbnQoIkxvY2tlZCIpOwotICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBTdGFj
a1Nsb3RLaW5kOjpBbm9ueW1vdXM6Ci0gICAgICAgIG91dC5wcmludCgiQW5vbnltb3VzIik7Ci0g
ICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
LX0KLQotfSAvLyBuYW1lc3BhY2UgV1RGCi0KLSNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tTbG90S2luZC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrU2xvdEtpbmQuaAkocmV2aXNpb24g
MTk1OTcwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tTbG90S2luZC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDYzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTUt
MjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0g
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0g
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
Ci0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIEIzU3RhY2tTbG90S2luZF9oCi0jZGVm
aW5lIEIzU3RhY2tTbG90S2luZF9oCi0KLSNpZiBFTkFCTEUoQjNfSklUKQotCi1uYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIEIzIHsKLQotZW51bSBjbGFzcyBTdGFja1Nsb3RLaW5kIDogdWludDhf
dCB7Ci0gICAgLy8gQSBsb2NrZWQgc3RhY2sgc2xvdCBuZWVkcyB0byBiZSBrZXB0IGRpc2pvaW50
IGZyb20gYWxsIG90aGVycyBiZWNhdXNlIHdlIGludGVuZCB0byBlc2NhcGUKLSAgICAvLyBpdCBl
dmVuIGlmIHRoYXQncyBub3Qgb2J2aW91cy4gVGhpcyBoYXBwZW5zIHdoZW4gdGhlIHJ1bnRpbWUg
dGFrZXMgdGhlIGFkZHJlc3Mgb2YgYSBzdGFjawotICAgIC8vIHNsb3QuCi0gICAgTG9ja2VkLAot
Ci0gICAgLy8gVGhlc2Ugc3RhY2sgc2xvdHMgYmVoYXZlIGxpa2UgdmFyaWFibGVzLiBVbmRlZmlu
ZWQgYmVoYXZpb3IgaGFwcGVucyBpZiB5b3Ugc3RvcmUgbGVzcyB0aGFuCi0gICAgLy8gdGhlIHdp
ZHRoIG9mIHRoZSBzbG90LgotICAgIEFub255bW91cwotCi0gICAgLy8gRklYTUU6IFdlIHNob3Vs
ZCBhZGQgYSB0aGlyZCBtb2RlLCB3aGljaCBtZWFucyB0aGF0IHRoZSBzdGFjayBzbG90IHdpbGwg
YmUgcmVhZCBhc3luY2hyb25vdXNseQotICAgIC8vIGFzIHdpdGggTG9ja2VkLCBidXQgbmV2ZXIg
d3JpdHRlbiB0byBhc3luY2hyb25vdXNseS4gVGhlbiwgQWlyIGNvdWxkIG9wdGltaXplIHNwaWxs
aW5nIGFuZAotICAgIC8vIGZpbGxpbmcgYnkgdHJhY2tpbmcgd2hldGhlciB0aGUgdmFsdWUgaGFk
IGJlZW4gc3RvcmVkIHRvIGEgcmVhZC1vbmx5IGxvY2tlZCBzbG90LiBJZiBpdCBoYWQsCi0gICAg
Ly8gdGhlbiB3ZSBjYW4gcmVmaWxsIGZyb20gdGhhdCBzbG90LgotICAgIC8vIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA1ODcKLX07Ci0KLX0gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpCMwotCi1uYW1lc3BhY2UgV1RGIHsKLQotY2xhc3MgUHJpbnRTdHJlYW07Ci0KLXZv
aWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6QjM6OlN0YWNrU2xvdEtpbmQpOwot
Ci19IC8vIG5hbWVzcGFjZSBXVEYKLQotI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCi0KLSNlbmRp
ZiAvLyBCM1N0YWNrU2xvdEtpbmRfaAotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNTdGFja21hcFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNTdGFja21hcFZhbHVlLmNwcAkocmV2aXNpb24gMTk1OTcwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgzLDgg
KzgzLDggQEAgdm9pZCBTdGFja21hcFZhbHVlOjpkdW1wTWV0YShDb21tYVByaW50ZQogICAgICAg
ICAiLCBsYXRlQ2xvYmJlcmVkID0gIiwgbV9sYXRlQ2xvYmJlcmVkLCAiLCB1c2VkUmVnaXN0ZXJz
ID0gIiwgbV91c2VkUmVnaXN0ZXJzKTsKIH0KIAotU3RhY2ttYXBWYWx1ZTo6U3RhY2ttYXBWYWx1
ZSh1bnNpZ25lZCBpbmRleCwgQ2hlY2tlZE9wY29kZVRhZywgT3Bjb2RlIG9wY29kZSwgVHlwZSB0
eXBlLCBPcmlnaW4gb3JpZ2luKQotICAgIDogVmFsdWUoaW5kZXgsIENoZWNrZWRPcGNvZGUsIG9w
Y29kZSwgdHlwZSwgb3JpZ2luKQorU3RhY2ttYXBWYWx1ZTo6U3RhY2ttYXBWYWx1ZShDaGVja2Vk
T3Bjb2RlVGFnLCBPcGNvZGUgb3Bjb2RlLCBUeXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4pCisgICAg
OiBWYWx1ZShDaGVja2VkT3Bjb2RlLCBvcGNvZGUsIHR5cGUsIG9yaWdpbikKIHsKICAgICBBU1NF
UlQoYWNjZXB0cyhvcGNvZGUpKTsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1N0YWNrbWFwVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNTdGFja21hcFZhbHVlLmgJKHJldmlzaW9uIDE5NTk3MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1N0YWNrbWFwVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMjg0LDcgKzI4NCw3
IEBAIHByb3RlY3RlZDoKICAgICB2b2lkIGR1bXBDaGlsZHJlbihDb21tYVByaW50ZXImLCBQcmlu
dFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOwogICAgIHZvaWQgZHVtcE1ldGEoQ29tbWFQcmludGVy
JiwgUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKIAotICAgIFN0YWNrbWFwVmFsdWUodW5z
aWduZWQgaW5kZXgsIENoZWNrZWRPcGNvZGVUYWcsIE9wY29kZSwgVHlwZSwgT3JpZ2luKTsKKyAg
ICBTdGFja21hcFZhbHVlKENoZWNrZWRPcGNvZGVUYWcsIE9wY29kZSwgVHlwZSwgT3JpZ2luKTsK
IAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgQ2hlY2tTcGVjaWFsOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzU3dpdGNoVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N3aXRjaFZhbHVlLmNwcAkocmV2aXNpb24gMTk1OTcwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3dpdGNoVmFsdWUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02OCw5ICs2OCw4IEBAIFZhbHVlKiBTd2l0Y2hWYWx1ZTo6Y2xvbmVJbXBsKCkgY29u
c3QKICAgICByZXR1cm4gbmV3IFN3aXRjaFZhbHVlKCp0aGlzKTsKIH0KIAotU3dpdGNoVmFsdWU6
OlN3aXRjaFZhbHVlKAotICAgIHVuc2lnbmVkIGluZGV4LCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSog
Y2hpbGQsIGNvbnN0IEZyZXF1ZW50ZWRCbG9jayYgZmFsbFRocm91Z2gpCi0gICAgOiBDb250cm9s
VmFsdWUoaW5kZXgsIFN3aXRjaCwgVm9pZCwgb3JpZ2luLCBjaGlsZCkKK1N3aXRjaFZhbHVlOjpT
d2l0Y2hWYWx1ZShPcmlnaW4gb3JpZ2luLCBWYWx1ZSogY2hpbGQsIGNvbnN0IEZyZXF1ZW50ZWRC
bG9jayYgZmFsbFRocm91Z2gpCisgICAgOiBDb250cm9sVmFsdWUoU3dpdGNoLCBWb2lkLCBvcmln
aW4sIGNoaWxkKQogewogICAgIG1fc3VjY2Vzc29ycy5hcHBlbmQoZmFsbFRocm91Z2gpOwogfQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3dpdGNoVmFsdWUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTd2l0Y2hWYWx1ZS5oCShyZXZpc2lvbiAx
OTU5NzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTd2l0Y2hWYWx1ZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMjEsOCArMTIxLDcgQEAgcHJvdGVjdGVkOgogcHJpdmF0ZToKICAgICBm
cmllbmQgY2xhc3MgUHJvY2VkdXJlOwogCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgU3dpdGNoVmFs
dWUoCi0gICAgICAgIHVuc2lnbmVkIGluZGV4LCBPcmlnaW4sIFZhbHVlKiBjaGlsZCwgY29uc3Qg
RnJlcXVlbnRlZEJsb2NrJiBmYWxsVGhyb3VnaCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgU3dp
dGNoVmFsdWUoT3JpZ2luLCBWYWx1ZSogY2hpbGQsIGNvbnN0IEZyZXF1ZW50ZWRCbG9jayYgZmFs
bFRocm91Z2gpOwogCiAgICAgVmVjdG9yPGludDY0X3Q+IG1fdmFsdWVzOwogfTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Vwc2lsb25WYWx1ZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Vwc2lsb25WYWx1ZS5oCShyZXZpc2lvbiAxOTU5NzAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNVcHNpbG9uVmFsdWUuaAkod29ya2luZyBj
b3B5KQpAQCAtNTcsOCArNTcsOCBAQCBwcml2YXRlOgogICAgIC8vIE5vdGUgdGhhdCBwYXNzaW5n
IHRoZSBQaGkgZHVyaW5nIGNvbnN0cnVjdGlvbiBpcyBvcHRpb25hbC4gQSB2YWxpZCBwYXR0ZXJu
IGlzIHRvIGZpcnN0IGNyZWF0ZQogICAgIC8vIHRoZSBVcHNpbG9ucyB3aXRob3V0IHRoZSBQaGks
IHRoZW4gY3JlYXRlIHRoZSBQaGksIHRoZW4gZ28gYmFjayBhbmQgdGVsbCB0aGUgVXBzaWxvbnMg
YWJvdXQKICAgICAvLyB0aGUgUGhpLiBUaGlzIGFsbG93cyB5b3UgdG8gZW1pdCBjb2RlIGluIGl0
cyBuYXR1cmFsIG9yZGVyLgotICAgIFVwc2lsb25WYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3JpZ2lu
IG9yaWdpbiwgVmFsdWUqIHZhbHVlLCBWYWx1ZSogcGhpID0gbnVsbHB0cikKLSAgICAgICAgOiBW
YWx1ZShpbmRleCwgQ2hlY2tlZE9wY29kZSwgVXBzaWxvbiwgVm9pZCwgb3JpZ2luLCB2YWx1ZSkK
KyAgICBVcHNpbG9uVmFsdWUoT3JpZ2luIG9yaWdpbiwgVmFsdWUqIHZhbHVlLCBWYWx1ZSogcGhp
ID0gbnVsbHB0cikKKyAgICAgICAgOiBWYWx1ZShDaGVja2VkT3Bjb2RlLCBVcHNpbG9uLCBWb2lk
LCBvcmlnaW4sIHZhbHVlKQogICAgICAgICAsIG1fcGhpKHBoaSkKICAgICB7CiAgICAgICAgIGlm
IChwaGkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWxpZGF0ZS5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsaWRhdGUuY3BwCShyZXZp
c2lvbiAxOTU5NzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWxpZGF0ZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM3LDYgKzM3LDggQEAKICNpbmNsdWRlICJCM1N0YWNrU2xvdC5o
IgogI2luY2x1ZGUgIkIzVXBzaWxvblZhbHVlLmgiCiAjaW5jbHVkZSAiQjNWYWx1ZUlubGluZXMu
aCIKKyNpbmNsdWRlICJCM1ZhcmlhYmxlLmgiCisjaW5jbHVkZSAiQjNWYXJpYWJsZVZhbHVlLmgi
CiAjaW5jbHVkZSA8d3RmL0hhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvU3RyaW5nUHJpbnRTdHJl
YW0uaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9DU3RyaW5nLmg+CkBAIC0xNTMsNiArMTU1LDE0IEBA
IHB1YmxpYzoKICAgICAgICAgICAgICAgICBWQUxJREFURSghdmFsdWUtPm51bUNoaWxkcmVuKCks
ICgiQXQgIiwgKnZhbHVlKSk7CiAgICAgICAgICAgICAgICAgVkFMSURBVEUodmFsdWUtPnR5cGUo
KSA9PSBGbG9hdCwgKCJBdCAiLCAqdmFsdWUpKTsKICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIGNhc2UgU2V0OgorICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT5udW1D
aGlsZHJlbigpID09IDEsICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgVkFMSURB
VEUodmFsdWUtPmNoaWxkKDApLT50eXBlKCkgPT0gdmFsdWUtPmFzPFZhcmlhYmxlVmFsdWU+KCkt
PnZhcmlhYmxlKCktPnR5cGUoKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIGNhc2UgR2V0OgorICAgICAgICAgICAgICAgIFZBTElEQVRFKCF2
YWx1ZS0+bnVtQ2hpbGRyZW4oKSwgKCJBdCAiLCAqdmFsdWUpKTsKKyAgICAgICAgICAgICAgICBW
QUxJREFURSh2YWx1ZS0+dHlwZSgpID09IHZhbHVlLT5hczxWYXJpYWJsZVZhbHVlPigpLT52YXJp
YWJsZSgpLT50eXBlKCksICgiQXQgIiwgKnZhbHVlKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICBjYXNlIFNsb3RCYXNlOgogICAgICAgICAgICAgY2FzZSBGcmFtZVBvaW50
ZXI6CiAgICAgICAgICAgICAgICAgVkFMSURBVEUoIXZhbHVlLT5udW1DaGlsZHJlbigpLCAoIkF0
ICIsICp2YWx1ZSkpOwpAQCAtMzc1LDYgKzM4NSw5IEBAIHB1YmxpYzoKIAogICAgICAgICAgICAg
VkFMSURBVEUoISh2YWx1ZS0+ZWZmZWN0cygpLndyaXRlcyAmJiB2YWx1ZS0+a2V5KCkpLCAoIkF0
ICIsICp2YWx1ZSkpOwogICAgICAgICB9CisKKyAgICAgICAgZm9yIChWYXJpYWJsZSogdmFyaWFi
bGUgOiBtX3Byb2NlZHVyZS52YXJpYWJsZXMoKSkKKyAgICAgICAgICAgIFZBTElEQVRFKHZhcmlh
YmxlLT50eXBlKCkgIT0gVm9pZCwgKCJBdCAiLCAqdmFyaWFibGUpKTsKICAgICB9CiAKIHByaXZh
dGU6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuY3BwCShyZXZpc2lvbiAxOTU5
NzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYWx1ZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM5LDYgKzM5LDcgQEAKICNpbmNsdWRlICJCM1Vwc2lsb25WYWx1ZS5oIgogI2luY2x1
ZGUgIkIzVmFsdWVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQjNWYWx1ZUtleUlubGluZXMuaCIKKyNp
bmNsdWRlICJCM1ZhcmlhYmxlVmFsdWUuaCIKICNpbmNsdWRlIDx3dGYvQ29tbWFQcmludGVyLmg+
CiAjaW5jbHVkZSA8d3RmL1N0cmluZ1ByaW50U3RyZWFtLmg+CiAKQEAgLTcyLDkgKzczLDEwIEBA
IHZvaWQgVmFsdWU6OnJlcGxhY2VXaXRoSWRlbnRpdHkoVmFsdWUqIHYKIAogICAgIHRoaXMtPlZh
bHVlOjp+VmFsdWUoKTsKIAotICAgIG5ldyAodGhpcykgVmFsdWUoaW5kZXgsIElkZW50aXR5LCB0
eXBlLCBvcmlnaW4sIHZhbHVlKTsKKyAgICBuZXcgKHRoaXMpIFZhbHVlKElkZW50aXR5LCB0eXBl
LCBvcmlnaW4sIHZhbHVlKTsKIAogICAgIHRoaXMtPm93bmVyID0gb3duZXI7CisgICAgdGhpcy0+
bV9pbmRleCA9IGluZGV4OwogfQogCiB2b2lkIFZhbHVlOjpyZXBsYWNlV2l0aE5vcCgpCkBAIC04
NSw5ICs4NywxMCBAQCB2b2lkIFZhbHVlOjpyZXBsYWNlV2l0aE5vcCgpCiAKICAgICB0aGlzLT5W
YWx1ZTo6flZhbHVlKCk7CiAKLSAgICBuZXcgKHRoaXMpIFZhbHVlKGluZGV4LCBOb3AsIFZvaWQs
IG9yaWdpbik7CisgICAgbmV3ICh0aGlzKSBWYWx1ZShOb3AsIFZvaWQsIG9yaWdpbik7CiAKICAg
ICB0aGlzLT5vd25lciA9IG93bmVyOworICAgIHRoaXMtPm1faW5kZXggPSBpbmRleDsKIH0KIAog
dm9pZCBWYWx1ZTo6cmVwbGFjZVdpdGhQaGkoKQpAQCAtMTA0LDkgKzEwNywxMCBAQCB2b2lkIFZh
bHVlOjpyZXBsYWNlV2l0aFBoaSgpCiAKICAgICB0aGlzLT5WYWx1ZTo6flZhbHVlKCk7CiAKLSAg
ICBuZXcgKHRoaXMpIFZhbHVlKGluZGV4LCBQaGksIHR5cGUsIG9yaWdpbik7CisgICAgbmV3ICh0
aGlzKSBWYWx1ZShQaGksIHR5cGUsIG9yaWdpbik7CiAKICAgICB0aGlzLT5vd25lciA9IG93bmVy
OworICAgIHRoaXMtPm1faW5kZXggPSBpbmRleDsKIH0KIAogdm9pZCBWYWx1ZTo6ZHVtcChQcmlu
dFN0cmVhbSYgb3V0KSBjb25zdApAQCAtNDg0LDEwICs0ODgsMTIgQEAgRWZmZWN0cyBWYWx1ZTo6
ZWZmZWN0cygpIGNvbnN0CiAgICAgICAgIHJlc3VsdC5yZWFkcyA9IEhlYXBSYW5nZTo6dG9wKCk7
CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgVXBzaWxvbjoKLSAgICAgICAgcmVzdWx0LndyaXRl
c1NTQVN0YXRlID0gdHJ1ZTsKKyAgICBjYXNlIFNldDoKKyAgICAgICAgcmVzdWx0LndyaXRlc0xv
Y2FsU3RhdGUgPSB0cnVlOwogICAgICAgICBicmVhazsKICAgICBjYXNlIFBoaToKLSAgICAgICAg
cmVzdWx0LnJlYWRzU1NBU3RhdGUgPSB0cnVlOworICAgIGNhc2UgR2V0OgorICAgICAgICByZXN1
bHQucmVhZHNMb2NhbFN0YXRlID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBKdW1w
OgogICAgIGNhc2UgQnJhbmNoOgpAQCAtNTk4LDYgKzYwNCw3IEBAIHZvaWQgVmFsdWU6OmNoZWNr
T3Bjb2RlKE9wY29kZSBvcGNvZGUpCiAgICAgQVNTRVJUKCFQYXRjaHBvaW50VmFsdWU6OmFjY2Vw
dHMob3Bjb2RlKSk7CiAgICAgQVNTRVJUKCFTbG90QmFzZVZhbHVlOjphY2NlcHRzKG9wY29kZSkp
OwogICAgIEFTU0VSVCghVXBzaWxvblZhbHVlOjphY2NlcHRzKG9wY29kZSkpOworICAgIEFTU0VS
VCghVmFyaWFibGVWYWx1ZTo6YWNjZXB0cyhvcGNvZGUpKTsKIH0KICNlbmRpZiAvLyAhQVNTRVJU
X0RJU0FCTEVECiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhbHVlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuaAkocmV2aXNpb24g
MTk1OTcwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuaAkod29ya2luZyBj
b3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkIzRWZmZWN0cy5oIgogI2luY2x1ZGUg
IkIzT3Bjb2RlLmgiCiAjaW5jbHVkZSAiQjNPcmlnaW4uaCIKKyNpbmNsdWRlICJCM1NwYXJzZUNv
bGxlY3Rpb24uaCIKICNpbmNsdWRlICJCM1R5cGUuaCIKICNpbmNsdWRlICJCM1ZhbHVlS2V5Lmgi
CiAjaW5jbHVkZSA8d3RmL0NvbW1hUHJpbnRlci5oPgpAQCAtMjI2LDYgKzIyNyw3IEBAIHByb3Rl
Y3RlZDoKIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOworICAgIGZyaWVu
ZCBjbGFzcyBTcGFyc2VDb2xsZWN0aW9uPFZhbHVlPjsKIAogICAgIC8vIENoZWNrcyB0aGF0IHRo
aXMgb3Bjb2RlIGlzIHZhbGlkIGZvciB1c2Ugd2l0aCBCMzo6VmFsdWUuCiAjaWYgQVNTRVJUX0RJ
U0FCTEVECkBAIC0yNDMsMjcgKzI0NSwyNCBAQCBwcm90ZWN0ZWQ6CiAgICAgLy8gSW5zdGFudGlh
dGUgdmFsdWVzIHZpYSBQcm9jZWR1cmUuCiAgICAgLy8gVGhpcyBmb3JtIHJlcXVpcmVzIHNwZWNp
ZnlpbmcgdGhlIHR5cGUgZXhwbGljaXRseToKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1
bWVudHM+Ci0gICAgZXhwbGljaXQgVmFsdWUodW5zaWduZWQgaW5kZXgsIENoZWNrZWRPcGNvZGVU
YWcsIE9wY29kZSBvcGNvZGUsIFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIGZpcnN0
Q2hpbGQsIEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCi0gICAgICAgIDogbV9pbmRleChpbmRleCkK
LSAgICAgICAgLCBtX29wY29kZShvcGNvZGUpCisgICAgZXhwbGljaXQgVmFsdWUoQ2hlY2tlZE9w
Y29kZVRhZywgT3Bjb2RlIG9wY29kZSwgVHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSog
Zmlyc3RDaGlsZCwgQXJndW1lbnRzLi4uIGFyZ3VtZW50cykKKyAgICAgICAgOiBtX29wY29kZShv
cGNvZGUpCiAgICAgICAgICwgbV90eXBlKHR5cGUpCiAgICAgICAgICwgbV9vcmlnaW4ob3JpZ2lu
KQogICAgICAgICAsIG1fY2hpbGRyZW57IGZpcnN0Q2hpbGQsIGFyZ3VtZW50cy4uLiB9CiAgICAg
ewogICAgIH0KICAgICAvLyBUaGlzIGZvcm0gaXMgZm9yIHNwZWNpZnlpbmcgdGhlIHR5cGUgZXhw
bGljaXRseSB3aGVuIHRoZSBvcGNvZGUgaGFzIG5vIGNoaWxkcmVuOgotICAgIGV4cGxpY2l0IFZh
bHVlKHVuc2lnbmVkIGluZGV4LCBDaGVja2VkT3Bjb2RlVGFnLCBPcGNvZGUgb3Bjb2RlLCBUeXBl
IHR5cGUsIE9yaWdpbiBvcmlnaW4pCi0gICAgICAgIDogbV9pbmRleChpbmRleCkKLSAgICAgICAg
LCBtX29wY29kZShvcGNvZGUpCisgICAgZXhwbGljaXQgVmFsdWUoQ2hlY2tlZE9wY29kZVRhZywg
T3Bjb2RlIG9wY29kZSwgVHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luKQorICAgICAgICA6IG1fb3Bj
b2RlKG9wY29kZSkKICAgICAgICAgLCBtX3R5cGUodHlwZSkKICAgICAgICAgLCBtX29yaWdpbihv
cmlnaW4pCiAgICAgewogICAgIH0KICAgICAvLyBUaGlzIGZvcm0gaXMgZm9yIHRob3NlIG9wY29k
ZXMgdGhhdCBjYW4gaW5mZXIgdGhlaXIgdHlwZSBmcm9tIHRoZSBvcGNvZGUgYW5kIGZpcnN0IGNo
aWxkOgogICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KLSAgICBleHBsaWNpdCBW
YWx1ZSh1bnNpZ25lZCBpbmRleCwgQ2hlY2tlZE9wY29kZVRhZywgT3Bjb2RlIG9wY29kZSwgT3Jp
Z2luIG9yaWdpbiwgVmFsdWUqIGZpcnN0Q2hpbGQpCi0gICAgICAgIDogbV9pbmRleChpbmRleCkK
LSAgICAgICAgLCBtX29wY29kZShvcGNvZGUpCisgICAgZXhwbGljaXQgVmFsdWUoQ2hlY2tlZE9w
Y29kZVRhZywgT3Bjb2RlIG9wY29kZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIGZpcnN0Q2hpbGQp
CisgICAgICAgIDogbV9vcGNvZGUob3Bjb2RlKQogICAgICAgICAsIG1fdHlwZSh0eXBlRm9yKG9w
Y29kZSwgZmlyc3RDaGlsZCkpCiAgICAgICAgICwgbV9vcmlnaW4ob3JpZ2luKQogICAgICAgICAs
IG1fY2hpbGRyZW57IGZpcnN0Q2hpbGQgfQpAQCAtMjcxLDkgKzI3MCw4IEBAIHByb3RlY3RlZDoK
ICAgICB9CiAgICAgLy8gVGhpcyBmb3JtIGlzIGZvciB0aG9zZSBvcGNvZGVzIHRoYXQgY2FuIGlu
ZmVyIHRoZWlyIHR5cGUgZnJvbSB0aGUgb3Bjb2RlIGFuZCBmaXJzdCBhbmQgc2Vjb25kIGNoaWxk
OgogICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KLSAgICBleHBsaWNpdCBWYWx1
ZSh1bnNpZ25lZCBpbmRleCwgQ2hlY2tlZE9wY29kZVRhZywgT3Bjb2RlIG9wY29kZSwgT3JpZ2lu
IG9yaWdpbiwgVmFsdWUqIGZpcnN0Q2hpbGQsIFZhbHVlKiBzZWNvbmRDaGlsZCwgQXJndW1lbnRz
Li4uIGFyZ3VtZW50cykKLSAgICAgICAgOiBtX2luZGV4KGluZGV4KQotICAgICAgICAsIG1fb3Bj
b2RlKG9wY29kZSkKKyAgICBleHBsaWNpdCBWYWx1ZShDaGVja2VkT3Bjb2RlVGFnLCBPcGNvZGUg
b3Bjb2RlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogZmlyc3RDaGlsZCwgVmFsdWUqIHNlY29uZENo
aWxkLCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQorICAgICAgICA6IG1fb3Bjb2RlKG9wY29kZSkK
ICAgICAgICAgLCBtX3R5cGUodHlwZUZvcihvcGNvZGUsIGZpcnN0Q2hpbGQsIHNlY29uZENoaWxk
KSkKICAgICAgICAgLCBtX29yaWdpbihvcmlnaW4pCiAgICAgICAgICwgbV9jaGlsZHJlbnsgZmly
c3RDaGlsZCwgc2Vjb25kQ2hpbGQsIGFyZ3VtZW50cy4uLiB9CkBAIC0yODEsMjUgKzI3OSwyMiBA
QCBwcm90ZWN0ZWQ6CiAgICAgfQogICAgIC8vIFRoaXMgZm9ybSBpcyBmb3IgdGhvc2Ugb3Bjb2Rl
cyB0aGF0IGNhbiBpbmZlciB0aGVpciB0eXBlIGZyb20gdGhlIG9wY29kZSBhbG9uZSwgYW5kIHRo
YXQgZG9uJ3QKICAgICAvLyB0YWtlIGFueSBhcmd1bWVudHM6Ci0gICAgZXhwbGljaXQgVmFsdWUo
dW5zaWduZWQgaW5kZXgsIENoZWNrZWRPcGNvZGVUYWcsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBv
cmlnaW4pCi0gICAgICAgIDogbV9pbmRleChpbmRleCkKLSAgICAgICAgLCBtX29wY29kZShvcGNv
ZGUpCisgICAgZXhwbGljaXQgVmFsdWUoQ2hlY2tlZE9wY29kZVRhZywgT3Bjb2RlIG9wY29kZSwg
T3JpZ2luIG9yaWdpbikKKyAgICAgICAgOiBtX29wY29kZShvcGNvZGUpCiAgICAgICAgICwgbV90
eXBlKHR5cGVGb3Iob3Bjb2RlLCBudWxscHRyKSkKICAgICAgICAgLCBtX29yaWdpbihvcmlnaW4p
CiAgICAgewogICAgIH0KICAgICAvLyBVc2UgdGhpcyBmb3JtIGZvciB2YXJhcmdzLgotICAgIGV4
cGxpY2l0IFZhbHVlKHVuc2lnbmVkIGluZGV4LCBDaGVja2VkT3Bjb2RlVGFnLCBPcGNvZGUgb3Bj
b2RlLCBUeXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4sIGNvbnN0IEFkamFjZW5jeUxpc3QmIGNoaWxk
cmVuKQotICAgICAgICA6IG1faW5kZXgoaW5kZXgpCi0gICAgICAgICwgbV9vcGNvZGUob3Bjb2Rl
KQorICAgIGV4cGxpY2l0IFZhbHVlKENoZWNrZWRPcGNvZGVUYWcsIE9wY29kZSBvcGNvZGUsIFR5
cGUgdHlwZSwgT3JpZ2luIG9yaWdpbiwgY29uc3QgQWRqYWNlbmN5TGlzdCYgY2hpbGRyZW4pCisg
ICAgICAgIDogbV9vcGNvZGUob3Bjb2RlKQogICAgICAgICAsIG1fdHlwZSh0eXBlKQogICAgICAg
ICAsIG1fb3JpZ2luKG9yaWdpbikKICAgICAgICAgLCBtX2NoaWxkcmVuKGNoaWxkcmVuKQogICAg
IHsKICAgICB9Ci0gICAgZXhwbGljaXQgVmFsdWUodW5zaWduZWQgaW5kZXgsIENoZWNrZWRPcGNv
ZGVUYWcsIE9wY29kZSBvcGNvZGUsIFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdpbiwgQWRqYWNlbmN5
TGlzdCYmIGNoaWxkcmVuKQotICAgICAgICA6IG1faW5kZXgoaW5kZXgpCi0gICAgICAgICwgbV9v
cGNvZGUob3Bjb2RlKQorICAgIGV4cGxpY2l0IFZhbHVlKENoZWNrZWRPcGNvZGVUYWcsIE9wY29k
ZSBvcGNvZGUsIFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdpbiwgQWRqYWNlbmN5TGlzdCYmIGNoaWxk
cmVuKQorICAgICAgICA6IG1fb3Bjb2RlKG9wY29kZSkKICAgICAgICAgLCBtX3R5cGUodHlwZSkK
ICAgICAgICAgLCBtX29yaWdpbihvcmlnaW4pCiAgICAgICAgICwgbV9jaGlsZHJlbihXVEZNb3Zl
KGNoaWxkcmVuKSkKQEAgLTMwOSw4ICszMDQsOCBAQCBwcm90ZWN0ZWQ6CiAgICAgLy8gVGhpcyBp
cyB0aGUgY29uc3RydWN0b3IgeW91IGVuZCB1cCBhY3R1YWxseSBjYWxsaW5nLCBpZiB5b3UncmUg
aW5zdGFudGlhdGluZyBWYWx1ZQogICAgIC8vIGRpcmVjdGx5LgogICAgIHRlbXBsYXRlPHR5cGVu
YW1lLi4uIEFyZ3VtZW50cz4KLSAgICBleHBsaWNpdCBWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3Bj
b2RlIG9wY29kZSwgQXJndW1lbnRzJiYuLi4gYXJndW1lbnRzKQotICAgICAgICA6IFZhbHVlKGlu
ZGV4LCBDaGVja2VkT3Bjb2RlLCBvcGNvZGUsIHN0ZDo6Zm9yd2FyZDxBcmd1bWVudHM+KGFyZ3Vt
ZW50cykuLi4pCisgICAgZXhwbGljaXQgVmFsdWUoT3Bjb2RlIG9wY29kZSwgQXJndW1lbnRzJiYu
Li4gYXJndW1lbnRzKQorICAgICAgICA6IFZhbHVlKENoZWNrZWRPcGNvZGUsIG9wY29kZSwgc3Rk
Ojpmb3J3YXJkPEFyZ3VtZW50cz4oYXJndW1lbnRzKS4uLikKICAgICB7CiAgICAgICAgIGNoZWNr
T3Bjb2RlKG9wY29kZSk7CiAgICAgfQpAQCAtMzIxLDcgKzMxNiw5IEBAIHByaXZhdGU6CiAgICAg
c3RhdGljIFR5cGUgdHlwZUZvcihPcGNvZGUsIFZhbHVlKiBmaXJzdENoaWxkLCBWYWx1ZSogc2Vj
b25kQ2hpbGQgPSBudWxscHRyKTsKIAogICAgIC8vIFRoaXMgZ3JvdXAgb2YgZmllbGRzIGlzIGFy
cmFuZ2VkIHRvIGZpdCBpbiA2NCBiaXRzLgotICAgIHVuc2lnbmVkIG1faW5kZXg7Citwcm90ZWN0
ZWQ6CisgICAgdW5zaWduZWQgbV9pbmRleCB7IFVJTlRfTUFYIH07Citwcml2YXRlOgogICAgIE9w
Y29kZSBtX29wY29kZTsKICAgICBUeXBlIG1fdHlwZTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1ZhcmlhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNWYXJpYWJsZS5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNWYXJpYWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NiBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNWYXJpYWJsZS5oIgorCisjaWYgRU5BQkxFKEIzX0pJ
VCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK1ZhcmlhYmxlOjp+VmFyaWFi
bGUoKQoreworfQorCit2b2lkIFZhcmlhYmxlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0
Cit7CisgICAgb3V0LnByaW50KCJ2YXIiLCBtX2luZGV4KTsKK30KKwordm9pZCBWYXJpYWJsZTo6
ZGVlcER1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQobV90eXBl
LCAiIHZhciIsIG1faW5kZXgpOworfQorCitWYXJpYWJsZTo6VmFyaWFibGUoVHlwZSB0eXBlKQor
ICAgIDogbV90eXBlKHR5cGUpCit7CisgICAgQVNTRVJUKHR5cGUgIT0gVm9pZCk7Cit9CisKK30g
fSAvLyBuYW1lc3BhY2UgSlNDOjpCMworCisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFyaWFibGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYXJpYWJsZS5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFyaWFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDkzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgQjNWYXJpYWJsZV9oCisjZGVmaW5lIEIzVmFyaWFibGVfaAorCisjaWYgRU5BQkxF
KEIzX0pJVCkKKworI2luY2x1ZGUgIkIzU3BhcnNlQ29sbGVjdGlvbi5oIgorI2luY2x1ZGUgIkIz
VHlwZS5oIgorI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CisjaW5jbHVkZSA8d3RmL05vbmNv
cHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBKU0Mg
eyBuYW1lc3BhY2UgQjMgeworCitjbGFzcyBQcm9jZWR1cmU7CisKK2NsYXNzIFZhcmlhYmxlIHsK
KyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShWYXJpYWJsZSk7CisgICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CisKK3B1YmxpYzoKKyAgICB+VmFyaWFibGUoKTsKKworICAgIFR5cGUgdHlwZSgp
IGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQorICAgIHVuc2lnbmVkIGluZGV4KCkgY29uc3QgeyBy
ZXR1cm4gbV9pbmRleDsgfQorCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7Cisg
ICAgdm9pZCBkZWVwRHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworCitwcml2YXRlOgorICAgIGZy
aWVuZCBjbGFzcyBQcm9jZWR1cmU7CisgICAgZnJpZW5kIGNsYXNzIFNwYXJzZUNvbGxlY3Rpb248
VmFyaWFibGU+OworCisgICAgVmFyaWFibGUoVHlwZSk7CisgICAgCisgICAgdW5zaWduZWQgbV9p
bmRleDsKKyAgICBUeXBlIG1fdHlwZTsKK307CisKK2NsYXNzIERlZXBWYXJpYWJsZUR1bXAgewor
cHVibGljOgorICAgIERlZXBWYXJpYWJsZUR1bXAoY29uc3QgVmFyaWFibGUqIHZhcmlhYmxlKQor
ICAgICAgICA6IG1fdmFyaWFibGUodmFyaWFibGUpCisgICAgeworICAgIH0KKworICAgIHZvaWQg
ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAorICAgIHsKKyAgICAgICAgaWYgKG1fdmFyaWFi
bGUpCisgICAgICAgICAgICBtX3ZhcmlhYmxlLT5kZWVwRHVtcChvdXQpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBvdXQucHJpbnQoIjxudWxsPiIpOworICAgIH0KKworcHJpdmF0ZToKKyAg
ICBjb25zdCBWYXJpYWJsZSogbV92YXJpYWJsZTsKK307CisKK2lubGluZSBEZWVwVmFyaWFibGVE
dW1wIGRlZXBEdW1wKGNvbnN0IFZhcmlhYmxlKiB2YXJpYWJsZSkKK3sKKyAgICByZXR1cm4gRGVl
cFZhcmlhYmxlRHVtcCh2YXJpYWJsZSk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMwor
CisjZW5kaWYgLy8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzVmFyaWFibGVfaAorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYXJpYWJsZVZhbHVlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYXJpYWJsZVZhbHVlLmNwcAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhcmlhYmxlVmFsdWUuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIz
VmFyaWFibGVWYWx1ZS5oIgorCisjaWYgRU5BQkxFKEIzX0pJVCkKKworI2luY2x1ZGUgIkIzVmFy
aWFibGUuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK1ZhcmlhYmxlVmFs
dWU6On5WYXJpYWJsZVZhbHVlKCkKK3sKK30KKwordm9pZCBWYXJpYWJsZVZhbHVlOjpkdW1wTWV0
YShDb21tYVByaW50ZXImIGNvbW1hLCBQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91
dC5wcmludChjb21tYSwgcG9pbnRlckR1bXAobV92YXJpYWJsZSkpOworfQorCitWYWx1ZSogVmFy
aWFibGVWYWx1ZTo6Y2xvbmVJbXBsKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbmV3IFZhcmlhYmxl
VmFsdWUoKnRoaXMpOworfQorCitWYXJpYWJsZVZhbHVlOjpWYXJpYWJsZVZhbHVlKE9wY29kZSBv
cGNvZGUsIE9yaWdpbiBvcmlnaW4sIFZhcmlhYmxlKiB2YXJpYWJsZSwgVmFsdWUqIHZhbHVlKQor
ICAgIDogVmFsdWUoQ2hlY2tlZE9wY29kZSwgb3Bjb2RlLCBWb2lkLCBvcmlnaW4sIHZhbHVlKQor
ICAgICwgbV92YXJpYWJsZSh2YXJpYWJsZSkKK3sKKyAgICBBU1NFUlQob3Bjb2RlID09IFNldCk7
Cit9CisKK1ZhcmlhYmxlVmFsdWU6OlZhcmlhYmxlVmFsdWUoT3Bjb2RlIG9wY29kZSwgT3JpZ2lu
IG9yaWdpbiwgVmFyaWFibGUqIHZhcmlhYmxlKQorICAgIDogVmFsdWUoQ2hlY2tlZE9wY29kZSwg
b3Bjb2RlLCB2YXJpYWJsZS0+dHlwZSgpLCBvcmlnaW4pCisgICAgLCBtX3ZhcmlhYmxlKHZhcmlh
YmxlKQoreworICAgIEFTU0VSVChvcGNvZGUgPT0gR2V0KTsKK30KKworfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvQjNWYXJpYWJsZVZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzVmFyaWFibGVWYWx1ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzVmFyaWFibGVWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNjcgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBBcHBsZSBJbmMuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJ
RUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1Q
TElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQ
TEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
KyAqLworCisjaWZuZGVmIEIzVmFyaWFibGVWYWx1ZV9oCisjZGVmaW5lIEIzVmFyaWFibGVWYWx1
ZV9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNWYWx1ZS5oIgorCituYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworY2xhc3MgVmFyaWFibGU7CisKK2NsYXNzIEpT
X0VYUE9SVF9QUklWQVRFIFZhcmlhYmxlVmFsdWUgOiBwdWJsaWMgVmFsdWUgeworcHVibGljOgor
ICAgIHN0YXRpYyBib29sIGFjY2VwdHMoT3Bjb2RlIG9wY29kZSkgeyByZXR1cm4gb3Bjb2RlID09
IEdldCB8fCBvcGNvZGUgPT0gU2V0OyB9CisKKyAgICB+VmFyaWFibGVWYWx1ZSgpOworCisgICAg
VmFyaWFibGUqIHZhcmlhYmxlKCkgY29uc3QgeyByZXR1cm4gbV92YXJpYWJsZTsgfQorCitwcm90
ZWN0ZWQ6CisgICAgdm9pZCBkdW1wTWV0YShDb21tYVByaW50ZXImLCBQcmludFN0cmVhbSYpIGNv
bnN0IG92ZXJyaWRlOworCisgICAgVmFsdWUqIGNsb25lSW1wbCgpIGNvbnN0IG92ZXJyaWRlOwor
Citwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7CisKKyAgICAvLyBVc2UgdGhp
cyBmb3IgU2V0LgorICAgIFZhcmlhYmxlVmFsdWUoT3Bjb2RlLCBPcmlnaW4sIFZhcmlhYmxlKiwg
VmFsdWUqKTsKKworICAgIC8vIFVzZSB0aGlzIGZvciBHZXQuCisgICAgVmFyaWFibGVWYWx1ZShP
cGNvZGUsIE9yaWdpbiwgVmFyaWFibGUqIHZhcmlhYmxlKTsKKworICAgIFZhcmlhYmxlKiBtX3Zh
cmlhYmxlOworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFC
TEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNWYXJpYWJsZVZhbHVlX2gKKwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL3Rlc3RiMy5jcHAJKHJldmlzaW9uIDE5NTk3MCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy90ZXN0YjMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OTg5LDggKzQ5ODks
NyBAQCB2b2lkIHRlc3RTdGFja1Nsb3QoKQogICAgIEJhc2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFk
ZEJsb2NrKCk7CiAgICAgcm9vdC0+YXBwZW5kTmV3PENvbnRyb2xWYWx1ZT4oCiAgICAgICAgIHBy
b2MsIFJldHVybiwgT3JpZ2luKCksCi0gICAgICAgIHJvb3QtPmFwcGVuZE5ldzxTbG90QmFzZVZh
bHVlPigKLSAgICAgICAgICAgIHByb2MsIE9yaWdpbigpLCBwcm9jLmFkZFN0YWNrU2xvdCgxLCBT
dGFja1Nsb3RLaW5kOjpBbm9ueW1vdXMpKSk7CisgICAgICAgIHJvb3QtPmFwcGVuZE5ldzxTbG90
QmFzZVZhbHVlPihwcm9jLCBPcmlnaW4oKSwgcHJvYy5hZGRTdGFja1Nsb3QoMSkpKTsKIAogICAg
IHZvaWQqIHN0YWNrU2xvdCA9IGNvbXBpbGVBbmRSdW48dm9pZCo+KHByb2MpOwogICAgIENIRUNL
KHN0YWNrU2xvdCA8ICZwcm9jKTsKQEAgLTUwMTgsOCArNTAxNyw4IEBAIHZvaWQgdGVzdFN0b3Jl
TG9hZFN0YWNrU2xvdChpbnQgdmFsdWUpCiAgICAgUHJvY2VkdXJlIHByb2M7CiAgICAgQmFzaWNC
bG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKIAotICAgIFNsb3RCYXNlVmFsdWUqIHN0YWNr
ID0gcm9vdC0+YXBwZW5kTmV3PFNsb3RCYXNlVmFsdWU+KAotICAgICAgICBwcm9jLCBPcmlnaW4o
KSwgcHJvYy5hZGRTdGFja1Nsb3Qoc2l6ZW9mKGludCksIFN0YWNrU2xvdEtpbmQ6OkFub255bW91
cykpOworICAgIFNsb3RCYXNlVmFsdWUqIHN0YWNrID0KKyAgICAgICAgcm9vdC0+YXBwZW5kTmV3
PFNsb3RCYXNlVmFsdWU+KHByb2MsIE9yaWdpbigpLCBwcm9jLmFkZFN0YWNrU2xvdChzaXplb2Yo
aW50KSkpOwogCiAgICAgcm9vdC0+YXBwZW5kTmV3PE1lbW9yeVZhbHVlPigKICAgICAgICAgcHJv
YywgU3RvcmUsIE9yaWdpbigpLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJBbGxvY2F0ZVN0YWNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0FpckFsbG9jYXRlU3RhY2suY3BwCShyZXZpc2lvbiAxOTU5NzApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlU3RhY2suY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC05NSwzMCArOTUsMTMgQEAgdm9pZCBhbGxvY2F0ZVN0YWNrKENvZGUmIGNvZGUpCiB7CiAg
ICAgUGhhc2VTY29wZSBwaGFzZVNjb3BlKGNvZGUsICJhbGxvY2F0ZVN0YWNrIik7CiAKLSAgICAv
LyBQZXJmb3JtIGFuIGVzY2FwZSBhbmFseXNpcyBvdmVyIHN0YWNrIHNsb3RzLiBBbiBlc2NhcGlu
ZyBzdGFjayBzbG90IGlzIG9uZSB0aGF0IGlzIGxvY2tlZCBvcgotICAgIC8vIGlzIGV4cGxpY2l0
bHkgZXNjYXBlZCBpbiB0aGUgY29kZS4KLSAgICBJbmRleFNldDxTdGFja1Nsb3Q+IGVzY2FwaW5n
U3RhY2tTbG90czsKLSAgICBmb3IgKFN0YWNrU2xvdCogc2xvdCA6IGNvZGUuc3RhY2tTbG90cygp
KSB7Ci0gICAgICAgIGlmIChzbG90LT5pc0xvY2tlZCgpKQotICAgICAgICAgICAgZXNjYXBpbmdT
dGFja1Nsb3RzLmFkZChzbG90KTsKLSAgICB9Ci0gICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6
IGNvZGUpIHsKLSAgICAgICAgZm9yIChJbnN0JiBpbnN0IDogKmJsb2NrKSB7Ci0gICAgICAgICAg
ICBpbnN0LmZvckVhY2hBcmcoCi0gICAgICAgICAgICAgICAgWyZdIChBcmcmIGFyZywgQXJnOjpS
b2xlIHJvbGUsIEFyZzo6VHlwZSwgQXJnOjpXaWR0aCkgewotICAgICAgICAgICAgICAgICAgICBp
ZiAocm9sZSA9PSBBcmc6OlVzZUFkZHIgJiYgYXJnLmlzU3RhY2soKSkKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGVzY2FwaW5nU3RhY2tTbG90cy5hZGQoYXJnLnN0YWNrU2xvdCgpKTsKLSAgICAg
ICAgICAgICAgICB9KTsKLSAgICAgICAgfQotICAgIH0KLQogICAgIC8vIEFsbG9jYXRlIGFsbCBv
ZiB0aGUgZXNjYXBlZCBzbG90cyBpbiBvcmRlci4gVGhpcyBpcyBraW5kIG9mIGEgY3JhenkgYWxn
b3JpdGhtIHRvIGFsbG93IGZvcgogICAgIC8vIHRoZSBwb3NzaWJpbGl0eSBvZiBzdGFjayBzbG90
cyBiZWluZyBhc3NpZ25lZCBmcmFtZSBvZmZzZXRzIGJlZm9yZSB3ZSBldmVuIGdldCBoZXJlLgog
ICAgIEFTU0VSVCghY29kZS5mcmFtZVNpemUoKSk7CiAgICAgVmVjdG9yPFN0YWNrU2xvdCo+IGFz
c2lnbmVkRXNjYXBlZFN0YWNrU2xvdHM7CiAgICAgVmVjdG9yPFN0YWNrU2xvdCo+IGVzY2FwZWRT
dGFja1Nsb3RzV29ya2xpc3Q7CiAgICAgZm9yIChTdGFja1Nsb3QqIHNsb3QgOiBjb2RlLnN0YWNr
U2xvdHMoKSkgewotICAgICAgICBpZiAoZXNjYXBpbmdTdGFja1Nsb3RzLmNvbnRhaW5zKHNsb3Qp
KSB7CisgICAgICAgIGlmIChzbG90LT5pc0xvY2tlZCgpKSB7CiAgICAgICAgICAgICBpZiAoc2xv
dC0+b2Zmc2V0RnJvbUZQKCkpCiAgICAgICAgICAgICAgICAgYXNzaWduZWRFc2NhcGVkU3RhY2tT
bG90cy5hcHBlbmQoc2xvdCk7CiAgICAgICAgICAgICBlbHNlCkBAIC0xMzYsNyArMTE5LDcgQEAg
dm9pZCBhbGxvY2F0ZVN0YWNrKENvZGUmIGNvZGUpCiAgICAgICAgIGFzc2lnbmVkRXNjYXBlZFN0
YWNrU2xvdHMuYXBwZW5kKHNsb3QpOwogICAgIH0KIAotICAgIC8vIE5vdyB3ZSBoYW5kbGUgdGhl
IGFub255bW91cyBzbG90cy4KKyAgICAvLyBOb3cgd2UgaGFuZGxlIHRoZSBzcGlsbCBzbG90cy4K
ICAgICBTdGFja1Nsb3RMaXZlbmVzcyBsaXZlbmVzcyhjb2RlKTsKICAgICBJbmRleE1hcDxTdGFj
a1Nsb3QsIEhhc2hTZXQ8U3RhY2tTbG90Kj4+IGludGVyZmVyZW5jZShjb2RlLnN0YWNrU2xvdHMo
KS5zaXplKCkpOwogICAgIFZlY3RvcjxTdGFja1Nsb3QqPiBzbG90czsKQEAgLTE1NCw3ICsxMzcs
NyBAQCB2b2lkIGFsbG9jYXRlU3RhY2soQ29kZSYgY29kZSkKICAgICAgICAgICAgICAgICAgICAg
aWYgKCFhcmcuaXNTdGFjaygpKQogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICAgICAgICAgICAgICBTdGFja1Nsb3QqIHNsb3QgPSBhcmcuc3RhY2tTbG90KCk7Ci0gICAg
ICAgICAgICAgICAgICAgIGlmIChzbG90LT5raW5kKCkgIT0gU3RhY2tTbG90S2luZDo6QW5vbnlt
b3VzKQorICAgICAgICAgICAgICAgICAgICBpZiAoc2xvdC0+a2luZCgpICE9IFN0YWNrU2xvdEtp
bmQ6OlNwaWxsKQogICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgICAg
ICAgICAgICAgIGZvciAoU3RhY2tTbG90KiBvdGhlclNsb3QgOiBsb2NhbENhbGMubGl2ZSgpKSB7
CkBAIC0xODcsNyArMTcwLDcgQEAgdm9pZCBhbGxvY2F0ZVN0YWNrKENvZGUmIGNvZGUpCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgICAgICAgICAgU3RhY2tTbG90KiBzbG90ID0gYXJnLnN0YWNrU2xv
dCgpOwotICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNsb3QtPmtpbmQoKSAhPSBTdGFja1Ns
b3RLaW5kOjpBbm9ueW1vdXMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzbG90LT5r
aW5kKCkgIT0gU3RhY2tTbG90S2luZDo6U3BpbGwpIHsKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBvayA9IGZhbHNlOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTI4Nyw3ICsyNzAsNyBAQCB2b2lkIGFsbG9jYXRl
U3RhY2soQ29kZSYgY29kZSkKICAgICAgICAgICAgICAgICAgICAgY2FzZSBBcmc6OlN0YWNrOiB7
CiAgICAgICAgICAgICAgICAgICAgICAgICBTdGFja1Nsb3QqIHNsb3QgPSBhcmcuc3RhY2tTbG90
KCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoQXJnOjppc1pEZWYocm9sZSkKLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAmJiBzbG90LT5raW5kKCkgPT0gU3RhY2tTbG90S2luZDo6
QW5vbnltb3VzCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgc2xvdC0+a2luZCgpID09
IFN0YWNrU2xvdEtpbmQ6OlNwaWxsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgc2xv
dC0+Ynl0ZVNpemUoKSA+IEFyZzo6Ynl0ZXMod2lkdGgpKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgLy8gQ3VycmVudGx5IHdlIG9ubHkgaGFuZGxlIHRoaXMgc2ltcGxlIGNhc2UgYmVj
YXVzZSBpdCdzIHRoZSBvbmx5IG9uZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIHRo
YXQgYXJpc2VzOiBaRGVmJ3MgYXJlIG9ubHkgMzItYml0IHJpZ2h0IG5vdy4gU28sIHdoZW4gd2Ug
aGl0IHRoZXNlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5jcHAJ
KHJldmlzaW9uIDE5NTk3MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29k
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0LDIzICs1NCwxOCBAQCBCYXNpY0Jsb2NrKiBDb2Rl
OjphZGRCbG9jayhkb3VibGUgZnJlcXVlCiAKIFN0YWNrU2xvdCogQ29kZTo6YWRkU3RhY2tTbG90
KHVuc2lnbmVkIGJ5dGVTaXplLCBTdGFja1Nsb3RLaW5kIGtpbmQsIEIzOjpTdGFja1Nsb3QqIGIz
U2xvdCkKIHsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8U3RhY2tTbG90PiBzbG90KG5ldyBTdGFja1Ns
b3QoYnl0ZVNpemUsIG1fc3RhY2tTbG90cy5zaXplKCksIGtpbmQsIGIzU2xvdCkpOwotICAgIFN0
YWNrU2xvdCogcmVzdWx0ID0gc2xvdC5nZXQoKTsKLSAgICBtX3N0YWNrU2xvdHMuYXBwZW5kKFdU
Rk1vdmUoc2xvdCkpOwotICAgIHJldHVybiByZXN1bHQ7CisgICAgcmV0dXJuIG1fc3RhY2tTbG90
cy5hZGROZXcoYnl0ZVNpemUsIGtpbmQsIGIzU2xvdCk7CiB9CiAKIFN0YWNrU2xvdCogQ29kZTo6
YWRkU3RhY2tTbG90KEIzOjpTdGFja1Nsb3QqIGIzU2xvdCkKIHsKLSAgICByZXR1cm4gYWRkU3Rh
Y2tTbG90KGIzU2xvdC0+Ynl0ZVNpemUoKSwgYjNTbG90LT5raW5kKCksIGIzU2xvdCk7CisgICAg
cmV0dXJuIGFkZFN0YWNrU2xvdChiM1Nsb3QtPmJ5dGVTaXplKCksIFN0YWNrU2xvdEtpbmQ6Okxv
Y2tlZCwgYjNTbG90KTsKIH0KIAogU3BlY2lhbCogQ29kZTo6YWRkU3BlY2lhbChzdGQ6OnVuaXF1
ZV9wdHI8U3BlY2lhbD4gc3BlY2lhbCkKIHsKLSAgICBTcGVjaWFsKiByZXN1bHQgPSBzcGVjaWFs
LmdldCgpOwotICAgIHJlc3VsdC0+bV9jb2RlID0gdGhpczsKLSAgICBtX3NwZWNpYWxzLmFwcGVu
ZChXVEZNb3ZlKHNwZWNpYWwpKTsKLSAgICByZXR1cm4gcmVzdWx0OworICAgIHNwZWNpYWwtPm1f
Y29kZSA9IHRoaXM7CisgICAgcmV0dXJuIG1fc3BlY2lhbHMuYWRkKFdURk1vdmUoc3BlY2lhbCkp
OwogfQogCiBDQ2FsbFNwZWNpYWwqIENvZGU6OmNDYWxsU3BlY2lhbCgpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUuaAkocmV2aXNpb24gMTk1OTcwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYg
KzMzLDcgQEAKICNpbmNsdWRlICJBaXJTcGVjaWFsLmgiCiAjaW5jbHVkZSAiQWlyU3RhY2tTbG90
LmgiCiAjaW5jbHVkZSAiQWlyVG1wLmgiCisjaW5jbHVkZSAiQjNTcGFyc2VDb2xsZWN0aW9uLmgi
CiAjaW5jbHVkZSAiUmVnaXN0ZXJBdE9mZnNldExpc3QuaCIKICNpbmNsdWRlICJTdGFja0FsaWdu
bWVudC5oIgogCkBAIC0xODQsMTI1ICsxODUsMTEgQEAgcHVibGljOgogICAgIGl0ZXJhdG9yIGJl
Z2luKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoKnRoaXMsIDApOyB9CiAgICAgaXRlcmF0b3Ig
ZW5kKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoKnRoaXMsIHNpemUoKSk7IH0KIAotICAgIGNs
YXNzIFN0YWNrU2xvdHNDb2xsZWN0aW9uIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIFN0YWNrU2xv
dHNDb2xsZWN0aW9uKGNvbnN0IENvZGUmIGNvZGUpCi0gICAgICAgICAgICA6IG1fY29kZShjb2Rl
KQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgICAgICB1bnNpZ25lZCBzaXplKCkgY29uc3Qg
eyByZXR1cm4gbV9jb2RlLm1fc3RhY2tTbG90cy5zaXplKCk7IH0KLSAgICAgICAgU3RhY2tTbG90
KiBhdCh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9jb2RlLm1fc3RhY2tTbG90c1tp
bmRleF0uZ2V0KCk7IH0KLSAgICAgICAgU3RhY2tTbG90KiBvcGVyYXRvcltdKHVuc2lnbmVkIGlu
ZGV4KSBjb25zdCB7IHJldHVybiBhdChpbmRleCk7IH0KLQotICAgICAgICBjbGFzcyBpdGVyYXRv
ciB7Ci0gICAgICAgIHB1YmxpYzoKLSAgICAgICAgICAgIGl0ZXJhdG9yKCkKLSAgICAgICAgICAg
ICAgICA6IG1fY29sbGVjdGlvbihudWxscHRyKQotICAgICAgICAgICAgICAgICwgbV9pbmRleCgw
KQotICAgICAgICAgICAgewotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpdGVyYXRvcihj
b25zdCBTdGFja1Nsb3RzQ29sbGVjdGlvbiYgY29sbGVjdGlvbiwgdW5zaWduZWQgaW5kZXgpCi0g
ICAgICAgICAgICAgICAgOiBtX2NvbGxlY3Rpb24oJmNvbGxlY3Rpb24pCi0gICAgICAgICAgICAg
ICAgLCBtX2luZGV4KGluZGV4KQotICAgICAgICAgICAgewotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICBTdGFja1Nsb3QqIG9wZXJhdG9yKigpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICAgICAgcmV0dXJuIG1fY29sbGVjdGlvbi0+YXQobV9pbmRleCk7Ci0gICAgICAgICAgICB9Ci0K
LSAgICAgICAgICAgIGl0ZXJhdG9yJiBvcGVyYXRvcisrKCkKLSAgICAgICAgICAgIHsKLSAgICAg
ICAgICAgICAgICBtX2luZGV4Kys7Ci0gICAgICAgICAgICAgICAgcmV0dXJuICp0aGlzOwotICAg
ICAgICAgICAgfQotCi0gICAgICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRlcmF0b3Im
IG90aGVyKSBjb25zdAotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBtX2lu
ZGV4ID09IG90aGVyLm1faW5kZXg7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGJvb2wg
b3BlcmF0b3IhPShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0Ci0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOwotICAgICAgICAgICAgfQot
Ci0gICAgICAgIHByaXZhdGU6Ci0gICAgICAgICAgICBjb25zdCBTdGFja1Nsb3RzQ29sbGVjdGlv
biogbV9jb2xsZWN0aW9uOwotICAgICAgICAgICAgdW5zaWduZWQgbV9pbmRleDsKLSAgICAgICAg
fTsKLQotICAgICAgICBpdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKCp0
aGlzLCAwKTsgfQotICAgICAgICBpdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBpdGVyYXRv
cigqdGhpcywgc2l6ZSgpKTsgfQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgY29uc3QgQ29kZSYg
bV9jb2RlOwotICAgIH07Ci0KLSAgICBTdGFja1Nsb3RzQ29sbGVjdGlvbiBzdGFja1Nsb3RzKCkg
Y29uc3QgeyByZXR1cm4gU3RhY2tTbG90c0NvbGxlY3Rpb24oKnRoaXMpOyB9Ci0gICAgCi0gICAg
Y2xhc3MgU3BlY2lhbHNDb2xsZWN0aW9uIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIFNwZWNpYWxz
Q29sbGVjdGlvbihjb25zdCBDb2RlJiBjb2RlKQotICAgICAgICAgICAgOiBtX2NvZGUoY29kZSkK
LSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAgdW5zaWduZWQgc2l6ZSgpIGNvbnN0IHsg
cmV0dXJuIG1fY29kZS5tX3NwZWNpYWxzLnNpemUoKTsgfQotICAgICAgICBTcGVjaWFsKiBhdCh1
bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9jb2RlLm1fc3BlY2lhbHNbaW5kZXhdLmdl
dCgpOyB9Ci0gICAgICAgIFNwZWNpYWwqIG9wZXJhdG9yW10odW5zaWduZWQgaW5kZXgpIGNvbnN0
IHsgcmV0dXJuIGF0KGluZGV4KTsgfQotCi0gICAgICAgIGNsYXNzIGl0ZXJhdG9yIHsKLSAgICAg
ICAgcHVibGljOgotICAgICAgICAgICAgaXRlcmF0b3IoKQotICAgICAgICAgICAgICAgIDogbV9j
b2xsZWN0aW9uKG51bGxwdHIpCi0gICAgICAgICAgICAgICAgLCBtX2luZGV4KDApCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGl0ZXJhdG9yKGNvbnN0IFNwZWNp
YWxzQ29sbGVjdGlvbiYgY29sbGVjdGlvbiwgdW5zaWduZWQgaW5kZXgpCi0gICAgICAgICAgICAg
ICAgOiBtX2NvbGxlY3Rpb24oJmNvbGxlY3Rpb24pCi0gICAgICAgICAgICAgICAgLCBtX2luZGV4
KGluZGV4KQotICAgICAgICAgICAgewotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBTcGVj
aWFsKiBvcGVyYXRvciooKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBt
X2NvbGxlY3Rpb24tPmF0KG1faW5kZXgpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBp
dGVyYXRvciYgb3BlcmF0b3IrKygpCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbV9p
bmRleCsrOwotICAgICAgICAgICAgICAgIHJldHVybiAqdGhpczsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QK
LSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbV9pbmRleCA9PSBvdGhlci5t
X2luZGV4OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBib29sIG9wZXJhdG9yIT0oY29u
c3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICBwcml2
YXRlOgotICAgICAgICAgICAgY29uc3QgU3BlY2lhbHNDb2xsZWN0aW9uKiBtX2NvbGxlY3Rpb247
Ci0gICAgICAgICAgICB1bnNpZ25lZCBtX2luZGV4OwotICAgICAgICB9OwotCi0gICAgICAgIGl0
ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoKnRoaXMsIDApOyB9Ci0gICAg
ICAgIGl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKCp0aGlzLCBzaXplKCkp
OyB9Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBjb25zdCBDb2RlJiBtX2NvZGU7Ci0gICAgfTsK
KyAgICBjb25zdCBTcGFyc2VDb2xsZWN0aW9uPFN0YWNrU2xvdD4mIHN0YWNrU2xvdHMoKSBjb25z
dCB7IHJldHVybiBtX3N0YWNrU2xvdHM7IH0KKyAgICBTcGFyc2VDb2xsZWN0aW9uPFN0YWNrU2xv
dD4mIHN0YWNrU2xvdHMoKSB7IHJldHVybiBtX3N0YWNrU2xvdHM7IH0KIAotICAgIFNwZWNpYWxz
Q29sbGVjdGlvbiBzcGVjaWFscygpIGNvbnN0IHsgcmV0dXJuIFNwZWNpYWxzQ29sbGVjdGlvbigq
dGhpcyk7IH0KKyAgICBjb25zdCBTcGFyc2VDb2xsZWN0aW9uPFNwZWNpYWw+JiBzcGVjaWFscygp
IGNvbnN0IHsgcmV0dXJuIG1fc3BlY2lhbHM7IH0KKyAgICBTcGFyc2VDb2xsZWN0aW9uPFNwZWNp
YWw+JiBzcGVjaWFscygpIHsgcmV0dXJuIG1fc3BlY2lhbHM7IH0KIAogICAgIHRlbXBsYXRlPHR5
cGVuYW1lIENhbGxiYWNrPgogICAgIHZvaWQgZm9yQWxsVG1wcyhjb25zdCBDYWxsYmFjayYgY2Fs
bGJhY2spIGNvbnN0CkBAIC0zMzEsOSArMjE4LDkgQEAgcHJpdmF0ZToKICAgICBDb2RlKFByb2Nl
ZHVyZSYpOwogCiAgICAgUHJvY2VkdXJlJiBtX3Byb2M7IC8vIFNvbWUgbWV0YS1kYXRhLCBsaWtl
IGJ5cHJvZHVjdHMsIGlzIHN0b3JlZCBpbiB0aGUgUHJvY2VkdXJlLgotICAgIFZlY3RvcjxzdGQ6
OnVuaXF1ZV9wdHI8U3RhY2tTbG90Pj4gbV9zdGFja1Nsb3RzOworICAgIFNwYXJzZUNvbGxlY3Rp
b248U3RhY2tTbG90PiBtX3N0YWNrU2xvdHM7CiAgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxC
YXNpY0Jsb2NrPj4gbV9ibG9ja3M7Ci0gICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxTcGVjaWFs
Pj4gbV9zcGVjaWFsczsKKyAgICBTcGFyc2VDb2xsZWN0aW9uPFNwZWNpYWw+IG1fc3BlY2lhbHM7
CiAgICAgSGFzaFNldDxUbXA+IG1fZmFzdFRtcHM7CiAgICAgQ0NhbGxTcGVjaWFsKiBtX2NDYWxs
U3BlY2lhbCB7IG51bGxwdHIgfTsKICAgICB1bnNpZ25lZCBtX251bUdQVG1wcyB7IDAgfTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRml4T2J2aW91c1NwaWxscy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJGaXhPYnZpb3Vz
U3BpbGxzLmNwcAkocmV2aXNpb24gMTk1OTcwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJGaXhPYnZpb3VzU3BpbGxzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjYxLDcgKzI2
MSw3IEBAIHByaXZhdGU6CiAgICAgCiAgICAgc3RhdGljIGJvb2wgaXNTcGlsbFNsb3QoY29uc3Qg
QXJnJiBhcmcpCiAgICAgewotICAgICAgICByZXR1cm4gYXJnLmlzU3RhY2soKSAmJiAhYXJnLnN0
YWNrU2xvdCgpLT5pc0xvY2tlZCgpOworICAgICAgICByZXR1cm4gYXJnLmlzU3RhY2soKSAmJiBh
cmcuc3RhY2tTbG90KCktPmlzU3BpbGwoKTsKICAgICB9CiAgICAgCiAgICAgc3RydWN0IFJlZ0Nv
bnN0IHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySW5zdElubGluZXMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3RJbmxp
bmVzLmgJKHJldmlzaW9uIDE5NTk3MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlySW5zdElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1
ZGUgIkFpckluc3QuaCIKICNpbmNsdWRlICJBaXJPcGNvZGVVdGlscy5oIgogI2luY2x1ZGUgIkFp
clNwZWNpYWwuaCIKKyNpbmNsdWRlICJBaXJTdGFja1Nsb3QuaCIKICNpbmNsdWRlICJCM1ZhbHVl
LmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeyBuYW1lc3BhY2UgQWlyIHsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlySXRlcmF0ZWRSZWdpc3RlckNvYWxl
c2NpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
SXRlcmF0ZWRSZWdpc3RlckNvYWxlc2NpbmcuY3BwCShyZXZpc2lvbiAxOTU5NzApCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTIxNiw3ICsxMjE2LDcgQEAgcHJpdmF0ZToKIAogICAgICAg
ICAgICAgLy8gQWxsb2NhdGUgc3RhY2sgc2xvdCBmb3IgZWFjaCBzcGlsbGVkIHZhbHVlLgogICAg
ICAgICAgICAgU3RhY2tTbG90KiBzdGFja1Nsb3QgPSBtX2NvZGUuYWRkU3RhY2tTbG90KAotICAg
ICAgICAgICAgICAgIG1fdG1wV2lkdGgud2lkdGgodG1wKSA8PSBBcmc6OldpZHRoMzIgPyA0IDog
OCwgU3RhY2tTbG90S2luZDo6QW5vbnltb3VzKTsKKyAgICAgICAgICAgICAgICBtX3RtcFdpZHRo
LndpZHRoKHRtcCkgPD0gQXJnOjpXaWR0aDMyID8gNCA6IDgsIFN0YWNrU2xvdEtpbmQ6OlNwaWxs
KTsKICAgICAgICAgICAgIGJvb2wgaXNOZXdUbXAgPSBzdGFja1Nsb3RzLmFkZCh0bXAsIHN0YWNr
U2xvdCkuaXNOZXdFbnRyeTsKICAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQoaXNOZXdUbXAsIGlz
TmV3VG1wKTsKICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJMaXZlbmVzcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyTGl2ZW5lc3MuaAkocmV2aXNpb24gMTk1OTcwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL2Fpci9BaXJMaXZlbmVzcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAj
aW5jbHVkZSAiQWlyQmFzaWNCbG9jay5oIgogI2luY2x1ZGUgIkFpckNvZGUuaCIKICNpbmNsdWRl
ICJBaXJJbnN0SW5saW5lcy5oIgorI2luY2x1ZGUgIkFpclN0YWNrU2xvdC5oIgogI2luY2x1ZGUg
IkFpclRtcElubGluZXMuaCIKICNpbmNsdWRlICJCM0luZGV4TWFwLmgiCiAjaW5jbHVkZSAiQjNJ
bmRleFNldC5oIgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMb3dlckFm
dGVyUmVnQWxsb2MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyTG93ZXJBZnRlclJlZ0FsbG9jLmNwcAkocmV2aXNpb24gMTk1OTcwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMb3dlckFmdGVyUmVnQWxsb2MuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC05Nyw3ICs5Nyw3IEBAIHZvaWQgbG93ZXJBZnRlclJlZ0FsbG9jKENvZGUmIGNv
ZGUpCiAgICAgICAgICAgICAgICAgcmVzdWx0W2ldID0gQXJnOjpzdGFjaygKICAgICAgICAgICAg
ICAgICAgICAgY29kZS5hZGRTdGFja1Nsb3QoCiAgICAgICAgICAgICAgICAgICAgICAgICBBcmc6
OmJ5dGVzKEFyZzo6Y29uc2VydmF0aXZlV2lkdGgodHlwZSkpLAotICAgICAgICAgICAgICAgICAg
ICAgICAgU3RhY2tTbG90S2luZDo6QW5vbnltb3VzKSk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBTdGFja1Nsb3RLaW5kOjpTcGlsbCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAg
ICAgIHJldHVybiByZXN1bHQ7CkBAIC0xODIsNyArMTgyLDcgQEAgdm9pZCBsb3dlckFmdGVyUmVn
QWxsb2MoQ29kZSYgY29kZSkKICAgICAgICAgICAgICAgICAgICAgICAgIEFyZyBhcmcodG1wKTsK
ICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzo6V2lkdGggd2lkdGggPSBBcmc6OmNvbnNlcnZh
dGl2ZVdpZHRoKGFyZy50eXBlKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgU3RhY2tTbG90
KiBzdGFja1Nsb3QgPQotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvZGUuYWRkU3RhY2tT
bG90KEFyZzo6Ynl0ZXMod2lkdGgpLCBTdGFja1Nsb3RLaW5kOjpBbm9ueW1vdXMpOworICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGNvZGUuYWRkU3RhY2tTbG90KEFyZzo6Ynl0ZXMod2lkdGgp
LCBTdGFja1Nsb3RLaW5kOjpTcGlsbCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBwYWlycy5h
cHBlbmQoU2h1ZmZsZVBhaXIoYXJnLCBBcmc6OnN0YWNrKHN0YWNrU2xvdCksIHdpZHRoKSk7CiAg
ICAgICAgICAgICAgICAgICAgICAgICBzdGFja1Nsb3RzLmFwcGVuZChzdGFja1Nsb3QpOwogICAg
ICAgICAgICAgICAgICAgICB9KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIv
QWlyU3BlY2lhbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fp
ci9BaXJTcGVjaWFsLmNwcAkocmV2aXNpb24gMTk1OTcwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJTcGVjaWFsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsOCArMzYsNiBA
QCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlCiBjb25zdCBjaGFyKiBj
b25zdCBTcGVjaWFsOjpkdW1wUHJlZml4ID0gIiYiOwogCiBTcGVjaWFsOjpTcGVjaWFsKCkKLSAg
ICA6IG1faW5kZXgoVUlOVF9NQVgpCi0gICAgLCBtX2NvZGUobnVsbHB0cikKIHsKIH0KIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTcGVjaWFsLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTcGVjaWFsLmgJKHJldmlzaW9uIDE5
NTk3MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3BlY2lhbC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaWYgRU5BQkxFKEIzX0pJVCkKIAogI2luY2x1
ZGUgIkFpckluc3QuaCIKKyNpbmNsdWRlICJCM1NwYXJzZUNvbGxlY3Rpb24uaCIKICNpbmNsdWRl
IDx3dGYvRmFzdE1hbGxvYy5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1
ZGUgPHd0Zi9TY29wZWRMYW1iZGEuaD4KQEAgLTk4LDEwICs5OSwxMCBAQCBwcm90ZWN0ZWQ6CiAK
IHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIENvZGU7CisgICAgZnJpZW5kIGNsYXNzIFNwYXJz
ZUNvbGxlY3Rpb248U3BlY2lhbD47CiAKLSAgICBjb25zdCBjaGFyKiBtX25hbWU7Ci0gICAgdW5z
aWduZWQgbV9pbmRleDsKLSAgICBDb2RlKiBtX2NvZGU7CisgICAgdW5zaWduZWQgbV9pbmRleCB7
IFVJTlRfTUFYIH07CisgICAgQ29kZSogbV9jb2RlIHsgbnVsbHB0ciB9OwogfTsKIAogY2xhc3Mg
RGVlcFNwZWNpYWxEdW1wIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
U3BpbGxFdmVyeXRoaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0FpclNwaWxsRXZlcnl0aGluZy5jcHAJKHJldmlzaW9uIDE5NTk3MCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3BpbGxFdmVyeXRoaW5nLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtODgsNyArODgsNyBAQCB2b2lkIHNwaWxsRXZlcnl0aGluZyhDb2RlJiBjb2RlKQog
ICAgICAgICBBcmc6OlR5cGUgdHlwZSA9IHN0YXRpY19jYXN0PEFyZzo6VHlwZT4odHlwZUluZGV4
KTsKICAgICAgICAgc3RhY2tTbG90cy5yZXNpemUoY29kZS5udW1UbXBzKHR5cGUpKTsKICAgICAg
ICAgZm9yICh1bnNpZ25lZCB0bXBJbmRleCA9IGNvZGUubnVtVG1wcyh0eXBlKTsgdG1wSW5kZXgt
LTspCi0gICAgICAgICAgICBzdGFja1Nsb3RzW3RtcEluZGV4XSA9IGNvZGUuYWRkU3RhY2tTbG90
KDgsIFN0YWNrU2xvdEtpbmQ6OkFub255bW91cyk7CisgICAgICAgICAgICBzdGFja1Nsb3RzW3Rt
cEluZGV4XSA9IGNvZGUuYWRkU3RhY2tTbG90KDgsIFN0YWNrU2xvdEtpbmQ6OlNwaWxsKTsKICAg
ICB9CiAKICAgICBJbnNlcnRpb25TZXQgaW5zZXJ0aW9uU2V0KGNvZGUpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTdGFja1Nsb3QuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3RhY2tTbG90LmNwcAkocmV2aXNpb24gMTk1
OTcwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTdGFja1Nsb3QuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSwxMSBAQCB2b2lkIFN0YWNrU2xvdDo6c2V0T2Zmc2V0
RnJvbUZQKGludHB0cl90CiAKIHZvaWQgU3RhY2tTbG90OjpkdW1wKFByaW50U3RyZWFtJiBvdXQp
IGNvbnN0CiB7Ci0gICAgb3V0LnByaW50KCJzdGFjayIsIG1faW5kZXgpOworICAgIGlmIChpc1Nw
aWxsKCkpCisgICAgICAgIG91dC5wcmludCgic3BpbGwiKTsKKyAgICBlbHNlCisgICAgICAgIG91
dC5wcmludCgic3RhY2siKTsKKyAgICBvdXQucHJpbnQobV9pbmRleCk7CiB9CiAKIHZvaWQgU3Rh
Y2tTbG90OjpkZWVwRHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdApAQCAtNTEsOSArNTUsOCBA
QCB2b2lkIFN0YWNrU2xvdDo6ZGVlcER1bXAoUHJpbnRTdHJlYW0mIG91CiAgICAgICAgIG91dC5w
cmludCgiLCBiM1Nsb3QgPSAiLCAqbV9iM1Nsb3QsICI6ICgiLCBCMzo6ZGVlcER1bXAobV9iM1Ns
b3QpLCAiKSIpOwogfQogCi1TdGFja1Nsb3Q6OlN0YWNrU2xvdCh1bnNpZ25lZCBieXRlU2l6ZSwg
dW5zaWduZWQgaW5kZXgsIFN0YWNrU2xvdEtpbmQga2luZCwgQjM6OlN0YWNrU2xvdCogYjNTbG90
KQorU3RhY2tTbG90OjpTdGFja1Nsb3QodW5zaWduZWQgYnl0ZVNpemUsIFN0YWNrU2xvdEtpbmQg
a2luZCwgQjM6OlN0YWNrU2xvdCogYjNTbG90KQogICAgIDogbV9ieXRlU2l6ZShieXRlU2l6ZSkK
LSAgICAsIG1faW5kZXgoaW5kZXgpCiAgICAgLCBtX29mZnNldEZyb21GUChiM1Nsb3QgPyBiM1Ns
b3QtPm9mZnNldEZyb21GUCgpIDogMCkKICAgICAsIG1fa2luZChraW5kKQogICAgICwgbV9iM1Ns
b3QoYjNTbG90KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTdGFja1Ns
b3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclN0YWNr
U2xvdC5oCShyZXZpc2lvbiAxOTU5NzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpclN0YWNrU2xvdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw4IEBACiAKICNpZiBF
TkFCTEUoQjNfSklUKQogCi0jaW5jbHVkZSAiQjNTdGFja1Nsb3RLaW5kLmgiCisjaW5jbHVkZSAi
QWlyU3RhY2tTbG90S2luZC5oIgorI2luY2x1ZGUgIkIzU3BhcnNlQ29sbGVjdGlvbi5oIgogI2lu
Y2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAj
aW5jbHVkZSA8d3RmL1ByaW50U3RyZWFtLmg+CkBAIC00Niw2ICs0Nyw3IEBAIHB1YmxpYzoKICAg
ICB1bnNpZ25lZCBieXRlU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fYnl0ZVNpemU7IH0KICAgICBT
dGFja1Nsb3RLaW5kIGtpbmQoKSBjb25zdCB7IHJldHVybiBtX2tpbmQ7IH0KICAgICBib29sIGlz
TG9ja2VkKCkgY29uc3QgeyByZXR1cm4gbV9raW5kID09IFN0YWNrU2xvdEtpbmQ6OkxvY2tlZDsg
fQorICAgIGJvb2wgaXNTcGlsbCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZCA9PSBTdGFja1Nsb3RL
aW5kOjpTcGlsbDsgfQogICAgIHVuc2lnbmVkIGluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9pbmRl
eDsgfQogCiAgICAgdm9pZCBlbnN1cmVTaXplKHVuc2lnbmVkIHJlcXVlc3RlZFNpemUpCkBAIC03
OSwxNCArODEsMTUgQEAgcHVibGljOgogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBDb2Rl
OworICAgIGZyaWVuZCBjbGFzcyBTcGFyc2VDb2xsZWN0aW9uPFN0YWNrU2xvdD47CiAKLSAgICBT
dGFja1Nsb3QodW5zaWduZWQgYnl0ZVNpemUsIHVuc2lnbmVkIGluZGV4LCBTdGFja1Nsb3RLaW5k
LCBCMzo6U3RhY2tTbG90Kik7CisgICAgU3RhY2tTbG90KHVuc2lnbmVkIGJ5dGVTaXplLCBTdGFj
a1Nsb3RLaW5kLCBCMzo6U3RhY2tTbG90Kik7CiAgICAgCi0gICAgdW5zaWduZWQgbV9ieXRlU2l6
ZTsKLSAgICB1bnNpZ25lZCBtX2luZGV4OwotICAgIGludHB0cl90IG1fb2Zmc2V0RnJvbUZQOwot
ICAgIFN0YWNrU2xvdEtpbmQgbV9raW5kOwotICAgIEIzOjpTdGFja1Nsb3QqIG1fYjNTbG90Owor
ICAgIHVuc2lnbmVkIG1fYnl0ZVNpemUgeyAwIH07CisgICAgdW5zaWduZWQgbV9pbmRleCB7IFVJ
TlRfTUFYIH07CisgICAgaW50cHRyX3QgbV9vZmZzZXRGcm9tRlAgeyAwIH07CisgICAgU3RhY2tT
bG90S2luZCBtX2tpbmQgeyBTdGFja1Nsb3RLaW5kOjpMb2NrZWQgfTsKKyAgICBCMzo6U3RhY2tT
bG90KiBtX2IzU2xvdCB7IG51bGxwdHIgfTsKIH07CiAKIGNsYXNzIERlZXBTdGFja1Nsb3REdW1w
IHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3RhY2tTbG90S2luZC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTdGFja1Ns
b3RLaW5kLmNwcAkocmV2aXNpb24gMTk1OTAxKQkoZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNTdGFja1Nsb3RLaW5kLmNwcDoxOTU5MDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0FpclN0YWNrU2xvdEtpbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTIg
QEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkIzU3RhY2tTbG90S2luZC5oIgorCisjaWYgRU5BQkxF
KEIzX0pJVCkKKworI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgorCituYW1lc3BhY2UgV1RG
IHsKKwordXNpbmcgbmFtZXNwYWNlIEpTQzo6QjM7CisKK3ZvaWQgcHJpbnRJbnRlcm5hbChQcmlu
dFN0cmVhbSYgb3V0LCBTdGFja1Nsb3RLaW5kIGtpbmQpCit7CisgICAgc3dpdGNoIChraW5kKSB7
CisgICAgY2FzZSBTdGFja1Nsb3RLaW5kOjpMb2NrZWQ6CisgICAgICAgIG91dC5wcmludCgiTG9j
a2VkIik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFN0YWNrU2xvdEtpbmQ6OkFub255bW91
czoKKyAgICAgICAgb3V0LnByaW50KCJBbm9ueW1vdXMiKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL0FpclN0YWNrU2xvdEtpbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3RhY2tTbG90S2luZC5jcHAJKHdvcmtpbmcgY29weSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3RhY2tTbG90S2luZC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI0LDcgKzI0LDcgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiQjNTdGFja1Nsb3RLaW5kLmgiCisjaW5jbHVkZSAiQWlyU3RhY2tTbG90S2lu
ZC5oIgogCiAjaWYgRU5BQkxFKEIzX0pJVCkKIApAQCAtMzIsNyArMzIsNyBAQAogCiBuYW1lc3Bh
Y2UgV1RGIHsKIAotdXNpbmcgbmFtZXNwYWNlIEpTQzo6QjM7Cit1c2luZyBuYW1lc3BhY2UgSlND
OjpCMzo6QWlyOwogCiB2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mIG91dCwgU3RhY2tT
bG90S2luZCBraW5kKQogewpAQCAtNDAsOCArNDAsOCBAQCB2b2lkIHByaW50SW50ZXJuYWwoUHJp
bnRTdHJlYW0mIG91dCwgU3RhCiAgICAgY2FzZSBTdGFja1Nsb3RLaW5kOjpMb2NrZWQ6CiAgICAg
ICAgIG91dC5wcmludCgiTG9ja2VkIik7CiAgICAgICAgIHJldHVybjsKLSAgICBjYXNlIFN0YWNr
U2xvdEtpbmQ6OkFub255bW91czoKLSAgICAgICAgb3V0LnByaW50KCJBbm9ueW1vdXMiKTsKKyAg
ICBjYXNlIFN0YWNrU2xvdEtpbmQ6OlNwaWxsOgorICAgICAgICBvdXQucHJpbnQoIlNwaWxsIik7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3RhY2tTbG90S2luZC5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3RhY2tTbG90
S2luZC5oCShyZXZpc2lvbiAxOTU5MDEpCShmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1N0YWNrU2xvdEtpbmQuaDoxOTU5MDEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpclN0YWNrU2xvdEtpbmQuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYzIEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE1LTIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBC
M1N0YWNrU2xvdEtpbmRfaAorI2RlZmluZSBCM1N0YWNrU2xvdEtpbmRfaAorCisjaWYgRU5BQkxF
KEIzX0pJVCkKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2VudW0gY2xhc3Mg
U3RhY2tTbG90S2luZCA6IHVpbnQ4X3QgeworICAgIC8vIEEgbG9ja2VkIHN0YWNrIHNsb3QgbmVl
ZHMgdG8gYmUga2VwdCBkaXNqb2ludCBmcm9tIGFsbCBvdGhlcnMgYmVjYXVzZSB3ZSBpbnRlbmQg
dG8gZXNjYXBlCisgICAgLy8gaXQgZXZlbiBpZiB0aGF0J3Mgbm90IG9idmlvdXMuIFRoaXMgaGFw
cGVucyB3aGVuIHRoZSBydW50aW1lIHRha2VzIHRoZSBhZGRyZXNzIG9mIGEgc3RhY2sKKyAgICAv
LyBzbG90LgorICAgIExvY2tlZCwKKworICAgIC8vIFRoZXNlIHN0YWNrIHNsb3RzIGJlaGF2ZSBs
aWtlIHZhcmlhYmxlcy4gVW5kZWZpbmVkIGJlaGF2aW9yIGhhcHBlbnMgaWYgeW91IHN0b3JlIGxl
c3MgdGhhbgorICAgIC8vIHRoZSB3aWR0aCBvZiB0aGUgc2xvdC4KKyAgICBBbm9ueW1vdXMKKwor
ICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYWRkIGEgdGhpcmQgbW9kZSwgd2hpY2ggbWVhbnMgdGhh
dCB0aGUgc3RhY2sgc2xvdCB3aWxsIGJlIHJlYWQgYXN5bmNocm9ub3VzbHkKKyAgICAvLyBhcyB3
aXRoIExvY2tlZCwgYnV0IG5ldmVyIHdyaXR0ZW4gdG8gYXN5bmNocm9ub3VzbHkuIFRoZW4sIEFp
ciBjb3VsZCBvcHRpbWl6ZSBzcGlsbGluZyBhbmQKKyAgICAvLyBmaWxsaW5nIGJ5IHRyYWNraW5n
IHdoZXRoZXIgdGhlIHZhbHVlIGhhZCBiZWVuIHN0b3JlZCB0byBhIHJlYWQtb25seSBsb2NrZWQg
c2xvdC4gSWYgaXQgaGFkLAorICAgIC8vIHRoZW4gd2UgY2FuIHJlZmlsbCBmcm9tIHRoYXQgc2xv
dC4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNTg3
Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworbmFtZXNwYWNlIFdURiB7CisKK2Ns
YXNzIFByaW50U3RyZWFtOworCit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6
OkIzOjpTdGFja1Nsb3RLaW5kKTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKKyNlbmRpZiAvLyBF
TkFCTEUoQjNfSklUKQorCisjZW5kaWYgLy8gQjNTdGFja1Nsb3RLaW5kX2gKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTdGFja1Nsb3RLaW5kLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTdGFja1Nsb3RLaW5kLmgJKHdvcmtp
bmcgY29weSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3RhY2tTbG90S2lu
ZC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMywyMiArMjMsMjYgQEAKICAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAog
ICovCiAKLSNpZm5kZWYgQjNTdGFja1Nsb3RLaW5kX2gKLSNkZWZpbmUgQjNTdGFja1Nsb3RLaW5k
X2gKKyNpZm5kZWYgQWlyU3RhY2tTbG90S2luZF9oCisjZGVmaW5lIEFpclN0YWNrU2xvdEtpbmRf
aAogCiAjaWYgRU5BQkxFKEIzX0pJVCkKIAotbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7
CituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7CiAKIGVudW0g
Y2xhc3MgU3RhY2tTbG90S2luZCA6IHVpbnQ4X3QgewotICAgIC8vIEEgbG9ja2VkIHN0YWNrIHNs
b3QgbmVlZHMgdG8gYmUga2VwdCBkaXNqb2ludCBmcm9tIGFsbCBvdGhlcnMgYmVjYXVzZSB3ZSBp
bnRlbmQgdG8gZXNjYXBlCi0gICAgLy8gaXQgZXZlbiBpZiB0aGF0J3Mgbm90IG9idmlvdXMuIFRo
aXMgaGFwcGVucyB3aGVuIHRoZSBydW50aW1lIHRha2VzIHRoZSBhZGRyZXNzIG9mIGEgc3RhY2sK
LSAgICAvLyBzbG90LgorICAgIC8vIEEgbG9ja2VkIHN0YWNrIHNsb3QgaXMgYW4gYXJlYSBvZiBz
dGFjayByZXF1ZXN0ZWQgYnkgdGhlIGNsaWVudC4gSXQgY2Fubm90IGJlIGtpbGxlZC4gVGhlCisg
ICAgLy8gY2xpZW50IGNhbiBnZXQgaXRzIEZQIG9mZnNldCBhbmQgd3JpdGUgdG8gaXQgZnJvbSBz
dGFjayB3YWxraW5nIGNvZGUsIHNvIHdlIG11c3QgYXNzdW1lCisgICAgLy8gdGhhdCByZWFkcyBh
bmQgd3JpdGVzIHRvIGEgbG9ja2VkIHN0YWNrIHNsb3QgY2FuIGJlIGNsb2JiZXJlZCB0aGUgc2Ft
ZSB3YXkgYXMgcmVhZHMgYW5kCisgICAgLy8gd3JpdGVzIHRvIGFueSBtZW1vcnkgbG9jYXRpb24u
CiAgICAgTG9ja2VkLAogCi0gICAgLy8gVGhlc2Ugc3RhY2sgc2xvdHMgYmVoYXZlIGxpa2UgdmFy
aWFibGVzLiBVbmRlZmluZWQgYmVoYXZpb3IgaGFwcGVucyBpZiB5b3Ugc3RvcmUgbGVzcyB0aGFu
Ci0gICAgLy8gdGhlIHdpZHRoIG9mIHRoZSBzbG90LgotICAgIEFub255bW91cworICAgIC8vIEEg
c3BpbGwgc2xvdC4gVGhlc2UgaGF2ZSBmdW5kYW1lbnRhbGx5IGRpZmZlcmVudCBiZWhhdmlvciB0
aGFuIGEgdHlwaWNhbCBtZW1vcnkgbG9jYXRpb24uCisgICAgLy8gVGhleSBhcmUgbG93ZXJlZCB0
byBmcm9tIHRlbXBvcmFyaWVzLiBUaGlzIG1lYW5zIGZvciBleGFtcGxlIHRoYXQgYSAzMi1iaXQg
WkRlZiBzdG9yZSB0byBhCisgICAgLy8gOCBieXRlIHN0YWNrIHNsb3Qgd2lsbCB6ZXJvIHRoZSB0
b3AgNCBieXRlcywgZXZlbiB0aG91Z2ggYSAzMi1iaXQgWkRlZiBzdG9yZSB0byBhbnkgb3RoZXIK
KyAgICAvLyBraW5kIG9mIG1lbW9yeSBsb2NhdGlvbiB3b3VsZCBkbyBubyBzdWNoIHRoaW5nLiBV
c2VBZGRyIG9uIGEgc3BpbGwgc2xvdCBpcyBub3QgYWxsb3dlZCwgc28KKyAgICAvLyB0aGV5IG5l
dmVyIGVzY2FwZS4KKyAgICBTcGlsbAogCiAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBhZGQgYSB0
aGlyZCBtb2RlLCB3aGljaCBtZWFucyB0aGF0IHRoZSBzdGFjayBzbG90IHdpbGwgYmUgcmVhZCBh
c3luY2hyb25vdXNseQogICAgIC8vIGFzIHdpdGggTG9ja2VkLCBidXQgbmV2ZXIgd3JpdHRlbiB0
byBhc3luY2hyb25vdXNseS4gVGhlbiwgQWlyIGNvdWxkIG9wdGltaXplIHNwaWxsaW5nIGFuZApA
QCAtNDcsMTMgKzUxLDEzIEBAIGVudW0gY2xhc3MgU3RhY2tTbG90S2luZCA6IHVpbnQ4X3Qgewog
ICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA1ODcKIH07
CiAKLX0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMworfSB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjM6
OkFpcgogCiBuYW1lc3BhY2UgV1RGIHsKIAogY2xhc3MgUHJpbnRTdHJlYW07CiAKLXZvaWQgcHJp
bnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6QjM6OlN0YWNrU2xvdEtpbmQpOwordm9pZCBw
cmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlNDOjpCMzo6QWlyOjpTdGFja1Nsb3RLaW5kKTsK
IAogfSAvLyBuYW1lc3BhY2UgV1RGCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvb3Bjb2RlX2dlbmVyYXRvci5yYgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL29wY29kZV9nZW5lcmF0b3IucmIJKHJldmlzaW9uIDE5NTk3MCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvb3Bjb2RlX2dlbmVyYXRvci5yYgkod29ya2luZyBjb3B5
KQpAQCAtNjgwLDYgKzY4MCwxOCBAQCB3cml0ZUgoIk9wY29kZVV0aWxzIikgewogICAgICAgICAg
ICAgICAgIGZpbHRlciA9IHByb2MgeyBmYWxzZSB9CiAgICAgICAgICAgICAgICAgY2FsbGJhY2sg
PSBwcm9jIHsKICAgICAgICAgICAgICAgICAgICAgfCBmb3JtIHwKKyAgICAgICAgICAgICAgICAg
ICAgIyBUaGlzIGNvbnNlcnZhdGl2ZWx5IHNheXMgdGhhdCBTdGFjayBpcyBub3QgYSB2YWxpZCBm
b3JtIGZvciBVc2VBZGRyLAorICAgICAgICAgICAgICAgICAgICAjIGJlY2F1c2UgaXQncyBvbmx5
IHZhbGlkIGlmIGl0J3Mgbm90IGEgc3BpbGwgc2xvdC4gVGhpcyBpcyBjb25zaXN0ZW50IHdpdGgK
KyAgICAgICAgICAgICAgICAgICAgIyBpc1ZhbGlkRm9ybSgpIGJlaW5nIGNvbnNlcnZhdGl2ZSBh
bmQgaXQgYWxzbyBoYXBwZW5zIHRvIGJlIHByYWN0aWNhbCBzaW5jZQorICAgICAgICAgICAgICAg
ICAgICAjIHdlIGRvbid0IHJlYWxseSB1c2UgaXNWYWxpZEZvcm0gZm9yIGRlY2lkaW5nIHdoZW4g
U3RhY2sgaXMgc2FmZS4KKyAgICAgICAgICAgICAgICAgICAgb3ZlcmxvYWQuc2lnbmF0dXJlLmxl
bmd0aC50aW1lcyB7CisgICAgICAgICAgICAgICAgICAgICAgICB8IGluZGV4IHwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIG92ZXJsb2FkLnNpZ25hdHVyZVtpbmRleF0ucm9sZSA9PSAiVUEi
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJpZiAob3BnZW5IaWRkZW5Q
dHJJZGVudGl0eShraW5kcylbI3tpbmRleH1dID09IEFyZzo6U3RhY2spIgorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG91dHAucHV0cyAiICAgIHJldHVybiBmYWxzZTsiCisgICAgICAgICAg
ICAgICAgICAgICAgICBlbmQKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICAKICAgICAgICAgICAgICAgICAgICAgbm90Q3VzdG9tID0gKG5vdCBmb3JtLmtpbmRzLmRl
dGVjdCB7IHwga2luZCB8IGtpbmQuY3VzdG9tIH0pCiAgICAgICAgICAgICAgICAgICAgIGlmIG5v
dEN1c3RvbQogICAgICAgICAgICAgICAgICAgICAgICAgYmVnaW5BcmNocyhvdXRwLCBmb3JtLmFy
Y2hzKQpAQCAtNzg3LDYgKzc5OSwxMSBAQCB3cml0ZUgoIk9wY29kZUdlbmVyYXRlZCIpIHsKICAg
ICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJpZiAoIUFyZzo6aXNWYWxpZEltbUZvcm0oYXJn
c1sje2luZGV4fV0udmFsdWUoKSkpIgogICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgIk9Q
R0VOX1JFVFVSTihmYWxzZSk7IgogICAgICAgICAgICAgICAgIHdoZW4gIkFkZHIiCisgICAgICAg
ICAgICAgICAgICAgIGlmIGFyZy5yb2xlID09ICJVQSIKKyAgICAgICAgICAgICAgICAgICAgICAg
IG91dHAucHV0cyAiaWYgKGFyZ3NbI3tpbmRleH1dLmlzU3RhY2soKSAmJiBhcmdzWyN7aW5kZXh9
XS5zdGFja1Nsb3QoKS0+aXNTcGlsbCgpKSIKKyAgICAgICAgICAgICAgICAgICAgICAgIG91dHAu
cHV0cyAiT1BHRU5fUkVUVVJOKGZhbHNlKTsiCisgICAgICAgICAgICAgICAgICAgIGVuZAorICAg
ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJpZiAoIUFy
Zzo6aXNWYWxpZEFkZHJGb3JtKGFyZ3NbI3tpbmRleH1dLm9mZnNldCgpKSkiCiAgICAgICAgICAg
ICAgICAgICAgIG91dHAucHV0cyAiT1BHRU5fUkVUVVJOKGZhbHNlKTsiCiAgICAgICAgICAgICAg
ICAgd2hlbiAiSW5kZXgiCkBAIC04MzksOSArODU2LDExIEBAIHdyaXRlSCgiT3Bjb2RlR2VuZXJh
dGVkIikgewogICAgICAgICAgICAgICAgIG51bU5vID0gMAogICAgICAgICAgICAgICAgIG9wY29k
ZS5vdmVybG9hZHMuZWFjaCB7CiAgICAgICAgICAgICAgICAgICAgIHwgb3ZlcmxvYWQgfAorICAg
ICAgICAgICAgICAgICAgICB1c2VBZGRyID0gKG92ZXJsb2FkLnNpZ25hdHVyZVthcmdJbmRleF0g
YW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmxvYWQuc2lnbmF0dXJlW2Fy
Z0luZGV4XS5yb2xlID09ICJVQSIpCiAgICAgICAgICAgICAgICAgICAgIG92ZXJsb2FkLmZvcm1z
LmVhY2ggewogICAgICAgICAgICAgICAgICAgICAgICAgfCBmb3JtIHwKLSAgICAgICAgICAgICAg
ICAgICAgICAgIGlmIGZvcm0ua2luZHNbYXJnSW5kZXhdID09ICJBZGRyIgorICAgICAgICAgICAg
ICAgICAgICAgICAgaWYgZm9ybS5raW5kc1thcmdJbmRleF0gPT0gIkFkZHIiIGFuZCBub3QgdXNl
QWRkcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bVllcyArPSAxCiAgICAgICAgICAg
ICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtTm8gKz0g
MQpAQCAtODY0LDEyICs4ODMsMTUgQEAgd3JpdGVIKCJPcGNvZGVHZW5lcmF0ZWQiKSB7CiAgICAg
ICAgICAgICAgICAgICAgIG9wY29kZS5vdmVybG9hZHMuZWFjaCB7CiAgICAgICAgICAgICAgICAg
ICAgICAgICB8IG92ZXJsb2FkIHwKIAorICAgICAgICAgICAgICAgICAgICAgICAgdXNlQWRkciA9
IChvdmVybG9hZC5zaWduYXR1cmVbYXJnSW5kZXhdIGFuZAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBvdmVybG9hZC5zaWduYXR1cmVbYXJnSW5kZXhdLnJvbGUgPT0gIlVBIikK
KyAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICAgICAgIyBBZ2Fp
biwgY2hlY2sgaWYgYWxsIG9mIHRoZW0gZG8gd2hhdCB3ZSB3YW50LgogICAgICAgICAgICAgICAg
ICAgICAgICAgbnVtWWVzID0gMAogICAgICAgICAgICAgICAgICAgICAgICAgbnVtTm8gPSAwCiAg
ICAgICAgICAgICAgICAgICAgICAgICBvdmVybG9hZC5mb3Jtcy5lYWNoIHsKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICB8IGZvcm0gfAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlm
IGZvcm0ua2luZHNbYXJnSW5kZXhdID09ICJBZGRyIgorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGlmIGZvcm0ua2luZHNbYXJnSW5kZXhdID09ICJBZGRyIiBhbmQgbm90IHVzZUFkZHIKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnVtWWVzICs9IDEKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBlbHNlCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bU5v
ICs9IDEKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvdGVzdGFpci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci90ZXN0YWlyLmNwcAkocmV2
aXNpb24gMTk1OTcwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci90ZXN0YWlyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDA4LDcgKzQwOCw3IEBAIHZvaWQgdGVzdFNodWZmbGVCcm9h
ZGNhc3RBbGxSZWdzKCkKICAgICAgICAgICAgIHNodWZmbGUuYXBwZW5kKFRtcChHUFJJbmZvOjpy
ZWdUMCksIFRtcChyZWcpLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgzMikpOwogICAgIH0KIAot
ICAgIFN0YWNrU2xvdCogc2xvdCA9IGNvZGUuYWRkU3RhY2tTbG90KHNpemVvZihpbnQzMl90KSAq
IHJlZ3Muc2l6ZSgpLCBCMzo6U3RhY2tTbG90S2luZDo6TG9ja2VkKTsKKyAgICBTdGFja1Nsb3Qq
IHNsb3QgPSBjb2RlLmFkZFN0YWNrU2xvdChzaXplb2YoaW50MzJfdCkgKiByZWdzLnNpemUoKSwg
U3RhY2tTbG90S2luZDo6TG9ja2VkKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVn
cy5zaXplKCk7ICsraSkKICAgICAgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1w
KHJlZ3NbaV0pLCBBcmc6OnN0YWNrKHNsb3QsIGkgKiBzaXplb2YoaW50MzJfdCkpKTsKIApAQCAt
ODY5LDcgKzg2OSw3IEBAIHZvaWQgdGVzdFNodWZmbGVTaGlmdEFsbFJlZ3MoKQogICAgIGZvciAo
dW5zaWduZWQgaSA9IDE7IGkgPCByZWdzLnNpemUoKTsgKytpKQogICAgICAgICBzaHVmZmxlLmFw
cGVuZChUbXAocmVnc1tpIC0gMV0pLCBUbXAocmVnc1tpXSksIEFyZzo6d2lkdGhBcmcoQXJnOjpX
aWR0aDMyKSk7CiAKLSAgICBTdGFja1Nsb3QqIHNsb3QgPSBjb2RlLmFkZFN0YWNrU2xvdChzaXpl
b2YoaW50MzJfdCkgKiByZWdzLnNpemUoKSwgQjM6OlN0YWNrU2xvdEtpbmQ6OkxvY2tlZCk7Cisg
ICAgU3RhY2tTbG90KiBzbG90ID0gY29kZS5hZGRTdGFja1Nsb3Qoc2l6ZW9mKGludDMyX3QpICog
cmVncy5zaXplKCksIFN0YWNrU2xvdEtpbmQ6OkxvY2tlZCk7CiAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IHJlZ3Muc2l6ZSgpOyArK2kpCiAgICAgICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIs
IG51bGxwdHIsIFRtcChyZWdzW2ldKSwgQXJnOjpzdGFjayhzbG90LCBpICogc2l6ZW9mKGludDMy
X3QpKSk7CiAKQEAgLTkwNiw3ICs5MDYsNyBAQCB2b2lkIHRlc3RTaHVmZmxlUm90YXRlQWxsUmVn
cygpCiAgICAgICAgIHNodWZmbGUuYXBwZW5kKFRtcChyZWdzW2kgLSAxXSksIFRtcChyZWdzW2ld
KSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpKTsKICAgICBzaHVmZmxlLmFwcGVuZChUbXAo
cmVncy5sYXN0KCkpLCBUbXAocmVnc1swXSksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSk7
CiAKLSAgICBTdGFja1Nsb3QqIHNsb3QgPSBjb2RlLmFkZFN0YWNrU2xvdChzaXplb2YoaW50MzJf
dCkgKiByZWdzLnNpemUoKSwgQjM6OlN0YWNrU2xvdEtpbmQ6OkxvY2tlZCk7CisgICAgU3RhY2tT
bG90KiBzbG90ID0gY29kZS5hZGRTdGFja1Nsb3Qoc2l6ZW9mKGludDMyX3QpICogcmVncy5zaXpl
KCksIFN0YWNrU2xvdEtpbmQ6OkxvY2tlZCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHJlZ3Muc2l6ZSgpOyArK2kpCiAgICAgICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIs
IFRtcChyZWdzW2ldKSwgQXJnOjpzdGFjayhzbG90LCBpICogc2l6ZW9mKGludDMyX3QpKSk7CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQjNPdXRwdXQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQjNPdXRwdXQuY3BwCShyZXZpc2lv
biAxOTU5NzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEIzT3V0cHV0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtODEsOCArODEsNyBAQCB2b2lkIE91dHB1dDo6YXBwZW5kVG8oTEJh
c2ljQmxvY2sgYmxvY2spCiAKIFNsb3RCYXNlVmFsdWUqIE91dHB1dDo6bG9ja2VkU3RhY2tTbG90
KHNpemVfdCBieXRlcykKIHsKLSAgICByZXR1cm4gbV9ibG9jay0+YXBwZW5kTmV3PFNsb3RCYXNl
VmFsdWU+KAotICAgICAgICBtX3Byb2MsIG9yaWdpbigpLCBtX3Byb2MuYWRkU3RhY2tTbG90KGJ5
dGVzLCBTdGFja1Nsb3RLaW5kOjpMb2NrZWQpKTsKKyAgICByZXR1cm4gbV9ibG9jay0+YXBwZW5k
TmV3PFNsb3RCYXNlVmFsdWU+KG1fcHJvYywgb3JpZ2luKCksIG1fcHJvYy5hZGRTdGFja1Nsb3Qo
Ynl0ZXMpKTsKIH0KIAogTFZhbHVlIE91dHB1dDo6bmVnKExWYWx1ZSB2YWx1ZSkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCShyZXZp
c2lvbiAxOTU5NzApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9M
TFZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTk2MSw4ICs1OTYxLDggQEAgcHJpdmF0ZToKIAog
ICAgICAgICAvLyBTZXQgc29tZSBvYnZpb3VzIHRoaW5ncy4KICAgICAgICAgcGF0Y2hwb2ludC0+
ZWZmZWN0cy50ZXJtaW5hbCA9IGZhbHNlOwotICAgICAgICBwYXRjaHBvaW50LT5lZmZlY3RzLndy
aXRlc1NTQVN0YXRlID0gZmFsc2U7Ci0gICAgICAgIHBhdGNocG9pbnQtPmVmZmVjdHMucmVhZHNT
U0FTdGF0ZSA9IGZhbHNlOworICAgICAgICBwYXRjaHBvaW50LT5lZmZlY3RzLndyaXRlc0xvY2Fs
U3RhdGUgPSBmYWxzZTsKKyAgICAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cy5yZWFkc0xvY2FsU3Rh
dGUgPSBmYWxzZTsKICAgICAgICAgCiAgICAgICAgIC8vIFRoaXMgaXMgaG93IHdlIHRlbGwgQjMg
YWJvdXQgdGhlIHBvc3NpYmlsaXR5IG9mIGp1bXAgcmVwbGFjZW1lbnQuCiAgICAgICAgIHBhdGNo
cG9pbnQtPmVmZmVjdHMuZXhpdHNTaWRld2F5cyA9IHRydWU7CkluZGV4OiBXZWJzaXRlcy93ZWJr
aXQub3JnL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJzaXRlcy93ZWJraXQub3JnL0NoYW5n
ZUxvZwkocmV2aXNpb24gMTk1OTcwKQorKysgV2Vic2l0ZXMvd2Via2l0Lm9yZy9DaGFuZ2VMb2cJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxNSBAQAorMjAxNi0wMi0wMSAgRmlsaXAgUGl6bG8g
IDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIEdldCByaWQgb2YgYW5vbnltb3VzIHN0YWNr
IHNsb3RzCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
NTExMjgKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBU
aGlzIGNoYW5nZXMgdGhlIGRvY3VtZW50YXRpb24gdG8gYWNjb3VudCBmb3IgdGhlIGFkZGl0aW9u
IG9mIFZhcmlhYmxlcyBhbmQgdGhlIEdldCBhbmQgU2V0CisgICAgICAgIG9wY29kZXMsIGFuZCB0
aGUgcmVtb3ZhbCBvZiBhbm9ueW1vdXMgc3RhY2sgc2xvdHMgZnJvbSBCMyBJUi4KKworICAgICAg
ICAqIGRvY3MvYjMvaW50ZXJtZWRpYXRlLXJlcHJlc2VudGF0aW9uLmh0bWw6CisKIDIwMTYtMDEt
MzAgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBCMyBkb2N1bWVu
dGF0aW9uIHN0eWxlIHNob3VsZG4ndCBoYXZlIGhhY2tzIGZvciBoMQpJbmRleDogV2Vic2l0ZXMv
d2Via2l0Lm9yZy9kb2NzL2IzL2ludGVybWVkaWF0ZS1yZXByZXNlbnRhdGlvbi5odG1sCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYnNpdGVzL3dlYmtpdC5vcmcvZG9jcy9iMy9pbnRlcm1lZGlhdGUtcmVwcmVz
ZW50YXRpb24uaHRtbAkocmV2aXNpb24gMTk1OTcwKQorKysgV2Vic2l0ZXMvd2Via2l0Lm9yZy9k
b2NzL2IzL2ludGVybWVkaWF0ZS1yZXByZXNlbnRhdGlvbi5odG1sCSh3b3JraW5nIGNvcHkpCkBA
IC04NSw3ICs4NSw3IEBACiAgICAgICBmb3IgdGhlIGxvYWQuICBXZSB1c2UgdGhlIE1lbW9yeVZh
bHVlIGNsYXNzIGZvciBtZW1vcnktYWNjZXNzaW5nIHZhbHVlcywgd2hpY2ggYWxsIGhhdmUKICAg
ICAgIHN1Y2ggYW4gb2Zmc2V0LjwvcD4KIAotICAgIDxoMj5TdGFjayBTbG90PC9oMj4KKyAgICA8
aDI+U3RhY2sgU2xvdHM8L2gyPgogCiAgICAgPHA+QjMgZXhwb3NlcyB0aGUgY29uY2VwdCBvZiBz
dGFjay1hbGxvY2F0ZWQgZGF0YSBhbmQgZ2l2ZXMgdGhlIGNsaWVudCBhIGxvdCBvZiBjb250cm9s
LgogICAgICAgWW91IGNhbiBmb3JjZSBzdGFjayBzbG90cyB0byBlbmQgdXAgYXQgYSBwYXJ0aWN1
bGFyIG9mZnNldCBmcm9tIHRoZSBmcmFtZSBwb2ludGVyLCB0aG91Z2gKQEAgLTkzLDI0ICs5Mywx
OSBAQAogICAgICAgb2Zmc2V0IGZyb20gYW55IHN0YWNrIHNsb3QuICBVc3VhbGx5LCB5b3UgbGV0
IEIzIHNlbGVjdCB3aGVyZSBzdGFjayBzbG90cyBnbywgYW5kIHRoZW4gdXNlCiAgICAgICB0aGUg
U3RhY2tTbG90IEFQSSB0byBnZXQgaXRzIEZQIG9mZnNldCBhZnRlciBjb21waWxhdGlvbi48L3A+
CiAKLSAgICA8cD5TdGFjayBzbG90cyBhcmUgYWxzbyB1c2VkIGZvciBjcmVhdGluZyBub24tU1NB
IHZhcmlhYmxlcyB3aXRoIHRoZSBpbnRlbnRpb24gb2YgaGF2aW5nIEIzCi0gICAgICBjb252ZXJ0
IHRoZW0gaW50byBTU0EuICBUaGVyZSBhcmUgdHdvIGtpbmRzIG9mIHN0YWNrIGxvdHMuPC9wPgor
ICAgIDxoMj5WYXJpYWJsZXM8L2gyPgogCi0gICAgPGRsPgotICAgICAgPGR0PkFub255bW91czwv
ZHQ+Ci0gICAgICA8ZGQ+QW5vbnltb3VzIHN0YWNrIHNsb3RzIGFyZSB1c2VkIHRvIHJlcHJlc2Vu
dCBsb2NhbCB2YXJpYWJsZXMgdGhhdCBhcmVuJ3QgaW4gU1NBIGZvcm0uCi0gICAgICAgIEIzIGlz
IGFsbG93ZWQgdG8gYXNzdW1lIHRoYXQgbm9ib2R5IHdpbGwgc3RvcmUgdG8gYW4gYW5vbnltb3Vz
IHN0YWNrIHNsb3QgZXhjZXB0IHRocm91Z2gKLSAgICAgICAgU3RvcmUgaW5zdHJ1Y3Rpb25zIGlu
IHRoZSBCMyBwcm9jZWR1cmUuICBCMyBpcyBhbGxvd2VkIHRvIGFzc3VtZSB0aGF0IGEgU3RvcmUg
dGhhdCBkb2VzCi0gICAgICAgIG5vdCB3cml0ZSB0byB0aGUgZW50aXJlIGFub255bW91cyBzdGFj
ayBzbG90IGxlYXZlcyB0aGUgdW53cml0dGVuIHBhcnQgaW4gYW4gdW5kZWZpbmVkCi0gICAgICAg
IHN0YXRlLiAgVXN1YWxseSwgYW5vbnltb3VzIHN0YWNrIHNsb3RzIGFyZSBhbGxvY2F0ZWQgdG8g
aGF2ZSB0aGUgc2FtZSBzaXplIGFzIHRoZSB0eXBlCi0gICAgICAgIG9mIHZhcmlhYmxlIHRoZXkg
YXJlIGJlaW5nIHVzZWQgdG8gcmVwcmVzZW50LjwvZGQ+Ci0KLSAgICAgIDxkdD5Mb2NrZWQ8L2R0
PgotICAgICAgPGRkPlRoZXNlIHN0YWNrIHNsb3RzIGFyZSBhc3N1bWVkIHRvIG9wZXJhdGUgImFz
IGlmIiB0aGV5IHdlcmUgaW4gdGhlIGhlYXAsIGluIHRoZSBzZW5zZQotICAgICAgICB0aGF0IHRo
ZSBtYXkgZ2V0IHJlYWQgb3Igd3JpdHRlbiB1c2luZyBvcGVyYXRpb25zIG5vdCB2aXNpYmxlIGlu
IEIzIElSLjwvZGQ+Ci0gICAgPC9kbD4KLQotICAgIDxwPlRoZSBmaXhTU0EoKSBwaGFzZSB3aWxs
IGNvbnZlcnQgYW5vbnltb3VzIHN0YWNrIHNsb3RzIHRvIFNTQS48L3A+CisgICAgPHA+U29tZXRp
bWVzLCBTU0EgaXMgaW5jb252ZW5pZW50LiBGb3IgZXhhbXBsZSwgaXQncyBoYXJkIHRvIGRvIHBh
dGggc3BlY2lhbGl6YXRpb24gb3ZlciBTU0EuCisgICAgICBCMyBoYXMgdGhlIGNvbmNlcHQgb2Yg
VmFyaWFibGVzIGFzIGEgZmFsbC1iYWNrLiBUaGUgYmFja2VuZCBrbm93cyBob3cgdG8gaGFuZGxl
IHRoZW0gYW5kCisgICAgICB3aWxsIGNvYWxlc2NlIGFuZCBjb3B5LXByb3BhZ2F0ZSB0aGVtLiBJ
bnNpZGUgdGhlIEIzIG9wdGltaXplciwgdGhlcmUgaXMgYSBjbGFzc2ljIFNTQQorICAgICAgYnVp
bGRlciB0aGF0IGVsaW1pbmF0ZXMgdmFyaWFibGVzIGFuZCBidWlsZHMgU1NBIGluIHRoZWlyIHBs
YWNlLjwvcD4KKworICAgIDxwPllvdSBjYW4gY3JlYXRlIFZhcmlhYmxlcyBieSB1c2luZyBQcm9j
ZWR1cmU6OmFkZFZhcmlhYmxlKCksIGFuZCB0aGVuIHlvdSBjYW4gYWNjZXNzIHRoZW0KKyAgICAg
IHVzaW5nIHRoZSBHZXQgYW5kIFNldCBvcGNvZGVzLjwvcD4KKworICAgIDxwPlRoZSBmaXhTU0Eo
KSBwaGFzZSB3aWxsIGNvbnZlcnQgdmFyaWFibGVzIHRvIFNTQS4gSWYgeW91IHVzZSBhIGxvdCBv
ZiB2YXJpYWJsZXMgaW4geW91cgorICAgICAgaW5wdXQgdG8gQjMsIGl0J3MgYSBnb29kIGlkZWEg
dG8gcnVuIGZpeFNTQSgpIG1hbnVhbGx5IGJlZm9yZSBydW5uaW5nIHRoZSBjb21waWxlci4gVGhl
CisgICAgICBkZWZhdWx0IG9wdGltaXplciBvbmx5IHJ1bnMgZml4U1NBKCkgdG93YXJkcyB0aGUg
bWlkZGxlIG9mIG9wdGltaXphdGlvbnMuIDwvcD4KIAogICAgIDxoMj5Db250cm9sIGZsb3c8L2gy
PgogCkBAIC0xNjksNiArMTY0LDEzIEBACiAgICAgICA8ZHQ+RG91YmxlIENvbnN0RG91YmxlKGNv
bnN0YW50KTwvZHQ+CiAgICAgICA8ZGQ+RG91YmxlIGNvbnN0YW50LiAgTXVzdCB1c2UgdGhlIENv
bnN0RG91YmxlVmFsdWUgY2xhc3MsIHdoaWNoIGhhcyBzcGFjZSBmb3IgdGhlIGRvdWJsZSBjb25z
dGFudC48L2RkPgogCisgICAgICA8ZHQ+Vm9pZCBTZXQodmFsdWUsIHZhcmlhYmxlKTwvZHQ+Cisg
ICAgICA8ZGQ+QXNzaWducyB0aGUgZ2l2ZW4gdmFsdWUgdG8gdGhlIGdpdmVuIFZhcmlhYmxlLiBN
dXN0IHVzZSB0aGUgVmFyaWFibGVWYWx1ZSBjbGFzcy48L2RkPgorCisgICAgICA8ZHQ+VCBHZXQo
dmFyaWFibGUpPC9kdD4KKyAgICAgIDxkZD5SZXR1cm5zIHRoZSBjdXJyZW50IHZhbHVlIG9mIHRo
ZSBnaXZlbiBWYXJpYWJsZS4gSXRzIHJldHVybiB0eXBlIGRlcGVuZHMgb24gdGhlCisgICAgICAg
IHZhcmlhYmxlLiBNdXN0IHVzZSB0aGUgVmFyaWFibGVWYWx1ZSBjbGFzcy48L2RkPgorCiAgICAg
ICA8ZHQ+SW50UHRyIFNsb3RCYXNlKHN0YWNrU2xvdCk8L2R0PgogICAgICAgPGRkPlJldHVybnMg
YSBwb2ludGVyIHRvIHRoZSBiYXNlIG9mIHRoZSBnaXZlbiBzdGFjayBzbG90LiAgTXVzdCB1c2Ug
dGhlIFNsb3RCYXNlVmFsdWUKICAgICAgICAgY2xhc3MuPC9kZD4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>270493</attachid>
            <date>2016-02-02 09:55:39 -0800</date>
            <delta_ts>2016-02-02 10:18:18 -0800</delta_ts>
            <desc>rebased patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>160367</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTk2MDExKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMwOSBA
QAorMjAxNi0wMi0wMSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEdldCByaWQgb2YgYW5vbnltb3VzIHN0YWNrIHNsb3RzCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTExMjgKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXaGVuIEkgZmlyc3QgZGVzaWduZWQgc3RhY2sgc2xv
dHMsIHRoZSBpZGVhIHdhcyB0aGF0IGFuICJhbm9ueW1vdXMiIHN0YWNrIHNsb3Qgd2FzIG9uZSB0
aGF0CisgICAgICAgIGJlaGF2ZWQgZXhhY3RseSBsaWtlIGEgQyB2YXJpYWJsZTogaWYgaXQgbmV2
ZXIgZXNjYXBlZCwgaXQgd291bGQgbm90IG5lZWQgdG8gZ2V0IHN0YWNrIHNwYWNlCisgICAgICAg
IGZvciB0aGUgZW50aXJlIGxpZmV0aW1lIG9mIHRoZSBmdW5jdGlvbiAtIGl0IGNvdWxkIGdldCBh
bnkgc2xhYiBvZiBzdGFjayBzbyBsb25nIGFzIGl0CisgICAgICAgIGRpZG4ndCBpbnRlcmZlcmUg
d2l0aCBvdGhlciBzdGFjayBzbG90cyB0aGF0IHdvdWxkIGJlIGxpdmUgYXQgdGhlIHNhbWUgdGlt
ZS4gVGhlIHJlYXNvbiBJCisgICAgICAgIGNhbGxlZCB0aGVtICJhbm9ueW1vdXMiIGlzIHRoYXQg
ZXh0ZXJuYWwgY29kZSBjb3VsZCBub3QgZ2V0IGl0cyBhZGRyZXNzLiBUaGlzIGZlbHQgbGlrZSBp
dAorICAgICAgICBnYXZlIHRoZSBzdGFjayBzbG90IGFub255bWl0eS4gQnV0IGl0IHdhcyBuZXZl
ciBhIGdvb2QgbmFtZSBmb3IgdGhpcyBjb25jZXB0LgorCisgICAgICAgIFRoZW4gSSBoYWQgdGhl
IHJlZ2lzdGVyIGFsbG9jYXRvciBsb3dlciB0ZW1wb3JhcmllcyB0byBhbm9ueW1vdXMgc3RhY2sg
c2xvdHMgd2hlbiBpdCBzcGlsbGVkCisgICAgICAgIHRoZW0uIFNwaWxsaW5nIGJlY2FtZSB0aGUg
c29sZSBjbGllbnQgb2YgYW5vbnltb3VzIHN0YWNrIHNsb3RzLgorCisgICAgICAgIFRoZW4gSSBy
ZWFsaXplZCB0aGF0IHRoZXJlIHdhcyBhbiBhc3BlY3Qgb2YgaG93IHNwaWxsIHNsb3RzIHdvcmsg
dGhhdCBtYWtlIHRoZW0gd2FudAorICAgICAgICBzbGlnaHRseSBkaWZmZXJlbnQgc2VtYW50aWNz
IHRoYW4gYSBub3JtYWwgQyB2YXJpYWJsZS4gQSBDIHZhcmlhYmxlIGlzIGEgcHJvcGVyIG1lbW9y
eQorICAgICAgICBsb2NhdGlvbiAtIHlvdSBjb3VsZCBkbyBhIHN0b3JlIHRvIG9ubHkgc29tZSBi
eXRlcyBpbiB0aGUgdmFyaWFibGUsIGFuZCBpdCdzIHJlYXNvbmFibGUgdG8KKyAgICAgICAgZXhw
ZWN0IHRoYXQgdGhpcyB3aWxsIG5vdCBkZXN0cm95IHRoZSBvdGhlciBieXRlcyBpbiB0aGUgdmFy
aWFibGUuIEJ1dCB0aGF0IG1lYW5zIHRoYXQgdG8KKyAgICAgICAgY29tcHV0ZSB0aGVpciBsaXZl
bmVzcywgeW91IGhhdmUgdG8gZG8gc29tZXRoaW5nIGxpa2UgYSBwZXItYnl0ZSBsaXZlbmVzcy4g
VGhhdCdzIG92ZXJraWxsCisgICAgICAgIGZvciBzcGlsbCBzbG90cy4gWW91IHdhbnQgYW55IHN0
b3JlIHRvIHRoZSBzcGlsbCBzbG90IHRvIGtpbGwgdGhlIHdob2xlIHNsb3QgZXZlbiBpZiBpdAor
ICAgICAgICB3cml0ZXMgdG8ganVzdCBwYXJ0IG9mIHRoZSBzbG90LiBUaGlzIG1hdGNoZXMgaG93
IHRlbXBvcmFyaWVzIHdvcmsuIFNvIHJhdGhlciB0aGFuIGltcGxlbWVudAorICAgICAgICBwZXIt
Ynl0ZSBsaXZlbmVzcywgSSBkZWNpZGVkIHRvIGNoYW5nZSB0aGUgc2VtYW50aWNzIG9mIGFub255
bW91cyBzdGFjayBzbG90cyB0byBtYWtlIHRoZW0KKyAgICAgICAgd29yayBsaWtlIGhvdyBJIHdh
bnRlZCBzcGlsbCBzbG90cyB0byB3b3JrLiBUaGlzIHdhcyBxdWl0ZSBkaXJ0eSwgYW5kIHB1dCBC
MyBpbiB0aGUgYXdrd2FyZAorICAgICAgICBzaXR1YXRpb24gdGhhdCBCMydzIGFub255bW91cyBz
dGFjayBzbG90cyBiZWhhdmVkIGxpa2Ugc3BpbGwgc2xvdHMuIEJ1dCBpdCB3YXMgT0sgc2luY2UK
KyAgICAgICAgbm9ib2R5IHVzZWQgYW5vbnltb3VzIHN0YWNrIHNsb3RzIGluIEIzLgorCisgICAg
ICAgIFRoZW4gSSBhZGRlZCB0YWlsIGR1cGxpY2F0aW9uLCB3aGljaCByZXF1aXJlZCBoYXZpbmcg
YSBtZWNoYW5pc20gZm9yIGludHJvZHVjaW5nIG5vbi1TU0EKKyAgICAgICAgdmFyaWFibGVzIGlu
IEIzLiBJIGRlY2lkZWQgdG8gdXNlIGFub255bW91cyBzdGFjayBzbG90cyBmb3IgdGhpcyBwdXJw
b3NlLiBBbGwgb2YgYSBzdWRkZW4KKyAgICAgICAgdGhpcyBhbGwgZmVsdCBsaWtlIGl0IG1hZGUg
c2Vuc2U6IGFub255bW91cyBzdGFjayBzbG90cyB3ZXJlIGp1c3QgbGlrZSB2YXJpYWJsZXMhIEhv
b3JheSBmb3IKKyAgICAgICAgdGhlIGFtYXppbmcgZm9yZXNpZ2h0IG9mIGFub255bW91cyBzdGFj
ayBzbG90cyEKKworICAgICAgICBCdXQgdGhlbiBJIHJlYWxpemVkIHRoYXQgdGhpcyB3YXMgYWxs
IHZlcnkgYmFkLiBXZSB3YW50IEIzIHRvIGJlIGFibGUgdG8gb3B0aW1pemUgU3RvcmUgYW5kCisg
ICAgICAgIExvYWQgb3BlcmF0aW9ucyBieSByZWFzb25pbmcgYWJvdXQgaG93IHRoZXkgYWZmZWN0
IGJ5dGVzIGluIG1lbW9yeS4gRm9yIGV4YW1wbGUsIGlmIHlvdSBkbworICAgICAgICBhIExvYWQg
b2YgYSA2NC1iaXQgdmFsdWUsIGFuZCB0aGVuIHlvdSBtb2RpZnkganVzdCB0aGUgbG93IDMyIGJp
dHMgb2YgdGhhdCB2YWx1ZSwgYW5kIHRoZW4KKyAgICAgICAgeW91IGRvIGEgNjQtYml0IHN0b3Jl
IGJhY2sgdG8gdGhlIHNhbWUgbG9jYXRpb24sIHRoZW4gaXQgd291bGQgYmUgYmV0dGVyIHRvIHRy
YW5zZm9ybSB0aGlzCisgICAgICAgIGludG8gMzItYml0IG9wZXJhdGlvbnMuIFdlIGRvbid0IGRv
IHRoaXMgb3B0aW1pemF0aW9uIHlldCwgYnV0IGl0J3MgdGhlIGtpbmQgb2YgdGhpbmcgdGhhdAor
ICAgICAgICB3ZSB3YW50IEIzIHRvIGJlIGFibGUgdG8gZG8uIFRvIGRvIGl0LCB3ZSBuZWVkIFN0
b3JlIHRvIG1lYW4gdGhhdCBpdCBvbmx5IGFmZmVjdHMgTiBieXRlcworICAgICAgICBzdGFydGlu
ZyBhdCB0aGUgcG9pbnRlciwgd2hlcmUgTiBpcyB0aGUgc2l6ZSBvZiB0aGUgdGhpbmcgYmVpbmcg
c3RvcmVkLiBCdXQgdGhhdCdzIG5vdCB3aGF0CisgICAgICAgIFN0b3JlIG1lYW5zIGZvciBhbm9u
eW1vdXMgc3RhY2sgc2xvdHMuIEZvciBhbm9ueW1vdXMgc2xvdHMsIHN0b3JpbmcgdG8gYW55IGJ5
dGUgaW4gdGhlIHNsb3QKKyAgICAgICAgY2xvYmJlcnMgYWxsIGJ5dGVzIGluIHRoZSBzbG90LiBX
ZSB3ZXJlIG5ldmVyIGNsZWFyIGlmIHlvdSBuZWVkIHRvIHN0b3JlIGRpcmVjdGx5IHRvIGFuCisg
ICAgICAgIGFub255bW91cyBzbG90IHRvIGdldCB0aGlzIGJlaGF2aW9yLCBvciBpZiBhbnkgcG9p
bnRlciB0aGF0IHBvaW50cyB0byBhbiBhbm95bW91cyBzbG90IG11c3QKKyAgICAgICAgZXhoaWJp
dCB0aGlzIGJlaGF2aW9yIHdoZW4gc3RvcmVkIHRvLiBOZWl0aGVyIGtpbmRzIG9mIHNlbWFudGlj
cyBtYWtlIHNlbnNlIHRvIG1lLgorCisgICAgICAgIFRoaXMgY2hhbmdlIGZpeGVzIHRoZSBwcm9i
bGVtIGJ5IGVyYWRpY2F0aW5nIGFub255bW91cyBzdGFjayBzbG90cy4gSW4gQjMsIHRoZXkgYXJl
IHJlcGxhY2VkCisgICAgICAgIHdpdGggVmFyaWFibGVzLiBJbiBBaXIsIHRoZXkgYXJlIHJlcGxh
Y2VkIHdpdGggYSBkaWZmZXJlbnQgc3RhY2sgc2xvdCBraW5kLCBjYWxsZWQgU3BpbGwuCisgICAg
ICAgIFRoZXJlIGlzIG5vIHN1Y2ggdGhpbmcgYXMgc3RhY2sgc2xvdCBraW5kcyBpbiBCMyBhbnlt
b3JlLCBhbGwgQjMgc3RhY2sgc2xvdHMgYXJlIGxvY2tlZC4gSW4KKyAgICAgICAgQWlyLCB0aGVy
ZSBpcyBzdGlsbCB0aGUgY29uY2VwdCBvZiBzdGFjayBzbG90IGtpbmQgLSBMb2NrZWQgb3IgU3Bp
bGwuCisKKyAgICAgICAgQjMgVmFyaWFibGVzIGFyZSBhd2Vzb21lLiBUaGV5IGFyZSBleGFjdGx5
IHdoYXQgdGhleSBzZWVtIHRvIGJlLiBUaGV5IGhhdmUgYSB0eXBlLiBUaGV5IGFyZQorICAgICAg
ICBkZWNsYXJlZCBhdCB0aGUgdG9wIGxldmVsIGluIHRoZSBQcm9jZWR1cmUuIFlvdSBjYW4gYWNj
ZXNzIHRoZW0gd2l0aCBuZXcgb3Bjb2RlcywgR2V0IGFuZAorICAgICAgICBTZXQuIFRoaXMgZ3Jl
YXRseSBzaW1wbGlmaWVzIGRlbW90aW5nIFNTQSB2YWx1ZXMgdG8gdmFyaWFibGVzIGFuZCBwcm9t
b3RpbmcgdGhlbSBiYWNrIHRvCisgICAgICAgIFNTQS4gSSBldmVuIG1hZGUgdGhlIGluc3RydWN0
aW9uIHNlbGVjdG9yIGRvIHRoZSByaWdodCB0aGluZ3MgZm9yIHZhcmlhYmxlcywgd2hpY2ggbWVh
bnMKKyAgICAgICAgdGhhdCBpbnRyb2R1Y2luZyB2YXJpYWJsZXMgd29uJ3QgaHVydCBpbnN0cnVj
dGlvbiBzZWxlY3Rpb24gKHRoZXJlIHdpbGwgYmUgZXh0cmEgbW92ZXMsIGJ1dAorICAgICAgICBJ
UkMgd2lsbCBraWxsIHRoZW0pLiBJdCdzIGdyZWF0IHRvIGhhdmUgbm9uLVNTQSB2YXJpYWJsZXMg
YXMgYW4gZXhwbGljaXQgY29uY2VwdCBpbiBJUgorICAgICAgICBiZWNhdXNlIGl0IG1lYW5zIHRo
YXQgeW91IGRvbid0IGhhdmUgdG8gZG8gYW55IG1hZ2ljIHRvIHVzZSB0aGVtIC0gdGhleSBKdXN0
IFdvcmsuCisKKyAgICAgICAgQWlyIHNwaWxsIHNsb3RzIGJlaGF2ZSBhbG1vc3QgbGlrZSBhbm9u
eW1vdXMgc3RhY2sgc2xvdHMsIHdpdGggb25lIGV4Y2VwdGlvbjogeW91IGNhbm5vdAorICAgICAg
ICBlc2NhcGUgdGhlbS4gV2UgdmFsaWRhdGUgdGhpcyBieSBtYWtpbmcgaXQgaWxsZWdhbCB0byBV
c2VBZGRyIG9uIGEgc3BpbGwgc2xvdC4gVGhpcyByZW1vdmVzCisgICAgICAgIHRoZSBuZWVkIHRv
IGFuc3dlciBhd2t3YXJkIHF1ZXN0aW9ucyBsaWtlOiBkb2VzIGEgMzItYml0IERlZiBvbiBhIHBv
aW50ZXIgdGhhdCBtYXkgcG9pbnQgdG8KKyAgICAgICAgYSA2NC1iaXQgc3BpbGwgc2xvdCBkbyBh
bnl0aGluZyB0byB0aGUgMzIgYml0cyBhYm92ZSB0aGUgcG9pbnRlcj8gIERvZXMgaXQgd3JpdGUg
emVybyB0byBpdD8KKyAgICAgICAgRG9lcyBpdCB3cml0ZSB6ZXJvIHRvIGl0IGp1c3Qgd2hlbiB0
aGUgcG9pbnRlciBhY3R1YWxseSBwb2ludHMgdG8gYSBzcGlsbCBzbG90IG9yIGFsd2F5cz8KKyAg
ICAgICAgVGhlc2UgYXJlIHNpbGx5IHF1ZXN0aW9ucywgYW5kIHdlIGRvbid0IGhhdmUgdG8gYW5z
d2VyIHRoZW0gYmVjYXVzZSB0aGUgb25seSB3YXkgdG8gcmVmZXIgdG8KKyAgICAgICAgYSBzcGls
bCBzbG90IGlzIGRpcmVjdGx5LiBObyBlc2NhcGluZyBtZWFucyBubyBhbGlhc2luZy4KKworICAg
ICAgICBUaGlzIGRvZXNuJ3QgYWZmZWN0IHBlcmZvcm1hbmNlLiBJdCBqdXN0IG1ha2VzIHRoZSBj
b21waWxlciBtb3JlIGZ1biB0byB3b3JrIHdpdGggYnkKKyAgICAgICAgcmVtb3Zpbmcgc29tZSBj
b2duaXRpdmUgZGlzc29uYW5jZS4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAg
ICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICog
YjMvQjNBcmd1bWVudFJlZ1ZhbHVlLmg6CisgICAgICAgICogYjMvQjNDQ2FsbFZhbHVlLmg6Cisg
ICAgICAgICogYjMvQjNDaGVja1ZhbHVlLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OkNoZWNrVmFs
dWU6OmNsb25lSW1wbCk6CisgICAgICAgIChKU0M6OkIzOjpDaGVja1ZhbHVlOjpDaGVja1ZhbHVl
KToKKyAgICAgICAgKiBiMy9CM0NoZWNrVmFsdWUuaDoKKyAgICAgICAgKiBiMy9CM0NvbnN0MzJW
YWx1ZS5oOgorICAgICAgICAqIGIzL0IzQ29uc3Q2NFZhbHVlLmg6CisgICAgICAgICogYjMvQjND
b25zdERvdWJsZVZhbHVlLmg6CisgICAgICAgICogYjMvQjNDb25zdEZsb2F0VmFsdWUuaDoKKyAg
ICAgICAgKiBiMy9CM0NvbnN0UHRyVmFsdWUuaDoKKyAgICAgICAgKEpTQzo6QjM6OkNvbnN0UHRy
VmFsdWU6OkNvbnN0UHRyVmFsdWUpOgorICAgICAgICAqIGIzL0IzQ29udHJvbFZhbHVlLmNwcDoK
KyAgICAgICAgKEpTQzo6QjM6OkNvbnRyb2xWYWx1ZTo6Y29udmVydFRvSnVtcCk6CisgICAgICAg
IChKU0M6OkIzOjpDb250cm9sVmFsdWU6OmNvbnZlcnRUb09vcHMpOgorICAgICAgICAoSlNDOjpC
Mzo6Q29udHJvbFZhbHVlOjpkdW1wTWV0YSk6CisgICAgICAgICogYjMvQjNDb250cm9sVmFsdWUu
aDoKKyAgICAgICAgKiBiMy9CM0VmZmVjdHMuY3BwOgorICAgICAgICAoSlNDOjpCMzo6RWZmZWN0
czo6aW50ZXJmZXJlcyk6CisgICAgICAgIChKU0M6OkIzOjpFZmZlY3RzOjpkdW1wKToKKyAgICAg
ICAgKiBiMy9CM0VmZmVjdHMuaDoKKyAgICAgICAgKEpTQzo6QjM6OkVmZmVjdHM6Om11c3RFeGVj
dXRlKToKKyAgICAgICAgKiBiMy9CM0VsaW1pbmF0ZUNvbW1vblN1YmV4cHJlc3Npb25zLmNwcDoK
KyAgICAgICAgKiBiMy9CM0ZpeFNTQS5jcHA6CisgICAgICAgIChKU0M6OkIzOjpkZW1vdGVWYWx1
ZXMpOgorICAgICAgICAoSlNDOjpCMzo6Zml4U1NBKToKKyAgICAgICAgKiBiMy9CM0ZpeFNTQS5o
OgorICAgICAgICAqIGIzL0IzSW5kZXhNYXAuaDoKKyAgICAgICAgKEpTQzo6QjM6OkluZGV4TWFw
OjpyZXNpemUpOgorICAgICAgICAoSlNDOjpCMzo6SW5kZXhNYXA6OmNsZWFyKToKKyAgICAgICAg
KEpTQzo6QjM6OkluZGV4TWFwOjpzaXplKToKKyAgICAgICAgKEpTQzo6QjM6OkluZGV4TWFwOjpv
cGVyYXRvcltdKToKKyAgICAgICAgKiBiMy9CM0luZGV4U2V0Lmg6CisgICAgICAgIChKU0M6OkIz
OjpJbmRleFNldDo6Y29udGFpbnMpOgorICAgICAgICAoSlNDOjpCMzo6SW5kZXhTZXQ6OnNpemUp
OgorICAgICAgICAoSlNDOjpCMzo6SW5kZXhTZXQ6OmlzRW1wdHkpOgorICAgICAgICAqIGIzL0Iz
TG93ZXJUb0Fpci5jcHA6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OnJ1bik6
CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6Omxvd2VyKToKKyAgICAgICAgKiBi
My9CM01lbW9yeVZhbHVlLmg6CisgICAgICAgICogYjMvQjNPcGNvZGUuY3BwOgorICAgICAgICAo
V1RGOjpwcmludEludGVybmFsKToKKyAgICAgICAgKiBiMy9CM09wY29kZS5oOgorICAgICAgICAq
IGIzL0IzUGF0Y2hwb2ludFZhbHVlLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OlBhdGNocG9pbnRW
YWx1ZTo6Y2xvbmVJbXBsKToKKyAgICAgICAgKEpTQzo6QjM6OlBhdGNocG9pbnRWYWx1ZTo6UGF0
Y2hwb2ludFZhbHVlKToKKyAgICAgICAgKiBiMy9CM1BhdGNocG9pbnRWYWx1ZS5oOgorICAgICAg
ICAqIGIzL0IzUHJvY2VkdXJlLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6UHJv
Y2VkdXJlKToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6YWRkQmxvY2spOgorICAgICAg
ICAoSlNDOjpCMzo6UHJvY2VkdXJlOjphZGRTdGFja1Nsb3QpOgorICAgICAgICAoSlNDOjpCMzo6
UHJvY2VkdXJlOjphZGRWYXJpYWJsZSk6CisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6OmNs
b25lKToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6YWRkSW50Q29uc3RhbnQpOgorICAg
ICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpkdW1wKToKKyAgICAgICAgKEpTQzo6QjM6OlByb2Nl
ZHVyZTo6ZGVsZXRlU3RhY2tTbG90KToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6ZGVs
ZXRlVmFyaWFibGUpOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpkZWxldGVWYWx1ZSk6
CisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6OmRlbGV0ZU9ycGhhbnMpOgorICAgICAgICAo
SlNDOjpCMzo6UHJvY2VkdXJlOjpjYWxsZWVTYXZlUmVnaXN0ZXJzKToKKyAgICAgICAgKEpTQzo6
QjM6OlByb2NlZHVyZTo6YWRkVmFsdWVJbXBsKToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVy
ZTo6c2V0QmxvY2tPcmRlckltcGwpOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjphZGRB
bm9ueW1vdXNTdGFja1Nsb3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJl
OjphZGRTdGFja1Nsb3RJbmRleCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1
cmU6OmFkZFZhbHVlSW5kZXgpOiBEZWxldGVkLgorICAgICAgICAqIGIzL0IzUHJvY2VkdXJlLmg6
CisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6OnNldEJsb2NrT3JkZXIpOgorICAgICAgICAo
SlNDOjpCMzo6UHJvY2VkdXJlOjpzdGFja1Nsb3RzKToKKyAgICAgICAgKEpTQzo6QjM6OlByb2Nl
ZHVyZTo6dmFyaWFibGVzKToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6dmFsdWVzKToK
KyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6U3RhY2tTbG90c0NvbGxlY3Rpb246OlN0YWNr
U2xvdHNDb2xsZWN0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6
U3RhY2tTbG90c0NvbGxlY3Rpb246OnNpemUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCMzo6
UHJvY2VkdXJlOjpTdGFja1Nsb3RzQ29sbGVjdGlvbjo6YXQpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpCMzo6UHJvY2VkdXJlOjpTdGFja1Nsb3RzQ29sbGVjdGlvbjo6b3BlcmF0b3JbXSk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6OlN0YWNrU2xvdHNDb2xsZWN0aW9u
OjppdGVyYXRvcjo6aXRlcmF0b3IpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCMzo6UHJvY2Vk
dXJlOjpTdGFja1Nsb3RzQ29sbGVjdGlvbjo6aXRlcmF0b3I6Om9wZXJhdG9yKik6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6OlN0YWNrU2xvdHNDb2xsZWN0aW9uOjppdGVy
YXRvcjo6b3BlcmF0b3IrKyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6
OlN0YWNrU2xvdHNDb2xsZWN0aW9uOjppdGVyYXRvcjo6b3BlcmF0b3I9PSk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6OlN0YWNrU2xvdHNDb2xsZWN0aW9uOjppdGVyYXRv
cjo6b3BlcmF0b3IhPSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6OlN0
YWNrU2xvdHNDb2xsZWN0aW9uOjppdGVyYXRvcjo6ZmluZE5leHQpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpTdGFja1Nsb3RzQ29sbGVjdGlvbjo6YmVnaW4pOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpTdGFja1Nsb3RzQ29sbGVjdGlvbjo6
ZW5kKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6VmFsdWVzQ29sbGVj
dGlvbjo6VmFsdWVzQ29sbGVjdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkIzOjpQcm9j
ZWR1cmU6OlZhbHVlc0NvbGxlY3Rpb246Oml0ZXJhdG9yOjppdGVyYXRvcik6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6OlZhbHVlc0NvbGxlY3Rpb246Oml0ZXJhdG9yOjpv
cGVyYXRvciopOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpWYWx1ZXND
b2xsZWN0aW9uOjppdGVyYXRvcjo6b3BlcmF0b3IrKyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OkIzOjpQcm9jZWR1cmU6OlZhbHVlc0NvbGxlY3Rpb246Oml0ZXJhdG9yOjpvcGVyYXRvcj09KTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6VmFsdWVzQ29sbGVjdGlvbjo6
aXRlcmF0b3I6Om9wZXJhdG9yIT0pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCMzo6UHJvY2Vk
dXJlOjpWYWx1ZXNDb2xsZWN0aW9uOjppdGVyYXRvcjo6ZmluZE5leHQpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpWYWx1ZXNDb2xsZWN0aW9uOjpiZWdpbik6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6OlZhbHVlc0NvbGxlY3Rpb246OmVuZCk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6OlZhbHVlc0NvbGxlY3Rpb246
OnNpemUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpWYWx1ZXNDb2xs
ZWN0aW9uOjphdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6OlZhbHVl
c0NvbGxlY3Rpb246Om9wZXJhdG9yW10pOiBEZWxldGVkLgorICAgICAgICAqIGIzL0IzUHJvY2Vk
dXJlSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjphZGQpOgorICAgICAg
ICAqIGIzL0IzUmVkdWNlU3RyZW5ndGguY3BwOgorICAgICAgICAqIGIzL0IzU2xvdEJhc2VWYWx1
ZS5oOgorICAgICAgICAqIGIzL0IzU3BhcnNlQ29sbGVjdGlvbi5oOiBBZGRlZC4KKyAgICAgICAg
KEpTQzo6QjM6OlNwYXJzZUNvbGxlY3Rpb246OlNwYXJzZUNvbGxlY3Rpb24pOgorICAgICAgICAo
SlNDOjpCMzo6U3BhcnNlQ29sbGVjdGlvbjo6YWRkKToKKyAgICAgICAgKEpTQzo6QjM6OlNwYXJz
ZUNvbGxlY3Rpb246OmFkZE5ldyk6CisgICAgICAgIChKU0M6OkIzOjpTcGFyc2VDb2xsZWN0aW9u
OjpyZW1vdmUpOgorICAgICAgICAoSlNDOjpCMzo6U3BhcnNlQ29sbGVjdGlvbjo6c2l6ZSk6Cisg
ICAgICAgIChKU0M6OkIzOjpTcGFyc2VDb2xsZWN0aW9uOjppc0VtcHR5KToKKyAgICAgICAgKEpT
Qzo6QjM6OlNwYXJzZUNvbGxlY3Rpb246OmF0KToKKyAgICAgICAgKEpTQzo6QjM6OlNwYXJzZUNv
bGxlY3Rpb246Om9wZXJhdG9yW10pOgorICAgICAgICAoSlNDOjpCMzo6U3BhcnNlQ29sbGVjdGlv
bjo6aXRlcmF0b3I6Oml0ZXJhdG9yKToKKyAgICAgICAgKEpTQzo6QjM6OlNwYXJzZUNvbGxlY3Rp
b246Oml0ZXJhdG9yOjpvcGVyYXRvciopOgorICAgICAgICAoSlNDOjpCMzo6U3BhcnNlQ29sbGVj
dGlvbjo6aXRlcmF0b3I6Om9wZXJhdG9yKyspOgorICAgICAgICAoSlNDOjpCMzo6U3BhcnNlQ29s
bGVjdGlvbjo6aXRlcmF0b3I6Om9wZXJhdG9yPT0pOgorICAgICAgICAoSlNDOjpCMzo6U3BhcnNl
Q29sbGVjdGlvbjo6aXRlcmF0b3I6Om9wZXJhdG9yIT0pOgorICAgICAgICAoSlNDOjpCMzo6U3Bh
cnNlQ29sbGVjdGlvbjo6aXRlcmF0b3I6OmZpbmROZXh0KToKKyAgICAgICAgKEpTQzo6QjM6OlNw
YXJzZUNvbGxlY3Rpb246OmJlZ2luKToKKyAgICAgICAgKEpTQzo6QjM6OlNwYXJzZUNvbGxlY3Rp
b246OmVuZCk6CisgICAgICAgICogYjMvQjNTdGFja1Nsb3QuY3BwOgorICAgICAgICAoSlNDOjpC
Mzo6U3RhY2tTbG90OjpkZWVwRHVtcCk6CisgICAgICAgIChKU0M6OkIzOjpTdGFja1Nsb3Q6OlN0
YWNrU2xvdCk6CisgICAgICAgICogYjMvQjNTdGFja1Nsb3QuaDoKKyAgICAgICAgKEpTQzo6QjM6
OlN0YWNrU2xvdDo6Ynl0ZVNpemUpOgorICAgICAgICAoSlNDOjpCMzo6U3RhY2tTbG90OjppbmRl
eCk6CisgICAgICAgIChKU0M6OkIzOjpTdGFja1Nsb3Q6OnNldE9mZnNldEZyb21GUCk6CisgICAg
ICAgIChKU0M6OkIzOjpTdGFja1Nsb3Q6OmtpbmQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpC
Mzo6U3RhY2tTbG90Ojppc0xvY2tlZCk6IERlbGV0ZWQuCisgICAgICAgICogYjMvQjNTdGFja1Ns
b3RLaW5kLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBiMy9CM1N0YWNrU2xvdEtpbmQuaDogUmVt
b3ZlZC4KKyAgICAgICAgKiBiMy9CM1N0YWNrbWFwVmFsdWUuY3BwOgorICAgICAgICAoSlNDOjpC
Mzo6U3RhY2ttYXBWYWx1ZTo6ZHVtcE1ldGEpOgorICAgICAgICAoSlNDOjpCMzo6U3RhY2ttYXBW
YWx1ZTo6U3RhY2ttYXBWYWx1ZSk6CisgICAgICAgICogYjMvQjNTdGFja21hcFZhbHVlLmg6Cisg
ICAgICAgICogYjMvQjNTd2l0Y2hWYWx1ZS5jcHA6CisgICAgICAgIChKU0M6OkIzOjpTd2l0Y2hW
YWx1ZTo6Y2xvbmVJbXBsKToKKyAgICAgICAgKEpTQzo6QjM6OlN3aXRjaFZhbHVlOjpTd2l0Y2hW
YWx1ZSk6CisgICAgICAgICogYjMvQjNTd2l0Y2hWYWx1ZS5oOgorICAgICAgICAqIGIzL0IzVXBz
aWxvblZhbHVlLmg6CisgICAgICAgICogYjMvQjNWYWxpZGF0ZS5jcHA6CisgICAgICAgICogYjMv
QjNWYWx1ZS5jcHA6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZTo6cmVwbGFjZVdpdGhJZGVudGl0
eSk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZTo6cmVwbGFjZVdpdGhOb3ApOgorICAgICAgICAo
SlNDOjpCMzo6VmFsdWU6OnJlcGxhY2VXaXRoUGhpKToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVl
OjpkdW1wKToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjplZmZlY3RzKToKKyAgICAgICAgKEpT
Qzo6QjM6OlZhbHVlOjpjaGVja09wY29kZSk6CisgICAgICAgICogYjMvQjNWYWx1ZS5oOgorICAg
ICAgICAqIGIzL0IzVmFyaWFibGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlZhcmlh
YmxlOjp+VmFyaWFibGUpOgorICAgICAgICAoSlNDOjpCMzo6VmFyaWFibGU6OmR1bXApOgorICAg
ICAgICAoSlNDOjpCMzo6VmFyaWFibGU6OmRlZXBEdW1wKToKKyAgICAgICAgKEpTQzo6QjM6OlZh
cmlhYmxlOjpWYXJpYWJsZSk6CisgICAgICAgICogYjMvQjNWYXJpYWJsZS5oOiBBZGRlZC4KKyAg
ICAgICAgKEpTQzo6QjM6OlZhcmlhYmxlOjp0eXBlKToKKyAgICAgICAgKEpTQzo6QjM6OlZhcmlh
YmxlOjppbmRleCk6CisgICAgICAgIChKU0M6OkIzOjpEZWVwVmFyaWFibGVEdW1wOjpEZWVwVmFy
aWFibGVEdW1wKToKKyAgICAgICAgKEpTQzo6QjM6OkRlZXBWYXJpYWJsZUR1bXA6OmR1bXApOgor
ICAgICAgICAoSlNDOjpCMzo6ZGVlcER1bXApOgorICAgICAgICAqIGIzL0IzVmFyaWFibGVWYWx1
ZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6VmFyaWFibGVWYWx1ZTo6flZhcmlhYmxl
VmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6VmFyaWFibGVWYWx1ZTo6ZHVtcE1ldGEpOgorICAg
ICAgICAoSlNDOjpCMzo6VmFyaWFibGVWYWx1ZTo6Y2xvbmVJbXBsKToKKyAgICAgICAgKEpTQzo6
QjM6OlZhcmlhYmxlVmFsdWU6OlZhcmlhYmxlVmFsdWUpOgorICAgICAgICAqIGIzL0IzVmFyaWFi
bGVWYWx1ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBiMy9haXIvQWlyQWxsb2NhdGVTdGFjay5jcHA6
CisgICAgICAgIChKU0M6OkIzOjpBaXI6OmFsbG9jYXRlU3RhY2spOgorICAgICAgICAqIGIzL2Fp
ci9BaXJDb2RlLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6YWRkU3RhY2tTbG90
KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6YWRkU3BlY2lhbCk6CisgICAgICAgIChK
U0M6OkIzOjpBaXI6OkNvZGU6OmNDYWxsU3BlY2lhbCk6CisgICAgICAgICogYjMvYWlyL0FpckNv
ZGUuaDoKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6YmVnaW4pOgorICAgICAgICAoSlND
OjpCMzo6QWlyOjpDb2RlOjplbmQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpzdGFj
a1Nsb3RzKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6c3BlY2lhbHMpOgorICAgICAg
ICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpmb3JBbGxUbXBzKToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6Q29kZTo6U3RhY2tTbG90c0NvbGxlY3Rpb246OlN0YWNrU2xvdHNDb2xsZWN0aW9uKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6U3RhY2tTbG90c0NvbGxlY3Rpb246
OnNpemUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpTdGFja1Nsb3Rz
Q29sbGVjdGlvbjo6YXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpT
dGFja1Nsb3RzQ29sbGVjdGlvbjo6b3BlcmF0b3JbXSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OkIzOjpBaXI6OkNvZGU6OlN0YWNrU2xvdHNDb2xsZWN0aW9uOjppdGVyYXRvcjo6aXRlcmF0b3Ip
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpTdGFja1Nsb3RzQ29sbGVj
dGlvbjo6aXRlcmF0b3I6Om9wZXJhdG9yKik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkIzOjpB
aXI6OkNvZGU6OlN0YWNrU2xvdHNDb2xsZWN0aW9uOjppdGVyYXRvcjo6b3BlcmF0b3IrKyk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OlN0YWNrU2xvdHNDb2xsZWN0aW9u
OjppdGVyYXRvcjo6b3BlcmF0b3I9PSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6
OkNvZGU6OlN0YWNrU2xvdHNDb2xsZWN0aW9uOjppdGVyYXRvcjo6b3BlcmF0b3IhPSk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OlN0YWNrU2xvdHNDb2xsZWN0aW9uOjpi
ZWdpbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OlN0YWNrU2xvdHND
b2xsZWN0aW9uOjplbmQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpT
cGVjaWFsc0NvbGxlY3Rpb246OlNwZWNpYWxzQ29sbGVjdGlvbik6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OkIzOjpBaXI6OkNvZGU6OlNwZWNpYWxzQ29sbGVjdGlvbjo6c2l6ZSk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OlNwZWNpYWxzQ29sbGVjdGlvbjo6YXQpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpTcGVjaWFsc0NvbGxlY3Rpb246
Om9wZXJhdG9yW10pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpTcGVj
aWFsc0NvbGxlY3Rpb246Oml0ZXJhdG9yOjppdGVyYXRvcik6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OkIzOjpBaXI6OkNvZGU6OlNwZWNpYWxzQ29sbGVjdGlvbjo6aXRlcmF0b3I6Om9wZXJhdG9y
Kik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OlNwZWNpYWxzQ29sbGVj
dGlvbjo6aXRlcmF0b3I6Om9wZXJhdG9yKyspOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpDb2RlOjpTcGVjaWFsc0NvbGxlY3Rpb246Oml0ZXJhdG9yOjpvcGVyYXRvcj09KTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6U3BlY2lhbHNDb2xsZWN0aW9uOjpp
dGVyYXRvcjo6b3BlcmF0b3IhPSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNv
ZGU6OlNwZWNpYWxzQ29sbGVjdGlvbjo6YmVnaW4pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpDb2RlOjpTcGVjaWFsc0NvbGxlY3Rpb246OmVuZCk6IERlbGV0ZWQuCisgICAgICAg
ICogYjMvYWlyL0FpckZpeE9idmlvdXNTcGlsbHMuY3BwOgorICAgICAgICAqIGIzL2Fpci9BaXJJ
bnN0SW5saW5lcy5oOgorICAgICAgICAqIGIzL2Fpci9BaXJJdGVyYXRlZFJlZ2lzdGVyQ29hbGVz
Y2luZy5jcHA6CisgICAgICAgICogYjMvYWlyL0FpckxpdmVuZXNzLmg6CisgICAgICAgICogYjMv
YWlyL0Fpckxvd2VyQWZ0ZXJSZWdBbGxvYy5jcHA6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Omxv
d2VyQWZ0ZXJSZWdBbGxvYyk6CisgICAgICAgICogYjMvYWlyL0FpclNwZWNpYWwuY3BwOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpTcGVjaWFsOjpTcGVjaWFsKToKKyAgICAgICAgKiBiMy9haXIv
QWlyU3BlY2lhbC5oOgorICAgICAgICAqIGIzL2Fpci9BaXJTcGlsbEV2ZXJ5dGhpbmcuY3BwOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpzcGlsbEV2ZXJ5dGhpbmcpOgorICAgICAgICAqIGIzL2Fp
ci9BaXJTdGFja1Nsb3QuY3BwOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpTdGFja1Nsb3Q6OmR1
bXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpTdGFja1Nsb3Q6OmRlZXBEdW1wKToKKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6U3RhY2tTbG90OjpTdGFja1Nsb3QpOgorICAgICAgICAqIGIzL2Fp
ci9BaXJTdGFja1Nsb3QuaDoKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6U3RhY2tTbG90OjpieXRl
U2l6ZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlN0YWNrU2xvdDo6a2luZCk6CisgICAgICAg
IChKU0M6OkIzOjpBaXI6OlN0YWNrU2xvdDo6aXNMb2NrZWQpOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpTdGFja1Nsb3Q6OmlzU3BpbGwpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpTdGFja1Ns
b3Q6OmluZGV4KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6U3RhY2tTbG90OjplbnN1cmVTaXpl
KToKKyAgICAgICAgKiBiMy9haXIvQWlyU3RhY2tTbG90S2luZC5jcHA6IENvcGllZCBmcm9tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrU2xvdEtpbmQuY3BwLgorICAgICAgICAoV1RG
OjpwcmludEludGVybmFsKToKKyAgICAgICAgKiBiMy9haXIvQWlyU3RhY2tTbG90S2luZC5oOiBD
b3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja1Nsb3RLaW5kLmguCisg
ICAgICAgICogYjMvYWlyL29wY29kZV9nZW5lcmF0b3IucmI6CisgICAgICAgICogYjMvYWlyL3Rl
c3RhaXIuY3BwOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjp0ZXN0U2h1ZmZsZUJyb2FkY2FzdEFs
bFJlZ3MpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjp0ZXN0U2h1ZmZsZVNoaWZ0QWxsUmVncyk6
CisgICAgICAgIChKU0M6OkIzOjpBaXI6OnRlc3RTaHVmZmxlUm90YXRlQWxsUmVncyk6CisgICAg
ICAgICogYjMvdGVzdGIzLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RTdGFja1Nsb3QpOgor
ICAgICAgICAoSlNDOjpCMzo6dGVzdFN0b3JlTG9hZFN0YWNrU2xvdCk6CisgICAgICAgICogZnRs
L0ZUTEIzT3V0cHV0LmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpPdXRwdXQ6OmxvY2tlZFN0YWNr
U2xvdCk6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0OjpuZWcpOgorICAgICAgICAqIGZ0bC9G
VExMb3dlckRGR1RvTExWTS5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1Rv
TExWTTo6Y29tcGlsZUludmFsaWRhdGlvblBvaW50KToKKwogMjAxNi0wMi0wMSAgQ2hyaXMgRHVt
ZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIG9iamVjdC5fX2xvb2t1cEdldHRlcl9f
KCkgLyBvYmplY3QuX19sb29rdXBTZXR0ZXJfXygpIGRvZXMgbm90IHdvcmsgZm9yIG5hdGl2ZSBi
aW5kaW5ncwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24g
MTk2MDExKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5n
IGNvcHkpCkBAIC05Nyw2ICs5Nyw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAg
YjMvYWlyL0FpclNwZWNpYWwuY3BwCiAgICAgYjMvYWlyL0FpclNwaWxsRXZlcnl0aGluZy5jcHAK
ICAgICBiMy9haXIvQWlyU3RhY2tTbG90LmNwcAorICAgIGIzL2Fpci9BaXJTdGFja1Nsb3RLaW5k
LmNwcAogICAgIGIzL2Fpci9BaXJUbXAuY3BwCiAgICAgYjMvYWlyL0FpclRtcFdpZHRoLmNwcAog
ICAgIGIzL2Fpci9BaXJWYWxpZGF0ZS5jcHAKQEAgLTE1MSw3ICsxNTIsNiBAQCBzZXQoSmF2YVNj
cmlwdENvcmVfU09VUkNFUwogICAgIGIzL0IzU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zLmNwcAog
ICAgIGIzL0IzU3RhY2ttYXBTcGVjaWFsLmNwcAogICAgIGIzL0IzU3RhY2ttYXBWYWx1ZS5jcHAK
LSAgICBiMy9CM1N0YWNrU2xvdEtpbmQuY3BwCiAgICAgYjMvQjNTdGFja1Nsb3QuY3BwCiAgICAg
YjMvQjNTd2l0Y2hDYXNlLmNwcAogICAgIGIzL0IzU3dpdGNoVmFsdWUuY3BwCkBAIC0xNjMsNiAr
MTYzLDggQEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBiMy9CM1ZhbHVlLmNwcAog
ICAgIGIzL0IzVmFsdWVLZXkuY3BwCiAgICAgYjMvQjNWYWx1ZVJlcC5jcHAKKyAgICBiMy9CM1Zh
cmlhYmxlLmNwcAorICAgIGIzL0IzVmFyaWFibGVWYWx1ZS5jcHAKIAogICAgIGJpbmRpbmdzL1Nj
cmlwdEZ1bmN0aW9uQ2FsbC5jcHAKICAgICBiaW5kaW5ncy9TY3JpcHRPYmplY3QuY3BwCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTk2MDExKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHdvcmtpbmcgY29weSkKQEAgLTIzOSw2ICsyMzksMTMgQEAKIAkJMEYyQjlDRjcxOUQwQkFDMTAw
QjFEMUI1IC8qIEZUTEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCOUNGMTE5RDBCQUMxMDBCMUQx
QjUgLyogRlRMRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjJCOUNGODE5RDBCQUMxMDBCMUQx
QjUgLyogRlRMT3BlcmF0aW9ucy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjJCOUNGMjE5RDBCQUMxMDBCMUQxQjUgLyogRlRMT3BlcmF0aW9ucy5j
cHAgKi87IH07CiAJCTBGMkI5Q0Y5MTlEMEJBQzEwMEIxRDFCNSAvKiBGVExPcGVyYXRpb25zLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCOUNGMzE5
RDBCQUMxMDBCMUQxQjUgLyogRlRMT3BlcmF0aW9ucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkJCRDk2MUM1RkYzRjUwMDIzRUYyMyAvKiBC
M1NwYXJzZUNvbGxlY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGMkJCRDkxMUM1RkYzRjUwMDIzRUYyMyAvKiBCM1NwYXJzZUNvbGxlY3Rpb24u
aCAqLzsgfTsKKwkJMEYyQkJEOTcxQzVGRjNGNTAwMjNFRjIzIC8qIEIzVmFyaWFibGUuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQkJEOTIxQzVG
RjNGNTAwMjNFRjIzIC8qIEIzVmFyaWFibGUuY3BwICovOyB9OworCQkwRjJCQkQ5ODFDNUZGM0Y1
MDAyM0VGMjMgLyogQjNWYXJpYWJsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEYyQkJEOTMxQzVGRjNGNTAwMjNFRjIzIC8qIEIzVmFyaWFibGUuaCAq
LzsgfTsKKwkJMEYyQkJEOTkxQzVGRjNGNTAwMjNFRjIzIC8qIEIzVmFyaWFibGVWYWx1ZS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCQkQ5NDFD
NUZGM0Y1MDAyM0VGMjMgLyogQjNWYXJpYWJsZVZhbHVlLmNwcCAqLzsgfTsKKwkJMEYyQkJEOUEx
QzVGRjNGNTAwMjNFRjIzIC8qIEIzVmFyaWFibGVWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQkJEOTUxQzVGRjNGNTAwMjNFRjIzIC8qIEIz
VmFyaWFibGVWYWx1ZS5oICovOyB9OworCQkwRjJCQkQ5RDFDNUZGNDA1MDAyM0VGMjMgLyogQWly
U3RhY2tTbG90S2luZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjJCQkQ5QjFDNUZGNDA1MDAyM0VGMjMgLyogQWlyU3RhY2tTbG90S2luZC5jcHAg
Ki87IH07CisJCTBGMkJCRDlFMUM1RkY0MDUwMDIzRUYyMyAvKiBBaXJTdGFja1Nsb3RLaW5kLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCQkQ5QzFD
NUZGNDA1MDAyM0VGMjMgLyogQWlyU3RhY2tTbG90S2luZC5oICovOyB9OwogCQkwRjJCREMxNTE1
MUM1RDREMDBDRDg5MTAgLyogREZHRml4dXBQaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCREMxMjE1MUM1RDRBMDBDRDg5MTAgLyogREZH
Rml4dXBQaGFzZS5jcHAgKi87IH07CiAJCTBGMkJEQzE2MTUxQzVENEYwMENEODkxMCAvKiBERkdG
aXh1cFBoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjJCREMxMzE1MUM1RDRBMDBDRDg5MTAgLyogREZHRml4dXBQaGFzZS5oICovOyB9OwogCQkw
RjJCREMyMTE1MUU4MDNCMDBDRDg5MTAgLyogREZHSW5zZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCREMxRjE1MUU4MDM4MDBDRDg5
MTAgLyogREZHSW5zZXJ0aW9uU2V0LmggKi87IH07CkBAIC04MzIsOCArODM5LDYgQEAKIAkJMEZF
Qzg1MkQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUHJvY2VkdXJlSW5saW5lcy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RTMxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzUHJvY2VkdXJlSW5saW5lcy5oICovOyB9OwogCQkwRkVDODUzMDFCREFDREFDMDA4
MEZGNzQgLyogQjNTdGFja21hcFNwZWNpYWwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RTYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2tt
YXBTcGVjaWFsLmNwcCAqLzsgfTsKIAkJMEZFQzg1MzExQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3Rh
Y2ttYXBTcGVjaWFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkVDODRFNzFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja21hcFNwZWNpYWwuaCAqLzsg
fTsKLQkJMEZFQzg1MzIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2tTbG90S2luZC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRFODFCREFD
REFDMDA4MEZGNzQgLyogQjNTdGFja1Nsb3RLaW5kLmNwcCAqLzsgfTsKLQkJMEZFQzg1MzMxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzU3RhY2tTbG90S2luZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RTkxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3Rh
Y2tTbG90S2luZC5oICovOyB9OwogCQkwRkVDODUzNDFCREFDREFDMDA4MEZGNzQgLyogQjNTbG90
QmFzZVZhbHVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRUM4NEVBMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Nsb3RCYXNlVmFsdWUuY3BwICovOyB9
OwogCQkwRkVDODUzNTFCREFDREFDMDA4MEZGNzQgLyogQjNTbG90QmFzZVZhbHVlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRFQjFCREFDREFD
MDA4MEZGNzQgLyogQjNTbG90QmFzZVZhbHVlLmggKi87IH07CiAJCTBGRUM4NTM2MUJEQUNEQUMw
MDgwRkY3NCAvKiBCM1N1Y2Nlc3NvckNvbGxlY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEVDMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N1
Y2Nlc3NvckNvbGxlY3Rpb24uaCAqLzsgfTsKQEAgLTI0MzMsNiArMjQzOCwxMyBAQAogCQkwRjJC
OUNGMTE5RDBCQUMxMDBCMUQxQjUgLyogRlRMRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24u
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRlRMRXhpdFRpbWVPYmplY3RNYXRl
cmlhbGl6YXRpb24uaDsgcGF0aCA9IGZ0bC9GVExFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlv
bi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjJCOUNGMjE5RDBCQUMxMDBCMUQx
QjUgLyogRlRMT3BlcmF0aW9ucy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBGVExPcGVyYXRpb25zLmNwcDsgcGF0aCA9IGZ0bC9GVExPcGVyYXRpb25zLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyQjlDRjMxOUQwQkFDMTAwQjFEMUI1IC8qIEZU
TE9wZXJhdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRlRMT3BlcmF0
aW9ucy5oOyBwYXRoID0gZnRsL0ZUTE9wZXJhdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEYyQkJEOTExQzVGRjNGNTAwMjNFRjIzIC8qIEIzU3BhcnNlQ29sbGVjdGlvbi5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM1NwYXJzZUNvbGxlY3Rpb24uaDsg
cGF0aCA9IGIzL0IzU3BhcnNlQ29sbGVjdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRjJCQkQ5MjFDNUZGM0Y1MDAyM0VGMjMgLyogQjNWYXJpYWJsZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM1ZhcmlhYmxlLmNwcDsgcGF0aCA9IGIzL0Iz
VmFyaWFibGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCQkQ5MzFDNUZG
M0Y1MDAyM0VGMjMgLyogQjNWYXJpYWJsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBCM1ZhcmlhYmxlLmg7IHBhdGggPSBiMy9CM1ZhcmlhYmxlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGMkJCRDk0MUM1RkYzRjUwMDIzRUYyMyAvKiBCM1ZhcmlhYmxlVmFs
dWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNWYXJpYWJsZVZh
bHVlLmNwcDsgcGF0aCA9IGIzL0IzVmFyaWFibGVWYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGMkJCRDk1MUM1RkYzRjUwMDIzRUYyMyAvKiBCM1ZhcmlhYmxlVmFsdWUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNWYXJpYWJsZVZhbHVlLmg7IHBh
dGggPSBiMy9CM1ZhcmlhYmxlVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MEYyQkJEOUIxQzVGRjQwNTAwMjNFRjIzIC8qIEFpclN0YWNrU2xvdEtpbmQuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWlyU3RhY2tTbG90S2luZC5jcHA7IHBhdGgg
PSBiMy9haXIvQWlyU3RhY2tTbG90S2luZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGMkJCRDlDMUM1RkY0MDUwMDIzRUYyMyAvKiBBaXJTdGFja1Nsb3RLaW5kLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpclN0YWNrU2xvdEtpbmQuaDsgcGF0aCA9IGIz
L2Fpci9BaXJTdGFja1Nsb3RLaW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
MkJEQzEyMTUxQzVENEEwMENEODkxMCAvKiBERkdGaXh1cFBoYXNlLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0ZpeHVwUGhhc2UuY3BwOyBwYXRoID0gZGZnL0RG
R0ZpeHVwUGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjJCREMxMzE1
MUM1RDRBMDBDRDg5MTAgLyogREZHRml4dXBQaGFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBERkdGaXh1cFBoYXNlLmg7IHBhdGggPSBkZmcvREZHRml4dXBQaGFzZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjJCREMxRjE1MUU4MDM4MDBDRDg5MTAgLyog
REZHSW5zZXJ0aW9uU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0lu
c2VydGlvblNldC5oOyBwYXRoID0gZGZnL0RGR0luc2VydGlvblNldC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtMzAzNSw4ICszMDQ3LDYgQEAKIAkJMEZFQzg0RTMxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzUHJvY2VkdXJlSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBCM1Byb2NlZHVyZUlubGluZXMuaDsgcGF0aCA9IGIzL0IzUHJvY2VkdXJlSW5saW5l
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkVDODRFNjFCREFDREFDMDA4MEZG
NzQgLyogQjNTdGFja21hcFNwZWNpYWwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBuYW1lID0gQjNTdGFja21hcFNwZWNpYWwuY3BwOyBwYXRoID0gYjMvQjNTdGFja21hcFNwZWNp
YWwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkVDODRFNzFCREFDREFDMDA4
MEZGNzQgLyogQjNTdGFja21hcFNwZWNpYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gQjNTdGFja21hcFNwZWNpYWwuaDsgcGF0aCA9IGIzL0IzU3RhY2ttYXBTcGVjaWFsLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGRUM4NEU4MUJEQUNEQUMwMDgwRkY3NCAv
KiBCM1N0YWNrU2xvdEtpbmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gQjNTdGFja1Nsb3RLaW5kLmNwcDsgcGF0aCA9IGIzL0IzU3RhY2tTbG90S2luZC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGRUM4NEU5MUJEQUNEQUMwMDgwRkY3NCAvKiBC
M1N0YWNrU2xvdEtpbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNTdGFj
a1Nsb3RLaW5kLmg7IHBhdGggPSBiMy9CM1N0YWNrU2xvdEtpbmQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEZFQzg0RUExQkRBQ0RBQzAwODBGRjc0IC8qIEIzU2xvdEJhc2VWYWx1
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM1Nsb3RCYXNlVmFs
dWUuY3BwOyBwYXRoID0gYjMvQjNTbG90QmFzZVZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEZFQzg0RUIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU2xvdEJhc2VWYWx1ZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM1Nsb3RCYXNlVmFsdWUuaDsgcGF0
aCA9IGIzL0IzU2xvdEJhc2VWYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RkVDODRFQzFCREFDREFDMDA4MEZGNzQgLyogQjNTdWNjZXNzb3JDb2xsZWN0aW9uLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzU3VjY2Vzc29yQ29sbGVjdGlvbi5oOyBwYXRo
ID0gYjMvQjNTdWNjZXNzb3JDb2xsZWN0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC00ODcwLDYgKzQ4ODAsNyBAQAogCQkJCTBGRUM4NUI4MUJFMTQ2MkYwMDgwRkY3NCAvKiBC
M1JlZHVjZVN0cmVuZ3RoLmggKi8sCiAJCQkJMEZFQzg0RUExQkRBQ0RBQzAwODBGRjc0IC8qIEIz
U2xvdEJhc2VWYWx1ZS5jcHAgKi8sCiAJCQkJMEZFQzg0RUIxQkRBQ0RBQzAwODBGRjc0IC8qIEIz
U2xvdEJhc2VWYWx1ZS5oICovLAorCQkJCTBGMkJCRDkxMUM1RkYzRjUwMDIzRUYyMyAvKiBCM1Nw
YXJzZUNvbGxlY3Rpb24uaCAqLywKIAkJCQkwRjZCOEFEQTFDNEVGQUMzMDA5NjkwNTIgLyogQjNT
U0FDYWxjdWxhdG9yLmNwcCAqLywKIAkJCQkwRjZCOEFEQjFDNEVGQUMzMDA5NjkwNTIgLyogQjNT
U0FDYWxjdWxhdG9yLmggKi8sCiAJCQkJMEYzM0ZDRjUxQzEzNkUyNTAwMzIzRjY3IC8qIEIzU3Rh
Y2ttYXBHZW5lcmF0aW9uUGFyYW1zLmNwcCAqLywKQEAgLTQ4ODAsOCArNDg5MSw2IEBACiAJCQkJ
MEYzMzhERjAxQkU5M0FEMTAwMTNDODhGIC8qIEIzU3RhY2ttYXBWYWx1ZS5oICovLAogCQkJCTBG
OTQ5NTg1MUM1N0Y0NzUwMDQxM0E0OCAvKiBCM1N0YWNrU2xvdC5jcHAgKi8sCiAJCQkJMEY5NDk1
ODYxQzU3RjQ3NTAwNDEzQTQ4IC8qIEIzU3RhY2tTbG90LmggKi8sCi0JCQkJMEZFQzg0RTgxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzU3RhY2tTbG90S2luZC5jcHAgKi8sCi0JCQkJMEZFQzg0RTkxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzU3RhY2tTbG90S2luZC5oICovLAogCQkJCTBGRUM4NEVDMUJEQUNE
QUMwMDgwRkY3NCAvKiBCM1N1Y2Nlc3NvckNvbGxlY3Rpb24uaCAqLywKIAkJCQkwRkVDODRFRDFC
REFDREFDMDA4MEZGNzQgLyogQjNTd2l0Y2hDYXNlLmNwcCAqLywKIAkJCQkwRkVDODRFRTFCREFD
REFDMDA4MEZGNzQgLyogQjNTd2l0Y2hDYXNlLmggKi8sCkBAIC00OTA1LDYgKzQ5MTQsMTAgQEAK
IAkJCQkwRjMzOEUwQTFCRjAyNzZDMDAxM0M4OEYgLyogQjNWYWx1ZUtleUlubGluZXMuaCAqLywK
IAkJCQkwRkVDODRGQzFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZVJlcC5jcHAgKi8sCiAJCQkJ
MEZFQzg0RkQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWVSZXAuaCAqLywKKwkJCQkwRjJCQkQ5
MjFDNUZGM0Y1MDAyM0VGMjMgLyogQjNWYXJpYWJsZS5jcHAgKi8sCisJCQkJMEYyQkJEOTMxQzVG
RjNGNTAwMjNFRjIzIC8qIEIzVmFyaWFibGUuaCAqLywKKwkJCQkwRjJCQkQ5NDFDNUZGM0Y1MDAy
M0VGMjMgLyogQjNWYXJpYWJsZVZhbHVlLmNwcCAqLywKKwkJCQkwRjJCQkQ5NTFDNUZGM0Y1MDAy
M0VGMjMgLyogQjNWYXJpYWJsZVZhbHVlLmggKi8sCiAJCQkJMEZFQzg1QUUxQkRCNUQ1RTAwODBG
Rjc0IC8qIHRlc3RiMy5jcHAgKi8sCiAJCQkpOwogCQkJbmFtZSA9IGIzOwpAQCAtNDk3NSw2ICs0
OTg4LDggQEAKIAkJCQkwRkVDODU2NTFCREFDREM3MDA4MEZGNzQgLyogQWlyU3BpbGxFdmVyeXRo
aW5nLmggKi8sCiAJCQkJMEZFQzg1NjYxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclN0YWNrU2xvdC5j
cHAgKi8sCiAJCQkJMEZFQzg1NjcxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclN0YWNrU2xvdC5oICov
LAorCQkJCTBGMkJCRDlCMUM1RkY0MDUwMDIzRUYyMyAvKiBBaXJTdGFja1Nsb3RLaW5kLmNwcCAq
LywKKwkJCQkwRjJCQkQ5QzFDNUZGNDA1MDAyM0VGMjMgLyogQWlyU3RhY2tTbG90S2luZC5oICov
LAogCQkJCTBGRUM4NTY4MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJUbXAuY3BwICovLAogCQkJCTBG
RUM4NTY5MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJUbXAuaCAqLywKIAkJCQkwRkVDODU2QTFCREFD
REM3MDA4MEZGNzQgLyogQWlyVG1wSW5saW5lcy5oICovLApAQCAtNzEzNCw3ICs3MTQ5LDYgQEAK
IAkJCQkwRkVDODUyRDFCREFDREFDMDA4MEZGNzQgLyogQjNQcm9jZWR1cmVJbmxpbmVzLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRkVDODVCRDFCRTE0NjJGMDA4MEZGNzQgLyogQjNSZWR1Y2VTdHJl
bmd0aC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1MzExQkRBQ0RBQzAwODBGRjc0IC8qIEIz
U3RhY2ttYXBTcGVjaWFsLmggaW4gSGVhZGVycyAqLywKLQkJCQkwRkVDODUzMzFCREFDREFDMDA4
MEZGNzQgLyogQjNTdGFja1Nsb3RLaW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVDODUzNTFC
REFDREFDMDA4MEZGNzQgLyogQjNTbG90QmFzZVZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RkVDODUzNjFCREFDREFDMDA4MEZGNzQgLyogQjNTdWNjZXNzb3JDb2xsZWN0aW9uLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRkVDODUzODFCREFDREFDMDA4MEZGNzQgLyogQjNTd2l0Y2hDYXNlLmgg
aW4gSGVhZGVycyAqLywKQEAgLTcyMTksNiArNzIzMyw3IEBACiAJCQkJMEYxNUYxNUYxNEI3QTcz
RTAwNURFMzdEIC8qIENvbW1vblNsb3dQYXRocy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjU1M0Ez
MzIxN0ExRjFFRTAwOENGNkYzIC8qIENvbW1vblNsb3dQYXRoc0V4Y2VwdGlvbnMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGRDgyRTM5MTQxQUIxNEQwMDE3OUM5NCAvKiBDb21wYWN0SklUQ29kZU1h
cC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQkJEOUUxQzVGRjQwNTAwMjNFRjIzIC8qIEFpclN0
YWNrU2xvdEtpbmQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3RTVBM0E4MTc5NzQzMkQwMEU4OTND
MCAvKiBDb21waWxhdGlvblJlc3VsdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEMzRjQwRTE2
RjVDRDAwQjM0NDYwIC8qIENvbXBsZXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNkZDNzUx
MTk2MTEwQTgwMEUxRDAyRCAvKiBDb21wbGV4R2V0U3RhdHVzLmggaW4gSGVhZGVycyAqLywKQEAg
LTcyOTIsNiArNzMwNyw3IEBACiAJCQkJNDM0MjJBNjMxQzE1OEU2RDAwRTJFQjk4IC8qIEIzQ29u
c3RGbG9hdFZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkZCOTIxQTE2RDAyRUM1MDA1NUE1
REIgLyogREZHQmFzaWNCbG9ja0lubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3RDg5Q0Y0
MTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdCbG9ja0luc2VydGlvblNldC5oIGluIEhlYWRlcnMgKi8s
CisJCQkJMEYyQkJEOTYxQzVGRjNGNTAwMjNFRjIzIC8qIEIzU3BhcnNlQ29sbGVjdGlvbi5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEZDM0NDRkMxOUFEQTQxMDAwNkFDNzJBIC8qIERGR0Jsb2NrTWFw
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkMzQ0NGRDE5QURBNDEwMDA2QUM3MkEgLyogREZHQmxv
Y2tNYXBJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkMzQ0NGRTE5QURBNDEwMDA2QUM3
MkEgLyogREZHQmxvY2tTZXQuaCBpbiBIZWFkZXJzICovLApAQCAtNzU3MSw2ICs3NTg3LDcgQEAK
IAkJCQkwRjJCNjZBRTE3QjZCNTQ1MDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2NkFGMTdCNkI1NDUwMEE3QUUzRiAvKiBHQ0luY29t
aW5nUmVmQ291bnRlZFNldElubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTJBQUJDREU3MThF
RjI5NDIwMDAwMjA5NiAvKiBHQ0xvZ2dpbmcuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkJCRDk4
MUM1RkYzRjUwMDIzRUYyMyAvKiBCM1ZhcmlhYmxlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNTRF
OEVCMDE4QkZGQkJCMDA1NTZEMjggLyogR0NTZWdtZW50ZWRBcnJheS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQTU0RThFQjExOEJGRkJCRTAwNTU2RDI4IC8qIEdDU2VnbWVudGVkQXJyYXlJbmxpbmVz
LmggaW4gSGVhZGVycyAqLywKIAkJCQk5OTU5RTkzMTFCRDE4MjcyMDAxQUE0MTMgLyogZ2VuZXJh
dGUtY29tYmluZWQtaW5zcGVjdG9yLWpzb24ucHkgaW4gSGVhZGVycyAqLywKQEAgLTgxODMsNiAr
ODIwMCw3IEBACiAJCQkJMEY2QjhBREQxQzRFRkFDMzAwOTY5MDUyIC8qIEIzU1NBQ2FsY3VsYXRv
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0IwMjQ3NTkxQjg2OEVCNzAwNTQyNDQwIC8qIFdBU01G
dW5jdGlvblN5bnRheENoZWNrZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTdCMzlGNzZFMUI2MkRF
MzIwMDM2MEZCNCAvKiBXQVNNTW9kdWxlUGFyc2VyLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJC
QkQ5QTFDNUZGM0Y1MDAyM0VGMjMgLyogQjNWYXJpYWJsZVZhbHVlLmggaW4gSGVhZGVycyAqLywK
IAkJCQk3QjM5Rjc3MDFCNjJERTMyMDAzNjBGQjQgLyogV0FTTVJlYWRlci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJRkVEOTRGMkYxNzFFM0UyMzAwQkU3N0E0IC8qIFdhdGNoZG9nLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRjkxOUQyNjE1ODUzQ0UzMDA0QTRFN0QgLyogV2F0Y2hwb2ludC5oIGluIEhl
YWRlcnMgKi8sCkBAIC04ODMxLDcgKzg4NDksNiBAQAogCQkJCTQzNDIyQTYyMUMxNThFNkEwMEUy
RUI5OCAvKiBCM0NvbnN0RmxvYXRWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkVDODVC
QzFCRTE0NjJGMDA4MEZGNzQgLyogQjNSZWR1Y2VTdHJlbmd0aC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRkVDODUzMDFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja21hcFNwZWNpYWwuY3BwIGlu
IFNvdXJjZXMgKi8sCi0JCQkJMEZFQzg1MzIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2tTbG90
S2luZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkVDODUzNDFCREFDREFDMDA4MEZGNzQgLyog
QjNTbG90QmFzZVZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRUM4NTM3MUJEQUNEQUMw
MDgwRkY3NCAvKiBCM1N3aXRjaENhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFQzg1Mzkx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzU3dpdGNoVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC05
MDY3LDYgKzkwODQsNyBAQAogCQkJCTBGQzk3RjQxMTgyMDIxMTkwMDJDOUIyNiAvKiBERkdXYXRj
aHBvaW50Q29sbGVjdGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGREIyQ0U3MTc0
ODMwQTIwMDdCM0MxQiAvKiBERkdXb3JrbGlzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkUw
NTAxNzFBQTkwOTExMDBEMzNCMzMgLyogRGlyZWN0QXJndW1lbnRzLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCTBGMkJCRDlEMUM1RkY0MDUwMDIzRUYyMyAvKiBBaXJTdGFja1Nsb3RLaW5kLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBGRTA1MDE1MUFBOTA5MTEwMEQzM0IzMyAvKiBEaXJlY3RBcmd1
bWVudHNPZmZzZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5RDMzNzAxNjVEQkI5MDAwNUFE
Mzg3IC8qIERpc2Fzc2VtYmxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzA0NDdFRDE3QTBC
RDcwMDBGNTg5OEUgLyogRHVtcENvbnRleHQuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC05NTYyLDEx
ICs5NTgwLDEzIEBACiAJCQkJMkE0RUM5MEIxODYwRDZDMjAwOTRGNzgyIC8qIFdyaXRlQmFycmll
ckJ1ZmZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkM4MTUwQjE0MDQzQzBFMDBDRkE2MDMg
LyogV3JpdGVCYXJyaWVyU3VwcG9ydC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0U1QUIzQTE3
OTlFNEIyMDBEMjgzM0QgLyogWDg2RGlzYXNzZW1ibGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CTBGMkJCRDk3MUM1RkYzRjUwMDIzRUYyMyAvKiBCM1ZhcmlhYmxlLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTg2M0M2RDlDMTUyMTExMUEwMDU4NUU0RSAvKiBZYXJyQ2Fub25pY2FsaXplVUNTMi5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk4NjcwNEI4NDEyREJBMzM3MDBBOUZFN0IgLyogWWFycklu
dGVycHJldGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2NzA0Qjg2MTJEQkEzMzcwMEE5RkU3
QiAvKiBZYXJySklULmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2NzA0Qjg5MTJEQkEzMzcwMEE5
RkU3QiAvKiBZYXJyUGF0dGVybi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NjcwNEI0MjEyREI4
QTgxMDBBOUZFN0IgLyogWWFyclN5bnRheENoZWNrZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
MEYyQkJEOTkxQzVGRjNGNTAwMjNFRjIzIC8qIEIzVmFyaWFibGVWYWx1ZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsK
IAkJfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0FyZ3VtZW50UmVnVmFsdWUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNBcmd1bWVudFJlZ1Zh
bHVlLmgJKHJldmlzaW9uIDE5NjAxMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Fy
Z3VtZW50UmVnVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtNDksOCArNDksOCBAQCBwcm90ZWN0
ZWQ6CiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7CiAKLSAgICBBcmd1bWVu
dFJlZ1ZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcmlnaW4gb3JpZ2luLCBSZWcgcmVnKQotICAgICAg
ICA6IFZhbHVlKGluZGV4LCBDaGVja2VkT3Bjb2RlLCBBcmd1bWVudFJlZywgcmVnLmlzR1BSKCkg
PyBwb2ludGVyVHlwZSgpIDogRG91YmxlLCBvcmlnaW4pCisgICAgQXJndW1lbnRSZWdWYWx1ZShP
cmlnaW4gb3JpZ2luLCBSZWcgcmVnKQorICAgICAgICA6IFZhbHVlKENoZWNrZWRPcGNvZGUsIEFy
Z3VtZW50UmVnLCByZWcuaXNHUFIoKSA/IHBvaW50ZXJUeXBlKCkgOiBEb3VibGUsIG9yaWdpbikK
ICAgICAgICAgLCBtX3JlZyhyZWcpCiAgICAgewogICAgICAgICBBU1NFUlQocmVnLmlzU2V0KCkp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ0NhbGxWYWx1ZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NDYWxsVmFsdWUuaAkocmV2aXNpb24g
MTk2MDExKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ0NhbGxWYWx1ZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00OCwxNSArNDgsMTUgQEAgcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3Mg
UHJvY2VkdXJlOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgotICAgIEND
YWxsVmFsdWUodW5zaWduZWQgaW5kZXgsIFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdpbiwgQXJndW1l
bnRzLi4uIGFyZ3VtZW50cykKLSAgICAgICAgOiBWYWx1ZShpbmRleCwgQ2hlY2tlZE9wY29kZSwg
Q0NhbGwsIHR5cGUsIG9yaWdpbiwgYXJndW1lbnRzLi4uKQorICAgIENDYWxsVmFsdWUoVHlwZSB0
eXBlLCBPcmlnaW4gb3JpZ2luLCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQorICAgICAgICA6IFZh
bHVlKENoZWNrZWRPcGNvZGUsIENDYWxsLCB0eXBlLCBvcmlnaW4sIGFyZ3VtZW50cy4uLikKICAg
ICB7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG51bUNoaWxkcmVuKCkgPj0gMSk7CiAgICAgfQog
CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgotICAgIENDYWxsVmFsdWUodW5z
aWduZWQgaW5kZXgsIFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdpbiwgY29uc3QgRWZmZWN0cyYgZWZm
ZWN0cywgQXJndW1lbnRzLi4uIGFyZ3VtZW50cykKLSAgICAgICAgOiBWYWx1ZShpbmRleCwgQ2hl
Y2tlZE9wY29kZSwgQ0NhbGwsIHR5cGUsIG9yaWdpbiwgYXJndW1lbnRzLi4uKQorICAgIENDYWxs
VmFsdWUoVHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luLCBjb25zdCBFZmZlY3RzJiBlZmZlY3RzLCBB
cmd1bWVudHMuLi4gYXJndW1lbnRzKQorICAgICAgICA6IFZhbHVlKENoZWNrZWRPcGNvZGUsIEND
YWxsLCB0eXBlLCBvcmlnaW4sIGFyZ3VtZW50cy4uLikKICAgICAgICAgLCBlZmZlY3RzKGVmZmVj
dHMpCiAgICAgewogICAgICAgICBSRUxFQVNFX0FTU0VSVChudW1DaGlsZHJlbigpID49IDEpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tWYWx1ZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tWYWx1ZS5jcHAJKHJldmlzaW9u
IDE5NjAxMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrVmFsdWUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00Niw4ICs0Niw4IEBAIFZhbHVlKiBDaGVja1ZhbHVlOjpjbG9uZUlt
cGwoKSBjb25zdAogfQogCiAvLyBVc2UgdGhpcyBmb3JtIGZvciBDaGVja0FkZCwgQ2hlY2tTdWIs
IGFuZCBDaGVja011bC4KLUNoZWNrVmFsdWU6OkNoZWNrVmFsdWUodW5zaWduZWQgaW5kZXgsIE9w
Y29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQpCi0g
ICAgOiBTdGFja21hcFZhbHVlKGluZGV4LCBDaGVja2VkT3Bjb2RlLCBvcGNvZGUsIGxlZnQtPnR5
cGUoKSwgb3JpZ2luKQorQ2hlY2tWYWx1ZTo6Q2hlY2tWYWx1ZShPcGNvZGUgb3Bjb2RlLCBPcmln
aW4gb3JpZ2luLCBWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0KQorICAgIDogU3RhY2ttYXBWYWx1
ZShDaGVja2VkT3Bjb2RlLCBvcGNvZGUsIGxlZnQtPnR5cGUoKSwgb3JpZ2luKQogewogICAgIEFT
U0VSVChCMzo6aXNJbnQodHlwZSgpKSk7CiAgICAgQVNTRVJUKGxlZnQtPnR5cGUoKSA9PSByaWdo
dC0+dHlwZSgpKTsKQEAgLTU3LDggKzU3LDggQEAgQ2hlY2tWYWx1ZTo6Q2hlY2tWYWx1ZSh1bnNp
Z25lZCBpbmRleCwgTwogfQogCiAvLyBVc2UgdGhpcyBmb3JtIGZvciBDaGVjay4KLUNoZWNrVmFs
dWU6OkNoZWNrVmFsdWUodW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmln
aW4sIFZhbHVlKiBwcmVkaWNhdGUpCi0gICAgOiBTdGFja21hcFZhbHVlKGluZGV4LCBDaGVja2Vk
T3Bjb2RlLCBvcGNvZGUsIFZvaWQsIG9yaWdpbikKK0NoZWNrVmFsdWU6OkNoZWNrVmFsdWUoT3Bj
b2RlIG9wY29kZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIHByZWRpY2F0ZSkKKyAgICA6IFN0YWNr
bWFwVmFsdWUoQ2hlY2tlZE9wY29kZSwgb3Bjb2RlLCBWb2lkLCBvcmlnaW4pCiB7CiAgICAgQVNT
RVJUKG9wY29kZSA9PSBDaGVjayk7CiAgICAgYXBwZW5kKENvbnN0cmFpbmVkVmFsdWUocHJlZGlj
YXRlLCBWYWx1ZVJlcDo6V2FybUFueSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzQ2hlY2tWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0NoZWNrVmFsdWUuaAkocmV2aXNpb24gMTk2MDExKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzQ2hlY2tWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01OCwxMCArNTgsMTAgQEAgcHJp
dmF0ZToKICAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOwogCiAgICAgLy8gVXNlIHRoaXMgZm9y
bSBmb3IgQ2hlY2tBZGQsIENoZWNrU3ViLCBhbmQgQ2hlY2tNdWwuCi0gICAgSlNfRVhQT1JUX1BS
SVZBVEUgQ2hlY2tWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3Bjb2RlLCBPcmlnaW4sIFZhbHVlKiBs
ZWZ0LCBWYWx1ZSogcmlnaHQpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIENoZWNrVmFsdWUoT3Bj
b2RlLCBPcmlnaW4sIFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQpOwogCiAgICAgLy8gVXNlIHRo
aXMgZm9ybSBmb3IgQ2hlY2suCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgQ2hlY2tWYWx1ZSh1bnNp
Z25lZCBpbmRleCwgT3Bjb2RlLCBPcmlnaW4sIFZhbHVlKiBwcmVkaWNhdGUpOworICAgIEpTX0VY
UE9SVF9QUklWQVRFIENoZWNrVmFsdWUoT3Bjb2RlLCBPcmlnaW4sIFZhbHVlKiBwcmVkaWNhdGUp
OwogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNDb25zdDMyVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNDb25zdDMyVmFsdWUuaAkocmV2aXNpb24gMTk2MDExKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzQ29uc3QzMlZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTc3LDgg
Kzc3LDggQEAgcHJvdGVjdGVkOgogCiAgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKIAotICAg
IENvbnN0MzJWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3JpZ2luIG9yaWdpbiwgaW50MzJfdCB2YWx1
ZSkKLSAgICAgICAgOiBWYWx1ZShpbmRleCwgQ2hlY2tlZE9wY29kZSwgQ29uc3QzMiwgSW50MzIs
IG9yaWdpbikKKyAgICBDb25zdDMyVmFsdWUoT3JpZ2luIG9yaWdpbiwgaW50MzJfdCB2YWx1ZSkK
KyAgICAgICAgOiBWYWx1ZShDaGVja2VkT3Bjb2RlLCBDb25zdDMyLCBJbnQzMiwgb3JpZ2luKQog
ICAgICAgICAsIG1fdmFsdWUodmFsdWUpCiAgICAgewogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0NvbnN0NjRWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0NvbnN0NjRWYWx1ZS5oCShyZXZpc2lvbiAxOTYwMTEpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDY0VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAt
NzcsOCArNzcsOCBAQCBwcm90ZWN0ZWQ6CiAKICAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOwog
Ci0gICAgQ29uc3Q2NFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcmlnaW4gb3JpZ2luLCBpbnQ2NF90
IHZhbHVlKQotICAgICAgICA6IFZhbHVlKGluZGV4LCBDaGVja2VkT3Bjb2RlLCBDb25zdDY0LCBJ
bnQ2NCwgb3JpZ2luKQorICAgIENvbnN0NjRWYWx1ZShPcmlnaW4gb3JpZ2luLCBpbnQ2NF90IHZh
bHVlKQorICAgICAgICA6IFZhbHVlKENoZWNrZWRPcGNvZGUsIENvbnN0NjQsIEludDY0LCBvcmln
aW4pCiAgICAgICAgICwgbV92YWx1ZSh2YWx1ZSkKICAgICB7CiAgICAgfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3REb3VibGVWYWx1ZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0RG91YmxlVmFsdWUuaAkocmV2aXNpb24gMTk2
MDExKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3REb3VibGVWYWx1ZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC03MCw4ICs3MCw4IEBAIHByb3RlY3RlZDoKIHByaXZhdGU6CiAgICAg
ZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKIAotICAgIENvbnN0RG91YmxlVmFsdWUodW5zaWduZWQg
aW5kZXgsIE9yaWdpbiBvcmlnaW4sIGRvdWJsZSB2YWx1ZSkKLSAgICAgICAgOiBWYWx1ZShpbmRl
eCwgQ2hlY2tlZE9wY29kZSwgQ29uc3REb3VibGUsIERvdWJsZSwgb3JpZ2luKQorICAgIENvbnN0
RG91YmxlVmFsdWUoT3JpZ2luIG9yaWdpbiwgZG91YmxlIHZhbHVlKQorICAgICAgICA6IFZhbHVl
KENoZWNrZWRPcGNvZGUsIENvbnN0RG91YmxlLCBEb3VibGUsIG9yaWdpbikKICAgICAgICAgLCBt
X3ZhbHVlKHZhbHVlKQogICAgIHsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNDb25zdEZsb2F0VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNDb25zdEZsb2F0VmFsdWUuaAkocmV2aXNpb24gMTk2MDExKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzQ29uc3RGbG9hdFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTY4
LDggKzY4LDggQEAgcHJvdGVjdGVkOgogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgUHJvY2Vk
dXJlOwogCi0gICAgQ29uc3RGbG9hdFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcmlnaW4gb3JpZ2lu
LCBmbG9hdCB2YWx1ZSkKLSAgICAgICAgOiBWYWx1ZShpbmRleCwgQ2hlY2tlZE9wY29kZSwgQ29u
c3RGbG9hdCwgRmxvYXQsIG9yaWdpbikKKyAgICBDb25zdEZsb2F0VmFsdWUoT3JpZ2luIG9yaWdp
biwgZmxvYXQgdmFsdWUpCisgICAgICAgIDogVmFsdWUoQ2hlY2tlZE9wY29kZSwgQ29uc3RGbG9h
dCwgRmxvYXQsIG9yaWdpbikKICAgICAgICAgLCBtX3ZhbHVlKHZhbHVlKQogICAgIHsKICAgICB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdFB0clZhbHVlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3RQdHJWYWx1ZS5oCShyZXZp
c2lvbiAxOTYwMTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdFB0clZhbHVl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtNTQsMTMgKzU0LDEzIEBAIHByaXZhdGU6CiAgICAgZnJpZW5kIGNs
YXNzIFByb2NlZHVyZTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgQ29uc3RQdHJW
YWx1ZSh1bnNpZ25lZCBpbmRleCwgT3JpZ2luIG9yaWdpbiwgVCogcG9pbnRlcikKLSAgICAgICAg
OiBDb25zdFB0clZhbHVlQmFzZShpbmRleCwgb3JpZ2luLCBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+
KHBvaW50ZXIpKQorICAgIENvbnN0UHRyVmFsdWUoT3JpZ2luIG9yaWdpbiwgVCogcG9pbnRlcikK
KyAgICAgICAgOiBDb25zdFB0clZhbHVlQmFzZShvcmlnaW4sIGJpdHdpc2VfY2FzdDxpbnRwdHJf
dD4ocG9pbnRlcikpCiAgICAgewogICAgIH0KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAg
IENvbnN0UHRyVmFsdWUodW5zaWduZWQgaW5kZXgsIE9yaWdpbiBvcmlnaW4sIFQgcG9pbnRlcikK
LSAgICAgICAgOiBDb25zdFB0clZhbHVlQmFzZShpbmRleCwgb3JpZ2luLCBzdGF0aWNfY2FzdDxp
bnRwdHJfdD4ocG9pbnRlcikpCisgICAgQ29uc3RQdHJWYWx1ZShPcmlnaW4gb3JpZ2luLCBUIHBv
aW50ZXIpCisgICAgICAgIDogQ29uc3RQdHJWYWx1ZUJhc2Uob3JpZ2luLCBzdGF0aWNfY2FzdDxp
bnRwdHJfdD4ocG9pbnRlcikpCiAgICAgewogICAgIH0KIH07CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNDb250cm9sVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0NvbnRyb2xWYWx1ZS5jcHAJKHJldmlzaW9uIDE5NjAxMSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnRyb2xWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTU5LDkgKzU5LDEwIEBAIHZvaWQgQ29udHJvbFZhbHVlOjpjb252ZXJ0VG9KdW1wKEJhc2lj
QmwKIAogICAgIHRoaXMtPkNvbnRyb2xWYWx1ZTo6fkNvbnRyb2xWYWx1ZSgpOwogCi0gICAgbmV3
ICh0aGlzKSBDb250cm9sVmFsdWUoaW5kZXgsIEp1bXAsIG9yaWdpbiwgRnJlcXVlbnRlZEJsb2Nr
KGRlc3RpbmF0aW9uKSk7CisgICAgbmV3ICh0aGlzKSBDb250cm9sVmFsdWUoSnVtcCwgb3JpZ2lu
LCBGcmVxdWVudGVkQmxvY2soZGVzdGluYXRpb24pKTsKIAogICAgIHRoaXMtPm93bmVyID0gb3du
ZXI7CisgICAgdGhpcy0+bV9pbmRleCA9IGluZGV4OwogfQogCiB2b2lkIENvbnRyb2xWYWx1ZTo6
Y29udmVydFRvT29wcygpCkBAIC03Miw5ICs3MywxMCBAQCB2b2lkIENvbnRyb2xWYWx1ZTo6Y29u
dmVydFRvT29wcygpCiAKICAgICB0aGlzLT5Db250cm9sVmFsdWU6On5Db250cm9sVmFsdWUoKTsK
IAotICAgIG5ldyAodGhpcykgQ29udHJvbFZhbHVlKGluZGV4LCBPb3BzLCBvcmlnaW4pOworICAg
IG5ldyAodGhpcykgQ29udHJvbFZhbHVlKE9vcHMsIG9yaWdpbik7CiAKICAgICB0aGlzLT5vd25l
ciA9IG93bmVyOworICAgIHRoaXMtPm1faW5kZXggPSBpbmRleDsKIH0KIAogdm9pZCBDb250cm9s
VmFsdWU6OmR1bXBNZXRhKENvbW1hUHJpbnRlciYgY29tbWEsIFByaW50U3RyZWFtJiBvdXQpIGNv
bnN0CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb250cm9sVmFsdWUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb250cm9sVmFsdWUuaAkocmV2
aXNpb24gMTk2MDExKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29udHJvbFZhbHVl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEwOSw4ICsxMDksOCBAQCBwcm90ZWN0ZWQ6CiAKICAgICAv
LyBVc2UgdGhpcyBmb3Igc3ViY2xhc3Nlcy4KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1
bWVudHM+Ci0gICAgQ29udHJvbFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBU
eXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4sIEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCi0gICAgICAg
IDogVmFsdWUoaW5kZXgsIENoZWNrZWRPcGNvZGUsIG9wY29kZSwgdHlwZSwgb3JpZ2luLCBhcmd1
bWVudHMuLi4pCisgICAgQ29udHJvbFZhbHVlKE9wY29kZSBvcGNvZGUsIFR5cGUgdHlwZSwgT3Jp
Z2luIG9yaWdpbiwgQXJndW1lbnRzLi4uIGFyZ3VtZW50cykKKyAgICAgICAgOiBWYWx1ZShDaGVj
a2VkT3Bjb2RlLCBvcGNvZGUsIHR5cGUsIG9yaWdpbiwgYXJndW1lbnRzLi4uKQogICAgIHsKICAg
ICAgICAgQVNTRVJUKGFjY2VwdHMob3Bjb2RlKSk7CiAgICAgfQpAQCAtMTIyLDIyICsxMjIsMjIg
QEAgcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOwogCiAgICAgLy8gVXNlIHRo
aXMgZm9yIE9vcHMuCi0gICAgQ29udHJvbFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bj
b2RlLCBPcmlnaW4gb3JpZ2luKQotICAgICAgICA6IFZhbHVlKGluZGV4LCBDaGVja2VkT3Bjb2Rl
LCBvcGNvZGUsIFZvaWQsIG9yaWdpbikKKyAgICBDb250cm9sVmFsdWUoT3Bjb2RlIG9wY29kZSwg
T3JpZ2luIG9yaWdpbikKKyAgICAgICAgOiBWYWx1ZShDaGVja2VkT3Bjb2RlLCBvcGNvZGUsIFZv
aWQsIG9yaWdpbikKICAgICB7CiAgICAgICAgIEFTU0VSVChvcGNvZGUgPT0gT29wcyk7CiAgICAg
fQogCiAgICAgLy8gVXNlIHRoaXMgZm9yIFJldHVybi4KLSAgICBDb250cm9sVmFsdWUodW5zaWdu
ZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiByZXN1bHQpCi0g
ICAgICAgIDogVmFsdWUoaW5kZXgsIENoZWNrZWRPcGNvZGUsIG9wY29kZSwgVm9pZCwgb3JpZ2lu
LCByZXN1bHQpCisgICAgQ29udHJvbFZhbHVlKE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4s
IFZhbHVlKiByZXN1bHQpCisgICAgICAgIDogVmFsdWUoQ2hlY2tlZE9wY29kZSwgb3Bjb2RlLCBW
b2lkLCBvcmlnaW4sIHJlc3VsdCkKICAgICB7CiAgICAgICAgIEFTU0VSVChvcGNvZGUgPT0gUmV0
dXJuKTsKICAgICB9CiAKICAgICAvLyBVc2UgdGhpcyBmb3IgSnVtcC4KLSAgICBDb250cm9sVmFs
dWUodW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4sIGNvbnN0IEZy
ZXF1ZW50ZWRCbG9jayYgdGFyZ2V0KQotICAgICAgICA6IFZhbHVlKGluZGV4LCBDaGVja2VkT3Bj
b2RlLCBvcGNvZGUsIFZvaWQsIG9yaWdpbikKKyAgICBDb250cm9sVmFsdWUoT3Bjb2RlIG9wY29k
ZSwgT3JpZ2luIG9yaWdpbiwgY29uc3QgRnJlcXVlbnRlZEJsb2NrJiB0YXJnZXQpCisgICAgICAg
IDogVmFsdWUoQ2hlY2tlZE9wY29kZSwgb3Bjb2RlLCBWb2lkLCBvcmlnaW4pCiAgICAgewogICAg
ICAgICBBU1NFUlQob3Bjb2RlID09IEp1bXApOwogICAgICAgICBtX3N1Y2Nlc3NvcnMuYXBwZW5k
KHRhcmdldCk7CkBAIC0xNDUsOSArMTQ1LDkgQEAgcHJpdmF0ZToKIAogICAgIC8vIFVzZSB0aGlz
IGZvciBCcmFuY2guCiAgICAgQ29udHJvbFZhbHVlKAotICAgICAgICB1bnNpZ25lZCBpbmRleCwg
T3Bjb2RlIG9wY29kZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIHByZWRpY2F0ZSwKKyAgICAgICAg
T3Bjb2RlIG9wY29kZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIHByZWRpY2F0ZSwKICAgICAgICAg
Y29uc3QgRnJlcXVlbnRlZEJsb2NrJiB5ZXMsIGNvbnN0IEZyZXF1ZW50ZWRCbG9jayYgbm8pCi0g
ICAgICAgIDogVmFsdWUoaW5kZXgsIENoZWNrZWRPcGNvZGUsIG9wY29kZSwgVm9pZCwgb3JpZ2lu
LCBwcmVkaWNhdGUpCisgICAgICAgIDogVmFsdWUoQ2hlY2tlZE9wY29kZSwgb3Bjb2RlLCBWb2lk
LCBvcmlnaW4sIHByZWRpY2F0ZSkKICAgICB7CiAgICAgICAgIEFTU0VSVChvcGNvZGUgPT0gQnJh
bmNoKTsKICAgICAgICAgbV9zdWNjZXNzb3JzLmFwcGVuZCh5ZXMpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzRWZmZWN0cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzRWZmZWN0cy5jcHAJKHJldmlzaW9uIDE5NjAxMSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0VmZmVjdHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCw3ICs0
NCw3IEBAIGJvb2wgaW50ZXJmZXJlc1dpdGhUZXJtaW5hbChjb25zdCBFZmZlY3QKIHsKICAgICBp
ZiAoIXRlcm1pbmFsLnRlcm1pbmFsKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJu
IG90aGVyLnRlcm1pbmFsIHx8IG90aGVyLmNvbnRyb2xEZXBlbmRlbnQgfHwgb3RoZXIud3JpdGVz
U1NBU3RhdGUgfHwgb3RoZXIud3JpdGVzOworICAgIHJldHVybiBvdGhlci50ZXJtaW5hbCB8fCBv
dGhlci5jb250cm9sRGVwZW5kZW50IHx8IG90aGVyLndyaXRlc0xvY2FsU3RhdGUgfHwgb3RoZXIu
d3JpdGVzOwogfQogCiBib29sIGludGVyZmVyZXNXaXRoRXhpdFNpZGV3YXlzKGNvbnN0IEVmZmVj
dHMmIGV4aXRzU2lkZXdheXMsIGNvbnN0IEVmZmVjdHMmIG90aGVyKQpAQCAtNTQsMTEgKzU0LDEx
IEBAIGJvb2wgaW50ZXJmZXJlc1dpdGhFeGl0U2lkZXdheXMoY29uc3QgRWYKICAgICByZXR1cm4g
b3RoZXIuY29udHJvbERlcGVuZGVudCB8fCBvdGhlci53cml0ZXM7CiB9CiAKLWJvb2wgaW50ZXJm
ZXJlc1dpdGhXcml0ZXNTU0FTdGF0ZShjb25zdCBFZmZlY3RzJiB3cml0ZXNTU0FTdGF0ZSwgY29u
c3QgRWZmZWN0cyYgb3RoZXIpCitib29sIGludGVyZmVyZXNXaXRoV3JpdGVzTG9jYWxTdGF0ZShj
b25zdCBFZmZlY3RzJiB3cml0ZXNMb2NhbFN0YXRlLCBjb25zdCBFZmZlY3RzJiBvdGhlcikKIHsK
LSAgICBpZiAoIXdyaXRlc1NTQVN0YXRlLndyaXRlc1NTQVN0YXRlKQorICAgIGlmICghd3JpdGVz
TG9jYWxTdGF0ZS53cml0ZXNMb2NhbFN0YXRlKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
cmV0dXJuIG90aGVyLndyaXRlc1NTQVN0YXRlIHx8IG90aGVyLnJlYWRzU1NBU3RhdGU7CisgICAg
cmV0dXJuIG90aGVyLndyaXRlc0xvY2FsU3RhdGUgfHwgb3RoZXIucmVhZHNMb2NhbFN0YXRlOwog
fQogCiB9IC8vIGFub255bW91cyBuYW1lc3BhY2UKQEAgLTY5LDcgKzY5LDcgQEAgYm9vbCBFZmZl
Y3RzOjppbnRlcmZlcmVzKGNvbnN0IEVmZmVjdHMmIAogICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICBpZiAoaW50ZXJmZXJlc1dpdGhFeGl0U2lkZXdheXMoKnRoaXMsIG90aGVyKSB8fCBpbnRlcmZl
cmVzV2l0aEV4aXRTaWRld2F5cyhvdGhlciwgKnRoaXMpKQogICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICBpZiAoaW50ZXJmZXJlc1dpdGhXcml0ZXNTU0FTdGF0ZSgqdGhpcywgb3RoZXIpIHx8IGlu
dGVyZmVyZXNXaXRoV3JpdGVzU1NBU3RhdGUob3RoZXIsICp0aGlzKSkKKyAgICBpZiAoaW50ZXJm
ZXJlc1dpdGhXcml0ZXNMb2NhbFN0YXRlKCp0aGlzLCBvdGhlcikgfHwgaW50ZXJmZXJlc1dpdGhX
cml0ZXNMb2NhbFN0YXRlKG90aGVyLCAqdGhpcykpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAg
IHJldHVybiB3cml0ZXMub3ZlcmxhcHMob3RoZXIud3JpdGVzKQogICAgICAgICB8fCB3cml0ZXMu
b3ZlcmxhcHMob3RoZXIucmVhZHMpCkBAIC04NSwxMCArODUsMTAgQEAgdm9pZCBFZmZlY3RzOjpk
dW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbgogICAgICAgICBvdXQucHJpbnQoY29tbWEsICJFeGl0
c1NpZGV3YXlzIik7CiAgICAgaWYgKGNvbnRyb2xEZXBlbmRlbnQpCiAgICAgICAgIG91dC5wcmlu
dChjb21tYSwgIkNvbnRyb2xEZXBlbmRlbnQiKTsKLSAgICBpZiAod3JpdGVzU1NBU3RhdGUpCi0g
ICAgICAgIG91dC5wcmludChjb21tYSwgIldyaXRlc1NTQVN0YXRlIik7Ci0gICAgaWYgKHJlYWRz
U1NBU3RhdGUpCi0gICAgICAgIG91dC5wcmludChjb21tYSwgIlJlYWRzU1NBU3RhdGUiKTsKKyAg
ICBpZiAod3JpdGVzTG9jYWxTdGF0ZSkKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiV3JpdGVz
TG9jYWxTdGF0ZSIpOworICAgIGlmIChyZWFkc0xvY2FsU3RhdGUpCisgICAgICAgIG91dC5wcmlu
dChjb21tYSwgIlJlYWRzTG9jYWxTdGF0ZSIpOwogICAgIGlmICh3cml0ZXMpCiAgICAgICAgIG91
dC5wcmludChjb21tYSwgIldyaXRlczoiLCB3cml0ZXMpOwogICAgIGlmIChyZWFkcykKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0VmZmVjdHMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNFZmZlY3RzLmgJKHJldmlzaW9uIDE5NjAxMSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0VmZmVjdHMuaAkod29ya2luZyBjb3B5KQpAQCAtNDgs
MTQgKzQ4LDE0IEBAIHN0cnVjdCBFZmZlY3RzIHsKICAgICAvLyBUcnVlIGlmIHRoZSBpbnN0cnVj
dGlvbiBtYXkgY2hhbmdlIHNlbWFudGljcyBpZiBob2lzdGVkIGFib3ZlIHNvbWUgY29udHJvbCBm
bG93LgogICAgIGJvb2wgY29udHJvbERlcGVuZGVudCB7IGZhbHNlIH07CiAKLSAgICAvLyBUcnVl
IGlmIHRoaXMgd3JpdGVzIHRvIHRoZSBTU0Egc3RhdGUuIE9wZXJhdGlvbnMgdGhhdCB3cml0ZSBT
U0Egc3RhdGUgZG9uJ3Qgd3JpdGUgdG8gYW55dGhpbmcKLSAgICAvLyBpbiAibWVtb3J5IiBidXQg
dGhleSBoYXZlIGEgc2lkZS1lZmZlY3QgYW55d2F5LiBUaGlzIGlzIGZvciBtb2RlbGluZyBVcHNp
bG9ucy4gWW91IGNhbiBpZ25vcmUKLSAgICAvLyB0aGlzIGlmIHlvdSBoYXZlIHlvdXIgb3duIHdh
eSBvZiBtb2RlbGluZyBVcHNpbG9ucyBvciBpZiB5b3UgaW50ZW5kIHRvIGp1c3QgcmVidWlsZCB0
aGVtCisgICAgLy8gVHJ1ZSBpZiB0aGlzIHdyaXRlcyB0byB0aGUgbG9jYWwgc3RhdGUuIE9wZXJh
dGlvbnMgdGhhdCB3cml0ZSBsb2NhbCBzdGF0ZSBkb24ndCB3cml0ZSB0byBhbnl0aGluZworICAg
IC8vIGluICJtZW1vcnkiIGJ1dCB0aGV5IGhhdmUgYSBzaWRlLWVmZmVjdCBhbnl3YXkuIFRoaXMg
aXMgZm9yIG1vZGVsaW5nIFVwc2lsb25zIGFuZCBTZXRzLiBZb3UgY2FuIGlnbm9yZQorICAgIC8v
IHRoaXMgaWYgeW91IGhhdmUgeW91ciBvd24gd2F5IG9mIG1vZGVsaW5nIFVwc2lsb25zIGFuZCBT
ZXRzIG9yIGlmIHlvdSBpbnRlbmQgdG8ganVzdCByZWJ1aWxkIHRoZW0KICAgICAvLyBhbnl3YXku
Ci0gICAgYm9vbCB3cml0ZXNTU0FTdGF0ZSB7IGZhbHNlIH07CisgICAgYm9vbCB3cml0ZXNMb2Nh
bFN0YXRlIHsgZmFsc2UgfTsKIAotICAgIC8vIFRydWUgaWYgdGhpcyByZWFkcyBmcm9tIHRoZSBT
U0Egc3RhdGUuIFRoaXMgaXMgb25seSB1c2VkIGZvciBQaGkuCi0gICAgYm9vbCByZWFkc1NTQVN0
YXRlIHsgZmFsc2UgfTsKKyAgICAvLyBUcnVlIGlmIHRoaXMgcmVhZHMgZnJvbSB0aGUgbG9jYWwg
c3RhdGUuIFRoaXMgaXMgb25seSB1c2VkIGZvciBQaGkgYW5kIEdldC4KKyAgICBib29sIHJlYWRz
TG9jYWxTdGF0ZSB7IGZhbHNlIH07CiAKICAgICBIZWFwUmFuZ2Ugd3JpdGVzOwogICAgIEhlYXBS
YW5nZSByZWFkczsKQEAgLTc3LDcgKzc3LDcgQEAgc3RydWN0IEVmZmVjdHMgewogCiAgICAgYm9v
bCBtdXN0RXhlY3V0ZSgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gdGVybWluYWwgfHwg
ZXhpdHNTaWRld2F5cyB8fCB3cml0ZXNTU0FTdGF0ZSB8fCB3cml0ZXM7CisgICAgICAgIHJldHVy
biB0ZXJtaW5hbCB8fCBleGl0c1NpZGV3YXlzIHx8IHdyaXRlc0xvY2FsU3RhdGUgfHwgd3JpdGVz
OwogICAgIH0KIAogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiByZW9yZGVyaW5nIGluc3RydWN0aW9u
cyB3aXRoIHRoZXNlIHJlc3BlY3RpdmUgZWZmZWN0cyB3b3VsZCBjaGFuZ2UgcHJvZ3JhbQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRWxpbWluYXRlQ29tbW9uU3ViZXhwcmVzc2lv
bnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0VsaW1pbmF0
ZUNvbW1vblN1YmV4cHJlc3Npb25zLmNwcAkocmV2aXNpb24gMTk2MDExKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzRWxpbWluYXRlQ29tbW9uU3ViZXhwcmVzc2lvbnMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MSw2ICs0MSw4IEBACiAjaW5jbHVkZSAiQjNTdGFja1Nsb3QuaCIKICNp
bmNsdWRlICJCM1ZhbHVlS2V5LmgiCiAjaW5jbHVkZSAiQjNWYWx1ZUlubGluZXMuaCIKKyNpbmNs
dWRlICJCM1ZhcmlhYmxlLmgiCisjaW5jbHVkZSAiQjNWYXJpYWJsZVZhbHVlLmgiCiAjaW5jbHVk
ZSAiREZHR3JhcGguaCIKICNpbmNsdWRlIDx3dGYvQ29tbWFQcmludGVyLmg+CiAjaW5jbHVkZSA8
d3RmL0hhc2hNYXAuaD4KQEAgLTEzMSwxMiArMTMzLDEwIEBAIHB1YmxpYzoKICAgICAgICAgICAg
IG1faW1wdXJlQmxvY2tEYXRhW21fYmxvY2tdID0gbV9kYXRhOwogICAgICAgICB9CiAKLSAgICAg
ICAgZm9yIChTbG90QmFzZVZhbHVlKiBzdGFjayA6IG1fc3RhY2tzKQotICAgICAgICAgICAgbV9p
bnNlcnRpb25TZXQuaW5zZXJ0VmFsdWUoMCwgc3RhY2spOwogICAgICAgICBmb3IgKEJhc2ljQmxv
Y2sqIGJsb2NrIDogbV9wcm9jKSB7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHZhbHVlSW5k
ZXggPSAwOyB2YWx1ZUluZGV4IDwgYmxvY2stPnNpemUoKTsgKyt2YWx1ZUluZGV4KSB7Ci0gICAg
ICAgICAgICAgICAgYXV0byBpdGVyID0gbV9zdG9yZXMuZmluZChibG9jay0+YXQodmFsdWVJbmRl
eCkpOwotICAgICAgICAgICAgICAgIGlmIChpdGVyID09IG1fc3RvcmVzLmVuZCgpKQorICAgICAg
ICAgICAgICAgIGF1dG8gaXRlciA9IG1fc2V0cy5maW5kKGJsb2NrLT5hdCh2YWx1ZUluZGV4KSk7
CisgICAgICAgICAgICAgICAgaWYgKGl0ZXIgPT0gbV9zZXRzLmVuZCgpKQogICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKIAogICAgICAgICAgICAgICAgIGZvciAoVmFsdWUqIHZhbHVlIDog
aXRlci0+dmFsdWUpCkBAIC0zNjksMjEgKzM2OSwxOSBAQCBwcml2YXRlOgogICAgICAgICAvLyBG
SVhNRTogSXQgd291bGQgYmUgd2F5IGJldHRlciBpZiB0aGlzIHBoYXNlIGp1c3QgZGlkIFNTQSBj
YWxjdWxhdGlvbiBkaXJlY3RseS4KICAgICAgICAgLy8gUmlnaHQgbm93IHdlJ3JlIHJlbHlpbmcg
b24gdGhlIGZhY3QgdGhhdCBDU0UncyBwb3NpdGlvbiBpbiB0aGUgcGhhc2Ugb3JkZXIgaXMKICAg
ICAgICAgLy8gYWxtb3N0IHJpZ2h0IGJlZm9yZSBTU0EgZml4dXAuCi0gICAgICAgICAgICAKLSAg
ICAgICAgU2xvdEJhc2VWYWx1ZSogc3RhY2sgPSBtX3Byb2MuYWRkPFNsb3RCYXNlVmFsdWU+KAot
ICAgICAgICAgICAgbV92YWx1ZS0+b3JpZ2luKCksIG1fcHJvYy5hZGRBbm9ueW1vdXNTdGFja1Ns
b3QobV92YWx1ZS0+dHlwZSgpKSk7Ci0gICAgICAgIG1fc3RhY2tzLmFwcGVuZChzdGFjayk7CiAK
LSAgICAgICAgTWVtb3J5VmFsdWUqIGxvYWQgPSBtX2luc2VydGlvblNldC5pbnNlcnQ8TWVtb3J5
VmFsdWU+KAotICAgICAgICAgICAgbV9pbmRleCwgTG9hZCwgbV92YWx1ZS0+dHlwZSgpLCBtX3Zh
bHVlLT5vcmlnaW4oKSwgc3RhY2spOworICAgICAgICBWYXJpYWJsZSogdmFyaWFibGUgPSBtX3By
b2MuYWRkVmFyaWFibGUobV92YWx1ZS0+dHlwZSgpKTsKKworICAgICAgICBWYXJpYWJsZVZhbHVl
KiBnZXQgPSBtX2luc2VydGlvblNldC5pbnNlcnQ8VmFyaWFibGVWYWx1ZT4oCisgICAgICAgICAg
ICBtX2luZGV4LCBHZXQsIG1fdmFsdWUtPm9yaWdpbigpLCB2YXJpYWJsZSk7CiAgICAgICAgIGlm
ICh2ZXJib3NlKQotICAgICAgICAgICAgZGF0YUxvZygiICAgIEluc2VydGluZyBsb2FkIG9mIHZh
bHVlOiAiLCAqbG9hZCwgIlxuIik7Ci0gICAgICAgIG1fdmFsdWUtPnJlcGxhY2VXaXRoSWRlbnRp
dHkobG9hZCk7CisgICAgICAgICAgICBkYXRhTG9nKCIgICAgSW5zZXJ0aW5nIGdldCBvZiB2YWx1
ZTogIiwgKmdldCwgIlxuIik7CisgICAgICAgIG1fdmFsdWUtPnJlcGxhY2VXaXRoSWRlbnRpdHko
Z2V0KTsKICAgICAgICAgICAgIAogICAgICAgICBmb3IgKE1lbW9yeVZhbHVlKiBtYXRjaCA6IG1h
dGNoZXMpIHsKLSAgICAgICAgICAgIFZlY3RvcjxWYWx1ZSo+JiBzdG9yZXMgPSBtX3N0b3Jlcy5h
ZGQobWF0Y2gsIFZlY3RvcjxWYWx1ZSo+KCkpLml0ZXJhdG9yLT52YWx1ZTsKKyAgICAgICAgICAg
IFZlY3RvcjxWYWx1ZSo+JiBzZXRzID0gbV9zZXRzLmFkZChtYXRjaCwgVmVjdG9yPFZhbHVlKj4o
KSkuaXRlcmF0b3ItPnZhbHVlOwogCi0gICAgICAgICAgICBWYWx1ZSogdmFsdWUgPSByZXBsYWNl
KG1hdGNoLCBzdG9yZXMpOworICAgICAgICAgICAgVmFsdWUqIHZhbHVlID0gcmVwbGFjZShtYXRj
aCwgc2V0cyk7CiAgICAgICAgICAgICBpZiAoIXZhbHVlKSB7CiAgICAgICAgICAgICAgICAgaWYg
KG1hdGNoLT5pc1N0b3JlKCkpCiAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gbWF0Y2gtPmNo
aWxkKDApOwpAQCAtMzkxLDggKzM4OSw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAg
IHZhbHVlID0gbWF0Y2g7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICBWYWx1ZSogc3RvcmUgPSBtX3Byb2MuYWRkPE1lbW9yeVZhbHVlPihTdG9yZSwgbV92YWx1
ZS0+b3JpZ2luKCksIHZhbHVlLCBzdGFjayk7Ci0gICAgICAgICAgICBzdG9yZXMuYXBwZW5kKHN0
b3JlKTsKKyAgICAgICAgICAgIFZhbHVlKiBzZXQgPSBtX3Byb2MuYWRkPFZhcmlhYmxlVmFsdWU+
KFNldCwgbV92YWx1ZS0+b3JpZ2luKCksIHZhcmlhYmxlLCB2YWx1ZSk7CisgICAgICAgICAgICBz
ZXRzLmFwcGVuZChzZXQpOwogICAgICAgICB9CiAKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC00
OTksOCArNDk3LDcgQEAgcHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX2luZGV4OwogICAgIFZhbHVl
KiBtX3ZhbHVlOwogCi0gICAgVmVjdG9yPFNsb3RCYXNlVmFsdWUqPiBtX3N0YWNrczsKLSAgICBI
YXNoTWFwPFZhbHVlKiwgVmVjdG9yPFZhbHVlKj4+IG1fc3RvcmVzOworICAgIEhhc2hNYXA8VmFs
dWUqLCBWZWN0b3I8VmFsdWUqPj4gbV9zZXRzOwogCiAgICAgSW5zZXJ0aW9uU2V0IG1faW5zZXJ0
aW9uU2V0OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNGaXhTU0EuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0ZpeFNTQS5jcHAJKHJldmlz
aW9uIDE5NjAxMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0ZpeFNTQS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM0LDE0ICszNCwxMyBAQAogI2luY2x1ZGUgIkIzRG9taW5hdG9ycy5o
IgogI2luY2x1ZGUgIkIzSW5kZXhTZXQuaCIKICNpbmNsdWRlICJCM0luc2VydGlvblNldElubGlu
ZXMuaCIKLSNpbmNsdWRlICJCM01lbW9yeVZhbHVlLmgiCiAjaW5jbHVkZSAiQjNQaGFzZVNjb3Bl
LmgiCiAjaW5jbHVkZSAiQjNQcm9jZWR1cmVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQjNTU0FDYWxj
dWxhdG9yLmgiCi0jaW5jbHVkZSAiQjNTbG90QmFzZVZhbHVlLmgiCi0jaW5jbHVkZSAiQjNTdGFj
a1Nsb3QuaCIKICNpbmNsdWRlICJCM1Vwc2lsb25WYWx1ZS5oIgogI2luY2x1ZGUgIkIzVmFsdWVJ
bmxpbmVzLmgiCisjaW5jbHVkZSAiQjNWYXJpYWJsZS5oIgorI2luY2x1ZGUgIkIzVmFyaWFibGVW
YWx1ZS5oIgogI2luY2x1ZGUgPHd0Zi9Db21tYVByaW50ZXIuaD4KIAogbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBCMyB7CkBAIC01MiwyMyArNTEsMTYgQEAgY29uc3QgYm9vbCB2ZXJib3NlID0g
ZmFsc2U7CiAKIHZvaWQgZGVtb3RlVmFsdWVzKFByb2NlZHVyZSYgcHJvYywgY29uc3QgSW5kZXhT
ZXQ8VmFsdWU+JiB2YWx1ZXMpCiB7Ci0gICAgSGFzaE1hcDxWYWx1ZSosIFNsb3RCYXNlVmFsdWUq
PiBtYXA7Ci0gICAgSGFzaE1hcDxWYWx1ZSosIFNsb3RCYXNlVmFsdWUqPiBwaGlNYXA7CisgICAg
SGFzaE1hcDxWYWx1ZSosIFZhcmlhYmxlKj4gbWFwOworICAgIEhhc2hNYXA8VmFsdWUqLCBWYXJp
YWJsZSo+IHBoaU1hcDsKIAogICAgIC8vIENyZWF0ZSBzdGFjayBzbG90cy4KLSAgICBJbnNlcnRp
b25TZXQgaW5zZXJ0aW9uU2V0KHByb2MpOwogICAgIGZvciAoVmFsdWUqIHZhbHVlIDogdmFsdWVz
LnZhbHVlcyhwcm9jLnZhbHVlcygpKSkgewotICAgICAgICBTbG90QmFzZVZhbHVlKiBzdGFjayA9
IGluc2VydGlvblNldC5pbnNlcnQ8U2xvdEJhc2VWYWx1ZT4oCi0gICAgICAgICAgICAwLCB2YWx1
ZS0+b3JpZ2luKCksIHByb2MuYWRkQW5vbnltb3VzU3RhY2tTbG90KHZhbHVlLT50eXBlKCkpKTsK
LSAgICAgICAgbWFwLmFkZCh2YWx1ZSwgc3RhY2spOwotCi0gICAgICAgIGlmICh2YWx1ZS0+b3Bj
b2RlKCkgPT0gUGhpKSB7Ci0gICAgICAgICAgICBTbG90QmFzZVZhbHVlKiBwaGlTdGFjayA9IGlu
c2VydGlvblNldC5pbnNlcnQ8U2xvdEJhc2VWYWx1ZT4oCi0gICAgICAgICAgICAgICAgMCwgdmFs
dWUtPm9yaWdpbigpLCBwcm9jLmFkZEFub255bW91c1N0YWNrU2xvdCh2YWx1ZS0+dHlwZSgpKSk7
Ci0gICAgICAgICAgICBwaGlNYXAuYWRkKHZhbHVlLCBwaGlTdGFjayk7Ci0gICAgICAgIH0KKyAg
ICAgICAgbWFwLmFkZCh2YWx1ZSwgcHJvYy5hZGRWYXJpYWJsZSh2YWx1ZS0+dHlwZSgpKSk7CisK
KyAgICAgICAgaWYgKHZhbHVlLT5vcGNvZGUoKSA9PSBQaGkpCisgICAgICAgICAgICBwaGlNYXAu
YWRkKHZhbHVlLCBwcm9jLmFkZFZhcmlhYmxlKHZhbHVlLT50eXBlKCkpKTsKICAgICB9Ci0gICAg
aW5zZXJ0aW9uU2V0LmV4ZWN1dGUocHJvY1swXSk7CiAKICAgICBpZiAodmVyYm9zZSkgewogICAg
ICAgICBkYXRhTG9nKCJEZW1vdGluZyB2YWx1ZXMgYXMgZm9sbG93czpcbiIpOwpAQCAtODUsMzYg
Kzc3LDM3IEBAIHZvaWQgZGVtb3RlVmFsdWVzKFByb2NlZHVyZSYgcHJvYywgY29uc3QKICAgICB9
CiAKICAgICAvLyBDaGFuZ2UgYWNjZXNzZXMgdG8gdGhlIHZhbHVlcyB0byBhY2Nlc3NlcyB0byB0
aGUgc3RhY2sgc2xvdHMuCisgICAgSW5zZXJ0aW9uU2V0IGluc2VydGlvblNldChwcm9jKTsKICAg
ICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogcHJvYykgewogICAgICAgICBmb3IgKHVuc2lnbmVk
IHZhbHVlSW5kZXggPSAwOyB2YWx1ZUluZGV4IDwgYmxvY2stPnNpemUoKTsgKyt2YWx1ZUluZGV4
KSB7CiAgICAgICAgICAgICBWYWx1ZSogdmFsdWUgPSBibG9jay0+YXQodmFsdWVJbmRleCk7CiAK
ICAgICAgICAgICAgIGlmICh2YWx1ZS0+b3Bjb2RlKCkgPT0gUGhpKSB7Ci0gICAgICAgICAgICAg
ICAgaWYgKFNsb3RCYXNlVmFsdWUqIHNsb3RCYXNlID0gcGhpTWFwLmdldCh2YWx1ZSkpIHsKKyAg
ICAgICAgICAgICAgICBpZiAoVmFyaWFibGUqIHZhcmlhYmxlID0gcGhpTWFwLmdldCh2YWx1ZSkp
IHsKICAgICAgICAgICAgICAgICAgICAgdmFsdWUtPnJlcGxhY2VXaXRoSWRlbnRpdHkoCi0gICAg
ICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0PE1lbW9yeVZhbHVlPigKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZUluZGV4LCBMb2FkLCB2YWx1ZS0+dHlwZSgp
LCB2YWx1ZS0+b3JpZ2luKCksIHNsb3RCYXNlKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBp
bnNlcnRpb25TZXQuaW5zZXJ0PFZhcmlhYmxlVmFsdWU+KAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHZhbHVlSW5kZXgsIEdldCwgdmFsdWUtPm9yaWdpbigpLCB2YXJpYWJsZSkpOwogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgZm9y
IChWYWx1ZSomIGNoaWxkIDogdmFsdWUtPmNoaWxkcmVuKCkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKFNsb3RCYXNlVmFsdWUqIHNsb3RCYXNlID0gbWFwLmdldChjaGlsZCkpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGNoaWxkID0gaW5zZXJ0aW9uU2V0Lmluc2VydDxNZW1vcnlWYWx1
ZT4oCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVJbmRleCwgTG9hZCwgY2hpbGQt
PnR5cGUoKSwgdmFsdWUtPm9yaWdpbigpLCBzbG90QmFzZSk7CisgICAgICAgICAgICAgICAgICAg
IGlmIChWYXJpYWJsZSogdmFyaWFibGUgPSBtYXAuZ2V0KGNoaWxkKSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgY2hpbGQgPSBpbnNlcnRpb25TZXQuaW5zZXJ0PFZhcmlhYmxlVmFsdWU+KAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlSW5kZXgsIEdldCwgdmFsdWUtPm9yaWdp
bigpLCB2YXJpYWJsZSk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9
CiAKICAgICAgICAgICAgICAgICBpZiAoVXBzaWxvblZhbHVlKiB1cHNpbG9uID0gdmFsdWUtPmFz
PFVwc2lsb25WYWx1ZT4oKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoU2xvdEJhc2VWYWx1
ZSogc2xvdEJhc2UgPSBwaGlNYXAuZ2V0KHVwc2lsb24tPnBoaSgpKSkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydDxNZW1vcnlWYWx1ZT4oCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdmFsdWVJbmRleCwgU3RvcmUsIHVwc2lsb24tPm9yaWdpbigpLCB1
cHNpbG9uLT5jaGlsZCgwKSwgc2xvdEJhc2UpOworICAgICAgICAgICAgICAgICAgICBpZiAoVmFy
aWFibGUqIHZhcmlhYmxlID0gcGhpTWFwLmdldCh1cHNpbG9uLT5waGkoKSkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnQ8VmFyaWFibGVWYWx1ZT4oCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVJbmRleCwgU2V0LCB1cHNpbG9uLT5vcmlnaW4o
KSwgdmFyaWFibGUsIHVwc2lsb24tPmNoaWxkKDApKTsKICAgICAgICAgICAgICAgICAgICAgICAg
IHZhbHVlLT5yZXBsYWNlV2l0aE5vcCgpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoU2xvdEJhc2VWYWx1
ZSogc2xvdEJhc2UgPSBtYXAuZ2V0KHZhbHVlKSkgewotICAgICAgICAgICAgICAgIGluc2VydGlv
blNldC5pbnNlcnQ8TWVtb3J5VmFsdWU+KAotICAgICAgICAgICAgICAgICAgICB2YWx1ZUluZGV4
ICsgMSwgU3RvcmUsIHZhbHVlLT5vcmlnaW4oKSwgdmFsdWUsIHNsb3RCYXNlKTsKKyAgICAgICAg
ICAgIGlmIChWYXJpYWJsZSogdmFyaWFibGUgPSBtYXAuZ2V0KHZhbHVlKSkgeworICAgICAgICAg
ICAgICAgIGluc2VydGlvblNldC5pbnNlcnQ8VmFyaWFibGVWYWx1ZT4oCisgICAgICAgICAgICAg
ICAgICAgIHZhbHVlSW5kZXggKyAxLCBTZXQsIHZhbHVlLT5vcmlnaW4oKSwgdmFyaWFibGUsIHZh
bHVlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBpbnNlcnRpb25TZXQuZXhl
Y3V0ZShibG9jayk7CkBAIC0xMjQsODAgKzExNywyMiBAQCB2b2lkIGRlbW90ZVZhbHVlcyhQcm9j
ZWR1cmUmIHByb2MsIGNvbnN0CiBib29sIGZpeFNTQShQcm9jZWR1cmUmIHByb2MpCiB7CiAgICAg
UGhhc2VTY29wZSBwaGFzZVNjb3BlKHByb2MsICJmaXhTU0EiKTsKLSAgICAKLSAgICAvLyBDb2xs
ZWN0IHRoZSBzdGFjayAidmFyaWFibGVzIi4gSWYgdGhlcmUgYXJlbid0IGFueSwgdGhlbiB3ZSBk
b24ndCBoYXZlIGFueXRoaW5nIHRvIGRvLgotICAgIC8vIFRoYXQncyBhIGZhaXJseSBjb21tb24g
Y2FzZS4KLSAgICBIYXNoTWFwPFN0YWNrU2xvdCosIFR5cGU+IHN0YWNrVmFyaWFibGU7Ci0gICAg
Zm9yIChWYWx1ZSogdmFsdWUgOiBwcm9jLnZhbHVlcygpKSB7Ci0gICAgICAgIGlmIChTbG90QmFz
ZVZhbHVlKiBzbG90QmFzZSA9IHZhbHVlLT5hczxTbG90QmFzZVZhbHVlPigpKSB7Ci0gICAgICAg
ICAgICBTdGFja1Nsb3QqIHN0YWNrID0gc2xvdEJhc2UtPnNsb3QoKTsKLSAgICAgICAgICAgIGlm
IChzdGFjay0+a2luZCgpID09IFN0YWNrU2xvdEtpbmQ6OkFub255bW91cykKLSAgICAgICAgICAg
ICAgICBzdGFja1ZhcmlhYmxlLmFkZChzdGFjaywgVm9pZCk7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICBpZiAoc3RhY2tWYXJpYWJsZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
IAotICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHdlIGtub3cgaG93IHRvIG9wdGltaXplIGFsbCBvZiB0
aGVzZS4gV2Ugb25seSBrbm93IGhvdyB0byBoYW5kbGUgTG9hZCBhbmQKLSAgICAvLyBTdG9yZSBv
biBhbm9ueW1vdXMgdmFyaWFibGVzLgorICAgIC8vIEp1c3QgZm9yIHNhbml0eSwgcmVtb3ZlIGFu
eSB1bnVzZWQgdmFyaWFibGVzIGZpcnN0LiBJdCdzIHVubGlrZWx5IHRoYXQgdGhpcyBjb2RlIGhh
cyBhbnkKKyAgICAvLyBidWdzIGhhdmluZyB0byBkbyB3aXRoIGRlYWQgdmFyaWFibGVzLCBidXQg
aXQgd291bGQgYmUgc2lsbHkgdG8gaGF2ZSB0byBmaXggc3VjaCBhIGJ1ZyBpZgorICAgIC8vIGl0
IGRpZCBhcmlzZS4KKyAgICBJbmRleFNldDxWYXJpYWJsZT4gbGl2ZVZhcmlhYmxlczsKICAgICBm
b3IgKFZhbHVlKiB2YWx1ZSA6IHByb2MudmFsdWVzKCkpIHsKLSAgICAgICAgYXV0byByZWplY3Qg
PSBbJl0gKFZhbHVlKiB2YWx1ZSkgewotICAgICAgICAgICAgaWYgKFNsb3RCYXNlVmFsdWUqIHNs
b3RCYXNlID0gdmFsdWUtPmFzPFNsb3RCYXNlVmFsdWU+KCkpCi0gICAgICAgICAgICAgICAgc3Rh
Y2tWYXJpYWJsZS5yZW1vdmUoc2xvdEJhc2UtPnNsb3QoKSk7Ci0gICAgICAgIH07Ci0gICAgICAg
IAotICAgICAgICBhdXRvIGhhbmRsZUFjY2VzcyA9IFsmXSAoVmFsdWUqIGFjY2VzcywgVHlwZSB0
eXBlKSB7Ci0gICAgICAgICAgICBTbG90QmFzZVZhbHVlKiBzbG90QmFzZSA9IGFjY2Vzcy0+bGFz
dENoaWxkKCktPmFzPFNsb3RCYXNlVmFsdWU+KCk7Ci0gICAgICAgICAgICBpZiAoIXNsb3RCYXNl
KQotICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgU3RhY2tTbG90KiBzdGFj
ayA9IHNsb3RCYXNlLT5zbG90KCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICh2YWx1
ZS0+YXM8TWVtb3J5VmFsdWU+KCktPm9mZnNldCgpKSB7Ci0gICAgICAgICAgICAgICAgc3RhY2tW
YXJpYWJsZS5yZW1vdmUoc3RhY2spOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgYXV0byByZXN1bHQgPSBzdGFja1ZhcmlhYmxlLmZpbmQoc3Rh
Y2spOwotICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBzdGFja1ZhcmlhYmxlLmVuZCgpKQotICAg
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGlmIChyZXN1bHQtPnZhbHVlID09IFZv
aWQpIHsKLSAgICAgICAgICAgICAgICByZXN1bHQtPnZhbHVlID0gdHlwZTsKLSAgICAgICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAocmVzdWx0LT52YWx1
ZSA9PSB0eXBlKQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIHN0YWNrVmFy
aWFibGUucmVtb3ZlKHJlc3VsdCk7Ci0gICAgICAgIH07Ci0gICAgICAgIAotICAgICAgICBzd2l0
Y2ggKHZhbHVlLT5vcGNvZGUoKSkgewotICAgICAgICBjYXNlIExvYWQ6Ci0gICAgICAgICAgICAv
LyBXZSdyZSBPSyB3aXRoIGxvYWRzIGZyb20gc3RhY2sgdmFyaWFibGVzIGF0IGFuIG9mZnNldCBv
ZiB6ZXJvLgotICAgICAgICAgICAgaGFuZGxlQWNjZXNzKHZhbHVlLCB2YWx1ZS0+dHlwZSgpKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFN0b3JlOgotICAgICAgICAgICAgLy8g
V2UncmUgT0sgd2l0aCBzdG9yZXMgdG8gc3RhY2sgdmFyaWFibGVzLCBidXQgbm90IHN0b3Jpbmcg
c3RhY2sgdmFyaWFibGVzLgotICAgICAgICAgICAgcmVqZWN0KHZhbHVlLT5jaGlsZCgwKSk7Ci0g
ICAgICAgICAgICBoYW5kbGVBY2Nlc3ModmFsdWUsIHZhbHVlLT5jaGlsZCgwKS0+dHlwZSgpKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgZm9yIChW
YWx1ZSogY2hpbGQgOiB2YWx1ZS0+Y2hpbGRyZW4oKSkKLSAgICAgICAgICAgICAgICByZWplY3Qo
Y2hpbGQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKFZhcmlh
YmxlVmFsdWUqIHZhcmlhYmxlVmFsdWUgPSB2YWx1ZS0+YXM8VmFyaWFibGVWYWx1ZT4oKSkKKyAg
ICAgICAgICAgIGxpdmVWYXJpYWJsZXMuYWRkKHZhcmlhYmxlVmFsdWUtPnZhcmlhYmxlKCkpOwog
ICAgIH0KIAotICAgIFZlY3RvcjxTdGFja1Nsb3QqPiBkZWFkU2xvdHM7Ci0gICAgZm9yIChhdXRv
JiBlbnRyeSA6IHN0YWNrVmFyaWFibGUpIHsKLSAgICAgICAgaWYgKGVudHJ5LnZhbHVlID09IFZv
aWQpCi0gICAgICAgICAgICBkZWFkU2xvdHMuYXBwZW5kKGVudHJ5LmtleSk7CisgICAgZm9yIChW
YXJpYWJsZSogdmFyaWFibGUgOiBwcm9jLnZhcmlhYmxlcygpKSB7CisgICAgICAgIGlmICghbGl2
ZVZhcmlhYmxlcy5jb250YWlucyh2YXJpYWJsZSkpCisgICAgICAgICAgICBwcm9jLmRlbGV0ZVZh
cmlhYmxlKHZhcmlhYmxlKTsKICAgICB9CiAKLSAgICBmb3IgKFN0YWNrU2xvdCogZGVhZFNsb3Qg
OiBkZWFkU2xvdHMpCi0gICAgICAgIHN0YWNrVmFyaWFibGUucmVtb3ZlKGRlYWRTbG90KTsKLQot
ICAgIGlmIChzdGFja1ZhcmlhYmxlLmlzRW1wdHkoKSkKKyAgICBpZiAocHJvYy52YXJpYWJsZXMo
KS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIFdlIGtub3cgdGhh
dCB3ZSBoYXZlIHZhcmlhYmxlcyB0byBvcHRpbWl6ZSwgc28gZG8gdGhhdCBub3cuCkBAIC0yMDUs
NDMgKzE0MCwzOCBAQCBib29sIGZpeFNTQShQcm9jZWR1cmUmIHByb2MpCiAKICAgICBTU0FDYWxj
dWxhdG9yIHNzYShwcm9jKTsKIAotICAgIC8vIENyZWF0ZSBhIFNTQUNhbGN1bGF0b3I6OlZhcmlh
YmxlIGZvciBldmVyeSBzdGFjayB2YXJpYWJsZS4KLSAgICBWZWN0b3I8U3RhY2tTbG90Kj4gdmFy
aWFibGVUb1N0YWNrOwotICAgIEhhc2hNYXA8U3RhY2tTbG90KiwgU1NBQ2FsY3VsYXRvcjo6VmFy
aWFibGUqPiBzdGFja1RvVmFyaWFibGU7Ci0KLSAgICBmb3IgKGF1dG8mIGVudHJ5IDogc3RhY2tW
YXJpYWJsZSkgewotICAgICAgICBTdGFja1Nsb3QqIHN0YWNrID0gZW50cnkua2V5OwotICAgICAg
ICBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSogdmFyaWFibGUgPSBzc2EubmV3VmFyaWFibGUoKTsK
LSAgICAgICAgUkVMRUFTRV9BU1NFUlQodmFyaWFibGUtPmluZGV4KCkgPT0gdmFyaWFibGVUb1N0
YWNrLnNpemUoKSk7Ci0gICAgICAgIHZhcmlhYmxlVG9TdGFjay5hcHBlbmQoc3RhY2spOwotICAg
ICAgICBzdGFja1RvVmFyaWFibGUuYWRkKHN0YWNrLCB2YXJpYWJsZSk7CisgICAgLy8gQ3JlYXRl
IGEgU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUgKCJjYWxjVmFyIikgZm9yIGV2ZXJ5IHZhcmlhYmxl
LgorICAgIFZlY3RvcjxWYXJpYWJsZSo+IGNhbGNWYXJUb1ZhcmlhYmxlOworICAgIEluZGV4TWFw
PFZhcmlhYmxlLCBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSo+IHZhcmlhYmxlVG9DYWxjVmFyKHBy
b2MudmFyaWFibGVzKCkuc2l6ZSgpKTsKKworICAgIGZvciAoVmFyaWFibGUqIHZhcmlhYmxlIDog
cHJvYy52YXJpYWJsZXMoKSkgeworICAgICAgICBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSogY2Fs
Y1ZhciA9IHNzYS5uZXdWYXJpYWJsZSgpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChjYWxjVmFy
LT5pbmRleCgpID09IGNhbGNWYXJUb1ZhcmlhYmxlLnNpemUoKSk7CisgICAgICAgIGNhbGNWYXJU
b1ZhcmlhYmxlLmFwcGVuZCh2YXJpYWJsZSk7CisgICAgICAgIHZhcmlhYmxlVG9DYWxjVmFyW3Zh
cmlhYmxlXSA9IGNhbGNWYXI7CiAgICAgfQogCiAgICAgLy8gQ3JlYXRlIERlZnMgZm9yIGFsbCBv
ZiB0aGUgc3RvcmVzIHRvIHRoZSBzdGFjayB2YXJpYWJsZS4KICAgICBmb3IgKEJhc2ljQmxvY2sq
IGJsb2NrIDogcHJvYykgewogICAgICAgICBmb3IgKFZhbHVlKiB2YWx1ZSA6ICpibG9jaykgewot
ICAgICAgICAgICAgaWYgKHZhbHVlLT5vcGNvZGUoKSAhPSBTdG9yZSkKLSAgICAgICAgICAgICAg
ICBjb250aW51ZTsKLQotICAgICAgICAgICAgU2xvdEJhc2VWYWx1ZSogc2xvdEJhc2UgPSB2YWx1
ZS0+Y2hpbGQoMSktPmFzPFNsb3RCYXNlVmFsdWU+KCk7Ci0gICAgICAgICAgICBpZiAoIXNsb3RC
YXNlKQorICAgICAgICAgICAgaWYgKHZhbHVlLT5vcGNvZGUoKSAhPSBTZXQpCiAgICAgICAgICAg
ICAgICAgY29udGludWU7CiAKLSAgICAgICAgICAgIFN0YWNrU2xvdCogc3RhY2sgPSBzbG90QmFz
ZS0+c2xvdCgpOworICAgICAgICAgICAgVmFyaWFibGUqIHZhcmlhYmxlID0gdmFsdWUtPmFzPFZh
cmlhYmxlVmFsdWU+KCktPnZhcmlhYmxlKCk7CiAKLSAgICAgICAgICAgIGlmIChTU0FDYWxjdWxh
dG9yOjpWYXJpYWJsZSogdmFyaWFibGUgPSBzdGFja1RvVmFyaWFibGUuZ2V0KHN0YWNrKSkKLSAg
ICAgICAgICAgICAgICBzc2EubmV3RGVmKHZhcmlhYmxlLCBibG9jaywgdmFsdWUtPmNoaWxkKDAp
KTsKKyAgICAgICAgICAgIGlmIChTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSogY2FsY1ZhciA9IHZh
cmlhYmxlVG9DYWxjVmFyW3ZhcmlhYmxlXSkKKyAgICAgICAgICAgICAgICBzc2EubmV3RGVmKGNh
bGNWYXIsIGJsb2NrLCB2YWx1ZS0+Y2hpbGQoMCkpOwogICAgICAgICB9CiAgICAgfQogCiAgICAg
Ly8gRGVjaWRlIHdoZXJlIFBoaXMgYXJlIHRvIGJlIGluc2VydGVkLiBUaGlzIGNyZWF0ZXMgdGhl
bSBidXQgZG9lcyBub3QgaW5zZXJ0IHRoZW0uCiAgICAgc3NhLmNvbXB1dGVQaGlzKAotICAgICAg
ICBbJl0gKFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKiB2YXJpYWJsZSwgQmFzaWNCbG9jayogYmxv
Y2spIC0+IFZhbHVlKiB7Ci0gICAgICAgICAgICBTdGFja1Nsb3QqIHN0YWNrID0gdmFyaWFibGVU
b1N0YWNrW3ZhcmlhYmxlLT5pbmRleCgpXTsKLSAgICAgICAgICAgIFZhbHVlKiBwaGkgPSBwcm9j
LmFkZDxWYWx1ZT4oUGhpLCBzdGFja1ZhcmlhYmxlLmdldChzdGFjayksIGJsb2NrLT5hdCgwKS0+
b3JpZ2luKCkpOworICAgICAgICBbJl0gKFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKiBjYWxjVmFy
LCBCYXNpY0Jsb2NrKiBibG9jaykgLT4gVmFsdWUqIHsKKyAgICAgICAgICAgIFZhcmlhYmxlKiB2
YXJpYWJsZSA9IGNhbGNWYXJUb1ZhcmlhYmxlW2NhbGNWYXItPmluZGV4KCldOworICAgICAgICAg
ICAgVmFsdWUqIHBoaSA9IHByb2MuYWRkPFZhbHVlPihQaGksIHZhcmlhYmxlLT50eXBlKCksIGJs
b2NrLT5hdCgwKS0+b3JpZ2luKCkpOwogICAgICAgICAgICAgaWYgKHZlcmJvc2UpIHsKICAgICAg
ICAgICAgICAgICBkYXRhTG9nKAotICAgICAgICAgICAgICAgICAgICAiQWRkaW5nIFBoaSBmb3Ig
IiwgcG9pbnRlckR1bXAoc3RhY2spLCAiIGF0ICIsICpibG9jaywgIjogIiwKKyAgICAgICAgICAg
ICAgICAgICAgIkFkZGluZyBQaGkgZm9yICIsIHBvaW50ZXJEdW1wKHZhcmlhYmxlKSwgIiBhdCAi
LCAqYmxvY2ssICI6ICIsCiAgICAgICAgICAgICAgICAgICAgIGRlZXBEdW1wKHByb2MsIHBoaSks
ICJcbiIpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIHBoaTsKQEAgLTI0OSwy
NCArMTc5LDI0IEBAIGJvb2wgZml4U1NBKFByb2NlZHVyZSYgcHJvYykKIAogICAgIC8vIE5vdyBw
ZXJmb3JtIHRoZSBjb252ZXJzaW9uLgogICAgIEluc2VydGlvblNldCBpbnNlcnRpb25TZXQocHJv
Yyk7Ci0gICAgSGFzaE1hcDxTdGFja1Nsb3QqLCBWYWx1ZSo+IG1hcHBpbmc7CisgICAgSW5kZXhN
YXA8VmFyaWFibGUsIFZhbHVlKj4gbWFwcGluZyhwcm9jLnZhcmlhYmxlcygpLnNpemUoKSk7CiAg
ICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IHByb2MuYmxvY2tzSW5QcmVPcmRlcigpKSB7CiAg
ICAgICAgIG1hcHBpbmcuY2xlYXIoKTsKIAotICAgICAgICBmb3IgKGF1dG8mIGVudHJ5IDogc3Rh
Y2tUb1ZhcmlhYmxlKSB7Ci0gICAgICAgICAgICBTdGFja1Nsb3QqIHN0YWNrID0gZW50cnkua2V5
OwotICAgICAgICAgICAgU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqIHZhcmlhYmxlID0gZW50cnku
dmFsdWU7CisgICAgICAgIGZvciAodW5zaWduZWQgaW5kZXggPSBjYWxjVmFyVG9WYXJpYWJsZS5z
aXplKCk7IGluZGV4LS07KSB7CisgICAgICAgICAgICBWYXJpYWJsZSogdmFyaWFibGUgPSBjYWxj
VmFyVG9WYXJpYWJsZVtpbmRleF07CisgICAgICAgICAgICBTU0FDYWxjdWxhdG9yOjpWYXJpYWJs
ZSogY2FsY1ZhciA9IHNzYS52YXJpYWJsZShpbmRleCk7CiAKLSAgICAgICAgICAgIFNTQUNhbGN1
bGF0b3I6OkRlZiogZGVmID0gc3NhLnJlYWNoaW5nRGVmQXRIZWFkKGJsb2NrLCB2YXJpYWJsZSk7
CisgICAgICAgICAgICBTU0FDYWxjdWxhdG9yOjpEZWYqIGRlZiA9IHNzYS5yZWFjaGluZ0RlZkF0
SGVhZChibG9jaywgY2FsY1Zhcik7CiAgICAgICAgICAgICBpZiAoZGVmKQotICAgICAgICAgICAg
ICAgIG1hcHBpbmcuc2V0KHN0YWNrLCBkZWYtPnZhbHVlKCkpOworICAgICAgICAgICAgICAgIG1h
cHBpbmdbdmFyaWFibGVdID0gZGVmLT52YWx1ZSgpOwogICAgICAgICB9CiAKICAgICAgICAgZm9y
IChTU0FDYWxjdWxhdG9yOjpEZWYqIHBoaURlZiA6IHNzYS5waGlzRm9yQmxvY2soYmxvY2spKSB7
Ci0gICAgICAgICAgICBTdGFja1Nsb3QqIHN0YWNrID0gdmFyaWFibGVUb1N0YWNrW3BoaURlZi0+
dmFyaWFibGUoKS0+aW5kZXgoKV07CisgICAgICAgICAgICBWYXJpYWJsZSogdmFyaWFibGUgPSBj
YWxjVmFyVG9WYXJpYWJsZVtwaGlEZWYtPnZhcmlhYmxlKCktPmluZGV4KCldOwogCiAgICAgICAg
ICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0VmFsdWUoMCwgcGhpRGVmLT52YWx1ZSgpKTsKLSAgICAg
ICAgICAgIG1hcHBpbmcuc2V0KHN0YWNrLCBwaGlEZWYtPnZhbHVlKCkpOworICAgICAgICAgICAg
bWFwcGluZ1t2YXJpYWJsZV0gPSBwaGlEZWYtPnZhbHVlKCk7CiAgICAgICAgIH0KIAogICAgICAg
ICBmb3IgKHVuc2lnbmVkIHZhbHVlSW5kZXggPSAwOyB2YWx1ZUluZGV4IDwgYmxvY2stPnNpemUo
KTsgKyt2YWx1ZUluZGV4KSB7CkBAIC0yNzQsMjMgKzIwNCwyNSBAQCBib29sIGZpeFNTQShQcm9j
ZWR1cmUmIHByb2MpCiAgICAgICAgICAgICB2YWx1ZS0+cGVyZm9ybVN1YnN0aXR1dGlvbigpOwog
CiAgICAgICAgICAgICBzd2l0Y2ggKHZhbHVlLT5vcGNvZGUoKSkgewotICAgICAgICAgICAgY2Fz
ZSBMb2FkOiB7Ci0gICAgICAgICAgICAgICAgaWYgKFNsb3RCYXNlVmFsdWUqIHNsb3RCYXNlID0g
dmFsdWUtPmNoaWxkKDApLT5hczxTbG90QmFzZVZhbHVlPigpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIFN0YWNrU2xvdCogc3RhY2sgPSBzbG90QmFzZS0+c2xvdCgpOwotICAgICAgICAgICAgICAg
ICAgICBpZiAoVmFsdWUqIHJlcGxhY2VtZW50ID0gbWFwcGluZy5nZXQoc3RhY2spKQotICAgICAg
ICAgICAgICAgICAgICAgICAgdmFsdWUtPnJlcGxhY2VXaXRoSWRlbnRpdHkocmVwbGFjZW1lbnQp
OworICAgICAgICAgICAgY2FzZSBHZXQ6IHsKKyAgICAgICAgICAgICAgICBWYXJpYWJsZVZhbHVl
KiB2YXJpYWJsZVZhbHVlID0gdmFsdWUtPmFzPFZhcmlhYmxlVmFsdWU+KCk7CisgICAgICAgICAg
ICAgICAgVmFyaWFibGUqIHZhcmlhYmxlID0gdmFyaWFibGVWYWx1ZS0+dmFyaWFibGUoKTsKKwor
ICAgICAgICAgICAgICAgIGlmIChWYWx1ZSogcmVwbGFjZW1lbnQgPSBtYXBwaW5nW3ZhcmlhYmxl
XSkKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUtPnJlcGxhY2VXaXRoSWRlbnRpdHkocmVwbGFj
ZW1lbnQpOworICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICB2YWx1
ZS0+cmVwbGFjZVdpdGhJZGVudGl0eSgKKyAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydGlv
blNldC5pbnNlcnRCb3R0b20odmFsdWVJbmRleCwgdmFsdWUpKTsKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICBjYXNlIFN0b3JlOiB7Ci0gICAgICAgICAgICAgICAgaWYgKFNsb3RCYXNl
VmFsdWUqIHNsb3RCYXNlID0gdmFsdWUtPmNoaWxkKDEpLT5hczxTbG90QmFzZVZhbHVlPigpKSB7
Ci0gICAgICAgICAgICAgICAgICAgIFN0YWNrU2xvdCogc3RhY2sgPSBzbG90QmFzZS0+c2xvdCgp
OwotICAgICAgICAgICAgICAgICAgICBpZiAoc3RhY2tUb1ZhcmlhYmxlLmNvbnRhaW5zKHN0YWNr
KSkgewotICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZy5zZXQoc3RhY2ssIHZhbHVlLT5j
aGlsZCgwKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS0+cmVwbGFjZVdpdGhOb3Ao
KTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGNhc2UgU2V0OiB7CisgICAgICAgICAgICAgICAgVmFyaWFibGVWYWx1ZSogdmFyaWFibGVWYWx1
ZSA9IHZhbHVlLT5hczxWYXJpYWJsZVZhbHVlPigpOworICAgICAgICAgICAgICAgIFZhcmlhYmxl
KiB2YXJpYWJsZSA9IHZhcmlhYmxlVmFsdWUtPnZhcmlhYmxlKCk7CisKKyAgICAgICAgICAgICAg
ICBtYXBwaW5nW3ZhcmlhYmxlXSA9IHZhbHVlLT5jaGlsZCgwKTsKKyAgICAgICAgICAgICAgICB2
YWx1ZS0+cmVwbGFjZVdpdGhOb3AoKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIH0KIApAQCAtMzA0LDE0ICsyMzYsMTQgQEAgYm9vbCBmaXhTU0EoUHJvY2VkdXJlJiBwcm9j
KQogICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIHN1Y2Nlc3NvckJsb2NrIDogYmxvY2stPnN1Y2Nl
c3NvckJsb2NrcygpKSB7CiAgICAgICAgICAgICBmb3IgKFNTQUNhbGN1bGF0b3I6OkRlZiogcGhp
RGVmIDogc3NhLnBoaXNGb3JCbG9jayhzdWNjZXNzb3JCbG9jaykpIHsKICAgICAgICAgICAgICAg
ICBWYWx1ZSogcGhpID0gcGhpRGVmLT52YWx1ZSgpOwotICAgICAgICAgICAgICAgIFNTQUNhbGN1
bGF0b3I6OlZhcmlhYmxlKiB2YXJpYWJsZSA9IHBoaURlZi0+dmFyaWFibGUoKTsKLSAgICAgICAg
ICAgICAgICBTdGFja1Nsb3QqIHN0YWNrID0gdmFyaWFibGVUb1N0YWNrW3ZhcmlhYmxlLT5pbmRl
eCgpXTsKKyAgICAgICAgICAgICAgICBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSogY2FsY1ZhciA9
IHBoaURlZi0+dmFyaWFibGUoKTsKKyAgICAgICAgICAgICAgICBWYXJpYWJsZSogdmFyaWFibGUg
PSBjYWxjVmFyVG9WYXJpYWJsZVtjYWxjVmFyLT5pbmRleCgpXTsKIAotICAgICAgICAgICAgICAg
IFZhbHVlKiBtYXBwZWRWYWx1ZSA9IG1hcHBpbmcuZ2V0KHN0YWNrKTsKKyAgICAgICAgICAgICAg
ICBWYWx1ZSogbWFwcGVkVmFsdWUgPSBtYXBwaW5nW3ZhcmlhYmxlXTsKICAgICAgICAgICAgICAg
ICBpZiAodmVyYm9zZSkgewogICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKAotICAgICAgICAg
ICAgICAgICAgICAgICAgIk1hcHBlZCB2YWx1ZSBmb3IgIiwgKnN0YWNrLCAiIHdpdGggc3VjY2Vz
c29yIFBoaSAiLCAqcGhpLCAiIGF0IGVuZCBvZiAiLAotICAgICAgICAgICAgICAgICAgICAgICAg
KmJsb2NrLCAiOiAiLCBwb2ludGVyRHVtcChtYXBwZWRWYWx1ZSksICJcbiIpOworICAgICAgICAg
ICAgICAgICAgICAgICAgIk1hcHBlZCB2YWx1ZSBmb3IgIiwgKnZhcmlhYmxlLCAiIHdpdGggc3Vj
Y2Vzc29yIFBoaSAiLCAqcGhpLAorICAgICAgICAgICAgICAgICAgICAgICAgIiBhdCBlbmQgb2Yg
IiwgKmJsb2NrLCAiOiAiLCBwb2ludGVyRHVtcChtYXBwZWRWYWx1ZSksICJcbiIpOwogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAoIW1hcHBl
ZFZhbHVlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRml4U1NBLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRml4U1NBLmgJKHJldmlzaW9uIDE5
NjAxMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0ZpeFNTQS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zNiw4ICszNiw4IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewogCiBj
bGFzcyBQcm9jZWR1cmU7CiAKLS8vIFR1cm5zIGFsbCBtZW50aW9ucyBvZiB0aGUgZ2l2ZW4gdmFs
dWVzIGludG8gYWNjZXNzZXMgdG8gYW5vbnltb3VzIHN0YWNrIHNsb3RzLiBUaGlzIGlzIG1lYW50
Ci0vLyB0byBiZSB1c2VkIGZyb20gcGhhc2VzIHRoYXQgZG9uJ3QgbGlrZSBTU0EgZm9yIHdoYXRl
dmVyIHJlYXNvbi4KKy8vIFR1cm5zIGFsbCBtZW50aW9ucyBvZiB0aGUgZ2l2ZW4gdmFsdWVzIGlu
dG8gYWNjZXNzZXMgdG8gdmFyaWFibGVzLiBUaGlzIGlzIG1lYW50IHRvIGJlIHVzZWQKKy8vIGZy
b20gcGhhc2VzIHRoYXQgZG9uJ3QgbGlrZSBTU0EgZm9yIHdoYXRldmVyIHJlYXNvbi4KIHZvaWQg
ZGVtb3RlVmFsdWVzKFByb2NlZHVyZSYsIGNvbnN0IEluZGV4U2V0PFZhbHVlPiYpOwogCiAvLyBU
aGlzIGZpeGVzIFNTQSBmb3IgeW91LiBVc2UgdGhpcyBhZnRlciB5b3UgaGF2ZSBkb25lIGRlbW90
ZVZhbHVlcygpIGFuZCB5b3UgaGF2ZSBwZXJmb3JtZWQKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0luZGV4TWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzSW5kZXhNYXAuaAkocmV2aXNpb24gMTk2MDExKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzSW5kZXhNYXAuaAkod29ya2luZyBjb3B5KQpAQCAtNDksNiArNDksMTEgQEAgcHVi
bGljOgogICAgICAgICBtX3ZlY3Rvci5maWxsKFZhbHVlKCksIHNpemUpOwogICAgIH0KIAorICAg
IHZvaWQgY2xlYXIoKQorICAgIHsKKyAgICAgICAgbV92ZWN0b3IuZmlsbChWYWx1ZSgpLCBtX3Zl
Y3Rvci5zaXplKCkpOworICAgIH0KKwogICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4g
bV92ZWN0b3Iuc2l6ZSgpOyB9CiAKICAgICBWYWx1ZSYgb3BlcmF0b3JbXShzaXplX3QgaW5kZXgp
CkBAIC03MSwxMSArNzYsNiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX3ZlY3RvcltrZXkt
PmluZGV4KCldOwogICAgIH0KIAotICAgIHZvaWQgY2xlYXIoKQotICAgIHsKLSAgICAgICAgbV92
ZWN0b3IuY2xlYXIoKTsKLSAgICB9Ci0gICAgCiBwcml2YXRlOgogICAgIFZlY3RvcjxWYWx1ZT4g
bV92ZWN0b3I7CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSW5kZXhTZXQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNJbmRleFNldC5oCShy
ZXZpc2lvbiAxOTYwMTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNJbmRleFNldC5o
CSh3b3JraW5nIGNvcHkpCkBAIC02OSw2ICs2OSwxNiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVy
biBtX3NldC5nZXQodmFsdWUtPmluZGV4KCkpOwogICAgIH0KIAorICAgIHNpemVfdCBzaXplKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3NldC5iaXRDb3VudCgpOworICAgIH0KKwor
ICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gIXNpemUoKTsK
KyAgICB9CisKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xsZWN0aW9uVHlwZT4KICAgICBjbGFz
cyBJdGVyYWJsZSB7CiAgICAgcHVibGljOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzTG93ZXJUb0Fpci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzTG93ZXJUb0Fpci5jcHAJKHJldmlzaW9uIDE5NjAxMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Myw2ICs1Myw4IEBA
CiAjaW5jbHVkZSAiQjNVcHNpbG9uVmFsdWUuaCIKICNpbmNsdWRlICJCM1VzZUNvdW50cy5oIgog
I2luY2x1ZGUgIkIzVmFsdWVJbmxpbmVzLmgiCisjaW5jbHVkZSAiQjNWYXJpYWJsZS5oIgorI2lu
Y2x1ZGUgIkIzVmFyaWFibGVWYWx1ZS5oIgogI2luY2x1ZGUgPHd0Zi9MaXN0RHVtcC5oPgogCiAj
aWYgQ09NUElMRVIoR0NDKSAmJiBBU1NFUlRfRElTQUJMRUQKQEAgLTEwMiw2ICsxMDQsOCBAQCBw
dWJsaWM6CiAKICAgICAgICAgZm9yIChCMzo6U3RhY2tTbG90KiBzdGFjayA6IG1fcHJvY2VkdXJl
LnN0YWNrU2xvdHMoKSkKICAgICAgICAgICAgIG1fc3RhY2tUb1N0YWNrLmFkZChzdGFjaywgbV9j
b2RlLmFkZFN0YWNrU2xvdChzdGFjaykpOworICAgICAgICBmb3IgKFZhcmlhYmxlKiB2YXJpYWJs
ZSA6IG1fcHJvY2VkdXJlLnZhcmlhYmxlcygpKQorICAgICAgICAgICAgbV92YXJpYWJsZVRvVG1w
LmFkZCh2YXJpYWJsZSwgbV9jb2RlLm5ld1RtcChBcmc6OnR5cGVGb3JCM1R5cGUodmFyaWFibGUt
PnR5cGUoKSkpKTsKIAogICAgICAgICAvLyBGaWd1cmUgb3V0IHdoaWNoIGJsb2NrcyBhcmUgbm90
IHJhcmUuCiAgICAgICAgIG1fZmFzdFdvcmtsaXN0LnB1c2gobV9wcm9jZWR1cmVbMF0pOwpAQCAt
MjIyNSw2ICsyMjI5LDIxIEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KIAorICAgICAgICBjYXNlIFNldDogeworICAgICAgICAgICAgVmFsdWUqIHZhbHVlID0gbV92
YWx1ZS0+Y2hpbGQoMCk7CisgICAgICAgICAgICBhcHBlbmQoCisgICAgICAgICAgICAgICAgcmVs
YXhlZE1vdmVGb3JUeXBlKHZhbHVlLT50eXBlKCkpLCBpbW1PclRtcCh2YWx1ZSksCisgICAgICAg
ICAgICAgICAgbV92YXJpYWJsZVRvVG1wLmdldChtX3ZhbHVlLT5hczxWYXJpYWJsZVZhbHVlPigp
LT52YXJpYWJsZSgpKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAg
ICBjYXNlIEdldDogeworICAgICAgICAgICAgYXBwZW5kKAorICAgICAgICAgICAgICAgIHJlbGF4
ZWRNb3ZlRm9yVHlwZShtX3ZhbHVlLT50eXBlKCkpLAorICAgICAgICAgICAgICAgIG1fdmFyaWFi
bGVUb1RtcC5nZXQobV92YWx1ZS0+YXM8VmFyaWFibGVWYWx1ZT4oKS0+dmFyaWFibGUoKSksIHRt
cChtX3ZhbHVlKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwogICAgICAgICBj
YXNlIEJyYW5jaDogewogICAgICAgICAgICAgbV9pbnN0cy5sYXN0KCkuYXBwZW5kKGNyZWF0ZUJy
YW5jaChtX3ZhbHVlLT5jaGlsZCgwKSkpOwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMjMxNiw2
ICsyMzM1LDcgQEAgcHJpdmF0ZToKICAgICBJbmRleE1hcDxWYWx1ZSwgVG1wPiBtX3BoaVRvVG1w
OyAvLyBFYWNoIFBoaSBnZXRzIGl0cyBvd24gVG1wLgogICAgIEluZGV4TWFwPEIzOjpCYXNpY0Js
b2NrLCBBaXI6OkJhc2ljQmxvY2sqPiBtX2Jsb2NrVG9CbG9jazsKICAgICBIYXNoTWFwPEIzOjpT
dGFja1Nsb3QqLCBBaXI6OlN0YWNrU2xvdCo+IG1fc3RhY2tUb1N0YWNrOworICAgIEhhc2hNYXA8
VmFyaWFibGUqLCBUbXA+IG1fdmFyaWFibGVUb1RtcDsKIAogICAgIFVzZUNvdW50cyBtX3VzZUNv
dW50czsKICAgICBQaGlDaGlsZHJlbiBtX3BoaUNoaWxkcmVuOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzTWVtb3J5VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNNZW1vcnlWYWx1ZS5oCShyZXZpc2lvbiAxOTYwMTEpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNNZW1vcnlWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03NSwx
MCArNzUsOCBAQCBwcml2YXRlOgogCiAgICAgLy8gVXNlIHRoaXMgZm9ybSBmb3IgTG9hZCAoYnV0
IG5vdCBMb2FkOFosIExvYWQ4Uywgb3IgYW55IG9mIHRoZSBMb2FkcyB0aGF0IGhhdmUgYSBzdWZm
aXggdGhhdAogICAgIC8vIGRlc2NyaWJlcyB0aGUgcmV0dXJuZWQgdHlwZSkuCi0gICAgTWVtb3J5
VmFsdWUoCi0gICAgICAgIHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBUeXBlIHR5cGUs
IE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBwb2ludGVyLAotICAgICAgICBpbnQzMl90IG9mZnNldCA9
IDApCi0gICAgICAgIDogVmFsdWUoaW5kZXgsIENoZWNrZWRPcGNvZGUsIG9wY29kZSwgdHlwZSwg
b3JpZ2luLCBwb2ludGVyKQorICAgIE1lbW9yeVZhbHVlKE9wY29kZSBvcGNvZGUsIFR5cGUgdHlw
ZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIHBvaW50ZXIsIGludDMyX3Qgb2Zmc2V0ID0gMCkKKyAg
ICAgICAgOiBWYWx1ZShDaGVja2VkT3Bjb2RlLCBvcGNvZGUsIHR5cGUsIG9yaWdpbiwgcG9pbnRl
cikKICAgICAgICAgLCBtX29mZnNldChvZmZzZXQpCiAgICAgICAgICwgbV9yYW5nZShIZWFwUmFu
Z2U6OnRvcCgpKQogICAgIHsKQEAgLTEwNCwxNiArMTAyLDE0IEBAIHByaXZhdGU6CiAgICAgfQog
CiAgICAgLy8gVXNlIHRoaXMgZm9ybSBmb3IgbG9hZHMgd2hlcmUgdGhlIHJldHVybiB0eXBlIGlz
IGltcGxpZWQuCi0gICAgTWVtb3J5VmFsdWUodW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUs
IE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBwb2ludGVyLCBpbnQzMl90IG9mZnNldCA9IDApCi0gICAg
ICAgIDogTWVtb3J5VmFsdWUoaW5kZXgsIG9wY29kZSwgSW50MzIsIG9yaWdpbiwgcG9pbnRlciwg
b2Zmc2V0KQorICAgIE1lbW9yeVZhbHVlKE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4sIFZh
bHVlKiBwb2ludGVyLCBpbnQzMl90IG9mZnNldCA9IDApCisgICAgICAgIDogTWVtb3J5VmFsdWUo
b3Bjb2RlLCBJbnQzMiwgb3JpZ2luLCBwb2ludGVyLCBvZmZzZXQpCiAgICAgewogICAgIH0KIAog
ICAgIC8vIFVzZSB0aGlzIGZvcm0gZm9yIHN0b3Jlcy4KLSAgICBNZW1vcnlWYWx1ZSgKLSAgICAg
ICAgdW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiB2
YWx1ZSwgVmFsdWUqIHBvaW50ZXIsCi0gICAgICAgIGludDMyX3Qgb2Zmc2V0ID0gMCkKLSAgICAg
ICAgOiBWYWx1ZShpbmRleCwgQ2hlY2tlZE9wY29kZSwgb3Bjb2RlLCBWb2lkLCBvcmlnaW4sIHZh
bHVlLCBwb2ludGVyKQorICAgIE1lbW9yeVZhbHVlKE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmln
aW4sIFZhbHVlKiB2YWx1ZSwgVmFsdWUqIHBvaW50ZXIsIGludDMyX3Qgb2Zmc2V0ID0gMCkKKyAg
ICAgICAgOiBWYWx1ZShDaGVja2VkT3Bjb2RlLCBvcGNvZGUsIFZvaWQsIG9yaWdpbiwgdmFsdWUs
IHBvaW50ZXIpCiAgICAgICAgICwgbV9vZmZzZXQob2Zmc2V0KQogICAgICAgICAsIG1fcmFuZ2Uo
SGVhcFJhbmdlOjp0b3AoKSkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNPcGNvZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09w
Y29kZS5jcHAJKHJldmlzaW9uIDE5NjAxMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M09wY29kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk1LDYgKzk1LDEyIEBAIHZvaWQgcHJpbnRJ
bnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBPcGMKICAgICBjYXNlIENvbnN0RmxvYXQ6CiAgICAg
ICAgIG91dC5wcmludCgiQ29uc3RGbG9hdCIpOwogICAgICAgICByZXR1cm47CisgICAgY2FzZSBH
ZXQ6CisgICAgICAgIG91dC5wcmludCgiR2V0Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IFNldDoKKyAgICAgICAgb3V0LnByaW50KCJTZXQiKTsKKyAgICAgICAgcmV0dXJuOwogICAgIGNh
c2UgU2xvdEJhc2U6CiAgICAgICAgIG91dC5wcmludCgiU2xvdEJhc2UiKTsKICAgICAgICAgcmV0
dXJuOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3Bjb2RlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3Bjb2RlLmgJKHJldmlzaW9uIDE5NjAx
MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wY29kZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC00OCw5ICs0OCwxNCBAQCBlbnVtIE9wY29kZSA6IGludDE2X3QgewogICAgIENvbnN0RG91
YmxlLAogICAgIENvbnN0RmxvYXQsCiAKLSAgICAvLyBUaGUgbWFnaWNhbCBzdGFjayBzbG90LiBU
aGlzIGlzIHZpZXdlZCBhcyBleGVjdXRpbmcgYXQgdGhlIHRvcCBvZiB0aGUgcHJvZ3JhbSByZWdh
cmRsZXNzIG9mCi0gICAgLy8gd2hlcmUgaW4gY29udHJvbCBmbG93IHlvdSBwdXQgaXQuIEVhY2gg
aW5zdGFuY2Ugb2YgYSBTdGFja1Nsb3QgVmFsdWUgZ2V0cyBhIGRpc2pvaW50IHJhbmdlIG9mCi0g
ICAgLy8gc3RhY2sgbWVtb3J5LiBVc2UgdGhlIFN0YWNrU2xvdFZhbHVlIGNsYXNzLgorICAgIC8v
IEIzIHN1cHBvcnRzIG5vbi1TU0EgdmFyaWFibGVzLiBUaGVzZSBhcmUgYWNjZXNzZWQgdXNpbmcg
R2V0IGFuZCBTZXQgb3Bjb2Rlcy4gVXNlIHRoZQorICAgIC8vIFZhcmlhYmxlVmFsdWUgY2xhc3Mu
IEl0J3MgYSBnb29kIGlkZWEgdG8gcnVuIGZpeFNTQSgpIHRvIHR1cm4gdGhlc2UgaW50byBTU0Eu
IFRoZQorICAgIC8vIG9wdGltaXplciB3aWxsIGRvIHRoYXQgZXZlbnR1YWxseSwgYnV0IGlmIHlv
dXIgaW5wdXQgdGVuZHMgdG8gdXNlIHRoZXNlIG9wY29kZXMsIHlvdQorICAgIC8vIHNob3VsZCBy
dW4gZml4U1NBKCkgZGlyZWN0bHkgYmVmb3JlIGxhdW5jaGluZyB0aGUgb3B0aW1pemVyLgorICAg
IFNldCwKKyAgICBHZXQsCisKKyAgICAvLyBHZXRzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgYSBTdGFj
a1Nsb3QuCiAgICAgU2xvdEJhc2UsCiAKICAgICAvLyBUaGUgbWFnaWNhbCBhcmd1bWVudCByZWdp
c3Rlci4gVGhpcyBpcyB2aWV3ZWQgYXMgZXhlY3V0aW5nIGF0IHRoZSB0b3Agb2YgdGhlIHByb2dy
YW0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRWYWx1ZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGF0Y2hwb2ludFZhbHVl
LmNwcAkocmV2aXNpb24gMTk2MDExKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGF0
Y2hwb2ludFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDksOCArNDksOCBAQCBWYWx1ZSog
UGF0Y2hwb2ludFZhbHVlOjpjbG9uZUltcGwoKSBjb25zCiAgICAgcmV0dXJuIG5ldyBQYXRjaHBv
aW50VmFsdWUoKnRoaXMpOwogfQogCi1QYXRjaHBvaW50VmFsdWU6OlBhdGNocG9pbnRWYWx1ZSh1
bnNpZ25lZCBpbmRleCwgVHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luKQotICAgIDogQmFzZShpbmRl
eCwgQ2hlY2tlZE9wY29kZSwgUGF0Y2hwb2ludCwgdHlwZSwgb3JpZ2luKQorUGF0Y2hwb2ludFZh
bHVlOjpQYXRjaHBvaW50VmFsdWUoVHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luKQorICAgIDogQmFz
ZShDaGVja2VkT3Bjb2RlLCBQYXRjaHBvaW50LCB0eXBlLCBvcmlnaW4pCiAgICAgLCBlZmZlY3Rz
KEVmZmVjdHM6OmZvckNhbGwoKSkKICAgICAsIHJlc3VsdENvbnN0cmFpbnQodHlwZSA9PSBWb2lk
ID8gVmFsdWVSZXA6Oldhcm1BbnkgOiBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKQogewpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGF0Y2hwb2ludFZhbHVlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGF0Y2hwb2ludFZhbHVlLmgJKHJldmlzaW9u
IDE5NjAxMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRWYWx1ZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC03MCw3ICs3MCw3IEBAIHByb3RlY3RlZDoKIHByaXZhdGU6CiAg
ICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIFBhdGNo
cG9pbnRWYWx1ZSh1bnNpZ25lZCBpbmRleCwgVHlwZSwgT3JpZ2luKTsKKyAgICBKU19FWFBPUlRf
UFJJVkFURSBQYXRjaHBvaW50VmFsdWUoVHlwZSwgT3JpZ2luKTsKIH07CiAKIH0gfSAvLyBuYW1l
c3BhY2UgSlNDOjpCMwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUu
Y3BwCShyZXZpc2lvbiAxOTYwMTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9j
ZWR1cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSAiQjNP
cGFxdWVCeXByb2R1Y3RzLmgiCiAjaW5jbHVkZSAiQjNTdGFja1Nsb3QuaCIKICNpbmNsdWRlICJC
M1ZhbHVlSW5saW5lcy5oIgorI2luY2x1ZGUgIkIzVmFyaWFibGUuaCIKIAogbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBCMyB7CiAKQEAgLTQ2LDcgKzQ3LDYgQEAgUHJvY2VkdXJlOjpQcm9jZWR1
cmUoKQogICAgICwgbV9sYXN0UGhhc2VOYW1lKCJpbml0aWFsIikKICAgICAsIG1fYnlwcm9kdWN0
cyhzdGQ6Om1ha2VfdW5pcXVlPE9wYXF1ZUJ5cHJvZHVjdHM+KCkpCiAgICAgLCBtX2NvZGUobmV3
IEFpcjo6Q29kZSgqdGhpcykpCi0gICAgLCBtX3ZhbHVlc0NvbGxlY3Rpb24oKnRoaXMpCiB7CiB9
CiAKQEAgLTcwLDUxICs3MCwyMiBAQCBCYXNpY0Jsb2NrKiBQcm9jZWR1cmU6OmFkZEJsb2NrKGRv
dWJsZSBmCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBQcm9jZWR1cmU6OnNldEJsb2Nr
T3JkZXJJbXBsKFZlY3RvcjxCYXNpY0Jsb2NrKj4mIGJsb2NrcykKK1N0YWNrU2xvdCogUHJvY2Vk
dXJlOjphZGRTdGFja1Nsb3QodW5zaWduZWQgYnl0ZVNpemUpCiB7Ci0gICAgSW5kZXhTZXQ8QmFz
aWNCbG9jaz4gYmxvY2tzU2V0OwotICAgIGJsb2Nrc1NldC5hZGRBbGwoYmxvY2tzKTsKLQotICAg
IGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiAqdGhpcykgewotICAgICAgICBpZiAoIWJsb2Nrc1Nl
dC5jb250YWlucyhibG9jaykpCi0gICAgICAgICAgICBibG9ja3MuYXBwZW5kKGJsb2NrKTsKLSAg
ICB9Ci0KLSAgICAvLyBQbGFjZSBibG9ja3MgaW50byB0aGlzJ3MgYmxvY2sgbGlzdCBieSBmaXJz
dCBsZWFraW5nIGFsbCBvZiB0aGUgYmxvY2tzIGFuZCB0aGVuIHJlYWRvcHRpbmcKLSAgICAvLyB0
aGVtLgotICAgIGZvciAoYXV0byYgZW50cnkgOiBtX2Jsb2NrcykKLSAgICAgICAgZW50cnkucmVs
ZWFzZSgpOwotCi0gICAgbV9ibG9ja3MucmVzaXplKGJsb2Nrcy5zaXplKCkpOwotICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBibG9ja3Muc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgQmFzaWNC
bG9jayogYmxvY2sgPSBibG9ja3NbaV07Ci0gICAgICAgIGJsb2NrLT5tX2luZGV4ID0gaTsKLSAg
ICAgICAgbV9ibG9ja3NbaV0gPSBzdGQ6OnVuaXF1ZV9wdHI8QmFzaWNCbG9jaz4oYmxvY2spOwot
ICAgIH0KLX0KLQotU3RhY2tTbG90KiBQcm9jZWR1cmU6OmFkZFN0YWNrU2xvdCh1bnNpZ25lZCBi
eXRlU2l6ZSwgU3RhY2tTbG90S2luZCBraW5kKQotewotICAgIHNpemVfdCBpbmRleCA9IGFkZFN0
YWNrU2xvdEluZGV4KCk7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFN0YWNrU2xvdD4gc2xvdChuZXcg
U3RhY2tTbG90KGluZGV4LCBieXRlU2l6ZSwga2luZCkpOwotICAgIFN0YWNrU2xvdCogcmVzdWx0
ID0gc2xvdC5nZXQoKTsKLSAgICBtX3N0YWNrU2xvdHNbaW5kZXhdID0gV1RGTW92ZShzbG90KTsK
LSAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiBtX3N0YWNrU2xvdHMuYWRkTmV3KGJ5dGVT
aXplKTsKIH0KIAotU3RhY2tTbG90KiBQcm9jZWR1cmU6OmFkZEFub255bW91c1N0YWNrU2xvdChU
eXBlIHR5cGUpCitWYXJpYWJsZSogUHJvY2VkdXJlOjphZGRWYXJpYWJsZShUeXBlIHR5cGUpCiB7
Ci0gICAgcmV0dXJuIGFkZFN0YWNrU2xvdChzaXplb2ZUeXBlKHR5cGUpLCBTdGFja1Nsb3RLaW5k
OjpBbm9ueW1vdXMpOworICAgIHJldHVybiBtX3ZhcmlhYmxlcy5hZGROZXcodHlwZSk7IAogfQog
CiBWYWx1ZSogUHJvY2VkdXJlOjpjbG9uZShWYWx1ZSogdmFsdWUpCiB7CiAgICAgc3RkOjp1bmlx
dWVfcHRyPFZhbHVlPiBjbG9uZSh2YWx1ZS0+Y2xvbmVJbXBsKCkpOwotICAgIFZhbHVlKiByZXN1
bHQgPSBjbG9uZS5nZXQoKTsKLSAgICBjbG9uZS0+bV9pbmRleCA9IGFkZFZhbHVlSW5kZXgoKTsK
KyAgICBjbG9uZS0+bV9pbmRleCA9IFVJTlRfTUFYOwogICAgIGNsb25lLT5vd25lciA9IG51bGxw
dHI7Ci0gICAgbV92YWx1ZXNbY2xvbmUtPm1faW5kZXhdID0gV1RGTW92ZShjbG9uZSk7Ci0gICAg
cmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gbV92YWx1ZXMuYWRkKFdURk1vdmUoY2xvbmUpKTsK
IH0KIAogVmFsdWUqIFByb2NlZHVyZTo6YWRkSW50Q29uc3RhbnQoT3JpZ2luIG9yaWdpbiwgVHlw
ZSB0eXBlLCBpbnQ2NF90IHZhbHVlKQpAQCAtMjA4LDYgKzE3OSwxMSBAQCB2b2lkIFByb2NlZHVy
ZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjCiAgICAgICAgIH0KICAgICAgICAgZGF0YUxvZygi
ICAgICIsIGRlZXBEdW1wKCp0aGlzLCB2YWx1ZSksICJcbiIpOwogICAgIH0KKyAgICBpZiAodmFy
aWFibGVzKCkuc2l6ZSgpKSB7CisgICAgICAgIG91dC5wcmludCgiVmFyaWFibGVzOlxuIik7Cisg
ICAgICAgIGZvciAoVmFyaWFibGUqIHZhcmlhYmxlIDogdmFyaWFibGVzKCkpCisgICAgICAgICAg
ICBvdXQucHJpbnQoIiAgICAiLCBkZWVwRHVtcCh2YXJpYWJsZSksICJcbiIpOworICAgIH0KICAg
ICBpZiAoc3RhY2tTbG90cygpLnNpemUoKSkgewogICAgICAgICBvdXQucHJpbnQoIlN0YWNrIHNs
b3RzOlxuIik7CiAgICAgICAgIGZvciAoU3RhY2tTbG90KiBzbG90IDogc3RhY2tTbG90cygpKQpA
QCAtMjI5LDE3ICsyMDUsMTcgQEAgVmVjdG9yPEJhc2ljQmxvY2sqPiBQcm9jZWR1cmU6OmJsb2Nr
c0luUAogCiB2b2lkIFByb2NlZHVyZTo6ZGVsZXRlU3RhY2tTbG90KFN0YWNrU2xvdCogc3RhY2tT
bG90KQogewotICAgIFJFTEVBU0VfQVNTRVJUKG1fc3RhY2tTbG90c1tzdGFja1Nsb3QtPmluZGV4
KCldLmdldCgpID09IHN0YWNrU2xvdCk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoIXN0YWNrU2xvdC0+
aXNMb2NrZWQoKSk7Ci0gICAgbV9zdGFja1Nsb3RJbmRleEZyZWVMaXN0LmFwcGVuZChzdGFja1Ns
b3QtPmluZGV4KCkpOwotICAgIG1fc3RhY2tTbG90c1tzdGFja1Nsb3QtPmluZGV4KCldID0gbnVs
bHB0cjsKKyAgICBtX3N0YWNrU2xvdHMucmVtb3ZlKHN0YWNrU2xvdCk7Cit9CisKK3ZvaWQgUHJv
Y2VkdXJlOjpkZWxldGVWYXJpYWJsZShWYXJpYWJsZSogdmFyaWFibGUpCit7CisgICAgbV92YXJp
YWJsZXMucmVtb3ZlKHZhcmlhYmxlKTsKIH0KIAogdm9pZCBQcm9jZWR1cmU6OmRlbGV0ZVZhbHVl
KFZhbHVlKiB2YWx1ZSkKIHsKLSAgICBSRUxFQVNFX0FTU0VSVChtX3ZhbHVlc1t2YWx1ZS0+aW5k
ZXgoKV0uZ2V0KCkgPT0gdmFsdWUpOwotICAgIG1fdmFsdWVJbmRleEZyZWVMaXN0LmFwcGVuZCh2
YWx1ZS0+aW5kZXgoKSk7Ci0gICAgbV92YWx1ZXNbdmFsdWUtPmluZGV4KCldID0gbnVsbHB0cjsK
KyAgICBtX3ZhbHVlcy5yZW1vdmUodmFsdWUpOwogfQogCiB2b2lkIFByb2NlZHVyZTo6ZGVsZXRl
T3JwaGFucygpCkBAIC0zMTEsMjYgKzI4NywzMiBAQCBjb25zdCBSZWdpc3RlckF0T2Zmc2V0TGlz
dCYgUHJvY2VkdXJlOjpjCiAgICAgcmV0dXJuIGNvZGUoKS5jYWxsZWVTYXZlUmVnaXN0ZXJzKCk7
CiB9CiAKLXNpemVfdCBQcm9jZWR1cmU6OmFkZFN0YWNrU2xvdEluZGV4KCkKK1ZhbHVlKiBQcm9j
ZWR1cmU6OmFkZFZhbHVlSW1wbChWYWx1ZSogdmFsdWUpCiB7Ci0gICAgaWYgKG1fc3RhY2tTbG90
SW5kZXhGcmVlTGlzdC5pc0VtcHR5KCkpIHsKLSAgICAgICAgc2l6ZV90IGluZGV4ID0gbV9zdGFj
a1Nsb3RzLnNpemUoKTsKLSAgICAgICAgbV9zdGFja1Nsb3RzLmFwcGVuZChudWxscHRyKTsKLSAg
ICAgICAgcmV0dXJuIGluZGV4OwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gbV9zdGFja1Nsb3RJ
bmRleEZyZWVMaXN0LnRha2VMYXN0KCk7CisgICAgcmV0dXJuIG1fdmFsdWVzLmFkZChzdGQ6OnVu
aXF1ZV9wdHI8VmFsdWU+KHZhbHVlKSk7CiB9CiAKLXNpemVfdCBQcm9jZWR1cmU6OmFkZFZhbHVl
SW5kZXgoKQordm9pZCBQcm9jZWR1cmU6OnNldEJsb2NrT3JkZXJJbXBsKFZlY3RvcjxCYXNpY0Js
b2NrKj4mIGJsb2NrcykKIHsKLSAgICBpZiAobV92YWx1ZUluZGV4RnJlZUxpc3QuaXNFbXB0eSgp
KSB7Ci0gICAgICAgIHNpemVfdCBpbmRleCA9IG1fdmFsdWVzLnNpemUoKTsKLSAgICAgICAgbV92
YWx1ZXMuYXBwZW5kKG51bGxwdHIpOwotICAgICAgICByZXR1cm4gaW5kZXg7CisgICAgSW5kZXhT
ZXQ8QmFzaWNCbG9jaz4gYmxvY2tzU2V0OworICAgIGJsb2Nrc1NldC5hZGRBbGwoYmxvY2tzKTsK
KworICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiAqdGhpcykgeworICAgICAgICBpZiAoIWJs
b2Nrc1NldC5jb250YWlucyhibG9jaykpCisgICAgICAgICAgICBibG9ja3MuYXBwZW5kKGJsb2Nr
KTsKKyAgICB9CisKKyAgICAvLyBQbGFjZSBibG9ja3MgaW50byB0aGlzJ3MgYmxvY2sgbGlzdCBi
eSBmaXJzdCBsZWFraW5nIGFsbCBvZiB0aGUgYmxvY2tzIGFuZCB0aGVuIHJlYWRvcHRpbmcKKyAg
ICAvLyB0aGVtLgorICAgIGZvciAoYXV0byYgZW50cnkgOiBtX2Jsb2NrcykKKyAgICAgICAgZW50
cnkucmVsZWFzZSgpOworCisgICAgbV9ibG9ja3MucmVzaXplKGJsb2Nrcy5zaXplKCkpOworICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBibG9ja3Muc2l6ZSgpOyArK2kpIHsKKyAgICAgICAg
QmFzaWNCbG9jayogYmxvY2sgPSBibG9ja3NbaV07CisgICAgICAgIGJsb2NrLT5tX2luZGV4ID0g
aTsKKyAgICAgICAgbV9ibG9ja3NbaV0gPSBzdGQ6OnVuaXF1ZV9wdHI8QmFzaWNCbG9jaz4oYmxv
Y2spOwogICAgIH0KLSAgICAKLSAgICByZXR1cm4gbV92YWx1ZUluZGV4RnJlZUxpc3QudGFrZUxh
c3QoKTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNQcm9jZWR1cmUuaAkocmV2aXNpb24gMTk2MDExKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcg
QEAKICNpbmNsdWRlICJCM09wYXF1ZUJ5cHJvZHVjdHMuaCIKICNpbmNsdWRlICJCM09yaWdpbi5o
IgogI2luY2x1ZGUgIkIzUENUb09yaWdpbk1hcC5oIgotI2luY2x1ZGUgIkIzU3RhY2tTbG90S2lu
ZC5oIgorI2luY2x1ZGUgIkIzU3BhcnNlQ29sbGVjdGlvbi5oIgogI2luY2x1ZGUgIkIzVHlwZS5o
IgogI2luY2x1ZGUgIkIzVmFsdWVLZXkuaCIKICNpbmNsdWRlICJQdXJlTmFOLmgiCkBAIC01Myw2
ICs1Myw3IEBAIGNsYXNzIENGRzsKIGNsYXNzIERvbWluYXRvcnM7CiBjbGFzcyBTdGFja1Nsb3Q7
CiBjbGFzcyBWYWx1ZTsKK2NsYXNzIFZhcmlhYmxlOwogCiBuYW1lc3BhY2UgQWlyIHsgY2xhc3Mg
Q29kZTsgfQogCkBAIC05NCw4ICs5NSw4IEBAIHB1YmxpYzoKICAgICAgICAgc2V0QmxvY2tPcmRl
ckltcGwoYmxvY2tzKTsKICAgICB9CiAKLSAgICBKU19FWFBPUlRfUFJJVkFURSBTdGFja1Nsb3Qq
IGFkZFN0YWNrU2xvdCh1bnNpZ25lZCBieXRlU2l6ZSwgU3RhY2tTbG90S2luZCk7Ci0gICAgSlNf
RVhQT1JUX1BSSVZBVEUgU3RhY2tTbG90KiBhZGRBbm9ueW1vdXNTdGFja1Nsb3QoVHlwZSk7Cisg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgU3RhY2tTbG90KiBhZGRTdGFja1Nsb3QodW5zaWduZWQgYnl0
ZVNpemUpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIFZhcmlhYmxlKiBhZGRWYXJpYWJsZShUeXBl
KTsKICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lLi4uIEFy
Z3VtZW50cz4KICAgICBWYWx1ZVR5cGUqIGFkZChBcmd1bWVudHMuLi4pOwpAQCAtMTc4LDE0MyAr
MTc5LDIyIEBAIHB1YmxpYzoKICAgICBWZWN0b3I8QmFzaWNCbG9jayo+IGJsb2Nrc0luUHJlT3Jk
ZXIoKTsKICAgICBWZWN0b3I8QmFzaWNCbG9jayo+IGJsb2Nrc0luUG9zdE9yZGVyKCk7CiAKLSAg
ICBjbGFzcyBTdGFja1Nsb3RzQ29sbGVjdGlvbiB7Ci0gICAgcHVibGljOgotICAgICAgICBTdGFj
a1Nsb3RzQ29sbGVjdGlvbihjb25zdCBQcm9jZWR1cmUmIHByb2MpCi0gICAgICAgICAgICA6IG1f
cHJvYyhwcm9jKQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgICAgICB1bnNpZ25lZCBzaXpl
KCkgY29uc3QgeyByZXR1cm4gbV9wcm9jLm1fc3RhY2tTbG90cy5zaXplKCk7IH0KLSAgICAgICAg
U3RhY2tTbG90KiBhdCh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9wcm9jLm1fc3Rh
Y2tTbG90c1tpbmRleF0uZ2V0KCk7IH0KLSAgICAgICAgU3RhY2tTbG90KiBvcGVyYXRvcltdKHVu
c2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBhdChpbmRleCk7IH0KLQotICAgICAgICBjbGFz
cyBpdGVyYXRvciB7Ci0gICAgICAgIHB1YmxpYzoKLSAgICAgICAgICAgIGl0ZXJhdG9yKCkKLSAg
ICAgICAgICAgICAgICA6IG1fY29sbGVjdGlvbihudWxscHRyKQotICAgICAgICAgICAgICAgICwg
bV9pbmRleCgwKQotICAgICAgICAgICAgewotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBp
dGVyYXRvcihjb25zdCBTdGFja1Nsb3RzQ29sbGVjdGlvbiYgY29sbGVjdGlvbiwgdW5zaWduZWQg
aW5kZXgpCi0gICAgICAgICAgICAgICAgOiBtX2NvbGxlY3Rpb24oJmNvbGxlY3Rpb24pCi0gICAg
ICAgICAgICAgICAgLCBtX2luZGV4KGZpbmROZXh0KGluZGV4KSkKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgU3RhY2tTbG90KiBvcGVyYXRvciooKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBtX2NvbGxlY3Rpb24tPmF0KG1faW5kZXgp
OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpdGVyYXRvciYgb3BlcmF0b3IrKygpCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbV9pbmRleCA9IGZpbmROZXh0KG1faW5kZXgg
KyAxKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0Ci0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG1faW5kZXggPT0gb3RoZXIubV9p
bmRleDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0
IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0
ZToKLSAgICAgICAgICAgIHVuc2lnbmVkIGZpbmROZXh0KHVuc2lnbmVkIGluZGV4KQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIHdoaWxlIChpbmRleCA8IG1fY29sbGVjdGlvbi0+c2l6
ZSgpICYmICFtX2NvbGxlY3Rpb24tPmF0KGluZGV4KSkKLSAgICAgICAgICAgICAgICAgICAgaW5k
ZXgrKzsKLSAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXg7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIGNvbnN0IFN0YWNrU2xvdHNDb2xsZWN0aW9uKiBtX2NvbGxl
Y3Rpb247Ci0gICAgICAgICAgICB1bnNpZ25lZCBtX2luZGV4OwotICAgICAgICB9OwotCi0gICAg
ICAgIGl0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoKnRoaXMsIDApOyB9
Ci0gICAgICAgIGl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKCp0aGlzLCBz
aXplKCkpOyB9Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBjb25zdCBQcm9jZWR1cmUmIG1fcHJv
YzsKLSAgICB9OwotCi0gICAgU3RhY2tTbG90c0NvbGxlY3Rpb24gc3RhY2tTbG90cygpIGNvbnN0
IHsgcmV0dXJuIFN0YWNrU2xvdHNDb2xsZWN0aW9uKCp0aGlzKTsgfQorICAgIFNwYXJzZUNvbGxl
Y3Rpb248U3RhY2tTbG90PiYgc3RhY2tTbG90cygpIHsgcmV0dXJuIG1fc3RhY2tTbG90czsgfQor
ICAgIGNvbnN0IFNwYXJzZUNvbGxlY3Rpb248U3RhY2tTbG90PiYgc3RhY2tTbG90cygpIGNvbnN0
IHsgcmV0dXJuIG1fc3RhY2tTbG90czsgfQogCisgICAgLy8gU2hvcnQgZm9yIHN0YWNrU2xvdHMo
KS5yZW1vdmUoKS4gSXQncyBiZXR0ZXIgdG8gY2FsbCB0aGlzIG1ldGhvZCBzaW5jZSBpdCdzIG91
dCBvZiBsaW5lLgogICAgIHZvaWQgZGVsZXRlU3RhY2tTbG90KFN0YWNrU2xvdCopOwotICAgIAot
ICAgIGNsYXNzIFZhbHVlc0NvbGxlY3Rpb24gewotICAgIHB1YmxpYzoKLSAgICAgICAgVmFsdWVz
Q29sbGVjdGlvbihjb25zdCBQcm9jZWR1cmUmIHByb2NlZHVyZSkKLSAgICAgICAgICAgIDogbV9w
cm9jZWR1cmUocHJvY2VkdXJlKQotICAgICAgICB7Ci0gICAgICAgIH0KIAotICAgICAgICBjbGFz
cyBpdGVyYXRvciB7Ci0gICAgICAgIHB1YmxpYzoKLSAgICAgICAgICAgIGl0ZXJhdG9yKCkKLSAg
ICAgICAgICAgICAgICA6IG1fcHJvY2VkdXJlKG51bGxwdHIpCi0gICAgICAgICAgICAgICAgLCBt
X2luZGV4KDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGl0
ZXJhdG9yKGNvbnN0IFByb2NlZHVyZSYgcHJvY2VkdXJlLCB1bnNpZ25lZCBpbmRleCkKLSAgICAg
ICAgICAgICAgICA6IG1fcHJvY2VkdXJlKCZwcm9jZWR1cmUpCi0gICAgICAgICAgICAgICAgLCBt
X2luZGV4KGZpbmROZXh0KGluZGV4KSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgVmFsdWUqIG9wZXJhdG9yKigpIGNvbnN0Ci0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIG1fcHJvY2VkdXJlLT5tX3ZhbHVlc1ttX2luZGV4XS5nZXQoKTsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaXRlcmF0b3ImIG9wZXJhdG9yKysoKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIG1faW5kZXggPSBmaW5kTmV4dChtX2luZGV4ICsg
MSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuICp0aGlzOwotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIEFTU0VSVChtX3Byb2NlZHVyZSA9PSBvdGhlci5t
X3Byb2NlZHVyZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG1faW5kZXggPT0gb3RoZXIubV9p
bmRleDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0
IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0
ZToKLSAgICAgICAgICAgIHVuc2lnbmVkIGZpbmROZXh0KHVuc2lnbmVkIGluZGV4KQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIHdoaWxlIChpbmRleCA8IG1fcHJvY2VkdXJlLT5tX3Zh
bHVlcy5zaXplKCkgJiYgIW1fcHJvY2VkdXJlLT5tX3ZhbHVlc1tpbmRleF0pCi0gICAgICAgICAg
ICAgICAgICAgIGluZGV4Kys7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4OwotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICBjb25zdCBQcm9jZWR1cmUqIG1fcHJvY2VkdXJlOwotICAg
ICAgICAgICAgdW5zaWduZWQgbV9pbmRleDsKLSAgICAgICAgfTsKLQotICAgICAgICBpdGVyYXRv
ciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKG1fcHJvY2VkdXJlLCAwKTsgfQotICAg
ICAgICBpdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcihtX3Byb2NlZHVyZSwg
bV9wcm9jZWR1cmUubV92YWx1ZXMuc2l6ZSgpKTsgfQotCi0gICAgICAgIHVuc2lnbmVkIHNpemUo
KSBjb25zdCB7IHJldHVybiBtX3Byb2NlZHVyZS5tX3ZhbHVlcy5zaXplKCk7IH0KLSAgICAgICAg
VmFsdWUqIGF0KHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBtX3Byb2NlZHVyZS5tX3Zh
bHVlc1tpbmRleF0uZ2V0KCk7IH0KLSAgICAgICAgVmFsdWUqIG9wZXJhdG9yW10odW5zaWduZWQg
aW5kZXgpIGNvbnN0IHsgcmV0dXJuIGF0KGluZGV4KTsgfQotICAgICAgICAKLSAgICBwcml2YXRl
OgotICAgICAgICBjb25zdCBQcm9jZWR1cmUmIG1fcHJvY2VkdXJlOwotICAgIH07CisgICAgU3Bh
cnNlQ29sbGVjdGlvbjxWYXJpYWJsZT4mIHZhcmlhYmxlcygpIHsgcmV0dXJuIG1fdmFyaWFibGVz
OyB9CisgICAgY29uc3QgU3BhcnNlQ29sbGVjdGlvbjxWYXJpYWJsZT4mIHZhcmlhYmxlcygpIGNv
bnN0IHsgcmV0dXJuIG1fdmFyaWFibGVzOyB9CisKKyAgICAvLyBTaG9ydCBmb3IgdmFyaWFibGVz
KCkucmVtb3ZlKCkuIEl0J3MgYmV0dGVyIHRvIGNhbGwgdGhpcyBtZXRob2Qgc2luY2UgaXQncyBv
dXQgb2YgbGluZS4KKyAgICB2b2lkIGRlbGV0ZVZhcmlhYmxlKFZhcmlhYmxlKik7CiAKLSAgICBj
b25zdCBWYWx1ZXNDb2xsZWN0aW9uJiB2YWx1ZXMoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlc0Nv
bGxlY3Rpb247IH0KKyAgICBTcGFyc2VDb2xsZWN0aW9uPFZhbHVlPiYgdmFsdWVzKCkgeyByZXR1
cm4gbV92YWx1ZXM7IH0KKyAgICBjb25zdCBTcGFyc2VDb2xsZWN0aW9uPFZhbHVlPiYgdmFsdWVz
KCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXM7IH0KIAorICAgIC8vIFNob3J0IGZvciB2YWx1ZXMo
KS5yZW1vdmUoKS4gSXQncyBiZXR0ZXIgdG8gY2FsbCB0aGlzIG1ldGhvZCBzaW5jZSBpdCdzIG91
dCBvZiBsaW5lLgogICAgIHZvaWQgZGVsZXRlVmFsdWUoVmFsdWUqKTsKIAogICAgIC8vIEEgdmFs
aWQgcHJvY2VkdXJlIGNhbm5vdCBjb250YWluIGFueSBvcnBoYW4gdmFsdWVzLiBBbiBvcnBoYW4g
aXMgYSB2YWx1ZSB0aGF0IGlzIG5vdCBpbgpAQCAtMzY3LDE3ICsyNDcsMTQgQEAgcHVibGljOgog
CiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBCbG9ja0luc2VydGlvblNldDsKLSAgICAKLSAg
ICB2b2lkIHNldEJsb2NrT3JkZXJJbXBsKFZlY3RvcjxCYXNpY0Jsb2NrKj4mKTsKIAotICAgIHNp
emVfdCBhZGRTdGFja1Nsb3RJbmRleCgpOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHNpemVfdCBh
ZGRWYWx1ZUluZGV4KCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgVmFsdWUqIGFkZFZhbHVlSW1w
bChWYWx1ZSopOworICAgIHZvaWQgc2V0QmxvY2tPcmRlckltcGwoVmVjdG9yPEJhc2ljQmxvY2sq
PiYpOwogCi0gICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxTdGFja1Nsb3Q+PiBtX3N0YWNrU2xv
dHM7CisgICAgU3BhcnNlQ29sbGVjdGlvbjxTdGFja1Nsb3Q+IG1fc3RhY2tTbG90czsKKyAgICBT
cGFyc2VDb2xsZWN0aW9uPFZhcmlhYmxlPiBtX3ZhcmlhYmxlczsKICAgICBWZWN0b3I8c3RkOjp1
bmlxdWVfcHRyPEJhc2ljQmxvY2s+PiBtX2Jsb2NrczsKLSAgICBWZWN0b3I8c3RkOjp1bmlxdWVf
cHRyPFZhbHVlPj4gbV92YWx1ZXM7Ci0gICAgVmVjdG9yPHNpemVfdD4gbV9zdGFja1Nsb3RJbmRl
eEZyZWVMaXN0OwotICAgIFZlY3RvcjxzaXplX3Q+IG1fdmFsdWVJbmRleEZyZWVMaXN0OworICAg
IFNwYXJzZUNvbGxlY3Rpb248VmFsdWU+IG1fdmFsdWVzOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxD
Rkc+IG1fY2ZnOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxEb21pbmF0b3JzPiBtX2RvbWluYXRvcnM7
CiAgICAgSGFzaFNldDxWYWx1ZUtleT4gbV9mYXN0Q29uc3RhbnRzOwpAQCAtMzg2LDcgKzI2Myw2
IEBAIHByaXZhdGU6CiAgICAgc3RkOjp1bmlxdWVfcHRyPEFpcjo6Q29kZT4gbV9jb2RlOwogICAg
IFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoUHJpbnRTdHJlYW0mLCBPcmlnaW4pPj4gbV9vcmlnaW5Q
cmludGVyOwogICAgIGNvbnN0IHZvaWQqIG1fZnJvbnRlbmREYXRhOwotICAgIFZhbHVlc0NvbGxl
Y3Rpb24gbV92YWx1ZXNDb2xsZWN0aW9uOwogICAgIFBDVG9PcmlnaW5NYXAgbV9wY1RvT3JpZ2lu
TWFwOwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlSW5s
aW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVy
ZUlubGluZXMuaAkocmV2aXNpb24gMTk2MDExKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzUHJvY2VkdXJlSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiwxMSArMzYsNyBAQCBu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKIHRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlVHlw
ZSwgdHlwZW5hbWUuLi4gQXJndW1lbnRzPgogVmFsdWVUeXBlKiBQcm9jZWR1cmU6OmFkZChBcmd1
bWVudHMuLi4gYXJndW1lbnRzKQogewotICAgIHNpemVfdCBpbmRleCA9IGFkZFZhbHVlSW5kZXgo
KTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8VmFsdWVUeXBlPiB2YWx1ZShuZXcgVmFsdWVUeXBlKGlu
ZGV4LCBhcmd1bWVudHMuLi4pKTsKLSAgICBWYWx1ZVR5cGUqIHJlc3VsdCA9IHZhbHVlLmdldCgp
OwotICAgIG1fdmFsdWVzW2luZGV4XSA9IFdURk1vdmUodmFsdWUpOwotICAgIHJldHVybiByZXN1
bHQ7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFZhbHVlVHlwZSo+KGFkZFZhbHVlSW1wbChuZXcg
VmFsdWVUeXBlKGFyZ3VtZW50cy4uLikpKTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIz
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUmVkdWNlU3RyZW5ndGguY3Bw
CShyZXZpc2lvbiAxOTYwMTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VT
dHJlbmd0aC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDYgKzQ1LDggQEAKICNpbmNsdWRlICJC
M1Vwc2lsb25WYWx1ZS5oIgogI2luY2x1ZGUgIkIzVmFsdWVLZXlJbmxpbmVzLmgiCiAjaW5jbHVk
ZSAiQjNWYWx1ZUlubGluZXMuaCIKKyNpbmNsdWRlICJCM1ZhcmlhYmxlLmgiCisjaW5jbHVkZSAi
QjNWYXJpYWJsZVZhbHVlLmgiCiAjaW5jbHVkZSA8d3RmL0dyYXBoTm9kZVdvcmtsaXN0Lmg+CiAj
aW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KIApAQCAtMjI4MywxMyArMjI4NSwxNSBAQCBwcml2YXRl
OgogICAgICAgICBWZWN0b3I8VXBzaWxvblZhbHVlKiwgNjQ+IHVwc2lsb25zOwogICAgICAgICBm
b3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9wcm9jKSB7CiAgICAgICAgICAgICBmb3IgKFZhbHVl
KiB2YWx1ZSA6ICpibG9jaykgewotICAgICAgICAgICAgICAgIEVmZmVjdHMgZWZmZWN0cyA9IHZh
bHVlLT5lZmZlY3RzKCk7Ci0gICAgICAgICAgICAgICAgLy8gV2UgZG9uJ3QgY2FyZSBhYm91dCBT
U0EgRWZmZWN0cywgc2luY2Ugd2UgbW9kZWwgdGhlbSBtb3JlIGFjY3VyYXRlbHkgdGhhbiB0aGUK
LSAgICAgICAgICAgICAgICAvLyBlZmZlY3RzKCkgbWV0aG9kIGRvZXMuCi0gICAgICAgICAgICAg
ICAgZWZmZWN0cy53cml0ZXNTU0FTdGF0ZSA9IGZhbHNlOwotICAgICAgICAgICAgICAgIGVmZmVj
dHMucmVhZHNTU0FTdGF0ZSA9IGZhbHNlOworICAgICAgICAgICAgICAgIEVmZmVjdHMgZWZmZWN0
czsKKyAgICAgICAgICAgICAgICAvLyBXZSBkb24ndCBjYXJlIGFib3V0IGVmZmVjdHMgb2YgU1NB
IG9wZXJhdGlvbnMsIHNpbmNlIHdlIG1vZGVsIHRoZW0gbW9yZQorICAgICAgICAgICAgICAgIC8v
IGFjY3VyYXRlbHkgdGhhIHRoZSBlZmZlY3RzKCkgbWV0aG9kIGRvZXMuCisgICAgICAgICAgICAg
ICAgaWYgKHZhbHVlLT5vcGNvZGUoKSAhPSBQaGkgJiYgdmFsdWUtPm9wY29kZSgpICE9IFVwc2ls
b24pCisgICAgICAgICAgICAgICAgICAgIGVmZmVjdHMgPSB2YWx1ZS0+ZWZmZWN0cygpOworICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGlmIChlZmZlY3RzLm11c3RFeGVjdXRlKCkp
CiAgICAgICAgICAgICAgICAgICAgIHdvcmtsaXN0LnB1c2godmFsdWUpOworICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgICAgIGlmIChVcHNpbG9uVmFsdWUqIHVwc2lsb24gPSB2YWx1ZS0+
YXM8VXBzaWxvblZhbHVlPigpKQogICAgICAgICAgICAgICAgICAgICB1cHNpbG9ucy5hcHBlbmQo
dXBzaWxvbik7CiAgICAgICAgICAgICB9CkBAIC0yMzE0LDcgKzIzMTgsNyBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKLSAgICAgICAgSW5kZXhTZXQ8U3Rh
Y2tTbG90PiBsaXZlU3RhY2tTbG90czsKKyAgICAgICAgSW5kZXhTZXQ8VmFyaWFibGU+IGxpdmVW
YXJpYWJsZXM7CiAgICAgICAgIAogICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9w
cm9jKSB7CiAgICAgICAgICAgICBzaXplX3Qgc291cmNlSW5kZXggPSAwOwpAQCAtMjMyMiw4ICsy
MzI2LDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHdoaWxlIChzb3VyY2VJbmRleCA8IGJsb2Nr
LT5zaXplKCkpIHsKICAgICAgICAgICAgICAgICBWYWx1ZSogdmFsdWUgPSBibG9jay0+YXQoc291
cmNlSW5kZXgrKyk7CiAgICAgICAgICAgICAgICAgaWYgKHdvcmtsaXN0LnNhdyh2YWx1ZSkpIHsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKFNsb3RCYXNlVmFsdWUqIHNsb3RCYXNlID0gdmFsdWUt
PmFzPFNsb3RCYXNlVmFsdWU+KCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBsaXZlU3RhY2tT
bG90cy5hZGQoc2xvdEJhc2UtPnNsb3QoKSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChWYXJp
YWJsZVZhbHVlKiB2YXJpYWJsZVZhbHVlID0gdmFsdWUtPmFzPFZhcmlhYmxlVmFsdWU+KCkpCisg
ICAgICAgICAgICAgICAgICAgICAgICBsaXZlVmFyaWFibGVzLmFkZCh2YXJpYWJsZVZhbHVlLT52
YXJpYWJsZSgpKTsKICAgICAgICAgICAgICAgICAgICAgYmxvY2stPmF0KHRhcmdldEluZGV4Kysp
ID0gdmFsdWU7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAg
bV9wcm9jLmRlbGV0ZVZhbHVlKHZhbHVlKTsKQEAgLTIzMzgsMTAgKzIzNDIsOSBAQCBwcml2YXRl
OgogICAgICAgICAgICAgYmxvY2stPnZhbHVlcygpLnJlc2l6ZSh0YXJnZXRJbmRleCk7CiAgICAg
ICAgIH0KIAotICAgICAgICBmb3IgKFN0YWNrU2xvdCogc2xvdCA6IG1fcHJvYy5zdGFja1Nsb3Rz
KCkpIHsKLSAgICAgICAgICAgIGlmIChzbG90LT5pc0xvY2tlZCgpIHx8IGxpdmVTdGFja1Nsb3Rz
LmNvbnRhaW5zKHNsb3QpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAg
bV9wcm9jLmRlbGV0ZVN0YWNrU2xvdChzbG90KTsKKyAgICAgICAgZm9yIChWYXJpYWJsZSogdmFy
aWFibGUgOiBtX3Byb2MudmFyaWFibGVzKCkpIHsKKyAgICAgICAgICAgIGlmICghbGl2ZVZhcmlh
Ymxlcy5jb250YWlucyh2YXJpYWJsZSkpCisgICAgICAgICAgICAgICAgbV9wcm9jLmRlbGV0ZVZh
cmlhYmxlKHZhcmlhYmxlKTsKICAgICAgICAgfQogICAgIH0KIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzU2xvdEJhc2VWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1Nsb3RCYXNlVmFsdWUuaAkocmV2aXNpb24gMTk2MDExKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU2xvdEJhc2VWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC01MCw4ICs1MCw4IEBAIHByb3RlY3RlZDoKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIFBy
b2NlZHVyZTsKIAotICAgIFNsb3RCYXNlVmFsdWUodW5zaWduZWQgaW5kZXgsIE9yaWdpbiBvcmln
aW4sIFN0YWNrU2xvdCogc2xvdCkKLSAgICAgICAgOiBWYWx1ZShpbmRleCwgQ2hlY2tlZE9wY29k
ZSwgU2xvdEJhc2UsIHBvaW50ZXJUeXBlKCksIG9yaWdpbikKKyAgICBTbG90QmFzZVZhbHVlKE9y
aWdpbiBvcmlnaW4sIFN0YWNrU2xvdCogc2xvdCkKKyAgICAgICAgOiBWYWx1ZShDaGVja2VkT3Bj
b2RlLCBTbG90QmFzZSwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKQogICAgICAgICAsIG1fc2xvdChz
bG90KQogICAgIHsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTcGFy
c2VDb2xsZWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
U3BhcnNlQ29sbGVjdGlvbi5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzU3BhcnNlQ29sbGVjdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQ2IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
QjNTcGFyc2VDb2xsZWN0aW9uX2gKKyNkZWZpbmUgQjNTcGFyc2VDb2xsZWN0aW9uX2gKKworI2lm
IEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisjaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworLy8g
QjM6OlByb2NlZHVyZSBhbmQgQWlyOjpDb2RlIGhhdmUgYSBsb3Qgb2YgY29sbGVjdGlvbnMgb2Yg
aW5kZXhlZCB0aGluZ3MuIFRoaXMgaGFzIGFsbCBvZiB0aGUKKy8vIGxvZ2ljLgorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPgorY2xhc3MgU3BhcnNlQ29sbGVjdGlvbiB7CisgICAgdHlwZWRlZiBWZWN0
b3I8c3RkOjp1bmlxdWVfcHRyPFQ+PiBWZWN0b3JUeXBlOworICAgIAorcHVibGljOgorICAgIFNw
YXJzZUNvbGxlY3Rpb24oKQorICAgIHsKKyAgICB9CisKKyAgICBUKiBhZGQoc3RkOjp1bmlxdWVf
cHRyPFQ+IHZhbHVlKQorICAgIHsKKyAgICAgICAgVCogcmVzdWx0ID0gdmFsdWUuZ2V0KCk7Cisg
ICAgICAgIAorICAgICAgICBzaXplX3QgaW5kZXg7CisgICAgICAgIGlmIChtX2luZGV4RnJlZUxp
c3QuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBpbmRleCA9IG1fdmVjdG9yLnNpemUoKTsKKyAg
ICAgICAgICAgIG1fdmVjdG9yLmFwcGVuZChudWxscHRyKTsKKyAgICAgICAgfSBlbHNlCisgICAg
ICAgICAgICBpbmRleCA9IG1faW5kZXhGcmVlTGlzdC50YWtlTGFzdCgpOworCisgICAgICAgIHZh
bHVlLT5tX2luZGV4ID0gaW5kZXg7CisKKyAgICAgICAgbV92ZWN0b3JbaW5kZXhdID0gV1RGTW92
ZSh2YWx1ZSk7CisKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgVCogYWRkTmV3KEFyZ3VtZW50cyYmLi4uIGFy
Z3VtZW50cykKKyAgICB7CisgICAgICAgIHJldHVybiBhZGQoc3RkOjp1bmlxdWVfcHRyPFQ+KG5l
dyBUKHN0ZDo6Zm9yd2FyZDxBcmd1bWVudHM+KGFyZ3VtZW50cykuLi4pKSk7CisgICAgfQorCisg
ICAgdm9pZCByZW1vdmUoVCogdmFsdWUpCisgICAgeworICAgICAgICBSRUxFQVNFX0FTU0VSVCht
X3ZlY3Rvclt2YWx1ZS0+bV9pbmRleF0uZ2V0KCkgPT0gdmFsdWUpOworICAgICAgICBtX2luZGV4
RnJlZUxpc3QuYXBwZW5kKHZhbHVlLT5tX2luZGV4KTsKKyAgICAgICAgbV92ZWN0b3JbdmFsdWUt
Pm1faW5kZXhdID0gbnVsbHB0cjsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBzaXplKCkgY29uc3Qg
eyByZXR1cm4gbV92ZWN0b3Iuc2l6ZSgpOyB9CisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyBy
ZXR1cm4gbV92ZWN0b3IuaXNFbXB0eSgpOyB9CisgICAgCisgICAgVCogYXQodW5zaWduZWQgaW5k
ZXgpIGNvbnN0IHsgcmV0dXJuIG1fdmVjdG9yW2luZGV4XS5nZXQoKTsgfQorICAgIFQqIG9wZXJh
dG9yW10odW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGF0KGluZGV4KTsgfQorCisgICAg
Y2xhc3MgaXRlcmF0b3IgeworICAgIHB1YmxpYzoKKyAgICAgICAgaXRlcmF0b3IoKQorICAgICAg
ICAgICAgOiBtX2NvbGxlY3Rpb24obnVsbHB0cikKKyAgICAgICAgICAgICwgbV9pbmRleCgwKQor
ICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBpdGVyYXRvcihjb25zdCBTcGFyc2VDb2xs
ZWN0aW9uJiBjb2xsZWN0aW9uLCB1bnNpZ25lZCBpbmRleCkKKyAgICAgICAgICAgIDogbV9jb2xs
ZWN0aW9uKCZjb2xsZWN0aW9uKQorICAgICAgICAgICAgLCBtX2luZGV4KGZpbmROZXh0KGluZGV4
KSkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgVCogb3BlcmF0b3IqKCkKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIG1fY29sbGVjdGlvbi0+YXQobV9pbmRleCk7CisgICAg
ICAgIH0KKworICAgICAgICBpdGVyYXRvciYgb3BlcmF0b3IrKygpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIG1faW5kZXggPSBmaW5kTmV4dChtX2luZGV4ICsgMSk7CisgICAgICAgICAgICByZXR1
cm4gKnRoaXM7CisgICAgICAgIH0KKworICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRl
cmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQobV9jb2xs
ZWN0aW9uID09IG90aGVyLm1fY29sbGVjdGlvbik7CisgICAgICAgICAgICByZXR1cm4gbV9pbmRl
eCA9PSBvdGhlci5tX2luZGV4OworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBvcGVyYXRvciE9
KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAg
ICB1bnNpZ25lZCBmaW5kTmV4dCh1bnNpZ25lZCBpbmRleCkKKyAgICAgICAgeworICAgICAgICAg
ICAgd2hpbGUgKGluZGV4IDwgbV9jb2xsZWN0aW9uLT5zaXplKCkgJiYgIW1fY29sbGVjdGlvbi0+
YXQoaW5kZXgpKQorICAgICAgICAgICAgICAgIGluZGV4Kys7CisgICAgICAgICAgICByZXR1cm4g
aW5kZXg7CisgICAgICAgIH0KKworICAgICAgICBjb25zdCBTcGFyc2VDb2xsZWN0aW9uKiBtX2Nv
bGxlY3Rpb247CisgICAgICAgIHVuc2lnbmVkIG1faW5kZXg7CisgICAgfTsKKworICAgIGl0ZXJh
dG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoKnRoaXMsIDApOyB9CisgICAgaXRl
cmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoKnRoaXMsIHNpemUoKSk7IH0KKwor
cHJpdmF0ZToKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPFQ+PiBtX3ZlY3RvcjsKKyAgICBW
ZWN0b3I8c2l6ZV90PiBtX2luZGV4RnJlZUxpc3Q7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM1NwYXJzZUNv
bGxlY3Rpb25faAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja1Nsb3Qu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrU2xvdC5j
cHAJKHJldmlzaW9uIDE5NjAxMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNr
U2xvdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDEzICs0MSwxMSBAQCB2b2lkIFN0YWNrU2xv
dDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjCiAKIHZvaWQgU3RhY2tTbG90OjpkZWVwRHVtcChQ
cmludFN0cmVhbSYgb3V0KSBjb25zdAogewotICAgIG91dC5wcmludCgiYnl0ZVNpemUgPSAiLCBt
X2J5dGVTaXplLCAiLCBvZmZzZXRGcm9tRlAgPSAiLCBtX29mZnNldEZyb21GUCwgIiwga2luZCA9
ICIsIG1fa2luZCk7CisgICAgb3V0LnByaW50KCJieXRlU2l6ZSA9ICIsIG1fYnl0ZVNpemUsICIs
IG9mZnNldEZyb21GUCA9ICIsIG1fb2Zmc2V0RnJvbUZQKTsKIH0KIAotU3RhY2tTbG90OjpTdGFj
a1Nsb3QodW5zaWduZWQgaW5kZXgsIHVuc2lnbmVkIGJ5dGVTaXplLCBTdGFja1Nsb3RLaW5kIGtp
bmQpCi0gICAgOiBtX2luZGV4KGluZGV4KQotICAgICwgbV9ieXRlU2l6ZShieXRlU2l6ZSkKLSAg
ICAsIG1fa2luZChraW5kKQorU3RhY2tTbG90OjpTdGFja1Nsb3QodW5zaWduZWQgYnl0ZVNpemUp
CisgICAgOiBtX2J5dGVTaXplKGJ5dGVTaXplKQogewogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNTdGFja1Nsb3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNTdGFja1Nsb3QuaAkocmV2aXNpb24gMTk2MDExKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzU3RhY2tTbG90LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcg
QEAKIAogI2lmIEVOQUJMRShCM19KSVQpCiAKLSNpbmNsdWRlICJCM1N0YWNrU2xvdEtpbmQuaCIK
KyNpbmNsdWRlICJCM1NwYXJzZUNvbGxlY3Rpb24uaCIKICNpbmNsdWRlIDx3dGYvRmFzdE1hbGxv
Yy5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9QcmludFN0
cmVhbS5oPgpAQCAtNDksOCArNDksNiBAQCBwdWJsaWM6CiAgICAgflN0YWNrU2xvdCgpOwogCiAg
ICAgdW5zaWduZWQgYnl0ZVNpemUoKSBjb25zdCB7IHJldHVybiBtX2J5dGVTaXplOyB9Ci0gICAg
U3RhY2tTbG90S2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4gbV9raW5kOyB9Ci0gICAgYm9vbCBp
c0xvY2tlZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZCA9PSBTdGFja1Nsb3RLaW5kOjpMb2NrZWQ7
IH0KICAgICB1bnNpZ25lZCBpbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXg7IH0KIAogICAg
IC8vIFRoaXMgZ2V0cyBhc3NpZ25lZCBhdCB0aGUgZW5kIG9mIGNvbXBpbGF0aW9uLiBCdXQsIHlv
dSBjYW4gdG90YWxseSBwaW4gc3RhY2sgc2xvdHMuIFVzZSB0aGUKQEAgLTYzLDE4ICs2MSwxOCBA
QCBwdWJsaWM6CiAgICAgICAgIG1fb2Zmc2V0RnJvbUZQID0gdmFsdWU7CiAgICAgfQogCi0gICAg
dm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OworICAgIHZvaWQgZHVtcChQcmludFN0
cmVhbSYpIGNvbnN0OwogICAgIHZvaWQgZGVlcER1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKIAog
cHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgQWlyOjpTdGFja1Nsb3Q7CiAgICAgZnJpZW5kIGNs
YXNzIFByb2NlZHVyZTsKKyAgICBmcmllbmQgY2xhc3MgU3BhcnNlQ29sbGVjdGlvbjxTdGFja1Ns
b3Q+OwogCi0gICAgU3RhY2tTbG90KHVuc2lnbmVkIGluZGV4LCB1bnNpZ25lZCBieXRlU2l6ZSwg
U3RhY2tTbG90S2luZCk7CisgICAgU3RhY2tTbG90KHVuc2lnbmVkIGJ5dGVTaXplKTsKIAotICAg
IHVuc2lnbmVkIG1faW5kZXg7Ci0gICAgdW5zaWduZWQgbV9ieXRlU2l6ZTsKLSAgICBTdGFja1Ns
b3RLaW5kIG1fa2luZDsKKyAgICB1bnNpZ25lZCBtX2luZGV4IHsgVUlOVF9NQVggfTsKKyAgICB1
bnNpZ25lZCBtX2J5dGVTaXplIHsgMCB9OwogICAgIGludHB0cl90IG1fb2Zmc2V0RnJvbUZQIHsg
MCB9OwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tTbG90S2lu
ZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tTbG90
S2luZC5jcHAJKHJldmlzaW9uIDE5NjAxMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1N0YWNrU2xvdEtpbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUyICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotI2luY2x1ZGUgIkIzU3RhY2tTbG90S2luZC5oIgotCi0jaWYgRU5BQkxFKEIzX0pJVCkK
LQotI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgotCi1uYW1lc3BhY2UgV1RGIHsKLQotdXNp
bmcgbmFtZXNwYWNlIEpTQzo6QjM7Ci0KLXZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYg
b3V0LCBTdGFja1Nsb3RLaW5kIGtpbmQpCi17Ci0gICAgc3dpdGNoIChraW5kKSB7Ci0gICAgY2Fz
ZSBTdGFja1Nsb3RLaW5kOjpMb2NrZWQ6Ci0gICAgICAgIG91dC5wcmludCgiTG9ja2VkIik7Ci0g
ICAgICAgIHJldHVybjsKLSAgICBjYXNlIFN0YWNrU2xvdEtpbmQ6OkFub255bW91czoKLSAgICAg
ICAgb3V0LnByaW50KCJBbm9ueW1vdXMiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXVEYKLQot
I2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNTdGFja1Nsb3RLaW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzU3RhY2tTbG90S2luZC5oCShyZXZpc2lvbiAxOTYwMTEpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNTdGFja1Nsb3RLaW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNjMgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
Ci0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNp
Zm5kZWYgQjNTdGFja1Nsb3RLaW5kX2gKLSNkZWZpbmUgQjNTdGFja1Nsb3RLaW5kX2gKLQotI2lm
IEVOQUJMRShCM19KSVQpCi0KLW5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewotCi1lbnVt
IGNsYXNzIFN0YWNrU2xvdEtpbmQgOiB1aW50OF90IHsKLSAgICAvLyBBIGxvY2tlZCBzdGFjayBz
bG90IG5lZWRzIHRvIGJlIGtlcHQgZGlzam9pbnQgZnJvbSBhbGwgb3RoZXJzIGJlY2F1c2Ugd2Ug
aW50ZW5kIHRvIGVzY2FwZQotICAgIC8vIGl0IGV2ZW4gaWYgdGhhdCdzIG5vdCBvYnZpb3VzLiBU
aGlzIGhhcHBlbnMgd2hlbiB0aGUgcnVudGltZSB0YWtlcyB0aGUgYWRkcmVzcyBvZiBhIHN0YWNr
Ci0gICAgLy8gc2xvdC4KLSAgICBMb2NrZWQsCi0KLSAgICAvLyBUaGVzZSBzdGFjayBzbG90cyBi
ZWhhdmUgbGlrZSB2YXJpYWJsZXMuIFVuZGVmaW5lZCBiZWhhdmlvciBoYXBwZW5zIGlmIHlvdSBz
dG9yZSBsZXNzIHRoYW4KLSAgICAvLyB0aGUgd2lkdGggb2YgdGhlIHNsb3QuCi0gICAgQW5vbnlt
b3VzCi0KLSAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGFkZCBhIHRoaXJkIG1vZGUsIHdoaWNoIG1l
YW5zIHRoYXQgdGhlIHN0YWNrIHNsb3Qgd2lsbCBiZSByZWFkIGFzeW5jaHJvbm91c2x5Ci0gICAg
Ly8gYXMgd2l0aCBMb2NrZWQsIGJ1dCBuZXZlciB3cml0dGVuIHRvIGFzeW5jaHJvbm91c2x5LiBU
aGVuLCBBaXIgY291bGQgb3B0aW1pemUgc3BpbGxpbmcgYW5kCi0gICAgLy8gZmlsbGluZyBieSB0
cmFja2luZyB3aGV0aGVyIHRoZSB2YWx1ZSBoYWQgYmVlbiBzdG9yZWQgdG8gYSByZWFkLW9ubHkg
bG9ja2VkIHNsb3QuIElmIGl0IGhhZCwKLSAgICAvLyB0aGVuIHdlIGNhbiByZWZpbGwgZnJvbSB0
aGF0IHNsb3QuCi0gICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE1MDU4NwotfTsKLQotfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCi0KLW5hbWVzcGFjZSBXVEYg
ewotCi1jbGFzcyBQcmludFN0cmVhbTsKLQotdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFt
JiwgSlNDOjpCMzo6U3RhY2tTbG90S2luZCk7Ci0KLX0gLy8gbmFtZXNwYWNlIFdURgotCi0jZW5k
aWYgLy8gRU5BQkxFKEIzX0pJVCkKLQotI2VuZGlmIC8vIEIzU3RhY2tTbG90S2luZF9oCi0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwVmFsdWUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwVmFsdWUuY3BwCShyZXZp
c2lvbiAxOTYwMTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcFZhbHVl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODMsOCArODMsOCBAQCB2b2lkIFN0YWNrbWFwVmFsdWU6
OmR1bXBNZXRhKENvbW1hUHJpbnRlCiAgICAgICAgICIsIGxhdGVDbG9iYmVyZWQgPSAiLCBtX2xh
dGVDbG9iYmVyZWQsICIsIHVzZWRSZWdpc3RlcnMgPSAiLCBtX3VzZWRSZWdpc3RlcnMpOwogfQog
Ci1TdGFja21hcFZhbHVlOjpTdGFja21hcFZhbHVlKHVuc2lnbmVkIGluZGV4LCBDaGVja2VkT3Bj
b2RlVGFnLCBPcGNvZGUgb3Bjb2RlLCBUeXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4pCi0gICAgOiBW
YWx1ZShpbmRleCwgQ2hlY2tlZE9wY29kZSwgb3Bjb2RlLCB0eXBlLCBvcmlnaW4pCitTdGFja21h
cFZhbHVlOjpTdGFja21hcFZhbHVlKENoZWNrZWRPcGNvZGVUYWcsIE9wY29kZSBvcGNvZGUsIFR5
cGUgdHlwZSwgT3JpZ2luIG9yaWdpbikKKyAgICA6IFZhbHVlKENoZWNrZWRPcGNvZGUsIG9wY29k
ZSwgdHlwZSwgb3JpZ2luKQogewogICAgIEFTU0VSVChhY2NlcHRzKG9wY29kZSkpOwogfQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBWYWx1ZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwVmFsdWUuaAkocmV2aXNpb24g
MTk2MDExKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBWYWx1ZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yODQsNyArMjg0LDcgQEAgcHJvdGVjdGVkOgogICAgIHZvaWQgZHVt
cENoaWxkcmVuKENvbW1hUHJpbnRlciYsIFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CiAg
ICAgdm9pZCBkdW1wTWV0YShDb21tYVByaW50ZXImLCBQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJy
aWRlOwogCi0gICAgU3RhY2ttYXBWYWx1ZSh1bnNpZ25lZCBpbmRleCwgQ2hlY2tlZE9wY29kZVRh
ZywgT3Bjb2RlLCBUeXBlLCBPcmlnaW4pOworICAgIFN0YWNrbWFwVmFsdWUoQ2hlY2tlZE9wY29k
ZVRhZywgT3Bjb2RlLCBUeXBlLCBPcmlnaW4pOwogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFz
cyBDaGVja1NwZWNpYWw7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTd2l0Y2hW
YWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3dpdGNo
VmFsdWUuY3BwCShyZXZpc2lvbiAxOTYwMTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNTd2l0Y2hWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY4LDkgKzY4LDggQEAgVmFsdWUq
IFN3aXRjaFZhbHVlOjpjbG9uZUltcGwoKSBjb25zdAogICAgIHJldHVybiBuZXcgU3dpdGNoVmFs
dWUoKnRoaXMpOwogfQogCi1Td2l0Y2hWYWx1ZTo6U3dpdGNoVmFsdWUoCi0gICAgdW5zaWduZWQg
aW5kZXgsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBjaGlsZCwgY29uc3QgRnJlcXVlbnRlZEJsb2Nr
JiBmYWxsVGhyb3VnaCkKLSAgICA6IENvbnRyb2xWYWx1ZShpbmRleCwgU3dpdGNoLCBWb2lkLCBv
cmlnaW4sIGNoaWxkKQorU3dpdGNoVmFsdWU6OlN3aXRjaFZhbHVlKE9yaWdpbiBvcmlnaW4sIFZh
bHVlKiBjaGlsZCwgY29uc3QgRnJlcXVlbnRlZEJsb2NrJiBmYWxsVGhyb3VnaCkKKyAgICA6IENv
bnRyb2xWYWx1ZShTd2l0Y2gsIFZvaWQsIG9yaWdpbiwgY2hpbGQpCiB7CiAgICAgbV9zdWNjZXNz
b3JzLmFwcGVuZChmYWxsVGhyb3VnaCk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNTd2l0Y2hWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1N3aXRjaFZhbHVlLmgJKHJldmlzaW9uIDE5NjAxMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1N3aXRjaFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyMSw4ICsxMjEsNyBA
QCBwcm90ZWN0ZWQ6CiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7CiAKLSAg
ICBKU19FWFBPUlRfUFJJVkFURSBTd2l0Y2hWYWx1ZSgKLSAgICAgICAgdW5zaWduZWQgaW5kZXgs
IE9yaWdpbiwgVmFsdWUqIGNoaWxkLCBjb25zdCBGcmVxdWVudGVkQmxvY2smIGZhbGxUaHJvdWdo
KTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBTd2l0Y2hWYWx1ZShPcmlnaW4sIFZhbHVlKiBjaGls
ZCwgY29uc3QgRnJlcXVlbnRlZEJsb2NrJiBmYWxsVGhyb3VnaCk7CiAKICAgICBWZWN0b3I8aW50
NjRfdD4gbV92YWx1ZXM7CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVXBz
aWxvblZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVXBz
aWxvblZhbHVlLmgJKHJldmlzaW9uIDE5NjAxMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1Vwc2lsb25WYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw4ICs1Nyw4IEBAIHByaXZh
dGU6CiAgICAgLy8gTm90ZSB0aGF0IHBhc3NpbmcgdGhlIFBoaSBkdXJpbmcgY29uc3RydWN0aW9u
IGlzIG9wdGlvbmFsLiBBIHZhbGlkIHBhdHRlcm4gaXMgdG8gZmlyc3QgY3JlYXRlCiAgICAgLy8g
dGhlIFVwc2lsb25zIHdpdGhvdXQgdGhlIFBoaSwgdGhlbiBjcmVhdGUgdGhlIFBoaSwgdGhlbiBn
byBiYWNrIGFuZCB0ZWxsIHRoZSBVcHNpbG9ucyBhYm91dAogICAgIC8vIHRoZSBQaGkuIFRoaXMg
YWxsb3dzIHlvdSB0byBlbWl0IGNvZGUgaW4gaXRzIG5hdHVyYWwgb3JkZXIuCi0gICAgVXBzaWxv
blZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogdmFsdWUsIFZhbHVl
KiBwaGkgPSBudWxscHRyKQotICAgICAgICA6IFZhbHVlKGluZGV4LCBDaGVja2VkT3Bjb2RlLCBV
cHNpbG9uLCBWb2lkLCBvcmlnaW4sIHZhbHVlKQorICAgIFVwc2lsb25WYWx1ZShPcmlnaW4gb3Jp
Z2luLCBWYWx1ZSogdmFsdWUsIFZhbHVlKiBwaGkgPSBudWxscHRyKQorICAgICAgICA6IFZhbHVl
KENoZWNrZWRPcGNvZGUsIFVwc2lsb24sIFZvaWQsIG9yaWdpbiwgdmFsdWUpCiAgICAgICAgICwg
bV9waGkocGhpKQogICAgIHsKICAgICAgICAgaWYgKHBoaSkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1ZhbGlkYXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNWYWxpZGF0ZS5jcHAJKHJldmlzaW9uIDE5NjAxMSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1ZhbGlkYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcs
OCBAQAogI2luY2x1ZGUgIkIzU3RhY2tTbG90LmgiCiAjaW5jbHVkZSAiQjNVcHNpbG9uVmFsdWUu
aCIKICNpbmNsdWRlICJCM1ZhbHVlSW5saW5lcy5oIgorI2luY2x1ZGUgIkIzVmFyaWFibGUuaCIK
KyNpbmNsdWRlICJCM1ZhcmlhYmxlVmFsdWUuaCIKICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgog
I2luY2x1ZGUgPHd0Zi9TdHJpbmdQcmludFN0cmVhbS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NT
dHJpbmcuaD4KQEAgLTE1Myw2ICsxNTUsMTQgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIFZB
TElEQVRFKCF2YWx1ZS0+bnVtQ2hpbGRyZW4oKSwgKCJBdCAiLCAqdmFsdWUpKTsKICAgICAgICAg
ICAgICAgICBWQUxJREFURSh2YWx1ZS0+dHlwZSgpID09IEZsb2F0LCAoIkF0ICIsICp2YWx1ZSkp
OwogICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBTZXQ6CisgICAgICAg
ICAgICAgICAgVkFMSURBVEUodmFsdWUtPm51bUNoaWxkcmVuKCkgPT0gMSwgKCJBdCAiLCAqdmFs
dWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+Y2hpbGQoMCktPnR5cGUoKSA9
PSB2YWx1ZS0+YXM8VmFyaWFibGVWYWx1ZT4oKS0+dmFyaWFibGUoKS0+dHlwZSgpLCAoIkF0ICIs
ICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBHZXQ6
CisgICAgICAgICAgICAgICAgVkFMSURBVEUoIXZhbHVlLT5udW1DaGlsZHJlbigpLCAoIkF0ICIs
ICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT50eXBlKCkgPT0gdmFs
dWUtPmFzPFZhcmlhYmxlVmFsdWU+KCktPnZhcmlhYmxlKCktPnR5cGUoKSwgKCJBdCAiLCAqdmFs
dWUpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgU2xvdEJhc2U6
CiAgICAgICAgICAgICBjYXNlIEZyYW1lUG9pbnRlcjoKICAgICAgICAgICAgICAgICBWQUxJREFU
RSghdmFsdWUtPm51bUNoaWxkcmVuKCksICgiQXQgIiwgKnZhbHVlKSk7CkBAIC0zNzUsNiArMzg1
LDkgQEAgcHVibGljOgogCiAgICAgICAgICAgICBWQUxJREFURSghKHZhbHVlLT5lZmZlY3RzKCku
d3JpdGVzICYmIHZhbHVlLT5rZXkoKSksICgiQXQgIiwgKnZhbHVlKSk7CiAgICAgICAgIH0KKwor
ICAgICAgICBmb3IgKFZhcmlhYmxlKiB2YXJpYWJsZSA6IG1fcHJvY2VkdXJlLnZhcmlhYmxlcygp
KQorICAgICAgICAgICAgVkFMSURBVEUodmFyaWFibGUtPnR5cGUoKSAhPSBWb2lkLCAoIkF0ICIs
ICp2YXJpYWJsZSkpOwogICAgIH0KIAogcHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1ZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNWYWx1ZS5jcHAJKHJldmlzaW9uIDE5NjAxMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1ZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksNyBAQAogI2luY2x1
ZGUgIkIzVXBzaWxvblZhbHVlLmgiCiAjaW5jbHVkZSAiQjNWYWx1ZUlubGluZXMuaCIKICNpbmNs
dWRlICJCM1ZhbHVlS2V5SW5saW5lcy5oIgorI2luY2x1ZGUgIkIzVmFyaWFibGVWYWx1ZS5oIgog
I2luY2x1ZGUgPHd0Zi9Db21tYVByaW50ZXIuaD4KICNpbmNsdWRlIDx3dGYvU3RyaW5nUHJpbnRT
dHJlYW0uaD4KIApAQCAtNzIsOSArNzMsMTAgQEAgdm9pZCBWYWx1ZTo6cmVwbGFjZVdpdGhJZGVu
dGl0eShWYWx1ZSogdgogCiAgICAgdGhpcy0+VmFsdWU6On5WYWx1ZSgpOwogCi0gICAgbmV3ICh0
aGlzKSBWYWx1ZShpbmRleCwgSWRlbnRpdHksIHR5cGUsIG9yaWdpbiwgdmFsdWUpOworICAgIG5l
dyAodGhpcykgVmFsdWUoSWRlbnRpdHksIHR5cGUsIG9yaWdpbiwgdmFsdWUpOwogCiAgICAgdGhp
cy0+b3duZXIgPSBvd25lcjsKKyAgICB0aGlzLT5tX2luZGV4ID0gaW5kZXg7CiB9CiAKIHZvaWQg
VmFsdWU6OnJlcGxhY2VXaXRoTm9wKCkKQEAgLTg1LDkgKzg3LDEwIEBAIHZvaWQgVmFsdWU6OnJl
cGxhY2VXaXRoTm9wKCkKIAogICAgIHRoaXMtPlZhbHVlOjp+VmFsdWUoKTsKIAotICAgIG5ldyAo
dGhpcykgVmFsdWUoaW5kZXgsIE5vcCwgVm9pZCwgb3JpZ2luKTsKKyAgICBuZXcgKHRoaXMpIFZh
bHVlKE5vcCwgVm9pZCwgb3JpZ2luKTsKIAogICAgIHRoaXMtPm93bmVyID0gb3duZXI7CisgICAg
dGhpcy0+bV9pbmRleCA9IGluZGV4OwogfQogCiB2b2lkIFZhbHVlOjpyZXBsYWNlV2l0aFBoaSgp
CkBAIC0xMDQsOSArMTA3LDEwIEBAIHZvaWQgVmFsdWU6OnJlcGxhY2VXaXRoUGhpKCkKIAogICAg
IHRoaXMtPlZhbHVlOjp+VmFsdWUoKTsKIAotICAgIG5ldyAodGhpcykgVmFsdWUoaW5kZXgsIFBo
aSwgdHlwZSwgb3JpZ2luKTsKKyAgICBuZXcgKHRoaXMpIFZhbHVlKFBoaSwgdHlwZSwgb3JpZ2lu
KTsKIAogICAgIHRoaXMtPm93bmVyID0gb3duZXI7CisgICAgdGhpcy0+bV9pbmRleCA9IGluZGV4
OwogfQogCiB2b2lkIFZhbHVlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CkBAIC00ODQs
MTAgKzQ4OCwxMiBAQCBFZmZlY3RzIFZhbHVlOjplZmZlY3RzKCkgY29uc3QKICAgICAgICAgcmVz
dWx0LnJlYWRzID0gSGVhcFJhbmdlOjp0b3AoKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBV
cHNpbG9uOgotICAgICAgICByZXN1bHQud3JpdGVzU1NBU3RhdGUgPSB0cnVlOworICAgIGNhc2Ug
U2V0OgorICAgICAgICByZXN1bHQud3JpdGVzTG9jYWxTdGF0ZSA9IHRydWU7CiAgICAgICAgIGJy
ZWFrOwogICAgIGNhc2UgUGhpOgotICAgICAgICByZXN1bHQucmVhZHNTU0FTdGF0ZSA9IHRydWU7
CisgICAgY2FzZSBHZXQ6CisgICAgICAgIHJlc3VsdC5yZWFkc0xvY2FsU3RhdGUgPSB0cnVlOwog
ICAgICAgICBicmVhazsKICAgICBjYXNlIEp1bXA6CiAgICAgY2FzZSBCcmFuY2g6CkBAIC01OTgs
NiArNjA0LDcgQEAgdm9pZCBWYWx1ZTo6Y2hlY2tPcGNvZGUoT3Bjb2RlIG9wY29kZSkKICAgICBB
U1NFUlQoIVBhdGNocG9pbnRWYWx1ZTo6YWNjZXB0cyhvcGNvZGUpKTsKICAgICBBU1NFUlQoIVNs
b3RCYXNlVmFsdWU6OmFjY2VwdHMob3Bjb2RlKSk7CiAgICAgQVNTRVJUKCFVcHNpbG9uVmFsdWU6
OmFjY2VwdHMob3Bjb2RlKSk7CisgICAgQVNTRVJUKCFWYXJpYWJsZVZhbHVlOjphY2NlcHRzKG9w
Y29kZSkpOwogfQogI2VuZGlmIC8vICFBU1NFUlRfRElTQUJMRUQKIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNWYWx1ZS5oCShyZXZpc2lvbiAxOTYwMTEpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW5j
bHVkZSAiQjNFZmZlY3RzLmgiCiAjaW5jbHVkZSAiQjNPcGNvZGUuaCIKICNpbmNsdWRlICJCM09y
aWdpbi5oIgorI2luY2x1ZGUgIkIzU3BhcnNlQ29sbGVjdGlvbi5oIgogI2luY2x1ZGUgIkIzVHlw
ZS5oIgogI2luY2x1ZGUgIkIzVmFsdWVLZXkuaCIKICNpbmNsdWRlIDx3dGYvQ29tbWFQcmludGVy
Lmg+CkBAIC0yMjYsNiArMjI3LDcgQEAgcHJvdGVjdGVkOgogCiBwcml2YXRlOgogICAgIGZyaWVu
ZCBjbGFzcyBQcm9jZWR1cmU7CisgICAgZnJpZW5kIGNsYXNzIFNwYXJzZUNvbGxlY3Rpb248VmFs
dWU+OwogCiAgICAgLy8gQ2hlY2tzIHRoYXQgdGhpcyBvcGNvZGUgaXMgdmFsaWQgZm9yIHVzZSB3
aXRoIEIzOjpWYWx1ZS4KICNpZiBBU1NFUlRfRElTQUJMRUQKQEAgLTI0MywyNyArMjQ1LDI0IEBA
IHByb3RlY3RlZDoKICAgICAvLyBJbnN0YW50aWF0ZSB2YWx1ZXMgdmlhIFByb2NlZHVyZS4KICAg
ICAvLyBUaGlzIGZvcm0gcmVxdWlyZXMgc3BlY2lmeWluZyB0aGUgdHlwZSBleHBsaWNpdGx5Ogog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KLSAgICBleHBsaWNpdCBWYWx1ZSh1
bnNpZ25lZCBpbmRleCwgQ2hlY2tlZE9wY29kZVRhZywgT3Bjb2RlIG9wY29kZSwgVHlwZSB0eXBl
LCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogZmlyc3RDaGlsZCwgQXJndW1lbnRzLi4uIGFyZ3VtZW50
cykKLSAgICAgICAgOiBtX2luZGV4KGluZGV4KQotICAgICAgICAsIG1fb3Bjb2RlKG9wY29kZSkK
KyAgICBleHBsaWNpdCBWYWx1ZShDaGVja2VkT3Bjb2RlVGFnLCBPcGNvZGUgb3Bjb2RlLCBUeXBl
IHR5cGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBmaXJzdENoaWxkLCBBcmd1bWVudHMuLi4gYXJn
dW1lbnRzKQorICAgICAgICA6IG1fb3Bjb2RlKG9wY29kZSkKICAgICAgICAgLCBtX3R5cGUodHlw
ZSkKICAgICAgICAgLCBtX29yaWdpbihvcmlnaW4pCiAgICAgICAgICwgbV9jaGlsZHJlbnsgZmly
c3RDaGlsZCwgYXJndW1lbnRzLi4uIH0KICAgICB7CiAgICAgfQogICAgIC8vIFRoaXMgZm9ybSBp
cyBmb3Igc3BlY2lmeWluZyB0aGUgdHlwZSBleHBsaWNpdGx5IHdoZW4gdGhlIG9wY29kZSBoYXMg
bm8gY2hpbGRyZW46Ci0gICAgZXhwbGljaXQgVmFsdWUodW5zaWduZWQgaW5kZXgsIENoZWNrZWRP
cGNvZGVUYWcsIE9wY29kZSBvcGNvZGUsIFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdpbikKLSAgICAg
ICAgOiBtX2luZGV4KGluZGV4KQotICAgICAgICAsIG1fb3Bjb2RlKG9wY29kZSkKKyAgICBleHBs
aWNpdCBWYWx1ZShDaGVja2VkT3Bjb2RlVGFnLCBPcGNvZGUgb3Bjb2RlLCBUeXBlIHR5cGUsIE9y
aWdpbiBvcmlnaW4pCisgICAgICAgIDogbV9vcGNvZGUob3Bjb2RlKQogICAgICAgICAsIG1fdHlw
ZSh0eXBlKQogICAgICAgICAsIG1fb3JpZ2luKG9yaWdpbikKICAgICB7CiAgICAgfQogICAgIC8v
IFRoaXMgZm9ybSBpcyBmb3IgdGhvc2Ugb3Bjb2RlcyB0aGF0IGNhbiBpbmZlciB0aGVpciB0eXBl
IGZyb20gdGhlIG9wY29kZSBhbmQgZmlyc3QgY2hpbGQ6CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUu
Li4gQXJndW1lbnRzPgotICAgIGV4cGxpY2l0IFZhbHVlKHVuc2lnbmVkIGluZGV4LCBDaGVja2Vk
T3Bjb2RlVGFnLCBPcGNvZGUgb3Bjb2RlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogZmlyc3RDaGls
ZCkKLSAgICAgICAgOiBtX2luZGV4KGluZGV4KQotICAgICAgICAsIG1fb3Bjb2RlKG9wY29kZSkK
KyAgICBleHBsaWNpdCBWYWx1ZShDaGVja2VkT3Bjb2RlVGFnLCBPcGNvZGUgb3Bjb2RlLCBPcmln
aW4gb3JpZ2luLCBWYWx1ZSogZmlyc3RDaGlsZCkKKyAgICAgICAgOiBtX29wY29kZShvcGNvZGUp
CiAgICAgICAgICwgbV90eXBlKHR5cGVGb3Iob3Bjb2RlLCBmaXJzdENoaWxkKSkKICAgICAgICAg
LCBtX29yaWdpbihvcmlnaW4pCiAgICAgICAgICwgbV9jaGlsZHJlbnsgZmlyc3RDaGlsZCB9CkBA
IC0yNzEsOSArMjcwLDggQEAgcHJvdGVjdGVkOgogICAgIH0KICAgICAvLyBUaGlzIGZvcm0gaXMg
Zm9yIHRob3NlIG9wY29kZXMgdGhhdCBjYW4gaW5mZXIgdGhlaXIgdHlwZSBmcm9tIHRoZSBvcGNv
ZGUgYW5kIGZpcnN0IGFuZCBzZWNvbmQgY2hpbGQ6CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4g
QXJndW1lbnRzPgotICAgIGV4cGxpY2l0IFZhbHVlKHVuc2lnbmVkIGluZGV4LCBDaGVja2VkT3Bj
b2RlVGFnLCBPcGNvZGUgb3Bjb2RlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogZmlyc3RDaGlsZCwg
VmFsdWUqIHNlY29uZENoaWxkLCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQotICAgICAgICA6IG1f
aW5kZXgoaW5kZXgpCi0gICAgICAgICwgbV9vcGNvZGUob3Bjb2RlKQorICAgIGV4cGxpY2l0IFZh
bHVlKENoZWNrZWRPcGNvZGVUYWcsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVl
KiBmaXJzdENoaWxkLCBWYWx1ZSogc2Vjb25kQ2hpbGQsIEFyZ3VtZW50cy4uLiBhcmd1bWVudHMp
CisgICAgICAgIDogbV9vcGNvZGUob3Bjb2RlKQogICAgICAgICAsIG1fdHlwZSh0eXBlRm9yKG9w
Y29kZSwgZmlyc3RDaGlsZCwgc2Vjb25kQ2hpbGQpKQogICAgICAgICAsIG1fb3JpZ2luKG9yaWdp
bikKICAgICAgICAgLCBtX2NoaWxkcmVueyBmaXJzdENoaWxkLCBzZWNvbmRDaGlsZCwgYXJndW1l
bnRzLi4uIH0KQEAgLTI4MSwyNSArMjc5LDIyIEBAIHByb3RlY3RlZDoKICAgICB9CiAgICAgLy8g
VGhpcyBmb3JtIGlzIGZvciB0aG9zZSBvcGNvZGVzIHRoYXQgY2FuIGluZmVyIHRoZWlyIHR5cGUg
ZnJvbSB0aGUgb3Bjb2RlIGFsb25lLCBhbmQgdGhhdCBkb24ndAogICAgIC8vIHRha2UgYW55IGFy
Z3VtZW50czoKLSAgICBleHBsaWNpdCBWYWx1ZSh1bnNpZ25lZCBpbmRleCwgQ2hlY2tlZE9wY29k
ZVRhZywgT3Bjb2RlIG9wY29kZSwgT3JpZ2luIG9yaWdpbikKLSAgICAgICAgOiBtX2luZGV4KGlu
ZGV4KQotICAgICAgICAsIG1fb3Bjb2RlKG9wY29kZSkKKyAgICBleHBsaWNpdCBWYWx1ZShDaGVj
a2VkT3Bjb2RlVGFnLCBPcGNvZGUgb3Bjb2RlLCBPcmlnaW4gb3JpZ2luKQorICAgICAgICA6IG1f
b3Bjb2RlKG9wY29kZSkKICAgICAgICAgLCBtX3R5cGUodHlwZUZvcihvcGNvZGUsIG51bGxwdHIp
KQogICAgICAgICAsIG1fb3JpZ2luKG9yaWdpbikKICAgICB7CiAgICAgfQogICAgIC8vIFVzZSB0
aGlzIGZvcm0gZm9yIHZhcmFyZ3MuCi0gICAgZXhwbGljaXQgVmFsdWUodW5zaWduZWQgaW5kZXgs
IENoZWNrZWRPcGNvZGVUYWcsIE9wY29kZSBvcGNvZGUsIFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdp
biwgY29uc3QgQWRqYWNlbmN5TGlzdCYgY2hpbGRyZW4pCi0gICAgICAgIDogbV9pbmRleChpbmRl
eCkKLSAgICAgICAgLCBtX29wY29kZShvcGNvZGUpCisgICAgZXhwbGljaXQgVmFsdWUoQ2hlY2tl
ZE9wY29kZVRhZywgT3Bjb2RlIG9wY29kZSwgVHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luLCBjb25z
dCBBZGphY2VuY3lMaXN0JiBjaGlsZHJlbikKKyAgICAgICAgOiBtX29wY29kZShvcGNvZGUpCiAg
ICAgICAgICwgbV90eXBlKHR5cGUpCiAgICAgICAgICwgbV9vcmlnaW4ob3JpZ2luKQogICAgICAg
ICAsIG1fY2hpbGRyZW4oY2hpbGRyZW4pCiAgICAgewogICAgIH0KLSAgICBleHBsaWNpdCBWYWx1
ZSh1bnNpZ25lZCBpbmRleCwgQ2hlY2tlZE9wY29kZVRhZywgT3Bjb2RlIG9wY29kZSwgVHlwZSB0
eXBlLCBPcmlnaW4gb3JpZ2luLCBBZGphY2VuY3lMaXN0JiYgY2hpbGRyZW4pCi0gICAgICAgIDog
bV9pbmRleChpbmRleCkKLSAgICAgICAgLCBtX29wY29kZShvcGNvZGUpCisgICAgZXhwbGljaXQg
VmFsdWUoQ2hlY2tlZE9wY29kZVRhZywgT3Bjb2RlIG9wY29kZSwgVHlwZSB0eXBlLCBPcmlnaW4g
b3JpZ2luLCBBZGphY2VuY3lMaXN0JiYgY2hpbGRyZW4pCisgICAgICAgIDogbV9vcGNvZGUob3Bj
b2RlKQogICAgICAgICAsIG1fdHlwZSh0eXBlKQogICAgICAgICAsIG1fb3JpZ2luKG9yaWdpbikK
ICAgICAgICAgLCBtX2NoaWxkcmVuKFdURk1vdmUoY2hpbGRyZW4pKQpAQCAtMzA5LDggKzMwNCw4
IEBAIHByb3RlY3RlZDoKICAgICAvLyBUaGlzIGlzIHRoZSBjb25zdHJ1Y3RvciB5b3UgZW5kIHVw
IGFjdHVhbGx5IGNhbGxpbmcsIGlmIHlvdSdyZSBpbnN0YW50aWF0aW5nIFZhbHVlCiAgICAgLy8g
ZGlyZWN0bHkuCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgotICAgIGV4cGxp
Y2l0IFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBBcmd1bWVudHMmJi4uLiBh
cmd1bWVudHMpCi0gICAgICAgIDogVmFsdWUoaW5kZXgsIENoZWNrZWRPcGNvZGUsIG9wY29kZSwg
c3RkOjpmb3J3YXJkPEFyZ3VtZW50cz4oYXJndW1lbnRzKS4uLikKKyAgICBleHBsaWNpdCBWYWx1
ZShPcGNvZGUgb3Bjb2RlLCBBcmd1bWVudHMmJi4uLiBhcmd1bWVudHMpCisgICAgICAgIDogVmFs
dWUoQ2hlY2tlZE9wY29kZSwgb3Bjb2RlLCBzdGQ6OmZvcndhcmQ8QXJndW1lbnRzPihhcmd1bWVu
dHMpLi4uKQogICAgIHsKICAgICAgICAgY2hlY2tPcGNvZGUob3Bjb2RlKTsKICAgICB9CkBAIC0z
MjEsNyArMzE2LDkgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgVHlwZSB0eXBlRm9yKE9wY29kZSwg
VmFsdWUqIGZpcnN0Q2hpbGQsIFZhbHVlKiBzZWNvbmRDaGlsZCA9IG51bGxwdHIpOwogCiAgICAg
Ly8gVGhpcyBncm91cCBvZiBmaWVsZHMgaXMgYXJyYW5nZWQgdG8gZml0IGluIDY0IGJpdHMuCi0g
ICAgdW5zaWduZWQgbV9pbmRleDsKK3Byb3RlY3RlZDoKKyAgICB1bnNpZ25lZCBtX2luZGV4IHsg
VUlOVF9NQVggfTsKK3ByaXZhdGU6CiAgICAgT3Bjb2RlIG1fb3Bjb2RlOwogICAgIFR5cGUgbV90
eXBlOwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFyaWFibGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhcmlhYmxlLmNwcAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhcmlhYmxlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM1Zh
cmlhYmxlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIEIzIHsKKworVmFyaWFibGU6On5WYXJpYWJsZSgpCit7Cit9CisKK3ZvaWQgVmFyaWFibGU6
OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoInZhciIsIG1f
aW5kZXgpOworfQorCit2b2lkIFZhcmlhYmxlOjpkZWVwRHVtcChQcmludFN0cmVhbSYgb3V0KSBj
b25zdAoreworICAgIG91dC5wcmludChtX3R5cGUsICIgdmFyIiwgbV9pbmRleCk7Cit9CisKK1Zh
cmlhYmxlOjpWYXJpYWJsZShUeXBlIHR5cGUpCisgICAgOiBtX3R5cGUodHlwZSkKK3sKKyAgICBB
U1NFUlQodHlwZSAhPSBWb2lkKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNl
bmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNWYXJpYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Zh
cmlhYmxlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYXJp
YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTMgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1ZhcmlhYmxlX2gKKyNkZWZp
bmUgQjNWYXJpYWJsZV9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNTcGFy
c2VDb2xsZWN0aW9uLmgiCisjaW5jbHVkZSAiQjNUeXBlLmgiCisjaW5jbHVkZSA8d3RmL0Zhc3RN
YWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvUHJp
bnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIFBy
b2NlZHVyZTsKKworY2xhc3MgVmFyaWFibGUgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFZh
cmlhYmxlKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKworcHVibGljOgorICAgIH5W
YXJpYWJsZSgpOworCisgICAgVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9Cisg
ICAgdW5zaWduZWQgaW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4OyB9CisKKyAgICB2b2lk
IGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICB2b2lkIGRlZXBEdW1wKFByaW50U3RyZWFt
JikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKyAgICBm
cmllbmQgY2xhc3MgU3BhcnNlQ29sbGVjdGlvbjxWYXJpYWJsZT47CisKKyAgICBWYXJpYWJsZShU
eXBlKTsKKyAgICAKKyAgICB1bnNpZ25lZCBtX2luZGV4OworICAgIFR5cGUgbV90eXBlOworfTsK
KworY2xhc3MgRGVlcFZhcmlhYmxlRHVtcCB7CitwdWJsaWM6CisgICAgRGVlcFZhcmlhYmxlRHVt
cChjb25zdCBWYXJpYWJsZSogdmFyaWFibGUpCisgICAgICAgIDogbV92YXJpYWJsZSh2YXJpYWJs
ZSkKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0
CisgICAgeworICAgICAgICBpZiAobV92YXJpYWJsZSkKKyAgICAgICAgICAgIG1fdmFyaWFibGUt
PmRlZXBEdW1wKG91dCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG91dC5wcmludCgiPG51
bGw+Iik7CisgICAgfQorCitwcml2YXRlOgorICAgIGNvbnN0IFZhcmlhYmxlKiBtX3ZhcmlhYmxl
OworfTsKKworaW5saW5lIERlZXBWYXJpYWJsZUR1bXAgZGVlcER1bXAoY29uc3QgVmFyaWFibGUq
IHZhcmlhYmxlKQoreworICAgIHJldHVybiBEZWVwVmFyaWFibGVEdW1wKHZhcmlhYmxlKTsKK30K
KworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQor
CisjZW5kaWYgLy8gQjNWYXJpYWJsZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1ZhcmlhYmxlVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1ZhcmlhYmxlVmFsdWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzVmFyaWFibGVWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2
NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNWYXJpYWJsZVZhbHVlLmgiCisKKyNpZiBFTkFC
TEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNWYXJpYWJsZS5oIgorCituYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEIzIHsKKworVmFyaWFibGVWYWx1ZTo6flZhcmlhYmxlVmFsdWUoKQoreworfQor
Cit2b2lkIFZhcmlhYmxlVmFsdWU6OmR1bXBNZXRhKENvbW1hUHJpbnRlciYgY29tbWEsIFByaW50
U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KGNvbW1hLCBwb2ludGVyRHVtcCht
X3ZhcmlhYmxlKSk7Cit9CisKK1ZhbHVlKiBWYXJpYWJsZVZhbHVlOjpjbG9uZUltcGwoKSBjb25z
dAoreworICAgIHJldHVybiBuZXcgVmFyaWFibGVWYWx1ZSgqdGhpcyk7Cit9CisKK1ZhcmlhYmxl
VmFsdWU6OlZhcmlhYmxlVmFsdWUoT3Bjb2RlIG9wY29kZSwgT3JpZ2luIG9yaWdpbiwgVmFyaWFi
bGUqIHZhcmlhYmxlLCBWYWx1ZSogdmFsdWUpCisgICAgOiBWYWx1ZShDaGVja2VkT3Bjb2RlLCBv
cGNvZGUsIFZvaWQsIG9yaWdpbiwgdmFsdWUpCisgICAgLCBtX3ZhcmlhYmxlKHZhcmlhYmxlKQor
eworICAgIEFTU0VSVChvcGNvZGUgPT0gU2V0KTsKK30KKworVmFyaWFibGVWYWx1ZTo6VmFyaWFi
bGVWYWx1ZShPcGNvZGUgb3Bjb2RlLCBPcmlnaW4gb3JpZ2luLCBWYXJpYWJsZSogdmFyaWFibGUp
CisgICAgOiBWYWx1ZShDaGVja2VkT3Bjb2RlLCBvcGNvZGUsIHZhcmlhYmxlLT50eXBlKCksIG9y
aWdpbikKKyAgICAsIG1fdmFyaWFibGUodmFyaWFibGUpCit7CisgICAgQVNTRVJUKG9wY29kZSA9
PSBHZXQpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJM
RShCM19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhcmlhYmxlVmFs
dWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYXJpYWJsZVZh
bHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYXJpYWJs
ZVZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNWYXJpYWJsZVZh
bHVlX2gKKyNkZWZpbmUgQjNWYXJpYWJsZVZhbHVlX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisK
KyNpbmNsdWRlICJCM1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewor
CitjbGFzcyBWYXJpYWJsZTsKKworY2xhc3MgSlNfRVhQT1JUX1BSSVZBVEUgVmFyaWFibGVWYWx1
ZSA6IHB1YmxpYyBWYWx1ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIGJvb2wgYWNjZXB0cyhPcGNv
ZGUgb3Bjb2RlKSB7IHJldHVybiBvcGNvZGUgPT0gR2V0IHx8IG9wY29kZSA9PSBTZXQ7IH0KKwor
ICAgIH5WYXJpYWJsZVZhbHVlKCk7CisKKyAgICBWYXJpYWJsZSogdmFyaWFibGUoKSBjb25zdCB7
IHJldHVybiBtX3ZhcmlhYmxlOyB9CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGR1bXBNZXRhKENv
bW1hUHJpbnRlciYsIFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBWYWx1ZSog
Y2xvbmVJbXBsKCkgY29uc3Qgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNz
IFByb2NlZHVyZTsKKworICAgIC8vIFVzZSB0aGlzIGZvciBTZXQuCisgICAgVmFyaWFibGVWYWx1
ZShPcGNvZGUsIE9yaWdpbiwgVmFyaWFibGUqLCBWYWx1ZSopOworCisgICAgLy8gVXNlIHRoaXMg
Zm9yIEdldC4KKyAgICBWYXJpYWJsZVZhbHVlKE9wY29kZSwgT3JpZ2luLCBWYXJpYWJsZSogdmFy
aWFibGUpOworCisgICAgVmFyaWFibGUqIG1fdmFyaWFibGU7Cit9OworCit9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM1Zh
cmlhYmxlVmFsdWVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcAkocmV2
aXNpb24gMTk2MDExKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTUwMjQsOCArNTAyNCw3IEBAIHZvaWQgdGVzdFN0YWNrU2xvdCgpCiAg
ICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKICAgICByb290LT5hcHBlbmRO
ZXc8Q29udHJvbFZhbHVlPigKICAgICAgICAgcHJvYywgUmV0dXJuLCBPcmlnaW4oKSwKLSAgICAg
ICAgcm9vdC0+YXBwZW5kTmV3PFNsb3RCYXNlVmFsdWU+KAotICAgICAgICAgICAgcHJvYywgT3Jp
Z2luKCksIHByb2MuYWRkU3RhY2tTbG90KDEsIFN0YWNrU2xvdEtpbmQ6OkFub255bW91cykpKTsK
KyAgICAgICAgcm9vdC0+YXBwZW5kTmV3PFNsb3RCYXNlVmFsdWU+KHByb2MsIE9yaWdpbigpLCBw
cm9jLmFkZFN0YWNrU2xvdCgxKSkpOwogCiAgICAgdm9pZCogc3RhY2tTbG90ID0gY29tcGlsZUFu
ZFJ1bjx2b2lkKj4ocHJvYyk7CiAgICAgQ0hFQ0soc3RhY2tTbG90IDwgJnByb2MpOwpAQCAtNTA1
Myw4ICs1MDUyLDggQEAgdm9pZCB0ZXN0U3RvcmVMb2FkU3RhY2tTbG90KGludCB2YWx1ZSkKICAg
ICBQcm9jZWR1cmUgcHJvYzsKICAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJvYy5hZGRCbG9jaygp
OwogCi0gICAgU2xvdEJhc2VWYWx1ZSogc3RhY2sgPSByb290LT5hcHBlbmROZXc8U2xvdEJhc2VW
YWx1ZT4oCi0gICAgICAgIHByb2MsIE9yaWdpbigpLCBwcm9jLmFkZFN0YWNrU2xvdChzaXplb2Yo
aW50KSwgU3RhY2tTbG90S2luZDo6QW5vbnltb3VzKSk7CisgICAgU2xvdEJhc2VWYWx1ZSogc3Rh
Y2sgPQorICAgICAgICByb290LT5hcHBlbmROZXc8U2xvdEJhc2VWYWx1ZT4ocHJvYywgT3JpZ2lu
KCksIHByb2MuYWRkU3RhY2tTbG90KHNpemVvZihpbnQpKSk7CiAKICAgICByb290LT5hcHBlbmRO
ZXc8TWVtb3J5VmFsdWU+KAogICAgICAgICBwcm9jLCBTdG9yZSwgT3JpZ2luKCksCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckFsbG9jYXRlU3RhY2suY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxsb2NhdGVTdGFjay5jcHAJ
KHJldmlzaW9uIDE5NjAxMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQWxs
b2NhdGVTdGFjay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk1LDMwICs5NSwxMyBAQCB2b2lkIGFs
bG9jYXRlU3RhY2soQ29kZSYgY29kZSkKIHsKICAgICBQaGFzZVNjb3BlIHBoYXNlU2NvcGUoY29k
ZSwgImFsbG9jYXRlU3RhY2siKTsKIAotICAgIC8vIFBlcmZvcm0gYW4gZXNjYXBlIGFuYWx5c2lz
IG92ZXIgc3RhY2sgc2xvdHMuIEFuIGVzY2FwaW5nIHN0YWNrIHNsb3QgaXMgb25lIHRoYXQgaXMg
bG9ja2VkIG9yCi0gICAgLy8gaXMgZXhwbGljaXRseSBlc2NhcGVkIGluIHRoZSBjb2RlLgotICAg
IEluZGV4U2V0PFN0YWNrU2xvdD4gZXNjYXBpbmdTdGFja1Nsb3RzOwotICAgIGZvciAoU3RhY2tT
bG90KiBzbG90IDogY29kZS5zdGFja1Nsb3RzKCkpIHsKLSAgICAgICAgaWYgKHNsb3QtPmlzTG9j
a2VkKCkpCi0gICAgICAgICAgICBlc2NhcGluZ1N0YWNrU2xvdHMuYWRkKHNsb3QpOwotICAgIH0K
LSAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogY29kZSkgewotICAgICAgICBmb3IgKEluc3Qm
IGluc3QgOiAqYmxvY2spIHsKLSAgICAgICAgICAgIGluc3QuZm9yRWFjaEFyZygKLSAgICAgICAg
ICAgICAgICBbJl0gKEFyZyYgYXJnLCBBcmc6OlJvbGUgcm9sZSwgQXJnOjpUeXBlLCBBcmc6Oldp
ZHRoKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChyb2xlID09IEFyZzo6VXNlQWRkciAmJiBh
cmcuaXNTdGFjaygpKQotICAgICAgICAgICAgICAgICAgICAgICAgZXNjYXBpbmdTdGFja1Nsb3Rz
LmFkZChhcmcuc3RhY2tTbG90KCkpOwotICAgICAgICAgICAgICAgIH0pOwotICAgICAgICB9Ci0g
ICAgfQotCiAgICAgLy8gQWxsb2NhdGUgYWxsIG9mIHRoZSBlc2NhcGVkIHNsb3RzIGluIG9yZGVy
LiBUaGlzIGlzIGtpbmQgb2YgYSBjcmF6eSBhbGdvcml0aG0gdG8gYWxsb3cgZm9yCiAgICAgLy8g
dGhlIHBvc3NpYmlsaXR5IG9mIHN0YWNrIHNsb3RzIGJlaW5nIGFzc2lnbmVkIGZyYW1lIG9mZnNl
dHMgYmVmb3JlIHdlIGV2ZW4gZ2V0IGhlcmUuCiAgICAgQVNTRVJUKCFjb2RlLmZyYW1lU2l6ZSgp
KTsKICAgICBWZWN0b3I8U3RhY2tTbG90Kj4gYXNzaWduZWRFc2NhcGVkU3RhY2tTbG90czsKICAg
ICBWZWN0b3I8U3RhY2tTbG90Kj4gZXNjYXBlZFN0YWNrU2xvdHNXb3JrbGlzdDsKICAgICBmb3Ig
KFN0YWNrU2xvdCogc2xvdCA6IGNvZGUuc3RhY2tTbG90cygpKSB7Ci0gICAgICAgIGlmIChlc2Nh
cGluZ1N0YWNrU2xvdHMuY29udGFpbnMoc2xvdCkpIHsKKyAgICAgICAgaWYgKHNsb3QtPmlzTG9j
a2VkKCkpIHsKICAgICAgICAgICAgIGlmIChzbG90LT5vZmZzZXRGcm9tRlAoKSkKICAgICAgICAg
ICAgICAgICBhc3NpZ25lZEVzY2FwZWRTdGFja1Nsb3RzLmFwcGVuZChzbG90KTsKICAgICAgICAg
ICAgIGVsc2UKQEAgLTEzNiw3ICsxMTksNyBAQCB2b2lkIGFsbG9jYXRlU3RhY2soQ29kZSYgY29k
ZSkKICAgICAgICAgYXNzaWduZWRFc2NhcGVkU3RhY2tTbG90cy5hcHBlbmQoc2xvdCk7CiAgICAg
fQogCi0gICAgLy8gTm93IHdlIGhhbmRsZSB0aGUgYW5vbnltb3VzIHNsb3RzLgorICAgIC8vIE5v
dyB3ZSBoYW5kbGUgdGhlIHNwaWxsIHNsb3RzLgogICAgIFN0YWNrU2xvdExpdmVuZXNzIGxpdmVu
ZXNzKGNvZGUpOwogICAgIEluZGV4TWFwPFN0YWNrU2xvdCwgSGFzaFNldDxTdGFja1Nsb3QqPj4g
aW50ZXJmZXJlbmNlKGNvZGUuc3RhY2tTbG90cygpLnNpemUoKSk7CiAgICAgVmVjdG9yPFN0YWNr
U2xvdCo+IHNsb3RzOwpAQCAtMTU0LDcgKzEzNyw3IEBAIHZvaWQgYWxsb2NhdGVTdGFjayhDb2Rl
JiBjb2RlKQogICAgICAgICAgICAgICAgICAgICBpZiAoIWFyZy5pc1N0YWNrKCkpCiAgICAgICAg
ICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICAgICAgIFN0YWNrU2xvdCog
c2xvdCA9IGFyZy5zdGFja1Nsb3QoKTsKLSAgICAgICAgICAgICAgICAgICAgaWYgKHNsb3QtPmtp
bmQoKSAhPSBTdGFja1Nsb3RLaW5kOjpBbm9ueW1vdXMpCisgICAgICAgICAgICAgICAgICAgIGlm
IChzbG90LT5raW5kKCkgIT0gU3RhY2tTbG90S2luZDo6U3BpbGwpCiAgICAgICAgICAgICAgICAg
ICAgICAgICByZXR1cm47CiAKICAgICAgICAgICAgICAgICAgICAgZm9yIChTdGFja1Nsb3QqIG90
aGVyU2xvdCA6IGxvY2FsQ2FsYy5saXZlKCkpIHsKQEAgLTE4Nyw3ICsxNzAsNyBAQCB2b2lkIGFs
bG9jYXRlU3RhY2soQ29kZSYgY29kZSkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICBT
dGFja1Nsb3QqIHNsb3QgPSBhcmcuc3RhY2tTbG90KCk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBpZiAoc2xvdC0+a2luZCgpICE9IFN0YWNrU2xvdEtpbmQ6OkFub255bW91cykgeworICAgICAg
ICAgICAgICAgICAgICAgICAgaWYgKHNsb3QtPmtpbmQoKSAhPSBTdGFja1Nsb3RLaW5kOjpTcGls
bCkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG9rID0gZmFsc2U7CiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgICAgICAgICAgfQpAQCAt
Mjg3LDcgKzI3MCw3IEBAIHZvaWQgYWxsb2NhdGVTdGFjayhDb2RlJiBjb2RlKQogICAgICAgICAg
ICAgICAgICAgICBjYXNlIEFyZzo6U3RhY2s6IHsKICAgICAgICAgICAgICAgICAgICAgICAgIFN0
YWNrU2xvdCogc2xvdCA9IGFyZy5zdGFja1Nsb3QoKTsKICAgICAgICAgICAgICAgICAgICAgICAg
IGlmIChBcmc6OmlzWkRlZihyb2xlKQotICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHNs
b3QtPmtpbmQoKSA9PSBTdGFja1Nsb3RLaW5kOjpBbm9ueW1vdXMKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAmJiBzbG90LT5raW5kKCkgPT0gU3RhY2tTbG90S2luZDo6U3BpbGwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAmJiBzbG90LT5ieXRlU2l6ZSgpID4gQXJnOjpieXRlcyh3
aWR0aCkpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBDdXJyZW50bHkgd2Ugb25s
eSBoYW5kbGUgdGhpcyBzaW1wbGUgY2FzZSBiZWNhdXNlIGl0J3MgdGhlIG9ubHkgb25lCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgLy8gdGhhdCBhcmlzZXM6IFpEZWYncyBhcmUgb25seSAz
Mi1iaXQgcmlnaHQgbm93LiBTbywgd2hlbiB3ZSBoaXQgdGhlc2UKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmNwcAkocmV2aXNpb24gMTk2MDExKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTQs
MjMgKzU0LDE4IEBAIEJhc2ljQmxvY2sqIENvZGU6OmFkZEJsb2NrKGRvdWJsZSBmcmVxdWUKIAog
U3RhY2tTbG90KiBDb2RlOjphZGRTdGFja1Nsb3QodW5zaWduZWQgYnl0ZVNpemUsIFN0YWNrU2xv
dEtpbmQga2luZCwgQjM6OlN0YWNrU2xvdCogYjNTbG90KQogewotICAgIHN0ZDo6dW5pcXVlX3B0
cjxTdGFja1Nsb3Q+IHNsb3QobmV3IFN0YWNrU2xvdChieXRlU2l6ZSwgbV9zdGFja1Nsb3RzLnNp
emUoKSwga2luZCwgYjNTbG90KSk7Ci0gICAgU3RhY2tTbG90KiByZXN1bHQgPSBzbG90LmdldCgp
OwotICAgIG1fc3RhY2tTbG90cy5hcHBlbmQoV1RGTW92ZShzbG90KSk7Ci0gICAgcmV0dXJuIHJl
c3VsdDsKKyAgICByZXR1cm4gbV9zdGFja1Nsb3RzLmFkZE5ldyhieXRlU2l6ZSwga2luZCwgYjNT
bG90KTsKIH0KIAogU3RhY2tTbG90KiBDb2RlOjphZGRTdGFja1Nsb3QoQjM6OlN0YWNrU2xvdCog
YjNTbG90KQogewotICAgIHJldHVybiBhZGRTdGFja1Nsb3QoYjNTbG90LT5ieXRlU2l6ZSgpLCBi
M1Nsb3QtPmtpbmQoKSwgYjNTbG90KTsKKyAgICByZXR1cm4gYWRkU3RhY2tTbG90KGIzU2xvdC0+
Ynl0ZVNpemUoKSwgU3RhY2tTbG90S2luZDo6TG9ja2VkLCBiM1Nsb3QpOwogfQogCiBTcGVjaWFs
KiBDb2RlOjphZGRTcGVjaWFsKHN0ZDo6dW5pcXVlX3B0cjxTcGVjaWFsPiBzcGVjaWFsKQogewot
ICAgIFNwZWNpYWwqIHJlc3VsdCA9IHNwZWNpYWwuZ2V0KCk7Ci0gICAgcmVzdWx0LT5tX2NvZGUg
PSB0aGlzOwotICAgIG1fc3BlY2lhbHMuYXBwZW5kKFdURk1vdmUoc3BlY2lhbCkpOwotICAgIHJl
dHVybiByZXN1bHQ7CisgICAgc3BlY2lhbC0+bV9jb2RlID0gdGhpczsKKyAgICByZXR1cm4gbV9z
cGVjaWFscy5hZGQoV1RGTW92ZShzcGVjaWFsKSk7CiB9CiAKIENDYWxsU3BlY2lhbCogQ29kZTo6
Y0NhbGxTcGVjaWFsKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29k
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5o
CShyZXZpc2lvbiAxOTYwMTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNv
ZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsNyBAQAogI2luY2x1ZGUgIkFpclNwZWNp
YWwuaCIKICNpbmNsdWRlICJBaXJTdGFja1Nsb3QuaCIKICNpbmNsdWRlICJBaXJUbXAuaCIKKyNp
bmNsdWRlICJCM1NwYXJzZUNvbGxlY3Rpb24uaCIKICNpbmNsdWRlICJSZWdpc3RlckF0T2Zmc2V0
TGlzdC5oIgogI2luY2x1ZGUgIlN0YWNrQWxpZ25tZW50LmgiCiAKQEAgLTE4NCwxMjUgKzE4NSwx
MSBAQCBwdWJsaWM6CiAgICAgaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBpdGVyYXRv
cigqdGhpcywgMCk7IH0KICAgICBpdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBpdGVyYXRv
cigqdGhpcywgc2l6ZSgpKTsgfQogCi0gICAgY2xhc3MgU3RhY2tTbG90c0NvbGxlY3Rpb24gewot
ICAgIHB1YmxpYzoKLSAgICAgICAgU3RhY2tTbG90c0NvbGxlY3Rpb24oY29uc3QgQ29kZSYgY29k
ZSkKLSAgICAgICAgICAgIDogbV9jb2RlKGNvZGUpCi0gICAgICAgIHsKLSAgICAgICAgfQotCi0g
ICAgICAgIHVuc2lnbmVkIHNpemUoKSBjb25zdCB7IHJldHVybiBtX2NvZGUubV9zdGFja1Nsb3Rz
LnNpemUoKTsgfQotICAgICAgICBTdGFja1Nsb3QqIGF0KHVuc2lnbmVkIGluZGV4KSBjb25zdCB7
IHJldHVybiBtX2NvZGUubV9zdGFja1Nsb3RzW2luZGV4XS5nZXQoKTsgfQotICAgICAgICBTdGFj
a1Nsb3QqIG9wZXJhdG9yW10odW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGF0KGluZGV4
KTsgfQotCi0gICAgICAgIGNsYXNzIGl0ZXJhdG9yIHsKLSAgICAgICAgcHVibGljOgotICAgICAg
ICAgICAgaXRlcmF0b3IoKQotICAgICAgICAgICAgICAgIDogbV9jb2xsZWN0aW9uKG51bGxwdHIp
Ci0gICAgICAgICAgICAgICAgLCBtX2luZGV4KDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAg
ICB9Ci0KLSAgICAgICAgICAgIGl0ZXJhdG9yKGNvbnN0IFN0YWNrU2xvdHNDb2xsZWN0aW9uJiBj
b2xsZWN0aW9uLCB1bnNpZ25lZCBpbmRleCkKLSAgICAgICAgICAgICAgICA6IG1fY29sbGVjdGlv
bigmY29sbGVjdGlvbikKLSAgICAgICAgICAgICAgICAsIG1faW5kZXgoaW5kZXgpCi0gICAgICAg
ICAgICB7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIFN0YWNrU2xvdCogb3BlcmF0b3Iq
KCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbV9jb2xsZWN0aW9uLT5h
dChtX2luZGV4KTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaXRlcmF0b3ImIG9wZXJh
dG9yKysoKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIG1faW5kZXgrKzsKLSAgICAg
ICAgICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGJv
b2wgb3BlcmF0b3I9PShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0Ci0gICAgICAgICAgICB7
Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG1faW5kZXggPT0gb3RoZXIubV9pbmRleDsKLSAgICAg
ICAgICAgIH0KLQotICAgICAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IGl0ZXJhdG9yJiBv
dGhlcikgY29uc3QKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gISgqdGhp
cyA9PSBvdGhlcik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0ZToKLSAgICAgICAg
ICAgIGNvbnN0IFN0YWNrU2xvdHNDb2xsZWN0aW9uKiBtX2NvbGxlY3Rpb247Ci0gICAgICAgICAg
ICB1bnNpZ25lZCBtX2luZGV4OwotICAgICAgICB9OwotCi0gICAgICAgIGl0ZXJhdG9yIGJlZ2lu
KCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoKnRoaXMsIDApOyB9Ci0gICAgICAgIGl0ZXJhdG9y
IGVuZCgpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKCp0aGlzLCBzaXplKCkpOyB9Ci0KLSAgICBw
cml2YXRlOgotICAgICAgICBjb25zdCBDb2RlJiBtX2NvZGU7Ci0gICAgfTsKLQotICAgIFN0YWNr
U2xvdHNDb2xsZWN0aW9uIHN0YWNrU2xvdHMoKSBjb25zdCB7IHJldHVybiBTdGFja1Nsb3RzQ29s
bGVjdGlvbigqdGhpcyk7IH0KLSAgICAKLSAgICBjbGFzcyBTcGVjaWFsc0NvbGxlY3Rpb24gewot
ICAgIHB1YmxpYzoKLSAgICAgICAgU3BlY2lhbHNDb2xsZWN0aW9uKGNvbnN0IENvZGUmIGNvZGUp
Ci0gICAgICAgICAgICA6IG1fY29kZShjb2RlKQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAg
ICAgICB1bnNpZ25lZCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9jb2RlLm1fc3BlY2lhbHMuc2l6
ZSgpOyB9Ci0gICAgICAgIFNwZWNpYWwqIGF0KHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVy
biBtX2NvZGUubV9zcGVjaWFsc1tpbmRleF0uZ2V0KCk7IH0KLSAgICAgICAgU3BlY2lhbCogb3Bl
cmF0b3JbXSh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gYXQoaW5kZXgpOyB9Ci0KLSAg
ICAgICAgY2xhc3MgaXRlcmF0b3IgewotICAgICAgICBwdWJsaWM6Ci0gICAgICAgICAgICBpdGVy
YXRvcigpCi0gICAgICAgICAgICAgICAgOiBtX2NvbGxlY3Rpb24obnVsbHB0cikKLSAgICAgICAg
ICAgICAgICAsIG1faW5kZXgoMCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIH0KLQotICAg
ICAgICAgICAgaXRlcmF0b3IoY29uc3QgU3BlY2lhbHNDb2xsZWN0aW9uJiBjb2xsZWN0aW9uLCB1
bnNpZ25lZCBpbmRleCkKLSAgICAgICAgICAgICAgICA6IG1fY29sbGVjdGlvbigmY29sbGVjdGlv
bikKLSAgICAgICAgICAgICAgICAsIG1faW5kZXgoaW5kZXgpCi0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICB9Ci0KLSAgICAgICAgICAgIFNwZWNpYWwqIG9wZXJhdG9yKigpCi0gICAgICAgICAg
ICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG1fY29sbGVjdGlvbi0+YXQobV9pbmRleCk7Ci0g
ICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGl0ZXJhdG9yJiBvcGVyYXRvcisrKCkKLSAgICAg
ICAgICAgIHsKLSAgICAgICAgICAgICAgICBtX2luZGV4Kys7Ci0gICAgICAgICAgICAgICAgcmV0
dXJuICp0aGlzOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBib29sIG9wZXJhdG9yPT0o
Y29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAotICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIHJldHVybiBtX2luZGV4ID09IG90aGVyLm1faW5kZXg7Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0Ci0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuICEoKnRoaXMgPT0gb3RoZXIpOwot
ICAgICAgICAgICAgfQotCi0gICAgICAgIHByaXZhdGU6Ci0gICAgICAgICAgICBjb25zdCBTcGVj
aWFsc0NvbGxlY3Rpb24qIG1fY29sbGVjdGlvbjsKLSAgICAgICAgICAgIHVuc2lnbmVkIG1faW5k
ZXg7Ci0gICAgICAgIH07Ci0KLSAgICAgICAgaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVy
biBpdGVyYXRvcigqdGhpcywgMCk7IH0KLSAgICAgICAgaXRlcmF0b3IgZW5kKCkgY29uc3QgeyBy
ZXR1cm4gaXRlcmF0b3IoKnRoaXMsIHNpemUoKSk7IH0KLQotICAgIHByaXZhdGU6Ci0gICAgICAg
IGNvbnN0IENvZGUmIG1fY29kZTsKLSAgICB9OworICAgIGNvbnN0IFNwYXJzZUNvbGxlY3Rpb248
U3RhY2tTbG90PiYgc3RhY2tTbG90cygpIGNvbnN0IHsgcmV0dXJuIG1fc3RhY2tTbG90czsgfQor
ICAgIFNwYXJzZUNvbGxlY3Rpb248U3RhY2tTbG90PiYgc3RhY2tTbG90cygpIHsgcmV0dXJuIG1f
c3RhY2tTbG90czsgfQogCi0gICAgU3BlY2lhbHNDb2xsZWN0aW9uIHNwZWNpYWxzKCkgY29uc3Qg
eyByZXR1cm4gU3BlY2lhbHNDb2xsZWN0aW9uKCp0aGlzKTsgfQorICAgIGNvbnN0IFNwYXJzZUNv
bGxlY3Rpb248U3BlY2lhbD4mIHNwZWNpYWxzKCkgY29uc3QgeyByZXR1cm4gbV9zcGVjaWFsczsg
fQorICAgIFNwYXJzZUNvbGxlY3Rpb248U3BlY2lhbD4mIHNwZWNpYWxzKCkgeyByZXR1cm4gbV9z
cGVjaWFsczsgfQogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgQ2FsbGJhY2s+CiAgICAgdm9pZCBm
b3JBbGxUbXBzKGNvbnN0IENhbGxiYWNrJiBjYWxsYmFjaykgY29uc3QKQEAgLTMzMSw5ICsyMTgs
OSBAQCBwcml2YXRlOgogICAgIENvZGUoUHJvY2VkdXJlJik7CiAKICAgICBQcm9jZWR1cmUmIG1f
cHJvYzsgLy8gU29tZSBtZXRhLWRhdGEsIGxpa2UgYnlwcm9kdWN0cywgaXMgc3RvcmVkIGluIHRo
ZSBQcm9jZWR1cmUuCi0gICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxTdGFja1Nsb3Q+PiBtX3N0
YWNrU2xvdHM7CisgICAgU3BhcnNlQ29sbGVjdGlvbjxTdGFja1Nsb3Q+IG1fc3RhY2tTbG90czsK
ICAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEJhc2ljQmxvY2s+PiBtX2Jsb2NrczsKLSAgICBW
ZWN0b3I8c3RkOjp1bmlxdWVfcHRyPFNwZWNpYWw+PiBtX3NwZWNpYWxzOworICAgIFNwYXJzZUNv
bGxlY3Rpb248U3BlY2lhbD4gbV9zcGVjaWFsczsKICAgICBIYXNoU2V0PFRtcD4gbV9mYXN0VG1w
czsKICAgICBDQ2FsbFNwZWNpYWwqIG1fY0NhbGxTcGVjaWFsIHsgbnVsbHB0ciB9OwogICAgIHVu
c2lnbmVkIG1fbnVtR1BUbXBzIHsgMCB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJGaXhPYnZpb3VzU3BpbGxzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvYWlyL0FpckZpeE9idmlvdXNTcGlsbHMuY3BwCShyZXZpc2lvbiAxOTYwMTEp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckZpeE9idmlvdXNTcGlsbHMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNjEsNyArMjYxLDcgQEAgcHJpdmF0ZToKICAgICAKICAgICBz
dGF0aWMgYm9vbCBpc1NwaWxsU2xvdChjb25zdCBBcmcmIGFyZykKICAgICB7Ci0gICAgICAgIHJl
dHVybiBhcmcuaXNTdGFjaygpICYmICFhcmcuc3RhY2tTbG90KCktPmlzTG9ja2VkKCk7CisgICAg
ICAgIHJldHVybiBhcmcuaXNTdGFjaygpICYmIGFyZy5zdGFja1Nsb3QoKS0+aXNTcGlsbCgpOwog
ICAgIH0KICAgICAKICAgICBzdHJ1Y3QgUmVnQ29uc3QgewpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJJbnN0SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9haXIvQWlySW5zdElubGluZXMuaAkocmV2aXNpb24gMTk2MDExKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0SW5saW5lcy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiQWlySW5zdC5oIgogI2luY2x1ZGUgIkFp
ck9wY29kZVV0aWxzLmgiCiAjaW5jbHVkZSAiQWlyU3BlY2lhbC5oIgorI2luY2x1ZGUgIkFpclN0
YWNrU2xvdC5oIgogI2luY2x1ZGUgIkIzVmFsdWUuaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJJdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2luZy5j
cHAJKHJldmlzaW9uIDE5NjAxMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWly
SXRlcmF0ZWRSZWdpc3RlckNvYWxlc2NpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjMzLDcg
KzEyMzMsNyBAQCBwcml2YXRlOgogCiAgICAgICAgICAgICAvLyBBbGxvY2F0ZSBzdGFjayBzbG90
IGZvciBlYWNoIHNwaWxsZWQgdmFsdWUuCiAgICAgICAgICAgICBTdGFja1Nsb3QqIHN0YWNrU2xv
dCA9IG1fY29kZS5hZGRTdGFja1Nsb3QoCi0gICAgICAgICAgICAgICAgbV90bXBXaWR0aC53aWR0
aCh0bXApIDw9IEFyZzo6V2lkdGgzMiA/IDQgOiA4LCBTdGFja1Nsb3RLaW5kOjpBbm9ueW1vdXMp
OworICAgICAgICAgICAgICAgIG1fdG1wV2lkdGgud2lkdGgodG1wKSA8PSBBcmc6OldpZHRoMzIg
PyA0IDogOCwgU3RhY2tTbG90S2luZDo6U3BpbGwpOwogICAgICAgICAgICAgYm9vbCBpc05ld1Rt
cCA9IHN0YWNrU2xvdHMuYWRkKHRtcCwgc3RhY2tTbG90KS5pc05ld0VudHJ5OwogICAgICAgICAg
ICAgQVNTRVJUX1VOVVNFRChpc05ld1RtcCwgaXNOZXdUbXApOwogICAgICAgICB9CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckxpdmVuZXNzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMaXZlbmVzcy5oCShyZXZpc2lvbiAxOTYw
MTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckxpdmVuZXNzLmgJKHdvcmtp
bmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNpbmNsdWRlICJBaXJCYXNpY0Jsb2NrLmgiCiAj
aW5jbHVkZSAiQWlyQ29kZS5oIgogI2luY2x1ZGUgIkFpckluc3RJbmxpbmVzLmgiCisjaW5jbHVk
ZSAiQWlyU3RhY2tTbG90LmgiCiAjaW5jbHVkZSAiQWlyVG1wSW5saW5lcy5oIgogI2luY2x1ZGUg
IkIzSW5kZXhNYXAuaCIKICNpbmNsdWRlICJCM0luZGV4U2V0LmgiCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0Fpckxvd2VyQWZ0ZXJSZWdBbGxvYy5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJMb3dlckFmdGVyUmVnQWxsb2MuY3Bw
CShyZXZpc2lvbiAxOTYwMTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckxv
d2VyQWZ0ZXJSZWdBbGxvYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk3LDcgKzk3LDcgQEAgdm9p
ZCBsb3dlckFmdGVyUmVnQWxsb2MoQ29kZSYgY29kZSkKICAgICAgICAgICAgICAgICByZXN1bHRb
aV0gPSBBcmc6OnN0YWNrKAogICAgICAgICAgICAgICAgICAgICBjb2RlLmFkZFN0YWNrU2xvdCgK
ICAgICAgICAgICAgICAgICAgICAgICAgIEFyZzo6Ynl0ZXMoQXJnOjpjb25zZXJ2YXRpdmVXaWR0
aCh0eXBlKSksCi0gICAgICAgICAgICAgICAgICAgICAgICBTdGFja1Nsb3RLaW5kOjpBbm9ueW1v
dXMpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFN0YWNrU2xvdEtpbmQ6OlNwaWxsKSk7CiAg
ICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJuIHJlc3VsdDsKQEAgLTE4Miw3
ICsxODIsNyBAQCB2b2lkIGxvd2VyQWZ0ZXJSZWdBbGxvYyhDb2RlJiBjb2RlKQogICAgICAgICAg
ICAgICAgICAgICAgICAgQXJnIGFyZyh0bXApOwogICAgICAgICAgICAgICAgICAgICAgICAgQXJn
OjpXaWR0aCB3aWR0aCA9IEFyZzo6Y29uc2VydmF0aXZlV2lkdGgoYXJnLnR5cGUoKSk7CiAgICAg
ICAgICAgICAgICAgICAgICAgICBTdGFja1Nsb3QqIHN0YWNrU2xvdCA9Ci0gICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY29kZS5hZGRTdGFja1Nsb3QoQXJnOjpieXRlcyh3aWR0aCksIFN0YWNr
U2xvdEtpbmQ6OkFub255bW91cyk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZS5h
ZGRTdGFja1Nsb3QoQXJnOjpieXRlcyh3aWR0aCksIFN0YWNrU2xvdEtpbmQ6OlNwaWxsKTsKICAg
ICAgICAgICAgICAgICAgICAgICAgIHBhaXJzLmFwcGVuZChTaHVmZmxlUGFpcihhcmcsIEFyZzo6
c3RhY2soc3RhY2tTbG90KSwgd2lkdGgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNr
U2xvdHMuYXBwZW5kKHN0YWNrU2xvdCk7CiAgICAgICAgICAgICAgICAgICAgIH0pOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTcGVjaWFsLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNwZWNpYWwuY3BwCShyZXZpc2lvbiAx
OTYwMTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNwZWNpYWwuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zNiw4ICszNiw2IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
QjMgeyBuYW1lc3BhY2UKIGNvbnN0IGNoYXIqIGNvbnN0IFNwZWNpYWw6OmR1bXBQcmVmaXggPSAi
JiI7CiAKIFNwZWNpYWw6OlNwZWNpYWwoKQotICAgIDogbV9pbmRleChVSU5UX01BWCkKLSAgICAs
IG1fY29kZShudWxscHRyKQogewogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpclNwZWNpYWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpclNwZWNpYWwuaAkocmV2aXNpb24gMTk2MDExKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJTcGVjaWFsLmgJKHdvcmtpbmcgY29weSkKQEAgLTI5LDYgKzI5LDcgQEAK
ICNpZiBFTkFCTEUoQjNfSklUKQogCiAjaW5jbHVkZSAiQWlySW5zdC5oIgorI2luY2x1ZGUgIkIz
U3BhcnNlQ29sbGVjdGlvbi5oIgogI2luY2x1ZGUgPHd0Zi9GYXN0TWFsbG9jLmg+CiAjaW5jbHVk
ZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL1Njb3BlZExhbWJkYS5oPgpAQCAt
OTgsMTAgKzk5LDEwIEBAIHByb3RlY3RlZDoKIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3Mg
Q29kZTsKKyAgICBmcmllbmQgY2xhc3MgU3BhcnNlQ29sbGVjdGlvbjxTcGVjaWFsPjsKIAotICAg
IGNvbnN0IGNoYXIqIG1fbmFtZTsKLSAgICB1bnNpZ25lZCBtX2luZGV4OwotICAgIENvZGUqIG1f
Y29kZTsKKyAgICB1bnNpZ25lZCBtX2luZGV4IHsgVUlOVF9NQVggfTsKKyAgICBDb2RlKiBtX2Nv
ZGUgeyBudWxscHRyIH07CiB9OwogCiBjbGFzcyBEZWVwU3BlY2lhbER1bXAgewpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTcGlsbEV2ZXJ5dGhpbmcuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3BpbGxFdmVyeXRoaW5nLmNw
cAkocmV2aXNpb24gMTk2MDExKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJT
cGlsbEV2ZXJ5dGhpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OCw3ICs4OCw3IEBAIHZvaWQg
c3BpbGxFdmVyeXRoaW5nKENvZGUmIGNvZGUpCiAgICAgICAgIEFyZzo6VHlwZSB0eXBlID0gc3Rh
dGljX2Nhc3Q8QXJnOjpUeXBlPih0eXBlSW5kZXgpOwogICAgICAgICBzdGFja1Nsb3RzLnJlc2l6
ZShjb2RlLm51bVRtcHModHlwZSkpOwogICAgICAgICBmb3IgKHVuc2lnbmVkIHRtcEluZGV4ID0g
Y29kZS5udW1UbXBzKHR5cGUpOyB0bXBJbmRleC0tOykKLSAgICAgICAgICAgIHN0YWNrU2xvdHNb
dG1wSW5kZXhdID0gY29kZS5hZGRTdGFja1Nsb3QoOCwgU3RhY2tTbG90S2luZDo6QW5vbnltb3Vz
KTsKKyAgICAgICAgICAgIHN0YWNrU2xvdHNbdG1wSW5kZXhdID0gY29kZS5hZGRTdGFja1Nsb3Qo
OCwgU3RhY2tTbG90S2luZDo6U3BpbGwpOwogICAgIH0KIAogICAgIEluc2VydGlvblNldCBpbnNl
cnRpb25TZXQoY29kZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclN0
YWNrU2xvdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9B
aXJTdGFja1Nsb3QuY3BwCShyZXZpc2lvbiAxOTYwMTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvYWlyL0FpclN0YWNrU2xvdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDcgKzQxLDEx
IEBAIHZvaWQgU3RhY2tTbG90OjpzZXRPZmZzZXRGcm9tRlAoaW50cHRyX3QKIAogdm9pZCBTdGFj
a1Nsb3Q6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKIHsKLSAgICBvdXQucHJpbnQoInN0
YWNrIiwgbV9pbmRleCk7CisgICAgaWYgKGlzU3BpbGwoKSkKKyAgICAgICAgb3V0LnByaW50KCJz
cGlsbCIpOworICAgIGVsc2UKKyAgICAgICAgb3V0LnByaW50KCJzdGFjayIpOworICAgIG91dC5w
cmludChtX2luZGV4KTsKIH0KIAogdm9pZCBTdGFja1Nsb3Q6OmRlZXBEdW1wKFByaW50U3RyZWFt
JiBvdXQpIGNvbnN0CkBAIC01MSw5ICs1NSw4IEBAIHZvaWQgU3RhY2tTbG90OjpkZWVwRHVtcChQ
cmludFN0cmVhbSYgb3UKICAgICAgICAgb3V0LnByaW50KCIsIGIzU2xvdCA9ICIsICptX2IzU2xv
dCwgIjogKCIsIEIzOjpkZWVwRHVtcChtX2IzU2xvdCksICIpIik7CiB9CiAKLVN0YWNrU2xvdDo6
U3RhY2tTbG90KHVuc2lnbmVkIGJ5dGVTaXplLCB1bnNpZ25lZCBpbmRleCwgU3RhY2tTbG90S2lu
ZCBraW5kLCBCMzo6U3RhY2tTbG90KiBiM1Nsb3QpCitTdGFja1Nsb3Q6OlN0YWNrU2xvdCh1bnNp
Z25lZCBieXRlU2l6ZSwgU3RhY2tTbG90S2luZCBraW5kLCBCMzo6U3RhY2tTbG90KiBiM1Nsb3Qp
CiAgICAgOiBtX2J5dGVTaXplKGJ5dGVTaXplKQotICAgICwgbV9pbmRleChpbmRleCkKICAgICAs
IG1fb2Zmc2V0RnJvbUZQKGIzU2xvdCA/IGIzU2xvdC0+b2Zmc2V0RnJvbUZQKCkgOiAwKQogICAg
ICwgbV9raW5kKGtpbmQpCiAgICAgLCBtX2IzU2xvdChiM1Nsb3QpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpclN0YWNrU2xvdC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3RhY2tTbG90LmgJKHJldmlzaW9uIDE5NjAxMSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3RhY2tTbG90LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI4LDcgKzI4LDggQEAKIAogI2lmIEVOQUJMRShCM19KSVQpCiAKLSNpbmNsdWRlICJC
M1N0YWNrU2xvdEtpbmQuaCIKKyNpbmNsdWRlICJBaXJTdGFja1Nsb3RLaW5kLmgiCisjaW5jbHVk
ZSAiQjNTcGFyc2VDb2xsZWN0aW9uLmgiCiAjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KICNp
bmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4K
QEAgLTQ2LDYgKzQ3LDcgQEAgcHVibGljOgogICAgIHVuc2lnbmVkIGJ5dGVTaXplKCkgY29uc3Qg
eyByZXR1cm4gbV9ieXRlU2l6ZTsgfQogICAgIFN0YWNrU2xvdEtpbmQga2luZCgpIGNvbnN0IHsg
cmV0dXJuIG1fa2luZDsgfQogICAgIGJvb2wgaXNMb2NrZWQoKSBjb25zdCB7IHJldHVybiBtX2tp
bmQgPT0gU3RhY2tTbG90S2luZDo6TG9ja2VkOyB9CisgICAgYm9vbCBpc1NwaWxsKCkgY29uc3Qg
eyByZXR1cm4gbV9raW5kID09IFN0YWNrU2xvdEtpbmQ6OlNwaWxsOyB9CiAgICAgdW5zaWduZWQg
aW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4OyB9CiAKICAgICB2b2lkIGVuc3VyZVNpemUo
dW5zaWduZWQgcmVxdWVzdGVkU2l6ZSkKQEAgLTc5LDE0ICs4MSwxNSBAQCBwdWJsaWM6CiAKIHBy
aXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIENvZGU7CisgICAgZnJpZW5kIGNsYXNzIFNwYXJzZUNv
bGxlY3Rpb248U3RhY2tTbG90PjsKIAotICAgIFN0YWNrU2xvdCh1bnNpZ25lZCBieXRlU2l6ZSwg
dW5zaWduZWQgaW5kZXgsIFN0YWNrU2xvdEtpbmQsIEIzOjpTdGFja1Nsb3QqKTsKKyAgICBTdGFj
a1Nsb3QodW5zaWduZWQgYnl0ZVNpemUsIFN0YWNrU2xvdEtpbmQsIEIzOjpTdGFja1Nsb3QqKTsK
ICAgICAKLSAgICB1bnNpZ25lZCBtX2J5dGVTaXplOwotICAgIHVuc2lnbmVkIG1faW5kZXg7Ci0g
ICAgaW50cHRyX3QgbV9vZmZzZXRGcm9tRlA7Ci0gICAgU3RhY2tTbG90S2luZCBtX2tpbmQ7Ci0g
ICAgQjM6OlN0YWNrU2xvdCogbV9iM1Nsb3Q7CisgICAgdW5zaWduZWQgbV9ieXRlU2l6ZSB7IDAg
fTsKKyAgICB1bnNpZ25lZCBtX2luZGV4IHsgVUlOVF9NQVggfTsKKyAgICBpbnRwdHJfdCBtX29m
ZnNldEZyb21GUCB7IDAgfTsKKyAgICBTdGFja1Nsb3RLaW5kIG1fa2luZCB7IFN0YWNrU2xvdEtp
bmQ6OkxvY2tlZCB9OworICAgIEIzOjpTdGFja1Nsb3QqIG1fYjNTbG90IHsgbnVsbHB0ciB9Owog
fTsKIAogY2xhc3MgRGVlcFN0YWNrU2xvdER1bXAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJTdGFja1Nsb3RLaW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL0FpclN0YWNrU2xvdEtpbmQuY3BwCShyZXZpc2lvbiAxOTU5MDEp
CShmcm9tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrU2xvdEtpbmQuY3BwOjE5NTkw
MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3RhY2tTbG90S2luZC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNT
dGFja1Nsb3RLaW5kLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSA8d3RmL1By
aW50U3RyZWFtLmg+CisKK25hbWVzcGFjZSBXVEYgeworCit1c2luZyBuYW1lc3BhY2UgSlNDOjpC
MzsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIFN0YWNrU2xvdEtpbmQg
a2luZCkKK3sKKyAgICBzd2l0Y2ggKGtpbmQpIHsKKyAgICBjYXNlIFN0YWNrU2xvdEtpbmQ6Okxv
Y2tlZDoKKyAgICAgICAgb3V0LnByaW50KCJMb2NrZWQiKTsKKyAgICAgICAgcmV0dXJuOworICAg
IGNhc2UgU3RhY2tTbG90S2luZDo6QW5vbnltb3VzOgorICAgICAgICBvdXQucHJpbnQoIkFub255
bW91cyIpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYgLy8gRU5BQkxFKEIz
X0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3RhY2tTbG90S2lu
ZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJTdGFj
a1Nsb3RLaW5kLmNwcAkod29ya2luZyBjb3B5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJTdGFja1Nsb3RLaW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQsNyArMjQsNyBA
QAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJCM1N0YWNrU2xvdEtpbmQu
aCIKKyNpbmNsdWRlICJBaXJTdGFja1Nsb3RLaW5kLmgiCiAKICNpZiBFTkFCTEUoQjNfSklUKQog
CkBAIC0zMiw3ICszMiw3IEBACiAKIG5hbWVzcGFjZSBXVEYgewogCi11c2luZyBuYW1lc3BhY2Ug
SlNDOjpCMzsKK3VzaW5nIG5hbWVzcGFjZSBKU0M6OkIzOjpBaXI7CiAKIHZvaWQgcHJpbnRJbnRl
cm5hbChQcmludFN0cmVhbSYgb3V0LCBTdGFja1Nsb3RLaW5kIGtpbmQpCiB7CkBAIC00MCw4ICs0
MCw4IEBAIHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBTdGEKICAgICBjYXNl
IFN0YWNrU2xvdEtpbmQ6OkxvY2tlZDoKICAgICAgICAgb3V0LnByaW50KCJMb2NrZWQiKTsKICAg
ICAgICAgcmV0dXJuOwotICAgIGNhc2UgU3RhY2tTbG90S2luZDo6QW5vbnltb3VzOgotICAgICAg
ICBvdXQucHJpbnQoIkFub255bW91cyIpOworICAgIGNhc2UgU3RhY2tTbG90S2luZDo6U3BpbGw6
CisgICAgICAgIG91dC5wcmludCgiU3BpbGwiKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJTdGFja1Nsb3RLaW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJTdGFja1Nsb3RLaW5kLmgJKHJldmlzaW9uIDE5NTkwMSkJKGZy
b20gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tTbG90S2luZC5oOjE5NTkwMSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3RhY2tTbG90S2luZC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsNjMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUtMjAxNiBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEIzU3RhY2tTbG90S2luZF9oCisjZGVmaW5lIEIz
U3RhY2tTbG90S2luZF9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEIzIHsKKworZW51bSBjbGFzcyBTdGFja1Nsb3RLaW5kIDogdWludDhfdCB7Cisg
ICAgLy8gQSBsb2NrZWQgc3RhY2sgc2xvdCBuZWVkcyB0byBiZSBrZXB0IGRpc2pvaW50IGZyb20g
YWxsIG90aGVycyBiZWNhdXNlIHdlIGludGVuZCB0byBlc2NhcGUKKyAgICAvLyBpdCBldmVuIGlm
IHRoYXQncyBub3Qgb2J2aW91cy4gVGhpcyBoYXBwZW5zIHdoZW4gdGhlIHJ1bnRpbWUgdGFrZXMg
dGhlIGFkZHJlc3Mgb2YgYSBzdGFjaworICAgIC8vIHNsb3QuCisgICAgTG9ja2VkLAorCisgICAg
Ly8gVGhlc2Ugc3RhY2sgc2xvdHMgYmVoYXZlIGxpa2UgdmFyaWFibGVzLiBVbmRlZmluZWQgYmVo
YXZpb3IgaGFwcGVucyBpZiB5b3Ugc3RvcmUgbGVzcyB0aGFuCisgICAgLy8gdGhlIHdpZHRoIG9m
IHRoZSBzbG90LgorICAgIEFub255bW91cworCisgICAgLy8gRklYTUU6IFdlIHNob3VsZCBhZGQg
YSB0aGlyZCBtb2RlLCB3aGljaCBtZWFucyB0aGF0IHRoZSBzdGFjayBzbG90IHdpbGwgYmUgcmVh
ZCBhc3luY2hyb25vdXNseQorICAgIC8vIGFzIHdpdGggTG9ja2VkLCBidXQgbmV2ZXIgd3JpdHRl
biB0byBhc3luY2hyb25vdXNseS4gVGhlbiwgQWlyIGNvdWxkIG9wdGltaXplIHNwaWxsaW5nIGFu
ZAorICAgIC8vIGZpbGxpbmcgYnkgdHJhY2tpbmcgd2hldGhlciB0aGUgdmFsdWUgaGFkIGJlZW4g
c3RvcmVkIHRvIGEgcmVhZC1vbmx5IGxvY2tlZCBzbG90LiBJZiBpdCBoYWQsCisgICAgLy8gdGhl
biB3ZSBjYW4gcmVmaWxsIGZyb20gdGhhdCBzbG90LgorICAgIC8vIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTA1ODcKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlND
OjpCMworCituYW1lc3BhY2UgV1RGIHsKKworY2xhc3MgUHJpbnRTdHJlYW07CisKK3ZvaWQgcHJp
bnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6QjM6OlN0YWNrU2xvdEtpbmQpOworCit9IC8v
IG5hbWVzcGFjZSBXVEYKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBC
M1N0YWNrU2xvdEtpbmRfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
clN0YWNrU2xvdEtpbmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpclN0YWNrU2xvdEtpbmQuaAkod29ya2luZyBjb3B5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9BaXJTdGFja1Nsb3RLaW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDIy
ICsyMywyNiBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCiAgKi8KIAotI2lmbmRlZiBCM1N0YWNrU2xvdEtp
bmRfaAotI2RlZmluZSBCM1N0YWNrU2xvdEtpbmRfaAorI2lmbmRlZiBBaXJTdGFja1Nsb3RLaW5k
X2gKKyNkZWZpbmUgQWlyU3RhY2tTbG90S2luZF9oCiAKICNpZiBFTkFCTEUoQjNfSklUKQogCi1u
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
QjMgeyBuYW1lc3BhY2UgQWlyIHsKIAogZW51bSBjbGFzcyBTdGFja1Nsb3RLaW5kIDogdWludDhf
dCB7Ci0gICAgLy8gQSBsb2NrZWQgc3RhY2sgc2xvdCBuZWVkcyB0byBiZSBrZXB0IGRpc2pvaW50
IGZyb20gYWxsIG90aGVycyBiZWNhdXNlIHdlIGludGVuZCB0byBlc2NhcGUKLSAgICAvLyBpdCBl
dmVuIGlmIHRoYXQncyBub3Qgb2J2aW91cy4gVGhpcyBoYXBwZW5zIHdoZW4gdGhlIHJ1bnRpbWUg
dGFrZXMgdGhlIGFkZHJlc3Mgb2YgYSBzdGFjawotICAgIC8vIHNsb3QuCisgICAgLy8gQSBsb2Nr
ZWQgc3RhY2sgc2xvdCBpcyBhbiBhcmVhIG9mIHN0YWNrIHJlcXVlc3RlZCBieSB0aGUgY2xpZW50
LiBJdCBjYW5ub3QgYmUga2lsbGVkLiBUaGUKKyAgICAvLyBjbGllbnQgY2FuIGdldCBpdHMgRlAg
b2Zmc2V0IGFuZCB3cml0ZSB0byBpdCBmcm9tIHN0YWNrIHdhbGtpbmcgY29kZSwgc28gd2UgbXVz
dCBhc3N1bWUKKyAgICAvLyB0aGF0IHJlYWRzIGFuZCB3cml0ZXMgdG8gYSBsb2NrZWQgc3RhY2sg
c2xvdCBjYW4gYmUgY2xvYmJlcmVkIHRoZSBzYW1lIHdheSBhcyByZWFkcyBhbmQKKyAgICAvLyB3
cml0ZXMgdG8gYW55IG1lbW9yeSBsb2NhdGlvbi4KICAgICBMb2NrZWQsCiAKLSAgICAvLyBUaGVz
ZSBzdGFjayBzbG90cyBiZWhhdmUgbGlrZSB2YXJpYWJsZXMuIFVuZGVmaW5lZCBiZWhhdmlvciBo
YXBwZW5zIGlmIHlvdSBzdG9yZSBsZXNzIHRoYW4KLSAgICAvLyB0aGUgd2lkdGggb2YgdGhlIHNs
b3QuCi0gICAgQW5vbnltb3VzCisgICAgLy8gQSBzcGlsbCBzbG90LiBUaGVzZSBoYXZlIGZ1bmRh
bWVudGFsbHkgZGlmZmVyZW50IGJlaGF2aW9yIHRoYW4gYSB0eXBpY2FsIG1lbW9yeSBsb2NhdGlv
bi4KKyAgICAvLyBUaGV5IGFyZSBsb3dlcmVkIHRvIGZyb20gdGVtcG9yYXJpZXMuIFRoaXMgbWVh
bnMgZm9yIGV4YW1wbGUgdGhhdCBhIDMyLWJpdCBaRGVmIHN0b3JlIHRvIGEKKyAgICAvLyA4IGJ5
dGUgc3RhY2sgc2xvdCB3aWxsIHplcm8gdGhlIHRvcCA0IGJ5dGVzLCBldmVuIHRob3VnaCBhIDMy
LWJpdCBaRGVmIHN0b3JlIHRvIGFueSBvdGhlcgorICAgIC8vIGtpbmQgb2YgbWVtb3J5IGxvY2F0
aW9uIHdvdWxkIGRvIG5vIHN1Y2ggdGhpbmcuIFVzZUFkZHIgb24gYSBzcGlsbCBzbG90IGlzIG5v
dCBhbGxvd2VkLCBzbworICAgIC8vIHRoZXkgbmV2ZXIgZXNjYXBlLgorICAgIFNwaWxsCiAKICAg
ICAvLyBGSVhNRTogV2Ugc2hvdWxkIGFkZCBhIHRoaXJkIG1vZGUsIHdoaWNoIG1lYW5zIHRoYXQg
dGhlIHN0YWNrIHNsb3Qgd2lsbCBiZSByZWFkIGFzeW5jaHJvbm91c2x5CiAgICAgLy8gYXMgd2l0
aCBMb2NrZWQsIGJ1dCBuZXZlciB3cml0dGVuIHRvIGFzeW5jaHJvbm91c2x5LiBUaGVuLCBBaXIg
Y291bGQgb3B0aW1pemUgc3BpbGxpbmcgYW5kCkBAIC00NywxMyArNTEsMTMgQEAgZW51bSBjbGFz
cyBTdGFja1Nsb3RLaW5kIDogdWludDhfdCB7CiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE1MDU4NwogfTsKIAotfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIz
Cit9IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpCMzo6QWlyCiAKIG5hbWVzcGFjZSBXVEYgewogCiBj
bGFzcyBQcmludFN0cmVhbTsKIAotdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwgSlND
OjpCMzo6U3RhY2tTbG90S2luZCk7Cit2b2lkIHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBK
U0M6OkIzOjpBaXI6OlN0YWNrU2xvdEtpbmQpOwogCiB9IC8vIG5hbWVzcGFjZSBXVEYKIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9vcGNvZGVfZ2VuZXJhdG9yLnJiCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvb3Bjb2RlX2dlbmVyYXRvci5y
YgkocmV2aXNpb24gMTk2MDExKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9vcGNv
ZGVfZ2VuZXJhdG9yLnJiCSh3b3JraW5nIGNvcHkpCkBAIC02ODAsNiArNjgwLDE4IEBAIHdyaXRl
SCgiT3Bjb2RlVXRpbHMiKSB7CiAgICAgICAgICAgICAgICAgZmlsdGVyID0gcHJvYyB7IGZhbHNl
IH0KICAgICAgICAgICAgICAgICBjYWxsYmFjayA9IHByb2MgewogICAgICAgICAgICAgICAgICAg
ICB8IGZvcm0gfAorICAgICAgICAgICAgICAgICAgICAjIFRoaXMgY29uc2VydmF0aXZlbHkgc2F5
cyB0aGF0IFN0YWNrIGlzIG5vdCBhIHZhbGlkIGZvcm0gZm9yIFVzZUFkZHIsCisgICAgICAgICAg
ICAgICAgICAgICMgYmVjYXVzZSBpdCdzIG9ubHkgdmFsaWQgaWYgaXQncyBub3QgYSBzcGlsbCBz
bG90LiBUaGlzIGlzIGNvbnNpc3RlbnQgd2l0aAorICAgICAgICAgICAgICAgICAgICAjIGlzVmFs
aWRGb3JtKCkgYmVpbmcgY29uc2VydmF0aXZlIGFuZCBpdCBhbHNvIGhhcHBlbnMgdG8gYmUgcHJh
Y3RpY2FsIHNpbmNlCisgICAgICAgICAgICAgICAgICAgICMgd2UgZG9uJ3QgcmVhbGx5IHVzZSBp
c1ZhbGlkRm9ybSBmb3IgZGVjaWRpbmcgd2hlbiBTdGFjayBpcyBzYWZlLgorICAgICAgICAgICAg
ICAgICAgICBvdmVybG9hZC5zaWduYXR1cmUubGVuZ3RoLnRpbWVzIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHwgaW5kZXggfAorICAgICAgICAgICAgICAgICAgICAgICAgaWYgb3ZlcmxvYWQu
c2lnbmF0dXJlW2luZGV4XS5yb2xlID09ICJVQSIKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBvdXRwLnB1dHMgImlmIChvcGdlbkhpZGRlblB0cklkZW50aXR5KGtpbmRzKVsje2luZGV4fV0g
PT0gQXJnOjpTdGFjaykiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICIg
ICAgcmV0dXJuIGZhbHNlOyIKKyAgICAgICAgICAgICAgICAgICAgICAgIGVuZAorICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBu
b3RDdXN0b20gPSAobm90IGZvcm0ua2luZHMuZGV0ZWN0IHsgfCBraW5kIHwga2luZC5jdXN0b20g
fSkKICAgICAgICAgICAgICAgICAgICAgaWYgbm90Q3VzdG9tCiAgICAgICAgICAgICAgICAgICAg
ICAgICBiZWdpbkFyY2hzKG91dHAsIGZvcm0uYXJjaHMpCkBAIC03ODcsNiArNzk5LDExIEBAIHdy
aXRlSCgiT3Bjb2RlR2VuZXJhdGVkIikgewogICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMg
ImlmICghQXJnOjppc1ZhbGlkSW1tRm9ybShhcmdzWyN7aW5kZXh9XS52YWx1ZSgpKSkiCiAgICAg
ICAgICAgICAgICAgICAgIG91dHAucHV0cyAiT1BHRU5fUkVUVVJOKGZhbHNlKTsiCiAgICAgICAg
ICAgICAgICAgd2hlbiAiQWRkciIKKyAgICAgICAgICAgICAgICAgICAgaWYgYXJnLnJvbGUgPT0g
IlVBIgorICAgICAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJpZiAoYXJnc1sje2luZGV4
fV0uaXNTdGFjaygpICYmIGFyZ3NbI3tpbmRleH1dLnN0YWNrU2xvdCgpLT5pc1NwaWxsKCkpIgor
ICAgICAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJPUEdFTl9SRVRVUk4oZmFsc2UpOyIK
KyAgICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgICAgICAgICBvdXRwLnB1dHMgImlmICghQXJnOjppc1ZhbGlkQWRkckZvcm0oYXJnc1sje2lu
ZGV4fV0ub2Zmc2V0KCkpKSIKICAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRzICJPUEdFTl9S
RVRVUk4oZmFsc2UpOyIKICAgICAgICAgICAgICAgICB3aGVuICJJbmRleCIKQEAgLTgzOSw5ICs4
NTYsMTEgQEAgd3JpdGVIKCJPcGNvZGVHZW5lcmF0ZWQiKSB7CiAgICAgICAgICAgICAgICAgbnVt
Tm8gPSAwCiAgICAgICAgICAgICAgICAgb3Bjb2RlLm92ZXJsb2Fkcy5lYWNoIHsKICAgICAgICAg
ICAgICAgICAgICAgfCBvdmVybG9hZCB8CisgICAgICAgICAgICAgICAgICAgIHVzZUFkZHIgPSAo
b3ZlcmxvYWQuc2lnbmF0dXJlW2FyZ0luZGV4XSBhbmQKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBvdmVybG9hZC5zaWduYXR1cmVbYXJnSW5kZXhdLnJvbGUgPT0gIlVBIikKICAgICAg
ICAgICAgICAgICAgICAgb3ZlcmxvYWQuZm9ybXMuZWFjaCB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICB8IGZvcm0gfAotICAgICAgICAgICAgICAgICAgICAgICAgaWYgZm9ybS5raW5kc1thcmdJ
bmRleF0gPT0gIkFkZHIiCisgICAgICAgICAgICAgICAgICAgICAgICBpZiBmb3JtLmtpbmRzW2Fy
Z0luZGV4XSA9PSAiQWRkciIgYW5kIG5vdCB1c2VBZGRyCiAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgbnVtWWVzICs9IDEKICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBudW1ObyArPSAxCkBAIC04NjQsMTIgKzg4MywxNSBAQCB3cml0
ZUgoIk9wY29kZUdlbmVyYXRlZCIpIHsKICAgICAgICAgICAgICAgICAgICAgb3Bjb2RlLm92ZXJs
b2Fkcy5lYWNoIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHwgb3ZlcmxvYWQgfAogCisgICAg
ICAgICAgICAgICAgICAgICAgICB1c2VBZGRyID0gKG92ZXJsb2FkLnNpZ25hdHVyZVthcmdJbmRl
eF0gYW5kCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJsb2FkLnNpZ25h
dHVyZVthcmdJbmRleF0ucm9sZSA9PSAiVUEiKQorICAgICAgICAgICAgICAgICAgICAgICAgCiAg
ICAgICAgICAgICAgICAgICAgICAgICAjIEFnYWluLCBjaGVjayBpZiBhbGwgb2YgdGhlbSBkbyB3
aGF0IHdlIHdhbnQuCiAgICAgICAgICAgICAgICAgICAgICAgICBudW1ZZXMgPSAwCiAgICAgICAg
ICAgICAgICAgICAgICAgICBudW1ObyA9IDAKICAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJs
b2FkLmZvcm1zLmVhY2ggewogICAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgZm9ybSB8Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgZm9ybS5raW5kc1thcmdJbmRleF0gPT0gIkFk
ZHIiCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgZm9ybS5raW5kc1thcmdJbmRleF0g
PT0gIkFkZHIiIGFuZCBub3QgdXNlQWRkcgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBudW1ZZXMgKz0gMQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgbnVtTm8gKz0gMQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci90ZXN0YWlyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvYWlyL3Rlc3RhaXIuY3BwCShyZXZpc2lvbiAxOTYwMTEpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYjMvYWlyL3Rlc3RhaXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MDgsNyAr
NDA4LDcgQEAgdm9pZCB0ZXN0U2h1ZmZsZUJyb2FkY2FzdEFsbFJlZ3MoKQogICAgICAgICAgICAg
c2h1ZmZsZS5hcHBlbmQoVG1wKEdQUkluZm86OnJlZ1QwKSwgVG1wKHJlZyksIEFyZzo6d2lkdGhB
cmcoQXJnOjpXaWR0aDMyKSk7CiAgICAgfQogCi0gICAgU3RhY2tTbG90KiBzbG90ID0gY29kZS5h
ZGRTdGFja1Nsb3Qoc2l6ZW9mKGludDMyX3QpICogcmVncy5zaXplKCksIEIzOjpTdGFja1Nsb3RL
aW5kOjpMb2NrZWQpOworICAgIFN0YWNrU2xvdCogc2xvdCA9IGNvZGUuYWRkU3RhY2tTbG90KHNp
emVvZihpbnQzMl90KSAqIHJlZ3Muc2l6ZSgpLCBTdGFja1Nsb3RLaW5kOjpMb2NrZWQpOwogICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCByZWdzLnNpemUoKTsgKytpKQogICAgICAgICByb290
LT5hcHBlbmQoTW92ZTMyLCBudWxscHRyLCBUbXAocmVnc1tpXSksIEFyZzo6c3RhY2soc2xvdCwg
aSAqIHNpemVvZihpbnQzMl90KSkpOwogCkBAIC04NjksNyArODY5LDcgQEAgdm9pZCB0ZXN0U2h1
ZmZsZVNoaWZ0QWxsUmVncygpCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IHJlZ3Muc2l6
ZSgpOyArK2kpCiAgICAgICAgIHNodWZmbGUuYXBwZW5kKFRtcChyZWdzW2kgLSAxXSksIFRtcChy
ZWdzW2ldKSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpKTsKIAotICAgIFN0YWNrU2xvdCog
c2xvdCA9IGNvZGUuYWRkU3RhY2tTbG90KHNpemVvZihpbnQzMl90KSAqIHJlZ3Muc2l6ZSgpLCBC
Mzo6U3RhY2tTbG90S2luZDo6TG9ja2VkKTsKKyAgICBTdGFja1Nsb3QqIHNsb3QgPSBjb2RlLmFk
ZFN0YWNrU2xvdChzaXplb2YoaW50MzJfdCkgKiByZWdzLnNpemUoKSwgU3RhY2tTbG90S2luZDo6
TG9ja2VkKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVncy5zaXplKCk7ICsraSkK
ICAgICAgICAgcm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKHJlZ3NbaV0pLCBBcmc6
OnN0YWNrKHNsb3QsIGkgKiBzaXplb2YoaW50MzJfdCkpKTsKIApAQCAtOTA2LDcgKzkwNiw3IEBA
IHZvaWQgdGVzdFNodWZmbGVSb3RhdGVBbGxSZWdzKCkKICAgICAgICAgc2h1ZmZsZS5hcHBlbmQo
VG1wKHJlZ3NbaSAtIDFdKSwgVG1wKHJlZ3NbaV0pLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgz
MikpOwogICAgIHNodWZmbGUuYXBwZW5kKFRtcChyZWdzLmxhc3QoKSksIFRtcChyZWdzWzBdKSwg
QXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpKTsKIAotICAgIFN0YWNrU2xvdCogc2xvdCA9IGNv
ZGUuYWRkU3RhY2tTbG90KHNpemVvZihpbnQzMl90KSAqIHJlZ3Muc2l6ZSgpLCBCMzo6U3RhY2tT
bG90S2luZDo6TG9ja2VkKTsKKyAgICBTdGFja1Nsb3QqIHNsb3QgPSBjb2RlLmFkZFN0YWNrU2xv
dChzaXplb2YoaW50MzJfdCkgKiByZWdzLnNpemUoKSwgU3RhY2tTbG90S2luZDo6TG9ja2VkKTsK
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgcmVncy5zaXplKCk7ICsraSkKICAgICAgICAg
cm9vdC0+YXBwZW5kKE1vdmUzMiwgbnVsbHB0ciwgVG1wKHJlZ3NbaV0pLCBBcmc6OnN0YWNrKHNs
b3QsIGkgKiBzaXplb2YoaW50MzJfdCkpKTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExCM091dHB1dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExCM091dHB1dC5jcHAJKHJldmlzaW9uIDE5NjAxMSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMQjNPdXRwdXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MSw4ICs4MSw3
IEBAIHZvaWQgT3V0cHV0OjphcHBlbmRUbyhMQmFzaWNCbG9jayBibG9jaykKIAogU2xvdEJhc2VW
YWx1ZSogT3V0cHV0Ojpsb2NrZWRTdGFja1Nsb3Qoc2l6ZV90IGJ5dGVzKQogewotICAgIHJldHVy
biBtX2Jsb2NrLT5hcHBlbmROZXc8U2xvdEJhc2VWYWx1ZT4oCi0gICAgICAgIG1fcHJvYywgb3Jp
Z2luKCksIG1fcHJvYy5hZGRTdGFja1Nsb3QoYnl0ZXMsIFN0YWNrU2xvdEtpbmQ6OkxvY2tlZCkp
OworICAgIHJldHVybiBtX2Jsb2NrLT5hcHBlbmROZXc8U2xvdEJhc2VWYWx1ZT4obV9wcm9jLCBv
cmlnaW4oKSwgbV9wcm9jLmFkZFN0YWNrU2xvdChieXRlcykpOwogfQogCiBMVmFsdWUgT3V0cHV0
OjpuZWcoTFZhbHVlIHZhbHVlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExM
b3dlckRGR1RvTExWTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHJldmlzaW9uIDE5NjAxMSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
OTYxLDggKzU5NjEsOCBAQCBwcml2YXRlOgogCiAgICAgICAgIC8vIFNldCBzb21lIG9idmlvdXMg
dGhpbmdzLgogICAgICAgICBwYXRjaHBvaW50LT5lZmZlY3RzLnRlcm1pbmFsID0gZmFsc2U7Ci0g
ICAgICAgIHBhdGNocG9pbnQtPmVmZmVjdHMud3JpdGVzU1NBU3RhdGUgPSBmYWxzZTsKLSAgICAg
ICAgcGF0Y2hwb2ludC0+ZWZmZWN0cy5yZWFkc1NTQVN0YXRlID0gZmFsc2U7CisgICAgICAgIHBh
dGNocG9pbnQtPmVmZmVjdHMud3JpdGVzTG9jYWxTdGF0ZSA9IGZhbHNlOworICAgICAgICBwYXRj
aHBvaW50LT5lZmZlY3RzLnJlYWRzTG9jYWxTdGF0ZSA9IGZhbHNlOwogICAgICAgICAKICAgICAg
ICAgLy8gVGhpcyBpcyBob3cgd2UgdGVsbCBCMyBhYm91dCB0aGUgcG9zc2liaWxpdHkgb2YganVt
cCByZXBsYWNlbWVudC4KICAgICAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cy5leGl0c1NpZGV3YXlz
ID0gdHJ1ZTsKSW5kZXg6IFdlYnNpdGVzL3dlYmtpdC5vcmcvQ2hhbmdlTG9nCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFdlYnNpdGVzL3dlYmtpdC5vcmcvQ2hhbmdlTG9nCShyZXZpc2lvbiAxOTYwMTEpCisrKyBX
ZWJzaXRlcy93ZWJraXQub3JnL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1
IEBACisyMDE2LTAyLTAxICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAg
ICAgR2V0IHJpZCBvZiBhbm9ueW1vdXMgc3RhY2sgc2xvdHMKKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1MTEyOAorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXMgY2hhbmdlcyB0aGUgZG9jdW1lbnRhdGlv
biB0byBhY2NvdW50IGZvciB0aGUgYWRkaXRpb24gb2YgVmFyaWFibGVzIGFuZCB0aGUgR2V0IGFu
ZCBTZXQKKyAgICAgICAgb3Bjb2RlcywgYW5kIHRoZSByZW1vdmFsIG9mIGFub255bW91cyBzdGFj
ayBzbG90cyBmcm9tIEIzIElSLgorCisgICAgICAgICogZG9jcy9iMy9pbnRlcm1lZGlhdGUtcmVw
cmVzZW50YXRpb24uaHRtbDoKKwogMjAxNi0wMi0wMiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBw
bGUuY29tPgogCiAgICAgICAgIE1pbm9yIGZpeGVzIGZvciBCMyBJUiBkb2N1bWVudGF0aW9uCklu
ZGV4OiBXZWJzaXRlcy93ZWJraXQub3JnL2RvY3MvYjMvaW50ZXJtZWRpYXRlLXJlcHJlc2VudGF0
aW9uLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gV2Vic2l0ZXMvd2Via2l0Lm9yZy9kb2NzL2IzL2ludGVy
bWVkaWF0ZS1yZXByZXNlbnRhdGlvbi5odG1sCShyZXZpc2lvbiAxOTYwMTEpCisrKyBXZWJzaXRl
cy93ZWJraXQub3JnL2RvY3MvYjMvaW50ZXJtZWRpYXRlLXJlcHJlc2VudGF0aW9uLmh0bWwJKHdv
cmtpbmcgY29weSkKQEAgLTg1LDcgKzg1LDcgQEAKICAgICAgIGZvciB0aGUgbG9hZC4gIFdlIHVz
ZSB0aGUgTWVtb3J5VmFsdWUgY2xhc3MgZm9yIG1lbW9yeS1hY2Nlc3NpbmcgdmFsdWVzLCB3aGlj
aCBhbGwgaGF2ZQogICAgICAgc3VjaCBhbiBvZmZzZXQuPC9wPgogCi0gICAgPGgyPlN0YWNrIFNs
b3Q8L2gyPgorICAgIDxoMj5TdGFjayBTbG90czwvaDI+CiAKICAgICA8cD5CMyBleHBvc2VzIHRo
ZSBjb25jZXB0IG9mIHN0YWNrLWFsbG9jYXRlZCBkYXRhIGFuZCBnaXZlcyB0aGUgY2xpZW50IGEg
bG90IG9mIGNvbnRyb2wuCiAgICAgICBCeSBkZWZhdWx0LCBzdGFjayBzbG90cyBnZXQgYWxsb2Nh
dGVkIHdoZXJldmVyIEIzIGNob29zZXMuIEl0IHdpbGwgdHJ5IHRvIHBhY2sgdGhlbSBhcwpAQCAt
OTksMjQgKzk5LDIzIEBACiAgICAgICBmb3IgY2FsbGVlLXNhdmVzLiAgVGhlcmVmb3JlLCB3ZSBy
ZWNvbW1lbmQgbm90IHVzaW5nIHRoZSBmcmFtZSBwb2ludGVyIG9mZnNldCBmb3JjaW5nCiAgICAg
ICBmZWF0dXJlIHVubGVzcyB5b3Uga25vdyBhIGxvdCBhYm91dCB0aGUgQUJJIGFuZCB5b3UgaGF2
ZSBubyBvdGhlciBjaG9pY2UuPC9wPgogCi0gICAgPHA+U3RhY2sgc2xvdHMgYXJlIGFsc28gdXNl
ZCBmb3IgY3JlYXRpbmcgbm9uLVNTQSB2YXJpYWJsZXMgd2l0aCB0aGUgaW50ZW50aW9uIG9mIGhh
dmluZyBCMwotICAgICAgY29udmVydCB0aGVtIGludG8gU1NBLiAgVGhlcmUgYXJlIHR3byBraW5k
cyBvZiBzdGFjayBzbG90cy48L3A+CisgICAgPGgyPlZhcmlhYmxlczwvaDI+CiAKLSAgICA8ZGw+
Ci0gICAgICA8ZHQ+QW5vbnltb3VzPC9kdD4KLSAgICAgIDxkZD5Bbm9ueW1vdXMgc3RhY2sgc2xv
dHMgYXJlIHVzZWQgdG8gcmVwcmVzZW50IGxvY2FsIHZhcmlhYmxlcyB0aGF0IGFyZW4ndCBpbiBT
U0EgZm9ybS4KLSAgICAgICAgQjMgaXMgYWxsb3dlZCB0byBhc3N1bWUgdGhhdCBub2JvZHkgd2ls
bCBzdG9yZSB0byBhbiBhbm9ueW1vdXMgc3RhY2sgc2xvdCBleGNlcHQgdGhyb3VnaAotICAgICAg
ICBTdG9yZSBpbnN0cnVjdGlvbnMgaW4gdGhlIEIzIHByb2NlZHVyZS4gIEIzIGlzIGFsbG93ZWQg
dG8gYXNzdW1lIHRoYXQgYSBTdG9yZSB0aGF0IGRvZXMKLSAgICAgICAgbm90IHdyaXRlIHRvIHRo
ZSBlbnRpcmUgYW5vbnltb3VzIHN0YWNrIHNsb3QgbGVhdmVzIHRoZSB1bndyaXR0ZW4gcGFydCBp
biBhbiB1bmRlZmluZWQKLSAgICAgICAgc3RhdGUuICBVc3VhbGx5LCBhbm9ueW1vdXMgc3RhY2sg
c2xvdHMgYXJlIGFsbG9jYXRlZCB0byBoYXZlIHRoZSBzYW1lIHNpemUgYXMgdGhlIHR5cGUKLSAg
ICAgICAgb2YgdmFyaWFibGUgdGhleSBhcmUgYmVpbmcgdXNlZCB0byByZXByZXNlbnQuPC9kZD4K
LQotICAgICAgPGR0PkxvY2tlZDwvZHQ+Ci0gICAgICA8ZGQ+VGhlc2Ugc3RhY2sgc2xvdHMgYXJl
IGFzc3VtZWQgdG8gb3BlcmF0ZSAiYXMgaWYiIHRoZXkgd2VyZSBpbiB0aGUgaGVhcCwgaW4gdGhl
IHNlbnNlCi0gICAgICAgIHRoYXQgdGhlIG1heSBnZXQgcmVhZCBvciB3cml0dGVuIHVzaW5nIG9w
ZXJhdGlvbnMgbm90IHZpc2libGUgaW4gQjMgSVIuPC9kZD4KLSAgICA8L2RsPgorICAgIDxwPlNv
bWV0aW1lcywgU1NBIGlzIGluY29udmVuaWVudC4gRm9yIGV4YW1wbGUsIGl0J3MgaGFyZCB0byBk
byBwYXRoIHNwZWNpYWxpemF0aW9uIG92ZXIgU1NBLgorICAgICAgQjMgaGFzIHRoZSBjb25jZXB0
IG9mIFZhcmlhYmxlcyBhcyBhIGZhbGwtYmFjay4gVGhlIGJhY2tlbmQga25vd3MgaG93IHRvIGhh
bmRsZSB0aGVtIGFuZAorICAgICAgd2lsbCBjb2FsZXNjZSBhbmQgY29weS1wcm9wYWdhdGUgdGhl
bS4gSW5zaWRlIHRoZSBCMyBvcHRpbWl6ZXIsIHRoZXJlIGlzIGEgY2xhc3NpYyBTU0EKKyAgICAg
IGJ1aWxkZXIgdGhhdCBlbGltaW5hdGVzIHZhcmlhYmxlcyBhbmQgYnVpbGRzIFNTQSBpbiB0aGVp
ciBwbGFjZS48L3A+CisKKyAgICA8cD5Zb3UgY2FuIGNyZWF0ZSBWYXJpYWJsZXMgYnkgdXNpbmcg
UHJvY2VkdXJlOjphZGRWYXJpYWJsZSgpLCBhbmQgdGhlbiB5b3UgY2FuIGFjY2VzcyB0aGVtCisg
ICAgICB1c2luZyB0aGUgR2V0IGFuZCBTZXQgb3Bjb2Rlcy48L3A+CisKKyAgICA8cD5UaGUgZml4
U1NBKCkgcGhhc2Ugd2lsbCBjb252ZXJ0IHZhcmlhYmxlcyB0byBTU0EuIElmIHlvdSB1c2UgYSBs
b3Qgb2YgdmFyaWFibGVzIGluIHlvdXIKKyAgICAgIGlucHV0IHRvIEIzLCBpdCdzIGEgZ29vZCBp
ZGVhIHRvIHJ1biBmaXhTU0EoKSBtYW51YWxseSBiZWZvcmUgcnVubmluZyB0aGUgY29tcGlsZXIu
IFRoZQorICAgICAgZGVmYXVsdCBvcHRpbWl6ZXIgb25seSBydW5zIGZpeFNTQSgpIHRvd2FyZHMg
dGhlIG1pZGRsZSBvZiBvcHRpbWl6YXRpb25zLiBQYXNzaW5nIG5vbi1TU0EgY29kZQorICAgICAg
YXMgaW5wdXQgdG8gdGhlIG9wdGltaXplciBtYXkgcmVuZGVyIHRoZSBlYXJseSBwaGFzZXMgaW5l
ZmZlY3RpdmUuIEZvcnR1bmF0ZWx5LCBCMyBwaGFzZXMKKyAgICAgIGFyZSBzdXBlciBlYXN5IHRv
IHJ1bi4gVGhlIGZvbGxvd2luZyBydW5zIFNTQSBmaXgtdXAgb24gYSBQcm9jZWR1cmUgbmFtZWQg
InByb2MiOjwvcD4KIAotICAgIDxwPlRoZSBmaXhTU0EoKSBwaGFzZSB3aWxsIGNvbnZlcnQgYW5v
bnltb3VzIHN0YWNrIHNsb3RzIHRvIFNTQS48L3A+CisgICAgPHByZT48Y29kZT5maXhTU0EocHJv
Yyk7PC9jb2RlPjwvcHJlPgogCiAgICAgPGgyPkNvbnRyb2wgZmxvdzwvaDI+CiAKQEAgLTE3Niw2
ICsxNzUsMTMgQEAKICAgICAgIDxkdD5Eb3VibGUgQ29uc3REb3VibGUoY29uc3RhbnQpPC9kdD4K
ICAgICAgIDxkZD5Eb3VibGUgY29uc3RhbnQuICBNdXN0IHVzZSB0aGUgQ29uc3REb3VibGVWYWx1
ZSBjbGFzcywgd2hpY2ggaGFzIHNwYWNlIGZvciB0aGUgZG91YmxlIGNvbnN0YW50LjwvZGQ+CiAK
KyAgICAgIDxkdD5Wb2lkIFNldCh2YWx1ZSwgdmFyaWFibGUpPC9kdD4KKyAgICAgIDxkZD5Bc3Np
Z25zIHRoZSBnaXZlbiB2YWx1ZSB0byB0aGUgZ2l2ZW4gVmFyaWFibGUuIE11c3QgdXNlIHRoZSBW
YXJpYWJsZVZhbHVlIGNsYXNzLjwvZGQ+CisKKyAgICAgIDxkdD5UIEdldCh2YXJpYWJsZSk8L2R0
PgorICAgICAgPGRkPlJldHVybnMgdGhlIGN1cnJlbnQgdmFsdWUgb2YgdGhlIGdpdmVuIFZhcmlh
YmxlLiBJdHMgcmV0dXJuIHR5cGUgZGVwZW5kcyBvbiB0aGUKKyAgICAgICAgdmFyaWFibGUuIE11
c3QgdXNlIHRoZSBWYXJpYWJsZVZhbHVlIGNsYXNzLjwvZGQ+CisKICAgICAgIDxkdD5JbnRQdHIg
U2xvdEJhc2Uoc3RhY2tTbG90KTwvZHQ+CiAgICAgICA8ZGQ+UmV0dXJucyBhIHBvaW50ZXIgdG8g
dGhlIGJhc2Ugb2YgdGhlIGdpdmVuIHN0YWNrIHNsb3QuICBNdXN0IHVzZSB0aGUgU2xvdEJhc2VW
YWx1ZQogICAgICAgICBjbGFzcy48L2RkPgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>270495</attachid>
            <date>2016-02-02 10:18:18 -0800</date>
            <delta_ts>2016-02-02 13:09:15 -0800</delta_ts>
            <desc>more fixes</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>161425</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTk2MDExKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMwOSBA
QAorMjAxNi0wMi0wMSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEdldCByaWQgb2YgYW5vbnltb3VzIHN0YWNrIHNsb3RzCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNTExMjgKKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXaGVuIEkgZmlyc3QgZGVzaWduZWQgc3RhY2sgc2xv
dHMsIHRoZSBpZGVhIHdhcyB0aGF0IGFuICJhbm9ueW1vdXMiIHN0YWNrIHNsb3Qgd2FzIG9uZSB0
aGF0CisgICAgICAgIGJlaGF2ZWQgZXhhY3RseSBsaWtlIGEgQyB2YXJpYWJsZTogaWYgaXQgbmV2
ZXIgZXNjYXBlZCwgaXQgd291bGQgbm90IG5lZWQgdG8gZ2V0IHN0YWNrIHNwYWNlCisgICAgICAg
IGZvciB0aGUgZW50aXJlIGxpZmV0aW1lIG9mIHRoZSBmdW5jdGlvbiAtIGl0IGNvdWxkIGdldCBh
bnkgc2xhYiBvZiBzdGFjayBzbyBsb25nIGFzIGl0CisgICAgICAgIGRpZG4ndCBpbnRlcmZlcmUg
d2l0aCBvdGhlciBzdGFjayBzbG90cyB0aGF0IHdvdWxkIGJlIGxpdmUgYXQgdGhlIHNhbWUgdGlt
ZS4gVGhlIHJlYXNvbiBJCisgICAgICAgIGNhbGxlZCB0aGVtICJhbm9ueW1vdXMiIGlzIHRoYXQg
ZXh0ZXJuYWwgY29kZSBjb3VsZCBub3QgZ2V0IGl0cyBhZGRyZXNzLiBUaGlzIGZlbHQgbGlrZSBp
dAorICAgICAgICBnYXZlIHRoZSBzdGFjayBzbG90IGFub255bWl0eS4gQnV0IGl0IHdhcyBuZXZl
ciBhIGdvb2QgbmFtZSBmb3IgdGhpcyBjb25jZXB0LgorCisgICAgICAgIFRoZW4gSSBoYWQgdGhl
IHJlZ2lzdGVyIGFsbG9jYXRvciBsb3dlciB0ZW1wb3JhcmllcyB0byBhbm9ueW1vdXMgc3RhY2sg
c2xvdHMgd2hlbiBpdCBzcGlsbGVkCisgICAgICAgIHRoZW0uIFNwaWxsaW5nIGJlY2FtZSB0aGUg
c29sZSBjbGllbnQgb2YgYW5vbnltb3VzIHN0YWNrIHNsb3RzLgorCisgICAgICAgIFRoZW4gSSBy
ZWFsaXplZCB0aGF0IHRoZXJlIHdhcyBhbiBhc3BlY3Qgb2YgaG93IHNwaWxsIHNsb3RzIHdvcmsg
dGhhdCBtYWtlIHRoZW0gd2FudAorICAgICAgICBzbGlnaHRseSBkaWZmZXJlbnQgc2VtYW50aWNz
IHRoYW4gYSBub3JtYWwgQyB2YXJpYWJsZS4gQSBDIHZhcmlhYmxlIGlzIGEgcHJvcGVyIG1lbW9y
eQorICAgICAgICBsb2NhdGlvbiAtIHlvdSBjb3VsZCBkbyBhIHN0b3JlIHRvIG9ubHkgc29tZSBi
eXRlcyBpbiB0aGUgdmFyaWFibGUsIGFuZCBpdCdzIHJlYXNvbmFibGUgdG8KKyAgICAgICAgZXhw
ZWN0IHRoYXQgdGhpcyB3aWxsIG5vdCBkZXN0cm95IHRoZSBvdGhlciBieXRlcyBpbiB0aGUgdmFy
aWFibGUuIEJ1dCB0aGF0IG1lYW5zIHRoYXQgdG8KKyAgICAgICAgY29tcHV0ZSB0aGVpciBsaXZl
bmVzcywgeW91IGhhdmUgdG8gZG8gc29tZXRoaW5nIGxpa2UgYSBwZXItYnl0ZSBsaXZlbmVzcy4g
VGhhdCdzIG92ZXJraWxsCisgICAgICAgIGZvciBzcGlsbCBzbG90cy4gWW91IHdhbnQgYW55IHN0
b3JlIHRvIHRoZSBzcGlsbCBzbG90IHRvIGtpbGwgdGhlIHdob2xlIHNsb3QgZXZlbiBpZiBpdAor
ICAgICAgICB3cml0ZXMgdG8ganVzdCBwYXJ0IG9mIHRoZSBzbG90LiBUaGlzIG1hdGNoZXMgaG93
IHRlbXBvcmFyaWVzIHdvcmsuIFNvIHJhdGhlciB0aGFuIGltcGxlbWVudAorICAgICAgICBwZXIt
Ynl0ZSBsaXZlbmVzcywgSSBkZWNpZGVkIHRvIGNoYW5nZSB0aGUgc2VtYW50aWNzIG9mIGFub255
bW91cyBzdGFjayBzbG90cyB0byBtYWtlIHRoZW0KKyAgICAgICAgd29yayBsaWtlIGhvdyBJIHdh
bnRlZCBzcGlsbCBzbG90cyB0byB3b3JrLiBUaGlzIHdhcyBxdWl0ZSBkaXJ0eSwgYW5kIHB1dCBC
MyBpbiB0aGUgYXdrd2FyZAorICAgICAgICBzaXR1YXRpb24gdGhhdCBCMydzIGFub255bW91cyBz
dGFjayBzbG90cyBiZWhhdmVkIGxpa2Ugc3BpbGwgc2xvdHMuIEJ1dCBpdCB3YXMgT0sgc2luY2UK
KyAgICAgICAgbm9ib2R5IHVzZWQgYW5vbnltb3VzIHN0YWNrIHNsb3RzIGluIEIzLgorCisgICAg
ICAgIFRoZW4gSSBhZGRlZCB0YWlsIGR1cGxpY2F0aW9uLCB3aGljaCByZXF1aXJlZCBoYXZpbmcg
YSBtZWNoYW5pc20gZm9yIGludHJvZHVjaW5nIG5vbi1TU0EKKyAgICAgICAgdmFyaWFibGVzIGlu
IEIzLiBJIGRlY2lkZWQgdG8gdXNlIGFub255bW91cyBzdGFjayBzbG90cyBmb3IgdGhpcyBwdXJw
b3NlLiBBbGwgb2YgYSBzdWRkZW4KKyAgICAgICAgdGhpcyBhbGwgZmVsdCBsaWtlIGl0IG1hZGUg
c2Vuc2U6IGFub255bW91cyBzdGFjayBzbG90cyB3ZXJlIGp1c3QgbGlrZSB2YXJpYWJsZXMhIEhv
b3JheSBmb3IKKyAgICAgICAgdGhlIGFtYXppbmcgZm9yZXNpZ2h0IG9mIGFub255bW91cyBzdGFj
ayBzbG90cyEKKworICAgICAgICBCdXQgdGhlbiBJIHJlYWxpemVkIHRoYXQgdGhpcyB3YXMgYWxs
IHZlcnkgYmFkLiBXZSB3YW50IEIzIHRvIGJlIGFibGUgdG8gb3B0aW1pemUgU3RvcmUgYW5kCisg
ICAgICAgIExvYWQgb3BlcmF0aW9ucyBieSByZWFzb25pbmcgYWJvdXQgaG93IHRoZXkgYWZmZWN0
IGJ5dGVzIGluIG1lbW9yeS4gRm9yIGV4YW1wbGUsIGlmIHlvdSBkbworICAgICAgICBhIExvYWQg
b2YgYSA2NC1iaXQgdmFsdWUsIGFuZCB0aGVuIHlvdSBtb2RpZnkganVzdCB0aGUgbG93IDMyIGJp
dHMgb2YgdGhhdCB2YWx1ZSwgYW5kIHRoZW4KKyAgICAgICAgeW91IGRvIGEgNjQtYml0IHN0b3Jl
IGJhY2sgdG8gdGhlIHNhbWUgbG9jYXRpb24sIHRoZW4gaXQgd291bGQgYmUgYmV0dGVyIHRvIHRy
YW5zZm9ybSB0aGlzCisgICAgICAgIGludG8gMzItYml0IG9wZXJhdGlvbnMuIFdlIGRvbid0IGRv
IHRoaXMgb3B0aW1pemF0aW9uIHlldCwgYnV0IGl0J3MgdGhlIGtpbmQgb2YgdGhpbmcgdGhhdAor
ICAgICAgICB3ZSB3YW50IEIzIHRvIGJlIGFibGUgdG8gZG8uIFRvIGRvIGl0LCB3ZSBuZWVkIFN0
b3JlIHRvIG1lYW4gdGhhdCBpdCBvbmx5IGFmZmVjdHMgTiBieXRlcworICAgICAgICBzdGFydGlu
ZyBhdCB0aGUgcG9pbnRlciwgd2hlcmUgTiBpcyB0aGUgc2l6ZSBvZiB0aGUgdGhpbmcgYmVpbmcg
c3RvcmVkLiBCdXQgdGhhdCdzIG5vdCB3aGF0CisgICAgICAgIFN0b3JlIG1lYW5zIGZvciBhbm9u
eW1vdXMgc3RhY2sgc2xvdHMuIEZvciBhbm9ueW1vdXMgc2xvdHMsIHN0b3JpbmcgdG8gYW55IGJ5
dGUgaW4gdGhlIHNsb3QKKyAgICAgICAgY2xvYmJlcnMgYWxsIGJ5dGVzIGluIHRoZSBzbG90LiBX
ZSB3ZXJlIG5ldmVyIGNsZWFyIGlmIHlvdSBuZWVkIHRvIHN0b3JlIGRpcmVjdGx5IHRvIGFuCisg
ICAgICAgIGFub255bW91cyBzbG90IHRvIGdldCB0aGlzIGJlaGF2aW9yLCBvciBpZiBhbnkgcG9p
bnRlciB0aGF0IHBvaW50cyB0byBhbiBhbm95bW91cyBzbG90IG11c3QKKyAgICAgICAgZXhoaWJp
dCB0aGlzIGJlaGF2aW9yIHdoZW4gc3RvcmVkIHRvLiBOZWl0aGVyIGtpbmRzIG9mIHNlbWFudGlj
cyBtYWtlIHNlbnNlIHRvIG1lLgorCisgICAgICAgIFRoaXMgY2hhbmdlIGZpeGVzIHRoZSBwcm9i
bGVtIGJ5IGVyYWRpY2F0aW5nIGFub255bW91cyBzdGFjayBzbG90cy4gSW4gQjMsIHRoZXkgYXJl
IHJlcGxhY2VkCisgICAgICAgIHdpdGggVmFyaWFibGVzLiBJbiBBaXIsIHRoZXkgYXJlIHJlcGxh
Y2VkIHdpdGggYSBkaWZmZXJlbnQgc3RhY2sgc2xvdCBraW5kLCBjYWxsZWQgU3BpbGwuCisgICAg
ICAgIFRoZXJlIGlzIG5vIHN1Y2ggdGhpbmcgYXMgc3RhY2sgc2xvdCBraW5kcyBpbiBCMyBhbnlt
b3JlLCBhbGwgQjMgc3RhY2sgc2xvdHMgYXJlIGxvY2tlZC4gSW4KKyAgICAgICAgQWlyLCB0aGVy
ZSBpcyBzdGlsbCB0aGUgY29uY2VwdCBvZiBzdGFjayBzbG90IGtpbmQgLSBMb2NrZWQgb3IgU3Bp
bGwuCisKKyAgICAgICAgQjMgVmFyaWFibGVzIGFyZSBhd2Vzb21lLiBUaGV5IGFyZSBleGFjdGx5
IHdoYXQgdGhleSBzZWVtIHRvIGJlLiBUaGV5IGhhdmUgYSB0eXBlLiBUaGV5IGFyZQorICAgICAg
ICBkZWNsYXJlZCBhdCB0aGUgdG9wIGxldmVsIGluIHRoZSBQcm9jZWR1cmUuIFlvdSBjYW4gYWNj
ZXNzIHRoZW0gd2l0aCBuZXcgb3Bjb2RlcywgR2V0IGFuZAorICAgICAgICBTZXQuIFRoaXMgZ3Jl
YXRseSBzaW1wbGlmaWVzIGRlbW90aW5nIFNTQSB2YWx1ZXMgdG8gdmFyaWFibGVzIGFuZCBwcm9t
b3RpbmcgdGhlbSBiYWNrIHRvCisgICAgICAgIFNTQS4gSSBldmVuIG1hZGUgdGhlIGluc3RydWN0
aW9uIHNlbGVjdG9yIGRvIHRoZSByaWdodCB0aGluZ3MgZm9yIHZhcmlhYmxlcywgd2hpY2ggbWVh
bnMKKyAgICAgICAgdGhhdCBpbnRyb2R1Y2luZyB2YXJpYWJsZXMgd29uJ3QgaHVydCBpbnN0cnVj
dGlvbiBzZWxlY3Rpb24gKHRoZXJlIHdpbGwgYmUgZXh0cmEgbW92ZXMsIGJ1dAorICAgICAgICBJ
UkMgd2lsbCBraWxsIHRoZW0pLiBJdCdzIGdyZWF0IHRvIGhhdmUgbm9uLVNTQSB2YXJpYWJsZXMg
YXMgYW4gZXhwbGljaXQgY29uY2VwdCBpbiBJUgorICAgICAgICBiZWNhdXNlIGl0IG1lYW5zIHRo
YXQgeW91IGRvbid0IGhhdmUgdG8gZG8gYW55IG1hZ2ljIHRvIHVzZSB0aGVtIC0gdGhleSBKdXN0
IFdvcmsuCisKKyAgICAgICAgQWlyIHNwaWxsIHNsb3RzIGJlaGF2ZSBhbG1vc3QgbGlrZSBhbm9u
eW1vdXMgc3RhY2sgc2xvdHMsIHdpdGggb25lIGV4Y2VwdGlvbjogeW91IGNhbm5vdAorICAgICAg
ICBlc2NhcGUgdGhlbS4gV2UgdmFsaWRhdGUgdGhpcyBieSBtYWtpbmcgaXQgaWxsZWdhbCB0byBV
c2VBZGRyIG9uIGEgc3BpbGwgc2xvdC4gVGhpcyByZW1vdmVzCisgICAgICAgIHRoZSBuZWVkIHRv
IGFuc3dlciBhd2t3YXJkIHF1ZXN0aW9ucyBsaWtlOiBkb2VzIGEgMzItYml0IERlZiBvbiBhIHBv
aW50ZXIgdGhhdCBtYXkgcG9pbnQgdG8KKyAgICAgICAgYSA2NC1iaXQgc3BpbGwgc2xvdCBkbyBh
bnl0aGluZyB0byB0aGUgMzIgYml0cyBhYm92ZSB0aGUgcG9pbnRlcj8gIERvZXMgaXQgd3JpdGUg
emVybyB0byBpdD8KKyAgICAgICAgRG9lcyBpdCB3cml0ZSB6ZXJvIHRvIGl0IGp1c3Qgd2hlbiB0
aGUgcG9pbnRlciBhY3R1YWxseSBwb2ludHMgdG8gYSBzcGlsbCBzbG90IG9yIGFsd2F5cz8KKyAg
ICAgICAgVGhlc2UgYXJlIHNpbGx5IHF1ZXN0aW9ucywgYW5kIHdlIGRvbid0IGhhdmUgdG8gYW5z
d2VyIHRoZW0gYmVjYXVzZSB0aGUgb25seSB3YXkgdG8gcmVmZXIgdG8KKyAgICAgICAgYSBzcGls
bCBzbG90IGlzIGRpcmVjdGx5LiBObyBlc2NhcGluZyBtZWFucyBubyBhbGlhc2luZy4KKworICAg
ICAgICBUaGlzIGRvZXNuJ3QgYWZmZWN0IHBlcmZvcm1hbmNlLiBJdCBqdXN0IG1ha2VzIHRoZSBj
b21waWxlciBtb3JlIGZ1biB0byB3b3JrIHdpdGggYnkKKyAgICAgICAgcmVtb3Zpbmcgc29tZSBj
b2duaXRpdmUgZGlzc29uYW5jZS4KKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAgICAg
ICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICog
YjMvQjNBcmd1bWVudFJlZ1ZhbHVlLmg6CisgICAgICAgICogYjMvQjNDQ2FsbFZhbHVlLmg6Cisg
ICAgICAgICogYjMvQjNDaGVja1ZhbHVlLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OkNoZWNrVmFs
dWU6OmNsb25lSW1wbCk6CisgICAgICAgIChKU0M6OkIzOjpDaGVja1ZhbHVlOjpDaGVja1ZhbHVl
KToKKyAgICAgICAgKiBiMy9CM0NoZWNrVmFsdWUuaDoKKyAgICAgICAgKiBiMy9CM0NvbnN0MzJW
YWx1ZS5oOgorICAgICAgICAqIGIzL0IzQ29uc3Q2NFZhbHVlLmg6CisgICAgICAgICogYjMvQjND
b25zdERvdWJsZVZhbHVlLmg6CisgICAgICAgICogYjMvQjNDb25zdEZsb2F0VmFsdWUuaDoKKyAg
ICAgICAgKiBiMy9CM0NvbnN0UHRyVmFsdWUuaDoKKyAgICAgICAgKEpTQzo6QjM6OkNvbnN0UHRy
VmFsdWU6OkNvbnN0UHRyVmFsdWUpOgorICAgICAgICAqIGIzL0IzQ29udHJvbFZhbHVlLmNwcDoK
KyAgICAgICAgKEpTQzo6QjM6OkNvbnRyb2xWYWx1ZTo6Y29udmVydFRvSnVtcCk6CisgICAgICAg
IChKU0M6OkIzOjpDb250cm9sVmFsdWU6OmNvbnZlcnRUb09vcHMpOgorICAgICAgICAoSlNDOjpC
Mzo6Q29udHJvbFZhbHVlOjpkdW1wTWV0YSk6CisgICAgICAgICogYjMvQjNDb250cm9sVmFsdWUu
aDoKKyAgICAgICAgKiBiMy9CM0VmZmVjdHMuY3BwOgorICAgICAgICAoSlNDOjpCMzo6RWZmZWN0
czo6aW50ZXJmZXJlcyk6CisgICAgICAgIChKU0M6OkIzOjpFZmZlY3RzOjpkdW1wKToKKyAgICAg
ICAgKiBiMy9CM0VmZmVjdHMuaDoKKyAgICAgICAgKEpTQzo6QjM6OkVmZmVjdHM6Om11c3RFeGVj
dXRlKToKKyAgICAgICAgKiBiMy9CM0VsaW1pbmF0ZUNvbW1vblN1YmV4cHJlc3Npb25zLmNwcDoK
KyAgICAgICAgKiBiMy9CM0ZpeFNTQS5jcHA6CisgICAgICAgIChKU0M6OkIzOjpkZW1vdGVWYWx1
ZXMpOgorICAgICAgICAoSlNDOjpCMzo6Zml4U1NBKToKKyAgICAgICAgKiBiMy9CM0ZpeFNTQS5o
OgorICAgICAgICAqIGIzL0IzSW5kZXhNYXAuaDoKKyAgICAgICAgKEpTQzo6QjM6OkluZGV4TWFw
OjpyZXNpemUpOgorICAgICAgICAoSlNDOjpCMzo6SW5kZXhNYXA6OmNsZWFyKToKKyAgICAgICAg
KEpTQzo6QjM6OkluZGV4TWFwOjpzaXplKToKKyAgICAgICAgKEpTQzo6QjM6OkluZGV4TWFwOjpv
cGVyYXRvcltdKToKKyAgICAgICAgKiBiMy9CM0luZGV4U2V0Lmg6CisgICAgICAgIChKU0M6OkIz
OjpJbmRleFNldDo6Y29udGFpbnMpOgorICAgICAgICAoSlNDOjpCMzo6SW5kZXhTZXQ6OnNpemUp
OgorICAgICAgICAoSlNDOjpCMzo6SW5kZXhTZXQ6OmlzRW1wdHkpOgorICAgICAgICAqIGIzL0Iz
TG93ZXJUb0Fpci5jcHA6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6OnJ1bik6
CisgICAgICAgIChKU0M6OkIzOjpBaXI6Okxvd2VyVG9BaXI6Omxvd2VyKToKKyAgICAgICAgKiBi
My9CM01lbW9yeVZhbHVlLmg6CisgICAgICAgICogYjMvQjNPcGNvZGUuY3BwOgorICAgICAgICAo
V1RGOjpwcmludEludGVybmFsKToKKyAgICAgICAgKiBiMy9CM09wY29kZS5oOgorICAgICAgICAq
IGIzL0IzUGF0Y2hwb2ludFZhbHVlLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OlBhdGNocG9pbnRW
YWx1ZTo6Y2xvbmVJbXBsKToKKyAgICAgICAgKEpTQzo6QjM6OlBhdGNocG9pbnRWYWx1ZTo6UGF0
Y2hwb2ludFZhbHVlKToKKyAgICAgICAgKiBiMy9CM1BhdGNocG9pbnRWYWx1ZS5oOgorICAgICAg
ICAqIGIzL0IzUHJvY2VkdXJlLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6UHJv
Y2VkdXJlKToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6YWRkQmxvY2spOgorICAgICAg
ICAoSlNDOjpCMzo6UHJvY2VkdXJlOjphZGRTdGFja1Nsb3QpOgorICAgICAgICAoSlNDOjpCMzo6
UHJvY2VkdXJlOjphZGRWYXJpYWJsZSk6CisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6OmNs
b25lKToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6YWRkSW50Q29uc3RhbnQpOgorICAg
ICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpkdW1wKToKKyAgICAgICAgKEpTQzo6QjM6OlByb2Nl
ZHVyZTo6ZGVsZXRlU3RhY2tTbG90KToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6ZGVs
ZXRlVmFyaWFibGUpOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpkZWxldGVWYWx1ZSk6
CisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6OmRlbGV0ZU9ycGhhbnMpOgorICAgICAgICAo
SlNDOjpCMzo6UHJvY2VkdXJlOjpjYWxsZWVTYXZlUmVnaXN0ZXJzKToKKyAgICAgICAgKEpTQzo6
QjM6OlByb2NlZHVyZTo6YWRkVmFsdWVJbXBsKToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVy
ZTo6c2V0QmxvY2tPcmRlckltcGwpOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjphZGRB
bm9ueW1vdXNTdGFja1Nsb3QpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJl
OjphZGRTdGFja1Nsb3RJbmRleCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1
cmU6OmFkZFZhbHVlSW5kZXgpOiBEZWxldGVkLgorICAgICAgICAqIGIzL0IzUHJvY2VkdXJlLmg6
CisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6OnNldEJsb2NrT3JkZXIpOgorICAgICAgICAo
SlNDOjpCMzo6UHJvY2VkdXJlOjpzdGFja1Nsb3RzKToKKyAgICAgICAgKEpTQzo6QjM6OlByb2Nl
ZHVyZTo6dmFyaWFibGVzKToKKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6dmFsdWVzKToK
KyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6U3RhY2tTbG90c0NvbGxlY3Rpb246OlN0YWNr
U2xvdHNDb2xsZWN0aW9uKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6
U3RhY2tTbG90c0NvbGxlY3Rpb246OnNpemUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCMzo6
UHJvY2VkdXJlOjpTdGFja1Nsb3RzQ29sbGVjdGlvbjo6YXQpOiBEZWxldGVkLgorICAgICAgICAo
SlNDOjpCMzo6UHJvY2VkdXJlOjpTdGFja1Nsb3RzQ29sbGVjdGlvbjo6b3BlcmF0b3JbXSk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6OlN0YWNrU2xvdHNDb2xsZWN0aW9u
OjppdGVyYXRvcjo6aXRlcmF0b3IpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCMzo6UHJvY2Vk
dXJlOjpTdGFja1Nsb3RzQ29sbGVjdGlvbjo6aXRlcmF0b3I6Om9wZXJhdG9yKik6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6OlN0YWNrU2xvdHNDb2xsZWN0aW9uOjppdGVy
YXRvcjo6b3BlcmF0b3IrKyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6
OlN0YWNrU2xvdHNDb2xsZWN0aW9uOjppdGVyYXRvcjo6b3BlcmF0b3I9PSk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6OlN0YWNrU2xvdHNDb2xsZWN0aW9uOjppdGVyYXRv
cjo6b3BlcmF0b3IhPSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6OlN0
YWNrU2xvdHNDb2xsZWN0aW9uOjppdGVyYXRvcjo6ZmluZE5leHQpOiBEZWxldGVkLgorICAgICAg
ICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpTdGFja1Nsb3RzQ29sbGVjdGlvbjo6YmVnaW4pOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpTdGFja1Nsb3RzQ29sbGVjdGlvbjo6
ZW5kKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6VmFsdWVzQ29sbGVj
dGlvbjo6VmFsdWVzQ29sbGVjdGlvbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkIzOjpQcm9j
ZWR1cmU6OlZhbHVlc0NvbGxlY3Rpb246Oml0ZXJhdG9yOjppdGVyYXRvcik6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6OlZhbHVlc0NvbGxlY3Rpb246Oml0ZXJhdG9yOjpv
cGVyYXRvciopOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpWYWx1ZXND
b2xsZWN0aW9uOjppdGVyYXRvcjo6b3BlcmF0b3IrKyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OkIzOjpQcm9jZWR1cmU6OlZhbHVlc0NvbGxlY3Rpb246Oml0ZXJhdG9yOjpvcGVyYXRvcj09KTog
RGVsZXRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlByb2NlZHVyZTo6VmFsdWVzQ29sbGVjdGlvbjo6
aXRlcmF0b3I6Om9wZXJhdG9yIT0pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCMzo6UHJvY2Vk
dXJlOjpWYWx1ZXNDb2xsZWN0aW9uOjppdGVyYXRvcjo6ZmluZE5leHQpOiBEZWxldGVkLgorICAg
ICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpWYWx1ZXNDb2xsZWN0aW9uOjpiZWdpbik6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6OlZhbHVlc0NvbGxlY3Rpb246OmVuZCk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6OlZhbHVlc0NvbGxlY3Rpb246
OnNpemUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjpWYWx1ZXNDb2xs
ZWN0aW9uOjphdCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkIzOjpQcm9jZWR1cmU6OlZhbHVl
c0NvbGxlY3Rpb246Om9wZXJhdG9yW10pOiBEZWxldGVkLgorICAgICAgICAqIGIzL0IzUHJvY2Vk
dXJlSW5saW5lcy5oOgorICAgICAgICAoSlNDOjpCMzo6UHJvY2VkdXJlOjphZGQpOgorICAgICAg
ICAqIGIzL0IzUmVkdWNlU3RyZW5ndGguY3BwOgorICAgICAgICAqIGIzL0IzU2xvdEJhc2VWYWx1
ZS5oOgorICAgICAgICAqIGIzL0IzU3BhcnNlQ29sbGVjdGlvbi5oOiBBZGRlZC4KKyAgICAgICAg
KEpTQzo6QjM6OlNwYXJzZUNvbGxlY3Rpb246OlNwYXJzZUNvbGxlY3Rpb24pOgorICAgICAgICAo
SlNDOjpCMzo6U3BhcnNlQ29sbGVjdGlvbjo6YWRkKToKKyAgICAgICAgKEpTQzo6QjM6OlNwYXJz
ZUNvbGxlY3Rpb246OmFkZE5ldyk6CisgICAgICAgIChKU0M6OkIzOjpTcGFyc2VDb2xsZWN0aW9u
OjpyZW1vdmUpOgorICAgICAgICAoSlNDOjpCMzo6U3BhcnNlQ29sbGVjdGlvbjo6c2l6ZSk6Cisg
ICAgICAgIChKU0M6OkIzOjpTcGFyc2VDb2xsZWN0aW9uOjppc0VtcHR5KToKKyAgICAgICAgKEpT
Qzo6QjM6OlNwYXJzZUNvbGxlY3Rpb246OmF0KToKKyAgICAgICAgKEpTQzo6QjM6OlNwYXJzZUNv
bGxlY3Rpb246Om9wZXJhdG9yW10pOgorICAgICAgICAoSlNDOjpCMzo6U3BhcnNlQ29sbGVjdGlv
bjo6aXRlcmF0b3I6Oml0ZXJhdG9yKToKKyAgICAgICAgKEpTQzo6QjM6OlNwYXJzZUNvbGxlY3Rp
b246Oml0ZXJhdG9yOjpvcGVyYXRvciopOgorICAgICAgICAoSlNDOjpCMzo6U3BhcnNlQ29sbGVj
dGlvbjo6aXRlcmF0b3I6Om9wZXJhdG9yKyspOgorICAgICAgICAoSlNDOjpCMzo6U3BhcnNlQ29s
bGVjdGlvbjo6aXRlcmF0b3I6Om9wZXJhdG9yPT0pOgorICAgICAgICAoSlNDOjpCMzo6U3BhcnNl
Q29sbGVjdGlvbjo6aXRlcmF0b3I6Om9wZXJhdG9yIT0pOgorICAgICAgICAoSlNDOjpCMzo6U3Bh
cnNlQ29sbGVjdGlvbjo6aXRlcmF0b3I6OmZpbmROZXh0KToKKyAgICAgICAgKEpTQzo6QjM6OlNw
YXJzZUNvbGxlY3Rpb246OmJlZ2luKToKKyAgICAgICAgKEpTQzo6QjM6OlNwYXJzZUNvbGxlY3Rp
b246OmVuZCk6CisgICAgICAgICogYjMvQjNTdGFja1Nsb3QuY3BwOgorICAgICAgICAoSlNDOjpC
Mzo6U3RhY2tTbG90OjpkZWVwRHVtcCk6CisgICAgICAgIChKU0M6OkIzOjpTdGFja1Nsb3Q6OlN0
YWNrU2xvdCk6CisgICAgICAgICogYjMvQjNTdGFja1Nsb3QuaDoKKyAgICAgICAgKEpTQzo6QjM6
OlN0YWNrU2xvdDo6Ynl0ZVNpemUpOgorICAgICAgICAoSlNDOjpCMzo6U3RhY2tTbG90OjppbmRl
eCk6CisgICAgICAgIChKU0M6OkIzOjpTdGFja1Nsb3Q6OnNldE9mZnNldEZyb21GUCk6CisgICAg
ICAgIChKU0M6OkIzOjpTdGFja1Nsb3Q6OmtpbmQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpC
Mzo6U3RhY2tTbG90Ojppc0xvY2tlZCk6IERlbGV0ZWQuCisgICAgICAgICogYjMvQjNTdGFja1Ns
b3RLaW5kLmNwcDogUmVtb3ZlZC4KKyAgICAgICAgKiBiMy9CM1N0YWNrU2xvdEtpbmQuaDogUmVt
b3ZlZC4KKyAgICAgICAgKiBiMy9CM1N0YWNrbWFwVmFsdWUuY3BwOgorICAgICAgICAoSlNDOjpC
Mzo6U3RhY2ttYXBWYWx1ZTo6ZHVtcE1ldGEpOgorICAgICAgICAoSlNDOjpCMzo6U3RhY2ttYXBW
YWx1ZTo6U3RhY2ttYXBWYWx1ZSk6CisgICAgICAgICogYjMvQjNTdGFja21hcFZhbHVlLmg6Cisg
ICAgICAgICogYjMvQjNTd2l0Y2hWYWx1ZS5jcHA6CisgICAgICAgIChKU0M6OkIzOjpTd2l0Y2hW
YWx1ZTo6Y2xvbmVJbXBsKToKKyAgICAgICAgKEpTQzo6QjM6OlN3aXRjaFZhbHVlOjpTd2l0Y2hW
YWx1ZSk6CisgICAgICAgICogYjMvQjNTd2l0Y2hWYWx1ZS5oOgorICAgICAgICAqIGIzL0IzVXBz
aWxvblZhbHVlLmg6CisgICAgICAgICogYjMvQjNWYWxpZGF0ZS5jcHA6CisgICAgICAgICogYjMv
QjNWYWx1ZS5jcHA6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZTo6cmVwbGFjZVdpdGhJZGVudGl0
eSk6CisgICAgICAgIChKU0M6OkIzOjpWYWx1ZTo6cmVwbGFjZVdpdGhOb3ApOgorICAgICAgICAo
SlNDOjpCMzo6VmFsdWU6OnJlcGxhY2VXaXRoUGhpKToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVl
OjpkdW1wKToKKyAgICAgICAgKEpTQzo6QjM6OlZhbHVlOjplZmZlY3RzKToKKyAgICAgICAgKEpT
Qzo6QjM6OlZhbHVlOjpjaGVja09wY29kZSk6CisgICAgICAgICogYjMvQjNWYWx1ZS5oOgorICAg
ICAgICAqIGIzL0IzVmFyaWFibGUuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QjM6OlZhcmlh
YmxlOjp+VmFyaWFibGUpOgorICAgICAgICAoSlNDOjpCMzo6VmFyaWFibGU6OmR1bXApOgorICAg
ICAgICAoSlNDOjpCMzo6VmFyaWFibGU6OmRlZXBEdW1wKToKKyAgICAgICAgKEpTQzo6QjM6OlZh
cmlhYmxlOjpWYXJpYWJsZSk6CisgICAgICAgICogYjMvQjNWYXJpYWJsZS5oOiBBZGRlZC4KKyAg
ICAgICAgKEpTQzo6QjM6OlZhcmlhYmxlOjp0eXBlKToKKyAgICAgICAgKEpTQzo6QjM6OlZhcmlh
YmxlOjppbmRleCk6CisgICAgICAgIChKU0M6OkIzOjpEZWVwVmFyaWFibGVEdW1wOjpEZWVwVmFy
aWFibGVEdW1wKToKKyAgICAgICAgKEpTQzo6QjM6OkRlZXBWYXJpYWJsZUR1bXA6OmR1bXApOgor
ICAgICAgICAoSlNDOjpCMzo6ZGVlcER1bXApOgorICAgICAgICAqIGIzL0IzVmFyaWFibGVWYWx1
ZS5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpCMzo6VmFyaWFibGVWYWx1ZTo6flZhcmlhYmxl
VmFsdWUpOgorICAgICAgICAoSlNDOjpCMzo6VmFyaWFibGVWYWx1ZTo6ZHVtcE1ldGEpOgorICAg
ICAgICAoSlNDOjpCMzo6VmFyaWFibGVWYWx1ZTo6Y2xvbmVJbXBsKToKKyAgICAgICAgKEpTQzo6
QjM6OlZhcmlhYmxlVmFsdWU6OlZhcmlhYmxlVmFsdWUpOgorICAgICAgICAqIGIzL0IzVmFyaWFi
bGVWYWx1ZS5oOiBBZGRlZC4KKyAgICAgICAgKiBiMy9haXIvQWlyQWxsb2NhdGVTdGFjay5jcHA6
CisgICAgICAgIChKU0M6OkIzOjpBaXI6OmFsbG9jYXRlU3RhY2spOgorICAgICAgICAqIGIzL2Fp
ci9BaXJDb2RlLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6YWRkU3RhY2tTbG90
KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6YWRkU3BlY2lhbCk6CisgICAgICAgIChK
U0M6OkIzOjpBaXI6OkNvZGU6OmNDYWxsU3BlY2lhbCk6CisgICAgICAgICogYjMvYWlyL0FpckNv
ZGUuaDoKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6YmVnaW4pOgorICAgICAgICAoSlND
OjpCMzo6QWlyOjpDb2RlOjplbmQpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpzdGFj
a1Nsb3RzKToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6c3BlY2lhbHMpOgorICAgICAg
ICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpmb3JBbGxUbXBzKToKKyAgICAgICAgKEpTQzo6QjM6OkFp
cjo6Q29kZTo6U3RhY2tTbG90c0NvbGxlY3Rpb246OlN0YWNrU2xvdHNDb2xsZWN0aW9uKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6U3RhY2tTbG90c0NvbGxlY3Rpb246
OnNpemUpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpTdGFja1Nsb3Rz
Q29sbGVjdGlvbjo6YXQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpT
dGFja1Nsb3RzQ29sbGVjdGlvbjo6b3BlcmF0b3JbXSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OkIzOjpBaXI6OkNvZGU6OlN0YWNrU2xvdHNDb2xsZWN0aW9uOjppdGVyYXRvcjo6aXRlcmF0b3Ip
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpTdGFja1Nsb3RzQ29sbGVj
dGlvbjo6aXRlcmF0b3I6Om9wZXJhdG9yKik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkIzOjpB
aXI6OkNvZGU6OlN0YWNrU2xvdHNDb2xsZWN0aW9uOjppdGVyYXRvcjo6b3BlcmF0b3IrKyk6IERl
bGV0ZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OlN0YWNrU2xvdHNDb2xsZWN0aW9u
OjppdGVyYXRvcjo6b3BlcmF0b3I9PSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6
OkNvZGU6OlN0YWNrU2xvdHNDb2xsZWN0aW9uOjppdGVyYXRvcjo6b3BlcmF0b3IhPSk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OlN0YWNrU2xvdHNDb2xsZWN0aW9uOjpi
ZWdpbik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OlN0YWNrU2xvdHND
b2xsZWN0aW9uOjplbmQpOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpT
cGVjaWFsc0NvbGxlY3Rpb246OlNwZWNpYWxzQ29sbGVjdGlvbik6IERlbGV0ZWQuCisgICAgICAg
IChKU0M6OkIzOjpBaXI6OkNvZGU6OlNwZWNpYWxzQ29sbGVjdGlvbjo6c2l6ZSk6IERlbGV0ZWQu
CisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OlNwZWNpYWxzQ29sbGVjdGlvbjo6YXQpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpTcGVjaWFsc0NvbGxlY3Rpb246
Om9wZXJhdG9yW10pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpDb2RlOjpTcGVj
aWFsc0NvbGxlY3Rpb246Oml0ZXJhdG9yOjppdGVyYXRvcik6IERlbGV0ZWQuCisgICAgICAgIChK
U0M6OkIzOjpBaXI6OkNvZGU6OlNwZWNpYWxzQ29sbGVjdGlvbjo6aXRlcmF0b3I6Om9wZXJhdG9y
Kik6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNvZGU6OlNwZWNpYWxzQ29sbGVj
dGlvbjo6aXRlcmF0b3I6Om9wZXJhdG9yKyspOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpDb2RlOjpTcGVjaWFsc0NvbGxlY3Rpb246Oml0ZXJhdG9yOjpvcGVyYXRvcj09KTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6Q29kZTo6U3BlY2lhbHNDb2xsZWN0aW9uOjpp
dGVyYXRvcjo6b3BlcmF0b3IhPSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkIzOjpBaXI6OkNv
ZGU6OlNwZWNpYWxzQ29sbGVjdGlvbjo6YmVnaW4pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpC
Mzo6QWlyOjpDb2RlOjpTcGVjaWFsc0NvbGxlY3Rpb246OmVuZCk6IERlbGV0ZWQuCisgICAgICAg
ICogYjMvYWlyL0FpckZpeE9idmlvdXNTcGlsbHMuY3BwOgorICAgICAgICAqIGIzL2Fpci9BaXJJ
bnN0SW5saW5lcy5oOgorICAgICAgICAqIGIzL2Fpci9BaXJJdGVyYXRlZFJlZ2lzdGVyQ29hbGVz
Y2luZy5jcHA6CisgICAgICAgICogYjMvYWlyL0FpckxpdmVuZXNzLmg6CisgICAgICAgICogYjMv
YWlyL0Fpckxvd2VyQWZ0ZXJSZWdBbGxvYy5jcHA6CisgICAgICAgIChKU0M6OkIzOjpBaXI6Omxv
d2VyQWZ0ZXJSZWdBbGxvYyk6CisgICAgICAgICogYjMvYWlyL0FpclNwZWNpYWwuY3BwOgorICAg
ICAgICAoSlNDOjpCMzo6QWlyOjpTcGVjaWFsOjpTcGVjaWFsKToKKyAgICAgICAgKiBiMy9haXIv
QWlyU3BlY2lhbC5oOgorICAgICAgICAqIGIzL2Fpci9BaXJTcGlsbEV2ZXJ5dGhpbmcuY3BwOgor
ICAgICAgICAoSlNDOjpCMzo6QWlyOjpzcGlsbEV2ZXJ5dGhpbmcpOgorICAgICAgICAqIGIzL2Fp
ci9BaXJTdGFja1Nsb3QuY3BwOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpTdGFja1Nsb3Q6OmR1
bXApOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpTdGFja1Nsb3Q6OmRlZXBEdW1wKToKKyAgICAg
ICAgKEpTQzo6QjM6OkFpcjo6U3RhY2tTbG90OjpTdGFja1Nsb3QpOgorICAgICAgICAqIGIzL2Fp
ci9BaXJTdGFja1Nsb3QuaDoKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6U3RhY2tTbG90OjpieXRl
U2l6ZSk6CisgICAgICAgIChKU0M6OkIzOjpBaXI6OlN0YWNrU2xvdDo6a2luZCk6CisgICAgICAg
IChKU0M6OkIzOjpBaXI6OlN0YWNrU2xvdDo6aXNMb2NrZWQpOgorICAgICAgICAoSlNDOjpCMzo6
QWlyOjpTdGFja1Nsb3Q6OmlzU3BpbGwpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjpTdGFja1Ns
b3Q6OmluZGV4KToKKyAgICAgICAgKEpTQzo6QjM6OkFpcjo6U3RhY2tTbG90OjplbnN1cmVTaXpl
KToKKyAgICAgICAgKiBiMy9haXIvQWlyU3RhY2tTbG90S2luZC5jcHA6IENvcGllZCBmcm9tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrU2xvdEtpbmQuY3BwLgorICAgICAgICAoV1RG
OjpwcmludEludGVybmFsKToKKyAgICAgICAgKiBiMy9haXIvQWlyU3RhY2tTbG90S2luZC5oOiBD
b3BpZWQgZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja1Nsb3RLaW5kLmguCisg
ICAgICAgICogYjMvYWlyL29wY29kZV9nZW5lcmF0b3IucmI6CisgICAgICAgICogYjMvYWlyL3Rl
c3RhaXIuY3BwOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjp0ZXN0U2h1ZmZsZUJyb2FkY2FzdEFs
bFJlZ3MpOgorICAgICAgICAoSlNDOjpCMzo6QWlyOjp0ZXN0U2h1ZmZsZVNoaWZ0QWxsUmVncyk6
CisgICAgICAgIChKU0M6OkIzOjpBaXI6OnRlc3RTaHVmZmxlUm90YXRlQWxsUmVncyk6CisgICAg
ICAgICogYjMvdGVzdGIzLmNwcDoKKyAgICAgICAgKEpTQzo6QjM6OnRlc3RTdGFja1Nsb3QpOgor
ICAgICAgICAoSlNDOjpCMzo6dGVzdFN0b3JlTG9hZFN0YWNrU2xvdCk6CisgICAgICAgICogZnRs
L0ZUTEIzT3V0cHV0LmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpPdXRwdXQ6OmxvY2tlZFN0YWNr
U2xvdCk6CisgICAgICAgIChKU0M6OkZUTDo6T3V0cHV0OjpuZWcpOgorICAgICAgICAqIGZ0bC9G
VExMb3dlckRGR1RvTExWTS5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1Rv
TExWTTo6Y29tcGlsZUludmFsaWRhdGlvblBvaW50KToKKwogMjAxNi0wMi0wMSAgQ2hyaXMgRHVt
ZXogIDxjZHVtZXpAYXBwbGUuY29tPgogCiAgICAgICAgIG9iamVjdC5fX2xvb2t1cEdldHRlcl9f
KCkgLyBvYmplY3QuX19sb29rdXBTZXR0ZXJfXygpIGRvZXMgbm90IHdvcmsgZm9yIG5hdGl2ZSBi
aW5kaW5ncwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24g
MTk2MDExKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5n
IGNvcHkpCkBAIC05Nyw2ICs5Nyw3IEBAIHNldChKYXZhU2NyaXB0Q29yZV9TT1VSQ0VTCiAgICAg
YjMvYWlyL0FpclNwZWNpYWwuY3BwCiAgICAgYjMvYWlyL0FpclNwaWxsRXZlcnl0aGluZy5jcHAK
ICAgICBiMy9haXIvQWlyU3RhY2tTbG90LmNwcAorICAgIGIzL2Fpci9BaXJTdGFja1Nsb3RLaW5k
LmNwcAogICAgIGIzL2Fpci9BaXJUbXAuY3BwCiAgICAgYjMvYWlyL0FpclRtcFdpZHRoLmNwcAog
ICAgIGIzL2Fpci9BaXJWYWxpZGF0ZS5jcHAKQEAgLTE1MSw3ICsxNTIsNiBAQCBzZXQoSmF2YVNj
cmlwdENvcmVfU09VUkNFUwogICAgIGIzL0IzU3RhY2ttYXBHZW5lcmF0aW9uUGFyYW1zLmNwcAog
ICAgIGIzL0IzU3RhY2ttYXBTcGVjaWFsLmNwcAogICAgIGIzL0IzU3RhY2ttYXBWYWx1ZS5jcHAK
LSAgICBiMy9CM1N0YWNrU2xvdEtpbmQuY3BwCiAgICAgYjMvQjNTdGFja1Nsb3QuY3BwCiAgICAg
YjMvQjNTd2l0Y2hDYXNlLmNwcAogICAgIGIzL0IzU3dpdGNoVmFsdWUuY3BwCkBAIC0xNjMsNiAr
MTYzLDggQEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBiMy9CM1ZhbHVlLmNwcAog
ICAgIGIzL0IzVmFsdWVLZXkuY3BwCiAgICAgYjMvQjNWYWx1ZVJlcC5jcHAKKyAgICBiMy9CM1Zh
cmlhYmxlLmNwcAorICAgIGIzL0IzVmFyaWFibGVWYWx1ZS5jcHAKIAogICAgIGJpbmRpbmdzL1Nj
cmlwdEZ1bmN0aW9uQ2FsbC5jcHAKICAgICBiaW5kaW5ncy9TY3JpcHRPYmplY3QuY3BwCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTk2MDExKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJ
KHdvcmtpbmcgY29weSkKQEAgLTIzOSw2ICsyMzksMTMgQEAKIAkJMEYyQjlDRjcxOUQwQkFDMTAw
QjFEMUI1IC8qIEZUTEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uLmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCOUNGMTE5RDBCQUMxMDBCMUQx
QjUgLyogRlRMRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24uaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjJCOUNGODE5RDBCQUMxMDBCMUQx
QjUgLyogRlRMT3BlcmF0aW9ucy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjJCOUNGMjE5RDBCQUMxMDBCMUQxQjUgLyogRlRMT3BlcmF0aW9ucy5j
cHAgKi87IH07CiAJCTBGMkI5Q0Y5MTlEMEJBQzEwMEIxRDFCNSAvKiBGVExPcGVyYXRpb25zLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCOUNGMzE5
RDBCQUMxMDBCMUQxQjUgLyogRlRMT3BlcmF0aW9ucy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJV
VEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGMkJCRDk2MUM1RkYzRjUwMDIzRUYyMyAvKiBC
M1NwYXJzZUNvbGxlY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGMkJCRDkxMUM1RkYzRjUwMDIzRUYyMyAvKiBCM1NwYXJzZUNvbGxlY3Rpb24u
aCAqLzsgfTsKKwkJMEYyQkJEOTcxQzVGRjNGNTAwMjNFRjIzIC8qIEIzVmFyaWFibGUuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQkJEOTIxQzVG
RjNGNTAwMjNFRjIzIC8qIEIzVmFyaWFibGUuY3BwICovOyB9OworCQkwRjJCQkQ5ODFDNUZGM0Y1
MDAyM0VGMjMgLyogQjNWYXJpYWJsZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMEYyQkJEOTMxQzVGRjNGNTAwMjNFRjIzIC8qIEIzVmFyaWFibGUuaCAq
LzsgfTsKKwkJMEYyQkJEOTkxQzVGRjNGNTAwMjNFRjIzIC8qIEIzVmFyaWFibGVWYWx1ZS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCQkQ5NDFD
NUZGM0Y1MDAyM0VGMjMgLyogQjNWYXJpYWJsZVZhbHVlLmNwcCAqLzsgfTsKKwkJMEYyQkJEOUEx
QzVGRjNGNTAwMjNFRjIzIC8qIEIzVmFyaWFibGVWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEYyQkJEOTUxQzVGRjNGNTAwMjNFRjIzIC8qIEIz
VmFyaWFibGVWYWx1ZS5oICovOyB9OworCQkwRjJCQkQ5RDFDNUZGNDA1MDAyM0VGMjMgLyogQWly
U3RhY2tTbG90S2luZC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjJCQkQ5QjFDNUZGNDA1MDAyM0VGMjMgLyogQWlyU3RhY2tTbG90S2luZC5jcHAg
Ki87IH07CisJCTBGMkJCRDlFMUM1RkY0MDUwMDIzRUYyMyAvKiBBaXJTdGFja1Nsb3RLaW5kLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCQkQ5QzFD
NUZGNDA1MDAyM0VGMjMgLyogQWlyU3RhY2tTbG90S2luZC5oICovOyB9OwogCQkwRjJCREMxNTE1
MUM1RDREMDBDRDg5MTAgLyogREZHRml4dXBQaGFzZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCREMxMjE1MUM1RDRBMDBDRDg5MTAgLyogREZH
Rml4dXBQaGFzZS5jcHAgKi87IH07CiAJCTBGMkJEQzE2MTUxQzVENEYwMENEODkxMCAvKiBERkdG
aXh1cFBoYXNlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSAwRjJCREMxMzE1MUM1RDRBMDBDRDg5MTAgLyogREZHRml4dXBQaGFzZS5oICovOyB9OwogCQkw
RjJCREMyMTE1MUU4MDNCMDBDRDg5MTAgLyogREZHSW5zZXJ0aW9uU2V0LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjJCREMxRjE1MUU4MDM4MDBDRDg5
MTAgLyogREZHSW5zZXJ0aW9uU2V0LmggKi87IH07CkBAIC04MzIsOCArODM5LDYgQEAKIAkJMEZF
Qzg1MkQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzUHJvY2VkdXJlSW5saW5lcy5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RTMxQkRBQ0RBQzAwODBG
Rjc0IC8qIEIzUHJvY2VkdXJlSW5saW5lcy5oICovOyB9OwogCQkwRkVDODUzMDFCREFDREFDMDA4
MEZGNzQgLyogQjNTdGFja21hcFNwZWNpYWwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RTYxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2tt
YXBTcGVjaWFsLmNwcCAqLzsgfTsKIAkJMEZFQzg1MzExQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3Rh
Y2ttYXBTcGVjaWFsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkVDODRFNzFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja21hcFNwZWNpYWwuaCAqLzsg
fTsKLQkJMEZFQzg1MzIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2tTbG90S2luZC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRFODFCREFD
REFDMDA4MEZGNzQgLyogQjNTdGFja1Nsb3RLaW5kLmNwcCAqLzsgfTsKLQkJMEZFQzg1MzMxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzU3RhY2tTbG90S2luZC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZFQzg0RTkxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3Rh
Y2tTbG90S2luZC5oICovOyB9OwogCQkwRkVDODUzNDFCREFDREFDMDA4MEZGNzQgLyogQjNTbG90
QmFzZVZhbHVlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRUM4NEVBMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1Nsb3RCYXNlVmFsdWUuY3BwICovOyB9
OwogCQkwRkVDODUzNTFCREFDREFDMDA4MEZGNzQgLyogQjNTbG90QmFzZVZhbHVlLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkVDODRFQjFCREFDREFD
MDA4MEZGNzQgLyogQjNTbG90QmFzZVZhbHVlLmggKi87IH07CiAJCTBGRUM4NTM2MUJEQUNEQUMw
MDgwRkY3NCAvKiBCM1N1Y2Nlc3NvckNvbGxlY3Rpb24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRUM4NEVDMUJEQUNEQUMwMDgwRkY3NCAvKiBCM1N1
Y2Nlc3NvckNvbGxlY3Rpb24uaCAqLzsgfTsKQEAgLTI0MzMsNiArMjQzOCwxMyBAQAogCQkwRjJC
OUNGMTE5RDBCQUMxMDBCMUQxQjUgLyogRlRMRXhpdFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24u
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRlRMRXhpdFRpbWVPYmplY3RNYXRl
cmlhbGl6YXRpb24uaDsgcGF0aCA9IGZ0bC9GVExFeGl0VGltZU9iamVjdE1hdGVyaWFsaXphdGlv
bi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjJCOUNGMjE5RDBCQUMxMDBCMUQx
QjUgLyogRlRMT3BlcmF0aW9ucy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBGVExPcGVyYXRpb25zLmNwcDsgcGF0aCA9IGZ0bC9GVExPcGVyYXRpb25zLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEYyQjlDRjMxOUQwQkFDMTAwQjFEMUI1IC8qIEZU
TE9wZXJhdGlvbnMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRlRMT3BlcmF0
aW9ucy5oOyBwYXRoID0gZnRsL0ZUTE9wZXJhdGlvbnMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJMEYyQkJEOTExQzVGRjNGNTAwMjNFRjIzIC8qIEIzU3BhcnNlQ29sbGVjdGlvbi5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM1NwYXJzZUNvbGxlY3Rpb24uaDsg
cGF0aCA9IGIzL0IzU3BhcnNlQ29sbGVjdGlvbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OworCQkwRjJCQkQ5MjFDNUZGM0Y1MDAyM0VGMjMgLyogQjNWYXJpYWJsZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM1ZhcmlhYmxlLmNwcDsgcGF0aCA9IGIzL0Iz
VmFyaWFibGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjJCQkQ5MzFDNUZG
M0Y1MDAyM0VGMjMgLyogQjNWYXJpYWJsZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBCM1ZhcmlhYmxlLmg7IHBhdGggPSBiMy9CM1ZhcmlhYmxlLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTBGMkJCRDk0MUM1RkYzRjUwMDIzRUYyMyAvKiBCM1ZhcmlhYmxlVmFs
dWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQjNWYXJpYWJsZVZh
bHVlLmNwcDsgcGF0aCA9IGIzL0IzVmFyaWFibGVWYWx1ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGMkJCRDk1MUM1RkYzRjUwMDIzRUYyMyAvKiBCM1ZhcmlhYmxlVmFsdWUu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNWYXJpYWJsZVZhbHVlLmg7IHBh
dGggPSBiMy9CM1ZhcmlhYmxlVmFsdWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
MEYyQkJEOUIxQzVGRjQwNTAwMjNFRjIzIC8qIEFpclN0YWNrU2xvdEtpbmQuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gQWlyU3RhY2tTbG90S2luZC5jcHA7IHBhdGgg
PSBiMy9haXIvQWlyU3RhY2tTbG90S2luZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGMkJCRDlDMUM1RkY0MDUwMDIzRUYyMyAvKiBBaXJTdGFja1Nsb3RLaW5kLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEFpclN0YWNrU2xvdEtpbmQuaDsgcGF0aCA9IGIz
L2Fpci9BaXJTdGFja1Nsb3RLaW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBG
MkJEQzEyMTUxQzVENEEwMENEODkxMCAvKiBERkdGaXh1cFBoYXNlLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IERGR0ZpeHVwUGhhc2UuY3BwOyBwYXRoID0gZGZnL0RG
R0ZpeHVwUGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjJCREMxMzE1
MUM1RDRBMDBDRDg5MTAgLyogREZHRml4dXBQaGFzZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IG5hbWUgPSBERkdGaXh1cFBoYXNlLmg7IHBhdGggPSBkZmcvREZHRml4dXBQaGFzZS5oOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjJCREMxRjE1MUU4MDM4MDBDRDg5MTAgLyog
REZHSW5zZXJ0aW9uU2V0LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR0lu
c2VydGlvblNldC5oOyBwYXRoID0gZGZnL0RGR0luc2VydGlvblNldC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtMzAzNSw4ICszMDQ3LDYgQEAKIAkJMEZFQzg0RTMxQkRBQ0RBQzAw
ODBGRjc0IC8qIEIzUHJvY2VkdXJlSW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IG5hbWUgPSBCM1Byb2NlZHVyZUlubGluZXMuaDsgcGF0aCA9IGIzL0IzUHJvY2VkdXJlSW5saW5l
cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkVDODRFNjFCREFDREFDMDA4MEZG
NzQgLyogQjNTdGFja21hcFNwZWNpYWwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3Bw
OyBuYW1lID0gQjNTdGFja21hcFNwZWNpYWwuY3BwOyBwYXRoID0gYjMvQjNTdGFja21hcFNwZWNp
YWwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkVDODRFNzFCREFDREFDMDA4
MEZGNzQgLyogQjNTdGFja21hcFNwZWNpYWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBu
YW1lID0gQjNTdGFja21hcFNwZWNpYWwuaDsgcGF0aCA9IGIzL0IzU3RhY2ttYXBTcGVjaWFsLmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGRUM4NEU4MUJEQUNEQUMwMDgwRkY3NCAv
KiBCM1N0YWNrU2xvdEtpbmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gQjNTdGFja1Nsb3RLaW5kLmNwcDsgcGF0aCA9IGIzL0IzU3RhY2tTbG90S2luZC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGRUM4NEU5MUJEQUNEQUMwMDgwRkY3NCAvKiBC
M1N0YWNrU2xvdEtpbmQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gQjNTdGFj
a1Nsb3RLaW5kLmg7IHBhdGggPSBiMy9CM1N0YWNrU2xvdEtpbmQuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJMEZFQzg0RUExQkRBQ0RBQzAwODBGRjc0IC8qIEIzU2xvdEJhc2VWYWx1
ZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFz
dEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBCM1Nsb3RCYXNlVmFs
dWUuY3BwOyBwYXRoID0gYjMvQjNTbG90QmFzZVZhbHVlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEZFQzg0RUIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU2xvdEJhc2VWYWx1ZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBCM1Nsb3RCYXNlVmFsdWUuaDsgcGF0
aCA9IGIzL0IzU2xvdEJhc2VWYWx1ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RkVDODRFQzFCREFDREFDMDA4MEZGNzQgLyogQjNTdWNjZXNzb3JDb2xsZWN0aW9uLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEIzU3VjY2Vzc29yQ29sbGVjdGlvbi5oOyBwYXRo
ID0gYjMvQjNTdWNjZXNzb3JDb2xsZWN0aW9uLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CkBAIC00ODcwLDYgKzQ4ODAsNyBAQAogCQkJCTBGRUM4NUI4MUJFMTQ2MkYwMDgwRkY3NCAvKiBC
M1JlZHVjZVN0cmVuZ3RoLmggKi8sCiAJCQkJMEZFQzg0RUExQkRBQ0RBQzAwODBGRjc0IC8qIEIz
U2xvdEJhc2VWYWx1ZS5jcHAgKi8sCiAJCQkJMEZFQzg0RUIxQkRBQ0RBQzAwODBGRjc0IC8qIEIz
U2xvdEJhc2VWYWx1ZS5oICovLAorCQkJCTBGMkJCRDkxMUM1RkYzRjUwMDIzRUYyMyAvKiBCM1Nw
YXJzZUNvbGxlY3Rpb24uaCAqLywKIAkJCQkwRjZCOEFEQTFDNEVGQUMzMDA5NjkwNTIgLyogQjNT
U0FDYWxjdWxhdG9yLmNwcCAqLywKIAkJCQkwRjZCOEFEQjFDNEVGQUMzMDA5NjkwNTIgLyogQjNT
U0FDYWxjdWxhdG9yLmggKi8sCiAJCQkJMEYzM0ZDRjUxQzEzNkUyNTAwMzIzRjY3IC8qIEIzU3Rh
Y2ttYXBHZW5lcmF0aW9uUGFyYW1zLmNwcCAqLywKQEAgLTQ4ODAsOCArNDg5MSw2IEBACiAJCQkJ
MEYzMzhERjAxQkU5M0FEMTAwMTNDODhGIC8qIEIzU3RhY2ttYXBWYWx1ZS5oICovLAogCQkJCTBG
OTQ5NTg1MUM1N0Y0NzUwMDQxM0E0OCAvKiBCM1N0YWNrU2xvdC5jcHAgKi8sCiAJCQkJMEY5NDk1
ODYxQzU3RjQ3NTAwNDEzQTQ4IC8qIEIzU3RhY2tTbG90LmggKi8sCi0JCQkJMEZFQzg0RTgxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzU3RhY2tTbG90S2luZC5jcHAgKi8sCi0JCQkJMEZFQzg0RTkxQkRB
Q0RBQzAwODBGRjc0IC8qIEIzU3RhY2tTbG90S2luZC5oICovLAogCQkJCTBGRUM4NEVDMUJEQUNE
QUMwMDgwRkY3NCAvKiBCM1N1Y2Nlc3NvckNvbGxlY3Rpb24uaCAqLywKIAkJCQkwRkVDODRFRDFC
REFDREFDMDA4MEZGNzQgLyogQjNTd2l0Y2hDYXNlLmNwcCAqLywKIAkJCQkwRkVDODRFRTFCREFD
REFDMDA4MEZGNzQgLyogQjNTd2l0Y2hDYXNlLmggKi8sCkBAIC00OTA1LDYgKzQ5MTQsMTAgQEAK
IAkJCQkwRjMzOEUwQTFCRjAyNzZDMDAxM0M4OEYgLyogQjNWYWx1ZUtleUlubGluZXMuaCAqLywK
IAkJCQkwRkVDODRGQzFCREFDREFDMDA4MEZGNzQgLyogQjNWYWx1ZVJlcC5jcHAgKi8sCiAJCQkJ
MEZFQzg0RkQxQkRBQ0RBQzAwODBGRjc0IC8qIEIzVmFsdWVSZXAuaCAqLywKKwkJCQkwRjJCQkQ5
MjFDNUZGM0Y1MDAyM0VGMjMgLyogQjNWYXJpYWJsZS5jcHAgKi8sCisJCQkJMEYyQkJEOTMxQzVG
RjNGNTAwMjNFRjIzIC8qIEIzVmFyaWFibGUuaCAqLywKKwkJCQkwRjJCQkQ5NDFDNUZGM0Y1MDAy
M0VGMjMgLyogQjNWYXJpYWJsZVZhbHVlLmNwcCAqLywKKwkJCQkwRjJCQkQ5NTFDNUZGM0Y1MDAy
M0VGMjMgLyogQjNWYXJpYWJsZVZhbHVlLmggKi8sCiAJCQkJMEZFQzg1QUUxQkRCNUQ1RTAwODBG
Rjc0IC8qIHRlc3RiMy5jcHAgKi8sCiAJCQkpOwogCQkJbmFtZSA9IGIzOwpAQCAtNDk3NSw2ICs0
OTg4LDggQEAKIAkJCQkwRkVDODU2NTFCREFDREM3MDA4MEZGNzQgLyogQWlyU3BpbGxFdmVyeXRo
aW5nLmggKi8sCiAJCQkJMEZFQzg1NjYxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclN0YWNrU2xvdC5j
cHAgKi8sCiAJCQkJMEZFQzg1NjcxQkRBQ0RDNzAwODBGRjc0IC8qIEFpclN0YWNrU2xvdC5oICov
LAorCQkJCTBGMkJCRDlCMUM1RkY0MDUwMDIzRUYyMyAvKiBBaXJTdGFja1Nsb3RLaW5kLmNwcCAq
LywKKwkJCQkwRjJCQkQ5QzFDNUZGNDA1MDAyM0VGMjMgLyogQWlyU3RhY2tTbG90S2luZC5oICov
LAogCQkJCTBGRUM4NTY4MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJUbXAuY3BwICovLAogCQkJCTBG
RUM4NTY5MUJEQUNEQzcwMDgwRkY3NCAvKiBBaXJUbXAuaCAqLywKIAkJCQkwRkVDODU2QTFCREFD
REM3MDA4MEZGNzQgLyogQWlyVG1wSW5saW5lcy5oICovLApAQCAtNzEzNCw3ICs3MTQ5LDYgQEAK
IAkJCQkwRkVDODUyRDFCREFDREFDMDA4MEZGNzQgLyogQjNQcm9jZWR1cmVJbmxpbmVzLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRkVDODVCRDFCRTE0NjJGMDA4MEZGNzQgLyogQjNSZWR1Y2VTdHJl
bmd0aC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1MzExQkRBQ0RBQzAwODBGRjc0IC8qIEIz
U3RhY2ttYXBTcGVjaWFsLmggaW4gSGVhZGVycyAqLywKLQkJCQkwRkVDODUzMzFCREFDREFDMDA4
MEZGNzQgLyogQjNTdGFja1Nsb3RLaW5kLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVDODUzNTFC
REFDREFDMDA4MEZGNzQgLyogQjNTbG90QmFzZVZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkw
RkVDODUzNjFCREFDREFDMDA4MEZGNzQgLyogQjNTdWNjZXNzb3JDb2xsZWN0aW9uLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRkVDODUzODFCREFDREFDMDA4MEZGNzQgLyogQjNTd2l0Y2hDYXNlLmgg
aW4gSGVhZGVycyAqLywKQEAgLTcyMTksNiArNzIzMyw3IEBACiAJCQkJMEYxNUYxNUYxNEI3QTcz
RTAwNURFMzdEIC8qIENvbW1vblNsb3dQYXRocy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNjU1M0Ez
MzIxN0ExRjFFRTAwOENGNkYzIC8qIENvbW1vblNsb3dQYXRoc0V4Y2VwdGlvbnMuaCBpbiBIZWFk
ZXJzICovLAogCQkJCTBGRDgyRTM5MTQxQUIxNEQwMDE3OUM5NCAvKiBDb21wYWN0SklUQ29kZU1h
cC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEYyQkJEOUUxQzVGRjQwNTAwMjNFRjIzIC8qIEFpclN0
YWNrU2xvdEtpbmQuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3RTVBM0E4MTc5NzQzMkQwMEU4OTND
MCAvKiBDb21waWxhdGlvblJlc3VsdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEMzRjQwRTE2
RjVDRDAwQjM0NDYwIC8qIENvbXBsZXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNkZDNzUx
MTk2MTEwQTgwMEUxRDAyRCAvKiBDb21wbGV4R2V0U3RhdHVzLmggaW4gSGVhZGVycyAqLywKQEAg
LTcyOTIsNiArNzMwNyw3IEBACiAJCQkJNDM0MjJBNjMxQzE1OEU2RDAwRTJFQjk4IC8qIEIzQ29u
c3RGbG9hdFZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkZCOTIxQTE2RDAyRUM1MDA1NUE1
REIgLyogREZHQmFzaWNCbG9ja0lubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3RDg5Q0Y0
MTdBMEI4Q0MwMDc3M0FEOCAvKiBERkdCbG9ja0luc2VydGlvblNldC5oIGluIEhlYWRlcnMgKi8s
CisJCQkJMEYyQkJEOTYxQzVGRjNGNTAwMjNFRjIzIC8qIEIzU3BhcnNlQ29sbGVjdGlvbi5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEZDM0NDRkMxOUFEQTQxMDAwNkFDNzJBIC8qIERGR0Jsb2NrTWFw
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkMzQ0NGRDE5QURBNDEwMDA2QUM3MkEgLyogREZHQmxv
Y2tNYXBJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkMzQ0NGRTE5QURBNDEwMDA2QUM3
MkEgLyogREZHQmxvY2tTZXQuaCBpbiBIZWFkZXJzICovLApAQCAtNzU3MSw2ICs3NTg3LDcgQEAK
IAkJCQkwRjJCNjZBRTE3QjZCNTQ1MDBBN0FFM0YgLyogR0NJbmNvbWluZ1JlZkNvdW50ZWRTZXQu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2NkFGMTdCNkI1NDUwMEE3QUUzRiAvKiBHQ0luY29t
aW5nUmVmQ291bnRlZFNldElubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTJBQUJDREU3MThF
RjI5NDIwMDAwMjA5NiAvKiBHQ0xvZ2dpbmcuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGMkJCRDk4
MUM1RkYzRjUwMDIzRUYyMyAvKiBCM1ZhcmlhYmxlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNTRF
OEVCMDE4QkZGQkJCMDA1NTZEMjggLyogR0NTZWdtZW50ZWRBcnJheS5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQTU0RThFQjExOEJGRkJCRTAwNTU2RDI4IC8qIEdDU2VnbWVudGVkQXJyYXlJbmxpbmVz
LmggaW4gSGVhZGVycyAqLywKIAkJCQk5OTU5RTkzMTFCRDE4MjcyMDAxQUE0MTMgLyogZ2VuZXJh
dGUtY29tYmluZWQtaW5zcGVjdG9yLWpzb24ucHkgaW4gSGVhZGVycyAqLywKQEAgLTgxODMsNiAr
ODIwMCw3IEBACiAJCQkJMEY2QjhBREQxQzRFRkFDMzAwOTY5MDUyIC8qIEIzU1NBQ2FsY3VsYXRv
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0IwMjQ3NTkxQjg2OEVCNzAwNTQyNDQwIC8qIFdBU01G
dW5jdGlvblN5bnRheENoZWNrZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTdCMzlGNzZFMUI2MkRF
MzIwMDM2MEZCNCAvKiBXQVNNTW9kdWxlUGFyc2VyLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRjJC
QkQ5QTFDNUZGM0Y1MDAyM0VGMjMgLyogQjNWYXJpYWJsZVZhbHVlLmggaW4gSGVhZGVycyAqLywK
IAkJCQk3QjM5Rjc3MDFCNjJERTMyMDAzNjBGQjQgLyogV0FTTVJlYWRlci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJRkVEOTRGMkYxNzFFM0UyMzAwQkU3N0E0IC8qIFdhdGNoZG9nLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRjkxOUQyNjE1ODUzQ0UzMDA0QTRFN0QgLyogV2F0Y2hwb2ludC5oIGluIEhl
YWRlcnMgKi8sCkBAIC04ODMxLDcgKzg4NDksNiBAQAogCQkJCTQzNDIyQTYyMUMxNThFNkEwMEUy
RUI5OCAvKiBCM0NvbnN0RmxvYXRWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkVDODVC
QzFCRTE0NjJGMDA4MEZGNzQgLyogQjNSZWR1Y2VTdHJlbmd0aC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRkVDODUzMDFCREFDREFDMDA4MEZGNzQgLyogQjNTdGFja21hcFNwZWNpYWwuY3BwIGlu
IFNvdXJjZXMgKi8sCi0JCQkJMEZFQzg1MzIxQkRBQ0RBQzAwODBGRjc0IC8qIEIzU3RhY2tTbG90
S2luZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkVDODUzNDFCREFDREFDMDA4MEZGNzQgLyog
QjNTbG90QmFzZVZhbHVlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRUM4NTM3MUJEQUNEQUMw
MDgwRkY3NCAvKiBCM1N3aXRjaENhc2UuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZFQzg1Mzkx
QkRBQ0RBQzAwODBGRjc0IC8qIEIzU3dpdGNoVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC05
MDY3LDYgKzkwODQsNyBAQAogCQkJCTBGQzk3RjQxMTgyMDIxMTkwMDJDOUIyNiAvKiBERkdXYXRj
aHBvaW50Q29sbGVjdGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGREIyQ0U3MTc0
ODMwQTIwMDdCM0MxQiAvKiBERkdXb3JrbGlzdC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkUw
NTAxNzFBQTkwOTExMDBEMzNCMzMgLyogRGlyZWN0QXJndW1lbnRzLmNwcCBpbiBTb3VyY2VzICov
LAorCQkJCTBGMkJCRDlEMUM1RkY0MDUwMDIzRUYyMyAvKiBBaXJTdGFja1Nsb3RLaW5kLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCTBGRTA1MDE1MUFBOTA5MTEwMEQzM0IzMyAvKiBEaXJlY3RBcmd1
bWVudHNPZmZzZXQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY5RDMzNzAxNjVEQkI5MDAwNUFE
Mzg3IC8qIERpc2Fzc2VtYmxlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBNzA0NDdFRDE3QTBC
RDcwMDBGNTg5OEUgLyogRHVtcENvbnRleHQuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC05NTYyLDEx
ICs5NTgwLDEzIEBACiAJCQkJMkE0RUM5MEIxODYwRDZDMjAwOTRGNzgyIC8qIFdyaXRlQmFycmll
ckJ1ZmZlci5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkM4MTUwQjE0MDQzQzBFMDBDRkE2MDMg
LyogV3JpdGVCYXJyaWVyU3VwcG9ydC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQlBN0U1QUIzQTE3
OTlFNEIyMDBEMjgzM0QgLyogWDg2RGlzYXNzZW1ibGVyLmNwcCBpbiBTb3VyY2VzICovLAorCQkJ
CTBGMkJCRDk3MUM1RkYzRjUwMDIzRUYyMyAvKiBCM1ZhcmlhYmxlLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTg2M0M2RDlDMTUyMTExMUEwMDU4NUU0RSAvKiBZYXJyQ2Fub25pY2FsaXplVUNTMi5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQk4NjcwNEI4NDEyREJBMzM3MDBBOUZFN0IgLyogWWFycklu
dGVycHJldGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2NzA0Qjg2MTJEQkEzMzcwMEE5RkU3
QiAvKiBZYXJySklULmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2NzA0Qjg5MTJEQkEzMzcwMEE5
RkU3QiAvKiBZYXJyUGF0dGVybi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NjcwNEI0MjEyREI4
QTgxMDBBOUZFN0IgLyogWWFyclN5bnRheENoZWNrZXIuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
MEYyQkJEOTkxQzVGRjNGNTAwMjNFRjIzIC8qIEIzVmFyaWFibGVWYWx1ZS5jcHAgaW4gU291cmNl
cyAqLywKIAkJCSk7CiAJCQlydW5Pbmx5Rm9yRGVwbG95bWVudFBvc3Rwcm9jZXNzaW5nID0gMDsK
IAkJfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0FyZ3VtZW50UmVnVmFsdWUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNBcmd1bWVudFJlZ1Zh
bHVlLmgJKHJldmlzaW9uIDE5NjAxMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0Fy
Z3VtZW50UmVnVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtNDksOCArNDksOCBAQCBwcm90ZWN0
ZWQ6CiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7CiAKLSAgICBBcmd1bWVu
dFJlZ1ZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcmlnaW4gb3JpZ2luLCBSZWcgcmVnKQotICAgICAg
ICA6IFZhbHVlKGluZGV4LCBDaGVja2VkT3Bjb2RlLCBBcmd1bWVudFJlZywgcmVnLmlzR1BSKCkg
PyBwb2ludGVyVHlwZSgpIDogRG91YmxlLCBvcmlnaW4pCisgICAgQXJndW1lbnRSZWdWYWx1ZShP
cmlnaW4gb3JpZ2luLCBSZWcgcmVnKQorICAgICAgICA6IFZhbHVlKENoZWNrZWRPcGNvZGUsIEFy
Z3VtZW50UmVnLCByZWcuaXNHUFIoKSA/IHBvaW50ZXJUeXBlKCkgOiBEb3VibGUsIG9yaWdpbikK
ICAgICAgICAgLCBtX3JlZyhyZWcpCiAgICAgewogICAgICAgICBBU1NFUlQocmVnLmlzU2V0KCkp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ0NhbGxWYWx1ZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NDYWxsVmFsdWUuaAkocmV2aXNpb24g
MTk2MDExKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ0NhbGxWYWx1ZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00OCwxNSArNDgsMTUgQEAgcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3Mg
UHJvY2VkdXJlOwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgotICAgIEND
YWxsVmFsdWUodW5zaWduZWQgaW5kZXgsIFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdpbiwgQXJndW1l
bnRzLi4uIGFyZ3VtZW50cykKLSAgICAgICAgOiBWYWx1ZShpbmRleCwgQ2hlY2tlZE9wY29kZSwg
Q0NhbGwsIHR5cGUsIG9yaWdpbiwgYXJndW1lbnRzLi4uKQorICAgIENDYWxsVmFsdWUoVHlwZSB0
eXBlLCBPcmlnaW4gb3JpZ2luLCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQorICAgICAgICA6IFZh
bHVlKENoZWNrZWRPcGNvZGUsIENDYWxsLCB0eXBlLCBvcmlnaW4sIGFyZ3VtZW50cy4uLikKICAg
ICB7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKG51bUNoaWxkcmVuKCkgPj0gMSk7CiAgICAgfQog
CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgotICAgIENDYWxsVmFsdWUodW5z
aWduZWQgaW5kZXgsIFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdpbiwgY29uc3QgRWZmZWN0cyYgZWZm
ZWN0cywgQXJndW1lbnRzLi4uIGFyZ3VtZW50cykKLSAgICAgICAgOiBWYWx1ZShpbmRleCwgQ2hl
Y2tlZE9wY29kZSwgQ0NhbGwsIHR5cGUsIG9yaWdpbiwgYXJndW1lbnRzLi4uKQorICAgIENDYWxs
VmFsdWUoVHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luLCBjb25zdCBFZmZlY3RzJiBlZmZlY3RzLCBB
cmd1bWVudHMuLi4gYXJndW1lbnRzKQorICAgICAgICA6IFZhbHVlKENoZWNrZWRPcGNvZGUsIEND
YWxsLCB0eXBlLCBvcmlnaW4sIGFyZ3VtZW50cy4uLikKICAgICAgICAgLCBlZmZlY3RzKGVmZmVj
dHMpCiAgICAgewogICAgICAgICBSRUxFQVNFX0FTU0VSVChudW1DaGlsZHJlbigpID49IDEpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tWYWx1ZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ2hlY2tWYWx1ZS5jcHAJKHJldmlzaW9u
IDE5NjAxMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NoZWNrVmFsdWUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC00Niw4ICs0Niw4IEBAIFZhbHVlKiBDaGVja1ZhbHVlOjpjbG9uZUlt
cGwoKSBjb25zdAogfQogCiAvLyBVc2UgdGhpcyBmb3JtIGZvciBDaGVja0FkZCwgQ2hlY2tTdWIs
IGFuZCBDaGVja011bC4KLUNoZWNrVmFsdWU6OkNoZWNrVmFsdWUodW5zaWduZWQgaW5kZXgsIE9w
Y29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQpCi0g
ICAgOiBTdGFja21hcFZhbHVlKGluZGV4LCBDaGVja2VkT3Bjb2RlLCBvcGNvZGUsIGxlZnQtPnR5
cGUoKSwgb3JpZ2luKQorQ2hlY2tWYWx1ZTo6Q2hlY2tWYWx1ZShPcGNvZGUgb3Bjb2RlLCBPcmln
aW4gb3JpZ2luLCBWYWx1ZSogbGVmdCwgVmFsdWUqIHJpZ2h0KQorICAgIDogU3RhY2ttYXBWYWx1
ZShDaGVja2VkT3Bjb2RlLCBvcGNvZGUsIGxlZnQtPnR5cGUoKSwgb3JpZ2luKQogewogICAgIEFT
U0VSVChCMzo6aXNJbnQodHlwZSgpKSk7CiAgICAgQVNTRVJUKGxlZnQtPnR5cGUoKSA9PSByaWdo
dC0+dHlwZSgpKTsKQEAgLTU3LDggKzU3LDggQEAgQ2hlY2tWYWx1ZTo6Q2hlY2tWYWx1ZSh1bnNp
Z25lZCBpbmRleCwgTwogfQogCiAvLyBVc2UgdGhpcyBmb3JtIGZvciBDaGVjay4KLUNoZWNrVmFs
dWU6OkNoZWNrVmFsdWUodW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmln
aW4sIFZhbHVlKiBwcmVkaWNhdGUpCi0gICAgOiBTdGFja21hcFZhbHVlKGluZGV4LCBDaGVja2Vk
T3Bjb2RlLCBvcGNvZGUsIFZvaWQsIG9yaWdpbikKK0NoZWNrVmFsdWU6OkNoZWNrVmFsdWUoT3Bj
b2RlIG9wY29kZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIHByZWRpY2F0ZSkKKyAgICA6IFN0YWNr
bWFwVmFsdWUoQ2hlY2tlZE9wY29kZSwgb3Bjb2RlLCBWb2lkLCBvcmlnaW4pCiB7CiAgICAgQVNT
RVJUKG9wY29kZSA9PSBDaGVjayk7CiAgICAgYXBwZW5kKENvbnN0cmFpbmVkVmFsdWUocHJlZGlj
YXRlLCBWYWx1ZVJlcDo6V2FybUFueSkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzQ2hlY2tWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M0NoZWNrVmFsdWUuaAkocmV2aXNpb24gMTk2MDExKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzQ2hlY2tWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01OCwxMCArNTgsMTAgQEAgcHJp
dmF0ZToKICAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOwogCiAgICAgLy8gVXNlIHRoaXMgZm9y
bSBmb3IgQ2hlY2tBZGQsIENoZWNrU3ViLCBhbmQgQ2hlY2tNdWwuCi0gICAgSlNfRVhQT1JUX1BS
SVZBVEUgQ2hlY2tWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3Bjb2RlLCBPcmlnaW4sIFZhbHVlKiBs
ZWZ0LCBWYWx1ZSogcmlnaHQpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIENoZWNrVmFsdWUoT3Bj
b2RlLCBPcmlnaW4sIFZhbHVlKiBsZWZ0LCBWYWx1ZSogcmlnaHQpOwogCiAgICAgLy8gVXNlIHRo
aXMgZm9ybSBmb3IgQ2hlY2suCi0gICAgSlNfRVhQT1JUX1BSSVZBVEUgQ2hlY2tWYWx1ZSh1bnNp
Z25lZCBpbmRleCwgT3Bjb2RlLCBPcmlnaW4sIFZhbHVlKiBwcmVkaWNhdGUpOworICAgIEpTX0VY
UE9SVF9QUklWQVRFIENoZWNrVmFsdWUoT3Bjb2RlLCBPcmlnaW4sIFZhbHVlKiBwcmVkaWNhdGUp
OwogfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNDb25zdDMyVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNDb25zdDMyVmFsdWUuaAkocmV2aXNpb24gMTk2MDExKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzQ29uc3QzMlZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTc3LDgg
Kzc3LDggQEAgcHJvdGVjdGVkOgogCiAgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKIAotICAg
IENvbnN0MzJWYWx1ZSh1bnNpZ25lZCBpbmRleCwgT3JpZ2luIG9yaWdpbiwgaW50MzJfdCB2YWx1
ZSkKLSAgICAgICAgOiBWYWx1ZShpbmRleCwgQ2hlY2tlZE9wY29kZSwgQ29uc3QzMiwgSW50MzIs
IG9yaWdpbikKKyAgICBDb25zdDMyVmFsdWUoT3JpZ2luIG9yaWdpbiwgaW50MzJfdCB2YWx1ZSkK
KyAgICAgICAgOiBWYWx1ZShDaGVja2VkT3Bjb2RlLCBDb25zdDMyLCBJbnQzMiwgb3JpZ2luKQog
ICAgICAgICAsIG1fdmFsdWUodmFsdWUpCiAgICAgewogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0NvbnN0NjRWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0NvbnN0NjRWYWx1ZS5oCShyZXZpc2lvbiAxOTYwMTEpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdDY0VmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAt
NzcsOCArNzcsOCBAQCBwcm90ZWN0ZWQ6CiAKICAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOwog
Ci0gICAgQ29uc3Q2NFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcmlnaW4gb3JpZ2luLCBpbnQ2NF90
IHZhbHVlKQotICAgICAgICA6IFZhbHVlKGluZGV4LCBDaGVja2VkT3Bjb2RlLCBDb25zdDY0LCBJ
bnQ2NCwgb3JpZ2luKQorICAgIENvbnN0NjRWYWx1ZShPcmlnaW4gb3JpZ2luLCBpbnQ2NF90IHZh
bHVlKQorICAgICAgICA6IFZhbHVlKENoZWNrZWRPcGNvZGUsIENvbnN0NjQsIEludDY0LCBvcmln
aW4pCiAgICAgICAgICwgbV92YWx1ZSh2YWx1ZSkKICAgICB7CiAgICAgfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3REb3VibGVWYWx1ZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnN0RG91YmxlVmFsdWUuaAkocmV2aXNpb24gMTk2
MDExKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3REb3VibGVWYWx1ZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC03MCw4ICs3MCw4IEBAIHByb3RlY3RlZDoKIHByaXZhdGU6CiAgICAg
ZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKIAotICAgIENvbnN0RG91YmxlVmFsdWUodW5zaWduZWQg
aW5kZXgsIE9yaWdpbiBvcmlnaW4sIGRvdWJsZSB2YWx1ZSkKLSAgICAgICAgOiBWYWx1ZShpbmRl
eCwgQ2hlY2tlZE9wY29kZSwgQ29uc3REb3VibGUsIERvdWJsZSwgb3JpZ2luKQorICAgIENvbnN0
RG91YmxlVmFsdWUoT3JpZ2luIG9yaWdpbiwgZG91YmxlIHZhbHVlKQorICAgICAgICA6IFZhbHVl
KENoZWNrZWRPcGNvZGUsIENvbnN0RG91YmxlLCBEb3VibGUsIG9yaWdpbikKICAgICAgICAgLCBt
X3ZhbHVlKHZhbHVlKQogICAgIHsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNDb25zdEZsb2F0VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYjMvQjNDb25zdEZsb2F0VmFsdWUuaAkocmV2aXNpb24gMTk2MDExKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzQ29uc3RGbG9hdFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTY4
LDggKzY4LDggQEAgcHJvdGVjdGVkOgogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgUHJvY2Vk
dXJlOwogCi0gICAgQ29uc3RGbG9hdFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcmlnaW4gb3JpZ2lu
LCBmbG9hdCB2YWx1ZSkKLSAgICAgICAgOiBWYWx1ZShpbmRleCwgQ2hlY2tlZE9wY29kZSwgQ29u
c3RGbG9hdCwgRmxvYXQsIG9yaWdpbikKKyAgICBDb25zdEZsb2F0VmFsdWUoT3JpZ2luIG9yaWdp
biwgZmxvYXQgdmFsdWUpCisgICAgICAgIDogVmFsdWUoQ2hlY2tlZE9wY29kZSwgQ29uc3RGbG9h
dCwgRmxvYXQsIG9yaWdpbikKICAgICAgICAgLCBtX3ZhbHVlKHZhbHVlKQogICAgIHsKICAgICB9
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdFB0clZhbHVlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29uc3RQdHJWYWx1ZS5oCShyZXZp
c2lvbiAxOTYwMTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb25zdFB0clZhbHVl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
NS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtNTQsMTMgKzU0LDEzIEBAIHByaXZhdGU6CiAgICAgZnJpZW5kIGNs
YXNzIFByb2NlZHVyZTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIFQ+Ci0gICAgQ29uc3RQdHJW
YWx1ZSh1bnNpZ25lZCBpbmRleCwgT3JpZ2luIG9yaWdpbiwgVCogcG9pbnRlcikKLSAgICAgICAg
OiBDb25zdFB0clZhbHVlQmFzZShpbmRleCwgb3JpZ2luLCBiaXR3aXNlX2Nhc3Q8aW50cHRyX3Q+
KHBvaW50ZXIpKQorICAgIENvbnN0UHRyVmFsdWUoT3JpZ2luIG9yaWdpbiwgVCogcG9pbnRlcikK
KyAgICAgICAgOiBDb25zdFB0clZhbHVlQmFzZShvcmlnaW4sIGJpdHdpc2VfY2FzdDxpbnRwdHJf
dD4ocG9pbnRlcikpCiAgICAgewogICAgIH0KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgotICAg
IENvbnN0UHRyVmFsdWUodW5zaWduZWQgaW5kZXgsIE9yaWdpbiBvcmlnaW4sIFQgcG9pbnRlcikK
LSAgICAgICAgOiBDb25zdFB0clZhbHVlQmFzZShpbmRleCwgb3JpZ2luLCBzdGF0aWNfY2FzdDxp
bnRwdHJfdD4ocG9pbnRlcikpCisgICAgQ29uc3RQdHJWYWx1ZShPcmlnaW4gb3JpZ2luLCBUIHBv
aW50ZXIpCisgICAgICAgIDogQ29uc3RQdHJWYWx1ZUJhc2Uob3JpZ2luLCBzdGF0aWNfY2FzdDxp
bnRwdHJfdD4ocG9pbnRlcikpCiAgICAgewogICAgIH0KIH07CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNDb250cm9sVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM0NvbnRyb2xWYWx1ZS5jcHAJKHJldmlzaW9uIDE5NjAxMSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0NvbnRyb2xWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTU5LDkgKzU5LDEwIEBAIHZvaWQgQ29udHJvbFZhbHVlOjpjb252ZXJ0VG9KdW1wKEJhc2lj
QmwKIAogICAgIHRoaXMtPkNvbnRyb2xWYWx1ZTo6fkNvbnRyb2xWYWx1ZSgpOwogCi0gICAgbmV3
ICh0aGlzKSBDb250cm9sVmFsdWUoaW5kZXgsIEp1bXAsIG9yaWdpbiwgRnJlcXVlbnRlZEJsb2Nr
KGRlc3RpbmF0aW9uKSk7CisgICAgbmV3ICh0aGlzKSBDb250cm9sVmFsdWUoSnVtcCwgb3JpZ2lu
LCBGcmVxdWVudGVkQmxvY2soZGVzdGluYXRpb24pKTsKIAogICAgIHRoaXMtPm93bmVyID0gb3du
ZXI7CisgICAgdGhpcy0+bV9pbmRleCA9IGluZGV4OwogfQogCiB2b2lkIENvbnRyb2xWYWx1ZTo6
Y29udmVydFRvT29wcygpCkBAIC03Miw5ICs3MywxMCBAQCB2b2lkIENvbnRyb2xWYWx1ZTo6Y29u
dmVydFRvT29wcygpCiAKICAgICB0aGlzLT5Db250cm9sVmFsdWU6On5Db250cm9sVmFsdWUoKTsK
IAotICAgIG5ldyAodGhpcykgQ29udHJvbFZhbHVlKGluZGV4LCBPb3BzLCBvcmlnaW4pOworICAg
IG5ldyAodGhpcykgQ29udHJvbFZhbHVlKE9vcHMsIG9yaWdpbik7CiAKICAgICB0aGlzLT5vd25l
ciA9IG93bmVyOworICAgIHRoaXMtPm1faW5kZXggPSBpbmRleDsKIH0KIAogdm9pZCBDb250cm9s
VmFsdWU6OmR1bXBNZXRhKENvbW1hUHJpbnRlciYgY29tbWEsIFByaW50U3RyZWFtJiBvdXQpIGNv
bnN0CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb250cm9sVmFsdWUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNDb250cm9sVmFsdWUuaAkocmV2
aXNpb24gMTk2MDExKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzQ29udHJvbFZhbHVl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEwOSw4ICsxMDksOCBAQCBwcm90ZWN0ZWQ6CiAKICAgICAv
LyBVc2UgdGhpcyBmb3Igc3ViY2xhc3Nlcy4KICAgICB0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1
bWVudHM+Ci0gICAgQ29udHJvbFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBU
eXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4sIEFyZ3VtZW50cy4uLiBhcmd1bWVudHMpCi0gICAgICAg
IDogVmFsdWUoaW5kZXgsIENoZWNrZWRPcGNvZGUsIG9wY29kZSwgdHlwZSwgb3JpZ2luLCBhcmd1
bWVudHMuLi4pCisgICAgQ29udHJvbFZhbHVlKE9wY29kZSBvcGNvZGUsIFR5cGUgdHlwZSwgT3Jp
Z2luIG9yaWdpbiwgQXJndW1lbnRzLi4uIGFyZ3VtZW50cykKKyAgICAgICAgOiBWYWx1ZShDaGVj
a2VkT3Bjb2RlLCBvcGNvZGUsIHR5cGUsIG9yaWdpbiwgYXJndW1lbnRzLi4uKQogICAgIHsKICAg
ICAgICAgQVNTRVJUKGFjY2VwdHMob3Bjb2RlKSk7CiAgICAgfQpAQCAtMTIyLDIyICsxMjIsMjIg
QEAgcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgUHJvY2VkdXJlOwogCiAgICAgLy8gVXNlIHRo
aXMgZm9yIE9vcHMuCi0gICAgQ29udHJvbFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bj
b2RlLCBPcmlnaW4gb3JpZ2luKQotICAgICAgICA6IFZhbHVlKGluZGV4LCBDaGVja2VkT3Bjb2Rl
LCBvcGNvZGUsIFZvaWQsIG9yaWdpbikKKyAgICBDb250cm9sVmFsdWUoT3Bjb2RlIG9wY29kZSwg
T3JpZ2luIG9yaWdpbikKKyAgICAgICAgOiBWYWx1ZShDaGVja2VkT3Bjb2RlLCBvcGNvZGUsIFZv
aWQsIG9yaWdpbikKICAgICB7CiAgICAgICAgIEFTU0VSVChvcGNvZGUgPT0gT29wcyk7CiAgICAg
fQogCiAgICAgLy8gVXNlIHRoaXMgZm9yIFJldHVybi4KLSAgICBDb250cm9sVmFsdWUodW5zaWdu
ZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiByZXN1bHQpCi0g
ICAgICAgIDogVmFsdWUoaW5kZXgsIENoZWNrZWRPcGNvZGUsIG9wY29kZSwgVm9pZCwgb3JpZ2lu
LCByZXN1bHQpCisgICAgQ29udHJvbFZhbHVlKE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4s
IFZhbHVlKiByZXN1bHQpCisgICAgICAgIDogVmFsdWUoQ2hlY2tlZE9wY29kZSwgb3Bjb2RlLCBW
b2lkLCBvcmlnaW4sIHJlc3VsdCkKICAgICB7CiAgICAgICAgIEFTU0VSVChvcGNvZGUgPT0gUmV0
dXJuKTsKICAgICB9CiAKICAgICAvLyBVc2UgdGhpcyBmb3IgSnVtcC4KLSAgICBDb250cm9sVmFs
dWUodW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4sIGNvbnN0IEZy
ZXF1ZW50ZWRCbG9jayYgdGFyZ2V0KQotICAgICAgICA6IFZhbHVlKGluZGV4LCBDaGVja2VkT3Bj
b2RlLCBvcGNvZGUsIFZvaWQsIG9yaWdpbikKKyAgICBDb250cm9sVmFsdWUoT3Bjb2RlIG9wY29k
ZSwgT3JpZ2luIG9yaWdpbiwgY29uc3QgRnJlcXVlbnRlZEJsb2NrJiB0YXJnZXQpCisgICAgICAg
IDogVmFsdWUoQ2hlY2tlZE9wY29kZSwgb3Bjb2RlLCBWb2lkLCBvcmlnaW4pCiAgICAgewogICAg
ICAgICBBU1NFUlQob3Bjb2RlID09IEp1bXApOwogICAgICAgICBtX3N1Y2Nlc3NvcnMuYXBwZW5k
KHRhcmdldCk7CkBAIC0xNDUsOSArMTQ1LDkgQEAgcHJpdmF0ZToKIAogICAgIC8vIFVzZSB0aGlz
IGZvciBCcmFuY2guCiAgICAgQ29udHJvbFZhbHVlKAotICAgICAgICB1bnNpZ25lZCBpbmRleCwg
T3Bjb2RlIG9wY29kZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIHByZWRpY2F0ZSwKKyAgICAgICAg
T3Bjb2RlIG9wY29kZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIHByZWRpY2F0ZSwKICAgICAgICAg
Y29uc3QgRnJlcXVlbnRlZEJsb2NrJiB5ZXMsIGNvbnN0IEZyZXF1ZW50ZWRCbG9jayYgbm8pCi0g
ICAgICAgIDogVmFsdWUoaW5kZXgsIENoZWNrZWRPcGNvZGUsIG9wY29kZSwgVm9pZCwgb3JpZ2lu
LCBwcmVkaWNhdGUpCisgICAgICAgIDogVmFsdWUoQ2hlY2tlZE9wY29kZSwgb3Bjb2RlLCBWb2lk
LCBvcmlnaW4sIHByZWRpY2F0ZSkKICAgICB7CiAgICAgICAgIEFTU0VSVChvcGNvZGUgPT0gQnJh
bmNoKTsKICAgICAgICAgbV9zdWNjZXNzb3JzLmFwcGVuZCh5ZXMpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzRWZmZWN0cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzRWZmZWN0cy5jcHAJKHJldmlzaW9uIDE5NjAxMSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9iMy9CM0VmZmVjdHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NCw3ICs0
NCw3IEBAIGJvb2wgaW50ZXJmZXJlc1dpdGhUZXJtaW5hbChjb25zdCBFZmZlY3QKIHsKICAgICBp
ZiAoIXRlcm1pbmFsLnRlcm1pbmFsKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJu
IG90aGVyLnRlcm1pbmFsIHx8IG90aGVyLmNvbnRyb2xEZXBlbmRlbnQgfHwgb3RoZXIud3JpdGVz
U1NBU3RhdGUgfHwgb3RoZXIud3JpdGVzOworICAgIHJldHVybiBvdGhlci50ZXJtaW5hbCB8fCBv
dGhlci5jb250cm9sRGVwZW5kZW50IHx8IG90aGVyLndyaXRlc0xvY2FsU3RhdGUgfHwgb3RoZXIu
d3JpdGVzOwogfQogCiBib29sIGludGVyZmVyZXNXaXRoRXhpdFNpZGV3YXlzKGNvbnN0IEVmZmVj
dHMmIGV4aXRzU2lkZXdheXMsIGNvbnN0IEVmZmVjdHMmIG90aGVyKQpAQCAtNTQsMTEgKzU0LDEx
IEBAIGJvb2wgaW50ZXJmZXJlc1dpdGhFeGl0U2lkZXdheXMoY29uc3QgRWYKICAgICByZXR1cm4g
b3RoZXIuY29udHJvbERlcGVuZGVudCB8fCBvdGhlci53cml0ZXM7CiB9CiAKLWJvb2wgaW50ZXJm
ZXJlc1dpdGhXcml0ZXNTU0FTdGF0ZShjb25zdCBFZmZlY3RzJiB3cml0ZXNTU0FTdGF0ZSwgY29u
c3QgRWZmZWN0cyYgb3RoZXIpCitib29sIGludGVyZmVyZXNXaXRoV3JpdGVzTG9jYWxTdGF0ZShj
b25zdCBFZmZlY3RzJiB3cml0ZXNMb2NhbFN0YXRlLCBjb25zdCBFZmZlY3RzJiBvdGhlcikKIHsK
LSAgICBpZiAoIXdyaXRlc1NTQVN0YXRlLndyaXRlc1NTQVN0YXRlKQorICAgIGlmICghd3JpdGVz
TG9jYWxTdGF0ZS53cml0ZXNMb2NhbFN0YXRlKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
cmV0dXJuIG90aGVyLndyaXRlc1NTQVN0YXRlIHx8IG90aGVyLnJlYWRzU1NBU3RhdGU7CisgICAg
cmV0dXJuIG90aGVyLndyaXRlc0xvY2FsU3RhdGUgfHwgb3RoZXIucmVhZHNMb2NhbFN0YXRlOwog
fQogCiB9IC8vIGFub255bW91cyBuYW1lc3BhY2UKQEAgLTY5LDcgKzY5LDcgQEAgYm9vbCBFZmZl
Y3RzOjppbnRlcmZlcmVzKGNvbnN0IEVmZmVjdHMmIAogICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICBpZiAoaW50ZXJmZXJlc1dpdGhFeGl0U2lkZXdheXMoKnRoaXMsIG90aGVyKSB8fCBpbnRlcmZl
cmVzV2l0aEV4aXRTaWRld2F5cyhvdGhlciwgKnRoaXMpKQogICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICBpZiAoaW50ZXJmZXJlc1dpdGhXcml0ZXNTU0FTdGF0ZSgqdGhpcywgb3RoZXIpIHx8IGlu
dGVyZmVyZXNXaXRoV3JpdGVzU1NBU3RhdGUob3RoZXIsICp0aGlzKSkKKyAgICBpZiAoaW50ZXJm
ZXJlc1dpdGhXcml0ZXNMb2NhbFN0YXRlKCp0aGlzLCBvdGhlcikgfHwgaW50ZXJmZXJlc1dpdGhX
cml0ZXNMb2NhbFN0YXRlKG90aGVyLCAqdGhpcykpCiAgICAgICAgIHJldHVybiB0cnVlOwogICAg
IHJldHVybiB3cml0ZXMub3ZlcmxhcHMob3RoZXIud3JpdGVzKQogICAgICAgICB8fCB3cml0ZXMu
b3ZlcmxhcHMob3RoZXIucmVhZHMpCkBAIC04NSwxMCArODUsMTAgQEAgdm9pZCBFZmZlY3RzOjpk
dW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbgogICAgICAgICBvdXQucHJpbnQoY29tbWEsICJFeGl0
c1NpZGV3YXlzIik7CiAgICAgaWYgKGNvbnRyb2xEZXBlbmRlbnQpCiAgICAgICAgIG91dC5wcmlu
dChjb21tYSwgIkNvbnRyb2xEZXBlbmRlbnQiKTsKLSAgICBpZiAod3JpdGVzU1NBU3RhdGUpCi0g
ICAgICAgIG91dC5wcmludChjb21tYSwgIldyaXRlc1NTQVN0YXRlIik7Ci0gICAgaWYgKHJlYWRz
U1NBU3RhdGUpCi0gICAgICAgIG91dC5wcmludChjb21tYSwgIlJlYWRzU1NBU3RhdGUiKTsKKyAg
ICBpZiAod3JpdGVzTG9jYWxTdGF0ZSkKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiV3JpdGVz
TG9jYWxTdGF0ZSIpOworICAgIGlmIChyZWFkc0xvY2FsU3RhdGUpCisgICAgICAgIG91dC5wcmlu
dChjb21tYSwgIlJlYWRzTG9jYWxTdGF0ZSIpOwogICAgIGlmICh3cml0ZXMpCiAgICAgICAgIG91
dC5wcmludChjb21tYSwgIldyaXRlczoiLCB3cml0ZXMpOwogICAgIGlmIChyZWFkcykKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0VmZmVjdHMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvQjNFZmZlY3RzLmgJKHJldmlzaW9uIDE5NjAxMSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0VmZmVjdHMuaAkod29ya2luZyBjb3B5KQpAQCAtNDgs
MTQgKzQ4LDE0IEBAIHN0cnVjdCBFZmZlY3RzIHsKICAgICAvLyBUcnVlIGlmIHRoZSBpbnN0cnVj
dGlvbiBtYXkgY2hhbmdlIHNlbWFudGljcyBpZiBob2lzdGVkIGFib3ZlIHNvbWUgY29udHJvbCBm
bG93LgogICAgIGJvb2wgY29udHJvbERlcGVuZGVudCB7IGZhbHNlIH07CiAKLSAgICAvLyBUcnVl
IGlmIHRoaXMgd3JpdGVzIHRvIHRoZSBTU0Egc3RhdGUuIE9wZXJhdGlvbnMgdGhhdCB3cml0ZSBT
U0Egc3RhdGUgZG9uJ3Qgd3JpdGUgdG8gYW55dGhpbmcKLSAgICAvLyBpbiAibWVtb3J5IiBidXQg
dGhleSBoYXZlIGEgc2lkZS1lZmZlY3QgYW55d2F5LiBUaGlzIGlzIGZvciBtb2RlbGluZyBVcHNp
bG9ucy4gWW91IGNhbiBpZ25vcmUKLSAgICAvLyB0aGlzIGlmIHlvdSBoYXZlIHlvdXIgb3duIHdh
eSBvZiBtb2RlbGluZyBVcHNpbG9ucyBvciBpZiB5b3UgaW50ZW5kIHRvIGp1c3QgcmVidWlsZCB0
aGVtCisgICAgLy8gVHJ1ZSBpZiB0aGlzIHdyaXRlcyB0byB0aGUgbG9jYWwgc3RhdGUuIE9wZXJh
dGlvbnMgdGhhdCB3cml0ZSBsb2NhbCBzdGF0ZSBkb24ndCB3cml0ZSB0byBhbnl0aGluZworICAg
IC8vIGluICJtZW1vcnkiIGJ1dCB0aGV5IGhhdmUgYSBzaWRlLWVmZmVjdCBhbnl3YXkuIFRoaXMg
aXMgZm9yIG1vZGVsaW5nIFVwc2lsb25zIGFuZCBTZXRzLiBZb3UgY2FuIGlnbm9yZQorICAgIC8v
IHRoaXMgaWYgeW91IGhhdmUgeW91ciBvd24gd2F5IG9mIG1vZGVsaW5nIFVwc2lsb25zIGFuZCBT
ZXRzIG9yIGlmIHlvdSBpbnRlbmQgdG8ganVzdCByZWJ1aWxkIHRoZW0KICAgICAvLyBhbnl3YXku
Ci0gICAgYm9vbCB3cml0ZXNTU0FTdGF0ZSB7IGZhbHNlIH07CisgICAgYm9vbCB3cml0ZXNMb2Nh
bFN0YXRlIHsgZmFsc2UgfTsKIAotICAgIC8vIFRydWUgaWYgdGhpcyByZWFkcyBmcm9tIHRoZSBT
U0Egc3RhdGUuIFRoaXMgaXMgb25seSB1c2VkIGZvciBQaGkuCi0gICAgYm9vbCByZWFkc1NTQVN0
YXRlIHsgZmFsc2UgfTsKKyAgICAvLyBUcnVlIGlmIHRoaXMgcmVhZHMgZnJvbSB0aGUgbG9jYWwg
c3RhdGUuIFRoaXMgaXMgb25seSB1c2VkIGZvciBQaGkgYW5kIEdldC4KKyAgICBib29sIHJlYWRz
TG9jYWxTdGF0ZSB7IGZhbHNlIH07CiAKICAgICBIZWFwUmFuZ2Ugd3JpdGVzOwogICAgIEhlYXBS
YW5nZSByZWFkczsKQEAgLTc3LDcgKzc3LDcgQEAgc3RydWN0IEVmZmVjdHMgewogCiAgICAgYm9v
bCBtdXN0RXhlY3V0ZSgpIGNvbnN0CiAgICAgewotICAgICAgICByZXR1cm4gdGVybWluYWwgfHwg
ZXhpdHNTaWRld2F5cyB8fCB3cml0ZXNTU0FTdGF0ZSB8fCB3cml0ZXM7CisgICAgICAgIHJldHVy
biB0ZXJtaW5hbCB8fCBleGl0c1NpZGV3YXlzIHx8IHdyaXRlc0xvY2FsU3RhdGUgfHwgd3JpdGVz
OwogICAgIH0KIAogICAgIC8vIFJldHVybnMgdHJ1ZSBpZiByZW9yZGVyaW5nIGluc3RydWN0aW9u
cyB3aXRoIHRoZXNlIHJlc3BlY3RpdmUgZWZmZWN0cyB3b3VsZCBjaGFuZ2UgcHJvZ3JhbQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRWxpbWluYXRlQ29tbW9uU3ViZXhwcmVzc2lv
bnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0VsaW1pbmF0
ZUNvbW1vblN1YmV4cHJlc3Npb25zLmNwcAkocmV2aXNpb24gMTk2MDExKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzRWxpbWluYXRlQ29tbW9uU3ViZXhwcmVzc2lvbnMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MSw2ICs0MSw4IEBACiAjaW5jbHVkZSAiQjNTdGFja1Nsb3QuaCIKICNp
bmNsdWRlICJCM1ZhbHVlS2V5LmgiCiAjaW5jbHVkZSAiQjNWYWx1ZUlubGluZXMuaCIKKyNpbmNs
dWRlICJCM1ZhcmlhYmxlLmgiCisjaW5jbHVkZSAiQjNWYXJpYWJsZVZhbHVlLmgiCiAjaW5jbHVk
ZSAiREZHR3JhcGguaCIKICNpbmNsdWRlIDx3dGYvQ29tbWFQcmludGVyLmg+CiAjaW5jbHVkZSA8
d3RmL0hhc2hNYXAuaD4KQEAgLTEzMSwxMiArMTMzLDEwIEBAIHB1YmxpYzoKICAgICAgICAgICAg
IG1faW1wdXJlQmxvY2tEYXRhW21fYmxvY2tdID0gbV9kYXRhOwogICAgICAgICB9CiAKLSAgICAg
ICAgZm9yIChTbG90QmFzZVZhbHVlKiBzdGFjayA6IG1fc3RhY2tzKQotICAgICAgICAgICAgbV9p
bnNlcnRpb25TZXQuaW5zZXJ0VmFsdWUoMCwgc3RhY2spOwogICAgICAgICBmb3IgKEJhc2ljQmxv
Y2sqIGJsb2NrIDogbV9wcm9jKSB7CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHZhbHVlSW5k
ZXggPSAwOyB2YWx1ZUluZGV4IDwgYmxvY2stPnNpemUoKTsgKyt2YWx1ZUluZGV4KSB7Ci0gICAg
ICAgICAgICAgICAgYXV0byBpdGVyID0gbV9zdG9yZXMuZmluZChibG9jay0+YXQodmFsdWVJbmRl
eCkpOwotICAgICAgICAgICAgICAgIGlmIChpdGVyID09IG1fc3RvcmVzLmVuZCgpKQorICAgICAg
ICAgICAgICAgIGF1dG8gaXRlciA9IG1fc2V0cy5maW5kKGJsb2NrLT5hdCh2YWx1ZUluZGV4KSk7
CisgICAgICAgICAgICAgICAgaWYgKGl0ZXIgPT0gbV9zZXRzLmVuZCgpKQogICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKIAogICAgICAgICAgICAgICAgIGZvciAoVmFsdWUqIHZhbHVlIDog
aXRlci0+dmFsdWUpCkBAIC0zNjksMjEgKzM2OSwxOSBAQCBwcml2YXRlOgogICAgICAgICAvLyBG
SVhNRTogSXQgd291bGQgYmUgd2F5IGJldHRlciBpZiB0aGlzIHBoYXNlIGp1c3QgZGlkIFNTQSBj
YWxjdWxhdGlvbiBkaXJlY3RseS4KICAgICAgICAgLy8gUmlnaHQgbm93IHdlJ3JlIHJlbHlpbmcg
b24gdGhlIGZhY3QgdGhhdCBDU0UncyBwb3NpdGlvbiBpbiB0aGUgcGhhc2Ugb3JkZXIgaXMKICAg
ICAgICAgLy8gYWxtb3N0IHJpZ2h0IGJlZm9yZSBTU0EgZml4dXAuCi0gICAgICAgICAgICAKLSAg
ICAgICAgU2xvdEJhc2VWYWx1ZSogc3RhY2sgPSBtX3Byb2MuYWRkPFNsb3RCYXNlVmFsdWU+KAot
ICAgICAgICAgICAgbV92YWx1ZS0+b3JpZ2luKCksIG1fcHJvYy5hZGRBbm9ueW1vdXNTdGFja1Ns
b3QobV92YWx1ZS0+dHlwZSgpKSk7Ci0gICAgICAgIG1fc3RhY2tzLmFwcGVuZChzdGFjayk7CiAK
LSAgICAgICAgTWVtb3J5VmFsdWUqIGxvYWQgPSBtX2luc2VydGlvblNldC5pbnNlcnQ8TWVtb3J5
VmFsdWU+KAotICAgICAgICAgICAgbV9pbmRleCwgTG9hZCwgbV92YWx1ZS0+dHlwZSgpLCBtX3Zh
bHVlLT5vcmlnaW4oKSwgc3RhY2spOworICAgICAgICBWYXJpYWJsZSogdmFyaWFibGUgPSBtX3By
b2MuYWRkVmFyaWFibGUobV92YWx1ZS0+dHlwZSgpKTsKKworICAgICAgICBWYXJpYWJsZVZhbHVl
KiBnZXQgPSBtX2luc2VydGlvblNldC5pbnNlcnQ8VmFyaWFibGVWYWx1ZT4oCisgICAgICAgICAg
ICBtX2luZGV4LCBHZXQsIG1fdmFsdWUtPm9yaWdpbigpLCB2YXJpYWJsZSk7CiAgICAgICAgIGlm
ICh2ZXJib3NlKQotICAgICAgICAgICAgZGF0YUxvZygiICAgIEluc2VydGluZyBsb2FkIG9mIHZh
bHVlOiAiLCAqbG9hZCwgIlxuIik7Ci0gICAgICAgIG1fdmFsdWUtPnJlcGxhY2VXaXRoSWRlbnRp
dHkobG9hZCk7CisgICAgICAgICAgICBkYXRhTG9nKCIgICAgSW5zZXJ0aW5nIGdldCBvZiB2YWx1
ZTogIiwgKmdldCwgIlxuIik7CisgICAgICAgIG1fdmFsdWUtPnJlcGxhY2VXaXRoSWRlbnRpdHko
Z2V0KTsKICAgICAgICAgICAgIAogICAgICAgICBmb3IgKE1lbW9yeVZhbHVlKiBtYXRjaCA6IG1h
dGNoZXMpIHsKLSAgICAgICAgICAgIFZlY3RvcjxWYWx1ZSo+JiBzdG9yZXMgPSBtX3N0b3Jlcy5h
ZGQobWF0Y2gsIFZlY3RvcjxWYWx1ZSo+KCkpLml0ZXJhdG9yLT52YWx1ZTsKKyAgICAgICAgICAg
IFZlY3RvcjxWYWx1ZSo+JiBzZXRzID0gbV9zZXRzLmFkZChtYXRjaCwgVmVjdG9yPFZhbHVlKj4o
KSkuaXRlcmF0b3ItPnZhbHVlOwogCi0gICAgICAgICAgICBWYWx1ZSogdmFsdWUgPSByZXBsYWNl
KG1hdGNoLCBzdG9yZXMpOworICAgICAgICAgICAgVmFsdWUqIHZhbHVlID0gcmVwbGFjZShtYXRj
aCwgc2V0cyk7CiAgICAgICAgICAgICBpZiAoIXZhbHVlKSB7CiAgICAgICAgICAgICAgICAgaWYg
KG1hdGNoLT5pc1N0b3JlKCkpCiAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gbWF0Y2gtPmNo
aWxkKDApOwpAQCAtMzkxLDggKzM4OSw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAg
IHZhbHVlID0gbWF0Y2g7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICBWYWx1ZSogc3RvcmUgPSBtX3Byb2MuYWRkPE1lbW9yeVZhbHVlPihTdG9yZSwgbV92YWx1
ZS0+b3JpZ2luKCksIHZhbHVlLCBzdGFjayk7Ci0gICAgICAgICAgICBzdG9yZXMuYXBwZW5kKHN0
b3JlKTsKKyAgICAgICAgICAgIFZhbHVlKiBzZXQgPSBtX3Byb2MuYWRkPFZhcmlhYmxlVmFsdWU+
KFNldCwgbV92YWx1ZS0+b3JpZ2luKCksIHZhcmlhYmxlLCB2YWx1ZSk7CisgICAgICAgICAgICBz
ZXRzLmFwcGVuZChzZXQpOwogICAgICAgICB9CiAKICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC00
OTksOCArNDk3LDcgQEAgcHJpdmF0ZToKICAgICB1bnNpZ25lZCBtX2luZGV4OwogICAgIFZhbHVl
KiBtX3ZhbHVlOwogCi0gICAgVmVjdG9yPFNsb3RCYXNlVmFsdWUqPiBtX3N0YWNrczsKLSAgICBI
YXNoTWFwPFZhbHVlKiwgVmVjdG9yPFZhbHVlKj4+IG1fc3RvcmVzOworICAgIEhhc2hNYXA8VmFs
dWUqLCBWZWN0b3I8VmFsdWUqPj4gbV9zZXRzOwogCiAgICAgSW5zZXJ0aW9uU2V0IG1faW5zZXJ0
aW9uU2V0OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNGaXhTU0EuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0ZpeFNTQS5jcHAJKHJldmlz
aW9uIDE5NjAxMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0ZpeFNTQS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM0LDE0ICszNCwxMyBAQAogI2luY2x1ZGUgIkIzRG9taW5hdG9ycy5o
IgogI2luY2x1ZGUgIkIzSW5kZXhTZXQuaCIKICNpbmNsdWRlICJCM0luc2VydGlvblNldElubGlu
ZXMuaCIKLSNpbmNsdWRlICJCM01lbW9yeVZhbHVlLmgiCiAjaW5jbHVkZSAiQjNQaGFzZVNjb3Bl
LmgiCiAjaW5jbHVkZSAiQjNQcm9jZWR1cmVJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQjNTU0FDYWxj
dWxhdG9yLmgiCi0jaW5jbHVkZSAiQjNTbG90QmFzZVZhbHVlLmgiCi0jaW5jbHVkZSAiQjNTdGFj
a1Nsb3QuaCIKICNpbmNsdWRlICJCM1Vwc2lsb25WYWx1ZS5oIgogI2luY2x1ZGUgIkIzVmFsdWVJ
bmxpbmVzLmgiCisjaW5jbHVkZSAiQjNWYXJpYWJsZS5oIgorI2luY2x1ZGUgIkIzVmFyaWFibGVW
YWx1ZS5oIgogI2luY2x1ZGUgPHd0Zi9Db21tYVByaW50ZXIuaD4KIAogbmFtZXNwYWNlIEpTQyB7
IG5hbWVzcGFjZSBCMyB7CkBAIC01MiwyMyArNTEsMTYgQEAgY29uc3QgYm9vbCB2ZXJib3NlID0g
ZmFsc2U7CiAKIHZvaWQgZGVtb3RlVmFsdWVzKFByb2NlZHVyZSYgcHJvYywgY29uc3QgSW5kZXhT
ZXQ8VmFsdWU+JiB2YWx1ZXMpCiB7Ci0gICAgSGFzaE1hcDxWYWx1ZSosIFNsb3RCYXNlVmFsdWUq
PiBtYXA7Ci0gICAgSGFzaE1hcDxWYWx1ZSosIFNsb3RCYXNlVmFsdWUqPiBwaGlNYXA7CisgICAg
SGFzaE1hcDxWYWx1ZSosIFZhcmlhYmxlKj4gbWFwOworICAgIEhhc2hNYXA8VmFsdWUqLCBWYXJp
YWJsZSo+IHBoaU1hcDsKIAogICAgIC8vIENyZWF0ZSBzdGFjayBzbG90cy4KLSAgICBJbnNlcnRp
b25TZXQgaW5zZXJ0aW9uU2V0KHByb2MpOwogICAgIGZvciAoVmFsdWUqIHZhbHVlIDogdmFsdWVz
LnZhbHVlcyhwcm9jLnZhbHVlcygpKSkgewotICAgICAgICBTbG90QmFzZVZhbHVlKiBzdGFjayA9
IGluc2VydGlvblNldC5pbnNlcnQ8U2xvdEJhc2VWYWx1ZT4oCi0gICAgICAgICAgICAwLCB2YWx1
ZS0+b3JpZ2luKCksIHByb2MuYWRkQW5vbnltb3VzU3RhY2tTbG90KHZhbHVlLT50eXBlKCkpKTsK
LSAgICAgICAgbWFwLmFkZCh2YWx1ZSwgc3RhY2spOwotCi0gICAgICAgIGlmICh2YWx1ZS0+b3Bj
b2RlKCkgPT0gUGhpKSB7Ci0gICAgICAgICAgICBTbG90QmFzZVZhbHVlKiBwaGlTdGFjayA9IGlu
c2VydGlvblNldC5pbnNlcnQ8U2xvdEJhc2VWYWx1ZT4oCi0gICAgICAgICAgICAgICAgMCwgdmFs
dWUtPm9yaWdpbigpLCBwcm9jLmFkZEFub255bW91c1N0YWNrU2xvdCh2YWx1ZS0+dHlwZSgpKSk7
Ci0gICAgICAgICAgICBwaGlNYXAuYWRkKHZhbHVlLCBwaGlTdGFjayk7Ci0gICAgICAgIH0KKyAg
ICAgICAgbWFwLmFkZCh2YWx1ZSwgcHJvYy5hZGRWYXJpYWJsZSh2YWx1ZS0+dHlwZSgpKSk7CisK
KyAgICAgICAgaWYgKHZhbHVlLT5vcGNvZGUoKSA9PSBQaGkpCisgICAgICAgICAgICBwaGlNYXAu
YWRkKHZhbHVlLCBwcm9jLmFkZFZhcmlhYmxlKHZhbHVlLT50eXBlKCkpKTsKICAgICB9Ci0gICAg
aW5zZXJ0aW9uU2V0LmV4ZWN1dGUocHJvY1swXSk7CiAKICAgICBpZiAodmVyYm9zZSkgewogICAg
ICAgICBkYXRhTG9nKCJEZW1vdGluZyB2YWx1ZXMgYXMgZm9sbG93czpcbiIpOwpAQCAtODUsMzYg
Kzc3LDM3IEBAIHZvaWQgZGVtb3RlVmFsdWVzKFByb2NlZHVyZSYgcHJvYywgY29uc3QKICAgICB9
CiAKICAgICAvLyBDaGFuZ2UgYWNjZXNzZXMgdG8gdGhlIHZhbHVlcyB0byBhY2Nlc3NlcyB0byB0
aGUgc3RhY2sgc2xvdHMuCisgICAgSW5zZXJ0aW9uU2V0IGluc2VydGlvblNldChwcm9jKTsKICAg
ICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogcHJvYykgewogICAgICAgICBmb3IgKHVuc2lnbmVk
IHZhbHVlSW5kZXggPSAwOyB2YWx1ZUluZGV4IDwgYmxvY2stPnNpemUoKTsgKyt2YWx1ZUluZGV4
KSB7CiAgICAgICAgICAgICBWYWx1ZSogdmFsdWUgPSBibG9jay0+YXQodmFsdWVJbmRleCk7CiAK
ICAgICAgICAgICAgIGlmICh2YWx1ZS0+b3Bjb2RlKCkgPT0gUGhpKSB7Ci0gICAgICAgICAgICAg
ICAgaWYgKFNsb3RCYXNlVmFsdWUqIHNsb3RCYXNlID0gcGhpTWFwLmdldCh2YWx1ZSkpIHsKKyAg
ICAgICAgICAgICAgICBpZiAoVmFyaWFibGUqIHZhcmlhYmxlID0gcGhpTWFwLmdldCh2YWx1ZSkp
IHsKICAgICAgICAgICAgICAgICAgICAgdmFsdWUtPnJlcGxhY2VXaXRoSWRlbnRpdHkoCi0gICAg
ICAgICAgICAgICAgICAgICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0PE1lbW9yeVZhbHVlPigKLSAg
ICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZUluZGV4LCBMb2FkLCB2YWx1ZS0+dHlwZSgp
LCB2YWx1ZS0+b3JpZ2luKCksIHNsb3RCYXNlKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBp
bnNlcnRpb25TZXQuaW5zZXJ0PFZhcmlhYmxlVmFsdWU+KAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHZhbHVlSW5kZXgsIEdldCwgdmFsdWUtPm9yaWdpbigpLCB2YXJpYWJsZSkpOwogICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgZm9y
IChWYWx1ZSomIGNoaWxkIDogdmFsdWUtPmNoaWxkcmVuKCkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKFNsb3RCYXNlVmFsdWUqIHNsb3RCYXNlID0gbWFwLmdldChjaGlsZCkpIHsKLSAgICAg
ICAgICAgICAgICAgICAgICAgIGNoaWxkID0gaW5zZXJ0aW9uU2V0Lmluc2VydDxNZW1vcnlWYWx1
ZT4oCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVJbmRleCwgTG9hZCwgY2hpbGQt
PnR5cGUoKSwgdmFsdWUtPm9yaWdpbigpLCBzbG90QmFzZSk7CisgICAgICAgICAgICAgICAgICAg
IGlmIChWYXJpYWJsZSogdmFyaWFibGUgPSBtYXAuZ2V0KGNoaWxkKSkgeworICAgICAgICAgICAg
ICAgICAgICAgICAgY2hpbGQgPSBpbnNlcnRpb25TZXQuaW5zZXJ0PFZhcmlhYmxlVmFsdWU+KAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlSW5kZXgsIEdldCwgdmFsdWUtPm9yaWdp
bigpLCB2YXJpYWJsZSk7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9
CiAKICAgICAgICAgICAgICAgICBpZiAoVXBzaWxvblZhbHVlKiB1cHNpbG9uID0gdmFsdWUtPmFz
PFVwc2lsb25WYWx1ZT4oKSkgewotICAgICAgICAgICAgICAgICAgICBpZiAoU2xvdEJhc2VWYWx1
ZSogc2xvdEJhc2UgPSBwaGlNYXAuZ2V0KHVwc2lsb24tPnBoaSgpKSkgewotICAgICAgICAgICAg
ICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydDxNZW1vcnlWYWx1ZT4oCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgdmFsdWVJbmRleCwgU3RvcmUsIHVwc2lsb24tPm9yaWdpbigpLCB1
cHNpbG9uLT5jaGlsZCgwKSwgc2xvdEJhc2UpOworICAgICAgICAgICAgICAgICAgICBpZiAoVmFy
aWFibGUqIHZhcmlhYmxlID0gcGhpTWFwLmdldCh1cHNpbG9uLT5waGkoKSkpIHsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnQ8VmFyaWFibGVWYWx1ZT4oCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVJbmRleCwgU2V0LCB1cHNpbG9uLT5vcmlnaW4o
KSwgdmFyaWFibGUsIHVwc2lsb24tPmNoaWxkKDApKTsKICAgICAgICAgICAgICAgICAgICAgICAg
IHZhbHVlLT5yZXBsYWNlV2l0aE5vcCgpOwogICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpZiAoU2xvdEJhc2VWYWx1
ZSogc2xvdEJhc2UgPSBtYXAuZ2V0KHZhbHVlKSkgewotICAgICAgICAgICAgICAgIGluc2VydGlv
blNldC5pbnNlcnQ8TWVtb3J5VmFsdWU+KAotICAgICAgICAgICAgICAgICAgICB2YWx1ZUluZGV4
ICsgMSwgU3RvcmUsIHZhbHVlLT5vcmlnaW4oKSwgdmFsdWUsIHNsb3RCYXNlKTsKKyAgICAgICAg
ICAgIGlmIChWYXJpYWJsZSogdmFyaWFibGUgPSBtYXAuZ2V0KHZhbHVlKSkgeworICAgICAgICAg
ICAgICAgIGluc2VydGlvblNldC5pbnNlcnQ8VmFyaWFibGVWYWx1ZT4oCisgICAgICAgICAgICAg
ICAgICAgIHZhbHVlSW5kZXggKyAxLCBTZXQsIHZhbHVlLT5vcmlnaW4oKSwgdmFyaWFibGUsIHZh
bHVlKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgICAgICBpbnNlcnRpb25TZXQuZXhl
Y3V0ZShibG9jayk7CkBAIC0xMjQsODAgKzExNywyMiBAQCB2b2lkIGRlbW90ZVZhbHVlcyhQcm9j
ZWR1cmUmIHByb2MsIGNvbnN0CiBib29sIGZpeFNTQShQcm9jZWR1cmUmIHByb2MpCiB7CiAgICAg
UGhhc2VTY29wZSBwaGFzZVNjb3BlKHByb2MsICJmaXhTU0EiKTsKLSAgICAKLSAgICAvLyBDb2xs
ZWN0IHRoZSBzdGFjayAidmFyaWFibGVzIi4gSWYgdGhlcmUgYXJlbid0IGFueSwgdGhlbiB3ZSBk
b24ndCBoYXZlIGFueXRoaW5nIHRvIGRvLgotICAgIC8vIFRoYXQncyBhIGZhaXJseSBjb21tb24g
Y2FzZS4KLSAgICBIYXNoTWFwPFN0YWNrU2xvdCosIFR5cGU+IHN0YWNrVmFyaWFibGU7Ci0gICAg
Zm9yIChWYWx1ZSogdmFsdWUgOiBwcm9jLnZhbHVlcygpKSB7Ci0gICAgICAgIGlmIChTbG90QmFz
ZVZhbHVlKiBzbG90QmFzZSA9IHZhbHVlLT5hczxTbG90QmFzZVZhbHVlPigpKSB7Ci0gICAgICAg
ICAgICBTdGFja1Nsb3QqIHN0YWNrID0gc2xvdEJhc2UtPnNsb3QoKTsKLSAgICAgICAgICAgIGlm
IChzdGFjay0+a2luZCgpID09IFN0YWNrU2xvdEtpbmQ6OkFub255bW91cykKLSAgICAgICAgICAg
ICAgICBzdGFja1ZhcmlhYmxlLmFkZChzdGFjaywgVm9pZCk7Ci0gICAgICAgIH0KLSAgICB9Ci0K
LSAgICBpZiAoc3RhY2tWYXJpYWJsZS5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsK
IAotICAgIC8vIE1ha2Ugc3VyZSB0aGF0IHdlIGtub3cgaG93IHRvIG9wdGltaXplIGFsbCBvZiB0
aGVzZS4gV2Ugb25seSBrbm93IGhvdyB0byBoYW5kbGUgTG9hZCBhbmQKLSAgICAvLyBTdG9yZSBv
biBhbm9ueW1vdXMgdmFyaWFibGVzLgorICAgIC8vIEp1c3QgZm9yIHNhbml0eSwgcmVtb3ZlIGFu
eSB1bnVzZWQgdmFyaWFibGVzIGZpcnN0LiBJdCdzIHVubGlrZWx5IHRoYXQgdGhpcyBjb2RlIGhh
cyBhbnkKKyAgICAvLyBidWdzIGhhdmluZyB0byBkbyB3aXRoIGRlYWQgdmFyaWFibGVzLCBidXQg
aXQgd291bGQgYmUgc2lsbHkgdG8gaGF2ZSB0byBmaXggc3VjaCBhIGJ1ZyBpZgorICAgIC8vIGl0
IGRpZCBhcmlzZS4KKyAgICBJbmRleFNldDxWYXJpYWJsZT4gbGl2ZVZhcmlhYmxlczsKICAgICBm
b3IgKFZhbHVlKiB2YWx1ZSA6IHByb2MudmFsdWVzKCkpIHsKLSAgICAgICAgYXV0byByZWplY3Qg
PSBbJl0gKFZhbHVlKiB2YWx1ZSkgewotICAgICAgICAgICAgaWYgKFNsb3RCYXNlVmFsdWUqIHNs
b3RCYXNlID0gdmFsdWUtPmFzPFNsb3RCYXNlVmFsdWU+KCkpCi0gICAgICAgICAgICAgICAgc3Rh
Y2tWYXJpYWJsZS5yZW1vdmUoc2xvdEJhc2UtPnNsb3QoKSk7Ci0gICAgICAgIH07Ci0gICAgICAg
IAotICAgICAgICBhdXRvIGhhbmRsZUFjY2VzcyA9IFsmXSAoVmFsdWUqIGFjY2VzcywgVHlwZSB0
eXBlKSB7Ci0gICAgICAgICAgICBTbG90QmFzZVZhbHVlKiBzbG90QmFzZSA9IGFjY2Vzcy0+bGFz
dENoaWxkKCktPmFzPFNsb3RCYXNlVmFsdWU+KCk7Ci0gICAgICAgICAgICBpZiAoIXNsb3RCYXNl
KQotICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgU3RhY2tTbG90KiBzdGFj
ayA9IHNsb3RCYXNlLT5zbG90KCk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGlmICh2YWx1
ZS0+YXM8TWVtb3J5VmFsdWU+KCktPm9mZnNldCgpKSB7Ci0gICAgICAgICAgICAgICAgc3RhY2tW
YXJpYWJsZS5yZW1vdmUoc3RhY2spOwotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAg
ICAgIH0KLQotICAgICAgICAgICAgYXV0byByZXN1bHQgPSBzdGFja1ZhcmlhYmxlLmZpbmQoc3Rh
Y2spOwotICAgICAgICAgICAgaWYgKHJlc3VsdCA9PSBzdGFja1ZhcmlhYmxlLmVuZCgpKQotICAg
ICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIGlmIChyZXN1bHQtPnZhbHVlID09IFZv
aWQpIHsKLSAgICAgICAgICAgICAgICByZXN1bHQtPnZhbHVlID0gdHlwZTsKLSAgICAgICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAocmVzdWx0LT52YWx1
ZSA9PSB0eXBlKQotICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgIHN0YWNrVmFy
aWFibGUucmVtb3ZlKHJlc3VsdCk7Ci0gICAgICAgIH07Ci0gICAgICAgIAotICAgICAgICBzd2l0
Y2ggKHZhbHVlLT5vcGNvZGUoKSkgewotICAgICAgICBjYXNlIExvYWQ6Ci0gICAgICAgICAgICAv
LyBXZSdyZSBPSyB3aXRoIGxvYWRzIGZyb20gc3RhY2sgdmFyaWFibGVzIGF0IGFuIG9mZnNldCBv
ZiB6ZXJvLgotICAgICAgICAgICAgaGFuZGxlQWNjZXNzKHZhbHVlLCB2YWx1ZS0+dHlwZSgpKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBjYXNlIFN0b3JlOgotICAgICAgICAgICAgLy8g
V2UncmUgT0sgd2l0aCBzdG9yZXMgdG8gc3RhY2sgdmFyaWFibGVzLCBidXQgbm90IHN0b3Jpbmcg
c3RhY2sgdmFyaWFibGVzLgotICAgICAgICAgICAgcmVqZWN0KHZhbHVlLT5jaGlsZCgwKSk7Ci0g
ICAgICAgICAgICBoYW5kbGVBY2Nlc3ModmFsdWUsIHZhbHVlLT5jaGlsZCgwKS0+dHlwZSgpKTsK
LSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgZm9yIChW
YWx1ZSogY2hpbGQgOiB2YWx1ZS0+Y2hpbGRyZW4oKSkKLSAgICAgICAgICAgICAgICByZWplY3Qo
Y2hpbGQpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KKyAgICAgICAgaWYgKFZhcmlh
YmxlVmFsdWUqIHZhcmlhYmxlVmFsdWUgPSB2YWx1ZS0+YXM8VmFyaWFibGVWYWx1ZT4oKSkKKyAg
ICAgICAgICAgIGxpdmVWYXJpYWJsZXMuYWRkKHZhcmlhYmxlVmFsdWUtPnZhcmlhYmxlKCkpOwog
ICAgIH0KIAotICAgIFZlY3RvcjxTdGFja1Nsb3QqPiBkZWFkU2xvdHM7Ci0gICAgZm9yIChhdXRv
JiBlbnRyeSA6IHN0YWNrVmFyaWFibGUpIHsKLSAgICAgICAgaWYgKGVudHJ5LnZhbHVlID09IFZv
aWQpCi0gICAgICAgICAgICBkZWFkU2xvdHMuYXBwZW5kKGVudHJ5LmtleSk7CisgICAgZm9yIChW
YXJpYWJsZSogdmFyaWFibGUgOiBwcm9jLnZhcmlhYmxlcygpKSB7CisgICAgICAgIGlmICghbGl2
ZVZhcmlhYmxlcy5jb250YWlucyh2YXJpYWJsZSkpCisgICAgICAgICAgICBwcm9jLmRlbGV0ZVZh
cmlhYmxlKHZhcmlhYmxlKTsKICAgICB9CiAKLSAgICBmb3IgKFN0YWNrU2xvdCogZGVhZFNsb3Qg
OiBkZWFkU2xvdHMpCi0gICAgICAgIHN0YWNrVmFyaWFibGUucmVtb3ZlKGRlYWRTbG90KTsKLQot
ICAgIGlmIChzdGFja1ZhcmlhYmxlLmlzRW1wdHkoKSkKKyAgICBpZiAocHJvYy52YXJpYWJsZXMo
KS5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIC8vIFdlIGtub3cgdGhh
dCB3ZSBoYXZlIHZhcmlhYmxlcyB0byBvcHRpbWl6ZSwgc28gZG8gdGhhdCBub3cuCkBAIC0yMDUs
NDMgKzE0MCwzOCBAQCBib29sIGZpeFNTQShQcm9jZWR1cmUmIHByb2MpCiAKICAgICBTU0FDYWxj
dWxhdG9yIHNzYShwcm9jKTsKIAotICAgIC8vIENyZWF0ZSBhIFNTQUNhbGN1bGF0b3I6OlZhcmlh
YmxlIGZvciBldmVyeSBzdGFjayB2YXJpYWJsZS4KLSAgICBWZWN0b3I8U3RhY2tTbG90Kj4gdmFy
aWFibGVUb1N0YWNrOwotICAgIEhhc2hNYXA8U3RhY2tTbG90KiwgU1NBQ2FsY3VsYXRvcjo6VmFy
aWFibGUqPiBzdGFja1RvVmFyaWFibGU7Ci0KLSAgICBmb3IgKGF1dG8mIGVudHJ5IDogc3RhY2tW
YXJpYWJsZSkgewotICAgICAgICBTdGFja1Nsb3QqIHN0YWNrID0gZW50cnkua2V5OwotICAgICAg
ICBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSogdmFyaWFibGUgPSBzc2EubmV3VmFyaWFibGUoKTsK
LSAgICAgICAgUkVMRUFTRV9BU1NFUlQodmFyaWFibGUtPmluZGV4KCkgPT0gdmFyaWFibGVUb1N0
YWNrLnNpemUoKSk7Ci0gICAgICAgIHZhcmlhYmxlVG9TdGFjay5hcHBlbmQoc3RhY2spOwotICAg
ICAgICBzdGFja1RvVmFyaWFibGUuYWRkKHN0YWNrLCB2YXJpYWJsZSk7CisgICAgLy8gQ3JlYXRl
IGEgU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUgKCJjYWxjVmFyIikgZm9yIGV2ZXJ5IHZhcmlhYmxl
LgorICAgIFZlY3RvcjxWYXJpYWJsZSo+IGNhbGNWYXJUb1ZhcmlhYmxlOworICAgIEluZGV4TWFw
PFZhcmlhYmxlLCBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSo+IHZhcmlhYmxlVG9DYWxjVmFyKHBy
b2MudmFyaWFibGVzKCkuc2l6ZSgpKTsKKworICAgIGZvciAoVmFyaWFibGUqIHZhcmlhYmxlIDog
cHJvYy52YXJpYWJsZXMoKSkgeworICAgICAgICBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSogY2Fs
Y1ZhciA9IHNzYS5uZXdWYXJpYWJsZSgpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChjYWxjVmFy
LT5pbmRleCgpID09IGNhbGNWYXJUb1ZhcmlhYmxlLnNpemUoKSk7CisgICAgICAgIGNhbGNWYXJU
b1ZhcmlhYmxlLmFwcGVuZCh2YXJpYWJsZSk7CisgICAgICAgIHZhcmlhYmxlVG9DYWxjVmFyW3Zh
cmlhYmxlXSA9IGNhbGNWYXI7CiAgICAgfQogCiAgICAgLy8gQ3JlYXRlIERlZnMgZm9yIGFsbCBv
ZiB0aGUgc3RvcmVzIHRvIHRoZSBzdGFjayB2YXJpYWJsZS4KICAgICBmb3IgKEJhc2ljQmxvY2sq
IGJsb2NrIDogcHJvYykgewogICAgICAgICBmb3IgKFZhbHVlKiB2YWx1ZSA6ICpibG9jaykgewot
ICAgICAgICAgICAgaWYgKHZhbHVlLT5vcGNvZGUoKSAhPSBTdG9yZSkKLSAgICAgICAgICAgICAg
ICBjb250aW51ZTsKLQotICAgICAgICAgICAgU2xvdEJhc2VWYWx1ZSogc2xvdEJhc2UgPSB2YWx1
ZS0+Y2hpbGQoMSktPmFzPFNsb3RCYXNlVmFsdWU+KCk7Ci0gICAgICAgICAgICBpZiAoIXNsb3RC
YXNlKQorICAgICAgICAgICAgaWYgKHZhbHVlLT5vcGNvZGUoKSAhPSBTZXQpCiAgICAgICAgICAg
ICAgICAgY29udGludWU7CiAKLSAgICAgICAgICAgIFN0YWNrU2xvdCogc3RhY2sgPSBzbG90QmFz
ZS0+c2xvdCgpOworICAgICAgICAgICAgVmFyaWFibGUqIHZhcmlhYmxlID0gdmFsdWUtPmFzPFZh
cmlhYmxlVmFsdWU+KCktPnZhcmlhYmxlKCk7CiAKLSAgICAgICAgICAgIGlmIChTU0FDYWxjdWxh
dG9yOjpWYXJpYWJsZSogdmFyaWFibGUgPSBzdGFja1RvVmFyaWFibGUuZ2V0KHN0YWNrKSkKLSAg
ICAgICAgICAgICAgICBzc2EubmV3RGVmKHZhcmlhYmxlLCBibG9jaywgdmFsdWUtPmNoaWxkKDAp
KTsKKyAgICAgICAgICAgIGlmIChTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSogY2FsY1ZhciA9IHZh
cmlhYmxlVG9DYWxjVmFyW3ZhcmlhYmxlXSkKKyAgICAgICAgICAgICAgICBzc2EubmV3RGVmKGNh
bGNWYXIsIGJsb2NrLCB2YWx1ZS0+Y2hpbGQoMCkpOwogICAgICAgICB9CiAgICAgfQogCiAgICAg
Ly8gRGVjaWRlIHdoZXJlIFBoaXMgYXJlIHRvIGJlIGluc2VydGVkLiBUaGlzIGNyZWF0ZXMgdGhl
bSBidXQgZG9lcyBub3QgaW5zZXJ0IHRoZW0uCiAgICAgc3NhLmNvbXB1dGVQaGlzKAotICAgICAg
ICBbJl0gKFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKiB2YXJpYWJsZSwgQmFzaWNCbG9jayogYmxv
Y2spIC0+IFZhbHVlKiB7Ci0gICAgICAgICAgICBTdGFja1Nsb3QqIHN0YWNrID0gdmFyaWFibGVU
b1N0YWNrW3ZhcmlhYmxlLT5pbmRleCgpXTsKLSAgICAgICAgICAgIFZhbHVlKiBwaGkgPSBwcm9j
LmFkZDxWYWx1ZT4oUGhpLCBzdGFja1ZhcmlhYmxlLmdldChzdGFjayksIGJsb2NrLT5hdCgwKS0+
b3JpZ2luKCkpOworICAgICAgICBbJl0gKFNTQUNhbGN1bGF0b3I6OlZhcmlhYmxlKiBjYWxjVmFy
LCBCYXNpY0Jsb2NrKiBibG9jaykgLT4gVmFsdWUqIHsKKyAgICAgICAgICAgIFZhcmlhYmxlKiB2
YXJpYWJsZSA9IGNhbGNWYXJUb1ZhcmlhYmxlW2NhbGNWYXItPmluZGV4KCldOworICAgICAgICAg
ICAgVmFsdWUqIHBoaSA9IHByb2MuYWRkPFZhbHVlPihQaGksIHZhcmlhYmxlLT50eXBlKCksIGJs
b2NrLT5hdCgwKS0+b3JpZ2luKCkpOwogICAgICAgICAgICAgaWYgKHZlcmJvc2UpIHsKICAgICAg
ICAgICAgICAgICBkYXRhTG9nKAotICAgICAgICAgICAgICAgICAgICAiQWRkaW5nIFBoaSBmb3Ig
IiwgcG9pbnRlckR1bXAoc3RhY2spLCAiIGF0ICIsICpibG9jaywgIjogIiwKKyAgICAgICAgICAg
ICAgICAgICAgIkFkZGluZyBQaGkgZm9yICIsIHBvaW50ZXJEdW1wKHZhcmlhYmxlKSwgIiBhdCAi
LCAqYmxvY2ssICI6ICIsCiAgICAgICAgICAgICAgICAgICAgIGRlZXBEdW1wKHByb2MsIHBoaSks
ICJcbiIpOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIHBoaTsKQEAgLTI0OSwy
NCArMTc5LDI0IEBAIGJvb2wgZml4U1NBKFByb2NlZHVyZSYgcHJvYykKIAogICAgIC8vIE5vdyBw
ZXJmb3JtIHRoZSBjb252ZXJzaW9uLgogICAgIEluc2VydGlvblNldCBpbnNlcnRpb25TZXQocHJv
Yyk7Ci0gICAgSGFzaE1hcDxTdGFja1Nsb3QqLCBWYWx1ZSo+IG1hcHBpbmc7CisgICAgSW5kZXhN
YXA8VmFyaWFibGUsIFZhbHVlKj4gbWFwcGluZyhwcm9jLnZhcmlhYmxlcygpLnNpemUoKSk7CiAg
ICAgZm9yIChCYXNpY0Jsb2NrKiBibG9jayA6IHByb2MuYmxvY2tzSW5QcmVPcmRlcigpKSB7CiAg
ICAgICAgIG1hcHBpbmcuY2xlYXIoKTsKIAotICAgICAgICBmb3IgKGF1dG8mIGVudHJ5IDogc3Rh
Y2tUb1ZhcmlhYmxlKSB7Ci0gICAgICAgICAgICBTdGFja1Nsb3QqIHN0YWNrID0gZW50cnkua2V5
OwotICAgICAgICAgICAgU1NBQ2FsY3VsYXRvcjo6VmFyaWFibGUqIHZhcmlhYmxlID0gZW50cnku
dmFsdWU7CisgICAgICAgIGZvciAodW5zaWduZWQgaW5kZXggPSBjYWxjVmFyVG9WYXJpYWJsZS5z
aXplKCk7IGluZGV4LS07KSB7CisgICAgICAgICAgICBWYXJpYWJsZSogdmFyaWFibGUgPSBjYWxj
VmFyVG9WYXJpYWJsZVtpbmRleF07CisgICAgICAgICAgICBTU0FDYWxjdWxhdG9yOjpWYXJpYWJs
ZSogY2FsY1ZhciA9IHNzYS52YXJpYWJsZShpbmRleCk7CiAKLSAgICAgICAgICAgIFNTQUNhbGN1
bGF0b3I6OkRlZiogZGVmID0gc3NhLnJlYWNoaW5nRGVmQXRIZWFkKGJsb2NrLCB2YXJpYWJsZSk7
CisgICAgICAgICAgICBTU0FDYWxjdWxhdG9yOjpEZWYqIGRlZiA9IHNzYS5yZWFjaGluZ0RlZkF0
SGVhZChibG9jaywgY2FsY1Zhcik7CiAgICAgICAgICAgICBpZiAoZGVmKQotICAgICAgICAgICAg
ICAgIG1hcHBpbmcuc2V0KHN0YWNrLCBkZWYtPnZhbHVlKCkpOworICAgICAgICAgICAgICAgIG1h
cHBpbmdbdmFyaWFibGVdID0gZGVmLT52YWx1ZSgpOwogICAgICAgICB9CiAKICAgICAgICAgZm9y
IChTU0FDYWxjdWxhdG9yOjpEZWYqIHBoaURlZiA6IHNzYS5waGlzRm9yQmxvY2soYmxvY2spKSB7
Ci0gICAgICAgICAgICBTdGFja1Nsb3QqIHN0YWNrID0gdmFyaWFibGVUb1N0YWNrW3BoaURlZi0+
dmFyaWFibGUoKS0+aW5kZXgoKV07CisgICAgICAgICAgICBWYXJpYWJsZSogdmFyaWFibGUgPSBj
YWxjVmFyVG9WYXJpYWJsZVtwaGlEZWYtPnZhcmlhYmxlKCktPmluZGV4KCldOwogCiAgICAgICAg
ICAgICBpbnNlcnRpb25TZXQuaW5zZXJ0VmFsdWUoMCwgcGhpRGVmLT52YWx1ZSgpKTsKLSAgICAg
ICAgICAgIG1hcHBpbmcuc2V0KHN0YWNrLCBwaGlEZWYtPnZhbHVlKCkpOworICAgICAgICAgICAg
bWFwcGluZ1t2YXJpYWJsZV0gPSBwaGlEZWYtPnZhbHVlKCk7CiAgICAgICAgIH0KIAogICAgICAg
ICBmb3IgKHVuc2lnbmVkIHZhbHVlSW5kZXggPSAwOyB2YWx1ZUluZGV4IDwgYmxvY2stPnNpemUo
KTsgKyt2YWx1ZUluZGV4KSB7CkBAIC0yNzQsMjMgKzIwNCwyNSBAQCBib29sIGZpeFNTQShQcm9j
ZWR1cmUmIHByb2MpCiAgICAgICAgICAgICB2YWx1ZS0+cGVyZm9ybVN1YnN0aXR1dGlvbigpOwog
CiAgICAgICAgICAgICBzd2l0Y2ggKHZhbHVlLT5vcGNvZGUoKSkgewotICAgICAgICAgICAgY2Fz
ZSBMb2FkOiB7Ci0gICAgICAgICAgICAgICAgaWYgKFNsb3RCYXNlVmFsdWUqIHNsb3RCYXNlID0g
dmFsdWUtPmNoaWxkKDApLT5hczxTbG90QmFzZVZhbHVlPigpKSB7Ci0gICAgICAgICAgICAgICAg
ICAgIFN0YWNrU2xvdCogc3RhY2sgPSBzbG90QmFzZS0+c2xvdCgpOwotICAgICAgICAgICAgICAg
ICAgICBpZiAoVmFsdWUqIHJlcGxhY2VtZW50ID0gbWFwcGluZy5nZXQoc3RhY2spKQotICAgICAg
ICAgICAgICAgICAgICAgICAgdmFsdWUtPnJlcGxhY2VXaXRoSWRlbnRpdHkocmVwbGFjZW1lbnQp
OworICAgICAgICAgICAgY2FzZSBHZXQ6IHsKKyAgICAgICAgICAgICAgICBWYXJpYWJsZVZhbHVl
KiB2YXJpYWJsZVZhbHVlID0gdmFsdWUtPmFzPFZhcmlhYmxlVmFsdWU+KCk7CisgICAgICAgICAg
ICAgICAgVmFyaWFibGUqIHZhcmlhYmxlID0gdmFyaWFibGVWYWx1ZS0+dmFyaWFibGUoKTsKKwor
ICAgICAgICAgICAgICAgIGlmIChWYWx1ZSogcmVwbGFjZW1lbnQgPSBtYXBwaW5nW3ZhcmlhYmxl
XSkKKyAgICAgICAgICAgICAgICAgICAgdmFsdWUtPnJlcGxhY2VXaXRoSWRlbnRpdHkocmVwbGFj
ZW1lbnQpOworICAgICAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICB2YWx1
ZS0+cmVwbGFjZVdpdGhJZGVudGl0eSgKKyAgICAgICAgICAgICAgICAgICAgICAgIGluc2VydGlv
blNldC5pbnNlcnRCb3R0b20odmFsdWVJbmRleCwgdmFsdWUpKTsKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICBjYXNlIFN0b3JlOiB7Ci0gICAgICAgICAgICAgICAgaWYgKFNsb3RCYXNl
VmFsdWUqIHNsb3RCYXNlID0gdmFsdWUtPmNoaWxkKDEpLT5hczxTbG90QmFzZVZhbHVlPigpKSB7
Ci0gICAgICAgICAgICAgICAgICAgIFN0YWNrU2xvdCogc3RhY2sgPSBzbG90QmFzZS0+c2xvdCgp
OwotICAgICAgICAgICAgICAgICAgICBpZiAoc3RhY2tUb1ZhcmlhYmxlLmNvbnRhaW5zKHN0YWNr
KSkgewotICAgICAgICAgICAgICAgICAgICAgICAgbWFwcGluZy5zZXQoc3RhY2ssIHZhbHVlLT5j
aGlsZCgwKSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZS0+cmVwbGFjZVdpdGhOb3Ao
KTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGNhc2UgU2V0OiB7CisgICAgICAgICAgICAgICAgVmFyaWFibGVWYWx1ZSogdmFyaWFibGVWYWx1
ZSA9IHZhbHVlLT5hczxWYXJpYWJsZVZhbHVlPigpOworICAgICAgICAgICAgICAgIFZhcmlhYmxl
KiB2YXJpYWJsZSA9IHZhcmlhYmxlVmFsdWUtPnZhcmlhYmxlKCk7CisKKyAgICAgICAgICAgICAg
ICBtYXBwaW5nW3ZhcmlhYmxlXSA9IHZhbHVlLT5jaGlsZCgwKTsKKyAgICAgICAgICAgICAgICB2
YWx1ZS0+cmVwbGFjZVdpdGhOb3AoKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIH0KIApAQCAtMzA0LDE0ICsyMzYsMTQgQEAgYm9vbCBmaXhTU0EoUHJvY2VkdXJlJiBwcm9j
KQogICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIHN1Y2Nlc3NvckJsb2NrIDogYmxvY2stPnN1Y2Nl
c3NvckJsb2NrcygpKSB7CiAgICAgICAgICAgICBmb3IgKFNTQUNhbGN1bGF0b3I6OkRlZiogcGhp
RGVmIDogc3NhLnBoaXNGb3JCbG9jayhzdWNjZXNzb3JCbG9jaykpIHsKICAgICAgICAgICAgICAg
ICBWYWx1ZSogcGhpID0gcGhpRGVmLT52YWx1ZSgpOwotICAgICAgICAgICAgICAgIFNTQUNhbGN1
bGF0b3I6OlZhcmlhYmxlKiB2YXJpYWJsZSA9IHBoaURlZi0+dmFyaWFibGUoKTsKLSAgICAgICAg
ICAgICAgICBTdGFja1Nsb3QqIHN0YWNrID0gdmFyaWFibGVUb1N0YWNrW3ZhcmlhYmxlLT5pbmRl
eCgpXTsKKyAgICAgICAgICAgICAgICBTU0FDYWxjdWxhdG9yOjpWYXJpYWJsZSogY2FsY1ZhciA9
IHBoaURlZi0+dmFyaWFibGUoKTsKKyAgICAgICAgICAgICAgICBWYXJpYWJsZSogdmFyaWFibGUg
PSBjYWxjVmFyVG9WYXJpYWJsZVtjYWxjVmFyLT5pbmRleCgpXTsKIAotICAgICAgICAgICAgICAg
IFZhbHVlKiBtYXBwZWRWYWx1ZSA9IG1hcHBpbmcuZ2V0KHN0YWNrKTsKKyAgICAgICAgICAgICAg
ICBWYWx1ZSogbWFwcGVkVmFsdWUgPSBtYXBwaW5nW3ZhcmlhYmxlXTsKICAgICAgICAgICAgICAg
ICBpZiAodmVyYm9zZSkgewogICAgICAgICAgICAgICAgICAgICBkYXRhTG9nKAotICAgICAgICAg
ICAgICAgICAgICAgICAgIk1hcHBlZCB2YWx1ZSBmb3IgIiwgKnN0YWNrLCAiIHdpdGggc3VjY2Vz
c29yIFBoaSAiLCAqcGhpLCAiIGF0IGVuZCBvZiAiLAotICAgICAgICAgICAgICAgICAgICAgICAg
KmJsb2NrLCAiOiAiLCBwb2ludGVyRHVtcChtYXBwZWRWYWx1ZSksICJcbiIpOworICAgICAgICAg
ICAgICAgICAgICAgICAgIk1hcHBlZCB2YWx1ZSBmb3IgIiwgKnZhcmlhYmxlLCAiIHdpdGggc3Vj
Y2Vzc29yIFBoaSAiLCAqcGhpLAorICAgICAgICAgICAgICAgICAgICAgICAgIiBhdCBlbmQgb2Yg
IiwgKmJsb2NrLCAiOiAiLCBwb2ludGVyRHVtcChtYXBwZWRWYWx1ZSksICJcbiIpOwogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBpZiAoIW1hcHBl
ZFZhbHVlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRml4U1NBLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzRml4U1NBLmgJKHJldmlzaW9uIDE5
NjAxMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM0ZpeFNTQS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zNiw4ICszNiw4IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewogCiBj
bGFzcyBQcm9jZWR1cmU7CiAKLS8vIFR1cm5zIGFsbCBtZW50aW9ucyBvZiB0aGUgZ2l2ZW4gdmFs
dWVzIGludG8gYWNjZXNzZXMgdG8gYW5vbnltb3VzIHN0YWNrIHNsb3RzLiBUaGlzIGlzIG1lYW50
Ci0vLyB0byBiZSB1c2VkIGZyb20gcGhhc2VzIHRoYXQgZG9uJ3QgbGlrZSBTU0EgZm9yIHdoYXRl
dmVyIHJlYXNvbi4KKy8vIFR1cm5zIGFsbCBtZW50aW9ucyBvZiB0aGUgZ2l2ZW4gdmFsdWVzIGlu
dG8gYWNjZXNzZXMgdG8gdmFyaWFibGVzLiBUaGlzIGlzIG1lYW50IHRvIGJlIHVzZWQKKy8vIGZy
b20gcGhhc2VzIHRoYXQgZG9uJ3QgbGlrZSBTU0EgZm9yIHdoYXRldmVyIHJlYXNvbi4KIHZvaWQg
ZGVtb3RlVmFsdWVzKFByb2NlZHVyZSYsIGNvbnN0IEluZGV4U2V0PFZhbHVlPiYpOwogCiAvLyBU
aGlzIGZpeGVzIFNTQSBmb3IgeW91LiBVc2UgdGhpcyBhZnRlciB5b3UgaGF2ZSBkb25lIGRlbW90
ZVZhbHVlcygpIGFuZCB5b3UgaGF2ZSBwZXJmb3JtZWQKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0luZGV4TWFwLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzSW5kZXhNYXAuaAkocmV2aXNpb24gMTk2MDExKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzSW5kZXhNYXAuaAkod29ya2luZyBjb3B5KQpAQCAtNDksNiArNDksMTEgQEAgcHVi
bGljOgogICAgICAgICBtX3ZlY3Rvci5maWxsKFZhbHVlKCksIHNpemUpOwogICAgIH0KIAorICAg
IHZvaWQgY2xlYXIoKQorICAgIHsKKyAgICAgICAgbV92ZWN0b3IuZmlsbChWYWx1ZSgpLCBtX3Zl
Y3Rvci5zaXplKCkpOworICAgIH0KKwogICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4g
bV92ZWN0b3Iuc2l6ZSgpOyB9CiAKICAgICBWYWx1ZSYgb3BlcmF0b3JbXShzaXplX3QgaW5kZXgp
CkBAIC03MSwxMSArNzYsNiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBtX3ZlY3RvcltrZXkt
PmluZGV4KCldOwogICAgIH0KIAotICAgIHZvaWQgY2xlYXIoKQotICAgIHsKLSAgICAgICAgbV92
ZWN0b3IuY2xlYXIoKTsKLSAgICB9Ci0gICAgCiBwcml2YXRlOgogICAgIFZlY3RvcjxWYWx1ZT4g
bV92ZWN0b3I7CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzSW5kZXhTZXQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNJbmRleFNldC5oCShy
ZXZpc2lvbiAxOTYwMTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNJbmRleFNldC5o
CSh3b3JraW5nIGNvcHkpCkBAIC02OSw2ICs2OSwxNiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVy
biBtX3NldC5nZXQodmFsdWUtPmluZGV4KCkpOwogICAgIH0KIAorICAgIHNpemVfdCBzaXplKCkg
Y29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX3NldC5iaXRDb3VudCgpOworICAgIH0KKwor
ICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gIXNpemUoKTsK
KyAgICB9CisKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBDb2xsZWN0aW9uVHlwZT4KICAgICBjbGFz
cyBJdGVyYWJsZSB7CiAgICAgcHVibGljOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzTG93ZXJUb0Fpci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzTG93ZXJUb0Fpci5jcHAJKHJldmlzaW9uIDE5NjAxMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM0xvd2VyVG9BaXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Myw2ICs1Myw4IEBA
CiAjaW5jbHVkZSAiQjNVcHNpbG9uVmFsdWUuaCIKICNpbmNsdWRlICJCM1VzZUNvdW50cy5oIgog
I2luY2x1ZGUgIkIzVmFsdWVJbmxpbmVzLmgiCisjaW5jbHVkZSAiQjNWYXJpYWJsZS5oIgorI2lu
Y2x1ZGUgIkIzVmFyaWFibGVWYWx1ZS5oIgogI2luY2x1ZGUgPHd0Zi9MaXN0RHVtcC5oPgogCiAj
aWYgQ09NUElMRVIoR0NDKSAmJiBBU1NFUlRfRElTQUJMRUQKQEAgLTEwMiw2ICsxMDQsOCBAQCBw
dWJsaWM6CiAKICAgICAgICAgZm9yIChCMzo6U3RhY2tTbG90KiBzdGFjayA6IG1fcHJvY2VkdXJl
LnN0YWNrU2xvdHMoKSkKICAgICAgICAgICAgIG1fc3RhY2tUb1N0YWNrLmFkZChzdGFjaywgbV9j
b2RlLmFkZFN0YWNrU2xvdChzdGFjaykpOworICAgICAgICBmb3IgKFZhcmlhYmxlKiB2YXJpYWJs
ZSA6IG1fcHJvY2VkdXJlLnZhcmlhYmxlcygpKQorICAgICAgICAgICAgbV92YXJpYWJsZVRvVG1w
LmFkZCh2YXJpYWJsZSwgbV9jb2RlLm5ld1RtcChBcmc6OnR5cGVGb3JCM1R5cGUodmFyaWFibGUt
PnR5cGUoKSkpKTsKIAogICAgICAgICAvLyBGaWd1cmUgb3V0IHdoaWNoIGJsb2NrcyBhcmUgbm90
IHJhcmUuCiAgICAgICAgIG1fZmFzdFdvcmtsaXN0LnB1c2gobV9wcm9jZWR1cmVbMF0pOwpAQCAt
MjIyNSw2ICsyMjI5LDIxIEBAIHByaXZhdGU6CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KIAorICAgICAgICBjYXNlIFNldDogeworICAgICAgICAgICAgVmFsdWUqIHZhbHVlID0gbV92
YWx1ZS0+Y2hpbGQoMCk7CisgICAgICAgICAgICBhcHBlbmQoCisgICAgICAgICAgICAgICAgcmVs
YXhlZE1vdmVGb3JUeXBlKHZhbHVlLT50eXBlKCkpLCBpbW1PclRtcCh2YWx1ZSksCisgICAgICAg
ICAgICAgICAgbV92YXJpYWJsZVRvVG1wLmdldChtX3ZhbHVlLT5hczxWYXJpYWJsZVZhbHVlPigp
LT52YXJpYWJsZSgpKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAg
ICBjYXNlIEdldDogeworICAgICAgICAgICAgYXBwZW5kKAorICAgICAgICAgICAgICAgIHJlbGF4
ZWRNb3ZlRm9yVHlwZShtX3ZhbHVlLT50eXBlKCkpLAorICAgICAgICAgICAgICAgIG1fdmFyaWFi
bGVUb1RtcC5nZXQobV92YWx1ZS0+YXM8VmFyaWFibGVWYWx1ZT4oKS0+dmFyaWFibGUoKSksIHRt
cChtX3ZhbHVlKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKwogICAgICAgICBj
YXNlIEJyYW5jaDogewogICAgICAgICAgICAgbV9pbnN0cy5sYXN0KCkuYXBwZW5kKGNyZWF0ZUJy
YW5jaChtX3ZhbHVlLT5jaGlsZCgwKSkpOwogICAgICAgICAgICAgcmV0dXJuOwpAQCAtMjMxNiw2
ICsyMzM1LDcgQEAgcHJpdmF0ZToKICAgICBJbmRleE1hcDxWYWx1ZSwgVG1wPiBtX3BoaVRvVG1w
OyAvLyBFYWNoIFBoaSBnZXRzIGl0cyBvd24gVG1wLgogICAgIEluZGV4TWFwPEIzOjpCYXNpY0Js
b2NrLCBBaXI6OkJhc2ljQmxvY2sqPiBtX2Jsb2NrVG9CbG9jazsKICAgICBIYXNoTWFwPEIzOjpT
dGFja1Nsb3QqLCBBaXI6OlN0YWNrU2xvdCo+IG1fc3RhY2tUb1N0YWNrOworICAgIEhhc2hNYXA8
VmFyaWFibGUqLCBUbXA+IG1fdmFyaWFibGVUb1RtcDsKIAogICAgIFVzZUNvdW50cyBtX3VzZUNv
dW50czsKICAgICBQaGlDaGlsZHJlbiBtX3BoaUNoaWxkcmVuOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzTWVtb3J5VmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNNZW1vcnlWYWx1ZS5oCShyZXZpc2lvbiAxOTYwMTEpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYjMvQjNNZW1vcnlWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03NSwx
MCArNzUsOCBAQCBwcml2YXRlOgogCiAgICAgLy8gVXNlIHRoaXMgZm9ybSBmb3IgTG9hZCAoYnV0
IG5vdCBMb2FkOFosIExvYWQ4Uywgb3IgYW55IG9mIHRoZSBMb2FkcyB0aGF0IGhhdmUgYSBzdWZm
aXggdGhhdAogICAgIC8vIGRlc2NyaWJlcyB0aGUgcmV0dXJuZWQgdHlwZSkuCi0gICAgTWVtb3J5
VmFsdWUoCi0gICAgICAgIHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBUeXBlIHR5cGUs
IE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBwb2ludGVyLAotICAgICAgICBpbnQzMl90IG9mZnNldCA9
IDApCi0gICAgICAgIDogVmFsdWUoaW5kZXgsIENoZWNrZWRPcGNvZGUsIG9wY29kZSwgdHlwZSwg
b3JpZ2luLCBwb2ludGVyKQorICAgIE1lbW9yeVZhbHVlKE9wY29kZSBvcGNvZGUsIFR5cGUgdHlw
ZSwgT3JpZ2luIG9yaWdpbiwgVmFsdWUqIHBvaW50ZXIsIGludDMyX3Qgb2Zmc2V0ID0gMCkKKyAg
ICAgICAgOiBWYWx1ZShDaGVja2VkT3Bjb2RlLCBvcGNvZGUsIHR5cGUsIG9yaWdpbiwgcG9pbnRl
cikKICAgICAgICAgLCBtX29mZnNldChvZmZzZXQpCiAgICAgICAgICwgbV9yYW5nZShIZWFwUmFu
Z2U6OnRvcCgpKQogICAgIHsKQEAgLTEwNCwxNiArMTAyLDE0IEBAIHByaXZhdGU6CiAgICAgfQog
CiAgICAgLy8gVXNlIHRoaXMgZm9ybSBmb3IgbG9hZHMgd2hlcmUgdGhlIHJldHVybiB0eXBlIGlz
IGltcGxpZWQuCi0gICAgTWVtb3J5VmFsdWUodW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUs
IE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBwb2ludGVyLCBpbnQzMl90IG9mZnNldCA9IDApCi0gICAg
ICAgIDogTWVtb3J5VmFsdWUoaW5kZXgsIG9wY29kZSwgSW50MzIsIG9yaWdpbiwgcG9pbnRlciwg
b2Zmc2V0KQorICAgIE1lbW9yeVZhbHVlKE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4sIFZh
bHVlKiBwb2ludGVyLCBpbnQzMl90IG9mZnNldCA9IDApCisgICAgICAgIDogTWVtb3J5VmFsdWUo
b3Bjb2RlLCBJbnQzMiwgb3JpZ2luLCBwb2ludGVyLCBvZmZzZXQpCiAgICAgewogICAgIH0KIAog
ICAgIC8vIFVzZSB0aGlzIGZvcm0gZm9yIHN0b3Jlcy4KLSAgICBNZW1vcnlWYWx1ZSgKLSAgICAg
ICAgdW5zaWduZWQgaW5kZXgsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiB2
YWx1ZSwgVmFsdWUqIHBvaW50ZXIsCi0gICAgICAgIGludDMyX3Qgb2Zmc2V0ID0gMCkKLSAgICAg
ICAgOiBWYWx1ZShpbmRleCwgQ2hlY2tlZE9wY29kZSwgb3Bjb2RlLCBWb2lkLCBvcmlnaW4sIHZh
bHVlLCBwb2ludGVyKQorICAgIE1lbW9yeVZhbHVlKE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmln
aW4sIFZhbHVlKiB2YWx1ZSwgVmFsdWUqIHBvaW50ZXIsIGludDMyX3Qgb2Zmc2V0ID0gMCkKKyAg
ICAgICAgOiBWYWx1ZShDaGVja2VkT3Bjb2RlLCBvcGNvZGUsIFZvaWQsIG9yaWdpbiwgdmFsdWUs
IHBvaW50ZXIpCiAgICAgICAgICwgbV9vZmZzZXQob2Zmc2V0KQogICAgICAgICAsIG1fcmFuZ2Uo
SGVhcFJhbmdlOjp0b3AoKSkKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNPcGNvZGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09w
Y29kZS5jcHAJKHJldmlzaW9uIDE5NjAxMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M09wY29kZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk1LDYgKzk1LDEyIEBAIHZvaWQgcHJpbnRJ
bnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBPcGMKICAgICBjYXNlIENvbnN0RmxvYXQ6CiAgICAg
ICAgIG91dC5wcmludCgiQ29uc3RGbG9hdCIpOwogICAgICAgICByZXR1cm47CisgICAgY2FzZSBH
ZXQ6CisgICAgICAgIG91dC5wcmludCgiR2V0Iik7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNl
IFNldDoKKyAgICAgICAgb3V0LnByaW50KCJTZXQiKTsKKyAgICAgICAgcmV0dXJuOwogICAgIGNh
c2UgU2xvdEJhc2U6CiAgICAgICAgIG91dC5wcmludCgiU2xvdEJhc2UiKTsKICAgICAgICAgcmV0
dXJuOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3Bjb2RlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzT3Bjb2RlLmgJKHJldmlzaW9uIDE5NjAx
MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM09wY29kZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC00OCw5ICs0OCwxNCBAQCBlbnVtIE9wY29kZSA6IGludDE2X3QgewogICAgIENvbnN0RG91
YmxlLAogICAgIENvbnN0RmxvYXQsCiAKLSAgICAvLyBUaGUgbWFnaWNhbCBzdGFjayBzbG90LiBU
aGlzIGlzIHZpZXdlZCBhcyBleGVjdXRpbmcgYXQgdGhlIHRvcCBvZiB0aGUgcHJvZ3JhbSByZWdh
cmRsZXNzIG9mCi0gICAgLy8gd2hlcmUgaW4gY29udHJvbCBmbG93IHlvdSBwdXQgaXQuIEVhY2gg
aW5zdGFuY2Ugb2YgYSBTdGFja1Nsb3QgVmFsdWUgZ2V0cyBhIGRpc2pvaW50IHJhbmdlIG9mCi0g
ICAgLy8gc3RhY2sgbWVtb3J5LiBVc2UgdGhlIFN0YWNrU2xvdFZhbHVlIGNsYXNzLgorICAgIC8v
IEIzIHN1cHBvcnRzIG5vbi1TU0EgdmFyaWFibGVzLiBUaGVzZSBhcmUgYWNjZXNzZWQgdXNpbmcg
R2V0IGFuZCBTZXQgb3Bjb2Rlcy4gVXNlIHRoZQorICAgIC8vIFZhcmlhYmxlVmFsdWUgY2xhc3Mu
IEl0J3MgYSBnb29kIGlkZWEgdG8gcnVuIGZpeFNTQSgpIHRvIHR1cm4gdGhlc2UgaW50byBTU0Eu
IFRoZQorICAgIC8vIG9wdGltaXplciB3aWxsIGRvIHRoYXQgZXZlbnR1YWxseSwgYnV0IGlmIHlv
dXIgaW5wdXQgdGVuZHMgdG8gdXNlIHRoZXNlIG9wY29kZXMsIHlvdQorICAgIC8vIHNob3VsZCBy
dW4gZml4U1NBKCkgZGlyZWN0bHkgYmVmb3JlIGxhdW5jaGluZyB0aGUgb3B0aW1pemVyLgorICAg
IFNldCwKKyAgICBHZXQsCisKKyAgICAvLyBHZXRzIHRoZSBiYXNlIGFkZHJlc3Mgb2YgYSBTdGFj
a1Nsb3QuCiAgICAgU2xvdEJhc2UsCiAKICAgICAvLyBUaGUgbWFnaWNhbCBhcmd1bWVudCByZWdp
c3Rlci4gVGhpcyBpcyB2aWV3ZWQgYXMgZXhlY3V0aW5nIGF0IHRoZSB0b3Agb2YgdGhlIHByb2dy
YW0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRWYWx1ZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGF0Y2hwb2ludFZhbHVl
LmNwcAkocmV2aXNpb24gMTk2MDExKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGF0
Y2hwb2ludFZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDksOCArNDksOCBAQCBWYWx1ZSog
UGF0Y2hwb2ludFZhbHVlOjpjbG9uZUltcGwoKSBjb25zCiAgICAgcmV0dXJuIG5ldyBQYXRjaHBv
aW50VmFsdWUoKnRoaXMpOwogfQogCi1QYXRjaHBvaW50VmFsdWU6OlBhdGNocG9pbnRWYWx1ZSh1
bnNpZ25lZCBpbmRleCwgVHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luKQotICAgIDogQmFzZShpbmRl
eCwgQ2hlY2tlZE9wY29kZSwgUGF0Y2hwb2ludCwgdHlwZSwgb3JpZ2luKQorUGF0Y2hwb2ludFZh
bHVlOjpQYXRjaHBvaW50VmFsdWUoVHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luKQorICAgIDogQmFz
ZShDaGVja2VkT3Bjb2RlLCBQYXRjaHBvaW50LCB0eXBlLCBvcmlnaW4pCiAgICAgLCBlZmZlY3Rz
KEVmZmVjdHM6OmZvckNhbGwoKSkKICAgICAsIHJlc3VsdENvbnN0cmFpbnQodHlwZSA9PSBWb2lk
ID8gVmFsdWVSZXA6Oldhcm1BbnkgOiBWYWx1ZVJlcDo6U29tZVJlZ2lzdGVyKQogewpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGF0Y2hwb2ludFZhbHVlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUGF0Y2hwb2ludFZhbHVlLmgJKHJldmlzaW9u
IDE5NjAxMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1BhdGNocG9pbnRWYWx1ZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC03MCw3ICs3MCw3IEBAIHByb3RlY3RlZDoKIHByaXZhdGU6CiAg
ICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKIAotICAgIEpTX0VYUE9SVF9QUklWQVRFIFBhdGNo
cG9pbnRWYWx1ZSh1bnNpZ25lZCBpbmRleCwgVHlwZSwgT3JpZ2luKTsKKyAgICBKU19FWFBPUlRf
UFJJVkFURSBQYXRjaHBvaW50VmFsdWUoVHlwZSwgT3JpZ2luKTsKIH07CiAKIH0gfSAvLyBuYW1l
c3BhY2UgSlNDOjpCMwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9jZWR1cmUu
Y3BwCShyZXZpc2lvbiAxOTYwMTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNQcm9j
ZWR1cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSAiQjNP
cGFxdWVCeXByb2R1Y3RzLmgiCiAjaW5jbHVkZSAiQjNTdGFja1Nsb3QuaCIKICNpbmNsdWRlICJC
M1ZhbHVlSW5saW5lcy5oIgorI2luY2x1ZGUgIkIzVmFyaWFibGUuaCIKIAogbmFtZXNwYWNlIEpT
QyB7IG5hbWVzcGFjZSBCMyB7CiAKQEAgLTQ2LDcgKzQ3LDYgQEAgUHJvY2VkdXJlOjpQcm9jZWR1
cmUoKQogICAgICwgbV9sYXN0UGhhc2VOYW1lKCJpbml0aWFsIikKICAgICAsIG1fYnlwcm9kdWN0
cyhzdGQ6Om1ha2VfdW5pcXVlPE9wYXF1ZUJ5cHJvZHVjdHM+KCkpCiAgICAgLCBtX2NvZGUobmV3
IEFpcjo6Q29kZSgqdGhpcykpCi0gICAgLCBtX3ZhbHVlc0NvbGxlY3Rpb24oKnRoaXMpCiB7CiB9
CiAKQEAgLTcwLDUxICs3MCwyMiBAQCBCYXNpY0Jsb2NrKiBQcm9jZWR1cmU6OmFkZEJsb2NrKGRv
dWJsZSBmCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotdm9pZCBQcm9jZWR1cmU6OnNldEJsb2Nr
T3JkZXJJbXBsKFZlY3RvcjxCYXNpY0Jsb2NrKj4mIGJsb2NrcykKK1N0YWNrU2xvdCogUHJvY2Vk
dXJlOjphZGRTdGFja1Nsb3QodW5zaWduZWQgYnl0ZVNpemUpCiB7Ci0gICAgSW5kZXhTZXQ8QmFz
aWNCbG9jaz4gYmxvY2tzU2V0OwotICAgIGJsb2Nrc1NldC5hZGRBbGwoYmxvY2tzKTsKLQotICAg
IGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiAqdGhpcykgewotICAgICAgICBpZiAoIWJsb2Nrc1Nl
dC5jb250YWlucyhibG9jaykpCi0gICAgICAgICAgICBibG9ja3MuYXBwZW5kKGJsb2NrKTsKLSAg
ICB9Ci0KLSAgICAvLyBQbGFjZSBibG9ja3MgaW50byB0aGlzJ3MgYmxvY2sgbGlzdCBieSBmaXJz
dCBsZWFraW5nIGFsbCBvZiB0aGUgYmxvY2tzIGFuZCB0aGVuIHJlYWRvcHRpbmcKLSAgICAvLyB0
aGVtLgotICAgIGZvciAoYXV0byYgZW50cnkgOiBtX2Jsb2NrcykKLSAgICAgICAgZW50cnkucmVs
ZWFzZSgpOwotCi0gICAgbV9ibG9ja3MucmVzaXplKGJsb2Nrcy5zaXplKCkpOwotICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBibG9ja3Muc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgQmFzaWNC
bG9jayogYmxvY2sgPSBibG9ja3NbaV07Ci0gICAgICAgIGJsb2NrLT5tX2luZGV4ID0gaTsKLSAg
ICAgICAgbV9ibG9ja3NbaV0gPSBzdGQ6OnVuaXF1ZV9wdHI8QmFzaWNCbG9jaz4oYmxvY2spOwot
ICAgIH0KLX0KLQotU3RhY2tTbG90KiBQcm9jZWR1cmU6OmFkZFN0YWNrU2xvdCh1bnNpZ25lZCBi
eXRlU2l6ZSwgU3RhY2tTbG90S2luZCBraW5kKQotewotICAgIHNpemVfdCBpbmRleCA9IGFkZFN0
YWNrU2xvdEluZGV4KCk7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFN0YWNrU2xvdD4gc2xvdChuZXcg
U3RhY2tTbG90KGluZGV4LCBieXRlU2l6ZSwga2luZCkpOwotICAgIFN0YWNrU2xvdCogcmVzdWx0
ID0gc2xvdC5nZXQoKTsKLSAgICBtX3N0YWNrU2xvdHNbaW5kZXhdID0gV1RGTW92ZShzbG90KTsK
LSAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiBtX3N0YWNrU2xvdHMuYWRkTmV3KGJ5dGVT
aXplKTsKIH0KIAotU3RhY2tTbG90KiBQcm9jZWR1cmU6OmFkZEFub255bW91c1N0YWNrU2xvdChU
eXBlIHR5cGUpCitWYXJpYWJsZSogUHJvY2VkdXJlOjphZGRWYXJpYWJsZShUeXBlIHR5cGUpCiB7
Ci0gICAgcmV0dXJuIGFkZFN0YWNrU2xvdChzaXplb2ZUeXBlKHR5cGUpLCBTdGFja1Nsb3RLaW5k
OjpBbm9ueW1vdXMpOworICAgIHJldHVybiBtX3ZhcmlhYmxlcy5hZGROZXcodHlwZSk7IAogfQog
CiBWYWx1ZSogUHJvY2VkdXJlOjpjbG9uZShWYWx1ZSogdmFsdWUpCiB7CiAgICAgc3RkOjp1bmlx
dWVfcHRyPFZhbHVlPiBjbG9uZSh2YWx1ZS0+Y2xvbmVJbXBsKCkpOwotICAgIFZhbHVlKiByZXN1
bHQgPSBjbG9uZS5nZXQoKTsKLSAgICBjbG9uZS0+bV9pbmRleCA9IGFkZFZhbHVlSW5kZXgoKTsK
KyAgICBjbG9uZS0+bV9pbmRleCA9IFVJTlRfTUFYOwogICAgIGNsb25lLT5vd25lciA9IG51bGxw
dHI7Ci0gICAgbV92YWx1ZXNbY2xvbmUtPm1faW5kZXhdID0gV1RGTW92ZShjbG9uZSk7Ci0gICAg
cmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gbV92YWx1ZXMuYWRkKFdURk1vdmUoY2xvbmUpKTsK
IH0KIAogVmFsdWUqIFByb2NlZHVyZTo6YWRkSW50Q29uc3RhbnQoT3JpZ2luIG9yaWdpbiwgVHlw
ZSB0eXBlLCBpbnQ2NF90IHZhbHVlKQpAQCAtMjA4LDYgKzE3OSwxMSBAQCB2b2lkIFByb2NlZHVy
ZTo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjCiAgICAgICAgIH0KICAgICAgICAgZGF0YUxvZygi
ICAgICIsIGRlZXBEdW1wKCp0aGlzLCB2YWx1ZSksICJcbiIpOwogICAgIH0KKyAgICBpZiAodmFy
aWFibGVzKCkuc2l6ZSgpKSB7CisgICAgICAgIG91dC5wcmludCgiVmFyaWFibGVzOlxuIik7Cisg
ICAgICAgIGZvciAoVmFyaWFibGUqIHZhcmlhYmxlIDogdmFyaWFibGVzKCkpCisgICAgICAgICAg
ICBvdXQucHJpbnQoIiAgICAiLCBkZWVwRHVtcCh2YXJpYWJsZSksICJcbiIpOworICAgIH0KICAg
ICBpZiAoc3RhY2tTbG90cygpLnNpemUoKSkgewogICAgICAgICBvdXQucHJpbnQoIlN0YWNrIHNs
b3RzOlxuIik7CiAgICAgICAgIGZvciAoU3RhY2tTbG90KiBzbG90IDogc3RhY2tTbG90cygpKQpA
QCAtMjI5LDE3ICsyMDUsMTcgQEAgVmVjdG9yPEJhc2ljQmxvY2sqPiBQcm9jZWR1cmU6OmJsb2Nr
c0luUAogCiB2b2lkIFByb2NlZHVyZTo6ZGVsZXRlU3RhY2tTbG90KFN0YWNrU2xvdCogc3RhY2tT
bG90KQogewotICAgIFJFTEVBU0VfQVNTRVJUKG1fc3RhY2tTbG90c1tzdGFja1Nsb3QtPmluZGV4
KCldLmdldCgpID09IHN0YWNrU2xvdCk7Ci0gICAgUkVMRUFTRV9BU1NFUlQoIXN0YWNrU2xvdC0+
aXNMb2NrZWQoKSk7Ci0gICAgbV9zdGFja1Nsb3RJbmRleEZyZWVMaXN0LmFwcGVuZChzdGFja1Ns
b3QtPmluZGV4KCkpOwotICAgIG1fc3RhY2tTbG90c1tzdGFja1Nsb3QtPmluZGV4KCldID0gbnVs
bHB0cjsKKyAgICBtX3N0YWNrU2xvdHMucmVtb3ZlKHN0YWNrU2xvdCk7Cit9CisKK3ZvaWQgUHJv
Y2VkdXJlOjpkZWxldGVWYXJpYWJsZShWYXJpYWJsZSogdmFyaWFibGUpCit7CisgICAgbV92YXJp
YWJsZXMucmVtb3ZlKHZhcmlhYmxlKTsKIH0KIAogdm9pZCBQcm9jZWR1cmU6OmRlbGV0ZVZhbHVl
KFZhbHVlKiB2YWx1ZSkKIHsKLSAgICBSRUxFQVNFX0FTU0VSVChtX3ZhbHVlc1t2YWx1ZS0+aW5k
ZXgoKV0uZ2V0KCkgPT0gdmFsdWUpOwotICAgIG1fdmFsdWVJbmRleEZyZWVMaXN0LmFwcGVuZCh2
YWx1ZS0+aW5kZXgoKSk7Ci0gICAgbV92YWx1ZXNbdmFsdWUtPmluZGV4KCldID0gbnVsbHB0cjsK
KyAgICBtX3ZhbHVlcy5yZW1vdmUodmFsdWUpOwogfQogCiB2b2lkIFByb2NlZHVyZTo6ZGVsZXRl
T3JwaGFucygpCkBAIC0zMTEsMjYgKzI4NywzMiBAQCBjb25zdCBSZWdpc3RlckF0T2Zmc2V0TGlz
dCYgUHJvY2VkdXJlOjpjCiAgICAgcmV0dXJuIGNvZGUoKS5jYWxsZWVTYXZlUmVnaXN0ZXJzKCk7
CiB9CiAKLXNpemVfdCBQcm9jZWR1cmU6OmFkZFN0YWNrU2xvdEluZGV4KCkKK1ZhbHVlKiBQcm9j
ZWR1cmU6OmFkZFZhbHVlSW1wbChWYWx1ZSogdmFsdWUpCiB7Ci0gICAgaWYgKG1fc3RhY2tTbG90
SW5kZXhGcmVlTGlzdC5pc0VtcHR5KCkpIHsKLSAgICAgICAgc2l6ZV90IGluZGV4ID0gbV9zdGFj
a1Nsb3RzLnNpemUoKTsKLSAgICAgICAgbV9zdGFja1Nsb3RzLmFwcGVuZChudWxscHRyKTsKLSAg
ICAgICAgcmV0dXJuIGluZGV4OwotICAgIH0KLSAgICAKLSAgICByZXR1cm4gbV9zdGFja1Nsb3RJ
bmRleEZyZWVMaXN0LnRha2VMYXN0KCk7CisgICAgcmV0dXJuIG1fdmFsdWVzLmFkZChzdGQ6OnVu
aXF1ZV9wdHI8VmFsdWU+KHZhbHVlKSk7CiB9CiAKLXNpemVfdCBQcm9jZWR1cmU6OmFkZFZhbHVl
SW5kZXgoKQordm9pZCBQcm9jZWR1cmU6OnNldEJsb2NrT3JkZXJJbXBsKFZlY3RvcjxCYXNpY0Js
b2NrKj4mIGJsb2NrcykKIHsKLSAgICBpZiAobV92YWx1ZUluZGV4RnJlZUxpc3QuaXNFbXB0eSgp
KSB7Ci0gICAgICAgIHNpemVfdCBpbmRleCA9IG1fdmFsdWVzLnNpemUoKTsKLSAgICAgICAgbV92
YWx1ZXMuYXBwZW5kKG51bGxwdHIpOwotICAgICAgICByZXR1cm4gaW5kZXg7CisgICAgSW5kZXhT
ZXQ8QmFzaWNCbG9jaz4gYmxvY2tzU2V0OworICAgIGJsb2Nrc1NldC5hZGRBbGwoYmxvY2tzKTsK
KworICAgIGZvciAoQmFzaWNCbG9jayogYmxvY2sgOiAqdGhpcykgeworICAgICAgICBpZiAoIWJs
b2Nrc1NldC5jb250YWlucyhibG9jaykpCisgICAgICAgICAgICBibG9ja3MuYXBwZW5kKGJsb2Nr
KTsKKyAgICB9CisKKyAgICAvLyBQbGFjZSBibG9ja3MgaW50byB0aGlzJ3MgYmxvY2sgbGlzdCBi
eSBmaXJzdCBsZWFraW5nIGFsbCBvZiB0aGUgYmxvY2tzIGFuZCB0aGVuIHJlYWRvcHRpbmcKKyAg
ICAvLyB0aGVtLgorICAgIGZvciAoYXV0byYgZW50cnkgOiBtX2Jsb2NrcykKKyAgICAgICAgZW50
cnkucmVsZWFzZSgpOworCisgICAgbV9ibG9ja3MucmVzaXplKGJsb2Nrcy5zaXplKCkpOworICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBibG9ja3Muc2l6ZSgpOyArK2kpIHsKKyAgICAgICAg
QmFzaWNCbG9jayogYmxvY2sgPSBibG9ja3NbaV07CisgICAgICAgIGJsb2NrLT5tX2luZGV4ID0g
aTsKKyAgICAgICAgbV9ibG9ja3NbaV0gPSBzdGQ6OnVuaXF1ZV9wdHI8QmFzaWNCbG9jaz4oYmxv
Y2spOwogICAgIH0KLSAgICAKLSAgICByZXR1cm4gbV92YWx1ZUluZGV4RnJlZUxpc3QudGFrZUxh
c3QoKTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNQcm9jZWR1cmUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNQcm9jZWR1cmUuaAkocmV2aXNpb24gMTk2MDExKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcg
QEAKICNpbmNsdWRlICJCM09wYXF1ZUJ5cHJvZHVjdHMuaCIKICNpbmNsdWRlICJCM09yaWdpbi5o
IgogI2luY2x1ZGUgIkIzUENUb09yaWdpbk1hcC5oIgotI2luY2x1ZGUgIkIzU3RhY2tTbG90S2lu
ZC5oIgorI2luY2x1ZGUgIkIzU3BhcnNlQ29sbGVjdGlvbi5oIgogI2luY2x1ZGUgIkIzVHlwZS5o
IgogI2luY2x1ZGUgIkIzVmFsdWVLZXkuaCIKICNpbmNsdWRlICJQdXJlTmFOLmgiCkBAIC01Myw2
ICs1Myw3IEBAIGNsYXNzIENGRzsKIGNsYXNzIERvbWluYXRvcnM7CiBjbGFzcyBTdGFja1Nsb3Q7
CiBjbGFzcyBWYWx1ZTsKK2NsYXNzIFZhcmlhYmxlOwogCiBuYW1lc3BhY2UgQWlyIHsgY2xhc3Mg
Q29kZTsgfQogCkBAIC05NCw4ICs5NSw4IEBAIHB1YmxpYzoKICAgICAgICAgc2V0QmxvY2tPcmRl
ckltcGwoYmxvY2tzKTsKICAgICB9CiAKLSAgICBKU19FWFBPUlRfUFJJVkFURSBTdGFja1Nsb3Qq
IGFkZFN0YWNrU2xvdCh1bnNpZ25lZCBieXRlU2l6ZSwgU3RhY2tTbG90S2luZCk7Ci0gICAgSlNf
RVhQT1JUX1BSSVZBVEUgU3RhY2tTbG90KiBhZGRBbm9ueW1vdXNTdGFja1Nsb3QoVHlwZSk7Cisg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgU3RhY2tTbG90KiBhZGRTdGFja1Nsb3QodW5zaWduZWQgYnl0
ZVNpemUpOworICAgIEpTX0VYUE9SVF9QUklWQVRFIFZhcmlhYmxlKiBhZGRWYXJpYWJsZShUeXBl
KTsKICAgICAKICAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBWYWx1ZVR5cGUsIHR5cGVuYW1lLi4uIEFy
Z3VtZW50cz4KICAgICBWYWx1ZVR5cGUqIGFkZChBcmd1bWVudHMuLi4pOwpAQCAtMTc4LDE0MyAr
MTc5LDIyIEBAIHB1YmxpYzoKICAgICBWZWN0b3I8QmFzaWNCbG9jayo+IGJsb2Nrc0luUHJlT3Jk
ZXIoKTsKICAgICBWZWN0b3I8QmFzaWNCbG9jayo+IGJsb2Nrc0luUG9zdE9yZGVyKCk7CiAKLSAg
ICBjbGFzcyBTdGFja1Nsb3RzQ29sbGVjdGlvbiB7Ci0gICAgcHVibGljOgotICAgICAgICBTdGFj
a1Nsb3RzQ29sbGVjdGlvbihjb25zdCBQcm9jZWR1cmUmIHByb2MpCi0gICAgICAgICAgICA6IG1f
cHJvYyhwcm9jKQotICAgICAgICB7Ci0gICAgICAgIH0KLQotICAgICAgICB1bnNpZ25lZCBzaXpl
KCkgY29uc3QgeyByZXR1cm4gbV9wcm9jLm1fc3RhY2tTbG90cy5zaXplKCk7IH0KLSAgICAgICAg
U3RhY2tTbG90KiBhdCh1bnNpZ25lZCBpbmRleCkgY29uc3QgeyByZXR1cm4gbV9wcm9jLm1fc3Rh
Y2tTbG90c1tpbmRleF0uZ2V0KCk7IH0KLSAgICAgICAgU3RhY2tTbG90KiBvcGVyYXRvcltdKHVu
c2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBhdChpbmRleCk7IH0KLQotICAgICAgICBjbGFz
cyBpdGVyYXRvciB7Ci0gICAgICAgIHB1YmxpYzoKLSAgICAgICAgICAgIGl0ZXJhdG9yKCkKLSAg
ICAgICAgICAgICAgICA6IG1fY29sbGVjdGlvbihudWxscHRyKQotICAgICAgICAgICAgICAgICwg
bV9pbmRleCgwKQotICAgICAgICAgICAgewotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBp
dGVyYXRvcihjb25zdCBTdGFja1Nsb3RzQ29sbGVjdGlvbiYgY29sbGVjdGlvbiwgdW5zaWduZWQg
aW5kZXgpCi0gICAgICAgICAgICAgICAgOiBtX2NvbGxlY3Rpb24oJmNvbGxlY3Rpb24pCi0gICAg
ICAgICAgICAgICAgLCBtX2luZGV4KGZpbmROZXh0KGluZGV4KSkKLSAgICAgICAgICAgIHsKLSAg
ICAgICAgICAgIH0KLQotICAgICAgICAgICAgU3RhY2tTbG90KiBvcGVyYXRvciooKQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIHJldHVybiBtX2NvbGxlY3Rpb24tPmF0KG1faW5kZXgp
OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpdGVyYXRvciYgb3BlcmF0b3IrKygpCi0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgbV9pbmRleCA9IGZpbmROZXh0KG1faW5kZXgg
KyAxKTsKLSAgICAgICAgICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgICAgICAgICB9Ci0KLSAg
ICAgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNvbnN0Ci0g
ICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG1faW5kZXggPT0gb3RoZXIubV9p
bmRleDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0
IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0
ZToKLSAgICAgICAgICAgIHVuc2lnbmVkIGZpbmROZXh0KHVuc2lnbmVkIGluZGV4KQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIHdoaWxlIChpbmRleCA8IG1fY29sbGVjdGlvbi0+c2l6
ZSgpICYmICFtX2NvbGxlY3Rpb24tPmF0KGluZGV4KSkKLSAgICAgICAgICAgICAgICAgICAgaW5k
ZXgrKzsKLSAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXg7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAKLSAgICAgICAgICAgIGNvbnN0IFN0YWNrU2xvdHNDb2xsZWN0aW9uKiBtX2NvbGxl
Y3Rpb247Ci0gICAgICAgICAgICB1bnNpZ25lZCBtX2luZGV4OwotICAgICAgICB9OwotCi0gICAg
ICAgIGl0ZXJhdG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoKnRoaXMsIDApOyB9
Ci0gICAgICAgIGl0ZXJhdG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKCp0aGlzLCBz
aXplKCkpOyB9Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBjb25zdCBQcm9jZWR1cmUmIG1fcHJv
YzsKLSAgICB9OwotCi0gICAgU3RhY2tTbG90c0NvbGxlY3Rpb24gc3RhY2tTbG90cygpIGNvbnN0
IHsgcmV0dXJuIFN0YWNrU2xvdHNDb2xsZWN0aW9uKCp0aGlzKTsgfQorICAgIFNwYXJzZUNvbGxl
Y3Rpb248U3RhY2tTbG90PiYgc3RhY2tTbG90cygpIHsgcmV0dXJuIG1fc3RhY2tTbG90czsgfQor
ICAgIGNvbnN0IFNwYXJzZUNvbGxlY3Rpb248U3RhY2tTbG90PiYgc3RhY2tTbG90cygpIGNvbnN0
IHsgcmV0dXJuIG1fc3RhY2tTbG90czsgfQogCisgICAgLy8gU2hvcnQgZm9yIHN0YWNrU2xvdHMo
KS5yZW1vdmUoKS4gSXQncyBiZXR0ZXIgdG8gY2FsbCB0aGlzIG1ldGhvZCBzaW5jZSBpdCdzIG91
dCBvZiBsaW5lLgogICAgIHZvaWQgZGVsZXRlU3RhY2tTbG90KFN0YWNrU2xvdCopOwotICAgIAot
ICAgIGNsYXNzIFZhbHVlc0NvbGxlY3Rpb24gewotICAgIHB1YmxpYzoKLSAgICAgICAgVmFsdWVz
Q29sbGVjdGlvbihjb25zdCBQcm9jZWR1cmUmIHByb2NlZHVyZSkKLSAgICAgICAgICAgIDogbV9w
cm9jZWR1cmUocHJvY2VkdXJlKQotICAgICAgICB7Ci0gICAgICAgIH0KIAotICAgICAgICBjbGFz
cyBpdGVyYXRvciB7Ci0gICAgICAgIHB1YmxpYzoKLSAgICAgICAgICAgIGl0ZXJhdG9yKCkKLSAg
ICAgICAgICAgICAgICA6IG1fcHJvY2VkdXJlKG51bGxwdHIpCi0gICAgICAgICAgICAgICAgLCBt
X2luZGV4KDApCi0gICAgICAgICAgICB7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIGl0
ZXJhdG9yKGNvbnN0IFByb2NlZHVyZSYgcHJvY2VkdXJlLCB1bnNpZ25lZCBpbmRleCkKLSAgICAg
ICAgICAgICAgICA6IG1fcHJvY2VkdXJlKCZwcm9jZWR1cmUpCi0gICAgICAgICAgICAgICAgLCBt
X2luZGV4KGZpbmROZXh0KGluZGV4KSkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgVmFsdWUqIG9wZXJhdG9yKigpIGNvbnN0Ci0gICAgICAgICAgICB7Ci0gICAg
ICAgICAgICAgICAgcmV0dXJuIG1fcHJvY2VkdXJlLT5tX3ZhbHVlc1ttX2luZGV4XS5nZXQoKTsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaXRlcmF0b3ImIG9wZXJhdG9yKysoKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIG1faW5kZXggPSBmaW5kTmV4dChtX2luZGV4ICsg
MSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuICp0aGlzOwotICAgICAgICAgICAgfQotCi0gICAg
ICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAotICAg
ICAgICAgICAgewotICAgICAgICAgICAgICAgIEFTU0VSVChtX3Byb2NlZHVyZSA9PSBvdGhlci5t
X3Byb2NlZHVyZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG1faW5kZXggPT0gb3RoZXIubV9p
bmRleDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0
IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICBy
ZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgcHJpdmF0
ZToKLSAgICAgICAgICAgIHVuc2lnbmVkIGZpbmROZXh0KHVuc2lnbmVkIGluZGV4KQotICAgICAg
ICAgICAgewotICAgICAgICAgICAgICAgIHdoaWxlIChpbmRleCA8IG1fcHJvY2VkdXJlLT5tX3Zh
bHVlcy5zaXplKCkgJiYgIW1fcHJvY2VkdXJlLT5tX3ZhbHVlc1tpbmRleF0pCi0gICAgICAgICAg
ICAgICAgICAgIGluZGV4Kys7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4OwotICAgICAg
ICAgICAgfQotCi0gICAgICAgICAgICBjb25zdCBQcm9jZWR1cmUqIG1fcHJvY2VkdXJlOwotICAg
ICAgICAgICAgdW5zaWduZWQgbV9pbmRleDsKLSAgICAgICAgfTsKLQotICAgICAgICBpdGVyYXRv
ciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKG1fcHJvY2VkdXJlLCAwKTsgfQotICAg
ICAgICBpdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcihtX3Byb2NlZHVyZSwg
bV9wcm9jZWR1cmUubV92YWx1ZXMuc2l6ZSgpKTsgfQotCi0gICAgICAgIHVuc2lnbmVkIHNpemUo
KSBjb25zdCB7IHJldHVybiBtX3Byb2NlZHVyZS5tX3ZhbHVlcy5zaXplKCk7IH0KLSAgICAgICAg
VmFsdWUqIGF0KHVuc2lnbmVkIGluZGV4KSBjb25zdCB7IHJldHVybiBtX3Byb2NlZHVyZS5tX3Zh
bHVlc1tpbmRleF0uZ2V0KCk7IH0KLSAgICAgICAgVmFsdWUqIG9wZXJhdG9yW10odW5zaWduZWQg
aW5kZXgpIGNvbnN0IHsgcmV0dXJuIGF0KGluZGV4KTsgfQotICAgICAgICAKLSAgICBwcml2YXRl
OgotICAgICAgICBjb25zdCBQcm9jZWR1cmUmIG1fcHJvY2VkdXJlOwotICAgIH07CisgICAgU3Bh
cnNlQ29sbGVjdGlvbjxWYXJpYWJsZT4mIHZhcmlhYmxlcygpIHsgcmV0dXJuIG1fdmFyaWFibGVz
OyB9CisgICAgY29uc3QgU3BhcnNlQ29sbGVjdGlvbjxWYXJpYWJsZT4mIHZhcmlhYmxlcygpIGNv
bnN0IHsgcmV0dXJuIG1fdmFyaWFibGVzOyB9CisKKyAgICAvLyBTaG9ydCBmb3IgdmFyaWFibGVz
KCkucmVtb3ZlKCkuIEl0J3MgYmV0dGVyIHRvIGNhbGwgdGhpcyBtZXRob2Qgc2luY2UgaXQncyBv
dXQgb2YgbGluZS4KKyAgICB2b2lkIGRlbGV0ZVZhcmlhYmxlKFZhcmlhYmxlKik7CiAKLSAgICBj
b25zdCBWYWx1ZXNDb2xsZWN0aW9uJiB2YWx1ZXMoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlc0Nv
bGxlY3Rpb247IH0KKyAgICBTcGFyc2VDb2xsZWN0aW9uPFZhbHVlPiYgdmFsdWVzKCkgeyByZXR1
cm4gbV92YWx1ZXM7IH0KKyAgICBjb25zdCBTcGFyc2VDb2xsZWN0aW9uPFZhbHVlPiYgdmFsdWVz
KCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZXM7IH0KIAorICAgIC8vIFNob3J0IGZvciB2YWx1ZXMo
KS5yZW1vdmUoKS4gSXQncyBiZXR0ZXIgdG8gY2FsbCB0aGlzIG1ldGhvZCBzaW5jZSBpdCdzIG91
dCBvZiBsaW5lLgogICAgIHZvaWQgZGVsZXRlVmFsdWUoVmFsdWUqKTsKIAogICAgIC8vIEEgdmFs
aWQgcHJvY2VkdXJlIGNhbm5vdCBjb250YWluIGFueSBvcnBoYW4gdmFsdWVzLiBBbiBvcnBoYW4g
aXMgYSB2YWx1ZSB0aGF0IGlzIG5vdCBpbgpAQCAtMzY3LDE3ICsyNDcsMTQgQEAgcHVibGljOgog
CiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBCbG9ja0luc2VydGlvblNldDsKLSAgICAKLSAg
ICB2b2lkIHNldEJsb2NrT3JkZXJJbXBsKFZlY3RvcjxCYXNpY0Jsb2NrKj4mKTsKIAotICAgIHNp
emVfdCBhZGRTdGFja1Nsb3RJbmRleCgpOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHNpemVfdCBh
ZGRWYWx1ZUluZGV4KCk7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgVmFsdWUqIGFkZFZhbHVlSW1w
bChWYWx1ZSopOworICAgIHZvaWQgc2V0QmxvY2tPcmRlckltcGwoVmVjdG9yPEJhc2ljQmxvY2sq
PiYpOwogCi0gICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxTdGFja1Nsb3Q+PiBtX3N0YWNrU2xv
dHM7CisgICAgU3BhcnNlQ29sbGVjdGlvbjxTdGFja1Nsb3Q+IG1fc3RhY2tTbG90czsKKyAgICBT
cGFyc2VDb2xsZWN0aW9uPFZhcmlhYmxlPiBtX3ZhcmlhYmxlczsKICAgICBWZWN0b3I8c3RkOjp1
bmlxdWVfcHRyPEJhc2ljQmxvY2s+PiBtX2Jsb2NrczsKLSAgICBWZWN0b3I8c3RkOjp1bmlxdWVf
cHRyPFZhbHVlPj4gbV92YWx1ZXM7Ci0gICAgVmVjdG9yPHNpemVfdD4gbV9zdGFja1Nsb3RJbmRl
eEZyZWVMaXN0OwotICAgIFZlY3RvcjxzaXplX3Q+IG1fdmFsdWVJbmRleEZyZWVMaXN0OworICAg
IFNwYXJzZUNvbGxlY3Rpb248VmFsdWU+IG1fdmFsdWVzOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxD
Rkc+IG1fY2ZnOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxEb21pbmF0b3JzPiBtX2RvbWluYXRvcnM7
CiAgICAgSGFzaFNldDxWYWx1ZUtleT4gbV9mYXN0Q29uc3RhbnRzOwpAQCAtMzg2LDcgKzI2Myw2
IEBAIHByaXZhdGU6CiAgICAgc3RkOjp1bmlxdWVfcHRyPEFpcjo6Q29kZT4gbV9jb2RlOwogICAg
IFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoUHJpbnRTdHJlYW0mLCBPcmlnaW4pPj4gbV9vcmlnaW5Q
cmludGVyOwogICAgIGNvbnN0IHZvaWQqIG1fZnJvbnRlbmREYXRhOwotICAgIFZhbHVlc0NvbGxl
Y3Rpb24gbV92YWx1ZXNDb2xsZWN0aW9uOwogICAgIFBDVG9PcmlnaW5NYXAgbV9wY1RvT3JpZ2lu
TWFwOwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUHJvY2VkdXJlSW5s
aW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Byb2NlZHVy
ZUlubGluZXMuaAkocmV2aXNpb24gMTk2MDExKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzUHJvY2VkdXJlSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNiwxMSArMzYsNyBAQCBu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKIHRlbXBsYXRlPHR5cGVuYW1lIFZhbHVlVHlw
ZSwgdHlwZW5hbWUuLi4gQXJndW1lbnRzPgogVmFsdWVUeXBlKiBQcm9jZWR1cmU6OmFkZChBcmd1
bWVudHMuLi4gYXJndW1lbnRzKQogewotICAgIHNpemVfdCBpbmRleCA9IGFkZFZhbHVlSW5kZXgo
KTsKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8VmFsdWVUeXBlPiB2YWx1ZShuZXcgVmFsdWVUeXBlKGlu
ZGV4LCBhcmd1bWVudHMuLi4pKTsKLSAgICBWYWx1ZVR5cGUqIHJlc3VsdCA9IHZhbHVlLmdldCgp
OwotICAgIG1fdmFsdWVzW2luZGV4XSA9IFdURk1vdmUodmFsdWUpOwotICAgIHJldHVybiByZXN1
bHQ7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PFZhbHVlVHlwZSo+KGFkZFZhbHVlSW1wbChuZXcg
VmFsdWVUeXBlKGFyZ3VtZW50cy4uLikpKTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIz
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VTdHJlbmd0aC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzUmVkdWNlU3RyZW5ndGguY3Bw
CShyZXZpc2lvbiAxOTYwMTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNSZWR1Y2VT
dHJlbmd0aC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ1LDYgKzQ1LDggQEAKICNpbmNsdWRlICJC
M1Vwc2lsb25WYWx1ZS5oIgogI2luY2x1ZGUgIkIzVmFsdWVLZXlJbmxpbmVzLmgiCiAjaW5jbHVk
ZSAiQjNWYWx1ZUlubGluZXMuaCIKKyNpbmNsdWRlICJCM1ZhcmlhYmxlLmgiCisjaW5jbHVkZSAi
QjNWYXJpYWJsZVZhbHVlLmgiCiAjaW5jbHVkZSA8d3RmL0dyYXBoTm9kZVdvcmtsaXN0Lmg+CiAj
aW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KIApAQCAtMjI4MywxMyArMjI4NSwxNSBAQCBwcml2YXRl
OgogICAgICAgICBWZWN0b3I8VXBzaWxvblZhbHVlKiwgNjQ+IHVwc2lsb25zOwogICAgICAgICBm
b3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9wcm9jKSB7CiAgICAgICAgICAgICBmb3IgKFZhbHVl
KiB2YWx1ZSA6ICpibG9jaykgewotICAgICAgICAgICAgICAgIEVmZmVjdHMgZWZmZWN0cyA9IHZh
bHVlLT5lZmZlY3RzKCk7Ci0gICAgICAgICAgICAgICAgLy8gV2UgZG9uJ3QgY2FyZSBhYm91dCBT
U0EgRWZmZWN0cywgc2luY2Ugd2UgbW9kZWwgdGhlbSBtb3JlIGFjY3VyYXRlbHkgdGhhbiB0aGUK
LSAgICAgICAgICAgICAgICAvLyBlZmZlY3RzKCkgbWV0aG9kIGRvZXMuCi0gICAgICAgICAgICAg
ICAgZWZmZWN0cy53cml0ZXNTU0FTdGF0ZSA9IGZhbHNlOwotICAgICAgICAgICAgICAgIGVmZmVj
dHMucmVhZHNTU0FTdGF0ZSA9IGZhbHNlOworICAgICAgICAgICAgICAgIEVmZmVjdHMgZWZmZWN0
czsKKyAgICAgICAgICAgICAgICAvLyBXZSBkb24ndCBjYXJlIGFib3V0IGVmZmVjdHMgb2YgU1NB
IG9wZXJhdGlvbnMsIHNpbmNlIHdlIG1vZGVsIHRoZW0gbW9yZQorICAgICAgICAgICAgICAgIC8v
IGFjY3VyYXRlbHkgdGhhIHRoZSBlZmZlY3RzKCkgbWV0aG9kIGRvZXMuCisgICAgICAgICAgICAg
ICAgaWYgKHZhbHVlLT5vcGNvZGUoKSAhPSBQaGkgJiYgdmFsdWUtPm9wY29kZSgpICE9IFVwc2ls
b24pCisgICAgICAgICAgICAgICAgICAgIGVmZmVjdHMgPSB2YWx1ZS0+ZWZmZWN0cygpOworICAg
ICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIGlmIChlZmZlY3RzLm11c3RFeGVjdXRlKCkp
CiAgICAgICAgICAgICAgICAgICAgIHdvcmtsaXN0LnB1c2godmFsdWUpOworICAgICAgICAgICAg
ICAgIAogICAgICAgICAgICAgICAgIGlmIChVcHNpbG9uVmFsdWUqIHVwc2lsb24gPSB2YWx1ZS0+
YXM8VXBzaWxvblZhbHVlPigpKQogICAgICAgICAgICAgICAgICAgICB1cHNpbG9ucy5hcHBlbmQo
dXBzaWxvbik7CiAgICAgICAgICAgICB9CkBAIC0yMzE0LDcgKzIzMTgsNyBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKLSAgICAgICAgSW5kZXhTZXQ8U3Rh
Y2tTbG90PiBsaXZlU3RhY2tTbG90czsKKyAgICAgICAgSW5kZXhTZXQ8VmFyaWFibGU+IGxpdmVW
YXJpYWJsZXM7CiAgICAgICAgIAogICAgICAgICBmb3IgKEJhc2ljQmxvY2sqIGJsb2NrIDogbV9w
cm9jKSB7CiAgICAgICAgICAgICBzaXplX3Qgc291cmNlSW5kZXggPSAwOwpAQCAtMjMyMiw4ICsy
MzI2LDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHdoaWxlIChzb3VyY2VJbmRleCA8IGJsb2Nr
LT5zaXplKCkpIHsKICAgICAgICAgICAgICAgICBWYWx1ZSogdmFsdWUgPSBibG9jay0+YXQoc291
cmNlSW5kZXgrKyk7CiAgICAgICAgICAgICAgICAgaWYgKHdvcmtsaXN0LnNhdyh2YWx1ZSkpIHsK
LSAgICAgICAgICAgICAgICAgICAgaWYgKFNsb3RCYXNlVmFsdWUqIHNsb3RCYXNlID0gdmFsdWUt
PmFzPFNsb3RCYXNlVmFsdWU+KCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBsaXZlU3RhY2tT
bG90cy5hZGQoc2xvdEJhc2UtPnNsb3QoKSk7CisgICAgICAgICAgICAgICAgICAgIGlmIChWYXJp
YWJsZVZhbHVlKiB2YXJpYWJsZVZhbHVlID0gdmFsdWUtPmFzPFZhcmlhYmxlVmFsdWU+KCkpCisg
ICAgICAgICAgICAgICAgICAgICAgICBsaXZlVmFyaWFibGVzLmFkZCh2YXJpYWJsZVZhbHVlLT52
YXJpYWJsZSgpKTsKICAgICAgICAgICAgICAgICAgICAgYmxvY2stPmF0KHRhcmdldEluZGV4Kysp
ID0gdmFsdWU7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAg
bV9wcm9jLmRlbGV0ZVZhbHVlKHZhbHVlKTsKQEAgLTIzMzgsMTAgKzIzNDIsOSBAQCBwcml2YXRl
OgogICAgICAgICAgICAgYmxvY2stPnZhbHVlcygpLnJlc2l6ZSh0YXJnZXRJbmRleCk7CiAgICAg
ICAgIH0KIAotICAgICAgICBmb3IgKFN0YWNrU2xvdCogc2xvdCA6IG1fcHJvYy5zdGFja1Nsb3Rz
KCkpIHsKLSAgICAgICAgICAgIGlmIChzbG90LT5pc0xvY2tlZCgpIHx8IGxpdmVTdGFja1Nsb3Rz
LmNvbnRhaW5zKHNsb3QpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAg
bV9wcm9jLmRlbGV0ZVN0YWNrU2xvdChzbG90KTsKKyAgICAgICAgZm9yIChWYXJpYWJsZSogdmFy
aWFibGUgOiBtX3Byb2MudmFyaWFibGVzKCkpIHsKKyAgICAgICAgICAgIGlmICghbGl2ZVZhcmlh
Ymxlcy5jb250YWlucyh2YXJpYWJsZSkpCisgICAgICAgICAgICAgICAgbV9wcm9jLmRlbGV0ZVZh
cmlhYmxlKHZhcmlhYmxlKTsKICAgICAgICAgfQogICAgIH0KIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzU2xvdEJhc2VWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1Nsb3RCYXNlVmFsdWUuaAkocmV2aXNpb24gMTk2MDExKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU2xvdEJhc2VWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC01MCw4ICs1MCw4IEBAIHByb3RlY3RlZDoKIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIFBy
b2NlZHVyZTsKIAotICAgIFNsb3RCYXNlVmFsdWUodW5zaWduZWQgaW5kZXgsIE9yaWdpbiBvcmln
aW4sIFN0YWNrU2xvdCogc2xvdCkKLSAgICAgICAgOiBWYWx1ZShpbmRleCwgQ2hlY2tlZE9wY29k
ZSwgU2xvdEJhc2UsIHBvaW50ZXJUeXBlKCksIG9yaWdpbikKKyAgICBTbG90QmFzZVZhbHVlKE9y
aWdpbiBvcmlnaW4sIFN0YWNrU2xvdCogc2xvdCkKKyAgICAgICAgOiBWYWx1ZShDaGVja2VkT3Bj
b2RlLCBTbG90QmFzZSwgcG9pbnRlclR5cGUoKSwgb3JpZ2luKQogICAgICAgICAsIG1fc2xvdChz
bG90KQogICAgIHsKICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTcGFy
c2VDb2xsZWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0Iz
U3BhcnNlQ29sbGVjdGlvbi5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2IzL0IzU3BhcnNlQ29sbGVjdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTQ2IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
QjNTcGFyc2VDb2xsZWN0aW9uX2gKKyNkZWZpbmUgQjNTcGFyc2VDb2xsZWN0aW9uX2gKKworI2lm
IEVOQUJMRShCM19KSVQpCisKKyNpbmNsdWRlIDx3dGYvU3RkTGliRXh0cmFzLmg+CisjaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsKKworLy8g
QjM6OlByb2NlZHVyZSBhbmQgQWlyOjpDb2RlIGhhdmUgYSBsb3Qgb2YgY29sbGVjdGlvbnMgb2Yg
aW5kZXhlZCB0aGluZ3MuIFRoaXMgaGFzIGFsbCBvZiB0aGUKKy8vIGxvZ2ljLgorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPgorY2xhc3MgU3BhcnNlQ29sbGVjdGlvbiB7CisgICAgdHlwZWRlZiBWZWN0
b3I8c3RkOjp1bmlxdWVfcHRyPFQ+PiBWZWN0b3JUeXBlOworICAgIAorcHVibGljOgorICAgIFNw
YXJzZUNvbGxlY3Rpb24oKQorICAgIHsKKyAgICB9CisKKyAgICBUKiBhZGQoc3RkOjp1bmlxdWVf
cHRyPFQ+IHZhbHVlKQorICAgIHsKKyAgICAgICAgVCogcmVzdWx0ID0gdmFsdWUuZ2V0KCk7Cisg
ICAgICAgIAorICAgICAgICBzaXplX3QgaW5kZXg7CisgICAgICAgIGlmIChtX2luZGV4RnJlZUxp
c3QuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBpbmRleCA9IG1fdmVjdG9yLnNpemUoKTsKKyAg
ICAgICAgICAgIG1fdmVjdG9yLmFwcGVuZChudWxscHRyKTsKKyAgICAgICAgfSBlbHNlCisgICAg
ICAgICAgICBpbmRleCA9IG1faW5kZXhGcmVlTGlzdC50YWtlTGFzdCgpOworCisgICAgICAgIHZh
bHVlLT5tX2luZGV4ID0gaW5kZXg7CisKKyAgICAgICAgbV92ZWN0b3JbaW5kZXhdID0gV1RGTW92
ZSh2YWx1ZSk7CisKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAgICB0ZW1wbGF0
ZTx0eXBlbmFtZS4uLiBBcmd1bWVudHM+CisgICAgVCogYWRkTmV3KEFyZ3VtZW50cyYmLi4uIGFy
Z3VtZW50cykKKyAgICB7CisgICAgICAgIHJldHVybiBhZGQoc3RkOjp1bmlxdWVfcHRyPFQ+KG5l
dyBUKHN0ZDo6Zm9yd2FyZDxBcmd1bWVudHM+KGFyZ3VtZW50cykuLi4pKSk7CisgICAgfQorCisg
ICAgdm9pZCByZW1vdmUoVCogdmFsdWUpCisgICAgeworICAgICAgICBSRUxFQVNFX0FTU0VSVCht
X3ZlY3Rvclt2YWx1ZS0+bV9pbmRleF0uZ2V0KCkgPT0gdmFsdWUpOworICAgICAgICBtX2luZGV4
RnJlZUxpc3QuYXBwZW5kKHZhbHVlLT5tX2luZGV4KTsKKyAgICAgICAgbV92ZWN0b3JbdmFsdWUt
Pm1faW5kZXhdID0gbnVsbHB0cjsKKyAgICB9CisKKyAgICB1bnNpZ25lZCBzaXplKCkgY29uc3Qg
eyByZXR1cm4gbV92ZWN0b3Iuc2l6ZSgpOyB9CisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QgeyBy
ZXR1cm4gbV92ZWN0b3IuaXNFbXB0eSgpOyB9CisgICAgCisgICAgVCogYXQodW5zaWduZWQgaW5k
ZXgpIGNvbnN0IHsgcmV0dXJuIG1fdmVjdG9yW2luZGV4XS5nZXQoKTsgfQorICAgIFQqIG9wZXJh
dG9yW10odW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGF0KGluZGV4KTsgfQorCisgICAg
Y2xhc3MgaXRlcmF0b3IgeworICAgIHB1YmxpYzoKKyAgICAgICAgaXRlcmF0b3IoKQorICAgICAg
ICAgICAgOiBtX2NvbGxlY3Rpb24obnVsbHB0cikKKyAgICAgICAgICAgICwgbV9pbmRleCgwKQor
ICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBpdGVyYXRvcihjb25zdCBTcGFyc2VDb2xs
ZWN0aW9uJiBjb2xsZWN0aW9uLCB1bnNpZ25lZCBpbmRleCkKKyAgICAgICAgICAgIDogbV9jb2xs
ZWN0aW9uKCZjb2xsZWN0aW9uKQorICAgICAgICAgICAgLCBtX2luZGV4KGZpbmROZXh0KGluZGV4
KSkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgVCogb3BlcmF0b3IqKCkKKyAgICAg
ICAgeworICAgICAgICAgICAgcmV0dXJuIG1fY29sbGVjdGlvbi0+YXQobV9pbmRleCk7CisgICAg
ICAgIH0KKworICAgICAgICBpdGVyYXRvciYgb3BlcmF0b3IrKygpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIG1faW5kZXggPSBmaW5kTmV4dChtX2luZGV4ICsgMSk7CisgICAgICAgICAgICByZXR1
cm4gKnRoaXM7CisgICAgICAgIH0KKworICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgaXRl
cmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQobV9jb2xs
ZWN0aW9uID09IG90aGVyLm1fY29sbGVjdGlvbik7CisgICAgICAgICAgICByZXR1cm4gbV9pbmRl
eCA9PSBvdGhlci5tX2luZGV4OworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBvcGVyYXRvciE9
KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuICEoKnRoaXMgPT0gb3RoZXIpOworICAgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAg
ICB1bnNpZ25lZCBmaW5kTmV4dCh1bnNpZ25lZCBpbmRleCkKKyAgICAgICAgeworICAgICAgICAg
ICAgd2hpbGUgKGluZGV4IDwgbV9jb2xsZWN0aW9uLT5zaXplKCkgJiYgIW1fY29sbGVjdGlvbi0+
YXQoaW5kZXgpKQorICAgICAgICAgICAgICAgIGluZGV4Kys7CisgICAgICAgICAgICByZXR1cm4g
aW5kZXg7CisgICAgICAgIH0KKworICAgICAgICBjb25zdCBTcGFyc2VDb2xsZWN0aW9uKiBtX2Nv
bGxlY3Rpb247CisgICAgICAgIHVuc2lnbmVkIG1faW5kZXg7CisgICAgfTsKKworICAgIGl0ZXJh
dG9yIGJlZ2luKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoKnRoaXMsIDApOyB9CisgICAgaXRl
cmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gaXRlcmF0b3IoKnRoaXMsIHNpemUoKSk7IH0KKwor
cHJpdmF0ZToKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPFQ+PiBtX3ZlY3RvcjsKKyAgICBW
ZWN0b3I8c2l6ZV90PiBtX2luZGV4RnJlZUxpc3Q7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM1NwYXJzZUNv
bGxlY3Rpb25faAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja1Nsb3Qu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrU2xvdC5j
cHAJKHJldmlzaW9uIDE5NjAxMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNr
U2xvdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxLDEzICs0MSwxMSBAQCB2b2lkIFN0YWNrU2xv
dDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjCiAKIHZvaWQgU3RhY2tTbG90OjpkZWVwRHVtcChQ
cmludFN0cmVhbSYgb3V0KSBjb25zdAogewotICAgIG91dC5wcmludCgiYnl0ZVNpemUgPSAiLCBt
X2J5dGVTaXplLCAiLCBvZmZzZXRGcm9tRlAgPSAiLCBtX29mZnNldEZyb21GUCwgIiwga2luZCA9
ICIsIG1fa2luZCk7CisgICAgb3V0LnByaW50KCJieXRlU2l6ZSA9ICIsIG1fYnl0ZVNpemUsICIs
IG9mZnNldEZyb21GUCA9ICIsIG1fb2Zmc2V0RnJvbUZQKTsKIH0KIAotU3RhY2tTbG90OjpTdGFj
a1Nsb3QodW5zaWduZWQgaW5kZXgsIHVuc2lnbmVkIGJ5dGVTaXplLCBTdGFja1Nsb3RLaW5kIGtp
bmQpCi0gICAgOiBtX2luZGV4KGluZGV4KQotICAgICwgbV9ieXRlU2l6ZShieXRlU2l6ZSkKLSAg
ICAsIG1fa2luZChraW5kKQorU3RhY2tTbG90OjpTdGFja1Nsb3QodW5zaWduZWQgYnl0ZVNpemUp
CisgICAgOiBtX2J5dGVTaXplKGJ5dGVTaXplKQogewogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYjMvQjNTdGFja1Nsb3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNTdGFja1Nsb3QuaAkocmV2aXNpb24gMTk2MDExKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL0IzU3RhY2tTbG90LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDcg
QEAKIAogI2lmIEVOQUJMRShCM19KSVQpCiAKLSNpbmNsdWRlICJCM1N0YWNrU2xvdEtpbmQuaCIK
KyNpbmNsdWRlICJCM1NwYXJzZUNvbGxlY3Rpb24uaCIKICNpbmNsdWRlIDx3dGYvRmFzdE1hbGxv
Yy5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9QcmludFN0
cmVhbS5oPgpAQCAtNDksOCArNDksNiBAQCBwdWJsaWM6CiAgICAgflN0YWNrU2xvdCgpOwogCiAg
ICAgdW5zaWduZWQgYnl0ZVNpemUoKSBjb25zdCB7IHJldHVybiBtX2J5dGVTaXplOyB9Ci0gICAg
U3RhY2tTbG90S2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4gbV9raW5kOyB9Ci0gICAgYm9vbCBp
c0xvY2tlZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZCA9PSBTdGFja1Nsb3RLaW5kOjpMb2NrZWQ7
IH0KICAgICB1bnNpZ25lZCBpbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1faW5kZXg7IH0KIAogICAg
IC8vIFRoaXMgZ2V0cyBhc3NpZ25lZCBhdCB0aGUgZW5kIG9mIGNvbXBpbGF0aW9uLiBCdXQsIHlv
dSBjYW4gdG90YWxseSBwaW4gc3RhY2sgc2xvdHMuIFVzZSB0aGUKQEAgLTYzLDE4ICs2MSwxOCBA
QCBwdWJsaWM6CiAgICAgICAgIG1fb2Zmc2V0RnJvbUZQID0gdmFsdWU7CiAgICAgfQogCi0gICAg
dm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0OworICAgIHZvaWQgZHVtcChQcmludFN0
cmVhbSYpIGNvbnN0OwogICAgIHZvaWQgZGVlcER1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKIAog
cHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgQWlyOjpTdGFja1Nsb3Q7CiAgICAgZnJpZW5kIGNs
YXNzIFByb2NlZHVyZTsKKyAgICBmcmllbmQgY2xhc3MgU3BhcnNlQ29sbGVjdGlvbjxTdGFja1Ns
b3Q+OwogCi0gICAgU3RhY2tTbG90KHVuc2lnbmVkIGluZGV4LCB1bnNpZ25lZCBieXRlU2l6ZSwg
U3RhY2tTbG90S2luZCk7CisgICAgU3RhY2tTbG90KHVuc2lnbmVkIGJ5dGVTaXplKTsKIAotICAg
IHVuc2lnbmVkIG1faW5kZXg7Ci0gICAgdW5zaWduZWQgbV9ieXRlU2l6ZTsKLSAgICBTdGFja1Ns
b3RLaW5kIG1fa2luZDsKKyAgICB1bnNpZ25lZCBtX2luZGV4IHsgVUlOVF9NQVggfTsKKyAgICB1
bnNpZ25lZCBtX2J5dGVTaXplIHsgMCB9OwogICAgIGludHB0cl90IG1fb2Zmc2V0RnJvbUZQIHsg
MCB9OwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tTbG90S2lu
ZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2tTbG90
S2luZC5jcHAJKHJldmlzaW9uIDE5NjAxMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9C
M1N0YWNrU2xvdEtpbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUyICswLDAgQEAKLS8qCi0g
KiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZp
Zy5oIgotI2luY2x1ZGUgIkIzU3RhY2tTbG90S2luZC5oIgotCi0jaWYgRU5BQkxFKEIzX0pJVCkK
LQotI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgotCi1uYW1lc3BhY2UgV1RGIHsKLQotdXNp
bmcgbmFtZXNwYWNlIEpTQzo6QjM7Ci0KLXZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYg
b3V0LCBTdGFja1Nsb3RLaW5kIGtpbmQpCi17Ci0gICAgc3dpdGNoIChraW5kKSB7Ci0gICAgY2Fz
ZSBTdGFja1Nsb3RLaW5kOjpMb2NrZWQ6Ci0gICAgICAgIG91dC5wcmludCgiTG9ja2VkIik7Ci0g
ICAgICAgIHJldHVybjsKLSAgICBjYXNlIFN0YWNrU2xvdEtpbmQ6OkFub255bW91czoKLSAgICAg
ICAgb3V0LnByaW50KCJBbm9ueW1vdXMiKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXVEYKLQot
I2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNTdGFja1Nsb3RLaW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L0IzU3RhY2tTbG90S2luZC5oCShyZXZpc2lvbiAxOTYwMTEpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNTdGFja1Nsb3RLaW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNjMgKzAsMCBA
QAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQot
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
Ci0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNp
Zm5kZWYgQjNTdGFja1Nsb3RLaW5kX2gKLSNkZWZpbmUgQjNTdGFja1Nsb3RLaW5kX2gKLQotI2lm
IEVOQUJMRShCM19KSVQpCi0KLW5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewotCi1lbnVt
IGNsYXNzIFN0YWNrU2xvdEtpbmQgOiB1aW50OF90IHsKLSAgICAvLyBBIGxvY2tlZCBzdGFjayBz
bG90IG5lZWRzIHRvIGJlIGtlcHQgZGlzam9pbnQgZnJvbSBhbGwgb3RoZXJzIGJlY2F1c2Ugd2Ug
aW50ZW5kIHRvIGVzY2FwZQotICAgIC8vIGl0IGV2ZW4gaWYgdGhhdCdzIG5vdCBvYnZpb3VzLiBU
aGlzIGhhcHBlbnMgd2hlbiB0aGUgcnVudGltZSB0YWtlcyB0aGUgYWRkcmVzcyBvZiBhIHN0YWNr
Ci0gICAgLy8gc2xvdC4KLSAgICBMb2NrZWQsCi0KLSAgICAvLyBUaGVzZSBzdGFjayBzbG90cyBi
ZWhhdmUgbGlrZSB2YXJpYWJsZXMuIFVuZGVmaW5lZCBiZWhhdmlvciBoYXBwZW5zIGlmIHlvdSBz
dG9yZSBsZXNzIHRoYW4KLSAgICAvLyB0aGUgd2lkdGggb2YgdGhlIHNsb3QuCi0gICAgQW5vbnlt
b3VzCi0KLSAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGFkZCBhIHRoaXJkIG1vZGUsIHdoaWNoIG1l
YW5zIHRoYXQgdGhlIHN0YWNrIHNsb3Qgd2lsbCBiZSByZWFkIGFzeW5jaHJvbm91c2x5Ci0gICAg
Ly8gYXMgd2l0aCBMb2NrZWQsIGJ1dCBuZXZlciB3cml0dGVuIHRvIGFzeW5jaHJvbm91c2x5LiBU
aGVuLCBBaXIgY291bGQgb3B0aW1pemUgc3BpbGxpbmcgYW5kCi0gICAgLy8gZmlsbGluZyBieSB0
cmFja2luZyB3aGV0aGVyIHRoZSB2YWx1ZSBoYWQgYmVlbiBzdG9yZWQgdG8gYSByZWFkLW9ubHkg
bG9ja2VkIHNsb3QuIElmIGl0IGhhZCwKLSAgICAvLyB0aGVuIHdlIGNhbiByZWZpbGwgZnJvbSB0
aGF0IHNsb3QuCi0gICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE1MDU4NwotfTsKLQotfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCi0KLW5hbWVzcGFjZSBXVEYg
ewotCi1jbGFzcyBQcmludFN0cmVhbTsKLQotdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFt
JiwgSlNDOjpCMzo6U3RhY2tTbG90S2luZCk7Ci0KLX0gLy8gbmFtZXNwYWNlIFdURgotCi0jZW5k
aWYgLy8gRU5BQkxFKEIzX0pJVCkKLQotI2VuZGlmIC8vIEIzU3RhY2tTbG90S2luZF9oCi0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwVmFsdWUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwVmFsdWUuY3BwCShyZXZp
c2lvbiAxOTYwMTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTdGFja21hcFZhbHVl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODMsOCArODMsOCBAQCB2b2lkIFN0YWNrbWFwVmFsdWU6
OmR1bXBNZXRhKENvbW1hUHJpbnRlCiAgICAgICAgICIsIGxhdGVDbG9iYmVyZWQgPSAiLCBtX2xh
dGVDbG9iYmVyZWQsICIsIHVzZWRSZWdpc3RlcnMgPSAiLCBtX3VzZWRSZWdpc3RlcnMpOwogfQog
Ci1TdGFja21hcFZhbHVlOjpTdGFja21hcFZhbHVlKHVuc2lnbmVkIGluZGV4LCBDaGVja2VkT3Bj
b2RlVGFnLCBPcGNvZGUgb3Bjb2RlLCBUeXBlIHR5cGUsIE9yaWdpbiBvcmlnaW4pCi0gICAgOiBW
YWx1ZShpbmRleCwgQ2hlY2tlZE9wY29kZSwgb3Bjb2RlLCB0eXBlLCBvcmlnaW4pCitTdGFja21h
cFZhbHVlOjpTdGFja21hcFZhbHVlKENoZWNrZWRPcGNvZGVUYWcsIE9wY29kZSBvcGNvZGUsIFR5
cGUgdHlwZSwgT3JpZ2luIG9yaWdpbikKKyAgICA6IFZhbHVlKENoZWNrZWRPcGNvZGUsIG9wY29k
ZSwgdHlwZSwgb3JpZ2luKQogewogICAgIEFTU0VSVChhY2NlcHRzKG9wY29kZSkpOwogfQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBWYWx1ZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1N0YWNrbWFwVmFsdWUuaAkocmV2aXNpb24g
MTk2MDExKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3RhY2ttYXBWYWx1ZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yODQsNyArMjg0LDcgQEAgcHJvdGVjdGVkOgogICAgIHZvaWQgZHVt
cENoaWxkcmVuKENvbW1hUHJpbnRlciYsIFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CiAg
ICAgdm9pZCBkdW1wTWV0YShDb21tYVByaW50ZXImLCBQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJy
aWRlOwogCi0gICAgU3RhY2ttYXBWYWx1ZSh1bnNpZ25lZCBpbmRleCwgQ2hlY2tlZE9wY29kZVRh
ZywgT3Bjb2RlLCBUeXBlLCBPcmlnaW4pOworICAgIFN0YWNrbWFwVmFsdWUoQ2hlY2tlZE9wY29k
ZVRhZywgT3Bjb2RlLCBUeXBlLCBPcmlnaW4pOwogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFz
cyBDaGVja1NwZWNpYWw7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNTd2l0Y2hW
YWx1ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzU3dpdGNo
VmFsdWUuY3BwCShyZXZpc2lvbiAxOTYwMTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNTd2l0Y2hWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY4LDkgKzY4LDggQEAgVmFsdWUq
IFN3aXRjaFZhbHVlOjpjbG9uZUltcGwoKSBjb25zdAogICAgIHJldHVybiBuZXcgU3dpdGNoVmFs
dWUoKnRoaXMpOwogfQogCi1Td2l0Y2hWYWx1ZTo6U3dpdGNoVmFsdWUoCi0gICAgdW5zaWduZWQg
aW5kZXgsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBjaGlsZCwgY29uc3QgRnJlcXVlbnRlZEJsb2Nr
JiBmYWxsVGhyb3VnaCkKLSAgICA6IENvbnRyb2xWYWx1ZShpbmRleCwgU3dpdGNoLCBWb2lkLCBv
cmlnaW4sIGNoaWxkKQorU3dpdGNoVmFsdWU6OlN3aXRjaFZhbHVlKE9yaWdpbiBvcmlnaW4sIFZh
bHVlKiBjaGlsZCwgY29uc3QgRnJlcXVlbnRlZEJsb2NrJiBmYWxsVGhyb3VnaCkKKyAgICA6IENv
bnRyb2xWYWx1ZShTd2l0Y2gsIFZvaWQsIG9yaWdpbiwgY2hpbGQpCiB7CiAgICAgbV9zdWNjZXNz
b3JzLmFwcGVuZChmYWxsVGhyb3VnaCk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNTd2l0Y2hWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1N3aXRjaFZhbHVlLmgJKHJldmlzaW9uIDE5NjAxMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1N3aXRjaFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyMSw4ICsxMjEsNyBA
QCBwcm90ZWN0ZWQ6CiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBQcm9jZWR1cmU7CiAKLSAg
ICBKU19FWFBPUlRfUFJJVkFURSBTd2l0Y2hWYWx1ZSgKLSAgICAgICAgdW5zaWduZWQgaW5kZXgs
IE9yaWdpbiwgVmFsdWUqIGNoaWxkLCBjb25zdCBGcmVxdWVudGVkQmxvY2smIGZhbGxUaHJvdWdo
KTsKKyAgICBKU19FWFBPUlRfUFJJVkFURSBTd2l0Y2hWYWx1ZShPcmlnaW4sIFZhbHVlKiBjaGls
ZCwgY29uc3QgRnJlcXVlbnRlZEJsb2NrJiBmYWxsVGhyb3VnaCk7CiAKICAgICBWZWN0b3I8aW50
NjRfdD4gbV92YWx1ZXM7CiB9OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVXBz
aWxvblZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVXBz
aWxvblZhbHVlLmgJKHJldmlzaW9uIDE5NjAxMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1Vwc2lsb25WYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01Nyw4ICs1Nyw4IEBAIHByaXZh
dGU6CiAgICAgLy8gTm90ZSB0aGF0IHBhc3NpbmcgdGhlIFBoaSBkdXJpbmcgY29uc3RydWN0aW9u
IGlzIG9wdGlvbmFsLiBBIHZhbGlkIHBhdHRlcm4gaXMgdG8gZmlyc3QgY3JlYXRlCiAgICAgLy8g
dGhlIFVwc2lsb25zIHdpdGhvdXQgdGhlIFBoaSwgdGhlbiBjcmVhdGUgdGhlIFBoaSwgdGhlbiBn
byBiYWNrIGFuZCB0ZWxsIHRoZSBVcHNpbG9ucyBhYm91dAogICAgIC8vIHRoZSBQaGkuIFRoaXMg
YWxsb3dzIHlvdSB0byBlbWl0IGNvZGUgaW4gaXRzIG5hdHVyYWwgb3JkZXIuCi0gICAgVXBzaWxv
blZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogdmFsdWUsIFZhbHVl
KiBwaGkgPSBudWxscHRyKQotICAgICAgICA6IFZhbHVlKGluZGV4LCBDaGVja2VkT3Bjb2RlLCBV
cHNpbG9uLCBWb2lkLCBvcmlnaW4sIHZhbHVlKQorICAgIFVwc2lsb25WYWx1ZShPcmlnaW4gb3Jp
Z2luLCBWYWx1ZSogdmFsdWUsIFZhbHVlKiBwaGkgPSBudWxscHRyKQorICAgICAgICA6IFZhbHVl
KENoZWNrZWRPcGNvZGUsIFVwc2lsb24sIFZvaWQsIG9yaWdpbiwgdmFsdWUpCiAgICAgICAgICwg
bV9waGkocGhpKQogICAgIHsKICAgICAgICAgaWYgKHBoaSkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9CM1ZhbGlkYXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNWYWxpZGF0ZS5jcHAJKHJldmlzaW9uIDE5NjAxMSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9iMy9CM1ZhbGlkYXRlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcs
OCBAQAogI2luY2x1ZGUgIkIzU3RhY2tTbG90LmgiCiAjaW5jbHVkZSAiQjNVcHNpbG9uVmFsdWUu
aCIKICNpbmNsdWRlICJCM1ZhbHVlSW5saW5lcy5oIgorI2luY2x1ZGUgIkIzVmFyaWFibGUuaCIK
KyNpbmNsdWRlICJCM1ZhcmlhYmxlVmFsdWUuaCIKICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgog
I2luY2x1ZGUgPHd0Zi9TdHJpbmdQcmludFN0cmVhbS5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L0NT
dHJpbmcuaD4KQEAgLTE1Myw2ICsxNTUsMTQgQEAgcHVibGljOgogICAgICAgICAgICAgICAgIFZB
TElEQVRFKCF2YWx1ZS0+bnVtQ2hpbGRyZW4oKSwgKCJBdCAiLCAqdmFsdWUpKTsKICAgICAgICAg
ICAgICAgICBWQUxJREFURSh2YWx1ZS0+dHlwZSgpID09IEZsb2F0LCAoIkF0ICIsICp2YWx1ZSkp
OwogICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBTZXQ6CisgICAgICAg
ICAgICAgICAgVkFMSURBVEUodmFsdWUtPm51bUNoaWxkcmVuKCkgPT0gMSwgKCJBdCAiLCAqdmFs
dWUpKTsKKyAgICAgICAgICAgICAgICBWQUxJREFURSh2YWx1ZS0+Y2hpbGQoMCktPnR5cGUoKSA9
PSB2YWx1ZS0+YXM8VmFyaWFibGVWYWx1ZT4oKS0+dmFyaWFibGUoKS0+dHlwZSgpLCAoIkF0ICIs
ICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgY2FzZSBHZXQ6
CisgICAgICAgICAgICAgICAgVkFMSURBVEUoIXZhbHVlLT5udW1DaGlsZHJlbigpLCAoIkF0ICIs
ICp2YWx1ZSkpOworICAgICAgICAgICAgICAgIFZBTElEQVRFKHZhbHVlLT50eXBlKCkgPT0gdmFs
dWUtPmFzPFZhcmlhYmxlVmFsdWU+KCktPnZhcmlhYmxlKCktPnR5cGUoKSwgKCJBdCAiLCAqdmFs
dWUpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2UgU2xvdEJhc2U6
CiAgICAgICAgICAgICBjYXNlIEZyYW1lUG9pbnRlcjoKICAgICAgICAgICAgICAgICBWQUxJREFU
RSghdmFsdWUtPm51bUNoaWxkcmVuKCksICgiQXQgIiwgKnZhbHVlKSk7CkBAIC0zNzUsNiArMzg1
LDkgQEAgcHVibGljOgogCiAgICAgICAgICAgICBWQUxJREFURSghKHZhbHVlLT5lZmZlY3RzKCku
d3JpdGVzICYmIHZhbHVlLT5rZXkoKSksICgiQXQgIiwgKnZhbHVlKSk7CiAgICAgICAgIH0KKwor
ICAgICAgICBmb3IgKFZhcmlhYmxlKiB2YXJpYWJsZSA6IG1fcHJvY2VkdXJlLnZhcmlhYmxlcygp
KQorICAgICAgICAgICAgVkFMSURBVEUodmFyaWFibGUtPnR5cGUoKSAhPSBWb2lkLCAoIkF0ICIs
ICp2YXJpYWJsZSkpOwogICAgIH0KIAogcHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9CM1ZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNWYWx1ZS5jcHAJKHJldmlzaW9uIDE5NjAxMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1ZhbHVlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksNyBAQAogI2luY2x1
ZGUgIkIzVXBzaWxvblZhbHVlLmgiCiAjaW5jbHVkZSAiQjNWYWx1ZUlubGluZXMuaCIKICNpbmNs
dWRlICJCM1ZhbHVlS2V5SW5saW5lcy5oIgorI2luY2x1ZGUgIkIzVmFyaWFibGVWYWx1ZS5oIgog
I2luY2x1ZGUgPHd0Zi9Db21tYVByaW50ZXIuaD4KICNpbmNsdWRlIDx3dGYvU3RyaW5nUHJpbnRT
dHJlYW0uaD4KIApAQCAtNzIsOSArNzMsMTAgQEAgdm9pZCBWYWx1ZTo6cmVwbGFjZVdpdGhJZGVu
dGl0eShWYWx1ZSogdgogCiAgICAgdGhpcy0+VmFsdWU6On5WYWx1ZSgpOwogCi0gICAgbmV3ICh0
aGlzKSBWYWx1ZShpbmRleCwgSWRlbnRpdHksIHR5cGUsIG9yaWdpbiwgdmFsdWUpOworICAgIG5l
dyAodGhpcykgVmFsdWUoSWRlbnRpdHksIHR5cGUsIG9yaWdpbiwgdmFsdWUpOwogCiAgICAgdGhp
cy0+b3duZXIgPSBvd25lcjsKKyAgICB0aGlzLT5tX2luZGV4ID0gaW5kZXg7CiB9CiAKIHZvaWQg
VmFsdWU6OnJlcGxhY2VXaXRoTm9wKCkKQEAgLTg1LDkgKzg3LDEwIEBAIHZvaWQgVmFsdWU6OnJl
cGxhY2VXaXRoTm9wKCkKIAogICAgIHRoaXMtPlZhbHVlOjp+VmFsdWUoKTsKIAotICAgIG5ldyAo
dGhpcykgVmFsdWUoaW5kZXgsIE5vcCwgVm9pZCwgb3JpZ2luKTsKKyAgICBuZXcgKHRoaXMpIFZh
bHVlKE5vcCwgVm9pZCwgb3JpZ2luKTsKIAogICAgIHRoaXMtPm93bmVyID0gb3duZXI7CisgICAg
dGhpcy0+bV9pbmRleCA9IGluZGV4OwogfQogCiB2b2lkIFZhbHVlOjpyZXBsYWNlV2l0aFBoaSgp
CkBAIC0xMDQsOSArMTA3LDEwIEBAIHZvaWQgVmFsdWU6OnJlcGxhY2VXaXRoUGhpKCkKIAogICAg
IHRoaXMtPlZhbHVlOjp+VmFsdWUoKTsKIAotICAgIG5ldyAodGhpcykgVmFsdWUoaW5kZXgsIFBo
aSwgdHlwZSwgb3JpZ2luKTsKKyAgICBuZXcgKHRoaXMpIFZhbHVlKFBoaSwgdHlwZSwgb3JpZ2lu
KTsKIAogICAgIHRoaXMtPm93bmVyID0gb3duZXI7CisgICAgdGhpcy0+bV9pbmRleCA9IGluZGV4
OwogfQogCiB2b2lkIFZhbHVlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CkBAIC00ODQs
MTAgKzQ4OCwxMiBAQCBFZmZlY3RzIFZhbHVlOjplZmZlY3RzKCkgY29uc3QKICAgICAgICAgcmVz
dWx0LnJlYWRzID0gSGVhcFJhbmdlOjp0b3AoKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBV
cHNpbG9uOgotICAgICAgICByZXN1bHQud3JpdGVzU1NBU3RhdGUgPSB0cnVlOworICAgIGNhc2Ug
U2V0OgorICAgICAgICByZXN1bHQud3JpdGVzTG9jYWxTdGF0ZSA9IHRydWU7CiAgICAgICAgIGJy
ZWFrOwogICAgIGNhc2UgUGhpOgotICAgICAgICByZXN1bHQucmVhZHNTU0FTdGF0ZSA9IHRydWU7
CisgICAgY2FzZSBHZXQ6CisgICAgICAgIHJlc3VsdC5yZWFkc0xvY2FsU3RhdGUgPSB0cnVlOwog
ICAgICAgICBicmVhazsKICAgICBjYXNlIEp1bXA6CiAgICAgY2FzZSBCcmFuY2g6CkBAIC01OTgs
NiArNjA0LDcgQEAgdm9pZCBWYWx1ZTo6Y2hlY2tPcGNvZGUoT3Bjb2RlIG9wY29kZSkKICAgICBB
U1NFUlQoIVBhdGNocG9pbnRWYWx1ZTo6YWNjZXB0cyhvcGNvZGUpKTsKICAgICBBU1NFUlQoIVNs
b3RCYXNlVmFsdWU6OmFjY2VwdHMob3Bjb2RlKSk7CiAgICAgQVNTRVJUKCFVcHNpbG9uVmFsdWU6
OmFjY2VwdHMob3Bjb2RlKSk7CisgICAgQVNTRVJUKCFWYXJpYWJsZVZhbHVlOjphY2NlcHRzKG9w
Y29kZSkpOwogfQogI2VuZGlmIC8vICFBU1NFUlRfRElTQUJMRUQKIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2IzL0IzVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNWYWx1ZS5oCShyZXZpc2lvbiAxOTYwMTEpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYjMvQjNWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW5j
bHVkZSAiQjNFZmZlY3RzLmgiCiAjaW5jbHVkZSAiQjNPcGNvZGUuaCIKICNpbmNsdWRlICJCM09y
aWdpbi5oIgorI2luY2x1ZGUgIkIzU3BhcnNlQ29sbGVjdGlvbi5oIgogI2luY2x1ZGUgIkIzVHlw
ZS5oIgogI2luY2x1ZGUgIkIzVmFsdWVLZXkuaCIKICNpbmNsdWRlIDx3dGYvQ29tbWFQcmludGVy
Lmg+CkBAIC0yMjYsNiArMjI3LDcgQEAgcHJvdGVjdGVkOgogCiBwcml2YXRlOgogICAgIGZyaWVu
ZCBjbGFzcyBQcm9jZWR1cmU7CisgICAgZnJpZW5kIGNsYXNzIFNwYXJzZUNvbGxlY3Rpb248VmFs
dWU+OwogCiAgICAgLy8gQ2hlY2tzIHRoYXQgdGhpcyBvcGNvZGUgaXMgdmFsaWQgZm9yIHVzZSB3
aXRoIEIzOjpWYWx1ZS4KICNpZiBBU1NFUlRfRElTQUJMRUQKQEAgLTI0MywyNyArMjQ1LDI0IEBA
IHByb3RlY3RlZDoKICAgICAvLyBJbnN0YW50aWF0ZSB2YWx1ZXMgdmlhIFByb2NlZHVyZS4KICAg
ICAvLyBUaGlzIGZvcm0gcmVxdWlyZXMgc3BlY2lmeWluZyB0aGUgdHlwZSBleHBsaWNpdGx5Ogog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50cz4KLSAgICBleHBsaWNpdCBWYWx1ZSh1
bnNpZ25lZCBpbmRleCwgQ2hlY2tlZE9wY29kZVRhZywgT3Bjb2RlIG9wY29kZSwgVHlwZSB0eXBl
LCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogZmlyc3RDaGlsZCwgQXJndW1lbnRzLi4uIGFyZ3VtZW50
cykKLSAgICAgICAgOiBtX2luZGV4KGluZGV4KQotICAgICAgICAsIG1fb3Bjb2RlKG9wY29kZSkK
KyAgICBleHBsaWNpdCBWYWx1ZShDaGVja2VkT3Bjb2RlVGFnLCBPcGNvZGUgb3Bjb2RlLCBUeXBl
IHR5cGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVlKiBmaXJzdENoaWxkLCBBcmd1bWVudHMuLi4gYXJn
dW1lbnRzKQorICAgICAgICA6IG1fb3Bjb2RlKG9wY29kZSkKICAgICAgICAgLCBtX3R5cGUodHlw
ZSkKICAgICAgICAgLCBtX29yaWdpbihvcmlnaW4pCiAgICAgICAgICwgbV9jaGlsZHJlbnsgZmly
c3RDaGlsZCwgYXJndW1lbnRzLi4uIH0KICAgICB7CiAgICAgfQogICAgIC8vIFRoaXMgZm9ybSBp
cyBmb3Igc3BlY2lmeWluZyB0aGUgdHlwZSBleHBsaWNpdGx5IHdoZW4gdGhlIG9wY29kZSBoYXMg
bm8gY2hpbGRyZW46Ci0gICAgZXhwbGljaXQgVmFsdWUodW5zaWduZWQgaW5kZXgsIENoZWNrZWRP
cGNvZGVUYWcsIE9wY29kZSBvcGNvZGUsIFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdpbikKLSAgICAg
ICAgOiBtX2luZGV4KGluZGV4KQotICAgICAgICAsIG1fb3Bjb2RlKG9wY29kZSkKKyAgICBleHBs
aWNpdCBWYWx1ZShDaGVja2VkT3Bjb2RlVGFnLCBPcGNvZGUgb3Bjb2RlLCBUeXBlIHR5cGUsIE9y
aWdpbiBvcmlnaW4pCisgICAgICAgIDogbV9vcGNvZGUob3Bjb2RlKQogICAgICAgICAsIG1fdHlw
ZSh0eXBlKQogICAgICAgICAsIG1fb3JpZ2luKG9yaWdpbikKICAgICB7CiAgICAgfQogICAgIC8v
IFRoaXMgZm9ybSBpcyBmb3IgdGhvc2Ugb3Bjb2RlcyB0aGF0IGNhbiBpbmZlciB0aGVpciB0eXBl
IGZyb20gdGhlIG9wY29kZSBhbmQgZmlyc3QgY2hpbGQ6CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUu
Li4gQXJndW1lbnRzPgotICAgIGV4cGxpY2l0IFZhbHVlKHVuc2lnbmVkIGluZGV4LCBDaGVja2Vk
T3Bjb2RlVGFnLCBPcGNvZGUgb3Bjb2RlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogZmlyc3RDaGls
ZCkKLSAgICAgICAgOiBtX2luZGV4KGluZGV4KQotICAgICAgICAsIG1fb3Bjb2RlKG9wY29kZSkK
KyAgICBleHBsaWNpdCBWYWx1ZShDaGVja2VkT3Bjb2RlVGFnLCBPcGNvZGUgb3Bjb2RlLCBPcmln
aW4gb3JpZ2luLCBWYWx1ZSogZmlyc3RDaGlsZCkKKyAgICAgICAgOiBtX29wY29kZShvcGNvZGUp
CiAgICAgICAgICwgbV90eXBlKHR5cGVGb3Iob3Bjb2RlLCBmaXJzdENoaWxkKSkKICAgICAgICAg
LCBtX29yaWdpbihvcmlnaW4pCiAgICAgICAgICwgbV9jaGlsZHJlbnsgZmlyc3RDaGlsZCB9CkBA
IC0yNzEsOSArMjcwLDggQEAgcHJvdGVjdGVkOgogICAgIH0KICAgICAvLyBUaGlzIGZvcm0gaXMg
Zm9yIHRob3NlIG9wY29kZXMgdGhhdCBjYW4gaW5mZXIgdGhlaXIgdHlwZSBmcm9tIHRoZSBvcGNv
ZGUgYW5kIGZpcnN0IGFuZCBzZWNvbmQgY2hpbGQ6CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4g
QXJndW1lbnRzPgotICAgIGV4cGxpY2l0IFZhbHVlKHVuc2lnbmVkIGluZGV4LCBDaGVja2VkT3Bj
b2RlVGFnLCBPcGNvZGUgb3Bjb2RlLCBPcmlnaW4gb3JpZ2luLCBWYWx1ZSogZmlyc3RDaGlsZCwg
VmFsdWUqIHNlY29uZENoaWxkLCBBcmd1bWVudHMuLi4gYXJndW1lbnRzKQotICAgICAgICA6IG1f
aW5kZXgoaW5kZXgpCi0gICAgICAgICwgbV9vcGNvZGUob3Bjb2RlKQorICAgIGV4cGxpY2l0IFZh
bHVlKENoZWNrZWRPcGNvZGVUYWcsIE9wY29kZSBvcGNvZGUsIE9yaWdpbiBvcmlnaW4sIFZhbHVl
KiBmaXJzdENoaWxkLCBWYWx1ZSogc2Vjb25kQ2hpbGQsIEFyZ3VtZW50cy4uLiBhcmd1bWVudHMp
CisgICAgICAgIDogbV9vcGNvZGUob3Bjb2RlKQogICAgICAgICAsIG1fdHlwZSh0eXBlRm9yKG9w
Y29kZSwgZmlyc3RDaGlsZCwgc2Vjb25kQ2hpbGQpKQogICAgICAgICAsIG1fb3JpZ2luKG9yaWdp
bikKICAgICAgICAgLCBtX2NoaWxkcmVueyBmaXJzdENoaWxkLCBzZWNvbmRDaGlsZCwgYXJndW1l
bnRzLi4uIH0KQEAgLTI4MSwyNSArMjc5LDIyIEBAIHByb3RlY3RlZDoKICAgICB9CiAgICAgLy8g
VGhpcyBmb3JtIGlzIGZvciB0aG9zZSBvcGNvZGVzIHRoYXQgY2FuIGluZmVyIHRoZWlyIHR5cGUg
ZnJvbSB0aGUgb3Bjb2RlIGFsb25lLCBhbmQgdGhhdCBkb24ndAogICAgIC8vIHRha2UgYW55IGFy
Z3VtZW50czoKLSAgICBleHBsaWNpdCBWYWx1ZSh1bnNpZ25lZCBpbmRleCwgQ2hlY2tlZE9wY29k
ZVRhZywgT3Bjb2RlIG9wY29kZSwgT3JpZ2luIG9yaWdpbikKLSAgICAgICAgOiBtX2luZGV4KGlu
ZGV4KQotICAgICAgICAsIG1fb3Bjb2RlKG9wY29kZSkKKyAgICBleHBsaWNpdCBWYWx1ZShDaGVj
a2VkT3Bjb2RlVGFnLCBPcGNvZGUgb3Bjb2RlLCBPcmlnaW4gb3JpZ2luKQorICAgICAgICA6IG1f
b3Bjb2RlKG9wY29kZSkKICAgICAgICAgLCBtX3R5cGUodHlwZUZvcihvcGNvZGUsIG51bGxwdHIp
KQogICAgICAgICAsIG1fb3JpZ2luKG9yaWdpbikKICAgICB7CiAgICAgfQogICAgIC8vIFVzZSB0
aGlzIGZvcm0gZm9yIHZhcmFyZ3MuCi0gICAgZXhwbGljaXQgVmFsdWUodW5zaWduZWQgaW5kZXgs
IENoZWNrZWRPcGNvZGVUYWcsIE9wY29kZSBvcGNvZGUsIFR5cGUgdHlwZSwgT3JpZ2luIG9yaWdp
biwgY29uc3QgQWRqYWNlbmN5TGlzdCYgY2hpbGRyZW4pCi0gICAgICAgIDogbV9pbmRleChpbmRl
eCkKLSAgICAgICAgLCBtX29wY29kZShvcGNvZGUpCisgICAgZXhwbGljaXQgVmFsdWUoQ2hlY2tl
ZE9wY29kZVRhZywgT3Bjb2RlIG9wY29kZSwgVHlwZSB0eXBlLCBPcmlnaW4gb3JpZ2luLCBjb25z
dCBBZGphY2VuY3lMaXN0JiBjaGlsZHJlbikKKyAgICAgICAgOiBtX29wY29kZShvcGNvZGUpCiAg
ICAgICAgICwgbV90eXBlKHR5cGUpCiAgICAgICAgICwgbV9vcmlnaW4ob3JpZ2luKQogICAgICAg
ICAsIG1fY2hpbGRyZW4oY2hpbGRyZW4pCiAgICAgewogICAgIH0KLSAgICBleHBsaWNpdCBWYWx1
ZSh1bnNpZ25lZCBpbmRleCwgQ2hlY2tlZE9wY29kZVRhZywgT3Bjb2RlIG9wY29kZSwgVHlwZSB0
eXBlLCBPcmlnaW4gb3JpZ2luLCBBZGphY2VuY3lMaXN0JiYgY2hpbGRyZW4pCi0gICAgICAgIDog
bV9pbmRleChpbmRleCkKLSAgICAgICAgLCBtX29wY29kZShvcGNvZGUpCisgICAgZXhwbGljaXQg
VmFsdWUoQ2hlY2tlZE9wY29kZVRhZywgT3Bjb2RlIG9wY29kZSwgVHlwZSB0eXBlLCBPcmlnaW4g
b3JpZ2luLCBBZGphY2VuY3lMaXN0JiYgY2hpbGRyZW4pCisgICAgICAgIDogbV9vcGNvZGUob3Bj
b2RlKQogICAgICAgICAsIG1fdHlwZSh0eXBlKQogICAgICAgICAsIG1fb3JpZ2luKG9yaWdpbikK
ICAgICAgICAgLCBtX2NoaWxkcmVuKFdURk1vdmUoY2hpbGRyZW4pKQpAQCAtMzA5LDggKzMwNCw4
IEBAIHByb3RlY3RlZDoKICAgICAvLyBUaGlzIGlzIHRoZSBjb25zdHJ1Y3RvciB5b3UgZW5kIHVw
IGFjdHVhbGx5IGNhbGxpbmcsIGlmIHlvdSdyZSBpbnN0YW50aWF0aW5nIFZhbHVlCiAgICAgLy8g
ZGlyZWN0bHkuCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRzPgotICAgIGV4cGxp
Y2l0IFZhbHVlKHVuc2lnbmVkIGluZGV4LCBPcGNvZGUgb3Bjb2RlLCBBcmd1bWVudHMmJi4uLiBh
cmd1bWVudHMpCi0gICAgICAgIDogVmFsdWUoaW5kZXgsIENoZWNrZWRPcGNvZGUsIG9wY29kZSwg
c3RkOjpmb3J3YXJkPEFyZ3VtZW50cz4oYXJndW1lbnRzKS4uLikKKyAgICBleHBsaWNpdCBWYWx1
ZShPcGNvZGUgb3Bjb2RlLCBBcmd1bWVudHMmJi4uLiBhcmd1bWVudHMpCisgICAgICAgIDogVmFs
dWUoQ2hlY2tlZE9wY29kZSwgb3Bjb2RlLCBzdGQ6OmZvcndhcmQ8QXJndW1lbnRzPihhcmd1bWVu
dHMpLi4uKQogICAgIHsKICAgICAgICAgY2hlY2tPcGNvZGUob3Bjb2RlKTsKICAgICB9CkBAIC0z
MjEsNyArMzE2LDkgQEAgcHJpdmF0ZToKICAgICBzdGF0aWMgVHlwZSB0eXBlRm9yKE9wY29kZSwg
VmFsdWUqIGZpcnN0Q2hpbGQsIFZhbHVlKiBzZWNvbmRDaGlsZCA9IG51bGxwdHIpOwogCiAgICAg
Ly8gVGhpcyBncm91cCBvZiBmaWVsZHMgaXMgYXJyYW5nZWQgdG8gZml0IGluIDY0IGJpdHMuCi0g
ICAgdW5zaWduZWQgbV9pbmRleDsKK3Byb3RlY3RlZDoKKyAgICB1bnNpZ25lZCBtX2luZGV4IHsg
VUlOVF9NQVggfTsKK3ByaXZhdGU6CiAgICAgT3Bjb2RlIG1fb3Bjb2RlOwogICAgIFR5cGUgbV90
eXBlOwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL0IzVmFyaWFibGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhcmlhYmxlLmNwcAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhcmlhYmxlLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM1Zh
cmlhYmxlLmgiCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIEIzIHsKKworVmFyaWFibGU6On5WYXJpYWJsZSgpCit7Cit9CisKK3ZvaWQgVmFyaWFibGU6
OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoInZhciIsIG1f
aW5kZXgpOworfQorCit2b2lkIFZhcmlhYmxlOjpkZWVwRHVtcChQcmludFN0cmVhbSYgb3V0KSBj
b25zdAoreworICAgIG91dC5wcmludChtX3R5cGUsICIgdmFyIiwgbV9pbmRleCk7Cit9CisKK1Zh
cmlhYmxlOjpWYXJpYWJsZShUeXBlIHR5cGUpCisgICAgOiBtX3R5cGUodHlwZSkKK3sKKyAgICBB
U1NFUlQodHlwZSAhPSBWb2lkKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNl
bmRpZiAvLyBFTkFCTEUoQjNfSklUKQorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
QjNWYXJpYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1Zh
cmlhYmxlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYXJp
YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsOTMgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJp
YnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91
dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxv
d2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNv
dXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAq
IDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAq
IFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFO
WQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkg
QU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4g
IElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBCM1ZhcmlhYmxlX2gKKyNkZWZp
bmUgQjNWYXJpYWJsZV9oCisKKyNpZiBFTkFCTEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNTcGFy
c2VDb2xsZWN0aW9uLmgiCisjaW5jbHVkZSAiQjNUeXBlLmgiCisjaW5jbHVkZSA8d3RmL0Zhc3RN
YWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KKyNpbmNsdWRlIDx3dGYvUHJp
bnRTdHJlYW0uaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7CisKK2NsYXNzIFBy
b2NlZHVyZTsKKworY2xhc3MgVmFyaWFibGUgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFZh
cmlhYmxlKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKworcHVibGljOgorICAgIH5W
YXJpYWJsZSgpOworCisgICAgVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlOyB9Cisg
ICAgdW5zaWduZWQgaW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2luZGV4OyB9CisKKyAgICB2b2lk
IGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICB2b2lkIGRlZXBEdW1wKFByaW50U3RyZWFt
JikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFByb2NlZHVyZTsKKyAgICBm
cmllbmQgY2xhc3MgU3BhcnNlQ29sbGVjdGlvbjxWYXJpYWJsZT47CisKKyAgICBWYXJpYWJsZShU
eXBlKTsKKyAgICAKKyAgICB1bnNpZ25lZCBtX2luZGV4OworICAgIFR5cGUgbV90eXBlOworfTsK
KworY2xhc3MgRGVlcFZhcmlhYmxlRHVtcCB7CitwdWJsaWM6CisgICAgRGVlcFZhcmlhYmxlRHVt
cChjb25zdCBWYXJpYWJsZSogdmFyaWFibGUpCisgICAgICAgIDogbV92YXJpYWJsZSh2YXJpYWJs
ZSkKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0
CisgICAgeworICAgICAgICBpZiAobV92YXJpYWJsZSkKKyAgICAgICAgICAgIG1fdmFyaWFibGUt
PmRlZXBEdW1wKG91dCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG91dC5wcmludCgiPG51
bGw+Iik7CisgICAgfQorCitwcml2YXRlOgorICAgIGNvbnN0IFZhcmlhYmxlKiBtX3ZhcmlhYmxl
OworfTsKKworaW5saW5lIERlZXBWYXJpYWJsZUR1bXAgZGVlcER1bXAoY29uc3QgVmFyaWFibGUq
IHZhcmlhYmxlKQoreworICAgIHJldHVybiBEZWVwVmFyaWFibGVEdW1wKHZhcmlhYmxlKTsKK30K
KworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQor
CisjZW5kaWYgLy8gQjNWYXJpYWJsZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9CM1ZhcmlhYmxlVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9CM1ZhcmlhYmxlVmFsdWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL0IzVmFyaWFibGVWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2
NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiQjNWYXJpYWJsZVZhbHVlLmgiCisKKyNpZiBFTkFC
TEUoQjNfSklUKQorCisjaW5jbHVkZSAiQjNWYXJpYWJsZS5oIgorCituYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEIzIHsKKworVmFyaWFibGVWYWx1ZTo6flZhcmlhYmxlVmFsdWUoKQoreworfQor
Cit2b2lkIFZhcmlhYmxlVmFsdWU6OmR1bXBNZXRhKENvbW1hUHJpbnRlciYgY29tbWEsIFByaW50
U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KGNvbW1hLCBwb2ludGVyRHVtcCht
X3ZhcmlhYmxlKSk7Cit9CisKK1ZhbHVlKiBWYXJpYWJsZVZhbHVlOjpjbG9uZUltcGwoKSBjb25z
dAoreworICAgIHJldHVybiBuZXcgVmFyaWFibGVWYWx1ZSgqdGhpcyk7Cit9CisKK1ZhcmlhYmxl
VmFsdWU6OlZhcmlhYmxlVmFsdWUoT3Bjb2RlIG9wY29kZSwgT3JpZ2luIG9yaWdpbiwgVmFyaWFi
bGUqIHZhcmlhYmxlLCBWYWx1ZSogdmFsdWUpCisgICAgOiBWYWx1ZShDaGVja2VkT3Bjb2RlLCBv
cGNvZGUsIFZvaWQsIG9yaWdpbiwgdmFsdWUpCisgICAgLCBtX3ZhcmlhYmxlKHZhcmlhYmxlKQor
eworICAgIEFTU0VSVChvcGNvZGUgPT0gU2V0KTsKK30KKworVmFyaWFibGVWYWx1ZTo6VmFyaWFi
bGVWYWx1ZShPcGNvZGUgb3Bjb2RlLCBPcmlnaW4gb3JpZ2luLCBWYXJpYWJsZSogdmFyaWFibGUp
CisgICAgOiBWYWx1ZShDaGVja2VkT3Bjb2RlLCBvcGNvZGUsIHZhcmlhYmxlLT50eXBlKCksIG9y
aWdpbikKKyAgICAsIG1fdmFyaWFibGUodmFyaWFibGUpCit7CisgICAgQVNTRVJUKG9wY29kZSA9
PSBHZXQpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJM
RShCM19KSVQpCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9CM1ZhcmlhYmxlVmFs
dWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYXJpYWJsZVZh
bHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvQjNWYXJpYWJs
ZVZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NyBAQAorLyoKKyAqIENvcHlyaWdo
dCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgQjNWYXJpYWJsZVZh
bHVlX2gKKyNkZWZpbmUgQjNWYXJpYWJsZVZhbHVlX2gKKworI2lmIEVOQUJMRShCM19KSVQpCisK
KyNpbmNsdWRlICJCM1ZhbHVlLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgewor
CitjbGFzcyBWYXJpYWJsZTsKKworY2xhc3MgSlNfRVhQT1JUX1BSSVZBVEUgVmFyaWFibGVWYWx1
ZSA6IHB1YmxpYyBWYWx1ZSB7CitwdWJsaWM6CisgICAgc3RhdGljIGJvb2wgYWNjZXB0cyhPcGNv
ZGUgb3Bjb2RlKSB7IHJldHVybiBvcGNvZGUgPT0gR2V0IHx8IG9wY29kZSA9PSBTZXQ7IH0KKwor
ICAgIH5WYXJpYWJsZVZhbHVlKCk7CisKKyAgICBWYXJpYWJsZSogdmFyaWFibGUoKSBjb25zdCB7
IHJldHVybiBtX3ZhcmlhYmxlOyB9CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIGR1bXBNZXRhKENv
bW1hUHJpbnRlciYsIFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICBWYWx1ZSog
Y2xvbmVJbXBsKCkgY29uc3Qgb3ZlcnJpZGU7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNz
IFByb2NlZHVyZTsKKworICAgIC8vIFVzZSB0aGlzIGZvciBTZXQuCisgICAgVmFyaWFibGVWYWx1
ZShPcGNvZGUsIE9yaWdpbiwgVmFyaWFibGUqLCBWYWx1ZSopOworCisgICAgLy8gVXNlIHRoaXMg
Zm9yIEdldC4KKyAgICBWYXJpYWJsZVZhbHVlKE9wY29kZSwgT3JpZ2luLCBWYXJpYWJsZSogdmFy
aWFibGUpOworCisgICAgVmFyaWFibGUqIG1fdmFyaWFibGU7Cit9OworCit9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6QjMKKworI2VuZGlmIC8vIEVOQUJMRShCM19KSVQpCisKKyNlbmRpZiAvLyBCM1Zh
cmlhYmxlVmFsdWVfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvdGVzdGIzLmNwcAkocmV2
aXNpb24gMTk2MDExKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL3Rlc3RiMy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQ5OTAsNyArNDk5MCw3IEBAIHZvaWQgdGVzdE92ZXJyaWRlRnJhbWVQ
b2ludGVyKCkKICAgICAgICAgQmFzaWNCbG9jayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKIAog
ICAgICAgICAvLyBBZGQgYSBzdGFjayBzbG90IHRvIG1ha2UgdGhlIGZyYW1lIG5vbiB0cml2aWFs
LgotICAgICAgICByb290LT5hcHBlbmROZXc8U2xvdEJhc2VWYWx1ZT4ocHJvYywgT3JpZ2luKCks
IHByb2MuYWRkU3RhY2tTbG90KDgsIFN0YWNrU2xvdEtpbmQ6OkxvY2tlZCkpOworICAgICAgICBy
b290LT5hcHBlbmROZXc8U2xvdEJhc2VWYWx1ZT4ocHJvYywgT3JpZ2luKCksIHByb2MuYWRkU3Rh
Y2tTbG90KDgpKTsKIAogICAgICAgICAvLyBTdWIgb24geDg2IFVzZURlZiB0aGUgc291cmNlLiBJ
ZiBGUCBpcyBub3QgcHJvdGVjdGVkIGNvcnJlY3RseSwgaXQgd2lsbCBiZSBvdmVycmlkZGVuIHNp
bmNlIGl0IGlzIHRoZSBsYXN0IHZpc2libGUgdXNlLgogICAgICAgICBWYWx1ZSogb2Zmc2V0ID0g
cm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigpLCBHUFJJbmZv
Ojphcmd1bWVudEdQUjApOwpAQCAtNTAwNCw3ICs1MDA0LDcgQEAgdm9pZCB0ZXN0T3ZlcnJpZGVG
cmFtZVBvaW50ZXIoKQogICAgICAgICBQcm9jZWR1cmUgcHJvYzsKICAgICAgICAgQmFzaWNCbG9j
ayogcm9vdCA9IHByb2MuYWRkQmxvY2soKTsKIAotICAgICAgICByb290LT5hcHBlbmROZXc8U2xv
dEJhc2VWYWx1ZT4ocHJvYywgT3JpZ2luKCksIHByb2MuYWRkU3RhY2tTbG90KDgsIFN0YWNrU2xv
dEtpbmQ6OkxvY2tlZCkpOworICAgICAgICByb290LT5hcHBlbmROZXc8U2xvdEJhc2VWYWx1ZT4o
cHJvYywgT3JpZ2luKCksIHByb2MuYWRkU3RhY2tTbG90KDgpKTsKIAogICAgICAgICBWYWx1ZSog
b2Zmc2V0ID0gcm9vdC0+YXBwZW5kTmV3PEFyZ3VtZW50UmVnVmFsdWU+KHByb2MsIE9yaWdpbigp
LCBHUFJJbmZvOjphcmd1bWVudEdQUjApOwogICAgICAgICBWYWx1ZSogZnAgPSByb290LT5hcHBl
bmROZXc8VmFsdWU+KHByb2MsIEZyYW1lUG9pbnRlciwgT3JpZ2luKCkpOwpAQCAtNTAyNCw4ICs1
MDI0LDcgQEAgdm9pZCB0ZXN0U3RhY2tTbG90KCkKICAgICBCYXNpY0Jsb2NrKiByb290ID0gcHJv
Yy5hZGRCbG9jaygpOwogICAgIHJvb3QtPmFwcGVuZE5ldzxDb250cm9sVmFsdWU+KAogICAgICAg
ICBwcm9jLCBSZXR1cm4sIE9yaWdpbigpLAotICAgICAgICByb290LT5hcHBlbmROZXc8U2xvdEJh
c2VWYWx1ZT4oCi0gICAgICAgICAgICBwcm9jLCBPcmlnaW4oKSwgcHJvYy5hZGRTdGFja1Nsb3Qo
MSwgU3RhY2tTbG90S2luZDo6QW5vbnltb3VzKSkpOworICAgICAgICByb290LT5hcHBlbmROZXc8
U2xvdEJhc2VWYWx1ZT4ocHJvYywgT3JpZ2luKCksIHByb2MuYWRkU3RhY2tTbG90KDEpKSk7CiAK
ICAgICB2b2lkKiBzdGFja1Nsb3QgPSBjb21waWxlQW5kUnVuPHZvaWQqPihwcm9jKTsKICAgICBD
SEVDSyhzdGFja1Nsb3QgPCAmcHJvYyk7CkBAIC01MDUzLDggKzUwNTIsOCBAQCB2b2lkIHRlc3RT
dG9yZUxvYWRTdGFja1Nsb3QoaW50IHZhbHVlKQogICAgIFByb2NlZHVyZSBwcm9jOwogICAgIEJh
c2ljQmxvY2sqIHJvb3QgPSBwcm9jLmFkZEJsb2NrKCk7CiAKLSAgICBTbG90QmFzZVZhbHVlKiBz
dGFjayA9IHJvb3QtPmFwcGVuZE5ldzxTbG90QmFzZVZhbHVlPigKLSAgICAgICAgcHJvYywgT3Jp
Z2luKCksIHByb2MuYWRkU3RhY2tTbG90KHNpemVvZihpbnQpLCBTdGFja1Nsb3RLaW5kOjpBbm9u
eW1vdXMpKTsKKyAgICBTbG90QmFzZVZhbHVlKiBzdGFjayA9CisgICAgICAgIHJvb3QtPmFwcGVu
ZE5ldzxTbG90QmFzZVZhbHVlPihwcm9jLCBPcmlnaW4oKSwgcHJvYy5hZGRTdGFja1Nsb3Qoc2l6
ZW9mKGludCkpKTsKIAogICAgIHJvb3QtPmFwcGVuZE5ldzxNZW1vcnlWYWx1ZT4oCiAgICAgICAg
IHByb2MsIFN0b3JlLCBPcmlnaW4oKSwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyQWxsb2NhdGVTdGFjay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVN0YWNrLmNwcAkocmV2aXNpb24gMTk2MDExKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJBbGxvY2F0ZVN0YWNrLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtOTUsMzAgKzk1LDEzIEBAIHZvaWQgYWxsb2NhdGVTdGFjayhDb2RlJiBjb2RlKQog
ewogICAgIFBoYXNlU2NvcGUgcGhhc2VTY29wZShjb2RlLCAiYWxsb2NhdGVTdGFjayIpOwogCi0g
ICAgLy8gUGVyZm9ybSBhbiBlc2NhcGUgYW5hbHlzaXMgb3ZlciBzdGFjayBzbG90cy4gQW4gZXNj
YXBpbmcgc3RhY2sgc2xvdCBpcyBvbmUgdGhhdCBpcyBsb2NrZWQgb3IKLSAgICAvLyBpcyBleHBs
aWNpdGx5IGVzY2FwZWQgaW4gdGhlIGNvZGUuCi0gICAgSW5kZXhTZXQ8U3RhY2tTbG90PiBlc2Nh
cGluZ1N0YWNrU2xvdHM7Ci0gICAgZm9yIChTdGFja1Nsb3QqIHNsb3QgOiBjb2RlLnN0YWNrU2xv
dHMoKSkgewotICAgICAgICBpZiAoc2xvdC0+aXNMb2NrZWQoKSkKLSAgICAgICAgICAgIGVzY2Fw
aW5nU3RhY2tTbG90cy5hZGQoc2xvdCk7Ci0gICAgfQotICAgIGZvciAoQmFzaWNCbG9jayogYmxv
Y2sgOiBjb2RlKSB7Ci0gICAgICAgIGZvciAoSW5zdCYgaW5zdCA6ICpibG9jaykgewotICAgICAg
ICAgICAgaW5zdC5mb3JFYWNoQXJnKAotICAgICAgICAgICAgICAgIFsmXSAoQXJnJiBhcmcsIEFy
Zzo6Um9sZSByb2xlLCBBcmc6OlR5cGUsIEFyZzo6V2lkdGgpIHsKLSAgICAgICAgICAgICAgICAg
ICAgaWYgKHJvbGUgPT0gQXJnOjpVc2VBZGRyICYmIGFyZy5pc1N0YWNrKCkpCi0gICAgICAgICAg
ICAgICAgICAgICAgICBlc2NhcGluZ1N0YWNrU2xvdHMuYWRkKGFyZy5zdGFja1Nsb3QoKSk7Ci0g
ICAgICAgICAgICAgICAgfSk7Ci0gICAgICAgIH0KLSAgICB9Ci0KICAgICAvLyBBbGxvY2F0ZSBh
bGwgb2YgdGhlIGVzY2FwZWQgc2xvdHMgaW4gb3JkZXIuIFRoaXMgaXMga2luZCBvZiBhIGNyYXp5
IGFsZ29yaXRobSB0byBhbGxvdyBmb3IKICAgICAvLyB0aGUgcG9zc2liaWxpdHkgb2Ygc3RhY2sg
c2xvdHMgYmVpbmcgYXNzaWduZWQgZnJhbWUgb2Zmc2V0cyBiZWZvcmUgd2UgZXZlbiBnZXQgaGVy
ZS4KICAgICBBU1NFUlQoIWNvZGUuZnJhbWVTaXplKCkpOwogICAgIFZlY3RvcjxTdGFja1Nsb3Qq
PiBhc3NpZ25lZEVzY2FwZWRTdGFja1Nsb3RzOwogICAgIFZlY3RvcjxTdGFja1Nsb3QqPiBlc2Nh
cGVkU3RhY2tTbG90c1dvcmtsaXN0OwogICAgIGZvciAoU3RhY2tTbG90KiBzbG90IDogY29kZS5z
dGFja1Nsb3RzKCkpIHsKLSAgICAgICAgaWYgKGVzY2FwaW5nU3RhY2tTbG90cy5jb250YWlucyhz
bG90KSkgeworICAgICAgICBpZiAoc2xvdC0+aXNMb2NrZWQoKSkgewogICAgICAgICAgICAgaWYg
KHNsb3QtPm9mZnNldEZyb21GUCgpKQogICAgICAgICAgICAgICAgIGFzc2lnbmVkRXNjYXBlZFN0
YWNrU2xvdHMuYXBwZW5kKHNsb3QpOwogICAgICAgICAgICAgZWxzZQpAQCAtMTM2LDcgKzExOSw3
IEBAIHZvaWQgYWxsb2NhdGVTdGFjayhDb2RlJiBjb2RlKQogICAgICAgICBhc3NpZ25lZEVzY2Fw
ZWRTdGFja1Nsb3RzLmFwcGVuZChzbG90KTsKICAgICB9CiAKLSAgICAvLyBOb3cgd2UgaGFuZGxl
IHRoZSBhbm9ueW1vdXMgc2xvdHMuCisgICAgLy8gTm93IHdlIGhhbmRsZSB0aGUgc3BpbGwgc2xv
dHMuCiAgICAgU3RhY2tTbG90TGl2ZW5lc3MgbGl2ZW5lc3MoY29kZSk7CiAgICAgSW5kZXhNYXA8
U3RhY2tTbG90LCBIYXNoU2V0PFN0YWNrU2xvdCo+PiBpbnRlcmZlcmVuY2UoY29kZS5zdGFja1Ns
b3RzKCkuc2l6ZSgpKTsKICAgICBWZWN0b3I8U3RhY2tTbG90Kj4gc2xvdHM7CkBAIC0xNTQsNyAr
MTM3LDcgQEAgdm9pZCBhbGxvY2F0ZVN0YWNrKENvZGUmIGNvZGUpCiAgICAgICAgICAgICAgICAg
ICAgIGlmICghYXJnLmlzU3RhY2soKSkKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsK
ICAgICAgICAgICAgICAgICAgICAgU3RhY2tTbG90KiBzbG90ID0gYXJnLnN0YWNrU2xvdCgpOwot
ICAgICAgICAgICAgICAgICAgICBpZiAoc2xvdC0+a2luZCgpICE9IFN0YWNrU2xvdEtpbmQ6OkFu
b255bW91cykKKyAgICAgICAgICAgICAgICAgICAgaWYgKHNsb3QtPmtpbmQoKSAhPSBTdGFja1Ns
b3RLaW5kOjpTcGlsbCkKICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKIAogICAgICAg
ICAgICAgICAgICAgICBmb3IgKFN0YWNrU2xvdCogb3RoZXJTbG90IDogbG9jYWxDYWxjLmxpdmUo
KSkgewpAQCAtMTg3LDcgKzE3MCw3IEBAIHZvaWQgYWxsb2NhdGVTdGFjayhDb2RlJiBjb2RlKQog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAgIFN0YWNrU2xvdCogc2xvdCA9IGFyZy5zdGFj
a1Nsb3QoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzbG90LT5raW5kKCkgIT0gU3Rh
Y2tTbG90S2luZDo6QW5vbnltb3VzKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2xv
dC0+a2luZCgpICE9IFN0YWNrU2xvdEtpbmQ6OlNwaWxsKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgb2sgPSBmYWxzZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgICAgICAgICAgICAgICAgICB9CkBAIC0yODcsNyArMjcwLDcgQEAgdm9pZCBhbGxv
Y2F0ZVN0YWNrKENvZGUmIGNvZGUpCiAgICAgICAgICAgICAgICAgICAgIGNhc2UgQXJnOjpTdGFj
azogewogICAgICAgICAgICAgICAgICAgICAgICAgU3RhY2tTbG90KiBzbG90ID0gYXJnLnN0YWNr
U2xvdCgpOwogICAgICAgICAgICAgICAgICAgICAgICAgaWYgKEFyZzo6aXNaRGVmKHJvbGUpCi0g
ICAgICAgICAgICAgICAgICAgICAgICAgICAgJiYgc2xvdC0+a2luZCgpID09IFN0YWNrU2xvdEtp
bmQ6OkFub255bW91cworICAgICAgICAgICAgICAgICAgICAgICAgICAgICYmIHNsb3QtPmtpbmQo
KSA9PSBTdGFja1Nsb3RLaW5kOjpTcGlsbAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICYm
IHNsb3QtPmJ5dGVTaXplKCkgPiBBcmc6OmJ5dGVzKHdpZHRoKSkgewogICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIC8vIEN1cnJlbnRseSB3ZSBvbmx5IGhhbmRsZSB0aGlzIHNpbXBsZSBjYXNl
IGJlY2F1c2UgaXQncyB0aGUgb25seSBvbmUKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAv
LyB0aGF0IGFyaXNlczogWkRlZidzIGFyZSBvbmx5IDMyLWJpdCByaWdodCBub3cuIFNvLCB3aGVu
IHdlIGhpdCB0aGVzZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2Rl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckNvZGUu
Y3BwCShyZXZpc2lvbiAxOTYwMTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fp
ckNvZGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NCwyMyArNTQsMTggQEAgQmFzaWNCbG9jayog
Q29kZTo6YWRkQmxvY2soZG91YmxlIGZyZXF1ZQogCiBTdGFja1Nsb3QqIENvZGU6OmFkZFN0YWNr
U2xvdCh1bnNpZ25lZCBieXRlU2l6ZSwgU3RhY2tTbG90S2luZCBraW5kLCBCMzo6U3RhY2tTbG90
KiBiM1Nsb3QpCiB7Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFN0YWNrU2xvdD4gc2xvdChuZXcgU3Rh
Y2tTbG90KGJ5dGVTaXplLCBtX3N0YWNrU2xvdHMuc2l6ZSgpLCBraW5kLCBiM1Nsb3QpKTsKLSAg
ICBTdGFja1Nsb3QqIHJlc3VsdCA9IHNsb3QuZ2V0KCk7Ci0gICAgbV9zdGFja1Nsb3RzLmFwcGVu
ZChXVEZNb3ZlKHNsb3QpKTsKLSAgICByZXR1cm4gcmVzdWx0OworICAgIHJldHVybiBtX3N0YWNr
U2xvdHMuYWRkTmV3KGJ5dGVTaXplLCBraW5kLCBiM1Nsb3QpOwogfQogCiBTdGFja1Nsb3QqIENv
ZGU6OmFkZFN0YWNrU2xvdChCMzo6U3RhY2tTbG90KiBiM1Nsb3QpCiB7Ci0gICAgcmV0dXJuIGFk
ZFN0YWNrU2xvdChiM1Nsb3QtPmJ5dGVTaXplKCksIGIzU2xvdC0+a2luZCgpLCBiM1Nsb3QpOwor
ICAgIHJldHVybiBhZGRTdGFja1Nsb3QoYjNTbG90LT5ieXRlU2l6ZSgpLCBTdGFja1Nsb3RLaW5k
OjpMb2NrZWQsIGIzU2xvdCk7CiB9CiAKIFNwZWNpYWwqIENvZGU6OmFkZFNwZWNpYWwoc3RkOjp1
bmlxdWVfcHRyPFNwZWNpYWw+IHNwZWNpYWwpCiB7Ci0gICAgU3BlY2lhbCogcmVzdWx0ID0gc3Bl
Y2lhbC5nZXQoKTsKLSAgICByZXN1bHQtPm1fY29kZSA9IHRoaXM7Ci0gICAgbV9zcGVjaWFscy5h
cHBlbmQoV1RGTW92ZShzcGVjaWFsKSk7Ci0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICBzcGVjaWFs
LT5tX2NvZGUgPSB0aGlzOworICAgIHJldHVybiBtX3NwZWNpYWxzLmFkZChXVEZNb3ZlKHNwZWNp
YWwpKTsKIH0KIAogQ0NhbGxTcGVjaWFsKiBDb2RlOjpjQ2FsbFNwZWNpYWwoKQpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJDb2RlLmgJKHJldmlzaW9uIDE5NjAxMSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyQ29kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
Myw2ICszMyw3IEBACiAjaW5jbHVkZSAiQWlyU3BlY2lhbC5oIgogI2luY2x1ZGUgIkFpclN0YWNr
U2xvdC5oIgogI2luY2x1ZGUgIkFpclRtcC5oIgorI2luY2x1ZGUgIkIzU3BhcnNlQ29sbGVjdGlv
bi5oIgogI2luY2x1ZGUgIlJlZ2lzdGVyQXRPZmZzZXRMaXN0LmgiCiAjaW5jbHVkZSAiU3RhY2tB
bGlnbm1lbnQuaCIKIApAQCAtMTg0LDEyNSArMTg1LDExIEBAIHB1YmxpYzoKICAgICBpdGVyYXRv
ciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKCp0aGlzLCAwKTsgfQogICAgIGl0ZXJh
dG9yIGVuZCgpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKCp0aGlzLCBzaXplKCkpOyB9CiAKLSAg
ICBjbGFzcyBTdGFja1Nsb3RzQ29sbGVjdGlvbiB7Ci0gICAgcHVibGljOgotICAgICAgICBTdGFj
a1Nsb3RzQ29sbGVjdGlvbihjb25zdCBDb2RlJiBjb2RlKQotICAgICAgICAgICAgOiBtX2NvZGUo
Y29kZSkKLSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAgdW5zaWduZWQgc2l6ZSgpIGNv
bnN0IHsgcmV0dXJuIG1fY29kZS5tX3N0YWNrU2xvdHMuc2l6ZSgpOyB9Ci0gICAgICAgIFN0YWNr
U2xvdCogYXQodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fY29kZS5tX3N0YWNrU2xv
dHNbaW5kZXhdLmdldCgpOyB9Ci0gICAgICAgIFN0YWNrU2xvdCogb3BlcmF0b3JbXSh1bnNpZ25l
ZCBpbmRleCkgY29uc3QgeyByZXR1cm4gYXQoaW5kZXgpOyB9Ci0KLSAgICAgICAgY2xhc3MgaXRl
cmF0b3IgewotICAgICAgICBwdWJsaWM6Ci0gICAgICAgICAgICBpdGVyYXRvcigpCi0gICAgICAg
ICAgICAgICAgOiBtX2NvbGxlY3Rpb24obnVsbHB0cikKLSAgICAgICAgICAgICAgICAsIG1faW5k
ZXgoMCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaXRlcmF0
b3IoY29uc3QgU3RhY2tTbG90c0NvbGxlY3Rpb24mIGNvbGxlY3Rpb24sIHVuc2lnbmVkIGluZGV4
KQotICAgICAgICAgICAgICAgIDogbV9jb2xsZWN0aW9uKCZjb2xsZWN0aW9uKQotICAgICAgICAg
ICAgICAgICwgbV9pbmRleChpbmRleCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIH0KLQot
ICAgICAgICAgICAgU3RhY2tTbG90KiBvcGVyYXRvciooKQotICAgICAgICAgICAgewotICAgICAg
ICAgICAgICAgIHJldHVybiBtX2NvbGxlY3Rpb24tPmF0KG1faW5kZXgpOwotICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICBpdGVyYXRvciYgb3BlcmF0b3IrKygpCi0gICAgICAgICAgICB7Ci0g
ICAgICAgICAgICAgICAgbV9pbmRleCsrOwotICAgICAgICAgICAgICAgIHJldHVybiAqdGhpczsK
LSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IGl0ZXJh
dG9yJiBvdGhlcikgY29uc3QKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4g
bV9pbmRleCA9PSBvdGhlci5tX2luZGV4OwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBi
b29sIG9wZXJhdG9yIT0oY29uc3QgaXRlcmF0b3ImIG90aGVyKSBjb25zdAotICAgICAgICAgICAg
ewotICAgICAgICAgICAgICAgIHJldHVybiAhKCp0aGlzID09IG90aGVyKTsKLSAgICAgICAgICAg
IH0KLQotICAgICAgICBwcml2YXRlOgotICAgICAgICAgICAgY29uc3QgU3RhY2tTbG90c0NvbGxl
Y3Rpb24qIG1fY29sbGVjdGlvbjsKLSAgICAgICAgICAgIHVuc2lnbmVkIG1faW5kZXg7Ci0gICAg
ICAgIH07Ci0KLSAgICAgICAgaXRlcmF0b3IgYmVnaW4oKSBjb25zdCB7IHJldHVybiBpdGVyYXRv
cigqdGhpcywgMCk7IH0KLSAgICAgICAgaXRlcmF0b3IgZW5kKCkgY29uc3QgeyByZXR1cm4gaXRl
cmF0b3IoKnRoaXMsIHNpemUoKSk7IH0KLQotICAgIHByaXZhdGU6Ci0gICAgICAgIGNvbnN0IENv
ZGUmIG1fY29kZTsKLSAgICB9OwotCi0gICAgU3RhY2tTbG90c0NvbGxlY3Rpb24gc3RhY2tTbG90
cygpIGNvbnN0IHsgcmV0dXJuIFN0YWNrU2xvdHNDb2xsZWN0aW9uKCp0aGlzKTsgfQotICAgIAot
ICAgIGNsYXNzIFNwZWNpYWxzQ29sbGVjdGlvbiB7Ci0gICAgcHVibGljOgotICAgICAgICBTcGVj
aWFsc0NvbGxlY3Rpb24oY29uc3QgQ29kZSYgY29kZSkKLSAgICAgICAgICAgIDogbV9jb2RlKGNv
ZGUpCi0gICAgICAgIHsKLSAgICAgICAgfQotCi0gICAgICAgIHVuc2lnbmVkIHNpemUoKSBjb25z
dCB7IHJldHVybiBtX2NvZGUubV9zcGVjaWFscy5zaXplKCk7IH0KLSAgICAgICAgU3BlY2lhbCog
YXQodW5zaWduZWQgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fY29kZS5tX3NwZWNpYWxzW2luZGV4
XS5nZXQoKTsgfQotICAgICAgICBTcGVjaWFsKiBvcGVyYXRvcltdKHVuc2lnbmVkIGluZGV4KSBj
b25zdCB7IHJldHVybiBhdChpbmRleCk7IH0KLQotICAgICAgICBjbGFzcyBpdGVyYXRvciB7Ci0g
ICAgICAgIHB1YmxpYzoKLSAgICAgICAgICAgIGl0ZXJhdG9yKCkKLSAgICAgICAgICAgICAgICA6
IG1fY29sbGVjdGlvbihudWxscHRyKQotICAgICAgICAgICAgICAgICwgbV9pbmRleCgwKQotICAg
ICAgICAgICAgewotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpdGVyYXRvcihjb25zdCBT
cGVjaWFsc0NvbGxlY3Rpb24mIGNvbGxlY3Rpb24sIHVuc2lnbmVkIGluZGV4KQotICAgICAgICAg
ICAgICAgIDogbV9jb2xsZWN0aW9uKCZjb2xsZWN0aW9uKQotICAgICAgICAgICAgICAgICwgbV9p
bmRleChpbmRleCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAg
U3BlY2lhbCogb3BlcmF0b3IqKCkKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1
cm4gbV9jb2xsZWN0aW9uLT5hdChtX2luZGV4KTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAg
ICAgaXRlcmF0b3ImIG9wZXJhdG9yKysoKQotICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IG1faW5kZXgrKzsKLSAgICAgICAgICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBpdGVyYXRvciYgb3RoZXIpIGNv
bnN0Ci0gICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgcmV0dXJuIG1faW5kZXggPT0gb3Ro
ZXIubV9pbmRleDsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgYm9vbCBvcGVyYXRvciE9
KGNvbnN0IGl0ZXJhdG9yJiBvdGhlcikgY29uc3QKLSAgICAgICAgICAgIHsKLSAgICAgICAgICAg
ICAgICByZXR1cm4gISgqdGhpcyA9PSBvdGhlcik7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAg
cHJpdmF0ZToKLSAgICAgICAgICAgIGNvbnN0IFNwZWNpYWxzQ29sbGVjdGlvbiogbV9jb2xsZWN0
aW9uOwotICAgICAgICAgICAgdW5zaWduZWQgbV9pbmRleDsKLSAgICAgICAgfTsKLQotICAgICAg
ICBpdGVyYXRvciBiZWdpbigpIGNvbnN0IHsgcmV0dXJuIGl0ZXJhdG9yKCp0aGlzLCAwKTsgfQot
ICAgICAgICBpdGVyYXRvciBlbmQoKSBjb25zdCB7IHJldHVybiBpdGVyYXRvcigqdGhpcywgc2l6
ZSgpKTsgfQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgY29uc3QgQ29kZSYgbV9jb2RlOwotICAg
IH07CisgICAgY29uc3QgU3BhcnNlQ29sbGVjdGlvbjxTdGFja1Nsb3Q+JiBzdGFja1Nsb3RzKCkg
Y29uc3QgeyByZXR1cm4gbV9zdGFja1Nsb3RzOyB9CisgICAgU3BhcnNlQ29sbGVjdGlvbjxTdGFj
a1Nsb3Q+JiBzdGFja1Nsb3RzKCkgeyByZXR1cm4gbV9zdGFja1Nsb3RzOyB9CiAKLSAgICBTcGVj
aWFsc0NvbGxlY3Rpb24gc3BlY2lhbHMoKSBjb25zdCB7IHJldHVybiBTcGVjaWFsc0NvbGxlY3Rp
b24oKnRoaXMpOyB9CisgICAgY29uc3QgU3BhcnNlQ29sbGVjdGlvbjxTcGVjaWFsPiYgc3BlY2lh
bHMoKSBjb25zdCB7IHJldHVybiBtX3NwZWNpYWxzOyB9CisgICAgU3BhcnNlQ29sbGVjdGlvbjxT
cGVjaWFsPiYgc3BlY2lhbHMoKSB7IHJldHVybiBtX3NwZWNpYWxzOyB9CiAKICAgICB0ZW1wbGF0
ZTx0eXBlbmFtZSBDYWxsYmFjaz4KICAgICB2b2lkIGZvckFsbFRtcHMoY29uc3QgQ2FsbGJhY2sm
IGNhbGxiYWNrKSBjb25zdApAQCAtMzMxLDkgKzIxOCw5IEBAIHByaXZhdGU6CiAgICAgQ29kZShQ
cm9jZWR1cmUmKTsKIAogICAgIFByb2NlZHVyZSYgbV9wcm9jOyAvLyBTb21lIG1ldGEtZGF0YSwg
bGlrZSBieXByb2R1Y3RzLCBpcyBzdG9yZWQgaW4gdGhlIFByb2NlZHVyZS4KLSAgICBWZWN0b3I8
c3RkOjp1bmlxdWVfcHRyPFN0YWNrU2xvdD4+IG1fc3RhY2tTbG90czsKKyAgICBTcGFyc2VDb2xs
ZWN0aW9uPFN0YWNrU2xvdD4gbV9zdGFja1Nsb3RzOwogICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9w
dHI8QmFzaWNCbG9jaz4+IG1fYmxvY2tzOwotICAgIFZlY3RvcjxzdGQ6OnVuaXF1ZV9wdHI8U3Bl
Y2lhbD4+IG1fc3BlY2lhbHM7CisgICAgU3BhcnNlQ29sbGVjdGlvbjxTcGVjaWFsPiBtX3NwZWNp
YWxzOwogICAgIEhhc2hTZXQ8VG1wPiBtX2Zhc3RUbXBzOwogICAgIENDYWxsU3BlY2lhbCogbV9j
Q2FsbFNwZWNpYWwgeyBudWxscHRyIH07CiAgICAgdW5zaWduZWQgbV9udW1HUFRtcHMgeyAwIH07
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpckZpeE9idmlvdXNTcGlsbHMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyRml4T2J2
aW91c1NwaWxscy5jcHAJKHJldmlzaW9uIDE5NjAxMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9iMy9haXIvQWlyRml4T2J2aW91c1NwaWxscy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2MSw3
ICsyNjEsNyBAQCBwcml2YXRlOgogICAgIAogICAgIHN0YXRpYyBib29sIGlzU3BpbGxTbG90KGNv
bnN0IEFyZyYgYXJnKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGFyZy5pc1N0YWNrKCkgJiYgIWFy
Zy5zdGFja1Nsb3QoKS0+aXNMb2NrZWQoKTsKKyAgICAgICAgcmV0dXJuIGFyZy5pc1N0YWNrKCkg
JiYgYXJnLnN0YWNrU2xvdCgpLT5pc1NwaWxsKCk7CiAgICAgfQogICAgIAogICAgIHN0cnVjdCBS
ZWdDb25zdCB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckluc3RJbmxp
bmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJbnN0
SW5saW5lcy5oCShyZXZpc2lvbiAxOTYwMTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0Fpckluc3RJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDYgKzMxLDcgQEAKICNp
bmNsdWRlICJBaXJJbnN0LmgiCiAjaW5jbHVkZSAiQWlyT3Bjb2RlVXRpbHMuaCIKICNpbmNsdWRl
ICJBaXJTcGVjaWFsLmgiCisjaW5jbHVkZSAiQWlyU3RhY2tTbG90LmgiCiAjaW5jbHVkZSAiQjNW
YWx1ZS5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEIzIHsgbmFtZXNwYWNlIEFpciB7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0Fpckl0ZXJhdGVkUmVnaXN0ZXJD
b2FsZXNjaW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0Fpckl0ZXJhdGVkUmVnaXN0ZXJDb2FsZXNjaW5nLmNwcAkocmV2aXNpb24gMTk2MDExKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJJdGVyYXRlZFJlZ2lzdGVyQ29hbGVzY2lu
Zy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMzMsNyArMTIzMyw3IEBAIHByaXZhdGU6CiAKICAg
ICAgICAgICAgIC8vIEFsbG9jYXRlIHN0YWNrIHNsb3QgZm9yIGVhY2ggc3BpbGxlZCB2YWx1ZS4K
ICAgICAgICAgICAgIFN0YWNrU2xvdCogc3RhY2tTbG90ID0gbV9jb2RlLmFkZFN0YWNrU2xvdCgK
LSAgICAgICAgICAgICAgICBtX3RtcFdpZHRoLndpZHRoKHRtcCkgPD0gQXJnOjpXaWR0aDMyID8g
NCA6IDgsIFN0YWNrU2xvdEtpbmQ6OkFub255bW91cyk7CisgICAgICAgICAgICAgICAgbV90bXBX
aWR0aC53aWR0aCh0bXApIDw9IEFyZzo6V2lkdGgzMiA/IDQgOiA4LCBTdGFja1Nsb3RLaW5kOjpT
cGlsbCk7CiAgICAgICAgICAgICBib29sIGlzTmV3VG1wID0gc3RhY2tTbG90cy5hZGQodG1wLCBz
dGFja1Nsb3QpLmlzTmV3RW50cnk7CiAgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKGlzTmV3VG1w
LCBpc05ld1RtcCk7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9h
aXIvQWlyTGl2ZW5lc3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpckxpdmVuZXNzLmgJKHJldmlzaW9uIDE5NjAxMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9iMy9haXIvQWlyTGl2ZW5lc3MuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBA
QAogI2luY2x1ZGUgIkFpckJhc2ljQmxvY2suaCIKICNpbmNsdWRlICJBaXJDb2RlLmgiCiAjaW5j
bHVkZSAiQWlySW5zdElubGluZXMuaCIKKyNpbmNsdWRlICJBaXJTdGFja1Nsb3QuaCIKICNpbmNs
dWRlICJBaXJUbXBJbmxpbmVzLmgiCiAjaW5jbHVkZSAiQjNJbmRleE1hcC5oIgogI2luY2x1ZGUg
IkIzSW5kZXhTZXQuaCIKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTG93
ZXJBZnRlclJlZ0FsbG9jLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL0Fpckxvd2VyQWZ0ZXJSZWdBbGxvYy5jcHAJKHJldmlzaW9uIDE5NjAxMSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyTG93ZXJBZnRlclJlZ0FsbG9jLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtOTcsNyArOTcsNyBAQCB2b2lkIGxvd2VyQWZ0ZXJSZWdBbGxvYyhDb2Rl
JiBjb2RlKQogICAgICAgICAgICAgICAgIHJlc3VsdFtpXSA9IEFyZzo6c3RhY2soCiAgICAgICAg
ICAgICAgICAgICAgIGNvZGUuYWRkU3RhY2tTbG90KAogICAgICAgICAgICAgICAgICAgICAgICAg
QXJnOjpieXRlcyhBcmc6OmNvbnNlcnZhdGl2ZVdpZHRoKHR5cGUpKSwKLSAgICAgICAgICAgICAg
ICAgICAgICAgIFN0YWNrU2xvdEtpbmQ6OkFub255bW91cykpOworICAgICAgICAgICAgICAgICAg
ICAgICAgU3RhY2tTbG90S2luZDo6U3BpbGwpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQog
ICAgICAgICByZXR1cm4gcmVzdWx0OwpAQCAtMTgyLDcgKzE4Miw3IEBAIHZvaWQgbG93ZXJBZnRl
clJlZ0FsbG9jKENvZGUmIGNvZGUpCiAgICAgICAgICAgICAgICAgICAgICAgICBBcmcgYXJnKHRt
cCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBBcmc6OldpZHRoIHdpZHRoID0gQXJnOjpjb25z
ZXJ2YXRpdmVXaWR0aChhcmcudHlwZSgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIFN0YWNr
U2xvdCogc3RhY2tTbG90ID0KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlLmFkZFN0
YWNrU2xvdChBcmc6OmJ5dGVzKHdpZHRoKSwgU3RhY2tTbG90S2luZDo6QW5vbnltb3VzKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb2RlLmFkZFN0YWNrU2xvdChBcmc6OmJ5dGVzKHdp
ZHRoKSwgU3RhY2tTbG90S2luZDo6U3BpbGwpOwogICAgICAgICAgICAgICAgICAgICAgICAgcGFp
cnMuYXBwZW5kKFNodWZmbGVQYWlyKGFyZywgQXJnOjpzdGFjayhzdGFja1Nsb3QpLCB3aWR0aCkp
OwogICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2tTbG90cy5hcHBlbmQoc3RhY2tTbG90KTsK
ICAgICAgICAgICAgICAgICAgICAgfSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMv
YWlyL0FpclNwZWNpYWwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
My9haXIvQWlyU3BlY2lhbC5jcHAJKHJldmlzaW9uIDE5NjAxMSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9iMy9haXIvQWlyU3BlY2lhbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDggKzM2
LDYgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZQogY29uc3QgY2hh
ciogY29uc3QgU3BlY2lhbDo6ZHVtcFByZWZpeCA9ICImIjsKIAogU3BlY2lhbDo6U3BlY2lhbCgp
Ci0gICAgOiBtX2luZGV4KFVJTlRfTUFYKQotICAgICwgbV9jb2RlKG51bGxwdHIpCiB7CiB9CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3BlY2lhbC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3BlY2lhbC5oCShyZXZpc2lv
biAxOTYwMTEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNwZWNpYWwuaAko
d29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBAQAogI2lmIEVOQUJMRShCM19KSVQpCiAKICNp
bmNsdWRlICJBaXJJbnN0LmgiCisjaW5jbHVkZSAiQjNTcGFyc2VDb2xsZWN0aW9uLmgiCiAjaW5j
bHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNp
bmNsdWRlIDx3dGYvU2NvcGVkTGFtYmRhLmg+CkBAIC05OCwxMCArOTksMTAgQEAgcHJvdGVjdGVk
OgogCiBwcml2YXRlOgogICAgIGZyaWVuZCBjbGFzcyBDb2RlOworICAgIGZyaWVuZCBjbGFzcyBT
cGFyc2VDb2xsZWN0aW9uPFNwZWNpYWw+OwogCi0gICAgY29uc3QgY2hhciogbV9uYW1lOwotICAg
IHVuc2lnbmVkIG1faW5kZXg7Ci0gICAgQ29kZSogbV9jb2RlOworICAgIHVuc2lnbmVkIG1faW5k
ZXggeyBVSU5UX01BWCB9OworICAgIENvZGUqIG1fY29kZSB7IG51bGxwdHIgfTsKIH07CiAKIGNs
YXNzIERlZXBTcGVjaWFsRHVtcCB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWly
L0FpclNwaWxsRXZlcnl0aGluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJTcGlsbEV2ZXJ5dGhpbmcuY3BwCShyZXZpc2lvbiAxOTYwMTEpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclNwaWxsRXZlcnl0aGluZy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTg4LDcgKzg4LDcgQEAgdm9pZCBzcGlsbEV2ZXJ5dGhpbmcoQ29kZSYgY29k
ZSkKICAgICAgICAgQXJnOjpUeXBlIHR5cGUgPSBzdGF0aWNfY2FzdDxBcmc6OlR5cGU+KHR5cGVJ
bmRleCk7CiAgICAgICAgIHN0YWNrU2xvdHMucmVzaXplKGNvZGUubnVtVG1wcyh0eXBlKSk7CiAg
ICAgICAgIGZvciAodW5zaWduZWQgdG1wSW5kZXggPSBjb2RlLm51bVRtcHModHlwZSk7IHRtcElu
ZGV4LS07KQotICAgICAgICAgICAgc3RhY2tTbG90c1t0bXBJbmRleF0gPSBjb2RlLmFkZFN0YWNr
U2xvdCg4LCBTdGFja1Nsb3RLaW5kOjpBbm9ueW1vdXMpOworICAgICAgICAgICAgc3RhY2tTbG90
c1t0bXBJbmRleF0gPSBjb2RlLmFkZFN0YWNrU2xvdCg4LCBTdGFja1Nsb3RLaW5kOjpTcGlsbCk7
CiAgICAgfQogCiAgICAgSW5zZXJ0aW9uU2V0IGluc2VydGlvblNldChjb2RlKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3RhY2tTbG90LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclN0YWNrU2xvdC5jcHAJKHJldmlzaW9u
IDE5NjAxMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3RhY2tTbG90LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsMTEgQEAgdm9pZCBTdGFja1Nsb3Q6OnNldE9m
ZnNldEZyb21GUChpbnRwdHJfdAogCiB2b2lkIFN0YWNrU2xvdDo6ZHVtcChQcmludFN0cmVhbSYg
b3V0KSBjb25zdAogewotICAgIG91dC5wcmludCgic3RhY2siLCBtX2luZGV4KTsKKyAgICBpZiAo
aXNTcGlsbCgpKQorICAgICAgICBvdXQucHJpbnQoInNwaWxsIik7CisgICAgZWxzZQorICAgICAg
ICBvdXQucHJpbnQoInN0YWNrIik7CisgICAgb3V0LnByaW50KG1faW5kZXgpOwogfQogCiB2b2lk
IFN0YWNrU2xvdDo6ZGVlcER1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKQEAgLTUxLDkgKzU1
LDggQEAgdm9pZCBTdGFja1Nsb3Q6OmRlZXBEdW1wKFByaW50U3RyZWFtJiBvdQogICAgICAgICBv
dXQucHJpbnQoIiwgYjNTbG90ID0gIiwgKm1fYjNTbG90LCAiOiAoIiwgQjM6OmRlZXBEdW1wKG1f
YjNTbG90KSwgIikiKTsKIH0KIAotU3RhY2tTbG90OjpTdGFja1Nsb3QodW5zaWduZWQgYnl0ZVNp
emUsIHVuc2lnbmVkIGluZGV4LCBTdGFja1Nsb3RLaW5kIGtpbmQsIEIzOjpTdGFja1Nsb3QqIGIz
U2xvdCkKK1N0YWNrU2xvdDo6U3RhY2tTbG90KHVuc2lnbmVkIGJ5dGVTaXplLCBTdGFja1Nsb3RL
aW5kIGtpbmQsIEIzOjpTdGFja1Nsb3QqIGIzU2xvdCkKICAgICA6IG1fYnl0ZVNpemUoYnl0ZVNp
emUpCi0gICAgLCBtX2luZGV4KGluZGV4KQogICAgICwgbV9vZmZzZXRGcm9tRlAoYjNTbG90ID8g
YjNTbG90LT5vZmZzZXRGcm9tRlAoKSA6IDApCiAgICAgLCBtX2tpbmQoa2luZCkKICAgICAsIG1f
YjNTbG90KGIzU2xvdCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3Rh
Y2tTbG90LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2IzL2Fpci9BaXJT
dGFja1Nsb3QuaAkocmV2aXNpb24gMTk2MDExKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJTdGFja1Nsb3QuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsOCBAQAogCiAj
aWYgRU5BQkxFKEIzX0pJVCkKIAotI2luY2x1ZGUgIkIzU3RhY2tTbG90S2luZC5oIgorI2luY2x1
ZGUgIkFpclN0YWNrU2xvdEtpbmQuaCIKKyNpbmNsdWRlICJCM1NwYXJzZUNvbGxlY3Rpb24uaCIK
ICNpbmNsdWRlIDx3dGYvRmFzdE1hbGxvYy5oPgogI2luY2x1ZGUgPHd0Zi9Ob25jb3B5YWJsZS5o
PgogI2luY2x1ZGUgPHd0Zi9QcmludFN0cmVhbS5oPgpAQCAtNDYsNiArNDcsNyBAQCBwdWJsaWM6
CiAgICAgdW5zaWduZWQgYnl0ZVNpemUoKSBjb25zdCB7IHJldHVybiBtX2J5dGVTaXplOyB9CiAg
ICAgU3RhY2tTbG90S2luZCBraW5kKCkgY29uc3QgeyByZXR1cm4gbV9raW5kOyB9CiAgICAgYm9v
bCBpc0xvY2tlZCgpIGNvbnN0IHsgcmV0dXJuIG1fa2luZCA9PSBTdGFja1Nsb3RLaW5kOjpMb2Nr
ZWQ7IH0KKyAgICBib29sIGlzU3BpbGwoKSBjb25zdCB7IHJldHVybiBtX2tpbmQgPT0gU3RhY2tT
bG90S2luZDo6U3BpbGw7IH0KICAgICB1bnNpZ25lZCBpbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1f
aW5kZXg7IH0KIAogICAgIHZvaWQgZW5zdXJlU2l6ZSh1bnNpZ25lZCByZXF1ZXN0ZWRTaXplKQpA
QCAtNzksMTQgKzgxLDE1IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3Mg
Q29kZTsKKyAgICBmcmllbmQgY2xhc3MgU3BhcnNlQ29sbGVjdGlvbjxTdGFja1Nsb3Q+OwogCi0g
ICAgU3RhY2tTbG90KHVuc2lnbmVkIGJ5dGVTaXplLCB1bnNpZ25lZCBpbmRleCwgU3RhY2tTbG90
S2luZCwgQjM6OlN0YWNrU2xvdCopOworICAgIFN0YWNrU2xvdCh1bnNpZ25lZCBieXRlU2l6ZSwg
U3RhY2tTbG90S2luZCwgQjM6OlN0YWNrU2xvdCopOwogICAgIAotICAgIHVuc2lnbmVkIG1fYnl0
ZVNpemU7Ci0gICAgdW5zaWduZWQgbV9pbmRleDsKLSAgICBpbnRwdHJfdCBtX29mZnNldEZyb21G
UDsKLSAgICBTdGFja1Nsb3RLaW5kIG1fa2luZDsKLSAgICBCMzo6U3RhY2tTbG90KiBtX2IzU2xv
dDsKKyAgICB1bnNpZ25lZCBtX2J5dGVTaXplIHsgMCB9OworICAgIHVuc2lnbmVkIG1faW5kZXgg
eyBVSU5UX01BWCB9OworICAgIGludHB0cl90IG1fb2Zmc2V0RnJvbUZQIHsgMCB9OworICAgIFN0
YWNrU2xvdEtpbmQgbV9raW5kIHsgU3RhY2tTbG90S2luZDo6TG9ja2VkIH07CisgICAgQjM6OlN0
YWNrU2xvdCogbV9iM1Nsb3QgeyBudWxscHRyIH07CiB9OwogCiBjbGFzcyBEZWVwU3RhY2tTbG90
RHVtcCB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclN0YWNrU2xvdEtp
bmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3Rh
Y2tTbG90S2luZC5jcHAJKHJldmlzaW9uIDE5NTkwMSkJKGZyb20gU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL0IzU3RhY2tTbG90S2luZC5jcHA6MTk1OTAxKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2IzL2Fpci9BaXJTdGFja1Nsb3RLaW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDUyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJCM1N0YWNrU2xvdEtpbmQuaCIKKworI2lmIEVO
QUJMRShCM19KSVQpCisKKyNpbmNsdWRlIDx3dGYvUHJpbnRTdHJlYW0uaD4KKworbmFtZXNwYWNl
IFdURiB7CisKK3VzaW5nIG5hbWVzcGFjZSBKU0M6OkIzOworCit2b2lkIHByaW50SW50ZXJuYWwo
UHJpbnRTdHJlYW0mIG91dCwgU3RhY2tTbG90S2luZCBraW5kKQoreworICAgIHN3aXRjaCAoa2lu
ZCkgeworICAgIGNhc2UgU3RhY2tTbG90S2luZDo6TG9ja2VkOgorICAgICAgICBvdXQucHJpbnQo
IkxvY2tlZCIpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBTdGFja1Nsb3RLaW5kOjpBbm9u
eW1vdXM6CisgICAgICAgIG91dC5wcmludCgiQW5vbnltb3VzIik7CisgICAgICAgIHJldHVybjsK
KyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgV1RGCisKKyNlbmRpZiAvLyBFTkFCTEUoQjNfSklUKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2IzL2Fpci9BaXJTdGFja1Nsb3RLaW5kLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclN0YWNrU2xvdEtpbmQuY3BwCSh3b3JraW5nIGNv
cHkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclN0YWNrU2xvdEtpbmQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNCw3ICsyNCw3IEBACiAgKi8KIAogI2luY2x1ZGUgImNvbmZp
Zy5oIgotI2luY2x1ZGUgIkIzU3RhY2tTbG90S2luZC5oIgorI2luY2x1ZGUgIkFpclN0YWNrU2xv
dEtpbmQuaCIKIAogI2lmIEVOQUJMRShCM19KSVQpCiAKQEAgLTMyLDcgKzMyLDcgQEAKIAogbmFt
ZXNwYWNlIFdURiB7CiAKLXVzaW5nIG5hbWVzcGFjZSBKU0M6OkIzOwordXNpbmcgbmFtZXNwYWNl
IEpTQzo6QjM6OkFpcjsKIAogdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIFN0
YWNrU2xvdEtpbmQga2luZCkKIHsKQEAgLTQwLDggKzQwLDggQEAgdm9pZCBwcmludEludGVybmFs
KFByaW50U3RyZWFtJiBvdXQsIFN0YQogICAgIGNhc2UgU3RhY2tTbG90S2luZDo6TG9ja2VkOgog
ICAgICAgICBvdXQucHJpbnQoIkxvY2tlZCIpOwogICAgICAgICByZXR1cm47Ci0gICAgY2FzZSBT
dGFja1Nsb3RLaW5kOjpBbm9ueW1vdXM6Ci0gICAgICAgIG91dC5wcmludCgiQW5vbnltb3VzIik7
CisgICAgY2FzZSBTdGFja1Nsb3RLaW5kOjpTcGlsbDoKKyAgICAgICAgb3V0LnByaW50KCJTcGls
bCIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclN0YWNrU2xvdEtp
bmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclN0YWNr
U2xvdEtpbmQuaAkocmV2aXNpb24gMTk1OTAxKQkoZnJvbSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvQjNTdGFja1Nsb3RLaW5kLmg6MTk1OTAxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Iz
L2Fpci9BaXJTdGFja1Nsb3RLaW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2MyBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNS0yMDE2IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5k
ZWYgQjNTdGFja1Nsb3RLaW5kX2gKKyNkZWZpbmUgQjNTdGFja1Nsb3RLaW5kX2gKKworI2lmIEVO
QUJMRShCM19KSVQpCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgQjMgeworCitlbnVtIGNs
YXNzIFN0YWNrU2xvdEtpbmQgOiB1aW50OF90IHsKKyAgICAvLyBBIGxvY2tlZCBzdGFjayBzbG90
IG5lZWRzIHRvIGJlIGtlcHQgZGlzam9pbnQgZnJvbSBhbGwgb3RoZXJzIGJlY2F1c2Ugd2UgaW50
ZW5kIHRvIGVzY2FwZQorICAgIC8vIGl0IGV2ZW4gaWYgdGhhdCdzIG5vdCBvYnZpb3VzLiBUaGlz
IGhhcHBlbnMgd2hlbiB0aGUgcnVudGltZSB0YWtlcyB0aGUgYWRkcmVzcyBvZiBhIHN0YWNrCisg
ICAgLy8gc2xvdC4KKyAgICBMb2NrZWQsCisKKyAgICAvLyBUaGVzZSBzdGFjayBzbG90cyBiZWhh
dmUgbGlrZSB2YXJpYWJsZXMuIFVuZGVmaW5lZCBiZWhhdmlvciBoYXBwZW5zIGlmIHlvdSBzdG9y
ZSBsZXNzIHRoYW4KKyAgICAvLyB0aGUgd2lkdGggb2YgdGhlIHNsb3QuCisgICAgQW5vbnltb3Vz
CisKKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGFkZCBhIHRoaXJkIG1vZGUsIHdoaWNoIG1lYW5z
IHRoYXQgdGhlIHN0YWNrIHNsb3Qgd2lsbCBiZSByZWFkIGFzeW5jaHJvbm91c2x5CisgICAgLy8g
YXMgd2l0aCBMb2NrZWQsIGJ1dCBuZXZlciB3cml0dGVuIHRvIGFzeW5jaHJvbm91c2x5LiBUaGVu
LCBBaXIgY291bGQgb3B0aW1pemUgc3BpbGxpbmcgYW5kCisgICAgLy8gZmlsbGluZyBieSB0cmFj
a2luZyB3aGV0aGVyIHRoZSB2YWx1ZSBoYWQgYmVlbiBzdG9yZWQgdG8gYSByZWFkLW9ubHkgbG9j
a2VkIHNsb3QuIElmIGl0IGhhZCwKKyAgICAvLyB0aGVuIHdlIGNhbiByZWZpbGwgZnJvbSB0aGF0
IHNsb3QuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1
MDU4NworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkIzCisKK25hbWVzcGFjZSBXVEYgewor
CitjbGFzcyBQcmludFN0cmVhbTsKKwordm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiwg
SlNDOjpCMzo6U3RhY2tTbG90S2luZCk7CisKK30gLy8gbmFtZXNwYWNlIFdURgorCisjZW5kaWYg
Ly8gRU5BQkxFKEIzX0pJVCkKKworI2VuZGlmIC8vIEIzU3RhY2tTbG90S2luZF9oCisKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3RhY2tTbG90S2luZC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvQWlyU3RhY2tTbG90S2luZC5oCSh3
b3JraW5nIGNvcHkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL0FpclN0YWNrU2xv
dEtpbmQuaAkod29ya2luZyBjb3B5KQpAQCAtMjMsMjIgKzIzLDI2IEBACiAgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKICAqLwogCi0jaWZuZGVmIEIzU3RhY2tTbG90S2luZF9oCi0jZGVmaW5lIEIzU3RhY2tTbG90
S2luZF9oCisjaWZuZGVmIEFpclN0YWNrU2xvdEtpbmRfaAorI2RlZmluZSBBaXJTdGFja1Nsb3RL
aW5kX2gKIAogI2lmIEVOQUJMRShCM19KSVQpCiAKLW5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
QjMgeworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBCMyB7IG5hbWVzcGFjZSBBaXIgewogCiBl
bnVtIGNsYXNzIFN0YWNrU2xvdEtpbmQgOiB1aW50OF90IHsKLSAgICAvLyBBIGxvY2tlZCBzdGFj
ayBzbG90IG5lZWRzIHRvIGJlIGtlcHQgZGlzam9pbnQgZnJvbSBhbGwgb3RoZXJzIGJlY2F1c2Ug
d2UgaW50ZW5kIHRvIGVzY2FwZQotICAgIC8vIGl0IGV2ZW4gaWYgdGhhdCdzIG5vdCBvYnZpb3Vz
LiBUaGlzIGhhcHBlbnMgd2hlbiB0aGUgcnVudGltZSB0YWtlcyB0aGUgYWRkcmVzcyBvZiBhIHN0
YWNrCi0gICAgLy8gc2xvdC4KKyAgICAvLyBBIGxvY2tlZCBzdGFjayBzbG90IGlzIGFuIGFyZWEg
b2Ygc3RhY2sgcmVxdWVzdGVkIGJ5IHRoZSBjbGllbnQuIEl0IGNhbm5vdCBiZSBraWxsZWQuIFRo
ZQorICAgIC8vIGNsaWVudCBjYW4gZ2V0IGl0cyBGUCBvZmZzZXQgYW5kIHdyaXRlIHRvIGl0IGZy
b20gc3RhY2sgd2Fsa2luZyBjb2RlLCBzbyB3ZSBtdXN0IGFzc3VtZQorICAgIC8vIHRoYXQgcmVh
ZHMgYW5kIHdyaXRlcyB0byBhIGxvY2tlZCBzdGFjayBzbG90IGNhbiBiZSBjbG9iYmVyZWQgdGhl
IHNhbWUgd2F5IGFzIHJlYWRzIGFuZAorICAgIC8vIHdyaXRlcyB0byBhbnkgbWVtb3J5IGxvY2F0
aW9uLgogICAgIExvY2tlZCwKIAotICAgIC8vIFRoZXNlIHN0YWNrIHNsb3RzIGJlaGF2ZSBsaWtl
IHZhcmlhYmxlcy4gVW5kZWZpbmVkIGJlaGF2aW9yIGhhcHBlbnMgaWYgeW91IHN0b3JlIGxlc3Mg
dGhhbgotICAgIC8vIHRoZSB3aWR0aCBvZiB0aGUgc2xvdC4KLSAgICBBbm9ueW1vdXMKKyAgICAv
LyBBIHNwaWxsIHNsb3QuIFRoZXNlIGhhdmUgZnVuZGFtZW50YWxseSBkaWZmZXJlbnQgYmVoYXZp
b3IgdGhhbiBhIHR5cGljYWwgbWVtb3J5IGxvY2F0aW9uLgorICAgIC8vIFRoZXkgYXJlIGxvd2Vy
ZWQgdG8gZnJvbSB0ZW1wb3Jhcmllcy4gVGhpcyBtZWFucyBmb3IgZXhhbXBsZSB0aGF0IGEgMzIt
Yml0IFpEZWYgc3RvcmUgdG8gYQorICAgIC8vIDggYnl0ZSBzdGFjayBzbG90IHdpbGwgemVybyB0
aGUgdG9wIDQgYnl0ZXMsIGV2ZW4gdGhvdWdoIGEgMzItYml0IFpEZWYgc3RvcmUgdG8gYW55IG90
aGVyCisgICAgLy8ga2luZCBvZiBtZW1vcnkgbG9jYXRpb24gd291bGQgZG8gbm8gc3VjaCB0aGlu
Zy4gVXNlQWRkciBvbiBhIHNwaWxsIHNsb3QgaXMgbm90IGFsbG93ZWQsIHNvCisgICAgLy8gdGhl
eSBuZXZlciBlc2NhcGUuCisgICAgU3BpbGwKIAogICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgYWRk
IGEgdGhpcmQgbW9kZSwgd2hpY2ggbWVhbnMgdGhhdCB0aGUgc3RhY2sgc2xvdCB3aWxsIGJlIHJl
YWQgYXN5bmNocm9ub3VzbHkKICAgICAvLyBhcyB3aXRoIExvY2tlZCwgYnV0IG5ldmVyIHdyaXR0
ZW4gdG8gYXN5bmNocm9ub3VzbHkuIFRoZW4sIEFpciBjb3VsZCBvcHRpbWl6ZSBzcGlsbGluZyBh
bmQKQEAgLTQ3LDEzICs1MSwxMyBAQCBlbnVtIGNsYXNzIFN0YWNrU2xvdEtpbmQgOiB1aW50OF90
IHsKICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTUwNTg3
CiB9OwogCi19IH0gLy8gbmFtZXNwYWNlIEpTQzo6QjMKK30gfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkIzOjpBaXIKIAogbmFtZXNwYWNlIFdURiB7CiAKIGNsYXNzIFByaW50U3RyZWFtOwogCi12b2lk
IHByaW50SW50ZXJuYWwoUHJpbnRTdHJlYW0mLCBKU0M6OkIzOjpTdGFja1Nsb3RLaW5kKTsKK3Zv
aWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYsIEpTQzo6QjM6OkFpcjo6U3RhY2tTbG90S2lu
ZCk7CiAKIH0gLy8gbmFtZXNwYWNlIFdURgogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
YjMvYWlyL29wY29kZV9nZW5lcmF0b3IucmIKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2IzL2Fpci9vcGNvZGVfZ2VuZXJhdG9yLnJiCShyZXZpc2lvbiAxOTYwMTEpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL29wY29kZV9nZW5lcmF0b3IucmIJKHdvcmtpbmcg
Y29weSkKQEAgLTY4MCw2ICs2ODAsMTggQEAgd3JpdGVIKCJPcGNvZGVVdGlscyIpIHsKICAgICAg
ICAgICAgICAgICBmaWx0ZXIgPSBwcm9jIHsgZmFsc2UgfQogICAgICAgICAgICAgICAgIGNhbGxi
YWNrID0gcHJvYyB7CiAgICAgICAgICAgICAgICAgICAgIHwgZm9ybSB8CisgICAgICAgICAgICAg
ICAgICAgICMgVGhpcyBjb25zZXJ2YXRpdmVseSBzYXlzIHRoYXQgU3RhY2sgaXMgbm90IGEgdmFs
aWQgZm9ybSBmb3IgVXNlQWRkciwKKyAgICAgICAgICAgICAgICAgICAgIyBiZWNhdXNlIGl0J3Mg
b25seSB2YWxpZCBpZiBpdCdzIG5vdCBhIHNwaWxsIHNsb3QuIFRoaXMgaXMgY29uc2lzdGVudCB3
aXRoCisgICAgICAgICAgICAgICAgICAgICMgaXNWYWxpZEZvcm0oKSBiZWluZyBjb25zZXJ2YXRp
dmUgYW5kIGl0IGFsc28gaGFwcGVucyB0byBiZSBwcmFjdGljYWwgc2luY2UKKyAgICAgICAgICAg
ICAgICAgICAgIyB3ZSBkb24ndCByZWFsbHkgdXNlIGlzVmFsaWRGb3JtIGZvciBkZWNpZGluZyB3
aGVuIFN0YWNrIGlzIHNhZmUuCisgICAgICAgICAgICAgICAgICAgIG92ZXJsb2FkLnNpZ25hdHVy
ZS5sZW5ndGgudGltZXMgeworICAgICAgICAgICAgICAgICAgICAgICAgfCBpbmRleCB8CisgICAg
ICAgICAgICAgICAgICAgICAgICBpZiBvdmVybG9hZC5zaWduYXR1cmVbaW5kZXhdLnJvbGUgPT0g
IlVBIgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiaWYgKG9wZ2VuSGlk
ZGVuUHRySWRlbnRpdHkoa2luZHMpWyN7aW5kZXh9XSA9PSBBcmc6OlN0YWNrKSIKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBvdXRwLnB1dHMgIiAgICByZXR1cm4gZmFsc2U7IgorICAgICAg
ICAgICAgICAgICAgICAgICAgZW5kCisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIG5vdEN1c3RvbSA9IChub3QgZm9ybS5raW5k
cy5kZXRlY3QgeyB8IGtpbmQgfCBraW5kLmN1c3RvbSB9KQogICAgICAgICAgICAgICAgICAgICBp
ZiBub3RDdXN0b20KICAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luQXJjaHMob3V0cCwgZm9y
bS5hcmNocykKQEAgLTc4Nyw2ICs3OTksMTEgQEAgd3JpdGVIKCJPcGNvZGVHZW5lcmF0ZWQiKSB7
CiAgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiaWYgKCFBcmc6OmlzVmFsaWRJbW1Gb3Jt
KGFyZ3NbI3tpbmRleH1dLnZhbHVlKCkpKSIKICAgICAgICAgICAgICAgICAgICAgb3V0cC5wdXRz
ICJPUEdFTl9SRVRVUk4oZmFsc2UpOyIKICAgICAgICAgICAgICAgICB3aGVuICJBZGRyIgorICAg
ICAgICAgICAgICAgICAgICBpZiBhcmcucm9sZSA9PSAiVUEiCisgICAgICAgICAgICAgICAgICAg
ICAgICBvdXRwLnB1dHMgImlmIChhcmdzWyN7aW5kZXh9XS5pc1N0YWNrKCkgJiYgYXJnc1sje2lu
ZGV4fV0uc3RhY2tTbG90KCktPmlzU3BpbGwoKSkiCisgICAgICAgICAgICAgICAgICAgICAgICBv
dXRwLnB1dHMgIk9QR0VOX1JFVFVSTihmYWxzZSk7IgorICAgICAgICAgICAgICAgICAgICBlbmQK
KyAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIG91dHAucHV0cyAiaWYg
KCFBcmc6OmlzVmFsaWRBZGRyRm9ybShhcmdzWyN7aW5kZXh9XS5vZmZzZXQoKSkpIgogICAgICAg
ICAgICAgICAgICAgICBvdXRwLnB1dHMgIk9QR0VOX1JFVFVSTihmYWxzZSk7IgogICAgICAgICAg
ICAgICAgIHdoZW4gIkluZGV4IgpAQCAtODM5LDkgKzg1NiwxMSBAQCB3cml0ZUgoIk9wY29kZUdl
bmVyYXRlZCIpIHsKICAgICAgICAgICAgICAgICBudW1ObyA9IDAKICAgICAgICAgICAgICAgICBv
cGNvZGUub3ZlcmxvYWRzLmVhY2ggewogICAgICAgICAgICAgICAgICAgICB8IG92ZXJsb2FkIHwK
KyAgICAgICAgICAgICAgICAgICAgdXNlQWRkciA9IChvdmVybG9hZC5zaWduYXR1cmVbYXJnSW5k
ZXhdIGFuZAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG92ZXJsb2FkLnNpZ25hdHVy
ZVthcmdJbmRleF0ucm9sZSA9PSAiVUEiKQogICAgICAgICAgICAgICAgICAgICBvdmVybG9hZC5m
b3Jtcy5lYWNoIHsKICAgICAgICAgICAgICAgICAgICAgICAgIHwgZm9ybSB8Ci0gICAgICAgICAg
ICAgICAgICAgICAgICBpZiBmb3JtLmtpbmRzW2FyZ0luZGV4XSA9PSAiQWRkciIKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGlmIGZvcm0ua2luZHNbYXJnSW5kZXhdID09ICJBZGRyIiBhbmQgbm90
IHVzZUFkZHIKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBudW1ZZXMgKz0gMQogICAgICAg
ICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bU5v
ICs9IDEKQEAgLTg2NCwxMiArODgzLDE1IEBAIHdyaXRlSCgiT3Bjb2RlR2VuZXJhdGVkIikgewog
ICAgICAgICAgICAgICAgICAgICBvcGNvZGUub3ZlcmxvYWRzLmVhY2ggewogICAgICAgICAgICAg
ICAgICAgICAgICAgfCBvdmVybG9hZCB8CiAKKyAgICAgICAgICAgICAgICAgICAgICAgIHVzZUFk
ZHIgPSAob3ZlcmxvYWQuc2lnbmF0dXJlW2FyZ0luZGV4XSBhbmQKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgb3ZlcmxvYWQuc2lnbmF0dXJlW2FyZ0luZGV4XS5yb2xlID09ICJV
QSIpCisgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICAgICAgICAgICMg
QWdhaW4sIGNoZWNrIGlmIGFsbCBvZiB0aGVtIGRvIHdoYXQgd2Ugd2FudC4KICAgICAgICAgICAg
ICAgICAgICAgICAgIG51bVllcyA9IDAKICAgICAgICAgICAgICAgICAgICAgICAgIG51bU5vID0g
MAogICAgICAgICAgICAgICAgICAgICAgICAgb3ZlcmxvYWQuZm9ybXMuZWFjaCB7CiAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgfCBmb3JtIHwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBpZiBmb3JtLmtpbmRzW2FyZ0luZGV4XSA9PSAiQWRkciIKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBpZiBmb3JtLmtpbmRzW2FyZ0luZGV4XSA9PSAiQWRkciIgYW5kIG5vdCB1c2VBZGRy
CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG51bVllcyArPSAxCiAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgZWxzZQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBu
dW1ObyArPSAxCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYjMvYWlyL3Rlc3RhaXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvdGVzdGFpci5jcHAJ
KHJldmlzaW9uIDE5NjAxMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9iMy9haXIvdGVzdGFp
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwOCw3ICs0MDgsNyBAQCB2b2lkIHRlc3RTaHVmZmxl
QnJvYWRjYXN0QWxsUmVncygpCiAgICAgICAgICAgICBzaHVmZmxlLmFwcGVuZChUbXAoR1BSSW5m
bzo6cmVnVDApLCBUbXAocmVnKSwgQXJnOjp3aWR0aEFyZyhBcmc6OldpZHRoMzIpKTsKICAgICB9
CiAKLSAgICBTdGFja1Nsb3QqIHNsb3QgPSBjb2RlLmFkZFN0YWNrU2xvdChzaXplb2YoaW50MzJf
dCkgKiByZWdzLnNpemUoKSwgQjM6OlN0YWNrU2xvdEtpbmQ6OkxvY2tlZCk7CisgICAgU3RhY2tT
bG90KiBzbG90ID0gY29kZS5hZGRTdGFja1Nsb3Qoc2l6ZW9mKGludDMyX3QpICogcmVncy5zaXpl
KCksIFN0YWNrU2xvdEtpbmQ6OkxvY2tlZCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IHJlZ3Muc2l6ZSgpOyArK2kpCiAgICAgICAgIHJvb3QtPmFwcGVuZChNb3ZlMzIsIG51bGxwdHIs
IFRtcChyZWdzW2ldKSwgQXJnOjpzdGFjayhzbG90LCBpICogc2l6ZW9mKGludDMyX3QpKSk7CiAK
QEAgLTg2OSw3ICs4NjksNyBAQCB2b2lkIHRlc3RTaHVmZmxlU2hpZnRBbGxSZWdzKCkKICAgICBm
b3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgcmVncy5zaXplKCk7ICsraSkKICAgICAgICAgc2h1ZmZs
ZS5hcHBlbmQoVG1wKHJlZ3NbaSAtIDFdKSwgVG1wKHJlZ3NbaV0pLCBBcmc6OndpZHRoQXJnKEFy
Zzo6V2lkdGgzMikpOwogCi0gICAgU3RhY2tTbG90KiBzbG90ID0gY29kZS5hZGRTdGFja1Nsb3Qo
c2l6ZW9mKGludDMyX3QpICogcmVncy5zaXplKCksIEIzOjpTdGFja1Nsb3RLaW5kOjpMb2NrZWQp
OworICAgIFN0YWNrU2xvdCogc2xvdCA9IGNvZGUuYWRkU3RhY2tTbG90KHNpemVvZihpbnQzMl90
KSAqIHJlZ3Muc2l6ZSgpLCBTdGFja1Nsb3RLaW5kOjpMb2NrZWQpOwogICAgIGZvciAodW5zaWdu
ZWQgaSA9IDA7IGkgPCByZWdzLnNpemUoKTsgKytpKQogICAgICAgICByb290LT5hcHBlbmQoTW92
ZTMyLCBudWxscHRyLCBUbXAocmVnc1tpXSksIEFyZzo6c3RhY2soc2xvdCwgaSAqIHNpemVvZihp
bnQzMl90KSkpOwogCkBAIC05MDYsNyArOTA2LDcgQEAgdm9pZCB0ZXN0U2h1ZmZsZVJvdGF0ZUFs
bFJlZ3MoKQogICAgICAgICBzaHVmZmxlLmFwcGVuZChUbXAocmVnc1tpIC0gMV0pLCBUbXAocmVn
c1tpXSksIEFyZzo6d2lkdGhBcmcoQXJnOjpXaWR0aDMyKSk7CiAgICAgc2h1ZmZsZS5hcHBlbmQo
VG1wKHJlZ3MubGFzdCgpKSwgVG1wKHJlZ3NbMF0pLCBBcmc6OndpZHRoQXJnKEFyZzo6V2lkdGgz
MikpOwogCi0gICAgU3RhY2tTbG90KiBzbG90ID0gY29kZS5hZGRTdGFja1Nsb3Qoc2l6ZW9mKGlu
dDMyX3QpICogcmVncy5zaXplKCksIEIzOjpTdGFja1Nsb3RLaW5kOjpMb2NrZWQpOworICAgIFN0
YWNrU2xvdCogc2xvdCA9IGNvZGUuYWRkU3RhY2tTbG90KHNpemVvZihpbnQzMl90KSAqIHJlZ3Mu
c2l6ZSgpLCBTdGFja1Nsb3RLaW5kOjpMb2NrZWQpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCByZWdzLnNpemUoKTsgKytpKQogICAgICAgICByb290LT5hcHBlbmQoTW92ZTMyLCBudWxs
cHRyLCBUbXAocmVnc1tpXSksIEFyZzo6c3RhY2soc2xvdCwgaSAqIHNpemVvZihpbnQzMl90KSkp
OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEIzT3V0cHV0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEIzT3V0cHV0LmNwcAkocmV2
aXNpb24gMTk2MDExKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExCM091dHB1dC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTgxLDggKzgxLDcgQEAgdm9pZCBPdXRwdXQ6OmFwcGVuZFRv
KExCYXNpY0Jsb2NrIGJsb2NrKQogCiBTbG90QmFzZVZhbHVlKiBPdXRwdXQ6OmxvY2tlZFN0YWNr
U2xvdChzaXplX3QgYnl0ZXMpCiB7Ci0gICAgcmV0dXJuIG1fYmxvY2stPmFwcGVuZE5ldzxTbG90
QmFzZVZhbHVlPigKLSAgICAgICAgbV9wcm9jLCBvcmlnaW4oKSwgbV9wcm9jLmFkZFN0YWNrU2xv
dChieXRlcywgU3RhY2tTbG90S2luZDo6TG9ja2VkKSk7CisgICAgcmV0dXJuIG1fYmxvY2stPmFw
cGVuZE5ldzxTbG90QmFzZVZhbHVlPihtX3Byb2MsIG9yaWdpbigpLCBtX3Byb2MuYWRkU3RhY2tT
bG90KGJ5dGVzKSk7CiB9CiAKIExWYWx1ZSBPdXRwdXQ6Om5lZyhMVmFsdWUgdmFsdWUpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAko
cmV2aXNpb24gMTk2MDExKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRG
R1RvTExWTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5NjEsOCArNTk2MSw4IEBAIHByaXZhdGU6
CiAKICAgICAgICAgLy8gU2V0IHNvbWUgb2J2aW91cyB0aGluZ3MuCiAgICAgICAgIHBhdGNocG9p
bnQtPmVmZmVjdHMudGVybWluYWwgPSBmYWxzZTsKLSAgICAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0
cy53cml0ZXNTU0FTdGF0ZSA9IGZhbHNlOwotICAgICAgICBwYXRjaHBvaW50LT5lZmZlY3RzLnJl
YWRzU1NBU3RhdGUgPSBmYWxzZTsKKyAgICAgICAgcGF0Y2hwb2ludC0+ZWZmZWN0cy53cml0ZXNM
b2NhbFN0YXRlID0gZmFsc2U7CisgICAgICAgIHBhdGNocG9pbnQtPmVmZmVjdHMucmVhZHNMb2Nh
bFN0YXRlID0gZmFsc2U7CiAgICAgICAgIAogICAgICAgICAvLyBUaGlzIGlzIGhvdyB3ZSB0ZWxs
IEIzIGFib3V0IHRoZSBwb3NzaWJpbGl0eSBvZiBqdW1wIHJlcGxhY2VtZW50LgogICAgICAgICBw
YXRjaHBvaW50LT5lZmZlY3RzLmV4aXRzU2lkZXdheXMgPSB0cnVlOwpJbmRleDogV2Vic2l0ZXMv
d2Via2l0Lm9yZy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vic2l0ZXMvd2Via2l0Lm9yZy9D
aGFuZ2VMb2cJKHJldmlzaW9uIDE5NjAxMSkKKysrIFdlYnNpdGVzL3dlYmtpdC5vcmcvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTUgQEAKKzIwMTYtMDItMDEgIEZpbGlwIFBp
emxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBHZXQgcmlkIG9mIGFub255bW91cyBz
dGFjayBzbG90cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTUxMTI4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgVGhpcyBjaGFuZ2VzIHRoZSBkb2N1bWVudGF0aW9uIHRvIGFjY291bnQgZm9yIHRoZSBhZGRp
dGlvbiBvZiBWYXJpYWJsZXMgYW5kIHRoZSBHZXQgYW5kIFNldAorICAgICAgICBvcGNvZGVzLCBh
bmQgdGhlIHJlbW92YWwgb2YgYW5vbnltb3VzIHN0YWNrIHNsb3RzIGZyb20gQjMgSVIuCisKKyAg
ICAgICAgKiBkb2NzL2IzL2ludGVybWVkaWF0ZS1yZXByZXNlbnRhdGlvbi5odG1sOgorCiAyMDE2
LTAyLTAyICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgTWlub3Ig
Zml4ZXMgZm9yIEIzIElSIGRvY3VtZW50YXRpb24KSW5kZXg6IFdlYnNpdGVzL3dlYmtpdC5vcmcv
ZG9jcy9iMy9pbnRlcm1lZGlhdGUtcmVwcmVzZW50YXRpb24uaHRtbAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJzaXRlcy93ZWJraXQub3JnL2RvY3MvYjMvaW50ZXJtZWRpYXRlLXJlcHJlc2VudGF0aW9uLmh0
bWwJKHJldmlzaW9uIDE5NjAxMSkKKysrIFdlYnNpdGVzL3dlYmtpdC5vcmcvZG9jcy9iMy9pbnRl
cm1lZGlhdGUtcmVwcmVzZW50YXRpb24uaHRtbAkod29ya2luZyBjb3B5KQpAQCAtODUsNyArODUs
NyBAQAogICAgICAgZm9yIHRoZSBsb2FkLiAgV2UgdXNlIHRoZSBNZW1vcnlWYWx1ZSBjbGFzcyBm
b3IgbWVtb3J5LWFjY2Vzc2luZyB2YWx1ZXMsIHdoaWNoIGFsbCBoYXZlCiAgICAgICBzdWNoIGFu
IG9mZnNldC48L3A+CiAKLSAgICA8aDI+U3RhY2sgU2xvdDwvaDI+CisgICAgPGgyPlN0YWNrIFNs
b3RzPC9oMj4KIAogICAgIDxwPkIzIGV4cG9zZXMgdGhlIGNvbmNlcHQgb2Ygc3RhY2stYWxsb2Nh
dGVkIGRhdGEgYW5kIGdpdmVzIHRoZSBjbGllbnQgYSBsb3Qgb2YgY29udHJvbC4KICAgICAgIEJ5
IGRlZmF1bHQsIHN0YWNrIHNsb3RzIGdldCBhbGxvY2F0ZWQgd2hlcmV2ZXIgQjMgY2hvb3Nlcy4g
SXQgd2lsbCB0cnkgdG8gcGFjayB0aGVtIGFzCkBAIC05OSwyNCArOTksMjMgQEAKICAgICAgIGZv
ciBjYWxsZWUtc2F2ZXMuICBUaGVyZWZvcmUsIHdlIHJlY29tbWVuZCBub3QgdXNpbmcgdGhlIGZy
YW1lIHBvaW50ZXIgb2Zmc2V0IGZvcmNpbmcKICAgICAgIGZlYXR1cmUgdW5sZXNzIHlvdSBrbm93
IGEgbG90IGFib3V0IHRoZSBBQkkgYW5kIHlvdSBoYXZlIG5vIG90aGVyIGNob2ljZS48L3A+CiAK
LSAgICA8cD5TdGFjayBzbG90cyBhcmUgYWxzbyB1c2VkIGZvciBjcmVhdGluZyBub24tU1NBIHZh
cmlhYmxlcyB3aXRoIHRoZSBpbnRlbnRpb24gb2YgaGF2aW5nIEIzCi0gICAgICBjb252ZXJ0IHRo
ZW0gaW50byBTU0EuICBUaGVyZSBhcmUgdHdvIGtpbmRzIG9mIHN0YWNrIHNsb3RzLjwvcD4KKyAg
ICA8aDI+VmFyaWFibGVzPC9oMj4KIAotICAgIDxkbD4KLSAgICAgIDxkdD5Bbm9ueW1vdXM8L2R0
PgotICAgICAgPGRkPkFub255bW91cyBzdGFjayBzbG90cyBhcmUgdXNlZCB0byByZXByZXNlbnQg
bG9jYWwgdmFyaWFibGVzIHRoYXQgYXJlbid0IGluIFNTQSBmb3JtLgotICAgICAgICBCMyBpcyBh
bGxvd2VkIHRvIGFzc3VtZSB0aGF0IG5vYm9keSB3aWxsIHN0b3JlIHRvIGFuIGFub255bW91cyBz
dGFjayBzbG90IGV4Y2VwdCB0aHJvdWdoCi0gICAgICAgIFN0b3JlIGluc3RydWN0aW9ucyBpbiB0
aGUgQjMgcHJvY2VkdXJlLiAgQjMgaXMgYWxsb3dlZCB0byBhc3N1bWUgdGhhdCBhIFN0b3JlIHRo
YXQgZG9lcwotICAgICAgICBub3Qgd3JpdGUgdG8gdGhlIGVudGlyZSBhbm9ueW1vdXMgc3RhY2sg
c2xvdCBsZWF2ZXMgdGhlIHVud3JpdHRlbiBwYXJ0IGluIGFuIHVuZGVmaW5lZAotICAgICAgICBz
dGF0ZS4gIFVzdWFsbHksIGFub255bW91cyBzdGFjayBzbG90cyBhcmUgYWxsb2NhdGVkIHRvIGhh
dmUgdGhlIHNhbWUgc2l6ZSBhcyB0aGUgdHlwZQotICAgICAgICBvZiB2YXJpYWJsZSB0aGV5IGFy
ZSBiZWluZyB1c2VkIHRvIHJlcHJlc2VudC48L2RkPgotCi0gICAgICA8ZHQ+TG9ja2VkPC9kdD4K
LSAgICAgIDxkZD5UaGVzZSBzdGFjayBzbG90cyBhcmUgYXNzdW1lZCB0byBvcGVyYXRlICJhcyBp
ZiIgdGhleSB3ZXJlIGluIHRoZSBoZWFwLCBpbiB0aGUgc2Vuc2UKLSAgICAgICAgdGhhdCB0aGUg
bWF5IGdldCByZWFkIG9yIHdyaXR0ZW4gdXNpbmcgb3BlcmF0aW9ucyBub3QgdmlzaWJsZSBpbiBC
MyBJUi48L2RkPgotICAgIDwvZGw+CisgICAgPHA+U29tZXRpbWVzLCBTU0EgaXMgaW5jb252ZW5p
ZW50LiBGb3IgZXhhbXBsZSwgaXQncyBoYXJkIHRvIGRvIHBhdGggc3BlY2lhbGl6YXRpb24gb3Zl
ciBTU0EuCisgICAgICBCMyBoYXMgdGhlIGNvbmNlcHQgb2YgVmFyaWFibGVzIGFzIGEgZmFsbC1i
YWNrLiBUaGUgYmFja2VuZCBrbm93cyBob3cgdG8gaGFuZGxlIHRoZW0gYW5kCisgICAgICB3aWxs
IGNvYWxlc2NlIGFuZCBjb3B5LXByb3BhZ2F0ZSB0aGVtLiBJbnNpZGUgdGhlIEIzIG9wdGltaXpl
ciwgdGhlcmUgaXMgYSBjbGFzc2ljIFNTQQorICAgICAgYnVpbGRlciB0aGF0IGVsaW1pbmF0ZXMg
dmFyaWFibGVzIGFuZCBidWlsZHMgU1NBIGluIHRoZWlyIHBsYWNlLjwvcD4KKworICAgIDxwPllv
dSBjYW4gY3JlYXRlIFZhcmlhYmxlcyBieSB1c2luZyBQcm9jZWR1cmU6OmFkZFZhcmlhYmxlKCks
IGFuZCB0aGVuIHlvdSBjYW4gYWNjZXNzIHRoZW0KKyAgICAgIHVzaW5nIHRoZSBHZXQgYW5kIFNl
dCBvcGNvZGVzLjwvcD4KKworICAgIDxwPlRoZSBmaXhTU0EoKSBwaGFzZSB3aWxsIGNvbnZlcnQg
dmFyaWFibGVzIHRvIFNTQS4gSWYgeW91IHVzZSBhIGxvdCBvZiB2YXJpYWJsZXMgaW4geW91cgor
ICAgICAgaW5wdXQgdG8gQjMsIGl0J3MgYSBnb29kIGlkZWEgdG8gcnVuIGZpeFNTQSgpIG1hbnVh
bGx5IGJlZm9yZSBydW5uaW5nIHRoZSBjb21waWxlci4gVGhlCisgICAgICBkZWZhdWx0IG9wdGlt
aXplciBvbmx5IHJ1bnMgZml4U1NBKCkgdG93YXJkcyB0aGUgbWlkZGxlIG9mIG9wdGltaXphdGlv
bnMuIFBhc3Npbmcgbm9uLVNTQSBjb2RlCisgICAgICBhcyBpbnB1dCB0byB0aGUgb3B0aW1pemVy
IG1heSByZW5kZXIgdGhlIGVhcmx5IHBoYXNlcyBpbmVmZmVjdGl2ZS4gRm9ydHVuYXRlbHksIEIz
IHBoYXNlcworICAgICAgYXJlIHN1cGVyIGVhc3kgdG8gcnVuLiBUaGUgZm9sbG93aW5nIHJ1bnMg
U1NBIGZpeC11cCBvbiBhIFByb2NlZHVyZSBuYW1lZCAicHJvYyI6PC9wPgogCi0gICAgPHA+VGhl
IGZpeFNTQSgpIHBoYXNlIHdpbGwgY29udmVydCBhbm9ueW1vdXMgc3RhY2sgc2xvdHMgdG8gU1NB
LjwvcD4KKyAgICA8cHJlPjxjb2RlPmZpeFNTQShwcm9jKTs8L2NvZGU+PC9wcmU+CiAKICAgICA8
aDI+Q29udHJvbCBmbG93PC9oMj4KIApAQCAtMTc2LDYgKzE3NSwxMyBAQAogICAgICAgPGR0PkRv
dWJsZSBDb25zdERvdWJsZShjb25zdGFudCk8L2R0PgogICAgICAgPGRkPkRvdWJsZSBjb25zdGFu
dC4gIE11c3QgdXNlIHRoZSBDb25zdERvdWJsZVZhbHVlIGNsYXNzLCB3aGljaCBoYXMgc3BhY2Ug
Zm9yIHRoZSBkb3VibGUgY29uc3RhbnQuPC9kZD4KIAorICAgICAgPGR0PlZvaWQgU2V0KHZhbHVl
LCB2YXJpYWJsZSk8L2R0PgorICAgICAgPGRkPkFzc2lnbnMgdGhlIGdpdmVuIHZhbHVlIHRvIHRo
ZSBnaXZlbiBWYXJpYWJsZS4gTXVzdCB1c2UgdGhlIFZhcmlhYmxlVmFsdWUgY2xhc3MuPC9kZD4K
KworICAgICAgPGR0PlQgR2V0KHZhcmlhYmxlKTwvZHQ+CisgICAgICA8ZGQ+UmV0dXJucyB0aGUg
Y3VycmVudCB2YWx1ZSBvZiB0aGUgZ2l2ZW4gVmFyaWFibGUuIEl0cyByZXR1cm4gdHlwZSBkZXBl
bmRzIG9uIHRoZQorICAgICAgICB2YXJpYWJsZS4gTXVzdCB1c2UgdGhlIFZhcmlhYmxlVmFsdWUg
Y2xhc3MuPC9kZD4KKwogICAgICAgPGR0PkludFB0ciBTbG90QmFzZShzdGFja1Nsb3QpPC9kdD4K
ICAgICAgIDxkZD5SZXR1cm5zIGEgcG9pbnRlciB0byB0aGUgYmFzZSBvZiB0aGUgZ2l2ZW4gc3Rh
Y2sgc2xvdC4gIE11c3QgdXNlIHRoZSBTbG90QmFzZVZhbHVlCiAgICAgICAgIGNsYXNzLjwvZGQ+
Cg==
</data>
<flag name="review"
          id="295331"
          type_id="1"
          status="+"
          setter="mark.lam"
    />
          </attachment>
      

    </bug>

</bugzilla>