<?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>148664</bug_id>
          
          <creation_ts>2015-08-31 17:54:23 -0700</creation_ts>
          <short_desc>[ES6] Implement tail calls in the FTL</short_desc>
          <delta_ts>2015-10-01 02:50:48 -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>148663</dependson>
    
    <dependson>149619</dependson>
    
    <dependson>149621</dependson>
    
    <dependson>149647</dependson>
          <blocked>146477</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Basile Clement">basile_clement</reporter>
          <assigned_to name="Michael Saboff">msaboff</assigned_to>
          <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
    
    <cc>msaboff</cc>
    
    <cc>ossy</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1122395</commentid>
    <comment_count>0</comment_count>
    <who name="Basile Clement">basile_clement</who>
    <bug_when>2015-08-31 17:54:23 -0700</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1122397</commentid>
    <comment_count>1</comment_count>
    <who name="Basile Clement">basile_clement</who>
    <bug_when>2015-08-31 17:56:28 -0700</bug_when>
    <thetext>*** Bug 146851 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1123667</commentid>
    <comment_count>2</comment_count>
      <attachid>260631</attachid>
    <who name="Basile Clement">basile_clement</who>
    <bug_when>2015-09-04 15:19:20 -0700</bug_when>
    <thetext>Created attachment 260631
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1124942</commentid>
    <comment_count>3</comment_count>
    <who name="Basile Clement">basile_clement</who>
    <bug_when>2015-09-10 10:46:23 -0700</bug_when>
    <thetext>This doesn&apos;t properly handle OSR exit and will incorrectly leave the tail calling frames on the stack.

A speculative test failure would be:

````
function bar() {
    if (isFinalTier()) OSRExit();
    if (bar.caller !== null)
        throw new Error(&quot;Caller should be null.&quot;);
}

function foo() {
    &quot;use strict&quot;;
    return bar();
}

for (var i = 0; i &lt; 10000; ++i)
    foo();
````

The patch needs to be updated to handle OSR exit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1128602</commentid>
    <comment_count>4</comment_count>
      <attachid>261901</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2015-09-24 16:00:41 -0700</bug_when>
    <thetext>Created attachment 261901
Rebased patch

Performance looks neutral:

Baseline:/Users/msaboff/src/webkit.baseline/WebKitBuild/Release/JavaScriptCore.framework/Resources/jsc FTLTailCall:/Users/msaboff/src/webkit/WebKitBuild/Release/JavaScriptCore.framework/Resources/jsc
Warning: could not identify checkout location for Baseline
Warning: could not identify checkout location for FTLTailCall
Warning: refusing to run JSBench because not all VMs are DumpRenderTree or WebKitTestRunner.
Warning: refusing to run DSPJS because not all VMs are DumpRenderTree or WebKitTestRunner.
3940/3940                                                                                             
Generating benchmark report at /Volumes/Data/src/webkit/Baseline_FTLTailCall_SunSpiderLongSpiderV8SpiderOctaneKrakenJSRegressAsmBenchCompressionBench_msaboff-pro_20150924_1542_report.txt
And raw data at /Volumes/Data/src/webkit/Baseline_FTLTailCall_SunSpiderLongSpiderV8SpiderOctaneKrakenJSRegressAsmBenchCompressionBench_msaboff-pro_20150924_1542.json

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;FTLTailCall&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                FTLTailCall                                    
SunSpider:
   3d-cube                                            7.9792+-0.3960            7.9030+-0.5182        
   3d-morph                                           8.1843+-0.3378            8.0872+-0.1859          might be 1.0120x faster
   3d-raytrace                                        8.9017+-0.2968            8.8450+-0.2756        
   access-binary-trees                                3.3732+-0.2480            3.3213+-0.2054          might be 1.0156x faster
   access-fannkuch                                    8.7303+-0.4338            8.7216+-0.2674        
   access-nbody                                       4.3638+-0.1992     ?      4.4130+-0.1117        ? might be 1.0113x slower
   access-nsieve                                      4.5186+-0.1981     ?      4.5796+-0.1514        ? might be 1.0135x slower
   bitops-3bit-bits-in-byte                           1.7733+-0.0846     ?      1.7955+-0.1632        ? might be 1.0125x slower
   bitops-bits-in-byte                                5.5793+-0.0904     ?      5.6617+-0.1095        ? might be 1.0148x slower
   bitops-bitwise-and                                 2.8330+-0.1592     ?      2.8389+-0.2845        ?
   bitops-nsieve-bits                                 4.3277+-0.1660     ?      4.3874+-0.1611        ? might be 1.0138x slower
   controlflow-recursive                              3.5425+-0.0602            3.4766+-0.1143          might be 1.0190x faster
   crypto-aes                                         6.3738+-0.2913     ?      6.4257+-0.1987        ?
   crypto-md5                                         3.9291+-0.1659     ?      4.0664+-0.1865        ? might be 1.0350x slower
   crypto-sha1                                        3.4300+-0.0462     ?      3.4395+-0.1766        ?
   date-format-tofte                                 12.8163+-0.6279           12.6020+-0.8477          might be 1.0170x faster
   date-format-xparb                                  7.6727+-0.2657            7.4630+-0.1711          might be 1.0281x faster
   math-cordic                                        4.3720+-0.1547            4.2963+-0.1442          might be 1.0176x faster
   math-partial-sums                                  9.8143+-0.2748            9.7425+-0.1166        
   math-spectral-norm                                 3.0869+-0.1398     ?      3.0949+-0.1097        ?
   regexp-dna                                        10.1293+-0.5095     ?     10.2421+-0.6308        ? might be 1.0111x slower
   string-base64                                      6.7480+-0.5537            6.6589+-0.0748          might be 1.0134x faster
   string-fasta                                       9.1501+-0.1671            9.1280+-0.1924        
   string-tagcloud                                   12.8978+-0.3869           12.7969+-0.2681        
   string-unpack-code                                26.4536+-0.6404     ?     26.7227+-0.7055        ? might be 1.0102x slower
   string-validate-input                              6.9626+-0.2053     ?      7.1074+-0.4688        ? might be 1.0208x slower

   &lt;arithmetic&gt;                                       7.2286+-0.0433            7.2237+-0.0491          might be 1.0007x faster

                                                         Baseline                FTLTailCall                                    
LongSpider:
   3d-cube                                         1153.3079+-18.6644    ?   1163.3223+-20.4309       ?
   3d-morph                                        1901.7108+-26.1352        1893.9627+-8.5184        
   3d-raytrace                                      991.5331+-9.2850          990.9625+-5.5981        
   access-binary-trees                             1374.4435+-2.2196     ?   1380.4895+-8.1406        ?
   access-fannkuch                                  455.7527+-4.8470     ?    461.2219+-11.3162       ? might be 1.0120x slower
   access-nbody                                    1021.2827+-27.8837        1010.2141+-4.2885          might be 1.0110x faster
   access-nsieve                                    683.3531+-16.0561         674.7672+-9.2971          might be 1.0127x faster
   bitops-3bit-bits-in-byte                          44.7759+-1.1735     ?     44.8318+-0.2471        ?
   bitops-bits-in-byte                              343.4109+-5.1462     ?    345.6949+-4.3722        ?
   bitops-nsieve-bits                               619.5676+-1.4247     ?    627.8960+-27.1643       ? might be 1.0134x slower
   controlflow-recursive                            752.4019+-23.2001         745.3698+-2.2247        
   crypto-aes                                       889.0048+-8.2046     ?    900.2663+-6.4874        ? might be 1.0127x slower
   crypto-md5                                       789.5475+-12.8263    ?    794.0745+-12.4994       ?
   crypto-sha1                                     1070.9747+-17.8856        1062.4113+-8.2733        
   date-format-tofte                                991.0571+-34.2796         967.0193+-33.7797         might be 1.0249x faster
   date-format-xparb                               1062.8716+-10.4773        1045.2930+-32.8620         might be 1.0168x faster
   hash-map                                         231.8835+-2.3581          231.3430+-3.0570        
   math-cordic                                      642.5349+-7.2891     ?    648.5532+-12.7299       ?
   math-partial-sums                               1138.5790+-5.8434     ?   1140.9069+-11.5044       ?
   math-spectral-norm                              1075.9895+-6.5989         1072.6901+-10.5186       
   string-base64                                    532.2181+-2.3690     ?    543.5682+-18.9630       ? might be 1.0213x slower
   string-fasta                                     583.0449+-1.3105     ?    586.9727+-20.9157       ?
   string-tagcloud                                  285.8955+-3.7030     ?    286.7098+-4.5746        ?

   &lt;geometric&gt;                                      666.0745+-1.1628     ?    666.4751+-1.6011        ? might be 1.0006x slower

                                                         Baseline                FTLTailCall                                    
V8Spider:
   crypto                                            70.7248+-1.4062     ?     71.7533+-1.0392        ? might be 1.0145x slower
   deltablue                                         88.5544+-3.5528           86.6682+-2.9355          might be 1.0218x faster
   earley-boyer                                      65.8374+-2.0879           64.9132+-0.9326          might be 1.0142x faster
   raytrace                                          41.0757+-3.6438           39.6375+-0.8211          might be 1.0363x faster
   regexp                                           103.8710+-1.9320     ?    104.4360+-3.1611        ?
   richards                                          77.5117+-2.7887           76.2626+-0.7336          might be 1.0164x faster
   splay                                             53.2029+-2.3600           52.7885+-0.6731        

   &lt;geometric&gt;                                       68.7266+-1.2562           68.0019+-0.2576          might be 1.0107x faster

                                                         Baseline                FTLTailCall                                    
Octane:
   encrypt                                           0.30090+-0.00589    ?     0.30240+-0.00363       ?
   decrypt                                           5.64773+-0.02163    ?     5.67141+-0.11087       ?
   deltablue                                x2       0.23364+-0.01160          0.22964+-0.00423         might be 1.0174x faster
   earley                                            0.52974+-0.01149    ?     0.53146+-0.00558       ?
   boyer                                             8.91079+-0.19548          8.88555+-0.05988       
   navier-stokes                            x2       6.41802+-0.08549    ?     6.44301+-0.12366       ?
   raytrace                                 x2       1.55703+-0.04475          1.55108+-0.07685       
   richards                                 x2       0.15414+-0.00381          0.15272+-0.00155       
   splay                                    x2       0.53648+-0.00032    ^     0.53351+-0.00237       ^ definitely 1.0056x faster
   regexp                                   x2      38.71862+-0.73486    ?    39.43810+-1.20940       ? might be 1.0186x slower
   pdfjs                                    x2      60.97598+-0.72315         60.48355+-0.24387       
   mandreel                                 x2      68.64978+-0.73693         68.45893+-1.79874       
   gbemu                                    x2      58.75793+-2.36535    ?    59.78192+-6.56690       ? might be 1.0174x slower
   closure                                           0.94955+-0.02963          0.93248+-0.00883         might be 1.0183x faster
   jquery                                           12.27260+-0.12351         12.13883+-0.10089         might be 1.0110x faster
   box2d                                    x2      16.60395+-0.16649         16.51912+-0.23395       
   zlib                                     x2     566.52854+-43.81670   ?   576.13479+-5.54413       ? might be 1.0170x slower
   typescript                               x2    1111.06866+-23.95040      1103.00403+-6.05634       

   &lt;geometric&gt;                                       8.93742+-0.07228          8.92973+-0.09585         might be 1.0009x faster

                                                         Baseline                FTLTailCall                                    
Kraken:
   ai-astar                                          198.740+-2.625            197.021+-2.409         
   audio-beat-detection                               78.512+-1.141      ?      79.105+-1.822         ?
   audio-dft                                         129.321+-2.470      ?     131.041+-4.485         ? might be 1.0133x slower
   audio-fft                                          59.147+-1.003             58.518+-0.192           might be 1.0107x faster
   audio-oscillator                                   98.501+-0.921      ?      98.839+-0.647         ?
   imaging-darkroom                                   97.097+-0.739      ?      98.013+-2.011         ?
   imaging-desaturate                                 89.269+-1.492             89.145+-0.933         
   imaging-gaussian-blur                             147.482+-3.753            145.544+-2.407           might be 1.0133x faster
   json-parse-financial                               67.207+-1.053             66.562+-0.732         
   json-stringify-tinderbox                           41.031+-0.375      ?      41.186+-0.289         ?
   stanford-crypto-aes                                64.983+-2.651             64.913+-1.683         
   stanford-crypto-ccm                                57.850+-1.990      ?      59.626+-1.643         ? might be 1.0307x slower
   stanford-crypto-pbkdf2                            146.216+-5.438            144.537+-1.084           might be 1.0116x faster
   stanford-crypto-sha256-iterative                   57.432+-0.913             57.009+-0.739         

   &lt;arithmetic&gt;                                       95.199+-0.580             95.076+-0.276           might be 1.0013x faster

                                                         Baseline                FTLTailCall                                    
JSRegress:
   abc-forward-loop-equal                            56.1079+-2.0238           55.3519+-0.9890          might be 1.0137x faster
   abc-postfix-backward-loop                         54.8818+-0.6272           54.5860+-0.3172        
   abc-simple-backward-loop                          55.8820+-1.8755           54.7155+-0.3558          might be 1.0213x faster
   abc-simple-forward-loop                           54.5515+-0.5771     ?     55.2635+-1.7936        ? might be 1.0131x slower
   abc-skippy-loop                                   38.0599+-0.7643           37.5444+-0.1659          might be 1.0137x faster
   abs-boolean                                        3.8250+-0.1728            3.7800+-0.0946          might be 1.0119x faster
   adapt-to-double-divide                            17.4385+-0.8104     ?     17.4789+-0.2782        ?
   aliased-arguments-getbyval                         1.5881+-0.1449     ?      1.6648+-0.2171        ? might be 1.0483x slower
   allocate-big-object                                3.8117+-0.3979            3.7202+-0.3371          might be 1.0246x faster
   arguments-named-and-reflective                    14.7466+-0.2621           14.3640+-0.1372          might be 1.0266x faster
   arguments-out-of-bounds                           14.4697+-0.6622     ?     14.5793+-0.7407        ?
   arguments-strict-mode                             12.3905+-0.6816     ?     12.5939+-0.9702        ? might be 1.0164x slower
   arguments                                         11.1553+-0.1382           11.1257+-0.4649        
   arity-mismatch-inlining                            1.2812+-0.1014     ?      1.3132+-0.0886        ? might be 1.0250x slower
   array-access-polymorphic-structure                11.3450+-0.3581           11.3032+-0.4938        
   array-nonarray-polymorhpic-access                 38.2127+-1.6015     ?     38.3690+-2.1178        ?
   array-prototype-every                            119.5709+-2.9514     ?    123.8366+-3.3707        ? might be 1.0357x slower
   array-prototype-forEach                          118.1006+-3.0104     ?    120.0157+-0.8872        ? might be 1.0162x slower
   array-prototype-map                              141.5541+-16.4492         130.5815+-3.7306          might be 1.0840x faster
   array-prototype-reduce                           113.5812+-4.0231     ?    115.0142+-1.7671        ? might be 1.0126x slower
   array-prototype-reduceRight                      113.2582+-2.4726     ?    115.6287+-1.9895        ? might be 1.0209x slower
   array-prototype-some                             121.6501+-1.8487     ?    123.0714+-3.4648        ? might be 1.0117x slower
   array-splice-contiguous                           32.9707+-0.6041           32.7333+-0.5835        
   array-with-double-add                              5.7347+-0.2265            5.6733+-0.1101          might be 1.0108x faster
   array-with-double-increment                        4.2075+-0.1760            4.1696+-0.1208        
   array-with-double-mul-add                          7.2661+-0.1205            7.2405+-0.1542        
   array-with-double-sum                              4.3787+-0.1376     ?      4.4370+-0.1408        ? might be 1.0133x slower
   array-with-int32-add-sub                           9.4976+-0.3640            9.4887+-0.3462        
   array-with-int32-or-double-sum                     4.5926+-0.3008     ?      4.6045+-0.2457        ?
   ArrayBuffer-DataView-alloc-large-long-lived   
                                                     46.1448+-1.6808           46.0717+-0.9285        
   ArrayBuffer-DataView-alloc-long-lived             18.2743+-0.4495     ?     18.2822+-0.4714        ?
   ArrayBuffer-Int32Array-byteOffset                  5.5942+-0.2213            5.3975+-0.1357          might be 1.0365x faster
   ArrayBuffer-Int8Array-alloc-large-long-lived   
                                                     46.3503+-0.8594     ?     47.2176+-0.8937        ? might be 1.0187x slower
   ArrayBuffer-Int8Array-alloc-long-lived-buffer   
                                                     31.0935+-0.7923     ^     29.6496+-0.3658        ^ definitely 1.0487x faster
   ArrayBuffer-Int8Array-alloc-long-lived            17.6442+-1.1007           17.3124+-0.7952          might be 1.0192x faster
   ArrayBuffer-Int8Array-alloc                       14.5004+-0.6442           14.4240+-0.2454        
   arrowfunction-call                                14.9610+-0.1032     ?     15.0068+-0.2972        ?
   asmjs_bool_bug                                     9.7924+-0.3397            9.4665+-0.4584          might be 1.0344x faster
   assign-custom-setter-polymorphic                   4.6380+-0.1238            4.4985+-0.0717          might be 1.0310x faster
   assign-custom-setter                               6.0778+-0.1613            5.9904+-0.2324          might be 1.0146x faster
   basic-set                                         11.4849+-0.8086           11.2978+-0.4473          might be 1.0166x faster
   big-int-mul                                        5.9150+-0.1163     ?      5.9738+-0.0736        ?
   boolean-test                                       4.5935+-0.2903            4.4417+-0.0542          might be 1.0342x faster
   branch-fold                                        4.8069+-0.1187            4.7440+-0.1256          might be 1.0133x faster
   branch-on-string-as-boolean                       22.4595+-1.5856     ?     22.6550+-0.7806        ?
   by-val-generic                                     3.7142+-0.1749     ?      3.9424+-0.1296        ? might be 1.0614x slower
   call-spread-apply                                 40.8485+-2.3197           38.8124+-1.0474          might be 1.0525x faster
   call-spread-call                                  31.4403+-0.2574           30.6766+-0.7199          might be 1.0249x faster
   captured-assignments                               0.8015+-0.1713            0.7890+-0.1276          might be 1.0158x faster
   cast-int-to-double                                 8.5768+-0.1040     ?      8.6008+-0.0783        ?
   cell-argument                                      7.3845+-0.2947     ?      7.4160+-0.4698        ?
   cfg-simplify                                       3.8511+-0.2025     ?      3.9024+-0.1489        ? might be 1.0133x slower
   chain-getter-access                               10.4308+-0.1752     ?     10.4772+-0.2975        ?
   cmpeq-obj-to-obj-other                            15.2235+-1.1702           15.1502+-0.2910        
   constant-test                                      8.1270+-0.0875            8.0787+-0.1399        
   create-lots-of-functions                          16.4334+-0.1096     ?     16.6403+-0.4923        ? might be 1.0126x slower
   cse-new-array-buffer                               3.3898+-0.2044            3.3794+-0.2678        
   cse-new-array                                      3.5527+-0.2860            3.5415+-0.2181        
   DataView-custom-properties                        53.4545+-1.1086     ?     53.9829+-3.2101        ?
   delay-tear-off-arguments-strictmode               18.8756+-0.2538           18.6810+-0.5141          might be 1.0104x faster
   deltablue-varargs                                287.4162+-13.0160         286.5977+-11.4086       
   destructuring-arguments                          244.2088+-13.8651    ?    245.3911+-2.1662        ?
   destructuring-parameters-overridden-by-function   
                                                      0.7581+-0.1274     ?      0.7960+-0.1641        ? might be 1.0500x slower
   destructuring-swap                                 7.9628+-0.1985            7.8906+-0.0727        
   direct-arguments-getbyval                          1.6536+-0.3289            1.6393+-0.1957        
   div-boolean-double                                 5.6390+-0.0090            5.5994+-0.0738        
   div-boolean                                       10.0390+-0.1484           10.0269+-0.1646        
   double-get-by-val-out-of-bounds                    6.1074+-0.1588     ?      6.4080+-0.6187        ? might be 1.0492x slower
   double-pollution-getbyval                          9.8387+-0.1018     ?      9.9341+-0.0857        ?
   double-pollution-putbyoffset                       5.6676+-0.1815            5.4958+-0.2499          might be 1.0313x faster
   double-real-use                                   39.3749+-0.2265           39.3669+-0.3931        
   double-to-int32-typed-array-no-inline              3.2102+-0.1990     ?      3.2733+-0.1622        ? might be 1.0196x slower
   double-to-int32-typed-array                        3.0036+-0.2544            2.9097+-0.0850          might be 1.0323x faster
   double-to-uint32-typed-array-no-inline             3.1236+-0.1218     ?      3.2539+-0.2015        ? might be 1.0417x slower
   double-to-uint32-typed-array                       2.9881+-0.0588     ?      3.0050+-0.1467        ?
   elidable-new-object-dag                           56.0861+-1.9409           54.6929+-0.6695          might be 1.0255x faster
   elidable-new-object-roflcopter                    53.6485+-0.5427     ?     53.9496+-1.8775        ?
   elidable-new-object-then-call                     49.6780+-1.2513     ?     50.2726+-1.1090        ? might be 1.0120x slower
   elidable-new-object-tree                          64.2993+-2.2158     ?     64.9947+-0.9152        ? might be 1.0108x slower
   empty-string-plus-int                              7.5973+-0.2775            7.5781+-0.1180        
   emscripten-cube2hash                              45.5381+-0.4457           45.2473+-0.1809        
   exit-length-on-plain-object                       22.7953+-1.6044           22.7063+-0.7591        
   external-arguments-getbyval                        1.7989+-0.2427     ?      1.8281+-0.1810        ? might be 1.0163x slower
   external-arguments-putbyval                        3.2172+-0.2089     ?      3.2654+-0.1826        ? might be 1.0150x slower
   fixed-typed-array-storage-var-index                1.6917+-0.1035     ?      1.7012+-0.1908        ?
   fixed-typed-array-storage                          1.3140+-0.1162     ?      1.3848+-0.1272        ? might be 1.0539x slower
   Float32Array-matrix-mult                           6.4377+-0.2589            6.3139+-0.2209          might be 1.0196x faster
   Float32Array-to-Float64Array-set                  77.5938+-1.6882     ?     78.4612+-1.2402        ? might be 1.0112x slower
   Float64Array-alloc-long-lived                     93.5413+-0.6554     ?     94.0788+-1.0496        ?
   Float64Array-to-Int16Array-set                    91.5964+-0.7516     ?     92.9632+-2.5438        ? might be 1.0149x slower
   fold-double-to-int                                19.0319+-0.0574     ?     19.1622+-0.1135        ?
   fold-get-by-id-to-multi-get-by-offset-rare-int   
                                                     12.5089+-0.2640     ?     12.5880+-0.4629        ?
   fold-get-by-id-to-multi-get-by-offset             10.7925+-0.5102           10.5137+-0.1873          might be 1.0265x faster
   fold-multi-get-by-offset-to-get-by-offset   
                                                      9.2238+-1.0817            8.9297+-0.7670          might be 1.0329x faster
   fold-multi-get-by-offset-to-poly-get-by-offset   
                                                      9.7716+-0.6867     ?     10.0508+-0.0956        ? might be 1.0286x slower
   fold-multi-put-by-offset-to-poly-put-by-offset   
                                                     11.3400+-0.0687     ?     11.4734+-0.0748        ? might be 1.0118x slower
   fold-multi-put-by-offset-to-put-by-offset   
                                                     10.6783+-0.7598           10.5313+-0.7659          might be 1.0140x faster
   fold-multi-put-by-offset-to-replace-or-transition-put-by-offset   
                                                     16.1390+-0.3576           15.7775+-0.7569          might be 1.0229x faster
   fold-put-by-id-to-multi-put-by-offset             12.9133+-0.9014           12.8920+-1.1119        
   fold-put-by-val-with-string-to-multi-put-by-offset   
                                                     12.8086+-0.9931     ?     13.1598+-0.8232        ? might be 1.0274x slower
   fold-put-by-val-with-symbol-to-multi-put-by-offset   
                                                     12.8102+-1.1397           12.3907+-0.2123          might be 1.0339x faster
   fold-put-structure                                 8.7095+-0.1331     ?      8.7428+-0.0747        ?
   for-of-iterate-array-entries                      16.2662+-0.8943           16.1808+-0.7769        
   for-of-iterate-array-keys                          5.1653+-0.2126     ?      5.2953+-0.4148        ? might be 1.0252x slower
   for-of-iterate-array-values                        5.1898+-0.4913            5.1837+-0.3238        
   fround                                            19.4658+-0.4991           19.3803+-0.6576        
   ftl-library-inlining-dataview                     93.5699+-0.6435     !     99.9172+-2.0479        ! definitely 1.0678x slower
   ftl-library-inlining                             132.9858+-20.9047    ?    136.4564+-15.4222       ? might be 1.0261x slower
   function-call                                     15.0975+-0.0684     ^     14.6705+-0.2955        ^ definitely 1.0291x faster
   function-dot-apply                                 3.2520+-0.1171     ^      3.0933+-0.0365        ^ definitely 1.0513x faster
   function-test                                      4.5065+-0.0936            4.4127+-0.1183          might be 1.0213x faster
   function-with-eval                               148.3520+-1.1957          148.3283+-3.3879        
   gcse-poly-get-less-obvious                        30.1830+-4.5853     ?     30.3105+-3.3762        ?
   gcse-poly-get                                     33.6250+-1.2514           33.3990+-1.7991        
   gcse                                               7.6112+-0.0673     ^      6.7647+-0.0831        ^ definitely 1.1251x faster
   get-by-id-bimorphic-check-structure-elimination-simple   
                                                      3.3865+-0.1056            3.3036+-0.1764          might be 1.0251x faster
   get-by-id-bimorphic-check-structure-elimination   
                                                      8.1777+-0.1412     ?      8.1890+-0.1692        ?
   get-by-id-chain-from-try-block                     3.5455+-0.1708            3.5003+-0.2465          might be 1.0129x faster
   get-by-id-check-structure-elimination              7.7162+-0.1533     ?      7.7258+-0.0793        ?
   get-by-id-proto-or-self                           20.8983+-3.3721     ?     20.9605+-2.9853        ?
   get-by-id-quadmorphic-check-structure-elimination-simple   
                                                      4.2279+-0.1097            4.0405+-0.0898          might be 1.0464x faster
   get-by-id-self-or-proto                           21.4673+-2.3679           19.8605+-0.9187          might be 1.0809x faster
   get-by-val-out-of-bounds                           6.0390+-0.1656     ?      6.2372+-0.1322        ? might be 1.0328x slower
   get-by-val-with-string-bimorphic-check-structure-elimination-simple   
                                                      3.8754+-0.0549     ?      3.9128+-0.1071        ?
   get-by-val-with-string-bimorphic-check-structure-elimination   
                                                     10.0098+-0.2855     ?     10.1169+-0.0685        ? might be 1.0107x slower
   get-by-val-with-string-chain-from-try-block   
                                                      3.6303+-0.2521            3.6014+-0.2136        
   get-by-val-with-string-check-structure-elimination   
                                                      9.1703+-0.0429     ?      9.1931+-0.2579        ?
   get-by-val-with-string-proto-or-self              21.5203+-2.9297     ?     22.5953+-3.4416        ? might be 1.0500x slower
   get-by-val-with-string-quadmorphic-check-structure-elimination-simple   
                                                      5.0241+-0.1166            4.9762+-0.1064        
   get-by-val-with-string-self-or-proto              22.6219+-3.6611           22.4606+-3.1689        
   get-by-val-with-symbol-bimorphic-check-structure-elimination-simple   
                                                      4.6028+-0.1902     ?      4.6266+-0.1620        ?
   get-by-val-with-symbol-bimorphic-check-structure-elimination   
                                                     19.4675+-0.3440           19.2994+-0.4242        
   get-by-val-with-symbol-chain-from-try-block   
                                                      3.5770+-0.0873     ?      3.6016+-0.2328        ?
   get-by-val-with-symbol-check-structure-elimination   
                                                     18.2565+-0.5452     ?     18.5060+-0.3592        ? might be 1.0137x slower
   get-by-val-with-symbol-proto-or-self              23.3569+-2.5780           20.7347+-0.6088          might be 1.1265x faster
   get-by-val-with-symbol-quadmorphic-check-structure-elimination-simple   
                                                      6.0485+-0.1463            6.0469+-0.0937        
   get-by-val-with-symbol-self-or-proto              21.5950+-2.6428     ?     22.2852+-4.0537        ? might be 1.0320x slower
   get_callee_monomorphic                             3.7780+-0.1770            3.7578+-0.3154        
   get_callee_polymorphic                             5.0004+-0.1409            4.8792+-0.2847          might be 1.0248x faster
   getter-no-activation                               5.9208+-0.1053            5.9161+-0.1117        
   getter-prototype                                  11.1676+-0.4595     ?     11.2338+-0.4775        ?
   getter-richards                                  128.0605+-5.6354          125.5574+-12.8744         might be 1.0199x faster
   getter                                             7.9800+-0.0942     ^      7.3513+-0.2324        ^ definitely 1.0855x faster
   global-object-access-with-mutating-structure   
                                                      7.6500+-0.0946            7.5335+-0.1641          might be 1.0155x faster
   global-var-const-infer-fire-from-opt               1.1740+-0.2492     ?      1.1842+-0.1683        ?
   global-var-const-infer                             1.0084+-0.1572     ?      1.1443+-0.1670        ? might be 1.1347x slower
   hard-overflow-check-equal                         44.8525+-0.9454     ?     44.9805+-1.9131        ?
   hard-overflow-check                               44.4554+-0.3787     ?     44.7370+-0.5934        ?
   HashMap-put-get-iterate-keys                      33.8235+-0.9135     ?     34.0250+-1.1932        ?
   HashMap-put-get-iterate                           34.0887+-0.7274           33.9380+-0.8909        
   HashMap-string-put-get-iterate                    36.9832+-3.6363           35.5679+-1.1296          might be 1.0398x faster
   hoist-make-rope                                   12.7125+-1.4558     ?     12.9760+-1.7734        ? might be 1.0207x slower
   hoist-poly-check-structure-effectful-loop   
                                                      6.6788+-0.0916     ?      6.7131+-0.1997        ?
   hoist-poly-check-structure                         4.4827+-0.1005            4.4706+-0.0856        
   imul-double-only                                   8.6847+-0.4372     ?      8.8731+-1.3619        ? might be 1.0217x slower
   imul-int-only                                     10.8917+-0.2596           10.7063+-0.2688          might be 1.0173x faster
   imul-mixed                                         8.4587+-1.1011     ?      8.6865+-1.0281        ? might be 1.0269x slower
   in-four-cases                                     25.8458+-0.7387           25.8093+-0.8041        
   in-one-case-false                                 14.8284+-0.2529           14.8161+-0.0724        
   in-one-case-true                                  14.7388+-0.0650     ?     14.9081+-0.2432        ? might be 1.0115x slower
   in-two-cases                                      15.1138+-0.1590           14.9469+-0.1740          might be 1.0112x faster
   indexed-properties-in-objects                      4.2024+-0.0998     ^      3.8806+-0.1272        ^ definitely 1.0829x faster
   infer-closure-const-then-mov-no-inline             4.8937+-0.2048     ?      4.9107+-0.1417        ?
   infer-closure-const-then-mov                      21.4066+-1.1340           21.0269+-0.7422          might be 1.0181x faster
   infer-closure-const-then-put-to-scope-no-inline   
                                                     15.7961+-0.3555     !     17.0670+-0.5402        ! definitely 1.0805x slower
   infer-closure-const-then-put-to-scope             27.7354+-0.8894     !     32.4135+-0.3610        ! definitely 1.1687x slower
   infer-closure-const-then-reenter-no-inline   
                                                     70.9622+-0.6659     !     74.3788+-0.3754        ! definitely 1.0481x slower
   infer-closure-const-then-reenter                  33.1869+-1.1217           33.1837+-0.6130        
   infer-constant-global-property                     4.8211+-0.0223            4.7550+-0.0996          might be 1.0139x faster
   infer-constant-property                            3.4120+-0.1338     ?      3.4589+-0.0905        ? might be 1.0138x slower
   infer-one-time-closure-ten-vars                   11.2770+-0.5883     ?     11.5590+-0.2116        ? might be 1.0250x slower
   infer-one-time-closure-two-vars                   10.7819+-0.4222     ?     10.8403+-0.1283        ?
   infer-one-time-closure                            10.6577+-0.4531           10.5937+-0.3642        
   infer-one-time-deep-closure                       17.8967+-0.8140     ?     18.0213+-0.1585        ?
   inline-arguments-access                            6.1150+-0.3242            6.0554+-0.2238        
   inline-arguments-aliased-access                    6.2040+-0.2420            6.1586+-0.1301        
   inline-arguments-local-escape                      6.2360+-0.0556            6.1161+-0.1635          might be 1.0196x faster
   inline-get-scoped-var                              5.7583+-0.0938     ?      5.8250+-0.0463        ? might be 1.0116x slower
   inlined-put-by-id-transition                      15.7344+-0.5429           15.4290+-0.3129          might be 1.0198x faster
   inlined-put-by-val-with-string-transition   
                                                     67.8935+-2.0964           66.9481+-1.1203          might be 1.0141x faster
   inlined-put-by-val-with-symbol-transition   
                                                     68.5538+-2.8800           67.9240+-1.2082        
   int-or-other-abs-then-get-by-val                   6.5981+-0.2488     ?      6.6240+-0.0639        ?
   int-or-other-abs-zero-then-get-by-val             28.1147+-0.6954           27.3970+-0.3707          might be 1.0262x faster
   int-or-other-add-then-get-by-val                   6.1070+-0.1119     ?      6.1550+-0.1768        ?
   int-or-other-add                                   8.1768+-0.2148     ?      8.2601+-0.1192        ? might be 1.0102x slower
   int-or-other-div-then-get-by-val                   5.0574+-0.1467     ?      5.0577+-0.1296        ?
   int-or-other-max-then-get-by-val                   6.4609+-0.1676            6.1133+-0.5342          might be 1.0569x faster
   int-or-other-min-then-get-by-val                   5.1910+-0.3035            5.1769+-0.1217        
   int-or-other-mod-then-get-by-val                   4.9344+-0.0595            4.9273+-0.1220        
   int-or-other-mul-then-get-by-val                   5.0533+-0.1255     ?      5.1467+-0.1990        ? might be 1.0185x slower
   int-or-other-neg-then-get-by-val                   5.7080+-0.1326     ?      6.0906+-0.9210        ? might be 1.0670x slower
   int-or-other-neg-zero-then-get-by-val             27.6542+-0.2006     ?     28.0616+-0.2964        ? might be 1.0147x slower
   int-or-other-sub-then-get-by-val                   6.0562+-0.1128     ?      6.1453+-0.1064        ? might be 1.0147x slower
   int-or-other-sub                                   5.3602+-0.0716     ?      5.3615+-0.0795        ?
   int-overflow-local                                 6.1800+-0.0713            6.1533+-0.1910        
   Int16Array-alloc-long-lived                       65.2850+-0.7081     ?     65.9570+-1.0616        ? might be 1.0103x slower
   Int16Array-bubble-sort-with-byteLength            35.5035+-1.1122     ?     35.8108+-0.2979        ?
   Int16Array-bubble-sort                            35.7055+-1.1577     ?     36.0655+-1.0111        ? might be 1.0101x slower
   Int16Array-load-int-mul                            2.1409+-0.0882            2.0737+-0.1380          might be 1.0324x faster
   Int16Array-to-Int32Array-set                      74.5519+-1.2694           73.0711+-1.5188          might be 1.0203x faster
   Int32Array-alloc-large                            33.3762+-0.8468           32.3179+-0.5883          might be 1.0327x faster
   Int32Array-alloc-long-lived                       74.4218+-1.3953           74.1349+-1.3517        
   Int32Array-alloc                                   4.7007+-0.2190            4.6031+-0.2056          might be 1.0212x faster
   Int32Array-Int8Array-view-alloc                    9.3167+-0.2781            9.2792+-0.1682        
   int52-spill                                        7.2535+-0.2614            7.1418+-0.1124          might be 1.0156x faster
   Int8Array-alloc-long-lived                        58.0889+-1.7560     ?     59.3250+-3.1403        ? might be 1.0213x slower
   Int8Array-load-with-byteLength                     4.7575+-0.1077     ?      4.7910+-0.1788        ?
   Int8Array-load                                     4.8945+-0.2222            4.7897+-0.1775          might be 1.0219x faster
   integer-divide                                    14.0390+-0.1103           14.0131+-0.3927        
   integer-modulo                                     2.7477+-0.0945            2.7191+-0.1750          might be 1.0105x faster
   is-boolean-fold-tricky                             5.6200+-0.1007     ?      5.6677+-0.1884        ?
   is-boolean-fold                                    3.9811+-0.0986     ?      4.0537+-0.1473        ? might be 1.0182x slower
   is-function-fold-tricky-internal-function   
                                                     15.3417+-1.7957           14.8641+-0.2150          might be 1.0321x faster
   is-function-fold-tricky                            5.8341+-0.0489            5.7852+-0.1549        
   is-function-fold                                   4.0696+-0.1521            4.0389+-0.1069        
   is-number-fold-tricky                              5.6976+-0.1896     ?      5.7151+-0.1282        ?
   is-number-fold                                     4.0784+-0.1103            4.0176+-0.1272          might be 1.0151x faster
   is-object-or-null-fold-functions                   4.2069+-0.0737            4.1028+-0.1065          might be 1.0254x faster
   is-object-or-null-fold-less-tricky                 5.7341+-0.1237     ?      5.8157+-0.0629        ? might be 1.0142x slower
   is-object-or-null-fold-tricky                      7.3820+-0.1532     ?      7.5287+-0.1895        ? might be 1.0199x slower
   is-object-or-null-fold                             4.1586+-0.2867            4.0350+-0.1159          might be 1.0306x faster
   is-object-or-null-trickier-function                5.8661+-0.1883            5.8597+-0.1303        
   is-object-or-null-trickier-internal-function   
                                                     15.6541+-0.9657     ?     15.7238+-0.1667        ?
   is-object-or-null-tricky-function                  5.8820+-0.1252     ?      5.8980+-0.1244        ?
   is-object-or-null-tricky-internal-function   
                                                     11.5880+-0.1293           11.5132+-0.1656        
   is-string-fold-tricky                              5.6694+-0.1304            5.6433+-0.1075        
   is-string-fold                                     3.9922+-0.0870     ?      4.0190+-0.1312        ?
   is-undefined-fold-tricky                           4.7663+-0.1354     ?      4.8107+-0.0939        ?
   is-undefined-fold                                  3.9630+-0.0785     ?      4.0605+-0.1977        ? might be 1.0246x slower
   JSONP-negative-0                                   0.4478+-0.0807            0.4293+-0.0948          might be 1.0429x faster
   large-int-captured                                 6.5096+-0.2530     ?      6.5200+-0.5736        ?
   large-int-neg                                     19.7649+-0.4612     ?     20.0004+-0.7356        ? might be 1.0119x slower
   large-int                                         17.6397+-0.1672     ?     17.6456+-0.1621        ?
   load-varargs-elimination                          29.3098+-1.3961     ?     29.4713+-0.7212        ?
   logical-not-weird-types                            5.1075+-0.1313            5.0070+-0.2540          might be 1.0201x faster
   logical-not                                        6.6058+-0.5652            6.4423+-0.3225          might be 1.0254x faster
   lots-of-fields                                    17.9940+-0.2587     ?     18.0244+-0.6866        ?
   make-indexed-storage                               4.1447+-0.6869     ?      4.3683+-0.2348        ? might be 1.0539x slower
   make-rope-cse                                      6.3652+-0.2668     ?      6.5412+-0.2035        ? might be 1.0276x slower
   marsaglia-larger-ints                             53.9771+-0.7136     ?     54.1827+-1.6095        ?
   marsaglia-osr-entry                               26.4467+-0.5981     ?     26.6700+-0.6757        ?
   math-with-out-of-bounds-array-values              36.0089+-0.3902     ^     33.9117+-0.8869        ^ definitely 1.0618x faster
   max-boolean                                        3.3587+-0.1713            3.3204+-0.1277          might be 1.0115x faster
   method-on-number                                  22.5718+-0.3544     !     23.5757+-0.0968        ! definitely 1.0445x slower
   min-boolean                                        3.4186+-0.1114            3.3876+-0.1375        
   minus-boolean-double                               4.2108+-0.0525     ?      4.2678+-0.1506        ? might be 1.0135x slower
   minus-boolean                                      3.4182+-0.0759            3.4051+-0.1026        
   misc-strict-eq                                    47.4189+-3.1595           46.5891+-0.7866          might be 1.0178x faster
   mod-boolean-double                                11.8081+-0.1662     ?     11.9675+-0.4156        ? might be 1.0135x slower
   mod-boolean                                        9.0740+-0.3033     ?      9.1332+-0.1296        ?
   mul-boolean-double                                 4.8530+-0.0367     !      4.9747+-0.0578        ! definitely 1.0251x slower
   mul-boolean                                        3.5893+-0.0901     ?      3.6499+-0.1425        ? might be 1.0169x slower
   neg-boolean                                        4.2935+-0.1108     ?      4.3110+-0.0877        ?
   negative-zero-divide                               0.5772+-0.0968     ?      0.6281+-0.1177        ? might be 1.0881x slower
   negative-zero-modulo                               0.5228+-0.0076     ?      0.5752+-0.1199        ? might be 1.1003x slower
   negative-zero-negate                               0.5270+-0.0491            0.5269+-0.0949        
   nested-function-parsing                           72.6717+-1.1864     ?     73.2660+-2.8106        ?
   new-array-buffer-dead                            143.8330+-3.3165     ?    144.5037+-4.4408        ?
   new-array-buffer-push                              9.9576+-0.6558     ?     10.0914+-0.2086        ? might be 1.0134x slower
   new-array-dead                                    18.4188+-0.7024     ?     18.6478+-0.6738        ? might be 1.0124x slower
   new-array-push                                     5.4870+-0.1924     ?      5.5934+-0.1874        ? might be 1.0194x slower
   no-inline-constructor                             49.5439+-2.3933           49.3301+-0.8852        
   number-test                                        4.3897+-0.1455     ?      4.4055+-0.1001        ?
   object-closure-call                                7.6103+-0.1844     ?      7.7611+-0.2203        ? might be 1.0198x slower
   object-get-own-property-symbols-on-large-array   
                                                      5.1368+-0.4152     ?      5.3012+-0.1059        ? might be 1.0320x slower
   object-test                                        4.3110+-0.1324            4.2224+-0.1512          might be 1.0210x faster
   obvious-sink-pathology-taken                     171.0161+-9.2398          169.6381+-9.9475        
   obvious-sink-pathology                           162.1172+-13.8819         158.8401+-2.8638          might be 1.0206x faster
   obviously-elidable-new-object                     44.4477+-1.3473           43.6290+-0.9261          might be 1.0188x faster
   plus-boolean-arith                                 3.3977+-0.0814            3.3969+-0.0564        
   plus-boolean-double                                4.3062+-0.1092     ?      4.3135+-0.1116        ?
   plus-boolean                                       3.3080+-0.1275            3.3051+-0.1488        
   poly-chain-access-different-prototypes-simple   
                                                      5.2510+-0.1351     ?      5.2705+-0.0377        ?
   poly-chain-access-different-prototypes             5.3908+-0.0366            5.3434+-0.1580        
   poly-chain-access-simpler                          5.2597+-0.1188     ?      5.2658+-0.0995        ?
   poly-chain-access                                  5.1183+-0.0813            5.0793+-0.1360        
   poly-stricteq                                     81.1038+-2.9152           79.2272+-0.3466          might be 1.0237x faster
   polymorphic-array-call                             1.9453+-0.3169            1.9337+-0.1789        
   polymorphic-get-by-id                              5.0206+-0.3715     ?      5.0833+-0.3490        ? might be 1.0125x slower
   polymorphic-put-by-id                             43.5688+-1.6434           41.5898+-1.3682          might be 1.0476x faster
   polymorphic-put-by-val-with-string                43.7271+-1.4155           43.4907+-0.7532        
   polymorphic-put-by-val-with-symbol                43.2488+-0.9160           43.1714+-0.8983        
   polymorphic-structure                             25.3026+-0.3580     ?     25.3724+-0.7225        ?
   polyvariant-monomorphic-get-by-id                 11.6013+-0.2095     ?     11.6252+-0.2222        ?
   proto-getter-access                               10.4666+-0.3047     ?     10.5521+-0.1522        ?
   prototype-access-with-mutating-prototype           7.1492+-0.2884     ?      7.2142+-0.2717        ?
   put-by-id-replace-and-transition                  12.7933+-0.1233     ?     12.9305+-0.4289        ? might be 1.0107x slower
   put-by-id-slightly-polymorphic                     3.6184+-0.0687     ?      3.6496+-0.0787        ?
   put-by-id                                         18.3819+-0.3142     ?     18.6152+-0.2509        ? might be 1.0127x slower
   put-by-val-direct                                  0.5914+-0.0986            0.5450+-0.0193          might be 1.0852x faster
   put-by-val-large-index-blank-indexing-type   
                                                      8.2003+-0.1768     ?      8.3987+-0.3672        ? might be 1.0242x slower
   put-by-val-machine-int                             3.7003+-0.1212     ?      3.7275+-0.3588        ?
   put-by-val-with-string-replace-and-transition   
                                                     19.2853+-0.8601           19.1003+-0.6969        
   put-by-val-with-string-slightly-polymorphic   
                                                      4.8229+-0.1910            4.8038+-0.2678        
   put-by-val-with-string                            19.5538+-0.3147           19.4990+-1.0591        
   put-by-val-with-symbol-replace-and-transition   
                                                     20.7418+-0.4819     ?     21.1187+-0.1544        ? might be 1.0182x slower
   put-by-val-with-symbol-slightly-polymorphic   
                                                      5.0228+-0.1633     ?      5.0521+-0.0731        ?
   put-by-val-with-symbol                            19.1353+-0.7257     ?     19.3765+-1.3047        ? might be 1.0126x slower
   rare-osr-exit-on-local                            16.5665+-0.0591     ?     16.7027+-0.3544        ?
   raytrace-with-empty-try-catch                      9.0857+-0.1128            8.9972+-0.2870        
   raytrace-with-try-catch                           16.2667+-0.5950     ?     16.3167+-0.3680        ?
   register-pressure-from-osr                        25.3452+-0.7226           25.0065+-0.2039          might be 1.0135x faster
   repeat-multi-get-by-offset                        28.2213+-1.1313     ?     28.8240+-0.2503        ? might be 1.0214x slower
   richards-empty-try-catch                         123.5026+-3.4299     ?    128.5753+-3.8824        ? might be 1.0411x slower
   richards-try-catch                               408.5924+-8.4474          405.1485+-7.8659        
   setter-prototype                                  11.4163+-0.5593           11.3247+-0.2554        
   setter                                             6.8278+-0.0657     !      7.1150+-0.2085        ! definitely 1.0421x slower
   simple-activation-demo                            33.8445+-0.9276           33.5181+-0.3692        
   simple-getter-access                              14.3268+-0.3833           14.0475+-0.3152          might be 1.0199x faster
   simple-poly-call-nested                            9.2784+-0.1034     ?      9.4417+-0.0817        ? might be 1.0176x slower
   simple-poly-call                                   1.9418+-0.1889            1.9374+-0.1046        
   sin-boolean                                       21.0912+-1.2114     ?     21.1145+-2.0203        ?
   singleton-scope                                   84.8734+-2.7347     ?     87.4733+-0.7323        ? might be 1.0306x slower
   sink-function                                     13.4752+-0.5140     ?     13.5058+-0.2381        ?
   sink-huge-activation                              20.5024+-0.7718     ?     21.1139+-0.5292        ? might be 1.0298x slower
   sinkable-new-object-dag                           83.8180+-2.6742     ?     89.7119+-6.5385        ? might be 1.0703x slower
   sinkable-new-object-taken                         66.7482+-1.0161     ?     66.9510+-1.4509        ?
   sinkable-new-object                               45.9813+-0.2317     ?     46.7982+-0.9802        ? might be 1.0178x slower
   slow-array-profile-convergence                     3.8118+-0.0709     ?      3.9625+-0.2382        ? might be 1.0396x slower
   slow-convergence                                   3.8649+-0.2256            3.7678+-0.1030          might be 1.0258x faster
   slow-ternaries                                    33.3363+-1.1995           33.3230+-1.1725        
   sorting-benchmark                                 25.4230+-1.2080     ?     25.8743+-0.9213        ? might be 1.0178x slower
   sparse-conditional                                 1.7410+-0.0590            1.6705+-0.0686          might be 1.0422x faster
   splice-to-remove                                  19.5941+-0.1964     ?     19.6570+-0.7977        ?
   string-char-code-at                               20.7964+-0.5131     ?     20.8229+-0.6571        ?
   string-concat-object                               3.4554+-0.4172            3.3484+-0.2247          might be 1.0320x faster
   string-concat-pair-object                          3.2863+-0.3384            3.1685+-0.1570          might be 1.0372x faster
   string-concat-pair-simple                         17.1970+-0.2549           17.1310+-0.5919        
   string-concat-simple                              17.3218+-0.2495     ?     17.6580+-0.3826        ? might be 1.0194x slower
   string-cons-repeat                                11.2892+-0.2501     ?     11.6085+-0.6134        ? might be 1.0283x slower
   string-cons-tower                                 11.1109+-0.4314           11.0529+-0.8141        
   string-equality                                   22.8563+-0.5577           22.7903+-0.5692        
   string-get-by-val-big-char                        10.9804+-0.2807           10.8962+-0.4150        
   string-get-by-val-out-of-bounds-insane             5.8965+-1.7405            5.0690+-0.1841          might be 1.1632x faster
   string-get-by-val-out-of-bounds                    6.8870+-0.1482     ?      7.0023+-0.2305        ? might be 1.0167x slower
   string-get-by-val                                  4.9035+-0.0607            4.8630+-0.0543        
   string-hash                                        2.8685+-0.0856            2.8002+-0.1800          might be 1.0244x faster
   string-long-ident-equality                        18.9660+-0.3869           18.8985+-0.5381        
   string-out-of-bounds                              15.2198+-0.4117     ?     15.2742+-0.2462        ?
   string-repeat-arith                               42.4420+-0.7784     ?     43.2211+-0.4118        ? might be 1.0184x slower
   string-sub                                        83.6598+-0.9450     ?     84.9185+-2.9205        ? might be 1.0150x slower
   string-test                                        4.4833+-0.1799            4.4041+-0.0885          might be 1.0180x faster
   string-var-equality                               59.5074+-1.6351     ?     59.6920+-2.7466        ?
   structure-hoist-over-transitions                   3.3961+-0.1244     ?      3.4680+-0.1639        ? might be 1.0212x slower
   substring-concat-weird                            57.9296+-0.3837           57.2679+-0.7046          might be 1.0116x faster
   substring-concat                                  63.7455+-2.2029           62.7404+-0.6526          might be 1.0160x faster
   substring                                         69.9964+-1.3205     ?     70.5173+-3.1273        ?
   switch-char-constant                               3.4128+-0.1496     ?      3.4382+-0.1330        ?
   switch-char                                        7.9395+-0.0959     ?      7.9933+-0.1241        ?
   switch-constant                                   13.8322+-2.6930           12.8125+-0.5405          might be 1.0796x faster
   switch-string-basic-big-var                       31.1395+-0.5022     ?     31.7504+-0.9673        ? might be 1.0196x slower
   switch-string-basic-big                           30.5966+-2.6535           28.8702+-2.5982          might be 1.0598x faster
   switch-string-basic-var                           32.1591+-1.1458           31.7173+-1.0470          might be 1.0139x faster
   switch-string-basic                               20.2922+-0.5237     ?     22.0007+-1.4344        ? might be 1.0842x slower
   switch-string-big-length-tower-var                27.6143+-1.3907     ?     28.0028+-0.8601        ? might be 1.0141x slower
   switch-string-length-tower-var                    20.9316+-0.7926     ?     21.2938+-0.8673        ? might be 1.0173x slower
   switch-string-length-tower                        15.0159+-0.2165     ?     15.4891+-0.3251        ? might be 1.0315x slower
   switch-string-short                               15.0556+-0.3663     ?     15.4705+-0.4013        ? might be 1.0276x slower
   switch                                            18.6821+-2.2473     ?     19.0468+-3.6711        ? might be 1.0195x slower
   tear-off-arguments-simple                          4.4592+-0.3902     ?      4.4793+-0.2930        ?
   tear-off-arguments                                 6.4133+-0.3101     ?      6.4637+-0.5340        ?
   temporal-structure                                16.6542+-0.2854     ?     16.6702+-0.1786        ?
   to-int32-boolean                                  21.2107+-0.6007     ?     21.2349+-0.1941        ?
   try-catch-get-by-val-cloned-arguments             14.5635+-0.3829     ?     14.6710+-0.2166        ?
   try-catch-get-by-val-direct-arguments              3.1721+-0.2412     ?      3.2209+-0.1111        ? might be 1.0154x slower
   try-catch-get-by-val-scoped-arguments              7.2185+-0.2494     ?      7.3502+-0.1872        ? might be 1.0182x slower
   typed-array-get-set-by-val-profiling              32.6567+-0.5778     ?     33.0248+-1.7292        ? might be 1.0113x slower
   undefined-property-access                        454.0237+-2.8673     ?    457.4219+-11.9366       ?
   undefined-test                                     4.6183+-0.0941            4.5880+-0.1480        
   unprofiled-licm                                   15.7719+-0.2770           15.2503+-0.5003          might be 1.0342x faster
   v8-raytrace-with-empty-try-catch                  86.3595+-1.3847           84.5534+-2.1997          might be 1.0214x faster
   v8-raytrace-with-try-catch                       111.9131+-1.9967     ?    113.3912+-6.4468        ? might be 1.0132x slower
   varargs-call                                      18.3911+-0.3014           18.0943+-0.1232          might be 1.0164x faster
   varargs-construct-inline                          35.4605+-0.7706     ?     36.1693+-1.2386        ? might be 1.0200x slower
   varargs-construct                                 29.8461+-0.4795     ?     30.1227+-1.0262        ?
   varargs-inline                                    12.3726+-0.0572     ?     12.6510+-0.3138        ? might be 1.0225x slower
   varargs-strict-mode                               14.4158+-0.1046     !     15.3515+-0.1917        ! definitely 1.0649x slower
   varargs                                           14.7092+-0.3661     ?     15.1565+-0.1614        ? might be 1.0304x slower
   weird-inlining-const-prop                          3.1445+-0.1744     ?      3.1488+-0.1516        ?

   &lt;geometric&gt;                                       12.0266+-0.0266     ?     12.0331+-0.0216        ? might be 1.0005x slower

                                                         Baseline                FTLTailCall                                    
AsmBench:
   bigfib.cpp                                       686.6130+-12.6805         681.1686+-2.8260        
   cray.c                                           627.5635+-14.1646    ?    627.8507+-12.3962       ?
   dry.c                                            622.0730+-79.3959    ?    639.7935+-90.4039       ? might be 1.0285x slower
   FloatMM.c                                        923.3546+-6.2904          920.9418+-1.0889        
   gcc-loops.cpp                                   5999.5257+-39.6127        5991.2282+-54.0201       
   n-body.c                                        1675.0771+-5.3706     ?   1675.3594+-8.6330        ?
   Quicksort.c                                      574.2011+-1.9090     ?    577.0942+-16.3350       ?
   stepanov_container.cpp                          4929.2533+-57.9747        4917.8504+-136.1726      
   Towers.c                                         403.0887+-5.7450          395.5480+-3.3673          might be 1.0191x faster

   &lt;geometric&gt;                                     1122.5891+-14.7933        1122.5798+-18.2758         might be 1.0000x faster

                                                         Baseline                FTLTailCall                                    
CompressionBench:
   huffman                                           81.4788+-1.2614     ?     81.7714+-1.0110        ?
   arithmetic-simple                                436.5280+-5.5896     ?    437.3597+-3.1873        ?
   arithmetic-precise                               365.8832+-10.6441    ?    371.6338+-8.8219        ? might be 1.0157x slower
   arithmetic-complex-precise                       363.1974+-7.8005     ?    366.7683+-6.5026        ?
   arithmetic-precise-order-0                       445.6658+-6.3451     ?    448.8375+-12.9706       ?
   arithmetic-precise-order-1                       420.9778+-3.6185     ?    426.6824+-3.9093        ? might be 1.0136x slower
   arithmetic-precise-order-2                       487.9990+-3.4694     ?    490.9768+-9.8150        ?
   arithmetic-simple-order-1                        500.0128+-6.0787     ?    504.2504+-9.9207        ?
   arithmetic-simple-order-2                        558.6084+-5.7195     ?    563.6854+-3.9748        ?
   lz-string                                        426.6593+-5.4276     ?    430.0168+-17.4548       ?

   &lt;geometric&gt;                                      372.5848+-1.4683     ?    375.6743+-2.5672        ? might be 1.0083x slower

                                                         Baseline                FTLTailCall                                    
Geomean of preferred means:
   &lt;scaled-result&gt;                                   78.3226+-0.1925           78.2832+-0.1550          might be 1.0005x faster</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1128603</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-09-24 16:03:37 -0700</bug_when>
    <thetext>Attachment 261901 did not pass style-queue:


ERROR: Source/JavaScriptCore/jit/CallFrameShuffler.h:576:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 1 in 39 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1128885</commentid>
    <comment_count>6</comment_count>
      <attachid>261901</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-09-26 10:44:30 -0700</bug_when>
    <thetext>Comment on attachment 261901
Rebased patch

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

R=me with comments.

&gt; Source/JavaScriptCore/dfg/DFGNode.h:1133
&gt; +    bool isFunctionTerminal()
&gt; +    {
&gt; +        switch (op()) {
&gt; +        case Return:
&gt; +        case TailCall:
&gt; +        case TailCallVarargs:
&gt; +        case TailCallForwardVarargs:
&gt; +            return true;
&gt; +        default:
&gt; +            return false;
&gt; +        }
&gt; +    }
&gt; +

The way that I&apos;m interpreting this function name is that it should return true for nodes that terminal the function, not just the block.

Three things:

1) It&apos;s weird that Unreachable isn&apos;t here.  Most compiler phases don&apos;t want to care about whether a piece of code is reachable.  The point of Unreachable is that it&apos;s like a Return for those phases that don&apos;t want to care about reachability, but do want to care about whether a basic block has any further successors.  A property of Unreachable that I&apos;d like to preserve is that it should be possible to write a phase that replaces every Unreachable with Return(Undefined), and doing so should not cause any behavior change.  In fact, Unreachable is like a Return(Undefined) that is preceded by the DFG IR equivalent of ASSERT_NOT_REACHED.  So, if Unreachable isn&apos;t handled here, then we probably need to either change the function name or add a comment, since we&apos;re failing to obey the &quot;like a Return&quot; property of Unreachable.  Luckily, it looks like the only user of this function would be OK with Unreachable returning true.  It&apos;s fine for TierUpCheckInjectionPhase to insert a tier-up check before Unreachable, and we can safely trust that this will not affect performance on anything we care about, since Unreachable is usually used after some piece of code that the compiler will already prove to always exit, like a Throw or ForceOSRExit.  So, if we insert a tier-up check before Unreachable, the compiler won&apos;t compile the tier-up check anyway.

2) If Unreachable is indeed a &quot;function terminal&quot;, then this function could be written as &quot;bool isFunctionTerminal() { return isTerminal() &amp;&amp; !numSuccessors(); }

3) If we think that doing (1) and (2) is weird, then maybe the less weird approach would be to just delete this function, and have TierUpCheckInjectionPhase inline this switch.  FWIW, that&apos;s probably how I would have done it.  But, now that I see this isFunctionTerminal() function, I tend to think that it would be a generally useful function, provided that (1) it returns true for Unreachable since that&apos;s the less surprising behavior and (2) it&apos;s written in terms of isTerminal() and numSuccessors() since &quot;a terminal that has no successors&quot; is a very nice way of saying &quot;a terminal that terminates the function&quot;.

&gt; Source/JavaScriptCore/ftl/FTLJSTailCall.cpp:43
&gt; +static FTL::Location getRegisterWithAddend(const ExitValue&amp; value, StackMaps::Record&amp; record, StackMaps&amp; stackmaps)

I slightly prefer using anonymous namespaces over static, especially since you have multiple static methods.

&gt; Source/JavaScriptCore/ftl/FTLJSTailCall.cpp:58
&gt; +static ValueRecovery recoveryFor(const ExitValue&amp; value, StackMaps::Record&amp; record, StackMaps&amp; stackmaps)

Ditto.

&gt; Source/JavaScriptCore/ftl/FTLJSTailCall.cpp:108
&gt; +static uint32_t sizeFor(DataFormat format)

Ditto.

&gt; Source/JavaScriptCore/jit/CallFrameShuffler.cpp:312
&gt; +    for (; firstRead &lt; VirtualRegister { 0 }; firstRead += 1) {

Is there a better way of saying VirtualRegister{0}?  We don&apos;t usually use that syntax for VirtualRegister.  Wouldn&apos;t it be better to say &quot;firstRead &lt;= virtualRegisterForLocal(0)&quot;?

&gt; Source/JavaScriptCore/jit/CallFrameShuffler.h:411
&gt; +#if USE(JSVALUE64)
&gt; +    mutable RegisterSet m_lockedRegisters;
&gt; +#else
&gt;      RegisterSet m_lockedRegisters;
&gt; +#endif

Would be cleaner to just make it mutable unconditionally.

&gt; Source/JavaScriptCore/jit/Reg.h:197
&gt; +template&lt;typename T&gt; struct HashTraits;
&gt; +template&lt;&gt; struct HashTraits&lt;JSC::Reg&gt; : SimpleClassHashTraits&lt;JSC::Reg&gt; { };

I found a bug!  I believe that this needs &quot;static const bool emptyValueIsZero = false;&quot; like for example this traits:

template&lt;typename T&gt; struct HashTraits;
template&lt;&gt; struct HashTraits&lt;JSC::DFG::PromotedLocationDescriptor&gt; : SimpleClassHashTraits&lt;JSC::DFG::PromotedLocationDescriptor&gt; {
    static const bool emptyValueIsZero = false;
};

The reason is that the empty Reg (i.e. &quot;Reg()&quot;) will have the value 0xff (see Reg::invalid()), which is not zero.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1129091</commentid>
    <comment_count>7</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2015-09-28 15:35:04 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; Comment on attachment 261901 [details]
&gt; Rebased patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=261901&amp;action=review
&gt; 
&gt; R=me with comments.
&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGNode.h:1133
&gt; &gt; +    bool isFunctionTerminal()
&gt; &gt; +    {
&gt; &gt; +        switch (op()) {
&gt; &gt; +        case Return:
&gt; &gt; +        case TailCall:
&gt; &gt; +        case TailCallVarargs:
&gt; &gt; +        case TailCallForwardVarargs:
&gt; &gt; +            return true;
&gt; &gt; +        default:
&gt; &gt; +            return false;
&gt; &gt; +        }
&gt; &gt; +    }
&gt; &gt; +
&gt; 
&gt; The way that I&apos;m interpreting this function name is that it should return
&gt; true for nodes that terminal the function, not just the block.
&gt; 
&gt; Three things:
&gt; 
&gt; 1) It&apos;s weird that Unreachable isn&apos;t here.  Most compiler phases don&apos;t want
&gt; to care about whether a piece of code is reachable.  The point of
&gt; Unreachable is that it&apos;s like a Return for those phases that don&apos;t want to
&gt; care about reachability, but do want to care about whether a basic block has
&gt; any further successors.  A property of Unreachable that I&apos;d like to preserve
&gt; is that it should be possible to write a phase that replaces every
&gt; Unreachable with Return(Undefined), and doing so should not cause any
&gt; behavior change.  In fact, Unreachable is like a Return(Undefined) that is
&gt; preceded by the DFG IR equivalent of ASSERT_NOT_REACHED.  So, if Unreachable
&gt; isn&apos;t handled here, then we probably need to either change the function name
&gt; or add a comment, since we&apos;re failing to obey the &quot;like a Return&quot; property
&gt; of Unreachable.  Luckily, it looks like the only user of this function would
&gt; be OK with Unreachable returning true.  It&apos;s fine for
&gt; TierUpCheckInjectionPhase to insert a tier-up check before Unreachable, and
&gt; we can safely trust that this will not affect performance on anything we
&gt; care about, since Unreachable is usually used after some piece of code that
&gt; the compiler will already prove to always exit, like a Throw or
&gt; ForceOSRExit.  So, if we insert a tier-up check before Unreachable, the
&gt; compiler won&apos;t compile the tier-up check anyway.
&gt; 
&gt; 2) If Unreachable is indeed a &quot;function terminal&quot;, then this function could
&gt; be written as &quot;bool isFunctionTerminal() { return isTerminal() &amp;&amp;
&gt; !numSuccessors(); }
&gt; 
&gt; 3) If we think that doing (1) and (2) is weird, then maybe the less weird
&gt; approach would be to just delete this function, and have
&gt; TierUpCheckInjectionPhase inline this switch.  FWIW, that&apos;s probably how I
&gt; would have done it.  But, now that I see this isFunctionTerminal() function,
&gt; I tend to think that it would be a generally useful function, provided that
&gt; (1) it returns true for Unreachable since that&apos;s the less surprising
&gt; behavior and (2) it&apos;s written in terms of isTerminal() and numSuccessors()
&gt; since &quot;a terminal that has no successors&quot; is a very nice way of saying &quot;a
&gt; terminal that terminates the function&quot;.

I changed isFunctionTerminal() to be written in terms of isTerminal() and numSuccessors().  I also had to fix the ThrowReferenceError case in DFGClobberize.cpp::clobberize() to satisfy the validation phase. 

&gt; &gt; Source/JavaScriptCore/ftl/FTLJSTailCall.cpp:43
&gt; &gt; +static FTL::Location getRegisterWithAddend(const ExitValue&amp; value, StackMaps::Record&amp; record, StackMaps&amp; stackmaps)
&gt; 
&gt; I slightly prefer using anonymous namespaces over static, especially since
&gt; you have multiple static methods.

Done.

&gt; &gt; Source/JavaScriptCore/ftl/FTLJSTailCall.cpp:58
&gt; &gt; +static ValueRecovery recoveryFor(const ExitValue&amp; value, StackMaps::Record&amp; record, StackMaps&amp; stackmaps)
&gt; 
&gt; Ditto.

Done.

&gt; &gt; Source/JavaScriptCore/ftl/FTLJSTailCall.cpp:108
&gt; &gt; +static uint32_t sizeFor(DataFormat format)
&gt; 
&gt; Ditto.

Done.

&gt; &gt; Source/JavaScriptCore/jit/CallFrameShuffler.cpp:312
&gt; &gt; +    for (; firstRead &lt; VirtualRegister { 0 }; firstRead += 1) {
&gt; 
&gt; Is there a better way of saying VirtualRegister{0}?  We don&apos;t usually use
&gt; that syntax for VirtualRegister.  Wouldn&apos;t it be better to say &quot;firstRead &lt;=
&gt; virtualRegisterForLocal(0)&quot;?
&gt; 
&gt; &gt; Source/JavaScriptCore/jit/CallFrameShuffler.h:411
&gt; &gt; +#if USE(JSVALUE64)
&gt; &gt; +    mutable RegisterSet m_lockedRegisters;
&gt; &gt; +#else
&gt; &gt;      RegisterSet m_lockedRegisters;
&gt; &gt; +#endif
&gt; 
&gt; Would be cleaner to just make it mutable unconditionally.

Done.

&gt; &gt; Source/JavaScriptCore/jit/Reg.h:197
&gt; &gt; +template&lt;typename T&gt; struct HashTraits;
&gt; &gt; +template&lt;&gt; struct HashTraits&lt;JSC::Reg&gt; : SimpleClassHashTraits&lt;JSC::Reg&gt; { };
&gt; 
&gt; I found a bug!  I believe that this needs &quot;static const bool
&gt; emptyValueIsZero = false;&quot; like for example this traits:
&gt; 
&gt; template&lt;typename T&gt; struct HashTraits;
&gt; template&lt;&gt; struct HashTraits&lt;JSC::DFG::PromotedLocationDescriptor&gt; :
&gt; SimpleClassHashTraits&lt;JSC::DFG::PromotedLocationDescriptor&gt; {
&gt;     static const bool emptyValueIsZero = false;
&gt; };
&gt; 
&gt; The reason is that the empty Reg (i.e. &quot;Reg()&quot;) will have the value 0xff
&gt; (see Reg::invalid()), which is not zero.

Done.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1129092</commentid>
    <comment_count>8</comment_count>
      <attachid>262024</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2015-09-28 15:36:41 -0700</bug_when>
    <thetext>Created attachment 262024
Patch for Landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1129093</commentid>
    <comment_count>9</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2015-09-28 15:37:57 -0700</bug_when>
    <thetext>Committed r190289: &lt;http://trac.webkit.org/changeset/190289&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1129202</commentid>
    <comment_count>10</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2015-09-29 03:30:02 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; Committed r190289: &lt;http://trac.webkit.org/changeset/190289&gt;

It caused two different regression:
- bug149619
- bug149621</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1129265</commentid>
    <comment_count>11</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-09-29 09:50:18 -0700</bug_when>
    <thetext>It looks like this change may have caused a ~4% progression on Speedometer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1129266</commentid>
    <comment_count>12</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-09-29 09:52:54 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; It looks like this change may have caused a ~4% progression on Speedometer.

Are you also seeing the crashes that Ossy reports?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1129267</commentid>
    <comment_count>13</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2015-09-29 09:53:34 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (In reply to comment #9)
&gt; &gt; Committed r190289: &lt;http://trac.webkit.org/changeset/190289&gt;
&gt; 
&gt; It caused two different regression:
&gt; - bug149619
&gt; - bug149621

I&apos;m working on these.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1129268</commentid>
    <comment_count>14</comment_count>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2015-09-29 09:59:10 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; (In reply to comment #11)
&gt; &gt; It looks like this change may have caused a ~4% progression on Speedometer.
&gt; 
&gt; Are you also seeing the crashes that Ossy reports?

One is ARM 32bit and I don&apos;t think we have coverage for this. This other one is OpenSource Speedometer which is indeed failing on the open source apple bots:
https://build.webkit.org/builders/Apple%20Yosemite%20Release%20WK2%20%28Perf%29/builds/3026</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1129401</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-09-29 14:21:28 -0700</bug_when>
    <thetext>Re-opened since this is blocked by bug 149647</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1129414</commentid>
    <comment_count>16</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2015-09-29 14:41:26 -0700</bug_when>
    <thetext>This also caused a crash on regress/script-tests/call-spread-apply.js.ftl-no-cjit-no-inline-validate on Mac Debug, which happened every time on the bots.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1129686</commentid>
    <comment_count>17</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2015-09-30 15:24:55 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; (In reply to comment #12)
&gt; &gt; (In reply to comment #11)
&gt; &gt; &gt; It looks like this change may have caused a ~4% progression on Speedometer.
&gt; &gt; 
&gt; &gt; Are you also seeing the crashes that Ossy reports?
&gt; 
&gt; One is ARM 32bit and I don&apos;t think we have coverage for this. This other one
&gt; is OpenSource Speedometer which is indeed failing on the open source apple
&gt; bots:
&gt; https://build.webkit.org/builders/
&gt; Apple%20Yosemite%20Release%20WK2%20%28Perf%29/builds/3026

The ARM32 problems showed up on our iOS testers.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1129687</commentid>
    <comment_count>18</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2015-09-30 15:28:32 -0700</bug_when>
    <thetext>Committed r190370: &lt;http://trac.webkit.org/changeset/190370&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1129888</commentid>
    <comment_count>19</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2015-10-01 02:50:48 -0700</bug_when>
    <thetext>(In reply to comment #18)
&gt; Committed r190370: &lt;http://trac.webkit.org/changeset/190370&gt;

bug149621 is still valid</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>260631</attachid>
            <date>2015-09-04 15:19:20 -0700</date>
            <delta_ts>2015-09-24 16:00:41 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-148664-20150904151919.patch</filename>
            <type>text/plain</type>
            <size>64639</size>
            <attacher name="Basile Clement">basile_clement</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTg3NzkxCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA5
ZDQ1ZWVlY2MxNjU3NmM2M2I4MWVkNjMxN2UwNzcyZmM2YTQ1YjE4Li5hNDNkNDVkNjIxOTMwMWIx
ZTY1ZWQyYjc4ZmRlNGJkNjA4NDYzZGMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxMDQgQEAKKzIwMTUtMDktMDQgIGJhc2lsZV9jbGVtZW50QGFwcGxlLmNvbSAgPGJhc2ls
ZV9jbGVtZW50QGFwcGxlLmNvbUAyNjhmNDVjYy1jZDA5LTA0MTAtYWIzYy1kNTI2OTFiNGRiZmM+
CisKKyAgICAgICAgW0VTNl0gSW1wbGVtZW50IHRhaWwgY2FsbHMgaW4gdGhlIEZUTAorICAgICAg
ICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ4NjY0CisKKyAgICAg
ICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBwYXRjaCBpbXBs
ZW1lbnRzIHRoZSB0YWlsIGNhbGwgb3Bjb2RlcyBpbiB0aGUgRlRMLCBtYWtpbmcgdGFpbAorICAg
ICAgICBjYWxscyBhdmFpbGFibGUgdGhyb3VnaCBhbGwgdGllcnMuIFRoZSBjaGFuZ2VzIGFyZSBy
ZWxhdGl2ZWx5CisgICAgICAgIHN0cmFpZ2h0Zm9yd2FyZCwgYWx0aG91Z2ggdGhlIGZyYW1lIHNo
dWZmbGVyIGhhZCB0byBiZSBleHRlbmRlZCB0bworICAgICAgICBoYW5kbGUgdGhlIHBvc3NpYmls
aXR5IG9mIHJ1bm5pbmcgb3V0IG9mIHN0YWNrIHdoZW4gc3BpbGxpbmcgb3IKKyAgICAgICAgYnVp
bGRpbmcgYSBzbG93IHBhdGggZnJhbWUuIFRoZSBvdGhlciB0aWVycyBhbHdheXMgZW5zdXJlIHRo
YXQgd2UgaGF2ZQorICAgICAgICBlbm91Z2ggc3RhY2sgc3BhY2UgdG8gYnVpbGQgdGhlIG5ldyBm
cmFtZSBhdCB0aGUgYm90dG9tIG9mIHRoZSBvbGQgb25lLAorICAgICAgICBidXQgdGhhdCBpcyBu
b3QgdHJ1ZSBmb3IgdGhlIEZUTC4KKworICAgICAgICBNb3Jlb3ZlciwgZm9yIGVmZmljaWVuY3ks
IHRoaXMgYWRkcyB0byB0aGUgc2h1ZmZsZXIgdGhlIGFiaWxpdHkgdG8KKyAgICAgICAgcmVjb3Jk
IHRoZSBzdGF0ZSBvZiB0aGUgVGFnVHlwZU51bWJlciwgYW5kIHRvIHJlLXVzZSB0aGUgc2FtZSBy
ZWdpc3RlcgorICAgICAgICB3aGVuIGRvaW5nIHNldmVyYWwgY29uc2VjdXRpdmUgaW50ZWdlciBi
b3hpbmdzIHdpdGggbm8gc3BpbGxpbmcgaW4KKyAgICAgICAgYmV0d2Vlbi4KKworICAgICAgICAq
IEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYnl0
ZWNvZGUvVmFsdWVSZWNvdmVyeS5oOgorICAgICAgICAoSlNDOjpWYWx1ZVJlY292ZXJ5OjppblJl
Z2lzdGVyKToKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAo
SlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxpbmluZyk6CisgICAgICAgIChKU0M6
OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2spOgorICAgICAgICAqIGRmZy9ERkdOb2Rl
Lmg6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6aXNGdW5jdGlvblRlcm1pbmFsKToKKyAgICAg
ICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3Bl
Y3VsYXRpdmVKSVQ6OmVtaXRDYWxsKToKKyAgICAgICAgKiBkZmcvREZHVGllclVwQ2hlY2tJbmpl
Y3Rpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6VGllclVwQ2hlY2tJbmplY3Rpb25Q
aGFzZTo6cnVuKToKKyAgICAgICAgKiBmdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcDoKKyAgICAgICAg
KEpTQzo6RlRMOjpjYW5Db21waWxlKToKKyAgICAgICAgKiBmdGwvRlRMQ29tcGlsZS5jcHA6Cisg
ICAgICAgIChKU0M6OkZUTDo6bW1BbGxvY2F0ZURhdGFTZWN0aW9uKToKKyAgICAgICAgKiBmdGwv
RlRMSW5saW5lQ2FjaGVTaXplLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpzaXplT2ZUYWlsQ2Fs
bFZhcmFyZ3MpOgorICAgICAgICAoSlNDOjpGVEw6OnNpemVPZlRhaWxDYWxsRm9yd2FyZFZhcmFy
Z3MpOgorICAgICAgICAoSlNDOjpGVEw6OnNpemVPZklDRm9yKToKKyAgICAgICAgKiBmdGwvRlRM
SW5saW5lQ2FjaGVTaXplLmg6CisgICAgICAgICogZnRsL0ZUTEpTQ2FsbC5jcHA6CisgICAgICAg
IChKU0M6OkZUTDo6SlNDYWxsOjpKU0NhbGwpOgorICAgICAgICAqIGZ0bC9GVExKU0NhbGxCYXNl
LmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpKU0NhbGxCYXNlOjplbWl0KToKKyAgICAgICAgKEpT
Qzo6RlRMOjpKU0NhbGxCYXNlOjpsaW5rKToKKyAgICAgICAgKiBmdGwvRlRMSlNDYWxsQmFzZS5o
OgorICAgICAgICAqIGZ0bC9GVExKU0NhbGxWYXJhcmdzLmNwcDoKKyAgICAgICAgKEpTQzo6RlRM
OjpKU0NhbGxWYXJhcmdzOjpKU0NhbGxWYXJhcmdzKToKKyAgICAgICAgKEpTQzo6RlRMOjpKU0Nh
bGxWYXJhcmdzOjplbWl0KToKKyAgICAgICAgKiBmdGwvRlRMSlNUYWlsQ2FsbC5jcHA6IEFkZGVk
LgorICAgICAgICAoSlNDOjpGVEw6OmdldFJlZ2lzdGVyV2l0aEFkZGVuZCk6CisgICAgICAgIChK
U0M6OkZUTDo6cmVjb3ZlcnlGb3IpOgorICAgICAgICAoSlNDOjpGVEw6OnNpemVGb3IpOgorICAg
ICAgICAoSlNDOjpGVEw6OkpTVGFpbENhbGw6OkpTVGFpbENhbGwpOgorICAgICAgICAoSlNDOjpG
VEw6Om1faW5zdHJ1Y3Rpb25PZmZzZXQpOgorICAgICAgICAoSlNDOjpGVEw6OkpTVGFpbENhbGw6
OmVtaXQpOgorICAgICAgICAqIGZ0bC9GVExKU1RhaWxDYWxsLmg6IENvcGllZCBmcm9tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSlNDYWxsQmFzZS5oLgorICAgICAgICAoSlNDOjpGVEw6
OkpTVGFpbENhbGw6OnN0YWNrbWFwSUQpOgorICAgICAgICAoSlNDOjpGVEw6OkpTVGFpbENhbGw6
OmVzdGltYXRlZFNpemUpOgorICAgICAgICAoSlNDOjpGVEw6OkpTVGFpbENhbGw6Om51bUFyZ3Vt
ZW50cyk6CisgICAgICAgIChKU0M6OkZUTDo6SlNUYWlsQ2FsbDo6b3BlcmF0b3I8KToKKyAgICAg
ICAgKiBmdGwvRlRMTG9jYXRpb24uaDoKKyAgICAgICAgKEpTQzo6RlRMOjpMb2NhdGlvbjo6b3Bl
cmF0b3IgYm9vbCk6CisgICAgICAgIChKU0M6OkZUTDo6TG9jYXRpb246Om9wZXJhdG9yISk6Cisg
ICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpE
Rkc6Okxvd2VyREZHVG9MTFZNOjpsb3dlcik6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dl
ckRGR1RvTExWTTo6Y29tcGlsZU5vZGUpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJE
RkdUb0xMVk06OmNvbXBpbGVUYWlsQ2FsbCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dl
ckRGR1RvTExWTTo6Y29tcGlsZUNhbGxPckNvbnN0cnVjdFZhcmFyZ3MpOgorICAgICAgICAoSlND
OjpGVEw6OkRGRzo6TG93ZXJERkdUb0xMVk06OmNhbGxQcmVmbGlnaHQpOgorICAgICAgICAoSlND
OjpGVEw6OkRGRzo6TG93ZXJERkdUb0xMVk06OmV4aXRWYWx1ZUZvclRhaWxDYWxsKToKKyAgICAg
ICAgKiBmdGwvRlRMU3RhdGUuaDoKKyAgICAgICAgKiBqaXQvQXNzZW1ibHlIZWxwZXJzLmNwcDoK
KyAgICAgICAgKEpTQzo6QXNzZW1ibHlIZWxwZXJzOjplbWl0RXhjZXB0aW9uQ2hlY2spOgorICAg
ICAgICAqIGppdC9DYWxsRnJhbWVTaHVmZmxlRGF0YS5oOgorICAgICAgICAqIGppdC9DYWxsRnJh
bWVTaHVmZmxlci5jcHA6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZmbGVyOjpDYWxsRnJh
bWVTaHVmZmxlcik6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZmbGVyOjpkdW1wKToKKyAg
ICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZsZXI6OnNwaWxsKToKKyAgICAgICAgKEpTQzo6Q2Fs
bEZyYW1lU2h1ZmZsZXI6OmV4dGVuZEZyYW1lSWZOZWVkZWQpOgorICAgICAgICAoSlNDOjpDYWxs
RnJhbWVTaHVmZmxlcjo6cHJlcGFyZUZvclNsb3dQYXRoKToKKyAgICAgICAgKEpTQzo6Q2FsbEZy
YW1lU2h1ZmZsZXI6OnByZXBhcmVBbnkpOgorICAgICAgICAqIGppdC9DYWxsRnJhbWVTaHVmZmxl
ci5oOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6cmVzdG9yZUdQUik6CisgICAg
ICAgIChKU0M6OkNhbGxGcmFtZVNodWZmbGVyOjpnZXRGcmVlUmVnaXN0ZXIpOgorICAgICAgICAo
SlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6Z2V0RnJlZVRlbXBHUFIpOgorICAgICAgICAoSlNDOjpD
YWxsRnJhbWVTaHVmZmxlcjo6ZW5zdXJlVGVtcEdQUik6CisgICAgICAgIChKU0M6OkNhbGxGcmFt
ZVNodWZmbGVyOjphZGROZXcpOgorICAgICAgICAqIGppdC9DYWxsRnJhbWVTaHVmZmxlcjY0LmNw
cDoKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZsZXI6OmVtaXRCb3gpOgorICAgICAgICAo
SlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6dHJ5QWNxdWlyZVRhZ1R5cGVOdW1iZXIpOgorICAgICAg
ICAqIGppdC9KSVRDYWxsLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlT3BDYWxsKToK
KyAgICAgICAgKiBqaXQvUmVnLmg6CisgICAgICAgIChKU0M6OlJlZzo6UmVnKToKKyAgICAgICAg
KEpTQzo6UmVnOjppc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSk6CisgICAgICAgIChKU0M6OlJlZzo6
ZGVsZXRlZCk6CisgICAgICAgIChKU0M6OlJlZ0hhc2g6Omhhc2gpOgorICAgICAgICAoSlNDOjpS
ZWdIYXNoOjplcXVhbCk6CisKIDIwMTUtMDktMDQgIEJhc2lsZSBDbGVtZW50ICA8YmFzaWxlX2Ns
ZW1lbnRAYXBwbGUuY29tPgogCiAgICAgICAgIFtFUzZdIEltcGxlbWVudCB0YWlsIGNhbGxzIGlu
IHRoZSBERkcKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFT
Y3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXggNGMyYzBmOTQwZTFmMTUw
MTVjMmU2NGE2MzI0N2I2NGRmZmNlNTBkZC4uNjRmZGE2M2YxMDgxOWRjYWE1ZjI1NWRmNWZlNTI0
NDdkYTA1MGIzZSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTk3NCw2ICs5NzQs
OCBAQAogCQk2MjNBMzdFQzFCODdBN0MwMDA3NTQyMDkgLyogUmVnaXN0ZXJNYXAuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDYyM0EzN0VCMUI4N0E3QkQw
MDc1NDIwOSAvKiBSZWdpc3Rlck1hcC5oICovOyB9OwogCQk2Mjc2NzMyMzFCNjgwQzFFMDBGRDlG
MkUgLyogQ2FsbE1vZGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gNjI3NjczMjExQjY4MEMxRTAwRkQ5RjJFIC8qIENhbGxNb2RlLmNwcCAqLzsgfTsK
IAkJNjI3NjczMjQxQjY4MEMxRTAwRkQ5RjJFIC8qIENhbGxNb2RlLmggaW4gSGVhZGVycyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2Mjc2NzMyMjFCNjgwQzFFMDBGRDlGMkUg
LyogQ2FsbE1vZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9
OyB9OworCQk2Mjc3NERBQTFCOEQ0QjE5MDAwNkYwNUEgLyogRlRMSlNUYWlsQ2FsbC5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2Mjc3NERBODFCOEQ0
QjE5MDAwNkYwNUEgLyogRlRMSlNUYWlsQ2FsbC5jcHAgKi87IH07CisJCTYyNzc0REFCMUI4RDRC
MTkwMDA2RjA1QSAvKiBGVExKU1RhaWxDYWxsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSA2Mjc3NERBOTFCOEQ0QjE5MDAwNkYwNUEgLyogRlRMSlNUYWls
Q2FsbC5oICovOyB9OwogCQk2MkQyRDM4RjFBREYxMDNGMDAwMjA2QzEgLyogRnVuY3Rpb25SYXJl
RGF0YS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2
MkQyRDM4RDFBREYxMDNGMDAwMjA2QzEgLyogRnVuY3Rpb25SYXJlRGF0YS5jcHAgKi87IH07CiAJ
CTYyRDJEMzkwMUFERjEwM0YwMDAyMDZDMSAvKiBGdW5jdGlvblJhcmVEYXRhLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2MkQyRDM4RTFBREYxMDNGMDAw
MjA2QzEgLyogRnVuY3Rpb25SYXJlRGF0YS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTYyRDc1NUQ0MUI4NEZCM0QwMDE4MDFGQSAvKiBDYWxsRnJh
bWVTaHVmZmxlcjY0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDYyRDc1NUQzMUI4NEZCMzkwMDE4MDFGQSAvKiBDYWxsRnJhbWVTaHVmZmxlcjY0LmNw
cCAqLzsgfTsKQEAgLTI3ODMsNiArMjc4NSw4IEBACiAJCTYyM0EzN0VCMUI4N0E3QkQwMDc1NDIw
OSAvKiBSZWdpc3Rlck1hcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZWdp
c3Rlck1hcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2Mjc2NzMyMTFCNjgwQzFF
MDBGRDlGMkUgLyogQ2FsbE1vZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gQ2FsbE1vZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2Mjc2NzMy
MjFCNjgwQzFFMDBGRDlGMkUgLyogQ2FsbE1vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gQ2FsbE1vZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNjI3NzRE
QTgxQjhENEIxOTAwMDZGMDVBIC8qIEZUTEpTVGFpbENhbGwuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gRlRMSlNUYWlsQ2FsbC5jcHA7IHBhdGggPSBmdGwvRlRMSlNU
YWlsQ2FsbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTYyNzc0REE5MUI4RDRC
MTkwMDA2RjA1QSAvKiBGVExKU1RhaWxDYWxsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IEZUTEpTVGFpbENhbGwuaDsgcGF0aCA9IGZ0bC9GVExKU1RhaWxDYWxsLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTYyQTlBMjlFMUIwQkVENDgwMEJENTRDQSAvKiBERkdM
YXp5Tm9kZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdMYXp5
Tm9kZS5jcHA7IHBhdGggPSBkZmcvREZHTGF6eU5vZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQk2MkE5QTI5RjFCMEJFRDQ4MDBCRDU0Q0EgLyogREZHTGF6eU5vZGUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHTGF6eU5vZGUuaDsgcGF0aCA9IGRmZy9E
RkdMYXp5Tm9kZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2MkQyRDM4RDFBREYx
MDNGMDAwMjA2QzEgLyogRnVuY3Rpb25SYXJlRGF0YS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IHBhdGggPSBGdW5jdGlvblJhcmVEYXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKQEAgLTM5NTUsNiArMzk1OSw4IEBACiAJCQkJMEZEMTIwMkUxQThBRUQxMjAwMEY1
MjgwIC8qIEZUTEpTQ2FsbEJhc2UuaCAqLywKIAkJCQkwRkQxMjAzMTFBOEM4NUJEMDAwRjUyODAg
LyogRlRMSlNDYWxsVmFyYXJncy5jcHAgKi8sCiAJCQkJMEZEMTIwMzIxQThDODVCRDAwMEY1Mjgw
IC8qIEZUTEpTQ2FsbFZhcmFyZ3MuaCAqLywKKwkJCQk2Mjc3NERBODFCOEQ0QjE5MDAwNkYwNUEg
LyogRlRMSlNUYWlsQ2FsbC5jcHAgKi8sCisJCQkJNjI3NzREQTkxQjhENEIxOTAwMDZGMDVBIC8q
IEZUTEpTVGFpbENhbGwuaCAqLywKIAkJCQkwRjhGMkI5MzE3MkUwNDlFMDA3REJEQTUgLyogRlRM
TGluay5jcHAgKi8sCiAJCQkJMEY4RjJCOTQxNzJFMDQ5RTAwN0RCREE1IC8qIEZUTExpbmsuaCAq
LywKIAkJCQkwRkNFRkFERDE4MDczOEMwMDA0NzJDRTQgLyogRlRMTG9jYXRpb24uY3BwICovLApA
QCAtNjUxMiw2ICs2NTE4LDcgQEAKIAkJCQkwRjJCNjZGMzE3QjZCNUFCMDBBN0FFM0YgLyogSlNH
ZW5lcmljVHlwZWRBcnJheVZpZXdDb25zdHJ1Y3RvcklubGluZXMuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGMkI2NkY0MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmlld0lu
bGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNUExMjc0MTkyRDlGREYwMDg3NjRBMyAvKiBE
RkdEb2VzR0MuaCBpbiBIZWFkZXJzICovLAorCQkJCTYyNzc0REFCMUI4RDRCMTkwMDA2RjA1QSAv
KiBGVExKU1RhaWxDYWxsLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJCNjZGNTE3QjZCNUFCMDBB
N0FFM0YgLyogSlNHZW5lcmljVHlwZWRBcnJheVZpZXdQcm90b3R5cGUuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGMkI2NkY2MTdCNkI1QUIwMEE3QUUzRiAvKiBKU0dlbmVyaWNUeXBlZEFycmF5Vmll
d1Byb3RvdHlwZUlubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTdCMzlGNzZFMUI2MkRFMzIw
MDM2MEZCNCAvKiBXQVNNTW9kdWxlUGFyc2VyLmggaW4gSGVhZGVycyAqLywKQEAgLTc4NzcsNiAr
Nzg4NCw3IEBACiAJCQkJMTQyRDZGMDgxMzUzOUEyODAwQjAyRTg2IC8qIE1hcmtlZEJsb2NrLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTE0RDJGM0RBMTM5RjRCRTIwMDQ5MTAzMSAvKiBNYXJrZWRT
cGFjZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDJENkYxMTEzNTM5QTQxMDBCMDJFODYgLyog
TWFya1N0YWNrLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTYyNzc0REFBMUI4RDRCMTkwMDA2RjA1
QSAvKiBGVExKU1RhaWxDYWxsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0NDY5RERGMTA3RUM3
RTcwMDY1MDQ0NiAvKiBNYXRoT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTkwMjEzRTNE
MTIzQTQwQzIwMEQ0MjJGMyAvKiBNZW1vcnlTdGF0aXN0aWNzLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGQjU0NjdEMTRGNUNGRDYwMDJDMjk4OSAvKiBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9m
aWxlLmNwcCBpbiBTb3VyY2VzICovLApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1ZhbHVlUmVjb3ZlcnkuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9WYWx1ZVJlY292ZXJ5LmgKaW5kZXggZjkzMGFmZjVkZWE1ZDc5NDg5MzQwNjE1OTNlNmJkODc4
M2NhMDBmYi4uNGZiZGI1OTUwOWE2OTNkYmFhOGE5ODU4ZjJkOGU3MDI5NmVkMWM4YSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhbHVlUmVjb3ZlcnkuaAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFsdWVSZWNvdmVyeS5oCkBAIC0zMSw2
ICszMSw3IEBACiAjaWYgRU5BQkxFKEpJVCkKICNpbmNsdWRlICJHUFJJbmZvLmgiCiAjaW5jbHVk
ZSAiRlBSSW5mby5oIgorI2luY2x1ZGUgIlJlZy5oIgogI2VuZGlmCiAjaW5jbHVkZSAiSlNDSlNW
YWx1ZS5oIgogI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyLmgiCkBAIC04NCw2ICs4NSwxNyBAQCBw
dWJsaWM6CiAgICAgYm9vbCBpc1NldCgpIGNvbnN0IHsgcmV0dXJuIG1fdGVjaG5pcXVlICE9IERv
bnRLbm93OyB9CiAgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVybiAhaXNTZXQoKTsg
fQogICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiBpc1NldCgpOyB9
CisKKyNpZiBFTkFCTEUoSklUKQorICAgIHN0YXRpYyBWYWx1ZVJlY292ZXJ5IGluUmVnaXN0ZXIo
UmVnIHJlZywgRGF0YUZvcm1hdCBkYXRhRm9ybWF0KQorICAgIHsKKyAgICAgICAgaWYgKHJlZy5p
c0dQUigpKQorICAgICAgICAgICAgcmV0dXJuIGluR1BSKHJlZy5ncHIoKSwgZGF0YUZvcm1hdCk7
CisKKyAgICAgICAgQVNTRVJUKHJlZy5pc0ZQUigpKTsKKyAgICAgICAgcmV0dXJuIGluRlBSKHJl
Zy5mcHIoKSwgZGF0YUZvcm1hdCk7CisgICAgfQorI2VuZGlmCiAgICAgCiAgICAgc3RhdGljIFZh
bHVlUmVjb3ZlcnkgaW5HUFIoTWFjcm9Bc3NlbWJsZXI6OlJlZ2lzdGVySUQgZ3ByLCBEYXRhRm9y
bWF0IGRhdGFGb3JtYXQpCiAgICAgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0J5dGVDb2RlUGFyc2VyLmNwcAppbmRleCAyMzZiM2ExYTg0ZmI5YWNkZTk4YWYzOGRiZDcwOGU2
YzZkMDExYTM2Li42Y2UwYWJkNDNmNDE4ZjA3MDkzNmUyODY4ZWI2Y2EzMzcyZjIxNWQzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcApAQCAt
MTg4MywxMSArMTg4MywxNSBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxpbmluZygK
ICAgICAgICAgbV9jdXJyZW50SW5kZXggPSBuZXh0T2Zmc2V0OwogICAgICAgICBtX2V4aXRPSyA9
IHRydWU7CiAgICAgICAgIHByb2Nlc3NTZXRMb2NhbFF1ZXVlKCk7IC8vIFRoaXMgb25seSBjb21l
cyBpbnRvIHBsYXkgZm9yIGludHJpbnNpY3MsIHNpbmNlIG5vcm1hbCBpbmxpbmVkIGNvZGUgd2ls
bCBsZWF2ZSBhbiBlbXB0eSBxdWV1ZS4KLSAgICAgICAgYWRkVG9HcmFwaChKdW1wKTsKKyAgICAg
ICAgaWYgKE5vZGUqIHRlcm1pbmFsID0gbV9jdXJyZW50QmxvY2stPnRlcm1pbmFsKCkpCisgICAg
ICAgICAgICBBU1NFUlRfVU5VU0VEKHRlcm1pbmFsLCB0ZXJtaW5hbC0+b3AoKSA9PSBUYWlsQ2Fs
bCB8fCB0ZXJtaW5hbC0+b3AoKSA9PSBUYWlsQ2FsbFZhcmFyZ3MpOworICAgICAgICBlbHNlIHsK
KyAgICAgICAgICAgIGFkZFRvR3JhcGgoSnVtcCk7CisgICAgICAgICAgICBsYW5kaW5nQmxvY2tz
LmFwcGVuZChtX2N1cnJlbnRCbG9jayk7CisgICAgICAgIH0KICAgICAgICAgaWYgKHZlcmJvc2Up
CiAgICAgICAgICAgICBkYXRhTG9nKCJNYXJraW5nICIsIFJhd1BvaW50ZXIobV9jdXJyZW50Qmxv
Y2spLCAiIGFzIGxpbmtlZCAodGFpbCBvZiBwb2x5IGlubGluZWUpXG4iKTsKICAgICAgICAgbV9j
dXJyZW50QmxvY2stPmRpZExpbmsoKTsKLSAgICAgICAgbGFuZGluZ0Jsb2Nrcy5hcHBlbmQobV9j
dXJyZW50QmxvY2spOwogCiAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgZGF0YUxv
ZygiRmluaXNoZWQgaW5saW5pbmcgIiwgY2FsbExpbmtTdGF0dXNbaV0sICIgYXQgIiwgY3VycmVu
dENvZGVPcmlnaW4oKSwgIi5cbiIpOwpAQCAtMTkyMCw4ICsxOTI0LDEyIEBAIGJvb2wgQnl0ZUNv
ZGVQYXJzZXI6OmhhbmRsZUlubGluaW5nKAogICAgIG1fY3VycmVudEluZGV4ID0gbmV4dE9mZnNl
dDsKICAgICBtX2V4aXRPSyA9IHRydWU7IC8vIE9yaWdpbiBjaGFuZ2VkLCBzbyBpdCdzIGZpbmUg
dG8gZXhpdCBhZ2Fpbi4KICAgICBwcm9jZXNzU2V0TG9jYWxRdWV1ZSgpOwotICAgIGFkZFRvR3Jh
cGgoSnVtcCk7Ci0gICAgbGFuZGluZ0Jsb2Nrcy5hcHBlbmQobV9jdXJyZW50QmxvY2spOworICAg
IGlmIChOb2RlKiB0ZXJtaW5hbCA9IG1fY3VycmVudEJsb2NrLT50ZXJtaW5hbCgpKQorICAgICAg
ICBBU1NFUlRfVU5VU0VEKHRlcm1pbmFsLCB0ZXJtaW5hbC0+b3AoKSA9PSBUYWlsQ2FsbCB8fCB0
ZXJtaW5hbC0+b3AoKSA9PSBUYWlsQ2FsbFZhcmFyZ3MpOworICAgIGVsc2UgeworICAgICAgICBh
ZGRUb0dyYXBoKEp1bXApOworICAgICAgICBsYW5kaW5nQmxvY2tzLmFwcGVuZChtX2N1cnJlbnRC
bG9jayk7CisgICAgfQogICAgIAogICAgIFJlZlB0cjxCYXNpY0Jsb2NrPiBjb250aW51YXRpb25C
bG9jayA9IGFkb3B0UmVmKAogICAgICAgICBuZXcgQmFzaWNCbG9jayhVSU5UX01BWCwgbV9udW1B
cmd1bWVudHMsIG1fbnVtTG9jYWxzLCBQTmFOKSk7CkBAIC0zNjQ4LDcgKzM2NTYsNyBAQCBib29s
IEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogICAgICAgICAgICAg
ICAgIC8vIFdlIGNvdWxkIGJlIHRoZSBkdW1teSBqdW1wIHRvIGEgcmV0dXJuIGFmdGVyIGEgbm9u
LWlubGluZWQsIG5vbi1lbXVsYXRlZCB0YWlsIGNhbGwgaW4gYSB0ZXJuYXJ5IG9wZXJhdG9yCiAg
ICAgICAgICAgICAgICAgTm9kZSogdGVybWluYWwgPSBtX2N1cnJlbnRCbG9jay0+dGVybWluYWwo
KTsKICAgICAgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKHRlcm1pbmFsLCB0ZXJtaW5hbC0+b3Ao
KSA9PSBUYWlsQ2FsbCB8fCB0ZXJtaW5hbC0+b3AoKSA9PSBUYWlsQ2FsbFZhcmFyZ3MpOwotICAg
ICAgICAgICAgICAgIExBU1RfT1BDT0RFKG9wX3JldCk7CisgICAgICAgICAgICAgICAgTEFTVF9P
UENPREUob3Bfam1wKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGludCByZWxhdGl2ZU9m
ZnNldCA9IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CiAgICAgICAgICAgICBhZGRU
b0dyYXBoKEp1bXAsIE9wSW5mbyhtX2N1cnJlbnRJbmRleCArIHJlbGF0aXZlT2Zmc2V0KSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCmluZGV4IGI5NjFjZDFiYzU1Y2U0NWMyYTA2MDdm
NDc2ODRkODUxZDZiMmQ5OGUuLjExOTZlZjFmMjE3ZjE0YzIzNWQ1NWZmOGNjNjk3NDkyMjFhZjUy
MDYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCkBAIC0xMTEzLDYgKzExMTMsMTkg
QEAgc3RydWN0IE5vZGUgewogICAgICAgICB9CiAgICAgfQogCisgICAgYm9vbCBpc0Z1bmN0aW9u
VGVybWluYWwoKQorICAgIHsKKyAgICAgICAgc3dpdGNoIChvcCgpKSB7CisgICAgICAgIGNhc2Ug
UmV0dXJuOgorICAgICAgICBjYXNlIFRhaWxDYWxsOgorICAgICAgICBjYXNlIFRhaWxDYWxsVmFy
YXJnczoKKyAgICAgICAgY2FzZSBUYWlsQ2FsbEZvcndhcmRWYXJhcmdzOgorICAgICAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CisgICAgICAgIH0KKyAgICB9CisKICAgICB1bnNpZ25lZCB0YXJnZXRCeXRlY29kZU9mZnNldER1
cmluZ1BhcnNpbmcoKQogICAgIHsKICAgICAgICAgQVNTRVJUKGlzSnVtcCgpKTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCmluZGV4IDA2
NmJkOWFhMDc2NTcwOTQ2MTkyOTRhYzZmMTdmYjlmODE2NTBiYjkuLjk5ZGUyOTBjMTc2ZjMzNGVj
YTQxZDhlZGVhMjgyZDRmNDE3MTE2YmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcApAQCAtNzY1LDYgKzc2NSw3IEBAIHZvaWQgU3Bl
Y3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICBjYWxsZWVHUFIg
PSBjYWxsZWUuZ3ByKCk7CiAgICAgICAgICAgICBjYWxsZWUudXNlKCk7CiAKKyAgICAgICAgICAg
IHNodWZmbGVEYXRhLnRhZ1R5cGVOdW1iZXIgPSBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0
ZXI7CiAgICAgICAgICAgICBzaHVmZmxlRGF0YS5udW1Mb2NhbHMgPSBtX2ppdC5ncmFwaCgpLmZy
YW1lUmVnaXN0ZXJDb3VudCgpOwogICAgICAgICAgICAgc2h1ZmZsZURhdGEuY2FsbGVlID0gVmFs
dWVSZWNvdmVyeTo6aW5HUFIoY2FsbGVlR1BSLCBEYXRhRm9ybWF0SlMpOwogICAgICAgICAgICAg
c2h1ZmZsZURhdGEuYXJncy5yZXNpemUobnVtUGFzc2VkQXJncyk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UuY3BwIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaWVyVXBDaGVja0luamVjdGlvblBoYXNlLmNw
cAppbmRleCA1ZjUwOWM0MWUwY2YxMWJhNmU0NGRjY2YzYTQxYzNhYjI3ODE4MzdhLi5mMGJhNmYx
MDE2NTdiMzExMjdiZDQyYjBhYjk3MmMwYTI2OGQ1ZjZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UuY3BwCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZS5jcHAK
QEAgLTkyLDcgKzkyLDcgQEAgcHVibGljOgogICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAg
ICAgICAgICAgICBOb2RlQW5kSW5kZXggdGVybWluYWwgPSBibG9jay0+ZmluZFRlcm1pbmFsKCk7
Ci0gICAgICAgICAgICBpZiAodGVybWluYWwubm9kZS0+b3AoKSA9PSBSZXR1cm4pIHsKKyAgICAg
ICAgICAgIGlmICh0ZXJtaW5hbC5ub2RlLT5pc0Z1bmN0aW9uVGVybWluYWwoKSkgewogICAgICAg
ICAgICAgICAgIGluc2VydGlvblNldC5pbnNlcnROb2RlKAogICAgICAgICAgICAgICAgICAgICB0
ZXJtaW5hbC5pbmRleCwgU3BlY05vbmUsIENoZWNrVGllclVwQXRSZXR1cm4sIHRlcm1pbmFsLm5v
ZGUtPm9yaWdpbik7CiAgICAgICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTENhcGFiaWxpdGllcy5jcHAKaW5kZXggZDM1YzUxYjAyMTc0ZWUxNWNkYTQ3OWRhZDcxZjA0
OWM4OTQzNTE3YS4uODZhYTQ5YjczMWQyMjdlZTUyMTNkNGY2NzhkOGM0ODJiYzBlNGM3NiAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMuY3BwCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcApAQCAtMTMw
LDEwICsxMzAsMTYgQEAgaW5saW5lIENhcGFiaWxpdHlMZXZlbCBjYW5Db21waWxlKE5vZGUqIG5v
ZGUpCiAgICAgY2FzZSBOb3RpZnlXcml0ZToKICAgICBjYXNlIFN0b3JlQmFycmllcjoKICAgICBj
YXNlIENhbGw6CisgICAgY2FzZSBUYWlsQ2FsbDoKKyAgICBjYXNlIFRhaWxDYWxsSW5saW5lZENh
bGxlcjoKICAgICBjYXNlIENvbnN0cnVjdDoKICAgICBjYXNlIENhbGxWYXJhcmdzOgotICAgIGNh
c2UgQ2FsbEZvcndhcmRWYXJhcmdzOgorICAgIGNhc2UgVGFpbENhbGxWYXJhcmdzOgorICAgIGNh
c2UgVGFpbENhbGxWYXJhcmdzSW5saW5lZENhbGxlcjoKICAgICBjYXNlIENvbnN0cnVjdFZhcmFy
Z3M6CisgICAgY2FzZSBDYWxsRm9yd2FyZFZhcmFyZ3M6CisgICAgY2FzZSBUYWlsQ2FsbEZvcndh
cmRWYXJhcmdzOgorICAgIGNhc2UgVGFpbENhbGxGb3J3YXJkVmFyYXJnc0lubGluZWRDYWxsZXI6
CiAgICAgY2FzZSBDb25zdHJ1Y3RGb3J3YXJkVmFyYXJnczoKICAgICBjYXNlIExvYWRWYXJhcmdz
OgogICAgIGNhc2UgVmFsdWVUb0ludDMyOgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExDb21waWxlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29t
cGlsZS5jcHAKaW5kZXggMzBhYmRmMGRhNTMwMjgyMDJhNmJiYzYwNTk4YWRmOWM3YjM0NTU2ZS4u
NWFiMjBhNTM2YjVhZTBmOWJjZjhkM2U1NWE2Yjk5MTMwYmFhN2QyMiAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCkBAIC02MTgsNiArNjE4LDIyIEBAIHN0YXRpYyB2
b2lkIGZpeEZ1bmN0aW9uQmFzZWRPblN0YWNrTWFwcygKICAgICAgICAgICAgIGNhbGwubGluayh2
bSwgbGlua0J1ZmZlciwgc3RhdGUuZmluYWxpemVyLT5oYW5kbGVFeGNlcHRpb25zTGlua0J1ZmZl
ci0+ZW50cnlwb2ludCgpKTsKICAgICAgICAgfSk7CiAgICAgfQorCisgICAgYWRqdXN0Q2FsbElD
c0ZvclN0YWNrbWFwcyhzdGF0ZS5qc1RhaWxDYWxscywgcmVjb3JkTWFwKTsKKworICAgIGZvciAo
dW5zaWduZWQgaSA9IHN0YXRlLmpzVGFpbENhbGxzLnNpemUoKTsgaS0tOykgeworICAgICAgICBK
U1RhaWxDYWxsJiBjYWxsID0gc3RhdGUuanNUYWlsQ2FsbHNbaV07CisKKyAgICAgICAgQ0NhbGxI
ZWxwZXJzIGZhc3RQYXRoSklUKCZ2bSwgY29kZUJsb2NrKTsKKyAgICAgICAgY2FsbC5lbWl0KCpz
dGF0ZS5qaXRDb2RlLmdldCgpLCBmYXN0UGF0aEpJVCk7CisKKyAgICAgICAgY2hhciogc3RhcnRP
ZklDID0gYml0d2lzZV9jYXN0PGNoYXIqPihnZW5lcmF0ZWRGdW5jdGlvbikgKyBjYWxsLm1faW5z
dHJ1Y3Rpb25PZmZzZXQ7CisgICAgICAgIHNpemVfdCBzaXplT2ZJQyA9IGNhbGwuZXN0aW1hdGVk
U2l6ZSgpOworCisgICAgICAgIGdlbmVyYXRlSW5saW5lSWZQb3NzaWJsZU91dE9mTGluZUlmTm90
KHN0YXRlLCB2bSwgY29kZUJsb2NrLCBmYXN0UGF0aEpJVCwgc3RhcnRPZklDLCBzaXplT2ZJQywg
InRhaWwgY2FsbCBpbmxpbmUgY2FjaGUiLCBbJl0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIsIEND
YWxsSGVscGVycyYsIGJvb2wpIHsKKyAgICAgICAgICAgIGNhbGwubGluayh2bSwgbGlua0J1ZmZl
cik7CisgICAgICAgIH0pOworICAgIH0KICAgICAKICAgICBhdXRvIGl0ZXIgPSByZWNvcmRNYXAu
ZmluZChzdGF0ZS5oYW5kbGVTdGFja092ZXJmbG93RXhjZXB0aW9uU3RhY2ttYXBJRCk7CiAgICAg
Ly8gSXQncyBzb3J0IG9mIHJlbW90ZWx5IHBvc3NpYmxlIHRoYXQgd2Ugd29uJ3QgaGF2ZSBhbiBp
bi1iYW5kIGV4Y2VwdGlvbiBoYW5kbGluZwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExJbmxpbmVDYWNoZVNpemUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExJbmxpbmVDYWNoZVNpemUuY3BwCmluZGV4IGY1YmJmY2I3NzY5ZDA3ZjlkMGUyNGE1NWQ5
MGI3ZTI3Zjg2YTIwNjUuLjk0YzdhY2U4OWRiMjI0NDgzMTVlMjk2N2JmZGJjOTAxY2FmNmNkNjYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW5saW5lQ2FjaGVTaXpl
LmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTElubGluZUNhY2hlU2l6ZS5j
cHAKQEAgLTgyLDYgKzgyLDE1IEBAIHNpemVfdCBzaXplT2ZDYWxsVmFyYXJncygpCiAjZW5kaWYK
IH0KIAorc2l6ZV90IHNpemVPZlRhaWxDYWxsVmFyYXJncygpCit7CisjaWYgQ1BVKEFSTTY0KQor
ICAgIHJldHVybiAxODggKyBzaXplT2ZDYWxsVmFyYXJncygpOworI2Vsc2UKKyAgICByZXR1cm4g
MTUxICsgc2l6ZU9mQ2FsbFZhcmFyZ3MoKTsKKyNlbmRpZgorfQorCiBzaXplX3Qgc2l6ZU9mQ2Fs
bEZvcndhcmRWYXJhcmdzKCkKIHsKICNpZiBDUFUoQVJNNjQpCkBAIC05MSw2ICsxMDAsMTUgQEAg
c2l6ZV90IHNpemVPZkNhbGxGb3J3YXJkVmFyYXJncygpCiAjZW5kaWYKIH0KIAorc2l6ZV90IHNp
emVPZlRhaWxDYWxsRm9yd2FyZFZhcmFyZ3MoKQoreworI2lmIENQVShBUk02NCkKKyAgICByZXR1
cm4gMTg4ICsgc2l6ZU9mQ2FsbEZvcndhcmRWYXJhcmdzKCk7CisjZWxzZQorICAgIHJldHVybiAx
NTEgKyBzaXplT2ZDYWxsRm9yd2FyZFZhcmFyZ3MoKTsKKyNlbmRpZgorfQorCiBzaXplX3Qgc2l6
ZU9mQ29uc3RydWN0VmFyYXJncygpCiB7CiAgICAgcmV0dXJuIHNpemVPZkNhbGxWYXJhcmdzKCk7
IC8vIFNob3VsZCBiZSB0aGUgc2FtZSBzaXplLgpAQCAtMTIxLDkgKzEzOSwxNSBAQCBzaXplX3Qg
c2l6ZU9mSUNGb3IoTm9kZSogbm9kZSkKICAgICBjYXNlIENvbnN0cnVjdDoKICAgICAgICAgcmV0
dXJuIHNpemVPZkNhbGwoKTsKICAgICBjYXNlIENhbGxWYXJhcmdzOgorICAgIGNhc2UgVGFpbENh
bGxWYXJhcmdzSW5saW5lZENhbGxlcjoKICAgICAgICAgcmV0dXJuIHNpemVPZkNhbGxWYXJhcmdz
KCk7CisgICAgY2FzZSBUYWlsQ2FsbFZhcmFyZ3M6CisgICAgICAgIHJldHVybiBzaXplT2ZUYWls
Q2FsbFZhcmFyZ3MoKTsKICAgICBjYXNlIENhbGxGb3J3YXJkVmFyYXJnczoKKyAgICBjYXNlIFRh
aWxDYWxsRm9yd2FyZFZhcmFyZ3NJbmxpbmVkQ2FsbGVyOgogICAgICAgICByZXR1cm4gc2l6ZU9m
Q2FsbEZvcndhcmRWYXJhcmdzKCk7CisgICAgY2FzZSBUYWlsQ2FsbEZvcndhcmRWYXJhcmdzOgor
ICAgICAgICByZXR1cm4gc2l6ZU9mVGFpbENhbGxGb3J3YXJkVmFyYXJncygpOwogICAgIGNhc2Ug
Q29uc3RydWN0VmFyYXJnczoKICAgICAgICAgcmV0dXJuIHNpemVPZkNvbnN0cnVjdFZhcmFyZ3Mo
KTsKICAgICBjYXNlIENvbnN0cnVjdEZvcndhcmRWYXJhcmdzOgpAQCAtMTMxLDcgKzE1NSw3IEBA
IHNpemVfdCBzaXplT2ZJQ0ZvcihOb2RlKiBub2RlKQogICAgIGNhc2UgSW46CiAgICAgICAgIHJl
dHVybiBzaXplT2ZJbigpOwogICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiAwOworICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbmxpbmVDYWNoZVNpemUuaCBiL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMSW5saW5lQ2FjaGVTaXplLmgKaW5kZXggODJmM2JiYzc0Njlk
YWVkYWViZGEzMGVjNWY2NTBlYmEzMjlkNTVlNi4uZmVkODUwYmM3NjQzYWMyMGUyNWQ1MjQ3YWU1
ZGVmMmNhNDdmYmQ4NCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJ
bmxpbmVDYWNoZVNpemUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTElubGlu
ZUNhY2hlU2l6ZS5oCkBAIC00MCw3ICs0MCw5IEBAIHNpemVfdCBzaXplT2ZHZXRCeUlkKCk7CiBz
aXplX3Qgc2l6ZU9mUHV0QnlJZCgpOwogc2l6ZV90IHNpemVPZkNhbGwoKTsKIHNpemVfdCBzaXpl
T2ZDYWxsVmFyYXJncygpOworc2l6ZV90IHNpemVPZlRhaWxDYWxsVmFyYXJncygpOwogc2l6ZV90
IHNpemVPZkNhbGxGb3J3YXJkVmFyYXJncygpOworc2l6ZV90IHNpemVPZlRhaWxDYWxsRm9yd2Fy
ZFZhcmFyZ3MoKTsKIHNpemVfdCBzaXplT2ZDb25zdHJ1Y3RWYXJhcmdzKCk7CiBzaXplX3Qgc2l6
ZU9mQ29uc3RydWN0Rm9yd2FyZFZhcmFyZ3MoKTsKIHNpemVfdCBzaXplT2ZJbigpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKU0NhbGwuY3BwIGIvU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExKU0NhbGwuY3BwCmluZGV4IDI4NzdiODQ4Njk1MjFiNDAwMGJj
YzdlYmJjOTBlYWNkNjczZGEwYTEuLjFkYjE3MTk3ZDNkOGNlOTcxMTg1ZTA4ZjViNjVhMGQwNGQ2
NTgzZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSlNDYWxsLmNw
cAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpTQ2FsbC5jcHAKQEAgLTQ4LDcg
KzQ4LDcgQEAgSlNDYWxsOjpKU0NhbGwodW5zaWduZWQgc3RhY2ttYXBJRCwgTm9kZSogbm9kZSkK
ICAgICAsIG1fc3RhY2ttYXBJRChzdGFja21hcElEKQogICAgICwgbV9pbnN0cnVjdGlvbk9mZnNl
dCgwKQogewotICAgIEFTU0VSVChub2RlLT5vcCgpID09IENhbGwgfHwgbm9kZS0+b3AoKSA9PSBD
b25zdHJ1Y3QpOworICAgIEFTU0VSVChub2RlLT5vcCgpID09IENhbGwgfHwgbm9kZS0+b3AoKSA9
PSBDb25zdHJ1Y3QgfHwgbm9kZS0+b3AoKSA9PSBUYWlsQ2FsbElubGluZWRDYWxsZXIpOwogfQog
CiB2b2lkIEpTQ2FsbDo6ZW1pdChDQ2FsbEhlbHBlcnMmIGppdCwgdW5zaWduZWQgc3RhY2tTaXpl
Rm9yTG9jYWxzKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKU0Nh
bGxCYXNlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSlNDYWxsQmFzZS5jcHAK
aW5kZXggZjIwMGE5ZjZiMTgzNThkNzZiMjg4MTZmN2FkZWQzN2M0YTYyMDYzYy4uYTUyYzczNDlh
ZmNkNzk5ZjQ5MDM3NzhmYzdhYzcyYWUyYTAzMmVjNiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExKU0NhbGxCYXNlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTEpTQ2FsbEJhc2UuY3BwCkBAIC01NSwxNiArNTUsMjkgQEAgdm9pZCBKU0NhbGxC
YXNlOjplbWl0KENDYWxsSGVscGVycyYgaml0KQogICAgIENDYWxsSGVscGVyczo6SnVtcCBzbG93
UGF0aCA9IGppdC5icmFuY2hQdHJXaXRoUGF0Y2goCiAgICAgICAgIENDYWxsSGVscGVyczo6Tm90
RXF1YWwsIEdQUkluZm86OnJlZ1QwLCBtX3RhcmdldFRvQ2hlY2ssCiAgICAgICAgIENDYWxsSGVs
cGVyczo6VHJ1c3RlZEltbVB0cigwKSk7Ci0gICAgCi0gICAgbV9mYXN0Q2FsbCA9IGppdC5uZWFy
Q2FsbCgpOwotICAgIENDYWxsSGVscGVyczo6SnVtcCBkb25lID0gaml0Lmp1bXAoKTsKLSAgICAK
KworICAgIENDYWxsSGVscGVyczo6SnVtcCBkb25lOworCisgICAgaWYgKENhbGxMaW5rSW5mbzo6
Y2FsbE1vZGVGb3IobV90eXBlKSA9PSBDYWxsTW9kZTo6VGFpbCkgeworICAgICAgICBqaXQuZW1p
dFJlc3RvcmVDYWxsZWVTYXZlcygpOworICAgICAgICBqaXQucHJlcGFyZUZvclRhaWxDYWxsU2xv
dygpOworICAgICAgICBtX2Zhc3RDYWxsID0gaml0Lm5lYXJUYWlsQ2FsbCgpOworICAgIH0gZWxz
ZSB7CisgICAgICAgIG1fZmFzdENhbGwgPSBqaXQubmVhckNhbGwoKTsKKyAgICAgICAgZG9uZSA9
IGppdC5qdW1wKCk7CisgICAgfQorCiAgICAgc2xvd1BhdGgubGluaygmaml0KTsKLSAgICAKKwog
ICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihtX2NhbGxMaW5rSW5mbyks
IEdQUkluZm86OnJlZ1QyKTsKICAgICBtX3Nsb3dDYWxsID0gaml0Lm5lYXJDYWxsKCk7Ci0gICAg
Ci0gICAgZG9uZS5saW5rKCZqaXQpOworCisgICAgaWYgKENhbGxMaW5rSW5mbzo6Y2FsbE1vZGVG
b3IobV90eXBlKSA9PSBDYWxsTW9kZTo6VGFpbCkKKyAgICAgICAgaml0LmFib3J0V2l0aFJlYXNv
bihKSVREaWRSZXR1cm5Gcm9tVGFpbENhbGwpOworICAgIGVsc2UKKyAgICAgICAgZG9uZS5saW5r
KCZqaXQpOworCisgICAgbV9jYWxsTGlua0luZm8tPnNldFVwQ2FsbChtX3R5cGUsIG1fb3JpZ2lu
LCBHUFJJbmZvOjpyZWdUMCk7CiB9CiAKIHZvaWQgSlNDYWxsQmFzZTo6bGluayhWTSYgdm0sIExp
bmtCdWZmZXImIGxpbmtCdWZmZXIpCkBAIC03Miw5ICs4NSw4IEBAIHZvaWQgSlNDYWxsQmFzZTo6
bGluayhWTSYgdm0sIExpbmtCdWZmZXImIGxpbmtCdWZmZXIpCiAgICAgbGlua0J1ZmZlci5saW5r
KAogICAgICAgICBtX3Nsb3dDYWxsLCBGdW5jdGlvblB0cih2bS5nZXRDVElTdHViKGxpbmtDYWxs
VGh1bmtHZW5lcmF0b3IpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpKSk7CiAKLSAgICBtX2Nh
bGxMaW5rSW5mby0+c2V0VXBDYWxsRnJvbUZUTChtX3R5cGUsIG1fb3JpZ2luLCBsaW5rQnVmZmVy
LmxvY2F0aW9uT2ZOZWFyQ2FsbChtX3Nsb3dDYWxsKSwKLSAgICAgICAgbGlua0J1ZmZlci5sb2Nh
dGlvbk9mKG1fdGFyZ2V0VG9DaGVjayksIGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJDYWxsKG1f
ZmFzdENhbGwpLAotICAgICAgICBHUFJJbmZvOjpyZWdUMCk7CisgICAgbV9jYWxsTGlua0luZm8t
PnNldENhbGxMb2NhdGlvbnMobGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwobV9zbG93Q2Fs
bCksCisgICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZihtX3RhcmdldFRvQ2hlY2spLCBsaW5r
QnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChtX2Zhc3RDYWxsKSk7CiB9CiAKIH0gfSAvLyBuYW1l
c3BhY2UgSlNDOjpGVEwKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
SlNDYWxsQmFzZS5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKU0NhbGxCYXNlLmgK
aW5kZXggNTk1YWM2OTQzNDFiNDEzYzYxOWVmMmYxOTAxOTBkN2M3YTBhMDk4Yi4uNjYwNzNlZmY3
ZTc2YjM5ZjUxNmRlYzkyOGYxZGY4YjUwMDg5NTcwNCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExKU0NhbGxCYXNlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExKU0NhbGxCYXNlLmgKQEAgLTUwLDcgKzUwLDcgQEAgcHVibGljOgogICAgIHZvaWQg
ZW1pdChDQ2FsbEhlbHBlcnMmKTsKICAgICB2b2lkIGxpbmsoVk0mLCBMaW5rQnVmZmVyJik7CiAg
ICAgCi1wcml2YXRlOgorcHJvdGVjdGVkOgogICAgIENhbGxMaW5rSW5mbzo6Q2FsbFR5cGUgbV90
eXBlOwogICAgIENvZGVPcmlnaW4gbV9vcmlnaW47CiAgICAgQ0NhbGxIZWxwZXJzOjpEYXRhTGFi
ZWxQdHIgbV90YXJnZXRUb0NoZWNrOwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExKU0NhbGxWYXJhcmdzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
SlNDYWxsVmFyYXJncy5jcHAKaW5kZXggYWM4N2EzYzYxMThiZDI0NGY0MjNkOGFkYjJhZjc1ZmZk
NzQ4ZDdhOC4uNmRjZTNhNTI2ZDRlMzQwZDNjZWVmYjgwMTU1MGEwYWQxMTAyNTMxYyAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKU0NhbGxWYXJhcmdzLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpTQ2FsbFZhcmFyZ3MuY3BwCkBAIC01MSwx
MiArNTEsMTUgQEAgSlNDYWxsVmFyYXJnczo6SlNDYWxsVmFyYXJncyh1bnNpZ25lZCBzdGFja21h
cElELCBOb2RlKiBub2RlKQogICAgICwgbV9ub2RlKG5vZGUpCiAgICAgLCBtX2NhbGxCYXNlKAog
ICAgICAgICAobm9kZS0+b3AoKSA9PSBDb25zdHJ1Y3RWYXJhcmdzIHx8IG5vZGUtPm9wKCkgPT0g
Q29uc3RydWN0Rm9yd2FyZFZhcmFyZ3MpCi0gICAgICAgID8gQ2FsbExpbmtJbmZvOjpDb25zdHJ1
Y3RWYXJhcmdzIDogQ2FsbExpbmtJbmZvOjpDYWxsVmFyYXJncywKKyAgICAgICAgPyBDYWxsTGlu
a0luZm86OkNvbnN0cnVjdFZhcmFyZ3MgOiAobm9kZS0+b3AoKSA9PSBUYWlsQ2FsbFZhcmFyZ3Mg
fHwgbm9kZS0+b3AoKSA9PSBUYWlsQ2FsbEZvcndhcmRWYXJhcmdzKQorICAgICAgICA/IENhbGxM
aW5rSW5mbzo6VGFpbENhbGxWYXJhcmdzIDogQ2FsbExpbmtJbmZvOjpDYWxsVmFyYXJncywKICAg
ICAgICAgbm9kZS0+b3JpZ2luLnNlbWFudGljKQogICAgICwgbV9pbnN0cnVjdGlvbk9mZnNldCgw
KQogewogICAgIEFTU0VSVCgKICAgICAgICAgbm9kZS0+b3AoKSA9PSBDYWxsVmFyYXJncyB8fCBu
b2RlLT5vcCgpID09IENhbGxGb3J3YXJkVmFyYXJncworICAgICAgICB8fCBub2RlLT5vcCgpID09
IFRhaWxDYWxsVmFyYXJnc0lubGluZWRDYWxsZXIgfHwgbm9kZS0+b3AoKSA9PSBUYWlsQ2FsbEZv
cndhcmRWYXJhcmdzSW5saW5lZENhbGxlcgorICAgICAgICB8fCBub2RlLT5vcCgpID09IFRhaWxD
YWxsVmFyYXJncyB8fCBub2RlLT5vcCgpID09IFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3MKICAgICAg
ICAgfHwgbm9kZS0+b3AoKSA9PSBDb25zdHJ1Y3RWYXJhcmdzIHx8IG5vZGUtPm9wKCkgPT0gQ29u
c3RydWN0Rm9yd2FyZFZhcmFyZ3MpOwogfQogCkBAIC04MywxMSArODYsMTUgQEAgdm9pZCBKU0Nh
bGxWYXJhcmdzOjplbWl0KENDYWxsSGVscGVycyYgaml0LCBpbnQzMl90IHNwaWxsU2xvdHNPZmZz
ZXQpCiAgICAgCiAgICAgc3dpdGNoIChtX25vZGUtPm9wKCkpIHsKICAgICBjYXNlIENhbGxWYXJh
cmdzOgorICAgIGNhc2UgVGFpbENhbGxWYXJhcmdzOgorICAgIGNhc2UgVGFpbENhbGxWYXJhcmdz
SW5saW5lZENhbGxlcjoKICAgICBjYXNlIENvbnN0cnVjdFZhcmFyZ3M6CiAgICAgICAgIGFyZ3Vt
ZW50c0dQUiA9IEdQUkluZm86OmFyZ3VtZW50R1BSMTsKICAgICAgICAgdGhpc0dQUiA9IEdQUklu
Zm86OmFyZ3VtZW50R1BSMjsKICAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBDYWxsRm9yd2FyZFZh
cmFyZ3M6CisgICAgY2FzZSBUYWlsQ2FsbEZvcndhcmRWYXJhcmdzOgorICAgIGNhc2UgVGFpbENh
bGxGb3J3YXJkVmFyYXJnc0lubGluZWRDYWxsZXI6CiAgICAgY2FzZSBDb25zdHJ1Y3RGb3J3YXJk
VmFyYXJnczoKICAgICAgICAgdGhpc0dQUiA9IEdQUkluZm86OmFyZ3VtZW50R1BSMTsKICAgICAg
ICAgZm9yd2FyZGluZyA9IHRydWU7CkBAIC0xOTYsNyArMjAzLDcgQEAgdm9pZCBKU0NhbGxWYXJh
cmdzOjplbWl0KENDYWxsSGVscGVycyYgaml0LCBpbnQzMl90IHNwaWxsU2xvdHNPZmZzZXQpCiAg
ICAgLy8gSGVuY2Vmb3J0aCB3ZSBtYWtlIHRoZSBjYWxsLiBUaGUgYmFzZSBGVEwgY2FsbCBtYWNo
aW5lcnkgZXhwZWN0cyB0aGUgY2FsbGVlIGluIHJlZ1QwIGFuZCBmb3IgdGhlCiAgICAgLy8gc3Rh
Y2sgZnJhbWUgdG8gYWxyZWFkeSBiZSBzZXQgdXAsIHdoaWNoIGl0IGlzLgogICAgIGppdC5zdG9y
ZTY0KEdQUkluZm86OnJlZ1QwLCBDQ2FsbEhlbHBlcnM6OmNhbGxlZUZyYW1lU2xvdChKU1N0YWNr
OjpDYWxsZWUpKTsKLSAgICAKKwogICAgIG1fY2FsbEJhc2UuZW1pdChqaXQpOwogICAgIAogICAg
IC8vIFVuZG8gdGhlIGRhbWFnZSB3ZSd2ZSBkb25lLgpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExKU1RhaWxDYWxsLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMSlNUYWlsQ2FsbC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTNmYTE0NTA0NjY0MmVkMTUwYmJjYmVh
YTdmOTVlOGIzMDgwMjQxYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMSlNUYWlsQ2FsbC5jcHAKQEAgLTAsMCArMSwzMjIgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiRlRMSlNUYWlsQ2FsbC5oIgorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisKKyNp
bmNsdWRlICJDYWxsRnJhbWVTaHVmZmxlci5oIgorI2luY2x1ZGUgIkRGR05vZGUuaCIKKyNpbmNs
dWRlICJGVExKSVRDb2RlLmgiCisjaW5jbHVkZSAiRlRMTG9jYXRpb24uaCIKKyNpbmNsdWRlICJG
VExTdGFja01hcHMuaCIKKyNpbmNsdWRlICJKU0NKU1ZhbHVlSW5saW5lcy5oIgorI2luY2x1ZGUg
IkxpbmtCdWZmZXIuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgeworCit1c2lu
ZyBuYW1lc3BhY2UgREZHOworCitzdGF0aWMgRlRMOjpMb2NhdGlvbiBnZXRSZWdpc3RlcldpdGhB
ZGRlbmQoY29uc3QgRXhpdFZhbHVlJiB2YWx1ZSwgU3RhY2tNYXBzOjpSZWNvcmQmIHJlY29yZCwg
U3RhY2tNYXBzJiBzdGFja21hcHMpCit7CisgICAgaWYgKHZhbHVlLmtpbmQoKSAhPSBFeGl0VmFs
dWVBcmd1bWVudCkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIGF1dG8gbG9jYXRpb24gPQor
ICAgICAgICBGVEw6OkxvY2F0aW9uOjpmb3JTdGFja21hcHMoJnN0YWNrbWFwcywgcmVjb3JkLmxv
Y2F0aW9uc1t2YWx1ZS5leGl0QXJndW1lbnQoKS5hcmd1bWVudCgpXSk7CisKKyAgICBpZiAobG9j
YXRpb24ua2luZCgpICE9IExvY2F0aW9uOjpSZWdpc3RlciB8fCAhbG9jYXRpb24uYWRkZW5kKCkp
CisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBSRUxFQVNFX0FTU0VSVChsb2NhdGlvbi5pc0dQ
UigpKTsKKyAgICByZXR1cm4gbG9jYXRpb247Cit9CisKK3N0YXRpYyBWYWx1ZVJlY292ZXJ5IHJl
Y292ZXJ5Rm9yKGNvbnN0IEV4aXRWYWx1ZSYgdmFsdWUsIFN0YWNrTWFwczo6UmVjb3JkJiByZWNv
cmQsIFN0YWNrTWFwcyYgc3RhY2ttYXBzKQoreworICAgIHN3aXRjaCAodmFsdWUua2luZCgpKSB7
CisgICAgY2FzZSBFeGl0VmFsdWVDb25zdGFudDoKKyAgICAgICAgcmV0dXJuIFZhbHVlUmVjb3Zl
cnk6OmNvbnN0YW50KHZhbHVlLmNvbnN0YW50KCkpOworCisgICAgY2FzZSBFeGl0VmFsdWVBcmd1
bWVudDogeworICAgICAgICBhdXRvIGxvY2F0aW9uID0KKyAgICAgICAgICAgIEZUTDo6TG9jYXRp
b246OmZvclN0YWNrbWFwcygmc3RhY2ttYXBzLCByZWNvcmQubG9jYXRpb25zW3ZhbHVlLmV4aXRB
cmd1bWVudCgpLmFyZ3VtZW50KCldKTsKKyAgICAgICAgYXV0byBmb3JtYXQgPSB2YWx1ZS5leGl0
QXJndW1lbnQoKS5mb3JtYXQoKTsKKworICAgICAgICBzd2l0Y2ggKGxvY2F0aW9uLmtpbmQoKSkg
eworICAgICAgICBjYXNlIExvY2F0aW9uOjpSZWdpc3RlcjoKKyAgICAgICAgICAgIC8vIFdlIGhh
bmRsZSB0aGUgYWRkZW5kIG91dHNpZGUKKyAgICAgICAgICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5
OjppblJlZ2lzdGVyKGxvY2F0aW9uLmR3YXJmUmVnKCkucmVnKCksIGZvcm1hdCk7CisKKyAgICAg
ICAgY2FzZSBMb2NhdGlvbjo6SW5kaXJlY3Q6CisgICAgICAgICAgICAvLyBPaCBMTFZNLCB5b3Ug
Y3JhenkuLi4KKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGxvY2F0aW9uLmR3YXJmUmVnKCku
cmVnKCkgPT0gUmVnKE1hY3JvQXNzZW1ibGVyOjpmcmFtZVBvaW50ZXJSZWdpc3RlcikpOworICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQoIShsb2NhdGlvbi5vZmZzZXQoKSAlIHNpemVvZih2b2lk
KikpKTsKKyAgICAgICAgICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5OjpkaXNwbGFjZWRJbkpTU3Rh
Y2soVmlydHVhbFJlZ2lzdGVyIHsgc3RhdGljX2Nhc3Q8aW50Pihsb2NhdGlvbi5vZmZzZXQoKSAv
IHNpemVvZih2b2lkKikpIH0sIGZvcm1hdCk7CisKKyAgICAgICAgY2FzZSBMb2NhdGlvbjo6Q29u
c3RhbnQ6CisgICAgICAgICAgICByZXR1cm4gVmFsdWVSZWNvdmVyeTo6Y29uc3RhbnQoSlNWYWx1
ZTo6ZGVjb2RlKGxvY2F0aW9uLmNvbnN0YW50KCkpKTsKKworICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgfQorICAgIH0K
KworICAgIGNhc2UgRXhpdFZhbHVlSW5KU1N0YWNrOgorICAgICAgICByZXR1cm4gVmFsdWVSZWNv
dmVyeTo6ZGlzcGxhY2VkSW5KU1N0YWNrKHZhbHVlLnZpcnR1YWxSZWdpc3RlcigpLCBEYXRhRm9y
bWF0SlMpOworCisgICAgY2FzZSBFeGl0VmFsdWVJbkpTU3RhY2tBc0ludDMyOgorICAgICAgICBy
ZXR1cm4gVmFsdWVSZWNvdmVyeTo6ZGlzcGxhY2VkSW5KU1N0YWNrKHZhbHVlLnZpcnR1YWxSZWdp
c3RlcigpLCBEYXRhRm9ybWF0SW50MzIpOworCisgICAgY2FzZSBFeGl0VmFsdWVJbkpTU3RhY2tB
c0ludDUyOgorICAgICAgICByZXR1cm4gVmFsdWVSZWNvdmVyeTo6ZGlzcGxhY2VkSW5KU1N0YWNr
KHZhbHVlLnZpcnR1YWxSZWdpc3RlcigpLCBEYXRhRm9ybWF0SW50NTIpOworCisgICAgY2FzZSBF
eGl0VmFsdWVJbkpTU3RhY2tBc0RvdWJsZToKKyAgICAgICAgcmV0dXJuIFZhbHVlUmVjb3Zlcnk6
OmRpc3BsYWNlZEluSlNTdGFjayh2YWx1ZS52aXJ0dWFsUmVnaXN0ZXIoKSwgRGF0YUZvcm1hdERv
dWJsZSk7CisKKyAgICBkZWZhdWx0OgorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgIH0KK30KKworLy8gVGhpcyBjb21wdXRlcyBhbiBlc3RpbWF0ZWQgc2l6ZSAoaW4g
Yml0cykgZm9yIHRoZSBzZXF1ZW5jZSBvZgorLy8gaW5zdHJ1Y3Rpb25zIHJlcXVpcmVkIHRvIGxv
YWQsIGJveCwgYW5kIHN0b3JlIGEgdmFsdWUgb2YgYSBnaXZlbgorLy8gdHlwZSwgYXNzdW1pbmcg
bm8gc3BpbGxpbmcgaXMgcmVxdWlyZWQuCitzdGF0aWMgdWludDMyX3Qgc2l6ZUZvcihEYXRhRm9y
bWF0IGZvcm1hdCkKK3sKKyAgICBzd2l0Y2ggKGZvcm1hdCkgeworICAgIGNhc2UgRGF0YUZvcm1h
dEludDMyOgorICAgICAgICAvLyBCb3hpbmcgaXMgemVyby1leHRlbmRpbmcgYW5kIHRhZ2dpbmcK
KyNpZiBDUFUoWDg2XzY0KQorICAgICAgICByZXR1cm4gNiArIHNpemVGb3IoRGF0YUZvcm1hdEpT
KTsKKyNlbGlmIENQVShBUk02NCkKKyAgICAgICAgcmV0dXJuIDggKyBzaXplRm9yKERhdGFGb3Jt
YXRKUyk7CisjZWxzZQorICAgICAgICByZXR1cm4gc2l6ZU9mWmVyb0V4dGVuZDMyICsgc2l6ZU9m
T3JJbW02NCArIHNpemVGb3IoRGF0YUZvcm1hdEpTKTsKKyNlbmRpZgorCisgICAgY2FzZSBEYXRh
Rm9ybWF0SW50NTI6CisgICAgICAgIC8vIEJveGluZyBpcyBmaXJzdCBhIGNvbnZlcnNpb24gdG8g
U3RyaWN0SW50NTIsIHRoZW4KKyAgICAgICAgLy8gU3RyaWN0SW50NTIgYm94aW5nCisjaWYgQ1BV
KFg4Nl82NCkKKyAgICAgICAgcmV0dXJuIDQgKyBzaXplRm9yKERhdGFGb3JtYXRTdHJpY3RJbnQ1
Mik7CisjZWxpZiBDUFUoQVJNNjQpCisgICAgICAgIHJldHVybiA0ICsgc2l6ZUZvcihEYXRhRm9y
bWF0U3RyaWN0SW50NTIpOworI2Vsc2UKKyAgICAgICAgcmV0dXJuIHNpemVPZlNoaWZ0SW1tMzIg
KyBzaXplRm9yKERhdGFGb3JtYXRTdHJpY3RJbnQ1Mik7CisjZW5kaWYKKworICAgIGNhc2UgRGF0
YUZvcm1hdFN0cmljdEludDUyOgorICAgICAgICAvLyBCb3hpbmcgaXMgZmlyc3QgYSBjb252ZXJz
aW9uIHRvIGRvdWJsZSwgdGhlbiBkb3VibGUgYm94aW5nCisjaWYgQ1BVKFg4Nl82NCkKKyAgICAg
ICAgcmV0dXJuIDggKyBzaXplRm9yKERhdGFGb3JtYXREb3VibGUpOworI2VsaWYgQ1BVKEFSTTY0
KQorICAgICAgICByZXR1cm4gNCArIHNpemVGb3IoRGF0YUZvcm1hdERvdWJsZSk7CisjZWxzZQor
ICAgICAgICByZXR1cm4gc2l6ZU9mQ29udmVydEludDY0VG9Eb3VibGUgKyBzaXplRm9yKERhdGFG
b3JtYXREb3VibGUpOworI2VuZGlmCisKKyAgICBjYXNlIERhdGFGb3JtYXREb3VibGU6CisgICAg
ICAgIC8vIEJveGluZyBpcyBwdXJpZnlpbmcsIG1vdmluZyB0byBhIEdQUiwgYW5kIHRhZ2dpbmcK
KyNpZiBDUFUoWDg2XzY0KQorICAgICAgICByZXR1cm4gMzggKyBzaXplRm9yKERhdGFGb3JtYXRK
Uyk7CisjZWxpZiBDUFUoQVJNNjQpCisgICAgICAgIHJldHVybiAyOCArIHNpemVGb3IoRGF0YUZv
cm1hdEpTKTsKKyNlbHNlCisgICAgICAgIHJldHVybiBzaXplT2ZQdXJpZnlOYU4gKyBzaXplT2ZT
dWJJbW02NCArIHNpemVPZk1vdmVEb3VibGVUbzY0ICsgc2l6ZUZvcihEYXRhRm9ybWF0SlMpOwor
I2VuZGlmCisKKyAgICBjYXNlIERhdGFGb3JtYXRCb29sZWFuOgorICAgICAgICAvLyBCb3hpbmcg
aXMgYWRkaW5nIFZhbHVlRmFsc2UKKyNpZiBDUFUoWDg2XzY0KQorICAgICAgICByZXR1cm4gNCAr
IHNpemVGb3IoRGF0YUZvcm1hdEpTKTsKKyNlbGlmIENQVShBUk02NCkKKyAgICAgICAgcmV0dXJu
IDQgKyBzaXplRm9yKERhdGFGb3JtYXRKUyk7CisjZWxzZQorICAgICAgICByZXR1cm4gc2l6ZU9m
QWRkSW1tMzIgKyBzaXplRm9yKERhdGFGb3JtYXRKUyk7CisjZW5kaWYKKworICAgIGNhc2UgRGF0
YUZvcm1hdEpTOgorICAgICAgICAvLyBXZSB3aWxsIGxvYWQgKGluIGEgR1BSIG9yIEZQUikgdGhl
biBzdG9yZSB0aGUgdmFsdWUKKyNpZiBDUFUoWDg2XzY0KQorICAgICAgICByZXR1cm4gODsKKyNl
bGlmIENQVShBUk02NCkKKyAgICAgICAgcmV0dXJuIDg7CisjZWxzZQorICAgICAgICByZXR1cm4g
c2l6ZU9mTG9hZCArIHNpemVPZlN0b3JlOworI2VuZGlmCisKKyAgICBkZWZhdWx0OgorICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KK30KKworSlNUYWlsQ2FsbDo6
SlNUYWlsQ2FsbCh1bnNpZ25lZCBzdGFja21hcElELCBOb2RlKiBub2RlLCBWZWN0b3I8RXhpdFZh
bHVlPiBhcmd1bWVudHMpCisgICAgOiBKU0NhbGxCYXNlKENhbGxMaW5rSW5mbzo6VGFpbENhbGws
IG5vZGUtPm9yaWdpbi5zZW1hbnRpYykKKyAgICAsIG1fc3RhY2ttYXBJRChzdGFja21hcElEKQor
ICAgICwgbV9hcmd1bWVudHMgeyBXVEY6Om1vdmUoYXJndW1lbnRzKSB9CisgICAgLCBtX2luc3Ry
dWN0aW9uT2Zmc2V0KDApCit7CisgICAgQVNTRVJUKG5vZGUtPm9wKCkgPT0gVGFpbENhbGwpOwor
ICAgIEFTU0VSVChudW1Bcmd1bWVudHMoKSA9PSBub2RlLT5udW1DaGlsZHJlbigpIC0gMSk7CisK
KyAgICAvLyBFc3RpbWF0ZSB0aGUgc2l6ZSBvZiB0aGUgaW5saW5lIGNhY2hlLCBhc3N1bWluZyB0
aGF0IGV2ZXJ5CisgICAgLy8gdmFsdWUgZ29lcyBmcm9tIHRoZSBzdGFjayB0byB0aGUgc3RhY2sg
KGluIHByYWN0aWNlLCB0aGlzIHdpbGwKKyAgICAvLyBzZWxkb20gYmUgdHJ1ZSwgZ2l2aW5nIHVz
IHNvbWUgYW1vdW50IG9mIGxlZXdheSkgYW5kIHRoYXQgbm8KKyAgICAvLyBzcGlsbGluZyB3aWxs
IG9jY3VyIChpbiBwcmFjdGljZSwgdGhpcyB3aWxsIGFsbW9zdCBhbHdheXMgYmUKKyAgICAvLyB0
cnVlKS4KKworICAgIC8vIFdlIGZpcnN0IGNvbXB1dGUgdGhlIG5ldyBmcmFtZSBiYXNlIGFuZCBs
b2FkIHRoZSBmcC9scgorICAgIC8vIHJlZ2lzdGVycyBmaW5hbCB2YWx1ZXMuIE9uIGRlYnVnIGJ1
aWxkcywgd2UgYWxzbyBuZWVkIHRvCisgICAgLy8gYWNjb3VudCBmb3IgdGhlIGZwLXNwIGRlbHRh
IGNoZWNrICh0d2ljZTogZmFzdCBhbmQgc2xvdyBwYXRoKS4KKyNpZiBDUFUoWDg2XzY0KQorICAg
IG1fZXN0aW1hdGVkU2l6ZSA9IDU2OworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICBtX2VzdGlt
YXRlZFNpemUgKz0gMjY7CisjICBlbmRpZgorI2VsaWYgQ1BVKEFSTTY0KQorICAgIG1fZXN0aW1h
dGVkU2l6ZSA9IDQ0OworI2lmICFBU1NFUlRfRElTQUJMRUQKKyAgICBtX2VzdGltYXRlZFNpemUg
Kz0gMjQ7CisjICBlbmRpZgorI2Vsc2UKKyAgICBVTlJFQUNIQUJMRV9GT1JfUExBVEZPUk0oKTsK
KyNlbmRpZgorCisgICAgLy8gQXJndW1lbnRzIHdpbGwgcHJvYmFibHkgYmUgbG9hZGVkICYgc3Rv
cmVkIHR3aWNlIChmYXN0ICYgc2xvdykKKyAgICBmb3IgKEV4aXRWYWx1ZSYgYXJnIDogbV9hcmd1
bWVudHMpCisgICAgICAgIG1fZXN0aW1hdGVkU2l6ZSArPSAyICogc2l6ZUZvcihhcmcuZGF0YUZv
cm1hdCgpKTsKKworICAgIC8vIFdlIGFsc28gaGF2ZSB0aGUgc2xvdyBwYXRoIGNoZWNrLCB0aGUg
dHdvIGNhbGxzLCBhbmQgdGhlCisgICAgLy8gQ2FsbExpbmtJbmZvIGxvYWQgZm9yIHRoZSBzbG93
IHBhdGgKKyNpZiBDUFUoWDg2XzY0KQorICAgIG1fZXN0aW1hdGVkU2l6ZSArPSA1NTsKKyNlbGlm
IENQVShBUk02NCkKKyAgICBtX2VzdGltYXRlZFNpemUgKz0gNDQ7CisjZWxzZQorICAgIG1fZXN0
aW1hdGVkU2l6ZSArPSBzaXplT2ZDYWxsICsgc2l6ZU9mSnVtcCArIHNpemVPZkxvYWQgKyBzaXpl
T2ZTbG93UGF0aENoZWNrOworI2VuZGlmCit9CisKK3ZvaWQgSlNUYWlsQ2FsbDo6ZW1pdChKSVRD
b2RlJiBqaXRDb2RlLCBDQ2FsbEhlbHBlcnMmIGppdCkKK3sKKyAgICBTdGFja01hcHM6OlJlY29y
ZCogcmVjb3JkIHsgbnVsbHB0ciB9OworICAgIAorICAgIGZvciAodW5zaWduZWQgaSA9IGppdENv
ZGUuc3RhY2ttYXBzLnJlY29yZHMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgIHJlY29yZCA9ICZq
aXRDb2RlLnN0YWNrbWFwcy5yZWNvcmRzW2ldOworICAgICAgICBpZiAocmVjb3JkLT5wYXRjaHBv
aW50SUQgPT0gbV9zdGFja21hcElEKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAg
UkVMRUFTRV9BU1NFUlQocmVjb3JkLT5wYXRjaHBvaW50SUQgPT0gbV9zdGFja21hcElEKTsKKwor
ICAgIG1fY2FsbExpbmtJbmZvID0gaml0LmNvZGVCbG9jaygpLT5hZGRDYWxsTGlua0luZm8oKTsK
KworICAgIENhbGxGcmFtZVNodWZmbGVEYXRhIHNodWZmbGVEYXRhOworCisgICAgLy8gVGhlIGNh
bGxlZSB3YXMgdGhlIGZpcnN0IHBhc3NlZCBhcmd1bWVudCwgYW5kIG11c3QgYmUgaW4gYSBHUFIg
YmVjYXVzZQorICAgIC8vIHdlIHVzZWQgdGhlICJhbnlyZWdjYyIgY2FsbGluZyBjb252ZW50aW9u
CisgICAgYXV0byBjYWxsZWVMb2NhdGlvbiA9CisgICAgICAgIEZUTDo6TG9jYXRpb246OmZvclN0
YWNrbWFwcyhudWxscHRyLCByZWNvcmQtPmxvY2F0aW9uc1swXSk7CisgICAgR1BSUmVnIGNhbGxl
ZUdQUiA9IGNhbGxlZUxvY2F0aW9uLmRpcmVjdEdQUigpOworICAgIHNodWZmbGVEYXRhLmNhbGxl
ZSA9IFZhbHVlUmVjb3Zlcnk6OmluR1BSKGNhbGxlZUdQUiwgRGF0YUZvcm1hdEpTKTsKKworICAg
IC8vIFRoZSB0YWcgdHlwZSBudW1iZXIgd2FzIHRoZSBzZWNvbmQgYXJndW1lbnQsIGlmIHRoZXJl
IHdhcyBvbmUKKyAgICBhdXRvIHRhZ1R5cGVOdW1iZXJMb2NhdGlvbiA9CisgICAgICAgIEZUTDo6
TG9jYXRpb246OmZvclN0YWNrbWFwcygmaml0Q29kZS5zdGFja21hcHMsIHJlY29yZC0+bG9jYXRp
b25zWzFdKTsKKyAgICBpZiAodGFnVHlwZU51bWJlckxvY2F0aW9uLmlzR1BSKCkgJiYgIXRhZ1R5
cGVOdW1iZXJMb2NhdGlvbi5hZGRlbmQoKSkKKyAgICAgICAgc2h1ZmZsZURhdGEudGFnVHlwZU51
bWJlciA9IHRhZ1R5cGVOdW1iZXJMb2NhdGlvbi5kaXJlY3RHUFIoKTsKKworICAgIHNodWZmbGVE
YXRhLmFyZ3MuZ3JvdyhudW1Bcmd1bWVudHMoKSk7CisgICAgSGFzaE1hcDxSZWcsIFZlY3Rvcjxz
dGQ6OnBhaXI8VmFsdWVSZWNvdmVyeSosIGludDMyX3Q+Pj4gd2l0aEFkZGVuZDsKKyAgICBzaXpl
X3QgbnVtQWRkZW5kcyB7IDAgfTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bUFyZ3Vt
ZW50cygpOyArK2kpIHsKKyAgICAgICAgc2h1ZmZsZURhdGEuYXJnc1tpXSA9IHJlY292ZXJ5Rm9y
KG1fYXJndW1lbnRzW2ldLCAqcmVjb3JkLCBqaXRDb2RlLnN0YWNrbWFwcyk7CisgICAgICAgIGlm
IChGVEw6OkxvY2F0aW9uIGFkZGVuZCA9IGdldFJlZ2lzdGVyV2l0aEFkZGVuZChtX2FyZ3VtZW50
c1tpXSwgKnJlY29yZCwgaml0Q29kZS5zdGFja21hcHMpKSB7CisgICAgICAgICAgICB3aXRoQWRk
ZW5kLmFkZCgKKyAgICAgICAgICAgICAgICBhZGRlbmQuZHdhcmZSZWcoKS5yZWcoKSwKKyAgICAg
ICAgICAgICAgICBWZWN0b3I8c3RkOjpwYWlyPFZhbHVlUmVjb3ZlcnkqLCBpbnQzMl90Pj4oKSku
aXRlcmF0b3ItPnZhbHVlLmFwcGVuZCgKKyAgICAgICAgICAgICAgICAgICAgc3RkOjptYWtlX3Bh
aXIoJnNodWZmbGVEYXRhLmFyZ3NbaV0sIGFkZGVuZC5hZGRlbmQoKSkpOworICAgICAgICAgICAg
bnVtQWRkZW5kcysrOworICAgICAgICB9CisgICAgfQorCisgICAgbnVtQWRkZW5kcyA9IFdURjo6
cm91bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudFJlZ2lzdGVycygpLCBudW1BZGRlbmRz
KTsKKworICAgIHNodWZmbGVEYXRhLm51bUxvY2FscyA9IHN0YXRpY19jYXN0PGludDY0X3Q+KGpp
dENvZGUuc3RhY2ttYXBzLnN0YWNrU2l6ZUZvckxvY2FscygpKSAvIHNpemVvZih2b2lkKikgKyBu
dW1BZGRlbmRzOworCisgICAgQVNTRVJUKCFudW1BZGRlbmRzID09IHdpdGhBZGRlbmQuaXNFbXB0
eSgpKTsKKworICAgIGlmICghd2l0aEFkZGVuZC5pc0VtcHR5KCkpIHsKKyAgICAgICAgaml0LnN1
YlB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKG51bUFkZGVuZHMgKiBzaXplb2Yodm9p
ZCopKSwgTWFjcm9Bc3NlbWJsZXI6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKyAgICAgICAgVmly
dHVhbFJlZ2lzdGVyIHNwaWxsQmFzZSB7IDEgLSBzdGF0aWNfY2FzdDxpbnQ+KHNodWZmbGVEYXRh
Lm51bUxvY2FscykgfTsKKyAgICAgICAgZm9yIChhdXRvIGVudHJ5IDogd2l0aEFkZGVuZCkgewor
ICAgICAgICAgICAgZm9yIChhdXRvIHBhaXIgOiBlbnRyeS52YWx1ZSkgeworICAgICAgICAgICAg
ICAgIEFTU0VSVChudW1BZGRlbmRzID4gMCk7CisgICAgICAgICAgICAgICAgVmlydHVhbFJlZ2lz
dGVyIHNwaWxsU2xvdCB7IHNwaWxsQmFzZSArIC0tbnVtQWRkZW5kcyB9OworICAgICAgICAgICAg
ICAgIEFTU0VSVChlbnRyeS5rZXkuaXNHUFIoKSk7CisgICAgICAgICAgICAgICAgaml0LmFkZFB0
cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHBhaXIuc2Vjb25kKSwgZW50cnkua2V5Lmdw
cigpKTsKKyAgICAgICAgICAgICAgICBqaXQuc3RvcmVQdHIoZW50cnkua2V5LmdwcigpLCBDQ2Fs
bEhlbHBlcnM6OmFkZHJlc3NGb3Ioc3BpbGxTbG90KSk7CisgICAgICAgICAgICAgICAgaml0LnN1
YlB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTMyKHBhaXIuc2Vjb25kKSwgZW50cnkua2V5
LmdwcigpKTsKKyAgICAgICAgICAgICAgICAqcGFpci5maXJzdCA9IFZhbHVlUmVjb3Zlcnk6OmRp
c3BsYWNlZEluSlNTdGFjayhzcGlsbFNsb3QsIHBhaXIuZmlyc3QtPmRhdGFGb3JtYXQoKSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgQVNTRVJUKG51bUFkZGVuZHMgPCBzdGFj
a0FsaWdubWVudFJlZ2lzdGVycygpKTsKKyAgICB9CisKKyAgICBzaHVmZmxlRGF0YS5hcmdzLnJl
c2l6ZShudW1Bcmd1bWVudHMoKSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBudW1Bcmd1
bWVudHMoKTsgKytpKQorICAgICAgICBzaHVmZmxlRGF0YS5hcmdzW2ldID0gcmVjb3ZlcnlGb3Io
bV9hcmd1bWVudHNbaV0sICpyZWNvcmQsIGppdENvZGUuc3RhY2ttYXBzKTsKKworICAgIHNodWZm
bGVEYXRhLnNldHVwQ2FsbGVlU2F2ZVJlZ2lzdGVycyhqaXQuY29kZUJsb2NrKCkpOworCisgICAg
Q0NhbGxIZWxwZXJzOjpKdW1wIHNsb3dQYXRoID0gaml0LmJyYW5jaFB0cldpdGhQYXRjaCgKKyAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgY2FsbGVlR1BSLCBtX3RhcmdldFRvQ2hlY2ss
CisgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cigwKSk7CisKKyAgICBtX2NhbGxM
aW5rSW5mby0+c2V0RnJhbWVTaHVmZmxlRGF0YShzaHVmZmxlRGF0YSk7CisgICAgQ2FsbEZyYW1l
U2h1ZmZsZXIoaml0LCBzaHVmZmxlRGF0YSkucHJlcGFyZUZvclRhaWxDYWxsKCk7CisKKyAgICBt
X2Zhc3RDYWxsID0gaml0Lm5lYXJUYWlsQ2FsbCgpOworCisgICAgc2xvd1BhdGgubGluaygmaml0
KTsKKworICAgIENhbGxGcmFtZVNodWZmbGVyIHNsb3dQYXRoU2h1ZmZsZXIoaml0LCBzaHVmZmxl
RGF0YSk7CisgICAgc2xvd1BhdGhTaHVmZmxlci5zZXRDYWxsZWVKU1ZhbHVlUmVncyhKU1ZhbHVl
UmVncyB7IEdQUkluZm86OnJlZ1QwIH0pOworICAgIHNsb3dQYXRoU2h1ZmZsZXIucHJlcGFyZUZv
clNsb3dQYXRoKCk7CisKKyAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIo
bV9jYWxsTGlua0luZm8pLCBHUFJJbmZvOjpyZWdUMik7CisKKyAgICBtX3Nsb3dDYWxsID0gaml0
Lm5lYXJDYWxsKCk7CisKKyAgICBqaXQuYWJvcnRXaXRoUmVhc29uKEpJVERpZFJldHVybkZyb21U
YWlsQ2FsbCk7CisKKyAgICBtX2NhbGxMaW5rSW5mby0+c2V0VXBDYWxsKG1fdHlwZSwgbV9vcmln
aW4sIGNhbGxlZUdQUik7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKKworI2VuZGlm
IC8vIEVOQUJMRShGVExfSklUKQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExKU1RhaWxDYWxsLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpTVGFpbENh
bGwuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi41MGI0ZjBjZjdiMzRkMmYxMWEyZTk1Y2ZhZWExM2IyMzdlYmVmOGQz
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKU1RhaWxD
YWxsLmgKQEAgLTAsMCArMSw3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgRlRMSlNUYWlsQ2FsbF9oCisjZGVmaW5lIEZUTEpT
VGFpbENhbGxfaAorCisjaWYgRU5BQkxFKEZUTF9KSVQpCisKKyNpbmNsdWRlICJGVExFeGl0QXJn
dW1lbnRMaXN0LmgiCisjaW5jbHVkZSAiRlRMRXhpdFZhbHVlLmgiCisjaW5jbHVkZSAiRlRMSlND
YWxsQmFzZS5oIgorCituYW1lc3BhY2UgSlNDIHsKKworbmFtZXNwYWNlIERGRyB7CitzdHJ1Y3Qg
Tm9kZTsKK30KKworbmFtZXNwYWNlIEZUTCB7CisKK2NsYXNzIEpTVGFpbENhbGwgOiBwdWJsaWMg
SlNDYWxsQmFzZSB7CitwdWJsaWM6CisgICAgSlNUYWlsQ2FsbCh1bnNpZ25lZCBzdGFja21hcElE
LCBERkc6Ok5vZGUqLCBWZWN0b3I8RXhpdFZhbHVlPiBhcmd1bWVudHMpOworCisgICAgdm9pZCBl
bWl0KEpJVENvZGUmLCBDQ2FsbEhlbHBlcnMmKTsKKyAgICAKKyAgICB1bnNpZ25lZCBzdGFja21h
cElEKCkgY29uc3QgeyByZXR1cm4gbV9zdGFja21hcElEOyB9CisKKyAgICB1bnNpZ25lZCBlc3Rp
bWF0ZWRTaXplKCkgY29uc3QgeyByZXR1cm4gbV9lc3RpbWF0ZWRTaXplOyB9CisKKyAgICB1bnNp
Z25lZCBudW1Bcmd1bWVudHMoKSBjb25zdCB7IHJldHVybiBtX2FyZ3VtZW50cy5zaXplKCk7IH0K
KworICAgIGJvb2wgb3BlcmF0b3I8KGNvbnN0IEpTVGFpbENhbGwmIG90aGVyKSBjb25zdAorICAg
IHsKKyAgICAgICAgcmV0dXJuIG1faW5zdHJ1Y3Rpb25PZmZzZXQgPCBvdGhlci5tX2luc3RydWN0
aW9uT2Zmc2V0OworICAgIH0KKyAgICAKK3ByaXZhdGU6CisgICAgdW5zaWduZWQgbV9zdGFja21h
cElEOworICAgIFZlY3RvcjxFeGl0VmFsdWU+IG1fYXJndW1lbnRzOworICAgIHVuc2lnbmVkIG1f
ZXN0aW1hdGVkU2l6ZTsKKworcHVibGljOgorICAgIHVpbnQzMl90IG1faW5zdHJ1Y3Rpb25PZmZz
ZXQ7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCisKKyNlbmRpZiAvLyBFTkFCTEUo
RlRMX0pJVCkKKworI2VuZGlmIC8vIEZUTEpTVGFpbENhbGxfaAorCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvY2F0aW9uLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTExvY2F0aW9uLmgKaW5kZXggNzI3MThiYmQ4NzI4MjU2MGVmMzAzNjUxNmUyMDJj
ZjQzN2NjZjQyNC4uMWRlYzk3NGYxNGQ3NjlhYjIwNzMwMmYxNDI3ZGVjODlhN2E0OTA3MCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb2NhdGlvbi5oCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG9jYXRpb24uaApAQCAtMTIwLDcgKzEyMCw5IEBA
IHB1YmxpYzoKICAgICAgICAgcmV0dXJuIHUuY29uc3RhbnQ7CiAgICAgfQogICAgIAotICAgIGJv
b2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4ga2luZCgpID09IFVucHJvY2Vzc2VkICYmICF1
LnZhcmlhYmxlLm9mZnNldDsgfQorICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7
IHJldHVybiBraW5kKCkgIT0gVW5wcm9jZXNzZWQgfHwgdS52YXJpYWJsZS5vZmZzZXQ7IH0KKwor
ICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIXN0YXRpY19jYXN0PGJvb2w+KCp0
aGlzKTsgfQogICAgIAogICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdCB7
IHJldHVybiBraW5kKCkgPT0gVW5wcm9jZXNzZWQgJiYgdS52YXJpYWJsZS5vZmZzZXQ7IH0KICAg
ICAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xM
Vk0uY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAK
aW5kZXggNTY4YmRmNGJkMzNjNGU2NmIxY2VkODI2ZWMzYjgyMTUyYjA4MmZhNC4uYzg1MTlhMDg3
YTU5ZGYzN2ZlMzY1OGM1MjU5MmIwOGIxNjFiMDA3YiAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAKQEAgLTE3Myw3ICsxNzMsMTEgQEAgcHVi
bGljOgogICAgICAgICAgICAgZm9yIChOb2RlKiBub2RlIDogKmJsb2NrKSB7CiAgICAgICAgICAg
ICAgICAgc3dpdGNoIChub2RlLT5vcCgpKSB7CiAgICAgICAgICAgICAgICAgY2FzZSBDYWxsVmFy
YXJnczoKKyAgICAgICAgICAgICAgICBjYXNlIFRhaWxDYWxsVmFyYXJnczoKKyAgICAgICAgICAg
ICAgICBjYXNlIFRhaWxDYWxsVmFyYXJnc0lubGluZWRDYWxsZXI6CiAgICAgICAgICAgICAgICAg
Y2FzZSBDYWxsRm9yd2FyZFZhcmFyZ3M6CisgICAgICAgICAgICAgICAgY2FzZSBUYWlsQ2FsbEZv
cndhcmRWYXJhcmdzOgorICAgICAgICAgICAgICAgIGNhc2UgVGFpbENhbGxGb3J3YXJkVmFyYXJn
c0lubGluZWRDYWxsZXI6CiAgICAgICAgICAgICAgICAgY2FzZSBDb25zdHJ1Y3RWYXJhcmdzOgog
ICAgICAgICAgICAgICAgIGNhc2UgQ29uc3RydWN0Rm9yd2FyZFZhcmFyZ3M6CiAgICAgICAgICAg
ICAgICAgICAgIGhhc1ZhcmFyZ3MgPSB0cnVlOwpAQCAtNzIzLDExICs3MjcsMTkgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgIGNvbXBpbGVMb2dpY2FsTm90KCk7CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgY2FzZSBDYWxsOgorICAgICAgICBjYXNlIFRhaWxDYWxsSW5saW5lZENhbGxlcjoK
ICAgICAgICAgY2FzZSBDb25zdHJ1Y3Q6CiAgICAgICAgICAgICBjb21waWxlQ2FsbE9yQ29uc3Ry
dWN0KCk7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSBUYWlsQ2FsbDoKKyAgICAg
ICAgICAgIGNvbXBpbGVUYWlsQ2FsbCgpOworICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNh
c2UgQ2FsbFZhcmFyZ3M6CiAgICAgICAgIGNhc2UgQ2FsbEZvcndhcmRWYXJhcmdzOgorICAgICAg
ICBjYXNlIFRhaWxDYWxsVmFyYXJnczoKKyAgICAgICAgY2FzZSBUYWlsQ2FsbFZhcmFyZ3NJbmxp
bmVkQ2FsbGVyOgorICAgICAgICBjYXNlIFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3M6CisgICAgICAg
IGNhc2UgVGFpbENhbGxGb3J3YXJkVmFyYXJnc0lubGluZWRDYWxsZXI6CiAgICAgICAgIGNhc2Ug
Q29uc3RydWN0VmFyYXJnczoKICAgICAgICAgY2FzZSBDb25zdHJ1Y3RGb3J3YXJkVmFyYXJnczoK
ICAgICAgICAgICAgIGNvbXBpbGVDYWxsT3JDb25zdHJ1Y3RWYXJhcmdzKCk7CkBAIC00MzYyLDYg
KzQzNzQsNDEgQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIHNldEpTVmFsdWUoY2FsbCk7
CiAgICAgfQorCisgICAgdm9pZCBjb21waWxlVGFpbENhbGwoKQorICAgIHsKKyAgICAgICAgaW50
IG51bUFyZ3MgPSBtX25vZGUtPm51bUNoaWxkcmVuKCkgLSAxOworICAgICAgICBFeGl0QXJndW1l
bnRMaXN0IGV4aXRBcmd1bWVudHM7CisgICAgICAgIGV4aXRBcmd1bWVudHMucmVzZXJ2ZUNhcGFj
aXR5KG51bUFyZ3MgKyA2KTsKKworICAgICAgICB1bnNpZ25lZCBzdGFja21hcElEID0gbV9zdGFj
a21hcElEcysrOworICAgICAgICBleGl0QXJndW1lbnRzLmFwcGVuZChsb3dKU1ZhbHVlKG1fZ3Jh
cGgudmFyQXJnQ2hpbGQobV9ub2RlLCAwKSkpOworICAgICAgICBleGl0QXJndW1lbnRzLmFwcGVu
ZChtX3RhZ1R5cGVOdW1iZXIpOworCisgICAgICAgIFZlY3RvcjxFeGl0VmFsdWU+IGNhbGxBcmd1
bWVudHMobnVtQXJncyk7CisKKyAgICAgICAgYm9vbCBuZWVkc1RhZ1R5cGVOdW1iZXIgeyBmYWxz
ZSB9OworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG51bUFyZ3M7ICsraSkgeworICAgICAg
ICAgICAgY2FsbEFyZ3VtZW50c1tpXSA9CisgICAgICAgICAgICAgICAgZXhpdFZhbHVlRm9yVGFp
bENhbGwoZXhpdEFyZ3VtZW50cywgbV9ncmFwaC52YXJBcmdDaGlsZChtX25vZGUsIDEgKyBpKS5u
b2RlKCkpOworICAgICAgICAgICAgaWYgKGNhbGxBcmd1bWVudHNbaV0uZGF0YUZvcm1hdCgpID09
IERhdGFGb3JtYXRJbnQzMikKKyAgICAgICAgICAgICAgICBuZWVkc1RhZ1R5cGVOdW1iZXIgPSB0
cnVlOworICAgICAgICB9CisKKyAgICAgICAgSlNUYWlsQ2FsbCB0YWlsQ2FsbChzdGFja21hcElE
LCBtX25vZGUsIFdURjo6bW92ZShjYWxsQXJndW1lbnRzKSk7CisKKyAgICAgICAgZXhpdEFyZ3Vt
ZW50cy5pbnNlcnQoMCwgbV9vdXQuY29uc3RJbnQzMihuZWVkc1RhZ1R5cGVOdW1iZXIgPyAyIDog
MSkpOworICAgICAgICBleGl0QXJndW1lbnRzLmluc2VydCgwLCBjb25zdE51bGwobV9vdXQucmVm
OCkpOworICAgICAgICBleGl0QXJndW1lbnRzLmluc2VydCgwLCBtX291dC5jb25zdEludDMyKHRh
aWxDYWxsLmVzdGltYXRlZFNpemUoKSkpOworICAgICAgICBleGl0QXJndW1lbnRzLmluc2VydCgw
LCBtX291dC5jb25zdEludDY0KHN0YWNrbWFwSUQpKTsKKworICAgICAgICBMVmFsdWUgY2FsbCA9
CisgICAgICAgICAgICBtX291dC5jYWxsKG1fb3V0LnBhdGNocG9pbnRWb2lkSW50cmluc2ljKCks
IGV4aXRBcmd1bWVudHMpOworICAgICAgICBzZXRJbnN0cnVjdGlvbkNhbGxpbmdDb252ZW50aW9u
KGNhbGwsIExMVk1BbnlSZWdDYWxsQ29udik7CisgICAgICAgIG1fb3V0LnVucmVhY2hhYmxlKCk7
CisKKyAgICAgICAgbV9mdGxTdGF0ZS5qc1RhaWxDYWxscy5hcHBlbmQodGFpbENhbGwpOworICAg
IH0KICAgICAKICAgICB2b2lkIGNvbXBpbGVDYWxsT3JDb25zdHJ1Y3RWYXJhcmdzKCkKICAgICB7
CkBAIC00MzcyLDEwICs0NDE5LDE0IEBAIHByaXZhdGU6CiAgICAgICAgIAogICAgICAgICBzd2l0
Y2ggKG1fbm9kZS0+b3AoKSkgewogICAgICAgICBjYXNlIENhbGxWYXJhcmdzOgorICAgICAgICBj
YXNlIFRhaWxDYWxsVmFyYXJnczoKKyAgICAgICAgY2FzZSBUYWlsQ2FsbFZhcmFyZ3NJbmxpbmVk
Q2FsbGVyOgogICAgICAgICBjYXNlIENvbnN0cnVjdFZhcmFyZ3M6CiAgICAgICAgICAgICBqc0Fy
Z3VtZW50cyA9IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDIoKSk7CiAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgY2FzZSBDYWxsRm9yd2FyZFZhcmFyZ3M6CisgICAgICAgIGNhc2UgVGFpbENh
bGxGb3J3YXJkVmFyYXJnczoKKyAgICAgICAgY2FzZSBUYWlsQ2FsbEZvcndhcmRWYXJhcmdzSW5s
aW5lZENhbGxlcjoKICAgICAgICAgY2FzZSBDb25zdHJ1Y3RGb3J3YXJkVmFyYXJnczoKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0OgpAQCAtNDQwMiw4ICs0NDUzLDE2IEBAIHBy
aXZhdGU6CiAgICAgICAgIHNldEluc3RydWN0aW9uQ2FsbGluZ0NvbnZlbnRpb24oY2FsbCwgTExW
TUNDYWxsQ29udik7CiAgICAgICAgIAogICAgICAgICBtX2Z0bFN0YXRlLmpzQ2FsbFZhcmFyZ3Nl
cy5hcHBlbmQoSlNDYWxsVmFyYXJncyhzdGFja21hcElELCBtX25vZGUpKTsKLSAgICAgICAgCi0g
ICAgICAgIHNldEpTVmFsdWUoY2FsbCk7CisKKyAgICAgICAgc3dpdGNoIChtX25vZGUtPm9wKCkp
IHsKKyAgICAgICAgY2FzZSBUYWlsQ2FsbFZhcmFyZ3M6CisgICAgICAgIGNhc2UgVGFpbENhbGxG
b3J3YXJkVmFyYXJnczoKKyAgICAgICAgICAgIG1fb3V0LnVucmVhY2hhYmxlKCk7CisgICAgICAg
ICAgICBicmVhazsKKworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgc2V0SlNWYWx1ZShj
YWxsKTsKKyAgICAgICAgfQogICAgIH0KICAgICAKICAgICB2b2lkIGNvbXBpbGVMb2FkVmFyYXJn
cygpCkBAIC04MDc0LDcgKzgxMzMsMTQgQEAgcHJpdmF0ZToKICAgICB9CiAgICAgdm9pZCBjYWxs
UHJlZmxpZ2h0KCkKICAgICB7Ci0gICAgICAgIGNhbGxQcmVmbGlnaHQobV9ub2RlLT5vcmlnaW4u
c2VtYW50aWMpOworICAgICAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW4gPSBtX25vZGUtPm9yaWdp
bi5zZW1hbnRpYzsKKworICAgICAgICBpZiAobV9ub2RlLT5vcCgpID09IFRhaWxDYWxsSW5saW5l
ZENhbGxlcgorICAgICAgICAgICAgfHwgbV9ub2RlLT5vcCgpID09IFRhaWxDYWxsVmFyYXJnc0lu
bGluZWRDYWxsZXIKKyAgICAgICAgICAgIHx8IG1fbm9kZS0+b3AoKSA9PSBUYWlsQ2FsbEZvcndh
cmRWYXJhcmdzSW5saW5lZENhbGxlcikKKyAgICAgICAgICAgIGNvZGVPcmlnaW4gPSpjb2RlT3Jp
Z2luLmlubGluZUNhbGxGcmFtZS0+Z2V0Q2FsbGVyU2tpcHBpbmdEZWFkRnJhbWVzKCk7CisKKyAg
ICAgICAgY2FsbFByZWZsaWdodChjb2RlT3JpZ2luKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBj
YWxsQ2hlY2soKQpAQCAtODMzNywxMyArODQwMyw0NiBAQCBwcml2YXRlOgogICAgICAgICBERkdf
Q1JBU0gobV9ncmFwaCwgbV9ub2RlLCB0b0NTdHJpbmcoIkNhbm5vdCBmaW5kIHZhbHVlIGZvciBu
b2RlOiAiLCBub2RlKS5kYXRhKCkpOwogICAgICAgICByZXR1cm4gRXhpdFZhbHVlOjpkZWFkKCk7
CiAgICAgfQotICAgIAorCiAgICAgRXhpdFZhbHVlIGV4aXRBcmd1bWVudChFeGl0QXJndW1lbnRM
aXN0JiBhcmd1bWVudHMsIERhdGFGb3JtYXQgZm9ybWF0LCBMVmFsdWUgdmFsdWUpCiAgICAgewog
ICAgICAgICBFeGl0VmFsdWUgcmVzdWx0ID0gRXhpdFZhbHVlOjpleGl0QXJndW1lbnQoRXhpdEFy
Z3VtZW50KGZvcm1hdCwgYXJndW1lbnRzLnNpemUoKSkpOwogICAgICAgICBhcmd1bWVudHMuYXBw
ZW5kKHZhbHVlKTsKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CisKKyAgICBFeGl0VmFs
dWUgZXhpdFZhbHVlRm9yVGFpbENhbGwoRXhpdEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBOb2Rl
KiBub2RlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKG5vZGUtPnNob3VsZEdlbmVyYXRlKCkpOwor
ICAgICAgICBBU1NFUlQobm9kZS0+aGFzUmVzdWx0KCkpOworCisgICAgICAgIHN3aXRjaCAobm9k
ZS0+b3AoKSkgeworICAgICAgICBjYXNlIEpTQ29uc3RhbnQ6CisgICAgICAgIGNhc2UgSW50NTJD
b25zdGFudDoKKyAgICAgICAgY2FzZSBEb3VibGVDb25zdGFudDoKKyAgICAgICAgICAgIHJldHVy
biBFeGl0VmFsdWU6OmNvbnN0YW50KG5vZGUtPmFzSlNWYWx1ZSgpKTsKKworICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKworICAgICAgICBMb3dlcmVkTm9k
ZVZhbHVlIHZhbHVlID0gbV9qc1ZhbHVlVmFsdWVzLmdldChub2RlKTsKKyAgICAgICAgaWYgKGlz
VmFsaWQodmFsdWUpKQorICAgICAgICAgICAgcmV0dXJuIGV4aXRBcmd1bWVudChhcmd1bWVudHMs
IERhdGFGb3JtYXRKUywgdmFsdWUudmFsdWUoKSk7CisKKyAgICAgICAgdmFsdWUgPSBtX2ludDMy
VmFsdWVzLmdldChub2RlKTsKKyAgICAgICAgaWYgKGlzVmFsaWQodmFsdWUpKQorICAgICAgICAg
ICAgcmV0dXJuIGV4aXRBcmd1bWVudChhcmd1bWVudHMsIERhdGFGb3JtYXRJbnQzMiwgdmFsdWUu
dmFsdWUoKSk7CisKKyAgICAgICAgdmFsdWUgPSBtX2Jvb2xlYW5WYWx1ZXMuZ2V0KG5vZGUpOwor
ICAgICAgICBpZiAoaXNWYWxpZCh2YWx1ZSkpIHsKKyAgICAgICAgICAgIExWYWx1ZSB2YWx1ZVRv
UGFzcyA9IG1fb3V0Lnplcm9FeHQodmFsdWUudmFsdWUoKSwgbV9vdXQuaW50MzIpOworICAgICAg
ICAgICAgcmV0dXJuIGV4aXRBcmd1bWVudChhcmd1bWVudHMsIERhdGFGb3JtYXRCb29sZWFuLCB2
YWx1ZVRvUGFzcyk7CisgICAgICAgIH0KKworICAgICAgICAvLyBEb3VibGVzIGFuZCBJbnQ1MiBo
YXZlIGJlZW4gY29udmVydGVkIGJ5IFZhbHVlUmVwKCkKKyAgICAgICAgREZHX0NSQVNIKG1fZ3Jh
cGgsIG1fbm9kZSwgdG9DU3RyaW5nKCJDYW5ub3QgZmluZCB2YWx1ZSBmb3Igbm9kZTogIiwgbm9k
ZSkuZGF0YSgpKTsKKyAgICB9CiAgICAgCiAgICAgYm9vbCBkb2VzS2lsbChFZGdlIGVkZ2UpCiAg
ICAgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGF0ZS5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGF0ZS5oCmluZGV4IDQyZmI5ZDJjYTMyYWMw
Yjc5ZjNlY2ExYjBlMDQ4MjNjNDMxYjRjMDQuLmY4NDE0ZWM3NTMxODIwODI1NDRkMWUwMzU3YTg0
MWQxZWZlNTVkMGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3Rh
dGUuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0YXRlLmgKQEAgLTM3LDYg
KzM3LDcgQEAKICNpbmNsdWRlICJGVExKSVRGaW5hbGl6ZXIuaCIKICNpbmNsdWRlICJGVExKU0Nh
bGwuaCIKICNpbmNsdWRlICJGVExKU0NhbGxWYXJhcmdzLmgiCisjaW5jbHVkZSAiRlRMSlNUYWls
Q2FsbC5oIgogI2luY2x1ZGUgIkZUTFN0YWNrTWFwcy5oIgogI2luY2x1ZGUgIkZUTFN0YXRlLmgi
CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CkBAIC03OSw2ICs4MCw3IEBAIHB1YmxpYzoK
ICAgICBTZWdtZW50ZWRWZWN0b3I8Q2hlY2tJbkRlc2NyaXB0b3I+IGNoZWNrSW5zOwogICAgIFZl
Y3RvcjxKU0NhbGw+IGpzQ2FsbHM7CiAgICAgVmVjdG9yPEpTQ2FsbFZhcmFyZ3M+IGpzQ2FsbFZh
cmFyZ3NlczsKKyAgICBWZWN0b3I8SlNUYWlsQ2FsbD4ganNUYWlsQ2FsbHM7CiAgICAgVmVjdG9y
PENTdHJpbmc+IGNvZGVTZWN0aW9uTmFtZXM7CiAgICAgVmVjdG9yPENTdHJpbmc+IGRhdGFTZWN0
aW9uTmFtZXM7CiAgICAgdm9pZCogdW53aW5kRGF0YVNlY3Rpb247CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAKaW5kZXggMTQ1MjhjMzlmMWJkYTg1NDYz
NTU5NzBiNjkyZDk2NWJmYTUyMGQ0OC4uYzliOWUyOGU1OWVlMjFjNTI1NGY3MWYwY2VlNDMzMjhj
YThhNmJiZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9Bc3NlbWJseUhl
bHBlcnMuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJz
LmNwcApAQCAtMjY2LDcgKzI2Niw3IEBAIEFzc2VtYmx5SGVscGVyczo6SnVtcCBBc3NlbWJseUhl
bHBlcnM6OmVtaXRFeGNlcHRpb25DaGVjayhFeGNlcHRpb25DaGVja0tpbmQga2luCiAgICAgCiAg
ICAgaWYgKHdpZHRoID09IE5vcm1hbEp1bXBXaWR0aCkKICAgICAgICAgcmV0dXJuIHJlc3VsdDsK
LSAgICAKKwogICAgIFBhdGNoYWJsZUp1bXAgcmVhbEp1bXAgPSBwYXRjaGFibGVKdW1wKCk7CiAg
ICAgcmVzdWx0LmxpbmsodGhpcyk7CiAgICAgCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVEYXRhLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0NhbGxGcmFtZVNodWZmbGVEYXRhLmgKaW5kZXggNDQ4MDJlODZkMTRhZTk5YWQzMDliNGFj
ZmYzMjBlMTM2NDIzNTA0Ny4uNDYxMGM1ZTY0ZjhjZmI0N2RjMmNiY2NhODNiMTEwNmU3NTUzYjBh
MCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxl
RGF0YS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZURh
dGEuaApAQCAtMzksNiArMzksNyBAQCBzdHJ1Y3QgQ2FsbEZyYW1lU2h1ZmZsZURhdGEgewogICAg
IFZlY3RvcjxWYWx1ZVJlY292ZXJ5PiBhcmdzOwogI2lmIFVTRShKU1ZBTFVFNjQpCiAgICAgUmVn
aXN0ZXJNYXA8VmFsdWVSZWNvdmVyeT4gcmVnaXN0ZXJzOworICAgIEdQUlJlZyB0YWdUeXBlTnVt
YmVyIHsgSW52YWxpZEdQUlJlZyB9OwogCiAgICAgdm9pZCBzZXR1cENhbGxlZVNhdmVSZWdpc3Rl
cnMoQ29kZUJsb2NrKik7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9D
YWxsRnJhbWVTaHVmZmxlci5jcHAKaW5kZXggNWIyNDZkNzNkMzZhOTgwMmZmMzc5Y2VjMjAwZTU5
YWJiNWIyYmE0Mi4uMmZmOTk0ZjFhZDVhNDY1NzQ0MDBmNDU1Yzk0NjJmMWM4NzdjY2RmMiAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlci5jcHAK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlci5jcHAKQEAg
LTcwLDYgKzcwLDEwIEBAIENhbGxGcmFtZVNodWZmbGVyOjpDYWxsRnJhbWVTaHVmZmxlcihDQ2Fs
bEhlbHBlcnMmIGppdCwgY29uc3QgQ2FsbEZyYW1lU2h1ZmZsZURhCiAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgIGFkZE5ldyhyZWcuZnByKCksIGRhdGEucmVnaXN0ZXJzW3JlZ10pOwogICAgIH0K
KworICAgIG1fdGFnVHlwZU51bWJlciA9IGRhdGEudGFnVHlwZU51bWJlcjsKKyAgICBpZiAobV90
YWdUeXBlTnVtYmVyICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIGxvY2tHUFIobV90YWdUeXBl
TnVtYmVyKTsKICNlbmRpZgogfQogCkBAIC03OSwxMiArODMsMTIgQEAgdm9pZCBDYWxsRnJhbWVT
aHVmZmxlcjo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAogICAgIHN0YXRpYyBjb25zdCBj
aGFyKiBkYW5nZXJEZWxpbWl0ZXIgICAgICAgPSAiIFgtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tWCAiOwogICAgIHN0YXRpYyBjb25zdCBjaGFyKiBkYW5nZXJCb3VuZHNEZWxpbWl0ZXIg
PSAiIFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWCAiOwogICAgIHN0YXRpYyBjb25z
dCBjaGFyKiBlbXB0eVNwYWNlICAgICAgICAgICAgPSAiICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAiOwotICAgIEFTU0VSVChtX2FsaWduZWROZXdGcmFtZVNpemUgPD0gbnVtTG9j
YWxzKCkpOwogICAgIG91dC5wcmludCgiICAgICAgICAgICIpOwogICAgIG91dC5wcmludCgiICAg
ICAgICAgICBPbGQgZnJhbWUgICAgICAgICAgICAgICAiKTsKICAgICBvdXQucHJpbnQoIiAgICAg
ICAgICAgTmV3IGZyYW1lICAgICAgICAgICAgICAgIik7CiAgICAgb3V0LnByaW50KCJcbiIpOwot
ICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbV9hbGlnbmVkT2xkRnJhbWVTaXplICsgbnVtTG9jYWxz
KCkgKyAzOyArK2kpIHsKKyAgICBpbnQgdG90YWxTaXplID0gbV9hbGlnbmVkT2xkRnJhbWVTaXpl
ICsgc3RkOjptYXgobnVtTG9jYWxzKCksIG1fYWxpZ25lZE5ld0ZyYW1lU2l6ZSkgKyAzOworICAg
IGZvciAoaW50IGkgPSAwOyBpIDwgdG90YWxTaXplOyArK2kpIHsKICAgICAgICAgVmlydHVhbFJl
Z2lzdGVyIG9sZCB7IG1fYWxpZ25lZE9sZEZyYW1lU2l6ZSAtIGkgLSAxIH07CiAgICAgICAgIFZp
cnR1YWxSZWdpc3RlciBuZXdSZWcgeyBvbGQgKyBtX2ZyYW1lRGVsdGEgfTsKIApAQCAtMjAzLDYg
KzIwNywxMCBAQCB2b2lkIENhbGxGcmFtZVNodWZmbGVyOjpkdW1wKFByaW50U3RyZWFtJiBvdXQp
IGNvbnN0CiAgICAgICAgIG91dC5wcmludCgiICAgT2xkIGZyYW1lIG9mZnNldCBpcyAiLCBtX29s
ZEZyYW1lT2Zmc2V0LCAiXG4iKTsKICAgICBpZiAobV9uZXdGcmFtZU9mZnNldCkKICAgICAgICAg
b3V0LnByaW50KCIgICBOZXcgZnJhbWUgb2Zmc2V0IGlzICIsIG1fbmV3RnJhbWVPZmZzZXQsICJc
biIpOworI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgaWYgKG1fdGFnVHlwZU51bWJlciAhPSBJbnZh
bGlkR1BSUmVnKQorICAgICAgICBvdXQucHJpbnQoIiAgIFRhZ1R5cGVOdW1iZXIgaXMgY3VycmVu
dGx5IGluICIsIG1fdGFnVHlwZU51bWJlciwgIlxuIik7CisjZW5kaWYKIH0KIAogQ2FjaGVkUmVj
b3ZlcnkqIENhbGxGcmFtZVNodWZmbGVyOjpnZXRDYWNoZWRSZWNvdmVyeShWYWx1ZVJlY292ZXJ5
IHJlY292ZXJ5KQpAQCAtMjQ2LDE3ICsyNTQsMjYgQEAgdm9pZCBDYWxsRnJhbWVTaHVmZmxlcjo6
c3BpbGwoQ2FjaGVkUmVjb3ZlcnkmIGNhY2hlZFJlY292ZXJ5KQogICAgIEFTU0VSVChjYWNoZWRS
ZWNvdmVyeS5yZWNvdmVyeSgpLmlzSW5SZWdpc3RlcnMoKSk7CiAKICAgICBWaXJ0dWFsUmVnaXN0
ZXIgc3BpbGxTbG90IHsgMCB9OwotICAgIGZvciAoVmlydHVhbFJlZ2lzdGVyIHNsb3QgPSBmaXJz
dE9sZCgpOyBzbG90IDw9IGxhc3RPbGQoKTsgc2xvdCAtPSAxKSB7Ci0gICAgICAgIEFTU0VSVChz
bG90IDwgbmV3QXNPbGQoZmlyc3ROZXcoKSkpOworICAgIGZvciAoVmlydHVhbFJlZ2lzdGVyIHNs
b3QgPSBmaXJzdE9sZCgpOyBzbG90IDw9IGxhc3RPbGQoKTsgc2xvdCArPSAxKSB7CisgICAgICAg
IGlmIChzbG90ID49IG5ld0FzT2xkKGZpcnN0TmV3KCkpKQorICAgICAgICAgICAgYnJlYWs7CisK
ICAgICAgICAgaWYgKGdldE9sZChzbG90KSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCiAgICAg
ICAgIHNwaWxsU2xvdCA9IHNsb3Q7CiAgICAgICAgIGJyZWFrOwogICAgIH0KLSAgICAvLyBXZSBt
dXN0IGhhdmUgZW5vdWdoIHNsb3RzIHRvIGJlIGFibGUgdG8gZml0IHRoZSB3aG9sZQotICAgIC8v
IGNhbGxlZSdzIGZyYW1lIGZvciB0aGUgc2xvdyBwYXRoLgotICAgIFJFTEVBU0VfQVNTRVJUKHNw
aWxsU2xvdC5pc0xvY2FsKCkpOworICAgIC8vIFdlIG11c3QgaGF2ZSBlbm91Z2ggc2xvdHMgdG8g
YmUgYWJsZSB0byBmaXQgdGhlIHdob2xlIGNhbGxlZSdzCisgICAgLy8gZnJhbWUgZm9yIHRoZSBz
bG93IHBhdGggLSB1bmxlc3Mgd2UgYXJlIGluIHRoZSBGVEwuIEluIHRoYXQKKyAgICAvLyBjYXNl
LCB3ZSBhcmUgYWxsb3dlZCB0byBleHRlbmQgdGhlIGZyYW1lICpvbmNlKiwgc2luY2Ugd2UgYXJl
CisgICAgLy8gZ3VhcmFudGVlZCB0byBoYXZlIGVub3VnaCBhdmFpbGFibGUgc3BhY2UgZm9yIHRo
YXQuCisgICAgaWYgKHNwaWxsU2xvdCA+PSBuZXdBc09sZChmaXJzdE5ldygpKSB8fCAhc3BpbGxT
bG90LmlzTG9jYWwoKSkgeworICAgICAgICBSRUxFQVNFX0FTU0VSVCghbV9kaWRFeHRlbmRGcmFt
ZSk7CisgICAgICAgIGV4dGVuZEZyYW1lSWZOZWVkZWQoKTsKKyAgICAgICAgc3BpbGwoY2FjaGVk
UmVjb3ZlcnkpOworICAgICAgICByZXR1cm47CisgICAgfQogCiAgICAgaWYgKHZlcmJvc2UpCiAg
ICAgICAgIGRhdGFMb2coIiAgICogU3BpbGxpbmcgIiwgY2FjaGVkUmVjb3ZlcnkucmVjb3Zlcnko
KSwgIiBpbnRvICIsIHNwaWxsU2xvdCwgIlxuIik7CkBAIC0yODUsNiArMzAyLDM4IEBAIHZvaWQg
Q2FsbEZyYW1lU2h1ZmZsZXI6OmVtaXREZWx0YUNoZWNrKCkKICAgICAgICAgZGF0YUxvZygiICBT
a2lwcGluZyB0aGUgZnAtc3AgZGVsdGEgY2hlY2sgc2luY2UgdGhlcmUgaXMgdG9vIG11Y2ggcHJl
c3N1cmUiKTsKIH0KIAordm9pZCBDYWxsRnJhbWVTaHVmZmxlcjo6ZXh0ZW5kRnJhbWVJZk5lZWRl
ZCgpCit7CisgICAgQVNTRVJUKCFtX2RpZEV4dGVuZEZyYW1lKTsKKyAgICBBU1NFUlQoIWlzVW5k
ZWNpZGVkKCkpOworCisgICAgVmlydHVhbFJlZ2lzdGVyIGZpcnN0UmVhZCB7IGZpcnN0T2xkKCkg
fTsKKyAgICBmb3IgKDsgZmlyc3RSZWFkIDwgVmlydHVhbFJlZ2lzdGVyIHsgMCB9OyBmaXJzdFJl
YWQgKz0gMSkgeworICAgICAgICBpZiAoZ2V0T2xkKGZpcnN0UmVhZCkpCisgICAgICAgICAgICBi
cmVhazsKKyAgICB9CisgICAgc2l6ZV90IGF2YWlsYWJsZVNpemUgPSBzdGF0aWNfY2FzdDxzaXpl
X3Q+KGZpcnN0UmVhZC5vZmZzZXQoKSAtIGZpcnN0T2xkKCkub2Zmc2V0KCkpOworICAgIHNpemVf
dCB3YW50ZWRTaXplID0gbV9uZXdGcmFtZS5zaXplKCkgKyBtX25ld0ZyYW1lT2Zmc2V0OworCisg
ICAgaWYgKGF2YWlsYWJsZVNpemUgPCB3YW50ZWRTaXplKSB7CisgICAgICAgIHNpemVfdCBkZWx0
YSA9IFdURjo6cm91bmRVcFRvTXVsdGlwbGVPZihzdGFja0FsaWdubWVudFJlZ2lzdGVycygpLCB3
YW50ZWRTaXplIC0gYXZhaWxhYmxlU2l6ZSk7CisgICAgICAgIG1fb2xkRnJhbWUuZ3JvdyhtX29s
ZEZyYW1lLnNpemUoKSArIGRlbHRhKTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBk
ZWx0YTsgKytpKQorICAgICAgICAgICAgbV9vbGRGcmFtZVttX29sZEZyYW1lLnNpemUoKSAtIGkg
LSAxXSA9IG51bGxwdHI7CisgICAgICAgIG1faml0LnN1YlB0cihNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbTMyKGRlbHRhICogc2l6ZW9mKFJlZ2lzdGVyKSksIE1hY3JvQXNzZW1ibGVyOjpzdGFj
a1BvaW50ZXJSZWdpc3Rlcik7CisKKyAgICAgICAgaWYgKGlzU2xvd1BhdGgoKSkKKyAgICAgICAg
ICAgIG1fZnJhbWVEZWx0YSA9IG51bUxvY2FscygpICsgSlNTdGFjazo6Q2FsbGVyRnJhbWVBbmRQ
Q1NpemU7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fb2xkRnJhbWVPZmZzZXQgPSBudW1M
b2NhbHMoKTsKKworICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgIGRhdGFMb2dGKCIg
IE5vdCBlbm91Z2ggc3BhY2UgLSBleHRlbmRpbmcgdGhlIG9sZCBmcmFtZSAlenUgc2xvdFxuIiwg
ZGVsdGEpOworICAgIH0KKworICAgIG1fZGlkRXh0ZW5kRnJhbWUgPSB0cnVlOworfQorCiB2b2lk
IENhbGxGcmFtZVNodWZmbGVyOjpwcmVwYXJlRm9yU2xvd1BhdGgoKQogewogICAgIEFTU0VSVChp
c1VuZGVjaWRlZCgpKTsKQEAgLTI5NSw3ICszNDQsMTUgQEAgdm9pZCBDYWxsRnJhbWVTaHVmZmxl
cjo6cHJlcGFyZUZvclNsb3dQYXRoKCkKICAgICBtX25ld0ZyYW1lT2Zmc2V0ID0gLUpTU3RhY2s6
OkNhbGxlckZyYW1lQW5kUENTaXplOwogCiAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgIGRhdGFM
b2coIlxuXG5QcmVwYXJpbmcgZnJhbWUgZm9yIHNsb3cgcGF0aCBjYWxsOlxuIiwgKnRoaXMpOwor
ICAgICAgICBkYXRhTG9nKCJcblxuUHJlcGFyaW5nIGZyYW1lIGZvciBzbG93IHBhdGggY2FsbDpc
biIpOworCisgICAgLy8gV2hlbiBjb21pbmcgZnJvbSB0aGUgRlRMLCB3ZSBuZWVkIHRvIGV4dGVu
ZCB0aGUgZnJhbWUuIEluIG90aGVyCisgICAgLy8gY2FzZXMsIHdlIG1heSBlbmQgdXAgZXh0ZW5k
aW5nIHRoZSBmcmFtZSBpZiB3ZSBwcmV2aW91c2x5CisgICAgLy8gc3BpbGxlZCB0aGluZ3MgKGUu
Zy4gaW4gcG9seW1vcnBoaWMgY2FjaGUpLgorICAgIGV4dGVuZEZyYW1lSWZOZWVkZWQoKTsKKwor
ICAgIGlmICh2ZXJib3NlKQorICAgICAgICBkYXRhTG9nKCp0aGlzKTsKIAogICAgIHByZXBhcmVB
bnkoKTsKIApAQCAtNjQ1LDYgKzcwMiwxMSBAQCB2b2lkIENhbGxGcmFtZVNodWZmbGVyOjpwcmVw
YXJlQW55KCkKICAgICAgICAgQVNTRVJUX1VOVVNFRCh3cml0ZXNPSywgd3JpdGVzT0spOwogICAg
IH0KIAorI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgaWYgKG1fdGFnVHlwZU51bWJlciAhPSBJbnZh
bGlkR1BSUmVnICYmIG1fbmV3UmVnaXN0ZXJzW21fdGFnVHlwZU51bWJlcl0pCisgICAgICAgIHJl
bGVhc2VHUFIobV90YWdUeXBlTnVtYmVyKTsKKyNlbmRpZgorCiAgICAgLy8gSGFuZGxlIDIpIGJ5
IGxvYWRpbmcgYWxsIHJlZ2lzdGVycy4gV2UgZG9uJ3QgaGF2ZSB0byBkbyBhbnkKICAgICAvLyB3
cml0ZXMsIHNpbmNlIHRoZXkgaGF2ZSBiZWVuIHRha2VuIGNhcmUgb2YgYWJvdmUuCiAgICAgaWYg
KHZlcmJvc2UpCkBAIC02NTksNiArNzIxLDExIEBAIHZvaWQgQ2FsbEZyYW1lU2h1ZmZsZXI6OnBy
ZXBhcmVBbnkoKQogICAgICAgICBBU1NFUlQoY2FjaGVkUmVjb3ZlcnktPnRhcmdldHMoKS5pc0Vt
cHR5KCkpOwogICAgIH0KIAorI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgaWYgKG1fdGFnVHlwZU51
bWJlciAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICByZWxlYXNlR1BSKG1fdGFnVHlwZU51bWJl
cik7CisjZW5kaWYKKwogICAgIC8vIEF0IHRoaXMgcG9pbnQsIHdlIGhhdmUgcmVhZCBldmVyeXRo
aW5nIHdlIGNhcmVkIGFib3V0IGZyb20gdGhlCiAgICAgLy8gc3RhY2ssIGFuZCB3cml0dGVuIGV2
ZXJ5dGhpbmcgd2UgaGFkIHRvIHRvIHRoZSBzdGFjay4KICAgICBpZiAodmVyYm9zZSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXIuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXIuaAppbmRleCAzNDA2NWYw
NzJkNWI4YzY1MTM4N2MwYjc0ZTdhYzA2ZTA5MjVkNWFmLi5lNWE1ZGFlYWE1N2U5ZTYwNzZiOTVl
ZTkwNjEzYjYyNzkzOTEwNzM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0NhbGxGcmFtZVNodWZmbGVyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxs
RnJhbWVTaHVmZmxlci5oCkBAIC0xNzAsNiArMTcwLDIxIEBAIHB1YmxpYzoKICAgICAgICAgbV9s
b2NrZWRSZWdpc3RlcnMuY2xlYXIoZ3ByKTsKICAgICB9CiAKKyAgICB2b2lkIHJlc3RvcmVHUFIo
R1BSUmVnIGdwcikKKyAgICB7CisgICAgICAgIGlmICghbV9uZXdSZWdpc3RlcnNbZ3ByXSkKKyAg
ICAgICAgICAgIHJldHVybjsKKworICAgICAgICBlbnN1cmVHUFIoKTsKKyNpZiBVU0UoSlNWQUxV
RTMyXzY0KQorICAgICAgICBHUFJSZWcgdGVtcEdQUiB7IGdldEZyZWVHUFIoKSB9OworICAgICAg
ICBsb2NrR1BSKHRlbXBHUFIpOworICAgICAgICBlbnN1cmVHUFIoKTsKKyAgICAgICAgcmVsZWFz
ZUdQUih0ZW1wR1BSKTsKKyNlbmRpZgorICAgICAgICBlbWl0RGlzcGxhY2UoKm1fbmV3UmVnaXN0
ZXJzW2dwcl0pOworICAgIH0KKwogICAgIC8vIFlvdSBjYW4gb25seSB0YWtlIGEgc25hcHNob3Qg
aWYgdGhlIHJlY292ZXJ5IGhhcyBub3Qgc3RhcnRlZAogICAgIC8vIHlldC4gVGhlIG9ubHkgb3Bl
cmF0aW9ucyB0aGF0IGFyZSB2YWxpZCBiZWZvcmUgdGFraW5nIGEKICAgICAvLyBzbmFwc2hvdCBh
cmUgbG9ja0dQUigpLCBhY3F1aXJlR1BSKCkgYW5kIHJlbGVhc2VHUFIoKS4KQEAgLTQwNiw2ICs0
MjEsMTAgQEAgcHJpdmF0ZToKICAgICAgICAgcmV0dXJuIHJlZyA+PSBmaXJzdE9sZCgpICYmIHJl
ZyA8PSBsYXN0T2xkKCk7CiAgICAgfQogCisgICAgYm9vbCBtX2RpZEV4dGVuZEZyYW1lIHsgZmFs
c2UgfTsKKworICAgIHZvaWQgZXh0ZW5kRnJhbWVJZk5lZWRlZCgpOworCiAgICAgLy8gVGhpcyBz
dG9yZXMsIGZvciBlYWNoIHNsb3QgaW4gdGhlIG5ldyBmcmFtZSwgaW5mb3JtYXRpb24gYWJvdXQK
ICAgICAvLyB0aGUgcmVjb3ZlcnkgZm9yIHRoZSB2YWx1ZSB0aGF0IHNob3VsZCBldmVudHVhbGx5
IGdvIGludG8gdGhhdAogICAgIC8vIHNsb3QuCkBAIC00ODIsMTMgKzUwMSwyMyBAQCBwcml2YXRl
OgogICAgIC8vIFdlIGFsc28gdXNlIHRoaXMgdG8gbG9jayByZWdpc3RlcnMgdGVtcG9yYXJpbHks
IGZvciBpbnN0YW5jZSB0bwogICAgIC8vIGVuc3VyZSB0aGF0IHdlIGhhdmUgYXQgbGVhc3QgMiBh
dmFpbGFibGUgcmVnaXN0ZXJzIGZvciBsb2FkaW5nCiAgICAgLy8gYSBwYWlyIG9uIDMyYml0cy4K
KyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIG11dGFibGUgUmVnaXN0ZXJTZXQgbV9sb2NrZWRSZWdp
c3RlcnM7CisjZWxzZQogICAgIFJlZ2lzdGVyU2V0IG1fbG9ja2VkUmVnaXN0ZXJzOworI2VuZGlm
CiAKICAgICAvLyBUaGlzIHN0b3JlcyB0aGUgY3VycmVudCByZWNvdmVyaWVzIHByZXNlbnQgaW4g
cmVnaXN0ZXJzLiBBIG51bGwKICAgICAvLyBDYWNoZWRSZWNvdmVyeSBtZWFucyB3ZSBjYW4gdHJh
c2ggdGhlIGN1cnJlbnQgdmFsdWUgYXMgd2UgZG9uJ3QKICAgICAvLyBjYXJlIGFib3V0IGl0LiAK
ICAgICBSZWdpc3Rlck1hcDxDYWNoZWRSZWNvdmVyeSo+IG1fcmVnaXN0ZXJzOwogCisjaWYgVVNF
KEpTVkFMVUU2NCkKKyAgICBtdXRhYmxlIEdQUlJlZyBtX3RhZ1R5cGVOdW1iZXI7CisKKyAgICBi
b29sIHRyeUFjcXVpcmVUYWdUeXBlTnVtYmVyKCk7CisjZW5kaWYKKwogICAgIC8vIFRoaXMgc3Rv
cmVzLCBmb3IgZWFjaCByZWdpc3RlciwgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHJlY292ZXJ5CiAg
ICAgLy8gZm9yIHRoZSB2YWx1ZSB0aGF0IHNob3VsZCBldmVudHVhbGx5IGdvIGludG8gdGhhdCBy
ZWdpc3Rlci4gVGhlCiAgICAgLy8gb25seSByZWdpc3RlcnMgdGhhdCBoYXZlIGEgdGFyZ2V0IHJl
Y292ZXJ5IHdpbGwgYmUgY2FsbGVlLXNhdmUKQEAgLTUxOCw5ICs1NDcsMjYgQEAgcHJpdmF0ZToK
ICAgICAgICAgICAgICAgICAgICAgbm9uVGVtcCA9IHJlZzsKICAgICAgICAgICAgIH0KICAgICAg
ICAgfQorCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgaWYgKCFub25UZW1wICYmIG1fdGFn
VHlwZU51bWJlciAhPSBJbnZhbGlkR1BSUmVnICYmIGNoZWNrKFJlZyB7IG1fdGFnVHlwZU51bWJl
ciB9KSkgeworICAgICAgICAgICAgQVNTRVJUKG1fbG9ja2VkUmVnaXN0ZXJzLmdldChtX3RhZ1R5
cGVOdW1iZXIpKTsKKyAgICAgICAgICAgIG1fbG9ja2VkUmVnaXN0ZXJzLmNsZWFyKG1fdGFnVHlw
ZU51bWJlcik7CisgICAgICAgICAgICBub25UZW1wID0gUmVnIHsgbV90YWdUeXBlTnVtYmVyIH07
CisgICAgICAgICAgICBtX3RhZ1R5cGVOdW1iZXIgPSBJbnZhbGlkR1BSUmVnOworICAgICAgICB9
CisjZW5kaWYKICAgICAgICAgcmV0dXJuIG5vblRlbXA7CiAgICAgfQogCisgICAgR1BSUmVnIGdl
dEZyZWVUZW1wR1BSKCkgY29uc3QKKyAgICB7CisgICAgICAgIFJlZyBmcmVlVGVtcEdQUiB7IGdl
dEZyZWVSZWdpc3RlcihbdGhpc10gKFJlZyByZWcpIHsgcmV0dXJuIHJlZy5pc0dQUigpICYmICFt
X25ld1JlZ2lzdGVyc1tyZWddOyB9KSB9OworICAgICAgICBpZiAoIWZyZWVUZW1wR1BSKQorICAg
ICAgICAgICAgcmV0dXJuIEludmFsaWRHUFJSZWc7CisgICAgICAgIHJldHVybiBmcmVlVGVtcEdQ
Ui5ncHIoKTsKKyAgICB9CisKICAgICBHUFJSZWcgZ2V0RnJlZUdQUigpIGNvbnN0CiAgICAgewog
ICAgICAgICBSZWcgZnJlZUdQUiB7IGdldEZyZWVSZWdpc3RlcihbXSAoUmVnIHJlZykgeyByZXR1
cm4gcmVnLmlzR1BSKCk7IH0pIH07CkBAIC02MTYsNiArNjYyLDMxIEBAIHByaXZhdGU6CiAgICAg
ICAgICAgICB9KTsKICAgICB9CiAKKyAgICB2b2lkIGVuc3VyZVRlbXBHUFIoKQorICAgIHsKKyAg
ICAgICAgaWYgKGdldEZyZWVUZW1wR1BSKCkgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgICAg
IHJldHVybjsKKworICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAgICAgIGRhdGFMb2coIiAg
RmluZGluZyBhIHRlbXAgR1BSIHRvIHNwaWxsXG4iKTsKKyAgICAgICAgZW5zdXJlUmVnaXN0ZXIo
CisgICAgICAgICAgICBbdGhpc10gKGNvbnN0IENhY2hlZFJlY292ZXJ5JiBjYWNoZWRSZWNvdmVy
eSkgeworICAgICAgICAgICAgICAgIGlmIChjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLmlzSW5H
UFIoKSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gIW1fbG9ja2VkUmVnaXN0ZXJzLmdl
dChjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLmdwcigpKSAKKyAgICAgICAgICAgICAgICAgICAg
ICAgICYmICFtX25ld1JlZ2lzdGVyc1tjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLmdwcigpXTsK
KyAgICAgICAgICAgICAgICB9CisjaWYgVVNFKEpTVkFMVUUzMl82NCkKKyAgICAgICAgICAgICAg
ICBpZiAoY2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKS50ZWNobmlxdWUoKSA9PSBJblBhaXIpIHsK
KyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICFtX2xvY2tlZFJlZ2lzdGVycy5nZXQoY2FjaGVk
UmVjb3ZlcnkucmVjb3ZlcnkoKS50YWdHUFIoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICYm
ICFtX2xvY2tlZFJlZ2lzdGVycy5nZXQoY2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKS5wYXlsb2Fk
R1BSKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAmJiAhbV9uZXdSZWdpc3RlcnNbY2FjaGVk
UmVjb3ZlcnkucmVjb3ZlcnkoKS50YWdHUFIoKV0KKyAgICAgICAgICAgICAgICAgICAgICAgICYm
ICFtX25ld1JlZ2lzdGVyc1tjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLnBheWxvYWRHUFIoKV07
CisgICAgICAgICAgICAgICAgfQorI2VuZGlmCisgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICAgICAgfSk7CisgICAgfQorCiAgICAgdm9pZCBlbnN1cmVHUFIoKQogICAgIHsK
ICAgICAgICAgaWYgKGdldEZyZWVHUFIoKSAhPSBJbnZhbGlkR1BSUmVnKQpAQCAtNjcwLDE2ICs3
NDEsMjQgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAgIEFTU0VSVChqc1ZhbHVlUmVncyAmJiAh
Z2V0TmV3KGpzVmFsdWVSZWdzKSk7CiAgICAgICAgIENhY2hlZFJlY292ZXJ5KiBjYWNoZWRSZWNv
dmVyeSA9IGFkZENhY2hlZFJlY292ZXJ5KHJlY292ZXJ5KTsKLSAgICAgICAgQVNTRVJUKCFjYWNo
ZWRSZWNvdmVyeS0+d2FudGVkSlNWYWx1ZVJlZ3MoKSk7Ci0gICAgICAgIGNhY2hlZFJlY292ZXJ5
LT5zZXRXYW50ZWRKU1ZhbHVlUmVncyhqc1ZhbHVlUmVncyk7CiAjaWYgVVNFKEpTVkFMVUU2NCkK
KyAgICAgICAgaWYgKGNhY2hlZFJlY292ZXJ5LT53YW50ZWRKU1ZhbHVlUmVncygpKQorICAgICAg
ICAgICAgbV9uZXdSZWdpc3RlcnNbY2FjaGVkUmVjb3ZlcnktPndhbnRlZEpTVmFsdWVSZWdzKCku
Z3ByKCldID0gbnVsbHB0cjsKICAgICAgICAgbV9uZXdSZWdpc3RlcnNbanNWYWx1ZVJlZ3MuZ3By
KCldID0gY2FjaGVkUmVjb3Zlcnk7CiAjZWxzZQorICAgICAgICBpZiAoSlNWYWx1ZVJlZ3Mgb2xk
UmVncyB7IGNhY2hlZFJlY292ZXJ5LT53YW50ZWRKU1ZhbHVlUmVncygpIH0pIHsKKyAgICAgICAg
ICAgIGlmIChvbGRSZWdzLnBheWxvYWRHUFIoKSkKKyAgICAgICAgICAgICAgICBtX25ld1JlZ2lz
dGVyc1tvbGRSZWdzLnBheWxvYWRHUFIoKV0gPSBudWxscHRyOworICAgICAgICAgICAgaWYgKG9s
ZFJlZ3MudGFnR1BSKCkpCisgICAgICAgICAgICAgICAgbV9uZXdSZWdpc3RlcnNbb2xkUmVncy50
YWdHUFIoKV0gPSBudWxscHRyOworICAgICAgICB9CiAgICAgICAgIGlmIChqc1ZhbHVlUmVncy5w
YXlsb2FkR1BSKCkgIT0gSW52YWxpZEdQUlJlZykKICAgICAgICAgICAgIG1fbmV3UmVnaXN0ZXJz
W2pzVmFsdWVSZWdzLnBheWxvYWRHUFIoKV0gPSBjYWNoZWRSZWNvdmVyeTsKICAgICAgICAgaWYg
KGpzVmFsdWVSZWdzLnRhZ0dQUigpICE9IEludmFsaWRHUFJSZWcpCiAgICAgICAgICAgICBtX25l
d1JlZ2lzdGVyc1tqc1ZhbHVlUmVncy50YWdHUFIoKV0gPSBjYWNoZWRSZWNvdmVyeTsKICNlbmRp
ZgorICAgICAgICBBU1NFUlQoIWNhY2hlZFJlY292ZXJ5LT53YW50ZWRKU1ZhbHVlUmVncygpKTsK
KyAgICAgICAgY2FjaGVkUmVjb3ZlcnktPnNldFdhbnRlZEpTVmFsdWVSZWdzKGpzVmFsdWVSZWdz
KTsKICAgICB9CiAKICAgICB2b2lkIGFkZE5ldyhGUFJSZWcgZnByLCBWYWx1ZVJlY292ZXJ5IHJl
Y292ZXJ5KQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVT
aHVmZmxlcjY0LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZs
ZXI2NC5jcHAKaW5kZXggMzBjOTRhMmZhZWQ4ZmFjOTQ4MDRiOTViNDk1ZjA5MzU3MDMyNjFiZS4u
YzE3ZmNiMzljY2QxNjZiMDJlZTE3OTlmNGZlZmU5MjBlNjkzZmMzMCAxMDA2NDQKLS0tIGEvU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlcjY0LmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVyNjQuY3BwCkBAIC04Nyw5ICs4
NywxNSBAQCB2b2lkIENhbGxGcmFtZVNodWZmbGVyOjplbWl0Qm94KENhY2hlZFJlY292ZXJ5JiBj
YWNoZWRSZWNvdmVyeSkKICAgICAgICAgICAgIG1faml0Lnplcm9FeHRlbmQzMlRvUHRyKAogICAg
ICAgICAgICAgICAgIGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkuZ3ByKCksCiAgICAgICAgICAg
ICAgICAgY2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKS5ncHIoKSk7Ci0gICAgICAgICAgICAvLyBX
ZSBoYXZlIHRvIGRvIHRoaXMgdGhlIGhhcmQgd2F5LgotICAgICAgICAgICAgbV9qaXQub3I2NChN
YWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KFRhZ1R5cGVOdW1iZXIpLAotICAgICAgICAgICAg
ICAgIGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkuZ3ByKCkpOworICAgICAgICAgICAgbV9sb2Nr
ZWRSZWdpc3RlcnMuc2V0KGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkuZ3ByKCkpOworICAgICAg
ICAgICAgaWYgKHRyeUFjcXVpcmVUYWdUeXBlTnVtYmVyKCkpCisgICAgICAgICAgICAgICAgbV9q
aXQub3I2NChtX3RhZ1R5cGVOdW1iZXIsIGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkuZ3ByKCkp
OworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSB0byBkbyB0
aGlzIHRoZSBoYXJkIHdheQorICAgICAgICAgICAgICAgIG1faml0Lm9yNjQoTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW02NChUYWdUeXBlTnVtYmVyKSwKKyAgICAgICAgICAgICAgICAgICAgY2Fj
aGVkUmVjb3ZlcnkucmVjb3ZlcnkoKS5ncHIoKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBtX2xvY2tlZFJlZ2lzdGVycy5jbGVhcihjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLmdwcigp
KTsKICAgICAgICAgICAgIGNhY2hlZFJlY292ZXJ5LnNldFJlY292ZXJ5KAogICAgICAgICAgICAg
ICAgIFZhbHVlUmVjb3Zlcnk6OmluR1BSKGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkuZ3ByKCks
IERhdGFGb3JtYXRKUykpOwogICAgICAgICAgICAgaWYgKHZlcmJvc2UpCkBAIC0xNDEsNyArMTQ3
LDEyIEBAIHZvaWQgQ2FsbEZyYW1lU2h1ZmZsZXI6OmVtaXRCb3goQ2FjaGVkUmVjb3ZlcnkmIGNh
Y2hlZFJlY292ZXJ5KQogICAgICAgICAgICAgQVNTRVJUKHJlc3VsdEdQUiAhPSBJbnZhbGlkR1BS
UmVnKTsKICAgICAgICAgICAgIG1faml0LnB1cmlmeU5hTihjYWNoZWRSZWNvdmVyeS5yZWNvdmVy
eSgpLmZwcigpKTsKICAgICAgICAgICAgIG1faml0Lm1vdmVEb3VibGVUbzY0KGNhY2hlZFJlY292
ZXJ5LnJlY292ZXJ5KCkuZnByKCksIHJlc3VsdEdQUik7Ci0gICAgICAgICAgICBtX2ppdC5zdWI2
NChNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KFRhZ1R5cGVOdW1iZXIpLCByZXN1bHRHUFIp
OworICAgICAgICAgICAgbV9sb2NrZWRSZWdpc3RlcnMuc2V0KHJlc3VsdEdQUik7CisgICAgICAg
ICAgICBpZiAodHJ5QWNxdWlyZVRhZ1R5cGVOdW1iZXIoKSkKKyAgICAgICAgICAgICAgICBtX2pp
dC5zdWI2NChtX3RhZ1R5cGVOdW1iZXIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBlbHNlCisg
ICAgICAgICAgICAgICAgbV9qaXQuc3ViNjQoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChU
YWdUeXBlTnVtYmVyKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIG1fbG9ja2VkUmVnaXN0ZXJz
LmNsZWFyKHJlc3VsdEdQUik7CiAgICAgICAgICAgICB1cGRhdGVSZWNvdmVyeShjYWNoZWRSZWNv
dmVyeSwgVmFsdWVSZWNvdmVyeTo6aW5HUFIocmVzdWx0R1BSLCBEYXRhRm9ybWF0SlMpKTsKICAg
ICAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgIGRhdGFMb2coIiBpbnRvICIs
IGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCksICJcbiIpOwpAQCAtMzY2LDYgKzM3NywyMSBAQCB2
b2lkIENhbGxGcmFtZVNodWZmbGVyOjplbWl0RGlzcGxhY2UoQ2FjaGVkUmVjb3ZlcnkmIGNhY2hl
ZFJlY292ZXJ5KQogCiAgICAgQVNTRVJUKG1fcmVnaXN0ZXJzW3dhbnRlZFJlZ10gPT0gJmNhY2hl
ZFJlY292ZXJ5KTsKIH0KKyAgICAKK2Jvb2wgQ2FsbEZyYW1lU2h1ZmZsZXI6OnRyeUFjcXVpcmVU
YWdUeXBlTnVtYmVyKCkKK3sKKyAgICBpZiAobV90YWdUeXBlTnVtYmVyICE9IEludmFsaWRHUFJS
ZWcpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgbV90YWdUeXBlTnVtYmVyID0gZ2V0RnJl
ZUdQUigpOworCisgICAgaWYgKG1fdGFnVHlwZU51bWJlciA9PSBJbnZhbGlkR1BSUmVnKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBtX2xvY2tlZFJlZ2lzdGVycy5zZXQobV90YWdUeXBl
TnVtYmVyKTsKKyAgICBtX2ppdC5tb3ZlKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoVGFn
VHlwZU51bWJlciksIG1fdGFnVHlwZU51bWJlcik7CisgICAgcmV0dXJuIHRydWU7Cit9CiAKIH0g
Ly8gbmFtZXNwYWNlIEpTQwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVENhbGwuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAppbmRl
eCAzZmZlNzVkNGQ2M2JiMmViNDhlOTRlNWZhYTY0NDg3NmMxNDM4MDQ3Li5kNDA2ZDViNmZlYzkx
NTBjZjM2NmNmOThiYzQ3NTBkZmY5MzMzZDQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVENhbGwuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
Q2FsbC5jcHAKQEAgLTE5Myw2ICsxOTMsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChPcGNv
ZGVJRCBvcGNvZGVJRCwgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCB1bnNpZ25lZCBjYQogCiAg
ICAgaWYgKG9wY29kZUlEID09IG9wX3RhaWxfY2FsbCkgewogICAgICAgICBDYWxsRnJhbWVTaHVm
ZmxlRGF0YSBzaHVmZmxlRGF0YTsKKyAgICAgICAgc2h1ZmZsZURhdGEudGFnVHlwZU51bWJlciA9
IEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlcjsKICAgICAgICAgc2h1ZmZsZURhdGEubnVt
TG9jYWxzID0KICAgICAgICAgICAgIGluc3RydWN0aW9uWzRdLnUub3BlcmFuZCAtIHNpemVvZihD
YWxsZXJGcmFtZUFuZFBDKSAvIHNpemVvZihSZWdpc3Rlcik7CiAgICAgICAgIHNodWZmbGVEYXRh
LmFyZ3MucmVzaXplKGluc3RydWN0aW9uWzNdLnUub3BlcmFuZCk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9S
ZWcuaAppbmRleCA5ZjZhZDFjMGNkMzQ4NmQ2ZGNiNzkyMGNhYTZmNTFiOTc1MmJlMmIwLi4xNDFi
ZmM1ZWViM2FlODYzZjRhM2QzYzQxYTFhZmYwMjBhZWQxZmU5IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L1JlZy5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
UmVnLmgKQEAgLTU1LDYgKzU1LDExIEBAIHB1YmxpYzoKICAgICAgICAgOiBtX2luZGV4KGludmFs
aWQoKSkKICAgICB7CiAgICAgfQorCisgICAgUmVnKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVl
VHlwZSkKKyAgICAgICAgOiBtX2luZGV4KGRlbGV0ZWQoKSkKKyAgICB7CisgICAgfQogICAgIAog
ICAgIFJlZyhNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCByZWcpCiAgICAgICAgIDogbV9pbmRl
eChNYWNyb0Fzc2VtYmxlcjo6cmVnaXN0ZXJJbmRleChyZWcpKQpAQCAtMTAyLDYgKzEwNyw4IEBA
IHB1YmxpYzoKICAgICBib29sIGlzU2V0KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleCAhPSBpbnZh
bGlkKCk7IH0KICAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFpc1NldCgpOyB9
CiAgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuIGlzU2V0KCk7IH0K
KworICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX2lu
ZGV4ID09IGRlbGV0ZWQoKTsgfQogICAgIAogICAgIGJvb2wgaXNHUFIoKSBjb25zdAogICAgIHsK
QEAgLTE2NSwxMiArMTcyLDMyIEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBzdGF0aWMgdWlu
dDhfdCBpbnZhbGlkKCkgeyByZXR1cm4gMHhmZjsgfQorCisgICAgc3RhdGljIHVpbnQ4X3QgZGVs
ZXRlZCgpIHsgcmV0dXJuIDB4ZmU7IH0KICAgICAKICAgICB1aW50OF90IG1faW5kZXg7CiB9Owog
CitzdHJ1Y3QgUmVnSGFzaCB7CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgUmVnJiBr
ZXkpIHsgcmV0dXJuIGtleS5oYXNoKCk7IH0KKyAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBS
ZWcmIGEsIGNvbnN0IFJlZyYgYikgeyByZXR1cm4gYSA9PSBiOyB9CisgICAgc3RhdGljIGNvbnN0
IGJvb2wgc2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOworfTsKKwogfSAvLyBu
YW1lc3BhY2UgSlNDCiAKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBz
dHJ1Y3QgRGVmYXVsdEhhc2g7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0SGFzaDxKU0M6OlJl
Zz4geworICAgIHR5cGVkZWYgSlNDOjpSZWdIYXNoIEhhc2g7Cit9OworCit0ZW1wbGF0ZTx0eXBl
bmFtZSBUPiBzdHJ1Y3QgSGFzaFRyYWl0czsKK3RlbXBsYXRlPD4gc3RydWN0IEhhc2hUcmFpdHM8
SlNDOjpSZWc+IDogU2ltcGxlQ2xhc3NIYXNoVHJhaXRzPEpTQzo6UmVnPiB7IH07CisKK30gLy8g
bmFtZXNwYWNlIFdURgorCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKIAogI2VuZGlmIC8vIFJlZ19o
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>261901</attachid>
            <date>2015-09-24 16:00:41 -0700</date>
            <delta_ts>2015-09-26 10:44:30 -0700</delta_ts>
            <desc>Rebased patch</desc>
            <filename>148664.patch</filename>
            <type>text/plain</type>
            <size>81150</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTkwMjIwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwNCBA
QAorMjAxNS0wOS0yNCAgYmFzaWxlX2NsZW1lbnRAYXBwbGUuY29tICA8YmFzaWxlX2NsZW1lbnRA
YXBwbGUuY29tQDI2OGY0NWNjLWNkMDktMDQxMC1hYjNjLWQ1MjY5MWI0ZGJmYz4KKworICAgICAg
ICBbRVM2XSBJbXBsZW1lbnQgdGFpbCBjYWxscyBpbiB0aGUgRlRMCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDg2NjQKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIGltcGxlbWVudHMgdGhl
IHRhaWwgY2FsbCBvcGNvZGVzIGluIHRoZSBGVEwsIG1ha2luZyB0YWlsCisgICAgICAgIGNhbGxz
IGF2YWlsYWJsZSB0aHJvdWdoIGFsbCB0aWVycy4gVGhlIGNoYW5nZXMgYXJlIHJlbGF0aXZlbHkK
KyAgICAgICAgc3RyYWlnaHRmb3J3YXJkLCBhbHRob3VnaCB0aGUgZnJhbWUgc2h1ZmZsZXIgaGFk
IHRvIGJlIGV4dGVuZGVkIHRvCisgICAgICAgIGhhbmRsZSB0aGUgcG9zc2liaWxpdHkgb2YgcnVu
bmluZyBvdXQgb2Ygc3RhY2sgd2hlbiBzcGlsbGluZyBvcgorICAgICAgICBidWlsZGluZyBhIHNs
b3cgcGF0aCBmcmFtZS4gVGhlIG90aGVyIHRpZXJzIGFsd2F5cyBlbnN1cmUgdGhhdCB3ZSBoYXZl
CisgICAgICAgIGVub3VnaCBzdGFjayBzcGFjZSB0byBidWlsZCB0aGUgbmV3IGZyYW1lIGF0IHRo
ZSBib3R0b20gb2YgdGhlIG9sZCBvbmUsCisgICAgICAgIGJ1dCB0aGF0IGlzIG5vdCB0cnVlIGZv
ciB0aGUgRlRMLgorCisgICAgICAgIE1vcmVvdmVyLCBmb3IgZWZmaWNpZW5jeSwgdGhpcyBhZGRz
IHRvIHRoZSBzaHVmZmxlciB0aGUgYWJpbGl0eSB0bworICAgICAgICByZWNvcmQgdGhlIHN0YXRl
IG9mIHRoZSBUYWdUeXBlTnVtYmVyLCBhbmQgdG8gcmUtdXNlIHRoZSBzYW1lIHJlZ2lzdGVyCisg
ICAgICAgIHdoZW4gZG9pbmcgc2V2ZXJhbCBjb25zZWN1dGl2ZSBpbnRlZ2VyIGJveGluZ3Mgd2l0
aCBubyBzcGlsbGluZyBpbgorICAgICAgICBiZXR3ZWVuLgorCisgICAgICAgICogSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBieXRlY29kZS9WYWx1
ZVJlY292ZXJ5Lmg6CisgICAgICAgIChKU0M6OlZhbHVlUmVjb3Zlcnk6OmluUmVnaXN0ZXIpOgor
ICAgICAgICAqIGRmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGluaW5nKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRl
Q29kZVBhcnNlcjo6cGFyc2VCbG9jayk6CisgICAgICAgICogZGZnL0RGR05vZGUuaDoKKyAgICAg
ICAgKEpTQzo6REZHOjpOb2RlOjppc0Z1bmN0aW9uVGVybWluYWwpOgorICAgICAgICAqIGRmZy9E
RkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJ
VDo6ZW1pdENhbGwpOgorICAgICAgICAqIGRmZy9ERkdUaWVyVXBDaGVja0luamVjdGlvblBoYXNl
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpUaWVyVXBDaGVja0luamVjdGlvblBoYXNlOjpydW4p
OgorICAgICAgICAqIGZ0bC9GVExDYXBhYmlsaXRpZXMuY3BwOgorICAgICAgICAoSlNDOjpGVEw6
OmNhbkNvbXBpbGUpOgorICAgICAgICAqIGZ0bC9GVExDb21waWxlLmNwcDoKKyAgICAgICAgKEpT
Qzo6RlRMOjptbUFsbG9jYXRlRGF0YVNlY3Rpb24pOgorICAgICAgICAqIGZ0bC9GVExJbmxpbmVD
YWNoZVNpemUuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OnNpemVPZlRhaWxDYWxsVmFyYXJncyk6
CisgICAgICAgIChKU0M6OkZUTDo6c2l6ZU9mVGFpbENhbGxGb3J3YXJkVmFyYXJncyk6CisgICAg
ICAgIChKU0M6OkZUTDo6c2l6ZU9mSUNGb3IpOgorICAgICAgICAqIGZ0bC9GVExJbmxpbmVDYWNo
ZVNpemUuaDoKKyAgICAgICAgKiBmdGwvRlRMSlNDYWxsLmNwcDoKKyAgICAgICAgKEpTQzo6RlRM
OjpKU0NhbGw6OkpTQ2FsbCk6CisgICAgICAgICogZnRsL0ZUTEpTQ2FsbEJhc2UuY3BwOgorICAg
ICAgICAoSlNDOjpGVEw6OkpTQ2FsbEJhc2U6OmVtaXQpOgorICAgICAgICAoSlNDOjpGVEw6OkpT
Q2FsbEJhc2U6OmxpbmspOgorICAgICAgICAqIGZ0bC9GVExKU0NhbGxCYXNlLmg6CisgICAgICAg
ICogZnRsL0ZUTEpTQ2FsbFZhcmFyZ3MuY3BwOgorICAgICAgICAoSlNDOjpGVEw6OkpTQ2FsbFZh
cmFyZ3M6OkpTQ2FsbFZhcmFyZ3MpOgorICAgICAgICAoSlNDOjpGVEw6OkpTQ2FsbFZhcmFyZ3M6
OmVtaXQpOgorICAgICAgICAqIGZ0bC9GVExKU1RhaWxDYWxsLmNwcDogQWRkZWQuCisgICAgICAg
IChKU0M6OkZUTDo6Z2V0UmVnaXN0ZXJXaXRoQWRkZW5kKToKKyAgICAgICAgKEpTQzo6RlRMOjpy
ZWNvdmVyeUZvcik6CisgICAgICAgIChKU0M6OkZUTDo6c2l6ZUZvcik6CisgICAgICAgIChKU0M6
OkZUTDo6SlNUYWlsQ2FsbDo6SlNUYWlsQ2FsbCk6CisgICAgICAgIChKU0M6OkZUTDo6bV9pbnN0
cnVjdGlvbk9mZnNldCk6CisgICAgICAgIChKU0M6OkZUTDo6SlNUYWlsQ2FsbDo6ZW1pdCk6Cisg
ICAgICAgICogZnRsL0ZUTEpTVGFpbENhbGwuaDogQ29waWVkIGZyb20gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExKU0NhbGxCYXNlLmguCisgICAgICAgIChKU0M6OkZUTDo6SlNUYWlsQ2Fs
bDo6c3RhY2ttYXBJRCk6CisgICAgICAgIChKU0M6OkZUTDo6SlNUYWlsQ2FsbDo6ZXN0aW1hdGVk
U2l6ZSk6CisgICAgICAgIChKU0M6OkZUTDo6SlNUYWlsQ2FsbDo6bnVtQXJndW1lbnRzKToKKyAg
ICAgICAgKEpTQzo6RlRMOjpKU1RhaWxDYWxsOjpvcGVyYXRvcjwpOgorICAgICAgICAqIGZ0bC9G
VExMb2NhdGlvbi5oOgorICAgICAgICAoSlNDOjpGVEw6OkxvY2F0aW9uOjpvcGVyYXRvciBib29s
KToKKyAgICAgICAgKEpTQzo6RlRMOjpMb2NhdGlvbjo6b3BlcmF0b3IhKToKKyAgICAgICAgKiBm
dGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJE
RkdUb0xMVk06Omxvd2VyKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9MTFZN
Ojpjb21waWxlTm9kZSk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvTExWTTo6
Y29tcGlsZVRhaWxDYWxsKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9MTFZN
Ojpjb21waWxlQ2FsbE9yQ29uc3RydWN0VmFyYXJncyk6CisgICAgICAgIChKU0M6OkZUTDo6REZH
OjpMb3dlckRGR1RvTExWTTo6Y2FsbFByZWZsaWdodCk6CisgICAgICAgIChKU0M6OkZUTDo6REZH
OjpMb3dlckRGR1RvTExWTTo6ZXhpdFZhbHVlRm9yVGFpbENhbGwpOgorICAgICAgICAqIGZ0bC9G
VExTdGF0ZS5oOgorICAgICAgICAqIGppdC9Bc3NlbWJseUhlbHBlcnMuY3BwOgorICAgICAgICAo
SlNDOjpBc3NlbWJseUhlbHBlcnM6OmVtaXRFeGNlcHRpb25DaGVjayk6CisgICAgICAgICogaml0
L0NhbGxGcmFtZVNodWZmbGVEYXRhLmg6CisgICAgICAgICogaml0L0NhbGxGcmFtZVNodWZmbGVy
LmNwcDoKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZsZXI6OkNhbGxGcmFtZVNodWZmbGVy
KToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZsZXI6OmR1bXApOgorICAgICAgICAoSlND
OjpDYWxsRnJhbWVTaHVmZmxlcjo6c3BpbGwpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVm
Zmxlcjo6ZXh0ZW5kRnJhbWVJZk5lZWRlZCk6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZm
bGVyOjpwcmVwYXJlRm9yU2xvd1BhdGgpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxl
cjo6cHJlcGFyZUFueSk6CisgICAgICAgICogaml0L0NhbGxGcmFtZVNodWZmbGVyLmg6CisgICAg
ICAgIChKU0M6OkNhbGxGcmFtZVNodWZmbGVyOjpyZXN0b3JlR1BSKToKKyAgICAgICAgKEpTQzo6
Q2FsbEZyYW1lU2h1ZmZsZXI6OmdldEZyZWVSZWdpc3Rlcik6CisgICAgICAgIChKU0M6OkNhbGxG
cmFtZVNodWZmbGVyOjpnZXRGcmVlVGVtcEdQUik6CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNo
dWZmbGVyOjplbnN1cmVUZW1wR1BSKToKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZsZXI6
OmFkZE5ldyk6CisgICAgICAgICogaml0L0NhbGxGcmFtZVNodWZmbGVyNjQuY3BwOgorICAgICAg
ICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6ZW1pdEJveCk6CisgICAgICAgIChKU0M6OkNhbGxG
cmFtZVNodWZmbGVyOjp0cnlBY3F1aXJlVGFnVHlwZU51bWJlcik6CisgICAgICAgICogaml0L0pJ
VENhbGwuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVPcENhbGwpOgorICAgICAgICAq
IGppdC9SZWcuaDoKKyAgICAgICAgKEpTQzo6UmVnOjpSZWcpOgorICAgICAgICAoSlNDOjpSZWc6
OmlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKToKKyAgICAgICAgKEpTQzo6UmVnOjpkZWxldGVkKToK
KyAgICAgICAgKEpTQzo6UmVnSGFzaDo6aGFzaCk6CisgICAgICAgIChKU0M6OlJlZ0hhc2g6OmVx
dWFsKToKKwogMjAxNS0wOS0yNCAgTWljaGFlbCBTYWJvZmYgIDxtc2Fib2ZmQGFwcGxlLmNvbT4K
IAogICAgICAgICBbRVM2XSBJbXBsZW1lbnQgdGFpbCBjYWxscyBpbiB0aGUgREZHCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAxOTAyMTkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTkwMyw2
ICs5MDMsNyBAQCBpZiAoRU5BQkxFX0ZUTF9KSVQpCiAgICAgICAgIGZ0bC9GVExKU0NhbGwuY3Bw
CiAgICAgICAgIGZ0bC9GVExKU0NhbGxCYXNlLmNwcAogICAgICAgICBmdGwvRlRMSlNDYWxsVmFy
YXJncy5jcHAKKyAgICAgICAgZnRsL0ZUTEpTVGFpbENhbGwuY3BwCiAgICAgICAgIGZ0bC9GVExM
aW5rLmNwcAogICAgICAgICBmdGwvRlRMTG9jYXRpb24uY3BwCiAgICAgICAgIGZ0bC9GVExMb3dl
ckRGR1RvTExWTS5jcHAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29y
ZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJv
agkocmV2aXNpb24gMTkwMjE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNTM5
LDYgKzUzOSw3IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxmdGxcRlRMSlNDYWxsLmNw
cCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGZ0bFxGVExKU0NhbGxCYXNlLmNwcCIg
Lz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGZ0bFxGVExKU0NhbGxWYXJhcmdzLmNwcCIg
Lz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGZ0bFxGVExKU1RhaWxDYWxsLmNwcCIgLz4K
ICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGZ0bFxGVExMaW5rLmNwcCIgLz4KICAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXGZ0bFxGVExMb2NhdGlvbi5jcHAiIC8+CiAgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxmdGxcRlRMTG93ZXJERkdUb0xMVk0uY3BwIiAvPgpAQCAtMTI5OCw2ICsx
Mjk5LDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGZ0bFxGVExKU0NhbGwuaCIgLz4K
ICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGZ0bFxGVExKU0NhbGxCYXNlLmgiIC8+CiAgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxmdGxcRlRMSlNDYWxsVmFyYXJncy5oIiAvPgorICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cZnRsXEZUTEpTVGFpbENhbGwuaCIgLz4KICAgICA8Q2xJbmNs
dWRlIEluY2x1ZGU9Ii4uXGZ0bFxGVExMaW5rLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRl
PSIuLlxmdGxcRlRMTG9jYXRpb24uaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGZ0
bFxGVExMb3dlckRGR1RvTExWTS5oIiAvPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvai5maWx0ZXJzCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0ph
dmFTY3JpcHRDb3JlLnZjeHByb2ouZmlsdGVycwkocmV2aXNpb24gMTkwMjE5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4
cHJvai5maWx0ZXJzCSh3b3JraW5nIGNvcHkpCkBAIC0xNTc4LDYgKzE1NzgsOSBAQAogICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5cZnRsXEZUTEpTQ2FsbC5jcHAiPgogICAgICAgPEZpbHRlcj5m
dGw8L0ZpbHRlcj4KICAgICA8L0NsQ29tcGlsZT4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XGZ0bFxGVExKU1RhaWxDYWxsLmNwcCI+CisgICAgICA8RmlsdGVyPmZ0bDwvRmlsdGVyPgorICAg
IDwvQ2xDb21waWxlPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZnRsXEZUTExpbmsuY3Bw
Ij4KICAgICAgIDxGaWx0ZXI+ZnRsPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+CkBAIC00MTQx
LDYgKzQxNDQsOSBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZnRsXEZUTEpTQ2FsbC5o
Ij4KICAgICAgIDxGaWx0ZXI+ZnRsPC9GaWx0ZXI+CiAgICAgPC9DbEluY2x1ZGU+CisgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxmdGxcRlRMSlNUYWlsQ2FsbC5oIj4KKyAgICAgIDxGaWx0ZXI+
ZnRsPC9GaWx0ZXI+CisgICAgPC9DbEluY2x1ZGU+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxmdGxcRlRMTGluay5oIj4KICAgICAgIDxGaWx0ZXI+ZnRsPC9GaWx0ZXI+CiAgICAgPC9DbElu
Y2x1ZGU+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTkwMjE5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9q
ZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTk3OCw2ICs5NzgsOCBAQAogCQk2MjNBMzdF
QzFCODdBN0MwMDA3NTQyMDkgLyogUmVnaXN0ZXJNYXAuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDYyM0EzN0VCMUI4N0E3QkQwMDc1NDIwOSAvKiBSZWdp
c3Rlck1hcC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTYyNzY3MzIzMUI2ODBDMUUwMEZEOUYyRSAvKiBDYWxsTW9kZS5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2Mjc2NzMyMTFCNjgwQzFFMDBGRDlG
MkUgLyogQ2FsbE1vZGUuY3BwICovOyB9OwogCQk2Mjc2NzMyNDFCNjgwQzFFMDBGRDlGMkUgLyog
Q2FsbE1vZGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDYyNzY3MzIyMUI2ODBDMUUwMEZEOUYyRSAvKiBDYWxsTW9kZS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTYyNzc0REFBMUI4RDRCMTkwMDA2RjA1
QSAvKiBGVExKU1RhaWxDYWxsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmls
ZTsgZmlsZVJlZiA9IDYyNzc0REE4MUI4RDRCMTkwMDA2RjA1QSAvKiBGVExKU1RhaWxDYWxsLmNw
cCAqLzsgfTsKKwkJNjI3NzREQUIxQjhENEIxOTAwMDZGMDVBIC8qIEZUTEpTVGFpbENhbGwuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDYyNzc0REE5MUI4
RDRCMTkwMDA2RjA1QSAvKiBGVExKU1RhaWxDYWxsLmggKi87IH07CiAJCTYyRDJEMzhGMUFERjEw
M0YwMDAyMDZDMSAvKiBGdW5jdGlvblJhcmVEYXRhLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDYyRDJEMzhEMUFERjEwM0YwMDAyMDZDMSAvKiBGdW5j
dGlvblJhcmVEYXRhLmNwcCAqLzsgfTsKIAkJNjJEMkQzOTAxQURGMTAzRjAwMDIwNkMxIC8qIEZ1
bmN0aW9uUmFyZURhdGEuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDYyRDJEMzhFMUFERjEwM0YwMDAyMDZDMSAvKiBGdW5jdGlvblJhcmVEYXRhLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJNjJENzU1RDQx
Qjg0RkIzRDAwMTgwMUZBIC8qIENhbGxGcmFtZVNodWZmbGVyNjQuY3BwIGluIFNvdXJjZXMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjJENzU1RDMxQjg0RkIzOTAwMTgwMUZB
IC8qIENhbGxGcmFtZVNodWZmbGVyNjQuY3BwICovOyB9OwpAQCAtMjc5Nyw2ICsyNzk5LDggQEAK
IAkJNjIzQTM3RUIxQjg3QTdCRDAwNzU0MjA5IC8qIFJlZ2lzdGVyTWFwLmggKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlZ2lzdGVyTWFwLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTYyNzY3MzIxMUI2ODBDMUUwMEZEOUYyRSAvKiBDYWxsTW9kZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDYWxsTW9kZS5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTYyNzY3MzIyMUI2ODBDMUUwMEZEOUYyRSAvKiBDYWxsTW9kZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDYWxsTW9kZS5oOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQk2Mjc3NERBODFCOEQ0QjE5MDAwNkYwNUEgLyogRlRMSlNUYWls
Q2FsbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBGVExKU1RhaWxD
YWxsLmNwcDsgcGF0aCA9IGZ0bC9GVExKU1RhaWxDYWxsLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKKwkJNjI3NzREQTkxQjhENEIxOTAwMDZGMDVBIC8qIEZUTEpTVGFpbENhbGwuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRlRMSlNUYWlsQ2FsbC5oOyBwYXRoID0g
ZnRsL0ZUTEpTVGFpbENhbGwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJNjJBOUEy
OUUxQjBCRUQ0ODAwQkQ1NENBIC8qIERGR0xhenlOb2RlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgbmFtZSA9IERGR0xhenlOb2RlLmNwcDsgcGF0aCA9IGRmZy9ERkdMYXp5Tm9k
ZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTYyQTlBMjlGMUIwQkVENDgwMEJE
NTRDQSAvKiBERkdMYXp5Tm9kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBE
RkdMYXp5Tm9kZS5oOyBwYXRoID0gZGZnL0RGR0xhenlOb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTYyRDJEMzhEMUFERjEwM0YwMDAyMDZDMSAvKiBGdW5jdGlvblJhcmVEYXRh
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZ1bmN0aW9uUmFyZURh
dGEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzk3Nyw2ICszOTgxLDggQEAK
IAkJCQkwRkQxMjAyRTFBOEFFRDEyMDAwRjUyODAgLyogRlRMSlNDYWxsQmFzZS5oICovLAogCQkJ
CTBGRDEyMDMxMUE4Qzg1QkQwMDBGNTI4MCAvKiBGVExKU0NhbGxWYXJhcmdzLmNwcCAqLywKIAkJ
CQkwRkQxMjAzMjFBOEM4NUJEMDAwRjUyODAgLyogRlRMSlNDYWxsVmFyYXJncy5oICovLAorCQkJ
CTYyNzc0REE4MUI4RDRCMTkwMDA2RjA1QSAvKiBGVExKU1RhaWxDYWxsLmNwcCAqLywKKwkJCQk2
Mjc3NERBOTFCOEQ0QjE5MDAwNkYwNUEgLyogRlRMSlNUYWlsQ2FsbC5oICovLAogCQkJCTBGOEYy
QjkzMTcyRTA0OUUwMDdEQkRBNSAvKiBGVExMaW5rLmNwcCAqLywKIAkJCQkwRjhGMkI5NDE3MkUw
NDlFMDA3REJEQTUgLyogRlRMTGluay5oICovLAogCQkJCTBGQ0VGQUREMTgwNzM4QzAwMDQ3MkNF
NCAvKiBGVExMb2NhdGlvbi5jcHAgKi8sCkBAIC02MzIwLDYgKzYzMjYsNyBAQAogCQkJCTBGNkIx
Q0I2MTg1RkM5RTkwMDg0NUQ5NyAvKiBGVExKU0NhbGwuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
RDEyMDMwMUE4QUVEMTIwMDBGNTI4MCAvKiBGVExKU0NhbGxCYXNlLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRkQxMjAzNDFBOEM4NUJEMDAwRjUyODAgLyogRlRMSlNDYWxsVmFyYXJncy5oIGluIEhl
YWRlcnMgKi8sCisJCQkJNjI3NzREQUIxQjhENEIxOTAwMDZGMDVBIC8qIEZUTEpTVGFpbENhbGwu
aCBpbiBIZWFkZXJzICovLAogCQkJCTBGOEYyQjk2MTcyRTA0QTMwMDdEQkRBNSAvKiBGVExMaW5r
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkNFRkFFMDE4MDczOEMwMDA0NzJDRTQgLyogRlRMTG9j
YXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGRUEwQTEwMTcwNTEzREIwMEJCNzIyQyAvKiBG
VExMb3dlckRGR1RvTExWTS5oIGluIEhlYWRlcnMgKi8sCkBAIC03NjkzLDYgKzc3MDAsNyBAQAog
CQkJCTBGNkIxQ0I1MTg1RkM5RTkwMDg0NUQ5NyAvKiBGVExKU0NhbGwuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMEZEMTIwMkYxQThBRUQxMjAwMEY1MjgwIC8qIEZUTEpTQ2FsbEJhc2UuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEZEMTIwMzMxQThDODVCRDAwMEY1MjgwIC8qIEZUTEpTQ2FsbFZh
cmFyZ3MuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJNjI3NzREQUExQjhENEIxOTAwMDZGMDVBIC8q
IEZUTEpTVGFpbENhbGwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY4RjJCOTUxNzJFMDRBMDAw
N0RCREE1IC8qIEZUTExpbmsuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEZDRUZBREYxODA3MzhD
MDAwNDcyQ0U0IC8qIEZUTExvY2F0aW9uLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRUEwQTBG
MTcwNTEzREIwMEJCNzIyQyAvKiBGVExMb3dlckRGR1RvTExWTS5jcHAgaW4gU291cmNlcyAqLywK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIu
Y3BwCShyZXZpc2lvbiAxOTAyMjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5
dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg4MiwxMSArMTg4MiwxNSBAQCBi
b29sIEJ5dGVDb2RlUGFyc2VyOjpoYW5kbGVJbmxpbmluZygKICAgICAgICAgbV9jdXJyZW50SW5k
ZXggPSBuZXh0T2Zmc2V0OwogICAgICAgICBtX2V4aXRPSyA9IHRydWU7CiAgICAgICAgIHByb2Nl
c3NTZXRMb2NhbFF1ZXVlKCk7IC8vIFRoaXMgb25seSBjb21lcyBpbnRvIHBsYXkgZm9yIGludHJp
bnNpY3MsIHNpbmNlIG5vcm1hbCBpbmxpbmVkIGNvZGUgd2lsbCBsZWF2ZSBhbiBlbXB0eSBxdWV1
ZS4KLSAgICAgICAgYWRkVG9HcmFwaChKdW1wKTsKKyAgICAgICAgaWYgKE5vZGUqIHRlcm1pbmFs
ID0gbV9jdXJyZW50QmxvY2stPnRlcm1pbmFsKCkpCisgICAgICAgICAgICBBU1NFUlRfVU5VU0VE
KHRlcm1pbmFsLCB0ZXJtaW5hbC0+b3AoKSA9PSBUYWlsQ2FsbCB8fCB0ZXJtaW5hbC0+b3AoKSA9
PSBUYWlsQ2FsbFZhcmFyZ3MpOworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGFkZFRvR3Jh
cGgoSnVtcCk7CisgICAgICAgICAgICBsYW5kaW5nQmxvY2tzLmFwcGVuZChtX2N1cnJlbnRCbG9j
ayk7CisgICAgICAgIH0KICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICBkYXRhTG9n
KCJNYXJraW5nICIsIFJhd1BvaW50ZXIobV9jdXJyZW50QmxvY2spLCAiIGFzIGxpbmtlZCAodGFp
bCBvZiBwb2x5IGlubGluZWUpXG4iKTsKICAgICAgICAgbV9jdXJyZW50QmxvY2stPmRpZExpbmso
KTsKLSAgICAgICAgbGFuZGluZ0Jsb2Nrcy5hcHBlbmQobV9jdXJyZW50QmxvY2spOwogCiAgICAg
ICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgZGF0YUxvZygiRmluaXNoZWQgaW5saW5pbmcg
IiwgY2FsbExpbmtTdGF0dXNbaV0sICIgYXQgIiwgY3VycmVudENvZGVPcmlnaW4oKSwgIi5cbiIp
OwpAQCAtMTkxOSw4ICsxOTIzLDEyIEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGlu
aW5nKAogICAgIG1fY3VycmVudEluZGV4ID0gbmV4dE9mZnNldDsKICAgICBtX2V4aXRPSyA9IHRy
dWU7IC8vIE9yaWdpbiBjaGFuZ2VkLCBzbyBpdCdzIGZpbmUgdG8gZXhpdCBhZ2Fpbi4KICAgICBw
cm9jZXNzU2V0TG9jYWxRdWV1ZSgpOwotICAgIGFkZFRvR3JhcGgoSnVtcCk7Ci0gICAgbGFuZGlu
Z0Jsb2Nrcy5hcHBlbmQobV9jdXJyZW50QmxvY2spOworICAgIGlmIChOb2RlKiB0ZXJtaW5hbCA9
IG1fY3VycmVudEJsb2NrLT50ZXJtaW5hbCgpKQorICAgICAgICBBU1NFUlRfVU5VU0VEKHRlcm1p
bmFsLCB0ZXJtaW5hbC0+b3AoKSA9PSBUYWlsQ2FsbCB8fCB0ZXJtaW5hbC0+b3AoKSA9PSBUYWls
Q2FsbFZhcmFyZ3MpOworICAgIGVsc2UgeworICAgICAgICBhZGRUb0dyYXBoKEp1bXApOworICAg
ICAgICBsYW5kaW5nQmxvY2tzLmFwcGVuZChtX2N1cnJlbnRCbG9jayk7CisgICAgfQogICAgIAog
ICAgIFJlZlB0cjxCYXNpY0Jsb2NrPiBjb250aW51YXRpb25CbG9jayA9IGFkb3B0UmVmKAogICAg
ICAgICBuZXcgQmFzaWNCbG9jayhVSU5UX01BWCwgbV9udW1Bcmd1bWVudHMsIG1fbnVtTG9jYWxz
LCBQTmFOKSk7CkBAIC0zNjY0LDcgKzM2NzIsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJz
ZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAgICAgLy8gV2UgY291bGQgYmUgdGhlIGR1bW15
IGp1bXAgdG8gYSByZXR1cm4gYWZ0ZXIgYSBub24taW5saW5lZCwgbm9uLWVtdWxhdGVkIHRhaWwg
Y2FsbCBpbiBhIHRlcm5hcnkgb3BlcmF0b3IKICAgICAgICAgICAgICAgICBOb2RlKiB0ZXJtaW5h
bCA9IG1fY3VycmVudEJsb2NrLT50ZXJtaW5hbCgpOwogICAgICAgICAgICAgICAgIEFTU0VSVF9V
TlVTRUQodGVybWluYWwsIHRlcm1pbmFsLT5vcCgpID09IFRhaWxDYWxsIHx8IHRlcm1pbmFsLT5v
cCgpID09IFRhaWxDYWxsVmFyYXJncyk7Ci0gICAgICAgICAgICAgICAgTEFTVF9PUENPREUob3Bf
cmV0KTsKKyAgICAgICAgICAgICAgICBMQVNUX09QQ09ERShvcF9qbXApOwogICAgICAgICAgICAg
fQogICAgICAgICAgICAgaW50IHJlbGF0aXZlT2Zmc2V0ID0gY3VycmVudEluc3RydWN0aW9uWzFd
LnUub3BlcmFuZDsKICAgICAgICAgICAgIGFkZFRvR3JhcGgoSnVtcCwgT3BJbmZvKG1fY3VycmVu
dEluZGV4ICsgcmVsYXRpdmVPZmZzZXQpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Tm9kZS5oCShyZXZpc2lvbiAxOTAyMjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTExOCw2ICsxMTE4LDE5IEBAIHN0cnVjdCBOb2Rl
IHsKICAgICAgICAgfQogICAgIH0KIAorICAgIGJvb2wgaXNGdW5jdGlvblRlcm1pbmFsKCkKKyAg
ICB7CisgICAgICAgIHN3aXRjaCAob3AoKSkgeworICAgICAgICBjYXNlIFJldHVybjoKKyAgICAg
ICAgY2FzZSBUYWlsQ2FsbDoKKyAgICAgICAgY2FzZSBUYWlsQ2FsbFZhcmFyZ3M6CisgICAgICAg
IGNhc2UgVGFpbENhbGxGb3J3YXJkVmFyYXJnczoKKyAgICAgICAgICAgIHJldHVybiB0cnVlOwor
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9Cisg
ICAgfQorCiAgICAgdW5zaWduZWQgdGFyZ2V0Qnl0ZWNvZGVPZmZzZXREdXJpbmdQYXJzaW5nKCkK
ICAgICB7CiAgICAgICAgIEFTU0VSVChpc0p1bXAoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDE5MDIy
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTc3MSw2ICs3NzEsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpl
bWl0Q2FsbChOb2RlKiBub2RlCiAgICAgICAgICAgICBjYWxsZWVHUFIgPSBjYWxsZWUuZ3ByKCk7
CiAgICAgICAgICAgICBjYWxsZWUudXNlKCk7CiAKKyAgICAgICAgICAgIHNodWZmbGVEYXRhLnRh
Z1R5cGVOdW1iZXIgPSBHUFJJbmZvOjp0YWdUeXBlTnVtYmVyUmVnaXN0ZXI7CiAgICAgICAgICAg
ICBzaHVmZmxlRGF0YS5udW1Mb2NhbHMgPSBtX2ppdC5ncmFwaCgpLmZyYW1lUmVnaXN0ZXJDb3Vu
dCgpOwogICAgICAgICAgICAgc2h1ZmZsZURhdGEuY2FsbGVlID0gVmFsdWVSZWNvdmVyeTo6aW5H
UFIoY2FsbGVlR1BSLCBEYXRhRm9ybWF0SlMpOwogICAgICAgICAgICAgc2h1ZmZsZURhdGEuYXJn
cy5yZXNpemUobnVtUGFzc2VkQXJncyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHVGllclVwQ2hlY2tJbmplY3Rpb25QaGFzZS5jcHAJKHJldmlz
aW9uIDE5MDIxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGllclVwQ2hlY2tJ
bmplY3Rpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk1LDcgKzk1LDcgQEAgcHVibGlj
OgogICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICBOb2RlQW5kSW5kZXgg
dGVybWluYWwgPSBibG9jay0+ZmluZFRlcm1pbmFsKCk7Ci0gICAgICAgICAgICBpZiAodGVybWlu
YWwubm9kZS0+b3AoKSA9PSBSZXR1cm4pIHsKKyAgICAgICAgICAgIGlmICh0ZXJtaW5hbC5ub2Rl
LT5pc0Z1bmN0aW9uVGVybWluYWwoKSkgewogICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5p
bnNlcnROb2RlKAogICAgICAgICAgICAgICAgICAgICB0ZXJtaW5hbC5pbmRleCwgU3BlY05vbmUs
IENoZWNrVGllclVwQXRSZXR1cm4sIHRlcm1pbmFsLm5vZGUtPm9yaWdpbik7CiAgICAgICAgICAg
ICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDYXBhYmlsaXRpZXMu
Y3BwCShyZXZpc2lvbiAxOTAyMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENh
cGFiaWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzMCwxMCArMTMwLDE2IEBAIGlubGlu
ZSBDYXBhYmlsaXR5TGV2ZWwgY2FuQ29tcGlsZShOb2RlKiAKICAgICBjYXNlIE5vdGlmeVdyaXRl
OgogICAgIGNhc2UgU3RvcmVCYXJyaWVyOgogICAgIGNhc2UgQ2FsbDoKKyAgICBjYXNlIFRhaWxD
YWxsOgorICAgIGNhc2UgVGFpbENhbGxJbmxpbmVkQ2FsbGVyOgogICAgIGNhc2UgQ29uc3RydWN0
OgogICAgIGNhc2UgQ2FsbFZhcmFyZ3M6Ci0gICAgY2FzZSBDYWxsRm9yd2FyZFZhcmFyZ3M6Cisg
ICAgY2FzZSBUYWlsQ2FsbFZhcmFyZ3M6CisgICAgY2FzZSBUYWlsQ2FsbFZhcmFyZ3NJbmxpbmVk
Q2FsbGVyOgogICAgIGNhc2UgQ29uc3RydWN0VmFyYXJnczoKKyAgICBjYXNlIENhbGxGb3J3YXJk
VmFyYXJnczoKKyAgICBjYXNlIFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3M6CisgICAgY2FzZSBUYWls
Q2FsbEZvcndhcmRWYXJhcmdzSW5saW5lZENhbGxlcjoKICAgICBjYXNlIENvbnN0cnVjdEZvcndh
cmRWYXJhcmdzOgogICAgIGNhc2UgTG9hZFZhcmFyZ3M6CiAgICAgY2FzZSBWYWx1ZVRvSW50MzI6
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAJKHJldmlzaW9u
IDE5MDIxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTYxOCw2ICs2MTgsMjIgQEAgc3RhdGljIHZvaWQgZml4RnVuY3Rpb25C
YXNlZE9uU3RhY2tNYXBzKAogICAgICAgICAgICAgY2FsbC5saW5rKHZtLCBsaW5rQnVmZmVyLCBz
dGF0ZS5maW5hbGl6ZXItPmhhbmRsZUV4Y2VwdGlvbnNMaW5rQnVmZmVyLT5lbnRyeXBvaW50KCkp
OwogICAgICAgICB9KTsKICAgICB9CisKKyAgICBhZGp1c3RDYWxsSUNzRm9yU3RhY2ttYXBzKHN0
YXRlLmpzVGFpbENhbGxzLCByZWNvcmRNYXApOworCisgICAgZm9yICh1bnNpZ25lZCBpID0gc3Rh
dGUuanNUYWlsQ2FsbHMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgIEpTVGFpbENhbGwmIGNhbGwg
PSBzdGF0ZS5qc1RhaWxDYWxsc1tpXTsKKworICAgICAgICBDQ2FsbEhlbHBlcnMgZmFzdFBhdGhK
SVQoJnZtLCBjb2RlQmxvY2spOworICAgICAgICBjYWxsLmVtaXQoKnN0YXRlLmppdENvZGUuZ2V0
KCksIGZhc3RQYXRoSklUKTsKKworICAgICAgICBjaGFyKiBzdGFydE9mSUMgPSBiaXR3aXNlX2Nh
c3Q8Y2hhcio+KGdlbmVyYXRlZEZ1bmN0aW9uKSArIGNhbGwubV9pbnN0cnVjdGlvbk9mZnNldDsK
KyAgICAgICAgc2l6ZV90IHNpemVPZklDID0gY2FsbC5lc3RpbWF0ZWRTaXplKCk7CisKKyAgICAg
ICAgZ2VuZXJhdGVJbmxpbmVJZlBvc3NpYmxlT3V0T2ZMaW5lSWZOb3Qoc3RhdGUsIHZtLCBjb2Rl
QmxvY2ssIGZhc3RQYXRoSklULCBzdGFydE9mSUMsIHNpemVPZklDLCAidGFpbCBjYWxsIGlubGlu
ZSBjYWNoZSIsIFsmXSAoTGlua0J1ZmZlciYgbGlua0J1ZmZlciwgQ0NhbGxIZWxwZXJzJiwgYm9v
bCkgeworICAgICAgICAgICAgY2FsbC5saW5rKHZtLCBsaW5rQnVmZmVyKTsKKyAgICAgICAgfSk7
CisgICAgfQogICAgIAogICAgIGF1dG8gaXRlciA9IHJlY29yZE1hcC5maW5kKHN0YXRlLmhhbmRs
ZVN0YWNrT3ZlcmZsb3dFeGNlcHRpb25TdGFja21hcElEKTsKICAgICAvLyBJdCdzIHNvcnQgb2Yg
cmVtb3RlbHkgcG9zc2libGUgdGhhdCB3ZSB3b24ndCBoYXZlIGFuIGluLWJhbmQgZXhjZXB0aW9u
IGhhbmRsaW5nCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTElubGluZUNhY2hl
U2l6ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbmxp
bmVDYWNoZVNpemUuY3BwCShyZXZpc2lvbiAxOTAyMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTElubGluZUNhY2hlU2l6ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgyLDYgKzgy
LDE1IEBAIHNpemVfdCBzaXplT2ZDYWxsVmFyYXJncygpCiAjZW5kaWYKIH0KIAorc2l6ZV90IHNp
emVPZlRhaWxDYWxsVmFyYXJncygpCit7CisjaWYgQ1BVKEFSTTY0KQorICAgIHJldHVybiAxODgg
KyBzaXplT2ZDYWxsVmFyYXJncygpOworI2Vsc2UKKyAgICByZXR1cm4gMTUxICsgc2l6ZU9mQ2Fs
bFZhcmFyZ3MoKTsKKyNlbmRpZgorfQorCiBzaXplX3Qgc2l6ZU9mQ2FsbEZvcndhcmRWYXJhcmdz
KCkKIHsKICNpZiBDUFUoQVJNNjQpCkBAIC05MSw2ICsxMDAsMTUgQEAgc2l6ZV90IHNpemVPZkNh
bGxGb3J3YXJkVmFyYXJncygpCiAjZW5kaWYKIH0KIAorc2l6ZV90IHNpemVPZlRhaWxDYWxsRm9y
d2FyZFZhcmFyZ3MoKQoreworI2lmIENQVShBUk02NCkKKyAgICByZXR1cm4gMTg4ICsgc2l6ZU9m
Q2FsbEZvcndhcmRWYXJhcmdzKCk7CisjZWxzZQorICAgIHJldHVybiAxNTEgKyBzaXplT2ZDYWxs
Rm9yd2FyZFZhcmFyZ3MoKTsKKyNlbmRpZgorfQorCiBzaXplX3Qgc2l6ZU9mQ29uc3RydWN0VmFy
YXJncygpCiB7CiAgICAgcmV0dXJuIHNpemVPZkNhbGxWYXJhcmdzKCk7IC8vIFNob3VsZCBiZSB0
aGUgc2FtZSBzaXplLgpAQCAtMTIxLDkgKzEzOSwxNSBAQCBzaXplX3Qgc2l6ZU9mSUNGb3IoTm9k
ZSogbm9kZSkKICAgICBjYXNlIENvbnN0cnVjdDoKICAgICAgICAgcmV0dXJuIHNpemVPZkNhbGwo
KTsKICAgICBjYXNlIENhbGxWYXJhcmdzOgorICAgIGNhc2UgVGFpbENhbGxWYXJhcmdzSW5saW5l
ZENhbGxlcjoKICAgICAgICAgcmV0dXJuIHNpemVPZkNhbGxWYXJhcmdzKCk7CisgICAgY2FzZSBU
YWlsQ2FsbFZhcmFyZ3M6CisgICAgICAgIHJldHVybiBzaXplT2ZUYWlsQ2FsbFZhcmFyZ3MoKTsK
ICAgICBjYXNlIENhbGxGb3J3YXJkVmFyYXJnczoKKyAgICBjYXNlIFRhaWxDYWxsRm9yd2FyZFZh
cmFyZ3NJbmxpbmVkQ2FsbGVyOgogICAgICAgICByZXR1cm4gc2l6ZU9mQ2FsbEZvcndhcmRWYXJh
cmdzKCk7CisgICAgY2FzZSBUYWlsQ2FsbEZvcndhcmRWYXJhcmdzOgorICAgICAgICByZXR1cm4g
c2l6ZU9mVGFpbENhbGxGb3J3YXJkVmFyYXJncygpOwogICAgIGNhc2UgQ29uc3RydWN0VmFyYXJn
czoKICAgICAgICAgcmV0dXJuIHNpemVPZkNvbnN0cnVjdFZhcmFyZ3MoKTsKICAgICBjYXNlIENv
bnN0cnVjdEZvcndhcmRWYXJhcmdzOgpAQCAtMTMxLDcgKzE1NSw3IEBAIHNpemVfdCBzaXplT2ZJ
Q0ZvcihOb2RlKiBub2RlKQogICAgIGNhc2UgSW46CiAgICAgICAgIHJldHVybiBzaXplT2ZJbigp
OwogICAgIGRlZmF1bHQ6Ci0gICAgICAgIHJldHVybiAwOworICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOwogICAgIH0KIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExJbmxpbmVDYWNoZVNpemUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTElubGluZUNhY2hlU2l6ZS5oCShyZXZpc2lvbiAxOTAyMTkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTElubGluZUNhY2hlU2l6ZS5oCSh3b3JraW5nIGNvcHkp
CkBAIC00MCw3ICs0MCw5IEBAIHNpemVfdCBzaXplT2ZHZXRCeUlkKCk7CiBzaXplX3Qgc2l6ZU9m
UHV0QnlJZCgpOwogc2l6ZV90IHNpemVPZkNhbGwoKTsKIHNpemVfdCBzaXplT2ZDYWxsVmFyYXJn
cygpOworc2l6ZV90IHNpemVPZlRhaWxDYWxsVmFyYXJncygpOwogc2l6ZV90IHNpemVPZkNhbGxG
b3J3YXJkVmFyYXJncygpOworc2l6ZV90IHNpemVPZlRhaWxDYWxsRm9yd2FyZFZhcmFyZ3MoKTsK
IHNpemVfdCBzaXplT2ZDb25zdHJ1Y3RWYXJhcmdzKCk7CiBzaXplX3Qgc2l6ZU9mQ29uc3RydWN0
Rm9yd2FyZFZhcmFyZ3MoKTsKIHNpemVfdCBzaXplT2ZJbigpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExKU0NhbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMSlNDYWxsLmNwcAkocmV2aXNpb24gMTkwMjE5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExKU0NhbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OCw3ICs0
OCw3IEBAIEpTQ2FsbDo6SlNDYWxsKHVuc2lnbmVkIHN0YWNrbWFwSUQsIE5vZGUKICAgICAsIG1f
c3RhY2ttYXBJRChzdGFja21hcElEKQogICAgICwgbV9pbnN0cnVjdGlvbk9mZnNldCgwKQogewot
ICAgIEFTU0VSVChub2RlLT5vcCgpID09IENhbGwgfHwgbm9kZS0+b3AoKSA9PSBDb25zdHJ1Y3Qp
OworICAgIEFTU0VSVChub2RlLT5vcCgpID09IENhbGwgfHwgbm9kZS0+b3AoKSA9PSBDb25zdHJ1
Y3QgfHwgbm9kZS0+b3AoKSA9PSBUYWlsQ2FsbElubGluZWRDYWxsZXIpOwogfQogCiB2b2lkIEpT
Q2FsbDo6ZW1pdChDQ2FsbEhlbHBlcnMmIGppdCwgdW5zaWduZWQgc3RhY2tTaXplRm9yTG9jYWxz
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKU0NhbGxCYXNlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpTQ2FsbEJhc2UuY3BwCShy
ZXZpc2lvbiAxOTAyMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpTQ2FsbEJh
c2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NSwxNiArNTUsMjkgQEAgdm9pZCBKU0NhbGxCYXNl
OjplbWl0KENDYWxsSGVscGVycyYgaml0KQogICAgIENDYWxsSGVscGVyczo6SnVtcCBzbG93UGF0
aCA9IGppdC5icmFuY2hQdHJXaXRoUGF0Y2goCiAgICAgICAgIENDYWxsSGVscGVyczo6Tm90RXF1
YWwsIEdQUkluZm86OnJlZ1QwLCBtX3RhcmdldFRvQ2hlY2ssCiAgICAgICAgIENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbVB0cigwKSk7Ci0gICAgCi0gICAgbV9mYXN0Q2FsbCA9IGppdC5uZWFyQ2Fs
bCgpOwotICAgIENDYWxsSGVscGVyczo6SnVtcCBkb25lID0gaml0Lmp1bXAoKTsKLSAgICAKKwor
ICAgIENDYWxsSGVscGVyczo6SnVtcCBkb25lOworCisgICAgaWYgKENhbGxMaW5rSW5mbzo6Y2Fs
bE1vZGVGb3IobV90eXBlKSA9PSBDYWxsTW9kZTo6VGFpbCkgeworICAgICAgICBqaXQuZW1pdFJl
c3RvcmVDYWxsZWVTYXZlcygpOworICAgICAgICBqaXQucHJlcGFyZUZvclRhaWxDYWxsU2xvdygp
OworICAgICAgICBtX2Zhc3RDYWxsID0gaml0Lm5lYXJUYWlsQ2FsbCgpOworICAgIH0gZWxzZSB7
CisgICAgICAgIG1fZmFzdENhbGwgPSBqaXQubmVhckNhbGwoKTsKKyAgICAgICAgZG9uZSA9IGpp
dC5qdW1wKCk7CisgICAgfQorCiAgICAgc2xvd1BhdGgubGluaygmaml0KTsKLSAgICAKKwogICAg
IGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihtX2NhbGxMaW5rSW5mbyksIEdQ
UkluZm86OnJlZ1QyKTsKICAgICBtX3Nsb3dDYWxsID0gaml0Lm5lYXJDYWxsKCk7Ci0gICAgCi0g
ICAgZG9uZS5saW5rKCZqaXQpOworCisgICAgaWYgKENhbGxMaW5rSW5mbzo6Y2FsbE1vZGVGb3Io
bV90eXBlKSA9PSBDYWxsTW9kZTo6VGFpbCkKKyAgICAgICAgaml0LmFib3J0V2l0aFJlYXNvbihK
SVREaWRSZXR1cm5Gcm9tVGFpbENhbGwpOworICAgIGVsc2UKKyAgICAgICAgZG9uZS5saW5rKCZq
aXQpOworCisgICAgbV9jYWxsTGlua0luZm8tPnNldFVwQ2FsbChtX3R5cGUsIG1fb3JpZ2luLCBH
UFJJbmZvOjpyZWdUMCk7CiB9CiAKIHZvaWQgSlNDYWxsQmFzZTo6bGluayhWTSYgdm0sIExpbmtC
dWZmZXImIGxpbmtCdWZmZXIpCkBAIC03Miw5ICs4NSw4IEBAIHZvaWQgSlNDYWxsQmFzZTo6bGlu
ayhWTSYgdm0sIExpbmtCdWZmZXIKICAgICBsaW5rQnVmZmVyLmxpbmsoCiAgICAgICAgIG1fc2xv
d0NhbGwsIEZ1bmN0aW9uUHRyKHZtLmdldENUSVN0dWIobGlua0NhbGxUaHVua0dlbmVyYXRvciku
Y29kZSgpLmV4ZWN1dGFibGVBZGRyZXNzKCkpKTsKIAotICAgIG1fY2FsbExpbmtJbmZvLT5zZXRV
cENhbGxGcm9tRlRMKG1fdHlwZSwgbV9vcmlnaW4sIGxpbmtCdWZmZXIubG9jYXRpb25PZk5lYXJD
YWxsKG1fc2xvd0NhbGwpLAotICAgICAgICBsaW5rQnVmZmVyLmxvY2F0aW9uT2YobV90YXJnZXRU
b0NoZWNrKSwgbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwobV9mYXN0Q2FsbCksCi0gICAg
ICAgIEdQUkluZm86OnJlZ1QwKTsKKyAgICBtX2NhbGxMaW5rSW5mby0+c2V0Q2FsbExvY2F0aW9u
cyhsaW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChtX3Nsb3dDYWxsKSwKKyAgICAgICAgbGlu
a0J1ZmZlci5sb2NhdGlvbk9mKG1fdGFyZ2V0VG9DaGVjayksIGxpbmtCdWZmZXIubG9jYXRpb25P
Zk5lYXJDYWxsKG1fZmFzdENhbGwpKTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKU0NhbGxCYXNlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKU0NhbGxCYXNlLmgJKHJldmlzaW9u
IDE5MDIxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSlNDYWxsQmFzZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC01MCw3ICs1MCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGVtaXQoQ0Nh
bGxIZWxwZXJzJik7CiAgICAgdm9pZCBsaW5rKFZNJiwgTGlua0J1ZmZlciYpOwogICAgIAotcHJp
dmF0ZToKK3Byb3RlY3RlZDoKICAgICBDYWxsTGlua0luZm86OkNhbGxUeXBlIG1fdHlwZTsKICAg
ICBDb2RlT3JpZ2luIG1fb3JpZ2luOwogICAgIENDYWxsSGVscGVyczo6RGF0YUxhYmVsUHRyIG1f
dGFyZ2V0VG9DaGVjazsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSlNDYWxs
VmFyYXJncy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExK
U0NhbGxWYXJhcmdzLmNwcAkocmV2aXNpb24gMTkwMjE5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExKU0NhbGxWYXJhcmdzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsMTIgKzUx
LDE1IEBAIEpTQ2FsbFZhcmFyZ3M6OkpTQ2FsbFZhcmFyZ3ModW5zaWduZWQgc3QKICAgICAsIG1f
bm9kZShub2RlKQogICAgICwgbV9jYWxsQmFzZSgKICAgICAgICAgKG5vZGUtPm9wKCkgPT0gQ29u
c3RydWN0VmFyYXJncyB8fCBub2RlLT5vcCgpID09IENvbnN0cnVjdEZvcndhcmRWYXJhcmdzKQot
ICAgICAgICA/IENhbGxMaW5rSW5mbzo6Q29uc3RydWN0VmFyYXJncyA6IENhbGxMaW5rSW5mbzo6
Q2FsbFZhcmFyZ3MsCisgICAgICAgID8gQ2FsbExpbmtJbmZvOjpDb25zdHJ1Y3RWYXJhcmdzIDog
KG5vZGUtPm9wKCkgPT0gVGFpbENhbGxWYXJhcmdzIHx8IG5vZGUtPm9wKCkgPT0gVGFpbENhbGxG
b3J3YXJkVmFyYXJncykKKyAgICAgICAgPyBDYWxsTGlua0luZm86OlRhaWxDYWxsVmFyYXJncyA6
IENhbGxMaW5rSW5mbzo6Q2FsbFZhcmFyZ3MsCiAgICAgICAgIG5vZGUtPm9yaWdpbi5zZW1hbnRp
YykKICAgICAsIG1faW5zdHJ1Y3Rpb25PZmZzZXQoMCkKIHsKICAgICBBU1NFUlQoCiAgICAgICAg
IG5vZGUtPm9wKCkgPT0gQ2FsbFZhcmFyZ3MgfHwgbm9kZS0+b3AoKSA9PSBDYWxsRm9yd2FyZFZh
cmFyZ3MKKyAgICAgICAgfHwgbm9kZS0+b3AoKSA9PSBUYWlsQ2FsbFZhcmFyZ3NJbmxpbmVkQ2Fs
bGVyIHx8IG5vZGUtPm9wKCkgPT0gVGFpbENhbGxGb3J3YXJkVmFyYXJnc0lubGluZWRDYWxsZXIK
KyAgICAgICAgfHwgbm9kZS0+b3AoKSA9PSBUYWlsQ2FsbFZhcmFyZ3MgfHwgbm9kZS0+b3AoKSA9
PSBUYWlsQ2FsbEZvcndhcmRWYXJhcmdzCiAgICAgICAgIHx8IG5vZGUtPm9wKCkgPT0gQ29uc3Ry
dWN0VmFyYXJncyB8fCBub2RlLT5vcCgpID09IENvbnN0cnVjdEZvcndhcmRWYXJhcmdzKTsKIH0K
IApAQCAtODMsMTEgKzg2LDE1IEBAIHZvaWQgSlNDYWxsVmFyYXJnczo6ZW1pdChDQ2FsbEhlbHBl
cnMmIGoKICAgICAKICAgICBzd2l0Y2ggKG1fbm9kZS0+b3AoKSkgewogICAgIGNhc2UgQ2FsbFZh
cmFyZ3M6CisgICAgY2FzZSBUYWlsQ2FsbFZhcmFyZ3M6CisgICAgY2FzZSBUYWlsQ2FsbFZhcmFy
Z3NJbmxpbmVkQ2FsbGVyOgogICAgIGNhc2UgQ29uc3RydWN0VmFyYXJnczoKICAgICAgICAgYXJn
dW1lbnRzR1BSID0gR1BSSW5mbzo6YXJndW1lbnRHUFIxOwogICAgICAgICB0aGlzR1BSID0gR1BS
SW5mbzo6YXJndW1lbnRHUFIyOwogICAgICAgICBicmVhazsKICAgICBjYXNlIENhbGxGb3J3YXJk
VmFyYXJnczoKKyAgICBjYXNlIFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3M6CisgICAgY2FzZSBUYWls
Q2FsbEZvcndhcmRWYXJhcmdzSW5saW5lZENhbGxlcjoKICAgICBjYXNlIENvbnN0cnVjdEZvcndh
cmRWYXJhcmdzOgogICAgICAgICB0aGlzR1BSID0gR1BSSW5mbzo6YXJndW1lbnRHUFIxOwogICAg
ICAgICBmb3J3YXJkaW5nID0gdHJ1ZTsKQEAgLTE5Niw3ICsyMDMsNyBAQCB2b2lkIEpTQ2FsbFZh
cmFyZ3M6OmVtaXQoQ0NhbGxIZWxwZXJzJiBqCiAgICAgLy8gSGVuY2Vmb3J0aCB3ZSBtYWtlIHRo
ZSBjYWxsLiBUaGUgYmFzZSBGVEwgY2FsbCBtYWNoaW5lcnkgZXhwZWN0cyB0aGUgY2FsbGVlIGlu
IHJlZ1QwIGFuZCBmb3IgdGhlCiAgICAgLy8gc3RhY2sgZnJhbWUgdG8gYWxyZWFkeSBiZSBzZXQg
dXAsIHdoaWNoIGl0IGlzLgogICAgIGppdC5zdG9yZTY0KEdQUkluZm86OnJlZ1QwLCBDQ2FsbEhl
bHBlcnM6OmNhbGxlZUZyYW1lU2xvdChKU1N0YWNrOjpDYWxsZWUpKTsKLSAgICAKKwogICAgIG1f
Y2FsbEJhc2UuZW1pdChqaXQpOwogICAgIAogICAgIC8vIFVuZG8gdGhlIGRhbWFnZSB3ZSd2ZSBk
b25lLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKU1RhaWxDYWxsLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpTVGFpbENhbGwuY3Bw
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKU1RhaWxDYWxs
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDMyMiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJGVExKU1RhaWxDYWxsLmgiCisKKyNpZiBFTkFCTEUoRlRMX0pJVCkKKworI2luY2x1
ZGUgIkNhbGxGcmFtZVNodWZmbGVyLmgiCisjaW5jbHVkZSAiREZHTm9kZS5oIgorI2luY2x1ZGUg
IkZUTEpJVENvZGUuaCIKKyNpbmNsdWRlICJGVExMb2NhdGlvbi5oIgorI2luY2x1ZGUgIkZUTFN0
YWNrTWFwcy5oIgorI2luY2x1ZGUgIkpTQ0pTVmFsdWVJbmxpbmVzLmgiCisjaW5jbHVkZSAiTGlu
a0J1ZmZlci5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CisKK3VzaW5nIG5h
bWVzcGFjZSBERkc7CisKK3N0YXRpYyBGVEw6OkxvY2F0aW9uIGdldFJlZ2lzdGVyV2l0aEFkZGVu
ZChjb25zdCBFeGl0VmFsdWUmIHZhbHVlLCBTdGFja01hcHM6OlJlY29yZCYgcmVjb3JkLCBTdGFj
a01hcHMmIHN0YWNrbWFwcykKK3sKKyAgICBpZiAodmFsdWUua2luZCgpICE9IEV4aXRWYWx1ZUFy
Z3VtZW50KQorICAgICAgICByZXR1cm4geyB9OworCisgICAgYXV0byBsb2NhdGlvbiA9CisgICAg
ICAgIEZUTDo6TG9jYXRpb246OmZvclN0YWNrbWFwcygmc3RhY2ttYXBzLCByZWNvcmQubG9jYXRp
b25zW3ZhbHVlLmV4aXRBcmd1bWVudCgpLmFyZ3VtZW50KCldKTsKKworICAgIGlmIChsb2NhdGlv
bi5raW5kKCkgIT0gTG9jYXRpb246OlJlZ2lzdGVyIHx8ICFsb2NhdGlvbi5hZGRlbmQoKSkKKyAg
ICAgICAgcmV0dXJuIHsgfTsKKworICAgIFJFTEVBU0VfQVNTRVJUKGxvY2F0aW9uLmlzR1BSKCkp
OworICAgIHJldHVybiBsb2NhdGlvbjsKK30KKworc3RhdGljIFZhbHVlUmVjb3ZlcnkgcmVjb3Zl
cnlGb3IoY29uc3QgRXhpdFZhbHVlJiB2YWx1ZSwgU3RhY2tNYXBzOjpSZWNvcmQmIHJlY29yZCwg
U3RhY2tNYXBzJiBzdGFja21hcHMpCit7CisgICAgc3dpdGNoICh2YWx1ZS5raW5kKCkpIHsKKyAg
ICBjYXNlIEV4aXRWYWx1ZUNvbnN0YW50OgorICAgICAgICByZXR1cm4gVmFsdWVSZWNvdmVyeTo6
Y29uc3RhbnQodmFsdWUuY29uc3RhbnQoKSk7CisKKyAgICBjYXNlIEV4aXRWYWx1ZUFyZ3VtZW50
OiB7CisgICAgICAgIGF1dG8gbG9jYXRpb24gPQorICAgICAgICAgICAgRlRMOjpMb2NhdGlvbjo6
Zm9yU3RhY2ttYXBzKCZzdGFja21hcHMsIHJlY29yZC5sb2NhdGlvbnNbdmFsdWUuZXhpdEFyZ3Vt
ZW50KCkuYXJndW1lbnQoKV0pOworICAgICAgICBhdXRvIGZvcm1hdCA9IHZhbHVlLmV4aXRBcmd1
bWVudCgpLmZvcm1hdCgpOworCisgICAgICAgIHN3aXRjaCAobG9jYXRpb24ua2luZCgpKSB7Cisg
ICAgICAgIGNhc2UgTG9jYXRpb246OlJlZ2lzdGVyOgorICAgICAgICAgICAgLy8gV2UgaGFuZGxl
IHRoZSBhZGRlbmQgb3V0c2lkZQorICAgICAgICAgICAgcmV0dXJuIFZhbHVlUmVjb3Zlcnk6Omlu
UmVnaXN0ZXIobG9jYXRpb24uZHdhcmZSZWcoKS5yZWcoKSwgZm9ybWF0KTsKKworICAgICAgICBj
YXNlIExvY2F0aW9uOjpJbmRpcmVjdDoKKyAgICAgICAgICAgIC8vIE9oIExMVk0sIHlvdSBjcmF6
eS4uLgorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQobG9jYXRpb24uZHdhcmZSZWcoKS5yZWco
KSA9PSBSZWcoTWFjcm9Bc3NlbWJsZXI6OmZyYW1lUG9pbnRlclJlZ2lzdGVyKSk7CisgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVCghKGxvY2F0aW9uLm9mZnNldCgpICUgc2l6ZW9mKHZvaWQqKSkp
OworICAgICAgICAgICAgcmV0dXJuIFZhbHVlUmVjb3Zlcnk6OmRpc3BsYWNlZEluSlNTdGFjayhW
aXJ0dWFsUmVnaXN0ZXIgeyBzdGF0aWNfY2FzdDxpbnQ+KGxvY2F0aW9uLm9mZnNldCgpIC8gc2l6
ZW9mKHZvaWQqKSkgfSwgZm9ybWF0KTsKKworICAgICAgICBjYXNlIExvY2F0aW9uOjpDb25zdGFu
dDoKKyAgICAgICAgICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5Ojpjb25zdGFudChKU1ZhbHVlOjpk
ZWNvZGUobG9jYXRpb24uY29uc3RhbnQoKSkpOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAg
ICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgfQorCisg
ICAgY2FzZSBFeGl0VmFsdWVJbkpTU3RhY2s6CisgICAgICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5
OjpkaXNwbGFjZWRJbkpTU3RhY2sodmFsdWUudmlydHVhbFJlZ2lzdGVyKCksIERhdGFGb3JtYXRK
Uyk7CisKKyAgICBjYXNlIEV4aXRWYWx1ZUluSlNTdGFja0FzSW50MzI6CisgICAgICAgIHJldHVy
biBWYWx1ZVJlY292ZXJ5OjpkaXNwbGFjZWRJbkpTU3RhY2sodmFsdWUudmlydHVhbFJlZ2lzdGVy
KCksIERhdGFGb3JtYXRJbnQzMik7CisKKyAgICBjYXNlIEV4aXRWYWx1ZUluSlNTdGFja0FzSW50
NTI6CisgICAgICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5OjpkaXNwbGFjZWRJbkpTU3RhY2sodmFs
dWUudmlydHVhbFJlZ2lzdGVyKCksIERhdGFGb3JtYXRJbnQ1Mik7CisKKyAgICBjYXNlIEV4aXRW
YWx1ZUluSlNTdGFja0FzRG91YmxlOgorICAgICAgICByZXR1cm4gVmFsdWVSZWNvdmVyeTo6ZGlz
cGxhY2VkSW5KU1N0YWNrKHZhbHVlLnZpcnR1YWxSZWdpc3RlcigpLCBEYXRhRm9ybWF0RG91Ymxl
KTsKKworICAgIGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisgICAgfQorfQorCisvLyBUaGlzIGNvbXB1dGVzIGFuIGVzdGltYXRlZCBzaXplIChpbiBiaXRz
KSBmb3IgdGhlIHNlcXVlbmNlIG9mCisvLyBpbnN0cnVjdGlvbnMgcmVxdWlyZWQgdG8gbG9hZCwg
Ym94LCBhbmQgc3RvcmUgYSB2YWx1ZSBvZiBhIGdpdmVuCisvLyB0eXBlLCBhc3N1bWluZyBubyBz
cGlsbGluZyBpcyByZXF1aXJlZC4KK3N0YXRpYyB1aW50MzJfdCBzaXplRm9yKERhdGFGb3JtYXQg
Zm9ybWF0KQoreworICAgIHN3aXRjaCAoZm9ybWF0KSB7CisgICAgY2FzZSBEYXRhRm9ybWF0SW50
MzI6CisgICAgICAgIC8vIEJveGluZyBpcyB6ZXJvLWV4dGVuZGluZyBhbmQgdGFnZ2luZworI2lm
IENQVShYODZfNjQpCisgICAgICAgIHJldHVybiA2ICsgc2l6ZUZvcihEYXRhRm9ybWF0SlMpOwor
I2VsaWYgQ1BVKEFSTTY0KQorICAgICAgICByZXR1cm4gOCArIHNpemVGb3IoRGF0YUZvcm1hdEpT
KTsKKyNlbHNlCisgICAgICAgIHJldHVybiBzaXplT2ZaZXJvRXh0ZW5kMzIgKyBzaXplT2ZPcklt
bTY0ICsgc2l6ZUZvcihEYXRhRm9ybWF0SlMpOworI2VuZGlmCisKKyAgICBjYXNlIERhdGFGb3Jt
YXRJbnQ1MjoKKyAgICAgICAgLy8gQm94aW5nIGlzIGZpcnN0IGEgY29udmVyc2lvbiB0byBTdHJp
Y3RJbnQ1MiwgdGhlbgorICAgICAgICAvLyBTdHJpY3RJbnQ1MiBib3hpbmcKKyNpZiBDUFUoWDg2
XzY0KQorICAgICAgICByZXR1cm4gNCArIHNpemVGb3IoRGF0YUZvcm1hdFN0cmljdEludDUyKTsK
KyNlbGlmIENQVShBUk02NCkKKyAgICAgICAgcmV0dXJuIDQgKyBzaXplRm9yKERhdGFGb3JtYXRT
dHJpY3RJbnQ1Mik7CisjZWxzZQorICAgICAgICByZXR1cm4gc2l6ZU9mU2hpZnRJbW0zMiArIHNp
emVGb3IoRGF0YUZvcm1hdFN0cmljdEludDUyKTsKKyNlbmRpZgorCisgICAgY2FzZSBEYXRhRm9y
bWF0U3RyaWN0SW50NTI6CisgICAgICAgIC8vIEJveGluZyBpcyBmaXJzdCBhIGNvbnZlcnNpb24g
dG8gZG91YmxlLCB0aGVuIGRvdWJsZSBib3hpbmcKKyNpZiBDUFUoWDg2XzY0KQorICAgICAgICBy
ZXR1cm4gOCArIHNpemVGb3IoRGF0YUZvcm1hdERvdWJsZSk7CisjZWxpZiBDUFUoQVJNNjQpCisg
ICAgICAgIHJldHVybiA0ICsgc2l6ZUZvcihEYXRhRm9ybWF0RG91YmxlKTsKKyNlbHNlCisgICAg
ICAgIHJldHVybiBzaXplT2ZDb252ZXJ0SW50NjRUb0RvdWJsZSArIHNpemVGb3IoRGF0YUZvcm1h
dERvdWJsZSk7CisjZW5kaWYKKworICAgIGNhc2UgRGF0YUZvcm1hdERvdWJsZToKKyAgICAgICAg
Ly8gQm94aW5nIGlzIHB1cmlmeWluZywgbW92aW5nIHRvIGEgR1BSLCBhbmQgdGFnZ2luZworI2lm
IENQVShYODZfNjQpCisgICAgICAgIHJldHVybiAzOCArIHNpemVGb3IoRGF0YUZvcm1hdEpTKTsK
KyNlbGlmIENQVShBUk02NCkKKyAgICAgICAgcmV0dXJuIDI4ICsgc2l6ZUZvcihEYXRhRm9ybWF0
SlMpOworI2Vsc2UKKyAgICAgICAgcmV0dXJuIHNpemVPZlB1cmlmeU5hTiArIHNpemVPZlN1Yklt
bTY0ICsgc2l6ZU9mTW92ZURvdWJsZVRvNjQgKyBzaXplRm9yKERhdGFGb3JtYXRKUyk7CisjZW5k
aWYKKworICAgIGNhc2UgRGF0YUZvcm1hdEJvb2xlYW46CisgICAgICAgIC8vIEJveGluZyBpcyBh
ZGRpbmcgVmFsdWVGYWxzZQorI2lmIENQVShYODZfNjQpCisgICAgICAgIHJldHVybiA0ICsgc2l6
ZUZvcihEYXRhRm9ybWF0SlMpOworI2VsaWYgQ1BVKEFSTTY0KQorICAgICAgICByZXR1cm4gNCAr
IHNpemVGb3IoRGF0YUZvcm1hdEpTKTsKKyNlbHNlCisgICAgICAgIHJldHVybiBzaXplT2ZBZGRJ
bW0zMiArIHNpemVGb3IoRGF0YUZvcm1hdEpTKTsKKyNlbmRpZgorCisgICAgY2FzZSBEYXRhRm9y
bWF0SlM6CisgICAgICAgIC8vIFdlIHdpbGwgbG9hZCAoaW4gYSBHUFIgb3IgRlBSKSB0aGVuIHN0
b3JlIHRoZSB2YWx1ZQorI2lmIENQVShYODZfNjQpCisgICAgICAgIHJldHVybiA4OworI2VsaWYg
Q1BVKEFSTTY0KQorICAgICAgICByZXR1cm4gODsKKyNlbHNlCisgICAgICAgIHJldHVybiBzaXpl
T2ZMb2FkICsgc2l6ZU9mU3RvcmU7CisjZW5kaWYKKworICAgIGRlZmF1bHQ6CisgICAgICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorfQorCitKU1RhaWxDYWxsOjpKU1Rh
aWxDYWxsKHVuc2lnbmVkIHN0YWNrbWFwSUQsIE5vZGUqIG5vZGUsIFZlY3RvcjxFeGl0VmFsdWU+
IGFyZ3VtZW50cykKKyAgICA6IEpTQ2FsbEJhc2UoQ2FsbExpbmtJbmZvOjpUYWlsQ2FsbCwgbm9k
ZS0+b3JpZ2luLnNlbWFudGljKQorICAgICwgbV9zdGFja21hcElEKHN0YWNrbWFwSUQpCisgICAg
LCBtX2FyZ3VtZW50cyB7IFdURjo6bW92ZShhcmd1bWVudHMpIH0KKyAgICAsIG1faW5zdHJ1Y3Rp
b25PZmZzZXQoMCkKK3sKKyAgICBBU1NFUlQobm9kZS0+b3AoKSA9PSBUYWlsQ2FsbCk7CisgICAg
QVNTRVJUKG51bUFyZ3VtZW50cygpID09IG5vZGUtPm51bUNoaWxkcmVuKCkgLSAxKTsKKworICAg
IC8vIEVzdGltYXRlIHRoZSBzaXplIG9mIHRoZSBpbmxpbmUgY2FjaGUsIGFzc3VtaW5nIHRoYXQg
ZXZlcnkKKyAgICAvLyB2YWx1ZSBnb2VzIGZyb20gdGhlIHN0YWNrIHRvIHRoZSBzdGFjayAoaW4g
cHJhY3RpY2UsIHRoaXMgd2lsbAorICAgIC8vIHNlbGRvbSBiZSB0cnVlLCBnaXZpbmcgdXMgc29t
ZSBhbW91bnQgb2YgbGVld2F5KSBhbmQgdGhhdCBubworICAgIC8vIHNwaWxsaW5nIHdpbGwgb2Nj
dXIgKGluIHByYWN0aWNlLCB0aGlzIHdpbGwgYWxtb3N0IGFsd2F5cyBiZQorICAgIC8vIHRydWUp
LgorCisgICAgLy8gV2UgZmlyc3QgY29tcHV0ZSB0aGUgbmV3IGZyYW1lIGJhc2UgYW5kIGxvYWQg
dGhlIGZwL2xyCisgICAgLy8gcmVnaXN0ZXJzIGZpbmFsIHZhbHVlcy4gT24gZGVidWcgYnVpbGRz
LCB3ZSBhbHNvIG5lZWQgdG8KKyAgICAvLyBhY2NvdW50IGZvciB0aGUgZnAtc3AgZGVsdGEgY2hl
Y2sgKHR3aWNlOiBmYXN0IGFuZCBzbG93IHBhdGgpLgorI2lmIENQVShYODZfNjQpCisgICAgbV9l
c3RpbWF0ZWRTaXplID0gNTY7CisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgIG1fZXN0aW1hdGVk
U2l6ZSArPSAyNjsKKyMgIGVuZGlmCisjZWxpZiBDUFUoQVJNNjQpCisgICAgbV9lc3RpbWF0ZWRT
aXplID0gNDQ7CisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgIG1fZXN0aW1hdGVkU2l6ZSArPSAy
NDsKKyMgIGVuZGlmCisjZWxzZQorICAgIFVOUkVBQ0hBQkxFX0ZPUl9QTEFURk9STSgpOworI2Vu
ZGlmCisKKyAgICAvLyBBcmd1bWVudHMgd2lsbCBwcm9iYWJseSBiZSBsb2FkZWQgJiBzdG9yZWQg
dHdpY2UgKGZhc3QgJiBzbG93KQorICAgIGZvciAoRXhpdFZhbHVlJiBhcmcgOiBtX2FyZ3VtZW50
cykKKyAgICAgICAgbV9lc3RpbWF0ZWRTaXplICs9IDIgKiBzaXplRm9yKGFyZy5kYXRhRm9ybWF0
KCkpOworCisgICAgLy8gV2UgYWxzbyBoYXZlIHRoZSBzbG93IHBhdGggY2hlY2ssIHRoZSB0d28g
Y2FsbHMsIGFuZCB0aGUKKyAgICAvLyBDYWxsTGlua0luZm8gbG9hZCBmb3IgdGhlIHNsb3cgcGF0
aAorI2lmIENQVShYODZfNjQpCisgICAgbV9lc3RpbWF0ZWRTaXplICs9IDU1OworI2VsaWYgQ1BV
KEFSTTY0KQorICAgIG1fZXN0aW1hdGVkU2l6ZSArPSA0NDsKKyNlbHNlCisgICAgbV9lc3RpbWF0
ZWRTaXplICs9IHNpemVPZkNhbGwgKyBzaXplT2ZKdW1wICsgc2l6ZU9mTG9hZCArIHNpemVPZlNs
b3dQYXRoQ2hlY2s7CisjZW5kaWYKK30KKwordm9pZCBKU1RhaWxDYWxsOjplbWl0KEpJVENvZGUm
IGppdENvZGUsIENDYWxsSGVscGVycyYgaml0KQoreworICAgIFN0YWNrTWFwczo6UmVjb3JkKiBy
ZWNvcmQgeyBudWxscHRyIH07CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0gaml0Q29kZS5z
dGFja21hcHMucmVjb3Jkcy5zaXplKCk7IGktLTspIHsKKyAgICAgICAgcmVjb3JkID0gJmppdENv
ZGUuc3RhY2ttYXBzLnJlY29yZHNbaV07CisgICAgICAgIGlmIChyZWNvcmQtPnBhdGNocG9pbnRJ
RCA9PSBtX3N0YWNrbWFwSUQpCisgICAgICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBSRUxF
QVNFX0FTU0VSVChyZWNvcmQtPnBhdGNocG9pbnRJRCA9PSBtX3N0YWNrbWFwSUQpOworCisgICAg
bV9jYWxsTGlua0luZm8gPSBqaXQuY29kZUJsb2NrKCktPmFkZENhbGxMaW5rSW5mbygpOworCisg
ICAgQ2FsbEZyYW1lU2h1ZmZsZURhdGEgc2h1ZmZsZURhdGE7CisKKyAgICAvLyBUaGUgY2FsbGVl
IHdhcyB0aGUgZmlyc3QgcGFzc2VkIGFyZ3VtZW50LCBhbmQgbXVzdCBiZSBpbiBhIEdQUiBiZWNh
dXNlCisgICAgLy8gd2UgdXNlZCB0aGUgImFueXJlZ2NjIiBjYWxsaW5nIGNvbnZlbnRpb24KKyAg
ICBhdXRvIGNhbGxlZUxvY2F0aW9uID0KKyAgICAgICAgRlRMOjpMb2NhdGlvbjo6Zm9yU3RhY2tt
YXBzKG51bGxwdHIsIHJlY29yZC0+bG9jYXRpb25zWzBdKTsKKyAgICBHUFJSZWcgY2FsbGVlR1BS
ID0gY2FsbGVlTG9jYXRpb24uZGlyZWN0R1BSKCk7CisgICAgc2h1ZmZsZURhdGEuY2FsbGVlID0g
VmFsdWVSZWNvdmVyeTo6aW5HUFIoY2FsbGVlR1BSLCBEYXRhRm9ybWF0SlMpOworCisgICAgLy8g
VGhlIHRhZyB0eXBlIG51bWJlciB3YXMgdGhlIHNlY29uZCBhcmd1bWVudCwgaWYgdGhlcmUgd2Fz
IG9uZQorICAgIGF1dG8gdGFnVHlwZU51bWJlckxvY2F0aW9uID0KKyAgICAgICAgRlRMOjpMb2Nh
dGlvbjo6Zm9yU3RhY2ttYXBzKCZqaXRDb2RlLnN0YWNrbWFwcywgcmVjb3JkLT5sb2NhdGlvbnNb
MV0pOworICAgIGlmICh0YWdUeXBlTnVtYmVyTG9jYXRpb24uaXNHUFIoKSAmJiAhdGFnVHlwZU51
bWJlckxvY2F0aW9uLmFkZGVuZCgpKQorICAgICAgICBzaHVmZmxlRGF0YS50YWdUeXBlTnVtYmVy
ID0gdGFnVHlwZU51bWJlckxvY2F0aW9uLmRpcmVjdEdQUigpOworCisgICAgc2h1ZmZsZURhdGEu
YXJncy5ncm93KG51bUFyZ3VtZW50cygpKTsKKyAgICBIYXNoTWFwPFJlZywgVmVjdG9yPHN0ZDo6
cGFpcjxWYWx1ZVJlY292ZXJ5KiwgaW50MzJfdD4+PiB3aXRoQWRkZW5kOworICAgIHNpemVfdCBu
dW1BZGRlbmRzIHsgMCB9OworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgbnVtQXJndW1lbnRz
KCk7ICsraSkgeworICAgICAgICBzaHVmZmxlRGF0YS5hcmdzW2ldID0gcmVjb3ZlcnlGb3IobV9h
cmd1bWVudHNbaV0sICpyZWNvcmQsIGppdENvZGUuc3RhY2ttYXBzKTsKKyAgICAgICAgaWYgKEZU
TDo6TG9jYXRpb24gYWRkZW5kID0gZ2V0UmVnaXN0ZXJXaXRoQWRkZW5kKG1fYXJndW1lbnRzW2ld
LCAqcmVjb3JkLCBqaXRDb2RlLnN0YWNrbWFwcykpIHsKKyAgICAgICAgICAgIHdpdGhBZGRlbmQu
YWRkKAorICAgICAgICAgICAgICAgIGFkZGVuZC5kd2FyZlJlZygpLnJlZygpLAorICAgICAgICAg
ICAgICAgIFZlY3RvcjxzdGQ6OnBhaXI8VmFsdWVSZWNvdmVyeSosIGludDMyX3Q+PigpKS5pdGVy
YXRvci0+dmFsdWUuYXBwZW5kKAorICAgICAgICAgICAgICAgICAgICBzdGQ6Om1ha2VfcGFpcigm
c2h1ZmZsZURhdGEuYXJnc1tpXSwgYWRkZW5kLmFkZGVuZCgpKSk7CisgICAgICAgICAgICBudW1B
ZGRlbmRzKys7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBudW1BZGRlbmRzID0gV1RGOjpyb3Vu
ZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50UmVnaXN0ZXJzKCksIG51bUFkZGVuZHMpOwor
CisgICAgc2h1ZmZsZURhdGEubnVtTG9jYWxzID0gc3RhdGljX2Nhc3Q8aW50NjRfdD4oaml0Q29k
ZS5zdGFja21hcHMuc3RhY2tTaXplRm9yTG9jYWxzKCkpIC8gc2l6ZW9mKHZvaWQqKSArIG51bUFk
ZGVuZHM7CisKKyAgICBBU1NFUlQoIW51bUFkZGVuZHMgPT0gd2l0aEFkZGVuZC5pc0VtcHR5KCkp
OworCisgICAgaWYgKCF3aXRoQWRkZW5kLmlzRW1wdHkoKSkgeworICAgICAgICBqaXQuc3ViUHRy
KE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIobnVtQWRkZW5kcyAqIHNpemVvZih2b2lkKikp
LCBNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAgICAgICBWaXJ0dWFs
UmVnaXN0ZXIgc3BpbGxCYXNlIHsgMSAtIHN0YXRpY19jYXN0PGludD4oc2h1ZmZsZURhdGEubnVt
TG9jYWxzKSB9OworICAgICAgICBmb3IgKGF1dG8gZW50cnkgOiB3aXRoQWRkZW5kKSB7CisgICAg
ICAgICAgICBmb3IgKGF1dG8gcGFpciA6IGVudHJ5LnZhbHVlKSB7CisgICAgICAgICAgICAgICAg
QVNTRVJUKG51bUFkZGVuZHMgPiAwKTsKKyAgICAgICAgICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIg
c3BpbGxTbG90IHsgc3BpbGxCYXNlICsgLS1udW1BZGRlbmRzIH07CisgICAgICAgICAgICAgICAg
QVNTRVJUKGVudHJ5LmtleS5pc0dQUigpKTsKKyAgICAgICAgICAgICAgICBqaXQuYWRkUHRyKE1h
Y3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIocGFpci5zZWNvbmQpLCBlbnRyeS5rZXkuZ3ByKCkp
OworICAgICAgICAgICAgICAgIGppdC5zdG9yZVB0cihlbnRyeS5rZXkuZ3ByKCksIENDYWxsSGVs
cGVyczo6YWRkcmVzc0ZvcihzcGlsbFNsb3QpKTsKKyAgICAgICAgICAgICAgICBqaXQuc3ViUHRy
KE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIocGFpci5zZWNvbmQpLCBlbnRyeS5rZXkuZ3By
KCkpOworICAgICAgICAgICAgICAgICpwYWlyLmZpcnN0ID0gVmFsdWVSZWNvdmVyeTo6ZGlzcGxh
Y2VkSW5KU1N0YWNrKHNwaWxsU2xvdCwgcGFpci5maXJzdC0+ZGF0YUZvcm1hdCgpKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBBU1NFUlQobnVtQWRkZW5kcyA8IHN0YWNrQWxp
Z25tZW50UmVnaXN0ZXJzKCkpOworICAgIH0KKworICAgIHNodWZmbGVEYXRhLmFyZ3MucmVzaXpl
KG51bUFyZ3VtZW50cygpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG51bUFyZ3VtZW50
cygpOyArK2kpCisgICAgICAgIHNodWZmbGVEYXRhLmFyZ3NbaV0gPSByZWNvdmVyeUZvcihtX2Fy
Z3VtZW50c1tpXSwgKnJlY29yZCwgaml0Q29kZS5zdGFja21hcHMpOworCisgICAgc2h1ZmZsZURh
dGEuc2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKGppdC5jb2RlQmxvY2soKSk7CisKKyAgICBDQ2Fs
bEhlbHBlcnM6Okp1bXAgc2xvd1BhdGggPSBqaXQuYnJhbmNoUHRyV2l0aFBhdGNoKAorICAgICAg
ICBDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBjYWxsZWVHUFIsIG1fdGFyZ2V0VG9DaGVjaywKKyAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKDApKTsKKworICAgIG1fY2FsbExpbmtJ
bmZvLT5zZXRGcmFtZVNodWZmbGVEYXRhKHNodWZmbGVEYXRhKTsKKyAgICBDYWxsRnJhbWVTaHVm
ZmxlcihqaXQsIHNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFpbENhbGwoKTsKKworICAgIG1fZmFz
dENhbGwgPSBqaXQubmVhclRhaWxDYWxsKCk7CisKKyAgICBzbG93UGF0aC5saW5rKCZqaXQpOwor
CisgICAgQ2FsbEZyYW1lU2h1ZmZsZXIgc2xvd1BhdGhTaHVmZmxlcihqaXQsIHNodWZmbGVEYXRh
KTsKKyAgICBzbG93UGF0aFNodWZmbGVyLnNldENhbGxlZUpTVmFsdWVSZWdzKEpTVmFsdWVSZWdz
IHsgR1BSSW5mbzo6cmVnVDAgfSk7CisgICAgc2xvd1BhdGhTaHVmZmxlci5wcmVwYXJlRm9yU2xv
d1BhdGgoKTsKKworICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihtX2Nh
bGxMaW5rSW5mbyksIEdQUkluZm86OnJlZ1QyKTsKKworICAgIG1fc2xvd0NhbGwgPSBqaXQubmVh
ckNhbGwoKTsKKworICAgIGppdC5hYm9ydFdpdGhSZWFzb24oSklURGlkUmV0dXJuRnJvbVRhaWxD
YWxsKTsKKworICAgIG1fY2FsbExpbmtJbmZvLT5zZXRVcENhbGwobV90eXBlLCBtX29yaWdpbiwg
Y2FsbGVlR1BSKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8g
RU5BQkxFKEZUTF9KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpTVGFp
bENhbGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpTVGFp
bENhbGwuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSlNU
YWlsQ2FsbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzQgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTMtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEZUTEpTVGFpbENh
bGxfaAorI2RlZmluZSBGVExKU1RhaWxDYWxsX2gKKworI2lmIEVOQUJMRShGVExfSklUKQorCisj
aW5jbHVkZSAiRlRMRXhpdEFyZ3VtZW50TGlzdC5oIgorI2luY2x1ZGUgIkZUTEV4aXRWYWx1ZS5o
IgorI2luY2x1ZGUgIkZUTEpTQ2FsbEJhc2UuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK25hbWVz
cGFjZSBERkcgeworc3RydWN0IE5vZGU7Cit9CisKK25hbWVzcGFjZSBGVEwgeworCitjbGFzcyBK
U1RhaWxDYWxsIDogcHVibGljIEpTQ2FsbEJhc2UgeworcHVibGljOgorICAgIEpTVGFpbENhbGwo
dW5zaWduZWQgc3RhY2ttYXBJRCwgREZHOjpOb2RlKiwgVmVjdG9yPEV4aXRWYWx1ZT4gYXJndW1l
bnRzKTsKKworICAgIHZvaWQgZW1pdChKSVRDb2RlJiwgQ0NhbGxIZWxwZXJzJik7CisgICAgCisg
ICAgdW5zaWduZWQgc3RhY2ttYXBJRCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhY2ttYXBJRDsgfQor
CisgICAgdW5zaWduZWQgZXN0aW1hdGVkU2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fZXN0aW1hdGVk
U2l6ZTsgfQorCisgICAgdW5zaWduZWQgbnVtQXJndW1lbnRzKCkgY29uc3QgeyByZXR1cm4gbV9h
cmd1bWVudHMuc2l6ZSgpOyB9CisKKyAgICBib29sIG9wZXJhdG9yPChjb25zdCBKU1RhaWxDYWxs
JiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2luc3RydWN0aW9uT2Zmc2V0
IDwgb3RoZXIubV9pbnN0cnVjdGlvbk9mZnNldDsKKyAgICB9CisgICAgCitwcml2YXRlOgorICAg
IHVuc2lnbmVkIG1fc3RhY2ttYXBJRDsKKyAgICBWZWN0b3I8RXhpdFZhbHVlPiBtX2FyZ3VtZW50
czsKKyAgICB1bnNpZ25lZCBtX2VzdGltYXRlZFNpemU7CisKK3B1YmxpYzoKKyAgICB1aW50MzJf
dCBtX2luc3RydWN0aW9uT2Zmc2V0OworfTsKKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAor
CisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKKyNlbmRpZiAvLyBGVExKU1RhaWxDYWxsX2gK
KwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb2NhdGlvbi5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG9jYXRpb24uaAkocmV2aXNpb24g
MTkwMjE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb2NhdGlvbi5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMjAsNyArMTIwLDkgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gdS5j
b25zdGFudDsKICAgICB9CiAgICAgCi0gICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVy
biBraW5kKCkgPT0gVW5wcm9jZXNzZWQgJiYgIXUudmFyaWFibGUub2Zmc2V0OyB9CisgICAgZXhw
bGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuIGtpbmQoKSAhPSBVbnByb2Nlc3Nl
ZCB8fCB1LnZhcmlhYmxlLm9mZnNldDsgfQorCisgICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7
IHJldHVybiAhc3RhdGljX2Nhc3Q8Ym9vbD4oKnRoaXMpOyB9CiAgICAgCiAgICAgYm9vbCBpc0hh
c2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIGtpbmQoKSA9PSBVbnByb2Nlc3Nl
ZCAmJiB1LnZhcmlhYmxlLm9mZnNldDsgfQogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHJldmlzaW9uIDE5MDIxOSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNzMsNyArMTczLDExIEBAIHB1YmxpYzoKICAgICAgICAgICAgIGZvciAoTm9k
ZSogbm9kZSA6ICpibG9jaykgewogICAgICAgICAgICAgICAgIHN3aXRjaCAobm9kZS0+b3AoKSkg
ewogICAgICAgICAgICAgICAgIGNhc2UgQ2FsbFZhcmFyZ3M6CisgICAgICAgICAgICAgICAgY2Fz
ZSBUYWlsQ2FsbFZhcmFyZ3M6CisgICAgICAgICAgICAgICAgY2FzZSBUYWlsQ2FsbFZhcmFyZ3NJ
bmxpbmVkQ2FsbGVyOgogICAgICAgICAgICAgICAgIGNhc2UgQ2FsbEZvcndhcmRWYXJhcmdzOgor
ICAgICAgICAgICAgICAgIGNhc2UgVGFpbENhbGxGb3J3YXJkVmFyYXJnczoKKyAgICAgICAgICAg
ICAgICBjYXNlIFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3NJbmxpbmVkQ2FsbGVyOgogICAgICAgICAg
ICAgICAgIGNhc2UgQ29uc3RydWN0VmFyYXJnczoKICAgICAgICAgICAgICAgICBjYXNlIENvbnN0
cnVjdEZvcndhcmRWYXJhcmdzOgogICAgICAgICAgICAgICAgICAgICBoYXNWYXJhcmdzID0gdHJ1
ZTsKQEAgLTcyMywxMSArNzI3LDE5IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBjb21waWxlTG9n
aWNhbE5vdCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ2FsbDoKKyAgICAg
ICAgY2FzZSBUYWlsQ2FsbElubGluZWRDYWxsZXI6CiAgICAgICAgIGNhc2UgQ29uc3RydWN0Ogog
ICAgICAgICAgICAgY29tcGlsZUNhbGxPckNvbnN0cnVjdCgpOwogICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgVGFpbENhbGw6CisgICAgICAgICAgICBjb21waWxlVGFpbENhbGwoKTsK
KyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENhbGxWYXJhcmdzOgogICAgICAgICBj
YXNlIENhbGxGb3J3YXJkVmFyYXJnczoKKyAgICAgICAgY2FzZSBUYWlsQ2FsbFZhcmFyZ3M6Cisg
ICAgICAgIGNhc2UgVGFpbENhbGxWYXJhcmdzSW5saW5lZENhbGxlcjoKKyAgICAgICAgY2FzZSBU
YWlsQ2FsbEZvcndhcmRWYXJhcmdzOgorICAgICAgICBjYXNlIFRhaWxDYWxsRm9yd2FyZFZhcmFy
Z3NJbmxpbmVkQ2FsbGVyOgogICAgICAgICBjYXNlIENvbnN0cnVjdFZhcmFyZ3M6CiAgICAgICAg
IGNhc2UgQ29uc3RydWN0Rm9yd2FyZFZhcmFyZ3M6CiAgICAgICAgICAgICBjb21waWxlQ2FsbE9y
Q29uc3RydWN0VmFyYXJncygpOwpAQCAtNDQwMCw2ICs0NDEyLDQxIEBAIHByaXZhdGU6CiAgICAg
ICAgIAogICAgICAgICBzZXRKU1ZhbHVlKGNhbGwpOwogICAgIH0KKworICAgIHZvaWQgY29tcGls
ZVRhaWxDYWxsKCkKKyAgICB7CisgICAgICAgIGludCBudW1BcmdzID0gbV9ub2RlLT5udW1DaGls
ZHJlbigpIC0gMTsKKyAgICAgICAgRXhpdEFyZ3VtZW50TGlzdCBleGl0QXJndW1lbnRzOworICAg
ICAgICBleGl0QXJndW1lbnRzLnJlc2VydmVDYXBhY2l0eShudW1BcmdzICsgNik7CisKKyAgICAg
ICAgdW5zaWduZWQgc3RhY2ttYXBJRCA9IG1fc3RhY2ttYXBJRHMrKzsKKyAgICAgICAgZXhpdEFy
Z3VtZW50cy5hcHBlbmQobG93SlNWYWx1ZShtX2dyYXBoLnZhckFyZ0NoaWxkKG1fbm9kZSwgMCkp
KTsKKyAgICAgICAgZXhpdEFyZ3VtZW50cy5hcHBlbmQobV90YWdUeXBlTnVtYmVyKTsKKworICAg
ICAgICBWZWN0b3I8RXhpdFZhbHVlPiBjYWxsQXJndW1lbnRzKG51bUFyZ3MpOworCisgICAgICAg
IGJvb2wgbmVlZHNUYWdUeXBlTnVtYmVyIHsgZmFsc2UgfTsKKyAgICAgICAgZm9yIChpbnQgaSA9
IDA7IGkgPCBudW1BcmdzOyArK2kpIHsKKyAgICAgICAgICAgIGNhbGxBcmd1bWVudHNbaV0gPQor
ICAgICAgICAgICAgICAgIGV4aXRWYWx1ZUZvclRhaWxDYWxsKGV4aXRBcmd1bWVudHMsIG1fZ3Jh
cGgudmFyQXJnQ2hpbGQobV9ub2RlLCAxICsgaSkubm9kZSgpKTsKKyAgICAgICAgICAgIGlmIChj
YWxsQXJndW1lbnRzW2ldLmRhdGFGb3JtYXQoKSA9PSBEYXRhRm9ybWF0SW50MzIpCisgICAgICAg
ICAgICAgICAgbmVlZHNUYWdUeXBlTnVtYmVyID0gdHJ1ZTsKKyAgICAgICAgfQorCisgICAgICAg
IEpTVGFpbENhbGwgdGFpbENhbGwoc3RhY2ttYXBJRCwgbV9ub2RlLCBXVEY6Om1vdmUoY2FsbEFy
Z3VtZW50cykpOworCisgICAgICAgIGV4aXRBcmd1bWVudHMuaW5zZXJ0KDAsIG1fb3V0LmNvbnN0
SW50MzIobmVlZHNUYWdUeXBlTnVtYmVyID8gMiA6IDEpKTsKKyAgICAgICAgZXhpdEFyZ3VtZW50
cy5pbnNlcnQoMCwgY29uc3ROdWxsKG1fb3V0LnJlZjgpKTsKKyAgICAgICAgZXhpdEFyZ3VtZW50
cy5pbnNlcnQoMCwgbV9vdXQuY29uc3RJbnQzMih0YWlsQ2FsbC5lc3RpbWF0ZWRTaXplKCkpKTsK
KyAgICAgICAgZXhpdEFyZ3VtZW50cy5pbnNlcnQoMCwgbV9vdXQuY29uc3RJbnQ2NChzdGFja21h
cElEKSk7CisKKyAgICAgICAgTFZhbHVlIGNhbGwgPQorICAgICAgICAgICAgbV9vdXQuY2FsbCht
X291dC5wYXRjaHBvaW50Vm9pZEludHJpbnNpYygpLCBleGl0QXJndW1lbnRzKTsKKyAgICAgICAg
c2V0SW5zdHJ1Y3Rpb25DYWxsaW5nQ29udmVudGlvbihjYWxsLCBMTFZNQW55UmVnQ2FsbENvbnYp
OworICAgICAgICBtX291dC51bnJlYWNoYWJsZSgpOworCisgICAgICAgIG1fZnRsU3RhdGUuanNU
YWlsQ2FsbHMuYXBwZW5kKHRhaWxDYWxsKTsKKyAgICB9CiAgICAgCiAgICAgdm9pZCBjb21waWxl
Q2FsbE9yQ29uc3RydWN0VmFyYXJncygpCiAgICAgewpAQCAtNDQxMCwxMCArNDQ1NywxNCBAQCBw
cml2YXRlOgogICAgICAgICAKICAgICAgICAgc3dpdGNoIChtX25vZGUtPm9wKCkpIHsKICAgICAg
ICAgY2FzZSBDYWxsVmFyYXJnczoKKyAgICAgICAgY2FzZSBUYWlsQ2FsbFZhcmFyZ3M6CisgICAg
ICAgIGNhc2UgVGFpbENhbGxWYXJhcmdzSW5saW5lZENhbGxlcjoKICAgICAgICAgY2FzZSBDb25z
dHJ1Y3RWYXJhcmdzOgogICAgICAgICAgICAganNBcmd1bWVudHMgPSBsb3dKU1ZhbHVlKG1fbm9k
ZS0+Y2hpbGQyKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgQ2FsbEZvcndh
cmRWYXJhcmdzOgorICAgICAgICBjYXNlIFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3M6CisgICAgICAg
IGNhc2UgVGFpbENhbGxGb3J3YXJkVmFyYXJnc0lubGluZWRDYWxsZXI6CiAgICAgICAgIGNhc2Ug
Q29uc3RydWN0Rm9yd2FyZFZhcmFyZ3M6CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVm
YXVsdDoKQEAgLTQ0NDAsOCArNDQ5MSwxNiBAQCBwcml2YXRlOgogICAgICAgICBzZXRJbnN0cnVj
dGlvbkNhbGxpbmdDb252ZW50aW9uKGNhbGwsIExMVk1DQ2FsbENvbnYpOwogICAgICAgICAKICAg
ICAgICAgbV9mdGxTdGF0ZS5qc0NhbGxWYXJhcmdzZXMuYXBwZW5kKEpTQ2FsbFZhcmFyZ3Moc3Rh
Y2ttYXBJRCwgbV9ub2RlKSk7Ci0gICAgICAgIAotICAgICAgICBzZXRKU1ZhbHVlKGNhbGwpOwor
CisgICAgICAgIHN3aXRjaCAobV9ub2RlLT5vcCgpKSB7CisgICAgICAgIGNhc2UgVGFpbENhbGxW
YXJhcmdzOgorICAgICAgICBjYXNlIFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3M6CisgICAgICAgICAg
ICBtX291dC51bnJlYWNoYWJsZSgpOworICAgICAgICAgICAgYnJlYWs7CisKKyAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIHNldEpTVmFsdWUoY2FsbCk7CisgICAgICAgIH0KICAgICB9CiAg
ICAgCiAgICAgdm9pZCBjb21waWxlTG9hZFZhcmFyZ3MoKQpAQCAtODI1Niw3ICs4MzE1LDE0IEBA
IHByaXZhdGU6CiAgICAgfQogICAgIHZvaWQgY2FsbFByZWZsaWdodCgpCiAgICAgewotICAgICAg
ICBjYWxsUHJlZmxpZ2h0KG1fbm9kZS0+b3JpZ2luLnNlbWFudGljKTsKKyAgICAgICAgQ29kZU9y
aWdpbiBjb2RlT3JpZ2luID0gbV9ub2RlLT5vcmlnaW4uc2VtYW50aWM7CisKKyAgICAgICAgaWYg
KG1fbm9kZS0+b3AoKSA9PSBUYWlsQ2FsbElubGluZWRDYWxsZXIKKyAgICAgICAgICAgIHx8IG1f
bm9kZS0+b3AoKSA9PSBUYWlsQ2FsbFZhcmFyZ3NJbmxpbmVkQ2FsbGVyCisgICAgICAgICAgICB8
fCBtX25vZGUtPm9wKCkgPT0gVGFpbENhbGxGb3J3YXJkVmFyYXJnc0lubGluZWRDYWxsZXIpCisg
ICAgICAgICAgICBjb2RlT3JpZ2luID0qY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUtPmdldENh
bGxlclNraXBwaW5nRGVhZEZyYW1lcygpOworCisgICAgICAgIGNhbGxQcmVmbGlnaHQoY29kZU9y
aWdpbik7CiAgICAgfQogICAgIAogICAgIHZvaWQgY2FsbENoZWNrKCkKQEAgLTg1MjcsMTMgKzg1
OTMsNDYgQEAgcHJpdmF0ZToKICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgdG9D
U3RyaW5nKCJDYW5ub3QgZmluZCB2YWx1ZSBmb3Igbm9kZTogIiwgbm9kZSkuZGF0YSgpKTsKICAg
ICAgICAgcmV0dXJuIEV4aXRWYWx1ZTo6ZGVhZCgpOwogICAgIH0KLSAgICAKKwogICAgIEV4aXRW
YWx1ZSBleGl0QXJndW1lbnQoRXhpdEFyZ3VtZW50TGlzdCYgYXJndW1lbnRzLCBEYXRhRm9ybWF0
IGZvcm1hdCwgTFZhbHVlIHZhbHVlKQogICAgIHsKICAgICAgICAgRXhpdFZhbHVlIHJlc3VsdCA9
IEV4aXRWYWx1ZTo6ZXhpdEFyZ3VtZW50KEV4aXRBcmd1bWVudChmb3JtYXQsIGFyZ3VtZW50cy5z
aXplKCkpKTsKICAgICAgICAgYXJndW1lbnRzLmFwcGVuZCh2YWx1ZSk7CiAgICAgICAgIHJldHVy
biByZXN1bHQ7CiAgICAgfQorCisgICAgRXhpdFZhbHVlIGV4aXRWYWx1ZUZvclRhaWxDYWxsKEV4
aXRBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgTm9kZSogbm9kZSkKKyAgICB7CisgICAgICAgIEFT
U0VSVChub2RlLT5zaG91bGRHZW5lcmF0ZSgpKTsKKyAgICAgICAgQVNTRVJUKG5vZGUtPmhhc1Jl
c3VsdCgpKTsKKworICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAgICAgICAgY2FzZSBK
U0NvbnN0YW50OgorICAgICAgICBjYXNlIEludDUyQ29uc3RhbnQ6CisgICAgICAgIGNhc2UgRG91
YmxlQ29uc3RhbnQ6CisgICAgICAgICAgICByZXR1cm4gRXhpdFZhbHVlOjpjb25zdGFudChub2Rl
LT5hc0pTVmFsdWUoKSk7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICB9CisKKyAgICAgICAgTG93ZXJlZE5vZGVWYWx1ZSB2YWx1ZSA9IG1fanNWYWx1ZVZh
bHVlcy5nZXQobm9kZSk7CisgICAgICAgIGlmIChpc1ZhbGlkKHZhbHVlKSkKKyAgICAgICAgICAg
IHJldHVybiBleGl0QXJndW1lbnQoYXJndW1lbnRzLCBEYXRhRm9ybWF0SlMsIHZhbHVlLnZhbHVl
KCkpOworCisgICAgICAgIHZhbHVlID0gbV9pbnQzMlZhbHVlcy5nZXQobm9kZSk7CisgICAgICAg
IGlmIChpc1ZhbGlkKHZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiBleGl0QXJndW1lbnQoYXJn
dW1lbnRzLCBEYXRhRm9ybWF0SW50MzIsIHZhbHVlLnZhbHVlKCkpOworCisgICAgICAgIHZhbHVl
ID0gbV9ib29sZWFuVmFsdWVzLmdldChub2RlKTsKKyAgICAgICAgaWYgKGlzVmFsaWQodmFsdWUp
KSB7CisgICAgICAgICAgICBMVmFsdWUgdmFsdWVUb1Bhc3MgPSBtX291dC56ZXJvRXh0KHZhbHVl
LnZhbHVlKCksIG1fb3V0LmludDMyKTsKKyAgICAgICAgICAgIHJldHVybiBleGl0QXJndW1lbnQo
YXJndW1lbnRzLCBEYXRhRm9ybWF0Qm9vbGVhbiwgdmFsdWVUb1Bhc3MpOworICAgICAgICB9CisK
KyAgICAgICAgLy8gRG91YmxlcyBhbmQgSW50NTIgaGF2ZSBiZWVuIGNvbnZlcnRlZCBieSBWYWx1
ZVJlcCgpCisgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsIHRvQ1N0cmluZygiQ2Fu
bm90IGZpbmQgdmFsdWUgZm9yIG5vZGU6ICIsIG5vZGUpLmRhdGEoKSk7CisgICAgfQogICAgIAog
ICAgIGJvb2wgZG9lc0tpbGwoRWRnZSBlZGdlKQogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMU3RhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTFN0YXRlLmgJKHJldmlzaW9uIDE5MDIxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMU3RhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiArMzcsNyBAQAogI2lu
Y2x1ZGUgIkZUTEpJVEZpbmFsaXplci5oIgogI2luY2x1ZGUgIkZUTEpTQ2FsbC5oIgogI2luY2x1
ZGUgIkZUTEpTQ2FsbFZhcmFyZ3MuaCIKKyNpbmNsdWRlICJGVExKU1RhaWxDYWxsLmgiCiAjaW5j
bHVkZSAiRlRMU3RhY2tNYXBzLmgiCiAjaW5jbHVkZSAiRlRMU3RhdGUuaCIKICNpbmNsdWRlIDx3
dGYvTm9uY29weWFibGUuaD4KQEAgLTc5LDYgKzgwLDcgQEAgcHVibGljOgogICAgIFNlZ21lbnRl
ZFZlY3RvcjxDaGVja0luRGVzY3JpcHRvcj4gY2hlY2tJbnM7CiAgICAgVmVjdG9yPEpTQ2FsbD4g
anNDYWxsczsKICAgICBWZWN0b3I8SlNDYWxsVmFyYXJncz4ganNDYWxsVmFyYXJnc2VzOworICAg
IFZlY3RvcjxKU1RhaWxDYWxsPiBqc1RhaWxDYWxsczsKICAgICBWZWN0b3I8Q1N0cmluZz4gY29k
ZVNlY3Rpb25OYW1lczsKICAgICBWZWN0b3I8Q1N0cmluZz4gZGF0YVNlY3Rpb25OYW1lczsKICAg
ICB2b2lkKiB1bndpbmREYXRhU2VjdGlvbjsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvQXNzZW1ibHlIZWxwZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAJKHJldmlzaW9uIDE5MDIxOSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzM4LDcgKzMzOCw3IEBAIEFzc2VtYmx5SGVscGVyczo6SnVtcCBBc3NlbWJseUhlbHBlcnM6OmUK
ICAgICAKICAgICBpZiAod2lkdGggPT0gTm9ybWFsSnVtcFdpZHRoKQogICAgICAgICByZXR1cm4g
cmVzdWx0OwotICAgIAorCiAgICAgUGF0Y2hhYmxlSnVtcCByZWFsSnVtcCA9IHBhdGNoYWJsZUp1
bXAoKTsKICAgICByZXN1bHQubGluayh0aGlzKTsKICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZURhdGEuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVEYXRhLmgJKHJldmlzaW9uIDE5MDIx
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZURhdGEuaAko
d29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksNyBAQCBzdHJ1Y3QgQ2FsbEZyYW1lU2h1ZmZsZURh
dGEgewogICAgIFZlY3RvcjxWYWx1ZVJlY292ZXJ5PiBhcmdzOwogI2lmIFVTRShKU1ZBTFVFNjQp
CiAgICAgUmVnaXN0ZXJNYXA8VmFsdWVSZWNvdmVyeT4gcmVnaXN0ZXJzOworICAgIEdQUlJlZyB0
YWdUeXBlTnVtYmVyIHsgSW52YWxpZEdQUlJlZyB9OwogCiAgICAgdm9pZCBzZXR1cENhbGxlZVNh
dmVSZWdpc3RlcnMoQ29kZUJsb2NrKik7CiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXI2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlcjY0LmNwcAkocmV2aXNpb24gMTkwMjE5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlcjY0LmNwcAko
d29ya2luZyBjb3B5KQpAQCAtODcsOSArODcsMTUgQEAgdm9pZCBDYWxsRnJhbWVTaHVmZmxlcjo6
ZW1pdEJveChDYWNoZWRSZQogICAgICAgICAgICAgbV9qaXQuemVyb0V4dGVuZDMyVG9QdHIoCiAg
ICAgICAgICAgICAgICAgY2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKS5ncHIoKSwKICAgICAgICAg
ICAgICAgICBjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLmdwcigpKTsKLSAgICAgICAgICAgIC8v
IFdlIGhhdmUgdG8gZG8gdGhpcyB0aGUgaGFyZCB3YXkuCi0gICAgICAgICAgICBtX2ppdC5vcjY0
KE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoVGFnVHlwZU51bWJlciksCi0gICAgICAgICAg
ICAgICAgY2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKS5ncHIoKSk7CisgICAgICAgICAgICBtX2xv
Y2tlZFJlZ2lzdGVycy5zZXQoY2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKS5ncHIoKSk7CisgICAg
ICAgICAgICBpZiAodHJ5QWNxdWlyZVRhZ1R5cGVOdW1iZXIoKSkKKyAgICAgICAgICAgICAgICBt
X2ppdC5vcjY0KG1fdGFnVHlwZU51bWJlciwgY2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKS5ncHIo
KSk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBXZSBoYXZlIHRvIGRv
IHRoaXMgdGhlIGhhcmQgd2F5CisgICAgICAgICAgICAgICAgbV9qaXQub3I2NChNYWNyb0Fzc2Vt
Ymxlcjo6VHJ1c3RlZEltbTY0KFRhZ1R5cGVOdW1iZXIpLAorICAgICAgICAgICAgICAgICAgICBj
YWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLmdwcigpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIG1fbG9ja2VkUmVnaXN0ZXJzLmNsZWFyKGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkuZ3By
KCkpOwogICAgICAgICAgICAgY2FjaGVkUmVjb3Zlcnkuc2V0UmVjb3ZlcnkoCiAgICAgICAgICAg
ICAgICAgVmFsdWVSZWNvdmVyeTo6aW5HUFIoY2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKS5ncHIo
KSwgRGF0YUZvcm1hdEpTKSk7CiAgICAgICAgICAgICBpZiAodmVyYm9zZSkKQEAgLTE0MSw3ICsx
NDcsMTIgQEAgdm9pZCBDYWxsRnJhbWVTaHVmZmxlcjo6ZW1pdEJveChDYWNoZWRSZQogICAgICAg
ICAgICAgQVNTRVJUKHJlc3VsdEdQUiAhPSBJbnZhbGlkR1BSUmVnKTsKICAgICAgICAgICAgIG1f
aml0LnB1cmlmeU5hTihjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLmZwcigpKTsKICAgICAgICAg
ICAgIG1faml0Lm1vdmVEb3VibGVUbzY0KGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkuZnByKCks
IHJlc3VsdEdQUik7Ci0gICAgICAgICAgICBtX2ppdC5zdWI2NChNYWNyb0Fzc2VtYmxlcjo6VHJ1
c3RlZEltbTY0KFRhZ1R5cGVOdW1iZXIpLCByZXN1bHRHUFIpOworICAgICAgICAgICAgbV9sb2Nr
ZWRSZWdpc3RlcnMuc2V0KHJlc3VsdEdQUik7CisgICAgICAgICAgICBpZiAodHJ5QWNxdWlyZVRh
Z1R5cGVOdW1iZXIoKSkKKyAgICAgICAgICAgICAgICBtX2ppdC5zdWI2NChtX3RhZ1R5cGVOdW1i
ZXIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbV9qaXQu
c3ViNjQoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChUYWdUeXBlTnVtYmVyKSwgcmVzdWx0
R1BSKTsKKyAgICAgICAgICAgIG1fbG9ja2VkUmVnaXN0ZXJzLmNsZWFyKHJlc3VsdEdQUik7CiAg
ICAgICAgICAgICB1cGRhdGVSZWNvdmVyeShjYWNoZWRSZWNvdmVyeSwgVmFsdWVSZWNvdmVyeTo6
aW5HUFIocmVzdWx0R1BSLCBEYXRhRm9ybWF0SlMpKTsKICAgICAgICAgICAgIGlmICh2ZXJib3Nl
KQogICAgICAgICAgICAgICAgIGRhdGFMb2coIiBpbnRvICIsIGNhY2hlZFJlY292ZXJ5LnJlY292
ZXJ5KCksICJcbiIpOwpAQCAtMzM3LDYgKzM0OCwyMSBAQCB2b2lkIENhbGxGcmFtZVNodWZmbGVy
OjplbWl0RGlzcGxhY2UoQ2FjCiAKICAgICBBU1NFUlQobV9yZWdpc3RlcnNbd2FudGVkUmVnXSA9
PSAmY2FjaGVkUmVjb3ZlcnkpOwogfQorICAgIAorYm9vbCBDYWxsRnJhbWVTaHVmZmxlcjo6dHJ5
QWNxdWlyZVRhZ1R5cGVOdW1iZXIoKQoreworICAgIGlmIChtX3RhZ1R5cGVOdW1iZXIgIT0gSW52
YWxpZEdQUlJlZykKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBtX3RhZ1R5cGVOdW1iZXIg
PSBnZXRGcmVlR1BSKCk7CisKKyAgICBpZiAobV90YWdUeXBlTnVtYmVyID09IEludmFsaWRHUFJS
ZWcpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIG1fbG9ja2VkUmVnaXN0ZXJzLnNldCht
X3RhZ1R5cGVOdW1iZXIpOworICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW02NChUYWdUeXBlTnVtYmVyKSwgbV90YWdUeXBlTnVtYmVyKTsKKyAgICByZXR1cm4gdHJ1ZTsK
K30KIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvQ2FsbEZyYW1lU2h1ZmZsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXIuY3BwCShyZXZpc2lvbiAxOTAyMTkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVyLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNzEsNiArNzEsMTAgQEAgQ2FsbEZyYW1lU2h1ZmZsZXI6OkNhbGxGcmFtZVNodWZmbGVy
KENDYQogICAgICAgICBlbHNlCiAgICAgICAgICAgICBhZGROZXcocmVnLmZwcigpLCBkYXRhLnJl
Z2lzdGVyc1tyZWddKTsKICAgICB9CisKKyAgICBtX3RhZ1R5cGVOdW1iZXIgPSBkYXRhLnRhZ1R5
cGVOdW1iZXI7CisgICAgaWYgKG1fdGFnVHlwZU51bWJlciAhPSBJbnZhbGlkR1BSUmVnKQorICAg
ICAgICBsb2NrR1BSKG1fdGFnVHlwZU51bWJlcik7CiAjZW5kaWYKIH0KIApAQCAtODAsMTIgKzg0
LDEyIEBAIHZvaWQgQ2FsbEZyYW1lU2h1ZmZsZXI6OmR1bXAoUHJpbnRTdHJlYW0KICAgICBzdGF0
aWMgY29uc3QgY2hhciogZGFuZ2VyRGVsaW1pdGVyICAgICAgID0gIiBYLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLVggIjsKICAgICBzdGF0aWMgY29uc3QgY2hhciogZGFuZ2VyQm91bmRz
RGVsaW1pdGVyID0gIiBYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFggIjsKICAgICBz
dGF0aWMgY29uc3QgY2hhciogZW1wdHlTcGFjZSAgICAgICAgICAgID0gIiAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIjsKLSAgICBBU1NFUlQobV9hbGlnbmVkTmV3RnJhbWVTaXpl
IDw9IG51bUxvY2FscygpKTsKICAgICBvdXQucHJpbnQoIiAgICAgICAgICAiKTsKICAgICBvdXQu
cHJpbnQoIiAgICAgICAgICAgT2xkIGZyYW1lICAgICAgICAgICAgICAgIik7CiAgICAgb3V0LnBy
aW50KCIgICAgICAgICAgIE5ldyBmcmFtZSAgICAgICAgICAgICAgICIpOwogICAgIG91dC5wcmlu
dCgiXG4iKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG1fYWxpZ25lZE9sZEZyYW1lU2l6ZSAr
IG51bUxvY2FscygpICsgMzsgKytpKSB7CisgICAgaW50IHRvdGFsU2l6ZSA9IG1fYWxpZ25lZE9s
ZEZyYW1lU2l6ZSArIHN0ZDo6bWF4KG51bUxvY2FscygpLCBtX2FsaWduZWROZXdGcmFtZVNpemUp
ICsgMzsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHRvdGFsU2l6ZTsgKytpKSB7CiAgICAgICAg
IFZpcnR1YWxSZWdpc3RlciBvbGQgeyBtX2FsaWduZWRPbGRGcmFtZVNpemUgLSBpIC0gMSB9Owog
ICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbmV3UmVnIHsgb2xkICsgbV9mcmFtZURlbHRhIH07CiAK
QEAgLTIwNCw2ICsyMDgsMTAgQEAgdm9pZCBDYWxsRnJhbWVTaHVmZmxlcjo6ZHVtcChQcmludFN0
cmVhbQogICAgICAgICBvdXQucHJpbnQoIiAgIE9sZCBmcmFtZSBvZmZzZXQgaXMgIiwgbV9vbGRG
cmFtZU9mZnNldCwgIlxuIik7CiAgICAgaWYgKG1fbmV3RnJhbWVPZmZzZXQpCiAgICAgICAgIG91
dC5wcmludCgiICAgTmV3IGZyYW1lIG9mZnNldCBpcyAiLCBtX25ld0ZyYW1lT2Zmc2V0LCAiXG4i
KTsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIGlmIChtX3RhZ1R5cGVOdW1iZXIgIT0gSW52YWxp
ZEdQUlJlZykKKyAgICAgICAgb3V0LnByaW50KCIgICBUYWdUeXBlTnVtYmVyIGlzIGN1cnJlbnRs
eSBpbiAiLCBtX3RhZ1R5cGVOdW1iZXIsICJcbiIpOworI2VuZGlmCiB9CiAKIENhY2hlZFJlY292
ZXJ5KiBDYWxsRnJhbWVTaHVmZmxlcjo6Z2V0Q2FjaGVkUmVjb3ZlcnkoVmFsdWVSZWNvdmVyeSBy
ZWNvdmVyeSkKQEAgLTI0NywxNyArMjU1LDI2IEBAIHZvaWQgQ2FsbEZyYW1lU2h1ZmZsZXI6OnNw
aWxsKENhY2hlZFJlY28KICAgICBBU1NFUlQoY2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKS5pc0lu
UmVnaXN0ZXJzKCkpOwogCiAgICAgVmlydHVhbFJlZ2lzdGVyIHNwaWxsU2xvdCB7IDAgfTsKLSAg
ICBmb3IgKFZpcnR1YWxSZWdpc3RlciBzbG90ID0gZmlyc3RPbGQoKTsgc2xvdCA8PSBsYXN0T2xk
KCk7IHNsb3QgLT0gMSkgewotICAgICAgICBBU1NFUlQoc2xvdCA8IG5ld0FzT2xkKGZpcnN0TmV3
KCkpKTsKKyAgICBmb3IgKFZpcnR1YWxSZWdpc3RlciBzbG90ID0gZmlyc3RPbGQoKTsgc2xvdCA8
PSBsYXN0T2xkKCk7IHNsb3QgKz0gMSkgeworICAgICAgICBpZiAoc2xvdCA+PSBuZXdBc09sZChm
aXJzdE5ldygpKSkKKyAgICAgICAgICAgIGJyZWFrOworCiAgICAgICAgIGlmIChnZXRPbGQoc2xv
dCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICBzcGlsbFNsb3QgPSBzbG90Owog
ICAgICAgICBicmVhazsKICAgICB9Ci0gICAgLy8gV2UgbXVzdCBoYXZlIGVub3VnaCBzbG90cyB0
byBiZSBhYmxlIHRvIGZpdCB0aGUgd2hvbGUKLSAgICAvLyBjYWxsZWUncyBmcmFtZSBmb3IgdGhl
IHNsb3cgcGF0aC4KLSAgICBSRUxFQVNFX0FTU0VSVChzcGlsbFNsb3QuaXNMb2NhbCgpKTsKKyAg
ICAvLyBXZSBtdXN0IGhhdmUgZW5vdWdoIHNsb3RzIHRvIGJlIGFibGUgdG8gZml0IHRoZSB3aG9s
ZSBjYWxsZWUncworICAgIC8vIGZyYW1lIGZvciB0aGUgc2xvdyBwYXRoIC0gdW5sZXNzIHdlIGFy
ZSBpbiB0aGUgRlRMLiBJbiB0aGF0CisgICAgLy8gY2FzZSwgd2UgYXJlIGFsbG93ZWQgdG8gZXh0
ZW5kIHRoZSBmcmFtZSAqb25jZSosIHNpbmNlIHdlIGFyZQorICAgIC8vIGd1YXJhbnRlZWQgdG8g
aGF2ZSBlbm91Z2ggYXZhaWxhYmxlIHNwYWNlIGZvciB0aGF0LgorICAgIGlmIChzcGlsbFNsb3Qg
Pj0gbmV3QXNPbGQoZmlyc3ROZXcoKSkgfHwgIXNwaWxsU2xvdC5pc0xvY2FsKCkpIHsKKyAgICAg
ICAgUkVMRUFTRV9BU1NFUlQoIW1fZGlkRXh0ZW5kRnJhbWUpOworICAgICAgICBleHRlbmRGcmFt
ZUlmTmVlZGVkKCk7CisgICAgICAgIHNwaWxsKGNhY2hlZFJlY292ZXJ5KTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KIAogICAgIGlmICh2ZXJib3NlKQogICAgICAgICBkYXRhTG9nKCIgICAqIFNw
aWxsaW5nICIsIGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCksICIgaW50byAiLCBzcGlsbFNsb3Qs
ICJcbiIpOwpAQCAtMjg2LDYgKzMwMywzOCBAQCB2b2lkIENhbGxGcmFtZVNodWZmbGVyOjplbWl0
RGVsdGFDaGVjaygpCiAgICAgICAgIGRhdGFMb2coIiAgU2tpcHBpbmcgdGhlIGZwLXNwIGRlbHRh
IGNoZWNrIHNpbmNlIHRoZXJlIGlzIHRvbyBtdWNoIHByZXNzdXJlIik7CiB9CiAKK3ZvaWQgQ2Fs
bEZyYW1lU2h1ZmZsZXI6OmV4dGVuZEZyYW1lSWZOZWVkZWQoKQoreworICAgIEFTU0VSVCghbV9k
aWRFeHRlbmRGcmFtZSk7CisgICAgQVNTRVJUKCFpc1VuZGVjaWRlZCgpKTsKKworICAgIFZpcnR1
YWxSZWdpc3RlciBmaXJzdFJlYWQgeyBmaXJzdE9sZCgpIH07CisgICAgZm9yICg7IGZpcnN0UmVh
ZCA8IFZpcnR1YWxSZWdpc3RlciB7IDAgfTsgZmlyc3RSZWFkICs9IDEpIHsKKyAgICAgICAgaWYg
KGdldE9sZChmaXJzdFJlYWQpKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorICAgIHNpemVf
dCBhdmFpbGFibGVTaXplID0gc3RhdGljX2Nhc3Q8c2l6ZV90PihmaXJzdFJlYWQub2Zmc2V0KCkg
LSBmaXJzdE9sZCgpLm9mZnNldCgpKTsKKyAgICBzaXplX3Qgd2FudGVkU2l6ZSA9IG1fbmV3RnJh
bWUuc2l6ZSgpICsgbV9uZXdGcmFtZU9mZnNldDsKKworICAgIGlmIChhdmFpbGFibGVTaXplIDwg
d2FudGVkU2l6ZSkgeworICAgICAgICBzaXplX3QgZGVsdGEgPSBXVEY6OnJvdW5kVXBUb011bHRp
cGxlT2Yoc3RhY2tBbGlnbm1lbnRSZWdpc3RlcnMoKSwgd2FudGVkU2l6ZSAtIGF2YWlsYWJsZVNp
emUpOworICAgICAgICBtX29sZEZyYW1lLmdyb3cobV9vbGRGcmFtZS5zaXplKCkgKyBkZWx0YSk7
CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZGVsdGE7ICsraSkKKyAgICAgICAgICAg
IG1fb2xkRnJhbWVbbV9vbGRGcmFtZS5zaXplKCkgLSBpIC0gMV0gPSBudWxscHRyOworICAgICAg
ICBtX2ppdC5zdWJQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW0zMihkZWx0YSAqIHNpemVv
ZihSZWdpc3RlcikpLCBNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworCisg
ICAgICAgIGlmIChpc1Nsb3dQYXRoKCkpCisgICAgICAgICAgICBtX2ZyYW1lRGVsdGEgPSBudW1M
b2NhbHMoKSArIEpTU3RhY2s6OkNhbGxlckZyYW1lQW5kUENTaXplOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBtX29sZEZyYW1lT2Zmc2V0ID0gbnVtTG9jYWxzKCk7CisKKyAgICAgICAgaWYg
KHZlcmJvc2UpCisgICAgICAgICAgICBkYXRhTG9nRigiICBOb3QgZW5vdWdoIHNwYWNlIC0gZXh0
ZW5kaW5nIHRoZSBvbGQgZnJhbWUgJXp1IHNsb3RcbiIsIGRlbHRhKTsKKyAgICB9CisKKyAgICBt
X2RpZEV4dGVuZEZyYW1lID0gdHJ1ZTsKK30KKwogdm9pZCBDYWxsRnJhbWVTaHVmZmxlcjo6cHJl
cGFyZUZvclNsb3dQYXRoKCkKIHsKICAgICBBU1NFUlQoaXNVbmRlY2lkZWQoKSk7CkBAIC0yOTYs
NyArMzQ1LDE1IEBAIHZvaWQgQ2FsbEZyYW1lU2h1ZmZsZXI6OnByZXBhcmVGb3JTbG93UGEKICAg
ICBtX25ld0ZyYW1lT2Zmc2V0ID0gLUpTU3RhY2s6OkNhbGxlckZyYW1lQW5kUENTaXplOwogCiAg
ICAgaWYgKHZlcmJvc2UpCi0gICAgICAgIGRhdGFMb2coIlxuXG5QcmVwYXJpbmcgZnJhbWUgZm9y
IHNsb3cgcGF0aCBjYWxsOlxuIiwgKnRoaXMpOworICAgICAgICBkYXRhTG9nKCJcblxuUHJlcGFy
aW5nIGZyYW1lIGZvciBzbG93IHBhdGggY2FsbDpcbiIpOworCisgICAgLy8gV2hlbiBjb21pbmcg
ZnJvbSB0aGUgRlRMLCB3ZSBuZWVkIHRvIGV4dGVuZCB0aGUgZnJhbWUuIEluIG90aGVyCisgICAg
Ly8gY2FzZXMsIHdlIG1heSBlbmQgdXAgZXh0ZW5kaW5nIHRoZSBmcmFtZSBpZiB3ZSBwcmV2aW91
c2x5CisgICAgLy8gc3BpbGxlZCB0aGluZ3MgKGUuZy4gaW4gcG9seW1vcnBoaWMgY2FjaGUpLgor
ICAgIGV4dGVuZEZyYW1lSWZOZWVkZWQoKTsKKworICAgIGlmICh2ZXJib3NlKQorICAgICAgICBk
YXRhTG9nKCp0aGlzKTsKIAogICAgIHByZXBhcmVBbnkoKTsKIApAQCAtNjQ2LDYgKzcwMywxMSBA
QCB2b2lkIENhbGxGcmFtZVNodWZmbGVyOjpwcmVwYXJlQW55KCkKICAgICAgICAgQVNTRVJUX1VO
VVNFRCh3cml0ZXNPSywgd3JpdGVzT0spOwogICAgIH0KIAorI2lmIFVTRShKU1ZBTFVFNjQpCisg
ICAgaWYgKG1fdGFnVHlwZU51bWJlciAhPSBJbnZhbGlkR1BSUmVnICYmIG1fbmV3UmVnaXN0ZXJz
W21fdGFnVHlwZU51bWJlcl0pCisgICAgICAgIHJlbGVhc2VHUFIobV90YWdUeXBlTnVtYmVyKTsK
KyNlbmRpZgorCiAgICAgLy8gSGFuZGxlIDIpIGJ5IGxvYWRpbmcgYWxsIHJlZ2lzdGVycy4gV2Ug
ZG9uJ3QgaGF2ZSB0byBkbyBhbnkKICAgICAvLyB3cml0ZXMsIHNpbmNlIHRoZXkgaGF2ZSBiZWVu
IHRha2VuIGNhcmUgb2YgYWJvdmUuCiAgICAgaWYgKHZlcmJvc2UpCkBAIC02NjAsNiArNzIyLDEx
IEBAIHZvaWQgQ2FsbEZyYW1lU2h1ZmZsZXI6OnByZXBhcmVBbnkoKQogICAgICAgICBBU1NFUlQo
Y2FjaGVkUmVjb3ZlcnktPnRhcmdldHMoKS5pc0VtcHR5KCkpOwogICAgIH0KIAorI2lmIFVTRShK
U1ZBTFVFNjQpCisgICAgaWYgKG1fdGFnVHlwZU51bWJlciAhPSBJbnZhbGlkR1BSUmVnKQorICAg
ICAgICByZWxlYXNlR1BSKG1fdGFnVHlwZU51bWJlcik7CisjZW5kaWYKKwogICAgIC8vIEF0IHRo
aXMgcG9pbnQsIHdlIGhhdmUgcmVhZCBldmVyeXRoaW5nIHdlIGNhcmVkIGFib3V0IGZyb20gdGhl
CiAgICAgLy8gc3RhY2ssIGFuZCB3cml0dGVuIGV2ZXJ5dGhpbmcgd2UgaGFkIHRvIHRvIHRoZSBz
dGFjay4KICAgICBpZiAodmVyYm9zZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
Q2FsbEZyYW1lU2h1ZmZsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0NhbGxGcmFtZVNodWZmbGVyLmgJKHJldmlzaW9uIDE5MDIxOSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNzMs
NiArNzMsMjEgQEAgcHVibGljOgogICAgICAgICBtX2xvY2tlZFJlZ2lzdGVycy5jbGVhcihncHIp
OwogICAgIH0KIAorICAgIHZvaWQgcmVzdG9yZUdQUihHUFJSZWcgZ3ByKQorICAgIHsKKyAgICAg
ICAgaWYgKCFtX25ld1JlZ2lzdGVyc1tncHJdKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAg
ICAgIGVuc3VyZUdQUigpOworI2lmIFVTRShKU1ZBTFVFMzJfNjQpCisgICAgICAgIEdQUlJlZyB0
ZW1wR1BSIHsgZ2V0RnJlZUdQUigpIH07CisgICAgICAgIGxvY2tHUFIodGVtcEdQUik7CisgICAg
ICAgIGVuc3VyZUdQUigpOworICAgICAgICByZWxlYXNlR1BSKHRlbXBHUFIpOworI2VuZGlmCisg
ICAgICAgIGVtaXREaXNwbGFjZSgqbV9uZXdSZWdpc3RlcnNbZ3ByXSk7CisgICAgfQorCiAgICAg
Ly8gWW91IGNhbiBvbmx5IHRha2UgYSBzbmFwc2hvdCBpZiB0aGUgcmVjb3ZlcnkgaGFzIG5vdCBz
dGFydGVkCiAgICAgLy8geWV0LiBUaGUgb25seSBvcGVyYXRpb25zIHRoYXQgYXJlIHZhbGlkIGJl
Zm9yZSB0YWtpbmcgYQogICAgIC8vIHNuYXBzaG90IGFyZSBsb2NrR1BSKCksIGFjcXVpcmVHUFIo
KSBhbmQgcmVsZWFzZUdQUigpLgpAQCAtMzA5LDYgKzMyNCwxMCBAQCBwcml2YXRlOgogICAgICAg
ICByZXR1cm4gcmVnID49IGZpcnN0T2xkKCkgJiYgcmVnIDw9IGxhc3RPbGQoKTsKICAgICB9CiAK
KyAgICBib29sIG1fZGlkRXh0ZW5kRnJhbWUgeyBmYWxzZSB9OworCisgICAgdm9pZCBleHRlbmRG
cmFtZUlmTmVlZGVkKCk7CisKICAgICAvLyBUaGlzIHN0b3JlcywgZm9yIGVhY2ggc2xvdCBpbiB0
aGUgbmV3IGZyYW1lLCBpbmZvcm1hdGlvbiBhYm91dAogICAgIC8vIHRoZSByZWNvdmVyeSBmb3Ig
dGhlIHZhbHVlIHRoYXQgc2hvdWxkIGV2ZW50dWFsbHkgZ28gaW50byB0aGF0CiAgICAgLy8gc2xv
dC4KQEAgLTM4NSwxMyArNDA0LDIzIEBAIHByaXZhdGU6CiAgICAgLy8gV2UgYWxzbyB1c2UgdGhp
cyB0byBsb2NrIHJlZ2lzdGVycyB0ZW1wb3JhcmlseSwgZm9yIGluc3RhbmNlIHRvCiAgICAgLy8g
ZW5zdXJlIHRoYXQgd2UgaGF2ZSBhdCBsZWFzdCAyIGF2YWlsYWJsZSByZWdpc3RlcnMgZm9yIGxv
YWRpbmcKICAgICAvLyBhIHBhaXIgb24gMzJiaXRzLgorI2lmIFVTRShKU1ZBTFVFNjQpCisgICAg
bXV0YWJsZSBSZWdpc3RlclNldCBtX2xvY2tlZFJlZ2lzdGVyczsKKyNlbHNlCiAgICAgUmVnaXN0
ZXJTZXQgbV9sb2NrZWRSZWdpc3RlcnM7CisjZW5kaWYKIAogICAgIC8vIFRoaXMgc3RvcmVzIHRo
ZSBjdXJyZW50IHJlY292ZXJpZXMgcHJlc2VudCBpbiByZWdpc3RlcnMuIEEgbnVsbAogICAgIC8v
IENhY2hlZFJlY292ZXJ5IG1lYW5zIHdlIGNhbiB0cmFzaCB0aGUgY3VycmVudCB2YWx1ZSBhcyB3
ZSBkb24ndAogICAgIC8vIGNhcmUgYWJvdXQgaXQuIAogICAgIFJlZ2lzdGVyTWFwPENhY2hlZFJl
Y292ZXJ5Kj4gbV9yZWdpc3RlcnM7CiAKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIG11dGFibGUg
R1BSUmVnIG1fdGFnVHlwZU51bWJlcjsKKworICAgIGJvb2wgdHJ5QWNxdWlyZVRhZ1R5cGVOdW1i
ZXIoKTsKKyNlbmRpZgorCiAgICAgLy8gVGhpcyBzdG9yZXMsIGZvciBlYWNoIHJlZ2lzdGVyLCBp
bmZvcm1hdGlvbiBhYm91dCB0aGUgcmVjb3ZlcnkKICAgICAvLyBmb3IgdGhlIHZhbHVlIHRoYXQg
c2hvdWxkIGV2ZW50dWFsbHkgZ28gaW50byB0aGF0IHJlZ2lzdGVyLiBUaGUKICAgICAvLyBvbmx5
IHJlZ2lzdGVycyB0aGF0IGhhdmUgYSB0YXJnZXQgcmVjb3Zlcnkgd2lsbCBiZSBjYWxsZWUtc2F2
ZQpAQCAtNDIxLDkgKzQ1MCwyNiBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAgICAgICBub25U
ZW1wID0gcmVnOwogICAgICAgICAgICAgfQogICAgICAgICB9CisKKyNpZiBVU0UoSlNWQUxVRTY0
KQorICAgICAgICBpZiAoIW5vblRlbXAgJiYgbV90YWdUeXBlTnVtYmVyICE9IEludmFsaWRHUFJS
ZWcgJiYgY2hlY2soUmVnIHsgbV90YWdUeXBlTnVtYmVyIH0pKSB7CisgICAgICAgICAgICBBU1NF
UlQobV9sb2NrZWRSZWdpc3RlcnMuZ2V0KG1fdGFnVHlwZU51bWJlcikpOworICAgICAgICAgICAg
bV9sb2NrZWRSZWdpc3RlcnMuY2xlYXIobV90YWdUeXBlTnVtYmVyKTsKKyAgICAgICAgICAgIG5v
blRlbXAgPSBSZWcgeyBtX3RhZ1R5cGVOdW1iZXIgfTsKKyAgICAgICAgICAgIG1fdGFnVHlwZU51
bWJlciA9IEludmFsaWRHUFJSZWc7CisgICAgICAgIH0KKyNlbmRpZgogICAgICAgICByZXR1cm4g
bm9uVGVtcDsKICAgICB9CiAKKyAgICBHUFJSZWcgZ2V0RnJlZVRlbXBHUFIoKSBjb25zdAorICAg
IHsKKyAgICAgICAgUmVnIGZyZWVUZW1wR1BSIHsgZ2V0RnJlZVJlZ2lzdGVyKFt0aGlzXSAoUmVn
IHJlZykgeyByZXR1cm4gcmVnLmlzR1BSKCkgJiYgIW1fbmV3UmVnaXN0ZXJzW3JlZ107IH0pIH07
CisgICAgICAgIGlmICghZnJlZVRlbXBHUFIpCisgICAgICAgICAgICByZXR1cm4gSW52YWxpZEdQ
UlJlZzsKKyAgICAgICAgcmV0dXJuIGZyZWVUZW1wR1BSLmdwcigpOworICAgIH0KKwogICAgIEdQ
UlJlZyBnZXRGcmVlR1BSKCkgY29uc3QKICAgICB7CiAgICAgICAgIFJlZyBmcmVlR1BSIHsgZ2V0
RnJlZVJlZ2lzdGVyKFtdIChSZWcgcmVnKSB7IHJldHVybiByZWcuaXNHUFIoKTsgfSkgfTsKQEAg
LTUxOSw2ICs1NjUsMzEgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIH0pOwogICAgIH0KIAorICAg
IHZvaWQgZW5zdXJlVGVtcEdQUigpCisgICAgeworICAgICAgICBpZiAoZ2V0RnJlZVRlbXBHUFIo
KSAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmICh2
ZXJib3NlKQorICAgICAgICAgICAgZGF0YUxvZygiICBGaW5kaW5nIGEgdGVtcCBHUFIgdG8gc3Bp
bGxcbiIpOworICAgICAgICBlbnN1cmVSZWdpc3RlcigKKyAgICAgICAgICAgIFt0aGlzXSAoY29u
c3QgQ2FjaGVkUmVjb3ZlcnkmIGNhY2hlZFJlY292ZXJ5KSB7CisgICAgICAgICAgICAgICAgaWYg
KGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkuaXNJbkdQUigpKSB7CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiAhbV9sb2NrZWRSZWdpc3RlcnMuZ2V0KGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5
KCkuZ3ByKCkpIAorICAgICAgICAgICAgICAgICAgICAgICAgJiYgIW1fbmV3UmVnaXN0ZXJzW2Nh
Y2hlZFJlY292ZXJ5LnJlY292ZXJ5KCkuZ3ByKCldOworICAgICAgICAgICAgICAgIH0KKyNpZiBV
U0UoSlNWQUxVRTMyXzY0KQorICAgICAgICAgICAgICAgIGlmIChjYWNoZWRSZWNvdmVyeS5yZWNv
dmVyeSgpLnRlY2huaXF1ZSgpID09IEluUGFpcikgeworICAgICAgICAgICAgICAgICAgICByZXR1
cm4gIW1fbG9ja2VkUmVnaXN0ZXJzLmdldChjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLnRhZ0dQ
UigpKQorICAgICAgICAgICAgICAgICAgICAgICAgJiYgIW1fbG9ja2VkUmVnaXN0ZXJzLmdldChj
YWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLnBheWxvYWRHUFIoKSkKKyAgICAgICAgICAgICAgICAg
ICAgICAgICYmICFtX25ld1JlZ2lzdGVyc1tjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLnRhZ0dQ
UigpXQorICAgICAgICAgICAgICAgICAgICAgICAgJiYgIW1fbmV3UmVnaXN0ZXJzW2NhY2hlZFJl
Y292ZXJ5LnJlY292ZXJ5KCkucGF5bG9hZEdQUigpXTsKKyAgICAgICAgICAgICAgICB9CisjZW5k
aWYKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICB9KTsKKyAgICB9
CisKICAgICB2b2lkIGVuc3VyZUdQUigpCiAgICAgewogICAgICAgICBpZiAoZ2V0RnJlZUdQUigp
ICE9IEludmFsaWRHUFJSZWcpCkBAIC01NzMsMTYgKzY0NCwyNCBAQCBwcml2YXRlOgogICAgIHsK
ICAgICAgICAgQVNTRVJUKGpzVmFsdWVSZWdzICYmICFnZXROZXcoanNWYWx1ZVJlZ3MpKTsKICAg
ICAgICAgQ2FjaGVkUmVjb3ZlcnkqIGNhY2hlZFJlY292ZXJ5ID0gYWRkQ2FjaGVkUmVjb3Zlcnko
cmVjb3ZlcnkpOwotICAgICAgICBBU1NFUlQoIWNhY2hlZFJlY292ZXJ5LT53YW50ZWRKU1ZhbHVl
UmVncygpKTsKLSAgICAgICAgY2FjaGVkUmVjb3ZlcnktPnNldFdhbnRlZEpTVmFsdWVSZWdzKGpz
VmFsdWVSZWdzKTsKICNpZiBVU0UoSlNWQUxVRTY0KQorICAgICAgICBpZiAoY2FjaGVkUmVjb3Zl
cnktPndhbnRlZEpTVmFsdWVSZWdzKCkpCisgICAgICAgICAgICBtX25ld1JlZ2lzdGVyc1tjYWNo
ZWRSZWNvdmVyeS0+d2FudGVkSlNWYWx1ZVJlZ3MoKS5ncHIoKV0gPSBudWxscHRyOwogICAgICAg
ICBtX25ld1JlZ2lzdGVyc1tqc1ZhbHVlUmVncy5ncHIoKV0gPSBjYWNoZWRSZWNvdmVyeTsKICNl
bHNlCisgICAgICAgIGlmIChKU1ZhbHVlUmVncyBvbGRSZWdzIHsgY2FjaGVkUmVjb3ZlcnktPndh
bnRlZEpTVmFsdWVSZWdzKCkgfSkgeworICAgICAgICAgICAgaWYgKG9sZFJlZ3MucGF5bG9hZEdQ
UigpKQorICAgICAgICAgICAgICAgIG1fbmV3UmVnaXN0ZXJzW29sZFJlZ3MucGF5bG9hZEdQUigp
XSA9IG51bGxwdHI7CisgICAgICAgICAgICBpZiAob2xkUmVncy50YWdHUFIoKSkKKyAgICAgICAg
ICAgICAgICBtX25ld1JlZ2lzdGVyc1tvbGRSZWdzLnRhZ0dQUigpXSA9IG51bGxwdHI7CisgICAg
ICAgIH0KICAgICAgICAgaWYgKGpzVmFsdWVSZWdzLnBheWxvYWRHUFIoKSAhPSBJbnZhbGlkR1BS
UmVnKQogICAgICAgICAgICAgbV9uZXdSZWdpc3RlcnNbanNWYWx1ZVJlZ3MucGF5bG9hZEdQUigp
XSA9IGNhY2hlZFJlY292ZXJ5OwogICAgICAgICBpZiAoanNWYWx1ZVJlZ3MudGFnR1BSKCkgIT0g
SW52YWxpZEdQUlJlZykKICAgICAgICAgICAgIG1fbmV3UmVnaXN0ZXJzW2pzVmFsdWVSZWdzLnRh
Z0dQUigpXSA9IGNhY2hlZFJlY292ZXJ5OwogI2VuZGlmCisgICAgICAgIEFTU0VSVCghY2FjaGVk
UmVjb3ZlcnktPndhbnRlZEpTVmFsdWVSZWdzKCkpOworICAgICAgICBjYWNoZWRSZWNvdmVyeS0+
c2V0V2FudGVkSlNWYWx1ZVJlZ3MoanNWYWx1ZVJlZ3MpOwogICAgIH0KIAogICAgIHZvaWQgYWRk
TmV3KEZQUlJlZyBmcHIsIFZhbHVlUmVjb3ZlcnkgcmVjb3ZlcnkpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAJKHJldmlzaW9uIDE5MDIxOSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5Myw2ICsxOTMs
NyBAQCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChPcGNvZGVJRCBvcGNvZGVJCiAKICAgICBpZiAo
b3Bjb2RlSUQgPT0gb3BfdGFpbF9jYWxsKSB7CiAgICAgICAgIENhbGxGcmFtZVNodWZmbGVEYXRh
IHNodWZmbGVEYXRhOworICAgICAgICBzaHVmZmxlRGF0YS50YWdUeXBlTnVtYmVyID0gR1BSSW5m
bzo6dGFnVHlwZU51bWJlclJlZ2lzdGVyOwogICAgICAgICBzaHVmZmxlRGF0YS5udW1Mb2NhbHMg
PQogICAgICAgICAgICAgaW5zdHJ1Y3Rpb25bNF0udS5vcGVyYW5kIC0gc2l6ZW9mKENhbGxlckZy
YW1lQW5kUEMpIC8gc2l6ZW9mKFJlZ2lzdGVyKTsKICAgICAgICAgc2h1ZmZsZURhdGEuYXJncy5y
ZXNpemUoaW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvUmVnLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9S
ZWcuaAkocmV2aXNpb24gMTkwMjE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9SZWcu
aAkod29ya2luZyBjb3B5KQpAQCAtNTUsNiArNTUsMTEgQEAgcHVibGljOgogICAgICAgICA6IG1f
aW5kZXgoaW52YWxpZCgpKQogICAgIHsKICAgICB9CisKKyAgICBSZWcoV1RGOjpIYXNoVGFibGVE
ZWxldGVkVmFsdWVUeXBlKQorICAgICAgICA6IG1faW5kZXgoZGVsZXRlZCgpKQorICAgIHsKKyAg
ICB9CiAgICAgCiAgICAgUmVnKE1hY3JvQXNzZW1ibGVyOjpSZWdpc3RlcklEIHJlZykKICAgICAg
ICAgOiBtX2luZGV4KE1hY3JvQXNzZW1ibGVyOjpyZWdpc3RlckluZGV4KHJlZykpCkBAIC0xMDIs
NiArMTA3LDggQEAgcHVibGljOgogICAgIGJvb2wgaXNTZXQoKSBjb25zdCB7IHJldHVybiBtX2lu
ZGV4ICE9IGludmFsaWQoKTsgfQogICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4g
IWlzU2V0KCk7IH0KICAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4g
aXNTZXQoKTsgfQorCisgICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0IHsg
cmV0dXJuIG1faW5kZXggPT0gZGVsZXRlZCgpOyB9CiAgICAgCiAgICAgYm9vbCBpc0dQUigpIGNv
bnN0CiAgICAgewpAQCAtMTY1LDEyICsxNzIsMzIgQEAgcHVibGljOgogCiBwcml2YXRlOgogICAg
IHN0YXRpYyB1aW50OF90IGludmFsaWQoKSB7IHJldHVybiAweGZmOyB9CisKKyAgICBzdGF0aWMg
dWludDhfdCBkZWxldGVkKCkgeyByZXR1cm4gMHhmZTsgfQogICAgIAogICAgIHVpbnQ4X3QgbV9p
bmRleDsKIH07CiAKK3N0cnVjdCBSZWdIYXNoIHsKKyAgICBzdGF0aWMgdW5zaWduZWQgaGFzaChj
b25zdCBSZWcmIGtleSkgeyByZXR1cm4ga2V5Lmhhc2goKTsgfQorICAgIHN0YXRpYyBib29sIGVx
dWFsKGNvbnN0IFJlZyYgYSwgY29uc3QgUmVnJiBiKSB7IHJldHVybiBhID09IGI7IH0KKyAgICBz
dGF0aWMgY29uc3QgYm9vbCBzYWZlVG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IHRydWU7Cit9
OworCiB9IC8vIG5hbWVzcGFjZSBKU0MKIAorbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFQ+IHN0cnVjdCBEZWZhdWx0SGFzaDsKK3RlbXBsYXRlPD4gc3RydWN0IERlZmF1bHRI
YXNoPEpTQzo6UmVnPiB7CisgICAgdHlwZWRlZiBKU0M6OlJlZ0hhc2ggSGFzaDsKK307CisKK3Rl
bXBsYXRlPHR5cGVuYW1lIFQ+IHN0cnVjdCBIYXNoVHJhaXRzOwordGVtcGxhdGU8PiBzdHJ1Y3Qg
SGFzaFRyYWl0czxKU0M6OlJlZz4gOiBTaW1wbGVDbGFzc0hhc2hUcmFpdHM8SlNDOjpSZWc+IHsg
fTsKKworfSAvLyBuYW1lc3BhY2UgV1RGCisKICNlbmRpZiAvLyBFTkFCTEUoSklUKQogCiAjZW5k
aWYgLy8gUmVnX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlvbnMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJ
KHJldmlzaW9uIDE5MDIxOSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL09wdGlv
bnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTI4LDcgKzEyOCw3IEBAIHR5cGVkZWYgY29uc3QgY2hh
ciogb3B0aW9uU3RyaW5nOwogICAgIHYoYm9vbCwgZm9yY2VQcm9maWxlckJ5dGVjb2RlR2VuZXJh
dGlvbiwgZmFsc2UsIG51bGxwdHIpIFwKICAgICBcCiAgICAgdihib29sLCBlbmFibGVGdW5jdGlv
bkRvdEFyZ3VtZW50cywgdHJ1ZSwgbnVsbHB0cikgXAotICAgIHYoYm9vbCwgZW5hYmxlVGFpbENh
bGxzLCBmYWxzZSwgbnVsbHB0cikgXAorICAgIHYoYm9vbCwgZW5hYmxlVGFpbENhbGxzLCB0cnVl
LCBudWxscHRyKSBcCiAgICAgXAogICAgIC8qIHNob3dEaXNhc3NlbWJseSBpbXBsaWVzIHNob3dE
RkdEaXNhc3NlbWJseS4gKi8gXAogICAgIHYoYm9vbCwgc2hvd0Rpc2Fzc2VtYmx5LCBmYWxzZSwg
ImR1bXBzIGRpc2Fzc2VtYmx5IG9mIGFsbCBKSVQgY29tcGlsZWQgY29kZSB1cG9uIGNvbXBpbGF0
aW9uIikgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9kZmctdGFp
bC1jYWxscy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3Ry
ZXNzL2RmZy10YWlsLWNhbGxzLmpzCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3Rlc3RzL3N0cmVzcy9kZmctdGFpbC1jYWxscy5qcwkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDU2IEBACisoZnVuY3Rpb24gbm9uSW5saW5lZFRhaWxDYWxsKCkgeworICAgIGZ1bmN0aW9u
IGNhbGxlZSgpIHsgaWYgKGNhbGxlZS5jYWxsZXIgIT0gbm9uSW5saW5lZFRhaWxDYWxsKSB0aHJv
dyBuZXcgRXJyb3IoKTsgfQorICAgIG5vSW5saW5lKGNhbGxlZSk7CisKKyAgICBmdW5jdGlvbiBj
YWxsZXIoKSB7ICJ1c2Ugc3RyaWN0IjsgcmV0dXJuIGNhbGxlZSgpOyB9CisKKyAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IDEwMDAwOyArK2kpCisgICAgICAgIGNhbGxlcigpOworCisgICAgZnVuY3Rp
b24gbG9vcChuKSB7ICJ1c2Ugc3RyaWN0IjsgaWYgKG4gPiAwKSByZXR1cm4gbG9vcChuIC0gMSk7
IH0KKyAgICBub0lubGluZShsb29wKTsKKworICAgIGxvb3AoMTAwMDAwMCk7Cit9KSgpOworCiso
ZnVuY3Rpb24gaW5saW5lZFRhaWxDYWxsKCkgeworICAgIGZ1bmN0aW9uIGNhbGxlZSgpIHsgaWYg
KGNhbGxlZS5jYWxsZXIgIT0gaW5saW5lZFRhaWxDYWxsKSB0aHJvdyBuZXcgRXJyb3IoKTsgfQor
ICAgIGZ1bmN0aW9uIGNhbGxlcigpIHsgInVzZSBzdHJpY3QiOyByZXR1cm4gY2FsbGVlKCk7IH0K
KworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7ICsraSkKKyAgICAgICAgY2FsbGVyKCk7
CisKKyAgICBmdW5jdGlvbiBsb29wKG4pIHsgInVzZSBzdHJpY3QiOyBpZiAobiA+IDApIHJldHVy
biBsb29wKG4gLSAxKTsgfQorCisgICAgbG9vcCgxMDAwMDAwKTsKK30pKCk7CisKKyhmdW5jdGlv
biBub25JbmxpbmVkRW11bGF0ZWRUYWlsQ2FsbCgpIHsKKyAgICBmdW5jdGlvbiBlbXVsYXRvcigp
IHsgY2FsbGVyKCk7IH0KKyAgICBmdW5jdGlvbiBjYWxsZWUoKSB7IGlmIChjYWxsZWUuY2FsbGVy
ICE9IGVtdWxhdG9yKSB0aHJvdyBuZXcgRXJyb3IoKTsgfQorICAgIG5vSW5saW5lKGNhbGxlZSk7
CisgICAgZnVuY3Rpb24gY2FsbGVyKCkgeyAidXNlIHN0cmljdCI7IHJldHVybiBjYWxsZWUoKTsg
fQorCisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsgKytpKQorICAgICAgICBlbXVsYXRv
cigpOworCisgICAgZnVuY3Rpb24gcGFkKG4pIHsgInVzZSBzdHJpY3QiOyByZXR1cm4gbG9vcChu
KTsgfQorICAgIGZ1bmN0aW9uIGxvb3AobikgeyAidXNlIHN0cmljdCI7IGlmIChuID4gMCkgcmV0
dXJuIHBhZChuIC0gMSk7IH0KKyAgICBub0lubGluZShsb29wKTsKKworICAgIGxvb3AoMTAwMDAw
MCk7Cit9KSgpOworCisoZnVuY3Rpb24gaW5saW5lZEVtdWxhdGVkVGFpbENhbGwoKSB7CisgICAg
ZnVuY3Rpb24gZW11bGF0b3IoKSB7IGNhbGxlcigpOyB9CisgICAgZnVuY3Rpb24gY2FsbGVlKCkg
eyBpZiAoY2FsbGVlLmNhbGxlciAhPSBlbXVsYXRvcikgdGhyb3cgbmV3IEVycm9yKCk7IH0KKyAg
ICBmdW5jdGlvbiBjYWxsZXIoKSB7ICJ1c2Ugc3RyaWN0IjsgcmV0dXJuIGNhbGxlZSgpOyB9CisK
KyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwOyArK2kpCisgICAgICAgIGVtdWxhdG9yKCk7
CisKKyAgICBmdW5jdGlvbiBwYWQobikgeyAidXNlIHN0cmljdCI7IHJldHVybiBsb29wKG4pOyB9
CisgICAgZnVuY3Rpb24gbG9vcChuKSB7ICJ1c2Ugc3RyaWN0IjsgaWYgKG4gPiAwKSByZXR1cm4g
cGFkKG4gLSAxKTsgfQorCisgICAgbG9vcCgxMDAwMDAwKTsKK30pKCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL211dHVhbC10YWlsLWNhbGwtbm8tc3RhY2stb3Zl
cmZsb3cuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVz
cy9tdXR1YWwtdGFpbC1jYWxsLW5vLXN0YWNrLW92ZXJmbG93LmpzCShyZXZpc2lvbiAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9tdXR1YWwtdGFpbC1jYWxsLW5vLXN0
YWNrLW92ZXJmbG93LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzEgQEAKK2Z1bmN0aW9u
IHNob3VsZFRocm93KGZ1bmMsIGVycm9yTWVzc2FnZSkgeworICAgIHZhciBlcnJvclRocm93biA9
IGZhbHNlOworICAgIHZhciBlcnJvciA9IG51bGw7CisgICAgdHJ5IHsKKyAgICAgICAgZnVuYygp
OworICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgZXJyb3JUaHJvd24gPSB0cnVlOworICAgICAg
ICBlcnJvciA9IGU7CisgICAgfQorICAgIGlmICghZXJyb3JUaHJvd24pCisgICAgICAgIHRocm93
IG5ldyBFcnJvcignbm90IHRocm93bicpOworICAgIGlmIChTdHJpbmcoZXJyb3IpICE9PSBlcnJv
ck1lc3NhZ2UpCisgICAgICAgIHRocm93IG5ldyBFcnJvcihgYmFkIGVycm9yOiAke1N0cmluZyhl
cnJvcil9YCk7Cit9CisKK2Z1bmN0aW9uIHNsb3BweUNvdW50ZG93bihuKSB7CisgICAgZnVuY3Rp
b24gZXZlbihuKSB7CisgICAgICAgIGlmIChuID09IDApCisgICAgICAgICAgICByZXR1cm4gbjsK
KyAgICAgICAgcmV0dXJuIG9kZChuIC0gMSk7CisgICAgfQorCisgICAgZnVuY3Rpb24gb2RkKG4p
IHsKKyAgICAgICAgaWYgKG4gPT0gMSkKKyAgICAgICAgICAgIHJldHVybiBuOworICAgICAgICBy
ZXR1cm4gZXZlbihuIC0gMSk7CisgICAgfQorCisgICAgaWYgKG4gJSAyID09PSAwKQorICAgICAg
ICByZXR1cm4gZXZlbihuKTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBvZGQobik7Cit9CisK
K2Z1bmN0aW9uIHN0cmljdENvdW50ZG93bihuKSB7CisgICAgInVzZSBzdHJpY3QiOworCisgICAg
ZnVuY3Rpb24gZXZlbihuKSB7CisgICAgICAgIGlmIChuID09IDApCisgICAgICAgICAgICByZXR1
cm4gbjsKKyAgICAgICAgcmV0dXJuIG9kZChuIC0gMSk7CisgICAgfQorCisgICAgZnVuY3Rpb24g
b2RkKG4pIHsKKyAgICAgICAgaWYgKG4gPT0gMSkKKyAgICAgICAgICAgIHJldHVybiBuOworICAg
ICAgICByZXR1cm4gZXZlbihuIC0gMSk7CisgICAgfQorCisgICAgaWYgKG4gJSAyID09PSAwKQor
ICAgICAgICByZXR1cm4gZXZlbihuKTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBvZGQobik7
Cit9CisKK3Nob3VsZFRocm93KGZ1bmN0aW9uICgpIHsgc2xvcHB5Q291bnRkb3duKDEwMDAwMCk7
IH0sICJSYW5nZUVycm9yOiBNYXhpbXVtIGNhbGwgc3RhY2sgc2l6ZSBleGNlZWRlZC4iKTsKK3N0
cmljdENvdW50ZG93bigxMDAwMDApOworCisvLyBQYXJpdHkgYWx0ZXJuaW5nCitmdW5jdGlvbiBv
ZGQobikgeworICAgICJ1c2Ugc3RyaWN0IjsKKyAgICBpZiAobiA+IDApCisgICAgICAgIHJldHVy
biBldmVuKG4sIDApOworfQorCitmdW5jdGlvbiBldmVuKG4pIHsKKyAgICAidXNlIHN0cmljdCI7
CisgICAgcmV0dXJuIG9kZChuIC0gMSk7Cit9CisKK29kZCgxMDAwMDApOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy90YWlsLWNhbGwtbm8tc3RhY2stb3ZlcmZsb3cu
anMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy90YWls
LWNhbGwtbm8tc3RhY2stb3ZlcmZsb3cuanMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvdGVzdHMvc3RyZXNzL3RhaWwtY2FsbC1uby1zdGFjay1vdmVyZmxvdy5qcwkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDQ1IEBACitmdW5jdGlvbiBzaG91bGRUaHJvdyhmdW5jLCBl
cnJvck1lc3NhZ2UpIHsKKyAgICB2YXIgZXJyb3JUaHJvd24gPSBmYWxzZTsKKyAgICB2YXIgZXJy
b3IgPSBudWxsOworICAgIHRyeSB7CisgICAgICAgIGZ1bmMoKTsKKyAgICB9IGNhdGNoIChlKSB7
CisgICAgICAgIGVycm9yVGhyb3duID0gdHJ1ZTsKKyAgICAgICAgZXJyb3IgPSBlOworICAgIH0K
KyAgICBpZiAoIWVycm9yVGhyb3duKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ25vdCB0aHJv
d24nKTsKKyAgICBpZiAoU3RyaW5nKGVycm9yKSAhPT0gZXJyb3JNZXNzYWdlKQorICAgICAgICB0
aHJvdyBuZXcgRXJyb3IoYGJhZCBlcnJvcjogJHtTdHJpbmcoZXJyb3IpfWApOworfQorCitmdW5j
dGlvbiBzbG9wcHlMb29wKG4pIHsKKyAgICBpZiAobiA+IDApCisgICAgICAgIHJldHVybiBzbG9w
cHlMb29wKG4gLSAxKTsKK30KKworZnVuY3Rpb24gc3RyaWN0TG9vcChuKSB7CisgICAgInVzZSBz
dHJpY3QiOworICAgIGlmIChuID4gMCkKKyAgICAgICAgcmV0dXJuIHN0cmljdExvb3AobiAtIDEp
OworfQorCisvLyBXZSBoYXZlIHR3byBvZiB0aGVzZSBzbyB0aGF0IHdlIGNhbiB0ZXN0IGRpZmZl
cmVudCBzdGFjayBhbGlnbm1lbnRzCitmdW5jdGlvbiBzdHJpY3RMb29wQXJpdHlGaXh1cDEobiwg
ZHVtbXkpIHsKKyAgICAidXNlIHN0cmljdCI7CisgICAgaWYgKG4gPiAwKQorICAgICAgICByZXR1
cm4gc3RyaWN0TG9vcEFyaXR5Rml4dXAxKG4gLSAxKTsKK30KKworZnVuY3Rpb24gc3RyaWN0TG9v
cEFyaXR5Rml4dXAyKG4sIGR1bW15MSwgZHVtbXkyKSB7CisgICAgInVzZSBzdHJpY3QiOworICAg
IGlmIChuID4gMCkKKyAgICAgICAgcmV0dXJuIHN0cmljdExvb3BBcml0eUZpeHVwMihuIC0gMSk7
Cit9CisKK3Nob3VsZFRocm93KGZ1bmN0aW9uICgpIHsgc2xvcHB5TG9vcCgxMDAwMDApOyB9LCAn
UmFuZ2VFcnJvcjogTWF4aW11bSBjYWxsIHN0YWNrIHNpemUgZXhjZWVkZWQuJyk7CisKKy8vIFRo
ZXNlIHNob3VsZCBub3QgdGhyb3cKK3N0cmljdExvb3AoMTAwMDAwKTsKK3N0cmljdExvb3BBcml0
eUZpeHVwMSgxMDAwMDAwKTsKK3N0cmljdExvb3BBcml0eUZpeHVwMigxMDAwMDAwKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvdGFpbC1jYWxsLXJlY29nbml6ZS5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3RhaWwt
Y2FsbC1yZWNvZ25pemUuanMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
dGVzdHMvc3RyZXNzL3RhaWwtY2FsbC1yZWNvZ25pemUuanMJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwxNzggQEAKK2Z1bmN0aW9uIGNhbGxlck11c3RCZVJ1bigpIHsKKyAgICBpZiAoIU9iamVj
dC5pcyhjYWxsZXJNdXN0QmVSdW4uY2FsbGVyLCBydW5UZXN0cykpCisgICAgICAgIHRocm93IEVy
cm9yKCJXcm9uZyBjYWxsZXIsIGV4cGVjdGVkIHJ1biBidXQgZ290ICIsIGNhbGxlck11c3RCZVJ1
bi5jYWxsZXIpOworfQorCitmdW5jdGlvbiBjYWxsZXJNdXN0QmVTdHJpY3QoKSB7CisgICAgdmFy
IGVycm9yVGhyb3duID0gZmFsc2U7CisgICAgdHJ5IHsKKyAgICAgICAgY2FsbGVyTXVzdEJlU3Ry
aWN0LmNhbGxlcjsKKyAgICB9IGNhdGNoIChlKSB7CisgICAgICAgIGVycm9yVGhyb3duID0gdHJ1
ZTsKKyAgICB9CisgICAgaWYgKCFlcnJvclRocm93bikKKyAgICAgICAgdGhyb3cgRXJyb3IoIldy
b25nIGNhbGxlciwgZXhwZWN0ZWQgc3RyaWN0IGNhbGxlciBidXQgZ290ICIsIGNhbGxlck11c3RC
ZVN0cmljdC5jYWxsZXIpOworfQorCitmdW5jdGlvbiBydW5UZXN0cygpIHsKKyAgICAvLyBTdGF0
ZW1lbnQgdGVzdHMKKyAgICAoZnVuY3Rpb24gc2ltcGxlVGFpbENhbGwoKSB7CisgICAgICAgICJ1
c2Ugc3RyaWN0IjsKKyAgICAgICAgcmV0dXJuIGNhbGxlck11c3RCZVJ1bigpOworICAgIH0pKCk7
CisKKyAgICAoZnVuY3Rpb24gbm9UYWlsQ2FsbEluVHJ5KCkgeworICAgICAgICAidXNlIHN0cmlj
dCI7CisgICAgICAgIHRyeSB7CisgICAgICAgICAgICByZXR1cm4gY2FsbGVyTXVzdEJlU3RyaWN0
KCk7CisgICAgICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgICAgIHRocm93IGU7CisgICAgICAg
IH0KKyAgICB9KSgpOworCisgICAgKGZ1bmN0aW9uIHRhaWxDYWxsSW5DYXRjaCgpIHsKKyAgICAg
ICAgInVzZSBzdHJpY3QiOworICAgICAgICB0cnkgeyB9IGNhdGNoIChlKSB7IHJldHVybiBjYWxs
ZXJNdXN0QmVSdW4oKTsgfQorICAgIH0pKCk7CisKKyAgICAoZnVuY3Rpb24gdGFpbENhbGxJbkZp
bmFsbHkoKSB7CisgICAgICAgICJ1c2Ugc3RyaWN0IjsKKyAgICAgICAgdHJ5IHsgfSBmaW5hbGx5
IHsgcmV0dXJuIGNhbGxlck11c3RCZVJ1bigpOyB9CisgICAgfSkoKTsKKworICAgIChmdW5jdGlv
biB0YWlsQ2FsbEluRmluYWxseVdpdGhDYXRjaCgpIHsKKyAgICAgICAgInVzZSBzdHJpY3QiOwor
ICAgICAgICB0cnkgeyB9IGNhdGNoIChlKSB7IH0gZmluYWxseSB7IHJldHVybiBjYWxsZXJNdXN0
QmVSdW4oKTsgfQorICAgIH0pKCk7CisKKyAgICAoZnVuY3Rpb24gdGFpbENhbGxJbkZpbmFsbHlX
aXRoQ2F0Y2hUYWtlbigpIHsKKyAgICAgICAgInVzZSBzdHJpY3QiOworICAgICAgICB0cnkgeyB0
aHJvdyBudWxsOyB9IGNhdGNoIChlKSB7IH0gZmluYWxseSB7IHJldHVybiBjYWxsZXJNdXN0QmVS
dW4oKTsgfQorICAgIH0pKCk7CisKKyAgICAoZnVuY3Rpb24gbm9UYWlsQ2FsbEluQ2F0Y2hJZkZp
bmFsbHkoKSB7CisgICAgICAgICJ1c2Ugc3RyaWN0IjsKKyAgICAgICAgdHJ5IHsgdGhyb3cgbnVs
bDsgfSBjYXRjaCAoZSkgeyByZXR1cm4gY2FsbGVyTXVzdEJlU3RyaWN0KCk7IH0gZmluYWxseSB7
IH0KKyAgICB9KSgpOworCisgICAgKGZ1bmN0aW9uIHRhaWxDYWxsSW5Gb3IoKSB7CisgICAgICAg
ICJ1c2Ugc3RyaWN0IjsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDsgKytpKQorICAg
ICAgICAgICAgcmV0dXJuIGNhbGxlck11c3RCZVJ1bigpOworICAgIH0pKCk7CisKKyAgICAoZnVu
Y3Rpb24gdGFpbENhbGxJbldoaWxlKCkgeworICAgICAgICAidXNlIHN0cmljdCI7CisgICAgICAg
IHdoaWxlICh0cnVlKQorICAgICAgICAgICAgcmV0dXJuIGNhbGxlck11c3RCZVJ1bigpOworICAg
IH0pKCk7CisKKyAgICAoZnVuY3Rpb24gdGFpbENhbGxJbkRvV2hpbGUoKSB7CisgICAgICAgICJ1
c2Ugc3RyaWN0IjsKKyAgICAgICAgZG8KKyAgICAgICAgICAgIHJldHVybiBjYWxsZXJNdXN0QmVS
dW4oKTsKKyAgICAgICAgd2hpbGUgKHRydWUpOworICAgIH0pKCk7CisKKyAgICAoZnVuY3Rpb24g
bm9UYWlsQ2FsbEluRm9ySW4oKSB7CisgICAgICAgICJ1c2Ugc3RyaWN0IjsKKyAgICAgICAgZm9y
ICh2YXIgeCBpbiBbMSwgMl0pCisgICAgICAgICAgICByZXR1cm4gY2FsbGVyTXVzdEJlU3RyaWN0
KCk7CisgICAgfSkoKTsKKworICAgIChmdW5jdGlvbiBub1RhaWxDYWxsSW5Gb3JPZigpIHsKKyAg
ICAgICAgInVzZSBzdHJpY3QiOworICAgICAgICBmb3IgKHZhciB4IG9mIFsxLCAyXSkKKyAgICAg
ICAgICAgIHJldHVybiBjYWxsZXJNdXN0QmVTdHJpY3QoKTsKKyAgICB9KSgpOworCisgICAgKGZ1
bmN0aW9uIHRhaWxDYWxsSW5JZigpIHsKKyAgICAgICAgInVzZSBzdHJpY3QiOworICAgICAgICBp
ZiAodHJ1ZSkKKyAgICAgICAgICAgIHJldHVybiBjYWxsZXJNdXN0QmVSdW4oKTsKKyAgICB9KSgp
OworCisgICAgKGZ1bmN0aW9uIHRhaWxDYWxsSW5FbHNlKCkgeworICAgICAgICAidXNlIHN0cmlj
dCI7CisgICAgICAgIGlmIChmYWxzZSkgdGhyb3cgbmV3IEVycm9yKCJXVEYiKTsKKyAgICAgICAg
ZWxzZSByZXR1cm4gY2FsbGVyTXVzdEJlUnVuKCk7CisgICAgfSkoKTsKKworICAgIChmdW5jdGlv
biB0YWlsQ2FsbEluU3dpdGNoQ2FzZSgpIHsKKyAgICAgICAgInVzZSBzdHJpY3QiOworICAgICAg
ICBzd2l0Y2ggKDApIHsKKyAgICAgICAgY2FzZSAwOiByZXR1cm4gY2FsbGVyTXVzdEJlUnVuKCk7
CisgICAgICAgIH0KKyAgICB9KSgpOworCisgICAgKGZ1bmN0aW9uIHRhaWxDYWxsSW5Td2l0Y2hE
ZWZhdWx0KCkgeworICAgICAgICAidXNlIHN0cmljdCI7CisgICAgICAgIHN3aXRjaCAoMCkgewor
ICAgICAgICBkZWZhdWx0OiByZXR1cm4gY2FsbGVyTXVzdEJlUnVuKCk7CisgICAgICAgIH0KKyAg
ICB9KSgpOworCisgICAgKGZ1bmN0aW9uIHRhaWxDYWxsV2l0aExhYmVsKCkgeworICAgICAgICAi
dXNlIHN0cmljdCI7CisgICAgICAgIGR1bW15OiByZXR1cm4gY2FsbGVyTXVzdEJlUnVuKCk7Cisg
ICAgfSkoKTsKKworICAgIC8vIEV4cHJlc3Npb24gdGVzdHMsIHdlIGRvbid0IGVudW1lcmF0ZSBh
bGwgdGhlIGNhc2VzIHdoZXJlIHRoZXJlCisgICAgLy8gKnNob3VsZG4ndCogYmUgYSB0YWlsIGNh
bGwKKworICAgIChmdW5jdGlvbiB0YWlsQ2FsbENvbW1hKCkgeworICAgICAgICAidXNlIHN0cmlj
dCI7CisgICAgICAgIHJldHVybiBjYWxsZXJNdXN0QmVTdHJpY3QoKSwgY2FsbGVyTXVzdEJlUnVu
KCk7CisgICAgfSkoKTsKKworICAgIChmdW5jdGlvbiB0YWlsQ2FsbFRlcm5hcnlMZWZ0KCkgewor
ICAgICAgICAidXNlIHN0cmljdCI7CisgICAgICAgIHJldHVybiB0cnVlID8gY2FsbGVyTXVzdEJl
UnVuKCkgOiB1bnJlYWNoYWJsZSgpOworICAgIH0pKCk7CisKKyAgICAoZnVuY3Rpb24gdGFpbENh
bGxUZXJuYXJ5UmlnaHQoKSB7CisgICAgICAgICJ1c2Ugc3RyaWN0IjsKKyAgICAgICAgcmV0dXJu
IGZhbHNlID8gdW5yZWFjaGFibGUoKSA6IGNhbGxlck11c3RCZVJ1bigpOworICAgIH0pKCk7CisK
KyAgICAoZnVuY3Rpb24gdGFpbENhbGxMb2dpY2FsQW5kKCkgeworICAgICAgICAidXNlIHN0cmlj
dCI7CisgICAgICAgIHJldHVybiB0cnVlICYmIGNhbGxlck11c3RCZVJ1bigpOworICAgIH0pKCk7
CisKKyAgICAoZnVuY3Rpb24gdGFpbENhbGxMb2dpY2FsT3IoKSB7CisgICAgICAgICJ1c2Ugc3Ry
aWN0IjsKKyAgICAgICAgcmV0dXJuIGZhbHNlIHx8IGNhbGxlck11c3RCZVJ1bigpOworICAgIH0p
KCk7CisKKyAgICAoZnVuY3Rpb24gbWVtYmVyVGFpbENhbGwoKSB7CisgICAgICAgICJ1c2Ugc3Ry
aWN0IjsKKyAgICAgICAgcmV0dXJuIHsgZjogY2FsbGVyTXVzdEJlUnVuIH0uZigpOworICAgIH0p
KCk7CisKKyAgICAoZnVuY3Rpb24gYmluZFRhaWxDYWxsKCkgeworICAgICAgICAidXNlIHN0cmlj
dCI7CisgICAgICAgIHJldHVybiBjYWxsZXJNdXN0QmVSdW4uYmluZCgpKCk7CisgICAgfSkoKTsK
KworICAgIC8vIEZ1bmN0aW9uLnByb3RvdHlwZSB0ZXN0cworCisgICAgKGZ1bmN0aW9uIGFwcGx5
VGFpbENhbGwoKSB7CisgICAgICAgICJ1c2Ugc3RyaWN0IjsKKyAgICAgICAgcmV0dXJuIGNhbGxl
ck11c3RCZVJ1bi5hcHBseSgpOworICAgIH0pKCk7CisKKyAgICAoZnVuY3Rpb24gY2FsbFRhaWxD
YWxsKCkgeworICAgICAgICAidXNlIHN0cmljdCI7CisgICAgICAgIHJldHVybiBjYWxsZXJNdXN0
QmVSdW4uY2FsbCgpOworICAgIH0pKCk7CisKKyAgICAvLyBObyB0YWlsIGNhbGwgZm9yIGNvbnN0
cnVjdG9ycworICAgIChmdW5jdGlvbiBub1RhaWxDb25zdHJ1Y3QoKSB7CisgICAgICAgICJ1c2Ug
c3RyaWN0IjsKKyAgICAgICAgcmV0dXJuIG5ldyBjYWxsZXJNdXN0QmVTdHJpY3QoKTsKKyAgICB9
KSgpOworfQorCitmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwOyArK2kpCisgICAgcnVuVGVzdHMo
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvdGFpbC1jYWxsLXZh
cmFyZ3Mtbm8tc3RhY2stb3ZlcmZsb3cuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3Rlc3RzL3N0cmVzcy90YWlsLWNhbGwtdmFyYXJncy1uby1zdGFjay1vdmVyZmxvdy5q
cwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvdGFp
bC1jYWxsLXZhcmFyZ3Mtbm8tc3RhY2stb3ZlcmZsb3cuanMJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSwyOCBAQAorZnVuY3Rpb24gc2hvdWxkVGhyb3coZnVuYywgZXJyb3JNZXNzYWdlKSB7Cisg
ICAgdmFyIGVycm9yVGhyb3duID0gZmFsc2U7CisgICAgdmFyIGVycm9yID0gbnVsbDsKKyAgICB0
cnkgeworICAgICAgICBmdW5jKCk7CisgICAgfSBjYXRjaCAoZSkgeworICAgICAgICBlcnJvclRo
cm93biA9IHRydWU7CisgICAgICAgIGVycm9yID0gZTsKKyAgICB9CisgICAgaWYgKCFlcnJvclRo
cm93bikKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdub3QgdGhyb3duJyk7CisgICAgaWYgKFN0
cmluZyhlcnJvcikgIT09IGVycm9yTWVzc2FnZSkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBi
YWQgZXJyb3I6ICR7U3RyaW5nKGVycm9yKX1gKTsKK30KKworZnVuY3Rpb24gc2xvcHB5TG9vcChu
KSB7CisgICAgaWYgKG4gPiAwKQorICAgICAgICByZXR1cm4gc2xvcHB5TG9vcCguLi5bbiAtIDFd
KTsKK30KKworZnVuY3Rpb24gc3RyaWN0TG9vcChuKSB7CisgICAgInVzZSBzdHJpY3QiOworICAg
IGlmIChuID4gMCkKKyAgICAgICAgcmV0dXJuIHN0cmljdExvb3AoLi4uW24gLSAxXSk7Cit9CisK
K3Nob3VsZFRocm93KGZ1bmN0aW9uICgpIHsgc2xvcHB5TG9vcCgxMDAwMDApOyB9LCAnUmFuZ2VF
cnJvcjogTWF4aW11bSBjYWxsIHN0YWNrIHNpemUgZXhjZWVkZWQuJyk7CitzdHJpY3RMb29wKDEw
MDAwMCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3RhaWwtY2Fs
bHMtZG9udC1vdmVyd3JpdGUtbGl2ZS1zdGFjay5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3RhaWwtY2FsbHMtZG9udC1vdmVyd3JpdGUtbGl2ZS1z
dGFjay5qcwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJl
c3MvdGFpbC1jYWxscy1kb250LW92ZXJ3cml0ZS1saXZlLXN0YWNrLmpzCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMzAgQEAKKyJ1c2Ugc3RyaWN0IjsKKworZnVuY3Rpb24gdGFpbChhLCBiKSB7
IH0KK25vSW5saW5lKHRhaWwpOworCit2YXIgb2JqID0geworICAgIG1ldGhvZDogZnVuY3Rpb24g
KHgpIHsKKyAgICAgICAgcmV0dXJuIHRhaWwoeCwgeCk7CisgICAgfSwKKworICAgIGdldCBmcm9t
TmF0aXZlKCkgeyByZXR1cm4gdGFpbCgwLCAwKTsgfQorfTsKK25vSW5saW5lKG9iai5tZXRob2Qp
OworCitmdW5jdGlvbiBnZXRUaGlzKHgpIHsgcmV0dXJuIHRoaXM7IH0KK25vSW5saW5lKGdldFRo
aXMpOworCitmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwOyArK2kpIHsKKyAgICB2YXIgdGhhdCA9
IGdldFRoaXMob2JqLm1ldGhvZCg0MikpOworCisgICAgaWYgKCFPYmplY3QuaXModGhhdCwgdW5k
ZWZpbmVkKSkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJXcm9uZyAndGhpcycgdmFsdWUgaW4g
Y2FsbCwgZXhwZWN0ZWQgdW5kZWZpbmVkIGJ1dCBnb3QgIiArIHRoYXQpOworCisgICAgdGhhdCA9
IGdldFRoaXMob2JqLm1ldGhvZCguLi5bNDJdKSk7CisgICAgaWYgKCFPYmplY3QuaXModGhhdCwg
dW5kZWZpbmVkKSkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJXcm9uZyAndGhpcycgdmFsdWUg
aW4gdmFyYXJncyBjYWxsLCBleHBlY3RlZCB1bmRlZmluZWQgYnV0IGdvdCAiICsgdGhhdCk7CisK
KyAgICBpZiAoIU9iamVjdC5pcyhvYmouZnJvbU5hdGl2ZSwgdW5kZWZpbmVkKSkKKyAgICAgICAg
dGhyb3cgbmV3IEVycm9yKCJXcm9uZyAnZnJvbU5hdGl2ZScgdmFsdWUsIGV4cGVjdGVkIHVuZGVm
aW5lZCBidXQgZ290ICIgKyBvYmouZnJvbU5hdGl2ZSk7Cit9CkluZGV4OiBMYXlvdXRUZXN0cy9D
aGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAx
OTAyMTkpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyAr
MSwyMSBAQAorMjAxNS0wOS0yNCAgTWljaGFlbCBTYWJvZmYgIDxtc2Fib2ZmQGFwcGxlLmNvbT4K
KworICAgICAgICBbRVM2XSBJbXBsZW1lbnQgdGFpbCBjYWxscyBpbiB0aGUgRlRMCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDg2NjQKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCBvbmUgbmV3IHRh
aWwgY2FsbCB0ZXN0IGFuZCBlbmFibGVkIG90aGVyIHRhaWwgY2FsbCB0ZXN0cy4KKworICAgICAg
ICAqIGpzL2NhbGxlci1wcm9wZXJ0eS1leHBlY3RlZC50eHQ6CisgICAgICAgICoganMvc2NyaXB0
LXRlc3RzL2NhbGxlci1wcm9wZXJ0eS5qczoKKyAgICAgICAgKHN0cmluZ19hcHBlYXJlZF9oZXJl
Lm5vblN0cmljdENhbGxlZSk6CisgICAgICAgIChzdHJpY3RDYWxsZWUpOgorICAgICAgICAobm9u
U3RyaWN0Q2FsbGVyKToKKyAgICAgICAgKHN0cmljdENhbGxlcik6CisgICAgICAgIChzdHJpY3RU
YWlsQ2FsbGVyKToKKyAgICAgICAgKGdldEZvb0dldHRlcik6CisKIDIwMTUtMDktMjQgIFJ5b3N1
a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CiAKICAgICAgICAgTWFrZSBldmVudCBkaXNwYXRj
aGluZyByZXNwZWN0IHNsb3R0aW5nCkluZGV4OiBMYXlvdXRUZXN0cy9qcy9jYWxsZXItcHJvcGVy
dHktZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL2NhbGxlci1wcm9w
ZXJ0eS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDE5MDIxOSkKKysrIExheW91dFRlc3RzL2pzL2Nh
bGxlci1wcm9wZXJ0eS1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTEwLDEwICsxMCwx
NCBAQCBQQVNTIG5vblN0cmljdENhbGxlcihub25TdHJpY3RDYWxsZWUpIGlzCiBQQVNTIG5vblN0
cmljdENhbGxlcihzdHJpY3RDYWxsZWUpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IFR5cGUg
ZXJyb3IuCiBQQVNTIHN0cmljdENhbGxlcihub25TdHJpY3RDYWxsZWUpIHRocmV3IGV4Y2VwdGlv
biBUeXBlRXJyb3I6IEZ1bmN0aW9uLmNhbGxlciB1c2VkIHRvIHJldHJpZXZlIHN0cmljdCBjYWxs
ZXIuCiBQQVNTIHN0cmljdENhbGxlcihzdHJpY3RDYWxsZWUpIHRocmV3IGV4Y2VwdGlvbiBUeXBl
RXJyb3I6IFR5cGUgZXJyb3IuCitQQVNTIHN0cmljdFRhaWxDYWxsZXIobm9uU3RyaWN0Q2FsbGVl
KSBpcyBudWxsCitQQVNTIHN0cmljdFRhaWxDYWxsZXIoc3RyaWN0Q2FsbGVlKSB0aHJldyBleGNl
cHRpb24gVHlwZUVycm9yOiBUeXBlIGVycm9yLgogUEFTUyBub25TdHJpY3RDYWxsZXIoYm91bmRO
b25TdHJpY3RDYWxsZWUpIGlzIG5vblN0cmljdENhbGxlcgogUEFTUyBub25TdHJpY3RDYWxsZXIo
Ym91bmRTdHJpY3RDYWxsZWUpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IFR5cGUgZXJyb3Iu
CiBQQVNTIHN0cmljdENhbGxlcihib3VuZE5vblN0cmljdENhbGxlZSkgdGhyZXcgZXhjZXB0aW9u
IFR5cGVFcnJvcjogRnVuY3Rpb24uY2FsbGVyIHVzZWQgdG8gcmV0cmlldmUgc3RyaWN0IGNhbGxl
ci4KIFBBU1Mgc3RyaWN0Q2FsbGVyKGJvdW5kU3RyaWN0Q2FsbGVlKSB0aHJldyBleGNlcHRpb24g
VHlwZUVycm9yOiBUeXBlIGVycm9yLgorUEFTUyBzdHJpY3RUYWlsQ2FsbGVyKGJvdW5kTm9uU3Ry
aWN0Q2FsbGVlKSBpcyBudWxsCitQQVNTIHN0cmljdFRhaWxDYWxsZXIoYm91bmRTdHJpY3RDYWxs
ZWUpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IFR5cGUgZXJyb3IuCiBQQVNTIG5vblN0cmlj
dEdldHRlcihub25TdHJpY3RBY2Nlc3NvcikgaXMgbm9uU3RyaWN0R2V0dGVyCiBQQVNTIG5vblN0
cmljdFNldHRlcihub25TdHJpY3RBY2Nlc3NvcikgaXMgdHJ1ZQogUEFTUyBub25TdHJpY3RHZXR0
ZXIoc3RyaWN0QWNjZXNzb3IpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IFR5cGUgZXJyb3Iu
CkluZGV4OiBMYXlvdXRUZXN0cy9qcy9zY3JpcHQtdGVzdHMvY2FsbGVyLXByb3BlcnR5LmpzCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3NjcmlwdC10ZXN0cy9jYWxsZXItcHJvcGVydHku
anMJKHJldmlzaW9uIDE5MDIxOSkKKysrIExheW91dFRlc3RzL2pzL3NjcmlwdC10ZXN0cy9jYWxs
ZXItcHJvcGVydHkuanMJKHdvcmtpbmcgY29weSkKQEAgLTIzLDExICsyMywxNSBAQCBzaG91bGRC
ZSgnY2hpbGRIYXNDYWxsZXJXaGVuQ2FsbGVkRnJvbVdpCiBmdW5jdGlvbiBub25TdHJpY3RDYWxs
ZWUoKSB7IHJldHVybiBub25TdHJpY3RDYWxsZWUuY2FsbGVyOyB9CiBmdW5jdGlvbiBzdHJpY3RD
YWxsZWUoKSB7ICJ1c2Ugc3RyaWN0IjsgcmV0dXJuIHN0cmljdENhbGxlZS5jYWxsZXI7IH0KIGZ1
bmN0aW9uIG5vblN0cmljdENhbGxlcih4KSB7IHJldHVybiB4KCk7IH0KLWZ1bmN0aW9uIHN0cmlj
dENhbGxlcih4KSB7ICJ1c2Ugc3RyaWN0IjsgcmV0dXJuIHgoKTsgfQorLy8gVGFpbCBjYWxscyBs
ZWFrIGFuZCBzaG93IG91ciBjYWxsZXIncyBjYWxsZXIsIHdoaWNoIGlzIG51bGwgaGVyZQorZnVu
Y3Rpb24gc3RyaWN0Q2FsbGVyKHgpIHsgInVzZSBzdHJpY3QiOyB2YXIgcmVzdWx0ID0geCgpOyBy
ZXR1cm4gcmVzdWx0OyB9CitmdW5jdGlvbiBzdHJpY3RUYWlsQ2FsbGVyKHgpIHsgInVzZSBzdHJp
Y3QiOyByZXR1cm4geCgpOyB9CiBzaG91bGRCZSgibm9uU3RyaWN0Q2FsbGVyKG5vblN0cmljdENh
bGxlZSkiLCAibm9uU3RyaWN0Q2FsbGVyIik7CiBzaG91bGRUaHJvdygibm9uU3RyaWN0Q2FsbGVy
KHN0cmljdENhbGxlZSkiLCAnIlR5cGVFcnJvcjogVHlwZSBlcnJvciInKTsKIHNob3VsZFRocm93
KCJzdHJpY3RDYWxsZXIobm9uU3RyaWN0Q2FsbGVlKSIsICciVHlwZUVycm9yOiBGdW5jdGlvbi5j
YWxsZXIgdXNlZCB0byByZXRyaWV2ZSBzdHJpY3QgY2FsbGVyIicpOwogc2hvdWxkVGhyb3coInN0
cmljdENhbGxlcihzdHJpY3RDYWxsZWUpIiwgJyJUeXBlRXJyb3I6IFR5cGUgZXJyb3IiJyk7Citz
aG91bGRCZSgic3RyaWN0VGFpbENhbGxlcihub25TdHJpY3RDYWxsZWUpIiwgIm51bGwiKTsKK3No
b3VsZFRocm93KCJzdHJpY3RUYWlsQ2FsbGVyKHN0cmljdENhbGxlZSkiLCAnIlR5cGVFcnJvcjog
VHlwZSBlcnJvciInKTsKIAogLy8gLmNhbGxlciB3aXRoaW4gYSBib3VuZCBmdW5jdGlvbiByZWFj
aGVzIHRoZSBjYWxsZXIsIGlnbm9yaW5nIHRoZSBiaW5kaW5nLgogdmFyIGJvdW5kTm9uU3RyaWN0
Q2FsbGVlID0gbm9uU3RyaWN0Q2FsbGVlLmJpbmQoKTsKQEAgLTM2LDYgKzQwLDggQEAgc2hvdWxk
QmUoIm5vblN0cmljdENhbGxlcihib3VuZE5vblN0cmljdAogc2hvdWxkVGhyb3coIm5vblN0cmlj
dENhbGxlcihib3VuZFN0cmljdENhbGxlZSkiLCAnIlR5cGVFcnJvcjogVHlwZSBlcnJvciInKTsK
IHNob3VsZFRocm93KCJzdHJpY3RDYWxsZXIoYm91bmROb25TdHJpY3RDYWxsZWUpIiwgJyJUeXBl
RXJyb3I6IEZ1bmN0aW9uLmNhbGxlciB1c2VkIHRvIHJldHJpZXZlIHN0cmljdCBjYWxsZXIiJyk7
CiBzaG91bGRUaHJvdygic3RyaWN0Q2FsbGVyKGJvdW5kU3RyaWN0Q2FsbGVlKSIsICciVHlwZUVy
cm9yOiBUeXBlIGVycm9yIicpOworc2hvdWxkQmUoInN0cmljdFRhaWxDYWxsZXIoYm91bmROb25T
dHJpY3RDYWxsZWUpIiwgIm51bGwiKTsKK3Nob3VsZFRocm93KCJzdHJpY3RUYWlsQ2FsbGVyKGJv
dW5kU3RyaWN0Q2FsbGVlKSIsICciVHlwZUVycm9yOiBUeXBlIGVycm9yIicpOwogCiAvLyBDaGVj
ayB0aGF0IC5jYWxsZXIgd29ya3MgKG9yIHRocm93cykgYXMgZXhwZWN0ZWQsIG92ZXIgYW4gYWNj
ZXNzb3IgY2FsbC4KIGZ1bmN0aW9uIGdldEZvb0dldHRlcih4KSB7IHJldHVybiBPYmplY3QuZ2V0
T3duUHJvcGVydHlEZXNjcmlwdG9yKHgsICdmb28nKS5nZXQ7IH0K
</data>
<flag name="review"
          id="287092"
          type_id="1"
          status="+"
          setter="fpizlo"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>262024</attachid>
            <date>2015-09-28 15:36:41 -0700</date>
            <delta_ts>2015-09-28 15:36:41 -0700</delta_ts>
            <desc>Patch for Landing</desc>
            <filename>148664-2.patch</filename>
            <type>text/plain</type>
            <size>82425</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTkwMjg1KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwNyBA
QAorMjAxNS0wOS0yOCAgYmFzaWxlX2NsZW1lbnRAYXBwbGUuY29tICA8YmFzaWxlX2NsZW1lbnRA
YXBwbGUuY29tQDI2OGY0NWNjLWNkMDktMDQxMC1hYjNjLWQ1MjY5MWI0ZGJmYz4KKworICAgICAg
ICBbRVM2XSBJbXBsZW1lbnQgdGFpbCBjYWxscyBpbiB0aGUgRlRMCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDg2NjQKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIHBhdGNoIGltcGxlbWVudHMgdGhl
IHRhaWwgY2FsbCBvcGNvZGVzIGluIHRoZSBGVEwsIG1ha2luZyB0YWlsCisgICAgICAgIGNhbGxz
IGF2YWlsYWJsZSB0aHJvdWdoIGFsbCB0aWVycy4gVGhlIGNoYW5nZXMgYXJlIHJlbGF0aXZlbHkK
KyAgICAgICAgc3RyYWlnaHRmb3J3YXJkLCBhbHRob3VnaCB0aGUgZnJhbWUgc2h1ZmZsZXIgaGFk
IHRvIGJlIGV4dGVuZGVkIHRvCisgICAgICAgIGhhbmRsZSB0aGUgcG9zc2liaWxpdHkgb2YgcnVu
bmluZyBvdXQgb2Ygc3RhY2sgd2hlbiBzcGlsbGluZyBvcgorICAgICAgICBidWlsZGluZyBhIHNs
b3cgcGF0aCBmcmFtZS4gVGhlIG90aGVyIHRpZXJzIGFsd2F5cyBlbnN1cmUgdGhhdCB3ZSBoYXZl
CisgICAgICAgIGVub3VnaCBzdGFjayBzcGFjZSB0byBidWlsZCB0aGUgbmV3IGZyYW1lIGF0IHRo
ZSBib3R0b20gb2YgdGhlIG9sZCBvbmUsCisgICAgICAgIGJ1dCB0aGF0IGlzIG5vdCB0cnVlIGZv
ciB0aGUgRlRMLgorCisgICAgICAgIE1vcmVvdmVyLCBmb3IgZWZmaWNpZW5jeSwgdGhpcyBhZGRz
IHRvIHRoZSBzaHVmZmxlciB0aGUgYWJpbGl0eSB0bworICAgICAgICByZWNvcmQgdGhlIHN0YXRl
IG9mIHRoZSBUYWdUeXBlTnVtYmVyLCBhbmQgdG8gcmUtdXNlIHRoZSBzYW1lIHJlZ2lzdGVyCisg
ICAgICAgIHdoZW4gZG9pbmcgc2V2ZXJhbCBjb25zZWN1dGl2ZSBpbnRlZ2VyIGJveGluZ3Mgd2l0
aCBubyBzcGlsbGluZyBpbgorICAgICAgICBiZXR3ZWVuLgorCisgICAgICAgICogSmF2YVNjcmlw
dENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBieXRlY29kZS9WYWx1
ZVJlY292ZXJ5Lmg6CisgICAgICAgIChKU0M6OlZhbHVlUmVjb3Zlcnk6OmluUmVnaXN0ZXIpOgor
ICAgICAgICAqIGRmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
Qnl0ZUNvZGVQYXJzZXI6OmhhbmRsZUlubGluaW5nKToKKyAgICAgICAgKEpTQzo6REZHOjpCeXRl
Q29kZVBhcnNlcjo6cGFyc2VCbG9jayk6CisgICAgICAgICogZGZnL0RGR0Nsb2JiZXJpemUuaDoK
KyAgICAgICAgKEpTQzo6REZHOjpjbG9iYmVyaXplKToKKyAgICAgICAgKiBkZmcvREZHTm9kZS5o
OgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmlzRnVuY3Rpb25UZXJtaW5hbCk6CisgICAgICAg
ICogZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1
bGF0aXZlSklUOjplbWl0Q2FsbCk6CisgICAgICAgICogZGZnL0RGR1RpZXJVcENoZWNrSW5qZWN0
aW9uUGhhc2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlRpZXJVcENoZWNrSW5qZWN0aW9uUGhh
c2U6OnJ1bik6CisgICAgICAgICogZnRsL0ZUTENhcGFiaWxpdGllcy5jcHA6CisgICAgICAgIChK
U0M6OkZUTDo6Y2FuQ29tcGlsZSk6CisgICAgICAgICogZnRsL0ZUTENvbXBpbGUuY3BwOgorICAg
ICAgICAoSlNDOjpGVEw6Om1tQWxsb2NhdGVEYXRhU2VjdGlvbik6CisgICAgICAgICogZnRsL0ZU
TElubGluZUNhY2hlU2l6ZS5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6c2l6ZU9mVGFpbENhbGxW
YXJhcmdzKToKKyAgICAgICAgKEpTQzo6RlRMOjpzaXplT2ZUYWlsQ2FsbEZvcndhcmRWYXJhcmdz
KToKKyAgICAgICAgKEpTQzo6RlRMOjpzaXplT2ZJQ0Zvcik6CisgICAgICAgICogZnRsL0ZUTElu
bGluZUNhY2hlU2l6ZS5oOgorICAgICAgICAqIGZ0bC9GVExKU0NhbGwuY3BwOgorICAgICAgICAo
SlNDOjpGVEw6OkpTQ2FsbDo6SlNDYWxsKToKKyAgICAgICAgKiBmdGwvRlRMSlNDYWxsQmFzZS5j
cHA6CisgICAgICAgIChKU0M6OkZUTDo6SlNDYWxsQmFzZTo6ZW1pdCk6CisgICAgICAgIChKU0M6
OkZUTDo6SlNDYWxsQmFzZTo6bGluayk6CisgICAgICAgICogZnRsL0ZUTEpTQ2FsbEJhc2UuaDoK
KyAgICAgICAgKiBmdGwvRlRMSlNDYWxsVmFyYXJncy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6
SlNDYWxsVmFyYXJnczo6SlNDYWxsVmFyYXJncyk6CisgICAgICAgIChKU0M6OkZUTDo6SlNDYWxs
VmFyYXJnczo6ZW1pdCk6CisgICAgICAgICogZnRsL0ZUTEpTVGFpbENhbGwuY3BwOiBBZGRlZC4K
KyAgICAgICAgKEpTQzo6RlRMOjpnZXRSZWdpc3RlcldpdGhBZGRlbmQpOgorICAgICAgICAoSlND
OjpGVEw6OnJlY292ZXJ5Rm9yKToKKyAgICAgICAgKEpTQzo6RlRMOjpzaXplRm9yKToKKyAgICAg
ICAgKEpTQzo6RlRMOjpKU1RhaWxDYWxsOjpKU1RhaWxDYWxsKToKKyAgICAgICAgKEpTQzo6RlRM
OjptX2luc3RydWN0aW9uT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6RlRMOjpKU1RhaWxDYWxsOjpl
bWl0KToKKyAgICAgICAgKiBmdGwvRlRMSlNUYWlsQ2FsbC5oOiBDb3BpZWQgZnJvbSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpTQ2FsbEJhc2UuaC4KKyAgICAgICAgKEpTQzo6RlRMOjpK
U1RhaWxDYWxsOjpzdGFja21hcElEKToKKyAgICAgICAgKEpTQzo6RlRMOjpKU1RhaWxDYWxsOjpl
c3RpbWF0ZWRTaXplKToKKyAgICAgICAgKEpTQzo6RlRMOjpKU1RhaWxDYWxsOjpudW1Bcmd1bWVu
dHMpOgorICAgICAgICAoSlNDOjpGVEw6OkpTVGFpbENhbGw6Om9wZXJhdG9yPCk6CisgICAgICAg
ICogZnRsL0ZUTExvY2F0aW9uLmg6CisgICAgICAgIChKU0M6OkZUTDo6TG9jYXRpb246Om9wZXJh
dG9yIGJvb2wpOgorICAgICAgICAoSlNDOjpGVEw6OkxvY2F0aW9uOjpvcGVyYXRvciEpOgorICAg
ICAgICAqIGZ0bC9GVExMb3dlckRGR1RvTExWTS5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6REZH
OjpMb3dlckRGR1RvTExWTTo6bG93ZXIpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJE
RkdUb0xMVk06OmNvbXBpbGVOb2RlKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZH
VG9MTFZNOjpjb21waWxlVGFpbENhbGwpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJE
RkdUb0xMVk06OmNvbXBpbGVDYWxsT3JDb25zdHJ1Y3RWYXJhcmdzKToKKyAgICAgICAgKEpTQzo6
RlRMOjpERkc6Okxvd2VyREZHVG9MTFZNOjpjYWxsUHJlZmxpZ2h0KToKKyAgICAgICAgKEpTQzo6
RlRMOjpERkc6Okxvd2VyREZHVG9MTFZNOjpleGl0VmFsdWVGb3JUYWlsQ2FsbCk6CisgICAgICAg
ICogZnRsL0ZUTFN0YXRlLmg6CisgICAgICAgICogaml0L0Fzc2VtYmx5SGVscGVycy5jcHA6Cisg
ICAgICAgIChKU0M6OkFzc2VtYmx5SGVscGVyczo6ZW1pdEV4Y2VwdGlvbkNoZWNrKToKKyAgICAg
ICAgKiBqaXQvQ2FsbEZyYW1lU2h1ZmZsZURhdGEuaDoKKyAgICAgICAgKiBqaXQvQ2FsbEZyYW1l
U2h1ZmZsZXIuY3BwOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6Q2FsbEZyYW1l
U2h1ZmZsZXIpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6ZHVtcCk6CisgICAg
ICAgIChKU0M6OkNhbGxGcmFtZVNodWZmbGVyOjpzcGlsbCk6CisgICAgICAgIChKU0M6OkNhbGxG
cmFtZVNodWZmbGVyOjpleHRlbmRGcmFtZUlmTmVlZGVkKToKKyAgICAgICAgKEpTQzo6Q2FsbEZy
YW1lU2h1ZmZsZXI6OnByZXBhcmVGb3JTbG93UGF0aCk6CisgICAgICAgIChKU0M6OkNhbGxGcmFt
ZVNodWZmbGVyOjpwcmVwYXJlQW55KToKKyAgICAgICAgKiBqaXQvQ2FsbEZyYW1lU2h1ZmZsZXIu
aDoKKyAgICAgICAgKEpTQzo6Q2FsbEZyYW1lU2h1ZmZsZXI6OnJlc3RvcmVHUFIpOgorICAgICAg
ICAoSlNDOjpDYWxsRnJhbWVTaHVmZmxlcjo6Z2V0RnJlZVJlZ2lzdGVyKToKKyAgICAgICAgKEpT
Qzo6Q2FsbEZyYW1lU2h1ZmZsZXI6OmdldEZyZWVUZW1wR1BSKToKKyAgICAgICAgKEpTQzo6Q2Fs
bEZyYW1lU2h1ZmZsZXI6OmVuc3VyZVRlbXBHUFIpOgorICAgICAgICAoSlNDOjpDYWxsRnJhbWVT
aHVmZmxlcjo6YWRkTmV3KToKKyAgICAgICAgKiBqaXQvQ2FsbEZyYW1lU2h1ZmZsZXI2NC5jcHA6
CisgICAgICAgIChKU0M6OkNhbGxGcmFtZVNodWZmbGVyOjplbWl0Qm94KToKKyAgICAgICAgKEpT
Qzo6Q2FsbEZyYW1lU2h1ZmZsZXI6OnRyeUFjcXVpcmVUYWdUeXBlTnVtYmVyKToKKyAgICAgICAg
KiBqaXQvSklUQ2FsbC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wQ2FsbCk6Cisg
ICAgICAgICogaml0L1JlZy5oOgorICAgICAgICAoSlNDOjpSZWc6OlJlZyk6CisgICAgICAgIChK
U0M6OlJlZzo6aXNIYXNoVGFibGVEZWxldGVkVmFsdWUpOgorICAgICAgICAoSlNDOjpSZWc6OmRl
bGV0ZWQpOgorICAgICAgICAoSlNDOjpSZWdIYXNoOjpoYXNoKToKKyAgICAgICAgKEpTQzo6UmVn
SGFzaDo6ZXF1YWwpOgorICAgICAgICAqIHRlc3QvZXM2LnlhbWw6CisKIDIwMTUtMDktMjggIEtl
aXRoIE1pbGxlciAgPGtlaXRoX21pbGxlckBhcHBsZS5jb20+CiAKICAgICAgICAgT2JqZWN0UHJv
cGVydHlDb25kaXRpb25TZXQ6Om1lcmdlZFdpdGggZG9lcyBub3QgcHJvZHVjZSBhIG1pbmltYWwg
aW50ZXJzZWN0aW9uLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkocmV2
aXNpb24gMTkwMjg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CSh3
b3JraW5nIGNvcHkpCkBAIC05MDMsNiArOTAzLDcgQEAgaWYgKEVOQUJMRV9GVExfSklUKQogICAg
ICAgICBmdGwvRlRMSlNDYWxsLmNwcAogICAgICAgICBmdGwvRlRMSlNDYWxsQmFzZS5jcHAKICAg
ICAgICAgZnRsL0ZUTEpTQ2FsbFZhcmFyZ3MuY3BwCisgICAgICAgIGZ0bC9GVExKU1RhaWxDYWxs
LmNwcAogICAgICAgICBmdGwvRlRMTGluay5jcHAKICAgICAgICAgZnRsL0ZUTExvY2F0aW9uLmNw
cAogICAgICAgICBmdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9q
L0phdmFTY3JpcHRDb3JlLnZjeHByb2oJKHJldmlzaW9uIDE5MDI4NSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oJ
KHdvcmtpbmcgY29weSkKQEAgLTUzOSw2ICs1MzksNyBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVk
ZT0iLi5cZnRsXEZUTEpTQ2FsbC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxm
dGxcRlRMSlNDYWxsQmFzZS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxmdGxc
RlRMSlNDYWxsVmFyYXJncy5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxmdGxc
RlRMSlNUYWlsQ2FsbC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxmdGxcRlRM
TGluay5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxmdGxcRlRMTG9jYXRpb24u
Y3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZnRsXEZUTExvd2VyREZHVG9MTFZN
LmNwcCIgLz4KQEAgLTEyOTksNiArMTMwMCw3IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxmdGxcRlRMSlNDYWxsLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxmdGxcRlRM
SlNDYWxsQmFzZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZnRsXEZUTEpTQ2Fs
bFZhcmFyZ3MuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGZ0bFxGVExKU1RhaWxD
YWxsLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxmdGxcRlRMTGluay5oIiAvPgog
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZnRsXEZUTExvY2F0aW9uLmgiIC8+CiAgICAgPENs
SW5jbHVkZSBJbmNsdWRlPSIuLlxmdGxcRlRMTG93ZXJERkdUb0xMVk0uaCIgLz4KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3Jl
LnZjeHByb2ouZmlsdGVycwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qLmZpbHRlcnMJKHJldmlz
aW9uIDE5MDI4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hw
cm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2ouZmlsdGVycwkod29ya2luZyBjb3B5KQpAQCAtMTU4
MSw2ICsxNTgxLDkgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGZ0bFxGVExKU0NhbGwu
Y3BwIj4KICAgICAgIDxGaWx0ZXI+ZnRsPC9GaWx0ZXI+CiAgICAgPC9DbENvbXBpbGU+CisgICAg
PENsQ29tcGlsZSBJbmNsdWRlPSIuLlxmdGxcRlRMSlNUYWlsQ2FsbC5jcHAiPgorICAgICAgPEZp
bHRlcj5mdGw8L0ZpbHRlcj4KKyAgICA8L0NsQ29tcGlsZT4KICAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXGZ0bFxGVExMaW5rLmNwcCI+CiAgICAgICA8RmlsdGVyPmZ0bDwvRmlsdGVyPgogICAg
IDwvQ2xDb21waWxlPgpAQCAtNDE0NCw2ICs0MTQ3LDkgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1
ZGU9Ii4uXGZ0bFxGVExKU0NhbGwuaCI+CiAgICAgICA8RmlsdGVyPmZ0bDwvRmlsdGVyPgogICAg
IDwvQ2xJbmNsdWRlPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZnRsXEZUTEpTVGFpbENh
bGwuaCI+CisgICAgICA8RmlsdGVyPmZ0bDwvRmlsdGVyPgorICAgIDwvQ2xJbmNsdWRlPgogICAg
IDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZnRsXEZUTExpbmsuaCI+CiAgICAgICA8RmlsdGVyPmZ0
bDwvRmlsdGVyPgogICAgIDwvQ2xJbmNsdWRlPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHJldmlzaW9uIDE5MDI4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC05Nzks
NiArOTc5LDggQEAKIAkJNjIzQTM3RUMxQjg3QTdDMDAwNzU0MjA5IC8qIFJlZ2lzdGVyTWFwLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2MjNBMzdFQjFC
ODdBN0JEMDA3NTQyMDkgLyogUmVnaXN0ZXJNYXAuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQk2Mjc2NzMyMzFCNjgwQzFFMDBGRDlGMkUgLyogQ2Fs
bE1vZGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
NjI3NjczMjExQjY4MEMxRTAwRkQ5RjJFIC8qIENhbGxNb2RlLmNwcCAqLzsgfTsKIAkJNjI3Njcz
MjQxQjY4MEMxRTAwRkQ5RjJFIC8qIENhbGxNb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2Mjc2NzMyMjFCNjgwQzFFMDBGRDlGMkUgLyogQ2FsbE1v
ZGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQk2
Mjc3NERBQTFCOEQ0QjE5MDAwNkYwNUEgLyogRlRMSlNUYWlsQ2FsbC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2Mjc3NERBODFCOEQ0QjE5MDAwNkYw
NUEgLyogRlRMSlNUYWlsQ2FsbC5jcHAgKi87IH07CisJCTYyNzc0REFCMUI4RDRCMTkwMDA2RjA1
QSAvKiBGVExKU1RhaWxDYWxsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA2Mjc3NERBOTFCOEQ0QjE5MDAwNkYwNUEgLyogRlRMSlNUYWlsQ2FsbC5oICov
OyB9OwogCQk2MkQyRDM4RjFBREYxMDNGMDAwMjA2QzEgLyogRnVuY3Rpb25SYXJlRGF0YS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2MkQyRDM4RDFB
REYxMDNGMDAwMjA2QzEgLyogRnVuY3Rpb25SYXJlRGF0YS5jcHAgKi87IH07CiAJCTYyRDJEMzkw
MUFERjEwM0YwMDAyMDZDMSAvKiBGdW5jdGlvblJhcmVEYXRhLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2MkQyRDM4RTFBREYxMDNGMDAwMjA2QzEgLyog
RnVuY3Rpb25SYXJlRGF0YS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTYyRDc1NUQ0MUI4NEZCM0QwMDE4MDFGQSAvKiBDYWxsRnJhbWVTaHVmZmxl
cjY0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDYy
RDc1NUQzMUI4NEZCMzkwMDE4MDFGQSAvKiBDYWxsRnJhbWVTaHVmZmxlcjY0LmNwcCAqLzsgfTsK
QEAgLTI3OTcsNiArMjc5OSw4IEBACiAJCTYyM0EzN0VCMUI4N0E3QkQwMDc1NDIwOSAvKiBSZWdp
c3Rlck1hcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBSZWdpc3Rlck1hcC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2Mjc2NzMyMTFCNjgwQzFFMDBGRDlGMkUg
LyogQ2FsbE1vZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2Fs
bE1vZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2Mjc2NzMyMjFCNjgwQzFF
MDBGRDlGMkUgLyogQ2FsbE1vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
Q2FsbE1vZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJNjI3NzREQTgxQjhENEIx
OTAwMDZGMDVBIC8qIEZUTEpTVGFpbENhbGwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBuYW1lID0gRlRMSlNUYWlsQ2FsbC5jcHA7IHBhdGggPSBmdGwvRlRMSlNUYWlsQ2FsbC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTYyNzc0REE5MUI4RDRCMTkwMDA2RjA1
QSAvKiBGVExKU1RhaWxDYWxsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZU
TEpTVGFpbENhbGwuaDsgcGF0aCA9IGZ0bC9GVExKU1RhaWxDYWxsLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTYyQTlBMjlFMUIwQkVENDgwMEJENTRDQSAvKiBERkdMYXp5Tm9kZS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdMYXp5Tm9kZS5jcHA7
IHBhdGggPSBkZmcvREZHTGF6eU5vZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQk2MkE5QTI5RjFCMEJFRDQ4MDBCRDU0Q0EgLyogREZHTGF6eU5vZGUuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBuYW1lID0gREZHTGF6eU5vZGUuaDsgcGF0aCA9IGRmZy9ERkdMYXp5Tm9k
ZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk2MkQyRDM4RDFBREYxMDNGMDAwMjA2
QzEgLyogRnVuY3Rpb25SYXJlRGF0YS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBGdW5jdGlvblJhcmVEYXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsK
QEAgLTM5NzUsNiArMzk3OSw4IEBACiAJCQkJMEZEMTIwMkUxQThBRUQxMjAwMEY1MjgwIC8qIEZU
TEpTQ2FsbEJhc2UuaCAqLywKIAkJCQkwRkQxMjAzMTFBOEM4NUJEMDAwRjUyODAgLyogRlRMSlND
YWxsVmFyYXJncy5jcHAgKi8sCiAJCQkJMEZEMTIwMzIxQThDODVCRDAwMEY1MjgwIC8qIEZUTEpT
Q2FsbFZhcmFyZ3MuaCAqLywKKwkJCQk2Mjc3NERBODFCOEQ0QjE5MDAwNkYwNUEgLyogRlRMSlNU
YWlsQ2FsbC5jcHAgKi8sCisJCQkJNjI3NzREQTkxQjhENEIxOTAwMDZGMDVBIC8qIEZUTEpTVGFp
bENhbGwuaCAqLywKIAkJCQkwRjhGMkI5MzE3MkUwNDlFMDA3REJEQTUgLyogRlRMTGluay5jcHAg
Ki8sCiAJCQkJMEY4RjJCOTQxNzJFMDQ5RTAwN0RCREE1IC8qIEZUTExpbmsuaCAqLywKIAkJCQkw
RkNFRkFERDE4MDczOEMwMDA0NzJDRTQgLyogRlRMTG9jYXRpb24uY3BwICovLApAQCAtNjMxOCw2
ICs2MzI0LDcgQEAKIAkJCQkwRjZCMUNCNjE4NUZDOUU5MDA4NDVEOTcgLyogRlRMSlNDYWxsLmgg
aW4gSGVhZGVycyAqLywKIAkJCQkwRkQxMjAzMDFBOEFFRDEyMDAwRjUyODAgLyogRlRMSlNDYWxs
QmFzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEMTIwMzQxQThDODVCRDAwMEY1MjgwIC8qIEZU
TEpTQ2FsbFZhcmFyZ3MuaCBpbiBIZWFkZXJzICovLAorCQkJCTYyNzc0REFCMUI4RDRCMTkwMDA2
RjA1QSAvKiBGVExKU1RhaWxDYWxsLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjhGMkI5NjE3MkUw
NEEzMDA3REJEQTUgLyogRlRMTGluay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDRUZBRTAxODA3
MzhDMDAwNDcyQ0U0IC8qIEZUTExvY2F0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkVBMEEx
MDE3MDUxM0RCMDBCQjcyMkMgLyogRlRMTG93ZXJERkdUb0xMVk0uaCBpbiBIZWFkZXJzICovLApA
QCAtNzY5MCw2ICs3Njk3LDcgQEAKIAkJCQkwRjZCMUNCNTE4NUZDOUU5MDA4NDVEOTcgLyogRlRM
SlNDYWxsLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRDEyMDJGMUE4QUVEMTIwMDBGNTI4MCAv
KiBGVExKU0NhbGxCYXNlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRDEyMDMzMUE4Qzg1QkQw
MDBGNTI4MCAvKiBGVExKU0NhbGxWYXJhcmdzLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTYyNzc0
REFBMUI4RDRCMTkwMDA2RjA1QSAvKiBGVExKU1RhaWxDYWxsLmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTBGOEYyQjk1MTcyRTA0QTAwMDdEQkRBNSAvKiBGVExMaW5rLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTBGQ0VGQURGMTgwNzM4QzAwMDQ3MkNFNCAvKiBGVExMb2NhdGlvbi5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRkVBMEEwRjE3MDUxM0RCMDBCQjcyMkMgLyogRlRMTG93ZXJERkdUb0xM
Vk0uY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gMTkwMjg1KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE4ODIsMTEgKzE4ODIsMTUgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6aGFuZGxlSW5saW5pbmco
CiAgICAgICAgIG1fY3VycmVudEluZGV4ID0gbmV4dE9mZnNldDsKICAgICAgICAgbV9leGl0T0sg
PSB0cnVlOwogICAgICAgICBwcm9jZXNzU2V0TG9jYWxRdWV1ZSgpOyAvLyBUaGlzIG9ubHkgY29t
ZXMgaW50byBwbGF5IGZvciBpbnRyaW5zaWNzLCBzaW5jZSBub3JtYWwgaW5saW5lZCBjb2RlIHdp
bGwgbGVhdmUgYW4gZW1wdHkgcXVldWUuCi0gICAgICAgIGFkZFRvR3JhcGgoSnVtcCk7CisgICAg
ICAgIGlmIChOb2RlKiB0ZXJtaW5hbCA9IG1fY3VycmVudEJsb2NrLT50ZXJtaW5hbCgpKQorICAg
ICAgICAgICAgQVNTRVJUX1VOVVNFRCh0ZXJtaW5hbCwgdGVybWluYWwtPm9wKCkgPT0gVGFpbENh
bGwgfHwgdGVybWluYWwtPm9wKCkgPT0gVGFpbENhbGxWYXJhcmdzKTsKKyAgICAgICAgZWxzZSB7
CisgICAgICAgICAgICBhZGRUb0dyYXBoKEp1bXApOworICAgICAgICAgICAgbGFuZGluZ0Jsb2Nr
cy5hcHBlbmQobV9jdXJyZW50QmxvY2spOworICAgICAgICB9CiAgICAgICAgIGlmICh2ZXJib3Nl
KQogICAgICAgICAgICAgZGF0YUxvZygiTWFya2luZyAiLCBSYXdQb2ludGVyKG1fY3VycmVudEJs
b2NrKSwgIiBhcyBsaW5rZWQgKHRhaWwgb2YgcG9seSBpbmxpbmVlKVxuIik7CiAgICAgICAgIG1f
Y3VycmVudEJsb2NrLT5kaWRMaW5rKCk7Ci0gICAgICAgIGxhbmRpbmdCbG9ja3MuYXBwZW5kKG1f
Y3VycmVudEJsb2NrKTsKIAogICAgICAgICBpZiAodmVyYm9zZSkKICAgICAgICAgICAgIGRhdGFM
b2coIkZpbmlzaGVkIGlubGluaW5nICIsIGNhbGxMaW5rU3RhdHVzW2ldLCAiIGF0ICIsIGN1cnJl
bnRDb2RlT3JpZ2luKCksICIuXG4iKTsKQEAgLTE5MTksOCArMTkyMywxMiBAQCBib29sIEJ5dGVD
b2RlUGFyc2VyOjpoYW5kbGVJbmxpbmluZygKICAgICBtX2N1cnJlbnRJbmRleCA9IG5leHRPZmZz
ZXQ7CiAgICAgbV9leGl0T0sgPSB0cnVlOyAvLyBPcmlnaW4gY2hhbmdlZCwgc28gaXQncyBmaW5l
IHRvIGV4aXQgYWdhaW4uCiAgICAgcHJvY2Vzc1NldExvY2FsUXVldWUoKTsKLSAgICBhZGRUb0dy
YXBoKEp1bXApOwotICAgIGxhbmRpbmdCbG9ja3MuYXBwZW5kKG1fY3VycmVudEJsb2NrKTsKKyAg
ICBpZiAoTm9kZSogdGVybWluYWwgPSBtX2N1cnJlbnRCbG9jay0+dGVybWluYWwoKSkKKyAgICAg
ICAgQVNTRVJUX1VOVVNFRCh0ZXJtaW5hbCwgdGVybWluYWwtPm9wKCkgPT0gVGFpbENhbGwgfHwg
dGVybWluYWwtPm9wKCkgPT0gVGFpbENhbGxWYXJhcmdzKTsKKyAgICBlbHNlIHsKKyAgICAgICAg
YWRkVG9HcmFwaChKdW1wKTsKKyAgICAgICAgbGFuZGluZ0Jsb2Nrcy5hcHBlbmQobV9jdXJyZW50
QmxvY2spOworICAgIH0KICAgICAKICAgICBSZWZQdHI8QmFzaWNCbG9jaz4gY29udGludWF0aW9u
QmxvY2sgPSBhZG9wdFJlZigKICAgICAgICAgbmV3IEJhc2ljQmxvY2soVUlOVF9NQVgsIG1fbnVt
QXJndW1lbnRzLCBtX251bUxvY2FscywgUE5hTikpOwpAQCAtMzY2NCw3ICszNjcyLDcgQEAgYm9v
bCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgICAgIC8v
IFdlIGNvdWxkIGJlIHRoZSBkdW1teSBqdW1wIHRvIGEgcmV0dXJuIGFmdGVyIGEgbm9uLWlubGlu
ZWQsIG5vbi1lbXVsYXRlZCB0YWlsIGNhbGwgaW4gYSB0ZXJuYXJ5IG9wZXJhdG9yCiAgICAgICAg
ICAgICAgICAgTm9kZSogdGVybWluYWwgPSBtX2N1cnJlbnRCbG9jay0+dGVybWluYWwoKTsKICAg
ICAgICAgICAgICAgICBBU1NFUlRfVU5VU0VEKHRlcm1pbmFsLCB0ZXJtaW5hbC0+b3AoKSA9PSBU
YWlsQ2FsbCB8fCB0ZXJtaW5hbC0+b3AoKSA9PSBUYWlsQ2FsbFZhcmFyZ3MpOwotICAgICAgICAg
ICAgICAgIExBU1RfT1BDT0RFKG9wX3JldCk7CisgICAgICAgICAgICAgICAgTEFTVF9PUENPREUo
b3Bfam1wKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGludCByZWxhdGl2ZU9mZnNldCA9
IGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQ7CiAgICAgICAgICAgICBhZGRUb0dyYXBo
KEp1bXAsIE9wSW5mbyhtX2N1cnJlbnRJbmRleCArIHJlbGF0aXZlT2Zmc2V0KSk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkocmV2aXNpb24gMTkwMjg1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTEwMzUsOCArMTAzNSw2IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgs
IE5vZGUqIG5vZGUKICAgICAgICAgCiAgICAgY2FzZSBUaHJvd1JlZmVyZW5jZUVycm9yOgogICAg
ICAgICB3cml0ZShTaWRlU3RhdGUpOwotICAgICAgICByZWFkKEhlYXBPYmplY3RDb3VudCk7Ci0g
ICAgICAgIHdyaXRlKEhlYXBPYmplY3RDb3VudCk7CiAgICAgICAgIHJldHVybjsKICAgICAgICAg
CiAgICAgY2FzZSBDb3VudEV4ZWN1dGlvbjoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Tm9kZS5oCShyZXZpc2lvbiAxOTAyODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTExOCw2ICsxMTE4LDE0IEBAIHN0cnVjdCBOb2Rl
IHsKICAgICAgICAgfQogICAgIH0KIAorICAgIGJvb2wgaXNGdW5jdGlvblRlcm1pbmFsKCkKKyAg
ICB7CisgICAgICAgIGlmIChpc1Rlcm1pbmFsKCkgJiYgIW51bVN1Y2Nlc3NvcnMoKSkKKyAgICAg
ICAgICAgIHJldHVybiB0cnVlOworCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKICAg
ICB1bnNpZ25lZCB0YXJnZXRCeXRlY29kZU9mZnNldER1cmluZ1BhcnNpbmcoKQogICAgIHsKICAg
ICAgICAgQVNTRVJUKGlzSnVtcCgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkocmV2aXNpb24gMTkwMjg1KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNzcxLDYgKzc3MSw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmVtaXRDYWxsKE5v
ZGUqIG5vZGUKICAgICAgICAgICAgIGNhbGxlZUdQUiA9IGNhbGxlZS5ncHIoKTsKICAgICAgICAg
ICAgIGNhbGxlZS51c2UoKTsKIAorICAgICAgICAgICAgc2h1ZmZsZURhdGEudGFnVHlwZU51bWJl
ciA9IEdQUkluZm86OnRhZ1R5cGVOdW1iZXJSZWdpc3RlcjsKICAgICAgICAgICAgIHNodWZmbGVE
YXRhLm51bUxvY2FscyA9IG1faml0LmdyYXBoKCkuZnJhbWVSZWdpc3RlckNvdW50KCk7CiAgICAg
ICAgICAgICBzaHVmZmxlRGF0YS5jYWxsZWUgPSBWYWx1ZVJlY292ZXJ5OjppbkdQUihjYWxsZWVH
UFIsIERhdGFGb3JtYXRKUyk7CiAgICAgICAgICAgICBzaHVmZmxlRGF0YS5hcmdzLnJlc2l6ZShu
dW1QYXNzZWRBcmdzKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVGllclVw
Q2hlY2tJbmplY3Rpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdUaWVyVXBDaGVja0luamVjdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTkwMjg1
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdUaWVyVXBDaGVja0luamVjdGlvblBo
YXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTUsNyArOTUsNyBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAgIE5vZGVBbmRJbmRleCB0ZXJtaW5hbCA9
IGJsb2NrLT5maW5kVGVybWluYWwoKTsKLSAgICAgICAgICAgIGlmICh0ZXJtaW5hbC5ub2RlLT5v
cCgpID09IFJldHVybikgeworICAgICAgICAgICAgaWYgKHRlcm1pbmFsLm5vZGUtPmlzRnVuY3Rp
b25UZXJtaW5hbCgpKSB7CiAgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0Lmluc2VydE5vZGUo
CiAgICAgICAgICAgICAgICAgICAgIHRlcm1pbmFsLmluZGV4LCBTcGVjTm9uZSwgQ2hlY2tUaWVy
VXBBdFJldHVybiwgdGVybWluYWwubm9kZS0+b3JpZ2luKTsKICAgICAgICAgICAgIH0KSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENhcGFiaWxpdGllcy5jcHAJKHJldmlz
aW9uIDE5MDI4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ2FwYWJpbGl0aWVz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMwLDEwICsxMzAsMTYgQEAgaW5saW5lIENhcGFiaWxp
dHlMZXZlbCBjYW5Db21waWxlKE5vZGUqIAogICAgIGNhc2UgTm90aWZ5V3JpdGU6CiAgICAgY2Fz
ZSBTdG9yZUJhcnJpZXI6CiAgICAgY2FzZSBDYWxsOgorICAgIGNhc2UgVGFpbENhbGw6CisgICAg
Y2FzZSBUYWlsQ2FsbElubGluZWRDYWxsZXI6CiAgICAgY2FzZSBDb25zdHJ1Y3Q6CiAgICAgY2Fz
ZSBDYWxsVmFyYXJnczoKLSAgICBjYXNlIENhbGxGb3J3YXJkVmFyYXJnczoKKyAgICBjYXNlIFRh
aWxDYWxsVmFyYXJnczoKKyAgICBjYXNlIFRhaWxDYWxsVmFyYXJnc0lubGluZWRDYWxsZXI6CiAg
ICAgY2FzZSBDb25zdHJ1Y3RWYXJhcmdzOgorICAgIGNhc2UgQ2FsbEZvcndhcmRWYXJhcmdzOgor
ICAgIGNhc2UgVGFpbENhbGxGb3J3YXJkVmFyYXJnczoKKyAgICBjYXNlIFRhaWxDYWxsRm9yd2Fy
ZFZhcmFyZ3NJbmxpbmVkQ2FsbGVyOgogICAgIGNhc2UgQ29uc3RydWN0Rm9yd2FyZFZhcmFyZ3M6
CiAgICAgY2FzZSBMb2FkVmFyYXJnczoKICAgICBjYXNlIFZhbHVlVG9JbnQzMjoKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcAkocmV2aXNpb24gMTkwMjg1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNjE4LDYgKzYxOCwyMiBAQCBzdGF0aWMgdm9pZCBmaXhGdW5jdGlvbkJhc2VkT25TdGFj
a01hcHMoCiAgICAgICAgICAgICBjYWxsLmxpbmsodm0sIGxpbmtCdWZmZXIsIHN0YXRlLmZpbmFs
aXplci0+aGFuZGxlRXhjZXB0aW9uc0xpbmtCdWZmZXItPmVudHJ5cG9pbnQoKSk7CiAgICAgICAg
IH0pOwogICAgIH0KKworICAgIGFkanVzdENhbGxJQ3NGb3JTdGFja21hcHMoc3RhdGUuanNUYWls
Q2FsbHMsIHJlY29yZE1hcCk7CisKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBzdGF0ZS5qc1RhaWxD
YWxscy5zaXplKCk7IGktLTspIHsKKyAgICAgICAgSlNUYWlsQ2FsbCYgY2FsbCA9IHN0YXRlLmpz
VGFpbENhbGxzW2ldOworCisgICAgICAgIENDYWxsSGVscGVycyBmYXN0UGF0aEpJVCgmdm0sIGNv
ZGVCbG9jayk7CisgICAgICAgIGNhbGwuZW1pdCgqc3RhdGUuaml0Q29kZS5nZXQoKSwgZmFzdFBh
dGhKSVQpOworCisgICAgICAgIGNoYXIqIHN0YXJ0T2ZJQyA9IGJpdHdpc2VfY2FzdDxjaGFyKj4o
Z2VuZXJhdGVkRnVuY3Rpb24pICsgY2FsbC5tX2luc3RydWN0aW9uT2Zmc2V0OworICAgICAgICBz
aXplX3Qgc2l6ZU9mSUMgPSBjYWxsLmVzdGltYXRlZFNpemUoKTsKKworICAgICAgICBnZW5lcmF0
ZUlubGluZUlmUG9zc2libGVPdXRPZkxpbmVJZk5vdChzdGF0ZSwgdm0sIGNvZGVCbG9jaywgZmFz
dFBhdGhKSVQsIHN0YXJ0T2ZJQywgc2l6ZU9mSUMsICJ0YWlsIGNhbGwgaW5saW5lIGNhY2hlIiwg
WyZdIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyLCBDQ2FsbEhlbHBlcnMmLCBib29sKSB7CisgICAg
ICAgICAgICBjYWxsLmxpbmsodm0sIGxpbmtCdWZmZXIpOworICAgICAgICB9KTsKKyAgICB9CiAg
ICAgCiAgICAgYXV0byBpdGVyID0gcmVjb3JkTWFwLmZpbmQoc3RhdGUuaGFuZGxlU3RhY2tPdmVy
Zmxvd0V4Y2VwdGlvblN0YWNrbWFwSUQpOwogICAgIC8vIEl0J3Mgc29ydCBvZiByZW1vdGVseSBw
b3NzaWJsZSB0aGF0IHdlIHdvbid0IGhhdmUgYW4gaW4tYmFuZCBleGNlcHRpb24gaGFuZGxpbmcK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW5saW5lQ2FjaGVTaXplLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTElubGluZUNhY2hlU2l6
ZS5jcHAJKHJldmlzaW9uIDE5MDI4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
SW5saW5lQ2FjaGVTaXplLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODIsNiArODIsMTUgQEAgc2l6
ZV90IHNpemVPZkNhbGxWYXJhcmdzKCkKICNlbmRpZgogfQogCitzaXplX3Qgc2l6ZU9mVGFpbENh
bGxWYXJhcmdzKCkKK3sKKyNpZiBDUFUoQVJNNjQpCisgICAgcmV0dXJuIDE4OCArIHNpemVPZkNh
bGxWYXJhcmdzKCk7CisjZWxzZQorICAgIHJldHVybiAxNTEgKyBzaXplT2ZDYWxsVmFyYXJncygp
OworI2VuZGlmCit9CisKIHNpemVfdCBzaXplT2ZDYWxsRm9yd2FyZFZhcmFyZ3MoKQogewogI2lm
IENQVShBUk02NCkKQEAgLTkxLDYgKzEwMCwxNSBAQCBzaXplX3Qgc2l6ZU9mQ2FsbEZvcndhcmRW
YXJhcmdzKCkKICNlbmRpZgogfQogCitzaXplX3Qgc2l6ZU9mVGFpbENhbGxGb3J3YXJkVmFyYXJn
cygpCit7CisjaWYgQ1BVKEFSTTY0KQorICAgIHJldHVybiAxODggKyBzaXplT2ZDYWxsRm9yd2Fy
ZFZhcmFyZ3MoKTsKKyNlbHNlCisgICAgcmV0dXJuIDE1MSArIHNpemVPZkNhbGxGb3J3YXJkVmFy
YXJncygpOworI2VuZGlmCit9CisKIHNpemVfdCBzaXplT2ZDb25zdHJ1Y3RWYXJhcmdzKCkKIHsK
ICAgICByZXR1cm4gc2l6ZU9mQ2FsbFZhcmFyZ3MoKTsgLy8gU2hvdWxkIGJlIHRoZSBzYW1lIHNp
emUuCkBAIC0xMjEsOSArMTM5LDE1IEBAIHNpemVfdCBzaXplT2ZJQ0ZvcihOb2RlKiBub2RlKQog
ICAgIGNhc2UgQ29uc3RydWN0OgogICAgICAgICByZXR1cm4gc2l6ZU9mQ2FsbCgpOwogICAgIGNh
c2UgQ2FsbFZhcmFyZ3M6CisgICAgY2FzZSBUYWlsQ2FsbFZhcmFyZ3NJbmxpbmVkQ2FsbGVyOgog
ICAgICAgICByZXR1cm4gc2l6ZU9mQ2FsbFZhcmFyZ3MoKTsKKyAgICBjYXNlIFRhaWxDYWxsVmFy
YXJnczoKKyAgICAgICAgcmV0dXJuIHNpemVPZlRhaWxDYWxsVmFyYXJncygpOwogICAgIGNhc2Ug
Q2FsbEZvcndhcmRWYXJhcmdzOgorICAgIGNhc2UgVGFpbENhbGxGb3J3YXJkVmFyYXJnc0lubGlu
ZWRDYWxsZXI6CiAgICAgICAgIHJldHVybiBzaXplT2ZDYWxsRm9yd2FyZFZhcmFyZ3MoKTsKKyAg
ICBjYXNlIFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3M6CisgICAgICAgIHJldHVybiBzaXplT2ZUYWls
Q2FsbEZvcndhcmRWYXJhcmdzKCk7CiAgICAgY2FzZSBDb25zdHJ1Y3RWYXJhcmdzOgogICAgICAg
ICByZXR1cm4gc2l6ZU9mQ29uc3RydWN0VmFyYXJncygpOwogICAgIGNhc2UgQ29uc3RydWN0Rm9y
d2FyZFZhcmFyZ3M6CkBAIC0xMzEsNyArMTU1LDcgQEAgc2l6ZV90IHNpemVPZklDRm9yKE5vZGUq
IG5vZGUpCiAgICAgY2FzZSBJbjoKICAgICAgICAgcmV0dXJuIHNpemVPZkluKCk7CiAgICAgZGVm
YXVsdDoKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CiAgICAgfQogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTElu
bGluZUNhY2hlU2l6ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMSW5saW5lQ2FjaGVTaXplLmgJKHJldmlzaW9uIDE5MDI4NSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMSW5saW5lQ2FjaGVTaXplLmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDcg
KzQwLDkgQEAgc2l6ZV90IHNpemVPZkdldEJ5SWQoKTsKIHNpemVfdCBzaXplT2ZQdXRCeUlkKCk7
CiBzaXplX3Qgc2l6ZU9mQ2FsbCgpOwogc2l6ZV90IHNpemVPZkNhbGxWYXJhcmdzKCk7CitzaXpl
X3Qgc2l6ZU9mVGFpbENhbGxWYXJhcmdzKCk7CiBzaXplX3Qgc2l6ZU9mQ2FsbEZvcndhcmRWYXJh
cmdzKCk7CitzaXplX3Qgc2l6ZU9mVGFpbENhbGxGb3J3YXJkVmFyYXJncygpOwogc2l6ZV90IHNp
emVPZkNvbnN0cnVjdFZhcmFyZ3MoKTsKIHNpemVfdCBzaXplT2ZDb25zdHJ1Y3RGb3J3YXJkVmFy
YXJncygpOwogc2l6ZV90IHNpemVPZkluKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTEpTQ2FsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExKU0NhbGwuY3BwCShyZXZpc2lvbiAxOTAyODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTEpTQ2FsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDcgKzQ4LDcgQEAgSlND
YWxsOjpKU0NhbGwodW5zaWduZWQgc3RhY2ttYXBJRCwgTm9kZQogICAgICwgbV9zdGFja21hcElE
KHN0YWNrbWFwSUQpCiAgICAgLCBtX2luc3RydWN0aW9uT2Zmc2V0KDApCiB7Ci0gICAgQVNTRVJU
KG5vZGUtPm9wKCkgPT0gQ2FsbCB8fCBub2RlLT5vcCgpID09IENvbnN0cnVjdCk7CisgICAgQVNT
RVJUKG5vZGUtPm9wKCkgPT0gQ2FsbCB8fCBub2RlLT5vcCgpID09IENvbnN0cnVjdCB8fCBub2Rl
LT5vcCgpID09IFRhaWxDYWxsSW5saW5lZENhbGxlcik7CiB9CiAKIHZvaWQgSlNDYWxsOjplbWl0
KENDYWxsSGVscGVycyYgaml0LCB1bnNpZ25lZCBzdGFja1NpemVGb3JMb2NhbHMpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpTQ2FsbEJhc2UuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSlNDYWxsQmFzZS5jcHAJKHJldmlzaW9uIDE5
MDI4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSlNDYWxsQmFzZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTU1LDE2ICs1NSwyOSBAQCB2b2lkIEpTQ2FsbEJhc2U6OmVtaXQoQ0Nh
bGxIZWxwZXJzJiBqaXQpCiAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIHNsb3dQYXRoID0gaml0LmJy
YW5jaFB0cldpdGhQYXRjaCgKICAgICAgICAgQ0NhbGxIZWxwZXJzOjpOb3RFcXVhbCwgR1BSSW5m
bzo6cmVnVDAsIG1fdGFyZ2V0VG9DaGVjaywKICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tUHRyKDApKTsKLSAgICAKLSAgICBtX2Zhc3RDYWxsID0gaml0Lm5lYXJDYWxsKCk7Ci0gICAg
Q0NhbGxIZWxwZXJzOjpKdW1wIGRvbmUgPSBqaXQuanVtcCgpOwotICAgIAorCisgICAgQ0NhbGxI
ZWxwZXJzOjpKdW1wIGRvbmU7CisKKyAgICBpZiAoQ2FsbExpbmtJbmZvOjpjYWxsTW9kZUZvciht
X3R5cGUpID09IENhbGxNb2RlOjpUYWlsKSB7CisgICAgICAgIGppdC5lbWl0UmVzdG9yZUNhbGxl
ZVNhdmVzKCk7CisgICAgICAgIGppdC5wcmVwYXJlRm9yVGFpbENhbGxTbG93KCk7CisgICAgICAg
IG1fZmFzdENhbGwgPSBqaXQubmVhclRhaWxDYWxsKCk7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
bV9mYXN0Q2FsbCA9IGppdC5uZWFyQ2FsbCgpOworICAgICAgICBkb25lID0gaml0Lmp1bXAoKTsK
KyAgICB9CisKICAgICBzbG93UGF0aC5saW5rKCZqaXQpOwotICAgIAorCiAgICAgaml0Lm1vdmUo
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKG1fY2FsbExpbmtJbmZvKSwgR1BSSW5mbzo6cmVn
VDIpOwogICAgIG1fc2xvd0NhbGwgPSBqaXQubmVhckNhbGwoKTsKLSAgICAKLSAgICBkb25lLmxp
bmsoJmppdCk7CisKKyAgICBpZiAoQ2FsbExpbmtJbmZvOjpjYWxsTW9kZUZvcihtX3R5cGUpID09
IENhbGxNb2RlOjpUYWlsKQorICAgICAgICBqaXQuYWJvcnRXaXRoUmVhc29uKEpJVERpZFJldHVy
bkZyb21UYWlsQ2FsbCk7CisgICAgZWxzZQorICAgICAgICBkb25lLmxpbmsoJmppdCk7CisKKyAg
ICBtX2NhbGxMaW5rSW5mby0+c2V0VXBDYWxsKG1fdHlwZSwgbV9vcmlnaW4sIEdQUkluZm86OnJl
Z1QwKTsKIH0KIAogdm9pZCBKU0NhbGxCYXNlOjpsaW5rKFZNJiB2bSwgTGlua0J1ZmZlciYgbGlu
a0J1ZmZlcikKQEAgLTcyLDkgKzg1LDggQEAgdm9pZCBKU0NhbGxCYXNlOjpsaW5rKFZNJiB2bSwg
TGlua0J1ZmZlcgogICAgIGxpbmtCdWZmZXIubGluaygKICAgICAgICAgbV9zbG93Q2FsbCwgRnVu
Y3Rpb25QdHIodm0uZ2V0Q1RJU3R1YihsaW5rQ2FsbFRodW5rR2VuZXJhdG9yKS5jb2RlKCkuZXhl
Y3V0YWJsZUFkZHJlc3MoKSkpOwogCi0gICAgbV9jYWxsTGlua0luZm8tPnNldFVwQ2FsbEZyb21G
VEwobV90eXBlLCBtX29yaWdpbiwgbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwobV9zbG93
Q2FsbCksCi0gICAgICAgIGxpbmtCdWZmZXIubG9jYXRpb25PZihtX3RhcmdldFRvQ2hlY2spLCBs
aW5rQnVmZmVyLmxvY2F0aW9uT2ZOZWFyQ2FsbChtX2Zhc3RDYWxsKSwKLSAgICAgICAgR1BSSW5m
bzo6cmVnVDApOworICAgIG1fY2FsbExpbmtJbmZvLT5zZXRDYWxsTG9jYXRpb25zKGxpbmtCdWZm
ZXIubG9jYXRpb25PZk5lYXJDYWxsKG1fc2xvd0NhbGwpLAorICAgICAgICBsaW5rQnVmZmVyLmxv
Y2F0aW9uT2YobV90YXJnZXRUb0NoZWNrKSwgbGlua0J1ZmZlci5sb2NhdGlvbk9mTmVhckNhbGwo
bV9mYXN0Q2FsbCkpOwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpTQ2FsbEJhc2UuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpTQ2FsbEJhc2UuaAkocmV2aXNpb24gMTkwMjg1KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKU0NhbGxCYXNlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTUwLDcgKzUwLDcgQEAgcHVibGljOgogICAgIHZvaWQgZW1pdChDQ2FsbEhlbHBlcnMm
KTsKICAgICB2b2lkIGxpbmsoVk0mLCBMaW5rQnVmZmVyJik7CiAgICAgCi1wcml2YXRlOgorcHJv
dGVjdGVkOgogICAgIENhbGxMaW5rSW5mbzo6Q2FsbFR5cGUgbV90eXBlOwogICAgIENvZGVPcmln
aW4gbV9vcmlnaW47CiAgICAgQ0NhbGxIZWxwZXJzOjpEYXRhTGFiZWxQdHIgbV90YXJnZXRUb0No
ZWNrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKU0NhbGxWYXJhcmdzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpTQ2FsbFZhcmFy
Z3MuY3BwCShyZXZpc2lvbiAxOTAyODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TEpTQ2FsbFZhcmFyZ3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSwxMiArNTEsMTUgQEAgSlND
YWxsVmFyYXJnczo6SlNDYWxsVmFyYXJncyh1bnNpZ25lZCBzdAogICAgICwgbV9ub2RlKG5vZGUp
CiAgICAgLCBtX2NhbGxCYXNlKAogICAgICAgICAobm9kZS0+b3AoKSA9PSBDb25zdHJ1Y3RWYXJh
cmdzIHx8IG5vZGUtPm9wKCkgPT0gQ29uc3RydWN0Rm9yd2FyZFZhcmFyZ3MpCi0gICAgICAgID8g
Q2FsbExpbmtJbmZvOjpDb25zdHJ1Y3RWYXJhcmdzIDogQ2FsbExpbmtJbmZvOjpDYWxsVmFyYXJn
cywKKyAgICAgICAgPyBDYWxsTGlua0luZm86OkNvbnN0cnVjdFZhcmFyZ3MgOiAobm9kZS0+b3Ao
KSA9PSBUYWlsQ2FsbFZhcmFyZ3MgfHwgbm9kZS0+b3AoKSA9PSBUYWlsQ2FsbEZvcndhcmRWYXJh
cmdzKQorICAgICAgICA/IENhbGxMaW5rSW5mbzo6VGFpbENhbGxWYXJhcmdzIDogQ2FsbExpbmtJ
bmZvOjpDYWxsVmFyYXJncywKICAgICAgICAgbm9kZS0+b3JpZ2luLnNlbWFudGljKQogICAgICwg
bV9pbnN0cnVjdGlvbk9mZnNldCgwKQogewogICAgIEFTU0VSVCgKICAgICAgICAgbm9kZS0+b3Ao
KSA9PSBDYWxsVmFyYXJncyB8fCBub2RlLT5vcCgpID09IENhbGxGb3J3YXJkVmFyYXJncworICAg
ICAgICB8fCBub2RlLT5vcCgpID09IFRhaWxDYWxsVmFyYXJnc0lubGluZWRDYWxsZXIgfHwgbm9k
ZS0+b3AoKSA9PSBUYWlsQ2FsbEZvcndhcmRWYXJhcmdzSW5saW5lZENhbGxlcgorICAgICAgICB8
fCBub2RlLT5vcCgpID09IFRhaWxDYWxsVmFyYXJncyB8fCBub2RlLT5vcCgpID09IFRhaWxDYWxs
Rm9yd2FyZFZhcmFyZ3MKICAgICAgICAgfHwgbm9kZS0+b3AoKSA9PSBDb25zdHJ1Y3RWYXJhcmdz
IHx8IG5vZGUtPm9wKCkgPT0gQ29uc3RydWN0Rm9yd2FyZFZhcmFyZ3MpOwogfQogCkBAIC04Mywx
MSArODYsMTUgQEAgdm9pZCBKU0NhbGxWYXJhcmdzOjplbWl0KENDYWxsSGVscGVycyYgagogICAg
IAogICAgIHN3aXRjaCAobV9ub2RlLT5vcCgpKSB7CiAgICAgY2FzZSBDYWxsVmFyYXJnczoKKyAg
ICBjYXNlIFRhaWxDYWxsVmFyYXJnczoKKyAgICBjYXNlIFRhaWxDYWxsVmFyYXJnc0lubGluZWRD
YWxsZXI6CiAgICAgY2FzZSBDb25zdHJ1Y3RWYXJhcmdzOgogICAgICAgICBhcmd1bWVudHNHUFIg
PSBHUFJJbmZvOjphcmd1bWVudEdQUjE7CiAgICAgICAgIHRoaXNHUFIgPSBHUFJJbmZvOjphcmd1
bWVudEdQUjI7CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgQ2FsbEZvcndhcmRWYXJhcmdzOgor
ICAgIGNhc2UgVGFpbENhbGxGb3J3YXJkVmFyYXJnczoKKyAgICBjYXNlIFRhaWxDYWxsRm9yd2Fy
ZFZhcmFyZ3NJbmxpbmVkQ2FsbGVyOgogICAgIGNhc2UgQ29uc3RydWN0Rm9yd2FyZFZhcmFyZ3M6
CiAgICAgICAgIHRoaXNHUFIgPSBHUFJJbmZvOjphcmd1bWVudEdQUjE7CiAgICAgICAgIGZvcndh
cmRpbmcgPSB0cnVlOwpAQCAtMTk2LDcgKzIwMyw3IEBAIHZvaWQgSlNDYWxsVmFyYXJnczo6ZW1p
dChDQ2FsbEhlbHBlcnMmIGoKICAgICAvLyBIZW5jZWZvcnRoIHdlIG1ha2UgdGhlIGNhbGwuIFRo
ZSBiYXNlIEZUTCBjYWxsIG1hY2hpbmVyeSBleHBlY3RzIHRoZSBjYWxsZWUgaW4gcmVnVDAgYW5k
IGZvciB0aGUKICAgICAvLyBzdGFjayBmcmFtZSB0byBhbHJlYWR5IGJlIHNldCB1cCwgd2hpY2gg
aXQgaXMuCiAgICAgaml0LnN0b3JlNjQoR1BSSW5mbzo6cmVnVDAsIENDYWxsSGVscGVyczo6Y2Fs
bGVlRnJhbWVTbG90KEpTU3RhY2s6OkNhbGxlZSkpOwotICAgIAorCiAgICAgbV9jYWxsQmFzZS5l
bWl0KGppdCk7CiAgICAgCiAgICAgLy8gVW5kbyB0aGUgZGFtYWdlIHdlJ3ZlIGRvbmUuCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpTVGFpbENhbGwuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSlNUYWlsQ2FsbC5jcHAJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpTVGFpbENhbGwuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMzI2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZU
TEpTVGFpbENhbGwuaCIKKworI2lmIEVOQUJMRShGVExfSklUKQorCisjaW5jbHVkZSAiQ2FsbEZy
YW1lU2h1ZmZsZXIuaCIKKyNpbmNsdWRlICJERkdOb2RlLmgiCisjaW5jbHVkZSAiRlRMSklUQ29k
ZS5oIgorI2luY2x1ZGUgIkZUTExvY2F0aW9uLmgiCisjaW5jbHVkZSAiRlRMU3RhY2tNYXBzLmgi
CisjaW5jbHVkZSAiSlNDSlNWYWx1ZUlubGluZXMuaCIKKyNpbmNsdWRlICJMaW5rQnVmZmVyLmgi
CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKKwordXNpbmcgbmFtZXNwYWNlIERG
RzsKKworbmFtZXNwYWNlIHsKKworRlRMOjpMb2NhdGlvbiBnZXRSZWdpc3RlcldpdGhBZGRlbmQo
Y29uc3QgRXhpdFZhbHVlJiB2YWx1ZSwgU3RhY2tNYXBzOjpSZWNvcmQmIHJlY29yZCwgU3RhY2tN
YXBzJiBzdGFja21hcHMpCit7CisgICAgaWYgKHZhbHVlLmtpbmQoKSAhPSBFeGl0VmFsdWVBcmd1
bWVudCkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIGF1dG8gbG9jYXRpb24gPQorICAgICAg
ICBGVEw6OkxvY2F0aW9uOjpmb3JTdGFja21hcHMoJnN0YWNrbWFwcywgcmVjb3JkLmxvY2F0aW9u
c1t2YWx1ZS5leGl0QXJndW1lbnQoKS5hcmd1bWVudCgpXSk7CisKKyAgICBpZiAobG9jYXRpb24u
a2luZCgpICE9IExvY2F0aW9uOjpSZWdpc3RlciB8fCAhbG9jYXRpb24uYWRkZW5kKCkpCisgICAg
ICAgIHJldHVybiB7IH07CisKKyAgICBSRUxFQVNFX0FTU0VSVChsb2NhdGlvbi5pc0dQUigpKTsK
KyAgICByZXR1cm4gbG9jYXRpb247Cit9CisKK1ZhbHVlUmVjb3ZlcnkgcmVjb3ZlcnlGb3IoY29u
c3QgRXhpdFZhbHVlJiB2YWx1ZSwgU3RhY2tNYXBzOjpSZWNvcmQmIHJlY29yZCwgU3RhY2tNYXBz
JiBzdGFja21hcHMpCit7CisgICAgc3dpdGNoICh2YWx1ZS5raW5kKCkpIHsKKyAgICBjYXNlIEV4
aXRWYWx1ZUNvbnN0YW50OgorICAgICAgICByZXR1cm4gVmFsdWVSZWNvdmVyeTo6Y29uc3RhbnQo
dmFsdWUuY29uc3RhbnQoKSk7CisKKyAgICBjYXNlIEV4aXRWYWx1ZUFyZ3VtZW50OiB7CisgICAg
ICAgIGF1dG8gbG9jYXRpb24gPQorICAgICAgICAgICAgRlRMOjpMb2NhdGlvbjo6Zm9yU3RhY2tt
YXBzKCZzdGFja21hcHMsIHJlY29yZC5sb2NhdGlvbnNbdmFsdWUuZXhpdEFyZ3VtZW50KCkuYXJn
dW1lbnQoKV0pOworICAgICAgICBhdXRvIGZvcm1hdCA9IHZhbHVlLmV4aXRBcmd1bWVudCgpLmZv
cm1hdCgpOworCisgICAgICAgIHN3aXRjaCAobG9jYXRpb24ua2luZCgpKSB7CisgICAgICAgIGNh
c2UgTG9jYXRpb246OlJlZ2lzdGVyOgorICAgICAgICAgICAgLy8gV2UgaGFuZGxlIHRoZSBhZGRl
bmQgb3V0c2lkZQorICAgICAgICAgICAgcmV0dXJuIFZhbHVlUmVjb3Zlcnk6OmluUmVnaXN0ZXIo
bG9jYXRpb24uZHdhcmZSZWcoKS5yZWcoKSwgZm9ybWF0KTsKKworICAgICAgICBjYXNlIExvY2F0
aW9uOjpJbmRpcmVjdDoKKyAgICAgICAgICAgIC8vIE9oIExMVk0sIHlvdSBjcmF6eS4uLgorICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQobG9jYXRpb24uZHdhcmZSZWcoKS5yZWcoKSA9PSBSZWco
TWFjcm9Bc3NlbWJsZXI6OmZyYW1lUG9pbnRlclJlZ2lzdGVyKSk7CisgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVCghKGxvY2F0aW9uLm9mZnNldCgpICUgc2l6ZW9mKHZvaWQqKSkpOworICAgICAg
ICAgICAgcmV0dXJuIFZhbHVlUmVjb3Zlcnk6OmRpc3BsYWNlZEluSlNTdGFjayhWaXJ0dWFsUmVn
aXN0ZXIgeyBzdGF0aWNfY2FzdDxpbnQ+KGxvY2F0aW9uLm9mZnNldCgpIC8gc2l6ZW9mKHZvaWQq
KSkgfSwgZm9ybWF0KTsKKworICAgICAgICBjYXNlIExvY2F0aW9uOjpDb25zdGFudDoKKyAgICAg
ICAgICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5Ojpjb25zdGFudChKU1ZhbHVlOjpkZWNvZGUobG9j
YXRpb24uY29uc3RhbnQoKSkpOworCisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICB9CisgICAgfQorCisgICAgY2FzZSBF
eGl0VmFsdWVJbkpTU3RhY2s6CisgICAgICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5OjpkaXNwbGFj
ZWRJbkpTU3RhY2sodmFsdWUudmlydHVhbFJlZ2lzdGVyKCksIERhdGFGb3JtYXRKUyk7CisKKyAg
ICBjYXNlIEV4aXRWYWx1ZUluSlNTdGFja0FzSW50MzI6CisgICAgICAgIHJldHVybiBWYWx1ZVJl
Y292ZXJ5OjpkaXNwbGFjZWRJbkpTU3RhY2sodmFsdWUudmlydHVhbFJlZ2lzdGVyKCksIERhdGFG
b3JtYXRJbnQzMik7CisKKyAgICBjYXNlIEV4aXRWYWx1ZUluSlNTdGFja0FzSW50NTI6CisgICAg
ICAgIHJldHVybiBWYWx1ZVJlY292ZXJ5OjpkaXNwbGFjZWRJbkpTU3RhY2sodmFsdWUudmlydHVh
bFJlZ2lzdGVyKCksIERhdGFGb3JtYXRJbnQ1Mik7CisKKyAgICBjYXNlIEV4aXRWYWx1ZUluSlNT
dGFja0FzRG91YmxlOgorICAgICAgICByZXR1cm4gVmFsdWVSZWNvdmVyeTo6ZGlzcGxhY2VkSW5K
U1N0YWNrKHZhbHVlLnZpcnR1YWxSZWdpc3RlcigpLCBEYXRhRm9ybWF0RG91YmxlKTsKKworICAg
IGRlZmF1bHQ6CisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQor
fQorCisvLyBUaGlzIGNvbXB1dGVzIGFuIGVzdGltYXRlZCBzaXplIChpbiBiaXRzKSBmb3IgdGhl
IHNlcXVlbmNlIG9mCisvLyBpbnN0cnVjdGlvbnMgcmVxdWlyZWQgdG8gbG9hZCwgYm94LCBhbmQg
c3RvcmUgYSB2YWx1ZSBvZiBhIGdpdmVuCisvLyB0eXBlLCBhc3N1bWluZyBubyBzcGlsbGluZyBp
cyByZXF1aXJlZC4KK3VpbnQzMl90IHNpemVGb3IoRGF0YUZvcm1hdCBmb3JtYXQpCit7CisgICAg
c3dpdGNoIChmb3JtYXQpIHsKKyAgICBjYXNlIERhdGFGb3JtYXRJbnQzMjoKKyAgICAgICAgLy8g
Qm94aW5nIGlzIHplcm8tZXh0ZW5kaW5nIGFuZCB0YWdnaW5nCisjaWYgQ1BVKFg4Nl82NCkKKyAg
ICAgICAgcmV0dXJuIDYgKyBzaXplRm9yKERhdGFGb3JtYXRKUyk7CisjZWxpZiBDUFUoQVJNNjQp
CisgICAgICAgIHJldHVybiA4ICsgc2l6ZUZvcihEYXRhRm9ybWF0SlMpOworI2Vsc2UKKyAgICAg
ICAgcmV0dXJuIHNpemVPZlplcm9FeHRlbmQzMiArIHNpemVPZk9ySW1tNjQgKyBzaXplRm9yKERh
dGFGb3JtYXRKUyk7CisjZW5kaWYKKworICAgIGNhc2UgRGF0YUZvcm1hdEludDUyOgorICAgICAg
ICAvLyBCb3hpbmcgaXMgZmlyc3QgYSBjb252ZXJzaW9uIHRvIFN0cmljdEludDUyLCB0aGVuCisg
ICAgICAgIC8vIFN0cmljdEludDUyIGJveGluZworI2lmIENQVShYODZfNjQpCisgICAgICAgIHJl
dHVybiA0ICsgc2l6ZUZvcihEYXRhRm9ybWF0U3RyaWN0SW50NTIpOworI2VsaWYgQ1BVKEFSTTY0
KQorICAgICAgICByZXR1cm4gNCArIHNpemVGb3IoRGF0YUZvcm1hdFN0cmljdEludDUyKTsKKyNl
bHNlCisgICAgICAgIHJldHVybiBzaXplT2ZTaGlmdEltbTMyICsgc2l6ZUZvcihEYXRhRm9ybWF0
U3RyaWN0SW50NTIpOworI2VuZGlmCisKKyAgICBjYXNlIERhdGFGb3JtYXRTdHJpY3RJbnQ1MjoK
KyAgICAgICAgLy8gQm94aW5nIGlzIGZpcnN0IGEgY29udmVyc2lvbiB0byBkb3VibGUsIHRoZW4g
ZG91YmxlIGJveGluZworI2lmIENQVShYODZfNjQpCisgICAgICAgIHJldHVybiA4ICsgc2l6ZUZv
cihEYXRhRm9ybWF0RG91YmxlKTsKKyNlbGlmIENQVShBUk02NCkKKyAgICAgICAgcmV0dXJuIDQg
KyBzaXplRm9yKERhdGFGb3JtYXREb3VibGUpOworI2Vsc2UKKyAgICAgICAgcmV0dXJuIHNpemVP
ZkNvbnZlcnRJbnQ2NFRvRG91YmxlICsgc2l6ZUZvcihEYXRhRm9ybWF0RG91YmxlKTsKKyNlbmRp
ZgorCisgICAgY2FzZSBEYXRhRm9ybWF0RG91YmxlOgorICAgICAgICAvLyBCb3hpbmcgaXMgcHVy
aWZ5aW5nLCBtb3ZpbmcgdG8gYSBHUFIsIGFuZCB0YWdnaW5nCisjaWYgQ1BVKFg4Nl82NCkKKyAg
ICAgICAgcmV0dXJuIDM4ICsgc2l6ZUZvcihEYXRhRm9ybWF0SlMpOworI2VsaWYgQ1BVKEFSTTY0
KQorICAgICAgICByZXR1cm4gMjggKyBzaXplRm9yKERhdGFGb3JtYXRKUyk7CisjZWxzZQorICAg
ICAgICByZXR1cm4gc2l6ZU9mUHVyaWZ5TmFOICsgc2l6ZU9mU3ViSW1tNjQgKyBzaXplT2ZNb3Zl
RG91YmxlVG82NCArIHNpemVGb3IoRGF0YUZvcm1hdEpTKTsKKyNlbmRpZgorCisgICAgY2FzZSBE
YXRhRm9ybWF0Qm9vbGVhbjoKKyAgICAgICAgLy8gQm94aW5nIGlzIGFkZGluZyBWYWx1ZUZhbHNl
CisjaWYgQ1BVKFg4Nl82NCkKKyAgICAgICAgcmV0dXJuIDQgKyBzaXplRm9yKERhdGFGb3JtYXRK
Uyk7CisjZWxpZiBDUFUoQVJNNjQpCisgICAgICAgIHJldHVybiA0ICsgc2l6ZUZvcihEYXRhRm9y
bWF0SlMpOworI2Vsc2UKKyAgICAgICAgcmV0dXJuIHNpemVPZkFkZEltbTMyICsgc2l6ZUZvcihE
YXRhRm9ybWF0SlMpOworI2VuZGlmCisKKyAgICBjYXNlIERhdGFGb3JtYXRKUzoKKyAgICAgICAg
Ly8gV2Ugd2lsbCBsb2FkIChpbiBhIEdQUiBvciBGUFIpIHRoZW4gc3RvcmUgdGhlIHZhbHVlCisj
aWYgQ1BVKFg4Nl82NCkKKyAgICAgICAgcmV0dXJuIDg7CisjZWxpZiBDUFUoQVJNNjQpCisgICAg
ICAgIHJldHVybiA4OworI2Vsc2UKKyAgICAgICAgcmV0dXJuIHNpemVPZkxvYWQgKyBzaXplT2ZT
dG9yZTsKKyNlbmRpZgorCisgICAgZGVmYXVsdDoKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICB9Cit9CisKK30gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorCitKU1Rh
aWxDYWxsOjpKU1RhaWxDYWxsKHVuc2lnbmVkIHN0YWNrbWFwSUQsIE5vZGUqIG5vZGUsIFZlY3Rv
cjxFeGl0VmFsdWU+IGFyZ3VtZW50cykKKyAgICA6IEpTQ2FsbEJhc2UoQ2FsbExpbmtJbmZvOjpU
YWlsQ2FsbCwgbm9kZS0+b3JpZ2luLnNlbWFudGljKQorICAgICwgbV9zdGFja21hcElEKHN0YWNr
bWFwSUQpCisgICAgLCBtX2FyZ3VtZW50cyB7IFdURjo6bW92ZShhcmd1bWVudHMpIH0KKyAgICAs
IG1faW5zdHJ1Y3Rpb25PZmZzZXQoMCkKK3sKKyAgICBBU1NFUlQobm9kZS0+b3AoKSA9PSBUYWls
Q2FsbCk7CisgICAgQVNTRVJUKG51bUFyZ3VtZW50cygpID09IG5vZGUtPm51bUNoaWxkcmVuKCkg
LSAxKTsKKworICAgIC8vIEVzdGltYXRlIHRoZSBzaXplIG9mIHRoZSBpbmxpbmUgY2FjaGUsIGFz
c3VtaW5nIHRoYXQgZXZlcnkKKyAgICAvLyB2YWx1ZSBnb2VzIGZyb20gdGhlIHN0YWNrIHRvIHRo
ZSBzdGFjayAoaW4gcHJhY3RpY2UsIHRoaXMgd2lsbAorICAgIC8vIHNlbGRvbSBiZSB0cnVlLCBn
aXZpbmcgdXMgc29tZSBhbW91bnQgb2YgbGVld2F5KSBhbmQgdGhhdCBubworICAgIC8vIHNwaWxs
aW5nIHdpbGwgb2NjdXIgKGluIHByYWN0aWNlLCB0aGlzIHdpbGwgYWxtb3N0IGFsd2F5cyBiZQor
ICAgIC8vIHRydWUpLgorCisgICAgLy8gV2UgZmlyc3QgY29tcHV0ZSB0aGUgbmV3IGZyYW1lIGJh
c2UgYW5kIGxvYWQgdGhlIGZwL2xyCisgICAgLy8gcmVnaXN0ZXJzIGZpbmFsIHZhbHVlcy4gT24g
ZGVidWcgYnVpbGRzLCB3ZSBhbHNvIG5lZWQgdG8KKyAgICAvLyBhY2NvdW50IGZvciB0aGUgZnAt
c3AgZGVsdGEgY2hlY2sgKHR3aWNlOiBmYXN0IGFuZCBzbG93IHBhdGgpLgorI2lmIENQVShYODZf
NjQpCisgICAgbV9lc3RpbWF0ZWRTaXplID0gNTY7CisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAg
IG1fZXN0aW1hdGVkU2l6ZSArPSAyNjsKKyMgIGVuZGlmCisjZWxpZiBDUFUoQVJNNjQpCisgICAg
bV9lc3RpbWF0ZWRTaXplID0gNDQ7CisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgIG1fZXN0aW1h
dGVkU2l6ZSArPSAyNDsKKyMgIGVuZGlmCisjZWxzZQorICAgIFVOUkVBQ0hBQkxFX0ZPUl9QTEFU
Rk9STSgpOworI2VuZGlmCisKKyAgICAvLyBBcmd1bWVudHMgd2lsbCBwcm9iYWJseSBiZSBsb2Fk
ZWQgJiBzdG9yZWQgdHdpY2UgKGZhc3QgJiBzbG93KQorICAgIGZvciAoRXhpdFZhbHVlJiBhcmcg
OiBtX2FyZ3VtZW50cykKKyAgICAgICAgbV9lc3RpbWF0ZWRTaXplICs9IDIgKiBzaXplRm9yKGFy
Zy5kYXRhRm9ybWF0KCkpOworCisgICAgLy8gV2UgYWxzbyBoYXZlIHRoZSBzbG93IHBhdGggY2hl
Y2ssIHRoZSB0d28gY2FsbHMsIGFuZCB0aGUKKyAgICAvLyBDYWxsTGlua0luZm8gbG9hZCBmb3Ig
dGhlIHNsb3cgcGF0aAorI2lmIENQVShYODZfNjQpCisgICAgbV9lc3RpbWF0ZWRTaXplICs9IDU1
OworI2VsaWYgQ1BVKEFSTTY0KQorICAgIG1fZXN0aW1hdGVkU2l6ZSArPSA0NDsKKyNlbHNlCisg
ICAgbV9lc3RpbWF0ZWRTaXplICs9IHNpemVPZkNhbGwgKyBzaXplT2ZKdW1wICsgc2l6ZU9mTG9h
ZCArIHNpemVPZlNsb3dQYXRoQ2hlY2s7CisjZW5kaWYKK30KKwordm9pZCBKU1RhaWxDYWxsOjpl
bWl0KEpJVENvZGUmIGppdENvZGUsIENDYWxsSGVscGVycyYgaml0KQoreworICAgIFN0YWNrTWFw
czo6UmVjb3JkKiByZWNvcmQgeyBudWxscHRyIH07CisgICAgCisgICAgZm9yICh1bnNpZ25lZCBp
ID0gaml0Q29kZS5zdGFja21hcHMucmVjb3Jkcy5zaXplKCk7IGktLTspIHsKKyAgICAgICAgcmVj
b3JkID0gJmppdENvZGUuc3RhY2ttYXBzLnJlY29yZHNbaV07CisgICAgICAgIGlmIChyZWNvcmQt
PnBhdGNocG9pbnRJRCA9PSBtX3N0YWNrbWFwSUQpCisgICAgICAgICAgICBicmVhazsKKyAgICB9
CisKKyAgICBSRUxFQVNFX0FTU0VSVChyZWNvcmQtPnBhdGNocG9pbnRJRCA9PSBtX3N0YWNrbWFw
SUQpOworCisgICAgbV9jYWxsTGlua0luZm8gPSBqaXQuY29kZUJsb2NrKCktPmFkZENhbGxMaW5r
SW5mbygpOworCisgICAgQ2FsbEZyYW1lU2h1ZmZsZURhdGEgc2h1ZmZsZURhdGE7CisKKyAgICAv
LyBUaGUgY2FsbGVlIHdhcyB0aGUgZmlyc3QgcGFzc2VkIGFyZ3VtZW50LCBhbmQgbXVzdCBiZSBp
biBhIEdQUiBiZWNhdXNlCisgICAgLy8gd2UgdXNlZCB0aGUgImFueXJlZ2NjIiBjYWxsaW5nIGNv
bnZlbnRpb24KKyAgICBhdXRvIGNhbGxlZUxvY2F0aW9uID0KKyAgICAgICAgRlRMOjpMb2NhdGlv
bjo6Zm9yU3RhY2ttYXBzKG51bGxwdHIsIHJlY29yZC0+bG9jYXRpb25zWzBdKTsKKyAgICBHUFJS
ZWcgY2FsbGVlR1BSID0gY2FsbGVlTG9jYXRpb24uZGlyZWN0R1BSKCk7CisgICAgc2h1ZmZsZURh
dGEuY2FsbGVlID0gVmFsdWVSZWNvdmVyeTo6aW5HUFIoY2FsbGVlR1BSLCBEYXRhRm9ybWF0SlMp
OworCisgICAgLy8gVGhlIHRhZyB0eXBlIG51bWJlciB3YXMgdGhlIHNlY29uZCBhcmd1bWVudCwg
aWYgdGhlcmUgd2FzIG9uZQorICAgIGF1dG8gdGFnVHlwZU51bWJlckxvY2F0aW9uID0KKyAgICAg
ICAgRlRMOjpMb2NhdGlvbjo6Zm9yU3RhY2ttYXBzKCZqaXRDb2RlLnN0YWNrbWFwcywgcmVjb3Jk
LT5sb2NhdGlvbnNbMV0pOworICAgIGlmICh0YWdUeXBlTnVtYmVyTG9jYXRpb24uaXNHUFIoKSAm
JiAhdGFnVHlwZU51bWJlckxvY2F0aW9uLmFkZGVuZCgpKQorICAgICAgICBzaHVmZmxlRGF0YS50
YWdUeXBlTnVtYmVyID0gdGFnVHlwZU51bWJlckxvY2F0aW9uLmRpcmVjdEdQUigpOworCisgICAg
c2h1ZmZsZURhdGEuYXJncy5ncm93KG51bUFyZ3VtZW50cygpKTsKKyAgICBIYXNoTWFwPFJlZywg
VmVjdG9yPHN0ZDo6cGFpcjxWYWx1ZVJlY292ZXJ5KiwgaW50MzJfdD4+PiB3aXRoQWRkZW5kOwor
ICAgIHNpemVfdCBudW1BZGRlbmRzIHsgMCB9OworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
bnVtQXJndW1lbnRzKCk7ICsraSkgeworICAgICAgICBzaHVmZmxlRGF0YS5hcmdzW2ldID0gcmVj
b3ZlcnlGb3IobV9hcmd1bWVudHNbaV0sICpyZWNvcmQsIGppdENvZGUuc3RhY2ttYXBzKTsKKyAg
ICAgICAgaWYgKEZUTDo6TG9jYXRpb24gYWRkZW5kID0gZ2V0UmVnaXN0ZXJXaXRoQWRkZW5kKG1f
YXJndW1lbnRzW2ldLCAqcmVjb3JkLCBqaXRDb2RlLnN0YWNrbWFwcykpIHsKKyAgICAgICAgICAg
IHdpdGhBZGRlbmQuYWRkKAorICAgICAgICAgICAgICAgIGFkZGVuZC5kd2FyZlJlZygpLnJlZygp
LAorICAgICAgICAgICAgICAgIFZlY3RvcjxzdGQ6OnBhaXI8VmFsdWVSZWNvdmVyeSosIGludDMy
X3Q+PigpKS5pdGVyYXRvci0+dmFsdWUuYXBwZW5kKAorICAgICAgICAgICAgICAgICAgICBzdGQ6
Om1ha2VfcGFpcigmc2h1ZmZsZURhdGEuYXJnc1tpXSwgYWRkZW5kLmFkZGVuZCgpKSk7CisgICAg
ICAgICAgICBudW1BZGRlbmRzKys7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBudW1BZGRlbmRz
ID0gV1RGOjpyb3VuZFVwVG9NdWx0aXBsZU9mKHN0YWNrQWxpZ25tZW50UmVnaXN0ZXJzKCksIG51
bUFkZGVuZHMpOworCisgICAgc2h1ZmZsZURhdGEubnVtTG9jYWxzID0gc3RhdGljX2Nhc3Q8aW50
NjRfdD4oaml0Q29kZS5zdGFja21hcHMuc3RhY2tTaXplRm9yTG9jYWxzKCkpIC8gc2l6ZW9mKHZv
aWQqKSArIG51bUFkZGVuZHM7CisKKyAgICBBU1NFUlQoIW51bUFkZGVuZHMgPT0gd2l0aEFkZGVu
ZC5pc0VtcHR5KCkpOworCisgICAgaWYgKCF3aXRoQWRkZW5kLmlzRW1wdHkoKSkgeworICAgICAg
ICBqaXQuc3ViUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIobnVtQWRkZW5kcyAqIHNp
emVvZih2b2lkKikpLCBNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworICAg
ICAgICBWaXJ0dWFsUmVnaXN0ZXIgc3BpbGxCYXNlIHsgMSAtIHN0YXRpY19jYXN0PGludD4oc2h1
ZmZsZURhdGEubnVtTG9jYWxzKSB9OworICAgICAgICBmb3IgKGF1dG8gZW50cnkgOiB3aXRoQWRk
ZW5kKSB7CisgICAgICAgICAgICBmb3IgKGF1dG8gcGFpciA6IGVudHJ5LnZhbHVlKSB7CisgICAg
ICAgICAgICAgICAgQVNTRVJUKG51bUFkZGVuZHMgPiAwKTsKKyAgICAgICAgICAgICAgICBWaXJ0
dWFsUmVnaXN0ZXIgc3BpbGxTbG90IHsgc3BpbGxCYXNlICsgLS1udW1BZGRlbmRzIH07CisgICAg
ICAgICAgICAgICAgQVNTRVJUKGVudHJ5LmtleS5pc0dQUigpKTsKKyAgICAgICAgICAgICAgICBq
aXQuYWRkUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIocGFpci5zZWNvbmQpLCBlbnRy
eS5rZXkuZ3ByKCkpOworICAgICAgICAgICAgICAgIGppdC5zdG9yZVB0cihlbnRyeS5rZXkuZ3By
KCksIENDYWxsSGVscGVyczo6YWRkcmVzc0ZvcihzcGlsbFNsb3QpKTsKKyAgICAgICAgICAgICAg
ICBqaXQuc3ViUHRyKE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tMzIocGFpci5zZWNvbmQpLCBl
bnRyeS5rZXkuZ3ByKCkpOworICAgICAgICAgICAgICAgICpwYWlyLmZpcnN0ID0gVmFsdWVSZWNv
dmVyeTo6ZGlzcGxhY2VkSW5KU1N0YWNrKHNwaWxsU2xvdCwgcGFpci5maXJzdC0+ZGF0YUZvcm1h
dCgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBBU1NFUlQobnVtQWRkZW5k
cyA8IHN0YWNrQWxpZ25tZW50UmVnaXN0ZXJzKCkpOworICAgIH0KKworICAgIHNodWZmbGVEYXRh
LmFyZ3MucmVzaXplKG51bUFyZ3VtZW50cygpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8
IG51bUFyZ3VtZW50cygpOyArK2kpCisgICAgICAgIHNodWZmbGVEYXRhLmFyZ3NbaV0gPSByZWNv
dmVyeUZvcihtX2FyZ3VtZW50c1tpXSwgKnJlY29yZCwgaml0Q29kZS5zdGFja21hcHMpOworCisg
ICAgc2h1ZmZsZURhdGEuc2V0dXBDYWxsZWVTYXZlUmVnaXN0ZXJzKGppdC5jb2RlQmxvY2soKSk7
CisKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgc2xvd1BhdGggPSBqaXQuYnJhbmNoUHRyV2l0aFBh
dGNoKAorICAgICAgICBDQ2FsbEhlbHBlcnM6Ok5vdEVxdWFsLCBjYWxsZWVHUFIsIG1fdGFyZ2V0
VG9DaGVjaywKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKDApKTsKKworICAg
IG1fY2FsbExpbmtJbmZvLT5zZXRGcmFtZVNodWZmbGVEYXRhKHNodWZmbGVEYXRhKTsKKyAgICBD
YWxsRnJhbWVTaHVmZmxlcihqaXQsIHNodWZmbGVEYXRhKS5wcmVwYXJlRm9yVGFpbENhbGwoKTsK
KworICAgIG1fZmFzdENhbGwgPSBqaXQubmVhclRhaWxDYWxsKCk7CisKKyAgICBzbG93UGF0aC5s
aW5rKCZqaXQpOworCisgICAgQ2FsbEZyYW1lU2h1ZmZsZXIgc2xvd1BhdGhTaHVmZmxlcihqaXQs
IHNodWZmbGVEYXRhKTsKKyAgICBzbG93UGF0aFNodWZmbGVyLnNldENhbGxlZUpTVmFsdWVSZWdz
KEpTVmFsdWVSZWdzIHsgR1BSSW5mbzo6cmVnVDAgfSk7CisgICAgc2xvd1BhdGhTaHVmZmxlci5w
cmVwYXJlRm9yU2xvd1BhdGgoKTsKKworICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbVB0cihtX2NhbGxMaW5rSW5mbyksIEdQUkluZm86OnJlZ1QyKTsKKworICAgIG1fc2xvd0Nh
bGwgPSBqaXQubmVhckNhbGwoKTsKKworICAgIGppdC5hYm9ydFdpdGhSZWFzb24oSklURGlkUmV0
dXJuRnJvbVRhaWxDYWxsKTsKKworICAgIG1fY2FsbExpbmtJbmZvLT5zZXRVcENhbGwobV90eXBl
LCBtX29yaWdpbiwgY2FsbGVlR1BSKTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAor
CisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTEpTVGFpbENhbGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTEpTVGFpbENhbGwuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMSlNUYWlsQ2FsbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzQgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IEZUTEpTVGFpbENhbGxfaAorI2RlZmluZSBGVExKU1RhaWxDYWxsX2gKKworI2lmIEVOQUJMRShG
VExfSklUKQorCisjaW5jbHVkZSAiRlRMRXhpdEFyZ3VtZW50TGlzdC5oIgorI2luY2x1ZGUgIkZU
TEV4aXRWYWx1ZS5oIgorI2luY2x1ZGUgIkZUTEpTQ2FsbEJhc2UuaCIKKworbmFtZXNwYWNlIEpT
QyB7CisKK25hbWVzcGFjZSBERkcgeworc3RydWN0IE5vZGU7Cit9CisKK25hbWVzcGFjZSBGVEwg
eworCitjbGFzcyBKU1RhaWxDYWxsIDogcHVibGljIEpTQ2FsbEJhc2UgeworcHVibGljOgorICAg
IEpTVGFpbENhbGwodW5zaWduZWQgc3RhY2ttYXBJRCwgREZHOjpOb2RlKiwgVmVjdG9yPEV4aXRW
YWx1ZT4gYXJndW1lbnRzKTsKKworICAgIHZvaWQgZW1pdChKSVRDb2RlJiwgQ0NhbGxIZWxwZXJz
Jik7CisgICAgCisgICAgdW5zaWduZWQgc3RhY2ttYXBJRCgpIGNvbnN0IHsgcmV0dXJuIG1fc3Rh
Y2ttYXBJRDsgfQorCisgICAgdW5zaWduZWQgZXN0aW1hdGVkU2l6ZSgpIGNvbnN0IHsgcmV0dXJu
IG1fZXN0aW1hdGVkU2l6ZTsgfQorCisgICAgdW5zaWduZWQgbnVtQXJndW1lbnRzKCkgY29uc3Qg
eyByZXR1cm4gbV9hcmd1bWVudHMuc2l6ZSgpOyB9CisKKyAgICBib29sIG9wZXJhdG9yPChjb25z
dCBKU1RhaWxDYWxsJiBvdGhlcikgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2luc3Ry
dWN0aW9uT2Zmc2V0IDwgb3RoZXIubV9pbnN0cnVjdGlvbk9mZnNldDsKKyAgICB9CisgICAgCitw
cml2YXRlOgorICAgIHVuc2lnbmVkIG1fc3RhY2ttYXBJRDsKKyAgICBWZWN0b3I8RXhpdFZhbHVl
PiBtX2FyZ3VtZW50czsKKyAgICB1bnNpZ25lZCBtX2VzdGltYXRlZFNpemU7CisKK3B1YmxpYzoK
KyAgICB1aW50MzJfdCBtX2luc3RydWN0aW9uT2Zmc2V0OworfTsKKworfSB9IC8vIG5hbWVzcGFj
ZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCisKKyNlbmRpZiAvLyBGVExK
U1RhaWxDYWxsX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb2NhdGlv
bi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG9jYXRpb24u
aAkocmV2aXNpb24gMTkwMjg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb2Nh
dGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjAsNyArMTIwLDkgQEAgcHVibGljOgogICAgICAg
ICByZXR1cm4gdS5jb25zdGFudDsKICAgICB9CiAgICAgCi0gICAgYm9vbCBvcGVyYXRvciEoKSBj
b25zdCB7IHJldHVybiBraW5kKCkgPT0gVW5wcm9jZXNzZWQgJiYgIXUudmFyaWFibGUub2Zmc2V0
OyB9CisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuIGtpbmQoKSAh
PSBVbnByb2Nlc3NlZCB8fCB1LnZhcmlhYmxlLm9mZnNldDsgfQorCisgICAgYm9vbCBvcGVyYXRv
ciEoKSBjb25zdCB7IHJldHVybiAhc3RhdGljX2Nhc3Q8Ym9vbD4oKnRoaXMpOyB9CiAgICAgCiAg
ICAgYm9vbCBpc0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSgpIGNvbnN0IHsgcmV0dXJuIGtpbmQoKSA9
PSBVbnByb2Nlc3NlZCAmJiB1LnZhcmlhYmxlLm9mZnNldDsgfQogICAgIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHJldmlzaW9u
IDE5MDI4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNzMsNyArMTczLDExIEBAIHB1YmxpYzoKICAgICAgICAg
ICAgIGZvciAoTm9kZSogbm9kZSA6ICpibG9jaykgewogICAgICAgICAgICAgICAgIHN3aXRjaCAo
bm9kZS0+b3AoKSkgewogICAgICAgICAgICAgICAgIGNhc2UgQ2FsbFZhcmFyZ3M6CisgICAgICAg
ICAgICAgICAgY2FzZSBUYWlsQ2FsbFZhcmFyZ3M6CisgICAgICAgICAgICAgICAgY2FzZSBUYWls
Q2FsbFZhcmFyZ3NJbmxpbmVkQ2FsbGVyOgogICAgICAgICAgICAgICAgIGNhc2UgQ2FsbEZvcndh
cmRWYXJhcmdzOgorICAgICAgICAgICAgICAgIGNhc2UgVGFpbENhbGxGb3J3YXJkVmFyYXJnczoK
KyAgICAgICAgICAgICAgICBjYXNlIFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3NJbmxpbmVkQ2FsbGVy
OgogICAgICAgICAgICAgICAgIGNhc2UgQ29uc3RydWN0VmFyYXJnczoKICAgICAgICAgICAgICAg
ICBjYXNlIENvbnN0cnVjdEZvcndhcmRWYXJhcmdzOgogICAgICAgICAgICAgICAgICAgICBoYXNW
YXJhcmdzID0gdHJ1ZTsKQEAgLTcyMywxMSArNzI3LDE5IEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICBjb21waWxlTG9naWNhbE5vdCgpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2Ug
Q2FsbDoKKyAgICAgICAgY2FzZSBUYWlsQ2FsbElubGluZWRDYWxsZXI6CiAgICAgICAgIGNhc2Ug
Q29uc3RydWN0OgogICAgICAgICAgICAgY29tcGlsZUNhbGxPckNvbnN0cnVjdCgpOwogICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgVGFpbENhbGw6CisgICAgICAgICAgICBjb21waWxl
VGFpbENhbGwoKTsKKyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBjYXNlIENhbGxWYXJhcmdz
OgogICAgICAgICBjYXNlIENhbGxGb3J3YXJkVmFyYXJnczoKKyAgICAgICAgY2FzZSBUYWlsQ2Fs
bFZhcmFyZ3M6CisgICAgICAgIGNhc2UgVGFpbENhbGxWYXJhcmdzSW5saW5lZENhbGxlcjoKKyAg
ICAgICAgY2FzZSBUYWlsQ2FsbEZvcndhcmRWYXJhcmdzOgorICAgICAgICBjYXNlIFRhaWxDYWxs
Rm9yd2FyZFZhcmFyZ3NJbmxpbmVkQ2FsbGVyOgogICAgICAgICBjYXNlIENvbnN0cnVjdFZhcmFy
Z3M6CiAgICAgICAgIGNhc2UgQ29uc3RydWN0Rm9yd2FyZFZhcmFyZ3M6CiAgICAgICAgICAgICBj
b21waWxlQ2FsbE9yQ29uc3RydWN0VmFyYXJncygpOwpAQCAtNDQwMCw2ICs0NDEyLDQxIEBAIHBy
aXZhdGU6CiAgICAgICAgIAogICAgICAgICBzZXRKU1ZhbHVlKGNhbGwpOwogICAgIH0KKworICAg
IHZvaWQgY29tcGlsZVRhaWxDYWxsKCkKKyAgICB7CisgICAgICAgIGludCBudW1BcmdzID0gbV9u
b2RlLT5udW1DaGlsZHJlbigpIC0gMTsKKyAgICAgICAgRXhpdEFyZ3VtZW50TGlzdCBleGl0QXJn
dW1lbnRzOworICAgICAgICBleGl0QXJndW1lbnRzLnJlc2VydmVDYXBhY2l0eShudW1BcmdzICsg
Nik7CisKKyAgICAgICAgdW5zaWduZWQgc3RhY2ttYXBJRCA9IG1fc3RhY2ttYXBJRHMrKzsKKyAg
ICAgICAgZXhpdEFyZ3VtZW50cy5hcHBlbmQobG93SlNWYWx1ZShtX2dyYXBoLnZhckFyZ0NoaWxk
KG1fbm9kZSwgMCkpKTsKKyAgICAgICAgZXhpdEFyZ3VtZW50cy5hcHBlbmQobV90YWdUeXBlTnVt
YmVyKTsKKworICAgICAgICBWZWN0b3I8RXhpdFZhbHVlPiBjYWxsQXJndW1lbnRzKG51bUFyZ3Mp
OworCisgICAgICAgIGJvb2wgbmVlZHNUYWdUeXBlTnVtYmVyIHsgZmFsc2UgfTsKKyAgICAgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBudW1BcmdzOyArK2kpIHsKKyAgICAgICAgICAgIGNhbGxBcmd1
bWVudHNbaV0gPQorICAgICAgICAgICAgICAgIGV4aXRWYWx1ZUZvclRhaWxDYWxsKGV4aXRBcmd1
bWVudHMsIG1fZ3JhcGgudmFyQXJnQ2hpbGQobV9ub2RlLCAxICsgaSkubm9kZSgpKTsKKyAgICAg
ICAgICAgIGlmIChjYWxsQXJndW1lbnRzW2ldLmRhdGFGb3JtYXQoKSA9PSBEYXRhRm9ybWF0SW50
MzIpCisgICAgICAgICAgICAgICAgbmVlZHNUYWdUeXBlTnVtYmVyID0gdHJ1ZTsKKyAgICAgICAg
fQorCisgICAgICAgIEpTVGFpbENhbGwgdGFpbENhbGwoc3RhY2ttYXBJRCwgbV9ub2RlLCBXVEY6
Om1vdmUoY2FsbEFyZ3VtZW50cykpOworCisgICAgICAgIGV4aXRBcmd1bWVudHMuaW5zZXJ0KDAs
IG1fb3V0LmNvbnN0SW50MzIobmVlZHNUYWdUeXBlTnVtYmVyID8gMiA6IDEpKTsKKyAgICAgICAg
ZXhpdEFyZ3VtZW50cy5pbnNlcnQoMCwgY29uc3ROdWxsKG1fb3V0LnJlZjgpKTsKKyAgICAgICAg
ZXhpdEFyZ3VtZW50cy5pbnNlcnQoMCwgbV9vdXQuY29uc3RJbnQzMih0YWlsQ2FsbC5lc3RpbWF0
ZWRTaXplKCkpKTsKKyAgICAgICAgZXhpdEFyZ3VtZW50cy5pbnNlcnQoMCwgbV9vdXQuY29uc3RJ
bnQ2NChzdGFja21hcElEKSk7CisKKyAgICAgICAgTFZhbHVlIGNhbGwgPQorICAgICAgICAgICAg
bV9vdXQuY2FsbChtX291dC5wYXRjaHBvaW50Vm9pZEludHJpbnNpYygpLCBleGl0QXJndW1lbnRz
KTsKKyAgICAgICAgc2V0SW5zdHJ1Y3Rpb25DYWxsaW5nQ29udmVudGlvbihjYWxsLCBMTFZNQW55
UmVnQ2FsbENvbnYpOworICAgICAgICBtX291dC51bnJlYWNoYWJsZSgpOworCisgICAgICAgIG1f
ZnRsU3RhdGUuanNUYWlsQ2FsbHMuYXBwZW5kKHRhaWxDYWxsKTsKKyAgICB9CiAgICAgCiAgICAg
dm9pZCBjb21waWxlQ2FsbE9yQ29uc3RydWN0VmFyYXJncygpCiAgICAgewpAQCAtNDQxMCwxMCAr
NDQ1NywxNCBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgc3dpdGNoIChtX25vZGUtPm9w
KCkpIHsKICAgICAgICAgY2FzZSBDYWxsVmFyYXJnczoKKyAgICAgICAgY2FzZSBUYWlsQ2FsbFZh
cmFyZ3M6CisgICAgICAgIGNhc2UgVGFpbENhbGxWYXJhcmdzSW5saW5lZENhbGxlcjoKICAgICAg
ICAgY2FzZSBDb25zdHJ1Y3RWYXJhcmdzOgogICAgICAgICAgICAganNBcmd1bWVudHMgPSBsb3dK
U1ZhbHVlKG1fbm9kZS0+Y2hpbGQyKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIGNh
c2UgQ2FsbEZvcndhcmRWYXJhcmdzOgorICAgICAgICBjYXNlIFRhaWxDYWxsRm9yd2FyZFZhcmFy
Z3M6CisgICAgICAgIGNhc2UgVGFpbENhbGxGb3J3YXJkVmFyYXJnc0lubGluZWRDYWxsZXI6CiAg
ICAgICAgIGNhc2UgQ29uc3RydWN0Rm9yd2FyZFZhcmFyZ3M6CiAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgZGVmYXVsdDoKQEAgLTQ0NDAsOCArNDQ5MSwxNiBAQCBwcml2YXRlOgogICAgICAg
ICBzZXRJbnN0cnVjdGlvbkNhbGxpbmdDb252ZW50aW9uKGNhbGwsIExMVk1DQ2FsbENvbnYpOwog
ICAgICAgICAKICAgICAgICAgbV9mdGxTdGF0ZS5qc0NhbGxWYXJhcmdzZXMuYXBwZW5kKEpTQ2Fs
bFZhcmFyZ3Moc3RhY2ttYXBJRCwgbV9ub2RlKSk7Ci0gICAgICAgIAotICAgICAgICBzZXRKU1Zh
bHVlKGNhbGwpOworCisgICAgICAgIHN3aXRjaCAobV9ub2RlLT5vcCgpKSB7CisgICAgICAgIGNh
c2UgVGFpbENhbGxWYXJhcmdzOgorICAgICAgICBjYXNlIFRhaWxDYWxsRm9yd2FyZFZhcmFyZ3M6
CisgICAgICAgICAgICBtX291dC51bnJlYWNoYWJsZSgpOworICAgICAgICAgICAgYnJlYWs7CisK
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIHNldEpTVmFsdWUoY2FsbCk7CisgICAgICAg
IH0KICAgICB9CiAgICAgCiAgICAgdm9pZCBjb21waWxlTG9hZFZhcmFyZ3MoKQpAQCAtODI1Niw3
ICs4MzE1LDE0IEBAIHByaXZhdGU6CiAgICAgfQogICAgIHZvaWQgY2FsbFByZWZsaWdodCgpCiAg
ICAgewotICAgICAgICBjYWxsUHJlZmxpZ2h0KG1fbm9kZS0+b3JpZ2luLnNlbWFudGljKTsKKyAg
ICAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luID0gbV9ub2RlLT5vcmlnaW4uc2VtYW50aWM7CisK
KyAgICAgICAgaWYgKG1fbm9kZS0+b3AoKSA9PSBUYWlsQ2FsbElubGluZWRDYWxsZXIKKyAgICAg
ICAgICAgIHx8IG1fbm9kZS0+b3AoKSA9PSBUYWlsQ2FsbFZhcmFyZ3NJbmxpbmVkQ2FsbGVyCisg
ICAgICAgICAgICB8fCBtX25vZGUtPm9wKCkgPT0gVGFpbENhbGxGb3J3YXJkVmFyYXJnc0lubGlu
ZWRDYWxsZXIpCisgICAgICAgICAgICBjb2RlT3JpZ2luID0qY29kZU9yaWdpbi5pbmxpbmVDYWxs
RnJhbWUtPmdldENhbGxlclNraXBwaW5nRGVhZEZyYW1lcygpOworCisgICAgICAgIGNhbGxQcmVm
bGlnaHQoY29kZU9yaWdpbik7CiAgICAgfQogICAgIAogICAgIHZvaWQgY2FsbENoZWNrKCkKQEAg
LTg1MjcsMTMgKzg1OTMsNDYgQEAgcHJpdmF0ZToKICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgs
IG1fbm9kZSwgdG9DU3RyaW5nKCJDYW5ub3QgZmluZCB2YWx1ZSBmb3Igbm9kZTogIiwgbm9kZSku
ZGF0YSgpKTsKICAgICAgICAgcmV0dXJuIEV4aXRWYWx1ZTo6ZGVhZCgpOwogICAgIH0KLSAgICAK
KwogICAgIEV4aXRWYWx1ZSBleGl0QXJndW1lbnQoRXhpdEFyZ3VtZW50TGlzdCYgYXJndW1lbnRz
LCBEYXRhRm9ybWF0IGZvcm1hdCwgTFZhbHVlIHZhbHVlKQogICAgIHsKICAgICAgICAgRXhpdFZh
bHVlIHJlc3VsdCA9IEV4aXRWYWx1ZTo6ZXhpdEFyZ3VtZW50KEV4aXRBcmd1bWVudChmb3JtYXQs
IGFyZ3VtZW50cy5zaXplKCkpKTsKICAgICAgICAgYXJndW1lbnRzLmFwcGVuZCh2YWx1ZSk7CiAg
ICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgfQorCisgICAgRXhpdFZhbHVlIGV4aXRWYWx1ZUZv
clRhaWxDYWxsKEV4aXRBcmd1bWVudExpc3QmIGFyZ3VtZW50cywgTm9kZSogbm9kZSkKKyAgICB7
CisgICAgICAgIEFTU0VSVChub2RlLT5zaG91bGRHZW5lcmF0ZSgpKTsKKyAgICAgICAgQVNTRVJU
KG5vZGUtPmhhc1Jlc3VsdCgpKTsKKworICAgICAgICBzd2l0Y2ggKG5vZGUtPm9wKCkpIHsKKyAg
ICAgICAgY2FzZSBKU0NvbnN0YW50OgorICAgICAgICBjYXNlIEludDUyQ29uc3RhbnQ6CisgICAg
ICAgIGNhc2UgRG91YmxlQ29uc3RhbnQ6CisgICAgICAgICAgICByZXR1cm4gRXhpdFZhbHVlOjpj
b25zdGFudChub2RlLT5hc0pTVmFsdWUoKSk7CisKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICB9CisKKyAgICAgICAgTG93ZXJlZE5vZGVWYWx1ZSB2YWx1ZSA9
IG1fanNWYWx1ZVZhbHVlcy5nZXQobm9kZSk7CisgICAgICAgIGlmIChpc1ZhbGlkKHZhbHVlKSkK
KyAgICAgICAgICAgIHJldHVybiBleGl0QXJndW1lbnQoYXJndW1lbnRzLCBEYXRhRm9ybWF0SlMs
IHZhbHVlLnZhbHVlKCkpOworCisgICAgICAgIHZhbHVlID0gbV9pbnQzMlZhbHVlcy5nZXQobm9k
ZSk7CisgICAgICAgIGlmIChpc1ZhbGlkKHZhbHVlKSkKKyAgICAgICAgICAgIHJldHVybiBleGl0
QXJndW1lbnQoYXJndW1lbnRzLCBEYXRhRm9ybWF0SW50MzIsIHZhbHVlLnZhbHVlKCkpOworCisg
ICAgICAgIHZhbHVlID0gbV9ib29sZWFuVmFsdWVzLmdldChub2RlKTsKKyAgICAgICAgaWYgKGlz
VmFsaWQodmFsdWUpKSB7CisgICAgICAgICAgICBMVmFsdWUgdmFsdWVUb1Bhc3MgPSBtX291dC56
ZXJvRXh0KHZhbHVlLnZhbHVlKCksIG1fb3V0LmludDMyKTsKKyAgICAgICAgICAgIHJldHVybiBl
eGl0QXJndW1lbnQoYXJndW1lbnRzLCBEYXRhRm9ybWF0Qm9vbGVhbiwgdmFsdWVUb1Bhc3MpOwor
ICAgICAgICB9CisKKyAgICAgICAgLy8gRG91YmxlcyBhbmQgSW50NTIgaGF2ZSBiZWVuIGNvbnZl
cnRlZCBieSBWYWx1ZVJlcCgpCisgICAgICAgIERGR19DUkFTSChtX2dyYXBoLCBtX25vZGUsIHRv
Q1N0cmluZygiQ2Fubm90IGZpbmQgdmFsdWUgZm9yIG5vZGU6ICIsIG5vZGUpLmRhdGEoKSk7Cisg
ICAgfQogICAgIAogICAgIGJvb2wgZG9lc0tpbGwoRWRnZSBlZGdlKQogICAgIHsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0YXRlLmgJKHJldmlzaW9uIDE5MDI4NSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNiAr
MzcsNyBAQAogI2luY2x1ZGUgIkZUTEpJVEZpbmFsaXplci5oIgogI2luY2x1ZGUgIkZUTEpTQ2Fs
bC5oIgogI2luY2x1ZGUgIkZUTEpTQ2FsbFZhcmFyZ3MuaCIKKyNpbmNsdWRlICJGVExKU1RhaWxD
YWxsLmgiCiAjaW5jbHVkZSAiRlRMU3RhY2tNYXBzLmgiCiAjaW5jbHVkZSAiRlRMU3RhdGUuaCIK
ICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KQEAgLTc5LDYgKzgwLDcgQEAgcHVibGljOgog
ICAgIFNlZ21lbnRlZFZlY3RvcjxDaGVja0luRGVzY3JpcHRvcj4gY2hlY2tJbnM7CiAgICAgVmVj
dG9yPEpTQ2FsbD4ganNDYWxsczsKICAgICBWZWN0b3I8SlNDYWxsVmFyYXJncz4ganNDYWxsVmFy
YXJnc2VzOworICAgIFZlY3RvcjxKU1RhaWxDYWxsPiBqc1RhaWxDYWxsczsKICAgICBWZWN0b3I8
Q1N0cmluZz4gY29kZVNlY3Rpb25OYW1lczsKICAgICBWZWN0b3I8Q1N0cmluZz4gZGF0YVNlY3Rp
b25OYW1lczsKICAgICB2b2lkKiB1bndpbmREYXRhU2VjdGlvbjsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0Fzc2VtYmx5SGVscGVycy5jcHAJKHJldmlzaW9uIDE5MDI4NSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQXNzZW1ibHlIZWxwZXJzLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzM4LDcgKzMzOCw3IEBAIEFzc2VtYmx5SGVscGVyczo6SnVtcCBBc3NlbWJs
eUhlbHBlcnM6OmUKICAgICAKICAgICBpZiAod2lkdGggPT0gTm9ybWFsSnVtcFdpZHRoKQogICAg
ICAgICByZXR1cm4gcmVzdWx0OwotICAgIAorCiAgICAgUGF0Y2hhYmxlSnVtcCByZWFsSnVtcCA9
IHBhdGNoYWJsZUp1bXAoKTsKICAgICByZXN1bHQubGluayh0aGlzKTsKICAgICAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZURhdGEuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVEYXRhLmgJKHJl
dmlzaW9uIDE5MDI4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1
ZmZsZURhdGEuaAkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksNyBAQCBzdHJ1Y3QgQ2FsbEZy
YW1lU2h1ZmZsZURhdGEgewogICAgIFZlY3RvcjxWYWx1ZVJlY292ZXJ5PiBhcmdzOwogI2lmIFVT
RShKU1ZBTFVFNjQpCiAgICAgUmVnaXN0ZXJNYXA8VmFsdWVSZWNvdmVyeT4gcmVnaXN0ZXJzOwor
ICAgIEdQUlJlZyB0YWdUeXBlTnVtYmVyIHsgSW52YWxpZEdQUlJlZyB9OwogCiAgICAgdm9pZCBz
ZXR1cENhbGxlZVNhdmVSZWdpc3RlcnMoQ29kZUJsb2NrKik7CiAjZW5kaWYKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXI2NC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVmZmxlcjY0LmNwcAkocmV2
aXNpb24gMTkwMjg1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DYWxsRnJhbWVTaHVm
ZmxlcjY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODcsOSArODcsMTUgQEAgdm9pZCBDYWxsRnJh
bWVTaHVmZmxlcjo6ZW1pdEJveChDYWNoZWRSZQogICAgICAgICAgICAgbV9qaXQuemVyb0V4dGVu
ZDMyVG9QdHIoCiAgICAgICAgICAgICAgICAgY2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKS5ncHIo
KSwKICAgICAgICAgICAgICAgICBjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLmdwcigpKTsKLSAg
ICAgICAgICAgIC8vIFdlIGhhdmUgdG8gZG8gdGhpcyB0aGUgaGFyZCB3YXkuCi0gICAgICAgICAg
ICBtX2ppdC5vcjY0KE1hY3JvQXNzZW1ibGVyOjpUcnVzdGVkSW1tNjQoVGFnVHlwZU51bWJlciks
Ci0gICAgICAgICAgICAgICAgY2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKS5ncHIoKSk7CisgICAg
ICAgICAgICBtX2xvY2tlZFJlZ2lzdGVycy5zZXQoY2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKS5n
cHIoKSk7CisgICAgICAgICAgICBpZiAodHJ5QWNxdWlyZVRhZ1R5cGVOdW1iZXIoKSkKKyAgICAg
ICAgICAgICAgICBtX2ppdC5vcjY0KG1fdGFnVHlwZU51bWJlciwgY2FjaGVkUmVjb3ZlcnkucmVj
b3ZlcnkoKS5ncHIoKSk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICAvLyBX
ZSBoYXZlIHRvIGRvIHRoaXMgdGhlIGhhcmQgd2F5CisgICAgICAgICAgICAgICAgbV9qaXQub3I2
NChNYWNyb0Fzc2VtYmxlcjo6VHJ1c3RlZEltbTY0KFRhZ1R5cGVOdW1iZXIpLAorICAgICAgICAg
ICAgICAgICAgICBjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLmdwcigpKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIG1fbG9ja2VkUmVnaXN0ZXJzLmNsZWFyKGNhY2hlZFJlY292ZXJ5LnJl
Y292ZXJ5KCkuZ3ByKCkpOwogICAgICAgICAgICAgY2FjaGVkUmVjb3Zlcnkuc2V0UmVjb3Zlcnko
CiAgICAgICAgICAgICAgICAgVmFsdWVSZWNvdmVyeTo6aW5HUFIoY2FjaGVkUmVjb3ZlcnkucmVj
b3ZlcnkoKS5ncHIoKSwgRGF0YUZvcm1hdEpTKSk7CiAgICAgICAgICAgICBpZiAodmVyYm9zZSkK
QEAgLTE0MSw3ICsxNDcsMTIgQEAgdm9pZCBDYWxsRnJhbWVTaHVmZmxlcjo6ZW1pdEJveChDYWNo
ZWRSZQogICAgICAgICAgICAgQVNTRVJUKHJlc3VsdEdQUiAhPSBJbnZhbGlkR1BSUmVnKTsKICAg
ICAgICAgICAgIG1faml0LnB1cmlmeU5hTihjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLmZwcigp
KTsKICAgICAgICAgICAgIG1faml0Lm1vdmVEb3VibGVUbzY0KGNhY2hlZFJlY292ZXJ5LnJlY292
ZXJ5KCkuZnByKCksIHJlc3VsdEdQUik7Ci0gICAgICAgICAgICBtX2ppdC5zdWI2NChNYWNyb0Fz
c2VtYmxlcjo6VHJ1c3RlZEltbTY0KFRhZ1R5cGVOdW1iZXIpLCByZXN1bHRHUFIpOworICAgICAg
ICAgICAgbV9sb2NrZWRSZWdpc3RlcnMuc2V0KHJlc3VsdEdQUik7CisgICAgICAgICAgICBpZiAo
dHJ5QWNxdWlyZVRhZ1R5cGVOdW1iZXIoKSkKKyAgICAgICAgICAgICAgICBtX2ppdC5zdWI2NCht
X3RhZ1R5cGVOdW1iZXIsIHJlc3VsdEdQUik7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgbV9qaXQuc3ViNjQoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJbW02NChUYWdUeXBlTnVt
YmVyKSwgcmVzdWx0R1BSKTsKKyAgICAgICAgICAgIG1fbG9ja2VkUmVnaXN0ZXJzLmNsZWFyKHJl
c3VsdEdQUik7CiAgICAgICAgICAgICB1cGRhdGVSZWNvdmVyeShjYWNoZWRSZWNvdmVyeSwgVmFs
dWVSZWNvdmVyeTo6aW5HUFIocmVzdWx0R1BSLCBEYXRhRm9ybWF0SlMpKTsKICAgICAgICAgICAg
IGlmICh2ZXJib3NlKQogICAgICAgICAgICAgICAgIGRhdGFMb2coIiBpbnRvICIsIGNhY2hlZFJl
Y292ZXJ5LnJlY292ZXJ5KCksICJcbiIpOwpAQCAtMzM3LDYgKzM0OCwyMSBAQCB2b2lkIENhbGxG
cmFtZVNodWZmbGVyOjplbWl0RGlzcGxhY2UoQ2FjCiAKICAgICBBU1NFUlQobV9yZWdpc3RlcnNb
d2FudGVkUmVnXSA9PSAmY2FjaGVkUmVjb3ZlcnkpOwogfQorICAgIAorYm9vbCBDYWxsRnJhbWVT
aHVmZmxlcjo6dHJ5QWNxdWlyZVRhZ1R5cGVOdW1iZXIoKQoreworICAgIGlmIChtX3RhZ1R5cGVO
dW1iZXIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBtX3Rh
Z1R5cGVOdW1iZXIgPSBnZXRGcmVlR1BSKCk7CisKKyAgICBpZiAobV90YWdUeXBlTnVtYmVyID09
IEludmFsaWRHUFJSZWcpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIG1fbG9ja2VkUmVn
aXN0ZXJzLnNldChtX3RhZ1R5cGVOdW1iZXIpOworICAgIG1faml0Lm1vdmUoTWFjcm9Bc3NlbWJs
ZXI6OlRydXN0ZWRJbW02NChUYWdUeXBlTnVtYmVyKSwgbV90YWdUeXBlTnVtYmVyKTsKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXIuY3BwCShyZXZpc2lvbiAxOTAy
ODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNzEsNiArNzEsMTAgQEAgQ2FsbEZyYW1lU2h1ZmZsZXI6OkNhbGxG
cmFtZVNodWZmbGVyKENDYQogICAgICAgICBlbHNlCiAgICAgICAgICAgICBhZGROZXcocmVnLmZw
cigpLCBkYXRhLnJlZ2lzdGVyc1tyZWddKTsKICAgICB9CisKKyAgICBtX3RhZ1R5cGVOdW1iZXIg
PSBkYXRhLnRhZ1R5cGVOdW1iZXI7CisgICAgaWYgKG1fdGFnVHlwZU51bWJlciAhPSBJbnZhbGlk
R1BSUmVnKQorICAgICAgICBsb2NrR1BSKG1fdGFnVHlwZU51bWJlcik7CiAjZW5kaWYKIH0KIApA
QCAtODAsMTIgKzg0LDEyIEBAIHZvaWQgQ2FsbEZyYW1lU2h1ZmZsZXI6OmR1bXAoUHJpbnRTdHJl
YW0KICAgICBzdGF0aWMgY29uc3QgY2hhciogZGFuZ2VyRGVsaW1pdGVyICAgICAgID0gIiBYLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVggIjsKICAgICBzdGF0aWMgY29uc3QgY2hhciog
ZGFuZ2VyQm91bmRzRGVsaW1pdGVyID0gIiBYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhY
WFggIjsKICAgICBzdGF0aWMgY29uc3QgY2hhciogZW1wdHlTcGFjZSAgICAgICAgICAgID0gIiAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjsKLSAgICBBU1NFUlQobV9hbGlnbmVk
TmV3RnJhbWVTaXplIDw9IG51bUxvY2FscygpKTsKICAgICBvdXQucHJpbnQoIiAgICAgICAgICAi
KTsKICAgICBvdXQucHJpbnQoIiAgICAgICAgICAgT2xkIGZyYW1lICAgICAgICAgICAgICAgIik7
CiAgICAgb3V0LnByaW50KCIgICAgICAgICAgIE5ldyBmcmFtZSAgICAgICAgICAgICAgICIpOwog
ICAgIG91dC5wcmludCgiXG4iKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG1fYWxpZ25lZE9s
ZEZyYW1lU2l6ZSArIG51bUxvY2FscygpICsgMzsgKytpKSB7CisgICAgaW50IHRvdGFsU2l6ZSA9
IG1fYWxpZ25lZE9sZEZyYW1lU2l6ZSArIHN0ZDo6bWF4KG51bUxvY2FscygpLCBtX2FsaWduZWRO
ZXdGcmFtZVNpemUpICsgMzsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IHRvdGFsU2l6ZTsgKytp
KSB7CiAgICAgICAgIFZpcnR1YWxSZWdpc3RlciBvbGQgeyBtX2FsaWduZWRPbGRGcmFtZVNpemUg
LSBpIC0gMSB9OwogICAgICAgICBWaXJ0dWFsUmVnaXN0ZXIgbmV3UmVnIHsgb2xkICsgbV9mcmFt
ZURlbHRhIH07CiAKQEAgLTIwNCw2ICsyMDgsMTAgQEAgdm9pZCBDYWxsRnJhbWVTaHVmZmxlcjo6
ZHVtcChQcmludFN0cmVhbQogICAgICAgICBvdXQucHJpbnQoIiAgIE9sZCBmcmFtZSBvZmZzZXQg
aXMgIiwgbV9vbGRGcmFtZU9mZnNldCwgIlxuIik7CiAgICAgaWYgKG1fbmV3RnJhbWVPZmZzZXQp
CiAgICAgICAgIG91dC5wcmludCgiICAgTmV3IGZyYW1lIG9mZnNldCBpcyAiLCBtX25ld0ZyYW1l
T2Zmc2V0LCAiXG4iKTsKKyNpZiBVU0UoSlNWQUxVRTY0KQorICAgIGlmIChtX3RhZ1R5cGVOdW1i
ZXIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgb3V0LnByaW50KCIgICBUYWdUeXBlTnVtYmVy
IGlzIGN1cnJlbnRseSBpbiAiLCBtX3RhZ1R5cGVOdW1iZXIsICJcbiIpOworI2VuZGlmCiB9CiAK
IENhY2hlZFJlY292ZXJ5KiBDYWxsRnJhbWVTaHVmZmxlcjo6Z2V0Q2FjaGVkUmVjb3ZlcnkoVmFs
dWVSZWNvdmVyeSByZWNvdmVyeSkKQEAgLTI0NywxNyArMjU1LDI2IEBAIHZvaWQgQ2FsbEZyYW1l
U2h1ZmZsZXI6OnNwaWxsKENhY2hlZFJlY28KICAgICBBU1NFUlQoY2FjaGVkUmVjb3ZlcnkucmVj
b3ZlcnkoKS5pc0luUmVnaXN0ZXJzKCkpOwogCiAgICAgVmlydHVhbFJlZ2lzdGVyIHNwaWxsU2xv
dCB7IDAgfTsKLSAgICBmb3IgKFZpcnR1YWxSZWdpc3RlciBzbG90ID0gZmlyc3RPbGQoKTsgc2xv
dCA8PSBsYXN0T2xkKCk7IHNsb3QgLT0gMSkgewotICAgICAgICBBU1NFUlQoc2xvdCA8IG5ld0Fz
T2xkKGZpcnN0TmV3KCkpKTsKKyAgICBmb3IgKFZpcnR1YWxSZWdpc3RlciBzbG90ID0gZmlyc3RP
bGQoKTsgc2xvdCA8PSBsYXN0T2xkKCk7IHNsb3QgKz0gMSkgeworICAgICAgICBpZiAoc2xvdCA+
PSBuZXdBc09sZChmaXJzdE5ldygpKSkKKyAgICAgICAgICAgIGJyZWFrOworCiAgICAgICAgIGlm
IChnZXRPbGQoc2xvdCkpCiAgICAgICAgICAgICBjb250aW51ZTsKIAogICAgICAgICBzcGlsbFNs
b3QgPSBzbG90OwogICAgICAgICBicmVhazsKICAgICB9Ci0gICAgLy8gV2UgbXVzdCBoYXZlIGVu
b3VnaCBzbG90cyB0byBiZSBhYmxlIHRvIGZpdCB0aGUgd2hvbGUKLSAgICAvLyBjYWxsZWUncyBm
cmFtZSBmb3IgdGhlIHNsb3cgcGF0aC4KLSAgICBSRUxFQVNFX0FTU0VSVChzcGlsbFNsb3QuaXNM
b2NhbCgpKTsKKyAgICAvLyBXZSBtdXN0IGhhdmUgZW5vdWdoIHNsb3RzIHRvIGJlIGFibGUgdG8g
Zml0IHRoZSB3aG9sZSBjYWxsZWUncworICAgIC8vIGZyYW1lIGZvciB0aGUgc2xvdyBwYXRoIC0g
dW5sZXNzIHdlIGFyZSBpbiB0aGUgRlRMLiBJbiB0aGF0CisgICAgLy8gY2FzZSwgd2UgYXJlIGFs
bG93ZWQgdG8gZXh0ZW5kIHRoZSBmcmFtZSAqb25jZSosIHNpbmNlIHdlIGFyZQorICAgIC8vIGd1
YXJhbnRlZWQgdG8gaGF2ZSBlbm91Z2ggYXZhaWxhYmxlIHNwYWNlIGZvciB0aGF0LgorICAgIGlm
IChzcGlsbFNsb3QgPj0gbmV3QXNPbGQoZmlyc3ROZXcoKSkgfHwgIXNwaWxsU2xvdC5pc0xvY2Fs
KCkpIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQoIW1fZGlkRXh0ZW5kRnJhbWUpOworICAgICAg
ICBleHRlbmRGcmFtZUlmTmVlZGVkKCk7CisgICAgICAgIHNwaWxsKGNhY2hlZFJlY292ZXJ5KTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KIAogICAgIGlmICh2ZXJib3NlKQogICAgICAgICBkYXRh
TG9nKCIgICAqIFNwaWxsaW5nICIsIGNhY2hlZFJlY292ZXJ5LnJlY292ZXJ5KCksICIgaW50byAi
LCBzcGlsbFNsb3QsICJcbiIpOwpAQCAtMjg2LDYgKzMwMywzOCBAQCB2b2lkIENhbGxGcmFtZVNo
dWZmbGVyOjplbWl0RGVsdGFDaGVjaygpCiAgICAgICAgIGRhdGFMb2coIiAgU2tpcHBpbmcgdGhl
IGZwLXNwIGRlbHRhIGNoZWNrIHNpbmNlIHRoZXJlIGlzIHRvbyBtdWNoIHByZXNzdXJlIik7CiB9
CiAKK3ZvaWQgQ2FsbEZyYW1lU2h1ZmZsZXI6OmV4dGVuZEZyYW1lSWZOZWVkZWQoKQoreworICAg
IEFTU0VSVCghbV9kaWRFeHRlbmRGcmFtZSk7CisgICAgQVNTRVJUKCFpc1VuZGVjaWRlZCgpKTsK
KworICAgIFZpcnR1YWxSZWdpc3RlciBmaXJzdFJlYWQgeyBmaXJzdE9sZCgpIH07CisgICAgZm9y
ICg7IGZpcnN0UmVhZCA8PSB2aXJ0dWFsUmVnaXN0ZXJGb3JMb2NhbCgwKTsgZmlyc3RSZWFkICs9
IDEpIHsKKyAgICAgICAgaWYgKGdldE9sZChmaXJzdFJlYWQpKQorICAgICAgICAgICAgYnJlYWs7
CisgICAgfQorICAgIHNpemVfdCBhdmFpbGFibGVTaXplID0gc3RhdGljX2Nhc3Q8c2l6ZV90Pihm
aXJzdFJlYWQub2Zmc2V0KCkgLSBmaXJzdE9sZCgpLm9mZnNldCgpKTsKKyAgICBzaXplX3Qgd2Fu
dGVkU2l6ZSA9IG1fbmV3RnJhbWUuc2l6ZSgpICsgbV9uZXdGcmFtZU9mZnNldDsKKworICAgIGlm
IChhdmFpbGFibGVTaXplIDwgd2FudGVkU2l6ZSkgeworICAgICAgICBzaXplX3QgZGVsdGEgPSBX
VEY6OnJvdW5kVXBUb011bHRpcGxlT2Yoc3RhY2tBbGlnbm1lbnRSZWdpc3RlcnMoKSwgd2FudGVk
U2l6ZSAtIGF2YWlsYWJsZVNpemUpOworICAgICAgICBtX29sZEZyYW1lLmdyb3cobV9vbGRGcmFt
ZS5zaXplKCkgKyBkZWx0YSk7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgZGVsdGE7
ICsraSkKKyAgICAgICAgICAgIG1fb2xkRnJhbWVbbV9vbGRGcmFtZS5zaXplKCkgLSBpIC0gMV0g
PSBudWxscHRyOworICAgICAgICBtX2ppdC5zdWJQdHIoTWFjcm9Bc3NlbWJsZXI6OlRydXN0ZWRJ
bW0zMihkZWx0YSAqIHNpemVvZihSZWdpc3RlcikpLCBNYWNyb0Fzc2VtYmxlcjo6c3RhY2tQb2lu
dGVyUmVnaXN0ZXIpOworCisgICAgICAgIGlmIChpc1Nsb3dQYXRoKCkpCisgICAgICAgICAgICBt
X2ZyYW1lRGVsdGEgPSBudW1Mb2NhbHMoKSArIEpTU3RhY2s6OkNhbGxlckZyYW1lQW5kUENTaXpl
OworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX29sZEZyYW1lT2Zmc2V0ID0gbnVtTG9jYWxz
KCk7CisKKyAgICAgICAgaWYgKHZlcmJvc2UpCisgICAgICAgICAgICBkYXRhTG9nRigiICBOb3Qg
ZW5vdWdoIHNwYWNlIC0gZXh0ZW5kaW5nIHRoZSBvbGQgZnJhbWUgJXp1IHNsb3RcbiIsIGRlbHRh
KTsKKyAgICB9CisKKyAgICBtX2RpZEV4dGVuZEZyYW1lID0gdHJ1ZTsKK30KKwogdm9pZCBDYWxs
RnJhbWVTaHVmZmxlcjo6cHJlcGFyZUZvclNsb3dQYXRoKCkKIHsKICAgICBBU1NFUlQoaXNVbmRl
Y2lkZWQoKSk7CkBAIC0yOTYsNyArMzQ1LDE1IEBAIHZvaWQgQ2FsbEZyYW1lU2h1ZmZsZXI6OnBy
ZXBhcmVGb3JTbG93UGEKICAgICBtX25ld0ZyYW1lT2Zmc2V0ID0gLUpTU3RhY2s6OkNhbGxlckZy
YW1lQW5kUENTaXplOwogCiAgICAgaWYgKHZlcmJvc2UpCi0gICAgICAgIGRhdGFMb2coIlxuXG5Q
cmVwYXJpbmcgZnJhbWUgZm9yIHNsb3cgcGF0aCBjYWxsOlxuIiwgKnRoaXMpOworICAgICAgICBk
YXRhTG9nKCJcblxuUHJlcGFyaW5nIGZyYW1lIGZvciBzbG93IHBhdGggY2FsbDpcbiIpOworCisg
ICAgLy8gV2hlbiBjb21pbmcgZnJvbSB0aGUgRlRMLCB3ZSBuZWVkIHRvIGV4dGVuZCB0aGUgZnJh
bWUuIEluIG90aGVyCisgICAgLy8gY2FzZXMsIHdlIG1heSBlbmQgdXAgZXh0ZW5kaW5nIHRoZSBm
cmFtZSBpZiB3ZSBwcmV2aW91c2x5CisgICAgLy8gc3BpbGxlZCB0aGluZ3MgKGUuZy4gaW4gcG9s
eW1vcnBoaWMgY2FjaGUpLgorICAgIGV4dGVuZEZyYW1lSWZOZWVkZWQoKTsKKworICAgIGlmICh2
ZXJib3NlKQorICAgICAgICBkYXRhTG9nKCp0aGlzKTsKIAogICAgIHByZXBhcmVBbnkoKTsKIApA
QCAtNjQ2LDYgKzcwMywxMSBAQCB2b2lkIENhbGxGcmFtZVNodWZmbGVyOjpwcmVwYXJlQW55KCkK
ICAgICAgICAgQVNTRVJUX1VOVVNFRCh3cml0ZXNPSywgd3JpdGVzT0spOwogICAgIH0KIAorI2lm
IFVTRShKU1ZBTFVFNjQpCisgICAgaWYgKG1fdGFnVHlwZU51bWJlciAhPSBJbnZhbGlkR1BSUmVn
ICYmIG1fbmV3UmVnaXN0ZXJzW21fdGFnVHlwZU51bWJlcl0pCisgICAgICAgIHJlbGVhc2VHUFIo
bV90YWdUeXBlTnVtYmVyKTsKKyNlbmRpZgorCiAgICAgLy8gSGFuZGxlIDIpIGJ5IGxvYWRpbmcg
YWxsIHJlZ2lzdGVycy4gV2UgZG9uJ3QgaGF2ZSB0byBkbyBhbnkKICAgICAvLyB3cml0ZXMsIHNp
bmNlIHRoZXkgaGF2ZSBiZWVuIHRha2VuIGNhcmUgb2YgYWJvdmUuCiAgICAgaWYgKHZlcmJvc2Up
CkBAIC02NjAsNiArNzIyLDExIEBAIHZvaWQgQ2FsbEZyYW1lU2h1ZmZsZXI6OnByZXBhcmVBbnko
KQogICAgICAgICBBU1NFUlQoY2FjaGVkUmVjb3ZlcnktPnRhcmdldHMoKS5pc0VtcHR5KCkpOwog
ICAgIH0KIAorI2lmIFVTRShKU1ZBTFVFNjQpCisgICAgaWYgKG1fdGFnVHlwZU51bWJlciAhPSBJ
bnZhbGlkR1BSUmVnKQorICAgICAgICByZWxlYXNlR1BSKG1fdGFnVHlwZU51bWJlcik7CisjZW5k
aWYKKwogICAgIC8vIEF0IHRoaXMgcG9pbnQsIHdlIGhhdmUgcmVhZCBldmVyeXRoaW5nIHdlIGNh
cmVkIGFib3V0IGZyb20gdGhlCiAgICAgLy8gc3RhY2ssIGFuZCB3cml0dGVuIGV2ZXJ5dGhpbmcg
d2UgaGFkIHRvIHRvIHRoZSBzdGFjay4KICAgICBpZiAodmVyYm9zZSkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0NhbGxGcmFtZVNodWZmbGVyLmgJKHJldmlzaW9uIDE5MDI4
NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ2FsbEZyYW1lU2h1ZmZsZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtNzMsNiArNzMsMjEgQEAgcHVibGljOgogICAgICAgICBtX2xvY2tlZFJl
Z2lzdGVycy5jbGVhcihncHIpOwogICAgIH0KIAorICAgIHZvaWQgcmVzdG9yZUdQUihHUFJSZWcg
Z3ByKQorICAgIHsKKyAgICAgICAgaWYgKCFtX25ld1JlZ2lzdGVyc1tncHJdKQorICAgICAgICAg
ICAgcmV0dXJuOworCisgICAgICAgIGVuc3VyZUdQUigpOworI2lmIFVTRShKU1ZBTFVFMzJfNjQp
CisgICAgICAgIEdQUlJlZyB0ZW1wR1BSIHsgZ2V0RnJlZUdQUigpIH07CisgICAgICAgIGxvY2tH
UFIodGVtcEdQUik7CisgICAgICAgIGVuc3VyZUdQUigpOworICAgICAgICByZWxlYXNlR1BSKHRl
bXBHUFIpOworI2VuZGlmCisgICAgICAgIGVtaXREaXNwbGFjZSgqbV9uZXdSZWdpc3RlcnNbZ3By
XSk7CisgICAgfQorCiAgICAgLy8gWW91IGNhbiBvbmx5IHRha2UgYSBzbmFwc2hvdCBpZiB0aGUg
cmVjb3ZlcnkgaGFzIG5vdCBzdGFydGVkCiAgICAgLy8geWV0LiBUaGUgb25seSBvcGVyYXRpb25z
IHRoYXQgYXJlIHZhbGlkIGJlZm9yZSB0YWtpbmcgYQogICAgIC8vIHNuYXBzaG90IGFyZSBsb2Nr
R1BSKCksIGFjcXVpcmVHUFIoKSBhbmQgcmVsZWFzZUdQUigpLgpAQCAtMzA5LDYgKzMyNCwxMCBA
QCBwcml2YXRlOgogICAgICAgICByZXR1cm4gcmVnID49IGZpcnN0T2xkKCkgJiYgcmVnIDw9IGxh
c3RPbGQoKTsKICAgICB9CiAKKyAgICBib29sIG1fZGlkRXh0ZW5kRnJhbWUgeyBmYWxzZSB9Owor
CisgICAgdm9pZCBleHRlbmRGcmFtZUlmTmVlZGVkKCk7CisKICAgICAvLyBUaGlzIHN0b3Jlcywg
Zm9yIGVhY2ggc2xvdCBpbiB0aGUgbmV3IGZyYW1lLCBpbmZvcm1hdGlvbiBhYm91dAogICAgIC8v
IHRoZSByZWNvdmVyeSBmb3IgdGhlIHZhbHVlIHRoYXQgc2hvdWxkIGV2ZW50dWFsbHkgZ28gaW50
byB0aGF0CiAgICAgLy8gc2xvdC4KQEAgLTM4NSwxMyArNDA0LDE5IEBAIHByaXZhdGU6CiAgICAg
Ly8gV2UgYWxzbyB1c2UgdGhpcyB0byBsb2NrIHJlZ2lzdGVycyB0ZW1wb3JhcmlseSwgZm9yIGlu
c3RhbmNlIHRvCiAgICAgLy8gZW5zdXJlIHRoYXQgd2UgaGF2ZSBhdCBsZWFzdCAyIGF2YWlsYWJs
ZSByZWdpc3RlcnMgZm9yIGxvYWRpbmcKICAgICAvLyBhIHBhaXIgb24gMzJiaXRzLgotICAgIFJl
Z2lzdGVyU2V0IG1fbG9ja2VkUmVnaXN0ZXJzOworICAgIG11dGFibGUgUmVnaXN0ZXJTZXQgbV9s
b2NrZWRSZWdpc3RlcnM7CiAKICAgICAvLyBUaGlzIHN0b3JlcyB0aGUgY3VycmVudCByZWNvdmVy
aWVzIHByZXNlbnQgaW4gcmVnaXN0ZXJzLiBBIG51bGwKICAgICAvLyBDYWNoZWRSZWNvdmVyeSBt
ZWFucyB3ZSBjYW4gdHJhc2ggdGhlIGN1cnJlbnQgdmFsdWUgYXMgd2UgZG9uJ3QKICAgICAvLyBj
YXJlIGFib3V0IGl0LiAKICAgICBSZWdpc3Rlck1hcDxDYWNoZWRSZWNvdmVyeSo+IG1fcmVnaXN0
ZXJzOwogCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICBtdXRhYmxlIEdQUlJlZyBtX3RhZ1R5cGVO
dW1iZXI7CisKKyAgICBib29sIHRyeUFjcXVpcmVUYWdUeXBlTnVtYmVyKCk7CisjZW5kaWYKKwog
ICAgIC8vIFRoaXMgc3RvcmVzLCBmb3IgZWFjaCByZWdpc3RlciwgaW5mb3JtYXRpb24gYWJvdXQg
dGhlIHJlY292ZXJ5CiAgICAgLy8gZm9yIHRoZSB2YWx1ZSB0aGF0IHNob3VsZCBldmVudHVhbGx5
IGdvIGludG8gdGhhdCByZWdpc3Rlci4gVGhlCiAgICAgLy8gb25seSByZWdpc3RlcnMgdGhhdCBo
YXZlIGEgdGFyZ2V0IHJlY292ZXJ5IHdpbGwgYmUgY2FsbGVlLXNhdmUKQEAgLTQyMSw5ICs0NDYs
MjYgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICAgICAgbm9uVGVtcCA9IHJlZzsKICAgICAg
ICAgICAgIH0KICAgICAgICAgfQorCisjaWYgVVNFKEpTVkFMVUU2NCkKKyAgICAgICAgaWYgKCFu
b25UZW1wICYmIG1fdGFnVHlwZU51bWJlciAhPSBJbnZhbGlkR1BSUmVnICYmIGNoZWNrKFJlZyB7
IG1fdGFnVHlwZU51bWJlciB9KSkgeworICAgICAgICAgICAgQVNTRVJUKG1fbG9ja2VkUmVnaXN0
ZXJzLmdldChtX3RhZ1R5cGVOdW1iZXIpKTsKKyAgICAgICAgICAgIG1fbG9ja2VkUmVnaXN0ZXJz
LmNsZWFyKG1fdGFnVHlwZU51bWJlcik7CisgICAgICAgICAgICBub25UZW1wID0gUmVnIHsgbV90
YWdUeXBlTnVtYmVyIH07CisgICAgICAgICAgICBtX3RhZ1R5cGVOdW1iZXIgPSBJbnZhbGlkR1BS
UmVnOworICAgICAgICB9CisjZW5kaWYKICAgICAgICAgcmV0dXJuIG5vblRlbXA7CiAgICAgfQog
CisgICAgR1BSUmVnIGdldEZyZWVUZW1wR1BSKCkgY29uc3QKKyAgICB7CisgICAgICAgIFJlZyBm
cmVlVGVtcEdQUiB7IGdldEZyZWVSZWdpc3RlcihbdGhpc10gKFJlZyByZWcpIHsgcmV0dXJuIHJl
Zy5pc0dQUigpICYmICFtX25ld1JlZ2lzdGVyc1tyZWddOyB9KSB9OworICAgICAgICBpZiAoIWZy
ZWVUZW1wR1BSKQorICAgICAgICAgICAgcmV0dXJuIEludmFsaWRHUFJSZWc7CisgICAgICAgIHJl
dHVybiBmcmVlVGVtcEdQUi5ncHIoKTsKKyAgICB9CisKICAgICBHUFJSZWcgZ2V0RnJlZUdQUigp
IGNvbnN0CiAgICAgewogICAgICAgICBSZWcgZnJlZUdQUiB7IGdldEZyZWVSZWdpc3RlcihbXSAo
UmVnIHJlZykgeyByZXR1cm4gcmVnLmlzR1BSKCk7IH0pIH07CkBAIC01MTksNiArNTYxLDMxIEBA
IHByaXZhdGU6CiAgICAgICAgICAgICB9KTsKICAgICB9CiAKKyAgICB2b2lkIGVuc3VyZVRlbXBH
UFIoKQorICAgIHsKKyAgICAgICAgaWYgKGdldEZyZWVUZW1wR1BSKCkgIT0gSW52YWxpZEdQUlJl
ZykKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBpZiAodmVyYm9zZSkKKyAgICAgICAg
ICAgIGRhdGFMb2coIiAgRmluZGluZyBhIHRlbXAgR1BSIHRvIHNwaWxsXG4iKTsKKyAgICAgICAg
ZW5zdXJlUmVnaXN0ZXIoCisgICAgICAgICAgICBbdGhpc10gKGNvbnN0IENhY2hlZFJlY292ZXJ5
JiBjYWNoZWRSZWNvdmVyeSkgeworICAgICAgICAgICAgICAgIGlmIChjYWNoZWRSZWNvdmVyeS5y
ZWNvdmVyeSgpLmlzSW5HUFIoKSkgeworICAgICAgICAgICAgICAgICAgICByZXR1cm4gIW1fbG9j
a2VkUmVnaXN0ZXJzLmdldChjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgpLmdwcigpKSAKKyAgICAg
ICAgICAgICAgICAgICAgICAgICYmICFtX25ld1JlZ2lzdGVyc1tjYWNoZWRSZWNvdmVyeS5yZWNv
dmVyeSgpLmdwcigpXTsKKyAgICAgICAgICAgICAgICB9CisjaWYgVVNFKEpTVkFMVUUzMl82NCkK
KyAgICAgICAgICAgICAgICBpZiAoY2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKS50ZWNobmlxdWUo
KSA9PSBJblBhaXIpIHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuICFtX2xvY2tlZFJlZ2lz
dGVycy5nZXQoY2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKS50YWdHUFIoKSkKKyAgICAgICAgICAg
ICAgICAgICAgICAgICYmICFtX2xvY2tlZFJlZ2lzdGVycy5nZXQoY2FjaGVkUmVjb3ZlcnkucmVj
b3ZlcnkoKS5wYXlsb2FkR1BSKCkpCisgICAgICAgICAgICAgICAgICAgICAgICAmJiAhbV9uZXdS
ZWdpc3RlcnNbY2FjaGVkUmVjb3ZlcnkucmVjb3ZlcnkoKS50YWdHUFIoKV0KKyAgICAgICAgICAg
ICAgICAgICAgICAgICYmICFtX25ld1JlZ2lzdGVyc1tjYWNoZWRSZWNvdmVyeS5yZWNvdmVyeSgp
LnBheWxvYWRHUFIoKV07CisgICAgICAgICAgICAgICAgfQorI2VuZGlmCisgICAgICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfSk7CisgICAgfQorCiAgICAgdm9pZCBlbnN1
cmVHUFIoKQogICAgIHsKICAgICAgICAgaWYgKGdldEZyZWVHUFIoKSAhPSBJbnZhbGlkR1BSUmVn
KQpAQCAtNTczLDE2ICs2NDAsMjQgQEAgcHJpdmF0ZToKICAgICB7CiAgICAgICAgIEFTU0VSVChq
c1ZhbHVlUmVncyAmJiAhZ2V0TmV3KGpzVmFsdWVSZWdzKSk7CiAgICAgICAgIENhY2hlZFJlY292
ZXJ5KiBjYWNoZWRSZWNvdmVyeSA9IGFkZENhY2hlZFJlY292ZXJ5KHJlY292ZXJ5KTsKLSAgICAg
ICAgQVNTRVJUKCFjYWNoZWRSZWNvdmVyeS0+d2FudGVkSlNWYWx1ZVJlZ3MoKSk7Ci0gICAgICAg
IGNhY2hlZFJlY292ZXJ5LT5zZXRXYW50ZWRKU1ZhbHVlUmVncyhqc1ZhbHVlUmVncyk7CiAjaWYg
VVNFKEpTVkFMVUU2NCkKKyAgICAgICAgaWYgKGNhY2hlZFJlY292ZXJ5LT53YW50ZWRKU1ZhbHVl
UmVncygpKQorICAgICAgICAgICAgbV9uZXdSZWdpc3RlcnNbY2FjaGVkUmVjb3ZlcnktPndhbnRl
ZEpTVmFsdWVSZWdzKCkuZ3ByKCldID0gbnVsbHB0cjsKICAgICAgICAgbV9uZXdSZWdpc3RlcnNb
anNWYWx1ZVJlZ3MuZ3ByKCldID0gY2FjaGVkUmVjb3Zlcnk7CiAjZWxzZQorICAgICAgICBpZiAo
SlNWYWx1ZVJlZ3Mgb2xkUmVncyB7IGNhY2hlZFJlY292ZXJ5LT53YW50ZWRKU1ZhbHVlUmVncygp
IH0pIHsKKyAgICAgICAgICAgIGlmIChvbGRSZWdzLnBheWxvYWRHUFIoKSkKKyAgICAgICAgICAg
ICAgICBtX25ld1JlZ2lzdGVyc1tvbGRSZWdzLnBheWxvYWRHUFIoKV0gPSBudWxscHRyOworICAg
ICAgICAgICAgaWYgKG9sZFJlZ3MudGFnR1BSKCkpCisgICAgICAgICAgICAgICAgbV9uZXdSZWdp
c3RlcnNbb2xkUmVncy50YWdHUFIoKV0gPSBudWxscHRyOworICAgICAgICB9CiAgICAgICAgIGlm
IChqc1ZhbHVlUmVncy5wYXlsb2FkR1BSKCkgIT0gSW52YWxpZEdQUlJlZykKICAgICAgICAgICAg
IG1fbmV3UmVnaXN0ZXJzW2pzVmFsdWVSZWdzLnBheWxvYWRHUFIoKV0gPSBjYWNoZWRSZWNvdmVy
eTsKICAgICAgICAgaWYgKGpzVmFsdWVSZWdzLnRhZ0dQUigpICE9IEludmFsaWRHUFJSZWcpCiAg
ICAgICAgICAgICBtX25ld1JlZ2lzdGVyc1tqc1ZhbHVlUmVncy50YWdHUFIoKV0gPSBjYWNoZWRS
ZWNvdmVyeTsKICNlbmRpZgorICAgICAgICBBU1NFUlQoIWNhY2hlZFJlY292ZXJ5LT53YW50ZWRK
U1ZhbHVlUmVncygpKTsKKyAgICAgICAgY2FjaGVkUmVjb3ZlcnktPnNldFdhbnRlZEpTVmFsdWVS
ZWdzKGpzVmFsdWVSZWdzKTsKICAgICB9CiAKICAgICB2b2lkIGFkZE5ldyhGUFJSZWcgZnByLCBW
YWx1ZVJlY292ZXJ5IHJlY292ZXJ5KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRDYWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVENh
bGwuY3BwCShyZXZpc2lvbiAxOTAyODUpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VENhbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTMsNiArMTkzLDcgQEAgdm9pZCBKSVQ6OmNv
bXBpbGVPcENhbGwoT3Bjb2RlSUQgb3Bjb2RlSQogCiAgICAgaWYgKG9wY29kZUlEID09IG9wX3Rh
aWxfY2FsbCkgewogICAgICAgICBDYWxsRnJhbWVTaHVmZmxlRGF0YSBzaHVmZmxlRGF0YTsKKyAg
ICAgICAgc2h1ZmZsZURhdGEudGFnVHlwZU51bWJlciA9IEdQUkluZm86OnRhZ1R5cGVOdW1iZXJS
ZWdpc3RlcjsKICAgICAgICAgc2h1ZmZsZURhdGEubnVtTG9jYWxzID0KICAgICAgICAgICAgIGlu
c3RydWN0aW9uWzRdLnUub3BlcmFuZCAtIHNpemVvZihDYWxsZXJGcmFtZUFuZFBDKSAvIHNpemVv
ZihSZWdpc3Rlcik7CiAgICAgICAgIHNodWZmbGVEYXRhLmFyZ3MucmVzaXplKGluc3RydWN0aW9u
WzNdLnUub3BlcmFuZCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L1JlZy5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnLmgJKHJldmlzaW9uIDE5
MDI4NSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvUmVnLmgJKHdvcmtpbmcgY29weSkK
QEAgLTU1LDYgKzU1LDExIEBAIHB1YmxpYzoKICAgICAgICAgOiBtX2luZGV4KGludmFsaWQoKSkK
ICAgICB7CiAgICAgfQorCisgICAgUmVnKFdURjo6SGFzaFRhYmxlRGVsZXRlZFZhbHVlVHlwZSkK
KyAgICAgICAgOiBtX2luZGV4KGRlbGV0ZWQoKSkKKyAgICB7CisgICAgfQogICAgIAogICAgIFJl
ZyhNYWNyb0Fzc2VtYmxlcjo6UmVnaXN0ZXJJRCByZWcpCiAgICAgICAgIDogbV9pbmRleChNYWNy
b0Fzc2VtYmxlcjo6cmVnaXN0ZXJJbmRleChyZWcpKQpAQCAtMTAyLDYgKzEwNyw4IEBAIHB1Ymxp
YzoKICAgICBib29sIGlzU2V0KCkgY29uc3QgeyByZXR1cm4gbV9pbmRleCAhPSBpbnZhbGlkKCk7
IH0KICAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0dXJuICFpc1NldCgpOyB9CiAgICAg
ZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuIGlzU2V0KCk7IH0KKworICAg
IGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX2luZGV4ID09
IGRlbGV0ZWQoKTsgfQogICAgIAogICAgIGJvb2wgaXNHUFIoKSBjb25zdAogICAgIHsKQEAgLTE2
NSwxMiArMTcyLDM0IEBAIHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICBzdGF0aWMgdWludDhfdCBp
bnZhbGlkKCkgeyByZXR1cm4gMHhmZjsgfQorCisgICAgc3RhdGljIHVpbnQ4X3QgZGVsZXRlZCgp
IHsgcmV0dXJuIDB4ZmU7IH0KICAgICAKICAgICB1aW50OF90IG1faW5kZXg7CiB9OwogCitzdHJ1
Y3QgUmVnSGFzaCB7CisgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29uc3QgUmVnJiBrZXkpIHsg
cmV0dXJuIGtleS5oYXNoKCk7IH0KKyAgICBzdGF0aWMgYm9vbCBlcXVhbChjb25zdCBSZWcmIGEs
IGNvbnN0IFJlZyYgYikgeyByZXR1cm4gYSA9PSBiOyB9CisgICAgc3RhdGljIGNvbnN0IGJvb2wg
c2FmZVRvQ29tcGFyZVRvRW1wdHlPckRlbGV0ZWQgPSB0cnVlOworfTsKKwogfSAvLyBuYW1lc3Bh
Y2UgSlNDCiAKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPiBzdHJ1Y3Qg
RGVmYXVsdEhhc2g7Cit0ZW1wbGF0ZTw+IHN0cnVjdCBEZWZhdWx0SGFzaDxKU0M6OlJlZz4gewor
ICAgIHR5cGVkZWYgSlNDOjpSZWdIYXNoIEhhc2g7Cit9OworCit0ZW1wbGF0ZTx0eXBlbmFtZSBU
PiBzdHJ1Y3QgSGFzaFRyYWl0czsKK3RlbXBsYXRlPD4gc3RydWN0IEhhc2hUcmFpdHM8SlNDOjpS
ZWc+IDogU2ltcGxlQ2xhc3NIYXNoVHJhaXRzPEpTQzo6UmVnPiB7CisgICAgc3RhdGljIGNvbnN0
IGJvb2wgZW1wdHlWYWx1ZUlzWmVybyA9IGZhbHNlOworIH07CisKK30gLy8gbmFtZXNwYWNlIFdU
RgorCiAjZW5kaWYgLy8gRU5BQkxFKEpJVCkKIAogI2VuZGlmIC8vIFJlZ19oCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvT3B0aW9ucy5oCShyZXZpc2lvbiAxOTAyODUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9PcHRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEyOCw3ICsxMjgsNyBAQCB0eXBlZGVmIGNvbnN0IGNoYXIqIG9wdGlvblN0cmluZzsKICAgICB2
KGJvb2wsIGZvcmNlUHJvZmlsZXJCeXRlY29kZUdlbmVyYXRpb24sIGZhbHNlLCBudWxscHRyKSBc
CiAgICAgXAogICAgIHYoYm9vbCwgZW5hYmxlRnVuY3Rpb25Eb3RBcmd1bWVudHMsIHRydWUsIG51
bGxwdHIpIFwKLSAgICB2KGJvb2wsIGVuYWJsZVRhaWxDYWxscywgZmFsc2UsIG51bGxwdHIpIFwK
KyAgICB2KGJvb2wsIGVuYWJsZVRhaWxDYWxscywgdHJ1ZSwgbnVsbHB0cikgXAogICAgIFwKICAg
ICAvKiBzaG93RGlzYXNzZW1ibHkgaW1wbGllcyBzaG93REZHRGlzYXNzZW1ibHkuICovIFwKICAg
ICB2KGJvb2wsIHNob3dEaXNhc3NlbWJseSwgZmFsc2UsICJkdW1wcyBkaXNhc3NlbWJseSBvZiBh
bGwgSklUIGNvbXBpbGVkIGNvZGUgdXBvbiBjb21waWxhdGlvbiIpIFwKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS90ZXN0cy9lczYueWFtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvdGVzdHMvZXM2LnlhbWwJKHJldmlzaW9uIDE5MDI4NSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS90ZXN0cy9lczYueWFtbAkod29ya2luZyBjb3B5KQpAQCAtODc3LDkgKzg3Nyw5
IEBACiAtIHBhdGg6IGVzNi9Qcm9taXNlX1Byb21pc2VbU3ltYm9sLnNwZWNpZXNdLmpzCiAgIGNt
ZDogcnVuRVM2IDpmYWlsCiAtIHBhdGg6IGVzNi9wcm9wZXJfdGFpbF9jYWxsc190YWlsX2NhbGxf
b3B0aW1pc2F0aW9uX2RpcmVjdF9yZWN1cnNpb24uanMKLSAgY21kOiBydW5FUzYgOmZhaWwKKyAg
Y21kOiBydW5FUzYgOm5vcm1hbAogLSBwYXRoOiBlczYvcHJvcGVyX3RhaWxfY2FsbHNfdGFpbF9j
YWxsX29wdGltaXNhdGlvbl9tdXR1YWxfcmVjdXJzaW9uLmpzCi0gIGNtZDogcnVuRVM2IDpmYWls
CisgIGNtZDogcnVuRVM2IDpub3JtYWwKIC0gcGF0aDogZXM2L3Byb3RvdHlwZV9vZl9ib3VuZF9m
dW5jdGlvbnNfYXJyb3dfZnVuY3Rpb25zLmpzCiAgIGNtZDogcnVuRVM2IDpmYWlsCiAtIHBhdGg6
IGVzNi9wcm90b3R5cGVfb2ZfYm91bmRfZnVuY3Rpb25zX2Jhc2ljX2Z1bmN0aW9ucy5qcwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9kZmctdGFpbC1jYWxscy5qcwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2RmZy10YWls
LWNhbGxzLmpzCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0
cmVzcy9kZmctdGFpbC1jYWxscy5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU2IEBACiso
ZnVuY3Rpb24gbm9uSW5saW5lZFRhaWxDYWxsKCkgeworICAgIGZ1bmN0aW9uIGNhbGxlZSgpIHsg
aWYgKGNhbGxlZS5jYWxsZXIgIT0gbm9uSW5saW5lZFRhaWxDYWxsKSB0aHJvdyBuZXcgRXJyb3Io
KTsgfQorICAgIG5vSW5saW5lKGNhbGxlZSk7CisKKyAgICBmdW5jdGlvbiBjYWxsZXIoKSB7ICJ1
c2Ugc3RyaWN0IjsgcmV0dXJuIGNhbGxlZSgpOyB9CisKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8
IDEwMDAwOyArK2kpCisgICAgICAgIGNhbGxlcigpOworCisgICAgZnVuY3Rpb24gbG9vcChuKSB7
ICJ1c2Ugc3RyaWN0IjsgaWYgKG4gPiAwKSByZXR1cm4gbG9vcChuIC0gMSk7IH0KKyAgICBub0lu
bGluZShsb29wKTsKKworICAgIGxvb3AoMTAwMDAwMCk7Cit9KSgpOworCisoZnVuY3Rpb24gaW5s
aW5lZFRhaWxDYWxsKCkgeworICAgIGZ1bmN0aW9uIGNhbGxlZSgpIHsgaWYgKGNhbGxlZS5jYWxs
ZXIgIT0gaW5saW5lZFRhaWxDYWxsKSB0aHJvdyBuZXcgRXJyb3IoKTsgfQorICAgIGZ1bmN0aW9u
IGNhbGxlcigpIHsgInVzZSBzdHJpY3QiOyByZXR1cm4gY2FsbGVlKCk7IH0KKworICAgIGZvciAo
dmFyIGkgPSAwOyBpIDwgMTAwMDA7ICsraSkKKyAgICAgICAgY2FsbGVyKCk7CisKKyAgICBmdW5j
dGlvbiBsb29wKG4pIHsgInVzZSBzdHJpY3QiOyBpZiAobiA+IDApIHJldHVybiBsb29wKG4gLSAx
KTsgfQorCisgICAgbG9vcCgxMDAwMDAwKTsKK30pKCk7CisKKyhmdW5jdGlvbiBub25JbmxpbmVk
RW11bGF0ZWRUYWlsQ2FsbCgpIHsKKyAgICBmdW5jdGlvbiBlbXVsYXRvcigpIHsgY2FsbGVyKCk7
IH0KKyAgICBmdW5jdGlvbiBjYWxsZWUoKSB7IGlmIChjYWxsZWUuY2FsbGVyICE9IGVtdWxhdG9y
KSB0aHJvdyBuZXcgRXJyb3IoKTsgfQorICAgIG5vSW5saW5lKGNhbGxlZSk7CisgICAgZnVuY3Rp
b24gY2FsbGVyKCkgeyAidXNlIHN0cmljdCI7IHJldHVybiBjYWxsZWUoKTsgfQorCisgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsgKytpKQorICAgICAgICBlbXVsYXRvcigpOworCisgICAg
ZnVuY3Rpb24gcGFkKG4pIHsgInVzZSBzdHJpY3QiOyByZXR1cm4gbG9vcChuKTsgfQorICAgIGZ1
bmN0aW9uIGxvb3AobikgeyAidXNlIHN0cmljdCI7IGlmIChuID4gMCkgcmV0dXJuIHBhZChuIC0g
MSk7IH0KKyAgICBub0lubGluZShsb29wKTsKKworICAgIGxvb3AoMTAwMDAwMCk7Cit9KSgpOwor
CisoZnVuY3Rpb24gaW5saW5lZEVtdWxhdGVkVGFpbENhbGwoKSB7CisgICAgZnVuY3Rpb24gZW11
bGF0b3IoKSB7IGNhbGxlcigpOyB9CisgICAgZnVuY3Rpb24gY2FsbGVlKCkgeyBpZiAoY2FsbGVl
LmNhbGxlciAhPSBlbXVsYXRvcikgdGhyb3cgbmV3IEVycm9yKCk7IH0KKyAgICBmdW5jdGlvbiBj
YWxsZXIoKSB7ICJ1c2Ugc3RyaWN0IjsgcmV0dXJuIGNhbGxlZSgpOyB9CisKKyAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IDEwMDAwOyArK2kpCisgICAgICAgIGVtdWxhdG9yKCk7CisKKyAgICBmdW5j
dGlvbiBwYWQobikgeyAidXNlIHN0cmljdCI7IHJldHVybiBsb29wKG4pOyB9CisgICAgZnVuY3Rp
b24gbG9vcChuKSB7ICJ1c2Ugc3RyaWN0IjsgaWYgKG4gPiAwKSByZXR1cm4gcGFkKG4gLSAxKTsg
fQorCisgICAgbG9vcCgxMDAwMDAwKTsKK30pKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvdGVzdHMvc3RyZXNzL211dHVhbC10YWlsLWNhbGwtbm8tc3RhY2stb3ZlcmZsb3cuanMKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9tdXR1YWwtdGFp
bC1jYWxsLW5vLXN0YWNrLW92ZXJmbG93LmpzCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9tdXR1YWwtdGFpbC1jYWxsLW5vLXN0YWNrLW92ZXJmbG93
LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzEgQEAKK2Z1bmN0aW9uIHNob3VsZFRocm93
KGZ1bmMsIGVycm9yTWVzc2FnZSkgeworICAgIHZhciBlcnJvclRocm93biA9IGZhbHNlOworICAg
IHZhciBlcnJvciA9IG51bGw7CisgICAgdHJ5IHsKKyAgICAgICAgZnVuYygpOworICAgIH0gY2F0
Y2ggKGUpIHsKKyAgICAgICAgZXJyb3JUaHJvd24gPSB0cnVlOworICAgICAgICBlcnJvciA9IGU7
CisgICAgfQorICAgIGlmICghZXJyb3JUaHJvd24pCisgICAgICAgIHRocm93IG5ldyBFcnJvcign
bm90IHRocm93bicpOworICAgIGlmIChTdHJpbmcoZXJyb3IpICE9PSBlcnJvck1lc3NhZ2UpCisg
ICAgICAgIHRocm93IG5ldyBFcnJvcihgYmFkIGVycm9yOiAke1N0cmluZyhlcnJvcil9YCk7Cit9
CisKK2Z1bmN0aW9uIHNsb3BweUNvdW50ZG93bihuKSB7CisgICAgZnVuY3Rpb24gZXZlbihuKSB7
CisgICAgICAgIGlmIChuID09IDApCisgICAgICAgICAgICByZXR1cm4gbjsKKyAgICAgICAgcmV0
dXJuIG9kZChuIC0gMSk7CisgICAgfQorCisgICAgZnVuY3Rpb24gb2RkKG4pIHsKKyAgICAgICAg
aWYgKG4gPT0gMSkKKyAgICAgICAgICAgIHJldHVybiBuOworICAgICAgICByZXR1cm4gZXZlbihu
IC0gMSk7CisgICAgfQorCisgICAgaWYgKG4gJSAyID09PSAwKQorICAgICAgICByZXR1cm4gZXZl
bihuKTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBvZGQobik7Cit9CisKK2Z1bmN0aW9uIHN0
cmljdENvdW50ZG93bihuKSB7CisgICAgInVzZSBzdHJpY3QiOworCisgICAgZnVuY3Rpb24gZXZl
bihuKSB7CisgICAgICAgIGlmIChuID09IDApCisgICAgICAgICAgICByZXR1cm4gbjsKKyAgICAg
ICAgcmV0dXJuIG9kZChuIC0gMSk7CisgICAgfQorCisgICAgZnVuY3Rpb24gb2RkKG4pIHsKKyAg
ICAgICAgaWYgKG4gPT0gMSkKKyAgICAgICAgICAgIHJldHVybiBuOworICAgICAgICByZXR1cm4g
ZXZlbihuIC0gMSk7CisgICAgfQorCisgICAgaWYgKG4gJSAyID09PSAwKQorICAgICAgICByZXR1
cm4gZXZlbihuKTsKKyAgICBlbHNlCisgICAgICAgIHJldHVybiBvZGQobik7Cit9CisKK3Nob3Vs
ZFRocm93KGZ1bmN0aW9uICgpIHsgc2xvcHB5Q291bnRkb3duKDEwMDAwMCk7IH0sICJSYW5nZUVy
cm9yOiBNYXhpbXVtIGNhbGwgc3RhY2sgc2l6ZSBleGNlZWRlZC4iKTsKK3N0cmljdENvdW50ZG93
bigxMDAwMDApOworCisvLyBQYXJpdHkgYWx0ZXJuaW5nCitmdW5jdGlvbiBvZGQobikgeworICAg
ICJ1c2Ugc3RyaWN0IjsKKyAgICBpZiAobiA+IDApCisgICAgICAgIHJldHVybiBldmVuKG4sIDAp
OworfQorCitmdW5jdGlvbiBldmVuKG4pIHsKKyAgICAidXNlIHN0cmljdCI7CisgICAgcmV0dXJu
IG9kZChuIC0gMSk7Cit9CisKK29kZCgxMDAwMDApOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3Rlc3RzL3N0cmVzcy90YWlsLWNhbGwtbm8tc3RhY2stb3ZlcmZsb3cuanMKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy90YWlsLWNhbGwtbm8tc3Rh
Y2stb3ZlcmZsb3cuanMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVz
dHMvc3RyZXNzL3RhaWwtY2FsbC1uby1zdGFjay1vdmVyZmxvdy5qcwkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDQ1IEBACitmdW5jdGlvbiBzaG91bGRUaHJvdyhmdW5jLCBlcnJvck1lc3NhZ2Up
IHsKKyAgICB2YXIgZXJyb3JUaHJvd24gPSBmYWxzZTsKKyAgICB2YXIgZXJyb3IgPSBudWxsOwor
ICAgIHRyeSB7CisgICAgICAgIGZ1bmMoKTsKKyAgICB9IGNhdGNoIChlKSB7CisgICAgICAgIGVy
cm9yVGhyb3duID0gdHJ1ZTsKKyAgICAgICAgZXJyb3IgPSBlOworICAgIH0KKyAgICBpZiAoIWVy
cm9yVGhyb3duKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ25vdCB0aHJvd24nKTsKKyAgICBp
ZiAoU3RyaW5nKGVycm9yKSAhPT0gZXJyb3JNZXNzYWdlKQorICAgICAgICB0aHJvdyBuZXcgRXJy
b3IoYGJhZCBlcnJvcjogJHtTdHJpbmcoZXJyb3IpfWApOworfQorCitmdW5jdGlvbiBzbG9wcHlM
b29wKG4pIHsKKyAgICBpZiAobiA+IDApCisgICAgICAgIHJldHVybiBzbG9wcHlMb29wKG4gLSAx
KTsKK30KKworZnVuY3Rpb24gc3RyaWN0TG9vcChuKSB7CisgICAgInVzZSBzdHJpY3QiOworICAg
IGlmIChuID4gMCkKKyAgICAgICAgcmV0dXJuIHN0cmljdExvb3AobiAtIDEpOworfQorCisvLyBX
ZSBoYXZlIHR3byBvZiB0aGVzZSBzbyB0aGF0IHdlIGNhbiB0ZXN0IGRpZmZlcmVudCBzdGFjayBh
bGlnbm1lbnRzCitmdW5jdGlvbiBzdHJpY3RMb29wQXJpdHlGaXh1cDEobiwgZHVtbXkpIHsKKyAg
ICAidXNlIHN0cmljdCI7CisgICAgaWYgKG4gPiAwKQorICAgICAgICByZXR1cm4gc3RyaWN0TG9v
cEFyaXR5Rml4dXAxKG4gLSAxKTsKK30KKworZnVuY3Rpb24gc3RyaWN0TG9vcEFyaXR5Rml4dXAy
KG4sIGR1bW15MSwgZHVtbXkyKSB7CisgICAgInVzZSBzdHJpY3QiOworICAgIGlmIChuID4gMCkK
KyAgICAgICAgcmV0dXJuIHN0cmljdExvb3BBcml0eUZpeHVwMihuIC0gMSk7Cit9CisKK3Nob3Vs
ZFRocm93KGZ1bmN0aW9uICgpIHsgc2xvcHB5TG9vcCgxMDAwMDApOyB9LCAnUmFuZ2VFcnJvcjog
TWF4aW11bSBjYWxsIHN0YWNrIHNpemUgZXhjZWVkZWQuJyk7CisKKy8vIFRoZXNlIHNob3VsZCBu
b3QgdGhyb3cKK3N0cmljdExvb3AoMTAwMDAwKTsKK3N0cmljdExvb3BBcml0eUZpeHVwMSgxMDAw
MDAwKTsKK3N0cmljdExvb3BBcml0eUZpeHVwMigxMDAwMDAwKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvdGFpbC1jYWxsLXJlY29nbml6ZS5qcwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3RhaWwtY2FsbC1yZWNvZ25p
emUuanMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNz
L3RhaWwtY2FsbC1yZWNvZ25pemUuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNzggQEAK
K2Z1bmN0aW9uIGNhbGxlck11c3RCZVJ1bigpIHsKKyAgICBpZiAoIU9iamVjdC5pcyhjYWxsZXJN
dXN0QmVSdW4uY2FsbGVyLCBydW5UZXN0cykpCisgICAgICAgIHRocm93IEVycm9yKCJXcm9uZyBj
YWxsZXIsIGV4cGVjdGVkIHJ1biBidXQgZ290ICIsIGNhbGxlck11c3RCZVJ1bi5jYWxsZXIpOwor
fQorCitmdW5jdGlvbiBjYWxsZXJNdXN0QmVTdHJpY3QoKSB7CisgICAgdmFyIGVycm9yVGhyb3du
ID0gZmFsc2U7CisgICAgdHJ5IHsKKyAgICAgICAgY2FsbGVyTXVzdEJlU3RyaWN0LmNhbGxlcjsK
KyAgICB9IGNhdGNoIChlKSB7CisgICAgICAgIGVycm9yVGhyb3duID0gdHJ1ZTsKKyAgICB9Cisg
ICAgaWYgKCFlcnJvclRocm93bikKKyAgICAgICAgdGhyb3cgRXJyb3IoIldyb25nIGNhbGxlciwg
ZXhwZWN0ZWQgc3RyaWN0IGNhbGxlciBidXQgZ290ICIsIGNhbGxlck11c3RCZVN0cmljdC5jYWxs
ZXIpOworfQorCitmdW5jdGlvbiBydW5UZXN0cygpIHsKKyAgICAvLyBTdGF0ZW1lbnQgdGVzdHMK
KyAgICAoZnVuY3Rpb24gc2ltcGxlVGFpbENhbGwoKSB7CisgICAgICAgICJ1c2Ugc3RyaWN0IjsK
KyAgICAgICAgcmV0dXJuIGNhbGxlck11c3RCZVJ1bigpOworICAgIH0pKCk7CisKKyAgICAoZnVu
Y3Rpb24gbm9UYWlsQ2FsbEluVHJ5KCkgeworICAgICAgICAidXNlIHN0cmljdCI7CisgICAgICAg
IHRyeSB7CisgICAgICAgICAgICByZXR1cm4gY2FsbGVyTXVzdEJlU3RyaWN0KCk7CisgICAgICAg
IH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgICAgIHRocm93IGU7CisgICAgICAgIH0KKyAgICB9KSgp
OworCisgICAgKGZ1bmN0aW9uIHRhaWxDYWxsSW5DYXRjaCgpIHsKKyAgICAgICAgInVzZSBzdHJp
Y3QiOworICAgICAgICB0cnkgeyB9IGNhdGNoIChlKSB7IHJldHVybiBjYWxsZXJNdXN0QmVSdW4o
KTsgfQorICAgIH0pKCk7CisKKyAgICAoZnVuY3Rpb24gdGFpbENhbGxJbkZpbmFsbHkoKSB7Cisg
ICAgICAgICJ1c2Ugc3RyaWN0IjsKKyAgICAgICAgdHJ5IHsgfSBmaW5hbGx5IHsgcmV0dXJuIGNh
bGxlck11c3RCZVJ1bigpOyB9CisgICAgfSkoKTsKKworICAgIChmdW5jdGlvbiB0YWlsQ2FsbElu
RmluYWxseVdpdGhDYXRjaCgpIHsKKyAgICAgICAgInVzZSBzdHJpY3QiOworICAgICAgICB0cnkg
eyB9IGNhdGNoIChlKSB7IH0gZmluYWxseSB7IHJldHVybiBjYWxsZXJNdXN0QmVSdW4oKTsgfQor
ICAgIH0pKCk7CisKKyAgICAoZnVuY3Rpb24gdGFpbENhbGxJbkZpbmFsbHlXaXRoQ2F0Y2hUYWtl
bigpIHsKKyAgICAgICAgInVzZSBzdHJpY3QiOworICAgICAgICB0cnkgeyB0aHJvdyBudWxsOyB9
IGNhdGNoIChlKSB7IH0gZmluYWxseSB7IHJldHVybiBjYWxsZXJNdXN0QmVSdW4oKTsgfQorICAg
IH0pKCk7CisKKyAgICAoZnVuY3Rpb24gbm9UYWlsQ2FsbEluQ2F0Y2hJZkZpbmFsbHkoKSB7Cisg
ICAgICAgICJ1c2Ugc3RyaWN0IjsKKyAgICAgICAgdHJ5IHsgdGhyb3cgbnVsbDsgfSBjYXRjaCAo
ZSkgeyByZXR1cm4gY2FsbGVyTXVzdEJlU3RyaWN0KCk7IH0gZmluYWxseSB7IH0KKyAgICB9KSgp
OworCisgICAgKGZ1bmN0aW9uIHRhaWxDYWxsSW5Gb3IoKSB7CisgICAgICAgICJ1c2Ugc3RyaWN0
IjsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDsgKytpKQorICAgICAgICAgICAgcmV0
dXJuIGNhbGxlck11c3RCZVJ1bigpOworICAgIH0pKCk7CisKKyAgICAoZnVuY3Rpb24gdGFpbENh
bGxJbldoaWxlKCkgeworICAgICAgICAidXNlIHN0cmljdCI7CisgICAgICAgIHdoaWxlICh0cnVl
KQorICAgICAgICAgICAgcmV0dXJuIGNhbGxlck11c3RCZVJ1bigpOworICAgIH0pKCk7CisKKyAg
ICAoZnVuY3Rpb24gdGFpbENhbGxJbkRvV2hpbGUoKSB7CisgICAgICAgICJ1c2Ugc3RyaWN0IjsK
KyAgICAgICAgZG8KKyAgICAgICAgICAgIHJldHVybiBjYWxsZXJNdXN0QmVSdW4oKTsKKyAgICAg
ICAgd2hpbGUgKHRydWUpOworICAgIH0pKCk7CisKKyAgICAoZnVuY3Rpb24gbm9UYWlsQ2FsbElu
Rm9ySW4oKSB7CisgICAgICAgICJ1c2Ugc3RyaWN0IjsKKyAgICAgICAgZm9yICh2YXIgeCBpbiBb
MSwgMl0pCisgICAgICAgICAgICByZXR1cm4gY2FsbGVyTXVzdEJlU3RyaWN0KCk7CisgICAgfSko
KTsKKworICAgIChmdW5jdGlvbiBub1RhaWxDYWxsSW5Gb3JPZigpIHsKKyAgICAgICAgInVzZSBz
dHJpY3QiOworICAgICAgICBmb3IgKHZhciB4IG9mIFsxLCAyXSkKKyAgICAgICAgICAgIHJldHVy
biBjYWxsZXJNdXN0QmVTdHJpY3QoKTsKKyAgICB9KSgpOworCisgICAgKGZ1bmN0aW9uIHRhaWxD
YWxsSW5JZigpIHsKKyAgICAgICAgInVzZSBzdHJpY3QiOworICAgICAgICBpZiAodHJ1ZSkKKyAg
ICAgICAgICAgIHJldHVybiBjYWxsZXJNdXN0QmVSdW4oKTsKKyAgICB9KSgpOworCisgICAgKGZ1
bmN0aW9uIHRhaWxDYWxsSW5FbHNlKCkgeworICAgICAgICAidXNlIHN0cmljdCI7CisgICAgICAg
IGlmIChmYWxzZSkgdGhyb3cgbmV3IEVycm9yKCJXVEYiKTsKKyAgICAgICAgZWxzZSByZXR1cm4g
Y2FsbGVyTXVzdEJlUnVuKCk7CisgICAgfSkoKTsKKworICAgIChmdW5jdGlvbiB0YWlsQ2FsbElu
U3dpdGNoQ2FzZSgpIHsKKyAgICAgICAgInVzZSBzdHJpY3QiOworICAgICAgICBzd2l0Y2ggKDAp
IHsKKyAgICAgICAgY2FzZSAwOiByZXR1cm4gY2FsbGVyTXVzdEJlUnVuKCk7CisgICAgICAgIH0K
KyAgICB9KSgpOworCisgICAgKGZ1bmN0aW9uIHRhaWxDYWxsSW5Td2l0Y2hEZWZhdWx0KCkgewor
ICAgICAgICAidXNlIHN0cmljdCI7CisgICAgICAgIHN3aXRjaCAoMCkgeworICAgICAgICBkZWZh
dWx0OiByZXR1cm4gY2FsbGVyTXVzdEJlUnVuKCk7CisgICAgICAgIH0KKyAgICB9KSgpOworCisg
ICAgKGZ1bmN0aW9uIHRhaWxDYWxsV2l0aExhYmVsKCkgeworICAgICAgICAidXNlIHN0cmljdCI7
CisgICAgICAgIGR1bW15OiByZXR1cm4gY2FsbGVyTXVzdEJlUnVuKCk7CisgICAgfSkoKTsKKwor
ICAgIC8vIEV4cHJlc3Npb24gdGVzdHMsIHdlIGRvbid0IGVudW1lcmF0ZSBhbGwgdGhlIGNhc2Vz
IHdoZXJlIHRoZXJlCisgICAgLy8gKnNob3VsZG4ndCogYmUgYSB0YWlsIGNhbGwKKworICAgIChm
dW5jdGlvbiB0YWlsQ2FsbENvbW1hKCkgeworICAgICAgICAidXNlIHN0cmljdCI7CisgICAgICAg
IHJldHVybiBjYWxsZXJNdXN0QmVTdHJpY3QoKSwgY2FsbGVyTXVzdEJlUnVuKCk7CisgICAgfSko
KTsKKworICAgIChmdW5jdGlvbiB0YWlsQ2FsbFRlcm5hcnlMZWZ0KCkgeworICAgICAgICAidXNl
IHN0cmljdCI7CisgICAgICAgIHJldHVybiB0cnVlID8gY2FsbGVyTXVzdEJlUnVuKCkgOiB1bnJl
YWNoYWJsZSgpOworICAgIH0pKCk7CisKKyAgICAoZnVuY3Rpb24gdGFpbENhbGxUZXJuYXJ5Umln
aHQoKSB7CisgICAgICAgICJ1c2Ugc3RyaWN0IjsKKyAgICAgICAgcmV0dXJuIGZhbHNlID8gdW5y
ZWFjaGFibGUoKSA6IGNhbGxlck11c3RCZVJ1bigpOworICAgIH0pKCk7CisKKyAgICAoZnVuY3Rp
b24gdGFpbENhbGxMb2dpY2FsQW5kKCkgeworICAgICAgICAidXNlIHN0cmljdCI7CisgICAgICAg
IHJldHVybiB0cnVlICYmIGNhbGxlck11c3RCZVJ1bigpOworICAgIH0pKCk7CisKKyAgICAoZnVu
Y3Rpb24gdGFpbENhbGxMb2dpY2FsT3IoKSB7CisgICAgICAgICJ1c2Ugc3RyaWN0IjsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlIHx8IGNhbGxlck11c3RCZVJ1bigpOworICAgIH0pKCk7CisKKyAgICAo
ZnVuY3Rpb24gbWVtYmVyVGFpbENhbGwoKSB7CisgICAgICAgICJ1c2Ugc3RyaWN0IjsKKyAgICAg
ICAgcmV0dXJuIHsgZjogY2FsbGVyTXVzdEJlUnVuIH0uZigpOworICAgIH0pKCk7CisKKyAgICAo
ZnVuY3Rpb24gYmluZFRhaWxDYWxsKCkgeworICAgICAgICAidXNlIHN0cmljdCI7CisgICAgICAg
IHJldHVybiBjYWxsZXJNdXN0QmVSdW4uYmluZCgpKCk7CisgICAgfSkoKTsKKworICAgIC8vIEZ1
bmN0aW9uLnByb3RvdHlwZSB0ZXN0cworCisgICAgKGZ1bmN0aW9uIGFwcGx5VGFpbENhbGwoKSB7
CisgICAgICAgICJ1c2Ugc3RyaWN0IjsKKyAgICAgICAgcmV0dXJuIGNhbGxlck11c3RCZVJ1bi5h
cHBseSgpOworICAgIH0pKCk7CisKKyAgICAoZnVuY3Rpb24gY2FsbFRhaWxDYWxsKCkgeworICAg
ICAgICAidXNlIHN0cmljdCI7CisgICAgICAgIHJldHVybiBjYWxsZXJNdXN0QmVSdW4uY2FsbCgp
OworICAgIH0pKCk7CisKKyAgICAvLyBObyB0YWlsIGNhbGwgZm9yIGNvbnN0cnVjdG9ycworICAg
IChmdW5jdGlvbiBub1RhaWxDb25zdHJ1Y3QoKSB7CisgICAgICAgICJ1c2Ugc3RyaWN0IjsKKyAg
ICAgICAgcmV0dXJuIG5ldyBjYWxsZXJNdXN0QmVTdHJpY3QoKTsKKyAgICB9KSgpOworfQorCitm
b3IgKHZhciBpID0gMDsgaSA8IDEwMDAwOyArK2kpCisgICAgcnVuVGVzdHMoKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvdGFpbC1jYWxsLXZhcmFyZ3Mtbm8tc3Rh
Y2stb3ZlcmZsb3cuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3Rz
L3N0cmVzcy90YWlsLWNhbGwtdmFyYXJncy1uby1zdGFjay1vdmVyZmxvdy5qcwkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvdGFpbC1jYWxsLXZhcmFy
Z3Mtbm8tc3RhY2stb3ZlcmZsb3cuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyOCBAQAor
ZnVuY3Rpb24gc2hvdWxkVGhyb3coZnVuYywgZXJyb3JNZXNzYWdlKSB7CisgICAgdmFyIGVycm9y
VGhyb3duID0gZmFsc2U7CisgICAgdmFyIGVycm9yID0gbnVsbDsKKyAgICB0cnkgeworICAgICAg
ICBmdW5jKCk7CisgICAgfSBjYXRjaCAoZSkgeworICAgICAgICBlcnJvclRocm93biA9IHRydWU7
CisgICAgICAgIGVycm9yID0gZTsKKyAgICB9CisgICAgaWYgKCFlcnJvclRocm93bikKKyAgICAg
ICAgdGhyb3cgbmV3IEVycm9yKCdub3QgdGhyb3duJyk7CisgICAgaWYgKFN0cmluZyhlcnJvcikg
IT09IGVycm9yTWVzc2FnZSkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBiYWQgZXJyb3I6ICR7
U3RyaW5nKGVycm9yKX1gKTsKK30KKworZnVuY3Rpb24gc2xvcHB5TG9vcChuKSB7CisgICAgaWYg
KG4gPiAwKQorICAgICAgICByZXR1cm4gc2xvcHB5TG9vcCguLi5bbiAtIDFdKTsKK30KKworZnVu
Y3Rpb24gc3RyaWN0TG9vcChuKSB7CisgICAgInVzZSBzdHJpY3QiOworICAgIGlmIChuID4gMCkK
KyAgICAgICAgcmV0dXJuIHN0cmljdExvb3AoLi4uW24gLSAxXSk7Cit9CisKK3Nob3VsZFRocm93
KGZ1bmN0aW9uICgpIHsgc2xvcHB5TG9vcCgxMDAwMDApOyB9LCAnUmFuZ2VFcnJvcjogTWF4aW11
bSBjYWxsIHN0YWNrIHNpemUgZXhjZWVkZWQuJyk7CitzdHJpY3RMb29wKDEwMDAwMCk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3RhaWwtY2FsbHMtZG9udC1vdmVy
d3JpdGUtbGl2ZS1zdGFjay5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
dGVzdHMvc3RyZXNzL3RhaWwtY2FsbHMtZG9udC1vdmVyd3JpdGUtbGl2ZS1zdGFjay5qcwkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvdGFpbC1jYWxs
cy1kb250LW92ZXJ3cml0ZS1saXZlLXN0YWNrLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MzAgQEAKKyJ1c2Ugc3RyaWN0IjsKKworZnVuY3Rpb24gdGFpbChhLCBiKSB7IH0KK25vSW5saW5l
KHRhaWwpOworCit2YXIgb2JqID0geworICAgIG1ldGhvZDogZnVuY3Rpb24gKHgpIHsKKyAgICAg
ICAgcmV0dXJuIHRhaWwoeCwgeCk7CisgICAgfSwKKworICAgIGdldCBmcm9tTmF0aXZlKCkgeyBy
ZXR1cm4gdGFpbCgwLCAwKTsgfQorfTsKK25vSW5saW5lKG9iai5tZXRob2QpOworCitmdW5jdGlv
biBnZXRUaGlzKHgpIHsgcmV0dXJuIHRoaXM7IH0KK25vSW5saW5lKGdldFRoaXMpOworCitmb3Ig
KHZhciBpID0gMDsgaSA8IDEwMDAwOyArK2kpIHsKKyAgICB2YXIgdGhhdCA9IGdldFRoaXMob2Jq
Lm1ldGhvZCg0MikpOworCisgICAgaWYgKCFPYmplY3QuaXModGhhdCwgdW5kZWZpbmVkKSkKKyAg
ICAgICAgdGhyb3cgbmV3IEVycm9yKCJXcm9uZyAndGhpcycgdmFsdWUgaW4gY2FsbCwgZXhwZWN0
ZWQgdW5kZWZpbmVkIGJ1dCBnb3QgIiArIHRoYXQpOworCisgICAgdGhhdCA9IGdldFRoaXMob2Jq
Lm1ldGhvZCguLi5bNDJdKSk7CisgICAgaWYgKCFPYmplY3QuaXModGhhdCwgdW5kZWZpbmVkKSkK
KyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJXcm9uZyAndGhpcycgdmFsdWUgaW4gdmFyYXJncyBj
YWxsLCBleHBlY3RlZCB1bmRlZmluZWQgYnV0IGdvdCAiICsgdGhhdCk7CisKKyAgICBpZiAoIU9i
amVjdC5pcyhvYmouZnJvbU5hdGl2ZSwgdW5kZWZpbmVkKSkKKyAgICAgICAgdGhyb3cgbmV3IEVy
cm9yKCJXcm9uZyAnZnJvbU5hdGl2ZScgdmFsdWUsIGV4cGVjdGVkIHVuZGVmaW5lZCBidXQgZ290
ICIgKyBvYmouZnJvbU5hdGl2ZSk7Cit9CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxOTAyODUpCisrKyBM
YXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMSBAQAorMjAx
NS0wOS0yOCAgTWljaGFlbCBTYWJvZmYgIDxtc2Fib2ZmQGFwcGxlLmNvbT4KKworICAgICAgICBb
RVM2XSBJbXBsZW1lbnQgdGFpbCBjYWxscyBpbiB0aGUgRlRMCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDg2NjQKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGRlZCBvbmUgbmV3IHRhaWwgY2FsbCB0ZXN0
IGFuZCBlbmFibGVkIG90aGVyIHRhaWwgY2FsbCB0ZXN0cy4KKworICAgICAgICAqIGpzL2NhbGxl
ci1wcm9wZXJ0eS1leHBlY3RlZC50eHQ6CisgICAgICAgICoganMvc2NyaXB0LXRlc3RzL2NhbGxl
ci1wcm9wZXJ0eS5qczoKKyAgICAgICAgKHN0cmluZ19hcHBlYXJlZF9oZXJlLm5vblN0cmljdENh
bGxlZSk6CisgICAgICAgIChzdHJpY3RDYWxsZWUpOgorICAgICAgICAobm9uU3RyaWN0Q2FsbGVy
KToKKyAgICAgICAgKHN0cmljdENhbGxlcik6CisgICAgICAgIChzdHJpY3RUYWlsQ2FsbGVyKToK
KyAgICAgICAgKGdldEZvb0dldHRlcik6CisKIDIwMTUtMDktMjggIFNhYW0gYmFyYXRpICA8c2Jh
cmF0aUBhcHBsZS5jb20+CiAKICAgICAgICAganMvcmVncmVzcy9nZXR0ZXItcmljaGFyZHMtdHJ5
LWNhdGNoIGlzIHRpbWluZyBvdXQgb24gZGVidWcgbGF5b3V0IHRlc3RzCkluZGV4OiBMYXlvdXRU
ZXN0cy9qcy9jYWxsZXItcHJvcGVydHktZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2pzL2NhbGxlci1wcm9wZXJ0eS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDE5MDI4NSkK
KysrIExheW91dFRlc3RzL2pzL2NhbGxlci1wcm9wZXJ0eS1leHBlY3RlZC50eHQJKHdvcmtpbmcg
Y29weSkKQEAgLTEwLDEwICsxMCwxNCBAQCBQQVNTIG5vblN0cmljdENhbGxlcihub25TdHJpY3RD
YWxsZWUpIGlzCiBQQVNTIG5vblN0cmljdENhbGxlcihzdHJpY3RDYWxsZWUpIHRocmV3IGV4Y2Vw
dGlvbiBUeXBlRXJyb3I6IFR5cGUgZXJyb3IuCiBQQVNTIHN0cmljdENhbGxlcihub25TdHJpY3RD
YWxsZWUpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IEZ1bmN0aW9uLmNhbGxlciB1c2VkIHRv
IHJldHJpZXZlIHN0cmljdCBjYWxsZXIuCiBQQVNTIHN0cmljdENhbGxlcihzdHJpY3RDYWxsZWUp
IHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IFR5cGUgZXJyb3IuCitQQVNTIHN0cmljdFRhaWxD
YWxsZXIobm9uU3RyaWN0Q2FsbGVlKSBpcyBudWxsCitQQVNTIHN0cmljdFRhaWxDYWxsZXIoc3Ry
aWN0Q2FsbGVlKSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBUeXBlIGVycm9yLgogUEFTUyBu
b25TdHJpY3RDYWxsZXIoYm91bmROb25TdHJpY3RDYWxsZWUpIGlzIG5vblN0cmljdENhbGxlcgog
UEFTUyBub25TdHJpY3RDYWxsZXIoYm91bmRTdHJpY3RDYWxsZWUpIHRocmV3IGV4Y2VwdGlvbiBU
eXBlRXJyb3I6IFR5cGUgZXJyb3IuCiBQQVNTIHN0cmljdENhbGxlcihib3VuZE5vblN0cmljdENh
bGxlZSkgdGhyZXcgZXhjZXB0aW9uIFR5cGVFcnJvcjogRnVuY3Rpb24uY2FsbGVyIHVzZWQgdG8g
cmV0cmlldmUgc3RyaWN0IGNhbGxlci4KIFBBU1Mgc3RyaWN0Q2FsbGVyKGJvdW5kU3RyaWN0Q2Fs
bGVlKSB0aHJldyBleGNlcHRpb24gVHlwZUVycm9yOiBUeXBlIGVycm9yLgorUEFTUyBzdHJpY3RU
YWlsQ2FsbGVyKGJvdW5kTm9uU3RyaWN0Q2FsbGVlKSBpcyBudWxsCitQQVNTIHN0cmljdFRhaWxD
YWxsZXIoYm91bmRTdHJpY3RDYWxsZWUpIHRocmV3IGV4Y2VwdGlvbiBUeXBlRXJyb3I6IFR5cGUg
ZXJyb3IuCiBQQVNTIG5vblN0cmljdEdldHRlcihub25TdHJpY3RBY2Nlc3NvcikgaXMgbm9uU3Ry
aWN0R2V0dGVyCiBQQVNTIG5vblN0cmljdFNldHRlcihub25TdHJpY3RBY2Nlc3NvcikgaXMgdHJ1
ZQogUEFTUyBub25TdHJpY3RHZXR0ZXIoc3RyaWN0QWNjZXNzb3IpIHRocmV3IGV4Y2VwdGlvbiBU
eXBlRXJyb3I6IFR5cGUgZXJyb3IuCkluZGV4OiBMYXlvdXRUZXN0cy9qcy9zY3JpcHQtdGVzdHMv
Y2FsbGVyLXByb3BlcnR5LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3NjcmlwdC10
ZXN0cy9jYWxsZXItcHJvcGVydHkuanMJKHJldmlzaW9uIDE5MDI4NSkKKysrIExheW91dFRlc3Rz
L2pzL3NjcmlwdC10ZXN0cy9jYWxsZXItcHJvcGVydHkuanMJKHdvcmtpbmcgY29weSkKQEAgLTIz
LDExICsyMywxNSBAQCBzaG91bGRCZSgnY2hpbGRIYXNDYWxsZXJXaGVuQ2FsbGVkRnJvbVdpCiBm
dW5jdGlvbiBub25TdHJpY3RDYWxsZWUoKSB7IHJldHVybiBub25TdHJpY3RDYWxsZWUuY2FsbGVy
OyB9CiBmdW5jdGlvbiBzdHJpY3RDYWxsZWUoKSB7ICJ1c2Ugc3RyaWN0IjsgcmV0dXJuIHN0cmlj
dENhbGxlZS5jYWxsZXI7IH0KIGZ1bmN0aW9uIG5vblN0cmljdENhbGxlcih4KSB7IHJldHVybiB4
KCk7IH0KLWZ1bmN0aW9uIHN0cmljdENhbGxlcih4KSB7ICJ1c2Ugc3RyaWN0IjsgcmV0dXJuIHgo
KTsgfQorLy8gVGFpbCBjYWxscyBsZWFrIGFuZCBzaG93IG91ciBjYWxsZXIncyBjYWxsZXIsIHdo
aWNoIGlzIG51bGwgaGVyZQorZnVuY3Rpb24gc3RyaWN0Q2FsbGVyKHgpIHsgInVzZSBzdHJpY3Qi
OyB2YXIgcmVzdWx0ID0geCgpOyByZXR1cm4gcmVzdWx0OyB9CitmdW5jdGlvbiBzdHJpY3RUYWls
Q2FsbGVyKHgpIHsgInVzZSBzdHJpY3QiOyByZXR1cm4geCgpOyB9CiBzaG91bGRCZSgibm9uU3Ry
aWN0Q2FsbGVyKG5vblN0cmljdENhbGxlZSkiLCAibm9uU3RyaWN0Q2FsbGVyIik7CiBzaG91bGRU
aHJvdygibm9uU3RyaWN0Q2FsbGVyKHN0cmljdENhbGxlZSkiLCAnIlR5cGVFcnJvcjogVHlwZSBl
cnJvciInKTsKIHNob3VsZFRocm93KCJzdHJpY3RDYWxsZXIobm9uU3RyaWN0Q2FsbGVlKSIsICci
VHlwZUVycm9yOiBGdW5jdGlvbi5jYWxsZXIgdXNlZCB0byByZXRyaWV2ZSBzdHJpY3QgY2FsbGVy
IicpOwogc2hvdWxkVGhyb3coInN0cmljdENhbGxlcihzdHJpY3RDYWxsZWUpIiwgJyJUeXBlRXJy
b3I6IFR5cGUgZXJyb3IiJyk7CitzaG91bGRCZSgic3RyaWN0VGFpbENhbGxlcihub25TdHJpY3RD
YWxsZWUpIiwgIm51bGwiKTsKK3Nob3VsZFRocm93KCJzdHJpY3RUYWlsQ2FsbGVyKHN0cmljdENh
bGxlZSkiLCAnIlR5cGVFcnJvcjogVHlwZSBlcnJvciInKTsKIAogLy8gLmNhbGxlciB3aXRoaW4g
YSBib3VuZCBmdW5jdGlvbiByZWFjaGVzIHRoZSBjYWxsZXIsIGlnbm9yaW5nIHRoZSBiaW5kaW5n
LgogdmFyIGJvdW5kTm9uU3RyaWN0Q2FsbGVlID0gbm9uU3RyaWN0Q2FsbGVlLmJpbmQoKTsKQEAg
LTM2LDYgKzQwLDggQEAgc2hvdWxkQmUoIm5vblN0cmljdENhbGxlcihib3VuZE5vblN0cmljdAog
c2hvdWxkVGhyb3coIm5vblN0cmljdENhbGxlcihib3VuZFN0cmljdENhbGxlZSkiLCAnIlR5cGVF
cnJvcjogVHlwZSBlcnJvciInKTsKIHNob3VsZFRocm93KCJzdHJpY3RDYWxsZXIoYm91bmROb25T
dHJpY3RDYWxsZWUpIiwgJyJUeXBlRXJyb3I6IEZ1bmN0aW9uLmNhbGxlciB1c2VkIHRvIHJldHJp
ZXZlIHN0cmljdCBjYWxsZXIiJyk7CiBzaG91bGRUaHJvdygic3RyaWN0Q2FsbGVyKGJvdW5kU3Ry
aWN0Q2FsbGVlKSIsICciVHlwZUVycm9yOiBUeXBlIGVycm9yIicpOworc2hvdWxkQmUoInN0cmlj
dFRhaWxDYWxsZXIoYm91bmROb25TdHJpY3RDYWxsZWUpIiwgIm51bGwiKTsKK3Nob3VsZFRocm93
KCJzdHJpY3RUYWlsQ2FsbGVyKGJvdW5kU3RyaWN0Q2FsbGVlKSIsICciVHlwZUVycm9yOiBUeXBl
IGVycm9yIicpOwogCiAvLyBDaGVjayB0aGF0IC5jYWxsZXIgd29ya3MgKG9yIHRocm93cykgYXMg
ZXhwZWN0ZWQsIG92ZXIgYW4gYWNjZXNzb3IgY2FsbC4KIGZ1bmN0aW9uIGdldEZvb0dldHRlcih4
KSB7IHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHgsICdmb28nKS5nZXQ7
IH0K
</data>

          </attachment>
      

    </bug>

</bugzilla>