<?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>117047</bug_id>
          
          <creation_ts>2013-05-30 14:52:27 -0700</creation_ts>
          <short_desc>fourthTier: get rid of op_call_put_result</short_desc>
          <delta_ts>2013-05-31 14:38:12 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>117048</dependson>
          <blocked>117046</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenberg</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>895685</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-05-30 14:52:27 -0700</bug_when>
    <thetext>This opcode is super annoying and already introduces a lot of cruft, and would introduce even more cruft if we wanted to have calls forward exit on the return result.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>895759</commentid>
    <comment_count>1</comment_count>
      <attachid>203404</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-05-30 18:45:38 -0700</bug_when>
    <thetext>Created attachment 203404
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>895773</commentid>
    <comment_count>2</comment_count>
      <attachid>203407</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-05-30 20:53:00 -0700</bug_when>
    <thetext>Created attachment 203407
the patch

Ummm, I think it actually works.

Will mark r? once I run more tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>895784</commentid>
    <comment_count>3</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-05-30 23:34:57 -0700</bug_when>
    <thetext>Perf results.  Note the ERROR&apos;s are due to the fact that I&apos;m running benchmarks that include imul tests and we don&apos;t yet have imul on the branch.


Benchmark report for SunSpider, V8Spider, Octane, Kraken, and JSRegress on oldmac (MacPro4,1).

VMs tested:
&quot;Old&quot; at /Volumes/Data/pizlo/fourthTier/secondary/OpenSource/WebKitBuild/Release/jsc (r150814)
&quot;TipOfTree&quot; at /Volumes/Data/pizlo/fourthTier/OpenSource/WebKitBuild/Release/jsc (r151005)
&quot;NoPutResult&quot; at /Volumes/Data/fromMiniMe/fourthTier/secondary/OpenSource/WebKitBuild/Release/jsc (r151005)

Collected 12 samples per benchmark/VM, with 4 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.

                                                        Old                    TipOfTree                NoPutResult              NoPutResult v. Old    
SunSpider:
   3d-cube                                         6.6535+-0.1080     ?      6.6956+-0.1006     ?      6.7724+-0.0967        ? might be 1.0179x slower
   3d-morph                                        8.6314+-0.1150            8.5481+-0.1144     ?      8.5554+-0.0970        
   3d-raytrace                                     8.3986+-0.1182            8.3730+-0.1248     ?      8.4754+-0.1052        ?
   access-binary-trees                             1.8148+-0.0091     ?      1.8230+-0.0098     ?      1.8395+-0.0302        ? might be 1.0136x slower
   access-fannkuch                                 7.5747+-0.0767            7.5201+-0.0754     ?      7.5504+-0.0767        
   access-nbody                                    3.9975+-0.0143            3.9974+-0.0159            3.9945+-0.0173        
   access-nsieve                                   4.7958+-0.0668     ?      4.8517+-0.0385            4.8301+-0.0815        ?
   bitops-3bit-bits-in-byte                        1.7782+-0.0185     ?      1.7808+-0.0183     ?      1.7838+-0.0193        ?
   bitops-bits-in-byte                             6.6733+-0.0652            6.6390+-0.1184     ?      6.6586+-0.0688        
   bitops-bitwise-and                              2.7999+-0.0100            2.7882+-0.0394     ?      2.7974+-0.0530        
   bitops-nsieve-bits                              4.5089+-0.0179            4.4886+-0.0249     ?      4.5027+-0.0209        
   controlflow-recursive                           2.9735+-0.0240     ?      2.9777+-0.0278     ?      2.9785+-0.0190        ?
   crypto-aes                                      5.1963+-0.0545     ?      5.3462+-0.1701            5.2084+-0.0574        ?
   crypto-md5                                      3.0288+-0.0216     ?      3.0455+-0.0278     !      3.1139+-0.0209        ! definitely 1.0281x slower
   crypto-sha1                                     2.8191+-0.0205     ?      2.8445+-0.0245            2.8319+-0.0167        ?
   date-format-tofte                              15.1209+-0.3383     ^     14.5888+-0.1936     ?     14.6945+-0.2206          might be 1.0290x faster
   date-format-xparb                               8.4504+-0.1433            8.3948+-0.1525     ?      8.5188+-0.2789        ?
   math-cordic                                     3.9364+-0.0350            3.9317+-0.0149     ?      3.9414+-0.0103        ?
   math-partial-sums                              12.5103+-0.5892           12.2258+-0.1096     ?     12.2782+-0.1317          might be 1.0189x faster
   math-spectral-norm                              2.7130+-0.0113            2.7115+-0.0142     ?      2.7152+-0.0117        ?
   regexp-dna                                     12.6400+-0.1980     ?     12.6776+-0.2321     ?     12.6894+-0.2061        ?
   string-base64                                   5.1097+-0.0523            5.0605+-0.0463            5.0448+-0.0535          might be 1.0129x faster
   string-fasta                                   10.7894+-0.1804     ?     10.8082+-0.1854     ?     10.8321+-0.0750        ?
   string-tagcloud                                14.1859+-0.1894     ?     14.4240+-0.1877           14.1942+-0.2279        ?
   string-unpack-code                             28.0377+-0.1223     ?     28.5989+-0.7402           27.8756+-0.0768        
   string-validate-input                           6.4255+-0.1258     ?      6.4572+-0.1224     ?      6.5315+-0.1174        ? might be 1.0165x slower

   &lt;arithmetic&gt; *                                  7.3678+-0.0456     ?      7.3692+-0.0581            7.3542+-0.0434          might be 1.0019x faster
   &lt;geometric&gt;                                     5.8162+-0.0281     ?      5.8171+-0.0328     ?      5.8251+-0.0273        ? might be 1.0015x slower
   &lt;harmonic&gt;                                      4.6851+-0.0172     ?      4.6911+-0.0187     ?      4.7036+-0.0180        ? might be 1.0039x slower

                                                        Old                    TipOfTree                NoPutResult              NoPutResult v. Old    
V8Spider:
   crypto                                         79.5999+-0.1131     ?     80.1268+-0.6305           79.6533+-0.2467        ?
   deltablue                                     104.4109+-0.4449     ?    104.4992+-0.3730          104.2262+-0.6542        
   earley-boyer                                   68.7674+-0.2412     ?     69.1753+-0.1873     ?     69.5945+-0.3177        ! definitely 1.0120x slower
   raytrace                                       38.0493+-0.5400           38.0490+-0.2001     ?     38.3333+-0.3513        ?
   regexp                                        100.2842+-0.7579          100.1899+-0.7430     ?    100.3337+-0.3103        ?
   richards                                      113.4608+-2.3814          112.0722+-1.0841          111.6164+-0.6316          might be 1.0165x faster
   splay                                          46.9532+-0.3133     ?     47.0801+-0.2987           46.9297+-0.2747        

   &lt;arithmetic&gt;                                   78.7894+-0.5301           78.7418+-0.2662           78.6696+-0.1686          might be 1.0015x faster
   &lt;geometric&gt; *                                  73.5214+-0.4755     ?     73.5537+-0.2354           73.5447+-0.1648        ? might be 1.0003x slower
   &lt;harmonic&gt;                                     67.9210+-0.4657     ?     68.0019+-0.2268     ?     68.0626+-0.1977        ? might be 1.0021x slower

                                                        Old                    TipOfTree                NoPutResult              NoPutResult v. Old    
Octane and V8v7:
   encrypt                                        0.46622+-0.00044          0.46614+-0.00052    ?     0.46628+-0.00026       ?
   decrypt                                        8.62112+-0.00980          8.61611+-0.00909    ?     8.63680+-0.01811       ?
   deltablue                             x2       0.56435+-0.00276    !     0.57258+-0.00265          0.56820+-0.00253       ?
   earley                                         0.88733+-0.00351    ?     0.89108+-0.00355    ^     0.87417+-0.00575       ^ definitely 1.0151x faster
   boyer                                         12.67169+-0.02730    !    12.76018+-0.04080    !    12.90848+-0.03943       ! definitely 1.0187x slower
   raytrace                              x2       4.57569+-0.05269          4.51537+-0.03864          4.49072+-0.03367         might be 1.0189x faster
   regexp                                x2      32.40796+-0.14123    ?    32.78847+-0.26496         32.31919+-0.50411       
   richards                              x2       0.30530+-0.00054    ?     0.30761+-0.00219    ?     0.30962+-0.00386       ? might be 1.0142x slower
   splay                                 x2       0.65602+-0.03425          0.64842+-0.02002          0.63645+-0.02031         might be 1.0308x faster
   navier-stokes                         x2      10.77567+-0.00561    ?    10.77803+-0.00884         10.77514+-0.00548       
   closure                                        0.31782+-0.03429          0.31726+-0.03412    ?     0.31864+-0.03455       ?
   jquery                                         4.51685+-0.55684    ?     4.57163+-0.56993          4.52117+-0.55117       ?
   gbemu                                 x2     254.33748+-16.67935   ?   258.51785+-15.65073       251.77810+-15.04515        might be 1.0102x faster
   box2d                                 x2      32.26507+-0.17146         32.16145+-0.47057    ?    32.43132+-0.29840       ?

V8v7:
   &lt;arithmetic&gt;                                   7.57602+-0.01653    ?     7.62216+-0.03561          7.56777+-0.06304         might be 1.0011x faster
   &lt;geometric&gt; *                                  2.42874+-0.01570    ?     2.43357+-0.01052          2.42061+-0.01216         might be 1.0034x faster
   &lt;harmonic&gt;                                     0.92432+-0.00831    ?     0.92825+-0.00541          0.92461+-0.00547       ? might be 1.0003x slower

Octane including V8v7:
   &lt;arithmetic&gt;                                  31.78437+-1.53555    ?    32.19100+-1.45140         31.56105+-1.36434         might be 1.0071x faster
   &lt;geometric&gt; *                                  4.39056+-0.05316    ?     4.40468+-0.06139          4.37920+-0.05896         might be 1.0026x faster
   &lt;harmonic&gt;                                     1.05632+-0.01400    ?     1.06015+-0.01643          1.05729+-0.01697       ? might be 1.0009x slower

                                                        Old                    TipOfTree                NoPutResult              NoPutResult v. Old    
Kraken:
   ai-astar                                       492.433+-0.691            491.737+-0.386      !     493.012+-0.191         ?
   audio-beat-detection                           242.574+-0.631            242.082+-0.551      ?     242.831+-1.251         ?
   audio-dft                                      313.189+-5.606            309.304+-0.573      ^     307.554+-0.557           might be 1.0183x faster
   audio-fft                                      143.351+-0.116            143.186+-0.166            143.159+-0.113         
   audio-oscillator                               231.699+-0.615      ?     232.551+-0.635            232.209+-0.546         ?
   imaging-darkroom                               290.363+-0.721      ?     290.799+-0.772            290.334+-1.034         
   imaging-desaturate                             159.977+-0.140            159.957+-0.112      ?     159.969+-0.127         
   imaging-gaussian-blur                          403.014+-0.129      ^     401.810+-0.636            401.808+-0.275         ^ definitely 1.0030x faster
   json-parse-financial                            82.098+-1.231      ^      80.220+-0.366             80.090+-0.269         ^ definitely 1.0251x faster
   json-stringify-tinderbox                       101.032+-0.178            100.618+-0.360            100.455+-0.235         ^ definitely 1.0058x faster
   stanford-crypto-aes                             93.736+-0.546      ?      94.227+-0.889      ^      93.003+-0.311         
   stanford-crypto-ccm                            100.708+-2.583      ?     101.063+-2.574             99.964+-2.500         
   stanford-crypto-pbkdf2                         270.784+-1.579      ?     271.848+-5.235            267.766+-0.801         ^ definitely 1.0113x faster
   stanford-crypto-sha256-iterative               116.401+-0.653            115.583+-0.575      ?     115.728+-0.514         

   &lt;arithmetic&gt; *                                 217.240+-0.545            216.785+-0.409            216.277+-0.349         ^ definitely 1.0045x faster
   &lt;geometric&gt;                                    185.549+-0.594            185.065+-0.499            184.486+-0.476           might be 1.0058x faster
   &lt;harmonic&gt;                                     159.461+-0.700            158.872+-0.625            158.265+-0.586           might be 1.0076x faster

                                                        Old                    TipOfTree                NoPutResult              NoPutResult v. Old    
JSRegress:
   adapt-to-double-divide                         22.5762+-0.0774     ?     22.6472+-0.1011           22.6213+-0.1338        ?
   aliased-arguments-getbyval                      0.8336+-0.0074     ?      0.8360+-0.0075     ?      0.8383+-0.0084        ?
   allocate-big-object                             2.4713+-0.0230     ?      2.4815+-0.0237            2.4644+-0.0249        
   arity-mismatch-inlining                         0.7853+-0.0213            0.7835+-0.0202            0.7782+-0.0238        
   array-access-polymorphic-structure              6.7576+-0.0836     ?      6.7612+-0.0903     ?      6.8380+-0.0975        ? might be 1.0119x slower
   array-nonarray-polymorhpic-access             207.8595+-6.5279          202.3718+-2.3091     ?    204.0461+-2.9246          might be 1.0187x faster
   array-with-double-add                           5.8959+-0.0738            5.8250+-0.0669     ?      5.8837+-0.0723        
   array-with-double-increment                     4.1215+-0.0544     ?      4.1567+-0.0540     ?      4.1584+-0.0673        ?
   array-with-double-mul-add                       7.1401+-0.0700            7.1257+-0.0779     ^      6.6711+-0.0761        ^ definitely 1.0703x faster
   array-with-double-sum                           7.9967+-0.0830            7.8883+-0.0835     ?      7.9378+-0.0895        
   array-with-int32-add-sub                       10.5138+-0.0746           10.4969+-0.0690     ?     10.5676+-0.0996        ?
   array-with-int32-or-double-sum                  7.9902+-0.0906     ?      8.0118+-0.0967     ?      8.1422+-0.1262        ? might be 1.0190x slower
   big-int-mul                                     4.8199+-0.0368     ?      4.8457+-0.0206            4.8333+-0.0642        ?
   boolean-test                                    4.3804+-0.0785     ?      4.4156+-0.0613            4.4090+-0.0646        ?
   branch-fold                                    17.0757+-0.3718     ^     16.1490+-0.0804     ?     16.3992+-0.4156          might be 1.0413x faster
   cast-int-to-double                             13.9414+-0.1029           13.9163+-0.1190     ?     14.1077+-0.2389        ? might be 1.0119x slower
   cell-argument                                  14.4546+-0.1141     ?     14.4594+-0.1388           14.3951+-0.0702        
   cfg-simplify                                    4.0211+-0.0368            3.9941+-0.0492            3.9787+-0.0570          might be 1.0106x faster
   cmpeq-obj-to-obj-other                         10.8782+-0.1801     !     11.8703+-0.5147           11.2366+-0.3491        ? might be 1.0329x slower
   constant-test                                   8.5379+-0.1472     ?      8.6023+-0.0727            8.5584+-0.0711        ?
   direct-arguments-getbyval                       0.7318+-0.0088            0.7303+-0.0125     ?      0.7447+-0.0213        ? might be 1.0176x slower
   double-pollution-getbyval                      10.8326+-0.0895     ?     10.9629+-0.1685           10.8042+-0.0661        
   double-pollution-putbyoffset                    5.0109+-0.0943     ?      5.1184+-0.0614     ^      4.9870+-0.0689        
   empty-string-plus-int                          10.7581+-0.1706     ?     10.9524+-0.1720           10.9178+-0.1782        ? might be 1.0148x slower
   external-arguments-getbyval                     1.9948+-0.0162     ^      1.9356+-0.0153            1.9216+-0.0101        ^ definitely 1.0381x faster
   external-arguments-putbyval                     3.1478+-0.0185     ?      3.1742+-0.0445            3.1564+-0.0251        ?
   Float32Array-matrix-mult                       13.7436+-0.1504     ?     13.8056+-0.1448     ^     13.5224+-0.0878          might be 1.0164x faster
   fold-double-to-int                             22.1622+-0.2652           21.8627+-0.2053     !     22.5390+-0.4039        ? might be 1.0170x slower
   function-dot-apply                              3.1126+-0.0102            3.1097+-0.0130     ?      3.1292+-0.0382        ?
   function-test                                   5.1201+-0.0649     ?      5.1589+-0.0485     ^      4.9417+-0.1420          might be 1.0361x faster
   get-by-id-chain-from-try-block                  6.7039+-0.1597     ?      6.8023+-0.1716            6.7830+-0.2125        ? might be 1.0118x slower
   HashMap-put-get-iterate-keys                   90.5277+-0.9546           89.4717+-0.5557     ?     90.2414+-0.6297        
   HashMap-put-get-iterate                        93.5986+-0.7505     ^     91.8632+-0.2226     !     93.0493+-0.6508        
   HashMap-string-put-get-iterate                 71.6259+-1.4979     ?     72.1890+-0.3875     ?     73.2416+-0.7631        ? might be 1.0226x slower
   imul-double-only                                    ERROR                     ERROR                     ERROR             
   imul-int-only                                       ERROR                     ERROR                     ERROR             
   imul-mixed                                          ERROR                     ERROR                     ERROR             
   indexed-properties-in-objects                   4.3950+-0.0464     ?      4.4272+-0.0239            4.3589+-0.0651        
   inline-arguments-access                         1.2525+-0.0135            1.2506+-0.0136     ?      1.2511+-0.0123        
   inline-arguments-local-escape                  24.9936+-0.5217     ^     23.5702+-0.2825           23.4357+-0.2754        ^ definitely 1.0665x faster
   inline-get-scoped-var                           6.5059+-0.0683     ?      6.6443+-0.1054     ?      6.6559+-0.2375        ? might be 1.0230x slower
   inlined-put-by-id-transition                   16.3898+-0.1814           16.2233+-0.2554           16.1655+-0.2775          might be 1.0139x faster
   int-or-other-abs-then-get-by-val                8.9088+-0.1471     ?      8.9847+-0.1066     ?      9.0108+-0.1208        ? might be 1.0115x slower
   int-or-other-abs-zero-then-get-by-val          37.8294+-0.6763           37.4967+-0.4252           37.0609+-0.1049          might be 1.0207x faster
   int-or-other-add-then-get-by-val               10.2244+-0.0997           10.2060+-0.1083           10.1682+-0.0797        
   int-or-other-add                               10.5201+-0.1252     ?     10.5730+-0.1053           10.5035+-0.0597        
   int-or-other-div-then-get-by-val                6.3850+-0.0931     ?      6.3931+-0.0932     ?      6.6487+-0.4866        ? might be 1.0413x slower
   int-or-other-max-then-get-by-val                7.2618+-0.0956     ?      7.3325+-0.0859            7.2591+-0.0857        
   int-or-other-min-then-get-by-val                7.3012+-0.0941     ?      7.4177+-0.1100            7.3627+-0.0845        ?
   int-or-other-mod-then-get-by-val                6.0422+-0.0752     !      6.1944+-0.0544            6.1767+-0.0790        ? might be 1.0223x slower
   int-or-other-mul-then-get-by-val                6.5143+-0.0855            6.5069+-0.0866            6.4413+-0.0783          might be 1.0113x faster
   int-or-other-neg-then-get-by-val                8.0419+-0.0889     ?      8.1013+-0.0876            8.0565+-0.1097        ?
   int-or-other-neg-zero-then-get-by-val          36.6347+-0.2937     ?     37.0283+-0.3624           36.6935+-0.3524        ?
   int-or-other-sub-then-get-by-val               10.2278+-0.0931           10.1618+-0.0805     ?     10.2376+-0.1089        ?
   int-or-other-sub                                8.2662+-0.0903            8.1862+-0.0892     ?      8.2597+-0.0886        
   int-overflow-local                             11.7784+-0.1114           11.7768+-0.1269     ?     11.8154+-0.1779        ?
   Int16Array-bubble-sort                         49.1390+-0.1670     ?     49.7268+-0.7294           49.1705+-0.1316        ?
   Int16Array-load-int-mul                         1.9204+-0.0115     ?      1.9229+-0.0105            1.9208+-0.0112        ?
   Int8Array-load                                  4.8205+-0.0545     ?      4.8376+-0.0406            4.7812+-0.0618        
   integer-divide                                 15.4147+-0.1841           15.3208+-0.1190     ?     15.3542+-0.2200        
   integer-modulo                                  1.9946+-0.0155            1.9896+-0.0193            1.9503+-0.0205        ^ definitely 1.0227x faster
   make-indexed-storage                            3.7472+-0.0527            3.7421+-0.0538     ?      3.7687+-0.0243        ?
   method-on-number                               25.6686+-0.4388           25.5012+-0.4515     ?     25.5279+-0.3596        
   negative-zero-divide                            0.3310+-0.0169            0.3310+-0.0174            0.3308+-0.0170        
   negative-zero-modulo                            0.3232+-0.0216     ?      0.3242+-0.0223     ?      0.3257+-0.0235        ?
   negative-zero-negate                            0.3115+-0.0215            0.3095+-0.0224     ?      0.3106+-0.0217        
   nested-function-parsing-random                383.2892+-12.9495    ?    388.7289+-13.4648         381.0032+-13.2147       
   nested-function-parsing                        47.8588+-0.9464           47.5097+-1.0296     ?     47.8813+-1.0327        ?
   new-array-buffer-dead                           3.6445+-0.0118     ?      3.6551+-0.0184     ?      3.6572+-0.0191        ?
   new-array-buffer-push                          10.1421+-0.1879           10.1272+-0.1281     ?     10.2785+-0.1782        ? might be 1.0134x slower
   new-array-dead                                 28.3738+-0.1000     ?     28.4151+-0.1079           28.2972+-0.0763        
   new-array-push                                  6.7753+-0.0950     ?      6.8627+-0.0783            6.8513+-0.0593        ? might be 1.0112x slower
   number-test                                     4.3587+-0.0647            4.3509+-0.0691            4.3288+-0.0561        
   object-closure-call                            11.2263+-2.0129     ?     11.2572+-2.0156     ?     12.2579+-1.9022        ? might be 1.0919x slower
   object-test                                     4.8034+-0.0557            4.7623+-0.0596     !      4.9700+-0.0680        ! definitely 1.0347x slower
   poly-stricteq                                  92.3890+-0.7109           91.9303+-0.1186     ?     92.1627+-0.2971        
   polymorphic-structure                          20.9760+-0.2089           20.7694+-0.0732     ?     20.8229+-0.0292        
   polyvariant-monomorphic-get-by-id              12.5252+-0.0787     ?     12.5837+-0.1104           12.4897+-0.0691        
   rare-osr-exit-on-local                         20.0501+-0.1181           20.0330+-0.1170     ?     20.0477+-0.0897        
   register-pressure-from-osr                     31.2491+-0.0690     ?     31.3009+-0.0977           31.2648+-0.0794        ?
   simple-activation-demo                         34.3182+-0.1302           34.3074+-0.1367     ?     34.8127+-0.6267        ? might be 1.0144x slower
   slow-array-profile-convergence                  3.8953+-0.0220            3.8472+-0.0379     ?      3.8734+-0.0254        
   slow-convergence                                3.4199+-0.0146            3.4190+-0.0112     ?      3.4282+-0.0180        ?
   sparse-conditional                              1.3145+-0.0198     ?      1.3203+-0.0199            1.3168+-0.0198        ?
   splice-to-remove                               49.3856+-0.2152     ?     49.7578+-0.2192     ?     50.2562+-0.4271        ! definitely 1.0176x slower
   string-concat-object                            2.7073+-0.0474     ?      2.7408+-0.0640            2.7345+-0.0692        ? might be 1.0101x slower
   string-concat-pair-object                       2.6253+-0.0304            2.6224+-0.0178     ?      2.6408+-0.0181        ?
   string-concat-pair-simple                      16.9193+-0.2776     ?     16.9423+-0.3100     ?     16.9739+-0.2893        ?
   string-concat-simple                           17.0804+-0.2209     ?     17.1559+-0.2648           17.0165+-0.3188        
   string-cons-repeat                             10.1501+-0.0380     ?     10.1518+-0.0378           10.1279+-0.0233        
   string-cons-tower                              11.1030+-0.3098           10.8226+-0.0358           10.8215+-0.0255          might be 1.0260x faster
   string-equality                               108.1959+-0.7545     ?    110.1222+-1.7021     ^    106.1553+-1.7732          might be 1.0192x faster
   string-hash                                     2.5515+-0.0086            2.5511+-0.0107            2.5492+-0.0096        
   string-repeat-arith                            44.2915+-0.1649     !     46.0081+-0.2585     ^     44.3517+-0.1951        ?
   string-sub                                     89.5064+-1.6261           89.3004+-0.7361     ?     89.4571+-1.7414        
   string-test                                     4.1879+-0.0463     ?      4.2558+-0.0497            4.2224+-0.0266        ?
   structure-hoist-over-transitions                3.1683+-0.0266     ?      3.1691+-0.0259     ?      3.1735+-0.0279        ?
   tear-off-arguments-simple                       1.7553+-0.0097            1.7539+-0.0088            1.7458+-0.0076        
   tear-off-arguments                              3.1986+-0.0204            3.1951+-0.0144            3.1882+-0.0065        
   temporal-structure                             20.9758+-0.0965     ?     21.0721+-0.1892           20.9621+-0.0826        
   to-int32-boolean                               23.1208+-0.0707     ?     23.1911+-0.1242     ?     23.2363+-0.0835        ?
   undefined-test                                  4.4558+-0.0706     ?      4.4805+-0.0656            4.4748+-0.0618        ?

   &lt;arithmetic&gt;                                        ERROR                     ERROR                     ERROR             
   &lt;geometric&gt; *                                       ERROR                     ERROR                     ERROR             
   &lt;harmonic&gt;                                          ERROR                     ERROR                     ERROR             

                                                        Old                    TipOfTree                NoPutResult              NoPutResult v. Old    
All benchmarks:
   &lt;arithmetic&gt;                                        ERROR                     ERROR                     ERROR             
   &lt;geometric&gt;                                         ERROR                     ERROR                     ERROR             
   &lt;harmonic&gt;                                          ERROR                     ERROR                     ERROR             

                                                        Old                    TipOfTree                NoPutResult              NoPutResult v. Old    
Geomean of preferred means:
   &lt;scaled-result&gt;                                     ERROR                     ERROR                     ERROR</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>895801</commentid>
    <comment_count>4</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-05-31 00:48:05 -0700</bug_when>
    <thetext>Looks like I made all of the things crash.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>895803</commentid>
    <comment_count>5</comment_count>
      <attachid>203418</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-05-31 00:49:18 -0700</bug_when>
    <thetext>Created attachment 203418
still broken but getting there

Still causing test crashes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>895986</commentid>
    <comment_count>6</comment_count>
      <attachid>203467</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-05-31 14:17:56 -0700</bug_when>
    <thetext>Created attachment 203467
the patch

Fixed the crashes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>895993</commentid>
    <comment_count>7</comment_count>
      <attachid>203467</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2013-05-31 14:35:41 -0700</bug_when>
    <thetext>Comment on attachment 203467
the patch

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

&gt; Source/JavaScriptCore/dfg/DFGOSRExitCompilerCommon.cpp:89
&gt; +        void* jumpTarget = callLinkInfo.callReturnLocation.executableAddress();

Do call varargs have a call link info?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>895994</commentid>
    <comment_count>8</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-05-31 14:36:50 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; (From update of attachment 203467 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=203467&amp;action=review
&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGOSRExitCompilerCommon.cpp:89
&gt; &gt; +        void* jumpTarget = callLinkInfo.callReturnLocation.executableAddress();
&gt; 
&gt; Do call varargs have a call link info?

I just checked, and it totally does.  So we&apos;re fine here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>895995</commentid>
    <comment_count>9</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2013-05-31 14:38:12 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/151038</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>203404</attachid>
            <date>2013-05-30 18:45:38 -0700</date>
            <delta_ts>2013-05-30 20:53:00 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>61105</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCShy
ZXZpc2lvbiAxNTA5OTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDE4LDggKzQxOCw5IEBAIHZvaWQgQ29kZUJsb2Nr
OjpwcmludEdldEJ5SWRDYWNoZVN0YXR1cygKICNlbmRpZgogfQogCi12b2lkIENvZGVCbG9jazo6
cHJpbnRDYWxsT3AoUHJpbnRTdHJlYW0mIG91dCwgRXhlY1N0YXRlKiwgaW50IGxvY2F0aW9uLCBj
b25zdCBJbnN0cnVjdGlvbiomIGl0LCBjb25zdCBjaGFyKiBvcCwgQ2FjaGVEdW1wTW9kZSBjYWNo
ZUR1bXBNb2RlKQordm9pZCBDb2RlQmxvY2s6OnByaW50Q2FsbE9wKFByaW50U3RyZWFtJiBvdXQs
IEV4ZWNTdGF0ZSosIGludCBsb2NhdGlvbiwgY29uc3QgSW5zdHJ1Y3Rpb24qJiBpdCwgY29uc3Qg
Y2hhciogb3AsIENhY2hlRHVtcE1vZGUgY2FjaGVEdW1wTW9kZSwgYm9vbCYgaGFzUHJpbnRlZFBy
b2ZpbGluZykKIHsKKyAgICBpbnQgZHN0ID0gKCsraXQpLT51Lm9wZXJhbmQ7CiAgICAgaW50IGZ1
bmMgPSAoKytpdCktPnUub3BlcmFuZDsKICAgICBpbnQgYXJnQ291bnQgPSAoKytpdCktPnUub3Bl
cmFuZDsKICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSAoKytpdCktPnUub3BlcmFuZDsKQEAgLTQ0
Myw3ICs0NDQsOSBAQCB2b2lkIENvZGVCbG9jazo6cHJpbnRDYWxsT3AoUHJpbnRTdHJlYW0mCiAj
ZW5kaWYKICAgICAgICAgb3V0LnByaW50KCIgc3RhdHVzKCIsIENhbGxMaW5rU3RhdHVzOjpjb21w
dXRlRm9yKHRoaXMsIGxvY2F0aW9uKSwgIikiKTsKICAgICB9Ci0gICAgaXQgKz0gMjsKKyAgICAr
K2l0OworICAgIGR1bXBBcnJheVByb2ZpbGluZyhvdXQsIGl0LCBoYXNQcmludGVkUHJvZmlsaW5n
KTsKKyAgICBkdW1wVmFsdWVQcm9maWxpbmcob3V0LCBpdCwgaGFzUHJpbnRlZFByb2ZpbGluZyk7
CiB9CiAKIHZvaWQgQ29kZUJsb2NrOjpwcmludFB1dEJ5SWRPcChQcmludFN0cmVhbSYgb3V0LCBF
eGVjU3RhdGUqLCBpbnQgbG9jYXRpb24sIGNvbnN0IEluc3RydWN0aW9uKiYgaXQsIGNvbnN0IGNo
YXIqIG9wKQpAQCAtNjYzLDYgKzY2Niw4IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wQXJyYXlQcm9m
aWxpbmcoUHJpbnQKICAgICAKICAgICArK2l0OwogI2lmIEVOQUJMRShWQUxVRV9QUk9GSUxFUikK
KyAgICBpZiAoIWl0LT51LmFycmF5UHJvZmlsZSkKKyAgICAgICAgcmV0dXJuOwogICAgIENTdHJp
bmcgZGVzY3JpcHRpb24gPSBpdC0+dS5hcnJheVByb2ZpbGUtPmJyaWVmRGVzY3JpcHRpb24obG9j
a2VyLCB0aGlzKTsKICAgICBpZiAoIWRlc2NyaXB0aW9uLmxlbmd0aCgpKQogICAgICAgICByZXR1
cm47CkBAIC0xMjgyLDIwICsxMjg3LDIyIEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wQnl0ZWNvZGUo
UHJpbnRTdHJlYW0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2Ug
b3BfY2FsbDogewotICAgICAgICAgICAgcHJpbnRDYWxsT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwg
aXQsICJjYWxsIiwgRHVtcENhY2hlcyk7CisgICAgICAgICAgICBwcmludENhbGxPcChvdXQsIGV4
ZWMsIGxvY2F0aW9uLCBpdCwgImNhbGwiLCBEdW1wQ2FjaGVzLCBoYXNQcmludGVkUHJvZmlsaW5n
KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2Ugb3BfY2FsbF9l
dmFsOiB7Ci0gICAgICAgICAgICBwcmludENhbGxPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwg
ImNhbGxfZXZhbCIsIERvbnREdW1wQ2FjaGVzKTsKKyAgICAgICAgICAgIHByaW50Q2FsbE9wKG91
dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiY2FsbF9ldmFsIiwgRG9udER1bXBDYWNoZXMsIGhhc1By
aW50ZWRQcm9maWxpbmcpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAg
Y2FzZSBvcF9jYWxsX3ZhcmFyZ3M6IHsKKyAgICAgICAgICAgIGludCByZXN1bHQgPSAoKytpdCkt
PnUub3BlcmFuZDsKICAgICAgICAgICAgIGludCBjYWxsZWUgPSAoKytpdCktPnUub3BlcmFuZDsK
ICAgICAgICAgICAgIGludCB0aGlzVmFsdWUgPSAoKytpdCktPnUub3BlcmFuZDsKICAgICAgICAg
ICAgIGludCBhcmd1bWVudHMgPSAoKytpdCktPnUub3BlcmFuZDsKICAgICAgICAgICAgIGludCBm
aXJzdEZyZWVSZWdpc3RlciA9ICgrK2l0KS0+dS5vcGVyYW5kOwogICAgICAgICAgICAgKytpdDsK
LSAgICAgICAgICAgIG91dC5wcmludGYoIlslNGRdIGNhbGxfdmFyYXJnc1x0ICVzLCAlcywgJXMs
ICVkIiwgbG9jYXRpb24sIHJlZ2lzdGVyTmFtZShjYWxsZWUpLmRhdGEoKSwgcmVnaXN0ZXJOYW1l
KHRoaXNWYWx1ZSkuZGF0YSgpLCByZWdpc3Rlck5hbWUoYXJndW1lbnRzKS5kYXRhKCksIGZpcnN0
RnJlZVJlZ2lzdGVyKTsKKyAgICAgICAgICAgIG91dC5wcmludGYoIlslNGRdIGNhbGxfdmFyYXJn
c1x0ICVzLCAlcywgJXMsICVzLCAlZCIsIGxvY2F0aW9uLCByZWdpc3Rlck5hbWUocmVzdWx0KS5k
YXRhKCksIHJlZ2lzdGVyTmFtZShjYWxsZWUpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHRoaXNWYWx1
ZSkuZGF0YSgpLCByZWdpc3Rlck5hbWUoYXJndW1lbnRzKS5kYXRhKCksIGZpcnN0RnJlZVJlZ2lz
dGVyKTsKKyAgICAgICAgICAgIGR1bXBWYWx1ZVByb2ZpbGluZyhvdXQsIGl0LCBoYXNQcmludGVk
UHJvZmlsaW5nKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2Ug
b3BfdGVhcl9vZmZfYWN0aXZhdGlvbjogewpAQCAtMTMxNCwxMiArMTMyMSw2IEBAIHZvaWQgQ29k
ZUJsb2NrOjpkdW1wQnl0ZWNvZGUoUHJpbnRTdHJlYW0KICAgICAgICAgICAgIG91dC5wcmludGYo
IlslNGRdIHJldFx0XHQgJXMiLCBsb2NhdGlvbiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCkpOwog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9jYWxsX3B1dF9y
ZXN1bHQ6IHsKLSAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAg
ICAgICAgb3V0LnByaW50ZigiWyU0ZF0gY2FsbF9wdXRfcmVzdWx0XHRcdCAlcyIsIGxvY2F0aW9u
LCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSk7Ci0gICAgICAgICAgICBkdW1wVmFsdWVQcm9maWxp
bmcob3V0LCBpdCwgaGFzUHJpbnRlZFByb2ZpbGluZyk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfQogICAgICAgICBjYXNlIG9wX3JldF9vYmplY3Rfb3JfdGhpczogewogICAgICAgICAg
ICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7CiAgICAgICAgICAgICBpbnQgcjEgPSAoKytp
dCktPnUub3BlcmFuZDsKQEAgLTEzMjcsNyArMTMyOCw3IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1w
Qnl0ZWNvZGUoUHJpbnRTdHJlYW0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAg
ICAgIGNhc2Ugb3BfY29uc3RydWN0OiB7Ci0gICAgICAgICAgICBwcmludENhbGxPcChvdXQsIGV4
ZWMsIGxvY2F0aW9uLCBpdCwgImNvbnN0cnVjdCIsIER1bXBDYWNoZXMpOworICAgICAgICAgICAg
cHJpbnRDYWxsT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJjb25zdHJ1Y3QiLCBEdW1wQ2Fj
aGVzLCBoYXNQcmludGVkUHJvZmlsaW5nKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
CiAgICAgICAgIGNhc2Ugb3Bfc3RyY2F0OiB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiAxNTA5OTMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTk1MCw3ICs5
NTAsNyBAQCBwcml2YXRlOgogICAgIHZvaWQgcHJpbnRHZXRCeUlkT3AoUHJpbnRTdHJlYW0mLCBF
eGVjU3RhdGUqLCBpbnQgbG9jYXRpb24sIGNvbnN0IEluc3RydWN0aW9uKiYpOwogICAgIHZvaWQg
cHJpbnRHZXRCeUlkQ2FjaGVTdGF0dXMoUHJpbnRTdHJlYW0mLCBFeGVjU3RhdGUqLCBpbnQgbG9j
YXRpb24pOwogICAgIGVudW0gQ2FjaGVEdW1wTW9kZSB7IER1bXBDYWNoZXMsIERvbnREdW1wQ2Fj
aGVzIH07Ci0gICAgdm9pZCBwcmludENhbGxPcChQcmludFN0cmVhbSYsIEV4ZWNTdGF0ZSosIGlu
dCBsb2NhdGlvbiwgY29uc3QgSW5zdHJ1Y3Rpb24qJiwgY29uc3QgY2hhciogb3AsIENhY2hlRHVt
cE1vZGUpOworICAgIHZvaWQgcHJpbnRDYWxsT3AoUHJpbnRTdHJlYW0mLCBFeGVjU3RhdGUqLCBp
bnQgbG9jYXRpb24sIGNvbnN0IEluc3RydWN0aW9uKiYsIGNvbnN0IGNoYXIqIG9wLCBDYWNoZUR1
bXBNb2RlLCBib29sJiBoYXNQcmludGVkUHJvZmlsaW5nKTsKICAgICB2b2lkIHByaW50UHV0QnlJ
ZE9wKFByaW50U3RyZWFtJiwgRXhlY1N0YXRlKiwgaW50IGxvY2F0aW9uLCBjb25zdCBJbnN0cnVj
dGlvbiomLCBjb25zdCBjaGFyKiBvcCk7CiAgICAgdm9pZCBiZWdpbkR1bXBQcm9maWxpbmcoUHJp
bnRTdHJlYW0mLCBib29sJiBoYXNQcmludGVkUHJvZmlsaW5nKTsKICAgICB2b2lkIGR1bXBWYWx1
ZVByb2ZpbGluZyhQcmludFN0cmVhbSYsIGNvbnN0IEluc3RydWN0aW9uKiYsIGJvb2wmIGhhc1By
aW50ZWRQcm9maWxpbmcpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxl
ci9CeXRlY29kZUdlbmVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHJldmlzaW9uIDE1MDk5MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3Iu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODQ2LDcgKzE4NDYsMTAgQEAgUmVnaXN0ZXJJRCogQnl0
ZWNvZGVHZW5lcmF0b3I6OmVtaXRDYWxsKAogICAgIAogICAgIC8vIEVtaXQgY2FsbC4KICAgICBV
bmxpbmtlZEFycmF5UHJvZmlsZSBhcnJheVByb2ZpbGUgPSBuZXdBcnJheVByb2ZpbGUoKTsKLSAg
ICBlbWl0T3Bjb2RlKG9wY29kZUlEKTsKKyAgICBVbmxpbmtlZFZhbHVlUHJvZmlsZSBwcm9maWxl
ID0gZW1pdFByb2ZpbGVkT3Bjb2RlKG9wY29kZUlEKTsKKyAgICBBU1NFUlQoZHN0KTsKKyAgICBB
U1NFUlQoZHN0ICE9IGlnbm9yZWRSZXN1bHQoKSk7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5k
KGRzdC0+aW5kZXgoKSk7IC8vIHJlc3VsdAogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChmdW5j
LT5pbmRleCgpKTsgLy8gZnVuYwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChjYWxsQXJndW1l
bnRzLmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkpOyAvLyBhcmdDb3VudAogICAgIGluc3Ry
dWN0aW9ucygpLmFwcGVuZChjYWxsQXJndW1lbnRzLnJlZ2lzdGVyT2Zmc2V0KCkpOyAvLyByZWdp
c3Rlck9mZnNldApAQCAtMTg1NiwxMSArMTg1OSw3IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2Vu
ZXJhdG9yOjplbWl0Q2FsbCgKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoMCk7CiAjZW5kaWYK
ICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYXJyYXlQcm9maWxlKTsKLSAgICBpZiAoZHN0ICE9
IGlnbm9yZWRSZXN1bHQoKSkgewotICAgICAgICBVbmxpbmtlZFZhbHVlUHJvZmlsZSBwcm9maWxl
ID0gZW1pdFByb2ZpbGVkT3Bjb2RlKG9wX2NhbGxfcHV0X3Jlc3VsdCk7Ci0gICAgICAgIGluc3Ry
dWN0aW9ucygpLmFwcGVuZChraWxsKGRzdCkpOwotICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBl
bmQocHJvZmlsZSk7Ci0gICAgfQorICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChwcm9maWxlKTsK
ICAgICAKICAgICBpZiAoZXhwZWN0ZWRGdW5jdGlvbiAhPSBOb0V4cGVjdGVkRnVuY3Rpb24pCiAg
ICAgICAgIGVtaXRMYWJlbChkb25lLmdldCgpKTsKQEAgLTE4ODQsMTcgKzE4ODMsMTUgQEAgUmVn
aXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRDYWxsVgogICAgIGVtaXRFeHByZXNzaW9u
SW5mbyhkaXZvdCwgc3RhcnRPZmZzZXQsIGVuZE9mZnNldCk7CiAKICAgICAvLyBFbWl0IGNhbGwu
Ci0gICAgZW1pdE9wY29kZShvcF9jYWxsX3ZhcmFyZ3MpOworICAgIFVubGlua2VkVmFsdWVQcm9m
aWxlIHByb2ZpbGUgPSBlbWl0UHJvZmlsZWRPcGNvZGUob3BfY2FsbF92YXJhcmdzKTsKKyAgICBB
U1NFUlQoZHN0ICE9IGlnbm9yZWRSZXN1bHQoKSk7CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5k
KGRzdC0+aW5kZXgoKSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGZ1bmMtPmluZGV4KCkp
OwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCh0aGlzUmVnaXN0ZXItPmluZGV4KCkpOwogICAg
IGluc3RydWN0aW9ucygpLmFwcGVuZChhcmd1bWVudHMtPmluZGV4KCkpOwogICAgIGluc3RydWN0
aW9ucygpLmFwcGVuZChmaXJzdEZyZWVSZWdpc3Rlci0+aW5kZXgoKSk7CiAgICAgaW5zdHJ1Y3Rp
b25zKCkuYXBwZW5kKDApOyAvLyBQYWQgdG8gbWFrZSBpdCBhcyBiaWcgYXMgYW4gb3BfY2FsbC4K
LSAgICBpZiAoZHN0ICE9IGlnbm9yZWRSZXN1bHQoKSkgewotICAgICAgICBVbmxpbmtlZFZhbHVl
UHJvZmlsZSBwcm9maWxlID0gZW1pdFByb2ZpbGVkT3Bjb2RlKG9wX2NhbGxfcHV0X3Jlc3VsdCk7
Ci0gICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChraWxsKGRzdCkpOwotICAgICAgICBpbnN0
cnVjdGlvbnMoKS5hcHBlbmQocHJvZmlsZSk7Ci0gICAgfQorICAgIGluc3RydWN0aW9ucygpLmFw
cGVuZChwcm9maWxlKTsKICAgICBpZiAobV9zaG91bGRFbWl0UHJvZmlsZUhvb2tzKSB7CiAgICAg
ICAgIGVtaXRPcGNvZGUob3BfcHJvZmlsZV9kaWRfY2FsbCk7CiAgICAgICAgIGluc3RydWN0aW9u
cygpLmFwcGVuZChwcm9maWxlSG9va1JlZ2lzdGVyLT5pbmRleCgpKTsKQEAgLTE5NjMsNyArMTk2
MCw5IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0Q29uc3QKICAgICBSZWZQ
dHI8TGFiZWw+IGRvbmUgPSBuZXdMYWJlbCgpOwogICAgIGV4cGVjdGVkRnVuY3Rpb24gPSBlbWl0
RXhwZWN0ZWRGdW5jdGlvblNuaXBwZXQoZHN0LCBmdW5jLCBleHBlY3RlZEZ1bmN0aW9uLCBjYWxs
QXJndW1lbnRzLCBkb25lLmdldCgpKTsKIAotICAgIGVtaXRPcGNvZGUob3BfY29uc3RydWN0KTsK
KyAgICBVbmxpbmtlZFZhbHVlUHJvZmlsZSBwcm9maWxlID0gZW1pdFByb2ZpbGVkT3Bjb2RlKG9w
X2NvbnN0cnVjdCk7CisgICAgQVNTRVJUKGRzdCAhPSBpZ25vcmVkUmVzdWx0KCkpOworICAgIGlu
c3RydWN0aW9ucygpLmFwcGVuZChkc3QtPmluZGV4KCkpOwogICAgIGluc3RydWN0aW9ucygpLmFw
cGVuZChmdW5jLT5pbmRleCgpKTsgLy8gZnVuYwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChj
YWxsQXJndW1lbnRzLmFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKCkpOyAvLyBhcmdDb3VudAog
ICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChjYWxsQXJndW1lbnRzLnJlZ2lzdGVyT2Zmc2V0KCkp
OyAvLyByZWdpc3Rlck9mZnNldApAQCAtMTk3MywxMSArMTk3Miw3IEBAIFJlZ2lzdGVySUQqIEJ5
dGVjb2RlR2VuZXJhdG9yOjplbWl0Q29uc3QKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoMCk7
CiAjZW5kaWYKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoMCk7Ci0gICAgaWYgKGRzdCAhPSBp
Z25vcmVkUmVzdWx0KCkpIHsKLSAgICAgICAgVW5saW5rZWRWYWx1ZVByb2ZpbGUgcHJvZmlsZSA9
IGVtaXRQcm9maWxlZE9wY29kZShvcF9jYWxsX3B1dF9yZXN1bHQpOwotICAgICAgICBpbnN0cnVj
dGlvbnMoKS5hcHBlbmQoa2lsbChkc3QpKTsKLSAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5k
KHByb2ZpbGUpOwotICAgIH0KKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQocHJvZmlsZSk7CiAK
ICAgICBpZiAoZXhwZWN0ZWRGdW5jdGlvbiAhPSBOb0V4cGVjdGVkRnVuY3Rpb24pCiAgICAgICAg
IGVtaXRMYWJlbChkb25lLmdldCgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAJKHJldmlzaW9uIDE1MDk5MykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDE4LDkgKzQxOCwxMCBAQCBSZWdpc3RlcklEKiBFdmFsRnVuY3Rpb25D
YWxsTm9kZTo6ZW1pdEJ5CiBSZWdpc3RlcklEKiBGdW5jdGlvbkNhbGxWYWx1ZU5vZGU6OmVtaXRC
eXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7
CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGZ1bmMgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9leHBy
KTsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcmV0dXJuVmFsdWUgPSBnZW5lcmF0b3IuZmluYWxE
ZXN0aW5hdGlvbihkc3QsIGZ1bmMuZ2V0KCkpOwogICAgIENhbGxBcmd1bWVudHMgY2FsbEFyZ3Vt
ZW50cyhnZW5lcmF0b3IsIG1fYXJncyk7CiAgICAgZ2VuZXJhdG9yLmVtaXRMb2FkKGNhbGxBcmd1
bWVudHMudGhpc1JlZ2lzdGVyKCksIGpzVW5kZWZpbmVkKCkpOwotICAgIHJldHVybiBnZW5lcmF0
b3IuZW1pdENhbGwoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb25Pcklnbm9yZWQoZHN0LCBmdW5j
LmdldCgpKSwgZnVuYy5nZXQoKSwgTm9FeHBlY3RlZEZ1bmN0aW9uLCBjYWxsQXJndW1lbnRzLCBk
aXZvdCgpLCBzdGFydE9mZnNldCgpLCBlbmRPZmZzZXQoKSk7CisgICAgcmV0dXJuIGdlbmVyYXRv
ci5lbWl0Q2FsbChyZXR1cm5WYWx1ZS5nZXQoKSwgZnVuYy5nZXQoKSwgTm9FeHBlY3RlZEZ1bmN0
aW9uLCBjYWxsQXJndW1lbnRzLCBkaXZvdCgpLCBzdGFydE9mZnNldCgpLCBlbmRPZmZzZXQoKSk7
CiB9CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGdW5jdGlvbkNhbGxSZXNv
bHZlTm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC00MzIsMjggKzQz
MywzMSBAQCBSZWdpc3RlcklEKiBGdW5jdGlvbkNhbGxSZXNvbHZlTm9kZTo6ZW1pCiAKICAgICBp
ZiAoUmVnaXN0ZXJJRCogbG9jYWwgPSByZXNvbHZlUmVzdWx0LmxvY2FsKCkpIHsKICAgICAgICAg
UmVmUHRyPFJlZ2lzdGVySUQ+IGZ1bmMgPSBnZW5lcmF0b3IuZW1pdE1vdmUoZ2VuZXJhdG9yLnRl
bXBEZXN0aW5hdGlvbihkc3QpLCBsb2NhbCk7CisgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiBy
ZXR1cm5WYWx1ZSA9IGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCwgZnVuYy5nZXQoKSk7
CiAgICAgICAgIENhbGxBcmd1bWVudHMgY2FsbEFyZ3VtZW50cyhnZW5lcmF0b3IsIG1fYXJncyk7
CiAgICAgICAgIGdlbmVyYXRvci5lbWl0TG9hZChjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3Rlcigp
LCBqc1VuZGVmaW5lZCgpKTsKICAgICAgICAgLy8gVGhpcyBwYXNzZXMgTm9FeHBlY3RlZEZ1bmN0
aW9uIGJlY2F1c2Ugd2UgZXhwZWN0IHRoYXQgaWYgdGhlIGZ1bmN0aW9uIGlzIGluIGEKICAgICAg
ICAgLy8gbG9jYWwgdmFyaWFibGUsIHRoZW4gaXQncyBub3Qgb25lIG9mIG91ciBidWlsdC1pbiBj
b25zdHJ1Y3RvcnMuCi0gICAgICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdENhbGwoZ2VuZXJhdG9y
LmZpbmFsRGVzdGluYXRpb25Pcklnbm9yZWQoZHN0LCBjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3Rl
cigpKSwgZnVuYy5nZXQoKSwgTm9FeHBlY3RlZEZ1bmN0aW9uLCBjYWxsQXJndW1lbnRzLCBkaXZv
dCgpLCBzdGFydE9mZnNldCgpLCBlbmRPZmZzZXQoKSk7CisgICAgICAgIHJldHVybiBnZW5lcmF0
b3IuZW1pdENhbGwocmV0dXJuVmFsdWUuZ2V0KCksIGZ1bmMuZ2V0KCksIE5vRXhwZWN0ZWRGdW5j
dGlvbiwgY2FsbEFyZ3VtZW50cywgZGl2b3QoKSwgc3RhcnRPZmZzZXQoKSwgZW5kT2Zmc2V0KCkp
OwogICAgIH0KIAogICAgIGlmIChyZXNvbHZlUmVzdWx0LmlzU3RhdGljKCkpIHsKICAgICAgICAg
UmVmUHRyPFJlZ2lzdGVySUQ+IGZ1bmMgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7CisgICAg
ICAgIFJlZlB0cjxSZWdpc3RlcklEPiByZXR1cm5WYWx1ZSA9IGdlbmVyYXRvci5maW5hbERlc3Rp
bmF0aW9uKGRzdCwgZnVuYy5nZXQoKSk7CiAgICAgICAgIENhbGxBcmd1bWVudHMgY2FsbEFyZ3Vt
ZW50cyhnZW5lcmF0b3IsIG1fYXJncyk7CiAgICAgICAgIGdlbmVyYXRvci5lbWl0R2V0U3RhdGlj
VmFyKGZ1bmMuZ2V0KCksIHJlc29sdmVSZXN1bHQsIG1faWRlbnQpOwogICAgICAgICBnZW5lcmF0
b3IuZW1pdExvYWQoY2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwganNVbmRlZmluZWQoKSk7
Ci0gICAgICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdENhbGwoZ2VuZXJhdG9yLmZpbmFsRGVzdGlu
YXRpb25Pcklnbm9yZWQoZHN0LCBmdW5jLmdldCgpKSwgZnVuYy5nZXQoKSwgZXhwZWN0ZWRGdW5j
dGlvbiwgY2FsbEFyZ3VtZW50cywgZGl2b3QoKSwgc3RhcnRPZmZzZXQoKSwgZW5kT2Zmc2V0KCkp
OworICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRDYWxsKHJldHVyblZhbHVlLmdldCgpLCBm
dW5jLmdldCgpLCBleHBlY3RlZEZ1bmN0aW9uLCBjYWxsQXJndW1lbnRzLCBkaXZvdCgpLCBzdGFy
dE9mZnNldCgpLCBlbmRPZmZzZXQoKSk7CiAgICAgfQogCiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+
IGZ1bmMgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+
IHJldHVyblZhbHVlID0gZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0LCBmdW5jLmdldCgp
KTsKICAgICBDYWxsQXJndW1lbnRzIGNhbGxBcmd1bWVudHMoZ2VuZXJhdG9yLCBtX2FyZ3MpOwog
ICAgIGludCBpZGVudGlmaWVyU3RhcnQgPSBkaXZvdCgpIC0gc3RhcnRPZmZzZXQoKTsKIAogICAg
IGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oaWRlbnRpZmllclN0YXJ0ICsgbV9pZGVudC5s
ZW5ndGgoKSwgbV9pZGVudC5sZW5ndGgoKSwgMCk7CiAgICAgZ2VuZXJhdG9yLmVtaXRSZXNvbHZl
V2l0aFRoaXMoY2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwgZnVuYy5nZXQoKSwgcmVzb2x2
ZVJlc3VsdCwgbV9pZGVudCk7Ci0gICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0Q2FsbChnZW5lcmF0
b3IuZmluYWxEZXN0aW5hdGlvbk9ySWdub3JlZChkc3QsIGZ1bmMuZ2V0KCkpLCBmdW5jLmdldCgp
LCBleHBlY3RlZEZ1bmN0aW9uLCBjYWxsQXJndW1lbnRzLCBkaXZvdCgpLCBzdGFydE9mZnNldCgp
LCBlbmRPZmZzZXQoKSk7CisgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0Q2FsbChyZXR1cm5WYWx1
ZS5nZXQoKSwgZnVuYy5nZXQoKSwgZXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFyZ3VtZW50cywgZGl2
b3QoKSwgc3RhcnRPZmZzZXQoKSwgZW5kT2Zmc2V0KCkpOwogfQogCiAvLyAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0gRnVuY3Rpb25DYWxsQnJhY2tldE5vZGUgLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLQpAQCAtNDY0LDkgKzQ2OCwxMCBAQCBSZWdpc3RlcklEKiBGdW5j
dGlvbkNhbGxCcmFja2V0Tm9kZTo6ZW1pCiAgICAgUmVnaXN0ZXJJRCogcHJvcGVydHkgPSBnZW5l
cmF0b3IuZW1pdE5vZGUobV9zdWJzY3JpcHQpOwogICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lv
bkluZm8oZGl2b3QoKSAtIG1fc3ViZXhwcmVzc2lvbkRpdm90T2Zmc2V0LCBzdGFydE9mZnNldCgp
IC0gbV9zdWJleHByZXNzaW9uRGl2b3RPZmZzZXQsIG1fc3ViZXhwcmVzc2lvbkVuZE9mZnNldCk7
CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGZ1bmN0aW9uID0gZ2VuZXJhdG9yLmVtaXRHZXRCeVZh
bChnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKGRzdCksIGJhc2UuZ2V0KCksIHByb3BlcnR5KTsK
KyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcmV0dXJuVmFsdWUgPSBnZW5lcmF0b3IuZmluYWxEZXN0
aW5hdGlvbihkc3QsIGZ1bmN0aW9uLmdldCgpKTsKICAgICBDYWxsQXJndW1lbnRzIGNhbGxBcmd1
bWVudHMoZ2VuZXJhdG9yLCBtX2FyZ3MpOwogICAgIGdlbmVyYXRvci5lbWl0TW92ZShjYWxsQXJn
dW1lbnRzLnRoaXNSZWdpc3RlcigpLCBiYXNlLmdldCgpKTsKLSAgICByZXR1cm4gZ2VuZXJhdG9y
LmVtaXRDYWxsKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uT3JJZ25vcmVkKGRzdCwgZnVuY3Rp
b24uZ2V0KCkpLCBmdW5jdGlvbi5nZXQoKSwgTm9FeHBlY3RlZEZ1bmN0aW9uLCBjYWxsQXJndW1l
bnRzLCBkaXZvdCgpLCBzdGFydE9mZnNldCgpLCBlbmRPZmZzZXQoKSk7CisgICAgcmV0dXJuIGdl
bmVyYXRvci5lbWl0Q2FsbChyZXR1cm5WYWx1ZS5nZXQoKSwgZnVuY3Rpb24uZ2V0KCksIE5vRXhw
ZWN0ZWRGdW5jdGlvbiwgY2FsbEFyZ3VtZW50cywgZGl2b3QoKSwgc3RhcnRPZmZzZXQoKSwgZW5k
T2Zmc2V0KCkpOwogfQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRnVuY3Rp
b25DYWxsRG90Tm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC00NzQs
MTEgKzQ3OSwxMiBAQCBSZWdpc3RlcklEKiBGdW5jdGlvbkNhbGxCcmFja2V0Tm9kZTo6ZW1pCiBS
ZWdpc3RlcklEKiBGdW5jdGlvbkNhbGxEb3ROb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5l
cmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogewogICAgIFJlZlB0cjxSZWdpc3Rl
cklEPiBmdW5jdGlvbiA9IGdlbmVyYXRvci50ZW1wRGVzdGluYXRpb24oZHN0KTsKKyAgICBSZWZQ
dHI8UmVnaXN0ZXJJRD4gcmV0dXJuVmFsdWUgPSBnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihk
c3QsIGZ1bmN0aW9uLmdldCgpKTsKICAgICBDYWxsQXJndW1lbnRzIGNhbGxBcmd1bWVudHMoZ2Vu
ZXJhdG9yLCBtX2FyZ3MpOwogICAgIGdlbmVyYXRvci5lbWl0Tm9kZShjYWxsQXJndW1lbnRzLnRo
aXNSZWdpc3RlcigpLCBtX2Jhc2UpOwogICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8o
ZGl2b3QoKSAtIG1fc3ViZXhwcmVzc2lvbkRpdm90T2Zmc2V0LCBzdGFydE9mZnNldCgpIC0gbV9z
dWJleHByZXNzaW9uRGl2b3RPZmZzZXQsIG1fc3ViZXhwcmVzc2lvbkVuZE9mZnNldCk7CiAgICAg
Z2VuZXJhdG9yLmVtaXRHZXRCeUlkKGZ1bmN0aW9uLmdldCgpLCBjYWxsQXJndW1lbnRzLnRoaXNS
ZWdpc3RlcigpLCBtX2lkZW50KTsKLSAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRDYWxsKGdlbmVy
YXRvci5maW5hbERlc3RpbmF0aW9uT3JJZ25vcmVkKGRzdCwgZnVuY3Rpb24uZ2V0KCkpLCBmdW5j
dGlvbi5nZXQoKSwgTm9FeHBlY3RlZEZ1bmN0aW9uLCBjYWxsQXJndW1lbnRzLCBkaXZvdCgpLCBz
dGFydE9mZnNldCgpLCBlbmRPZmZzZXQoKSk7CisgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0Q2Fs
bChyZXR1cm5WYWx1ZS5nZXQoKSwgZnVuY3Rpb24uZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwg
Y2FsbEFyZ3VtZW50cywgZGl2b3QoKSwgc3RhcnRPZmZzZXQoKSwgZW5kT2Zmc2V0KCkpOwogfQog
CiBSZWdpc3RlcklEKiBDYWxsRnVuY3Rpb25DYWxsRG90Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVj
b2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKQEAgLTQ4OCw3ICs0OTQs
NyBAQCBSZWdpc3RlcklEKiBDYWxsRnVuY3Rpb25DYWxsRG90Tm9kZTo6ZW1pCiAgICAgUmVmUHRy
PFJlZ2lzdGVySUQ+IGJhc2UgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9iYXNlKTsKICAgICBnZW5l
cmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCkgLSBtX3N1YmV4cHJlc3Npb25EaXZvdE9m
ZnNldCwgc3RhcnRPZmZzZXQoKSAtIG1fc3ViZXhwcmVzc2lvbkRpdm90T2Zmc2V0LCBtX3N1YmV4
cHJlc3Npb25FbmRPZmZzZXQpOwogICAgIFJlZlB0cjxSZWdpc3RlcklEPiBmdW5jdGlvbiA9IGdl
bmVyYXRvci5lbWl0R2V0QnlJZChnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKGRzdCksIGJhc2Uu
Z2V0KCksIG1faWRlbnQpOwotICAgIFJlZlB0cjxSZWdpc3RlcklEPiBmaW5hbERlc3RpbmF0aW9u
T3JJZ25vcmVkID0gZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb25Pcklnbm9yZWQoZHN0LCBmdW5j
dGlvbi5nZXQoKSk7CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHJldHVyblZhbHVlID0gZ2VuZXJh
dG9yLmZpbmFsRGVzdGluYXRpb24oZHN0LCBmdW5jdGlvbi5nZXQoKSk7CiAgICAgZ2VuZXJhdG9y
LmVtaXRKdW1wSWZOb3RGdW5jdGlvbkNhbGwoZnVuY3Rpb24uZ2V0KCksIHJlYWxDYWxsLmdldCgp
KTsKICAgICB7CiAgICAgICAgIGlmIChtX2FyZ3MtPm1fbGlzdE5vZGUgJiYgbV9hcmdzLT5tX2xp
c3ROb2RlLT5tX2V4cHIpIHsKQEAgLTQ5OCw3ICs1MDQsNyBAQCBSZWdpc3RlcklEKiBDYWxsRnVu
Y3Rpb25DYWxsRG90Tm9kZTo6ZW1pCiAgICAgICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcmVh
bEZ1bmN0aW9uID0gZ2VuZXJhdG9yLmVtaXRNb3ZlKGdlbmVyYXRvci50ZW1wRGVzdGluYXRpb24o
ZHN0KSwgYmFzZS5nZXQoKSk7CiAgICAgICAgICAgICBDYWxsQXJndW1lbnRzIGNhbGxBcmd1bWVu
dHMoZ2VuZXJhdG9yLCBtX2FyZ3MpOwogICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXROb2RlKGNh
bGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIG9sZExpc3QtPm1fZXhwcik7Ci0gICAgICAgICAg
ICBnZW5lcmF0b3IuZW1pdENhbGwoZmluYWxEZXN0aW5hdGlvbk9ySWdub3JlZC5nZXQoKSwgcmVh
bEZ1bmN0aW9uLmdldCgpLCBOb0V4cGVjdGVkRnVuY3Rpb24sIGNhbGxBcmd1bWVudHMsIGRpdm90
KCksIHN0YXJ0T2Zmc2V0KCksIGVuZE9mZnNldCgpKTsKKyAgICAgICAgICAgIGdlbmVyYXRvci5l
bWl0Q2FsbChyZXR1cm5WYWx1ZS5nZXQoKSwgcmVhbEZ1bmN0aW9uLmdldCgpLCBOb0V4cGVjdGVk
RnVuY3Rpb24sIGNhbGxBcmd1bWVudHMsIGRpdm90KCksIHN0YXJ0T2Zmc2V0KCksIGVuZE9mZnNl
dCgpKTsKICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0SnVtcChlbmQuZ2V0KCkpOwogCiAgICAg
ICAgICAgICBtX2FyZ3MtPm1fbGlzdE5vZGUgPSBvbGRMaXN0OwpAQCAtNTA2LDcgKzUxMiw3IEBA
IFJlZ2lzdGVySUQqIENhbGxGdW5jdGlvbkNhbGxEb3ROb2RlOjplbWkKICAgICAgICAgICAgIFJl
ZlB0cjxSZWdpc3RlcklEPiByZWFsRnVuY3Rpb24gPSBnZW5lcmF0b3IuZW1pdE1vdmUoZ2VuZXJh
dG9yLnRlbXBEZXN0aW5hdGlvbihkc3QpLCBiYXNlLmdldCgpKTsKICAgICAgICAgICAgIENhbGxB
cmd1bWVudHMgY2FsbEFyZ3VtZW50cyhnZW5lcmF0b3IsIG1fYXJncyk7CiAgICAgICAgICAgICBn
ZW5lcmF0b3IuZW1pdExvYWQoY2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwganNVbmRlZmlu
ZWQoKSk7Ci0gICAgICAgICAgICBnZW5lcmF0b3IuZW1pdENhbGwoZmluYWxEZXN0aW5hdGlvbk9y
SWdub3JlZC5nZXQoKSwgcmVhbEZ1bmN0aW9uLmdldCgpLCBOb0V4cGVjdGVkRnVuY3Rpb24sIGNh
bGxBcmd1bWVudHMsIGRpdm90KCksIHN0YXJ0T2Zmc2V0KCksIGVuZE9mZnNldCgpKTsKKyAgICAg
ICAgICAgIGdlbmVyYXRvci5lbWl0Q2FsbChyZXR1cm5WYWx1ZS5nZXQoKSwgcmVhbEZ1bmN0aW9u
LmdldCgpLCBOb0V4cGVjdGVkRnVuY3Rpb24sIGNhbGxBcmd1bWVudHMsIGRpdm90KCksIHN0YXJ0
T2Zmc2V0KCksIGVuZE9mZnNldCgpKTsKICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0SnVtcChl
bmQuZ2V0KCkpOwogICAgICAgICB9CiAgICAgfQpAQCAtNTE0LDEwICs1MjAsMTAgQEAgUmVnaXN0
ZXJJRCogQ2FsbEZ1bmN0aW9uQ2FsbERvdE5vZGU6OmVtaQogICAgIHsKICAgICAgICAgQ2FsbEFy
Z3VtZW50cyBjYWxsQXJndW1lbnRzKGdlbmVyYXRvciwgbV9hcmdzKTsKICAgICAgICAgZ2VuZXJh
dG9yLmVtaXRNb3ZlKGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIGJhc2UuZ2V0KCkpOwot
ICAgICAgICBnZW5lcmF0b3IuZW1pdENhbGwoZmluYWxEZXN0aW5hdGlvbk9ySWdub3JlZC5nZXQo
KSwgZnVuY3Rpb24uZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFyZ3VtZW50cywgZGl2
b3QoKSwgc3RhcnRPZmZzZXQoKSwgZW5kT2Zmc2V0KCkpOworICAgICAgICBnZW5lcmF0b3IuZW1p
dENhbGwocmV0dXJuVmFsdWUuZ2V0KCksIGZ1bmN0aW9uLmdldCgpLCBOb0V4cGVjdGVkRnVuY3Rp
b24sIGNhbGxBcmd1bWVudHMsIGRpdm90KCksIHN0YXJ0T2Zmc2V0KCksIGVuZE9mZnNldCgpKTsK
ICAgICB9CiAgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChlbmQuZ2V0KCkpOwotICAgIHJldHVybiBm
aW5hbERlc3RpbmF0aW9uT3JJZ25vcmVkLmdldCgpOworICAgIHJldHVybiByZXR1cm5WYWx1ZS5n
ZXQoKTsKIH0KIAogc3RhdGljIGJvb2wgYXJlVHJpdmlhbEFwcGx5QXJndW1lbnRzKEFyZ3VtZW50
c05vZGUqIGFyZ3MpCkBAIC01MzgsNyArNTQ0LDcgQEAgUmVnaXN0ZXJJRCogQXBwbHlGdW5jdGlv
bkNhbGxEb3ROb2RlOjplbQogICAgIFJlZlB0cjxSZWdpc3RlcklEPiBiYXNlID0gZ2VuZXJhdG9y
LmVtaXROb2RlKG1fYmFzZSk7CiAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZv
dCgpIC0gbV9zdWJleHByZXNzaW9uRGl2b3RPZmZzZXQsIHN0YXJ0T2Zmc2V0KCkgLSBtX3N1YmV4
cHJlc3Npb25EaXZvdE9mZnNldCwgbV9zdWJleHByZXNzaW9uRW5kT2Zmc2V0KTsKICAgICBSZWZQ
dHI8UmVnaXN0ZXJJRD4gZnVuY3Rpb24gPSBnZW5lcmF0b3IuZW1pdEdldEJ5SWQoZ2VuZXJhdG9y
LnRlbXBEZXN0aW5hdGlvbihkc3QpLCBiYXNlLmdldCgpLCBtX2lkZW50KTsKLSAgICBSZWZQdHI8
UmVnaXN0ZXJJRD4gZmluYWxEZXN0aW5hdGlvbk9ySWdub3JlZCA9IGdlbmVyYXRvci5maW5hbERl
c3RpbmF0aW9uT3JJZ25vcmVkKGRzdCwgZnVuY3Rpb24uZ2V0KCkpOworICAgIFJlZlB0cjxSZWdp
c3RlcklEPiByZXR1cm5WYWx1ZSA9IGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCwgZnVu
Y3Rpb24uZ2V0KCkpOwogICAgIGdlbmVyYXRvci5lbWl0SnVtcElmTm90RnVuY3Rpb25BcHBseShm
dW5jdGlvbi5nZXQoKSwgcmVhbENhbGwuZ2V0KCkpOwogICAgIHsKICAgICAgICAgaWYgKG1heUJl
Q2FsbCkgewpAQCAtNTUxLDIwICs1NTcsMjAgQEAgUmVnaXN0ZXJJRCogQXBwbHlGdW5jdGlvbkNh
bGxEb3ROb2RlOjplbQogICAgICAgICAgICAgICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcmVh
bEZ1bmN0aW9uID0gZ2VuZXJhdG9yLmVtaXRNb3ZlKGdlbmVyYXRvci50ZW1wRGVzdGluYXRpb24o
ZHN0KSwgYmFzZS5nZXQoKSk7CiAgICAgICAgICAgICAgICAgICAgIENhbGxBcmd1bWVudHMgY2Fs
bEFyZ3VtZW50cyhnZW5lcmF0b3IsIG1fYXJncyk7CiAgICAgICAgICAgICAgICAgICAgIGdlbmVy
YXRvci5lbWl0Tm9kZShjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCBvbGRMaXN0LT5tX2V4
cHIpOwotICAgICAgICAgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdENhbGwoZmluYWxEZXN0aW5h
dGlvbk9ySWdub3JlZC5nZXQoKSwgcmVhbEZ1bmN0aW9uLmdldCgpLCBOb0V4cGVjdGVkRnVuY3Rp
b24sIGNhbGxBcmd1bWVudHMsIGRpdm90KCksIHN0YXJ0T2Zmc2V0KCksIGVuZE9mZnNldCgpKTsK
KyAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRDYWxsKHJldHVyblZhbHVlLmdldCgp
LCByZWFsRnVuY3Rpb24uZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFyZ3VtZW50cywg
ZGl2b3QoKSwgc3RhcnRPZmZzZXQoKSwgZW5kT2Zmc2V0KCkpOwogICAgICAgICAgICAgICAgIH0g
ZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgIG1fYXJncy0+bV9saXN0Tm9kZSA9IG1fYXJncy0+
bV9saXN0Tm9kZS0+bV9uZXh0OwogICAgICAgICAgICAgICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJ
RD4gcmVhbEZ1bmN0aW9uID0gZ2VuZXJhdG9yLmVtaXRNb3ZlKGdlbmVyYXRvci50ZW1wRGVzdGlu
YXRpb24oZHN0KSwgYmFzZS5nZXQoKSk7CiAgICAgICAgICAgICAgICAgICAgIENhbGxBcmd1bWVu
dHMgY2FsbEFyZ3VtZW50cyhnZW5lcmF0b3IsIG1fYXJncyk7CiAgICAgICAgICAgICAgICAgICAg
IGdlbmVyYXRvci5lbWl0Tm9kZShjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCBvbGRMaXN0
LT5tX2V4cHIpOwotICAgICAgICAgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdENhbGwoZmluYWxE
ZXN0aW5hdGlvbk9ySWdub3JlZC5nZXQoKSwgcmVhbEZ1bmN0aW9uLmdldCgpLCBOb0V4cGVjdGVk
RnVuY3Rpb24sIGNhbGxBcmd1bWVudHMsIGRpdm90KCksIHN0YXJ0T2Zmc2V0KCksIGVuZE9mZnNl
dCgpKTsKKyAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRDYWxsKHJldHVyblZhbHVl
LmdldCgpLCByZWFsRnVuY3Rpb24uZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFyZ3Vt
ZW50cywgZGl2b3QoKSwgc3RhcnRPZmZzZXQoKSwgZW5kT2Zmc2V0KCkpOwogICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICBtX2FyZ3MtPm1fbGlzdE5vZGUgPSBvbGRMaXN0OwogICAg
ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcmVh
bEZ1bmN0aW9uID0gZ2VuZXJhdG9yLmVtaXRNb3ZlKGdlbmVyYXRvci50ZW1wRGVzdGluYXRpb24o
ZHN0KSwgYmFzZS5nZXQoKSk7CiAgICAgICAgICAgICAgICAgQ2FsbEFyZ3VtZW50cyBjYWxsQXJn
dW1lbnRzKGdlbmVyYXRvciwgbV9hcmdzKTsKICAgICAgICAgICAgICAgICBnZW5lcmF0b3IuZW1p
dExvYWQoY2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwganNVbmRlZmluZWQoKSk7Ci0gICAg
ICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRDYWxsKGZpbmFsRGVzdGluYXRpb25Pcklnbm9yZWQu
Z2V0KCksIHJlYWxGdW5jdGlvbi5nZXQoKSwgTm9FeHBlY3RlZEZ1bmN0aW9uLCBjYWxsQXJndW1l
bnRzLCBkaXZvdCgpLCBzdGFydE9mZnNldCgpLCBlbmRPZmZzZXQoKSk7CisgICAgICAgICAgICAg
ICAgZ2VuZXJhdG9yLmVtaXRDYWxsKHJldHVyblZhbHVlLmdldCgpLCByZWFsRnVuY3Rpb24uZ2V0
KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFyZ3VtZW50cywgZGl2b3QoKSwgc3RhcnRPZmZz
ZXQoKSwgZW5kT2Zmc2V0KCkpOwogICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewogICAg
ICAgICAgICAgQVNTRVJUKG1fYXJncy0+bV9saXN0Tm9kZSAmJiBtX2FyZ3MtPm1fbGlzdE5vZGUt
Pm1fbmV4dCk7CkBAIC01ODUsNyArNTkxLDcgQEAgUmVnaXN0ZXJJRCogQXBwbHlGdW5jdGlvbkNh
bGxEb3ROb2RlOjplbQogICAgICAgICAgICAgd2hpbGUgKChhcmdzID0gYXJncy0+bV9uZXh0KSkK
ICAgICAgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdE5vZGUoYXJncy0+bV9leHByKTsKIAotICAg
ICAgICAgICAgZ2VuZXJhdG9yLmVtaXRDYWxsVmFyYXJncyhmaW5hbERlc3RpbmF0aW9uT3JJZ25v
cmVkLmdldCgpLCByZWFsRnVuY3Rpb24uZ2V0KCksIHRoaXNSZWdpc3Rlci5nZXQoKSwgYXJnc1Jl
Z2lzdGVyLmdldCgpLCBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCksIHByb2ZpbGVIb29rUmVnaXN0
ZXIuZ2V0KCksIGRpdm90KCksIHN0YXJ0T2Zmc2V0KCksIGVuZE9mZnNldCgpKTsKKyAgICAgICAg
ICAgIGdlbmVyYXRvci5lbWl0Q2FsbFZhcmFyZ3MocmV0dXJuVmFsdWUuZ2V0KCksIHJlYWxGdW5j
dGlvbi5nZXQoKSwgdGhpc1JlZ2lzdGVyLmdldCgpLCBhcmdzUmVnaXN0ZXIuZ2V0KCksIGdlbmVy
YXRvci5uZXdUZW1wb3JhcnkoKSwgcHJvZmlsZUhvb2tSZWdpc3Rlci5nZXQoKSwgZGl2b3QoKSwg
c3RhcnRPZmZzZXQoKSwgZW5kT2Zmc2V0KCkpOwogICAgICAgICB9CiAgICAgICAgIGdlbmVyYXRv
ci5lbWl0SnVtcChlbmQuZ2V0KCkpOwogICAgIH0KQEAgLTU5MywxMCArNTk5LDEwIEBAIFJlZ2lz
dGVySUQqIEFwcGx5RnVuY3Rpb25DYWxsRG90Tm9kZTo6ZW0KICAgICB7CiAgICAgICAgIENhbGxB
cmd1bWVudHMgY2FsbEFyZ3VtZW50cyhnZW5lcmF0b3IsIG1fYXJncyk7CiAgICAgICAgIGdlbmVy
YXRvci5lbWl0TW92ZShjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCBiYXNlLmdldCgpKTsK
LSAgICAgICAgZ2VuZXJhdG9yLmVtaXRDYWxsKGZpbmFsRGVzdGluYXRpb25Pcklnbm9yZWQuZ2V0
KCksIGZ1bmN0aW9uLmdldCgpLCBOb0V4cGVjdGVkRnVuY3Rpb24sIGNhbGxBcmd1bWVudHMsIGRp
dm90KCksIHN0YXJ0T2Zmc2V0KCksIGVuZE9mZnNldCgpKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVt
aXRDYWxsKHJldHVyblZhbHVlLmdldCgpLCBmdW5jdGlvbi5nZXQoKSwgTm9FeHBlY3RlZEZ1bmN0
aW9uLCBjYWxsQXJndW1lbnRzLCBkaXZvdCgpLCBzdGFydE9mZnNldCgpLCBlbmRPZmZzZXQoKSk7
CiAgICAgfQogICAgIGdlbmVyYXRvci5lbWl0TGFiZWwoZW5kLmdldCgpKTsKLSAgICByZXR1cm4g
ZmluYWxEZXN0aW5hdGlvbk9ySWdub3JlZC5nZXQoKTsKKyAgICByZXR1cm4gcmV0dXJuVmFsdWUu
Z2V0KCk7CiB9CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBQb3N0Zml4Tm9k
ZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gMTUwOTkz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEyOCw3ICsxMjgsNiBAQCBwdWJsaWM6CiAgICAgICAgICwgbV9ncmFw
aChncmFwaCkKICAgICAgICAgLCBtX2N1cnJlbnRCbG9jaygwKQogICAgICAgICAsIG1fY3VycmVu
dEluZGV4KDApCi0gICAgICAgICwgbV9jdXJyZW50UHJvZmlsaW5nSW5kZXgoMCkKICAgICAgICAg
LCBtX2NvbnN0YW50VW5kZWZpbmVkKFVJTlRfTUFYKQogICAgICAgICAsIG1fY29uc3RhbnROdWxs
KFVJTlRfTUFYKQogICAgICAgICAsIG1fY29uc3RhbnROYU4oVUlOVF9NQVgpCkBAIC0xNTksMTkg
KzE1OCwxNyBAQCBwcml2YXRlOgogICAgIHZvaWQgcGFyc2VDb2RlQmxvY2soKTsKIAogICAgIC8v
IEhlbHBlciBmb3IgbWluIGFuZCBtYXguCi0gICAgYm9vbCBoYW5kbGVNaW5NYXgoYm9vbCB1c2Vz
UmVzdWx0LCBpbnQgcmVzdWx0T3BlcmFuZCwgTm9kZVR5cGUgb3AsIGludCByZWdpc3Rlck9mZnNl
dCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKTsKKyAgICBib29sIGhhbmRsZU1pbk1h
eChpbnQgcmVzdWx0T3BlcmFuZCwgTm9kZVR5cGUgb3AsIGludCByZWdpc3Rlck9mZnNldCwgaW50
IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKTsKICAgICAKICAgICAvLyBIYW5kbGUgY2FsbHMu
IFRoaXMgcmVzb2x2ZXMgaXNzdWVzIHN1cnJvdW5kaW5nIGlubGluaW5nIGFuZCBpbnRyaW5zaWNz
LgogICAgIHZvaWQgaGFuZGxlQ2FsbChJbnRlcnByZXRlciosIEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIE5vZGVUeXBlIG9wLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kKTsKICAgICB2
b2lkIGVtaXRGdW5jdGlvbkNoZWNrcyhjb25zdCBDYWxsTGlua1N0YXR1cyYsIE5vZGUqIGNhbGxU
YXJnZXQsIGludCByZWdpc3Rlck9mZnNldCwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCk7CiAgICAg
dm9pZCBlbWl0QXJndW1lbnRQaGFudG9tcyhpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcywgQ29kZVNwZWNpYWxpemF0aW9uS2luZCk7CiAgICAgLy8gSGFu
ZGxlIGlubGluaW5nLiBSZXR1cm4gdHJ1ZSBpZiBpdCBzdWNjZWVkZWQsIGZhbHNlIGlmIHdlIG5l
ZWQgdG8gcGxhbnQgYSBjYWxsLgotICAgIGJvb2wgaGFuZGxlSW5saW5pbmcoYm9vbCB1c2VzUmVz
dWx0LCBOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwgaW50IHJlc3VsdE9wZXJhbmQsIGNvbnN0IENhbGxM
aW5rU3RhdHVzJiwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMsIHVuc2lnbmVkIG5leHRPZmZzZXQsIENvZGVTcGVjaWFsaXphdGlvbktpbmQpOwotICAg
IC8vIEhhbmRsZSBzZXR0aW5nIHRoZSByZXN1bHQgb2YgYW4gaW50cmluc2ljLgotICAgIHZvaWQg
c2V0SW50cmluc2ljUmVzdWx0KGJvb2wgdXNlc1Jlc3VsdCwgaW50IHJlc3VsdE9wZXJhbmQsIE5v
ZGUqKTsKKyAgICBib29sIGhhbmRsZUlubGluaW5nKE5vZGUqIGNhbGxUYXJnZXROb2RlLCBpbnQg
cmVzdWx0T3BlcmFuZCwgY29uc3QgQ2FsbExpbmtTdGF0dXMmLCBpbnQgcmVnaXN0ZXJPZmZzZXQs
IGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgdW5zaWduZWQgbmV4dE9mZnNldCwgQ29k
ZVNwZWNpYWxpemF0aW9uS2luZCk7CiAgICAgLy8gSGFuZGxlIGludHJpbnNpYyBmdW5jdGlvbnMu
IFJldHVybiB0cnVlIGlmIGl0IHN1Y2NlZWRlZCwgZmFsc2UgaWYgd2UgbmVlZCB0byBwbGFudCBh
IGNhbGwuCi0gICAgYm9vbCBoYW5kbGVJbnRyaW5zaWMoYm9vbCB1c2VzUmVzdWx0LCBpbnQgcmVz
dWx0T3BlcmFuZCwgSW50cmluc2ljLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcywgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbik7Ci0gICAgYm9vbCBo
YW5kbGVDb25zdGFudEludGVybmFsRnVuY3Rpb24oYm9vbCB1c2VzUmVzdWx0LCBpbnQgcmVzdWx0
T3BlcmFuZCwgSW50ZXJuYWxGdW5jdGlvbiosIGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzLCBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uLCBDb2RlU3Bl
Y2lhbGl6YXRpb25LaW5kKTsKKyAgICBib29sIGhhbmRsZUludHJpbnNpYyhpbnQgcmVzdWx0T3Bl
cmFuZCwgSW50cmluc2ljLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcywgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbik7CisgICAgYm9vbCBoYW5kbGVD
b25zdGFudEludGVybmFsRnVuY3Rpb24oaW50IHJlc3VsdE9wZXJhbmQsIEludGVybmFsRnVuY3Rp
b24qLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywg
U3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCk7CiAgICAg
Tm9kZSogaGFuZGxlR2V0QnlPZmZzZXQoU3BlY3VsYXRlZFR5cGUsIE5vZGUqIGJhc2UsIHVuc2ln
bmVkIGlkZW50aWZpZXJOdW1iZXIsIFByb3BlcnR5T2Zmc2V0KTsKICAgICB2b2lkIGhhbmRsZUdl
dEJ5T2Zmc2V0KAogICAgICAgICBpbnQgZGVzdGluYXRpb25PcGVyYW5kLCBTcGVjdWxhdGVkVHlw
ZSwgTm9kZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwKQEAgLTY4NCw3ICs2ODEs
NyBAQCBwcml2YXRlOgogCiAgICAgQ29kZU9yaWdpbiBjdXJyZW50Q29kZU9yaWdpbigpCiAgICAg
ewotICAgICAgICByZXR1cm4gQ29kZU9yaWdpbihtX2N1cnJlbnRJbmRleCwgaW5saW5lQ2FsbEZy
YW1lKCksIG1fY3VycmVudFByb2ZpbGluZ0luZGV4IC0gbV9jdXJyZW50SW5kZXgpOworICAgICAg
ICByZXR1cm4gQ29kZU9yaWdpbihtX2N1cnJlbnRJbmRleCwgaW5saW5lQ2FsbEZyYW1lKCksIDAp
OwogICAgIH0KICAgICAKICAgICBib29sIGNhbkZvbGQoTm9kZSogbm9kZSkKQEAgLTc2NiwyNyAr
NzYzLDIwIEBAIHByaXZhdGU6CiAgICAgCiAgICAgTm9kZSogYWRkQ2FsbChJbnRlcnByZXRlciog
aW50ZXJwcmV0ZXIsIEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIE5vZGVUeXBlIG9w
KQogICAgIHsKLSAgICAgICAgSW5zdHJ1Y3Rpb24qIHB1dEluc3RydWN0aW9uID0gY3VycmVudElu
c3RydWN0aW9uICsgT1BDT0RFX0xFTkdUSChvcF9jYWxsKTsKLQotICAgICAgICBTcGVjdWxhdGVk
VHlwZSBwcmVkaWN0aW9uID0gU3BlY05vbmU7Ci0gICAgICAgIGlmIChpbnRlcnByZXRlci0+Z2V0
T3Bjb2RlSUQocHV0SW5zdHJ1Y3Rpb24tPnUub3Bjb2RlKSA9PSBvcF9jYWxsX3B1dF9yZXN1bHQp
IHsKLSAgICAgICAgICAgIG1fY3VycmVudFByb2ZpbGluZ0luZGV4ID0gbV9jdXJyZW50SW5kZXgg
KyBPUENPREVfTEVOR1RIKG9wX2NhbGwpOwotICAgICAgICAgICAgcHJlZGljdGlvbiA9IGdldFBy
ZWRpY3Rpb24oKTsKLSAgICAgICAgfQorICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9u
ID0gZ2V0UHJlZGljdGlvbigpOwogICAgICAgICAKLSAgICAgICAgYWRkVmFyQXJnQ2hpbGQoZ2V0
KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpKTsKLSAgICAgICAgaW50IGFyZ0NvdW50
ID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKyAgICAgICAgYWRkVmFyQXJnQ2hp
bGQoZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpKTsKKyAgICAgICAgaW50IGFy
Z0NvdW50ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKICAgICAgICAgaWYgKEpT
U3RhY2s6OkNhbGxGcmFtZUhlYWRlclNpemUgKyAodW5zaWduZWQpYXJnQ291bnQgPiBtX3BhcmFt
ZXRlclNsb3RzKQogICAgICAgICAgICAgbV9wYXJhbWV0ZXJTbG90cyA9IEpTU3RhY2s6OkNhbGxG
cmFtZUhlYWRlclNpemUgKyBhcmdDb3VudDsKIAotICAgICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQg
PSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworICAgICAgICBpbnQgcmVnaXN0ZXJP
ZmZzZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kOwogICAgICAgICBpbnQgZHVt
bXlUaGlzQXJndW1lbnQgPSBvcCA9PSBDYWxsID8gMCA6IDE7CiAgICAgICAgIGZvciAoaW50IGkg
PSAwICsgZHVtbXlUaGlzQXJndW1lbnQ7IGkgPCBhcmdDb3VudDsgKytpKQogICAgICAgICAgICAg
YWRkVmFyQXJnQ2hpbGQoZ2V0KHJlZ2lzdGVyT2Zmc2V0ICsgYXJndW1lbnRUb09wZXJhbmQoaSkp
KTsKIAogICAgICAgICBOb2RlKiBjYWxsID0gYWRkVG9HcmFwaChOb2RlOjpWYXJBcmcsIG9wLCBP
cEluZm8oMCksIE9wSW5mbyhwcmVkaWN0aW9uKSk7Ci0gICAgICAgIGlmIChpbnRlcnByZXRlci0+
Z2V0T3Bjb2RlSUQocHV0SW5zdHJ1Y3Rpb24tPnUub3Bjb2RlKSA9PSBvcF9jYWxsX3B1dF9yZXN1
bHQpCi0gICAgICAgICAgICBzZXQocHV0SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBjYWxsKTsK
KyAgICAgICAgc2V0KGN1cnJlbnRJbnN0dXJjdGlvblsxXS51Lm9wZXJhbmQsIGNhbGwpOwogICAg
ICAgICByZXR1cm4gY2FsbDsKICAgICB9CiAgICAgCkBAIC04MzMsMTIgKzgyMywxMiBAQCBwcml2
YXRlOgogICAgIAogICAgIFNwZWN1bGF0ZWRUeXBlIGdldFByZWRpY3Rpb25XaXRob3V0T1NSRXhp
dCgpCiAgICAgewotICAgICAgICByZXR1cm4gZ2V0UHJlZGljdGlvbldpdGhvdXRPU1JFeGl0KG1f
Y3VycmVudFByb2ZpbGluZ0luZGV4KTsKKyAgICAgICAgcmV0dXJuIGdldFByZWRpY3Rpb25XaXRo
b3V0T1NSRXhpdChtX2N1cnJlbnRJbmRleCk7CiAgICAgfQogICAgIAogICAgIFNwZWN1bGF0ZWRU
eXBlIGdldFByZWRpY3Rpb24oKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGdldFByZWRpY3Rpb24o
bV9jdXJyZW50UHJvZmlsaW5nSW5kZXgpOworICAgICAgICByZXR1cm4gZ2V0UHJlZGljdGlvbiht
X2N1cnJlbnRJbmRleCk7CiAgICAgfQogICAgIAogICAgIEFycmF5TW9kZSBnZXRBcnJheU1vZGUo
QXJyYXlQcm9maWxlKiBwcm9maWxlLCBBcnJheTo6QWN0aW9uIGFjdGlvbikKQEAgLTk3OSw4ICs5
NjksNiBAQCBwcml2YXRlOgogICAgIEJhc2ljQmxvY2sqIG1fY3VycmVudEJsb2NrOwogICAgIC8v
IFRoZSBieXRlY29kZSBpbmRleCBvZiB0aGUgY3VycmVudCBpbnN0cnVjdGlvbiBiZWluZyBnZW5l
cmF0ZWQuCiAgICAgdW5zaWduZWQgbV9jdXJyZW50SW5kZXg7Ci0gICAgLy8gVGhlIGJ5dGVjb2Rl
IGluZGV4IG9mIHRoZSB2YWx1ZSBwcm9maWxlIG9mIHRoZSBjdXJyZW50IGluc3RydWN0aW9uIGJl
aW5nIGdlbmVyYXRlZC4KLSAgICB1bnNpZ25lZCBtX2N1cnJlbnRQcm9maWxpbmdJbmRleDsKIAog
ICAgIC8vIFdlIHVzZSB0aGVzZSB2YWx1ZXMgZHVyaW5nIGNvZGUgZ2VuZXJhdGlvbiwgYW5kIHRv
IGF2b2lkIHRoZSBuZWVkIGZvcgogICAgIC8vIHNwZWNpYWwgaGFuZGxpbmcgd2UgbWFrZSBzdXJl
IHRoZXkgYXJlIGF2YWlsYWJsZSBhcyBjb25zdGFudHMgaW4gdGhlCkBAIC0xMTcyLDcgKzExNjAs
NyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVDYWxsKEludGVycHJlCiB7CiAgICAgQVNT
RVJUKE9QQ09ERV9MRU5HVEgob3BfY2FsbCkgPT0gT1BDT0RFX0xFTkdUSChvcF9jb25zdHJ1Y3Qp
KTsKICAgICAKLSAgICBOb2RlKiBjYWxsVGFyZ2V0ID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsx
XS51Lm9wZXJhbmQpOworICAgIE5vZGUqIGNhbGxUYXJnZXQgPSBnZXQoY3VycmVudEluc3RydWN0
aW9uWzJdLnUub3BlcmFuZCk7CiAgICAgCiAgICAgQ2FsbExpbmtTdGF0dXMgY2FsbExpbmtTdGF0
dXM7CiAKQEAgLTExOTcsMjUgKzExODUsMTUgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxl
Q2FsbChJbnRlcnByZQogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIGludCBhcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcyA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7
Ci0gICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFu
ZDsKKyAgICBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPSBjdXJyZW50SW5zdHJ1Y3Rp
b25bM10udS5vcGVyYW5kOworICAgIGludCByZWdpc3Rlck9mZnNldCA9IGN1cnJlbnRJbnN0cnVj
dGlvbls0XS51Lm9wZXJhbmQ7CiAKLSAgICAvLyBEbyB3ZSBoYXZlIGEgcmVzdWx0PwotICAgIGJv
b2wgdXNlc1Jlc3VsdCA9IGZhbHNlOwotICAgIGludCByZXN1bHRPcGVyYW5kID0gMDsgLy8gbWFr
ZSBjb21waWxlciBoYXBweQorICAgIGludCByZXN1bHRPcGVyYW5kID0gY3VycmVudEluc3RydWN0
aW9uWzFdLnUub3BlcmFuZDsKICAgICB1bnNpZ25lZCBuZXh0T2Zmc2V0ID0gbV9jdXJyZW50SW5k
ZXggKyBPUENPREVfTEVOR1RIKG9wX2NhbGwpOwotICAgIEluc3RydWN0aW9uKiBwdXRJbnN0cnVj
dGlvbiA9IGN1cnJlbnRJbnN0cnVjdGlvbiArIE9QQ09ERV9MRU5HVEgob3BfY2FsbCk7Ci0gICAg
U3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IFNwZWNOb25lOwotICAgIGlmIChpbnRlcnByZXRl
ci0+Z2V0T3Bjb2RlSUQocHV0SW5zdHJ1Y3Rpb24tPnUub3Bjb2RlKSA9PSBvcF9jYWxsX3B1dF9y
ZXN1bHQpIHsKLSAgICAgICAgcmVzdWx0T3BlcmFuZCA9IHB1dEluc3RydWN0aW9uWzFdLnUub3Bl
cmFuZDsKLSAgICAgICAgdXNlc1Jlc3VsdCA9IHRydWU7Ci0gICAgICAgIG1fY3VycmVudFByb2Zp
bGluZ0luZGV4ID0gbmV4dE9mZnNldDsKLSAgICAgICAgcHJlZGljdGlvbiA9IGdldFByZWRpY3Rp
b24oKTsKLSAgICAgICAgbmV4dE9mZnNldCArPSBPUENPREVfTEVOR1RIKG9wX2NhbGxfcHV0X3Jl
c3VsdCk7Ci0gICAgfQorICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSBnZXRQcmVkaWN0
aW9uKCk7CiAKICAgICBpZiAoSW50ZXJuYWxGdW5jdGlvbiogZnVuY3Rpb24gPSBjYWxsTGlua1N0
YXR1cy5pbnRlcm5hbEZ1bmN0aW9uKCkpIHsKLSAgICAgICAgaWYgKGhhbmRsZUNvbnN0YW50SW50
ZXJuYWxGdW5jdGlvbih1c2VzUmVzdWx0LCByZXN1bHRPcGVyYW5kLCBmdW5jdGlvbiwgcmVnaXN0
ZXJPZmZzZXQsIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBwcmVkaWN0aW9uLCBraW5kKSkg
eworICAgICAgICBpZiAoaGFuZGxlQ29uc3RhbnRJbnRlcm5hbEZ1bmN0aW9uKHJlc3VsdE9wZXJh
bmQsIGZ1bmN0aW9uLCByZWdpc3Rlck9mZnNldCwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMs
IHByZWRpY3Rpb24sIGtpbmQpKSB7CiAgICAgICAgICAgICAvLyBUaGlzIHBoYW50b21pbmcgaGFz
IHRvIGJlICphZnRlciogdGhlIGNvZGUgZm9yIHRoZSBpbnRyaW5zaWMsIHRvIHNpZ25pZnkgdGhh
dAogICAgICAgICAgICAgLy8gdGhlIGlucHV0cyBtdXN0IGJlIGtlcHQgYWxpdmUgd2hhdGV2ZXIg
ZXhpdHMgdGhlIGludHJpbnNpYyBtYXkgZG8uCiAgICAgICAgICAgICBhZGRUb0dyYXBoKFBoYW50
b20sIGNhbGxUYXJnZXQpOwpAQCAtMTIzMiwxNCArMTIxMCwxNCBAQCB2b2lkIEJ5dGVDb2RlUGFy
c2VyOjpoYW5kbGVDYWxsKEludGVycHJlCiAgICAgaWYgKGludHJpbnNpYyAhPSBOb0ludHJpbnNp
YykgewogICAgICAgICBlbWl0RnVuY3Rpb25DaGVja3MoY2FsbExpbmtTdGF0dXMsIGNhbGxUYXJn
ZXQsIHJlZ2lzdGVyT2Zmc2V0LCBraW5kKTsKICAgICAgICAgICAgIAotICAgICAgICBpZiAoaGFu
ZGxlSW50cmluc2ljKHVzZXNSZXN1bHQsIHJlc3VsdE9wZXJhbmQsIGludHJpbnNpYywgcmVnaXN0
ZXJPZmZzZXQsIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBwcmVkaWN0aW9uKSkgeworICAg
ICAgICBpZiAoaGFuZGxlSW50cmluc2ljKHJlc3VsdE9wZXJhbmQsIGludHJpbnNpYywgcmVnaXN0
ZXJPZmZzZXQsIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBwcmVkaWN0aW9uKSkgewogICAg
ICAgICAgICAgLy8gVGhpcyBwaGFudG9taW5nIGhhcyB0byBiZSAqYWZ0ZXIqIHRoZSBjb2RlIGZv
ciB0aGUgaW50cmluc2ljLCB0byBzaWduaWZ5IHRoYXQKICAgICAgICAgICAgIC8vIHRoZSBpbnB1
dHMgbXVzdCBiZSBrZXB0IGFsaXZlIHdoYXRldmVyIGV4aXRzIHRoZSBpbnRyaW5zaWMgbWF5IGRv
LgogICAgICAgICAgICAgYWRkVG9HcmFwaChQaGFudG9tLCBjYWxsVGFyZ2V0KTsKICAgICAgICAg
ICAgIGVtaXRBcmd1bWVudFBoYW50b21zKHJlZ2lzdGVyT2Zmc2V0LCBhcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcywga2luZCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICB9
IGVsc2UgaWYgKGhhbmRsZUlubGluaW5nKHVzZXNSZXN1bHQsIGNhbGxUYXJnZXQsIHJlc3VsdE9w
ZXJhbmQsIGNhbGxMaW5rU3RhdHVzLCByZWdpc3Rlck9mZnNldCwgYXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMsIG5leHRPZmZzZXQsIGtpbmQpKQorICAgIH0gZWxzZSBpZiAoaGFuZGxlSW5saW5p
bmcoY2FsbFRhcmdldCwgcmVzdWx0T3BlcmFuZCwgY2FsbExpbmtTdGF0dXMsIHJlZ2lzdGVyT2Zm
c2V0LCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgbmV4dE9mZnNldCwga2luZCkpCiAgICAg
ICAgIHJldHVybjsKICAgICAKICAgICBhZGRDYWxsKGludGVycHJldGVyLCBjdXJyZW50SW5zdHJ1
Y3Rpb24sIG9wKTsKQEAgLTEyNzcsNyArMTI1NSw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmVt
aXRBcmd1bWVudFBoYW50b20KICAgICAgICAgYWRkVG9HcmFwaChQaGFudG9tLCBnZXQocmVnaXN0
ZXJPZmZzZXQgKyBhcmd1bWVudFRvT3BlcmFuZChpKSkpOwogfQogCi1ib29sIEJ5dGVDb2RlUGFy
c2VyOjpoYW5kbGVJbmxpbmluZyhib29sIHVzZXNSZXN1bHQsIE5vZGUqIGNhbGxUYXJnZXROb2Rl
LCBpbnQgcmVzdWx0T3BlcmFuZCwgY29uc3QgQ2FsbExpbmtTdGF0dXMmIGNhbGxMaW5rU3RhdHVz
LCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgdW5z
aWduZWQgbmV4dE9mZnNldCwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQorYm9vbCBCeXRl
Q29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcoTm9kZSogY2FsbFRhcmdldE5vZGUsIGludCByZXN1
bHRPcGVyYW5kLCBjb25zdCBDYWxsTGlua1N0YXR1cyYgY2FsbExpbmtTdGF0dXMsIGludCByZWdp
c3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCB1bnNpZ25lZCBuZXh0
T2Zmc2V0LCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCiB7CiAgICAgLy8gRmlyc3QsIHRo
ZSByZWFsbHkgc2ltcGxlIGNoZWNrczogZG8gd2UgaGF2ZSBhbiBhY3R1YWwgSlMgZnVuY3Rpb24/
CiAgICAgaWYgKCFjYWxsTGlua1N0YXR1cy5leGVjdXRhYmxlKCkpCkBAIC0xMzQ1LDE2ICsxMzIz
LDEzIEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGluaW5nKGJvb2wKICAgICBzaXpl
X3QgYXJndW1lbnRQb3NpdGlvblN0YXJ0ID0gbV9ncmFwaC5tX2FyZ3VtZW50UG9zaXRpb25zLnNp
emUoKTsKIAogICAgIElubGluZVN0YWNrRW50cnkgaW5saW5lU3RhY2tFbnRyeSgKLSAgICAgICAg
dGhpcywgY29kZUJsb2NrLCBjb2RlQmxvY2ssIG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpIC0gMSwK
LSAgICAgICAgY2FsbExpbmtTdGF0dXMuZnVuY3Rpb24oKSwgKFZpcnR1YWxSZWdpc3RlciltX2lu
bGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQoCi0gICAgICAgICAgICB1c2VzUmVzdWx0ID8gcmVz
dWx0T3BlcmFuZCA6IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpLAorICAgICAgICB0aGlzLCBjb2Rl
QmxvY2ssIGNvZGVCbG9jaywgbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCkgLSAxLCBjYWxsTGlua1N0
YXR1cy5mdW5jdGlvbigpLAorICAgICAgICAoVmlydHVhbFJlZ2lzdGVyKW1faW5saW5lU3RhY2tU
b3AtPnJlbWFwT3BlcmFuZChyZXN1bHRPcGVyYW5kKSwKICAgICAgICAgKFZpcnR1YWxSZWdpc3Rl
cilpbmxpbmVDYWxsRnJhbWVTdGFydCwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIGtpbmQp
OwogICAgIAogICAgIC8vIFRoaXMgaXMgd2hlcmUgdGhlIGFjdHVhbCBpbmxpbmluZyByZWFsbHkg
aGFwcGVucy4KICAgICB1bnNpZ25lZCBvbGRJbmRleCA9IG1fY3VycmVudEluZGV4OwotICAgIHVu
c2lnbmVkIG9sZFByb2ZpbGluZ0luZGV4ID0gbV9jdXJyZW50UHJvZmlsaW5nSW5kZXg7CiAgICAg
bV9jdXJyZW50SW5kZXggPSAwOwotICAgIG1fY3VycmVudFByb2ZpbGluZ0luZGV4ID0gMDsKIAog
ICAgIGFkZFRvR3JhcGgoSW5saW5lU3RhcnQsIE9wSW5mbyhhcmd1bWVudFBvc2l0aW9uU3RhcnQp
KTsKICAgICBpZiAoY2FsbExpbmtTdGF0dXMuaXNDbG9zdXJlQ2FsbCgpKSB7CkBAIC0xMzY1LDcg
KzEzNDAsNiBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxpbmluZyhib29sCiAgICAg
cGFyc2VDb2RlQmxvY2soKTsKICAgICAKICAgICBtX2N1cnJlbnRJbmRleCA9IG9sZEluZGV4Owot
ICAgIG1fY3VycmVudFByb2ZpbGluZ0luZGV4ID0gb2xkUHJvZmlsaW5nSW5kZXg7CiAgICAgCiAg
ICAgLy8gSWYgdGhlIGlubGluZWQgY29kZSBjcmVhdGVkIHNvbWUgbmV3IGJhc2ljIGJsb2Nrcywg
dGhlbiB3ZSBoYXZlIGxpbmtpbmcgdG8gZG8uCiAgICAgaWYgKGlubGluZVN0YWNrRW50cnkubV9j
YWxsc2l0ZUJsb2NrSGVhZCAhPSBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKSAtIDEpIHsKQEAgLTE0
NjEsMjkgKzE0MzUsMjIgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcoYm9v
bAogICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEJ5dGVDb2RlUGFyc2VyOjpzZXRJbnRyaW5z
aWNSZXN1bHQoYm9vbCB1c2VzUmVzdWx0LCBpbnQgcmVzdWx0T3BlcmFuZCwgTm9kZSogbm9kZSkK
LXsKLSAgICBpZiAoIXVzZXNSZXN1bHQpCi0gICAgICAgIHJldHVybjsKLSAgICBzZXQocmVzdWx0
T3BlcmFuZCwgbm9kZSk7Ci19Ci0KLWJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZU1pbk1heChi
b29sIHVzZXNSZXN1bHQsIGludCByZXN1bHRPcGVyYW5kLCBOb2RlVHlwZSBvcCwgaW50IHJlZ2lz
dGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpCitib29sIEJ5dGVDb2Rl
UGFyc2VyOjpoYW5kbGVNaW5NYXgoaW50IHJlc3VsdE9wZXJhbmQsIE5vZGVUeXBlIG9wLCBpbnQg
cmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcykKIHsKICAgICBp
ZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPT0gMSkgeyAvLyBNYXRoLm1pbigpCi0gICAg
ICAgIHNldEludHJpbnNpY1Jlc3VsdCh1c2VzUmVzdWx0LCByZXN1bHRPcGVyYW5kLCBjb25zdGFu
dE5hTigpKTsKKyAgICAgICAgc2V0KHJlc3VsdE9wZXJhbmQsIGNvbnN0YW50TmFOKCkpOwogICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgIAogICAgIGlmIChhcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcyA9PSAyKSB7IC8vIE1hdGgubWluKHgpCiAgICAgICAgIE5vZGUqIHJlc3VsdCA9
IGdldChyZWdpc3Rlck9mZnNldCArIGFyZ3VtZW50VG9PcGVyYW5kKDEpKTsKICAgICAgICAgYWRk
VG9HcmFwaChQaGFudG9tLCBFZGdlKHJlc3VsdCwgTnVtYmVyVXNlKSk7Ci0gICAgICAgIHNldElu
dHJpbnNpY1Jlc3VsdCh1c2VzUmVzdWx0LCByZXN1bHRPcGVyYW5kLCByZXN1bHQpOworICAgICAg
ICBzZXQocmVzdWx0T3BlcmFuZCwgcmVzdWx0KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
fQogICAgIAogICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9PSAzKSB7IC8vIE1h
dGgubWluKHgsIHkpCi0gICAgICAgIHNldEludHJpbnNpY1Jlc3VsdCh1c2VzUmVzdWx0LCByZXN1
bHRPcGVyYW5kLCBhZGRUb0dyYXBoKG9wLCBnZXQocmVnaXN0ZXJPZmZzZXQgKyBhcmd1bWVudFRv
T3BlcmFuZCgxKSksIGdldChyZWdpc3Rlck9mZnNldCArIGFyZ3VtZW50VG9PcGVyYW5kKDIpKSkp
OworICAgICAgICBzZXQocmVzdWx0T3BlcmFuZCwgYWRkVG9HcmFwaChvcCwgZ2V0KHJlZ2lzdGVy
T2Zmc2V0ICsgYXJndW1lbnRUb09wZXJhbmQoMSkpLCBnZXQocmVnaXN0ZXJPZmZzZXQgKyBhcmd1
bWVudFRvT3BlcmFuZCgyKSkpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIApA
QCAtMTQ5MywxMiArMTQ2MCwxMiBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVNaW5NYXgo
Ym9vbCB1CiAKIC8vIEZJWE1FOiBXZSBkZWFkLWNvZGUtZWxpbWluYXRlIHVudXNlZCBNYXRoIGlu
dHJpbnNpY3MsIGJ1dCB0aGF0J3MgaW52YWxpZCBiZWNhdXNlCiAvLyB0aGV5IG5lZWQgdG8gcGVy
Zm9ybSB0aGUgVG9OdW1iZXIgY29udmVyc2lvbiwgd2hpY2ggY2FuIGhhdmUgc2lkZS1lZmZlY3Rz
LgotYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50cmluc2ljKGJvb2wgdXNlc1Jlc3VsdCwg
aW50IHJlc3VsdE9wZXJhbmQsIEludHJpbnNpYyBpbnRyaW5zaWMsIGludCByZWdpc3Rlck9mZnNl
dCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0
aW9uKQorYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50cmluc2ljKGludCByZXN1bHRPcGVy
YW5kLCBJbnRyaW5zaWMgaW50cmluc2ljLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcywgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbikKIHsKICAgICBz
d2l0Y2ggKGludHJpbnNpYykgewogICAgIGNhc2UgQWJzSW50cmluc2ljOiB7CiAgICAgICAgIGlm
IChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9PSAxKSB7IC8vIE1hdGguYWJzKCkKLSAgICAg
ICAgICAgIHNldEludHJpbnNpY1Jlc3VsdCh1c2VzUmVzdWx0LCByZXN1bHRPcGVyYW5kLCBjb25z
dGFudE5hTigpKTsKKyAgICAgICAgICAgIHNldChyZXN1bHRPcGVyYW5kLCBjb25zdGFudE5hTigp
KTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAKQEAgLTE1MDgsMjYgKzE0
NzUsMjYgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50cmluc2ljKGJvbwogICAgICAg
ICBOb2RlKiBub2RlID0gYWRkVG9HcmFwaChBcml0aEFicywgZ2V0KHJlZ2lzdGVyT2Zmc2V0ICsg
YXJndW1lbnRUb09wZXJhbmQoMSkpKTsKICAgICAgICAgaWYgKG1faW5saW5lU3RhY2tUb3AtPm1f
ZXhpdFByb2ZpbGUuaGFzRXhpdFNpdGUobV9jdXJyZW50SW5kZXgsIE92ZXJmbG93KSkKICAgICAg
ICAgICAgIG5vZGUtPm1lcmdlRmxhZ3MoTm9kZU1heU92ZXJmbG93KTsKLSAgICAgICAgc2V0SW50
cmluc2ljUmVzdWx0KHVzZXNSZXN1bHQsIHJlc3VsdE9wZXJhbmQsIG5vZGUpOworICAgICAgICBz
ZXQocmVzdWx0T3BlcmFuZCwgbm9kZSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIAog
ICAgIGNhc2UgTWluSW50cmluc2ljOgotICAgICAgICByZXR1cm4gaGFuZGxlTWluTWF4KHVzZXNS
ZXN1bHQsIHJlc3VsdE9wZXJhbmQsIEFyaXRoTWluLCByZWdpc3Rlck9mZnNldCwgYXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXMpOworICAgICAgICByZXR1cm4gaGFuZGxlTWluTWF4KHJlc3VsdE9w
ZXJhbmQsIEFyaXRoTWluLCByZWdpc3Rlck9mZnNldCwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMpOwogICAgICAgICAKICAgICBjYXNlIE1heEludHJpbnNpYzoKLSAgICAgICAgcmV0dXJuIGhh
bmRsZU1pbk1heCh1c2VzUmVzdWx0LCByZXN1bHRPcGVyYW5kLCBBcml0aE1heCwgcmVnaXN0ZXJP
ZmZzZXQsIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKTsKKyAgICAgICAgcmV0dXJuIGhhbmRs
ZU1pbk1heChyZXN1bHRPcGVyYW5kLCBBcml0aE1heCwgcmVnaXN0ZXJPZmZzZXQsIGFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzKTsKICAgICAgICAgCiAgICAgY2FzZSBTcXJ0SW50cmluc2ljOiB7
CiAgICAgICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9PSAxKSB7IC8vIE1hdGgu
c3FydCgpCi0gICAgICAgICAgICBzZXRJbnRyaW5zaWNSZXN1bHQodXNlc1Jlc3VsdCwgcmVzdWx0
T3BlcmFuZCwgY29uc3RhbnROYU4oKSk7CisgICAgICAgICAgICBzZXQocmVzdWx0T3BlcmFuZCwg
Y29uc3RhbnROYU4oKSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAg
ICAgICAKICAgICAgICAgaWYgKCFNYWNyb0Fzc2VtYmxlcjo6c3VwcG9ydHNGbG9hdGluZ1BvaW50
U3FydCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAKLSAgICAgICAgc2V0
SW50cmluc2ljUmVzdWx0KHVzZXNSZXN1bHQsIHJlc3VsdE9wZXJhbmQsIGFkZFRvR3JhcGgoQXJp
dGhTcXJ0LCBnZXQocmVnaXN0ZXJPZmZzZXQgKyBhcmd1bWVudFRvT3BlcmFuZCgxKSkpKTsKKwor
ICAgICAgICBzZXQocmVzdWx0T3BlcmFuZCwgYWRkVG9HcmFwaChBcml0aFNxcnQsIGdldChyZWdp
c3Rlck9mZnNldCArIGFyZ3VtZW50VG9PcGVyYW5kKDEpKSkpOwogICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICB9CiAgICAgICAgIApAQCAtMTUzNSw3ICsxNTAyLDcgQEAgYm9vbCBCeXRlQ29kZVBh
cnNlcjo6aGFuZGxlSW50cmluc2ljKGJvbwogICAgICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMgIT0gMikKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgCi0gICAg
ICAgIEFycmF5TW9kZSBhcnJheU1vZGUgPSBnZXRBcnJheU1vZGUobV9jdXJyZW50SW5zdHJ1Y3Rp
b25bNV0udS5hcnJheVByb2ZpbGUpOworICAgICAgICBBcnJheU1vZGUgYXJyYXlNb2RlID0gZ2V0
QXJyYXlNb2RlKG1fY3VycmVudEluc3RydWN0aW9uWzZdLnUuYXJyYXlQcm9maWxlKTsKICAgICAg
ICAgaWYgKCFhcnJheU1vZGUuaXNKU0FycmF5KCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgICAgIHN3aXRjaCAoYXJyYXlNb2RlLnR5cGUoKSkgewpAQCAtMTU0NSw4ICsxNTEyLDcg
QEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50cmluc2ljKGJvbwogICAgICAgICBjYXNl
IEFycmF5OjpDb250aWd1b3VzOgogICAgICAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6IHsK
ICAgICAgICAgICAgIE5vZGUqIGFycmF5UHVzaCA9IGFkZFRvR3JhcGgoQXJyYXlQdXNoLCBPcElu
Zm8oYXJyYXlNb2RlLmFzV29yZCgpKSwgT3BJbmZvKHByZWRpY3Rpb24pLCBnZXQocmVnaXN0ZXJP
ZmZzZXQgKyBhcmd1bWVudFRvT3BlcmFuZCgwKSksIGdldChyZWdpc3Rlck9mZnNldCArIGFyZ3Vt
ZW50VG9PcGVyYW5kKDEpKSk7Ci0gICAgICAgICAgICBpZiAodXNlc1Jlc3VsdCkKLSAgICAgICAg
ICAgICAgICBzZXQocmVzdWx0T3BlcmFuZCwgYXJyYXlQdXNoKTsKKyAgICAgICAgICAgIHNldChy
ZXN1bHRPcGVyYW5kLCBhcnJheVB1c2gpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICByZXR1
cm4gdHJ1ZTsKICAgICAgICAgfQpAQCAtMTU2MCw3ICsxNTI2LDcgQEAgYm9vbCBCeXRlQ29kZVBh
cnNlcjo6aGFuZGxlSW50cmluc2ljKGJvbwogICAgICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMgIT0gMSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgCi0gICAg
ICAgIEFycmF5TW9kZSBhcnJheU1vZGUgPSBnZXRBcnJheU1vZGUobV9jdXJyZW50SW5zdHJ1Y3Rp
b25bNV0udS5hcnJheVByb2ZpbGUpOworICAgICAgICBBcnJheU1vZGUgYXJyYXlNb2RlID0gZ2V0
QXJyYXlNb2RlKG1fY3VycmVudEluc3RydWN0aW9uWzZdLnUuYXJyYXlQcm9maWxlKTsKICAgICAg
ICAgaWYgKCFhcnJheU1vZGUuaXNKU0FycmF5KCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgICAgIHN3aXRjaCAoYXJyYXlNb2RlLnR5cGUoKSkgewpAQCAtMTU2OSw4ICsxNTM1LDcg
QEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50cmluc2ljKGJvbwogICAgICAgICBjYXNl
IEFycmF5OjpDb250aWd1b3VzOgogICAgICAgICBjYXNlIEFycmF5OjpBcnJheVN0b3JhZ2U6IHsK
ICAgICAgICAgICAgIE5vZGUqIGFycmF5UG9wID0gYWRkVG9HcmFwaChBcnJheVBvcCwgT3BJbmZv
KGFycmF5TW9kZS5hc1dvcmQoKSksIE9wSW5mbyhwcmVkaWN0aW9uKSwgZ2V0KHJlZ2lzdGVyT2Zm
c2V0ICsgYXJndW1lbnRUb09wZXJhbmQoMCkpKTsKLSAgICAgICAgICAgIGlmICh1c2VzUmVzdWx0
KQotICAgICAgICAgICAgICAgIHNldChyZXN1bHRPcGVyYW5kLCBhcnJheVBvcCk7CisgICAgICAg
ICAgICBzZXQocmVzdWx0T3BlcmFuZCwgYXJyYXlQb3ApOwogICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgICAgIH0KICAgICAgICAgICAgIApAQCAtMTU4Nyw4ICsxNTUyLDcgQEAgYm9vbCBC
eXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50cmluc2ljKGJvbwogICAgICAgICBpbnQgaW5kZXhPcGVy
YW5kID0gcmVnaXN0ZXJPZmZzZXQgKyBhcmd1bWVudFRvT3BlcmFuZCgxKTsKICAgICAgICAgTm9k
ZSogY2hhckNvZGUgPSBhZGRUb0dyYXBoKFN0cmluZ0NoYXJDb2RlQXQsIE9wSW5mbyhBcnJheU1v
ZGUoQXJyYXk6OlN0cmluZykuYXNXb3JkKCkpLCBnZXQodGhpc09wZXJhbmQpLCBnZXRUb0ludDMy
KGluZGV4T3BlcmFuZCkpOwogCi0gICAgICAgIGlmICh1c2VzUmVzdWx0KQotICAgICAgICAgICAg
c2V0KHJlc3VsdE9wZXJhbmQsIGNoYXJDb2RlKTsKKyAgICAgICAgc2V0KHJlc3VsdE9wZXJhbmQs
IGNoYXJDb2RlKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogCkBAIC0xNjAwLDggKzE1
NjQsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5zaWMoYm9vCiAgICAgICAg
IGludCBpbmRleE9wZXJhbmQgPSByZWdpc3Rlck9mZnNldCArIGFyZ3VtZW50VG9PcGVyYW5kKDEp
OwogICAgICAgICBOb2RlKiBjaGFyQ29kZSA9IGFkZFRvR3JhcGgoU3RyaW5nQ2hhckF0LCBPcElu
Zm8oQXJyYXlNb2RlKEFycmF5OjpTdHJpbmcpLmFzV29yZCgpKSwgZ2V0KHRoaXNPcGVyYW5kKSwg
Z2V0VG9JbnQzMihpbmRleE9wZXJhbmQpKTsKIAotICAgICAgICBpZiAodXNlc1Jlc3VsdCkKLSAg
ICAgICAgICAgIHNldChyZXN1bHRPcGVyYW5kLCBjaGFyQ29kZSk7CisgICAgICAgIHNldChyZXN1
bHRPcGVyYW5kLCBjaGFyQ29kZSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApAQCAt
MTYxMCw4ICsxNTczLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50cmluc2ljKGJv
bwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKICAgICAgICAgTm9kZSogcmVn
RXhwRXhlYyA9IGFkZFRvR3JhcGgoUmVnRXhwRXhlYywgT3BJbmZvKDApLCBPcEluZm8ocHJlZGlj
dGlvbiksIGdldChyZWdpc3Rlck9mZnNldCArIGFyZ3VtZW50VG9PcGVyYW5kKDApKSwgZ2V0KHJl
Z2lzdGVyT2Zmc2V0ICsgYXJndW1lbnRUb09wZXJhbmQoMSkpKTsKLSAgICAgICAgaWYgKHVzZXNS
ZXN1bHQpCi0gICAgICAgICAgICBzZXQocmVzdWx0T3BlcmFuZCwgcmVnRXhwRXhlYyk7CisgICAg
ICAgIHNldChyZXN1bHRPcGVyYW5kLCByZWdFeHBFeGVjKTsKICAgICAgICAgCiAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgIH0KQEAgLTE2MjEsOCArMTU4Myw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJz
ZXI6OmhhbmRsZUludHJpbnNpYyhib28KICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAg
ICAgCiAgICAgICAgIE5vZGUqIHJlZ0V4cEV4ZWMgPSBhZGRUb0dyYXBoKFJlZ0V4cFRlc3QsIE9w
SW5mbygwKSwgT3BJbmZvKHByZWRpY3Rpb24pLCBnZXQocmVnaXN0ZXJPZmZzZXQgKyBhcmd1bWVu
dFRvT3BlcmFuZCgwKSksIGdldChyZWdpc3Rlck9mZnNldCArIGFyZ3VtZW50VG9PcGVyYW5kKDEp
KSk7Ci0gICAgICAgIGlmICh1c2VzUmVzdWx0KQotICAgICAgICAgICAgc2V0KHJlc3VsdE9wZXJh
bmQsIHJlZ0V4cEV4ZWMpOworICAgICAgICBzZXQocmVzdWx0T3BlcmFuZCwgcmVnRXhwRXhlYyk7
CiAgICAgICAgIAogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC0xNjMzLDcgKzE1OTQs
NyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5zaWMoYm9vCiB9CiAKIGJvb2wg
Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUNvbnN0YW50SW50ZXJuYWxGdW5jdGlvbigKLSAgICBib29s
IHVzZXNSZXN1bHQsIGludCByZXN1bHRPcGVyYW5kLCBJbnRlcm5hbEZ1bmN0aW9uKiBmdW5jdGlv
biwgaW50IHJlZ2lzdGVyT2Zmc2V0LAorICAgIGludCByZXN1bHRPcGVyYW5kLCBJbnRlcm5hbEZ1
bmN0aW9uKiBmdW5jdGlvbiwgaW50IHJlZ2lzdGVyT2Zmc2V0LAogICAgIGludCBhcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcywgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiwgQ29kZVNwZWNpYWxp
emF0aW9uS2luZCBraW5kKQogewogICAgIC8vIElmIHdlIGV2ZXIgZmluZCB0aGF0IHdlIGhhdmUg
YSBsb3Qgb2YgaW50ZXJuYWwgZnVuY3Rpb25zIHRoYXQgd2Ugc3BlY2lhbGl6ZSBmb3IsCkBAIC0x
NjQ3LDE2ICsxNjA4LDE0IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUNvbnN0YW50SW50
ZXIKICAgICAKICAgICBpZiAoZnVuY3Rpb24tPmNsYXNzSW5mbygpID09ICZBcnJheUNvbnN0cnVj
dG9yOjpzX2luZm8pIHsKICAgICAgICAgaWYgKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID09
IDIpIHsKLSAgICAgICAgICAgIHNldEludHJpbnNpY1Jlc3VsdCgKLSAgICAgICAgICAgICAgICB1
c2VzUmVzdWx0LCByZXN1bHRPcGVyYW5kLAorICAgICAgICAgICAgc2V0KHJlc3VsdE9wZXJhbmQs
CiAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChOZXdBcnJheVdpdGhTaXplLCBPcEluZm8oQXJy
YXlXaXRoVW5kZWNpZGVkKSwgZ2V0KHJlZ2lzdGVyT2Zmc2V0ICsgYXJndW1lbnRUb09wZXJhbmQo
MSkpKSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICAKICAg
ICAgICAgZm9yIChpbnQgaSA9IDE7IGkgPCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpczsgKytp
KQogICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQoZ2V0KHJlZ2lzdGVyT2Zmc2V0ICsgYXJndW1l
bnRUb09wZXJhbmQoaSkpKTsKLSAgICAgICAgc2V0SW50cmluc2ljUmVzdWx0KAotICAgICAgICAg
ICAgdXNlc1Jlc3VsdCwgcmVzdWx0T3BlcmFuZCwKKyAgICAgICAgc2V0KHJlc3VsdE9wZXJhbmQs
CiAgICAgICAgICAgICBhZGRUb0dyYXBoKE5vZGU6OlZhckFyZywgTmV3QXJyYXksIE9wSW5mbyhB
cnJheVdpdGhVbmRlY2lkZWQpLCBPcEluZm8oMCkpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgfSBlbHNlIGlmIChmdW5jdGlvbi0+Y2xhc3NJbmZvKCkgPT0gJlN0cmluZ0NvbnN0cnVjdG9y
OjpzX2luZm8pIHsKQEAgLTE2NzAsNyArMTYyOSw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6Omhh
bmRsZUNvbnN0YW50SW50ZXIKICAgICAgICAgaWYgKGtpbmQgPT0gQ29kZUZvckNvbnN0cnVjdCkK
ICAgICAgICAgICAgIHJlc3VsdCA9IGFkZFRvR3JhcGgoTmV3U3RyaW5nT2JqZWN0LCBPcEluZm8o
ZnVuY3Rpb24tPmdsb2JhbE9iamVjdCgpLT5zdHJpbmdPYmplY3RTdHJ1Y3R1cmUoKSksIHJlc3Vs
dCk7CiAgICAgICAgIAotICAgICAgICBzZXRJbnRyaW5zaWNSZXN1bHQodXNlc1Jlc3VsdCwgcmVz
dWx0T3BlcmFuZCwgcmVzdWx0KTsKKyAgICAgICAgc2V0KHJlc3VsdE9wZXJhbmQsIHJlc3VsdCk7
CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAKQEAgLTE5ODEsOCArMTk0MCw2IEBA
IGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICB9CiAKICAgICB3
aGlsZSAodHJ1ZSkgewotICAgICAgICBtX2N1cnJlbnRQcm9maWxpbmdJbmRleCA9IG1fY3VycmVu
dEluZGV4OwotCiAgICAgICAgIC8vIERvbid0IGV4dGVuZCBvdmVyIGp1bXAgZGVzdGluYXRpb25z
LgogICAgICAgICBpZiAobV9jdXJyZW50SW5kZXggPT0gbGltaXQpIHsKICAgICAgICAgICAgIC8v
IE9yZGluYXJpbHkgd2Ugd2FudCB0byBwbGFudCBhIGp1bXAuIEJ1dCByZWZ1c2UgdG8gZG8gdGhp
cyBpZiB0aGUgYmxvY2sgaXMKQEAgLTIwMDcsNyArMTk2NCw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJz
ZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgbV9jdXJyZW50SW5zdHJ1Y3Rpb24gPSBj
dXJyZW50SW5zdHJ1Y3Rpb247IC8vIFNvbWUgbWV0aG9kcyB3YW50IHRvIHVzZSB0aGlzLCBhbmQg
d2UnZCByYXRoZXIgbm90IHRocmVhZCBpdCB0aHJvdWdoIGNhbGxzLgogICAgICAgICBPcGNvZGVJ
RCBvcGNvZGVJRCA9IGludGVycHJldGVyLT5nZXRPcGNvZGVJRChjdXJyZW50SW5zdHJ1Y3Rpb24t
PnUub3Bjb2RlKTsKICAgICAgICAgCi0gICAgICAgIGlmIChtX2dyYXBoLmNvbXBpbGF0aW9uKCkg
JiYgb3Bjb2RlSUQgIT0gb3BfY2FsbF9wdXRfcmVzdWx0KSB7CisgICAgICAgIGlmIChtX2dyYXBo
LmNvbXBpbGF0aW9uKCkpIHsKICAgICAgICAgICAgIGFkZFRvR3JhcGgoQ291bnRFeGVjdXRpb24s
IE9wSW5mbyhtX2dyYXBoLmNvbXBpbGF0aW9uKCktPmV4ZWN1dGlvbkNvdW50ZXJGb3IoCiAgICAg
ICAgICAgICAgICAgUHJvZmlsZXI6Ok9yaWdpblN0YWNrKCptX3ZtLT5tX3BlckJ5dGVjb2RlUHJv
ZmlsZXIsIG1fY29kZUJsb2NrLCBjdXJyZW50Q29kZU9yaWdpbigpKSkpKTsKICAgICAgICAgfQpA
QCAtMjAyNywxMCArMTk4NCwxMCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVu
c2lnbmVkCiAgICAgICAgICAgICBpZiAob3AxLT5vcCgpICE9IFRvVGhpcykgewogICAgICAgICAg
ICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1faW5saW5lU3RhY2tUb3AtPm1fcHJv
ZmlsZWRCbG9jay0+bV9sb2NrKTsKICAgICAgICAgICAgICAgICBWYWx1ZVByb2ZpbGUqIHByb2Zp
bGUgPQotICAgICAgICAgICAgICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxv
Y2stPnZhbHVlUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KG1fY3VycmVudFByb2ZpbGluZ0luZGV4
KTsKKyAgICAgICAgICAgICAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2Nr
LT52YWx1ZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChtX2N1cnJlbnRJbmRleCk7CiAgICAgICAg
ICAgICAgICAgcHJvZmlsZS0+Y29tcHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGxvY2tlcik7CiAjaWYg
REZHX0VOQUJMRShERUJVR19WRVJCT1NFKQotICAgICAgICAgICAgICAgIGRhdGFMb2dGKCJbYmMj
JXVdOiBwcm9maWxlICVwOiAiLCBtX2N1cnJlbnRQcm9maWxpbmdJbmRleCwgcHJvZmlsZSk7Cisg
ICAgICAgICAgICAgICAgZGF0YUxvZ0YoIltiYyMldV06IHByb2ZpbGUgJXA6ICIsIG1fY3VycmVu
dEluZGV4LCBwcm9maWxlKTsKICAgICAgICAgICAgICAgICBwcm9maWxlLT5kdW1wKFdURjo6ZGF0
YUZpbGUoKSk7CiAgICAgICAgICAgICAgICAgZGF0YUxvZ0YoIlxuIik7CiAjZW5kaWYKQEAgLTMw
MDIsOCArMjk1OSw4IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQK
ICAgICAgICAgY2FzZSBvcF9yZXQ6CiAgICAgICAgICAgICBmbHVzaEFyZ3VtZW50c0FuZENhcHR1
cmVkVmFyaWFibGVzKCk7CiAgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lKCkpIHsKLSAg
ICAgICAgICAgICAgICBpZiAobV9pbmxpbmVTdGFja1RvcC0+bV9yZXR1cm5WYWx1ZSAhPSBJbnZh
bGlkVmlydHVhbFJlZ2lzdGVyKQotICAgICAgICAgICAgICAgICAgICBzZXREaXJlY3QobV9pbmxp
bmVTdGFja1RvcC0+bV9yZXR1cm5WYWx1ZSwgZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9w
ZXJhbmQpKTsKKyAgICAgICAgICAgICAgICBBU1NFUlQobV9pbmxpbmVTdGFja1RvcC0+bV9yZXR1
cm5WYWx1ZSAhPSBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyKTsKKyAgICAgICAgICAgICAgICBzZXRE
aXJlY3QobV9pbmxpbmVTdGFja1RvcC0+bV9yZXR1cm5WYWx1ZSwgZ2V0KGN1cnJlbnRJbnN0cnVj
dGlvblsxXS51Lm9wZXJhbmQpKTsKICAgICAgICAgICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5t
X2RpZFJldHVybiA9IHRydWU7CiAgICAgICAgICAgICAgICAgaWYgKG1faW5saW5lU3RhY2tUb3At
Pm1fdW5saW5rZWRCbG9ja3MuaXNFbXB0eSgpKSB7CiAgICAgICAgICAgICAgICAgICAgIC8vIElm
IHdlJ3JlIHJldHVybmluZyBmcm9tIHRoZSBmaXJzdCBibG9jaywgdGhlbiB3ZSdyZSBkb25lIHBh
cnNpbmcuCkBAIC0zMDUzLDIwICszMDEwLDE0IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNl
QmxvY2sodW5zaWduZWQKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIG9wX2NhbGxfdmFyYXJn
czogewogICAgICAgICAgICAgQVNTRVJUKGlubGluZUNhbGxGcmFtZSgpKTsKLSAgICAgICAgICAg
IEFTU0VSVChjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kID09IG1faW5saW5lU3RhY2tU
b3AtPm1fY29kZUJsb2NrLT5hcmd1bWVudHNSZWdpc3RlcigpKTsKKyAgICAgICAgICAgIEFTU0VS
VChjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kID09IG1faW5saW5lU3RhY2tUb3AtPm1f
Y29kZUJsb2NrLT5hcmd1bWVudHNSZWdpc3RlcigpKTsKICAgICAgICAgICAgIEFTU0VSVCghbV9p
bmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2stPnN5bWJvbFRhYmxlKCktPnNsb3dBcmd1bWVudHMo
KSk7CiAgICAgICAgICAgICAvLyBJdCB3b3VsZCBiZSBjb29sIHRvIGZ1bm5lbCB0aGlzIGludG8g
aGFuZGxlQ2FsbCgpIHNvIHRoYXQgaXQgY2FuIGhhbmRsZQogICAgICAgICAgICAgLy8gaW5saW5p
bmcuIEJ1dCBjdXJyZW50bHkgdGhhdCB3b24ndCBiZSBwcm9maXRhYmxlIGFueXdheSwgc2luY2Ug
bm9uZSBvZiB0aGUKICAgICAgICAgICAgIC8vIHVzZXMgb2YgY2FsbF92YXJhcmdzIHdpbGwgYmUg
aW5saW5lYWJsZS4gU28gd2Ugc2V0IHRoaXMgdXAgbWFudWFsbHkgYW5kCiAgICAgICAgICAgICAv
LyB3aXRob3V0IGlubGluZS9pbnRyaW5zaWMgZGV0ZWN0aW9uLgogICAgICAgICAgICAgCi0gICAg
ICAgICAgICBJbnN0cnVjdGlvbiogcHV0SW5zdHJ1Y3Rpb24gPSBjdXJyZW50SW5zdHJ1Y3Rpb24g
KyBPUENPREVfTEVOR1RIKG9wX2NhbGxfdmFyYXJncyk7Ci0gICAgICAgICAgICAKLSAgICAgICAg
ICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSBTcGVjTm9uZTsKLSAgICAgICAgICAgIGlm
IChpbnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQocHV0SW5zdHJ1Y3Rpb24tPnUub3Bjb2RlKSA9PSBv
cF9jYWxsX3B1dF9yZXN1bHQpIHsKLSAgICAgICAgICAgICAgICBtX2N1cnJlbnRQcm9maWxpbmdJ
bmRleCA9IG1fY3VycmVudEluZGV4ICsgT1BDT0RFX0xFTkdUSChvcF9jYWxsX3ZhcmFyZ3MpOwot
ICAgICAgICAgICAgICAgIHByZWRpY3Rpb24gPSBnZXRQcmVkaWN0aW9uKCk7Ci0gICAgICAgICAg
ICB9CisgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0gZ2V0UHJlZGljdGlv
bigpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBhZGRUb0dyYXBoKENoZWNrQXJndW1lbnRz
Tm90Q3JlYXRlZCk7CiAgICAgICAgICAgICAKQEAgLTMwNzQsMjEgKzMwMjUsMTcgQEAgYm9vbCBC
eXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgaWYgKEpTU3Rh
Y2s6OkNhbGxGcmFtZUhlYWRlclNpemUgKyBhcmdDb3VudCA+IG1fcGFyYW1ldGVyU2xvdHMpCiAg
ICAgICAgICAgICAgICAgbV9wYXJhbWV0ZXJTbG90cyA9IEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRl
clNpemUgKyBhcmdDb3VudDsKICAgICAgICAgICAgIAotICAgICAgICAgICAgYWRkVmFyQXJnQ2hp
bGQoZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpKTsgLy8gY2FsbGVlCi0gICAg
ICAgICAgICBhZGRWYXJBcmdDaGlsZChnZXQoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFu
ZCkpOyAvLyB0aGlzCisgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChnZXQoY3VycmVudEluc3Ry
dWN0aW9uWzJdLnUub3BlcmFuZCkpOyAvLyBjYWxsZWUKKyAgICAgICAgICAgIGFkZFZhckFyZ0No
aWxkKGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKSk7IC8vIHRoaXMKICAgICAg
ICAgICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQgPSAxOyBhcmd1bWVudCA8IGFyZ0NvdW50OyAr
K2FyZ3VtZW50KQogICAgICAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKGdldChhcmd1bWVudFRv
T3BlcmFuZChhcmd1bWVudCkpKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgTm9kZSogY2Fs
bCA9IGFkZFRvR3JhcGgoTm9kZTo6VmFyQXJnLCBDYWxsLCBPcEluZm8oMCksIE9wSW5mbyhwcmVk
aWN0aW9uKSk7Ci0gICAgICAgICAgICBpZiAoaW50ZXJwcmV0ZXItPmdldE9wY29kZUlEKHB1dElu
c3RydWN0aW9uLT51Lm9wY29kZSkgPT0gb3BfY2FsbF9wdXRfcmVzdWx0KQotICAgICAgICAgICAg
ICAgIHNldChwdXRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIGNhbGwpOworICAgICAgICAgICAg
c2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsCisgICAgICAgICAgICAgICAgYWRk
VG9HcmFwaChOb2RlOjpWYXJBcmcsIENhbGwsIE9wSW5mbygwKSwgT3BJbmZvKHByZWRpY3Rpb24p
KSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2NhbGxfdmFyYXJn
cyk7CiAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICBjYXNlIG9wX2NhbGxfcHV0X3Jl
c3VsdDoKLSAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2NhbGxfcHV0X3Jlc3VsdCk7Ci0gICAg
ICAgICAgICAKICAgICAgICAgY2FzZSBvcF9qbmVxX3B0cjoKICAgICAgICAgICAgIC8vIFN0YXRp
Y2FsbHkgc3BlY3VsYXRlIGZvciBub3cuIEl0IG1ha2VzIHNlbnNlIHRvIGxldCBzcGVjdWxhdGUt
b25seSBqbmVxX3B0cgogICAgICAgICAgICAgLy8gc3VwcG9ydCBzaW1tZXIgZm9yIGEgd2hpbGUg
YmVmb3JlIG1ha2luZyBpdCBtb3JlIGdlbmVyYWwsIHNpbmNlIGl0J3MKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDE1MDk5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM2LDcgKzIzNiw3IEBAIHZvaWQg
SklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKICAgICAgICAgCiAgICAgICAgIE9wY29kZUlE
IG9wY29kZUlEID0gbV9pbnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQoY3VycmVudEluc3RydWN0aW9u
LT51Lm9wY29kZSk7CiAKLSAgICAgICAgaWYgKG1fY29tcGlsYXRpb24gJiYgb3Bjb2RlSUQgIT0g
b3BfY2FsbF9wdXRfcmVzdWx0KSB7CisgICAgICAgIGlmIChtX2NvbXBpbGF0aW9uKSB7CiAgICAg
ICAgICAgICBhZGQ2NCgKICAgICAgICAgICAgICAgICBUcnVzdGVkSW1tMzIoMSksCiAgICAgICAg
ICAgICAgICAgQWJzb2x1dGVBZGRyZXNzKG1fY29tcGlsYXRpb24tPmV4ZWN1dGlvbkNvdW50ZXJG
b3IoUHJvZmlsZXI6Ok9yaWdpblN0YWNrKFByb2ZpbGVyOjpPcmlnaW4oCkBAIC0zNjMsNyArMzYz
LDYgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogICAgICAgICBERUZJTkVf
T1Aob3BfcmVzb2x2ZV93aXRoX2Jhc2UpCiAgICAgICAgIERFRklORV9PUChvcF9yZXNvbHZlX3dp
dGhfdGhpcykKICAgICAgICAgREVGSU5FX09QKG9wX3JldCkKLSAgICAgICAgREVGSU5FX09QKG9w
X2NhbGxfcHV0X3Jlc3VsdCkKICAgICAgICAgREVGSU5FX09QKG9wX3JldF9vYmplY3Rfb3JfdGhp
cykKICAgICAgICAgREVGSU5FX09QKG9wX3JzaGlmdCkKICAgICAgICAgREVGSU5FX09QKG9wX3Vy
c2hpZnQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHJldmlzaW9uIDE1MDk5MykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTQzMSw4
ICs0MzEsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBjb21waWxlT3BDYWxsKE9w
Y29kZUlELCBJbnN0cnVjdGlvbiosIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KTsKICAgICAg
ICAgdm9pZCBjb21waWxlT3BDYWxsU2xvd0Nhc2UoT3Bjb2RlSUQsIEluc3RydWN0aW9uKiwgVmVj
dG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYsIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4
KTsKICAgICAgICAgdm9pZCBjb21waWxlTG9hZFZhcmFyZ3MoSW5zdHJ1Y3Rpb24qKTsKLSAgICAg
ICAgdm9pZCBjb21waWxlQ2FsbEV2YWwoKTsKLSAgICAgICAgdm9pZCBjb21waWxlQ2FsbEV2YWxT
bG93Q2FzZShWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQg
Y29tcGlsZUNhbGxFdmFsKEluc3RydWN0aW9uKik7CisgICAgICAgIHZvaWQgY29tcGlsZUNhbGxF
dmFsU2xvd0Nhc2UoSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
Jik7CisgICAgICAgIHZvaWQgZW1pdFB1dENhbGxSZXN1bHQoSW5zdHJ1Y3Rpb24qKTsKIAogICAg
ICAgICBlbnVtIENvbXBpbGVPcFN0cmljdEVxVHlwZSB7IE9wU3RyaWN0RXEsIE9wTlN0cmljdEVx
IH07CiAgICAgICAgIHZvaWQgY29tcGlsZU9wU3RyaWN0RXEoSW5zdHJ1Y3Rpb24qIGluc3RydWN0
aW9uLCBDb21waWxlT3BTdHJpY3RFcVR5cGUgdHlwZSk7CkBAIC02NDMsNyArNjQ0LDYgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9jYWxsKEluc3RydWN0aW9uKik7CiAg
ICAgICAgIHZvaWQgZW1pdF9vcF9jYWxsX2V2YWwoSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9p
ZCBlbWl0X29wX2NhbGxfdmFyYXJncyhJbnN0cnVjdGlvbiopOwotICAgICAgICB2b2lkIGVtaXRf
b3BfY2FsbF9wdXRfcmVzdWx0KEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9j
YXRjaChJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfY29uc3RydWN0KEluc3Ry
dWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9nZXRfY2FsbGVlKEluc3RydWN0aW9uKik7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAJKHJldmlzaW9uIDE1MDk5
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTUxLDIwICs1MSwxOCBAQCB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1lc3BhY2Ug
SlNDIHsKIAotdm9pZCBKSVQ6OmVtaXRfb3BfY2FsbF9wdXRfcmVzdWx0KEluc3RydWN0aW9uKiBp
bnN0cnVjdGlvbikKK3ZvaWQgSklUOjplbWl0UHV0Q2FsbFJlc3VsdChJbnN0cnVjdGlvbiogaW5z
dHJ1Y3Rpb24pCiB7CiAgICAgaW50IGRzdCA9IGluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKICAg
ICBlbWl0VmFsdWVQcm9maWxpbmdTaXRlKCk7CiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihk
c3QpOwotICAgIGlmIChjYW5CZU9wdGltaXplZE9ySW5saW5lZCgpKQotICAgICAgICBraWxsTGFz
dFJlc3VsdFJlZ2lzdGVyKCk7IC8vIE1ha2UgbGFzdFJlc3VsdFJlZ2lzdGVyIHRyYWNraW5nIHNp
bXBsZXIgaW4gdGhlIERGRy4KIH0KIAogdm9pZCBKSVQ6OmNvbXBpbGVMb2FkVmFyYXJncyhJbnN0
cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCiB7Ci0gICAgaW50IHRoaXNWYWx1ZSA9IGluc3RydWN0aW9u
WzJdLnUub3BlcmFuZDsKLSAgICBpbnQgYXJndW1lbnRzID0gaW5zdHJ1Y3Rpb25bM10udS5vcGVy
YW5kOwotICAgIGludCBmaXJzdEZyZWVSZWdpc3RlciA9IGluc3RydWN0aW9uWzRdLnUub3BlcmFu
ZDsKKyAgICBpbnQgdGhpc1ZhbHVlID0gaW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworICAgIGlu
dCBhcmd1bWVudHMgPSBpbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQ7CisgICAgaW50IGZpcnN0RnJl
ZVJlZ2lzdGVyID0gaW5zdHJ1Y3Rpb25bNV0udS5vcGVyYW5kOwogCiAgICAga2lsbExhc3RSZXN1
bHRSZWdpc3RlcigpOwogCkBAIC0xMjQsNyArMTIyLDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVMb2Fk
VmFyYXJncyhJbnN0cnVjdGlvbgogICAgICAgICBlbmQubGluayh0aGlzKTsKIH0KIAotdm9pZCBK
SVQ6OmNvbXBpbGVDYWxsRXZhbCgpCit2b2lkIEpJVDo6Y29tcGlsZUNhbGxFdmFsKEluc3RydWN0
aW9uKiBpbnN0cnVjdGlvbikKIHsKICAgICBKSVRTdHViQ2FsbCBzdHViQ2FsbCh0aGlzLCBjdGlf
b3BfY2FsbF9ldmFsKTsgLy8gSW5pdGlhbGl6ZXMgU2NvcGVDaGFpbjsgUmV0dXJuUEM7IENvZGVC
bG9jay4KICAgICBzdHViQ2FsbC5jYWxsKCk7CkBAIC0xMzIsOSArMTMwLDExIEBAIHZvaWQgSklU
Ojpjb21waWxlQ2FsbEV2YWwoKQogICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKEpT
U3RhY2s6OkNhbGxlckZyYW1lLCBjYWxsRnJhbWVSZWdpc3Rlcik7CiAKICAgICBzYW1wbGVDb2Rl
QmxvY2sobV9jb2RlQmxvY2spOworICAgIAorICAgIGVtaXRQdXRDYWxsUmVzdWx0KGluc3RydWN0
aW9uKTsKIH0KIAotdm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit2b2lkIEpJVDo6Y29tcGlsZUNhbGxFdmFsU2xv
d0Nhc2UoSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0
ZXJhdG9yJiBpdGVyKQogewogICAgIGxpbmtTbG93Q2FzZShpdGVyKTsKIApAQCAtMTQyLDExICsx
NDIsMTMgQEAgdm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKFZlY3RvcgogICAgIGVt
aXROYWtlZENhbGwobV92bS0+Z2V0Q1RJU3R1Yih2aXJ0dWFsQ2FsbEdlbmVyYXRvcikuY29kZSgp
KTsKIAogICAgIHNhbXBsZUNvZGVCbG9jayhtX2NvZGVCbG9jayk7CisgICAgCisgICAgZW1pdFB1
dENhbGxSZXN1bHQoaW5zdHJ1Y3Rpb24pOwogfQogCiB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChP
cGNvZGVJRCBvcGNvZGVJRCwgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCB1bnNpZ25lZCBjYWxs
TGlua0luZm9JbmRleCkKIHsKLSAgICBpbnQgY2FsbGVlID0gaW5zdHJ1Y3Rpb25bMV0udS5vcGVy
YW5kOworICAgIGludCBjYWxsZWUgPSBpbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7CiAKICAgICAv
KiBDYWxsZXIgYWx3YXlzOgogICAgICAgICAtIFVwZGF0ZXMgY2FsbEZyYW1lUmVnaXN0ZXIgdG8g
Y2FsbGVlIGNhbGxGcmFtZS4KQEAgLTE2NSwxNCArMTY3LDE0IEBAIHZvaWQgSklUOjpjb21waWxl
T3BDYWxsKE9wY29kZUlEIG9wY29kZUkKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfY2FsbF92YXJh
cmdzKQogICAgICAgICBjb21waWxlTG9hZFZhcmFyZ3MoaW5zdHJ1Y3Rpb24pOwogICAgIGVsc2Ug
ewotICAgICAgICBpbnQgYXJnQ291bnQgPSBpbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0gICAg
ICAgIGludCByZWdpc3Rlck9mZnNldCA9IGluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKKyAgICAg
ICAgaW50IGFyZ0NvdW50ID0gaW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworICAgICAgICBpbnQg
cmVnaXN0ZXJPZmZzZXQgPSBpbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQ7CiAKICAgICAgICAgaWYg
KG9wY29kZUlEID09IG9wX2NhbGwgJiYgc2hvdWxkRW1pdFByb2ZpbGluZygpKSB7CiAgICAgICAg
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHJlZ2lzdGVyT2Zmc2V0ICsgQ2FsbEZyYW1lOjph
cmd1bWVudE9mZnNldEluY2x1ZGluZ1RoaXMoMCksIHJlZ1QwKTsKICAgICAgICAgICAgIEp1bXAg
ZG9uZSA9IGVtaXRKdW1wSWZOb3RKU0NlbGwocmVnVDApOwogICAgICAgICAgICAgbG9hZFB0cihB
ZGRyZXNzKHJlZ1QwLCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgcmVnVDApOwotICAgICAg
ICAgICAgc3RvcmVQdHIocmVnVDAsIGluc3RydWN0aW9uWzVdLnUuYXJyYXlQcm9maWxlLT5hZGRy
ZXNzT2ZMYXN0U2VlblN0cnVjdHVyZSgpKTsKKyAgICAgICAgICAgIHN0b3JlUHRyKHJlZ1QwLCBp
bnN0cnVjdGlvbls2XS51LmFycmF5UHJvZmlsZS0+YWRkcmVzc09mTGFzdFNlZW5TdHJ1Y3R1cmUo
KSk7CiAgICAgICAgICAgICBkb25lLmxpbmsodGhpcyk7CiAgICAgICAgIH0KICAgICAKQEAgLTE4
OCw3ICsxOTAsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChPcGNvZGVJRCBvcGNvZGVJCiAg
ICAgbW92ZShyZWdUMSwgY2FsbEZyYW1lUmVnaXN0ZXIpOwogCiAgICAgaWYgKG9wY29kZUlEID09
IG9wX2NhbGxfZXZhbCkgewotICAgICAgICBjb21waWxlQ2FsbEV2YWwoKTsKKyAgICAgICAgY29t
cGlsZUNhbGxFdmFsKGluc3RydWN0aW9uKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAt
MjA5LDEyICsyMTEsMTQgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoT3Bjb2RlSUQgb3Bjb2Rl
SQogICAgIG1fY2FsbFN0cnVjdHVyZVN0dWJDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5k
ZXhdLmhvdFBhdGhPdGhlciA9IGVtaXROYWtlZENhbGwoKTsKIAogICAgIHNhbXBsZUNvZGVCbG9j
ayhtX2NvZGVCbG9jayk7CisgICAgCisgICAgZW1pdFB1dENhbGxSZXN1bHQoaW5zdHJ1Y3Rpb24p
OwogfQogCi12b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKE9wY29kZUlEIG9wY29kZUlE
LCBJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIHVu
c2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KQordm9pZCBKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2Fz
ZShPcGNvZGVJRCBvcGNvZGVJRCwgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBWZWN0b3I8U2xv
d0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCkK
IHsKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfY2FsbF9ldmFsKSB7Ci0gICAgICAgIGNvbXBpbGVD
YWxsRXZhbFNsb3dDYXNlKGl0ZXIpOworICAgICAgICBjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShp
bnN0cnVjdGlvbiwgaXRlcik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTIyMyw2ICsy
MjcsOCBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKE9wY29kZUlECiAgICAgbV9j
YWxsU3RydWN0dXJlU3R1YkNvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uY2FsbFJl
dHVybkxvY2F0aW9uID0gZW1pdE5ha2VkQ2FsbChvcGNvZGVJRCA9PSBvcF9jb25zdHJ1Y3QgPyBt
X3ZtLT5nZXRDVElTdHViKGxpbmtDb25zdHJ1Y3RHZW5lcmF0b3IpLmNvZGUoKSA6IG1fdm0tPmdl
dENUSVN0dWIobGlua0NhbGxHZW5lcmF0b3IpLmNvZGUoKSk7CiAKICAgICBzYW1wbGVDb2RlQmxv
Y2sobV9jb2RlQmxvY2spOworICAgIAorICAgIGVtaXRQdXRDYWxsUmVzdWx0KGluc3RydWN0aW9u
KTsKIH0KIAogdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlQ2xvc3VyZUNhbGwoQ2FsbExpbmtJbmZv
KiBjYWxsTGlua0luZm8sIENvZGVCbG9jayogY2FsbGVlQ29kZUJsb2NrLCBTdHJ1Y3R1cmUqIGV4
cGVjdGVkU3RydWN0dXJlLCBFeGVjdXRhYmxlQmFzZSogZXhwZWN0ZWRFeGVjdXRhYmxlLCBNYWNy
b0Fzc2VtYmxlckNvZGVQdHIgY29kZVB0cikKQEAgLTI3MSw2ICsyNzcsNDYgQEAgdm9pZCBKSVQ6
OnByaXZhdGVDb21waWxlQ2xvc3VyZUNhbGwoQ2FsbAogICAgIGNhbGxMaW5rSW5mby0+c3R1YiA9
IHN0dWJSb3V0aW5lLnJlbGVhc2UoKTsKIH0KIAordm9pZCBKSVQ6OmVtaXRfb3BfY2FsbChJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGNvbXBpbGVPcENhbGwob3BfY2Fs
bCwgY3VycmVudEluc3RydWN0aW9uLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworfQorCit2b2lk
IEpJVDo6ZW1pdF9vcF9jYWxsX2V2YWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikK
K3sKKyAgICBjb21waWxlT3BDYWxsKG9wX2NhbGxfZXZhbCwgY3VycmVudEluc3RydWN0aW9uLCBt
X2NhbGxMaW5rSW5mb0luZGV4KTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfY2FsbF92YXJhcmdz
KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAgY29tcGlsZU9wQ2FsbChv
cF9jYWxsX3ZhcmFyZ3MsIGN1cnJlbnRJbnN0cnVjdGlvbiwgbV9jYWxsTGlua0luZm9JbmRleCsr
KTsKK30KKwordm9pZCBKSVQ6OmVtaXRfb3BfY29uc3RydWN0KEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCit7CisgICAgY29tcGlsZU9wQ2FsbChvcF9jb25zdHJ1Y3QsIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKK30KKwordm9pZCBKSVQ6OmVtaXRT
bG93X29wX2NhbGwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3sKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2Uo
b3BfY2FsbCwgY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4Kysp
OworfQorCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2FsbF9ldmFsKEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCit7
CisgICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlKG9wX2NhbGxfZXZhbCwgY3VycmVudEluc3RydWN0
aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KTsKK30KKyAKK3ZvaWQgSklUOjplbWl0U2xv
d19vcF9jYWxsX3ZhcmFyZ3MoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3sKKyAgICBjb21waWxlT3BDYWxsU2xv
d0Nhc2Uob3BfY2FsbF92YXJhcmdzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExp
bmtJbmZvSW5kZXgrKyk7Cit9CisKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9jb25zdHJ1Y3QoSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKK3sKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2Uob3BfY29uc3RydWN0LCBj
dXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7Cit9CisKIH0g
Ly8gbmFtZXNwYWNlIEpTQwogCiAjZW5kaWYgLy8gVVNFKEpTVkFMVUU2NCkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkocmV2aXNpb24gMTUwOTkzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjQxLDI2ICsyNDEsNiBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9pc19zdHJpbmcoSW5zdHJ1Y3Rp
b24qCiAgICAgZW1pdFB1dFZpcnR1YWxSZWdpc3Rlcihkc3QpOwogfQogCi12b2lkIEpJVDo6ZW1p
dF9vcF9jYWxsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgY29tcGls
ZU9wQ2FsbChvcF9jYWxsLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG1fY2FsbExpbmtJbmZvSW5kZXgr
Kyk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2NhbGxfZXZhbChJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uKQotewotICAgIGNvbXBpbGVPcENhbGwob3BfY2FsbF9ldmFsLCBjdXJyZW50
SW5zdHJ1Y3Rpb24sIG1fY2FsbExpbmtJbmZvSW5kZXgpOwotfQotCi12b2lkIEpJVDo6ZW1pdF9v
cF9jYWxsX3ZhcmFyZ3MoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBj
b21waWxlT3BDYWxsKG9wX2NhbGxfdmFyYXJncywgY3VycmVudEluc3RydWN0aW9uLCBtX2NhbGxM
aW5rSW5mb0luZGV4KyspOwotfQotCi12b2lkIEpJVDo6ZW1pdF9vcF9jb25zdHJ1Y3QoSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBjb21waWxlT3BDYWxsKG9wX2NvbnN0
cnVjdCwgY3VycmVudEluc3RydWN0aW9uLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwotfQotCiB2
b2lkIEpJVDo6ZW1pdF9vcF90ZWFyX29mZl9hY3RpdmF0aW9uKEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24pCiB7CiAgICAgaW50IGFjdGl2YXRpb24gPSBjdXJyZW50SW5zdHJ1Y3Rpb25b
MV0udS5vcGVyYW5kOwpAQCAtMTA5OSwyNiArMTA3OSw2IEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF9pbnN0YW5jZW9mKEluc3RydWMKICAgICBzdHViQ2FsbC5jYWxsKGRzdCk7CiB9CiAKLXZvaWQg
SklUOjplbWl0U2xvd19vcF9jYWxsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgY29tcGlsZU9wQ2Fs
bFNsb3dDYXNlKG9wX2NhbGwsIGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0lu
Zm9JbmRleCsrKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NhbGxfZXZhbChJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9y
JiBpdGVyKQotewotICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZShvcF9jYWxsX2V2YWwsIGN1cnJl
bnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCk7Ci19Ci0gCi12b2lkIEpJ
VDo6ZW1pdFNsb3dfb3BfY2FsbF92YXJhcmdzKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rp
b24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgY29tcGls
ZU9wQ2FsbFNsb3dDYXNlKG9wX2NhbGxfdmFyYXJncywgY3VycmVudEluc3RydWN0aW9uLCBpdGVy
LCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwotfQotCi12b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY29u
c3RydWN0KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVu
dHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNlKG9wX2Nv
bnN0cnVjdCwgY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4Kysp
OwotfQotCiB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdG9fbnVtYmVyKEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7
CiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xs
aW50L0xMSW50U2xvd1BhdGhzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCShyZXZpc2lvbiAxNTA5OTMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xNDYxLDE2ICsxNDYxLDE2IEBAIGlubGluZSBTbG93UGF0aFJldHVyblR5cGUgZ2VuZXJpY0Nh
bGwoRXgKICAgICAvLyAtIElmIHBvc3NpYmxlLCBsaW5rIHRoZSBjYWxsJ3MgaW5saW5lIGNhY2hl
LgogICAgIC8vIC0gUmV0dXJuIGEgdHVwbGUgb2YgbWFjaGluZSBjb2RlIGFkZHJlc3MgdG8gY2Fs
bCBhbmQgdGhlIG5ldyBjYWxsIGZyYW1lLgogICAgIAotICAgIEpTVmFsdWUgY2FsbGVlQXNWYWx1
ZSA9IExMSU5UX09QX0MoMSkuanNWYWx1ZSgpOworICAgIEpTVmFsdWUgY2FsbGVlQXNWYWx1ZSA9
IExMSU5UX09QX0MoMikuanNWYWx1ZSgpOwogICAgIAotICAgIEV4ZWNTdGF0ZSogZXhlY0NhbGxl
ZSA9IGV4ZWMgKyBwY1szXS51Lm9wZXJhbmQ7CisgICAgRXhlY1N0YXRlKiBleGVjQ2FsbGVlID0g
ZXhlYyArIHBjWzRdLnUub3BlcmFuZDsKICAgICAKLSAgICBleGVjQ2FsbGVlLT5zZXRBcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcyhwY1syXS51Lm9wZXJhbmQpOworICAgIGV4ZWNDYWxsZWUtPnNl
dEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKHBjWzNdLnUub3BlcmFuZCk7CiAgICAgZXhlY0Nh
bGxlZS0+dW5jaGVja2VkUihKU1N0YWNrOjpDYWxsZWUpID0gY2FsbGVlQXNWYWx1ZTsKICAgICBl
eGVjQ2FsbGVlLT5zZXRDYWxsZXJGcmFtZShleGVjKTsKICAgICAKLSAgICBBU1NFUlQocGNbNF0u
dS5jYWxsTGlua0luZm8pOwotICAgIHJldHVybiBzZXRVcENhbGwoZXhlY0NhbGxlZSwgcGMsIGtp
bmQsIGNhbGxlZUFzVmFsdWUsIHBjWzRdLnUuY2FsbExpbmtJbmZvKTsKKyAgICBBU1NFUlQocGNb
NV0udS5jYWxsTGlua0luZm8pOworICAgIHJldHVybiBzZXRVcENhbGwoZXhlY0NhbGxlZSwgcGMs
IGtpbmQsIGNhbGxlZUFzVmFsdWUsIHBjWzVdLnUuY2FsbExpbmtJbmZvKTsKIH0KIAogTExJTlRf
U0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2NhbGwpCkBAIC0xNDkzLDExICsxNDkzLDExIEBAIExM
SU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9jYWxsX3ZhcmEKICAgICAvLyAtIEZpZ3VyZSBv
dXQgd2hhdCB0byBjYWxsIGFuZCBjb21waWxlIGl0IGlmIG5lY2Vzc2FyeS4KICAgICAvLyAtIFJl
dHVybiBhIHR1cGxlIG9mIG1hY2hpbmUgY29kZSBhZGRyZXNzIHRvIGNhbGwgYW5kIHRoZSBuZXcg
Y2FsbCBmcmFtZS4KICAgICAKLSAgICBKU1ZhbHVlIGNhbGxlZUFzVmFsdWUgPSBMTElOVF9PUF9D
KDEpLmpzVmFsdWUoKTsKKyAgICBKU1ZhbHVlIGNhbGxlZUFzVmFsdWUgPSBMTElOVF9PUF9DKDIp
LmpzVmFsdWUoKTsKICAgICAKICAgICBFeGVjU3RhdGUqIGV4ZWNDYWxsZWUgPSBsb2FkVmFyYXJn
cygKICAgICAgICAgZXhlYywgJnZtLmludGVycHJldGVyLT5zdGFjaygpLAotICAgICAgICBMTElO
VF9PUF9DKDIpLmpzVmFsdWUoKSwgTExJTlRfT1BfQygzKS5qc1ZhbHVlKCksIHBjWzRdLnUub3Bl
cmFuZCk7CisgICAgICAgIExMSU5UX09QX0MoMykuanNWYWx1ZSgpLCBMTElOVF9PUF9DKDQpLmpz
VmFsdWUoKSwgcGNbNV0udS5vcGVyYW5kKTsKICAgICBMTElOVF9DQUxMX0NIRUNLX0VYQ0VQVElP
TihleGVjLCBwYyk7CiAgICAgCiAgICAgZXhlY0NhbGxlZS0+dW5jaGVja2VkUihKU1N0YWNrOjpD
YWxsZWUpID0gY2FsbGVlQXNWYWx1ZTsKQEAgLTE1MTAsMTEgKzE1MTAsMTEgQEAgTExJTlRfU0xP
V19QQVRIX0RFQ0woc2xvd19wYXRoX2NhbGxfdmFyYQogTExJTlRfU0xPV19QQVRIX0RFQ0woc2xv
d19wYXRoX2NhbGxfZXZhbCkKIHsKICAgICBMTElOVF9CRUdJTl9OT19TRVRfUEMoKTsKLSAgICBK
U1ZhbHVlIGNhbGxlZUFzVmFsdWUgPSBMTElOVF9PUCgxKS5qc1ZhbHVlKCk7CisgICAgSlNWYWx1
ZSBjYWxsZWVBc1ZhbHVlID0gTExJTlRfT1AoMikuanNWYWx1ZSgpOwogICAgIAotICAgIEV4ZWNT
dGF0ZSogZXhlY0NhbGxlZSA9IGV4ZWMgKyBwY1szXS51Lm9wZXJhbmQ7CisgICAgRXhlY1N0YXRl
KiBleGVjQ2FsbGVlID0gZXhlYyArIHBjWzRdLnUub3BlcmFuZDsKICAgICAKLSAgICBleGVjQ2Fs
bGVlLT5zZXRBcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyhwY1syXS51Lm9wZXJhbmQpOworICAg
IGV4ZWNDYWxsZWUtPnNldEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKHBjWzNdLnUub3BlcmFu
ZCk7CiAgICAgZXhlY0NhbGxlZS0+c2V0Q2FsbGVyRnJhbWUoZXhlYyk7CiAgICAgZXhlY0NhbGxl
ZS0+dW5jaGVja2VkUihKU1N0YWNrOjpDYWxsZWUpID0gY2FsbGVlQXNWYWx1ZTsKICAgICBleGVj
Q2FsbGVlLT5zZXRTY29wZShleGVjLT5zY29wZSgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCShy
ZXZpc2lvbiAxNTA5OTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJ
bnRlcnByZXRlcjMyXzY0LmFzbQkod29ya2luZyBjb3B5KQpAQCAtMTYyOSwxNiArMTYyOSw2IEBA
IF9sbGludF9vcF9yZXQ6CiAgICAgZG9SZXR1cm4oKQogCiAKLV9sbGludF9vcF9jYWxsX3B1dF9y
ZXN1bHQ6Ci0gICAgbG9hZGkgNFtQQ10sIHQyCi0gICAgbG9hZGkgOFtQQ10sIHQzCi0gICAgc3Rv
cmVpIHQxLCBUYWdPZmZzZXRbY2ZyLCB0MiwgOF0KLSAgICBzdG9yZWkgdDAsIFBheWxvYWRPZmZz
ZXRbY2ZyLCB0MiwgOF0KLSAgICB2YWx1ZVByb2ZpbGUodDEsIHQwLCB0MykKLSAgICB0cmFjZUV4
ZWN1dGlvbigpICMgTmVlZHMgdG8gYmUgaGVyZSBiZWNhdXNlIGl0IHdvdWxkIGNsb2JiZXIgdDEs
IHQwCi0gICAgZGlzcGF0Y2goMykKLQotCiBfbGxpbnRfb3BfcmV0X29iamVjdF9vcl90aGlzOgog
ICAgIHRyYWNlRXhlY3V0aW9uKCkKICAgICBjaGVja1N3aXRjaFRvSklURm9yRXBpbG9ndWUoKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5h
c20KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50
ZXJwcmV0ZXI2NC5hc20JKHJldmlzaW9uIDE1MDk5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC01NSw3
ICs1NSwxMSBAQCBtYWNybyBkaXNwYXRjaEFmdGVyQ2FsbCgpCiAgICAgbG9hZGkgQXJndW1lbnRD
b3VudCArIFRhZ09mZnNldFtjZnJdLCBQQwogICAgIGxvYWRwIENvZGVCbG9ja1tjZnJdLCBQQgog
ICAgIGxvYWRwIENvZGVCbG9jazo6bV9pbnN0cnVjdGlvbnNbUEJdLCBQQgotICAgIGRpc3BhdGNo
KDYpCisgICAgbG9hZGlzRnJvbUluc3RydWN0aW9uKDEsIHQxKQorICAgIGxvYWRpc0Zyb21JbnN0
cnVjdGlvbig3LCB0MikKKyAgICBzdG9yZXEgdDAsIFtjZnIsIHQxLCA4XQorICAgIHZhbHVlUHJv
ZmlsZSh0MCwgdDIpCisgICAgZGlzcGF0Y2goOCkKIGVuZAogCiBtYWNybyBjQ2FsbDIoZnVuY3Rp
b24sIGFyZzEsIGFyZzIpCkBAIC0xNDEyLDE4ICsxNDE2LDE4IEBAIG1hY3JvIGFycmF5UHJvZmls
ZUZvckNhbGwoKQogZW5kCiAKIG1hY3JvIGRvQ2FsbChzbG93UGF0aCkKLSAgICBsb2FkaXNGcm9t
SW5zdHJ1Y3Rpb24oMSwgdDApCi0gICAgbG9hZHBGcm9tSW5zdHJ1Y3Rpb24oNCwgdDEpCisgICAg
bG9hZGlzRnJvbUluc3RydWN0aW9uKDIsIHQwKQorICAgIGxvYWRwRnJvbUluc3RydWN0aW9uKDUs
IHQxKQogICAgIGxvYWRwIExMSW50Q2FsbExpbmtJbmZvOjpjYWxsZWVbdDFdLCB0MgogICAgIGxv
YWRDb25zdGFudE9yVmFyaWFibGUodDAsIHQzKQogICAgIGJxbmVxIHQzLCB0MiwgLm9wQ2FsbFNs
b3cKLSAgICBsb2FkaXNGcm9tSW5zdHJ1Y3Rpb24oMywgdDMpCisgICAgbG9hZGlzRnJvbUluc3Ry
dWN0aW9uKDQsIHQzKQogICAgIGxzaGlmdGkgMywgdDMKICAgICBhZGRwIGNmciwgdDMKICAgICBs
b2FkcCBKU0Z1bmN0aW9uOjptX3Njb3BlW3QyXSwgdDAKICAgICBzdG9yZXEgdDIsIENhbGxlZVt0
M10KICAgICBzdG9yZXEgdDAsIFNjb3BlQ2hhaW5bdDNdCi0gICAgbG9hZGlzRnJvbUluc3RydWN0
aW9uKDIsIHQyKQorICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlvbigzLCB0MikKICAgICBzdG9yZWkg
UEMsIEFyZ3VtZW50Q291bnQgKyBUYWdPZmZzZXRbY2ZyXQogICAgIHN0b3JlcSBjZnIsIENhbGxl
ckZyYW1lW3QzXQogICAgIHN0b3JlaSB0MiwgQXJndW1lbnRDb3VudCArIFBheWxvYWRPZmZzZXRb
dDNdCkBAIC0xNDYyLDE1ICsxNDY2LDYgQEAgX2xsaW50X29wX3JldDoKICAgICBkb1JldHVybigp
CiAKIAotX2xsaW50X29wX2NhbGxfcHV0X3Jlc3VsdDoKLSAgICBsb2FkaXNGcm9tSW5zdHJ1Y3Rp
b24oMSwgdDIpCi0gICAgbG9hZHBGcm9tSW5zdHJ1Y3Rpb24oMiwgdDMpCi0gICAgc3RvcmVxIHQw
LCBbY2ZyLCB0MiwgOF0KLSAgICB2YWx1ZVByb2ZpbGUodDAsIHQzKQotICAgIHRyYWNlRXhlY3V0
aW9uKCkKLSAgICBkaXNwYXRjaCgzKQotCi0KIF9sbGludF9vcF9yZXRfb2JqZWN0X29yX3RoaXM6
CiAgICAgdHJhY2VFeGVjdXRpb24oKQogICAgIGNoZWNrU3dpdGNoVG9KSVRGb3JFcGlsb2d1ZSgp
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>203407</attachid>
            <date>2013-05-30 20:53:00 -0700</date>
            <delta_ts>2013-05-31 00:49:18 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>78911</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTUxMDA0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwNCBA
QAorMjAxMy0wNS0zMCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IGZvdXJ0aFRpZXI6IGdldCByaWQgb2Ygb3BfY2FsbF9wdXRfcmVzdWx0CisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTcwNDcKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIG9wX2NhbGxfcHV0X3Jl
c3VsdCBpcyBhbiBvZGRiYWxsLiBJdHMgc2VtYW50aWNzIGFyZSB0aGF0IGl0IHRha2VzIHRoZSBy
ZXR1cm4KKyAgICAgICAgdmFsdWUgb2YgYSBjYWxsIGluc3RydWN0aW9uLCB3aGljaCBpcyBzZXQg
YXNpZGUgaW4gcmVnVDAvcmVnVDEsIGFuZCBwbGFjZXMgdGhlbQorICAgICAgICBpbnRvIHNvbWUg
c3RhY2sgc2xvdC4gVGhpcyBpcyB3ZWlyZCBzaW5jZSB0aGVyZSBpcyBhbiBpbXBsaWNpdCBjb250
cmFjdCB3aXRoIHRoZQorICAgICAgICBwcmVjZWRpbmcgYnl0ZWNvZGUgaW5zdHJ1Y3Rpb24sIGFu
ZCBpdCdzIGV2ZW4gd2VpcmRlciBzaW5jZSBpdCBtZWFucyB0aGF0IGl0CisgICAgICAgIGRvZXNu
J3QgbWFrZSBzZW5zZSB0byBqdW1wIHRvIGl0OyBmb3IgZXhhbXBsZSBPU1IgZXhpdCBmcm9tIHRo
ZSBwcmVjZWRpbmcgY2FsbAorICAgICAgICBpbnN0cnVjdGlvbiBtdXN0IG1ha2Ugc3VyZSB0byBq
dW1wIG92ZXIgdGhlIG9wX2NhbGxfcHV0X3Jlc3VsdC4KKyAgICAgICAgCisgICAgICAgIFNvIHRo
aXMgcGF0Y2ggZ2V0cyByaWQgb2Ygb3BfY2FsbF9wdXRfcmVzdWx0OgorICAgICAgICAKKyAgICAg
ICAgLSBJbiBieXRlY29kZSwgYWxsIGNhbGxzIHJldHVybiBhIHZhbHVlIGFuZCB3ZSBhbHdheXMg
YWxsb2NhdGUgYSB0ZW1wb3JhcnkgZm9yCisgICAgICAgICAgdGhhdCB2YWx1ZSBldmVuIGlmIGl0
IGlzbid0IHVzZWQuCisgICAgICAgIAorICAgICAgICAtIFRoZSBMTEludCBkb2VzIHRoZSByZXR1
cm4gdmFsdWUgc2F2aW5nIGFzIHBhcnQgb2YgZGlzcGF0Y2hBZnRlckNhbGwoKS4KKyAgICAgICAg
CisgICAgICAgIC0gVGhlIEpJVCBhbmQgREZHIGRvIHRoZSByZXR1cm4gdmFsdWUgc2F2aW5nIGFz
IHBhcnQgb2Ygbm9ybWFsIGNvZGUgZ2VuZXJhdGlvbi4KKyAgICAgICAgICBUaGUgREZHIGFscmVh
ZHkgZGlkIHRoZSByaWdodCB0aGluZy4KKyAgICAgICAgCisgICAgICAgIC0gREZHLT5KSVQgT1NS
IGV4aXQgaW4gdGhlIGNhc2Ugb2YgaW5saW5pbmcgd2lsbCBtYWtlIHRoZSByZXR1cm4gUEMncyBw
b2ludCBhdAorICAgICAgICAgIHRoZSBDYWxsTGlua0luZm86OmNhbGxSZXR1cm5Mb2NhdGlvbiwg
cmF0aGVyIHRoYW4gdGhlIG1hY2hpbmUgUEMgYXNzb2NpYXRlZAorICAgICAgICAgIHdpdGggdGhl
IG9wX2NhbGxfcHV0X3Jlc3VsdCBpbnN0cnVjdGlvbi4KKyAgICAgICAgCisgICAgICAgIC0gVG9u
cyBvZiBjb2RlIGdldHMgcmVtb3ZlZC4gVGhlIERGRyBoYWQgdG8gdHJhY2sgd2hldGhlciBvciBu
b3QgYSBjYWxsIGhhZCBhCisgICAgICAgICAgcmV0dXJuIHZhbHVlIGluIGEgYnVuY2ggb2YgcGxh
Y2VzLiBJdCBoYWQgdG8gdHJhY2sgdGhlIGZhY3QgdGhhdCB3ZSB3b3VsZAorICAgICAgICAgIGV4
aXQgdG8gYWZ0ZXIgdGhlIG9wX2NhbGxfcHV0X3Jlc3VsdC4gSXQgd2FzIGEgbWVzcy4gVGhhdCBt
ZXNzIGlzIG5vdyBnb25lLgorCisgICAgICAgICogYnl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMuY3Bw
OgorICAgICAgICAoSlNDOjpDYWxsTGlua1N0YXR1czo6Y29tcHV0ZUZyb21MTEludCk6CisgICAg
ICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpw
cmludENhbGxPcCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZHVtcEFycmF5UHJvZmlsaW5n
KToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpkdW1wQnl0ZWNvZGUpOgorICAgICAgICAoSlND
OjpDb2RlQmxvY2s6OkNvZGVCbG9jayk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmg6
CisgICAgICAgICogYnl0ZWNvZGUvT3Bjb2RlLmg6CisgICAgICAgIChKU0MpOgorICAgICAgICAo
SlNDOjpwYWRPcGNvZGVOYW1lKToKKyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5l
cmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENhbGwpOgor
ICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENhbGxWYXJhcmdzKToKKyAgICAg
ICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRDb25zdHJ1Y3QpOgorICAgICAgICAqIGJ5
dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwOgorICAgICAgICAoSlNDOjpOZXdFeHByTm9kZTo6
ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25DYWxsVmFsdWVOb2RlOjplbWl0
Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkNhbGxSZXNvbHZlTm9kZTo6ZW1pdEJ5
dGVjb2RlKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25DYWxsQnJhY2tldE5vZGU6OmVtaXRCeXRl
Y29kZSk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uQ2FsbERvdE5vZGU6OmVtaXRCeXRlY29kZSk6
CisgICAgICAgIChKU0M6OkNhbGxGdW5jdGlvbkNhbGxEb3ROb2RlOjplbWl0Qnl0ZWNvZGUpOgor
ICAgICAgICAoSlNDOjpBcHBseUZ1bmN0aW9uQ2FsbERvdE5vZGU6OmVtaXRCeXRlY29kZSk6Cisg
ICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpC
eXRlQ29kZVBhcnNlcjo6Qnl0ZUNvZGVQYXJzZXIpOgorICAgICAgICAoQnl0ZUNvZGVQYXJzZXIp
OgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpjdXJyZW50Q29kZU9yaWdpbik6
CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmFkZENhbGwpOgorICAgICAgICAo
SlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpnZXRQcmVkaWN0aW9uV2l0aG91dE9TUkV4aXQpOgor
ICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpnZXRQcmVkaWN0aW9uKToKKyAgICAg
ICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlQ2FsbCk6CisgICAgICAgIChKU0M6
OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGluaW5nKToKKyAgICAgICAgKEpTQzo6REZH
OjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlTWluTWF4KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRl
Q29kZVBhcnNlcjo6aGFuZGxlSW50cmluc2ljKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29k
ZVBhcnNlcjo6aGFuZGxlQ29uc3RhbnRJbnRlcm5hbEZ1bmN0aW9uKToKKyAgICAgICAgKEpTQzo6
REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayk6CisgICAgICAgICogZGZnL0RGR0NhcGFi
aWxpdGllcy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Y2FwYWJpbGl0eUxldmVsKToKKyAgICAg
ICAgKiBkZmcvREZHT1NSRXhpdENvbXBpbGVyLmNwcDoKKyAgICAgICAgKiBkZmcvREZHT1NSRXhp
dENvbXBpbGVyQ29tbW9uLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpyZWlmeUlubGluZWRDYWxs
RnJhbWVzKToKKyAgICAgICAgKiBqaXQvSklULmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpwcml2
YXRlQ29tcGlsZU1haW5QYXNzKToKKyAgICAgICAgKiBqaXQvSklULmg6CisgICAgICAgIChKSVQp
OgorICAgICAgICAqIGppdC9KSVRDYWxsLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0UHV0
Q2FsbFJlc3VsdCk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZUxvYWRWYXJhcmdzKToKKyAg
ICAgICAgKEpTQzo6SklUOjpjb21waWxlQ2FsbEV2YWwpOgorICAgICAgICAoSlNDOjpKSVQ6OmNv
bXBpbGVDYWxsRXZhbFNsb3dDYXNlKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlT3BDYWxs
KToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRfb3BfY2FsbCk6CisgICAgICAgIChKU0MpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3BfY2FsbF9ldmFsKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX2NhbGxf
dmFyYXJncyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9jb25zdHJ1Y3QpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2NhbGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRT
bG93X29wX2NhbGxfZXZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfY2FsbF92
YXJhcmdzKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9jb25zdHJ1Y3QpOgorICAg
ICAgICAqIGppdC9KSVRPcGNvZGVzLmNwcDoKKyAgICAgICAgKEpTQyk6CisgICAgICAgICogbGxp
bnQvTExJbnRTbG93UGF0aHMuY3BwOgorICAgICAgICAoSlNDOjpMTEludDo6Z2VuZXJpY0NhbGwp
OgorICAgICAgICAoSlNDOjpMTEludDo6TExJTlRfU0xPV19QQVRIX0RFQ0wpOgorICAgICAgICAq
IGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc206CisgICAgICAgICogbGxpbnQvTG93
TGV2ZWxJbnRlcnByZXRlcjY0LmFzbToKKwogMjAxMy0wNS0zMCAgRmlsaXAgUGl6bG8gIDxmcGl6
bG9AYXBwbGUuY29tPgogCiAgICAgICAgIGZvdXJ0aFRpZXI6IExMSW50IHNob3VsZG4ndCBzdG9y
ZSBhbiBvZmZzZXQgY2FsbCBQQyBkdXJpbmcgb3BfY2FsbC1saWtlIGNhbGxzCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlua1N0YXR1cy5jcHAJKHJl
dmlzaW9uIDE1MDk5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTGlu
a1N0YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg3LDcgKzg3LDcgQEAgQ2FsbExpbmtTdGF0
dXMgQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVGcgogICAgIFVOVVNFRF9QQVJBTShieXRlY29kZUlu
ZGV4KTsKICNpZiBFTkFCTEUoTExJTlQpCiAgICAgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uID0g
cHJvZmlsZWRCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKSArIGJ5dGVjb2RlSW5kZXg7Ci0g
ICAgTExJbnRDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA9IGluc3RydWN0aW9uWzRdLnUuY2Fs
bExpbmtJbmZvOworICAgIExMSW50Q2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gPSBpbnN0cnVj
dGlvbls1XS51LmNhbGxMaW5rSW5mbzsKICAgICAKICAgICByZXR1cm4gQ2FsbExpbmtTdGF0dXMo
Y2FsbExpbmtJbmZvLT5sYXN0U2VlbkNhbGxlZS5nZXQoKSk7CiAjZWxzZQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDE1MDk5
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MTgsMTIgKzQxOCwxMyBAQCB2b2lkIENvZGVCbG9jazo6cHJpbnRHZXRC
eUlkQ2FjaGVTdGF0dXMoCiAjZW5kaWYKIH0KIAotdm9pZCBDb2RlQmxvY2s6OnByaW50Q2FsbE9w
KFByaW50U3RyZWFtJiBvdXQsIEV4ZWNTdGF0ZSosIGludCBsb2NhdGlvbiwgY29uc3QgSW5zdHJ1
Y3Rpb24qJiBpdCwgY29uc3QgY2hhciogb3AsIENhY2hlRHVtcE1vZGUgY2FjaGVEdW1wTW9kZSkK
K3ZvaWQgQ29kZUJsb2NrOjpwcmludENhbGxPcChQcmludFN0cmVhbSYgb3V0LCBFeGVjU3RhdGUq
LCBpbnQgbG9jYXRpb24sIGNvbnN0IEluc3RydWN0aW9uKiYgaXQsIGNvbnN0IGNoYXIqIG9wLCBD
YWNoZUR1bXBNb2RlIGNhY2hlRHVtcE1vZGUsIGJvb2wmIGhhc1ByaW50ZWRQcm9maWxpbmcpCiB7
CisgICAgaW50IGRzdCA9ICgrK2l0KS0+dS5vcGVyYW5kOwogICAgIGludCBmdW5jID0gKCsraXQp
LT51Lm9wZXJhbmQ7CiAgICAgaW50IGFyZ0NvdW50ID0gKCsraXQpLT51Lm9wZXJhbmQ7CiAgICAg
aW50IHJlZ2lzdGVyT2Zmc2V0ID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgb3V0LnByaW50Zigi
WyU0ZF0gJXNcdCAlcywgJWQsICVkIiwgbG9jYXRpb24sIG9wLCByZWdpc3Rlck5hbWUoZnVuYyku
ZGF0YSgpLCBhcmdDb3VudCwgcmVnaXN0ZXJPZmZzZXQpOworICAgIG91dC5wcmludGYoIlslNGRd
ICVzICVzLCAlcywgJWQsICVkIiwgbG9jYXRpb24sIG9wLCByZWdpc3Rlck5hbWUoZHN0KS5kYXRh
KCksIHJlZ2lzdGVyTmFtZShmdW5jKS5kYXRhKCksIGFyZ0NvdW50LCByZWdpc3Rlck9mZnNldCk7
CiAgICAgaWYgKGNhY2hlRHVtcE1vZGUgPT0gRHVtcENhY2hlcykgewogI2lmIEVOQUJMRShMTElO
VCkKICAgICAgICAgTExJbnRDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA9IGl0WzFdLnUuY2Fs
bExpbmtJbmZvOwpAQCAtNDQzLDcgKzQ0NCw5IEBAIHZvaWQgQ29kZUJsb2NrOjpwcmludENhbGxP
cChQcmludFN0cmVhbSYKICNlbmRpZgogICAgICAgICBvdXQucHJpbnQoIiBzdGF0dXMoIiwgQ2Fs
bExpbmtTdGF0dXM6OmNvbXB1dGVGb3IodGhpcywgbG9jYXRpb24pLCAiKSIpOwogICAgIH0KLSAg
ICBpdCArPSAyOworICAgICsraXQ7CisgICAgZHVtcEFycmF5UHJvZmlsaW5nKG91dCwgaXQsIGhh
c1ByaW50ZWRQcm9maWxpbmcpOworICAgIGR1bXBWYWx1ZVByb2ZpbGluZyhvdXQsIGl0LCBoYXNQ
cmludGVkUHJvZmlsaW5nKTsKIH0KIAogdm9pZCBDb2RlQmxvY2s6OnByaW50UHV0QnlJZE9wKFBy
aW50U3RyZWFtJiBvdXQsIEV4ZWNTdGF0ZSosIGludCBsb2NhdGlvbiwgY29uc3QgSW5zdHJ1Y3Rp
b24qJiBpdCwgY29uc3QgY2hhciogb3ApCkBAIC02NjMsNiArNjY2LDggQEAgdm9pZCBDb2RlQmxv
Y2s6OmR1bXBBcnJheVByb2ZpbGluZyhQcmludAogICAgIAogICAgICsraXQ7CiAjaWYgRU5BQkxF
KFZBTFVFX1BST0ZJTEVSKQorICAgIGlmICghaXQtPnUuYXJyYXlQcm9maWxlKQorICAgICAgICBy
ZXR1cm47CiAgICAgQ1N0cmluZyBkZXNjcmlwdGlvbiA9IGl0LT51LmFycmF5UHJvZmlsZS0+YnJp
ZWZEZXNjcmlwdGlvbihsb2NrZXIsIHRoaXMpOwogICAgIGlmICghZGVzY3JpcHRpb24ubGVuZ3Ro
KCkpCiAgICAgICAgIHJldHVybjsKQEAgLTEyODIsMjAgKzEyODcsMjIgQEAgdm9pZCBDb2RlQmxv
Y2s6OmR1bXBCeXRlY29kZShQcmludFN0cmVhbQogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KICAgICAgICAgY2FzZSBvcF9jYWxsOiB7Ci0gICAgICAgICAgICBwcmludENhbGxPcChvdXQs
IGV4ZWMsIGxvY2F0aW9uLCBpdCwgImNhbGwiLCBEdW1wQ2FjaGVzKTsKKyAgICAgICAgICAgIHBy
aW50Q2FsbE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiY2FsbCIsIER1bXBDYWNoZXMsIGhh
c1ByaW50ZWRQcm9maWxpbmcpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAg
ICAgY2FzZSBvcF9jYWxsX2V2YWw6IHsKLSAgICAgICAgICAgIHByaW50Q2FsbE9wKG91dCwgZXhl
YywgbG9jYXRpb24sIGl0LCAiY2FsbF9ldmFsIiwgRG9udER1bXBDYWNoZXMpOworICAgICAgICAg
ICAgcHJpbnRDYWxsT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJjYWxsX2V2YWwiLCBEb250
RHVtcENhY2hlcywgaGFzUHJpbnRlZFByb2ZpbGluZyk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQogICAgICAgICBjYXNlIG9wX2NhbGxfdmFyYXJnczogeworICAgICAgICAgICAgaW50
IHJlc3VsdCA9ICgrK2l0KS0+dS5vcGVyYW5kOwogICAgICAgICAgICAgaW50IGNhbGxlZSA9ICgr
K2l0KS0+dS5vcGVyYW5kOwogICAgICAgICAgICAgaW50IHRoaXNWYWx1ZSA9ICgrK2l0KS0+dS5v
cGVyYW5kOwogICAgICAgICAgICAgaW50IGFyZ3VtZW50cyA9ICgrK2l0KS0+dS5vcGVyYW5kOwog
ICAgICAgICAgICAgaW50IGZpcnN0RnJlZVJlZ2lzdGVyID0gKCsraXQpLT51Lm9wZXJhbmQ7CiAg
ICAgICAgICAgICArK2l0OwotICAgICAgICAgICAgb3V0LnByaW50ZigiWyU0ZF0gY2FsbF92YXJh
cmdzXHQgJXMsICVzLCAlcywgJWQiLCBsb2NhdGlvbiwgcmVnaXN0ZXJOYW1lKGNhbGxlZSkuZGF0
YSgpLCByZWdpc3Rlck5hbWUodGhpc1ZhbHVlKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShhcmd1bWVu
dHMpLmRhdGEoKSwgZmlyc3RGcmVlUmVnaXN0ZXIpOworICAgICAgICAgICAgb3V0LnByaW50Zigi
WyU0ZF0gY2FsbF92YXJhcmdzXHQgJXMsICVzLCAlcywgJXMsICVkIiwgbG9jYXRpb24sIHJlZ2lz
dGVyTmFtZShyZXN1bHQpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKGNhbGxlZSkuZGF0YSgpLCByZWdp
c3Rlck5hbWUodGhpc1ZhbHVlKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShhcmd1bWVudHMpLmRhdGEo
KSwgZmlyc3RGcmVlUmVnaXN0ZXIpOworICAgICAgICAgICAgZHVtcFZhbHVlUHJvZmlsaW5nKG91
dCwgaXQsIGhhc1ByaW50ZWRQcm9maWxpbmcpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KICAgICAgICAgY2FzZSBvcF90ZWFyX29mZl9hY3RpdmF0aW9uOiB7CkBAIC0xMzE0LDEyICsx
MzIxLDYgQEAgdm9pZCBDb2RlQmxvY2s6OmR1bXBCeXRlY29kZShQcmludFN0cmVhbQogICAgICAg
ICAgICAgb3V0LnByaW50ZigiWyU0ZF0gcmV0XHRcdCAlcyIsIGxvY2F0aW9uLCByZWdpc3Rlck5h
bWUocjApLmRhdGEoKSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBj
YXNlIG9wX2NhbGxfcHV0X3Jlc3VsdDogewotICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51
Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBvdXQucHJpbnRmKCJbJTRkXSBjYWxsX3B1dF9yZXN1bHRc
dFx0ICVzIiwgbG9jYXRpb24sIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpKTsKLSAgICAgICAgICAg
IGR1bXBWYWx1ZVByb2ZpbGluZyhvdXQsIGl0LCBoYXNQcmludGVkUHJvZmlsaW5nKTsKLSAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICB9CiAgICAgICAgIGNhc2Ugb3BfcmV0X29iamVjdF9vcl90
aGlzOiB7CiAgICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFuZDsKICAgICAgICAg
ICAgIGludCByMSA9ICgrK2l0KS0+dS5vcGVyYW5kOwpAQCAtMTMyNyw3ICsxMzI4LDcgQEAgdm9p
ZCBDb2RlQmxvY2s6OmR1bXBCeXRlY29kZShQcmludFN0cmVhbQogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBvcF9jb25zdHJ1Y3Q6IHsKLSAgICAgICAgICAgIHBy
aW50Q2FsbE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiY29uc3RydWN0IiwgRHVtcENhY2hl
cyk7CisgICAgICAgICAgICBwcmludENhbGxPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImNv
bnN0cnVjdCIsIER1bXBDYWNoZXMsIGhhc1ByaW50ZWRQcm9maWxpbmcpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBvcF9zdHJjYXQ6IHsKQEAgLTE3ODQsNyAr
MTc4NSw3IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUqIG8KICAgICAg
ICAgfQogICAgICAgICBjYXNlIG9wX3RvX3RoaXM6CiAgICAgICAgIGNhc2Ugb3BfZ2V0X2J5X2lk
OgotICAgICAgICBjYXNlIG9wX2NhbGxfcHV0X3Jlc3VsdDoKKyAgICAgICAgY2FzZSBvcF9jYWxs
X3ZhcmFyZ3M6CiAgICAgICAgIGNhc2Ugb3BfZ2V0X2NhbGxlZTogewogICAgICAgICAgICAgVmFs
dWVQcm9maWxlKiBwcm9maWxlID0gJm1fdmFsdWVQcm9maWxlc1twY1tpICsgb3BMZW5ndGggLSAx
XS51Lm9wZXJhbmRdOwogICAgICAgICAgICAgQVNTRVJUKHByb2ZpbGUtPm1fYnl0ZWNvZGVPZmZz
ZXQgPT0gLTEpOwpAQCAtMTg4NCwyMCArMTg4NSwzMSBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhT
Y3JpcHRFeGVjdXRhYmxlKiBvCiAgICAgICAgIGNhc2Ugb3BfY2FsbDoKICAgICAgICAgY2FzZSBv
cF9jYWxsX2V2YWw6IHsKICNpZiBFTkFCTEUoREZHX0pJVCkKLSAgICAgICAgICAgIGludCBhcnJh
eVByb2ZpbGVJbmRleCA9IHBjW2kgKyBvcExlbmd0aCAtIDFdLnUub3BlcmFuZDsKKyAgICAgICAg
ICAgIFZhbHVlUHJvZmlsZSogcHJvZmlsZSA9ICZtX3ZhbHVlUHJvZmlsZXNbcGNbaSArIG9wTGVu
Z3RoIC0gMV0udS5vcGVyYW5kXTsKKyAgICAgICAgICAgIEFTU0VSVChwcm9maWxlLT5tX2J5dGVj
b2RlT2Zmc2V0ID09IC0xKTsKKyAgICAgICAgICAgIHByb2ZpbGUtPm1fYnl0ZWNvZGVPZmZzZXQg
PSBpOworICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyBvcExlbmd0aCAtIDFdID0gcHJvZmls
ZTsKKyAgICAgICAgICAgIGludCBhcnJheVByb2ZpbGVJbmRleCA9IHBjW2kgKyBvcExlbmd0aCAt
IDJdLnUub3BlcmFuZDsKICAgICAgICAgICAgIG1fYXJyYXlQcm9maWxlc1thcnJheVByb2ZpbGVJ
bmRleF0gPSBBcnJheVByb2ZpbGUoaSk7Ci0gICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIG9w
TGVuZ3RoIC0gMV0gPSAmbV9hcnJheVByb2ZpbGVzW2FycmF5UHJvZmlsZUluZGV4XTsKKyAgICAg
ICAgICAgIGluc3RydWN0aW9uc1tpICsgb3BMZW5ndGggLSAyXSA9ICZtX2FycmF5UHJvZmlsZXNb
YXJyYXlQcm9maWxlSW5kZXhdOwogI2VuZGlmCiAjaWYgRU5BQkxFKExMSU5UKQotICAgICAgICAg
ICAgaW5zdHJ1Y3Rpb25zW2kgKyA0XSA9ICZtX2xsaW50Q2FsbExpbmtJbmZvc1twY1tpICsgNF0u
dS5vcGVyYW5kXTsKKyAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgNV0gPSAmbV9sbGludENh
bGxMaW5rSW5mb3NbcGNbaSArIDVdLnUub3BlcmFuZF07CiAjZW5kaWYKICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfY29uc3RydWN0OgorICAgICAgICBjYXNl
IG9wX2NvbnN0cnVjdDogewogI2lmIEVOQUJMRShMTElOVCkKLSAgICAgICAgICAgIGluc3RydWN0
aW9uc1tpICsgNF0gPSAmbV9sbGludENhbGxMaW5rSW5mb3NbcGNbaSArIDRdLnUub3BlcmFuZF07
CisgICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIDVdID0gJm1fbGxpbnRDYWxsTGlua0luZm9z
W3BjW2kgKyA1XS51Lm9wZXJhbmRdOworI2VuZGlmCisjaWYgRU5BQkxFKERGR19KSVQpCisgICAg
ICAgICAgICBWYWx1ZVByb2ZpbGUqIHByb2ZpbGUgPSAmbV92YWx1ZVByb2ZpbGVzW3BjW2kgKyBv
cExlbmd0aCAtIDFdLnUub3BlcmFuZF07CisgICAgICAgICAgICBBU1NFUlQocHJvZmlsZS0+bV9i
eXRlY29kZU9mZnNldCA9PSAtMSk7CisgICAgICAgICAgICBwcm9maWxlLT5tX2J5dGVjb2RlT2Zm
c2V0ID0gaTsKKyAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgb3BMZW5ndGggLSAxXSA9IHBy
b2ZpbGU7CiAjZW5kaWYKICAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CiAgICAgICAgIGNh
c2Ugb3BfZ2V0X2J5X2lkX291dF9vZl9saW5lOgogICAgICAgICBjYXNlIG9wX2dldF9ieV9pZF9z
ZWxmOgogICAgICAgICBjYXNlIG9wX2dldF9ieV9pZF9wcm90bzoKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDE1MDk5MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpA
QCAtOTUwLDcgKzk1MCw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBwcmludEdldEJ5SWRPcChQcmlu
dFN0cmVhbSYsIEV4ZWNTdGF0ZSosIGludCBsb2NhdGlvbiwgY29uc3QgSW5zdHJ1Y3Rpb24qJik7
CiAgICAgdm9pZCBwcmludEdldEJ5SWRDYWNoZVN0YXR1cyhQcmludFN0cmVhbSYsIEV4ZWNTdGF0
ZSosIGludCBsb2NhdGlvbik7CiAgICAgZW51bSBDYWNoZUR1bXBNb2RlIHsgRHVtcENhY2hlcywg
RG9udER1bXBDYWNoZXMgfTsKLSAgICB2b2lkIHByaW50Q2FsbE9wKFByaW50U3RyZWFtJiwgRXhl
Y1N0YXRlKiwgaW50IGxvY2F0aW9uLCBjb25zdCBJbnN0cnVjdGlvbiomLCBjb25zdCBjaGFyKiBv
cCwgQ2FjaGVEdW1wTW9kZSk7CisgICAgdm9pZCBwcmludENhbGxPcChQcmludFN0cmVhbSYsIEV4
ZWNTdGF0ZSosIGludCBsb2NhdGlvbiwgY29uc3QgSW5zdHJ1Y3Rpb24qJiwgY29uc3QgY2hhciog
b3AsIENhY2hlRHVtcE1vZGUsIGJvb2wmIGhhc1ByaW50ZWRQcm9maWxpbmcpOwogICAgIHZvaWQg
cHJpbnRQdXRCeUlkT3AoUHJpbnRTdHJlYW0mLCBFeGVjU3RhdGUqLCBpbnQgbG9jYXRpb24sIGNv
bnN0IEluc3RydWN0aW9uKiYsIGNvbnN0IGNoYXIqIG9wKTsKICAgICB2b2lkIGJlZ2luRHVtcFBy
b2ZpbGluZyhQcmludFN0cmVhbSYsIGJvb2wmIGhhc1ByaW50ZWRQcm9maWxpbmcpOwogICAgIHZv
aWQgZHVtcFZhbHVlUHJvZmlsaW5nKFByaW50U3RyZWFtJiwgY29uc3QgSW5zdHJ1Y3Rpb24qJiwg
Ym9vbCYgaGFzUHJpbnRlZFByb2ZpbGluZyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvT3Bjb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL09wY29kZS5oCShyZXZpc2lvbiAxNTA5OTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvT3Bjb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTE3OSwxNiArMTc5LDE1IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgIFwKICAgICBtYWNybyhvcF9uZXdfZnVuYywgNCkgXAogICAg
IG1hY3JvKG9wX25ld19mdW5jX2V4cCwgMykgXAotICAgIG1hY3JvKG9wX2NhbGwsIDYpIFwKLSAg
ICBtYWNybyhvcF9jYWxsX2V2YWwsIDYpIFwKLSAgICBtYWNybyhvcF9jYWxsX3ZhcmFyZ3MsIDYp
IFwKKyAgICBtYWNybyhvcF9jYWxsLCA4KSAvKiBoYXMgdmFsdWUgcHJvZmlsaW5nICovIFwKKyAg
ICBtYWNybyhvcF9jYWxsX2V2YWwsIDgpIC8qIGhhcyB2YWx1ZSBwcm9maWxpbmcgKi8gXAorICAg
IG1hY3JvKG9wX2NhbGxfdmFyYXJncywgOCkgLyogaGFzIHZhbHVlIHByb2ZpbGluZyAqLyBcCiAg
ICAgbWFjcm8ob3BfdGVhcl9vZmZfYWN0aXZhdGlvbiwgMikgXAogICAgIG1hY3JvKG9wX3RlYXJf
b2ZmX2FyZ3VtZW50cywgMykgXAogICAgIG1hY3JvKG9wX3JldCwgMikgXAotICAgIG1hY3JvKG9w
X2NhbGxfcHV0X3Jlc3VsdCwgMykgLyogaGFzIHZhbHVlIHByb2ZpbGluZyAqLyBcCiAgICAgbWFj
cm8ob3BfcmV0X29iamVjdF9vcl90aGlzLCAzKSBcCiAgICAgXAotICAgIG1hY3JvKG9wX2NvbnN0
cnVjdCwgNikgXAorICAgIG1hY3JvKG9wX2NvbnN0cnVjdCwgOCkgXAogICAgIG1hY3JvKG9wX3N0
cmNhdCwgNCkgXAogICAgIG1hY3JvKG9wX3RvX3ByaW1pdGl2ZSwgMykgXAogICAgIFwKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNv
ZGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAxNTA5OTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTg0Niw3ICsxODQ2LDEwIEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0Q2Fs
bCgKICAgICAKICAgICAvLyBFbWl0IGNhbGwuCiAgICAgVW5saW5rZWRBcnJheVByb2ZpbGUgYXJy
YXlQcm9maWxlID0gbmV3QXJyYXlQcm9maWxlKCk7Ci0gICAgZW1pdE9wY29kZShvcGNvZGVJRCk7
CisgICAgVW5saW5rZWRWYWx1ZVByb2ZpbGUgcHJvZmlsZSA9IGVtaXRQcm9maWxlZE9wY29kZShv
cGNvZGVJRCk7CisgICAgQVNTRVJUKGRzdCk7CisgICAgQVNTRVJUKGRzdCAhPSBpZ25vcmVkUmVz
dWx0KCkpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChkc3QtPmluZGV4KCkpOyAvLyByZXN1
bHQKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZnVuYy0+aW5kZXgoKSk7IC8vIGZ1bmMKICAg
ICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoY2FsbEFyZ3VtZW50cy5hcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcygpKTsgLy8gYXJnQ291bnQKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoY2FsbEFy
Z3VtZW50cy5yZWdpc3Rlck9mZnNldCgpKTsgLy8gcmVnaXN0ZXJPZmZzZXQKQEAgLTE4NTYsMTEg
KzE4NTksNyBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENhbGwoCiAgICAg
aW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKDApOwogI2VuZGlmCiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBw
ZW5kKGFycmF5UHJvZmlsZSk7Ci0gICAgaWYgKGRzdCAhPSBpZ25vcmVkUmVzdWx0KCkpIHsKLSAg
ICAgICAgVW5saW5rZWRWYWx1ZVByb2ZpbGUgcHJvZmlsZSA9IGVtaXRQcm9maWxlZE9wY29kZShv
cF9jYWxsX3B1dF9yZXN1bHQpOwotICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoa2lsbChk
c3QpKTsKLSAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHByb2ZpbGUpOwotICAgIH0KKyAg
ICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQocHJvZmlsZSk7CiAgICAgCiAgICAgaWYgKGV4cGVjdGVk
RnVuY3Rpb24gIT0gTm9FeHBlY3RlZEZ1bmN0aW9uKQogICAgICAgICBlbWl0TGFiZWwoZG9uZS5n
ZXQoKSk7CkBAIC0xODg0LDE3ICsxODgzLDE1IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJh
dG9yOjplbWl0Q2FsbFYKICAgICBlbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QsIHN0YXJ0T2Zmc2V0
LCBlbmRPZmZzZXQpOwogCiAgICAgLy8gRW1pdCBjYWxsLgotICAgIGVtaXRPcGNvZGUob3BfY2Fs
bF92YXJhcmdzKTsKKyAgICBVbmxpbmtlZFZhbHVlUHJvZmlsZSBwcm9maWxlID0gZW1pdFByb2Zp
bGVkT3Bjb2RlKG9wX2NhbGxfdmFyYXJncyk7CisgICAgQVNTRVJUKGRzdCAhPSBpZ25vcmVkUmVz
dWx0KCkpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChkc3QtPmluZGV4KCkpOwogICAgIGlu
c3RydWN0aW9ucygpLmFwcGVuZChmdW5jLT5pbmRleCgpKTsKICAgICBpbnN0cnVjdGlvbnMoKS5h
cHBlbmQodGhpc1JlZ2lzdGVyLT5pbmRleCgpKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQo
YXJndW1lbnRzLT5pbmRleCgpKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZmlyc3RGcmVl
UmVnaXN0ZXItPmluZGV4KCkpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCgwKTsgLy8gUGFk
IHRvIG1ha2UgaXQgYXMgYmlnIGFzIGFuIG9wX2NhbGwuCi0gICAgaWYgKGRzdCAhPSBpZ25vcmVk
UmVzdWx0KCkpIHsKLSAgICAgICAgVW5saW5rZWRWYWx1ZVByb2ZpbGUgcHJvZmlsZSA9IGVtaXRQ
cm9maWxlZE9wY29kZShvcF9jYWxsX3B1dF9yZXN1bHQpOwotICAgICAgICBpbnN0cnVjdGlvbnMo
KS5hcHBlbmQoa2lsbChkc3QpKTsKLSAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHByb2Zp
bGUpOwotICAgIH0KKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQocHJvZmlsZSk7CiAgICAgaWYg
KG1fc2hvdWxkRW1pdFByb2ZpbGVIb29rcykgewogICAgICAgICBlbWl0T3Bjb2RlKG9wX3Byb2Zp
bGVfZGlkX2NhbGwpOwogICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQocHJvZmlsZUhvb2tS
ZWdpc3Rlci0+aW5kZXgoKSk7CkBAIC0xOTYzLDcgKzE5NjAsOSBAQCBSZWdpc3RlcklEKiBCeXRl
Y29kZUdlbmVyYXRvcjo6ZW1pdENvbnN0CiAgICAgUmVmUHRyPExhYmVsPiBkb25lID0gbmV3TGFi
ZWwoKTsKICAgICBleHBlY3RlZEZ1bmN0aW9uID0gZW1pdEV4cGVjdGVkRnVuY3Rpb25TbmlwcGV0
KGRzdCwgZnVuYywgZXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFyZ3VtZW50cywgZG9uZS5nZXQoKSk7
CiAKLSAgICBlbWl0T3Bjb2RlKG9wX2NvbnN0cnVjdCk7CisgICAgVW5saW5rZWRWYWx1ZVByb2Zp
bGUgcHJvZmlsZSA9IGVtaXRQcm9maWxlZE9wY29kZShvcF9jb25zdHJ1Y3QpOworICAgIEFTU0VS
VChkc3QgIT0gaWdub3JlZFJlc3VsdCgpKTsKKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZHN0
LT5pbmRleCgpKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZnVuYy0+aW5kZXgoKSk7IC8v
IGZ1bmMKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoY2FsbEFyZ3VtZW50cy5hcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcygpKTsgLy8gYXJnQ291bnQKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBl
bmQoY2FsbEFyZ3VtZW50cy5yZWdpc3Rlck9mZnNldCgpKTsgLy8gcmVnaXN0ZXJPZmZzZXQKQEAg
LTE5NzMsMTEgKzE5NzIsNyBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENv
bnN0CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKDApOwogI2VuZGlmCiAgICAgaW5zdHJ1Y3Rp
b25zKCkuYXBwZW5kKDApOwotICAgIGlmIChkc3QgIT0gaWdub3JlZFJlc3VsdCgpKSB7Ci0gICAg
ICAgIFVubGlua2VkVmFsdWVQcm9maWxlIHByb2ZpbGUgPSBlbWl0UHJvZmlsZWRPcGNvZGUob3Bf
Y2FsbF9wdXRfcmVzdWx0KTsKLSAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGtpbGwoZHN0
KSk7Ci0gICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChwcm9maWxlKTsKLSAgICB9CisgICAg
aW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHByb2ZpbGUpOwogCiAgICAgaWYgKGV4cGVjdGVkRnVuY3Rp
b24gIT0gTm9FeHBlY3RlZEZ1bmN0aW9uKQogICAgICAgICBlbWl0TGFiZWwoZG9uZS5nZXQoKSk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rl
c0NvZGVnZW4uY3BwCShyZXZpc2lvbiAxNTA5OTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3Miw4ICsz
NzIsOSBAQCBSZWdpc3RlcklEKiBOZXdFeHByTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5CiAgICAgZWxz
ZQogICAgICAgICBleHBlY3RlZEZ1bmN0aW9uID0gTm9FeHBlY3RlZEZ1bmN0aW9uOwogICAgIFJl
ZlB0cjxSZWdpc3RlcklEPiBmdW5jID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fZXhwcik7CisgICAg
UmVmUHRyPFJlZ2lzdGVySUQ+IHJldHVyblZhbHVlID0gZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRp
b24oZHN0LCBmdW5jLmdldCgpKTsKICAgICBDYWxsQXJndW1lbnRzIGNhbGxBcmd1bWVudHMoZ2Vu
ZXJhdG9yLCBtX2FyZ3MpOwotICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdENvbnN0cnVjdChnZW5l
cmF0b3IuZmluYWxEZXN0aW5hdGlvbk9ySWdub3JlZChkc3QpLCBmdW5jLmdldCgpLCBleHBlY3Rl
ZEZ1bmN0aW9uLCBjYWxsQXJndW1lbnRzLCBkaXZvdCgpLCBzdGFydE9mZnNldCgpLCBlbmRPZmZz
ZXQoKSk7CisgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0Q29uc3RydWN0KHJldHVyblZhbHVlLmdl
dCgpLCBmdW5jLmdldCgpLCBleHBlY3RlZEZ1bmN0aW9uLCBjYWxsQXJndW1lbnRzLCBkaXZvdCgp
LCBzdGFydE9mZnNldCgpLCBlbmRPZmZzZXQoKSk7CiB9CiAKIGlubGluZSBDYWxsQXJndW1lbnRz
OjpDYWxsQXJndW1lbnRzKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIEFyZ3VtZW50c05v
ZGUqIGFyZ3VtZW50c05vZGUpCkBAIC00MTgsOSArNDE5LDEwIEBAIFJlZ2lzdGVySUQqIEV2YWxG
dW5jdGlvbkNhbGxOb2RlOjplbWl0QnkKIFJlZ2lzdGVySUQqIEZ1bmN0aW9uQ2FsbFZhbHVlTm9k
ZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQq
IGRzdCkKIHsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZnVuYyA9IGdlbmVyYXRvci5lbWl0Tm9k
ZShtX2V4cHIpOworICAgIFJlZlB0cjxSZWdpc3RlcklEPiByZXR1cm5WYWx1ZSA9IGdlbmVyYXRv
ci5maW5hbERlc3RpbmF0aW9uKGRzdCwgZnVuYy5nZXQoKSk7CiAgICAgQ2FsbEFyZ3VtZW50cyBj
YWxsQXJndW1lbnRzKGdlbmVyYXRvciwgbV9hcmdzKTsKICAgICBnZW5lcmF0b3IuZW1pdExvYWQo
Y2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwganNVbmRlZmluZWQoKSk7Ci0gICAgcmV0dXJu
IGdlbmVyYXRvci5lbWl0Q2FsbChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbk9ySWdub3JlZChk
c3QsIGZ1bmMuZ2V0KCkpLCBmdW5jLmdldCgpLCBOb0V4cGVjdGVkRnVuY3Rpb24sIGNhbGxBcmd1
bWVudHMsIGRpdm90KCksIHN0YXJ0T2Zmc2V0KCksIGVuZE9mZnNldCgpKTsKKyAgICByZXR1cm4g
Z2VuZXJhdG9yLmVtaXRDYWxsKHJldHVyblZhbHVlLmdldCgpLCBmdW5jLmdldCgpLCBOb0V4cGVj
dGVkRnVuY3Rpb24sIGNhbGxBcmd1bWVudHMsIGRpdm90KCksIHN0YXJ0T2Zmc2V0KCksIGVuZE9m
ZnNldCgpKTsKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEZ1bmN0aW9u
Q2FsbFJlc29sdmVOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KQEAgLTQz
MiwyOCArNDM0LDMxIEBAIFJlZ2lzdGVySUQqIEZ1bmN0aW9uQ2FsbFJlc29sdmVOb2RlOjplbWkK
IAogICAgIGlmIChSZWdpc3RlcklEKiBsb2NhbCA9IHJlc29sdmVSZXN1bHQubG9jYWwoKSkgewog
ICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZnVuYyA9IGdlbmVyYXRvci5lbWl0TW92ZShnZW5l
cmF0b3IudGVtcERlc3RpbmF0aW9uKGRzdCksIGxvY2FsKTsKKyAgICAgICAgUmVmUHRyPFJlZ2lz
dGVySUQ+IHJldHVyblZhbHVlID0gZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0LCBmdW5j
LmdldCgpKTsKICAgICAgICAgQ2FsbEFyZ3VtZW50cyBjYWxsQXJndW1lbnRzKGdlbmVyYXRvciwg
bV9hcmdzKTsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRMb2FkKGNhbGxBcmd1bWVudHMudGhpc1Jl
Z2lzdGVyKCksIGpzVW5kZWZpbmVkKCkpOwogICAgICAgICAvLyBUaGlzIHBhc3NlcyBOb0V4cGVj
dGVkRnVuY3Rpb24gYmVjYXVzZSB3ZSBleHBlY3QgdGhhdCBpZiB0aGUgZnVuY3Rpb24gaXMgaW4g
YQogICAgICAgICAvLyBsb2NhbCB2YXJpYWJsZSwgdGhlbiBpdCdzIG5vdCBvbmUgb2Ygb3VyIGJ1
aWx0LWluIGNvbnN0cnVjdG9ycy4KLSAgICAgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0Q2FsbChn
ZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbk9ySWdub3JlZChkc3QsIGNhbGxBcmd1bWVudHMudGhp
c1JlZ2lzdGVyKCkpLCBmdW5jLmdldCgpLCBOb0V4cGVjdGVkRnVuY3Rpb24sIGNhbGxBcmd1bWVu
dHMsIGRpdm90KCksIHN0YXJ0T2Zmc2V0KCksIGVuZE9mZnNldCgpKTsKKyAgICAgICAgcmV0dXJu
IGdlbmVyYXRvci5lbWl0Q2FsbChyZXR1cm5WYWx1ZS5nZXQoKSwgZnVuYy5nZXQoKSwgTm9FeHBl
Y3RlZEZ1bmN0aW9uLCBjYWxsQXJndW1lbnRzLCBkaXZvdCgpLCBzdGFydE9mZnNldCgpLCBlbmRP
ZmZzZXQoKSk7CiAgICAgfQogCiAgICAgaWYgKHJlc29sdmVSZXN1bHQuaXNTdGF0aWMoKSkgewog
ICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZnVuYyA9IGdlbmVyYXRvci5uZXdUZW1wb3Jhcnko
KTsKKyAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHJldHVyblZhbHVlID0gZ2VuZXJhdG9yLmZp
bmFsRGVzdGluYXRpb24oZHN0LCBmdW5jLmdldCgpKTsKICAgICAgICAgQ2FsbEFyZ3VtZW50cyBj
YWxsQXJndW1lbnRzKGdlbmVyYXRvciwgbV9hcmdzKTsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRH
ZXRTdGF0aWNWYXIoZnVuYy5nZXQoKSwgcmVzb2x2ZVJlc3VsdCwgbV9pZGVudCk7CiAgICAgICAg
IGdlbmVyYXRvci5lbWl0TG9hZChjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCBqc1VuZGVm
aW5lZCgpKTsKLSAgICAgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0Q2FsbChnZW5lcmF0b3IuZmlu
YWxEZXN0aW5hdGlvbk9ySWdub3JlZChkc3QsIGZ1bmMuZ2V0KCkpLCBmdW5jLmdldCgpLCBleHBl
Y3RlZEZ1bmN0aW9uLCBjYWxsQXJndW1lbnRzLCBkaXZvdCgpLCBzdGFydE9mZnNldCgpLCBlbmRP
ZmZzZXQoKSk7CisgICAgICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdENhbGwocmV0dXJuVmFsdWUu
Z2V0KCksIGZ1bmMuZ2V0KCksIGV4cGVjdGVkRnVuY3Rpb24sIGNhbGxBcmd1bWVudHMsIGRpdm90
KCksIHN0YXJ0T2Zmc2V0KCksIGVuZE9mZnNldCgpKTsKICAgICB9CiAKICAgICBSZWZQdHI8UmVn
aXN0ZXJJRD4gZnVuYyA9IGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKTsKKyAgICBSZWZQdHI8UmVn
aXN0ZXJJRD4gcmV0dXJuVmFsdWUgPSBnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIGZ1
bmMuZ2V0KCkpOwogICAgIENhbGxBcmd1bWVudHMgY2FsbEFyZ3VtZW50cyhnZW5lcmF0b3IsIG1f
YXJncyk7CiAgICAgaW50IGlkZW50aWZpZXJTdGFydCA9IGRpdm90KCkgLSBzdGFydE9mZnNldCgp
OwogCiAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhpZGVudGlmaWVyU3RhcnQgKyBt
X2lkZW50Lmxlbmd0aCgpLCBtX2lkZW50Lmxlbmd0aCgpLCAwKTsKICAgICBnZW5lcmF0b3IuZW1p
dFJlc29sdmVXaXRoVGhpcyhjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCBmdW5jLmdldCgp
LCByZXNvbHZlUmVzdWx0LCBtX2lkZW50KTsKLSAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRDYWxs
KGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uT3JJZ25vcmVkKGRzdCwgZnVuYy5nZXQoKSksIGZ1
bmMuZ2V0KCksIGV4cGVjdGVkRnVuY3Rpb24sIGNhbGxBcmd1bWVudHMsIGRpdm90KCksIHN0YXJ0
T2Zmc2V0KCksIGVuZE9mZnNldCgpKTsKKyAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRDYWxsKHJl
dHVyblZhbHVlLmdldCgpLCBmdW5jLmdldCgpLCBleHBlY3RlZEZ1bmN0aW9uLCBjYWxsQXJndW1l
bnRzLCBkaXZvdCgpLCBzdGFydE9mZnNldCgpLCBlbmRPZmZzZXQoKSk7CiB9CiAKIC8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGdW5jdGlvbkNhbGxCcmFja2V0Tm9kZSAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC00NjQsOSArNDY5LDEwIEBAIFJlZ2lzdGVy
SUQqIEZ1bmN0aW9uQ2FsbEJyYWNrZXROb2RlOjplbWkKICAgICBSZWdpc3RlcklEKiBwcm9wZXJ0
eSA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX3N1YnNjcmlwdCk7CiAgICAgZ2VuZXJhdG9yLmVtaXRF
eHByZXNzaW9uSW5mbyhkaXZvdCgpIC0gbV9zdWJleHByZXNzaW9uRGl2b3RPZmZzZXQsIHN0YXJ0
T2Zmc2V0KCkgLSBtX3N1YmV4cHJlc3Npb25EaXZvdE9mZnNldCwgbV9zdWJleHByZXNzaW9uRW5k
T2Zmc2V0KTsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZnVuY3Rpb24gPSBnZW5lcmF0b3IuZW1p
dEdldEJ5VmFsKGdlbmVyYXRvci50ZW1wRGVzdGluYXRpb24oZHN0KSwgYmFzZS5nZXQoKSwgcHJv
cGVydHkpOworICAgIFJlZlB0cjxSZWdpc3RlcklEPiByZXR1cm5WYWx1ZSA9IGdlbmVyYXRvci5m
aW5hbERlc3RpbmF0aW9uKGRzdCwgZnVuY3Rpb24uZ2V0KCkpOwogICAgIENhbGxBcmd1bWVudHMg
Y2FsbEFyZ3VtZW50cyhnZW5lcmF0b3IsIG1fYXJncyk7CiAgICAgZ2VuZXJhdG9yLmVtaXRNb3Zl
KGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIGJhc2UuZ2V0KCkpOwotICAgIHJldHVybiBn
ZW5lcmF0b3IuZW1pdENhbGwoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb25Pcklnbm9yZWQoZHN0
LCBmdW5jdGlvbi5nZXQoKSksIGZ1bmN0aW9uLmdldCgpLCBOb0V4cGVjdGVkRnVuY3Rpb24sIGNh
bGxBcmd1bWVudHMsIGRpdm90KCksIHN0YXJ0T2Zmc2V0KCksIGVuZE9mZnNldCgpKTsKKyAgICBy
ZXR1cm4gZ2VuZXJhdG9yLmVtaXRDYWxsKHJldHVyblZhbHVlLmdldCgpLCBmdW5jdGlvbi5nZXQo
KSwgTm9FeHBlY3RlZEZ1bmN0aW9uLCBjYWxsQXJndW1lbnRzLCBkaXZvdCgpLCBzdGFydE9mZnNl
dCgpLCBlbmRPZmZzZXQoKSk7CiB9CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LSBGdW5jdGlvbkNhbGxEb3ROb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
QEAgLTQ3NCwxMSArNDgwLDEyIEBAIFJlZ2lzdGVySUQqIEZ1bmN0aW9uQ2FsbEJyYWNrZXROb2Rl
OjplbWkKIFJlZ2lzdGVySUQqIEZ1bmN0aW9uQ2FsbERvdE5vZGU6OmVtaXRCeXRlY29kZShCeXRl
Y29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7CiAgICAgUmVmUHRy
PFJlZ2lzdGVySUQ+IGZ1bmN0aW9uID0gZ2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlvbihkc3QpOwor
ICAgIFJlZlB0cjxSZWdpc3RlcklEPiByZXR1cm5WYWx1ZSA9IGdlbmVyYXRvci5maW5hbERlc3Rp
bmF0aW9uKGRzdCwgZnVuY3Rpb24uZ2V0KCkpOwogICAgIENhbGxBcmd1bWVudHMgY2FsbEFyZ3Vt
ZW50cyhnZW5lcmF0b3IsIG1fYXJncyk7CiAgICAgZ2VuZXJhdG9yLmVtaXROb2RlKGNhbGxBcmd1
bWVudHMudGhpc1JlZ2lzdGVyKCksIG1fYmFzZSk7CiAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNz
aW9uSW5mbyhkaXZvdCgpIC0gbV9zdWJleHByZXNzaW9uRGl2b3RPZmZzZXQsIHN0YXJ0T2Zmc2V0
KCkgLSBtX3N1YmV4cHJlc3Npb25EaXZvdE9mZnNldCwgbV9zdWJleHByZXNzaW9uRW5kT2Zmc2V0
KTsKICAgICBnZW5lcmF0b3IuZW1pdEdldEJ5SWQoZnVuY3Rpb24uZ2V0KCksIGNhbGxBcmd1bWVu
dHMudGhpc1JlZ2lzdGVyKCksIG1faWRlbnQpOwotICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdENh
bGwoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb25Pcklnbm9yZWQoZHN0LCBmdW5jdGlvbi5nZXQo
KSksIGZ1bmN0aW9uLmdldCgpLCBOb0V4cGVjdGVkRnVuY3Rpb24sIGNhbGxBcmd1bWVudHMsIGRp
dm90KCksIHN0YXJ0T2Zmc2V0KCksIGVuZE9mZnNldCgpKTsKKyAgICByZXR1cm4gZ2VuZXJhdG9y
LmVtaXRDYWxsKHJldHVyblZhbHVlLmdldCgpLCBmdW5jdGlvbi5nZXQoKSwgTm9FeHBlY3RlZEZ1
bmN0aW9uLCBjYWxsQXJndW1lbnRzLCBkaXZvdCgpLCBzdGFydE9mZnNldCgpLCBlbmRPZmZzZXQo
KSk7CiB9CiAKIFJlZ2lzdGVySUQqIENhbGxGdW5jdGlvbkNhbGxEb3ROb2RlOjplbWl0Qnl0ZWNv
ZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQpAQCAtNDg4
LDcgKzQ5NSw3IEBAIFJlZ2lzdGVySUQqIENhbGxGdW5jdGlvbkNhbGxEb3ROb2RlOjplbWkKICAg
ICBSZWZQdHI8UmVnaXN0ZXJJRD4gYmFzZSA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX2Jhc2UpOwog
ICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSAtIG1fc3ViZXhwcmVzc2lv
bkRpdm90T2Zmc2V0LCBzdGFydE9mZnNldCgpIC0gbV9zdWJleHByZXNzaW9uRGl2b3RPZmZzZXQs
IG1fc3ViZXhwcmVzc2lvbkVuZE9mZnNldCk7CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGZ1bmN0
aW9uID0gZ2VuZXJhdG9yLmVtaXRHZXRCeUlkKGdlbmVyYXRvci50ZW1wRGVzdGluYXRpb24oZHN0
KSwgYmFzZS5nZXQoKSwgbV9pZGVudCk7Ci0gICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGZpbmFsRGVz
dGluYXRpb25Pcklnbm9yZWQgPSBnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbk9ySWdub3JlZChk
c3QsIGZ1bmN0aW9uLmdldCgpKTsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcmV0dXJuVmFsdWUg
PSBnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIGZ1bmN0aW9uLmdldCgpKTsKICAgICBn
ZW5lcmF0b3IuZW1pdEp1bXBJZk5vdEZ1bmN0aW9uQ2FsbChmdW5jdGlvbi5nZXQoKSwgcmVhbENh
bGwuZ2V0KCkpOwogICAgIHsKICAgICAgICAgaWYgKG1fYXJncy0+bV9saXN0Tm9kZSAmJiBtX2Fy
Z3MtPm1fbGlzdE5vZGUtPm1fZXhwcikgewpAQCAtNDk4LDcgKzUwNSw3IEBAIFJlZ2lzdGVySUQq
IENhbGxGdW5jdGlvbkNhbGxEb3ROb2RlOjplbWkKICAgICAgICAgICAgIFJlZlB0cjxSZWdpc3Rl
cklEPiByZWFsRnVuY3Rpb24gPSBnZW5lcmF0b3IuZW1pdE1vdmUoZ2VuZXJhdG9yLnRlbXBEZXN0
aW5hdGlvbihkc3QpLCBiYXNlLmdldCgpKTsKICAgICAgICAgICAgIENhbGxBcmd1bWVudHMgY2Fs
bEFyZ3VtZW50cyhnZW5lcmF0b3IsIG1fYXJncyk7CiAgICAgICAgICAgICBnZW5lcmF0b3IuZW1p
dE5vZGUoY2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwgb2xkTGlzdC0+bV9leHByKTsKLSAg
ICAgICAgICAgIGdlbmVyYXRvci5lbWl0Q2FsbChmaW5hbERlc3RpbmF0aW9uT3JJZ25vcmVkLmdl
dCgpLCByZWFsRnVuY3Rpb24uZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFyZ3VtZW50
cywgZGl2b3QoKSwgc3RhcnRPZmZzZXQoKSwgZW5kT2Zmc2V0KCkpOworICAgICAgICAgICAgZ2Vu
ZXJhdG9yLmVtaXRDYWxsKHJldHVyblZhbHVlLmdldCgpLCByZWFsRnVuY3Rpb24uZ2V0KCksIE5v
RXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFyZ3VtZW50cywgZGl2b3QoKSwgc3RhcnRPZmZzZXQoKSwg
ZW5kT2Zmc2V0KCkpOwogICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1wKGVuZC5nZXQoKSk7
CiAKICAgICAgICAgICAgIG1fYXJncy0+bV9saXN0Tm9kZSA9IG9sZExpc3Q7CkBAIC01MDYsNyAr
NTEzLDcgQEAgUmVnaXN0ZXJJRCogQ2FsbEZ1bmN0aW9uQ2FsbERvdE5vZGU6OmVtaQogICAgICAg
ICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHJlYWxGdW5jdGlvbiA9IGdlbmVyYXRvci5lbWl0TW92
ZShnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKGRzdCksIGJhc2UuZ2V0KCkpOwogICAgICAgICAg
ICAgQ2FsbEFyZ3VtZW50cyBjYWxsQXJndW1lbnRzKGdlbmVyYXRvciwgbV9hcmdzKTsKICAgICAg
ICAgICAgIGdlbmVyYXRvci5lbWl0TG9hZChjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCBq
c1VuZGVmaW5lZCgpKTsKLSAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0Q2FsbChmaW5hbERlc3Rp
bmF0aW9uT3JJZ25vcmVkLmdldCgpLCByZWFsRnVuY3Rpb24uZ2V0KCksIE5vRXhwZWN0ZWRGdW5j
dGlvbiwgY2FsbEFyZ3VtZW50cywgZGl2b3QoKSwgc3RhcnRPZmZzZXQoKSwgZW5kT2Zmc2V0KCkp
OworICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRDYWxsKHJldHVyblZhbHVlLmdldCgpLCByZWFs
RnVuY3Rpb24uZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFyZ3VtZW50cywgZGl2b3Qo
KSwgc3RhcnRPZmZzZXQoKSwgZW5kT2Zmc2V0KCkpOwogICAgICAgICAgICAgZ2VuZXJhdG9yLmVt
aXRKdW1wKGVuZC5nZXQoKSk7CiAgICAgICAgIH0KICAgICB9CkBAIC01MTQsMTAgKzUyMSwxMCBA
QCBSZWdpc3RlcklEKiBDYWxsRnVuY3Rpb25DYWxsRG90Tm9kZTo6ZW1pCiAgICAgewogICAgICAg
ICBDYWxsQXJndW1lbnRzIGNhbGxBcmd1bWVudHMoZ2VuZXJhdG9yLCBtX2FyZ3MpOwogICAgICAg
ICBnZW5lcmF0b3IuZW1pdE1vdmUoY2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwgYmFzZS5n
ZXQoKSk7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0Q2FsbChmaW5hbERlc3RpbmF0aW9uT3JJZ25v
cmVkLmdldCgpLCBmdW5jdGlvbi5nZXQoKSwgTm9FeHBlY3RlZEZ1bmN0aW9uLCBjYWxsQXJndW1l
bnRzLCBkaXZvdCgpLCBzdGFydE9mZnNldCgpLCBlbmRPZmZzZXQoKSk7CisgICAgICAgIGdlbmVy
YXRvci5lbWl0Q2FsbChyZXR1cm5WYWx1ZS5nZXQoKSwgZnVuY3Rpb24uZ2V0KCksIE5vRXhwZWN0
ZWRGdW5jdGlvbiwgY2FsbEFyZ3VtZW50cywgZGl2b3QoKSwgc3RhcnRPZmZzZXQoKSwgZW5kT2Zm
c2V0KCkpOwogICAgIH0KICAgICBnZW5lcmF0b3IuZW1pdExhYmVsKGVuZC5nZXQoKSk7Ci0gICAg
cmV0dXJuIGZpbmFsRGVzdGluYXRpb25Pcklnbm9yZWQuZ2V0KCk7CisgICAgcmV0dXJuIHJldHVy
blZhbHVlLmdldCgpOwogfQogCiBzdGF0aWMgYm9vbCBhcmVUcml2aWFsQXBwbHlBcmd1bWVudHMo
QXJndW1lbnRzTm9kZSogYXJncykKQEAgLTUzOCw3ICs1NDUsNyBAQCBSZWdpc3RlcklEKiBBcHBs
eUZ1bmN0aW9uQ2FsbERvdE5vZGU6OmVtCiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGJhc2UgPSBn
ZW5lcmF0b3IuZW1pdE5vZGUobV9iYXNlKTsKICAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25J
bmZvKGRpdm90KCkgLSBtX3N1YmV4cHJlc3Npb25EaXZvdE9mZnNldCwgc3RhcnRPZmZzZXQoKSAt
IG1fc3ViZXhwcmVzc2lvbkRpdm90T2Zmc2V0LCBtX3N1YmV4cHJlc3Npb25FbmRPZmZzZXQpOwog
ICAgIFJlZlB0cjxSZWdpc3RlcklEPiBmdW5jdGlvbiA9IGdlbmVyYXRvci5lbWl0R2V0QnlJZChn
ZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKGRzdCksIGJhc2UuZ2V0KCksIG1faWRlbnQpOwotICAg
IFJlZlB0cjxSZWdpc3RlcklEPiBmaW5hbERlc3RpbmF0aW9uT3JJZ25vcmVkID0gZ2VuZXJhdG9y
LmZpbmFsRGVzdGluYXRpb25Pcklnbm9yZWQoZHN0LCBmdW5jdGlvbi5nZXQoKSk7CisgICAgUmVm
UHRyPFJlZ2lzdGVySUQ+IHJldHVyblZhbHVlID0gZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24o
ZHN0LCBmdW5jdGlvbi5nZXQoKSk7CiAgICAgZ2VuZXJhdG9yLmVtaXRKdW1wSWZOb3RGdW5jdGlv
bkFwcGx5KGZ1bmN0aW9uLmdldCgpLCByZWFsQ2FsbC5nZXQoKSk7CiAgICAgewogICAgICAgICBp
ZiAobWF5QmVDYWxsKSB7CkBAIC01NTEsMjAgKzU1OCwyMCBAQCBSZWdpc3RlcklEKiBBcHBseUZ1
bmN0aW9uQ2FsbERvdE5vZGU6OmVtCiAgICAgICAgICAgICAgICAgICAgIFJlZlB0cjxSZWdpc3Rl
cklEPiByZWFsRnVuY3Rpb24gPSBnZW5lcmF0b3IuZW1pdE1vdmUoZ2VuZXJhdG9yLnRlbXBEZXN0
aW5hdGlvbihkc3QpLCBiYXNlLmdldCgpKTsKICAgICAgICAgICAgICAgICAgICAgQ2FsbEFyZ3Vt
ZW50cyBjYWxsQXJndW1lbnRzKGdlbmVyYXRvciwgbV9hcmdzKTsKICAgICAgICAgICAgICAgICAg
ICAgZ2VuZXJhdG9yLmVtaXROb2RlKGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIG9sZExp
c3QtPm1fZXhwcik7Ci0gICAgICAgICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0Q2FsbChmaW5h
bERlc3RpbmF0aW9uT3JJZ25vcmVkLmdldCgpLCByZWFsRnVuY3Rpb24uZ2V0KCksIE5vRXhwZWN0
ZWRGdW5jdGlvbiwgY2FsbEFyZ3VtZW50cywgZGl2b3QoKSwgc3RhcnRPZmZzZXQoKSwgZW5kT2Zm
c2V0KCkpOworICAgICAgICAgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdENhbGwocmV0dXJuVmFs
dWUuZ2V0KCksIHJlYWxGdW5jdGlvbi5nZXQoKSwgTm9FeHBlY3RlZEZ1bmN0aW9uLCBjYWxsQXJn
dW1lbnRzLCBkaXZvdCgpLCBzdGFydE9mZnNldCgpLCBlbmRPZmZzZXQoKSk7CiAgICAgICAgICAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgbV9hcmdzLT5tX2xpc3ROb2RlID0g
bV9hcmdzLT5tX2xpc3ROb2RlLT5tX25leHQ7CiAgICAgICAgICAgICAgICAgICAgIFJlZlB0cjxS
ZWdpc3RlcklEPiByZWFsRnVuY3Rpb24gPSBnZW5lcmF0b3IuZW1pdE1vdmUoZ2VuZXJhdG9yLnRl
bXBEZXN0aW5hdGlvbihkc3QpLCBiYXNlLmdldCgpKTsKICAgICAgICAgICAgICAgICAgICAgQ2Fs
bEFyZ3VtZW50cyBjYWxsQXJndW1lbnRzKGdlbmVyYXRvciwgbV9hcmdzKTsKICAgICAgICAgICAg
ICAgICAgICAgZ2VuZXJhdG9yLmVtaXROb2RlKGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCks
IG9sZExpc3QtPm1fZXhwcik7Ci0gICAgICAgICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0Q2Fs
bChmaW5hbERlc3RpbmF0aW9uT3JJZ25vcmVkLmdldCgpLCByZWFsRnVuY3Rpb24uZ2V0KCksIE5v
RXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFyZ3VtZW50cywgZGl2b3QoKSwgc3RhcnRPZmZzZXQoKSwg
ZW5kT2Zmc2V0KCkpOworICAgICAgICAgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdENhbGwocmV0
dXJuVmFsdWUuZ2V0KCksIHJlYWxGdW5jdGlvbi5nZXQoKSwgTm9FeHBlY3RlZEZ1bmN0aW9uLCBj
YWxsQXJndW1lbnRzLCBkaXZvdCgpLCBzdGFydE9mZnNldCgpLCBlbmRPZmZzZXQoKSk7CiAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIG1fYXJncy0+bV9saXN0Tm9kZSA9IG9sZExp
c3Q7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgIFJlZlB0cjxSZWdpc3Rl
cklEPiByZWFsRnVuY3Rpb24gPSBnZW5lcmF0b3IuZW1pdE1vdmUoZ2VuZXJhdG9yLnRlbXBEZXN0
aW5hdGlvbihkc3QpLCBiYXNlLmdldCgpKTsKICAgICAgICAgICAgICAgICBDYWxsQXJndW1lbnRz
IGNhbGxBcmd1bWVudHMoZ2VuZXJhdG9yLCBtX2FyZ3MpOwogICAgICAgICAgICAgICAgIGdlbmVy
YXRvci5lbWl0TG9hZChjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCBqc1VuZGVmaW5lZCgp
KTsKLSAgICAgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdENhbGwoZmluYWxEZXN0aW5hdGlvbk9y
SWdub3JlZC5nZXQoKSwgcmVhbEZ1bmN0aW9uLmdldCgpLCBOb0V4cGVjdGVkRnVuY3Rpb24sIGNh
bGxBcmd1bWVudHMsIGRpdm90KCksIHN0YXJ0T2Zmc2V0KCksIGVuZE9mZnNldCgpKTsKKyAgICAg
ICAgICAgICAgICBnZW5lcmF0b3IuZW1pdENhbGwocmV0dXJuVmFsdWUuZ2V0KCksIHJlYWxGdW5j
dGlvbi5nZXQoKSwgTm9FeHBlY3RlZEZ1bmN0aW9uLCBjYWxsQXJndW1lbnRzLCBkaXZvdCgpLCBz
dGFydE9mZnNldCgpLCBlbmRPZmZzZXQoKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0gZWxz
ZSB7CiAgICAgICAgICAgICBBU1NFUlQobV9hcmdzLT5tX2xpc3ROb2RlICYmIG1fYXJncy0+bV9s
aXN0Tm9kZS0+bV9uZXh0KTsKQEAgLTU4NSw3ICs1OTIsNyBAQCBSZWdpc3RlcklEKiBBcHBseUZ1
bmN0aW9uQ2FsbERvdE5vZGU6OmVtCiAgICAgICAgICAgICB3aGlsZSAoKGFyZ3MgPSBhcmdzLT5t
X25leHQpKQogICAgICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0Tm9kZShhcmdzLT5tX2V4cHIp
OwogCi0gICAgICAgICAgICBnZW5lcmF0b3IuZW1pdENhbGxWYXJhcmdzKGZpbmFsRGVzdGluYXRp
b25Pcklnbm9yZWQuZ2V0KCksIHJlYWxGdW5jdGlvbi5nZXQoKSwgdGhpc1JlZ2lzdGVyLmdldCgp
LCBhcmdzUmVnaXN0ZXIuZ2V0KCksIGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgcHJvZmlsZUhv
b2tSZWdpc3Rlci5nZXQoKSwgZGl2b3QoKSwgc3RhcnRPZmZzZXQoKSwgZW5kT2Zmc2V0KCkpOwor
ICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRDYWxsVmFyYXJncyhyZXR1cm5WYWx1ZS5nZXQoKSwg
cmVhbEZ1bmN0aW9uLmdldCgpLCB0aGlzUmVnaXN0ZXIuZ2V0KCksIGFyZ3NSZWdpc3Rlci5nZXQo
KSwgZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBwcm9maWxlSG9va1JlZ2lzdGVyLmdldCgpLCBk
aXZvdCgpLCBzdGFydE9mZnNldCgpLCBlbmRPZmZzZXQoKSk7CiAgICAgICAgIH0KICAgICAgICAg
Z2VuZXJhdG9yLmVtaXRKdW1wKGVuZC5nZXQoKSk7CiAgICAgfQpAQCAtNTkzLDEwICs2MDAsMTAg
QEAgUmVnaXN0ZXJJRCogQXBwbHlGdW5jdGlvbkNhbGxEb3ROb2RlOjplbQogICAgIHsKICAgICAg
ICAgQ2FsbEFyZ3VtZW50cyBjYWxsQXJndW1lbnRzKGdlbmVyYXRvciwgbV9hcmdzKTsKICAgICAg
ICAgZ2VuZXJhdG9yLmVtaXRNb3ZlKGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIGJhc2Uu
Z2V0KCkpOwotICAgICAgICBnZW5lcmF0b3IuZW1pdENhbGwoZmluYWxEZXN0aW5hdGlvbk9ySWdu
b3JlZC5nZXQoKSwgZnVuY3Rpb24uZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFyZ3Vt
ZW50cywgZGl2b3QoKSwgc3RhcnRPZmZzZXQoKSwgZW5kT2Zmc2V0KCkpOworICAgICAgICBnZW5l
cmF0b3IuZW1pdENhbGwocmV0dXJuVmFsdWUuZ2V0KCksIGZ1bmN0aW9uLmdldCgpLCBOb0V4cGVj
dGVkRnVuY3Rpb24sIGNhbGxBcmd1bWVudHMsIGRpdm90KCksIHN0YXJ0T2Zmc2V0KCksIGVuZE9m
ZnNldCgpKTsKICAgICB9CiAgICAgZ2VuZXJhdG9yLmVtaXRMYWJlbChlbmQuZ2V0KCkpOwotICAg
IHJldHVybiBmaW5hbERlc3RpbmF0aW9uT3JJZ25vcmVkLmdldCgpOworICAgIHJldHVybiByZXR1
cm5WYWx1ZS5nZXQoKTsKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFBv
c3RmaXhOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lv
biAxNTA5OTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2Vy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI4LDcgKzEyOCw2IEBAIHB1YmxpYzoKICAgICAgICAg
LCBtX2dyYXBoKGdyYXBoKQogICAgICAgICAsIG1fY3VycmVudEJsb2NrKDApCiAgICAgICAgICwg
bV9jdXJyZW50SW5kZXgoMCkKLSAgICAgICAgLCBtX2N1cnJlbnRQcm9maWxpbmdJbmRleCgwKQog
ICAgICAgICAsIG1fY29uc3RhbnRVbmRlZmluZWQoVUlOVF9NQVgpCiAgICAgICAgICwgbV9jb25z
dGFudE51bGwoVUlOVF9NQVgpCiAgICAgICAgICwgbV9jb25zdGFudE5hTihVSU5UX01BWCkKQEAg
LTE1OSwxOSArMTU4LDE3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBwYXJzZUNvZGVCbG9jaygpOwog
CiAgICAgLy8gSGVscGVyIGZvciBtaW4gYW5kIG1heC4KLSAgICBib29sIGhhbmRsZU1pbk1heChi
b29sIHVzZXNSZXN1bHQsIGludCByZXN1bHRPcGVyYW5kLCBOb2RlVHlwZSBvcCwgaW50IHJlZ2lz
dGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpOworICAgIGJvb2wgaGFu
ZGxlTWluTWF4KGludCByZXN1bHRPcGVyYW5kLCBOb2RlVHlwZSBvcCwgaW50IHJlZ2lzdGVyT2Zm
c2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpOwogICAgIAogICAgIC8vIEhhbmRs
ZSBjYWxscy4gVGhpcyByZXNvbHZlcyBpc3N1ZXMgc3Vycm91bmRpbmcgaW5saW5pbmcgYW5kIGlu
dHJpbnNpY3MuCi0gICAgdm9pZCBoYW5kbGVDYWxsKEludGVycHJldGVyKiwgSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgTm9kZVR5cGUgb3AsIENvZGVTcGVjaWFsaXphdGlvbktpbmQp
OworICAgIHZvaWQgaGFuZGxlQ2FsbChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBO
b2RlVHlwZSBvcCwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCk7CiAgICAgdm9pZCBlbWl0RnVuY3Rp
b25DaGVja3MoY29uc3QgQ2FsbExpbmtTdGF0dXMmLCBOb2RlKiBjYWxsVGFyZ2V0LCBpbnQgcmVn
aXN0ZXJPZmZzZXQsIENvZGVTcGVjaWFsaXphdGlvbktpbmQpOwogICAgIHZvaWQgZW1pdEFyZ3Vt
ZW50UGhhbnRvbXMoaW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMsIENvZGVTcGVjaWFsaXphdGlvbktpbmQpOwogICAgIC8vIEhhbmRsZSBpbmxpbmluZy4g
UmV0dXJuIHRydWUgaWYgaXQgc3VjY2VlZGVkLCBmYWxzZSBpZiB3ZSBuZWVkIHRvIHBsYW50IGEg
Y2FsbC4KLSAgICBib29sIGhhbmRsZUlubGluaW5nKGJvb2wgdXNlc1Jlc3VsdCwgTm9kZSogY2Fs
bFRhcmdldE5vZGUsIGludCByZXN1bHRPcGVyYW5kLCBjb25zdCBDYWxsTGlua1N0YXR1cyYsIGlu
dCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCB1bnNpZ25l
ZCBuZXh0T2Zmc2V0LCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kKTsKLSAgICAvLyBIYW5kbGUgc2V0
dGluZyB0aGUgcmVzdWx0IG9mIGFuIGludHJpbnNpYy4KLSAgICB2b2lkIHNldEludHJpbnNpY1Jl
c3VsdChib29sIHVzZXNSZXN1bHQsIGludCByZXN1bHRPcGVyYW5kLCBOb2RlKik7CisgICAgYm9v
bCBoYW5kbGVJbmxpbmluZyhOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwgaW50IHJlc3VsdE9wZXJhbmQs
IGNvbnN0IENhbGxMaW5rU3RhdHVzJiwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXMsIHVuc2lnbmVkIG5leHRPZmZzZXQsIENvZGVTcGVjaWFsaXphdGlv
bktpbmQpOwogICAgIC8vIEhhbmRsZSBpbnRyaW5zaWMgZnVuY3Rpb25zLiBSZXR1cm4gdHJ1ZSBp
ZiBpdCBzdWNjZWVkZWQsIGZhbHNlIGlmIHdlIG5lZWQgdG8gcGxhbnQgYSBjYWxsLgotICAgIGJv
b2wgaGFuZGxlSW50cmluc2ljKGJvb2wgdXNlc1Jlc3VsdCwgaW50IHJlc3VsdE9wZXJhbmQsIElu
dHJpbnNpYywgaW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMsIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24pOwotICAgIGJvb2wgaGFuZGxlQ29uc3RhbnRJ
bnRlcm5hbEZ1bmN0aW9uKGJvb2wgdXNlc1Jlc3VsdCwgaW50IHJlc3VsdE9wZXJhbmQsIEludGVy
bmFsRnVuY3Rpb24qLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcywgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiwgQ29kZVNwZWNpYWxpemF0aW9uS2lu
ZCk7CisgICAgYm9vbCBoYW5kbGVJbnRyaW5zaWMoaW50IHJlc3VsdE9wZXJhbmQsIEludHJpbnNp
YywgaW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIFNw
ZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24pOworICAgIGJvb2wgaGFuZGxlQ29uc3RhbnRJbnRlcm5h
bEZ1bmN0aW9uKGludCByZXN1bHRPcGVyYW5kLCBJbnRlcm5hbEZ1bmN0aW9uKiwgaW50IHJlZ2lz
dGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIFNwZWN1bGF0ZWRUeXBl
IHByZWRpY3Rpb24sIENvZGVTcGVjaWFsaXphdGlvbktpbmQpOwogICAgIE5vZGUqIGhhbmRsZUdl
dEJ5T2Zmc2V0KFNwZWN1bGF0ZWRUeXBlLCBOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVy
TnVtYmVyLCBQcm9wZXJ0eU9mZnNldCk7CiAgICAgdm9pZCBoYW5kbGVHZXRCeU9mZnNldCgKICAg
ICAgICAgaW50IGRlc3RpbmF0aW9uT3BlcmFuZCwgU3BlY3VsYXRlZFR5cGUsIE5vZGUqIGJhc2Us
IHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsCkBAIC02ODQsNyArNjgxLDcgQEAgcHJpdmF0ZToK
IAogICAgIENvZGVPcmlnaW4gY3VycmVudENvZGVPcmlnaW4oKQogICAgIHsKLSAgICAgICAgcmV0
dXJuIENvZGVPcmlnaW4obV9jdXJyZW50SW5kZXgsIGlubGluZUNhbGxGcmFtZSgpLCBtX2N1cnJl
bnRQcm9maWxpbmdJbmRleCAtIG1fY3VycmVudEluZGV4KTsKKyAgICAgICAgcmV0dXJuIENvZGVP
cmlnaW4obV9jdXJyZW50SW5kZXgsIGlubGluZUNhbGxGcmFtZSgpLCAwKTsKICAgICB9CiAgICAg
CiAgICAgYm9vbCBjYW5Gb2xkKE5vZGUqIG5vZGUpCkBAIC03NjQsMjkgKzc2MSwyMiBAQCBwcml2
YXRlOgogICAgICAgICBtX251bVBhc3NlZFZhckFyZ3MrKzsKICAgICB9CiAgICAgCi0gICAgTm9k
ZSogYWRkQ2FsbChJbnRlcnByZXRlciogaW50ZXJwcmV0ZXIsIEluc3RydWN0aW9uKiBjdXJyZW50
SW5zdHJ1Y3Rpb24sIE5vZGVUeXBlIG9wKQorICAgIE5vZGUqIGFkZENhbGwoSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbiwgTm9kZVR5cGUgb3ApCiAgICAgewotICAgICAgICBJbnN0cnVj
dGlvbiogcHV0SW5zdHJ1Y3Rpb24gPSBjdXJyZW50SW5zdHJ1Y3Rpb24gKyBPUENPREVfTEVOR1RI
KG9wX2NhbGwpOwotCi0gICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSBTcGVjTm9u
ZTsKLSAgICAgICAgaWYgKGludGVycHJldGVyLT5nZXRPcGNvZGVJRChwdXRJbnN0cnVjdGlvbi0+
dS5vcGNvZGUpID09IG9wX2NhbGxfcHV0X3Jlc3VsdCkgewotICAgICAgICAgICAgbV9jdXJyZW50
UHJvZmlsaW5nSW5kZXggPSBtX2N1cnJlbnRJbmRleCArIE9QQ09ERV9MRU5HVEgob3BfY2FsbCk7
Ci0gICAgICAgICAgICBwcmVkaWN0aW9uID0gZ2V0UHJlZGljdGlvbigpOwotICAgICAgICB9Cisg
ICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSBnZXRQcmVkaWN0aW9uKCk7CiAgICAg
ICAgIAotICAgICAgICBhZGRWYXJBcmdDaGlsZChnZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUu
b3BlcmFuZCkpOwotICAgICAgICBpbnQgYXJnQ291bnQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0u
dS5vcGVyYW5kOworICAgICAgICBhZGRWYXJBcmdDaGlsZChnZXQoY3VycmVudEluc3RydWN0aW9u
WzJdLnUub3BlcmFuZCkpOworICAgICAgICBpbnQgYXJnQ291bnQgPSBjdXJyZW50SW5zdHJ1Y3Rp
b25bM10udS5vcGVyYW5kOwogICAgICAgICBpZiAoSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6
ZSArICh1bnNpZ25lZClhcmdDb3VudCA+IG1fcGFyYW1ldGVyU2xvdHMpCiAgICAgICAgICAgICBt
X3BhcmFtZXRlclNsb3RzID0gSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSArIGFyZ0NvdW50
OwogCi0gICAgICAgIGludCByZWdpc3Rlck9mZnNldCA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51
Lm9wZXJhbmQ7CisgICAgICAgIGludCByZWdpc3Rlck9mZnNldCA9IGN1cnJlbnRJbnN0cnVjdGlv
bls0XS51Lm9wZXJhbmQ7CiAgICAgICAgIGludCBkdW1teVRoaXNBcmd1bWVudCA9IG9wID09IENh
bGwgPyAwIDogMTsKICAgICAgICAgZm9yIChpbnQgaSA9IDAgKyBkdW1teVRoaXNBcmd1bWVudDsg
aSA8IGFyZ0NvdW50OyArK2kpCiAgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChnZXQocmVnaXN0
ZXJPZmZzZXQgKyBhcmd1bWVudFRvT3BlcmFuZChpKSkpOwogCiAgICAgICAgIE5vZGUqIGNhbGwg
PSBhZGRUb0dyYXBoKE5vZGU6OlZhckFyZywgb3AsIE9wSW5mbygwKSwgT3BJbmZvKHByZWRpY3Rp
b24pKTsKLSAgICAgICAgaWYgKGludGVycHJldGVyLT5nZXRPcGNvZGVJRChwdXRJbnN0cnVjdGlv
bi0+dS5vcGNvZGUpID09IG9wX2NhbGxfcHV0X3Jlc3VsdCkKLSAgICAgICAgICAgIHNldChwdXRJ
bnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIGNhbGwpOworICAgICAgICBzZXQoY3VycmVudEluc3Ry
dWN0aW9uWzFdLnUub3BlcmFuZCwgY2FsbCk7CiAgICAgICAgIHJldHVybiBjYWxsOwogICAgIH0K
ICAgICAKQEAgLTgzMywxMiArODIzLDEyIEBAIHByaXZhdGU6CiAgICAgCiAgICAgU3BlY3VsYXRl
ZFR5cGUgZ2V0UHJlZGljdGlvbldpdGhvdXRPU1JFeGl0KCkKICAgICB7Ci0gICAgICAgIHJldHVy
biBnZXRQcmVkaWN0aW9uV2l0aG91dE9TUkV4aXQobV9jdXJyZW50UHJvZmlsaW5nSW5kZXgpOwor
ICAgICAgICByZXR1cm4gZ2V0UHJlZGljdGlvbldpdGhvdXRPU1JFeGl0KG1fY3VycmVudEluZGV4
KTsKICAgICB9CiAgICAgCiAgICAgU3BlY3VsYXRlZFR5cGUgZ2V0UHJlZGljdGlvbigpCiAgICAg
ewotICAgICAgICByZXR1cm4gZ2V0UHJlZGljdGlvbihtX2N1cnJlbnRQcm9maWxpbmdJbmRleCk7
CisgICAgICAgIHJldHVybiBnZXRQcmVkaWN0aW9uKG1fY3VycmVudEluZGV4KTsKICAgICB9CiAg
ICAgCiAgICAgQXJyYXlNb2RlIGdldEFycmF5TW9kZShBcnJheVByb2ZpbGUqIHByb2ZpbGUsIEFy
cmF5OjpBY3Rpb24gYWN0aW9uKQpAQCAtOTc5LDggKzk2OSw2IEBAIHByaXZhdGU6CiAgICAgQmFz
aWNCbG9jayogbV9jdXJyZW50QmxvY2s7CiAgICAgLy8gVGhlIGJ5dGVjb2RlIGluZGV4IG9mIHRo
ZSBjdXJyZW50IGluc3RydWN0aW9uIGJlaW5nIGdlbmVyYXRlZC4KICAgICB1bnNpZ25lZCBtX2N1
cnJlbnRJbmRleDsKLSAgICAvLyBUaGUgYnl0ZWNvZGUgaW5kZXggb2YgdGhlIHZhbHVlIHByb2Zp
bGUgb2YgdGhlIGN1cnJlbnQgaW5zdHJ1Y3Rpb24gYmVpbmcgZ2VuZXJhdGVkLgotICAgIHVuc2ln
bmVkIG1fY3VycmVudFByb2ZpbGluZ0luZGV4OwogCiAgICAgLy8gV2UgdXNlIHRoZXNlIHZhbHVl
cyBkdXJpbmcgY29kZSBnZW5lcmF0aW9uLCBhbmQgdG8gYXZvaWQgdGhlIG5lZWQgZm9yCiAgICAg
Ly8gc3BlY2lhbCBoYW5kbGluZyB3ZSBtYWtlIHN1cmUgdGhleSBhcmUgYXZhaWxhYmxlIGFzIGNv
bnN0YW50cyBpbiB0aGUKQEAgLTExNjgsMTEgKzExNTYsMTEgQEAgcHJpdmF0ZToKICAgICByZXR1
cm4gc2hvdWxkQ29udGludWVQYXJzaW5nCiAKIAotdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxl
Q2FsbChJbnRlcnByZXRlciogaW50ZXJwcmV0ZXIsIEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24sIE5vZGVUeXBlIG9wLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCit2b2lkIEJ5
dGVDb2RlUGFyc2VyOjpoYW5kbGVDYWxsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24s
IE5vZGVUeXBlIG9wLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCiB7CiAgICAgQVNTRVJU
KE9QQ09ERV9MRU5HVEgob3BfY2FsbCkgPT0gT1BDT0RFX0xFTkdUSChvcF9jb25zdHJ1Y3QpKTsK
ICAgICAKLSAgICBOb2RlKiBjYWxsVGFyZ2V0ID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51
Lm9wZXJhbmQpOworICAgIE5vZGUqIGNhbGxUYXJnZXQgPSBnZXQoY3VycmVudEluc3RydWN0aW9u
WzJdLnUub3BlcmFuZCk7CiAgICAgCiAgICAgQ2FsbExpbmtTdGF0dXMgY2FsbExpbmtTdGF0dXM7
CiAKQEAgLTExOTMsMjkgKzExODEsMTkgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlQ2Fs
bChJbnRlcnByZQogICAgICAgICAvLyBPZGRseSwgdGhpcyBjb25mbGF0ZXMgY2FsbHMgdGhhdCBo
YXZlbid0IGV4ZWN1dGVkIHdpdGggY2FsbHMgdGhhdCBiZWhhdmVkIHN1ZmZpY2llbnRseSBwb2x5
bW9ycGhpY2FsbHkKICAgICAgICAgLy8gdGhhdCB3ZSBjYW5ub3Qgb3B0aW1pemUgdGhlbS4KICAg
ICAgICAgCi0gICAgICAgIGFkZENhbGwoaW50ZXJwcmV0ZXIsIGN1cnJlbnRJbnN0cnVjdGlvbiwg
b3ApOworICAgICAgICBhZGRDYWxsKGN1cnJlbnRJbnN0cnVjdGlvbiwgb3ApOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogICAgIAotICAgIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9
IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0gICAgaW50IHJlZ2lzdGVyT2Zmc2V0
ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKKyAgICBpbnQgYXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworICAgIGlu
dCByZWdpc3Rlck9mZnNldCA9IGN1cnJlbnRJbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQ7CiAKLSAg
ICAvLyBEbyB3ZSBoYXZlIGEgcmVzdWx0PwotICAgIGJvb2wgdXNlc1Jlc3VsdCA9IGZhbHNlOwot
ICAgIGludCByZXN1bHRPcGVyYW5kID0gMDsgLy8gbWFrZSBjb21waWxlciBoYXBweQorICAgIGlu
dCByZXN1bHRPcGVyYW5kID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKICAgICB1
bnNpZ25lZCBuZXh0T2Zmc2V0ID0gbV9jdXJyZW50SW5kZXggKyBPUENPREVfTEVOR1RIKG9wX2Nh
bGwpOwotICAgIEluc3RydWN0aW9uKiBwdXRJbnN0cnVjdGlvbiA9IGN1cnJlbnRJbnN0cnVjdGlv
biArIE9QQ09ERV9MRU5HVEgob3BfY2FsbCk7Ci0gICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlv
biA9IFNwZWNOb25lOwotICAgIGlmIChpbnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQocHV0SW5zdHJ1
Y3Rpb24tPnUub3Bjb2RlKSA9PSBvcF9jYWxsX3B1dF9yZXN1bHQpIHsKLSAgICAgICAgcmVzdWx0
T3BlcmFuZCA9IHB1dEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsKLSAgICAgICAgdXNlc1Jlc3Vs
dCA9IHRydWU7Ci0gICAgICAgIG1fY3VycmVudFByb2ZpbGluZ0luZGV4ID0gbmV4dE9mZnNldDsK
LSAgICAgICAgcHJlZGljdGlvbiA9IGdldFByZWRpY3Rpb24oKTsKLSAgICAgICAgbmV4dE9mZnNl
dCArPSBPUENPREVfTEVOR1RIKG9wX2NhbGxfcHV0X3Jlc3VsdCk7Ci0gICAgfQorICAgIFNwZWN1
bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSBnZXRQcmVkaWN0aW9uKCk7CiAKICAgICBpZiAoSW50ZXJu
YWxGdW5jdGlvbiogZnVuY3Rpb24gPSBjYWxsTGlua1N0YXR1cy5pbnRlcm5hbEZ1bmN0aW9uKCkp
IHsKLSAgICAgICAgaWYgKGhhbmRsZUNvbnN0YW50SW50ZXJuYWxGdW5jdGlvbih1c2VzUmVzdWx0
LCByZXN1bHRPcGVyYW5kLCBmdW5jdGlvbiwgcmVnaXN0ZXJPZmZzZXQsIGFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzLCBwcmVkaWN0aW9uLCBraW5kKSkgeworICAgICAgICBpZiAoaGFuZGxlQ29u
c3RhbnRJbnRlcm5hbEZ1bmN0aW9uKHJlc3VsdE9wZXJhbmQsIGZ1bmN0aW9uLCByZWdpc3Rlck9m
ZnNldCwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIHByZWRpY3Rpb24sIGtpbmQpKSB7CiAg
ICAgICAgICAgICAvLyBUaGlzIHBoYW50b21pbmcgaGFzIHRvIGJlICphZnRlciogdGhlIGNvZGUg
Zm9yIHRoZSBpbnRyaW5zaWMsIHRvIHNpZ25pZnkgdGhhdAogICAgICAgICAgICAgLy8gdGhlIGlu
cHV0cyBtdXN0IGJlIGtlcHQgYWxpdmUgd2hhdGV2ZXIgZXhpdHMgdGhlIGludHJpbnNpYyBtYXkg
ZG8uCiAgICAgICAgICAgICBhZGRUb0dyYXBoKFBoYW50b20sIGNhbGxUYXJnZXQpOwpAQCAtMTIy
NCw3ICsxMjAyLDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlQ2FsbChJbnRlcnByZQog
ICAgICAgICB9CiAgICAgICAgIAogICAgICAgICAvLyBDYW4gb25seSBoYW5kbGUgdGhpcyB1c2lu
ZyB0aGUgZ2VuZXJpYyBjYWxsIGhhbmRsZXIuCi0gICAgICAgIGFkZENhbGwoaW50ZXJwcmV0ZXIs
IGN1cnJlbnRJbnN0cnVjdGlvbiwgb3ApOworICAgICAgICBhZGRDYWxsKGN1cnJlbnRJbnN0cnVj
dGlvbiwgb3ApOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgICAgICAKQEAgLTEyMzIsMTcg
KzEyMTAsMTcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlQ2FsbChJbnRlcnByZQogICAg
IGlmIChpbnRyaW5zaWMgIT0gTm9JbnRyaW5zaWMpIHsKICAgICAgICAgZW1pdEZ1bmN0aW9uQ2hl
Y2tzKGNhbGxMaW5rU3RhdHVzLCBjYWxsVGFyZ2V0LCByZWdpc3Rlck9mZnNldCwga2luZCk7CiAg
ICAgICAgICAgICAKLSAgICAgICAgaWYgKGhhbmRsZUludHJpbnNpYyh1c2VzUmVzdWx0LCByZXN1
bHRPcGVyYW5kLCBpbnRyaW5zaWMsIHJlZ2lzdGVyT2Zmc2V0LCBhcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcywgcHJlZGljdGlvbikpIHsKKyAgICAgICAgaWYgKGhhbmRsZUludHJpbnNpYyhyZXN1
bHRPcGVyYW5kLCBpbnRyaW5zaWMsIHJlZ2lzdGVyT2Zmc2V0LCBhcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcywgcHJlZGljdGlvbikpIHsKICAgICAgICAgICAgIC8vIFRoaXMgcGhhbnRvbWluZyBo
YXMgdG8gYmUgKmFmdGVyKiB0aGUgY29kZSBmb3IgdGhlIGludHJpbnNpYywgdG8gc2lnbmlmeSB0
aGF0CiAgICAgICAgICAgICAvLyB0aGUgaW5wdXRzIG11c3QgYmUga2VwdCBhbGl2ZSB3aGF0ZXZl
ciBleGl0cyB0aGUgaW50cmluc2ljIG1heSBkby4KICAgICAgICAgICAgIGFkZFRvR3JhcGgoUGhh
bnRvbSwgY2FsbFRhcmdldCk7CiAgICAgICAgICAgICBlbWl0QXJndW1lbnRQaGFudG9tcyhyZWdp
c3Rlck9mZnNldCwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIGtpbmQpOwogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgfSBlbHNlIGlmIChoYW5kbGVJbmxpbmluZyh1c2Vz
UmVzdWx0LCBjYWxsVGFyZ2V0LCByZXN1bHRPcGVyYW5kLCBjYWxsTGlua1N0YXR1cywgcmVnaXN0
ZXJPZmZzZXQsIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBuZXh0T2Zmc2V0LCBraW5kKSkK
KyAgICB9IGVsc2UgaWYgKGhhbmRsZUlubGluaW5nKGNhbGxUYXJnZXQsIHJlc3VsdE9wZXJhbmQs
IGNhbGxMaW5rU3RhdHVzLCByZWdpc3Rlck9mZnNldCwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMsIG5leHRPZmZzZXQsIGtpbmQpKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgYWRkQ2Fs
bChpbnRlcnByZXRlciwgY3VycmVudEluc3RydWN0aW9uLCBvcCk7CisgICAgYWRkQ2FsbChjdXJy
ZW50SW5zdHJ1Y3Rpb24sIG9wKTsKIH0KIAogdm9pZCBCeXRlQ29kZVBhcnNlcjo6ZW1pdEZ1bmN0
aW9uQ2hlY2tzKGNvbnN0IENhbGxMaW5rU3RhdHVzJiBjYWxsTGlua1N0YXR1cywgTm9kZSogY2Fs
bFRhcmdldCwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQp
CkBAIC0xMjc3LDcgKzEyNTUsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjplbWl0QXJndW1lbnRQ
aGFudG9tCiAgICAgICAgIGFkZFRvR3JhcGgoUGhhbnRvbSwgZ2V0KHJlZ2lzdGVyT2Zmc2V0ICsg
YXJndW1lbnRUb09wZXJhbmQoaSkpKTsKIH0KIAotYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxl
SW5saW5pbmcoYm9vbCB1c2VzUmVzdWx0LCBOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwgaW50IHJlc3Vs
dE9wZXJhbmQsIGNvbnN0IENhbGxMaW5rU3RhdHVzJiBjYWxsTGlua1N0YXR1cywgaW50IHJlZ2lz
dGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIHVuc2lnbmVkIG5leHRP
ZmZzZXQsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKK2Jvb2wgQnl0ZUNvZGVQYXJzZXI6
OmhhbmRsZUlubGluaW5nKE5vZGUqIGNhbGxUYXJnZXROb2RlLCBpbnQgcmVzdWx0T3BlcmFuZCwg
Y29uc3QgQ2FsbExpbmtTdGF0dXMmIGNhbGxMaW5rU3RhdHVzLCBpbnQgcmVnaXN0ZXJPZmZzZXQs
IGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgdW5zaWduZWQgbmV4dE9mZnNldCwgQ29k
ZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQogewogICAgIC8vIEZpcnN0LCB0aGUgcmVhbGx5IHNp
bXBsZSBjaGVja3M6IGRvIHdlIGhhdmUgYW4gYWN0dWFsIEpTIGZ1bmN0aW9uPwogICAgIGlmICgh
Y2FsbExpbmtTdGF0dXMuZXhlY3V0YWJsZSgpKQpAQCAtMTM0NSwxNiArMTMyMywxMyBAQCBib29s
IEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxpbmluZyhib29sCiAgICAgc2l6ZV90IGFyZ3VtZW50
UG9zaXRpb25TdGFydCA9IG1fZ3JhcGgubV9hcmd1bWVudFBvc2l0aW9ucy5zaXplKCk7CiAKICAg
ICBJbmxpbmVTdGFja0VudHJ5IGlubGluZVN0YWNrRW50cnkoCi0gICAgICAgIHRoaXMsIGNvZGVC
bG9jaywgY29kZUJsb2NrLCBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKSAtIDEsCi0gICAgICAgIGNh
bGxMaW5rU3RhdHVzLmZ1bmN0aW9uKCksIChWaXJ0dWFsUmVnaXN0ZXIpbV9pbmxpbmVTdGFja1Rv
cC0+cmVtYXBPcGVyYW5kKAotICAgICAgICAgICAgdXNlc1Jlc3VsdCA/IHJlc3VsdE9wZXJhbmQg
OiBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyKSwKKyAgICAgICAgdGhpcywgY29kZUJsb2NrLCBjb2Rl
QmxvY2ssIG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpIC0gMSwgY2FsbExpbmtTdGF0dXMuZnVuY3Rp
b24oKSwKKyAgICAgICAgKFZpcnR1YWxSZWdpc3RlciltX2lubGluZVN0YWNrVG9wLT5yZW1hcE9w
ZXJhbmQocmVzdWx0T3BlcmFuZCksCiAgICAgICAgIChWaXJ0dWFsUmVnaXN0ZXIpaW5saW5lQ2Fs
bEZyYW1lU3RhcnQsIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBraW5kKTsKICAgICAKICAg
ICAvLyBUaGlzIGlzIHdoZXJlIHRoZSBhY3R1YWwgaW5saW5pbmcgcmVhbGx5IGhhcHBlbnMuCiAg
ICAgdW5zaWduZWQgb2xkSW5kZXggPSBtX2N1cnJlbnRJbmRleDsKLSAgICB1bnNpZ25lZCBvbGRQ
cm9maWxpbmdJbmRleCA9IG1fY3VycmVudFByb2ZpbGluZ0luZGV4OwogICAgIG1fY3VycmVudElu
ZGV4ID0gMDsKLSAgICBtX2N1cnJlbnRQcm9maWxpbmdJbmRleCA9IDA7CiAKICAgICBhZGRUb0dy
YXBoKElubGluZVN0YXJ0LCBPcEluZm8oYXJndW1lbnRQb3NpdGlvblN0YXJ0KSk7CiAgICAgaWYg
KGNhbGxMaW5rU3RhdHVzLmlzQ2xvc3VyZUNhbGwoKSkgewpAQCAtMTM2NSw3ICsxMzQwLDYgQEAg
Ym9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcoYm9vbAogICAgIHBhcnNlQ29kZUJs
b2NrKCk7CiAgICAgCiAgICAgbV9jdXJyZW50SW5kZXggPSBvbGRJbmRleDsKLSAgICBtX2N1cnJl
bnRQcm9maWxpbmdJbmRleCA9IG9sZFByb2ZpbGluZ0luZGV4OwogICAgIAogICAgIC8vIElmIHRo
ZSBpbmxpbmVkIGNvZGUgY3JlYXRlZCBzb21lIG5ldyBiYXNpYyBibG9ja3MsIHRoZW4gd2UgaGF2
ZSBsaW5raW5nIHRvIGRvLgogICAgIGlmIChpbmxpbmVTdGFja0VudHJ5Lm1fY2FsbHNpdGVCbG9j
a0hlYWQgIT0gbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCkgLSAxKSB7CkBAIC0xNDYxLDI5ICsxNDM1
LDIyIEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGluaW5nKGJvb2wKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAotdm9pZCBCeXRlQ29kZVBhcnNlcjo6c2V0SW50cmluc2ljUmVzdWx0KGJv
b2wgdXNlc1Jlc3VsdCwgaW50IHJlc3VsdE9wZXJhbmQsIE5vZGUqIG5vZGUpCi17Ci0gICAgaWYg
KCF1c2VzUmVzdWx0KQotICAgICAgICByZXR1cm47Ci0gICAgc2V0KHJlc3VsdE9wZXJhbmQsIG5v
ZGUpOwotfQotCi1ib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVNaW5NYXgoYm9vbCB1c2VzUmVz
dWx0LCBpbnQgcmVzdWx0T3BlcmFuZCwgTm9kZVR5cGUgb3AsIGludCByZWdpc3Rlck9mZnNldCwg
aW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKQorYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFu
ZGxlTWluTWF4KGludCByZXN1bHRPcGVyYW5kLCBOb2RlVHlwZSBvcCwgaW50IHJlZ2lzdGVyT2Zm
c2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpCiB7CiAgICAgaWYgKGFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzID09IDEpIHsgLy8gTWF0aC5taW4oKQotICAgICAgICBzZXRJbnRy
aW5zaWNSZXN1bHQodXNlc1Jlc3VsdCwgcmVzdWx0T3BlcmFuZCwgY29uc3RhbnROYU4oKSk7Cisg
ICAgICAgIHNldChyZXN1bHRPcGVyYW5kLCBjb25zdGFudE5hTigpKTsKICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgfQogICAgICAKICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMg
PT0gMikgeyAvLyBNYXRoLm1pbih4KQogICAgICAgICBOb2RlKiByZXN1bHQgPSBnZXQocmVnaXN0
ZXJPZmZzZXQgKyBhcmd1bWVudFRvT3BlcmFuZCgxKSk7CiAgICAgICAgIGFkZFRvR3JhcGgoUGhh
bnRvbSwgRWRnZShyZXN1bHQsIE51bWJlclVzZSkpOwotICAgICAgICBzZXRJbnRyaW5zaWNSZXN1
bHQodXNlc1Jlc3VsdCwgcmVzdWx0T3BlcmFuZCwgcmVzdWx0KTsKKyAgICAgICAgc2V0KHJlc3Vs
dE9wZXJhbmQsIHJlc3VsdCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAKICAg
ICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPT0gMykgeyAvLyBNYXRoLm1pbih4LCB5
KQotICAgICAgICBzZXRJbnRyaW5zaWNSZXN1bHQodXNlc1Jlc3VsdCwgcmVzdWx0T3BlcmFuZCwg
YWRkVG9HcmFwaChvcCwgZ2V0KHJlZ2lzdGVyT2Zmc2V0ICsgYXJndW1lbnRUb09wZXJhbmQoMSkp
LCBnZXQocmVnaXN0ZXJPZmZzZXQgKyBhcmd1bWVudFRvT3BlcmFuZCgyKSkpKTsKKyAgICAgICAg
c2V0KHJlc3VsdE9wZXJhbmQsIGFkZFRvR3JhcGgob3AsIGdldChyZWdpc3Rlck9mZnNldCArIGFy
Z3VtZW50VG9PcGVyYW5kKDEpKSwgZ2V0KHJlZ2lzdGVyT2Zmc2V0ICsgYXJndW1lbnRUb09wZXJh
bmQoMikpKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAKQEAgLTE0OTMsMTIg
KzE0NjAsMTIgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlTWluTWF4KGJvb2wgdQogCiAv
LyBGSVhNRTogV2UgZGVhZC1jb2RlLWVsaW1pbmF0ZSB1bnVzZWQgTWF0aCBpbnRyaW5zaWNzLCBi
dXQgdGhhdCdzIGludmFsaWQgYmVjYXVzZQogLy8gdGhleSBuZWVkIHRvIHBlcmZvcm0gdGhlIFRv
TnVtYmVyIGNvbnZlcnNpb24sIHdoaWNoIGNhbiBoYXZlIHNpZGUtZWZmZWN0cy4KLWJvb2wgQnl0
ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpYyhib29sIHVzZXNSZXN1bHQsIGludCByZXN1bHRP
cGVyYW5kLCBJbnRyaW5zaWMgaW50cmluc2ljLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcywgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbikKK2Jvb2wg
Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpYyhpbnQgcmVzdWx0T3BlcmFuZCwgSW50cmlu
c2ljIGludHJpbnNpYywgaW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMsIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24pCiB7CiAgICAgc3dpdGNoIChpbnRy
aW5zaWMpIHsKICAgICBjYXNlIEFic0ludHJpbnNpYzogewogICAgICAgICBpZiAoYXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXMgPT0gMSkgeyAvLyBNYXRoLmFicygpCi0gICAgICAgICAgICBzZXRJ
bnRyaW5zaWNSZXN1bHQodXNlc1Jlc3VsdCwgcmVzdWx0T3BlcmFuZCwgY29uc3RhbnROYU4oKSk7
CisgICAgICAgICAgICBzZXQocmVzdWx0T3BlcmFuZCwgY29uc3RhbnROYU4oKSk7CiAgICAgICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogCkBAIC0xNTA4LDI2ICsxNDc1LDI2IEBAIGJv
b2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpYyhib28KICAgICAgICAgTm9kZSogbm9k
ZSA9IGFkZFRvR3JhcGgoQXJpdGhBYnMsIGdldChyZWdpc3Rlck9mZnNldCArIGFyZ3VtZW50VG9P
cGVyYW5kKDEpKSk7CiAgICAgICAgIGlmIChtX2lubGluZVN0YWNrVG9wLT5tX2V4aXRQcm9maWxl
Lmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBPdmVyZmxvdykpCiAgICAgICAgICAgICBub2Rl
LT5tZXJnZUZsYWdzKE5vZGVNYXlPdmVyZmxvdyk7Ci0gICAgICAgIHNldEludHJpbnNpY1Jlc3Vs
dCh1c2VzUmVzdWx0LCByZXN1bHRPcGVyYW5kLCBub2RlKTsKKyAgICAgICAgc2V0KHJlc3VsdE9w
ZXJhbmQsIG5vZGUpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKICAgICBjYXNlIE1p
bkludHJpbnNpYzoKLSAgICAgICAgcmV0dXJuIGhhbmRsZU1pbk1heCh1c2VzUmVzdWx0LCByZXN1
bHRPcGVyYW5kLCBBcml0aE1pbiwgcmVnaXN0ZXJPZmZzZXQsIGFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzKTsKKyAgICAgICAgcmV0dXJuIGhhbmRsZU1pbk1heChyZXN1bHRPcGVyYW5kLCBBcml0
aE1pbiwgcmVnaXN0ZXJPZmZzZXQsIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKTsKICAgICAg
ICAgCiAgICAgY2FzZSBNYXhJbnRyaW5zaWM6Ci0gICAgICAgIHJldHVybiBoYW5kbGVNaW5NYXgo
dXNlc1Jlc3VsdCwgcmVzdWx0T3BlcmFuZCwgQXJpdGhNYXgsIHJlZ2lzdGVyT2Zmc2V0LCBhcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcyk7CisgICAgICAgIHJldHVybiBoYW5kbGVNaW5NYXgocmVz
dWx0T3BlcmFuZCwgQXJpdGhNYXgsIHJlZ2lzdGVyT2Zmc2V0LCBhcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcyk7CiAgICAgICAgIAogICAgIGNhc2UgU3FydEludHJpbnNpYzogewogICAgICAgICBp
ZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPT0gMSkgeyAvLyBNYXRoLnNxcnQoKQotICAg
ICAgICAgICAgc2V0SW50cmluc2ljUmVzdWx0KHVzZXNSZXN1bHQsIHJlc3VsdE9wZXJhbmQsIGNv
bnN0YW50TmFOKCkpOworICAgICAgICAgICAgc2V0KHJlc3VsdE9wZXJhbmQsIGNvbnN0YW50TmFO
KCkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAg
ICAgIGlmICghTWFjcm9Bc3NlbWJsZXI6OnN1cHBvcnRzRmxvYXRpbmdQb2ludFNxcnQoKSkKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgCi0gICAgICAgIHNldEludHJpbnNpY1Jl
c3VsdCh1c2VzUmVzdWx0LCByZXN1bHRPcGVyYW5kLCBhZGRUb0dyYXBoKEFyaXRoU3FydCwgZ2V0
KHJlZ2lzdGVyT2Zmc2V0ICsgYXJndW1lbnRUb09wZXJhbmQoMSkpKSk7CisKKyAgICAgICAgc2V0
KHJlc3VsdE9wZXJhbmQsIGFkZFRvR3JhcGgoQXJpdGhTcXJ0LCBnZXQocmVnaXN0ZXJPZmZzZXQg
KyBhcmd1bWVudFRvT3BlcmFuZCgxKSkpKTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQog
ICAgICAgICAKQEAgLTE1MzUsNyArMTUwMiw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRs
ZUludHJpbnNpYyhib28KICAgICAgICAgaWYgKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICE9
IDIpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAotICAgICAgICBBcnJheU1v
ZGUgYXJyYXlNb2RlID0gZ2V0QXJyYXlNb2RlKG1fY3VycmVudEluc3RydWN0aW9uWzVdLnUuYXJy
YXlQcm9maWxlKTsKKyAgICAgICAgQXJyYXlNb2RlIGFycmF5TW9kZSA9IGdldEFycmF5TW9kZSht
X2N1cnJlbnRJbnN0cnVjdGlvbls2XS51LmFycmF5UHJvZmlsZSk7CiAgICAgICAgIGlmICghYXJy
YXlNb2RlLmlzSlNBcnJheSgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBz
d2l0Y2ggKGFycmF5TW9kZS50eXBlKCkpIHsKQEAgLTE1NDUsOCArMTUxMiw3IEBAIGJvb2wgQnl0
ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpYyhib28KICAgICAgICAgY2FzZSBBcnJheTo6Q29u
dGlndW91czoKICAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlOiB7CiAgICAgICAgICAg
ICBOb2RlKiBhcnJheVB1c2ggPSBhZGRUb0dyYXBoKEFycmF5UHVzaCwgT3BJbmZvKGFycmF5TW9k
ZS5hc1dvcmQoKSksIE9wSW5mbyhwcmVkaWN0aW9uKSwgZ2V0KHJlZ2lzdGVyT2Zmc2V0ICsgYXJn
dW1lbnRUb09wZXJhbmQoMCkpLCBnZXQocmVnaXN0ZXJPZmZzZXQgKyBhcmd1bWVudFRvT3BlcmFu
ZCgxKSkpOwotICAgICAgICAgICAgaWYgKHVzZXNSZXN1bHQpCi0gICAgICAgICAgICAgICAgc2V0
KHJlc3VsdE9wZXJhbmQsIGFycmF5UHVzaCk7CisgICAgICAgICAgICBzZXQocmVzdWx0T3BlcmFu
ZCwgYXJyYXlQdXNoKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAg
ICAgICAgIH0KQEAgLTE1NjAsNyArMTUyNiw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRs
ZUludHJpbnNpYyhib28KICAgICAgICAgaWYgKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzICE9
IDEpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAotICAgICAgICBBcnJheU1v
ZGUgYXJyYXlNb2RlID0gZ2V0QXJyYXlNb2RlKG1fY3VycmVudEluc3RydWN0aW9uWzVdLnUuYXJy
YXlQcm9maWxlKTsKKyAgICAgICAgQXJyYXlNb2RlIGFycmF5TW9kZSA9IGdldEFycmF5TW9kZSht
X2N1cnJlbnRJbnN0cnVjdGlvbls2XS51LmFycmF5UHJvZmlsZSk7CiAgICAgICAgIGlmICghYXJy
YXlNb2RlLmlzSlNBcnJheSgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBz
d2l0Y2ggKGFycmF5TW9kZS50eXBlKCkpIHsKQEAgLTE1NjksOCArMTUzNSw3IEBAIGJvb2wgQnl0
ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpYyhib28KICAgICAgICAgY2FzZSBBcnJheTo6Q29u
dGlndW91czoKICAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9yYWdlOiB7CiAgICAgICAgICAg
ICBOb2RlKiBhcnJheVBvcCA9IGFkZFRvR3JhcGgoQXJyYXlQb3AsIE9wSW5mbyhhcnJheU1vZGUu
YXNXb3JkKCkpLCBPcEluZm8ocHJlZGljdGlvbiksIGdldChyZWdpc3Rlck9mZnNldCArIGFyZ3Vt
ZW50VG9PcGVyYW5kKDApKSk7Ci0gICAgICAgICAgICBpZiAodXNlc1Jlc3VsdCkKLSAgICAgICAg
ICAgICAgICBzZXQocmVzdWx0T3BlcmFuZCwgYXJyYXlQb3ApOworICAgICAgICAgICAgc2V0KHJl
c3VsdE9wZXJhbmQsIGFycmF5UG9wKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAg
ICB9CiAgICAgICAgICAgICAKQEAgLTE1ODcsOCArMTU1Miw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJz
ZXI6OmhhbmRsZUludHJpbnNpYyhib28KICAgICAgICAgaW50IGluZGV4T3BlcmFuZCA9IHJlZ2lz
dGVyT2Zmc2V0ICsgYXJndW1lbnRUb09wZXJhbmQoMSk7CiAgICAgICAgIE5vZGUqIGNoYXJDb2Rl
ID0gYWRkVG9HcmFwaChTdHJpbmdDaGFyQ29kZUF0LCBPcEluZm8oQXJyYXlNb2RlKEFycmF5OjpT
dHJpbmcpLmFzV29yZCgpKSwgZ2V0KHRoaXNPcGVyYW5kKSwgZ2V0VG9JbnQzMihpbmRleE9wZXJh
bmQpKTsKIAotICAgICAgICBpZiAodXNlc1Jlc3VsdCkKLSAgICAgICAgICAgIHNldChyZXN1bHRP
cGVyYW5kLCBjaGFyQ29kZSk7CisgICAgICAgIHNldChyZXN1bHRPcGVyYW5kLCBjaGFyQ29kZSk7
CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApAQCAtMTYwMCw4ICsxNTY0LDcgQEAgYm9v
bCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50cmluc2ljKGJvbwogICAgICAgICBpbnQgaW5kZXhP
cGVyYW5kID0gcmVnaXN0ZXJPZmZzZXQgKyBhcmd1bWVudFRvT3BlcmFuZCgxKTsKICAgICAgICAg
Tm9kZSogY2hhckNvZGUgPSBhZGRUb0dyYXBoKFN0cmluZ0NoYXJBdCwgT3BJbmZvKEFycmF5TW9k
ZShBcnJheTo6U3RyaW5nKS5hc1dvcmQoKSksIGdldCh0aGlzT3BlcmFuZCksIGdldFRvSW50MzIo
aW5kZXhPcGVyYW5kKSk7CiAKLSAgICAgICAgaWYgKHVzZXNSZXN1bHQpCi0gICAgICAgICAgICBz
ZXQocmVzdWx0T3BlcmFuZCwgY2hhckNvZGUpOworICAgICAgICBzZXQocmVzdWx0T3BlcmFuZCwg
Y2hhckNvZGUpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAKQEAgLTE2MTAsOCArMTU3
Myw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpYyhib28KICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgCiAgICAgICAgIE5vZGUqIHJlZ0V4cEV4ZWMgPSBh
ZGRUb0dyYXBoKFJlZ0V4cEV4ZWMsIE9wSW5mbygwKSwgT3BJbmZvKHByZWRpY3Rpb24pLCBnZXQo
cmVnaXN0ZXJPZmZzZXQgKyBhcmd1bWVudFRvT3BlcmFuZCgwKSksIGdldChyZWdpc3Rlck9mZnNl
dCArIGFyZ3VtZW50VG9PcGVyYW5kKDEpKSk7Ci0gICAgICAgIGlmICh1c2VzUmVzdWx0KQotICAg
ICAgICAgICAgc2V0KHJlc3VsdE9wZXJhbmQsIHJlZ0V4cEV4ZWMpOworICAgICAgICBzZXQocmVz
dWx0T3BlcmFuZCwgcmVnRXhwRXhlYyk7CiAgICAgICAgIAogICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICB9CkBAIC0xNjIxLDggKzE1ODMsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJ
bnRyaW5zaWMoYm9vCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAogICAgICAg
ICBOb2RlKiByZWdFeHBFeGVjID0gYWRkVG9HcmFwaChSZWdFeHBUZXN0LCBPcEluZm8oMCksIE9w
SW5mbyhwcmVkaWN0aW9uKSwgZ2V0KHJlZ2lzdGVyT2Zmc2V0ICsgYXJndW1lbnRUb09wZXJhbmQo
MCkpLCBnZXQocmVnaXN0ZXJPZmZzZXQgKyBhcmd1bWVudFRvT3BlcmFuZCgxKSkpOwotICAgICAg
ICBpZiAodXNlc1Jlc3VsdCkKLSAgICAgICAgICAgIHNldChyZXN1bHRPcGVyYW5kLCByZWdFeHBF
eGVjKTsKKyAgICAgICAgc2V0KHJlc3VsdE9wZXJhbmQsIHJlZ0V4cEV4ZWMpOwogICAgICAgICAK
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtMTYzMyw3ICsxNTk0LDcgQEAgYm9vbCBC
eXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50cmluc2ljKGJvbwogfQogCiBib29sIEJ5dGVDb2RlUGFy
c2VyOjpoYW5kbGVDb25zdGFudEludGVybmFsRnVuY3Rpb24oCi0gICAgYm9vbCB1c2VzUmVzdWx0
LCBpbnQgcmVzdWx0T3BlcmFuZCwgSW50ZXJuYWxGdW5jdGlvbiogZnVuY3Rpb24sIGludCByZWdp
c3Rlck9mZnNldCwKKyAgICBpbnQgcmVzdWx0T3BlcmFuZCwgSW50ZXJuYWxGdW5jdGlvbiogZnVu
Y3Rpb24sIGludCByZWdpc3Rlck9mZnNldCwKICAgICBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMsIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24sIENvZGVTcGVjaWFsaXphdGlvbktpbmQg
a2luZCkKIHsKICAgICAvLyBJZiB3ZSBldmVyIGZpbmQgdGhhdCB3ZSBoYXZlIGEgbG90IG9mIGlu
dGVybmFsIGZ1bmN0aW9ucyB0aGF0IHdlIHNwZWNpYWxpemUgZm9yLApAQCAtMTY0NywxNiArMTYw
OCwxNCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVDb25zdGFudEludGVyCiAgICAgCiAg
ICAgaWYgKGZ1bmN0aW9uLT5jbGFzc0luZm8oKSA9PSAmQXJyYXlDb25zdHJ1Y3Rvcjo6c19pbmZv
KSB7CiAgICAgICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9PSAyKSB7Ci0gICAg
ICAgICAgICBzZXRJbnRyaW5zaWNSZXN1bHQoCi0gICAgICAgICAgICAgICAgdXNlc1Jlc3VsdCwg
cmVzdWx0T3BlcmFuZCwKKyAgICAgICAgICAgIHNldChyZXN1bHRPcGVyYW5kLAogICAgICAgICAg
ICAgICAgIGFkZFRvR3JhcGgoTmV3QXJyYXlXaXRoU2l6ZSwgT3BJbmZvKEFycmF5V2l0aFVuZGVj
aWRlZCksIGdldChyZWdpc3Rlck9mZnNldCArIGFyZ3VtZW50VG9PcGVyYW5kKDEpKSkpOwogICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGZvciAo
aW50IGkgPSAxOyBpIDwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXM7ICsraSkKICAgICAgICAg
ICAgIGFkZFZhckFyZ0NoaWxkKGdldChyZWdpc3Rlck9mZnNldCArIGFyZ3VtZW50VG9PcGVyYW5k
KGkpKSk7Ci0gICAgICAgIHNldEludHJpbnNpY1Jlc3VsdCgKLSAgICAgICAgICAgIHVzZXNSZXN1
bHQsIHJlc3VsdE9wZXJhbmQsCisgICAgICAgIHNldChyZXN1bHRPcGVyYW5kLAogICAgICAgICAg
ICAgYWRkVG9HcmFwaChOb2RlOjpWYXJBcmcsIE5ld0FycmF5LCBPcEluZm8oQXJyYXlXaXRoVW5k
ZWNpZGVkKSwgT3BJbmZvKDApKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0gZWxzZSBp
ZiAoZnVuY3Rpb24tPmNsYXNzSW5mbygpID09ICZTdHJpbmdDb25zdHJ1Y3Rvcjo6c19pbmZvKSB7
CkBAIC0xNjcwLDcgKzE2MjksNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVDb25zdGFu
dEludGVyCiAgICAgICAgIGlmIChraW5kID09IENvZGVGb3JDb25zdHJ1Y3QpCiAgICAgICAgICAg
ICByZXN1bHQgPSBhZGRUb0dyYXBoKE5ld1N0cmluZ09iamVjdCwgT3BJbmZvKGZ1bmN0aW9uLT5n
bG9iYWxPYmplY3QoKS0+c3RyaW5nT2JqZWN0U3RydWN0dXJlKCkpLCByZXN1bHQpOwogICAgICAg
ICAKLSAgICAgICAgc2V0SW50cmluc2ljUmVzdWx0KHVzZXNSZXN1bHQsIHJlc3VsdE9wZXJhbmQs
IHJlc3VsdCk7CisgICAgICAgIHNldChyZXN1bHRPcGVyYW5kLCByZXN1bHQpOwogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgCkBAIC0xOTgxLDggKzE5NDAsNiBAQCBib29sIEJ5dGVD
b2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgfQogCiAgICAgd2hpbGUgKHRydWUp
IHsKLSAgICAgICAgbV9jdXJyZW50UHJvZmlsaW5nSW5kZXggPSBtX2N1cnJlbnRJbmRleDsKLQog
ICAgICAgICAvLyBEb24ndCBleHRlbmQgb3ZlciBqdW1wIGRlc3RpbmF0aW9ucy4KICAgICAgICAg
aWYgKG1fY3VycmVudEluZGV4ID09IGxpbWl0KSB7CiAgICAgICAgICAgICAvLyBPcmRpbmFyaWx5
IHdlIHdhbnQgdG8gcGxhbnQgYSBqdW1wLiBCdXQgcmVmdXNlIHRvIGRvIHRoaXMgaWYgdGhlIGJs
b2NrIGlzCkBAIC0yMDA3LDcgKzE5NjQsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJs
b2NrKHVuc2lnbmVkCiAgICAgICAgIG1fY3VycmVudEluc3RydWN0aW9uID0gY3VycmVudEluc3Ry
dWN0aW9uOyAvLyBTb21lIG1ldGhvZHMgd2FudCB0byB1c2UgdGhpcywgYW5kIHdlJ2QgcmF0aGVy
IG5vdCB0aHJlYWQgaXQgdGhyb3VnaCBjYWxscy4KICAgICAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQg
PSBpbnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQoY3VycmVudEluc3RydWN0aW9uLT51Lm9wY29kZSk7
CiAgICAgICAgIAotICAgICAgICBpZiAobV9ncmFwaC5jb21waWxhdGlvbigpICYmIG9wY29kZUlE
ICE9IG9wX2NhbGxfcHV0X3Jlc3VsdCkgeworICAgICAgICBpZiAobV9ncmFwaC5jb21waWxhdGlv
bigpKSB7CiAgICAgICAgICAgICBhZGRUb0dyYXBoKENvdW50RXhlY3V0aW9uLCBPcEluZm8obV9n
cmFwaC5jb21waWxhdGlvbigpLT5leGVjdXRpb25Db3VudGVyRm9yKAogICAgICAgICAgICAgICAg
IFByb2ZpbGVyOjpPcmlnaW5TdGFjaygqbV92bS0+bV9wZXJCeXRlY29kZVByb2ZpbGVyLCBtX2Nv
ZGVCbG9jaywgY3VycmVudENvZGVPcmlnaW4oKSkpKSk7CiAgICAgICAgIH0KQEAgLTIwMjcsMTAg
KzE5ODQsMTAgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAg
ICAgICAgICAgaWYgKG9wMS0+b3AoKSAhPSBUb1RoaXMpIHsKICAgICAgICAgICAgICAgICBDb25j
dXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2st
Pm1fbG9jayk7CiAgICAgICAgICAgICAgICAgVmFsdWVQcm9maWxlKiBwcm9maWxlID0KLSAgICAg
ICAgICAgICAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT52YWx1ZVBy
b2ZpbGVGb3JCeXRlY29kZU9mZnNldChtX2N1cnJlbnRQcm9maWxpbmdJbmRleCk7CisgICAgICAg
ICAgICAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+dmFsdWVQcm9m
aWxlRm9yQnl0ZWNvZGVPZmZzZXQobV9jdXJyZW50SW5kZXgpOwogICAgICAgICAgICAgICAgIHBy
b2ZpbGUtPmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihsb2NrZXIpOwogI2lmIERGR19FTkFCTEUo
REVCVUdfVkVSQk9TRSkKLSAgICAgICAgICAgICAgICBkYXRhTG9nRigiW2JjIyV1XTogcHJvZmls
ZSAlcDogIiwgbV9jdXJyZW50UHJvZmlsaW5nSW5kZXgsIHByb2ZpbGUpOworICAgICAgICAgICAg
ICAgIGRhdGFMb2dGKCJbYmMjJXVdOiBwcm9maWxlICVwOiAiLCBtX2N1cnJlbnRJbmRleCwgcHJv
ZmlsZSk7CiAgICAgICAgICAgICAgICAgcHJvZmlsZS0+ZHVtcChXVEY6OmRhdGFGaWxlKCkpOwog
ICAgICAgICAgICAgICAgIGRhdGFMb2dGKCJcbiIpOwogI2VuZGlmCkBAIC0zMDAyLDggKzI5NTks
OCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgIGNh
c2Ugb3BfcmV0OgogICAgICAgICAgICAgZmx1c2hBcmd1bWVudHNBbmRDYXB0dXJlZFZhcmlhYmxl
cygpOwogICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZSgpKSB7Ci0gICAgICAgICAgICAg
ICAgaWYgKG1faW5saW5lU3RhY2tUb3AtPm1fcmV0dXJuVmFsdWUgIT0gSW52YWxpZFZpcnR1YWxS
ZWdpc3RlcikKLSAgICAgICAgICAgICAgICAgICAgc2V0RGlyZWN0KG1faW5saW5lU3RhY2tUb3At
Pm1fcmV0dXJuVmFsdWUsIGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSk7Cisg
ICAgICAgICAgICAgICAgQVNTRVJUKG1faW5saW5lU3RhY2tUb3AtPm1fcmV0dXJuVmFsdWUgIT0g
SW52YWxpZFZpcnR1YWxSZWdpc3Rlcik7CisgICAgICAgICAgICAgICAgc2V0RGlyZWN0KG1faW5s
aW5lU3RhY2tUb3AtPm1fcmV0dXJuVmFsdWUsIGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5v
cGVyYW5kKSk7CiAgICAgICAgICAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+bV9kaWRSZXR1cm4g
PSB0cnVlOwogICAgICAgICAgICAgICAgIGlmIChtX2lubGluZVN0YWNrVG9wLT5tX3VubGlua2Vk
QmxvY2tzLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgICAgICAvLyBJZiB3ZSdyZSByZXR1
cm5pbmcgZnJvbSB0aGUgZmlyc3QgYmxvY2ssIHRoZW4gd2UncmUgZG9uZSBwYXJzaW5nLgpAQCAt
MzA0NCwyOSArMzAwMSwyMyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2ln
bmVkCiAgICAgICAgICAgICBMQVNUX09QQ09ERShvcF90aHJvd19zdGF0aWNfZXJyb3IpOwogICAg
ICAgICAgICAgCiAgICAgICAgIGNhc2Ugb3BfY2FsbDoKLSAgICAgICAgICAgIGhhbmRsZUNhbGwo
aW50ZXJwcmV0ZXIsIGN1cnJlbnRJbnN0cnVjdGlvbiwgQ2FsbCwgQ29kZUZvckNhbGwpOworICAg
ICAgICAgICAgaGFuZGxlQ2FsbChjdXJyZW50SW5zdHJ1Y3Rpb24sIENhbGwsIENvZGVGb3JDYWxs
KTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2NhbGwpOwogICAgICAgICAgICAgCiAgICAg
ICAgIGNhc2Ugb3BfY29uc3RydWN0OgotICAgICAgICAgICAgaGFuZGxlQ2FsbChpbnRlcnByZXRl
ciwgY3VycmVudEluc3RydWN0aW9uLCBDb25zdHJ1Y3QsIENvZGVGb3JDb25zdHJ1Y3QpOworICAg
ICAgICAgICAgaGFuZGxlQ2FsbChjdXJyZW50SW5zdHJ1Y3Rpb24sIENvbnN0cnVjdCwgQ29kZUZv
ckNvbnN0cnVjdCk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9jb25zdHJ1Y3QpOwogICAg
ICAgICAgICAgCiAgICAgICAgIGNhc2Ugb3BfY2FsbF92YXJhcmdzOiB7CiAgICAgICAgICAgICBB
U1NFUlQoaW5saW5lQ2FsbEZyYW1lKCkpOwotICAgICAgICAgICAgQVNTRVJUKGN1cnJlbnRJbnN0
cnVjdGlvblszXS51Lm9wZXJhbmQgPT0gbV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2stPmFy
Z3VtZW50c1JlZ2lzdGVyKCkpOworICAgICAgICAgICAgQVNTRVJUKGN1cnJlbnRJbnN0cnVjdGlv
bls0XS51Lm9wZXJhbmQgPT0gbV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2stPmFyZ3VtZW50
c1JlZ2lzdGVyKCkpOwogICAgICAgICAgICAgQVNTRVJUKCFtX2lubGluZVN0YWNrVG9wLT5tX2Nv
ZGVCbG9jay0+c3ltYm9sVGFibGUoKS0+c2xvd0FyZ3VtZW50cygpKTsKICAgICAgICAgICAgIC8v
IEl0IHdvdWxkIGJlIGNvb2wgdG8gZnVubmVsIHRoaXMgaW50byBoYW5kbGVDYWxsKCkgc28gdGhh
dCBpdCBjYW4gaGFuZGxlCiAgICAgICAgICAgICAvLyBpbmxpbmluZy4gQnV0IGN1cnJlbnRseSB0
aGF0IHdvbid0IGJlIHByb2ZpdGFibGUgYW55d2F5LCBzaW5jZSBub25lIG9mIHRoZQogICAgICAg
ICAgICAgLy8gdXNlcyBvZiBjYWxsX3ZhcmFyZ3Mgd2lsbCBiZSBpbmxpbmVhYmxlLiBTbyB3ZSBz
ZXQgdGhpcyB1cCBtYW51YWxseSBhbmQKICAgICAgICAgICAgIC8vIHdpdGhvdXQgaW5saW5lL2lu
dHJpbnNpYyBkZXRlY3Rpb24uCiAgICAgICAgICAgICAKLSAgICAgICAgICAgIEluc3RydWN0aW9u
KiBwdXRJbnN0cnVjdGlvbiA9IGN1cnJlbnRJbnN0cnVjdGlvbiArIE9QQ09ERV9MRU5HVEgob3Bf
Y2FsbF92YXJhcmdzKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUg
cHJlZGljdGlvbiA9IFNwZWNOb25lOwotICAgICAgICAgICAgaWYgKGludGVycHJldGVyLT5nZXRP
cGNvZGVJRChwdXRJbnN0cnVjdGlvbi0+dS5vcGNvZGUpID09IG9wX2NhbGxfcHV0X3Jlc3VsdCkg
ewotICAgICAgICAgICAgICAgIG1fY3VycmVudFByb2ZpbGluZ0luZGV4ID0gbV9jdXJyZW50SW5k
ZXggKyBPUENPREVfTEVOR1RIKG9wX2NhbGxfdmFyYXJncyk7Ci0gICAgICAgICAgICAgICAgcHJl
ZGljdGlvbiA9IGdldFByZWRpY3Rpb24oKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIFNw
ZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSBnZXRQcmVkaWN0aW9uKCk7CiAgICAgICAgICAgICAK
ICAgICAgICAgICAgIGFkZFRvR3JhcGgoQ2hlY2tBcmd1bWVudHNOb3RDcmVhdGVkKTsKICAgICAg
ICAgICAgIApAQCAtMzA3NCwyMSArMzAyNSwxNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJz
ZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICBpZiAoSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVy
U2l6ZSArIGFyZ0NvdW50ID4gbV9wYXJhbWV0ZXJTbG90cykKICAgICAgICAgICAgICAgICBtX3Bh
cmFtZXRlclNsb3RzID0gSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSArIGFyZ0NvdW50Owog
ICAgICAgICAgICAgCi0gICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChnZXQoY3VycmVudEluc3Ry
dWN0aW9uWzFdLnUub3BlcmFuZCkpOyAvLyBjYWxsZWUKLSAgICAgICAgICAgIGFkZFZhckFyZ0No
aWxkKGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSk7IC8vIHRoaXMKKyAgICAg
ICAgICAgIGFkZFZhckFyZ0NoaWxkKGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5k
KSk7IC8vIGNhbGxlZQorICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQoZ2V0KGN1cnJlbnRJbnN0
cnVjdGlvblszXS51Lm9wZXJhbmQpKTsgLy8gdGhpcwogICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBhcmd1bWVudCA9IDE7IGFyZ3VtZW50IDwgYXJnQ291bnQ7ICsrYXJndW1lbnQpCiAgICAgICAg
ICAgICAgICAgYWRkVmFyQXJnQ2hpbGQoZ2V0KGFyZ3VtZW50VG9PcGVyYW5kKGFyZ3VtZW50KSkp
OwogICAgICAgICAgICAgCi0gICAgICAgICAgICBOb2RlKiBjYWxsID0gYWRkVG9HcmFwaChOb2Rl
OjpWYXJBcmcsIENhbGwsIE9wSW5mbygwKSwgT3BJbmZvKHByZWRpY3Rpb24pKTsKLSAgICAgICAg
ICAgIGlmIChpbnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQocHV0SW5zdHJ1Y3Rpb24tPnUub3Bjb2Rl
KSA9PSBvcF9jYWxsX3B1dF9yZXN1bHQpCi0gICAgICAgICAgICAgICAgc2V0KHB1dEluc3RydWN0
aW9uWzFdLnUub3BlcmFuZCwgY2FsbCk7CisgICAgICAgICAgICBzZXQoY3VycmVudEluc3RydWN0
aW9uWzFdLnUub3BlcmFuZCwKKyAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKE5vZGU6OlZhckFy
ZywgQ2FsbCwgT3BJbmZvKDApLCBPcEluZm8ocHJlZGljdGlvbikpKTsKICAgICAgICAgICAgIAog
ICAgICAgICAgICAgTkVYVF9PUENPREUob3BfY2FsbF92YXJhcmdzKTsKICAgICAgICAgfQogICAg
ICAgICAgICAgCi0gICAgICAgIGNhc2Ugb3BfY2FsbF9wdXRfcmVzdWx0OgotICAgICAgICAgICAg
TkVYVF9PUENPREUob3BfY2FsbF9wdXRfcmVzdWx0KTsKLSAgICAgICAgICAgIAogICAgICAgICBj
YXNlIG9wX2puZXFfcHRyOgogICAgICAgICAgICAgLy8gU3RhdGljYWxseSBzcGVjdWxhdGUgZm9y
IG5vdy4gSXQgbWFrZXMgc2Vuc2UgdG8gbGV0IHNwZWN1bGF0ZS1vbmx5IGpuZXFfcHRyCiAgICAg
ICAgICAgICAvLyBzdXBwb3J0IHNpbW1lciBmb3IgYSB3aGlsZSBiZWZvcmUgbWFraW5nIGl0IG1v
cmUgZ2VuZXJhbCwgc2luY2UgaXQncwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdDYXBhYmlsaXRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ2FwYWJpbGl0aWVzLmNwcAkocmV2aXNpb24gMTUwOTkzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODQs
NyArMTg0LDYgQEAgQ2FwYWJpbGl0eUxldmVsIGNhcGFiaWxpdHlMZXZlbChPcGNvZGVJRAogICAg
IGNhc2Ugb3BfbG9vcF9oaW50OgogICAgIGNhc2Ugb3BfcmV0OgogICAgIGNhc2Ugb3BfZW5kOgot
ICAgIGNhc2Ugb3BfY2FsbF9wdXRfcmVzdWx0OgogICAgIGNhc2Ugb3BfbmV3X29iamVjdDoKICAg
ICBjYXNlIG9wX25ld19hcnJheToKICAgICBjYXNlIG9wX25ld19hcnJheV93aXRoX3NpemU6Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXIu
Y3BwCShyZXZpc2lvbiAxNTA5OTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09T
UkV4aXRDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMSw4ICsxMDEsOCBAQCB2b2lk
IGNvbXBpbGVPU1JFeGl0KEV4ZWNTdGF0ZSogZXhlYykKICAgICAgICAgZXhpdC5tX2NvZGUgPSBG
SU5BTElaRV9DT0RFX0lGKAogICAgICAgICAgICAgc2hvdWxkU2hvd0Rpc2Fzc2VtYmx5KCksCiAg
ICAgICAgICAgICBwYXRjaEJ1ZmZlciwKLSAgICAgICAgICAgICgiREZHIE9TUiBleGl0ICMldSAo
YmMjJXUsICVzKSBmcm9tICVzIiwKLSAgICAgICAgICAgICAgICBleGl0SW5kZXgsIGV4aXQubV9j
b2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgsCisgICAgICAgICAgICAoIkRGRyBPU1IgZXhpdCAjJXUg
KCVzLCAlcykgZnJvbSAlcyIsCisgICAgICAgICAgICAgICAgZXhpdEluZGV4LCB0b0NTdHJpbmco
ZXhpdC5tX2NvZGVPcmlnaW4pLmRhdGEoKSwKICAgICAgICAgICAgICAgICBleGl0S2luZFRvU3Ry
aW5nKGV4aXQubV9raW5kKSwgdG9DU3RyaW5nKCpjb2RlQmxvY2spLmRhdGEoKSkpOwogICAgIH0K
ICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVy
Q29tbW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09T
UkV4aXRDb21waWxlckNvbW1vbi5jcHAJKHJldmlzaW9uIDE1MDk5MykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNzYsNyArNzYsNiBAQCB2b2lkIGhhbmRsZUV4aXRDb3VudHMoQ0NhbGxIZWxwZXJzJiBq
aXQsCiAKIHZvaWQgcmVpZnlJbmxpbmVkQ2FsbEZyYW1lcyhDQ2FsbEhlbHBlcnMmIGppdCwgY29u
c3QgT1NSRXhpdEJhc2UmIGV4aXQpCiB7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKICAgICBBU1NFUlQo
aml0LmJhc2VsaW5lQ29kZUJsb2NrKCktPmppdFR5cGUoKSA9PSBKSVRDb2RlOjpCYXNlbGluZUpJ
VCk7CiAgICAgaml0LnN0b3JlUHRyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbVB0cihqaXQu
YmFzZWxpbmVDb2RlQmxvY2soKSksIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcigoVmlydHVh
bFJlZ2lzdGVyKUpTU3RhY2s6OkNvZGVCbG9jaykpOwogICAgIApAQCAtODQsMTUgKzgzLDEyIEBA
IHZvaWQgcmVpZnlJbmxpbmVkQ2FsbEZyYW1lcyhDQ2FsbEhlbHBlcnMKICAgICAgICAgSW5saW5l
Q2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZTsK
ICAgICAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jayA9IGppdC5iYXNlbGluZUNvZGVC
bG9ja0Zvcihjb2RlT3JpZ2luKTsKICAgICAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9j
a0ZvckNhbGxlciA9IGppdC5iYXNlbGluZUNvZGVCbG9ja0ZvcihpbmxpbmVDYWxsRnJhbWUtPmNh
bGxlcik7Ci0gICAgICAgIFZlY3RvcjxCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ+JiBkZWNvZGVk
Q29kZU1hcCA9IGppdC5kZWNvZGVkQ29kZU1hcEZvcihiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxl
cik7Ci0gICAgICAgIHVuc2lnbmVkIHJldHVybkJ5dGVjb2RlSW5kZXggPSBpbmxpbmVDYWxsRnJh
bWUtPmNhbGxlci5ieXRlY29kZUluZGV4ICsgT1BDT0RFX0xFTkdUSChvcF9jYWxsKTsKLSAgICAg
ICAgQnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0KiBtYXBwaW5nID0gYmluYXJ5U2VhcmNoPEJ5dGVj
b2RlQW5kTWFjaGluZU9mZnNldCwgdW5zaWduZWQ+KGRlY29kZWRDb2RlTWFwLCBkZWNvZGVkQ29k
ZU1hcC5zaXplKCksIHJldHVybkJ5dGVjb2RlSW5kZXgsIEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNl
dDo6Z2V0Qnl0ZWNvZGVJbmRleCk7Ci0gICAgICAgIAotICAgICAgICBBU1NFUlQobWFwcGluZyk7
Ci0gICAgICAgIEFTU0VSVChtYXBwaW5nLT5tX2J5dGVjb2RlSW5kZXggPT0gcmV0dXJuQnl0ZWNv
ZGVJbmRleCk7CisgICAgICAgIHVuc2lnbmVkIGNhbGxCeXRlY29kZUluZGV4ID0gaW5saW5lQ2Fs
bEZyYW1lLT5jYWxsZXIuYnl0ZWNvZGVJbmRleDsKKyAgICAgICAgQ2FsbExpbmtJbmZvJiBjYWxs
TGlua0luZm8gPSBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+Z2V0Q2FsbExpbmtJbmZvKGNh
bGxCeXRlY29kZUluZGV4KTsKICAgICAgICAgCi0gICAgICAgIHZvaWQqIGp1bXBUYXJnZXQgPSBi
YXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+aml0Q29kZSgpLT5leGVjdXRhYmxlQWRkcmVzc0F0
T2Zmc2V0KG1hcHBpbmctPm1fbWFjaGluZUNvZGVPZmZzZXQpOworICAgICAgICB2b2lkKiBqdW1w
VGFyZ2V0ID0gY2FsbExpbmtJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5leGVjdXRhYmxlQWRkcmVz
cygpOwogCisjaWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAgR1BSUmVnIGNhbGxlckZyYW1lR1BS
OwogICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5jYWxsZXIuaW5saW5lQ2FsbEZyYW1lKSB7
CiAgICAgICAgICAgICBqaXQuYWRkUHRyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKGlu
bGluZUNhbGxGcmFtZS0+Y2FsbGVyLmlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKiBzaXpl
b2YoRW5jb2RlZEpTVmFsdWUpKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86
OnJlZ1QzKTsKQEAgLTEwOCwyNCArMTA0LDcgQEAgdm9pZCByZWlmeUlubGluZWRDYWxsRnJhbWVz
KENDYWxsSGVscGVycwogICAgICAgICBqaXQuc3RvcmUzMihBc3NlbWJseUhlbHBlcnM6OlRydXN0
ZWRJbW0zMihpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCkpLCBBc3NlbWJseUhlbHBl
cnM6OnBheWxvYWRGb3IoKFZpcnR1YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09m
ZnNldCArIEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpKSk7CiAgICAgICAgIGlmICghaW5saW5lQ2Fs
bEZyYW1lLT5pc0Nsb3N1cmVDYWxsKCkpCiAgICAgICAgICAgICBqaXQuc3RvcmU2NChBc3NlbWJs
eUhlbHBlcnM6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZShpbmxpbmVDYWxs
RnJhbWUtPmNhbGxlZS5nZXQoKSkpKSwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0
dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBKU1N0YWNrOjpDYWxs
ZWUpKSk7Ci0gICAgfQogI2Vsc2UgLy8gVVNFKEpTVkFMVUU2NCkgLy8gc28gdGhpcyBpcyB0aGUg
MzItYml0IHBhcnQKLSAgICBBU1NFUlQoaml0LmJhc2VsaW5lQ29kZUJsb2NrKCktPmppdFR5cGUo
KSA9PSBKSVRDb2RlOjpCYXNlbGluZUpJVCk7Ci0gICAgaml0LnN0b3JlUHRyKEFzc2VtYmx5SGVs
cGVyczo6VHJ1c3RlZEltbVB0cihqaXQuYmFzZWxpbmVDb2RlQmxvY2soKSksIEFzc2VtYmx5SGVs
cGVyczo6YWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKUpTU3RhY2s6OkNvZGVCbG9jaykpOwot
ICAgIAotICAgIGZvciAoQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0gZXhpdC5tX2NvZGVPcmlnaW47
IGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lOyBjb2RlT3JpZ2luID0gY29kZU9yaWdpbi5pbmxp
bmVDYWxsRnJhbWUtPmNhbGxlcikgewotICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNh
bGxGcmFtZSA9IGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lOwotICAgICAgICBDb2RlQmxvY2sq
IGJhc2VsaW5lQ29kZUJsb2NrID0gaml0LmJhc2VsaW5lQ29kZUJsb2NrRm9yKGNvZGVPcmlnaW4p
OwotICAgICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyID0gaml0LmJh
c2VsaW5lQ29kZUJsb2NrRm9yKGlubGluZUNhbGxGcmFtZS0+Y2FsbGVyKTsKLSAgICAgICAgVmVj
dG9yPEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldD4mIGRlY29kZWRDb2RlTWFwID0gaml0LmRlY29k
ZWRDb2RlTWFwRm9yKGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyKTsKLSAgICAgICAgdW5zaWdu
ZWQgcmV0dXJuQnl0ZWNvZGVJbmRleCA9IGlubGluZUNhbGxGcmFtZS0+Y2FsbGVyLmJ5dGVjb2Rl
SW5kZXggKyBPUENPREVfTEVOR1RIKG9wX2NhbGwpOwotICAgICAgICBCeXRlY29kZUFuZE1hY2hp
bmVPZmZzZXQqIG1hcHBpbmcgPSBiaW5hcnlTZWFyY2g8Qnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0
LCB1bnNpZ25lZD4oZGVjb2RlZENvZGVNYXAsIGRlY29kZWRDb2RlTWFwLnNpemUoKSwgcmV0dXJu
Qnl0ZWNvZGVJbmRleCwgQnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0OjpnZXRCeXRlY29kZUluZGV4
KTsKLSAgICAgICAgCi0gICAgICAgIEFTU0VSVChtYXBwaW5nKTsKLSAgICAgICAgQVNTRVJUKG1h
cHBpbmctPm1fYnl0ZWNvZGVJbmRleCA9PSByZXR1cm5CeXRlY29kZUluZGV4KTsKLSAgICAgICAg
Ci0gICAgICAgIHZvaWQqIGp1bXBUYXJnZXQgPSBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+
aml0Q29kZSgpLT5leGVjdXRhYmxlQWRkcmVzc0F0T2Zmc2V0KG1hcHBpbmctPm1fbWFjaGluZUNv
ZGVPZmZzZXQpOwotCiAgICAgICAgIEdQUlJlZyBjYWxsZXJGcmFtZUdQUjsKICAgICAgICAgaWYg
KGlubGluZUNhbGxGcmFtZS0+Y2FsbGVyLmlubGluZUNhbGxGcmFtZSkgewogICAgICAgICAgICAg
aml0LmFkZDMyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKGlubGluZUNhbGxGcmFtZS0+
Y2FsbGVyLmlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKiBzaXplb2YoRW5jb2RlZEpTVmFs
dWUpKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OnJlZ1QzKTsKQEAgLTE0
NCw4ICsxMjMsOCBAQCB2b2lkIHJlaWZ5SW5saW5lZENhbGxGcmFtZXMoQ0NhbGxIZWxwZXJzCiAg
ICAgICAgIGppdC5zdG9yZTMyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6
OkNlbGxUYWcpLCBBc3NlbWJseUhlbHBlcnM6OnRhZ0ZvcigoVmlydHVhbFJlZ2lzdGVyKShpbmxp
bmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgSlNTdGFjazo6Q2FsbGVlKSkpOwogICAgICAgICBp
ZiAoIWlubGluZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2FsbCgpKQogICAgICAgICAgICAgaml0LnN0
b3JlUHRyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbVB0cihpbmxpbmVDYWxsRnJhbWUtPmNh
bGxlZS5nZXQoKSksIEFzc2VtYmx5SGVscGVyczo6cGF5bG9hZEZvcigoVmlydHVhbFJlZ2lzdGVy
KShpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgSlNTdGFjazo6Q2FsbGVlKSkpOwotICAg
IH0KICNlbmRpZiAvLyBVU0UoSlNWQUxVRTY0KSAvLyBlbmRpbmcgdGhlICNlbHNlIHBhcnQsIHNv
IGRpcmVjdGx5IGFib3ZlIGlzIHRoZSAzMi1iaXQgcGFydAorICAgIH0KIH0KIAogdm9pZCBhZGp1
c3RBbmRKdW1wVG9UYXJnZXQoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IE9TUkV4aXRCYXNlJiBl
eGl0KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkocmV2aXNpb24gMTUwOTkzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
MzYsNyArMjM2LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogICAgICAg
ICAKICAgICAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBtX2ludGVycHJldGVyLT5nZXRPcGNvZGVJ
RChjdXJyZW50SW5zdHJ1Y3Rpb24tPnUub3Bjb2RlKTsKIAotICAgICAgICBpZiAobV9jb21waWxh
dGlvbiAmJiBvcGNvZGVJRCAhPSBvcF9jYWxsX3B1dF9yZXN1bHQpIHsKKyAgICAgICAgaWYgKG1f
Y29tcGlsYXRpb24pIHsKICAgICAgICAgICAgIGFkZDY0KAogICAgICAgICAgICAgICAgIFRydXN0
ZWRJbW0zMigxKSwKICAgICAgICAgICAgICAgICBBYnNvbHV0ZUFkZHJlc3MobV9jb21waWxhdGlv
bi0+ZXhlY3V0aW9uQ291bnRlckZvcihQcm9maWxlcjo6T3JpZ2luU3RhY2soUHJvZmlsZXI6Ok9y
aWdpbigKQEAgLTM2Myw3ICszNjMsNiBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFz
cygpCiAgICAgICAgIERFRklORV9PUChvcF9yZXNvbHZlX3dpdGhfYmFzZSkKICAgICAgICAgREVG
SU5FX09QKG9wX3Jlc29sdmVfd2l0aF90aGlzKQogICAgICAgICBERUZJTkVfT1Aob3BfcmV0KQot
ICAgICAgICBERUZJTkVfT1Aob3BfY2FsbF9wdXRfcmVzdWx0KQogICAgICAgICBERUZJTkVfT1Ao
b3BfcmV0X29iamVjdF9vcl90aGlzKQogICAgICAgICBERUZJTkVfT1Aob3BfcnNoaWZ0KQogICAg
ICAgICBERUZJTkVfT1Aob3BfdXJzaGlmdCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAko
cmV2aXNpb24gMTUwOTkzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkod29y
a2luZyBjb3B5KQpAQCAtNDMxLDggKzQzMSw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2
b2lkIGNvbXBpbGVPcENhbGwoT3Bjb2RlSUQsIEluc3RydWN0aW9uKiwgdW5zaWduZWQgY2FsbExp
bmtJbmZvSW5kZXgpOwogICAgICAgICB2b2lkIGNvbXBpbGVPcENhbGxTbG93Q2FzZShPcGNvZGVJ
RCwgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwgdW5zaWdu
ZWQgY2FsbExpbmtJbmZvSW5kZXgpOwogICAgICAgICB2b2lkIGNvbXBpbGVMb2FkVmFyYXJncyhJ
bnN0cnVjdGlvbiopOwotICAgICAgICB2b2lkIGNvbXBpbGVDYWxsRXZhbCgpOwotICAgICAgICB2
b2lkIGNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0
b3ImKTsKKyAgICAgICAgdm9pZCBjb21waWxlQ2FsbEV2YWwoSW5zdHJ1Y3Rpb24qKTsKKyAgICAg
ICAgdm9pZCBjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShJbnN0cnVjdGlvbiosIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0UHV0Q2FsbFJlc3VsdChJ
bnN0cnVjdGlvbiopOwogCiAgICAgICAgIGVudW0gQ29tcGlsZU9wU3RyaWN0RXFUeXBlIHsgT3BT
dHJpY3RFcSwgT3BOU3RyaWN0RXEgfTsKICAgICAgICAgdm9pZCBjb21waWxlT3BTdHJpY3RFcShJ
bnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIENvbXBpbGVPcFN0cmljdEVxVHlwZSB0eXBlKTsKQEAg
LTY0Myw3ICs2NDQsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0X29wX2Nh
bGwoSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2NhbGxfZXZhbChJbnN0cnVj
dGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfY2FsbF92YXJhcmdzKEluc3RydWN0aW9uKik7
Ci0gICAgICAgIHZvaWQgZW1pdF9vcF9jYWxsX3B1dF9yZXN1bHQoSW5zdHJ1Y3Rpb24qKTsKICAg
ICAgICAgdm9pZCBlbWl0X29wX2NhdGNoKEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1p
dF9vcF9jb25zdHJ1Y3QoSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2dldF9j
YWxsZWUoSW5zdHJ1Y3Rpb24qKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
Q2FsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxs
LmNwcAkocmV2aXNpb24gMTUwOTkzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRD
YWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsMjAgKzUxLDE4IEBAIHVzaW5nIG5hbWVzcGFj
ZSBzdGQ7CiAKIG5hbWVzcGFjZSBKU0MgewogCi12b2lkIEpJVDo6ZW1pdF9vcF9jYWxsX3B1dF9y
ZXN1bHQoSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQordm9pZCBKSVQ6OmVtaXRQdXRDYWxsUmVz
dWx0KEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbikKIHsKICAgICBpbnQgZHN0ID0gaW5zdHJ1Y3Rp
b25bMV0udS5vcGVyYW5kOwogICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoKTsKICAgICBlbWl0
UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci0gICAgaWYgKGNhbkJlT3B0aW1pemVkT3JJbmxpbmVk
KCkpCi0gICAgICAgIGtpbGxMYXN0UmVzdWx0UmVnaXN0ZXIoKTsgLy8gTWFrZSBsYXN0UmVzdWx0
UmVnaXN0ZXIgdHJhY2tpbmcgc2ltcGxlciBpbiB0aGUgREZHLgogfQogCiB2b2lkIEpJVDo6Y29t
cGlsZUxvYWRWYXJhcmdzKEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbikKIHsKLSAgICBpbnQgdGhp
c1ZhbHVlID0gaW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotICAgIGludCBhcmd1bWVudHMgPSBp
bnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7Ci0gICAgaW50IGZpcnN0RnJlZVJlZ2lzdGVyID0gaW5z
dHJ1Y3Rpb25bNF0udS5vcGVyYW5kOworICAgIGludCB0aGlzVmFsdWUgPSBpbnN0cnVjdGlvblsz
XS51Lm9wZXJhbmQ7CisgICAgaW50IGFyZ3VtZW50cyA9IGluc3RydWN0aW9uWzRdLnUub3BlcmFu
ZDsKKyAgICBpbnQgZmlyc3RGcmVlUmVnaXN0ZXIgPSBpbnN0cnVjdGlvbls1XS51Lm9wZXJhbmQ7
CiAKICAgICBraWxsTGFzdFJlc3VsdFJlZ2lzdGVyKCk7CiAKQEAgLTEyNCw3ICsxMjIsNyBAQCB2
b2lkIEpJVDo6Y29tcGlsZUxvYWRWYXJhcmdzKEluc3RydWN0aW9uCiAgICAgICAgIGVuZC5saW5r
KHRoaXMpOwogfQogCi12b2lkIEpJVDo6Y29tcGlsZUNhbGxFdmFsKCkKK3ZvaWQgSklUOjpjb21w
aWxlQ2FsbEV2YWwoSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQogewogICAgIEpJVFN0dWJDYWxs
IHN0dWJDYWxsKHRoaXMsIGN0aV9vcF9jYWxsX2V2YWwpOyAvLyBJbml0aWFsaXplcyBTY29wZUNo
YWluOyBSZXR1cm5QQzsgQ29kZUJsb2NrLgogICAgIHN0dWJDYWxsLmNhbGwoKTsKQEAgLTEzMiw5
ICsxMzAsMTEgQEAgdm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbCgpCiAgICAgZW1pdEdldEZyb21D
YWxsRnJhbWVIZWFkZXJQdHIoSlNTdGFjazo6Q2FsbGVyRnJhbWUsIGNhbGxGcmFtZVJlZ2lzdGVy
KTsKIAogICAgIHNhbXBsZUNvZGVCbG9jayhtX2NvZGVCbG9jayk7CisgICAgCisgICAgZW1pdFB1
dENhbGxSZXN1bHQoaW5zdHJ1Y3Rpb24pOwogfQogCi12b2lkIEpJVDo6Y29tcGlsZUNhbGxFdmFs
U2xvd0Nhc2UoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3ZvaWQgSklU
Ojpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7CiAgICAgbGlua1Nsb3dDYXNlKGl0
ZXIpOwogCkBAIC0xNDIsMTEgKzE0MiwxMyBAQCB2b2lkIEpJVDo6Y29tcGlsZUNhbGxFdmFsU2xv
d0Nhc2UoVmVjdG9yCiAgICAgZW1pdE5ha2VkQ2FsbChtX3ZtLT5nZXRDVElTdHViKHZpcnR1YWxD
YWxsR2VuZXJhdG9yKS5jb2RlKCkpOwogCiAgICAgc2FtcGxlQ29kZUJsb2NrKG1fY29kZUJsb2Nr
KTsKKyAgICAKKyAgICBlbWl0UHV0Q2FsbFJlc3VsdChpbnN0cnVjdGlvbik7CiB9CiAKIHZvaWQg
SklUOjpjb21waWxlT3BDYWxsKE9wY29kZUlEIG9wY29kZUlELCBJbnN0cnVjdGlvbiogaW5zdHJ1
Y3Rpb24sIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KQogewotICAgIGludCBjYWxsZWUgPSBp
bnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgaW50IGNhbGxlZSA9IGluc3RydWN0aW9uWzJd
LnUub3BlcmFuZDsKIAogICAgIC8qIENhbGxlciBhbHdheXM6CiAgICAgICAgIC0gVXBkYXRlcyBj
YWxsRnJhbWVSZWdpc3RlciB0byBjYWxsZWUgY2FsbEZyYW1lLgpAQCAtMTY1LDE0ICsxNjcsMTQg
QEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoT3Bjb2RlSUQgb3Bjb2RlSQogICAgIGlmIChvcGNv
ZGVJRCA9PSBvcF9jYWxsX3ZhcmFyZ3MpCiAgICAgICAgIGNvbXBpbGVMb2FkVmFyYXJncyhpbnN0
cnVjdGlvbik7CiAgICAgZWxzZSB7Ci0gICAgICAgIGludCBhcmdDb3VudCA9IGluc3RydWN0aW9u
WzJdLnUub3BlcmFuZDsKLSAgICAgICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0gaW5zdHJ1Y3Rpb25b
M10udS5vcGVyYW5kOworICAgICAgICBpbnQgYXJnQ291bnQgPSBpbnN0cnVjdGlvblszXS51Lm9w
ZXJhbmQ7CisgICAgICAgIGludCByZWdpc3Rlck9mZnNldCA9IGluc3RydWN0aW9uWzRdLnUub3Bl
cmFuZDsKIAogICAgICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfY2FsbCAmJiBzaG91bGRFbWl0UHJv
ZmlsaW5nKCkpIHsKICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocmVnaXN0ZXJP
ZmZzZXQgKyBDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0SW5jbHVkaW5nVGhpcygwKSwgcmVnVDAp
OwogICAgICAgICAgICAgSnVtcCBkb25lID0gZW1pdEp1bXBJZk5vdEpTQ2VsbChyZWdUMCk7CiAg
ICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJlT2Zmc2V0
KCkpLCByZWdUMCk7Ci0gICAgICAgICAgICBzdG9yZVB0cihyZWdUMCwgaW5zdHJ1Y3Rpb25bNV0u
dS5hcnJheVByb2ZpbGUtPmFkZHJlc3NPZkxhc3RTZWVuU3RydWN0dXJlKCkpOworICAgICAgICAg
ICAgc3RvcmVQdHIocmVnVDAsIGluc3RydWN0aW9uWzZdLnUuYXJyYXlQcm9maWxlLT5hZGRyZXNz
T2ZMYXN0U2VlblN0cnVjdHVyZSgpKTsKICAgICAgICAgICAgIGRvbmUubGluayh0aGlzKTsKICAg
ICAgICAgfQogICAgIApAQCAtMTg4LDcgKzE5MCw3IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxs
KE9wY29kZUlEIG9wY29kZUkKICAgICBtb3ZlKHJlZ1QxLCBjYWxsRnJhbWVSZWdpc3Rlcik7CiAK
ICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfY2FsbF9ldmFsKSB7Ci0gICAgICAgIGNvbXBpbGVDYWxs
RXZhbCgpOworICAgICAgICBjb21waWxlQ2FsbEV2YWwoaW5zdHJ1Y3Rpb24pOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQogCkBAIC0yMDksMTIgKzIxMSwxNCBAQCB2b2lkIEpJVDo6Y29tcGlsZU9w
Q2FsbChPcGNvZGVJRCBvcGNvZGVJCiAgICAgbV9jYWxsU3RydWN0dXJlU3R1YkNvbXBpbGF0aW9u
SW5mb1tjYWxsTGlua0luZm9JbmRleF0uaG90UGF0aE90aGVyID0gZW1pdE5ha2VkQ2FsbCgpOwog
CiAgICAgc2FtcGxlQ29kZUJsb2NrKG1fY29kZUJsb2NrKTsKKyAgICAKKyAgICBlbWl0UHV0Q2Fs
bFJlc3VsdChpbnN0cnVjdGlvbik7CiB9CiAKLXZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nh
c2UoT3Bjb2RlSUQgb3Bjb2RlSUQsIEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlciwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpCit2b2lkIEpJVDo6
Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKE9wY29kZUlEIG9wY29kZUlELCBJbnN0cnVjdGlvbiogaW5z
dHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIHVuc2lnbmVk
IGNhbGxMaW5rSW5mb0luZGV4KQogewogICAgIGlmIChvcGNvZGVJRCA9PSBvcF9jYWxsX2V2YWwp
IHsKLSAgICAgICAgY29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoaXRlcik7CisgICAgICAgIGNvbXBp
bGVDYWxsRXZhbFNsb3dDYXNlKGluc3RydWN0aW9uLCBpdGVyKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIApAQCAtMjIzLDYgKzIyNyw4IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nh
c2UoT3Bjb2RlSUQKICAgICBtX2NhbGxTdHJ1Y3R1cmVTdHViQ29tcGlsYXRpb25JbmZvW2NhbGxM
aW5rSW5mb0luZGV4XS5jYWxsUmV0dXJuTG9jYXRpb24gPSBlbWl0TmFrZWRDYWxsKG9wY29kZUlE
ID09IG9wX2NvbnN0cnVjdCA/IG1fdm0tPmdldENUSVN0dWIobGlua0NvbnN0cnVjdEdlbmVyYXRv
cikuY29kZSgpIDogbV92bS0+Z2V0Q1RJU3R1YihsaW5rQ2FsbEdlbmVyYXRvcikuY29kZSgpKTsK
IAogICAgIHNhbXBsZUNvZGVCbG9jayhtX2NvZGVCbG9jayk7CisgICAgCisgICAgZW1pdFB1dENh
bGxSZXN1bHQoaW5zdHJ1Y3Rpb24pOwogfQogCiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVDbG9z
dXJlQ2FsbChDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbywgQ29kZUJsb2NrKiBjYWxsZWVDb2Rl
QmxvY2ssIFN0cnVjdHVyZSogZXhwZWN0ZWRTdHJ1Y3R1cmUsIEV4ZWN1dGFibGVCYXNlKiBleHBl
Y3RlZEV4ZWN1dGFibGUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjb2RlUHRyKQpAQCAtMjcxLDYg
KzI3Nyw0NiBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVDbG9zdXJlQ2FsbChDYWxsCiAgICAg
Y2FsbExpbmtJbmZvLT5zdHViID0gc3R1YlJvdXRpbmUucmVsZWFzZSgpOwogfQogCit2b2lkIEpJ
VDo6ZW1pdF9vcF9jYWxsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7CisgICAg
Y29tcGlsZU9wQ2FsbChvcF9jYWxsLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG1fY2FsbExpbmtJbmZv
SW5kZXgrKyk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX2NhbGxfZXZhbChJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uKQoreworICAgIGNvbXBpbGVPcENhbGwob3BfY2FsbF9ldmFsLCBj
dXJyZW50SW5zdHJ1Y3Rpb24sIG1fY2FsbExpbmtJbmZvSW5kZXgpOworfQorCit2b2lkIEpJVDo6
ZW1pdF9vcF9jYWxsX3ZhcmFyZ3MoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sK
KyAgICBjb21waWxlT3BDYWxsKG9wX2NhbGxfdmFyYXJncywgY3VycmVudEluc3RydWN0aW9uLCBt
X2NhbGxMaW5rSW5mb0luZGV4KyspOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9jb25zdHJ1Y3Qo
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBjb21waWxlT3BDYWxsKG9w
X2NvbnN0cnVjdCwgY3VycmVudEluc3RydWN0aW9uLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwor
fQorCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2FsbChJbnN0cnVjdGlvbiogY3VycmVudEluc3Ry
dWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQoreworICAgIGNv
bXBpbGVPcENhbGxTbG93Q2FzZShvcF9jYWxsLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1f
Y2FsbExpbmtJbmZvSW5kZXgrKyk7Cit9CisKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9jYWxsX2V2
YWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlcikKK3sKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2Uob3BfY2FsbF9l
dmFsLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgpOworfQor
IAordm9pZCBKSVQ6OmVtaXRTbG93X29wX2NhbGxfdmFyYXJncyhJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQorewor
ICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZShvcF9jYWxsX3ZhcmFyZ3MsIGN1cnJlbnRJbnN0cnVj
dGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKK30KKwordm9pZCBKSVQ6OmVtaXRT
bG93X29wX2NvbnN0cnVjdChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8
U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQoreworICAgIGNvbXBpbGVPcENhbGxTbG93
Q2FzZShvcF9jb25zdHJ1Y3QsIGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0lu
Zm9JbmRleCsrKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBVU0UoSlNW
QUxVRTY0KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCShy
ZXZpc2lvbiAxNTA5OTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDEsMjYgKzI0MSw2IEBAIHZvaWQgSklUOjplbWl0X29w
X2lzX3N0cmluZyhJbnN0cnVjdGlvbioKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7
CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX2NhbGwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVj
dGlvbikKLXsKLSAgICBjb21waWxlT3BDYWxsKG9wX2NhbGwsIGN1cnJlbnRJbnN0cnVjdGlvbiwg
bV9jYWxsTGlua0luZm9JbmRleCsrKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfY2FsbF9ldmFs
KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgY29tcGlsZU9wQ2FsbChv
cF9jYWxsX2V2YWwsIGN1cnJlbnRJbnN0cnVjdGlvbiwgbV9jYWxsTGlua0luZm9JbmRleCk7Ci19
Ci0KLXZvaWQgSklUOjplbWl0X29wX2NhbGxfdmFyYXJncyhJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQotewotICAgIGNvbXBpbGVPcENhbGwob3BfY2FsbF92YXJhcmdzLCBjdXJyZW50
SW5zdHJ1Y3Rpb24sIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7Ci19Ci0KLXZvaWQgSklUOjplbWl0
X29wX2NvbnN0cnVjdChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGNv
bXBpbGVPcENhbGwob3BfY29uc3RydWN0LCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG1fY2FsbExpbmtJ
bmZvSW5kZXgrKyk7Ci19Ci0KIHZvaWQgSklUOjplbWl0X29wX3RlYXJfb2ZmX2FjdGl2YXRpb24o
SW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBpbnQgYWN0aXZhdGlvbiA9
IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CkBAIC0xMDk5LDI2ICsxMDc5LDYgQEAg
dm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2YoSW5zdHJ1YwogICAgIHN0dWJDYWxsLmNh
bGwoZHN0KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NhbGwoSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikK
LXsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2Uob3BfY2FsbCwgY3VycmVudEluc3RydWN0aW9u
LCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwotfQotCi12b2lkIEpJVDo6ZW1pdFNsb3df
b3BfY2FsbF9ldmFsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93
Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgY29tcGlsZU9wQ2FsbFNsb3dDYXNl
KG9wX2NhbGxfZXZhbCwgY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0lu
ZGV4KTsKLX0KLSAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9jYWxsX3ZhcmFyZ3MoSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKLXsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2Uob3BfY2FsbF92YXJhcmdzLCBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7Ci19Ci0KLXZvaWQg
SklUOjplbWl0U2xvd19vcF9jb25zdHJ1Y3QoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
biwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBjb21waWxl
T3BDYWxsU2xvd0Nhc2Uob3BfY29uc3RydWN0LCBjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1f
Y2FsbExpbmtJbmZvSW5kZXgrKyk7Ci19Ci0KIHZvaWQgSklUOjplbWl0U2xvd19vcF90b19udW1i
ZXIoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+
OjppdGVyYXRvciYgaXRlcikKIHsKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJKHJldmlzaW9u
IDE1MDk5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NjEsMTYgKzE0NjEsMTYgQEAgaW5saW5lIFNsb3dQYXRo
UmV0dXJuVHlwZSBnZW5lcmljQ2FsbChFeAogICAgIC8vIC0gSWYgcG9zc2libGUsIGxpbmsgdGhl
IGNhbGwncyBpbmxpbmUgY2FjaGUuCiAgICAgLy8gLSBSZXR1cm4gYSB0dXBsZSBvZiBtYWNoaW5l
IGNvZGUgYWRkcmVzcyB0byBjYWxsIGFuZCB0aGUgbmV3IGNhbGwgZnJhbWUuCiAgICAgCi0gICAg
SlNWYWx1ZSBjYWxsZWVBc1ZhbHVlID0gTExJTlRfT1BfQygxKS5qc1ZhbHVlKCk7CisgICAgSlNW
YWx1ZSBjYWxsZWVBc1ZhbHVlID0gTExJTlRfT1BfQygyKS5qc1ZhbHVlKCk7CiAgICAgCi0gICAg
RXhlY1N0YXRlKiBleGVjQ2FsbGVlID0gZXhlYyArIHBjWzNdLnUub3BlcmFuZDsKKyAgICBFeGVj
U3RhdGUqIGV4ZWNDYWxsZWUgPSBleGVjICsgcGNbNF0udS5vcGVyYW5kOwogICAgIAotICAgIGV4
ZWNDYWxsZWUtPnNldEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKHBjWzJdLnUub3BlcmFuZCk7
CisgICAgZXhlY0NhbGxlZS0+c2V0QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMocGNbM10udS5v
cGVyYW5kKTsKICAgICBleGVjQ2FsbGVlLT51bmNoZWNrZWRSKEpTU3RhY2s6OkNhbGxlZSkgPSBj
YWxsZWVBc1ZhbHVlOwogICAgIGV4ZWNDYWxsZWUtPnNldENhbGxlckZyYW1lKGV4ZWMpOwogICAg
IAotICAgIEFTU0VSVChwY1s0XS51LmNhbGxMaW5rSW5mbyk7Ci0gICAgcmV0dXJuIHNldFVwQ2Fs
bChleGVjQ2FsbGVlLCBwYywga2luZCwgY2FsbGVlQXNWYWx1ZSwgcGNbNF0udS5jYWxsTGlua0lu
Zm8pOworICAgIEFTU0VSVChwY1s1XS51LmNhbGxMaW5rSW5mbyk7CisgICAgcmV0dXJuIHNldFVw
Q2FsbChleGVjQ2FsbGVlLCBwYywga2luZCwgY2FsbGVlQXNWYWx1ZSwgcGNbNV0udS5jYWxsTGlu
a0luZm8pOwogfQogCiBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfY2FsbCkKQEAgLTE0
OTMsMTEgKzE0OTMsMTEgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2NhbGxfdmFy
YQogICAgIC8vIC0gRmlndXJlIG91dCB3aGF0IHRvIGNhbGwgYW5kIGNvbXBpbGUgaXQgaWYgbmVj
ZXNzYXJ5LgogICAgIC8vIC0gUmV0dXJuIGEgdHVwbGUgb2YgbWFjaGluZSBjb2RlIGFkZHJlc3Mg
dG8gY2FsbCBhbmQgdGhlIG5ldyBjYWxsIGZyYW1lLgogICAgIAotICAgIEpTVmFsdWUgY2FsbGVl
QXNWYWx1ZSA9IExMSU5UX09QX0MoMSkuanNWYWx1ZSgpOworICAgIEpTVmFsdWUgY2FsbGVlQXNW
YWx1ZSA9IExMSU5UX09QX0MoMikuanNWYWx1ZSgpOwogICAgIAogICAgIEV4ZWNTdGF0ZSogZXhl
Y0NhbGxlZSA9IGxvYWRWYXJhcmdzKAogICAgICAgICBleGVjLCAmdm0uaW50ZXJwcmV0ZXItPnN0
YWNrKCksCi0gICAgICAgIExMSU5UX09QX0MoMikuanNWYWx1ZSgpLCBMTElOVF9PUF9DKDMpLmpz
VmFsdWUoKSwgcGNbNF0udS5vcGVyYW5kKTsKKyAgICAgICAgTExJTlRfT1BfQygzKS5qc1ZhbHVl
KCksIExMSU5UX09QX0MoNCkuanNWYWx1ZSgpLCBwY1s1XS51Lm9wZXJhbmQpOwogICAgIExMSU5U
X0NBTExfQ0hFQ0tfRVhDRVBUSU9OKGV4ZWMsIHBjKTsKICAgICAKICAgICBleGVjQ2FsbGVlLT51
bmNoZWNrZWRSKEpTU3RhY2s6OkNhbGxlZSkgPSBjYWxsZWVBc1ZhbHVlOwpAQCAtMTUxMCwxMSAr
MTUxMCwxMSBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfY2FsbF92YXJhCiBMTElO
VF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfY2FsbF9ldmFsKQogewogICAgIExMSU5UX0JFR0lO
X05PX1NFVF9QQygpOwotICAgIEpTVmFsdWUgY2FsbGVlQXNWYWx1ZSA9IExMSU5UX09QKDEpLmpz
VmFsdWUoKTsKKyAgICBKU1ZhbHVlIGNhbGxlZUFzVmFsdWUgPSBMTElOVF9PUCgyKS5qc1ZhbHVl
KCk7CiAgICAgCi0gICAgRXhlY1N0YXRlKiBleGVjQ2FsbGVlID0gZXhlYyArIHBjWzNdLnUub3Bl
cmFuZDsKKyAgICBFeGVjU3RhdGUqIGV4ZWNDYWxsZWUgPSBleGVjICsgcGNbNF0udS5vcGVyYW5k
OwogICAgIAotICAgIGV4ZWNDYWxsZWUtPnNldEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKHBj
WzJdLnUub3BlcmFuZCk7CisgICAgZXhlY0NhbGxlZS0+c2V0QXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMocGNbM10udS5vcGVyYW5kKTsKICAgICBleGVjQ2FsbGVlLT5zZXRDYWxsZXJGcmFtZShl
eGVjKTsKICAgICBleGVjQ2FsbGVlLT51bmNoZWNrZWRSKEpTU3RhY2s6OkNhbGxlZSkgPSBjYWxs
ZWVBc1ZhbHVlOwogICAgIGV4ZWNDYWxsZWUtPnNldFNjb3BlKGV4ZWMtPnNjb3BlKCkpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5h
c20KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50
ZXJwcmV0ZXIzMl82NC5hc20JKHJldmlzaW9uIDE1MDk5MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCSh3b3JraW5nIGNvcHkpCkBA
IC0xNjI5LDE2ICsxNjI5LDYgQEAgX2xsaW50X29wX3JldDoKICAgICBkb1JldHVybigpCiAKIAot
X2xsaW50X29wX2NhbGxfcHV0X3Jlc3VsdDoKLSAgICBsb2FkaSA0W1BDXSwgdDIKLSAgICBsb2Fk
aSA4W1BDXSwgdDMKLSAgICBzdG9yZWkgdDEsIFRhZ09mZnNldFtjZnIsIHQyLCA4XQotICAgIHN0
b3JlaSB0MCwgUGF5bG9hZE9mZnNldFtjZnIsIHQyLCA4XQotICAgIHZhbHVlUHJvZmlsZSh0MSwg
dDAsIHQzKQotICAgIHRyYWNlRXhlY3V0aW9uKCkgIyBOZWVkcyB0byBiZSBoZXJlIGJlY2F1c2Ug
aXQgd291bGQgY2xvYmJlciB0MSwgdDAKLSAgICBkaXNwYXRjaCgzKQotCi0KIF9sbGludF9vcF9y
ZXRfb2JqZWN0X29yX3RoaXM6CiAgICAgdHJhY2VFeGVjdXRpb24oKQogICAgIGNoZWNrU3dpdGNo
VG9KSVRGb3JFcGlsb2d1ZSgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93
TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQkocmV2aXNpb24gMTUwOTkzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHdv
cmtpbmcgY29weSkKQEAgLTU1LDcgKzU1LDExIEBAIG1hY3JvIGRpc3BhdGNoQWZ0ZXJDYWxsKCkK
ICAgICBsb2FkaSBBcmd1bWVudENvdW50ICsgVGFnT2Zmc2V0W2Nmcl0sIFBDCiAgICAgbG9hZHAg
Q29kZUJsb2NrW2Nmcl0sIFBCCiAgICAgbG9hZHAgQ29kZUJsb2NrOjptX2luc3RydWN0aW9uc1tQ
Ql0sIFBCCi0gICAgZGlzcGF0Y2goNikKKyAgICBsb2FkaXNGcm9tSW5zdHJ1Y3Rpb24oMSwgdDEp
CisgICAgbG9hZHBGcm9tSW5zdHJ1Y3Rpb24oNywgdDIpCisgICAgc3RvcmVxIHQwLCBbY2ZyLCB0
MSwgOF0KKyAgICB2YWx1ZVByb2ZpbGUodDAsIHQyKQorICAgIGRpc3BhdGNoKDgpCiBlbmQKIAog
bWFjcm8gY0NhbGwyKGZ1bmN0aW9uLCBhcmcxLCBhcmcyKQpAQCAtMTQwMSwyOSArMTQwNSwyOSBA
QCBfbGxpbnRfb3BfbmV3X2Z1bmM6CiAKIG1hY3JvIGFycmF5UHJvZmlsZUZvckNhbGwoKQogICAg
IGlmIFZBTFVFX1BST0ZJTEVSCi0gICAgICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlvbigzLCB0MykK
KyAgICAgICAgbG9hZGlzRnJvbUluc3RydWN0aW9uKDQsIHQzKQogICAgICAgICBsb2FkcSBUaGlz
QXJndW1lbnRPZmZzZXRbY2ZyLCB0MywgOF0sIHQwCiAgICAgICAgIGJ0cW56IHQwLCB0YWdNYXNr
LCAuZG9uZQogICAgICAgICBsb2FkcCBKU0NlbGw6Om1fc3RydWN0dXJlW3QwXSwgdDAKLSAgICAg
ICAgbG9hZHBGcm9tSW5zdHJ1Y3Rpb24oNSwgdDEpCisgICAgICAgIGxvYWRwRnJvbUluc3RydWN0
aW9uKDYsIHQxKQogICAgICAgICBzdG9yZXAgdDAsIEFycmF5UHJvZmlsZTo6bV9sYXN0U2VlblN0
cnVjdHVyZVt0MV0KICAgICAuZG9uZToKICAgICBlbmQKIGVuZAogCiBtYWNybyBkb0NhbGwoc2xv
d1BhdGgpCi0gICAgbG9hZGlzRnJvbUluc3RydWN0aW9uKDEsIHQwKQotICAgIGxvYWRwRnJvbUlu
c3RydWN0aW9uKDQsIHQxKQorICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlvbigyLCB0MCkKKyAgICBs
b2FkcEZyb21JbnN0cnVjdGlvbig1LCB0MSkKICAgICBsb2FkcCBMTEludENhbGxMaW5rSW5mbzo6
Y2FsbGVlW3QxXSwgdDIKICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHQwLCB0MykKICAgICBi
cW5lcSB0MywgdDIsIC5vcENhbGxTbG93Ci0gICAgbG9hZGlzRnJvbUluc3RydWN0aW9uKDMsIHQz
KQorICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlvbig0LCB0MykKICAgICBsc2hpZnRpIDMsIHQzCiAg
ICAgYWRkcCBjZnIsIHQzCiAgICAgbG9hZHAgSlNGdW5jdGlvbjo6bV9zY29wZVt0Ml0sIHQwCiAg
ICAgc3RvcmVxIHQyLCBDYWxsZWVbdDNdCiAgICAgc3RvcmVxIHQwLCBTY29wZUNoYWluW3QzXQot
ICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlvbigyLCB0MikKKyAgICBsb2FkaXNGcm9tSW5zdHJ1Y3Rp
b24oMywgdDIpCiAgICAgc3RvcmVpIFBDLCBBcmd1bWVudENvdW50ICsgVGFnT2Zmc2V0W2Nmcl0K
ICAgICBzdG9yZXEgY2ZyLCBDYWxsZXJGcmFtZVt0M10KICAgICBzdG9yZWkgdDIsIEFyZ3VtZW50
Q291bnQgKyBQYXlsb2FkT2Zmc2V0W3QzXQpAQCAtMTQ2MiwxNSArMTQ2Niw2IEBAIF9sbGludF9v
cF9yZXQ6CiAgICAgZG9SZXR1cm4oKQogCiAKLV9sbGludF9vcF9jYWxsX3B1dF9yZXN1bHQ6Ci0g
ICAgbG9hZGlzRnJvbUluc3RydWN0aW9uKDEsIHQyKQotICAgIGxvYWRwRnJvbUluc3RydWN0aW9u
KDIsIHQzKQotICAgIHN0b3JlcSB0MCwgW2NmciwgdDIsIDhdCi0gICAgdmFsdWVQcm9maWxlKHQw
LCB0MykKLSAgICB0cmFjZUV4ZWN1dGlvbigpCi0gICAgZGlzcGF0Y2goMykKLQotCiBfbGxpbnRf
b3BfcmV0X29iamVjdF9vcl90aGlzOgogICAgIHRyYWNlRXhlY3V0aW9uKCkKICAgICBjaGVja1N3
aXRjaFRvSklURm9yRXBpbG9ndWUoKQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>203418</attachid>
            <date>2013-05-31 00:49:18 -0700</date>
            <delta_ts>2013-05-31 14:17:56 -0700</delta_ts>
            <desc>still broken but getting there</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>79373</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTUxMDA1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwNiBA
QAorMjAxMy0wNS0zMCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IGZvdXJ0aFRpZXI6IGdldCByaWQgb2Ygb3BfY2FsbF9wdXRfcmVzdWx0CisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTcwNDcKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFdvcmsgaW4gcHJvZ3Jl
c3MuIFRoaXMgc3RpbGwgbWFrZXMgbGlrZSAyMCB0ZXN0cyBjcmFzaC4KKyAgICAgICAgCisgICAg
ICAgIG9wX2NhbGxfcHV0X3Jlc3VsdCBpcyBhbiBvZGRiYWxsLiBJdHMgc2VtYW50aWNzIGFyZSB0
aGF0IGl0IHRha2VzIHRoZSByZXR1cm4KKyAgICAgICAgdmFsdWUgb2YgYSBjYWxsIGluc3RydWN0
aW9uLCB3aGljaCBpcyBzZXQgYXNpZGUgaW4gcmVnVDAvcmVnVDEsIGFuZCBwbGFjZXMgdGhlbQor
ICAgICAgICBpbnRvIHNvbWUgc3RhY2sgc2xvdC4gVGhpcyBpcyB3ZWlyZCBzaW5jZSB0aGVyZSBp
cyBhbiBpbXBsaWNpdCBjb250cmFjdCB3aXRoIHRoZQorICAgICAgICBwcmVjZWRpbmcgYnl0ZWNv
ZGUgaW5zdHJ1Y3Rpb24sIGFuZCBpdCdzIGV2ZW4gd2VpcmRlciBzaW5jZSBpdCBtZWFucyB0aGF0
IGl0CisgICAgICAgIGRvZXNuJ3QgbWFrZSBzZW5zZSB0byBqdW1wIHRvIGl0OyBmb3IgZXhhbXBs
ZSBPU1IgZXhpdCBmcm9tIHRoZSBwcmVjZWRpbmcgY2FsbAorICAgICAgICBpbnN0cnVjdGlvbiBt
dXN0IG1ha2Ugc3VyZSB0byBqdW1wIG92ZXIgdGhlIG9wX2NhbGxfcHV0X3Jlc3VsdC4KKyAgICAg
ICAgCisgICAgICAgIFNvIHRoaXMgcGF0Y2ggZ2V0cyByaWQgb2Ygb3BfY2FsbF9wdXRfcmVzdWx0
OgorICAgICAgICAKKyAgICAgICAgLSBJbiBieXRlY29kZSwgYWxsIGNhbGxzIHJldHVybiBhIHZh
bHVlIGFuZCB3ZSBhbHdheXMgYWxsb2NhdGUgYSB0ZW1wb3JhcnkgZm9yCisgICAgICAgICAgdGhh
dCB2YWx1ZSBldmVuIGlmIGl0IGlzbid0IHVzZWQuCisgICAgICAgIAorICAgICAgICAtIFRoZSBM
TEludCBkb2VzIHRoZSByZXR1cm4gdmFsdWUgc2F2aW5nIGFzIHBhcnQgb2YgZGlzcGF0Y2hBZnRl
ckNhbGwoKS4KKyAgICAgICAgCisgICAgICAgIC0gVGhlIEpJVCBhbmQgREZHIGRvIHRoZSByZXR1
cm4gdmFsdWUgc2F2aW5nIGFzIHBhcnQgb2Ygbm9ybWFsIGNvZGUgZ2VuZXJhdGlvbi4KKyAgICAg
ICAgICBUaGUgREZHIGFscmVhZHkgZGlkIHRoZSByaWdodCB0aGluZy4KKyAgICAgICAgCisgICAg
ICAgIC0gREZHLT5KSVQgT1NSIGV4aXQgaW4gdGhlIGNhc2Ugb2YgaW5saW5pbmcgd2lsbCBtYWtl
IHRoZSByZXR1cm4gUEMncyBwb2ludCBhdAorICAgICAgICAgIHRoZSBDYWxsTGlua0luZm86OmNh
bGxSZXR1cm5Mb2NhdGlvbiwgcmF0aGVyIHRoYW4gdGhlIG1hY2hpbmUgUEMgYXNzb2NpYXRlZAor
ICAgICAgICAgIHdpdGggdGhlIG9wX2NhbGxfcHV0X3Jlc3VsdCBpbnN0cnVjdGlvbi4KKyAgICAg
ICAgCisgICAgICAgIC0gVG9ucyBvZiBjb2RlIGdldHMgcmVtb3ZlZC4gVGhlIERGRyBoYWQgdG8g
dHJhY2sgd2hldGhlciBvciBub3QgYSBjYWxsIGhhZCBhCisgICAgICAgICAgcmV0dXJuIHZhbHVl
IGluIGEgYnVuY2ggb2YgcGxhY2VzLiBJdCBoYWQgdG8gdHJhY2sgdGhlIGZhY3QgdGhhdCB3ZSB3
b3VsZAorICAgICAgICAgIGV4aXQgdG8gYWZ0ZXIgdGhlIG9wX2NhbGxfcHV0X3Jlc3VsdC4gSXQg
d2FzIGEgbWVzcy4gVGhhdCBtZXNzIGlzIG5vdyBnb25lLgorCisgICAgICAgICogYnl0ZWNvZGUv
Q2FsbExpbmtTdGF0dXMuY3BwOgorICAgICAgICAoSlNDOjpDYWxsTGlua1N0YXR1czo6Y29tcHV0
ZUZyb21MTEludCk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjpwcmludENhbGxPcCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6
ZHVtcEFycmF5UHJvZmlsaW5nKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpkdW1wQnl0ZWNv
ZGUpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OkNvZGVCbG9jayk6CisgICAgICAgICogYnl0
ZWNvZGUvQ29kZUJsb2NrLmg6CisgICAgICAgICogYnl0ZWNvZGUvT3Bjb2RlLmg6CisgICAgICAg
IChKU0MpOgorICAgICAgICAoSlNDOjpwYWRPcGNvZGVOYW1lKToKKyAgICAgICAgKiBieXRlY29t
cGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVy
YXRvcjo6ZW1pdENhbGwpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENh
bGxWYXJhcmdzKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRDb25zdHJ1
Y3QpOgorICAgICAgICAqIGJ5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwOgorICAgICAgICAo
SlNDOjpOZXdFeHByTm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25D
YWxsVmFsdWVOb2RlOjplbWl0Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkNhbGxS
ZXNvbHZlTm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25DYWxsQnJh
Y2tldE5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uQ2FsbERvdE5v
ZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkNhbGxGdW5jdGlvbkNhbGxEb3ROb2Rl
OjplbWl0Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpBcHBseUZ1bmN0aW9uQ2FsbERvdE5vZGU6
OmVtaXRCeXRlY29kZSk6CisgICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Qnl0ZUNvZGVQYXJzZXIpOgorICAgICAg
ICAoQnl0ZUNvZGVQYXJzZXIpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpj
dXJyZW50Q29kZU9yaWdpbik6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmFk
ZENhbGwpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpnZXRQcmVkaWN0aW9u
V2l0aG91dE9TUkV4aXQpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpnZXRQ
cmVkaWN0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlQ2Fs
bCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGluaW5nKToK
KyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlTWluTWF4KToKKyAgICAg
ICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50cmluc2ljKToKKyAgICAgICAg
KEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlQ29uc3RhbnRJbnRlcm5hbEZ1bmN0aW9u
KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayk6CisgICAg
ICAgICogZGZnL0RGR0NhcGFiaWxpdGllcy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Y2FwYWJp
bGl0eUxldmVsKToKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdENvbXBpbGVyLmNwcDoKKyAgICAg
ICAgKiBkZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpyZWlmeUlubGluZWRDYWxsRnJhbWVzKToKKyAgICAgICAgKiBqaXQvSklULmNwcDoKKyAgICAg
ICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKToKKyAgICAgICAgKiBqaXQvSklU
Lmg6CisgICAgICAgIChKSVQpOgorICAgICAgICAqIGppdC9KSVRDYWxsLmNwcDoKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0UHV0Q2FsbFJlc3VsdCk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGls
ZUxvYWRWYXJhcmdzKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlQ2FsbEV2YWwpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKToKKyAgICAgICAgKEpTQzo6
SklUOjpjb21waWxlT3BDYWxsKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlT3BDYWxsU2xv
d0Nhc2UpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfY2FsbCk6CisgICAgICAgIChKU0Mp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfY2FsbF9ldmFsKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X29wX2NhbGxfdmFyYXJncyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9j
b25zdHJ1Y3QpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2NhbGwpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2NhbGxfZXZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdFNsb3dfb3BfY2FsbF92YXJhcmdzKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19v
cF9jb25zdHJ1Y3QpOgorICAgICAgICAqIGppdC9KSVRPcGNvZGVzLmNwcDoKKyAgICAgICAgKEpT
Qyk6CisgICAgICAgICogbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwOgorICAgICAgICAoSlNDOjpM
TEludDo6Z2VuZXJpY0NhbGwpOgorICAgICAgICAoSlNDOjpMTEludDo6TExJTlRfU0xPV19QQVRI
X0RFQ0wpOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc206Cisg
ICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbToKKwogMjAxMy0wNS0zMCAg
RmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIGZvdXJ0aFRpZXI6IExM
SW50IHNob3VsZG4ndCBzdG9yZSBhbiBvZmZzZXQgY2FsbCBQQyBkdXJpbmcgb3BfY2FsbC1saWtl
IGNhbGxzCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtTdGF0
dXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxs
TGlua1N0YXR1cy5jcHAJKHJldmlzaW9uIDE1MTAwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9DYWxsTGlua1N0YXR1cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg3LDcgKzg3
LDcgQEAgQ2FsbExpbmtTdGF0dXMgQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVGcgogICAgIFVOVVNF
RF9QQVJBTShieXRlY29kZUluZGV4KTsKICNpZiBFTkFCTEUoTExJTlQpCiAgICAgSW5zdHJ1Y3Rp
b24qIGluc3RydWN0aW9uID0gcHJvZmlsZWRCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKSAr
IGJ5dGVjb2RlSW5kZXg7Ci0gICAgTExJbnRDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA9IGlu
c3RydWN0aW9uWzRdLnUuY2FsbExpbmtJbmZvOworICAgIExMSW50Q2FsbExpbmtJbmZvKiBjYWxs
TGlua0luZm8gPSBpbnN0cnVjdGlvbls1XS51LmNhbGxMaW5rSW5mbzsKICAgICAKICAgICByZXR1
cm4gQ2FsbExpbmtTdGF0dXMoY2FsbExpbmtJbmZvLT5sYXN0U2VlbkNhbGxlZS5nZXQoKSk7CiAj
ZWxzZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5j
cHAJKHJldmlzaW9uIDE1MTAwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MTgsMTIgKzQxOCwxMyBAQCB2b2lkIENv
ZGVCbG9jazo6cHJpbnRHZXRCeUlkQ2FjaGVTdGF0dXMoCiAjZW5kaWYKIH0KIAotdm9pZCBDb2Rl
QmxvY2s6OnByaW50Q2FsbE9wKFByaW50U3RyZWFtJiBvdXQsIEV4ZWNTdGF0ZSosIGludCBsb2Nh
dGlvbiwgY29uc3QgSW5zdHJ1Y3Rpb24qJiBpdCwgY29uc3QgY2hhciogb3AsIENhY2hlRHVtcE1v
ZGUgY2FjaGVEdW1wTW9kZSkKK3ZvaWQgQ29kZUJsb2NrOjpwcmludENhbGxPcChQcmludFN0cmVh
bSYgb3V0LCBFeGVjU3RhdGUqLCBpbnQgbG9jYXRpb24sIGNvbnN0IEluc3RydWN0aW9uKiYgaXQs
IGNvbnN0IGNoYXIqIG9wLCBDYWNoZUR1bXBNb2RlIGNhY2hlRHVtcE1vZGUsIGJvb2wmIGhhc1By
aW50ZWRQcm9maWxpbmcpCiB7CisgICAgaW50IGRzdCA9ICgrK2l0KS0+dS5vcGVyYW5kOwogICAg
IGludCBmdW5jID0gKCsraXQpLT51Lm9wZXJhbmQ7CiAgICAgaW50IGFyZ0NvdW50ID0gKCsraXQp
LT51Lm9wZXJhbmQ7CiAgICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0gKCsraXQpLT51Lm9wZXJhbmQ7
Ci0gICAgb3V0LnByaW50ZigiWyU0ZF0gJXNcdCAlcywgJWQsICVkIiwgbG9jYXRpb24sIG9wLCBy
ZWdpc3Rlck5hbWUoZnVuYykuZGF0YSgpLCBhcmdDb3VudCwgcmVnaXN0ZXJPZmZzZXQpOworICAg
IG91dC5wcmludGYoIlslNGRdICVzICVzLCAlcywgJWQsICVkIiwgbG9jYXRpb24sIG9wLCByZWdp
c3Rlck5hbWUoZHN0KS5kYXRhKCksIHJlZ2lzdGVyTmFtZShmdW5jKS5kYXRhKCksIGFyZ0NvdW50
LCByZWdpc3Rlck9mZnNldCk7CiAgICAgaWYgKGNhY2hlRHVtcE1vZGUgPT0gRHVtcENhY2hlcykg
ewogI2lmIEVOQUJMRShMTElOVCkKICAgICAgICAgTExJbnRDYWxsTGlua0luZm8qIGNhbGxMaW5r
SW5mbyA9IGl0WzFdLnUuY2FsbExpbmtJbmZvOwpAQCAtNDQzLDcgKzQ0NCw5IEBAIHZvaWQgQ29k
ZUJsb2NrOjpwcmludENhbGxPcChQcmludFN0cmVhbSYKICNlbmRpZgogICAgICAgICBvdXQucHJp
bnQoIiBzdGF0dXMoIiwgQ2FsbExpbmtTdGF0dXM6OmNvbXB1dGVGb3IodGhpcywgbG9jYXRpb24p
LCAiKSIpOwogICAgIH0KLSAgICBpdCArPSAyOworICAgICsraXQ7CisgICAgZHVtcEFycmF5UHJv
ZmlsaW5nKG91dCwgaXQsIGhhc1ByaW50ZWRQcm9maWxpbmcpOworICAgIGR1bXBWYWx1ZVByb2Zp
bGluZyhvdXQsIGl0LCBoYXNQcmludGVkUHJvZmlsaW5nKTsKIH0KIAogdm9pZCBDb2RlQmxvY2s6
OnByaW50UHV0QnlJZE9wKFByaW50U3RyZWFtJiBvdXQsIEV4ZWNTdGF0ZSosIGludCBsb2NhdGlv
biwgY29uc3QgSW5zdHJ1Y3Rpb24qJiBpdCwgY29uc3QgY2hhciogb3ApCkBAIC02NjMsNiArNjY2
LDggQEAgdm9pZCBDb2RlQmxvY2s6OmR1bXBBcnJheVByb2ZpbGluZyhQcmludAogICAgIAogICAg
ICsraXQ7CiAjaWYgRU5BQkxFKFZBTFVFX1BST0ZJTEVSKQorICAgIGlmICghaXQtPnUuYXJyYXlQ
cm9maWxlKQorICAgICAgICByZXR1cm47CiAgICAgQ1N0cmluZyBkZXNjcmlwdGlvbiA9IGl0LT51
LmFycmF5UHJvZmlsZS0+YnJpZWZEZXNjcmlwdGlvbihsb2NrZXIsIHRoaXMpOwogICAgIGlmICgh
ZGVzY3JpcHRpb24ubGVuZ3RoKCkpCiAgICAgICAgIHJldHVybjsKQEAgLTEyODIsMjAgKzEyODcs
MjIgQEAgdm9pZCBDb2RlQmxvY2s6OmR1bXBCeXRlY29kZShQcmludFN0cmVhbQogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBvcF9jYWxsOiB7Ci0gICAgICAgICAg
ICBwcmludENhbGxPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImNhbGwiLCBEdW1wQ2FjaGVz
KTsKKyAgICAgICAgICAgIHByaW50Q2FsbE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiY2Fs
bCIsIER1bXBDYWNoZXMsIGhhc1ByaW50ZWRQcm9maWxpbmcpOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBvcF9jYWxsX2V2YWw6IHsKLSAgICAgICAgICAgIHBy
aW50Q2FsbE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiY2FsbF9ldmFsIiwgRG9udER1bXBD
YWNoZXMpOworICAgICAgICAgICAgcHJpbnRDYWxsT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQs
ICJjYWxsX2V2YWwiLCBEb250RHVtcENhY2hlcywgaGFzUHJpbnRlZFByb2ZpbGluZyk7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIG9wX2NhbGxfdmFyYXJnczog
eworICAgICAgICAgICAgaW50IHJlc3VsdCA9ICgrK2l0KS0+dS5vcGVyYW5kOwogICAgICAgICAg
ICAgaW50IGNhbGxlZSA9ICgrK2l0KS0+dS5vcGVyYW5kOwogICAgICAgICAgICAgaW50IHRoaXNW
YWx1ZSA9ICgrK2l0KS0+dS5vcGVyYW5kOwogICAgICAgICAgICAgaW50IGFyZ3VtZW50cyA9ICgr
K2l0KS0+dS5vcGVyYW5kOwogICAgICAgICAgICAgaW50IGZpcnN0RnJlZVJlZ2lzdGVyID0gKCsr
aXQpLT51Lm9wZXJhbmQ7CiAgICAgICAgICAgICArK2l0OwotICAgICAgICAgICAgb3V0LnByaW50
ZigiWyU0ZF0gY2FsbF92YXJhcmdzXHQgJXMsICVzLCAlcywgJWQiLCBsb2NhdGlvbiwgcmVnaXN0
ZXJOYW1lKGNhbGxlZSkuZGF0YSgpLCByZWdpc3Rlck5hbWUodGhpc1ZhbHVlKS5kYXRhKCksIHJl
Z2lzdGVyTmFtZShhcmd1bWVudHMpLmRhdGEoKSwgZmlyc3RGcmVlUmVnaXN0ZXIpOworICAgICAg
ICAgICAgb3V0LnByaW50ZigiWyU0ZF0gY2FsbF92YXJhcmdzXHQgJXMsICVzLCAlcywgJXMsICVk
IiwgbG9jYXRpb24sIHJlZ2lzdGVyTmFtZShyZXN1bHQpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKGNh
bGxlZSkuZGF0YSgpLCByZWdpc3Rlck5hbWUodGhpc1ZhbHVlKS5kYXRhKCksIHJlZ2lzdGVyTmFt
ZShhcmd1bWVudHMpLmRhdGEoKSwgZmlyc3RGcmVlUmVnaXN0ZXIpOworICAgICAgICAgICAgZHVt
cFZhbHVlUHJvZmlsaW5nKG91dCwgaXQsIGhhc1ByaW50ZWRQcm9maWxpbmcpOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBvcF90ZWFyX29mZl9hY3RpdmF0aW9u
OiB7CkBAIC0xMzE0LDEyICsxMzIxLDYgQEAgdm9pZCBDb2RlQmxvY2s6OmR1bXBCeXRlY29kZShQ
cmludFN0cmVhbQogICAgICAgICAgICAgb3V0LnByaW50ZigiWyU0ZF0gcmV0XHRcdCAlcyIsIGxv
Y2F0aW9uLCByZWdpc3Rlck5hbWUocjApLmRhdGEoKSk7CiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgfQotICAgICAgICBjYXNlIG9wX2NhbGxfcHV0X3Jlc3VsdDogewotICAgICAgICAgICAg
aW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7Ci0gICAgICAgICAgICBvdXQucHJpbnRmKCJbJTRk
XSBjYWxsX3B1dF9yZXN1bHRcdFx0ICVzIiwgbG9jYXRpb24sIHJlZ2lzdGVyTmFtZShyMCkuZGF0
YSgpKTsKLSAgICAgICAgICAgIGR1bXBWYWx1ZVByb2ZpbGluZyhvdXQsIGl0LCBoYXNQcmludGVk
UHJvZmlsaW5nKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9CiAgICAgICAgIGNhc2Ug
b3BfcmV0X29iamVjdF9vcl90aGlzOiB7CiAgICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUu
b3BlcmFuZDsKICAgICAgICAgICAgIGludCByMSA9ICgrK2l0KS0+dS5vcGVyYW5kOwpAQCAtMTMy
Nyw3ICsxMzI4LDcgQEAgdm9pZCBDb2RlQmxvY2s6OmR1bXBCeXRlY29kZShQcmludFN0cmVhbQog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBvcF9jb25zdHJ1Y3Q6
IHsKLSAgICAgICAgICAgIHByaW50Q2FsbE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiY29u
c3RydWN0IiwgRHVtcENhY2hlcyk7CisgICAgICAgICAgICBwcmludENhbGxPcChvdXQsIGV4ZWMs
IGxvY2F0aW9uLCBpdCwgImNvbnN0cnVjdCIsIER1bXBDYWNoZXMsIGhhc1ByaW50ZWRQcm9maWxp
bmcpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBvcF9zdHJj
YXQ6IHsKQEAgLTE3ODQsNyArMTc4NSw3IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFNjcmlwdEV4
ZWN1dGFibGUqIG8KICAgICAgICAgfQogICAgICAgICBjYXNlIG9wX3RvX3RoaXM6CiAgICAgICAg
IGNhc2Ugb3BfZ2V0X2J5X2lkOgotICAgICAgICBjYXNlIG9wX2NhbGxfcHV0X3Jlc3VsdDoKKyAg
ICAgICAgY2FzZSBvcF9jYWxsX3ZhcmFyZ3M6CiAgICAgICAgIGNhc2Ugb3BfZ2V0X2NhbGxlZTog
ewogICAgICAgICAgICAgVmFsdWVQcm9maWxlKiBwcm9maWxlID0gJm1fdmFsdWVQcm9maWxlc1tw
Y1tpICsgb3BMZW5ndGggLSAxXS51Lm9wZXJhbmRdOwogICAgICAgICAgICAgQVNTRVJUKHByb2Zp
bGUtPm1fYnl0ZWNvZGVPZmZzZXQgPT0gLTEpOwpAQCAtMTg4NCwyMCArMTg4NSwzMSBAQCBDb2Rl
QmxvY2s6OkNvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBvCiAgICAgICAgIGNhc2Ugb3BfY2Fs
bDoKICAgICAgICAgY2FzZSBvcF9jYWxsX2V2YWw6IHsKICNpZiBFTkFCTEUoREZHX0pJVCkKLSAg
ICAgICAgICAgIGludCBhcnJheVByb2ZpbGVJbmRleCA9IHBjW2kgKyBvcExlbmd0aCAtIDFdLnUu
b3BlcmFuZDsKKyAgICAgICAgICAgIFZhbHVlUHJvZmlsZSogcHJvZmlsZSA9ICZtX3ZhbHVlUHJv
ZmlsZXNbcGNbaSArIG9wTGVuZ3RoIC0gMV0udS5vcGVyYW5kXTsKKyAgICAgICAgICAgIEFTU0VS
VChwcm9maWxlLT5tX2J5dGVjb2RlT2Zmc2V0ID09IC0xKTsKKyAgICAgICAgICAgIHByb2ZpbGUt
Pm1fYnl0ZWNvZGVPZmZzZXQgPSBpOworICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyBvcExl
bmd0aCAtIDFdID0gcHJvZmlsZTsKKyAgICAgICAgICAgIGludCBhcnJheVByb2ZpbGVJbmRleCA9
IHBjW2kgKyBvcExlbmd0aCAtIDJdLnUub3BlcmFuZDsKICAgICAgICAgICAgIG1fYXJyYXlQcm9m
aWxlc1thcnJheVByb2ZpbGVJbmRleF0gPSBBcnJheVByb2ZpbGUoaSk7Ci0gICAgICAgICAgICBp
bnN0cnVjdGlvbnNbaSArIG9wTGVuZ3RoIC0gMV0gPSAmbV9hcnJheVByb2ZpbGVzW2FycmF5UHJv
ZmlsZUluZGV4XTsKKyAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgb3BMZW5ndGggLSAyXSA9
ICZtX2FycmF5UHJvZmlsZXNbYXJyYXlQcm9maWxlSW5kZXhdOwogI2VuZGlmCiAjaWYgRU5BQkxF
KExMSU5UKQotICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyA0XSA9ICZtX2xsaW50Q2FsbExp
bmtJbmZvc1twY1tpICsgNF0udS5vcGVyYW5kXTsKKyAgICAgICAgICAgIGluc3RydWN0aW9uc1tp
ICsgNV0gPSAmbV9sbGludENhbGxMaW5rSW5mb3NbcGNbaSArIDVdLnUub3BlcmFuZF07CiAjZW5k
aWYKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfY29uc3Ry
dWN0OgorICAgICAgICBjYXNlIG9wX2NvbnN0cnVjdDogewogI2lmIEVOQUJMRShMTElOVCkKLSAg
ICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgNF0gPSAmbV9sbGludENhbGxMaW5rSW5mb3NbcGNb
aSArIDRdLnUub3BlcmFuZF07CisgICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIDVdID0gJm1f
bGxpbnRDYWxsTGlua0luZm9zW3BjW2kgKyA1XS51Lm9wZXJhbmRdOworI2VuZGlmCisjaWYgRU5B
QkxFKERGR19KSVQpCisgICAgICAgICAgICBWYWx1ZVByb2ZpbGUqIHByb2ZpbGUgPSAmbV92YWx1
ZVByb2ZpbGVzW3BjW2kgKyBvcExlbmd0aCAtIDFdLnUub3BlcmFuZF07CisgICAgICAgICAgICBB
U1NFUlQocHJvZmlsZS0+bV9ieXRlY29kZU9mZnNldCA9PSAtMSk7CisgICAgICAgICAgICBwcm9m
aWxlLT5tX2J5dGVjb2RlT2Zmc2V0ID0gaTsKKyAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsg
b3BMZW5ndGggLSAxXSA9IHByb2ZpbGU7CiAjZW5kaWYKICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CiAgICAgICAgIGNhc2Ugb3BfZ2V0X2J5X2lkX291dF9vZl9saW5lOgogICAgICAgICBj
YXNlIG9wX2dldF9ieV9pZF9zZWxmOgogICAgICAgICBjYXNlIG9wX2dldF9ieV9pZF9wcm90bzoK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlz
aW9uIDE1MTAwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
aAkod29ya2luZyBjb3B5KQpAQCAtOTUwLDcgKzk1MCw3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBw
cmludEdldEJ5SWRPcChQcmludFN0cmVhbSYsIEV4ZWNTdGF0ZSosIGludCBsb2NhdGlvbiwgY29u
c3QgSW5zdHJ1Y3Rpb24qJik7CiAgICAgdm9pZCBwcmludEdldEJ5SWRDYWNoZVN0YXR1cyhQcmlu
dFN0cmVhbSYsIEV4ZWNTdGF0ZSosIGludCBsb2NhdGlvbik7CiAgICAgZW51bSBDYWNoZUR1bXBN
b2RlIHsgRHVtcENhY2hlcywgRG9udER1bXBDYWNoZXMgfTsKLSAgICB2b2lkIHByaW50Q2FsbE9w
KFByaW50U3RyZWFtJiwgRXhlY1N0YXRlKiwgaW50IGxvY2F0aW9uLCBjb25zdCBJbnN0cnVjdGlv
biomLCBjb25zdCBjaGFyKiBvcCwgQ2FjaGVEdW1wTW9kZSk7CisgICAgdm9pZCBwcmludENhbGxP
cChQcmludFN0cmVhbSYsIEV4ZWNTdGF0ZSosIGludCBsb2NhdGlvbiwgY29uc3QgSW5zdHJ1Y3Rp
b24qJiwgY29uc3QgY2hhciogb3AsIENhY2hlRHVtcE1vZGUsIGJvb2wmIGhhc1ByaW50ZWRQcm9m
aWxpbmcpOwogICAgIHZvaWQgcHJpbnRQdXRCeUlkT3AoUHJpbnRTdHJlYW0mLCBFeGVjU3RhdGUq
LCBpbnQgbG9jYXRpb24sIGNvbnN0IEluc3RydWN0aW9uKiYsIGNvbnN0IGNoYXIqIG9wKTsKICAg
ICB2b2lkIGJlZ2luRHVtcFByb2ZpbGluZyhQcmludFN0cmVhbSYsIGJvb2wmIGhhc1ByaW50ZWRQ
cm9maWxpbmcpOwogICAgIHZvaWQgZHVtcFZhbHVlUHJvZmlsaW5nKFByaW50U3RyZWFtJiwgY29u
c3QgSW5zdHJ1Y3Rpb24qJiwgYm9vbCYgaGFzUHJpbnRlZFByb2ZpbGluZyk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3Bjb2RlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wY29kZS5oCShyZXZpc2lvbiAxNTEwMDUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvT3Bjb2RlLmgJKHdvcmtpbmcgY29weSkKQEAg
LTE3OSwxNiArMTc5LDE1IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIFwKICAgICBtYWNybyhvcF9u
ZXdfZnVuYywgNCkgXAogICAgIG1hY3JvKG9wX25ld19mdW5jX2V4cCwgMykgXAotICAgIG1hY3Jv
KG9wX2NhbGwsIDYpIFwKLSAgICBtYWNybyhvcF9jYWxsX2V2YWwsIDYpIFwKLSAgICBtYWNybyhv
cF9jYWxsX3ZhcmFyZ3MsIDYpIFwKKyAgICBtYWNybyhvcF9jYWxsLCA4KSAvKiBoYXMgdmFsdWUg
cHJvZmlsaW5nICovIFwKKyAgICBtYWNybyhvcF9jYWxsX2V2YWwsIDgpIC8qIGhhcyB2YWx1ZSBw
cm9maWxpbmcgKi8gXAorICAgIG1hY3JvKG9wX2NhbGxfdmFyYXJncywgOCkgLyogaGFzIHZhbHVl
IHByb2ZpbGluZyAqLyBcCiAgICAgbWFjcm8ob3BfdGVhcl9vZmZfYWN0aXZhdGlvbiwgMikgXAog
ICAgIG1hY3JvKG9wX3RlYXJfb2ZmX2FyZ3VtZW50cywgMykgXAogICAgIG1hY3JvKG9wX3JldCwg
MikgXAotICAgIG1hY3JvKG9wX2NhbGxfcHV0X3Jlc3VsdCwgMykgLyogaGFzIHZhbHVlIHByb2Zp
bGluZyAqLyBcCiAgICAgbWFjcm8ob3BfcmV0X29iamVjdF9vcl90aGlzLCAzKSBcCiAgICAgXAot
ICAgIG1hY3JvKG9wX2NvbnN0cnVjdCwgNikgXAorICAgIG1hY3JvKG9wX2NvbnN0cnVjdCwgOCkg
XAogICAgIG1hY3JvKG9wX3N0cmNhdCwgNCkgXAogICAgIG1hY3JvKG9wX3RvX3ByaW1pdGl2ZSwg
MykgXAogICAgIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0
ZWNvZGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAxNTEwMDUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMTg0Niw3ICsxODQ2LDEwIEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2Rl
R2VuZXJhdG9yOjplbWl0Q2FsbCgKICAgICAKICAgICAvLyBFbWl0IGNhbGwuCiAgICAgVW5saW5r
ZWRBcnJheVByb2ZpbGUgYXJyYXlQcm9maWxlID0gbmV3QXJyYXlQcm9maWxlKCk7Ci0gICAgZW1p
dE9wY29kZShvcGNvZGVJRCk7CisgICAgVW5saW5rZWRWYWx1ZVByb2ZpbGUgcHJvZmlsZSA9IGVt
aXRQcm9maWxlZE9wY29kZShvcGNvZGVJRCk7CisgICAgQVNTRVJUKGRzdCk7CisgICAgQVNTRVJU
KGRzdCAhPSBpZ25vcmVkUmVzdWx0KCkpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChkc3Qt
PmluZGV4KCkpOyAvLyByZXN1bHQKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZnVuYy0+aW5k
ZXgoKSk7IC8vIGZ1bmMKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoY2FsbEFyZ3VtZW50cy5h
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpKTsgLy8gYXJnQ291bnQKICAgICBpbnN0cnVjdGlv
bnMoKS5hcHBlbmQoY2FsbEFyZ3VtZW50cy5yZWdpc3Rlck9mZnNldCgpKTsgLy8gcmVnaXN0ZXJP
ZmZzZXQKQEAgLTE4NTYsMTEgKzE4NTksNyBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRv
cjo6ZW1pdENhbGwoCiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKDApOwogI2VuZGlmCiAgICAg
aW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGFycmF5UHJvZmlsZSk7Ci0gICAgaWYgKGRzdCAhPSBpZ25v
cmVkUmVzdWx0KCkpIHsKLSAgICAgICAgVW5saW5rZWRWYWx1ZVByb2ZpbGUgcHJvZmlsZSA9IGVt
aXRQcm9maWxlZE9wY29kZShvcF9jYWxsX3B1dF9yZXN1bHQpOwotICAgICAgICBpbnN0cnVjdGlv
bnMoKS5hcHBlbmQoa2lsbChkc3QpKTsKLSAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHBy
b2ZpbGUpOwotICAgIH0KKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQocHJvZmlsZSk7CiAgICAg
CiAgICAgaWYgKGV4cGVjdGVkRnVuY3Rpb24gIT0gTm9FeHBlY3RlZEZ1bmN0aW9uKQogICAgICAg
ICBlbWl0TGFiZWwoZG9uZS5nZXQoKSk7CkBAIC0xODg0LDE3ICsxODgzLDE1IEBAIFJlZ2lzdGVy
SUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0Q2FsbFYKICAgICBlbWl0RXhwcmVzc2lvbkluZm8o
ZGl2b3QsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQpOwogCiAgICAgLy8gRW1pdCBjYWxsLgotICAg
IGVtaXRPcGNvZGUob3BfY2FsbF92YXJhcmdzKTsKKyAgICBVbmxpbmtlZFZhbHVlUHJvZmlsZSBw
cm9maWxlID0gZW1pdFByb2ZpbGVkT3Bjb2RlKG9wX2NhbGxfdmFyYXJncyk7CisgICAgQVNTRVJU
KGRzdCAhPSBpZ25vcmVkUmVzdWx0KCkpOworICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChkc3Qt
PmluZGV4KCkpOwogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChmdW5jLT5pbmRleCgpKTsKICAg
ICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQodGhpc1JlZ2lzdGVyLT5pbmRleCgpKTsKICAgICBpbnN0
cnVjdGlvbnMoKS5hcHBlbmQoYXJndW1lbnRzLT5pbmRleCgpKTsKICAgICBpbnN0cnVjdGlvbnMo
KS5hcHBlbmQoZmlyc3RGcmVlUmVnaXN0ZXItPmluZGV4KCkpOwogICAgIGluc3RydWN0aW9ucygp
LmFwcGVuZCgwKTsgLy8gUGFkIHRvIG1ha2UgaXQgYXMgYmlnIGFzIGFuIG9wX2NhbGwuCi0gICAg
aWYgKGRzdCAhPSBpZ25vcmVkUmVzdWx0KCkpIHsKLSAgICAgICAgVW5saW5rZWRWYWx1ZVByb2Zp
bGUgcHJvZmlsZSA9IGVtaXRQcm9maWxlZE9wY29kZShvcF9jYWxsX3B1dF9yZXN1bHQpOwotICAg
ICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoa2lsbChkc3QpKTsKLSAgICAgICAgaW5zdHJ1Y3Rp
b25zKCkuYXBwZW5kKHByb2ZpbGUpOwotICAgIH0KKyAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQo
cHJvZmlsZSk7CiAgICAgaWYgKG1fc2hvdWxkRW1pdFByb2ZpbGVIb29rcykgewogICAgICAgICBl
bWl0T3Bjb2RlKG9wX3Byb2ZpbGVfZGlkX2NhbGwpOwogICAgICAgICBpbnN0cnVjdGlvbnMoKS5h
cHBlbmQocHJvZmlsZUhvb2tSZWdpc3Rlci0+aW5kZXgoKSk7CkBAIC0xOTYzLDcgKzE5NjAsOSBA
QCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENvbnN0CiAgICAgUmVmUHRyPExh
YmVsPiBkb25lID0gbmV3TGFiZWwoKTsKICAgICBleHBlY3RlZEZ1bmN0aW9uID0gZW1pdEV4cGVj
dGVkRnVuY3Rpb25TbmlwcGV0KGRzdCwgZnVuYywgZXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFyZ3Vt
ZW50cywgZG9uZS5nZXQoKSk7CiAKLSAgICBlbWl0T3Bjb2RlKG9wX2NvbnN0cnVjdCk7CisgICAg
VW5saW5rZWRWYWx1ZVByb2ZpbGUgcHJvZmlsZSA9IGVtaXRQcm9maWxlZE9wY29kZShvcF9jb25z
dHJ1Y3QpOworICAgIEFTU0VSVChkc3QgIT0gaWdub3JlZFJlc3VsdCgpKTsKKyAgICBpbnN0cnVj
dGlvbnMoKS5hcHBlbmQoZHN0LT5pbmRleCgpKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQo
ZnVuYy0+aW5kZXgoKSk7IC8vIGZ1bmMKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoY2FsbEFy
Z3VtZW50cy5hcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcygpKTsgLy8gYXJnQ291bnQKICAgICBp
bnN0cnVjdGlvbnMoKS5hcHBlbmQoY2FsbEFyZ3VtZW50cy5yZWdpc3Rlck9mZnNldCgpKTsgLy8g
cmVnaXN0ZXJPZmZzZXQKQEAgLTE5NzMsMTEgKzE5NzIsNyBAQCBSZWdpc3RlcklEKiBCeXRlY29k
ZUdlbmVyYXRvcjo6ZW1pdENvbnN0CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKDApOwogI2Vu
ZGlmCiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKDApOwotICAgIGlmIChkc3QgIT0gaWdub3Jl
ZFJlc3VsdCgpKSB7Ci0gICAgICAgIFVubGlua2VkVmFsdWVQcm9maWxlIHByb2ZpbGUgPSBlbWl0
UHJvZmlsZWRPcGNvZGUob3BfY2FsbF9wdXRfcmVzdWx0KTsKLSAgICAgICAgaW5zdHJ1Y3Rpb25z
KCkuYXBwZW5kKGtpbGwoZHN0KSk7Ci0gICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChwcm9m
aWxlKTsKLSAgICB9CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHByb2ZpbGUpOwogCiAgICAg
aWYgKGV4cGVjdGVkRnVuY3Rpb24gIT0gTm9FeHBlY3RlZEZ1bmN0aW9uKQogICAgICAgICBlbWl0
TGFiZWwoZG9uZS5nZXQoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBp
bGVyL05vZGVzQ29kZWdlbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCShyZXZpc2lvbiAxNTEwMDUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM3Miw4ICszNzIsOSBAQCBSZWdpc3RlcklEKiBOZXdFeHByTm9kZTo6ZW1pdEJ5
dGVjb2RlKEJ5CiAgICAgZWxzZQogICAgICAgICBleHBlY3RlZEZ1bmN0aW9uID0gTm9FeHBlY3Rl
ZEZ1bmN0aW9uOwogICAgIFJlZlB0cjxSZWdpc3RlcklEPiBmdW5jID0gZ2VuZXJhdG9yLmVtaXRO
b2RlKG1fZXhwcik7CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHJldHVyblZhbHVlID0gZ2VuZXJh
dG9yLmZpbmFsRGVzdGluYXRpb24oZHN0LCBmdW5jLmdldCgpKTsKICAgICBDYWxsQXJndW1lbnRz
IGNhbGxBcmd1bWVudHMoZ2VuZXJhdG9yLCBtX2FyZ3MpOwotICAgIHJldHVybiBnZW5lcmF0b3Iu
ZW1pdENvbnN0cnVjdChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbk9ySWdub3JlZChkc3QpLCBm
dW5jLmdldCgpLCBleHBlY3RlZEZ1bmN0aW9uLCBjYWxsQXJndW1lbnRzLCBkaXZvdCgpLCBzdGFy
dE9mZnNldCgpLCBlbmRPZmZzZXQoKSk7CisgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0Q29uc3Ry
dWN0KHJldHVyblZhbHVlLmdldCgpLCBmdW5jLmdldCgpLCBleHBlY3RlZEZ1bmN0aW9uLCBjYWxs
QXJndW1lbnRzLCBkaXZvdCgpLCBzdGFydE9mZnNldCgpLCBlbmRPZmZzZXQoKSk7CiB9CiAKIGlu
bGluZSBDYWxsQXJndW1lbnRzOjpDYWxsQXJndW1lbnRzKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5l
cmF0b3IsIEFyZ3VtZW50c05vZGUqIGFyZ3VtZW50c05vZGUpCkBAIC00MTgsOSArNDE5LDEwIEBA
IFJlZ2lzdGVySUQqIEV2YWxGdW5jdGlvbkNhbGxOb2RlOjplbWl0QnkKIFJlZ2lzdGVySUQqIEZ1
bmN0aW9uQ2FsbFZhbHVlTm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5l
cmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZnVuYyA9
IGdlbmVyYXRvci5lbWl0Tm9kZShtX2V4cHIpOworICAgIFJlZlB0cjxSZWdpc3RlcklEPiByZXR1
cm5WYWx1ZSA9IGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCwgZnVuYy5nZXQoKSk7CiAg
ICAgQ2FsbEFyZ3VtZW50cyBjYWxsQXJndW1lbnRzKGdlbmVyYXRvciwgbV9hcmdzKTsKICAgICBn
ZW5lcmF0b3IuZW1pdExvYWQoY2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwganNVbmRlZmlu
ZWQoKSk7Ci0gICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0Q2FsbChnZW5lcmF0b3IuZmluYWxEZXN0
aW5hdGlvbk9ySWdub3JlZChkc3QsIGZ1bmMuZ2V0KCkpLCBmdW5jLmdldCgpLCBOb0V4cGVjdGVk
RnVuY3Rpb24sIGNhbGxBcmd1bWVudHMsIGRpdm90KCksIHN0YXJ0T2Zmc2V0KCksIGVuZE9mZnNl
dCgpKTsKKyAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRDYWxsKHJldHVyblZhbHVlLmdldCgpLCBm
dW5jLmdldCgpLCBOb0V4cGVjdGVkRnVuY3Rpb24sIGNhbGxBcmd1bWVudHMsIGRpdm90KCksIHN0
YXJ0T2Zmc2V0KCksIGVuZE9mZnNldCgpKTsKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tIEZ1bmN0aW9uQ2FsbFJlc29sdmVOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0KQEAgLTQzMiwyOCArNDM0LDMxIEBAIFJlZ2lzdGVySUQqIEZ1bmN0aW9uQ2Fs
bFJlc29sdmVOb2RlOjplbWkKIAogICAgIGlmIChSZWdpc3RlcklEKiBsb2NhbCA9IHJlc29sdmVS
ZXN1bHQubG9jYWwoKSkgewogICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZnVuYyA9IGdlbmVy
YXRvci5lbWl0TW92ZShnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKGRzdCksIGxvY2FsKTsKKyAg
ICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHJldHVyblZhbHVlID0gZ2VuZXJhdG9yLmZpbmFsRGVz
dGluYXRpb24oZHN0LCBmdW5jLmdldCgpKTsKICAgICAgICAgQ2FsbEFyZ3VtZW50cyBjYWxsQXJn
dW1lbnRzKGdlbmVyYXRvciwgbV9hcmdzKTsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRMb2FkKGNh
bGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIGpzVW5kZWZpbmVkKCkpOwogICAgICAgICAvLyBU
aGlzIHBhc3NlcyBOb0V4cGVjdGVkRnVuY3Rpb24gYmVjYXVzZSB3ZSBleHBlY3QgdGhhdCBpZiB0
aGUgZnVuY3Rpb24gaXMgaW4gYQogICAgICAgICAvLyBsb2NhbCB2YXJpYWJsZSwgdGhlbiBpdCdz
IG5vdCBvbmUgb2Ygb3VyIGJ1aWx0LWluIGNvbnN0cnVjdG9ycy4KLSAgICAgICAgcmV0dXJuIGdl
bmVyYXRvci5lbWl0Q2FsbChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbk9ySWdub3JlZChkc3Qs
IGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCkpLCBmdW5jLmdldCgpLCBOb0V4cGVjdGVkRnVu
Y3Rpb24sIGNhbGxBcmd1bWVudHMsIGRpdm90KCksIHN0YXJ0T2Zmc2V0KCksIGVuZE9mZnNldCgp
KTsKKyAgICAgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0Q2FsbChyZXR1cm5WYWx1ZS5nZXQoKSwg
ZnVuYy5nZXQoKSwgTm9FeHBlY3RlZEZ1bmN0aW9uLCBjYWxsQXJndW1lbnRzLCBkaXZvdCgpLCBz
dGFydE9mZnNldCgpLCBlbmRPZmZzZXQoKSk7CiAgICAgfQogCiAgICAgaWYgKHJlc29sdmVSZXN1
bHQuaXNTdGF0aWMoKSkgewogICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZnVuYyA9IGdlbmVy
YXRvci5uZXdUZW1wb3JhcnkoKTsKKyAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHJldHVyblZh
bHVlID0gZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0LCBmdW5jLmdldCgpKTsKICAgICAg
ICAgQ2FsbEFyZ3VtZW50cyBjYWxsQXJndW1lbnRzKGdlbmVyYXRvciwgbV9hcmdzKTsKICAgICAg
ICAgZ2VuZXJhdG9yLmVtaXRHZXRTdGF0aWNWYXIoZnVuYy5nZXQoKSwgcmVzb2x2ZVJlc3VsdCwg
bV9pZGVudCk7CiAgICAgICAgIGdlbmVyYXRvci5lbWl0TG9hZChjYWxsQXJndW1lbnRzLnRoaXNS
ZWdpc3RlcigpLCBqc1VuZGVmaW5lZCgpKTsKLSAgICAgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0
Q2FsbChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbk9ySWdub3JlZChkc3QsIGZ1bmMuZ2V0KCkp
LCBmdW5jLmdldCgpLCBleHBlY3RlZEZ1bmN0aW9uLCBjYWxsQXJndW1lbnRzLCBkaXZvdCgpLCBz
dGFydE9mZnNldCgpLCBlbmRPZmZzZXQoKSk7CisgICAgICAgIHJldHVybiBnZW5lcmF0b3IuZW1p
dENhbGwocmV0dXJuVmFsdWUuZ2V0KCksIGZ1bmMuZ2V0KCksIGV4cGVjdGVkRnVuY3Rpb24sIGNh
bGxBcmd1bWVudHMsIGRpdm90KCksIHN0YXJ0T2Zmc2V0KCksIGVuZE9mZnNldCgpKTsKICAgICB9
CiAKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZnVuYyA9IGdlbmVyYXRvci5uZXdUZW1wb3Jhcnko
KTsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcmV0dXJuVmFsdWUgPSBnZW5lcmF0b3IuZmluYWxE
ZXN0aW5hdGlvbihkc3QsIGZ1bmMuZ2V0KCkpOwogICAgIENhbGxBcmd1bWVudHMgY2FsbEFyZ3Vt
ZW50cyhnZW5lcmF0b3IsIG1fYXJncyk7CiAgICAgaW50IGlkZW50aWZpZXJTdGFydCA9IGRpdm90
KCkgLSBzdGFydE9mZnNldCgpOwogCiAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhp
ZGVudGlmaWVyU3RhcnQgKyBtX2lkZW50Lmxlbmd0aCgpLCBtX2lkZW50Lmxlbmd0aCgpLCAwKTsK
ICAgICBnZW5lcmF0b3IuZW1pdFJlc29sdmVXaXRoVGhpcyhjYWxsQXJndW1lbnRzLnRoaXNSZWdp
c3RlcigpLCBmdW5jLmdldCgpLCByZXNvbHZlUmVzdWx0LCBtX2lkZW50KTsKLSAgICByZXR1cm4g
Z2VuZXJhdG9yLmVtaXRDYWxsKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uT3JJZ25vcmVkKGRz
dCwgZnVuYy5nZXQoKSksIGZ1bmMuZ2V0KCksIGV4cGVjdGVkRnVuY3Rpb24sIGNhbGxBcmd1bWVu
dHMsIGRpdm90KCksIHN0YXJ0T2Zmc2V0KCksIGVuZE9mZnNldCgpKTsKKyAgICByZXR1cm4gZ2Vu
ZXJhdG9yLmVtaXRDYWxsKHJldHVyblZhbHVlLmdldCgpLCBmdW5jLmdldCgpLCBleHBlY3RlZEZ1
bmN0aW9uLCBjYWxsQXJndW1lbnRzLCBkaXZvdCgpLCBzdGFydE9mZnNldCgpLCBlbmRPZmZzZXQo
KSk7CiB9CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBGdW5jdGlvbkNhbGxC
cmFja2V0Tm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC00NjQsOSAr
NDY5LDEwIEBAIFJlZ2lzdGVySUQqIEZ1bmN0aW9uQ2FsbEJyYWNrZXROb2RlOjplbWkKICAgICBS
ZWdpc3RlcklEKiBwcm9wZXJ0eSA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX3N1YnNjcmlwdCk7CiAg
ICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgpIC0gbV9zdWJleHByZXNzaW9u
RGl2b3RPZmZzZXQsIHN0YXJ0T2Zmc2V0KCkgLSBtX3N1YmV4cHJlc3Npb25EaXZvdE9mZnNldCwg
bV9zdWJleHByZXNzaW9uRW5kT2Zmc2V0KTsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZnVuY3Rp
b24gPSBnZW5lcmF0b3IuZW1pdEdldEJ5VmFsKGdlbmVyYXRvci50ZW1wRGVzdGluYXRpb24oZHN0
KSwgYmFzZS5nZXQoKSwgcHJvcGVydHkpOworICAgIFJlZlB0cjxSZWdpc3RlcklEPiByZXR1cm5W
YWx1ZSA9IGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCwgZnVuY3Rpb24uZ2V0KCkpOwog
ICAgIENhbGxBcmd1bWVudHMgY2FsbEFyZ3VtZW50cyhnZW5lcmF0b3IsIG1fYXJncyk7CiAgICAg
Z2VuZXJhdG9yLmVtaXRNb3ZlKGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIGJhc2UuZ2V0
KCkpOwotICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdENhbGwoZ2VuZXJhdG9yLmZpbmFsRGVzdGlu
YXRpb25Pcklnbm9yZWQoZHN0LCBmdW5jdGlvbi5nZXQoKSksIGZ1bmN0aW9uLmdldCgpLCBOb0V4
cGVjdGVkRnVuY3Rpb24sIGNhbGxBcmd1bWVudHMsIGRpdm90KCksIHN0YXJ0T2Zmc2V0KCksIGVu
ZE9mZnNldCgpKTsKKyAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRDYWxsKHJldHVyblZhbHVlLmdl
dCgpLCBmdW5jdGlvbi5nZXQoKSwgTm9FeHBlY3RlZEZ1bmN0aW9uLCBjYWxsQXJndW1lbnRzLCBk
aXZvdCgpLCBzdGFydE9mZnNldCgpLCBlbmRPZmZzZXQoKSk7CiB9CiAKIC8vIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLSBGdW5jdGlvbkNhbGxEb3ROb2RlIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KQEAgLTQ3NCwxMSArNDgwLDEyIEBAIFJlZ2lzdGVySUQqIEZ1bmN0
aW9uQ2FsbEJyYWNrZXROb2RlOjplbWkKIFJlZ2lzdGVySUQqIEZ1bmN0aW9uQ2FsbERvdE5vZGU6
OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBk
c3QpCiB7CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGZ1bmN0aW9uID0gZ2VuZXJhdG9yLnRlbXBE
ZXN0aW5hdGlvbihkc3QpOworICAgIFJlZlB0cjxSZWdpc3RlcklEPiByZXR1cm5WYWx1ZSA9IGdl
bmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCwgZnVuY3Rpb24uZ2V0KCkpOwogICAgIENhbGxB
cmd1bWVudHMgY2FsbEFyZ3VtZW50cyhnZW5lcmF0b3IsIG1fYXJncyk7CiAgICAgZ2VuZXJhdG9y
LmVtaXROb2RlKGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIG1fYmFzZSk7CiAgICAgZ2Vu
ZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgpIC0gbV9zdWJleHByZXNzaW9uRGl2b3RP
ZmZzZXQsIHN0YXJ0T2Zmc2V0KCkgLSBtX3N1YmV4cHJlc3Npb25EaXZvdE9mZnNldCwgbV9zdWJl
eHByZXNzaW9uRW5kT2Zmc2V0KTsKICAgICBnZW5lcmF0b3IuZW1pdEdldEJ5SWQoZnVuY3Rpb24u
Z2V0KCksIGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCksIG1faWRlbnQpOwotICAgIHJldHVy
biBnZW5lcmF0b3IuZW1pdENhbGwoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb25Pcklnbm9yZWQo
ZHN0LCBmdW5jdGlvbi5nZXQoKSksIGZ1bmN0aW9uLmdldCgpLCBOb0V4cGVjdGVkRnVuY3Rpb24s
IGNhbGxBcmd1bWVudHMsIGRpdm90KCksIHN0YXJ0T2Zmc2V0KCksIGVuZE9mZnNldCgpKTsKKyAg
ICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRDYWxsKHJldHVyblZhbHVlLmdldCgpLCBmdW5jdGlvbi5n
ZXQoKSwgTm9FeHBlY3RlZEZ1bmN0aW9uLCBjYWxsQXJndW1lbnRzLCBkaXZvdCgpLCBzdGFydE9m
ZnNldCgpLCBlbmRPZmZzZXQoKSk7CiB9CiAKIFJlZ2lzdGVySUQqIENhbGxGdW5jdGlvbkNhbGxE
b3ROb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0
ZXJJRCogZHN0KQpAQCAtNDg4LDcgKzQ5NSw3IEBAIFJlZ2lzdGVySUQqIENhbGxGdW5jdGlvbkNh
bGxEb3ROb2RlOjplbWkKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gYmFzZSA9IGdlbmVyYXRvci5l
bWl0Tm9kZShtX2Jhc2UpOwogICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3Qo
KSAtIG1fc3ViZXhwcmVzc2lvbkRpdm90T2Zmc2V0LCBzdGFydE9mZnNldCgpIC0gbV9zdWJleHBy
ZXNzaW9uRGl2b3RPZmZzZXQsIG1fc3ViZXhwcmVzc2lvbkVuZE9mZnNldCk7CiAgICAgUmVmUHRy
PFJlZ2lzdGVySUQ+IGZ1bmN0aW9uID0gZ2VuZXJhdG9yLmVtaXRHZXRCeUlkKGdlbmVyYXRvci50
ZW1wRGVzdGluYXRpb24oZHN0KSwgYmFzZS5nZXQoKSwgbV9pZGVudCk7Ci0gICAgUmVmUHRyPFJl
Z2lzdGVySUQ+IGZpbmFsRGVzdGluYXRpb25Pcklnbm9yZWQgPSBnZW5lcmF0b3IuZmluYWxEZXN0
aW5hdGlvbk9ySWdub3JlZChkc3QsIGZ1bmN0aW9uLmdldCgpKTsKKyAgICBSZWZQdHI8UmVnaXN0
ZXJJRD4gcmV0dXJuVmFsdWUgPSBnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIGZ1bmN0
aW9uLmdldCgpKTsKICAgICBnZW5lcmF0b3IuZW1pdEp1bXBJZk5vdEZ1bmN0aW9uQ2FsbChmdW5j
dGlvbi5nZXQoKSwgcmVhbENhbGwuZ2V0KCkpOwogICAgIHsKICAgICAgICAgaWYgKG1fYXJncy0+
bV9saXN0Tm9kZSAmJiBtX2FyZ3MtPm1fbGlzdE5vZGUtPm1fZXhwcikgewpAQCAtNDk4LDcgKzUw
NSw3IEBAIFJlZ2lzdGVySUQqIENhbGxGdW5jdGlvbkNhbGxEb3ROb2RlOjplbWkKICAgICAgICAg
ICAgIFJlZlB0cjxSZWdpc3RlcklEPiByZWFsRnVuY3Rpb24gPSBnZW5lcmF0b3IuZW1pdE1vdmUo
Z2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlvbihkc3QpLCBiYXNlLmdldCgpKTsKICAgICAgICAgICAg
IENhbGxBcmd1bWVudHMgY2FsbEFyZ3VtZW50cyhnZW5lcmF0b3IsIG1fYXJncyk7CiAgICAgICAg
ICAgICBnZW5lcmF0b3IuZW1pdE5vZGUoY2FsbEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwgb2xk
TGlzdC0+bV9leHByKTsKLSAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0Q2FsbChmaW5hbERlc3Rp
bmF0aW9uT3JJZ25vcmVkLmdldCgpLCByZWFsRnVuY3Rpb24uZ2V0KCksIE5vRXhwZWN0ZWRGdW5j
dGlvbiwgY2FsbEFyZ3VtZW50cywgZGl2b3QoKSwgc3RhcnRPZmZzZXQoKSwgZW5kT2Zmc2V0KCkp
OworICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRDYWxsKHJldHVyblZhbHVlLmdldCgpLCByZWFs
RnVuY3Rpb24uZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFyZ3VtZW50cywgZGl2b3Qo
KSwgc3RhcnRPZmZzZXQoKSwgZW5kT2Zmc2V0KCkpOwogICAgICAgICAgICAgZ2VuZXJhdG9yLmVt
aXRKdW1wKGVuZC5nZXQoKSk7CiAKICAgICAgICAgICAgIG1fYXJncy0+bV9saXN0Tm9kZSA9IG9s
ZExpc3Q7CkBAIC01MDYsNyArNTEzLDcgQEAgUmVnaXN0ZXJJRCogQ2FsbEZ1bmN0aW9uQ2FsbERv
dE5vZGU6OmVtaQogICAgICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHJlYWxGdW5jdGlvbiA9
IGdlbmVyYXRvci5lbWl0TW92ZShnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKGRzdCksIGJhc2Uu
Z2V0KCkpOwogICAgICAgICAgICAgQ2FsbEFyZ3VtZW50cyBjYWxsQXJndW1lbnRzKGdlbmVyYXRv
ciwgbV9hcmdzKTsKICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0TG9hZChjYWxsQXJndW1lbnRz
LnRoaXNSZWdpc3RlcigpLCBqc1VuZGVmaW5lZCgpKTsKLSAgICAgICAgICAgIGdlbmVyYXRvci5l
bWl0Q2FsbChmaW5hbERlc3RpbmF0aW9uT3JJZ25vcmVkLmdldCgpLCByZWFsRnVuY3Rpb24uZ2V0
KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFyZ3VtZW50cywgZGl2b3QoKSwgc3RhcnRPZmZz
ZXQoKSwgZW5kT2Zmc2V0KCkpOworICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRDYWxsKHJldHVy
blZhbHVlLmdldCgpLCByZWFsRnVuY3Rpb24uZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwgY2Fs
bEFyZ3VtZW50cywgZGl2b3QoKSwgc3RhcnRPZmZzZXQoKSwgZW5kT2Zmc2V0KCkpOwogICAgICAg
ICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1wKGVuZC5nZXQoKSk7CiAgICAgICAgIH0KICAgICB9CkBA
IC01MTQsMTAgKzUyMSwxMCBAQCBSZWdpc3RlcklEKiBDYWxsRnVuY3Rpb25DYWxsRG90Tm9kZTo6
ZW1pCiAgICAgewogICAgICAgICBDYWxsQXJndW1lbnRzIGNhbGxBcmd1bWVudHMoZ2VuZXJhdG9y
LCBtX2FyZ3MpOwogICAgICAgICBnZW5lcmF0b3IuZW1pdE1vdmUoY2FsbEFyZ3VtZW50cy50aGlz
UmVnaXN0ZXIoKSwgYmFzZS5nZXQoKSk7Ci0gICAgICAgIGdlbmVyYXRvci5lbWl0Q2FsbChmaW5h
bERlc3RpbmF0aW9uT3JJZ25vcmVkLmdldCgpLCBmdW5jdGlvbi5nZXQoKSwgTm9FeHBlY3RlZEZ1
bmN0aW9uLCBjYWxsQXJndW1lbnRzLCBkaXZvdCgpLCBzdGFydE9mZnNldCgpLCBlbmRPZmZzZXQo
KSk7CisgICAgICAgIGdlbmVyYXRvci5lbWl0Q2FsbChyZXR1cm5WYWx1ZS5nZXQoKSwgZnVuY3Rp
b24uZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFyZ3VtZW50cywgZGl2b3QoKSwgc3Rh
cnRPZmZzZXQoKSwgZW5kT2Zmc2V0KCkpOwogICAgIH0KICAgICBnZW5lcmF0b3IuZW1pdExhYmVs
KGVuZC5nZXQoKSk7Ci0gICAgcmV0dXJuIGZpbmFsRGVzdGluYXRpb25Pcklnbm9yZWQuZ2V0KCk7
CisgICAgcmV0dXJuIHJldHVyblZhbHVlLmdldCgpOwogfQogCiBzdGF0aWMgYm9vbCBhcmVUcml2
aWFsQXBwbHlBcmd1bWVudHMoQXJndW1lbnRzTm9kZSogYXJncykKQEAgLTUzOCw3ICs1NDUsNyBA
QCBSZWdpc3RlcklEKiBBcHBseUZ1bmN0aW9uQ2FsbERvdE5vZGU6OmVtCiAgICAgUmVmUHRyPFJl
Z2lzdGVySUQ+IGJhc2UgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9iYXNlKTsKICAgICBnZW5lcmF0
b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCkgLSBtX3N1YmV4cHJlc3Npb25EaXZvdE9mZnNl
dCwgc3RhcnRPZmZzZXQoKSAtIG1fc3ViZXhwcmVzc2lvbkRpdm90T2Zmc2V0LCBtX3N1YmV4cHJl
c3Npb25FbmRPZmZzZXQpOwogICAgIFJlZlB0cjxSZWdpc3RlcklEPiBmdW5jdGlvbiA9IGdlbmVy
YXRvci5lbWl0R2V0QnlJZChnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKGRzdCksIGJhc2UuZ2V0
KCksIG1faWRlbnQpOwotICAgIFJlZlB0cjxSZWdpc3RlcklEPiBmaW5hbERlc3RpbmF0aW9uT3JJ
Z25vcmVkID0gZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb25Pcklnbm9yZWQoZHN0LCBmdW5jdGlv
bi5nZXQoKSk7CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHJldHVyblZhbHVlID0gZ2VuZXJhdG9y
LmZpbmFsRGVzdGluYXRpb24oZHN0LCBmdW5jdGlvbi5nZXQoKSk7CiAgICAgZ2VuZXJhdG9yLmVt
aXRKdW1wSWZOb3RGdW5jdGlvbkFwcGx5KGZ1bmN0aW9uLmdldCgpLCByZWFsQ2FsbC5nZXQoKSk7
CiAgICAgewogICAgICAgICBpZiAobWF5QmVDYWxsKSB7CkBAIC01NTEsMjAgKzU1OCwyMCBAQCBS
ZWdpc3RlcklEKiBBcHBseUZ1bmN0aW9uQ2FsbERvdE5vZGU6OmVtCiAgICAgICAgICAgICAgICAg
ICAgIFJlZlB0cjxSZWdpc3RlcklEPiByZWFsRnVuY3Rpb24gPSBnZW5lcmF0b3IuZW1pdE1vdmUo
Z2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlvbihkc3QpLCBiYXNlLmdldCgpKTsKICAgICAgICAgICAg
ICAgICAgICAgQ2FsbEFyZ3VtZW50cyBjYWxsQXJndW1lbnRzKGdlbmVyYXRvciwgbV9hcmdzKTsK
ICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXROb2RlKGNhbGxBcmd1bWVudHMudGhp
c1JlZ2lzdGVyKCksIG9sZExpc3QtPm1fZXhwcik7Ci0gICAgICAgICAgICAgICAgICAgIGdlbmVy
YXRvci5lbWl0Q2FsbChmaW5hbERlc3RpbmF0aW9uT3JJZ25vcmVkLmdldCgpLCByZWFsRnVuY3Rp
b24uZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFyZ3VtZW50cywgZGl2b3QoKSwgc3Rh
cnRPZmZzZXQoKSwgZW5kT2Zmc2V0KCkpOworICAgICAgICAgICAgICAgICAgICBnZW5lcmF0b3Iu
ZW1pdENhbGwocmV0dXJuVmFsdWUuZ2V0KCksIHJlYWxGdW5jdGlvbi5nZXQoKSwgTm9FeHBlY3Rl
ZEZ1bmN0aW9uLCBjYWxsQXJndW1lbnRzLCBkaXZvdCgpLCBzdGFydE9mZnNldCgpLCBlbmRPZmZz
ZXQoKSk7CiAgICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAgbV9h
cmdzLT5tX2xpc3ROb2RlID0gbV9hcmdzLT5tX2xpc3ROb2RlLT5tX25leHQ7CiAgICAgICAgICAg
ICAgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiByZWFsRnVuY3Rpb24gPSBnZW5lcmF0b3IuZW1p
dE1vdmUoZ2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlvbihkc3QpLCBiYXNlLmdldCgpKTsKICAgICAg
ICAgICAgICAgICAgICAgQ2FsbEFyZ3VtZW50cyBjYWxsQXJndW1lbnRzKGdlbmVyYXRvciwgbV9h
cmdzKTsKICAgICAgICAgICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXROb2RlKGNhbGxBcmd1bWVu
dHMudGhpc1JlZ2lzdGVyKCksIG9sZExpc3QtPm1fZXhwcik7Ci0gICAgICAgICAgICAgICAgICAg
IGdlbmVyYXRvci5lbWl0Q2FsbChmaW5hbERlc3RpbmF0aW9uT3JJZ25vcmVkLmdldCgpLCByZWFs
RnVuY3Rpb24uZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFyZ3VtZW50cywgZGl2b3Qo
KSwgc3RhcnRPZmZzZXQoKSwgZW5kT2Zmc2V0KCkpOworICAgICAgICAgICAgICAgICAgICBnZW5l
cmF0b3IuZW1pdENhbGwocmV0dXJuVmFsdWUuZ2V0KCksIHJlYWxGdW5jdGlvbi5nZXQoKSwgTm9F
eHBlY3RlZEZ1bmN0aW9uLCBjYWxsQXJndW1lbnRzLCBkaXZvdCgpLCBzdGFydE9mZnNldCgpLCBl
bmRPZmZzZXQoKSk7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIG1fYXJncy0+
bV9saXN0Tm9kZSA9IG9sZExpc3Q7CiAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAg
ICAgIFJlZlB0cjxSZWdpc3RlcklEPiByZWFsRnVuY3Rpb24gPSBnZW5lcmF0b3IuZW1pdE1vdmUo
Z2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlvbihkc3QpLCBiYXNlLmdldCgpKTsKICAgICAgICAgICAg
ICAgICBDYWxsQXJndW1lbnRzIGNhbGxBcmd1bWVudHMoZ2VuZXJhdG9yLCBtX2FyZ3MpOwogICAg
ICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0TG9hZChjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3Rl
cigpLCBqc1VuZGVmaW5lZCgpKTsKLSAgICAgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdENhbGwo
ZmluYWxEZXN0aW5hdGlvbk9ySWdub3JlZC5nZXQoKSwgcmVhbEZ1bmN0aW9uLmdldCgpLCBOb0V4
cGVjdGVkRnVuY3Rpb24sIGNhbGxBcmd1bWVudHMsIGRpdm90KCksIHN0YXJ0T2Zmc2V0KCksIGVu
ZE9mZnNldCgpKTsKKyAgICAgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdENhbGwocmV0dXJuVmFs
dWUuZ2V0KCksIHJlYWxGdW5jdGlvbi5nZXQoKSwgTm9FeHBlY3RlZEZ1bmN0aW9uLCBjYWxsQXJn
dW1lbnRzLCBkaXZvdCgpLCBzdGFydE9mZnNldCgpLCBlbmRPZmZzZXQoKSk7CiAgICAgICAgICAg
ICB9CiAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBBU1NFUlQobV9hcmdzLT5tX2xpc3RO
b2RlICYmIG1fYXJncy0+bV9saXN0Tm9kZS0+bV9uZXh0KTsKQEAgLTU4NSw3ICs1OTIsNyBAQCBS
ZWdpc3RlcklEKiBBcHBseUZ1bmN0aW9uQ2FsbERvdE5vZGU6OmVtCiAgICAgICAgICAgICB3aGls
ZSAoKGFyZ3MgPSBhcmdzLT5tX25leHQpKQogICAgICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0
Tm9kZShhcmdzLT5tX2V4cHIpOwogCi0gICAgICAgICAgICBnZW5lcmF0b3IuZW1pdENhbGxWYXJh
cmdzKGZpbmFsRGVzdGluYXRpb25Pcklnbm9yZWQuZ2V0KCksIHJlYWxGdW5jdGlvbi5nZXQoKSwg
dGhpc1JlZ2lzdGVyLmdldCgpLCBhcmdzUmVnaXN0ZXIuZ2V0KCksIGdlbmVyYXRvci5uZXdUZW1w
b3JhcnkoKSwgcHJvZmlsZUhvb2tSZWdpc3Rlci5nZXQoKSwgZGl2b3QoKSwgc3RhcnRPZmZzZXQo
KSwgZW5kT2Zmc2V0KCkpOworICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRDYWxsVmFyYXJncyhy
ZXR1cm5WYWx1ZS5nZXQoKSwgcmVhbEZ1bmN0aW9uLmdldCgpLCB0aGlzUmVnaXN0ZXIuZ2V0KCks
IGFyZ3NSZWdpc3Rlci5nZXQoKSwgZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBwcm9maWxlSG9v
a1JlZ2lzdGVyLmdldCgpLCBkaXZvdCgpLCBzdGFydE9mZnNldCgpLCBlbmRPZmZzZXQoKSk7CiAg
ICAgICAgIH0KICAgICAgICAgZ2VuZXJhdG9yLmVtaXRKdW1wKGVuZC5nZXQoKSk7CiAgICAgfQpA
QCAtNTkzLDEwICs2MDAsMTAgQEAgUmVnaXN0ZXJJRCogQXBwbHlGdW5jdGlvbkNhbGxEb3ROb2Rl
OjplbQogICAgIHsKICAgICAgICAgQ2FsbEFyZ3VtZW50cyBjYWxsQXJndW1lbnRzKGdlbmVyYXRv
ciwgbV9hcmdzKTsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRNb3ZlKGNhbGxBcmd1bWVudHMudGhp
c1JlZ2lzdGVyKCksIGJhc2UuZ2V0KCkpOwotICAgICAgICBnZW5lcmF0b3IuZW1pdENhbGwoZmlu
YWxEZXN0aW5hdGlvbk9ySWdub3JlZC5nZXQoKSwgZnVuY3Rpb24uZ2V0KCksIE5vRXhwZWN0ZWRG
dW5jdGlvbiwgY2FsbEFyZ3VtZW50cywgZGl2b3QoKSwgc3RhcnRPZmZzZXQoKSwgZW5kT2Zmc2V0
KCkpOworICAgICAgICBnZW5lcmF0b3IuZW1pdENhbGwocmV0dXJuVmFsdWUuZ2V0KCksIGZ1bmN0
aW9uLmdldCgpLCBOb0V4cGVjdGVkRnVuY3Rpb24sIGNhbGxBcmd1bWVudHMsIGRpdm90KCksIHN0
YXJ0T2Zmc2V0KCksIGVuZE9mZnNldCgpKTsKICAgICB9CiAgICAgZ2VuZXJhdG9yLmVtaXRMYWJl
bChlbmQuZ2V0KCkpOwotICAgIHJldHVybiBmaW5hbERlc3RpbmF0aW9uT3JJZ25vcmVkLmdldCgp
OworICAgIHJldHVybiByZXR1cm5WYWx1ZS5nZXQoKTsKIH0KIAogLy8gLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tIFBvc3RmaXhOb2RlIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQ
YXJzZXIuY3BwCShyZXZpc2lvbiAxNTEwMDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI4LDcgKzEyOCw2IEBA
IHB1YmxpYzoKICAgICAgICAgLCBtX2dyYXBoKGdyYXBoKQogICAgICAgICAsIG1fY3VycmVudEJs
b2NrKDApCiAgICAgICAgICwgbV9jdXJyZW50SW5kZXgoMCkKLSAgICAgICAgLCBtX2N1cnJlbnRQ
cm9maWxpbmdJbmRleCgwKQogICAgICAgICAsIG1fY29uc3RhbnRVbmRlZmluZWQoVUlOVF9NQVgp
CiAgICAgICAgICwgbV9jb25zdGFudE51bGwoVUlOVF9NQVgpCiAgICAgICAgICwgbV9jb25zdGFu
dE5hTihVSU5UX01BWCkKQEAgLTE1OSwxOSArMTU4LDE3IEBAIHByaXZhdGU6CiAgICAgdm9pZCBw
YXJzZUNvZGVCbG9jaygpOwogCiAgICAgLy8gSGVscGVyIGZvciBtaW4gYW5kIG1heC4KLSAgICBi
b29sIGhhbmRsZU1pbk1heChib29sIHVzZXNSZXN1bHQsIGludCByZXN1bHRPcGVyYW5kLCBOb2Rl
VHlwZSBvcCwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMpOworICAgIGJvb2wgaGFuZGxlTWluTWF4KGludCByZXN1bHRPcGVyYW5kLCBOb2RlVHlwZSBv
cCwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpOwog
ICAgIAogICAgIC8vIEhhbmRsZSBjYWxscy4gVGhpcyByZXNvbHZlcyBpc3N1ZXMgc3Vycm91bmRp
bmcgaW5saW5pbmcgYW5kIGludHJpbnNpY3MuCi0gICAgdm9pZCBoYW5kbGVDYWxsKEludGVycHJl
dGVyKiwgSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgTm9kZVR5cGUgb3AsIENvZGVT
cGVjaWFsaXphdGlvbktpbmQpOworICAgIHZvaWQgaGFuZGxlQ2FsbChJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uLCBOb2RlVHlwZSBvcCwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCk7CiAg
ICAgdm9pZCBlbWl0RnVuY3Rpb25DaGVja3MoY29uc3QgQ2FsbExpbmtTdGF0dXMmLCBOb2RlKiBj
YWxsVGFyZ2V0LCBpbnQgcmVnaXN0ZXJPZmZzZXQsIENvZGVTcGVjaWFsaXphdGlvbktpbmQpOwog
ICAgIHZvaWQgZW1pdEFyZ3VtZW50UGhhbnRvbXMoaW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIENvZGVTcGVjaWFsaXphdGlvbktpbmQpOwogICAgIC8v
IEhhbmRsZSBpbmxpbmluZy4gUmV0dXJuIHRydWUgaWYgaXQgc3VjY2VlZGVkLCBmYWxzZSBpZiB3
ZSBuZWVkIHRvIHBsYW50IGEgY2FsbC4KLSAgICBib29sIGhhbmRsZUlubGluaW5nKGJvb2wgdXNl
c1Jlc3VsdCwgTm9kZSogY2FsbFRhcmdldE5vZGUsIGludCByZXN1bHRPcGVyYW5kLCBjb25zdCBD
YWxsTGlua1N0YXR1cyYsIGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzLCB1bnNpZ25lZCBuZXh0T2Zmc2V0LCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kKTsK
LSAgICAvLyBIYW5kbGUgc2V0dGluZyB0aGUgcmVzdWx0IG9mIGFuIGludHJpbnNpYy4KLSAgICB2
b2lkIHNldEludHJpbnNpY1Jlc3VsdChib29sIHVzZXNSZXN1bHQsIGludCByZXN1bHRPcGVyYW5k
LCBOb2RlKik7CisgICAgYm9vbCBoYW5kbGVJbmxpbmluZyhOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwg
aW50IHJlc3VsdE9wZXJhbmQsIGNvbnN0IENhbGxMaW5rU3RhdHVzJiwgaW50IHJlZ2lzdGVyT2Zm
c2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIHVuc2lnbmVkIG5leHRPZmZzZXQs
IENvZGVTcGVjaWFsaXphdGlvbktpbmQpOwogICAgIC8vIEhhbmRsZSBpbnRyaW5zaWMgZnVuY3Rp
b25zLiBSZXR1cm4gdHJ1ZSBpZiBpdCBzdWNjZWVkZWQsIGZhbHNlIGlmIHdlIG5lZWQgdG8gcGxh
bnQgYSBjYWxsLgotICAgIGJvb2wgaGFuZGxlSW50cmluc2ljKGJvb2wgdXNlc1Jlc3VsdCwgaW50
IHJlc3VsdE9wZXJhbmQsIEludHJpbnNpYywgaW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMsIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24pOwotICAgIGJv
b2wgaGFuZGxlQ29uc3RhbnRJbnRlcm5hbEZ1bmN0aW9uKGJvb2wgdXNlc1Jlc3VsdCwgaW50IHJl
c3VsdE9wZXJhbmQsIEludGVybmFsRnVuY3Rpb24qLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBh
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiwgQ29k
ZVNwZWNpYWxpemF0aW9uS2luZCk7CisgICAgYm9vbCBoYW5kbGVJbnRyaW5zaWMoaW50IHJlc3Vs
dE9wZXJhbmQsIEludHJpbnNpYywgaW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMsIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24pOworICAgIGJvb2wgaGFu
ZGxlQ29uc3RhbnRJbnRlcm5hbEZ1bmN0aW9uKGludCByZXN1bHRPcGVyYW5kLCBJbnRlcm5hbEZ1
bmN0aW9uKiwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMsIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24sIENvZGVTcGVjaWFsaXphdGlvbktpbmQpOwog
ICAgIE5vZGUqIGhhbmRsZUdldEJ5T2Zmc2V0KFNwZWN1bGF0ZWRUeXBlLCBOb2RlKiBiYXNlLCB1
bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBQcm9wZXJ0eU9mZnNldCk7CiAgICAgdm9pZCBoYW5k
bGVHZXRCeU9mZnNldCgKICAgICAgICAgaW50IGRlc3RpbmF0aW9uT3BlcmFuZCwgU3BlY3VsYXRl
ZFR5cGUsIE5vZGUqIGJhc2UsIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsCkBAIC02ODQsNyAr
NjgxLDcgQEAgcHJpdmF0ZToKIAogICAgIENvZGVPcmlnaW4gY3VycmVudENvZGVPcmlnaW4oKQog
ICAgIHsKLSAgICAgICAgcmV0dXJuIENvZGVPcmlnaW4obV9jdXJyZW50SW5kZXgsIGlubGluZUNh
bGxGcmFtZSgpLCBtX2N1cnJlbnRQcm9maWxpbmdJbmRleCAtIG1fY3VycmVudEluZGV4KTsKKyAg
ICAgICAgcmV0dXJuIENvZGVPcmlnaW4obV9jdXJyZW50SW5kZXgsIGlubGluZUNhbGxGcmFtZSgp
LCAwKTsKICAgICB9CiAgICAgCiAgICAgYm9vbCBjYW5Gb2xkKE5vZGUqIG5vZGUpCkBAIC03NjQs
MjkgKzc2MSwyMiBAQCBwcml2YXRlOgogICAgICAgICBtX251bVBhc3NlZFZhckFyZ3MrKzsKICAg
ICB9CiAgICAgCi0gICAgTm9kZSogYWRkQ2FsbChJbnRlcnByZXRlciogaW50ZXJwcmV0ZXIsIElu
c3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIE5vZGVUeXBlIG9wKQorICAgIE5vZGUqIGFk
ZENhbGwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgTm9kZVR5cGUgb3ApCiAgICAg
ewotICAgICAgICBJbnN0cnVjdGlvbiogcHV0SW5zdHJ1Y3Rpb24gPSBjdXJyZW50SW5zdHJ1Y3Rp
b24gKyBPUENPREVfTEVOR1RIKG9wX2NhbGwpOwotCi0gICAgICAgIFNwZWN1bGF0ZWRUeXBlIHBy
ZWRpY3Rpb24gPSBTcGVjTm9uZTsKLSAgICAgICAgaWYgKGludGVycHJldGVyLT5nZXRPcGNvZGVJ
RChwdXRJbnN0cnVjdGlvbi0+dS5vcGNvZGUpID09IG9wX2NhbGxfcHV0X3Jlc3VsdCkgewotICAg
ICAgICAgICAgbV9jdXJyZW50UHJvZmlsaW5nSW5kZXggPSBtX2N1cnJlbnRJbmRleCArIE9QQ09E
RV9MRU5HVEgob3BfY2FsbCk7Ci0gICAgICAgICAgICBwcmVkaWN0aW9uID0gZ2V0UHJlZGljdGlv
bigpOwotICAgICAgICB9CisgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSBnZXRQ
cmVkaWN0aW9uKCk7CiAgICAgICAgIAotICAgICAgICBhZGRWYXJBcmdDaGlsZChnZXQoY3VycmVu
dEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCkpOwotICAgICAgICBpbnQgYXJnQ291bnQgPSBjdXJy
ZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOworICAgICAgICBhZGRWYXJBcmdDaGlsZChnZXQo
Y3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCkpOworICAgICAgICBpbnQgYXJnQ291bnQg
PSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOwogICAgICAgICBpZiAoSlNTdGFjazo6
Q2FsbEZyYW1lSGVhZGVyU2l6ZSArICh1bnNpZ25lZClhcmdDb3VudCA+IG1fcGFyYW1ldGVyU2xv
dHMpCiAgICAgICAgICAgICBtX3BhcmFtZXRlclNsb3RzID0gSlNTdGFjazo6Q2FsbEZyYW1lSGVh
ZGVyU2l6ZSArIGFyZ0NvdW50OwogCi0gICAgICAgIGludCByZWdpc3Rlck9mZnNldCA9IGN1cnJl
bnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7CisgICAgICAgIGludCByZWdpc3Rlck9mZnNldCA9
IGN1cnJlbnRJbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQ7CiAgICAgICAgIGludCBkdW1teVRoaXNB
cmd1bWVudCA9IG9wID09IENhbGwgPyAwIDogMTsKICAgICAgICAgZm9yIChpbnQgaSA9IDAgKyBk
dW1teVRoaXNBcmd1bWVudDsgaSA8IGFyZ0NvdW50OyArK2kpCiAgICAgICAgICAgICBhZGRWYXJB
cmdDaGlsZChnZXQocmVnaXN0ZXJPZmZzZXQgKyBhcmd1bWVudFRvT3BlcmFuZChpKSkpOwogCiAg
ICAgICAgIE5vZGUqIGNhbGwgPSBhZGRUb0dyYXBoKE5vZGU6OlZhckFyZywgb3AsIE9wSW5mbygw
KSwgT3BJbmZvKHByZWRpY3Rpb24pKTsKLSAgICAgICAgaWYgKGludGVycHJldGVyLT5nZXRPcGNv
ZGVJRChwdXRJbnN0cnVjdGlvbi0+dS5vcGNvZGUpID09IG9wX2NhbGxfcHV0X3Jlc3VsdCkKLSAg
ICAgICAgICAgIHNldChwdXRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIGNhbGwpOworICAgICAg
ICBzZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgY2FsbCk7CiAgICAgICAgIHJl
dHVybiBjYWxsOwogICAgIH0KICAgICAKQEAgLTgzMywxMiArODIzLDEyIEBAIHByaXZhdGU6CiAg
ICAgCiAgICAgU3BlY3VsYXRlZFR5cGUgZ2V0UHJlZGljdGlvbldpdGhvdXRPU1JFeGl0KCkKICAg
ICB7Ci0gICAgICAgIHJldHVybiBnZXRQcmVkaWN0aW9uV2l0aG91dE9TUkV4aXQobV9jdXJyZW50
UHJvZmlsaW5nSW5kZXgpOworICAgICAgICByZXR1cm4gZ2V0UHJlZGljdGlvbldpdGhvdXRPU1JF
eGl0KG1fY3VycmVudEluZGV4KTsKICAgICB9CiAgICAgCiAgICAgU3BlY3VsYXRlZFR5cGUgZ2V0
UHJlZGljdGlvbigpCiAgICAgewotICAgICAgICByZXR1cm4gZ2V0UHJlZGljdGlvbihtX2N1cnJl
bnRQcm9maWxpbmdJbmRleCk7CisgICAgICAgIHJldHVybiBnZXRQcmVkaWN0aW9uKG1fY3VycmVu
dEluZGV4KTsKICAgICB9CiAgICAgCiAgICAgQXJyYXlNb2RlIGdldEFycmF5TW9kZShBcnJheVBy
b2ZpbGUqIHByb2ZpbGUsIEFycmF5OjpBY3Rpb24gYWN0aW9uKQpAQCAtOTc5LDggKzk2OSw2IEBA
IHByaXZhdGU6CiAgICAgQmFzaWNCbG9jayogbV9jdXJyZW50QmxvY2s7CiAgICAgLy8gVGhlIGJ5
dGVjb2RlIGluZGV4IG9mIHRoZSBjdXJyZW50IGluc3RydWN0aW9uIGJlaW5nIGdlbmVyYXRlZC4K
ICAgICB1bnNpZ25lZCBtX2N1cnJlbnRJbmRleDsKLSAgICAvLyBUaGUgYnl0ZWNvZGUgaW5kZXgg
b2YgdGhlIHZhbHVlIHByb2ZpbGUgb2YgdGhlIGN1cnJlbnQgaW5zdHJ1Y3Rpb24gYmVpbmcgZ2Vu
ZXJhdGVkLgotICAgIHVuc2lnbmVkIG1fY3VycmVudFByb2ZpbGluZ0luZGV4OwogCiAgICAgLy8g
V2UgdXNlIHRoZXNlIHZhbHVlcyBkdXJpbmcgY29kZSBnZW5lcmF0aW9uLCBhbmQgdG8gYXZvaWQg
dGhlIG5lZWQgZm9yCiAgICAgLy8gc3BlY2lhbCBoYW5kbGluZyB3ZSBtYWtlIHN1cmUgdGhleSBh
cmUgYXZhaWxhYmxlIGFzIGNvbnN0YW50cyBpbiB0aGUKQEAgLTExNjgsMTEgKzExNTYsMTEgQEAg
cHJpdmF0ZToKICAgICByZXR1cm4gc2hvdWxkQ29udGludWVQYXJzaW5nCiAKIAotdm9pZCBCeXRl
Q29kZVBhcnNlcjo6aGFuZGxlQ2FsbChJbnRlcnByZXRlciogaW50ZXJwcmV0ZXIsIEluc3RydWN0
aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIE5vZGVUeXBlIG9wLCBDb2RlU3BlY2lhbGl6YXRpb25L
aW5kIGtpbmQpCit2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVDYWxsKEluc3RydWN0aW9uKiBj
dXJyZW50SW5zdHJ1Y3Rpb24sIE5vZGVUeXBlIG9wLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtp
bmQpCiB7CiAgICAgQVNTRVJUKE9QQ09ERV9MRU5HVEgob3BfY2FsbCkgPT0gT1BDT0RFX0xFTkdU
SChvcF9jb25zdHJ1Y3QpKTsKICAgICAKLSAgICBOb2RlKiBjYWxsVGFyZ2V0ID0gZ2V0KGN1cnJl
bnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpOworICAgIE5vZGUqIGNhbGxUYXJnZXQgPSBnZXQo
Y3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCk7CiAgICAgCiAgICAgQ2FsbExpbmtTdGF0
dXMgY2FsbExpbmtTdGF0dXM7CiAKQEAgLTExOTMsMjkgKzExODEsMTkgQEAgdm9pZCBCeXRlQ29k
ZVBhcnNlcjo6aGFuZGxlQ2FsbChJbnRlcnByZQogICAgICAgICAvLyBPZGRseSwgdGhpcyBjb25m
bGF0ZXMgY2FsbHMgdGhhdCBoYXZlbid0IGV4ZWN1dGVkIHdpdGggY2FsbHMgdGhhdCBiZWhhdmVk
IHN1ZmZpY2llbnRseSBwb2x5bW9ycGhpY2FsbHkKICAgICAgICAgLy8gdGhhdCB3ZSBjYW5ub3Qg
b3B0aW1pemUgdGhlbS4KICAgICAgICAgCi0gICAgICAgIGFkZENhbGwoaW50ZXJwcmV0ZXIsIGN1
cnJlbnRJbnN0cnVjdGlvbiwgb3ApOworICAgICAgICBhZGRDYWxsKGN1cnJlbnRJbnN0cnVjdGlv
biwgb3ApOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIAotICAgIGludCBhcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcyA9IGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQ7Ci0gICAg
aW50IHJlZ2lzdGVyT2Zmc2V0ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKKyAg
ICBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10u
dS5vcGVyYW5kOworICAgIGludCByZWdpc3Rlck9mZnNldCA9IGN1cnJlbnRJbnN0cnVjdGlvbls0
XS51Lm9wZXJhbmQ7CiAKLSAgICAvLyBEbyB3ZSBoYXZlIGEgcmVzdWx0PwotICAgIGJvb2wgdXNl
c1Jlc3VsdCA9IGZhbHNlOwotICAgIGludCByZXN1bHRPcGVyYW5kID0gMDsgLy8gbWFrZSBjb21w
aWxlciBoYXBweQorICAgIGludCByZXN1bHRPcGVyYW5kID0gY3VycmVudEluc3RydWN0aW9uWzFd
LnUub3BlcmFuZDsKICAgICB1bnNpZ25lZCBuZXh0T2Zmc2V0ID0gbV9jdXJyZW50SW5kZXggKyBP
UENPREVfTEVOR1RIKG9wX2NhbGwpOwotICAgIEluc3RydWN0aW9uKiBwdXRJbnN0cnVjdGlvbiA9
IGN1cnJlbnRJbnN0cnVjdGlvbiArIE9QQ09ERV9MRU5HVEgob3BfY2FsbCk7Ci0gICAgU3BlY3Vs
YXRlZFR5cGUgcHJlZGljdGlvbiA9IFNwZWNOb25lOwotICAgIGlmIChpbnRlcnByZXRlci0+Z2V0
T3Bjb2RlSUQocHV0SW5zdHJ1Y3Rpb24tPnUub3Bjb2RlKSA9PSBvcF9jYWxsX3B1dF9yZXN1bHQp
IHsKLSAgICAgICAgcmVzdWx0T3BlcmFuZCA9IHB1dEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsK
LSAgICAgICAgdXNlc1Jlc3VsdCA9IHRydWU7Ci0gICAgICAgIG1fY3VycmVudFByb2ZpbGluZ0lu
ZGV4ID0gbmV4dE9mZnNldDsKLSAgICAgICAgcHJlZGljdGlvbiA9IGdldFByZWRpY3Rpb24oKTsK
LSAgICAgICAgbmV4dE9mZnNldCArPSBPUENPREVfTEVOR1RIKG9wX2NhbGxfcHV0X3Jlc3VsdCk7
Ci0gICAgfQorICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSBnZXRQcmVkaWN0aW9uKCk7
CiAKICAgICBpZiAoSW50ZXJuYWxGdW5jdGlvbiogZnVuY3Rpb24gPSBjYWxsTGlua1N0YXR1cy5p
bnRlcm5hbEZ1bmN0aW9uKCkpIHsKLSAgICAgICAgaWYgKGhhbmRsZUNvbnN0YW50SW50ZXJuYWxG
dW5jdGlvbih1c2VzUmVzdWx0LCByZXN1bHRPcGVyYW5kLCBmdW5jdGlvbiwgcmVnaXN0ZXJPZmZz
ZXQsIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBwcmVkaWN0aW9uLCBraW5kKSkgeworICAg
ICAgICBpZiAoaGFuZGxlQ29uc3RhbnRJbnRlcm5hbEZ1bmN0aW9uKHJlc3VsdE9wZXJhbmQsIGZ1
bmN0aW9uLCByZWdpc3Rlck9mZnNldCwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIHByZWRp
Y3Rpb24sIGtpbmQpKSB7CiAgICAgICAgICAgICAvLyBUaGlzIHBoYW50b21pbmcgaGFzIHRvIGJl
ICphZnRlciogdGhlIGNvZGUgZm9yIHRoZSBpbnRyaW5zaWMsIHRvIHNpZ25pZnkgdGhhdAogICAg
ICAgICAgICAgLy8gdGhlIGlucHV0cyBtdXN0IGJlIGtlcHQgYWxpdmUgd2hhdGV2ZXIgZXhpdHMg
dGhlIGludHJpbnNpYyBtYXkgZG8uCiAgICAgICAgICAgICBhZGRUb0dyYXBoKFBoYW50b20sIGNh
bGxUYXJnZXQpOwpAQCAtMTIyNCw3ICsxMjAyLDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFu
ZGxlQ2FsbChJbnRlcnByZQogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICAvLyBDYW4gb25s
eSBoYW5kbGUgdGhpcyB1c2luZyB0aGUgZ2VuZXJpYyBjYWxsIGhhbmRsZXIuCi0gICAgICAgIGFk
ZENhbGwoaW50ZXJwcmV0ZXIsIGN1cnJlbnRJbnN0cnVjdGlvbiwgb3ApOworICAgICAgICBhZGRD
YWxsKGN1cnJlbnRJbnN0cnVjdGlvbiwgb3ApOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAg
ICAgICAKQEAgLTEyMzIsMTcgKzEyMTAsMTcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxl
Q2FsbChJbnRlcnByZQogICAgIGlmIChpbnRyaW5zaWMgIT0gTm9JbnRyaW5zaWMpIHsKICAgICAg
ICAgZW1pdEZ1bmN0aW9uQ2hlY2tzKGNhbGxMaW5rU3RhdHVzLCBjYWxsVGFyZ2V0LCByZWdpc3Rl
ck9mZnNldCwga2luZCk7CiAgICAgICAgICAgICAKLSAgICAgICAgaWYgKGhhbmRsZUludHJpbnNp
Yyh1c2VzUmVzdWx0LCByZXN1bHRPcGVyYW5kLCBpbnRyaW5zaWMsIHJlZ2lzdGVyT2Zmc2V0LCBh
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgcHJlZGljdGlvbikpIHsKKyAgICAgICAgaWYgKGhh
bmRsZUludHJpbnNpYyhyZXN1bHRPcGVyYW5kLCBpbnRyaW5zaWMsIHJlZ2lzdGVyT2Zmc2V0LCBh
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgcHJlZGljdGlvbikpIHsKICAgICAgICAgICAgIC8v
IFRoaXMgcGhhbnRvbWluZyBoYXMgdG8gYmUgKmFmdGVyKiB0aGUgY29kZSBmb3IgdGhlIGludHJp
bnNpYywgdG8gc2lnbmlmeSB0aGF0CiAgICAgICAgICAgICAvLyB0aGUgaW5wdXRzIG11c3QgYmUg
a2VwdCBhbGl2ZSB3aGF0ZXZlciBleGl0cyB0aGUgaW50cmluc2ljIG1heSBkby4KICAgICAgICAg
ICAgIGFkZFRvR3JhcGgoUGhhbnRvbSwgY2FsbFRhcmdldCk7CiAgICAgICAgICAgICBlbWl0QXJn
dW1lbnRQaGFudG9tcyhyZWdpc3Rlck9mZnNldCwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMs
IGtpbmQpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgfSBlbHNlIGlmICho
YW5kbGVJbmxpbmluZyh1c2VzUmVzdWx0LCBjYWxsVGFyZ2V0LCByZXN1bHRPcGVyYW5kLCBjYWxs
TGlua1N0YXR1cywgcmVnaXN0ZXJPZmZzZXQsIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBu
ZXh0T2Zmc2V0LCBraW5kKSkKKyAgICB9IGVsc2UgaWYgKGhhbmRsZUlubGluaW5nKGNhbGxUYXJn
ZXQsIHJlc3VsdE9wZXJhbmQsIGNhbGxMaW5rU3RhdHVzLCByZWdpc3Rlck9mZnNldCwgYXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMsIG5leHRPZmZzZXQsIGtpbmQpKQogICAgICAgICByZXR1cm47
CiAgICAgCi0gICAgYWRkQ2FsbChpbnRlcnByZXRlciwgY3VycmVudEluc3RydWN0aW9uLCBvcCk7
CisgICAgYWRkQ2FsbChjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wKTsKIH0KIAogdm9pZCBCeXRlQ29k
ZVBhcnNlcjo6ZW1pdEZ1bmN0aW9uQ2hlY2tzKGNvbnN0IENhbGxMaW5rU3RhdHVzJiBjYWxsTGlu
a1N0YXR1cywgTm9kZSogY2FsbFRhcmdldCwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBDb2RlU3BlY2lh
bGl6YXRpb25LaW5kIGtpbmQpCkBAIC0xMjc3LDcgKzEyNTUsNyBAQCB2b2lkIEJ5dGVDb2RlUGFy
c2VyOjplbWl0QXJndW1lbnRQaGFudG9tCiAgICAgICAgIGFkZFRvR3JhcGgoUGhhbnRvbSwgZ2V0
KHJlZ2lzdGVyT2Zmc2V0ICsgYXJndW1lbnRUb09wZXJhbmQoaSkpKTsKIH0KIAotYm9vbCBCeXRl
Q29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcoYm9vbCB1c2VzUmVzdWx0LCBOb2RlKiBjYWxsVGFy
Z2V0Tm9kZSwgaW50IHJlc3VsdE9wZXJhbmQsIGNvbnN0IENhbGxMaW5rU3RhdHVzJiBjYWxsTGlu
a1N0YXR1cywgaW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMsIHVuc2lnbmVkIG5leHRPZmZzZXQsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKK2Jv
b2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGluaW5nKE5vZGUqIGNhbGxUYXJnZXROb2RlLCBp
bnQgcmVzdWx0T3BlcmFuZCwgY29uc3QgQ2FsbExpbmtTdGF0dXMmIGNhbGxMaW5rU3RhdHVzLCBp
bnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgdW5zaWdu
ZWQgbmV4dE9mZnNldCwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQogewogICAgIC8vIEZp
cnN0LCB0aGUgcmVhbGx5IHNpbXBsZSBjaGVja3M6IGRvIHdlIGhhdmUgYW4gYWN0dWFsIEpTIGZ1
bmN0aW9uPwogICAgIGlmICghY2FsbExpbmtTdGF0dXMuZXhlY3V0YWJsZSgpKQpAQCAtMTM0NSwx
NiArMTMyMywxMyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxpbmluZyhib29sCiAg
ICAgc2l6ZV90IGFyZ3VtZW50UG9zaXRpb25TdGFydCA9IG1fZ3JhcGgubV9hcmd1bWVudFBvc2l0
aW9ucy5zaXplKCk7CiAKICAgICBJbmxpbmVTdGFja0VudHJ5IGlubGluZVN0YWNrRW50cnkoCi0g
ICAgICAgIHRoaXMsIGNvZGVCbG9jaywgY29kZUJsb2NrLCBtX2dyYXBoLm1fYmxvY2tzLnNpemUo
KSAtIDEsCi0gICAgICAgIGNhbGxMaW5rU3RhdHVzLmZ1bmN0aW9uKCksIChWaXJ0dWFsUmVnaXN0
ZXIpbV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKAotICAgICAgICAgICAgdXNlc1Jlc3Vs
dCA/IHJlc3VsdE9wZXJhbmQgOiBJbnZhbGlkVmlydHVhbFJlZ2lzdGVyKSwKKyAgICAgICAgdGhp
cywgY29kZUJsb2NrLCBjb2RlQmxvY2ssIG1fZ3JhcGgubV9ibG9ja3Muc2l6ZSgpIC0gMSwgY2Fs
bExpbmtTdGF0dXMuZnVuY3Rpb24oKSwKKyAgICAgICAgKFZpcnR1YWxSZWdpc3RlciltX2lubGlu
ZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQocmVzdWx0T3BlcmFuZCksCiAgICAgICAgIChWaXJ0dWFs
UmVnaXN0ZXIpaW5saW5lQ2FsbEZyYW1lU3RhcnQsIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
LCBraW5kKTsKICAgICAKICAgICAvLyBUaGlzIGlzIHdoZXJlIHRoZSBhY3R1YWwgaW5saW5pbmcg
cmVhbGx5IGhhcHBlbnMuCiAgICAgdW5zaWduZWQgb2xkSW5kZXggPSBtX2N1cnJlbnRJbmRleDsK
LSAgICB1bnNpZ25lZCBvbGRQcm9maWxpbmdJbmRleCA9IG1fY3VycmVudFByb2ZpbGluZ0luZGV4
OwogICAgIG1fY3VycmVudEluZGV4ID0gMDsKLSAgICBtX2N1cnJlbnRQcm9maWxpbmdJbmRleCA9
IDA7CiAKICAgICBhZGRUb0dyYXBoKElubGluZVN0YXJ0LCBPcEluZm8oYXJndW1lbnRQb3NpdGlv
blN0YXJ0KSk7CiAgICAgaWYgKGNhbGxMaW5rU3RhdHVzLmlzQ2xvc3VyZUNhbGwoKSkgewpAQCAt
MTM2NSw3ICsxMzQwLDYgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmcoYm9v
bAogICAgIHBhcnNlQ29kZUJsb2NrKCk7CiAgICAgCiAgICAgbV9jdXJyZW50SW5kZXggPSBvbGRJ
bmRleDsKLSAgICBtX2N1cnJlbnRQcm9maWxpbmdJbmRleCA9IG9sZFByb2ZpbGluZ0luZGV4Owog
ICAgIAogICAgIC8vIElmIHRoZSBpbmxpbmVkIGNvZGUgY3JlYXRlZCBzb21lIG5ldyBiYXNpYyBi
bG9ja3MsIHRoZW4gd2UgaGF2ZSBsaW5raW5nIHRvIGRvLgogICAgIGlmIChpbmxpbmVTdGFja0Vu
dHJ5Lm1fY2FsbHNpdGVCbG9ja0hlYWQgIT0gbV9ncmFwaC5tX2Jsb2Nrcy5zaXplKCkgLSAxKSB7
CkBAIC0xNDYxLDI5ICsxNDM1LDIyIEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGlu
aW5nKGJvb2wKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotdm9pZCBCeXRlQ29kZVBhcnNlcjo6c2V0
SW50cmluc2ljUmVzdWx0KGJvb2wgdXNlc1Jlc3VsdCwgaW50IHJlc3VsdE9wZXJhbmQsIE5vZGUq
IG5vZGUpCi17Ci0gICAgaWYgKCF1c2VzUmVzdWx0KQotICAgICAgICByZXR1cm47Ci0gICAgc2V0
KHJlc3VsdE9wZXJhbmQsIG5vZGUpOwotfQotCi1ib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVN
aW5NYXgoYm9vbCB1c2VzUmVzdWx0LCBpbnQgcmVzdWx0T3BlcmFuZCwgTm9kZVR5cGUgb3AsIGlu
dCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKQorYm9vbCBC
eXRlQ29kZVBhcnNlcjo6aGFuZGxlTWluTWF4KGludCByZXN1bHRPcGVyYW5kLCBOb2RlVHlwZSBv
cCwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpCiB7
CiAgICAgaWYgKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID09IDEpIHsgLy8gTWF0aC5taW4o
KQotICAgICAgICBzZXRJbnRyaW5zaWNSZXN1bHQodXNlc1Jlc3VsdCwgcmVzdWx0T3BlcmFuZCwg
Y29uc3RhbnROYU4oKSk7CisgICAgICAgIHNldChyZXN1bHRPcGVyYW5kLCBjb25zdGFudE5hTigp
KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgICAKICAgICBpZiAoYXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXMgPT0gMikgeyAvLyBNYXRoLm1pbih4KQogICAgICAgICBOb2RlKiBy
ZXN1bHQgPSBnZXQocmVnaXN0ZXJPZmZzZXQgKyBhcmd1bWVudFRvT3BlcmFuZCgxKSk7CiAgICAg
ICAgIGFkZFRvR3JhcGgoUGhhbnRvbSwgRWRnZShyZXN1bHQsIE51bWJlclVzZSkpOwotICAgICAg
ICBzZXRJbnRyaW5zaWNSZXN1bHQodXNlc1Jlc3VsdCwgcmVzdWx0T3BlcmFuZCwgcmVzdWx0KTsK
KyAgICAgICAgc2V0KHJlc3VsdE9wZXJhbmQsIHJlc3VsdCk7CiAgICAgICAgIHJldHVybiB0cnVl
OwogICAgIH0KICAgICAKICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPT0gMykg
eyAvLyBNYXRoLm1pbih4LCB5KQotICAgICAgICBzZXRJbnRyaW5zaWNSZXN1bHQodXNlc1Jlc3Vs
dCwgcmVzdWx0T3BlcmFuZCwgYWRkVG9HcmFwaChvcCwgZ2V0KHJlZ2lzdGVyT2Zmc2V0ICsgYXJn
dW1lbnRUb09wZXJhbmQoMSkpLCBnZXQocmVnaXN0ZXJPZmZzZXQgKyBhcmd1bWVudFRvT3BlcmFu
ZCgyKSkpKTsKKyAgICAgICAgc2V0KHJlc3VsdE9wZXJhbmQsIGFkZFRvR3JhcGgob3AsIGdldChy
ZWdpc3Rlck9mZnNldCArIGFyZ3VtZW50VG9PcGVyYW5kKDEpKSwgZ2V0KHJlZ2lzdGVyT2Zmc2V0
ICsgYXJndW1lbnRUb09wZXJhbmQoMikpKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
ICAgICAKQEAgLTE0OTMsMTIgKzE0NjAsMTIgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxl
TWluTWF4KGJvb2wgdQogCiAvLyBGSVhNRTogV2UgZGVhZC1jb2RlLWVsaW1pbmF0ZSB1bnVzZWQg
TWF0aCBpbnRyaW5zaWNzLCBidXQgdGhhdCdzIGludmFsaWQgYmVjYXVzZQogLy8gdGhleSBuZWVk
IHRvIHBlcmZvcm0gdGhlIFRvTnVtYmVyIGNvbnZlcnNpb24sIHdoaWNoIGNhbiBoYXZlIHNpZGUt
ZWZmZWN0cy4KLWJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpYyhib29sIHVzZXNS
ZXN1bHQsIGludCByZXN1bHRPcGVyYW5kLCBJbnRyaW5zaWMgaW50cmluc2ljLCBpbnQgcmVnaXN0
ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgU3BlY3VsYXRlZFR5cGUg
cHJlZGljdGlvbikKK2Jvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpYyhpbnQgcmVz
dWx0T3BlcmFuZCwgSW50cmluc2ljIGludHJpbnNpYywgaW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQg
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24pCiB7
CiAgICAgc3dpdGNoIChpbnRyaW5zaWMpIHsKICAgICBjYXNlIEFic0ludHJpbnNpYzogewogICAg
ICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPT0gMSkgeyAvLyBNYXRoLmFicygp
Ci0gICAgICAgICAgICBzZXRJbnRyaW5zaWNSZXN1bHQodXNlc1Jlc3VsdCwgcmVzdWx0T3BlcmFu
ZCwgY29uc3RhbnROYU4oKSk7CisgICAgICAgICAgICBzZXQocmVzdWx0T3BlcmFuZCwgY29uc3Rh
bnROYU4oKSk7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogCkBAIC0xNTA4
LDI2ICsxNDc1LDI2IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpYyhib28K
ICAgICAgICAgTm9kZSogbm9kZSA9IGFkZFRvR3JhcGgoQXJpdGhBYnMsIGdldChyZWdpc3Rlck9m
ZnNldCArIGFyZ3VtZW50VG9PcGVyYW5kKDEpKSk7CiAgICAgICAgIGlmIChtX2lubGluZVN0YWNr
VG9wLT5tX2V4aXRQcm9maWxlLmhhc0V4aXRTaXRlKG1fY3VycmVudEluZGV4LCBPdmVyZmxvdykp
CiAgICAgICAgICAgICBub2RlLT5tZXJnZUZsYWdzKE5vZGVNYXlPdmVyZmxvdyk7Ci0gICAgICAg
IHNldEludHJpbnNpY1Jlc3VsdCh1c2VzUmVzdWx0LCByZXN1bHRPcGVyYW5kLCBub2RlKTsKKyAg
ICAgICAgc2V0KHJlc3VsdE9wZXJhbmQsIG5vZGUpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAg
ICB9CiAKICAgICBjYXNlIE1pbkludHJpbnNpYzoKLSAgICAgICAgcmV0dXJuIGhhbmRsZU1pbk1h
eCh1c2VzUmVzdWx0LCByZXN1bHRPcGVyYW5kLCBBcml0aE1pbiwgcmVnaXN0ZXJPZmZzZXQsIGFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKTsKKyAgICAgICAgcmV0dXJuIGhhbmRsZU1pbk1heChy
ZXN1bHRPcGVyYW5kLCBBcml0aE1pbiwgcmVnaXN0ZXJPZmZzZXQsIGFyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzKTsKICAgICAgICAgCiAgICAgY2FzZSBNYXhJbnRyaW5zaWM6Ci0gICAgICAgIHJl
dHVybiBoYW5kbGVNaW5NYXgodXNlc1Jlc3VsdCwgcmVzdWx0T3BlcmFuZCwgQXJpdGhNYXgsIHJl
Z2lzdGVyT2Zmc2V0LCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyk7CisgICAgICAgIHJldHVy
biBoYW5kbGVNaW5NYXgocmVzdWx0T3BlcmFuZCwgQXJpdGhNYXgsIHJlZ2lzdGVyT2Zmc2V0LCBh
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyk7CiAgICAgICAgIAogICAgIGNhc2UgU3FydEludHJp
bnNpYzogewogICAgICAgICBpZiAoYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPT0gMSkgeyAv
LyBNYXRoLnNxcnQoKQotICAgICAgICAgICAgc2V0SW50cmluc2ljUmVzdWx0KHVzZXNSZXN1bHQs
IHJlc3VsdE9wZXJhbmQsIGNvbnN0YW50TmFOKCkpOworICAgICAgICAgICAgc2V0KHJlc3VsdE9w
ZXJhbmQsIGNvbnN0YW50TmFOKCkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAg
IH0KICAgICAgICAgCiAgICAgICAgIGlmICghTWFjcm9Bc3NlbWJsZXI6OnN1cHBvcnRzRmxvYXRp
bmdQb2ludFNxcnQoKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgCi0gICAg
ICAgIHNldEludHJpbnNpY1Jlc3VsdCh1c2VzUmVzdWx0LCByZXN1bHRPcGVyYW5kLCBhZGRUb0dy
YXBoKEFyaXRoU3FydCwgZ2V0KHJlZ2lzdGVyT2Zmc2V0ICsgYXJndW1lbnRUb09wZXJhbmQoMSkp
KSk7CisKKyAgICAgICAgc2V0KHJlc3VsdE9wZXJhbmQsIGFkZFRvR3JhcGgoQXJpdGhTcXJ0LCBn
ZXQocmVnaXN0ZXJPZmZzZXQgKyBhcmd1bWVudFRvT3BlcmFuZCgxKSkpKTsKICAgICAgICAgcmV0
dXJuIHRydWU7CiAgICAgfQogICAgICAgICAKQEAgLTE1MzUsNyArMTUwMiw3IEBAIGJvb2wgQnl0
ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpYyhib28KICAgICAgICAgaWYgKGFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzICE9IDIpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
IAotICAgICAgICBBcnJheU1vZGUgYXJyYXlNb2RlID0gZ2V0QXJyYXlNb2RlKG1fY3VycmVudElu
c3RydWN0aW9uWzVdLnUuYXJyYXlQcm9maWxlKTsKKyAgICAgICAgQXJyYXlNb2RlIGFycmF5TW9k
ZSA9IGdldEFycmF5TW9kZShtX2N1cnJlbnRJbnN0cnVjdGlvbls2XS51LmFycmF5UHJvZmlsZSk7
CiAgICAgICAgIGlmICghYXJyYXlNb2RlLmlzSlNBcnJheSgpKQogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgICBzd2l0Y2ggKGFycmF5TW9kZS50eXBlKCkpIHsKQEAgLTE1NDUsOCAr
MTUxMiw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpYyhib28KICAgICAg
ICAgY2FzZSBBcnJheTo6Q29udGlndW91czoKICAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9y
YWdlOiB7CiAgICAgICAgICAgICBOb2RlKiBhcnJheVB1c2ggPSBhZGRUb0dyYXBoKEFycmF5UHVz
aCwgT3BJbmZvKGFycmF5TW9kZS5hc1dvcmQoKSksIE9wSW5mbyhwcmVkaWN0aW9uKSwgZ2V0KHJl
Z2lzdGVyT2Zmc2V0ICsgYXJndW1lbnRUb09wZXJhbmQoMCkpLCBnZXQocmVnaXN0ZXJPZmZzZXQg
KyBhcmd1bWVudFRvT3BlcmFuZCgxKSkpOwotICAgICAgICAgICAgaWYgKHVzZXNSZXN1bHQpCi0g
ICAgICAgICAgICAgICAgc2V0KHJlc3VsdE9wZXJhbmQsIGFycmF5UHVzaCk7CisgICAgICAgICAg
ICBzZXQocmVzdWx0T3BlcmFuZCwgYXJyYXlQdXNoKTsKICAgICAgICAgICAgIAogICAgICAgICAg
ICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KQEAgLTE1NjAsNyArMTUyNiw3IEBAIGJvb2wgQnl0
ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpYyhib28KICAgICAgICAgaWYgKGFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzICE9IDEpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
IAotICAgICAgICBBcnJheU1vZGUgYXJyYXlNb2RlID0gZ2V0QXJyYXlNb2RlKG1fY3VycmVudElu
c3RydWN0aW9uWzVdLnUuYXJyYXlQcm9maWxlKTsKKyAgICAgICAgQXJyYXlNb2RlIGFycmF5TW9k
ZSA9IGdldEFycmF5TW9kZShtX2N1cnJlbnRJbnN0cnVjdGlvbls2XS51LmFycmF5UHJvZmlsZSk7
CiAgICAgICAgIGlmICghYXJyYXlNb2RlLmlzSlNBcnJheSgpKQogICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgICAgICBzd2l0Y2ggKGFycmF5TW9kZS50eXBlKCkpIHsKQEAgLTE1NjksOCAr
MTUzNSw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpYyhib28KICAgICAg
ICAgY2FzZSBBcnJheTo6Q29udGlndW91czoKICAgICAgICAgY2FzZSBBcnJheTo6QXJyYXlTdG9y
YWdlOiB7CiAgICAgICAgICAgICBOb2RlKiBhcnJheVBvcCA9IGFkZFRvR3JhcGgoQXJyYXlQb3As
IE9wSW5mbyhhcnJheU1vZGUuYXNXb3JkKCkpLCBPcEluZm8ocHJlZGljdGlvbiksIGdldChyZWdp
c3Rlck9mZnNldCArIGFyZ3VtZW50VG9PcGVyYW5kKDApKSk7Ci0gICAgICAgICAgICBpZiAodXNl
c1Jlc3VsdCkKLSAgICAgICAgICAgICAgICBzZXQocmVzdWx0T3BlcmFuZCwgYXJyYXlQb3ApOwor
ICAgICAgICAgICAgc2V0KHJlc3VsdE9wZXJhbmQsIGFycmF5UG9wKTsKICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgICAgICB9CiAgICAgICAgICAgICAKQEAgLTE1ODcsOCArMTU1Miw3IEBA
IGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNpYyhib28KICAgICAgICAgaW50IGlu
ZGV4T3BlcmFuZCA9IHJlZ2lzdGVyT2Zmc2V0ICsgYXJndW1lbnRUb09wZXJhbmQoMSk7CiAgICAg
ICAgIE5vZGUqIGNoYXJDb2RlID0gYWRkVG9HcmFwaChTdHJpbmdDaGFyQ29kZUF0LCBPcEluZm8o
QXJyYXlNb2RlKEFycmF5OjpTdHJpbmcpLmFzV29yZCgpKSwgZ2V0KHRoaXNPcGVyYW5kKSwgZ2V0
VG9JbnQzMihpbmRleE9wZXJhbmQpKTsKIAotICAgICAgICBpZiAodXNlc1Jlc3VsdCkKLSAgICAg
ICAgICAgIHNldChyZXN1bHRPcGVyYW5kLCBjaGFyQ29kZSk7CisgICAgICAgIHNldChyZXN1bHRP
cGVyYW5kLCBjaGFyQ29kZSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KIApAQCAtMTYw
MCw4ICsxNTY0LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50cmluc2ljKGJvbwog
ICAgICAgICBpbnQgaW5kZXhPcGVyYW5kID0gcmVnaXN0ZXJPZmZzZXQgKyBhcmd1bWVudFRvT3Bl
cmFuZCgxKTsKICAgICAgICAgTm9kZSogY2hhckNvZGUgPSBhZGRUb0dyYXBoKFN0cmluZ0NoYXJB
dCwgT3BJbmZvKEFycmF5TW9kZShBcnJheTo6U3RyaW5nKS5hc1dvcmQoKSksIGdldCh0aGlzT3Bl
cmFuZCksIGdldFRvSW50MzIoaW5kZXhPcGVyYW5kKSk7CiAKLSAgICAgICAgaWYgKHVzZXNSZXN1
bHQpCi0gICAgICAgICAgICBzZXQocmVzdWx0T3BlcmFuZCwgY2hhckNvZGUpOworICAgICAgICBz
ZXQocmVzdWx0T3BlcmFuZCwgY2hhckNvZGUpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9
CiAKQEAgLTE2MTAsOCArMTU3Myw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJp
bnNpYyhib28KICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgCiAgICAgICAgIE5v
ZGUqIHJlZ0V4cEV4ZWMgPSBhZGRUb0dyYXBoKFJlZ0V4cEV4ZWMsIE9wSW5mbygwKSwgT3BJbmZv
KHByZWRpY3Rpb24pLCBnZXQocmVnaXN0ZXJPZmZzZXQgKyBhcmd1bWVudFRvT3BlcmFuZCgwKSks
IGdldChyZWdpc3Rlck9mZnNldCArIGFyZ3VtZW50VG9PcGVyYW5kKDEpKSk7Ci0gICAgICAgIGlm
ICh1c2VzUmVzdWx0KQotICAgICAgICAgICAgc2V0KHJlc3VsdE9wZXJhbmQsIHJlZ0V4cEV4ZWMp
OworICAgICAgICBzZXQocmVzdWx0T3BlcmFuZCwgcmVnRXhwRXhlYyk7CiAgICAgICAgIAogICAg
ICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CkBAIC0xNjIxLDggKzE1ODMsNyBAQCBib29sIEJ5dGVD
b2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5zaWMoYm9vCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgICAgIAogICAgICAgICBOb2RlKiByZWdFeHBFeGVjID0gYWRkVG9HcmFwaChSZWdFeHBU
ZXN0LCBPcEluZm8oMCksIE9wSW5mbyhwcmVkaWN0aW9uKSwgZ2V0KHJlZ2lzdGVyT2Zmc2V0ICsg
YXJndW1lbnRUb09wZXJhbmQoMCkpLCBnZXQocmVnaXN0ZXJPZmZzZXQgKyBhcmd1bWVudFRvT3Bl
cmFuZCgxKSkpOwotICAgICAgICBpZiAodXNlc1Jlc3VsdCkKLSAgICAgICAgICAgIHNldChyZXN1
bHRPcGVyYW5kLCByZWdFeHBFeGVjKTsKKyAgICAgICAgc2V0KHJlc3VsdE9wZXJhbmQsIHJlZ0V4
cEV4ZWMpOwogICAgICAgICAKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtMTYzMyw3
ICsxNTk0LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50cmluc2ljKGJvbwogfQog
CiBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVDb25zdGFudEludGVybmFsRnVuY3Rpb24oCi0g
ICAgYm9vbCB1c2VzUmVzdWx0LCBpbnQgcmVzdWx0T3BlcmFuZCwgSW50ZXJuYWxGdW5jdGlvbiog
ZnVuY3Rpb24sIGludCByZWdpc3Rlck9mZnNldCwKKyAgICBpbnQgcmVzdWx0T3BlcmFuZCwgSW50
ZXJuYWxGdW5jdGlvbiogZnVuY3Rpb24sIGludCByZWdpc3Rlck9mZnNldCwKICAgICBpbnQgYXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24sIENvZGVT
cGVjaWFsaXphdGlvbktpbmQga2luZCkKIHsKICAgICAvLyBJZiB3ZSBldmVyIGZpbmQgdGhhdCB3
ZSBoYXZlIGEgbG90IG9mIGludGVybmFsIGZ1bmN0aW9ucyB0aGF0IHdlIHNwZWNpYWxpemUgZm9y
LApAQCAtMTY0NywxNiArMTYwOCwxNCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVDb25z
dGFudEludGVyCiAgICAgCiAgICAgaWYgKGZ1bmN0aW9uLT5jbGFzc0luZm8oKSA9PSAmQXJyYXlD
b25zdHJ1Y3Rvcjo6c19pbmZvKSB7CiAgICAgICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5n
VGhpcyA9PSAyKSB7Ci0gICAgICAgICAgICBzZXRJbnRyaW5zaWNSZXN1bHQoCi0gICAgICAgICAg
ICAgICAgdXNlc1Jlc3VsdCwgcmVzdWx0T3BlcmFuZCwKKyAgICAgICAgICAgIHNldChyZXN1bHRP
cGVyYW5kLAogICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoTmV3QXJyYXlXaXRoU2l6ZSwgT3BJ
bmZvKEFycmF5V2l0aFVuZGVjaWRlZCksIGdldChyZWdpc3Rlck9mZnNldCArIGFyZ3VtZW50VG9P
cGVyYW5kKDEpKSkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICAg
ICAgCiAgICAgICAgIGZvciAoaW50IGkgPSAxOyBpIDwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXM7ICsraSkKICAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKGdldChyZWdpc3Rlck9mZnNldCAr
IGFyZ3VtZW50VG9PcGVyYW5kKGkpKSk7Ci0gICAgICAgIHNldEludHJpbnNpY1Jlc3VsdCgKLSAg
ICAgICAgICAgIHVzZXNSZXN1bHQsIHJlc3VsdE9wZXJhbmQsCisgICAgICAgIHNldChyZXN1bHRP
cGVyYW5kLAogICAgICAgICAgICAgYWRkVG9HcmFwaChOb2RlOjpWYXJBcmcsIE5ld0FycmF5LCBP
cEluZm8oQXJyYXlXaXRoVW5kZWNpZGVkKSwgT3BJbmZvKDApKSk7CiAgICAgICAgIHJldHVybiB0
cnVlOwogICAgIH0gZWxzZSBpZiAoZnVuY3Rpb24tPmNsYXNzSW5mbygpID09ICZTdHJpbmdDb25z
dHJ1Y3Rvcjo6c19pbmZvKSB7CkBAIC0xNjcwLDcgKzE2MjksNyBAQCBib29sIEJ5dGVDb2RlUGFy
c2VyOjpoYW5kbGVDb25zdGFudEludGVyCiAgICAgICAgIGlmIChraW5kID09IENvZGVGb3JDb25z
dHJ1Y3QpCiAgICAgICAgICAgICByZXN1bHQgPSBhZGRUb0dyYXBoKE5ld1N0cmluZ09iamVjdCwg
T3BJbmZvKGZ1bmN0aW9uLT5nbG9iYWxPYmplY3QoKS0+c3RyaW5nT2JqZWN0U3RydWN0dXJlKCkp
LCByZXN1bHQpOwogICAgICAgICAKLSAgICAgICAgc2V0SW50cmluc2ljUmVzdWx0KHVzZXNSZXN1
bHQsIHJlc3VsdE9wZXJhbmQsIHJlc3VsdCk7CisgICAgICAgIHNldChyZXN1bHRPcGVyYW5kLCBy
ZXN1bHQpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgCkBAIC0xOTgxLDggKzE5
NDAsNiBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgfQog
CiAgICAgd2hpbGUgKHRydWUpIHsKLSAgICAgICAgbV9jdXJyZW50UHJvZmlsaW5nSW5kZXggPSBt
X2N1cnJlbnRJbmRleDsKLQogICAgICAgICAvLyBEb24ndCBleHRlbmQgb3ZlciBqdW1wIGRlc3Rp
bmF0aW9ucy4KICAgICAgICAgaWYgKG1fY3VycmVudEluZGV4ID09IGxpbWl0KSB7CiAgICAgICAg
ICAgICAvLyBPcmRpbmFyaWx5IHdlIHdhbnQgdG8gcGxhbnQgYSBqdW1wLiBCdXQgcmVmdXNlIHRv
IGRvIHRoaXMgaWYgdGhlIGJsb2NrIGlzCkBAIC0yMDA3LDcgKzE5NjQsNyBAQCBib29sIEJ5dGVD
b2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgIG1fY3VycmVudEluc3RydWN0
aW9uID0gY3VycmVudEluc3RydWN0aW9uOyAvLyBTb21lIG1ldGhvZHMgd2FudCB0byB1c2UgdGhp
cywgYW5kIHdlJ2QgcmF0aGVyIG5vdCB0aHJlYWQgaXQgdGhyb3VnaCBjYWxscy4KICAgICAgICAg
T3Bjb2RlSUQgb3Bjb2RlSUQgPSBpbnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQoY3VycmVudEluc3Ry
dWN0aW9uLT51Lm9wY29kZSk7CiAgICAgICAgIAotICAgICAgICBpZiAobV9ncmFwaC5jb21waWxh
dGlvbigpICYmIG9wY29kZUlEICE9IG9wX2NhbGxfcHV0X3Jlc3VsdCkgeworICAgICAgICBpZiAo
bV9ncmFwaC5jb21waWxhdGlvbigpKSB7CiAgICAgICAgICAgICBhZGRUb0dyYXBoKENvdW50RXhl
Y3V0aW9uLCBPcEluZm8obV9ncmFwaC5jb21waWxhdGlvbigpLT5leGVjdXRpb25Db3VudGVyRm9y
KAogICAgICAgICAgICAgICAgIFByb2ZpbGVyOjpPcmlnaW5TdGFjaygqbV92bS0+bV9wZXJCeXRl
Y29kZVByb2ZpbGVyLCBtX2NvZGVCbG9jaywgY3VycmVudENvZGVPcmlnaW4oKSkpKSk7CiAgICAg
ICAgIH0KQEAgLTIwMjcsMTAgKzE5ODQsMTAgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VC
bG9jayh1bnNpZ25lZAogICAgICAgICAgICAgaWYgKG9wMS0+b3AoKSAhPSBUb1RoaXMpIHsKICAg
ICAgICAgICAgICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2lubGluZVN0YWNrVG9w
LT5tX3Byb2ZpbGVkQmxvY2stPm1fbG9jayk7CiAgICAgICAgICAgICAgICAgVmFsdWVQcm9maWxl
KiBwcm9maWxlID0KLSAgICAgICAgICAgICAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9m
aWxlZEJsb2NrLT52YWx1ZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChtX2N1cnJlbnRQcm9maWxp
bmdJbmRleCk7CisgICAgICAgICAgICAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmls
ZWRCbG9jay0+dmFsdWVQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQobV9jdXJyZW50SW5kZXgpOwog
ICAgICAgICAgICAgICAgIHByb2ZpbGUtPmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihsb2NrZXIp
OwogI2lmIERGR19FTkFCTEUoREVCVUdfVkVSQk9TRSkKLSAgICAgICAgICAgICAgICBkYXRhTG9n
RigiW2JjIyV1XTogcHJvZmlsZSAlcDogIiwgbV9jdXJyZW50UHJvZmlsaW5nSW5kZXgsIHByb2Zp
bGUpOworICAgICAgICAgICAgICAgIGRhdGFMb2dGKCJbYmMjJXVdOiBwcm9maWxlICVwOiAiLCBt
X2N1cnJlbnRJbmRleCwgcHJvZmlsZSk7CiAgICAgICAgICAgICAgICAgcHJvZmlsZS0+ZHVtcChX
VEY6OmRhdGFGaWxlKCkpOwogICAgICAgICAgICAgICAgIGRhdGFMb2dGKCJcbiIpOwogI2VuZGlm
CkBAIC0zMDAyLDggKzI5NTksOCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVu
c2lnbmVkCiAgICAgICAgIGNhc2Ugb3BfcmV0OgogICAgICAgICAgICAgZmx1c2hBcmd1bWVudHNB
bmRDYXB0dXJlZFZhcmlhYmxlcygpOwogICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZSgp
KSB7Ci0gICAgICAgICAgICAgICAgaWYgKG1faW5saW5lU3RhY2tUb3AtPm1fcmV0dXJuVmFsdWUg
IT0gSW52YWxpZFZpcnR1YWxSZWdpc3RlcikKLSAgICAgICAgICAgICAgICAgICAgc2V0RGlyZWN0
KG1faW5saW5lU3RhY2tUb3AtPm1fcmV0dXJuVmFsdWUsIGdldChjdXJyZW50SW5zdHJ1Y3Rpb25b
MV0udS5vcGVyYW5kKSk7CisgICAgICAgICAgICAgICAgQVNTRVJUKG1faW5saW5lU3RhY2tUb3At
Pm1fcmV0dXJuVmFsdWUgIT0gSW52YWxpZFZpcnR1YWxSZWdpc3Rlcik7CisgICAgICAgICAgICAg
ICAgc2V0RGlyZWN0KG1faW5saW5lU3RhY2tUb3AtPm1fcmV0dXJuVmFsdWUsIGdldChjdXJyZW50
SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSk7CiAgICAgICAgICAgICAgICAgbV9pbmxpbmVTdGFj
a1RvcC0+bV9kaWRSZXR1cm4gPSB0cnVlOwogICAgICAgICAgICAgICAgIGlmIChtX2lubGluZVN0
YWNrVG9wLT5tX3VubGlua2VkQmxvY2tzLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgICAgICAg
ICAvLyBJZiB3ZSdyZSByZXR1cm5pbmcgZnJvbSB0aGUgZmlyc3QgYmxvY2ssIHRoZW4gd2UncmUg
ZG9uZSBwYXJzaW5nLgpAQCAtMzA0NCwyOSArMzAwMSwyMyBAQCBib29sIEJ5dGVDb2RlUGFyc2Vy
OjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICBMQVNUX09QQ09ERShvcF90aHJvd19z
dGF0aWNfZXJyb3IpOwogICAgICAgICAgICAgCiAgICAgICAgIGNhc2Ugb3BfY2FsbDoKLSAgICAg
ICAgICAgIGhhbmRsZUNhbGwoaW50ZXJwcmV0ZXIsIGN1cnJlbnRJbnN0cnVjdGlvbiwgQ2FsbCwg
Q29kZUZvckNhbGwpOworICAgICAgICAgICAgaGFuZGxlQ2FsbChjdXJyZW50SW5zdHJ1Y3Rpb24s
IENhbGwsIENvZGVGb3JDYWxsKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2NhbGwpOwog
ICAgICAgICAgICAgCiAgICAgICAgIGNhc2Ugb3BfY29uc3RydWN0OgotICAgICAgICAgICAgaGFu
ZGxlQ2FsbChpbnRlcnByZXRlciwgY3VycmVudEluc3RydWN0aW9uLCBDb25zdHJ1Y3QsIENvZGVG
b3JDb25zdHJ1Y3QpOworICAgICAgICAgICAgaGFuZGxlQ2FsbChjdXJyZW50SW5zdHJ1Y3Rpb24s
IENvbnN0cnVjdCwgQ29kZUZvckNvbnN0cnVjdCk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShv
cF9jb25zdHJ1Y3QpOwogICAgICAgICAgICAgCiAgICAgICAgIGNhc2Ugb3BfY2FsbF92YXJhcmdz
OiB7CiAgICAgICAgICAgICBBU1NFUlQoaW5saW5lQ2FsbEZyYW1lKCkpOwotICAgICAgICAgICAg
QVNTRVJUKGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQgPT0gbV9pbmxpbmVTdGFja1Rv
cC0+bV9jb2RlQmxvY2stPmFyZ3VtZW50c1JlZ2lzdGVyKCkpOworICAgICAgICAgICAgQVNTRVJU
KGN1cnJlbnRJbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQgPT0gbV9pbmxpbmVTdGFja1RvcC0+bV9j
b2RlQmxvY2stPmFyZ3VtZW50c1JlZ2lzdGVyKCkpOwogICAgICAgICAgICAgQVNTRVJUKCFtX2lu
bGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+c3ltYm9sVGFibGUoKS0+c2xvd0FyZ3VtZW50cygp
KTsKICAgICAgICAgICAgIC8vIEl0IHdvdWxkIGJlIGNvb2wgdG8gZnVubmVsIHRoaXMgaW50byBo
YW5kbGVDYWxsKCkgc28gdGhhdCBpdCBjYW4gaGFuZGxlCiAgICAgICAgICAgICAvLyBpbmxpbmlu
Zy4gQnV0IGN1cnJlbnRseSB0aGF0IHdvbid0IGJlIHByb2ZpdGFibGUgYW55d2F5LCBzaW5jZSBu
b25lIG9mIHRoZQogICAgICAgICAgICAgLy8gdXNlcyBvZiBjYWxsX3ZhcmFyZ3Mgd2lsbCBiZSBp
bmxpbmVhYmxlLiBTbyB3ZSBzZXQgdGhpcyB1cCBtYW51YWxseSBhbmQKICAgICAgICAgICAgIC8v
IHdpdGhvdXQgaW5saW5lL2ludHJpbnNpYyBkZXRlY3Rpb24uCiAgICAgICAgICAgICAKLSAgICAg
ICAgICAgIEluc3RydWN0aW9uKiBwdXRJbnN0cnVjdGlvbiA9IGN1cnJlbnRJbnN0cnVjdGlvbiAr
IE9QQ09ERV9MRU5HVEgob3BfY2FsbF92YXJhcmdzKTsKLSAgICAgICAgICAgIAotICAgICAgICAg
ICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IFNwZWNOb25lOwotICAgICAgICAgICAgaWYg
KGludGVycHJldGVyLT5nZXRPcGNvZGVJRChwdXRJbnN0cnVjdGlvbi0+dS5vcGNvZGUpID09IG9w
X2NhbGxfcHV0X3Jlc3VsdCkgewotICAgICAgICAgICAgICAgIG1fY3VycmVudFByb2ZpbGluZ0lu
ZGV4ID0gbV9jdXJyZW50SW5kZXggKyBPUENPREVfTEVOR1RIKG9wX2NhbGxfdmFyYXJncyk7Ci0g
ICAgICAgICAgICAgICAgcHJlZGljdGlvbiA9IGdldFByZWRpY3Rpb24oKTsKLSAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSBnZXRQcmVkaWN0aW9u
KCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIGFkZFRvR3JhcGgoQ2hlY2tBcmd1bWVudHNO
b3RDcmVhdGVkKTsKICAgICAgICAgICAgIApAQCAtMzA3NCwyMSArMzAyNSwxNyBAQCBib29sIEJ5
dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICBpZiAoSlNTdGFj
azo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSArIGFyZ0NvdW50ID4gbV9wYXJhbWV0ZXJTbG90cykKICAg
ICAgICAgICAgICAgICBtX3BhcmFtZXRlclNsb3RzID0gSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVy
U2l6ZSArIGFyZ0NvdW50OwogICAgICAgICAgICAgCi0gICAgICAgICAgICBhZGRWYXJBcmdDaGls
ZChnZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCkpOyAvLyBjYWxsZWUKLSAgICAg
ICAgICAgIGFkZFZhckFyZ0NoaWxkKGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5k
KSk7IC8vIHRoaXMKKyAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKGdldChjdXJyZW50SW5zdHJ1
Y3Rpb25bMl0udS5vcGVyYW5kKSk7IC8vIGNhbGxlZQorICAgICAgICAgICAgYWRkVmFyQXJnQ2hp
bGQoZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmQpKTsgLy8gdGhpcwogICAgICAg
ICAgICAgZm9yICh1bnNpZ25lZCBhcmd1bWVudCA9IDE7IGFyZ3VtZW50IDwgYXJnQ291bnQ7ICsr
YXJndW1lbnQpCiAgICAgICAgICAgICAgICAgYWRkVmFyQXJnQ2hpbGQoZ2V0KGFyZ3VtZW50VG9P
cGVyYW5kKGFyZ3VtZW50KSkpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBOb2RlKiBjYWxs
ID0gYWRkVG9HcmFwaChOb2RlOjpWYXJBcmcsIENhbGwsIE9wSW5mbygwKSwgT3BJbmZvKHByZWRp
Y3Rpb24pKTsKLSAgICAgICAgICAgIGlmIChpbnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQocHV0SW5z
dHJ1Y3Rpb24tPnUub3Bjb2RlKSA9PSBvcF9jYWxsX3B1dF9yZXN1bHQpCi0gICAgICAgICAgICAg
ICAgc2V0KHB1dEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwgY2FsbCk7CisgICAgICAgICAgICBz
ZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCwKKyAgICAgICAgICAgICAgICBhZGRU
b0dyYXBoKE5vZGU6OlZhckFyZywgQ2FsbCwgT3BJbmZvKDApLCBPcEluZm8ocHJlZGljdGlvbikp
KTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfY2FsbF92YXJhcmdz
KTsKICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgIGNhc2Ugb3BfY2FsbF9wdXRfcmVz
dWx0OgotICAgICAgICAgICAgTkVYVF9PUENPREUob3BfY2FsbF9wdXRfcmVzdWx0KTsKLSAgICAg
ICAgICAgIAogICAgICAgICBjYXNlIG9wX2puZXFfcHRyOgogICAgICAgICAgICAgLy8gU3RhdGlj
YWxseSBzcGVjdWxhdGUgZm9yIG5vdy4gSXQgbWFrZXMgc2Vuc2UgdG8gbGV0IHNwZWN1bGF0ZS1v
bmx5IGpuZXFfcHRyCiAgICAgICAgICAgICAvLyBzdXBwb3J0IHNpbW1lciBmb3IgYSB3aGlsZSBi
ZWZvcmUgbWFraW5nIGl0IG1vcmUgZ2VuZXJhbCwgc2luY2UgaXQncwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcAkocmV2aXNpb24gMTUxMDA1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xODQsNyArMTg0LDYgQEAgQ2FwYWJpbGl0eUxldmVsIGNhcGFiaWxpdHlM
ZXZlbChPcGNvZGVJRAogICAgIGNhc2Ugb3BfbG9vcF9oaW50OgogICAgIGNhc2Ugb3BfcmV0Ogog
ICAgIGNhc2Ugb3BfZW5kOgotICAgIGNhc2Ugb3BfY2FsbF9wdXRfcmVzdWx0OgogICAgIGNhc2Ug
b3BfbmV3X29iamVjdDoKICAgICBjYXNlIG9wX25ld19hcnJheToKICAgICBjYXNlIG9wX25ld19h
cnJheV93aXRoX3NpemU6CkBAIC0yMDgsNyArMjA3LDcgQEAgQ2FwYWJpbGl0eUxldmVsIGNhcGFi
aWxpdHlMZXZlbChPcGNvZGVJRAogICAgICAgICByZXR1cm4gQ2FuQ29tcGlsZUFuZElubGluZTsK
ICAgICAgICAgCiAgICAgY2FzZSBvcF9jYWxsX3ZhcmFyZ3M6Ci0gICAgICAgIGlmIChjb2RlQmxv
Y2stPnVzZXNBcmd1bWVudHMoKSAmJiBwY1szXS51Lm9wZXJhbmQgPT0gY29kZUJsb2NrLT5hcmd1
bWVudHNSZWdpc3RlcigpKQorICAgICAgICBpZiAoY29kZUJsb2NrLT51c2VzQXJndW1lbnRzKCkg
JiYgcGNbNF0udS5vcGVyYW5kID09IGNvZGVCbG9jay0+YXJndW1lbnRzUmVnaXN0ZXIoKSkKICAg
ICAgICAgICAgIHJldHVybiBDYW5JbmxpbmU7CiAgICAgICAgIHJldHVybiBDYW5ub3RDb21waWxl
OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29t
cGlsZXIuY3BwCShyZXZpc2lvbiAxNTEwMDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09TUkV4aXRDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMSw4ICsxMDEsOCBA
QCB2b2lkIGNvbXBpbGVPU1JFeGl0KEV4ZWNTdGF0ZSogZXhlYykKICAgICAgICAgZXhpdC5tX2Nv
ZGUgPSBGSU5BTElaRV9DT0RFX0lGKAogICAgICAgICAgICAgc2hvdWxkU2hvd0Rpc2Fzc2VtYmx5
KCksCiAgICAgICAgICAgICBwYXRjaEJ1ZmZlciwKLSAgICAgICAgICAgICgiREZHIE9TUiBleGl0
ICMldSAoYmMjJXUsICVzKSBmcm9tICVzIiwKLSAgICAgICAgICAgICAgICBleGl0SW5kZXgsIGV4
aXQubV9jb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgsCisgICAgICAgICAgICAoIkRGRyBPU1IgZXhp
dCAjJXUgKCVzLCAlcykgZnJvbSAlcyIsCisgICAgICAgICAgICAgICAgZXhpdEluZGV4LCB0b0NT
dHJpbmcoZXhpdC5tX2NvZGVPcmlnaW4pLmRhdGEoKSwKICAgICAgICAgICAgICAgICBleGl0S2lu
ZFRvU3RyaW5nKGV4aXQubV9raW5kKSwgdG9DU3RyaW5nKCpjb2RlQmxvY2spLmRhdGEoKSkpOwog
ICAgIH0KICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENv
bXBpbGVyQ29tbW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAJKHJldmlzaW9uIDE1MTAwNSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNzYsNyArNzYsNiBAQCB2b2lkIGhhbmRsZUV4aXRDb3VudHMoQ0NhbGxIZWxw
ZXJzJiBqaXQsCiAKIHZvaWQgcmVpZnlJbmxpbmVkQ2FsbEZyYW1lcyhDQ2FsbEhlbHBlcnMmIGpp
dCwgY29uc3QgT1NSRXhpdEJhc2UmIGV4aXQpCiB7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKICAgICBB
U1NFUlQoaml0LmJhc2VsaW5lQ29kZUJsb2NrKCktPmppdFR5cGUoKSA9PSBKSVRDb2RlOjpCYXNl
bGluZUpJVCk7CiAgICAgaml0LnN0b3JlUHRyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbVB0
cihqaXQuYmFzZWxpbmVDb2RlQmxvY2soKSksIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0Zvcigo
VmlydHVhbFJlZ2lzdGVyKUpTU3RhY2s6OkNvZGVCbG9jaykpOwogICAgIApAQCAtODQsMTUgKzgz
LDEyIEBAIHZvaWQgcmVpZnlJbmxpbmVkQ2FsbEZyYW1lcyhDQ2FsbEhlbHBlcnMKICAgICAgICAg
SW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBjb2RlT3JpZ2luLmlubGluZUNhbGxG
cmFtZTsKICAgICAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jayA9IGppdC5iYXNlbGlu
ZUNvZGVCbG9ja0Zvcihjb2RlT3JpZ2luKTsKICAgICAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNv
ZGVCbG9ja0ZvckNhbGxlciA9IGppdC5iYXNlbGluZUNvZGVCbG9ja0ZvcihpbmxpbmVDYWxsRnJh
bWUtPmNhbGxlcik7Ci0gICAgICAgIFZlY3RvcjxCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ+JiBk
ZWNvZGVkQ29kZU1hcCA9IGppdC5kZWNvZGVkQ29kZU1hcEZvcihiYXNlbGluZUNvZGVCbG9ja0Zv
ckNhbGxlcik7Ci0gICAgICAgIHVuc2lnbmVkIHJldHVybkJ5dGVjb2RlSW5kZXggPSBpbmxpbmVD
YWxsRnJhbWUtPmNhbGxlci5ieXRlY29kZUluZGV4ICsgT1BDT0RFX0xFTkdUSChvcF9jYWxsKTsK
LSAgICAgICAgQnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0KiBtYXBwaW5nID0gYmluYXJ5U2VhcmNo
PEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldCwgdW5zaWduZWQ+KGRlY29kZWRDb2RlTWFwLCBkZWNv
ZGVkQ29kZU1hcC5zaXplKCksIHJldHVybkJ5dGVjb2RlSW5kZXgsIEJ5dGVjb2RlQW5kTWFjaGlu
ZU9mZnNldDo6Z2V0Qnl0ZWNvZGVJbmRleCk7Ci0gICAgICAgIAotICAgICAgICBBU1NFUlQobWFw
cGluZyk7Ci0gICAgICAgIEFTU0VSVChtYXBwaW5nLT5tX2J5dGVjb2RlSW5kZXggPT0gcmV0dXJu
Qnl0ZWNvZGVJbmRleCk7CisgICAgICAgIHVuc2lnbmVkIGNhbGxCeXRlY29kZUluZGV4ID0gaW5s
aW5lQ2FsbEZyYW1lLT5jYWxsZXIuYnl0ZWNvZGVJbmRleDsKKyAgICAgICAgQ2FsbExpbmtJbmZv
JiBjYWxsTGlua0luZm8gPSBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+Z2V0Q2FsbExpbmtJ
bmZvKGNhbGxCeXRlY29kZUluZGV4KTsKICAgICAgICAgCi0gICAgICAgIHZvaWQqIGp1bXBUYXJn
ZXQgPSBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+aml0Q29kZSgpLT5leGVjdXRhYmxlQWRk
cmVzc0F0T2Zmc2V0KG1hcHBpbmctPm1fbWFjaGluZUNvZGVPZmZzZXQpOworICAgICAgICB2b2lk
KiBqdW1wVGFyZ2V0ID0gY2FsbExpbmtJbmZvLmNhbGxSZXR1cm5Mb2NhdGlvbi5leGVjdXRhYmxl
QWRkcmVzcygpOwogCisjaWYgVVNFKEpTVkFMVUU2NCkKICAgICAgICAgR1BSUmVnIGNhbGxlckZy
YW1lR1BSOwogICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5jYWxsZXIuaW5saW5lQ2FsbEZy
YW1lKSB7CiAgICAgICAgICAgICBqaXQuYWRkUHRyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZElt
bTMyKGlubGluZUNhbGxGcmFtZS0+Y2FsbGVyLmlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQg
KiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQ
UkluZm86OnJlZ1QzKTsKQEAgLTEwOCwyNCArMTA0LDcgQEAgdm9pZCByZWlmeUlubGluZWRDYWxs
RnJhbWVzKENDYWxsSGVscGVycwogICAgICAgICBqaXQuc3RvcmUzMihBc3NlbWJseUhlbHBlcnM6
OlRydXN0ZWRJbW0zMihpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCkpLCBBc3NlbWJs
eUhlbHBlcnM6OnBheWxvYWRGb3IoKFZpcnR1YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZyYW1lLT5z
dGFja09mZnNldCArIEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpKSk7CiAgICAgICAgIGlmICghaW5s
aW5lQ2FsbEZyYW1lLT5pc0Nsb3N1cmVDYWxsKCkpCiAgICAgICAgICAgICBqaXQuc3RvcmU2NChB
c3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoSlNWYWx1ZShpbmxp
bmVDYWxsRnJhbWUtPmNhbGxlZS5nZXQoKSkpKSwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9y
KChWaXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBKU1N0YWNr
OjpDYWxsZWUpKSk7Ci0gICAgfQogI2Vsc2UgLy8gVVNFKEpTVkFMVUU2NCkgLy8gc28gdGhpcyBp
cyB0aGUgMzItYml0IHBhcnQKLSAgICBBU1NFUlQoaml0LmJhc2VsaW5lQ29kZUJsb2NrKCktPmpp
dFR5cGUoKSA9PSBKSVRDb2RlOjpCYXNlbGluZUpJVCk7Ci0gICAgaml0LnN0b3JlUHRyKEFzc2Vt
Ymx5SGVscGVyczo6VHJ1c3RlZEltbVB0cihqaXQuYmFzZWxpbmVDb2RlQmxvY2soKSksIEFzc2Vt
Ymx5SGVscGVyczo6YWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKUpTU3RhY2s6OkNvZGVCbG9j
aykpOwotICAgIAotICAgIGZvciAoQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0gZXhpdC5tX2NvZGVP
cmlnaW47IGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lOyBjb2RlT3JpZ2luID0gY29kZU9yaWdp
bi5pbmxpbmVDYWxsRnJhbWUtPmNhbGxlcikgewotICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlu
bGluZUNhbGxGcmFtZSA9IGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lOwotICAgICAgICBDb2Rl
QmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrID0gaml0LmJhc2VsaW5lQ29kZUJsb2NrRm9yKGNvZGVP
cmlnaW4pOwotICAgICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyID0g
aml0LmJhc2VsaW5lQ29kZUJsb2NrRm9yKGlubGluZUNhbGxGcmFtZS0+Y2FsbGVyKTsKLSAgICAg
ICAgVmVjdG9yPEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldD4mIGRlY29kZWRDb2RlTWFwID0gaml0
LmRlY29kZWRDb2RlTWFwRm9yKGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyKTsKLSAgICAgICAg
dW5zaWduZWQgcmV0dXJuQnl0ZWNvZGVJbmRleCA9IGlubGluZUNhbGxGcmFtZS0+Y2FsbGVyLmJ5
dGVjb2RlSW5kZXggKyBPUENPREVfTEVOR1RIKG9wX2NhbGwpOwotICAgICAgICBCeXRlY29kZUFu
ZE1hY2hpbmVPZmZzZXQqIG1hcHBpbmcgPSBiaW5hcnlTZWFyY2g8Qnl0ZWNvZGVBbmRNYWNoaW5l
T2Zmc2V0LCB1bnNpZ25lZD4oZGVjb2RlZENvZGVNYXAsIGRlY29kZWRDb2RlTWFwLnNpemUoKSwg
cmV0dXJuQnl0ZWNvZGVJbmRleCwgQnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0OjpnZXRCeXRlY29k
ZUluZGV4KTsKLSAgICAgICAgCi0gICAgICAgIEFTU0VSVChtYXBwaW5nKTsKLSAgICAgICAgQVNT
RVJUKG1hcHBpbmctPm1fYnl0ZWNvZGVJbmRleCA9PSByZXR1cm5CeXRlY29kZUluZGV4KTsKLSAg
ICAgICAgCi0gICAgICAgIHZvaWQqIGp1bXBUYXJnZXQgPSBiYXNlbGluZUNvZGVCbG9ja0ZvckNh
bGxlci0+aml0Q29kZSgpLT5leGVjdXRhYmxlQWRkcmVzc0F0T2Zmc2V0KG1hcHBpbmctPm1fbWFj
aGluZUNvZGVPZmZzZXQpOwotCiAgICAgICAgIEdQUlJlZyBjYWxsZXJGcmFtZUdQUjsKICAgICAg
ICAgaWYgKGlubGluZUNhbGxGcmFtZS0+Y2FsbGVyLmlubGluZUNhbGxGcmFtZSkgewogICAgICAg
ICAgICAgaml0LmFkZDMyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKGlubGluZUNhbGxG
cmFtZS0+Y2FsbGVyLmlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKiBzaXplb2YoRW5jb2Rl
ZEpTVmFsdWUpKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OnJlZ1QzKTsK
QEAgLTE0NCw4ICsxMjMsOCBAQCB2b2lkIHJlaWZ5SW5saW5lZENhbGxGcmFtZXMoQ0NhbGxIZWxw
ZXJzCiAgICAgICAgIGppdC5zdG9yZTMyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKEpT
VmFsdWU6OkNlbGxUYWcpLCBBc3NlbWJseUhlbHBlcnM6OnRhZ0ZvcigoVmlydHVhbFJlZ2lzdGVy
KShpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgSlNTdGFjazo6Q2FsbGVlKSkpOwogICAg
ICAgICBpZiAoIWlubGluZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2FsbCgpKQogICAgICAgICAgICAg
aml0LnN0b3JlUHRyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbVB0cihpbmxpbmVDYWxsRnJh
bWUtPmNhbGxlZS5nZXQoKSksIEFzc2VtYmx5SGVscGVyczo6cGF5bG9hZEZvcigoVmlydHVhbFJl
Z2lzdGVyKShpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgSlNTdGFjazo6Q2FsbGVlKSkp
OwotICAgIH0KICNlbmRpZiAvLyBVU0UoSlNWQUxVRTY0KSAvLyBlbmRpbmcgdGhlICNlbHNlIHBh
cnQsIHNvIGRpcmVjdGx5IGFib3ZlIGlzIHRoZSAzMi1iaXQgcGFydAorICAgIH0KIH0KIAogdm9p
ZCBhZGp1c3RBbmRKdW1wVG9UYXJnZXQoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IE9TUkV4aXRC
YXNlJiBleGl0KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkocmV2aXNpb24gMTUx
MDA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yMzYsNyArMjM2LDcgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQog
ICAgICAgICAKICAgICAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBtX2ludGVycHJldGVyLT5nZXRP
cGNvZGVJRChjdXJyZW50SW5zdHJ1Y3Rpb24tPnUub3Bjb2RlKTsKIAotICAgICAgICBpZiAobV9j
b21waWxhdGlvbiAmJiBvcGNvZGVJRCAhPSBvcF9jYWxsX3B1dF9yZXN1bHQpIHsKKyAgICAgICAg
aWYgKG1fY29tcGlsYXRpb24pIHsKICAgICAgICAgICAgIGFkZDY0KAogICAgICAgICAgICAgICAg
IFRydXN0ZWRJbW0zMigxKSwKICAgICAgICAgICAgICAgICBBYnNvbHV0ZUFkZHJlc3MobV9jb21w
aWxhdGlvbi0+ZXhlY3V0aW9uQ291bnRlckZvcihQcm9maWxlcjo6T3JpZ2luU3RhY2soUHJvZmls
ZXI6Ok9yaWdpbigKQEAgLTM2Myw3ICszNjMsNiBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVN
YWluUGFzcygpCiAgICAgICAgIERFRklORV9PUChvcF9yZXNvbHZlX3dpdGhfYmFzZSkKICAgICAg
ICAgREVGSU5FX09QKG9wX3Jlc29sdmVfd2l0aF90aGlzKQogICAgICAgICBERUZJTkVfT1Aob3Bf
cmV0KQotICAgICAgICBERUZJTkVfT1Aob3BfY2FsbF9wdXRfcmVzdWx0KQogICAgICAgICBERUZJ
TkVfT1Aob3BfcmV0X29iamVjdF9vcl90aGlzKQogICAgICAgICBERUZJTkVfT1Aob3BfcnNoaWZ0
KQogICAgICAgICBERUZJTkVfT1Aob3BfdXJzaGlmdCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVQuaAkocmV2aXNpb24gMTUxMDA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQu
aAkod29ya2luZyBjb3B5KQpAQCAtNDMxLDggKzQzMSw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICB2b2lkIGNvbXBpbGVPcENhbGwoT3Bjb2RlSUQsIEluc3RydWN0aW9uKiwgdW5zaWduZWQg
Y2FsbExpbmtJbmZvSW5kZXgpOwogICAgICAgICB2b2lkIGNvbXBpbGVPcENhbGxTbG93Q2FzZShP
cGNvZGVJRCwgSW5zdHJ1Y3Rpb24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiwg
dW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpOwogICAgICAgICB2b2lkIGNvbXBpbGVMb2FkVmFy
YXJncyhJbnN0cnVjdGlvbiopOwotICAgICAgICB2b2lkIGNvbXBpbGVDYWxsRXZhbCgpOwotICAg
ICAgICB2b2lkIGNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6
aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBjb21waWxlQ2FsbEV2YWwoSW5zdHJ1Y3Rpb24qKTsK
KyAgICAgICAgdm9pZCBjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShJbnN0cnVjdGlvbiosIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImKTsKKyAgICAgICAgdm9pZCBlbWl0UHV0Q2FsbFJl
c3VsdChJbnN0cnVjdGlvbiopOwogCiAgICAgICAgIGVudW0gQ29tcGlsZU9wU3RyaWN0RXFUeXBl
IHsgT3BTdHJpY3RFcSwgT3BOU3RyaWN0RXEgfTsKICAgICAgICAgdm9pZCBjb21waWxlT3BTdHJp
Y3RFcShJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIENvbXBpbGVPcFN0cmljdEVxVHlwZSB0eXBl
KTsKQEAgLTY0Myw3ICs2NDQsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0
X29wX2NhbGwoSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2NhbGxfZXZhbChJ
bnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfY2FsbF92YXJhcmdzKEluc3RydWN0
aW9uKik7Ci0gICAgICAgIHZvaWQgZW1pdF9vcF9jYWxsX3B1dF9yZXN1bHQoSW5zdHJ1Y3Rpb24q
KTsKICAgICAgICAgdm9pZCBlbWl0X29wX2NhdGNoKEluc3RydWN0aW9uKik7CiAgICAgICAgIHZv
aWQgZW1pdF9vcF9jb25zdHJ1Y3QoSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29w
X2dldF9jYWxsZWUoSW5zdHJ1Y3Rpb24qKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUQ2FsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRDYWxsLmNwcAkocmV2aXNpb24gMTUxMDA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRDYWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsMjAgKzUxLDE4IEBAIHVzaW5nIG5h
bWVzcGFjZSBzdGQ7CiAKIG5hbWVzcGFjZSBKU0MgewogCi12b2lkIEpJVDo6ZW1pdF9vcF9jYWxs
X3B1dF9yZXN1bHQoSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQordm9pZCBKSVQ6OmVtaXRQdXRD
YWxsUmVzdWx0KEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbikKIHsKICAgICBpbnQgZHN0ID0gaW5z
dHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwogICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoKTsKICAg
ICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVyKGRzdCk7Ci0gICAgaWYgKGNhbkJlT3B0aW1pemVkT3JJ
bmxpbmVkKCkpCi0gICAgICAgIGtpbGxMYXN0UmVzdWx0UmVnaXN0ZXIoKTsgLy8gTWFrZSBsYXN0
UmVzdWx0UmVnaXN0ZXIgdHJhY2tpbmcgc2ltcGxlciBpbiB0aGUgREZHLgogfQogCiB2b2lkIEpJ
VDo6Y29tcGlsZUxvYWRWYXJhcmdzKEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbikKIHsKLSAgICBp
bnQgdGhpc1ZhbHVlID0gaW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotICAgIGludCBhcmd1bWVu
dHMgPSBpbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7Ci0gICAgaW50IGZpcnN0RnJlZVJlZ2lzdGVy
ID0gaW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kOworICAgIGludCB0aGlzVmFsdWUgPSBpbnN0cnVj
dGlvblszXS51Lm9wZXJhbmQ7CisgICAgaW50IGFyZ3VtZW50cyA9IGluc3RydWN0aW9uWzRdLnUu
b3BlcmFuZDsKKyAgICBpbnQgZmlyc3RGcmVlUmVnaXN0ZXIgPSBpbnN0cnVjdGlvbls1XS51Lm9w
ZXJhbmQ7CiAKICAgICBraWxsTGFzdFJlc3VsdFJlZ2lzdGVyKCk7CiAKQEAgLTEyNCw3ICsxMjIs
NyBAQCB2b2lkIEpJVDo6Y29tcGlsZUxvYWRWYXJhcmdzKEluc3RydWN0aW9uCiAgICAgICAgIGVu
ZC5saW5rKHRoaXMpOwogfQogCi12b2lkIEpJVDo6Y29tcGlsZUNhbGxFdmFsKCkKK3ZvaWQgSklU
Ojpjb21waWxlQ2FsbEV2YWwoSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQogewogICAgIEpJVFN0
dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF9jYWxsX2V2YWwpOyAvLyBJbml0aWFsaXplcyBT
Y29wZUNoYWluOyBSZXR1cm5QQzsgQ29kZUJsb2NrLgogICAgIHN0dWJDYWxsLmNhbGwoKTsKQEAg
LTEzMiw5ICsxMzAsMTEgQEAgdm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbCgpCiAgICAgZW1pdEdl
dEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoSlNTdGFjazo6Q2FsbGVyRnJhbWUsIGNhbGxGcmFtZVJl
Z2lzdGVyKTsKIAogICAgIHNhbXBsZUNvZGVCbG9jayhtX2NvZGVCbG9jayk7CisgICAgCisgICAg
ZW1pdFB1dENhbGxSZXN1bHQoaW5zdHJ1Y3Rpb24pOwogfQogCi12b2lkIEpJVDo6Y29tcGlsZUNh
bGxFdmFsU2xvd0Nhc2UoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3Zv
aWQgSklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7CiAgICAgbGlua1Nsb3dD
YXNlKGl0ZXIpOwogCkBAIC0xNDIsMTEgKzE0MiwxMyBAQCB2b2lkIEpJVDo6Y29tcGlsZUNhbGxF
dmFsU2xvd0Nhc2UoVmVjdG9yCiAgICAgZW1pdE5ha2VkQ2FsbChtX3ZtLT5nZXRDVElTdHViKHZp
cnR1YWxDYWxsR2VuZXJhdG9yKS5jb2RlKCkpOwogCiAgICAgc2FtcGxlQ29kZUJsb2NrKG1fY29k
ZUJsb2NrKTsKKyAgICAKKyAgICBlbWl0UHV0Q2FsbFJlc3VsdChpbnN0cnVjdGlvbik7CiB9CiAK
IHZvaWQgSklUOjpjb21waWxlT3BDYWxsKE9wY29kZUlEIG9wY29kZUlELCBJbnN0cnVjdGlvbiog
aW5zdHJ1Y3Rpb24sIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KQogewotICAgIGludCBjYWxs
ZWUgPSBpbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgaW50IGNhbGxlZSA9IGluc3RydWN0
aW9uWzJdLnUub3BlcmFuZDsKIAogICAgIC8qIENhbGxlciBhbHdheXM6CiAgICAgICAgIC0gVXBk
YXRlcyBjYWxsRnJhbWVSZWdpc3RlciB0byBjYWxsZWUgY2FsbEZyYW1lLgpAQCAtMTY1LDE0ICsx
NjcsMTQgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoT3Bjb2RlSUQgb3Bjb2RlSQogICAgIGlm
IChvcGNvZGVJRCA9PSBvcF9jYWxsX3ZhcmFyZ3MpCiAgICAgICAgIGNvbXBpbGVMb2FkVmFyYXJn
cyhpbnN0cnVjdGlvbik7CiAgICAgZWxzZSB7Ci0gICAgICAgIGludCBhcmdDb3VudCA9IGluc3Ry
dWN0aW9uWzJdLnUub3BlcmFuZDsKLSAgICAgICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0gaW5zdHJ1
Y3Rpb25bM10udS5vcGVyYW5kOworICAgICAgICBpbnQgYXJnQ291bnQgPSBpbnN0cnVjdGlvblsz
XS51Lm9wZXJhbmQ7CisgICAgICAgIGludCByZWdpc3Rlck9mZnNldCA9IGluc3RydWN0aW9uWzRd
LnUub3BlcmFuZDsKIAogICAgICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfY2FsbCAmJiBzaG91bGRF
bWl0UHJvZmlsaW5nKCkpIHsKICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocmVn
aXN0ZXJPZmZzZXQgKyBDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0SW5jbHVkaW5nVGhpcygwKSwg
cmVnVDApOwogICAgICAgICAgICAgSnVtcCBkb25lID0gZW1pdEp1bXBJZk5vdEpTQ2VsbChyZWdU
MCk7CiAgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJl
T2Zmc2V0KCkpLCByZWdUMCk7Ci0gICAgICAgICAgICBzdG9yZVB0cihyZWdUMCwgaW5zdHJ1Y3Rp
b25bNV0udS5hcnJheVByb2ZpbGUtPmFkZHJlc3NPZkxhc3RTZWVuU3RydWN0dXJlKCkpOworICAg
ICAgICAgICAgc3RvcmVQdHIocmVnVDAsIGluc3RydWN0aW9uWzZdLnUuYXJyYXlQcm9maWxlLT5h
ZGRyZXNzT2ZMYXN0U2VlblN0cnVjdHVyZSgpKTsKICAgICAgICAgICAgIGRvbmUubGluayh0aGlz
KTsKICAgICAgICAgfQogICAgIApAQCAtMTg4LDcgKzE5MCw3IEBAIHZvaWQgSklUOjpjb21waWxl
T3BDYWxsKE9wY29kZUlEIG9wY29kZUkKICAgICBtb3ZlKHJlZ1QxLCBjYWxsRnJhbWVSZWdpc3Rl
cik7CiAKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfY2FsbF9ldmFsKSB7Ci0gICAgICAgIGNvbXBp
bGVDYWxsRXZhbCgpOworICAgICAgICBjb21waWxlQ2FsbEV2YWwoaW5zdHJ1Y3Rpb24pOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCkBAIC0yMDksMTIgKzIxMSwxNCBAQCB2b2lkIEpJVDo6Y29t
cGlsZU9wQ2FsbChPcGNvZGVJRCBvcGNvZGVJCiAgICAgbV9jYWxsU3RydWN0dXJlU3R1YkNvbXBp
bGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uaG90UGF0aE90aGVyID0gZW1pdE5ha2VkQ2Fs
bCgpOwogCiAgICAgc2FtcGxlQ29kZUJsb2NrKG1fY29kZUJsb2NrKTsKKyAgICAKKyAgICBlbWl0
UHV0Q2FsbFJlc3VsdChpbnN0cnVjdGlvbik7CiB9CiAKLXZvaWQgSklUOjpjb21waWxlT3BDYWxs
U2xvd0Nhc2UoT3Bjb2RlSUQgb3Bjb2RlSUQsIEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlciwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpCit2b2lk
IEpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKE9wY29kZUlEIG9wY29kZUlELCBJbnN0cnVjdGlv
biogaW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIHVu
c2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KQogewogICAgIGlmIChvcGNvZGVJRCA9PSBvcF9jYWxs
X2V2YWwpIHsKLSAgICAgICAgY29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoaXRlcik7CisgICAgICAg
IGNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGluc3RydWN0aW9uLCBpdGVyKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIApAQCAtMjIzLDYgKzIyNyw4IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxs
U2xvd0Nhc2UoT3Bjb2RlSUQKICAgICBtX2NhbGxTdHJ1Y3R1cmVTdHViQ29tcGlsYXRpb25JbmZv
W2NhbGxMaW5rSW5mb0luZGV4XS5jYWxsUmV0dXJuTG9jYXRpb24gPSBlbWl0TmFrZWRDYWxsKG9w
Y29kZUlEID09IG9wX2NvbnN0cnVjdCA/IG1fdm0tPmdldENUSVN0dWIobGlua0NvbnN0cnVjdEdl
bmVyYXRvcikuY29kZSgpIDogbV92bS0+Z2V0Q1RJU3R1YihsaW5rQ2FsbEdlbmVyYXRvcikuY29k
ZSgpKTsKIAogICAgIHNhbXBsZUNvZGVCbG9jayhtX2NvZGVCbG9jayk7CisgICAgCisgICAgZW1p
dFB1dENhbGxSZXN1bHQoaW5zdHJ1Y3Rpb24pOwogfQogCiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBp
bGVDbG9zdXJlQ2FsbChDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbywgQ29kZUJsb2NrKiBjYWxs
ZWVDb2RlQmxvY2ssIFN0cnVjdHVyZSogZXhwZWN0ZWRTdHJ1Y3R1cmUsIEV4ZWN1dGFibGVCYXNl
KiBleHBlY3RlZEV4ZWN1dGFibGUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjb2RlUHRyKQpAQCAt
MjcxLDYgKzI3Nyw0NiBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVDbG9zdXJlQ2FsbChDYWxs
CiAgICAgY2FsbExpbmtJbmZvLT5zdHViID0gc3R1YlJvdXRpbmUucmVsZWFzZSgpOwogfQogCit2
b2lkIEpJVDo6ZW1pdF9vcF9jYWxsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7
CisgICAgY29tcGlsZU9wQ2FsbChvcF9jYWxsLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG1fY2FsbExp
bmtJbmZvSW5kZXgrKyk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX2NhbGxfZXZhbChJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGNvbXBpbGVPcENhbGwob3BfY2FsbF9l
dmFsLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG1fY2FsbExpbmtJbmZvSW5kZXgpOworfQorCit2b2lk
IEpJVDo6ZW1pdF9vcF9jYWxsX3ZhcmFyZ3MoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKK3sKKyAgICBjb21waWxlT3BDYWxsKG9wX2NhbGxfdmFyYXJncywgY3VycmVudEluc3RydWN0
aW9uLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9jb25z
dHJ1Y3QoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBjb21waWxlT3BD
YWxsKG9wX2NvbnN0cnVjdCwgY3VycmVudEluc3RydWN0aW9uLCBtX2NhbGxMaW5rSW5mb0luZGV4
KyspOworfQorCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2FsbChJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQorewor
ICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZShvcF9jYWxsLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0
ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7Cit9CisKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9j
YWxsX2V2YWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKK3sKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2Uob3Bf
Y2FsbF9ldmFsLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgp
OworfQorIAordm9pZCBKSVQ6OmVtaXRTbG93X29wX2NhbGxfdmFyYXJncyhJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
KQoreworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZShvcF9jYWxsX3ZhcmFyZ3MsIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKK30KKwordm9pZCBKSVQ6
OmVtaXRTbG93X29wX2NvbnN0cnVjdChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQoreworICAgIGNvbXBpbGVPcENh
bGxTbG93Q2FzZShvcF9jb25zdHJ1Y3QsIGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxs
TGlua0luZm9JbmRleCsrKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBV
U0UoSlNWQUxVRTY0KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMu
Y3BwCShyZXZpc2lvbiAxNTEwMDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9w
Y29kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDEsMjYgKzI0MSw2IEBAIHZvaWQgSklUOjpl
bWl0X29wX2lzX3N0cmluZyhJbnN0cnVjdGlvbioKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCk7CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX2NhbGwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKLXsKLSAgICBjb21waWxlT3BDYWxsKG9wX2NhbGwsIGN1cnJlbnRJbnN0cnVj
dGlvbiwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfY2Fs
bF9ldmFsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgY29tcGlsZU9w
Q2FsbChvcF9jYWxsX2V2YWwsIGN1cnJlbnRJbnN0cnVjdGlvbiwgbV9jYWxsTGlua0luZm9JbmRl
eCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2NhbGxfdmFyYXJncyhJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQotewotICAgIGNvbXBpbGVPcENhbGwob3BfY2FsbF92YXJhcmdzLCBj
dXJyZW50SW5zdHJ1Y3Rpb24sIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7Ci19Ci0KLXZvaWQgSklU
OjplbWl0X29wX2NvbnN0cnVjdChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewot
ICAgIGNvbXBpbGVPcENhbGwob3BfY29uc3RydWN0LCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG1fY2Fs
bExpbmtJbmZvSW5kZXgrKyk7Ci19Ci0KIHZvaWQgSklUOjplbWl0X29wX3RlYXJfb2ZmX2FjdGl2
YXRpb24oSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBpbnQgYWN0aXZh
dGlvbiA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CkBAIC0xMDk5LDI2ICsxMDc5
LDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2YoSW5zdHJ1YwogICAgIHN0dWJD
YWxsLmNhbGwoZHN0KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NhbGwoSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKLXsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2Uob3BfY2FsbCwgY3VycmVudEluc3Ry
dWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwotfQotCi12b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfY2FsbF9ldmFsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgY29tcGlsZU9wQ2FsbFNs
b3dDYXNlKG9wX2NhbGxfZXZhbCwgY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5r
SW5mb0luZGV4KTsKLX0KLSAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9jYWxsX3ZhcmFyZ3MoSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKLXsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2Uob3BfY2FsbF92YXJhcmdz
LCBjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7Ci19Ci0K
LXZvaWQgSklUOjplbWl0U2xvd19vcF9jb25zdHJ1Y3QoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBj
b21waWxlT3BDYWxsU2xvd0Nhc2Uob3BfY29uc3RydWN0LCBjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0
ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7Ci19Ci0KIHZvaWQgSklUOjplbWl0U2xvd19vcF90
b19udW1iZXIoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJKHJl
dmlzaW9uIDE1MTAwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQ
YXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NjEsMTYgKzE0NjEsMTYgQEAgaW5saW5lIFNs
b3dQYXRoUmV0dXJuVHlwZSBnZW5lcmljQ2FsbChFeAogICAgIC8vIC0gSWYgcG9zc2libGUsIGxp
bmsgdGhlIGNhbGwncyBpbmxpbmUgY2FjaGUuCiAgICAgLy8gLSBSZXR1cm4gYSB0dXBsZSBvZiBt
YWNoaW5lIGNvZGUgYWRkcmVzcyB0byBjYWxsIGFuZCB0aGUgbmV3IGNhbGwgZnJhbWUuCiAgICAg
Ci0gICAgSlNWYWx1ZSBjYWxsZWVBc1ZhbHVlID0gTExJTlRfT1BfQygxKS5qc1ZhbHVlKCk7Cisg
ICAgSlNWYWx1ZSBjYWxsZWVBc1ZhbHVlID0gTExJTlRfT1BfQygyKS5qc1ZhbHVlKCk7CiAgICAg
Ci0gICAgRXhlY1N0YXRlKiBleGVjQ2FsbGVlID0gZXhlYyArIHBjWzNdLnUub3BlcmFuZDsKKyAg
ICBFeGVjU3RhdGUqIGV4ZWNDYWxsZWUgPSBleGVjICsgcGNbNF0udS5vcGVyYW5kOwogICAgIAot
ICAgIGV4ZWNDYWxsZWUtPnNldEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKHBjWzJdLnUub3Bl
cmFuZCk7CisgICAgZXhlY0NhbGxlZS0+c2V0QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMocGNb
M10udS5vcGVyYW5kKTsKICAgICBleGVjQ2FsbGVlLT51bmNoZWNrZWRSKEpTU3RhY2s6OkNhbGxl
ZSkgPSBjYWxsZWVBc1ZhbHVlOwogICAgIGV4ZWNDYWxsZWUtPnNldENhbGxlckZyYW1lKGV4ZWMp
OwogICAgIAotICAgIEFTU0VSVChwY1s0XS51LmNhbGxMaW5rSW5mbyk7Ci0gICAgcmV0dXJuIHNl
dFVwQ2FsbChleGVjQ2FsbGVlLCBwYywga2luZCwgY2FsbGVlQXNWYWx1ZSwgcGNbNF0udS5jYWxs
TGlua0luZm8pOworICAgIEFTU0VSVChwY1s1XS51LmNhbGxMaW5rSW5mbyk7CisgICAgcmV0dXJu
IHNldFVwQ2FsbChleGVjQ2FsbGVlLCBwYywga2luZCwgY2FsbGVlQXNWYWx1ZSwgcGNbNV0udS5j
YWxsTGlua0luZm8pOwogfQogCiBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfY2FsbCkK
QEAgLTE0OTMsMTEgKzE0OTMsMTEgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2Nh
bGxfdmFyYQogICAgIC8vIC0gRmlndXJlIG91dCB3aGF0IHRvIGNhbGwgYW5kIGNvbXBpbGUgaXQg
aWYgbmVjZXNzYXJ5LgogICAgIC8vIC0gUmV0dXJuIGEgdHVwbGUgb2YgbWFjaGluZSBjb2RlIGFk
ZHJlc3MgdG8gY2FsbCBhbmQgdGhlIG5ldyBjYWxsIGZyYW1lLgogICAgIAotICAgIEpTVmFsdWUg
Y2FsbGVlQXNWYWx1ZSA9IExMSU5UX09QX0MoMSkuanNWYWx1ZSgpOworICAgIEpTVmFsdWUgY2Fs
bGVlQXNWYWx1ZSA9IExMSU5UX09QX0MoMikuanNWYWx1ZSgpOwogICAgIAogICAgIEV4ZWNTdGF0
ZSogZXhlY0NhbGxlZSA9IGxvYWRWYXJhcmdzKAogICAgICAgICBleGVjLCAmdm0uaW50ZXJwcmV0
ZXItPnN0YWNrKCksCi0gICAgICAgIExMSU5UX09QX0MoMikuanNWYWx1ZSgpLCBMTElOVF9PUF9D
KDMpLmpzVmFsdWUoKSwgcGNbNF0udS5vcGVyYW5kKTsKKyAgICAgICAgTExJTlRfT1BfQygzKS5q
c1ZhbHVlKCksIExMSU5UX09QX0MoNCkuanNWYWx1ZSgpLCBwY1s1XS51Lm9wZXJhbmQpOwogICAg
IExMSU5UX0NBTExfQ0hFQ0tfRVhDRVBUSU9OKGV4ZWMsIHBjKTsKICAgICAKICAgICBleGVjQ2Fs
bGVlLT51bmNoZWNrZWRSKEpTU3RhY2s6OkNhbGxlZSkgPSBjYWxsZWVBc1ZhbHVlOwpAQCAtMTUx
MCwxMSArMTUxMCwxMSBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfY2FsbF92YXJh
CiBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfY2FsbF9ldmFsKQogewogICAgIExMSU5U
X0JFR0lOX05PX1NFVF9QQygpOwotICAgIEpTVmFsdWUgY2FsbGVlQXNWYWx1ZSA9IExMSU5UX09Q
KDEpLmpzVmFsdWUoKTsKKyAgICBKU1ZhbHVlIGNhbGxlZUFzVmFsdWUgPSBMTElOVF9PUCgyKS5q
c1ZhbHVlKCk7CiAgICAgCi0gICAgRXhlY1N0YXRlKiBleGVjQ2FsbGVlID0gZXhlYyArIHBjWzNd
LnUub3BlcmFuZDsKKyAgICBFeGVjU3RhdGUqIGV4ZWNDYWxsZWUgPSBleGVjICsgcGNbNF0udS5v
cGVyYW5kOwogICAgIAotICAgIGV4ZWNDYWxsZWUtPnNldEFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzKHBjWzJdLnUub3BlcmFuZCk7CisgICAgZXhlY0NhbGxlZS0+c2V0QXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMocGNbM10udS5vcGVyYW5kKTsKICAgICBleGVjQ2FsbGVlLT5zZXRDYWxsZXJG
cmFtZShleGVjKTsKICAgICBleGVjQ2FsbGVlLT51bmNoZWNrZWRSKEpTU3RhY2s6OkNhbGxlZSkg
PSBjYWxsZWVBc1ZhbHVlOwogICAgIGV4ZWNDYWxsZWUtPnNldFNjb3BlKGV4ZWMtPnNjb3BlKCkp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIz
Ml82NC5hc20KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xl
dmVsSW50ZXJwcmV0ZXIzMl82NC5hc20JKHJldmlzaW9uIDE1MTAwNSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCSh3b3JraW5nIGNv
cHkpCkBAIC0xNjI5LDE2ICsxNjI5LDYgQEAgX2xsaW50X29wX3JldDoKICAgICBkb1JldHVybigp
CiAKIAotX2xsaW50X29wX2NhbGxfcHV0X3Jlc3VsdDoKLSAgICBsb2FkaSA0W1BDXSwgdDIKLSAg
ICBsb2FkaSA4W1BDXSwgdDMKLSAgICBzdG9yZWkgdDEsIFRhZ09mZnNldFtjZnIsIHQyLCA4XQot
ICAgIHN0b3JlaSB0MCwgUGF5bG9hZE9mZnNldFtjZnIsIHQyLCA4XQotICAgIHZhbHVlUHJvZmls
ZSh0MSwgdDAsIHQzKQotICAgIHRyYWNlRXhlY3V0aW9uKCkgIyBOZWVkcyB0byBiZSBoZXJlIGJl
Y2F1c2UgaXQgd291bGQgY2xvYmJlciB0MSwgdDAKLSAgICBkaXNwYXRjaCgzKQotCi0KIF9sbGlu
dF9vcF9yZXRfb2JqZWN0X29yX3RoaXM6CiAgICAgdHJhY2VFeGVjdXRpb24oKQogICAgIGNoZWNr
U3dpdGNoVG9KSVRGb3JFcGlsb2d1ZSgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQkocmV2aXNpb24gMTUxMDA1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5h
c20JKHdvcmtpbmcgY29weSkKQEAgLTU1LDcgKzU1LDExIEBAIG1hY3JvIGRpc3BhdGNoQWZ0ZXJD
YWxsKCkKICAgICBsb2FkaSBBcmd1bWVudENvdW50ICsgVGFnT2Zmc2V0W2Nmcl0sIFBDCiAgICAg
bG9hZHAgQ29kZUJsb2NrW2Nmcl0sIFBCCiAgICAgbG9hZHAgQ29kZUJsb2NrOjptX2luc3RydWN0
aW9uc1tQQl0sIFBCCi0gICAgZGlzcGF0Y2goNikKKyAgICBsb2FkaXNGcm9tSW5zdHJ1Y3Rpb24o
MSwgdDEpCisgICAgbG9hZHBGcm9tSW5zdHJ1Y3Rpb24oNywgdDIpCisgICAgc3RvcmVxIHQwLCBb
Y2ZyLCB0MSwgOF0KKyAgICB2YWx1ZVByb2ZpbGUodDAsIHQyKQorICAgIGRpc3BhdGNoKDgpCiBl
bmQKIAogbWFjcm8gY0NhbGwyKGZ1bmN0aW9uLCBhcmcxLCBhcmcyKQpAQCAtMTQwMSwyOSArMTQw
NSwyOSBAQCBfbGxpbnRfb3BfbmV3X2Z1bmM6CiAKIG1hY3JvIGFycmF5UHJvZmlsZUZvckNhbGwo
KQogICAgIGlmIFZBTFVFX1BST0ZJTEVSCi0gICAgICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlvbigz
LCB0MykKKyAgICAgICAgbG9hZGlzRnJvbUluc3RydWN0aW9uKDQsIHQzKQogICAgICAgICBsb2Fk
cSBUaGlzQXJndW1lbnRPZmZzZXRbY2ZyLCB0MywgOF0sIHQwCiAgICAgICAgIGJ0cW56IHQwLCB0
YWdNYXNrLCAuZG9uZQogICAgICAgICBsb2FkcCBKU0NlbGw6Om1fc3RydWN0dXJlW3QwXSwgdDAK
LSAgICAgICAgbG9hZHBGcm9tSW5zdHJ1Y3Rpb24oNSwgdDEpCisgICAgICAgIGxvYWRwRnJvbUlu
c3RydWN0aW9uKDYsIHQxKQogICAgICAgICBzdG9yZXAgdDAsIEFycmF5UHJvZmlsZTo6bV9sYXN0
U2VlblN0cnVjdHVyZVt0MV0KICAgICAuZG9uZToKICAgICBlbmQKIGVuZAogCiBtYWNybyBkb0Nh
bGwoc2xvd1BhdGgpCi0gICAgbG9hZGlzRnJvbUluc3RydWN0aW9uKDEsIHQwKQotICAgIGxvYWRw
RnJvbUluc3RydWN0aW9uKDQsIHQxKQorICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlvbigyLCB0MCkK
KyAgICBsb2FkcEZyb21JbnN0cnVjdGlvbig1LCB0MSkKICAgICBsb2FkcCBMTEludENhbGxMaW5r
SW5mbzo6Y2FsbGVlW3QxXSwgdDIKICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHQwLCB0MykK
ICAgICBicW5lcSB0MywgdDIsIC5vcENhbGxTbG93Ci0gICAgbG9hZGlzRnJvbUluc3RydWN0aW9u
KDMsIHQzKQorICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlvbig0LCB0MykKICAgICBsc2hpZnRpIDMs
IHQzCiAgICAgYWRkcCBjZnIsIHQzCiAgICAgbG9hZHAgSlNGdW5jdGlvbjo6bV9zY29wZVt0Ml0s
IHQwCiAgICAgc3RvcmVxIHQyLCBDYWxsZWVbdDNdCiAgICAgc3RvcmVxIHQwLCBTY29wZUNoYWlu
W3QzXQotICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlvbigyLCB0MikKKyAgICBsb2FkaXNGcm9tSW5z
dHJ1Y3Rpb24oMywgdDIpCiAgICAgc3RvcmVpIFBDLCBBcmd1bWVudENvdW50ICsgVGFnT2Zmc2V0
W2Nmcl0KICAgICBzdG9yZXEgY2ZyLCBDYWxsZXJGcmFtZVt0M10KICAgICBzdG9yZWkgdDIsIEFy
Z3VtZW50Q291bnQgKyBQYXlsb2FkT2Zmc2V0W3QzXQpAQCAtMTQ2MiwxNSArMTQ2Niw2IEBAIF9s
bGludF9vcF9yZXQ6CiAgICAgZG9SZXR1cm4oKQogCiAKLV9sbGludF9vcF9jYWxsX3B1dF9yZXN1
bHQ6Ci0gICAgbG9hZGlzRnJvbUluc3RydWN0aW9uKDEsIHQyKQotICAgIGxvYWRwRnJvbUluc3Ry
dWN0aW9uKDIsIHQzKQotICAgIHN0b3JlcSB0MCwgW2NmciwgdDIsIDhdCi0gICAgdmFsdWVQcm9m
aWxlKHQwLCB0MykKLSAgICB0cmFjZUV4ZWN1dGlvbigpCi0gICAgZGlzcGF0Y2goMykKLQotCiBf
bGxpbnRfb3BfcmV0X29iamVjdF9vcl90aGlzOgogICAgIHRyYWNlRXhlY3V0aW9uKCkKICAgICBj
aGVja1N3aXRjaFRvSklURm9yRXBpbG9ndWUoKQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>203467</attachid>
            <date>2013-05-31 14:17:56 -0700</date>
            <delta_ts>2013-05-31 14:35:41 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>87416</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTUxMDM3KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDExNSBA
QAorMjAxMy0wNS0zMSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IGZvdXJ0aFRpZXI6IGdldCByaWQgb2Ygb3BfY2FsbF9wdXRfcmVzdWx0CisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTcwNDcKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKyAgICAgICAgCisgICAgICAgIFdvcmsgaW4gcHJvZ3Jl
c3MuIFRoaXMgc3RpbGwgbWFrZXMgbGlrZSAyMCB0ZXN0cyBjcmFzaC4KKyAgICAgICAgCisgICAg
ICAgIG9wX2NhbGxfcHV0X3Jlc3VsdCBpcyBhbiBvZGRiYWxsLiBJdHMgc2VtYW50aWNzIGFyZSB0
aGF0IGl0IHRha2VzIHRoZSByZXR1cm4KKyAgICAgICAgdmFsdWUgb2YgYSBjYWxsIGluc3RydWN0
aW9uLCB3aGljaCBpcyBzZXQgYXNpZGUgaW4gcmVnVDAvcmVnVDEsIGFuZCBwbGFjZXMgdGhlbQor
ICAgICAgICBpbnRvIHNvbWUgc3RhY2sgc2xvdC4gVGhpcyBpcyB3ZWlyZCBzaW5jZSB0aGVyZSBp
cyBhbiBpbXBsaWNpdCBjb250cmFjdCB3aXRoIHRoZQorICAgICAgICBwcmVjZWRpbmcgYnl0ZWNv
ZGUgaW5zdHJ1Y3Rpb24sIGFuZCBpdCdzIGV2ZW4gd2VpcmRlciBzaW5jZSBpdCBtZWFucyB0aGF0
IGl0CisgICAgICAgIGRvZXNuJ3QgbWFrZSBzZW5zZSB0byBqdW1wIHRvIGl0OyBmb3IgZXhhbXBs
ZSBPU1IgZXhpdCBmcm9tIHRoZSBwcmVjZWRpbmcgY2FsbAorICAgICAgICBpbnN0cnVjdGlvbiBt
dXN0IG1ha2Ugc3VyZSB0byBqdW1wIG92ZXIgdGhlIG9wX2NhbGxfcHV0X3Jlc3VsdC4KKyAgICAg
ICAgCisgICAgICAgIFNvIHRoaXMgcGF0Y2ggZ2V0cyByaWQgb2Ygb3BfY2FsbF9wdXRfcmVzdWx0
OgorICAgICAgICAKKyAgICAgICAgLSBJbiBieXRlY29kZSwgYWxsIGNhbGxzIHJldHVybiBhIHZh
bHVlIGFuZCB3ZSBhbHdheXMgYWxsb2NhdGUgYSB0ZW1wb3JhcnkgZm9yCisgICAgICAgICAgdGhh
dCB2YWx1ZSBldmVuIGlmIGl0IGlzbid0IHVzZWQuCisgICAgICAgIAorICAgICAgICAtIFRoZSBM
TEludCBkb2VzIHRoZSByZXR1cm4gdmFsdWUgc2F2aW5nIGFzIHBhcnQgb2YgZGlzcGF0Y2hBZnRl
ckNhbGwoKS4KKyAgICAgICAgCisgICAgICAgIC0gVGhlIEpJVCBhbmQgREZHIGRvIHRoZSByZXR1
cm4gdmFsdWUgc2F2aW5nIGFzIHBhcnQgb2Ygbm9ybWFsIGNvZGUgZ2VuZXJhdGlvbi4KKyAgICAg
ICAgICBUaGUgREZHIGFscmVhZHkgZGlkIHRoZSByaWdodCB0aGluZy4KKyAgICAgICAgCisgICAg
ICAgIC0gREZHLT5KSVQgT1NSIGV4aXQgaW4gdGhlIGNhc2Ugb2YgaW5saW5pbmcgd2lsbCBtYWtl
IHRoZSByZXR1cm4gUEMncyBwb2ludCBhdAorICAgICAgICAgIHRoZSBDYWxsTGlua0luZm86OmNh
bGxSZXR1cm5Mb2NhdGlvbiwgcmF0aGVyIHRoYW4gdGhlIG1hY2hpbmUgUEMgYXNzb2NpYXRlZAor
ICAgICAgICAgIHdpdGggdGhlIG9wX2NhbGxfcHV0X3Jlc3VsdCBpbnN0cnVjdGlvbi4KKyAgICAg
ICAgCisgICAgICAgIC0gVG9ucyBvZiBjb2RlIGdldHMgcmVtb3ZlZC4gVGhlIERGRyBoYWQgdG8g
dHJhY2sgd2hldGhlciBvciBub3QgYSBjYWxsIGhhZCBhCisgICAgICAgICAgcmV0dXJuIHZhbHVl
IGluIGEgYnVuY2ggb2YgcGxhY2VzLiBJdCBoYWQgdG8gdHJhY2sgdGhlIGZhY3QgdGhhdCB3ZSB3
b3VsZAorICAgICAgICAgIGV4aXQgdG8gYWZ0ZXIgdGhlIG9wX2NhbGxfcHV0X3Jlc3VsdC4gSXQg
d2FzIGEgbWVzcy4gVGhhdCBtZXNzIGlzIG5vdyBnb25lLgorCisgICAgICAgICogYnl0ZWNvZGUv
Q2FsbExpbmtTdGF0dXMuY3BwOgorICAgICAgICAoSlNDOjpDYWxsTGlua1N0YXR1czo6Y29tcHV0
ZUZyb21MTEludCk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcDoKKyAgICAgICAg
KEpTQzo6Q29kZUJsb2NrOjpwcmludENhbGxPcCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6
ZHVtcEFycmF5UHJvZmlsaW5nKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpkdW1wQnl0ZWNv
ZGUpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OkNvZGVCbG9jayk6CisgICAgICAgICogYnl0
ZWNvZGUvQ29kZUJsb2NrLmg6CisgICAgICAgICogYnl0ZWNvZGUvT3Bjb2RlLmg6CisgICAgICAg
IChKU0MpOgorICAgICAgICAoSlNDOjpwYWRPcGNvZGVOYW1lKToKKyAgICAgICAgKiBieXRlY29t
cGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVy
YXRvcjo6ZW1pdENhbGwpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENh
bGxWYXJhcmdzKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRDb25zdHJ1
Y3QpOgorICAgICAgICAqIGJ5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwOgorICAgICAgICAo
SlNDOjpOZXdFeHByTm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25D
YWxsVmFsdWVOb2RlOjplbWl0Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkNhbGxS
ZXNvbHZlTm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25DYWxsQnJh
Y2tldE5vZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uQ2FsbERvdE5v
ZGU6OmVtaXRCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkNhbGxGdW5jdGlvbkNhbGxEb3ROb2Rl
OjplbWl0Qnl0ZWNvZGUpOgorICAgICAgICAoSlNDOjpBcHBseUZ1bmN0aW9uQ2FsbERvdE5vZGU6
OmVtaXRCeXRlY29kZSk6CisgICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Qnl0ZUNvZGVQYXJzZXIpOgorICAgICAg
ICAoQnl0ZUNvZGVQYXJzZXIpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpj
dXJyZW50Q29kZU9yaWdpbik6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmFk
ZENhbGwpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpnZXRQcmVkaWN0aW9u
V2l0aG91dE9TUkV4aXQpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpnZXRQ
cmVkaWN0aW9uKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlQ2Fs
bCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGluaW5nKToK
KyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlTWluTWF4KToKKyAgICAg
ICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50cmluc2ljKToKKyAgICAgICAg
KEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6aGFuZGxlQ29uc3RhbnRJbnRlcm5hbEZ1bmN0aW9u
KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayk6CisgICAg
ICAgICogZGZnL0RGR0NhcGFiaWxpdGllcy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Y2FwYWJp
bGl0eUxldmVsKToKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdENvbXBpbGVyLmNwcDoKKyAgICAg
ICAgKiBkZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpyZWlmeUlubGluZWRDYWxsRnJhbWVzKToKKyAgICAgICAgKiBqaXQvSklULmNwcDoKKyAgICAg
ICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKToKKyAgICAgICAgKiBqaXQvSklU
Lmg6CisgICAgICAgIChKSVQpOgorICAgICAgICAqIGppdC9KSVRDYWxsLmNwcDoKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0UHV0Q2FsbFJlc3VsdCk6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGls
ZUxvYWRWYXJhcmdzKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlQ2FsbEV2YWwpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKToKKyAgICAgICAgKEpTQzo6
SklUOjpjb21waWxlT3BDYWxsKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlT3BDYWxsU2xv
d0Nhc2UpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfY2FsbCk6CisgICAgICAgIChKU0Mp
OgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfY2FsbF9ldmFsKToKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X29wX2NhbGxfdmFyYXJncyk6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdF9vcF9j
b25zdHJ1Y3QpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2NhbGwpOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRTbG93X29wX2NhbGxfZXZhbCk6CisgICAgICAgIChKU0M6OkpJVDo6
ZW1pdFNsb3dfb3BfY2FsbF92YXJhcmdzKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19v
cF9jb25zdHJ1Y3QpOgorICAgICAgICAqIGppdC9KSVRDYWxsMzJfNjQuY3BwOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXRQdXRDYWxsUmVzdWx0KToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxl
TG9hZFZhcmFyZ3MpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVDYWxsRXZhbCk6CisgICAg
ICAgIChKU0M6OkpJVDo6Y29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UpOgorICAgICAgICAoSlNDOjpK
SVQ6OmNvbXBpbGVPcENhbGwpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVPcENhbGxTbG93
Q2FzZSk6CisgICAgICAgICogaml0L0pJVE9wY29kZXMuY3BwOgorICAgICAgICAoSlNDKToKKyAg
ICAgICAgKiBsbGludC9MTEludFNsb3dQYXRocy5jcHA6CisgICAgICAgIChKU0M6OkxMSW50Ojpn
ZW5lcmljQ2FsbCk6CisgICAgICAgIChKU0M6OkxMSW50OjpMTElOVF9TTE9XX1BBVEhfREVDTCk6
CisgICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5jcHA6CisgICAgICAgIChKU0M6
OkNMb29wOjpleGVjdXRlKToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJf
NjQuYXNtOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc206CisKIDIw
MTMtMDUtMzAgIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBmb3Vy
dGhUaWVyOiBMTEludCBzaG91bGRuJ3Qgc3RvcmUgYW4gb2Zmc2V0IGNhbGwgUEMgZHVyaW5nIG9w
X2NhbGwtbGlrZSBjYWxscwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0Nh
bGxMaW5rU3RhdHVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ2FsbExpbmtTdGF0dXMuY3BwCShyZXZpc2lvbiAxNTEwMDUpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2FsbExpbmtTdGF0dXMuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC04Nyw3ICs4Nyw3IEBAIENhbGxMaW5rU3RhdHVzIENhbGxMaW5rU3RhdHVzOjpjb21wdXRlRnIK
ICAgICBVTlVTRURfUEFSQU0oYnl0ZWNvZGVJbmRleCk7CiAjaWYgRU5BQkxFKExMSU5UKQogICAg
IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiA9IHByb2ZpbGVkQmxvY2stPmluc3RydWN0aW9ucygp
LmJlZ2luKCkgKyBieXRlY29kZUluZGV4OwotICAgIExMSW50Q2FsbExpbmtJbmZvKiBjYWxsTGlu
a0luZm8gPSBpbnN0cnVjdGlvbls0XS51LmNhbGxMaW5rSW5mbzsKKyAgICBMTEludENhbGxMaW5r
SW5mbyogY2FsbExpbmtJbmZvID0gaW5zdHJ1Y3Rpb25bNV0udS5jYWxsTGlua0luZm87CiAgICAg
CiAgICAgcmV0dXJuIENhbGxMaW5rU3RhdHVzKGNhbGxMaW5rSW5mby0+bGFzdFNlZW5DYWxsZWUu
Z2V0KCkpOwogI2Vsc2UKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2Rl
QmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlQmxvY2suY3BwCShyZXZpc2lvbiAxNTEwMDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDE4LDEyICs0MTgsMTMg
QEAgdm9pZCBDb2RlQmxvY2s6OnByaW50R2V0QnlJZENhY2hlU3RhdHVzKAogI2VuZGlmCiB9CiAK
LXZvaWQgQ29kZUJsb2NrOjpwcmludENhbGxPcChQcmludFN0cmVhbSYgb3V0LCBFeGVjU3RhdGUq
LCBpbnQgbG9jYXRpb24sIGNvbnN0IEluc3RydWN0aW9uKiYgaXQsIGNvbnN0IGNoYXIqIG9wLCBD
YWNoZUR1bXBNb2RlIGNhY2hlRHVtcE1vZGUpCit2b2lkIENvZGVCbG9jazo6cHJpbnRDYWxsT3Ao
UHJpbnRTdHJlYW0mIG91dCwgRXhlY1N0YXRlKiwgaW50IGxvY2F0aW9uLCBjb25zdCBJbnN0cnVj
dGlvbiomIGl0LCBjb25zdCBjaGFyKiBvcCwgQ2FjaGVEdW1wTW9kZSBjYWNoZUR1bXBNb2RlLCBi
b29sJiBoYXNQcmludGVkUHJvZmlsaW5nKQogeworICAgIGludCBkc3QgPSAoKytpdCktPnUub3Bl
cmFuZDsKICAgICBpbnQgZnVuYyA9ICgrK2l0KS0+dS5vcGVyYW5kOwogICAgIGludCBhcmdDb3Vu
dCA9ICgrK2l0KS0+dS5vcGVyYW5kOwogICAgIGludCByZWdpc3Rlck9mZnNldCA9ICgrK2l0KS0+
dS5vcGVyYW5kOwotICAgIG91dC5wcmludGYoIlslNGRdICVzXHQgJXMsICVkLCAlZCIsIGxvY2F0
aW9uLCBvcCwgcmVnaXN0ZXJOYW1lKGZ1bmMpLmRhdGEoKSwgYXJnQ291bnQsIHJlZ2lzdGVyT2Zm
c2V0KTsKKyAgICBvdXQucHJpbnRmKCJbJTRkXSAlcyAlcywgJXMsICVkLCAlZCIsIGxvY2F0aW9u
LCBvcCwgcmVnaXN0ZXJOYW1lKGRzdCkuZGF0YSgpLCByZWdpc3Rlck5hbWUoZnVuYykuZGF0YSgp
LCBhcmdDb3VudCwgcmVnaXN0ZXJPZmZzZXQpOwogICAgIGlmIChjYWNoZUR1bXBNb2RlID09IER1
bXBDYWNoZXMpIHsKICNpZiBFTkFCTEUoTExJTlQpCiAgICAgICAgIExMSW50Q2FsbExpbmtJbmZv
KiBjYWxsTGlua0luZm8gPSBpdFsxXS51LmNhbGxMaW5rSW5mbzsKQEAgLTQ0Myw3ICs0NDQsOSBA
QCB2b2lkIENvZGVCbG9jazo6cHJpbnRDYWxsT3AoUHJpbnRTdHJlYW0mCiAjZW5kaWYKICAgICAg
ICAgb3V0LnByaW50KCIgc3RhdHVzKCIsIENhbGxMaW5rU3RhdHVzOjpjb21wdXRlRm9yKHRoaXMs
IGxvY2F0aW9uKSwgIikiKTsKICAgICB9Ci0gICAgaXQgKz0gMjsKKyAgICArK2l0OworICAgIGR1
bXBBcnJheVByb2ZpbGluZyhvdXQsIGl0LCBoYXNQcmludGVkUHJvZmlsaW5nKTsKKyAgICBkdW1w
VmFsdWVQcm9maWxpbmcob3V0LCBpdCwgaGFzUHJpbnRlZFByb2ZpbGluZyk7CiB9CiAKIHZvaWQg
Q29kZUJsb2NrOjpwcmludFB1dEJ5SWRPcChQcmludFN0cmVhbSYgb3V0LCBFeGVjU3RhdGUqLCBp
bnQgbG9jYXRpb24sIGNvbnN0IEluc3RydWN0aW9uKiYgaXQsIGNvbnN0IGNoYXIqIG9wKQpAQCAt
NjYzLDYgKzY2Niw4IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wQXJyYXlQcm9maWxpbmcoUHJpbnQK
ICAgICAKICAgICArK2l0OwogI2lmIEVOQUJMRShWQUxVRV9QUk9GSUxFUikKKyAgICBpZiAoIWl0
LT51LmFycmF5UHJvZmlsZSkKKyAgICAgICAgcmV0dXJuOwogICAgIENTdHJpbmcgZGVzY3JpcHRp
b24gPSBpdC0+dS5hcnJheVByb2ZpbGUtPmJyaWVmRGVzY3JpcHRpb24obG9ja2VyLCB0aGlzKTsK
ICAgICBpZiAoIWRlc2NyaXB0aW9uLmxlbmd0aCgpKQogICAgICAgICByZXR1cm47CkBAIC0xMjgy
LDIwICsxMjg3LDIyIEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wQnl0ZWNvZGUoUHJpbnRTdHJlYW0K
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2Ugb3BfY2FsbDogewot
ICAgICAgICAgICAgcHJpbnRDYWxsT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJjYWxsIiwg
RHVtcENhY2hlcyk7CisgICAgICAgICAgICBwcmludENhbGxPcChvdXQsIGV4ZWMsIGxvY2F0aW9u
LCBpdCwgImNhbGwiLCBEdW1wQ2FjaGVzLCBoYXNQcmludGVkUHJvZmlsaW5nKTsKICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2Ugb3BfY2FsbF9ldmFsOiB7Ci0gICAg
ICAgICAgICBwcmludENhbGxPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImNhbGxfZXZhbCIs
IERvbnREdW1wQ2FjaGVzKTsKKyAgICAgICAgICAgIHByaW50Q2FsbE9wKG91dCwgZXhlYywgbG9j
YXRpb24sIGl0LCAiY2FsbF9ldmFsIiwgRG9udER1bXBDYWNoZXMsIGhhc1ByaW50ZWRQcm9maWxp
bmcpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2FzZSBvcF9jYWxs
X3ZhcmFyZ3M6IHsKKyAgICAgICAgICAgIGludCByZXN1bHQgPSAoKytpdCktPnUub3BlcmFuZDsK
ICAgICAgICAgICAgIGludCBjYWxsZWUgPSAoKytpdCktPnUub3BlcmFuZDsKICAgICAgICAgICAg
IGludCB0aGlzVmFsdWUgPSAoKytpdCktPnUub3BlcmFuZDsKICAgICAgICAgICAgIGludCBhcmd1
bWVudHMgPSAoKytpdCktPnUub3BlcmFuZDsKICAgICAgICAgICAgIGludCBmaXJzdEZyZWVSZWdp
c3RlciA9ICgrK2l0KS0+dS5vcGVyYW5kOwogICAgICAgICAgICAgKytpdDsKLSAgICAgICAgICAg
IG91dC5wcmludGYoIlslNGRdIGNhbGxfdmFyYXJnc1x0ICVzLCAlcywgJXMsICVkIiwgbG9jYXRp
b24sIHJlZ2lzdGVyTmFtZShjYWxsZWUpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHRoaXNWYWx1ZSku
ZGF0YSgpLCByZWdpc3Rlck5hbWUoYXJndW1lbnRzKS5kYXRhKCksIGZpcnN0RnJlZVJlZ2lzdGVy
KTsKKyAgICAgICAgICAgIG91dC5wcmludGYoIlslNGRdIGNhbGxfdmFyYXJnc1x0ICVzLCAlcywg
JXMsICVzLCAlZCIsIGxvY2F0aW9uLCByZWdpc3Rlck5hbWUocmVzdWx0KS5kYXRhKCksIHJlZ2lz
dGVyTmFtZShjYWxsZWUpLmRhdGEoKSwgcmVnaXN0ZXJOYW1lKHRoaXNWYWx1ZSkuZGF0YSgpLCBy
ZWdpc3Rlck5hbWUoYXJndW1lbnRzKS5kYXRhKCksIGZpcnN0RnJlZVJlZ2lzdGVyKTsKKyAgICAg
ICAgICAgIGR1bXBWYWx1ZVByb2ZpbGluZyhvdXQsIGl0LCBoYXNQcmludGVkUHJvZmlsaW5nKTsK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2Ugb3BfdGVhcl9vZmZf
YWN0aXZhdGlvbjogewpAQCAtMTMxNCwxMiArMTMyMSw2IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1w
Qnl0ZWNvZGUoUHJpbnRTdHJlYW0KICAgICAgICAgICAgIG91dC5wcmludGYoIlslNGRdIHJldFx0
XHQgJXMiLCBsb2NhdGlvbiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCkpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgY2FzZSBvcF9jYWxsX3B1dF9yZXN1bHQ6IHsKLSAg
ICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwotICAgICAgICAgICAgb3V0LnBy
aW50ZigiWyU0ZF0gY2FsbF9wdXRfcmVzdWx0XHRcdCAlcyIsIGxvY2F0aW9uLCByZWdpc3Rlck5h
bWUocjApLmRhdGEoKSk7Ci0gICAgICAgICAgICBkdW1wVmFsdWVQcm9maWxpbmcob3V0LCBpdCwg
aGFzUHJpbnRlZFByb2ZpbGluZyk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQogICAg
ICAgICBjYXNlIG9wX3JldF9vYmplY3Rfb3JfdGhpczogewogICAgICAgICAgICAgaW50IHIwID0g
KCsraXQpLT51Lm9wZXJhbmQ7CiAgICAgICAgICAgICBpbnQgcjEgPSAoKytpdCktPnUub3BlcmFu
ZDsKQEAgLTEzMjcsNyArMTMyOCw3IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wQnl0ZWNvZGUoUHJp
bnRTdHJlYW0KICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNhc2Ugb3Bf
Y29uc3RydWN0OiB7Ci0gICAgICAgICAgICBwcmludENhbGxPcChvdXQsIGV4ZWMsIGxvY2F0aW9u
LCBpdCwgImNvbnN0cnVjdCIsIER1bXBDYWNoZXMpOworICAgICAgICAgICAgcHJpbnRDYWxsT3Ao
b3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJjb25zdHJ1Y3QiLCBEdW1wQ2FjaGVzLCBoYXNQcmlu
dGVkUHJvZmlsaW5nKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgICAgIGNh
c2Ugb3Bfc3RyY2F0OiB7CkBAIC0xNzg0LDcgKzE3ODUsNyBAQCBDb2RlQmxvY2s6OkNvZGVCbG9j
ayhTY3JpcHRFeGVjdXRhYmxlKiBvCiAgICAgICAgIH0KICAgICAgICAgY2FzZSBvcF90b190aGlz
OgogICAgICAgICBjYXNlIG9wX2dldF9ieV9pZDoKLSAgICAgICAgY2FzZSBvcF9jYWxsX3B1dF9y
ZXN1bHQ6CisgICAgICAgIGNhc2Ugb3BfY2FsbF92YXJhcmdzOgogICAgICAgICBjYXNlIG9wX2dl
dF9jYWxsZWU6IHsKICAgICAgICAgICAgIFZhbHVlUHJvZmlsZSogcHJvZmlsZSA9ICZtX3ZhbHVl
UHJvZmlsZXNbcGNbaSArIG9wTGVuZ3RoIC0gMV0udS5vcGVyYW5kXTsKICAgICAgICAgICAgIEFT
U0VSVChwcm9maWxlLT5tX2J5dGVjb2RlT2Zmc2V0ID09IC0xKTsKQEAgLTE4ODQsMjAgKzE4ODUs
MzEgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soU2NyaXB0RXhlY3V0YWJsZSogbwogICAgICAgICBj
YXNlIG9wX2NhbGw6CiAgICAgICAgIGNhc2Ugb3BfY2FsbF9ldmFsOiB7CiAjaWYgRU5BQkxFKERG
R19KSVQpCi0gICAgICAgICAgICBpbnQgYXJyYXlQcm9maWxlSW5kZXggPSBwY1tpICsgb3BMZW5n
dGggLSAxXS51Lm9wZXJhbmQ7CisgICAgICAgICAgICBWYWx1ZVByb2ZpbGUqIHByb2ZpbGUgPSAm
bV92YWx1ZVByb2ZpbGVzW3BjW2kgKyBvcExlbmd0aCAtIDFdLnUub3BlcmFuZF07CisgICAgICAg
ICAgICBBU1NFUlQocHJvZmlsZS0+bV9ieXRlY29kZU9mZnNldCA9PSAtMSk7CisgICAgICAgICAg
ICBwcm9maWxlLT5tX2J5dGVjb2RlT2Zmc2V0ID0gaTsKKyAgICAgICAgICAgIGluc3RydWN0aW9u
c1tpICsgb3BMZW5ndGggLSAxXSA9IHByb2ZpbGU7CisgICAgICAgICAgICBpbnQgYXJyYXlQcm9m
aWxlSW5kZXggPSBwY1tpICsgb3BMZW5ndGggLSAyXS51Lm9wZXJhbmQ7CiAgICAgICAgICAgICBt
X2FycmF5UHJvZmlsZXNbYXJyYXlQcm9maWxlSW5kZXhdID0gQXJyYXlQcm9maWxlKGkpOwotICAg
ICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyBvcExlbmd0aCAtIDFdID0gJm1fYXJyYXlQcm9maWxl
c1thcnJheVByb2ZpbGVJbmRleF07CisgICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIG9wTGVu
Z3RoIC0gMl0gPSAmbV9hcnJheVByb2ZpbGVzW2FycmF5UHJvZmlsZUluZGV4XTsKICNlbmRpZgog
I2lmIEVOQUJMRShMTElOVCkKLSAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgNF0gPSAmbV9s
bGludENhbGxMaW5rSW5mb3NbcGNbaSArIDRdLnUub3BlcmFuZF07CisgICAgICAgICAgICBpbnN0
cnVjdGlvbnNbaSArIDVdID0gJm1fbGxpbnRDYWxsTGlua0luZm9zW3BjW2kgKyA1XS51Lm9wZXJh
bmRdOwogI2VuZGlmCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBjYXNl
IG9wX2NvbnN0cnVjdDoKKyAgICAgICAgY2FzZSBvcF9jb25zdHJ1Y3Q6IHsKICNpZiBFTkFCTEUo
TExJTlQpCi0gICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIDRdID0gJm1fbGxpbnRDYWxsTGlu
a0luZm9zW3BjW2kgKyA0XS51Lm9wZXJhbmRdOworICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kg
KyA1XSA9ICZtX2xsaW50Q2FsbExpbmtJbmZvc1twY1tpICsgNV0udS5vcGVyYW5kXTsKKyNlbmRp
ZgorI2lmIEVOQUJMRShERkdfSklUKQorICAgICAgICAgICAgVmFsdWVQcm9maWxlKiBwcm9maWxl
ID0gJm1fdmFsdWVQcm9maWxlc1twY1tpICsgb3BMZW5ndGggLSAxXS51Lm9wZXJhbmRdOworICAg
ICAgICAgICAgQVNTRVJUKHByb2ZpbGUtPm1fYnl0ZWNvZGVPZmZzZXQgPT0gLTEpOworICAgICAg
ICAgICAgcHJvZmlsZS0+bV9ieXRlY29kZU9mZnNldCA9IGk7CisgICAgICAgICAgICBpbnN0cnVj
dGlvbnNbaSArIG9wTGVuZ3RoIC0gMV0gPSBwcm9maWxlOwogI2VuZGlmCiAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQogICAgICAgICBjYXNlIG9wX2dldF9ieV9pZF9vdXRfb2ZfbGluZToK
ICAgICAgICAgY2FzZSBvcF9nZXRfYnlfaWRfc2VsZjoKICAgICAgICAgY2FzZSBvcF9nZXRfYnlf
aWRfcHJvdG86CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2Nr
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9j
ay5oCShyZXZpc2lvbiAxNTEwMDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTk1MCw3ICs5NTAsNyBAQCBwcml2YXRlOgog
ICAgIHZvaWQgcHJpbnRHZXRCeUlkT3AoUHJpbnRTdHJlYW0mLCBFeGVjU3RhdGUqLCBpbnQgbG9j
YXRpb24sIGNvbnN0IEluc3RydWN0aW9uKiYpOwogICAgIHZvaWQgcHJpbnRHZXRCeUlkQ2FjaGVT
dGF0dXMoUHJpbnRTdHJlYW0mLCBFeGVjU3RhdGUqLCBpbnQgbG9jYXRpb24pOwogICAgIGVudW0g
Q2FjaGVEdW1wTW9kZSB7IER1bXBDYWNoZXMsIERvbnREdW1wQ2FjaGVzIH07Ci0gICAgdm9pZCBw
cmludENhbGxPcChQcmludFN0cmVhbSYsIEV4ZWNTdGF0ZSosIGludCBsb2NhdGlvbiwgY29uc3Qg
SW5zdHJ1Y3Rpb24qJiwgY29uc3QgY2hhciogb3AsIENhY2hlRHVtcE1vZGUpOworICAgIHZvaWQg
cHJpbnRDYWxsT3AoUHJpbnRTdHJlYW0mLCBFeGVjU3RhdGUqLCBpbnQgbG9jYXRpb24sIGNvbnN0
IEluc3RydWN0aW9uKiYsIGNvbnN0IGNoYXIqIG9wLCBDYWNoZUR1bXBNb2RlLCBib29sJiBoYXNQ
cmludGVkUHJvZmlsaW5nKTsKICAgICB2b2lkIHByaW50UHV0QnlJZE9wKFByaW50U3RyZWFtJiwg
RXhlY1N0YXRlKiwgaW50IGxvY2F0aW9uLCBjb25zdCBJbnN0cnVjdGlvbiomLCBjb25zdCBjaGFy
KiBvcCk7CiAgICAgdm9pZCBiZWdpbkR1bXBQcm9maWxpbmcoUHJpbnRTdHJlYW0mLCBib29sJiBo
YXNQcmludGVkUHJvZmlsaW5nKTsKICAgICB2b2lkIGR1bXBWYWx1ZVByb2ZpbGluZyhQcmludFN0
cmVhbSYsIGNvbnN0IEluc3RydWN0aW9uKiYsIGJvb2wmIGhhc1ByaW50ZWRQcm9maWxpbmcpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wY29kZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9PcGNvZGUuaAkocmV2aXNpb24gMTUx
MDA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL09wY29kZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xNzksMTYgKzE3OSwxNSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBcCiAgICAg
bWFjcm8ob3BfbmV3X2Z1bmMsIDQpIFwKICAgICBtYWNybyhvcF9uZXdfZnVuY19leHAsIDMpIFwK
LSAgICBtYWNybyhvcF9jYWxsLCA2KSBcCi0gICAgbWFjcm8ob3BfY2FsbF9ldmFsLCA2KSBcCi0g
ICAgbWFjcm8ob3BfY2FsbF92YXJhcmdzLCA2KSBcCisgICAgbWFjcm8ob3BfY2FsbCwgOCkgLyog
aGFzIHZhbHVlIHByb2ZpbGluZyAqLyBcCisgICAgbWFjcm8ob3BfY2FsbF9ldmFsLCA4KSAvKiBo
YXMgdmFsdWUgcHJvZmlsaW5nICovIFwKKyAgICBtYWNybyhvcF9jYWxsX3ZhcmFyZ3MsIDgpIC8q
IGhhcyB2YWx1ZSBwcm9maWxpbmcgKi8gXAogICAgIG1hY3JvKG9wX3RlYXJfb2ZmX2FjdGl2YXRp
b24sIDIpIFwKICAgICBtYWNybyhvcF90ZWFyX29mZl9hcmd1bWVudHMsIDMpIFwKICAgICBtYWNy
byhvcF9yZXQsIDIpIFwKLSAgICBtYWNybyhvcF9jYWxsX3B1dF9yZXN1bHQsIDMpIC8qIGhhcyB2
YWx1ZSBwcm9maWxpbmcgKi8gXAogICAgIG1hY3JvKG9wX3JldF9vYmplY3Rfb3JfdGhpcywgMykg
XAogICAgIFwKLSAgICBtYWNybyhvcF9jb25zdHJ1Y3QsIDYpIFwKKyAgICBtYWNybyhvcF9jb25z
dHJ1Y3QsIDgpIFwKICAgICBtYWNybyhvcF9zdHJjYXQsIDQpIFwKICAgICBtYWNybyhvcF90b19w
cmltaXRpdmUsIDMpIFwKICAgICBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
bXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMTUx
MDA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVy
YXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4NDYsNyArMTg0NiwxMCBAQCBSZWdpc3RlcklE
KiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENhbGwoCiAgICAgCiAgICAgLy8gRW1pdCBjYWxsLgog
ICAgIFVubGlua2VkQXJyYXlQcm9maWxlIGFycmF5UHJvZmlsZSA9IG5ld0FycmF5UHJvZmlsZSgp
OwotICAgIGVtaXRPcGNvZGUob3Bjb2RlSUQpOworICAgIFVubGlua2VkVmFsdWVQcm9maWxlIHBy
b2ZpbGUgPSBlbWl0UHJvZmlsZWRPcGNvZGUob3Bjb2RlSUQpOworICAgIEFTU0VSVChkc3QpOwor
ICAgIEFTU0VSVChkc3QgIT0gaWdub3JlZFJlc3VsdCgpKTsKKyAgICBpbnN0cnVjdGlvbnMoKS5h
cHBlbmQoZHN0LT5pbmRleCgpKTsgLy8gcmVzdWx0CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5k
KGZ1bmMtPmluZGV4KCkpOyAvLyBmdW5jCiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGNhbGxB
cmd1bWVudHMuYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSk7IC8vIGFyZ0NvdW50CiAgICAg
aW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGNhbGxBcmd1bWVudHMucmVnaXN0ZXJPZmZzZXQoKSk7IC8v
IHJlZ2lzdGVyT2Zmc2V0CkBAIC0xODU2LDExICsxODU5LDcgQEAgUmVnaXN0ZXJJRCogQnl0ZWNv
ZGVHZW5lcmF0b3I6OmVtaXRDYWxsKAogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCgwKTsKICNl
bmRpZgogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChhcnJheVByb2ZpbGUpOwotICAgIGlmIChk
c3QgIT0gaWdub3JlZFJlc3VsdCgpKSB7Ci0gICAgICAgIFVubGlua2VkVmFsdWVQcm9maWxlIHBy
b2ZpbGUgPSBlbWl0UHJvZmlsZWRPcGNvZGUob3BfY2FsbF9wdXRfcmVzdWx0KTsKLSAgICAgICAg
aW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGtpbGwoZHN0KSk7Ci0gICAgICAgIGluc3RydWN0aW9ucygp
LmFwcGVuZChwcm9maWxlKTsKLSAgICB9CisgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHByb2Zp
bGUpOwogICAgIAogICAgIGlmIChleHBlY3RlZEZ1bmN0aW9uICE9IE5vRXhwZWN0ZWRGdW5jdGlv
bikKICAgICAgICAgZW1pdExhYmVsKGRvbmUuZ2V0KCkpOwpAQCAtMTg4NCwxNyArMTg4MywxNSBA
QCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdENhbGxWCiAgICAgZW1pdEV4cHJl
c3Npb25JbmZvKGRpdm90LCBzdGFydE9mZnNldCwgZW5kT2Zmc2V0KTsKIAogICAgIC8vIEVtaXQg
Y2FsbC4KLSAgICBlbWl0T3Bjb2RlKG9wX2NhbGxfdmFyYXJncyk7CisgICAgVW5saW5rZWRWYWx1
ZVByb2ZpbGUgcHJvZmlsZSA9IGVtaXRQcm9maWxlZE9wY29kZShvcF9jYWxsX3ZhcmFyZ3MpOwor
ICAgIEFTU0VSVChkc3QgIT0gaWdub3JlZFJlc3VsdCgpKTsKKyAgICBpbnN0cnVjdGlvbnMoKS5h
cHBlbmQoZHN0LT5pbmRleCgpKTsKICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoZnVuYy0+aW5k
ZXgoKSk7CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHRoaXNSZWdpc3Rlci0+aW5kZXgoKSk7
CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGFyZ3VtZW50cy0+aW5kZXgoKSk7CiAgICAgaW5z
dHJ1Y3Rpb25zKCkuYXBwZW5kKGZpcnN0RnJlZVJlZ2lzdGVyLT5pbmRleCgpKTsKICAgICBpbnN0
cnVjdGlvbnMoKS5hcHBlbmQoMCk7IC8vIFBhZCB0byBtYWtlIGl0IGFzIGJpZyBhcyBhbiBvcF9j
YWxsLgotICAgIGlmIChkc3QgIT0gaWdub3JlZFJlc3VsdCgpKSB7Ci0gICAgICAgIFVubGlua2Vk
VmFsdWVQcm9maWxlIHByb2ZpbGUgPSBlbWl0UHJvZmlsZWRPcGNvZGUob3BfY2FsbF9wdXRfcmVz
dWx0KTsKLSAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGtpbGwoZHN0KSk7Ci0gICAgICAg
IGluc3RydWN0aW9ucygpLmFwcGVuZChwcm9maWxlKTsKLSAgICB9CisgICAgaW5zdHJ1Y3Rpb25z
KCkuYXBwZW5kKHByb2ZpbGUpOwogICAgIGlmIChtX3Nob3VsZEVtaXRQcm9maWxlSG9va3MpIHsK
ICAgICAgICAgZW1pdE9wY29kZShvcF9wcm9maWxlX2RpZF9jYWxsKTsKICAgICAgICAgaW5zdHJ1
Y3Rpb25zKCkuYXBwZW5kKHByb2ZpbGVIb29rUmVnaXN0ZXItPmluZGV4KCkpOwpAQCAtMTk2Myw3
ICsxOTYwLDkgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRDb25zdAogICAg
IFJlZlB0cjxMYWJlbD4gZG9uZSA9IG5ld0xhYmVsKCk7CiAgICAgZXhwZWN0ZWRGdW5jdGlvbiA9
IGVtaXRFeHBlY3RlZEZ1bmN0aW9uU25pcHBldChkc3QsIGZ1bmMsIGV4cGVjdGVkRnVuY3Rpb24s
IGNhbGxBcmd1bWVudHMsIGRvbmUuZ2V0KCkpOwogCi0gICAgZW1pdE9wY29kZShvcF9jb25zdHJ1
Y3QpOworICAgIFVubGlua2VkVmFsdWVQcm9maWxlIHByb2ZpbGUgPSBlbWl0UHJvZmlsZWRPcGNv
ZGUob3BfY29uc3RydWN0KTsKKyAgICBBU1NFUlQoZHN0ICE9IGlnbm9yZWRSZXN1bHQoKSk7Cisg
ICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGRzdC0+aW5kZXgoKSk7CiAgICAgaW5zdHJ1Y3Rpb25z
KCkuYXBwZW5kKGZ1bmMtPmluZGV4KCkpOyAvLyBmdW5jCiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBw
ZW5kKGNhbGxBcmd1bWVudHMuYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMoKSk7IC8vIGFyZ0Nv
dW50CiAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGNhbGxBcmd1bWVudHMucmVnaXN0ZXJPZmZz
ZXQoKSk7IC8vIHJlZ2lzdGVyT2Zmc2V0CkBAIC0xOTczLDExICsxOTcyLDcgQEAgUmVnaXN0ZXJJ
RCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRDb25zdAogICAgIGluc3RydWN0aW9ucygpLmFwcGVu
ZCgwKTsKICNlbmRpZgogICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCgwKTsKLSAgICBpZiAoZHN0
ICE9IGlnbm9yZWRSZXN1bHQoKSkgewotICAgICAgICBVbmxpbmtlZFZhbHVlUHJvZmlsZSBwcm9m
aWxlID0gZW1pdFByb2ZpbGVkT3Bjb2RlKG9wX2NhbGxfcHV0X3Jlc3VsdCk7Ci0gICAgICAgIGlu
c3RydWN0aW9ucygpLmFwcGVuZChraWxsKGRzdCkpOwotICAgICAgICBpbnN0cnVjdGlvbnMoKS5h
cHBlbmQocHJvZmlsZSk7Ci0gICAgfQorICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChwcm9maWxl
KTsKIAogICAgIGlmIChleHBlY3RlZEZ1bmN0aW9uICE9IE5vRXhwZWN0ZWRGdW5jdGlvbikKICAg
ICAgICAgZW1pdExhYmVsKGRvbmUuZ2V0KCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAkocmV2aXNpb24gMTUxMDA1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0zNzIsOCArMzcyLDkgQEAgUmVnaXN0ZXJJRCogTmV3RXhwck5v
ZGU6OmVtaXRCeXRlY29kZShCeQogICAgIGVsc2UKICAgICAgICAgZXhwZWN0ZWRGdW5jdGlvbiA9
IE5vRXhwZWN0ZWRGdW5jdGlvbjsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZnVuYyA9IGdlbmVy
YXRvci5lbWl0Tm9kZShtX2V4cHIpOworICAgIFJlZlB0cjxSZWdpc3RlcklEPiByZXR1cm5WYWx1
ZSA9IGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCwgZnVuYy5nZXQoKSk7CiAgICAgQ2Fs
bEFyZ3VtZW50cyBjYWxsQXJndW1lbnRzKGdlbmVyYXRvciwgbV9hcmdzKTsKLSAgICByZXR1cm4g
Z2VuZXJhdG9yLmVtaXRDb25zdHJ1Y3QoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb25Pcklnbm9y
ZWQoZHN0KSwgZnVuYy5nZXQoKSwgZXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFyZ3VtZW50cywgZGl2
b3QoKSwgc3RhcnRPZmZzZXQoKSwgZW5kT2Zmc2V0KCkpOworICAgIHJldHVybiBnZW5lcmF0b3Iu
ZW1pdENvbnN0cnVjdChyZXR1cm5WYWx1ZS5nZXQoKSwgZnVuYy5nZXQoKSwgZXhwZWN0ZWRGdW5j
dGlvbiwgY2FsbEFyZ3VtZW50cywgZGl2b3QoKSwgc3RhcnRPZmZzZXQoKSwgZW5kT2Zmc2V0KCkp
OwogfQogCiBpbmxpbmUgQ2FsbEFyZ3VtZW50czo6Q2FsbEFyZ3VtZW50cyhCeXRlY29kZUdlbmVy
YXRvciYgZ2VuZXJhdG9yLCBBcmd1bWVudHNOb2RlKiBhcmd1bWVudHNOb2RlKQpAQCAtNDE4LDkg
KzQxOSwxMCBAQCBSZWdpc3RlcklEKiBFdmFsRnVuY3Rpb25DYWxsTm9kZTo6ZW1pdEJ5CiBSZWdp
c3RlcklEKiBGdW5jdGlvbkNhbGxWYWx1ZU5vZGU6OmVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVy
YXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7CiAgICAgUmVmUHRyPFJlZ2lzdGVy
SUQ+IGZ1bmMgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9leHByKTsKKyAgICBSZWZQdHI8UmVnaXN0
ZXJJRD4gcmV0dXJuVmFsdWUgPSBnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIGZ1bmMu
Z2V0KCkpOwogICAgIENhbGxBcmd1bWVudHMgY2FsbEFyZ3VtZW50cyhnZW5lcmF0b3IsIG1fYXJn
cyk7CiAgICAgZ2VuZXJhdG9yLmVtaXRMb2FkKGNhbGxBcmd1bWVudHMudGhpc1JlZ2lzdGVyKCks
IGpzVW5kZWZpbmVkKCkpOwotICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdENhbGwoZ2VuZXJhdG9y
LmZpbmFsRGVzdGluYXRpb25Pcklnbm9yZWQoZHN0LCBmdW5jLmdldCgpKSwgZnVuYy5nZXQoKSwg
Tm9FeHBlY3RlZEZ1bmN0aW9uLCBjYWxsQXJndW1lbnRzLCBkaXZvdCgpLCBzdGFydE9mZnNldCgp
LCBlbmRPZmZzZXQoKSk7CisgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0Q2FsbChyZXR1cm5WYWx1
ZS5nZXQoKSwgZnVuYy5nZXQoKSwgTm9FeHBlY3RlZEZ1bmN0aW9uLCBjYWxsQXJndW1lbnRzLCBk
aXZvdCgpLCBzdGFydE9mZnNldCgpLCBlbmRPZmZzZXQoKSk7CiB9CiAKIC8vIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLSBGdW5jdGlvbkNhbGxSZXNvbHZlTm9kZSAtLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC00MzIsMjggKzQzNCwzMSBAQCBSZWdpc3RlcklEKiBG
dW5jdGlvbkNhbGxSZXNvbHZlTm9kZTo6ZW1pCiAKICAgICBpZiAoUmVnaXN0ZXJJRCogbG9jYWwg
PSByZXNvbHZlUmVzdWx0LmxvY2FsKCkpIHsKICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGZ1
bmMgPSBnZW5lcmF0b3IuZW1pdE1vdmUoZ2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlvbihkc3QpLCBs
b2NhbCk7CisgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiByZXR1cm5WYWx1ZSA9IGdlbmVyYXRv
ci5maW5hbERlc3RpbmF0aW9uKGRzdCwgZnVuYy5nZXQoKSk7CiAgICAgICAgIENhbGxBcmd1bWVu
dHMgY2FsbEFyZ3VtZW50cyhnZW5lcmF0b3IsIG1fYXJncyk7CiAgICAgICAgIGdlbmVyYXRvci5l
bWl0TG9hZChjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCBqc1VuZGVmaW5lZCgpKTsKICAg
ICAgICAgLy8gVGhpcyBwYXNzZXMgTm9FeHBlY3RlZEZ1bmN0aW9uIGJlY2F1c2Ugd2UgZXhwZWN0
IHRoYXQgaWYgdGhlIGZ1bmN0aW9uIGlzIGluIGEKICAgICAgICAgLy8gbG9jYWwgdmFyaWFibGUs
IHRoZW4gaXQncyBub3Qgb25lIG9mIG91ciBidWlsdC1pbiBjb25zdHJ1Y3RvcnMuCi0gICAgICAg
IHJldHVybiBnZW5lcmF0b3IuZW1pdENhbGwoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb25Pckln
bm9yZWQoZHN0LCBjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpKSwgZnVuYy5nZXQoKSwgTm9F
eHBlY3RlZEZ1bmN0aW9uLCBjYWxsQXJndW1lbnRzLCBkaXZvdCgpLCBzdGFydE9mZnNldCgpLCBl
bmRPZmZzZXQoKSk7CisgICAgICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdENhbGwocmV0dXJuVmFs
dWUuZ2V0KCksIGZ1bmMuZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFyZ3VtZW50cywg
ZGl2b3QoKSwgc3RhcnRPZmZzZXQoKSwgZW5kT2Zmc2V0KCkpOwogICAgIH0KIAogICAgIGlmIChy
ZXNvbHZlUmVzdWx0LmlzU3RhdGljKCkpIHsKICAgICAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGZ1
bmMgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7CisgICAgICAgIFJlZlB0cjxSZWdpc3RlcklE
PiByZXR1cm5WYWx1ZSA9IGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCwgZnVuYy5nZXQo
KSk7CiAgICAgICAgIENhbGxBcmd1bWVudHMgY2FsbEFyZ3VtZW50cyhnZW5lcmF0b3IsIG1fYXJn
cyk7CiAgICAgICAgIGdlbmVyYXRvci5lbWl0R2V0U3RhdGljVmFyKGZ1bmMuZ2V0KCksIHJlc29s
dmVSZXN1bHQsIG1faWRlbnQpOwogICAgICAgICBnZW5lcmF0b3IuZW1pdExvYWQoY2FsbEFyZ3Vt
ZW50cy50aGlzUmVnaXN0ZXIoKSwganNVbmRlZmluZWQoKSk7Ci0gICAgICAgIHJldHVybiBnZW5l
cmF0b3IuZW1pdENhbGwoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb25Pcklnbm9yZWQoZHN0LCBm
dW5jLmdldCgpKSwgZnVuYy5nZXQoKSwgZXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFyZ3VtZW50cywg
ZGl2b3QoKSwgc3RhcnRPZmZzZXQoKSwgZW5kT2Zmc2V0KCkpOworICAgICAgICByZXR1cm4gZ2Vu
ZXJhdG9yLmVtaXRDYWxsKHJldHVyblZhbHVlLmdldCgpLCBmdW5jLmdldCgpLCBleHBlY3RlZEZ1
bmN0aW9uLCBjYWxsQXJndW1lbnRzLCBkaXZvdCgpLCBzdGFydE9mZnNldCgpLCBlbmRPZmZzZXQo
KSk7CiAgICAgfQogCiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGZ1bmMgPSBnZW5lcmF0b3IubmV3
VGVtcG9yYXJ5KCk7CisgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHJldHVyblZhbHVlID0gZ2VuZXJh
dG9yLmZpbmFsRGVzdGluYXRpb24oZHN0LCBmdW5jLmdldCgpKTsKICAgICBDYWxsQXJndW1lbnRz
IGNhbGxBcmd1bWVudHMoZ2VuZXJhdG9yLCBtX2FyZ3MpOwogICAgIGludCBpZGVudGlmaWVyU3Rh
cnQgPSBkaXZvdCgpIC0gc3RhcnRPZmZzZXQoKTsKIAogICAgIGdlbmVyYXRvci5lbWl0RXhwcmVz
c2lvbkluZm8oaWRlbnRpZmllclN0YXJ0ICsgbV9pZGVudC5sZW5ndGgoKSwgbV9pZGVudC5sZW5n
dGgoKSwgMCk7CiAgICAgZ2VuZXJhdG9yLmVtaXRSZXNvbHZlV2l0aFRoaXMoY2FsbEFyZ3VtZW50
cy50aGlzUmVnaXN0ZXIoKSwgZnVuYy5nZXQoKSwgcmVzb2x2ZVJlc3VsdCwgbV9pZGVudCk7Ci0g
ICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0Q2FsbChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbk9y
SWdub3JlZChkc3QsIGZ1bmMuZ2V0KCkpLCBmdW5jLmdldCgpLCBleHBlY3RlZEZ1bmN0aW9uLCBj
YWxsQXJndW1lbnRzLCBkaXZvdCgpLCBzdGFydE9mZnNldCgpLCBlbmRPZmZzZXQoKSk7CisgICAg
cmV0dXJuIGdlbmVyYXRvci5lbWl0Q2FsbChyZXR1cm5WYWx1ZS5nZXQoKSwgZnVuYy5nZXQoKSwg
ZXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFyZ3VtZW50cywgZGl2b3QoKSwgc3RhcnRPZmZzZXQoKSwg
ZW5kT2Zmc2V0KCkpOwogfQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRnVu
Y3Rpb25DYWxsQnJhY2tldE5vZGUgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpA
QCAtNDY0LDkgKzQ2OSwxMCBAQCBSZWdpc3RlcklEKiBGdW5jdGlvbkNhbGxCcmFja2V0Tm9kZTo6
ZW1pCiAgICAgUmVnaXN0ZXJJRCogcHJvcGVydHkgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9zdWJz
Y3JpcHQpOwogICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSAtIG1fc3Vi
ZXhwcmVzc2lvbkRpdm90T2Zmc2V0LCBzdGFydE9mZnNldCgpIC0gbV9zdWJleHByZXNzaW9uRGl2
b3RPZmZzZXQsIG1fc3ViZXhwcmVzc2lvbkVuZE9mZnNldCk7CiAgICAgUmVmUHRyPFJlZ2lzdGVy
SUQ+IGZ1bmN0aW9uID0gZ2VuZXJhdG9yLmVtaXRHZXRCeVZhbChnZW5lcmF0b3IudGVtcERlc3Rp
bmF0aW9uKGRzdCksIGJhc2UuZ2V0KCksIHByb3BlcnR5KTsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJ
RD4gcmV0dXJuVmFsdWUgPSBnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIGZ1bmN0aW9u
LmdldCgpKTsKICAgICBDYWxsQXJndW1lbnRzIGNhbGxBcmd1bWVudHMoZ2VuZXJhdG9yLCBtX2Fy
Z3MpOwogICAgIGdlbmVyYXRvci5lbWl0TW92ZShjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3Rlcigp
LCBiYXNlLmdldCgpKTsKLSAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRDYWxsKGdlbmVyYXRvci5m
aW5hbERlc3RpbmF0aW9uT3JJZ25vcmVkKGRzdCwgZnVuY3Rpb24uZ2V0KCkpLCBmdW5jdGlvbi5n
ZXQoKSwgTm9FeHBlY3RlZEZ1bmN0aW9uLCBjYWxsQXJndW1lbnRzLCBkaXZvdCgpLCBzdGFydE9m
ZnNldCgpLCBlbmRPZmZzZXQoKSk7CisgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0Q2FsbChyZXR1
cm5WYWx1ZS5nZXQoKSwgZnVuY3Rpb24uZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFy
Z3VtZW50cywgZGl2b3QoKSwgc3RhcnRPZmZzZXQoKSwgZW5kT2Zmc2V0KCkpOwogfQogCiAvLyAt
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gRnVuY3Rpb25DYWxsRG90Tm9kZSAtLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC00NzQsMTEgKzQ4MCwxMiBAQCBSZWdpc3Rl
cklEKiBGdW5jdGlvbkNhbGxCcmFja2V0Tm9kZTo6ZW1pCiBSZWdpc3RlcklEKiBGdW5jdGlvbkNh
bGxEb3ROb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVn
aXN0ZXJJRCogZHN0KQogewogICAgIFJlZlB0cjxSZWdpc3RlcklEPiBmdW5jdGlvbiA9IGdlbmVy
YXRvci50ZW1wRGVzdGluYXRpb24oZHN0KTsKKyAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcmV0dXJu
VmFsdWUgPSBnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIGZ1bmN0aW9uLmdldCgpKTsK
ICAgICBDYWxsQXJndW1lbnRzIGNhbGxBcmd1bWVudHMoZ2VuZXJhdG9yLCBtX2FyZ3MpOwogICAg
IGdlbmVyYXRvci5lbWl0Tm9kZShjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCBtX2Jhc2Up
OwogICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSAtIG1fc3ViZXhwcmVz
c2lvbkRpdm90T2Zmc2V0LCBzdGFydE9mZnNldCgpIC0gbV9zdWJleHByZXNzaW9uRGl2b3RPZmZz
ZXQsIG1fc3ViZXhwcmVzc2lvbkVuZE9mZnNldCk7CiAgICAgZ2VuZXJhdG9yLmVtaXRHZXRCeUlk
KGZ1bmN0aW9uLmdldCgpLCBjYWxsQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCBtX2lkZW50KTsK
LSAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRDYWxsKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9u
T3JJZ25vcmVkKGRzdCwgZnVuY3Rpb24uZ2V0KCkpLCBmdW5jdGlvbi5nZXQoKSwgTm9FeHBlY3Rl
ZEZ1bmN0aW9uLCBjYWxsQXJndW1lbnRzLCBkaXZvdCgpLCBzdGFydE9mZnNldCgpLCBlbmRPZmZz
ZXQoKSk7CisgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0Q2FsbChyZXR1cm5WYWx1ZS5nZXQoKSwg
ZnVuY3Rpb24uZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFyZ3VtZW50cywgZGl2b3Qo
KSwgc3RhcnRPZmZzZXQoKSwgZW5kT2Zmc2V0KCkpOwogfQogCiBSZWdpc3RlcklEKiBDYWxsRnVu
Y3Rpb25DYWxsRG90Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0
b3IsIFJlZ2lzdGVySUQqIGRzdCkKQEAgLTQ4OCw3ICs0OTUsNyBAQCBSZWdpc3RlcklEKiBDYWxs
RnVuY3Rpb25DYWxsRG90Tm9kZTo6ZW1pCiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGJhc2UgPSBn
ZW5lcmF0b3IuZW1pdE5vZGUobV9iYXNlKTsKICAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25J
bmZvKGRpdm90KCkgLSBtX3N1YmV4cHJlc3Npb25EaXZvdE9mZnNldCwgc3RhcnRPZmZzZXQoKSAt
IG1fc3ViZXhwcmVzc2lvbkRpdm90T2Zmc2V0LCBtX3N1YmV4cHJlc3Npb25FbmRPZmZzZXQpOwog
ICAgIFJlZlB0cjxSZWdpc3RlcklEPiBmdW5jdGlvbiA9IGdlbmVyYXRvci5lbWl0R2V0QnlJZChn
ZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKGRzdCksIGJhc2UuZ2V0KCksIG1faWRlbnQpOwotICAg
IFJlZlB0cjxSZWdpc3RlcklEPiBmaW5hbERlc3RpbmF0aW9uT3JJZ25vcmVkID0gZ2VuZXJhdG9y
LmZpbmFsRGVzdGluYXRpb25Pcklnbm9yZWQoZHN0LCBmdW5jdGlvbi5nZXQoKSk7CisgICAgUmVm
UHRyPFJlZ2lzdGVySUQ+IHJldHVyblZhbHVlID0gZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24o
ZHN0LCBmdW5jdGlvbi5nZXQoKSk7CiAgICAgZ2VuZXJhdG9yLmVtaXRKdW1wSWZOb3RGdW5jdGlv
bkNhbGwoZnVuY3Rpb24uZ2V0KCksIHJlYWxDYWxsLmdldCgpKTsKICAgICB7CiAgICAgICAgIGlm
IChtX2FyZ3MtPm1fbGlzdE5vZGUgJiYgbV9hcmdzLT5tX2xpc3ROb2RlLT5tX2V4cHIpIHsKQEAg
LTQ5OCw3ICs1MDUsNyBAQCBSZWdpc3RlcklEKiBDYWxsRnVuY3Rpb25DYWxsRG90Tm9kZTo6ZW1p
CiAgICAgICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcmVhbEZ1bmN0aW9uID0gZ2VuZXJhdG9y
LmVtaXRNb3ZlKGdlbmVyYXRvci50ZW1wRGVzdGluYXRpb24oZHN0KSwgYmFzZS5nZXQoKSk7CiAg
ICAgICAgICAgICBDYWxsQXJndW1lbnRzIGNhbGxBcmd1bWVudHMoZ2VuZXJhdG9yLCBtX2FyZ3Mp
OwogICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXROb2RlKGNhbGxBcmd1bWVudHMudGhpc1JlZ2lz
dGVyKCksIG9sZExpc3QtPm1fZXhwcik7Ci0gICAgICAgICAgICBnZW5lcmF0b3IuZW1pdENhbGwo
ZmluYWxEZXN0aW5hdGlvbk9ySWdub3JlZC5nZXQoKSwgcmVhbEZ1bmN0aW9uLmdldCgpLCBOb0V4
cGVjdGVkRnVuY3Rpb24sIGNhbGxBcmd1bWVudHMsIGRpdm90KCksIHN0YXJ0T2Zmc2V0KCksIGVu
ZE9mZnNldCgpKTsKKyAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0Q2FsbChyZXR1cm5WYWx1ZS5n
ZXQoKSwgcmVhbEZ1bmN0aW9uLmdldCgpLCBOb0V4cGVjdGVkRnVuY3Rpb24sIGNhbGxBcmd1bWVu
dHMsIGRpdm90KCksIHN0YXJ0T2Zmc2V0KCksIGVuZE9mZnNldCgpKTsKICAgICAgICAgICAgIGdl
bmVyYXRvci5lbWl0SnVtcChlbmQuZ2V0KCkpOwogCiAgICAgICAgICAgICBtX2FyZ3MtPm1fbGlz
dE5vZGUgPSBvbGRMaXN0OwpAQCAtNTA2LDcgKzUxMyw3IEBAIFJlZ2lzdGVySUQqIENhbGxGdW5j
dGlvbkNhbGxEb3ROb2RlOjplbWkKICAgICAgICAgICAgIFJlZlB0cjxSZWdpc3RlcklEPiByZWFs
RnVuY3Rpb24gPSBnZW5lcmF0b3IuZW1pdE1vdmUoZ2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlvbihk
c3QpLCBiYXNlLmdldCgpKTsKICAgICAgICAgICAgIENhbGxBcmd1bWVudHMgY2FsbEFyZ3VtZW50
cyhnZW5lcmF0b3IsIG1fYXJncyk7CiAgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdExvYWQoY2Fs
bEFyZ3VtZW50cy50aGlzUmVnaXN0ZXIoKSwganNVbmRlZmluZWQoKSk7Ci0gICAgICAgICAgICBn
ZW5lcmF0b3IuZW1pdENhbGwoZmluYWxEZXN0aW5hdGlvbk9ySWdub3JlZC5nZXQoKSwgcmVhbEZ1
bmN0aW9uLmdldCgpLCBOb0V4cGVjdGVkRnVuY3Rpb24sIGNhbGxBcmd1bWVudHMsIGRpdm90KCks
IHN0YXJ0T2Zmc2V0KCksIGVuZE9mZnNldCgpKTsKKyAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0
Q2FsbChyZXR1cm5WYWx1ZS5nZXQoKSwgcmVhbEZ1bmN0aW9uLmdldCgpLCBOb0V4cGVjdGVkRnVu
Y3Rpb24sIGNhbGxBcmd1bWVudHMsIGRpdm90KCksIHN0YXJ0T2Zmc2V0KCksIGVuZE9mZnNldCgp
KTsKICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0SnVtcChlbmQuZ2V0KCkpOwogICAgICAgICB9
CiAgICAgfQpAQCAtNTE0LDEwICs1MjEsMTAgQEAgUmVnaXN0ZXJJRCogQ2FsbEZ1bmN0aW9uQ2Fs
bERvdE5vZGU6OmVtaQogICAgIHsKICAgICAgICAgQ2FsbEFyZ3VtZW50cyBjYWxsQXJndW1lbnRz
KGdlbmVyYXRvciwgbV9hcmdzKTsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRNb3ZlKGNhbGxBcmd1
bWVudHMudGhpc1JlZ2lzdGVyKCksIGJhc2UuZ2V0KCkpOwotICAgICAgICBnZW5lcmF0b3IuZW1p
dENhbGwoZmluYWxEZXN0aW5hdGlvbk9ySWdub3JlZC5nZXQoKSwgZnVuY3Rpb24uZ2V0KCksIE5v
RXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFyZ3VtZW50cywgZGl2b3QoKSwgc3RhcnRPZmZzZXQoKSwg
ZW5kT2Zmc2V0KCkpOworICAgICAgICBnZW5lcmF0b3IuZW1pdENhbGwocmV0dXJuVmFsdWUuZ2V0
KCksIGZ1bmN0aW9uLmdldCgpLCBOb0V4cGVjdGVkRnVuY3Rpb24sIGNhbGxBcmd1bWVudHMsIGRp
dm90KCksIHN0YXJ0T2Zmc2V0KCksIGVuZE9mZnNldCgpKTsKICAgICB9CiAgICAgZ2VuZXJhdG9y
LmVtaXRMYWJlbChlbmQuZ2V0KCkpOwotICAgIHJldHVybiBmaW5hbERlc3RpbmF0aW9uT3JJZ25v
cmVkLmdldCgpOworICAgIHJldHVybiByZXR1cm5WYWx1ZS5nZXQoKTsKIH0KIAogc3RhdGljIGJv
b2wgYXJlVHJpdmlhbEFwcGx5QXJndW1lbnRzKEFyZ3VtZW50c05vZGUqIGFyZ3MpCkBAIC01Mzgs
NyArNTQ1LDcgQEAgUmVnaXN0ZXJJRCogQXBwbHlGdW5jdGlvbkNhbGxEb3ROb2RlOjplbQogICAg
IFJlZlB0cjxSZWdpc3RlcklEPiBiYXNlID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fYmFzZSk7CiAg
ICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgpIC0gbV9zdWJleHByZXNzaW9u
RGl2b3RPZmZzZXQsIHN0YXJ0T2Zmc2V0KCkgLSBtX3N1YmV4cHJlc3Npb25EaXZvdE9mZnNldCwg
bV9zdWJleHByZXNzaW9uRW5kT2Zmc2V0KTsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZnVuY3Rp
b24gPSBnZW5lcmF0b3IuZW1pdEdldEJ5SWQoZ2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlvbihkc3Qp
LCBiYXNlLmdldCgpLCBtX2lkZW50KTsKLSAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZmluYWxEZXN0
aW5hdGlvbk9ySWdub3JlZCA9IGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uT3JJZ25vcmVkKGRz
dCwgZnVuY3Rpb24uZ2V0KCkpOworICAgIFJlZlB0cjxSZWdpc3RlcklEPiByZXR1cm5WYWx1ZSA9
IGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCwgZnVuY3Rpb24uZ2V0KCkpOwogICAgIGdl
bmVyYXRvci5lbWl0SnVtcElmTm90RnVuY3Rpb25BcHBseShmdW5jdGlvbi5nZXQoKSwgcmVhbENh
bGwuZ2V0KCkpOwogICAgIHsKICAgICAgICAgaWYgKG1heUJlQ2FsbCkgewpAQCAtNTUxLDIwICs1
NTgsMjAgQEAgUmVnaXN0ZXJJRCogQXBwbHlGdW5jdGlvbkNhbGxEb3ROb2RlOjplbQogICAgICAg
ICAgICAgICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcmVhbEZ1bmN0aW9uID0gZ2VuZXJhdG9y
LmVtaXRNb3ZlKGdlbmVyYXRvci50ZW1wRGVzdGluYXRpb24oZHN0KSwgYmFzZS5nZXQoKSk7CiAg
ICAgICAgICAgICAgICAgICAgIENhbGxBcmd1bWVudHMgY2FsbEFyZ3VtZW50cyhnZW5lcmF0b3Is
IG1fYXJncyk7CiAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0Tm9kZShjYWxsQXJn
dW1lbnRzLnRoaXNSZWdpc3RlcigpLCBvbGRMaXN0LT5tX2V4cHIpOwotICAgICAgICAgICAgICAg
ICAgICBnZW5lcmF0b3IuZW1pdENhbGwoZmluYWxEZXN0aW5hdGlvbk9ySWdub3JlZC5nZXQoKSwg
cmVhbEZ1bmN0aW9uLmdldCgpLCBOb0V4cGVjdGVkRnVuY3Rpb24sIGNhbGxBcmd1bWVudHMsIGRp
dm90KCksIHN0YXJ0T2Zmc2V0KCksIGVuZE9mZnNldCgpKTsKKyAgICAgICAgICAgICAgICAgICAg
Z2VuZXJhdG9yLmVtaXRDYWxsKHJldHVyblZhbHVlLmdldCgpLCByZWFsRnVuY3Rpb24uZ2V0KCks
IE5vRXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFyZ3VtZW50cywgZGl2b3QoKSwgc3RhcnRPZmZzZXQo
KSwgZW5kT2Zmc2V0KCkpOwogICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAg
ICAgICAgIG1fYXJncy0+bV9saXN0Tm9kZSA9IG1fYXJncy0+bV9saXN0Tm9kZS0+bV9uZXh0Owog
ICAgICAgICAgICAgICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcmVhbEZ1bmN0aW9uID0gZ2Vu
ZXJhdG9yLmVtaXRNb3ZlKGdlbmVyYXRvci50ZW1wRGVzdGluYXRpb24oZHN0KSwgYmFzZS5nZXQo
KSk7CiAgICAgICAgICAgICAgICAgICAgIENhbGxBcmd1bWVudHMgY2FsbEFyZ3VtZW50cyhnZW5l
cmF0b3IsIG1fYXJncyk7CiAgICAgICAgICAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0Tm9kZShj
YWxsQXJndW1lbnRzLnRoaXNSZWdpc3RlcigpLCBvbGRMaXN0LT5tX2V4cHIpOwotICAgICAgICAg
ICAgICAgICAgICBnZW5lcmF0b3IuZW1pdENhbGwoZmluYWxEZXN0aW5hdGlvbk9ySWdub3JlZC5n
ZXQoKSwgcmVhbEZ1bmN0aW9uLmdldCgpLCBOb0V4cGVjdGVkRnVuY3Rpb24sIGNhbGxBcmd1bWVu
dHMsIGRpdm90KCksIHN0YXJ0T2Zmc2V0KCksIGVuZE9mZnNldCgpKTsKKyAgICAgICAgICAgICAg
ICAgICAgZ2VuZXJhdG9yLmVtaXRDYWxsKHJldHVyblZhbHVlLmdldCgpLCByZWFsRnVuY3Rpb24u
Z2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlvbiwgY2FsbEFyZ3VtZW50cywgZGl2b3QoKSwgc3RhcnRP
ZmZzZXQoKSwgZW5kT2Zmc2V0KCkpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICBtX2FyZ3MtPm1fbGlzdE5vZGUgPSBvbGRMaXN0OwogICAgICAgICAgICAgfSBlbHNlIHsKICAg
ICAgICAgICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcmVhbEZ1bmN0aW9uID0gZ2VuZXJhdG9y
LmVtaXRNb3ZlKGdlbmVyYXRvci50ZW1wRGVzdGluYXRpb24oZHN0KSwgYmFzZS5nZXQoKSk7CiAg
ICAgICAgICAgICAgICAgQ2FsbEFyZ3VtZW50cyBjYWxsQXJndW1lbnRzKGdlbmVyYXRvciwgbV9h
cmdzKTsKICAgICAgICAgICAgICAgICBnZW5lcmF0b3IuZW1pdExvYWQoY2FsbEFyZ3VtZW50cy50
aGlzUmVnaXN0ZXIoKSwganNVbmRlZmluZWQoKSk7Ci0gICAgICAgICAgICAgICAgZ2VuZXJhdG9y
LmVtaXRDYWxsKGZpbmFsRGVzdGluYXRpb25Pcklnbm9yZWQuZ2V0KCksIHJlYWxGdW5jdGlvbi5n
ZXQoKSwgTm9FeHBlY3RlZEZ1bmN0aW9uLCBjYWxsQXJndW1lbnRzLCBkaXZvdCgpLCBzdGFydE9m
ZnNldCgpLCBlbmRPZmZzZXQoKSk7CisgICAgICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRDYWxs
KHJldHVyblZhbHVlLmdldCgpLCByZWFsRnVuY3Rpb24uZ2V0KCksIE5vRXhwZWN0ZWRGdW5jdGlv
biwgY2FsbEFyZ3VtZW50cywgZGl2b3QoKSwgc3RhcnRPZmZzZXQoKSwgZW5kT2Zmc2V0KCkpOwog
ICAgICAgICAgICAgfQogICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgQVNTRVJUKG1fYXJn
cy0+bV9saXN0Tm9kZSAmJiBtX2FyZ3MtPm1fbGlzdE5vZGUtPm1fbmV4dCk7CkBAIC01ODUsNyAr
NTkyLDcgQEAgUmVnaXN0ZXJJRCogQXBwbHlGdW5jdGlvbkNhbGxEb3ROb2RlOjplbQogICAgICAg
ICAgICAgd2hpbGUgKChhcmdzID0gYXJncy0+bV9uZXh0KSkKICAgICAgICAgICAgICAgICBnZW5l
cmF0b3IuZW1pdE5vZGUoYXJncy0+bV9leHByKTsKIAotICAgICAgICAgICAgZ2VuZXJhdG9yLmVt
aXRDYWxsVmFyYXJncyhmaW5hbERlc3RpbmF0aW9uT3JJZ25vcmVkLmdldCgpLCByZWFsRnVuY3Rp
b24uZ2V0KCksIHRoaXNSZWdpc3Rlci5nZXQoKSwgYXJnc1JlZ2lzdGVyLmdldCgpLCBnZW5lcmF0
b3IubmV3VGVtcG9yYXJ5KCksIHByb2ZpbGVIb29rUmVnaXN0ZXIuZ2V0KCksIGRpdm90KCksIHN0
YXJ0T2Zmc2V0KCksIGVuZE9mZnNldCgpKTsKKyAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0Q2Fs
bFZhcmFyZ3MocmV0dXJuVmFsdWUuZ2V0KCksIHJlYWxGdW5jdGlvbi5nZXQoKSwgdGhpc1JlZ2lz
dGVyLmdldCgpLCBhcmdzUmVnaXN0ZXIuZ2V0KCksIGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwg
cHJvZmlsZUhvb2tSZWdpc3Rlci5nZXQoKSwgZGl2b3QoKSwgc3RhcnRPZmZzZXQoKSwgZW5kT2Zm
c2V0KCkpOwogICAgICAgICB9CiAgICAgICAgIGdlbmVyYXRvci5lbWl0SnVtcChlbmQuZ2V0KCkp
OwogICAgIH0KQEAgLTU5MywxMCArNjAwLDEwIEBAIFJlZ2lzdGVySUQqIEFwcGx5RnVuY3Rpb25D
YWxsRG90Tm9kZTo6ZW0KICAgICB7CiAgICAgICAgIENhbGxBcmd1bWVudHMgY2FsbEFyZ3VtZW50
cyhnZW5lcmF0b3IsIG1fYXJncyk7CiAgICAgICAgIGdlbmVyYXRvci5lbWl0TW92ZShjYWxsQXJn
dW1lbnRzLnRoaXNSZWdpc3RlcigpLCBiYXNlLmdldCgpKTsKLSAgICAgICAgZ2VuZXJhdG9yLmVt
aXRDYWxsKGZpbmFsRGVzdGluYXRpb25Pcklnbm9yZWQuZ2V0KCksIGZ1bmN0aW9uLmdldCgpLCBO
b0V4cGVjdGVkRnVuY3Rpb24sIGNhbGxBcmd1bWVudHMsIGRpdm90KCksIHN0YXJ0T2Zmc2V0KCks
IGVuZE9mZnNldCgpKTsKKyAgICAgICAgZ2VuZXJhdG9yLmVtaXRDYWxsKHJldHVyblZhbHVlLmdl
dCgpLCBmdW5jdGlvbi5nZXQoKSwgTm9FeHBlY3RlZEZ1bmN0aW9uLCBjYWxsQXJndW1lbnRzLCBk
aXZvdCgpLCBzdGFydE9mZnNldCgpLCBlbmRPZmZzZXQoKSk7CiAgICAgfQogICAgIGdlbmVyYXRv
ci5lbWl0TGFiZWwoZW5kLmdldCgpKTsKLSAgICByZXR1cm4gZmluYWxEZXN0aW5hdGlvbk9ySWdu
b3JlZC5nZXQoKTsKKyAgICByZXR1cm4gcmV0dXJuVmFsdWUuZ2V0KCk7CiB9CiAKIC8vIC0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSBQb3N0Zml4Tm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVD
b2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gMTUxMDA1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyOCw3
ICsxMjgsNiBAQCBwdWJsaWM6CiAgICAgICAgICwgbV9ncmFwaChncmFwaCkKICAgICAgICAgLCBt
X2N1cnJlbnRCbG9jaygwKQogICAgICAgICAsIG1fY3VycmVudEluZGV4KDApCi0gICAgICAgICwg
bV9jdXJyZW50UHJvZmlsaW5nSW5kZXgoMCkKICAgICAgICAgLCBtX2NvbnN0YW50VW5kZWZpbmVk
KFVJTlRfTUFYKQogICAgICAgICAsIG1fY29uc3RhbnROdWxsKFVJTlRfTUFYKQogICAgICAgICAs
IG1fY29uc3RhbnROYU4oVUlOVF9NQVgpCkBAIC0xNTksMTkgKzE1OCwxNyBAQCBwcml2YXRlOgog
ICAgIHZvaWQgcGFyc2VDb2RlQmxvY2soKTsKIAogICAgIC8vIEhlbHBlciBmb3IgbWluIGFuZCBt
YXguCi0gICAgYm9vbCBoYW5kbGVNaW5NYXgoYm9vbCB1c2VzUmVzdWx0LCBpbnQgcmVzdWx0T3Bl
cmFuZCwgTm9kZVR5cGUgb3AsIGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzKTsKKyAgICBib29sIGhhbmRsZU1pbk1heChpbnQgcmVzdWx0T3BlcmFuZCwg
Tm9kZVR5cGUgb3AsIGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzKTsKICAgICAKICAgICAvLyBIYW5kbGUgY2FsbHMuIFRoaXMgcmVzb2x2ZXMgaXNzdWVz
IHN1cnJvdW5kaW5nIGlubGluaW5nIGFuZCBpbnRyaW5zaWNzLgotICAgIHZvaWQgaGFuZGxlQ2Fs
bChJbnRlcnByZXRlciosIEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIE5vZGVUeXBl
IG9wLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kKTsKKyAgICB2b2lkIGhhbmRsZUNhbGwoSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgTm9kZVR5cGUgb3AsIENvZGVTcGVjaWFsaXphdGlv
bktpbmQpOwogICAgIHZvaWQgZW1pdEZ1bmN0aW9uQ2hlY2tzKGNvbnN0IENhbGxMaW5rU3RhdHVz
JiwgTm9kZSogY2FsbFRhcmdldCwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBDb2RlU3BlY2lhbGl6YXRp
b25LaW5kKTsKICAgICB2b2lkIGVtaXRBcmd1bWVudFBoYW50b21zKGludCByZWdpc3Rlck9mZnNl
dCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5k
KTsKICAgICAvLyBIYW5kbGUgaW5saW5pbmcuIFJldHVybiB0cnVlIGlmIGl0IHN1Y2NlZWRlZCwg
ZmFsc2UgaWYgd2UgbmVlZCB0byBwbGFudCBhIGNhbGwuCi0gICAgYm9vbCBoYW5kbGVJbmxpbmlu
Zyhib29sIHVzZXNSZXN1bHQsIE5vZGUqIGNhbGxUYXJnZXROb2RlLCBpbnQgcmVzdWx0T3BlcmFu
ZCwgY29uc3QgQ2FsbExpbmtTdGF0dXMmLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcywgdW5zaWduZWQgbmV4dE9mZnNldCwgQ29kZVNwZWNpYWxpemF0
aW9uS2luZCk7Ci0gICAgLy8gSGFuZGxlIHNldHRpbmcgdGhlIHJlc3VsdCBvZiBhbiBpbnRyaW5z
aWMuCi0gICAgdm9pZCBzZXRJbnRyaW5zaWNSZXN1bHQoYm9vbCB1c2VzUmVzdWx0LCBpbnQgcmVz
dWx0T3BlcmFuZCwgTm9kZSopOworICAgIGJvb2wgaGFuZGxlSW5saW5pbmcoTm9kZSogY2FsbFRh
cmdldE5vZGUsIGludCByZXN1bHRPcGVyYW5kLCBjb25zdCBDYWxsTGlua1N0YXR1cyYsIGludCBy
ZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCB1bnNpZ25lZCBu
ZXh0T2Zmc2V0LCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kKTsKICAgICAvLyBIYW5kbGUgaW50cmlu
c2ljIGZ1bmN0aW9ucy4gUmV0dXJuIHRydWUgaWYgaXQgc3VjY2VlZGVkLCBmYWxzZSBpZiB3ZSBu
ZWVkIHRvIHBsYW50IGEgY2FsbC4KLSAgICBib29sIGhhbmRsZUludHJpbnNpYyhib29sIHVzZXNS
ZXN1bHQsIGludCByZXN1bHRPcGVyYW5kLCBJbnRyaW5zaWMsIGludCByZWdpc3Rlck9mZnNldCwg
aW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9u
KTsKLSAgICBib29sIGhhbmRsZUNvbnN0YW50SW50ZXJuYWxGdW5jdGlvbihib29sIHVzZXNSZXN1
bHQsIGludCByZXN1bHRPcGVyYW5kLCBJbnRlcm5hbEZ1bmN0aW9uKiwgaW50IHJlZ2lzdGVyT2Zm
c2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIFNwZWN1bGF0ZWRUeXBlIHByZWRp
Y3Rpb24sIENvZGVTcGVjaWFsaXphdGlvbktpbmQpOworICAgIGJvb2wgaGFuZGxlSW50cmluc2lj
KGludCByZXN1bHRPcGVyYW5kLCBJbnRyaW5zaWMsIGludCByZWdpc3Rlck9mZnNldCwgaW50IGFy
Z3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uKTsKKyAg
ICBib29sIGhhbmRsZUNvbnN0YW50SW50ZXJuYWxGdW5jdGlvbihpbnQgcmVzdWx0T3BlcmFuZCwg
SW50ZXJuYWxGdW5jdGlvbiosIGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzLCBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uLCBDb2RlU3BlY2lhbGl6YXRp
b25LaW5kKTsKICAgICBOb2RlKiBoYW5kbGVHZXRCeU9mZnNldChTcGVjdWxhdGVkVHlwZSwgTm9k
ZSogYmFzZSwgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciwgUHJvcGVydHlPZmZzZXQpOwogICAg
IHZvaWQgaGFuZGxlR2V0QnlPZmZzZXQoCiAgICAgICAgIGludCBkZXN0aW5hdGlvbk9wZXJhbmQs
IFNwZWN1bGF0ZWRUeXBlLCBOb2RlKiBiYXNlLCB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLApA
QCAtNjg0LDcgKzY4MSw3IEBAIHByaXZhdGU6CiAKICAgICBDb2RlT3JpZ2luIGN1cnJlbnRDb2Rl
T3JpZ2luKCkKICAgICB7Ci0gICAgICAgIHJldHVybiBDb2RlT3JpZ2luKG1fY3VycmVudEluZGV4
LCBpbmxpbmVDYWxsRnJhbWUoKSwgbV9jdXJyZW50UHJvZmlsaW5nSW5kZXggLSBtX2N1cnJlbnRJ
bmRleCk7CisgICAgICAgIHJldHVybiBDb2RlT3JpZ2luKG1fY3VycmVudEluZGV4LCBpbmxpbmVD
YWxsRnJhbWUoKSwgMCk7CiAgICAgfQogICAgIAogICAgIGJvb2wgY2FuRm9sZChOb2RlKiBub2Rl
KQpAQCAtNzY0LDI5ICs3NjEsMjIgQEAgcHJpdmF0ZToKICAgICAgICAgbV9udW1QYXNzZWRWYXJB
cmdzKys7CiAgICAgfQogICAgIAotICAgIE5vZGUqIGFkZENhbGwoSW50ZXJwcmV0ZXIqIGludGVy
cHJldGVyLCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBOb2RlVHlwZSBvcCkKKyAg
ICBOb2RlKiBhZGRDYWxsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIE5vZGVUeXBl
IG9wKQogICAgIHsKLSAgICAgICAgSW5zdHJ1Y3Rpb24qIHB1dEluc3RydWN0aW9uID0gY3VycmVu
dEluc3RydWN0aW9uICsgT1BDT0RFX0xFTkdUSChvcF9jYWxsKTsKLQotICAgICAgICBTcGVjdWxh
dGVkVHlwZSBwcmVkaWN0aW9uID0gU3BlY05vbmU7Ci0gICAgICAgIGlmIChpbnRlcnByZXRlci0+
Z2V0T3Bjb2RlSUQocHV0SW5zdHJ1Y3Rpb24tPnUub3Bjb2RlKSA9PSBvcF9jYWxsX3B1dF9yZXN1
bHQpIHsKLSAgICAgICAgICAgIG1fY3VycmVudFByb2ZpbGluZ0luZGV4ID0gbV9jdXJyZW50SW5k
ZXggKyBPUENPREVfTEVOR1RIKG9wX2NhbGwpOwotICAgICAgICAgICAgcHJlZGljdGlvbiA9IGdl
dFByZWRpY3Rpb24oKTsKLSAgICAgICAgfQorICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0
aW9uID0gZ2V0UHJlZGljdGlvbigpOwogICAgICAgICAKLSAgICAgICAgYWRkVmFyQXJnQ2hpbGQo
Z2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpKTsKLSAgICAgICAgaW50IGFyZ0Nv
dW50ID0gY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZDsKKyAgICAgICAgYWRkVmFyQXJn
Q2hpbGQoZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpKTsKKyAgICAgICAgaW50
IGFyZ0NvdW50ID0gY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsKICAgICAgICAgaWYg
KEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlclNpemUgKyAodW5zaWduZWQpYXJnQ291bnQgPiBtX3Bh
cmFtZXRlclNsb3RzKQogICAgICAgICAgICAgbV9wYXJhbWV0ZXJTbG90cyA9IEpTU3RhY2s6OkNh
bGxGcmFtZUhlYWRlclNpemUgKyBhcmdDb3VudDsKIAotICAgICAgICBpbnQgcmVnaXN0ZXJPZmZz
ZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworICAgICAgICBpbnQgcmVnaXN0
ZXJPZmZzZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kOwogICAgICAgICBpbnQg
ZHVtbXlUaGlzQXJndW1lbnQgPSBvcCA9PSBDYWxsID8gMCA6IDE7CiAgICAgICAgIGZvciAoaW50
IGkgPSAwICsgZHVtbXlUaGlzQXJndW1lbnQ7IGkgPCBhcmdDb3VudDsgKytpKQogICAgICAgICAg
ICAgYWRkVmFyQXJnQ2hpbGQoZ2V0KHJlZ2lzdGVyT2Zmc2V0ICsgYXJndW1lbnRUb09wZXJhbmQo
aSkpKTsKIAogICAgICAgICBOb2RlKiBjYWxsID0gYWRkVG9HcmFwaChOb2RlOjpWYXJBcmcsIG9w
LCBPcEluZm8oMCksIE9wSW5mbyhwcmVkaWN0aW9uKSk7Ci0gICAgICAgIGlmIChpbnRlcnByZXRl
ci0+Z2V0T3Bjb2RlSUQocHV0SW5zdHJ1Y3Rpb24tPnUub3Bjb2RlKSA9PSBvcF9jYWxsX3B1dF9y
ZXN1bHQpCi0gICAgICAgICAgICBzZXQocHV0SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kLCBjYWxs
KTsKKyAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIGNhbGwpOwog
ICAgICAgICByZXR1cm4gY2FsbDsKICAgICB9CiAgICAgCkBAIC04MzMsMTIgKzgyMywxMiBAQCBw
cml2YXRlOgogICAgIAogICAgIFNwZWN1bGF0ZWRUeXBlIGdldFByZWRpY3Rpb25XaXRob3V0T1NS
RXhpdCgpCiAgICAgewotICAgICAgICByZXR1cm4gZ2V0UHJlZGljdGlvbldpdGhvdXRPU1JFeGl0
KG1fY3VycmVudFByb2ZpbGluZ0luZGV4KTsKKyAgICAgICAgcmV0dXJuIGdldFByZWRpY3Rpb25X
aXRob3V0T1NSRXhpdChtX2N1cnJlbnRJbmRleCk7CiAgICAgfQogICAgIAogICAgIFNwZWN1bGF0
ZWRUeXBlIGdldFByZWRpY3Rpb24oKQogICAgIHsKLSAgICAgICAgcmV0dXJuIGdldFByZWRpY3Rp
b24obV9jdXJyZW50UHJvZmlsaW5nSW5kZXgpOworICAgICAgICByZXR1cm4gZ2V0UHJlZGljdGlv
bihtX2N1cnJlbnRJbmRleCk7CiAgICAgfQogICAgIAogICAgIEFycmF5TW9kZSBnZXRBcnJheU1v
ZGUoQXJyYXlQcm9maWxlKiBwcm9maWxlLCBBcnJheTo6QWN0aW9uIGFjdGlvbikKQEAgLTk3OSw4
ICs5NjksNiBAQCBwcml2YXRlOgogICAgIEJhc2ljQmxvY2sqIG1fY3VycmVudEJsb2NrOwogICAg
IC8vIFRoZSBieXRlY29kZSBpbmRleCBvZiB0aGUgY3VycmVudCBpbnN0cnVjdGlvbiBiZWluZyBn
ZW5lcmF0ZWQuCiAgICAgdW5zaWduZWQgbV9jdXJyZW50SW5kZXg7Ci0gICAgLy8gVGhlIGJ5dGVj
b2RlIGluZGV4IG9mIHRoZSB2YWx1ZSBwcm9maWxlIG9mIHRoZSBjdXJyZW50IGluc3RydWN0aW9u
IGJlaW5nIGdlbmVyYXRlZC4KLSAgICB1bnNpZ25lZCBtX2N1cnJlbnRQcm9maWxpbmdJbmRleDsK
IAogICAgIC8vIFdlIHVzZSB0aGVzZSB2YWx1ZXMgZHVyaW5nIGNvZGUgZ2VuZXJhdGlvbiwgYW5k
IHRvIGF2b2lkIHRoZSBuZWVkIGZvcgogICAgIC8vIHNwZWNpYWwgaGFuZGxpbmcgd2UgbWFrZSBz
dXJlIHRoZXkgYXJlIGF2YWlsYWJsZSBhcyBjb25zdGFudHMgaW4gdGhlCkBAIC0xMTY4LDExICsx
MTU2LDExIEBAIHByaXZhdGU6CiAgICAgcmV0dXJuIHNob3VsZENvbnRpbnVlUGFyc2luZwogCiAK
LXZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUNhbGwoSW50ZXJwcmV0ZXIqIGludGVycHJldGVy
LCBJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBOb2RlVHlwZSBvcCwgQ29kZVNwZWNp
YWxpemF0aW9uS2luZCBraW5kKQordm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlQ2FsbChJbnN0
cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBOb2RlVHlwZSBvcCwgQ29kZVNwZWNpYWxpemF0
aW9uS2luZCBraW5kKQogewogICAgIEFTU0VSVChPUENPREVfTEVOR1RIKG9wX2NhbGwpID09IE9Q
Q09ERV9MRU5HVEgob3BfY29uc3RydWN0KSk7CiAgICAgCi0gICAgTm9kZSogY2FsbFRhcmdldCA9
IGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKTsKKyAgICBOb2RlKiBjYWxsVGFy
Z2V0ID0gZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpOwogICAgIAogICAgIENh
bGxMaW5rU3RhdHVzIGNhbGxMaW5rU3RhdHVzOwogCkBAIC0xMTkzLDI5ICsxMTgxLDE5IEBAIHZv
aWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUNhbGwoSW50ZXJwcmUKICAgICAgICAgLy8gT2RkbHks
IHRoaXMgY29uZmxhdGVzIGNhbGxzIHRoYXQgaGF2ZW4ndCBleGVjdXRlZCB3aXRoIGNhbGxzIHRo
YXQgYmVoYXZlZCBzdWZmaWNpZW50bHkgcG9seW1vcnBoaWNhbGx5CiAgICAgICAgIC8vIHRoYXQg
d2UgY2Fubm90IG9wdGltaXplIHRoZW0uCiAgICAgICAgIAotICAgICAgICBhZGRDYWxsKGludGVy
cHJldGVyLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wKTsKKyAgICAgICAgYWRkQ2FsbChjdXJyZW50
SW5zdHJ1Y3Rpb24sIG9wKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBpbnQg
YXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVy
YW5kOwotICAgIGludCByZWdpc3Rlck9mZnNldCA9IGN1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9w
ZXJhbmQ7CisgICAgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID0gY3VycmVudEluc3Ry
dWN0aW9uWzNdLnUub3BlcmFuZDsKKyAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSBjdXJyZW50SW5z
dHJ1Y3Rpb25bNF0udS5vcGVyYW5kOwogCi0gICAgLy8gRG8gd2UgaGF2ZSBhIHJlc3VsdD8KLSAg
ICBib29sIHVzZXNSZXN1bHQgPSBmYWxzZTsKLSAgICBpbnQgcmVzdWx0T3BlcmFuZCA9IDA7IC8v
IG1ha2UgY29tcGlsZXIgaGFwcHkKKyAgICBpbnQgcmVzdWx0T3BlcmFuZCA9IGN1cnJlbnRJbnN0
cnVjdGlvblsxXS51Lm9wZXJhbmQ7CiAgICAgdW5zaWduZWQgbmV4dE9mZnNldCA9IG1fY3VycmVu
dEluZGV4ICsgT1BDT0RFX0xFTkdUSChvcF9jYWxsKTsKLSAgICBJbnN0cnVjdGlvbiogcHV0SW5z
dHJ1Y3Rpb24gPSBjdXJyZW50SW5zdHJ1Y3Rpb24gKyBPUENPREVfTEVOR1RIKG9wX2NhbGwpOwot
ICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSBTcGVjTm9uZTsKLSAgICBpZiAoaW50ZXJw
cmV0ZXItPmdldE9wY29kZUlEKHB1dEluc3RydWN0aW9uLT51Lm9wY29kZSkgPT0gb3BfY2FsbF9w
dXRfcmVzdWx0KSB7Ci0gICAgICAgIHJlc3VsdE9wZXJhbmQgPSBwdXRJbnN0cnVjdGlvblsxXS51
Lm9wZXJhbmQ7Ci0gICAgICAgIHVzZXNSZXN1bHQgPSB0cnVlOwotICAgICAgICBtX2N1cnJlbnRQ
cm9maWxpbmdJbmRleCA9IG5leHRPZmZzZXQ7Ci0gICAgICAgIHByZWRpY3Rpb24gPSBnZXRQcmVk
aWN0aW9uKCk7Ci0gICAgICAgIG5leHRPZmZzZXQgKz0gT1BDT0RFX0xFTkdUSChvcF9jYWxsX3B1
dF9yZXN1bHQpOwotICAgIH0KKyAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0gZ2V0UHJl
ZGljdGlvbigpOwogCiAgICAgaWYgKEludGVybmFsRnVuY3Rpb24qIGZ1bmN0aW9uID0gY2FsbExp
bmtTdGF0dXMuaW50ZXJuYWxGdW5jdGlvbigpKSB7Ci0gICAgICAgIGlmIChoYW5kbGVDb25zdGFu
dEludGVybmFsRnVuY3Rpb24odXNlc1Jlc3VsdCwgcmVzdWx0T3BlcmFuZCwgZnVuY3Rpb24sIHJl
Z2lzdGVyT2Zmc2V0LCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgcHJlZGljdGlvbiwga2lu
ZCkpIHsKKyAgICAgICAgaWYgKGhhbmRsZUNvbnN0YW50SW50ZXJuYWxGdW5jdGlvbihyZXN1bHRP
cGVyYW5kLCBmdW5jdGlvbiwgcmVnaXN0ZXJPZmZzZXQsIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzLCBwcmVkaWN0aW9uLCBraW5kKSkgewogICAgICAgICAgICAgLy8gVGhpcyBwaGFudG9taW5n
IGhhcyB0byBiZSAqYWZ0ZXIqIHRoZSBjb2RlIGZvciB0aGUgaW50cmluc2ljLCB0byBzaWduaWZ5
IHRoYXQKICAgICAgICAgICAgIC8vIHRoZSBpbnB1dHMgbXVzdCBiZSBrZXB0IGFsaXZlIHdoYXRl
dmVyIGV4aXRzIHRoZSBpbnRyaW5zaWMgbWF5IGRvLgogICAgICAgICAgICAgYWRkVG9HcmFwaChQ
aGFudG9tLCBjYWxsVGFyZ2V0KTsKQEAgLTEyMjQsNyArMTIwMiw3IEBAIHZvaWQgQnl0ZUNvZGVQ
YXJzZXI6OmhhbmRsZUNhbGwoSW50ZXJwcmUKICAgICAgICAgfQogICAgICAgICAKICAgICAgICAg
Ly8gQ2FuIG9ubHkgaGFuZGxlIHRoaXMgdXNpbmcgdGhlIGdlbmVyaWMgY2FsbCBoYW5kbGVyLgot
ICAgICAgICBhZGRDYWxsKGludGVycHJldGVyLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wKTsKKyAg
ICAgICAgYWRkQ2FsbChjdXJyZW50SW5zdHJ1Y3Rpb24sIG9wKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KICAgICAgICAgCkBAIC0xMjMyLDE3ICsxMjEwLDE3IEBAIHZvaWQgQnl0ZUNvZGVQYXJz
ZXI6OmhhbmRsZUNhbGwoSW50ZXJwcmUKICAgICBpZiAoaW50cmluc2ljICE9IE5vSW50cmluc2lj
KSB7CiAgICAgICAgIGVtaXRGdW5jdGlvbkNoZWNrcyhjYWxsTGlua1N0YXR1cywgY2FsbFRhcmdl
dCwgcmVnaXN0ZXJPZmZzZXQsIGtpbmQpOwogICAgICAgICAgICAgCi0gICAgICAgIGlmIChoYW5k
bGVJbnRyaW5zaWModXNlc1Jlc3VsdCwgcmVzdWx0T3BlcmFuZCwgaW50cmluc2ljLCByZWdpc3Rl
ck9mZnNldCwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIHByZWRpY3Rpb24pKSB7CisgICAg
ICAgIGlmIChoYW5kbGVJbnRyaW5zaWMocmVzdWx0T3BlcmFuZCwgaW50cmluc2ljLCByZWdpc3Rl
ck9mZnNldCwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIHByZWRpY3Rpb24pKSB7CiAgICAg
ICAgICAgICAvLyBUaGlzIHBoYW50b21pbmcgaGFzIHRvIGJlICphZnRlciogdGhlIGNvZGUgZm9y
IHRoZSBpbnRyaW5zaWMsIHRvIHNpZ25pZnkgdGhhdAogICAgICAgICAgICAgLy8gdGhlIGlucHV0
cyBtdXN0IGJlIGtlcHQgYWxpdmUgd2hhdGV2ZXIgZXhpdHMgdGhlIGludHJpbnNpYyBtYXkgZG8u
CiAgICAgICAgICAgICBhZGRUb0dyYXBoKFBoYW50b20sIGNhbGxUYXJnZXQpOwogICAgICAgICAg
ICAgZW1pdEFyZ3VtZW50UGhhbnRvbXMocmVnaXN0ZXJPZmZzZXQsIGFyZ3VtZW50Q291bnRJbmNs
dWRpbmdUaGlzLCBraW5kKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgIH0g
ZWxzZSBpZiAoaGFuZGxlSW5saW5pbmcodXNlc1Jlc3VsdCwgY2FsbFRhcmdldCwgcmVzdWx0T3Bl
cmFuZCwgY2FsbExpbmtTdGF0dXMsIHJlZ2lzdGVyT2Zmc2V0LCBhcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcywgbmV4dE9mZnNldCwga2luZCkpCisgICAgfSBlbHNlIGlmIChoYW5kbGVJbmxpbmlu
ZyhjYWxsVGFyZ2V0LCByZXN1bHRPcGVyYW5kLCBjYWxsTGlua1N0YXR1cywgcmVnaXN0ZXJPZmZz
ZXQsIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBuZXh0T2Zmc2V0LCBraW5kKSkKICAgICAg
ICAgcmV0dXJuOwogICAgIAotICAgIGFkZENhbGwoaW50ZXJwcmV0ZXIsIGN1cnJlbnRJbnN0cnVj
dGlvbiwgb3ApOworICAgIGFkZENhbGwoY3VycmVudEluc3RydWN0aW9uLCBvcCk7CiB9CiAKIHZv
aWQgQnl0ZUNvZGVQYXJzZXI6OmVtaXRGdW5jdGlvbkNoZWNrcyhjb25zdCBDYWxsTGlua1N0YXR1
cyYgY2FsbExpbmtTdGF0dXMsIE5vZGUqIGNhbGxUYXJnZXQsIGludCByZWdpc3Rlck9mZnNldCwg
Q29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQpAQCAtMTI3Nyw3ICsxMjU1LDcgQEAgdm9pZCBC
eXRlQ29kZVBhcnNlcjo6ZW1pdEFyZ3VtZW50UGhhbnRvbQogICAgICAgICBhZGRUb0dyYXBoKFBo
YW50b20sIGdldChyZWdpc3Rlck9mZnNldCArIGFyZ3VtZW50VG9PcGVyYW5kKGkpKSk7CiB9CiAK
LWJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGluaW5nKGJvb2wgdXNlc1Jlc3VsdCwgTm9k
ZSogY2FsbFRhcmdldE5vZGUsIGludCByZXN1bHRPcGVyYW5kLCBjb25zdCBDYWxsTGlua1N0YXR1
cyYgY2FsbExpbmtTdGF0dXMsIGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzLCB1bnNpZ25lZCBuZXh0T2Zmc2V0LCBDb2RlU3BlY2lhbGl6YXRpb25LaW5k
IGtpbmQpCitib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxpbmluZyhOb2RlKiBjYWxsVGFy
Z2V0Tm9kZSwgaW50IHJlc3VsdE9wZXJhbmQsIGNvbnN0IENhbGxMaW5rU3RhdHVzJiBjYWxsTGlu
a1N0YXR1cywgaW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1Ro
aXMsIHVuc2lnbmVkIG5leHRPZmZzZXQsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKIHsK
ICAgICAvLyBGaXJzdCwgdGhlIHJlYWxseSBzaW1wbGUgY2hlY2tzOiBkbyB3ZSBoYXZlIGFuIGFj
dHVhbCBKUyBmdW5jdGlvbj8KICAgICBpZiAoIWNhbGxMaW5rU3RhdHVzLmV4ZWN1dGFibGUoKSkK
QEAgLTEzNDUsMTYgKzEzMjMsMTMgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5p
bmcoYm9vbAogICAgIHNpemVfdCBhcmd1bWVudFBvc2l0aW9uU3RhcnQgPSBtX2dyYXBoLm1fYXJn
dW1lbnRQb3NpdGlvbnMuc2l6ZSgpOwogCiAgICAgSW5saW5lU3RhY2tFbnRyeSBpbmxpbmVTdGFj
a0VudHJ5KAotICAgICAgICB0aGlzLCBjb2RlQmxvY2ssIGNvZGVCbG9jaywgbV9ncmFwaC5tX2Js
b2Nrcy5zaXplKCkgLSAxLAotICAgICAgICBjYWxsTGlua1N0YXR1cy5mdW5jdGlvbigpLCAoVmly
dHVhbFJlZ2lzdGVyKW1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZCgKLSAgICAgICAgICAg
IHVzZXNSZXN1bHQgPyByZXN1bHRPcGVyYW5kIDogSW52YWxpZFZpcnR1YWxSZWdpc3RlciksCisg
ICAgICAgIHRoaXMsIGNvZGVCbG9jaywgY29kZUJsb2NrLCBtX2dyYXBoLm1fYmxvY2tzLnNpemUo
KSAtIDEsIGNhbGxMaW5rU3RhdHVzLmZ1bmN0aW9uKCksCisgICAgICAgIChWaXJ0dWFsUmVnaXN0
ZXIpbV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKHJlc3VsdE9wZXJhbmQpLAogICAgICAg
ICAoVmlydHVhbFJlZ2lzdGVyKWlubGluZUNhbGxGcmFtZVN0YXJ0LCBhcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcywga2luZCk7CiAgICAgCiAgICAgLy8gVGhpcyBpcyB3aGVyZSB0aGUgYWN0dWFs
IGlubGluaW5nIHJlYWxseSBoYXBwZW5zLgogICAgIHVuc2lnbmVkIG9sZEluZGV4ID0gbV9jdXJy
ZW50SW5kZXg7Ci0gICAgdW5zaWduZWQgb2xkUHJvZmlsaW5nSW5kZXggPSBtX2N1cnJlbnRQcm9m
aWxpbmdJbmRleDsKICAgICBtX2N1cnJlbnRJbmRleCA9IDA7Ci0gICAgbV9jdXJyZW50UHJvZmls
aW5nSW5kZXggPSAwOwogCiAgICAgYWRkVG9HcmFwaChJbmxpbmVTdGFydCwgT3BJbmZvKGFyZ3Vt
ZW50UG9zaXRpb25TdGFydCkpOwogICAgIGlmIChjYWxsTGlua1N0YXR1cy5pc0Nsb3N1cmVDYWxs
KCkpIHsKQEAgLTEzNjUsNyArMTM0MCw2IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlu
bGluaW5nKGJvb2wKICAgICBwYXJzZUNvZGVCbG9jaygpOwogICAgIAogICAgIG1fY3VycmVudElu
ZGV4ID0gb2xkSW5kZXg7Ci0gICAgbV9jdXJyZW50UHJvZmlsaW5nSW5kZXggPSBvbGRQcm9maWxp
bmdJbmRleDsKICAgICAKICAgICAvLyBJZiB0aGUgaW5saW5lZCBjb2RlIGNyZWF0ZWQgc29tZSBu
ZXcgYmFzaWMgYmxvY2tzLCB0aGVuIHdlIGhhdmUgbGlua2luZyB0byBkby4KICAgICBpZiAoaW5s
aW5lU3RhY2tFbnRyeS5tX2NhbGxzaXRlQmxvY2tIZWFkICE9IG1fZ3JhcGgubV9ibG9ja3Muc2l6
ZSgpIC0gMSkgewpAQCAtMTQ2MSwyOSArMTQzNSwyMiBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpo
YW5kbGVJbmxpbmluZyhib29sCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXZvaWQgQnl0ZUNvZGVQ
YXJzZXI6OnNldEludHJpbnNpY1Jlc3VsdChib29sIHVzZXNSZXN1bHQsIGludCByZXN1bHRPcGVy
YW5kLCBOb2RlKiBub2RlKQotewotICAgIGlmICghdXNlc1Jlc3VsdCkKLSAgICAgICAgcmV0dXJu
OwotICAgIHNldChyZXN1bHRPcGVyYW5kLCBub2RlKTsKLX0KLQotYm9vbCBCeXRlQ29kZVBhcnNl
cjo6aGFuZGxlTWluTWF4KGJvb2wgdXNlc1Jlc3VsdCwgaW50IHJlc3VsdE9wZXJhbmQsIE5vZGVU
eXBlIG9wLCBpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhp
cykKK2Jvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZU1pbk1heChpbnQgcmVzdWx0T3BlcmFuZCwg
Tm9kZVR5cGUgb3AsIGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzKQogewogICAgIGlmIChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyA9PSAxKSB7IC8v
IE1hdGgubWluKCkKLSAgICAgICAgc2V0SW50cmluc2ljUmVzdWx0KHVzZXNSZXN1bHQsIHJlc3Vs
dE9wZXJhbmQsIGNvbnN0YW50TmFOKCkpOworICAgICAgICBzZXQocmVzdWx0T3BlcmFuZCwgY29u
c3RhbnROYU4oKSk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAgCiAgICAgaWYg
KGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID09IDIpIHsgLy8gTWF0aC5taW4oeCkKICAgICAg
ICAgTm9kZSogcmVzdWx0ID0gZ2V0KHJlZ2lzdGVyT2Zmc2V0ICsgYXJndW1lbnRUb09wZXJhbmQo
MSkpOwogICAgICAgICBhZGRUb0dyYXBoKFBoYW50b20sIEVkZ2UocmVzdWx0LCBOdW1iZXJVc2Up
KTsKLSAgICAgICAgc2V0SW50cmluc2ljUmVzdWx0KHVzZXNSZXN1bHQsIHJlc3VsdE9wZXJhbmQs
IHJlc3VsdCk7CisgICAgICAgIHNldChyZXN1bHRPcGVyYW5kLCByZXN1bHQpOwogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgCiAgICAgaWYgKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzID09IDMpIHsgLy8gTWF0aC5taW4oeCwgeSkKLSAgICAgICAgc2V0SW50cmluc2ljUmVzdWx0
KHVzZXNSZXN1bHQsIHJlc3VsdE9wZXJhbmQsIGFkZFRvR3JhcGgob3AsIGdldChyZWdpc3Rlck9m
ZnNldCArIGFyZ3VtZW50VG9PcGVyYW5kKDEpKSwgZ2V0KHJlZ2lzdGVyT2Zmc2V0ICsgYXJndW1l
bnRUb09wZXJhbmQoMikpKSk7CisgICAgICAgIHNldChyZXN1bHRPcGVyYW5kLCBhZGRUb0dyYXBo
KG9wLCBnZXQocmVnaXN0ZXJPZmZzZXQgKyBhcmd1bWVudFRvT3BlcmFuZCgxKSksIGdldChyZWdp
c3Rlck9mZnNldCArIGFyZ3VtZW50VG9PcGVyYW5kKDIpKSkpOwogICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICB9CiAgICAgCkBAIC0xNDkzLDEyICsxNDYwLDEyIEBAIGJvb2wgQnl0ZUNvZGVQYXJz
ZXI6OmhhbmRsZU1pbk1heChib29sIHUKIAogLy8gRklYTUU6IFdlIGRlYWQtY29kZS1lbGltaW5h
dGUgdW51c2VkIE1hdGggaW50cmluc2ljcywgYnV0IHRoYXQncyBpbnZhbGlkIGJlY2F1c2UKIC8v
IHRoZXkgbmVlZCB0byBwZXJmb3JtIHRoZSBUb051bWJlciBjb252ZXJzaW9uLCB3aGljaCBjYW4g
aGF2ZSBzaWRlLWVmZmVjdHMuCi1ib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5zaWMo
Ym9vbCB1c2VzUmVzdWx0LCBpbnQgcmVzdWx0T3BlcmFuZCwgSW50cmluc2ljIGludHJpbnNpYywg
aW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIFNwZWN1
bGF0ZWRUeXBlIHByZWRpY3Rpb24pCitib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5z
aWMoaW50IHJlc3VsdE9wZXJhbmQsIEludHJpbnNpYyBpbnRyaW5zaWMsIGludCByZWdpc3Rlck9m
ZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBTcGVjdWxhdGVkVHlwZSBwcmVk
aWN0aW9uKQogewogICAgIHN3aXRjaCAoaW50cmluc2ljKSB7CiAgICAgY2FzZSBBYnNJbnRyaW5z
aWM6IHsKICAgICAgICAgaWYgKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzID09IDEpIHsgLy8g
TWF0aC5hYnMoKQotICAgICAgICAgICAgc2V0SW50cmluc2ljUmVzdWx0KHVzZXNSZXN1bHQsIHJl
c3VsdE9wZXJhbmQsIGNvbnN0YW50TmFOKCkpOworICAgICAgICAgICAgc2V0KHJlc3VsdE9wZXJh
bmQsIGNvbnN0YW50TmFOKCkpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0K
IApAQCAtMTUwOCwyNiArMTQ3NSwyNiBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRy
aW5zaWMoYm9vCiAgICAgICAgIE5vZGUqIG5vZGUgPSBhZGRUb0dyYXBoKEFyaXRoQWJzLCBnZXQo
cmVnaXN0ZXJPZmZzZXQgKyBhcmd1bWVudFRvT3BlcmFuZCgxKSkpOwogICAgICAgICBpZiAobV9p
bmxpbmVTdGFja1RvcC0+bV9leGl0UHJvZmlsZS5oYXNFeGl0U2l0ZShtX2N1cnJlbnRJbmRleCwg
T3ZlcmZsb3cpKQogICAgICAgICAgICAgbm9kZS0+bWVyZ2VGbGFncyhOb2RlTWF5T3ZlcmZsb3cp
OwotICAgICAgICBzZXRJbnRyaW5zaWNSZXN1bHQodXNlc1Jlc3VsdCwgcmVzdWx0T3BlcmFuZCwg
bm9kZSk7CisgICAgICAgIHNldChyZXN1bHRPcGVyYW5kLCBub2RlKTsKICAgICAgICAgcmV0dXJu
IHRydWU7CiAgICAgfQogCiAgICAgY2FzZSBNaW5JbnRyaW5zaWM6Ci0gICAgICAgIHJldHVybiBo
YW5kbGVNaW5NYXgodXNlc1Jlc3VsdCwgcmVzdWx0T3BlcmFuZCwgQXJpdGhNaW4sIHJlZ2lzdGVy
T2Zmc2V0LCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyk7CisgICAgICAgIHJldHVybiBoYW5k
bGVNaW5NYXgocmVzdWx0T3BlcmFuZCwgQXJpdGhNaW4sIHJlZ2lzdGVyT2Zmc2V0LCBhcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcyk7CiAgICAgICAgIAogICAgIGNhc2UgTWF4SW50cmluc2ljOgot
ICAgICAgICByZXR1cm4gaGFuZGxlTWluTWF4KHVzZXNSZXN1bHQsIHJlc3VsdE9wZXJhbmQsIEFy
aXRoTWF4LCByZWdpc3Rlck9mZnNldCwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpOworICAg
ICAgICByZXR1cm4gaGFuZGxlTWluTWF4KHJlc3VsdE9wZXJhbmQsIEFyaXRoTWF4LCByZWdpc3Rl
ck9mZnNldCwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpOwogICAgICAgICAKICAgICBjYXNl
IFNxcnRJbnRyaW5zaWM6IHsKICAgICAgICAgaWYgKGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
ID09IDEpIHsgLy8gTWF0aC5zcXJ0KCkKLSAgICAgICAgICAgIHNldEludHJpbnNpY1Jlc3VsdCh1
c2VzUmVzdWx0LCByZXN1bHRPcGVyYW5kLCBjb25zdGFudE5hTigpKTsKKyAgICAgICAgICAgIHNl
dChyZXN1bHRPcGVyYW5kLCBjb25zdGFudE5hTigpKTsKICAgICAgICAgICAgIHJldHVybiB0cnVl
OwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBpZiAoIU1hY3JvQXNzZW1ibGVyOjpzdXBw
b3J0c0Zsb2F0aW5nUG9pbnRTcXJ0KCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
ICAgIAotICAgICAgICBzZXRJbnRyaW5zaWNSZXN1bHQodXNlc1Jlc3VsdCwgcmVzdWx0T3BlcmFu
ZCwgYWRkVG9HcmFwaChBcml0aFNxcnQsIGdldChyZWdpc3Rlck9mZnNldCArIGFyZ3VtZW50VG9P
cGVyYW5kKDEpKSkpOworCisgICAgICAgIHNldChyZXN1bHRPcGVyYW5kLCBhZGRUb0dyYXBoKEFy
aXRoU3FydCwgZ2V0KHJlZ2lzdGVyT2Zmc2V0ICsgYXJndW1lbnRUb09wZXJhbmQoMSkpKSk7CiAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICAgICAgCkBAIC0xNTM1LDcgKzE1MDIsNyBA
QCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5zaWMoYm9vCiAgICAgICAgIGlmIChh
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAhPSAyKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICAKLSAgICAgICAgQXJyYXlNb2RlIGFycmF5TW9kZSA9IGdldEFycmF5TW9kZSht
X2N1cnJlbnRJbnN0cnVjdGlvbls1XS51LmFycmF5UHJvZmlsZSk7CisgICAgICAgIEFycmF5TW9k
ZSBhcnJheU1vZGUgPSBnZXRBcnJheU1vZGUobV9jdXJyZW50SW5zdHJ1Y3Rpb25bNl0udS5hcnJh
eVByb2ZpbGUpOwogICAgICAgICBpZiAoIWFycmF5TW9kZS5pc0pTQXJyYXkoKSkKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgc3dpdGNoIChhcnJheU1vZGUudHlwZSgpKSB7CkBA
IC0xNTQ1LDggKzE1MTIsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5zaWMo
Ym9vCiAgICAgICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6CiAgICAgICAgIGNhc2UgQXJyYXk6
OkFycmF5U3RvcmFnZTogewogICAgICAgICAgICAgTm9kZSogYXJyYXlQdXNoID0gYWRkVG9HcmFw
aChBcnJheVB1c2gsIE9wSW5mbyhhcnJheU1vZGUuYXNXb3JkKCkpLCBPcEluZm8ocHJlZGljdGlv
biksIGdldChyZWdpc3Rlck9mZnNldCArIGFyZ3VtZW50VG9PcGVyYW5kKDApKSwgZ2V0KHJlZ2lz
dGVyT2Zmc2V0ICsgYXJndW1lbnRUb09wZXJhbmQoMSkpKTsKLSAgICAgICAgICAgIGlmICh1c2Vz
UmVzdWx0KQotICAgICAgICAgICAgICAgIHNldChyZXN1bHRPcGVyYW5kLCBhcnJheVB1c2gpOwor
ICAgICAgICAgICAgc2V0KHJlc3VsdE9wZXJhbmQsIGFycmF5UHVzaCk7CiAgICAgICAgICAgICAK
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CkBAIC0xNTYwLDcgKzE1MjYsNyBA
QCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5zaWMoYm9vCiAgICAgICAgIGlmIChh
cmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyAhPSAxKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICAKLSAgICAgICAgQXJyYXlNb2RlIGFycmF5TW9kZSA9IGdldEFycmF5TW9kZSht
X2N1cnJlbnRJbnN0cnVjdGlvbls1XS51LmFycmF5UHJvZmlsZSk7CisgICAgICAgIEFycmF5TW9k
ZSBhcnJheU1vZGUgPSBnZXRBcnJheU1vZGUobV9jdXJyZW50SW5zdHJ1Y3Rpb25bNl0udS5hcnJh
eVByb2ZpbGUpOwogICAgICAgICBpZiAoIWFycmF5TW9kZS5pc0pTQXJyYXkoKSkKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgc3dpdGNoIChhcnJheU1vZGUudHlwZSgpKSB7CkBA
IC0xNTY5LDggKzE1MzUsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5zaWMo
Ym9vCiAgICAgICAgIGNhc2UgQXJyYXk6OkNvbnRpZ3VvdXM6CiAgICAgICAgIGNhc2UgQXJyYXk6
OkFycmF5U3RvcmFnZTogewogICAgICAgICAgICAgTm9kZSogYXJyYXlQb3AgPSBhZGRUb0dyYXBo
KEFycmF5UG9wLCBPcEluZm8oYXJyYXlNb2RlLmFzV29yZCgpKSwgT3BJbmZvKHByZWRpY3Rpb24p
LCBnZXQocmVnaXN0ZXJPZmZzZXQgKyBhcmd1bWVudFRvT3BlcmFuZCgwKSkpOwotICAgICAgICAg
ICAgaWYgKHVzZXNSZXN1bHQpCi0gICAgICAgICAgICAgICAgc2V0KHJlc3VsdE9wZXJhbmQsIGFy
cmF5UG9wKTsKKyAgICAgICAgICAgIHNldChyZXN1bHRPcGVyYW5kLCBhcnJheVBvcCk7CiAgICAg
ICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQogICAgICAgICAgICAgCkBAIC0xNTg3LDgg
KzE1NTIsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbnRyaW5zaWMoYm9vCiAgICAg
ICAgIGludCBpbmRleE9wZXJhbmQgPSByZWdpc3Rlck9mZnNldCArIGFyZ3VtZW50VG9PcGVyYW5k
KDEpOwogICAgICAgICBOb2RlKiBjaGFyQ29kZSA9IGFkZFRvR3JhcGgoU3RyaW5nQ2hhckNvZGVB
dCwgT3BJbmZvKEFycmF5TW9kZShBcnJheTo6U3RyaW5nKS5hc1dvcmQoKSksIGdldCh0aGlzT3Bl
cmFuZCksIGdldFRvSW50MzIoaW5kZXhPcGVyYW5kKSk7CiAKLSAgICAgICAgaWYgKHVzZXNSZXN1
bHQpCi0gICAgICAgICAgICBzZXQocmVzdWx0T3BlcmFuZCwgY2hhckNvZGUpOworICAgICAgICBz
ZXQocmVzdWx0T3BlcmFuZCwgY2hhckNvZGUpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICB9
CiAKQEAgLTE2MDAsOCArMTU2NCw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJp
bnNpYyhib28KICAgICAgICAgaW50IGluZGV4T3BlcmFuZCA9IHJlZ2lzdGVyT2Zmc2V0ICsgYXJn
dW1lbnRUb09wZXJhbmQoMSk7CiAgICAgICAgIE5vZGUqIGNoYXJDb2RlID0gYWRkVG9HcmFwaChT
dHJpbmdDaGFyQXQsIE9wSW5mbyhBcnJheU1vZGUoQXJyYXk6OlN0cmluZykuYXNXb3JkKCkpLCBn
ZXQodGhpc09wZXJhbmQpLCBnZXRUb0ludDMyKGluZGV4T3BlcmFuZCkpOwogCi0gICAgICAgIGlm
ICh1c2VzUmVzdWx0KQotICAgICAgICAgICAgc2V0KHJlc3VsdE9wZXJhbmQsIGNoYXJDb2RlKTsK
KyAgICAgICAgc2V0KHJlc3VsdE9wZXJhbmQsIGNoYXJDb2RlKTsKICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgfQogCkBAIC0xNjEwLDggKzE1NzMsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpo
YW5kbGVJbnRyaW5zaWMoYm9vCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAog
ICAgICAgICBOb2RlKiByZWdFeHBFeGVjID0gYWRkVG9HcmFwaChSZWdFeHBFeGVjLCBPcEluZm8o
MCksIE9wSW5mbyhwcmVkaWN0aW9uKSwgZ2V0KHJlZ2lzdGVyT2Zmc2V0ICsgYXJndW1lbnRUb09w
ZXJhbmQoMCkpLCBnZXQocmVnaXN0ZXJPZmZzZXQgKyBhcmd1bWVudFRvT3BlcmFuZCgxKSkpOwot
ICAgICAgICBpZiAodXNlc1Jlc3VsdCkKLSAgICAgICAgICAgIHNldChyZXN1bHRPcGVyYW5kLCBy
ZWdFeHBFeGVjKTsKKyAgICAgICAgc2V0KHJlc3VsdE9wZXJhbmQsIHJlZ0V4cEV4ZWMpOwogICAg
ICAgICAKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQpAQCAtMTYyMSw4ICsxNTgzLDcgQEAg
Ym9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW50cmluc2ljKGJvbwogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICAKICAgICAgICAgTm9kZSogcmVnRXhwRXhlYyA9IGFkZFRvR3Jh
cGgoUmVnRXhwVGVzdCwgT3BJbmZvKDApLCBPcEluZm8ocHJlZGljdGlvbiksIGdldChyZWdpc3Rl
ck9mZnNldCArIGFyZ3VtZW50VG9PcGVyYW5kKDApKSwgZ2V0KHJlZ2lzdGVyT2Zmc2V0ICsgYXJn
dW1lbnRUb09wZXJhbmQoMSkpKTsKLSAgICAgICAgaWYgKHVzZXNSZXN1bHQpCi0gICAgICAgICAg
ICBzZXQocmVzdWx0T3BlcmFuZCwgcmVnRXhwRXhlYyk7CisgICAgICAgIHNldChyZXN1bHRPcGVy
YW5kLCByZWdFeHBFeGVjKTsKICAgICAgICAgCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
QEAgLTE2MzMsNyArMTU5NCw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUludHJpbnNp
Yyhib28KIH0KIAogYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlQ29uc3RhbnRJbnRlcm5hbEZ1
bmN0aW9uKAotICAgIGJvb2wgdXNlc1Jlc3VsdCwgaW50IHJlc3VsdE9wZXJhbmQsIEludGVybmFs
RnVuY3Rpb24qIGZ1bmN0aW9uLCBpbnQgcmVnaXN0ZXJPZmZzZXQsCisgICAgaW50IHJlc3VsdE9w
ZXJhbmQsIEludGVybmFsRnVuY3Rpb24qIGZ1bmN0aW9uLCBpbnQgcmVnaXN0ZXJPZmZzZXQsCiAg
ICAgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0
aW9uLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCiB7CiAgICAgLy8gSWYgd2UgZXZlciBm
aW5kIHRoYXQgd2UgaGF2ZSBhIGxvdCBvZiBpbnRlcm5hbCBmdW5jdGlvbnMgdGhhdCB3ZSBzcGVj
aWFsaXplIGZvciwKQEAgLTE2NDcsMTYgKzE2MDgsMTQgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6
aGFuZGxlQ29uc3RhbnRJbnRlcgogICAgIAogICAgIGlmIChmdW5jdGlvbi0+Y2xhc3NJbmZvKCkg
PT0gJkFycmF5Q29uc3RydWN0b3I6OnNfaW5mbykgewogICAgICAgICBpZiAoYXJndW1lbnRDb3Vu
dEluY2x1ZGluZ1RoaXMgPT0gMikgewotICAgICAgICAgICAgc2V0SW50cmluc2ljUmVzdWx0KAot
ICAgICAgICAgICAgICAgIHVzZXNSZXN1bHQsIHJlc3VsdE9wZXJhbmQsCisgICAgICAgICAgICBz
ZXQocmVzdWx0T3BlcmFuZCwKICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKE5ld0FycmF5V2l0
aFNpemUsIE9wSW5mbyhBcnJheVdpdGhVbmRlY2lkZWQpLCBnZXQocmVnaXN0ZXJPZmZzZXQgKyBh
cmd1bWVudFRvT3BlcmFuZCgxKSkpKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAg
ICB9CiAgICAgICAgIAogICAgICAgICBmb3IgKGludCBpID0gMTsgaSA8IGFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzOyArK2kpCiAgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChnZXQocmVnaXN0
ZXJPZmZzZXQgKyBhcmd1bWVudFRvT3BlcmFuZChpKSkpOwotICAgICAgICBzZXRJbnRyaW5zaWNS
ZXN1bHQoCi0gICAgICAgICAgICB1c2VzUmVzdWx0LCByZXN1bHRPcGVyYW5kLAorICAgICAgICBz
ZXQocmVzdWx0T3BlcmFuZCwKICAgICAgICAgICAgIGFkZFRvR3JhcGgoTm9kZTo6VmFyQXJnLCBO
ZXdBcnJheSwgT3BJbmZvKEFycmF5V2l0aFVuZGVjaWRlZCksIE9wSW5mbygwKSkpOwogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICB9IGVsc2UgaWYgKGZ1bmN0aW9uLT5jbGFzc0luZm8oKSA9PSAm
U3RyaW5nQ29uc3RydWN0b3I6OnNfaW5mbykgewpAQCAtMTY3MCw3ICsxNjI5LDcgQEAgYm9vbCBC
eXRlQ29kZVBhcnNlcjo6aGFuZGxlQ29uc3RhbnRJbnRlcgogICAgICAgICBpZiAoa2luZCA9PSBD
b2RlRm9yQ29uc3RydWN0KQogICAgICAgICAgICAgcmVzdWx0ID0gYWRkVG9HcmFwaChOZXdTdHJp
bmdPYmplY3QsIE9wSW5mbyhmdW5jdGlvbi0+Z2xvYmFsT2JqZWN0KCktPnN0cmluZ09iamVjdFN0
cnVjdHVyZSgpKSwgcmVzdWx0KTsKICAgICAgICAgCi0gICAgICAgIHNldEludHJpbnNpY1Jlc3Vs
dCh1c2VzUmVzdWx0LCByZXN1bHRPcGVyYW5kLCByZXN1bHQpOworICAgICAgICBzZXQocmVzdWx0
T3BlcmFuZCwgcmVzdWx0KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIApAQCAt
MTk4MSw4ICsxOTQwLDYgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25l
ZAogICAgIH0KIAogICAgIHdoaWxlICh0cnVlKSB7Ci0gICAgICAgIG1fY3VycmVudFByb2ZpbGlu
Z0luZGV4ID0gbV9jdXJyZW50SW5kZXg7Ci0KICAgICAgICAgLy8gRG9uJ3QgZXh0ZW5kIG92ZXIg
anVtcCBkZXN0aW5hdGlvbnMuCiAgICAgICAgIGlmIChtX2N1cnJlbnRJbmRleCA9PSBsaW1pdCkg
ewogICAgICAgICAgICAgLy8gT3JkaW5hcmlseSB3ZSB3YW50IHRvIHBsYW50IGEganVtcC4gQnV0
IHJlZnVzZSB0byBkbyB0aGlzIGlmIHRoZSBibG9jayBpcwpAQCAtMjAwNyw3ICsxOTY0LDcgQEAg
Ym9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICBtX2N1cnJl
bnRJbnN0cnVjdGlvbiA9IGN1cnJlbnRJbnN0cnVjdGlvbjsgLy8gU29tZSBtZXRob2RzIHdhbnQg
dG8gdXNlIHRoaXMsIGFuZCB3ZSdkIHJhdGhlciBub3QgdGhyZWFkIGl0IHRocm91Z2ggY2FsbHMu
CiAgICAgICAgIE9wY29kZUlEIG9wY29kZUlEID0gaW50ZXJwcmV0ZXItPmdldE9wY29kZUlEKGN1
cnJlbnRJbnN0cnVjdGlvbi0+dS5vcGNvZGUpOwogICAgICAgICAKLSAgICAgICAgaWYgKG1fZ3Jh
cGguY29tcGlsYXRpb24oKSAmJiBvcGNvZGVJRCAhPSBvcF9jYWxsX3B1dF9yZXN1bHQpIHsKKyAg
ICAgICAgaWYgKG1fZ3JhcGguY29tcGlsYXRpb24oKSkgewogICAgICAgICAgICAgYWRkVG9HcmFw
aChDb3VudEV4ZWN1dGlvbiwgT3BJbmZvKG1fZ3JhcGguY29tcGlsYXRpb24oKS0+ZXhlY3V0aW9u
Q291bnRlckZvcigKICAgICAgICAgICAgICAgICBQcm9maWxlcjo6T3JpZ2luU3RhY2soKm1fdm0t
Pm1fcGVyQnl0ZWNvZGVQcm9maWxlciwgbV9jb2RlQmxvY2ssIGN1cnJlbnRDb2RlT3JpZ2luKCkp
KSkpOwogICAgICAgICB9CkBAIC0yMDI3LDEwICsxOTg0LDEwIEBAIGJvb2wgQnl0ZUNvZGVQYXJz
ZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgIGlmIChvcDEtPm9wKCkgIT0gVG9U
aGlzKSB7CiAgICAgICAgICAgICAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9pbmxp
bmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5tX2xvY2spOwogICAgICAgICAgICAgICAgIFZh
bHVlUHJvZmlsZSogcHJvZmlsZSA9Ci0gICAgICAgICAgICAgICAgICAgIG1faW5saW5lU3RhY2tU
b3AtPm1fcHJvZmlsZWRCbG9jay0+dmFsdWVQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQobV9jdXJy
ZW50UHJvZmlsaW5nSW5kZXgpOworICAgICAgICAgICAgICAgICAgICBtX2lubGluZVN0YWNrVG9w
LT5tX3Byb2ZpbGVkQmxvY2stPnZhbHVlUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KG1fY3VycmVu
dEluZGV4KTsKICAgICAgICAgICAgICAgICBwcm9maWxlLT5jb21wdXRlVXBkYXRlZFByZWRpY3Rp
b24obG9ja2VyKTsKICNpZiBERkdfRU5BQkxFKERFQlVHX1ZFUkJPU0UpCi0gICAgICAgICAgICAg
ICAgZGF0YUxvZ0YoIltiYyMldV06IHByb2ZpbGUgJXA6ICIsIG1fY3VycmVudFByb2ZpbGluZ0lu
ZGV4LCBwcm9maWxlKTsKKyAgICAgICAgICAgICAgICBkYXRhTG9nRigiW2JjIyV1XTogcHJvZmls
ZSAlcDogIiwgbV9jdXJyZW50SW5kZXgsIHByb2ZpbGUpOwogICAgICAgICAgICAgICAgIHByb2Zp
bGUtPmR1bXAoV1RGOjpkYXRhRmlsZSgpKTsKICAgICAgICAgICAgICAgICBkYXRhTG9nRigiXG4i
KTsKICNlbmRpZgpAQCAtMzAwMiw4ICsyOTU5LDggQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFy
c2VCbG9jayh1bnNpZ25lZAogICAgICAgICBjYXNlIG9wX3JldDoKICAgICAgICAgICAgIGZsdXNo
QXJndW1lbnRzQW5kQ2FwdHVyZWRWYXJpYWJsZXMoKTsKICAgICAgICAgICAgIGlmIChpbmxpbmVD
YWxsRnJhbWUoKSkgewotICAgICAgICAgICAgICAgIGlmIChtX2lubGluZVN0YWNrVG9wLT5tX3Jl
dHVyblZhbHVlICE9IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpCi0gICAgICAgICAgICAgICAgICAg
IHNldERpcmVjdChtX2lubGluZVN0YWNrVG9wLT5tX3JldHVyblZhbHVlLCBnZXQoY3VycmVudElu
c3RydWN0aW9uWzFdLnUub3BlcmFuZCkpOworICAgICAgICAgICAgICAgIEFTU0VSVChtX2lubGlu
ZVN0YWNrVG9wLT5tX3JldHVyblZhbHVlICE9IEludmFsaWRWaXJ0dWFsUmVnaXN0ZXIpOworICAg
ICAgICAgICAgICAgIHNldERpcmVjdChtX2lubGluZVN0YWNrVG9wLT5tX3JldHVyblZhbHVlLCBn
ZXQoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCkpOwogICAgICAgICAgICAgICAgIG1f
aW5saW5lU3RhY2tUb3AtPm1fZGlkUmV0dXJuID0gdHJ1ZTsKICAgICAgICAgICAgICAgICBpZiAo
bV9pbmxpbmVTdGFja1RvcC0+bV91bmxpbmtlZEJsb2Nrcy5pc0VtcHR5KCkpIHsKICAgICAgICAg
ICAgICAgICAgICAgLy8gSWYgd2UncmUgcmV0dXJuaW5nIGZyb20gdGhlIGZpcnN0IGJsb2NrLCB0
aGVuIHdlJ3JlIGRvbmUgcGFyc2luZy4KQEAgLTMwNDQsMjkgKzMwMDEsMjMgQEAgYm9vbCBCeXRl
Q29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgTEFTVF9PUENPREUo
b3BfdGhyb3dfc3RhdGljX2Vycm9yKTsKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIG9wX2Nh
bGw6Ci0gICAgICAgICAgICBoYW5kbGVDYWxsKGludGVycHJldGVyLCBjdXJyZW50SW5zdHJ1Y3Rp
b24sIENhbGwsIENvZGVGb3JDYWxsKTsKKyAgICAgICAgICAgIGhhbmRsZUNhbGwoY3VycmVudElu
c3RydWN0aW9uLCBDYWxsLCBDb2RlRm9yQ2FsbCk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShv
cF9jYWxsKTsKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIG9wX2NvbnN0cnVjdDoKLSAgICAg
ICAgICAgIGhhbmRsZUNhbGwoaW50ZXJwcmV0ZXIsIGN1cnJlbnRJbnN0cnVjdGlvbiwgQ29uc3Ry
dWN0LCBDb2RlRm9yQ29uc3RydWN0KTsKKyAgICAgICAgICAgIGhhbmRsZUNhbGwoY3VycmVudElu
c3RydWN0aW9uLCBDb25zdHJ1Y3QsIENvZGVGb3JDb25zdHJ1Y3QpOwogICAgICAgICAgICAgTkVY
VF9PUENPREUob3BfY29uc3RydWN0KTsKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIG9wX2Nh
bGxfdmFyYXJnczogewogICAgICAgICAgICAgQVNTRVJUKGlubGluZUNhbGxGcmFtZSgpKTsKLSAg
ICAgICAgICAgIEFTU0VSVChjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kID09IG1faW5s
aW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLT5hcmd1bWVudHNSZWdpc3RlcigpKTsKKyAgICAgICAg
ICAgIEFTU0VSVChjdXJyZW50SW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kID09IG1faW5saW5lU3Rh
Y2tUb3AtPm1fY29kZUJsb2NrLT5hcmd1bWVudHNSZWdpc3RlcigpKTsKICAgICAgICAgICAgIEFT
U0VSVCghbV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2stPnN5bWJvbFRhYmxlKCktPnNsb3dB
cmd1bWVudHMoKSk7CiAgICAgICAgICAgICAvLyBJdCB3b3VsZCBiZSBjb29sIHRvIGZ1bm5lbCB0
aGlzIGludG8gaGFuZGxlQ2FsbCgpIHNvIHRoYXQgaXQgY2FuIGhhbmRsZQogICAgICAgICAgICAg
Ly8gaW5saW5pbmcuIEJ1dCBjdXJyZW50bHkgdGhhdCB3b24ndCBiZSBwcm9maXRhYmxlIGFueXdh
eSwgc2luY2Ugbm9uZSBvZiB0aGUKICAgICAgICAgICAgIC8vIHVzZXMgb2YgY2FsbF92YXJhcmdz
IHdpbGwgYmUgaW5saW5lYWJsZS4gU28gd2Ugc2V0IHRoaXMgdXAgbWFudWFsbHkgYW5kCiAgICAg
ICAgICAgICAvLyB3aXRob3V0IGlubGluZS9pbnRyaW5zaWMgZGV0ZWN0aW9uLgogICAgICAgICAg
ICAgCi0gICAgICAgICAgICBJbnN0cnVjdGlvbiogcHV0SW5zdHJ1Y3Rpb24gPSBjdXJyZW50SW5z
dHJ1Y3Rpb24gKyBPUENPREVfTEVOR1RIKG9wX2NhbGxfdmFyYXJncyk7Ci0gICAgICAgICAgICAK
LSAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSBTcGVjTm9uZTsKLSAgICAg
ICAgICAgIGlmIChpbnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQocHV0SW5zdHJ1Y3Rpb24tPnUub3Bj
b2RlKSA9PSBvcF9jYWxsX3B1dF9yZXN1bHQpIHsKLSAgICAgICAgICAgICAgICBtX2N1cnJlbnRQ
cm9maWxpbmdJbmRleCA9IG1fY3VycmVudEluZGV4ICsgT1BDT0RFX0xFTkdUSChvcF9jYWxsX3Zh
cmFyZ3MpOwotICAgICAgICAgICAgICAgIHByZWRpY3Rpb24gPSBnZXRQcmVkaWN0aW9uKCk7Ci0g
ICAgICAgICAgICB9CisgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0gZ2V0
UHJlZGljdGlvbigpOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBhZGRUb0dyYXBoKENoZWNr
QXJndW1lbnRzTm90Q3JlYXRlZCk7CiAgICAgICAgICAgICAKQEAgLTMwNzQsMjEgKzMwMjUsMTcg
QEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAg
aWYgKEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlclNpemUgKyBhcmdDb3VudCA+IG1fcGFyYW1ldGVy
U2xvdHMpCiAgICAgICAgICAgICAgICAgbV9wYXJhbWV0ZXJTbG90cyA9IEpTU3RhY2s6OkNhbGxG
cmFtZUhlYWRlclNpemUgKyBhcmdDb3VudDsKICAgICAgICAgICAgIAotICAgICAgICAgICAgYWRk
VmFyQXJnQ2hpbGQoZ2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpKTsgLy8gY2Fs
bGVlCi0gICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChnZXQoY3VycmVudEluc3RydWN0aW9uWzJd
LnUub3BlcmFuZCkpOyAvLyB0aGlzCisgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChnZXQoY3Vy
cmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCkpOyAvLyBjYWxsZWUKKyAgICAgICAgICAgIGFk
ZFZhckFyZ0NoaWxkKGdldChjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKSk7IC8vIHRo
aXMKICAgICAgICAgICAgIGZvciAodW5zaWduZWQgYXJndW1lbnQgPSAxOyBhcmd1bWVudCA8IGFy
Z0NvdW50OyArK2FyZ3VtZW50KQogICAgICAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKGdldChh
cmd1bWVudFRvT3BlcmFuZChhcmd1bWVudCkpKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAg
Tm9kZSogY2FsbCA9IGFkZFRvR3JhcGgoTm9kZTo6VmFyQXJnLCBDYWxsLCBPcEluZm8oMCksIE9w
SW5mbyhwcmVkaWN0aW9uKSk7Ci0gICAgICAgICAgICBpZiAoaW50ZXJwcmV0ZXItPmdldE9wY29k
ZUlEKHB1dEluc3RydWN0aW9uLT51Lm9wY29kZSkgPT0gb3BfY2FsbF9wdXRfcmVzdWx0KQotICAg
ICAgICAgICAgICAgIHNldChwdXRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsIGNhbGwpOworICAg
ICAgICAgICAgc2V0KGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQsCisgICAgICAgICAg
ICAgICAgYWRkVG9HcmFwaChOb2RlOjpWYXJBcmcsIENhbGwsIE9wSW5mbygwKSwgT3BJbmZvKHBy
ZWRpY3Rpb24pKSk7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2Nh
bGxfdmFyYXJncyk7CiAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICBjYXNlIG9wX2Nh
bGxfcHV0X3Jlc3VsdDoKLSAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2NhbGxfcHV0X3Jlc3Vs
dCk7Ci0gICAgICAgICAgICAKICAgICAgICAgY2FzZSBvcF9qbmVxX3B0cjoKICAgICAgICAgICAg
IC8vIFN0YXRpY2FsbHkgc3BlY3VsYXRlIGZvciBub3cuIEl0IG1ha2VzIHNlbnNlIHRvIGxldCBz
cGVjdWxhdGUtb25seSBqbmVxX3B0cgogICAgICAgICAgICAgLy8gc3VwcG9ydCBzaW1tZXIgZm9y
IGEgd2hpbGUgYmVmb3JlIG1ha2luZyBpdCBtb3JlIGdlbmVyYWwsIHNpbmNlIGl0J3MKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5jcHAJKHJldmlz
aW9uIDE1MTAwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg0LDcgKzE4NCw2IEBAIENhcGFiaWxpdHlMZXZlbCBj
YXBhYmlsaXR5TGV2ZWwoT3Bjb2RlSUQKICAgICBjYXNlIG9wX2xvb3BfaGludDoKICAgICBjYXNl
IG9wX3JldDoKICAgICBjYXNlIG9wX2VuZDoKLSAgICBjYXNlIG9wX2NhbGxfcHV0X3Jlc3VsdDoK
ICAgICBjYXNlIG9wX25ld19vYmplY3Q6CiAgICAgY2FzZSBvcF9uZXdfYXJyYXk6CiAgICAgY2Fz
ZSBvcF9uZXdfYXJyYXlfd2l0aF9zaXplOgpAQCAtMjA4LDcgKzIwNyw3IEBAIENhcGFiaWxpdHlM
ZXZlbCBjYXBhYmlsaXR5TGV2ZWwoT3Bjb2RlSUQKICAgICAgICAgcmV0dXJuIENhbkNvbXBpbGVB
bmRJbmxpbmU7CiAgICAgICAgIAogICAgIGNhc2Ugb3BfY2FsbF92YXJhcmdzOgotICAgICAgICBp
ZiAoY29kZUJsb2NrLT51c2VzQXJndW1lbnRzKCkgJiYgcGNbM10udS5vcGVyYW5kID09IGNvZGVC
bG9jay0+YXJndW1lbnRzUmVnaXN0ZXIoKSkKKyAgICAgICAgaWYgKGNvZGVCbG9jay0+dXNlc0Fy
Z3VtZW50cygpICYmIHBjWzRdLnUub3BlcmFuZCA9PSBjb2RlQmxvY2stPmFyZ3VtZW50c1JlZ2lz
dGVyKCkpCiAgICAgICAgICAgICByZXR1cm4gQ2FuSW5saW5lOwogICAgICAgICByZXR1cm4gQ2Fu
bm90Q29tcGlsZTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0
Q29tcGlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T1NSRXhpdENvbXBpbGVyLmNwcAkocmV2aXNpb24gMTUxMDA1KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDEs
OCArMTAxLDggQEAgdm9pZCBjb21waWxlT1NSRXhpdChFeGVjU3RhdGUqIGV4ZWMpCiAgICAgICAg
IGV4aXQubV9jb2RlID0gRklOQUxJWkVfQ09ERV9JRigKICAgICAgICAgICAgIHNob3VsZFNob3dE
aXNhc3NlbWJseSgpLAogICAgICAgICAgICAgcGF0Y2hCdWZmZXIsCi0gICAgICAgICAgICAoIkRG
RyBPU1IgZXhpdCAjJXUgKGJjIyV1LCAlcykgZnJvbSAlcyIsCi0gICAgICAgICAgICAgICAgZXhp
dEluZGV4LCBleGl0Lm1fY29kZU9yaWdpbi5ieXRlY29kZUluZGV4LAorICAgICAgICAgICAgKCJE
RkcgT1NSIGV4aXQgIyV1ICglcywgJXMpIGZyb20gJXMiLAorICAgICAgICAgICAgICAgIGV4aXRJ
bmRleCwgdG9DU3RyaW5nKGV4aXQubV9jb2RlT3JpZ2luKS5kYXRhKCksCiAgICAgICAgICAgICAg
ICAgZXhpdEtpbmRUb1N0cmluZyhleGl0Lm1fa2luZCksIHRvQ1N0cmluZygqY29kZUJsb2NrKS5k
YXRhKCkpKTsKICAgICB9CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCShyZXZpc2lvbiAxNTEwMDUp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTc2LDcgKzc2LDYgQEAgdm9pZCBoYW5kbGVFeGl0Q291bnRz
KENDYWxsSGVscGVycyYgaml0LAogCiB2b2lkIHJlaWZ5SW5saW5lZENhbGxGcmFtZXMoQ0NhbGxI
ZWxwZXJzJiBqaXQsIGNvbnN0IE9TUkV4aXRCYXNlJiBleGl0KQogewotI2lmIFVTRShKU1ZBTFVF
NjQpCiAgICAgQVNTRVJUKGppdC5iYXNlbGluZUNvZGVCbG9jaygpLT5qaXRUeXBlKCkgPT0gSklU
Q29kZTo6QmFzZWxpbmVKSVQpOwogICAgIGppdC5zdG9yZVB0cihBc3NlbWJseUhlbHBlcnM6OlRy
dXN0ZWRJbW1QdHIoaml0LmJhc2VsaW5lQ29kZUJsb2NrKCkpLCBBc3NlbWJseUhlbHBlcnM6OmFk
ZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcilKU1N0YWNrOjpDb2RlQmxvY2spKTsKICAgICAKQEAg
LTg0LDE1ICs4MywxMiBAQCB2b2lkIHJlaWZ5SW5saW5lZENhbGxGcmFtZXMoQ0NhbGxIZWxwZXJz
CiAgICAgICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0gY29kZU9yaWdpbi5p
bmxpbmVDYWxsRnJhbWU7CiAgICAgICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2sgPSBq
aXQuYmFzZWxpbmVDb2RlQmxvY2tGb3IoY29kZU9yaWdpbik7CiAgICAgICAgIENvZGVCbG9jayog
YmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXIgPSBqaXQuYmFzZWxpbmVDb2RlQmxvY2tGb3IoaW5s
aW5lQ2FsbEZyYW1lLT5jYWxsZXIpOwotICAgICAgICBWZWN0b3I8Qnl0ZWNvZGVBbmRNYWNoaW5l
T2Zmc2V0PiYgZGVjb2RlZENvZGVNYXAgPSBqaXQuZGVjb2RlZENvZGVNYXBGb3IoYmFzZWxpbmVD
b2RlQmxvY2tGb3JDYWxsZXIpOwotICAgICAgICB1bnNpZ25lZCByZXR1cm5CeXRlY29kZUluZGV4
ID0gaW5saW5lQ2FsbEZyYW1lLT5jYWxsZXIuYnl0ZWNvZGVJbmRleCArIE9QQ09ERV9MRU5HVEgo
b3BfY2FsbCk7Ci0gICAgICAgIEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldCogbWFwcGluZyA9IGJp
bmFyeVNlYXJjaDxCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQsIHVuc2lnbmVkPihkZWNvZGVkQ29k
ZU1hcCwgZGVjb2RlZENvZGVNYXAuc2l6ZSgpLCByZXR1cm5CeXRlY29kZUluZGV4LCBCeXRlY29k
ZUFuZE1hY2hpbmVPZmZzZXQ6OmdldEJ5dGVjb2RlSW5kZXgpOwotICAgICAgICAKLSAgICAgICAg
QVNTRVJUKG1hcHBpbmcpOwotICAgICAgICBBU1NFUlQobWFwcGluZy0+bV9ieXRlY29kZUluZGV4
ID09IHJldHVybkJ5dGVjb2RlSW5kZXgpOworICAgICAgICB1bnNpZ25lZCBjYWxsQnl0ZWNvZGVJ
bmRleCA9IGlubGluZUNhbGxGcmFtZS0+Y2FsbGVyLmJ5dGVjb2RlSW5kZXg7CisgICAgICAgIENh
bGxMaW5rSW5mbyYgY2FsbExpbmtJbmZvID0gYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXItPmdl
dENhbGxMaW5rSW5mbyhjYWxsQnl0ZWNvZGVJbmRleCk7CiAgICAgICAgIAotICAgICAgICB2b2lk
KiBqdW1wVGFyZ2V0ID0gYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXItPmppdENvZGUoKS0+ZXhl
Y3V0YWJsZUFkZHJlc3NBdE9mZnNldChtYXBwaW5nLT5tX21hY2hpbmVDb2RlT2Zmc2V0KTsKKyAg
ICAgICAgdm9pZCoganVtcFRhcmdldCA9IGNhbGxMaW5rSW5mby5jYWxsUmV0dXJuTG9jYXRpb24u
ZXhlY3V0YWJsZUFkZHJlc3MoKTsKIAorI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgICAgIEdQUlJl
ZyBjYWxsZXJGcmFtZUdQUjsKICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+Y2FsbGVyLmlu
bGluZUNhbGxGcmFtZSkgewogICAgICAgICAgICAgaml0LmFkZFB0cihBc3NlbWJseUhlbHBlcnM6
OlRydXN0ZWRJbW0zMihpbmxpbmVDYWxsRnJhbWUtPmNhbGxlci5pbmxpbmVDYWxsRnJhbWUtPnN0
YWNrT2Zmc2V0ICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSksIEdQUkluZm86OmNhbGxGcmFtZVJl
Z2lzdGVyLCBHUFJJbmZvOjpyZWdUMyk7CkBAIC0xMDgsMjQgKzEwNCw3IEBAIHZvaWQgcmVpZnlJ
bmxpbmVkQ2FsbEZyYW1lcyhDQ2FsbEhlbHBlcnMKICAgICAgICAgaml0LnN0b3JlMzIoQXNzZW1i
bHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIoaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgp
KSwgQXNzZW1ibHlIZWxwZXJzOjpwYXlsb2FkRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNh
bGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBKU1N0YWNrOjpBcmd1bWVudENvdW50KSkpOwogICAgICAg
ICBpZiAoIWlubGluZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2FsbCgpKQogICAgICAgICAgICAgaml0
LnN0b3JlNjQoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tNjQoSlNWYWx1ZTo6ZW5jb2RlKEpT
VmFsdWUoaW5saW5lQ2FsbEZyYW1lLT5jYWxsZWUuZ2V0KCkpKSksIEFzc2VtYmx5SGVscGVyczo6
YWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKShpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0
ICsgSlNTdGFjazo6Q2FsbGVlKSkpOwotICAgIH0KICNlbHNlIC8vIFVTRShKU1ZBTFVFNjQpIC8v
IHNvIHRoaXMgaXMgdGhlIDMyLWJpdCBwYXJ0Ci0gICAgQVNTRVJUKGppdC5iYXNlbGluZUNvZGVC
bG9jaygpLT5qaXRUeXBlKCkgPT0gSklUQ29kZTo6QmFzZWxpbmVKSVQpOwotICAgIGppdC5zdG9y
ZVB0cihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoaml0LmJhc2VsaW5lQ29kZUJsb2Nr
KCkpLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IoKFZpcnR1YWxSZWdpc3RlcilKU1N0YWNr
OjpDb2RlQmxvY2spKTsKLSAgICAKLSAgICBmb3IgKENvZGVPcmlnaW4gY29kZU9yaWdpbiA9IGV4
aXQubV9jb2RlT3JpZ2luOyBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZTsgY29kZU9yaWdpbiA9
IGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5jYWxsZXIpIHsKLSAgICAgICAgSW5saW5lQ2Fs
bEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZTsKLSAg
ICAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jayA9IGppdC5iYXNlbGluZUNvZGVCbG9j
a0Zvcihjb2RlT3JpZ2luKTsKLSAgICAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9ja0Zv
ckNhbGxlciA9IGppdC5iYXNlbGluZUNvZGVCbG9ja0ZvcihpbmxpbmVDYWxsRnJhbWUtPmNhbGxl
cik7Ci0gICAgICAgIFZlY3RvcjxCeXRlY29kZUFuZE1hY2hpbmVPZmZzZXQ+JiBkZWNvZGVkQ29k
ZU1hcCA9IGppdC5kZWNvZGVkQ29kZU1hcEZvcihiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlcik7
Ci0gICAgICAgIHVuc2lnbmVkIHJldHVybkJ5dGVjb2RlSW5kZXggPSBpbmxpbmVDYWxsRnJhbWUt
PmNhbGxlci5ieXRlY29kZUluZGV4ICsgT1BDT0RFX0xFTkdUSChvcF9jYWxsKTsKLSAgICAgICAg
Qnl0ZWNvZGVBbmRNYWNoaW5lT2Zmc2V0KiBtYXBwaW5nID0gYmluYXJ5U2VhcmNoPEJ5dGVjb2Rl
QW5kTWFjaGluZU9mZnNldCwgdW5zaWduZWQ+KGRlY29kZWRDb2RlTWFwLCBkZWNvZGVkQ29kZU1h
cC5zaXplKCksIHJldHVybkJ5dGVjb2RlSW5kZXgsIEJ5dGVjb2RlQW5kTWFjaGluZU9mZnNldDo6
Z2V0Qnl0ZWNvZGVJbmRleCk7Ci0gICAgICAgIAotICAgICAgICBBU1NFUlQobWFwcGluZyk7Ci0g
ICAgICAgIEFTU0VSVChtYXBwaW5nLT5tX2J5dGVjb2RlSW5kZXggPT0gcmV0dXJuQnl0ZWNvZGVJ
bmRleCk7Ci0gICAgICAgIAotICAgICAgICB2b2lkKiBqdW1wVGFyZ2V0ID0gYmFzZWxpbmVDb2Rl
QmxvY2tGb3JDYWxsZXItPmppdENvZGUoKS0+ZXhlY3V0YWJsZUFkZHJlc3NBdE9mZnNldChtYXBw
aW5nLT5tX21hY2hpbmVDb2RlT2Zmc2V0KTsKLQogICAgICAgICBHUFJSZWcgY2FsbGVyRnJhbWVH
UFI7CiAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmNhbGxlci5pbmxpbmVDYWxsRnJhbWUp
IHsKICAgICAgICAgICAgIGppdC5hZGQzMihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihp
bmxpbmVDYWxsRnJhbWUtPmNhbGxlci5pbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICogc2l6
ZW9mKEVuY29kZWRKU1ZhbHVlKSksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZv
OjpyZWdUMyk7CkBAIC0xNDQsOCArMTIzLDggQEAgdm9pZCByZWlmeUlubGluZWRDYWxsRnJhbWVz
KENDYWxsSGVscGVycwogICAgICAgICBqaXQuc3RvcmUzMihBc3NlbWJseUhlbHBlcnM6OlRydXN0
ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgQXNzZW1ibHlIZWxwZXJzOjp0YWdGb3IoKFZpcnR1
YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIEpTU3RhY2s6OkNhbGxl
ZSkpKTsKICAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUtPmlzQ2xvc3VyZUNhbGwoKSkKICAg
ICAgICAgICAgIGppdC5zdG9yZVB0cihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoaW5s
aW5lQ2FsbEZyYW1lLT5jYWxsZWUuZ2V0KCkpLCBBc3NlbWJseUhlbHBlcnM6OnBheWxvYWRGb3Io
KFZpcnR1YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIEpTU3RhY2s6
OkNhbGxlZSkpKTsKLSAgICB9CiAjZW5kaWYgLy8gVVNFKEpTVkFMVUU2NCkgLy8gZW5kaW5nIHRo
ZSAjZWxzZSBwYXJ0LCBzbyBkaXJlY3RseSBhYm92ZSBpcyB0aGUgMzItYml0IHBhcnQKKyAgICB9
CiB9CiAKIHZvaWQgYWRqdXN0QW5kSnVtcFRvVGFyZ2V0KENDYWxsSGVscGVycyYgaml0LCBjb25z
dCBPU1JFeGl0QmFzZSYgZXhpdCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJl
dmlzaW9uIDE1MTAwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjM2LDcgKzIzNiw3IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1h
aW5QYXNzKCkKICAgICAgICAgCiAgICAgICAgIE9wY29kZUlEIG9wY29kZUlEID0gbV9pbnRlcnBy
ZXRlci0+Z2V0T3Bjb2RlSUQoY3VycmVudEluc3RydWN0aW9uLT51Lm9wY29kZSk7CiAKLSAgICAg
ICAgaWYgKG1fY29tcGlsYXRpb24gJiYgb3Bjb2RlSUQgIT0gb3BfY2FsbF9wdXRfcmVzdWx0KSB7
CisgICAgICAgIGlmIChtX2NvbXBpbGF0aW9uKSB7CiAgICAgICAgICAgICBhZGQ2NCgKICAgICAg
ICAgICAgICAgICBUcnVzdGVkSW1tMzIoMSksCiAgICAgICAgICAgICAgICAgQWJzb2x1dGVBZGRy
ZXNzKG1fY29tcGlsYXRpb24tPmV4ZWN1dGlvbkNvdW50ZXJGb3IoUHJvZmlsZXI6Ok9yaWdpblN0
YWNrKFByb2ZpbGVyOjpPcmlnaW4oCkBAIC0zNjMsNyArMzYzLDYgQEAgdm9pZCBKSVQ6OnByaXZh
dGVDb21waWxlTWFpblBhc3MoKQogICAgICAgICBERUZJTkVfT1Aob3BfcmVzb2x2ZV93aXRoX2Jh
c2UpCiAgICAgICAgIERFRklORV9PUChvcF9yZXNvbHZlX3dpdGhfdGhpcykKICAgICAgICAgREVG
SU5FX09QKG9wX3JldCkKLSAgICAgICAgREVGSU5FX09QKG9wX2NhbGxfcHV0X3Jlc3VsdCkKICAg
ICAgICAgREVGSU5FX09QKG9wX3JldF9vYmplY3Rfb3JfdGhpcykKICAgICAgICAgREVGSU5FX09Q
KG9wX3JzaGlmdCkKICAgICAgICAgREVGSU5FX09QKG9wX3Vyc2hpZnQpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklULmgJKHJldmlzaW9uIDE1MTAwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTQzMSw4ICs0MzEsOSBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgdm9pZCBjb21waWxlT3BDYWxsKE9wY29kZUlELCBJbnN0cnVjdGlvbios
IHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KTsKICAgICAgICAgdm9pZCBjb21waWxlT3BDYWxs
U2xvd0Nhc2UoT3Bjb2RlSUQsIEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+Ojpp
dGVyYXRvciYsIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KTsKICAgICAgICAgdm9pZCBjb21w
aWxlTG9hZFZhcmFyZ3MoSW5zdHJ1Y3Rpb24qKTsKLSAgICAgICAgdm9pZCBjb21waWxlQ2FsbEV2
YWwoKTsKLSAgICAgICAgdm9pZCBjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShWZWN0b3I8U2xvd0Nh
c2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQgY29tcGlsZUNhbGxFdmFsKEluc3Ry
dWN0aW9uKik7CisgICAgICAgIHZvaWQgY29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoSW5zdHJ1Y3Rp
b24qLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJik7CisgICAgICAgIHZvaWQgZW1p
dFB1dENhbGxSZXN1bHQoSW5zdHJ1Y3Rpb24qKTsKIAogICAgICAgICBlbnVtIENvbXBpbGVPcFN0
cmljdEVxVHlwZSB7IE9wU3RyaWN0RXEsIE9wTlN0cmljdEVxIH07CiAgICAgICAgIHZvaWQgY29t
cGlsZU9wU3RyaWN0RXEoSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBDb21waWxlT3BTdHJpY3RF
cVR5cGUgdHlwZSk7CkBAIC02NDMsNyArNjQ0LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IHZvaWQgZW1pdF9vcF9jYWxsKEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9j
YWxsX2V2YWwoSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2NhbGxfdmFyYXJn
cyhJbnN0cnVjdGlvbiopOwotICAgICAgICB2b2lkIGVtaXRfb3BfY2FsbF9wdXRfcmVzdWx0KElu
c3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9jYXRjaChJbnN0cnVjdGlvbiopOwog
ICAgICAgICB2b2lkIGVtaXRfb3BfY29uc3RydWN0KEluc3RydWN0aW9uKik7CiAgICAgICAgIHZv
aWQgZW1pdF9vcF9nZXRfY2FsbGVlKEluc3RydWN0aW9uKik7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRDYWxsMzJfNjQuY3BwCShyZXZpc2lvbiAxNTEwMDUpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTUwLDcgKzUwLDcgQEAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAogbmFtZXNwYWNlIEpTQyB7CiAK
LXZvaWQgSklUOjplbWl0X29wX2NhbGxfcHV0X3Jlc3VsdChJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rp
b24pCit2b2lkIEpJVDo6ZW1pdFB1dENhbGxSZXN1bHQoSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9u
KQogewogICAgIGludCBkc3QgPSBpbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CiAgICAgZW1pdFZh
bHVlUHJvZmlsaW5nU2l0ZSgpOwpAQCAtMTM4LDkgKzEzOCw5IEBAIHZvaWQgSklUOjplbWl0X29w
X2NvbnN0cnVjdChJbnN0cnVjdGlvbioKIAogdm9pZCBKSVQ6OmNvbXBpbGVMb2FkVmFyYXJncyhJ
bnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCiB7Ci0gICAgaW50IHRoaXNWYWx1ZSA9IGluc3RydWN0
aW9uWzJdLnUub3BlcmFuZDsKLSAgICBpbnQgYXJndW1lbnRzID0gaW5zdHJ1Y3Rpb25bM10udS5v
cGVyYW5kOwotICAgIGludCBmaXJzdEZyZWVSZWdpc3RlciA9IGluc3RydWN0aW9uWzRdLnUub3Bl
cmFuZDsKKyAgICBpbnQgdGhpc1ZhbHVlID0gaW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kOworICAg
IGludCBhcmd1bWVudHMgPSBpbnN0cnVjdGlvbls0XS51Lm9wZXJhbmQ7CisgICAgaW50IGZpcnN0
RnJlZVJlZ2lzdGVyID0gaW5zdHJ1Y3Rpb25bNV0udS5vcGVyYW5kOwogCiAgICAgSnVtcExpc3Qg
c2xvd0Nhc2U7CiAgICAgSnVtcExpc3QgZW5kOwpAQCAtMjAwLDcgKzIwMCw3IEBAIHZvaWQgSklU
Ojpjb21waWxlTG9hZFZhcmFyZ3MoSW5zdHJ1Y3Rpb24KICAgICAgICAgZW5kLmxpbmsodGhpcyk7
CiB9CiAKLXZvaWQgSklUOjpjb21waWxlQ2FsbEV2YWwoKQordm9pZCBKSVQ6OmNvbXBpbGVDYWxs
RXZhbChJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24pCiB7CiAgICAgSklUU3R1YkNhbGwgc3R1YkNh
bGwodGhpcywgY3RpX29wX2NhbGxfZXZhbCk7IC8vIEluaXRpYWxpemVzIFNjb3BlQ2hhaW47IFJl
dHVyblBDOyBDb2RlQmxvY2suCiAgICAgc3R1YkNhbGwuY2FsbCgpOwpAQCAtMjA4LDkgKzIwOCwx
MSBAQCB2b2lkIEpJVDo6Y29tcGlsZUNhbGxFdmFsKCkKICAgICBlbWl0R2V0RnJvbUNhbGxGcmFt
ZUhlYWRlclB0cihKU1N0YWNrOjpDYWxsZXJGcmFtZSwgY2FsbEZyYW1lUmVnaXN0ZXIpOwogCiAg
ICAgc2FtcGxlQ29kZUJsb2NrKG1fY29kZUJsb2NrKTsKKyAgICAKKyAgICBlbWl0UHV0Q2FsbFJl
c3VsdChpbnN0cnVjdGlvbik7CiB9CiAKLXZvaWQgSklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2Fz
ZShWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQordm9pZCBKSVQ6OmNvbXBp
bGVDYWxsRXZhbFNsb3dDYXNlKEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dD
YXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7CiAK
QEAgLTIxOCwxMSArMjIwLDEzIEBAIHZvaWQgSklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShW
ZWN0b3IKICAgICBlbWl0TmFrZWRDYWxsKG1fdm0tPmdldENUSVN0dWIodmlydHVhbENhbGxHZW5l
cmF0b3IpLmNvZGUoKSk7CiAKICAgICBzYW1wbGVDb2RlQmxvY2sobV9jb2RlQmxvY2spOworICAg
IAorICAgIGVtaXRQdXRDYWxsUmVzdWx0KGluc3RydWN0aW9uKTsKIH0KIAogdm9pZCBKSVQ6OmNv
bXBpbGVPcENhbGwoT3Bjb2RlSUQgb3Bjb2RlSUQsIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiwg
dW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpCiB7Ci0gICAgaW50IGNhbGxlZSA9IGluc3RydWN0
aW9uWzFdLnUub3BlcmFuZDsKKyAgICBpbnQgY2FsbGVlID0gaW5zdHJ1Y3Rpb25bMl0udS5vcGVy
YW5kOwogCiAgICAgLyogQ2FsbGVyIGFsd2F5czoKICAgICAgICAgLSBVcGRhdGVzIGNhbGxGcmFt
ZVJlZ2lzdGVyIHRvIGNhbGxlZSBjYWxsRnJhbWUuCkBAIC0yNDEsMTQgKzI0NSwxNCBAQCB2b2lk
IEpJVDo6Y29tcGlsZU9wQ2FsbChPcGNvZGVJRCBvcGNvZGVJCiAgICAgaWYgKG9wY29kZUlEID09
IG9wX2NhbGxfdmFyYXJncykKICAgICAgICAgY29tcGlsZUxvYWRWYXJhcmdzKGluc3RydWN0aW9u
KTsKICAgICBlbHNlIHsKLSAgICAgICAgaW50IGFyZ0NvdW50ID0gaW5zdHJ1Y3Rpb25bMl0udS5v
cGVyYW5kOwotICAgICAgICBpbnQgcmVnaXN0ZXJPZmZzZXQgPSBpbnN0cnVjdGlvblszXS51Lm9w
ZXJhbmQ7CisgICAgICAgIGludCBhcmdDb3VudCA9IGluc3RydWN0aW9uWzNdLnUub3BlcmFuZDsK
KyAgICAgICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0gaW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kOwog
ICAgICAgICAKICAgICAgICAgaWYgKG9wY29kZUlEID09IG9wX2NhbGwgJiYgc2hvdWxkRW1pdFBy
b2ZpbGluZygpKSB7CiAgICAgICAgICAgICBlbWl0TG9hZChyZWdpc3Rlck9mZnNldCArIENhbGxG
cmFtZTo6YXJndW1lbnRPZmZzZXRJbmNsdWRpbmdUaGlzKDApLCByZWdUMCwgcmVnVDEpOwogICAg
ICAgICAgICAgSnVtcCBkb25lID0gYnJhbmNoMzIoTm90RXF1YWwsIHJlZ1QwLCBUcnVzdGVkSW1t
MzIoSlNWYWx1ZTo6Q2VsbFRhZykpOwogICAgICAgICAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1Qx
LCBKU0NlbGw6OnN0cnVjdHVyZU9mZnNldCgpKSwgcmVnVDEpOwotICAgICAgICAgICAgc3RvcmVQ
dHIocmVnVDEsIGluc3RydWN0aW9uWzVdLnUuYXJyYXlQcm9maWxlLT5hZGRyZXNzT2ZMYXN0U2Vl
blN0cnVjdHVyZSgpKTsKKyAgICAgICAgICAgIHN0b3JlUHRyKHJlZ1QxLCBpbnN0cnVjdGlvbls2
XS51LmFycmF5UHJvZmlsZS0+YWRkcmVzc09mTGFzdFNlZW5TdHJ1Y3R1cmUoKSk7CiAgICAgICAg
ICAgICBkb25lLmxpbmsodGhpcyk7CiAgICAgICAgIH0KICAgICAKQEAgLTI2NSw3ICsyNjksNyBA
QCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChPcGNvZGVJRCBvcGNvZGVJCiAgICAgbW92ZShyZWdU
MywgY2FsbEZyYW1lUmVnaXN0ZXIpOwogCiAgICAgaWYgKG9wY29kZUlEID09IG9wX2NhbGxfZXZh
bCkgewotICAgICAgICBjb21waWxlQ2FsbEV2YWwoKTsKKyAgICAgICAgY29tcGlsZUNhbGxFdmFs
KGluc3RydWN0aW9uKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIApAQCAtMjg4LDEyICsyOTIs
MTMgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoT3Bjb2RlSUQgb3Bjb2RlSQogICAgIG1fY2Fs
bFN0cnVjdHVyZVN0dWJDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmhvdFBhdGhP
dGhlciA9IGVtaXROYWtlZENhbGwoKTsKIAogICAgIHNhbXBsZUNvZGVCbG9jayhtX2NvZGVCbG9j
ayk7CisgICAgZW1pdFB1dENhbGxSZXN1bHQoaW5zdHJ1Y3Rpb24pOwogfQogCi12b2lkIEpJVDo6
Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKE9wY29kZUlEIG9wY29kZUlELCBJbnN0cnVjdGlvbiosIFZl
Y3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIHVuc2lnbmVkIGNhbGxMaW5rSW5m
b0luZGV4KQordm9pZCBKSVQ6OmNvbXBpbGVPcENhbGxTbG93Q2FzZShPcGNvZGVJRCBvcGNvZGVJ
RCwgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJh
dG9yJiBpdGVyLCB1bnNpZ25lZCBjYWxsTGlua0luZm9JbmRleCkKIHsKICAgICBpZiAob3Bjb2Rl
SUQgPT0gb3BfY2FsbF9ldmFsKSB7Ci0gICAgICAgIGNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGl0
ZXIpOworICAgICAgICBjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShpbnN0cnVjdGlvbiwgaXRlcik7
CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKQEAgLTMwMyw2ICszMDgsNyBAQCB2b2lkIEpJVDo6
Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKE9wY29kZUlECiAgICAgbV9jYWxsU3RydWN0dXJlU3R1YkNv
bXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uY2FsbFJldHVybkxvY2F0aW9uID0gZW1p
dE5ha2VkQ2FsbChvcGNvZGVJRCA9PSBvcF9jb25zdHJ1Y3QgPyBtX3ZtLT5nZXRDVElTdHViKGxp
bmtDb25zdHJ1Y3RHZW5lcmF0b3IpLmNvZGUoKSA6IG1fdm0tPmdldENUSVN0dWIobGlua0NhbGxH
ZW5lcmF0b3IpLmNvZGUoKSk7CiAKICAgICBzYW1wbGVDb2RlQmxvY2sobV9jb2RlQmxvY2spOwor
ICAgIGVtaXRQdXRDYWxsUmVzdWx0KGluc3RydWN0aW9uKTsKIH0KIAogdm9pZCBKSVQ6OnByaXZh
dGVDb21waWxlQ2xvc3VyZUNhbGwoQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8sIENvZGVCbG9j
ayogY2FsbGVlQ29kZUJsb2NrLCBTdHJ1Y3R1cmUqIGV4cGVjdGVkU3RydWN0dXJlLCBFeGVjdXRh
YmxlQmFzZSogZXhwZWN0ZWRFeGVjdXRhYmxlLCBNYWNyb0Fzc2VtYmxlckNvZGVQdHIgY29kZVB0
cikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAkocmV2aXNpb24gMTUx
MDA1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTEsMjAgKzUxLDI1IEBAIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKIG5hbWVzcGFj
ZSBKU0MgewogCi12b2lkIEpJVDo6ZW1pdF9vcF9jYWxsX3B1dF9yZXN1bHQoSW5zdHJ1Y3Rpb24q
IGluc3RydWN0aW9uKQordm9pZCBKSVQ6OmVtaXRQdXRDYWxsUmVzdWx0KEluc3RydWN0aW9uKiBp
bnN0cnVjdGlvbikKIHsKICAgICBpbnQgZHN0ID0gaW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwog
ICAgIGVtaXRWYWx1ZVByb2ZpbGluZ1NpdGUoKTsKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCk7Ci0gICAgaWYgKGNhbkJlT3B0aW1pemVkT3JJbmxpbmVkKCkpCi0gICAgICAgIGtpbGxM
YXN0UmVzdWx0UmVnaXN0ZXIoKTsgLy8gTWFrZSBsYXN0UmVzdWx0UmVnaXN0ZXIgdHJhY2tpbmcg
c2ltcGxlciBpbiB0aGUgREZHLgorICAgIGlmIChjYW5CZU9wdGltaXplZE9ySW5saW5lZCgpKSB7
CisgICAgICAgIC8vIE1ha2UgbGFzdFJlc3VsdFJlZ2lzdGVyIHRyYWNraW5nIHNpbXBsZXIgaW4g
dGhlIERGRy4gVGhpcyBpcyBuZWVkZWQgYmVjYXVzZQorICAgICAgICAvLyB0aGUgREZHIG1heSBo
YXZlIHRoZSBTZXRMb2NhbCBjb3JyZXNwb25kaW5nIHRvIHRoaXMgQ2FsbCdzIHJldHVybiB2YWx1
ZSBpbgorICAgICAgICAvLyBhIGRpZmZlcmVudCBiYXNpYyBibG9jaywgaWYgaW5saW5pbmcgaGFw
cGVuZWQuIFRoZSBERkcgaXNuJ3Qgc21hcnQgZW5vdWdoIHRvCisgICAgICAgIC8vIHRyYWNrIHRo
ZSBiYXNlbGluZSBKSVQncyBsYXN0IHJlc3VsdCByZWdpc3RlciBhY3Jvc3MgYmFzaWMgYmxvY2tz
LgorICAgICAgICBraWxsTGFzdFJlc3VsdFJlZ2lzdGVyKCk7CisgICAgfQogfQogCiB2b2lkIEpJ
VDo6Y29tcGlsZUxvYWRWYXJhcmdzKEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbikKIHsKLSAgICBp
bnQgdGhpc1ZhbHVlID0gaW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kOwotICAgIGludCBhcmd1bWVu
dHMgPSBpbnN0cnVjdGlvblszXS51Lm9wZXJhbmQ7Ci0gICAgaW50IGZpcnN0RnJlZVJlZ2lzdGVy
ID0gaW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kOworICAgIGludCB0aGlzVmFsdWUgPSBpbnN0cnVj
dGlvblszXS51Lm9wZXJhbmQ7CisgICAgaW50IGFyZ3VtZW50cyA9IGluc3RydWN0aW9uWzRdLnUu
b3BlcmFuZDsKKyAgICBpbnQgZmlyc3RGcmVlUmVnaXN0ZXIgPSBpbnN0cnVjdGlvbls1XS51Lm9w
ZXJhbmQ7CiAKICAgICBraWxsTGFzdFJlc3VsdFJlZ2lzdGVyKCk7CiAKQEAgLTEyNCw3ICsxMjks
NyBAQCB2b2lkIEpJVDo6Y29tcGlsZUxvYWRWYXJhcmdzKEluc3RydWN0aW9uCiAgICAgICAgIGVu
ZC5saW5rKHRoaXMpOwogfQogCi12b2lkIEpJVDo6Y29tcGlsZUNhbGxFdmFsKCkKK3ZvaWQgSklU
Ojpjb21waWxlQ2FsbEV2YWwoSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uKQogewogICAgIEpJVFN0
dWJDYWxsIHN0dWJDYWxsKHRoaXMsIGN0aV9vcF9jYWxsX2V2YWwpOyAvLyBJbml0aWFsaXplcyBT
Y29wZUNoYWluOyBSZXR1cm5QQzsgQ29kZUJsb2NrLgogICAgIHN0dWJDYWxsLmNhbGwoKTsKQEAg
LTEzMiw5ICsxMzcsMTEgQEAgdm9pZCBKSVQ6OmNvbXBpbGVDYWxsRXZhbCgpCiAgICAgZW1pdEdl
dEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoSlNTdGFjazo6Q2FsbGVyRnJhbWUsIGNhbGxGcmFtZVJl
Z2lzdGVyKTsKIAogICAgIHNhbXBsZUNvZGVCbG9jayhtX2NvZGVCbG9jayk7CisgICAgCisgICAg
ZW1pdFB1dENhbGxSZXN1bHQoaW5zdHJ1Y3Rpb24pOwogfQogCi12b2lkIEpJVDo6Y29tcGlsZUNh
bGxFdmFsU2xvd0Nhc2UoVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKK3Zv
aWQgSklUOjpjb21waWxlQ2FsbEV2YWxTbG93Q2FzZShJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24s
IFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCiB7CiAgICAgbGlua1Nsb3dD
YXNlKGl0ZXIpOwogCkBAIC0xNDIsMTEgKzE0OSwxMyBAQCB2b2lkIEpJVDo6Y29tcGlsZUNhbGxF
dmFsU2xvd0Nhc2UoVmVjdG9yCiAgICAgZW1pdE5ha2VkQ2FsbChtX3ZtLT5nZXRDVElTdHViKHZp
cnR1YWxDYWxsR2VuZXJhdG9yKS5jb2RlKCkpOwogCiAgICAgc2FtcGxlQ29kZUJsb2NrKG1fY29k
ZUJsb2NrKTsKKyAgICAKKyAgICBlbWl0UHV0Q2FsbFJlc3VsdChpbnN0cnVjdGlvbik7CiB9CiAK
IHZvaWQgSklUOjpjb21waWxlT3BDYWxsKE9wY29kZUlEIG9wY29kZUlELCBJbnN0cnVjdGlvbiog
aW5zdHJ1Y3Rpb24sIHVuc2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KQogewotICAgIGludCBjYWxs
ZWUgPSBpbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CisgICAgaW50IGNhbGxlZSA9IGluc3RydWN0
aW9uWzJdLnUub3BlcmFuZDsKIAogICAgIC8qIENhbGxlciBhbHdheXM6CiAgICAgICAgIC0gVXBk
YXRlcyBjYWxsRnJhbWVSZWdpc3RlciB0byBjYWxsZWUgY2FsbEZyYW1lLgpAQCAtMTY1LDE0ICsx
NzQsMTQgQEAgdm9pZCBKSVQ6OmNvbXBpbGVPcENhbGwoT3Bjb2RlSUQgb3Bjb2RlSQogICAgIGlm
IChvcGNvZGVJRCA9PSBvcF9jYWxsX3ZhcmFyZ3MpCiAgICAgICAgIGNvbXBpbGVMb2FkVmFyYXJn
cyhpbnN0cnVjdGlvbik7CiAgICAgZWxzZSB7Ci0gICAgICAgIGludCBhcmdDb3VudCA9IGluc3Ry
dWN0aW9uWzJdLnUub3BlcmFuZDsKLSAgICAgICAgaW50IHJlZ2lzdGVyT2Zmc2V0ID0gaW5zdHJ1
Y3Rpb25bM10udS5vcGVyYW5kOworICAgICAgICBpbnQgYXJnQ291bnQgPSBpbnN0cnVjdGlvblsz
XS51Lm9wZXJhbmQ7CisgICAgICAgIGludCByZWdpc3Rlck9mZnNldCA9IGluc3RydWN0aW9uWzRd
LnUub3BlcmFuZDsKIAogICAgICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfY2FsbCAmJiBzaG91bGRF
bWl0UHJvZmlsaW5nKCkpIHsKICAgICAgICAgICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIocmVn
aXN0ZXJPZmZzZXQgKyBDYWxsRnJhbWU6OmFyZ3VtZW50T2Zmc2V0SW5jbHVkaW5nVGhpcygwKSwg
cmVnVDApOwogICAgICAgICAgICAgSnVtcCBkb25lID0gZW1pdEp1bXBJZk5vdEpTQ2VsbChyZWdU
MCk7CiAgICAgICAgICAgICBsb2FkUHRyKEFkZHJlc3MocmVnVDAsIEpTQ2VsbDo6c3RydWN0dXJl
T2Zmc2V0KCkpLCByZWdUMCk7Ci0gICAgICAgICAgICBzdG9yZVB0cihyZWdUMCwgaW5zdHJ1Y3Rp
b25bNV0udS5hcnJheVByb2ZpbGUtPmFkZHJlc3NPZkxhc3RTZWVuU3RydWN0dXJlKCkpOworICAg
ICAgICAgICAgc3RvcmVQdHIocmVnVDAsIGluc3RydWN0aW9uWzZdLnUuYXJyYXlQcm9maWxlLT5h
ZGRyZXNzT2ZMYXN0U2VlblN0cnVjdHVyZSgpKTsKICAgICAgICAgICAgIGRvbmUubGluayh0aGlz
KTsKICAgICAgICAgfQogICAgIApAQCAtMTg4LDcgKzE5Nyw3IEBAIHZvaWQgSklUOjpjb21waWxl
T3BDYWxsKE9wY29kZUlEIG9wY29kZUkKICAgICBtb3ZlKHJlZ1QxLCBjYWxsRnJhbWVSZWdpc3Rl
cik7CiAKICAgICBpZiAob3Bjb2RlSUQgPT0gb3BfY2FsbF9ldmFsKSB7Ci0gICAgICAgIGNvbXBp
bGVDYWxsRXZhbCgpOworICAgICAgICBjb21waWxlQ2FsbEV2YWwoaW5zdHJ1Y3Rpb24pOwogICAg
ICAgICByZXR1cm47CiAgICAgfQogCkBAIC0yMDksMTIgKzIxOCwxNCBAQCB2b2lkIEpJVDo6Y29t
cGlsZU9wQ2FsbChPcGNvZGVJRCBvcGNvZGVJCiAgICAgbV9jYWxsU3RydWN0dXJlU3R1YkNvbXBp
bGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uaG90UGF0aE90aGVyID0gZW1pdE5ha2VkQ2Fs
bCgpOwogCiAgICAgc2FtcGxlQ29kZUJsb2NrKG1fY29kZUJsb2NrKTsKKyAgICAKKyAgICBlbWl0
UHV0Q2FsbFJlc3VsdChpbnN0cnVjdGlvbik7CiB9CiAKLXZvaWQgSklUOjpjb21waWxlT3BDYWxs
U2xvd0Nhc2UoT3Bjb2RlSUQgb3Bjb2RlSUQsIEluc3RydWN0aW9uKiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlciwgdW5zaWduZWQgY2FsbExpbmtJbmZvSW5kZXgpCit2b2lk
IEpJVDo6Y29tcGlsZU9wQ2FsbFNsb3dDYXNlKE9wY29kZUlEIG9wY29kZUlELCBJbnN0cnVjdGlv
biogaW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIsIHVu
c2lnbmVkIGNhbGxMaW5rSW5mb0luZGV4KQogewogICAgIGlmIChvcGNvZGVJRCA9PSBvcF9jYWxs
X2V2YWwpIHsKLSAgICAgICAgY29tcGlsZUNhbGxFdmFsU2xvd0Nhc2UoaXRlcik7CisgICAgICAg
IGNvbXBpbGVDYWxsRXZhbFNsb3dDYXNlKGluc3RydWN0aW9uLCBpdGVyKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KIApAQCAtMjIzLDYgKzIzNCw4IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxs
U2xvd0Nhc2UoT3Bjb2RlSUQKICAgICBtX2NhbGxTdHJ1Y3R1cmVTdHViQ29tcGlsYXRpb25JbmZv
W2NhbGxMaW5rSW5mb0luZGV4XS5jYWxsUmV0dXJuTG9jYXRpb24gPSBlbWl0TmFrZWRDYWxsKG9w
Y29kZUlEID09IG9wX2NvbnN0cnVjdCA/IG1fdm0tPmdldENUSVN0dWIobGlua0NvbnN0cnVjdEdl
bmVyYXRvcikuY29kZSgpIDogbV92bS0+Z2V0Q1RJU3R1YihsaW5rQ2FsbEdlbmVyYXRvcikuY29k
ZSgpKTsKIAogICAgIHNhbXBsZUNvZGVCbG9jayhtX2NvZGVCbG9jayk7CisgICAgCisgICAgZW1p
dFB1dENhbGxSZXN1bHQoaW5zdHJ1Y3Rpb24pOwogfQogCiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBp
bGVDbG9zdXJlQ2FsbChDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbywgQ29kZUJsb2NrKiBjYWxs
ZWVDb2RlQmxvY2ssIFN0cnVjdHVyZSogZXhwZWN0ZWRTdHJ1Y3R1cmUsIEV4ZWN1dGFibGVCYXNl
KiBleHBlY3RlZEV4ZWN1dGFibGUsIE1hY3JvQXNzZW1ibGVyQ29kZVB0ciBjb2RlUHRyKQpAQCAt
MjcxLDYgKzI4NCw0NiBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVDbG9zdXJlQ2FsbChDYWxs
CiAgICAgY2FsbExpbmtJbmZvLT5zdHViID0gc3R1YlJvdXRpbmUucmVsZWFzZSgpOwogfQogCit2
b2lkIEpJVDo6ZW1pdF9vcF9jYWxsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCit7
CisgICAgY29tcGlsZU9wQ2FsbChvcF9jYWxsLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG1fY2FsbExp
bmtJbmZvSW5kZXgrKyk7Cit9CisKK3ZvaWQgSklUOjplbWl0X29wX2NhbGxfZXZhbChJbnN0cnVj
dGlvbiogY3VycmVudEluc3RydWN0aW9uKQoreworICAgIGNvbXBpbGVPcENhbGwob3BfY2FsbF9l
dmFsLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG1fY2FsbExpbmtJbmZvSW5kZXgpOworfQorCit2b2lk
IEpJVDo6ZW1pdF9vcF9jYWxsX3ZhcmFyZ3MoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlv
bikKK3sKKyAgICBjb21waWxlT3BDYWxsKG9wX2NhbGxfdmFyYXJncywgY3VycmVudEluc3RydWN0
aW9uLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOworfQorCit2b2lkIEpJVDo6ZW1pdF9vcF9jb25z
dHJ1Y3QoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKK3sKKyAgICBjb21waWxlT3BD
YWxsKG9wX2NvbnN0cnVjdCwgY3VycmVudEluc3RydWN0aW9uLCBtX2NhbGxMaW5rSW5mb0luZGV4
KyspOworfQorCit2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfY2FsbChJbnN0cnVjdGlvbiogY3VycmVu
dEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQorewor
ICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZShvcF9jYWxsLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0
ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7Cit9CisKK3ZvaWQgSklUOjplbWl0U2xvd19vcF9j
YWxsX2V2YWwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKK3sKKyAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2Uob3Bf
Y2FsbF9ldmFsLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgp
OworfQorIAordm9pZCBKSVQ6OmVtaXRTbG93X29wX2NhbGxfdmFyYXJncyhJbnN0cnVjdGlvbiog
Y3VycmVudEluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVy
KQoreworICAgIGNvbXBpbGVPcENhbGxTbG93Q2FzZShvcF9jYWxsX3ZhcmFyZ3MsIGN1cnJlbnRJ
bnN0cnVjdGlvbiwgaXRlciwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKK30KKwordm9pZCBKSVQ6
OmVtaXRTbG93X29wX2NvbnN0cnVjdChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uLCBW
ZWN0b3I8U2xvd0Nhc2VFbnRyeT46Oml0ZXJhdG9yJiBpdGVyKQoreworICAgIGNvbXBpbGVPcENh
bGxTbG93Q2FzZShvcF9jb25zdHJ1Y3QsIGN1cnJlbnRJbnN0cnVjdGlvbiwgaXRlciwgbV9jYWxs
TGlua0luZm9JbmRleCsrKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgSlNDCiAKICNlbmRpZiAvLyBV
U0UoSlNWQUxVRTY0KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMu
Y3BwCShyZXZpc2lvbiAxNTEwMDUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9w
Y29kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDEsMjYgKzI0MSw2IEBAIHZvaWQgSklUOjpl
bWl0X29wX2lzX3N0cmluZyhJbnN0cnVjdGlvbioKICAgICBlbWl0UHV0VmlydHVhbFJlZ2lzdGVy
KGRzdCk7CiB9CiAKLXZvaWQgSklUOjplbWl0X29wX2NhbGwoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJ
bnN0cnVjdGlvbikKLXsKLSAgICBjb21waWxlT3BDYWxsKG9wX2NhbGwsIGN1cnJlbnRJbnN0cnVj
dGlvbiwgbV9jYWxsTGlua0luZm9JbmRleCsrKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRfb3BfY2Fs
bF9ldmFsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgY29tcGlsZU9w
Q2FsbChvcF9jYWxsX2V2YWwsIGN1cnJlbnRJbnN0cnVjdGlvbiwgbV9jYWxsTGlua0luZm9JbmRl
eCk7Ci19Ci0KLXZvaWQgSklUOjplbWl0X29wX2NhbGxfdmFyYXJncyhJbnN0cnVjdGlvbiogY3Vy
cmVudEluc3RydWN0aW9uKQotewotICAgIGNvbXBpbGVPcENhbGwob3BfY2FsbF92YXJhcmdzLCBj
dXJyZW50SW5zdHJ1Y3Rpb24sIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7Ci19Ci0KLXZvaWQgSklU
OjplbWl0X29wX2NvbnN0cnVjdChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewot
ICAgIGNvbXBpbGVPcENhbGwob3BfY29uc3RydWN0LCBjdXJyZW50SW5zdHJ1Y3Rpb24sIG1fY2Fs
bExpbmtJbmZvSW5kZXgrKyk7Ci19Ci0KIHZvaWQgSklUOjplbWl0X29wX3RlYXJfb2ZmX2FjdGl2
YXRpb24oSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKIHsKICAgICBpbnQgYWN0aXZh
dGlvbiA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CkBAIC0xMDk5LDI2ICsxMDc5
LDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX2luc3RhbmNlb2YoSW5zdHJ1YwogICAgIHN0dWJD
YWxsLmNhbGwoZHN0KTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRTbG93X29wX2NhbGwoSW5zdHJ1Y3Rp
b24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYg
aXRlcikKLXsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2Uob3BfY2FsbCwgY3VycmVudEluc3Ry
dWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5rSW5mb0luZGV4KyspOwotfQotCi12b2lkIEpJVDo6ZW1p
dFNsb3dfb3BfY2FsbF9ldmFsKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24sIFZlY3Rv
cjxTbG93Q2FzZUVudHJ5Pjo6aXRlcmF0b3ImIGl0ZXIpCi17Ci0gICAgY29tcGlsZU9wQ2FsbFNs
b3dDYXNlKG9wX2NhbGxfZXZhbCwgY3VycmVudEluc3RydWN0aW9uLCBpdGVyLCBtX2NhbGxMaW5r
SW5mb0luZGV4KTsKLX0KLSAKLXZvaWQgSklUOjplbWl0U2xvd19vcF9jYWxsX3ZhcmFyZ3MoSW5z
dHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVy
YXRvciYgaXRlcikKLXsKLSAgICBjb21waWxlT3BDYWxsU2xvd0Nhc2Uob3BfY2FsbF92YXJhcmdz
LCBjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7Ci19Ci0K
LXZvaWQgSklUOjplbWl0U2xvd19vcF9jb25zdHJ1Y3QoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0
cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlRW50cnk+OjppdGVyYXRvciYgaXRlcikKLXsKLSAgICBj
b21waWxlT3BDYWxsU2xvd0Nhc2Uob3BfY29uc3RydWN0LCBjdXJyZW50SW5zdHJ1Y3Rpb24sIGl0
ZXIsIG1fY2FsbExpbmtJbmZvSW5kZXgrKyk7Ci19Ci0KIHZvaWQgSklUOjplbWl0U2xvd19vcF90
b19udW1iZXIoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNl
RW50cnk+OjppdGVyYXRvciYgaXRlcikKIHsKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJKHJl
dmlzaW9uIDE1MTAwNSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQ
YXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0NjEsMTYgKzE0NjEsMTYgQEAgaW5saW5lIFNs
b3dQYXRoUmV0dXJuVHlwZSBnZW5lcmljQ2FsbChFeAogICAgIC8vIC0gSWYgcG9zc2libGUsIGxp
bmsgdGhlIGNhbGwncyBpbmxpbmUgY2FjaGUuCiAgICAgLy8gLSBSZXR1cm4gYSB0dXBsZSBvZiBt
YWNoaW5lIGNvZGUgYWRkcmVzcyB0byBjYWxsIGFuZCB0aGUgbmV3IGNhbGwgZnJhbWUuCiAgICAg
Ci0gICAgSlNWYWx1ZSBjYWxsZWVBc1ZhbHVlID0gTExJTlRfT1BfQygxKS5qc1ZhbHVlKCk7Cisg
ICAgSlNWYWx1ZSBjYWxsZWVBc1ZhbHVlID0gTExJTlRfT1BfQygyKS5qc1ZhbHVlKCk7CiAgICAg
Ci0gICAgRXhlY1N0YXRlKiBleGVjQ2FsbGVlID0gZXhlYyArIHBjWzNdLnUub3BlcmFuZDsKKyAg
ICBFeGVjU3RhdGUqIGV4ZWNDYWxsZWUgPSBleGVjICsgcGNbNF0udS5vcGVyYW5kOwogICAgIAot
ICAgIGV4ZWNDYWxsZWUtPnNldEFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKHBjWzJdLnUub3Bl
cmFuZCk7CisgICAgZXhlY0NhbGxlZS0+c2V0QXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMocGNb
M10udS5vcGVyYW5kKTsKICAgICBleGVjQ2FsbGVlLT51bmNoZWNrZWRSKEpTU3RhY2s6OkNhbGxl
ZSkgPSBjYWxsZWVBc1ZhbHVlOwogICAgIGV4ZWNDYWxsZWUtPnNldENhbGxlckZyYW1lKGV4ZWMp
OwogICAgIAotICAgIEFTU0VSVChwY1s0XS51LmNhbGxMaW5rSW5mbyk7Ci0gICAgcmV0dXJuIHNl
dFVwQ2FsbChleGVjQ2FsbGVlLCBwYywga2luZCwgY2FsbGVlQXNWYWx1ZSwgcGNbNF0udS5jYWxs
TGlua0luZm8pOworICAgIEFTU0VSVChwY1s1XS51LmNhbGxMaW5rSW5mbyk7CisgICAgcmV0dXJu
IHNldFVwQ2FsbChleGVjQ2FsbGVlLCBwYywga2luZCwgY2FsbGVlQXNWYWx1ZSwgcGNbNV0udS5j
YWxsTGlua0luZm8pOwogfQogCiBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfY2FsbCkK
QEAgLTE0OTMsMTEgKzE0OTMsMTEgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2Nh
bGxfdmFyYQogICAgIC8vIC0gRmlndXJlIG91dCB3aGF0IHRvIGNhbGwgYW5kIGNvbXBpbGUgaXQg
aWYgbmVjZXNzYXJ5LgogICAgIC8vIC0gUmV0dXJuIGEgdHVwbGUgb2YgbWFjaGluZSBjb2RlIGFk
ZHJlc3MgdG8gY2FsbCBhbmQgdGhlIG5ldyBjYWxsIGZyYW1lLgogICAgIAotICAgIEpTVmFsdWUg
Y2FsbGVlQXNWYWx1ZSA9IExMSU5UX09QX0MoMSkuanNWYWx1ZSgpOworICAgIEpTVmFsdWUgY2Fs
bGVlQXNWYWx1ZSA9IExMSU5UX09QX0MoMikuanNWYWx1ZSgpOwogICAgIAogICAgIEV4ZWNTdGF0
ZSogZXhlY0NhbGxlZSA9IGxvYWRWYXJhcmdzKAogICAgICAgICBleGVjLCAmdm0uaW50ZXJwcmV0
ZXItPnN0YWNrKCksCi0gICAgICAgIExMSU5UX09QX0MoMikuanNWYWx1ZSgpLCBMTElOVF9PUF9D
KDMpLmpzVmFsdWUoKSwgcGNbNF0udS5vcGVyYW5kKTsKKyAgICAgICAgTExJTlRfT1BfQygzKS5q
c1ZhbHVlKCksIExMSU5UX09QX0MoNCkuanNWYWx1ZSgpLCBwY1s1XS51Lm9wZXJhbmQpOwogICAg
IExMSU5UX0NBTExfQ0hFQ0tfRVhDRVBUSU9OKGV4ZWMsIHBjKTsKICAgICAKICAgICBleGVjQ2Fs
bGVlLT51bmNoZWNrZWRSKEpTU3RhY2s6OkNhbGxlZSkgPSBjYWxsZWVBc1ZhbHVlOwpAQCAtMTUx
MCwxMSArMTUxMCwxMSBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfY2FsbF92YXJh
CiBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfY2FsbF9ldmFsKQogewogICAgIExMSU5U
X0JFR0lOX05PX1NFVF9QQygpOwotICAgIEpTVmFsdWUgY2FsbGVlQXNWYWx1ZSA9IExMSU5UX09Q
KDEpLmpzVmFsdWUoKTsKKyAgICBKU1ZhbHVlIGNhbGxlZUFzVmFsdWUgPSBMTElOVF9PUCgyKS5q
c1ZhbHVlKCk7CiAgICAgCi0gICAgRXhlY1N0YXRlKiBleGVjQ2FsbGVlID0gZXhlYyArIHBjWzNd
LnUub3BlcmFuZDsKKyAgICBFeGVjU3RhdGUqIGV4ZWNDYWxsZWUgPSBleGVjICsgcGNbNF0udS5v
cGVyYW5kOwogICAgIAotICAgIGV4ZWNDYWxsZWUtPnNldEFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzKHBjWzJdLnUub3BlcmFuZCk7CisgICAgZXhlY0NhbGxlZS0+c2V0QXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMocGNbM10udS5vcGVyYW5kKTsKICAgICBleGVjQ2FsbGVlLT5zZXRDYWxsZXJG
cmFtZShleGVjKTsKICAgICBleGVjQ2FsbGVlLT51bmNoZWNrZWRSKEpTU3RhY2s6OkNhbGxlZSkg
PSBjYWxsZWVBc1ZhbHVlOwogICAgIGV4ZWNDYWxsZWUtPnNldFNjb3BlKGV4ZWMtPnNjb3BlKCkp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIz
Ml82NC5hc20KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xl
dmVsSW50ZXJwcmV0ZXIzMl82NC5hc20JKHJldmlzaW9uIDE1MTAwNSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCSh3b3JraW5nIGNv
cHkpCkBAIC0xMDEsNyArMTAxLDEyIEBAIGVuZAogCiBtYWNybyBkaXNwYXRjaEFmdGVyQ2FsbCgp
CiAgICAgbG9hZGkgQXJndW1lbnRDb3VudCArIFRhZ09mZnNldFtjZnJdLCBQQwotICAgIGRpc3Bh
dGNoKDYpCisgICAgbG9hZGkgNFtQQ10sIHQyCisgICAgbG9hZGkgMjhbUENdLCB0MworICAgIHN0
b3JlaSB0MSwgVGFnT2Zmc2V0W2NmciwgdDIsIDhdCisgICAgc3RvcmVpIHQwLCBQYXlsb2FkT2Zm
c2V0W2NmciwgdDIsIDhdCisgICAgdmFsdWVQcm9maWxlKHQxLCB0MCwgdDMpCisgICAgZGlzcGF0
Y2goOCkKIGVuZAogCiBtYWNybyBjQ2FsbDIoZnVuY3Rpb24sIGFyZzEsIGFyZzIpCkBAIC0xNTY2
LDI5ICsxNTcxLDI5IEBAIF9sbGludF9vcF9uZXdfZnVuYzoKIAogbWFjcm8gYXJyYXlQcm9maWxl
Rm9yQ2FsbCgpCiAgICAgaWYgVkFMVUVfUFJPRklMRVIKLSAgICAgICAgbG9hZGkgMTJbUENdLCB0
MworICAgICAgICBsb2FkaSAxNltQQ10sIHQzCiAgICAgICAgIGJpbmVxIFRoaXNBcmd1bWVudE9m
ZnNldCArIFRhZ09mZnNldFtjZnIsIHQzLCA4XSwgQ2VsbFRhZywgLmRvbmUKICAgICAgICAgbG9h
ZGkgVGhpc0FyZ3VtZW50T2Zmc2V0ICsgUGF5bG9hZE9mZnNldFtjZnIsIHQzLCA4XSwgdDAKICAg
ICAgICAgbG9hZHAgSlNDZWxsOjptX3N0cnVjdHVyZVt0MF0sIHQwCi0gICAgICAgIGxvYWRwIDIw
W1BDXSwgdDEKKyAgICAgICAgbG9hZHAgMjRbUENdLCB0MQogICAgICAgICBzdG9yZXAgdDAsIEFy
cmF5UHJvZmlsZTo6bV9sYXN0U2VlblN0cnVjdHVyZVt0MV0KICAgICAuZG9uZToKICAgICBlbmQK
IGVuZAogCiBtYWNybyBkb0NhbGwoc2xvd1BhdGgpCi0gICAgbG9hZGkgNFtQQ10sIHQwCi0gICAg
bG9hZGkgMTZbUENdLCB0MQorICAgIGxvYWRpIDhbUENdLCB0MAorICAgIGxvYWRpIDIwW1BDXSwg
dDEKICAgICBsb2FkcCBMTEludENhbGxMaW5rSW5mbzo6Y2FsbGVlW3QxXSwgdDIKICAgICBsb2Fk
Q29uc3RhbnRPclZhcmlhYmxlUGF5bG9hZCh0MCwgQ2VsbFRhZywgdDMsIC5vcENhbGxTbG93KQog
ICAgIGJpbmVxIHQzLCB0MiwgLm9wQ2FsbFNsb3cKLSAgICBsb2FkaSAxMltQQ10sIHQzCisgICAg
bG9hZGkgMTZbUENdLCB0MwogICAgIGxzaGlmdGkgMywgdDMKICAgICBhZGRwIGNmciwgdDMgICMg
dDMgY29udGFpbnMgdGhlIG5ldyB2YWx1ZSBvZiBjZnIKICAgICBsb2FkcCBKU0Z1bmN0aW9uOjpt
X3Njb3BlW3QyXSwgdDAKICAgICBzdG9yZWkgdDIsIENhbGxlZSArIFBheWxvYWRPZmZzZXRbdDNd
CiAgICAgc3RvcmVpIHQwLCBTY29wZUNoYWluICsgUGF5bG9hZE9mZnNldFt0M10KLSAgICBsb2Fk
aSA4W1BDXSwgdDIKKyAgICBsb2FkaSAxMltQQ10sIHQyCiAgICAgc3RvcmVpIFBDLCBBcmd1bWVu
dENvdW50ICsgVGFnT2Zmc2V0W2Nmcl0KICAgICBzdG9yZXAgY2ZyLCBDYWxsZXJGcmFtZVt0M10K
ICAgICBzdG9yZWkgdDIsIEFyZ3VtZW50Q291bnQgKyBQYXlsb2FkT2Zmc2V0W3QzXQpAQCAtMTYy
OSwxNiArMTYzNCw2IEBAIF9sbGludF9vcF9yZXQ6CiAgICAgZG9SZXR1cm4oKQogCiAKLV9sbGlu
dF9vcF9jYWxsX3B1dF9yZXN1bHQ6Ci0gICAgbG9hZGkgNFtQQ10sIHQyCi0gICAgbG9hZGkgOFtQ
Q10sIHQzCi0gICAgc3RvcmVpIHQxLCBUYWdPZmZzZXRbY2ZyLCB0MiwgOF0KLSAgICBzdG9yZWkg
dDAsIFBheWxvYWRPZmZzZXRbY2ZyLCB0MiwgOF0KLSAgICB2YWx1ZVByb2ZpbGUodDEsIHQwLCB0
MykKLSAgICB0cmFjZUV4ZWN1dGlvbigpICMgTmVlZHMgdG8gYmUgaGVyZSBiZWNhdXNlIGl0IHdv
dWxkIGNsb2JiZXIgdDEsIHQwCi0gICAgZGlzcGF0Y2goMykKLQotCiBfbGxpbnRfb3BfcmV0X29i
amVjdF9vcl90aGlzOgogICAgIHRyYWNlRXhlY3V0aW9uKCkKICAgICBjaGVja1N3aXRjaFRvSklU
Rm9yRXBpbG9ndWUoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVs
SW50ZXJwcmV0ZXI2NC5hc20KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xs
aW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHJldmlzaW9uIDE1MTAwNSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCSh3b3JraW5n
IGNvcHkpCkBAIC01NSw3ICs1NSwxMSBAQCBtYWNybyBkaXNwYXRjaEFmdGVyQ2FsbCgpCiAgICAg
bG9hZGkgQXJndW1lbnRDb3VudCArIFRhZ09mZnNldFtjZnJdLCBQQwogICAgIGxvYWRwIENvZGVC
bG9ja1tjZnJdLCBQQgogICAgIGxvYWRwIENvZGVCbG9jazo6bV9pbnN0cnVjdGlvbnNbUEJdLCBQ
QgotICAgIGRpc3BhdGNoKDYpCisgICAgbG9hZGlzRnJvbUluc3RydWN0aW9uKDEsIHQxKQorICAg
IGxvYWRwRnJvbUluc3RydWN0aW9uKDcsIHQyKQorICAgIHN0b3JlcSB0MCwgW2NmciwgdDEsIDhd
CisgICAgdmFsdWVQcm9maWxlKHQwLCB0MikKKyAgICBkaXNwYXRjaCg4KQogZW5kCiAKIG1hY3Jv
IGNDYWxsMihmdW5jdGlvbiwgYXJnMSwgYXJnMikKQEAgLTE0MDEsMjkgKzE0MDUsMjkgQEAgX2xs
aW50X29wX25ld19mdW5jOgogCiBtYWNybyBhcnJheVByb2ZpbGVGb3JDYWxsKCkKICAgICBpZiBW
QUxVRV9QUk9GSUxFUgotICAgICAgICBsb2FkaXNGcm9tSW5zdHJ1Y3Rpb24oMywgdDMpCisgICAg
ICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlvbig0LCB0MykKICAgICAgICAgbG9hZHEgVGhpc0FyZ3Vt
ZW50T2Zmc2V0W2NmciwgdDMsIDhdLCB0MAogICAgICAgICBidHFueiB0MCwgdGFnTWFzaywgLmRv
bmUKICAgICAgICAgbG9hZHAgSlNDZWxsOjptX3N0cnVjdHVyZVt0MF0sIHQwCi0gICAgICAgIGxv
YWRwRnJvbUluc3RydWN0aW9uKDUsIHQxKQorICAgICAgICBsb2FkcEZyb21JbnN0cnVjdGlvbig2
LCB0MSkKICAgICAgICAgc3RvcmVwIHQwLCBBcnJheVByb2ZpbGU6Om1fbGFzdFNlZW5TdHJ1Y3R1
cmVbdDFdCiAgICAgLmRvbmU6CiAgICAgZW5kCiBlbmQKIAogbWFjcm8gZG9DYWxsKHNsb3dQYXRo
KQotICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlvbigxLCB0MCkKLSAgICBsb2FkcEZyb21JbnN0cnVj
dGlvbig0LCB0MSkKKyAgICBsb2FkaXNGcm9tSW5zdHJ1Y3Rpb24oMiwgdDApCisgICAgbG9hZHBG
cm9tSW5zdHJ1Y3Rpb24oNSwgdDEpCiAgICAgbG9hZHAgTExJbnRDYWxsTGlua0luZm86OmNhbGxl
ZVt0MV0sIHQyCiAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZSh0MCwgdDMpCiAgICAgYnFuZXEg
dDMsIHQyLCAub3BDYWxsU2xvdwotICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlvbigzLCB0MykKKyAg
ICBsb2FkaXNGcm9tSW5zdHJ1Y3Rpb24oNCwgdDMpCiAgICAgbHNoaWZ0aSAzLCB0MwogICAgIGFk
ZHAgY2ZyLCB0MwogICAgIGxvYWRwIEpTRnVuY3Rpb246Om1fc2NvcGVbdDJdLCB0MAogICAgIHN0
b3JlcSB0MiwgQ2FsbGVlW3QzXQogICAgIHN0b3JlcSB0MCwgU2NvcGVDaGFpblt0M10KLSAgICBs
b2FkaXNGcm9tSW5zdHJ1Y3Rpb24oMiwgdDIpCisgICAgbG9hZGlzRnJvbUluc3RydWN0aW9uKDMs
IHQyKQogICAgIHN0b3JlaSBQQywgQXJndW1lbnRDb3VudCArIFRhZ09mZnNldFtjZnJdCiAgICAg
c3RvcmVxIGNmciwgQ2FsbGVyRnJhbWVbdDNdCiAgICAgc3RvcmVpIHQyLCBBcmd1bWVudENvdW50
ICsgUGF5bG9hZE9mZnNldFt0M10KQEAgLTE0NjIsMTUgKzE0NjYsNiBAQCBfbGxpbnRfb3BfcmV0
OgogICAgIGRvUmV0dXJuKCkKIAogCi1fbGxpbnRfb3BfY2FsbF9wdXRfcmVzdWx0OgotICAgIGxv
YWRpc0Zyb21JbnN0cnVjdGlvbigxLCB0MikKLSAgICBsb2FkcEZyb21JbnN0cnVjdGlvbigyLCB0
MykKLSAgICBzdG9yZXEgdDAsIFtjZnIsIHQyLCA4XQotICAgIHZhbHVlUHJvZmlsZSh0MCwgdDMp
Ci0gICAgdHJhY2VFeGVjdXRpb24oKQotICAgIGRpc3BhdGNoKDMpCi0KLQogX2xsaW50X29wX3Jl
dF9vYmplY3Rfb3JfdGhpczoKICAgICB0cmFjZUV4ZWN1dGlvbigpCiAgICAgY2hlY2tTd2l0Y2hU
b0pJVEZvckVwaWxvZ3VlKCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dM
ZXZlbEludGVycHJldGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
bGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5jcHAJKHJldmlzaW9uIDE1MTAwNSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDYzLDExICs0NjMsMTAgQEAgSlNWYWx1ZSBDTG9vcDo6ZXhlY3V0ZShDYWxsRnJh
bWUqIGNhbGxGcgogICAgICAgICAvLyBmcm9tIEFyZ3VtZW50Q291bnQudGFnKCkgKHNlZSB0aGUg
ZGlzcGF0Y2hBZnRlckNhbGwoKSBtYWNybyB1c2VkIGluCiAgICAgICAgIC8vIHRoZSBjYWxsVGFy
Z2V0RnVuY3Rpb24oKSBtYWNybyBpbiB0aGUgbGxpbnQgYXNtIGZpbGVzKS4KICAgICAgICAgLy8K
LSAgICAgICAgLy8gRm9yIHRoZSBDIGxvb3AsIHdlIGRvbid0IGhhdmUgdGhlIEpJVCBzdHViIHRv
IHRoaXMgd29yayBmb3IgdXMuCi0gICAgICAgIC8vIFNvLCB3ZSBuZWVkIHRvIGltcGxlbWVudCB0
aGUgZXF1aXZhbGVudCBvZiBkaXNwYXRjaEFmdGVyQ2FsbCgpIGhlcmUKLSAgICAgICAgLy8gYmVm
b3JlIGRpc3BhdGNoaW5nIHRvIHRoZSBQQy4KKyAgICAgICAgLy8gRm9yIHRoZSBDIGxvb3AsIHdl
IGRvbid0IGhhdmUgdGhlIEpJVCBzdHViIHRvIHRoaXMgd29yayBmb3IgdXMuIFNvLAorICAgICAg
ICAvLyB3ZSBqdW1wIHRvIGxsaW50X2dlbmVyaWNfcmV0dXJuX3BvaW50LgogCi0gICAgICAgIHZQ
QyA9IGNhbGxGcmFtZS0+Y3VycmVudFZQQygpICsgT1BDT0RFX0xFTkdUSChvcF9jYWxsKTsKKyAg
ICAgICAgdlBDID0gY2FsbEZyYW1lLT5jdXJyZW50VlBDKCk7CiAKICNpZiBVU0UoSlNWQUxVRTY0
KQogICAgICAgICAvLyBCYXNlZCBvbiBMb3dMZXZlbEludGVycHJldGVyNjQuYXNtJ3MgZGlzcGF0
Y2hBZnRlckNhbGwoKToKQEAgLTQ5MCw3ICs0ODksNyBAQCBKU1ZhbHVlIENMb29wOjpleGVjdXRl
KENhbGxGcmFtZSogY2FsbEZyCiAgICAgICAgIHJCYXNlUEMudnAgPSBjb2RlQmxvY2stPmluc3Ry
dWN0aW9ucygpLmJlZ2luKCk7CiAjZW5kaWYgLy8gVVNFKEpTVkFMVUU2NCkKIAotICAgICAgICBO
RVhUX0lOU1RSVUNUSU9OKCk7CisgICAgICAgIGdvdG8gb3BfZ2VuZXJpY19yZXR1cm5fcG9pbnQ7
CiAKICAgICB9IC8vIEVORCBkb1JldHVybkhlbHBlci4KIAo=
</data>
<flag name="review"
          id="224924"
          type_id="1"
          status="+"
          setter="barraclough"
    />
          </attachment>
      

    </bug>

</bugzilla>