<?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>148663</bug_id>
          
          <creation_ts>2015-08-31 17:53:33 -0700</creation_ts>
          <short_desc>[ES6] Implement tail calls in the DFG</short_desc>
          <delta_ts>2015-09-24 14:43:17 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</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>148662</dependson>
          <blocked>148664</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Basile Clement">basile_clement</reporter>
          <assigned_to name="Michael Saboff">msaboff</assigned_to>
          <cc>msaboff</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1122394</commentid>
    <comment_count>0</comment_count>
    <who name="Basile Clement">basile_clement</who>
    <bug_when>2015-08-31 17:53:33 -0700</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1122415</commentid>
    <comment_count>1</comment_count>
    <who name="Basile Clement">basile_clement</who>
    <bug_when>2015-08-31 18:10:24 -0700</bug_when>
    <thetext>*** Bug 148396 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1123662</commentid>
    <comment_count>2</comment_count>
      <attachid>260629</attachid>
    <who name="Basile Clement">basile_clement</who>
    <bug_when>2015-09-04 15:04:37 -0700</bug_when>
    <thetext>Created attachment 260629
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1128210</commentid>
    <comment_count>3</comment_count>
      <attachid>261795</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2015-09-22 21:41:08 -0700</bug_when>
    <thetext>Created attachment 261795
Rebased patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1128211</commentid>
    <comment_count>4</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2015-09-22 21:44:45 -0700</bug_when>
    <thetext>Performance looks neutral.

Benchmark report for SunSpider, LongSpider, V8Spider, Octane, Kraken, JSRegress, AsmBench, and CompressionBench on msaboff-pro (MacPro5,1).

VMs tested:
&quot;Baseline&quot; at /Volumes/Data/src/webkit.baseline/WebKitBuild/Release/JavaScriptCore.framework/Versions/A/Resources/jsc
&quot;DFGTailCall&quot; at /Volumes/Data/src/webkit/WebKitBuild/Release/JavaScriptCore.framework/Versions/A/Resources/jsc

Collected 4 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.

                                                         Baseline                DFGTailCall                                    
SunSpider:
   3d-cube                                            7.7888+-0.3978     ?      8.2094+-0.5329        ? might be 1.0540x slower
   3d-morph                                           8.0474+-0.2568     ?      8.1255+-0.2713        ?
   3d-raytrace                                        8.7263+-0.3312     ?      8.8106+-0.3233        ?
   access-binary-trees                                3.1325+-0.2051     ?      3.2696+-0.3624        ? might be 1.0438x slower
   access-fannkuch                                    8.5892+-0.2342            8.4156+-0.1804          might be 1.0206x faster
   access-nbody                                       4.1957+-0.1718     ?      4.2846+-0.0695        ? might be 1.0212x slower
   access-nsieve                                      4.5762+-0.1689            4.5161+-0.1670          might be 1.0133x faster
   bitops-3bit-bits-in-byte                           1.7435+-0.1100     ?      1.7438+-0.2322        ?
   bitops-bits-in-byte                                5.6418+-0.1019            5.5717+-0.0673          might be 1.0126x faster
   bitops-bitwise-and                                 2.8099+-0.1876     ?      2.8205+-0.1363        ?
   bitops-nsieve-bits                                 4.3158+-0.1175     ?      4.3914+-0.2366        ? might be 1.0175x slower
   controlflow-recursive                              3.4345+-0.1858     ?      3.4379+-0.1225        ?
   crypto-aes                                         6.3780+-0.2457     ?      6.3954+-0.1843        ?
   crypto-md5                                         3.8901+-0.1705     ?      3.9142+-0.1973        ?
   crypto-sha1                                        3.3477+-0.2048     ?      3.3715+-0.1143        ?
   date-format-tofte                                 12.3043+-0.1870     ?     13.1113+-1.0023        ? might be 1.0656x slower
   date-format-xparb                                  7.3878+-0.2446     ?      7.5095+-0.2658        ? might be 1.0165x slower
   math-cordic                                        4.3063+-0.1574     ?      4.3132+-0.0501        ?
   math-partial-sums                                  9.8937+-0.1065     ^      9.5465+-0.1925        ^ definitely 1.0364x faster
   math-spectral-norm                                 2.9990+-0.1181     ?      3.1037+-0.1738        ? might be 1.0349x slower
   regexp-dna                                         9.9925+-0.5481            9.9820+-0.4612        
   string-base64                                      6.5573+-0.1596     ?      6.8555+-0.6031        ? might be 1.0455x slower
   string-fasta                                       9.2047+-0.3852     ?      9.2399+-0.1782        ?
   string-tagcloud                                   12.7942+-0.3663           12.7661+-0.3584        
   string-unpack-code                                26.5804+-0.7743     ?     26.8784+-0.7939        ? might be 1.0112x slower
   string-validate-input                              6.7125+-0.0339     ?      6.7983+-0.2925        ? might be 1.0128x slower

   &lt;arithmetic&gt;                                       7.1289+-0.0762     ?      7.2070+-0.0679        ? might be 1.0110x slower

                                                         Baseline                DFGTailCall                                    
LongSpider:
   3d-cube                                         1179.5365+-19.7070    ?   1180.4827+-17.3837       ?
   3d-morph                                        1885.6129+-4.3127     ?   1887.4265+-1.9385        ?
   3d-raytrace                                     1026.8480+-5.0015         1025.7185+-4.2906        
   access-binary-trees                             1413.7698+-19.7762        1411.8890+-9.7762        
   access-fannkuch                                  452.7803+-5.3857          444.5068+-20.1574         might be 1.0186x faster
   access-nbody                                    1024.5708+-23.7799        1016.6013+-2.8586        
   access-nsieve                                    671.8754+-6.9141     ?    681.2875+-6.8282        ? might be 1.0140x slower
   bitops-3bit-bits-in-byte                          44.8389+-1.4670           44.2724+-0.3127          might be 1.0128x faster
   bitops-bits-in-byte                              344.1475+-5.8110          338.9313+-11.5732         might be 1.0154x faster
   bitops-nsieve-bits                               619.5832+-4.5638     ?    624.4348+-9.4335        ?
   controlflow-recursive                            754.0759+-16.9099         749.0163+-0.4765        
   crypto-aes                                       897.7081+-17.1670         897.2540+-7.6019        
   crypto-md5                                       782.5632+-8.9274     ?    786.7239+-10.4105       ?
   crypto-sha1                                     1061.7086+-22.0916        1057.2622+-30.2118       
   date-format-tofte                                978.7759+-26.1332    ?   1033.5573+-100.7544      ? might be 1.0560x slower
   date-format-xparb                               1071.0712+-56.2105    ?   1241.3810+-273.4755      ? might be 1.1590x slower
   hash-map                                         232.0809+-2.1058     ?    234.3266+-4.9796        ?
   math-cordic                                      751.7740+-116.6195        637.5632+-3.3749          might be 1.1791x faster
   math-partial-sums                               1143.8297+-30.8765        1131.2697+-4.4174          might be 1.0111x faster
   math-spectral-norm                              1068.0338+-2.5707     ?   1068.0542+-2.9279        ?
   string-base64                                    535.1267+-5.2008     ?    539.9913+-6.6800        ?
   string-fasta                                     581.4053+-7.3173     ?    582.7686+-2.1562        ?
   string-tagcloud                                  289.2969+-9.1040     ?    292.4290+-9.0782        ? might be 1.0108x slower

   &lt;geometric&gt;                                      672.3446+-5.2878     ?    672.7918+-8.6708        ? might be 1.0007x slower

                                                         Baseline                DFGTailCall                                    
V8Spider:
   crypto                                            70.9175+-1.1216     ?     71.3063+-2.5127        ?
   deltablue                                         92.8710+-7.1900     ?     93.6901+-3.0011        ?
   earley-boyer                                      64.7821+-2.7145           63.8411+-1.2598          might be 1.0147x faster
   raytrace                                          39.4613+-0.4889           39.4335+-0.9815        
   regexp                                           103.6878+-0.8621     ?    104.6589+-0.7060        ?
   richards                                          82.6918+-1.4820     ?     82.9915+-0.7769        ?
   splay                                             51.0956+-1.1482           50.2823+-1.1103          might be 1.0162x faster

   &lt;geometric&gt;                                       68.8949+-0.7162           68.8612+-0.7976          might be 1.0005x faster

                                                         Baseline                DFGTailCall                                    
Octane:
   encrypt                                           0.30902+-0.00256          0.30648+-0.00525       
   decrypt                                           5.73096+-0.05170    ?     5.75263+-0.05052       ?
   deltablue                                x2       0.27214+-0.02245          0.27027+-0.02358       
   earley                                            0.52070+-0.00446    ?     0.52751+-0.00866       ? might be 1.0131x slower
   boyer                                             8.77211+-0.08966    ?     8.96322+-0.23356       ? might be 1.0218x slower
   navier-stokes                            x2       6.38042+-0.02555    ?     6.38544+-0.04132       ?
   raytrace                                 x2       1.60174+-0.02221          1.58881+-0.00719       
   richards                                 x2       0.17346+-0.00512          0.17185+-0.00193       
   splay                                    x2       0.51924+-0.00160          0.51605+-0.00295       
   regexp                                   x2      38.52270+-1.97708    ?    38.69635+-0.37219       ?
   pdfjs                                    x2      59.69286+-0.48333    ?    59.90907+-0.52232       ?
   mandreel                                 x2      67.70280+-1.00525         67.32283+-0.48922       
   gbemu                                    x2      59.11966+-1.51125         57.86253+-1.32638         might be 1.0217x faster
   closure                                           0.92742+-0.00497    ?     0.93870+-0.00683       ? might be 1.0122x slower
   jquery                                           11.79645+-0.05561    ?    11.81784+-0.05196       ?
   box2d                                    x2      17.56778+-0.27145    ?    17.73687+-0.56692       ?
   zlib                                     x2     565.33777+-43.96923   ?   578.10109+-9.20658       ? might be 1.0226x slower
   typescript                               x2    1065.97498+-22.57863   ?  1078.02136+-28.01936      ? might be 1.0113x slower

   &lt;geometric&gt;                                       9.06409+-0.05747    ?     9.07471+-0.06644       ? might be 1.0012x slower

                                                         Baseline                DFGTailCall                                    
Kraken:
   ai-astar                                          347.704+-14.200           332.847+-9.157           might be 1.0446x faster
   audio-beat-detection                               80.502+-0.649      ?      81.819+-2.181         ? might be 1.0164x slower
   audio-dft                                         128.389+-0.882            128.307+-2.787         
   audio-fft                                          58.479+-0.236      ?      58.932+-0.949         ?
   audio-oscillator                                  102.686+-1.380            102.256+-0.960         
   imaging-darkroom                                   96.129+-0.949      ?      97.856+-0.793         ? might be 1.0180x slower
   imaging-desaturate                                 89.575+-0.306             89.368+-1.482         
   imaging-gaussian-blur                             144.259+-4.262            143.533+-2.267         
   json-parse-financial                               66.805+-1.734             66.434+-0.965         
   json-stringify-tinderbox                           41.045+-1.238      ?      41.607+-1.888         ? might be 1.0137x slower
   stanford-crypto-aes                                64.130+-3.170      ?      67.014+-4.718         ? might be 1.0450x slower
   stanford-crypto-ccm                                58.172+-0.715      ?      59.839+-2.825         ? might be 1.0286x slower
   stanford-crypto-pbkdf2                            140.830+-1.367      ?     142.955+-2.704         ? might be 1.0151x slower
   stanford-crypto-sha256-iterative                   58.572+-2.557             57.417+-0.902           might be 1.0201x faster

   &lt;arithmetic&gt;                                      105.520+-1.411            105.013+-1.130           might be 1.0048x faster

                                                         Baseline                DFGTailCall                                    
JSRegress:
   abc-forward-loop-equal                            55.3311+-0.7160           55.2350+-0.5722        
   abc-postfix-backward-loop                         54.5864+-0.4585     ?     54.6446+-0.4678        ?
   abc-simple-backward-loop                          54.4604+-1.0095     ?     56.0410+-0.8554        ? might be 1.0290x slower
   abc-simple-forward-loop                           54.5222+-0.4587           54.4584+-0.4181        
   abc-skippy-loop                                   38.2791+-1.5219           38.0302+-1.4265        
   abs-boolean                                        3.8292+-0.1438     ?      3.8370+-0.1724        ?
   adapt-to-double-divide                            16.9408+-0.7455           16.8444+-0.4975        
   aliased-arguments-getbyval                         1.7945+-0.3095            1.6440+-0.1958          might be 1.0916x faster
   allocate-big-object                                3.8622+-0.2168     ?      3.9012+-0.1266        ? might be 1.0101x slower
   arguments-named-and-reflective                    14.3739+-0.3705           14.3485+-0.5512        
   arguments-out-of-bounds                           14.2553+-0.1664     ?     14.4144+-0.5341        ? might be 1.0112x slower
   arguments-strict-mode                             12.3326+-0.5127           12.3292+-0.9000        
   arguments                                         10.9042+-0.3589     ?     11.1893+-0.1446        ? might be 1.0261x slower
   arity-mismatch-inlining                            1.3828+-0.0668            1.3232+-0.0846          might be 1.0451x faster
   array-access-polymorphic-structure                 9.2903+-0.1527            9.2654+-0.2084        
   array-nonarray-polymorhpic-access                 39.2097+-1.2938           39.0497+-1.7026        
   array-prototype-every                            119.6423+-2.4877     ?    120.5378+-5.1342        ?
   array-prototype-forEach                          119.5713+-2.5932          116.6915+-2.1569          might be 1.0247x faster
   array-prototype-map                              129.5639+-1.2711     ?    131.2197+-4.9119        ? might be 1.0128x slower
   array-prototype-reduce                           111.5253+-2.6502          110.9019+-0.3327        
   array-prototype-reduceRight                      110.5060+-0.8547     ?    111.6653+-2.1224        ? might be 1.0105x slower
   array-prototype-some                             122.1015+-5.7647          120.9609+-4.4705        
   array-splice-contiguous                           33.3472+-0.9739           33.0060+-0.4786          might be 1.0103x faster
   array-with-double-add                              5.6218+-0.1554     ?      5.7079+-0.0752        ? might be 1.0153x slower
   array-with-double-increment                        4.1847+-0.0859     ?      4.1980+-0.2142        ?
   array-with-double-mul-add                          7.2412+-0.1799            7.2336+-0.1551        
   array-with-double-sum                              4.3486+-0.0993     ?      4.4576+-0.1398        ? might be 1.0251x slower
   array-with-int32-add-sub                           9.5880+-0.1370            9.3790+-0.2166          might be 1.0223x faster
   array-with-int32-or-double-sum                     4.5386+-0.1175     ?      4.5667+-0.0827        ?
   ArrayBuffer-DataView-alloc-large-long-lived   
                                                     45.9347+-0.2573           45.5042+-0.9624        
   ArrayBuffer-DataView-alloc-long-lived             18.0393+-0.1821     ?     18.2972+-0.4053        ? might be 1.0143x slower
   ArrayBuffer-Int32Array-byteOffset                  5.4985+-0.3491     ?      5.5275+-0.1112        ?
   ArrayBuffer-Int8Array-alloc-large-long-lived   
                                                     45.8167+-0.7418     ?     45.8613+-1.4964        ?
   ArrayBuffer-Int8Array-alloc-long-lived-buffer   
                                                     29.7310+-0.2157     ?     30.2057+-1.1100        ? might be 1.0160x slower
   ArrayBuffer-Int8Array-alloc-long-lived            16.8595+-0.2139     ?     17.1170+-0.4591        ? might be 1.0153x slower
   ArrayBuffer-Int8Array-alloc                       15.0150+-1.3360           14.8759+-0.6938        
   arrowfunction-call                                14.8674+-0.1697     ?     14.9205+-0.1570        ?
   asmjs_bool_bug                                     9.8812+-0.1152     ^      9.4711+-0.1381        ^ definitely 1.0433x faster
   assign-custom-setter-polymorphic                   4.2610+-0.1103     ?      4.3608+-0.1292        ? might be 1.0234x slower
   assign-custom-setter                               6.0833+-0.5655            5.9625+-0.1434          might be 1.0203x faster
   basic-set                                         11.0873+-0.2897           11.0016+-0.3812        
   big-int-mul                                        5.8458+-0.0890            5.8340+-0.1729        
   boolean-test                                       4.5223+-0.1206            4.5165+-0.1103        
   branch-fold                                        4.7630+-0.1098     ?      4.8396+-0.1962        ? might be 1.0161x slower
   branch-on-string-as-boolean                       22.2302+-1.1751     ?     22.3675+-0.6960        ?
   by-val-generic                                     3.7742+-0.1753            3.7442+-0.1865        
   call-spread-apply                                 39.6058+-1.9722     ?     42.1378+-1.0384        ? might be 1.0639x slower
   call-spread-call                                  31.0830+-0.9158     ?     33.2073+-2.8239        ? might be 1.0683x slower
   captured-assignments                               0.6443+-0.0197     ?      0.6763+-0.0757        ? might be 1.0496x slower
   cast-int-to-double                                 8.5660+-0.1428     ?      8.6931+-0.2015        ? might be 1.0148x slower
   cell-argument                                      8.5723+-0.2849            8.5608+-0.6001        
   cfg-simplify                                       3.8461+-0.1771            3.7891+-0.1315          might be 1.0150x faster
   chain-getter-access                               10.3351+-0.2094     ?     10.3544+-0.2782        ?
   cmpeq-obj-to-obj-other                            14.6263+-0.3317     ?     15.0491+-0.1156        ? might be 1.0289x slower
   constant-test                                      8.0894+-0.1512     ?      8.1897+-0.2027        ? might be 1.0124x slower
   create-lots-of-functions                          17.0063+-0.8647           16.6900+-0.4750          might be 1.0190x faster
   cse-new-array-buffer                               3.2469+-0.2403     ?      3.3925+-0.2495        ? might be 1.0448x slower
   cse-new-array                                      3.5253+-0.2984            3.5229+-0.3579        
   DataView-custom-properties                        54.5881+-2.9577           54.3990+-4.4880        
   delay-tear-off-arguments-strictmode               19.1149+-0.8998     !     22.9505+-0.2580        ! definitely 1.2007x slower
   deltablue-varargs                                286.2195+-20.5402         282.6075+-23.1642         might be 1.0128x faster
   destructuring-arguments                          242.1696+-8.8550     ?    244.6104+-2.4336        ? might be 1.0101x slower
   destructuring-parameters-overridden-by-function   
                                                      0.7216+-0.1050     ?      0.7905+-0.2391        ? might be 1.0955x slower
   destructuring-swap                                 7.9072+-0.0856            7.8936+-0.1092        
   direct-arguments-getbyval                          1.6138+-0.2423     ?      1.6245+-0.2321        ?
   div-boolean-double                                 5.6387+-0.0889            5.5267+-0.0824          might be 1.0203x faster
   div-boolean                                       10.0410+-0.1872     ?     10.1172+-0.1221        ?
   double-get-by-val-out-of-bounds                    6.1592+-0.1974     ?      6.1702+-0.0321        ?
   double-pollution-getbyval                          9.8017+-0.0746     ?      9.8402+-0.2331        ?
   double-pollution-putbyoffset                       5.6603+-0.0865     ?      5.6922+-0.1155        ?
   double-real-use                                   39.3621+-0.2082     ?     39.6688+-1.1997        ?
   double-to-int32-typed-array-no-inline              3.0776+-0.2332     ?      3.1323+-0.1732        ? might be 1.0178x slower
   double-to-int32-typed-array                        2.9897+-0.1429            2.9708+-0.1274        
   double-to-uint32-typed-array-no-inline             3.2231+-0.0832     ?      3.2385+-0.1502        ?
   double-to-uint32-typed-array                       2.8542+-0.0452     ?      2.9752+-0.1217        ? might be 1.0424x slower
   elidable-new-object-dag                           55.5906+-1.9936           54.9734+-1.5579          might be 1.0112x faster
   elidable-new-object-roflcopter                    53.5666+-0.6806     ?     53.7802+-1.4664        ?
   elidable-new-object-then-call                     50.3943+-1.3090           49.8466+-1.5436          might be 1.0110x faster
   elidable-new-object-tree                          64.3982+-1.1935     ?     65.5256+-0.8401        ? might be 1.0175x slower
   empty-string-plus-int                              7.6281+-0.1934            7.6116+-0.1635        
   emscripten-cube2hash                              46.2209+-3.3901           45.0978+-0.8445          might be 1.0249x faster
   exit-length-on-plain-object                       18.4730+-0.2264     ?     18.8950+-0.4024        ? might be 1.0228x slower
   external-arguments-getbyval                        1.9639+-0.4106            1.7302+-0.1515          might be 1.1351x faster
   external-arguments-putbyval                        3.2880+-0.0644            3.1769+-0.2403          might be 1.0350x faster
   fixed-typed-array-storage-var-index                1.6885+-0.0983     ?      1.7040+-0.0888        ?
   fixed-typed-array-storage                          1.2508+-0.0230     ?      1.3069+-0.1487        ? might be 1.0449x slower
   Float32Array-matrix-mult                           6.1191+-0.1136     ?      6.1326+-0.3574        ?
   Float32Array-to-Float64Array-set                  77.8887+-2.4455           74.8903+-0.7232          might be 1.0400x faster
   Float64Array-alloc-long-lived                     95.3076+-2.5815     ?     96.0162+-2.7563        ?
   Float64Array-to-Int16Array-set                    94.4171+-2.8071     ?     94.4580+-0.6487        ?
   fold-double-to-int                                18.8237+-0.3176     ?     19.1255+-0.4789        ? might be 1.0160x slower
   fold-get-by-id-to-multi-get-by-offset-rare-int   
                                                     12.4022+-0.4526     ?     12.4150+-0.4748        ?
   fold-get-by-id-to-multi-get-by-offset             10.3164+-0.5596     ?     10.6585+-0.7682        ? might be 1.0332x slower
   fold-multi-get-by-offset-to-get-by-offset   
                                                      8.8873+-0.6471     ?      9.0765+-0.9486        ? might be 1.0213x slower
   fold-multi-get-by-offset-to-poly-get-by-offset   
                                                      9.8825+-0.0661            9.5205+-0.9849          might be 1.0380x faster
   fold-multi-put-by-offset-to-poly-put-by-offset   
                                                     10.9700+-0.5951           10.8301+-0.4545          might be 1.0129x faster
   fold-multi-put-by-offset-to-put-by-offset   
                                                      8.1747+-0.5973     ?      8.1831+-0.7922        ?
   fold-multi-put-by-offset-to-replace-or-transition-put-by-offset   
                                                     15.4023+-1.1939           15.3929+-0.5734        
   fold-put-by-id-to-multi-put-by-offset             11.7297+-0.9880           11.7217+-0.5884        
   fold-put-by-val-with-string-to-multi-put-by-offset   
                                                     12.6503+-0.6396     ?     12.6620+-1.0933        ?
   fold-put-by-val-with-symbol-to-multi-put-by-offset   
                                                     12.4619+-0.8654     ?     12.5367+-0.8806        ?
   fold-put-structure                                 7.8521+-0.8788            7.7603+-0.0468          might be 1.0118x faster
   for-of-iterate-array-entries                      15.7335+-0.4452     ?     16.1095+-0.1728        ? might be 1.0239x slower
   for-of-iterate-array-keys                          4.6548+-0.1678            4.4893+-0.3201          might be 1.0369x faster
   for-of-iterate-array-values                        4.3502+-0.2964     ?      4.4396+-0.1711        ? might be 1.0206x slower
   fround                                            19.2032+-1.1800           18.9995+-1.1553          might be 1.0107x faster
   ftl-library-inlining-dataview                     95.7421+-4.4737     ?     99.3726+-5.0023        ? might be 1.0379x slower
   ftl-library-inlining                             135.9210+-20.4549    ?    136.3967+-21.9537       ?
   function-call                                     14.9718+-0.2811           14.6810+-0.4211          might be 1.0198x faster
   function-dot-apply                                 3.2668+-0.1158            3.1328+-0.1170          might be 1.0428x faster
   function-test                                      4.4569+-0.1912            4.4095+-0.1185          might be 1.0108x faster
   function-with-eval                               147.0847+-6.2672          144.5777+-0.6269          might be 1.0173x faster
   gcse-poly-get-less-obvious                        27.9525+-4.2565     ?     30.8727+-0.6242        ? might be 1.1045x slower
   gcse-poly-get                                     31.5898+-6.1060     ?     34.1845+-0.9260        ? might be 1.0821x slower
   gcse                                               6.3725+-0.0239     ?      6.3876+-0.0703        ?
   get-by-id-bimorphic-check-structure-elimination-simple   
                                                      3.2191+-0.1013     ?      3.3238+-0.0478        ? might be 1.0325x slower
   get-by-id-bimorphic-check-structure-elimination   
                                                      8.4140+-0.2181     ?      8.4174+-0.1042        ?
   get-by-id-chain-from-try-block                     3.4435+-0.1078     ?      3.5331+-0.3209        ? might be 1.0260x slower
   get-by-id-check-structure-elimination              7.9521+-0.1357     ?      8.0190+-0.1201        ?
   get-by-id-proto-or-self                           21.5109+-2.7697           21.2623+-2.7087          might be 1.0117x faster
   get-by-id-quadmorphic-check-structure-elimination-simple   
                                                      3.9139+-0.1307            3.8876+-0.1337        
   get-by-id-self-or-proto                           20.3011+-0.5647     ?     23.4559+-3.9708        ? might be 1.1554x slower
   get-by-val-out-of-bounds                           5.8170+-0.3137     ?      5.8719+-0.2341        ?
   get-by-val-with-string-bimorphic-check-structure-elimination-simple   
                                                      4.2888+-0.1658     ?      4.3130+-0.0837        ?
   get-by-val-with-string-bimorphic-check-structure-elimination   
                                                     10.2550+-0.2955           10.2402+-0.1130        
   get-by-val-with-string-chain-from-try-block   
                                                      3.4482+-0.1826     ?      3.5675+-0.1706        ? might be 1.0346x slower
   get-by-val-with-string-check-structure-elimination   
                                                      9.2450+-0.2220            9.1584+-0.2659        
   get-by-val-with-string-proto-or-self              21.2010+-3.0854     ?     21.4015+-2.2477        ?
   get-by-val-with-string-quadmorphic-check-structure-elimination-simple   
                                                      4.7819+-0.1609     !      5.1091+-0.0749        ! definitely 1.0684x slower
   get-by-val-with-string-self-or-proto              21.6230+-5.3376     ?     22.6007+-4.6402        ? might be 1.0452x slower
   get-by-val-with-symbol-bimorphic-check-structure-elimination-simple   
                                                      4.8340+-0.1028            4.7760+-0.1180          might be 1.0121x faster
   get-by-val-with-symbol-bimorphic-check-structure-elimination   
                                                     19.4860+-0.6114     ?     19.5811+-0.3196        ?
   get-by-val-with-symbol-chain-from-try-block   
                                                      3.5037+-0.1327     ?      3.7463+-0.1214        ? might be 1.0692x slower
   get-by-val-with-symbol-check-structure-elimination   
                                                     18.2292+-0.4831     ?     18.4967+-0.5844        ? might be 1.0147x slower
   get-by-val-with-symbol-proto-or-self              21.9639+-3.2792     ?     23.0912+-4.5837        ? might be 1.0513x slower
   get-by-val-with-symbol-quadmorphic-check-structure-elimination-simple   
                                                      5.7471+-0.1102     !      6.2165+-0.0358        ! definitely 1.0817x slower
   get-by-val-with-symbol-self-or-proto              21.0655+-0.6345           20.5322+-0.5720          might be 1.0260x faster
   get_callee_monomorphic                             3.6478+-0.2417     ?      3.6890+-0.0435        ? might be 1.0113x slower
   get_callee_polymorphic                             4.7430+-0.2521     ?      4.7590+-0.1327        ?
   getter-no-activation                               5.9073+-0.1095     ?      5.9442+-0.0873        ?
   getter-prototype                                  14.2040+-0.3659           14.0000+-0.3442          might be 1.0146x faster
   getter-richards                                  132.1426+-2.6470     ?    135.8157+-2.8346        ? might be 1.0278x slower
   getter                                             7.3760+-0.1092     ?      7.6945+-0.2498        ? might be 1.0432x slower
   global-object-access-with-mutating-structure   
                                                      7.7170+-0.2401            7.5082+-0.2668          might be 1.0278x faster
   global-var-const-infer-fire-from-opt               1.3108+-0.2748     ?      1.3379+-0.3203        ? might be 1.0207x slower
   global-var-const-infer                             1.0718+-0.1524     ?      1.2140+-0.2171        ? might be 1.1327x slower
   hard-overflow-check-equal                         60.2768+-0.7572     ?     61.0984+-1.8250        ? might be 1.0136x slower
   hard-overflow-check                               59.6483+-0.3569     ?     59.9224+-0.4754        ?
   HashMap-put-get-iterate-keys                      34.1113+-0.4437           33.9995+-0.5943        
   HashMap-put-get-iterate                           34.1355+-0.9340           33.3905+-0.4868          might be 1.0223x faster
   HashMap-string-put-get-iterate                    37.0669+-1.2773           36.3701+-0.5949          might be 1.0192x faster
   hoist-make-rope                                   12.2126+-1.5165           11.8792+-0.5715          might be 1.0281x faster
   hoist-poly-check-structure-effectful-loop   
                                                      6.6980+-0.1821            6.6664+-0.1327        
   hoist-poly-check-structure                         5.1210+-0.1760            5.0850+-0.1320        
   imul-double-only                                   8.6913+-1.3197     ?      8.8845+-0.4415        ? might be 1.0222x slower
   imul-int-only                                     10.5109+-0.3401     ?     10.5781+-0.1897        ?
   imul-mixed                                         8.6102+-0.6747            8.4028+-0.8407          might be 1.0247x faster
   in-four-cases                                     25.2070+-0.1720     ?     25.8465+-0.8936        ? might be 1.0254x slower
   in-one-case-false                                 14.8081+-0.1992     ?     14.8638+-0.0296        ?
   in-one-case-true                                  14.6401+-0.3317     ?     14.7158+-0.1886        ?
   in-two-cases                                      15.1991+-0.2348     ?     15.4390+-0.0711        ? might be 1.0158x slower
   indexed-properties-in-objects                      3.8678+-0.1367     ?      3.8885+-0.1405        ?
   infer-closure-const-then-mov-no-inline             4.9021+-0.0678     ?      4.9280+-0.0483        ?
   infer-closure-const-then-mov                      21.5128+-1.0947           20.7963+-0.7218          might be 1.0345x faster
   infer-closure-const-then-put-to-scope-no-inline   
                                                     15.6231+-0.2940     !     17.0295+-0.6267        ! definitely 1.0900x slower
   infer-closure-const-then-put-to-scope             28.2352+-0.8263     !     32.1329+-0.4922        ! definitely 1.1380x slower
   infer-closure-const-then-reenter-no-inline   
                                                     70.8542+-0.2554     !     75.1354+-2.2366        ! definitely 1.0604x slower
   infer-closure-const-then-reenter                  32.9135+-0.4086           32.9135+-0.5212        
   infer-constant-global-property                     4.8287+-0.0840            4.7628+-0.1317          might be 1.0138x faster
   infer-constant-property                            3.4333+-0.2909            3.3195+-0.1353          might be 1.0343x faster
   infer-one-time-closure-ten-vars                   11.2028+-0.3012     ?     11.3585+-0.5621        ? might be 1.0139x slower
   infer-one-time-closure-two-vars                   10.7540+-0.3383           10.6120+-0.8115          might be 1.0134x faster
   infer-one-time-closure                            10.4895+-0.4907     ?     10.8303+-0.4115        ? might be 1.0325x slower
   infer-one-time-deep-closure                       17.9077+-0.6900     ?     18.0877+-0.5364        ? might be 1.0101x slower
   inline-arguments-access                            5.9421+-0.2075     ?      6.1542+-0.1497        ? might be 1.0357x slower
   inline-arguments-aliased-access                    6.1534+-0.1523            6.1302+-0.2643        
   inline-arguments-local-escape                      6.0735+-0.1746            6.0570+-0.3213        
   inline-get-scoped-var                              5.7407+-0.1030     ?      5.9384+-0.3851        ? might be 1.0344x slower
   inlined-put-by-id-transition                      15.9532+-0.7791           15.3768+-0.2710          might be 1.0375x faster
   inlined-put-by-val-with-string-transition   
                                                     67.4059+-2.4243           66.5160+-0.7777          might be 1.0134x faster
   inlined-put-by-val-with-symbol-transition   
                                                     67.4373+-2.0196           66.9291+-0.9971        
   int-or-other-abs-then-get-by-val                   6.5318+-0.0909     ?      6.5790+-0.1331        ?
   int-or-other-abs-zero-then-get-by-val             27.0789+-0.5508     ?     27.6973+-1.1670        ? might be 1.0228x slower
   int-or-other-add-then-get-by-val                   6.1646+-0.1351            6.0771+-0.1093          might be 1.0144x faster
   int-or-other-add                                   8.1415+-0.0814            8.1281+-0.1349        
   int-or-other-div-then-get-by-val                   5.0495+-0.0629            5.0345+-0.1278        
   int-or-other-max-then-get-by-val                   6.1035+-0.5376     ?      6.2316+-0.2590        ? might be 1.0210x slower
   int-or-other-min-then-get-by-val                   5.1052+-0.0599     ?      5.1372+-0.1979        ?
   int-or-other-mod-then-get-by-val                   4.9699+-0.1625            4.9383+-0.1477        
   int-or-other-mul-then-get-by-val                   5.0447+-0.0115     ?      5.1116+-0.0877        ? might be 1.0132x slower
   int-or-other-neg-then-get-by-val                   5.6839+-0.2306     ?      5.7122+-0.1107        ?
   int-or-other-neg-zero-then-get-by-val             27.7164+-0.6025           27.6932+-0.7313        
   int-or-other-sub-then-get-by-val                   6.0214+-0.1799     ?      6.0771+-0.2058        ?
   int-or-other-sub                                   5.2634+-0.1966     ?      5.3150+-0.1358        ?
   int-overflow-local                                 6.1353+-0.1491            6.1006+-0.1755        
   Int16Array-alloc-long-lived                       66.2073+-1.3049     ?     66.5265+-1.2735        ?
   Int16Array-bubble-sort-with-byteLength            35.9858+-1.0533           35.7953+-0.4857        
   Int16Array-bubble-sort                            35.3242+-1.2012     ?     35.9808+-1.0445        ? might be 1.0186x slower
   Int16Array-load-int-mul                            1.9994+-0.1733     ?      2.1000+-0.1491        ? might be 1.0503x slower
   Int16Array-to-Int32Array-set                      73.6180+-0.9164           72.5906+-1.1069          might be 1.0142x faster
   Int32Array-alloc-large                            33.3827+-0.7128           33.3157+-2.5257        
   Int32Array-alloc-long-lived                       76.1688+-3.7978     ?     76.5027+-1.7783        ?
   Int32Array-alloc                                   4.6697+-0.0848            4.5880+-0.1143          might be 1.0178x faster
   Int32Array-Int8Array-view-alloc                    9.4282+-0.5009            9.1642+-0.3507          might be 1.0288x faster
   int52-spill                                        7.2183+-0.1218            7.1758+-0.1807        
   Int8Array-alloc-long-lived                        58.7581+-1.8508     ?     58.9814+-0.8686        ?
   Int8Array-load-with-byteLength                     4.8325+-0.0806     ?      4.8399+-0.1501        ?
   Int8Array-load                                     4.7968+-0.1721     ?      4.9178+-0.0981        ? might be 1.0252x slower
   integer-divide                                    13.6631+-0.1257     ?     13.9529+-0.1645        ? might be 1.0212x slower
   integer-modulo                                     2.8162+-0.2071            2.7487+-0.1480          might be 1.0246x faster
   is-boolean-fold-tricky                             5.7344+-0.2289            5.6863+-0.1970        
   is-boolean-fold                                    3.9841+-0.1264     ?      4.0070+-0.1569        ?
   is-function-fold-tricky-internal-function   
                                                     14.7742+-0.5831     ?     14.8207+-0.4168        ?
   is-function-fold-tricky                            5.8057+-0.1451            5.7957+-0.1327        
   is-function-fold                                   4.0941+-0.0721            4.0938+-0.0530        
   is-number-fold-tricky                              5.6331+-0.1598     ?      5.6734+-0.0653        ?
   is-number-fold                                     4.0234+-0.1640            4.0053+-0.1157        
   is-object-or-null-fold-functions                   4.2267+-0.1374            4.1337+-0.1396          might be 1.0225x faster
   is-object-or-null-fold-less-tricky                 5.8228+-0.1565            5.7097+-0.0864          might be 1.0198x faster
   is-object-or-null-fold-tricky                      7.4877+-0.1497     ?      7.5042+-0.0867        ?
   is-object-or-null-fold                             4.0568+-0.0696     ?      4.0997+-0.0730        ? might be 1.0106x slower
   is-object-or-null-trickier-function                5.8865+-0.1021     ?      5.9835+-0.1680        ? might be 1.0165x slower
   is-object-or-null-trickier-internal-function   
                                                     15.6406+-0.8316           15.5267+-0.5724        
   is-object-or-null-tricky-function                  5.9039+-0.0531            5.8745+-0.0728        
   is-object-or-null-tricky-internal-function   
                                                     11.5463+-0.1787     ?     11.6710+-0.7717        ? might be 1.0108x slower
   is-string-fold-tricky                              5.6631+-0.1479            5.6315+-0.1098        
   is-string-fold                                     4.0468+-0.1499            3.9515+-0.0553          might be 1.0241x faster
   is-undefined-fold-tricky                           4.7289+-0.0662     ?      4.7996+-0.1264        ? might be 1.0150x slower
   is-undefined-fold                                  4.0548+-0.1225            3.9915+-0.0972          might be 1.0159x faster
   JSONP-negative-0                                   0.4425+-0.0713            0.4332+-0.0664          might be 1.0214x faster
   large-int-captured                                 6.9828+-0.2342            6.7319+-0.1183          might be 1.0373x faster
   large-int-neg                                     20.1047+-0.5772           20.0015+-0.6694        
   large-int                                         17.6391+-0.4768           17.5262+-0.4263        
   load-varargs-elimination                          29.5137+-1.5591           29.2297+-0.4781        
   logical-not-weird-types                            5.0599+-0.1729            5.0198+-0.0754        
   logical-not                                        6.5868+-0.0861            6.4501+-0.5672          might be 1.0212x faster
   lots-of-fields                                    16.4277+-0.2450     ?     16.6249+-0.5422        ? might be 1.0120x slower
   make-indexed-storage                               4.1078+-0.7618     ?      4.1291+-0.4051        ?
   make-rope-cse                                      6.4398+-0.2770     ?      6.5569+-0.1630        ? might be 1.0182x slower
   marsaglia-larger-ints                             53.4167+-0.1690           53.2972+-0.4304        
   marsaglia-osr-entry                               26.2850+-0.6016     ?     26.7410+-0.6385        ? might be 1.0173x slower
   math-with-out-of-bounds-array-values              32.3813+-0.8365     ?     34.0828+-5.3131        ? might be 1.0525x slower
   max-boolean                                        3.3012+-0.1008     ?      3.3303+-0.1056        ?
   method-on-number                                  23.3975+-0.0929     ?     23.5590+-0.6341        ?
   min-boolean                                        3.4427+-0.1099            3.3433+-0.1257          might be 1.0297x faster
   minus-boolean-double                               4.3688+-0.0881            4.2940+-0.0931          might be 1.0174x faster
   minus-boolean                                      3.3772+-0.0741            3.3699+-0.1824        
   misc-strict-eq                                    44.6631+-2.8392     ?     47.1971+-1.5311        ? might be 1.0567x slower
   mod-boolean-double                                11.9190+-0.2063     ?     11.9370+-0.3105        ?
   mod-boolean                                        9.2039+-0.0843     ?      9.2172+-0.2094        ?
   mul-boolean-double                                 4.8439+-0.0902     ?      4.8993+-0.0573        ? might be 1.0114x slower
   mul-boolean                                        3.5550+-0.1844     ?      3.5851+-0.0918        ?
   neg-boolean                                        4.2474+-0.1149     ?      4.2654+-0.1531        ?
   negative-zero-divide                               0.6118+-0.1136            0.5510+-0.1062          might be 1.1103x faster
   negative-zero-modulo                               0.5475+-0.1181     ?      0.6185+-0.1174        ? might be 1.1297x slower
   negative-zero-negate                               0.6255+-0.1115            0.5689+-0.1256          might be 1.0996x faster
   nested-function-parsing                           74.6467+-2.0601           73.7341+-1.4711          might be 1.0124x faster
   new-array-buffer-dead                            144.8440+-3.8024          144.7908+-3.4345        
   new-array-buffer-push                             10.2363+-0.2722            9.9948+-0.3310          might be 1.0242x faster
   new-array-dead                                    18.6015+-1.2916           18.4682+-1.7416        
   new-array-push                                     5.5914+-0.2377     ?      5.6494+-0.5091        ? might be 1.0104x slower
   no-inline-constructor                             50.4978+-0.9453     ?     51.7305+-0.6338        ? might be 1.0244x slower
   number-test                                        4.4879+-0.2070     ?      4.5061+-0.1541        ?
   object-closure-call                                7.8605+-0.2116     ?      7.9490+-0.3339        ? might be 1.0113x slower
   object-get-own-property-symbols-on-large-array   
                                                      5.4386+-0.3351            5.3590+-0.6780          might be 1.0149x faster
   object-test                                        4.3301+-0.2079     ?      4.3385+-0.0813        ?
   obvious-sink-pathology-taken                     175.9863+-8.7999          173.3778+-2.1452          might be 1.0150x faster
   obvious-sink-pathology                           157.4793+-5.4554          157.4117+-3.9609        
   obviously-elidable-new-object                     43.2812+-1.4690           42.8738+-0.6965        
   plus-boolean-arith                                 3.3644+-0.0961     ?      3.3932+-0.1049        ?
   plus-boolean-double                                4.2550+-0.1617     ?      4.3124+-0.1581        ? might be 1.0135x slower
   plus-boolean                                       3.2725+-0.0632     ?      3.2793+-0.1605        ?
   poly-chain-access-different-prototypes-simple   
                                                      5.2083+-0.0962            5.2073+-0.1339        
   poly-chain-access-different-prototypes             5.3184+-0.1268            5.2488+-0.0928          might be 1.0133x faster
   poly-chain-access-simpler                          5.1708+-0.0887     ?      5.2316+-0.1331        ? might be 1.0118x slower
   poly-chain-access                                  5.0928+-0.1316     ?      5.1196+-0.0086        ?
   poly-stricteq                                     81.4213+-3.1971           79.1108+-1.1568          might be 1.0292x faster
   polymorphic-array-call                             2.0444+-0.2422            1.9955+-0.2138          might be 1.0245x faster
   polymorphic-get-by-id                              4.9067+-0.2040     ?      4.9097+-0.0941        ?
   polymorphic-put-by-id                             41.6035+-1.2528           41.5458+-0.5121        
   polymorphic-put-by-val-with-string                42.4899+-0.6129     ?     42.5343+-0.2404        ?
   polymorphic-put-by-val-with-symbol                42.3147+-0.2594     ?     46.5060+-11.3465       ? might be 1.0991x slower
   polymorphic-structure                             23.5127+-0.2157     ?     23.5537+-0.1876        ?
   polyvariant-monomorphic-get-by-id                 11.5355+-0.4018           11.3075+-0.3300          might be 1.0202x faster
   proto-getter-access                               10.2637+-0.2251     ?     10.3750+-0.2268        ? might be 1.0108x slower
   prototype-access-with-mutating-prototype           7.3411+-0.3848            7.2590+-0.0990          might be 1.0113x faster
   put-by-id-replace-and-transition                  12.5023+-0.1212           12.4937+-0.2213        
   put-by-id-slightly-polymorphic                     3.5905+-0.1121     ?      3.6587+-0.2151        ? might be 1.0190x slower
   put-by-id                                         18.4805+-0.7760           18.4344+-0.8780        
   put-by-val-direct                                  0.5693+-0.0873     ?      0.6091+-0.1054        ? might be 1.0700x slower
   put-by-val-large-index-blank-indexing-type   
                                                      8.5427+-0.4697            8.1695+-0.1381          might be 1.0457x faster
   put-by-val-machine-int                             3.7180+-0.0983            3.5805+-0.2588          might be 1.0384x faster
   put-by-val-with-string-replace-and-transition   
                                                     19.0206+-0.5815     ?     19.0710+-0.1259        ?
   put-by-val-with-string-slightly-polymorphic   
                                                      4.6475+-0.1167     ?      4.7345+-0.0882        ? might be 1.0187x slower
   put-by-val-with-string                            19.6821+-0.9161     ?     19.9146+-0.9508        ? might be 1.0118x slower
   put-by-val-with-symbol-replace-and-transition   
                                                     21.4284+-0.2696           21.1508+-0.7331          might be 1.0131x faster
   put-by-val-with-symbol-slightly-polymorphic   
                                                      4.6458+-0.1078     ?      4.7195+-0.0588        ? might be 1.0159x slower
   put-by-val-with-symbol                            19.4153+-0.1338     ?     19.4875+-0.8700        ?
   rare-osr-exit-on-local                            16.5329+-0.3339     ?     16.5817+-0.2448        ?
   raytrace-with-empty-try-catch                      8.7294+-0.4361     ?      8.9993+-0.3829        ? might be 1.0309x slower
   raytrace-with-try-catch                           15.8220+-0.4933           15.6906+-0.4315        
   register-pressure-from-osr                        27.1371+-0.1783     ?     27.2601+-0.5510        ?
   repeat-multi-get-by-offset                        29.5069+-0.7213     ?     29.9561+-0.4714        ? might be 1.0152x slower
   richards-empty-try-catch                         135.2493+-1.8993     ^    131.4328+-1.5808        ^ definitely 1.0290x faster
   richards-try-catch                               398.3760+-5.2827     ?    399.9555+-6.0613        ?
   setter-prototype                                  11.2853+-0.1493           11.2393+-0.4252        
   setter                                             6.8647+-0.1371     !      7.1657+-0.1012        ! definitely 1.0438x slower
   simple-activation-demo                            33.8738+-0.3021           33.6100+-0.9054        
   simple-getter-access                              14.1514+-0.5392           13.8968+-0.1861          might be 1.0183x faster
   simple-poly-call-nested                            9.2468+-0.1215     ?      9.4760+-0.2060        ? might be 1.0248x slower
   simple-poly-call                                   1.8317+-0.0773     ?      1.9190+-0.0466        ? might be 1.0476x slower
   sin-boolean                                       20.4214+-0.9569           20.3898+-1.0620        
   singleton-scope                                   83.7467+-0.2295     !     87.6097+-0.6702        ! definitely 1.0461x slower
   sink-function                                     13.7983+-1.5190           13.5153+-0.3390          might be 1.0209x faster
   sink-huge-activation                              19.6956+-0.7550     ?     20.3403+-0.4318        ? might be 1.0327x slower
   sinkable-new-object-dag                           87.2641+-7.0362           84.0300+-1.8946          might be 1.0385x faster
   sinkable-new-object-taken                         69.7563+-1.6904     ^     67.4288+-0.5819        ^ definitely 1.0345x faster
   sinkable-new-object                               46.8794+-2.1180     ?     47.1642+-0.4903        ?
   slow-array-profile-convergence                     3.9322+-0.4017            3.8824+-0.3288          might be 1.0128x faster
   slow-convergence                                   3.8404+-0.1443     ?      3.8452+-0.2879        ?
   slow-ternaries                                    33.2897+-1.7131           32.8353+-0.6207          might be 1.0138x faster
   sorting-benchmark                                 25.4269+-0.5424     ?     26.1058+-0.9021        ? might be 1.0267x slower
   sparse-conditional                                 1.7377+-0.1982            1.6875+-0.1693          might be 1.0298x faster
   splice-to-remove                                  19.1738+-0.4681     ?     19.3600+-0.5372        ?
   string-char-code-at                               20.7411+-0.6499           20.7320+-0.0720        
   string-concat-object                               3.2491+-0.0961            3.2232+-0.1227        
   string-concat-pair-object                          3.1933+-0.2504     ?      3.2966+-0.2580        ? might be 1.0324x slower
   string-concat-pair-simple                         17.0602+-0.5551     ?     17.1470+-0.4772        ?
   string-concat-simple                              17.6267+-0.6251           17.5656+-0.6169        
   string-cons-repeat                                11.7784+-0.8071           11.3310+-0.1732          might be 1.0395x faster
   string-cons-tower                                 10.7148+-0.2154     ?     10.8149+-0.1848        ?
   string-equality                                   22.8705+-0.7421     ?     22.9037+-0.6779        ?
   string-get-by-val-big-char                        10.9009+-0.4933           10.8651+-0.1824        
   string-get-by-val-out-of-bounds-insane             5.0627+-0.1763     ?      5.1525+-0.1534        ? might be 1.0177x slower
   string-get-by-val-out-of-bounds                    6.9869+-0.2672            6.9207+-0.2309        
   string-get-by-val                                  4.8042+-0.1301     ?      4.8594+-0.0467        ? might be 1.0115x slower
   string-hash                                        2.8319+-0.0942     ?      2.8533+-0.0763        ?
   string-long-ident-equality                        18.5268+-0.4442     ?     18.5740+-0.3289        ?
   string-out-of-bounds                              14.7247+-0.3043     ?     14.9757+-0.3358        ? might be 1.0170x slower
   string-repeat-arith                               43.6411+-1.7096           43.0590+-0.8481          might be 1.0135x faster
   string-sub                                        86.4532+-2.6000     ?     86.7214+-0.9246        ?
   string-test                                        4.4455+-0.1901     ?      4.6250+-0.2083        ? might be 1.0404x slower
   string-var-equality                               58.4955+-2.6866     ?     58.8772+-1.6097        ?
   structure-hoist-over-transitions                   3.6075+-0.1288            3.5405+-0.1553          might be 1.0189x faster
   substring-concat-weird                            57.7360+-0.5074           57.4568+-0.5176        
   substring-concat                                  62.4897+-0.2323     ?     63.1217+-1.8261        ? might be 1.0101x slower
   substring                                         69.1993+-0.4395     ?     69.5025+-1.0216        ?
   switch-char-constant                               3.3950+-0.1479     ?      3.4104+-0.1469        ?
   switch-char                                        7.9372+-0.1402     ?      8.0222+-0.0723        ? might be 1.0107x slower
   switch-constant                                   12.6862+-1.8744     ?     13.7786+-1.7150        ? might be 1.0861x slower
   switch-string-basic-big-var                       31.5855+-0.5137           31.2365+-0.6899          might be 1.0112x faster
   switch-string-basic-big                           30.0753+-0.6577           29.4207+-1.7144          might be 1.0222x faster
   switch-string-basic-var                           31.4505+-2.1584     ?     31.4893+-0.2692        ?
   switch-string-basic                               20.2057+-1.1552     ?     20.3121+-1.1022        ?
   switch-string-big-length-tower-var                27.9063+-0.9241     ?     28.2067+-0.7041        ? might be 1.0108x slower
   switch-string-length-tower-var                    20.7842+-0.1133     ?     21.0868+-0.4899        ? might be 1.0146x slower
   switch-string-length-tower                        14.8210+-0.3757     ?     15.4916+-0.5764        ? might be 1.0452x slower
   switch-string-short                               14.9973+-0.1606     ?     15.2503+-0.2991        ? might be 1.0169x slower
   switch                                            16.6416+-1.9651           16.0685+-1.4995          might be 1.0357x faster
   tear-off-arguments-simple                          4.6444+-0.2176            4.5443+-0.1119          might be 1.0220x faster
   tear-off-arguments                                 6.3484+-0.3580     ?      6.3619+-0.2894        ?
   temporal-structure                                16.5682+-0.1402           16.4520+-0.1736        
   to-int32-boolean                                  21.0151+-0.2202     ?     21.2387+-0.1276        ? might be 1.0106x slower
   try-catch-get-by-val-cloned-arguments             14.9413+-0.4189     ?     14.9724+-0.6329        ?
   try-catch-get-by-val-direct-arguments              3.1475+-0.3211            2.9012+-0.0703          might be 1.0849x faster
   try-catch-get-by-val-scoped-arguments              7.2106+-0.2139     ?      7.2950+-0.0669        ? might be 1.0117x slower
   typed-array-get-set-by-val-profiling              32.1276+-0.6007     ?     32.3626+-0.7705        ?
   undefined-property-access                        475.2025+-23.5852    ?    476.5773+-18.0517       ?
   undefined-test                                     4.6574+-0.0579            4.6288+-0.2748        
   unprofiled-licm                                   23.0513+-0.5322     ?     23.2170+-0.5387        ?
   v8-raytrace-with-empty-try-catch                  84.2730+-2.8798           83.3123+-1.1732          might be 1.0115x faster
   v8-raytrace-with-try-catch                       108.3260+-2.6904     ?    110.3037+-6.7058        ? might be 1.0183x slower
   varargs-call                                      18.2652+-0.2078           17.7675+-0.3492          might be 1.0280x faster
   varargs-construct-inline                          36.2510+-1.3477           36.1662+-1.2083        
   varargs-construct                                 29.9048+-0.7633     ?     30.0914+-0.3973        ?
   varargs-inline                                    12.1700+-0.4060     ?     12.6205+-0.4830        ? might be 1.0370x slower
   varargs-strict-mode                               14.5832+-0.4213     ?     15.0507+-0.2475        ? might be 1.0321x slower
   varargs                                           14.5818+-0.0998     ?     15.0001+-0.3397        ? might be 1.0287x slower
   weird-inlining-const-prop                          3.2238+-0.1019            3.2028+-0.1487        

   &lt;geometric&gt;                                       11.9658+-0.0449     ?     12.0230+-0.0315        ? might be 1.0048x slower

                                                         Baseline                DFGTailCall                                    
AsmBench:
   bigfib.cpp                                       682.4690+-9.5306          671.5111+-26.5979         might be 1.0163x faster
   cray.c                                           620.7996+-5.1751     ?    623.1867+-6.0961        ?
   dry.c                                            689.9198+-5.3247          661.5596+-77.0830         might be 1.0429x faster
   FloatMM.c                                        920.5358+-2.2218     ?    920.7222+-9.3457        ?
   gcc-loops.cpp                                   5990.1125+-53.0084    ?   5991.0970+-73.5732       ?
   n-body.c                                        1682.6436+-34.7892        1677.5442+-23.4432       
   Quicksort.c                                      573.6185+-3.9063     ?    576.9441+-3.5180        ?
   stepanov_container.cpp                          4882.4313+-79.7461        4848.6896+-62.3039       
   Towers.c                                         400.4172+-10.2000    ?    401.3375+-5.2101        ?

   &lt;geometric&gt;                                     1131.5195+-1.5155         1124.3119+-23.0663         might be 1.0064x faster

                                                         Baseline                DFGTailCall                                    
CompressionBench:
   huffman                                           81.7848+-1.2789     ?     82.2493+-1.3025        ?
   arithmetic-simple                                431.9166+-1.6176          431.8624+-1.0594        
   arithmetic-precise                               363.1099+-4.1976     ?    366.9726+-6.4481        ? might be 1.0106x slower
   arithmetic-complex-precise                       361.1843+-3.2740     ?    363.4945+-3.1693        ?
   arithmetic-precise-order-0                       439.0563+-2.2351     ?    444.6048+-5.6452        ? might be 1.0126x slower
   arithmetic-precise-order-1                       418.4902+-3.7651     ?    424.4897+-6.7766        ? might be 1.0143x slower
   arithmetic-precise-order-2                       484.6338+-12.0828    ?    485.5557+-3.6517        ?
   arithmetic-simple-order-1                        495.1097+-2.8377     ?    496.5613+-0.8212        ?
   arithmetic-simple-order-2                        555.9335+-9.0049     ?    561.0212+-4.4004        ?
   lz-string                                        423.5854+-21.1522         420.1024+-9.9009        

   &lt;geometric&gt;                                      369.9901+-2.6416     ?    372.0395+-1.0220        ? might be 1.0055x slower

                                                         Baseline                DFGTailCall                                    
Geomean of preferred means:
   &lt;scaled-result&gt;                                   79.4149+-0.1425     ?     79.5270+-0.2639        ? might be 1.0014x slower</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1128308</commentid>
    <comment_count>5</comment_count>
      <attachid>261822</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2015-09-23 07:50:16 -0700</bug_when>
    <thetext>Created attachment 261822
Patch with build fixes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1128348</commentid>
    <comment_count>6</comment_count>
      <attachid>261822</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-09-23 10:27:39 -0700</bug_when>
    <thetext>Comment on attachment 261822
Patch with build fixes

We can&apos;t enable this by default until it&apos;s implemented in FTL -- that would be a performance regression.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1128387</commentid>
    <comment_count>7</comment_count>
      <attachid>261840</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2015-09-23 14:17:38 -0700</bug_when>
    <thetext>Created attachment 261840
Patch with Tail Calls turned off</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1128589</commentid>
    <comment_count>8</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2015-09-24 14:43:17 -0700</bug_when>
    <thetext>Committed r190220: &lt;http://trac.webkit.org/changeset/190220&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>260629</attachid>
            <date>2015-09-04 15:04:37 -0700</date>
            <delta_ts>2015-09-22 21:41:08 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-148663-20150904150436.patch</filename>
            <type>text/plain</type>
            <size>94909</size>
            <attacher name="Basile Clement">basile_clement</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg3NzkxCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBj
YzU5MWY5ZGJiNWEzY2FlOTY4ZWEyYTQ3ZTZmMWIwZWEyZTRjODg5Li45ZDQ1ZWVlY2MxNjU3NmM2
M2I4MWVkNjMxN2UwNzcyZmM2YTQ1YjE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
NSArMSwxMjggQEAKIDIwMTUtMDktMDQgIEJhc2lsZSBDbGVtZW50ICA8YmFzaWxlX2NsZW1lbnRA
YXBwbGUuY29tPgogCisgICAgICAgIFtFUzZdIEltcGxlbWVudCB0YWlsIGNhbGxzIGluIHRoZSBE
RkcKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0ODY2
MworCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIGpzYy10
YWlsY2FsbDogSW1wbGVtZW50IHRoZSB0YWlsIGNhbGwgb3Bjb2RlcyBpbiB0aGUgREZHCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDY4NTAKKworICAg
ICAgICBUaGlzIHBhdGNoIGFkZHMgc3VwcG9ydCBmb3IgdGFpbCBjYWxscyBpbiB0aGUgREZHLiBU
aGlzIHJlcXVpcmVzIGEgc2xpZ2h0bHkgaGlnaCBudW1iZXIgb2Ygbm9kZXM6CisKKyAgICAgICAg
IC0gVGFpbENhbGwgYW5kIFRhaWxDYWxsVmFyYXJncyBhcmUgc3RyYWlnaHRmb3J3YXJkLiBUaGV5
IGFyZSB0ZXJtaW5hbAorICAgICAgICAgICBub2RlcyBhbmQgaGF2ZSB0aGUgc2VtYW50aWNzIG9m
IGFuIGFjdHVhbCB0YWlsIGNhbGwuCisKKyAgICAgICAgIC0gVGFpbENhbGxJbmxpbmVkQ2FsbGVy
IGFuZCBUYWlsQ2FsbFZhcmFyZ3NJbmxpbmVkQ2FsbGVyIGFyZSBoZXJlIHRvIHBlcmZvcm0gYQor
ICAgICAgICAgICB0YWlsIGNhbGwgaW5zaWRlIGFuIGlubGluZWQgZnVuY3Rpb24uIFRoZXkgYXJl
IG5vbiB0ZXJtaW5hbCBub2RlcywKKyAgICAgICAgICAgYW5kIGFyZSBwZXJmb3JtaW5nIHRoZSBj
YWxsIGFzIGEgcmVndWxhciBjYWxsIGFmdGVyIHBvcHBpbmcgYW4KKyAgICAgICAgICAgYXBwcm9w
cmlhdGUgbnVtYmVyIG9mIGlubGluZWQgdGFpbCBjYWxsIGZyYW1lcy4KKworICAgICAgICAgLSBU
YWlsQ2FsbEZvcndhcmRWYXJhcmdzIGFuZCBUYWlsQ2FsbEZvcndhcmRWYXJhcmdzSW5saW5lZENh
bGxlciBhcmUgdGhlCisgICAgICAgICAgIGV4dGVuc2lvbiBvZiBUYWlsQ2FsbFZhcmFyZ3MgYW5k
IFRhaWxDYWxsVmFyYXJnc0lubGluZWRDYWxsZXIgdG8gZW5hYmxlCisgICAgICAgICAgIHRoZSB2
YXJhcmdzIGZvcndhcmRpbmcgb3B0aW1pemF0aW9uIHNvIHRoYXQgd2UgZG9uJ3QgbG9zZQorICAg
ICAgICAgICBwZXJmb3JtYW5jZSB3aXRoIGEgdGFpbCBjYWxsIGluc3RlYWQgb2YgYSByZWd1bGFy
IGNhbGwuCisKKyAgICAgICAgVGhpcyBhbHNvIHJlcXVpcmVkIHR3byBicm9hZCBraW5kIG9mIGNo
YW5nZXM6CisKKyAgICAgICAgIC0gQ2hhbmdlcyBpbiB0aGUgSklUIGl0c2VsZiAoREZHU3BlY3Vs
YXRpdmVKSVQpIGFyZSBwcmV0dHkKKyAgICAgICAgICAgc3RyYWlnaHRmb3J3YXJkIHNpbmNlIHRo
ZXkgYXJlIGp1c3QgYW4gZXh0ZW5zaW9uIG9mIHRoZSBiYXNlbGluZSBKSVQKKyAgICAgICAgICAg
Y2hhbmdlcyBpbnRyb2R1Y2VkIHByZXZpb3VzbHkuCisKKyAgICAgICAgIC0gQ2hhbmdlcyBpbiB0
aGUgcnVudGltZSBhcmUgbW9zdGx5IHJlbGF0ZWQgd2l0aCBoYW5kbGluZyBpbmxpbmUgY2FsbAor
ICAgICAgICAgICBmcmFtZXMuIFRoZSBpZGVhIGhlcmUgaXMgdGhhdCB3ZSBoYXZlIGEgc3BlY2lh
bCBUYWlsQ2FsbCB0eXBlIGZvcgorICAgICAgICAgICBjYWxsIGZyYW1lcyB0aGF0IGluZGljYXRl
cyB0byB0aGUgdmFyaW91cyBwaWVjZXMgb2YgY29kZSB3YWxraW5nIHRoZQorICAgICAgICAgICBp
bmxpbmUgY2FsbCBmcmFtZSB0aGF0IHRoZXkgc2hvdWxkIChyZWN1cnNpdmVseSkgc2tpcCB0aGUg
Y2FsbGVyIGluCisgICAgICAgICAgIHRoZWlyIGFuYWx5c2lzLgorCisgICAgICAgICogYnl0ZWNv
ZGUvQ2FsbE1vZGUuaDoKKyAgICAgICAgKEpTQzo6c3BlY2lhbGl6YXRpb25LaW5kRm9yKToKKyAg
ICAgICAgKiBieXRlY29kZS9Db2RlT3JpZ2luLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZU9yaWdp
bjo6aW5saW5lRGVwdGhGb3JDYWxsRnJhbWUpOgorICAgICAgICAoSlNDOjpDb2RlT3JpZ2luOjpp
c0FwcHJveGltYXRlbHlFcXVhbFRvKToKKyAgICAgICAgKEpTQzo6Q29kZU9yaWdpbjo6YXBwcm94
aW1hdGVIYXNoKToKKyAgICAgICAgKEpTQzo6Q29kZU9yaWdpbjo6aW5saW5lU3RhY2spOgorICAg
ICAgICAqIGJ5dGVjb2RlL0NvZGVPcmlnaW4uaDoKKyAgICAgICAgKiBieXRlY29kZS9JbmxpbmVD
YWxsRnJhbWUuY3BwOgorICAgICAgICAoSlNDOjpJbmxpbmVDYWxsRnJhbWU6OmR1bXBJbkNvbnRl
eHQpOgorICAgICAgICAoV1RGOjpwcmludEludGVybmFsKToKKyAgICAgICAgKiBieXRlY29kZS9J
bmxpbmVDYWxsRnJhbWUuaDoKKyAgICAgICAgKEpTQzo6SW5saW5lQ2FsbEZyYW1lOjpjYWxsTW9k
ZUZvcik6CisgICAgICAgIChKU0M6OklubGluZUNhbGxGcmFtZTo6a2luZEZvcik6CisgICAgICAg
IChKU0M6OklubGluZUNhbGxGcmFtZTo6dmFyYXJnc0tpbmRGb3IpOgorICAgICAgICAoSlNDOjpJ
bmxpbmVDYWxsRnJhbWU6OnNwZWNpYWxpemF0aW9uS2luZEZvcik6CisgICAgICAgIChKU0M6Oklu
bGluZUNhbGxGcmFtZTo6aXNWYXJhcmdzKToKKyAgICAgICAgKEpTQzo6SW5saW5lQ2FsbEZyYW1l
Ojppc1RhaWwpOgorICAgICAgICAoSlNDOjpJbmxpbmVDYWxsRnJhbWU6OmNvbXB1dGVDYWxsZXJT
a2lwcGluZ0RlYWRGcmFtZXMpOgorICAgICAgICAoSlNDOjpJbmxpbmVDYWxsRnJhbWU6OmdldENh
bGxlclNraXBwaW5nRGVhZEZyYW1lcyk6CisgICAgICAgIChKU0M6OklubGluZUNhbGxGcmFtZTo6
Z2V0Q2FsbGVySW5saW5lRnJhbWVTa2lwcGluZ0RlYWRGcmFtZXMpOgorICAgICAgICAqIGRmZy9E
RkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oOgorICAgICAgICAoSlNDOjpERkc6OkFic3Ry
YWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyk6CisgICAg
ICAgICogZGZnL0RGR0FyZ3VtZW50c0VsaW1pbmF0aW9uUGhhc2UuY3BwOgorICAgICAgICAqIGRm
Zy9ERkdCYXNpY0Jsb2NrLmg6CisgICAgICAgIChKU0M6OkRGRzo6QmFzaWNCbG9jazo6ZmluZFRl
cm1pbmFsKToKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjphbGxJbmxpbmVGcmFtZXNBcmVUYWlsQ2FsbHMpOgor
ICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjphZGRDYWxsV2l0aG91dFNldHRpbmdS
ZXN1bHQpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjphZGRDYWxsKToKKyAg
ICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Z2V0UHJlZGljdGlvbldpdGhvdXRPU1JF
eGl0KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Z2V0UHJlZGljdGlvbik6
CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUNhbGwpOgorICAgICAg
ICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVWYXJhcmdzQ2FsbCk6CisgICAgICAg
IChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmlubGluaW5nQ29zdCk6CisgICAgICAgIChKU0M6
OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmlubGluZUNhbGwpOgorICAgICAgICAoSlNDOjpERkc6OkJ5
dGVDb2RlUGFyc2VyOjphdHRlbXB0VG9JbmxpbmVDYWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpC
eXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQ
YXJzZXI6OklubGluZVN0YWNrRW50cnk6OklubGluZVN0YWNrRW50cnkpOgorICAgICAgICAoSlND
OjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZUNvZGVCbG9jayk6CisgICAgICAgICogZGZnL0RG
R0NhcGFiaWxpdGllcy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Y2FwYWJpbGl0eUxldmVsKToK
KyAgICAgICAgKiBkZmcvREZHQ2xvYmJlcml6ZS5oOgorICAgICAgICAoSlNDOjpERkc6OmNsb2Ji
ZXJpemUpOgorICAgICAgICAqIGRmZy9ERkdEb2VzR0MuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OmRvZXNHQyk6CisgICAgICAgICogZGZnL0RGR0ZpeHVwUGhhc2UuY3BwOgorICAgICAgICAoSlND
OjpERkc6OkZpeHVwUGhhc2U6OmZpeHVwTm9kZSk6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6aXNMaXZlSW5CeXRlY29kZSk6CisgICAgICAg
ICogZGZnL0RGR0dyYXBoLmg6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OmZvckFsbExvY2Fs
c0xpdmVJbkJ5dGVjb2RlKToKKyAgICAgICAgKiBkZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OkluUGxhY2VBYnN0cmFjdFN0YXRlOjptZXJnZVRvU3Vj
Y2Vzc29ycyk6CisgICAgICAgICogZGZnL0RGR05vZGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpO
b2RlOjpoYXNDYWxsVmFyYXJnc0RhdGEpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmlzVGVy
bWluYWwpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc0hlYXBQcmVkaWN0aW9uKToKKyAg
ICAgICAgKiBkZmcvREZHTm9kZVR5cGUuaDoKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdENvbXBp
bGVyQ29tbW9uLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpoYW5kbGVFeGl0Q291bnRzKToKKyAg
ICAgICAgKEpTQzo6REZHOjpyZWlmeUlubGluZWRDYWxsRnJhbWVzKToKKyAgICAgICAgKiBkZmcv
REZHT1NSRXhpdFByZXBhcmF0aW9uLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpwcmVwYXJlQ29k
ZU9yaWdpbkZvck9TUkV4aXQpOgorICAgICAgICAqIGRmZy9ERkdPcGVyYXRpb25zLmNwcDoKKyAg
ICAgICAgKiBkZmcvREZHUHJlY2lzZUxvY2FsQ2xvYmJlcml6ZS5oOgorICAgICAgICAoSlNDOjpE
Rkc6OlByZWNpc2VMb2NhbENsb2JiZXJpemVBZGFwdG9yOjpyZWFkVG9wKToKKyAgICAgICAgKiBk
ZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OlByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlOjpwcm9wYWdhdGUpOgorICAgICAgICAqIGRmZy9E
RkdTYWZlVG9FeGVjdXRlLmg6CisgICAgICAgIChKU0M6OkRGRzo6c2FmZVRvRXhlY3V0ZSk6Cisg
ICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwpOgorICAgICAg
ICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlKToKKyAgICAgICAgKiBkZmcvREZH
VmFsaWRhdGUuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlZhbGlkYXRlOjp2YWxpZGF0ZVNTQSk6
CisgICAgICAgICogZGZnL0RGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2UuY3BwOgorICAgICAgICAq
IGludGVycHJldGVyL0NhbGxGcmFtZS5jcHA6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZTo6Ynl0
ZWNvZGVPZmZzZXQpOgorICAgICAgICAqIGludGVycHJldGVyL1N0YWNrVmlzaXRvci5jcHA6Cisg
ICAgICAgIChKU0M6OlN0YWNrVmlzaXRvcjo6Z290b05leHRGcmFtZSk6CisgICAgICAgICogdGVz
dHMvc3RyZXNzL2RmZy10YWlsLWNhbGxzLmpzOiBBZGRlZC4KKworMjAxNS0wOS0wNCAgQmFzaWxl
IENsZW1lbnQgIDxiYXNpbGVfY2xlbWVudEBhcHBsZS5jb20+CisKICAgICAgICAgW0VTNl0gVGFp
bCBjYWxsIGZhc3QgcGF0aCBzaG91bGQgZWZmaWNpZW50bHkgcmV1c2UgdGhlIGZyYW1lJ3Mgc3Rh
Y2sgc3BhY2UKICAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE0ODY2MgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ2Fs
bE1vZGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9DYWxsTW9kZS5oCmluZGV4
IGJjYmI2MTMwYzQ4Zjc4ODI0ZmIwZWE5NDYxMzgwZGRmZDJjYWYxMjUuLmMzNzM0ZTI2YTczMmVk
N2UyNjk3ODI1MDM4ZGMxNTIzYzgzNGUyMzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9DYWxsTW9kZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9DYWxsTW9kZS5oCkBAIC0yNiwxMiArMjYsMjYgQEAKICNpZm5kZWYgQ2FsbE1vZGVfaAog
I2RlZmluZSBDYWxsTW9kZV9oCiAKKyNpbmNsdWRlICJDb2RlU3BlY2lhbGl6YXRpb25LaW5kLmgi
CisKIG5hbWVzcGFjZSBKU0MgewogCiBlbnVtIGNsYXNzIENhbGxNb2RlIHsgUmVndWxhciwgVGFp
bCwgQ29uc3RydWN0IH07CiAKIGVudW0gRnJhbWVBY3Rpb24geyBLZWVwVGhlRnJhbWUgPSAwLCBS
ZXVzZVRoZUZyYW1lIH07CiAKK2lubGluZSBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIHNwZWNpYWxp
emF0aW9uS2luZEZvcihDYWxsTW9kZSBjYWxsTW9kZSkKK3sKKyAgICBzd2l0Y2ggKGNhbGxNb2Rl
KSB7CisgICAgY2FzZSBDYWxsTW9kZTo6VGFpbDoKKyAgICBjYXNlIENhbGxNb2RlOjpSZWd1bGFy
OgorICAgICAgICByZXR1cm4gQ29kZUZvckNhbGw7CisKKyAgICBjYXNlIENhbGxNb2RlOjpDb25z
dHJ1Y3Q6CisgICAgICAgIHJldHVybiBDb2RlRm9yQ29uc3RydWN0OworICAgIH0KK30KKwogfSAv
LyBuYW1lc3BhY2UgSlNDCiAKIG5hbWVzcGFjZSBXVEYgewpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uY3BwIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uY3BwCmluZGV4IDYxOTFiNTFiMTg4ZWU0MDU3NDc0OWIx
NGE1NTQ3NjQ2Y2IyNTBkZjMuLjU2NDZhNTM1NTkyNzNjMjQyODJmODBmOTA1MjU4N2FiYThiNGY4
NTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2lu
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5jcHAK
QEAgLTM3LDcgKzM3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiB1bnNpZ25lZCBDb2RlT3JpZ2luOjpp
bmxpbmVEZXB0aEZvckNhbGxGcmFtZShJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSkK
IHsKICAgICB1bnNpZ25lZCByZXN1bHQgPSAxOwotICAgIGZvciAoSW5saW5lQ2FsbEZyYW1lKiBj
dXJyZW50ID0gaW5saW5lQ2FsbEZyYW1lOyBjdXJyZW50OyBjdXJyZW50ID0gY3VycmVudC0+Y2Fs
bGVyLmlubGluZUNhbGxGcmFtZSkKKyAgICBmb3IgKElubGluZUNhbGxGcmFtZSogY3VycmVudCA9
IGlubGluZUNhbGxGcmFtZTsgY3VycmVudDsgY3VycmVudCA9IGN1cnJlbnQtPmRpcmVjdENhbGxl
ci5pbmxpbmVDYWxsRnJhbWUpCiAgICAgICAgIHJlc3VsdCsrOwogICAgIHJldHVybiByZXN1bHQ7
CiB9CkBAIC03OCw4ICs3OCw4IEBAIGJvb2wgQ29kZU9yaWdpbjo6aXNBcHByb3hpbWF0ZWx5RXF1
YWxUbyhjb25zdCBDb2RlT3JpZ2luJiBvdGhlcikgY29uc3QKICAgICAgICAgaWYgKGEuaW5saW5l
Q2FsbEZyYW1lLT5leGVjdXRhYmxlLmdldCgpICE9IGIuaW5saW5lQ2FsbEZyYW1lLT5leGVjdXRh
YmxlLmdldCgpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAKLSAgICAgICAg
YSA9IGEuaW5saW5lQ2FsbEZyYW1lLT5jYWxsZXI7Ci0gICAgICAgIGIgPSBiLmlubGluZUNhbGxG
cmFtZS0+Y2FsbGVyOworICAgICAgICBhID0gYS5pbmxpbmVDYWxsRnJhbWUtPmRpcmVjdENhbGxl
cjsKKyAgICAgICAgYiA9IGIuaW5saW5lQ2FsbEZyYW1lLT5kaXJlY3RDYWxsZXI7CiAgICAgfQog
fQogCkBAIC0xMDAsNyArMTAwLDcgQEAgdW5zaWduZWQgQ29kZU9yaWdpbjo6YXBwcm94aW1hdGVI
YXNoKCkgY29uc3QKICAgICAgICAgCiAgICAgICAgIHJlc3VsdCArPSBXVEY6OlB0ckhhc2g8SlND
ZWxsKj46Omhhc2goY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmV4ZWN1dGFibGUuZ2V0KCkp
OwogICAgICAgICAKLSAgICAgICAgY29kZU9yaWdpbiA9IGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZy
YW1lLT5jYWxsZXI7CisgICAgICAgIGNvZGVPcmlnaW4gPSBjb2RlT3JpZ2luLmlubGluZUNhbGxG
cmFtZS0+ZGlyZWN0Q2FsbGVyOwogICAgIH0KIH0KIApAQCAtMTA5LDggKzEwOSw4IEBAIFZlY3Rv
cjxDb2RlT3JpZ2luPiBDb2RlT3JpZ2luOjppbmxpbmVTdGFjaygpIGNvbnN0CiAgICAgVmVjdG9y
PENvZGVPcmlnaW4+IHJlc3VsdChpbmxpbmVEZXB0aCgpKTsKICAgICByZXN1bHQubGFzdCgpID0g
KnRoaXM7CiAgICAgdW5zaWduZWQgaW5kZXggPSByZXN1bHQuc2l6ZSgpIC0gMjsKLSAgICBmb3Ig
KElubGluZUNhbGxGcmFtZSogY3VycmVudCA9IGlubGluZUNhbGxGcmFtZTsgY3VycmVudDsgY3Vy
cmVudCA9IGN1cnJlbnQtPmNhbGxlci5pbmxpbmVDYWxsRnJhbWUpCi0gICAgICAgIHJlc3VsdFtp
bmRleC0tXSA9IGN1cnJlbnQtPmNhbGxlcjsKKyAgICBmb3IgKElubGluZUNhbGxGcmFtZSogY3Vy
cmVudCA9IGlubGluZUNhbGxGcmFtZTsgY3VycmVudDsgY3VycmVudCA9IGN1cnJlbnQtPmRpcmVj
dENhbGxlci5pbmxpbmVDYWxsRnJhbWUpCisgICAgICAgIHJlc3VsdFtpbmRleC0tXSA9IGN1cnJl
bnQtPmRpcmVjdENhbGxlcjsKICAgICBSRUxFQVNFX0FTU0VSVCghcmVzdWx0WzBdLmlubGluZUNh
bGxGcmFtZSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29kZU9yaWdpbi5oCmluZGV4IGE0NTQ3MTFiMjMyOWU1MzRlMGJiOTc4ZTRiMzBl
NDQwMzZlMDUzZGYuLmZmY2I4NGY5MGFlMGJjM2U5YTQzYjFkNTU0NTJkMDY4ODU3NDNlODEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmgKKysr
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uaApAQCAtMjYsNiAr
MjYsNyBAQAogI2lmbmRlZiBDb2RlT3JpZ2luX2gKICNkZWZpbmUgQ29kZU9yaWdpbl9oCiAKKyNp
bmNsdWRlICJDYWxsTW9kZS5oIgogI2luY2x1ZGUgIkNvZGVCbG9ja0hhc2guaCIKICNpbmNsdWRl
ICJDb2RlU3BlY2lhbGl6YXRpb25LaW5kLmgiCiAjaW5jbHVkZSAiVmFsdWVSZWNvdmVyeS5oIgpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGluZUNhbGxGcmFt
ZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQ2FsbEZyYW1lLmNw
cAppbmRleCA5NDEzMTY1OGRjMTAzZGU2YjQ5ZGRlNzIzNDgxZWM1ZWFiZDMyM2ViLi4zMTcwNzEw
MjM5YTdkYzIwMGNlODY0NDA2ZDE4OTRkNzZkZjBmODUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQ2FsbEZyYW1lLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQ2FsbEZyYW1lLmNwcApAQCAtOTEsNyArOTEsNyBA
QCB2b2lkIElubGluZUNhbGxGcmFtZTo6ZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYgb3V0LCBE
dW1wQ29udGV4dCogY29udGV4dCkgY29ucwogICAgIG91dC5wcmludChicmllZkZ1bmN0aW9uSW5m
b3JtYXRpb24oKSwgIjo8IiwgUmF3UG9pbnRlcihleGVjdXRhYmxlLmdldCgpKSk7CiAgICAgaWYg
KGV4ZWN1dGFibGUtPmlzU3RyaWN0TW9kZSgpKQogICAgICAgICBvdXQucHJpbnQoIiAoU3RyaWN0
TW9kZSkiKTsKLSAgICBvdXQucHJpbnQoIiwgYmMjIiwgY2FsbGVyLmJ5dGVjb2RlSW5kZXgsICIs
ICIsIGtpbmQpOworICAgIG91dC5wcmludCgiLCBiYyMiLCBkaXJlY3RDYWxsZXIuYnl0ZWNvZGVJ
bmRleCwgIiwgIiwgc3RhdGljX2Nhc3Q8S2luZD4oa2luZCkpOwogICAgIGlmIChpc0Nsb3N1cmVD
YWxsKQogICAgICAgICBvdXQucHJpbnQoIiwgY2xvc3VyZSBjYWxsIik7CiAgICAgZWxzZQpAQCAt
MTE5LDEyICsxMTksMTggQEAgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEpT
Qzo6SW5saW5lQ2FsbEZyYW1lOjpLaW5kIGtpbmQpCiAgICAgY2FzZSBKU0M6OklubGluZUNhbGxG
cmFtZTo6Q29uc3RydWN0OgogICAgICAgICBvdXQucHJpbnQoIkNvbnN0cnVjdCIpOwogICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBKU0M6OklubGluZUNhbGxGcmFtZTo6VGFpbENhbGw6CisgICAg
ICAgIG91dC5wcmludCgiVGFpbENhbGwiKTsKKyAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgSlND
OjpJbmxpbmVDYWxsRnJhbWU6OkNhbGxWYXJhcmdzOgogICAgICAgICBvdXQucHJpbnQoIkNhbGxW
YXJhcmdzIik7CiAgICAgICAgIHJldHVybjsKICAgICBjYXNlIEpTQzo6SW5saW5lQ2FsbEZyYW1l
OjpDb25zdHJ1Y3RWYXJhcmdzOgogICAgICAgICBvdXQucHJpbnQoIkNvbnN0cnVjdFZhcmFyZ3Mi
KTsKICAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSlNDOjpJbmxpbmVDYWxsRnJhbWU6OlRhaWxD
YWxsVmFyYXJnczoKKyAgICAgICAgb3V0LnByaW50KCJUYWlsQ2FsbFZhcmFyZ3MiKTsKKyAgICAg
ICAgcmV0dXJuOwogICAgIGNhc2UgSlNDOjpJbmxpbmVDYWxsRnJhbWU6OkdldHRlckNhbGw6CiAg
ICAgICAgIG91dC5wcmludCgiR2V0dGVyQ2FsbCIpOwogICAgICAgICByZXR1cm47CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQ2FsbEZyYW1lLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQ2FsbEZyYW1lLmgKaW5kZXggZTFi
NDgwOTdmYmY1NTllNWNiMjY3ZjAzMWYxZjE2N2MwZDMzY2M4NS4uYmFlYjc0MTdlZGQ1YTU3Zjli
MDE4ZGQyOWVkNDhkMjgxM2I3MDE2YSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0lubGluZUNhbGxGcmFtZS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9JbmxpbmVDYWxsRnJhbWUuaApAQCAtNDksMzcgKzQ5LDU5IEBAIHN0cnVjdCBJbmxp
bmVDYWxsRnJhbWUgewogICAgIGVudW0gS2luZCB7CiAgICAgICAgIENhbGwsCiAgICAgICAgIENv
bnN0cnVjdCwKKyAgICAgICAgVGFpbENhbGwsCiAgICAgICAgIENhbGxWYXJhcmdzLAogICAgICAg
ICBDb25zdHJ1Y3RWYXJhcmdzLAorICAgICAgICBUYWlsQ2FsbFZhcmFyZ3MsCiAgICAgICAgIAog
ICAgICAgICAvLyBGb3IgdGhlc2UsIHRoZSBzdGFja09mZnNldCBpbmNvcnBvcmF0ZXMgdGhlIGFy
Z3VtZW50IGNvdW50IHBsdXMgdGhlIHRydWUgcmV0dXJuIFBDCiAgICAgICAgIC8vIHNsb3QuCiAg
ICAgICAgIEdldHRlckNhbGwsCiAgICAgICAgIFNldHRlckNhbGwKICAgICB9OwotICAgIAotICAg
IHN0YXRpYyBLaW5kIGtpbmRGb3IoQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQorCisgICAg
c3RhdGljIENhbGxNb2RlIGNhbGxNb2RlRm9yKEtpbmQga2luZCkKICAgICB7CiAgICAgICAgIHN3
aXRjaCAoa2luZCkgewotICAgICAgICBjYXNlIENvZGVGb3JDYWxsOgorICAgICAgICBjYXNlIENh
bGw6CisgICAgICAgIGNhc2UgQ2FsbFZhcmFyZ3M6CisgICAgICAgIGNhc2UgR2V0dGVyQ2FsbDoK
KyAgICAgICAgY2FzZSBTZXR0ZXJDYWxsOgorICAgICAgICAgICAgcmV0dXJuIENhbGxNb2RlOjpS
ZWd1bGFyOworICAgICAgICBjYXNlIFRhaWxDYWxsOgorICAgICAgICBjYXNlIFRhaWxDYWxsVmFy
YXJnczoKKyAgICAgICAgICAgIHJldHVybiBDYWxsTW9kZTo6VGFpbDsKKyAgICAgICAgY2FzZSBD
b25zdHJ1Y3Q6CisgICAgICAgIGNhc2UgQ29uc3RydWN0VmFyYXJnczoKKyAgICAgICAgICAgIHJl
dHVybiBDYWxsTW9kZTo6Q29uc3RydWN0OworICAgICAgICB9CisgICAgICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorCisgICAgc3RhdGljIEtpbmQga2luZEZvcihDYWxs
TW9kZSBjYWxsTW9kZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoY2FsbE1vZGUpIHsKKyAgICAg
ICAgY2FzZSBDYWxsTW9kZTo6UmVndWxhcjoKICAgICAgICAgICAgIHJldHVybiBDYWxsOwotICAg
ICAgICBjYXNlIENvZGVGb3JDb25zdHJ1Y3Q6CisgICAgICAgIGNhc2UgQ2FsbE1vZGU6OkNvbnN0
cnVjdDoKICAgICAgICAgICAgIHJldHVybiBDb25zdHJ1Y3Q7CisgICAgICAgIGNhc2UgQ2FsbE1v
ZGU6OlRhaWw6CisgICAgICAgICAgICByZXR1cm4gVGFpbENhbGw7CiAgICAgICAgIH0KICAgICAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIENhbGw7CiAg
ICAgfQogICAgIAotICAgIHN0YXRpYyBLaW5kIHZhcmFyZ3NLaW5kRm9yKENvZGVTcGVjaWFsaXph
dGlvbktpbmQga2luZCkKKyAgICBzdGF0aWMgS2luZCB2YXJhcmdzS2luZEZvcihDYWxsTW9kZSBj
YWxsTW9kZSkKICAgICB7Ci0gICAgICAgIHN3aXRjaCAoa2luZCkgewotICAgICAgICBjYXNlIENv
ZGVGb3JDYWxsOgorICAgICAgICBzd2l0Y2ggKGNhbGxNb2RlKSB7CisgICAgICAgIGNhc2UgQ2Fs
bE1vZGU6OlJlZ3VsYXI6CiAgICAgICAgICAgICByZXR1cm4gQ2FsbFZhcmFyZ3M7Ci0gICAgICAg
IGNhc2UgQ29kZUZvckNvbnN0cnVjdDoKKyAgICAgICAgY2FzZSBDYWxsTW9kZTo6Q29uc3RydWN0
OgogICAgICAgICAgICAgcmV0dXJuIENvbnN0cnVjdFZhcmFyZ3M7CisgICAgICAgIGNhc2UgQ2Fs
bE1vZGU6OlRhaWw6CisgICAgICAgICAgICByZXR1cm4gVGFpbENhbGxWYXJhcmdzOwogICAgICAg
ICB9CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVy
biBDYWxsOwogICAgIH0KICAgICAKICAgICBzdGF0aWMgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBz
cGVjaWFsaXphdGlvbktpbmRGb3IoS2luZCBraW5kKQpAQCAtODcsNiArMTA5LDggQEAgc3RydWN0
IElubGluZUNhbGxGcmFtZSB7CiAgICAgICAgIHN3aXRjaCAoa2luZCkgewogICAgICAgICBjYXNl
IENhbGw6CiAgICAgICAgIGNhc2UgQ2FsbFZhcmFyZ3M6CisgICAgICAgIGNhc2UgVGFpbENhbGw6
CisgICAgICAgIGNhc2UgVGFpbENhbGxWYXJhcmdzOgogICAgICAgICBjYXNlIEdldHRlckNhbGw6
CiAgICAgICAgIGNhc2UgU2V0dGVyQ2FsbDoKICAgICAgICAgICAgIHJldHVybiBDb2RlRm9yQ2Fs
bDsKQEAgLTk1LDI0ICsxMTksNjQgQEAgc3RydWN0IElubGluZUNhbGxGcmFtZSB7CiAgICAgICAg
ICAgICByZXR1cm4gQ29kZUZvckNvbnN0cnVjdDsKICAgICAgICAgfQogICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gQ29kZUZvckNhbGw7CiAgICAg
fQogICAgIAogICAgIHN0YXRpYyBib29sIGlzVmFyYXJncyhLaW5kIGtpbmQpCiAgICAgewogICAg
ICAgICBzd2l0Y2ggKGtpbmQpIHsKICAgICAgICAgY2FzZSBDYWxsVmFyYXJnczoKKyAgICAgICAg
Y2FzZSBUYWlsQ2FsbFZhcmFyZ3M6CiAgICAgICAgIGNhc2UgQ29uc3RydWN0VmFyYXJnczoKICAg
ICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgfQorCisgICAgc3RhdGljIGJvb2wgaXNUYWlsKEtp
bmQga2luZCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoa2luZCkgeworICAgICAgICBjYXNlIFRh
aWxDYWxsOgorICAgICAgICBjYXNlIFRhaWxDYWxsVmFyYXJnczoKKyAgICAgICAgICAgIHJldHVy
biB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICB9CisgICAgfQorICAgIGJvb2wgaXNUYWlsKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBpc1RhaWwoc3RhdGljX2Nhc3Q8S2luZD4oa2luZCkpOworICAgIH0KKworICAgIHN0YXRp
YyBDb2RlT3JpZ2luKiBjb21wdXRlQ2FsbGVyU2tpcHBpbmdEZWFkRnJhbWVzKElubGluZUNhbGxG
cmFtZSogaW5saW5lQ2FsbEZyYW1lKQorICAgIHsKKyAgICAgICAgQ29kZU9yaWdpbiogY29kZU9y
aWdpbjsKKyAgICAgICAgYm9vbCB0YWlsQ2FsbGVlOworICAgICAgICBkbyB7CisgICAgICAgICAg
ICB0YWlsQ2FsbGVlID0gaW5saW5lQ2FsbEZyYW1lLT5pc1RhaWwoKTsKKyAgICAgICAgICAgIGNv
ZGVPcmlnaW4gPSAmaW5saW5lQ2FsbEZyYW1lLT5kaXJlY3RDYWxsZXI7CisgICAgICAgICAgICBp
bmxpbmVDYWxsRnJhbWUgPSBjb2RlT3JpZ2luLT5pbmxpbmVDYWxsRnJhbWU7CisgICAgICAgIH0g
d2hpbGUgKGlubGluZUNhbGxGcmFtZSAmJiB0YWlsQ2FsbGVlKTsKKyAgICAgICAgaWYgKHRhaWxD
YWxsZWUpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuIGNvZGVP
cmlnaW47CisgICAgfQorCisgICAgQ29kZU9yaWdpbiogZ2V0Q2FsbGVyU2tpcHBpbmdEZWFkRnJh
bWVzKCkKKyAgICB7CisgICAgICAgIHJldHVybiBjb21wdXRlQ2FsbGVyU2tpcHBpbmdEZWFkRnJh
bWVzKHRoaXMpOworICAgIH0KKworICAgIElubGluZUNhbGxGcmFtZSogZ2V0Q2FsbGVySW5saW5l
RnJhbWVTa2lwcGluZ0RlYWRGcmFtZXMoKQorICAgIHsKKyAgICAgICAgQ29kZU9yaWdpbiogY2Fs
bGVyID0gZ2V0Q2FsbGVyU2tpcHBpbmdEZWFkRnJhbWVzKCk7CisgICAgICAgIHJldHVybiBjYWxs
ZXIgPyBjYWxsZXItPmlubGluZUNhbGxGcmFtZSA6IG51bGxwdHI7CisgICAgfQogICAgIAogICAg
IFZlY3RvcjxWYWx1ZVJlY292ZXJ5PiBhcmd1bWVudHM7IC8vIEluY2x1ZGVzICd0aGlzJy4KICAg
ICBXcml0ZUJhcnJpZXI8U2NyaXB0RXhlY3V0YWJsZT4gZXhlY3V0YWJsZTsKICAgICBWYWx1ZVJl
Y292ZXJ5IGNhbGxlZVJlY292ZXJ5OwotICAgIENvZGVPcmlnaW4gY2FsbGVyOworICAgIENvZGVP
cmlnaW4gZGlyZWN0Q2FsbGVyOwogCiAgICAgc2lnbmVkIHN0YWNrT2Zmc2V0IDogMjg7CiAgICAg
dW5zaWduZWQga2luZCA6IDM7IC8vIHJlYWwgdHlwZSBpcyBLaW5kCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmggYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgK
aW5kZXggZjZlNDNjMGQxYWM5YzE0N2Q1N2I1NTkzY2YzYmZkYjlhYzA1NTIzYi4uN2NjNGIzYTIy
M2M4OTgwZjBlOWM4Y2YyNzZlNjZkOWRmM2JmYmJjYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaApAQCAt
MTU1Miw2ICsxNTUyLDEzIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRl
VHlwZT46OmV4ZWN1dGVFZmZlY3RzKHVuc2lnbmVkIGNsb2JiZXJMaW1pCiAgICAgY2FzZSBSZXR1
cm46CiAgICAgICAgIG1fc3RhdGUuc2V0SXNWYWxpZChmYWxzZSk7CiAgICAgICAgIGJyZWFrOwor
CisgICAgY2FzZSBUYWlsQ2FsbDoKKyAgICBjYXNlIFRhaWxDYWxsVmFyYXJnczoKKyAgICBjYXNl
IFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3M6CisgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5vcmln
aW4uc2VtYW50aWMsIGNsb2JiZXJMaW1pdCk7CisgICAgICAgIG1fc3RhdGUuc2V0SXNWYWxpZChm
YWxzZSk7CisgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBjYXNlIFRocm93OgogICAgIGNh
c2UgVGhyb3dSZWZlcmVuY2VFcnJvcjoKQEAgLTI0MDIsMTEgKzI0MDksMTQgQEAgYm9vbCBBYnN0
cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHModW5zaWdu
ZWQgY2xvYmJlckxpbWkKICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICBjYXNlIENh
bGw6CisgICAgY2FzZSBUYWlsQ2FsbElubGluZWRDYWxsZXI6CiAgICAgY2FzZSBDb25zdHJ1Y3Q6
CiAgICAgY2FzZSBDYWxsVmFyYXJnczoKICAgICBjYXNlIENhbGxGb3J3YXJkVmFyYXJnczoKKyAg
ICBjYXNlIFRhaWxDYWxsVmFyYXJnc0lubGluZWRDYWxsZXI6CiAgICAgY2FzZSBDb25zdHJ1Y3RW
YXJhcmdzOgogICAgIGNhc2UgQ29uc3RydWN0Rm9yd2FyZFZhcmFyZ3M6CisgICAgY2FzZSBUYWls
Q2FsbEZvcndhcmRWYXJhcmdzSW5saW5lZENhbGxlcjoKICAgICAgICAgY2xvYmJlcldvcmxkKG5v
ZGUtPm9yaWdpbi5zZW1hbnRpYywgY2xvYmJlckxpbWl0KTsKICAgICAgICAgZm9yTm9kZShub2Rl
KS5tYWtlSGVhcFRvcCgpOwogICAgICAgICBicmVhazsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzRWxpbWluYXRpb25QaGFzZS5jcHAgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c0VsaW1pbmF0aW9uUGhhc2UuY3BwCmluZGV4
IDZmMGMyNWI0Y2IzMjlhZGJkNzEzOTY3NzBiYmJhZjE4YTQ5ZmQwOTAuLjk5ZTg1NDJmMTUwMTMy
ZjFjOThiZmJlOTYyZTRhN2E1NzdlNzRhNWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQXJndW1lbnRzRWxpbWluYXRpb25QaGFzZS5jcHAKKysrIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNFbGltaW5hdGlvblBoYXNlLmNwcApAQCAtMTY3
LDYgKzE2Nyw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgIGNhc2UgQ2FsbFZhcmFyZ3M6CiAgICAgICAgICAgICAgICAgY2FzZSBDb25zdHJ1Y3RWYXJh
cmdzOgorICAgICAgICAgICAgICAgIGNhc2UgVGFpbENhbGxWYXJhcmdzOgorICAgICAgICAgICAg
ICAgIGNhc2UgVGFpbENhbGxWYXJhcmdzSW5saW5lZENhbGxlcjoKICAgICAgICAgICAgICAgICAg
ICAgZXNjYXBlKG5vZGUtPmNoaWxkMSgpKTsKICAgICAgICAgICAgICAgICAgICAgZXNjYXBlKG5v
ZGUtPmNoaWxkMygpKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC01NjAsNyArNTYy
LDkgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIAog
ICAgICAgICAgICAgICAgIGNhc2UgQ2FsbFZhcmFyZ3M6Ci0gICAgICAgICAgICAgICAgY2FzZSBD
b25zdHJ1Y3RWYXJhcmdzOiB7CisgICAgICAgICAgICAgICAgY2FzZSBDb25zdHJ1Y3RWYXJhcmdz
OgorICAgICAgICAgICAgICAgIGNhc2UgVGFpbENhbGxWYXJhcmdzOgorICAgICAgICAgICAgICAg
IGNhc2UgVGFpbENhbGxWYXJhcmdzSW5saW5lZENhbGxlcjogewogICAgICAgICAgICAgICAgICAg
ICBOb2RlKiBjYW5kaWRhdGUgPSBub2RlLT5jaGlsZDIoKS5ub2RlKCk7CiAgICAgICAgICAgICAg
ICAgICAgIGlmICghbV9jYW5kaWRhdGVzLmNvbnRhaW5zKGNhbmRpZGF0ZSkpCiAgICAgICAgICAg
ICAgICAgICAgICAgICBicmVhazsKQEAgLTU4NSwxNiArNTg5LDQ0IEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW4uYXBwZW5kKG5vZGUt
PmNoaWxkMygpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGZvciAoTm9kZSogYXJndW1lbnQg
OiBhcmd1bWVudHMpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5tX3ZhckFy
Z0NoaWxkcmVuLmFwcGVuZChFZGdlKGFyZ3VtZW50KSk7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBub2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncygKLSAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBub2RlLT5vcCgpID09IENhbGxWYXJhcmdzID8gQ2FsbCA6IENvbnN0cnVjdCk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGNhc2UgQ2FsbFZhcmFyZ3M6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9k
ZS0+c2V0T3BBbmREZWZhdWx0RmxhZ3MoQ2FsbCk7CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIENvbnN0cnVjdFZhcmFyZ3M6
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0T3BBbmREZWZhdWx0RmxhZ3Mo
Q29uc3RydWN0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGNhc2UgVGFpbENhbGxWYXJhcmdzOgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIG5vZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdzKFRhaWxDYWxsKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhc2Ug
VGFpbENhbGxWYXJhcmdzSW5saW5lZENhbGxlcjoKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBub2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhUYWlsQ2FsbElubGluZWRDYWxsZXIpOworICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAg
ICAgICAgbm9kZS0+Y2hpbGRyZW4gPSBBZGphY2VuY3lMaXN0KAogICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIEFkamFjZW5jeUxpc3Q6OlZhcmlhYmxlLAogICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGZpcnN0Q2hpbGQsIG1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbi5zaXplKCkgLSBmaXJz
dENoaWxkKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgICAgICBub2RlLT5z
ZXRPcEFuZERlZmF1bHRGbGFncygKLSAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPm9wKCkg
PT0gQ2FsbFZhcmFyZ3MgPyBDYWxsRm9yd2FyZFZhcmFyZ3MgOiBDb25zdHJ1Y3RGb3J3YXJkVmFy
YXJncyk7CisgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgeworICAgICAg
ICAgICAgICAgICAgICBjYXNlIENhbGxWYXJhcmdzOgorICAgICAgICAgICAgICAgICAgICAgICAg
bm9kZS0+c2V0T3BBbmREZWZhdWx0RmxhZ3MoQ2FsbEZvcndhcmRWYXJhcmdzKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBjYXNlIENvbnN0cnVj
dFZhcmFyZ3M6CisgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRPcEFuZERlZmF1bHRG
bGFncyhDb25zdHJ1Y3RGb3J3YXJkVmFyYXJncyk7CisgICAgICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBUYWlsQ2FsbFZhcmFyZ3M6CisgICAgICAg
ICAgICAgICAgICAgICAgICBub2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhUYWlsQ2FsbEZvcndh
cmRWYXJhcmdzKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgICAgICBjYXNlIFRhaWxDYWxsVmFyYXJnc0lubGluZWRDYWxsZXI6CisgICAgICAgICAgICAg
ICAgICAgICAgICBub2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhUYWlsQ2FsbEZvcndhcmRWYXJh
cmdzSW5saW5lZENhbGxlcik7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgKaW5kZXggY2U3ZTIzZDEz
ZDc0MjZkYTcwNDNlZTMwZDM0Yjc2ODJjYWEwOWJlYS4uNDQzNTY2MDNjMTE1NWZhMzNhM2NkNzgy
YTdkMDNlOWVmOGY0NmUxMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdCYXNpY0Jsb2NrLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Js
b2NrLmgKQEAgLTkyLDYgKzkyLDkgQEAgc3RydWN0IEJhc2ljQmxvY2sgOiBSZWZDb3VudGVkPEJh
c2ljQmxvY2s+IHsKICAgICAgICAgICAgIGNhc2UgQnJhbmNoOgogICAgICAgICAgICAgY2FzZSBT
d2l0Y2g6CiAgICAgICAgICAgICBjYXNlIFJldHVybjoKKyAgICAgICAgICAgIGNhc2UgVGFpbENh
bGw6CisgICAgICAgICAgICBjYXNlIFRhaWxDYWxsVmFyYXJnczoKKyAgICAgICAgICAgIGNhc2Ug
VGFpbENhbGxGb3J3YXJkVmFyYXJnczoKICAgICAgICAgICAgIGNhc2UgVW5yZWFjaGFibGU6CiAg
ICAgICAgICAgICAgICAgcmV0dXJuIE5vZGVBbmRJbmRleChub2RlLCBpKTsKICAgICAgICAgICAg
IC8vIFRoZSBiaXR0ZXIgZW5kIGNhbiBjb250YWluIFBoYW50b21zIGFuZCB0aGUgbGlrZS4gVGhl
cmUgd2lsbCBwcm9iYWJseSBvbmx5IGJlIG9uZSBvciB0d28gbm9kZXMgYWZ0ZXIgdGhlIHRlcm1p
bmFsLiBUaGV5IGFyZSBhbGwgbm8tb3BzIGFuZCB3aWxsIG5vdCBoYXZlIGFueSBjaGVja2VkIGNo
aWxkcmVuLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29k
ZVBhcnNlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2Vy
LmNwcAppbmRleCA4N2ZiNmI3NTE3OTM4ZmM2MDc5ZDRjZTk0NzY1ODQyZDBmMjY1Y2I4Li4yMzZi
M2ExYTg0ZmI5YWNkZTk4YWYzOGRiZDcwOGU2YzZkMDExYTM2IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcApAQCAtMTgyLDE0ICsxODIsMTQg
QEAgcHJpdmF0ZToKICAgICAgICAgTm9kZSogY2FsbFRhcmdldCwgaW50IGFyZ0NvdW50LCBpbnQg
cmVnaXN0ZXJPZmZzZXQsIENhbGxMaW5rU3RhdHVzLAogICAgICAgICBTcGVjdWxhdGVkVHlwZSBw
cmVkaWN0aW9uKTsKICAgICB2b2lkIGhhbmRsZUNhbGwoCi0gICAgICAgIGludCByZXN1bHQsIE5v
ZGVUeXBlIG9wLCBJbmxpbmVDYWxsRnJhbWU6OktpbmQsIHVuc2lnbmVkIGluc3RydWN0aW9uU2l6
ZSwKKyAgICAgICAgaW50IHJlc3VsdCwgTm9kZVR5cGUgb3AsIENhbGxNb2RlLCB1bnNpZ25lZCBp
bnN0cnVjdGlvblNpemUsCiAgICAgICAgIE5vZGUqIGNhbGxUYXJnZXQsIGludCBhcmdDb3VudCwg
aW50IHJlZ2lzdGVyT2Zmc2V0LCBDYWxsTGlua1N0YXR1cyk7Ci0gICAgdm9pZCBoYW5kbGVDYWxs
KGludCByZXN1bHQsIE5vZGVUeXBlIG9wLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kLCB1bnNpZ25l
ZCBpbnN0cnVjdGlvblNpemUsIGludCBjYWxsZWUsIGludCBhcmdDb3VudCwgaW50IHJlZ2lzdGVy
T2Zmc2V0KTsKLSAgICB2b2lkIGhhbmRsZUNhbGwoSW5zdHJ1Y3Rpb24qIHBjLCBOb2RlVHlwZSBv
cCwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCk7Ci0gICAgdm9pZCBoYW5kbGVWYXJhcmdzQ2FsbChJ
bnN0cnVjdGlvbiogcGMsIE5vZGVUeXBlIG9wLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kKTsKKyAg
ICB2b2lkIGhhbmRsZUNhbGwoaW50IHJlc3VsdCwgTm9kZVR5cGUgb3AsIENhbGxNb2RlLCB1bnNp
Z25lZCBpbnN0cnVjdGlvblNpemUsIGludCBjYWxsZWUsIGludCBhcmdDb3VudCwgaW50IHJlZ2lz
dGVyT2Zmc2V0KTsKKyAgICB2b2lkIGhhbmRsZUNhbGwoSW5zdHJ1Y3Rpb24qIHBjLCBOb2RlVHlw
ZSBvcCwgQ2FsbE1vZGUpOworICAgIHZvaWQgaGFuZGxlVmFyYXJnc0NhbGwoSW5zdHJ1Y3Rpb24q
IHBjLCBOb2RlVHlwZSBvcCwgQ2FsbE1vZGUpOwogICAgIHZvaWQgZW1pdEZ1bmN0aW9uQ2hlY2tz
KENhbGxWYXJpYW50LCBOb2RlKiBjYWxsVGFyZ2V0LCBWaXJ0dWFsUmVnaXN0ZXIgdGhpc0FyZ3Vt
bnQpOwogICAgIHZvaWQgZW1pdEFyZ3VtZW50UGhhbnRvbXMoaW50IHJlZ2lzdGVyT2Zmc2V0LCBp
bnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMpOwotICAgIHVuc2lnbmVkIGlubGluaW5nQ29z
dChDYWxsVmFyaWFudCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBDb2RlU3BlY2lh
bGl6YXRpb25LaW5kKTsgLy8gUmV0dXJuIFVJTlRfTUFYIGlmIGl0J3Mgbm90IGFuIGlubGluaW5n
IGNhbmRpZGF0ZS4gQnkgY29udmVudGlvbiwgaW50cmluc2ljcyBoYXZlIGEgY29zdCBvZiAxLgor
ICAgIHVuc2lnbmVkIGlubGluaW5nQ29zdChDYWxsVmFyaWFudCwgaW50IGFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzLCBDYWxsTW9kZSk7IC8vIFJldHVybiBVSU5UX01BWCBpZiBpdCdzIG5vdCBh
biBpbmxpbmluZyBjYW5kaWRhdGUuIEJ5IGNvbnZlbnRpb24sIGludHJpbnNpY3MgaGF2ZSBhIGNv
c3Qgb2YgMS4KICAgICAvLyBIYW5kbGUgaW5saW5pbmcuIFJldHVybiB0cnVlIGlmIGl0IHN1Y2Nl
ZWRlZCwgZmFsc2UgaWYgd2UgbmVlZCB0byBwbGFudCBhIGNhbGwuCiAgICAgYm9vbCBoYW5kbGVJ
bmxpbmluZyhOb2RlKiBjYWxsVGFyZ2V0Tm9kZSwgaW50IHJlc3VsdE9wZXJhbmQsIGNvbnN0IENh
bGxMaW5rU3RhdHVzJiwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBWaXJ0dWFsUmVnaXN0ZXIgdGhpc0Fy
Z3VtZW50LCBWaXJ0dWFsUmVnaXN0ZXIgYXJndW1lbnRzQXJndW1lbnQsIHVuc2lnbmVkIGFyZ3Vt
ZW50c09mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCB1bnNpZ25lZCBuZXh0
T2Zmc2V0LCBOb2RlVHlwZSBjYWxsT3AsIElubGluZUNhbGxGcmFtZTo6S2luZCwgU3BlY3VsYXRl
ZFR5cGUgcHJlZGljdGlvbik7CiAgICAgZW51bSBDYWxsZXJMaW5rYWJpbGl0eSB7IENhbGxlckRv
ZXNOb3JtYWxMaW5raW5nLCBDYWxsZXJMaW5rc01hbnVhbGx5IH07CkBAIC02NDksNiArNjQ5LDEx
IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBtX2lubGluZVN0YWNrVG9wLT5tX2lubGluZUNh
bGxGcmFtZTsKICAgICB9CiAKKyAgICBib29sIGFsbElubGluZUZyYW1lc0FyZVRhaWxDYWxscygp
CisgICAgeworICAgICAgICByZXR1cm4gIWlubGluZUNhbGxGcmFtZSgpIHx8ICFpbmxpbmVDYWxs
RnJhbWUoKS0+Z2V0Q2FsbGVyU2tpcHBpbmdEZWFkRnJhbWVzKCk7CisgICAgfQorCiAgICAgQ29k
ZU9yaWdpbiBjdXJyZW50Q29kZU9yaWdpbigpCiAgICAgewogICAgICAgICByZXR1cm4gQ29kZU9y
aWdpbihtX2N1cnJlbnRJbmRleCwgaW5saW5lQ2FsbEZyYW1lKCkpOwpAQCAtNzM3LDcgKzc0Miw3
IEBAIHByaXZhdGU6CiAgICAgCiAgICAgTm9kZSogYWRkQ2FsbFdpdGhvdXRTZXR0aW5nUmVzdWx0
KAogICAgICAgICBOb2RlVHlwZSBvcCwgT3BJbmZvIG9wSW5mbywgTm9kZSogY2FsbGVlLCBpbnQg
YXJnQ291bnQsIGludCByZWdpc3Rlck9mZnNldCwKLSAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJl
ZGljdGlvbikKKyAgICAgICAgT3BJbmZvIHByZWRpY3Rpb24pCiAgICAgewogICAgICAgICBhZGRW
YXJBcmdDaGlsZChjYWxsZWUpOwogICAgICAgICBzaXplX3QgZnJhbWVTaXplID0gSlNTdGFjazo6
Q2FsbEZyYW1lSGVhZGVyU2l6ZSArIGFyZ0NvdW50OwpAQCAtNzUwLDE1ICs3NTUsMjIgQEAgcHJp
dmF0ZToKICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBhcmdDb3VudDsgKytpKQogICAgICAg
ICAgICAgYWRkVmFyQXJnQ2hpbGQoZ2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGksIHJl
Z2lzdGVyT2Zmc2V0KSkpOwogCi0gICAgICAgIHJldHVybiBhZGRUb0dyYXBoKE5vZGU6OlZhckFy
Zywgb3AsIG9wSW5mbywgT3BJbmZvKHByZWRpY3Rpb24pKTsKKyAgICAgICAgcmV0dXJuIGFkZFRv
R3JhcGgoTm9kZTo6VmFyQXJnLCBvcCwgb3BJbmZvLCBwcmVkaWN0aW9uKTsKICAgICB9CiAgICAg
CiAgICAgTm9kZSogYWRkQ2FsbCgKICAgICAgICAgaW50IHJlc3VsdCwgTm9kZVR5cGUgb3AsIE9w
SW5mbyBvcEluZm8sIE5vZGUqIGNhbGxlZSwgaW50IGFyZ0NvdW50LCBpbnQgcmVnaXN0ZXJPZmZz
ZXQsCiAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24pCiAgICAgeworICAgICAgICBp
ZiAob3AgPT0gVGFpbENhbGwpIHsKKyAgICAgICAgICAgIGlmIChhbGxJbmxpbmVGcmFtZXNBcmVU
YWlsQ2FsbHMoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gYWRkQ2FsbFdpdGhvdXRTZXR0aW5n
UmVzdWx0KG9wLCBPcEluZm8oKSwgY2FsbGVlLCBhcmdDb3VudCwgcmVnaXN0ZXJPZmZzZXQsIE9w
SW5mbygpKTsKKyAgICAgICAgICAgIG9wID0gVGFpbENhbGxJbmxpbmVkQ2FsbGVyOworICAgICAg
ICB9CisKKwogICAgICAgICBOb2RlKiBjYWxsID0gYWRkQ2FsbFdpdGhvdXRTZXR0aW5nUmVzdWx0
KAotICAgICAgICAgICAgb3AsIG9wSW5mbywgY2FsbGVlLCBhcmdDb3VudCwgcmVnaXN0ZXJPZmZz
ZXQsIHByZWRpY3Rpb24pOworICAgICAgICAgICAgb3AsIG9wSW5mbywgY2FsbGVlLCBhcmdDb3Vu
dCwgcmVnaXN0ZXJPZmZzZXQsIE9wSW5mbyhwcmVkaWN0aW9uKSk7CiAgICAgICAgIFZpcnR1YWxS
ZWdpc3RlciByZXN1bHRSZWcocmVzdWx0KTsKICAgICAgICAgaWYgKHJlc3VsdFJlZy5pc1ZhbGlk
KCkpCiAgICAgICAgICAgICBzZXQocmVzdWx0UmVnLCBjYWxsKTsKQEAgLTc3NywxNCArNzg5LDYy
IEBAIHByaXZhdGU6CiAgICAgCiAgICAgU3BlY3VsYXRlZFR5cGUgZ2V0UHJlZGljdGlvbldpdGhv
dXRPU1JFeGl0KHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCiAgICAgewotICAgICAgICBDb25jdXJy
ZW50SklUTG9ja2VyIGxvY2tlcihtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPm1f
bG9jayk7Ci0gICAgICAgIHJldHVybiBtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2st
PnZhbHVlUHJvZmlsZVByZWRpY3Rpb25Gb3JCeXRlY29kZU9mZnNldChsb2NrZXIsIGJ5dGVjb2Rl
SW5kZXgpOworICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uOworICAgICAgICBDb2Rl
QmxvY2sqIHByb2ZpbGVkQmxvY2sgPSBudWxscHRyOworCisgICAgICAgIHsKKyAgICAgICAgICAg
IENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRC
bG9jay0+bV9sb2NrKTsKKyAgICAgICAgICAgIHByZWRpY3Rpb24gPSBtX2lubGluZVN0YWNrVG9w
LT5tX3Byb2ZpbGVkQmxvY2stPnZhbHVlUHJvZmlsZVByZWRpY3Rpb25Gb3JCeXRlY29kZU9mZnNl
dChsb2NrZXIsIGJ5dGVjb2RlSW5kZXgpOworCisgICAgICAgICAgICBpZiAocHJlZGljdGlvbiA9
PSBTcGVjTm9uZSkgeworICAgICAgICAgICAgICAgIC8vIElmIHdlIGhhdmUgbm8gaW5mb3JtYXRp
b24gYWJvdXQgdGhlIHZhbHVlcyB0aGlzCisgICAgICAgICAgICAgICAgLy8gbm9kZSBnZW5lcmF0
ZXMsIHdlIGNoZWNrIGlmIGJ5IGFueSBjaGFuY2UgaXQgaXMKKyAgICAgICAgICAgICAgICAvLyBh
IHRhaWwgY2FsbCBvcGNvZGUuIEluIHRoYXQgY2FzZSwgd2Ugd2FsayB1cCB0aGUKKyAgICAgICAg
ICAgICAgICAvLyBpbmxpbmUgZnJhbWVzIHRvIGZpbmQgYSBjYWxsIGhpZ2hlciBpbiB0aGUgY2Fs
bAorICAgICAgICAgICAgICAgIC8vIGNoYWluIGFuZCB1c2UgaXRzIHByZWRpY3Rpb24uIElmIHdl
IG9ubHkgaGF2ZQorICAgICAgICAgICAgICAgIC8vIGlubGluZWQgdGFpbCBjYWxsIGZyYW1lcywg
d2UgdXNlIFNwZWNGdWxsVG9wCisgICAgICAgICAgICAgICAgLy8gdG8gYXZvaWQgYSBzcHVyaW91
cyBPU1IgZXhpdC4KKyAgICAgICAgICAgICAgICBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24gPSBt
X2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPmluc3RydWN0aW9ucygpLmJlZ2luKCkg
KyBieXRlY29kZUluZGV4OworICAgICAgICAgICAgICAgIE9wY29kZUlEIG9wY29kZUlEID0gbV92
bS0+aW50ZXJwcmV0ZXItPmdldE9wY29kZUlEKGluc3RydWN0aW9uLT51Lm9wY29kZSk7CisKKyAg
ICAgICAgICAgICAgICBzd2l0Y2ggKG9wY29kZUlEKSB7CisgICAgICAgICAgICAgICAgY2FzZSBv
cF90YWlsX2NhbGw6CisgICAgICAgICAgICAgICAgY2FzZSBvcF90YWlsX2NhbGxfdmFyYXJnczog
eworICAgICAgICAgICAgICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZSgpKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBwcmVkaWN0aW9uID0gU3BlY0Z1bGxUb3A7CisgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
ICAgICBDb2RlT3JpZ2luKiBjb2RlT3JpZ2luID0gaW5saW5lQ2FsbEZyYW1lKCktPmdldENhbGxl
clNraXBwaW5nRGVhZEZyYW1lcygpOworICAgICAgICAgICAgICAgICAgICBpZiAoIWNvZGVPcmln
aW4pIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHByZWRpY3Rpb24gPSBTcGVjRnVsbFRvcDsK
KyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgICAgIElubGluZVN0YWNrRW50cnkqIHN0YWNrID0gbV9pbmxpbmVTdGFj
a1RvcDsKKyAgICAgICAgICAgICAgICAgICAgd2hpbGUgKHN0YWNrLT5tX2lubGluZUNhbGxGcmFt
ZSAhPSBjb2RlT3JpZ2luLT5pbmxpbmVDYWxsRnJhbWUpCisgICAgICAgICAgICAgICAgICAgICAg
ICBzdGFjayA9IHN0YWNrLT5tX2NhbGxlcjsKKyAgICAgICAgICAgICAgICAgICAgYnl0ZWNvZGVJ
bmRleCA9IGNvZGVPcmlnaW4tPmJ5dGVjb2RlSW5kZXg7CisgICAgICAgICAgICAgICAgICAgIHBy
b2ZpbGVkQmxvY2sgPSBzdGFjay0+bV9wcm9maWxlZEJsb2NrOworICAgICAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBkZWZhdWx0Ogor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKworICAgICAgICBpZiAocHJvZmlsZWRCbG9jaykgeworICAgICAgICAg
ICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIocHJvZmlsZWRCbG9jay0+bV9sb2NrKTsKKyAg
ICAgICAgICAgIHByZWRpY3Rpb24gPSBwcm9maWxlZEJsb2NrLT52YWx1ZVByb2ZpbGVQcmVkaWN0
aW9uRm9yQnl0ZWNvZGVPZmZzZXQobG9ja2VyLCBieXRlY29kZUluZGV4KTsKKyAgICAgICAgfQor
CisgICAgICAgIHJldHVybiBwcmVkaWN0aW9uOwogICAgIH0KIAogICAgIFNwZWN1bGF0ZWRUeXBl
IGdldFByZWRpY3Rpb24odW5zaWduZWQgYnl0ZWNvZGVJbmRleCkKICAgICB7CiAgICAgICAgIFNw
ZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSBnZXRQcmVkaWN0aW9uV2l0aG91dE9TUkV4aXQoYnl0
ZWNvZGVJbmRleCk7Ci0gICAgICAgIAorCiAgICAgICAgIGlmIChwcmVkaWN0aW9uID09IFNwZWNO
b25lKSB7CiAgICAgICAgICAgICAvLyBXZSBoYXZlIG5vIGluZm9ybWF0aW9uIGFib3V0IHdoYXQg
dmFsdWVzIHRoaXMgbm9kZSBnZW5lcmF0ZXMuIEdpdmUgdXAKICAgICAgICAgICAgIC8vIG9uIGV4
ZWN1dGluZyB0aGlzIGNvZGUsIHNpbmNlIHdlJ3JlIGxpa2VseSB0byBkbyBtb3JlIGRhbWFnZSB0
aGFuIGdvb2QuCkBAIC0xMDcwLDE2ICsxMTMwLDE3IEBAIHByaXZhdGU6CiAgICAgbV9leGl0T0sg
PSBmYWxzZTsgXAogICAgIHJldHVybiBzaG91bGRDb250aW51ZVBhcnNpbmcKIAotdm9pZCBCeXRl
Q29kZVBhcnNlcjo6aGFuZGxlQ2FsbChJbnN0cnVjdGlvbiogcGMsIE5vZGVUeXBlIG9wLCBDb2Rl
U3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCit2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVDYWxs
KEluc3RydWN0aW9uKiBwYywgTm9kZVR5cGUgb3AsIENhbGxNb2RlIGNhbGxNb2RlKQogewogICAg
IEFTU0VSVChPUENPREVfTEVOR1RIKG9wX2NhbGwpID09IE9QQ09ERV9MRU5HVEgob3BfY29uc3Ry
dWN0KSk7CisgICAgQVNTRVJUKE9QQ09ERV9MRU5HVEgob3BfY2FsbCkgPT0gT1BDT0RFX0xFTkdU
SChvcF90YWlsX2NhbGwpKTsKICAgICBoYW5kbGVDYWxsKAotICAgICAgICBwY1sxXS51Lm9wZXJh
bmQsIG9wLCBraW5kLCBPUENPREVfTEVOR1RIKG9wX2NhbGwpLAorICAgICAgICBwY1sxXS51Lm9w
ZXJhbmQsIG9wLCBjYWxsTW9kZSwgT1BDT0RFX0xFTkdUSChvcF9jYWxsKSwKICAgICAgICAgcGNb
Ml0udS5vcGVyYW5kLCBwY1szXS51Lm9wZXJhbmQsIC1wY1s0XS51Lm9wZXJhbmQpOwogfQogCiB2
b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVDYWxsKAotICAgIGludCByZXN1bHQsIE5vZGVUeXBl
IG9wLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQsIHVuc2lnbmVkIGluc3RydWN0aW9uU2l6
ZSwKKyAgICBpbnQgcmVzdWx0LCBOb2RlVHlwZSBvcCwgQ2FsbE1vZGUgY2FsbE1vZGUsIHVuc2ln
bmVkIGluc3RydWN0aW9uU2l6ZSwKICAgICBpbnQgY2FsbGVlLCBpbnQgYXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMsIGludCByZWdpc3Rlck9mZnNldCkKIHsKICAgICBOb2RlKiBjYWxsVGFyZ2V0
ID0gZ2V0KFZpcnR1YWxSZWdpc3RlcihjYWxsZWUpKTsKQEAgLTEwODksMTcgKzExNTAsMTcgQEAg
dm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlQ2FsbCgKICAgICAgICAgbV9pbmxpbmVTdGFja1Rv
cC0+bV9jYWxsTGlua0luZm9zLCBtX2NhbGxDb250ZXh0TWFwKTsKICAgICAKICAgICBoYW5kbGVD
YWxsKAotICAgICAgICByZXN1bHQsIG9wLCBJbmxpbmVDYWxsRnJhbWU6OmtpbmRGb3Ioa2luZCks
IGluc3RydWN0aW9uU2l6ZSwgY2FsbFRhcmdldCwKKyAgICAgICAgcmVzdWx0LCBvcCwgY2FsbE1v
ZGUsIGluc3RydWN0aW9uU2l6ZSwgY2FsbFRhcmdldCwKICAgICAgICAgYXJndW1lbnRDb3VudElu
Y2x1ZGluZ1RoaXMsIHJlZ2lzdGVyT2Zmc2V0LCBjYWxsTGlua1N0YXR1cyk7CiB9CiAgICAgCiB2
b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVDYWxsKAotICAgIGludCByZXN1bHQsIE5vZGVUeXBl
IG9wLCBJbmxpbmVDYWxsRnJhbWU6OktpbmQga2luZCwgdW5zaWduZWQgaW5zdHJ1Y3Rpb25TaXpl
LAorICAgIGludCByZXN1bHQsIE5vZGVUeXBlIG9wLCBDYWxsTW9kZSBjYWxsTW9kZSwgdW5zaWdu
ZWQgaW5zdHJ1Y3Rpb25TaXplLAogICAgIE5vZGUqIGNhbGxUYXJnZXQsIGludCBhcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcywgaW50IHJlZ2lzdGVyT2Zmc2V0LAogICAgIENhbGxMaW5rU3RhdHVz
IGNhbGxMaW5rU3RhdHVzKQogewogICAgIGhhbmRsZUNhbGwoCi0gICAgICAgIHJlc3VsdCwgb3As
IGtpbmQsIGluc3RydWN0aW9uU2l6ZSwgY2FsbFRhcmdldCwgYXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMsCisgICAgICAgIHJlc3VsdCwgb3AsIElubGluZUNhbGxGcmFtZTo6a2luZEZvcihjYWxs
TW9kZSksIGluc3RydWN0aW9uU2l6ZSwgY2FsbFRhcmdldCwgYXJndW1lbnRDb3VudEluY2x1ZGlu
Z1RoaXMsCiAgICAgICAgIHJlZ2lzdGVyT2Zmc2V0LCBjYWxsTGlua1N0YXR1cywgZ2V0UHJlZGlj
dGlvbigpKTsKIH0KIApAQCAtMTExOSw3ICsxMTgwLDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6
aGFuZGxlQ2FsbCgKICAgICBpZiAoIWNhbGxMaW5rU3RhdHVzLmNhbk9wdGltaXplKCkpIHsKICAg
ICAgICAgLy8gT2RkbHksIHRoaXMgY29uZmxhdGVzIGNhbGxzIHRoYXQgaGF2ZW4ndCBleGVjdXRl
ZCB3aXRoIGNhbGxzIHRoYXQgYmVoYXZlZCBzdWZmaWNpZW50bHkgcG9seW1vcnBoaWNhbGx5CiAg
ICAgICAgIC8vIHRoYXQgd2UgY2Fubm90IG9wdGltaXplIHRoZW0uCi0gICAgICAgIAorCiAgICAg
ICAgIGFkZENhbGwocmVzdWx0LCBvcCwgT3BJbmZvKCksIGNhbGxUYXJnZXQsIGFyZ3VtZW50Q291
bnRJbmNsdWRpbmdUaGlzLCByZWdpc3Rlck9mZnNldCwgcHJlZGljdGlvbik7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CkBAIC0xMTM3LDkgKzExOTgsMTAgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6
aGFuZGxlQ2FsbCgKICAgICBhZGRDYWxsKHJlc3VsdCwgb3AsIGNhbGxPcEluZm8sIGNhbGxUYXJn
ZXQsIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCByZWdpc3Rlck9mZnNldCwgcHJlZGljdGlv
bik7CiB9CiAKLXZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVZhcmFyZ3NDYWxsKEluc3RydWN0
aW9uKiBwYywgTm9kZVR5cGUgb3AsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKK3ZvaWQg
Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVZhcmFyZ3NDYWxsKEluc3RydWN0aW9uKiBwYywgTm9kZVR5
cGUgb3AsIENhbGxNb2RlIGNhbGxNb2RlKQogewogICAgIEFTU0VSVChPUENPREVfTEVOR1RIKG9w
X2NhbGxfdmFyYXJncykgPT0gT1BDT0RFX0xFTkdUSChvcF9jb25zdHJ1Y3RfdmFyYXJncykpOwor
ICAgIEFTU0VSVChPUENPREVfTEVOR1RIKG9wX2NhbGxfdmFyYXJncykgPT0gT1BDT0RFX0xFTkdU
SChvcF90YWlsX2NhbGxfdmFyYXJncykpOwogICAgIAogICAgIGludCByZXN1bHQgPSBwY1sxXS51
Lm9wZXJhbmQ7CiAgICAgaW50IGNhbGxlZSA9IHBjWzJdLnUub3BlcmFuZDsKQEAgLTExNjIsNyAr
MTIyNCw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVZhcmFyZ3NDYWxsKEluc3RydWN0
aW9uKiBwYywgTm9kZVR5cGUgb3AsIENvZGVTcGVjaWFsCiAgICAgICAgIGRhdGFMb2coIiAgICBW
YXJhcmdzIGNhbGwgbGluayBzdGF0dXMgYXQgIiwgY3VycmVudENvZGVPcmlnaW4oKSwgIjogIiwg
Y2FsbExpbmtTdGF0dXMsICJcbiIpOwogICAgIAogICAgIGlmIChjYWxsTGlua1N0YXR1cy5jYW5P
cHRpbWl6ZSgpCi0gICAgICAgICYmIGhhbmRsZUlubGluaW5nKGNhbGxUYXJnZXQsIHJlc3VsdCwg
Y2FsbExpbmtTdGF0dXMsIGZpcnN0RnJlZVJlZywgVmlydHVhbFJlZ2lzdGVyKHRoaXNSZWcpLCBW
aXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRzKSwgZmlyc3RWYXJBcmdPZmZzZXQsIDAsIG1fY3VycmVu
dEluZGV4ICsgT1BDT0RFX0xFTkdUSChvcF9jYWxsX3ZhcmFyZ3MpLCBvcCwgSW5saW5lQ2FsbEZy
YW1lOjp2YXJhcmdzS2luZEZvcihraW5kKSwgcHJlZGljdGlvbikpIHsKKyAgICAgICAgJiYgaGFu
ZGxlSW5saW5pbmcoY2FsbFRhcmdldCwgcmVzdWx0LCBjYWxsTGlua1N0YXR1cywgZmlyc3RGcmVl
UmVnLCBWaXJ0dWFsUmVnaXN0ZXIodGhpc1JlZyksIFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudHMp
LCBmaXJzdFZhckFyZ09mZnNldCwgMCwgbV9jdXJyZW50SW5kZXggKyBPUENPREVfTEVOR1RIKG9w
X2NhbGxfdmFyYXJncyksIG9wLCBJbmxpbmVDYWxsRnJhbWU6OnZhcmFyZ3NLaW5kRm9yKGNhbGxN
b2RlKSwgcHJlZGljdGlvbikpIHsKICAgICAgICAgaWYgKG1fZ3JhcGguY29tcGlsYXRpb24oKSkK
ICAgICAgICAgICAgIG1fZ3JhcGguY29tcGlsYXRpb24oKS0+bm90aWNlSW5saW5lZENhbGwoKTsK
ICAgICAgICAgcmV0dXJuOwpAQCAtMTE3Miw3ICsxMjM0LDE1IEBAIHZvaWQgQnl0ZUNvZGVQYXJz
ZXI6OmhhbmRsZVZhcmFyZ3NDYWxsKEluc3RydWN0aW9uKiBwYywgTm9kZVR5cGUgb3AsIENvZGVT
cGVjaWFsCiAgICAgZGF0YS0+Zmlyc3RWYXJBcmdPZmZzZXQgPSBmaXJzdFZhckFyZ09mZnNldDsK
ICAgICAKICAgICBOb2RlKiB0aGlzQ2hpbGQgPSBnZXQoVmlydHVhbFJlZ2lzdGVyKHRoaXNSZWcp
KTsKLSAgICAKKworICAgIGlmIChvcCA9PSBUYWlsQ2FsbFZhcmFyZ3MpIHsKKyAgICAgICAgaWYg
KGFsbElubGluZUZyYW1lc0FyZVRhaWxDYWxscygpKSB7CisgICAgICAgICAgICBhZGRUb0dyYXBo
KG9wLCBPcEluZm8oZGF0YSksIE9wSW5mbygpLCBjYWxsVGFyZ2V0LCBnZXQoVmlydHVhbFJlZ2lz
dGVyKGFyZ3VtZW50cykpLCB0aGlzQ2hpbGQpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICB9CisgICAgICAgIG9wID0gVGFpbENhbGxWYXJhcmdzSW5saW5lZENhbGxlcjsKKyAgICB9CisK
ICAgICBOb2RlKiBjYWxsID0gYWRkVG9HcmFwaChvcCwgT3BJbmZvKGRhdGEpLCBPcEluZm8ocHJl
ZGljdGlvbiksIGNhbGxUYXJnZXQsIGdldChWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRzKSksIHRo
aXNDaGlsZCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFJlZyhyZXN1bHQpOwogICAgIGlm
IChyZXN1bHRSZWcuaXNWYWxpZCgpKQpAQCAtMTIwNyw4ICsxMjc3LDkgQEAgdm9pZCBCeXRlQ29k
ZVBhcnNlcjo6ZW1pdEFyZ3VtZW50UGhhbnRvbXMoaW50IHJlZ2lzdGVyT2Zmc2V0LCBpbnQgYXJn
dW1lbnRDb3VudEkKICAgICAgICAgYWRkVG9HcmFwaChQaGFudG9tLCBnZXQodmlydHVhbFJlZ2lz
dGVyRm9yQXJndW1lbnQoaSwgcmVnaXN0ZXJPZmZzZXQpKSk7CiB9CiAKLXVuc2lnbmVkIEJ5dGVD
b2RlUGFyc2VyOjppbmxpbmluZ0Nvc3QoQ2FsbFZhcmlhbnQgY2FsbGVlLCBpbnQgYXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXMsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKK3Vuc2lnbmVk
IEJ5dGVDb2RlUGFyc2VyOjppbmxpbmluZ0Nvc3QoQ2FsbFZhcmlhbnQgY2FsbGVlLCBpbnQgYXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIENhbGxNb2RlIGNhbGxNb2RlKQogeworICAgIENvZGVT
cGVjaWFsaXphdGlvbktpbmQga2luZCA9IHNwZWNpYWxpemF0aW9uS2luZEZvcihjYWxsTW9kZSk7
CiAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgIGRhdGFMb2coIkNvbnNpZGVyaW5nIGlubGluaW5n
ICIsIGNhbGxlZSwgIiBpbnRvICIsIGN1cnJlbnRDb2RlT3JpZ2luKCksICJcbiIpOwogICAgIApA
QCAtMTI1MCw3ICsxMzIxLDcgQEAgdW5zaWduZWQgQnl0ZUNvZGVQYXJzZXI6OmlubGluaW5nQ29z
dChDYWxsVmFyaWFudCBjYWxsZWUsIGludCBhcmd1bWVudENvdW50SW5jbHUKICAgICBDYXBhYmls
aXR5TGV2ZWwgY2FwYWJpbGl0eUxldmVsID0gaW5saW5lRnVuY3Rpb25Gb3JDYXBhYmlsaXR5TGV2
ZWwoCiAgICAgICAgIGNvZGVCbG9jaywga2luZCwgY2FsbGVlLmlzQ2xvc3VyZUNhbGwoKSk7CiAg
ICAgaWYgKHZlcmJvc2UpIHsKLSAgICAgICAgZGF0YUxvZygiICAgIEtpbmQ6ICIsIGtpbmQsICJc
biIpOworICAgICAgICBkYXRhTG9nKCIgICAgQ2FsbCBtb2RlOiAiLCBjYWxsTW9kZSwgIlxuIik7
CiAgICAgICAgIGRhdGFMb2coIiAgICBJcyBjbG9zdXJlIGNhbGw6ICIsIGNhbGxlZS5pc0Nsb3N1
cmVDYWxsKCksICJcbiIpOwogICAgICAgICBkYXRhTG9nKCIgICAgQ2FwYWJpbGl0eSBsZXZlbDog
IiwgY2FwYWJpbGl0eUxldmVsLCAiXG4iKTsKICAgICAgICAgZGF0YUxvZygiICAgIE1pZ2h0IGlu
bGluZSBmdW5jdGlvbjogIiwgbWlnaHRJbmxpbmVGdW5jdGlvbkZvcihjb2RlQmxvY2ssIGtpbmQp
LCAiXG4iKTsKQEAgLTEzMjEsNyArMTM5Miw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmlubGlu
ZUNhbGwoTm9kZSogY2FsbFRhcmdldE5vZGUsIGludCByZXN1bHRPcGVyYW5kLCBDYWxsVmFyCiB7
CiAgICAgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBzcGVjaWFsaXphdGlvbktpbmQgPSBJbmxpbmVD
YWxsRnJhbWU6OnNwZWNpYWxpemF0aW9uS2luZEZvcihraW5kKTsKICAgICAKLSAgICBBU1NFUlQo
aW5saW5pbmdDb3N0KGNhbGxlZSwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIHNwZWNpYWxp
emF0aW9uS2luZCkgIT0gVUlOVF9NQVgpOworICAgIEFTU0VSVChpbmxpbmluZ0Nvc3QoY2FsbGVl
LCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgSW5saW5lQ2FsbEZyYW1lOjpjYWxsTW9kZUZv
cihraW5kKSkgIT0gVUlOVF9NQVgpOwogICAgIAogICAgIENvZGVCbG9jayogY29kZUJsb2NrID0g
Y2FsbGVlLmZ1bmN0aW9uRXhlY3V0YWJsZSgpLT5iYXNlbGluZUNvZGVCbG9ja0ZvcihzcGVjaWFs
aXphdGlvbktpbmQpOwogICAgIGluc2VydENoZWNrcyhjb2RlQmxvY2spOwpAQCAtMTQyNSw3ICsx
NDk2LDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aW5saW5lQ2FsbChOb2RlKiBjYWxsVGFyZ2V0
Tm9kZSwgaW50IHJlc3VsdE9wZXJhbmQsIENhbGxWYXIKICAgICAgICAgbV9jdXJyZW50QmxvY2sg
PSBtX2dyYXBoLmxhc3RCbG9jaygpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIAorCiAg
ICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VERkdCeXRlQ29kZVBhcnNpbmcoKSkKICAgICAgICAgZGF0
YUxvZygiICAgIENyZWF0aW5nIG5ldyBibG9jayBhZnRlciBpbmxpbmluZy5cbiIpOwogCkBAIC0x
NTMyLDcgKzE2MDMsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjphdHRlbXB0VG9JbmxpbmVDYWxs
KE5vZGUqIGNhbGxUYXJnZXROb2RlLCBpbnQgcmVzdWx0T3BlcmFuZAogICAgICAgICB9CiAgICAg
fQogICAgIAotICAgIHVuc2lnbmVkIG15SW5saW5pbmdDb3N0ID0gaW5saW5pbmdDb3N0KGNhbGxl
ZSwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIHNwZWNpYWxpemF0aW9uS2luZCk7CisgICAg
dW5zaWduZWQgbXlJbmxpbmluZ0Nvc3QgPSBpbmxpbmluZ0Nvc3QoY2FsbGVlLCBhcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcywgSW5saW5lQ2FsbEZyYW1lOjpjYWxsTW9kZUZvcihraW5kKSk7CiAg
ICAgaWYgKG15SW5saW5pbmdDb3N0ID4gaW5saW5pbmdCYWxhbmNlKQogICAgICAgICByZXR1cm4g
ZmFsc2U7CiAKQEAgLTI5ODEsNyArMzA1MiwxMSBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJz
ZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogICAgICAgICAgICAgLy8gbG9naWMgcmVsaWVzIG9uIGV2
ZXJ5IGJ5dGVjb2RlIHJlc3VsdGluZyBpbiBvbmUgb3IgbW9yZSBub2Rlcywgd2hpY2ggd291bGQK
ICAgICAgICAgICAgIC8vIGJlIHRydWUgYW55d2F5IGV4Y2VwdCBmb3Igb3BfbG9vcF9oaW50LCB3
aGljaCBlbWl0cyBhIFBoYW50b20gdG8gZm9yY2UgdGhpcwogICAgICAgICAgICAgLy8gdG8gYmUg
dHJ1ZS4KLSAgICAgICAgICAgIGlmICghbV9jdXJyZW50QmxvY2stPmlzRW1wdHkoKSkKKyAgICAg
ICAgICAgIC8vIFdlIGFsc28gZG9uJ3QgaW5zZXJ0IGEganVtcCBpZiB0aGUgYmxvY2sgYWxyZWFk
eSBoYXMgYSB0ZXJtaW5hbCwKKyAgICAgICAgICAgIC8vIHdoaWNoIGNvdWxkIGhhcHBlbiBhZnRl
ciBhIHRhaWwgY2FsbC4KKyAgICAgICAgICAgIEFTU0VSVChtX2N1cnJlbnRCbG9jay0+aXNFbXB0
eSgpIHx8ICFtX2N1cnJlbnRCbG9jay0+dGVybWluYWwoKQorICAgICAgICAgICAgICAgIHx8IG1f
Y3VycmVudEJsb2NrLT50ZXJtaW5hbCgpLT5vcCgpID09IFRhaWxDYWxsIHx8IG1fY3VycmVudEJs
b2NrLT50ZXJtaW5hbCgpLT5vcCgpID09IFRhaWxDYWxsVmFyYXJncyk7CisgICAgICAgICAgICBp
ZiAoIW1fY3VycmVudEJsb2NrLT5pc0VtcHR5KCkgJiYgIW1fY3VycmVudEJsb2NrLT50ZXJtaW5h
bCgpKQogICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoSnVtcCwgT3BJbmZvKG1fY3VycmVudElu
ZGV4KSk7CiAgICAgICAgICAgICByZXR1cm4gc2hvdWxkQ29udGludWVQYXJzaW5nOwogICAgICAg
ICB9CkBAIC0zNTY5LDYgKzM2NDQsMTIgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9j
ayh1bnNpZ25lZCBsaW1pdCkKICAgICAgICAgLy8gPT09IEJsb2NrIHRlcm1pbmF0b3JzLiA9PT0K
IAogICAgICAgICBjYXNlIG9wX2ptcDogeworICAgICAgICAgICAgaWYgKG1fY3VycmVudEJsb2Nr
LT50ZXJtaW5hbCgpKSB7CisgICAgICAgICAgICAgICAgLy8gV2UgY291bGQgYmUgdGhlIGR1bW15
IGp1bXAgdG8gYSByZXR1cm4gYWZ0ZXIgYSBub24taW5saW5lZCwgbm9uLWVtdWxhdGVkIHRhaWwg
Y2FsbCBpbiBhIHRlcm5hcnkgb3BlcmF0b3IKKyAgICAgICAgICAgICAgICBOb2RlKiB0ZXJtaW5h
bCA9IG1fY3VycmVudEJsb2NrLT50ZXJtaW5hbCgpOworICAgICAgICAgICAgICAgIEFTU0VSVF9V
TlVTRUQodGVybWluYWwsIHRlcm1pbmFsLT5vcCgpID09IFRhaWxDYWxsIHx8IHRlcm1pbmFsLT5v
cCgpID09IFRhaWxDYWxsVmFyYXJncyk7CisgICAgICAgICAgICAgICAgTEFTVF9PUENPREUob3Bf
cmV0KTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGludCByZWxhdGl2ZU9mZnNldCA9IGN1
cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CiAgICAgICAgICAgICBhZGRUb0dyYXBoKEp1
bXAsIE9wSW5mbyhtX2N1cnJlbnRJbmRleCArIHJlbGF0aXZlT2Zmc2V0KSk7CiAgICAgICAgICAg
ICBpZiAocmVsYXRpdmVPZmZzZXQgPD0gMCkKQEAgLTM3NDAsNiArMzgyMSwxMiBAQCBib29sIEJ5
dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogICAgICAgICB9CiAKICAg
ICAgICAgY2FzZSBvcF9yZXQ6CisgICAgICAgICAgICBpZiAobV9jdXJyZW50QmxvY2stPnRlcm1p
bmFsKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBXZSBjb3VsZCBiZSB0aGUgZHVtbXkgcmV0dXJu
IGFmdGVyIGEgbm9uLWlubGluZWQsIG5vbi1lbXVsYXRlZCB0YWlsIGNhbGwKKyAgICAgICAgICAg
ICAgICBOb2RlKiB0ZXJtaW5hbCA9IG1fY3VycmVudEJsb2NrLT50ZXJtaW5hbCgpOworICAgICAg
ICAgICAgICAgIEFTU0VSVF9VTlVTRUQodGVybWluYWwsIHRlcm1pbmFsLT5vcCgpID09IFRhaWxD
YWxsIHx8IHRlcm1pbmFsLT5vcCgpID09IFRhaWxDYWxsVmFyYXJncyk7CisgICAgICAgICAgICAg
ICAgTEFTVF9PUENPREUob3BfcmV0KTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChp
bmxpbmVDYWxsRnJhbWUoKSkgewogICAgICAgICAgICAgICAgIGZsdXNoRm9yUmV0dXJuKCk7CiAg
ICAgICAgICAgICAgICAgaWYgKG1faW5saW5lU3RhY2tUb3AtPm1fcmV0dXJuVmFsdWUuaXNWYWxp
ZCgpKQpAQCAtMzc4NywyMiArMzg3NCwzNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJs
b2NrKHVuc2lnbmVkIGxpbWl0KQogICAgICAgICAgICAgTEFTVF9PUENPREUob3BfdGhyb3dfc3Rh
dGljX2Vycm9yKTsKICAgICAgICAgICAgIAogICAgICAgICBjYXNlIG9wX2NhbGw6Ci0gICAgICAg
ICAgICBoYW5kbGVDYWxsKGN1cnJlbnRJbnN0cnVjdGlvbiwgQ2FsbCwgQ29kZUZvckNhbGwpOwor
ICAgICAgICAgICAgaGFuZGxlQ2FsbChjdXJyZW50SW5zdHJ1Y3Rpb24sIENhbGwsIENhbGxNb2Rl
OjpSZWd1bGFyKTsKICAgICAgICAgICAgIC8vIFZlcmlmeSB0aGF0IGhhbmRsZUNhbGwoKSwgd2hp
Y2ggY291bGQgaGF2ZSBpbmxpbmVkIHRoZSBjYWxsZWUsIGRpZG4ndCB0cmFzaCBtX2N1cnJlbnRJ
bnN0cnVjdGlvbgogICAgICAgICAgICAgQVNTRVJUKG1fY3VycmVudEluc3RydWN0aW9uID09IGN1
cnJlbnRJbnN0cnVjdGlvbik7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9jYWxsKTsKLSAg
ICAgICAgICAgIAorCisgICAgICAgIGNhc2Ugb3BfdGFpbF9jYWxsOgorICAgICAgICAgICAgZmx1
c2hGb3JSZXR1cm4oKTsKKyAgICAgICAgICAgIGhhbmRsZUNhbGwoY3VycmVudEluc3RydWN0aW9u
LCBUYWlsQ2FsbCwgQ2FsbE1vZGU6OlRhaWwpOworICAgICAgICAgICAgLy8gVmVyaWZ5IHRoYXQg
aGFuZGxlQ2FsbCgpLCB3aGljaCBjb3VsZCBoYXZlIGlubGluZWQgdGhlIGNhbGxlZSwgZGlkbid0
IHRyYXNoIG1fY3VycmVudEluc3RydWN0aW9uCisgICAgICAgICAgICBBU1NFUlQobV9jdXJyZW50
SW5zdHJ1Y3Rpb24gPT0gY3VycmVudEluc3RydWN0aW9uKTsKKyAgICAgICAgICAgIC8vIFdlIGxl
dCB0aGUgZm9sbG93aW5nIG9wX3JldCBoYW5kbGUgY2FzZXMgcmVsYXRlZCB0bworICAgICAgICAg
ICAgLy8gaW5saW5pbmcgdG8ga2VlcCB0aGluZ3Mgc2ltcGxlLgorICAgICAgICAgICAgTkVYVF9P
UENPREUob3BfdGFpbF9jYWxsKTsKKwogICAgICAgICBjYXNlIG9wX2NvbnN0cnVjdDoKLSAgICAg
ICAgICAgIGhhbmRsZUNhbGwoY3VycmVudEluc3RydWN0aW9uLCBDb25zdHJ1Y3QsIENvZGVGb3JD
b25zdHJ1Y3QpOworICAgICAgICAgICAgaGFuZGxlQ2FsbChjdXJyZW50SW5zdHJ1Y3Rpb24sIENv
bnN0cnVjdCwgQ2FsbE1vZGU6OkNvbnN0cnVjdCk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShv
cF9jb25zdHJ1Y3QpOwogICAgICAgICAgICAgCiAgICAgICAgIGNhc2Ugb3BfY2FsbF92YXJhcmdz
OiB7Ci0gICAgICAgICAgICBoYW5kbGVWYXJhcmdzQ2FsbChjdXJyZW50SW5zdHJ1Y3Rpb24sIENh
bGxWYXJhcmdzLCBDb2RlRm9yQ2FsbCk7CisgICAgICAgICAgICBoYW5kbGVWYXJhcmdzQ2FsbChj
dXJyZW50SW5zdHJ1Y3Rpb24sIENhbGxWYXJhcmdzLCBDYWxsTW9kZTo6UmVndWxhcik7CiAgICAg
ICAgICAgICBORVhUX09QQ09ERShvcF9jYWxsX3ZhcmFyZ3MpOwogICAgICAgICB9CisKKyAgICAg
ICAgY2FzZSBvcF90YWlsX2NhbGxfdmFyYXJnczogeworICAgICAgICAgICAgZmx1c2hGb3JSZXR1
cm4oKTsKKyAgICAgICAgICAgIGhhbmRsZVZhcmFyZ3NDYWxsKGN1cnJlbnRJbnN0cnVjdGlvbiwg
VGFpbENhbGxWYXJhcmdzLCBDYWxsTW9kZTo6VGFpbCk7CisgICAgICAgICAgICBORVhUX09QQ09E
RShvcF90YWlsX2NhbGxfdmFyYXJncyk7CisgICAgICAgIH0KICAgICAgICAgICAgIAogICAgICAg
ICBjYXNlIG9wX2NvbnN0cnVjdF92YXJhcmdzOiB7Ci0gICAgICAgICAgICBoYW5kbGVWYXJhcmdz
Q2FsbChjdXJyZW50SW5zdHJ1Y3Rpb24sIENvbnN0cnVjdFZhcmFyZ3MsIENvZGVGb3JDb25zdHJ1
Y3QpOworICAgICAgICAgICAgaGFuZGxlVmFyYXJnc0NhbGwoY3VycmVudEluc3RydWN0aW9uLCBD
b25zdHJ1Y3RWYXJhcmdzLCBDYWxsTW9kZTo6Q29uc3RydWN0KTsKICAgICAgICAgICAgIE5FWFRf
T1BDT0RFKG9wX2NvbnN0cnVjdF92YXJhcmdzKTsKICAgICAgICAgfQogICAgICAgICAgICAgCkBA
IC00NTEzLDcgKzQ2MTUsNyBAQCBCeXRlQ29kZVBhcnNlcjo6SW5saW5lU3RhY2tFbnRyeTo6SW5s
aW5lU3RhY2tFbnRyeSgKICAgICAgICAgICAgIG1faW5saW5lQ2FsbEZyYW1lLT5pc0Nsb3N1cmVD
YWxsID0gZmFsc2U7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgbV9pbmxpbmVDYWxsRnJh
bWUtPmlzQ2xvc3VyZUNhbGwgPSB0cnVlOwotICAgICAgICBtX2lubGluZUNhbGxGcmFtZS0+Y2Fs
bGVyID0gYnl0ZUNvZGVQYXJzZXItPmN1cnJlbnRDb2RlT3JpZ2luKCk7CisgICAgICAgIG1faW5s
aW5lQ2FsbEZyYW1lLT5kaXJlY3RDYWxsZXIgPSBieXRlQ29kZVBhcnNlci0+Y3VycmVudENvZGVP
cmlnaW4oKTsKICAgICAgICAgbV9pbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5yZXNpemVUb0Zp
dChhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcyk7IC8vIFNldCB0aGUgbnVtYmVyIG9mIGFyZ3Vt
ZW50cyBpbmNsdWRpbmcgdGhpcywgYnV0IGRvbid0IGNvbmZpZ3VyZSB0aGUgdmFsdWUgcmVjb3Zl
cmllcywgeWV0LgogICAgICAgICBtX2lubGluZUNhbGxGcmFtZS0+a2luZCA9IGtpbmQ7CiAgICAg
ICAgIApAQCAtNDU4NCw3ICs0Njg2LDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VDb2Rl
QmxvY2soKQogICAgIGlmIChVTkxJS0VMWShPcHRpb25zOjpkdW1wU291cmNlQXRERkdUaW1lKCkp
KSB7CiAgICAgICAgIFZlY3RvcjxEZWZlcnJlZFNvdXJjZUR1bXA+JiBkZWZlcnJlZFNvdXJjZUR1
bXAgPSBtX2dyYXBoLm1fcGxhbi5jYWxsYmFjay0+ZW5zdXJlRGVmZXJyZWRTb3VyY2VEdW1wKCk7
CiAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUoKSkgewotICAgICAgICAgICAgRGVmZXJyZWRT
b3VyY2VEdW1wIGR1bXAoY29kZUJsb2NrLT5iYXNlbGluZVZlcnNpb24oKSwgbV9jb2RlQmxvY2ss
IEpJVENvZGU6OkRGR0pJVCwgaW5saW5lQ2FsbEZyYW1lKCktPmNhbGxlcik7CisgICAgICAgICAg
ICBEZWZlcnJlZFNvdXJjZUR1bXAgZHVtcChjb2RlQmxvY2stPmJhc2VsaW5lVmVyc2lvbigpLCBt
X2NvZGVCbG9jaywgSklUQ29kZTo6REZHSklULCBpbmxpbmVDYWxsRnJhbWUoKS0+ZGlyZWN0Q2Fs
bGVyKTsKICAgICAgICAgICAgIGRlZmVycmVkU291cmNlRHVtcC5hcHBlbmQoZHVtcCk7CiAgICAg
ICAgIH0gZWxzZQogICAgICAgICAgICAgZGVmZXJyZWRTb3VyY2VEdW1wLmFwcGVuZChEZWZlcnJl
ZFNvdXJjZUR1bXAoY29kZUJsb2NrLT5iYXNlbGluZVZlcnNpb24oKSkpOwpAQCAtNDU5NSw3ICs0
Njk3LDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VDb2RlQmxvY2soKQogICAgICAgICBp
ZiAoaW5saW5lQ2FsbEZyYW1lKCkpIHsKICAgICAgICAgICAgIGRhdGFMb2coCiAgICAgICAgICAg
ICAgICAgIiBmb3IgaW5saW5pbmcgYXQgIiwgQ29kZUJsb2NrV2l0aEpJVFR5cGUobV9jb2RlQmxv
Y2ssIEpJVENvZGU6OkRGR0pJVCksCi0gICAgICAgICAgICAgICAgIiAiLCBpbmxpbmVDYWxsRnJh
bWUoKS0+Y2FsbGVyKTsKKyAgICAgICAgICAgICAgICAiICIsIGlubGluZUNhbGxGcmFtZSgpLT5k
aXJlY3RDYWxsZXIpOwogICAgICAgICB9CiAgICAgICAgIGRhdGFMb2coCiAgICAgICAgICAgICAi
OiBuZWVkc0FjdGl2YXRpb24gPSAiLCBjb2RlQmxvY2stPm5lZWRzQWN0aXZhdGlvbigpLApAQCAt
NDY3OSw3ICs0NzgxLDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VDb2RlQmxvY2soKQog
ICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAg
ICAgICAgICAgbV9jdXJyZW50QmxvY2sgPSAwOworICAgICAgICAgICAgbV9jdXJyZW50QmxvY2sg
PSBudWxscHRyOwogICAgICAgICB9IHdoaWxlIChtX2N1cnJlbnRJbmRleCA8IGxpbWl0KTsKICAg
ICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0
aWVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcApp
bmRleCBlY2EyMGRhNzkyYzVlODUxYjc5YWMwN2U1YzYwMWM1OTJkYjUwZjJlLi5hOTdiMmRjNmQz
MmFiYjg1YjUxMWRjY2RkNTFmMmJiY2RhZmE3OTQ3IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwCkBAIC0xODUsOCArMTg1LDEwIEBAIENhcGFiaWxp
dHlMZXZlbCBjYXBhYmlsaXR5TGV2ZWwoT3Bjb2RlSUQgb3Bjb2RlSUQsIENvZGVCbG9jayogY29k
ZUJsb2NrLCBJbnN0cnVjCiAgICAgY2FzZSBvcF90aHJvdzoKICAgICBjYXNlIG9wX3Rocm93X3N0
YXRpY19lcnJvcjoKICAgICBjYXNlIG9wX2NhbGw6CisgICAgY2FzZSBvcF90YWlsX2NhbGw6CiAg
ICAgY2FzZSBvcF9jb25zdHJ1Y3Q6CiAgICAgY2FzZSBvcF9jYWxsX3ZhcmFyZ3M6CisgICAgY2Fz
ZSBvcF90YWlsX2NhbGxfdmFyYXJnczoKICAgICBjYXNlIG9wX2NvbnN0cnVjdF92YXJhcmdzOgog
ICAgIGNhc2Ugb3BfY3JlYXRlX2RpcmVjdF9hcmd1bWVudHM6CiAgICAgY2FzZSBvcF9jcmVhdGVf
c2NvcGVkX2FyZ3VtZW50czoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ2xvYmJlcml6ZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXpl
LmgKaW5kZXggZDYxMjdjZmRkYjhmNTA4Njg3MTNhYmMwNmE2NDM4NmZmM2UwZTc0Ni4uYjFlMTEw
OThiZTM0N2ExMGZjZmE2NGU0YjRmY2UzNTliZmU1Yjk0ZiAxMDA2NDQKLS0tIGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDbG9iYmVyaXplLmgKQEAgLTM4Miw5ICszODIsMTIgQEAgdm9pZCBjbG9iYmVy
aXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSwgY29uc3QgUmVhZEZ1bmN0b3ImIHJlYWQsIGNv
bnN0IFdyaXRlRnUKICAgICBjYXNlIEFycmF5UHVzaDoKICAgICBjYXNlIEFycmF5UG9wOgogICAg
IGNhc2UgQ2FsbDoKKyAgICBjYXNlIFRhaWxDYWxsSW5saW5lZENhbGxlcjoKICAgICBjYXNlIENv
bnN0cnVjdDoKICAgICBjYXNlIENhbGxWYXJhcmdzOgogICAgIGNhc2UgQ2FsbEZvcndhcmRWYXJh
cmdzOgorICAgIGNhc2UgVGFpbENhbGxWYXJhcmdzSW5saW5lZENhbGxlcjoKKyAgICBjYXNlIFRh
aWxDYWxsRm9yd2FyZFZhcmFyZ3NJbmxpbmVkQ2FsbGVyOgogICAgIGNhc2UgQ29uc3RydWN0VmFy
YXJnczoKICAgICBjYXNlIENvbnN0cnVjdEZvcndhcmRWYXJhcmdzOgogICAgIGNhc2UgVG9Qcmlt
aXRpdmU6CkBAIC0zOTMsNiArMzk2LDEzIEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgs
IE5vZGUqIG5vZGUsIGNvbnN0IFJlYWRGdW5jdG9yJiByZWFkLCBjb25zdCBXcml0ZUZ1CiAgICAg
ICAgIHJlYWQoV29ybGQpOwogICAgICAgICB3cml0ZShIZWFwKTsKICAgICAgICAgcmV0dXJuOwor
CisgICAgY2FzZSBUYWlsQ2FsbDoKKyAgICBjYXNlIFRhaWxDYWxsVmFyYXJnczoKKyAgICBjYXNl
IFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3M6CisgICAgICAgIHJlYWQoV29ybGQpOworICAgICAgICB3
cml0ZShTaWRlU3RhdGUpOworICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgR2V0
R2V0dGVyOgogICAgICAgICByZWFkKEdldHRlclNldHRlcl9nZXR0ZXIpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCmluZGV4IGJmOGRmYWJiZGFmODQ3MzY1OGIwYmEwODI5
YTcwNDgwMGIxMzhiMzYuLjdlNGJmMTMxMTMyODEyNThkMDlhYmY4M2YxZmIxNmI1MzcxNjQ2ZjAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAKQEAgLTEyMCwxMiArMTIw
LDE2IEBAIGJvb2wgZG9lc0dDKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSkKICAgICBjYXNlIENv
bXBhcmVFcToKICAgICBjYXNlIENvbXBhcmVTdHJpY3RFcToKICAgICBjYXNlIENhbGw6CisgICAg
Y2FzZSBUYWlsQ2FsbElubGluZWRDYWxsZXI6CiAgICAgY2FzZSBDb25zdHJ1Y3Q6CiAgICAgY2Fz
ZSBDYWxsVmFyYXJnczoKKyAgICBjYXNlIFRhaWxDYWxsVmFyYXJnc0lubGluZWRDYWxsZXI6CiAg
ICAgY2FzZSBDb25zdHJ1Y3RWYXJhcmdzOgogICAgIGNhc2UgTG9hZFZhcmFyZ3M6CiAgICAgY2Fz
ZSBDYWxsRm9yd2FyZFZhcmFyZ3M6CiAgICAgY2FzZSBDb25zdHJ1Y3RGb3J3YXJkVmFyYXJnczoK
KyAgICBjYXNlIFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3M6CisgICAgY2FzZSBUYWlsQ2FsbEZvcndh
cmRWYXJhcmdzSW5saW5lZENhbGxlcjoKICAgICBjYXNlIEJyZWFrcG9pbnQ6CiAgICAgY2FzZSBQ
cm9maWxlV2lsbENhbGw6CiAgICAgY2FzZSBQcm9maWxlRGlkQ2FsbDoKQEAgLTE1MCw2ICsxNTQs
OCBAQCBib29sIGRvZXNHQyhHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUpCiAgICAgY2FzZSBCcmFu
Y2g6CiAgICAgY2FzZSBTd2l0Y2g6CiAgICAgY2FzZSBSZXR1cm46CisgICAgY2FzZSBUYWlsQ2Fs
bDoKKyAgICBjYXNlIFRhaWxDYWxsVmFyYXJnczoKICAgICBjYXNlIFRocm93OgogICAgIGNhc2Ug
Q291bnRFeGVjdXRpb246CiAgICAgY2FzZSBGb3JjZU9TUkV4aXQ6CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAppbmRleCA1NWMxYjdhZjM5ZmY4ODcwOTZmYWE4
Yzg4YjdkNWUyNWEzMzM0YjZhLi43NzgyZTYyNjE4Njg5OGU3ZWRkOTc2ZTA2YzkyYzQ1MjE1OTVh
YThjIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2Uu
Y3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAKQEAg
LTEzNDAsMTEgKzEzNDAsMTUgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBOb3RpZnlXcml0ZToK
ICAgICAgICAgY2FzZSBWYXJJbmplY3Rpb25XYXRjaHBvaW50OgogICAgICAgICBjYXNlIENhbGw6
CisgICAgICAgIGNhc2UgVGFpbENhbGxJbmxpbmVkQ2FsbGVyOgogICAgICAgICBjYXNlIENvbnN0
cnVjdDoKICAgICAgICAgY2FzZSBDYWxsVmFyYXJnczoKKyAgICAgICAgY2FzZSBUYWlsQ2FsbFZh
cmFyZ3NJbmxpbmVkQ2FsbGVyOgogICAgICAgICBjYXNlIENvbnN0cnVjdFZhcmFyZ3M6CiAgICAg
ICAgIGNhc2UgQ2FsbEZvcndhcmRWYXJhcmdzOgogICAgICAgICBjYXNlIENvbnN0cnVjdEZvcndh
cmRWYXJhcmdzOgorICAgICAgICBjYXNlIFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3M6CisgICAgICAg
IGNhc2UgVGFpbENhbGxGb3J3YXJkVmFyYXJnc0lubGluZWRDYWxsZXI6CiAgICAgICAgIGNhc2Ug
TG9hZFZhcmFyZ3M6CiAgICAgICAgIGNhc2UgUHJvZmlsZUNvbnRyb2xGbG93OgogICAgICAgICBj
YXNlIE5ld09iamVjdDoKQEAgLTEzNjIsNiArMTM2Niw4IEBAIHByaXZhdGU6CiAgICAgICAgIGNh
c2UgQ3JlYXRlQ2xvbmVkQXJndW1lbnRzOgogICAgICAgICBjYXNlIEp1bXA6CiAgICAgICAgIGNh
c2UgUmV0dXJuOgorICAgICAgICBjYXNlIFRhaWxDYWxsOgorICAgICAgICBjYXNlIFRhaWxDYWxs
VmFyYXJnczoKICAgICAgICAgY2FzZSBUaHJvdzoKICAgICAgICAgY2FzZSBUaHJvd1JlZmVyZW5j
ZUVycm9yOgogICAgICAgICBjYXNlIENvdW50RXhlY3V0aW9uOgpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0dyYXBoLmNwcAppbmRleCBkMjcyZDE0MjM3NGQxMTlmOWIzYjEzYWUyMDVmODcwZmM4
MWRjZjFiLi4zYjRhMjQ4ZmQwYzY5YmJlOTA2YmU4ZDA0OGRjNjAyOTRmNzE0ZmU2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcApAQCAtOTI1LDMwICs5MjUsMzEgQEAgQnl0
ZWNvZGVLaWxscyYgR3JhcGg6OmtpbGxzRm9yKElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZy
YW1lKQogCiBib29sIEdyYXBoOjppc0xpdmVJbkJ5dGVjb2RlKFZpcnR1YWxSZWdpc3RlciBvcGVy
YW5kLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCiB7CisgICAgQ29kZU9yaWdpbiogY29kZU9yaWdp
blB0ciA9ICZjb2RlT3JpZ2luOwogICAgIGZvciAoOzspIHsKICAgICAgICAgVmlydHVhbFJlZ2lz
dGVyIHJlZyA9IFZpcnR1YWxSZWdpc3RlcigKLSAgICAgICAgICAgIG9wZXJhbmQub2Zmc2V0KCkg
LSBjb2RlT3JpZ2luLnN0YWNrT2Zmc2V0KCkpOworICAgICAgICAgICAgb3BlcmFuZC5vZmZzZXQo
KSAtIGNvZGVPcmlnaW5QdHItPnN0YWNrT2Zmc2V0KCkpOwogICAgICAgICAKLSAgICAgICAgaWYg
KG9wZXJhbmQub2Zmc2V0KCkgPCBjb2RlT3JpZ2luLnN0YWNrT2Zmc2V0KCkgKyBKU1N0YWNrOjpD
YWxsRnJhbWVIZWFkZXJTaXplKSB7CisgICAgICAgIGlmIChvcGVyYW5kLm9mZnNldCgpIDwgY29k
ZU9yaWdpblB0ci0+c3RhY2tPZmZzZXQoKSArIEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlclNpemUp
IHsKICAgICAgICAgICAgIGlmIChyZWcuaXNBcmd1bWVudCgpKSB7CiAgICAgICAgICAgICAgICAg
UkVMRUFTRV9BU1NFUlQocmVnLm9mZnNldCgpIDwgSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6
ZSk7CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKGNvZGVPcmlnaW4uaW5s
aW5lQ2FsbEZyYW1lLT5pc0Nsb3N1cmVDYWxsCisgICAgICAgICAgICAgICAgaWYgKGNvZGVPcmln
aW5QdHItPmlubGluZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2FsbAogICAgICAgICAgICAgICAgICAg
ICAmJiByZWcub2Zmc2V0KCkgPT0gSlNTdGFjazo6Q2FsbGVlKQogICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoY29k
ZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpCisgICAgICAgICAgICAgICAgaWYg
KGNvZGVPcmlnaW5QdHItPmlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkKICAgICAgICAgICAg
ICAgICAgICAgJiYgcmVnLm9mZnNldCgpID09IEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpCiAgICAg
ICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgIAogICAgICAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAg
ICAgICAgcmV0dXJuIGxpdmVuZXNzRm9yKGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKS5vcGVy
YW5kSXNMaXZlKAotICAgICAgICAgICAgICAgIHJlZy5vZmZzZXQoKSwgY29kZU9yaWdpbi5ieXRl
Y29kZUluZGV4KTsKKyAgICAgICAgICAgIHJldHVybiBsaXZlbmVzc0Zvcihjb2RlT3JpZ2luUHRy
LT5pbmxpbmVDYWxsRnJhbWUpLm9wZXJhbmRJc0xpdmUoCisgICAgICAgICAgICAgICAgcmVnLm9m
ZnNldCgpLCBjb2RlT3JpZ2luUHRyLT5ieXRlY29kZUluZGV4KTsKICAgICAgICAgfQogICAgICAg
ICAKLSAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBjb2RlT3JpZ2lu
LmlubGluZUNhbGxGcmFtZTsKKyAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJh
bWUgPSBjb2RlT3JpZ2luUHRyLT5pbmxpbmVDYWxsRnJhbWU7CiAgICAgICAgIGlmICghaW5saW5l
Q2FsbEZyYW1lKQogICAgICAgICAgICAgYnJlYWs7CiAKQEAgLTk1OCw3ICs5NTksMTEgQEAgYm9v
bCBHcmFwaDo6aXNMaXZlSW5CeXRlY29kZShWaXJ0dWFsUmVnaXN0ZXIgb3BlcmFuZCwgQ29kZU9y
aWdpbiBjb2RlT3JpZ2luKQogICAgICAgICAgICAgJiYgc3RhdGljX2Nhc3Q8c2l6ZV90PihyZWcu
dG9Bcmd1bWVudCgpKSA8IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKSkKICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAKLSAgICAgICAgY29kZU9yaWdpbiA9IGlubGlu
ZUNhbGxGcmFtZS0+Y2FsbGVyOworICAgICAgICBjb2RlT3JpZ2luUHRyID0gaW5saW5lQ2FsbEZy
YW1lLT5nZXRDYWxsZXJTa2lwcGluZ0RlYWRGcmFtZXMoKTsKKworICAgICAgICAvLyBUaGUgZmly
c3QgaW5saW5lIGNhbGwgZnJhbWUgY291bGQgYmUgYW4gaW5saW5lIHRhaWwgY2FsbAorICAgICAg
ICBpZiAoIWNvZGVPcmlnaW5QdHIpCisgICAgICAgICAgICBicmVhazsKICAgICB9CiAgICAgCiAg
ICAgcmV0dXJuIHRydWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0dyYXBoLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgKaW5kZXggNDY0
NzZkNDc4YjNkZjEwZDc1ZGZmNDliYTMxMGM1OWVhOTg3ZTA0Ny4uZDI5Mjc2MWZiNzQyNjZmYmZh
OWNjOGEyOWU0Njk3MWZiNWNiNzJjNSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdHcmFwaC5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGgu
aApAQCAtNjk1LDkgKzY5NSwxMSBAQCBwdWJsaWM6CiAgICAgICAgIC8vIGNhbGwsIGJvdGggY2Fs
bGVlIGFuZCBjYWxsZXIgd2lsbCBzZWUgdGhlIHZhcmlhYmxlcyBsaXZlLgogICAgICAgICBWaXJ0
dWFsUmVnaXN0ZXIgZXhjbHVzaW9uU3RhcnQ7CiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBleGNs
dXNpb25FbmQ7CisKKyAgICAgICAgQ29kZU9yaWdpbiogY29kZU9yaWdpblB0ciA9ICZjb2RlT3Jp
Z2luOwogICAgICAgICAKICAgICAgICAgZm9yICg7OykgewotICAgICAgICAgICAgSW5saW5lQ2Fs
bEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZTsKKyAg
ICAgICAgICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0gY29kZU9yaWdpblB0
ci0+aW5saW5lQ2FsbEZyYW1lOwogICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHN0YWNrT2Zm
c2V0KGlubGluZUNhbGxGcmFtZSA/IGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgOiAwKTsK
ICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZSkgewpAQCAtNzA5
LDcgKzcxMSw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIAogICAgICAgICAgICAgQ29kZUJsb2Nr
KiBjb2RlQmxvY2sgPSBiYXNlbGluZUNvZGVCbG9ja0ZvcihpbmxpbmVDYWxsRnJhbWUpOwogICAg
ICAgICAgICAgRnVsbEJ5dGVjb2RlTGl2ZW5lc3MmIGZ1bGxMaXZlbmVzcyA9IGxpdmVuZXNzRm9y
KGNvZGVCbG9jayk7Ci0gICAgICAgICAgICBjb25zdCBGYXN0Qml0VmVjdG9yJiBsaXZlbmVzcyA9
IGZ1bGxMaXZlbmVzcy5nZXRMaXZlbmVzcyhjb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgpOworICAg
ICAgICAgICAgY29uc3QgRmFzdEJpdFZlY3RvciYgbGl2ZW5lc3MgPSBmdWxsTGl2ZW5lc3MuZ2V0
TGl2ZW5lc3MoY29kZU9yaWdpblB0ci0+Ynl0ZWNvZGVJbmRleCk7CiAgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIHJlbGF0aXZlTG9jYWwgPSBjb2RlQmxvY2stPm1fbnVtQ2FsbGVlUmVnaXN0ZXJz
OyByZWxhdGl2ZUxvY2FsLS07KSB7CiAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJl
ZyA9IHN0YWNrT2Zmc2V0ICsgdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwocmVsYXRpdmVMb2NhbCk7
CiAgICAgICAgICAgICAgICAgCkBAIC03MzYsNyArNzM4LDExIEBAIHB1YmxpYzoKICAgICAgICAg
ICAgIGZvciAoVmlydHVhbFJlZ2lzdGVyIHJlZyA9IGV4Y2x1c2lvblN0YXJ0OyByZWcgPCBleGNs
dXNpb25FbmQ7IHJlZyArPSAxKQogICAgICAgICAgICAgICAgIGZ1bmN0b3IocmVnKTsKICAgICAg
ICAgICAgIAotICAgICAgICAgICAgY29kZU9yaWdpbiA9IGlubGluZUNhbGxGcmFtZS0+Y2FsbGVy
OworICAgICAgICAgICAgY29kZU9yaWdpblB0ciA9IGlubGluZUNhbGxGcmFtZS0+Z2V0Q2FsbGVy
U2tpcHBpbmdEZWFkRnJhbWVzKCk7CisKKyAgICAgICAgICAgIC8vIFRoZSBmaXJzdCBpbmxpbmUg
Y2FsbCBmcmFtZSBjb3VsZCBiZSBhbiBpbmxpbmUgdGFpbCBjYWxsCisgICAgICAgICAgICBpZiAo
IWNvZGVPcmlnaW5QdHIpCisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9
CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luUGxhY2VB
YnN0cmFjdFN0YXRlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFi
c3RyYWN0U3RhdGUuY3BwCmluZGV4IDEzNzNkYmU1ZGM5YTk1OWUzZjY3OTQ4ODA2OTYwZGQ1YzA4
Yzk0YzEuLjU1NmI4Yzg4ZDM2N2QzMjBiNTBmYjI3NjI3OTFmZjQzN2Q0NjliM2UgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFic3RyYWN0U3RhdGUu
Y3BwCkBAIC0zNjQsNiArMzY0LDkgQEAgaW5saW5lIGJvb2wgSW5QbGFjZUFic3RyYWN0U3RhdGU6
Om1lcmdlVG9TdWNjZXNzb3JzKEJhc2ljQmxvY2sqIGJhc2ljQmxvY2spCiAgICAgfQogICAgICAg
ICAKICAgICBjYXNlIFJldHVybjoKKyAgICBjYXNlIFRhaWxDYWxsOgorICAgIGNhc2UgVGFpbENh
bGxWYXJhcmdzOgorICAgIGNhc2UgVGFpbENhbGxGb3J3YXJkVmFyYXJnczoKICAgICBjYXNlIFVu
cmVhY2hhYmxlOgogICAgICAgICBBU1NFUlQoYmFzaWNCbG9jay0+Y2ZhQnJhbmNoRGlyZWN0aW9u
ID09IEludmFsaWRCcmFuY2hEaXJlY3Rpb24pOwogICAgICAgICByZXR1cm4gZmFsc2U7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCmluZGV4IDgwY2NhZjVlYTM2NTNlZjE3NWI1MDE4OWIy
M2UzZjEwMjQ5ZWNkYTEuLmI5NjFjZDFiYzU1Y2U0NWMyYTA2MDdmNDc2ODRkODUxZDZiMmQ5OGUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCkBAIC0xMDAyLDYgKzEwMDIsMTAgQEAg
c3RydWN0IE5vZGUgewogICAgICAgICBzd2l0Y2ggKG9wKCkpIHsKICAgICAgICAgY2FzZSBDYWxs
VmFyYXJnczoKICAgICAgICAgY2FzZSBDYWxsRm9yd2FyZFZhcmFyZ3M6CisgICAgICAgIGNhc2Ug
VGFpbENhbGxWYXJhcmdzOgorICAgICAgICBjYXNlIFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3M6Cisg
ICAgICAgIGNhc2UgVGFpbENhbGxWYXJhcmdzSW5saW5lZENhbGxlcjoKKyAgICAgICAgY2FzZSBU
YWlsQ2FsbEZvcndhcmRWYXJhcmdzSW5saW5lZENhbGxlcjoKICAgICAgICAgY2FzZSBDb25zdHJ1
Y3RWYXJhcmdzOgogICAgICAgICBjYXNlIENvbnN0cnVjdEZvcndhcmRWYXJhcmdzOgogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CkBAIC0xMDk5LDYgKzExMDMsOSBAQCBzdHJ1Y3QgTm9kZSB7CiAg
ICAgICAgIGNhc2UgQnJhbmNoOgogICAgICAgICBjYXNlIFN3aXRjaDoKICAgICAgICAgY2FzZSBS
ZXR1cm46CisgICAgICAgIGNhc2UgVGFpbENhbGw6CisgICAgICAgIGNhc2UgVGFpbENhbGxWYXJh
cmdzOgorICAgICAgICBjYXNlIFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3M6CiAgICAgICAgIGNhc2Ug
VW5yZWFjaGFibGU6CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgZGVmYXVsdDoK
QEAgLTEyNDksMTAgKzEyNTYsMTMgQEAgc3RydWN0IE5vZGUgewogICAgICAgICBjYXNlIEdldEJ5
SWRGbHVzaDoKICAgICAgICAgY2FzZSBHZXRCeVZhbDoKICAgICAgICAgY2FzZSBDYWxsOgorICAg
ICAgICBjYXNlIFRhaWxDYWxsSW5saW5lZENhbGxlcjoKICAgICAgICAgY2FzZSBDb25zdHJ1Y3Q6
CiAgICAgICAgIGNhc2UgQ2FsbFZhcmFyZ3M6CisgICAgICAgIGNhc2UgVGFpbENhbGxWYXJhcmdz
SW5saW5lZENhbGxlcjoKICAgICAgICAgY2FzZSBDb25zdHJ1Y3RWYXJhcmdzOgogICAgICAgICBj
YXNlIENhbGxGb3J3YXJkVmFyYXJnczoKKyAgICAgICAgY2FzZSBUYWlsQ2FsbEZvcndhcmRWYXJh
cmdzSW5saW5lZENhbGxlcjoKICAgICAgICAgY2FzZSBHZXRCeU9mZnNldDoKICAgICAgICAgY2Fz
ZSBNdWx0aUdldEJ5T2Zmc2V0OgogICAgICAgICBjYXNlIEdldENsb3N1cmVWYXI6CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmggYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgKaW5kZXggYTE5YjY3OTI3NWY5MGE1OTYyNzVj
YmFiZDg2NDFmOTBmZThkZTc2YS4uODdjNzA3NDBmOWJiMDdkMjZhZDdhZWVlYmExNGJiNTk1NDJh
YmYxMiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5o
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaApAQCAtMjQ1LDYg
KzI0NSw5IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICBtYWNybyhDYWxs
Rm9yd2FyZFZhcmFyZ3MsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBt
YWNybyhDb25zdHJ1Y3RWYXJhcmdzLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlKSBc
CiAgICAgbWFjcm8oQ29uc3RydWN0Rm9yd2FyZFZhcmFyZ3MsIE5vZGVSZXN1bHRKUyB8IE5vZGVN
dXN0R2VuZXJhdGUpIFwKKyAgICBtYWNybyhUYWlsQ2FsbElubGluZWRDYWxsZXIsIE5vZGVSZXN1
bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlSGFzVmFyQXJncykgXAorICAgIG1hY3JvKFRh
aWxDYWxsVmFyYXJnc0lubGluZWRDYWxsZXIsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJh
dGUpIFwKKyAgICBtYWNybyhUYWlsQ2FsbEZvcndhcmRWYXJhcmdzSW5saW5lZENhbGxlciwgTm9k
ZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIFwKICAgICAvKiBBbGxvY2F0aW9u
cy4gKi9cCiAgICAgbWFjcm8oTmV3T2JqZWN0LCBOb2RlUmVzdWx0SlMpIFwKQEAgLTMxMCw2ICsz
MTMsOSBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAgbWFjcm8oQnJhbmNo
LCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oU3dpdGNoLCBOb2RlTXVzdEdlbmVyYXRl
KSBcCiAgICAgbWFjcm8oUmV0dXJuLCBOb2RlTXVzdEdlbmVyYXRlKSBcCisgICAgbWFjcm8oVGFp
bENhbGwsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlSGFzVmFyQXJncykgXAorICAgIG1hY3JvKFRh
aWxDYWxsVmFyYXJncywgTm9kZU11c3RHZW5lcmF0ZSkgXAorICAgIG1hY3JvKFRhaWxDYWxsRm9y
d2FyZFZhcmFyZ3MsIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhVbnJlYWNoYWJsZSwg
Tm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIFwKICAgICAvKiBDb3VudCBleGVjdXRpb24uICovXApk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJD
b21tb24uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJD
b21tb24uY3BwCmluZGV4IGIyOGNmZmFjOGZlYzViY2M3NTRmNTgxYzg1YTljMGY3NmFhYmMzMTAu
LjNmMGQ2Y2QwNjkyZGFkZjM2YjRkOGIwMzY4OTM2NjU4ZmZjYzZmYzggMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAK
QEAgLTY0LDcgKzY0LDcgQEAgdm9pZCBoYW5kbGVFeGl0Q291bnRzKENDYWxsSGVscGVycyYgaml0
LCBjb25zdCBPU1JFeGl0QmFzZSYgZXhpdCkKICAgICAKICAgICBBc3NlbWJseUhlbHBlcnM6Okp1
bXBMaXN0IGxvb3BUaHJlc2hvbGQ7CiAgICAgCi0gICAgZm9yIChJbmxpbmVDYWxsRnJhbWUqIGlu
bGluZUNhbGxGcmFtZSA9IGV4aXQubV9jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZTsgaW5saW5l
Q2FsbEZyYW1lOyBpbmxpbmVDYWxsRnJhbWUgPSBpbmxpbmVDYWxsRnJhbWUtPmNhbGxlci5pbmxp
bmVDYWxsRnJhbWUpIHsKKyAgICBmb3IgKElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1l
ID0gZXhpdC5tX2NvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lOyBpbmxpbmVDYWxsRnJhbWU7IGlu
bGluZUNhbGxGcmFtZSA9IGlubGluZUNhbGxGcmFtZS0+ZGlyZWN0Q2FsbGVyLmlubGluZUNhbGxG
cmFtZSkgewogICAgICAgICBsb29wVGhyZXNob2xkLmFwcGVuZCgKICAgICAgICAgICAgIGppdC5i
cmFuY2hUZXN0OCgKICAgICAgICAgICAgICAgICBBc3NlbWJseUhlbHBlcnM6Ok5vblplcm8sCkBA
IC0xMzYsNjMgKzEzNiw4MCBAQCB2b2lkIGhhbmRsZUV4aXRDb3VudHMoQ0NhbGxIZWxwZXJzJiBq
aXQsIGNvbnN0IE9TUkV4aXRCYXNlJiBleGl0KQogCiB2b2lkIHJlaWZ5SW5saW5lZENhbGxGcmFt
ZXMoQ0NhbGxIZWxwZXJzJiBqaXQsIGNvbnN0IE9TUkV4aXRCYXNlJiBleGl0KQogeworICAgIC8v
IEZJWE1FOiBXZSBzaG91bGRuJ3QgbGVhdmUgaG9sZXMgb24gdGhlIHN0YWNrIHdoZW4gcGVyZm9y
bWluZyBhbiBPU1IgZXhpdAorICAgIC8vIGluIHByZXNlbmNlIG9mIGlubGluZWQgdGFpbCBjYWxs
cy4KKyAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ3NTEx
CiAgICAgQVNTRVJUKGppdC5iYXNlbGluZUNvZGVCbG9jaygpLT5qaXRUeXBlKCkgPT0gSklUQ29k
ZTo6QmFzZWxpbmVKSVQpOwogICAgIGppdC5zdG9yZVB0cihBc3NlbWJseUhlbHBlcnM6OlRydXN0
ZWRJbW1QdHIoaml0LmJhc2VsaW5lQ29kZUJsb2NrKCkpLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJl
c3NGb3IoKFZpcnR1YWxSZWdpc3RlcilKU1N0YWNrOjpDb2RlQmxvY2spKTsKIAotICAgIENvZGVP
cmlnaW4gY29kZU9yaWdpbjsKLSAgICBmb3IgKGNvZGVPcmlnaW4gPSBleGl0Lm1fY29kZU9yaWdp
bjsgY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWU7IGNvZGVPcmlnaW4gPSBjb2RlT3JpZ2luLmlu
bGluZUNhbGxGcmFtZS0+Y2FsbGVyKSB7Ci0gICAgICAgIElubGluZUNhbGxGcmFtZSogaW5saW5l
Q2FsbEZyYW1lID0gY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWU7Ci0gICAgICAgIENvZGVCbG9j
ayogYmFzZWxpbmVDb2RlQmxvY2sgPSBqaXQuYmFzZWxpbmVDb2RlQmxvY2tGb3IoY29kZU9yaWdp
bik7Ci0gICAgICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXIgPSBqaXQu
YmFzZWxpbmVDb2RlQmxvY2tGb3IoaW5saW5lQ2FsbEZyYW1lLT5jYWxsZXIpOwotICAgICAgICB2
b2lkKiBqdW1wVGFyZ2V0ID0gbnVsbHB0cjsKKyAgICBjb25zdCBDb2RlT3JpZ2luKiBjb2RlT3Jp
Z2luOworICAgIGZvciAoY29kZU9yaWdpbiA9ICZleGl0Lm1fY29kZU9yaWdpbjsgY29kZU9yaWdp
biAmJiBjb2RlT3JpZ2luLT5pbmxpbmVDYWxsRnJhbWU7IGNvZGVPcmlnaW4gPSBjb2RlT3JpZ2lu
LT5pbmxpbmVDYWxsRnJhbWUtPmdldENhbGxlclNraXBwaW5nRGVhZEZyYW1lcygpKSB7CisgICAg
ICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0gY29kZU9yaWdpbi0+aW5saW5l
Q2FsbEZyYW1lOworICAgICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrID0gaml0LmJh
c2VsaW5lQ29kZUJsb2NrRm9yKCpjb2RlT3JpZ2luKTsKKyAgICAgICAgQ29kZU9yaWdpbiogdHJ1
ZUNhbGxlciA9IGlubGluZUNhbGxGcmFtZS0+Z2V0Q2FsbGVyU2tpcHBpbmdEZWFkRnJhbWVzKCk7
CiAgICAgICAgIHZvaWQqIHRydWVSZXR1cm5QQyA9IG51bGxwdHI7Ci0gICAgICAgIAotICAgICAg
ICB1bnNpZ25lZCBjYWxsQnl0ZWNvZGVJbmRleCA9IGlubGluZUNhbGxGcmFtZS0+Y2FsbGVyLmJ5
dGVjb2RlSW5kZXg7Ci0gICAgICAgIAotICAgICAgICBzd2l0Y2ggKGlubGluZUNhbGxGcmFtZS0+
a2luZCkgewotICAgICAgICBjYXNlIElubGluZUNhbGxGcmFtZTo6Q2FsbDoKLSAgICAgICAgY2Fz
ZSBJbmxpbmVDYWxsRnJhbWU6OkNvbnN0cnVjdDoKLSAgICAgICAgY2FzZSBJbmxpbmVDYWxsRnJh
bWU6OkNhbGxWYXJhcmdzOgotICAgICAgICBjYXNlIElubGluZUNhbGxGcmFtZTo6Q29uc3RydWN0
VmFyYXJnczogewotICAgICAgICAgICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gPQotICAg
ICAgICAgICAgICAgIGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyLT5nZXRDYWxsTGlua0luZm9G
b3JCeXRlY29kZUluZGV4KGNhbGxCeXRlY29kZUluZGV4KTsKLSAgICAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKGNhbGxMaW5rSW5mbyk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIGp1bXBUYXJn
ZXQgPSBjYWxsTGlua0luZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbigpLmV4ZWN1dGFibGVBZGRyZXNz
KCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAg
IGNhc2UgSW5saW5lQ2FsbEZyYW1lOjpHZXR0ZXJDYWxsOgotICAgICAgICBjYXNlIElubGluZUNh
bGxGcmFtZTo6U2V0dGVyQ2FsbDogewotICAgICAgICAgICAgU3RydWN0dXJlU3R1YkluZm8qIHN0
dWJJbmZvID0KLSAgICAgICAgICAgICAgICBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+Zmlu
ZFN0dWJJbmZvKENvZGVPcmlnaW4oY2FsbEJ5dGVjb2RlSW5kZXgpKTsKLSAgICAgICAgICAgIFJF
TEVBU0VfQVNTRVJUKHN0dWJJbmZvKTsKLSAgICAgICAgICAgIAorICAgICAgICBHUFJSZWcgY2Fs
bGVyRnJhbWVHUFIgPSBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlcjsKKworICAgICAgICBpZiAo
IXRydWVDYWxsZXIpIHsKKyAgICAgICAgICAgIEFTU0VSVChpbmxpbmVDYWxsRnJhbWUtPmlzVGFp
bCgpKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFzc2VtYmx5SGVscGVyczo6QWRkcmVzcyhH
UFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQ2FsbEZyYW1lOjpyZXR1cm5QQ09mZnNldCgpKSwg
R1BSSW5mbzo6cmVnVDMpOworICAgICAgICAgICAgaml0LnN0b3JlUHRyKEdQUkluZm86OnJlZ1Qz
LCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3JCeXRlT2Zmc2V0KGlubGluZUNhbGxGcmFtZS0+
cmV0dXJuUENPZmZzZXQoKSkpOworICAgICAgICAgICAgaml0LmxvYWRQdHIoQXNzZW1ibHlIZWxw
ZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBDYWxsRnJhbWU6OmNhbGxl
ckZyYW1lT2Zmc2V0KCkpLCBHUFJJbmZvOjpyZWdUMyk7CisgICAgICAgICAgICBjYWxsZXJGcmFt
ZUdQUiA9IEdQUkluZm86OnJlZ1QzOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgQ29k
ZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlciA9IGppdC5iYXNlbGluZUNvZGVCbG9j
a0ZvcigqdHJ1ZUNhbGxlcik7CisgICAgICAgICAgICB1bnNpZ25lZCBjYWxsQnl0ZWNvZGVJbmRl
eCA9IHRydWVDYWxsZXItPmJ5dGVjb2RlSW5kZXg7CisgICAgICAgICAgICB2b2lkKiBqdW1wVGFy
Z2V0ID0gbnVsbHB0cjsKKwogICAgICAgICAgICAgc3dpdGNoIChpbmxpbmVDYWxsRnJhbWUtPmtp
bmQpIHsKLSAgICAgICAgICAgIGNhc2UgSW5saW5lQ2FsbEZyYW1lOjpHZXR0ZXJDYWxsOgotICAg
ICAgICAgICAgICAgIGp1bXBUYXJnZXQgPSBqaXQudm0oKS0+Z2V0Q1RJU3R1YihiYXNlbGluZUdl
dHRlclJldHVyblRodW5rR2VuZXJhdG9yKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgSW5saW5lQ2FsbEZyYW1lOjpT
ZXR0ZXJDYWxsOgotICAgICAgICAgICAgICAgIGp1bXBUYXJnZXQgPSBqaXQudm0oKS0+Z2V0Q1RJ
U3R1YihiYXNlbGluZVNldHRlclJldHVyblRodW5rR2VuZXJhdG9yKS5jb2RlKCkuZXhlY3V0YWJs
ZUFkZHJlc3MoKTsKKyAgICAgICAgICAgIGNhc2UgSW5saW5lQ2FsbEZyYW1lOjpDYWxsOgorICAg
ICAgICAgICAgY2FzZSBJbmxpbmVDYWxsRnJhbWU6OkNvbnN0cnVjdDoKKyAgICAgICAgICAgIGNh
c2UgSW5saW5lQ2FsbEZyYW1lOjpDYWxsVmFyYXJnczoKKyAgICAgICAgICAgIGNhc2UgSW5saW5l
Q2FsbEZyYW1lOjpDb25zdHJ1Y3RWYXJhcmdzOgorICAgICAgICAgICAgY2FzZSBJbmxpbmVDYWxs
RnJhbWU6OlRhaWxDYWxsOgorICAgICAgICAgICAgY2FzZSBJbmxpbmVDYWxsRnJhbWU6OlRhaWxD
YWxsVmFyYXJnczogeworICAgICAgICAgICAgICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZv
ID0KKyAgICAgICAgICAgICAgICAgICAgYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXItPmdldENh
bGxMaW5rSW5mb0ZvckJ5dGVjb2RlSW5kZXgoY2FsbEJ5dGVjb2RlSW5kZXgpOworICAgICAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKGNhbGxMaW5rSW5mbyk7CisKKyAgICAgICAgICAgICAgICBq
dW1wVGFyZ2V0ID0gY2FsbExpbmtJbmZvLT5jYWxsUmV0dXJuTG9jYXRpb24oKS5leGVjdXRhYmxl
QWRkcmVzcygpOwogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgZGVmYXVsdDoK
LSAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBjYXNlIElubGluZUNhbGxGcmFtZTo6R2V0dGVyQ2FsbDoKKyAg
ICAgICAgICAgIGNhc2UgSW5saW5lQ2FsbEZyYW1lOjpTZXR0ZXJDYWxsOiB7CisgICAgICAgICAg
ICAgICAgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvID0KKyAgICAgICAgICAgICAgICAgICAg
YmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXItPmZpbmRTdHViSW5mbyhDb2RlT3JpZ2luKGNhbGxC
eXRlY29kZUluZGV4KSk7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3R1YkluZm8p
OworCisgICAgICAgICAgICAgICAgc3dpdGNoIChpbmxpbmVDYWxsRnJhbWUtPmtpbmQpIHsKKyAg
ICAgICAgICAgICAgICBjYXNlIElubGluZUNhbGxGcmFtZTo6R2V0dGVyQ2FsbDoKKyAgICAgICAg
ICAgICAgICAgICAganVtcFRhcmdldCA9IGppdC52bSgpLT5nZXRDVElTdHViKGJhc2VsaW5lR2V0
dGVyUmV0dXJuVGh1bmtHZW5lcmF0b3IpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpOworICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBjYXNlIElubGluZUNhbGxG
cmFtZTo6U2V0dGVyQ2FsbDoKKyAgICAgICAgICAgICAgICAgICAganVtcFRhcmdldCA9IGppdC52
bSgpLT5nZXRDVElTdHViKGJhc2VsaW5lU2V0dGVyUmV0dXJuVGh1bmtHZW5lcmF0b3IpLmNvZGUo
KS5leGVjdXRhYmxlQWRkcmVzcygpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICB0cnVlUmV0dXJuUEMgPSBzdHViSW5mby0+Y2FsbFJldHVy
bkxvY2F0aW9uLmxhYmVsQXRPZmZzZXQoCisgICAgICAgICAgICAgICAgICAgIHN0dWJJbmZvLT5w
YXRjaC5kZWx0YUNhbGxUb0RvbmUpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CiAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICB9IH0KKworICAgICAgICAgICAgaWYgKHRydWVDYWxsZXIt
PmlubGluZUNhbGxGcmFtZSkgeworICAgICAgICAgICAgICAgIGppdC5hZGRQdHIoCisgICAgICAg
ICAgICAgICAgICAgIEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKHRydWVDYWxsZXItPmlu
bGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSwKKyAg
ICAgICAgICAgICAgICAgICAgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsCisgICAgICAgICAg
ICAgICAgICAgIEdQUkluZm86OnJlZ1QzKTsKKyAgICAgICAgICAgICAgICBjYWxsZXJGcmFtZUdQ
UiA9IEdQUkluZm86OnJlZ1QzOwogICAgICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAg
ICAgICB0cnVlUmV0dXJuUEMgPSBzdHViSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uLmxhYmVsQXRP
ZmZzZXQoCi0gICAgICAgICAgICAgICAgc3R1YkluZm8tPnBhdGNoLmRlbHRhQ2FsbFRvRG9uZSku
ZXhlY3V0YWJsZUFkZHJlc3MoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICB9IH0KIAot
ICAgICAgICBHUFJSZWcgY2FsbGVyRnJhbWVHUFI7Ci0gICAgICAgIGlmIChpbmxpbmVDYWxsRnJh
bWUtPmNhbGxlci5pbmxpbmVDYWxsRnJhbWUpIHsKLSAgICAgICAgICAgIGppdC5hZGRQdHIoQXNz
ZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIoaW5saW5lQ2FsbEZyYW1lLT5jYWxsZXIuaW5saW5l
Q2FsbEZyYW1lLT5zdGFja09mZnNldCAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpLCBHUFJJbmZv
OjpjYWxsRnJhbWVSZWdpc3RlciwgR1BSSW5mbzo6cmVnVDMpOwotICAgICAgICAgICAgY2FsbGVy
RnJhbWVHUFIgPSBHUFJJbmZvOjpyZWdUMzsKLSAgICAgICAgfSBlbHNlCi0gICAgICAgICAgICBj
YWxsZXJGcmFtZUdQUiA9IEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyOwotICAgICAgICAKLSAg
ICAgICAgaml0LnN0b3JlUHRyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbVB0cihqdW1wVGFy
Z2V0KSwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yQnl0ZU9mZnNldChpbmxpbmVDYWxsRnJh
bWUtPnJldHVyblBDT2Zmc2V0KCkpKTsKKyAgICAgICAgICAgIGppdC5zdG9yZVB0cihBc3NlbWJs
eUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoanVtcFRhcmdldCksIEFzc2VtYmx5SGVscGVyczo6YWRk
cmVzc0ZvckJ5dGVPZmZzZXQoaW5saW5lQ2FsbEZyYW1lLT5yZXR1cm5QQ09mZnNldCgpKSk7Cisg
ICAgICAgIH0KKwogICAgICAgICBpZiAodHJ1ZVJldHVyblBDKQogICAgICAgICAgICAgaml0LnN0
b3JlUHRyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbVB0cih0cnVlUmV0dXJuUEMpLCBBc3Nl
bWJseUhlbHBlcnM6OmFkZHJlc3NGb3IoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIHZp
cnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUo
KSkub2Zmc2V0KCkpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAKQEAgLTIwMiwxMyArMjE5
LDEzIEBAIHZvaWQgcmVpZnlJbmxpbmVkQ2FsbEZyYW1lcyhDQ2FsbEhlbHBlcnMmIGppdCwgY29u
c3QgT1NSRXhpdEJhc2UmIGV4aXQpCiAgICAgICAgICAgICBqaXQuc3RvcmUzMihBc3NlbWJseUhl
bHBlcnM6OlRydXN0ZWRJbW0zMihpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCkpLCBB
c3NlbWJseUhlbHBlcnM6OnBheWxvYWRGb3IoKFZpcnR1YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZy
YW1lLT5zdGFja09mZnNldCArIEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpKSk7CiAjaWYgVVNFKEpT
VkFMVUU2NCkKICAgICAgICAgaml0LnN0b3JlNjQoY2FsbGVyRnJhbWVHUFIsIEFzc2VtYmx5SGVs
cGVyczo6YWRkcmVzc0ZvckJ5dGVPZmZzZXQoaW5saW5lQ2FsbEZyYW1lLT5jYWxsZXJGcmFtZU9m
ZnNldCgpKSk7Ci0gICAgICAgIHVpbnQzMl90IGxvY2F0aW9uQml0cyA9IENhbGxTaXRlSW5kZXgo
Y29kZU9yaWdpbi5ieXRlY29kZUluZGV4KS5iaXRzKCk7CisgICAgICAgIHVpbnQzMl90IGxvY2F0
aW9uQml0cyA9IENhbGxTaXRlSW5kZXgoY29kZU9yaWdpbi0+Ynl0ZWNvZGVJbmRleCkuYml0cygp
OwogICAgICAgICBqaXQuc3RvcmUzMihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihsb2Nh
dGlvbkJpdHMpLCBBc3NlbWJseUhlbHBlcnM6OnRhZ0ZvcigoVmlydHVhbFJlZ2lzdGVyKShpbmxp
bmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgSlNTdGFjazo6QXJndW1lbnRDb3VudCkpKTsKICAg
ICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUtPmlzQ2xvc3VyZUNhbGwpCiAgICAgICAgICAgICBq
aXQuc3RvcmU2NChBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUo
SlNWYWx1ZShpbmxpbmVDYWxsRnJhbWUtPmNhbGxlZUNvbnN0YW50KCkpKSksIEFzc2VtYmx5SGVs
cGVyczo6YWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKShpbmxpbmVDYWxsRnJhbWUtPnN0YWNr
T2Zmc2V0ICsgSlNTdGFjazo6Q2FsbGVlKSkpOwogI2Vsc2UgLy8gVVNFKEpTVkFMVUU2NCkgLy8g
c28gdGhpcyBpcyB0aGUgMzItYml0IHBhcnQKICAgICAgICAgaml0LnN0b3JlUHRyKGNhbGxlckZy
YW1lR1BSLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3JCeXRlT2Zmc2V0KGlubGluZUNhbGxG
cmFtZS0+Y2FsbGVyRnJhbWVPZmZzZXQoKSkpOwotICAgICAgICBJbnN0cnVjdGlvbiogaW5zdHJ1
Y3Rpb24gPSBiYXNlbGluZUNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKSArIGNvZGVP
cmlnaW4uYnl0ZWNvZGVJbmRleDsKKyAgICAgICAgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uID0g
YmFzZWxpbmVDb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmJlZ2luKCkgKyBjb2RlT3JpZ2luLT5i
eXRlY29kZUluZGV4OwogICAgICAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUlu
ZGV4KGluc3RydWN0aW9uKS5iaXRzKCk7CiAgICAgICAgIGppdC5zdG9yZTMyKEFzc2VtYmx5SGVs
cGVyczo6VHJ1c3RlZEltbTMyKGxvY2F0aW9uQml0cyksIEFzc2VtYmx5SGVscGVyczo6dGFnRm9y
KChWaXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBKU1N0YWNr
OjpBcmd1bWVudENvdW50KSkpOwogICAgICAgICBqaXQuc3RvcmUzMihBc3NlbWJseUhlbHBlcnM6
OlRydXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgQXNzZW1ibHlIZWxwZXJzOjp0YWdGb3Io
KFZpcnR1YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIEpTU3RhY2s6
OkNhbGxlZSkpKTsKQEAgLTIxNywxMyArMjM0LDE2IEBAIHZvaWQgcmVpZnlJbmxpbmVkQ2FsbEZy
YW1lcyhDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgT1NSRXhpdEJhc2UmIGV4aXQpCiAjZW5kaWYg
Ly8gVVNFKEpTVkFMVUU2NCkgLy8gZW5kaW5nIHRoZSAjZWxzZSBwYXJ0LCBzbyBkaXJlY3RseSBh
Ym92ZSBpcyB0aGUgMzItYml0IHBhcnQKICAgICB9CiAKKyAgICAvLyBEb24ndCBuZWVkIHRvIHNl
dCB0aGUgdG9wbGV2ZWwgY29kZSBvcmlnaW4gaWYgd2Ugb25seSBkaWQgaW5saW5lIHRhaWwgY2Fs
bHMKKyAgICBpZiAoY29kZU9yaWdpbikgewogI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgdWludDMy
X3QgbG9jYXRpb25CaXRzID0gQ2FsbFNpdGVJbmRleChjb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgp
LmJpdHMoKTsKKyAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4KGNvZGVP
cmlnaW4tPmJ5dGVjb2RlSW5kZXgpLmJpdHMoKTsKICNlbHNlCi0gICAgSW5zdHJ1Y3Rpb24qIGlu
c3RydWN0aW9uID0gaml0LmJhc2VsaW5lQ29kZUJsb2NrKCktPmluc3RydWN0aW9ucygpLmJlZ2lu
KCkgKyBjb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXg7CisgICAgSW5zdHJ1Y3Rpb24qIGluc3RydWN0
aW9uID0gaml0LmJhc2VsaW5lQ29kZUJsb2NrKCktPmluc3RydWN0aW9ucygpLmJlZ2luKCkgKyBj
b2RlT3JpZ2luLT5ieXRlY29kZUluZGV4OwogICAgIHVpbnQzMl90IGxvY2F0aW9uQml0cyA9IENh
bGxTaXRlSW5kZXgoaW5zdHJ1Y3Rpb24pLmJpdHMoKTsKICNlbmRpZgotICAgIGppdC5zdG9yZTMy
KEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKGxvY2F0aW9uQml0cyksIEFzc2VtYmx5SGVs
cGVyczo6dGFnRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpKSk7
CisgICAgICAgIGppdC5zdG9yZTMyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKGxvY2F0
aW9uQml0cyksIEFzc2VtYmx5SGVscGVyczo6dGFnRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKEpTU3Rh
Y2s6OkFyZ3VtZW50Q291bnQpKSk7CisgICAgfQogfQogCiAjaWYgRU5BQkxFKEdHQykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdFByZXBhcmF0aW9uLmNw
cCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdFByZXBhcmF0aW9uLmNwcApp
bmRleCA1MWQ2ZTVhMGQ2YWVlMmQ0ODZhZTMwMmY5ZTg1ZmU1ZDlhNTFlNjU1Li4zZTMxZWYxZDE5
MGEwNTgyNTdiMTZmNTUzOWI1YjJkNGQ4NGI1MjJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09TUkV4aXRQcmVwYXJhdGlvbi5jcHAKKysrIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0UHJlcGFyYXRpb24uY3BwCkBAIC00MSw3ICs0MSw3IEBA
IHZvaWQgcHJlcGFyZUNvZGVPcmlnaW5Gb3JPU1JFeGl0KEV4ZWNTdGF0ZSogZXhlYywgQ29kZU9y
aWdpbiBjb2RlT3JpZ2luKQogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgRGVmZXJHQyBk
ZWZlckdDKHZtLmhlYXApOwogICAgIAotICAgIGZvciAoOyBjb2RlT3JpZ2luLmlubGluZUNhbGxG
cmFtZTsgY29kZU9yaWdpbiA9IGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5jYWxsZXIpIHsK
KyAgICBmb3IgKDsgY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWU7IGNvZGVPcmlnaW4gPSBjb2Rl
T3JpZ2luLmlubGluZUNhbGxGcmFtZS0+ZGlyZWN0Q2FsbGVyKSB7CiAgICAgICAgIEZ1bmN0aW9u
RXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9CiAgICAgICAgICAgICBzdGF0aWNfY2FzdDxGdW5jdGlv
bkV4ZWN1dGFibGUqPihjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+ZXhlY3V0YWJsZS5nZXQo
KSk7CiAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhlY3V0YWJsZS0+YmFzZWxpbmVD
b2RlQmxvY2tGb3IoCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09w
ZXJhdGlvbnMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNw
cAppbmRleCAxMzI4ZThlMDE5N2NkYmIwMTMzOTg5YzBmZDM4N2RkNzg0Nzk2MDdhLi5jYzIzY2Rj
NDY5OTkxNWM5MzNhZTRiOThlMjNiOWVjNWJlZjczNjdiIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKQEAgLTEzMTUsNyArMTMxNSw3IEBAIGV4dGVybiAi
QyIgdm9pZCBKSVRfT1BFUkFUSU9OIHRyaWdnZXJSZW9wdGltaXphdGlvbk5vdyhDb2RlQmxvY2sq
IGNvZGVCbG9jaywgT1NSCiAgICAgQVNTRVJUKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJVChvcHRp
bWl6ZWRDb2RlQmxvY2stPmppdFR5cGUoKSkpOwogICAgIAogICAgIGJvb2wgZGlkVHJ5VG9FbnRl
ckludG9JbmxpbmVkTG9vcHMgPSBmYWxzZTsKLSAgICBmb3IgKElubGluZUNhbGxGcmFtZSogaW5s
aW5lQ2FsbEZyYW1lID0gZXhpdC0+bV9jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZTsgaW5saW5l
Q2FsbEZyYW1lOyBpbmxpbmVDYWxsRnJhbWUgPSBpbmxpbmVDYWxsRnJhbWUtPmNhbGxlci5pbmxp
bmVDYWxsRnJhbWUpIHsKKyAgICBmb3IgKElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1l
ID0gZXhpdC0+bV9jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZTsgaW5saW5lQ2FsbEZyYW1lOyBp
bmxpbmVDYWxsRnJhbWUgPSBpbmxpbmVDYWxsRnJhbWUtPmRpcmVjdENhbGxlci5pbmxpbmVDYWxs
RnJhbWUpIHsKICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+ZXhlY3V0YWJsZS0+ZGlkVHJ5
VG9FbnRlckluTG9vcCgpKSB7CiAgICAgICAgICAgICBkaWRUcnlUb0VudGVySW50b0lubGluZWRM
b29wcyA9IHRydWU7CiAgICAgICAgICAgICBicmVhazsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHUHJlY2lzZUxvY2FsQ2xvYmJlcml6ZS5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdQcmVjaXNlTG9jYWxDbG9iYmVyaXplLmgKaW5kZXggMWNkNmIwOWVm
ZjJkMmFlNDVhMTRiNWMwNzAwZGM1YmY2YTExZDkwMy4uNDVlNWNiZDQwNzViNTAwOGQyNzcyMDc4
NmNhMzg4MzIxMTk2YTI0YSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdQcmVjaXNlTG9jYWxDbG9iYmVyaXplLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdQcmVjaXNlTG9jYWxDbG9iYmVyaXplLmgKQEAgLTExMSw3ICsxMTEsOSBAQCBwcml2YXRl
OgogICAgICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZhbDoKICAgICAgICAgY2FzZSBGb3J3YXJk
VmFyYXJnczoKICAgICAgICAgY2FzZSBDYWxsRm9yd2FyZFZhcmFyZ3M6Ci0gICAgICAgIGNhc2Ug
Q29uc3RydWN0Rm9yd2FyZFZhcmFyZ3M6IHsKKyAgICAgICAgY2FzZSBDb25zdHJ1Y3RGb3J3YXJk
VmFyYXJnczoKKyAgICAgICAgY2FzZSBUYWlsQ2FsbEZvcndhcmRWYXJhcmdzOgorICAgICAgICBj
YXNlIFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3NJbmxpbmVkQ2FsbGVyOiB7CiAgICAgICAgICAgICBJ
bmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IG1fbm9kZS0+Y2hpbGQxKCktPm9yaWdp
bi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWU7CiAgICAgICAgICAgICBpZiAoIWlubGluZUNhbGxG
cmFtZSkgewogICAgICAgICAgICAgICAgIC8vIFJlYWQgdGhlIG91dGVybW9zdCBhcmd1bWVudHMg
YW5kIGFyZ3VtZW50IGNvdW50LgpAQCAtMTM4LDcgKzE0MCw3IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICAgICAgbV9yZWFkKFZpcnR1YWxSZWdpc3RlcihpKSk7CiAgICAgICAgIAogICAgICAgICAg
ICAgLy8gUmVhZCBhbGwgb2YgdGhlIGlubGluZSBhcmd1bWVudHMgYW5kIGNhbGwgZnJhbWUgaGVh
ZGVycyB0aGF0IHdlIGRpZG4ndCBhbHJlYWR5IGNhcHR1cmUuCi0gICAgICAgICAgICBmb3IgKElu
bGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0gbV9ub2RlLT5vcmlnaW4uc2VtYW50aWMu
aW5saW5lQ2FsbEZyYW1lOyBpbmxpbmVDYWxsRnJhbWU7IGlubGluZUNhbGxGcmFtZSA9IGlubGlu
ZUNhbGxGcmFtZS0+Y2FsbGVyLmlubGluZUNhbGxGcmFtZSkgeworICAgICAgICAgICAgZm9yIChJ
bmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IG1fbm9kZS0+b3JpZ2luLnNlbWFudGlj
LmlubGluZUNhbGxGcmFtZTsgaW5saW5lQ2FsbEZyYW1lOyBpbmxpbmVDYWxsRnJhbWUgPSBpbmxp
bmVDYWxsRnJhbWUtPmdldENhbGxlcklubGluZUZyYW1lU2tpcHBpbmdEZWFkRnJhbWVzKCkpIHsK
ICAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3Vt
ZW50cy5zaXplKCk7IGktLSA+IDE7KQogICAgICAgICAgICAgICAgICAgICBtX3JlYWQoVmlydHVh
bFJlZ2lzdGVyKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyB2aXJ0dWFsUmVnaXN0ZXJG
b3JBcmd1bWVudChpKS5vZmZzZXQoKSkpOwogICAgICAgICAgICAgICAgIGlmIChpbmxpbmVDYWxs
RnJhbWUtPmlzQ2xvc3VyZUNhbGwpCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCmluZGV4IDk2ZjAwZTFk
MjA3M2I1NWY3YWFhZTUyNDgyMDY5YjQ0ZTBiMjlkYzMuLmEzOWEwNTkyM2JjYWQwMDliNzE1MjFl
MzczY2UxYmMxNzU4Y2QyOTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCkBAIC0xOTQsMTEgKzE5
NCwxNCBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIE11bHRpR2V0QnlPZmZzZXQ6CiAgICAgICAg
IGNhc2UgR2V0RGlyZWN0UG5hbWU6CiAgICAgICAgIGNhc2UgQ2FsbDoKKyAgICAgICAgY2FzZSBU
YWlsQ2FsbElubGluZWRDYWxsZXI6CiAgICAgICAgIGNhc2UgQ29uc3RydWN0OgogICAgICAgICBj
YXNlIENhbGxWYXJhcmdzOgorICAgICAgICBjYXNlIFRhaWxDYWxsVmFyYXJnc0lubGluZWRDYWxs
ZXI6CiAgICAgICAgIGNhc2UgQ29uc3RydWN0VmFyYXJnczoKICAgICAgICAgY2FzZSBDYWxsRm9y
d2FyZFZhcmFyZ3M6CiAgICAgICAgIGNhc2UgQ29uc3RydWN0Rm9yd2FyZFZhcmFyZ3M6CisgICAg
ICAgIGNhc2UgVGFpbENhbGxGb3J3YXJkVmFyYXJnc0lubGluZWRDYWxsZXI6CiAgICAgICAgIGNh
c2UgR2V0R2xvYmFsVmFyOgogICAgICAgICBjYXNlIEdldEdsb2JhbExleGljYWxWYXJpYWJsZToK
ICAgICAgICAgY2FzZSBHZXRDbG9zdXJlVmFyOgpAQCAtNjM0LDYgKzYzNyw5IEBAIHByaXZhdGU6
CiAgICAgICAgIGNhc2UgUHV0Q2xvc3VyZVZhcjoKICAgICAgICAgY2FzZSBQdXRUb0FyZ3VtZW50
czoKICAgICAgICAgY2FzZSBSZXR1cm46CisgICAgICAgIGNhc2UgVGFpbENhbGw6CisgICAgICAg
IGNhc2UgVGFpbENhbGxWYXJhcmdzOgorICAgICAgICBjYXNlIFRhaWxDYWxsRm9yd2FyZFZhcmFy
Z3M6CiAgICAgICAgIGNhc2UgVGhyb3c6CiAgICAgICAgIGNhc2UgUHV0QnlJZDoKICAgICAgICAg
Y2FzZSBQdXRCeUlkRmx1c2g6CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NhZmVUb0V4ZWN1dGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRv
RXhlY3V0ZS5oCmluZGV4IDllNzgxZjViZDRjNmVlMjkzZmNlYTU3MGRjY2RhMDg1Y2NmNWZiZTYu
LjBlZjJhMDdkY2Y1ZDg2MGIxZTQ5ZTM4NTAyYmI4YTcxZDFiMmVjNzkgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCisrKyBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCkBAIC0yMTIsOCArMjEyLDExIEBA
IGJvb2wgc2FmZVRvRXhlY3V0ZShBYnN0cmFjdFN0YXRlVHlwZSYgc3RhdGUsIEdyYXBoJiBncmFw
aCwgTm9kZSogbm9kZSkKICAgICBjYXNlIENvbXBhcmVFcToKICAgICBjYXNlIENvbXBhcmVTdHJp
Y3RFcToKICAgICBjYXNlIENhbGw6CisgICAgY2FzZSBUYWlsQ2FsbElubGluZWRDYWxsZXI6CiAg
ICAgY2FzZSBDb25zdHJ1Y3Q6CiAgICAgY2FzZSBDYWxsVmFyYXJnczoKKyAgICBjYXNlIFRhaWxD
YWxsVmFyYXJnc0lubGluZWRDYWxsZXI6CisgICAgY2FzZSBUYWlsQ2FsbEZvcndhcmRWYXJhcmdz
SW5saW5lZENhbGxlcjoKICAgICBjYXNlIENvbnN0cnVjdFZhcmFyZ3M6CiAgICAgY2FzZSBMb2Fk
VmFyYXJnczoKICAgICBjYXNlIENhbGxGb3J3YXJkVmFyYXJnczoKQEAgLTI1OCw2ICsyNjEsOSBA
QCBib29sIHNhZmVUb0V4ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUmIHN0YXRlLCBHcmFwaCYgZ3Jh
cGgsIE5vZGUqIG5vZGUpCiAgICAgY2FzZSBCcmFuY2g6CiAgICAgY2FzZSBTd2l0Y2g6CiAgICAg
Y2FzZSBSZXR1cm46CisgICAgY2FzZSBUYWlsQ2FsbDoKKyAgICBjYXNlIFRhaWxDYWxsVmFyYXJn
czoKKyAgICBjYXNlIFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3M6CiAgICAgY2FzZSBUaHJvdzoKICAg
ICBjYXNlIFRocm93UmVmZXJlbmNlRXJyb3I6CiAgICAgY2FzZSBDb3VudEV4ZWN1dGlvbjoKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82
NC5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQu
Y3BwCmluZGV4IGRhZjYyZjViZjU5YjVkOWQzMDc1ZTFjNzdhNTU1NjVlMWNhYTEzYmEuLjNjMWUx
ZDA4NDRhZWI3MTc5YjQxYjRjY2ZlNTExNGEwMmVhNmU5ZjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcApAQCAtMzAsNiAr
MzAsNyBAQAogI2lmIEVOQUJMRShERkdfSklUKQogCiAjaW5jbHVkZSAiQXJyYXlQcm90b3R5cGUu
aCIKKyNpbmNsdWRlICJDYWxsRnJhbWVTaHVmZmxlci5oIgogI2luY2x1ZGUgIkRGR0Fic3RyYWN0
SW50ZXJwcmV0ZXJJbmxpbmVzLmgiCiAjaW5jbHVkZSAiREZHQ2FsbEFycmF5QWxsb2NhdG9yU2xv
d1BhdGhHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJERkdPcGVyYXRpb25zLmgiCkBAIC02MzAsMTAg
KzYzMSwyMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlKQogICAg
IENhbGxMaW5rSW5mbzo6Q2FsbFR5cGUgY2FsbFR5cGU7CiAgICAgYm9vbCBpc1ZhcmFyZ3MgPSBm
YWxzZTsKICAgICBib29sIGlzRm9yd2FyZFZhcmFyZ3MgPSBmYWxzZTsKKyAgICBib29sIGlzVGFp
bCA9IGZhbHNlOworICAgIGJvb2wgaXNFbXVsYXRlZFRhaWwgPSBmYWxzZTsKICAgICBzd2l0Y2gg
KG5vZGUtPm9wKCkpIHsKICAgICBjYXNlIENhbGw6CiAgICAgICAgIGNhbGxUeXBlID0gQ2FsbExp
bmtJbmZvOjpDYWxsOwogICAgICAgICBicmVhazsKKyAgICBjYXNlIFRhaWxDYWxsOgorICAgICAg
ICBjYWxsVHlwZSA9IENhbGxMaW5rSW5mbzo6VGFpbENhbGw7CisgICAgICAgIGlzVGFpbCA9IHRy
dWU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVGFpbENhbGxJbmxpbmVkQ2FsbGVyOgorICAg
ICAgICBjYWxsVHlwZSA9IENhbGxMaW5rSW5mbzo6Q2FsbDsKKyAgICAgICAgaXNFbXVsYXRlZFRh
aWwgPSB0cnVlOworICAgICAgICBicmVhazsKICAgICBjYXNlIENvbnN0cnVjdDoKICAgICAgICAg
Y2FsbFR5cGUgPSBDYWxsTGlua0luZm86OkNvbnN0cnVjdDsKICAgICAgICAgYnJlYWs7CkBAIC02
NDEsNiArNjUyLDE2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUp
CiAgICAgICAgIGNhbGxUeXBlID0gQ2FsbExpbmtJbmZvOjpDYWxsVmFyYXJnczsKICAgICAgICAg
aXNWYXJhcmdzID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBUYWlsQ2FsbFZhcmFy
Z3M6CisgICAgICAgIGNhbGxUeXBlID0gQ2FsbExpbmtJbmZvOjpUYWlsQ2FsbFZhcmFyZ3M7Cisg
ICAgICAgIGlzVmFyYXJncyA9IHRydWU7CisgICAgICAgIGlzVGFpbCA9IHRydWU7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgVGFpbENhbGxWYXJhcmdzSW5saW5lZENhbGxlcjoKKyAgICAgICAg
Y2FsbFR5cGUgPSBDYWxsTGlua0luZm86OkNhbGxWYXJhcmdzOworICAgICAgICBpc1ZhcmFyZ3Mg
PSB0cnVlOworICAgICAgICBpc0VtdWxhdGVkVGFpbCA9IHRydWU7CisgICAgICAgIGJyZWFrOwog
ICAgIGNhc2UgQ29uc3RydWN0VmFyYXJnczoKICAgICAgICAgY2FsbFR5cGUgPSBDYWxsTGlua0lu
Zm86OkNvbnN0cnVjdFZhcmFyZ3M7CiAgICAgICAgIGlzVmFyYXJncyA9IHRydWU7CkBAIC02NDks
NiArNjcwLDE2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUpCiAg
ICAgICAgIGNhbGxUeXBlID0gQ2FsbExpbmtJbmZvOjpDYWxsVmFyYXJnczsKICAgICAgICAgaXNG
b3J3YXJkVmFyYXJncyA9IHRydWU7CiAgICAgICAgIGJyZWFrOworICAgIGNhc2UgVGFpbENhbGxG
b3J3YXJkVmFyYXJnczoKKyAgICAgICAgY2FsbFR5cGUgPSBDYWxsTGlua0luZm86OlRhaWxDYWxs
VmFyYXJnczsKKyAgICAgICAgaXNUYWlsID0gdHJ1ZTsKKyAgICAgICAgaXNGb3J3YXJkVmFyYXJn
cyA9IHRydWU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVGFpbENhbGxGb3J3YXJkVmFyYXJn
c0lubGluZWRDYWxsZXI6CisgICAgICAgIGNhbGxUeXBlID0gQ2FsbExpbmtJbmZvOjpDYWxsVmFy
YXJnczsKKyAgICAgICAgaXNFbXVsYXRlZFRhaWwgPSB0cnVlOworICAgICAgICBpc0ZvcndhcmRW
YXJhcmdzID0gdHJ1ZTsKKyAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDb25zdHJ1Y3RGb3J3YXJk
VmFyYXJnczoKICAgICAgICAgY2FsbFR5cGUgPSBDYWxsTGlua0luZm86OkNvbnN0cnVjdFZhcmFy
Z3M7CiAgICAgICAgIGlzRm9yd2FyZFZhcmFyZ3MgPSB0cnVlOwpAQCAtNjU5LDYgKzY5MCw5IEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUpCiAgICAgfQogCiAgICAg
RWRnZSBjYWxsZWVFZGdlID0gbV9qaXQuZ3JhcGgoKS5jaGlsZChub2RlLCAwKTsKKyAgICBHUFJS
ZWcgY2FsbGVlVGFnR1BSOworICAgIEdQUlJlZyBjYWxsZWVQYXlsb2FkR1BSOworICAgIENhbGxG
cmFtZVNodWZmbGVEYXRhIHNodWZmbGVEYXRhOwogICAgIAogICAgIC8vIEdvdHRhIGxvYWQgdGhl
IGFyZ3VtZW50cyBzb21laG93LiBWYXJhcmdzIGlzIHRyaWNraWVyLgogICAgIGlmIChpc1ZhcmFy
Z3MgfHwgaXNGb3J3YXJkVmFyYXJncykgewpAQCAtNzUzLDI4ICs3ODcsNDkgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZSkKICAgICAgICAgLy8gcmVjZWl2ZXIgKG1l
dGhvZCBjYWxsKS4gc3Vic2VxdWVudCBjaGlsZHJlbiBhcmUgdGhlIGFyZ3VtZW50cy4KICAgICAg
ICAgaW50IG51bVBhc3NlZEFyZ3MgPSBub2RlLT5udW1DaGlsZHJlbigpIC0gMTsKIAotICAgICAg
ICBtX2ppdC5zdG9yZTMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIobnVtUGFzc2VkQXJn
cyksIG1faml0LmNhbGxlZUZyYW1lUGF5bG9hZFNsb3QoSlNTdGFjazo6QXJndW1lbnRDb3VudCkp
OworICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBUYWlsQ2FsbCkgeworICAgICAgICAgICAgSlNW
YWx1ZU9wZXJhbmQgY2FsbGVlKHRoaXMsIGNhbGxlZUVkZ2UpOworICAgICAgICAgICAgY2FsbGVl
VGFnR1BSID0gY2FsbGVlLnRhZ0dQUigpOworICAgICAgICAgICAgY2FsbGVlUGF5bG9hZEdQUiA9
IGNhbGxlZS5wYXlsb2FkR1BSKCk7CisgICAgICAgICAgICB1c2UoY2FsbGVlRWRnZSk7CisKKyAg
ICAgICAgICAgIHNodWZmbGVEYXRhLm51bUxvY2FscyA9IG1faml0LmdyYXBoKCkuZnJhbWVSZWdp
c3RlckNvdW50KCk7CisgICAgICAgICAgICBzaHVmZmxlRGF0YS5jYWxsZWUgPSBWYWx1ZVJlY292
ZXJ5OjppblBhaXIoY2FsbGVlVGFnR1BSLCBjYWxsZWVQYXlsb2FkR1BSKTsKKyAgICAgICAgICAg
IHNodWZmbGVEYXRhLmFyZ3MucmVzaXplKG51bVBhc3NlZEFyZ3MpOworCisgICAgICAgICAgICBm
b3IgKGludCBpID0gMDsgaSA8IG51bVBhc3NlZEFyZ3M7ICsraSkgeworICAgICAgICAgICAgICAg
IEVkZ2UgYXJnRWRnZSA9IG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwgaSArIDEpOwor
ICAgICAgICAgICAgICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gZ2VuZXJhdGlvbkluZm8oYXJn
RWRnZS5ub2RlKCkpOworICAgICAgICAgICAgICAgIHVzZShhcmdFZGdlKTsKKyAgICAgICAgICAg
ICAgICBzaHVmZmxlRGF0YS5hcmdzW2ldID0gaW5mby5yZWNvdmVyeShhcmdFZGdlLT52aXJ0dWFs
UmVnaXN0ZXIoKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICBtX2ppdC5zdG9yZTMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIobnVtUGFzc2VkQXJn
cyksIG1faml0LmNhbGxlZUZyYW1lUGF5bG9hZFNsb3QoSlNTdGFjazo6QXJndW1lbnRDb3VudCkp
OwogICAgICAgICAKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1QYXNzZWRBcmdzOyBp
KyspIHsKLSAgICAgICAgICAgIEVkZ2UgYXJnRWRnZSA9IG1faml0LmdyYXBoKCkubV92YXJBcmdD
aGlsZHJlbltub2RlLT5maXJzdENoaWxkKCkgKyAxICsgaV07Ci0gICAgICAgICAgICBKU1ZhbHVl
T3BlcmFuZCBhcmcodGhpcywgYXJnRWRnZSk7Ci0gICAgICAgICAgICBHUFJSZWcgYXJnVGFnR1BS
ID0gYXJnLnRhZ0dQUigpOwotICAgICAgICAgICAgR1BSUmVnIGFyZ1BheWxvYWRHUFIgPSBhcmcu
cGF5bG9hZEdQUigpOwotICAgICAgICAgICAgdXNlKGFyZ0VkZ2UpOworICAgICAgICAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBudW1QYXNzZWRBcmdzOyBpKyspIHsKKyAgICAgICAgICAgICAgICBF
ZGdlIGFyZ0VkZ2UgPSBtX2ppdC5ncmFwaCgpLm1fdmFyQXJnQ2hpbGRyZW5bbm9kZS0+Zmlyc3RD
aGlsZCgpICsgMSArIGldOworICAgICAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIGFyZyh0aGlz
LCBhcmdFZGdlKTsKKyAgICAgICAgICAgICAgICBHUFJSZWcgYXJnVGFnR1BSID0gYXJnLnRhZ0dQ
UigpOworICAgICAgICAgICAgICAgIEdQUlJlZyBhcmdQYXlsb2FkR1BSID0gYXJnLnBheWxvYWRH
UFIoKTsKKyAgICAgICAgICAgICAgICB1c2UoYXJnRWRnZSk7CiAgICAgICAgICAgICAKLSAgICAg
ICAgICAgIG1faml0LnN0b3JlMzIoYXJnVGFnR1BSLCBtX2ppdC5jYWxsZWVBcmd1bWVudFRhZ1Ns
b3QoaSkpOwotICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihhcmdQYXlsb2FkR1BSLCBtX2ppdC5j
YWxsZWVBcmd1bWVudFBheWxvYWRTbG90KGkpKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5zdG9y
ZTMyKGFyZ1RhZ0dQUiwgbV9qaXQuY2FsbGVlQXJndW1lbnRUYWdTbG90KGkpKTsKKyAgICAgICAg
ICAgICAgICBtX2ppdC5zdG9yZTMyKGFyZ1BheWxvYWRHUFIsIG1faml0LmNhbGxlZUFyZ3VtZW50
UGF5bG9hZFNsb3QoaSkpOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCi0gICAg
SlNWYWx1ZU9wZXJhbmQgY2FsbGVlKHRoaXMsIGNhbGxlZUVkZ2UpOwotICAgIEdQUlJlZyBjYWxs
ZWVUYWdHUFIgPSBjYWxsZWUudGFnR1BSKCk7Ci0gICAgR1BSUmVnIGNhbGxlZVBheWxvYWRHUFIg
PSBjYWxsZWUucGF5bG9hZEdQUigpOwotICAgIHVzZShjYWxsZWVFZGdlKTsKLSAgICBtX2ppdC5z
dG9yZTMyKGNhbGxlZVBheWxvYWRHUFIsIG1faml0LmNhbGxlZUZyYW1lUGF5bG9hZFNsb3QoSlNT
dGFjazo6Q2FsbGVlKSk7Ci0gICAgbV9qaXQuc3RvcmUzMihjYWxsZWVUYWdHUFIsIG1faml0LmNh
bGxlZUZyYW1lVGFnU2xvdChKU1N0YWNrOjpDYWxsZWUpKTsKKyAgICBpZiAobm9kZS0+b3AoKSAh
PSBUYWlsQ2FsbCkgeworICAgICAgICBKU1ZhbHVlT3BlcmFuZCBjYWxsZWUodGhpcywgY2FsbGVl
RWRnZSk7CisgICAgICAgIGNhbGxlZVRhZ0dQUiA9IGNhbGxlZS50YWdHUFIoKTsKKyAgICAgICAg
Y2FsbGVlUGF5bG9hZEdQUiA9IGNhbGxlZS5wYXlsb2FkR1BSKCk7CisgICAgICAgIHVzZShjYWxs
ZWVFZGdlKTsKKyAgICAgICAgbV9qaXQuc3RvcmUzMihjYWxsZWVQYXlsb2FkR1BSLCBtX2ppdC5j
YWxsZWVGcmFtZVBheWxvYWRTbG90KEpTU3RhY2s6OkNhbGxlZSkpOworICAgICAgICBtX2ppdC5z
dG9yZTMyKGNhbGxlZVRhZ0dQUiwgbV9qaXQuY2FsbGVlRnJhbWVUYWdTbG90KEpTU3RhY2s6OkNh
bGxlZSkpOwogCi0gICAgZmx1c2hSZWdpc3RlcnMoKTsKKyAgICAgICAgaWYgKCFpc1RhaWwpCisg
ICAgICAgICAgICBmbHVzaFJlZ2lzdGVycygpOworICAgIH0KIAogICAgIEdQUkZsdXNoZWRDYWxs
UmVzdWx0IHJlc3VsdFBheWxvYWQodGhpcyk7CiAgICAgR1BSRmx1c2hlZENhbGxSZXN1bHQyIHJl
c3VsdFRhZyh0aGlzKTsKQEAgLTc4NCw0NyArODM5LDc5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmVtaXRDYWxsKE5vZGUqIG5vZGUpCiAgICAgSklUQ29tcGlsZXI6OkRhdGFMYWJlbFB0ciB0YXJn
ZXRUb0NoZWNrOwogICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBzbG93UGF0aDsKIAotICAgIG1f
aml0LmVtaXRTdG9yZUNvZGVPcmlnaW4obm9kZS0+b3JpZ2luLnNlbWFudGljKTsKKyAgICBDb2Rl
T3JpZ2luIHN0YXRpY09yaWdpbiA9IG5vZGUtPm9yaWdpbi5zZW1hbnRpYzsKKyAgICBBU1NFUlQo
IWlzVGFpbCB8fCAhc3RhdGljT3JpZ2luLmlubGluZUNhbGxGcmFtZSB8fCAhc3RhdGljT3JpZ2lu
LmlubGluZUNhbGxGcmFtZS0+Z2V0Q2FsbGVyU2tpcHBpbmdEZWFkRnJhbWVzKCkpOworICAgIEFT
U0VSVCghaXNFbXVsYXRlZFRhaWwgfHwgKHN0YXRpY09yaWdpbi5pbmxpbmVDYWxsRnJhbWUgJiYg
c3RhdGljT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+Z2V0Q2FsbGVyU2tpcHBpbmdEZWFkRnJhbWVz
KCkpKTsKKyAgICBDb2RlT3JpZ2luIGR5bmFtaWNPcmlnaW4gPQorICAgICAgICBpc0VtdWxhdGVk
VGFpbCA/ICpzdGF0aWNPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5nZXRDYWxsZXJTa2lwcGluZ0Rl
YWRGcmFtZXMoKSA6IHN0YXRpY09yaWdpbjsKKworICAgIG1faml0LmVtaXRTdG9yZUNvZGVPcmln
aW4oZHluYW1pY09yaWdpbik7CiAgICAgCiAgICAgQ2FsbExpbmtJbmZvKiBpbmZvID0gbV9qaXQu
Y29kZUJsb2NrKCktPmFkZENhbGxMaW5rSW5mbygpOwogCi0gICAgc2xvd1BhdGguYXBwZW5kKG1f
aml0LmJyYW5jaElmTm90Q2VsbChjYWxsZWUuanNWYWx1ZVJlZ3MoKSkpOworICAgIHNsb3dQYXRo
LmFwcGVuZChtX2ppdC5icmFuY2hJZk5vdENlbGwoSlNWYWx1ZVJlZ3MoY2FsbGVlVGFnR1BSLCBj
YWxsZWVQYXlsb2FkR1BSKSkpOwogICAgIHNsb3dQYXRoLmFwcGVuZChtX2ppdC5icmFuY2hQdHJX
aXRoUGF0Y2goTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBjYWxsZWVQYXlsb2FkR1BSLCB0YXJn
ZXRUb0NoZWNrKSk7CiAKLSAgICBKSVRDb21waWxlcjo6Q2FsbCBmYXN0Q2FsbCA9IG1faml0Lm5l
YXJDYWxsKCk7CisgICAgaWYgKGlzVGFpbCkgeworICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBU
YWlsQ2FsbCkgeworICAgICAgICAgICAgaW5mby0+c2V0RnJhbWVTaHVmZmxlRGF0YShzaHVmZmxl
RGF0YSk7CisgICAgICAgICAgICBDYWxsRnJhbWVTaHVmZmxlcihtX2ppdCwgc2h1ZmZsZURhdGEp
LnByZXBhcmVGb3JUYWlsQ2FsbCgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbV9q
aXQuZW1pdFJlc3RvcmVDYWxsZWVTYXZlUmVnaXN0ZXJzKCk7CisgICAgICAgICAgICBtX2ppdC5w
cmVwYXJlRm9yVGFpbENhbGxTbG93KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBKSVRDb21w
aWxlcjo6Q2FsbCBmYXN0Q2FsbCA9IGlzVGFpbCA/IG1faml0Lm5lYXJUYWlsQ2FsbCgpIDogbV9q
aXQubmVhckNhbGwoKTsKIAogICAgIEpJVENvbXBpbGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1w
KCk7CiAKICAgICBzbG93UGF0aC5saW5rKCZtX2ppdCk7CiAKLSAgICAvLyBDYWxsZWUgcGF5bG9h
ZCBuZWVkcyB0byBiZSBpbiByZWdUMCwgdGFnIGluIHJlZ1QxCi0gICAgaWYgKGNhbGxlZVRhZ0dQ
UiA9PSBHUFJJbmZvOjpyZWdUMCkgewotICAgICAgICBpZiAoY2FsbGVlUGF5bG9hZEdQUiA9PSBH
UFJJbmZvOjpyZWdUMSkKLSAgICAgICAgICAgIG1faml0LnN3YXAoR1BSSW5mbzo6cmVnVDEsIEdQ
UkluZm86OnJlZ1QwKTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBtX2ppdC5tb3ZlKGNh
bGxlZVRhZ0dQUiwgR1BSSW5mbzo6cmVnVDEpOworICAgIGlmIChub2RlLT5vcCgpID09IFRhaWxD
YWxsKSB7CisgICAgICAgIENhbGxGcmFtZVNodWZmbGVyIGNhbGxGcmFtZVNodWZmbGVyKG1faml0
LCBzaHVmZmxlRGF0YSk7CisgICAgICAgIGNhbGxGcmFtZVNodWZmbGVyLnNldENhbGxlZUpTVmFs
dWVSZWdzKEpTVmFsdWVSZWdzKAorICAgICAgICAgICAgR1BSSW5mbzo6cmVnVDEsIEdQUkluZm86
OnJlZ1QwKSk7CisgICAgICAgIGNhbGxGcmFtZVNodWZmbGVyLnByZXBhcmVGb3JTbG93UGF0aCgp
OworICAgIH0gZWxzZSB7CisgICAgICAgIC8vIENhbGxlZSBwYXlsb2FkIG5lZWRzIHRvIGJlIGlu
IHJlZ1QwLCB0YWcgaW4gcmVnVDEKKyAgICAgICAgaWYgKGNhbGxlZVRhZ0dQUiA9PSBHUFJJbmZv
OjpyZWdUMCkgeworICAgICAgICAgICAgaWYgKGNhbGxlZVBheWxvYWRHUFIgPT0gR1BSSW5mbzo6
cmVnVDEpCisgICAgICAgICAgICAgICAgbV9qaXQuc3dhcChHUFJJbmZvOjpyZWdUMSwgR1BSSW5m
bzo6cmVnVDApOworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgbV9qaXQubW92
ZShjYWxsZWVUYWdHUFIsIEdQUkluZm86OnJlZ1QxKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5t
b3ZlKGNhbGxlZVBheWxvYWRHUFIsIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIG1faml0Lm1vdmUoY2FsbGVlUGF5bG9hZEdQUiwg
R1BSSW5mbzo6cmVnVDApOworICAgICAgICAgICAgbV9qaXQubW92ZShjYWxsZWVUYWdHUFIsIEdQ
UkluZm86OnJlZ1QxKTsKICAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIG1faml0Lm1v
dmUoY2FsbGVlUGF5bG9hZEdQUiwgR1BSSW5mbzo6cmVnVDApOwotICAgICAgICBtX2ppdC5tb3Zl
KGNhbGxlZVRhZ0dQUiwgR1BSSW5mbzo6cmVnVDEpOworCisgICAgICAgIGlmIChpc1RhaWwpCisg
ICAgICAgICAgICBtX2ppdC5lbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAgICAgfQorCiAgICAg
bV9qaXQubW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihpbmZvKSwgR1BSSW5mbzo6
cmVnVDIpOwogICAgIEpJVENvbXBpbGVyOjpDYWxsIHNsb3dDYWxsID0gbV9qaXQubmVhckNhbGwo
KTsKIAogICAgIGRvbmUubGluaygmbV9qaXQpOwogCi0gICAgbV9qaXQuc2V0dXBSZXN1bHRzKHJl
c3VsdFBheWxvYWRHUFIsIHJlc3VsdFRhZ0dQUik7CisgICAgaWYgKGlzVGFpbCkKKyAgICAgICAg
bV9qaXQuYWJvcnRXaXRoUmVhc29uKEpJVERpZFJldHVybkZyb21UYWlsQ2FsbCk7CisgICAgZWxz
ZSB7CisgICAgICAgIG1faml0LnNldHVwUmVzdWx0cyhyZXN1bHRQYXlsb2FkR1BSLCByZXN1bHRU
YWdHUFIpOworCisgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0VGFnR1BSLCByZXN1bHRQYXls
b2FkR1BSLCBub2RlLCBEYXRhRm9ybWF0SlMsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7
CiAKLSAgICBqc1ZhbHVlUmVzdWx0KHJlc3VsdFRhZ0dQUiwgcmVzdWx0UGF5bG9hZEdQUiwgbm9k
ZSwgRGF0YUZvcm1hdEpTLCBVc2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOworICAgICAgICAv
LyBBZnRlciB0aGUgY2FsbHMgYXJlIGRvbmUsIHdlIG5lZWQgdG8gcmVlc3RhYmxpc2ggb3VyIHN0
YWNrCisgICAgICAgIC8vIHBvaW50ZXIuIFdlIHJlbHkgb24gdGhpcyBmb3IgdmFyYXJncyBjYWxs
cywgY2FsbHMgd2l0aCBhcml0eQorICAgICAgICAvLyBtaXNtYXRjaCAodGhlIGNhbGxmcmFtZSBp
cyBzbGlkZWQpIGFuZCB0YWlsIGNhbGxzLgorICAgICAgICBtX2ppdC5hZGRQdHIoVHJ1c3RlZElt
bTMyKG1faml0LmdyYXBoKCkuc3RhY2tQb2ludGVyT2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIp
KSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEpJVENvbXBpbGVyOjpzdGFja1BvaW50ZXJS
ZWdpc3Rlcik7CisgICAgfQogCiAgICAgaW5mby0+c2V0VXBDYWxsKGNhbGxUeXBlLCBub2RlLT5v
cmlnaW4uc2VtYW50aWMsIGNhbGxlZVBheWxvYWRHUFIpOwogICAgIG1faml0LmFkZEpTQ2FsbChm
YXN0Q2FsbCwgc2xvd0NhbGwsIHRhcmdldFRvQ2hlY2ssIGluZm8pOwotICAgIAotICAgIC8vIEFm
dGVyIHRoZSBjYWxscyBhcmUgZG9uZSwgd2UgbmVlZCB0byByZWVzdGFibGlzaCBvdXIgc3RhY2sK
LSAgICAvLyBwb2ludGVyLiBXZSByZWx5IG9uIHRoaXMgZm9yIHZhcmFyZ3MgY2FsbHMsIGNhbGxz
IHdpdGggYXJpdHkKLSAgICAvLyBtaXNtYXRjaCAodGhlIGNhbGxmcmFtZSBpcyBzbGlkZWQpIGFu
ZCB0YWlsIGNhbGxzLgotICAgIG1faml0LmFkZFB0cihUcnVzdGVkSW1tMzIobV9qaXQuZ3JhcGgo
KS5zdGFja1BvaW50ZXJPZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpLCBHUFJJbmZvOjpjYWxs
RnJhbWVSZWdpc3RlciwgSklUQ29tcGlsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKwogfQog
CiB0ZW1wbGF0ZTxib29sIHN0cmljdD4KQEAgLTQyODQsMTAgKzQzNzEsMTYgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBicmVhazsKIAogICAgIGNh
c2UgQ2FsbDoKKyAgICBjYXNlIFRhaWxDYWxsOgorICAgIGNhc2UgVGFpbENhbGxJbmxpbmVkQ2Fs
bGVyOgogICAgIGNhc2UgQ29uc3RydWN0OgogICAgIGNhc2UgQ2FsbFZhcmFyZ3M6Ci0gICAgY2Fz
ZSBDYWxsRm9yd2FyZFZhcmFyZ3M6CisgICAgY2FzZSBUYWlsQ2FsbFZhcmFyZ3M6CisgICAgY2Fz
ZSBUYWlsQ2FsbFZhcmFyZ3NJbmxpbmVkQ2FsbGVyOgogICAgIGNhc2UgQ29uc3RydWN0VmFyYXJn
czoKKyAgICBjYXNlIENhbGxGb3J3YXJkVmFyYXJnczoKKyAgICBjYXNlIFRhaWxDYWxsRm9yd2Fy
ZFZhcmFyZ3M6CisgICAgY2FzZSBUYWlsQ2FsbEZvcndhcmRWYXJhcmdzSW5saW5lZENhbGxlcjoK
ICAgICBjYXNlIENvbnN0cnVjdEZvcndhcmRWYXJhcmdzOgogICAgICAgICBlbWl0Q2FsbChub2Rl
KTsKICAgICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVDY0LmNwcAppbmRleCAxMWVjN2E1NDNlYmJlNDg2MzViY2IxYTY2YjBkYTYy
ODc1NGVjNGFiLi4wNjZiZDlhYTA3NjU3MDk0NjE5Mjk0YWM2ZjE3ZmI5ZjgxNjUwYmI5IDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3Bw
CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAK
QEAgLTI5LDYgKzI5LDcgQEAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAogI2luY2x1ZGUgIkFycmF5
UHJvdG90eXBlLmgiCisjaW5jbHVkZSAiQ2FsbEZyYW1lU2h1ZmZsZXIuaCIKICNpbmNsdWRlICJE
RkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oIgogI2luY2x1ZGUgIkRGR0NhbGxBcnJheUFs
bG9jYXRvclNsb3dQYXRoR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiREZHT3BlcmF0aW9ucy5oIgpA
QCAtNjA5LDEwICs2MTAsMjAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSog
bm9kZSkKICAgICBDYWxsTGlua0luZm86OkNhbGxUeXBlIGNhbGxUeXBlOwogICAgIGJvb2wgaXNW
YXJhcmdzID0gZmFsc2U7CiAgICAgYm9vbCBpc0ZvcndhcmRWYXJhcmdzID0gZmFsc2U7CisgICAg
Ym9vbCBpc1RhaWwgPSBmYWxzZTsKKyAgICBib29sIGlzRW11bGF0ZWRUYWlsID0gZmFsc2U7CiAg
ICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgY2FzZSBDYWxsOgogICAgICAgICBjYWxsVHlw
ZSA9IENhbGxMaW5rSW5mbzo6Q2FsbDsKICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBUYWlsQ2Fs
bDoKKyAgICAgICAgY2FsbFR5cGUgPSBDYWxsTGlua0luZm86OlRhaWxDYWxsOworICAgICAgICBp
c1RhaWwgPSB0cnVlOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFRhaWxDYWxsSW5saW5lZENh
bGxlcjoKKyAgICAgICAgY2FsbFR5cGUgPSBDYWxsTGlua0luZm86OkNhbGw7CisgICAgICAgIGlz
RW11bGF0ZWRUYWlsID0gdHJ1ZTsKKyAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDb25zdHJ1Y3Q6
CiAgICAgICAgIGNhbGxUeXBlID0gQ2FsbExpbmtJbmZvOjpDb25zdHJ1Y3Q7CiAgICAgICAgIGJy
ZWFrOwpAQCAtNjIwLDYgKzYzMSwxNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChO
b2RlKiBub2RlKQogICAgICAgICBjYWxsVHlwZSA9IENhbGxMaW5rSW5mbzo6Q2FsbFZhcmFyZ3M7
CiAgICAgICAgIGlzVmFyYXJncyA9IHRydWU7CiAgICAgICAgIGJyZWFrOworICAgIGNhc2UgVGFp
bENhbGxWYXJhcmdzOgorICAgICAgICBjYWxsVHlwZSA9IENhbGxMaW5rSW5mbzo6VGFpbENhbGxW
YXJhcmdzOworICAgICAgICBpc1ZhcmFyZ3MgPSB0cnVlOworICAgICAgICBpc1RhaWwgPSB0cnVl
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFRhaWxDYWxsVmFyYXJnc0lubGluZWRDYWxsZXI6
CisgICAgICAgIGNhbGxUeXBlID0gQ2FsbExpbmtJbmZvOjpDYWxsVmFyYXJnczsKKyAgICAgICAg
aXNWYXJhcmdzID0gdHJ1ZTsKKyAgICAgICAgaXNFbXVsYXRlZFRhaWwgPSB0cnVlOworICAgICAg
ICBicmVhazsKICAgICBjYXNlIENvbnN0cnVjdFZhcmFyZ3M6CiAgICAgICAgIGNhbGxUeXBlID0g
Q2FsbExpbmtJbmZvOjpDb25zdHJ1Y3RWYXJhcmdzOwogICAgICAgICBpc1ZhcmFyZ3MgPSB0cnVl
OwpAQCAtNjMyLDEyICs2NTMsMjMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9k
ZSogbm9kZSkKICAgICAgICAgY2FsbFR5cGUgPSBDYWxsTGlua0luZm86OkNvbnN0cnVjdFZhcmFy
Z3M7CiAgICAgICAgIGlzRm9yd2FyZFZhcmFyZ3MgPSB0cnVlOwogICAgICAgICBicmVhazsKKyAg
ICBjYXNlIFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3M6CisgICAgICAgIGNhbGxUeXBlID0gQ2FsbExp
bmtJbmZvOjpUYWlsQ2FsbFZhcmFyZ3M7CisgICAgICAgIGlzVGFpbCA9IHRydWU7CisgICAgICAg
IGlzRm9yd2FyZFZhcmFyZ3MgPSB0cnVlOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFRhaWxD
YWxsRm9yd2FyZFZhcmFyZ3NJbmxpbmVkQ2FsbGVyOgorICAgICAgICBjYWxsVHlwZSA9IENhbGxM
aW5rSW5mbzo6Q2FsbFZhcmFyZ3M7CisgICAgICAgIGlzRW11bGF0ZWRUYWlsID0gdHJ1ZTsKKyAg
ICAgICAgaXNGb3J3YXJkVmFyYXJncyA9IHRydWU7CisgICAgICAgIGJyZWFrOwogICAgIGRlZmF1
bHQ6CiAgICAgICAgIERGR19DUkFTSChtX2ppdC5ncmFwaCgpLCBub2RlLCAiYmFkIG5vZGUgdHlw
ZSIpOwogICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICBFZGdlIGNhbGxlZUVkZ2UgPSBtX2pp
dC5ncmFwaCgpLmNoaWxkKG5vZGUsIDApOworICAgIEdQUlJlZyBjYWxsZWVHUFI7CisgICAgQ2Fs
bEZyYW1lU2h1ZmZsZURhdGEgc2h1ZmZsZURhdGE7CiAgICAgCiAgICAgLy8gR290dGEgbG9hZCB0
aGUgYXJndW1lbnRzIHNvbWVob3cuIFZhcmFyZ3MgaXMgdHJpY2tpZXIuCiAgICAgaWYgKGlzVmFy
YXJncyB8fCBpc0ZvcndhcmRWYXJhcmdzKSB7CkBAIC03MjcsNjAgKzc1OSwxMTEgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZSkKICAgICAgICAgLy8gYXJndW1lbnRz
LgogICAgICAgICBpbnQgbnVtUGFzc2VkQXJncyA9IG5vZGUtPm51bUNoaWxkcmVuKCkgLSAxOwog
Ci0gICAgICAgIG1faml0LnN0b3JlMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihudW1Q
YXNzZWRBcmdzKSwgSklUQ29tcGlsZXI6OmNhbGxlZUZyYW1lUGF5bG9hZFNsb3QoSlNTdGFjazo6
QXJndW1lbnRDb3VudCkpOwotICAgIAotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bVBh
c3NlZEFyZ3M7IGkrKykgewotICAgICAgICAgICAgRWRnZSBhcmdFZGdlID0gbV9qaXQuZ3JhcGgo
KS5tX3ZhckFyZ0NoaWxkcmVuW25vZGUtPmZpcnN0Q2hpbGQoKSArIDEgKyBpXTsKLSAgICAgICAg
ICAgIEpTVmFsdWVPcGVyYW5kIGFyZyh0aGlzLCBhcmdFZGdlKTsKLSAgICAgICAgICAgIEdQUlJl
ZyBhcmdHUFIgPSBhcmcuZ3ByKCk7Ci0gICAgICAgICAgICB1c2UoYXJnRWRnZSk7Ci0gICAgICAg
IAotICAgICAgICAgICAgbV9qaXQuc3RvcmU2NChhcmdHUFIsIEpJVENvbXBpbGVyOjpjYWxsZWVB
cmd1bWVudFNsb3QoaSkpOworICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBUYWlsQ2FsbCkgewor
ICAgICAgICAgICAgRWRnZSBjYWxsZWVFZGdlID0gbV9qaXQuZ3JhcGgoKS5jaGlsZChub2RlLCAw
KTsKKyAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIGNhbGxlZSh0aGlzLCBjYWxsZWVFZGdlKTsK
KyAgICAgICAgICAgIGNhbGxlZUdQUiA9IGNhbGxlZS5ncHIoKTsKKyAgICAgICAgICAgIGNhbGxl
ZS51c2UoKTsKKworICAgICAgICAgICAgc2h1ZmZsZURhdGEubnVtTG9jYWxzID0gbV9qaXQuZ3Jh
cGgoKS5mcmFtZVJlZ2lzdGVyQ291bnQoKTsKKyAgICAgICAgICAgIHNodWZmbGVEYXRhLmNhbGxl
ZSA9IFZhbHVlUmVjb3Zlcnk6OmluR1BSKGNhbGxlZUdQUiwgRGF0YUZvcm1hdEpTKTsKKyAgICAg
ICAgICAgIHNodWZmbGVEYXRhLmFyZ3MucmVzaXplKG51bVBhc3NlZEFyZ3MpOworICAgICAgICAg
ICAgCisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bVBhc3NlZEFyZ3M7ICsraSkg
eworICAgICAgICAgICAgICAgIEVkZ2UgYXJnRWRnZSA9IG1faml0LmdyYXBoKCkudmFyQXJnQ2hp
bGQobm9kZSwgaSArIDEpOworICAgICAgICAgICAgICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0g
Z2VuZXJhdGlvbkluZm8oYXJnRWRnZS5ub2RlKCkpOworICAgICAgICAgICAgICAgIHVzZShhcmdF
ZGdlKTsKKyAgICAgICAgICAgICAgICBzaHVmZmxlRGF0YS5hcmdzW2ldID0gaW5mby5yZWNvdmVy
eShhcmdFZGdlLT52aXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIHNodWZmbGVEYXRhLnNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycyhtX2ppdC5jb2RlQmxvY2so
KSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tMzIobnVtUGFzc2VkQXJncyksIEpJVENvbXBpbGVyOjpjYWxsZWVG
cmFtZVBheWxvYWRTbG90KEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpKTsKKworICAgICAgICAgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBudW1QYXNzZWRBcmdzOyBpKyspIHsKKyAgICAgICAgICAgICAg
ICBFZGdlIGFyZ0VkZ2UgPSBtX2ppdC5ncmFwaCgpLm1fdmFyQXJnQ2hpbGRyZW5bbm9kZS0+Zmly
c3RDaGlsZCgpICsgMSArIGldOworICAgICAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIGFyZyh0
aGlzLCBhcmdFZGdlKTsKKyAgICAgICAgICAgICAgICBHUFJSZWcgYXJnR1BSID0gYXJnLmdwcigp
OworICAgICAgICAgICAgICAgIHVzZShhcmdFZGdlKTsKKworICAgICAgICAgICAgICAgIG1faml0
LnN0b3JlNjQoYXJnR1BSLCBKSVRDb21waWxlcjo6Y2FsbGVlQXJndW1lbnRTbG90KGkpKTsKKyAg
ICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIAotICAgIEpTVmFsdWVPcGVyYW5kIGNhbGxl
ZSh0aGlzLCBjYWxsZWVFZGdlKTsKLSAgICBHUFJSZWcgY2FsbGVlR1BSID0gY2FsbGVlLmdwcigp
OwotICAgIGNhbGxlZS51c2UoKTsKLSAgICBtX2ppdC5zdG9yZTY0KGNhbGxlZUdQUiwgSklUQ29t
cGlsZXI6OmNhbGxlZUZyYW1lU2xvdChKU1N0YWNrOjpDYWxsZWUpKTsKLSAgICAKLSAgICBmbHVz
aFJlZ2lzdGVycygpOworICAgIGlmIChub2RlLT5vcCgpICE9IFRhaWxDYWxsKSB7CisgICAgICAg
IEVkZ2UgY2FsbGVlRWRnZSA9IG1faml0LmdyYXBoKCkuY2hpbGQobm9kZSwgMCk7CisgICAgICAg
IEpTVmFsdWVPcGVyYW5kIGNhbGxlZSh0aGlzLCBjYWxsZWVFZGdlKTsKKyAgICAgICAgY2FsbGVl
R1BSID0gY2FsbGVlLmdwcigpOworICAgICAgICBjYWxsZWUudXNlKCk7CisgICAgICAgIG1faml0
LnN0b3JlNjQoY2FsbGVlR1BSLCBKSVRDb21waWxlcjo6Y2FsbGVlRnJhbWVTbG90KEpTU3RhY2s6
OkNhbGxlZSkpOwogCi0gICAgR1BSRmx1c2hlZENhbGxSZXN1bHQgcmVzdWx0KHRoaXMpOwotICAg
IEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CisgICAgICAgIGZsdXNoUmVnaXN0ZXJz
KCk7CisgICAgfQogCi0gICAgSklUQ29tcGlsZXI6OkRhdGFMYWJlbFB0ciB0YXJnZXRUb0NoZWNr
OwotICAgIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQYXRoOworICAgIENvZGVPcmlnaW4gc3RhdGlj
T3JpZ2luID0gbm9kZS0+b3JpZ2luLnNlbWFudGljOworICAgIEFTU0VSVCghaXNUYWlsIHx8ICFz
dGF0aWNPcmlnaW4uaW5saW5lQ2FsbEZyYW1lIHx8ICFzdGF0aWNPcmlnaW4uaW5saW5lQ2FsbEZy
YW1lLT5nZXRDYWxsZXJTa2lwcGluZ0RlYWRGcmFtZXMoKSk7CisgICAgQVNTRVJUKCFpc0VtdWxh
dGVkVGFpbCB8fCAoc3RhdGljT3JpZ2luLmlubGluZUNhbGxGcmFtZSAmJiBzdGF0aWNPcmlnaW4u
aW5saW5lQ2FsbEZyYW1lLT5nZXRDYWxsZXJTa2lwcGluZ0RlYWRGcmFtZXMoKSkpOworICAgIENv
ZGVPcmlnaW4gZHluYW1pY09yaWdpbiA9CisgICAgICAgIGlzRW11bGF0ZWRUYWlsID8gKnN0YXRp
Y09yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmdldENhbGxlclNraXBwaW5nRGVhZEZyYW1lcygpIDog
c3RhdGljT3JpZ2luOwogCi0gICAgbV9qaXQuZW1pdFN0b3JlQ29kZU9yaWdpbihub2RlLT5vcmln
aW4uc2VtYW50aWMpOworICAgIG1faml0LmVtaXRTdG9yZUNvZGVPcmlnaW4oZHluYW1pY09yaWdp
bik7CiAgICAgCiAgICAgQ2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gPSBtX2ppdC5jb2RlQmxv
Y2soKS0+YWRkQ2FsbExpbmtJbmZvKCk7Ci0gICAgCi0gICAgc2xvd1BhdGggPSBtX2ppdC5icmFu
Y2hQdHJXaXRoUGF0Y2goTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBjYWxsZWVHUFIsIHRhcmdl
dFRvQ2hlY2ssIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKDApKTsKIAotICAgIEpJVENv
bXBpbGVyOjpDYWxsIGZhc3RDYWxsID0gbV9qaXQubmVhckNhbGwoKTsKKyAgICBKSVRDb21waWxl
cjo6RGF0YUxhYmVsUHRyIHRhcmdldFRvQ2hlY2s7CisgICAgSklUQ29tcGlsZXI6Okp1bXAgc2xv
d1BhdGggPSBtX2ppdC5icmFuY2hQdHJXaXRoUGF0Y2goTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFs
LCBjYWxsZWVHUFIsIHRhcmdldFRvQ2hlY2ssIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRy
KDApKTsKKworICAgIGlmIChpc1RhaWwpIHsKKyAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gVGFp
bENhbGwpIHsKKyAgICAgICAgICAgIGNhbGxMaW5rSW5mby0+c2V0RnJhbWVTaHVmZmxlRGF0YShz
aHVmZmxlRGF0YSk7CisgICAgICAgICAgICBDYWxsRnJhbWVTaHVmZmxlcihtX2ppdCwgc2h1ZmZs
ZURhdGEpLnByZXBhcmVGb3JUYWlsQ2FsbCgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgbV9qaXQuZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOworICAgICAgICAgICAgbV9qaXQucHJl
cGFyZUZvclRhaWxDYWxsU2xvdygpOworICAgICAgICB9CisgICAgfQorCisgICAgSklUQ29tcGls
ZXI6OkNhbGwgZmFzdENhbGwgPSBpc1RhaWwgPyBtX2ppdC5uZWFyVGFpbENhbGwoKSA6IG1faml0
Lm5lYXJDYWxsKCk7CiAKICAgICBKSVRDb21waWxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgp
OwogICAgIAogICAgIHNsb3dQYXRoLmxpbmsoJm1faml0KTsKLSAgICAKLSAgICBtX2ppdC5tb3Zl
KGNhbGxlZUdQUiwgR1BSSW5mbzo6cmVnVDApOyAvLyBDYWxsZWUgbmVlZHMgdG8gYmUgaW4gcmVn
VDAKKworICAgIGlmIChub2RlLT5vcCgpID09IFRhaWxDYWxsKSB7CisgICAgICAgIENhbGxGcmFt
ZVNodWZmbGVyIGNhbGxGcmFtZVNodWZmbGVyKG1faml0LCBzaHVmZmxlRGF0YSk7CisgICAgICAg
IGNhbGxGcmFtZVNodWZmbGVyLnNldENhbGxlZUpTVmFsdWVSZWdzKEpTVmFsdWVSZWdzKEdQUklu
Zm86OnJlZ1QwKSk7CisgICAgICAgIGNhbGxGcmFtZVNodWZmbGVyLnByZXBhcmVGb3JTbG93UGF0
aCgpOworICAgIH0gZWxzZSB7CisgICAgICAgIG1faml0Lm1vdmUoY2FsbGVlR1BSLCBHUFJJbmZv
OjpyZWdUMCk7IC8vIENhbGxlZSBuZWVkcyB0byBiZSBpbiByZWdUMAorCisgICAgICAgIGlmIChp
c1RhaWwpCisgICAgICAgICAgICBtX2ppdC5lbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7IC8vIFRo
aXMgbmVlZHMgdG8gaGFwcGVuIGFmdGVyIHdlIG1vdmVkIGNhbGxlZUdQUiB0byByZWdUMAorICAg
IH0KKwogICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoY2FsbExp
bmtJbmZvKSwgR1BSSW5mbzo6cmVnVDIpOyAvLyBMaW5rIGluZm8gbmVlZHMgdG8gYmUgaW4gcmVn
VDIKICAgICBKSVRDb21waWxlcjo6Q2FsbCBzbG93Q2FsbCA9IG1faml0Lm5lYXJDYWxsKCk7Ci0g
ICAgCisKICAgICBkb25lLmxpbmsoJm1faml0KTsKLSAgICAKLSAgICBtX2ppdC5tb3ZlKEdQUklu
Zm86OnJldHVyblZhbHVlR1BSLCByZXN1bHRHUFIpOwotICAgIAotICAgIGpzVmFsdWVSZXN1bHQo
cmVzdWx0R1BSLCBtX2N1cnJlbnROb2RlLCBEYXRhRm9ybWF0SlMsIFVzZUNoaWxkcmVuQ2FsbGVk
RXhwbGljaXRseSk7Ci0gICAgCisKKyAgICBpZiAoaXNUYWlsKQorICAgICAgICBtX2ppdC5hYm9y
dFdpdGhSZWFzb24oSklURGlkUmV0dXJuRnJvbVRhaWxDYWxsKTsKKyAgICBlbHNlIHsKKyAgICAg
ICAgR1BSRmx1c2hlZENhbGxSZXN1bHQgcmVzdWx0KHRoaXMpOworICAgICAgICBHUFJSZWcgcmVz
dWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBtX2ppdC5tb3ZlKEdQUkluZm86OnJldHVy
blZhbHVlR1BSLCByZXN1bHRHUFIpOworCisgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0R1BS
LCBtX2N1cnJlbnROb2RlLCBEYXRhRm9ybWF0SlMsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRs
eSk7CisKKyAgICAgICAgLy8gQWZ0ZXIgdGhlIGNhbGxzIGFyZSBkb25lLCB3ZSBuZWVkIHRvIHJl
ZXN0YWJsaXNoIG91ciBzdGFjaworICAgICAgICAvLyBwb2ludGVyLiBXZSByZWx5IG9uIHRoaXMg
Zm9yIHZhcmFyZ3MgY2FsbHMsIGNhbGxzIHdpdGggYXJpdHkKKyAgICAgICAgLy8gbWlzbWF0Y2gg
KHRoZSBjYWxsZnJhbWUgaXMgc2xpZGVkKSBhbmQgdGFpbCBjYWxscy4KKyAgICAgICAgbV9qaXQu
YWRkUHRyKFRydXN0ZWRJbW0zMihtX2ppdC5ncmFwaCgpLnN0YWNrUG9pbnRlck9mZnNldCgpICog
c2l6ZW9mKFJlZ2lzdGVyKSksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBKSVRDb21waWxl
cjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIH0KKwogICAgIGNhbGxMaW5rSW5mby0+c2V0
VXBDYWxsKGNhbGxUeXBlLCBtX2N1cnJlbnROb2RlLT5vcmlnaW4uc2VtYW50aWMsICBjYWxsZWVH
UFIpOyAgICAKICAgICBtX2ppdC5hZGRKU0NhbGwoZmFzdENhbGwsIHNsb3dDYWxsLCB0YXJnZXRU
b0NoZWNrLCBjYWxsTGlua0luZm8pOwogCi0gICAgLy8gQWZ0ZXIgdGhlIGNhbGxzIGFyZSBkb25l
LCB3ZSBuZWVkIHRvIHJlZXN0YWJsaXNoIG91ciBzdGFjawotICAgIC8vIHBvaW50ZXIuIFdlIHJl
bHkgb24gdGhpcyBmb3IgdmFyYXJncyBjYWxscywgY2FsbHMgd2l0aCBhcml0eQotICAgIC8vIG1p
c21hdGNoICh0aGUgY2FsbGZyYW1lIGlzIHNsaWRlZCkgYW5kIHRhaWwgY2FsbHMuCi0gICAgbV9q
aXQuYWRkUHRyKFRydXN0ZWRJbW0zMihtX2ppdC5ncmFwaCgpLnN0YWNrUG9pbnRlck9mZnNldCgp
ICogc2l6ZW9mKFJlZ2lzdGVyKSksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBKSVRDb21w
aWxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogfQogCiAvLyBDbGFuZyBzaG91bGQgYWxsb3cg
dW5yZWFjaGFibGUgW1tjbGFuZzo6ZmFsbHRocm91Z2hdXSBpbiB0ZW1wbGF0ZSBmdW5jdGlvbnMg
aWYgYW55IHRlbXBsYXRlIGV4cGFuc2lvbiB1c2VzIGl0CkBAIC00Mjc5LDE0ICs0MzYyLDIwIEBA
IHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgYnJlYWs7
CiAKICAgICBjYXNlIENhbGw6CisgICAgY2FzZSBUYWlsQ2FsbDoKKyAgICBjYXNlIFRhaWxDYWxs
SW5saW5lZENhbGxlcjoKICAgICBjYXNlIENvbnN0cnVjdDoKICAgICBjYXNlIENhbGxWYXJhcmdz
OgorICAgIGNhc2UgVGFpbENhbGxWYXJhcmdzOgorICAgIGNhc2UgVGFpbENhbGxWYXJhcmdzSW5s
aW5lZENhbGxlcjoKICAgICBjYXNlIENhbGxGb3J3YXJkVmFyYXJnczoKICAgICBjYXNlIENvbnN0
cnVjdFZhcmFyZ3M6CiAgICAgY2FzZSBDb25zdHJ1Y3RGb3J3YXJkVmFyYXJnczoKKyAgICBjYXNl
IFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3M6CisgICAgY2FzZSBUYWlsQ2FsbEZvcndhcmRWYXJhcmdz
SW5saW5lZENhbGxlcjoKICAgICAgICAgZW1pdENhbGwobm9kZSk7CiAgICAgICAgIGJyZWFrOwot
ICAgICAgICAKKwogICAgIGNhc2UgTG9hZFZhcmFyZ3M6IHsKICAgICAgICAgTG9hZFZhcmFyZ3NE
YXRhKiBkYXRhID0gbm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCk7CiAgICAgICAgIApkaWZmIC0tZ2l0
IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAgYi9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAppbmRleCAzNTI0NzViNGQzODQ2MzRiYmI4
MTRiNjcyMDRiZWVkN2NkNjc0NmJlLi45NzgyYjNmMzMxMDI1YjlkMmVkZTBlOTVkNWMxZjMxMjRk
NzY3NjYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRl
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRlLmNwcApAQCAt
NTY3LDYgKzU2Nyw4IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgY2FzZSBVcHNpbG9uOgog
ICAgICAgICAgICAgICAgIGNhc2UgRm9yd2FyZFZhcmFyZ3M6CiAgICAgICAgICAgICAgICAgY2Fz
ZSBDYWxsRm9yd2FyZFZhcmFyZ3M6CisgICAgICAgICAgICAgICAgY2FzZSBUYWlsQ2FsbEZvcndh
cmRWYXJhcmdzOgorICAgICAgICAgICAgICAgIGNhc2UgVGFpbENhbGxGb3J3YXJkVmFyYXJnc0lu
bGluZWRDYWxsZXI6CiAgICAgICAgICAgICAgICAgY2FzZSBDb25zdHJ1Y3RGb3J3YXJkVmFyYXJn
czoKICAgICAgICAgICAgICAgICBjYXNlIEdldE15QXJndW1lbnRCeVZhbDoKICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2UuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlLmNwcAppbmRleCA5MzcxZGU1NDA4ZjAyM2JmYmQ1OThk
MjM3MWZmOWY4Y2JkMTc0M2E3Li5kMDQ2NzcwOTMzNDI1YTk4N2FlMzNmYzMxYmFlMzdmM2VkZjdj
ZGUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmFyZ3NGb3J3
YXJkaW5nUGhhc2UuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyYXJn
c0ZvcndhcmRpbmdQaGFzZS5jcHAKQEAgLTEzNSw2ICsxMzUsOCBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBDYWxsVmFyYXJnczoKICAgICAgICAgICAgIGNh
c2UgQ29uc3RydWN0VmFyYXJnczoKKyAgICAgICAgICAgIGNhc2UgVGFpbENhbGxWYXJhcmdzOgor
ICAgICAgICAgICAgY2FzZSBUYWlsQ2FsbFZhcmFyZ3NJbmxpbmVkQ2FsbGVyOgogICAgICAgICAg
ICAgICAgIGlmIChub2RlLT5jaGlsZDEoKSA9PSBjYW5kaWRhdGUgfHwgbm9kZS0+Y2hpbGQzKCkg
PT0gY2FuZGlkYXRlKSB7CiAgICAgICAgICAgICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAg
ICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIEVzY2FwZSBhdCAiLCBub2RlLCAiXG4iKTsK
QEAgLTI4Miw3ICsyODQsMTkgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICAgICAgbm9kZS0+c2V0T3BBbmREZWZhdWx0RmxhZ3MoQ29uc3RydWN0Rm9y
d2FyZFZhcmFyZ3MpOwogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIAor
CisgICAgICAgICAgICBjYXNlIFRhaWxDYWxsVmFyYXJnczoKKyAgICAgICAgICAgICAgICBpZiAo
bm9kZS0+Y2hpbGQyKCkgIT0gY2FuZGlkYXRlKQorICAgICAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgICAgICBub2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhUYWlsQ2FsbEZvcndh
cmRWYXJhcmdzKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgY2FzZSBU
YWlsQ2FsbFZhcmFyZ3NJbmxpbmVkQ2FsbGVyOgorICAgICAgICAgICAgICAgIGlmIChub2RlLT5j
aGlsZDIoKSAhPSBjYW5kaWRhdGUpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgIG5vZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdzKFRhaWxDYWxsRm9yd2FyZFZhcmFy
Z3NJbmxpbmVkQ2FsbGVyKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKwogICAgICAgICAgICAg
Y2FzZSBTZXRMb2NhbDoKICAgICAgICAgICAgICAgICAvLyBUaGlzIGlzIHN1cGVyIG9kZC4gV2Ug
ZG9uJ3QgaGF2ZSB0byBkbyBhbnl0aGluZyBoZXJlLCBzaW5jZSBpbiBERkcgSVIsIHRoZSBwaGFu
dG9tCiAgICAgICAgICAgICAgICAgLy8gYXJndW1lbnRzIG5vZGVzIGRvIHByb2R1Y2UgYSBKU1Zh
bHVlLiBBbHNvLCB3ZSBrbm93IHRoYXQgaWYgdGhpcyBTZXRMb2NhbCByZWZlcmVuZWNzIGEKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuY3Bw
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5jcHAKaW5kZXgg
MDc1YjFmYTU0NjY5ZjUxZjNkMjk5NTBiNTA3M2RhMDJmMDliODliZC4uMTI1YWJlMDY4NTA0OTA3
MzdiNzM0MDlhMmEwMzdkOTEyYjk5ZDk5NCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ludGVycHJldGVyL0NhbGxGcmFtZS5jcHAKQEAgLTk1LDcgKzk1LDcgQEAgdW5zaWduZWQgQ2Fs
bEZyYW1lOjpieXRlY29kZU9mZnNldCgpCiAgICAgICAgIEFTU0VSVChjb2RlQmxvY2soKSk7CiAg
ICAgICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbiA9IHRoaXMtPmNvZGVPcmlnaW4oKTsKICAgICAg
ICAgZm9yIChJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IGNvZGVPcmlnaW4uaW5s
aW5lQ2FsbEZyYW1lOyBpbmxpbmVDYWxsRnJhbWU7KSB7Ci0gICAgICAgICAgICBjb2RlT3JpZ2lu
ID0gaW5saW5lQ2FsbEZyYW1lLT5jYWxsZXI7CisgICAgICAgICAgICBjb2RlT3JpZ2luID0gaW5s
aW5lQ2FsbEZyYW1lLT5kaXJlY3RDYWxsZXI7CiAgICAgICAgICAgICBpbmxpbmVDYWxsRnJhbWUg
PSBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4g
Y29kZU9yaWdpbi5ieXRlY29kZUluZGV4OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2ludGVycHJldGVyL1N0YWNrVmlzaXRvci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmNwcAppbmRleCA3NWYxNzcyM2IxNGE0NzU4NmQ5ZWNk
NjYzNmVkZmE0Njk4MTdiMDMyLi5mMjIxYzI3MjExODY5ZjJiYjkyY2RlYjdjMmY1NmUxN2M5NWJi
YTUzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tW
aXNpdG9yLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tW
aXNpdG9yLmNwcApAQCAtNjAsOCArNjAsMTYgQEAgdm9pZCBTdGFja1Zpc2l0b3I6OmdvdG9OZXh0
RnJhbWUoKQogI2lmIEVOQUJMRShERkdfSklUKQogICAgIGlmIChtX2ZyYW1lLmlzSW5saW5lZEZy
YW1lKCkpIHsKICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBtX2Zy
YW1lLmlubGluZUNhbGxGcmFtZSgpOwotICAgICAgICBDb2RlT3JpZ2luKiBjYWxsZXJDb2RlT3Jp
Z2luID0gJmlubGluZUNhbGxGcmFtZS0+Y2FsbGVyOwotICAgICAgICByZWFkSW5saW5lZEZyYW1l
KG1fZnJhbWUuY2FsbEZyYW1lKCksIGNhbGxlckNvZGVPcmlnaW4pOworICAgICAgICBDb2RlT3Jp
Z2luKiBjYWxsZXJDb2RlT3JpZ2luID0gaW5saW5lQ2FsbEZyYW1lLT5nZXRDYWxsZXJTa2lwcGlu
Z0RlYWRGcmFtZXMoKTsKKyAgICAgICAgaWYgKCFjYWxsZXJDb2RlT3JpZ2luKSB7CisgICAgICAg
ICAgICB3aGlsZSAoaW5saW5lQ2FsbEZyYW1lKSB7CisgICAgICAgICAgICAgICAgcmVhZElubGlu
ZWRGcmFtZShtX2ZyYW1lLmNhbGxGcmFtZSgpLCAmaW5saW5lQ2FsbEZyYW1lLT5kaXJlY3RDYWxs
ZXIpOworICAgICAgICAgICAgICAgIGlubGluZUNhbGxGcmFtZSA9IG1fZnJhbWUuaW5saW5lQ2Fs
bEZyYW1lKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtX2ZyYW1lLm1fVk1FbnRyeUZy
YW1lID0gbV9mcmFtZS5tX0NhbGxlclZNRW50cnlGcmFtZTsKKyAgICAgICAgICAgIHJlYWRGcmFt
ZShtX2ZyYW1lLmNhbGxlckZyYW1lKCkpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHJl
YWRJbmxpbmVkRnJhbWUobV9mcmFtZS5jYWxsRnJhbWUoKSwgY2FsbGVyQ29kZU9yaWdpbik7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2RmZy10YWlsLWNhbGxzLmpz
IGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9kZmctdGFpbC1jYWxscy5qcwpu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5lZjUxYzBjYTgyZmNkMzk4NTY2Y2IyMjE5MTQ1NmRhZGIxNjRhODNjCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9kZmctdGFp
bC1jYWxscy5qcwpAQCAtMCwwICsxLDU2IEBACisoZnVuY3Rpb24gbm9uSW5saW5lZFRhaWxDYWxs
KCkgeworICAgIGZ1bmN0aW9uIGNhbGxlZSgpIHsgaWYgKGNhbGxlZS5jYWxsZXIgIT0gbm9uSW5s
aW5lZFRhaWxDYWxsKSB0aHJvdyBuZXcgRXJyb3IoKTsgfQorICAgIG5vSW5saW5lKGNhbGxlZSk7
CisKKyAgICBmdW5jdGlvbiBjYWxsZXIoKSB7ICJ1c2Ugc3RyaWN0IjsgcmV0dXJuIGNhbGxlZSgp
OyB9CisKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwOyArK2kpCisgICAgICAgIGNhbGxl
cigpOworCisgICAgZnVuY3Rpb24gbG9vcChuKSB7ICJ1c2Ugc3RyaWN0IjsgaWYgKG4gPiAwKSBy
ZXR1cm4gbG9vcChuIC0gMSk7IH0KKyAgICBub0lubGluZShsb29wKTsKKworICAgIGxvb3AoMTAw
MDAwMCk7Cit9KSgpOworCisoZnVuY3Rpb24gaW5saW5lZFRhaWxDYWxsKCkgeworICAgIGZ1bmN0
aW9uIGNhbGxlZSgpIHsgaWYgKGNhbGxlZS5jYWxsZXIgIT0gaW5saW5lZFRhaWxDYWxsKSB0aHJv
dyBuZXcgRXJyb3IoKTsgfQorICAgIGZ1bmN0aW9uIGNhbGxlcigpIHsgInVzZSBzdHJpY3QiOyBy
ZXR1cm4gY2FsbGVlKCk7IH0KKworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7ICsraSkK
KyAgICAgICAgY2FsbGVyKCk7CisKKyAgICBmdW5jdGlvbiBsb29wKG4pIHsgInVzZSBzdHJpY3Qi
OyBpZiAobiA+IDApIHJldHVybiBsb29wKG4gLSAxKTsgfQorCisgICAgbG9vcCgxMDAwMDAwKTsK
K30pKCk7CisKKyhmdW5jdGlvbiBub25JbmxpbmVkRW11bGF0ZWRUYWlsQ2FsbCgpIHsKKyAgICBm
dW5jdGlvbiBlbXVsYXRvcigpIHsgY2FsbGVyKCk7IH0KKyAgICBmdW5jdGlvbiBjYWxsZWUoKSB7
IGlmIChjYWxsZWUuY2FsbGVyICE9IGVtdWxhdG9yKSB0aHJvdyBuZXcgRXJyb3IoKTsgfQorICAg
IG5vSW5saW5lKGNhbGxlZSk7CisgICAgZnVuY3Rpb24gY2FsbGVyKCkgeyAidXNlIHN0cmljdCI7
IHJldHVybiBjYWxsZWUoKTsgfQorCisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsgKytp
KQorICAgICAgICBlbXVsYXRvcigpOworCisgICAgZnVuY3Rpb24gcGFkKG4pIHsgInVzZSBzdHJp
Y3QiOyByZXR1cm4gbG9vcChuKTsgfQorICAgIGZ1bmN0aW9uIGxvb3AobikgeyAidXNlIHN0cmlj
dCI7IGlmIChuID4gMCkgcmV0dXJuIHBhZChuIC0gMSk7IH0KKyAgICBub0lubGluZShsb29wKTsK
KworICAgIGxvb3AoMTAwMDAwMCk7Cit9KSgpOworCisoZnVuY3Rpb24gaW5saW5lZEVtdWxhdGVk
VGFpbENhbGwoKSB7CisgICAgZnVuY3Rpb24gZW11bGF0b3IoKSB7IGNhbGxlcigpOyB9CisgICAg
ZnVuY3Rpb24gY2FsbGVlKCkgeyBpZiAoY2FsbGVlLmNhbGxlciAhPSBlbXVsYXRvcikgdGhyb3cg
bmV3IEVycm9yKCk7IH0KKyAgICBmdW5jdGlvbiBjYWxsZXIoKSB7ICJ1c2Ugc3RyaWN0IjsgcmV0
dXJuIGNhbGxlZSgpOyB9CisKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwOyArK2kpCisg
ICAgICAgIGVtdWxhdG9yKCk7CisKKyAgICBmdW5jdGlvbiBwYWQobikgeyAidXNlIHN0cmljdCI7
IHJldHVybiBsb29wKG4pOyB9CisgICAgZnVuY3Rpb24gbG9vcChuKSB7ICJ1c2Ugc3RyaWN0Ijsg
aWYgKG4gPiAwKSByZXR1cm4gcGFkKG4gLSAxKTsgfQorCisgICAgbG9vcCgxMDAwMDAwKTsKK30p
KCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>261795</attachid>
            <date>2015-09-22 21:41:08 -0700</date>
            <delta_ts>2015-09-23 07:50:16 -0700</delta_ts>
            <desc>Rebased patch</desc>
            <filename>148663-2.patch</filename>
            <type>text/plain</type>
            <size>99858</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTkwMTUzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1NSBA
QAorMjAxNS0wOS0yMiAgTWljaGFlbCBTYWJvZmYgIDxtc2Fib2ZmQGFwcGxlLmNvbT4KKworICAg
ICAgICBbRVM2XSBJbXBsZW1lbnQgdGFpbCBjYWxscyBpbiB0aGUgREZHCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDg2NjMKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBqc2MtdGFpbGNhbGw6IEltcGxlbWVu
dCB0aGUgdGFpbCBjYWxsIG9wY29kZXMgaW4gdGhlIERGRworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ2ODUwCisKKyAgICAgICAgVGhpcyBwYXRjaCBh
ZGRzIHN1cHBvcnQgZm9yIHRhaWwgY2FsbHMgaW4gdGhlIERGRy4gVGhpcyByZXF1aXJlcyBhIHNs
aWdodGx5IGhpZ2ggbnVtYmVyIG9mIG5vZGVzOgorCisgICAgICAgICAtIFRhaWxDYWxsIGFuZCBU
YWlsQ2FsbFZhcmFyZ3MgYXJlIHN0cmFpZ2h0Zm9yd2FyZC4gVGhleSBhcmUgdGVybWluYWwKKyAg
ICAgICAgICAgbm9kZXMgYW5kIGhhdmUgdGhlIHNlbWFudGljcyBvZiBhbiBhY3R1YWwgdGFpbCBj
YWxsLgorCisgICAgICAgICAtIFRhaWxDYWxsSW5saW5lZENhbGxlciBhbmQgVGFpbENhbGxWYXJh
cmdzSW5saW5lZENhbGxlciBhcmUgaGVyZSB0byBwZXJmb3JtIGEKKyAgICAgICAgICAgdGFpbCBj
YWxsIGluc2lkZSBhbiBpbmxpbmVkIGZ1bmN0aW9uLiBUaGV5IGFyZSBub24gdGVybWluYWwgbm9k
ZXMsCisgICAgICAgICAgIGFuZCBhcmUgcGVyZm9ybWluZyB0aGUgY2FsbCBhcyBhIHJlZ3VsYXIg
Y2FsbCBhZnRlciBwb3BwaW5nIGFuCisgICAgICAgICAgIGFwcHJvcHJpYXRlIG51bWJlciBvZiBp
bmxpbmVkIHRhaWwgY2FsbCBmcmFtZXMuCisKKyAgICAgICAgIC0gVGFpbENhbGxGb3J3YXJkVmFy
YXJncyBhbmQgVGFpbENhbGxGb3J3YXJkVmFyYXJnc0lubGluZWRDYWxsZXIgYXJlIHRoZQorICAg
ICAgICAgICBleHRlbnNpb24gb2YgVGFpbENhbGxWYXJhcmdzIGFuZCBUYWlsQ2FsbFZhcmFyZ3NJ
bmxpbmVkQ2FsbGVyIHRvIGVuYWJsZQorICAgICAgICAgICB0aGUgdmFyYXJncyBmb3J3YXJkaW5n
IG9wdGltaXphdGlvbiBzbyB0aGF0IHdlIGRvbid0IGxvc2UKKyAgICAgICAgICAgcGVyZm9ybWFu
Y2Ugd2l0aCBhIHRhaWwgY2FsbCBpbnN0ZWFkIG9mIGEgcmVndWxhciBjYWxsLgorCisgICAgICAg
IFRoaXMgYWxzbyByZXF1aXJlZCB0d28gYnJvYWQga2luZCBvZiBjaGFuZ2VzOgorCisgICAgICAg
ICAtIENoYW5nZXMgaW4gdGhlIEpJVCBpdHNlbGYgKERGR1NwZWN1bGF0aXZlSklUKSBhcmUgcHJl
dHR5CisgICAgICAgICAgIHN0cmFpZ2h0Zm9yd2FyZCBzaW5jZSB0aGV5IGFyZSBqdXN0IGFuIGV4
dGVuc2lvbiBvZiB0aGUgYmFzZWxpbmUgSklUCisgICAgICAgICAgIGNoYW5nZXMgaW50cm9kdWNl
ZCBwcmV2aW91c2x5LgorCisgICAgICAgICAtIENoYW5nZXMgaW4gdGhlIHJ1bnRpbWUgYXJlIG1v
c3RseSByZWxhdGVkIHdpdGggaGFuZGxpbmcgaW5saW5lIGNhbGwKKyAgICAgICAgICAgZnJhbWVz
LiBUaGUgaWRlYSBoZXJlIGlzIHRoYXQgd2UgaGF2ZSBhIHNwZWNpYWwgVGFpbENhbGwgdHlwZSBm
b3IKKyAgICAgICAgICAgY2FsbCBmcmFtZXMgdGhhdCBpbmRpY2F0ZXMgdG8gdGhlIHZhcmlvdXMg
cGllY2VzIG9mIGNvZGUgd2Fsa2luZyB0aGUKKyAgICAgICAgICAgaW5saW5lIGNhbGwgZnJhbWUg
dGhhdCB0aGV5IHNob3VsZCAocmVjdXJzaXZlbHkpIHNraXAgdGhlIGNhbGxlciBpbgorICAgICAg
ICAgICB0aGVpciBhbmFseXNpcy4KKworICAgICAgICAqIGJ5dGVjb2RlL0NhbGxNb2RlLmg6Cisg
ICAgICAgIChKU0M6OnNwZWNpYWxpemF0aW9uS2luZEZvcik6CisgICAgICAgICogYnl0ZWNvZGUv
Q29kZU9yaWdpbi5jcHA6CisgICAgICAgIChKU0M6OkNvZGVPcmlnaW46OmlubGluZURlcHRoRm9y
Q2FsbEZyYW1lKToKKyAgICAgICAgKEpTQzo6Q29kZU9yaWdpbjo6aXNBcHByb3hpbWF0ZWx5RXF1
YWxUbyk6CisgICAgICAgIChKU0M6OkNvZGVPcmlnaW46OmFwcHJveGltYXRlSGFzaCk6CisgICAg
ICAgIChKU0M6OkNvZGVPcmlnaW46OmlubGluZVN0YWNrKToKKyAgICAgICAgKiBieXRlY29kZS9D
b2RlT3JpZ2luLmg6CisgICAgICAgICogYnl0ZWNvZGUvSW5saW5lQ2FsbEZyYW1lLmNwcDoKKyAg
ICAgICAgKEpTQzo6SW5saW5lQ2FsbEZyYW1lOjpkdW1wSW5Db250ZXh0KToKKyAgICAgICAgKFdU
Rjo6cHJpbnRJbnRlcm5hbCk6CisgICAgICAgICogYnl0ZWNvZGUvSW5saW5lQ2FsbEZyYW1lLmg6
CisgICAgICAgIChKU0M6OklubGluZUNhbGxGcmFtZTo6Y2FsbE1vZGVGb3IpOgorICAgICAgICAo
SlNDOjpJbmxpbmVDYWxsRnJhbWU6OmtpbmRGb3IpOgorICAgICAgICAoSlNDOjpJbmxpbmVDYWxs
RnJhbWU6OnZhcmFyZ3NLaW5kRm9yKToKKyAgICAgICAgKEpTQzo6SW5saW5lQ2FsbEZyYW1lOjpz
cGVjaWFsaXphdGlvbktpbmRGb3IpOgorICAgICAgICAoSlNDOjpJbmxpbmVDYWxsRnJhbWU6Omlz
VmFyYXJncyk6CisgICAgICAgIChKU0M6OklubGluZUNhbGxGcmFtZTo6aXNUYWlsKToKKyAgICAg
ICAgKEpTQzo6SW5saW5lQ2FsbEZyYW1lOjpjb21wdXRlQ2FsbGVyU2tpcHBpbmdEZWFkRnJhbWVz
KToKKyAgICAgICAgKEpTQzo6SW5saW5lQ2FsbEZyYW1lOjpnZXRDYWxsZXJTa2lwcGluZ0RlYWRG
cmFtZXMpOgorICAgICAgICAoSlNDOjpJbmxpbmVDYWxsRnJhbWU6OmdldENhbGxlcklubGluZUZy
YW1lU2tpcHBpbmdEZWFkRnJhbWVzKToKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RJbnRlcnBy
ZXRlcklubGluZXMuaDoKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEludGVycHJldGVyPEFi
c3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHMpOgorICAgICAgICAqIGRmZy9ERkdBcmd1
bWVudHNFbGltaW5hdGlvblBoYXNlLmNwcDoKKyAgICAgICAgKiBkZmcvREZHQmFzaWNCbG9jay5o
OgorICAgICAgICAoSlNDOjpERkc6OkJhc2ljQmxvY2s6OmZpbmRUZXJtaW5hbCk6CisgICAgICAg
ICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29k
ZVBhcnNlcjo6aW5saW5lQ2FsbEZyYW1lKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBh
cnNlcjo6YWxsSW5saW5lRnJhbWVzQXJlVGFpbENhbGxzKToKKyAgICAgICAgKEpTQzo6REZHOjpC
eXRlQ29kZVBhcnNlcjo6Y3VycmVudENvZGVPcmlnaW4pOgorICAgICAgICAoSlNDOjpERkc6OkJ5
dGVDb2RlUGFyc2VyOjphZGRDYWxsV2l0aG91dFNldHRpbmdSZXN1bHQpOgorICAgICAgICAoSlND
OjpERkc6OkJ5dGVDb2RlUGFyc2VyOjphZGRDYWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRl
Q29kZVBhcnNlcjo6Z2V0UHJlZGljdGlvbldpdGhvdXRPU1JFeGl0KToKKyAgICAgICAgKEpTQzo6
REZHOjpCeXRlQ29kZVBhcnNlcjo6Z2V0UHJlZGljdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6
Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUNhbGwpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2Rl
UGFyc2VyOjpoYW5kbGVWYXJhcmdzQ2FsbCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQ
YXJzZXI6OmVtaXRBcmd1bWVudFBoYW50b21zKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29k
ZVBhcnNlcjo6aW5saW5pbmdDb3N0KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNl
cjo6aW5saW5lQ2FsbCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmF0dGVt
cHRUb0lubGluZUNhbGwpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJz
ZUJsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6SW5saW5lU3RhY2tF
bnRyeTo6SW5saW5lU3RhY2tFbnRyeSk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJz
ZXI6OnBhcnNlQ29kZUJsb2NrKToKKyAgICAgICAgKiBkZmcvREZHQ2FwYWJpbGl0aWVzLmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpjYXBhYmlsaXR5TGV2ZWwpOgorICAgICAgICAqIGRmZy9ERkdD
bG9iYmVyaXplLmg6CisgICAgICAgIChKU0M6OkRGRzo6Y2xvYmJlcml6ZSk6CisgICAgICAgICog
ZGZnL0RGR0RvZXNHQy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6ZG9lc0dDKToKKyAgICAgICAg
KiBkZmcvREZHRml4dXBQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Rml4dXBQaGFzZTo6
Zml4dXBOb2RlKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OkdyYXBoOjppc0xpdmVJbkJ5dGVjb2RlKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguaDoK
KyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6Zm9yQWxsTG9jYWxzTGl2ZUluQnl0ZWNvZGUpOgor
ICAgICAgICAqIGRmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6SW5QbGFjZUFic3RyYWN0U3RhdGU6Om1lcmdlVG9TdWNjZXNzb3JzKToKKyAgICAgICAg
KiBkZmcvREZHSklUQ29tcGlsZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVy
Ojp3aWxsQ2F0Y2hFeGNlcHRpb25Jbk1hY2hpbmVGcmFtZSk6CisgICAgICAgICogZGZnL0RGR0xp
dmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OkZsdXNoTGl2ZUNhdGNoVmFyaWFibGVzSW5zZXJ0aW9uUGhhc2U6OndpbGxDYXRjaEV4Y2VwdGlv
bik6CisgICAgICAgICogZGZnL0RGR05vZGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpo
YXNDYWxsVmFyYXJnc0RhdGEpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmlzVGVybWluYWwp
OgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc0hlYXBQcmVkaWN0aW9uKToKKyAgICAgICAg
KiBkZmcvREZHTm9kZVR5cGUuaDoKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdENvbXBpbGVyQ29t
bW9uLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpoYW5kbGVFeGl0Q291bnRzKToKKyAgICAgICAg
KEpTQzo6REZHOjpyZWlmeUlubGluZWRDYWxsRnJhbWVzKToKKyAgICAgICAgKEpTQzo6REZHOjpv
c3JXcml0ZUJhcnJpZXIpOgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0UHJlcGFyYXRpb24uY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OnByZXBhcmVDb2RlT3JpZ2luRm9yT1NSRXhpdCk6CisgICAg
ICAgICogZGZnL0RGR09wZXJhdGlvbnMuY3BwOgorICAgICAgICAqIGRmZy9ERkdQcmVjaXNlTG9j
YWxDbG9iYmVyaXplLmg6CisgICAgICAgIChKU0M6OkRGRzo6UHJlY2lzZUxvY2FsQ2xvYmJlcml6
ZUFkYXB0b3I6OnJlYWRUb3ApOgorICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRp
b25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6UHJlZGljdGlvblByb3BhZ2F0aW9uUGhh
c2U6OnByb3BhZ2F0ZSk6CisgICAgICAgICogZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaDoKKyAgICAg
ICAgKEpTQzo6REZHOjpzYWZlVG9FeGVjdXRlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRp
dmVKSVQzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmVtaXRD
YWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAg
ICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjplbWl0Q2FsbCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdWYWxpZGF0ZS5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6VmFsaWRhdGU6OnZhbGlkYXRlU1NBKToKKyAgICAgICAgKiBkZmcvREZHVmFyYXJn
c0ZvcndhcmRpbmdQaGFzZS5jcHA6CisgICAgICAgICogaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNw
cDoKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lOjpieXRlY29kZU9mZnNldCk6CisgICAgICAgICog
aW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6U3RhY2tWaXNpdG9y
Ojpnb3RvTmV4dEZyYW1lKToKKyAgICAgICAgKiBydW50aW1lL09wdGlvbnMuaDoKKyAgICAgICAg
KiB0ZXN0cy9zdHJlc3MvZGZnLXRhaWwtY2FsbHMuanM6IEFkZGVkLgorICAgICAgICAobm9uSW5s
aW5lZFRhaWxDYWxsLmNhbGxlZSk6CisgICAgICAgIChub25JbmxpbmVkVGFpbENhbGwuY2FsbGVy
KToKKyAgICAgICAgKG5vbklubGluZWRUYWlsQ2FsbC5sb29wKToKKyAgICAgICAgKG5vbklubGlu
ZWRUYWlsQ2FsbCk6CisgICAgICAgIChpbmxpbmVkVGFpbENhbGwuY2FsbGVlKToKKyAgICAgICAg
KGlubGluZWRUYWlsQ2FsbC5jYWxsZXIpOgorICAgICAgICAoaW5saW5lZFRhaWxDYWxsLmxvb3Ap
OgorICAgICAgICAoaW5saW5lZFRhaWxDYWxsKToKKyAgICAgICAgKG5vbklubGluZWRFbXVsYXRl
ZFRhaWxDYWxsLmVtdWxhdG9yKToKKyAgICAgICAgKG5vbklubGluZWRFbXVsYXRlZFRhaWxDYWxs
LmNhbGxlZSk6CisgICAgICAgIChub25JbmxpbmVkRW11bGF0ZWRUYWlsQ2FsbC5jYWxsZXIpOgor
ICAgICAgICAobm9uSW5saW5lZEVtdWxhdGVkVGFpbENhbGwucGFkKToKKyAgICAgICAgKG5vbklu
bGluZWRFbXVsYXRlZFRhaWxDYWxsLmxvb3ApOgorICAgICAgICAobm9uSW5saW5lZEVtdWxhdGVk
VGFpbENhbGwpOgorICAgICAgICAoaW5saW5lZEVtdWxhdGVkVGFpbENhbGwuZW11bGF0b3IpOgor
ICAgICAgICAoaW5saW5lZEVtdWxhdGVkVGFpbENhbGwuY2FsbGVlKToKKyAgICAgICAgKGlubGlu
ZWRFbXVsYXRlZFRhaWxDYWxsLmNhbGxlcik6CisgICAgICAgIChpbmxpbmVkRW11bGF0ZWRUYWls
Q2FsbC5wYWQpOgorICAgICAgICAoaW5saW5lZEVtdWxhdGVkVGFpbENhbGwubG9vcCk6CisgICAg
ICAgIChpbmxpbmVkRW11bGF0ZWRUYWlsQ2FsbCk6CisKIDIwMTUtMDktMjIgIEZpbGlwIFBpemxv
ICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBHQ1RocmVhZFNoYXJlZERhdGEgaXMganVz
dCBhIGJhZCB3YXkgb2Ygc2F5aW5nIEhlYXAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9DYWxsTW9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9DYWxsTW9kZS5oCShyZXZpc2lvbiAxOTAxNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ2FsbE1vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTIgKzI2LDI2
IEBACiAjaWZuZGVmIENhbGxNb2RlX2gKICNkZWZpbmUgQ2FsbE1vZGVfaAogCisjaW5jbHVkZSAi
Q29kZVNwZWNpYWxpemF0aW9uS2luZC5oIgorCiBuYW1lc3BhY2UgSlNDIHsKIAogZW51bSBjbGFz
cyBDYWxsTW9kZSB7IFJlZ3VsYXIsIFRhaWwsIENvbnN0cnVjdCB9OwogCiBlbnVtIEZyYW1lQWN0
aW9uIHsgS2VlcFRoZUZyYW1lID0gMCwgUmV1c2VUaGVGcmFtZSB9OwogCitpbmxpbmUgQ29kZVNw
ZWNpYWxpemF0aW9uS2luZCBzcGVjaWFsaXphdGlvbktpbmRGb3IoQ2FsbE1vZGUgY2FsbE1vZGUp
Cit7CisgICAgc3dpdGNoIChjYWxsTW9kZSkgeworICAgIGNhc2UgQ2FsbE1vZGU6OlRhaWw6Cisg
ICAgY2FzZSBDYWxsTW9kZTo6UmVndWxhcjoKKyAgICAgICAgcmV0dXJuIENvZGVGb3JDYWxsOwor
CisgICAgY2FzZSBDYWxsTW9kZTo6Q29uc3RydWN0OgorICAgICAgICByZXR1cm4gQ29kZUZvckNv
bnN0cnVjdDsKKyAgICB9Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiBuYW1lc3BhY2UgV1RG
IHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5j
cHAJKHJldmlzaW9uIDE5MDE1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlT3JpZ2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKIHVuc2lnbmVkIENvZGVPcmlnaW46OmlubGluZURlcHRoRm9yQ2FsbEZyYW1lKElubGlu
ZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lKQogewogICAgIHVuc2lnbmVkIHJlc3VsdCA9IDE7
Ci0gICAgZm9yIChJbmxpbmVDYWxsRnJhbWUqIGN1cnJlbnQgPSBpbmxpbmVDYWxsRnJhbWU7IGN1
cnJlbnQ7IGN1cnJlbnQgPSBjdXJyZW50LT5jYWxsZXIuaW5saW5lQ2FsbEZyYW1lKQorICAgIGZv
ciAoSW5saW5lQ2FsbEZyYW1lKiBjdXJyZW50ID0gaW5saW5lQ2FsbEZyYW1lOyBjdXJyZW50OyBj
dXJyZW50ID0gY3VycmVudC0+ZGlyZWN0Q2FsbGVyLmlubGluZUNhbGxGcmFtZSkKICAgICAgICAg
cmVzdWx0Kys7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTc4LDggKzc4LDggQEAgYm9vbCBD
b2RlT3JpZ2luOjppc0FwcHJveGltYXRlbHlFcXVhbFRvKAogICAgICAgICBpZiAoYS5pbmxpbmVD
YWxsRnJhbWUtPmV4ZWN1dGFibGUuZ2V0KCkgIT0gYi5pbmxpbmVDYWxsRnJhbWUtPmV4ZWN1dGFi
bGUuZ2V0KCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAotICAgICAgICBh
ID0gYS5pbmxpbmVDYWxsRnJhbWUtPmNhbGxlcjsKLSAgICAgICAgYiA9IGIuaW5saW5lQ2FsbEZy
YW1lLT5jYWxsZXI7CisgICAgICAgIGEgPSBhLmlubGluZUNhbGxGcmFtZS0+ZGlyZWN0Q2FsbGVy
OworICAgICAgICBiID0gYi5pbmxpbmVDYWxsRnJhbWUtPmRpcmVjdENhbGxlcjsKICAgICB9CiB9
CiAKQEAgLTEwMCw3ICsxMDAsNyBAQCB1bnNpZ25lZCBDb2RlT3JpZ2luOjphcHByb3hpbWF0ZUhh
c2goKSBjCiAgICAgICAgIAogICAgICAgICByZXN1bHQgKz0gV1RGOjpQdHJIYXNoPEpTQ2VsbCo+
OjpoYXNoKGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5leGVjdXRhYmxlLmdldCgpKTsKICAg
ICAgICAgCi0gICAgICAgIGNvZGVPcmlnaW4gPSBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+
Y2FsbGVyOworICAgICAgICBjb2RlT3JpZ2luID0gY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUt
PmRpcmVjdENhbGxlcjsKICAgICB9CiB9CiAKQEAgLTEwOSw4ICsxMDksOCBAQCBWZWN0b3I8Q29k
ZU9yaWdpbj4gQ29kZU9yaWdpbjo6aW5saW5lU3RhCiAgICAgVmVjdG9yPENvZGVPcmlnaW4+IHJl
c3VsdChpbmxpbmVEZXB0aCgpKTsKICAgICByZXN1bHQubGFzdCgpID0gKnRoaXM7CiAgICAgdW5z
aWduZWQgaW5kZXggPSByZXN1bHQuc2l6ZSgpIC0gMjsKLSAgICBmb3IgKElubGluZUNhbGxGcmFt
ZSogY3VycmVudCA9IGlubGluZUNhbGxGcmFtZTsgY3VycmVudDsgY3VycmVudCA9IGN1cnJlbnQt
PmNhbGxlci5pbmxpbmVDYWxsRnJhbWUpCi0gICAgICAgIHJlc3VsdFtpbmRleC0tXSA9IGN1cnJl
bnQtPmNhbGxlcjsKKyAgICBmb3IgKElubGluZUNhbGxGcmFtZSogY3VycmVudCA9IGlubGluZUNh
bGxGcmFtZTsgY3VycmVudDsgY3VycmVudCA9IGN1cnJlbnQtPmRpcmVjdENhbGxlci5pbmxpbmVD
YWxsRnJhbWUpCisgICAgICAgIHJlc3VsdFtpbmRleC0tXSA9IGN1cnJlbnQtPmRpcmVjdENhbGxl
cjsKICAgICBSRUxFQVNFX0FTU0VSVCghcmVzdWx0WzBdLmlubGluZUNhbGxGcmFtZSk7CiAgICAg
cmV0dXJuIHJlc3VsdDsKIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlT3JpZ2luLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVPcmlnaW4uaAkocmV2aXNpb24gMTkwMTUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NvZGVPcmlnaW4uaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAog
I2lmbmRlZiBDb2RlT3JpZ2luX2gKICNkZWZpbmUgQ29kZU9yaWdpbl9oCiAKKyNpbmNsdWRlICJD
YWxsTW9kZS5oIgogI2luY2x1ZGUgIkNvZGVCbG9ja0hhc2guaCIKICNpbmNsdWRlICJDb2RlU3Bl
Y2lhbGl6YXRpb25LaW5kLmgiCiAjaW5jbHVkZSAiV3JpdGVCYXJyaWVyLmgiCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQ2FsbEZyYW1lLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQ2FsbEZyYW1lLmNwcAko
cmV2aXNpb24gMTkwMTUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGlu
ZUNhbGxGcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc3LDcgKzc3LDcgQEAgdm9pZCBJbmxp
bmVDYWxsRnJhbWU6OmR1bXBJbkNvbnRleHQoUHJpbgogICAgIG91dC5wcmludChicmllZkZ1bmN0
aW9uSW5mb3JtYXRpb24oKSwgIjo8IiwgUmF3UG9pbnRlcihleGVjdXRhYmxlLmdldCgpKSk7CiAg
ICAgaWYgKGV4ZWN1dGFibGUtPmlzU3RyaWN0TW9kZSgpKQogICAgICAgICBvdXQucHJpbnQoIiAo
U3RyaWN0TW9kZSkiKTsKLSAgICBvdXQucHJpbnQoIiwgYmMjIiwgY2FsbGVyLmJ5dGVjb2RlSW5k
ZXgsICIsICIsIGtpbmQpOworICAgIG91dC5wcmludCgiLCBiYyMiLCBkaXJlY3RDYWxsZXIuYnl0
ZWNvZGVJbmRleCwgIiwgIiwgc3RhdGljX2Nhc3Q8S2luZD4oa2luZCkpOwogICAgIGlmIChpc0Ns
b3N1cmVDYWxsKQogICAgICAgICBvdXQucHJpbnQoIiwgY2xvc3VyZSBjYWxsIik7CiAgICAgZWxz
ZQpAQCAtMTA1LDEyICsxMDUsMTggQEAgdm9pZCBwcmludEludGVybmFsKFByaW50U3RyZWFtJiBv
dXQsIEpTQwogICAgIGNhc2UgSlNDOjpJbmxpbmVDYWxsRnJhbWU6OkNvbnN0cnVjdDoKICAgICAg
ICAgb3V0LnByaW50KCJDb25zdHJ1Y3QiKTsKICAgICAgICAgcmV0dXJuOworICAgIGNhc2UgSlND
OjpJbmxpbmVDYWxsRnJhbWU6OlRhaWxDYWxsOgorICAgICAgICBvdXQucHJpbnQoIlRhaWxDYWxs
Iik7CisgICAgICAgIHJldHVybjsKICAgICBjYXNlIEpTQzo6SW5saW5lQ2FsbEZyYW1lOjpDYWxs
VmFyYXJnczoKICAgICAgICAgb3V0LnByaW50KCJDYWxsVmFyYXJncyIpOwogICAgICAgICByZXR1
cm47CiAgICAgY2FzZSBKU0M6OklubGluZUNhbGxGcmFtZTo6Q29uc3RydWN0VmFyYXJnczoKICAg
ICAgICAgb3V0LnByaW50KCJDb25zdHJ1Y3RWYXJhcmdzIik7CiAgICAgICAgIHJldHVybjsKKyAg
ICBjYXNlIEpTQzo6SW5saW5lQ2FsbEZyYW1lOjpUYWlsQ2FsbFZhcmFyZ3M6CisgICAgICAgIG91
dC5wcmludCgiVGFpbENhbGxWYXJhcmdzIik7CisgICAgICAgIHJldHVybjsKICAgICBjYXNlIEpT
Qzo6SW5saW5lQ2FsbEZyYW1lOjpHZXR0ZXJDYWxsOgogICAgICAgICBvdXQucHJpbnQoIkdldHRl
ckNhbGwiKTsKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0lubGluZUNhbGxGcmFtZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9JbmxpbmVDYWxsRnJhbWUuaAkocmV2aXNpb24gMTkwMTUzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGluZUNhbGxGcmFtZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC00OSwzNyArNDksNTkgQEAgc3RydWN0IElubGluZUNhbGxGcmFtZSB7CiAgICAgZW51
bSBLaW5kIHsKICAgICAgICAgQ2FsbCwKICAgICAgICAgQ29uc3RydWN0LAorICAgICAgICBUYWls
Q2FsbCwKICAgICAgICAgQ2FsbFZhcmFyZ3MsCiAgICAgICAgIENvbnN0cnVjdFZhcmFyZ3MsCisg
ICAgICAgIFRhaWxDYWxsVmFyYXJncywKICAgICAgICAgCiAgICAgICAgIC8vIEZvciB0aGVzZSwg
dGhlIHN0YWNrT2Zmc2V0IGluY29ycG9yYXRlcyB0aGUgYXJndW1lbnQgY291bnQgcGx1cyB0aGUg
dHJ1ZSByZXR1cm4gUEMKICAgICAgICAgLy8gc2xvdC4KICAgICAgICAgR2V0dGVyQ2FsbCwKICAg
ICAgICAgU2V0dGVyQ2FsbAogICAgIH07Ci0gICAgCi0gICAgc3RhdGljIEtpbmQga2luZEZvcihD
b2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCisKKyAgICBzdGF0aWMgQ2FsbE1vZGUgY2FsbE1v
ZGVGb3IoS2luZCBraW5kKQogICAgIHsKICAgICAgICAgc3dpdGNoIChraW5kKSB7Ci0gICAgICAg
IGNhc2UgQ29kZUZvckNhbGw6CisgICAgICAgIGNhc2UgQ2FsbDoKKyAgICAgICAgY2FzZSBDYWxs
VmFyYXJnczoKKyAgICAgICAgY2FzZSBHZXR0ZXJDYWxsOgorICAgICAgICBjYXNlIFNldHRlckNh
bGw6CisgICAgICAgICAgICByZXR1cm4gQ2FsbE1vZGU6OlJlZ3VsYXI7CisgICAgICAgIGNhc2Ug
VGFpbENhbGw6CisgICAgICAgIGNhc2UgVGFpbENhbGxWYXJhcmdzOgorICAgICAgICAgICAgcmV0
dXJuIENhbGxNb2RlOjpUYWlsOworICAgICAgICBjYXNlIENvbnN0cnVjdDoKKyAgICAgICAgY2Fz
ZSBDb25zdHJ1Y3RWYXJhcmdzOgorICAgICAgICAgICAgcmV0dXJuIENhbGxNb2RlOjpDb25zdHJ1
Y3Q7CisgICAgICAgIH0KKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICB9CisKKyAgICBzdGF0aWMgS2luZCBraW5kRm9yKENhbGxNb2RlIGNhbGxNb2RlKQorICAgIHsK
KyAgICAgICAgc3dpdGNoIChjYWxsTW9kZSkgeworICAgICAgICBjYXNlIENhbGxNb2RlOjpSZWd1
bGFyOgogICAgICAgICAgICAgcmV0dXJuIENhbGw7Ci0gICAgICAgIGNhc2UgQ29kZUZvckNvbnN0
cnVjdDoKKyAgICAgICAgY2FzZSBDYWxsTW9kZTo6Q29uc3RydWN0OgogICAgICAgICAgICAgcmV0
dXJuIENvbnN0cnVjdDsKKyAgICAgICAgY2FzZSBDYWxsTW9kZTo6VGFpbDoKKyAgICAgICAgICAg
IHJldHVybiBUYWlsQ2FsbDsKICAgICAgICAgfQogICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gQ2FsbDsKICAgICB9CiAgICAgCi0gICAgc3RhdGlj
IEtpbmQgdmFyYXJnc0tpbmRGb3IoQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQorICAgIHN0
YXRpYyBLaW5kIHZhcmFyZ3NLaW5kRm9yKENhbGxNb2RlIGNhbGxNb2RlKQogICAgIHsKLSAgICAg
ICAgc3dpdGNoIChraW5kKSB7Ci0gICAgICAgIGNhc2UgQ29kZUZvckNhbGw6CisgICAgICAgIHN3
aXRjaCAoY2FsbE1vZGUpIHsKKyAgICAgICAgY2FzZSBDYWxsTW9kZTo6UmVndWxhcjoKICAgICAg
ICAgICAgIHJldHVybiBDYWxsVmFyYXJnczsKLSAgICAgICAgY2FzZSBDb2RlRm9yQ29uc3RydWN0
OgorICAgICAgICBjYXNlIENhbGxNb2RlOjpDb25zdHJ1Y3Q6CiAgICAgICAgICAgICByZXR1cm4g
Q29uc3RydWN0VmFyYXJnczsKKyAgICAgICAgY2FzZSBDYWxsTW9kZTo6VGFpbDoKKyAgICAgICAg
ICAgIHJldHVybiBUYWlsQ2FsbFZhcmFyZ3M7CiAgICAgICAgIH0KICAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJuIENhbGw7CiAgICAgfQogICAgIAog
ICAgIHN0YXRpYyBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIHNwZWNpYWxpemF0aW9uS2luZEZvcihL
aW5kIGtpbmQpCkBAIC04Nyw2ICsxMDksOCBAQCBzdHJ1Y3QgSW5saW5lQ2FsbEZyYW1lIHsKICAg
ICAgICAgc3dpdGNoIChraW5kKSB7CiAgICAgICAgIGNhc2UgQ2FsbDoKICAgICAgICAgY2FzZSBD
YWxsVmFyYXJnczoKKyAgICAgICAgY2FzZSBUYWlsQ2FsbDoKKyAgICAgICAgY2FzZSBUYWlsQ2Fs
bFZhcmFyZ3M6CiAgICAgICAgIGNhc2UgR2V0dGVyQ2FsbDoKICAgICAgICAgY2FzZSBTZXR0ZXJD
YWxsOgogICAgICAgICAgICAgcmV0dXJuIENvZGVGb3JDYWxsOwpAQCAtOTUsMjQgKzExOSw2NCBA
QCBzdHJ1Y3QgSW5saW5lQ2FsbEZyYW1lIHsKICAgICAgICAgICAgIHJldHVybiBDb2RlRm9yQ29u
c3RydWN0OwogICAgICAgICB9CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
Ci0gICAgICAgIHJldHVybiBDb2RlRm9yQ2FsbDsKICAgICB9CiAgICAgCiAgICAgc3RhdGljIGJv
b2wgaXNWYXJhcmdzKEtpbmQga2luZCkKICAgICB7CiAgICAgICAgIHN3aXRjaCAoa2luZCkgewog
ICAgICAgICBjYXNlIENhbGxWYXJhcmdzOgorICAgICAgICBjYXNlIFRhaWxDYWxsVmFyYXJnczoK
ICAgICAgICAgY2FzZSBDb25zdHJ1Y3RWYXJhcmdzOgogICAgICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIH0K
ICAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBpc1RhaWwoS2luZCBraW5kKQorICAgIHsKKyAgICAg
ICAgc3dpdGNoIChraW5kKSB7CisgICAgICAgIGNhc2UgVGFpbENhbGw6CisgICAgICAgIGNhc2Ug
VGFpbENhbGxWYXJhcmdzOgorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9CisgICAgYm9v
bCBpc1RhaWwoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGlzVGFpbChzdGF0aWNfY2Fz
dDxLaW5kPihraW5kKSk7CisgICAgfQorCisgICAgc3RhdGljIENvZGVPcmlnaW4qIGNvbXB1dGVD
YWxsZXJTa2lwcGluZ0RlYWRGcmFtZXMoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUp
CisgICAgeworICAgICAgICBDb2RlT3JpZ2luKiBjb2RlT3JpZ2luOworICAgICAgICBib29sIHRh
aWxDYWxsZWU7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIHRhaWxDYWxsZWUgPSBpbmxpbmVD
YWxsRnJhbWUtPmlzVGFpbCgpOworICAgICAgICAgICAgY29kZU9yaWdpbiA9ICZpbmxpbmVDYWxs
RnJhbWUtPmRpcmVjdENhbGxlcjsKKyAgICAgICAgICAgIGlubGluZUNhbGxGcmFtZSA9IGNvZGVP
cmlnaW4tPmlubGluZUNhbGxGcmFtZTsKKyAgICAgICAgfSB3aGlsZSAoaW5saW5lQ2FsbEZyYW1l
ICYmIHRhaWxDYWxsZWUpOworICAgICAgICBpZiAodGFpbENhbGxlZSkKKyAgICAgICAgICAgIHJl
dHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gY29kZU9yaWdpbjsKKyAgICB9CisKKyAgICBD
b2RlT3JpZ2luKiBnZXRDYWxsZXJTa2lwcGluZ0RlYWRGcmFtZXMoKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIGNvbXB1dGVDYWxsZXJTa2lwcGluZ0RlYWRGcmFtZXModGhpcyk7CisgICAgfQorCisg
ICAgSW5saW5lQ2FsbEZyYW1lKiBnZXRDYWxsZXJJbmxpbmVGcmFtZVNraXBwaW5nRGVhZEZyYW1l
cygpCisgICAgeworICAgICAgICBDb2RlT3JpZ2luKiBjYWxsZXIgPSBnZXRDYWxsZXJTa2lwcGlu
Z0RlYWRGcmFtZXMoKTsKKyAgICAgICAgcmV0dXJuIGNhbGxlciA/IGNhbGxlci0+aW5saW5lQ2Fs
bEZyYW1lIDogbnVsbHB0cjsKKyAgICB9CiAgICAgCiAgICAgVmVjdG9yPFZhbHVlUmVjb3Zlcnk+
IGFyZ3VtZW50czsgLy8gSW5jbHVkZXMgJ3RoaXMnLgogICAgIFdyaXRlQmFycmllcjxTY3JpcHRF
eGVjdXRhYmxlPiBleGVjdXRhYmxlOwogICAgIFZhbHVlUmVjb3ZlcnkgY2FsbGVlUmVjb3Zlcnk7
Ci0gICAgQ29kZU9yaWdpbiBjYWxsZXI7CisgICAgQ29kZU9yaWdpbiBkaXJlY3RDYWxsZXI7CiAK
ICAgICBzaWduZWQgc3RhY2tPZmZzZXQgOiAyODsKICAgICB1bnNpZ25lZCBraW5kIDogMzsgLy8g
cmVhbCB0eXBlIGlzIEtpbmQKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJz
dHJhY3RJbnRlcnByZXRlcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHJldmlzaW9uIDE5MDE1
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklu
bGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTU1Miw2ICsxNTUyLDEzIEBAIGJvb2wgQWJzdHJh
Y3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICBjYXNlIFJldHVybjoKICAgICAgICAg
bV9zdGF0ZS5zZXRJc1ZhbGlkKGZhbHNlKTsKICAgICAgICAgYnJlYWs7CisKKyAgICBjYXNlIFRh
aWxDYWxsOgorICAgIGNhc2UgVGFpbENhbGxWYXJhcmdzOgorICAgIGNhc2UgVGFpbENhbGxGb3J3
YXJkVmFyYXJnczoKKyAgICAgICAgY2xvYmJlcldvcmxkKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywg
Y2xvYmJlckxpbWl0KTsKKyAgICAgICAgbV9zdGF0ZS5zZXRJc1ZhbGlkKGZhbHNlKTsKKyAgICAg
ICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNhc2UgVGhyb3c6CiAgICAgY2FzZSBUaHJvd1JlZmVy
ZW5jZUVycm9yOgpAQCAtMjQ0MiwxMSArMjQ0OSwxNCBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0
ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCiAgICAgY2Fz
ZSBDYWxsOgorICAgIGNhc2UgVGFpbENhbGxJbmxpbmVkQ2FsbGVyOgogICAgIGNhc2UgQ29uc3Ry
dWN0OgogICAgIGNhc2UgQ2FsbFZhcmFyZ3M6CiAgICAgY2FzZSBDYWxsRm9yd2FyZFZhcmFyZ3M6
CisgICAgY2FzZSBUYWlsQ2FsbFZhcmFyZ3NJbmxpbmVkQ2FsbGVyOgogICAgIGNhc2UgQ29uc3Ry
dWN0VmFyYXJnczoKICAgICBjYXNlIENvbnN0cnVjdEZvcndhcmRWYXJhcmdzOgorICAgIGNhc2Ug
VGFpbENhbGxGb3J3YXJkVmFyYXJnc0lubGluZWRDYWxsZXI6CiAgICAgICAgIGNsb2JiZXJXb3Js
ZChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGNsb2JiZXJMaW1pdCk7CiAgICAgICAgIGZvck5vZGUo
bm9kZSkubWFrZUhlYXBUb3AoKTsKICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c0VsaW1pbmF0aW9uUGhhc2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzRWxpbWluYXRpb25QaGFz
ZS5jcHAJKHJldmlzaW9uIDE5MDE1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QXJndW1lbnRzRWxpbWluYXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE2Nyw2ICsx
NjcsOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBj
YXNlIENhbGxWYXJhcmdzOgogICAgICAgICAgICAgICAgIGNhc2UgQ29uc3RydWN0VmFyYXJnczoK
KyAgICAgICAgICAgICAgICBjYXNlIFRhaWxDYWxsVmFyYXJnczoKKyAgICAgICAgICAgICAgICBj
YXNlIFRhaWxDYWxsVmFyYXJnc0lubGluZWRDYWxsZXI6CiAgICAgICAgICAgICAgICAgICAgIGVz
Y2FwZShub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAgICAgICAgICAgIGVzY2FwZShub2RlLT5j
aGlsZDMoKSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtNTYwLDcgKzU2Miw5IEBA
IHByaXZhdGU6CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKICAgICAg
ICAgICAgICAgICBjYXNlIENhbGxWYXJhcmdzOgotICAgICAgICAgICAgICAgIGNhc2UgQ29uc3Ry
dWN0VmFyYXJnczogeworICAgICAgICAgICAgICAgIGNhc2UgQ29uc3RydWN0VmFyYXJnczoKKyAg
ICAgICAgICAgICAgICBjYXNlIFRhaWxDYWxsVmFyYXJnczoKKyAgICAgICAgICAgICAgICBjYXNl
IFRhaWxDYWxsVmFyYXJnc0lubGluZWRDYWxsZXI6IHsKICAgICAgICAgICAgICAgICAgICAgTm9k
ZSogY2FuZGlkYXRlID0gbm9kZS0+Y2hpbGQyKCkubm9kZSgpOwogICAgICAgICAgICAgICAgICAg
ICBpZiAoIW1fY2FuZGlkYXRlcy5jb250YWlucyhjYW5kaWRhdGUpKQogICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CkBAIC01ODUsMTYgKzU4OSw0NCBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgICAgICAgICAgICAgbV9ncmFwaC5tX3ZhckFyZ0NoaWxkcmVuLmFwcGVuZChub2RlLT5jaGls
ZDMoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBmb3IgKE5vZGUqIGFyZ3VtZW50IDogYXJn
dW1lbnRzKQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgubV92YXJBcmdDaGls
ZHJlbi5hcHBlbmQoRWRnZShhcmd1bWVudCkpOwotICAgICAgICAgICAgICAgICAgICAgICAgbm9k
ZS0+c2V0T3BBbmREZWZhdWx0RmxhZ3MoCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9k
ZS0+b3AoKSA9PSBDYWxsVmFyYXJncyA/IENhbGwgOiBDb25zdHJ1Y3QpOworICAgICAgICAgICAg
ICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CisgICAgICAgICAgICAgICAgICAgICAg
ICBjYXNlIENhbGxWYXJhcmdzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNl
dE9wQW5kRGVmYXVsdEZsYWdzKENhbGwpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBDb25zdHJ1Y3RWYXJhcmdzOgorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdzKENvbnN0
cnVjdCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgICAgICAgICBjYXNlIFRhaWxDYWxsVmFyYXJnczoKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBub2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhUYWlsQ2FsbCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFRhaWxD
YWxsVmFyYXJnc0lubGluZWRDYWxsZXI6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9k
ZS0+c2V0T3BBbmREZWZhdWx0RmxhZ3MoVGFpbENhbGxJbmxpbmVkQ2FsbGVyKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlZmF1
bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgICAg
IG5vZGUtPmNoaWxkcmVuID0gQWRqYWNlbmN5TGlzdCgKICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBBZGphY2VuY3lMaXN0OjpWYXJpYWJsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBmaXJzdENoaWxkLCBtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW4uc2l6ZSgpIC0gZmlyc3RDaGls
ZCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0T3BB
bmREZWZhdWx0RmxhZ3MoCi0gICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5vcCgpID09IENh
bGxWYXJhcmdzID8gQ2FsbEZvcndhcmRWYXJhcmdzIDogQ29uc3RydWN0Rm9yd2FyZFZhcmFyZ3Mp
OworICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgY2FzZSBDYWxsVmFyYXJnczoKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUt
PnNldE9wQW5kRGVmYXVsdEZsYWdzKENhbGxGb3J3YXJkVmFyYXJncyk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBDb25zdHJ1Y3RWYXJh
cmdzOgorICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0T3BBbmREZWZhdWx0RmxhZ3Mo
Q29uc3RydWN0Rm9yd2FyZFZhcmFyZ3MpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgICAgIGNhc2UgVGFpbENhbGxWYXJhcmdzOgorICAgICAgICAgICAg
ICAgICAgICAgICAgbm9kZS0+c2V0T3BBbmREZWZhdWx0RmxhZ3MoVGFpbENhbGxGb3J3YXJkVmFy
YXJncyk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAg
ICAgY2FzZSBUYWlsQ2FsbFZhcmFyZ3NJbmxpbmVkQ2FsbGVyOgorICAgICAgICAgICAgICAgICAg
ICAgICAgbm9kZS0+c2V0T3BBbmREZWZhdWx0RmxhZ3MoVGFpbENhbGxGb3J3YXJkVmFyYXJnc0lu
bGluZWRDYWxsZXIpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2ljQmxvY2suaAkocmV2aXNpb24gMTkw
MTUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCYXNpY0Jsb2NrLmgJKHdvcmtp
bmcgY29weSkKQEAgLTkyLDYgKzkyLDkgQEAgc3RydWN0IEJhc2ljQmxvY2sgOiBSZWZDb3VudGVk
PEJhc2ljQmxvYwogICAgICAgICAgICAgY2FzZSBCcmFuY2g6CiAgICAgICAgICAgICBjYXNlIFN3
aXRjaDoKICAgICAgICAgICAgIGNhc2UgUmV0dXJuOgorICAgICAgICAgICAgY2FzZSBUYWlsQ2Fs
bDoKKyAgICAgICAgICAgIGNhc2UgVGFpbENhbGxWYXJhcmdzOgorICAgICAgICAgICAgY2FzZSBU
YWlsQ2FsbEZvcndhcmRWYXJhcmdzOgogICAgICAgICAgICAgY2FzZSBVbnJlYWNoYWJsZToKICAg
ICAgICAgICAgICAgICByZXR1cm4gTm9kZUFuZEluZGV4KG5vZGUsIGkpOwogICAgICAgICAgICAg
Ly8gVGhlIGJpdHRlciBlbmQgY2FuIGNvbnRhaW4gUGhhbnRvbXMgYW5kIHRoZSBsaWtlLiBUaGVy
ZSB3aWxsIHByb2JhYmx5IG9ubHkgYmUgb25lIG9yIHR3byBub2RlcyBhZnRlciB0aGUgdGVybWlu
YWwuIFRoZXkgYXJlIGFsbCBuby1vcHMgYW5kIHdpbGwgbm90IGhhdmUgYW55IGNoZWNrZWQgY2hp
bGRyZW4uCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2Vy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2Rl
UGFyc2VyLmNwcAkocmV2aXNpb24gMTkwMTUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE4MywxNCArMTgzLDE0
IEBAIHByaXZhdGU6CiAgICAgICAgIE5vZGUqIGNhbGxUYXJnZXQsIGludCBhcmdDb3VudCwgaW50
IHJlZ2lzdGVyT2Zmc2V0LCBDYWxsTGlua1N0YXR1cywKICAgICAgICAgU3BlY3VsYXRlZFR5cGUg
cHJlZGljdGlvbik7CiAgICAgdm9pZCBoYW5kbGVDYWxsKAotICAgICAgICBpbnQgcmVzdWx0LCBO
b2RlVHlwZSBvcCwgSW5saW5lQ2FsbEZyYW1lOjpLaW5kLCB1bnNpZ25lZCBpbnN0cnVjdGlvblNp
emUsCisgICAgICAgIGludCByZXN1bHQsIE5vZGVUeXBlIG9wLCBDYWxsTW9kZSwgdW5zaWduZWQg
aW5zdHJ1Y3Rpb25TaXplLAogICAgICAgICBOb2RlKiBjYWxsVGFyZ2V0LCBpbnQgYXJnQ291bnQs
IGludCByZWdpc3Rlck9mZnNldCwgQ2FsbExpbmtTdGF0dXMpOwotICAgIHZvaWQgaGFuZGxlQ2Fs
bChpbnQgcmVzdWx0LCBOb2RlVHlwZSBvcCwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCwgdW5zaWdu
ZWQgaW5zdHJ1Y3Rpb25TaXplLCBpbnQgY2FsbGVlLCBpbnQgYXJnQ291bnQsIGludCByZWdpc3Rl
ck9mZnNldCk7Ci0gICAgdm9pZCBoYW5kbGVDYWxsKEluc3RydWN0aW9uKiBwYywgTm9kZVR5cGUg
b3AsIENvZGVTcGVjaWFsaXphdGlvbktpbmQpOwotICAgIHZvaWQgaGFuZGxlVmFyYXJnc0NhbGwo
SW5zdHJ1Y3Rpb24qIHBjLCBOb2RlVHlwZSBvcCwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCk7Cisg
ICAgdm9pZCBoYW5kbGVDYWxsKGludCByZXN1bHQsIE5vZGVUeXBlIG9wLCBDYWxsTW9kZSwgdW5z
aWduZWQgaW5zdHJ1Y3Rpb25TaXplLCBpbnQgY2FsbGVlLCBpbnQgYXJnQ291bnQsIGludCByZWdp
c3Rlck9mZnNldCk7CisgICAgdm9pZCBoYW5kbGVDYWxsKEluc3RydWN0aW9uKiBwYywgTm9kZVR5
cGUgb3AsIENhbGxNb2RlKTsKKyAgICB2b2lkIGhhbmRsZVZhcmFyZ3NDYWxsKEluc3RydWN0aW9u
KiBwYywgTm9kZVR5cGUgb3AsIENhbGxNb2RlKTsKICAgICB2b2lkIGVtaXRGdW5jdGlvbkNoZWNr
cyhDYWxsVmFyaWFudCwgTm9kZSogY2FsbFRhcmdldCwgVmlydHVhbFJlZ2lzdGVyIHRoaXNBcmd1
bW50KTsKICAgICB2b2lkIGVtaXRBcmd1bWVudFBoYW50b21zKGludCByZWdpc3Rlck9mZnNldCwg
aW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKTsKLSAgICB1bnNpZ25lZCBpbmxpbmluZ0Nv
c3QoQ2FsbFZhcmlhbnQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgQ29kZVNwZWNp
YWxpemF0aW9uS2luZCk7IC8vIFJldHVybiBVSU5UX01BWCBpZiBpdCdzIG5vdCBhbiBpbmxpbmlu
ZyBjYW5kaWRhdGUuIEJ5IGNvbnZlbnRpb24sIGludHJpbnNpY3MgaGF2ZSBhIGNvc3Qgb2YgMS4K
KyAgICB1bnNpZ25lZCBpbmxpbmluZ0Nvc3QoQ2FsbFZhcmlhbnQsIGludCBhcmd1bWVudENvdW50
SW5jbHVkaW5nVGhpcywgQ2FsbE1vZGUpOyAvLyBSZXR1cm4gVUlOVF9NQVggaWYgaXQncyBub3Qg
YW4gaW5saW5pbmcgY2FuZGlkYXRlLiBCeSBjb252ZW50aW9uLCBpbnRyaW5zaWNzIGhhdmUgYSBj
b3N0IG9mIDEuCiAgICAgLy8gSGFuZGxlIGlubGluaW5nLiBSZXR1cm4gdHJ1ZSBpZiBpdCBzdWNj
ZWVkZWQsIGZhbHNlIGlmIHdlIG5lZWQgdG8gcGxhbnQgYSBjYWxsLgogICAgIGJvb2wgaGFuZGxl
SW5saW5pbmcoTm9kZSogY2FsbFRhcmdldE5vZGUsIGludCByZXN1bHRPcGVyYW5kLCBjb25zdCBD
YWxsTGlua1N0YXR1cyYsIGludCByZWdpc3Rlck9mZnNldCwgVmlydHVhbFJlZ2lzdGVyIHRoaXNB
cmd1bWVudCwgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50c0FyZ3VtZW50LCB1bnNpZ25lZCBhcmd1
bWVudHNPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgdW5zaWduZWQgbmV4
dE9mZnNldCwgTm9kZVR5cGUgY2FsbE9wLCBJbmxpbmVDYWxsRnJhbWU6OktpbmQsIFNwZWN1bGF0
ZWRUeXBlIHByZWRpY3Rpb24pOwogICAgIGVudW0gQ2FsbGVyTGlua2FiaWxpdHkgeyBDYWxsZXJE
b2VzTm9ybWFsTGlua2luZywgQ2FsbGVyTGlua3NNYW51YWxseSB9OwpAQCAtNjQ4LDYgKzY0OCwx
MSBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gbV9pbmxpbmVTdGFja1RvcC0+bV9pbmxpbmVD
YWxsRnJhbWU7CiAgICAgfQogCisgICAgYm9vbCBhbGxJbmxpbmVGcmFtZXNBcmVUYWlsQ2FsbHMo
KQorICAgIHsKKyAgICAgICAgcmV0dXJuICFpbmxpbmVDYWxsRnJhbWUoKSB8fCAhaW5saW5lQ2Fs
bEZyYW1lKCktPmdldENhbGxlclNraXBwaW5nRGVhZEZyYW1lcygpOworICAgIH0KKwogICAgIENv
ZGVPcmlnaW4gY3VycmVudENvZGVPcmlnaW4oKQogICAgIHsKICAgICAgICAgcmV0dXJuIENvZGVP
cmlnaW4obV9jdXJyZW50SW5kZXgsIGlubGluZUNhbGxGcmFtZSgpKTsKQEAgLTczNiw3ICs3NDEs
NyBAQCBwcml2YXRlOgogICAgIAogICAgIE5vZGUqIGFkZENhbGxXaXRob3V0U2V0dGluZ1Jlc3Vs
dCgKICAgICAgICAgTm9kZVR5cGUgb3AsIE9wSW5mbyBvcEluZm8sIE5vZGUqIGNhbGxlZSwgaW50
IGFyZ0NvdW50LCBpbnQgcmVnaXN0ZXJPZmZzZXQsCi0gICAgICAgIFNwZWN1bGF0ZWRUeXBlIHBy
ZWRpY3Rpb24pCisgICAgICAgIE9wSW5mbyBwcmVkaWN0aW9uKQogICAgIHsKICAgICAgICAgYWRk
VmFyQXJnQ2hpbGQoY2FsbGVlKTsKICAgICAgICAgc2l6ZV90IGZyYW1lU2l6ZSA9IEpTU3RhY2s6
OkNhbGxGcmFtZUhlYWRlclNpemUgKyBhcmdDb3VudDsKQEAgLTc0OSwxNSArNzU0LDIyIEBAIHBy
aXZhdGU6CiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgYXJnQ291bnQ7ICsraSkKICAgICAg
ICAgICAgIGFkZFZhckFyZ0NoaWxkKGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpLCBy
ZWdpc3Rlck9mZnNldCkpKTsKIAotICAgICAgICByZXR1cm4gYWRkVG9HcmFwaChOb2RlOjpWYXJB
cmcsIG9wLCBvcEluZm8sIE9wSW5mbyhwcmVkaWN0aW9uKSk7CisgICAgICAgIHJldHVybiBhZGRU
b0dyYXBoKE5vZGU6OlZhckFyZywgb3AsIG9wSW5mbywgcHJlZGljdGlvbik7CiAgICAgfQogICAg
IAogICAgIE5vZGUqIGFkZENhbGwoCiAgICAgICAgIGludCByZXN1bHQsIE5vZGVUeXBlIG9wLCBP
cEluZm8gb3BJbmZvLCBOb2RlKiBjYWxsZWUsIGludCBhcmdDb3VudCwgaW50IHJlZ2lzdGVyT2Zm
c2V0LAogICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uKQogICAgIHsKKyAgICAgICAg
aWYgKG9wID09IFRhaWxDYWxsKSB7CisgICAgICAgICAgICBpZiAoYWxsSW5saW5lRnJhbWVzQXJl
VGFpbENhbGxzKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIGFkZENhbGxXaXRob3V0U2V0dGlu
Z1Jlc3VsdChvcCwgT3BJbmZvKCksIGNhbGxlZSwgYXJnQ291bnQsIHJlZ2lzdGVyT2Zmc2V0LCBP
cEluZm8oKSk7CisgICAgICAgICAgICBvcCA9IFRhaWxDYWxsSW5saW5lZENhbGxlcjsKKyAgICAg
ICAgfQorCisKICAgICAgICAgTm9kZSogY2FsbCA9IGFkZENhbGxXaXRob3V0U2V0dGluZ1Jlc3Vs
dCgKLSAgICAgICAgICAgIG9wLCBvcEluZm8sIGNhbGxlZSwgYXJnQ291bnQsIHJlZ2lzdGVyT2Zm
c2V0LCBwcmVkaWN0aW9uKTsKKyAgICAgICAgICAgIG9wLCBvcEluZm8sIGNhbGxlZSwgYXJnQ291
bnQsIHJlZ2lzdGVyT2Zmc2V0LCBPcEluZm8ocHJlZGljdGlvbikpOwogICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIgcmVzdWx0UmVnKHJlc3VsdCk7CiAgICAgICAgIGlmIChyZXN1bHRSZWcuaXNWYWxp
ZCgpKQogICAgICAgICAgICAgc2V0KHJlc3VsdFJlZywgY2FsbCk7CkBAIC03NzYsMTQgKzc4OCw2
MiBAQCBwcml2YXRlOgogICAgIAogICAgIFNwZWN1bGF0ZWRUeXBlIGdldFByZWRpY3Rpb25XaXRo
b3V0T1NSRXhpdCh1bnNpZ25lZCBieXRlY29kZUluZGV4KQogICAgIHsKLSAgICAgICAgQ29uY3Vy
cmVudEpJVExvY2tlciBsb2NrZXIobV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5t
X2xvY2spOwotICAgICAgICByZXR1cm4gbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2Nr
LT52YWx1ZVByb2ZpbGVQcmVkaWN0aW9uRm9yQnl0ZWNvZGVPZmZzZXQobG9ja2VyLCBieXRlY29k
ZUluZGV4KTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbjsKKyAgICAgICAgQ29k
ZUJsb2NrKiBwcm9maWxlZEJsb2NrID0gbnVsbHB0cjsKKworICAgICAgICB7CisgICAgICAgICAg
ICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVk
QmxvY2stPm1fbG9jayk7CisgICAgICAgICAgICBwcmVkaWN0aW9uID0gbV9pbmxpbmVTdGFja1Rv
cC0+bV9wcm9maWxlZEJsb2NrLT52YWx1ZVByb2ZpbGVQcmVkaWN0aW9uRm9yQnl0ZWNvZGVPZmZz
ZXQobG9ja2VyLCBieXRlY29kZUluZGV4KTsKKworICAgICAgICAgICAgaWYgKHByZWRpY3Rpb24g
PT0gU3BlY05vbmUpIHsKKyAgICAgICAgICAgICAgICAvLyBJZiB3ZSBoYXZlIG5vIGluZm9ybWF0
aW9uIGFib3V0IHRoZSB2YWx1ZXMgdGhpcworICAgICAgICAgICAgICAgIC8vIG5vZGUgZ2VuZXJh
dGVzLCB3ZSBjaGVjayBpZiBieSBhbnkgY2hhbmNlIGl0IGlzCisgICAgICAgICAgICAgICAgLy8g
YSB0YWlsIGNhbGwgb3Bjb2RlLiBJbiB0aGF0IGNhc2UsIHdlIHdhbGsgdXAgdGhlCisgICAgICAg
ICAgICAgICAgLy8gaW5saW5lIGZyYW1lcyB0byBmaW5kIGEgY2FsbCBoaWdoZXIgaW4gdGhlIGNh
bGwKKyAgICAgICAgICAgICAgICAvLyBjaGFpbiBhbmQgdXNlIGl0cyBwcmVkaWN0aW9uLiBJZiB3
ZSBvbmx5IGhhdmUKKyAgICAgICAgICAgICAgICAvLyBpbmxpbmVkIHRhaWwgY2FsbCBmcmFtZXMs
IHdlIHVzZSBTcGVjRnVsbFRvcAorICAgICAgICAgICAgICAgIC8vIHRvIGF2b2lkIGEgc3B1cmlv
dXMgT1NSIGV4aXQuCisgICAgICAgICAgICAgICAgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uID0g
bV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5pbnN0cnVjdGlvbnMoKS5iZWdpbigp
ICsgYnl0ZWNvZGVJbmRleDsKKyAgICAgICAgICAgICAgICBPcGNvZGVJRCBvcGNvZGVJRCA9IG1f
dm0tPmludGVycHJldGVyLT5nZXRPcGNvZGVJRChpbnN0cnVjdGlvbi0+dS5vcGNvZGUpOworCisg
ICAgICAgICAgICAgICAgc3dpdGNoIChvcGNvZGVJRCkgeworICAgICAgICAgICAgICAgIGNhc2Ug
b3BfdGFpbF9jYWxsOgorICAgICAgICAgICAgICAgIGNhc2Ugb3BfdGFpbF9jYWxsX3ZhcmFyZ3M6
IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUoKSkgeworICAgICAg
ICAgICAgICAgICAgICAgICAgcHJlZGljdGlvbiA9IFNwZWNGdWxsVG9wOworICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgQ29kZU9yaWdpbiogY29kZU9yaWdpbiA9IGlubGluZUNhbGxGcmFtZSgpLT5nZXRDYWxs
ZXJTa2lwcGluZ0RlYWRGcmFtZXMoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFjb2RlT3Jp
Z2luKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBwcmVkaWN0aW9uID0gU3BlY0Z1bGxUb3A7
CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQor
ICAgICAgICAgICAgICAgICAgICBJbmxpbmVTdGFja0VudHJ5KiBzdGFjayA9IG1faW5saW5lU3Rh
Y2tUb3A7CisgICAgICAgICAgICAgICAgICAgIHdoaWxlIChzdGFjay0+bV9pbmxpbmVDYWxsRnJh
bWUgIT0gY29kZU9yaWdpbi0+aW5saW5lQ2FsbEZyYW1lKQorICAgICAgICAgICAgICAgICAgICAg
ICAgc3RhY2sgPSBzdGFjay0+bV9jYWxsZXI7CisgICAgICAgICAgICAgICAgICAgIGJ5dGVjb2Rl
SW5kZXggPSBjb2RlT3JpZ2luLT5ieXRlY29kZUluZGV4OworICAgICAgICAgICAgICAgICAgICBw
cm9maWxlZEJsb2NrID0gc3RhY2stPm1fcHJvZmlsZWRCbG9jazsKKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKHByb2ZpbGVkQmxvY2spIHsKKyAgICAgICAg
ICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKHByb2ZpbGVkQmxvY2stPm1fbG9jayk7Cisg
ICAgICAgICAgICBwcmVkaWN0aW9uID0gcHJvZmlsZWRCbG9jay0+dmFsdWVQcm9maWxlUHJlZGlj
dGlvbkZvckJ5dGVjb2RlT2Zmc2V0KGxvY2tlciwgYnl0ZWNvZGVJbmRleCk7CisgICAgICAgIH0K
KworICAgICAgICByZXR1cm4gcHJlZGljdGlvbjsKICAgICB9CiAKICAgICBTcGVjdWxhdGVkVHlw
ZSBnZXRQcmVkaWN0aW9uKHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCiAgICAgewogICAgICAgICBT
cGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0gZ2V0UHJlZGljdGlvbldpdGhvdXRPU1JFeGl0KGJ5
dGVjb2RlSW5kZXgpOwotICAgICAgICAKKwogICAgICAgICBpZiAocHJlZGljdGlvbiA9PSBTcGVj
Tm9uZSkgewogICAgICAgICAgICAgLy8gV2UgaGF2ZSBubyBpbmZvcm1hdGlvbiBhYm91dCB3aGF0
IHZhbHVlcyB0aGlzIG5vZGUgZ2VuZXJhdGVzLiBHaXZlIHVwCiAgICAgICAgICAgICAvLyBvbiBl
eGVjdXRpbmcgdGhpcyBjb2RlLCBzaW5jZSB3ZSdyZSBsaWtlbHkgdG8gZG8gbW9yZSBkYW1hZ2Ug
dGhhbiBnb29kLgpAQCAtMTA2OSwxNiArMTEyOSwxNyBAQCBwcml2YXRlOgogICAgIG1fZXhpdE9L
ID0gZmFsc2U7IFwKICAgICByZXR1cm4gc2hvdWxkQ29udGludWVQYXJzaW5nCiAKLXZvaWQgQnl0
ZUNvZGVQYXJzZXI6OmhhbmRsZUNhbGwoSW5zdHJ1Y3Rpb24qIHBjLCBOb2RlVHlwZSBvcCwgQ29k
ZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQordm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlQ2Fs
bChJbnN0cnVjdGlvbiogcGMsIE5vZGVUeXBlIG9wLCBDYWxsTW9kZSBjYWxsTW9kZSkKIHsKICAg
ICBBU1NFUlQoT1BDT0RFX0xFTkdUSChvcF9jYWxsKSA9PSBPUENPREVfTEVOR1RIKG9wX2NvbnN0
cnVjdCkpOworICAgIEFTU0VSVChPUENPREVfTEVOR1RIKG9wX2NhbGwpID09IE9QQ09ERV9MRU5H
VEgob3BfdGFpbF9jYWxsKSk7CiAgICAgaGFuZGxlQ2FsbCgKLSAgICAgICAgcGNbMV0udS5vcGVy
YW5kLCBvcCwga2luZCwgT1BDT0RFX0xFTkdUSChvcF9jYWxsKSwKKyAgICAgICAgcGNbMV0udS5v
cGVyYW5kLCBvcCwgY2FsbE1vZGUsIE9QQ09ERV9MRU5HVEgob3BfY2FsbCksCiAgICAgICAgIHBj
WzJdLnUub3BlcmFuZCwgcGNbM10udS5vcGVyYW5kLCAtcGNbNF0udS5vcGVyYW5kKTsKIH0KIAog
dm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlQ2FsbCgKLSAgICBpbnQgcmVzdWx0LCBOb2RlVHlw
ZSBvcCwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kLCB1bnNpZ25lZCBpbnN0cnVjdGlvblNp
emUsCisgICAgaW50IHJlc3VsdCwgTm9kZVR5cGUgb3AsIENhbGxNb2RlIGNhbGxNb2RlLCB1bnNp
Z25lZCBpbnN0cnVjdGlvblNpemUsCiAgICAgaW50IGNhbGxlZSwgaW50IGFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzLCBpbnQgcmVnaXN0ZXJPZmZzZXQpCiB7CiAgICAgTm9kZSogY2FsbFRhcmdl
dCA9IGdldChWaXJ0dWFsUmVnaXN0ZXIoY2FsbGVlKSk7CkBAIC0xMDg4LDE3ICsxMTQ5LDE3IEBA
IHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUNhbGwoCiAgICAgICAgIG1faW5saW5lU3RhY2tU
b3AtPm1fY2FsbExpbmtJbmZvcywgbV9jYWxsQ29udGV4dE1hcCk7CiAgICAgCiAgICAgaGFuZGxl
Q2FsbCgKLSAgICAgICAgcmVzdWx0LCBvcCwgSW5saW5lQ2FsbEZyYW1lOjpraW5kRm9yKGtpbmQp
LCBpbnN0cnVjdGlvblNpemUsIGNhbGxUYXJnZXQsCisgICAgICAgIHJlc3VsdCwgb3AsIGNhbGxN
b2RlLCBpbnN0cnVjdGlvblNpemUsIGNhbGxUYXJnZXQsCiAgICAgICAgIGFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzLCByZWdpc3Rlck9mZnNldCwgY2FsbExpbmtTdGF0dXMpOwogfQogICAgIAog
dm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlQ2FsbCgKLSAgICBpbnQgcmVzdWx0LCBOb2RlVHlw
ZSBvcCwgSW5saW5lQ2FsbEZyYW1lOjpLaW5kIGtpbmQsIHVuc2lnbmVkIGluc3RydWN0aW9uU2l6
ZSwKKyAgICBpbnQgcmVzdWx0LCBOb2RlVHlwZSBvcCwgQ2FsbE1vZGUgY2FsbE1vZGUsIHVuc2ln
bmVkIGluc3RydWN0aW9uU2l6ZSwKICAgICBOb2RlKiBjYWxsVGFyZ2V0LCBpbnQgYXJndW1lbnRD
b3VudEluY2x1ZGluZ1RoaXMsIGludCByZWdpc3Rlck9mZnNldCwKICAgICBDYWxsTGlua1N0YXR1
cyBjYWxsTGlua1N0YXR1cykKIHsKICAgICBoYW5kbGVDYWxsKAotICAgICAgICByZXN1bHQsIG9w
LCBraW5kLCBpbnN0cnVjdGlvblNpemUsIGNhbGxUYXJnZXQsIGFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzLAorICAgICAgICByZXN1bHQsIG9wLCBJbmxpbmVDYWxsRnJhbWU6OmtpbmRGb3IoY2Fs
bE1vZGUpLCBpbnN0cnVjdGlvblNpemUsIGNhbGxUYXJnZXQsIGFyZ3VtZW50Q291bnRJbmNsdWRp
bmdUaGlzLAogICAgICAgICByZWdpc3Rlck9mZnNldCwgY2FsbExpbmtTdGF0dXMsIGdldFByZWRp
Y3Rpb24oKSk7CiB9CiAKQEAgLTExMTgsNyArMTE3OSw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6
OmhhbmRsZUNhbGwoCiAgICAgaWYgKCFjYWxsTGlua1N0YXR1cy5jYW5PcHRpbWl6ZSgpKSB7CiAg
ICAgICAgIC8vIE9kZGx5LCB0aGlzIGNvbmZsYXRlcyBjYWxscyB0aGF0IGhhdmVuJ3QgZXhlY3V0
ZWQgd2l0aCBjYWxscyB0aGF0IGJlaGF2ZWQgc3VmZmljaWVudGx5IHBvbHltb3JwaGljYWxseQog
ICAgICAgICAvLyB0aGF0IHdlIGNhbm5vdCBvcHRpbWl6ZSB0aGVtLgotICAgICAgICAKKwogICAg
ICAgICBhZGRDYWxsKHJlc3VsdCwgb3AsIE9wSW5mbygpLCBjYWxsVGFyZ2V0LCBhcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcywgcmVnaXN0ZXJPZmZzZXQsIHByZWRpY3Rpb24pOwogICAgICAgICBy
ZXR1cm47CiAgICAgfQpAQCAtMTEzNiw5ICsxMTk3LDEwIEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6
OmhhbmRsZUNhbGwoCiAgICAgYWRkQ2FsbChyZXN1bHQsIG9wLCBjYWxsT3BJbmZvLCBjYWxsVGFy
Z2V0LCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgcmVnaXN0ZXJPZmZzZXQsIHByZWRpY3Rp
b24pOwogfQogCi12b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVWYXJhcmdzQ2FsbChJbnN0cnVj
dGlvbiogcGMsIE5vZGVUeXBlIG9wLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCit2b2lk
IEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVWYXJhcmdzQ2FsbChJbnN0cnVjdGlvbiogcGMsIE5vZGVU
eXBlIG9wLCBDYWxsTW9kZSBjYWxsTW9kZSkKIHsKICAgICBBU1NFUlQoT1BDT0RFX0xFTkdUSChv
cF9jYWxsX3ZhcmFyZ3MpID09IE9QQ09ERV9MRU5HVEgob3BfY29uc3RydWN0X3ZhcmFyZ3MpKTsK
KyAgICBBU1NFUlQoT1BDT0RFX0xFTkdUSChvcF9jYWxsX3ZhcmFyZ3MpID09IE9QQ09ERV9MRU5H
VEgob3BfdGFpbF9jYWxsX3ZhcmFyZ3MpKTsKICAgICAKICAgICBpbnQgcmVzdWx0ID0gcGNbMV0u
dS5vcGVyYW5kOwogICAgIGludCBjYWxsZWUgPSBwY1syXS51Lm9wZXJhbmQ7CkBAIC0xMTYxLDcg
KzEyMjMsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVWYXJhcmdzQ2FsbChJCiAgICAg
ICAgIGRhdGFMb2coIiAgICBWYXJhcmdzIGNhbGwgbGluayBzdGF0dXMgYXQgIiwgY3VycmVudENv
ZGVPcmlnaW4oKSwgIjogIiwgY2FsbExpbmtTdGF0dXMsICJcbiIpOwogICAgIAogICAgIGlmIChj
YWxsTGlua1N0YXR1cy5jYW5PcHRpbWl6ZSgpCi0gICAgICAgICYmIGhhbmRsZUlubGluaW5nKGNh
bGxUYXJnZXQsIHJlc3VsdCwgY2FsbExpbmtTdGF0dXMsIGZpcnN0RnJlZVJlZywgVmlydHVhbFJl
Z2lzdGVyKHRoaXNSZWcpLCBWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRzKSwgZmlyc3RWYXJBcmdP
ZmZzZXQsIDAsIG1fY3VycmVudEluZGV4ICsgT1BDT0RFX0xFTkdUSChvcF9jYWxsX3ZhcmFyZ3Mp
LCBvcCwgSW5saW5lQ2FsbEZyYW1lOjp2YXJhcmdzS2luZEZvcihraW5kKSwgcHJlZGljdGlvbikp
IHsKKyAgICAgICAgJiYgaGFuZGxlSW5saW5pbmcoY2FsbFRhcmdldCwgcmVzdWx0LCBjYWxsTGlu
a1N0YXR1cywgZmlyc3RGcmVlUmVnLCBWaXJ0dWFsUmVnaXN0ZXIodGhpc1JlZyksIFZpcnR1YWxS
ZWdpc3Rlcihhcmd1bWVudHMpLCBmaXJzdFZhckFyZ09mZnNldCwgMCwgbV9jdXJyZW50SW5kZXgg
KyBPUENPREVfTEVOR1RIKG9wX2NhbGxfdmFyYXJncyksIG9wLCBJbmxpbmVDYWxsRnJhbWU6OnZh
cmFyZ3NLaW5kRm9yKGNhbGxNb2RlKSwgcHJlZGljdGlvbikpIHsKICAgICAgICAgaWYgKG1fZ3Jh
cGguY29tcGlsYXRpb24oKSkKICAgICAgICAgICAgIG1fZ3JhcGguY29tcGlsYXRpb24oKS0+bm90
aWNlSW5saW5lZENhbGwoKTsKICAgICAgICAgcmV0dXJuOwpAQCAtMTE3MSw3ICsxMjMzLDE1IEBA
IHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVZhcmFyZ3NDYWxsKEkKICAgICBkYXRhLT5maXJz
dFZhckFyZ09mZnNldCA9IGZpcnN0VmFyQXJnT2Zmc2V0OwogICAgIAogICAgIE5vZGUqIHRoaXND
aGlsZCA9IGdldChWaXJ0dWFsUmVnaXN0ZXIodGhpc1JlZykpOwotICAgIAorCisgICAgaWYgKG9w
ID09IFRhaWxDYWxsVmFyYXJncykgeworICAgICAgICBpZiAoYWxsSW5saW5lRnJhbWVzQXJlVGFp
bENhbGxzKCkpIHsKKyAgICAgICAgICAgIGFkZFRvR3JhcGgob3AsIE9wSW5mbyhkYXRhKSwgT3BJ
bmZvKCksIGNhbGxUYXJnZXQsIGdldChWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRzKSksIHRoaXND
aGlsZCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgb3AgPSBUYWls
Q2FsbFZhcmFyZ3NJbmxpbmVkQ2FsbGVyOworICAgIH0KKwogICAgIE5vZGUqIGNhbGwgPSBhZGRU
b0dyYXBoKG9wLCBPcEluZm8oZGF0YSksIE9wSW5mbyhwcmVkaWN0aW9uKSwgY2FsbFRhcmdldCwg
Z2V0KFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudHMpKSwgdGhpc0NoaWxkKTsKICAgICBWaXJ0dWFs
UmVnaXN0ZXIgcmVzdWx0UmVnKHJlc3VsdCk7CiAgICAgaWYgKHJlc3VsdFJlZy5pc1ZhbGlkKCkp
CkBAIC0xMjA2LDggKzEyNzYsOSBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjplbWl0QXJndW1lbnRQ
aGFudG9tCiAgICAgICAgIGFkZFRvR3JhcGgoUGhhbnRvbSwgZ2V0KHZpcnR1YWxSZWdpc3RlckZv
ckFyZ3VtZW50KGksIHJlZ2lzdGVyT2Zmc2V0KSkpOwogfQogCi11bnNpZ25lZCBCeXRlQ29kZVBh
cnNlcjo6aW5saW5pbmdDb3N0KENhbGxWYXJpYW50IGNhbGxlZSwgaW50IGFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCit1bnNpZ25lZCBCeXRl
Q29kZVBhcnNlcjo6aW5saW5pbmdDb3N0KENhbGxWYXJpYW50IGNhbGxlZSwgaW50IGFyZ3VtZW50
Q291bnRJbmNsdWRpbmdUaGlzLCBDYWxsTW9kZSBjYWxsTW9kZSkKIHsKKyAgICBDb2RlU3BlY2lh
bGl6YXRpb25LaW5kIGtpbmQgPSBzcGVjaWFsaXphdGlvbktpbmRGb3IoY2FsbE1vZGUpOwogICAg
IGlmICh2ZXJib3NlKQogICAgICAgICBkYXRhTG9nKCJDb25zaWRlcmluZyBpbmxpbmluZyAiLCBj
YWxsZWUsICIgaW50byAiLCBjdXJyZW50Q29kZU9yaWdpbigpLCAiXG4iKTsKICAgICAKQEAgLTEy
NDksNyArMTMyMCw3IEBAIHVuc2lnbmVkIEJ5dGVDb2RlUGFyc2VyOjppbmxpbmluZ0Nvc3QoQ2EK
ICAgICBDYXBhYmlsaXR5TGV2ZWwgY2FwYWJpbGl0eUxldmVsID0gaW5saW5lRnVuY3Rpb25Gb3JD
YXBhYmlsaXR5TGV2ZWwoCiAgICAgICAgIGNvZGVCbG9jaywga2luZCwgY2FsbGVlLmlzQ2xvc3Vy
ZUNhbGwoKSk7CiAgICAgaWYgKHZlcmJvc2UpIHsKLSAgICAgICAgZGF0YUxvZygiICAgIEtpbmQ6
ICIsIGtpbmQsICJcbiIpOworICAgICAgICBkYXRhTG9nKCIgICAgQ2FsbCBtb2RlOiAiLCBjYWxs
TW9kZSwgIlxuIik7CiAgICAgICAgIGRhdGFMb2coIiAgICBJcyBjbG9zdXJlIGNhbGw6ICIsIGNh
bGxlZS5pc0Nsb3N1cmVDYWxsKCksICJcbiIpOwogICAgICAgICBkYXRhTG9nKCIgICAgQ2FwYWJp
bGl0eSBsZXZlbDogIiwgY2FwYWJpbGl0eUxldmVsLCAiXG4iKTsKICAgICAgICAgZGF0YUxvZygi
ICAgIE1pZ2h0IGlubGluZSBmdW5jdGlvbjogIiwgbWlnaHRJbmxpbmVGdW5jdGlvbkZvcihjb2Rl
QmxvY2ssIGtpbmQpLCAiXG4iKTsKQEAgLTEzMjAsNyArMTM5MSw3IEBAIHZvaWQgQnl0ZUNvZGVQ
YXJzZXI6OmlubGluZUNhbGwoTm9kZSogY2EKIHsKICAgICBDb2RlU3BlY2lhbGl6YXRpb25LaW5k
IHNwZWNpYWxpemF0aW9uS2luZCA9IElubGluZUNhbGxGcmFtZTo6c3BlY2lhbGl6YXRpb25LaW5k
Rm9yKGtpbmQpOwogICAgIAotICAgIEFTU0VSVChpbmxpbmluZ0Nvc3QoY2FsbGVlLCBhcmd1bWVu
dENvdW50SW5jbHVkaW5nVGhpcywgc3BlY2lhbGl6YXRpb25LaW5kKSAhPSBVSU5UX01BWCk7Cisg
ICAgQVNTRVJUKGlubGluaW5nQ29zdChjYWxsZWUsIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlz
LCBJbmxpbmVDYWxsRnJhbWU6OmNhbGxNb2RlRm9yKGtpbmQpKSAhPSBVSU5UX01BWCk7CiAgICAg
CiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsZWUuZnVuY3Rpb25FeGVjdXRhYmxlKCkt
PmJhc2VsaW5lQ29kZUJsb2NrRm9yKHNwZWNpYWxpemF0aW9uS2luZCk7CiAgICAgaW5zZXJ0Q2hl
Y2tzKGNvZGVCbG9jayk7CkBAIC0xNDI0LDcgKzE0OTUsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2Vy
OjppbmxpbmVDYWxsKE5vZGUqIGNhCiAgICAgICAgIG1fY3VycmVudEJsb2NrID0gbV9ncmFwaC5s
YXN0QmxvY2soKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICAKKwogICAgIGlmIChPcHRp
b25zOjp2ZXJib3NlREZHQnl0ZUNvZGVQYXJzaW5nKCkpCiAgICAgICAgIGRhdGFMb2coIiAgICBD
cmVhdGluZyBuZXcgYmxvY2sgYWZ0ZXIgaW5saW5pbmcuXG4iKTsKIApAQCAtMTUzMSw3ICsxNjAy
LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6YXR0ZW1wdFRvSW5saW5lQ2FsbAogICAgICAgICB9
CiAgICAgfQogICAgIAotICAgIHVuc2lnbmVkIG15SW5saW5pbmdDb3N0ID0gaW5saW5pbmdDb3N0
KGNhbGxlZSwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIHNwZWNpYWxpemF0aW9uS2luZCk7
CisgICAgdW5zaWduZWQgbXlJbmxpbmluZ0Nvc3QgPSBpbmxpbmluZ0Nvc3QoY2FsbGVlLCBhcmd1
bWVudENvdW50SW5jbHVkaW5nVGhpcywgSW5saW5lQ2FsbEZyYW1lOjpjYWxsTW9kZUZvcihraW5k
KSk7CiAgICAgaWYgKG15SW5saW5pbmdDb3N0ID4gaW5saW5pbmdCYWxhbmNlKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKQEAgLTMwMDMsNyArMzA3NCwxMSBAQCBib29sIEJ5dGVDb2RlUGFyc2Vy
OjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAvLyBsb2dpYyByZWxpZXMgb24gZXZl
cnkgYnl0ZWNvZGUgcmVzdWx0aW5nIGluIG9uZSBvciBtb3JlIG5vZGVzLCB3aGljaCB3b3VsZAog
ICAgICAgICAgICAgLy8gYmUgdHJ1ZSBhbnl3YXkgZXhjZXB0IGZvciBvcF9sb29wX2hpbnQsIHdo
aWNoIGVtaXRzIGEgUGhhbnRvbSB0byBmb3JjZSB0aGlzCiAgICAgICAgICAgICAvLyB0byBiZSB0
cnVlLgotICAgICAgICAgICAgaWYgKCFtX2N1cnJlbnRCbG9jay0+aXNFbXB0eSgpKQorICAgICAg
ICAgICAgLy8gV2UgYWxzbyBkb24ndCBpbnNlcnQgYSBqdW1wIGlmIHRoZSBibG9jayBhbHJlYWR5
IGhhcyBhIHRlcm1pbmFsLAorICAgICAgICAgICAgLy8gd2hpY2ggY291bGQgaGFwcGVuIGFmdGVy
IGEgdGFpbCBjYWxsLgorICAgICAgICAgICAgQVNTRVJUKG1fY3VycmVudEJsb2NrLT5pc0VtcHR5
KCkgfHwgIW1fY3VycmVudEJsb2NrLT50ZXJtaW5hbCgpCisgICAgICAgICAgICAgICAgfHwgbV9j
dXJyZW50QmxvY2stPnRlcm1pbmFsKCktPm9wKCkgPT0gVGFpbENhbGwgfHwgbV9jdXJyZW50Qmxv
Y2stPnRlcm1pbmFsKCktPm9wKCkgPT0gVGFpbENhbGxWYXJhcmdzKTsKKyAgICAgICAgICAgIGlm
ICghbV9jdXJyZW50QmxvY2stPmlzRW1wdHkoKSAmJiAhbV9jdXJyZW50QmxvY2stPnRlcm1pbmFs
KCkpCiAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChKdW1wLCBPcEluZm8obV9jdXJyZW50SW5k
ZXgpKTsKICAgICAgICAgICAgIHJldHVybiBzaG91bGRDb250aW51ZVBhcnNpbmc7CiAgICAgICAg
IH0KQEAgLTM1ODUsNiArMzY2MCwxMiBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2Nr
KHVuc2lnbmVkCiAgICAgICAgIC8vID09PSBCbG9jayB0ZXJtaW5hdG9ycy4gPT09CiAKICAgICAg
ICAgY2FzZSBvcF9qbXA6IHsKKyAgICAgICAgICAgIGlmIChtX2N1cnJlbnRCbG9jay0+dGVybWlu
YWwoKSkgeworICAgICAgICAgICAgICAgIC8vIFdlIGNvdWxkIGJlIHRoZSBkdW1teSBqdW1wIHRv
IGEgcmV0dXJuIGFmdGVyIGEgbm9uLWlubGluZWQsIG5vbi1lbXVsYXRlZCB0YWlsIGNhbGwgaW4g
YSB0ZXJuYXJ5IG9wZXJhdG9yCisgICAgICAgICAgICAgICAgTm9kZSogdGVybWluYWwgPSBtX2N1
cnJlbnRCbG9jay0+dGVybWluYWwoKTsKKyAgICAgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKHRl
cm1pbmFsLCB0ZXJtaW5hbC0+b3AoKSA9PSBUYWlsQ2FsbCB8fCB0ZXJtaW5hbC0+b3AoKSA9PSBU
YWlsQ2FsbFZhcmFyZ3MpOworICAgICAgICAgICAgICAgIExBU1RfT1BDT0RFKG9wX3JldCk7Cisg
ICAgICAgICAgICB9CiAgICAgICAgICAgICBpbnQgcmVsYXRpdmVPZmZzZXQgPSBjdXJyZW50SW5z
dHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwogICAgICAgICAgICAgYWRkVG9HcmFwaChKdW1wLCBPcElu
Zm8obV9jdXJyZW50SW5kZXggKyByZWxhdGl2ZU9mZnNldCkpOwogICAgICAgICAgICAgaWYgKHJl
bGF0aXZlT2Zmc2V0IDw9IDApCkBAIC0zNzU2LDYgKzM4MzcsMTIgQEAgYm9vbCBCeXRlQ29kZVBh
cnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBvcF9y
ZXQ6CisgICAgICAgICAgICBpZiAobV9jdXJyZW50QmxvY2stPnRlcm1pbmFsKCkpIHsKKyAgICAg
ICAgICAgICAgICAvLyBXZSBjb3VsZCBiZSB0aGUgZHVtbXkgcmV0dXJuIGFmdGVyIGEgbm9uLWlu
bGluZWQsIG5vbi1lbXVsYXRlZCB0YWlsIGNhbGwKKyAgICAgICAgICAgICAgICBOb2RlKiB0ZXJt
aW5hbCA9IG1fY3VycmVudEJsb2NrLT50ZXJtaW5hbCgpOworICAgICAgICAgICAgICAgIEFTU0VS
VF9VTlVTRUQodGVybWluYWwsIHRlcm1pbmFsLT5vcCgpID09IFRhaWxDYWxsIHx8IHRlcm1pbmFs
LT5vcCgpID09IFRhaWxDYWxsVmFyYXJncyk7CisgICAgICAgICAgICAgICAgTEFTVF9PUENPREUo
b3BfcmV0KTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUo
KSkgewogICAgICAgICAgICAgICAgIGZsdXNoRm9yUmV0dXJuKCk7CiAgICAgICAgICAgICAgICAg
aWYgKG1faW5saW5lU3RhY2tUb3AtPm1fcmV0dXJuVmFsdWUuaXNWYWxpZCgpKQpAQCAtMzgwNywy
MiArMzg5NCwzNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAg
ICAgICAgICAgICBORVhUX09QQ09ERShvcF9jYXRjaCk7CiAgICAgICAgICAgICAKICAgICAgICAg
Y2FzZSBvcF9jYWxsOgotICAgICAgICAgICAgaGFuZGxlQ2FsbChjdXJyZW50SW5zdHJ1Y3Rpb24s
IENhbGwsIENvZGVGb3JDYWxsKTsKKyAgICAgICAgICAgIGhhbmRsZUNhbGwoY3VycmVudEluc3Ry
dWN0aW9uLCBDYWxsLCBDYWxsTW9kZTo6UmVndWxhcik7CiAgICAgICAgICAgICAvLyBWZXJpZnkg
dGhhdCBoYW5kbGVDYWxsKCksIHdoaWNoIGNvdWxkIGhhdmUgaW5saW5lZCB0aGUgY2FsbGVlLCBk
aWRuJ3QgdHJhc2ggbV9jdXJyZW50SW5zdHJ1Y3Rpb24KICAgICAgICAgICAgIEFTU0VSVChtX2N1
cnJlbnRJbnN0cnVjdGlvbiA9PSBjdXJyZW50SW5zdHJ1Y3Rpb24pOwogICAgICAgICAgICAgTkVY
VF9PUENPREUob3BfY2FsbCk7Ci0gICAgICAgICAgICAKKworICAgICAgICBjYXNlIG9wX3RhaWxf
Y2FsbDoKKyAgICAgICAgICAgIGZsdXNoRm9yUmV0dXJuKCk7CisgICAgICAgICAgICBoYW5kbGVD
YWxsKGN1cnJlbnRJbnN0cnVjdGlvbiwgVGFpbENhbGwsIENhbGxNb2RlOjpUYWlsKTsKKyAgICAg
ICAgICAgIC8vIFZlcmlmeSB0aGF0IGhhbmRsZUNhbGwoKSwgd2hpY2ggY291bGQgaGF2ZSBpbmxp
bmVkIHRoZSBjYWxsZWUsIGRpZG4ndCB0cmFzaCBtX2N1cnJlbnRJbnN0cnVjdGlvbgorICAgICAg
ICAgICAgQVNTRVJUKG1fY3VycmVudEluc3RydWN0aW9uID09IGN1cnJlbnRJbnN0cnVjdGlvbik7
CisgICAgICAgICAgICAvLyBXZSBsZXQgdGhlIGZvbGxvd2luZyBvcF9yZXQgaGFuZGxlIGNhc2Vz
IHJlbGF0ZWQgdG8KKyAgICAgICAgICAgIC8vIGlubGluaW5nIHRvIGtlZXAgdGhpbmdzIHNpbXBs
ZS4KKyAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX3RhaWxfY2FsbCk7CisKICAgICAgICAgY2Fz
ZSBvcF9jb25zdHJ1Y3Q6Ci0gICAgICAgICAgICBoYW5kbGVDYWxsKGN1cnJlbnRJbnN0cnVjdGlv
biwgQ29uc3RydWN0LCBDb2RlRm9yQ29uc3RydWN0KTsKKyAgICAgICAgICAgIGhhbmRsZUNhbGwo
Y3VycmVudEluc3RydWN0aW9uLCBDb25zdHJ1Y3QsIENhbGxNb2RlOjpDb25zdHJ1Y3QpOwogICAg
ICAgICAgICAgTkVYVF9PUENPREUob3BfY29uc3RydWN0KTsKICAgICAgICAgICAgIAogICAgICAg
ICBjYXNlIG9wX2NhbGxfdmFyYXJnczogewotICAgICAgICAgICAgaGFuZGxlVmFyYXJnc0NhbGwo
Y3VycmVudEluc3RydWN0aW9uLCBDYWxsVmFyYXJncywgQ29kZUZvckNhbGwpOworICAgICAgICAg
ICAgaGFuZGxlVmFyYXJnc0NhbGwoY3VycmVudEluc3RydWN0aW9uLCBDYWxsVmFyYXJncywgQ2Fs
bE1vZGU6OlJlZ3VsYXIpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfY2FsbF92YXJhcmdz
KTsKICAgICAgICAgfQorCisgICAgICAgIGNhc2Ugb3BfdGFpbF9jYWxsX3ZhcmFyZ3M6IHsKKyAg
ICAgICAgICAgIGZsdXNoRm9yUmV0dXJuKCk7CisgICAgICAgICAgICBoYW5kbGVWYXJhcmdzQ2Fs
bChjdXJyZW50SW5zdHJ1Y3Rpb24sIFRhaWxDYWxsVmFyYXJncywgQ2FsbE1vZGU6OlRhaWwpOwor
ICAgICAgICAgICAgTkVYVF9PUENPREUob3BfdGFpbF9jYWxsX3ZhcmFyZ3MpOworICAgICAgICB9
CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBvcF9jb25zdHJ1Y3RfdmFyYXJnczogewotICAg
ICAgICAgICAgaGFuZGxlVmFyYXJnc0NhbGwoY3VycmVudEluc3RydWN0aW9uLCBDb25zdHJ1Y3RW
YXJhcmdzLCBDb2RlRm9yQ29uc3RydWN0KTsKKyAgICAgICAgICAgIGhhbmRsZVZhcmFyZ3NDYWxs
KGN1cnJlbnRJbnN0cnVjdGlvbiwgQ29uc3RydWN0VmFyYXJncywgQ2FsbE1vZGU6OkNvbnN0cnVj
dCk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9jb25zdHJ1Y3RfdmFyYXJncyk7CiAgICAg
ICAgIH0KICAgICAgICAgICAgIApAQCAtNDUzMyw3ICs0NjM1LDcgQEAgQnl0ZUNvZGVQYXJzZXI6
OklubGluZVN0YWNrRW50cnk6OklubGluZQogICAgICAgICAgICAgbV9pbmxpbmVDYWxsRnJhbWUt
PmlzQ2xvc3VyZUNhbGwgPSBmYWxzZTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBtX2lu
bGluZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2FsbCA9IHRydWU7Ci0gICAgICAgIG1faW5saW5lQ2Fs
bEZyYW1lLT5jYWxsZXIgPSBieXRlQ29kZVBhcnNlci0+Y3VycmVudENvZGVPcmlnaW4oKTsKKyAg
ICAgICAgbV9pbmxpbmVDYWxsRnJhbWUtPmRpcmVjdENhbGxlciA9IGJ5dGVDb2RlUGFyc2VyLT5j
dXJyZW50Q29kZU9yaWdpbigpOwogICAgICAgICBtX2lubGluZUNhbGxGcmFtZS0+YXJndW1lbnRz
LnJlc2l6ZVRvRml0KGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKTsgLy8gU2V0IHRoZSBudW1i
ZXIgb2YgYXJndW1lbnRzIGluY2x1ZGluZyB0aGlzLCBidXQgZG9uJ3QgY29uZmlndXJlIHRoZSB2
YWx1ZSByZWNvdmVyaWVzLCB5ZXQuCiAgICAgICAgIG1faW5saW5lQ2FsbEZyYW1lLT5raW5kID0g
a2luZDsKICAgICAgICAgCkBAIC00NjA0LDcgKzQ3MDYsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2Vy
OjpwYXJzZUNvZGVCbG9jaygpCiAgICAgaWYgKFVOTElLRUxZKE9wdGlvbnM6OmR1bXBTb3VyY2VB
dERGR1RpbWUoKSkpIHsKICAgICAgICAgVmVjdG9yPERlZmVycmVkU291cmNlRHVtcD4mIGRlZmVy
cmVkU291cmNlRHVtcCA9IG1fZ3JhcGgubV9wbGFuLmNhbGxiYWNrLT5lbnN1cmVEZWZlcnJlZFNv
dXJjZUR1bXAoKTsKICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZSgpKSB7Ci0gICAgICAgICAg
ICBEZWZlcnJlZFNvdXJjZUR1bXAgZHVtcChjb2RlQmxvY2stPmJhc2VsaW5lVmVyc2lvbigpLCBt
X2NvZGVCbG9jaywgSklUQ29kZTo6REZHSklULCBpbmxpbmVDYWxsRnJhbWUoKS0+Y2FsbGVyKTsK
KyAgICAgICAgICAgIERlZmVycmVkU291cmNlRHVtcCBkdW1wKGNvZGVCbG9jay0+YmFzZWxpbmVW
ZXJzaW9uKCksIG1fY29kZUJsb2NrLCBKSVRDb2RlOjpERkdKSVQsIGlubGluZUNhbGxGcmFtZSgp
LT5kaXJlY3RDYWxsZXIpOwogICAgICAgICAgICAgZGVmZXJyZWRTb3VyY2VEdW1wLmFwcGVuZChk
dW1wKTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBkZWZlcnJlZFNvdXJjZUR1bXAuYXBw
ZW5kKERlZmVycmVkU291cmNlRHVtcChjb2RlQmxvY2stPmJhc2VsaW5lVmVyc2lvbigpKSk7CkBA
IC00NjE1LDcgKzQ3MTcsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUNvZGVCbG9jaygp
CiAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUoKSkgewogICAgICAgICAgICAgZGF0YUxvZygK
ICAgICAgICAgICAgICAgICAiIGZvciBpbmxpbmluZyBhdCAiLCBDb2RlQmxvY2tXaXRoSklUVHlw
ZShtX2NvZGVCbG9jaywgSklUQ29kZTo6REZHSklUKSwKLSAgICAgICAgICAgICAgICAiICIsIGlu
bGluZUNhbGxGcmFtZSgpLT5jYWxsZXIpOworICAgICAgICAgICAgICAgICIgIiwgaW5saW5lQ2Fs
bEZyYW1lKCktPmRpcmVjdENhbGxlcik7CiAgICAgICAgIH0KICAgICAgICAgZGF0YUxvZygKICAg
ICAgICAgICAgICI6IG5lZWRzQWN0aXZhdGlvbiA9ICIsIGNvZGVCbG9jay0+bmVlZHNBY3RpdmF0
aW9uKCksCkBAIC00Njk5LDcgKzQ4MDEsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUNv
ZGVCbG9jaygpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgfQogICAgICAg
ICAgICAgCi0gICAgICAgICAgICBtX2N1cnJlbnRCbG9jayA9IDA7CisgICAgICAgICAgICBtX2N1
cnJlbnRCbG9jayA9IG51bGxwdHI7CiAgICAgICAgIH0gd2hpbGUgKG1fY3VycmVudEluZGV4IDwg
bGltaXQpOwogICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBh
YmlsaXRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q2FwYWJpbGl0aWVzLmNwcAkocmV2aXNpb24gMTkwMTUzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzksOCArMTc5
LDEwIEBAIENhcGFiaWxpdHlMZXZlbCBjYXBhYmlsaXR5TGV2ZWwoT3Bjb2RlSUQKICAgICBjYXNl
IG9wX3Rocm93OgogICAgIGNhc2Ugb3BfdGhyb3dfc3RhdGljX2Vycm9yOgogICAgIGNhc2Ugb3Bf
Y2FsbDoKKyAgICBjYXNlIG9wX3RhaWxfY2FsbDoKICAgICBjYXNlIG9wX2NvbnN0cnVjdDoKICAg
ICBjYXNlIG9wX2NhbGxfdmFyYXJnczoKKyAgICBjYXNlIG9wX3RhaWxfY2FsbF92YXJhcmdzOgog
ICAgIGNhc2Ugb3BfY29uc3RydWN0X3ZhcmFyZ3M6CiAgICAgY2FzZSBvcF9jcmVhdGVfZGlyZWN0
X2FyZ3VtZW50czoKICAgICBjYXNlIG9wX2NyZWF0ZV9zY29wZWRfYXJndW1lbnRzOgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHJldmlzaW9uIDE5MDE1
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zODIsOSArMzgyLDEyIEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgs
IE5vZGUqIG5vZGUKICAgICBjYXNlIEFycmF5UHVzaDoKICAgICBjYXNlIEFycmF5UG9wOgogICAg
IGNhc2UgQ2FsbDoKKyAgICBjYXNlIFRhaWxDYWxsSW5saW5lZENhbGxlcjoKICAgICBjYXNlIENv
bnN0cnVjdDoKICAgICBjYXNlIENhbGxWYXJhcmdzOgogICAgIGNhc2UgQ2FsbEZvcndhcmRWYXJh
cmdzOgorICAgIGNhc2UgVGFpbENhbGxWYXJhcmdzSW5saW5lZENhbGxlcjoKKyAgICBjYXNlIFRh
aWxDYWxsRm9yd2FyZFZhcmFyZ3NJbmxpbmVkQ2FsbGVyOgogICAgIGNhc2UgQ29uc3RydWN0VmFy
YXJnczoKICAgICBjYXNlIENvbnN0cnVjdEZvcndhcmRWYXJhcmdzOgogICAgIGNhc2UgVG9Qcmlt
aXRpdmU6CkBAIC0zOTMsNiArMzk2LDEzIEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgs
IE5vZGUqIG5vZGUKICAgICAgICAgcmVhZChXb3JsZCk7CiAgICAgICAgIHdyaXRlKEhlYXApOwog
ICAgICAgICByZXR1cm47CisKKyAgICBjYXNlIFRhaWxDYWxsOgorICAgIGNhc2UgVGFpbENhbGxW
YXJhcmdzOgorICAgIGNhc2UgVGFpbENhbGxGb3J3YXJkVmFyYXJnczoKKyAgICAgICAgcmVhZChX
b3JsZCk7CisgICAgICAgIHdyaXRlKFNpZGVTdGF0ZSk7CisgICAgICAgIHJldHVybjsKICAgICAg
ICAgCiAgICAgY2FzZSBHZXRHZXR0ZXI6CiAgICAgICAgIHJlYWQoR2V0dGVyU2V0dGVyX2dldHRl
cik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCShyZXZpc2lv
biAxOTAxNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0RvZXNHQy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTEyMCwxMiArMTIwLDE2IEBAIGJvb2wgZG9lc0dDKEdyYXBoJiBncmFw
aCwgTm9kZSogbm9kZSkKICAgICBjYXNlIENvbXBhcmVFcToKICAgICBjYXNlIENvbXBhcmVTdHJp
Y3RFcToKICAgICBjYXNlIENhbGw6CisgICAgY2FzZSBUYWlsQ2FsbElubGluZWRDYWxsZXI6CiAg
ICAgY2FzZSBDb25zdHJ1Y3Q6CiAgICAgY2FzZSBDYWxsVmFyYXJnczoKKyAgICBjYXNlIFRhaWxD
YWxsVmFyYXJnc0lubGluZWRDYWxsZXI6CiAgICAgY2FzZSBDb25zdHJ1Y3RWYXJhcmdzOgogICAg
IGNhc2UgTG9hZFZhcmFyZ3M6CiAgICAgY2FzZSBDYWxsRm9yd2FyZFZhcmFyZ3M6CiAgICAgY2Fz
ZSBDb25zdHJ1Y3RGb3J3YXJkVmFyYXJnczoKKyAgICBjYXNlIFRhaWxDYWxsRm9yd2FyZFZhcmFy
Z3M6CisgICAgY2FzZSBUYWlsQ2FsbEZvcndhcmRWYXJhcmdzSW5saW5lZENhbGxlcjoKICAgICBj
YXNlIEJyZWFrcG9pbnQ6CiAgICAgY2FzZSBQcm9maWxlV2lsbENhbGw6CiAgICAgY2FzZSBQcm9m
aWxlRGlkQ2FsbDoKQEAgLTE1MCw2ICsxNTQsOCBAQCBib29sIGRvZXNHQyhHcmFwaCYgZ3JhcGgs
IE5vZGUqIG5vZGUpCiAgICAgY2FzZSBCcmFuY2g6CiAgICAgY2FzZSBTd2l0Y2g6CiAgICAgY2Fz
ZSBSZXR1cm46CisgICAgY2FzZSBUYWlsQ2FsbDoKKyAgICBjYXNlIFRhaWxDYWxsVmFyYXJnczoK
ICAgICBjYXNlIFRocm93OgogICAgIGNhc2UgQ291bnRFeGVjdXRpb246CiAgICAgY2FzZSBGb3Jj
ZU9TUkV4aXQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFz
ZS5jcHAJKHJldmlzaW9uIDE5MDE1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Rml4dXBQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNDMsMTEgKzEzNDMsMTUgQEAgcHJp
dmF0ZToKICAgICAgICAgY2FzZSBOb3RpZnlXcml0ZToKICAgICAgICAgY2FzZSBWYXJJbmplY3Rp
b25XYXRjaHBvaW50OgogICAgICAgICBjYXNlIENhbGw6CisgICAgICAgIGNhc2UgVGFpbENhbGxJ
bmxpbmVkQ2FsbGVyOgogICAgICAgICBjYXNlIENvbnN0cnVjdDoKICAgICAgICAgY2FzZSBDYWxs
VmFyYXJnczoKKyAgICAgICAgY2FzZSBUYWlsQ2FsbFZhcmFyZ3NJbmxpbmVkQ2FsbGVyOgogICAg
ICAgICBjYXNlIENvbnN0cnVjdFZhcmFyZ3M6CiAgICAgICAgIGNhc2UgQ2FsbEZvcndhcmRWYXJh
cmdzOgogICAgICAgICBjYXNlIENvbnN0cnVjdEZvcndhcmRWYXJhcmdzOgorICAgICAgICBjYXNl
IFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3M6CisgICAgICAgIGNhc2UgVGFpbENhbGxGb3J3YXJkVmFy
YXJnc0lubGluZWRDYWxsZXI6CiAgICAgICAgIGNhc2UgTG9hZFZhcmFyZ3M6CiAgICAgICAgIGNh
c2UgUHJvZmlsZUNvbnRyb2xGbG93OgogICAgICAgICBjYXNlIE5ld09iamVjdDoKQEAgLTEzNjUs
NiArMTM2OSw4IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgQ3JlYXRlQ2xvbmVkQXJndW1lbnRz
OgogICAgICAgICBjYXNlIEp1bXA6CiAgICAgICAgIGNhc2UgUmV0dXJuOgorICAgICAgICBjYXNl
IFRhaWxDYWxsOgorICAgICAgICBjYXNlIFRhaWxDYWxsVmFyYXJnczoKICAgICAgICAgY2FzZSBU
aHJvdzoKICAgICAgICAgY2FzZSBUaHJvd1JlZmVyZW5jZUVycm9yOgogICAgICAgICBjYXNlIENv
dW50RXhlY3V0aW9uOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJ
KHJldmlzaW9uIDE5MDE1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGgu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NjEsMzAgKzk2MSwzMSBAQCBCeXRlY29kZUtpbGxzJiBH
cmFwaDo6a2lsbHNGb3IoSW5saW5lQ2FsCiAKIGJvb2wgR3JhcGg6OmlzTGl2ZUluQnl0ZWNvZGUo
VmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIENvZGVPcmlnaW4gY29kZU9yaWdpbikKIHsKKyAgICBD
b2RlT3JpZ2luKiBjb2RlT3JpZ2luUHRyID0gJmNvZGVPcmlnaW47CiAgICAgZm9yICg7Oykgewog
ICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnID0gVmlydHVhbFJlZ2lzdGVyKAotICAgICAgICAg
ICAgb3BlcmFuZC5vZmZzZXQoKSAtIGNvZGVPcmlnaW4uc3RhY2tPZmZzZXQoKSk7CisgICAgICAg
ICAgICBvcGVyYW5kLm9mZnNldCgpIC0gY29kZU9yaWdpblB0ci0+c3RhY2tPZmZzZXQoKSk7CiAg
ICAgICAgIAotICAgICAgICBpZiAob3BlcmFuZC5vZmZzZXQoKSA8IGNvZGVPcmlnaW4uc3RhY2tP
ZmZzZXQoKSArIEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlclNpemUpIHsKKyAgICAgICAgaWYgKG9w
ZXJhbmQub2Zmc2V0KCkgPCBjb2RlT3JpZ2luUHRyLT5zdGFja09mZnNldCgpICsgSlNTdGFjazo6
Q2FsbEZyYW1lSGVhZGVyU2l6ZSkgewogICAgICAgICAgICAgaWYgKHJlZy5pc0FyZ3VtZW50KCkp
IHsKICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChyZWcub2Zmc2V0KCkgPCBKU1N0YWNr
OjpDYWxsRnJhbWVIZWFkZXJTaXplKTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAg
ICBpZiAoY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmlzQ2xvc3VyZUNhbGwKKyAgICAgICAg
ICAgICAgICBpZiAoY29kZU9yaWdpblB0ci0+aW5saW5lQ2FsbEZyYW1lLT5pc0Nsb3N1cmVDYWxs
CiAgICAgICAgICAgICAgICAgICAgICYmIHJlZy5vZmZzZXQoKSA9PSBKU1N0YWNrOjpDYWxsZWUp
CiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgIAotICAg
ICAgICAgICAgICAgIGlmIChjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkK
KyAgICAgICAgICAgICAgICBpZiAoY29kZU9yaWdpblB0ci0+aW5saW5lQ2FsbEZyYW1lLT5pc1Zh
cmFyZ3MoKQogICAgICAgICAgICAgICAgICAgICAmJiByZWcub2Zmc2V0KCkgPT0gSlNTdGFjazo6
QXJndW1lbnRDb3VudCkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgCi0gICAgICAgICAgICByZXR1cm4gbGl2ZW5lc3NGb3IoY29kZU9yaWdpbi5p
bmxpbmVDYWxsRnJhbWUpLm9wZXJhbmRJc0xpdmUoCi0gICAgICAgICAgICAgICAgcmVnLm9mZnNl
dCgpLCBjb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgpOworICAgICAgICAgICAgcmV0dXJuIGxpdmVu
ZXNzRm9yKGNvZGVPcmlnaW5QdHItPmlubGluZUNhbGxGcmFtZSkub3BlcmFuZElzTGl2ZSgKKyAg
ICAgICAgICAgICAgICByZWcub2Zmc2V0KCksIGNvZGVPcmlnaW5QdHItPmJ5dGVjb2RlSW5kZXgp
OwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNh
bGxGcmFtZSA9IGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lOworICAgICAgICBJbmxpbmVDYWxs
RnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IGNvZGVPcmlnaW5QdHItPmlubGluZUNhbGxGcmFtZTsK
ICAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUpCiAgICAgICAgICAgICBicmVhazsKIApAQCAt
OTk0LDcgKzk5NSwxMSBAQCBib29sIEdyYXBoOjppc0xpdmVJbkJ5dGVjb2RlKFZpcnR1YWxSZWdp
CiAgICAgICAgICAgICAmJiBzdGF0aWNfY2FzdDxzaXplX3Q+KHJlZy50b0FyZ3VtZW50KCkpIDwg
aW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpKQogICAgICAgICAgICAgcmV0dXJuIHRy
dWU7CiAgICAgICAgIAotICAgICAgICBjb2RlT3JpZ2luID0gaW5saW5lQ2FsbEZyYW1lLT5jYWxs
ZXI7CisgICAgICAgIGNvZGVPcmlnaW5QdHIgPSBpbmxpbmVDYWxsRnJhbWUtPmdldENhbGxlclNr
aXBwaW5nRGVhZEZyYW1lcygpOworCisgICAgICAgIC8vIFRoZSBmaXJzdCBpbmxpbmUgY2FsbCBm
cmFtZSBjb3VsZCBiZSBhbiBpbmxpbmUgdGFpbCBjYWxsCisgICAgICAgIGlmICghY29kZU9yaWdp
blB0cikKKyAgICAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAKICAgICByZXR1cm4gdHJ1ZTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmgJKHJldmlzaW9uIDE5MDE1MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkod29ya2luZyBjb3B5KQpA
QCAtNzE3LDkgKzcxNywxMSBAQCBwdWJsaWM6CiAgICAgICAgIC8vIGNhbGwsIGJvdGggY2FsbGVl
IGFuZCBjYWxsZXIgd2lsbCBzZWUgdGhlIHZhcmlhYmxlcyBsaXZlLgogICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIgZXhjbHVzaW9uU3RhcnQ7CiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBleGNsdXNp
b25FbmQ7CisKKyAgICAgICAgQ29kZU9yaWdpbiogY29kZU9yaWdpblB0ciA9ICZjb2RlT3JpZ2lu
OwogICAgICAgICAKICAgICAgICAgZm9yICg7OykgewotICAgICAgICAgICAgSW5saW5lQ2FsbEZy
YW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZTsKKyAgICAg
ICAgICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0gY29kZU9yaWdpblB0ci0+
aW5saW5lQ2FsbEZyYW1lOwogICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHN0YWNrT2Zmc2V0
KGlubGluZUNhbGxGcmFtZSA/IGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgOiAwKTsKICAg
ICAgICAgICAgIAogICAgICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZSkgewpAQCAtNzMxLDcg
KzczMyw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIAogICAgICAgICAgICAgQ29kZUJsb2NrKiBj
b2RlQmxvY2sgPSBiYXNlbGluZUNvZGVCbG9ja0ZvcihpbmxpbmVDYWxsRnJhbWUpOwogICAgICAg
ICAgICAgRnVsbEJ5dGVjb2RlTGl2ZW5lc3MmIGZ1bGxMaXZlbmVzcyA9IGxpdmVuZXNzRm9yKGNv
ZGVCbG9jayk7Ci0gICAgICAgICAgICBjb25zdCBGYXN0Qml0VmVjdG9yJiBsaXZlbmVzcyA9IGZ1
bGxMaXZlbmVzcy5nZXRMaXZlbmVzcyhjb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgpOworICAgICAg
ICAgICAgY29uc3QgRmFzdEJpdFZlY3RvciYgbGl2ZW5lc3MgPSBmdWxsTGl2ZW5lc3MuZ2V0TGl2
ZW5lc3MoY29kZU9yaWdpblB0ci0+Ynl0ZWNvZGVJbmRleCk7CiAgICAgICAgICAgICBmb3IgKHVu
c2lnbmVkIHJlbGF0aXZlTG9jYWwgPSBjb2RlQmxvY2stPm1fbnVtQ2FsbGVlUmVnaXN0ZXJzOyBy
ZWxhdGl2ZUxvY2FsLS07KSB7CiAgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlZyA9
IHN0YWNrT2Zmc2V0ICsgdmlydHVhbFJlZ2lzdGVyRm9yTG9jYWwocmVsYXRpdmVMb2NhbCk7CiAg
ICAgICAgICAgICAgICAgCkBAIC03NTgsNyArNzYwLDExIEBAIHB1YmxpYzoKICAgICAgICAgICAg
IGZvciAoVmlydHVhbFJlZ2lzdGVyIHJlZyA9IGV4Y2x1c2lvblN0YXJ0OyByZWcgPCBleGNsdXNp
b25FbmQ7IHJlZyArPSAxKQogICAgICAgICAgICAgICAgIGZ1bmN0b3IocmVnKTsKICAgICAgICAg
ICAgIAotICAgICAgICAgICAgY29kZU9yaWdpbiA9IGlubGluZUNhbGxGcmFtZS0+Y2FsbGVyOwor
ICAgICAgICAgICAgY29kZU9yaWdpblB0ciA9IGlubGluZUNhbGxGcmFtZS0+Z2V0Q2FsbGVyU2tp
cHBpbmdEZWFkRnJhbWVzKCk7CisKKyAgICAgICAgICAgIC8vIFRoZSBmaXJzdCBpbmxpbmUgY2Fs
bCBmcmFtZSBjb3VsZCBiZSBhbiBpbmxpbmUgdGFpbCBjYWxsCisgICAgICAgICAgICBpZiAoIWNv
ZGVPcmlnaW5QdHIpCisgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9CiAg
ICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luUGxhY2VBYnN0cmFjdFN0
YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0luUGxh
Y2VBYnN0cmFjdFN0YXRlLmNwcAkocmV2aXNpb24gMTkwMTUzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM2NCw2ICszNjQsOSBAQCBpbmxpbmUgYm9vbCBJblBsYWNlQWJzdHJhY3RTdGF0ZTo6bWVyZ2VU
CiAgICAgfQogICAgICAgICAKICAgICBjYXNlIFJldHVybjoKKyAgICBjYXNlIFRhaWxDYWxsOgor
ICAgIGNhc2UgVGFpbENhbGxWYXJhcmdzOgorICAgIGNhc2UgVGFpbENhbGxGb3J3YXJkVmFyYXJn
czoKICAgICBjYXNlIFVucmVhY2hhYmxlOgogICAgICAgICBBU1NFUlQoYmFzaWNCbG9jay0+Y2Zh
QnJhbmNoRGlyZWN0aW9uID09IEludmFsaWRCcmFuY2hEaXJlY3Rpb24pOwogICAgICAgICByZXR1
cm4gZmFsc2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBpbGVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0pJVENvbXBp
bGVyLmNwcAkocmV2aXNpb24gMTkwMTUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdKSVRDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3NSw4ICs1NzUsOCBAQCBib29s
IEpJVENvbXBpbGVyOjp3aWxsQ2F0Y2hFeGNlcHRpb25Jbk1hCiAgICAgICAgIGlmICghaW5saW5l
Q2FsbEZyYW1lKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgICAgIGJ5dGVjb2Rl
SW5kZXhUb0NoZWNrID0gaW5saW5lQ2FsbEZyYW1lLT5jYWxsZXIuYnl0ZWNvZGVJbmRleDsKLSAg
ICAgICAgY29kZU9yaWdpbiA9IGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5jYWxsZXI7Cisg
ICAgICAgIGJ5dGVjb2RlSW5kZXhUb0NoZWNrID0gaW5saW5lQ2FsbEZyYW1lLT5kaXJlY3RDYWxs
ZXIuYnl0ZWNvZGVJbmRleDsKKyAgICAgICAgY29kZU9yaWdpbiA9IGNvZGVPcmlnaW4uaW5saW5l
Q2FsbEZyYW1lLT5kaXJlY3RDYWxsZXI7CiAgICAgfQogCiAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTGl2ZUNhdGNo
VmFyaWFibGVQcmVzZXJ2YXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdMaXZlQ2F0Y2hWYXJpYWJsZVByZXNlcnZhdGlvblBoYXNlLmNwcAko
cmV2aXNpb24gMTkwMTUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMaXZlQ2F0
Y2hWYXJpYWJsZVByZXNlcnZhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODEsOCAr
ODEsOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZSkKICAgICAg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgICAgIGJ5dGVjb2RlSW5kZXhUb0No
ZWNrID0gaW5saW5lQ2FsbEZyYW1lLT5jYWxsZXIuYnl0ZWNvZGVJbmRleDsKLSAgICAgICAgICAg
IG9yaWdpbiA9IGlubGluZUNhbGxGcmFtZS0+Y2FsbGVyOworICAgICAgICAgICAgYnl0ZWNvZGVJ
bmRleFRvQ2hlY2sgPSBpbmxpbmVDYWxsRnJhbWUtPmRpcmVjdENhbGxlci5ieXRlY29kZUluZGV4
OworICAgICAgICAgICAgb3JpZ2luID0gaW5saW5lQ2FsbEZyYW1lLT5kaXJlY3RDYWxsZXI7CiAg
ICAgICAgIH0KICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9k
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCShy
ZXZpc2lvbiAxOTAxNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMTAwNyw2ICsxMDA3LDEwIEBAIHN0cnVjdCBOb2RlIHsKICAgICAg
ICAgc3dpdGNoIChvcCgpKSB7CiAgICAgICAgIGNhc2UgQ2FsbFZhcmFyZ3M6CiAgICAgICAgIGNh
c2UgQ2FsbEZvcndhcmRWYXJhcmdzOgorICAgICAgICBjYXNlIFRhaWxDYWxsVmFyYXJnczoKKyAg
ICAgICAgY2FzZSBUYWlsQ2FsbEZvcndhcmRWYXJhcmdzOgorICAgICAgICBjYXNlIFRhaWxDYWxs
VmFyYXJnc0lubGluZWRDYWxsZXI6CisgICAgICAgIGNhc2UgVGFpbENhbGxGb3J3YXJkVmFyYXJn
c0lubGluZWRDYWxsZXI6CiAgICAgICAgIGNhc2UgQ29uc3RydWN0VmFyYXJnczoKICAgICAgICAg
Y2FzZSBDb25zdHJ1Y3RGb3J3YXJkVmFyYXJnczoKICAgICAgICAgICAgIHJldHVybiB0cnVlOwpA
QCAtMTEwNCw2ICsxMTA4LDkgQEAgc3RydWN0IE5vZGUgewogICAgICAgICBjYXNlIEJyYW5jaDoK
ICAgICAgICAgY2FzZSBTd2l0Y2g6CiAgICAgICAgIGNhc2UgUmV0dXJuOgorICAgICAgICBjYXNl
IFRhaWxDYWxsOgorICAgICAgICBjYXNlIFRhaWxDYWxsVmFyYXJnczoKKyAgICAgICAgY2FzZSBU
YWlsQ2FsbEZvcndhcmRWYXJhcmdzOgogICAgICAgICBjYXNlIFVucmVhY2hhYmxlOgogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIGRlZmF1bHQ6CkBAIC0xMjU0LDEwICsxMjYxLDEz
IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgY2FzZSBHZXRCeUlkRmx1c2g6CiAgICAgICAgIGNh
c2UgR2V0QnlWYWw6CiAgICAgICAgIGNhc2UgQ2FsbDoKKyAgICAgICAgY2FzZSBUYWlsQ2FsbElu
bGluZWRDYWxsZXI6CiAgICAgICAgIGNhc2UgQ29uc3RydWN0OgogICAgICAgICBjYXNlIENhbGxW
YXJhcmdzOgorICAgICAgICBjYXNlIFRhaWxDYWxsVmFyYXJnc0lubGluZWRDYWxsZXI6CiAgICAg
ICAgIGNhc2UgQ29uc3RydWN0VmFyYXJnczoKICAgICAgICAgY2FzZSBDYWxsRm9yd2FyZFZhcmFy
Z3M6CisgICAgICAgIGNhc2UgVGFpbENhbGxGb3J3YXJkVmFyYXJnc0lubGluZWRDYWxsZXI6CiAg
ICAgICAgIGNhc2UgR2V0QnlPZmZzZXQ6CiAgICAgICAgIGNhc2UgTXVsdGlHZXRCeU9mZnNldDoK
ICAgICAgICAgY2FzZSBHZXRDbG9zdXJlVmFyOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdOb2RlVHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTm9kZVR5cGUuaAkocmV2aXNpb24gMTkwMTUzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdOb2RlVHlwZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNDUsNiArMjQ1LDkgQEAg
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAgIG1hY3JvKENhbGxGb3J3YXJkVmFy
YXJncywgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKENvbnN0
cnVjdFZhcmFyZ3MsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNy
byhDb25zdHJ1Y3RGb3J3YXJkVmFyYXJncywgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0
ZSkgXAorICAgIG1hY3JvKFRhaWxDYWxsSW5saW5lZENhbGxlciwgTm9kZVJlc3VsdEpTIHwgTm9k
ZU11c3RHZW5lcmF0ZSB8IE5vZGVIYXNWYXJBcmdzKSBcCisgICAgbWFjcm8oVGFpbENhbGxWYXJh
cmdzSW5saW5lZENhbGxlciwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAorICAg
IG1hY3JvKFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3NJbmxpbmVkQ2FsbGVyLCBOb2RlUmVzdWx0SlMg
fCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgXAogICAgIC8qIEFsbG9jYXRpb25zLiAqL1wKICAg
ICBtYWNybyhOZXdPYmplY3QsIE5vZGVSZXN1bHRKUykgXApAQCAtMzEwLDYgKzMxMyw5IEBAIG5h
bWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICBtYWNybyhCcmFuY2gsIE5vZGVNdXN0
R2VuZXJhdGUpIFwKICAgICBtYWNybyhTd2l0Y2gsIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBt
YWNybyhSZXR1cm4sIE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAgICBtYWNybyhUYWlsQ2FsbCwgTm9k
ZU11c3RHZW5lcmF0ZSB8IE5vZGVIYXNWYXJBcmdzKSBcCisgICAgbWFjcm8oVGFpbENhbGxWYXJh
cmdzLCBOb2RlTXVzdEdlbmVyYXRlKSBcCisgICAgbWFjcm8oVGFpbENhbGxGb3J3YXJkVmFyYXJn
cywgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKFVucmVhY2hhYmxlLCBOb2RlTXVzdEdl
bmVyYXRlKSBcCiAgICAgXAogICAgIC8qIENvdW50IGV4ZWN1dGlvbi4gKi9cCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21t
b24uY3BwCShyZXZpc2lvbiAxOTAxNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY0LDcgKzY0LDcg
QEAgdm9pZCBoYW5kbGVFeGl0Q291bnRzKENDYWxsSGVscGVycyYgaml0LAogICAgIAogICAgIEFz
c2VtYmx5SGVscGVyczo6SnVtcExpc3QgbG9vcFRocmVzaG9sZDsKICAgICAKLSAgICBmb3IgKElu
bGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0gZXhpdC5tX2NvZGVPcmlnaW4uaW5saW5l
Q2FsbEZyYW1lOyBpbmxpbmVDYWxsRnJhbWU7IGlubGluZUNhbGxGcmFtZSA9IGlubGluZUNhbGxG
cmFtZS0+Y2FsbGVyLmlubGluZUNhbGxGcmFtZSkgeworICAgIGZvciAoSW5saW5lQ2FsbEZyYW1l
KiBpbmxpbmVDYWxsRnJhbWUgPSBleGl0Lm1fY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWU7IGlu
bGluZUNhbGxGcmFtZTsgaW5saW5lQ2FsbEZyYW1lID0gaW5saW5lQ2FsbEZyYW1lLT5kaXJlY3RD
YWxsZXIuaW5saW5lQ2FsbEZyYW1lKSB7CiAgICAgICAgIGxvb3BUaHJlc2hvbGQuYXBwZW5kKAog
ICAgICAgICAgICAgaml0LmJyYW5jaFRlc3Q4KAogICAgICAgICAgICAgICAgIEFzc2VtYmx5SGVs
cGVyczo6Tm9uWmVybywKQEAgLTEzNiw2MyArMTM2LDgwIEBAIHZvaWQgaGFuZGxlRXhpdENvdW50
cyhDQ2FsbEhlbHBlcnMmIGppdCwKIAogdm9pZCByZWlmeUlubGluZWRDYWxsRnJhbWVzKENDYWxs
SGVscGVycyYgaml0LCBjb25zdCBPU1JFeGl0QmFzZSYgZXhpdCkKIHsKKyAgICAvLyBGSVhNRTog
V2Ugc2hvdWxkbid0IGxlYXZlIGhvbGVzIG9uIHRoZSBzdGFjayB3aGVuIHBlcmZvcm1pbmcgYW4g
T1NSIGV4aXQKKyAgICAvLyBpbiBwcmVzZW5jZSBvZiBpbmxpbmVkIHRhaWwgY2FsbHMuCisgICAg
Ly8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0NzUxMQogICAgIEFT
U0VSVChqaXQuYmFzZWxpbmVDb2RlQmxvY2soKS0+aml0VHlwZSgpID09IEpJVENvZGU6OkJhc2Vs
aW5lSklUKTsKICAgICBqaXQuc3RvcmVQdHIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRy
KGppdC5iYXNlbGluZUNvZGVCbG9jaygpKSwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKChW
aXJ0dWFsUmVnaXN0ZXIpSlNTdGFjazo6Q29kZUJsb2NrKSk7CiAKLSAgICBDb2RlT3JpZ2luIGNv
ZGVPcmlnaW47Ci0gICAgZm9yIChjb2RlT3JpZ2luID0gZXhpdC5tX2NvZGVPcmlnaW47IGNvZGVP
cmlnaW4uaW5saW5lQ2FsbEZyYW1lOyBjb2RlT3JpZ2luID0gY29kZU9yaWdpbi5pbmxpbmVDYWxs
RnJhbWUtPmNhbGxlcikgewotICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFt
ZSA9IGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lOwotICAgICAgICBDb2RlQmxvY2sqIGJhc2Vs
aW5lQ29kZUJsb2NrID0gaml0LmJhc2VsaW5lQ29kZUJsb2NrRm9yKGNvZGVPcmlnaW4pOwotICAg
ICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyID0gaml0LmJhc2VsaW5l
Q29kZUJsb2NrRm9yKGlubGluZUNhbGxGcmFtZS0+Y2FsbGVyKTsKLSAgICAgICAgdm9pZCoganVt
cFRhcmdldCA9IG51bGxwdHI7CisgICAgY29uc3QgQ29kZU9yaWdpbiogY29kZU9yaWdpbjsKKyAg
ICBmb3IgKGNvZGVPcmlnaW4gPSAmZXhpdC5tX2NvZGVPcmlnaW47IGNvZGVPcmlnaW4gJiYgY29k
ZU9yaWdpbi0+aW5saW5lQ2FsbEZyYW1lOyBjb2RlT3JpZ2luID0gY29kZU9yaWdpbi0+aW5saW5l
Q2FsbEZyYW1lLT5nZXRDYWxsZXJTa2lwcGluZ0RlYWRGcmFtZXMoKSkgeworICAgICAgICBJbmxp
bmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IGNvZGVPcmlnaW4tPmlubGluZUNhbGxGcmFt
ZTsKKyAgICAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jayA9IGppdC5iYXNlbGluZUNv
ZGVCbG9ja0ZvcigqY29kZU9yaWdpbik7CisgICAgICAgIENvZGVPcmlnaW4qIHRydWVDYWxsZXIg
PSBpbmxpbmVDYWxsRnJhbWUtPmdldENhbGxlclNraXBwaW5nRGVhZEZyYW1lcygpOwogICAgICAg
ICB2b2lkKiB0cnVlUmV0dXJuUEMgPSBudWxscHRyOwotICAgICAgICAKLSAgICAgICAgdW5zaWdu
ZWQgY2FsbEJ5dGVjb2RlSW5kZXggPSBpbmxpbmVDYWxsRnJhbWUtPmNhbGxlci5ieXRlY29kZUlu
ZGV4OwotICAgICAgICAKLSAgICAgICAgc3dpdGNoIChpbmxpbmVDYWxsRnJhbWUtPmtpbmQpIHsK
LSAgICAgICAgY2FzZSBJbmxpbmVDYWxsRnJhbWU6OkNhbGw6Ci0gICAgICAgIGNhc2UgSW5saW5l
Q2FsbEZyYW1lOjpDb25zdHJ1Y3Q6Ci0gICAgICAgIGNhc2UgSW5saW5lQ2FsbEZyYW1lOjpDYWxs
VmFyYXJnczoKLSAgICAgICAgY2FzZSBJbmxpbmVDYWxsRnJhbWU6OkNvbnN0cnVjdFZhcmFyZ3M6
IHsKLSAgICAgICAgICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvID0KLSAgICAgICAgICAg
ICAgICBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+Z2V0Q2FsbExpbmtJbmZvRm9yQnl0ZWNv
ZGVJbmRleChjYWxsQnl0ZWNvZGVJbmRleCk7Ci0gICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChj
YWxsTGlua0luZm8pOwotICAgICAgICAgICAgCi0gICAgICAgICAgICBqdW1wVGFyZ2V0ID0gY2Fs
bExpbmtJbmZvLT5jYWxsUmV0dXJuTG9jYXRpb24oKS5leGVjdXRhYmxlQWRkcmVzcygpOwotICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIElu
bGluZUNhbGxGcmFtZTo6R2V0dGVyQ2FsbDoKLSAgICAgICAgY2FzZSBJbmxpbmVDYWxsRnJhbWU6
OlNldHRlckNhbGw6IHsKLSAgICAgICAgICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9
Ci0gICAgICAgICAgICAgICAgYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXItPmZpbmRTdHViSW5m
byhDb2RlT3JpZ2luKGNhbGxCeXRlY29kZUluZGV4KSk7Ci0gICAgICAgICAgICBSRUxFQVNFX0FT
U0VSVChzdHViSW5mbyk7Ci0gICAgICAgICAgICAKKyAgICAgICAgR1BSUmVnIGNhbGxlckZyYW1l
R1BSID0gR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXI7CisKKyAgICAgICAgaWYgKCF0cnVlQ2Fs
bGVyKSB7CisgICAgICAgICAgICBBU1NFUlQoaW5saW5lQ2FsbEZyYW1lLT5pc1RhaWwoKSk7Cisg
ICAgICAgICAgICBqaXQubG9hZFB0cihBc3NlbWJseUhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6
Y2FsbEZyYW1lUmVnaXN0ZXIsIENhbGxGcmFtZTo6cmV0dXJuUENPZmZzZXQoKSksIEdQUkluZm86
OnJlZ1QzKTsKKyAgICAgICAgICAgIGppdC5zdG9yZVB0cihHUFJJbmZvOjpyZWdUMywgQXNzZW1i
bHlIZWxwZXJzOjphZGRyZXNzRm9yQnl0ZU9mZnNldChpbmxpbmVDYWxsRnJhbWUtPnJldHVyblBD
T2Zmc2V0KCkpKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRyKEFzc2VtYmx5SGVscGVyczo6QWRk
cmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQ2FsbEZyYW1lOjpjYWxsZXJGcmFtZU9m
ZnNldCgpKSwgR1BSSW5mbzo6cmVnVDMpOworICAgICAgICAgICAgY2FsbGVyRnJhbWVHUFIgPSBH
UFJJbmZvOjpyZWdUMzsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIENvZGVCbG9jayog
YmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXIgPSBqaXQuYmFzZWxpbmVDb2RlQmxvY2tGb3IoKnRy
dWVDYWxsZXIpOworICAgICAgICAgICAgdW5zaWduZWQgY2FsbEJ5dGVjb2RlSW5kZXggPSB0cnVl
Q2FsbGVyLT5ieXRlY29kZUluZGV4OworICAgICAgICAgICAgdm9pZCoganVtcFRhcmdldCA9IG51
bGxwdHI7CisKICAgICAgICAgICAgIHN3aXRjaCAoaW5saW5lQ2FsbEZyYW1lLT5raW5kKSB7Ci0g
ICAgICAgICAgICBjYXNlIElubGluZUNhbGxGcmFtZTo6R2V0dGVyQ2FsbDoKLSAgICAgICAgICAg
ICAgICBqdW1wVGFyZ2V0ID0gaml0LnZtKCktPmdldENUSVN0dWIoYmFzZWxpbmVHZXR0ZXJSZXR1
cm5UaHVua0dlbmVyYXRvcikuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIElubGluZUNhbGxGcmFtZTo6U2V0dGVyQ2Fs
bDoKLSAgICAgICAgICAgICAgICBqdW1wVGFyZ2V0ID0gaml0LnZtKCktPmdldENUSVN0dWIoYmFz
ZWxpbmVTZXR0ZXJSZXR1cm5UaHVua0dlbmVyYXRvcikuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNz
KCk7CisgICAgICAgICAgICBjYXNlIElubGluZUNhbGxGcmFtZTo6Q2FsbDoKKyAgICAgICAgICAg
IGNhc2UgSW5saW5lQ2FsbEZyYW1lOjpDb25zdHJ1Y3Q6CisgICAgICAgICAgICBjYXNlIElubGlu
ZUNhbGxGcmFtZTo6Q2FsbFZhcmFyZ3M6CisgICAgICAgICAgICBjYXNlIElubGluZUNhbGxGcmFt
ZTo6Q29uc3RydWN0VmFyYXJnczoKKyAgICAgICAgICAgIGNhc2UgSW5saW5lQ2FsbEZyYW1lOjpU
YWlsQ2FsbDoKKyAgICAgICAgICAgIGNhc2UgSW5saW5lQ2FsbEZyYW1lOjpUYWlsQ2FsbFZhcmFy
Z3M6IHsKKyAgICAgICAgICAgICAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA9CisgICAg
ICAgICAgICAgICAgICAgIGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyLT5nZXRDYWxsTGlua0lu
Zm9Gb3JCeXRlY29kZUluZGV4KGNhbGxCeXRlY29kZUluZGV4KTsKKyAgICAgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVChjYWxsTGlua0luZm8pOworCisgICAgICAgICAgICAgICAganVtcFRhcmdl
dCA9IGNhbGxMaW5rSW5mby0+Y2FsbFJldHVybkxvY2F0aW9uKCkuZXhlY3V0YWJsZUFkZHJlc3Mo
KTsKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGRlZmF1bHQ6Ci0gICAgICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgY2FzZSBJbmxpbmVDYWxsRnJhbWU6OkdldHRlckNhbGw6CisgICAgICAgICAg
ICBjYXNlIElubGluZUNhbGxGcmFtZTo6U2V0dGVyQ2FsbDogeworICAgICAgICAgICAgICAgIFN0
cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9CisgICAgICAgICAgICAgICAgICAgIGJhc2VsaW5l
Q29kZUJsb2NrRm9yQ2FsbGVyLT5maW5kU3R1YkluZm8oQ29kZU9yaWdpbihjYWxsQnl0ZWNvZGVJ
bmRleCkpOworICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKHN0dWJJbmZvKTsKKworICAg
ICAgICAgICAgICAgIHN3aXRjaCAoaW5saW5lQ2FsbEZyYW1lLT5raW5kKSB7CisgICAgICAgICAg
ICAgICAgY2FzZSBJbmxpbmVDYWxsRnJhbWU6OkdldHRlckNhbGw6CisgICAgICAgICAgICAgICAg
ICAgIGp1bXBUYXJnZXQgPSBqaXQudm0oKS0+Z2V0Q1RJU3R1YihiYXNlbGluZUdldHRlclJldHVy
blRodW5rR2VuZXJhdG9yKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKKyAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2FzZSBJbmxpbmVDYWxsRnJhbWU6OlNl
dHRlckNhbGw6CisgICAgICAgICAgICAgICAgICAgIGp1bXBUYXJnZXQgPSBqaXQudm0oKS0+Z2V0
Q1RJU3R1YihiYXNlbGluZVNldHRlclJldHVyblRodW5rR2VuZXJhdG9yKS5jb2RlKCkuZXhlY3V0
YWJsZUFkZHJlc3MoKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgdHJ1ZVJldHVyblBDID0gc3R1YkluZm8tPmNhbGxSZXR1cm5Mb2NhdGlv
bi5sYWJlbEF0T2Zmc2V0KAorICAgICAgICAgICAgICAgICAgICBzdHViSW5mby0+cGF0Y2guZGVs
dGFDYWxsVG9Eb25lKS5leGVjdXRhYmxlQWRkcmVzcygpOwogICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgfSB9CisKKyAgICAgICAgICAgIGlmICh0cnVlQ2FsbGVyLT5pbmxpbmVD
YWxsRnJhbWUpIHsKKyAgICAgICAgICAgICAgICBqaXQuYWRkUHRyKAorICAgICAgICAgICAgICAg
ICAgICBBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMih0cnVlQ2FsbGVyLT5pbmxpbmVDYWxs
RnJhbWUtPnN0YWNrT2Zmc2V0ICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSksCisgICAgICAgICAg
ICAgICAgICAgIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLAorICAgICAgICAgICAgICAgICAg
ICBHUFJJbmZvOjpyZWdUMyk7CisgICAgICAgICAgICAgICAgY2FsbGVyRnJhbWVHUFIgPSBHUFJJ
bmZvOjpyZWdUMzsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICAgICAgdHJ1
ZVJldHVyblBDID0gc3R1YkluZm8tPmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KAot
ICAgICAgICAgICAgICAgIHN0dWJJbmZvLT5wYXRjaC5kZWx0YUNhbGxUb0RvbmUpLmV4ZWN1dGFi
bGVBZGRyZXNzKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfSB9Ci0KLSAgICAgICAg
R1BSUmVnIGNhbGxlckZyYW1lR1BSOwotICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lLT5jYWxs
ZXIuaW5saW5lQ2FsbEZyYW1lKSB7Ci0gICAgICAgICAgICBqaXQuYWRkUHRyKEFzc2VtYmx5SGVs
cGVyczo6VHJ1c3RlZEltbTMyKGlubGluZUNhbGxGcmFtZS0+Y2FsbGVyLmlubGluZUNhbGxGcmFt
ZS0+c3RhY2tPZmZzZXQgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSwgR1BSSW5mbzo6Y2FsbEZy
YW1lUmVnaXN0ZXIsIEdQUkluZm86OnJlZ1QzKTsKLSAgICAgICAgICAgIGNhbGxlckZyYW1lR1BS
ID0gR1BSSW5mbzo6cmVnVDM7Ci0gICAgICAgIH0gZWxzZQotICAgICAgICAgICAgY2FsbGVyRnJh
bWVHUFIgPSBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlcjsKLSAgICAgICAgCi0gICAgICAgIGpp
dC5zdG9yZVB0cihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoanVtcFRhcmdldCksIEFz
c2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvckJ5dGVPZmZzZXQoaW5saW5lQ2FsbEZyYW1lLT5yZXR1
cm5QQ09mZnNldCgpKSk7CisKKyAgICAgICAgICAgIGppdC5zdG9yZVB0cihBc3NlbWJseUhlbHBl
cnM6OlRydXN0ZWRJbW1QdHIoanVtcFRhcmdldCksIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0Zv
ckJ5dGVPZmZzZXQoaW5saW5lQ2FsbEZyYW1lLT5yZXR1cm5QQ09mZnNldCgpKSk7CisgICAgICAg
IH0KKwogICAgICAgICBpZiAodHJ1ZVJldHVyblBDKQogICAgICAgICAgICAgaml0LnN0b3JlUHRy
KEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbVB0cih0cnVlUmV0dXJuUEMpLCBBc3NlbWJseUhl
bHBlcnM6OmFkZHJlc3NGb3IoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIHZpcnR1YWxS
ZWdpc3RlckZvckFyZ3VtZW50KGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKSkub2Zm
c2V0KCkpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAKQEAgLTIwMiwxMyArMjE5LDEzIEBA
IHZvaWQgcmVpZnlJbmxpbmVkQ2FsbEZyYW1lcyhDQ2FsbEhlbHBlcnMKICAgICAgICAgICAgIGpp
dC5zdG9yZTMyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKGlubGluZUNhbGxGcmFtZS0+
YXJndW1lbnRzLnNpemUoKSksIEFzc2VtYmx5SGVscGVyczo6cGF5bG9hZEZvcigoVmlydHVhbFJl
Z2lzdGVyKShpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgSlNTdGFjazo6QXJndW1lbnRD
b3VudCkpKTsKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgICAgICBqaXQuc3RvcmU2NChjYWxsZXJG
cmFtZUdQUiwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yQnl0ZU9mZnNldChpbmxpbmVDYWxs
RnJhbWUtPmNhbGxlckZyYW1lT2Zmc2V0KCkpKTsKLSAgICAgICAgdWludDMyX3QgbG9jYXRpb25C
aXRzID0gQ2FsbFNpdGVJbmRleChjb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgpLmJpdHMoKTsKKyAg
ICAgICAgdWludDMyX3QgbG9jYXRpb25CaXRzID0gQ2FsbFNpdGVJbmRleChjb2RlT3JpZ2luLT5i
eXRlY29kZUluZGV4KS5iaXRzKCk7CiAgICAgICAgIGppdC5zdG9yZTMyKEFzc2VtYmx5SGVscGVy
czo6VHJ1c3RlZEltbTMyKGxvY2F0aW9uQml0cyksIEFzc2VtYmx5SGVscGVyczo6dGFnRm9yKChW
aXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBKU1N0YWNrOjpB
cmd1bWVudENvdW50KSkpOwogICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZS0+aXNDbG9zdXJl
Q2FsbCkKICAgICAgICAgICAgIGppdC5zdG9yZTY0KEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZElt
bTY0KEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKGlubGluZUNhbGxGcmFtZS0+Y2FsbGVlQ29uc3Rh
bnQoKSkpKSwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlu
bGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBKU1N0YWNrOjpDYWxsZWUpKSk7CiAjZWxzZSAv
LyBVU0UoSlNWQUxVRTY0KSAvLyBzbyB0aGlzIGlzIHRoZSAzMi1iaXQgcGFydAogICAgICAgICBq
aXQuc3RvcmVQdHIoY2FsbGVyRnJhbWVHUFIsIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvckJ5
dGVPZmZzZXQoaW5saW5lQ2FsbEZyYW1lLT5jYWxsZXJGcmFtZU9mZnNldCgpKSk7Ci0gICAgICAg
IEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiA9IGJhc2VsaW5lQ29kZUJsb2NrLT5pbnN0cnVjdGlv
bnMoKS5iZWdpbigpICsgY29kZU9yaWdpbi5ieXRlY29kZUluZGV4OworICAgICAgICBJbnN0cnVj
dGlvbiogaW5zdHJ1Y3Rpb24gPSBiYXNlbGluZUNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYmVn
aW4oKSArIGNvZGVPcmlnaW4tPmJ5dGVjb2RlSW5kZXg7CiAgICAgICAgIHVpbnQzMl90IGxvY2F0
aW9uQml0cyA9IENhbGxTaXRlSW5kZXgoaW5zdHJ1Y3Rpb24pLmJpdHMoKTsKICAgICAgICAgaml0
LnN0b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIobG9jYXRpb25CaXRzKSwgQXNz
ZW1ibHlIZWxwZXJzOjp0YWdGb3IoKFZpcnR1YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZyYW1lLT5z
dGFja09mZnNldCArIEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpKSk7CiAgICAgICAgIGppdC5zdG9y
ZTMyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKEpTVmFsdWU6OkNlbGxUYWcpLCBBc3Nl
bWJseUhlbHBlcnM6OnRhZ0ZvcigoVmlydHVhbFJlZ2lzdGVyKShpbmxpbmVDYWxsRnJhbWUtPnN0
YWNrT2Zmc2V0ICsgSlNTdGFjazo6Q2FsbGVlKSkpOwpAQCAtMjE3LDEzICsyMzQsMTYgQEAgdm9p
ZCByZWlmeUlubGluZWRDYWxsRnJhbWVzKENDYWxsSGVscGVycwogI2VuZGlmIC8vIFVTRShKU1ZB
TFVFNjQpIC8vIGVuZGluZyB0aGUgI2Vsc2UgcGFydCwgc28gZGlyZWN0bHkgYWJvdmUgaXMgdGhl
IDMyLWJpdCBwYXJ0CiAgICAgfQogCisgICAgLy8gRG9uJ3QgbmVlZCB0byBzZXQgdGhlIHRvcGxl
dmVsIGNvZGUgb3JpZ2luIGlmIHdlIG9ubHkgZGlkIGlubGluZSB0YWlsIGNhbGxzCisgICAgaWYg
KGNvZGVPcmlnaW4pIHsKICNpZiBVU0UoSlNWQUxVRTY0KQotICAgIHVpbnQzMl90IGxvY2F0aW9u
Qml0cyA9IENhbGxTaXRlSW5kZXgoY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KS5iaXRzKCk7Cisg
ICAgdWludDMyX3QgbG9jYXRpb25CaXRzID0gQ2FsbFNpdGVJbmRleChjb2RlT3JpZ2luLT5ieXRl
Y29kZUluZGV4KS5iaXRzKCk7CiAjZWxzZQotICAgIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiA9
IGppdC5iYXNlbGluZUNvZGVCbG9jaygpLT5pbnN0cnVjdGlvbnMoKS5iZWdpbigpICsgY29kZU9y
aWdpbi5ieXRlY29kZUluZGV4OworICAgIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiA9IGppdC5i
YXNlbGluZUNvZGVCbG9jaygpLT5pbnN0cnVjdGlvbnMoKS5iZWdpbigpICsgY29kZU9yaWdpbi0+
Ynl0ZWNvZGVJbmRleDsKICAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4
KGluc3RydWN0aW9uKS5iaXRzKCk7CiAjZW5kaWYKLSAgICBqaXQuc3RvcmUzMihBc3NlbWJseUhl
bHBlcnM6OlRydXN0ZWRJbW0zMihsb2NhdGlvbkJpdHMpLCBBc3NlbWJseUhlbHBlcnM6OnRhZ0Zv
cigoVmlydHVhbFJlZ2lzdGVyKShKU1N0YWNrOjpBcmd1bWVudENvdW50KSkpOworICAgICAgICBq
aXQuc3RvcmUzMihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihsb2NhdGlvbkJpdHMpLCBB
c3NlbWJseUhlbHBlcnM6OnRhZ0ZvcigoVmlydHVhbFJlZ2lzdGVyKShKU1N0YWNrOjpBcmd1bWVu
dENvdW50KSkpOworICAgIH0KIH0KIAogc3RhdGljIHZvaWQgb3NyV3JpdGVCYXJyaWVyKENDYWxs
SGVscGVycyYgaml0LCBHUFJSZWcgb3duZXIsIEdQUlJlZyBzY3JhdGNoKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0UHJlcGFyYXRpb24uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdFByZXBhcmF0aW9uLmNwcAko
cmV2aXNpb24gMTkwMTUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0
UHJlcGFyYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw3ICs0MSw3IEBAIHZvaWQgcHJl
cGFyZUNvZGVPcmlnaW5Gb3JPU1JFeGl0KEV4ZWNTdGEKICAgICBWTSYgdm0gPSBleGVjLT52bSgp
OwogICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKICAgICAKLSAgICBmb3IgKDsgY29kZU9y
aWdpbi5pbmxpbmVDYWxsRnJhbWU7IGNvZGVPcmlnaW4gPSBjb2RlT3JpZ2luLmlubGluZUNhbGxG
cmFtZS0+Y2FsbGVyKSB7CisgICAgZm9yICg7IGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lOyBj
b2RlT3JpZ2luID0gY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmRpcmVjdENhbGxlcikgewog
ICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1l
LT5iYXNlbGluZUNvZGVCbG9jaygpOwogICAgICAgICBpZiAoY29kZUJsb2NrLT5qaXRUeXBlKCkg
PT0gSlNDOjpKSVRDb2RlOjpCYXNlbGluZUpJVCkKICAgICAgICAgICAgIGNvbnRpbnVlOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCShyZXZpc2lv
biAxOTAxNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMzA2LDcgKzEzMDYsNyBAQCBleHRlcm4gIkMiIHZvaWQgSklU
X09QRVJBVElPTiB0cmlnZ2VyUmVvCiAgICAgQVNTRVJUKEpJVENvZGU6OmlzT3B0aW1pemluZ0pJ
VChvcHRpbWl6ZWRDb2RlQmxvY2stPmppdFR5cGUoKSkpOwogICAgIAogICAgIGJvb2wgZGlkVHJ5
VG9FbnRlckludG9JbmxpbmVkTG9vcHMgPSBmYWxzZTsKLSAgICBmb3IgKElubGluZUNhbGxGcmFt
ZSogaW5saW5lQ2FsbEZyYW1lID0gZXhpdC0+bV9jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZTsg
aW5saW5lQ2FsbEZyYW1lOyBpbmxpbmVDYWxsRnJhbWUgPSBpbmxpbmVDYWxsRnJhbWUtPmNhbGxl
ci5pbmxpbmVDYWxsRnJhbWUpIHsKKyAgICBmb3IgKElubGluZUNhbGxGcmFtZSogaW5saW5lQ2Fs
bEZyYW1lID0gZXhpdC0+bV9jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZTsgaW5saW5lQ2FsbEZy
YW1lOyBpbmxpbmVDYWxsRnJhbWUgPSBpbmxpbmVDYWxsRnJhbWUtPmRpcmVjdENhbGxlci5pbmxp
bmVDYWxsRnJhbWUpIHsKICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+ZXhlY3V0YWJsZS0+
ZGlkVHJ5VG9FbnRlckluTG9vcCgpKSB7CiAgICAgICAgICAgICBkaWRUcnlUb0VudGVySW50b0lu
bGluZWRMb29wcyA9IHRydWU7CiAgICAgICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHUHJlY2lzZUxvY2FsQ2xvYmJlcml6ZS5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlY2lzZUxvY2FsQ2xvYmJlcml6ZS5oCShy
ZXZpc2lvbiAxOTAxNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWNpc2VM
b2NhbENsb2JiZXJpemUuaAkod29ya2luZyBjb3B5KQpAQCAtMTExLDcgKzExMSw5IEBAIHByaXZh
dGU6CiAgICAgICAgIGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFsOgogICAgICAgICBjYXNlIEZvcndh
cmRWYXJhcmdzOgogICAgICAgICBjYXNlIENhbGxGb3J3YXJkVmFyYXJnczoKLSAgICAgICAgY2Fz
ZSBDb25zdHJ1Y3RGb3J3YXJkVmFyYXJnczogeworICAgICAgICBjYXNlIENvbnN0cnVjdEZvcndh
cmRWYXJhcmdzOgorICAgICAgICBjYXNlIFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3M6CisgICAgICAg
IGNhc2UgVGFpbENhbGxGb3J3YXJkVmFyYXJnc0lubGluZWRDYWxsZXI6IHsKICAgICAgICAgICAg
IElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0gbV9ub2RlLT5jaGlsZDEoKS0+b3Jp
Z2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZTsKICAgICAgICAgICAgIGlmICghaW5saW5lQ2Fs
bEZyYW1lKSB7CiAgICAgICAgICAgICAgICAgLy8gUmVhZCB0aGUgb3V0ZXJtb3N0IGFyZ3VtZW50
cyBhbmQgYXJndW1lbnQgY291bnQuCkBAIC0xMzgsNyArMTQwLDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgICAgICBtX3JlYWQoVmlydHVhbFJlZ2lzdGVyKGkpKTsKICAgICAgICAgCiAgICAgICAg
ICAgICAvLyBSZWFkIGFsbCBvZiB0aGUgaW5saW5lIGFyZ3VtZW50cyBhbmQgY2FsbCBmcmFtZSBo
ZWFkZXJzIHRoYXQgd2UgZGlkbid0IGFscmVhZHkgY2FwdHVyZS4KLSAgICAgICAgICAgIGZvciAo
SW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBtX25vZGUtPm9yaWdpbi5zZW1hbnRp
Yy5pbmxpbmVDYWxsRnJhbWU7IGlubGluZUNhbGxGcmFtZTsgaW5saW5lQ2FsbEZyYW1lID0gaW5s
aW5lQ2FsbEZyYW1lLT5jYWxsZXIuaW5saW5lQ2FsbEZyYW1lKSB7CisgICAgICAgICAgICBmb3Ig
KElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0gbV9ub2RlLT5vcmlnaW4uc2VtYW50
aWMuaW5saW5lQ2FsbEZyYW1lOyBpbmxpbmVDYWxsRnJhbWU7IGlubGluZUNhbGxGcmFtZSA9IGlu
bGluZUNhbGxGcmFtZS0+Z2V0Q2FsbGVySW5saW5lRnJhbWVTa2lwcGluZ0RlYWRGcmFtZXMoKSkg
ewogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IGlubGluZUNhbGxGcmFtZS0+YXJn
dW1lbnRzLnNpemUoKTsgaS0tID4gMTspCiAgICAgICAgICAgICAgICAgICAgIG1fcmVhZChWaXJ0
dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIHZpcnR1YWxSZWdpc3Rl
ckZvckFyZ3VtZW50KGkpLm9mZnNldCgpKSk7CiAgICAgICAgICAgICAgICAgaWYgKGlubGluZUNh
bGxGcmFtZS0+aXNDbG9zdXJlQ2FsbCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCShyZXZp
c2lvbiAxOTAxNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Q
cm9wYWdhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk0LDExICsxOTQsMTQgQEAg
cHJpdmF0ZToKICAgICAgICAgY2FzZSBNdWx0aUdldEJ5T2Zmc2V0OgogICAgICAgICBjYXNlIEdl
dERpcmVjdFBuYW1lOgogICAgICAgICBjYXNlIENhbGw6CisgICAgICAgIGNhc2UgVGFpbENhbGxJ
bmxpbmVkQ2FsbGVyOgogICAgICAgICBjYXNlIENvbnN0cnVjdDoKICAgICAgICAgY2FzZSBDYWxs
VmFyYXJnczoKKyAgICAgICAgY2FzZSBUYWlsQ2FsbFZhcmFyZ3NJbmxpbmVkQ2FsbGVyOgogICAg
ICAgICBjYXNlIENvbnN0cnVjdFZhcmFyZ3M6CiAgICAgICAgIGNhc2UgQ2FsbEZvcndhcmRWYXJh
cmdzOgogICAgICAgICBjYXNlIENvbnN0cnVjdEZvcndhcmRWYXJhcmdzOgorICAgICAgICBjYXNl
IFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3NJbmxpbmVkQ2FsbGVyOgogICAgICAgICBjYXNlIEdldEds
b2JhbFZhcjoKICAgICAgICAgY2FzZSBHZXRHbG9iYWxMZXhpY2FsVmFyaWFibGU6CiAgICAgICAg
IGNhc2UgR2V0Q2xvc3VyZVZhcjoKQEAgLTYzNCw2ICs2MzcsOSBAQCBwcml2YXRlOgogICAgICAg
ICBjYXNlIFB1dENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2UgUHV0VG9Bcmd1bWVudHM6CiAgICAg
ICAgIGNhc2UgUmV0dXJuOgorICAgICAgICBjYXNlIFRhaWxDYWxsOgorICAgICAgICBjYXNlIFRh
aWxDYWxsVmFyYXJnczoKKyAgICAgICAgY2FzZSBUYWlsQ2FsbEZvcndhcmRWYXJhcmdzOgogICAg
ICAgICBjYXNlIFRocm93OgogICAgICAgICBjYXNlIFB1dEJ5SWQ6CiAgICAgICAgIGNhc2UgUHV0
QnlJZEZsdXNoOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVj
dXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTYWZlVG9F
eGVjdXRlLmgJKHJldmlzaW9uIDE5MDE1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU2FmZVRvRXhlY3V0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMTYsOCArMjE2LDExIEBAIGJv
b2wgc2FmZVRvRXhlY3V0ZShBYnN0cmFjdFN0YXRlVHlwZSYgc3QKICAgICBjYXNlIENvbXBhcmVF
cToKICAgICBjYXNlIENvbXBhcmVTdHJpY3RFcToKICAgICBjYXNlIENhbGw6CisgICAgY2FzZSBU
YWlsQ2FsbElubGluZWRDYWxsZXI6CiAgICAgY2FzZSBDb25zdHJ1Y3Q6CiAgICAgY2FzZSBDYWxs
VmFyYXJnczoKKyAgICBjYXNlIFRhaWxDYWxsVmFyYXJnc0lubGluZWRDYWxsZXI6CisgICAgY2Fz
ZSBUYWlsQ2FsbEZvcndhcmRWYXJhcmdzSW5saW5lZENhbGxlcjoKICAgICBjYXNlIENvbnN0cnVj
dFZhcmFyZ3M6CiAgICAgY2FzZSBMb2FkVmFyYXJnczoKICAgICBjYXNlIENhbGxGb3J3YXJkVmFy
YXJnczoKQEAgLTI2Miw2ICsyNjUsOSBAQCBib29sIHNhZmVUb0V4ZWN1dGUoQWJzdHJhY3RTdGF0
ZVR5cGUmIHN0CiAgICAgY2FzZSBCcmFuY2g6CiAgICAgY2FzZSBTd2l0Y2g6CiAgICAgY2FzZSBS
ZXR1cm46CisgICAgY2FzZSBUYWlsQ2FsbDoKKyAgICBjYXNlIFRhaWxDYWxsVmFyYXJnczoKKyAg
ICBjYXNlIFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3M6CiAgICAgY2FzZSBUaHJvdzoKICAgICBjYXNl
IFRocm93UmVmZXJlbmNlRXJyb3I6CiAgICAgY2FzZSBDb3VudEV4ZWN1dGlvbjoKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0
LmNwcAkocmV2aXNpb24gMTkwMTUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAog
I2lmIEVOQUJMRShERkdfSklUKQogCiAjaW5jbHVkZSAiQXJyYXlQcm90b3R5cGUuaCIKKyNpbmNs
dWRlICJDYWxsRnJhbWVTaHVmZmxlci5oIgogI2luY2x1ZGUgIkRGR0Fic3RyYWN0SW50ZXJwcmV0
ZXJJbmxpbmVzLmgiCiAjaW5jbHVkZSAiREZHQ2FsbEFycmF5QWxsb2NhdG9yU2xvd1BhdGhHZW5l
cmF0b3IuaCIKICNpbmNsdWRlICJERkdPcGVyYXRpb25zLmgiCkBAIC02MzIsMTAgKzYzMywyMCBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlCiAgICAgQ2FsbExpbmtJ
bmZvOjpDYWxsVHlwZSBjYWxsVHlwZTsKICAgICBib29sIGlzVmFyYXJncyA9IGZhbHNlOwogICAg
IGJvb2wgaXNGb3J3YXJkVmFyYXJncyA9IGZhbHNlOworICAgIGJvb2wgaXNUYWlsID0gZmFsc2U7
CisgICAgYm9vbCBpc0VtdWxhdGVkVGFpbCA9IGZhbHNlOwogICAgIHN3aXRjaCAobm9kZS0+b3Ao
KSkgewogICAgIGNhc2UgQ2FsbDoKICAgICAgICAgY2FsbFR5cGUgPSBDYWxsTGlua0luZm86OkNh
bGw7CiAgICAgICAgIGJyZWFrOworICAgIGNhc2UgVGFpbENhbGw6CisgICAgICAgIGNhbGxUeXBl
ID0gQ2FsbExpbmtJbmZvOjpUYWlsQ2FsbDsKKyAgICAgICAgaXNUYWlsID0gdHJ1ZTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBUYWlsQ2FsbElubGluZWRDYWxsZXI6CisgICAgICAgIGNhbGxU
eXBlID0gQ2FsbExpbmtJbmZvOjpDYWxsOworICAgICAgICBpc0VtdWxhdGVkVGFpbCA9IHRydWU7
CisgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ29uc3RydWN0OgogICAgICAgICBjYWxsVHlwZSA9
IENhbGxMaW5rSW5mbzo6Q29uc3RydWN0OwogICAgICAgICBicmVhazsKQEAgLTY0Myw2ICs2NTQs
MTYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZQogICAgICAgICBj
YWxsVHlwZSA9IENhbGxMaW5rSW5mbzo6Q2FsbFZhcmFyZ3M7CiAgICAgICAgIGlzVmFyYXJncyA9
IHRydWU7CiAgICAgICAgIGJyZWFrOworICAgIGNhc2UgVGFpbENhbGxWYXJhcmdzOgorICAgICAg
ICBjYWxsVHlwZSA9IENhbGxMaW5rSW5mbzo6VGFpbENhbGxWYXJhcmdzOworICAgICAgICBpc1Zh
cmFyZ3MgPSB0cnVlOworICAgICAgICBpc1RhaWwgPSB0cnVlOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIFRhaWxDYWxsVmFyYXJnc0lubGluZWRDYWxsZXI6CisgICAgICAgIGNhbGxUeXBlID0g
Q2FsbExpbmtJbmZvOjpDYWxsVmFyYXJnczsKKyAgICAgICAgaXNWYXJhcmdzID0gdHJ1ZTsKKyAg
ICAgICAgaXNFbXVsYXRlZFRhaWwgPSB0cnVlOworICAgICAgICBicmVhazsKICAgICBjYXNlIENv
bnN0cnVjdFZhcmFyZ3M6CiAgICAgICAgIGNhbGxUeXBlID0gQ2FsbExpbmtJbmZvOjpDb25zdHJ1
Y3RWYXJhcmdzOwogICAgICAgICBpc1ZhcmFyZ3MgPSB0cnVlOwpAQCAtNjUxLDYgKzY3MiwxNiBA
QCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlCiAgICAgICAgIGNhbGxU
eXBlID0gQ2FsbExpbmtJbmZvOjpDYWxsVmFyYXJnczsKICAgICAgICAgaXNGb3J3YXJkVmFyYXJn
cyA9IHRydWU7CiAgICAgICAgIGJyZWFrOworICAgIGNhc2UgVGFpbENhbGxGb3J3YXJkVmFyYXJn
czoKKyAgICAgICAgY2FsbFR5cGUgPSBDYWxsTGlua0luZm86OlRhaWxDYWxsVmFyYXJnczsKKyAg
ICAgICAgaXNUYWlsID0gdHJ1ZTsKKyAgICAgICAgaXNGb3J3YXJkVmFyYXJncyA9IHRydWU7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgVGFpbENhbGxGb3J3YXJkVmFyYXJnc0lubGluZWRDYWxs
ZXI6CisgICAgICAgIGNhbGxUeXBlID0gQ2FsbExpbmtJbmZvOjpDYWxsVmFyYXJnczsKKyAgICAg
ICAgaXNFbXVsYXRlZFRhaWwgPSB0cnVlOworICAgICAgICBpc0ZvcndhcmRWYXJhcmdzID0gdHJ1
ZTsKKyAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDb25zdHJ1Y3RGb3J3YXJkVmFyYXJnczoKICAg
ICAgICAgY2FsbFR5cGUgPSBDYWxsTGlua0luZm86OkNvbnN0cnVjdFZhcmFyZ3M7CiAgICAgICAg
IGlzRm9yd2FyZFZhcmFyZ3MgPSB0cnVlOwpAQCAtNjYxLDYgKzY5Miw5IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUKICAgICB9CiAKICAgICBFZGdlIGNhbGxlZUVk
Z2UgPSBtX2ppdC5ncmFwaCgpLmNoaWxkKG5vZGUsIDApOworICAgIEdQUlJlZyBjYWxsZWVUYWdH
UFI7CisgICAgR1BSUmVnIGNhbGxlZVBheWxvYWRHUFI7CisgICAgQ2FsbEZyYW1lU2h1ZmZsZURh
dGEgc2h1ZmZsZURhdGE7CiAgICAgCiAgICAgLy8gR290dGEgbG9hZCB0aGUgYXJndW1lbnRzIHNv
bWVob3cuIFZhcmFyZ3MgaXMgdHJpY2tpZXIuCiAgICAgaWYgKGlzVmFyYXJncyB8fCBpc0Zvcndh
cmRWYXJhcmdzKSB7CkBAIC03NTUsMjggKzc4OSw0OSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpl
bWl0Q2FsbChOb2RlKiBub2RlCiAgICAgICAgIC8vIHJlY2VpdmVyIChtZXRob2QgY2FsbCkuIHN1
YnNlcXVlbnQgY2hpbGRyZW4gYXJlIHRoZSBhcmd1bWVudHMuCiAgICAgICAgIGludCBudW1QYXNz
ZWRBcmdzID0gbm9kZS0+bnVtQ2hpbGRyZW4oKSAtIDE7CiAKLSAgICAgICAgbV9qaXQuc3RvcmUz
MihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKG51bVBhc3NlZEFyZ3MpLCBtX2ppdC5jYWxs
ZWVGcmFtZVBheWxvYWRTbG90KEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpKTsKKyAgICAgICAgaWYg
KG5vZGUtPm9wKCkgPT0gVGFpbENhbGwpIHsKKyAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIGNh
bGxlZSh0aGlzLCBjYWxsZWVFZGdlKTsKKyAgICAgICAgICAgIGNhbGxlZVRhZ0dQUiA9IGNhbGxl
ZS50YWdHUFIoKTsKKyAgICAgICAgICAgIGNhbGxlZVBheWxvYWRHUFIgPSBjYWxsZWUucGF5bG9h
ZEdQUigpOworICAgICAgICAgICAgdXNlKGNhbGxlZUVkZ2UpOworCisgICAgICAgICAgICBzaHVm
ZmxlRGF0YS5udW1Mb2NhbHMgPSBtX2ppdC5ncmFwaCgpLmZyYW1lUmVnaXN0ZXJDb3VudCgpOwor
ICAgICAgICAgICAgc2h1ZmZsZURhdGEuY2FsbGVlID0gVmFsdWVSZWNvdmVyeTo6aW5QYWlyKGNh
bGxlZVRhZ0dQUiwgY2FsbGVlUGF5bG9hZEdQUik7CisgICAgICAgICAgICBzaHVmZmxlRGF0YS5h
cmdzLnJlc2l6ZShudW1QYXNzZWRBcmdzKTsKKworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7
IGkgPCBudW1QYXNzZWRBcmdzOyArK2kpIHsKKyAgICAgICAgICAgICAgICBFZGdlIGFyZ0VkZ2Ug
PSBtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUsIGkgKyAxKTsKKyAgICAgICAgICAgICAg
ICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IGdlbmVyYXRpb25JbmZvKGFyZ0VkZ2Uubm9kZSgpKTsK
KyAgICAgICAgICAgICAgICB1c2UoYXJnRWRnZSk7CisgICAgICAgICAgICAgICAgc2h1ZmZsZURh
dGEuYXJnc1tpXSA9IGluZm8ucmVjb3ZlcnkoYXJnRWRnZS0+dmlydHVhbFJlZ2lzdGVyKCkpOwor
ICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbV9qaXQuc3RvcmUz
MihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKG51bVBhc3NlZEFyZ3MpLCBtX2ppdC5jYWxs
ZWVGcmFtZVBheWxvYWRTbG90KEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpKTsKICAgICAgICAgCi0g
ICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtUGFzc2VkQXJnczsgaSsrKSB7Ci0gICAgICAg
ICAgICBFZGdlIGFyZ0VkZ2UgPSBtX2ppdC5ncmFwaCgpLm1fdmFyQXJnQ2hpbGRyZW5bbm9kZS0+
Zmlyc3RDaGlsZCgpICsgMSArIGldOwotICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYXJnKHRo
aXMsIGFyZ0VkZ2UpOwotICAgICAgICAgICAgR1BSUmVnIGFyZ1RhZ0dQUiA9IGFyZy50YWdHUFIo
KTsKLSAgICAgICAgICAgIEdQUlJlZyBhcmdQYXlsb2FkR1BSID0gYXJnLnBheWxvYWRHUFIoKTsK
LSAgICAgICAgICAgIHVzZShhcmdFZGdlKTsKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgbnVtUGFzc2VkQXJnczsgaSsrKSB7CisgICAgICAgICAgICAgICAgRWRnZSBhcmdFZGdlID0g
bV9qaXQuZ3JhcGgoKS5tX3ZhckFyZ0NoaWxkcmVuW25vZGUtPmZpcnN0Q2hpbGQoKSArIDEgKyBp
XTsKKyAgICAgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBhcmcodGhpcywgYXJnRWRnZSk7Cisg
ICAgICAgICAgICAgICAgR1BSUmVnIGFyZ1RhZ0dQUiA9IGFyZy50YWdHUFIoKTsKKyAgICAgICAg
ICAgICAgICBHUFJSZWcgYXJnUGF5bG9hZEdQUiA9IGFyZy5wYXlsb2FkR1BSKCk7CisgICAgICAg
ICAgICAgICAgdXNlKGFyZ0VkZ2UpOwogICAgICAgICAgICAgCi0gICAgICAgICAgICBtX2ppdC5z
dG9yZTMyKGFyZ1RhZ0dQUiwgbV9qaXQuY2FsbGVlQXJndW1lbnRUYWdTbG90KGkpKTsKLSAgICAg
ICAgICAgIG1faml0LnN0b3JlMzIoYXJnUGF5bG9hZEdQUiwgbV9qaXQuY2FsbGVlQXJndW1lbnRQ
YXlsb2FkU2xvdChpKSk7CisgICAgICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihhcmdUYWdHUFIs
IG1faml0LmNhbGxlZUFyZ3VtZW50VGFnU2xvdChpKSk7CisgICAgICAgICAgICAgICAgbV9qaXQu
c3RvcmUzMihhcmdQYXlsb2FkR1BSLCBtX2ppdC5jYWxsZWVBcmd1bWVudFBheWxvYWRTbG90KGkp
KTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0KIAotICAgIEpTVmFsdWVPcGVyYW5k
IGNhbGxlZSh0aGlzLCBjYWxsZWVFZGdlKTsKLSAgICBHUFJSZWcgY2FsbGVlVGFnR1BSID0gY2Fs
bGVlLnRhZ0dQUigpOwotICAgIEdQUlJlZyBjYWxsZWVQYXlsb2FkR1BSID0gY2FsbGVlLnBheWxv
YWRHUFIoKTsKLSAgICB1c2UoY2FsbGVlRWRnZSk7Ci0gICAgbV9qaXQuc3RvcmUzMihjYWxsZWVQ
YXlsb2FkR1BSLCBtX2ppdC5jYWxsZWVGcmFtZVBheWxvYWRTbG90KEpTU3RhY2s6OkNhbGxlZSkp
OwotICAgIG1faml0LnN0b3JlMzIoY2FsbGVlVGFnR1BSLCBtX2ppdC5jYWxsZWVGcmFtZVRhZ1Ns
b3QoSlNTdGFjazo6Q2FsbGVlKSk7CisgICAgaWYgKG5vZGUtPm9wKCkgIT0gVGFpbENhbGwpIHsK
KyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgY2FsbGVlKHRoaXMsIGNhbGxlZUVkZ2UpOworICAgICAg
ICBjYWxsZWVUYWdHUFIgPSBjYWxsZWUudGFnR1BSKCk7CisgICAgICAgIGNhbGxlZVBheWxvYWRH
UFIgPSBjYWxsZWUucGF5bG9hZEdQUigpOworICAgICAgICB1c2UoY2FsbGVlRWRnZSk7CisgICAg
ICAgIG1faml0LnN0b3JlMzIoY2FsbGVlUGF5bG9hZEdQUiwgbV9qaXQuY2FsbGVlRnJhbWVQYXls
b2FkU2xvdChKU1N0YWNrOjpDYWxsZWUpKTsKKyAgICAgICAgbV9qaXQuc3RvcmUzMihjYWxsZWVU
YWdHUFIsIG1faml0LmNhbGxlZUZyYW1lVGFnU2xvdChKU1N0YWNrOjpDYWxsZWUpKTsKIAotICAg
IGZsdXNoUmVnaXN0ZXJzKCk7CisgICAgICAgIGlmICghaXNUYWlsKQorICAgICAgICAgICAgZmx1
c2hSZWdpc3RlcnMoKTsKKyAgICB9CiAKICAgICBHUFJGbHVzaGVkQ2FsbFJlc3VsdCByZXN1bHRQ
YXlsb2FkKHRoaXMpOwogICAgIEdQUkZsdXNoZWRDYWxsUmVzdWx0MiByZXN1bHRUYWcodGhpcyk7
CkBAIC03ODYsNDggKzg0MSw3OCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2Rl
KiBub2RlCiAgICAgSklUQ29tcGlsZXI6OkRhdGFMYWJlbFB0ciB0YXJnZXRUb0NoZWNrOwogICAg
IEpJVENvbXBpbGVyOjpKdW1wTGlzdCBzbG93UGF0aDsKIAotICAgIENhbGxTaXRlSW5kZXggY2Fs
bFNpdGUgPSBtX2ppdC5yZWNvcmRDYWxsU2l0ZUFuZEdlbmVyYXRlRXhjZXB0aW9uSGFuZGxpbmdP
U1JFeGl0SWZOZWVkZWQobm9kZS0+b3JpZ2luLnNlbWFudGljLCBtX3N0cmVhbS0+c2l6ZSgpKTsK
KyAgICBDb2RlT3JpZ2luIHN0YXRpY09yaWdpbiA9IG5vZGUtPm9yaWdpbi5zZW1hbnRpYzsKKyAg
ICBBU1NFUlQoIWlzVGFpbCB8fCAhc3RhdGljT3JpZ2luLmlubGluZUNhbGxGcmFtZSB8fCAhc3Rh
dGljT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+Z2V0Q2FsbGVyU2tpcHBpbmdEZWFkRnJhbWVzKCkp
OworICAgIEFTU0VSVCghaXNFbXVsYXRlZFRhaWwgfHwgKHN0YXRpY09yaWdpbi5pbmxpbmVDYWxs
RnJhbWUgJiYgc3RhdGljT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+Z2V0Q2FsbGVyU2tpcHBpbmdE
ZWFkRnJhbWVzKCkpKTsKKyAgICBDb2RlT3JpZ2luIGR5bmFtaWNPcmlnaW4gPQorICAgICAgICBp
c0VtdWxhdGVkVGFpbCA/ICpzdGF0aWNPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5nZXRDYWxsZXJT
a2lwcGluZ0RlYWRGcmFtZXMoKSA6IHN0YXRpY09yaWdpbjsKKwogICAgIG1faml0LmVtaXRTdG9y
ZUNhbGxTaXRlSW5kZXgoY2FsbFNpdGUpOwogICAgIAogICAgIENhbGxMaW5rSW5mbyogaW5mbyA9
IG1faml0LmNvZGVCbG9jaygpLT5hZGRDYWxsTGlua0luZm8oKTsKIAotICAgIHNsb3dQYXRoLmFw
cGVuZChtX2ppdC5icmFuY2hJZk5vdENlbGwoY2FsbGVlLmpzVmFsdWVSZWdzKCkpKTsKKyAgICBz
bG93UGF0aC5hcHBlbmQobV9qaXQuYnJhbmNoSWZOb3RDZWxsKEpTVmFsdWVSZWdzKGNhbGxlZVRh
Z0dQUiwgY2FsbGVlUGF5bG9hZEdQUikpKTsKICAgICBzbG93UGF0aC5hcHBlbmQobV9qaXQuYnJh
bmNoUHRyV2l0aFBhdGNoKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgY2FsbGVlUGF5bG9hZEdQ
UiwgdGFyZ2V0VG9DaGVjaykpOwogCiAgICAgSklUQ29tcGlsZXI6OkNhbGwgZmFzdENhbGwgPSBt
X2ppdC5uZWFyQ2FsbCgpOworICAgIGlmIChpc1RhaWwpIHsKKyAgICAgICAgaWYgKG5vZGUtPm9w
KCkgPT0gVGFpbENhbGwpIHsKKyAgICAgICAgICAgIGluZm8tPnNldEZyYW1lU2h1ZmZsZURhdGEo
c2h1ZmZsZURhdGEpOworICAgICAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIobV9qaXQsIHNodWZm
bGVEYXRhKS5wcmVwYXJlRm9yVGFpbENhbGwoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIG1faml0LmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZVJlZ2lzdGVycygpOworICAgICAgICAgICAg
bV9qaXQucHJlcGFyZUZvclRhaWxDYWxsU2xvdygpOworICAgICAgICB9CisgICAgfQorCisgICAg
SklUQ29tcGlsZXI6OkNhbGwgZmFzdENhbGwgPSBpc1RhaWwgPyBtX2ppdC5uZWFyVGFpbENhbGwo
KSA6IG1faml0Lm5lYXJDYWxsKCk7CiAKICAgICBKSVRDb21waWxlcjo6SnVtcCBkb25lID0gbV9q
aXQuanVtcCgpOwogCiAgICAgc2xvd1BhdGgubGluaygmbV9qaXQpOwogCi0gICAgLy8gQ2FsbGVl
IHBheWxvYWQgbmVlZHMgdG8gYmUgaW4gcmVnVDAsIHRhZyBpbiByZWdUMQotICAgIGlmIChjYWxs
ZWVUYWdHUFIgPT0gR1BSSW5mbzo6cmVnVDApIHsKLSAgICAgICAgaWYgKGNhbGxlZVBheWxvYWRH
UFIgPT0gR1BSSW5mbzo6cmVnVDEpCi0gICAgICAgICAgICBtX2ppdC5zd2FwKEdQUkluZm86OnJl
Z1QxLCBHUFJJbmZvOjpyZWdUMCk7Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgbV9qaXQu
bW92ZShjYWxsZWVUYWdHUFIsIEdQUkluZm86OnJlZ1QxKTsKKyAgICBpZiAobm9kZS0+b3AoKSA9
PSBUYWlsQ2FsbCkgeworICAgICAgICBDYWxsRnJhbWVTaHVmZmxlciBjYWxsRnJhbWVTaHVmZmxl
cihtX2ppdCwgc2h1ZmZsZURhdGEpOworICAgICAgICBjYWxsRnJhbWVTaHVmZmxlci5zZXRDYWxs
ZWVKU1ZhbHVlUmVncyhKU1ZhbHVlUmVncygKKyAgICAgICAgICAgIEdQUkluZm86OnJlZ1QxLCBH
UFJJbmZvOjpyZWdUMCkpOworICAgICAgICBjYWxsRnJhbWVTaHVmZmxlci5wcmVwYXJlRm9yU2xv
d1BhdGgoKTsKKyAgICB9IGVsc2UgeworICAgICAgICAvLyBDYWxsZWUgcGF5bG9hZCBuZWVkcyB0
byBiZSBpbiByZWdUMCwgdGFnIGluIHJlZ1QxCisgICAgICAgIGlmIChjYWxsZWVUYWdHUFIgPT0g
R1BSSW5mbzo6cmVnVDApIHsKKyAgICAgICAgICAgIGlmIChjYWxsZWVQYXlsb2FkR1BSID09IEdQ
UkluZm86OnJlZ1QxKQorICAgICAgICAgICAgICAgIG1faml0LnN3YXAoR1BSSW5mbzo6cmVnVDEs
IEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIG1f
aml0Lm1vdmUoY2FsbGVlVGFnR1BSLCBHUFJJbmZvOjpyZWdUMSk7CisgICAgICAgICAgICAgICAg
bV9qaXQubW92ZShjYWxsZWVQYXlsb2FkR1BSLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICBtX2ppdC5tb3ZlKGNhbGxlZVBheWxv
YWRHUFIsIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAgIG1faml0Lm1vdmUoY2FsbGVlVGFn
R1BSLCBHUFJJbmZvOjpyZWdUMSk7CiAgICAgICAgIH0KLSAgICB9IGVsc2UgewotICAgICAgICBt
X2ppdC5tb3ZlKGNhbGxlZVBheWxvYWRHUFIsIEdQUkluZm86OnJlZ1QwKTsKLSAgICAgICAgbV9q
aXQubW92ZShjYWxsZWVUYWdHUFIsIEdQUkluZm86OnJlZ1QxKTsKKworICAgICAgICBpZiAoaXNU
YWlsKQorICAgICAgICAgICAgbV9qaXQuZW1pdFJlc3RvcmVDYWxsZWVTYXZlcygpOwogICAgIH0K
KwogICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoaW5mbyksIEdQ
UkluZm86OnJlZ1QyKTsKICAgICBKSVRDb21waWxlcjo6Q2FsbCBzbG93Q2FsbCA9IG1faml0Lm5l
YXJDYWxsKCk7CiAKICAgICBkb25lLmxpbmsoJm1faml0KTsKIAotICAgIG1faml0LnNldHVwUmVz
dWx0cyhyZXN1bHRQYXlsb2FkR1BSLCByZXN1bHRUYWdHUFIpOworICAgIGlmIChpc1RhaWwpCisg
ICAgICAgIG1faml0LmFib3J0V2l0aFJlYXNvbihKSVREaWRSZXR1cm5Gcm9tVGFpbENhbGwpOwor
ICAgIGVsc2UgeworICAgICAgICBtX2ppdC5zZXR1cFJlc3VsdHMocmVzdWx0UGF5bG9hZEdQUiwg
cmVzdWx0VGFnR1BSKTsKIAotICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0VGFnR1BSLCByZXN1bHRQ
YXlsb2FkR1BSLCBub2RlLCBEYXRhRm9ybWF0SlMsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRs
eSk7CisgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0VGFnR1BSLCByZXN1bHRQYXlsb2FkR1BS
LCBub2RlLCBEYXRhRm9ybWF0SlMsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7CisgICAg
ICAgIC8vIEFmdGVyIHRoZSBjYWxscyBhcmUgZG9uZSwgd2UgbmVlZCB0byByZWVzdGFibGlzaCBv
dXIgc3RhY2sKKyAgICAgICAgLy8gcG9pbnRlci4gV2UgcmVseSBvbiB0aGlzIGZvciB2YXJhcmdz
IGNhbGxzLCBjYWxscyB3aXRoIGFyaXR5CisgICAgICAgIC8vIG1pc21hdGNoICh0aGUgY2FsbGZy
YW1lIGlzIHNsaWRlZCkgYW5kIHRhaWwgY2FsbHMuCisgICAgICAgIG1faml0LmFkZFB0cihUcnVz
dGVkSW1tMzIobV9qaXQuZ3JhcGgoKS5zdGFja1BvaW50ZXJPZmZzZXQoKSAqIHNpemVvZihSZWdp
c3RlcikpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgSklUQ29tcGlsZXI6OnN0YWNrUG9p
bnRlclJlZ2lzdGVyKTsKKyAgICB9CiAKICAgICBpbmZvLT5zZXRVcENhbGwoY2FsbFR5cGUsIG5v
ZGUtPm9yaWdpbi5zZW1hbnRpYywgY2FsbGVlUGF5bG9hZEdQUik7CiAgICAgbV9qaXQuYWRkSlND
YWxsKGZhc3RDYWxsLCBzbG93Q2FsbCwgdGFyZ2V0VG9DaGVjaywgaW5mbyk7Ci0gICAgCi0gICAg
Ly8gQWZ0ZXIgdGhlIGNhbGxzIGFyZSBkb25lLCB3ZSBuZWVkIHRvIHJlZXN0YWJsaXNoIG91ciBz
dGFjawotICAgIC8vIHBvaW50ZXIuIFdlIHJlbHkgb24gdGhpcyBmb3IgdmFyYXJncyBjYWxscywg
Y2FsbHMgd2l0aCBhcml0eQotICAgIC8vIG1pc21hdGNoICh0aGUgY2FsbGZyYW1lIGlzIHNsaWRl
ZCkgYW5kIHRhaWwgY2FsbHMuCi0gICAgbV9qaXQuYWRkUHRyKFRydXN0ZWRJbW0zMihtX2ppdC5n
cmFwaCgpLnN0YWNrUG9pbnRlck9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSksIEdQUkluZm86
OmNhbGxGcmFtZVJlZ2lzdGVyLCBKSVRDb21waWxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwog
fQogCiB0ZW1wbGF0ZTxib29sIHN0cmljdD4KQEAgLTQyNTMsMTAgKzQzMzgsMTYgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBicmVhazsKIAogICAg
IGNhc2UgQ2FsbDoKKyAgICBjYXNlIFRhaWxDYWxsOgorICAgIGNhc2UgVGFpbENhbGxJbmxpbmVk
Q2FsbGVyOgogICAgIGNhc2UgQ29uc3RydWN0OgogICAgIGNhc2UgQ2FsbFZhcmFyZ3M6Ci0gICAg
Y2FzZSBDYWxsRm9yd2FyZFZhcmFyZ3M6CisgICAgY2FzZSBUYWlsQ2FsbFZhcmFyZ3M6CisgICAg
Y2FzZSBUYWlsQ2FsbFZhcmFyZ3NJbmxpbmVkQ2FsbGVyOgogICAgIGNhc2UgQ29uc3RydWN0VmFy
YXJnczoKKyAgICBjYXNlIENhbGxGb3J3YXJkVmFyYXJnczoKKyAgICBjYXNlIFRhaWxDYWxsRm9y
d2FyZFZhcmFyZ3M6CisgICAgY2FzZSBUYWlsQ2FsbEZvcndhcmRWYXJhcmdzSW5saW5lZENhbGxl
cjoKICAgICBjYXNlIENvbnN0cnVjdEZvcndhcmRWYXJhcmdzOgogICAgICAgICBlbWl0Q2FsbChu
b2RlKTsKICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDE5MDE1MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI5LDYgKzI5LDcgQEAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAogI2luY2x1ZGUgIkFy
cmF5UHJvdG90eXBlLmgiCisjaW5jbHVkZSAiQ2FsbEZyYW1lU2h1ZmZsZXIuaCIKICNpbmNsdWRl
ICJERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oIgogI2luY2x1ZGUgIkRGR0NhbGxBcnJh
eUFsbG9jYXRvclNsb3dQYXRoR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiREZHT3BlcmF0aW9ucy5o
IgpAQCAtNjEzLDEwICs2MTQsMjAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9k
ZSogbm9kZQogICAgIENhbGxMaW5rSW5mbzo6Q2FsbFR5cGUgY2FsbFR5cGU7CiAgICAgYm9vbCBp
c1ZhcmFyZ3MgPSBmYWxzZTsKICAgICBib29sIGlzRm9yd2FyZFZhcmFyZ3MgPSBmYWxzZTsKKyAg
ICBib29sIGlzVGFpbCA9IGZhbHNlOworICAgIGJvb2wgaXNFbXVsYXRlZFRhaWwgPSBmYWxzZTsK
ICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICBjYXNlIENhbGw6CiAgICAgICAgIGNhbGxU
eXBlID0gQ2FsbExpbmtJbmZvOjpDYWxsOwogICAgICAgICBicmVhazsKKyAgICBjYXNlIFRhaWxD
YWxsOgorICAgICAgICBjYWxsVHlwZSA9IENhbGxMaW5rSW5mbzo6VGFpbENhbGw7CisgICAgICAg
IGlzVGFpbCA9IHRydWU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVGFpbENhbGxJbmxpbmVk
Q2FsbGVyOgorICAgICAgICBjYWxsVHlwZSA9IENhbGxMaW5rSW5mbzo6Q2FsbDsKKyAgICAgICAg
aXNFbXVsYXRlZFRhaWwgPSB0cnVlOworICAgICAgICBicmVhazsKICAgICBjYXNlIENvbnN0cnVj
dDoKICAgICAgICAgY2FsbFR5cGUgPSBDYWxsTGlua0luZm86OkNvbnN0cnVjdDsKICAgICAgICAg
YnJlYWs7CkBAIC02MjQsNiArNjM1LDE2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxs
KE5vZGUqIG5vZGUKICAgICAgICAgY2FsbFR5cGUgPSBDYWxsTGlua0luZm86OkNhbGxWYXJhcmdz
OwogICAgICAgICBpc1ZhcmFyZ3MgPSB0cnVlOwogICAgICAgICBicmVhazsKKyAgICBjYXNlIFRh
aWxDYWxsVmFyYXJnczoKKyAgICAgICAgY2FsbFR5cGUgPSBDYWxsTGlua0luZm86OlRhaWxDYWxs
VmFyYXJnczsKKyAgICAgICAgaXNWYXJhcmdzID0gdHJ1ZTsKKyAgICAgICAgaXNUYWlsID0gdHJ1
ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBUYWlsQ2FsbFZhcmFyZ3NJbmxpbmVkQ2FsbGVy
OgorICAgICAgICBjYWxsVHlwZSA9IENhbGxMaW5rSW5mbzo6Q2FsbFZhcmFyZ3M7CisgICAgICAg
IGlzVmFyYXJncyA9IHRydWU7CisgICAgICAgIGlzRW11bGF0ZWRUYWlsID0gdHJ1ZTsKKyAgICAg
ICAgYnJlYWs7CiAgICAgY2FzZSBDb25zdHJ1Y3RWYXJhcmdzOgogICAgICAgICBjYWxsVHlwZSA9
IENhbGxMaW5rSW5mbzo6Q29uc3RydWN0VmFyYXJnczsKICAgICAgICAgaXNWYXJhcmdzID0gdHJ1
ZTsKQEAgLTYzNiwxMiArNjU3LDIzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5v
ZGUqIG5vZGUKICAgICAgICAgY2FsbFR5cGUgPSBDYWxsTGlua0luZm86OkNvbnN0cnVjdFZhcmFy
Z3M7CiAgICAgICAgIGlzRm9yd2FyZFZhcmFyZ3MgPSB0cnVlOwogICAgICAgICBicmVhazsKKyAg
ICBjYXNlIFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3M6CisgICAgICAgIGNhbGxUeXBlID0gQ2FsbExp
bmtJbmZvOjpUYWlsQ2FsbFZhcmFyZ3M7CisgICAgICAgIGlzVGFpbCA9IHRydWU7CisgICAgICAg
IGlzRm9yd2FyZFZhcmFyZ3MgPSB0cnVlOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFRhaWxD
YWxsRm9yd2FyZFZhcmFyZ3NJbmxpbmVkQ2FsbGVyOgorICAgICAgICBjYWxsVHlwZSA9IENhbGxM
aW5rSW5mbzo6Q2FsbFZhcmFyZ3M7CisgICAgICAgIGlzRW11bGF0ZWRUYWlsID0gdHJ1ZTsKKyAg
ICAgICAgaXNGb3J3YXJkVmFyYXJncyA9IHRydWU7CisgICAgICAgIGJyZWFrOwogICAgIGRlZmF1
bHQ6CiAgICAgICAgIERGR19DUkFTSChtX2ppdC5ncmFwaCgpLCBub2RlLCAiYmFkIG5vZGUgdHlw
ZSIpOwogICAgICAgICBicmVhazsKICAgICB9CiAKLSAgICBFZGdlIGNhbGxlZUVkZ2UgPSBtX2pp
dC5ncmFwaCgpLmNoaWxkKG5vZGUsIDApOworICAgIEdQUlJlZyBjYWxsZWVHUFI7CisgICAgQ2Fs
bEZyYW1lU2h1ZmZsZURhdGEgc2h1ZmZsZURhdGE7CiAgICAgCiAgICAgLy8gR290dGEgbG9hZCB0
aGUgYXJndW1lbnRzIHNvbWVob3cuIFZhcmFyZ3MgaXMgdHJpY2tpZXIuCiAgICAgaWYgKGlzVmFy
YXJncyB8fCBpc0ZvcndhcmRWYXJhcmdzKSB7CkBAIC03MzIsNjAgKzc2NCwxMTIgQEAgdm9pZCBT
cGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZQogICAgICAgICBpbnQgbnVtUGFzc2Vk
QXJncyA9IG5vZGUtPm51bUNoaWxkcmVuKCkgLSAxOwogCiAgICAgICAgIG1faml0LnN0b3JlMzIo
TWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihudW1QYXNzZWRBcmdzKSwgSklUQ29tcGlsZXI6
OmNhbGxlZUZyYW1lUGF5bG9hZFNsb3QoSlNTdGFjazo6QXJndW1lbnRDb3VudCkpOwotICAgIAot
ICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bVBhc3NlZEFyZ3M7IGkrKykgewotICAgICAg
ICAgICAgRWRnZSBhcmdFZGdlID0gbV9qaXQuZ3JhcGgoKS5tX3ZhckFyZ0NoaWxkcmVuW25vZGUt
PmZpcnN0Q2hpbGQoKSArIDEgKyBpXTsKLSAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIGFyZyh0
aGlzLCBhcmdFZGdlKTsKLSAgICAgICAgICAgIEdQUlJlZyBhcmdHUFIgPSBhcmcuZ3ByKCk7Ci0g
ICAgICAgICAgICB1c2UoYXJnRWRnZSk7Ci0gICAgICAgIAotICAgICAgICAgICAgbV9qaXQuc3Rv
cmU2NChhcmdHUFIsIEpJVENvbXBpbGVyOjpjYWxsZWVBcmd1bWVudFNsb3QoaSkpOworCisgICAg
ICAgIGlmIChub2RlLT5vcCgpID09IFRhaWxDYWxsKSB7CisgICAgICAgICAgICBFZGdlIGNhbGxl
ZUVkZ2UgPSBtX2ppdC5ncmFwaCgpLmNoaWxkKG5vZGUsIDApOworICAgICAgICAgICAgSlNWYWx1
ZU9wZXJhbmQgY2FsbGVlKHRoaXMsIGNhbGxlZUVkZ2UpOworICAgICAgICAgICAgY2FsbGVlR1BS
ID0gY2FsbGVlLmdwcigpOworICAgICAgICAgICAgY2FsbGVlLnVzZSgpOworCisgICAgICAgICAg
ICBzaHVmZmxlRGF0YS5udW1Mb2NhbHMgPSBtX2ppdC5ncmFwaCgpLmZyYW1lUmVnaXN0ZXJDb3Vu
dCgpOworICAgICAgICAgICAgc2h1ZmZsZURhdGEuY2FsbGVlID0gVmFsdWVSZWNvdmVyeTo6aW5H
UFIoY2FsbGVlR1BSLCBEYXRhRm9ybWF0SlMpOworICAgICAgICAgICAgc2h1ZmZsZURhdGEuYXJn
cy5yZXNpemUobnVtUGFzc2VkQXJncyk7CisKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgbnVtUGFzc2VkQXJnczsgKytpKSB7CisgICAgICAgICAgICAgICAgRWRnZSBhcmdFZGdlID0g
bV9qaXQuZ3JhcGgoKS52YXJBcmdDaGlsZChub2RlLCBpICsgMSk7CisgICAgICAgICAgICAgICAg
R2VuZXJhdGlvbkluZm8mIGluZm8gPSBnZW5lcmF0aW9uSW5mbyhhcmdFZGdlLm5vZGUoKSk7Cisg
ICAgICAgICAgICAgICAgdXNlKGFyZ0VkZ2UpOworICAgICAgICAgICAgICAgIHNodWZmbGVEYXRh
LmFyZ3NbaV0gPSBpbmZvLnJlY292ZXJ5KGFyZ0VkZ2UtPnZpcnR1YWxSZWdpc3RlcigpKTsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgc2h1ZmZsZURhdGEuc2V0dXBDYWxsZWVTYXZlUmVn
aXN0ZXJzKG1faml0LmNvZGVCbG9jaygpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IG1faml0LnN0b3JlMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihudW1QYXNzZWRBcmdz
KSwgSklUQ29tcGlsZXI6OmNhbGxlZUZyYW1lUGF5bG9hZFNsb3QoSlNTdGFjazo6QXJndW1lbnRD
b3VudCkpOworCisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bVBhc3NlZEFyZ3M7
IGkrKykgeworICAgICAgICAgICAgICAgIEVkZ2UgYXJnRWRnZSA9IG1faml0LmdyYXBoKCkubV92
YXJBcmdDaGlsZHJlbltub2RlLT5maXJzdENoaWxkKCkgKyAxICsgaV07CisgICAgICAgICAgICAg
ICAgSlNWYWx1ZU9wZXJhbmQgYXJnKHRoaXMsIGFyZ0VkZ2UpOworICAgICAgICAgICAgICAgIEdQ
UlJlZyBhcmdHUFIgPSBhcmcuZ3ByKCk7CisgICAgICAgICAgICAgICAgdXNlKGFyZ0VkZ2UpOwor
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIG1faml0LnN0b3JlNjQoYXJnR1BSLCBK
SVRDb21waWxlcjo6Y2FsbGVlQXJndW1lbnRTbG90KGkpKTsKKyAgICAgICAgICAgIH0KICAgICAg
ICAgfQogICAgIH0KIAotICAgIEpTVmFsdWVPcGVyYW5kIGNhbGxlZSh0aGlzLCBjYWxsZWVFZGdl
KTsKLSAgICBHUFJSZWcgY2FsbGVlR1BSID0gY2FsbGVlLmdwcigpOwotICAgIGNhbGxlZS51c2Uo
KTsKLSAgICBtX2ppdC5zdG9yZTY0KGNhbGxlZUdQUiwgSklUQ29tcGlsZXI6OmNhbGxlZUZyYW1l
U2xvdChKU1N0YWNrOjpDYWxsZWUpKTsKLSAgICAKLSAgICBmbHVzaFJlZ2lzdGVycygpOworICAg
IGlmIChub2RlLT5vcCgpICE9IFRhaWxDYWxsKSB7CisgICAgICAgIEVkZ2UgY2FsbGVlRWRnZSA9
IG1faml0LmdyYXBoKCkuY2hpbGQobm9kZSwgMCk7CisgICAgICAgIEpTVmFsdWVPcGVyYW5kIGNh
bGxlZSh0aGlzLCBjYWxsZWVFZGdlKTsKKyAgICAgICAgY2FsbGVlR1BSID0gY2FsbGVlLmdwcigp
OworICAgICAgICBjYWxsZWUudXNlKCk7CisgICAgICAgIG1faml0LnN0b3JlNjQoY2FsbGVlR1BS
LCBKSVRDb21waWxlcjo6Y2FsbGVlRnJhbWVTbG90KEpTU3RhY2s6OkNhbGxlZSkpOwogCi0gICAg
R1BSRmx1c2hlZENhbGxSZXN1bHQgcmVzdWx0KHRoaXMpOwotICAgIEdQUlJlZyByZXN1bHRHUFIg
PSByZXN1bHQuZ3ByKCk7CisgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CisgICAgfQogCi0gICAg
SklUQ29tcGlsZXI6OkRhdGFMYWJlbFB0ciB0YXJnZXRUb0NoZWNrOwotICAgIEpJVENvbXBpbGVy
OjpKdW1wIHNsb3dQYXRoOworICAgIENvZGVPcmlnaW4gc3RhdGljT3JpZ2luID0gbm9kZS0+b3Jp
Z2luLnNlbWFudGljOworICAgIEFTU0VSVCghaXNUYWlsIHx8ICFzdGF0aWNPcmlnaW4uaW5saW5l
Q2FsbEZyYW1lIHx8ICFzdGF0aWNPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5nZXRDYWxsZXJTa2lw
cGluZ0RlYWRGcmFtZXMoKSk7CisgICAgQVNTRVJUKCFpc0VtdWxhdGVkVGFpbCB8fCAoc3RhdGlj
T3JpZ2luLmlubGluZUNhbGxGcmFtZSAmJiBzdGF0aWNPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5n
ZXRDYWxsZXJTa2lwcGluZ0RlYWRGcmFtZXMoKSkpOworICAgIENvZGVPcmlnaW4gZHluYW1pY09y
aWdpbiA9CisgICAgaXNFbXVsYXRlZFRhaWwgPyAqc3RhdGljT3JpZ2luLmlubGluZUNhbGxGcmFt
ZS0+Z2V0Q2FsbGVyU2tpcHBpbmdEZWFkRnJhbWVzKCkgOiBzdGF0aWNPcmlnaW47CiAKLSAgICBD
YWxsU2l0ZUluZGV4IGNhbGxTaXRlID0gbV9qaXQucmVjb3JkQ2FsbFNpdGVBbmRHZW5lcmF0ZUV4
Y2VwdGlvbkhhbmRsaW5nT1NSRXhpdElmTmVlZGVkKG5vZGUtPm9yaWdpbi5zZW1hbnRpYywgbV9z
dHJlYW0tPnNpemUoKSk7CisgICAgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZSA9IG1faml0LnJlY29y
ZENhbGxTaXRlQW5kR2VuZXJhdGVFeGNlcHRpb25IYW5kbGluZ09TUkV4aXRJZk5lZWRlZChkeW5h
bWljT3JpZ2luLCBtX3N0cmVhbS0+c2l6ZSgpKTsKICAgICBtX2ppdC5lbWl0U3RvcmVDYWxsU2l0
ZUluZGV4KGNhbGxTaXRlKTsKICAgICAKICAgICBDYWxsTGlua0luZm8qIGNhbGxMaW5rSW5mbyA9
IG1faml0LmNvZGVCbG9jaygpLT5hZGRDYWxsTGlua0luZm8oKTsKLSAgICAKLSAgICBzbG93UGF0
aCA9IG1faml0LmJyYW5jaFB0cldpdGhQYXRjaChNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIGNh
bGxlZUdQUiwgdGFyZ2V0VG9DaGVjaywgTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoMCkp
OwogCi0gICAgSklUQ29tcGlsZXI6OkNhbGwgZmFzdENhbGwgPSBtX2ppdC5uZWFyQ2FsbCgpOwor
ICAgIEpJVENvbXBpbGVyOjpEYXRhTGFiZWxQdHIgdGFyZ2V0VG9DaGVjazsKKyAgICBKSVRDb21w
aWxlcjo6SnVtcCBzbG93UGF0aCA9IG1faml0LmJyYW5jaFB0cldpdGhQYXRjaChNYWNyb0Fzc2Vt
Ymxlcjo6Tm90RXF1YWwsIGNhbGxlZUdQUiwgdGFyZ2V0VG9DaGVjaywgTWFjcm9Bc3NlbWJsZXI6
OlRydXN0ZWRJbW1QdHIoMCkpOworCisgICAgaWYgKGlzVGFpbCkgeworICAgICAgICBpZiAobm9k
ZS0+b3AoKSA9PSBUYWlsQ2FsbCkgeworICAgICAgICAgICAgY2FsbExpbmtJbmZvLT5zZXRGcmFt
ZVNodWZmbGVEYXRhKHNodWZmbGVEYXRhKTsKKyAgICAgICAgICAgIENhbGxGcmFtZVNodWZmbGVy
KG1faml0LCBzaHVmZmxlRGF0YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICBtX2ppdC5lbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CisgICAgICAg
ICAgICBtX2ppdC5wcmVwYXJlRm9yVGFpbENhbGxTbG93KCk7CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBKSVRDb21waWxlcjo6Q2FsbCBmYXN0Q2FsbCA9IGlzVGFpbCA/IG1faml0Lm5lYXJUYWls
Q2FsbCgpIDogbV9qaXQubmVhckNhbGwoKTsKIAogICAgIEpJVENvbXBpbGVyOjpKdW1wIGRvbmUg
PSBtX2ppdC5qdW1wKCk7Ci0gICAgCisKICAgICBzbG93UGF0aC5saW5rKCZtX2ppdCk7Ci0gICAg
Ci0gICAgbV9qaXQubW92ZShjYWxsZWVHUFIsIEdQUkluZm86OnJlZ1QwKTsgLy8gQ2FsbGVlIG5l
ZWRzIHRvIGJlIGluIHJlZ1QwCisKKyAgICBpZiAobm9kZS0+b3AoKSA9PSBUYWlsQ2FsbCkgewor
ICAgICAgICBDYWxsRnJhbWVTaHVmZmxlciBjYWxsRnJhbWVTaHVmZmxlcihtX2ppdCwgc2h1ZmZs
ZURhdGEpOworICAgICAgICBjYWxsRnJhbWVTaHVmZmxlci5zZXRDYWxsZWVKU1ZhbHVlUmVncyhK
U1ZhbHVlUmVncyhHUFJJbmZvOjpyZWdUMCkpOworICAgICAgICBjYWxsRnJhbWVTaHVmZmxlci5w
cmVwYXJlRm9yU2xvd1BhdGgoKTsKKyAgICB9IGVsc2UgeworICAgICAgICBtX2ppdC5tb3ZlKGNh
bGxlZUdQUiwgR1BSSW5mbzo6cmVnVDApOyAvLyBDYWxsZWUgbmVlZHMgdG8gYmUgaW4gcmVnVDAK
KworICAgICAgICBpZiAoaXNUYWlsKQorICAgICAgICAgICAgbV9qaXQuZW1pdFJlc3RvcmVDYWxs
ZWVTYXZlcygpOyAvLyBUaGlzIG5lZWRzIHRvIGhhcHBlbiBhZnRlciB3ZSBtb3ZlZCBjYWxsZWVH
UFIgdG8gcmVnVDAKKyAgICB9CisKICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVz
dGVkSW1tUHRyKGNhbGxMaW5rSW5mbyksIEdQUkluZm86OnJlZ1QyKTsgLy8gTGluayBpbmZvIG5l
ZWRzIHRvIGJlIGluIHJlZ1QyCiAgICAgSklUQ29tcGlsZXI6OkNhbGwgc2xvd0NhbGwgPSBtX2pp
dC5uZWFyQ2FsbCgpOwotICAgIAorCiAgICAgZG9uZS5saW5rKCZtX2ppdCk7Ci0gICAgCi0gICAg
bV9qaXQubW92ZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgcmVzdWx0R1BSKTsKLSAgICAKLSAg
ICBqc1ZhbHVlUmVzdWx0KHJlc3VsdEdQUiwgbV9jdXJyZW50Tm9kZSwgRGF0YUZvcm1hdEpTLCBV
c2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOwotICAgIAorCisgICAgaWYgKGlzVGFpbCkKKyAg
ICAgICAgbV9qaXQuYWJvcnRXaXRoUmVhc29uKEpJVERpZFJldHVybkZyb21UYWlsQ2FsbCk7Cisg
ICAgZWxzZSB7CisgICAgICAgIEdQUkZsdXNoZWRDYWxsUmVzdWx0IHJlc3VsdCh0aGlzKTsKKyAg
ICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgbV9qaXQubW92
ZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgcmVzdWx0R1BSKTsKKworICAgICAgICBqc1ZhbHVl
UmVzdWx0KHJlc3VsdEdQUiwgbV9jdXJyZW50Tm9kZSwgRGF0YUZvcm1hdEpTLCBVc2VDaGlsZHJl
bkNhbGxlZEV4cGxpY2l0bHkpOworCisgICAgICAgIC8vIEFmdGVyIHRoZSBjYWxscyBhcmUgZG9u
ZSwgd2UgbmVlZCB0byByZWVzdGFibGlzaCBvdXIgc3RhY2sKKyAgICAgICAgLy8gcG9pbnRlci4g
V2UgcmVseSBvbiB0aGlzIGZvciB2YXJhcmdzIGNhbGxzLCBjYWxscyB3aXRoIGFyaXR5CisgICAg
ICAgIC8vIG1pc21hdGNoICh0aGUgY2FsbGZyYW1lIGlzIHNsaWRlZCkgYW5kIHRhaWwgY2FsbHMu
CisgICAgICAgIG1faml0LmFkZFB0cihUcnVzdGVkSW1tMzIobV9qaXQuZ3JhcGgoKS5zdGFja1Bv
aW50ZXJPZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdp
c3RlciwgSklUQ29tcGlsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICB9CisKICAgICBj
YWxsTGlua0luZm8tPnNldFVwQ2FsbChjYWxsVHlwZSwgbV9jdXJyZW50Tm9kZS0+b3JpZ2luLnNl
bWFudGljLCAgY2FsbGVlR1BSKTsgICAgCiAgICAgbV9qaXQuYWRkSlNDYWxsKGZhc3RDYWxsLCBz
bG93Q2FsbCwgdGFyZ2V0VG9DaGVjaywgY2FsbExpbmtJbmZvKTsKLQotICAgIC8vIEFmdGVyIHRo
ZSBjYWxscyBhcmUgZG9uZSwgd2UgbmVlZCB0byByZWVzdGFibGlzaCBvdXIgc3RhY2sKLSAgICAv
LyBwb2ludGVyLiBXZSByZWx5IG9uIHRoaXMgZm9yIHZhcmFyZ3MgY2FsbHMsIGNhbGxzIHdpdGgg
YXJpdHkKLSAgICAvLyBtaXNtYXRjaCAodGhlIGNhbGxmcmFtZSBpcyBzbGlkZWQpIGFuZCB0YWls
IGNhbGxzLgotICAgIG1faml0LmFkZFB0cihUcnVzdGVkSW1tMzIobV9qaXQuZ3JhcGgoKS5zdGFj
a1BvaW50ZXJPZmZzZXQoKSAqIHNpemVvZihSZWdpc3RlcikpLCBHUFJJbmZvOjpjYWxsRnJhbWVS
ZWdpc3RlciwgSklUQ29tcGlsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKIH0KIAogLy8gQ2xh
bmcgc2hvdWxkIGFsbG93IHVucmVhY2hhYmxlIFtbY2xhbmc6OmZhbGx0aHJvdWdoXV0gaW4gdGVt
cGxhdGUgZnVuY3Rpb25zIGlmIGFueSB0ZW1wbGF0ZSBleHBhbnNpb24gdXNlcyBpdApAQCAtNDI0
OCwxNCArNDMzMiwyMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUp
CiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBDYWxsOgorICAgIGNhc2UgVGFpbENhbGw6Cisg
ICAgY2FzZSBUYWlsQ2FsbElubGluZWRDYWxsZXI6CiAgICAgY2FzZSBDb25zdHJ1Y3Q6CiAgICAg
Y2FzZSBDYWxsVmFyYXJnczoKKyAgICBjYXNlIFRhaWxDYWxsVmFyYXJnczoKKyAgICBjYXNlIFRh
aWxDYWxsVmFyYXJnc0lubGluZWRDYWxsZXI6CiAgICAgY2FzZSBDYWxsRm9yd2FyZFZhcmFyZ3M6
CiAgICAgY2FzZSBDb25zdHJ1Y3RWYXJhcmdzOgogICAgIGNhc2UgQ29uc3RydWN0Rm9yd2FyZFZh
cmFyZ3M6CisgICAgY2FzZSBUYWlsQ2FsbEZvcndhcmRWYXJhcmdzOgorICAgIGNhc2UgVGFpbENh
bGxGb3J3YXJkVmFyYXJnc0lubGluZWRDYWxsZXI6CiAgICAgICAgIGVtaXRDYWxsKG5vZGUpOwog
ICAgICAgICBicmVhazsKLSAgICAgICAgCisKICAgICBjYXNlIExvYWRWYXJhcmdzOiB7CiAgICAg
ICAgIExvYWRWYXJhcmdzRGF0YSogZGF0YSA9IG5vZGUtPmxvYWRWYXJhcmdzRGF0YSgpOwogICAg
ICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCShy
ZXZpc2lvbiAxOTAxNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhbGlkYXRl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTcwLDYgKzU3MCw4IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICAgICAgY2FzZSBVcHNpbG9uOgogICAgICAgICAgICAgICAgIGNhc2UgRm9yd2FyZFZhcmFy
Z3M6CiAgICAgICAgICAgICAgICAgY2FzZSBDYWxsRm9yd2FyZFZhcmFyZ3M6CisgICAgICAgICAg
ICAgICAgY2FzZSBUYWlsQ2FsbEZvcndhcmRWYXJhcmdzOgorICAgICAgICAgICAgICAgIGNhc2Ug
VGFpbENhbGxGb3J3YXJkVmFyYXJnc0lubGluZWRDYWxsZXI6CiAgICAgICAgICAgICAgICAgY2Fz
ZSBDb25zdHJ1Y3RGb3J3YXJkVmFyYXJnczoKICAgICAgICAgICAgICAgICBjYXNlIEdldE15QXJn
dW1lbnRCeVZhbDoKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2UuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZS5j
cHAJKHJldmlzaW9uIDE5MDE1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFy
YXJnc0ZvcndhcmRpbmdQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNSw2ICsxMzUsOCBA
QCBwcml2YXRlOgogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgY2FzZSBDYWxsVmFyYXJn
czoKICAgICAgICAgICAgIGNhc2UgQ29uc3RydWN0VmFyYXJnczoKKyAgICAgICAgICAgIGNhc2Ug
VGFpbENhbGxWYXJhcmdzOgorICAgICAgICAgICAgY2FzZSBUYWlsQ2FsbFZhcmFyZ3NJbmxpbmVk
Q2FsbGVyOgogICAgICAgICAgICAgICAgIGlmIChub2RlLT5jaGlsZDEoKSA9PSBjYW5kaWRhdGUg
fHwgbm9kZS0+Y2hpbGQzKCkgPT0gY2FuZGlkYXRlKSB7CiAgICAgICAgICAgICAgICAgICAgIGlm
ICh2ZXJib3NlKQogICAgICAgICAgICAgICAgICAgICAgICAgZGF0YUxvZygiICAgIEVzY2FwZSBh
dCAiLCBub2RlLCAiXG4iKTsKQEAgLTI4Miw3ICsyODQsMTkgQEAgcHJpdmF0ZToKICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgbm9kZS0+c2V0T3BBbmREZWZhdWx0
RmxhZ3MoQ29uc3RydWN0Rm9yd2FyZFZhcmFyZ3MpOwogICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICAgIAorCisgICAgICAgICAgICBjYXNlIFRhaWxDYWxsVmFyYXJnczoKKyAg
ICAgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQyKCkgIT0gY2FuZGlkYXRlKQorICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBub2RlLT5zZXRPcEFuZERlZmF1bHRG
bGFncyhUYWlsQ2FsbEZvcndhcmRWYXJhcmdzKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKwor
ICAgICAgICAgICAgY2FzZSBUYWlsQ2FsbFZhcmFyZ3NJbmxpbmVkQ2FsbGVyOgorICAgICAgICAg
ICAgICAgIGlmIChub2RlLT5jaGlsZDIoKSAhPSBjYW5kaWRhdGUpCisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdzKFRh
aWxDYWxsRm9yd2FyZFZhcmFyZ3NJbmxpbmVkQ2FsbGVyKTsKKyAgICAgICAgICAgICAgICBicmVh
azsKKwogICAgICAgICAgICAgY2FzZSBTZXRMb2NhbDoKICAgICAgICAgICAgICAgICAvLyBUaGlz
IGlzIHN1cGVyIG9kZC4gV2UgZG9uJ3QgaGF2ZSB0byBkbyBhbnl0aGluZyBoZXJlLCBzaW5jZSBp
biBERkcgSVIsIHRoZSBwaGFudG9tCiAgICAgICAgICAgICAgICAgLy8gYXJndW1lbnRzIG5vZGVz
IGRvIHByb2R1Y2UgYSBKU1ZhbHVlLiBBbHNvLCB3ZSBrbm93IHRoYXQgaWYgdGhpcyBTZXRMb2Nh
bCByZWZlcmVuZWNzIGEKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9D
YWxsRnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnBy
ZXRlci9DYWxsRnJhbWUuY3BwCShyZXZpc2lvbiAxOTAxNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTUsNyAr
OTUsNyBAQCB1bnNpZ25lZCBDYWxsRnJhbWU6OmJ5dGVjb2RlT2Zmc2V0KCkKICAgICAgICAgQVNT
RVJUKGNvZGVCbG9jaygpKTsKICAgICAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0gdGhpcy0+
Y29kZU9yaWdpbigpOwogICAgICAgICBmb3IgKElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZy
YW1lID0gY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWU7IGlubGluZUNhbGxGcmFtZTspIHsKLSAg
ICAgICAgICAgIGNvZGVPcmlnaW4gPSBpbmxpbmVDYWxsRnJhbWUtPmNhbGxlcjsKKyAgICAgICAg
ICAgIGNvZGVPcmlnaW4gPSBpbmxpbmVDYWxsRnJhbWUtPmRpcmVjdENhbGxlcjsKICAgICAgICAg
ICAgIGlubGluZUNhbGxGcmFtZSA9IGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lOwogICAgICAg
ICB9CiAgICAgICAgIHJldHVybiBjb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXg7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmNwcAko
cmV2aXNpb24gMTkwMTUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0
YWNrVmlzaXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYwLDggKzYwLDE2IEBAIHZvaWQgU3Rh
Y2tWaXNpdG9yOjpnb3RvTmV4dEZyYW1lKCkKICNpZiBFTkFCTEUoREZHX0pJVCkKICAgICBpZiAo
bV9mcmFtZS5pc0lubGluZWRGcmFtZSgpKSB7CiAgICAgICAgIElubGluZUNhbGxGcmFtZSogaW5s
aW5lQ2FsbEZyYW1lID0gbV9mcmFtZS5pbmxpbmVDYWxsRnJhbWUoKTsKLSAgICAgICAgQ29kZU9y
aWdpbiogY2FsbGVyQ29kZU9yaWdpbiA9ICZpbmxpbmVDYWxsRnJhbWUtPmNhbGxlcjsKLSAgICAg
ICAgcmVhZElubGluZWRGcmFtZShtX2ZyYW1lLmNhbGxGcmFtZSgpLCBjYWxsZXJDb2RlT3JpZ2lu
KTsKKyAgICAgICAgQ29kZU9yaWdpbiogY2FsbGVyQ29kZU9yaWdpbiA9IGlubGluZUNhbGxGcmFt
ZS0+Z2V0Q2FsbGVyU2tpcHBpbmdEZWFkRnJhbWVzKCk7CisgICAgICAgIGlmICghY2FsbGVyQ29k
ZU9yaWdpbikgeworICAgICAgICAgICAgd2hpbGUgKGlubGluZUNhbGxGcmFtZSkgeworICAgICAg
ICAgICAgICAgIHJlYWRJbmxpbmVkRnJhbWUobV9mcmFtZS5jYWxsRnJhbWUoKSwgJmlubGluZUNh
bGxGcmFtZS0+ZGlyZWN0Q2FsbGVyKTsKKyAgICAgICAgICAgICAgICBpbmxpbmVDYWxsRnJhbWUg
PSBtX2ZyYW1lLmlubGluZUNhbGxGcmFtZSgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
bV9mcmFtZS5tX1ZNRW50cnlGcmFtZSA9IG1fZnJhbWUubV9DYWxsZXJWTUVudHJ5RnJhbWU7Cisg
ICAgICAgICAgICByZWFkRnJhbWUobV9mcmFtZS5jYWxsZXJGcmFtZSgpKTsKKyAgICAgICAgfSBl
bHNlCisgICAgICAgICAgICByZWFkSW5saW5lZEZyYW1lKG1fZnJhbWUuY2FsbEZyYW1lKCksIGNh
bGxlckNvZGVPcmlnaW4pOwogICAgICAgICByZXR1cm47CiAgICAgfQogI2VuZGlmIC8vIEVOQUJM
RShERkdfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMuaAko
cmV2aXNpb24gMTkwMTUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9u
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjgsNyArMTI4LDcgQEAgdHlwZWRlZiBjb25zdCBjaGFy
KiBvcHRpb25TdHJpbmc7CiAgICAgdihib29sLCBmb3JjZVByb2ZpbGVyQnl0ZWNvZGVHZW5lcmF0
aW9uLCBmYWxzZSwgbnVsbHB0cikgXAogICAgIFwKICAgICB2KGJvb2wsIGVuYWJsZUZ1bmN0aW9u
RG90QXJndW1lbnRzLCB0cnVlLCBudWxscHRyKSBcCi0gICAgdihib29sLCBlbmFibGVUYWlsQ2Fs
bHMsIGZhbHNlLCBudWxscHRyKSBcCisgICAgdihib29sLCBlbmFibGVUYWlsQ2FsbHMsIHRydWUs
IG51bGxwdHIpIFwKICAgICBcCiAgICAgLyogc2hvd0Rpc2Fzc2VtYmx5IGltcGxpZXMgc2hvd0RG
R0Rpc2Fzc2VtYmx5LiAqLyBcCiAgICAgdihib29sLCBzaG93RGlzYXNzZW1ibHksIGZhbHNlLCAi
ZHVtcHMgZGlzYXNzZW1ibHkgb2YgYWxsIEpJVCBjb21waWxlZCBjb2RlIHVwb24gY29tcGlsYXRp
b24iKSBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2RmZy10YWls
LWNhbGxzLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJl
c3MvZGZnLXRhaWwtY2FsbHMuanMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvdGVzdHMvc3RyZXNzL2RmZy10YWlsLWNhbGxzLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNTYgQEAKKyhmdW5jdGlvbiBub25JbmxpbmVkVGFpbENhbGwoKSB7CisgICAgZnVuY3Rpb24g
Y2FsbGVlKCkgeyBpZiAoY2FsbGVlLmNhbGxlciAhPSBub25JbmxpbmVkVGFpbENhbGwpIHRocm93
IG5ldyBFcnJvcigpOyB9CisgICAgbm9JbmxpbmUoY2FsbGVlKTsKKworICAgIGZ1bmN0aW9uIGNh
bGxlcigpIHsgInVzZSBzdHJpY3QiOyByZXR1cm4gY2FsbGVlKCk7IH0KKworICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgMTAwMDA7ICsraSkKKyAgICAgICAgY2FsbGVyKCk7CisKKyAgICBmdW5jdGlv
biBsb29wKG4pIHsgInVzZSBzdHJpY3QiOyBpZiAobiA+IDApIHJldHVybiBsb29wKG4gLSAxKTsg
fQorICAgIG5vSW5saW5lKGxvb3ApOworCisgICAgbG9vcCgxMDAwMDAwKTsKK30pKCk7CisKKyhm
dW5jdGlvbiBpbmxpbmVkVGFpbENhbGwoKSB7CisgICAgZnVuY3Rpb24gY2FsbGVlKCkgeyBpZiAo
Y2FsbGVlLmNhbGxlciAhPSBpbmxpbmVkVGFpbENhbGwpIHRocm93IG5ldyBFcnJvcigpOyB9Cisg
ICAgZnVuY3Rpb24gY2FsbGVyKCkgeyAidXNlIHN0cmljdCI7IHJldHVybiBjYWxsZWUoKTsgfQor
CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsgKytpKQorICAgICAgICBjYWxsZXIoKTsK
KworICAgIGZ1bmN0aW9uIGxvb3AobikgeyAidXNlIHN0cmljdCI7IGlmIChuID4gMCkgcmV0dXJu
IGxvb3AobiAtIDEpOyB9CisKKyAgICBsb29wKDEwMDAwMDApOworfSkoKTsKKworKGZ1bmN0aW9u
IG5vbklubGluZWRFbXVsYXRlZFRhaWxDYWxsKCkgeworICAgIGZ1bmN0aW9uIGVtdWxhdG9yKCkg
eyBjYWxsZXIoKTsgfQorICAgIGZ1bmN0aW9uIGNhbGxlZSgpIHsgaWYgKGNhbGxlZS5jYWxsZXIg
IT0gZW11bGF0b3IpIHRocm93IG5ldyBFcnJvcigpOyB9CisgICAgbm9JbmxpbmUoY2FsbGVlKTsK
KyAgICBmdW5jdGlvbiBjYWxsZXIoKSB7ICJ1c2Ugc3RyaWN0IjsgcmV0dXJuIGNhbGxlZSgpOyB9
CisKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwOyArK2kpCisgICAgICAgIGVtdWxhdG9y
KCk7CisKKyAgICBmdW5jdGlvbiBwYWQobikgeyAidXNlIHN0cmljdCI7IHJldHVybiBsb29wKG4p
OyB9CisgICAgZnVuY3Rpb24gbG9vcChuKSB7ICJ1c2Ugc3RyaWN0IjsgaWYgKG4gPiAwKSByZXR1
cm4gcGFkKG4gLSAxKTsgfQorICAgIG5vSW5saW5lKGxvb3ApOworCisgICAgbG9vcCgxMDAwMDAw
KTsKK30pKCk7CisKKyhmdW5jdGlvbiBpbmxpbmVkRW11bGF0ZWRUYWlsQ2FsbCgpIHsKKyAgICBm
dW5jdGlvbiBlbXVsYXRvcigpIHsgY2FsbGVyKCk7IH0KKyAgICBmdW5jdGlvbiBjYWxsZWUoKSB7
IGlmIChjYWxsZWUuY2FsbGVyICE9IGVtdWxhdG9yKSB0aHJvdyBuZXcgRXJyb3IoKTsgfQorICAg
IGZ1bmN0aW9uIGNhbGxlcigpIHsgInVzZSBzdHJpY3QiOyByZXR1cm4gY2FsbGVlKCk7IH0KKwor
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7ICsraSkKKyAgICAgICAgZW11bGF0b3IoKTsK
KworICAgIGZ1bmN0aW9uIHBhZChuKSB7ICJ1c2Ugc3RyaWN0IjsgcmV0dXJuIGxvb3Aobik7IH0K
KyAgICBmdW5jdGlvbiBsb29wKG4pIHsgInVzZSBzdHJpY3QiOyBpZiAobiA+IDApIHJldHVybiBw
YWQobiAtIDEpOyB9CisKKyAgICBsb29wKDEwMDAwMDApOworfSkoKTsKSW5kZXg6IExheW91dFRl
c3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHJldmlz
aW9uIDE5MDE1MykKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAt
MSwzICsxLDIxIEBACisyMDE1LTA5LTIyICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUu
Y29tPgorCisgICAgICAgIFtFUzZdIEltcGxlbWVudCB0YWlsIGNhbGxzIGluIHRoZSBERkcKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0ODY2MworCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZGVkIG9uZSBu
ZXcgdGVzdCBhbmQgZW5hYmxlZCB0YWlsIGNhbGwgdGVzdGluZyBvZiB0aGUgREZHLgorCisgICAg
ICAgICoganMvY2FsbGVyLXByb3BlcnR5LWV4cGVjdGVkLnR4dDoKKyAgICAgICAgKiBqcy9zY3Jp
cHQtdGVzdHMvY2FsbGVyLXByb3BlcnR5LmpzOgorICAgICAgICAoc3RyaW5nX2FwcGVhcmVkX2hl
cmUubm9uU3RyaWN0Q2FsbGVlKToKKyAgICAgICAgKHN0cmljdENhbGxlZSk6CisgICAgICAgIChu
b25TdHJpY3RDYWxsZXIpOgorICAgICAgICAoc3RyaWN0Q2FsbGVyKToKKyAgICAgICAgKHN0cmlj
dFRhaWxDYWxsZXIpOgorICAgICAgICAoZ2V0Rm9vR2V0dGVyKToKKwogMjAxNS0wOS0yMiAgUnlv
c3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBFdmVudCBmaXJlZCBvbiBh
IGRldGFjaGVkIG5vZGUgZG9lcyBub3QgYnViYmxlIHVwCkluZGV4OiBMYXlvdXRUZXN0cy9qcy9j
YWxsZXItcHJvcGVydHktZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pz
L2NhbGxlci1wcm9wZXJ0eS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDE5MDE1MykKKysrIExheW91
dFRlc3RzL2pzL2NhbGxlci1wcm9wZXJ0eS1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAg
LTEwLDEwICsxMCwxNCBAQCBQQVNTIG5vblN0cmljdENhbGxlcihub25TdHJpY3RDYWxsZWUpIGlz
CiBQQVNTIG5vblN0cmljdENhbGxlcihzdHJpY3RDYWxsZWUpIHRocmV3IGV4Y2VwdGlvbiBUeXBl
RXJyb3I6IFR5cGUgZXJyb3IuCiBQQVNTIHN0cmljdENhbGxlcihub25TdHJpY3RDYWxsZWUpIHRo
cmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IEZ1bmN0aW9uLmNhbGxlciB1c2VkIHRvIHJldHJpZXZl
IHN0cmljdCBjYWxsZXIuCiBQQVNTIHN0cmljdENhbGxlcihzdHJpY3RDYWxsZWUpIHRocmV3IGV4
Y2VwdGlvbiBUeXBlRXJyb3I6IFR5cGUgZXJyb3IuCitQQVNTIHN0cmljdFRhaWxDYWxsZXIobm9u
U3RyaWN0Q2FsbGVlKSBpcyBudWxsCitQQVNTIHN0cmljdFRhaWxDYWxsZXIoc3RyaWN0Q2FsbGVl
KSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBUeXBlIGVycm9yLgogUEFTUyBub25TdHJpY3RD
YWxsZXIoYm91bmROb25TdHJpY3RDYWxsZWUpIGlzIG5vblN0cmljdENhbGxlcgogUEFTUyBub25T
dHJpY3RDYWxsZXIoYm91bmRTdHJpY3RDYWxsZWUpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6
IFR5cGUgZXJyb3IuCiBQQVNTIHN0cmljdENhbGxlcihib3VuZE5vblN0cmljdENhbGxlZSkgdGhy
ZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogRnVuY3Rpb24uY2FsbGVyIHVzZWQgdG8gcmV0cmlldmUg
c3RyaWN0IGNhbGxlci4KIFBBU1Mgc3RyaWN0Q2FsbGVyKGJvdW5kU3RyaWN0Q2FsbGVlKSB0aHJl
dyBleGNlcHRpb24gVHlwZUVycm9yOiBUeXBlIGVycm9yLgorUEFTUyBzdHJpY3RUYWlsQ2FsbGVy
KGJvdW5kTm9uU3RyaWN0Q2FsbGVlKSBpcyBudWxsCitQQVNTIHN0cmljdFRhaWxDYWxsZXIoYm91
bmRTdHJpY3RDYWxsZWUpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IFR5cGUgZXJyb3IuCiBQ
QVNTIG5vblN0cmljdEdldHRlcihub25TdHJpY3RBY2Nlc3NvcikgaXMgbm9uU3RyaWN0R2V0dGVy
CiBQQVNTIG5vblN0cmljdFNldHRlcihub25TdHJpY3RBY2Nlc3NvcikgaXMgdHJ1ZQogUEFTUyBu
b25TdHJpY3RHZXR0ZXIoc3RyaWN0QWNjZXNzb3IpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6
IFR5cGUgZXJyb3IuCkluZGV4OiBMYXlvdXRUZXN0cy9qcy9zY3JpcHQtdGVzdHMvY2FsbGVyLXBy
b3BlcnR5LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3NjcmlwdC10ZXN0cy9jYWxs
ZXItcHJvcGVydHkuanMJKHJldmlzaW9uIDE5MDE1MykKKysrIExheW91dFRlc3RzL2pzL3Njcmlw
dC10ZXN0cy9jYWxsZXItcHJvcGVydHkuanMJKHdvcmtpbmcgY29weSkKQEAgLTIzLDExICsyMywx
NSBAQCBzaG91bGRCZSgnY2hpbGRIYXNDYWxsZXJXaGVuQ2FsbGVkRnJvbVdpCiBmdW5jdGlvbiBu
b25TdHJpY3RDYWxsZWUoKSB7IHJldHVybiBub25TdHJpY3RDYWxsZWUuY2FsbGVyOyB9CiBmdW5j
dGlvbiBzdHJpY3RDYWxsZWUoKSB7ICJ1c2Ugc3RyaWN0IjsgcmV0dXJuIHN0cmljdENhbGxlZS5j
YWxsZXI7IH0KIGZ1bmN0aW9uIG5vblN0cmljdENhbGxlcih4KSB7IHJldHVybiB4KCk7IH0KLWZ1
bmN0aW9uIHN0cmljdENhbGxlcih4KSB7ICJ1c2Ugc3RyaWN0IjsgcmV0dXJuIHgoKTsgfQorLy8g
VGFpbCBjYWxscyBsZWFrIGFuZCBzaG93IG91ciBjYWxsZXIncyBjYWxsZXIsIHdoaWNoIGlzIG51
bGwgaGVyZQorZnVuY3Rpb24gc3RyaWN0Q2FsbGVyKHgpIHsgInVzZSBzdHJpY3QiOyB2YXIgcmVz
dWx0ID0geCgpOyByZXR1cm4gcmVzdWx0OyB9CitmdW5jdGlvbiBzdHJpY3RUYWlsQ2FsbGVyKHgp
IHsgInVzZSBzdHJpY3QiOyByZXR1cm4geCgpOyB9CiBzaG91bGRCZSgibm9uU3RyaWN0Q2FsbGVy
KG5vblN0cmljdENhbGxlZSkiLCAibm9uU3RyaWN0Q2FsbGVyIik7CiBzaG91bGRUaHJvdygibm9u
U3RyaWN0Q2FsbGVyKHN0cmljdENhbGxlZSkiLCAnIlR5cGVFcnJvcjogVHlwZSBlcnJvciInKTsK
IHNob3VsZFRocm93KCJzdHJpY3RDYWxsZXIobm9uU3RyaWN0Q2FsbGVlKSIsICciVHlwZUVycm9y
OiBGdW5jdGlvbi5jYWxsZXIgdXNlZCB0byByZXRyaWV2ZSBzdHJpY3QgY2FsbGVyIicpOwogc2hv
dWxkVGhyb3coInN0cmljdENhbGxlcihzdHJpY3RDYWxsZWUpIiwgJyJUeXBlRXJyb3I6IFR5cGUg
ZXJyb3IiJyk7CitzaG91bGRCZSgic3RyaWN0VGFpbENhbGxlcihub25TdHJpY3RDYWxsZWUpIiwg
Im51bGwiKTsKK3Nob3VsZFRocm93KCJzdHJpY3RUYWlsQ2FsbGVyKHN0cmljdENhbGxlZSkiLCAn
IlR5cGVFcnJvcjogVHlwZSBlcnJvciInKTsKIAogLy8gLmNhbGxlciB3aXRoaW4gYSBib3VuZCBm
dW5jdGlvbiByZWFjaGVzIHRoZSBjYWxsZXIsIGlnbm9yaW5nIHRoZSBiaW5kaW5nLgogdmFyIGJv
dW5kTm9uU3RyaWN0Q2FsbGVlID0gbm9uU3RyaWN0Q2FsbGVlLmJpbmQoKTsKQEAgLTM2LDYgKzQw
LDggQEAgc2hvdWxkQmUoIm5vblN0cmljdENhbGxlcihib3VuZE5vblN0cmljdAogc2hvdWxkVGhy
b3coIm5vblN0cmljdENhbGxlcihib3VuZFN0cmljdENhbGxlZSkiLCAnIlR5cGVFcnJvcjogVHlw
ZSBlcnJvciInKTsKIHNob3VsZFRocm93KCJzdHJpY3RDYWxsZXIoYm91bmROb25TdHJpY3RDYWxs
ZWUpIiwgJyJUeXBlRXJyb3I6IEZ1bmN0aW9uLmNhbGxlciB1c2VkIHRvIHJldHJpZXZlIHN0cmlj
dCBjYWxsZXIiJyk7CiBzaG91bGRUaHJvdygic3RyaWN0Q2FsbGVyKGJvdW5kU3RyaWN0Q2FsbGVl
KSIsICciVHlwZUVycm9yOiBUeXBlIGVycm9yIicpOworc2hvdWxkQmUoInN0cmljdFRhaWxDYWxs
ZXIoYm91bmROb25TdHJpY3RDYWxsZWUpIiwgIm51bGwiKTsKK3Nob3VsZFRocm93KCJzdHJpY3RU
YWlsQ2FsbGVyKGJvdW5kU3RyaWN0Q2FsbGVlKSIsICciVHlwZUVycm9yOiBUeXBlIGVycm9yIicp
OwogCiAvLyBDaGVjayB0aGF0IC5jYWxsZXIgd29ya3MgKG9yIHRocm93cykgYXMgZXhwZWN0ZWQs
IG92ZXIgYW4gYWNjZXNzb3IgY2FsbC4KIGZ1bmN0aW9uIGdldEZvb0dldHRlcih4KSB7IHJldHVy
biBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHgsICdmb28nKS5nZXQ7IH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>261822</attachid>
            <date>2015-09-23 07:50:16 -0700</date>
            <delta_ts>2015-09-23 14:17:38 -0700</delta_ts>
            <desc>Patch with build fixes</desc>
            <filename>148663-3.patch</filename>
            <type>text/plain</type>
            <size>99896</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTkwMTUzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1NSBA
QAorMjAxNS0wOS0yMiAgTWljaGFlbCBTYWJvZmYgIDxtc2Fib2ZmQGFwcGxlLmNvbT4KKworICAg
ICAgICBbRVM2XSBJbXBsZW1lbnQgdGFpbCBjYWxscyBpbiB0aGUgREZHCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDg2NjMKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBqc2MtdGFpbGNhbGw6IEltcGxlbWVu
dCB0aGUgdGFpbCBjYWxsIG9wY29kZXMgaW4gdGhlIERGRworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ2ODUwCisKKyAgICAgICAgVGhpcyBwYXRjaCBh
ZGRzIHN1cHBvcnQgZm9yIHRhaWwgY2FsbHMgaW4gdGhlIERGRy4gVGhpcyByZXF1aXJlcyBhIHNs
aWdodGx5IGhpZ2ggbnVtYmVyIG9mIG5vZGVzOgorCisgICAgICAgICAtIFRhaWxDYWxsIGFuZCBU
YWlsQ2FsbFZhcmFyZ3MgYXJlIHN0cmFpZ2h0Zm9yd2FyZC4gVGhleSBhcmUgdGVybWluYWwKKyAg
ICAgICAgICAgbm9kZXMgYW5kIGhhdmUgdGhlIHNlbWFudGljcyBvZiBhbiBhY3R1YWwgdGFpbCBj
YWxsLgorCisgICAgICAgICAtIFRhaWxDYWxsSW5saW5lZENhbGxlciBhbmQgVGFpbENhbGxWYXJh
cmdzSW5saW5lZENhbGxlciBhcmUgaGVyZSB0byBwZXJmb3JtIGEKKyAgICAgICAgICAgdGFpbCBj
YWxsIGluc2lkZSBhbiBpbmxpbmVkIGZ1bmN0aW9uLiBUaGV5IGFyZSBub24gdGVybWluYWwgbm9k
ZXMsCisgICAgICAgICAgIGFuZCBhcmUgcGVyZm9ybWluZyB0aGUgY2FsbCBhcyBhIHJlZ3VsYXIg
Y2FsbCBhZnRlciBwb3BwaW5nIGFuCisgICAgICAgICAgIGFwcHJvcHJpYXRlIG51bWJlciBvZiBp
bmxpbmVkIHRhaWwgY2FsbCBmcmFtZXMuCisKKyAgICAgICAgIC0gVGFpbENhbGxGb3J3YXJkVmFy
YXJncyBhbmQgVGFpbENhbGxGb3J3YXJkVmFyYXJnc0lubGluZWRDYWxsZXIgYXJlIHRoZQorICAg
ICAgICAgICBleHRlbnNpb24gb2YgVGFpbENhbGxWYXJhcmdzIGFuZCBUYWlsQ2FsbFZhcmFyZ3NJ
bmxpbmVkQ2FsbGVyIHRvIGVuYWJsZQorICAgICAgICAgICB0aGUgdmFyYXJncyBmb3J3YXJkaW5n
IG9wdGltaXphdGlvbiBzbyB0aGF0IHdlIGRvbid0IGxvc2UKKyAgICAgICAgICAgcGVyZm9ybWFu
Y2Ugd2l0aCBhIHRhaWwgY2FsbCBpbnN0ZWFkIG9mIGEgcmVndWxhciBjYWxsLgorCisgICAgICAg
IFRoaXMgYWxzbyByZXF1aXJlZCB0d28gYnJvYWQga2luZCBvZiBjaGFuZ2VzOgorCisgICAgICAg
ICAtIENoYW5nZXMgaW4gdGhlIEpJVCBpdHNlbGYgKERGR1NwZWN1bGF0aXZlSklUKSBhcmUgcHJl
dHR5CisgICAgICAgICAgIHN0cmFpZ2h0Zm9yd2FyZCBzaW5jZSB0aGV5IGFyZSBqdXN0IGFuIGV4
dGVuc2lvbiBvZiB0aGUgYmFzZWxpbmUgSklUCisgICAgICAgICAgIGNoYW5nZXMgaW50cm9kdWNl
ZCBwcmV2aW91c2x5LgorCisgICAgICAgICAtIENoYW5nZXMgaW4gdGhlIHJ1bnRpbWUgYXJlIG1v
c3RseSByZWxhdGVkIHdpdGggaGFuZGxpbmcgaW5saW5lIGNhbGwKKyAgICAgICAgICAgZnJhbWVz
LiBUaGUgaWRlYSBoZXJlIGlzIHRoYXQgd2UgaGF2ZSBhIHNwZWNpYWwgVGFpbENhbGwgdHlwZSBm
b3IKKyAgICAgICAgICAgY2FsbCBmcmFtZXMgdGhhdCBpbmRpY2F0ZXMgdG8gdGhlIHZhcmlvdXMg
cGllY2VzIG9mIGNvZGUgd2Fsa2luZyB0aGUKKyAgICAgICAgICAgaW5saW5lIGNhbGwgZnJhbWUg
dGhhdCB0aGV5IHNob3VsZCAocmVjdXJzaXZlbHkpIHNraXAgdGhlIGNhbGxlciBpbgorICAgICAg
ICAgICB0aGVpciBhbmFseXNpcy4KKworICAgICAgICAqIGJ5dGVjb2RlL0NhbGxNb2RlLmg6Cisg
ICAgICAgIChKU0M6OnNwZWNpYWxpemF0aW9uS2luZEZvcik6CisgICAgICAgICogYnl0ZWNvZGUv
Q29kZU9yaWdpbi5jcHA6CisgICAgICAgIChKU0M6OkNvZGVPcmlnaW46OmlubGluZURlcHRoRm9y
Q2FsbEZyYW1lKToKKyAgICAgICAgKEpTQzo6Q29kZU9yaWdpbjo6aXNBcHByb3hpbWF0ZWx5RXF1
YWxUbyk6CisgICAgICAgIChKU0M6OkNvZGVPcmlnaW46OmFwcHJveGltYXRlSGFzaCk6CisgICAg
ICAgIChKU0M6OkNvZGVPcmlnaW46OmlubGluZVN0YWNrKToKKyAgICAgICAgKiBieXRlY29kZS9D
b2RlT3JpZ2luLmg6CisgICAgICAgICogYnl0ZWNvZGUvSW5saW5lQ2FsbEZyYW1lLmNwcDoKKyAg
ICAgICAgKEpTQzo6SW5saW5lQ2FsbEZyYW1lOjpkdW1wSW5Db250ZXh0KToKKyAgICAgICAgKFdU
Rjo6cHJpbnRJbnRlcm5hbCk6CisgICAgICAgICogYnl0ZWNvZGUvSW5saW5lQ2FsbEZyYW1lLmg6
CisgICAgICAgIChKU0M6OklubGluZUNhbGxGcmFtZTo6Y2FsbE1vZGVGb3IpOgorICAgICAgICAo
SlNDOjpJbmxpbmVDYWxsRnJhbWU6OmtpbmRGb3IpOgorICAgICAgICAoSlNDOjpJbmxpbmVDYWxs
RnJhbWU6OnZhcmFyZ3NLaW5kRm9yKToKKyAgICAgICAgKEpTQzo6SW5saW5lQ2FsbEZyYW1lOjpz
cGVjaWFsaXphdGlvbktpbmRGb3IpOgorICAgICAgICAoSlNDOjpJbmxpbmVDYWxsRnJhbWU6Omlz
VmFyYXJncyk6CisgICAgICAgIChKU0M6OklubGluZUNhbGxGcmFtZTo6aXNUYWlsKToKKyAgICAg
ICAgKEpTQzo6SW5saW5lQ2FsbEZyYW1lOjpjb21wdXRlQ2FsbGVyU2tpcHBpbmdEZWFkRnJhbWVz
KToKKyAgICAgICAgKEpTQzo6SW5saW5lQ2FsbEZyYW1lOjpnZXRDYWxsZXJTa2lwcGluZ0RlYWRG
cmFtZXMpOgorICAgICAgICAoSlNDOjpJbmxpbmVDYWxsRnJhbWU6OmdldENhbGxlcklubGluZUZy
YW1lU2tpcHBpbmdEZWFkRnJhbWVzKToKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RJbnRlcnBy
ZXRlcklubGluZXMuaDoKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEludGVycHJldGVyPEFi
c3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHMpOgorICAgICAgICAqIGRmZy9ERkdBcmd1
bWVudHNFbGltaW5hdGlvblBoYXNlLmNwcDoKKyAgICAgICAgKiBkZmcvREZHQmFzaWNCbG9jay5o
OgorICAgICAgICAoSlNDOjpERkc6OkJhc2ljQmxvY2s6OmZpbmRUZXJtaW5hbCk6CisgICAgICAg
ICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29k
ZVBhcnNlcjo6aW5saW5lQ2FsbEZyYW1lKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBh
cnNlcjo6YWxsSW5saW5lRnJhbWVzQXJlVGFpbENhbGxzKToKKyAgICAgICAgKEpTQzo6REZHOjpC
eXRlQ29kZVBhcnNlcjo6Y3VycmVudENvZGVPcmlnaW4pOgorICAgICAgICAoSlNDOjpERkc6OkJ5
dGVDb2RlUGFyc2VyOjphZGRDYWxsV2l0aG91dFNldHRpbmdSZXN1bHQpOgorICAgICAgICAoSlND
OjpERkc6OkJ5dGVDb2RlUGFyc2VyOjphZGRDYWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRl
Q29kZVBhcnNlcjo6Z2V0UHJlZGljdGlvbldpdGhvdXRPU1JFeGl0KToKKyAgICAgICAgKEpTQzo6
REZHOjpCeXRlQ29kZVBhcnNlcjo6Z2V0UHJlZGljdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6
Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUNhbGwpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2Rl
UGFyc2VyOjpoYW5kbGVWYXJhcmdzQ2FsbCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQ
YXJzZXI6OmVtaXRBcmd1bWVudFBoYW50b21zKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29k
ZVBhcnNlcjo6aW5saW5pbmdDb3N0KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNl
cjo6aW5saW5lQ2FsbCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmF0dGVt
cHRUb0lubGluZUNhbGwpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJz
ZUJsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6SW5saW5lU3RhY2tF
bnRyeTo6SW5saW5lU3RhY2tFbnRyeSk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJz
ZXI6OnBhcnNlQ29kZUJsb2NrKToKKyAgICAgICAgKiBkZmcvREZHQ2FwYWJpbGl0aWVzLmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpjYXBhYmlsaXR5TGV2ZWwpOgorICAgICAgICAqIGRmZy9ERkdD
bG9iYmVyaXplLmg6CisgICAgICAgIChKU0M6OkRGRzo6Y2xvYmJlcml6ZSk6CisgICAgICAgICog
ZGZnL0RGR0RvZXNHQy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6ZG9lc0dDKToKKyAgICAgICAg
KiBkZmcvREZHRml4dXBQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Rml4dXBQaGFzZTo6
Zml4dXBOb2RlKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OkdyYXBoOjppc0xpdmVJbkJ5dGVjb2RlKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguaDoK
KyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6Zm9yQWxsTG9jYWxzTGl2ZUluQnl0ZWNvZGUpOgor
ICAgICAgICAqIGRmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6SW5QbGFjZUFic3RyYWN0U3RhdGU6Om1lcmdlVG9TdWNjZXNzb3JzKToKKyAgICAgICAg
KiBkZmcvREZHSklUQ29tcGlsZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVy
Ojp3aWxsQ2F0Y2hFeGNlcHRpb25Jbk1hY2hpbmVGcmFtZSk6CisgICAgICAgICogZGZnL0RGR0xp
dmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OkZsdXNoTGl2ZUNhdGNoVmFyaWFibGVzSW5zZXJ0aW9uUGhhc2U6OndpbGxDYXRjaEV4Y2VwdGlv
bik6CisgICAgICAgICogZGZnL0RGR05vZGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpo
YXNDYWxsVmFyYXJnc0RhdGEpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmlzVGVybWluYWwp
OgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc0hlYXBQcmVkaWN0aW9uKToKKyAgICAgICAg
KiBkZmcvREZHTm9kZVR5cGUuaDoKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdENvbXBpbGVyQ29t
bW9uLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpoYW5kbGVFeGl0Q291bnRzKToKKyAgICAgICAg
KEpTQzo6REZHOjpyZWlmeUlubGluZWRDYWxsRnJhbWVzKToKKyAgICAgICAgKEpTQzo6REZHOjpv
c3JXcml0ZUJhcnJpZXIpOgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0UHJlcGFyYXRpb24uY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OnByZXBhcmVDb2RlT3JpZ2luRm9yT1NSRXhpdCk6CisgICAg
ICAgICogZGZnL0RGR09wZXJhdGlvbnMuY3BwOgorICAgICAgICAqIGRmZy9ERkdQcmVjaXNlTG9j
YWxDbG9iYmVyaXplLmg6CisgICAgICAgIChKU0M6OkRGRzo6UHJlY2lzZUxvY2FsQ2xvYmJlcml6
ZUFkYXB0b3I6OnJlYWRUb3ApOgorICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRp
b25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6UHJlZGljdGlvblByb3BhZ2F0aW9uUGhh
c2U6OnByb3BhZ2F0ZSk6CisgICAgICAgICogZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaDoKKyAgICAg
ICAgKEpTQzo6REZHOjpzYWZlVG9FeGVjdXRlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRp
dmVKSVQzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmVtaXRD
YWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAg
ICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjplbWl0Q2FsbCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdWYWxpZGF0ZS5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6VmFsaWRhdGU6OnZhbGlkYXRlU1NBKToKKyAgICAgICAgKiBkZmcvREZHVmFyYXJn
c0ZvcndhcmRpbmdQaGFzZS5jcHA6CisgICAgICAgICogaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNw
cDoKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lOjpieXRlY29kZU9mZnNldCk6CisgICAgICAgICog
aW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6U3RhY2tWaXNpdG9y
Ojpnb3RvTmV4dEZyYW1lKToKKyAgICAgICAgKiBydW50aW1lL09wdGlvbnMuaDoKKyAgICAgICAg
KiB0ZXN0cy9zdHJlc3MvZGZnLXRhaWwtY2FsbHMuanM6IEFkZGVkLgorICAgICAgICAobm9uSW5s
aW5lZFRhaWxDYWxsLmNhbGxlZSk6CisgICAgICAgIChub25JbmxpbmVkVGFpbENhbGwuY2FsbGVy
KToKKyAgICAgICAgKG5vbklubGluZWRUYWlsQ2FsbC5sb29wKToKKyAgICAgICAgKG5vbklubGlu
ZWRUYWlsQ2FsbCk6CisgICAgICAgIChpbmxpbmVkVGFpbENhbGwuY2FsbGVlKToKKyAgICAgICAg
KGlubGluZWRUYWlsQ2FsbC5jYWxsZXIpOgorICAgICAgICAoaW5saW5lZFRhaWxDYWxsLmxvb3Ap
OgorICAgICAgICAoaW5saW5lZFRhaWxDYWxsKToKKyAgICAgICAgKG5vbklubGluZWRFbXVsYXRl
ZFRhaWxDYWxsLmVtdWxhdG9yKToKKyAgICAgICAgKG5vbklubGluZWRFbXVsYXRlZFRhaWxDYWxs
LmNhbGxlZSk6CisgICAgICAgIChub25JbmxpbmVkRW11bGF0ZWRUYWlsQ2FsbC5jYWxsZXIpOgor
ICAgICAgICAobm9uSW5saW5lZEVtdWxhdGVkVGFpbENhbGwucGFkKToKKyAgICAgICAgKG5vbklu
bGluZWRFbXVsYXRlZFRhaWxDYWxsLmxvb3ApOgorICAgICAgICAobm9uSW5saW5lZEVtdWxhdGVk
VGFpbENhbGwpOgorICAgICAgICAoaW5saW5lZEVtdWxhdGVkVGFpbENhbGwuZW11bGF0b3IpOgor
ICAgICAgICAoaW5saW5lZEVtdWxhdGVkVGFpbENhbGwuY2FsbGVlKToKKyAgICAgICAgKGlubGlu
ZWRFbXVsYXRlZFRhaWxDYWxsLmNhbGxlcik6CisgICAgICAgIChpbmxpbmVkRW11bGF0ZWRUYWls
Q2FsbC5wYWQpOgorICAgICAgICAoaW5saW5lZEVtdWxhdGVkVGFpbENhbGwubG9vcCk6CisgICAg
ICAgIChpbmxpbmVkRW11bGF0ZWRUYWlsQ2FsbCk6CisKIDIwMTUtMDktMjIgIEZpbGlwIFBpemxv
ICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBHQ1RocmVhZFNoYXJlZERhdGEgaXMganVz
dCBhIGJhZCB3YXkgb2Ygc2F5aW5nIEhlYXAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9DYWxsTW9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9DYWxsTW9kZS5oCShyZXZpc2lvbiAxOTAxNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ2FsbE1vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsMTIgKzI2LDIy
IEBACiAjaWZuZGVmIENhbGxNb2RlX2gKICNkZWZpbmUgQ2FsbE1vZGVfaAogCisjaW5jbHVkZSAi
Q29kZVNwZWNpYWxpemF0aW9uS2luZC5oIgorCiBuYW1lc3BhY2UgSlNDIHsKIAogZW51bSBjbGFz
cyBDYWxsTW9kZSB7IFJlZ3VsYXIsIFRhaWwsIENvbnN0cnVjdCB9OwogCiBlbnVtIEZyYW1lQWN0
aW9uIHsgS2VlcFRoZUZyYW1lID0gMCwgUmV1c2VUaGVGcmFtZSB9OwogCitpbmxpbmUgQ29kZVNw
ZWNpYWxpemF0aW9uS2luZCBzcGVjaWFsaXphdGlvbktpbmRGb3IoQ2FsbE1vZGUgY2FsbE1vZGUp
Cit7CisgICAgaWYgKGNhbGxNb2RlID09IENhbGxNb2RlOjpDb25zdHJ1Y3QpCisgICAgICAgIHJl
dHVybiBDb2RlRm9yQ29uc3RydWN0OworCisgICAgcmV0dXJuIENvZGVGb3JDYWxsOworfQorCiB9
IC8vIG5hbWVzcGFjZSBKU0MKIAogbmFtZXNwYWNlIFdURiB7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uY3BwCShyZXZpc2lvbiAxOTAxNTMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM3LDcgKzM3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiB1bnNpZ25lZCBDb2RlT3Jp
Z2luOjppbmxpbmVEZXB0aEZvckNhbGxGcmFtZShJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxG
cmFtZSkKIHsKICAgICB1bnNpZ25lZCByZXN1bHQgPSAxOwotICAgIGZvciAoSW5saW5lQ2FsbEZy
YW1lKiBjdXJyZW50ID0gaW5saW5lQ2FsbEZyYW1lOyBjdXJyZW50OyBjdXJyZW50ID0gY3VycmVu
dC0+Y2FsbGVyLmlubGluZUNhbGxGcmFtZSkKKyAgICBmb3IgKElubGluZUNhbGxGcmFtZSogY3Vy
cmVudCA9IGlubGluZUNhbGxGcmFtZTsgY3VycmVudDsgY3VycmVudCA9IGN1cnJlbnQtPmRpcmVj
dENhbGxlci5pbmxpbmVDYWxsRnJhbWUpCiAgICAgICAgIHJlc3VsdCsrOwogICAgIHJldHVybiBy
ZXN1bHQ7CiB9CkBAIC03OCw4ICs3OCw4IEBAIGJvb2wgQ29kZU9yaWdpbjo6aXNBcHByb3hpbWF0
ZWx5RXF1YWxUbygKICAgICAgICAgaWYgKGEuaW5saW5lQ2FsbEZyYW1lLT5leGVjdXRhYmxlLmdl
dCgpICE9IGIuaW5saW5lQ2FsbEZyYW1lLT5leGVjdXRhYmxlLmdldCgpKQogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwogICAgICAgICAKLSAgICAgICAgYSA9IGEuaW5saW5lQ2FsbEZyYW1lLT5j
YWxsZXI7Ci0gICAgICAgIGIgPSBiLmlubGluZUNhbGxGcmFtZS0+Y2FsbGVyOworICAgICAgICBh
ID0gYS5pbmxpbmVDYWxsRnJhbWUtPmRpcmVjdENhbGxlcjsKKyAgICAgICAgYiA9IGIuaW5saW5l
Q2FsbEZyYW1lLT5kaXJlY3RDYWxsZXI7CiAgICAgfQogfQogCkBAIC0xMDAsNyArMTAwLDcgQEAg
dW5zaWduZWQgQ29kZU9yaWdpbjo6YXBwcm94aW1hdGVIYXNoKCkgYwogICAgICAgICAKICAgICAg
ICAgcmVzdWx0ICs9IFdURjo6UHRySGFzaDxKU0NlbGwqPjo6aGFzaChjb2RlT3JpZ2luLmlubGlu
ZUNhbGxGcmFtZS0+ZXhlY3V0YWJsZS5nZXQoKSk7CiAgICAgICAgIAotICAgICAgICBjb2RlT3Jp
Z2luID0gY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmNhbGxlcjsKKyAgICAgICAgY29kZU9y
aWdpbiA9IGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5kaXJlY3RDYWxsZXI7CiAgICAgfQog
fQogCkBAIC0xMDksOCArMTA5LDggQEAgVmVjdG9yPENvZGVPcmlnaW4+IENvZGVPcmlnaW46Omlu
bGluZVN0YQogICAgIFZlY3RvcjxDb2RlT3JpZ2luPiByZXN1bHQoaW5saW5lRGVwdGgoKSk7CiAg
ICAgcmVzdWx0Lmxhc3QoKSA9ICp0aGlzOwogICAgIHVuc2lnbmVkIGluZGV4ID0gcmVzdWx0LnNp
emUoKSAtIDI7Ci0gICAgZm9yIChJbmxpbmVDYWxsRnJhbWUqIGN1cnJlbnQgPSBpbmxpbmVDYWxs
RnJhbWU7IGN1cnJlbnQ7IGN1cnJlbnQgPSBjdXJyZW50LT5jYWxsZXIuaW5saW5lQ2FsbEZyYW1l
KQotICAgICAgICByZXN1bHRbaW5kZXgtLV0gPSBjdXJyZW50LT5jYWxsZXI7CisgICAgZm9yIChJ
bmxpbmVDYWxsRnJhbWUqIGN1cnJlbnQgPSBpbmxpbmVDYWxsRnJhbWU7IGN1cnJlbnQ7IGN1cnJl
bnQgPSBjdXJyZW50LT5kaXJlY3RDYWxsZXIuaW5saW5lQ2FsbEZyYW1lKQorICAgICAgICByZXN1
bHRbaW5kZXgtLV0gPSBjdXJyZW50LT5kaXJlY3RDYWxsZXI7CiAgICAgUkVMRUFTRV9BU1NFUlQo
IXJlc3VsdFswXS5pbmxpbmVDYWxsRnJhbWUpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmgJKHJldmlzaW9u
IDE5MDE1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTI2LDYgKzI2LDcgQEAKICNpZm5kZWYgQ29kZU9yaWdpbl9oCiAj
ZGVmaW5lIENvZGVPcmlnaW5faAogCisjaW5jbHVkZSAiQ2FsbE1vZGUuaCIKICNpbmNsdWRlICJD
b2RlQmxvY2tIYXNoLmgiCiAjaW5jbHVkZSAiQ29kZVNwZWNpYWxpemF0aW9uS2luZC5oIgogI2lu
Y2x1ZGUgIldyaXRlQmFycmllci5oIgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0lubGluZUNhbGxGcmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0lubGluZUNhbGxGcmFtZS5jcHAJKHJldmlzaW9uIDE5MDE1MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVDYWxsRnJhbWUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC03Nyw3ICs3Nyw3IEBAIHZvaWQgSW5saW5lQ2FsbEZyYW1lOjpkdW1wSW5Db250
ZXh0KFByaW4KICAgICBvdXQucHJpbnQoYnJpZWZGdW5jdGlvbkluZm9ybWF0aW9uKCksICI6PCIs
IFJhd1BvaW50ZXIoZXhlY3V0YWJsZS5nZXQoKSkpOwogICAgIGlmIChleGVjdXRhYmxlLT5pc1N0
cmljdE1vZGUoKSkKICAgICAgICAgb3V0LnByaW50KCIgKFN0cmljdE1vZGUpIik7Ci0gICAgb3V0
LnByaW50KCIsIGJjIyIsIGNhbGxlci5ieXRlY29kZUluZGV4LCAiLCAiLCBraW5kKTsKKyAgICBv
dXQucHJpbnQoIiwgYmMjIiwgZGlyZWN0Q2FsbGVyLmJ5dGVjb2RlSW5kZXgsICIsICIsIHN0YXRp
Y19jYXN0PEtpbmQ+KGtpbmQpKTsKICAgICBpZiAoaXNDbG9zdXJlQ2FsbCkKICAgICAgICAgb3V0
LnByaW50KCIsIGNsb3N1cmUgY2FsbCIpOwogICAgIGVsc2UKQEAgLTEwNSwxMiArMTA1LDE4IEBA
IHZvaWQgcHJpbnRJbnRlcm5hbChQcmludFN0cmVhbSYgb3V0LCBKU0MKICAgICBjYXNlIEpTQzo6
SW5saW5lQ2FsbEZyYW1lOjpDb25zdHJ1Y3Q6CiAgICAgICAgIG91dC5wcmludCgiQ29uc3RydWN0
Iik7CiAgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEpTQzo6SW5saW5lQ2FsbEZyYW1lOjpUYWls
Q2FsbDoKKyAgICAgICAgb3V0LnByaW50KCJUYWlsQ2FsbCIpOworICAgICAgICByZXR1cm47CiAg
ICAgY2FzZSBKU0M6OklubGluZUNhbGxGcmFtZTo6Q2FsbFZhcmFyZ3M6CiAgICAgICAgIG91dC5w
cmludCgiQ2FsbFZhcmFyZ3MiKTsKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgSlNDOjpJbmxp
bmVDYWxsRnJhbWU6OkNvbnN0cnVjdFZhcmFyZ3M6CiAgICAgICAgIG91dC5wcmludCgiQ29uc3Ry
dWN0VmFyYXJncyIpOwogICAgICAgICByZXR1cm47CisgICAgY2FzZSBKU0M6OklubGluZUNhbGxG
cmFtZTo6VGFpbENhbGxWYXJhcmdzOgorICAgICAgICBvdXQucHJpbnQoIlRhaWxDYWxsVmFyYXJn
cyIpOworICAgICAgICByZXR1cm47CiAgICAgY2FzZSBKU0M6OklubGluZUNhbGxGcmFtZTo6R2V0
dGVyQ2FsbDoKICAgICAgICAgb3V0LnByaW50KCJHZXR0ZXJDYWxsIik7CiAgICAgICAgIHJldHVy
bjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVDYWxsRnJhbWUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQ2Fs
bEZyYW1lLmgJKHJldmlzaW9uIDE5MDE1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9JbmxpbmVDYWxsRnJhbWUuaAkod29ya2luZyBjb3B5KQpAQCAtNDksMzcgKzQ5LDU5IEBA
IHN0cnVjdCBJbmxpbmVDYWxsRnJhbWUgewogICAgIGVudW0gS2luZCB7CiAgICAgICAgIENhbGws
CiAgICAgICAgIENvbnN0cnVjdCwKKyAgICAgICAgVGFpbENhbGwsCiAgICAgICAgIENhbGxWYXJh
cmdzLAogICAgICAgICBDb25zdHJ1Y3RWYXJhcmdzLAorICAgICAgICBUYWlsQ2FsbFZhcmFyZ3Ms
CiAgICAgICAgIAogICAgICAgICAvLyBGb3IgdGhlc2UsIHRoZSBzdGFja09mZnNldCBpbmNvcnBv
cmF0ZXMgdGhlIGFyZ3VtZW50IGNvdW50IHBsdXMgdGhlIHRydWUgcmV0dXJuIFBDCiAgICAgICAg
IC8vIHNsb3QuCiAgICAgICAgIEdldHRlckNhbGwsCiAgICAgICAgIFNldHRlckNhbGwKICAgICB9
OwotICAgIAotICAgIHN0YXRpYyBLaW5kIGtpbmRGb3IoQ29kZVNwZWNpYWxpemF0aW9uS2luZCBr
aW5kKQorCisgICAgc3RhdGljIENhbGxNb2RlIGNhbGxNb2RlRm9yKEtpbmQga2luZCkKICAgICB7
CiAgICAgICAgIHN3aXRjaCAoa2luZCkgewotICAgICAgICBjYXNlIENvZGVGb3JDYWxsOgorICAg
ICAgICBjYXNlIENhbGw6CisgICAgICAgIGNhc2UgQ2FsbFZhcmFyZ3M6CisgICAgICAgIGNhc2Ug
R2V0dGVyQ2FsbDoKKyAgICAgICAgY2FzZSBTZXR0ZXJDYWxsOgorICAgICAgICAgICAgcmV0dXJu
IENhbGxNb2RlOjpSZWd1bGFyOworICAgICAgICBjYXNlIFRhaWxDYWxsOgorICAgICAgICBjYXNl
IFRhaWxDYWxsVmFyYXJnczoKKyAgICAgICAgICAgIHJldHVybiBDYWxsTW9kZTo6VGFpbDsKKyAg
ICAgICAgY2FzZSBDb25zdHJ1Y3Q6CisgICAgICAgIGNhc2UgQ29uc3RydWN0VmFyYXJnczoKKyAg
ICAgICAgICAgIHJldHVybiBDYWxsTW9kZTo6Q29uc3RydWN0OworICAgICAgICB9CisgICAgICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorCisgICAgc3RhdGljIEtpbmQg
a2luZEZvcihDYWxsTW9kZSBjYWxsTW9kZSkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoY2FsbE1v
ZGUpIHsKKyAgICAgICAgY2FzZSBDYWxsTW9kZTo6UmVndWxhcjoKICAgICAgICAgICAgIHJldHVy
biBDYWxsOwotICAgICAgICBjYXNlIENvZGVGb3JDb25zdHJ1Y3Q6CisgICAgICAgIGNhc2UgQ2Fs
bE1vZGU6OkNvbnN0cnVjdDoKICAgICAgICAgICAgIHJldHVybiBDb25zdHJ1Y3Q7CisgICAgICAg
IGNhc2UgQ2FsbE1vZGU6OlRhaWw6CisgICAgICAgICAgICByZXR1cm4gVGFpbENhbGw7CiAgICAg
ICAgIH0KICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0
dXJuIENhbGw7CiAgICAgfQogICAgIAotICAgIHN0YXRpYyBLaW5kIHZhcmFyZ3NLaW5kRm9yKENv
ZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKKyAgICBzdGF0aWMgS2luZCB2YXJhcmdzS2luZEZv
cihDYWxsTW9kZSBjYWxsTW9kZSkKICAgICB7Ci0gICAgICAgIHN3aXRjaCAoa2luZCkgewotICAg
ICAgICBjYXNlIENvZGVGb3JDYWxsOgorICAgICAgICBzd2l0Y2ggKGNhbGxNb2RlKSB7CisgICAg
ICAgIGNhc2UgQ2FsbE1vZGU6OlJlZ3VsYXI6CiAgICAgICAgICAgICByZXR1cm4gQ2FsbFZhcmFy
Z3M7Ci0gICAgICAgIGNhc2UgQ29kZUZvckNvbnN0cnVjdDoKKyAgICAgICAgY2FzZSBDYWxsTW9k
ZTo6Q29uc3RydWN0OgogICAgICAgICAgICAgcmV0dXJuIENvbnN0cnVjdFZhcmFyZ3M7CisgICAg
ICAgIGNhc2UgQ2FsbE1vZGU6OlRhaWw6CisgICAgICAgICAgICByZXR1cm4gVGFpbENhbGxWYXJh
cmdzOwogICAgICAgICB9CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0g
ICAgICAgIHJldHVybiBDYWxsOwogICAgIH0KICAgICAKICAgICBzdGF0aWMgQ29kZVNwZWNpYWxp
emF0aW9uS2luZCBzcGVjaWFsaXphdGlvbktpbmRGb3IoS2luZCBraW5kKQpAQCAtODcsNiArMTA5
LDggQEAgc3RydWN0IElubGluZUNhbGxGcmFtZSB7CiAgICAgICAgIHN3aXRjaCAoa2luZCkgewog
ICAgICAgICBjYXNlIENhbGw6CiAgICAgICAgIGNhc2UgQ2FsbFZhcmFyZ3M6CisgICAgICAgIGNh
c2UgVGFpbENhbGw6CisgICAgICAgIGNhc2UgVGFpbENhbGxWYXJhcmdzOgogICAgICAgICBjYXNl
IEdldHRlckNhbGw6CiAgICAgICAgIGNhc2UgU2V0dGVyQ2FsbDoKICAgICAgICAgICAgIHJldHVy
biBDb2RlRm9yQ2FsbDsKQEAgLTk1LDI0ICsxMTksNjQgQEAgc3RydWN0IElubGluZUNhbGxGcmFt
ZSB7CiAgICAgICAgICAgICByZXR1cm4gQ29kZUZvckNvbnN0cnVjdDsKICAgICAgICAgfQogICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gQ29kZUZv
ckNhbGw7CiAgICAgfQogICAgIAogICAgIHN0YXRpYyBib29sIGlzVmFyYXJncyhLaW5kIGtpbmQp
CiAgICAgewogICAgICAgICBzd2l0Y2ggKGtpbmQpIHsKICAgICAgICAgY2FzZSBDYWxsVmFyYXJn
czoKKyAgICAgICAgY2FzZSBUYWlsQ2FsbFZhcmFyZ3M6CiAgICAgICAgIGNhc2UgQ29uc3RydWN0
VmFyYXJnczoKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICBkZWZhdWx0OgogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9CiAgICAgfQorCisgICAgc3RhdGljIGJv
b2wgaXNUYWlsKEtpbmQga2luZCkKKyAgICB7CisgICAgICAgIHN3aXRjaCAoa2luZCkgeworICAg
ICAgICBjYXNlIFRhaWxDYWxsOgorICAgICAgICBjYXNlIFRhaWxDYWxsVmFyYXJnczoKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9CisgICAgfQorICAgIGJvb2wgaXNUYWlsKCkgY29uc3QKKyAgICB7
CisgICAgICAgIHJldHVybiBpc1RhaWwoc3RhdGljX2Nhc3Q8S2luZD4oa2luZCkpOworICAgIH0K
KworICAgIHN0YXRpYyBDb2RlT3JpZ2luKiBjb21wdXRlQ2FsbGVyU2tpcHBpbmdEZWFkRnJhbWVz
KElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lKQorICAgIHsKKyAgICAgICAgQ29kZU9y
aWdpbiogY29kZU9yaWdpbjsKKyAgICAgICAgYm9vbCB0YWlsQ2FsbGVlOworICAgICAgICBkbyB7
CisgICAgICAgICAgICB0YWlsQ2FsbGVlID0gaW5saW5lQ2FsbEZyYW1lLT5pc1RhaWwoKTsKKyAg
ICAgICAgICAgIGNvZGVPcmlnaW4gPSAmaW5saW5lQ2FsbEZyYW1lLT5kaXJlY3RDYWxsZXI7Cisg
ICAgICAgICAgICBpbmxpbmVDYWxsRnJhbWUgPSBjb2RlT3JpZ2luLT5pbmxpbmVDYWxsRnJhbWU7
CisgICAgICAgIH0gd2hpbGUgKGlubGluZUNhbGxGcmFtZSAmJiB0YWlsQ2FsbGVlKTsKKyAgICAg
ICAgaWYgKHRhaWxDYWxsZWUpCisgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICAgICAg
cmV0dXJuIGNvZGVPcmlnaW47CisgICAgfQorCisgICAgQ29kZU9yaWdpbiogZ2V0Q2FsbGVyU2tp
cHBpbmdEZWFkRnJhbWVzKCkKKyAgICB7CisgICAgICAgIHJldHVybiBjb21wdXRlQ2FsbGVyU2tp
cHBpbmdEZWFkRnJhbWVzKHRoaXMpOworICAgIH0KKworICAgIElubGluZUNhbGxGcmFtZSogZ2V0
Q2FsbGVySW5saW5lRnJhbWVTa2lwcGluZ0RlYWRGcmFtZXMoKQorICAgIHsKKyAgICAgICAgQ29k
ZU9yaWdpbiogY2FsbGVyID0gZ2V0Q2FsbGVyU2tpcHBpbmdEZWFkRnJhbWVzKCk7CisgICAgICAg
IHJldHVybiBjYWxsZXIgPyBjYWxsZXItPmlubGluZUNhbGxGcmFtZSA6IG51bGxwdHI7CisgICAg
fQogICAgIAogICAgIFZlY3RvcjxWYWx1ZVJlY292ZXJ5PiBhcmd1bWVudHM7IC8vIEluY2x1ZGVz
ICd0aGlzJy4KICAgICBXcml0ZUJhcnJpZXI8U2NyaXB0RXhlY3V0YWJsZT4gZXhlY3V0YWJsZTsK
ICAgICBWYWx1ZVJlY292ZXJ5IGNhbGxlZVJlY292ZXJ5OwotICAgIENvZGVPcmlnaW4gY2FsbGVy
OworICAgIENvZGVPcmlnaW4gZGlyZWN0Q2FsbGVyOwogCiAgICAgc2lnbmVkIHN0YWNrT2Zmc2V0
IDogMjg7CiAgICAgdW5zaWduZWQga2luZCA6IDM7IC8vIHJlYWwgdHlwZSBpcyBLaW5kCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdElu
dGVycHJldGVySW5saW5lcy5oCShyZXZpc2lvbiAxOTAxNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTE1NTIsNiArMTU1MiwxMyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RT
dGF0ZVR5CiAgICAgY2FzZSBSZXR1cm46CiAgICAgICAgIG1fc3RhdGUuc2V0SXNWYWxpZChmYWxz
ZSk7CiAgICAgICAgIGJyZWFrOworCisgICAgY2FzZSBUYWlsQ2FsbDoKKyAgICBjYXNlIFRhaWxD
YWxsVmFyYXJnczoKKyAgICBjYXNlIFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3M6CisgICAgICAgIGNs
b2JiZXJXb3JsZChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGNsb2JiZXJMaW1pdCk7CisgICAgICAg
IG1fc3RhdGUuc2V0SXNWYWxpZChmYWxzZSk7CisgICAgICAgIGJyZWFrOwogICAgICAgICAKICAg
ICBjYXNlIFRocm93OgogICAgIGNhc2UgVGhyb3dSZWZlcmVuY2VFcnJvcjoKQEAgLTI0NDIsMTEg
KzI0NDksMTQgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAg
ICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgIGNhc2UgQ2FsbDoKKyAgICBjYXNlIFRhaWxD
YWxsSW5saW5lZENhbGxlcjoKICAgICBjYXNlIENvbnN0cnVjdDoKICAgICBjYXNlIENhbGxWYXJh
cmdzOgogICAgIGNhc2UgQ2FsbEZvcndhcmRWYXJhcmdzOgorICAgIGNhc2UgVGFpbENhbGxWYXJh
cmdzSW5saW5lZENhbGxlcjoKICAgICBjYXNlIENvbnN0cnVjdFZhcmFyZ3M6CiAgICAgY2FzZSBD
b25zdHJ1Y3RGb3J3YXJkVmFyYXJnczoKKyAgICBjYXNlIFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3NJ
bmxpbmVkQ2FsbGVyOgogICAgICAgICBjbG9iYmVyV29ybGQobm9kZS0+b3JpZ2luLnNlbWFudGlj
LCBjbG9iYmVyTGltaXQpOwogICAgICAgICBmb3JOb2RlKG5vZGUpLm1ha2VIZWFwVG9wKCk7CiAg
ICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVu
dHNFbGltaW5hdGlvblBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0FyZ3VtZW50c0VsaW1pbmF0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxOTAxNTMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c0VsaW1pbmF0aW9uUGhh
c2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjcsNiArMTY3LDggQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgY2FzZSBDYWxsVmFyYXJnczoKICAgICAg
ICAgICAgICAgICBjYXNlIENvbnN0cnVjdFZhcmFyZ3M6CisgICAgICAgICAgICAgICAgY2FzZSBU
YWlsQ2FsbFZhcmFyZ3M6CisgICAgICAgICAgICAgICAgY2FzZSBUYWlsQ2FsbFZhcmFyZ3NJbmxp
bmVkQ2FsbGVyOgogICAgICAgICAgICAgICAgICAgICBlc2NhcGUobm9kZS0+Y2hpbGQxKCkpOwog
ICAgICAgICAgICAgICAgICAgICBlc2NhcGUobm9kZS0+Y2hpbGQzKCkpOwogICAgICAgICAgICAg
ICAgICAgICBicmVhazsKQEAgLTU2MCw3ICs1NjIsOSBAQCBwcml2YXRlOgogICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgY2FzZSBDYWxsVmFy
YXJnczoKLSAgICAgICAgICAgICAgICBjYXNlIENvbnN0cnVjdFZhcmFyZ3M6IHsKKyAgICAgICAg
ICAgICAgICBjYXNlIENvbnN0cnVjdFZhcmFyZ3M6CisgICAgICAgICAgICAgICAgY2FzZSBUYWls
Q2FsbFZhcmFyZ3M6CisgICAgICAgICAgICAgICAgY2FzZSBUYWlsQ2FsbFZhcmFyZ3NJbmxpbmVk
Q2FsbGVyOiB7CiAgICAgICAgICAgICAgICAgICAgIE5vZGUqIGNhbmRpZGF0ZSA9IG5vZGUtPmNo
aWxkMigpLm5vZGUoKTsKICAgICAgICAgICAgICAgICAgICAgaWYgKCFtX2NhbmRpZGF0ZXMuY29u
dGFpbnMoY2FuZGlkYXRlKSkKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAtNTg1
LDE2ICs1ODksNDQgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgu
bV92YXJBcmdDaGlsZHJlbi5hcHBlbmQobm9kZS0+Y2hpbGQzKCkpOwogICAgICAgICAgICAgICAg
ICAgICAgICAgZm9yIChOb2RlKiBhcmd1bWVudCA6IGFyZ3VtZW50cykKICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICBtX2dyYXBoLm1fdmFyQXJnQ2hpbGRyZW4uYXBwZW5kKEVkZ2UoYXJndW1l
bnQpKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdz
KAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPm9wKCkgPT0gQ2FsbFZhcmFyZ3Mg
PyBDYWxsIDogQ29uc3RydWN0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHN3aXRjaCAobm9k
ZS0+b3AoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBDYWxsVmFyYXJnczoKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhDYWxs
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGNhc2UgQ29uc3RydWN0VmFyYXJnczoKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBub2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhDb25zdHJ1Y3QpOworICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBUYWlsQ2Fs
bFZhcmFyZ3M6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0T3BBbmREZWZh
dWx0RmxhZ3MoVGFpbENhbGwpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBUYWlsQ2FsbFZhcmFyZ3NJbmxpbmVkQ2FsbGVy
OgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdz
KFRhaWxDYWxsSW5saW5lZENhbGxlcik7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5jaGlsZHJlbiA9IEFkamFj
ZW5jeUxpc3QoCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQWRqYWNlbmN5TGlzdDo6VmFy
aWFibGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlyc3RDaGlsZCwgbV9ncmFwaC5t
X3ZhckFyZ0NoaWxkcmVuLnNpemUoKSAtIGZpcnN0Q2hpbGQpOwogICAgICAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAg
Ci0gICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdzKAotICAgICAg
ICAgICAgICAgICAgICAgICAgbm9kZS0+b3AoKSA9PSBDYWxsVmFyYXJncyA/IENhbGxGb3J3YXJk
VmFyYXJncyA6IENvbnN0cnVjdEZvcndhcmRWYXJhcmdzKTsKKyAgICAgICAgICAgICAgICAgICAg
c3dpdGNoIChub2RlLT5vcCgpKSB7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgQ2FsbFZhcmFy
Z3M6CisgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhD
YWxsRm9yd2FyZFZhcmFyZ3MpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgICAgIGNhc2UgQ29uc3RydWN0VmFyYXJnczoKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG5vZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdzKENvbnN0cnVjdEZvcndhcmRWYXJhcmdz
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBj
YXNlIFRhaWxDYWxsVmFyYXJnczoKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldE9w
QW5kRGVmYXVsdEZsYWdzKFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3MpOworICAgICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgVGFpbENhbGxWYXJhcmdz
SW5saW5lZENhbGxlcjoKKyAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wQW5kRGVm
YXVsdEZsYWdzKFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3NJbmxpbmVkQ2FsbGVyKTsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdCYXNpY0Jsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdCYXNpY0Jsb2NrLmgJKHJldmlzaW9uIDE5MDE1MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQmFzaWNCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC05Miw2ICs5Miw5
IEBAIHN0cnVjdCBCYXNpY0Jsb2NrIDogUmVmQ291bnRlZDxCYXNpY0Jsb2MKICAgICAgICAgICAg
IGNhc2UgQnJhbmNoOgogICAgICAgICAgICAgY2FzZSBTd2l0Y2g6CiAgICAgICAgICAgICBjYXNl
IFJldHVybjoKKyAgICAgICAgICAgIGNhc2UgVGFpbENhbGw6CisgICAgICAgICAgICBjYXNlIFRh
aWxDYWxsVmFyYXJnczoKKyAgICAgICAgICAgIGNhc2UgVGFpbENhbGxGb3J3YXJkVmFyYXJnczoK
ICAgICAgICAgICAgIGNhc2UgVW5yZWFjaGFibGU6CiAgICAgICAgICAgICAgICAgcmV0dXJuIE5v
ZGVBbmRJbmRleChub2RlLCBpKTsKICAgICAgICAgICAgIC8vIFRoZSBiaXR0ZXIgZW5kIGNhbiBj
b250YWluIFBoYW50b21zIGFuZCB0aGUgbGlrZS4gVGhlcmUgd2lsbCBwcm9iYWJseSBvbmx5IGJl
IG9uZSBvciB0d28gbm9kZXMgYWZ0ZXIgdGhlIHRlcm1pbmFsLiBUaGV5IGFyZSBhbGwgbm8tb3Bz
IGFuZCB3aWxsIG5vdCBoYXZlIGFueSBjaGVja2VkIGNoaWxkcmVuLgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDE5
MDE1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xODMsMTQgKzE4MywxNCBAQCBwcml2YXRlOgogICAgICAgICBO
b2RlKiBjYWxsVGFyZ2V0LCBpbnQgYXJnQ291bnQsIGludCByZWdpc3Rlck9mZnNldCwgQ2FsbExp
bmtTdGF0dXMsCiAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24pOwogICAgIHZvaWQg
aGFuZGxlQ2FsbCgKLSAgICAgICAgaW50IHJlc3VsdCwgTm9kZVR5cGUgb3AsIElubGluZUNhbGxG
cmFtZTo6S2luZCwgdW5zaWduZWQgaW5zdHJ1Y3Rpb25TaXplLAorICAgICAgICBpbnQgcmVzdWx0
LCBOb2RlVHlwZSBvcCwgQ2FsbE1vZGUsIHVuc2lnbmVkIGluc3RydWN0aW9uU2l6ZSwKICAgICAg
ICAgTm9kZSogY2FsbFRhcmdldCwgaW50IGFyZ0NvdW50LCBpbnQgcmVnaXN0ZXJPZmZzZXQsIENh
bGxMaW5rU3RhdHVzKTsKLSAgICB2b2lkIGhhbmRsZUNhbGwoaW50IHJlc3VsdCwgTm9kZVR5cGUg
b3AsIENvZGVTcGVjaWFsaXphdGlvbktpbmQsIHVuc2lnbmVkIGluc3RydWN0aW9uU2l6ZSwgaW50
IGNhbGxlZSwgaW50IGFyZ0NvdW50LCBpbnQgcmVnaXN0ZXJPZmZzZXQpOwotICAgIHZvaWQgaGFu
ZGxlQ2FsbChJbnN0cnVjdGlvbiogcGMsIE5vZGVUeXBlIG9wLCBDb2RlU3BlY2lhbGl6YXRpb25L
aW5kKTsKLSAgICB2b2lkIGhhbmRsZVZhcmFyZ3NDYWxsKEluc3RydWN0aW9uKiBwYywgTm9kZVR5
cGUgb3AsIENvZGVTcGVjaWFsaXphdGlvbktpbmQpOworICAgIHZvaWQgaGFuZGxlQ2FsbChpbnQg
cmVzdWx0LCBOb2RlVHlwZSBvcCwgQ2FsbE1vZGUsIHVuc2lnbmVkIGluc3RydWN0aW9uU2l6ZSwg
aW50IGNhbGxlZSwgaW50IGFyZ0NvdW50LCBpbnQgcmVnaXN0ZXJPZmZzZXQpOworICAgIHZvaWQg
aGFuZGxlQ2FsbChJbnN0cnVjdGlvbiogcGMsIE5vZGVUeXBlIG9wLCBDYWxsTW9kZSk7CisgICAg
dm9pZCBoYW5kbGVWYXJhcmdzQ2FsbChJbnN0cnVjdGlvbiogcGMsIE5vZGVUeXBlIG9wLCBDYWxs
TW9kZSk7CiAgICAgdm9pZCBlbWl0RnVuY3Rpb25DaGVja3MoQ2FsbFZhcmlhbnQsIE5vZGUqIGNh
bGxUYXJnZXQsIFZpcnR1YWxSZWdpc3RlciB0aGlzQXJndW1udCk7CiAgICAgdm9pZCBlbWl0QXJn
dW1lbnRQaGFudG9tcyhpbnQgcmVnaXN0ZXJPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcyk7Ci0gICAgdW5zaWduZWQgaW5saW5pbmdDb3N0KENhbGxWYXJpYW50LCBpbnQgYXJn
dW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIENvZGVTcGVjaWFsaXphdGlvbktpbmQpOyAvLyBSZXR1
cm4gVUlOVF9NQVggaWYgaXQncyBub3QgYW4gaW5saW5pbmcgY2FuZGlkYXRlLiBCeSBjb252ZW50
aW9uLCBpbnRyaW5zaWNzIGhhdmUgYSBjb3N0IG9mIDEuCisgICAgdW5zaWduZWQgaW5saW5pbmdD
b3N0KENhbGxWYXJpYW50LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIENhbGxNb2Rl
KTsgLy8gUmV0dXJuIFVJTlRfTUFYIGlmIGl0J3Mgbm90IGFuIGlubGluaW5nIGNhbmRpZGF0ZS4g
QnkgY29udmVudGlvbiwgaW50cmluc2ljcyBoYXZlIGEgY29zdCBvZiAxLgogICAgIC8vIEhhbmRs
ZSBpbmxpbmluZy4gUmV0dXJuIHRydWUgaWYgaXQgc3VjY2VlZGVkLCBmYWxzZSBpZiB3ZSBuZWVk
IHRvIHBsYW50IGEgY2FsbC4KICAgICBib29sIGhhbmRsZUlubGluaW5nKE5vZGUqIGNhbGxUYXJn
ZXROb2RlLCBpbnQgcmVzdWx0T3BlcmFuZCwgY29uc3QgQ2FsbExpbmtTdGF0dXMmLCBpbnQgcmVn
aXN0ZXJPZmZzZXQsIFZpcnR1YWxSZWdpc3RlciB0aGlzQXJndW1lbnQsIFZpcnR1YWxSZWdpc3Rl
ciBhcmd1bWVudHNBcmd1bWVudCwgdW5zaWduZWQgYXJndW1lbnRzT2Zmc2V0LCBpbnQgYXJndW1l
bnRDb3VudEluY2x1ZGluZ1RoaXMsIHVuc2lnbmVkIG5leHRPZmZzZXQsIE5vZGVUeXBlIGNhbGxP
cCwgSW5saW5lQ2FsbEZyYW1lOjpLaW5kLCBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uKTsKICAg
ICBlbnVtIENhbGxlckxpbmthYmlsaXR5IHsgQ2FsbGVyRG9lc05vcm1hbExpbmtpbmcsIENhbGxl
ckxpbmtzTWFudWFsbHkgfTsKQEAgLTY0OCw2ICs2NDgsMTEgQEAgcHJpdmF0ZToKICAgICAgICAg
cmV0dXJuIG1faW5saW5lU3RhY2tUb3AtPm1faW5saW5lQ2FsbEZyYW1lOwogICAgIH0KIAorICAg
IGJvb2wgYWxsSW5saW5lRnJhbWVzQXJlVGFpbENhbGxzKCkKKyAgICB7CisgICAgICAgIHJldHVy
biAhaW5saW5lQ2FsbEZyYW1lKCkgfHwgIWlubGluZUNhbGxGcmFtZSgpLT5nZXRDYWxsZXJTa2lw
cGluZ0RlYWRGcmFtZXMoKTsKKyAgICB9CisKICAgICBDb2RlT3JpZ2luIGN1cnJlbnRDb2RlT3Jp
Z2luKCkKICAgICB7CiAgICAgICAgIHJldHVybiBDb2RlT3JpZ2luKG1fY3VycmVudEluZGV4LCBp
bmxpbmVDYWxsRnJhbWUoKSk7CkBAIC03MzYsNyArNzQxLDcgQEAgcHJpdmF0ZToKICAgICAKICAg
ICBOb2RlKiBhZGRDYWxsV2l0aG91dFNldHRpbmdSZXN1bHQoCiAgICAgICAgIE5vZGVUeXBlIG9w
LCBPcEluZm8gb3BJbmZvLCBOb2RlKiBjYWxsZWUsIGludCBhcmdDb3VudCwgaW50IHJlZ2lzdGVy
T2Zmc2V0LAotICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uKQorICAgICAgICBPcElu
Zm8gcHJlZGljdGlvbikKICAgICB7CiAgICAgICAgIGFkZFZhckFyZ0NoaWxkKGNhbGxlZSk7CiAg
ICAgICAgIHNpemVfdCBmcmFtZVNpemUgPSBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXplICsg
YXJnQ291bnQ7CkBAIC03NDksMTUgKzc1NCwyMiBAQCBwcml2YXRlOgogICAgICAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IGFyZ0NvdW50OyArK2kpCiAgICAgICAgICAgICBhZGRWYXJBcmdDaGlsZChn
ZXQodmlydHVhbFJlZ2lzdGVyRm9yQXJndW1lbnQoaSwgcmVnaXN0ZXJPZmZzZXQpKSk7CiAKLSAg
ICAgICAgcmV0dXJuIGFkZFRvR3JhcGgoTm9kZTo6VmFyQXJnLCBvcCwgb3BJbmZvLCBPcEluZm8o
cHJlZGljdGlvbikpOworICAgICAgICByZXR1cm4gYWRkVG9HcmFwaChOb2RlOjpWYXJBcmcsIG9w
LCBvcEluZm8sIHByZWRpY3Rpb24pOwogICAgIH0KICAgICAKICAgICBOb2RlKiBhZGRDYWxsKAog
ICAgICAgICBpbnQgcmVzdWx0LCBOb2RlVHlwZSBvcCwgT3BJbmZvIG9wSW5mbywgTm9kZSogY2Fs
bGVlLCBpbnQgYXJnQ291bnQsIGludCByZWdpc3Rlck9mZnNldCwKICAgICAgICAgU3BlY3VsYXRl
ZFR5cGUgcHJlZGljdGlvbikKICAgICB7CisgICAgICAgIGlmIChvcCA9PSBUYWlsQ2FsbCkgewor
ICAgICAgICAgICAgaWYgKGFsbElubGluZUZyYW1lc0FyZVRhaWxDYWxscygpKQorICAgICAgICAg
ICAgICAgIHJldHVybiBhZGRDYWxsV2l0aG91dFNldHRpbmdSZXN1bHQob3AsIE9wSW5mbygpLCBj
YWxsZWUsIGFyZ0NvdW50LCByZWdpc3Rlck9mZnNldCwgT3BJbmZvKCkpOworICAgICAgICAgICAg
b3AgPSBUYWlsQ2FsbElubGluZWRDYWxsZXI7CisgICAgICAgIH0KKworCiAgICAgICAgIE5vZGUq
IGNhbGwgPSBhZGRDYWxsV2l0aG91dFNldHRpbmdSZXN1bHQoCi0gICAgICAgICAgICBvcCwgb3BJ
bmZvLCBjYWxsZWUsIGFyZ0NvdW50LCByZWdpc3Rlck9mZnNldCwgcHJlZGljdGlvbik7CisgICAg
ICAgICAgICBvcCwgb3BJbmZvLCBjYWxsZWUsIGFyZ0NvdW50LCByZWdpc3Rlck9mZnNldCwgT3BJ
bmZvKHByZWRpY3Rpb24pKTsKICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFJlZyhyZXN1
bHQpOwogICAgICAgICBpZiAocmVzdWx0UmVnLmlzVmFsaWQoKSkKICAgICAgICAgICAgIHNldChy
ZXN1bHRSZWcsIGNhbGwpOwpAQCAtNzc2LDE0ICs3ODgsNjIgQEAgcHJpdmF0ZToKICAgICAKICAg
ICBTcGVjdWxhdGVkVHlwZSBnZXRQcmVkaWN0aW9uV2l0aG91dE9TUkV4aXQodW5zaWduZWQgYnl0
ZWNvZGVJbmRleCkKICAgICB7Ci0gICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1f
aW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+bV9sb2NrKTsKLSAgICAgICAgcmV0dXJu
IG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+dmFsdWVQcm9maWxlUHJlZGljdGlv
bkZvckJ5dGVjb2RlT2Zmc2V0KGxvY2tlciwgYnl0ZWNvZGVJbmRleCk7CisgICAgICAgIFNwZWN1
bGF0ZWRUeXBlIHByZWRpY3Rpb247CisgICAgICAgIENvZGVCbG9jayogcHJvZmlsZWRCbG9jayA9
IG51bGxwdHI7CisKKyAgICAgICAgeworICAgICAgICAgICAgQ29uY3VycmVudEpJVExvY2tlciBs
b2NrZXIobV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5tX2xvY2spOworICAgICAg
ICAgICAgcHJlZGljdGlvbiA9IG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+dmFs
dWVQcm9maWxlUHJlZGljdGlvbkZvckJ5dGVjb2RlT2Zmc2V0KGxvY2tlciwgYnl0ZWNvZGVJbmRl
eCk7CisKKyAgICAgICAgICAgIGlmIChwcmVkaWN0aW9uID09IFNwZWNOb25lKSB7CisgICAgICAg
ICAgICAgICAgLy8gSWYgd2UgaGF2ZSBubyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgdmFsdWVzIHRo
aXMKKyAgICAgICAgICAgICAgICAvLyBub2RlIGdlbmVyYXRlcywgd2UgY2hlY2sgaWYgYnkgYW55
IGNoYW5jZSBpdCBpcworICAgICAgICAgICAgICAgIC8vIGEgdGFpbCBjYWxsIG9wY29kZS4gSW4g
dGhhdCBjYXNlLCB3ZSB3YWxrIHVwIHRoZQorICAgICAgICAgICAgICAgIC8vIGlubGluZSBmcmFt
ZXMgdG8gZmluZCBhIGNhbGwgaGlnaGVyIGluIHRoZSBjYWxsCisgICAgICAgICAgICAgICAgLy8g
Y2hhaW4gYW5kIHVzZSBpdHMgcHJlZGljdGlvbi4gSWYgd2Ugb25seSBoYXZlCisgICAgICAgICAg
ICAgICAgLy8gaW5saW5lZCB0YWlsIGNhbGwgZnJhbWVzLCB3ZSB1c2UgU3BlY0Z1bGxUb3AKKyAg
ICAgICAgICAgICAgICAvLyB0byBhdm9pZCBhIHNwdXJpb3VzIE9TUiBleGl0LgorICAgICAgICAg
ICAgICAgIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiA9IG1faW5saW5lU3RhY2tUb3AtPm1fcHJv
ZmlsZWRCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKSArIGJ5dGVjb2RlSW5kZXg7CisgICAg
ICAgICAgICAgICAgT3Bjb2RlSUQgb3Bjb2RlSUQgPSBtX3ZtLT5pbnRlcnByZXRlci0+Z2V0T3Bj
b2RlSUQoaW5zdHJ1Y3Rpb24tPnUub3Bjb2RlKTsKKworICAgICAgICAgICAgICAgIHN3aXRjaCAo
b3Bjb2RlSUQpIHsKKyAgICAgICAgICAgICAgICBjYXNlIG9wX3RhaWxfY2FsbDoKKyAgICAgICAg
ICAgICAgICBjYXNlIG9wX3RhaWxfY2FsbF92YXJhcmdzOiB7CisgICAgICAgICAgICAgICAgICAg
IGlmICghaW5saW5lQ2FsbEZyYW1lKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIHByZWRp
Y3Rpb24gPSBTcGVjRnVsbFRvcDsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIENvZGVPcmlnaW4qIGNvZGVP
cmlnaW4gPSBpbmxpbmVDYWxsRnJhbWUoKS0+Z2V0Q2FsbGVyU2tpcHBpbmdEZWFkRnJhbWVzKCk7
CisgICAgICAgICAgICAgICAgICAgIGlmICghY29kZU9yaWdpbikgeworICAgICAgICAgICAgICAg
ICAgICAgICAgcHJlZGljdGlvbiA9IFNwZWNGdWxsVG9wOworICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgSW5s
aW5lU3RhY2tFbnRyeSogc3RhY2sgPSBtX2lubGluZVN0YWNrVG9wOworICAgICAgICAgICAgICAg
ICAgICB3aGlsZSAoc3RhY2stPm1faW5saW5lQ2FsbEZyYW1lICE9IGNvZGVPcmlnaW4tPmlubGlu
ZUNhbGxGcmFtZSkKKyAgICAgICAgICAgICAgICAgICAgICAgIHN0YWNrID0gc3RhY2stPm1fY2Fs
bGVyOworICAgICAgICAgICAgICAgICAgICBieXRlY29kZUluZGV4ID0gY29kZU9yaWdpbi0+Ynl0
ZWNvZGVJbmRleDsKKyAgICAgICAgICAgICAgICAgICAgcHJvZmlsZWRCbG9jayA9IHN0YWNrLT5t
X3Byb2ZpbGVkQmxvY2s7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorCisgICAg
ICAgIGlmIChwcm9maWxlZEJsb2NrKSB7CisgICAgICAgICAgICBDb25jdXJyZW50SklUTG9ja2Vy
IGxvY2tlcihwcm9maWxlZEJsb2NrLT5tX2xvY2spOworICAgICAgICAgICAgcHJlZGljdGlvbiA9
IHByb2ZpbGVkQmxvY2stPnZhbHVlUHJvZmlsZVByZWRpY3Rpb25Gb3JCeXRlY29kZU9mZnNldChs
b2NrZXIsIGJ5dGVjb2RlSW5kZXgpOworICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHByZWRp
Y3Rpb247CiAgICAgfQogCiAgICAgU3BlY3VsYXRlZFR5cGUgZ2V0UHJlZGljdGlvbih1bnNpZ25l
ZCBieXRlY29kZUluZGV4KQogICAgIHsKICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlv
biA9IGdldFByZWRpY3Rpb25XaXRob3V0T1NSRXhpdChieXRlY29kZUluZGV4KTsKLSAgICAgICAg
CisKICAgICAgICAgaWYgKHByZWRpY3Rpb24gPT0gU3BlY05vbmUpIHsKICAgICAgICAgICAgIC8v
IFdlIGhhdmUgbm8gaW5mb3JtYXRpb24gYWJvdXQgd2hhdCB2YWx1ZXMgdGhpcyBub2RlIGdlbmVy
YXRlcy4gR2l2ZSB1cAogICAgICAgICAgICAgLy8gb24gZXhlY3V0aW5nIHRoaXMgY29kZSwgc2lu
Y2Ugd2UncmUgbGlrZWx5IHRvIGRvIG1vcmUgZGFtYWdlIHRoYW4gZ29vZC4KQEAgLTEwNjksMTYg
KzExMjksMTcgQEAgcHJpdmF0ZToKICAgICBtX2V4aXRPSyA9IGZhbHNlOyBcCiAgICAgcmV0dXJu
IHNob3VsZENvbnRpbnVlUGFyc2luZwogCi12b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVDYWxs
KEluc3RydWN0aW9uKiBwYywgTm9kZVR5cGUgb3AsIENvZGVTcGVjaWFsaXphdGlvbktpbmQga2lu
ZCkKK3ZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUNhbGwoSW5zdHJ1Y3Rpb24qIHBjLCBOb2Rl
VHlwZSBvcCwgQ2FsbE1vZGUgY2FsbE1vZGUpCiB7CiAgICAgQVNTRVJUKE9QQ09ERV9MRU5HVEgo
b3BfY2FsbCkgPT0gT1BDT0RFX0xFTkdUSChvcF9jb25zdHJ1Y3QpKTsKKyAgICBBU1NFUlQoT1BD
T0RFX0xFTkdUSChvcF9jYWxsKSA9PSBPUENPREVfTEVOR1RIKG9wX3RhaWxfY2FsbCkpOwogICAg
IGhhbmRsZUNhbGwoCi0gICAgICAgIHBjWzFdLnUub3BlcmFuZCwgb3AsIGtpbmQsIE9QQ09ERV9M
RU5HVEgob3BfY2FsbCksCisgICAgICAgIHBjWzFdLnUub3BlcmFuZCwgb3AsIGNhbGxNb2RlLCBP
UENPREVfTEVOR1RIKG9wX2NhbGwpLAogICAgICAgICBwY1syXS51Lm9wZXJhbmQsIHBjWzNdLnUu
b3BlcmFuZCwgLXBjWzRdLnUub3BlcmFuZCk7CiB9CiAKIHZvaWQgQnl0ZUNvZGVQYXJzZXI6Omhh
bmRsZUNhbGwoCi0gICAgaW50IHJlc3VsdCwgTm9kZVR5cGUgb3AsIENvZGVTcGVjaWFsaXphdGlv
bktpbmQga2luZCwgdW5zaWduZWQgaW5zdHJ1Y3Rpb25TaXplLAorICAgIGludCByZXN1bHQsIE5v
ZGVUeXBlIG9wLCBDYWxsTW9kZSBjYWxsTW9kZSwgdW5zaWduZWQgaW5zdHJ1Y3Rpb25TaXplLAog
ICAgIGludCBjYWxsZWUsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgaW50IHJlZ2lz
dGVyT2Zmc2V0KQogewogICAgIE5vZGUqIGNhbGxUYXJnZXQgPSBnZXQoVmlydHVhbFJlZ2lzdGVy
KGNhbGxlZSkpOwpAQCAtMTA4OCwxNyArMTE0OSwxNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpo
YW5kbGVDYWxsKAogICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX2NhbGxMaW5rSW5mb3MsIG1f
Y2FsbENvbnRleHRNYXApOwogICAgIAogICAgIGhhbmRsZUNhbGwoCi0gICAgICAgIHJlc3VsdCwg
b3AsIElubGluZUNhbGxGcmFtZTo6a2luZEZvcihraW5kKSwgaW5zdHJ1Y3Rpb25TaXplLCBjYWxs
VGFyZ2V0LAorICAgICAgICByZXN1bHQsIG9wLCBjYWxsTW9kZSwgaW5zdHJ1Y3Rpb25TaXplLCBj
YWxsVGFyZ2V0LAogICAgICAgICBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgcmVnaXN0ZXJP
ZmZzZXQsIGNhbGxMaW5rU3RhdHVzKTsKIH0KICAgICAKIHZvaWQgQnl0ZUNvZGVQYXJzZXI6Omhh
bmRsZUNhbGwoCi0gICAgaW50IHJlc3VsdCwgTm9kZVR5cGUgb3AsIElubGluZUNhbGxGcmFtZTo6
S2luZCBraW5kLCB1bnNpZ25lZCBpbnN0cnVjdGlvblNpemUsCisgICAgaW50IHJlc3VsdCwgTm9k
ZVR5cGUgb3AsIENhbGxNb2RlIGNhbGxNb2RlLCB1bnNpZ25lZCBpbnN0cnVjdGlvblNpemUsCiAg
ICAgTm9kZSogY2FsbFRhcmdldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBpbnQg
cmVnaXN0ZXJPZmZzZXQsCiAgICAgQ2FsbExpbmtTdGF0dXMgY2FsbExpbmtTdGF0dXMpCiB7CiAg
ICAgaGFuZGxlQ2FsbCgKLSAgICAgICAgcmVzdWx0LCBvcCwga2luZCwgaW5zdHJ1Y3Rpb25TaXpl
LCBjYWxsVGFyZ2V0LCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywKKyAgICAgICAgcmVzdWx0
LCBvcCwgSW5saW5lQ2FsbEZyYW1lOjpraW5kRm9yKGNhbGxNb2RlKSwgaW5zdHJ1Y3Rpb25TaXpl
LCBjYWxsVGFyZ2V0LCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywKICAgICAgICAgcmVnaXN0
ZXJPZmZzZXQsIGNhbGxMaW5rU3RhdHVzLCBnZXRQcmVkaWN0aW9uKCkpOwogfQogCkBAIC0xMTE4
LDcgKzExNzksNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVDYWxsKAogICAgIGlmICgh
Y2FsbExpbmtTdGF0dXMuY2FuT3B0aW1pemUoKSkgewogICAgICAgICAvLyBPZGRseSwgdGhpcyBj
b25mbGF0ZXMgY2FsbHMgdGhhdCBoYXZlbid0IGV4ZWN1dGVkIHdpdGggY2FsbHMgdGhhdCBiZWhh
dmVkIHN1ZmZpY2llbnRseSBwb2x5bW9ycGhpY2FsbHkKICAgICAgICAgLy8gdGhhdCB3ZSBjYW5u
b3Qgb3B0aW1pemUgdGhlbS4KLSAgICAgICAgCisKICAgICAgICAgYWRkQ2FsbChyZXN1bHQsIG9w
LCBPcEluZm8oKSwgY2FsbFRhcmdldCwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIHJlZ2lz
dGVyT2Zmc2V0LCBwcmVkaWN0aW9uKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTExMzYs
OSArMTE5NywxMCBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVDYWxsKAogICAgIGFkZENh
bGwocmVzdWx0LCBvcCwgY2FsbE9wSW5mbywgY2FsbFRhcmdldCwgYXJndW1lbnRDb3VudEluY2x1
ZGluZ1RoaXMsIHJlZ2lzdGVyT2Zmc2V0LCBwcmVkaWN0aW9uKTsKIH0KIAotdm9pZCBCeXRlQ29k
ZVBhcnNlcjo6aGFuZGxlVmFyYXJnc0NhbGwoSW5zdHJ1Y3Rpb24qIHBjLCBOb2RlVHlwZSBvcCwg
Q29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQordm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxl
VmFyYXJnc0NhbGwoSW5zdHJ1Y3Rpb24qIHBjLCBOb2RlVHlwZSBvcCwgQ2FsbE1vZGUgY2FsbE1v
ZGUpCiB7CiAgICAgQVNTRVJUKE9QQ09ERV9MRU5HVEgob3BfY2FsbF92YXJhcmdzKSA9PSBPUENP
REVfTEVOR1RIKG9wX2NvbnN0cnVjdF92YXJhcmdzKSk7CisgICAgQVNTRVJUKE9QQ09ERV9MRU5H
VEgob3BfY2FsbF92YXJhcmdzKSA9PSBPUENPREVfTEVOR1RIKG9wX3RhaWxfY2FsbF92YXJhcmdz
KSk7CiAgICAgCiAgICAgaW50IHJlc3VsdCA9IHBjWzFdLnUub3BlcmFuZDsKICAgICBpbnQgY2Fs
bGVlID0gcGNbMl0udS5vcGVyYW5kOwpAQCAtMTE2MSw3ICsxMjIzLDcgQEAgdm9pZCBCeXRlQ29k
ZVBhcnNlcjo6aGFuZGxlVmFyYXJnc0NhbGwoSQogICAgICAgICBkYXRhTG9nKCIgICAgVmFyYXJn
cyBjYWxsIGxpbmsgc3RhdHVzIGF0ICIsIGN1cnJlbnRDb2RlT3JpZ2luKCksICI6ICIsIGNhbGxM
aW5rU3RhdHVzLCAiXG4iKTsKICAgICAKICAgICBpZiAoY2FsbExpbmtTdGF0dXMuY2FuT3B0aW1p
emUoKQotICAgICAgICAmJiBoYW5kbGVJbmxpbmluZyhjYWxsVGFyZ2V0LCByZXN1bHQsIGNhbGxM
aW5rU3RhdHVzLCBmaXJzdEZyZWVSZWcsIFZpcnR1YWxSZWdpc3Rlcih0aGlzUmVnKSwgVmlydHVh
bFJlZ2lzdGVyKGFyZ3VtZW50cyksIGZpcnN0VmFyQXJnT2Zmc2V0LCAwLCBtX2N1cnJlbnRJbmRl
eCArIE9QQ09ERV9MRU5HVEgob3BfY2FsbF92YXJhcmdzKSwgb3AsIElubGluZUNhbGxGcmFtZTo6
dmFyYXJnc0tpbmRGb3Ioa2luZCksIHByZWRpY3Rpb24pKSB7CisgICAgICAgICYmIGhhbmRsZUlu
bGluaW5nKGNhbGxUYXJnZXQsIHJlc3VsdCwgY2FsbExpbmtTdGF0dXMsIGZpcnN0RnJlZVJlZywg
VmlydHVhbFJlZ2lzdGVyKHRoaXNSZWcpLCBWaXJ0dWFsUmVnaXN0ZXIoYXJndW1lbnRzKSwgZmly
c3RWYXJBcmdPZmZzZXQsIDAsIG1fY3VycmVudEluZGV4ICsgT1BDT0RFX0xFTkdUSChvcF9jYWxs
X3ZhcmFyZ3MpLCBvcCwgSW5saW5lQ2FsbEZyYW1lOjp2YXJhcmdzS2luZEZvcihjYWxsTW9kZSks
IHByZWRpY3Rpb24pKSB7CiAgICAgICAgIGlmIChtX2dyYXBoLmNvbXBpbGF0aW9uKCkpCiAgICAg
ICAgICAgICBtX2dyYXBoLmNvbXBpbGF0aW9uKCktPm5vdGljZUlubGluZWRDYWxsKCk7CiAgICAg
ICAgIHJldHVybjsKQEAgLTExNzEsNyArMTIzMywxNSBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpo
YW5kbGVWYXJhcmdzQ2FsbChJCiAgICAgZGF0YS0+Zmlyc3RWYXJBcmdPZmZzZXQgPSBmaXJzdFZh
ckFyZ09mZnNldDsKICAgICAKICAgICBOb2RlKiB0aGlzQ2hpbGQgPSBnZXQoVmlydHVhbFJlZ2lz
dGVyKHRoaXNSZWcpKTsKLSAgICAKKworICAgIGlmIChvcCA9PSBUYWlsQ2FsbFZhcmFyZ3MpIHsK
KyAgICAgICAgaWYgKGFsbElubGluZUZyYW1lc0FyZVRhaWxDYWxscygpKSB7CisgICAgICAgICAg
ICBhZGRUb0dyYXBoKG9wLCBPcEluZm8oZGF0YSksIE9wSW5mbygpLCBjYWxsVGFyZ2V0LCBnZXQo
VmlydHVhbFJlZ2lzdGVyKGFyZ3VtZW50cykpLCB0aGlzQ2hpbGQpOworICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB9CisgICAgICAgIG9wID0gVGFpbENhbGxWYXJhcmdzSW5saW5lZENhbGxl
cjsKKyAgICB9CisKICAgICBOb2RlKiBjYWxsID0gYWRkVG9HcmFwaChvcCwgT3BJbmZvKGRhdGEp
LCBPcEluZm8ocHJlZGljdGlvbiksIGNhbGxUYXJnZXQsIGdldChWaXJ0dWFsUmVnaXN0ZXIoYXJn
dW1lbnRzKSksIHRoaXNDaGlsZCk7CiAgICAgVmlydHVhbFJlZ2lzdGVyIHJlc3VsdFJlZyhyZXN1
bHQpOwogICAgIGlmIChyZXN1bHRSZWcuaXNWYWxpZCgpKQpAQCAtMTIwNiw4ICsxMjc2LDkgQEAg
dm9pZCBCeXRlQ29kZVBhcnNlcjo6ZW1pdEFyZ3VtZW50UGhhbnRvbQogICAgICAgICBhZGRUb0dy
YXBoKFBoYW50b20sIGdldCh2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpLCByZWdpc3Rlck9m
ZnNldCkpKTsKIH0KIAotdW5zaWduZWQgQnl0ZUNvZGVQYXJzZXI6OmlubGluaW5nQ29zdChDYWxs
VmFyaWFudCBjYWxsZWUsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgQ29kZVNwZWNp
YWxpemF0aW9uS2luZCBraW5kKQordW5zaWduZWQgQnl0ZUNvZGVQYXJzZXI6OmlubGluaW5nQ29z
dChDYWxsVmFyaWFudCBjYWxsZWUsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgQ2Fs
bE1vZGUgY2FsbE1vZGUpCiB7CisgICAgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kID0gc3Bl
Y2lhbGl6YXRpb25LaW5kRm9yKGNhbGxNb2RlKTsKICAgICBpZiAodmVyYm9zZSkKICAgICAgICAg
ZGF0YUxvZygiQ29uc2lkZXJpbmcgaW5saW5pbmcgIiwgY2FsbGVlLCAiIGludG8gIiwgY3VycmVu
dENvZGVPcmlnaW4oKSwgIlxuIik7CiAgICAgCkBAIC0xMjQ5LDcgKzEzMjAsNyBAQCB1bnNpZ25l
ZCBCeXRlQ29kZVBhcnNlcjo6aW5saW5pbmdDb3N0KENhCiAgICAgQ2FwYWJpbGl0eUxldmVsIGNh
cGFiaWxpdHlMZXZlbCA9IGlubGluZUZ1bmN0aW9uRm9yQ2FwYWJpbGl0eUxldmVsKAogICAgICAg
ICBjb2RlQmxvY2ssIGtpbmQsIGNhbGxlZS5pc0Nsb3N1cmVDYWxsKCkpOwogICAgIGlmICh2ZXJi
b3NlKSB7Ci0gICAgICAgIGRhdGFMb2coIiAgICBLaW5kOiAiLCBraW5kLCAiXG4iKTsKKyAgICAg
ICAgZGF0YUxvZygiICAgIENhbGwgbW9kZTogIiwgY2FsbE1vZGUsICJcbiIpOwogICAgICAgICBk
YXRhTG9nKCIgICAgSXMgY2xvc3VyZSBjYWxsOiAiLCBjYWxsZWUuaXNDbG9zdXJlQ2FsbCgpLCAi
XG4iKTsKICAgICAgICAgZGF0YUxvZygiICAgIENhcGFiaWxpdHkgbGV2ZWw6ICIsIGNhcGFiaWxp
dHlMZXZlbCwgIlxuIik7CiAgICAgICAgIGRhdGFMb2coIiAgICBNaWdodCBpbmxpbmUgZnVuY3Rp
b246ICIsIG1pZ2h0SW5saW5lRnVuY3Rpb25Gb3IoY29kZUJsb2NrLCBraW5kKSwgIlxuIik7CkBA
IC0xMzIwLDcgKzEzOTEsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjppbmxpbmVDYWxsKE5vZGUq
IGNhCiB7CiAgICAgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBzcGVjaWFsaXphdGlvbktpbmQgPSBJ
bmxpbmVDYWxsRnJhbWU6OnNwZWNpYWxpemF0aW9uS2luZEZvcihraW5kKTsKICAgICAKLSAgICBB
U1NFUlQoaW5saW5pbmdDb3N0KGNhbGxlZSwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIHNw
ZWNpYWxpemF0aW9uS2luZCkgIT0gVUlOVF9NQVgpOworICAgIEFTU0VSVChpbmxpbmluZ0Nvc3Qo
Y2FsbGVlLCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgSW5saW5lQ2FsbEZyYW1lOjpjYWxs
TW9kZUZvcihraW5kKSkgIT0gVUlOVF9NQVgpOwogICAgIAogICAgIENvZGVCbG9jayogY29kZUJs
b2NrID0gY2FsbGVlLmZ1bmN0aW9uRXhlY3V0YWJsZSgpLT5iYXNlbGluZUNvZGVCbG9ja0Zvcihz
cGVjaWFsaXphdGlvbktpbmQpOwogICAgIGluc2VydENoZWNrcyhjb2RlQmxvY2spOwpAQCAtMTQy
NCw3ICsxNDk1LDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6aW5saW5lQ2FsbChOb2RlKiBjYQog
ICAgICAgICBtX2N1cnJlbnRCbG9jayA9IG1fZ3JhcGgubGFzdEJsb2NrKCk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9Ci0gICAgCisKICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZURGR0J5dGVDb2Rl
UGFyc2luZygpKQogICAgICAgICBkYXRhTG9nKCIgICAgQ3JlYXRpbmcgbmV3IGJsb2NrIGFmdGVy
IGlubGluaW5nLlxuIik7CiAKQEAgLTE1MzEsNyArMTYwMiw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJz
ZXI6OmF0dGVtcHRUb0lubGluZUNhbGwKICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICB1bnNp
Z25lZCBteUlubGluaW5nQ29zdCA9IGlubGluaW5nQ29zdChjYWxsZWUsIGFyZ3VtZW50Q291bnRJ
bmNsdWRpbmdUaGlzLCBzcGVjaWFsaXphdGlvbktpbmQpOworICAgIHVuc2lnbmVkIG15SW5saW5p
bmdDb3N0ID0gaW5saW5pbmdDb3N0KGNhbGxlZSwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMs
IElubGluZUNhbGxGcmFtZTo6Y2FsbE1vZGVGb3Ioa2luZCkpOwogICAgIGlmIChteUlubGluaW5n
Q29zdCA+IGlubGluaW5nQmFsYW5jZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCkBAIC0zMDAz
LDcgKzMwNzQsMTEgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAog
ICAgICAgICAgICAgLy8gbG9naWMgcmVsaWVzIG9uIGV2ZXJ5IGJ5dGVjb2RlIHJlc3VsdGluZyBp
biBvbmUgb3IgbW9yZSBub2Rlcywgd2hpY2ggd291bGQKICAgICAgICAgICAgIC8vIGJlIHRydWUg
YW55d2F5IGV4Y2VwdCBmb3Igb3BfbG9vcF9oaW50LCB3aGljaCBlbWl0cyBhIFBoYW50b20gdG8g
Zm9yY2UgdGhpcwogICAgICAgICAgICAgLy8gdG8gYmUgdHJ1ZS4KLSAgICAgICAgICAgIGlmICgh
bV9jdXJyZW50QmxvY2stPmlzRW1wdHkoKSkKKyAgICAgICAgICAgIC8vIFdlIGFsc28gZG9uJ3Qg
aW5zZXJ0IGEganVtcCBpZiB0aGUgYmxvY2sgYWxyZWFkeSBoYXMgYSB0ZXJtaW5hbCwKKyAgICAg
ICAgICAgIC8vIHdoaWNoIGNvdWxkIGhhcHBlbiBhZnRlciBhIHRhaWwgY2FsbC4KKyAgICAgICAg
ICAgIEFTU0VSVChtX2N1cnJlbnRCbG9jay0+aXNFbXB0eSgpIHx8ICFtX2N1cnJlbnRCbG9jay0+
dGVybWluYWwoKQorICAgICAgICAgICAgICAgIHx8IG1fY3VycmVudEJsb2NrLT50ZXJtaW5hbCgp
LT5vcCgpID09IFRhaWxDYWxsIHx8IG1fY3VycmVudEJsb2NrLT50ZXJtaW5hbCgpLT5vcCgpID09
IFRhaWxDYWxsVmFyYXJncyk7CisgICAgICAgICAgICBpZiAoIW1fY3VycmVudEJsb2NrLT5pc0Vt
cHR5KCkgJiYgIW1fY3VycmVudEJsb2NrLT50ZXJtaW5hbCgpKQogICAgICAgICAgICAgICAgIGFk
ZFRvR3JhcGgoSnVtcCwgT3BJbmZvKG1fY3VycmVudEluZGV4KSk7CiAgICAgICAgICAgICByZXR1
cm4gc2hvdWxkQ29udGludWVQYXJzaW5nOwogICAgICAgICB9CkBAIC0zNTg1LDYgKzM2NjAsMTIg
QEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAvLyA9
PT0gQmxvY2sgdGVybWluYXRvcnMuID09PQogCiAgICAgICAgIGNhc2Ugb3Bfam1wOiB7CisgICAg
ICAgICAgICBpZiAobV9jdXJyZW50QmxvY2stPnRlcm1pbmFsKCkpIHsKKyAgICAgICAgICAgICAg
ICAvLyBXZSBjb3VsZCBiZSB0aGUgZHVtbXkganVtcCB0byBhIHJldHVybiBhZnRlciBhIG5vbi1p
bmxpbmVkLCBub24tZW11bGF0ZWQgdGFpbCBjYWxsIGluIGEgdGVybmFyeSBvcGVyYXRvcgorICAg
ICAgICAgICAgICAgIE5vZGUqIHRlcm1pbmFsID0gbV9jdXJyZW50QmxvY2stPnRlcm1pbmFsKCk7
CisgICAgICAgICAgICAgICAgQVNTRVJUX1VOVVNFRCh0ZXJtaW5hbCwgdGVybWluYWwtPm9wKCkg
PT0gVGFpbENhbGwgfHwgdGVybWluYWwtPm9wKCkgPT0gVGFpbENhbGxWYXJhcmdzKTsKKyAgICAg
ICAgICAgICAgICBMQVNUX09QQ09ERShvcF9yZXQpOworICAgICAgICAgICAgfQogICAgICAgICAg
ICAgaW50IHJlbGF0aXZlT2Zmc2V0ID0gY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZDsK
ICAgICAgICAgICAgIGFkZFRvR3JhcGgoSnVtcCwgT3BJbmZvKG1fY3VycmVudEluZGV4ICsgcmVs
YXRpdmVPZmZzZXQpKTsKICAgICAgICAgICAgIGlmIChyZWxhdGl2ZU9mZnNldCA8PSAwKQpAQCAt
Mzc1Niw2ICszODM3LDEyIEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWdu
ZWQKICAgICAgICAgfQogCiAgICAgICAgIGNhc2Ugb3BfcmV0OgorICAgICAgICAgICAgaWYgKG1f
Y3VycmVudEJsb2NrLT50ZXJtaW5hbCgpKSB7CisgICAgICAgICAgICAgICAgLy8gV2UgY291bGQg
YmUgdGhlIGR1bW15IHJldHVybiBhZnRlciBhIG5vbi1pbmxpbmVkLCBub24tZW11bGF0ZWQgdGFp
bCBjYWxsCisgICAgICAgICAgICAgICAgTm9kZSogdGVybWluYWwgPSBtX2N1cnJlbnRCbG9jay0+
dGVybWluYWwoKTsKKyAgICAgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKHRlcm1pbmFsLCB0ZXJt
aW5hbC0+b3AoKSA9PSBUYWlsQ2FsbCB8fCB0ZXJtaW5hbC0+b3AoKSA9PSBUYWlsQ2FsbFZhcmFy
Z3MpOworICAgICAgICAgICAgICAgIExBU1RfT1BDT0RFKG9wX3JldCk7CisgICAgICAgICAgICB9
CiAgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lKCkpIHsKICAgICAgICAgICAgICAgICBm
bHVzaEZvclJldHVybigpOwogICAgICAgICAgICAgICAgIGlmIChtX2lubGluZVN0YWNrVG9wLT5t
X3JldHVyblZhbHVlLmlzVmFsaWQoKSkKQEAgLTM4MDcsMjIgKzM4OTQsMzcgQEAgYm9vbCBCeXRl
Q29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgTkVYVF9PUENPREUo
b3BfY2F0Y2gpOwogICAgICAgICAgICAgCiAgICAgICAgIGNhc2Ugb3BfY2FsbDoKLSAgICAgICAg
ICAgIGhhbmRsZUNhbGwoY3VycmVudEluc3RydWN0aW9uLCBDYWxsLCBDb2RlRm9yQ2FsbCk7Cisg
ICAgICAgICAgICBoYW5kbGVDYWxsKGN1cnJlbnRJbnN0cnVjdGlvbiwgQ2FsbCwgQ2FsbE1vZGU6
OlJlZ3VsYXIpOwogICAgICAgICAgICAgLy8gVmVyaWZ5IHRoYXQgaGFuZGxlQ2FsbCgpLCB3aGlj
aCBjb3VsZCBoYXZlIGlubGluZWQgdGhlIGNhbGxlZSwgZGlkbid0IHRyYXNoIG1fY3VycmVudElu
c3RydWN0aW9uCiAgICAgICAgICAgICBBU1NFUlQobV9jdXJyZW50SW5zdHJ1Y3Rpb24gPT0gY3Vy
cmVudEluc3RydWN0aW9uKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2NhbGwpOwotICAg
ICAgICAgICAgCisKKyAgICAgICAgY2FzZSBvcF90YWlsX2NhbGw6CisgICAgICAgICAgICBmbHVz
aEZvclJldHVybigpOworICAgICAgICAgICAgaGFuZGxlQ2FsbChjdXJyZW50SW5zdHJ1Y3Rpb24s
IFRhaWxDYWxsLCBDYWxsTW9kZTo6VGFpbCk7CisgICAgICAgICAgICAvLyBWZXJpZnkgdGhhdCBo
YW5kbGVDYWxsKCksIHdoaWNoIGNvdWxkIGhhdmUgaW5saW5lZCB0aGUgY2FsbGVlLCBkaWRuJ3Qg
dHJhc2ggbV9jdXJyZW50SW5zdHJ1Y3Rpb24KKyAgICAgICAgICAgIEFTU0VSVChtX2N1cnJlbnRJ
bnN0cnVjdGlvbiA9PSBjdXJyZW50SW5zdHJ1Y3Rpb24pOworICAgICAgICAgICAgLy8gV2UgbGV0
IHRoZSBmb2xsb3dpbmcgb3BfcmV0IGhhbmRsZSBjYXNlcyByZWxhdGVkIHRvCisgICAgICAgICAg
ICAvLyBpbmxpbmluZyB0byBrZWVwIHRoaW5ncyBzaW1wbGUuCisgICAgICAgICAgICBORVhUX09Q
Q09ERShvcF90YWlsX2NhbGwpOworCiAgICAgICAgIGNhc2Ugb3BfY29uc3RydWN0OgotICAgICAg
ICAgICAgaGFuZGxlQ2FsbChjdXJyZW50SW5zdHJ1Y3Rpb24sIENvbnN0cnVjdCwgQ29kZUZvckNv
bnN0cnVjdCk7CisgICAgICAgICAgICBoYW5kbGVDYWxsKGN1cnJlbnRJbnN0cnVjdGlvbiwgQ29u
c3RydWN0LCBDYWxsTW9kZTo6Q29uc3RydWN0KTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9w
X2NvbnN0cnVjdCk7CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBvcF9jYWxsX3ZhcmFyZ3M6
IHsKLSAgICAgICAgICAgIGhhbmRsZVZhcmFyZ3NDYWxsKGN1cnJlbnRJbnN0cnVjdGlvbiwgQ2Fs
bFZhcmFyZ3MsIENvZGVGb3JDYWxsKTsKKyAgICAgICAgICAgIGhhbmRsZVZhcmFyZ3NDYWxsKGN1
cnJlbnRJbnN0cnVjdGlvbiwgQ2FsbFZhcmFyZ3MsIENhbGxNb2RlOjpSZWd1bGFyKTsKICAgICAg
ICAgICAgIE5FWFRfT1BDT0RFKG9wX2NhbGxfdmFyYXJncyk7CiAgICAgICAgIH0KKworICAgICAg
ICBjYXNlIG9wX3RhaWxfY2FsbF92YXJhcmdzOiB7CisgICAgICAgICAgICBmbHVzaEZvclJldHVy
bigpOworICAgICAgICAgICAgaGFuZGxlVmFyYXJnc0NhbGwoY3VycmVudEluc3RydWN0aW9uLCBU
YWlsQ2FsbFZhcmFyZ3MsIENhbGxNb2RlOjpUYWlsKTsKKyAgICAgICAgICAgIE5FWFRfT1BDT0RF
KG9wX3RhaWxfY2FsbF92YXJhcmdzKTsKKyAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAg
IGNhc2Ugb3BfY29uc3RydWN0X3ZhcmFyZ3M6IHsKLSAgICAgICAgICAgIGhhbmRsZVZhcmFyZ3ND
YWxsKGN1cnJlbnRJbnN0cnVjdGlvbiwgQ29uc3RydWN0VmFyYXJncywgQ29kZUZvckNvbnN0cnVj
dCk7CisgICAgICAgICAgICBoYW5kbGVWYXJhcmdzQ2FsbChjdXJyZW50SW5zdHJ1Y3Rpb24sIENv
bnN0cnVjdFZhcmFyZ3MsIENhbGxNb2RlOjpDb25zdHJ1Y3QpOwogICAgICAgICAgICAgTkVYVF9P
UENPREUob3BfY29uc3RydWN0X3ZhcmFyZ3MpOwogICAgICAgICB9CiAgICAgICAgICAgICAKQEAg
LTQ1MzMsNyArNDYzNSw3IEBAIEJ5dGVDb2RlUGFyc2VyOjpJbmxpbmVTdGFja0VudHJ5OjpJbmxp
bmUKICAgICAgICAgICAgIG1faW5saW5lQ2FsbEZyYW1lLT5pc0Nsb3N1cmVDYWxsID0gZmFsc2U7
CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgbV9pbmxpbmVDYWxsRnJhbWUtPmlzQ2xvc3Vy
ZUNhbGwgPSB0cnVlOwotICAgICAgICBtX2lubGluZUNhbGxGcmFtZS0+Y2FsbGVyID0gYnl0ZUNv
ZGVQYXJzZXItPmN1cnJlbnRDb2RlT3JpZ2luKCk7CisgICAgICAgIG1faW5saW5lQ2FsbEZyYW1l
LT5kaXJlY3RDYWxsZXIgPSBieXRlQ29kZVBhcnNlci0+Y3VycmVudENvZGVPcmlnaW4oKTsKICAg
ICAgICAgbV9pbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5yZXNpemVUb0ZpdChhcmd1bWVudENv
dW50SW5jbHVkaW5nVGhpcyk7IC8vIFNldCB0aGUgbnVtYmVyIG9mIGFyZ3VtZW50cyBpbmNsdWRp
bmcgdGhpcywgYnV0IGRvbid0IGNvbmZpZ3VyZSB0aGUgdmFsdWUgcmVjb3ZlcmllcywgeWV0Lgog
ICAgICAgICBtX2lubGluZUNhbGxGcmFtZS0+a2luZCA9IGtpbmQ7CiAgICAgICAgIApAQCAtNDYw
NCw3ICs0NzA2LDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VDb2RlQmxvY2soKQogICAg
IGlmIChVTkxJS0VMWShPcHRpb25zOjpkdW1wU291cmNlQXRERkdUaW1lKCkpKSB7CiAgICAgICAg
IFZlY3RvcjxEZWZlcnJlZFNvdXJjZUR1bXA+JiBkZWZlcnJlZFNvdXJjZUR1bXAgPSBtX2dyYXBo
Lm1fcGxhbi5jYWxsYmFjay0+ZW5zdXJlRGVmZXJyZWRTb3VyY2VEdW1wKCk7CiAgICAgICAgIGlm
IChpbmxpbmVDYWxsRnJhbWUoKSkgewotICAgICAgICAgICAgRGVmZXJyZWRTb3VyY2VEdW1wIGR1
bXAoY29kZUJsb2NrLT5iYXNlbGluZVZlcnNpb24oKSwgbV9jb2RlQmxvY2ssIEpJVENvZGU6OkRG
R0pJVCwgaW5saW5lQ2FsbEZyYW1lKCktPmNhbGxlcik7CisgICAgICAgICAgICBEZWZlcnJlZFNv
dXJjZUR1bXAgZHVtcChjb2RlQmxvY2stPmJhc2VsaW5lVmVyc2lvbigpLCBtX2NvZGVCbG9jaywg
SklUQ29kZTo6REZHSklULCBpbmxpbmVDYWxsRnJhbWUoKS0+ZGlyZWN0Q2FsbGVyKTsKICAgICAg
ICAgICAgIGRlZmVycmVkU291cmNlRHVtcC5hcHBlbmQoZHVtcCk7CiAgICAgICAgIH0gZWxzZQog
ICAgICAgICAgICAgZGVmZXJyZWRTb3VyY2VEdW1wLmFwcGVuZChEZWZlcnJlZFNvdXJjZUR1bXAo
Y29kZUJsb2NrLT5iYXNlbGluZVZlcnNpb24oKSkpOwpAQCAtNDYxNSw3ICs0NzE3LDcgQEAgdm9p
ZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VDb2RlQmxvY2soKQogICAgICAgICBpZiAoaW5saW5lQ2Fs
bEZyYW1lKCkpIHsKICAgICAgICAgICAgIGRhdGFMb2coCiAgICAgICAgICAgICAgICAgIiBmb3Ig
aW5saW5pbmcgYXQgIiwgQ29kZUJsb2NrV2l0aEpJVFR5cGUobV9jb2RlQmxvY2ssIEpJVENvZGU6
OkRGR0pJVCksCi0gICAgICAgICAgICAgICAgIiAiLCBpbmxpbmVDYWxsRnJhbWUoKS0+Y2FsbGVy
KTsKKyAgICAgICAgICAgICAgICAiICIsIGlubGluZUNhbGxGcmFtZSgpLT5kaXJlY3RDYWxsZXIp
OwogICAgICAgICB9CiAgICAgICAgIGRhdGFMb2coCiAgICAgICAgICAgICAiOiBuZWVkc0FjdGl2
YXRpb24gPSAiLCBjb2RlQmxvY2stPm5lZWRzQWN0aXZhdGlvbigpLApAQCAtNDY5OSw3ICs0ODAx
LDcgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VDb2RlQmxvY2soKQogICAgICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAgICAgbV9j
dXJyZW50QmxvY2sgPSAwOworICAgICAgICAgICAgbV9jdXJyZW50QmxvY2sgPSBudWxscHRyOwog
ICAgICAgICB9IHdoaWxlIChtX2N1cnJlbnRJbmRleCA8IGxpbWl0KTsKICAgICB9CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5jcHAJKHJldmlz
aW9uIDE5MDE1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc5LDggKzE3OSwxMCBAQCBDYXBhYmlsaXR5TGV2ZWwg
Y2FwYWJpbGl0eUxldmVsKE9wY29kZUlECiAgICAgY2FzZSBvcF90aHJvdzoKICAgICBjYXNlIG9w
X3Rocm93X3N0YXRpY19lcnJvcjoKICAgICBjYXNlIG9wX2NhbGw6CisgICAgY2FzZSBvcF90YWls
X2NhbGw6CiAgICAgY2FzZSBvcF9jb25zdHJ1Y3Q6CiAgICAgY2FzZSBvcF9jYWxsX3ZhcmFyZ3M6
CisgICAgY2FzZSBvcF90YWlsX2NhbGxfdmFyYXJnczoKICAgICBjYXNlIG9wX2NvbnN0cnVjdF92
YXJhcmdzOgogICAgIGNhc2Ugb3BfY3JlYXRlX2RpcmVjdF9hcmd1bWVudHM6CiAgICAgY2FzZSBv
cF9jcmVhdGVfc2NvcGVkX2FyZ3VtZW50czoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ2xvYmJlcml6ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ2xvYmJlcml6ZS5oCShyZXZpc2lvbiAxOTAxNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkod29ya2luZyBjb3B5KQpAQCAtMzgyLDkgKzM4Miwx
MiBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgY2FzZSBB
cnJheVB1c2g6CiAgICAgY2FzZSBBcnJheVBvcDoKICAgICBjYXNlIENhbGw6CisgICAgY2FzZSBU
YWlsQ2FsbElubGluZWRDYWxsZXI6CiAgICAgY2FzZSBDb25zdHJ1Y3Q6CiAgICAgY2FzZSBDYWxs
VmFyYXJnczoKICAgICBjYXNlIENhbGxGb3J3YXJkVmFyYXJnczoKKyAgICBjYXNlIFRhaWxDYWxs
VmFyYXJnc0lubGluZWRDYWxsZXI6CisgICAgY2FzZSBUYWlsQ2FsbEZvcndhcmRWYXJhcmdzSW5s
aW5lZENhbGxlcjoKICAgICBjYXNlIENvbnN0cnVjdFZhcmFyZ3M6CiAgICAgY2FzZSBDb25zdHJ1
Y3RGb3J3YXJkVmFyYXJnczoKICAgICBjYXNlIFRvUHJpbWl0aXZlOgpAQCAtMzkzLDYgKzM5Niwx
MyBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgICAgIHJl
YWQoV29ybGQpOwogICAgICAgICB3cml0ZShIZWFwKTsKICAgICAgICAgcmV0dXJuOworCisgICAg
Y2FzZSBUYWlsQ2FsbDoKKyAgICBjYXNlIFRhaWxDYWxsVmFyYXJnczoKKyAgICBjYXNlIFRhaWxD
YWxsRm9yd2FyZFZhcmFyZ3M6CisgICAgICAgIHJlYWQoV29ybGQpOworICAgICAgICB3cml0ZShT
aWRlU3RhdGUpOworICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgIGNhc2UgR2V0R2V0dGVy
OgogICAgICAgICByZWFkKEdldHRlclNldHRlcl9nZXR0ZXIpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHRG9lc0dDLmNwcAkocmV2aXNpb24gMTkwMTUzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdEb2VzR0MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjAsMTIg
KzEyMCwxNiBAQCBib29sIGRvZXNHQyhHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUpCiAgICAgY2Fz
ZSBDb21wYXJlRXE6CiAgICAgY2FzZSBDb21wYXJlU3RyaWN0RXE6CiAgICAgY2FzZSBDYWxsOgor
ICAgIGNhc2UgVGFpbENhbGxJbmxpbmVkQ2FsbGVyOgogICAgIGNhc2UgQ29uc3RydWN0OgogICAg
IGNhc2UgQ2FsbFZhcmFyZ3M6CisgICAgY2FzZSBUYWlsQ2FsbFZhcmFyZ3NJbmxpbmVkQ2FsbGVy
OgogICAgIGNhc2UgQ29uc3RydWN0VmFyYXJnczoKICAgICBjYXNlIExvYWRWYXJhcmdzOgogICAg
IGNhc2UgQ2FsbEZvcndhcmRWYXJhcmdzOgogICAgIGNhc2UgQ29uc3RydWN0Rm9yd2FyZFZhcmFy
Z3M6CisgICAgY2FzZSBUYWlsQ2FsbEZvcndhcmRWYXJhcmdzOgorICAgIGNhc2UgVGFpbENhbGxG
b3J3YXJkVmFyYXJnc0lubGluZWRDYWxsZXI6CiAgICAgY2FzZSBCcmVha3BvaW50OgogICAgIGNh
c2UgUHJvZmlsZVdpbGxDYWxsOgogICAgIGNhc2UgUHJvZmlsZURpZENhbGw6CkBAIC0xNTAsNiAr
MTU0LDggQEAgYm9vbCBkb2VzR0MoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlKQogICAgIGNhc2Ug
QnJhbmNoOgogICAgIGNhc2UgU3dpdGNoOgogICAgIGNhc2UgUmV0dXJuOgorICAgIGNhc2UgVGFp
bENhbGw6CisgICAgY2FzZSBUYWlsQ2FsbFZhcmFyZ3M6CiAgICAgY2FzZSBUaHJvdzoKICAgICBj
YXNlIENvdW50RXhlY3V0aW9uOgogICAgIGNhc2UgRm9yY2VPU1JFeGl0OgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdGaXh1cFBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCShyZXZpc2lvbiAxOTAxNTMp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMzQzLDExICsxMzQzLDE1IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgTm90
aWZ5V3JpdGU6CiAgICAgICAgIGNhc2UgVmFySW5qZWN0aW9uV2F0Y2hwb2ludDoKICAgICAgICAg
Y2FzZSBDYWxsOgorICAgICAgICBjYXNlIFRhaWxDYWxsSW5saW5lZENhbGxlcjoKICAgICAgICAg
Y2FzZSBDb25zdHJ1Y3Q6CiAgICAgICAgIGNhc2UgQ2FsbFZhcmFyZ3M6CisgICAgICAgIGNhc2Ug
VGFpbENhbGxWYXJhcmdzSW5saW5lZENhbGxlcjoKICAgICAgICAgY2FzZSBDb25zdHJ1Y3RWYXJh
cmdzOgogICAgICAgICBjYXNlIENhbGxGb3J3YXJkVmFyYXJnczoKICAgICAgICAgY2FzZSBDb25z
dHJ1Y3RGb3J3YXJkVmFyYXJnczoKKyAgICAgICAgY2FzZSBUYWlsQ2FsbEZvcndhcmRWYXJhcmdz
OgorICAgICAgICBjYXNlIFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3NJbmxpbmVkQ2FsbGVyOgogICAg
ICAgICBjYXNlIExvYWRWYXJhcmdzOgogICAgICAgICBjYXNlIFByb2ZpbGVDb250cm9sRmxvdzoK
ICAgICAgICAgY2FzZSBOZXdPYmplY3Q6CkBAIC0xMzY1LDYgKzEzNjksOCBAQCBwcml2YXRlOgog
ICAgICAgICBjYXNlIENyZWF0ZUNsb25lZEFyZ3VtZW50czoKICAgICAgICAgY2FzZSBKdW1wOgog
ICAgICAgICBjYXNlIFJldHVybjoKKyAgICAgICAgY2FzZSBUYWlsQ2FsbDoKKyAgICAgICAgY2Fz
ZSBUYWlsQ2FsbFZhcmFyZ3M6CiAgICAgICAgIGNhc2UgVGhyb3c6CiAgICAgICAgIGNhc2UgVGhy
b3dSZWZlcmVuY2VFcnJvcjoKICAgICAgICAgY2FzZSBDb3VudEV4ZWN1dGlvbjoKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiAxOTAxNTMpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
OTYxLDMwICs5NjEsMzEgQEAgQnl0ZWNvZGVLaWxscyYgR3JhcGg6OmtpbGxzRm9yKElubGluZUNh
bAogCiBib29sIEdyYXBoOjppc0xpdmVJbkJ5dGVjb2RlKFZpcnR1YWxSZWdpc3RlciBvcGVyYW5k
LCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCiB7CisgICAgQ29kZU9yaWdpbiogY29kZU9yaWdpblB0
ciA9ICZjb2RlT3JpZ2luOwogICAgIGZvciAoOzspIHsKICAgICAgICAgVmlydHVhbFJlZ2lzdGVy
IHJlZyA9IFZpcnR1YWxSZWdpc3RlcigKLSAgICAgICAgICAgIG9wZXJhbmQub2Zmc2V0KCkgLSBj
b2RlT3JpZ2luLnN0YWNrT2Zmc2V0KCkpOworICAgICAgICAgICAgb3BlcmFuZC5vZmZzZXQoKSAt
IGNvZGVPcmlnaW5QdHItPnN0YWNrT2Zmc2V0KCkpOwogICAgICAgICAKLSAgICAgICAgaWYgKG9w
ZXJhbmQub2Zmc2V0KCkgPCBjb2RlT3JpZ2luLnN0YWNrT2Zmc2V0KCkgKyBKU1N0YWNrOjpDYWxs
RnJhbWVIZWFkZXJTaXplKSB7CisgICAgICAgIGlmIChvcGVyYW5kLm9mZnNldCgpIDwgY29kZU9y
aWdpblB0ci0+c3RhY2tPZmZzZXQoKSArIEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlclNpemUpIHsK
ICAgICAgICAgICAgIGlmIChyZWcuaXNBcmd1bWVudCgpKSB7CiAgICAgICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlQocmVnLm9mZnNldCgpIDwgSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSk7
CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKGNvZGVPcmlnaW4uaW5saW5l
Q2FsbEZyYW1lLT5pc0Nsb3N1cmVDYWxsCisgICAgICAgICAgICAgICAgaWYgKGNvZGVPcmlnaW5Q
dHItPmlubGluZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2FsbAogICAgICAgICAgICAgICAgICAgICAm
JiByZWcub2Zmc2V0KCkgPT0gSlNTdGFjazo6Q2FsbGVlKQogICAgICAgICAgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoY29kZU9y
aWdpbi5pbmxpbmVDYWxsRnJhbWUtPmlzVmFyYXJncygpCisgICAgICAgICAgICAgICAgaWYgKGNv
ZGVPcmlnaW5QdHItPmlubGluZUNhbGxGcmFtZS0+aXNWYXJhcmdzKCkKICAgICAgICAgICAgICAg
ICAgICAgJiYgcmVnLm9mZnNldCgpID09IEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpCiAgICAgICAg
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICAg
ICAgcmV0dXJuIGxpdmVuZXNzRm9yKGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKS5vcGVyYW5k
SXNMaXZlKAotICAgICAgICAgICAgICAgIHJlZy5vZmZzZXQoKSwgY29kZU9yaWdpbi5ieXRlY29k
ZUluZGV4KTsKKyAgICAgICAgICAgIHJldHVybiBsaXZlbmVzc0Zvcihjb2RlT3JpZ2luUHRyLT5p
bmxpbmVDYWxsRnJhbWUpLm9wZXJhbmRJc0xpdmUoCisgICAgICAgICAgICAgICAgcmVnLm9mZnNl
dCgpLCBjb2RlT3JpZ2luUHRyLT5ieXRlY29kZUluZGV4KTsKICAgICAgICAgfQogICAgICAgICAK
LSAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBjb2RlT3JpZ2luLmlu
bGluZUNhbGxGcmFtZTsKKyAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUg
PSBjb2RlT3JpZ2luUHRyLT5pbmxpbmVDYWxsRnJhbWU7CiAgICAgICAgIGlmICghaW5saW5lQ2Fs
bEZyYW1lKQogICAgICAgICAgICAgYnJlYWs7CiAKQEAgLTk5NCw3ICs5OTUsMTEgQEAgYm9vbCBH
cmFwaDo6aXNMaXZlSW5CeXRlY29kZShWaXJ0dWFsUmVnaQogICAgICAgICAgICAgJiYgc3RhdGlj
X2Nhc3Q8c2l6ZV90PihyZWcudG9Bcmd1bWVudCgpKSA8IGlubGluZUNhbGxGcmFtZS0+YXJndW1l
bnRzLnNpemUoKSkKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAKLSAgICAgICAg
Y29kZU9yaWdpbiA9IGlubGluZUNhbGxGcmFtZS0+Y2FsbGVyOworICAgICAgICBjb2RlT3JpZ2lu
UHRyID0gaW5saW5lQ2FsbEZyYW1lLT5nZXRDYWxsZXJTa2lwcGluZ0RlYWRGcmFtZXMoKTsKKwor
ICAgICAgICAvLyBUaGUgZmlyc3QgaW5saW5lIGNhbGwgZnJhbWUgY291bGQgYmUgYW4gaW5saW5l
IHRhaWwgY2FsbAorICAgICAgICBpZiAoIWNvZGVPcmlnaW5QdHIpCisgICAgICAgICAgICBicmVh
azsKICAgICB9CiAgICAgCiAgICAgcmV0dXJuIHRydWU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0dyYXBoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdHcmFwaC5oCShyZXZpc2lvbiAxOTAxNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0dyYXBoLmgJKHdvcmtpbmcgY29weSkKQEAgLTcxNyw5ICs3MTcsMTEgQEAgcHVi
bGljOgogICAgICAgICAvLyBjYWxsLCBib3RoIGNhbGxlZSBhbmQgY2FsbGVyIHdpbGwgc2VlIHRo
ZSB2YXJpYWJsZXMgbGl2ZS4KICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGV4Y2x1c2lvblN0YXJ0
OwogICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgZXhjbHVzaW9uRW5kOworCisgICAgICAgIENvZGVP
cmlnaW4qIGNvZGVPcmlnaW5QdHIgPSAmY29kZU9yaWdpbjsKICAgICAgICAgCiAgICAgICAgIGZv
ciAoOzspIHsKLSAgICAgICAgICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0g
Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWU7CisgICAgICAgICAgICBJbmxpbmVDYWxsRnJhbWUq
IGlubGluZUNhbGxGcmFtZSA9IGNvZGVPcmlnaW5QdHItPmlubGluZUNhbGxGcmFtZTsKICAgICAg
ICAgICAgIFZpcnR1YWxSZWdpc3RlciBzdGFja09mZnNldChpbmxpbmVDYWxsRnJhbWUgPyBpbmxp
bmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0IDogMCk7CiAgICAgICAgICAgICAKICAgICAgICAgICAg
IGlmIChpbmxpbmVDYWxsRnJhbWUpIHsKQEAgLTczMSw3ICs3MzMsNyBAQCBwdWJsaWM6CiAgICAg
ICAgICAgICAKICAgICAgICAgICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gYmFzZWxpbmVDb2Rl
QmxvY2tGb3IoaW5saW5lQ2FsbEZyYW1lKTsKICAgICAgICAgICAgIEZ1bGxCeXRlY29kZUxpdmVu
ZXNzJiBmdWxsTGl2ZW5lc3MgPSBsaXZlbmVzc0Zvcihjb2RlQmxvY2spOwotICAgICAgICAgICAg
Y29uc3QgRmFzdEJpdFZlY3RvciYgbGl2ZW5lc3MgPSBmdWxsTGl2ZW5lc3MuZ2V0TGl2ZW5lc3Mo
Y29kZU9yaWdpbi5ieXRlY29kZUluZGV4KTsKKyAgICAgICAgICAgIGNvbnN0IEZhc3RCaXRWZWN0
b3ImIGxpdmVuZXNzID0gZnVsbExpdmVuZXNzLmdldExpdmVuZXNzKGNvZGVPcmlnaW5QdHItPmJ5
dGVjb2RlSW5kZXgpOwogICAgICAgICAgICAgZm9yICh1bnNpZ25lZCByZWxhdGl2ZUxvY2FsID0g
Y29kZUJsb2NrLT5tX251bUNhbGxlZVJlZ2lzdGVyczsgcmVsYXRpdmVMb2NhbC0tOykgewogICAg
ICAgICAgICAgICAgIFZpcnR1YWxSZWdpc3RlciByZWcgPSBzdGFja09mZnNldCArIHZpcnR1YWxS
ZWdpc3RlckZvckxvY2FsKHJlbGF0aXZlTG9jYWwpOwogICAgICAgICAgICAgICAgIApAQCAtNzU4
LDcgKzc2MCwxMSBAQCBwdWJsaWM6CiAgICAgICAgICAgICBmb3IgKFZpcnR1YWxSZWdpc3RlciBy
ZWcgPSBleGNsdXNpb25TdGFydDsgcmVnIDwgZXhjbHVzaW9uRW5kOyByZWcgKz0gMSkKICAgICAg
ICAgICAgICAgICBmdW5jdG9yKHJlZyk7CiAgICAgICAgICAgICAKLSAgICAgICAgICAgIGNvZGVP
cmlnaW4gPSBpbmxpbmVDYWxsRnJhbWUtPmNhbGxlcjsKKyAgICAgICAgICAgIGNvZGVPcmlnaW5Q
dHIgPSBpbmxpbmVDYWxsRnJhbWUtPmdldENhbGxlclNraXBwaW5nRGVhZEZyYW1lcygpOworCisg
ICAgICAgICAgICAvLyBUaGUgZmlyc3QgaW5saW5lIGNhbGwgZnJhbWUgY291bGQgYmUgYW4gaW5s
aW5lIHRhaWwgY2FsbAorICAgICAgICAgICAgaWYgKCFjb2RlT3JpZ2luUHRyKQorICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQogICAgIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHAJKHJl
dmlzaW9uIDE5MDE1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSW5QbGFjZUFi
c3RyYWN0U3RhdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNjQsNiArMzY0LDkgQEAgaW5saW5l
IGJvb2wgSW5QbGFjZUFic3RyYWN0U3RhdGU6Om1lcmdlVAogICAgIH0KICAgICAgICAgCiAgICAg
Y2FzZSBSZXR1cm46CisgICAgY2FzZSBUYWlsQ2FsbDoKKyAgICBjYXNlIFRhaWxDYWxsVmFyYXJn
czoKKyAgICBjYXNlIFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3M6CiAgICAgY2FzZSBVbnJlYWNoYWJs
ZToKICAgICAgICAgQVNTRVJUKGJhc2ljQmxvY2stPmNmYUJyYW5jaERpcmVjdGlvbiA9PSBJbnZh
bGlkQnJhbmNoRGlyZWN0aW9uKTsKICAgICAgICAgcmV0dXJuIGZhbHNlOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHJldmlzaW9uIDE5MDE1
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHSklUQ29tcGlsZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01NzUsOCArNTc1LDggQEAgYm9vbCBKSVRDb21waWxlcjo6d2lsbENhdGNo
RXhjZXB0aW9uSW5NYQogICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZSkKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgICAgICBieXRlY29kZUluZGV4VG9DaGVjayA9IGlubGluZUNh
bGxGcmFtZS0+Y2FsbGVyLmJ5dGVjb2RlSW5kZXg7Ci0gICAgICAgIGNvZGVPcmlnaW4gPSBjb2Rl
T3JpZ2luLmlubGluZUNhbGxGcmFtZS0+Y2FsbGVyOworICAgICAgICBieXRlY29kZUluZGV4VG9D
aGVjayA9IGlubGluZUNhbGxGcmFtZS0+ZGlyZWN0Q2FsbGVyLmJ5dGVjb2RlSW5kZXg7CisgICAg
ICAgIGNvZGVPcmlnaW4gPSBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+ZGlyZWN0Q2FsbGVy
OwogICAgIH0KIAogICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0xpdmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0aW9uUGhh
c2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTGl2ZUNh
dGNoVmFyaWFibGVQcmVzZXJ2YXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE5MDE1MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTGl2ZUNhdGNoVmFyaWFibGVQcmVzZXJ2YXRpb25Q
aGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgxLDggKzgxLDggQEAgcHVibGljOgogICAgICAg
ICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgICAgICAgICBieXRlY29kZUluZGV4VG9DaGVjayA9IGlubGluZUNhbGxGcmFtZS0+
Y2FsbGVyLmJ5dGVjb2RlSW5kZXg7Ci0gICAgICAgICAgICBvcmlnaW4gPSBpbmxpbmVDYWxsRnJh
bWUtPmNhbGxlcjsKKyAgICAgICAgICAgIGJ5dGVjb2RlSW5kZXhUb0NoZWNrID0gaW5saW5lQ2Fs
bEZyYW1lLT5kaXJlY3RDYWxsZXIuYnl0ZWNvZGVJbmRleDsKKyAgICAgICAgICAgIG9yaWdpbiA9
IGlubGluZUNhbGxGcmFtZS0+ZGlyZWN0Q2FsbGVyOwogICAgICAgICB9CiAgICAgfQogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gMTkwMTUzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMDcs
NiArMTAwNywxMCBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIHN3aXRjaCAob3AoKSkgewogICAg
ICAgICBjYXNlIENhbGxWYXJhcmdzOgogICAgICAgICBjYXNlIENhbGxGb3J3YXJkVmFyYXJnczoK
KyAgICAgICAgY2FzZSBUYWlsQ2FsbFZhcmFyZ3M6CisgICAgICAgIGNhc2UgVGFpbENhbGxGb3J3
YXJkVmFyYXJnczoKKyAgICAgICAgY2FzZSBUYWlsQ2FsbFZhcmFyZ3NJbmxpbmVkQ2FsbGVyOgor
ICAgICAgICBjYXNlIFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3NJbmxpbmVkQ2FsbGVyOgogICAgICAg
ICBjYXNlIENvbnN0cnVjdFZhcmFyZ3M6CiAgICAgICAgIGNhc2UgQ29uc3RydWN0Rm9yd2FyZFZh
cmFyZ3M6CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTExMDQsNiArMTEwOCw5IEBAIHN0
cnVjdCBOb2RlIHsKICAgICAgICAgY2FzZSBCcmFuY2g6CiAgICAgICAgIGNhc2UgU3dpdGNoOgog
ICAgICAgICBjYXNlIFJldHVybjoKKyAgICAgICAgY2FzZSBUYWlsQ2FsbDoKKyAgICAgICAgY2Fz
ZSBUYWlsQ2FsbFZhcmFyZ3M6CisgICAgICAgIGNhc2UgVGFpbENhbGxGb3J3YXJkVmFyYXJnczoK
ICAgICAgICAgY2FzZSBVbnJlYWNoYWJsZToKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAg
ICAgICBkZWZhdWx0OgpAQCAtMTI1NCwxMCArMTI2MSwxMyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAg
ICAgIGNhc2UgR2V0QnlJZEZsdXNoOgogICAgICAgICBjYXNlIEdldEJ5VmFsOgogICAgICAgICBj
YXNlIENhbGw6CisgICAgICAgIGNhc2UgVGFpbENhbGxJbmxpbmVkQ2FsbGVyOgogICAgICAgICBj
YXNlIENvbnN0cnVjdDoKICAgICAgICAgY2FzZSBDYWxsVmFyYXJnczoKKyAgICAgICAgY2FzZSBU
YWlsQ2FsbFZhcmFyZ3NJbmxpbmVkQ2FsbGVyOgogICAgICAgICBjYXNlIENvbnN0cnVjdFZhcmFy
Z3M6CiAgICAgICAgIGNhc2UgQ2FsbEZvcndhcmRWYXJhcmdzOgorICAgICAgICBjYXNlIFRhaWxD
YWxsRm9yd2FyZFZhcmFyZ3NJbmxpbmVkQ2FsbGVyOgogICAgICAgICBjYXNlIEdldEJ5T2Zmc2V0
OgogICAgICAgICBjYXNlIE11bHRpR2V0QnlPZmZzZXQ6CiAgICAgICAgIGNhc2UgR2V0Q2xvc3Vy
ZVZhcjoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHJldmlz
aW9uIDE5MDE1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAko
d29ya2luZyBjb3B5KQpAQCAtMjQ1LDYgKzI0NSw5IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgREZHIHsKICAgICBtYWNybyhDYWxsRm9yd2FyZFZhcmFyZ3MsIE5vZGVSZXN1bHRKUyB8IE5v
ZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhDb25zdHJ1Y3RWYXJhcmdzLCBOb2RlUmVzdWx0
SlMgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oQ29uc3RydWN0Rm9yd2FyZFZhcmFy
Z3MsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAgICBtYWNybyhUYWlsQ2Fs
bElubGluZWRDYWxsZXIsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlSGFz
VmFyQXJncykgXAorICAgIG1hY3JvKFRhaWxDYWxsVmFyYXJnc0lubGluZWRDYWxsZXIsIE5vZGVS
ZXN1bHRKUyB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAgICBtYWNybyhUYWlsQ2FsbEZvcndhcmRW
YXJhcmdzSW5saW5lZENhbGxlciwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAog
ICAgIFwKICAgICAvKiBBbGxvY2F0aW9ucy4gKi9cCiAgICAgbWFjcm8oTmV3T2JqZWN0LCBOb2Rl
UmVzdWx0SlMpIFwKQEAgLTMxMCw2ICszMTMsOSBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IERGRyB7CiAgICAgbWFjcm8oQnJhbmNoLCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8o
U3dpdGNoLCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oUmV0dXJuLCBOb2RlTXVzdEdl
bmVyYXRlKSBcCisgICAgbWFjcm8oVGFpbENhbGwsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlSGFz
VmFyQXJncykgXAorICAgIG1hY3JvKFRhaWxDYWxsVmFyYXJncywgTm9kZU11c3RHZW5lcmF0ZSkg
XAorICAgIG1hY3JvKFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3MsIE5vZGVNdXN0R2VuZXJhdGUpIFwK
ICAgICBtYWNybyhVbnJlYWNoYWJsZSwgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIFwKICAgICAv
KiBDb3VudCBleGVjdXRpb24uICovXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT1NSRXhpdENvbXBpbGVyQ29tbW9uLmNwcAkocmV2aXNpb24gMTkwMTUz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0Q29tcGlsZXJDb21tb24u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NCw3ICs2NCw3IEBAIHZvaWQgaGFuZGxlRXhpdENvdW50
cyhDQ2FsbEhlbHBlcnMmIGppdCwKICAgICAKICAgICBBc3NlbWJseUhlbHBlcnM6Okp1bXBMaXN0
IGxvb3BUaHJlc2hvbGQ7CiAgICAgCi0gICAgZm9yIChJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNh
bGxGcmFtZSA9IGV4aXQubV9jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZTsgaW5saW5lQ2FsbEZy
YW1lOyBpbmxpbmVDYWxsRnJhbWUgPSBpbmxpbmVDYWxsRnJhbWUtPmNhbGxlci5pbmxpbmVDYWxs
RnJhbWUpIHsKKyAgICBmb3IgKElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0gZXhp
dC5tX2NvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lOyBpbmxpbmVDYWxsRnJhbWU7IGlubGluZUNh
bGxGcmFtZSA9IGlubGluZUNhbGxGcmFtZS0+ZGlyZWN0Q2FsbGVyLmlubGluZUNhbGxGcmFtZSkg
ewogICAgICAgICBsb29wVGhyZXNob2xkLmFwcGVuZCgKICAgICAgICAgICAgIGppdC5icmFuY2hU
ZXN0OCgKICAgICAgICAgICAgICAgICBBc3NlbWJseUhlbHBlcnM6Ok5vblplcm8sCkBAIC0xMzYs
NjMgKzEzNiw4MCBAQCB2b2lkIGhhbmRsZUV4aXRDb3VudHMoQ0NhbGxIZWxwZXJzJiBqaXQsCiAK
IHZvaWQgcmVpZnlJbmxpbmVkQ2FsbEZyYW1lcyhDQ2FsbEhlbHBlcnMmIGppdCwgY29uc3QgT1NS
RXhpdEJhc2UmIGV4aXQpCiB7CisgICAgLy8gRklYTUU6IFdlIHNob3VsZG4ndCBsZWF2ZSBob2xl
cyBvbiB0aGUgc3RhY2sgd2hlbiBwZXJmb3JtaW5nIGFuIE9TUiBleGl0CisgICAgLy8gaW4gcHJl
c2VuY2Ugb2YgaW5saW5lZCB0YWlsIGNhbGxzLgorICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNDc1MTEKICAgICBBU1NFUlQoaml0LmJhc2VsaW5lQ29kZUJs
b2NrKCktPmppdFR5cGUoKSA9PSBKSVRDb2RlOjpCYXNlbGluZUpJVCk7CiAgICAgaml0LnN0b3Jl
UHRyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbVB0cihqaXQuYmFzZWxpbmVDb2RlQmxvY2so
KSksIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKUpTU3RhY2s6
OkNvZGVCbG9jaykpOwogCi0gICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luOwotICAgIGZvciAoY29k
ZU9yaWdpbiA9IGV4aXQubV9jb2RlT3JpZ2luOyBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZTsg
Y29kZU9yaWdpbiA9IGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5jYWxsZXIpIHsKLSAgICAg
ICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBjb2RlT3JpZ2luLmlubGluZUNh
bGxGcmFtZTsKLSAgICAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVCbG9jayA9IGppdC5iYXNl
bGluZUNvZGVCbG9ja0Zvcihjb2RlT3JpZ2luKTsKLSAgICAgICAgQ29kZUJsb2NrKiBiYXNlbGlu
ZUNvZGVCbG9ja0ZvckNhbGxlciA9IGppdC5iYXNlbGluZUNvZGVCbG9ja0ZvcihpbmxpbmVDYWxs
RnJhbWUtPmNhbGxlcik7Ci0gICAgICAgIHZvaWQqIGp1bXBUYXJnZXQgPSBudWxscHRyOworICAg
IGNvbnN0IENvZGVPcmlnaW4qIGNvZGVPcmlnaW47CisgICAgZm9yIChjb2RlT3JpZ2luID0gJmV4
aXQubV9jb2RlT3JpZ2luOyBjb2RlT3JpZ2luICYmIGNvZGVPcmlnaW4tPmlubGluZUNhbGxGcmFt
ZTsgY29kZU9yaWdpbiA9IGNvZGVPcmlnaW4tPmlubGluZUNhbGxGcmFtZS0+Z2V0Q2FsbGVyU2tp
cHBpbmdEZWFkRnJhbWVzKCkpIHsKKyAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxs
RnJhbWUgPSBjb2RlT3JpZ2luLT5pbmxpbmVDYWxsRnJhbWU7CisgICAgICAgIENvZGVCbG9jayog
YmFzZWxpbmVDb2RlQmxvY2sgPSBqaXQuYmFzZWxpbmVDb2RlQmxvY2tGb3IoKmNvZGVPcmlnaW4p
OworICAgICAgICBDb2RlT3JpZ2luKiB0cnVlQ2FsbGVyID0gaW5saW5lQ2FsbEZyYW1lLT5nZXRD
YWxsZXJTa2lwcGluZ0RlYWRGcmFtZXMoKTsKICAgICAgICAgdm9pZCogdHJ1ZVJldHVyblBDID0g
bnVsbHB0cjsKLSAgICAgICAgCi0gICAgICAgIHVuc2lnbmVkIGNhbGxCeXRlY29kZUluZGV4ID0g
aW5saW5lQ2FsbEZyYW1lLT5jYWxsZXIuYnl0ZWNvZGVJbmRleDsKLSAgICAgICAgCi0gICAgICAg
IHN3aXRjaCAoaW5saW5lQ2FsbEZyYW1lLT5raW5kKSB7Ci0gICAgICAgIGNhc2UgSW5saW5lQ2Fs
bEZyYW1lOjpDYWxsOgotICAgICAgICBjYXNlIElubGluZUNhbGxGcmFtZTo6Q29uc3RydWN0Ogot
ICAgICAgICBjYXNlIElubGluZUNhbGxGcmFtZTo6Q2FsbFZhcmFyZ3M6Ci0gICAgICAgIGNhc2Ug
SW5saW5lQ2FsbEZyYW1lOjpDb25zdHJ1Y3RWYXJhcmdzOiB7Ci0gICAgICAgICAgICBDYWxsTGlu
a0luZm8qIGNhbGxMaW5rSW5mbyA9Ci0gICAgICAgICAgICAgICAgYmFzZWxpbmVDb2RlQmxvY2tG
b3JDYWxsZXItPmdldENhbGxMaW5rSW5mb0ZvckJ5dGVjb2RlSW5kZXgoY2FsbEJ5dGVjb2RlSW5k
ZXgpOwotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2FsbExpbmtJbmZvKTsKLSAgICAgICAg
ICAgIAotICAgICAgICAgICAganVtcFRhcmdldCA9IGNhbGxMaW5rSW5mby0+Y2FsbFJldHVybkxv
Y2F0aW9uKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBJbmxpbmVDYWxsRnJhbWU6OkdldHRlckNh
bGw6Ci0gICAgICAgIGNhc2UgSW5saW5lQ2FsbEZyYW1lOjpTZXR0ZXJDYWxsOiB7Ci0gICAgICAg
ICAgICBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8gPQotICAgICAgICAgICAgICAgIGJhc2Vs
aW5lQ29kZUJsb2NrRm9yQ2FsbGVyLT5maW5kU3R1YkluZm8oQ29kZU9yaWdpbihjYWxsQnl0ZWNv
ZGVJbmRleCkpOwotICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoc3R1YkluZm8pOwotICAgICAg
ICAgICAgCisgICAgICAgIEdQUlJlZyBjYWxsZXJGcmFtZUdQUiA9IEdQUkluZm86OmNhbGxGcmFt
ZVJlZ2lzdGVyOworCisgICAgICAgIGlmICghdHJ1ZUNhbGxlcikgeworICAgICAgICAgICAgQVNT
RVJUKGlubGluZUNhbGxGcmFtZS0+aXNUYWlsKCkpOworICAgICAgICAgICAgaml0LmxvYWRQdHIo
QXNzZW1ibHlIZWxwZXJzOjpBZGRyZXNzKEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBDYWxs
RnJhbWU6OnJldHVyblBDT2Zmc2V0KCkpLCBHUFJJbmZvOjpyZWdUMyk7CisgICAgICAgICAgICBq
aXQuc3RvcmVQdHIoR1BSSW5mbzo6cmVnVDMsIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvckJ5
dGVPZmZzZXQoaW5saW5lQ2FsbEZyYW1lLT5yZXR1cm5QQ09mZnNldCgpKSk7CisgICAgICAgICAg
ICBqaXQubG9hZFB0cihBc3NlbWJseUhlbHBlcnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1l
UmVnaXN0ZXIsIENhbGxGcmFtZTo6Y2FsbGVyRnJhbWVPZmZzZXQoKSksIEdQUkluZm86OnJlZ1Qz
KTsKKyAgICAgICAgICAgIGNhbGxlckZyYW1lR1BSID0gR1BSSW5mbzo6cmVnVDM7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2Fs
bGVyID0gaml0LmJhc2VsaW5lQ29kZUJsb2NrRm9yKCp0cnVlQ2FsbGVyKTsKKyAgICAgICAgICAg
IHVuc2lnbmVkIGNhbGxCeXRlY29kZUluZGV4ID0gdHJ1ZUNhbGxlci0+Ynl0ZWNvZGVJbmRleDsK
KyAgICAgICAgICAgIHZvaWQqIGp1bXBUYXJnZXQgPSBudWxscHRyOworCiAgICAgICAgICAgICBz
d2l0Y2ggKGlubGluZUNhbGxGcmFtZS0+a2luZCkgewotICAgICAgICAgICAgY2FzZSBJbmxpbmVD
YWxsRnJhbWU6OkdldHRlckNhbGw6Ci0gICAgICAgICAgICAgICAganVtcFRhcmdldCA9IGppdC52
bSgpLT5nZXRDVElTdHViKGJhc2VsaW5lR2V0dGVyUmV0dXJuVGh1bmtHZW5lcmF0b3IpLmNvZGUo
KS5leGVjdXRhYmxlQWRkcmVzcygpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgY2FzZSBJbmxpbmVDYWxsRnJhbWU6OlNldHRlckNhbGw6Ci0gICAgICAgICAgICAgICAganVt
cFRhcmdldCA9IGppdC52bSgpLT5nZXRDVElTdHViKGJhc2VsaW5lU2V0dGVyUmV0dXJuVGh1bmtH
ZW5lcmF0b3IpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpOworICAgICAgICAgICAgY2FzZSBJ
bmxpbmVDYWxsRnJhbWU6OkNhbGw6CisgICAgICAgICAgICBjYXNlIElubGluZUNhbGxGcmFtZTo6
Q29uc3RydWN0OgorICAgICAgICAgICAgY2FzZSBJbmxpbmVDYWxsRnJhbWU6OkNhbGxWYXJhcmdz
OgorICAgICAgICAgICAgY2FzZSBJbmxpbmVDYWxsRnJhbWU6OkNvbnN0cnVjdFZhcmFyZ3M6Cisg
ICAgICAgICAgICBjYXNlIElubGluZUNhbGxGcmFtZTo6VGFpbENhbGw6CisgICAgICAgICAgICBj
YXNlIElubGluZUNhbGxGcmFtZTo6VGFpbENhbGxWYXJhcmdzOiB7CisgICAgICAgICAgICAgICAg
Q2FsbExpbmtJbmZvKiBjYWxsTGlua0luZm8gPQorICAgICAgICAgICAgICAgICAgICBiYXNlbGlu
ZUNvZGVCbG9ja0ZvckNhbGxlci0+Z2V0Q2FsbExpbmtJbmZvRm9yQnl0ZWNvZGVJbmRleChjYWxs
Qnl0ZWNvZGVJbmRleCk7CisgICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoY2FsbExpbmtJ
bmZvKTsKKworICAgICAgICAgICAgICAgIGp1bXBUYXJnZXQgPSBjYWxsTGlua0luZm8tPmNhbGxS
ZXR1cm5Mb2NhdGlvbigpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CiAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICBkZWZhdWx0OgotICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNhc2UgSW5saW5l
Q2FsbEZyYW1lOjpHZXR0ZXJDYWxsOgorICAgICAgICAgICAgY2FzZSBJbmxpbmVDYWxsRnJhbWU6
OlNldHRlckNhbGw6IHsKKyAgICAgICAgICAgICAgICBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1Yklu
Zm8gPQorICAgICAgICAgICAgICAgICAgICBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+Zmlu
ZFN0dWJJbmZvKENvZGVPcmlnaW4oY2FsbEJ5dGVjb2RlSW5kZXgpKTsKKyAgICAgICAgICAgICAg
ICBSRUxFQVNFX0FTU0VSVChzdHViSW5mbyk7CisKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKGlu
bGluZUNhbGxGcmFtZS0+a2luZCkgeworICAgICAgICAgICAgICAgIGNhc2UgSW5saW5lQ2FsbEZy
YW1lOjpHZXR0ZXJDYWxsOgorICAgICAgICAgICAgICAgICAgICBqdW1wVGFyZ2V0ID0gaml0LnZt
KCktPmdldENUSVN0dWIoYmFzZWxpbmVHZXR0ZXJSZXR1cm5UaHVua0dlbmVyYXRvcikuY29kZSgp
LmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgIGNhc2UgSW5saW5lQ2FsbEZyYW1lOjpTZXR0ZXJDYWxsOgorICAgICAgICAgICAg
ICAgICAgICBqdW1wVGFyZ2V0ID0gaml0LnZtKCktPmdldENUSVN0dWIoYmFzZWxpbmVTZXR0ZXJS
ZXR1cm5UaHVua0dlbmVyYXRvcikuY29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAg
ICAgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgIHRydWVSZXR1
cm5QQyA9IHN0dWJJbmZvLT5jYWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldCgKKyAgICAg
ICAgICAgICAgICAgICAgc3R1YkluZm8tPnBhdGNoLmRlbHRhQ2FsbFRvRG9uZSkuZXhlY3V0YWJs
ZUFkZHJlc3MoKTsKICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0gfQorCisg
ICAgICAgICAgICBpZiAodHJ1ZUNhbGxlci0+aW5saW5lQ2FsbEZyYW1lKSB7CisgICAgICAgICAg
ICAgICAgaml0LmFkZFB0cigKKyAgICAgICAgICAgICAgICAgICAgQXNzZW1ibHlIZWxwZXJzOjpU
cnVzdGVkSW1tMzIodHJ1ZUNhbGxlci0+aW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCAqIHNp
emVvZihFbmNvZGVkSlNWYWx1ZSkpLAorICAgICAgICAgICAgICAgICAgICBHUFJJbmZvOjpjYWxs
RnJhbWVSZWdpc3RlciwKKyAgICAgICAgICAgICAgICAgICAgR1BSSW5mbzo6cmVnVDMpOworICAg
ICAgICAgICAgICAgIGNhbGxlckZyYW1lR1BSID0gR1BSSW5mbzo6cmVnVDM7CiAgICAgICAgICAg
ICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIHRydWVSZXR1cm5QQyA9IHN0dWJJbmZvLT5j
YWxsUmV0dXJuTG9jYXRpb24ubGFiZWxBdE9mZnNldCgKLSAgICAgICAgICAgICAgICBzdHViSW5m
by0+cGF0Y2guZGVsdGFDYWxsVG9Eb25lKS5leGVjdXRhYmxlQWRkcmVzcygpOwotICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgIH0gfQotCi0gICAgICAgIEdQUlJlZyBjYWxsZXJGcmFtZUdQUjsK
LSAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+Y2FsbGVyLmlubGluZUNhbGxGcmFtZSkgewot
ICAgICAgICAgICAgaml0LmFkZFB0cihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihpbmxp
bmVDYWxsRnJhbWUtPmNhbGxlci5pbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICogc2l6ZW9m
KEVuY29kZWRKU1ZhbHVlKSksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBHUFJJbmZvOjpy
ZWdUMyk7Ci0gICAgICAgICAgICBjYWxsZXJGcmFtZUdQUiA9IEdQUkluZm86OnJlZ1QzOwotICAg
ICAgICB9IGVsc2UKLSAgICAgICAgICAgIGNhbGxlckZyYW1lR1BSID0gR1BSSW5mbzo6Y2FsbEZy
YW1lUmVnaXN0ZXI7Ci0gICAgICAgIAotICAgICAgICBqaXQuc3RvcmVQdHIoQXNzZW1ibHlIZWxw
ZXJzOjpUcnVzdGVkSW1tUHRyKGp1bXBUYXJnZXQpLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NG
b3JCeXRlT2Zmc2V0KGlubGluZUNhbGxGcmFtZS0+cmV0dXJuUENPZmZzZXQoKSkpOworCisgICAg
ICAgICAgICBqaXQuc3RvcmVQdHIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGp1bXBU
YXJnZXQpLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3JCeXRlT2Zmc2V0KGlubGluZUNhbGxG
cmFtZS0+cmV0dXJuUENPZmZzZXQoKSkpOworICAgICAgICB9CisKICAgICAgICAgaWYgKHRydWVS
ZXR1cm5QQykKICAgICAgICAgICAgIGppdC5zdG9yZVB0cihBc3NlbWJseUhlbHBlcnM6OlRydXN0
ZWRJbW1QdHIodHJ1ZVJldHVyblBDKSwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yKGlubGlu
ZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpbmxp
bmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCkpLm9mZnNldCgpKSk7CiAgICAgICAgICAgICAg
ICAgICAgICAgICAgCkBAIC0yMDIsMTMgKzIxOSwxMyBAQCB2b2lkIHJlaWZ5SW5saW5lZENhbGxG
cmFtZXMoQ0NhbGxIZWxwZXJzCiAgICAgICAgICAgICBqaXQuc3RvcmUzMihBc3NlbWJseUhlbHBl
cnM6OlRydXN0ZWRJbW0zMihpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCkpLCBBc3Nl
bWJseUhlbHBlcnM6OnBheWxvYWRGb3IoKFZpcnR1YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZyYW1l
LT5zdGFja09mZnNldCArIEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpKSk7CiAjaWYgVVNFKEpTVkFM
VUU2NCkKICAgICAgICAgaml0LnN0b3JlNjQoY2FsbGVyRnJhbWVHUFIsIEFzc2VtYmx5SGVscGVy
czo6YWRkcmVzc0ZvckJ5dGVPZmZzZXQoaW5saW5lQ2FsbEZyYW1lLT5jYWxsZXJGcmFtZU9mZnNl
dCgpKSk7Ci0gICAgICAgIHVpbnQzMl90IGxvY2F0aW9uQml0cyA9IENhbGxTaXRlSW5kZXgoY29k
ZU9yaWdpbi5ieXRlY29kZUluZGV4KS5iaXRzKCk7CisgICAgICAgIHVpbnQzMl90IGxvY2F0aW9u
Qml0cyA9IENhbGxTaXRlSW5kZXgoY29kZU9yaWdpbi0+Ynl0ZWNvZGVJbmRleCkuYml0cygpOwog
ICAgICAgICBqaXQuc3RvcmUzMihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihsb2NhdGlv
bkJpdHMpLCBBc3NlbWJseUhlbHBlcnM6OnRhZ0ZvcigoVmlydHVhbFJlZ2lzdGVyKShpbmxpbmVD
YWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgSlNTdGFjazo6QXJndW1lbnRDb3VudCkpKTsKICAgICAg
ICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUtPmlzQ2xvc3VyZUNhbGwpCiAgICAgICAgICAgICBqaXQu
c3RvcmU2NChBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoSlNW
YWx1ZShpbmxpbmVDYWxsRnJhbWUtPmNhbGxlZUNvbnN0YW50KCkpKSksIEFzc2VtYmx5SGVscGVy
czo6YWRkcmVzc0ZvcigoVmlydHVhbFJlZ2lzdGVyKShpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zm
c2V0ICsgSlNTdGFjazo6Q2FsbGVlKSkpOwogI2Vsc2UgLy8gVVNFKEpTVkFMVUU2NCkgLy8gc28g
dGhpcyBpcyB0aGUgMzItYml0IHBhcnQKICAgICAgICAgaml0LnN0b3JlUHRyKGNhbGxlckZyYW1l
R1BSLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3JCeXRlT2Zmc2V0KGlubGluZUNhbGxGcmFt
ZS0+Y2FsbGVyRnJhbWVPZmZzZXQoKSkpOwotICAgICAgICBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rp
b24gPSBiYXNlbGluZUNvZGVCbG9jay0+aW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKSArIGNvZGVPcmln
aW4uYnl0ZWNvZGVJbmRleDsKKyAgICAgICAgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uID0gYmFz
ZWxpbmVDb2RlQmxvY2stPmluc3RydWN0aW9ucygpLmJlZ2luKCkgKyBjb2RlT3JpZ2luLT5ieXRl
Y29kZUluZGV4OwogICAgICAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4
KGluc3RydWN0aW9uKS5iaXRzKCk7CiAgICAgICAgIGppdC5zdG9yZTMyKEFzc2VtYmx5SGVscGVy
czo6VHJ1c3RlZEltbTMyKGxvY2F0aW9uQml0cyksIEFzc2VtYmx5SGVscGVyczo6dGFnRm9yKChW
aXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBKU1N0YWNrOjpB
cmd1bWVudENvdW50KSkpOwogICAgICAgICBqaXQuc3RvcmUzMihBc3NlbWJseUhlbHBlcnM6OlRy
dXN0ZWRJbW0zMihKU1ZhbHVlOjpDZWxsVGFnKSwgQXNzZW1ibHlIZWxwZXJzOjp0YWdGb3IoKFZp
cnR1YWxSZWdpc3RlcikoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIEpTU3RhY2s6OkNh
bGxlZSkpKTsKQEAgLTIxNywxMyArMjM0LDE2IEBAIHZvaWQgcmVpZnlJbmxpbmVkQ2FsbEZyYW1l
cyhDQ2FsbEhlbHBlcnMKICNlbmRpZiAvLyBVU0UoSlNWQUxVRTY0KSAvLyBlbmRpbmcgdGhlICNl
bHNlIHBhcnQsIHNvIGRpcmVjdGx5IGFib3ZlIGlzIHRoZSAzMi1iaXQgcGFydAogICAgIH0KIAor
ICAgIC8vIERvbid0IG5lZWQgdG8gc2V0IHRoZSB0b3BsZXZlbCBjb2RlIG9yaWdpbiBpZiB3ZSBv
bmx5IGRpZCBpbmxpbmUgdGFpbCBjYWxscworICAgIGlmIChjb2RlT3JpZ2luKSB7CiAjaWYgVVNF
KEpTVkFMVUU2NCkKLSAgICB1aW50MzJfdCBsb2NhdGlvbkJpdHMgPSBDYWxsU2l0ZUluZGV4KGNv
ZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCkuYml0cygpOworICAgIHVpbnQzMl90IGxvY2F0aW9uQml0
cyA9IENhbGxTaXRlSW5kZXgoY29kZU9yaWdpbi0+Ynl0ZWNvZGVJbmRleCkuYml0cygpOwogI2Vs
c2UKLSAgICBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24gPSBqaXQuYmFzZWxpbmVDb2RlQmxvY2so
KS0+aW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKSArIGNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleDsKKyAg
ICBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24gPSBqaXQuYmFzZWxpbmVDb2RlQmxvY2soKS0+aW5z
dHJ1Y3Rpb25zKCkuYmVnaW4oKSArIGNvZGVPcmlnaW4tPmJ5dGVjb2RlSW5kZXg7CiAgICAgdWlu
dDMyX3QgbG9jYXRpb25CaXRzID0gQ2FsbFNpdGVJbmRleChpbnN0cnVjdGlvbikuYml0cygpOwog
I2VuZGlmCi0gICAgaml0LnN0b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1tMzIobG9j
YXRpb25CaXRzKSwgQXNzZW1ibHlIZWxwZXJzOjp0YWdGb3IoKFZpcnR1YWxSZWdpc3RlcikoSlNT
dGFjazo6QXJndW1lbnRDb3VudCkpKTsKKyAgICAgICAgaml0LnN0b3JlMzIoQXNzZW1ibHlIZWxw
ZXJzOjpUcnVzdGVkSW1tMzIobG9jYXRpb25CaXRzKSwgQXNzZW1ibHlIZWxwZXJzOjp0YWdGb3Io
KFZpcnR1YWxSZWdpc3RlcikoSlNTdGFjazo6QXJndW1lbnRDb3VudCkpKTsKKyAgICB9CiB9CiAK
IHN0YXRpYyB2b2lkIG9zcldyaXRlQmFycmllcihDQ2FsbEhlbHBlcnMmIGppdCwgR1BSUmVnIG93
bmVyLCBHUFJSZWcgc2NyYXRjaCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T1NSRXhpdFByZXBhcmF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR09TUkV4aXRQcmVwYXJhdGlvbi5jcHAJKHJldmlzaW9uIDE5MDE1MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NSRXhpdFByZXBhcmF0aW9uLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBAQCB2b2lkIHByZXBhcmVDb2RlT3JpZ2luRm9yT1NSRXhp
dChFeGVjU3RhCiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBEZWZlckdDIGRlZmVyR0Mo
dm0uaGVhcCk7CiAgICAgCi0gICAgZm9yICg7IGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lOyBj
b2RlT3JpZ2luID0gY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmNhbGxlcikgeworICAgIGZv
ciAoOyBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZTsgY29kZU9yaWdpbiA9IGNvZGVPcmlnaW4u
aW5saW5lQ2FsbEZyYW1lLT5kaXJlY3RDYWxsZXIpIHsKICAgICAgICAgQ29kZUJsb2NrKiBjb2Rl
QmxvY2sgPSBjb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+YmFzZWxpbmVDb2RlQmxvY2soKTsK
ICAgICAgICAgaWYgKGNvZGVCbG9jay0+aml0VHlwZSgpID09IEpTQzo6SklUQ29kZTo6QmFzZWxp
bmVKSVQpCiAgICAgICAgICAgICBjb250aW51ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMTkwMTUzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMw
Niw3ICsxMzA2LDcgQEAgZXh0ZXJuICJDIiB2b2lkIEpJVF9PUEVSQVRJT04gdHJpZ2dlclJlbwog
ICAgIEFTU0VSVChKSVRDb2RlOjppc09wdGltaXppbmdKSVQob3B0aW1pemVkQ29kZUJsb2NrLT5q
aXRUeXBlKCkpKTsKICAgICAKICAgICBib29sIGRpZFRyeVRvRW50ZXJJbnRvSW5saW5lZExvb3Bz
ID0gZmFsc2U7Ci0gICAgZm9yIChJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IGV4
aXQtPm1fY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWU7IGlubGluZUNhbGxGcmFtZTsgaW5saW5l
Q2FsbEZyYW1lID0gaW5saW5lQ2FsbEZyYW1lLT5jYWxsZXIuaW5saW5lQ2FsbEZyYW1lKSB7Cisg
ICAgZm9yIChJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IGV4aXQtPm1fY29kZU9y
aWdpbi5pbmxpbmVDYWxsRnJhbWU7IGlubGluZUNhbGxGcmFtZTsgaW5saW5lQ2FsbEZyYW1lID0g
aW5saW5lQ2FsbEZyYW1lLT5kaXJlY3RDYWxsZXIuaW5saW5lQ2FsbEZyYW1lKSB7CiAgICAgICAg
IGlmIChpbmxpbmVDYWxsRnJhbWUtPmV4ZWN1dGFibGUtPmRpZFRyeVRvRW50ZXJJbkxvb3AoKSkg
ewogICAgICAgICAgICAgZGlkVHJ5VG9FbnRlckludG9JbmxpbmVkTG9vcHMgPSB0cnVlOwogICAg
ICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWNp
c2VMb2NhbENsb2JiZXJpemUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1ByZWNpc2VMb2NhbENsb2JiZXJpemUuaAkocmV2aXNpb24gMTkwMTUzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVjaXNlTG9jYWxDbG9iYmVyaXplLmgJKHdvcmtp
bmcgY29weSkKQEAgLTExMSw3ICsxMTEsOSBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIEdldE15
QXJndW1lbnRCeVZhbDoKICAgICAgICAgY2FzZSBGb3J3YXJkVmFyYXJnczoKICAgICAgICAgY2Fz
ZSBDYWxsRm9yd2FyZFZhcmFyZ3M6Ci0gICAgICAgIGNhc2UgQ29uc3RydWN0Rm9yd2FyZFZhcmFy
Z3M6IHsKKyAgICAgICAgY2FzZSBDb25zdHJ1Y3RGb3J3YXJkVmFyYXJnczoKKyAgICAgICAgY2Fz
ZSBUYWlsQ2FsbEZvcndhcmRWYXJhcmdzOgorICAgICAgICBjYXNlIFRhaWxDYWxsRm9yd2FyZFZh
cmFyZ3NJbmxpbmVkQ2FsbGVyOiB7CiAgICAgICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGlu
ZUNhbGxGcmFtZSA9IG1fbm9kZS0+Y2hpbGQxKCktPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxs
RnJhbWU7CiAgICAgICAgICAgICBpZiAoIWlubGluZUNhbGxGcmFtZSkgewogICAgICAgICAgICAg
ICAgIC8vIFJlYWQgdGhlIG91dGVybW9zdCBhcmd1bWVudHMgYW5kIGFyZ3VtZW50IGNvdW50LgpA
QCAtMTM4LDcgKzE0MCw3IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgbV9yZWFkKFZpcnR1
YWxSZWdpc3RlcihpKSk7CiAgICAgICAgIAogICAgICAgICAgICAgLy8gUmVhZCBhbGwgb2YgdGhl
IGlubGluZSBhcmd1bWVudHMgYW5kIGNhbGwgZnJhbWUgaGVhZGVycyB0aGF0IHdlIGRpZG4ndCBh
bHJlYWR5IGNhcHR1cmUuCi0gICAgICAgICAgICBmb3IgKElubGluZUNhbGxGcmFtZSogaW5saW5l
Q2FsbEZyYW1lID0gbV9ub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lOyBpbmxp
bmVDYWxsRnJhbWU7IGlubGluZUNhbGxGcmFtZSA9IGlubGluZUNhbGxGcmFtZS0+Y2FsbGVyLmlu
bGluZUNhbGxGcmFtZSkgeworICAgICAgICAgICAgZm9yIChJbmxpbmVDYWxsRnJhbWUqIGlubGlu
ZUNhbGxGcmFtZSA9IG1fbm9kZS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZTsgaW5s
aW5lQ2FsbEZyYW1lOyBpbmxpbmVDYWxsRnJhbWUgPSBpbmxpbmVDYWxsRnJhbWUtPmdldENhbGxl
cklubGluZUZyYW1lU2tpcHBpbmdEZWFkRnJhbWVzKCkpIHsKICAgICAgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBpbmxpbmVDYWxsRnJhbWUtPmFyZ3VtZW50cy5zaXplKCk7IGktLSA+IDE7
KQogICAgICAgICAgICAgICAgICAgICBtX3JlYWQoVmlydHVhbFJlZ2lzdGVyKGlubGluZUNhbGxG
cmFtZS0+c3RhY2tPZmZzZXQgKyB2aXJ0dWFsUmVnaXN0ZXJGb3JBcmd1bWVudChpKS5vZmZzZXQo
KSkpOwogICAgICAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUtPmlzQ2xvc3VyZUNhbGwp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlv
blBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1By
ZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTkwMTUzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE5NCwxMSArMTk0LDE0IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2Ug
TXVsdGlHZXRCeU9mZnNldDoKICAgICAgICAgY2FzZSBHZXREaXJlY3RQbmFtZToKICAgICAgICAg
Y2FzZSBDYWxsOgorICAgICAgICBjYXNlIFRhaWxDYWxsSW5saW5lZENhbGxlcjoKICAgICAgICAg
Y2FzZSBDb25zdHJ1Y3Q6CiAgICAgICAgIGNhc2UgQ2FsbFZhcmFyZ3M6CisgICAgICAgIGNhc2Ug
VGFpbENhbGxWYXJhcmdzSW5saW5lZENhbGxlcjoKICAgICAgICAgY2FzZSBDb25zdHJ1Y3RWYXJh
cmdzOgogICAgICAgICBjYXNlIENhbGxGb3J3YXJkVmFyYXJnczoKICAgICAgICAgY2FzZSBDb25z
dHJ1Y3RGb3J3YXJkVmFyYXJnczoKKyAgICAgICAgY2FzZSBUYWlsQ2FsbEZvcndhcmRWYXJhcmdz
SW5saW5lZENhbGxlcjoKICAgICAgICAgY2FzZSBHZXRHbG9iYWxWYXI6CiAgICAgICAgIGNhc2Ug
R2V0R2xvYmFsTGV4aWNhbFZhcmlhYmxlOgogICAgICAgICBjYXNlIEdldENsb3N1cmVWYXI6CkBA
IC02MzQsNiArNjM3LDkgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBQdXRDbG9zdXJlVmFyOgog
ICAgICAgICBjYXNlIFB1dFRvQXJndW1lbnRzOgogICAgICAgICBjYXNlIFJldHVybjoKKyAgICAg
ICAgY2FzZSBUYWlsQ2FsbDoKKyAgICAgICAgY2FzZSBUYWlsQ2FsbFZhcmFyZ3M6CisgICAgICAg
IGNhc2UgVGFpbENhbGxGb3J3YXJkVmFyYXJnczoKICAgICAgICAgY2FzZSBUaHJvdzoKICAgICAg
ICAgY2FzZSBQdXRCeUlkOgogICAgICAgICBjYXNlIFB1dEJ5SWRGbHVzaDoKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCShyZXZpc2lvbiAxOTAx
NTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaAkod29y
a2luZyBjb3B5KQpAQCAtMjE2LDggKzIxNiwxMSBAQCBib29sIHNhZmVUb0V4ZWN1dGUoQWJzdHJh
Y3RTdGF0ZVR5cGUmIHN0CiAgICAgY2FzZSBDb21wYXJlRXE6CiAgICAgY2FzZSBDb21wYXJlU3Ry
aWN0RXE6CiAgICAgY2FzZSBDYWxsOgorICAgIGNhc2UgVGFpbENhbGxJbmxpbmVkQ2FsbGVyOgog
ICAgIGNhc2UgQ29uc3RydWN0OgogICAgIGNhc2UgQ2FsbFZhcmFyZ3M6CisgICAgY2FzZSBUYWls
Q2FsbFZhcmFyZ3NJbmxpbmVkQ2FsbGVyOgorICAgIGNhc2UgVGFpbENhbGxGb3J3YXJkVmFyYXJn
c0lubGluZWRDYWxsZXI6CiAgICAgY2FzZSBDb25zdHJ1Y3RWYXJhcmdzOgogICAgIGNhc2UgTG9h
ZFZhcmFyZ3M6CiAgICAgY2FzZSBDYWxsRm9yd2FyZFZhcmFyZ3M6CkBAIC0yNjIsNiArMjY1LDkg
QEAgYm9vbCBzYWZlVG9FeGVjdXRlKEFic3RyYWN0U3RhdGVUeXBlJiBzdAogICAgIGNhc2UgQnJh
bmNoOgogICAgIGNhc2UgU3dpdGNoOgogICAgIGNhc2UgUmV0dXJuOgorICAgIGNhc2UgVGFpbENh
bGw6CisgICAgY2FzZSBUYWlsQ2FsbFZhcmFyZ3M6CisgICAgY2FzZSBUYWlsQ2FsbEZvcndhcmRW
YXJhcmdzOgogICAgIGNhc2UgVGhyb3c6CiAgICAgY2FzZSBUaHJvd1JlZmVyZW5jZUVycm9yOgog
ICAgIGNhc2UgQ291bnRFeGVjdXRpb246CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHJldmlzaW9uIDE5MDE1MykK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKICNpZiBFTkFCTEUoREZHX0pJVCkKIAog
I2luY2x1ZGUgIkFycmF5UHJvdG90eXBlLmgiCisjaW5jbHVkZSAiQ2FsbEZyYW1lU2h1ZmZsZXIu
aCIKICNpbmNsdWRlICJERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oIgogI2luY2x1ZGUg
IkRGR0NhbGxBcnJheUFsbG9jYXRvclNsb3dQYXRoR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiREZH
T3BlcmF0aW9ucy5oIgpAQCAtNjMyLDEwICs2MzMsMjAgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
ZW1pdENhbGwoTm9kZSogbm9kZQogICAgIENhbGxMaW5rSW5mbzo6Q2FsbFR5cGUgY2FsbFR5cGU7
CiAgICAgYm9vbCBpc1ZhcmFyZ3MgPSBmYWxzZTsKICAgICBib29sIGlzRm9yd2FyZFZhcmFyZ3Mg
PSBmYWxzZTsKKyAgICBib29sIGlzVGFpbCA9IGZhbHNlOworICAgIGJvb2wgaXNFbXVsYXRlZFRh
aWwgPSBmYWxzZTsKICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKICAgICBjYXNlIENhbGw6CiAg
ICAgICAgIGNhbGxUeXBlID0gQ2FsbExpbmtJbmZvOjpDYWxsOwogICAgICAgICBicmVhazsKKyAg
ICBjYXNlIFRhaWxDYWxsOgorICAgICAgICBjYWxsVHlwZSA9IENhbGxMaW5rSW5mbzo6VGFpbENh
bGw7CisgICAgICAgIGlzVGFpbCA9IHRydWU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVGFp
bENhbGxJbmxpbmVkQ2FsbGVyOgorICAgICAgICBjYWxsVHlwZSA9IENhbGxMaW5rSW5mbzo6Q2Fs
bDsKKyAgICAgICAgaXNFbXVsYXRlZFRhaWwgPSB0cnVlOworICAgICAgICBicmVhazsKICAgICBj
YXNlIENvbnN0cnVjdDoKICAgICAgICAgY2FsbFR5cGUgPSBDYWxsTGlua0luZm86OkNvbnN0cnVj
dDsKICAgICAgICAgYnJlYWs7CkBAIC02NDMsNiArNjU0LDE2IEBAIHZvaWQgU3BlY3VsYXRpdmVK
SVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUKICAgICAgICAgY2FsbFR5cGUgPSBDYWxsTGlua0luZm86
OkNhbGxWYXJhcmdzOwogICAgICAgICBpc1ZhcmFyZ3MgPSB0cnVlOwogICAgICAgICBicmVhazsK
KyAgICBjYXNlIFRhaWxDYWxsVmFyYXJnczoKKyAgICAgICAgY2FsbFR5cGUgPSBDYWxsTGlua0lu
Zm86OlRhaWxDYWxsVmFyYXJnczsKKyAgICAgICAgaXNWYXJhcmdzID0gdHJ1ZTsKKyAgICAgICAg
aXNUYWlsID0gdHJ1ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBUYWlsQ2FsbFZhcmFyZ3NJ
bmxpbmVkQ2FsbGVyOgorICAgICAgICBjYWxsVHlwZSA9IENhbGxMaW5rSW5mbzo6Q2FsbFZhcmFy
Z3M7CisgICAgICAgIGlzVmFyYXJncyA9IHRydWU7CisgICAgICAgIGlzRW11bGF0ZWRUYWlsID0g
dHJ1ZTsKKyAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDb25zdHJ1Y3RWYXJhcmdzOgogICAgICAg
ICBjYWxsVHlwZSA9IENhbGxMaW5rSW5mbzo6Q29uc3RydWN0VmFyYXJnczsKICAgICAgICAgaXNW
YXJhcmdzID0gdHJ1ZTsKQEAgLTY1MSw2ICs2NzIsMTYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6
ZW1pdENhbGwoTm9kZSogbm9kZQogICAgICAgICBjYWxsVHlwZSA9IENhbGxMaW5rSW5mbzo6Q2Fs
bFZhcmFyZ3M7CiAgICAgICAgIGlzRm9yd2FyZFZhcmFyZ3MgPSB0cnVlOwogICAgICAgICBicmVh
azsKKyAgICBjYXNlIFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3M6CisgICAgICAgIGNhbGxUeXBlID0g
Q2FsbExpbmtJbmZvOjpUYWlsQ2FsbFZhcmFyZ3M7CisgICAgICAgIGlzVGFpbCA9IHRydWU7Cisg
ICAgICAgIGlzRm9yd2FyZFZhcmFyZ3MgPSB0cnVlOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3NJbmxpbmVkQ2FsbGVyOgorICAgICAgICBjYWxsVHlwZSA9
IENhbGxMaW5rSW5mbzo6Q2FsbFZhcmFyZ3M7CisgICAgICAgIGlzRW11bGF0ZWRUYWlsID0gdHJ1
ZTsKKyAgICAgICAgaXNGb3J3YXJkVmFyYXJncyA9IHRydWU7CisgICAgICAgIGJyZWFrOwogICAg
IGNhc2UgQ29uc3RydWN0Rm9yd2FyZFZhcmFyZ3M6CiAgICAgICAgIGNhbGxUeXBlID0gQ2FsbExp
bmtJbmZvOjpDb25zdHJ1Y3RWYXJhcmdzOwogICAgICAgICBpc0ZvcndhcmRWYXJhcmdzID0gdHJ1
ZTsKQEAgLTY2MSw2ICs2OTIsOSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2Rl
KiBub2RlCiAgICAgfQogCiAgICAgRWRnZSBjYWxsZWVFZGdlID0gbV9qaXQuZ3JhcGgoKS5jaGls
ZChub2RlLCAwKTsKKyAgICBHUFJSZWcgY2FsbGVlVGFnR1BSOworICAgIEdQUlJlZyBjYWxsZWVQ
YXlsb2FkR1BSOworICAgIENhbGxGcmFtZVNodWZmbGVEYXRhIHNodWZmbGVEYXRhOwogICAgIAog
ICAgIC8vIEdvdHRhIGxvYWQgdGhlIGFyZ3VtZW50cyBzb21laG93LiBWYXJhcmdzIGlzIHRyaWNr
aWVyLgogICAgIGlmIChpc1ZhcmFyZ3MgfHwgaXNGb3J3YXJkVmFyYXJncykgewpAQCAtNzU1LDI4
ICs3ODksNDkgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZQogICAg
ICAgICAvLyByZWNlaXZlciAobWV0aG9kIGNhbGwpLiBzdWJzZXF1ZW50IGNoaWxkcmVuIGFyZSB0
aGUgYXJndW1lbnRzLgogICAgICAgICBpbnQgbnVtUGFzc2VkQXJncyA9IG5vZGUtPm51bUNoaWxk
cmVuKCkgLSAxOwogCi0gICAgICAgIG1faml0LnN0b3JlMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW0zMihudW1QYXNzZWRBcmdzKSwgbV9qaXQuY2FsbGVlRnJhbWVQYXlsb2FkU2xvdChKU1N0
YWNrOjpBcmd1bWVudENvdW50KSk7CisgICAgICAgIGlmIChub2RlLT5vcCgpID09IFRhaWxDYWxs
KSB7CisgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBjYWxsZWUodGhpcywgY2FsbGVlRWRnZSk7
CisgICAgICAgICAgICBjYWxsZWVUYWdHUFIgPSBjYWxsZWUudGFnR1BSKCk7CisgICAgICAgICAg
ICBjYWxsZWVQYXlsb2FkR1BSID0gY2FsbGVlLnBheWxvYWRHUFIoKTsKKyAgICAgICAgICAgIHVz
ZShjYWxsZWVFZGdlKTsKKworICAgICAgICAgICAgc2h1ZmZsZURhdGEubnVtTG9jYWxzID0gbV9q
aXQuZ3JhcGgoKS5mcmFtZVJlZ2lzdGVyQ291bnQoKTsKKyAgICAgICAgICAgIHNodWZmbGVEYXRh
LmNhbGxlZSA9IFZhbHVlUmVjb3Zlcnk6OmluUGFpcihjYWxsZWVUYWdHUFIsIGNhbGxlZVBheWxv
YWRHUFIpOworICAgICAgICAgICAgc2h1ZmZsZURhdGEuYXJncy5yZXNpemUobnVtUGFzc2VkQXJn
cyk7CisKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtUGFzc2VkQXJnczsgKytp
KSB7CisgICAgICAgICAgICAgICAgRWRnZSBhcmdFZGdlID0gbV9qaXQuZ3JhcGgoKS52YXJBcmdD
aGlsZChub2RlLCBpICsgMSk7CisgICAgICAgICAgICAgICAgR2VuZXJhdGlvbkluZm8mIGluZm8g
PSBnZW5lcmF0aW9uSW5mbyhhcmdFZGdlLm5vZGUoKSk7CisgICAgICAgICAgICAgICAgdXNlKGFy
Z0VkZ2UpOworICAgICAgICAgICAgICAgIHNodWZmbGVEYXRhLmFyZ3NbaV0gPSBpbmZvLnJlY292
ZXJ5KGFyZ0VkZ2UtPnZpcnR1YWxSZWdpc3RlcigpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fSBlbHNlIHsKKyAgICAgICAgICAgIG1faml0LnN0b3JlMzIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0
ZWRJbW0zMihudW1QYXNzZWRBcmdzKSwgbV9qaXQuY2FsbGVlRnJhbWVQYXlsb2FkU2xvdChKU1N0
YWNrOjpBcmd1bWVudENvdW50KSk7CiAgICAgICAgIAotICAgICAgICBmb3IgKGludCBpID0gMDsg
aSA8IG51bVBhc3NlZEFyZ3M7IGkrKykgewotICAgICAgICAgICAgRWRnZSBhcmdFZGdlID0gbV9q
aXQuZ3JhcGgoKS5tX3ZhckFyZ0NoaWxkcmVuW25vZGUtPmZpcnN0Q2hpbGQoKSArIDEgKyBpXTsK
LSAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIGFyZyh0aGlzLCBhcmdFZGdlKTsKLSAgICAgICAg
ICAgIEdQUlJlZyBhcmdUYWdHUFIgPSBhcmcudGFnR1BSKCk7Ci0gICAgICAgICAgICBHUFJSZWcg
YXJnUGF5bG9hZEdQUiA9IGFyZy5wYXlsb2FkR1BSKCk7Ci0gICAgICAgICAgICB1c2UoYXJnRWRn
ZSk7CisgICAgICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bVBhc3NlZEFyZ3M7IGkrKykg
eworICAgICAgICAgICAgICAgIEVkZ2UgYXJnRWRnZSA9IG1faml0LmdyYXBoKCkubV92YXJBcmdD
aGlsZHJlbltub2RlLT5maXJzdENoaWxkKCkgKyAxICsgaV07CisgICAgICAgICAgICAgICAgSlNW
YWx1ZU9wZXJhbmQgYXJnKHRoaXMsIGFyZ0VkZ2UpOworICAgICAgICAgICAgICAgIEdQUlJlZyBh
cmdUYWdHUFIgPSBhcmcudGFnR1BSKCk7CisgICAgICAgICAgICAgICAgR1BSUmVnIGFyZ1BheWxv
YWRHUFIgPSBhcmcucGF5bG9hZEdQUigpOworICAgICAgICAgICAgICAgIHVzZShhcmdFZGdlKTsK
ICAgICAgICAgICAgIAotICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihhcmdUYWdHUFIsIG1faml0
LmNhbGxlZUFyZ3VtZW50VGFnU2xvdChpKSk7Ci0gICAgICAgICAgICBtX2ppdC5zdG9yZTMyKGFy
Z1BheWxvYWRHUFIsIG1faml0LmNhbGxlZUFyZ3VtZW50UGF5bG9hZFNsb3QoaSkpOworICAgICAg
ICAgICAgICAgIG1faml0LnN0b3JlMzIoYXJnVGFnR1BSLCBtX2ppdC5jYWxsZWVBcmd1bWVudFRh
Z1Nsb3QoaSkpOworICAgICAgICAgICAgICAgIG1faml0LnN0b3JlMzIoYXJnUGF5bG9hZEdQUiwg
bV9qaXQuY2FsbGVlQXJndW1lbnRQYXlsb2FkU2xvdChpKSk7CisgICAgICAgICAgICB9CiAgICAg
ICAgIH0KICAgICB9CiAKLSAgICBKU1ZhbHVlT3BlcmFuZCBjYWxsZWUodGhpcywgY2FsbGVlRWRn
ZSk7Ci0gICAgR1BSUmVnIGNhbGxlZVRhZ0dQUiA9IGNhbGxlZS50YWdHUFIoKTsKLSAgICBHUFJS
ZWcgY2FsbGVlUGF5bG9hZEdQUiA9IGNhbGxlZS5wYXlsb2FkR1BSKCk7Ci0gICAgdXNlKGNhbGxl
ZUVkZ2UpOwotICAgIG1faml0LnN0b3JlMzIoY2FsbGVlUGF5bG9hZEdQUiwgbV9qaXQuY2FsbGVl
RnJhbWVQYXlsb2FkU2xvdChKU1N0YWNrOjpDYWxsZWUpKTsKLSAgICBtX2ppdC5zdG9yZTMyKGNh
bGxlZVRhZ0dQUiwgbV9qaXQuY2FsbGVlRnJhbWVUYWdTbG90KEpTU3RhY2s6OkNhbGxlZSkpOwor
ICAgIGlmIChub2RlLT5vcCgpICE9IFRhaWxDYWxsKSB7CisgICAgICAgIEpTVmFsdWVPcGVyYW5k
IGNhbGxlZSh0aGlzLCBjYWxsZWVFZGdlKTsKKyAgICAgICAgY2FsbGVlVGFnR1BSID0gY2FsbGVl
LnRhZ0dQUigpOworICAgICAgICBjYWxsZWVQYXlsb2FkR1BSID0gY2FsbGVlLnBheWxvYWRHUFIo
KTsKKyAgICAgICAgdXNlKGNhbGxlZUVkZ2UpOworICAgICAgICBtX2ppdC5zdG9yZTMyKGNhbGxl
ZVBheWxvYWRHUFIsIG1faml0LmNhbGxlZUZyYW1lUGF5bG9hZFNsb3QoSlNTdGFjazo6Q2FsbGVl
KSk7CisgICAgICAgIG1faml0LnN0b3JlMzIoY2FsbGVlVGFnR1BSLCBtX2ppdC5jYWxsZWVGcmFt
ZVRhZ1Nsb3QoSlNTdGFjazo6Q2FsbGVlKSk7CiAKLSAgICBmbHVzaFJlZ2lzdGVycygpOworICAg
ICAgICBpZiAoIWlzVGFpbCkKKyAgICAgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CisgICAgfQog
CiAgICAgR1BSRmx1c2hlZENhbGxSZXN1bHQgcmVzdWx0UGF5bG9hZCh0aGlzKTsKICAgICBHUFJG
bHVzaGVkQ2FsbFJlc3VsdDIgcmVzdWx0VGFnKHRoaXMpOwpAQCAtNzg2LDQ4ICs4NDEsNzcgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZQogICAgIEpJVENvbXBpbGVy
OjpEYXRhTGFiZWxQdHIgdGFyZ2V0VG9DaGVjazsKICAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qg
c2xvd1BhdGg7CiAKLSAgICBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlID0gbV9qaXQucmVjb3JkQ2Fs
bFNpdGVBbmRHZW5lcmF0ZUV4Y2VwdGlvbkhhbmRsaW5nT1NSRXhpdElmTmVlZGVkKG5vZGUtPm9y
aWdpbi5zZW1hbnRpYywgbV9zdHJlYW0tPnNpemUoKSk7CisgICAgQ29kZU9yaWdpbiBzdGF0aWNP
cmlnaW4gPSBub2RlLT5vcmlnaW4uc2VtYW50aWM7CisgICAgQVNTRVJUKCFpc1RhaWwgfHwgIXN0
YXRpY09yaWdpbi5pbmxpbmVDYWxsRnJhbWUgfHwgIXN0YXRpY09yaWdpbi5pbmxpbmVDYWxsRnJh
bWUtPmdldENhbGxlclNraXBwaW5nRGVhZEZyYW1lcygpKTsKKyAgICBBU1NFUlQoIWlzRW11bGF0
ZWRUYWlsIHx8IChzdGF0aWNPcmlnaW4uaW5saW5lQ2FsbEZyYW1lICYmIHN0YXRpY09yaWdpbi5p
bmxpbmVDYWxsRnJhbWUtPmdldENhbGxlclNraXBwaW5nRGVhZEZyYW1lcygpKSk7CisgICAgQ29k
ZU9yaWdpbiBkeW5hbWljT3JpZ2luID0KKyAgICAgICAgaXNFbXVsYXRlZFRhaWwgPyAqc3RhdGlj
T3JpZ2luLmlubGluZUNhbGxGcmFtZS0+Z2V0Q2FsbGVyU2tpcHBpbmdEZWFkRnJhbWVzKCkgOiBz
dGF0aWNPcmlnaW47CisgICAgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZSA9IG1faml0LnJlY29yZENh
bGxTaXRlQW5kR2VuZXJhdGVFeGNlcHRpb25IYW5kbGluZ09TUkV4aXRJZk5lZWRlZChkeW5hbWlj
T3JpZ2luLCBtX3N0cmVhbS0+c2l6ZSgpKTsKICAgICBtX2ppdC5lbWl0U3RvcmVDYWxsU2l0ZUlu
ZGV4KGNhbGxTaXRlKTsKICAgICAKICAgICBDYWxsTGlua0luZm8qIGluZm8gPSBtX2ppdC5jb2Rl
QmxvY2soKS0+YWRkQ2FsbExpbmtJbmZvKCk7CiAKLSAgICBzbG93UGF0aC5hcHBlbmQobV9qaXQu
YnJhbmNoSWZOb3RDZWxsKGNhbGxlZS5qc1ZhbHVlUmVncygpKSk7CisgICAgc2xvd1BhdGguYXBw
ZW5kKG1faml0LmJyYW5jaElmTm90Q2VsbChKU1ZhbHVlUmVncyhjYWxsZWVUYWdHUFIsIGNhbGxl
ZVBheWxvYWRHUFIpKSk7CiAgICAgc2xvd1BhdGguYXBwZW5kKG1faml0LmJyYW5jaFB0cldpdGhQ
YXRjaChNYWNyb0Fzc2VtYmxlcjo6Tm90RXF1YWwsIGNhbGxlZVBheWxvYWRHUFIsIHRhcmdldFRv
Q2hlY2spKTsKIAotICAgIEpJVENvbXBpbGVyOjpDYWxsIGZhc3RDYWxsID0gbV9qaXQubmVhckNh
bGwoKTsKKyAgICBpZiAoaXNUYWlsKSB7CisgICAgICAgIGlmIChub2RlLT5vcCgpID09IFRhaWxD
YWxsKSB7CisgICAgICAgICAgICBpbmZvLT5zZXRGcmFtZVNodWZmbGVEYXRhKHNodWZmbGVEYXRh
KTsKKyAgICAgICAgICAgIENhbGxGcmFtZVNodWZmbGVyKG1faml0LCBzaHVmZmxlRGF0YSkucHJl
cGFyZUZvclRhaWxDYWxsKCk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX2ppdC5l
bWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CisgICAgICAgICAgICBtX2ppdC5wcmVwYXJlRm9yVGFp
bENhbGxTbG93KCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBm
YXN0Q2FsbCA9IGlzVGFpbCA/IG1faml0Lm5lYXJUYWlsQ2FsbCgpIDogbV9qaXQubmVhckNhbGwo
KTsKIAogICAgIEpJVENvbXBpbGVyOjpKdW1wIGRvbmUgPSBtX2ppdC5qdW1wKCk7CiAKICAgICBz
bG93UGF0aC5saW5rKCZtX2ppdCk7CiAKLSAgICAvLyBDYWxsZWUgcGF5bG9hZCBuZWVkcyB0byBi
ZSBpbiByZWdUMCwgdGFnIGluIHJlZ1QxCi0gICAgaWYgKGNhbGxlZVRhZ0dQUiA9PSBHUFJJbmZv
OjpyZWdUMCkgewotICAgICAgICBpZiAoY2FsbGVlUGF5bG9hZEdQUiA9PSBHUFJJbmZvOjpyZWdU
MSkKLSAgICAgICAgICAgIG1faml0LnN3YXAoR1BSSW5mbzo6cmVnVDEsIEdQUkluZm86OnJlZ1Qw
KTsKLSAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICBtX2ppdC5tb3ZlKGNhbGxlZVRhZ0dQUiwg
R1BSSW5mbzo6cmVnVDEpOworICAgIGlmIChub2RlLT5vcCgpID09IFRhaWxDYWxsKSB7CisgICAg
ICAgIENhbGxGcmFtZVNodWZmbGVyIGNhbGxGcmFtZVNodWZmbGVyKG1faml0LCBzaHVmZmxlRGF0
YSk7CisgICAgICAgIGNhbGxGcmFtZVNodWZmbGVyLnNldENhbGxlZUpTVmFsdWVSZWdzKEpTVmFs
dWVSZWdzKAorICAgICAgICAgICAgR1BSSW5mbzo6cmVnVDEsIEdQUkluZm86OnJlZ1QwKSk7Cisg
ICAgICAgIGNhbGxGcmFtZVNodWZmbGVyLnByZXBhcmVGb3JTbG93UGF0aCgpOworICAgIH0gZWxz
ZSB7CisgICAgICAgIC8vIENhbGxlZSBwYXlsb2FkIG5lZWRzIHRvIGJlIGluIHJlZ1QwLCB0YWcg
aW4gcmVnVDEKKyAgICAgICAgaWYgKGNhbGxlZVRhZ0dQUiA9PSBHUFJJbmZvOjpyZWdUMCkgewor
ICAgICAgICAgICAgaWYgKGNhbGxlZVBheWxvYWRHUFIgPT0gR1BSSW5mbzo6cmVnVDEpCisgICAg
ICAgICAgICAgICAgbV9qaXQuc3dhcChHUFJJbmZvOjpyZWdUMSwgR1BSSW5mbzo6cmVnVDApOwor
ICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgbV9qaXQubW92ZShjYWxsZWVUYWdH
UFIsIEdQUkluZm86OnJlZ1QxKTsKKyAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKGNhbGxlZVBh
eWxvYWRHUFIsIEdQUkluZm86OnJlZ1QwKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNl
IHsKICAgICAgICAgICAgIG1faml0Lm1vdmUoY2FsbGVlUGF5bG9hZEdQUiwgR1BSSW5mbzo6cmVn
VDApOworICAgICAgICAgICAgbV9qaXQubW92ZShjYWxsZWVUYWdHUFIsIEdQUkluZm86OnJlZ1Qx
KTsKICAgICAgICAgfQotICAgIH0gZWxzZSB7Ci0gICAgICAgIG1faml0Lm1vdmUoY2FsbGVlUGF5
bG9hZEdQUiwgR1BSSW5mbzo6cmVnVDApOwotICAgICAgICBtX2ppdC5tb3ZlKGNhbGxlZVRhZ0dQ
UiwgR1BSSW5mbzo6cmVnVDEpOworCisgICAgICAgIGlmIChpc1RhaWwpCisgICAgICAgICAgICBt
X2ppdC5lbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7CiAgICAgfQorCiAgICAgbV9qaXQubW92ZShN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihpbmZvKSwgR1BSSW5mbzo6cmVnVDIpOwogICAg
IEpJVENvbXBpbGVyOjpDYWxsIHNsb3dDYWxsID0gbV9qaXQubmVhckNhbGwoKTsKIAogICAgIGRv
bmUubGluaygmbV9qaXQpOwogCi0gICAgbV9qaXQuc2V0dXBSZXN1bHRzKHJlc3VsdFBheWxvYWRH
UFIsIHJlc3VsdFRhZ0dQUik7CisgICAgaWYgKGlzVGFpbCkKKyAgICAgICAgbV9qaXQuYWJvcnRX
aXRoUmVhc29uKEpJVERpZFJldHVybkZyb21UYWlsQ2FsbCk7CisgICAgZWxzZSB7CisgICAgICAg
IG1faml0LnNldHVwUmVzdWx0cyhyZXN1bHRQYXlsb2FkR1BSLCByZXN1bHRUYWdHUFIpOwogCi0g
ICAganNWYWx1ZVJlc3VsdChyZXN1bHRUYWdHUFIsIHJlc3VsdFBheWxvYWRHUFIsIG5vZGUsIERh
dGFGb3JtYXRKUywgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKKyAgICAgICAganNWYWx1
ZVJlc3VsdChyZXN1bHRUYWdHUFIsIHJlc3VsdFBheWxvYWRHUFIsIG5vZGUsIERhdGFGb3JtYXRK
UywgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKKyAgICAgICAgLy8gQWZ0ZXIgdGhlIGNh
bGxzIGFyZSBkb25lLCB3ZSBuZWVkIHRvIHJlZXN0YWJsaXNoIG91ciBzdGFjaworICAgICAgICAv
LyBwb2ludGVyLiBXZSByZWx5IG9uIHRoaXMgZm9yIHZhcmFyZ3MgY2FsbHMsIGNhbGxzIHdpdGgg
YXJpdHkKKyAgICAgICAgLy8gbWlzbWF0Y2ggKHRoZSBjYWxsZnJhbWUgaXMgc2xpZGVkKSBhbmQg
dGFpbCBjYWxscy4KKyAgICAgICAgbV9qaXQuYWRkUHRyKFRydXN0ZWRJbW0zMihtX2ppdC5ncmFw
aCgpLnN0YWNrUG9pbnRlck9mZnNldCgpICogc2l6ZW9mKFJlZ2lzdGVyKSksIEdQUkluZm86OmNh
bGxGcmFtZVJlZ2lzdGVyLCBKSVRDb21waWxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAg
IH0KIAogICAgIGluZm8tPnNldFVwQ2FsbChjYWxsVHlwZSwgbm9kZS0+b3JpZ2luLnNlbWFudGlj
LCBjYWxsZWVQYXlsb2FkR1BSKTsKICAgICBtX2ppdC5hZGRKU0NhbGwoZmFzdENhbGwsIHNsb3dD
YWxsLCB0YXJnZXRUb0NoZWNrLCBpbmZvKTsKLSAgICAKLSAgICAvLyBBZnRlciB0aGUgY2FsbHMg
YXJlIGRvbmUsIHdlIG5lZWQgdG8gcmVlc3RhYmxpc2ggb3VyIHN0YWNrCi0gICAgLy8gcG9pbnRl
ci4gV2UgcmVseSBvbiB0aGlzIGZvciB2YXJhcmdzIGNhbGxzLCBjYWxscyB3aXRoIGFyaXR5Ci0g
ICAgLy8gbWlzbWF0Y2ggKHRoZSBjYWxsZnJhbWUgaXMgc2xpZGVkKSBhbmQgdGFpbCBjYWxscy4K
LSAgICBtX2ppdC5hZGRQdHIoVHJ1c3RlZEltbTMyKG1faml0LmdyYXBoKCkuc3RhY2tQb2ludGVy
T2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIs
IEpJVENvbXBpbGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiB9CiAKIHRlbXBsYXRlPGJvb2wg
c3RyaWN0PgpAQCAtNDI1MywxMCArNDMzNywxNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlKE5vZGUqIG5vZGUpCiAgICAgICAgIGJyZWFrOwogCiAgICAgY2FzZSBDYWxsOgorICAgIGNh
c2UgVGFpbENhbGw6CisgICAgY2FzZSBUYWlsQ2FsbElubGluZWRDYWxsZXI6CiAgICAgY2FzZSBD
b25zdHJ1Y3Q6CiAgICAgY2FzZSBDYWxsVmFyYXJnczoKLSAgICBjYXNlIENhbGxGb3J3YXJkVmFy
YXJnczoKKyAgICBjYXNlIFRhaWxDYWxsVmFyYXJnczoKKyAgICBjYXNlIFRhaWxDYWxsVmFyYXJn
c0lubGluZWRDYWxsZXI6CiAgICAgY2FzZSBDb25zdHJ1Y3RWYXJhcmdzOgorICAgIGNhc2UgQ2Fs
bEZvcndhcmRWYXJhcmdzOgorICAgIGNhc2UgVGFpbENhbGxGb3J3YXJkVmFyYXJnczoKKyAgICBj
YXNlIFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3NJbmxpbmVkQ2FsbGVyOgogICAgIGNhc2UgQ29uc3Ry
dWN0Rm9yd2FyZFZhcmFyZ3M6CiAgICAgICAgIGVtaXRDYWxsKG5vZGUpOwogICAgICAgICBicmVh
azsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVDY0LmNwcAkocmV2aXNpb24gMTkwMTUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjksNiArMjksNyBA
QAogI2lmIEVOQUJMRShERkdfSklUKQogCiAjaW5jbHVkZSAiQXJyYXlQcm90b3R5cGUuaCIKKyNp
bmNsdWRlICJDYWxsRnJhbWVTaHVmZmxlci5oIgogI2luY2x1ZGUgIkRGR0Fic3RyYWN0SW50ZXJw
cmV0ZXJJbmxpbmVzLmgiCiAjaW5jbHVkZSAiREZHQ2FsbEFycmF5QWxsb2NhdG9yU2xvd1BhdGhH
ZW5lcmF0b3IuaCIKICNpbmNsdWRlICJERkdPcGVyYXRpb25zLmgiCkBAIC02MTMsMTAgKzYxNCwy
MCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlCiAgICAgQ2FsbExp
bmtJbmZvOjpDYWxsVHlwZSBjYWxsVHlwZTsKICAgICBib29sIGlzVmFyYXJncyA9IGZhbHNlOwog
ICAgIGJvb2wgaXNGb3J3YXJkVmFyYXJncyA9IGZhbHNlOworICAgIGJvb2wgaXNUYWlsID0gZmFs
c2U7CisgICAgYm9vbCBpc0VtdWxhdGVkVGFpbCA9IGZhbHNlOwogICAgIHN3aXRjaCAobm9kZS0+
b3AoKSkgewogICAgIGNhc2UgQ2FsbDoKICAgICAgICAgY2FsbFR5cGUgPSBDYWxsTGlua0luZm86
OkNhbGw7CiAgICAgICAgIGJyZWFrOworICAgIGNhc2UgVGFpbENhbGw6CisgICAgICAgIGNhbGxU
eXBlID0gQ2FsbExpbmtJbmZvOjpUYWlsQ2FsbDsKKyAgICAgICAgaXNUYWlsID0gdHJ1ZTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBUYWlsQ2FsbElubGluZWRDYWxsZXI6CisgICAgICAgIGNh
bGxUeXBlID0gQ2FsbExpbmtJbmZvOjpDYWxsOworICAgICAgICBpc0VtdWxhdGVkVGFpbCA9IHRy
dWU7CisgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ29uc3RydWN0OgogICAgICAgICBjYWxsVHlw
ZSA9IENhbGxMaW5rSW5mbzo6Q29uc3RydWN0OwogICAgICAgICBicmVhazsKQEAgLTYyNCw2ICs2
MzUsMTYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZQogICAgICAg
ICBjYWxsVHlwZSA9IENhbGxMaW5rSW5mbzo6Q2FsbFZhcmFyZ3M7CiAgICAgICAgIGlzVmFyYXJn
cyA9IHRydWU7CiAgICAgICAgIGJyZWFrOworICAgIGNhc2UgVGFpbENhbGxWYXJhcmdzOgorICAg
ICAgICBjYWxsVHlwZSA9IENhbGxMaW5rSW5mbzo6VGFpbENhbGxWYXJhcmdzOworICAgICAgICBp
c1ZhcmFyZ3MgPSB0cnVlOworICAgICAgICBpc1RhaWwgPSB0cnVlOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFRhaWxDYWxsVmFyYXJnc0lubGluZWRDYWxsZXI6CisgICAgICAgIGNhbGxUeXBl
ID0gQ2FsbExpbmtJbmZvOjpDYWxsVmFyYXJnczsKKyAgICAgICAgaXNWYXJhcmdzID0gdHJ1ZTsK
KyAgICAgICAgaXNFbXVsYXRlZFRhaWwgPSB0cnVlOworICAgICAgICBicmVhazsKICAgICBjYXNl
IENvbnN0cnVjdFZhcmFyZ3M6CiAgICAgICAgIGNhbGxUeXBlID0gQ2FsbExpbmtJbmZvOjpDb25z
dHJ1Y3RWYXJhcmdzOwogICAgICAgICBpc1ZhcmFyZ3MgPSB0cnVlOwpAQCAtNjM2LDEyICs2NTcs
MjMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwoTm9kZSogbm9kZQogICAgICAgICBj
YWxsVHlwZSA9IENhbGxMaW5rSW5mbzo6Q29uc3RydWN0VmFyYXJnczsKICAgICAgICAgaXNGb3J3
YXJkVmFyYXJncyA9IHRydWU7CiAgICAgICAgIGJyZWFrOworICAgIGNhc2UgVGFpbENhbGxGb3J3
YXJkVmFyYXJnczoKKyAgICAgICAgY2FsbFR5cGUgPSBDYWxsTGlua0luZm86OlRhaWxDYWxsVmFy
YXJnczsKKyAgICAgICAgaXNUYWlsID0gdHJ1ZTsKKyAgICAgICAgaXNGb3J3YXJkVmFyYXJncyA9
IHRydWU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVGFpbENhbGxGb3J3YXJkVmFyYXJnc0lu
bGluZWRDYWxsZXI6CisgICAgICAgIGNhbGxUeXBlID0gQ2FsbExpbmtJbmZvOjpDYWxsVmFyYXJn
czsKKyAgICAgICAgaXNFbXVsYXRlZFRhaWwgPSB0cnVlOworICAgICAgICBpc0ZvcndhcmRWYXJh
cmdzID0gdHJ1ZTsKKyAgICAgICAgYnJlYWs7CiAgICAgZGVmYXVsdDoKICAgICAgICAgREZHX0NS
QVNIKG1faml0LmdyYXBoKCksIG5vZGUsICJiYWQgbm9kZSB0eXBlIik7CiAgICAgICAgIGJyZWFr
OwogICAgIH0KIAotICAgIEVkZ2UgY2FsbGVlRWRnZSA9IG1faml0LmdyYXBoKCkuY2hpbGQobm9k
ZSwgMCk7CisgICAgR1BSUmVnIGNhbGxlZUdQUjsKKyAgICBDYWxsRnJhbWVTaHVmZmxlRGF0YSBz
aHVmZmxlRGF0YTsKICAgICAKICAgICAvLyBHb3R0YSBsb2FkIHRoZSBhcmd1bWVudHMgc29tZWhv
dy4gVmFyYXJncyBpcyB0cmlja2llci4KICAgICBpZiAoaXNWYXJhcmdzIHx8IGlzRm9yd2FyZFZh
cmFyZ3MpIHsKQEAgLTczMiw2MCArNzY0LDExMiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0
Q2FsbChOb2RlKiBub2RlCiAgICAgICAgIGludCBudW1QYXNzZWRBcmdzID0gbm9kZS0+bnVtQ2hp
bGRyZW4oKSAtIDE7CiAKICAgICAgICAgbV9qaXQuc3RvcmUzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbTMyKG51bVBhc3NlZEFyZ3MpLCBKSVRDb21waWxlcjo6Y2FsbGVlRnJhbWVQYXlsb2Fk
U2xvdChKU1N0YWNrOjpBcmd1bWVudENvdW50KSk7Ci0gICAgCi0gICAgICAgIGZvciAoaW50IGkg
PSAwOyBpIDwgbnVtUGFzc2VkQXJnczsgaSsrKSB7Ci0gICAgICAgICAgICBFZGdlIGFyZ0VkZ2Ug
PSBtX2ppdC5ncmFwaCgpLm1fdmFyQXJnQ2hpbGRyZW5bbm9kZS0+Zmlyc3RDaGlsZCgpICsgMSAr
IGldOwotICAgICAgICAgICAgSlNWYWx1ZU9wZXJhbmQgYXJnKHRoaXMsIGFyZ0VkZ2UpOwotICAg
ICAgICAgICAgR1BSUmVnIGFyZ0dQUiA9IGFyZy5ncHIoKTsKLSAgICAgICAgICAgIHVzZShhcmdF
ZGdlKTsKLSAgICAgICAgCi0gICAgICAgICAgICBtX2ppdC5zdG9yZTY0KGFyZ0dQUiwgSklUQ29t
cGlsZXI6OmNhbGxlZUFyZ3VtZW50U2xvdChpKSk7CisKKyAgICAgICAgaWYgKG5vZGUtPm9wKCkg
PT0gVGFpbENhbGwpIHsKKyAgICAgICAgICAgIEVkZ2UgY2FsbGVlRWRnZSA9IG1faml0LmdyYXBo
KCkuY2hpbGQobm9kZSwgMCk7CisgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBjYWxsZWUodGhp
cywgY2FsbGVlRWRnZSk7CisgICAgICAgICAgICBjYWxsZWVHUFIgPSBjYWxsZWUuZ3ByKCk7Cisg
ICAgICAgICAgICBjYWxsZWUudXNlKCk7CisKKyAgICAgICAgICAgIHNodWZmbGVEYXRhLm51bUxv
Y2FscyA9IG1faml0LmdyYXBoKCkuZnJhbWVSZWdpc3RlckNvdW50KCk7CisgICAgICAgICAgICBz
aHVmZmxlRGF0YS5jYWxsZWUgPSBWYWx1ZVJlY292ZXJ5OjppbkdQUihjYWxsZWVHUFIsIERhdGFG
b3JtYXRKUyk7CisgICAgICAgICAgICBzaHVmZmxlRGF0YS5hcmdzLnJlc2l6ZShudW1QYXNzZWRB
cmdzKTsKKworICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1QYXNzZWRBcmdzOyAr
K2kpIHsKKyAgICAgICAgICAgICAgICBFZGdlIGFyZ0VkZ2UgPSBtX2ppdC5ncmFwaCgpLnZhckFy
Z0NoaWxkKG5vZGUsIGkgKyAxKTsKKyAgICAgICAgICAgICAgICBHZW5lcmF0aW9uSW5mbyYgaW5m
byA9IGdlbmVyYXRpb25JbmZvKGFyZ0VkZ2Uubm9kZSgpKTsKKyAgICAgICAgICAgICAgICB1c2Uo
YXJnRWRnZSk7CisgICAgICAgICAgICAgICAgc2h1ZmZsZURhdGEuYXJnc1tpXSA9IGluZm8ucmVj
b3ZlcnkoYXJnRWRnZS0+dmlydHVhbFJlZ2lzdGVyKCkpOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBzaHVmZmxlRGF0YS5zZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMobV9qaXQuY29kZUJs
b2NrKCkpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihNYWNy
b0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKG51bVBhc3NlZEFyZ3MpLCBKSVRDb21waWxlcjo6Y2Fs
bGVlRnJhbWVQYXlsb2FkU2xvdChKU1N0YWNrOjpBcmd1bWVudENvdW50KSk7CisKKyAgICAgICAg
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtUGFzc2VkQXJnczsgaSsrKSB7CisgICAgICAgICAg
ICAgICAgRWRnZSBhcmdFZGdlID0gbV9qaXQuZ3JhcGgoKS5tX3ZhckFyZ0NoaWxkcmVuW25vZGUt
PmZpcnN0Q2hpbGQoKSArIDEgKyBpXTsKKyAgICAgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBh
cmcodGhpcywgYXJnRWRnZSk7CisgICAgICAgICAgICAgICAgR1BSUmVnIGFyZ0dQUiA9IGFyZy5n
cHIoKTsKKyAgICAgICAgICAgICAgICB1c2UoYXJnRWRnZSk7CisgICAgICAgICAgICAgICAgCisg
ICAgICAgICAgICAgICAgbV9qaXQuc3RvcmU2NChhcmdHUFIsIEpJVENvbXBpbGVyOjpjYWxsZWVB
cmd1bWVudFNsb3QoaSkpOworICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQogCi0gICAg
SlNWYWx1ZU9wZXJhbmQgY2FsbGVlKHRoaXMsIGNhbGxlZUVkZ2UpOwotICAgIEdQUlJlZyBjYWxs
ZWVHUFIgPSBjYWxsZWUuZ3ByKCk7Ci0gICAgY2FsbGVlLnVzZSgpOwotICAgIG1faml0LnN0b3Jl
NjQoY2FsbGVlR1BSLCBKSVRDb21waWxlcjo6Y2FsbGVlRnJhbWVTbG90KEpTU3RhY2s6OkNhbGxl
ZSkpOwotICAgIAotICAgIGZsdXNoUmVnaXN0ZXJzKCk7CisgICAgaWYgKG5vZGUtPm9wKCkgIT0g
VGFpbENhbGwpIHsKKyAgICAgICAgRWRnZSBjYWxsZWVFZGdlID0gbV9qaXQuZ3JhcGgoKS5jaGls
ZChub2RlLCAwKTsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgY2FsbGVlKHRoaXMsIGNhbGxlZUVk
Z2UpOworICAgICAgICBjYWxsZWVHUFIgPSBjYWxsZWUuZ3ByKCk7CisgICAgICAgIGNhbGxlZS51
c2UoKTsKKyAgICAgICAgbV9qaXQuc3RvcmU2NChjYWxsZWVHUFIsIEpJVENvbXBpbGVyOjpjYWxs
ZWVGcmFtZVNsb3QoSlNTdGFjazo6Q2FsbGVlKSk7CiAKLSAgICBHUFJGbHVzaGVkQ2FsbFJlc3Vs
dCByZXN1bHQodGhpcyk7Ci0gICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAg
ICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKKyAgICB9CiAKLSAgICBKSVRDb21waWxlcjo6RGF0YUxh
YmVsUHRyIHRhcmdldFRvQ2hlY2s7Ci0gICAgSklUQ29tcGlsZXI6Okp1bXAgc2xvd1BhdGg7Cisg
ICAgQ29kZU9yaWdpbiBzdGF0aWNPcmlnaW4gPSBub2RlLT5vcmlnaW4uc2VtYW50aWM7CisgICAg
QVNTRVJUKCFpc1RhaWwgfHwgIXN0YXRpY09yaWdpbi5pbmxpbmVDYWxsRnJhbWUgfHwgIXN0YXRp
Y09yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmdldENhbGxlclNraXBwaW5nRGVhZEZyYW1lcygpKTsK
KyAgICBBU1NFUlQoIWlzRW11bGF0ZWRUYWlsIHx8IChzdGF0aWNPcmlnaW4uaW5saW5lQ2FsbEZy
YW1lICYmIHN0YXRpY09yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmdldENhbGxlclNraXBwaW5nRGVh
ZEZyYW1lcygpKSk7CisgICAgQ29kZU9yaWdpbiBkeW5hbWljT3JpZ2luID0KKyAgICBpc0VtdWxh
dGVkVGFpbCA/ICpzdGF0aWNPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5nZXRDYWxsZXJTa2lwcGlu
Z0RlYWRGcmFtZXMoKSA6IHN0YXRpY09yaWdpbjsKIAotICAgIENhbGxTaXRlSW5kZXggY2FsbFNp
dGUgPSBtX2ppdC5yZWNvcmRDYWxsU2l0ZUFuZEdlbmVyYXRlRXhjZXB0aW9uSGFuZGxpbmdPU1JF
eGl0SWZOZWVkZWQobm9kZS0+b3JpZ2luLnNlbWFudGljLCBtX3N0cmVhbS0+c2l6ZSgpKTsKKyAg
ICBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlID0gbV9qaXQucmVjb3JkQ2FsbFNpdGVBbmRHZW5lcmF0
ZUV4Y2VwdGlvbkhhbmRsaW5nT1NSRXhpdElmTmVlZGVkKGR5bmFtaWNPcmlnaW4sIG1fc3RyZWFt
LT5zaXplKCkpOwogICAgIG1faml0LmVtaXRTdG9yZUNhbGxTaXRlSW5kZXgoY2FsbFNpdGUpOwog
ICAgIAogICAgIENhbGxMaW5rSW5mbyogY2FsbExpbmtJbmZvID0gbV9qaXQuY29kZUJsb2NrKCkt
PmFkZENhbGxMaW5rSW5mbygpOwotICAgIAotICAgIHNsb3dQYXRoID0gbV9qaXQuYnJhbmNoUHRy
V2l0aFBhdGNoKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgY2FsbGVlR1BSLCB0YXJnZXRUb0No
ZWNrLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cigwKSk7CiAKLSAgICBKSVRDb21waWxl
cjo6Q2FsbCBmYXN0Q2FsbCA9IG1faml0Lm5lYXJDYWxsKCk7CisgICAgSklUQ29tcGlsZXI6OkRh
dGFMYWJlbFB0ciB0YXJnZXRUb0NoZWNrOworICAgIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dQYXRo
ID0gbV9qaXQuYnJhbmNoUHRyV2l0aFBhdGNoKE1hY3JvQXNzZW1ibGVyOjpOb3RFcXVhbCwgY2Fs
bGVlR1BSLCB0YXJnZXRUb0NoZWNrLCBNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cigwKSk7
CisKKyAgICBpZiAoaXNUYWlsKSB7CisgICAgICAgIGlmIChub2RlLT5vcCgpID09IFRhaWxDYWxs
KSB7CisgICAgICAgICAgICBjYWxsTGlua0luZm8tPnNldEZyYW1lU2h1ZmZsZURhdGEoc2h1ZmZs
ZURhdGEpOworICAgICAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIobV9qaXQsIHNodWZmbGVEYXRh
KS5wcmVwYXJlRm9yVGFpbENhbGwoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1f
aml0LmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsKKyAgICAgICAgICAgIG1faml0LnByZXBhcmVG
b3JUYWlsQ2FsbFNsb3coKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIEpJVENvbXBpbGVyOjpD
YWxsIGZhc3RDYWxsID0gaXNUYWlsID8gbV9qaXQubmVhclRhaWxDYWxsKCkgOiBtX2ppdC5uZWFy
Q2FsbCgpOwogCiAgICAgSklUQ29tcGlsZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKLSAg
ICAKKwogICAgIHNsb3dQYXRoLmxpbmsoJm1faml0KTsKLSAgICAKLSAgICBtX2ppdC5tb3ZlKGNh
bGxlZUdQUiwgR1BSSW5mbzo6cmVnVDApOyAvLyBDYWxsZWUgbmVlZHMgdG8gYmUgaW4gcmVnVDAK
KworICAgIGlmIChub2RlLT5vcCgpID09IFRhaWxDYWxsKSB7CisgICAgICAgIENhbGxGcmFtZVNo
dWZmbGVyIGNhbGxGcmFtZVNodWZmbGVyKG1faml0LCBzaHVmZmxlRGF0YSk7CisgICAgICAgIGNh
bGxGcmFtZVNodWZmbGVyLnNldENhbGxlZUpTVmFsdWVSZWdzKEpTVmFsdWVSZWdzKEdQUkluZm86
OnJlZ1QwKSk7CisgICAgICAgIGNhbGxGcmFtZVNodWZmbGVyLnByZXBhcmVGb3JTbG93UGF0aCgp
OworICAgIH0gZWxzZSB7CisgICAgICAgIG1faml0Lm1vdmUoY2FsbGVlR1BSLCBHUFJJbmZvOjpy
ZWdUMCk7IC8vIENhbGxlZSBuZWVkcyB0byBiZSBpbiByZWdUMAorCisgICAgICAgIGlmIChpc1Rh
aWwpCisgICAgICAgICAgICBtX2ppdC5lbWl0UmVzdG9yZUNhbGxlZVNhdmVzKCk7IC8vIFRoaXMg
bmVlZHMgdG8gaGFwcGVuIGFmdGVyIHdlIG1vdmVkIGNhbGxlZUdQUiB0byByZWdUMAorICAgIH0K
KwogICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW1QdHIoY2FsbExpbmtJ
bmZvKSwgR1BSSW5mbzo6cmVnVDIpOyAvLyBMaW5rIGluZm8gbmVlZHMgdG8gYmUgaW4gcmVnVDIK
ICAgICBKSVRDb21waWxlcjo6Q2FsbCBzbG93Q2FsbCA9IG1faml0Lm5lYXJDYWxsKCk7Ci0gICAg
CisKICAgICBkb25lLmxpbmsoJm1faml0KTsKLSAgICAKLSAgICBtX2ppdC5tb3ZlKEdQUkluZm86
OnJldHVyblZhbHVlR1BSLCByZXN1bHRHUFIpOwotICAgIAotICAgIGpzVmFsdWVSZXN1bHQocmVz
dWx0R1BSLCBtX2N1cnJlbnROb2RlLCBEYXRhRm9ybWF0SlMsIFVzZUNoaWxkcmVuQ2FsbGVkRXhw
bGljaXRseSk7Ci0gICAgCisKKyAgICBpZiAoaXNUYWlsKQorICAgICAgICBtX2ppdC5hYm9ydFdp
dGhSZWFzb24oSklURGlkUmV0dXJuRnJvbVRhaWxDYWxsKTsKKyAgICBlbHNlIHsKKyAgICAgICAg
R1BSRmx1c2hlZENhbGxSZXN1bHQgcmVzdWx0KHRoaXMpOworICAgICAgICBHUFJSZWcgcmVzdWx0
R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBtX2ppdC5tb3ZlKEdQUkluZm86OnJldHVyblZh
bHVlR1BSLCByZXN1bHRHUFIpOworCisgICAgICAgIGpzVmFsdWVSZXN1bHQocmVzdWx0R1BSLCBt
X2N1cnJlbnROb2RlLCBEYXRhRm9ybWF0SlMsIFVzZUNoaWxkcmVuQ2FsbGVkRXhwbGljaXRseSk7
CisKKyAgICAgICAgLy8gQWZ0ZXIgdGhlIGNhbGxzIGFyZSBkb25lLCB3ZSBuZWVkIHRvIHJlZXN0
YWJsaXNoIG91ciBzdGFjaworICAgICAgICAvLyBwb2ludGVyLiBXZSByZWx5IG9uIHRoaXMgZm9y
IHZhcmFyZ3MgY2FsbHMsIGNhbGxzIHdpdGggYXJpdHkKKyAgICAgICAgLy8gbWlzbWF0Y2ggKHRo
ZSBjYWxsZnJhbWUgaXMgc2xpZGVkKSBhbmQgdGFpbCBjYWxscy4KKyAgICAgICAgbV9qaXQuYWRk
UHRyKFRydXN0ZWRJbW0zMihtX2ppdC5ncmFwaCgpLnN0YWNrUG9pbnRlck9mZnNldCgpICogc2l6
ZW9mKFJlZ2lzdGVyKSksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBKSVRDb21waWxlcjo6
c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgIH0KKwogICAgIGNhbGxMaW5rSW5mby0+c2V0VXBD
YWxsKGNhbGxUeXBlLCBtX2N1cnJlbnROb2RlLT5vcmlnaW4uc2VtYW50aWMsICBjYWxsZWVHUFIp
OyAgICAKICAgICBtX2ppdC5hZGRKU0NhbGwoZmFzdENhbGwsIHNsb3dDYWxsLCB0YXJnZXRUb0No
ZWNrLCBjYWxsTGlua0luZm8pOwotCi0gICAgLy8gQWZ0ZXIgdGhlIGNhbGxzIGFyZSBkb25lLCB3
ZSBuZWVkIHRvIHJlZXN0YWJsaXNoIG91ciBzdGFjawotICAgIC8vIHBvaW50ZXIuIFdlIHJlbHkg
b24gdGhpcyBmb3IgdmFyYXJncyBjYWxscywgY2FsbHMgd2l0aCBhcml0eQotICAgIC8vIG1pc21h
dGNoICh0aGUgY2FsbGZyYW1lIGlzIHNsaWRlZCkgYW5kIHRhaWwgY2FsbHMuCi0gICAgbV9qaXQu
YWRkUHRyKFRydXN0ZWRJbW0zMihtX2ppdC5ncmFwaCgpLnN0YWNrUG9pbnRlck9mZnNldCgpICog
c2l6ZW9mKFJlZ2lzdGVyKSksIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVyLCBKSVRDb21waWxl
cjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogfQogCiAvLyBDbGFuZyBzaG91bGQgYWxsb3cgdW5y
ZWFjaGFibGUgW1tjbGFuZzo6ZmFsbHRocm91Z2hdXSBpbiB0ZW1wbGF0ZSBmdW5jdGlvbnMgaWYg
YW55IHRlbXBsYXRlIGV4cGFuc2lvbiB1c2VzIGl0CkBAIC00MjQ4LDE0ICs0MzMyLDIwIEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICAgICAgYnJlYWs7CiAK
ICAgICBjYXNlIENhbGw6CisgICAgY2FzZSBUYWlsQ2FsbDoKKyAgICBjYXNlIFRhaWxDYWxsSW5s
aW5lZENhbGxlcjoKICAgICBjYXNlIENvbnN0cnVjdDoKICAgICBjYXNlIENhbGxWYXJhcmdzOgor
ICAgIGNhc2UgVGFpbENhbGxWYXJhcmdzOgorICAgIGNhc2UgVGFpbENhbGxWYXJhcmdzSW5saW5l
ZENhbGxlcjoKICAgICBjYXNlIENhbGxGb3J3YXJkVmFyYXJnczoKICAgICBjYXNlIENvbnN0cnVj
dFZhcmFyZ3M6CiAgICAgY2FzZSBDb25zdHJ1Y3RGb3J3YXJkVmFyYXJnczoKKyAgICBjYXNlIFRh
aWxDYWxsRm9yd2FyZFZhcmFyZ3M6CisgICAgY2FzZSBUYWlsQ2FsbEZvcndhcmRWYXJhcmdzSW5s
aW5lZENhbGxlcjoKICAgICAgICAgZW1pdENhbGwobm9kZSk7CiAgICAgICAgIGJyZWFrOwotICAg
ICAgICAKKwogICAgIGNhc2UgTG9hZFZhcmFyZ3M6IHsKICAgICAgICAgTG9hZFZhcmFyZ3NEYXRh
KiBkYXRhID0gbm9kZS0+bG9hZFZhcmFyZ3NEYXRhKCk7CiAgICAgICAgIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAJKHJldmlzaW9uIDE5MDE1MykKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFsaWRhdGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC01NzAsNiArNTcwLDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBjYXNlIFVwc2ls
b246CiAgICAgICAgICAgICAgICAgY2FzZSBGb3J3YXJkVmFyYXJnczoKICAgICAgICAgICAgICAg
ICBjYXNlIENhbGxGb3J3YXJkVmFyYXJnczoKKyAgICAgICAgICAgICAgICBjYXNlIFRhaWxDYWxs
Rm9yd2FyZFZhcmFyZ3M6CisgICAgICAgICAgICAgICAgY2FzZSBUYWlsQ2FsbEZvcndhcmRWYXJh
cmdzSW5saW5lZENhbGxlcjoKICAgICAgICAgICAgICAgICBjYXNlIENvbnN0cnVjdEZvcndhcmRW
YXJhcmdzOgogICAgICAgICAgICAgICAgIGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFsOgogICAgICAg
ICAgICAgICAgICAgICBicmVhazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
VmFyYXJnc0ZvcndhcmRpbmdQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlLmNwcAkocmV2aXNpb24gMTkwMTUz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM1LDYgKzEzNSw4IEBAIHByaXZhdGU6CiAgICAgICAg
ICAgICAgICAgCiAgICAgICAgICAgICBjYXNlIENhbGxWYXJhcmdzOgogICAgICAgICAgICAgY2Fz
ZSBDb25zdHJ1Y3RWYXJhcmdzOgorICAgICAgICAgICAgY2FzZSBUYWlsQ2FsbFZhcmFyZ3M6Cisg
ICAgICAgICAgICBjYXNlIFRhaWxDYWxsVmFyYXJnc0lubGluZWRDYWxsZXI6CiAgICAgICAgICAg
ICAgICAgaWYgKG5vZGUtPmNoaWxkMSgpID09IGNhbmRpZGF0ZSB8fCBub2RlLT5jaGlsZDMoKSA9
PSBjYW5kaWRhdGUpIHsKICAgICAgICAgICAgICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAg
ICAgICAgICAgICAgICAgICBkYXRhTG9nKCIgICAgRXNjYXBlIGF0ICIsIG5vZGUsICJcbiIpOwpA
QCAtMjgyLDcgKzI4NCwxOSBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgICBub2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhDb25zdHJ1Y3RGb3J3
YXJkVmFyYXJncyk7CiAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgCisK
KyAgICAgICAgICAgIGNhc2UgVGFpbENhbGxWYXJhcmdzOgorICAgICAgICAgICAgICAgIGlmIChu
b2RlLT5jaGlsZDIoKSAhPSBjYW5kaWRhdGUpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdzKFRhaWxDYWxsRm9yd2Fy
ZFZhcmFyZ3MpOworICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICBjYXNlIFRh
aWxDYWxsVmFyYXJnc0lubGluZWRDYWxsZXI6CisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNo
aWxkMigpICE9IGNhbmRpZGF0ZSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgbm9kZS0+c2V0T3BBbmREZWZhdWx0RmxhZ3MoVGFpbENhbGxGb3J3YXJkVmFyYXJn
c0lubGluZWRDYWxsZXIpOworICAgICAgICAgICAgICAgIGJyZWFrOworCiAgICAgICAgICAgICBj
YXNlIFNldExvY2FsOgogICAgICAgICAgICAgICAgIC8vIFRoaXMgaXMgc3VwZXIgb2RkLiBXZSBk
b24ndCBoYXZlIHRvIGRvIGFueXRoaW5nIGhlcmUsIHNpbmNlIGluIERGRyBJUiwgdGhlIHBoYW50
b20KICAgICAgICAgICAgICAgICAvLyBhcmd1bWVudHMgbm9kZXMgZG8gcHJvZHVjZSBhIEpTVmFs
dWUuIEFsc28sIHdlIGtub3cgdGhhdCBpZiB0aGlzIFNldExvY2FsIHJlZmVyZW5lY3MgYQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5jcHAJ
KHJldmlzaW9uIDE5MDE1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9D
YWxsRnJhbWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NSw3ICs5NSw3IEBAIHVuc2lnbmVkIENh
bGxGcmFtZTo6Ynl0ZWNvZGVPZmZzZXQoKQogICAgICAgICBBU1NFUlQoY29kZUJsb2NrKCkpOwog
ICAgICAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW4gPSB0aGlzLT5jb2RlT3JpZ2luKCk7CiAgICAg
ICAgIGZvciAoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBjb2RlT3JpZ2luLmlu
bGluZUNhbGxGcmFtZTsgaW5saW5lQ2FsbEZyYW1lOykgewotICAgICAgICAgICAgY29kZU9yaWdp
biA9IGlubGluZUNhbGxGcmFtZS0+Y2FsbGVyOworICAgICAgICAgICAgY29kZU9yaWdpbiA9IGlu
bGluZUNhbGxGcmFtZS0+ZGlyZWN0Q2FsbGVyOwogICAgICAgICAgICAgaW5saW5lQ2FsbEZyYW1l
ID0gY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWU7CiAgICAgICAgIH0KICAgICAgICAgcmV0dXJu
IGNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnRlcnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCShyZXZpc2lvbiAxOTAxNTMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNjAsOCArNjAsMTYgQEAgdm9pZCBTdGFja1Zpc2l0b3I6OmdvdG9OZXh0
RnJhbWUoKQogI2lmIEVOQUJMRShERkdfSklUKQogICAgIGlmIChtX2ZyYW1lLmlzSW5saW5lZEZy
YW1lKCkpIHsKICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBtX2Zy
YW1lLmlubGluZUNhbGxGcmFtZSgpOwotICAgICAgICBDb2RlT3JpZ2luKiBjYWxsZXJDb2RlT3Jp
Z2luID0gJmlubGluZUNhbGxGcmFtZS0+Y2FsbGVyOwotICAgICAgICByZWFkSW5saW5lZEZyYW1l
KG1fZnJhbWUuY2FsbEZyYW1lKCksIGNhbGxlckNvZGVPcmlnaW4pOworICAgICAgICBDb2RlT3Jp
Z2luKiBjYWxsZXJDb2RlT3JpZ2luID0gaW5saW5lQ2FsbEZyYW1lLT5nZXRDYWxsZXJTa2lwcGlu
Z0RlYWRGcmFtZXMoKTsKKyAgICAgICAgaWYgKCFjYWxsZXJDb2RlT3JpZ2luKSB7CisgICAgICAg
ICAgICB3aGlsZSAoaW5saW5lQ2FsbEZyYW1lKSB7CisgICAgICAgICAgICAgICAgcmVhZElubGlu
ZWRGcmFtZShtX2ZyYW1lLmNhbGxGcmFtZSgpLCAmaW5saW5lQ2FsbEZyYW1lLT5kaXJlY3RDYWxs
ZXIpOworICAgICAgICAgICAgICAgIGlubGluZUNhbGxGcmFtZSA9IG1fZnJhbWUuaW5saW5lQ2Fs
bEZyYW1lKCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBtX2ZyYW1lLm1fVk1FbnRyeUZy
YW1lID0gbV9mcmFtZS5tX0NhbGxlclZNRW50cnlGcmFtZTsKKyAgICAgICAgICAgIHJlYWRGcmFt
ZShtX2ZyYW1lLmNhbGxlckZyYW1lKCkpOworICAgICAgICB9IGVsc2UKKyAgICAgICAgICAgIHJl
YWRJbmxpbmVkRnJhbWUobV9mcmFtZS5jYWxsRnJhbWUoKSwgY2FsbGVyQ29kZU9yaWdpbik7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAjZW5kaWYgLy8gRU5BQkxFKERGR19KSVQpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCShyZXZpc2lvbiAxOTAxNTMpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEyOCw3ICsxMjgsNyBAQCB0eXBlZGVmIGNvbnN0IGNoYXIqIG9wdGlvblN0cmluZzsKICAg
ICB2KGJvb2wsIGZvcmNlUHJvZmlsZXJCeXRlY29kZUdlbmVyYXRpb24sIGZhbHNlLCBudWxscHRy
KSBcCiAgICAgXAogICAgIHYoYm9vbCwgZW5hYmxlRnVuY3Rpb25Eb3RBcmd1bWVudHMsIHRydWUs
IG51bGxwdHIpIFwKLSAgICB2KGJvb2wsIGVuYWJsZVRhaWxDYWxscywgZmFsc2UsIG51bGxwdHIp
IFwKKyAgICB2KGJvb2wsIGVuYWJsZVRhaWxDYWxscywgdHJ1ZSwgbnVsbHB0cikgXAogICAgIFwK
ICAgICAvKiBzaG93RGlzYXNzZW1ibHkgaW1wbGllcyBzaG93REZHRGlzYXNzZW1ibHkuICovIFwK
ICAgICB2KGJvb2wsIHNob3dEaXNhc3NlbWJseSwgZmFsc2UsICJkdW1wcyBkaXNhc3NlbWJseSBv
ZiBhbGwgSklUIGNvbXBpbGVkIGNvZGUgdXBvbiBjb21waWxhdGlvbiIpIFwKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvZGZnLXRhaWwtY2FsbHMuanMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9kZmctdGFpbC1jYWxscy5q
cwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvZGZn
LXRhaWwtY2FsbHMuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NiBAQAorKGZ1bmN0aW9u
IG5vbklubGluZWRUYWlsQ2FsbCgpIHsKKyAgICBmdW5jdGlvbiBjYWxsZWUoKSB7IGlmIChjYWxs
ZWUuY2FsbGVyICE9IG5vbklubGluZWRUYWlsQ2FsbCkgdGhyb3cgbmV3IEVycm9yKCk7IH0KKyAg
ICBub0lubGluZShjYWxsZWUpOworCisgICAgZnVuY3Rpb24gY2FsbGVyKCkgeyAidXNlIHN0cmlj
dCI7IHJldHVybiBjYWxsZWUoKTsgfQorCisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsg
KytpKQorICAgICAgICBjYWxsZXIoKTsKKworICAgIGZ1bmN0aW9uIGxvb3AobikgeyAidXNlIHN0
cmljdCI7IGlmIChuID4gMCkgcmV0dXJuIGxvb3AobiAtIDEpOyB9CisgICAgbm9JbmxpbmUobG9v
cCk7CisKKyAgICBsb29wKDEwMDAwMDApOworfSkoKTsKKworKGZ1bmN0aW9uIGlubGluZWRUYWls
Q2FsbCgpIHsKKyAgICBmdW5jdGlvbiBjYWxsZWUoKSB7IGlmIChjYWxsZWUuY2FsbGVyICE9IGlu
bGluZWRUYWlsQ2FsbCkgdGhyb3cgbmV3IEVycm9yKCk7IH0KKyAgICBmdW5jdGlvbiBjYWxsZXIo
KSB7ICJ1c2Ugc3RyaWN0IjsgcmV0dXJuIGNhbGxlZSgpOyB9CisKKyAgICBmb3IgKHZhciBpID0g
MDsgaSA8IDEwMDAwOyArK2kpCisgICAgICAgIGNhbGxlcigpOworCisgICAgZnVuY3Rpb24gbG9v
cChuKSB7ICJ1c2Ugc3RyaWN0IjsgaWYgKG4gPiAwKSByZXR1cm4gbG9vcChuIC0gMSk7IH0KKwor
ICAgIGxvb3AoMTAwMDAwMCk7Cit9KSgpOworCisoZnVuY3Rpb24gbm9uSW5saW5lZEVtdWxhdGVk
VGFpbENhbGwoKSB7CisgICAgZnVuY3Rpb24gZW11bGF0b3IoKSB7IGNhbGxlcigpOyB9CisgICAg
ZnVuY3Rpb24gY2FsbGVlKCkgeyBpZiAoY2FsbGVlLmNhbGxlciAhPSBlbXVsYXRvcikgdGhyb3cg
bmV3IEVycm9yKCk7IH0KKyAgICBub0lubGluZShjYWxsZWUpOworICAgIGZ1bmN0aW9uIGNhbGxl
cigpIHsgInVzZSBzdHJpY3QiOyByZXR1cm4gY2FsbGVlKCk7IH0KKworICAgIGZvciAodmFyIGkg
PSAwOyBpIDwgMTAwMDA7ICsraSkKKyAgICAgICAgZW11bGF0b3IoKTsKKworICAgIGZ1bmN0aW9u
IHBhZChuKSB7ICJ1c2Ugc3RyaWN0IjsgcmV0dXJuIGxvb3Aobik7IH0KKyAgICBmdW5jdGlvbiBs
b29wKG4pIHsgInVzZSBzdHJpY3QiOyBpZiAobiA+IDApIHJldHVybiBwYWQobiAtIDEpOyB9Cisg
ICAgbm9JbmxpbmUobG9vcCk7CisKKyAgICBsb29wKDEwMDAwMDApOworfSkoKTsKKworKGZ1bmN0
aW9uIGlubGluZWRFbXVsYXRlZFRhaWxDYWxsKCkgeworICAgIGZ1bmN0aW9uIGVtdWxhdG9yKCkg
eyBjYWxsZXIoKTsgfQorICAgIGZ1bmN0aW9uIGNhbGxlZSgpIHsgaWYgKGNhbGxlZS5jYWxsZXIg
IT0gZW11bGF0b3IpIHRocm93IG5ldyBFcnJvcigpOyB9CisgICAgZnVuY3Rpb24gY2FsbGVyKCkg
eyAidXNlIHN0cmljdCI7IHJldHVybiBjYWxsZWUoKTsgfQorCisgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCAxMDAwMDsgKytpKQorICAgICAgICBlbXVsYXRvcigpOworCisgICAgZnVuY3Rpb24gcGFk
KG4pIHsgInVzZSBzdHJpY3QiOyByZXR1cm4gbG9vcChuKTsgfQorICAgIGZ1bmN0aW9uIGxvb3Ao
bikgeyAidXNlIHN0cmljdCI7IGlmIChuID4gMCkgcmV0dXJuIHBhZChuIC0gMSk7IH0KKworICAg
IGxvb3AoMTAwMDAwMCk7Cit9KSgpOwpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMTkwMTUzKQorKysgTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjEgQEAKKzIwMTUt
MDktMjIgIE1pY2hhZWwgU2Fib2ZmICA8bXNhYm9mZkBhcHBsZS5jb20+CisKKyAgICAgICAgW0VT
Nl0gSW1wbGVtZW50IHRhaWwgY2FsbHMgaW4gdGhlIERGRworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ4NjYzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Tk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkZWQgb25lIG5ldyB0ZXN0IGFuZCBlbmFibGVk
IHRhaWwgY2FsbCB0ZXN0aW5nIG9mIHRoZSBERkcuCisKKyAgICAgICAgKiBqcy9jYWxsZXItcHJv
cGVydHktZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGpzL3NjcmlwdC10ZXN0cy9jYWxsZXItcHJv
cGVydHkuanM6CisgICAgICAgIChzdHJpbmdfYXBwZWFyZWRfaGVyZS5ub25TdHJpY3RDYWxsZWUp
OgorICAgICAgICAoc3RyaWN0Q2FsbGVlKToKKyAgICAgICAgKG5vblN0cmljdENhbGxlcik6Cisg
ICAgICAgIChzdHJpY3RDYWxsZXIpOgorICAgICAgICAoc3RyaWN0VGFpbENhbGxlcik6CisgICAg
ICAgIChnZXRGb29HZXR0ZXIpOgorCiAyMDE1LTA5LTIyICBSeW9zdWtlIE5pd2EgIDxybml3YUB3
ZWJraXQub3JnPgogCiAgICAgICAgIEV2ZW50IGZpcmVkIG9uIGEgZGV0YWNoZWQgbm9kZSBkb2Vz
IG5vdCBidWJibGUgdXAKSW5kZXg6IExheW91dFRlc3RzL2pzL2NhbGxlci1wcm9wZXJ0eS1leHBl
Y3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvY2FsbGVyLXByb3BlcnR5LWV4
cGVjdGVkLnR4dAkocmV2aXNpb24gMTkwMTUzKQorKysgTGF5b3V0VGVzdHMvanMvY2FsbGVyLXBy
b3BlcnR5LWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMTAsMTAgKzEwLDE0IEBAIFBB
U1Mgbm9uU3RyaWN0Q2FsbGVyKG5vblN0cmljdENhbGxlZSkgaXMKIFBBU1Mgbm9uU3RyaWN0Q2Fs
bGVyKHN0cmljdENhbGxlZSkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogVHlwZSBlcnJvci4K
IFBBU1Mgc3RyaWN0Q2FsbGVyKG5vblN0cmljdENhbGxlZSkgdGhyZXcgZXhjZXB0aW9uIFR5cGVF
cnJvcjogRnVuY3Rpb24uY2FsbGVyIHVzZWQgdG8gcmV0cmlldmUgc3RyaWN0IGNhbGxlci4KIFBB
U1Mgc3RyaWN0Q2FsbGVyKHN0cmljdENhbGxlZSkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjog
VHlwZSBlcnJvci4KK1BBU1Mgc3RyaWN0VGFpbENhbGxlcihub25TdHJpY3RDYWxsZWUpIGlzIG51
bGwKK1BBU1Mgc3RyaWN0VGFpbENhbGxlcihzdHJpY3RDYWxsZWUpIHRocmV3IGV4Y2VwdGlvbiBU
eXBlRXJyb3I6IFR5cGUgZXJyb3IuCiBQQVNTIG5vblN0cmljdENhbGxlcihib3VuZE5vblN0cmlj
dENhbGxlZSkgaXMgbm9uU3RyaWN0Q2FsbGVyCiBQQVNTIG5vblN0cmljdENhbGxlcihib3VuZFN0
cmljdENhbGxlZSkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogVHlwZSBlcnJvci4KIFBBU1Mg
c3RyaWN0Q2FsbGVyKGJvdW5kTm9uU3RyaWN0Q2FsbGVlKSB0aHJldyBleGNlcHRpb24gVHlwZUVy
cm9yOiBGdW5jdGlvbi5jYWxsZXIgdXNlZCB0byByZXRyaWV2ZSBzdHJpY3QgY2FsbGVyLgogUEFT
UyBzdHJpY3RDYWxsZXIoYm91bmRTdHJpY3RDYWxsZWUpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJy
b3I6IFR5cGUgZXJyb3IuCitQQVNTIHN0cmljdFRhaWxDYWxsZXIoYm91bmROb25TdHJpY3RDYWxs
ZWUpIGlzIG51bGwKK1BBU1Mgc3RyaWN0VGFpbENhbGxlcihib3VuZFN0cmljdENhbGxlZSkgdGhy
ZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogVHlwZSBlcnJvci4KIFBBU1Mgbm9uU3RyaWN0R2V0dGVy
KG5vblN0cmljdEFjY2Vzc29yKSBpcyBub25TdHJpY3RHZXR0ZXIKIFBBU1Mgbm9uU3RyaWN0U2V0
dGVyKG5vblN0cmljdEFjY2Vzc29yKSBpcyB0cnVlCiBQQVNTIG5vblN0cmljdEdldHRlcihzdHJp
Y3RBY2Nlc3NvcikgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogVHlwZSBlcnJvci4KSW5kZXg6
IExheW91dFRlc3RzL2pzL3NjcmlwdC10ZXN0cy9jYWxsZXItcHJvcGVydHkuanMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gTGF5b3V0VGVzdHMvanMvc2NyaXB0LXRlc3RzL2NhbGxlci1wcm9wZXJ0eS5qcwkocmV2
aXNpb24gMTkwMTUzKQorKysgTGF5b3V0VGVzdHMvanMvc2NyaXB0LXRlc3RzL2NhbGxlci1wcm9w
ZXJ0eS5qcwkod29ya2luZyBjb3B5KQpAQCAtMjMsMTEgKzIzLDE1IEBAIHNob3VsZEJlKCdjaGls
ZEhhc0NhbGxlcldoZW5DYWxsZWRGcm9tV2kKIGZ1bmN0aW9uIG5vblN0cmljdENhbGxlZSgpIHsg
cmV0dXJuIG5vblN0cmljdENhbGxlZS5jYWxsZXI7IH0KIGZ1bmN0aW9uIHN0cmljdENhbGxlZSgp
IHsgInVzZSBzdHJpY3QiOyByZXR1cm4gc3RyaWN0Q2FsbGVlLmNhbGxlcjsgfQogZnVuY3Rpb24g
bm9uU3RyaWN0Q2FsbGVyKHgpIHsgcmV0dXJuIHgoKTsgfQotZnVuY3Rpb24gc3RyaWN0Q2FsbGVy
KHgpIHsgInVzZSBzdHJpY3QiOyByZXR1cm4geCgpOyB9CisvLyBUYWlsIGNhbGxzIGxlYWsgYW5k
IHNob3cgb3VyIGNhbGxlcidzIGNhbGxlciwgd2hpY2ggaXMgbnVsbCBoZXJlCitmdW5jdGlvbiBz
dHJpY3RDYWxsZXIoeCkgeyAidXNlIHN0cmljdCI7IHZhciByZXN1bHQgPSB4KCk7IHJldHVybiBy
ZXN1bHQ7IH0KK2Z1bmN0aW9uIHN0cmljdFRhaWxDYWxsZXIoeCkgeyAidXNlIHN0cmljdCI7IHJl
dHVybiB4KCk7IH0KIHNob3VsZEJlKCJub25TdHJpY3RDYWxsZXIobm9uU3RyaWN0Q2FsbGVlKSIs
ICJub25TdHJpY3RDYWxsZXIiKTsKIHNob3VsZFRocm93KCJub25TdHJpY3RDYWxsZXIoc3RyaWN0
Q2FsbGVlKSIsICciVHlwZUVycm9yOiBUeXBlIGVycm9yIicpOwogc2hvdWxkVGhyb3coInN0cmlj
dENhbGxlcihub25TdHJpY3RDYWxsZWUpIiwgJyJUeXBlRXJyb3I6IEZ1bmN0aW9uLmNhbGxlciB1
c2VkIHRvIHJldHJpZXZlIHN0cmljdCBjYWxsZXIiJyk7CiBzaG91bGRUaHJvdygic3RyaWN0Q2Fs
bGVyKHN0cmljdENhbGxlZSkiLCAnIlR5cGVFcnJvcjogVHlwZSBlcnJvciInKTsKK3Nob3VsZEJl
KCJzdHJpY3RUYWlsQ2FsbGVyKG5vblN0cmljdENhbGxlZSkiLCAibnVsbCIpOworc2hvdWxkVGhy
b3coInN0cmljdFRhaWxDYWxsZXIoc3RyaWN0Q2FsbGVlKSIsICciVHlwZUVycm9yOiBUeXBlIGVy
cm9yIicpOwogCiAvLyAuY2FsbGVyIHdpdGhpbiBhIGJvdW5kIGZ1bmN0aW9uIHJlYWNoZXMgdGhl
IGNhbGxlciwgaWdub3JpbmcgdGhlIGJpbmRpbmcuCiB2YXIgYm91bmROb25TdHJpY3RDYWxsZWUg
PSBub25TdHJpY3RDYWxsZWUuYmluZCgpOwpAQCAtMzYsNiArNDAsOCBAQCBzaG91bGRCZSgibm9u
U3RyaWN0Q2FsbGVyKGJvdW5kTm9uU3RyaWN0CiBzaG91bGRUaHJvdygibm9uU3RyaWN0Q2FsbGVy
KGJvdW5kU3RyaWN0Q2FsbGVlKSIsICciVHlwZUVycm9yOiBUeXBlIGVycm9yIicpOwogc2hvdWxk
VGhyb3coInN0cmljdENhbGxlcihib3VuZE5vblN0cmljdENhbGxlZSkiLCAnIlR5cGVFcnJvcjog
RnVuY3Rpb24uY2FsbGVyIHVzZWQgdG8gcmV0cmlldmUgc3RyaWN0IGNhbGxlciInKTsKIHNob3Vs
ZFRocm93KCJzdHJpY3RDYWxsZXIoYm91bmRTdHJpY3RDYWxsZWUpIiwgJyJUeXBlRXJyb3I6IFR5
cGUgZXJyb3IiJyk7CitzaG91bGRCZSgic3RyaWN0VGFpbENhbGxlcihib3VuZE5vblN0cmljdENh
bGxlZSkiLCAibnVsbCIpOworc2hvdWxkVGhyb3coInN0cmljdFRhaWxDYWxsZXIoYm91bmRTdHJp
Y3RDYWxsZWUpIiwgJyJUeXBlRXJyb3I6IFR5cGUgZXJyb3IiJyk7CiAKIC8vIENoZWNrIHRoYXQg
LmNhbGxlciB3b3JrcyAob3IgdGhyb3dzKSBhcyBleHBlY3RlZCwgb3ZlciBhbiBhY2Nlc3NvciBj
YWxsLgogZnVuY3Rpb24gZ2V0Rm9vR2V0dGVyKHgpIHsgcmV0dXJuIE9iamVjdC5nZXRPd25Qcm9w
ZXJ0eURlc2NyaXB0b3IoeCwgJ2ZvbycpLmdldDsgfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>261840</attachid>
            <date>2015-09-23 14:17:38 -0700</date>
            <delta_ts>2015-09-24 13:44:47 -0700</delta_ts>
            <desc>Patch with Tail Calls turned off</desc>
            <filename>148663-4.patch</filename>
            <type>text/plain</type>
            <size>92262</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTkwMTUzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzMyBA
QAorMjAxNS0wOS0yMiAgTWljaGFlbCBTYWJvZmYgIDxtc2Fib2ZmQGFwcGxlLmNvbT4KKworICAg
ICAgICBbRVM2XSBJbXBsZW1lbnQgdGFpbCBjYWxscyBpbiB0aGUgREZHCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDg2NjMKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBqc2MtdGFpbGNhbGw6IEltcGxlbWVu
dCB0aGUgdGFpbCBjYWxsIG9wY29kZXMgaW4gdGhlIERGRworICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ2ODUwCisKKyAgICAgICAgVGhpcyBwYXRjaCBh
ZGRzIHN1cHBvcnQgZm9yIHRhaWwgY2FsbHMgaW4gdGhlIERGRy4gVGhpcyByZXF1aXJlcyBhIHNs
aWdodGx5IGhpZ2ggbnVtYmVyIG9mIG5vZGVzOgorCisgICAgICAgICAtIFRhaWxDYWxsIGFuZCBU
YWlsQ2FsbFZhcmFyZ3MgYXJlIHN0cmFpZ2h0Zm9yd2FyZC4gVGhleSBhcmUgdGVybWluYWwKKyAg
ICAgICAgICAgbm9kZXMgYW5kIGhhdmUgdGhlIHNlbWFudGljcyBvZiBhbiBhY3R1YWwgdGFpbCBj
YWxsLgorCisgICAgICAgICAtIFRhaWxDYWxsSW5saW5lZENhbGxlciBhbmQgVGFpbENhbGxWYXJh
cmdzSW5saW5lZENhbGxlciBhcmUgaGVyZSB0byBwZXJmb3JtIGEKKyAgICAgICAgICAgdGFpbCBj
YWxsIGluc2lkZSBhbiBpbmxpbmVkIGZ1bmN0aW9uLiBUaGV5IGFyZSBub24gdGVybWluYWwgbm9k
ZXMsCisgICAgICAgICAgIGFuZCBhcmUgcGVyZm9ybWluZyB0aGUgY2FsbCBhcyBhIHJlZ3VsYXIg
Y2FsbCBhZnRlciBwb3BwaW5nIGFuCisgICAgICAgICAgIGFwcHJvcHJpYXRlIG51bWJlciBvZiBp
bmxpbmVkIHRhaWwgY2FsbCBmcmFtZXMuCisKKyAgICAgICAgIC0gVGFpbENhbGxGb3J3YXJkVmFy
YXJncyBhbmQgVGFpbENhbGxGb3J3YXJkVmFyYXJnc0lubGluZWRDYWxsZXIgYXJlIHRoZQorICAg
ICAgICAgICBleHRlbnNpb24gb2YgVGFpbENhbGxWYXJhcmdzIGFuZCBUYWlsQ2FsbFZhcmFyZ3NJ
bmxpbmVkQ2FsbGVyIHRvIGVuYWJsZQorICAgICAgICAgICB0aGUgdmFyYXJncyBmb3J3YXJkaW5n
IG9wdGltaXphdGlvbiBzbyB0aGF0IHdlIGRvbid0IGxvc2UKKyAgICAgICAgICAgcGVyZm9ybWFu
Y2Ugd2l0aCBhIHRhaWwgY2FsbCBpbnN0ZWFkIG9mIGEgcmVndWxhciBjYWxsLgorCisgICAgICAg
IFRoaXMgYWxzbyByZXF1aXJlZCB0d28gYnJvYWQga2luZCBvZiBjaGFuZ2VzOgorCisgICAgICAg
ICAtIENoYW5nZXMgaW4gdGhlIEpJVCBpdHNlbGYgKERGR1NwZWN1bGF0aXZlSklUKSBhcmUgcHJl
dHR5CisgICAgICAgICAgIHN0cmFpZ2h0Zm9yd2FyZCBzaW5jZSB0aGV5IGFyZSBqdXN0IGFuIGV4
dGVuc2lvbiBvZiB0aGUgYmFzZWxpbmUgSklUCisgICAgICAgICAgIGNoYW5nZXMgaW50cm9kdWNl
ZCBwcmV2aW91c2x5LgorCisgICAgICAgICAtIENoYW5nZXMgaW4gdGhlIHJ1bnRpbWUgYXJlIG1v
c3RseSByZWxhdGVkIHdpdGggaGFuZGxpbmcgaW5saW5lIGNhbGwKKyAgICAgICAgICAgZnJhbWVz
LiBUaGUgaWRlYSBoZXJlIGlzIHRoYXQgd2UgaGF2ZSBhIHNwZWNpYWwgVGFpbENhbGwgdHlwZSBm
b3IKKyAgICAgICAgICAgY2FsbCBmcmFtZXMgdGhhdCBpbmRpY2F0ZXMgdG8gdGhlIHZhcmlvdXMg
cGllY2VzIG9mIGNvZGUgd2Fsa2luZyB0aGUKKyAgICAgICAgICAgaW5saW5lIGNhbGwgZnJhbWUg
dGhhdCB0aGV5IHNob3VsZCAocmVjdXJzaXZlbHkpIHNraXAgdGhlIGNhbGxlciBpbgorICAgICAg
ICAgICB0aGVpciBhbmFseXNpcy4KKworICAgICAgICAqIGJ5dGVjb2RlL0NhbGxNb2RlLmg6Cisg
ICAgICAgIChKU0M6OnNwZWNpYWxpemF0aW9uS2luZEZvcik6CisgICAgICAgICogYnl0ZWNvZGUv
Q29kZU9yaWdpbi5jcHA6CisgICAgICAgIChKU0M6OkNvZGVPcmlnaW46OmlubGluZURlcHRoRm9y
Q2FsbEZyYW1lKToKKyAgICAgICAgKEpTQzo6Q29kZU9yaWdpbjo6aXNBcHByb3hpbWF0ZWx5RXF1
YWxUbyk6CisgICAgICAgIChKU0M6OkNvZGVPcmlnaW46OmFwcHJveGltYXRlSGFzaCk6CisgICAg
ICAgIChKU0M6OkNvZGVPcmlnaW46OmlubGluZVN0YWNrKToKKyAgICAgICAgKiBieXRlY29kZS9D
b2RlT3JpZ2luLmg6CisgICAgICAgICogYnl0ZWNvZGUvSW5saW5lQ2FsbEZyYW1lLmNwcDoKKyAg
ICAgICAgKEpTQzo6SW5saW5lQ2FsbEZyYW1lOjpkdW1wSW5Db250ZXh0KToKKyAgICAgICAgKFdU
Rjo6cHJpbnRJbnRlcm5hbCk6CisgICAgICAgICogYnl0ZWNvZGUvSW5saW5lQ2FsbEZyYW1lLmg6
CisgICAgICAgIChKU0M6OklubGluZUNhbGxGcmFtZTo6Y2FsbE1vZGVGb3IpOgorICAgICAgICAo
SlNDOjpJbmxpbmVDYWxsRnJhbWU6OmtpbmRGb3IpOgorICAgICAgICAoSlNDOjpJbmxpbmVDYWxs
RnJhbWU6OnZhcmFyZ3NLaW5kRm9yKToKKyAgICAgICAgKEpTQzo6SW5saW5lQ2FsbEZyYW1lOjpz
cGVjaWFsaXphdGlvbktpbmRGb3IpOgorICAgICAgICAoSlNDOjpJbmxpbmVDYWxsRnJhbWU6Omlz
VmFyYXJncyk6CisgICAgICAgIChKU0M6OklubGluZUNhbGxGcmFtZTo6aXNUYWlsKToKKyAgICAg
ICAgKEpTQzo6SW5saW5lQ2FsbEZyYW1lOjpjb21wdXRlQ2FsbGVyU2tpcHBpbmdEZWFkRnJhbWVz
KToKKyAgICAgICAgKEpTQzo6SW5saW5lQ2FsbEZyYW1lOjpnZXRDYWxsZXJTa2lwcGluZ0RlYWRG
cmFtZXMpOgorICAgICAgICAoSlNDOjpJbmxpbmVDYWxsRnJhbWU6OmdldENhbGxlcklubGluZUZy
YW1lU2tpcHBpbmdEZWFkRnJhbWVzKToKKyAgICAgICAgKiBkZmcvREZHQWJzdHJhY3RJbnRlcnBy
ZXRlcklubGluZXMuaDoKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdEludGVycHJldGVyPEFi
c3RyYWN0U3RhdGVUeXBlPjo6ZXhlY3V0ZUVmZmVjdHMpOgorICAgICAgICAqIGRmZy9ERkdBcmd1
bWVudHNFbGltaW5hdGlvblBoYXNlLmNwcDoKKyAgICAgICAgKiBkZmcvREZHQmFzaWNCbG9jay5o
OgorICAgICAgICAoSlNDOjpERkc6OkJhc2ljQmxvY2s6OmZpbmRUZXJtaW5hbCk6CisgICAgICAg
ICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29k
ZVBhcnNlcjo6aW5saW5lQ2FsbEZyYW1lKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBh
cnNlcjo6YWxsSW5saW5lRnJhbWVzQXJlVGFpbENhbGxzKToKKyAgICAgICAgKEpTQzo6REZHOjpC
eXRlQ29kZVBhcnNlcjo6Y3VycmVudENvZGVPcmlnaW4pOgorICAgICAgICAoSlNDOjpERkc6OkJ5
dGVDb2RlUGFyc2VyOjphZGRDYWxsV2l0aG91dFNldHRpbmdSZXN1bHQpOgorICAgICAgICAoSlND
OjpERkc6OkJ5dGVDb2RlUGFyc2VyOjphZGRDYWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRl
Q29kZVBhcnNlcjo6Z2V0UHJlZGljdGlvbldpdGhvdXRPU1JFeGl0KToKKyAgICAgICAgKEpTQzo6
REZHOjpCeXRlQ29kZVBhcnNlcjo6Z2V0UHJlZGljdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6
Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUNhbGwpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2Rl
UGFyc2VyOjpoYW5kbGVWYXJhcmdzQ2FsbCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQ
YXJzZXI6OmVtaXRBcmd1bWVudFBoYW50b21zKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29k
ZVBhcnNlcjo6aW5saW5pbmdDb3N0KToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNl
cjo6aW5saW5lQ2FsbCk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OmF0dGVt
cHRUb0lubGluZUNhbGwpOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJz
ZUJsb2NrKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6SW5saW5lU3RhY2tF
bnRyeTo6SW5saW5lU3RhY2tFbnRyeSk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJz
ZXI6OnBhcnNlQ29kZUJsb2NrKToKKyAgICAgICAgKiBkZmcvREZHQ2FwYWJpbGl0aWVzLmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpjYXBhYmlsaXR5TGV2ZWwpOgorICAgICAgICAqIGRmZy9ERkdD
bG9iYmVyaXplLmg6CisgICAgICAgIChKU0M6OkRGRzo6Y2xvYmJlcml6ZSk6CisgICAgICAgICog
ZGZnL0RGR0RvZXNHQy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6ZG9lc0dDKToKKyAgICAgICAg
KiBkZmcvREZHRml4dXBQaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Rml4dXBQaGFzZTo6
Zml4dXBOb2RlKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguY3BwOgorICAgICAgICAoSlNDOjpE
Rkc6OkdyYXBoOjppc0xpdmVJbkJ5dGVjb2RlKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguaDoK
KyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6Zm9yQWxsTG9jYWxzTGl2ZUluQnl0ZWNvZGUpOgor
ICAgICAgICAqIGRmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6SW5QbGFjZUFic3RyYWN0U3RhdGU6Om1lcmdlVG9TdWNjZXNzb3JzKToKKyAgICAgICAg
KiBkZmcvREZHSklUQ29tcGlsZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkpJVENvbXBpbGVy
Ojp3aWxsQ2F0Y2hFeGNlcHRpb25Jbk1hY2hpbmVGcmFtZSk6CisgICAgICAgICogZGZnL0RGR0xp
dmVDYXRjaFZhcmlhYmxlUHJlc2VydmF0aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6
OkZsdXNoTGl2ZUNhdGNoVmFyaWFibGVzSW5zZXJ0aW9uUGhhc2U6OndpbGxDYXRjaEV4Y2VwdGlv
bik6CisgICAgICAgICogZGZnL0RGR05vZGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpo
YXNDYWxsVmFyYXJnc0RhdGEpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmlzVGVybWluYWwp
OgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc0hlYXBQcmVkaWN0aW9uKToKKyAgICAgICAg
KiBkZmcvREZHTm9kZVR5cGUuaDoKKyAgICAgICAgKiBkZmcvREZHT1NSRXhpdENvbXBpbGVyQ29t
bW9uLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpoYW5kbGVFeGl0Q291bnRzKToKKyAgICAgICAg
KEpTQzo6REZHOjpyZWlmeUlubGluZWRDYWxsRnJhbWVzKToKKyAgICAgICAgKEpTQzo6REZHOjpv
c3JXcml0ZUJhcnJpZXIpOgorICAgICAgICAqIGRmZy9ERkdPU1JFeGl0UHJlcGFyYXRpb24uY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OnByZXBhcmVDb2RlT3JpZ2luRm9yT1NSRXhpdCk6CisgICAg
ICAgICogZGZnL0RGR09wZXJhdGlvbnMuY3BwOgorICAgICAgICAqIGRmZy9ERkdQcmVjaXNlTG9j
YWxDbG9iYmVyaXplLmg6CisgICAgICAgIChKU0M6OkRGRzo6UHJlY2lzZUxvY2FsQ2xvYmJlcml6
ZUFkYXB0b3I6OnJlYWRUb3ApOgorICAgICAgICAqIGRmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRp
b25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6UHJlZGljdGlvblByb3BhZ2F0aW9uUGhh
c2U6OnByb3BhZ2F0ZSk6CisgICAgICAgICogZGZnL0RGR1NhZmVUb0V4ZWN1dGUuaDoKKyAgICAg
ICAgKEpTQzo6REZHOjpzYWZlVG9FeGVjdXRlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRp
dmVKSVQzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmVtaXRD
YWxsKToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAg
ICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNw
ZWN1bGF0aXZlSklUOjplbWl0Q2FsbCk6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdWYWxpZGF0ZS5jcHA6CisgICAgICAgIChK
U0M6OkRGRzo6VmFsaWRhdGU6OnZhbGlkYXRlU1NBKToKKyAgICAgICAgKiBkZmcvREZHVmFyYXJn
c0ZvcndhcmRpbmdQaGFzZS5jcHA6CisgICAgICAgICogaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNw
cDoKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lOjpieXRlY29kZU9mZnNldCk6CisgICAgICAgICog
aW50ZXJwcmV0ZXIvU3RhY2tWaXNpdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6U3RhY2tWaXNpdG9y
Ojpnb3RvTmV4dEZyYW1lKToKKwogMjAxNS0wOS0yMiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBw
bGUuY29tPgogCiAgICAgICAgIEdDVGhyZWFkU2hhcmVkRGF0YSBpcyBqdXN0IGEgYmFkIHdheSBv
ZiBzYXlpbmcgSGVhcApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxN
b2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NhbGxN
b2RlLmgJKHJldmlzaW9uIDE5MDE1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9DYWxsTW9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiwxMiArMjYsMjIgQEAKICNpZm5kZWYg
Q2FsbE1vZGVfaAogI2RlZmluZSBDYWxsTW9kZV9oCiAKKyNpbmNsdWRlICJDb2RlU3BlY2lhbGl6
YXRpb25LaW5kLmgiCisKIG5hbWVzcGFjZSBKU0MgewogCiBlbnVtIGNsYXNzIENhbGxNb2RlIHsg
UmVndWxhciwgVGFpbCwgQ29uc3RydWN0IH07CiAKIGVudW0gRnJhbWVBY3Rpb24geyBLZWVwVGhl
RnJhbWUgPSAwLCBSZXVzZVRoZUZyYW1lIH07CiAKK2lubGluZSBDb2RlU3BlY2lhbGl6YXRpb25L
aW5kIHNwZWNpYWxpemF0aW9uS2luZEZvcihDYWxsTW9kZSBjYWxsTW9kZSkKK3sKKyAgICBpZiAo
Y2FsbE1vZGUgPT0gQ2FsbE1vZGU6OkNvbnN0cnVjdCkKKyAgICAgICAgcmV0dXJuIENvZGVGb3JD
b25zdHJ1Y3Q7CisKKyAgICByZXR1cm4gQ29kZUZvckNhbGw7Cit9CisKIH0gLy8gbmFtZXNwYWNl
IEpTQwogCiBuYW1lc3BhY2UgV1RGIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlT3JpZ2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29kZU9yaWdpbi5jcHAJKHJldmlzaW9uIDE5MDE1MykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcs
NyArMzcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIHVuc2lnbmVkIENvZGVPcmlnaW46OmlubGluZURl
cHRoRm9yQ2FsbEZyYW1lKElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lKQogewogICAg
IHVuc2lnbmVkIHJlc3VsdCA9IDE7Ci0gICAgZm9yIChJbmxpbmVDYWxsRnJhbWUqIGN1cnJlbnQg
PSBpbmxpbmVDYWxsRnJhbWU7IGN1cnJlbnQ7IGN1cnJlbnQgPSBjdXJyZW50LT5jYWxsZXIuaW5s
aW5lQ2FsbEZyYW1lKQorICAgIGZvciAoSW5saW5lQ2FsbEZyYW1lKiBjdXJyZW50ID0gaW5saW5l
Q2FsbEZyYW1lOyBjdXJyZW50OyBjdXJyZW50ID0gY3VycmVudC0+ZGlyZWN0Q2FsbGVyLmlubGlu
ZUNhbGxGcmFtZSkKICAgICAgICAgcmVzdWx0Kys7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAg
LTc4LDggKzc4LDggQEAgYm9vbCBDb2RlT3JpZ2luOjppc0FwcHJveGltYXRlbHlFcXVhbFRvKAog
ICAgICAgICBpZiAoYS5pbmxpbmVDYWxsRnJhbWUtPmV4ZWN1dGFibGUuZ2V0KCkgIT0gYi5pbmxp
bmVDYWxsRnJhbWUtPmV4ZWN1dGFibGUuZ2V0KCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgICAgIAotICAgICAgICBhID0gYS5pbmxpbmVDYWxsRnJhbWUtPmNhbGxlcjsKLSAgICAg
ICAgYiA9IGIuaW5saW5lQ2FsbEZyYW1lLT5jYWxsZXI7CisgICAgICAgIGEgPSBhLmlubGluZUNh
bGxGcmFtZS0+ZGlyZWN0Q2FsbGVyOworICAgICAgICBiID0gYi5pbmxpbmVDYWxsRnJhbWUtPmRp
cmVjdENhbGxlcjsKICAgICB9CiB9CiAKQEAgLTEwMCw3ICsxMDAsNyBAQCB1bnNpZ25lZCBDb2Rl
T3JpZ2luOjphcHByb3hpbWF0ZUhhc2goKSBjCiAgICAgICAgIAogICAgICAgICByZXN1bHQgKz0g
V1RGOjpQdHJIYXNoPEpTQ2VsbCo+OjpoYXNoKGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5l
eGVjdXRhYmxlLmdldCgpKTsKICAgICAgICAgCi0gICAgICAgIGNvZGVPcmlnaW4gPSBjb2RlT3Jp
Z2luLmlubGluZUNhbGxGcmFtZS0+Y2FsbGVyOworICAgICAgICBjb2RlT3JpZ2luID0gY29kZU9y
aWdpbi5pbmxpbmVDYWxsRnJhbWUtPmRpcmVjdENhbGxlcjsKICAgICB9CiB9CiAKQEAgLTEwOSw4
ICsxMDksOCBAQCBWZWN0b3I8Q29kZU9yaWdpbj4gQ29kZU9yaWdpbjo6aW5saW5lU3RhCiAgICAg
VmVjdG9yPENvZGVPcmlnaW4+IHJlc3VsdChpbmxpbmVEZXB0aCgpKTsKICAgICByZXN1bHQubGFz
dCgpID0gKnRoaXM7CiAgICAgdW5zaWduZWQgaW5kZXggPSByZXN1bHQuc2l6ZSgpIC0gMjsKLSAg
ICBmb3IgKElubGluZUNhbGxGcmFtZSogY3VycmVudCA9IGlubGluZUNhbGxGcmFtZTsgY3VycmVu
dDsgY3VycmVudCA9IGN1cnJlbnQtPmNhbGxlci5pbmxpbmVDYWxsRnJhbWUpCi0gICAgICAgIHJl
c3VsdFtpbmRleC0tXSA9IGN1cnJlbnQtPmNhbGxlcjsKKyAgICBmb3IgKElubGluZUNhbGxGcmFt
ZSogY3VycmVudCA9IGlubGluZUNhbGxGcmFtZTsgY3VycmVudDsgY3VycmVudCA9IGN1cnJlbnQt
PmRpcmVjdENhbGxlci5pbmxpbmVDYWxsRnJhbWUpCisgICAgICAgIHJlc3VsdFtpbmRleC0tXSA9
IGN1cnJlbnQtPmRpcmVjdENhbGxlcjsKICAgICBSRUxFQVNFX0FTU0VSVCghcmVzdWx0WzBdLmlu
bGluZUNhbGxGcmFtZSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uaAkocmV2aXNpb24gMTkwMTUzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uaAkod29ya2luZyBjb3B5
KQpAQCAtMjYsNiArMjYsNyBAQAogI2lmbmRlZiBDb2RlT3JpZ2luX2gKICNkZWZpbmUgQ29kZU9y
aWdpbl9oCiAKKyNpbmNsdWRlICJDYWxsTW9kZS5oIgogI2luY2x1ZGUgIkNvZGVCbG9ja0hhc2gu
aCIKICNpbmNsdWRlICJDb2RlU3BlY2lhbGl6YXRpb25LaW5kLmgiCiAjaW5jbHVkZSAiV3JpdGVC
YXJyaWVyLmgiCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5saW5lQ2Fs
bEZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
SW5saW5lQ2FsbEZyYW1lLmNwcAkocmV2aXNpb24gMTkwMTUzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0lubGluZUNhbGxGcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc3
LDcgKzc3LDcgQEAgdm9pZCBJbmxpbmVDYWxsRnJhbWU6OmR1bXBJbkNvbnRleHQoUHJpbgogICAg
IG91dC5wcmludChicmllZkZ1bmN0aW9uSW5mb3JtYXRpb24oKSwgIjo8IiwgUmF3UG9pbnRlcihl
eGVjdXRhYmxlLmdldCgpKSk7CiAgICAgaWYgKGV4ZWN1dGFibGUtPmlzU3RyaWN0TW9kZSgpKQog
ICAgICAgICBvdXQucHJpbnQoIiAoU3RyaWN0TW9kZSkiKTsKLSAgICBvdXQucHJpbnQoIiwgYmMj
IiwgY2FsbGVyLmJ5dGVjb2RlSW5kZXgsICIsICIsIGtpbmQpOworICAgIG91dC5wcmludCgiLCBi
YyMiLCBkaXJlY3RDYWxsZXIuYnl0ZWNvZGVJbmRleCwgIiwgIiwgc3RhdGljX2Nhc3Q8S2luZD4o
a2luZCkpOwogICAgIGlmIChpc0Nsb3N1cmVDYWxsKQogICAgICAgICBvdXQucHJpbnQoIiwgY2xv
c3VyZSBjYWxsIik7CiAgICAgZWxzZQpAQCAtMTA1LDEyICsxMDUsMTggQEAgdm9pZCBwcmludElu
dGVybmFsKFByaW50U3RyZWFtJiBvdXQsIEpTQwogICAgIGNhc2UgSlNDOjpJbmxpbmVDYWxsRnJh
bWU6OkNvbnN0cnVjdDoKICAgICAgICAgb3V0LnByaW50KCJDb25zdHJ1Y3QiKTsKICAgICAgICAg
cmV0dXJuOworICAgIGNhc2UgSlNDOjpJbmxpbmVDYWxsRnJhbWU6OlRhaWxDYWxsOgorICAgICAg
ICBvdXQucHJpbnQoIlRhaWxDYWxsIik7CisgICAgICAgIHJldHVybjsKICAgICBjYXNlIEpTQzo6
SW5saW5lQ2FsbEZyYW1lOjpDYWxsVmFyYXJnczoKICAgICAgICAgb3V0LnByaW50KCJDYWxsVmFy
YXJncyIpOwogICAgICAgICByZXR1cm47CiAgICAgY2FzZSBKU0M6OklubGluZUNhbGxGcmFtZTo6
Q29uc3RydWN0VmFyYXJnczoKICAgICAgICAgb3V0LnByaW50KCJDb25zdHJ1Y3RWYXJhcmdzIik7
CiAgICAgICAgIHJldHVybjsKKyAgICBjYXNlIEpTQzo6SW5saW5lQ2FsbEZyYW1lOjpUYWlsQ2Fs
bFZhcmFyZ3M6CisgICAgICAgIG91dC5wcmludCgiVGFpbENhbGxWYXJhcmdzIik7CisgICAgICAg
IHJldHVybjsKICAgICBjYXNlIEpTQzo6SW5saW5lQ2FsbEZyYW1lOjpHZXR0ZXJDYWxsOgogICAg
ICAgICBvdXQucHJpbnQoIkdldHRlckNhbGwiKTsKICAgICAgICAgcmV0dXJuOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGluZUNhbGxGcmFtZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbmxpbmVDYWxsRnJhbWUuaAkocmV2
aXNpb24gMTkwMTUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lubGluZUNh
bGxGcmFtZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00OSwzNyArNDksNTkgQEAgc3RydWN0IElubGlu
ZUNhbGxGcmFtZSB7CiAgICAgZW51bSBLaW5kIHsKICAgICAgICAgQ2FsbCwKICAgICAgICAgQ29u
c3RydWN0LAorICAgICAgICBUYWlsQ2FsbCwKICAgICAgICAgQ2FsbFZhcmFyZ3MsCiAgICAgICAg
IENvbnN0cnVjdFZhcmFyZ3MsCisgICAgICAgIFRhaWxDYWxsVmFyYXJncywKICAgICAgICAgCiAg
ICAgICAgIC8vIEZvciB0aGVzZSwgdGhlIHN0YWNrT2Zmc2V0IGluY29ycG9yYXRlcyB0aGUgYXJn
dW1lbnQgY291bnQgcGx1cyB0aGUgdHJ1ZSByZXR1cm4gUEMKICAgICAgICAgLy8gc2xvdC4KICAg
ICAgICAgR2V0dGVyQ2FsbCwKICAgICAgICAgU2V0dGVyQ2FsbAogICAgIH07Ci0gICAgCi0gICAg
c3RhdGljIEtpbmQga2luZEZvcihDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCisKKyAgICBz
dGF0aWMgQ2FsbE1vZGUgY2FsbE1vZGVGb3IoS2luZCBraW5kKQogICAgIHsKICAgICAgICAgc3dp
dGNoIChraW5kKSB7Ci0gICAgICAgIGNhc2UgQ29kZUZvckNhbGw6CisgICAgICAgIGNhc2UgQ2Fs
bDoKKyAgICAgICAgY2FzZSBDYWxsVmFyYXJnczoKKyAgICAgICAgY2FzZSBHZXR0ZXJDYWxsOgor
ICAgICAgICBjYXNlIFNldHRlckNhbGw6CisgICAgICAgICAgICByZXR1cm4gQ2FsbE1vZGU6OlJl
Z3VsYXI7CisgICAgICAgIGNhc2UgVGFpbENhbGw6CisgICAgICAgIGNhc2UgVGFpbENhbGxWYXJh
cmdzOgorICAgICAgICAgICAgcmV0dXJuIENhbGxNb2RlOjpUYWlsOworICAgICAgICBjYXNlIENv
bnN0cnVjdDoKKyAgICAgICAgY2FzZSBDb25zdHJ1Y3RWYXJhcmdzOgorICAgICAgICAgICAgcmV0
dXJuIENhbGxNb2RlOjpDb25zdHJ1Y3Q7CisgICAgICAgIH0KKyAgICAgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICBzdGF0aWMgS2luZCBraW5kRm9yKENhbGxN
b2RlIGNhbGxNb2RlKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChjYWxsTW9kZSkgeworICAgICAg
ICBjYXNlIENhbGxNb2RlOjpSZWd1bGFyOgogICAgICAgICAgICAgcmV0dXJuIENhbGw7Ci0gICAg
ICAgIGNhc2UgQ29kZUZvckNvbnN0cnVjdDoKKyAgICAgICAgY2FzZSBDYWxsTW9kZTo6Q29uc3Ry
dWN0OgogICAgICAgICAgICAgcmV0dXJuIENvbnN0cnVjdDsKKyAgICAgICAgY2FzZSBDYWxsTW9k
ZTo6VGFpbDoKKyAgICAgICAgICAgIHJldHVybiBUYWlsQ2FsbDsKICAgICAgICAgfQogICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4gQ2FsbDsKICAg
ICB9CiAgICAgCi0gICAgc3RhdGljIEtpbmQgdmFyYXJnc0tpbmRGb3IoQ29kZVNwZWNpYWxpemF0
aW9uS2luZCBraW5kKQorICAgIHN0YXRpYyBLaW5kIHZhcmFyZ3NLaW5kRm9yKENhbGxNb2RlIGNh
bGxNb2RlKQogICAgIHsKLSAgICAgICAgc3dpdGNoIChraW5kKSB7Ci0gICAgICAgIGNhc2UgQ29k
ZUZvckNhbGw6CisgICAgICAgIHN3aXRjaCAoY2FsbE1vZGUpIHsKKyAgICAgICAgY2FzZSBDYWxs
TW9kZTo6UmVndWxhcjoKICAgICAgICAgICAgIHJldHVybiBDYWxsVmFyYXJnczsKLSAgICAgICAg
Y2FzZSBDb2RlRm9yQ29uc3RydWN0OgorICAgICAgICBjYXNlIENhbGxNb2RlOjpDb25zdHJ1Y3Q6
CiAgICAgICAgICAgICByZXR1cm4gQ29uc3RydWN0VmFyYXJnczsKKyAgICAgICAgY2FzZSBDYWxs
TW9kZTo6VGFpbDoKKyAgICAgICAgICAgIHJldHVybiBUYWlsQ2FsbFZhcmFyZ3M7CiAgICAgICAg
IH0KICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKLSAgICAgICAgcmV0dXJu
IENhbGw7CiAgICAgfQogICAgIAogICAgIHN0YXRpYyBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIHNw
ZWNpYWxpemF0aW9uS2luZEZvcihLaW5kIGtpbmQpCkBAIC04Nyw2ICsxMDksOCBAQCBzdHJ1Y3Qg
SW5saW5lQ2FsbEZyYW1lIHsKICAgICAgICAgc3dpdGNoIChraW5kKSB7CiAgICAgICAgIGNhc2Ug
Q2FsbDoKICAgICAgICAgY2FzZSBDYWxsVmFyYXJnczoKKyAgICAgICAgY2FzZSBUYWlsQ2FsbDoK
KyAgICAgICAgY2FzZSBUYWlsQ2FsbFZhcmFyZ3M6CiAgICAgICAgIGNhc2UgR2V0dGVyQ2FsbDoK
ICAgICAgICAgY2FzZSBTZXR0ZXJDYWxsOgogICAgICAgICAgICAgcmV0dXJuIENvZGVGb3JDYWxs
OwpAQCAtOTUsMjQgKzExOSw2NCBAQCBzdHJ1Y3QgSW5saW5lQ2FsbEZyYW1lIHsKICAgICAgICAg
ICAgIHJldHVybiBDb2RlRm9yQ29uc3RydWN0OwogICAgICAgICB9CiAgICAgICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBDb2RlRm9yQ2FsbDsKICAgICB9
CiAgICAgCiAgICAgc3RhdGljIGJvb2wgaXNWYXJhcmdzKEtpbmQga2luZCkKICAgICB7CiAgICAg
ICAgIHN3aXRjaCAoa2luZCkgewogICAgICAgICBjYXNlIENhbGxWYXJhcmdzOgorICAgICAgICBj
YXNlIFRhaWxDYWxsVmFyYXJnczoKICAgICAgICAgY2FzZSBDb25zdHJ1Y3RWYXJhcmdzOgogICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgICAgIH0KICAgICB9CisKKyAgICBzdGF0aWMgYm9vbCBpc1RhaWwoS2lu
ZCBraW5kKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChraW5kKSB7CisgICAgICAgIGNhc2UgVGFp
bENhbGw6CisgICAgICAgIGNhc2UgVGFpbENhbGxWYXJhcmdzOgorICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
ICAgIH0KKyAgICB9CisgICAgYm9vbCBpc1RhaWwoKSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0
dXJuIGlzVGFpbChzdGF0aWNfY2FzdDxLaW5kPihraW5kKSk7CisgICAgfQorCisgICAgc3RhdGlj
IENvZGVPcmlnaW4qIGNvbXB1dGVDYWxsZXJTa2lwcGluZ0RlYWRGcmFtZXMoSW5saW5lQ2FsbEZy
YW1lKiBpbmxpbmVDYWxsRnJhbWUpCisgICAgeworICAgICAgICBDb2RlT3JpZ2luKiBjb2RlT3Jp
Z2luOworICAgICAgICBib29sIHRhaWxDYWxsZWU7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAg
IHRhaWxDYWxsZWUgPSBpbmxpbmVDYWxsRnJhbWUtPmlzVGFpbCgpOworICAgICAgICAgICAgY29k
ZU9yaWdpbiA9ICZpbmxpbmVDYWxsRnJhbWUtPmRpcmVjdENhbGxlcjsKKyAgICAgICAgICAgIGlu
bGluZUNhbGxGcmFtZSA9IGNvZGVPcmlnaW4tPmlubGluZUNhbGxGcmFtZTsKKyAgICAgICAgfSB3
aGlsZSAoaW5saW5lQ2FsbEZyYW1lICYmIHRhaWxDYWxsZWUpOworICAgICAgICBpZiAodGFpbENh
bGxlZSkKKyAgICAgICAgICAgIHJldHVybiBudWxscHRyOworICAgICAgICByZXR1cm4gY29kZU9y
aWdpbjsKKyAgICB9CisKKyAgICBDb2RlT3JpZ2luKiBnZXRDYWxsZXJTa2lwcGluZ0RlYWRGcmFt
ZXMoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNvbXB1dGVDYWxsZXJTa2lwcGluZ0RlYWRGcmFt
ZXModGhpcyk7CisgICAgfQorCisgICAgSW5saW5lQ2FsbEZyYW1lKiBnZXRDYWxsZXJJbmxpbmVG
cmFtZVNraXBwaW5nRGVhZEZyYW1lcygpCisgICAgeworICAgICAgICBDb2RlT3JpZ2luKiBjYWxs
ZXIgPSBnZXRDYWxsZXJTa2lwcGluZ0RlYWRGcmFtZXMoKTsKKyAgICAgICAgcmV0dXJuIGNhbGxl
ciA/IGNhbGxlci0+aW5saW5lQ2FsbEZyYW1lIDogbnVsbHB0cjsKKyAgICB9CiAgICAgCiAgICAg
VmVjdG9yPFZhbHVlUmVjb3Zlcnk+IGFyZ3VtZW50czsgLy8gSW5jbHVkZXMgJ3RoaXMnLgogICAg
IFdyaXRlQmFycmllcjxTY3JpcHRFeGVjdXRhYmxlPiBleGVjdXRhYmxlOwogICAgIFZhbHVlUmVj
b3ZlcnkgY2FsbGVlUmVjb3Zlcnk7Ci0gICAgQ29kZU9yaWdpbiBjYWxsZXI7CisgICAgQ29kZU9y
aWdpbiBkaXJlY3RDYWxsZXI7CiAKICAgICBzaWduZWQgc3RhY2tPZmZzZXQgOiAyODsKICAgICB1
bnNpZ25lZCBraW5kIDogMzsgLy8gcmVhbCB0eXBlIGlzIEtpbmQKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxp
bmVzLmgJKHJldmlzaW9uIDE5MDE1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTU1Miw2ICsx
NTUyLDEzIEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICBj
YXNlIFJldHVybjoKICAgICAgICAgbV9zdGF0ZS5zZXRJc1ZhbGlkKGZhbHNlKTsKICAgICAgICAg
YnJlYWs7CisKKyAgICBjYXNlIFRhaWxDYWxsOgorICAgIGNhc2UgVGFpbENhbGxWYXJhcmdzOgor
ICAgIGNhc2UgVGFpbENhbGxGb3J3YXJkVmFyYXJnczoKKyAgICAgICAgY2xvYmJlcldvcmxkKG5v
ZGUtPm9yaWdpbi5zZW1hbnRpYywgY2xvYmJlckxpbWl0KTsKKyAgICAgICAgbV9zdGF0ZS5zZXRJ
c1ZhbGlkKGZhbHNlKTsKKyAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNhc2UgVGhyb3c6
CiAgICAgY2FzZSBUaHJvd1JlZmVyZW5jZUVycm9yOgpAQCAtMjQ0MiwxMSArMjQ0OSwxNCBAQCBi
b29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgCiAgICAgY2FzZSBDYWxsOgorICAgIGNhc2UgVGFpbENhbGxJbmxpbmVkQ2Fs
bGVyOgogICAgIGNhc2UgQ29uc3RydWN0OgogICAgIGNhc2UgQ2FsbFZhcmFyZ3M6CiAgICAgY2Fz
ZSBDYWxsRm9yd2FyZFZhcmFyZ3M6CisgICAgY2FzZSBUYWlsQ2FsbFZhcmFyZ3NJbmxpbmVkQ2Fs
bGVyOgogICAgIGNhc2UgQ29uc3RydWN0VmFyYXJnczoKICAgICBjYXNlIENvbnN0cnVjdEZvcndh
cmRWYXJhcmdzOgorICAgIGNhc2UgVGFpbENhbGxGb3J3YXJkVmFyYXJnc0lubGluZWRDYWxsZXI6
CiAgICAgICAgIGNsb2JiZXJXb3JsZChub2RlLT5vcmlnaW4uc2VtYW50aWMsIGNsb2JiZXJMaW1p
dCk7CiAgICAgICAgIGZvck5vZGUobm9kZSkubWFrZUhlYXBUb3AoKTsKICAgICAgICAgYnJlYWs7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c0VsaW1pbmF0aW9u
UGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJn
dW1lbnRzRWxpbWluYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDE5MDE1MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzRWxpbWluYXRpb25QaGFzZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE2Nyw2ICsxNjcsOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAg
ICAKICAgICAgICAgICAgICAgICBjYXNlIENhbGxWYXJhcmdzOgogICAgICAgICAgICAgICAgIGNh
c2UgQ29uc3RydWN0VmFyYXJnczoKKyAgICAgICAgICAgICAgICBjYXNlIFRhaWxDYWxsVmFyYXJn
czoKKyAgICAgICAgICAgICAgICBjYXNlIFRhaWxDYWxsVmFyYXJnc0lubGluZWRDYWxsZXI6CiAg
ICAgICAgICAgICAgICAgICAgIGVzY2FwZShub2RlLT5jaGlsZDEoKSk7CiAgICAgICAgICAgICAg
ICAgICAgIGVzY2FwZShub2RlLT5jaGlsZDMoKSk7CiAgICAgICAgICAgICAgICAgICAgIGJyZWFr
OwpAQCAtNTYwLDcgKzU2Miw5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBjYXNlIENhbGxWYXJhcmdzOgotICAgICAg
ICAgICAgICAgIGNhc2UgQ29uc3RydWN0VmFyYXJnczogeworICAgICAgICAgICAgICAgIGNhc2Ug
Q29uc3RydWN0VmFyYXJnczoKKyAgICAgICAgICAgICAgICBjYXNlIFRhaWxDYWxsVmFyYXJnczoK
KyAgICAgICAgICAgICAgICBjYXNlIFRhaWxDYWxsVmFyYXJnc0lubGluZWRDYWxsZXI6IHsKICAg
ICAgICAgICAgICAgICAgICAgTm9kZSogY2FuZGlkYXRlID0gbm9kZS0+Y2hpbGQyKCkubm9kZSgp
OwogICAgICAgICAgICAgICAgICAgICBpZiAoIW1fY2FuZGlkYXRlcy5jb250YWlucyhjYW5kaWRh
dGUpKQogICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC01ODUsMTYgKzU4OSw0NCBA
QCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5tX3ZhckFyZ0NoaWxk
cmVuLmFwcGVuZChub2RlLT5jaGlsZDMoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICBmb3Ig
KE5vZGUqIGFyZ3VtZW50IDogYXJndW1lbnRzKQogICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG1fZ3JhcGgubV92YXJBcmdDaGlsZHJlbi5hcHBlbmQoRWRnZShhcmd1bWVudCkpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0T3BBbmREZWZhdWx0RmxhZ3MoCi0gICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbm9kZS0+b3AoKSA9PSBDYWxsVmFyYXJncyA/IENhbGwgOiBDb25z
dHJ1Y3QpOworICAgICAgICAgICAgICAgICAgICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBjYXNlIENhbGxWYXJhcmdzOgorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIG5vZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdzKENhbGwpOworICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICAgICAgY2FzZSBD
b25zdHJ1Y3RWYXJhcmdzOgorICAgICAgICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPnNldE9w
QW5kRGVmYXVsdEZsYWdzKENvbnN0cnVjdCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgICAgICAgICBjYXNlIFRhaWxDYWxsVmFyYXJnczoKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBub2RlLT5zZXRPcEFuZERlZmF1bHRGbGFncyhUYWls
Q2FsbCk7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgICAgICAgICBjYXNlIFRhaWxDYWxsVmFyYXJnc0lubGluZWRDYWxsZXI6CisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0T3BBbmREZWZhdWx0RmxhZ3MoVGFpbENhbGxJbmxp
bmVkQ2FsbGVyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAgICAgICAgIG5vZGUtPmNoaWxkcmVuID0gQWRqYWNlbmN5TGlzdCgKICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBBZGphY2VuY3lMaXN0OjpWYXJpYWJsZSwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICBmaXJzdENoaWxkLCBtX2dyYXBoLm1fdmFyQXJnQ2hpbGRy
ZW4uc2l6ZSgpIC0gZmlyc3RDaGlsZCk7CiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
ICAgICAgICAgbm9kZS0+c2V0T3BBbmREZWZhdWx0RmxhZ3MoCi0gICAgICAgICAgICAgICAgICAg
ICAgICBub2RlLT5vcCgpID09IENhbGxWYXJhcmdzID8gQ2FsbEZvcndhcmRWYXJhcmdzIDogQ29u
c3RydWN0Rm9yd2FyZFZhcmFyZ3MpOworICAgICAgICAgICAgICAgICAgICBzd2l0Y2ggKG5vZGUt
Pm9wKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBDYWxsVmFyYXJnczoKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG5vZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdzKENhbGxGb3J3YXJkVmFy
YXJncyk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAg
ICAgY2FzZSBDb25zdHJ1Y3RWYXJhcmdzOgorICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+
c2V0T3BBbmREZWZhdWx0RmxhZ3MoQ29uc3RydWN0Rm9yd2FyZFZhcmFyZ3MpOworICAgICAgICAg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGNhc2UgVGFpbENhbGxW
YXJhcmdzOgorICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0T3BBbmREZWZhdWx0Rmxh
Z3MoVGFpbENhbGxGb3J3YXJkVmFyYXJncyk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICAgICAgY2FzZSBUYWlsQ2FsbFZhcmFyZ3NJbmxpbmVkQ2FsbGVy
OgorICAgICAgICAgICAgICAgICAgICAgICAgbm9kZS0+c2V0T3BBbmREZWZhdWx0RmxhZ3MoVGFp
bENhbGxGb3J3YXJkVmFyYXJnc0lubGluZWRDYWxsZXIpOworICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAg
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2lj
QmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Jhc2lj
QmxvY2suaAkocmV2aXNpb24gMTkwMTUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdCYXNpY0Jsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTkyLDYgKzkyLDkgQEAgc3RydWN0IEJh
c2ljQmxvY2sgOiBSZWZDb3VudGVkPEJhc2ljQmxvYwogICAgICAgICAgICAgY2FzZSBCcmFuY2g6
CiAgICAgICAgICAgICBjYXNlIFN3aXRjaDoKICAgICAgICAgICAgIGNhc2UgUmV0dXJuOgorICAg
ICAgICAgICAgY2FzZSBUYWlsQ2FsbDoKKyAgICAgICAgICAgIGNhc2UgVGFpbENhbGxWYXJhcmdz
OgorICAgICAgICAgICAgY2FzZSBUYWlsQ2FsbEZvcndhcmRWYXJhcmdzOgogICAgICAgICAgICAg
Y2FzZSBVbnJlYWNoYWJsZToKICAgICAgICAgICAgICAgICByZXR1cm4gTm9kZUFuZEluZGV4KG5v
ZGUsIGkpOwogICAgICAgICAgICAgLy8gVGhlIGJpdHRlciBlbmQgY2FuIGNvbnRhaW4gUGhhbnRv
bXMgYW5kIHRoZSBsaWtlLiBUaGVyZSB3aWxsIHByb2JhYmx5IG9ubHkgYmUgb25lIG9yIHR3byBu
b2RlcyBhZnRlciB0aGUgdGVybWluYWwuIFRoZXkgYXJlIGFsbCBuby1vcHMgYW5kIHdpbGwgbm90
IGhhdmUgYW55IGNoZWNrZWQgY2hpbGRyZW4uCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gMTkwMTUzKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE4MywxNCArMTgzLDE0IEBAIHByaXZhdGU6CiAgICAgICAgIE5vZGUqIGNhbGxUYXJn
ZXQsIGludCBhcmdDb3VudCwgaW50IHJlZ2lzdGVyT2Zmc2V0LCBDYWxsTGlua1N0YXR1cywKICAg
ICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbik7CiAgICAgdm9pZCBoYW5kbGVDYWxsKAot
ICAgICAgICBpbnQgcmVzdWx0LCBOb2RlVHlwZSBvcCwgSW5saW5lQ2FsbEZyYW1lOjpLaW5kLCB1
bnNpZ25lZCBpbnN0cnVjdGlvblNpemUsCisgICAgICAgIGludCByZXN1bHQsIE5vZGVUeXBlIG9w
LCBDYWxsTW9kZSwgdW5zaWduZWQgaW5zdHJ1Y3Rpb25TaXplLAogICAgICAgICBOb2RlKiBjYWxs
VGFyZ2V0LCBpbnQgYXJnQ291bnQsIGludCByZWdpc3Rlck9mZnNldCwgQ2FsbExpbmtTdGF0dXMp
OwotICAgIHZvaWQgaGFuZGxlQ2FsbChpbnQgcmVzdWx0LCBOb2RlVHlwZSBvcCwgQ29kZVNwZWNp
YWxpemF0aW9uS2luZCwgdW5zaWduZWQgaW5zdHJ1Y3Rpb25TaXplLCBpbnQgY2FsbGVlLCBpbnQg
YXJnQ291bnQsIGludCByZWdpc3Rlck9mZnNldCk7Ci0gICAgdm9pZCBoYW5kbGVDYWxsKEluc3Ry
dWN0aW9uKiBwYywgTm9kZVR5cGUgb3AsIENvZGVTcGVjaWFsaXphdGlvbktpbmQpOwotICAgIHZv
aWQgaGFuZGxlVmFyYXJnc0NhbGwoSW5zdHJ1Y3Rpb24qIHBjLCBOb2RlVHlwZSBvcCwgQ29kZVNw
ZWNpYWxpemF0aW9uS2luZCk7CisgICAgdm9pZCBoYW5kbGVDYWxsKGludCByZXN1bHQsIE5vZGVU
eXBlIG9wLCBDYWxsTW9kZSwgdW5zaWduZWQgaW5zdHJ1Y3Rpb25TaXplLCBpbnQgY2FsbGVlLCBp
bnQgYXJnQ291bnQsIGludCByZWdpc3Rlck9mZnNldCk7CisgICAgdm9pZCBoYW5kbGVDYWxsKElu
c3RydWN0aW9uKiBwYywgTm9kZVR5cGUgb3AsIENhbGxNb2RlKTsKKyAgICB2b2lkIGhhbmRsZVZh
cmFyZ3NDYWxsKEluc3RydWN0aW9uKiBwYywgTm9kZVR5cGUgb3AsIENhbGxNb2RlKTsKICAgICB2
b2lkIGVtaXRGdW5jdGlvbkNoZWNrcyhDYWxsVmFyaWFudCwgTm9kZSogY2FsbFRhcmdldCwgVmly
dHVhbFJlZ2lzdGVyIHRoaXNBcmd1bW50KTsKICAgICB2b2lkIGVtaXRBcmd1bWVudFBoYW50b21z
KGludCByZWdpc3Rlck9mZnNldCwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzKTsKLSAg
ICB1bnNpZ25lZCBpbmxpbmluZ0Nvc3QoQ2FsbFZhcmlhbnQsIGludCBhcmd1bWVudENvdW50SW5j
bHVkaW5nVGhpcywgQ29kZVNwZWNpYWxpemF0aW9uS2luZCk7IC8vIFJldHVybiBVSU5UX01BWCBp
ZiBpdCdzIG5vdCBhbiBpbmxpbmluZyBjYW5kaWRhdGUuIEJ5IGNvbnZlbnRpb24sIGludHJpbnNp
Y3MgaGF2ZSBhIGNvc3Qgb2YgMS4KKyAgICB1bnNpZ25lZCBpbmxpbmluZ0Nvc3QoQ2FsbFZhcmlh
bnQsIGludCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgQ2FsbE1vZGUpOyAvLyBSZXR1cm4g
VUlOVF9NQVggaWYgaXQncyBub3QgYW4gaW5saW5pbmcgY2FuZGlkYXRlLiBCeSBjb252ZW50aW9u
LCBpbnRyaW5zaWNzIGhhdmUgYSBjb3N0IG9mIDEuCiAgICAgLy8gSGFuZGxlIGlubGluaW5nLiBS
ZXR1cm4gdHJ1ZSBpZiBpdCBzdWNjZWVkZWQsIGZhbHNlIGlmIHdlIG5lZWQgdG8gcGxhbnQgYSBj
YWxsLgogICAgIGJvb2wgaGFuZGxlSW5saW5pbmcoTm9kZSogY2FsbFRhcmdldE5vZGUsIGludCBy
ZXN1bHRPcGVyYW5kLCBjb25zdCBDYWxsTGlua1N0YXR1cyYsIGludCByZWdpc3Rlck9mZnNldCwg
VmlydHVhbFJlZ2lzdGVyIHRoaXNBcmd1bWVudCwgVmlydHVhbFJlZ2lzdGVyIGFyZ3VtZW50c0Fy
Z3VtZW50LCB1bnNpZ25lZCBhcmd1bWVudHNPZmZzZXQsIGludCBhcmd1bWVudENvdW50SW5jbHVk
aW5nVGhpcywgdW5zaWduZWQgbmV4dE9mZnNldCwgTm9kZVR5cGUgY2FsbE9wLCBJbmxpbmVDYWxs
RnJhbWU6OktpbmQsIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24pOwogICAgIGVudW0gQ2FsbGVy
TGlua2FiaWxpdHkgeyBDYWxsZXJEb2VzTm9ybWFsTGlua2luZywgQ2FsbGVyTGlua3NNYW51YWxs
eSB9OwpAQCAtNjQ4LDYgKzY0OCwxMSBAQCBwcml2YXRlOgogICAgICAgICByZXR1cm4gbV9pbmxp
bmVTdGFja1RvcC0+bV9pbmxpbmVDYWxsRnJhbWU7CiAgICAgfQogCisgICAgYm9vbCBhbGxJbmxp
bmVGcmFtZXNBcmVUYWlsQ2FsbHMoKQorICAgIHsKKyAgICAgICAgcmV0dXJuICFpbmxpbmVDYWxs
RnJhbWUoKSB8fCAhaW5saW5lQ2FsbEZyYW1lKCktPmdldENhbGxlclNraXBwaW5nRGVhZEZyYW1l
cygpOworICAgIH0KKwogICAgIENvZGVPcmlnaW4gY3VycmVudENvZGVPcmlnaW4oKQogICAgIHsK
ICAgICAgICAgcmV0dXJuIENvZGVPcmlnaW4obV9jdXJyZW50SW5kZXgsIGlubGluZUNhbGxGcmFt
ZSgpKTsKQEAgLTczNiw3ICs3NDEsNyBAQCBwcml2YXRlOgogICAgIAogICAgIE5vZGUqIGFkZENh
bGxXaXRob3V0U2V0dGluZ1Jlc3VsdCgKICAgICAgICAgTm9kZVR5cGUgb3AsIE9wSW5mbyBvcElu
Zm8sIE5vZGUqIGNhbGxlZSwgaW50IGFyZ0NvdW50LCBpbnQgcmVnaXN0ZXJPZmZzZXQsCi0gICAg
ICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24pCisgICAgICAgIE9wSW5mbyBwcmVkaWN0aW9u
KQogICAgIHsKICAgICAgICAgYWRkVmFyQXJnQ2hpbGQoY2FsbGVlKTsKICAgICAgICAgc2l6ZV90
IGZyYW1lU2l6ZSA9IEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlclNpemUgKyBhcmdDb3VudDsKQEAg
LTc0OSwxNSArNzU0LDIyIEBAIHByaXZhdGU6CiAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwg
YXJnQ291bnQ7ICsraSkKICAgICAgICAgICAgIGFkZFZhckFyZ0NoaWxkKGdldCh2aXJ0dWFsUmVn
aXN0ZXJGb3JBcmd1bWVudChpLCByZWdpc3Rlck9mZnNldCkpKTsKIAotICAgICAgICByZXR1cm4g
YWRkVG9HcmFwaChOb2RlOjpWYXJBcmcsIG9wLCBvcEluZm8sIE9wSW5mbyhwcmVkaWN0aW9uKSk7
CisgICAgICAgIHJldHVybiBhZGRUb0dyYXBoKE5vZGU6OlZhckFyZywgb3AsIG9wSW5mbywgcHJl
ZGljdGlvbik7CiAgICAgfQogICAgIAogICAgIE5vZGUqIGFkZENhbGwoCiAgICAgICAgIGludCBy
ZXN1bHQsIE5vZGVUeXBlIG9wLCBPcEluZm8gb3BJbmZvLCBOb2RlKiBjYWxsZWUsIGludCBhcmdD
b3VudCwgaW50IHJlZ2lzdGVyT2Zmc2V0LAogICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0
aW9uKQogICAgIHsKKyAgICAgICAgaWYgKG9wID09IFRhaWxDYWxsKSB7CisgICAgICAgICAgICBp
ZiAoYWxsSW5saW5lRnJhbWVzQXJlVGFpbENhbGxzKCkpCisgICAgICAgICAgICAgICAgcmV0dXJu
IGFkZENhbGxXaXRob3V0U2V0dGluZ1Jlc3VsdChvcCwgT3BJbmZvKCksIGNhbGxlZSwgYXJnQ291
bnQsIHJlZ2lzdGVyT2Zmc2V0LCBPcEluZm8oKSk7CisgICAgICAgICAgICBvcCA9IFRhaWxDYWxs
SW5saW5lZENhbGxlcjsKKyAgICAgICAgfQorCisKICAgICAgICAgTm9kZSogY2FsbCA9IGFkZENh
bGxXaXRob3V0U2V0dGluZ1Jlc3VsdCgKLSAgICAgICAgICAgIG9wLCBvcEluZm8sIGNhbGxlZSwg
YXJnQ291bnQsIHJlZ2lzdGVyT2Zmc2V0LCBwcmVkaWN0aW9uKTsKKyAgICAgICAgICAgIG9wLCBv
cEluZm8sIGNhbGxlZSwgYXJnQ291bnQsIHJlZ2lzdGVyT2Zmc2V0LCBPcEluZm8ocHJlZGljdGlv
bikpOwogICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0UmVnKHJlc3VsdCk7CiAgICAgICAg
IGlmIChyZXN1bHRSZWcuaXNWYWxpZCgpKQogICAgICAgICAgICAgc2V0KHJlc3VsdFJlZywgY2Fs
bCk7CkBAIC03NzYsMTQgKzc4OCw2MiBAQCBwcml2YXRlOgogICAgIAogICAgIFNwZWN1bGF0ZWRU
eXBlIGdldFByZWRpY3Rpb25XaXRob3V0T1NSRXhpdCh1bnNpZ25lZCBieXRlY29kZUluZGV4KQog
ICAgIHsKLSAgICAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9pbmxpbmVTdGFja1Rv
cC0+bV9wcm9maWxlZEJsb2NrLT5tX2xvY2spOwotICAgICAgICByZXR1cm4gbV9pbmxpbmVTdGFj
a1RvcC0+bV9wcm9maWxlZEJsb2NrLT52YWx1ZVByb2ZpbGVQcmVkaWN0aW9uRm9yQnl0ZWNvZGVP
ZmZzZXQobG9ja2VyLCBieXRlY29kZUluZGV4KTsKKyAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJl
ZGljdGlvbjsKKyAgICAgICAgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2NrID0gbnVsbHB0cjsKKwor
ICAgICAgICB7CisgICAgICAgICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2lubGlu
ZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPm1fbG9jayk7CisgICAgICAgICAgICBwcmVkaWN0
aW9uID0gbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT52YWx1ZVByb2ZpbGVQcmVk
aWN0aW9uRm9yQnl0ZWNvZGVPZmZzZXQobG9ja2VyLCBieXRlY29kZUluZGV4KTsKKworICAgICAg
ICAgICAgaWYgKHByZWRpY3Rpb24gPT0gU3BlY05vbmUpIHsKKyAgICAgICAgICAgICAgICAvLyBJ
ZiB3ZSBoYXZlIG5vIGluZm9ybWF0aW9uIGFib3V0IHRoZSB2YWx1ZXMgdGhpcworICAgICAgICAg
ICAgICAgIC8vIG5vZGUgZ2VuZXJhdGVzLCB3ZSBjaGVjayBpZiBieSBhbnkgY2hhbmNlIGl0IGlz
CisgICAgICAgICAgICAgICAgLy8gYSB0YWlsIGNhbGwgb3Bjb2RlLiBJbiB0aGF0IGNhc2UsIHdl
IHdhbGsgdXAgdGhlCisgICAgICAgICAgICAgICAgLy8gaW5saW5lIGZyYW1lcyB0byBmaW5kIGEg
Y2FsbCBoaWdoZXIgaW4gdGhlIGNhbGwKKyAgICAgICAgICAgICAgICAvLyBjaGFpbiBhbmQgdXNl
IGl0cyBwcmVkaWN0aW9uLiBJZiB3ZSBvbmx5IGhhdmUKKyAgICAgICAgICAgICAgICAvLyBpbmxp
bmVkIHRhaWwgY2FsbCBmcmFtZXMsIHdlIHVzZSBTcGVjRnVsbFRvcAorICAgICAgICAgICAgICAg
IC8vIHRvIGF2b2lkIGEgc3B1cmlvdXMgT1NSIGV4aXQuCisgICAgICAgICAgICAgICAgSW5zdHJ1
Y3Rpb24qIGluc3RydWN0aW9uID0gbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5p
bnN0cnVjdGlvbnMoKS5iZWdpbigpICsgYnl0ZWNvZGVJbmRleDsKKyAgICAgICAgICAgICAgICBP
cGNvZGVJRCBvcGNvZGVJRCA9IG1fdm0tPmludGVycHJldGVyLT5nZXRPcGNvZGVJRChpbnN0cnVj
dGlvbi0+dS5vcGNvZGUpOworCisgICAgICAgICAgICAgICAgc3dpdGNoIChvcGNvZGVJRCkgewor
ICAgICAgICAgICAgICAgIGNhc2Ugb3BfdGFpbF9jYWxsOgorICAgICAgICAgICAgICAgIGNhc2Ug
b3BfdGFpbF9jYWxsX3ZhcmFyZ3M6IHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKCFpbmxpbmVD
YWxsRnJhbWUoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgcHJlZGljdGlvbiA9IFNwZWNG
dWxsVG9wOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICAgICAgQ29kZU9yaWdpbiogY29kZU9yaWdpbiA9IGlubGlu
ZUNhbGxGcmFtZSgpLT5nZXRDYWxsZXJTa2lwcGluZ0RlYWRGcmFtZXMoKTsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKCFjb2RlT3JpZ2luKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBwcmVk
aWN0aW9uID0gU3BlY0Z1bGxUb3A7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBJbmxpbmVTdGFja0VudHJ5
KiBzdGFjayA9IG1faW5saW5lU3RhY2tUb3A7CisgICAgICAgICAgICAgICAgICAgIHdoaWxlIChz
dGFjay0+bV9pbmxpbmVDYWxsRnJhbWUgIT0gY29kZU9yaWdpbi0+aW5saW5lQ2FsbEZyYW1lKQor
ICAgICAgICAgICAgICAgICAgICAgICAgc3RhY2sgPSBzdGFjay0+bV9jYWxsZXI7CisgICAgICAg
ICAgICAgICAgICAgIGJ5dGVjb2RlSW5kZXggPSBjb2RlT3JpZ2luLT5ieXRlY29kZUluZGV4Owor
ICAgICAgICAgICAgICAgICAgICBwcm9maWxlZEJsb2NrID0gc3RhY2stPm1fcHJvZmlsZWRCbG9j
azsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgaWYgKHByb2Zp
bGVkQmxvY2spIHsKKyAgICAgICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKHByb2Zp
bGVkQmxvY2stPm1fbG9jayk7CisgICAgICAgICAgICBwcmVkaWN0aW9uID0gcHJvZmlsZWRCbG9j
ay0+dmFsdWVQcm9maWxlUHJlZGljdGlvbkZvckJ5dGVjb2RlT2Zmc2V0KGxvY2tlciwgYnl0ZWNv
ZGVJbmRleCk7CisgICAgICAgIH0KKworICAgICAgICByZXR1cm4gcHJlZGljdGlvbjsKICAgICB9
CiAKICAgICBTcGVjdWxhdGVkVHlwZSBnZXRQcmVkaWN0aW9uKHVuc2lnbmVkIGJ5dGVjb2RlSW5k
ZXgpCiAgICAgewogICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0gZ2V0UHJlZGlj
dGlvbldpdGhvdXRPU1JFeGl0KGJ5dGVjb2RlSW5kZXgpOwotICAgICAgICAKKwogICAgICAgICBp
ZiAocHJlZGljdGlvbiA9PSBTcGVjTm9uZSkgewogICAgICAgICAgICAgLy8gV2UgaGF2ZSBubyBp
bmZvcm1hdGlvbiBhYm91dCB3aGF0IHZhbHVlcyB0aGlzIG5vZGUgZ2VuZXJhdGVzLiBHaXZlIHVw
CiAgICAgICAgICAgICAvLyBvbiBleGVjdXRpbmcgdGhpcyBjb2RlLCBzaW5jZSB3ZSdyZSBsaWtl
bHkgdG8gZG8gbW9yZSBkYW1hZ2UgdGhhbiBnb29kLgpAQCAtMTA2OSwxNiArMTEyOSwxNyBAQCBw
cml2YXRlOgogICAgIG1fZXhpdE9LID0gZmFsc2U7IFwKICAgICByZXR1cm4gc2hvdWxkQ29udGlu
dWVQYXJzaW5nCiAKLXZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUNhbGwoSW5zdHJ1Y3Rpb24q
IHBjLCBOb2RlVHlwZSBvcCwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQordm9pZCBCeXRl
Q29kZVBhcnNlcjo6aGFuZGxlQ2FsbChJbnN0cnVjdGlvbiogcGMsIE5vZGVUeXBlIG9wLCBDYWxs
TW9kZSBjYWxsTW9kZSkKIHsKICAgICBBU1NFUlQoT1BDT0RFX0xFTkdUSChvcF9jYWxsKSA9PSBP
UENPREVfTEVOR1RIKG9wX2NvbnN0cnVjdCkpOworICAgIEFTU0VSVChPUENPREVfTEVOR1RIKG9w
X2NhbGwpID09IE9QQ09ERV9MRU5HVEgob3BfdGFpbF9jYWxsKSk7CiAgICAgaGFuZGxlQ2FsbCgK
LSAgICAgICAgcGNbMV0udS5vcGVyYW5kLCBvcCwga2luZCwgT1BDT0RFX0xFTkdUSChvcF9jYWxs
KSwKKyAgICAgICAgcGNbMV0udS5vcGVyYW5kLCBvcCwgY2FsbE1vZGUsIE9QQ09ERV9MRU5HVEgo
b3BfY2FsbCksCiAgICAgICAgIHBjWzJdLnUub3BlcmFuZCwgcGNbM10udS5vcGVyYW5kLCAtcGNb
NF0udS5vcGVyYW5kKTsKIH0KIAogdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlQ2FsbCgKLSAg
ICBpbnQgcmVzdWx0LCBOb2RlVHlwZSBvcCwgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kLCB1
bnNpZ25lZCBpbnN0cnVjdGlvblNpemUsCisgICAgaW50IHJlc3VsdCwgTm9kZVR5cGUgb3AsIENh
bGxNb2RlIGNhbGxNb2RlLCB1bnNpZ25lZCBpbnN0cnVjdGlvblNpemUsCiAgICAgaW50IGNhbGxl
ZSwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBpbnQgcmVnaXN0ZXJPZmZzZXQpCiB7
CiAgICAgTm9kZSogY2FsbFRhcmdldCA9IGdldChWaXJ0dWFsUmVnaXN0ZXIoY2FsbGVlKSk7CkBA
IC0xMDg4LDE3ICsxMTQ5LDE3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUNhbGwoCiAg
ICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1fY2FsbExpbmtJbmZvcywgbV9jYWxsQ29udGV4dE1h
cCk7CiAgICAgCiAgICAgaGFuZGxlQ2FsbCgKLSAgICAgICAgcmVzdWx0LCBvcCwgSW5saW5lQ2Fs
bEZyYW1lOjpraW5kRm9yKGtpbmQpLCBpbnN0cnVjdGlvblNpemUsIGNhbGxUYXJnZXQsCisgICAg
ICAgIHJlc3VsdCwgb3AsIGNhbGxNb2RlLCBpbnN0cnVjdGlvblNpemUsIGNhbGxUYXJnZXQsCiAg
ICAgICAgIGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCByZWdpc3Rlck9mZnNldCwgY2FsbExp
bmtTdGF0dXMpOwogfQogICAgIAogdm9pZCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlQ2FsbCgKLSAg
ICBpbnQgcmVzdWx0LCBOb2RlVHlwZSBvcCwgSW5saW5lQ2FsbEZyYW1lOjpLaW5kIGtpbmQsIHVu
c2lnbmVkIGluc3RydWN0aW9uU2l6ZSwKKyAgICBpbnQgcmVzdWx0LCBOb2RlVHlwZSBvcCwgQ2Fs
bE1vZGUgY2FsbE1vZGUsIHVuc2lnbmVkIGluc3RydWN0aW9uU2l6ZSwKICAgICBOb2RlKiBjYWxs
VGFyZ2V0LCBpbnQgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMsIGludCByZWdpc3Rlck9mZnNl
dCwKICAgICBDYWxsTGlua1N0YXR1cyBjYWxsTGlua1N0YXR1cykKIHsKICAgICBoYW5kbGVDYWxs
KAotICAgICAgICByZXN1bHQsIG9wLCBraW5kLCBpbnN0cnVjdGlvblNpemUsIGNhbGxUYXJnZXQs
IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLAorICAgICAgICByZXN1bHQsIG9wLCBJbmxpbmVD
YWxsRnJhbWU6OmtpbmRGb3IoY2FsbE1vZGUpLCBpbnN0cnVjdGlvblNpemUsIGNhbGxUYXJnZXQs
IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLAogICAgICAgICByZWdpc3Rlck9mZnNldCwgY2Fs
bExpbmtTdGF0dXMsIGdldFByZWRpY3Rpb24oKSk7CiB9CiAKQEAgLTExMTgsNyArMTE3OSw3IEBA
IHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUNhbGwoCiAgICAgaWYgKCFjYWxsTGlua1N0YXR1
cy5jYW5PcHRpbWl6ZSgpKSB7CiAgICAgICAgIC8vIE9kZGx5LCB0aGlzIGNvbmZsYXRlcyBjYWxs
cyB0aGF0IGhhdmVuJ3QgZXhlY3V0ZWQgd2l0aCBjYWxscyB0aGF0IGJlaGF2ZWQgc3VmZmljaWVu
dGx5IHBvbHltb3JwaGljYWxseQogICAgICAgICAvLyB0aGF0IHdlIGNhbm5vdCBvcHRpbWl6ZSB0
aGVtLgotICAgICAgICAKKwogICAgICAgICBhZGRDYWxsKHJlc3VsdCwgb3AsIE9wSW5mbygpLCBj
YWxsVGFyZ2V0LCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgcmVnaXN0ZXJPZmZzZXQsIHBy
ZWRpY3Rpb24pOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMTEzNiw5ICsxMTk3LDEwIEBA
IHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUNhbGwoCiAgICAgYWRkQ2FsbChyZXN1bHQsIG9w
LCBjYWxsT3BJbmZvLCBjYWxsVGFyZ2V0LCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgcmVn
aXN0ZXJPZmZzZXQsIHByZWRpY3Rpb24pOwogfQogCi12b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5k
bGVWYXJhcmdzQ2FsbChJbnN0cnVjdGlvbiogcGMsIE5vZGVUeXBlIG9wLCBDb2RlU3BlY2lhbGl6
YXRpb25LaW5kIGtpbmQpCit2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVWYXJhcmdzQ2FsbChJ
bnN0cnVjdGlvbiogcGMsIE5vZGVUeXBlIG9wLCBDYWxsTW9kZSBjYWxsTW9kZSkKIHsKICAgICBB
U1NFUlQoT1BDT0RFX0xFTkdUSChvcF9jYWxsX3ZhcmFyZ3MpID09IE9QQ09ERV9MRU5HVEgob3Bf
Y29uc3RydWN0X3ZhcmFyZ3MpKTsKKyAgICBBU1NFUlQoT1BDT0RFX0xFTkdUSChvcF9jYWxsX3Zh
cmFyZ3MpID09IE9QQ09ERV9MRU5HVEgob3BfdGFpbF9jYWxsX3ZhcmFyZ3MpKTsKICAgICAKICAg
ICBpbnQgcmVzdWx0ID0gcGNbMV0udS5vcGVyYW5kOwogICAgIGludCBjYWxsZWUgPSBwY1syXS51
Lm9wZXJhbmQ7CkBAIC0xMTYxLDcgKzEyMjMsNyBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpoYW5k
bGVWYXJhcmdzQ2FsbChJCiAgICAgICAgIGRhdGFMb2coIiAgICBWYXJhcmdzIGNhbGwgbGluayBz
dGF0dXMgYXQgIiwgY3VycmVudENvZGVPcmlnaW4oKSwgIjogIiwgY2FsbExpbmtTdGF0dXMsICJc
biIpOwogICAgIAogICAgIGlmIChjYWxsTGlua1N0YXR1cy5jYW5PcHRpbWl6ZSgpCi0gICAgICAg
ICYmIGhhbmRsZUlubGluaW5nKGNhbGxUYXJnZXQsIHJlc3VsdCwgY2FsbExpbmtTdGF0dXMsIGZp
cnN0RnJlZVJlZywgVmlydHVhbFJlZ2lzdGVyKHRoaXNSZWcpLCBWaXJ0dWFsUmVnaXN0ZXIoYXJn
dW1lbnRzKSwgZmlyc3RWYXJBcmdPZmZzZXQsIDAsIG1fY3VycmVudEluZGV4ICsgT1BDT0RFX0xF
TkdUSChvcF9jYWxsX3ZhcmFyZ3MpLCBvcCwgSW5saW5lQ2FsbEZyYW1lOjp2YXJhcmdzS2luZEZv
cihraW5kKSwgcHJlZGljdGlvbikpIHsKKyAgICAgICAgJiYgaGFuZGxlSW5saW5pbmcoY2FsbFRh
cmdldCwgcmVzdWx0LCBjYWxsTGlua1N0YXR1cywgZmlyc3RGcmVlUmVnLCBWaXJ0dWFsUmVnaXN0
ZXIodGhpc1JlZyksIFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudHMpLCBmaXJzdFZhckFyZ09mZnNl
dCwgMCwgbV9jdXJyZW50SW5kZXggKyBPUENPREVfTEVOR1RIKG9wX2NhbGxfdmFyYXJncyksIG9w
LCBJbmxpbmVDYWxsRnJhbWU6OnZhcmFyZ3NLaW5kRm9yKGNhbGxNb2RlKSwgcHJlZGljdGlvbikp
IHsKICAgICAgICAgaWYgKG1fZ3JhcGguY29tcGlsYXRpb24oKSkKICAgICAgICAgICAgIG1fZ3Jh
cGguY29tcGlsYXRpb24oKS0+bm90aWNlSW5saW5lZENhbGwoKTsKICAgICAgICAgcmV0dXJuOwpA
QCAtMTE3MSw3ICsxMjMzLDE1IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZVZhcmFyZ3ND
YWxsKEkKICAgICBkYXRhLT5maXJzdFZhckFyZ09mZnNldCA9IGZpcnN0VmFyQXJnT2Zmc2V0Owog
ICAgIAogICAgIE5vZGUqIHRoaXNDaGlsZCA9IGdldChWaXJ0dWFsUmVnaXN0ZXIodGhpc1JlZykp
OwotICAgIAorCisgICAgaWYgKG9wID09IFRhaWxDYWxsVmFyYXJncykgeworICAgICAgICBpZiAo
YWxsSW5saW5lRnJhbWVzQXJlVGFpbENhbGxzKCkpIHsKKyAgICAgICAgICAgIGFkZFRvR3JhcGgo
b3AsIE9wSW5mbyhkYXRhKSwgT3BJbmZvKCksIGNhbGxUYXJnZXQsIGdldChWaXJ0dWFsUmVnaXN0
ZXIoYXJndW1lbnRzKSksIHRoaXNDaGlsZCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKyAgICAgICAgb3AgPSBUYWlsQ2FsbFZhcmFyZ3NJbmxpbmVkQ2FsbGVyOworICAgIH0KKwog
ICAgIE5vZGUqIGNhbGwgPSBhZGRUb0dyYXBoKG9wLCBPcEluZm8oZGF0YSksIE9wSW5mbyhwcmVk
aWN0aW9uKSwgY2FsbFRhcmdldCwgZ2V0KFZpcnR1YWxSZWdpc3Rlcihhcmd1bWVudHMpKSwgdGhp
c0NoaWxkKTsKICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVzdWx0UmVnKHJlc3VsdCk7CiAgICAgaWYg
KHJlc3VsdFJlZy5pc1ZhbGlkKCkpCkBAIC0xMjA2LDggKzEyNzYsOSBAQCB2b2lkIEJ5dGVDb2Rl
UGFyc2VyOjplbWl0QXJndW1lbnRQaGFudG9tCiAgICAgICAgIGFkZFRvR3JhcGgoUGhhbnRvbSwg
Z2V0KHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGksIHJlZ2lzdGVyT2Zmc2V0KSkpOwogfQog
Ci11bnNpZ25lZCBCeXRlQ29kZVBhcnNlcjo6aW5saW5pbmdDb3N0KENhbGxWYXJpYW50IGNhbGxl
ZSwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBDb2RlU3BlY2lhbGl6YXRpb25LaW5k
IGtpbmQpCit1bnNpZ25lZCBCeXRlQ29kZVBhcnNlcjo6aW5saW5pbmdDb3N0KENhbGxWYXJpYW50
IGNhbGxlZSwgaW50IGFyZ3VtZW50Q291bnRJbmNsdWRpbmdUaGlzLCBDYWxsTW9kZSBjYWxsTW9k
ZSkKIHsKKyAgICBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQgPSBzcGVjaWFsaXphdGlvbktp
bmRGb3IoY2FsbE1vZGUpOwogICAgIGlmICh2ZXJib3NlKQogICAgICAgICBkYXRhTG9nKCJDb25z
aWRlcmluZyBpbmxpbmluZyAiLCBjYWxsZWUsICIgaW50byAiLCBjdXJyZW50Q29kZU9yaWdpbigp
LCAiXG4iKTsKICAgICAKQEAgLTEyNDksNyArMTMyMCw3IEBAIHVuc2lnbmVkIEJ5dGVDb2RlUGFy
c2VyOjppbmxpbmluZ0Nvc3QoQ2EKICAgICBDYXBhYmlsaXR5TGV2ZWwgY2FwYWJpbGl0eUxldmVs
ID0gaW5saW5lRnVuY3Rpb25Gb3JDYXBhYmlsaXR5TGV2ZWwoCiAgICAgICAgIGNvZGVCbG9jaywg
a2luZCwgY2FsbGVlLmlzQ2xvc3VyZUNhbGwoKSk7CiAgICAgaWYgKHZlcmJvc2UpIHsKLSAgICAg
ICAgZGF0YUxvZygiICAgIEtpbmQ6ICIsIGtpbmQsICJcbiIpOworICAgICAgICBkYXRhTG9nKCIg
ICAgQ2FsbCBtb2RlOiAiLCBjYWxsTW9kZSwgIlxuIik7CiAgICAgICAgIGRhdGFMb2coIiAgICBJ
cyBjbG9zdXJlIGNhbGw6ICIsIGNhbGxlZS5pc0Nsb3N1cmVDYWxsKCksICJcbiIpOwogICAgICAg
ICBkYXRhTG9nKCIgICAgQ2FwYWJpbGl0eSBsZXZlbDogIiwgY2FwYWJpbGl0eUxldmVsLCAiXG4i
KTsKICAgICAgICAgZGF0YUxvZygiICAgIE1pZ2h0IGlubGluZSBmdW5jdGlvbjogIiwgbWlnaHRJ
bmxpbmVGdW5jdGlvbkZvcihjb2RlQmxvY2ssIGtpbmQpLCAiXG4iKTsKQEAgLTEzMjAsNyArMTM5
MSw3IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmlubGluZUNhbGwoTm9kZSogY2EKIHsKICAgICBD
b2RlU3BlY2lhbGl6YXRpb25LaW5kIHNwZWNpYWxpemF0aW9uS2luZCA9IElubGluZUNhbGxGcmFt
ZTo6c3BlY2lhbGl6YXRpb25LaW5kRm9yKGtpbmQpOwogICAgIAotICAgIEFTU0VSVChpbmxpbmlu
Z0Nvc3QoY2FsbGVlLCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgc3BlY2lhbGl6YXRpb25L
aW5kKSAhPSBVSU5UX01BWCk7CisgICAgQVNTRVJUKGlubGluaW5nQ29zdChjYWxsZWUsIGFyZ3Vt
ZW50Q291bnRJbmNsdWRpbmdUaGlzLCBJbmxpbmVDYWxsRnJhbWU6OmNhbGxNb2RlRm9yKGtpbmQp
KSAhPSBVSU5UX01BWCk7CiAgICAgCiAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBjYWxsZWUu
ZnVuY3Rpb25FeGVjdXRhYmxlKCktPmJhc2VsaW5lQ29kZUJsb2NrRm9yKHNwZWNpYWxpemF0aW9u
S2luZCk7CiAgICAgaW5zZXJ0Q2hlY2tzKGNvZGVCbG9jayk7CkBAIC0xNDI0LDcgKzE0OTUsNyBA
QCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjppbmxpbmVDYWxsKE5vZGUqIGNhCiAgICAgICAgIG1fY3Vy
cmVudEJsb2NrID0gbV9ncmFwaC5sYXN0QmxvY2soKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0K
LSAgICAKKwogICAgIGlmIChPcHRpb25zOjp2ZXJib3NlREZHQnl0ZUNvZGVQYXJzaW5nKCkpCiAg
ICAgICAgIGRhdGFMb2coIiAgICBDcmVhdGluZyBuZXcgYmxvY2sgYWZ0ZXIgaW5saW5pbmcuXG4i
KTsKIApAQCAtMTUzMSw3ICsxNjAyLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6YXR0ZW1wdFRv
SW5saW5lQ2FsbAogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIHVuc2lnbmVkIG15SW5saW5p
bmdDb3N0ID0gaW5saW5pbmdDb3N0KGNhbGxlZSwgYXJndW1lbnRDb3VudEluY2x1ZGluZ1RoaXMs
IHNwZWNpYWxpemF0aW9uS2luZCk7CisgICAgdW5zaWduZWQgbXlJbmxpbmluZ0Nvc3QgPSBpbmxp
bmluZ0Nvc3QoY2FsbGVlLCBhcmd1bWVudENvdW50SW5jbHVkaW5nVGhpcywgSW5saW5lQ2FsbEZy
YW1lOjpjYWxsTW9kZUZvcihraW5kKSk7CiAgICAgaWYgKG15SW5saW5pbmdDb3N0ID4gaW5saW5p
bmdCYWxhbmNlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKQEAgLTMwMDMsNyArMzA3NCwxMSBA
QCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAv
LyBsb2dpYyByZWxpZXMgb24gZXZlcnkgYnl0ZWNvZGUgcmVzdWx0aW5nIGluIG9uZSBvciBtb3Jl
IG5vZGVzLCB3aGljaCB3b3VsZAogICAgICAgICAgICAgLy8gYmUgdHJ1ZSBhbnl3YXkgZXhjZXB0
IGZvciBvcF9sb29wX2hpbnQsIHdoaWNoIGVtaXRzIGEgUGhhbnRvbSB0byBmb3JjZSB0aGlzCiAg
ICAgICAgICAgICAvLyB0byBiZSB0cnVlLgotICAgICAgICAgICAgaWYgKCFtX2N1cnJlbnRCbG9j
ay0+aXNFbXB0eSgpKQorICAgICAgICAgICAgLy8gV2UgYWxzbyBkb24ndCBpbnNlcnQgYSBqdW1w
IGlmIHRoZSBibG9jayBhbHJlYWR5IGhhcyBhIHRlcm1pbmFsLAorICAgICAgICAgICAgLy8gd2hp
Y2ggY291bGQgaGFwcGVuIGFmdGVyIGEgdGFpbCBjYWxsLgorICAgICAgICAgICAgQVNTRVJUKG1f
Y3VycmVudEJsb2NrLT5pc0VtcHR5KCkgfHwgIW1fY3VycmVudEJsb2NrLT50ZXJtaW5hbCgpCisg
ICAgICAgICAgICAgICAgfHwgbV9jdXJyZW50QmxvY2stPnRlcm1pbmFsKCktPm9wKCkgPT0gVGFp
bENhbGwgfHwgbV9jdXJyZW50QmxvY2stPnRlcm1pbmFsKCktPm9wKCkgPT0gVGFpbENhbGxWYXJh
cmdzKTsKKyAgICAgICAgICAgIGlmICghbV9jdXJyZW50QmxvY2stPmlzRW1wdHkoKSAmJiAhbV9j
dXJyZW50QmxvY2stPnRlcm1pbmFsKCkpCiAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChKdW1w
LCBPcEluZm8obV9jdXJyZW50SW5kZXgpKTsKICAgICAgICAgICAgIHJldHVybiBzaG91bGRDb250
aW51ZVBhcnNpbmc7CiAgICAgICAgIH0KQEAgLTM1ODUsNiArMzY2MCwxMiBAQCBib29sIEJ5dGVD
b2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgIC8vID09PSBCbG9jayB0ZXJt
aW5hdG9ycy4gPT09CiAKICAgICAgICAgY2FzZSBvcF9qbXA6IHsKKyAgICAgICAgICAgIGlmICht
X2N1cnJlbnRCbG9jay0+dGVybWluYWwoKSkgeworICAgICAgICAgICAgICAgIC8vIFdlIGNvdWxk
IGJlIHRoZSBkdW1teSBqdW1wIHRvIGEgcmV0dXJuIGFmdGVyIGEgbm9uLWlubGluZWQsIG5vbi1l
bXVsYXRlZCB0YWlsIGNhbGwgaW4gYSB0ZXJuYXJ5IG9wZXJhdG9yCisgICAgICAgICAgICAgICAg
Tm9kZSogdGVybWluYWwgPSBtX2N1cnJlbnRCbG9jay0+dGVybWluYWwoKTsKKyAgICAgICAgICAg
ICAgICBBU1NFUlRfVU5VU0VEKHRlcm1pbmFsLCB0ZXJtaW5hbC0+b3AoKSA9PSBUYWlsQ2FsbCB8
fCB0ZXJtaW5hbC0+b3AoKSA9PSBUYWlsQ2FsbFZhcmFyZ3MpOworICAgICAgICAgICAgICAgIExB
U1RfT1BDT0RFKG9wX3JldCk7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBpbnQgcmVsYXRp
dmVPZmZzZXQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kOwogICAgICAgICAgICAg
YWRkVG9HcmFwaChKdW1wLCBPcEluZm8obV9jdXJyZW50SW5kZXggKyByZWxhdGl2ZU9mZnNldCkp
OwogICAgICAgICAgICAgaWYgKHJlbGF0aXZlT2Zmc2V0IDw9IDApCkBAIC0zNzU2LDYgKzM4Mzcs
MTIgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICB9
CiAKICAgICAgICAgY2FzZSBvcF9yZXQ6CisgICAgICAgICAgICBpZiAobV9jdXJyZW50QmxvY2st
PnRlcm1pbmFsKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBXZSBjb3VsZCBiZSB0aGUgZHVtbXkg
cmV0dXJuIGFmdGVyIGEgbm9uLWlubGluZWQsIG5vbi1lbXVsYXRlZCB0YWlsIGNhbGwKKyAgICAg
ICAgICAgICAgICBOb2RlKiB0ZXJtaW5hbCA9IG1fY3VycmVudEJsb2NrLT50ZXJtaW5hbCgpOwor
ICAgICAgICAgICAgICAgIEFTU0VSVF9VTlVTRUQodGVybWluYWwsIHRlcm1pbmFsLT5vcCgpID09
IFRhaWxDYWxsIHx8IHRlcm1pbmFsLT5vcCgpID09IFRhaWxDYWxsVmFyYXJncyk7CisgICAgICAg
ICAgICAgICAgTEFTVF9PUENPREUob3BfcmV0KTsKKyAgICAgICAgICAgIH0KICAgICAgICAgICAg
IGlmIChpbmxpbmVDYWxsRnJhbWUoKSkgewogICAgICAgICAgICAgICAgIGZsdXNoRm9yUmV0dXJu
KCk7CiAgICAgICAgICAgICAgICAgaWYgKG1faW5saW5lU3RhY2tUb3AtPm1fcmV0dXJuVmFsdWUu
aXNWYWxpZCgpKQpAQCAtMzgwNywyMiArMzg5NCwzNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpw
YXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9jYXRjaCk7CiAg
ICAgICAgICAgICAKICAgICAgICAgY2FzZSBvcF9jYWxsOgotICAgICAgICAgICAgaGFuZGxlQ2Fs
bChjdXJyZW50SW5zdHJ1Y3Rpb24sIENhbGwsIENvZGVGb3JDYWxsKTsKKyAgICAgICAgICAgIGhh
bmRsZUNhbGwoY3VycmVudEluc3RydWN0aW9uLCBDYWxsLCBDYWxsTW9kZTo6UmVndWxhcik7CiAg
ICAgICAgICAgICAvLyBWZXJpZnkgdGhhdCBoYW5kbGVDYWxsKCksIHdoaWNoIGNvdWxkIGhhdmUg
aW5saW5lZCB0aGUgY2FsbGVlLCBkaWRuJ3QgdHJhc2ggbV9jdXJyZW50SW5zdHJ1Y3Rpb24KICAg
ICAgICAgICAgIEFTU0VSVChtX2N1cnJlbnRJbnN0cnVjdGlvbiA9PSBjdXJyZW50SW5zdHJ1Y3Rp
b24pOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfY2FsbCk7Ci0gICAgICAgICAgICAKKwor
ICAgICAgICBjYXNlIG9wX3RhaWxfY2FsbDoKKyAgICAgICAgICAgIGZsdXNoRm9yUmV0dXJuKCk7
CisgICAgICAgICAgICBoYW5kbGVDYWxsKGN1cnJlbnRJbnN0cnVjdGlvbiwgVGFpbENhbGwsIENh
bGxNb2RlOjpUYWlsKTsKKyAgICAgICAgICAgIC8vIFZlcmlmeSB0aGF0IGhhbmRsZUNhbGwoKSwg
d2hpY2ggY291bGQgaGF2ZSBpbmxpbmVkIHRoZSBjYWxsZWUsIGRpZG4ndCB0cmFzaCBtX2N1cnJl
bnRJbnN0cnVjdGlvbgorICAgICAgICAgICAgQVNTRVJUKG1fY3VycmVudEluc3RydWN0aW9uID09
IGN1cnJlbnRJbnN0cnVjdGlvbik7CisgICAgICAgICAgICAvLyBXZSBsZXQgdGhlIGZvbGxvd2lu
ZyBvcF9yZXQgaGFuZGxlIGNhc2VzIHJlbGF0ZWQgdG8KKyAgICAgICAgICAgIC8vIGlubGluaW5n
IHRvIGtlZXAgdGhpbmdzIHNpbXBsZS4KKyAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX3RhaWxf
Y2FsbCk7CisKICAgICAgICAgY2FzZSBvcF9jb25zdHJ1Y3Q6Ci0gICAgICAgICAgICBoYW5kbGVD
YWxsKGN1cnJlbnRJbnN0cnVjdGlvbiwgQ29uc3RydWN0LCBDb2RlRm9yQ29uc3RydWN0KTsKKyAg
ICAgICAgICAgIGhhbmRsZUNhbGwoY3VycmVudEluc3RydWN0aW9uLCBDb25zdHJ1Y3QsIENhbGxN
b2RlOjpDb25zdHJ1Y3QpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfY29uc3RydWN0KTsK
ICAgICAgICAgICAgIAogICAgICAgICBjYXNlIG9wX2NhbGxfdmFyYXJnczogewotICAgICAgICAg
ICAgaGFuZGxlVmFyYXJnc0NhbGwoY3VycmVudEluc3RydWN0aW9uLCBDYWxsVmFyYXJncywgQ29k
ZUZvckNhbGwpOworICAgICAgICAgICAgaGFuZGxlVmFyYXJnc0NhbGwoY3VycmVudEluc3RydWN0
aW9uLCBDYWxsVmFyYXJncywgQ2FsbE1vZGU6OlJlZ3VsYXIpOwogICAgICAgICAgICAgTkVYVF9P
UENPREUob3BfY2FsbF92YXJhcmdzKTsKICAgICAgICAgfQorCisgICAgICAgIGNhc2Ugb3BfdGFp
bF9jYWxsX3ZhcmFyZ3M6IHsKKyAgICAgICAgICAgIGZsdXNoRm9yUmV0dXJuKCk7CisgICAgICAg
ICAgICBoYW5kbGVWYXJhcmdzQ2FsbChjdXJyZW50SW5zdHJ1Y3Rpb24sIFRhaWxDYWxsVmFyYXJn
cywgQ2FsbE1vZGU6OlRhaWwpOworICAgICAgICAgICAgTkVYVF9PUENPREUob3BfdGFpbF9jYWxs
X3ZhcmFyZ3MpOworICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBvcF9jb25z
dHJ1Y3RfdmFyYXJnczogewotICAgICAgICAgICAgaGFuZGxlVmFyYXJnc0NhbGwoY3VycmVudElu
c3RydWN0aW9uLCBDb25zdHJ1Y3RWYXJhcmdzLCBDb2RlRm9yQ29uc3RydWN0KTsKKyAgICAgICAg
ICAgIGhhbmRsZVZhcmFyZ3NDYWxsKGN1cnJlbnRJbnN0cnVjdGlvbiwgQ29uc3RydWN0VmFyYXJn
cywgQ2FsbE1vZGU6OkNvbnN0cnVjdCk7CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9jb25z
dHJ1Y3RfdmFyYXJncyk7CiAgICAgICAgIH0KICAgICAgICAgICAgIApAQCAtNDUzMyw3ICs0NjM1
LDcgQEAgQnl0ZUNvZGVQYXJzZXI6OklubGluZVN0YWNrRW50cnk6OklubGluZQogICAgICAgICAg
ICAgbV9pbmxpbmVDYWxsRnJhbWUtPmlzQ2xvc3VyZUNhbGwgPSBmYWxzZTsKICAgICAgICAgfSBl
bHNlCiAgICAgICAgICAgICBtX2lubGluZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2FsbCA9IHRydWU7
Ci0gICAgICAgIG1faW5saW5lQ2FsbEZyYW1lLT5jYWxsZXIgPSBieXRlQ29kZVBhcnNlci0+Y3Vy
cmVudENvZGVPcmlnaW4oKTsKKyAgICAgICAgbV9pbmxpbmVDYWxsRnJhbWUtPmRpcmVjdENhbGxl
ciA9IGJ5dGVDb2RlUGFyc2VyLT5jdXJyZW50Q29kZU9yaWdpbigpOwogICAgICAgICBtX2lubGlu
ZUNhbGxGcmFtZS0+YXJndW1lbnRzLnJlc2l6ZVRvRml0KGFyZ3VtZW50Q291bnRJbmNsdWRpbmdU
aGlzKTsgLy8gU2V0IHRoZSBudW1iZXIgb2YgYXJndW1lbnRzIGluY2x1ZGluZyB0aGlzLCBidXQg
ZG9uJ3QgY29uZmlndXJlIHRoZSB2YWx1ZSByZWNvdmVyaWVzLCB5ZXQuCiAgICAgICAgIG1faW5s
aW5lQ2FsbEZyYW1lLT5raW5kID0ga2luZDsKICAgICAgICAgCkBAIC00NjA0LDcgKzQ3MDYsNyBA
QCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUNvZGVCbG9jaygpCiAgICAgaWYgKFVOTElLRUxZ
KE9wdGlvbnM6OmR1bXBTb3VyY2VBdERGR1RpbWUoKSkpIHsKICAgICAgICAgVmVjdG9yPERlZmVy
cmVkU291cmNlRHVtcD4mIGRlZmVycmVkU291cmNlRHVtcCA9IG1fZ3JhcGgubV9wbGFuLmNhbGxi
YWNrLT5lbnN1cmVEZWZlcnJlZFNvdXJjZUR1bXAoKTsKICAgICAgICAgaWYgKGlubGluZUNhbGxG
cmFtZSgpKSB7Ci0gICAgICAgICAgICBEZWZlcnJlZFNvdXJjZUR1bXAgZHVtcChjb2RlQmxvY2st
PmJhc2VsaW5lVmVyc2lvbigpLCBtX2NvZGVCbG9jaywgSklUQ29kZTo6REZHSklULCBpbmxpbmVD
YWxsRnJhbWUoKS0+Y2FsbGVyKTsKKyAgICAgICAgICAgIERlZmVycmVkU291cmNlRHVtcCBkdW1w
KGNvZGVCbG9jay0+YmFzZWxpbmVWZXJzaW9uKCksIG1fY29kZUJsb2NrLCBKSVRDb2RlOjpERkdK
SVQsIGlubGluZUNhbGxGcmFtZSgpLT5kaXJlY3RDYWxsZXIpOwogICAgICAgICAgICAgZGVmZXJy
ZWRTb3VyY2VEdW1wLmFwcGVuZChkdW1wKTsKICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICBk
ZWZlcnJlZFNvdXJjZUR1bXAuYXBwZW5kKERlZmVycmVkU291cmNlRHVtcChjb2RlQmxvY2stPmJh
c2VsaW5lVmVyc2lvbigpKSk7CkBAIC00NjE1LDcgKzQ3MTcsNyBAQCB2b2lkIEJ5dGVDb2RlUGFy
c2VyOjpwYXJzZUNvZGVCbG9jaygpCiAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUoKSkgewog
ICAgICAgICAgICAgZGF0YUxvZygKICAgICAgICAgICAgICAgICAiIGZvciBpbmxpbmluZyBhdCAi
LCBDb2RlQmxvY2tXaXRoSklUVHlwZShtX2NvZGVCbG9jaywgSklUQ29kZTo6REZHSklUKSwKLSAg
ICAgICAgICAgICAgICAiICIsIGlubGluZUNhbGxGcmFtZSgpLT5jYWxsZXIpOworICAgICAgICAg
ICAgICAgICIgIiwgaW5saW5lQ2FsbEZyYW1lKCktPmRpcmVjdENhbGxlcik7CiAgICAgICAgIH0K
ICAgICAgICAgZGF0YUxvZygKICAgICAgICAgICAgICI6IG5lZWRzQWN0aXZhdGlvbiA9ICIsIGNv
ZGVCbG9jay0+bmVlZHNBY3RpdmF0aW9uKCksCkBAIC00Njk5LDcgKzQ4MDEsNyBAQCB2b2lkIEJ5
dGVDb2RlUGFyc2VyOjpwYXJzZUNvZGVCbG9jaygpCiAgICAgICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICBtX2N1cnJlbnRCbG9jayA9
IDA7CisgICAgICAgICAgICBtX2N1cnJlbnRCbG9jayA9IG51bGxwdHI7CiAgICAgICAgIH0gd2hp
bGUgKG1fY3VycmVudEluZGV4IDwgbGltaXQpOwogICAgIH0KIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcAkocmV2aXNpb24gMTkwMTUzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNzksOCArMTc5LDEwIEBAIENhcGFiaWxpdHlMZXZlbCBjYXBhYmlsaXR5TGV2
ZWwoT3Bjb2RlSUQKICAgICBjYXNlIG9wX3Rocm93OgogICAgIGNhc2Ugb3BfdGhyb3dfc3RhdGlj
X2Vycm9yOgogICAgIGNhc2Ugb3BfY2FsbDoKKyAgICBjYXNlIG9wX3RhaWxfY2FsbDoKICAgICBj
YXNlIG9wX2NvbnN0cnVjdDoKICAgICBjYXNlIG9wX2NhbGxfdmFyYXJnczoKKyAgICBjYXNlIG9w
X3RhaWxfY2FsbF92YXJhcmdzOgogICAgIGNhc2Ugb3BfY29uc3RydWN0X3ZhcmFyZ3M6CiAgICAg
Y2FzZSBvcF9jcmVhdGVfZGlyZWN0X2FyZ3VtZW50czoKICAgICBjYXNlIG9wX2NyZWF0ZV9zY29w
ZWRfYXJndW1lbnRzOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVy
aXplLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVy
aXplLmgJKHJldmlzaW9uIDE5MDE1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q2xvYmJlcml6ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zODIsOSArMzgyLDEyIEBAIHZvaWQgY2xv
YmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICBjYXNlIEFycmF5UHVzaDoKICAg
ICBjYXNlIEFycmF5UG9wOgogICAgIGNhc2UgQ2FsbDoKKyAgICBjYXNlIFRhaWxDYWxsSW5saW5l
ZENhbGxlcjoKICAgICBjYXNlIENvbnN0cnVjdDoKICAgICBjYXNlIENhbGxWYXJhcmdzOgogICAg
IGNhc2UgQ2FsbEZvcndhcmRWYXJhcmdzOgorICAgIGNhc2UgVGFpbENhbGxWYXJhcmdzSW5saW5l
ZENhbGxlcjoKKyAgICBjYXNlIFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3NJbmxpbmVkQ2FsbGVyOgog
ICAgIGNhc2UgQ29uc3RydWN0VmFyYXJnczoKICAgICBjYXNlIENvbnN0cnVjdEZvcndhcmRWYXJh
cmdzOgogICAgIGNhc2UgVG9QcmltaXRpdmU6CkBAIC0zOTMsNiArMzk2LDEzIEBAIHZvaWQgY2xv
YmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICAgICAgcmVhZChXb3JsZCk7CiAg
ICAgICAgIHdyaXRlKEhlYXApOwogICAgICAgICByZXR1cm47CisKKyAgICBjYXNlIFRhaWxDYWxs
OgorICAgIGNhc2UgVGFpbENhbGxWYXJhcmdzOgorICAgIGNhc2UgVGFpbENhbGxGb3J3YXJkVmFy
YXJnczoKKyAgICAgICAgcmVhZChXb3JsZCk7CisgICAgICAgIHdyaXRlKFNpZGVTdGF0ZSk7Cisg
ICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgY2FzZSBHZXRHZXR0ZXI6CiAgICAgICAgIHJl
YWQoR2V0dGVyU2V0dGVyX2dldHRlcik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0RvZXNHQy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdEb2VzR0MuY3BwCShyZXZpc2lvbiAxOTAxNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0RvZXNHQy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMCwxMiArMTIwLDE2IEBAIGJv
b2wgZG9lc0dDKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZSkKICAgICBjYXNlIENvbXBhcmVFcToK
ICAgICBjYXNlIENvbXBhcmVTdHJpY3RFcToKICAgICBjYXNlIENhbGw6CisgICAgY2FzZSBUYWls
Q2FsbElubGluZWRDYWxsZXI6CiAgICAgY2FzZSBDb25zdHJ1Y3Q6CiAgICAgY2FzZSBDYWxsVmFy
YXJnczoKKyAgICBjYXNlIFRhaWxDYWxsVmFyYXJnc0lubGluZWRDYWxsZXI6CiAgICAgY2FzZSBD
b25zdHJ1Y3RWYXJhcmdzOgogICAgIGNhc2UgTG9hZFZhcmFyZ3M6CiAgICAgY2FzZSBDYWxsRm9y
d2FyZFZhcmFyZ3M6CiAgICAgY2FzZSBDb25zdHJ1Y3RGb3J3YXJkVmFyYXJnczoKKyAgICBjYXNl
IFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3M6CisgICAgY2FzZSBUYWlsQ2FsbEZvcndhcmRWYXJhcmdz
SW5saW5lZENhbGxlcjoKICAgICBjYXNlIEJyZWFrcG9pbnQ6CiAgICAgY2FzZSBQcm9maWxlV2ls
bENhbGw6CiAgICAgY2FzZSBQcm9maWxlRGlkQ2FsbDoKQEAgLTE1MCw2ICsxNTQsOCBAQCBib29s
IGRvZXNHQyhHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUpCiAgICAgY2FzZSBCcmFuY2g6CiAgICAg
Y2FzZSBTd2l0Y2g6CiAgICAgY2FzZSBSZXR1cm46CisgICAgY2FzZSBUYWlsQ2FsbDoKKyAgICBj
YXNlIFRhaWxDYWxsVmFyYXJnczoKICAgICBjYXNlIFRocm93OgogICAgIGNhc2UgQ291bnRFeGVj
dXRpb246CiAgICAgY2FzZSBGb3JjZU9TUkV4aXQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0ZpeHVwUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHJldmlzaW9uIDE5MDE1MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHRml4dXBQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEz
NDMsMTEgKzEzNDMsMTUgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBOb3RpZnlXcml0ZToKICAg
ICAgICAgY2FzZSBWYXJJbmplY3Rpb25XYXRjaHBvaW50OgogICAgICAgICBjYXNlIENhbGw6Cisg
ICAgICAgIGNhc2UgVGFpbENhbGxJbmxpbmVkQ2FsbGVyOgogICAgICAgICBjYXNlIENvbnN0cnVj
dDoKICAgICAgICAgY2FzZSBDYWxsVmFyYXJnczoKKyAgICAgICAgY2FzZSBUYWlsQ2FsbFZhcmFy
Z3NJbmxpbmVkQ2FsbGVyOgogICAgICAgICBjYXNlIENvbnN0cnVjdFZhcmFyZ3M6CiAgICAgICAg
IGNhc2UgQ2FsbEZvcndhcmRWYXJhcmdzOgogICAgICAgICBjYXNlIENvbnN0cnVjdEZvcndhcmRW
YXJhcmdzOgorICAgICAgICBjYXNlIFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3M6CisgICAgICAgIGNh
c2UgVGFpbENhbGxGb3J3YXJkVmFyYXJnc0lubGluZWRDYWxsZXI6CiAgICAgICAgIGNhc2UgTG9h
ZFZhcmFyZ3M6CiAgICAgICAgIGNhc2UgUHJvZmlsZUNvbnRyb2xGbG93OgogICAgICAgICBjYXNl
IE5ld09iamVjdDoKQEAgLTEzNjUsNiArMTM2OSw4IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2Ug
Q3JlYXRlQ2xvbmVkQXJndW1lbnRzOgogICAgICAgICBjYXNlIEp1bXA6CiAgICAgICAgIGNhc2Ug
UmV0dXJuOgorICAgICAgICBjYXNlIFRhaWxDYWxsOgorICAgICAgICBjYXNlIFRhaWxDYWxsVmFy
YXJnczoKICAgICAgICAgY2FzZSBUaHJvdzoKICAgICAgICAgY2FzZSBUaHJvd1JlZmVyZW5jZUVy
cm9yOgogICAgICAgICBjYXNlIENvdW50RXhlY3V0aW9uOgpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlzaW9uIDE5MDE1MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NjEsMzAgKzk2MSwz
MSBAQCBCeXRlY29kZUtpbGxzJiBHcmFwaDo6a2lsbHNGb3IoSW5saW5lQ2FsCiAKIGJvb2wgR3Jh
cGg6OmlzTGl2ZUluQnl0ZWNvZGUoVmlydHVhbFJlZ2lzdGVyIG9wZXJhbmQsIENvZGVPcmlnaW4g
Y29kZU9yaWdpbikKIHsKKyAgICBDb2RlT3JpZ2luKiBjb2RlT3JpZ2luUHRyID0gJmNvZGVPcmln
aW47CiAgICAgZm9yICg7OykgewogICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgcmVnID0gVmlydHVh
bFJlZ2lzdGVyKAotICAgICAgICAgICAgb3BlcmFuZC5vZmZzZXQoKSAtIGNvZGVPcmlnaW4uc3Rh
Y2tPZmZzZXQoKSk7CisgICAgICAgICAgICBvcGVyYW5kLm9mZnNldCgpIC0gY29kZU9yaWdpblB0
ci0+c3RhY2tPZmZzZXQoKSk7CiAgICAgICAgIAotICAgICAgICBpZiAob3BlcmFuZC5vZmZzZXQo
KSA8IGNvZGVPcmlnaW4uc3RhY2tPZmZzZXQoKSArIEpTU3RhY2s6OkNhbGxGcmFtZUhlYWRlclNp
emUpIHsKKyAgICAgICAgaWYgKG9wZXJhbmQub2Zmc2V0KCkgPCBjb2RlT3JpZ2luUHRyLT5zdGFj
a09mZnNldCgpICsgSlNTdGFjazo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSkgewogICAgICAgICAgICAg
aWYgKHJlZy5pc0FyZ3VtZW50KCkpIHsKICAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChy
ZWcub2Zmc2V0KCkgPCBKU1N0YWNrOjpDYWxsRnJhbWVIZWFkZXJTaXplKTsKICAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgICAgICBpZiAoY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmlz
Q2xvc3VyZUNhbGwKKyAgICAgICAgICAgICAgICBpZiAoY29kZU9yaWdpblB0ci0+aW5saW5lQ2Fs
bEZyYW1lLT5pc0Nsb3N1cmVDYWxsCiAgICAgICAgICAgICAgICAgICAgICYmIHJlZy5vZmZzZXQo
KSA9PSBKU1N0YWNrOjpDYWxsZWUpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIGlmIChjb2RlT3JpZ2luLmlubGluZUNh
bGxGcmFtZS0+aXNWYXJhcmdzKCkKKyAgICAgICAgICAgICAgICBpZiAoY29kZU9yaWdpblB0ci0+
aW5saW5lQ2FsbEZyYW1lLT5pc1ZhcmFyZ3MoKQogICAgICAgICAgICAgICAgICAgICAmJiByZWcu
b2Zmc2V0KCkgPT0gSlNTdGFjazo6QXJndW1lbnRDb3VudCkKICAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgICAgICByZXR1cm4gbGl2
ZW5lc3NGb3IoY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpLm9wZXJhbmRJc0xpdmUoCi0gICAg
ICAgICAgICAgICAgcmVnLm9mZnNldCgpLCBjb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgpOworICAg
ICAgICAgICAgcmV0dXJuIGxpdmVuZXNzRm9yKGNvZGVPcmlnaW5QdHItPmlubGluZUNhbGxGcmFt
ZSkub3BlcmFuZElzTGl2ZSgKKyAgICAgICAgICAgICAgICByZWcub2Zmc2V0KCksIGNvZGVPcmln
aW5QdHItPmJ5dGVjb2RlSW5kZXgpOwogICAgICAgICB9CiAgICAgICAgIAotICAgICAgICBJbmxp
bmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1l
OworICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IGNvZGVPcmlnaW5Q
dHItPmlubGluZUNhbGxGcmFtZTsKICAgICAgICAgaWYgKCFpbmxpbmVDYWxsRnJhbWUpCiAgICAg
ICAgICAgICBicmVhazsKIApAQCAtOTk0LDcgKzk5NSwxMSBAQCBib29sIEdyYXBoOjppc0xpdmVJ
bkJ5dGVjb2RlKFZpcnR1YWxSZWdpCiAgICAgICAgICAgICAmJiBzdGF0aWNfY2FzdDxzaXplX3Q+
KHJlZy50b0FyZ3VtZW50KCkpIDwgaW5saW5lQ2FsbEZyYW1lLT5hcmd1bWVudHMuc2l6ZSgpKQog
ICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIAotICAgICAgICBjb2RlT3JpZ2luID0g
aW5saW5lQ2FsbEZyYW1lLT5jYWxsZXI7CisgICAgICAgIGNvZGVPcmlnaW5QdHIgPSBpbmxpbmVD
YWxsRnJhbWUtPmdldENhbGxlclNraXBwaW5nRGVhZEZyYW1lcygpOworCisgICAgICAgIC8vIFRo
ZSBmaXJzdCBpbmxpbmUgY2FsbCBmcmFtZSBjb3VsZCBiZSBhbiBpbmxpbmUgdGFpbCBjYWxsCisg
ICAgICAgIGlmICghY29kZU9yaWdpblB0cikKKyAgICAgICAgICAgIGJyZWFrOwogICAgIH0KICAg
ICAKICAgICByZXR1cm4gdHJ1ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
R3JhcGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBo
LmgJKHJldmlzaW9uIDE5MDE1MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3Jh
cGguaAkod29ya2luZyBjb3B5KQpAQCAtNzE3LDkgKzcxNywxMSBAQCBwdWJsaWM6CiAgICAgICAg
IC8vIGNhbGwsIGJvdGggY2FsbGVlIGFuZCBjYWxsZXIgd2lsbCBzZWUgdGhlIHZhcmlhYmxlcyBs
aXZlLgogICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgZXhjbHVzaW9uU3RhcnQ7CiAgICAgICAgIFZp
cnR1YWxSZWdpc3RlciBleGNsdXNpb25FbmQ7CisKKyAgICAgICAgQ29kZU9yaWdpbiogY29kZU9y
aWdpblB0ciA9ICZjb2RlT3JpZ2luOwogICAgICAgICAKICAgICAgICAgZm9yICg7OykgewotICAg
ICAgICAgICAgSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBjb2RlT3JpZ2luLmlu
bGluZUNhbGxGcmFtZTsKKyAgICAgICAgICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZy
YW1lID0gY29kZU9yaWdpblB0ci0+aW5saW5lQ2FsbEZyYW1lOwogICAgICAgICAgICAgVmlydHVh
bFJlZ2lzdGVyIHN0YWNrT2Zmc2V0KGlubGluZUNhbGxGcmFtZSA/IGlubGluZUNhbGxGcmFtZS0+
c3RhY2tPZmZzZXQgOiAwKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgaWYgKGlubGluZUNh
bGxGcmFtZSkgewpAQCAtNzMxLDcgKzczMyw3IEBAIHB1YmxpYzoKICAgICAgICAgICAgIAogICAg
ICAgICAgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBiYXNlbGluZUNvZGVCbG9ja0Zvcihpbmxp
bmVDYWxsRnJhbWUpOwogICAgICAgICAgICAgRnVsbEJ5dGVjb2RlTGl2ZW5lc3MmIGZ1bGxMaXZl
bmVzcyA9IGxpdmVuZXNzRm9yKGNvZGVCbG9jayk7Ci0gICAgICAgICAgICBjb25zdCBGYXN0Qml0
VmVjdG9yJiBsaXZlbmVzcyA9IGZ1bGxMaXZlbmVzcy5nZXRMaXZlbmVzcyhjb2RlT3JpZ2luLmJ5
dGVjb2RlSW5kZXgpOworICAgICAgICAgICAgY29uc3QgRmFzdEJpdFZlY3RvciYgbGl2ZW5lc3Mg
PSBmdWxsTGl2ZW5lc3MuZ2V0TGl2ZW5lc3MoY29kZU9yaWdpblB0ci0+Ynl0ZWNvZGVJbmRleCk7
CiAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIHJlbGF0aXZlTG9jYWwgPSBjb2RlQmxvY2stPm1f
bnVtQ2FsbGVlUmVnaXN0ZXJzOyByZWxhdGl2ZUxvY2FsLS07KSB7CiAgICAgICAgICAgICAgICAg
VmlydHVhbFJlZ2lzdGVyIHJlZyA9IHN0YWNrT2Zmc2V0ICsgdmlydHVhbFJlZ2lzdGVyRm9yTG9j
YWwocmVsYXRpdmVMb2NhbCk7CiAgICAgICAgICAgICAgICAgCkBAIC03NTgsNyArNzYwLDExIEBA
IHB1YmxpYzoKICAgICAgICAgICAgIGZvciAoVmlydHVhbFJlZ2lzdGVyIHJlZyA9IGV4Y2x1c2lv
blN0YXJ0OyByZWcgPCBleGNsdXNpb25FbmQ7IHJlZyArPSAxKQogICAgICAgICAgICAgICAgIGZ1
bmN0b3IocmVnKTsKICAgICAgICAgICAgIAotICAgICAgICAgICAgY29kZU9yaWdpbiA9IGlubGlu
ZUNhbGxGcmFtZS0+Y2FsbGVyOworICAgICAgICAgICAgY29kZU9yaWdpblB0ciA9IGlubGluZUNh
bGxGcmFtZS0+Z2V0Q2FsbGVyU2tpcHBpbmdEZWFkRnJhbWVzKCk7CisKKyAgICAgICAgICAgIC8v
IFRoZSBmaXJzdCBpbmxpbmUgY2FsbCBmcmFtZSBjb3VsZCBiZSBhbiBpbmxpbmUgdGFpbCBjYWxs
CisgICAgICAgICAgICBpZiAoIWNvZGVPcmlnaW5QdHIpCisgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KICAgICB9CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0luUGxhY2VBYnN0cmFjdFN0YXRlLmNwcAkocmV2aXNpb24gMTkwMTUz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdJblBsYWNlQWJzdHJhY3RTdGF0ZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM2NCw2ICszNjQsOSBAQCBpbmxpbmUgYm9vbCBJblBsYWNl
QWJzdHJhY3RTdGF0ZTo6bWVyZ2VUCiAgICAgfQogICAgICAgICAKICAgICBjYXNlIFJldHVybjoK
KyAgICBjYXNlIFRhaWxDYWxsOgorICAgIGNhc2UgVGFpbENhbGxWYXJhcmdzOgorICAgIGNhc2Ug
VGFpbENhbGxGb3J3YXJkVmFyYXJnczoKICAgICBjYXNlIFVucmVhY2hhYmxlOgogICAgICAgICBB
U1NFUlQoYmFzaWNCbG9jay0+Y2ZhQnJhbmNoRGlyZWN0aW9uID09IEludmFsaWRCcmFuY2hEaXJl
Y3Rpb24pOwogICAgICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0pJVENvbXBpbGVyLmNwcAkocmV2aXNpb24gMTkwMTUzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdKSVRDb21waWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTU3NSw4ICs1NzUsOCBAQCBib29sIEpJVENvbXBpbGVyOjp3aWxsQ2F0Y2hFeGNlcHRpb25Jbk1h
CiAgICAgICAgIGlmICghaW5saW5lQ2FsbEZyYW1lKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogCi0gICAgICAgIGJ5dGVjb2RlSW5kZXhUb0NoZWNrID0gaW5saW5lQ2FsbEZyYW1lLT5jYWxs
ZXIuYnl0ZWNvZGVJbmRleDsKLSAgICAgICAgY29kZU9yaWdpbiA9IGNvZGVPcmlnaW4uaW5saW5l
Q2FsbEZyYW1lLT5jYWxsZXI7CisgICAgICAgIGJ5dGVjb2RlSW5kZXhUb0NoZWNrID0gaW5saW5l
Q2FsbEZyYW1lLT5kaXJlY3RDYWxsZXIuYnl0ZWNvZGVJbmRleDsKKyAgICAgICAgY29kZU9yaWdp
biA9IGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5kaXJlY3RDYWxsZXI7CiAgICAgfQogCiAg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTGl2ZUNhdGNoVmFyaWFibGVQcmVzZXJ2YXRpb25QaGFzZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdMaXZlQ2F0Y2hWYXJpYWJsZVBy
ZXNlcnZhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTkwMTUzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdMaXZlQ2F0Y2hWYXJpYWJsZVByZXNlcnZhdGlvblBoYXNlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtODEsOCArODEsOCBAQCBwdWJsaWM6CiAgICAgICAgICAgICBpZiAoIWlu
bGluZUNhbGxGcmFtZSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAg
ICAgIGJ5dGVjb2RlSW5kZXhUb0NoZWNrID0gaW5saW5lQ2FsbEZyYW1lLT5jYWxsZXIuYnl0ZWNv
ZGVJbmRleDsKLSAgICAgICAgICAgIG9yaWdpbiA9IGlubGluZUNhbGxGcmFtZS0+Y2FsbGVyOwor
ICAgICAgICAgICAgYnl0ZWNvZGVJbmRleFRvQ2hlY2sgPSBpbmxpbmVDYWxsRnJhbWUtPmRpcmVj
dENhbGxlci5ieXRlY29kZUluZGV4OworICAgICAgICAgICAgb3JpZ2luID0gaW5saW5lQ2FsbEZy
YW1lLT5kaXJlY3RDYWxsZXI7CiAgICAgICAgIH0KICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTm9kZS5oCShyZXZpc2lvbiAxOTAxNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTAwNyw2ICsxMDA3LDEwIEBA
IHN0cnVjdCBOb2RlIHsKICAgICAgICAgc3dpdGNoIChvcCgpKSB7CiAgICAgICAgIGNhc2UgQ2Fs
bFZhcmFyZ3M6CiAgICAgICAgIGNhc2UgQ2FsbEZvcndhcmRWYXJhcmdzOgorICAgICAgICBjYXNl
IFRhaWxDYWxsVmFyYXJnczoKKyAgICAgICAgY2FzZSBUYWlsQ2FsbEZvcndhcmRWYXJhcmdzOgor
ICAgICAgICBjYXNlIFRhaWxDYWxsVmFyYXJnc0lubGluZWRDYWxsZXI6CisgICAgICAgIGNhc2Ug
VGFpbENhbGxGb3J3YXJkVmFyYXJnc0lubGluZWRDYWxsZXI6CiAgICAgICAgIGNhc2UgQ29uc3Ry
dWN0VmFyYXJnczoKICAgICAgICAgY2FzZSBDb25zdHJ1Y3RGb3J3YXJkVmFyYXJnczoKICAgICAg
ICAgICAgIHJldHVybiB0cnVlOwpAQCAtMTEwNCw2ICsxMTA4LDkgQEAgc3RydWN0IE5vZGUgewog
ICAgICAgICBjYXNlIEJyYW5jaDoKICAgICAgICAgY2FzZSBTd2l0Y2g6CiAgICAgICAgIGNhc2Ug
UmV0dXJuOgorICAgICAgICBjYXNlIFRhaWxDYWxsOgorICAgICAgICBjYXNlIFRhaWxDYWxsVmFy
YXJnczoKKyAgICAgICAgY2FzZSBUYWlsQ2FsbEZvcndhcmRWYXJhcmdzOgogICAgICAgICBjYXNl
IFVucmVhY2hhYmxlOgogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIGRlZmF1bHQ6
CkBAIC0xMjU0LDEwICsxMjYxLDEzIEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgY2FzZSBHZXRC
eUlkRmx1c2g6CiAgICAgICAgIGNhc2UgR2V0QnlWYWw6CiAgICAgICAgIGNhc2UgQ2FsbDoKKyAg
ICAgICAgY2FzZSBUYWlsQ2FsbElubGluZWRDYWxsZXI6CiAgICAgICAgIGNhc2UgQ29uc3RydWN0
OgogICAgICAgICBjYXNlIENhbGxWYXJhcmdzOgorICAgICAgICBjYXNlIFRhaWxDYWxsVmFyYXJn
c0lubGluZWRDYWxsZXI6CiAgICAgICAgIGNhc2UgQ29uc3RydWN0VmFyYXJnczoKICAgICAgICAg
Y2FzZSBDYWxsRm9yd2FyZFZhcmFyZ3M6CisgICAgICAgIGNhc2UgVGFpbENhbGxGb3J3YXJkVmFy
YXJnc0lubGluZWRDYWxsZXI6CiAgICAgICAgIGNhc2UgR2V0QnlPZmZzZXQ6CiAgICAgICAgIGNh
c2UgTXVsdGlHZXRCeU9mZnNldDoKICAgICAgICAgY2FzZSBHZXRDbG9zdXJlVmFyOgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkocmV2aXNpb24gMTkwMTUzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlVHlwZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yNDUsNiArMjQ1LDkgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAg
IG1hY3JvKENhbGxGb3J3YXJkVmFyYXJncywgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0
ZSkgXAogICAgIG1hY3JvKENvbnN0cnVjdFZhcmFyZ3MsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0
R2VuZXJhdGUpIFwKICAgICBtYWNybyhDb25zdHJ1Y3RGb3J3YXJkVmFyYXJncywgTm9kZVJlc3Vs
dEpTIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAorICAgIG1hY3JvKFRhaWxDYWxsSW5saW5lZENhbGxl
ciwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVIYXNWYXJBcmdzKSBcCisg
ICAgbWFjcm8oVGFpbENhbGxWYXJhcmdzSW5saW5lZENhbGxlciwgTm9kZVJlc3VsdEpTIHwgTm9k
ZU11c3RHZW5lcmF0ZSkgXAorICAgIG1hY3JvKFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3NJbmxpbmVk
Q2FsbGVyLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgXAogICAgIC8q
IEFsbG9jYXRpb25zLiAqL1wKICAgICBtYWNybyhOZXdPYmplY3QsIE5vZGVSZXN1bHRKUykgXApA
QCAtMzEwLDYgKzMxMyw5IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICBt
YWNybyhCcmFuY2gsIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhTd2l0Y2gsIE5vZGVN
dXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhSZXR1cm4sIE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAg
ICBtYWNybyhUYWlsQ2FsbCwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVIYXNWYXJBcmdzKSBcCisg
ICAgbWFjcm8oVGFpbENhbGxWYXJhcmdzLCBOb2RlTXVzdEdlbmVyYXRlKSBcCisgICAgbWFjcm8o
VGFpbENhbGxGb3J3YXJkVmFyYXJncywgTm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIG1hY3JvKFVu
cmVhY2hhYmxlLCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgXAogICAgIC8qIENvdW50IGV4ZWN1
dGlvbi4gKi9cCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21w
aWxlckNvbW1vbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPU1JFeGl0Q29tcGlsZXJDb21tb24uY3BwCShyZXZpc2lvbiAxOTAxNTMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09TUkV4aXRDb21waWxlckNvbW1vbi5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTY0LDcgKzY0LDcgQEAgdm9pZCBoYW5kbGVFeGl0Q291bnRzKENDYWxsSGVscGVy
cyYgaml0LAogICAgIAogICAgIEFzc2VtYmx5SGVscGVyczo6SnVtcExpc3QgbG9vcFRocmVzaG9s
ZDsKICAgICAKLSAgICBmb3IgKElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0gZXhp
dC5tX2NvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lOyBpbmxpbmVDYWxsRnJhbWU7IGlubGluZUNh
bGxGcmFtZSA9IGlubGluZUNhbGxGcmFtZS0+Y2FsbGVyLmlubGluZUNhbGxGcmFtZSkgeworICAg
IGZvciAoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBleGl0Lm1fY29kZU9yaWdp
bi5pbmxpbmVDYWxsRnJhbWU7IGlubGluZUNhbGxGcmFtZTsgaW5saW5lQ2FsbEZyYW1lID0gaW5s
aW5lQ2FsbEZyYW1lLT5kaXJlY3RDYWxsZXIuaW5saW5lQ2FsbEZyYW1lKSB7CiAgICAgICAgIGxv
b3BUaHJlc2hvbGQuYXBwZW5kKAogICAgICAgICAgICAgaml0LmJyYW5jaFRlc3Q4KAogICAgICAg
ICAgICAgICAgIEFzc2VtYmx5SGVscGVyczo6Tm9uWmVybywKQEAgLTEzNiw2MyArMTM2LDgwIEBA
IHZvaWQgaGFuZGxlRXhpdENvdW50cyhDQ2FsbEhlbHBlcnMmIGppdCwKIAogdm9pZCByZWlmeUlu
bGluZWRDYWxsRnJhbWVzKENDYWxsSGVscGVycyYgaml0LCBjb25zdCBPU1JFeGl0QmFzZSYgZXhp
dCkKIHsKKyAgICAvLyBGSVhNRTogV2Ugc2hvdWxkbid0IGxlYXZlIGhvbGVzIG9uIHRoZSBzdGFj
ayB3aGVuIHBlcmZvcm1pbmcgYW4gT1NSIGV4aXQKKyAgICAvLyBpbiBwcmVzZW5jZSBvZiBpbmxp
bmVkIHRhaWwgY2FsbHMuCisgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTE0NzUxMQogICAgIEFTU0VSVChqaXQuYmFzZWxpbmVDb2RlQmxvY2soKS0+aml0VHlw
ZSgpID09IEpJVENvZGU6OkJhc2VsaW5lSklUKTsKICAgICBqaXQuc3RvcmVQdHIoQXNzZW1ibHlI
ZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGppdC5iYXNlbGluZUNvZGVCbG9jaygpKSwgQXNzZW1ibHlI
ZWxwZXJzOjphZGRyZXNzRm9yKChWaXJ0dWFsUmVnaXN0ZXIpSlNTdGFjazo6Q29kZUJsb2NrKSk7
CiAKLSAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW47Ci0gICAgZm9yIChjb2RlT3JpZ2luID0gZXhp
dC5tX2NvZGVPcmlnaW47IGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lOyBjb2RlT3JpZ2luID0g
Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmNhbGxlcikgewotICAgICAgICBJbmxpbmVDYWxs
RnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lOwotICAg
ICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrID0gaml0LmJhc2VsaW5lQ29kZUJsb2Nr
Rm9yKGNvZGVPcmlnaW4pOwotICAgICAgICBDb2RlQmxvY2sqIGJhc2VsaW5lQ29kZUJsb2NrRm9y
Q2FsbGVyID0gaml0LmJhc2VsaW5lQ29kZUJsb2NrRm9yKGlubGluZUNhbGxGcmFtZS0+Y2FsbGVy
KTsKLSAgICAgICAgdm9pZCoganVtcFRhcmdldCA9IG51bGxwdHI7CisgICAgY29uc3QgQ29kZU9y
aWdpbiogY29kZU9yaWdpbjsKKyAgICBmb3IgKGNvZGVPcmlnaW4gPSAmZXhpdC5tX2NvZGVPcmln
aW47IGNvZGVPcmlnaW4gJiYgY29kZU9yaWdpbi0+aW5saW5lQ2FsbEZyYW1lOyBjb2RlT3JpZ2lu
ID0gY29kZU9yaWdpbi0+aW5saW5lQ2FsbEZyYW1lLT5nZXRDYWxsZXJTa2lwcGluZ0RlYWRGcmFt
ZXMoKSkgeworICAgICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IGNvZGVP
cmlnaW4tPmlubGluZUNhbGxGcmFtZTsKKyAgICAgICAgQ29kZUJsb2NrKiBiYXNlbGluZUNvZGVC
bG9jayA9IGppdC5iYXNlbGluZUNvZGVCbG9ja0ZvcigqY29kZU9yaWdpbik7CisgICAgICAgIENv
ZGVPcmlnaW4qIHRydWVDYWxsZXIgPSBpbmxpbmVDYWxsRnJhbWUtPmdldENhbGxlclNraXBwaW5n
RGVhZEZyYW1lcygpOwogICAgICAgICB2b2lkKiB0cnVlUmV0dXJuUEMgPSBudWxscHRyOwotICAg
ICAgICAKLSAgICAgICAgdW5zaWduZWQgY2FsbEJ5dGVjb2RlSW5kZXggPSBpbmxpbmVDYWxsRnJh
bWUtPmNhbGxlci5ieXRlY29kZUluZGV4OwotICAgICAgICAKLSAgICAgICAgc3dpdGNoIChpbmxp
bmVDYWxsRnJhbWUtPmtpbmQpIHsKLSAgICAgICAgY2FzZSBJbmxpbmVDYWxsRnJhbWU6OkNhbGw6
Ci0gICAgICAgIGNhc2UgSW5saW5lQ2FsbEZyYW1lOjpDb25zdHJ1Y3Q6Ci0gICAgICAgIGNhc2Ug
SW5saW5lQ2FsbEZyYW1lOjpDYWxsVmFyYXJnczoKLSAgICAgICAgY2FzZSBJbmxpbmVDYWxsRnJh
bWU6OkNvbnN0cnVjdFZhcmFyZ3M6IHsKLSAgICAgICAgICAgIENhbGxMaW5rSW5mbyogY2FsbExp
bmtJbmZvID0KLSAgICAgICAgICAgICAgICBiYXNlbGluZUNvZGVCbG9ja0ZvckNhbGxlci0+Z2V0
Q2FsbExpbmtJbmZvRm9yQnl0ZWNvZGVJbmRleChjYWxsQnl0ZWNvZGVJbmRleCk7Ci0gICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVChjYWxsTGlua0luZm8pOwotICAgICAgICAgICAgCi0gICAgICAg
ICAgICBqdW1wVGFyZ2V0ID0gY2FsbExpbmtJbmZvLT5jYWxsUmV0dXJuTG9jYXRpb24oKS5leGVj
dXRhYmxlQWRkcmVzcygpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KLSAgICAgICAg
ICAgIAotICAgICAgICBjYXNlIElubGluZUNhbGxGcmFtZTo6R2V0dGVyQ2FsbDoKLSAgICAgICAg
Y2FzZSBJbmxpbmVDYWxsRnJhbWU6OlNldHRlckNhbGw6IHsKLSAgICAgICAgICAgIFN0cnVjdHVy
ZVN0dWJJbmZvKiBzdHViSW5mbyA9Ci0gICAgICAgICAgICAgICAgYmFzZWxpbmVDb2RlQmxvY2tG
b3JDYWxsZXItPmZpbmRTdHViSW5mbyhDb2RlT3JpZ2luKGNhbGxCeXRlY29kZUluZGV4KSk7Ci0g
ICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChzdHViSW5mbyk7Ci0gICAgICAgICAgICAKKyAgICAg
ICAgR1BSUmVnIGNhbGxlckZyYW1lR1BSID0gR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXI7CisK
KyAgICAgICAgaWYgKCF0cnVlQ2FsbGVyKSB7CisgICAgICAgICAgICBBU1NFUlQoaW5saW5lQ2Fs
bEZyYW1lLT5pc1RhaWwoKSk7CisgICAgICAgICAgICBqaXQubG9hZFB0cihBc3NlbWJseUhlbHBl
cnM6OkFkZHJlc3MoR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIENhbGxGcmFtZTo6cmV0dXJu
UENPZmZzZXQoKSksIEdQUkluZm86OnJlZ1QzKTsKKyAgICAgICAgICAgIGppdC5zdG9yZVB0cihH
UFJJbmZvOjpyZWdUMywgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9yQnl0ZU9mZnNldChpbmxp
bmVDYWxsRnJhbWUtPnJldHVyblBDT2Zmc2V0KCkpKTsKKyAgICAgICAgICAgIGppdC5sb2FkUHRy
KEFzc2VtYmx5SGVscGVyczo6QWRkcmVzcyhHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgQ2Fs
bEZyYW1lOjpjYWxsZXJGcmFtZU9mZnNldCgpKSwgR1BSSW5mbzo6cmVnVDMpOworICAgICAgICAg
ICAgY2FsbGVyRnJhbWVHUFIgPSBHUFJJbmZvOjpyZWdUMzsKKyAgICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgICAgIENvZGVCbG9jayogYmFzZWxpbmVDb2RlQmxvY2tGb3JDYWxsZXIgPSBqaXQuYmFz
ZWxpbmVDb2RlQmxvY2tGb3IoKnRydWVDYWxsZXIpOworICAgICAgICAgICAgdW5zaWduZWQgY2Fs
bEJ5dGVjb2RlSW5kZXggPSB0cnVlQ2FsbGVyLT5ieXRlY29kZUluZGV4OworICAgICAgICAgICAg
dm9pZCoganVtcFRhcmdldCA9IG51bGxwdHI7CisKICAgICAgICAgICAgIHN3aXRjaCAoaW5saW5l
Q2FsbEZyYW1lLT5raW5kKSB7Ci0gICAgICAgICAgICBjYXNlIElubGluZUNhbGxGcmFtZTo6R2V0
dGVyQ2FsbDoKLSAgICAgICAgICAgICAgICBqdW1wVGFyZ2V0ID0gaml0LnZtKCktPmdldENUSVN0
dWIoYmFzZWxpbmVHZXR0ZXJSZXR1cm5UaHVua0dlbmVyYXRvcikuY29kZSgpLmV4ZWN1dGFibGVB
ZGRyZXNzKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIElubGlu
ZUNhbGxGcmFtZTo6U2V0dGVyQ2FsbDoKLSAgICAgICAgICAgICAgICBqdW1wVGFyZ2V0ID0gaml0
LnZtKCktPmdldENUSVN0dWIoYmFzZWxpbmVTZXR0ZXJSZXR1cm5UaHVua0dlbmVyYXRvcikuY29k
ZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCk7CisgICAgICAgICAgICBjYXNlIElubGluZUNhbGxGcmFt
ZTo6Q2FsbDoKKyAgICAgICAgICAgIGNhc2UgSW5saW5lQ2FsbEZyYW1lOjpDb25zdHJ1Y3Q6Cisg
ICAgICAgICAgICBjYXNlIElubGluZUNhbGxGcmFtZTo6Q2FsbFZhcmFyZ3M6CisgICAgICAgICAg
ICBjYXNlIElubGluZUNhbGxGcmFtZTo6Q29uc3RydWN0VmFyYXJnczoKKyAgICAgICAgICAgIGNh
c2UgSW5saW5lQ2FsbEZyYW1lOjpUYWlsQ2FsbDoKKyAgICAgICAgICAgIGNhc2UgSW5saW5lQ2Fs
bEZyYW1lOjpUYWlsQ2FsbFZhcmFyZ3M6IHsKKyAgICAgICAgICAgICAgICBDYWxsTGlua0luZm8q
IGNhbGxMaW5rSW5mbyA9CisgICAgICAgICAgICAgICAgICAgIGJhc2VsaW5lQ29kZUJsb2NrRm9y
Q2FsbGVyLT5nZXRDYWxsTGlua0luZm9Gb3JCeXRlY29kZUluZGV4KGNhbGxCeXRlY29kZUluZGV4
KTsKKyAgICAgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChjYWxsTGlua0luZm8pOworCisgICAg
ICAgICAgICAgICAganVtcFRhcmdldCA9IGNhbGxMaW5rSW5mby0+Y2FsbFJldHVybkxvY2F0aW9u
KCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIGRlZmF1bHQ6Ci0gICAgICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgY2FzZSBJbmxpbmVDYWxsRnJhbWU6Okdl
dHRlckNhbGw6CisgICAgICAgICAgICBjYXNlIElubGluZUNhbGxGcmFtZTo6U2V0dGVyQ2FsbDog
eworICAgICAgICAgICAgICAgIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbyA9CisgICAgICAg
ICAgICAgICAgICAgIGJhc2VsaW5lQ29kZUJsb2NrRm9yQ2FsbGVyLT5maW5kU3R1YkluZm8oQ29k
ZU9yaWdpbihjYWxsQnl0ZWNvZGVJbmRleCkpOworICAgICAgICAgICAgICAgIFJFTEVBU0VfQVNT
RVJUKHN0dWJJbmZvKTsKKworICAgICAgICAgICAgICAgIHN3aXRjaCAoaW5saW5lQ2FsbEZyYW1l
LT5raW5kKSB7CisgICAgICAgICAgICAgICAgY2FzZSBJbmxpbmVDYWxsRnJhbWU6OkdldHRlckNh
bGw6CisgICAgICAgICAgICAgICAgICAgIGp1bXBUYXJnZXQgPSBqaXQudm0oKS0+Z2V0Q1RJU3R1
YihiYXNlbGluZUdldHRlclJldHVyblRodW5rR2VuZXJhdG9yKS5jb2RlKCkuZXhlY3V0YWJsZUFk
ZHJlc3MoKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgY2Fz
ZSBJbmxpbmVDYWxsRnJhbWU6OlNldHRlckNhbGw6CisgICAgICAgICAgICAgICAgICAgIGp1bXBU
YXJnZXQgPSBqaXQudm0oKS0+Z2V0Q1RJU3R1YihiYXNlbGluZVNldHRlclJldHVyblRodW5rR2Vu
ZXJhdG9yKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKKyAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgdHJ1ZVJldHVyblBDID0gc3R1Yklu
Zm8tPmNhbGxSZXR1cm5Mb2NhdGlvbi5sYWJlbEF0T2Zmc2V0KAorICAgICAgICAgICAgICAgICAg
ICBzdHViSW5mby0+cGF0Y2guZGVsdGFDYWxsVG9Eb25lKS5leGVjdXRhYmxlQWRkcmVzcygpOwog
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfSB9CisKKyAgICAgICAgICAgIGlm
ICh0cnVlQ2FsbGVyLT5pbmxpbmVDYWxsRnJhbWUpIHsKKyAgICAgICAgICAgICAgICBqaXQuYWRk
UHRyKAorICAgICAgICAgICAgICAgICAgICBBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMih0
cnVlQ2FsbGVyLT5pbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICogc2l6ZW9mKEVuY29kZWRK
U1ZhbHVlKSksCisgICAgICAgICAgICAgICAgICAgIEdQUkluZm86OmNhbGxGcmFtZVJlZ2lzdGVy
LAorICAgICAgICAgICAgICAgICAgICBHUFJJbmZvOjpyZWdUMyk7CisgICAgICAgICAgICAgICAg
Y2FsbGVyRnJhbWVHUFIgPSBHUFJJbmZvOjpyZWdUMzsKICAgICAgICAgICAgIH0KLSAgICAgICAg
ICAgIAotICAgICAgICAgICAgdHJ1ZVJldHVyblBDID0gc3R1YkluZm8tPmNhbGxSZXR1cm5Mb2Nh
dGlvbi5sYWJlbEF0T2Zmc2V0KAotICAgICAgICAgICAgICAgIHN0dWJJbmZvLT5wYXRjaC5kZWx0
YUNhbGxUb0RvbmUpLmV4ZWN1dGFibGVBZGRyZXNzKCk7Ci0gICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgfSB9Ci0KLSAgICAgICAgR1BSUmVnIGNhbGxlckZyYW1lR1BSOwotICAgICAgICBpZiAo
aW5saW5lQ2FsbEZyYW1lLT5jYWxsZXIuaW5saW5lQ2FsbEZyYW1lKSB7Ci0gICAgICAgICAgICBq
aXQuYWRkUHRyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKGlubGluZUNhbGxGcmFtZS0+
Y2FsbGVyLmlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKiBzaXplb2YoRW5jb2RlZEpTVmFs
dWUpKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEdQUkluZm86OnJlZ1QzKTsKLSAgICAg
ICAgICAgIGNhbGxlckZyYW1lR1BSID0gR1BSSW5mbzo6cmVnVDM7Ci0gICAgICAgIH0gZWxzZQot
ICAgICAgICAgICAgY2FsbGVyRnJhbWVHUFIgPSBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlcjsK
LSAgICAgICAgCi0gICAgICAgIGppdC5zdG9yZVB0cihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJ
bW1QdHIoanVtcFRhcmdldCksIEFzc2VtYmx5SGVscGVyczo6YWRkcmVzc0ZvckJ5dGVPZmZzZXQo
aW5saW5lQ2FsbEZyYW1lLT5yZXR1cm5QQ09mZnNldCgpKSk7CisKKyAgICAgICAgICAgIGppdC5z
dG9yZVB0cihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoanVtcFRhcmdldCksIEFzc2Vt
Ymx5SGVscGVyczo6YWRkcmVzc0ZvckJ5dGVPZmZzZXQoaW5saW5lQ2FsbEZyYW1lLT5yZXR1cm5Q
Q09mZnNldCgpKSk7CisgICAgICAgIH0KKwogICAgICAgICBpZiAodHJ1ZVJldHVyblBDKQogICAg
ICAgICAgICAgaml0LnN0b3JlUHRyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbVB0cih0cnVl
UmV0dXJuUEMpLCBBc3NlbWJseUhlbHBlcnM6OmFkZHJlc3NGb3IoaW5saW5lQ2FsbEZyYW1lLT5z
dGFja09mZnNldCArIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGlubGluZUNhbGxGcmFtZS0+
YXJndW1lbnRzLnNpemUoKSkub2Zmc2V0KCkpKTsKICAgICAgICAgICAgICAgICAgICAgICAgICAK
QEAgLTIwMiwxMyArMjE5LDEzIEBAIHZvaWQgcmVpZnlJbmxpbmVkQ2FsbEZyYW1lcyhDQ2FsbEhl
bHBlcnMKICAgICAgICAgICAgIGppdC5zdG9yZTMyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZElt
bTMyKGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKSksIEFzc2VtYmx5SGVscGVyczo6
cGF5bG9hZEZvcigoVmlydHVhbFJlZ2lzdGVyKShpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0
ICsgSlNTdGFjazo6QXJndW1lbnRDb3VudCkpKTsKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgICAg
ICBqaXQuc3RvcmU2NChjYWxsZXJGcmFtZUdQUiwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9y
Qnl0ZU9mZnNldChpbmxpbmVDYWxsRnJhbWUtPmNhbGxlckZyYW1lT2Zmc2V0KCkpKTsKLSAgICAg
ICAgdWludDMyX3QgbG9jYXRpb25CaXRzID0gQ2FsbFNpdGVJbmRleChjb2RlT3JpZ2luLmJ5dGVj
b2RlSW5kZXgpLmJpdHMoKTsKKyAgICAgICAgdWludDMyX3QgbG9jYXRpb25CaXRzID0gQ2FsbFNp
dGVJbmRleChjb2RlT3JpZ2luLT5ieXRlY29kZUluZGV4KS5iaXRzKCk7CiAgICAgICAgIGppdC5z
dG9yZTMyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKGxvY2F0aW9uQml0cyksIEFzc2Vt
Ymx5SGVscGVyczo6dGFnRm9yKChWaXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxGcmFtZS0+c3Rh
Y2tPZmZzZXQgKyBKU1N0YWNrOjpBcmd1bWVudENvdW50KSkpOwogICAgICAgICBpZiAoIWlubGlu
ZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2FsbCkKICAgICAgICAgICAgIGppdC5zdG9yZTY0KEFzc2Vt
Ymx5SGVscGVyczo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKGlubGluZUNh
bGxGcmFtZS0+Y2FsbGVlQ29uc3RhbnQoKSkpKSwgQXNzZW1ibHlIZWxwZXJzOjphZGRyZXNzRm9y
KChWaXJ0dWFsUmVnaXN0ZXIpKGlubGluZUNhbGxGcmFtZS0+c3RhY2tPZmZzZXQgKyBKU1N0YWNr
OjpDYWxsZWUpKSk7CiAjZWxzZSAvLyBVU0UoSlNWQUxVRTY0KSAvLyBzbyB0aGlzIGlzIHRoZSAz
Mi1iaXQgcGFydAogICAgICAgICBqaXQuc3RvcmVQdHIoY2FsbGVyRnJhbWVHUFIsIEFzc2VtYmx5
SGVscGVyczo6YWRkcmVzc0ZvckJ5dGVPZmZzZXQoaW5saW5lQ2FsbEZyYW1lLT5jYWxsZXJGcmFt
ZU9mZnNldCgpKSk7Ci0gICAgICAgIEluc3RydWN0aW9uKiBpbnN0cnVjdGlvbiA9IGJhc2VsaW5l
Q29kZUJsb2NrLT5pbnN0cnVjdGlvbnMoKS5iZWdpbigpICsgY29kZU9yaWdpbi5ieXRlY29kZUlu
ZGV4OworICAgICAgICBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24gPSBiYXNlbGluZUNvZGVCbG9j
ay0+aW5zdHJ1Y3Rpb25zKCkuYmVnaW4oKSArIGNvZGVPcmlnaW4tPmJ5dGVjb2RlSW5kZXg7CiAg
ICAgICAgIHVpbnQzMl90IGxvY2F0aW9uQml0cyA9IENhbGxTaXRlSW5kZXgoaW5zdHJ1Y3Rpb24p
LmJpdHMoKTsKICAgICAgICAgaml0LnN0b3JlMzIoQXNzZW1ibHlIZWxwZXJzOjpUcnVzdGVkSW1t
MzIobG9jYXRpb25CaXRzKSwgQXNzZW1ibHlIZWxwZXJzOjp0YWdGb3IoKFZpcnR1YWxSZWdpc3Rl
cikoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09mZnNldCArIEpTU3RhY2s6OkFyZ3VtZW50Q291bnQp
KSk7CiAgICAgICAgIGppdC5zdG9yZTMyKEFzc2VtYmx5SGVscGVyczo6VHJ1c3RlZEltbTMyKEpT
VmFsdWU6OkNlbGxUYWcpLCBBc3NlbWJseUhlbHBlcnM6OnRhZ0ZvcigoVmlydHVhbFJlZ2lzdGVy
KShpbmxpbmVDYWxsRnJhbWUtPnN0YWNrT2Zmc2V0ICsgSlNTdGFjazo6Q2FsbGVlKSkpOwpAQCAt
MjE3LDEzICsyMzQsMTYgQEAgdm9pZCByZWlmeUlubGluZWRDYWxsRnJhbWVzKENDYWxsSGVscGVy
cwogI2VuZGlmIC8vIFVTRShKU1ZBTFVFNjQpIC8vIGVuZGluZyB0aGUgI2Vsc2UgcGFydCwgc28g
ZGlyZWN0bHkgYWJvdmUgaXMgdGhlIDMyLWJpdCBwYXJ0CiAgICAgfQogCisgICAgLy8gRG9uJ3Qg
bmVlZCB0byBzZXQgdGhlIHRvcGxldmVsIGNvZGUgb3JpZ2luIGlmIHdlIG9ubHkgZGlkIGlubGlu
ZSB0YWlsIGNhbGxzCisgICAgaWYgKGNvZGVPcmlnaW4pIHsKICNpZiBVU0UoSlNWQUxVRTY0KQot
ICAgIHVpbnQzMl90IGxvY2F0aW9uQml0cyA9IENhbGxTaXRlSW5kZXgoY29kZU9yaWdpbi5ieXRl
Y29kZUluZGV4KS5iaXRzKCk7CisgICAgdWludDMyX3QgbG9jYXRpb25CaXRzID0gQ2FsbFNpdGVJ
bmRleChjb2RlT3JpZ2luLT5ieXRlY29kZUluZGV4KS5iaXRzKCk7CiAjZWxzZQotICAgIEluc3Ry
dWN0aW9uKiBpbnN0cnVjdGlvbiA9IGppdC5iYXNlbGluZUNvZGVCbG9jaygpLT5pbnN0cnVjdGlv
bnMoKS5iZWdpbigpICsgY29kZU9yaWdpbi5ieXRlY29kZUluZGV4OworICAgIEluc3RydWN0aW9u
KiBpbnN0cnVjdGlvbiA9IGppdC5iYXNlbGluZUNvZGVCbG9jaygpLT5pbnN0cnVjdGlvbnMoKS5i
ZWdpbigpICsgY29kZU9yaWdpbi0+Ynl0ZWNvZGVJbmRleDsKICAgICB1aW50MzJfdCBsb2NhdGlv
bkJpdHMgPSBDYWxsU2l0ZUluZGV4KGluc3RydWN0aW9uKS5iaXRzKCk7CiAjZW5kaWYKLSAgICBq
aXQuc3RvcmUzMihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJbW0zMihsb2NhdGlvbkJpdHMpLCBB
c3NlbWJseUhlbHBlcnM6OnRhZ0ZvcigoVmlydHVhbFJlZ2lzdGVyKShKU1N0YWNrOjpBcmd1bWVu
dENvdW50KSkpOworICAgICAgICBqaXQuc3RvcmUzMihBc3NlbWJseUhlbHBlcnM6OlRydXN0ZWRJ
bW0zMihsb2NhdGlvbkJpdHMpLCBBc3NlbWJseUhlbHBlcnM6OnRhZ0ZvcigoVmlydHVhbFJlZ2lz
dGVyKShKU1N0YWNrOjpBcmd1bWVudENvdW50KSkpOworICAgIH0KIH0KIAogc3RhdGljIHZvaWQg
b3NyV3JpdGVCYXJyaWVyKENDYWxsSGVscGVycyYgaml0LCBHUFJSZWcgb3duZXIsIEdQUlJlZyBz
Y3JhdGNoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPU1JFeGl0UHJlcGFy
YXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT1NS
RXhpdFByZXBhcmF0aW9uLmNwcAkocmV2aXNpb24gMTkwMTUzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdPU1JFeGl0UHJlcGFyYXRpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00
MSw3ICs0MSw3IEBAIHZvaWQgcHJlcGFyZUNvZGVPcmlnaW5Gb3JPU1JFeGl0KEV4ZWNTdGEKICAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIERlZmVyR0MgZGVmZXJHQyh2bS5oZWFwKTsKICAg
ICAKLSAgICBmb3IgKDsgY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWU7IGNvZGVPcmlnaW4gPSBj
b2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+Y2FsbGVyKSB7CisgICAgZm9yICg7IGNvZGVPcmln
aW4uaW5saW5lQ2FsbEZyYW1lOyBjb2RlT3JpZ2luID0gY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJh
bWUtPmRpcmVjdENhbGxlcikgewogICAgICAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGNvZGVP
cmlnaW4uaW5saW5lQ2FsbEZyYW1lLT5iYXNlbGluZUNvZGVCbG9jaygpOwogICAgICAgICBpZiAo
Y29kZUJsb2NrLT5qaXRUeXBlKCkgPT0gSlNDOjpKSVRDb2RlOjpCYXNlbGluZUpJVCkKICAgICAg
ICAgICAgIGNvbnRpbnVlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVy
YXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09w
ZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAxOTAxNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR09wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzA2LDcgKzEzMDYsNyBA
QCBleHRlcm4gIkMiIHZvaWQgSklUX09QRVJBVElPTiB0cmlnZ2VyUmVvCiAgICAgQVNTRVJUKEpJ
VENvZGU6OmlzT3B0aW1pemluZ0pJVChvcHRpbWl6ZWRDb2RlQmxvY2stPmppdFR5cGUoKSkpOwog
ICAgIAogICAgIGJvb2wgZGlkVHJ5VG9FbnRlckludG9JbmxpbmVkTG9vcHMgPSBmYWxzZTsKLSAg
ICBmb3IgKElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0gZXhpdC0+bV9jb2RlT3Jp
Z2luLmlubGluZUNhbGxGcmFtZTsgaW5saW5lQ2FsbEZyYW1lOyBpbmxpbmVDYWxsRnJhbWUgPSBp
bmxpbmVDYWxsRnJhbWUtPmNhbGxlci5pbmxpbmVDYWxsRnJhbWUpIHsKKyAgICBmb3IgKElubGlu
ZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0gZXhpdC0+bV9jb2RlT3JpZ2luLmlubGluZUNh
bGxGcmFtZTsgaW5saW5lQ2FsbEZyYW1lOyBpbmxpbmVDYWxsRnJhbWUgPSBpbmxpbmVDYWxsRnJh
bWUtPmRpcmVjdENhbGxlci5pbmxpbmVDYWxsRnJhbWUpIHsKICAgICAgICAgaWYgKGlubGluZUNh
bGxGcmFtZS0+ZXhlY3V0YWJsZS0+ZGlkVHJ5VG9FbnRlckluTG9vcCgpKSB7CiAgICAgICAgICAg
ICBkaWRUcnlUb0VudGVySW50b0lubGluZWRMb29wcyA9IHRydWU7CiAgICAgICAgICAgICBicmVh
azsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlY2lzZUxvY2FsQ2xvYmJl
cml6ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlY2lz
ZUxvY2FsQ2xvYmJlcml6ZS5oCShyZXZpc2lvbiAxOTAxNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1ByZWNpc2VMb2NhbENsb2JiZXJpemUuaAkod29ya2luZyBjb3B5KQpAQCAt
MTExLDcgKzExMSw5IEBAIHByaXZhdGU6CiAgICAgICAgIGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFs
OgogICAgICAgICBjYXNlIEZvcndhcmRWYXJhcmdzOgogICAgICAgICBjYXNlIENhbGxGb3J3YXJk
VmFyYXJnczoKLSAgICAgICAgY2FzZSBDb25zdHJ1Y3RGb3J3YXJkVmFyYXJnczogeworICAgICAg
ICBjYXNlIENvbnN0cnVjdEZvcndhcmRWYXJhcmdzOgorICAgICAgICBjYXNlIFRhaWxDYWxsRm9y
d2FyZFZhcmFyZ3M6CisgICAgICAgIGNhc2UgVGFpbENhbGxGb3J3YXJkVmFyYXJnc0lubGluZWRD
YWxsZXI6IHsKICAgICAgICAgICAgIElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0g
bV9ub2RlLT5jaGlsZDEoKS0+b3JpZ2luLnNlbWFudGljLmlubGluZUNhbGxGcmFtZTsKICAgICAg
ICAgICAgIGlmICghaW5saW5lQ2FsbEZyYW1lKSB7CiAgICAgICAgICAgICAgICAgLy8gUmVhZCB0
aGUgb3V0ZXJtb3N0IGFyZ3VtZW50cyBhbmQgYXJndW1lbnQgY291bnQuCkBAIC0xMzgsNyArMTQw
LDcgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBtX3JlYWQoVmlydHVhbFJlZ2lzdGVyKGkp
KTsKICAgICAgICAgCiAgICAgICAgICAgICAvLyBSZWFkIGFsbCBvZiB0aGUgaW5saW5lIGFyZ3Vt
ZW50cyBhbmQgY2FsbCBmcmFtZSBoZWFkZXJzIHRoYXQgd2UgZGlkbid0IGFscmVhZHkgY2FwdHVy
ZS4KLSAgICAgICAgICAgIGZvciAoSW5saW5lQ2FsbEZyYW1lKiBpbmxpbmVDYWxsRnJhbWUgPSBt
X25vZGUtPm9yaWdpbi5zZW1hbnRpYy5pbmxpbmVDYWxsRnJhbWU7IGlubGluZUNhbGxGcmFtZTsg
aW5saW5lQ2FsbEZyYW1lID0gaW5saW5lQ2FsbEZyYW1lLT5jYWxsZXIuaW5saW5lQ2FsbEZyYW1l
KSB7CisgICAgICAgICAgICBmb3IgKElubGluZUNhbGxGcmFtZSogaW5saW5lQ2FsbEZyYW1lID0g
bV9ub2RlLT5vcmlnaW4uc2VtYW50aWMuaW5saW5lQ2FsbEZyYW1lOyBpbmxpbmVDYWxsRnJhbWU7
IGlubGluZUNhbGxGcmFtZSA9IGlubGluZUNhbGxGcmFtZS0+Z2V0Q2FsbGVySW5saW5lRnJhbWVT
a2lwcGluZ0RlYWRGcmFtZXMoKSkgewogICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IGlubGluZUNhbGxGcmFtZS0+YXJndW1lbnRzLnNpemUoKTsgaS0tID4gMTspCiAgICAgICAgICAg
ICAgICAgICAgIG1fcmVhZChWaXJ0dWFsUmVnaXN0ZXIoaW5saW5lQ2FsbEZyYW1lLT5zdGFja09m
ZnNldCArIHZpcnR1YWxSZWdpc3RlckZvckFyZ3VtZW50KGkpLm9mZnNldCgpKSk7CiAgICAgICAg
ICAgICAgICAgaWYgKGlubGluZUNhbGxGcmFtZS0+aXNDbG9zdXJlQ2FsbCkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3Bh
Z2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxOTAxNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTk0LDExICsxOTQsMTQgQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBNdWx0aUdldEJ5T2Zm
c2V0OgogICAgICAgICBjYXNlIEdldERpcmVjdFBuYW1lOgogICAgICAgICBjYXNlIENhbGw6Cisg
ICAgICAgIGNhc2UgVGFpbENhbGxJbmxpbmVkQ2FsbGVyOgogICAgICAgICBjYXNlIENvbnN0cnVj
dDoKICAgICAgICAgY2FzZSBDYWxsVmFyYXJnczoKKyAgICAgICAgY2FzZSBUYWlsQ2FsbFZhcmFy
Z3NJbmxpbmVkQ2FsbGVyOgogICAgICAgICBjYXNlIENvbnN0cnVjdFZhcmFyZ3M6CiAgICAgICAg
IGNhc2UgQ2FsbEZvcndhcmRWYXJhcmdzOgogICAgICAgICBjYXNlIENvbnN0cnVjdEZvcndhcmRW
YXJhcmdzOgorICAgICAgICBjYXNlIFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3NJbmxpbmVkQ2FsbGVy
OgogICAgICAgICBjYXNlIEdldEdsb2JhbFZhcjoKICAgICAgICAgY2FzZSBHZXRHbG9iYWxMZXhp
Y2FsVmFyaWFibGU6CiAgICAgICAgIGNhc2UgR2V0Q2xvc3VyZVZhcjoKQEAgLTYzNCw2ICs2Mzcs
OSBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIFB1dENsb3N1cmVWYXI6CiAgICAgICAgIGNhc2Ug
UHV0VG9Bcmd1bWVudHM6CiAgICAgICAgIGNhc2UgUmV0dXJuOgorICAgICAgICBjYXNlIFRhaWxD
YWxsOgorICAgICAgICBjYXNlIFRhaWxDYWxsVmFyYXJnczoKKyAgICAgICAgY2FzZSBUYWlsQ2Fs
bEZvcndhcmRWYXJhcmdzOgogICAgICAgICBjYXNlIFRocm93OgogICAgICAgICBjYXNlIFB1dEJ5
SWQ6CiAgICAgICAgIGNhc2UgUHV0QnlJZEZsdXNoOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTYWZlVG9FeGVjdXRlLmgJKHJldmlzaW9uIDE5MDE1MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU2FmZVRvRXhlY3V0ZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0yMTYsOCArMjE2LDExIEBAIGJvb2wgc2FmZVRvRXhlY3V0ZShBYnN0cmFjdFN0YXRlVHlwZSYg
c3QKICAgICBjYXNlIENvbXBhcmVFcToKICAgICBjYXNlIENvbXBhcmVTdHJpY3RFcToKICAgICBj
YXNlIENhbGw6CisgICAgY2FzZSBUYWlsQ2FsbElubGluZWRDYWxsZXI6CiAgICAgY2FzZSBDb25z
dHJ1Y3Q6CiAgICAgY2FzZSBDYWxsVmFyYXJnczoKKyAgICBjYXNlIFRhaWxDYWxsVmFyYXJnc0lu
bGluZWRDYWxsZXI6CisgICAgY2FzZSBUYWlsQ2FsbEZvcndhcmRWYXJhcmdzSW5saW5lZENhbGxl
cjoKICAgICBjYXNlIENvbnN0cnVjdFZhcmFyZ3M6CiAgICAgY2FzZSBMb2FkVmFyYXJnczoKICAg
ICBjYXNlIENhbGxGb3J3YXJkVmFyYXJnczoKQEAgLTI2Miw2ICsyNjUsOSBAQCBib29sIHNhZmVU
b0V4ZWN1dGUoQWJzdHJhY3RTdGF0ZVR5cGUmIHN0CiAgICAgY2FzZSBCcmFuY2g6CiAgICAgY2Fz
ZSBTd2l0Y2g6CiAgICAgY2FzZSBSZXR1cm46CisgICAgY2FzZSBUYWlsQ2FsbDoKKyAgICBjYXNl
IFRhaWxDYWxsVmFyYXJnczoKKyAgICBjYXNlIFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3M6CiAgICAg
Y2FzZSBUaHJvdzoKICAgICBjYXNlIFRocm93UmVmZXJlbmNlRXJyb3I6CiAgICAgY2FzZSBDb3Vu
dEV4ZWN1dGlvbjoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gMTkwMTUzKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzAsNiArMzAsNyBAQAogI2lmIEVOQUJMRShERkdfSklUKQogCiAjaW5jbHVkZSAiQXJy
YXlQcm90b3R5cGUuaCIKKyNpbmNsdWRlICJDYWxsRnJhbWVTaHVmZmxlci5oIgogI2luY2x1ZGUg
IkRGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgiCiAjaW5jbHVkZSAiREZHQ2FsbEFycmF5
QWxsb2NhdG9yU2xvd1BhdGhHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJERkdPcGVyYXRpb25zLmgi
CkBAIC02MzIsMTAgKzYzMywyMCBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2Rl
KiBub2RlCiAgICAgQ2FsbExpbmtJbmZvOjpDYWxsVHlwZSBjYWxsVHlwZTsKICAgICBib29sIGlz
VmFyYXJncyA9IGZhbHNlOwogICAgIGJvb2wgaXNGb3J3YXJkVmFyYXJncyA9IGZhbHNlOworICAg
IGJvb2wgaXNUYWlsID0gZmFsc2U7CisgICAgYm9vbCBpc0VtdWxhdGVkVGFpbCA9IGZhbHNlOwog
ICAgIHN3aXRjaCAobm9kZS0+b3AoKSkgewogICAgIGNhc2UgQ2FsbDoKICAgICAgICAgY2FsbFR5
cGUgPSBDYWxsTGlua0luZm86OkNhbGw7CiAgICAgICAgIGJyZWFrOworICAgIGNhc2UgVGFpbENh
bGw6CisgICAgICAgIGNhbGxUeXBlID0gQ2FsbExpbmtJbmZvOjpUYWlsQ2FsbDsKKyAgICAgICAg
aXNUYWlsID0gdHJ1ZTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBUYWlsQ2FsbElubGluZWRD
YWxsZXI6CisgICAgICAgIGNhbGxUeXBlID0gQ2FsbExpbmtJbmZvOjpDYWxsOworICAgICAgICBp
c0VtdWxhdGVkVGFpbCA9IHRydWU7CisgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ29uc3RydWN0
OgogICAgICAgICBjYWxsVHlwZSA9IENhbGxMaW5rSW5mbzo6Q29uc3RydWN0OwogICAgICAgICBi
cmVhazsKQEAgLTY0Myw2ICs2NTQsMTYgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6ZW1pdENhbGwo
Tm9kZSogbm9kZQogICAgICAgICBjYWxsVHlwZSA9IENhbGxMaW5rSW5mbzo6Q2FsbFZhcmFyZ3M7
CiAgICAgICAgIGlzVmFyYXJncyA9IHRydWU7CiAgICAgICAgIGJyZWFrOworICAgIGNhc2UgVGFp
bENhbGxWYXJhcmdzOgorICAgICAgICBjYWxsVHlwZSA9IENhbGxMaW5rSW5mbzo6VGFpbENhbGxW
YXJhcmdzOworICAgICAgICBpc1ZhcmFyZ3MgPSB0cnVlOworICAgICAgICBpc1RhaWwgPSB0cnVl
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFRhaWxDYWxsVmFyYXJnc0lubGluZWRDYWxsZXI6
CisgICAgICAgIGNhbGxUeXBlID0gQ2FsbExpbmtJbmZvOjpDYWxsVmFyYXJnczsKKyAgICAgICAg
aXNWYXJhcmdzID0gdHJ1ZTsKKyAgICAgICAgaXNFbXVsYXRlZFRhaWwgPSB0cnVlOworICAgICAg
ICBicmVhazsKICAgICBjYXNlIENvbnN0cnVjdFZhcmFyZ3M6CiAgICAgICAgIGNhbGxUeXBlID0g
Q2FsbExpbmtJbmZvOjpDb25zdHJ1Y3RWYXJhcmdzOwogICAgICAgICBpc1ZhcmFyZ3MgPSB0cnVl
OwpAQCAtNjUxLDYgKzY3MiwxNiBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2Rl
KiBub2RlCiAgICAgICAgIGNhbGxUeXBlID0gQ2FsbExpbmtJbmZvOjpDYWxsVmFyYXJnczsKICAg
ICAgICAgaXNGb3J3YXJkVmFyYXJncyA9IHRydWU7CiAgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
VGFpbENhbGxGb3J3YXJkVmFyYXJnczoKKyAgICAgICAgY2FsbFR5cGUgPSBDYWxsTGlua0luZm86
OlRhaWxDYWxsVmFyYXJnczsKKyAgICAgICAgaXNUYWlsID0gdHJ1ZTsKKyAgICAgICAgaXNGb3J3
YXJkVmFyYXJncyA9IHRydWU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVGFpbENhbGxGb3J3
YXJkVmFyYXJnc0lubGluZWRDYWxsZXI6CisgICAgICAgIGNhbGxUeXBlID0gQ2FsbExpbmtJbmZv
OjpDYWxsVmFyYXJnczsKKyAgICAgICAgaXNFbXVsYXRlZFRhaWwgPSB0cnVlOworICAgICAgICBp
c0ZvcndhcmRWYXJhcmdzID0gdHJ1ZTsKKyAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDb25zdHJ1
Y3RGb3J3YXJkVmFyYXJnczoKICAgICAgICAgY2FsbFR5cGUgPSBDYWxsTGlua0luZm86OkNvbnN0
cnVjdFZhcmFyZ3M7CiAgICAgICAgIGlzRm9yd2FyZFZhcmFyZ3MgPSB0cnVlOwpAQCAtNjYxLDYg
KzY5Miw5IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUKICAgICB9
CiAKICAgICBFZGdlIGNhbGxlZUVkZ2UgPSBtX2ppdC5ncmFwaCgpLmNoaWxkKG5vZGUsIDApOwor
ICAgIEdQUlJlZyBjYWxsZWVUYWdHUFI7CisgICAgR1BSUmVnIGNhbGxlZVBheWxvYWRHUFI7Cisg
ICAgQ2FsbEZyYW1lU2h1ZmZsZURhdGEgc2h1ZmZsZURhdGE7CiAgICAgCiAgICAgLy8gR290dGEg
bG9hZCB0aGUgYXJndW1lbnRzIHNvbWVob3cuIFZhcmFyZ3MgaXMgdHJpY2tpZXIuCiAgICAgaWYg
KGlzVmFyYXJncyB8fCBpc0ZvcndhcmRWYXJhcmdzKSB7CkBAIC03NTUsMjggKzc4OSw0OSBAQCB2
b2lkIFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlCiAgICAgICAgIC8vIHJlY2Vp
dmVyIChtZXRob2QgY2FsbCkuIHN1YnNlcXVlbnQgY2hpbGRyZW4gYXJlIHRoZSBhcmd1bWVudHMu
CiAgICAgICAgIGludCBudW1QYXNzZWRBcmdzID0gbm9kZS0+bnVtQ2hpbGRyZW4oKSAtIDE7CiAK
LSAgICAgICAgbV9qaXQuc3RvcmUzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKG51bVBh
c3NlZEFyZ3MpLCBtX2ppdC5jYWxsZWVGcmFtZVBheWxvYWRTbG90KEpTU3RhY2s6OkFyZ3VtZW50
Q291bnQpKTsKKyAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gVGFpbENhbGwpIHsKKyAgICAgICAg
ICAgIEpTVmFsdWVPcGVyYW5kIGNhbGxlZSh0aGlzLCBjYWxsZWVFZGdlKTsKKyAgICAgICAgICAg
IGNhbGxlZVRhZ0dQUiA9IGNhbGxlZS50YWdHUFIoKTsKKyAgICAgICAgICAgIGNhbGxlZVBheWxv
YWRHUFIgPSBjYWxsZWUucGF5bG9hZEdQUigpOworICAgICAgICAgICAgdXNlKGNhbGxlZUVkZ2Up
OworCisgICAgICAgICAgICBzaHVmZmxlRGF0YS5udW1Mb2NhbHMgPSBtX2ppdC5ncmFwaCgpLmZy
YW1lUmVnaXN0ZXJDb3VudCgpOworICAgICAgICAgICAgc2h1ZmZsZURhdGEuY2FsbGVlID0gVmFs
dWVSZWNvdmVyeTo6aW5QYWlyKGNhbGxlZVRhZ0dQUiwgY2FsbGVlUGF5bG9hZEdQUik7CisgICAg
ICAgICAgICBzaHVmZmxlRGF0YS5hcmdzLnJlc2l6ZShudW1QYXNzZWRBcmdzKTsKKworICAgICAg
ICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1QYXNzZWRBcmdzOyArK2kpIHsKKyAgICAgICAg
ICAgICAgICBFZGdlIGFyZ0VkZ2UgPSBtX2ppdC5ncmFwaCgpLnZhckFyZ0NoaWxkKG5vZGUsIGkg
KyAxKTsKKyAgICAgICAgICAgICAgICBHZW5lcmF0aW9uSW5mbyYgaW5mbyA9IGdlbmVyYXRpb25J
bmZvKGFyZ0VkZ2Uubm9kZSgpKTsKKyAgICAgICAgICAgICAgICB1c2UoYXJnRWRnZSk7CisgICAg
ICAgICAgICAgICAgc2h1ZmZsZURhdGEuYXJnc1tpXSA9IGluZm8ucmVjb3ZlcnkoYXJnRWRnZS0+
dmlydHVhbFJlZ2lzdGVyKCkpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgbV9qaXQuc3RvcmUzMihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKG51bVBh
c3NlZEFyZ3MpLCBtX2ppdC5jYWxsZWVGcmFtZVBheWxvYWRTbG90KEpTU3RhY2s6OkFyZ3VtZW50
Q291bnQpKTsKICAgICAgICAgCi0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtUGFzc2Vk
QXJnczsgaSsrKSB7Ci0gICAgICAgICAgICBFZGdlIGFyZ0VkZ2UgPSBtX2ppdC5ncmFwaCgpLm1f
dmFyQXJnQ2hpbGRyZW5bbm9kZS0+Zmlyc3RDaGlsZCgpICsgMSArIGldOwotICAgICAgICAgICAg
SlNWYWx1ZU9wZXJhbmQgYXJnKHRoaXMsIGFyZ0VkZ2UpOwotICAgICAgICAgICAgR1BSUmVnIGFy
Z1RhZ0dQUiA9IGFyZy50YWdHUFIoKTsKLSAgICAgICAgICAgIEdQUlJlZyBhcmdQYXlsb2FkR1BS
ID0gYXJnLnBheWxvYWRHUFIoKTsKLSAgICAgICAgICAgIHVzZShhcmdFZGdlKTsKKyAgICAgICAg
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbnVtUGFzc2VkQXJnczsgaSsrKSB7CisgICAgICAgICAg
ICAgICAgRWRnZSBhcmdFZGdlID0gbV9qaXQuZ3JhcGgoKS5tX3ZhckFyZ0NoaWxkcmVuW25vZGUt
PmZpcnN0Q2hpbGQoKSArIDEgKyBpXTsKKyAgICAgICAgICAgICAgICBKU1ZhbHVlT3BlcmFuZCBh
cmcodGhpcywgYXJnRWRnZSk7CisgICAgICAgICAgICAgICAgR1BSUmVnIGFyZ1RhZ0dQUiA9IGFy
Zy50YWdHUFIoKTsKKyAgICAgICAgICAgICAgICBHUFJSZWcgYXJnUGF5bG9hZEdQUiA9IGFyZy5w
YXlsb2FkR1BSKCk7CisgICAgICAgICAgICAgICAgdXNlKGFyZ0VkZ2UpOwogICAgICAgICAgICAg
Ci0gICAgICAgICAgICBtX2ppdC5zdG9yZTMyKGFyZ1RhZ0dQUiwgbV9qaXQuY2FsbGVlQXJndW1l
bnRUYWdTbG90KGkpKTsKLSAgICAgICAgICAgIG1faml0LnN0b3JlMzIoYXJnUGF5bG9hZEdQUiwg
bV9qaXQuY2FsbGVlQXJndW1lbnRQYXlsb2FkU2xvdChpKSk7CisgICAgICAgICAgICAgICAgbV9q
aXQuc3RvcmUzMihhcmdUYWdHUFIsIG1faml0LmNhbGxlZUFyZ3VtZW50VGFnU2xvdChpKSk7Cisg
ICAgICAgICAgICAgICAgbV9qaXQuc3RvcmUzMihhcmdQYXlsb2FkR1BSLCBtX2ppdC5jYWxsZWVB
cmd1bWVudFBheWxvYWRTbG90KGkpKTsKKyAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0K
IAotICAgIEpTVmFsdWVPcGVyYW5kIGNhbGxlZSh0aGlzLCBjYWxsZWVFZGdlKTsKLSAgICBHUFJS
ZWcgY2FsbGVlVGFnR1BSID0gY2FsbGVlLnRhZ0dQUigpOwotICAgIEdQUlJlZyBjYWxsZWVQYXls
b2FkR1BSID0gY2FsbGVlLnBheWxvYWRHUFIoKTsKLSAgICB1c2UoY2FsbGVlRWRnZSk7Ci0gICAg
bV9qaXQuc3RvcmUzMihjYWxsZWVQYXlsb2FkR1BSLCBtX2ppdC5jYWxsZWVGcmFtZVBheWxvYWRT
bG90KEpTU3RhY2s6OkNhbGxlZSkpOwotICAgIG1faml0LnN0b3JlMzIoY2FsbGVlVGFnR1BSLCBt
X2ppdC5jYWxsZWVGcmFtZVRhZ1Nsb3QoSlNTdGFjazo6Q2FsbGVlKSk7CisgICAgaWYgKG5vZGUt
Pm9wKCkgIT0gVGFpbENhbGwpIHsKKyAgICAgICAgSlNWYWx1ZU9wZXJhbmQgY2FsbGVlKHRoaXMs
IGNhbGxlZUVkZ2UpOworICAgICAgICBjYWxsZWVUYWdHUFIgPSBjYWxsZWUudGFnR1BSKCk7Cisg
ICAgICAgIGNhbGxlZVBheWxvYWRHUFIgPSBjYWxsZWUucGF5bG9hZEdQUigpOworICAgICAgICB1
c2UoY2FsbGVlRWRnZSk7CisgICAgICAgIG1faml0LnN0b3JlMzIoY2FsbGVlUGF5bG9hZEdQUiwg
bV9qaXQuY2FsbGVlRnJhbWVQYXlsb2FkU2xvdChKU1N0YWNrOjpDYWxsZWUpKTsKKyAgICAgICAg
bV9qaXQuc3RvcmUzMihjYWxsZWVUYWdHUFIsIG1faml0LmNhbGxlZUZyYW1lVGFnU2xvdChKU1N0
YWNrOjpDYWxsZWUpKTsKIAotICAgIGZsdXNoUmVnaXN0ZXJzKCk7CisgICAgICAgIGlmICghaXNU
YWlsKQorICAgICAgICAgICAgZmx1c2hSZWdpc3RlcnMoKTsKKyAgICB9CiAKICAgICBHUFJGbHVz
aGVkQ2FsbFJlc3VsdCByZXN1bHRQYXlsb2FkKHRoaXMpOwogICAgIEdQUkZsdXNoZWRDYWxsUmVz
dWx0MiByZXN1bHRUYWcodGhpcyk7CkBAIC03ODYsNDggKzg0MSw3NyBAQCB2b2lkIFNwZWN1bGF0
aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlCiAgICAgSklUQ29tcGlsZXI6OkRhdGFMYWJlbFB0
ciB0YXJnZXRUb0NoZWNrOwogICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBzbG93UGF0aDsKIAot
ICAgIENhbGxTaXRlSW5kZXggY2FsbFNpdGUgPSBtX2ppdC5yZWNvcmRDYWxsU2l0ZUFuZEdlbmVy
YXRlRXhjZXB0aW9uSGFuZGxpbmdPU1JFeGl0SWZOZWVkZWQobm9kZS0+b3JpZ2luLnNlbWFudGlj
LCBtX3N0cmVhbS0+c2l6ZSgpKTsKKyAgICBDb2RlT3JpZ2luIHN0YXRpY09yaWdpbiA9IG5vZGUt
Pm9yaWdpbi5zZW1hbnRpYzsKKyAgICBBU1NFUlQoIWlzVGFpbCB8fCAhc3RhdGljT3JpZ2luLmlu
bGluZUNhbGxGcmFtZSB8fCAhc3RhdGljT3JpZ2luLmlubGluZUNhbGxGcmFtZS0+Z2V0Q2FsbGVy
U2tpcHBpbmdEZWFkRnJhbWVzKCkpOworICAgIEFTU0VSVCghaXNFbXVsYXRlZFRhaWwgfHwgKHN0
YXRpY09yaWdpbi5pbmxpbmVDYWxsRnJhbWUgJiYgc3RhdGljT3JpZ2luLmlubGluZUNhbGxGcmFt
ZS0+Z2V0Q2FsbGVyU2tpcHBpbmdEZWFkRnJhbWVzKCkpKTsKKyAgICBDb2RlT3JpZ2luIGR5bmFt
aWNPcmlnaW4gPQorICAgICAgICBpc0VtdWxhdGVkVGFpbCA/ICpzdGF0aWNPcmlnaW4uaW5saW5l
Q2FsbEZyYW1lLT5nZXRDYWxsZXJTa2lwcGluZ0RlYWRGcmFtZXMoKSA6IHN0YXRpY09yaWdpbjsK
KyAgICBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlID0gbV9qaXQucmVjb3JkQ2FsbFNpdGVBbmRHZW5l
cmF0ZUV4Y2VwdGlvbkhhbmRsaW5nT1NSRXhpdElmTmVlZGVkKGR5bmFtaWNPcmlnaW4sIG1fc3Ry
ZWFtLT5zaXplKCkpOwogICAgIG1faml0LmVtaXRTdG9yZUNhbGxTaXRlSW5kZXgoY2FsbFNpdGUp
OwogICAgIAogICAgIENhbGxMaW5rSW5mbyogaW5mbyA9IG1faml0LmNvZGVCbG9jaygpLT5hZGRD
YWxsTGlua0luZm8oKTsKIAotICAgIHNsb3dQYXRoLmFwcGVuZChtX2ppdC5icmFuY2hJZk5vdENl
bGwoY2FsbGVlLmpzVmFsdWVSZWdzKCkpKTsKKyAgICBzbG93UGF0aC5hcHBlbmQobV9qaXQuYnJh
bmNoSWZOb3RDZWxsKEpTVmFsdWVSZWdzKGNhbGxlZVRhZ0dQUiwgY2FsbGVlUGF5bG9hZEdQUikp
KTsKICAgICBzbG93UGF0aC5hcHBlbmQobV9qaXQuYnJhbmNoUHRyV2l0aFBhdGNoKE1hY3JvQXNz
ZW1ibGVyOjpOb3RFcXVhbCwgY2FsbGVlUGF5bG9hZEdQUiwgdGFyZ2V0VG9DaGVjaykpOwogCi0g
ICAgSklUQ29tcGlsZXI6OkNhbGwgZmFzdENhbGwgPSBtX2ppdC5uZWFyQ2FsbCgpOworICAgIGlm
IChpc1RhaWwpIHsKKyAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gVGFpbENhbGwpIHsKKyAgICAg
ICAgICAgIGluZm8tPnNldEZyYW1lU2h1ZmZsZURhdGEoc2h1ZmZsZURhdGEpOworICAgICAgICAg
ICAgQ2FsbEZyYW1lU2h1ZmZsZXIobV9qaXQsIHNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFpbENh
bGwoKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIG1faml0LmVtaXRSZXN0b3JlQ2Fs
bGVlU2F2ZXMoKTsKKyAgICAgICAgICAgIG1faml0LnByZXBhcmVGb3JUYWlsQ2FsbFNsb3coKTsK
KyAgICAgICAgfQorICAgIH0KKworICAgIEpJVENvbXBpbGVyOjpDYWxsIGZhc3RDYWxsID0gaXNU
YWlsID8gbV9qaXQubmVhclRhaWxDYWxsKCkgOiBtX2ppdC5uZWFyQ2FsbCgpOwogCiAgICAgSklU
Q29tcGlsZXI6Okp1bXAgZG9uZSA9IG1faml0Lmp1bXAoKTsKIAogICAgIHNsb3dQYXRoLmxpbmso
Jm1faml0KTsKIAotICAgIC8vIENhbGxlZSBwYXlsb2FkIG5lZWRzIHRvIGJlIGluIHJlZ1QwLCB0
YWcgaW4gcmVnVDEKLSAgICBpZiAoY2FsbGVlVGFnR1BSID09IEdQUkluZm86OnJlZ1QwKSB7Ci0g
ICAgICAgIGlmIChjYWxsZWVQYXlsb2FkR1BSID09IEdQUkluZm86OnJlZ1QxKQotICAgICAgICAg
ICAgbV9qaXQuc3dhcChHUFJJbmZvOjpyZWdUMSwgR1BSSW5mbzo6cmVnVDApOwotICAgICAgICBl
bHNlIHsKLSAgICAgICAgICAgIG1faml0Lm1vdmUoY2FsbGVlVGFnR1BSLCBHUFJJbmZvOjpyZWdU
MSk7CisgICAgaWYgKG5vZGUtPm9wKCkgPT0gVGFpbENhbGwpIHsKKyAgICAgICAgQ2FsbEZyYW1l
U2h1ZmZsZXIgY2FsbEZyYW1lU2h1ZmZsZXIobV9qaXQsIHNodWZmbGVEYXRhKTsKKyAgICAgICAg
Y2FsbEZyYW1lU2h1ZmZsZXIuc2V0Q2FsbGVlSlNWYWx1ZVJlZ3MoSlNWYWx1ZVJlZ3MoCisgICAg
ICAgICAgICBHUFJJbmZvOjpyZWdUMSwgR1BSSW5mbzo6cmVnVDApKTsKKyAgICAgICAgY2FsbEZy
YW1lU2h1ZmZsZXIucHJlcGFyZUZvclNsb3dQYXRoKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
Ly8gQ2FsbGVlIHBheWxvYWQgbmVlZHMgdG8gYmUgaW4gcmVnVDAsIHRhZyBpbiByZWdUMQorICAg
ICAgICBpZiAoY2FsbGVlVGFnR1BSID09IEdQUkluZm86OnJlZ1QwKSB7CisgICAgICAgICAgICBp
ZiAoY2FsbGVlUGF5bG9hZEdQUiA9PSBHUFJJbmZvOjpyZWdUMSkKKyAgICAgICAgICAgICAgICBt
X2ppdC5zd2FwKEdQUkluZm86OnJlZ1QxLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAgICAgICBl
bHNlIHsKKyAgICAgICAgICAgICAgICBtX2ppdC5tb3ZlKGNhbGxlZVRhZ0dQUiwgR1BSSW5mbzo6
cmVnVDEpOworICAgICAgICAgICAgICAgIG1faml0Lm1vdmUoY2FsbGVlUGF5bG9hZEdQUiwgR1BS
SW5mbzo6cmVnVDApOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgewogICAgICAgICAg
ICAgbV9qaXQubW92ZShjYWxsZWVQYXlsb2FkR1BSLCBHUFJJbmZvOjpyZWdUMCk7CisgICAgICAg
ICAgICBtX2ppdC5tb3ZlKGNhbGxlZVRhZ0dQUiwgR1BSSW5mbzo6cmVnVDEpOwogICAgICAgICB9
Ci0gICAgfSBlbHNlIHsKLSAgICAgICAgbV9qaXQubW92ZShjYWxsZWVQYXlsb2FkR1BSLCBHUFJJ
bmZvOjpyZWdUMCk7Ci0gICAgICAgIG1faml0Lm1vdmUoY2FsbGVlVGFnR1BSLCBHUFJJbmZvOjpy
ZWdUMSk7CisKKyAgICAgICAgaWYgKGlzVGFpbCkKKyAgICAgICAgICAgIG1faml0LmVtaXRSZXN0
b3JlQ2FsbGVlU2F2ZXMoKTsKICAgICB9CisKICAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVy
OjpUcnVzdGVkSW1tUHRyKGluZm8pLCBHUFJJbmZvOjpyZWdUMik7CiAgICAgSklUQ29tcGlsZXI6
OkNhbGwgc2xvd0NhbGwgPSBtX2ppdC5uZWFyQ2FsbCgpOwogCiAgICAgZG9uZS5saW5rKCZtX2pp
dCk7CiAKLSAgICBtX2ppdC5zZXR1cFJlc3VsdHMocmVzdWx0UGF5bG9hZEdQUiwgcmVzdWx0VGFn
R1BSKTsKKyAgICBpZiAoaXNUYWlsKQorICAgICAgICBtX2ppdC5hYm9ydFdpdGhSZWFzb24oSklU
RGlkUmV0dXJuRnJvbVRhaWxDYWxsKTsKKyAgICBlbHNlIHsKKyAgICAgICAgbV9qaXQuc2V0dXBS
ZXN1bHRzKHJlc3VsdFBheWxvYWRHUFIsIHJlc3VsdFRhZ0dQUik7CiAKLSAgICBqc1ZhbHVlUmVz
dWx0KHJlc3VsdFRhZ0dQUiwgcmVzdWx0UGF5bG9hZEdQUiwgbm9kZSwgRGF0YUZvcm1hdEpTLCBV
c2VDaGlsZHJlbkNhbGxlZEV4cGxpY2l0bHkpOworICAgICAgICBqc1ZhbHVlUmVzdWx0KHJlc3Vs
dFRhZ0dQUiwgcmVzdWx0UGF5bG9hZEdQUiwgbm9kZSwgRGF0YUZvcm1hdEpTLCBVc2VDaGlsZHJl
bkNhbGxlZEV4cGxpY2l0bHkpOworICAgICAgICAvLyBBZnRlciB0aGUgY2FsbHMgYXJlIGRvbmUs
IHdlIG5lZWQgdG8gcmVlc3RhYmxpc2ggb3VyIHN0YWNrCisgICAgICAgIC8vIHBvaW50ZXIuIFdl
IHJlbHkgb24gdGhpcyBmb3IgdmFyYXJncyBjYWxscywgY2FsbHMgd2l0aCBhcml0eQorICAgICAg
ICAvLyBtaXNtYXRjaCAodGhlIGNhbGxmcmFtZSBpcyBzbGlkZWQpIGFuZCB0YWlsIGNhbGxzLgor
ICAgICAgICBtX2ppdC5hZGRQdHIoVHJ1c3RlZEltbTMyKG1faml0LmdyYXBoKCkuc3RhY2tQb2lu
dGVyT2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIpKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0
ZXIsIEpJVENvbXBpbGVyOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisgICAgfQogCiAgICAgaW5m
by0+c2V0VXBDYWxsKGNhbGxUeXBlLCBub2RlLT5vcmlnaW4uc2VtYW50aWMsIGNhbGxlZVBheWxv
YWRHUFIpOwogICAgIG1faml0LmFkZEpTQ2FsbChmYXN0Q2FsbCwgc2xvd0NhbGwsIHRhcmdldFRv
Q2hlY2ssIGluZm8pOwotICAgIAotICAgIC8vIEFmdGVyIHRoZSBjYWxscyBhcmUgZG9uZSwgd2Ug
bmVlZCB0byByZWVzdGFibGlzaCBvdXIgc3RhY2sKLSAgICAvLyBwb2ludGVyLiBXZSByZWx5IG9u
IHRoaXMgZm9yIHZhcmFyZ3MgY2FsbHMsIGNhbGxzIHdpdGggYXJpdHkKLSAgICAvLyBtaXNtYXRj
aCAodGhlIGNhbGxmcmFtZSBpcyBzbGlkZWQpIGFuZCB0YWlsIGNhbGxzLgotICAgIG1faml0LmFk
ZFB0cihUcnVzdGVkSW1tMzIobV9qaXQuZ3JhcGgoKS5zdGFja1BvaW50ZXJPZmZzZXQoKSAqIHNp
emVvZihSZWdpc3RlcikpLCBHUFJJbmZvOjpjYWxsRnJhbWVSZWdpc3RlciwgSklUQ29tcGlsZXI6
OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKIH0KIAogdGVtcGxhdGU8Ym9vbCBzdHJpY3Q+CkBAIC00
MjUzLDEwICs0MzM3LDE2IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9k
ZSkKICAgICAgICAgYnJlYWs7CiAKICAgICBjYXNlIENhbGw6CisgICAgY2FzZSBUYWlsQ2FsbDoK
KyAgICBjYXNlIFRhaWxDYWxsSW5saW5lZENhbGxlcjoKICAgICBjYXNlIENvbnN0cnVjdDoKICAg
ICBjYXNlIENhbGxWYXJhcmdzOgotICAgIGNhc2UgQ2FsbEZvcndhcmRWYXJhcmdzOgorICAgIGNh
c2UgVGFpbENhbGxWYXJhcmdzOgorICAgIGNhc2UgVGFpbENhbGxWYXJhcmdzSW5saW5lZENhbGxl
cjoKICAgICBjYXNlIENvbnN0cnVjdFZhcmFyZ3M6CisgICAgY2FzZSBDYWxsRm9yd2FyZFZhcmFy
Z3M6CisgICAgY2FzZSBUYWlsQ2FsbEZvcndhcmRWYXJhcmdzOgorICAgIGNhc2UgVGFpbENhbGxG
b3J3YXJkVmFyYXJnc0lubGluZWRDYWxsZXI6CiAgICAgY2FzZSBDb25zdHJ1Y3RGb3J3YXJkVmFy
YXJnczoKICAgICAgICAgZW1pdENhbGwobm9kZSk7CiAgICAgICAgIGJyZWFrOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShy
ZXZpc2lvbiAxOTAxNTMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw2ICsyOSw3IEBACiAjaWYgRU5BQkxF
KERGR19KSVQpCiAKICNpbmNsdWRlICJBcnJheVByb3RvdHlwZS5oIgorI2luY2x1ZGUgIkNhbGxG
cmFtZVNodWZmbGVyLmgiCiAjaW5jbHVkZSAiREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMu
aCIKICNpbmNsdWRlICJERkdDYWxsQXJyYXlBbGxvY2F0b3JTbG93UGF0aEdlbmVyYXRvci5oIgog
I2luY2x1ZGUgIkRGR09wZXJhdGlvbnMuaCIKQEAgLTYxMywxMCArNjE0LDIwIEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUKICAgICBDYWxsTGlua0luZm86OkNhbGxU
eXBlIGNhbGxUeXBlOwogICAgIGJvb2wgaXNWYXJhcmdzID0gZmFsc2U7CiAgICAgYm9vbCBpc0Zv
cndhcmRWYXJhcmdzID0gZmFsc2U7CisgICAgYm9vbCBpc1RhaWwgPSBmYWxzZTsKKyAgICBib29s
IGlzRW11bGF0ZWRUYWlsID0gZmFsc2U7CiAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAg
Y2FzZSBDYWxsOgogICAgICAgICBjYWxsVHlwZSA9IENhbGxMaW5rSW5mbzo6Q2FsbDsKICAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBUYWlsQ2FsbDoKKyAgICAgICAgY2FsbFR5cGUgPSBDYWxsTGlu
a0luZm86OlRhaWxDYWxsOworICAgICAgICBpc1RhaWwgPSB0cnVlOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIFRhaWxDYWxsSW5saW5lZENhbGxlcjoKKyAgICAgICAgY2FsbFR5cGUgPSBDYWxs
TGlua0luZm86OkNhbGw7CisgICAgICAgIGlzRW11bGF0ZWRUYWlsID0gdHJ1ZTsKKyAgICAgICAg
YnJlYWs7CiAgICAgY2FzZSBDb25zdHJ1Y3Q6CiAgICAgICAgIGNhbGxUeXBlID0gQ2FsbExpbmtJ
bmZvOjpDb25zdHJ1Y3Q7CiAgICAgICAgIGJyZWFrOwpAQCAtNjI0LDYgKzYzNSwxNiBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlCiAgICAgICAgIGNhbGxUeXBlID0g
Q2FsbExpbmtJbmZvOjpDYWxsVmFyYXJnczsKICAgICAgICAgaXNWYXJhcmdzID0gdHJ1ZTsKICAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBUYWlsQ2FsbFZhcmFyZ3M6CisgICAgICAgIGNhbGxUeXBl
ID0gQ2FsbExpbmtJbmZvOjpUYWlsQ2FsbFZhcmFyZ3M7CisgICAgICAgIGlzVmFyYXJncyA9IHRy
dWU7CisgICAgICAgIGlzVGFpbCA9IHRydWU7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgVGFp
bENhbGxWYXJhcmdzSW5saW5lZENhbGxlcjoKKyAgICAgICAgY2FsbFR5cGUgPSBDYWxsTGlua0lu
Zm86OkNhbGxWYXJhcmdzOworICAgICAgICBpc1ZhcmFyZ3MgPSB0cnVlOworICAgICAgICBpc0Vt
dWxhdGVkVGFpbCA9IHRydWU7CisgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ29uc3RydWN0VmFy
YXJnczoKICAgICAgICAgY2FsbFR5cGUgPSBDYWxsTGlua0luZm86OkNvbnN0cnVjdFZhcmFyZ3M7
CiAgICAgICAgIGlzVmFyYXJncyA9IHRydWU7CkBAIC02MzYsMTIgKzY1NywyMyBAQCB2b2lkIFNw
ZWN1bGF0aXZlSklUOjplbWl0Q2FsbChOb2RlKiBub2RlCiAgICAgICAgIGNhbGxUeXBlID0gQ2Fs
bExpbmtJbmZvOjpDb25zdHJ1Y3RWYXJhcmdzOwogICAgICAgICBpc0ZvcndhcmRWYXJhcmdzID0g
dHJ1ZTsKICAgICAgICAgYnJlYWs7CisgICAgY2FzZSBUYWlsQ2FsbEZvcndhcmRWYXJhcmdzOgor
ICAgICAgICBjYWxsVHlwZSA9IENhbGxMaW5rSW5mbzo6VGFpbENhbGxWYXJhcmdzOworICAgICAg
ICBpc1RhaWwgPSB0cnVlOworICAgICAgICBpc0ZvcndhcmRWYXJhcmdzID0gdHJ1ZTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBUYWlsQ2FsbEZvcndhcmRWYXJhcmdzSW5saW5lZENhbGxlcjoK
KyAgICAgICAgY2FsbFR5cGUgPSBDYWxsTGlua0luZm86OkNhbGxWYXJhcmdzOworICAgICAgICBp
c0VtdWxhdGVkVGFpbCA9IHRydWU7CisgICAgICAgIGlzRm9yd2FyZFZhcmFyZ3MgPSB0cnVlOwor
ICAgICAgICBicmVhazsKICAgICBkZWZhdWx0OgogICAgICAgICBERkdfQ1JBU0gobV9qaXQuZ3Jh
cGgoKSwgbm9kZSwgImJhZCBub2RlIHR5cGUiKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCi0g
ICAgRWRnZSBjYWxsZWVFZGdlID0gbV9qaXQuZ3JhcGgoKS5jaGlsZChub2RlLCAwKTsKKyAgICBH
UFJSZWcgY2FsbGVlR1BSOworICAgIENhbGxGcmFtZVNodWZmbGVEYXRhIHNodWZmbGVEYXRhOwog
ICAgIAogICAgIC8vIEdvdHRhIGxvYWQgdGhlIGFyZ3VtZW50cyBzb21laG93LiBWYXJhcmdzIGlz
IHRyaWNraWVyLgogICAgIGlmIChpc1ZhcmFyZ3MgfHwgaXNGb3J3YXJkVmFyYXJncykgewpAQCAt
NzMyLDYwICs3NjQsMTEyIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5v
ZGUKICAgICAgICAgaW50IG51bVBhc3NlZEFyZ3MgPSBub2RlLT5udW1DaGlsZHJlbigpIC0gMTsK
IAogICAgICAgICBtX2ppdC5zdG9yZTMyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIobnVt
UGFzc2VkQXJncyksIEpJVENvbXBpbGVyOjpjYWxsZWVGcmFtZVBheWxvYWRTbG90KEpTU3RhY2s6
OkFyZ3VtZW50Q291bnQpKTsKLSAgICAKLSAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1Q
YXNzZWRBcmdzOyBpKyspIHsKLSAgICAgICAgICAgIEVkZ2UgYXJnRWRnZSA9IG1faml0LmdyYXBo
KCkubV92YXJBcmdDaGlsZHJlbltub2RlLT5maXJzdENoaWxkKCkgKyAxICsgaV07Ci0gICAgICAg
ICAgICBKU1ZhbHVlT3BlcmFuZCBhcmcodGhpcywgYXJnRWRnZSk7Ci0gICAgICAgICAgICBHUFJS
ZWcgYXJnR1BSID0gYXJnLmdwcigpOwotICAgICAgICAgICAgdXNlKGFyZ0VkZ2UpOwotICAgICAg
ICAKLSAgICAgICAgICAgIG1faml0LnN0b3JlNjQoYXJnR1BSLCBKSVRDb21waWxlcjo6Y2FsbGVl
QXJndW1lbnRTbG90KGkpKTsKKworICAgICAgICBpZiAobm9kZS0+b3AoKSA9PSBUYWlsQ2FsbCkg
eworICAgICAgICAgICAgRWRnZSBjYWxsZWVFZGdlID0gbV9qaXQuZ3JhcGgoKS5jaGlsZChub2Rl
LCAwKTsKKyAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIGNhbGxlZSh0aGlzLCBjYWxsZWVFZGdl
KTsKKyAgICAgICAgICAgIGNhbGxlZUdQUiA9IGNhbGxlZS5ncHIoKTsKKyAgICAgICAgICAgIGNh
bGxlZS51c2UoKTsKKworICAgICAgICAgICAgc2h1ZmZsZURhdGEubnVtTG9jYWxzID0gbV9qaXQu
Z3JhcGgoKS5mcmFtZVJlZ2lzdGVyQ291bnQoKTsKKyAgICAgICAgICAgIHNodWZmbGVEYXRhLmNh
bGxlZSA9IFZhbHVlUmVjb3Zlcnk6OmluR1BSKGNhbGxlZUdQUiwgRGF0YUZvcm1hdEpTKTsKKyAg
ICAgICAgICAgIHNodWZmbGVEYXRhLmFyZ3MucmVzaXplKG51bVBhc3NlZEFyZ3MpOworCisgICAg
ICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bVBhc3NlZEFyZ3M7ICsraSkgeworICAgICAg
ICAgICAgICAgIEVkZ2UgYXJnRWRnZSA9IG1faml0LmdyYXBoKCkudmFyQXJnQ2hpbGQobm9kZSwg
aSArIDEpOworICAgICAgICAgICAgICAgIEdlbmVyYXRpb25JbmZvJiBpbmZvID0gZ2VuZXJhdGlv
bkluZm8oYXJnRWRnZS5ub2RlKCkpOworICAgICAgICAgICAgICAgIHVzZShhcmdFZGdlKTsKKyAg
ICAgICAgICAgICAgICBzaHVmZmxlRGF0YS5hcmdzW2ldID0gaW5mby5yZWNvdmVyeShhcmdFZGdl
LT52aXJ0dWFsUmVnaXN0ZXIoKSk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHNodWZm
bGVEYXRhLnNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycyhtX2ppdC5jb2RlQmxvY2soKSk7CisgICAg
ICAgIH0gZWxzZSB7CisgICAgICAgICAgICBtX2ppdC5zdG9yZTMyKE1hY3JvQXNzZW1ibGVyOjpU
cnVzdGVkSW1tMzIobnVtUGFzc2VkQXJncyksIEpJVENvbXBpbGVyOjpjYWxsZWVGcmFtZVBheWxv
YWRTbG90KEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpKTsKKworICAgICAgICAgICAgZm9yIChpbnQg
aSA9IDA7IGkgPCBudW1QYXNzZWRBcmdzOyBpKyspIHsKKyAgICAgICAgICAgICAgICBFZGdlIGFy
Z0VkZ2UgPSBtX2ppdC5ncmFwaCgpLm1fdmFyQXJnQ2hpbGRyZW5bbm9kZS0+Zmlyc3RDaGlsZCgp
ICsgMSArIGldOworICAgICAgICAgICAgICAgIEpTVmFsdWVPcGVyYW5kIGFyZyh0aGlzLCBhcmdF
ZGdlKTsKKyAgICAgICAgICAgICAgICBHUFJSZWcgYXJnR1BSID0gYXJnLmdwcigpOworICAgICAg
ICAgICAgICAgIHVzZShhcmdFZGdlKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICBtX2ppdC5zdG9yZTY0KGFyZ0dQUiwgSklUQ29tcGlsZXI6OmNhbGxlZUFyZ3VtZW50U2xvdChp
KSk7CisgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBKU1ZhbHVlT3BlcmFu
ZCBjYWxsZWUodGhpcywgY2FsbGVlRWRnZSk7Ci0gICAgR1BSUmVnIGNhbGxlZUdQUiA9IGNhbGxl
ZS5ncHIoKTsKLSAgICBjYWxsZWUudXNlKCk7Ci0gICAgbV9qaXQuc3RvcmU2NChjYWxsZWVHUFIs
IEpJVENvbXBpbGVyOjpjYWxsZWVGcmFtZVNsb3QoSlNTdGFjazo6Q2FsbGVlKSk7Ci0gICAgCi0g
ICAgZmx1c2hSZWdpc3RlcnMoKTsKKyAgICBpZiAobm9kZS0+b3AoKSAhPSBUYWlsQ2FsbCkgewor
ICAgICAgICBFZGdlIGNhbGxlZUVkZ2UgPSBtX2ppdC5ncmFwaCgpLmNoaWxkKG5vZGUsIDApOwor
ICAgICAgICBKU1ZhbHVlT3BlcmFuZCBjYWxsZWUodGhpcywgY2FsbGVlRWRnZSk7CisgICAgICAg
IGNhbGxlZUdQUiA9IGNhbGxlZS5ncHIoKTsKKyAgICAgICAgY2FsbGVlLnVzZSgpOworICAgICAg
ICBtX2ppdC5zdG9yZTY0KGNhbGxlZUdQUiwgSklUQ29tcGlsZXI6OmNhbGxlZUZyYW1lU2xvdChK
U1N0YWNrOjpDYWxsZWUpKTsKIAotICAgIEdQUkZsdXNoZWRDYWxsUmVzdWx0IHJlc3VsdCh0aGlz
KTsKLSAgICBHUFJSZWcgcmVzdWx0R1BSID0gcmVzdWx0LmdwcigpOworICAgICAgICBmbHVzaFJl
Z2lzdGVycygpOworICAgIH0KIAotICAgIEpJVENvbXBpbGVyOjpEYXRhTGFiZWxQdHIgdGFyZ2V0
VG9DaGVjazsKLSAgICBKSVRDb21waWxlcjo6SnVtcCBzbG93UGF0aDsKKyAgICBDb2RlT3JpZ2lu
IHN0YXRpY09yaWdpbiA9IG5vZGUtPm9yaWdpbi5zZW1hbnRpYzsKKyAgICBBU1NFUlQoIWlzVGFp
bCB8fCAhc3RhdGljT3JpZ2luLmlubGluZUNhbGxGcmFtZSB8fCAhc3RhdGljT3JpZ2luLmlubGlu
ZUNhbGxGcmFtZS0+Z2V0Q2FsbGVyU2tpcHBpbmdEZWFkRnJhbWVzKCkpOworICAgIEFTU0VSVCgh
aXNFbXVsYXRlZFRhaWwgfHwgKHN0YXRpY09yaWdpbi5pbmxpbmVDYWxsRnJhbWUgJiYgc3RhdGlj
T3JpZ2luLmlubGluZUNhbGxGcmFtZS0+Z2V0Q2FsbGVyU2tpcHBpbmdEZWFkRnJhbWVzKCkpKTsK
KyAgICBDb2RlT3JpZ2luIGR5bmFtaWNPcmlnaW4gPQorICAgIGlzRW11bGF0ZWRUYWlsID8gKnN0
YXRpY09yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmdldENhbGxlclNraXBwaW5nRGVhZEZyYW1lcygp
IDogc3RhdGljT3JpZ2luOwogCi0gICAgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZSA9IG1faml0LnJl
Y29yZENhbGxTaXRlQW5kR2VuZXJhdGVFeGNlcHRpb25IYW5kbGluZ09TUkV4aXRJZk5lZWRlZChu
b2RlLT5vcmlnaW4uc2VtYW50aWMsIG1fc3RyZWFtLT5zaXplKCkpOworICAgIENhbGxTaXRlSW5k
ZXggY2FsbFNpdGUgPSBtX2ppdC5yZWNvcmRDYWxsU2l0ZUFuZEdlbmVyYXRlRXhjZXB0aW9uSGFu
ZGxpbmdPU1JFeGl0SWZOZWVkZWQoZHluYW1pY09yaWdpbiwgbV9zdHJlYW0tPnNpemUoKSk7CiAg
ICAgbV9qaXQuZW1pdFN0b3JlQ2FsbFNpdGVJbmRleChjYWxsU2l0ZSk7CiAgICAgCiAgICAgQ2Fs
bExpbmtJbmZvKiBjYWxsTGlua0luZm8gPSBtX2ppdC5jb2RlQmxvY2soKS0+YWRkQ2FsbExpbmtJ
bmZvKCk7Ci0gICAgCi0gICAgc2xvd1BhdGggPSBtX2ppdC5icmFuY2hQdHJXaXRoUGF0Y2goTWFj
cm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBjYWxsZWVHUFIsIHRhcmdldFRvQ2hlY2ssIE1hY3JvQXNz
ZW1ibGVyOjpUcnVzdGVkSW1tUHRyKDApKTsKIAotICAgIEpJVENvbXBpbGVyOjpDYWxsIGZhc3RD
YWxsID0gbV9qaXQubmVhckNhbGwoKTsKKyAgICBKSVRDb21waWxlcjo6RGF0YUxhYmVsUHRyIHRh
cmdldFRvQ2hlY2s7CisgICAgSklUQ29tcGlsZXI6Okp1bXAgc2xvd1BhdGggPSBtX2ppdC5icmFu
Y2hQdHJXaXRoUGF0Y2goTWFjcm9Bc3NlbWJsZXI6Ok5vdEVxdWFsLCBjYWxsZWVHUFIsIHRhcmdl
dFRvQ2hlY2ssIE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tUHRyKDApKTsKKworICAgIGlmIChp
c1RhaWwpIHsKKyAgICAgICAgaWYgKG5vZGUtPm9wKCkgPT0gVGFpbENhbGwpIHsKKyAgICAgICAg
ICAgIGNhbGxMaW5rSW5mby0+c2V0RnJhbWVTaHVmZmxlRGF0YShzaHVmZmxlRGF0YSk7CisgICAg
ICAgICAgICBDYWxsRnJhbWVTaHVmZmxlcihtX2ppdCwgc2h1ZmZsZURhdGEpLnByZXBhcmVGb3JU
YWlsQ2FsbCgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgbV9qaXQuZW1pdFJlc3Rv
cmVDYWxsZWVTYXZlcygpOworICAgICAgICAgICAgbV9qaXQucHJlcGFyZUZvclRhaWxDYWxsU2xv
dygpOworICAgICAgICB9CisgICAgfQorCisgICAgSklUQ29tcGlsZXI6OkNhbGwgZmFzdENhbGwg
PSBpc1RhaWwgPyBtX2ppdC5uZWFyVGFpbENhbGwoKSA6IG1faml0Lm5lYXJDYWxsKCk7CiAKICAg
ICBKSVRDb21waWxlcjo6SnVtcCBkb25lID0gbV9qaXQuanVtcCgpOwotICAgIAorCiAgICAgc2xv
d1BhdGgubGluaygmbV9qaXQpOwotICAgIAotICAgIG1faml0Lm1vdmUoY2FsbGVlR1BSLCBHUFJJ
bmZvOjpyZWdUMCk7IC8vIENhbGxlZSBuZWVkcyB0byBiZSBpbiByZWdUMAorCisgICAgaWYgKG5v
ZGUtPm9wKCkgPT0gVGFpbENhbGwpIHsKKyAgICAgICAgQ2FsbEZyYW1lU2h1ZmZsZXIgY2FsbEZy
YW1lU2h1ZmZsZXIobV9qaXQsIHNodWZmbGVEYXRhKTsKKyAgICAgICAgY2FsbEZyYW1lU2h1ZmZs
ZXIuc2V0Q2FsbGVlSlNWYWx1ZVJlZ3MoSlNWYWx1ZVJlZ3MoR1BSSW5mbzo6cmVnVDApKTsKKyAg
ICAgICAgY2FsbEZyYW1lU2h1ZmZsZXIucHJlcGFyZUZvclNsb3dQYXRoKCk7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgbV9qaXQubW92ZShjYWxsZWVHUFIsIEdQUkluZm86OnJlZ1QwKTsgLy8gQ2Fs
bGVlIG5lZWRzIHRvIGJlIGluIHJlZ1QwCisKKyAgICAgICAgaWYgKGlzVGFpbCkKKyAgICAgICAg
ICAgIG1faml0LmVtaXRSZXN0b3JlQ2FsbGVlU2F2ZXMoKTsgLy8gVGhpcyBuZWVkcyB0byBoYXBw
ZW4gYWZ0ZXIgd2UgbW92ZWQgY2FsbGVlR1BSIHRvIHJlZ1QwCisgICAgfQorCiAgICAgbV9qaXQu
bW92ZShNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbVB0cihjYWxsTGlua0luZm8pLCBHUFJJbmZv
OjpyZWdUMik7IC8vIExpbmsgaW5mbyBuZWVkcyB0byBiZSBpbiByZWdUMgogICAgIEpJVENvbXBp
bGVyOjpDYWxsIHNsb3dDYWxsID0gbV9qaXQubmVhckNhbGwoKTsKLSAgICAKKwogICAgIGRvbmUu
bGluaygmbV9qaXQpOwotICAgIAotICAgIG1faml0Lm1vdmUoR1BSSW5mbzo6cmV0dXJuVmFsdWVH
UFIsIHJlc3VsdEdQUik7Ci0gICAgCi0gICAganNWYWx1ZVJlc3VsdChyZXN1bHRHUFIsIG1fY3Vy
cmVudE5vZGUsIERhdGFGb3JtYXRKUywgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKLSAg
ICAKKworICAgIGlmIChpc1RhaWwpCisgICAgICAgIG1faml0LmFib3J0V2l0aFJlYXNvbihKSVRE
aWRSZXR1cm5Gcm9tVGFpbENhbGwpOworICAgIGVsc2UgeworICAgICAgICBHUFJGbHVzaGVkQ2Fs
bFJlc3VsdCByZXN1bHQodGhpcyk7CisgICAgICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQu
Z3ByKCk7CisgICAgICAgIG1faml0Lm1vdmUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIHJlc3Vs
dEdQUik7CisKKyAgICAgICAganNWYWx1ZVJlc3VsdChyZXN1bHRHUFIsIG1fY3VycmVudE5vZGUs
IERhdGFGb3JtYXRKUywgVXNlQ2hpbGRyZW5DYWxsZWRFeHBsaWNpdGx5KTsKKworICAgICAgICAv
LyBBZnRlciB0aGUgY2FsbHMgYXJlIGRvbmUsIHdlIG5lZWQgdG8gcmVlc3RhYmxpc2ggb3VyIHN0
YWNrCisgICAgICAgIC8vIHBvaW50ZXIuIFdlIHJlbHkgb24gdGhpcyBmb3IgdmFyYXJncyBjYWxs
cywgY2FsbHMgd2l0aCBhcml0eQorICAgICAgICAvLyBtaXNtYXRjaCAodGhlIGNhbGxmcmFtZSBp
cyBzbGlkZWQpIGFuZCB0YWlsIGNhbGxzLgorICAgICAgICBtX2ppdC5hZGRQdHIoVHJ1c3RlZElt
bTMyKG1faml0LmdyYXBoKCkuc3RhY2tQb2ludGVyT2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0ZXIp
KSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEpJVENvbXBpbGVyOjpzdGFja1BvaW50ZXJS
ZWdpc3Rlcik7CisgICAgfQorCiAgICAgY2FsbExpbmtJbmZvLT5zZXRVcENhbGwoY2FsbFR5cGUs
IG1fY3VycmVudE5vZGUtPm9yaWdpbi5zZW1hbnRpYywgIGNhbGxlZUdQUik7ICAgIAogICAgIG1f
aml0LmFkZEpTQ2FsbChmYXN0Q2FsbCwgc2xvd0NhbGwsIHRhcmdldFRvQ2hlY2ssIGNhbGxMaW5r
SW5mbyk7Ci0KLSAgICAvLyBBZnRlciB0aGUgY2FsbHMgYXJlIGRvbmUsIHdlIG5lZWQgdG8gcmVl
c3RhYmxpc2ggb3VyIHN0YWNrCi0gICAgLy8gcG9pbnRlci4gV2UgcmVseSBvbiB0aGlzIGZvciB2
YXJhcmdzIGNhbGxzLCBjYWxscyB3aXRoIGFyaXR5Ci0gICAgLy8gbWlzbWF0Y2ggKHRoZSBjYWxs
ZnJhbWUgaXMgc2xpZGVkKSBhbmQgdGFpbCBjYWxscy4KLSAgICBtX2ppdC5hZGRQdHIoVHJ1c3Rl
ZEltbTMyKG1faml0LmdyYXBoKCkuc3RhY2tQb2ludGVyT2Zmc2V0KCkgKiBzaXplb2YoUmVnaXN0
ZXIpKSwgR1BSSW5mbzo6Y2FsbEZyYW1lUmVnaXN0ZXIsIEpJVENvbXBpbGVyOjpzdGFja1BvaW50
ZXJSZWdpc3Rlcik7CiB9CiAKIC8vIENsYW5nIHNob3VsZCBhbGxvdyB1bnJlYWNoYWJsZSBbW2Ns
YW5nOjpmYWxsdGhyb3VnaF1dIGluIHRlbXBsYXRlIGZ1bmN0aW9ucyBpZiBhbnkgdGVtcGxhdGUg
ZXhwYW5zaW9uIHVzZXMgaXQKQEAgLTQyNDgsMTQgKzQzMzIsMjAgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgICAgICBicmVhazsKIAogICAgIGNhc2UgQ2Fs
bDoKKyAgICBjYXNlIFRhaWxDYWxsOgorICAgIGNhc2UgVGFpbENhbGxJbmxpbmVkQ2FsbGVyOgog
ICAgIGNhc2UgQ29uc3RydWN0OgogICAgIGNhc2UgQ2FsbFZhcmFyZ3M6CisgICAgY2FzZSBUYWls
Q2FsbFZhcmFyZ3M6CisgICAgY2FzZSBUYWlsQ2FsbFZhcmFyZ3NJbmxpbmVkQ2FsbGVyOgogICAg
IGNhc2UgQ2FsbEZvcndhcmRWYXJhcmdzOgogICAgIGNhc2UgQ29uc3RydWN0VmFyYXJnczoKICAg
ICBjYXNlIENvbnN0cnVjdEZvcndhcmRWYXJhcmdzOgorICAgIGNhc2UgVGFpbENhbGxGb3J3YXJk
VmFyYXJnczoKKyAgICBjYXNlIFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3NJbmxpbmVkQ2FsbGVyOgog
ICAgICAgICBlbWl0Q2FsbChub2RlKTsKICAgICAgICAgYnJlYWs7Ci0gICAgICAgIAorCiAgICAg
Y2FzZSBMb2FkVmFyYXJnczogewogICAgICAgICBMb2FkVmFyYXJnc0RhdGEqIGRhdGEgPSBub2Rl
LT5sb2FkVmFyYXJnc0RhdGEoKTsKICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1ZhbGlkYXRlLmNwcAkocmV2aXNpb24gMTkwMTUzKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdWYWxpZGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3MCw2ICs1
NzAsOCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGNhc2UgVXBzaWxvbjoKICAgICAgICAg
ICAgICAgICBjYXNlIEZvcndhcmRWYXJhcmdzOgogICAgICAgICAgICAgICAgIGNhc2UgQ2FsbEZv
cndhcmRWYXJhcmdzOgorICAgICAgICAgICAgICAgIGNhc2UgVGFpbENhbGxGb3J3YXJkVmFyYXJn
czoKKyAgICAgICAgICAgICAgICBjYXNlIFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3NJbmxpbmVkQ2Fs
bGVyOgogICAgICAgICAgICAgICAgIGNhc2UgQ29uc3RydWN0Rm9yd2FyZFZhcmFyZ3M6CiAgICAg
ICAgICAgICAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWw6CiAgICAgICAgICAgICAgICAgICAg
IGJyZWFrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJhcmdzRm9yd2Fy
ZGluZ1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2UuY3BwCShyZXZpc2lvbiAxOTAxNTMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2UuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMzUsNiArMTM1LDggQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgIGNhc2UgQ2FsbFZhcmFyZ3M6CiAgICAgICAgICAgICBjYXNlIENvbnN0cnVjdFZh
cmFyZ3M6CisgICAgICAgICAgICBjYXNlIFRhaWxDYWxsVmFyYXJnczoKKyAgICAgICAgICAgIGNh
c2UgVGFpbENhbGxWYXJhcmdzSW5saW5lZENhbGxlcjoKICAgICAgICAgICAgICAgICBpZiAobm9k
ZS0+Y2hpbGQxKCkgPT0gY2FuZGlkYXRlIHx8IG5vZGUtPmNoaWxkMygpID09IGNhbmRpZGF0ZSkg
ewogICAgICAgICAgICAgICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgICAgICAgICAg
ICAgIGRhdGFMb2coIiAgICBFc2NhcGUgYXQgIiwgbm9kZSwgIlxuIik7CkBAIC0yODIsNyArMjg0
LDE5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAg
ICAgIG5vZGUtPnNldE9wQW5kRGVmYXVsdEZsYWdzKENvbnN0cnVjdEZvcndhcmRWYXJhcmdzKTsK
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAKKworICAgICAgICAgICAg
Y2FzZSBUYWlsQ2FsbFZhcmFyZ3M6CisgICAgICAgICAgICAgICAgaWYgKG5vZGUtPmNoaWxkMigp
ICE9IGNhbmRpZGF0ZSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgbm9kZS0+c2V0T3BBbmREZWZhdWx0RmxhZ3MoVGFpbENhbGxGb3J3YXJkVmFyYXJncyk7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgICAgIGNhc2UgVGFpbENhbGxWYXJhcmdz
SW5saW5lZENhbGxlcjoKKyAgICAgICAgICAgICAgICBpZiAobm9kZS0+Y2hpbGQyKCkgIT0gY2Fu
ZGlkYXRlKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBub2Rl
LT5zZXRPcEFuZERlZmF1bHRGbGFncyhUYWlsQ2FsbEZvcndhcmRWYXJhcmdzSW5saW5lZENhbGxl
cik7CisgICAgICAgICAgICAgICAgYnJlYWs7CisKICAgICAgICAgICAgIGNhc2UgU2V0TG9jYWw6
CiAgICAgICAgICAgICAgICAgLy8gVGhpcyBpcyBzdXBlciBvZGQuIFdlIGRvbid0IGhhdmUgdG8g
ZG8gYW55dGhpbmcgaGVyZSwgc2luY2UgaW4gREZHIElSLCB0aGUgcGhhbnRvbQogICAgICAgICAg
ICAgICAgIC8vIGFyZ3VtZW50cyBub2RlcyBkbyBwcm9kdWNlIGEgSlNWYWx1ZS4gQWxzbywgd2Ug
a25vdyB0aGF0IGlmIHRoaXMgU2V0TG9jYWwgcmVmZXJlbmVjcyBhCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmNwcAkocmV2aXNpb24gMTkw
MTUzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTk1LDcgKzk1LDcgQEAgdW5zaWduZWQgQ2FsbEZyYW1lOjpieXRl
Y29kZU9mZnNldCgpCiAgICAgICAgIEFTU0VSVChjb2RlQmxvY2soKSk7CiAgICAgICAgIENvZGVP
cmlnaW4gY29kZU9yaWdpbiA9IHRoaXMtPmNvZGVPcmlnaW4oKTsKICAgICAgICAgZm9yIChJbmxp
bmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IGNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1l
OyBpbmxpbmVDYWxsRnJhbWU7KSB7Ci0gICAgICAgICAgICBjb2RlT3JpZ2luID0gaW5saW5lQ2Fs
bEZyYW1lLT5jYWxsZXI7CisgICAgICAgICAgICBjb2RlT3JpZ2luID0gaW5saW5lQ2FsbEZyYW1l
LT5kaXJlY3RDYWxsZXI7CiAgICAgICAgICAgICBpbmxpbmVDYWxsRnJhbWUgPSBjb2RlT3JpZ2lu
LmlubGluZUNhbGxGcmFtZTsKICAgICAgICAgfQogICAgICAgICByZXR1cm4gY29kZU9yaWdpbi5i
eXRlY29kZUluZGV4OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL1N0
YWNrVmlzaXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVy
cHJldGVyL1N0YWNrVmlzaXRvci5jcHAJKHJldmlzaW9uIDE5MDE1MykKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnRlcnByZXRlci9TdGFja1Zpc2l0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC02MCw4ICs2MCwxNiBAQCB2b2lkIFN0YWNrVmlzaXRvcjo6Z290b05leHRGcmFtZSgpCiAjaWYg
RU5BQkxFKERGR19KSVQpCiAgICAgaWYgKG1fZnJhbWUuaXNJbmxpbmVkRnJhbWUoKSkgewogICAg
ICAgICBJbmxpbmVDYWxsRnJhbWUqIGlubGluZUNhbGxGcmFtZSA9IG1fZnJhbWUuaW5saW5lQ2Fs
bEZyYW1lKCk7Ci0gICAgICAgIENvZGVPcmlnaW4qIGNhbGxlckNvZGVPcmlnaW4gPSAmaW5saW5l
Q2FsbEZyYW1lLT5jYWxsZXI7Ci0gICAgICAgIHJlYWRJbmxpbmVkRnJhbWUobV9mcmFtZS5jYWxs
RnJhbWUoKSwgY2FsbGVyQ29kZU9yaWdpbik7CisgICAgICAgIENvZGVPcmlnaW4qIGNhbGxlckNv
ZGVPcmlnaW4gPSBpbmxpbmVDYWxsRnJhbWUtPmdldENhbGxlclNraXBwaW5nRGVhZEZyYW1lcygp
OworICAgICAgICBpZiAoIWNhbGxlckNvZGVPcmlnaW4pIHsKKyAgICAgICAgICAgIHdoaWxlIChp
bmxpbmVDYWxsRnJhbWUpIHsKKyAgICAgICAgICAgICAgICByZWFkSW5saW5lZEZyYW1lKG1fZnJh
bWUuY2FsbEZyYW1lKCksICZpbmxpbmVDYWxsRnJhbWUtPmRpcmVjdENhbGxlcik7CisgICAgICAg
ICAgICAgICAgaW5saW5lQ2FsbEZyYW1lID0gbV9mcmFtZS5pbmxpbmVDYWxsRnJhbWUoKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIG1fZnJhbWUubV9WTUVudHJ5RnJhbWUgPSBtX2ZyYW1l
Lm1fQ2FsbGVyVk1FbnRyeUZyYW1lOworICAgICAgICAgICAgcmVhZEZyYW1lKG1fZnJhbWUuY2Fs
bGVyRnJhbWUoKSk7CisgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgcmVhZElubGluZWRGcmFt
ZShtX2ZyYW1lLmNhbGxGcmFtZSgpLCBjYWxsZXJDb2RlT3JpZ2luKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KICNlbmRpZiAvLyBFTkFCTEUoREZHX0pJVCkK
</data>
<flag name="review"
          id="287036"
          type_id="1"
          status="+"
          setter="fpizlo"
    />
          </attachment>
      

    </bug>

</bugzilla>