<?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>149936</bug_id>
          
          <creation_ts>2015-10-08 14:56:25 -0700</creation_ts>
          <short_desc>FTL should generate code to call slow paths lazily</short_desc>
          <delta_ts>2015-10-12 12:36:53 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>149432</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Filip Pizlo">fpizlo</assigned_to>
          <cc>barraclough</cc>
    
    <cc>benjamin</cc>
    
    <cc>bfulgham</cc>
    
    <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenb</cc>
    
    <cc>msaboff</cc>
    
    <cc>nrotem</cc>
    
    <cc>oliver</cc>
    
    <cc>ossy</cc>
    
    <cc>saam</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1131730</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-08 14:56:25 -0700</bug_when>
    <thetext>Patch forthcomihg.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1131733</commentid>
    <comment_count>1</comment_count>
      <attachid>262717</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-08 14:59:17 -0700</bug_when>
    <thetext>Created attachment 262717
what I&apos;m thinking so far</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1131805</commentid>
    <comment_count>2</comment_count>
      <attachid>262735</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-08 18:31:25 -0700</bug_when>
    <thetext>Created attachment 262735
more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1131819</commentid>
    <comment_count>3</comment_count>
      <attachid>262741</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-08 21:20:11 -0700</bug_when>
    <thetext>Created attachment 262741
more things</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1131981</commentid>
    <comment_count>4</comment_count>
      <attachid>262786</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-09 12:26:45 -0700</bug_when>
    <thetext>Created attachment 262786
it&apos;s doing things</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1132001</commentid>
    <comment_count>5</comment_count>
      <attachid>262792</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-09 13:53:40 -0700</bug_when>
    <thetext>Created attachment 262792
even more powerful but probably totally wrong

I&apos;ve rewritten the store barrier slow path to do this thing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1132164</commentid>
    <comment_count>6</comment_count>
      <attachid>262832</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-10 14:31:21 -0700</bug_when>
    <thetext>Created attachment 262832
passing more tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1132165</commentid>
    <comment_count>7</comment_count>
      <attachid>262833</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-10 15:02:01 -0700</bug_when>
    <thetext>Created attachment 262833
and now, with documentation</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1132179</commentid>
    <comment_count>8</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-10 16:57:35 -0700</bug_when>
    <thetext>This looks pretty good.

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

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/secondary/OpenSource/WebKitBuild/Release/jsc (r190843)
&quot;LazySlowPath&quot; at /Volumes/Data/quinary/OpenSource/WebKitBuild/Release/jsc (r190843)

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

                                                        TipOfTree                LazySlowPath                                   
SunSpider:
   3d-cube                                            4.5599+-0.0771            4.5555+-0.0626        
   3d-morph                                           5.2700+-0.0706     ?      5.2854+-0.0451        ?
   3d-raytrace                                        5.7394+-1.1955            5.2326+-0.1359          might be 1.0968x faster
   access-binary-trees                                2.1200+-0.0480     ?      2.2402+-0.1966        ? might be 1.0567x slower
   access-fannkuch                                    5.5733+-0.1912     ?      5.5751+-0.0696        ?
   access-nbody                                       2.4866+-0.0503            2.4482+-0.0164          might be 1.0157x faster
   access-nsieve                                      3.0231+-0.0142     ?      3.1079+-0.1243        ? might be 1.0280x slower
   bitops-3bit-bits-in-byte                           1.1541+-0.0260     ?      1.1630+-0.0224        ?
   bitops-bits-in-byte                                3.1907+-0.0369     ?      3.2213+-0.0322        ?
   bitops-bitwise-and                                 1.9948+-0.0241     ?      2.0137+-0.0343        ?
   bitops-nsieve-bits                                 2.9931+-0.0522     ?      3.0136+-0.0376        ?
   controlflow-recursive                              2.5876+-0.2948            2.3744+-0.0731          might be 1.0898x faster
   crypto-aes                                         3.9821+-0.1910            3.9443+-0.1203        
   crypto-md5                                         2.4848+-0.0685            2.4731+-0.0515        
   crypto-sha1                                        2.4888+-0.1605            2.4411+-0.1793          might be 1.0196x faster
   date-format-tofte                                  6.5467+-0.1576     ?      6.6171+-0.1328        ? might be 1.0108x slower
   date-format-xparb                                  4.6180+-0.0928            4.6145+-0.0882        
   math-cordic                                        2.8903+-0.1356            2.8130+-0.1001          might be 1.0275x faster
   math-partial-sums                                  4.7257+-0.0253     ?      4.7305+-0.0473        ?
   math-spectral-norm                                 1.9030+-0.0165     ?      2.0984+-0.3821        ? might be 1.1027x slower
   regexp-dna                                         6.4436+-0.2049            6.1443+-0.1255          might be 1.0487x faster
   string-base64                                      4.4787+-0.1289            4.3643+-0.1267          might be 1.0262x faster
   string-fasta                                       5.9572+-0.2529     ?      6.1298+-0.4133        ? might be 1.0290x slower
   string-tagcloud                                    7.7469+-0.0844     ?      7.7907+-0.2513        ?
   string-unpack-code                                17.6701+-0.8544     ?     17.9801+-0.4594        ? might be 1.0175x slower
   string-validate-input                              4.4187+-0.0757     ?      4.4946+-0.0675        ? might be 1.0172x slower

   &lt;arithmetic&gt;                                       4.5018+-0.0493            4.4949+-0.0266          might be 1.0015x faster

                                                        TipOfTree                LazySlowPath                                   
LongSpider:
   3d-cube                                          798.8012+-3.4424          795.1954+-4.4358        
   3d-morph                                        1502.9157+-8.1223         1497.8638+-6.8818        
   3d-raytrace                                      596.9096+-3.8047     ?    599.0289+-8.0056        ?
   access-binary-trees                              863.1955+-135.0456        798.0858+-10.4401         might be 1.0816x faster
   access-fannkuch                                  279.6933+-5.3808          278.5130+-5.7043        
   access-nbody                                     511.2093+-4.5734     ?    511.3471+-2.6288        ?
   access-nsieve                                    381.3660+-10.9335         380.7803+-12.9754       
   bitops-3bit-bits-in-byte                          33.5653+-0.7966           33.5339+-0.2551        
   bitops-bits-in-byte                               73.7946+-2.2019           72.9859+-0.6020          might be 1.0111x faster
   bitops-nsieve-bits                               411.1452+-3.1554     ^    402.9912+-3.5793        ^ definitely 1.0202x faster
   controlflow-recursive                            441.4479+-10.1540         428.4468+-5.1807          might be 1.0303x faster
   crypto-aes                                       553.9446+-8.8132     ?    554.2924+-4.1930        ?
   crypto-md5                                       458.2006+-26.6925         446.0991+-25.0305         might be 1.0271x faster
   crypto-sha1                                      641.7301+-2.6411          641.5578+-10.3515       
   date-format-tofte                                484.3629+-6.9659     ?    490.5514+-6.6598        ? might be 1.0128x slower
   date-format-xparb                                664.0504+-19.7548    ?    682.3390+-73.9696       ? might be 1.0275x slower
   hash-map                                         149.8577+-1.0211     ?    151.1710+-2.1239        ?
   math-cordic                                      484.7740+-8.8615          481.1595+-4.6527        
   math-partial-sums                                458.2731+-2.3858     !    464.0924+-2.5658        ! definitely 1.0127x slower
   math-spectral-norm                               551.1650+-2.6338          549.2035+-1.4386        
   string-base64                                    374.5077+-2.2769     ?    379.1349+-4.8093        ? might be 1.0124x slower
   string-fasta                                     362.0370+-5.0292          354.2418+-2.8520          might be 1.0220x faster
   string-tagcloud                                  175.5524+-2.4453          174.7506+-1.5624        

   &lt;geometric&gt;                                      387.6505+-2.5034          385.3944+-2.3300          might be 1.0059x faster

                                                        TipOfTree                LazySlowPath                                   
V8Spider:
   crypto                                            48.0238+-2.5508           47.5381+-2.2105          might be 1.0102x faster
   deltablue                                         77.6671+-3.4811     ?     82.0880+-18.3491       ? might be 1.0569x slower
   earley-boyer                                      41.4977+-0.3335           41.1567+-0.8958        
   raytrace                                          31.4837+-1.1066           30.4939+-2.5962          might be 1.0325x faster
   regexp                                            60.0533+-0.3582     ?     60.2124+-0.3817        ?
   richards                                          53.8917+-1.5554     ^     51.2794+-0.8108        ^ definitely 1.0509x faster
   splay                                             36.7811+-1.0020     ?     37.1759+-0.3847        ? might be 1.0107x slower

   &lt;geometric&gt;                                       47.8945+-0.5149           47.5461+-1.0503          might be 1.0073x faster

                                                        TipOfTree                LazySlowPath                                   
Octane:
   encrypt                                           0.16614+-0.00312          0.16392+-0.00184         might be 1.0135x faster
   decrypt                                           2.97586+-0.01445    ^     2.86703+-0.02287       ^ definitely 1.0380x faster
   deltablue                                x2       0.13682+-0.00127          0.13511+-0.00131         might be 1.0127x faster
   earley                                            0.28626+-0.00342    ^     0.28153+-0.00085       ^ definitely 1.0168x faster
   boyer                                             4.36352+-0.09330    ?     4.36626+-0.07979       ?
   navier-stokes                            x2       4.85984+-0.03420    ?     4.88438+-0.08615       ?
   raytrace                                 x2       0.85684+-0.00706    ?     0.85987+-0.01824       ?
   richards                                 x2       0.08865+-0.00061          0.08762+-0.00164         might be 1.0117x faster
   splay                                    x2       0.35061+-0.00248          0.34806+-0.00213       
   regexp                                   x2      24.62851+-0.61705         24.39984+-0.28256       
   pdfjs                                    x2      36.60733+-0.30227    ?    37.29369+-0.97461       ? might be 1.0187x slower
   mandreel                                 x2      42.79910+-0.90648         42.46997+-0.52105       
   gbemu                                    x2      31.12277+-0.41684    ?    32.24052+-3.35507       ? might be 1.0359x slower
   closure                                           0.57600+-0.00329    ?     0.58228+-0.01087       ? might be 1.0109x slower
   jquery                                            7.29801+-0.09752          7.26817+-0.03481       
   box2d                                    x2       9.09918+-0.07431          9.08195+-0.07466       
   zlib                                     x2     381.73403+-2.55516        379.98758+-12.38154      
   typescript                               x2     663.00387+-6.11934        658.09197+-3.65857       

   &lt;geometric&gt;                                       5.32650+-0.01557          5.31397+-0.03622         might be 1.0024x faster

                                                        TipOfTree                LazySlowPath                                   
Kraken:
   ai-astar                                          129.038+-2.272            125.891+-1.766           might be 1.0250x faster
   audio-beat-detection                               48.399+-1.264             48.362+-0.999         
   audio-dft                                          96.603+-1.640             96.312+-2.166         
   audio-fft                                          34.730+-0.083      ?      34.818+-0.148         ?
   audio-oscillator                                   55.616+-0.950      ?      56.266+-1.079         ? might be 1.0117x slower
   imaging-darkroom                                   60.559+-1.449             60.457+-0.770         
   imaging-desaturate                                 48.814+-1.277             48.805+-1.774         
   imaging-gaussian-blur                              86.091+-1.431             85.360+-0.694         
   json-parse-financial                               37.234+-0.423      ?      38.371+-0.759         ? might be 1.0305x slower
   json-stringify-tinderbox                           24.899+-7.129             22.317+-1.338           might be 1.1157x faster
   stanford-crypto-aes                                39.410+-0.420      ?      39.836+-0.304         ? might be 1.0108x slower
   stanford-crypto-ccm                                35.917+-1.514             34.538+-0.463           might be 1.0399x faster
   stanford-crypto-pbkdf2                             96.329+-2.257             95.549+-1.238         
   stanford-crypto-sha256-iterative                   36.092+-0.374             35.982+-0.468         

   &lt;arithmetic&gt;                                       59.266+-0.495             58.776+-0.238           might be 1.0083x faster

                                                        TipOfTree                LazySlowPath                                   
JSRegress:
   abc-forward-loop-equal                            29.3670+-0.5741     ?     29.3919+-0.5990        ?
   abc-postfix-backward-loop                         29.6050+-1.0697     ?     29.8193+-2.1810        ?
   abc-simple-backward-loop                          29.1825+-0.8567           28.9661+-0.2753        
   abc-simple-forward-loop                           28.7472+-0.3244     ?     29.2132+-0.4565        ? might be 1.0162x slower
   abc-skippy-loop                                   20.7800+-0.2370     ?     20.8259+-0.3335        ?
   abs-boolean                                        2.4646+-0.0506            2.4623+-0.0403        
   adapt-to-double-divide                            16.0182+-0.0809     ?     16.0631+-0.1649        ?
   aliased-arguments-getbyval                         1.2399+-0.0996            1.2150+-0.0751          might be 1.0205x faster
   allocate-big-object                                2.5188+-0.0887     ?      2.5832+-0.0614        ? might be 1.0256x slower
   arguments-named-and-reflective                    10.3802+-0.3735           10.2483+-0.1989          might be 1.0129x faster
   arguments-out-of-bounds                            9.3019+-0.3738     ?      9.8142+-1.3865        ? might be 1.0551x slower
   arguments-strict-mode                              9.3354+-0.2395     ?      9.5107+-0.3201        ? might be 1.0188x slower
   arguments                                          8.4136+-0.1791            8.3568+-0.1225        
   arity-mismatch-inlining                            0.8662+-0.0283            0.8625+-0.0260        
   array-access-polymorphic-structure                 7.0489+-0.1127     ?      7.1294+-0.2658        ? might be 1.0114x slower
   array-nonarray-polymorhpic-access                 23.8043+-1.7085           23.1710+-1.0015          might be 1.0273x faster
   array-prototype-every                             75.3183+-0.9236           74.7475+-0.8515        
   array-prototype-forEach                           79.7410+-12.1698          74.7841+-1.6170          might be 1.0663x faster
   array-prototype-map                               81.3262+-1.3079           80.3442+-0.6912          might be 1.0122x faster
   array-prototype-reduce                            70.9712+-0.7570     ?     71.1421+-0.6082        ?
   array-prototype-reduceRight                       71.3678+-0.8386           70.7635+-0.8550        
   array-prototype-some                              75.9908+-2.1327           74.2661+-0.5914          might be 1.0232x faster
   array-splice-contiguous                           20.6342+-0.2658     ?     20.7008+-0.4625        ?
   array-with-double-add                              3.4131+-0.0215     ?      3.4743+-0.1210        ? might be 1.0179x slower
   array-with-double-increment                        3.0489+-0.0328     ?      3.0496+-0.0172        ?
   array-with-double-mul-add                          4.2573+-0.1057            4.1632+-0.0278          might be 1.0226x faster
   array-with-double-sum                              3.1955+-0.0600            3.1904+-0.0331        
   array-with-int32-add-sub                           5.6291+-0.0370     ?      5.6935+-0.1229        ? might be 1.0114x slower
   array-with-int32-or-double-sum                     3.2351+-0.0503     ?      3.3057+-0.1019        ? might be 1.0218x slower
   ArrayBuffer-DataView-alloc-large-long-lived   
                                                     25.6834+-0.2689     ?     25.8426+-0.9872        ?
   ArrayBuffer-DataView-alloc-long-lived             11.5906+-0.1148     ?     11.6357+-0.1895        ?
   ArrayBuffer-Int32Array-byteOffset                  3.4913+-0.0521     ?      3.5344+-0.0974        ? might be 1.0123x slower
   ArrayBuffer-Int8Array-alloc-large-long-lived   
                                                     26.1807+-0.3659           25.6745+-0.1703          might be 1.0197x faster
   ArrayBuffer-Int8Array-alloc-long-lived-buffer   
                                                     19.3326+-0.1986           19.3112+-0.3302        
   ArrayBuffer-Int8Array-alloc-long-lived            11.0093+-0.0959           10.8326+-0.0977          might be 1.0163x faster
   ArrayBuffer-Int8Array-alloc                        9.3114+-0.1343     ?      9.3619+-0.1644        ?
   arrowfunction-call                                10.7462+-0.1039     ?     11.0066+-0.4434        ? might be 1.0242x slower
   asmjs_bool_bug                                     7.4315+-0.0387     ?      7.4363+-0.0377        ?
   assign-custom-setter-polymorphic                   2.4586+-0.0231     ^      2.4098+-0.0180        ^ definitely 1.0202x faster
   assign-custom-setter                               3.3440+-0.1107     ?      3.4344+-0.2462        ? might be 1.0270x slower
   basic-set                                          7.4404+-0.2046            7.3163+-0.1845          might be 1.0170x faster
   big-int-mul                                        3.5709+-0.1967            3.4463+-0.0210          might be 1.0362x faster
   boolean-test                                       3.0446+-0.0370            3.0341+-0.0502        
   branch-fold                                        3.6897+-0.1543            3.5770+-0.0152          might be 1.0315x faster
   branch-on-string-as-boolean                       16.8993+-0.6694           16.6792+-0.4084          might be 1.0132x faster
   by-val-generic                                     2.4941+-0.0444     ?      2.4972+-0.0546        ?
   call-spread-apply                                 26.4138+-0.8725     ?     26.7948+-0.6387        ? might be 1.0144x slower
   call-spread-call                                  20.7230+-0.9460     ?     20.9724+-1.8077        ? might be 1.0120x slower
   captured-assignments                               0.4479+-0.0298     ?      0.4507+-0.0532        ?
   cast-int-to-double                                 5.1251+-0.1271            5.1192+-0.0714        
   cell-argument                                      5.9630+-0.2656            5.7973+-0.2402          might be 1.0286x faster
   cfg-simplify                                       2.9256+-0.0712            2.9249+-0.0676        
   chain-getter-access                                8.3702+-0.0904            8.3199+-0.1364        
   cmpeq-obj-to-obj-other                            12.2488+-1.3522           12.1508+-1.1670        
   constant-test                                      4.7646+-0.0782     ?      4.8276+-0.0738        ? might be 1.0132x slower
   create-lots-of-functions                           9.7007+-0.7030            9.6286+-0.6474        
   cse-new-array-buffer                               2.3788+-0.0700     ?      2.4535+-0.1602        ? might be 1.0314x slower
   cse-new-array                                      2.3887+-0.0494     ?      2.4084+-0.0478        ?
   custom-setter-getter-as-put-get-by-id              0.5628+-0.0808            0.5218+-0.0423          might be 1.0786x faster
   DataView-custom-properties                        30.7096+-0.4890           30.4730+-0.2186        
   delay-tear-off-arguments-strictmode               11.7510+-0.0932     ?     11.9025+-0.4817        ? might be 1.0129x slower
   deltablue-varargs                                163.9812+-3.2302          162.5600+-5.8814        
   destructuring-arguments                          160.0967+-1.8746     ?    161.0539+-1.8152        ?
   destructuring-parameters-overridden-by-function   
                                                      0.4518+-0.0128     ?      0.4534+-0.0124        ?
   destructuring-swap                                 4.8060+-0.1164            4.7576+-0.0588          might be 1.0102x faster
   direct-arguments-getbyval                          1.2362+-0.0560     ?      1.2402+-0.0372        ?
   div-boolean-double                                 5.2439+-0.1148     ?      5.2968+-0.0849        ? might be 1.0101x slower
   div-boolean                                        8.1296+-0.0347     ?      8.1494+-0.1589        ?
   double-get-by-val-out-of-bounds                    4.3836+-0.0802            4.3356+-0.0628          might be 1.0111x faster
   double-pollution-getbyval                          8.6259+-0.0253            8.6191+-0.0229        
   double-pollution-putbyoffset                       3.6270+-0.1120            3.6150+-0.0386        
   double-real-use                                   23.3433+-0.1511     ?     24.1882+-1.6044        ? might be 1.0362x slower
   double-to-int32-typed-array-no-inline              2.2192+-0.1019            2.1472+-0.0513          might be 1.0335x faster
   double-to-int32-typed-array                        2.0547+-0.0659            2.0494+-0.0403        
   double-to-uint32-typed-array-no-inline             2.3489+-0.1286            2.2843+-0.0727          might be 1.0283x faster
   double-to-uint32-typed-array                       2.1037+-0.0430            2.0980+-0.0310        
   elidable-new-object-dag                           33.4324+-0.5871     ?     33.8960+-0.5547        ? might be 1.0139x slower
   elidable-new-object-roflcopter                    34.2512+-4.2867           32.7433+-1.0972          might be 1.0460x faster
   elidable-new-object-then-call                     32.0888+-1.2802           31.9394+-1.0022        
   elidable-new-object-tree                          36.9382+-0.9992           36.5475+-0.2659          might be 1.0107x faster
   empty-string-plus-int                              4.7880+-0.1269            4.7707+-0.0562        
   emscripten-cube2hash                              26.0525+-1.4632     ?     26.3471+-1.5037        ? might be 1.0113x slower
   exit-length-on-plain-object                       14.7318+-0.1039     ?     14.9639+-0.4612        ? might be 1.0158x slower
   external-arguments-getbyval                        1.2526+-0.0766     ?      1.3114+-0.0826        ? might be 1.0469x slower
   external-arguments-putbyval                        2.1706+-0.1352     ?      2.2178+-0.0867        ? might be 1.0218x slower
   fixed-typed-array-storage-var-index                1.2279+-0.0092     ?      1.2471+-0.0403        ? might be 1.0157x slower
   fixed-typed-array-storage                          0.9509+-0.0391            0.9308+-0.0293          might be 1.0216x faster
   Float32Array-matrix-mult                           3.9956+-0.0546            3.9757+-0.0259        
   Float32Array-to-Float64Array-set                  49.5357+-2.0413           48.9205+-0.7007          might be 1.0126x faster
   Float64Array-alloc-long-lived                     59.0958+-0.5459     ?     59.1653+-1.3932        ?
   Float64Array-to-Int16Array-set                    61.0013+-0.6496     ^     59.5512+-0.4463        ^ definitely 1.0244x faster
   fold-double-to-int                                11.8719+-0.1180     ?     11.8783+-0.0956        ?
   fold-get-by-id-to-multi-get-by-offset-rare-int   
                                                     11.0314+-0.9212           10.6917+-0.8768          might be 1.0318x faster
   fold-get-by-id-to-multi-get-by-offset              9.6885+-0.4845     ?     10.5125+-0.9120        ? might be 1.0850x slower
   fold-multi-get-by-offset-to-get-by-offset   
                                                      8.6114+-1.4912     ?      8.9487+-1.5546        ? might be 1.0392x slower
   fold-multi-get-by-offset-to-poly-get-by-offset   
                                                      8.9432+-0.6927     ?      9.1591+-0.8500        ? might be 1.0241x slower
   fold-multi-put-by-offset-to-poly-put-by-offset   
                                                      8.7901+-1.2703     ?      9.4038+-0.3656        ? might be 1.0698x slower
   fold-multi-put-by-offset-to-put-by-offset   
                                                     10.0044+-0.9269            9.5695+-0.2726          might be 1.0454x faster
   fold-multi-put-by-offset-to-replace-or-transition-put-by-offset   
                                                      9.2658+-0.4312     ?      9.5878+-1.1038        ? might be 1.0347x slower
   fold-put-by-id-to-multi-put-by-offset             12.1638+-0.9794           11.9233+-1.2340          might be 1.0202x faster
   fold-put-by-val-with-string-to-multi-put-by-offset   
                                                     10.9641+-0.7812           10.4998+-0.6671          might be 1.0442x faster
   fold-put-by-val-with-symbol-to-multi-put-by-offset   
                                                     11.3741+-1.7746           11.1201+-1.3174          might be 1.0228x faster
   fold-put-structure                                 7.9530+-1.0751     ?      8.2544+-0.1892        ? might be 1.0379x slower
   for-of-iterate-array-entries                      10.6078+-0.0317           10.5708+-0.0577        
   for-of-iterate-array-keys                          3.4485+-0.0585     ?      3.4945+-0.1010        ? might be 1.0133x slower
   for-of-iterate-array-values                        3.5161+-0.2036            3.3816+-0.1152          might be 1.0398x faster
   fround                                            17.7928+-1.5483           17.0738+-0.2502          might be 1.0421x faster
   ftl-library-inlining-dataview                     58.1843+-0.4143     ?     58.6662+-1.1359        ?
   ftl-library-inlining                              97.9745+-1.5624           97.1259+-0.6130        
   function-call                                     10.5469+-0.0914     ?     10.8947+-0.8088        ? might be 1.0330x slower
   function-dot-apply                                 2.0308+-0.0363     ?      2.0444+-0.0336        ?
   function-test                                      2.7032+-0.0321     ?      2.7580+-0.0491        ? might be 1.0203x slower
   function-with-eval                                87.7772+-1.0292           87.1446+-1.9618        
   gcse-poly-get-less-obvious                        21.1309+-0.3790           21.0281+-0.3158        
   gcse-poly-get                                     22.1318+-1.4697     ?     23.0770+-1.8956        ? might be 1.0427x slower
   gcse                                               3.3726+-0.0298     ?      3.3909+-0.0650        ?
   get-by-id-bimorphic-check-structure-elimination-simple   
                                                      2.7072+-0.2078            2.6341+-0.0352          might be 1.0277x faster
   get-by-id-bimorphic-check-structure-elimination   
                                                      4.8430+-0.2587            4.6281+-0.0161          might be 1.0464x faster
   get-by-id-chain-from-try-block                     2.4062+-0.0650     ?      2.4200+-0.0325        ?
   get-by-id-check-structure-elimination              3.9060+-0.0684            3.8998+-0.0730        
   get-by-id-proto-or-self                           15.1927+-0.5787     ?     15.2297+-0.7205        ?
   get-by-id-quadmorphic-check-structure-elimination-simple   
                                                      2.8807+-0.0189            2.8706+-0.0263        
   get-by-id-self-or-proto                           15.7816+-1.3242           15.0835+-0.6334          might be 1.0463x faster
   get-by-val-out-of-bounds                           4.2115+-0.0583     ?      4.2328+-0.0503        ?
   get-by-val-with-string-bimorphic-check-structure-elimination-simple   
                                                      2.7249+-0.0360     ?      2.9009+-0.3549        ? might be 1.0646x slower
   get-by-val-with-string-bimorphic-check-structure-elimination   
                                                      6.0631+-0.0324     ?      6.0956+-0.2093        ?
   get-by-val-with-string-chain-from-try-block   
                                                      2.4433+-0.0289            2.4305+-0.0316        
   get-by-val-with-string-check-structure-elimination   
                                                      5.1728+-0.0672            5.1185+-0.0419          might be 1.0106x faster
   get-by-val-with-string-proto-or-self              15.4272+-0.6656     ?     15.5053+-0.5925        ?
   get-by-val-with-string-quadmorphic-check-structure-elimination-simple   
                                                      3.0839+-0.0338            3.0449+-0.0154          might be 1.0128x faster
   get-by-val-with-string-self-or-proto              15.7072+-1.3561           15.5603+-0.5658        
   get-by-val-with-symbol-bimorphic-check-structure-elimination-simple   
                                                      2.9580+-0.0648            2.9020+-0.0182          might be 1.0193x faster
   get-by-val-with-symbol-bimorphic-check-structure-elimination   
                                                     12.2490+-0.0423           12.2154+-0.0337        
   get-by-val-with-symbol-chain-from-try-block   
                                                      2.4783+-0.1652            2.4513+-0.0470          might be 1.0110x faster
   get-by-val-with-symbol-check-structure-elimination   
                                                     10.9527+-0.0159     ?     11.0070+-0.1109        ?
   get-by-val-with-symbol-proto-or-self              15.4757+-0.6439     ?     15.6916+-0.9106        ? might be 1.0140x slower
   get-by-val-with-symbol-quadmorphic-check-structure-elimination-simple   
                                                      3.7681+-0.2017            3.7251+-0.0983          might be 1.0115x faster
   get-by-val-with-symbol-self-or-proto              15.5771+-0.6389     ?     15.8154+-0.7590        ? might be 1.0153x slower
   get_callee_monomorphic                             2.5417+-0.4015            2.3551+-0.0558          might be 1.0792x faster
   get_callee_polymorphic                             3.3781+-0.0600     ?      3.4392+-0.0779        ? might be 1.0181x slower
   getter-no-activation                               4.7693+-0.1439            4.7371+-0.1320        
   getter-prototype                                   7.8220+-0.0576            7.8062+-0.1385        
   getter-richards-try-catch                        970.3440+-9.9184     ?    983.6841+-12.5441       ? might be 1.0137x slower
   getter-richards                                  114.8048+-3.8737          113.5520+-5.2384          might be 1.0110x faster
   getter                                             5.4112+-0.5748     ?      5.9649+-0.6318        ? might be 1.1023x slower
   global-object-access-with-mutating-structure   
                                                      5.6425+-0.0592            5.5385+-0.0746          might be 1.0188x faster
   global-var-const-infer-fire-from-opt               0.8841+-0.0809            0.7991+-0.0866          might be 1.1063x faster
   global-var-const-infer                             0.7113+-0.1035            0.6344+-0.0141          might be 1.1212x faster
   hard-overflow-check-equal                         27.3360+-0.1364     ?     27.5158+-0.4324        ?
   hard-overflow-check                               27.2447+-0.6603           27.0408+-0.3915        
   HashMap-put-get-iterate-keys                      25.0658+-1.4582     ?     26.4224+-1.7463        ? might be 1.0541x slower
   HashMap-put-get-iterate                           26.8241+-1.6266           26.4235+-0.7542          might be 1.0152x faster
   HashMap-string-put-get-iterate                    23.6803+-1.3015           22.9619+-0.7039          might be 1.0313x faster
   hoist-make-rope                                    8.6912+-1.3618            8.5734+-0.7849          might be 1.0137x faster
   hoist-poly-check-structure-effectful-loop   
                                                      3.6753+-0.0555            3.6338+-0.0563          might be 1.0114x faster
   hoist-poly-check-structure                         3.1169+-0.0813            3.0831+-0.0640          might be 1.0110x faster
   imul-double-only                                   7.7633+-0.3062            7.5973+-0.3402          might be 1.0219x faster
   imul-int-only                                      9.0631+-0.3428            8.3069+-0.8189          might be 1.0910x faster
   imul-mixed                                         7.0444+-0.2713            6.9615+-0.2947          might be 1.0119x faster
   in-four-cases                                     16.8323+-0.5395           16.8177+-0.1803        
   in-one-case-false                                  9.5669+-0.5757            9.2122+-0.0542          might be 1.0385x faster
   in-one-case-true                                   9.3559+-0.3109     ?      9.9058+-0.9195        ? might be 1.0588x slower
   in-two-cases                                       9.6513+-0.3107     ?      9.9525+-0.4761        ? might be 1.0312x slower
   indexed-properties-in-objects                      2.8101+-0.0432            2.7944+-0.0356        
   infer-closure-const-then-mov-no-inline             3.5930+-0.0416            3.5678+-0.0212        
   infer-closure-const-then-mov                      17.5088+-0.2338     ?     17.7745+-0.4306        ? might be 1.0152x slower
   infer-closure-const-then-put-to-scope-no-inline   
                                                     11.0011+-0.4060           10.9068+-0.0823        
   infer-closure-const-then-put-to-scope             22.2613+-0.3749     ?     22.2956+-0.0581        ?
   infer-closure-const-then-reenter-no-inline   
                                                     47.0961+-0.2424     ?     48.1132+-1.4880        ? might be 1.0216x slower
   infer-closure-const-then-reenter                  22.6319+-0.7032     ?     22.6542+-0.2240        ?
   infer-constant-global-property                     3.3957+-0.0207     ?      3.4019+-0.0268        ?
   infer-constant-property                            2.7268+-0.1862            2.6201+-0.0314          might be 1.0407x faster
   infer-one-time-closure-ten-vars                    7.6737+-0.1296     ?      7.7776+-0.0800        ? might be 1.0135x slower
   infer-one-time-closure-two-vars                    7.4716+-0.0936            7.3761+-0.1693          might be 1.0129x faster
   infer-one-time-closure                             7.2709+-0.1248            7.2101+-0.1843        
   infer-one-time-deep-closure                       10.6083+-0.2278     ?     11.0022+-0.8576        ? might be 1.0371x slower
   inline-arguments-access                            3.5781+-0.0440     ?      3.7284+-0.2123        ? might be 1.0420x slower
   inline-arguments-aliased-access                    3.5744+-0.0433            3.5729+-0.0815        
   inline-arguments-local-escape                      3.8764+-0.4724            3.5991+-0.0445          might be 1.0770x faster
   inline-get-scoped-var                              4.4655+-0.0452     ?      4.4987+-0.0777        ?
   inlined-put-by-id-transition                       9.2123+-0.4702            8.9753+-0.1940          might be 1.0264x faster
   inlined-put-by-val-with-string-transition   
                                                     42.5698+-3.9338           40.6547+-1.7099          might be 1.0471x faster
   inlined-put-by-val-with-symbol-transition   
                                                     40.9533+-2.4453           39.9971+-0.1956          might be 1.0239x faster
   int-or-other-abs-then-get-by-val                   4.5300+-0.0739     ?      4.5684+-0.0256        ?
   int-or-other-abs-zero-then-get-by-val             14.9861+-0.0446     ?     15.0731+-0.1291        ?
   int-or-other-add-then-get-by-val                   4.5470+-0.2638     ?      4.5692+-0.3563        ?
   int-or-other-add                                   4.9542+-0.0289     ?      4.9581+-0.0550        ?
   int-or-other-div-then-get-by-val                   3.7686+-0.0619     ?      3.9353+-0.4616        ? might be 1.0442x slower
   int-or-other-max-then-get-by-val                   3.9225+-0.0733     ?      3.9644+-0.1845        ? might be 1.0107x slower
   int-or-other-min-then-get-by-val                   3.9409+-0.4178            3.7809+-0.0425          might be 1.0423x faster
   int-or-other-mod-then-get-by-val                   3.5133+-0.0489            3.4632+-0.0413          might be 1.0145x faster
   int-or-other-mul-then-get-by-val                   3.6174+-0.0625     ?      3.6375+-0.0682        ?
   int-or-other-neg-then-get-by-val                   3.9990+-0.0335     ?      4.0193+-0.0747        ?
   int-or-other-neg-zero-then-get-by-val             15.1051+-0.1322     ?     15.1626+-0.2966        ?
   int-or-other-sub-then-get-by-val                   4.3648+-0.0348     ?      4.4406+-0.1069        ? might be 1.0174x slower
   int-or-other-sub                                   3.4951+-0.0593            3.4678+-0.0433        
   int-overflow-local                                 4.0555+-0.0392     ?      4.0742+-0.0864        ?
   Int16Array-alloc-long-lived                       43.6225+-1.2152     ?     44.1325+-0.9786        ? might be 1.0117x slower
   Int16Array-bubble-sort-with-byteLength            19.8344+-0.6968           19.4811+-0.2167          might be 1.0181x faster
   Int16Array-bubble-sort                            16.6038+-0.1833           16.5129+-0.0307        
   Int16Array-load-int-mul                            1.4422+-0.0300            1.4367+-0.0192        
   Int16Array-to-Int32Array-set                      45.5738+-0.6376           45.4064+-0.4155        
   Int32Array-alloc-large                            11.3999+-0.2273           11.3153+-0.3311        
   Int32Array-alloc-long-lived                       48.4660+-1.1699     ?     48.4732+-0.7744        ?
   Int32Array-alloc                                   3.0319+-0.0782            3.0024+-0.1048        
   Int32Array-Int8Array-view-alloc                    5.9991+-0.1804            5.9826+-0.1700        
   int52-spill                                        4.6050+-0.0670     ?      4.6251+-0.0839        ?
   Int8Array-alloc-long-lived                        39.2949+-0.9155     ?     39.4332+-1.3031        ?
   Int8Array-load-with-byteLength                     3.3848+-0.0797     ?      3.5974+-0.6406        ? might be 1.0628x slower
   Int8Array-load                                     3.4648+-0.2082            3.4030+-0.0966          might be 1.0182x faster
   integer-divide                                    10.7557+-1.2157           10.3531+-0.1264          might be 1.0389x faster
   integer-modulo                                     1.5881+-0.0140     ?      1.6021+-0.0286        ?
   is-boolean-fold-tricky                             3.8161+-0.0813            3.7635+-0.0499          might be 1.0140x faster
   is-boolean-fold                                    2.6422+-0.0278     ?      2.7084+-0.1165        ? might be 1.0250x slower
   is-function-fold-tricky-internal-function   
                                                      9.4532+-0.0679            9.2937+-0.1321          might be 1.0172x faster
   is-function-fold-tricky                            4.0306+-0.0621            3.9876+-0.0738          might be 1.0108x faster
   is-function-fold                                   2.7257+-0.0895            2.6787+-0.0561          might be 1.0176x faster
   is-number-fold-tricky                              4.0051+-0.1016            3.9528+-0.0518          might be 1.0132x faster
   is-number-fold                                     2.6702+-0.0466     ?      2.6901+-0.0863        ?
   is-object-or-null-fold-functions                   2.7424+-0.1177            2.6950+-0.0660          might be 1.0176x faster
   is-object-or-null-fold-less-tricky                 4.0413+-0.0806            4.0293+-0.1192        
   is-object-or-null-fold-tricky                      4.7805+-0.0513            4.7314+-0.0546          might be 1.0104x faster
   is-object-or-null-fold                             2.7175+-0.1070            2.6707+-0.0236          might be 1.0175x faster
   is-object-or-null-trickier-function                4.0261+-0.0608     ?      4.1040+-0.2096        ? might be 1.0194x slower
   is-object-or-null-trickier-internal-function   
                                                      9.7173+-0.1015     ?     10.2145+-1.3602        ? might be 1.0512x slower
   is-object-or-null-tricky-function                  4.0131+-0.0462            3.9943+-0.0229        
   is-object-or-null-tricky-internal-function   
                                                      7.3750+-0.0373     ^      7.1836+-0.0365        ^ definitely 1.0266x faster
   is-string-fold-tricky                              3.9844+-0.0459            3.9273+-0.0255          might be 1.0146x faster
   is-string-fold                                     2.6819+-0.0377            2.6574+-0.0459        
   is-undefined-fold-tricky                           3.3611+-0.0677            3.3330+-0.0497        
   is-undefined-fold                                  2.6429+-0.0223     ?      2.7238+-0.2269        ? might be 1.0306x slower
   JSONP-negative-0                                   0.2722+-0.0153     ?      0.2818+-0.0323        ? might be 1.0352x slower
   large-int-captured                                 4.1772+-0.2302            4.0790+-0.0452          might be 1.0241x faster
   large-int-neg                                     13.8124+-0.3379     ?     14.4538+-1.7786        ? might be 1.0464x slower
   large-int                                         12.8279+-0.2276     ?     13.0207+-0.3727        ? might be 1.0150x slower
   load-varargs-elimination                          20.0648+-0.4255     ?     20.4291+-0.8273        ? might be 1.0182x slower
   logical-not-weird-types                            3.0173+-0.0547            3.0161+-0.0266        
   logical-not                                        4.2819+-0.0361     ?      4.3296+-0.1052        ? might be 1.0111x slower
   lots-of-fields                                     8.9823+-0.1357            8.9640+-0.1204        
   make-indexed-storage                               2.8665+-0.1685     ?      2.8703+-0.1501        ?
   make-rope-cse                                      3.6203+-0.1416            3.6035+-0.0349        
   marsaglia-larger-ints                             31.8461+-1.1994           31.3162+-0.2266          might be 1.0169x faster
   marsaglia-osr-entry                               20.8161+-0.1552     ?     20.8609+-0.4290        ?
   math-with-out-of-bounds-array-values              20.9289+-0.1425     ?     21.5000+-1.2057        ? might be 1.0273x slower
   max-boolean                                        2.7077+-0.0451            2.7016+-0.0376        
   method-on-number                                  15.3310+-0.1014           15.2623+-0.0858        
   min-boolean                                        2.6440+-0.0374            2.6334+-0.0399        
   minus-boolean-double                               3.0637+-0.0271     ?      3.1176+-0.1202        ? might be 1.0176x slower
   minus-boolean                                      2.3354+-0.0386     ?      2.3423+-0.0268        ?
   misc-strict-eq                                    28.5207+-1.0769           28.0711+-1.1651          might be 1.0160x faster
   mod-boolean-double                                11.1957+-0.3565           11.0237+-0.0833          might be 1.0156x faster
   mod-boolean                                        8.2718+-0.0847     ?      8.3071+-0.1119        ?
   mul-boolean-double                                 3.6338+-0.0435     ?      3.6920+-0.1960        ? might be 1.0160x slower
   mul-boolean                                        2.8065+-0.0482     ?      2.8093+-0.0198        ?
   neg-boolean                                        3.0913+-0.0313            3.0783+-0.0209        
   negative-zero-divide                               0.3755+-0.0129            0.3576+-0.0106          might be 1.0502x faster
   negative-zero-modulo                               0.3787+-0.0300            0.3563+-0.0088          might be 1.0627x faster
   negative-zero-negate                               0.3459+-0.0334     ?      0.3469+-0.0244        ?
   nested-function-parsing                           45.4895+-0.6117           45.4073+-1.0255        
   new-array-buffer-dead                             86.3708+-0.5707     ?     86.7158+-0.5472        ?
   new-array-buffer-push                              6.2376+-0.2692            6.1499+-0.2123          might be 1.0143x faster
   new-array-dead                                    14.8133+-0.5553     ?     15.2627+-0.3982        ? might be 1.0303x slower
   new-array-push                                     3.4535+-0.0302     ?      3.5293+-0.3030        ? might be 1.0219x slower
   no-inline-constructor                             31.2910+-0.1132     ^     30.3049+-0.1992        ^ definitely 1.0325x faster
   number-test                                        2.9847+-0.0131     ?      3.0214+-0.0402        ? might be 1.0123x slower
   object-closure-call                                4.8717+-0.0517     ?      5.4961+-1.5145        ? might be 1.1282x slower
   object-get-own-property-symbols-on-large-array   
                                                      4.3147+-0.2025            4.1968+-0.1669          might be 1.0281x faster
   object-test                                        2.7040+-0.0160            2.6983+-0.0405        
   obvious-sink-pathology-taken                      97.1811+-1.0740           96.7818+-1.6108        
   obvious-sink-pathology                            29.4484+-0.3327           29.3926+-0.4618        
   obviously-elidable-new-object                     28.3073+-0.5155           28.2855+-0.3462        
   plus-boolean-arith                                 2.4135+-0.0653     ?      2.4637+-0.1210        ? might be 1.0208x slower
   plus-boolean-double                                3.1204+-0.0168     ?      3.1387+-0.0612        ?
   plus-boolean                                       2.6348+-0.1238            2.5593+-0.0448          might be 1.0295x faster
   poly-chain-access-different-prototypes-simple   
                                                      2.5753+-0.0309     ?      2.6100+-0.0387        ? might be 1.0135x slower
   poly-chain-access-different-prototypes             2.5501+-0.0344            2.5496+-0.0374        
   poly-chain-access-simpler                          2.5845+-0.0342     ?      2.5927+-0.0235        ?
   poly-chain-access                                  2.5018+-0.0315     ?      2.5173+-0.0436        ?
   poly-stricteq                                     49.6485+-1.1436     ?     49.6996+-1.0932        ?
   polymorphic-array-call                             1.2955+-0.0837            1.2527+-0.0604          might be 1.0342x faster
   polymorphic-get-by-id                              2.8857+-0.0449     ?      2.9395+-0.0603        ? might be 1.0186x slower
   polymorphic-put-by-id                             27.6441+-0.8913           27.3924+-0.5811        
   polymorphic-put-by-val-with-string                28.2394+-0.3981           28.1709+-0.9008        
   polymorphic-put-by-val-with-symbol                28.0359+-0.2508     ?     28.0816+-0.4713        ?
   polymorphic-structure                             12.2614+-0.1766     ?     12.3373+-0.4535        ?
   polyvariant-monomorphic-get-by-id                  7.0106+-0.9037     ?      7.0347+-1.1021        ?
   proto-getter-access                                8.3163+-0.1358     ?      8.3745+-0.1324        ?
   prototype-access-with-mutating-prototype           5.4070+-0.1842     ?      5.4637+-0.1236        ? might be 1.0105x slower
   put-by-id-replace-and-transition                   7.7956+-0.4007     ?      8.1045+-0.5233        ? might be 1.0396x slower
   put-by-id-slightly-polymorphic                     2.7145+-0.1060            2.6980+-0.0720        
   put-by-id                                          9.8105+-0.3287            9.5541+-0.1634          might be 1.0268x faster
   put-by-val-direct                                  0.3922+-0.0753            0.3475+-0.0167          might be 1.1287x faster
   put-by-val-large-index-blank-indexing-type   
                                                      5.5421+-0.4691            5.4023+-0.4025          might be 1.0259x faster
   put-by-val-machine-int                             2.5581+-0.0788            2.5194+-0.0343          might be 1.0154x faster
   put-by-val-with-string-replace-and-transition   
                                                      9.8821+-0.1185     ?      9.9301+-0.0483        ?
   put-by-val-with-string-slightly-polymorphic   
                                                      2.9198+-0.0652     ?      2.9674+-0.0893        ? might be 1.0163x slower
   put-by-val-with-string                            10.0017+-0.1074     ?     10.1884+-0.2010        ? might be 1.0187x slower
   put-by-val-with-symbol-replace-and-transition   
                                                     11.3833+-0.0792     ?     11.5997+-0.2336        ? might be 1.0190x slower
   put-by-val-with-symbol-slightly-polymorphic   
                                                      3.2117+-0.1340            3.1639+-0.1012          might be 1.0151x faster
   put-by-val-with-symbol                            10.2664+-0.3575           10.2589+-0.5173        
   rare-osr-exit-on-local                            13.2559+-0.0455     ?     13.3703+-0.1098        ?
   raytrace-with-empty-try-catch                      5.0893+-0.0636     ?      5.1293+-0.0939        ?
   raytrace-with-try-catch                            9.6173+-0.1417            9.5097+-0.1547          might be 1.0113x faster
   register-pressure-from-osr                        16.1334+-0.1120     ?     16.1800+-0.3192        ?
   repeat-multi-get-by-offset                        21.3506+-0.1126           21.2980+-0.3269        
   richards-empty-try-catch                          80.4632+-18.9860          71.0152+-0.7751          might be 1.1330x faster
   richards-try-catch                               238.6912+-1.8175     ?    238.9566+-1.4757        ?
   setter-prototype                                   7.8074+-0.3921            7.6654+-0.0827          might be 1.0185x faster
   setter                                             5.7029+-0.6937     ?      5.7385+-0.6430        ?
   simple-activation-demo                            23.9718+-0.9036           23.5856+-0.2222          might be 1.0164x faster
   simple-getter-access                              10.9903+-0.5059           10.6465+-0.1599          might be 1.0323x faster
   simple-poly-call-nested                            8.5628+-0.6070     ?      8.6896+-0.4326        ? might be 1.0148x slower
   simple-poly-call                                   1.2911+-0.0378            1.2844+-0.0310        
   sin-boolean                                       19.5177+-1.6620           17.9852+-1.0659          might be 1.0852x faster
   singleton-scope                                   63.5813+-1.3067     ?     64.6547+-3.8967        ? might be 1.0169x slower
   sink-function                                      9.8293+-0.5220            9.6231+-0.6141          might be 1.0214x faster
   sink-huge-activation                              16.0143+-0.4338     ?     16.1260+-0.4649        ?
   sinkable-new-object-dag                           54.1672+-2.3018           52.1514+-1.6868          might be 1.0387x faster
   sinkable-new-object-taken                         42.4604+-1.5278           40.9923+-2.5689          might be 1.0358x faster
   sinkable-new-object                               29.1228+-0.2675     ?     29.3457+-0.4748        ?
   slow-array-profile-convergence                     2.4745+-0.0254     ?      2.4964+-0.0276        ?
   slow-convergence                                   2.3700+-0.0199     ?      2.3817+-0.0627        ?
   slow-ternaries                                    17.0605+-0.2690     ?     19.9107+-6.3360        ? might be 1.1671x slower
   sorting-benchmark                                 16.3370+-0.0694     ?     16.4663+-0.1586        ?
   sparse-conditional                                 1.1896+-0.0759            1.1769+-0.0221          might be 1.0108x faster
   splice-to-remove                                  12.0234+-0.8161     ?     12.3917+-1.0474        ? might be 1.0306x slower
   string-char-code-at                               12.9946+-0.2289     ?     13.2048+-0.5788        ? might be 1.0162x slower
   string-concat-object                               2.2545+-0.1116            2.1928+-0.0580          might be 1.0281x faster
   string-concat-pair-object                          2.2129+-0.0650            2.1858+-0.0792          might be 1.0124x faster
   string-concat-pair-simple                          9.3263+-0.2014            9.2070+-0.2085          might be 1.0130x faster
   string-concat-simple                               9.5241+-0.3078            9.3738+-0.2112          might be 1.0160x faster
   string-cons-repeat                                 6.2838+-0.0442     ?      6.3940+-0.1926        ? might be 1.0176x slower
   string-cons-tower                                  6.5670+-0.2077            6.4874+-0.0750          might be 1.0123x faster
   string-equality                                   15.6006+-0.1687           15.5030+-0.0922        
   string-get-by-val-big-char                         6.4397+-0.0394     ?      6.4914+-0.0740        ?
   string-get-by-val-out-of-bounds-insane             3.0538+-0.1048     ?      3.0911+-0.1396        ? might be 1.0122x slower
   string-get-by-val-out-of-bounds                    3.9234+-0.0341     ?      3.9397+-0.0562        ?
   string-get-by-val                                  2.8155+-0.0230            2.8100+-0.0335        
   string-hash                                        1.8628+-0.0454            1.8539+-0.0297        
   string-long-ident-equality                        13.2432+-0.3444           13.1273+-0.0450        
   string-out-of-bounds                              10.0443+-0.2305            9.9513+-0.1798        
   string-repeat-arith                               27.1472+-2.1259           26.3323+-0.3561          might be 1.0309x faster
   string-sub                                        54.0976+-0.4130           53.7591+-1.5718        
   string-test                                        2.8844+-0.0830            2.8804+-0.0690        
   string-var-equality                               24.7783+-0.2189           24.6470+-0.1508        
   structure-hoist-over-transitions                   2.4748+-0.0722            2.3798+-0.0431          might be 1.0399x faster
   substring-concat-weird                            36.4586+-1.2340           35.2508+-0.5461          might be 1.0343x faster
   substring-concat                                  40.3966+-0.8921           39.8949+-0.7860          might be 1.0126x faster
   substring                                         44.6601+-0.2564     ?     44.8883+-0.3494        ?
   switch-char-constant                               2.6643+-0.0409     ?      2.6695+-0.0284        ?
   switch-char                                        5.2778+-0.1029     ?      6.2516+-0.9270        ? might be 1.1845x slower
   switch-constant                                    8.4666+-0.5676     ?      8.5496+-0.7148        ?
   switch-string-basic-big-var                       14.4736+-0.1323           14.3723+-0.0423        
   switch-string-basic-big                           14.2643+-0.0722     ?     14.3327+-0.1777        ?
   switch-string-basic-var                           13.5512+-0.0376     ?     13.6162+-0.0990        ?
   switch-string-basic                               12.3769+-0.3381           12.3547+-0.1294        
   switch-string-big-length-tower-var                17.5831+-0.1212           17.5307+-0.1848        
   switch-string-length-tower-var                    12.8657+-0.1818     ?     13.4358+-0.6273        ? might be 1.0443x slower
   switch-string-length-tower                        11.3019+-0.1657           11.2375+-0.0938        
   switch-string-short                               11.4747+-0.3854           11.2465+-0.0733          might be 1.0203x faster
   switch                                            10.8461+-0.3178           10.7578+-0.1127        
   tear-off-arguments-simple                          3.1223+-0.0999            3.0801+-0.0129          might be 1.0137x faster
   tear-off-arguments                                 4.0180+-0.1040     ?      4.0626+-0.0621        ? might be 1.0111x slower
   temporal-structure                                11.5959+-0.0743     ?     11.6627+-0.2156        ?
   to-int32-boolean                                  12.2839+-0.0869     ?     12.3976+-0.2645        ?
   try-catch-get-by-val-cloned-arguments              9.1616+-0.1942            9.0406+-0.1877          might be 1.0134x faster
   try-catch-get-by-val-direct-arguments              2.1864+-0.0494            2.1226+-0.0284          might be 1.0301x faster
   try-catch-get-by-val-scoped-arguments              4.5760+-0.1012     ?      4.6873+-0.2590        ? might be 1.0243x slower
   typed-array-get-set-by-val-profiling              26.3908+-0.4453           26.3081+-0.3598        
   undefined-property-access                        217.9684+-4.1094          215.7817+-2.9033          might be 1.0101x faster
   undefined-test                                     2.9860+-0.0302     ?      3.0081+-0.0537        ?
   unprofiled-licm                                    9.2561+-0.1549            9.2274+-0.0505        
   v8-raytrace-with-empty-try-catch                  23.8810+-0.4021     ?     24.0401+-0.8322        ?
   v8-raytrace-with-try-catch                        61.8796+-1.3865           60.3725+-1.0324          might be 1.0250x faster
   varargs-call                                      12.7985+-0.1414     ?     12.7994+-0.1171        ?
   varargs-construct-inline                          21.6446+-0.3788           21.5068+-0.1504        
   varargs-construct                                 20.3234+-0.5365           20.1718+-0.1023        
   varargs-inline                                     8.7325+-0.1172     ?      8.7648+-0.1113        ?
   varargs-strict-mode                                9.9231+-0.1440            9.8306+-0.0477        
   varargs                                            9.7795+-0.0645     ?      9.8391+-0.0973        ?
   weird-inlining-const-prop                          2.0930+-0.0652     ?      2.1987+-0.0921        ? might be 1.0505x slower

   &lt;geometric&gt;                                        7.9203+-0.0138            7.9066+-0.0168          might be 1.0017x faster

                                                        TipOfTree                LazySlowPath                                   
AsmBench:
   bigfib.cpp                                       461.4143+-10.1411    ^    441.8242+-4.3578        ^ definitely 1.0443x faster
   cray.c                                           392.9474+-2.5624     ?    393.1709+-2.0818        ?
   dry.c                                            427.1070+-7.2073          418.9111+-8.6867          might be 1.0196x faster
   FloatMM.c                                        687.1698+-3.6241     ?    687.9941+-6.3887        ?
   gcc-loops.cpp                                   3445.9452+-16.8151    ?   3461.1735+-14.9808       ?
   n-body.c                                         834.6586+-8.0509          829.1597+-4.1416        
   Quicksort.c                                      409.4754+-6.9808     ?    409.9520+-4.5216        ?
   stepanov_container.cpp                          3512.9198+-29.3336    ?   3524.8396+-36.7002       ?
   Towers.c                                         238.5330+-2.2185          238.4304+-1.6170        

   &lt;geometric&gt;                                      720.7394+-2.4872     ^    716.0400+-1.7129        ^ definitely 1.0066x faster

                                                        TipOfTree                LazySlowPath                                   
CompressionBench:
   huffman                                           61.5305+-1.4293           60.9656+-1.3717        
   arithmetic-simple                                283.1003+-6.6927          276.9004+-3.4888          might be 1.0224x faster
   arithmetic-precise                               245.3054+-1.7173          243.6239+-0.4322        
   arithmetic-complex-precise                       249.2643+-4.3520          247.8599+-3.8654        
   arithmetic-precise-order-0                       283.1423+-1.2491     ?    285.4641+-1.9978        ?
   arithmetic-precise-order-1                       304.2594+-3.5441          303.0113+-2.8497        
   arithmetic-precise-order-2                       347.1212+-3.5373     ?    350.9721+-3.6519        ? might be 1.0111x slower
   arithmetic-simple-order-1                        322.7831+-4.1599     ?    323.8018+-7.1994        ?
   arithmetic-simple-order-2                        377.6834+-4.8874          376.8096+-3.5374        
   lz-string                                        328.7832+-43.1137         309.3584+-2.1833          might be 1.0628x faster

   &lt;geometric&gt;                                      257.2001+-3.1908          255.1010+-0.8888          might be 1.0082x faster

                                                        TipOfTree                LazySlowPath                                   
Geomean of preferred means:
   &lt;scaled-result&gt;                                   49.9466+-0.1001           49.6862+-0.1911          might be 1.0052x faster</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1132185</commentid>
    <comment_count>9</comment_count>
      <attachid>262841</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-10 17:54:49 -0700</bug_when>
    <thetext>Created attachment 262841
almost done</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1132189</commentid>
    <comment_count>10</comment_count>
      <attachid>262843</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-10 18:23:36 -0700</bug_when>
    <thetext>Created attachment 262843
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1132190</commentid>
    <comment_count>11</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-10-10 18:25:57 -0700</bug_when>
    <thetext>Attachment 262843 did not pass style-queue:


ERROR: Source/JavaScriptCore/ftl/FTLLazySlowPath.h:67:  The parameter name &quot;callSiteIndex&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/ftl/FTLLazySlowPath.cpp:37:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLazySlowPath.cpp:38:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLazySlowPath.cpp:39:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLazySlowPath.cpp:40:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLazySlowPath.cpp:41:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/ftl/FTLInlineCacheDescriptor.h:150:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/ftl/FTLInlineCacheDescriptor.h:151:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:7324:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:8471:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/SharedTask.h:63:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/SharedTask.h:75:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLazySlowPathCall.h:45:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLSlowPathCall.cpp:44:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/ftl/FTLSlowPathCall.cpp:45:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/ftl/FTLSlowPathCall.cpp:46:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/ftl/FTLSlowPathCall.cpp:54:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLSlowPathCall.cpp:74:  Declaration has space between type name and * in numberOfCallingConventionRegisters * wordSize  [whitespace/declaration] [3]
ERROR: Source/JavaScriptCore/ftl/FTLSlowPathCall.cpp:126:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 19 in 31 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>1132194</commentid>
    <comment_count>12</comment_count>
      <attachid>262844</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-10 20:05:07 -0700</bug_when>
    <thetext>Created attachment 262844
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1132195</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-10-10 20:06:46 -0700</bug_when>
    <thetext>Attachment 262844 did not pass style-queue:


ERROR: Source/JavaScriptCore/ftl/FTLLazySlowPath.h:67:  The parameter name &quot;callSiteIndex&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/ftl/FTLLazySlowPath.cpp:37:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLazySlowPath.cpp:38:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLazySlowPath.cpp:39:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLazySlowPath.cpp:40:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLazySlowPath.cpp:41:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/ftl/FTLInlineCacheDescriptor.h:150:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/ftl/FTLInlineCacheDescriptor.h:151:  Wrong number of spaces before statement. (expected: 12)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:7324:  Missing space before {  [whitespace/braces] [5]
ERROR: Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:8471:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/WTF/wtf/SharedTask.h:63:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/WTF/wtf/SharedTask.h:75:  Extra space before ( in function call  [whitespace/parens] [4]
ERROR: Source/JavaScriptCore/ftl/FTLLazySlowPathCall.h:45:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLSlowPathCall.cpp:44:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/ftl/FTLSlowPathCall.cpp:45:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/ftl/FTLSlowPathCall.cpp:46:  Wrong number of spaces before statement. (expected: 8)  [whitespace/indent] [4]
ERROR: Source/JavaScriptCore/ftl/FTLSlowPathCall.cpp:54:  Multi line control clauses should use braces.  [whitespace/braces] [4]
ERROR: Source/JavaScriptCore/ftl/FTLSlowPathCall.cpp:74:  Declaration has space between type name and * in numberOfCallingConventionRegisters * wordSize  [whitespace/declaration] [3]
ERROR: Source/JavaScriptCore/ftl/FTLSlowPathCall.cpp:126:  Place brace on its own line for function definitions.  [whitespace/braces] [4]
Total errors found: 19 in 31 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>1132338</commentid>
    <comment_count>14</comment_count>
      <attachid>262844</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2015-10-12 10:09:55 -0700</bug_when>
    <thetext>Comment on attachment 262844
the patch

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

LGTM

&gt; Source/JavaScriptCore/ftl/FTLCompile.cpp:598
&gt; +                // FIXME: This should be pushing the lazy slow path index in some vector or whatever.

Don&apos;t you do this below?

&gt; Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:7247
&gt; +    // This is a mechanism for creating a code generator that fills in a gap in the code using our

This is a nice API

&gt; Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:7288
&gt; +    // LValue output = lazySlowPath(

These lambdas shouldn&apos;t be capturing any stack variables by reference, right? Maybe it&apos;s worth just adding a sentence even though it&apos;s relatively obvious.

&gt; Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:7341
&gt; +        CallSiteIndex callSiteIndex =

I wonder if the right thing to do here is to have LazySlowPathDescriptor take a CodeOrigin, and then when compiling the lazy slow path
we get the actual call site index for the code origin. This way, if this lazy slow path is duplicated, each version will have its own call site
index. I&apos;m not sure this strictly matters, but its more in the spirit of the fixes I need to make for *ById

&gt; Source/JavaScriptCore/ftl/FTLSlowPathCall.cpp:81
&gt; +    m_stackBytesNeeded = (m_stackBytesNeeded + stackAlignmentBytes() - 1) &amp; ~(stackAlignmentBytes() - 1);

Is this just rounding up to stackAlignmentBytes()? If so, I think calling roundingUpToMultiple is clearer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1132343</commentid>
    <comment_count>15</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-12 10:17:41 -0700</bug_when>
    <thetext>(In reply to comment #14)
&gt; Comment on attachment 262844 [details]
&gt; the patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=262844&amp;action=review
&gt; 
&gt; LGTM
&gt; 
&gt; &gt; Source/JavaScriptCore/ftl/FTLCompile.cpp:598
&gt; &gt; +                // FIXME: This should be pushing the lazy slow path index in some vector or whatever.
&gt; 
&gt; Don&apos;t you do this below?

Yup, removed the FIXME.

&gt; 
&gt; &gt; Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:7247
&gt; &gt; +    // This is a mechanism for creating a code generator that fills in a gap in the code using our
&gt; 
&gt; This is a nice API
&gt; 
&gt; &gt; Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:7288
&gt; &gt; +    // LValue output = lazySlowPath(
&gt; 
&gt; These lambdas shouldn&apos;t be capturing any stack variables by reference,
&gt; right? Maybe it&apos;s worth just adding a sentence even though it&apos;s relatively
&gt; obvious.

Yeah, I added a comment.

&gt; 
&gt; &gt; Source/JavaScriptCore/ftl/FTLLowerDFGToLLVM.cpp:7341
&gt; &gt; +        CallSiteIndex callSiteIndex =
&gt; 
&gt; I wonder if the right thing to do here is to have LazySlowPathDescriptor
&gt; take a CodeOrigin, and then when compiling the lazy slow path
&gt; we get the actual call site index for the code origin. This way, if this
&gt; lazy slow path is duplicated, each version will have its own call site
&gt; index. I&apos;m not sure this strictly matters, but its more in the spirit of the
&gt; fixes I need to make for *ById

Sure.  I think that&apos;s the right approach.  But, I&apos;m not going to do it in this patch, since this patch reuses the InlineCacheDescriptor logic that already requires a CallSiteIndex to be produced by FTLLowerDFGToLLVM.cpp.  There is no way for this patch to make LazySlowPathDescriptor take a CodeOrigin and do the &quot;right thing&quot; without either making it completely separate from the InlineCacheDescriptor logic or by fixing the InlineCacheDescriptor in this patch.

&gt; 
&gt; &gt; Source/JavaScriptCore/ftl/FTLSlowPathCall.cpp:81
&gt; &gt; +    m_stackBytesNeeded = (m_stackBytesNeeded + stackAlignmentBytes() - 1) &amp; ~(stackAlignmentBytes() - 1);
&gt; 
&gt; Is this just rounding up to stackAlignmentBytes()? If so, I think calling
&gt; roundingUpToMultiple is clearer.

Yeah, that&apos;s just a round-up.  This code is not new to this patch.  It was just moved.  So, I&apos;ll keep it like this for now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1132356</commentid>
    <comment_count>16</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-12 10:57:28 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/190860</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1132366</commentid>
    <comment_count>17</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2015-10-12 11:07:25 -0700</bug_when>
    <thetext>This broke LLINT CLOOP build:

https://build.webkit.org/builders/Apple%20El%20Capitan%20LLINT%20CLoop%20%28BuildAndTest%29/builds/152/steps/compile-webkit/logs/stdio</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1132373</commentid>
    <comment_count>18</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-12 11:12:42 -0700</bug_when>
    <thetext>(In reply to comment #17)
&gt; This broke LLINT CLOOP build:
&gt; 
&gt; https://build.webkit.org/builders/
&gt; Apple%20El%20Capitan%20LLINT%20CLoop%20%28BuildAndTest%29/builds/152/steps/
&gt; compile-webkit/logs/stdio

Fix landed in: http://trac.webkit.org/changeset/190865</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1132417</commentid>
    <comment_count>19</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2015-10-12 12:07:01 -0700</bug_when>
    <thetext>(In reply to comment #18)
&gt; (In reply to comment #17)
&gt; &gt; This broke LLINT CLOOP build:
&gt; &gt; 
&gt; &gt; https://build.webkit.org/builders/
&gt; &gt; Apple%20El%20Capitan%20LLINT%20CLoop%20%28BuildAndTest%29/builds/152/steps/
&gt; &gt; compile-webkit/logs/stdio
&gt; 
&gt; Fix landed in: http://trac.webkit.org/changeset/190865

The build is still broken.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1132428</commentid>
    <comment_count>20</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-12 12:16:12 -0700</bug_when>
    <thetext>(In reply to comment #19)
&gt; (In reply to comment #18)
&gt; &gt; (In reply to comment #17)
&gt; &gt; &gt; This broke LLINT CLOOP build:
&gt; &gt; &gt; 
&gt; &gt; &gt; https://build.webkit.org/builders/
&gt; &gt; &gt; Apple%20El%20Capitan%20LLINT%20CLoop%20%28BuildAndTest%29/builds/152/steps/
&gt; &gt; &gt; compile-webkit/logs/stdio
&gt; &gt; 
&gt; &gt; Fix landed in: http://trac.webkit.org/changeset/190865
&gt; 
&gt; The build is still broken.

Another try: http://trac.webkit.org/changeset/190878</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1132433</commentid>
    <comment_count>21</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-10-12 12:26:36 -0700</bug_when>
    <thetext>This is still broken, even with the most recent checkin. Should we roll it out?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1132434</commentid>
    <comment_count>22</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-10-12 12:31:16 -0700</bug_when>
    <thetext>Should those be &quot;SharedTask&quot; -&gt; &quot;SharedTaskFunctor&quot;? The &quot;SharedTask&quot; class (at least on my source tree) doesn&apos;t accept any template arguments.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1132437</commentid>
    <comment_count>23</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-12 12:36:30 -0700</bug_when>
    <thetext>(In reply to comment #21)
&gt; This is still broken, even with the most recent checkin. Should we roll it
&gt; out?

The Windows bots need a clean build.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1132440</commentid>
    <comment_count>24</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-10-12 12:36:53 -0700</bug_when>
    <thetext>(In reply to comment #22)
&gt; Should those be &quot;SharedTask&quot; -&gt; &quot;SharedTaskFunctor&quot;? The &quot;SharedTask&quot; class
&gt; (at least on my source tree) doesn&apos;t accept any template arguments.

Your checkout must be stale, this patch turns SharedTask into a template.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>262717</attachid>
            <date>2015-10-08 14:59:17 -0700</date>
            <delta_ts>2015-10-08 18:31:25 -0700</delta_ts>
            <desc>what I&apos;m thinking so far</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>22224</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTGF6eVNsb3dQYXRoQ2FsbC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMYXp5U2xvd1BhdGhD
YWxsLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTGF6
eVNsb3dQYXRoQ2FsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2NyBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgor
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAor
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiRlRMTGF6eVNsb3dQYXRoQ2FsbC5oIgorCisjaW5jbHVkZSAiRlRMU2xv
d1BhdGhDYWxsLmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKKworTGF6eVNs
b3dQYXRoQ2FsbDo6TGF6eVNsb3dQYXRoQ2FsbCgKKyAgICBDb2RlTG9jYXRpb25MYWJlbCBwYXRj
aHBvaW50LCBDb2RlTG9jYXRpb25MYWJlbCBleGNlcHRpb25UYXJnZXQsIGNvbnN0IFJlZ2lzdGVy
U2V0JiB1c2VkUmVnaXN0ZXJzKQorICAgIDogbV9wYXRjaHBvaW50KHBhdGNocG9pbnQpCisgICAg
LCBtX2V4Y2VwdGlvblRhcmdldChleGNlcHRpb25UYXJnZXQpCisgICAgLCBtX3VzZWRSZWdpc3Rl
cnModXNlZFJlZ2lzdGVycykKK3sKK30KKworTGF6eVNsb3dQYXRoQ2FsbDo6fkxhenlTbG93UGF0
aENhbGwoKQoreworfQorCit2b2lkIExhenlTbG93UGF0aENhbGw6OmdlbmVyYXRlKENvZGVCbG9j
ayogY29kZUJsb2NrKQoreworICAgIFJFTEVBU0VfQVNTRVJUKCFtX3N0dWIpOworCisgICAgVk0m
IHZtID0gKmNvZGVCbG9jay0+dm0oKTsKKworICAgIENDYWxsSGVscGVycyBqaXQoJnZtLCBjb2Rl
QmxvY2spOworICAgIENDYWxsSGVscGVyczo6SnVtcExpc3QgZXhjZXB0aW9uSnVtcHM7CisgICAg
Z2VuZXJhdGVDYWxsKGppdCwgbV9leGNlcHRpb25UYXJnZXQgPyAmZXhjZXB0aW9uSnVtcHMgOiBu
dWxscHRyKTsKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZG9uZSA9IGppdC5qdW1wKCk7CisKKyAg
ICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIodm0sIGppdCwgY29kZUJsb2NrLCBKSVRDb21waWxhdGlv
bk11c3RTdWNjZWVkKTsKKyAgICBsaW5rQnVmZmVyLmxpbmsoZG9uZSwgbV9wYXRjaHBvaW50Lmxh
YmVsQXRPZmZzZXQoTWFjcm9Bc3NlbWJsZXI6Om1heEp1bXBSZXBsYWNlbWVudFNpemUoKSkpOwor
ICAgIGlmIChleGNlcHRpb25UYXJnZXQpCisgICAgICAgIGxpbmtCdWZmZXIubGluayhleGNlcHRp
b25KdW1wcywgbV9leGNlcHRpb25UYXJnZXQpOworICAgIG1fc3R1YiA9IEZJTkFMSVpFX0NPREVf
Rk9SKGNvZGVCbG9jaywgbGlua0J1ZmZlciwgKCJMYXp5IHNsb3cgcGF0aCBjYWxsIHN0dWIiKSk7
CisKKyAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwbGFjZVdpdGhKdW1wKG1fcGF0Y2hwb2ludCwgQ29k
ZUxvY2F0aW9uTGFiZWwobV9zdHViLmNvZGUoKSkpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpT
Qzo6RlRMCisKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMYXp5U2xvd1Bh
dGhDYWxsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMYXp5
U2xvd1BhdGhDYWxsLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTExhenlTbG93UGF0aENhbGwuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwMSBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRp
c3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3Qg
cmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRv
Y3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0
cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMu
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEZU
TExhenlTbG93UGF0aENhbGxfaAorI2RlZmluZSBGVExMYXp5U2xvd1BhdGhDYWxsX2gKKworI2lu
Y2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUgIkNvZGVMb2NhdGlvbi5oIgorI2luY2x1ZGUg
IkZUTFNsb3dQYXRoQ2FsbC5oIgorI2luY2x1ZGUgIkdQUkluZm8uaCIKKyNpbmNsdWRlICJNYWNy
b0Fzc2VtYmxlckNvZGVSZWYuaCIKKyNpbmNsdWRlICJSZWdpc3RlclNldC5oIgorCituYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CisKK2NsYXNzIExhenlTbG93UGF0aENhbGwgeworICAg
IFdURl9NQUtFX05PTkNPUFlBQkxFKExhenlTbG93UGF0aENhbGwpOworICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIExhenlTbG93UGF0aENhbGwoCisgICAgICAgIENv
ZGVMb2NhdGlvbkxhYmVsIHBhdGNocG9pbnQsIENvZGVMb2NhdGlvbkxhYmVsIGV4Y2VwdGlvblRh
cmdldCwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMpOworCisgICAgdmlydHVhbCB+
TGF6eVNsb3dQYXRoQ2FsbCgpOworCisgICAgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3Rl
cnMoKSBjb25zdCB7IHJldHVybiBtX3VzZWRSZWdpc3RlcnM7IH0KKworICAgIFNsb3dQYXRoQ2Fs
bCBnZW5lcmF0ZShDb2RlQmxvY2sqKTsKKworcHJvdGVjdGVkOgorICAgIHZpcnR1YWwgdm9pZCBn
ZW5lcmF0ZUNhbGwoQ0NhbGxIZWxwZXJzJiwgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCogZXhjZXB0
aW9uSnVtcHMpID0gMDsKKyAgICAKK3ByaXZhdGU6CisgICAgQ29kZUxvY2F0aW9uTGFiZWwgbV9w
YXRjaHBvaW50OworICAgIENvZGVMb2NhdGlvbkxhYmVsIG1fZXhjZXB0aW9uVGFyZ2V0OworICAg
IFJlZ2lzdGVyU2V0IG1fdXNlZFJlZ2lzdGVyczsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYg
bV9zdHViOworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUgUmVzdWx0VHlwZSwgdHlwZW5hbWUuLi4g
QXJndW1lbnRUeXBlcz4KK2NsYXNzIExhenlTbG93UGF0aENhbGxJbXBsIDogcHVibGljIExhenlT
bG93UGF0aENhbGwgeworcHVibGljOgorICAgIExhenlTbG93UGF0aENhbGxJbXBsKAorICAgICAg
ICBDb2RlTG9jYXRpb25MYWJlbCBwYXRjaHBvaW50LCBDb2RlTG9jYXRpb25MYWJlbCBleGNlcHRp
b25UYXJnZXQsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLAorICAgICAgICBGdW5j
dGlvblB0ciBmdW5jdGlvbiwgUmVzdWx0VHlwZSByZXN1bHQsIEFyZ3VtZW50VHlwZXMuLi4gYXJn
dW1lbnRzKQorICAgICAgICA6IExhenlTbG93UGF0aENhbGwocGF0Y2hwb2ludCwgZXhjZXB0aW9u
VGFyZ2V0LCB1c2VkUmVnaXN0ZXJzKQorICAgICAgICAsIG1fZnVuY3Rpb24oZnVuY3Rpb24pCisg
ICAgICAgICwgbV9yZXN1bHQocmVzdWx0KQorICAgICAgICAsIG1fYXJndW1lbnRzKGFyZ3VtZW50
cykKKyAgICB7CisgICAgfQorCitwcm90ZWN0ZWQ6CisgICAgU2xvd1BhdGhDYWxsIGdlbmVyYXRl
Q2FsbChDQ2FsbEhlbHBlcnMmIGppdCwgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCogZXhjZXB0aW9u
SnVtcHMpIG92ZXJyaWRlCisgICAgeworICAgICAgICByZXR1cm4gdHVwbGVBcHBseSgKKyAgICAg
ICAgICAgIGNhbGxPcGVyYXRpb25JbXBsLAorICAgICAgICAgICAgc3RkOjp0dXBsZV9jYXQoCisg
ICAgICAgICAgICAgICAgc3RkOjptYWtlX3R1cGxlKHVzZWRSZWdpc3RlcnMoKSwgaml0LCBleGNl
cHRpb25KdW1wcywgbV9mdW5jdGlvbiwgbV9yZXN1bHQpLAorICAgICAgICAgICAgICAgIG1fYXJn
dW1lbnRzKSk7CisgICAgfQorCitwcml2YXRlOgorICAgIFJlc3VsdFR5cGUgbV9yZXN1bHQ7Cisg
ICAgc3RkOjp0dXBsZTxBcmd1bWVudFR5cGVzLi4uPiBtX2FyZ3VtZW50czsKK307CisKK3RlbXBs
YXRlPHR5cGVuYW1lIFJlc3VsdFR5cGUsIHR5cGVuYW1lLi4uIEFyZ3VtZW50VHlwZXM+CitzdGQ6
OnVuaXF1ZV9wdHI8TGF6eVNsb3dQYXRoQ2FsbD4gbWFrZUxhenlTbG93UGF0aENhbGwoCisgICAg
Q29kZUxvY2F0aW9ubGFiZWwgcGF0Y2hwb2ludCwgQ29kZUxvY2F0aW9uTGFiZWwgZXhjZXB0aW9u
VGFyZ2V0LCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywKKyAgICBGdW5jdGlvblB0
ciBmdW5jdGlvbiwgUmVzdWx0VHlwZSByZXN1bHQsIEFyZ3VtZW50VHlwZXMuLi4gYXJndW1lbnRz
KQoreworICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPExhenlTbG93UGF0aENhbGxJbXBsPFJl
c3VsdFR5cGUsIEFyZ3VtZW50VHlwZXMuLi4+PigKKyAgICAgICAgcGF0Y2hwb2ludCwgZXhjZXB0
aW9uVGFyZ2V0LCB1c2VkUmVnaXN0ZXJzLCBmdW5jdGlvbiwgcmVzdWx0LCBhcmd1bWVudHMuLi4p
OworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCisKKyNlbmRpZiAvLyBGVExMYXp5U2xv
d1BhdGhDYWxsX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTbG93UGF0
aENhbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU2xv
d1BhdGhDYWxsLmNwcAkocmV2aXNpb24gMTkwNzM1KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExTbG93UGF0aENhbGwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwxMzEgKzM1LDk2
IEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKIAotbmFtZXNwYWNlIHsKLQog
Ly8gVGhpcyBjb2RlIHJlbGllcyBvbiB1cyBiZWluZyA2NC1iaXQuIEZUTCBpcyBjdXJyZW50bHkg
YWx3YXlzIDY0LWJpdC4KIHN0YXRpYyBjb25zdCBzaXplX3Qgd29yZFNpemUgPSA4OwogCi0vLyBU
aGlzIHdpbGwgYmUgYW4gUkFJSSB0aGluZ3kgdGhhdCB3aWxsIHNldCB1cCB0aGUgbmVjZXNzYXJ5
IHN0YWNrIHNpemVzIGFuZCBvZmZzZXRzIGFuZCBzdWNoLgotY2xhc3MgQ2FsbENvbnRleHQgewot
cHVibGljOgotICAgIENhbGxDb250ZXh0KAotICAgICAgICBTdGF0ZSYgc3RhdGUsIGNvbnN0IFJl
Z2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLCBDQ2FsbEhlbHBlcnMmIGppdCwKLSAgICAgICAgdW5z
aWduZWQgbnVtQXJncywgR1BSUmVnIHJldHVyblJlZ2lzdGVyKQotICAgICAgICA6IG1fc3RhdGUo
c3RhdGUpCi0gICAgICAgICwgbV91c2VkUmVnaXN0ZXJzKHVzZWRSZWdpc3RlcnMpCi0gICAgICAg
ICwgbV9qaXQoaml0KQotICAgICAgICAsIG1fbnVtQXJncyhudW1BcmdzKQotICAgICAgICAsIG1f
cmV0dXJuUmVnaXN0ZXIocmV0dXJuUmVnaXN0ZXIpCi0gICAgewotICAgICAgICAvLyBXZSBkb24n
dCBjYXJlIHRoYXQgeW91J3JlIHVzaW5nIGNhbGxlZS1zYXZlLCBzdGFjaywgb3IgaGFyZHdhcmUg
cmVnaXN0ZXJzLgotICAgICAgICBtX3VzZWRSZWdpc3RlcnMuZXhjbHVkZShSZWdpc3RlclNldDo6
c3RhY2tSZWdpc3RlcnMoKSk7Ci0gICAgICAgIG1fdXNlZFJlZ2lzdGVycy5leGNsdWRlKFJlZ2lz
dGVyU2V0OjpyZXNlcnZlZEhhcmR3YXJlUmVnaXN0ZXJzKCkpOwotICAgICAgICBtX3VzZWRSZWdp
c3RlcnMuZXhjbHVkZShSZWdpc3RlclNldDo6Y2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKLSAgICAg
ICAgCi0gICAgICAgIC8vIFRoZSByZXR1cm4gcmVnaXN0ZXIgZG9lc24ndCBuZWVkIHRvIGJlIHNh
dmVkLgotICAgICAgICBpZiAobV9yZXR1cm5SZWdpc3RlciAhPSBJbnZhbGlkR1BSUmVnKQotICAg
ICAgICAgICAgbV91c2VkUmVnaXN0ZXJzLmNsZWFyKG1fcmV0dXJuUmVnaXN0ZXIpOwotICAgICAg
ICAKLSAgICAgICAgc2l6ZV90IHN0YWNrQnl0ZXNOZWVkZWRGb3JSZXR1cm5BZGRyZXNzID0gd29y
ZFNpemU7Ci0gICAgICAgIAotICAgICAgICBtX29mZnNldFRvU2F2aW5nQXJlYSA9Ci0gICAgICAg
ICAgICAoc3RkOjptYXgobV9udW1BcmdzLCBOVU1CRVJfT0ZfQVJHVU1FTlRfUkVHSVNURVJTKSAt
IE5VTUJFUl9PRl9BUkdVTUVOVF9SRUdJU1RFUlMpICogd29yZFNpemU7Ci0gICAgICAgIAotICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSBzdGQ6Om1pbihOVU1CRVJfT0ZfQVJHVU1FTlRfUkVHSVNU
RVJTLCBudW1BcmdzKTsgaS0tOykKLSAgICAgICAgICAgIG1fYXJndW1lbnRSZWdpc3RlcnMuc2V0
KEdQUkluZm86OnRvQXJndW1lbnRSZWdpc3RlcihpKSk7Ci0gICAgICAgIG1fY2FsbGluZ0NvbnZl
bnRpb25SZWdpc3RlcnMubWVyZ2UobV9hcmd1bWVudFJlZ2lzdGVycyk7Ci0gICAgICAgIGlmIChy
ZXR1cm5SZWdpc3RlciAhPSBJbnZhbGlkR1BSUmVnKQotICAgICAgICAgICAgbV9jYWxsaW5nQ29u
dmVudGlvblJlZ2lzdGVycy5zZXQoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOwotICAgICAgICBt
X2NhbGxpbmdDb252ZW50aW9uUmVnaXN0ZXJzLmZpbHRlcihtX3VzZWRSZWdpc3RlcnMpOwotICAg
ICAgICAKLSAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZDYWxsaW5nQ29udmVudGlvblJlZ2lzdGVy
cyA9Ci0gICAgICAgICAgICBtX2NhbGxpbmdDb252ZW50aW9uUmVnaXN0ZXJzLm51bWJlck9mU2V0
UmVnaXN0ZXJzKCk7Ci0gICAgICAgIAotICAgICAgICBzaXplX3Qgb2Zmc2V0VG9UaHVua1Nhdmlu
Z0FyZWEgPQotICAgICAgICAgICAgbV9vZmZzZXRUb1NhdmluZ0FyZWEgKwotICAgICAgICAgICAg
bnVtYmVyT2ZDYWxsaW5nQ29udmVudGlvblJlZ2lzdGVycyAqIHdvcmRTaXplOwotICAgICAgICAK
LSAgICAgICAgbV9zdGFja0J5dGVzTmVlZGVkID0KLSAgICAgICAgICAgIG9mZnNldFRvVGh1bmtT
YXZpbmdBcmVhICsKLSAgICAgICAgICAgIHN0YWNrQnl0ZXNOZWVkZWRGb3JSZXR1cm5BZGRyZXNz
ICsKLSAgICAgICAgICAgIChtX3VzZWRSZWdpc3RlcnMubnVtYmVyT2ZTZXRSZWdpc3RlcnMoKSAt
IG51bWJlck9mQ2FsbGluZ0NvbnZlbnRpb25SZWdpc3RlcnMpICogd29yZFNpemU7Ci0gICAgICAg
IAotICAgICAgICBtX3N0YWNrQnl0ZXNOZWVkZWQgPSAobV9zdGFja0J5dGVzTmVlZGVkICsgc3Rh
Y2tBbGlnbm1lbnRCeXRlcygpIC0gMSkgJiB+KHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSAtIDEpOwot
ICAgICAgICAKLSAgICAgICAgbV9qaXQuc3ViUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMy
KG1fc3RhY2tCeXRlc05lZWRlZCksIENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIp
OwotICAgICAgICAKLSAgICAgICAgbV90aHVua1NhdmVTZXQgPSBtX3VzZWRSZWdpc3RlcnM7Ci0g
ICAgICAgIAotICAgICAgICAvLyBUaGlzIHJlbGllcyBvbiBhbGwgY2FsbGluZyBjb252ZW50aW9u
IHJlZ2lzdGVycyBhbHNvIGJlaW5nIHRlbXAgcmVnaXN0ZXJzLgotICAgICAgICB1bnNpZ25lZCBz
dGFja0luZGV4ID0gMDsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gR1BSSW5mbzo6bnVtYmVy
T2ZSZWdpc3RlcnM7IGktLTspIHsKLSAgICAgICAgICAgIEdQUlJlZyByZWcgPSBHUFJJbmZvOjp0
b1JlZ2lzdGVyKGkpOwotICAgICAgICAgICAgaWYgKCFtX2NhbGxpbmdDb252ZW50aW9uUmVnaXN0
ZXJzLmdldChyZWcpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgbV9q
aXQuc3RvcmVQdHIocmVnLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoQ0NhbGxIZWxwZXJzOjpzdGFj
a1BvaW50ZXJSZWdpc3RlciwgbV9vZmZzZXRUb1NhdmluZ0FyZWEgKyAoc3RhY2tJbmRleCsrKSAq
IHdvcmRTaXplKSk7Ci0gICAgICAgICAgICBtX3RodW5rU2F2ZVNldC5jbGVhcihyZWcpOwotICAg
ICAgICB9CitTbG93UGF0aENhbGxDb250ZXh0OjpTbG93UGF0aENhbGxDb250ZXh0KAorICAgIFJl
Z2lzdGVyU2V0IHVzZWRSZWdpc3RlcnMsIENDYWxsSGVscGVycyYgaml0LCB1bnNpZ25lZCBudW1B
cmdzLCBHUFJSZWcgcmV0dXJuUmVnaXN0ZXIpCisgICAgOiBtX2ppdChqaXQpCisgICAgLCBtX251
bUFyZ3MobnVtQXJncykKKyAgICAsIG1fcmV0dXJuUmVnaXN0ZXIocmV0dXJuUmVnaXN0ZXIpCit7
CisgICAgLy8gV2UgZG9uJ3QgY2FyZSB0aGF0IHlvdSdyZSB1c2luZyBjYWxsZWUtc2F2ZSwgc3Rh
Y2ssIG9yIGhhcmR3YXJlIHJlZ2lzdGVycy4KKyAgICB1c2VkUmVnaXN0ZXJzLmV4Y2x1ZGUoUmVn
aXN0ZXJTZXQ6OnN0YWNrUmVnaXN0ZXJzKCkpOworICAgIHVzZWRSZWdpc3RlcnMuZXhjbHVkZShS
ZWdpc3RlclNldDo6cmVzZXJ2ZWRIYXJkd2FyZVJlZ2lzdGVycygpKTsKKyAgICB1c2VkUmVnaXN0
ZXJzLmV4Y2x1ZGUoUmVnaXN0ZXJTZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7CiAgICAgICAg
IAotICAgICAgICBtX29mZnNldCA9IG9mZnNldFRvVGh1bmtTYXZpbmdBcmVhOwotICAgIH0KLSAg
ICAKLSAgICB+Q2FsbENvbnRleHQoKQotICAgIHsKLSAgICAgICAgaWYgKG1fcmV0dXJuUmVnaXN0
ZXIgIT0gSW52YWxpZEdQUlJlZykKLSAgICAgICAgICAgIG1faml0Lm1vdmUoR1BSSW5mbzo6cmV0
dXJuVmFsdWVHUFIsIG1fcmV0dXJuUmVnaXN0ZXIpOwotICAgICAgICAKLSAgICAgICAgdW5zaWdu
ZWQgc3RhY2tJbmRleCA9IDA7Ci0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IEdQUkluZm86Om51
bWJlck9mUmVnaXN0ZXJzOyBpLS07KSB7Ci0gICAgICAgICAgICBHUFJSZWcgcmVnID0gR1BSSW5m
bzo6dG9SZWdpc3RlcihpKTsKLSAgICAgICAgICAgIGlmICghbV9jYWxsaW5nQ29udmVudGlvblJl
Z2lzdGVycy5nZXQocmVnKSkKLSAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAg
IG1faml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKENDYWxsSGVscGVyczo6c3RhY2tQ
b2ludGVyUmVnaXN0ZXIsIG1fb2Zmc2V0VG9TYXZpbmdBcmVhICsgKHN0YWNrSW5kZXgrKykgKiB3
b3JkU2l6ZSksIHJlZyk7Ci0gICAgICAgIH0KKyAgICAvLyBUaGUgcmV0dXJuIHJlZ2lzdGVyIGRv
ZXNuJ3QgbmVlZCB0byBiZSBzYXZlZC4KKyAgICBpZiAobV9yZXR1cm5SZWdpc3RlciAhPSBJbnZh
bGlkR1BSUmVnKQorICAgICAgICB1c2VkUmVnaXN0ZXJzLmNsZWFyKG1fcmV0dXJuUmVnaXN0ZXIp
OwogICAgICAgICAKLSAgICAgICAgbV9qaXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bTMyKG1fc3RhY2tCeXRlc05lZWRlZCksIENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0
ZXIpOwotICAgIH0KLSAgICAKLSAgICBSZWdpc3RlclNldCB1c2VkUmVnaXN0ZXJzKCkgY29uc3QK
LSAgICB7Ci0gICAgICAgIHJldHVybiBtX3RodW5rU2F2ZVNldDsKLSAgICB9Ci0gICAgCi0gICAg
cHRyZGlmZl90IG9mZnNldCgpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV9vZmZzZXQ7
CisgICAgc2l6ZV90IHN0YWNrQnl0ZXNOZWVkZWRGb3JSZXR1cm5BZGRyZXNzID0gd29yZFNpemU7
CisgICAgICAgIAorICAgIG1fb2Zmc2V0VG9TYXZpbmdBcmVhID0KKyAgICAgICAgKHN0ZDo6bWF4
KG1fbnVtQXJncywgTlVNQkVSX09GX0FSR1VNRU5UX1JFR0lTVEVSUykgLSBOVU1CRVJfT0ZfQVJH
VU1FTlRfUkVHSVNURVJTKSAqIHdvcmRTaXplOworICAgICAgICAKKyAgICBmb3IgKHVuc2lnbmVk
IGkgPSBzdGQ6Om1pbihOVU1CRVJfT0ZfQVJHVU1FTlRfUkVHSVNURVJTLCBudW1BcmdzKTsgaS0t
OykKKyAgICAgICAgbV9hcmd1bWVudFJlZ2lzdGVycy5zZXQoR1BSSW5mbzo6dG9Bcmd1bWVudFJl
Z2lzdGVyKGkpKTsKKyAgICBtX2NhbGxpbmdDb252ZW50aW9uUmVnaXN0ZXJzLm1lcmdlKG1fYXJn
dW1lbnRSZWdpc3RlcnMpOworICAgIGlmIChyZXR1cm5SZWdpc3RlciAhPSBJbnZhbGlkR1BSUmVn
KQorICAgICAgICBtX2NhbGxpbmdDb252ZW50aW9uUmVnaXN0ZXJzLnNldChHUFJJbmZvOjpyZXR1
cm5WYWx1ZUdQUik7CisgICAgbV9jYWxsaW5nQ29udmVudGlvblJlZ2lzdGVycy5maWx0ZXIodXNl
ZFJlZ2lzdGVycyk7CisgICAgICAgIAorICAgIHVuc2lnbmVkIG51bWJlck9mQ2FsbGluZ0NvbnZl
bnRpb25SZWdpc3RlcnMgPQorICAgICAgICBtX2NhbGxpbmdDb252ZW50aW9uUmVnaXN0ZXJzLm51
bWJlck9mU2V0UmVnaXN0ZXJzKCk7CisgICAgICAgIAorICAgIHNpemVfdCBvZmZzZXRUb1RodW5r
U2F2aW5nQXJlYSA9CisgICAgICAgIG1fb2Zmc2V0VG9TYXZpbmdBcmVhICsKKyAgICAgICAgbnVt
YmVyT2ZDYWxsaW5nQ29udmVudGlvblJlZ2lzdGVycyAqIHdvcmRTaXplOworICAgICAgICAKKyAg
ICBtX3N0YWNrQnl0ZXNOZWVkZWQgPQorICAgICAgICBvZmZzZXRUb1RodW5rU2F2aW5nQXJlYSAr
CisgICAgICAgIHN0YWNrQnl0ZXNOZWVkZWRGb3JSZXR1cm5BZGRyZXNzICsKKyAgICAgICAgKHVz
ZWRSZWdpc3RlcnMubnVtYmVyT2ZTZXRSZWdpc3RlcnMoKSAtIG51bWJlck9mQ2FsbGluZ0NvbnZl
bnRpb25SZWdpc3RlcnMpICogd29yZFNpemU7CisgICAgICAgIAorICAgIG1fc3RhY2tCeXRlc05l
ZWRlZCA9IChtX3N0YWNrQnl0ZXNOZWVkZWQgKyBzdGFja0FsaWdubWVudEJ5dGVzKCkgLSAxKSAm
IH4oc3RhY2tBbGlnbm1lbnRCeXRlcygpIC0gMSk7CisgICAgICAgIAorICAgIG1faml0LnN1YlB0
cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihtX3N0YWNrQnl0ZXNOZWVkZWQpLCBDQ2FsbEhl
bHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKworICAgIG1fdGh1bmtTYXZlU2V0ID0gdXNl
ZFJlZ2lzdGVyczsKKyAgICAgICAgCisgICAgLy8gVGhpcyByZWxpZXMgb24gYWxsIGNhbGxpbmcg
Y29udmVudGlvbiByZWdpc3RlcnMgYWxzbyBiZWluZyB0ZW1wIHJlZ2lzdGVycy4KKyAgICB1bnNp
Z25lZCBzdGFja0luZGV4ID0gMDsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBHUFJJbmZvOjpudW1i
ZXJPZlJlZ2lzdGVyczsgaS0tOykgeworICAgICAgICBHUFJSZWcgcmVnID0gR1BSSW5mbzo6dG9S
ZWdpc3RlcihpKTsKKyAgICAgICAgaWYgKCFtX2NhbGxpbmdDb252ZW50aW9uUmVnaXN0ZXJzLmdl
dChyZWcpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIG1faml0LnN0b3JlUHRyKHJl
ZywgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0
ZXIsIG1fb2Zmc2V0VG9TYXZpbmdBcmVhICsgKHN0YWNrSW5kZXgrKykgKiB3b3JkU2l6ZSkpOwor
ICAgICAgICBtX3RodW5rU2F2ZVNldC5jbGVhcihyZWcpOwogICAgIH0KKyAgICAgICAgCisgICAg
bV9vZmZzZXQgPSBvZmZzZXRUb1RodW5rU2F2aW5nQXJlYTsKK30KICAgICAKLSAgICBTbG93UGF0
aENhbGxLZXkga2V5V2l0aFRhcmdldCh2b2lkKiBjYWxsVGFyZ2V0KSBjb25zdAotICAgIHsKLSAg
ICAgICAgcmV0dXJuIFNsb3dQYXRoQ2FsbEtleSh1c2VkUmVnaXN0ZXJzKCksIGNhbGxUYXJnZXQs
IG1fYXJndW1lbnRSZWdpc3RlcnMsIG9mZnNldCgpKTsKLSAgICB9CitTbG93UGF0aENhbGxDb250
ZXh0Ojp+U2xvd1BhdGhDYWxsQ29udGV4dCgpCit7CisgICAgaWYgKG1fcmV0dXJuUmVnaXN0ZXIg
IT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgbV9qaXQubW92ZShHUFJJbmZvOjpyZXR1cm5WYWx1
ZUdQUiwgbV9yZXR1cm5SZWdpc3Rlcik7CiAgICAgCi0gICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwg
bWFrZUNhbGwodm9pZCogY2FsbFRhcmdldCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0KiBleGNl
cHRpb25UYXJnZXQpCi0gICAgewotICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCByZXN1bHQg
PSBtX2ppdC5jYWxsKCk7Ci0gICAgICAgIG1fc3RhdGUuZmluYWxpemVyLT5zbG93UGF0aENhbGxz
LmFwcGVuZChTbG93UGF0aENhbGwoCi0gICAgICAgICAgICByZXN1bHQsIGtleVdpdGhUYXJnZXQo
Y2FsbFRhcmdldCkpKTsKLSAgICAgICAgaWYgKGV4Y2VwdGlvblRhcmdldCkKLSAgICAgICAgICAg
IGV4Y2VwdGlvblRhcmdldC0+YXBwZW5kKG1faml0LmVtaXRFeGNlcHRpb25DaGVjaygpKTsKLSAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB1bnNpZ25lZCBzdGFja0luZGV4ID0gMDsKKyAgICBm
b3IgKHVuc2lnbmVkIGkgPSBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgaS0tOykgeworICAg
ICAgICBHUFJSZWcgcmVnID0gR1BSSW5mbzo6dG9SZWdpc3RlcihpKTsKKyAgICAgICAgaWYgKCFt
X2NhbGxpbmdDb252ZW50aW9uUmVnaXN0ZXJzLmdldChyZWcpKQorICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgIG1faml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKENDYWxsSGVs
cGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIG1fb2Zmc2V0VG9TYXZpbmdBcmVhICsgKHN0YWNr
SW5kZXgrKykgKiB3b3JkU2l6ZSksIHJlZyk7CiAgICAgfQogICAgIAotcHJpdmF0ZToKLSAgICBT
dGF0ZSYgbV9zdGF0ZTsKLSAgICBSZWdpc3RlclNldCBtX3VzZWRSZWdpc3RlcnM7Ci0gICAgUmVn
aXN0ZXJTZXQgbV9hcmd1bWVudFJlZ2lzdGVyczsKLSAgICBSZWdpc3RlclNldCBtX2NhbGxpbmdD
b252ZW50aW9uUmVnaXN0ZXJzOwotICAgIENDYWxsSGVscGVycyYgbV9qaXQ7Ci0gICAgdW5zaWdu
ZWQgbV9udW1BcmdzOwotICAgIEdQUlJlZyBtX3JldHVyblJlZ2lzdGVyOwotICAgIHNpemVfdCBt
X29mZnNldFRvU2F2aW5nQXJlYTsKLSAgICBzaXplX3QgbV9zdGFja0J5dGVzTmVlZGVkOwotICAg
IFJlZ2lzdGVyU2V0IG1fdGh1bmtTYXZlU2V0OwotICAgIHB0cmRpZmZfdCBtX29mZnNldDsKLX07
CisgICAgbV9qaXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKG1fc3RhY2tCeXRl
c05lZWRlZCksIENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworfQogCi19IC8v
IGFub255bW91cyBuYW1lc3BhY2UKK1Nsb3dQYXRoQ2FsbEtleSBTbG93UGF0aENhbGxDb250ZXh0
OjprZXlXaXRoVGFyZ2V0KHZvaWQqIGNhbGxUYXJnZXQpIGNvbnN0Cit7CisgICAgcmV0dXJuIFNs
b3dQYXRoQ2FsbEtleShtX3RodW5rU2F2ZVNldCwgY2FsbFRhcmdldCwgbV9hcmd1bWVudFJlZ2lz
dGVycywgbV9vZmZzZXQpOworfQorCitTbG93UGF0aENhbGwgU2xvd1BhdGhDYWxsQ29udGV4dDo6
bWFrZUNhbGwodm9pZCogY2FsbFRhcmdldCwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0KiBleGNl
cHRpb25UYXJnZXQpCit7CisgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCA9IG1faml0LmNh
bGwoKTsKKyAgICBTbG93UGF0aENhbGwgcmVzdWx0KGNhbGwsIGtleVdpdGhUYXJnZXQoY2FsbFRh
cmdldCkpOworICAgIGlmIChleGNlcHRpb25UYXJnZXQpCisgICAgICAgIGV4Y2VwdGlvblRhcmdl
dC0+YXBwZW5kKG1faml0LmVtaXRFeGNlcHRpb25DaGVjaygpKTsKKyAgICByZXR1cm4gcmVzdWx0
OworfQogCiB2b2lkIHN0b3JlQ29kZU9yaWdpbihTdGF0ZSYgc3RhdGUsIENDYWxsSGVscGVycyYg
aml0LCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCiB7CkBAIC0xNzMsMTcgKzEzOCwyMCBAQCB2b2lk
IHN0b3JlQ29kZU9yaWdpbihTdGF0ZSYgc3RhdGUsIENDYWxsCiAgICAgICAgIENDYWxsSGVscGVy
czo6dGFnRm9yKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4oSlNTdGFjazo6QXJndW1lbnRD
b3VudCkpKTsKIH0KIAordm9pZCByZWdpc3RlclNsb3dQYXRoQ2FsbChTdGF0ZSYgc3RhdGUsIFNs
b3dQYXRoQ2FsbCBjYWxsKQoreworICAgIHN0YXRlLmZpbmFsaXplci0+c2xvd1BhdGhDYWxscy5h
cHBlbmQoY2FsbCk7Cit9CisKIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oCiAg
ICAgU3RhdGUmIHN0YXRlLCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywgQ0NhbGxI
ZWxwZXJzJiBqaXQsCiAgICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBNYWNyb0Fzc2VtYmxlcjo6
SnVtcExpc3QqIGV4Y2VwdGlvblRhcmdldCwKICAgICBKX0pJVE9wZXJhdGlvbl9FU3NpQ0kgb3Bl
cmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sCiAgICAg
R1BSUmVnIG9iamVjdCwgY29uc3QgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKIHsKLSAgICBzdG9y
ZUNvZGVPcmlnaW4oc3RhdGUsIGppdCwgY29kZU9yaWdpbik7Ci0gICAgQ2FsbENvbnRleHQgY29u
dGV4dChzdGF0ZSwgdXNlZFJlZ2lzdGVycywgaml0LCA0LCByZXN1bHQpOwotICAgIGppdC5zZXR1
cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoCisgICAgcmV0dXJuIGNhbGxPcGVyYXRpb24oCisgICAg
ICAgIHN0YXRlLCB1c2VkUmVnaXN0ZXJzLCBqaXQsIGNvZGVPcmlnaW4sIGV4Y2VwdGlvblRhcmdl
dCwgRnVuY3Rpb25QdHIob3BlcmF0aW9uKSwgcmVzdWx0LAogICAgICAgICBDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW1QdHIoc3R1YkluZm8pLCBvYmplY3QsIENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bVB0cih1aWQpKTsKLSAgICByZXR1cm4gY29udGV4dC5tYWtlQ2FsbChiaXR3aXNlX2Nhc3Q8dm9p
ZCo+KG9wZXJhdGlvbiksIGV4Y2VwdGlvblRhcmdldCk7CiB9CiAKIE1hY3JvQXNzZW1ibGVyOjpD
YWxsIGNhbGxPcGVyYXRpb24oCkBAIC0xOTIsMTIgKzE2MCw5IEBAIE1hY3JvQXNzZW1ibGVyOjpD
YWxsIGNhbGxPcGVyYXRpb24oCiAgICAgSl9KSVRPcGVyYXRpb25fRVNzaUpJIG9wZXJhdGlvbiwg
R1BSUmVnIHJlc3VsdCwgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLAogICAgIEdQUlJlZyBv
YmplY3QsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCiB7Ci0gICAgc3RvcmVDb2RlT3JpZ2luKHN0
YXRlLCBqaXQsIGNvZGVPcmlnaW4pOwotICAgIENhbGxDb250ZXh0IGNvbnRleHQoc3RhdGUsIHVz
ZWRSZWdpc3RlcnMsIGppdCwgNCwgcmVzdWx0KTsKLSAgICBqaXQuc2V0dXBBcmd1bWVudHNXaXRo
RXhlY1N0YXRlKAotICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoc3R1YkluZm8p
LCBvYmplY3QsCi0gICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cih1aWQpKTsKLSAg
ICByZXR1cm4gY29udGV4dC5tYWtlQ2FsbChiaXR3aXNlX2Nhc3Q8dm9pZCo+KG9wZXJhdGlvbiks
IGV4Y2VwdGlvblRhcmdldCk7CisgICAgcmV0dXJuIGNhbGxPcGVyYXRpb24oCisgICAgICAgIHN0
YXRlLCB1c2VkUmVnaXN0ZXJzLCBqaXQsIGNvZGVPcmlnaW4sIGV4Y2VwdGlvblRhcmdldCwgRnVu
Y3Rpb25QdHIob3BlcmF0aW9uKSwgcmVzdWx0LAorICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW1QdHIoc3R1YkluZm8pLCBvYmplY3QsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cih1
aWQpKTsKIH0KIAogTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbigKQEAgLTIwNiwx
MiArMTcxLDkgQEAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbigKICAgICBWX0pJ
VE9wZXJhdGlvbl9FU3NpSkpJIG9wZXJhdGlvbiwgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZv
LCBHUFJSZWcgdmFsdWUsCiAgICAgR1BSUmVnIG9iamVjdCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVp
ZCkKIHsKLSAgICBzdG9yZUNvZGVPcmlnaW4oc3RhdGUsIGppdCwgY29kZU9yaWdpbik7Ci0gICAg
Q2FsbENvbnRleHQgY29udGV4dChzdGF0ZSwgdXNlZFJlZ2lzdGVycywgaml0LCA1LCBJbnZhbGlk
R1BSUmVnKTsKLSAgICBqaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKAotICAgICAgICBD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoc3R1YkluZm8pLCB2YWx1ZSwgb2JqZWN0LAotICAg
ICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIodWlkKSk7Ci0gICAgcmV0dXJuIGNvbnRl
eHQubWFrZUNhbGwoYml0d2lzZV9jYXN0PHZvaWQqPihvcGVyYXRpb24pLCBleGNlcHRpb25UYXJn
ZXQpOworICAgIHJldHVybiBjYWxsT3BlcmF0aW9uKAorICAgICAgICBzdGF0ZSwgdXNlZFJlZ2lz
dGVycywgaml0LCBjb2RlT3JpZ2luLCBleGNlcHRpb25UYXJnZXQsIEZ1bmN0aW9uUHRyKG9wZXJh
dGlvbiksIEludmFsaWRHUFJSZWcsCisgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0
cihzdHViSW5mbyksIHZhbHVlLCBvYmplY3QsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cih1
aWQpKTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExTbG93UGF0aENhbGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTFNsb3dQYXRoQ2FsbC5oCShyZXZpc2lvbiAxOTA3MzUpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNsb3dQYXRoQ2FsbC5oCSh3b3JraW5nIGNvcHkp
CkBAIC01NSw3ICs1NSw1MSBAQCBwcml2YXRlOgogICAgIFNsb3dQYXRoQ2FsbEtleSBtX2tleTsK
IH07CiAKKy8vIFRoaXMgd2lsbCBiZSBhbiBSQUlJIHRoaW5neSB0aGF0IHdpbGwgc2V0IHVwIHRo
ZSBuZWNlc3Nhcnkgc3RhY2sgc2l6ZXMgYW5kIG9mZnNldHMgYW5kIHN1Y2guCitjbGFzcyBTbG93
UGF0aENhbGxDb250ZXh0IHsKK3B1YmxpYzoKKyAgICBTbG93UGF0aENhbGxDb250ZXh0KFJlZ2lz
dGVyU2V0IHVzZWRSZWdpc3RlcnMsIENDYWxsSGVscGVycyYsIHVuc2lnbmVkIG51bUFyZ3MsIEdQ
UlJlZyByZXR1cm5SZWdpc3Rlcik7CisgICAgflNsb3dQYXRoQ2FsbENvbnRleHQoKTsKKworICAg
IFNsb3dQYXRoQ2FsbCBtYWtlQ2FsbCh2b2lkKiBjYWxsVGFyZ2V0LCBNYWNyb0Fzc2VtYmxlcjo6
SnVtcExpc3QqIGV4Y2VwdGlvblRhcmdldCk7CisKK3ByaXZhdGU6CisgICAgU2xvd1BhdGhDYWxs
S2V5IGtleVdpdGhUYXJnZXQodm9pZCogY2FsbFRhcmdldCkgY29uc3Q7CisgICAgCisgICAgUmVn
aXN0ZXJTZXQgbV9hcmd1bWVudFJlZ2lzdGVyczsKKyAgICBSZWdpc3RlclNldCBtX2NhbGxpbmdD
b252ZW50aW9uUmVnaXN0ZXJzOworICAgIENDYWxsSGVscGVycyYgbV9qaXQ7CisgICAgdW5zaWdu
ZWQgbV9udW1BcmdzOworICAgIEdQUlJlZyBtX3JldHVyblJlZ2lzdGVyOworICAgIHNpemVfdCBt
X29mZnNldFRvU2F2aW5nQXJlYTsKKyAgICBzaXplX3QgbV9zdGFja0J5dGVzTmVlZGVkOworICAg
IFJlZ2lzdGVyU2V0IG1fdGh1bmtTYXZlU2V0OworICAgIHB0cmRpZmZfdCBtX29mZnNldDsKK307
CisKK3RlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50VHlwZXM+CitTbG93UGF0aENhbGwgY2Fs
bE9wZXJhdGlvbkltcGwoCisgICAgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsIEND
YWxsSGVscGVycyYgaml0LCBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0KiBleGNlcHRpb25UYXJnZXQs
CisgICAgRnVuY3Rpb25QdHIgZnVuY3Rpb24sIEdQUlJlZyByZXN1bHQsIEFyZ3VtZW50VHlwZXMu
Li4gYXJndW1lbnRzKQoreworICAgIFNsb3dQYXRoQ2FsbENvbnRleHQgY29udGV4dCh1c2VkUmVn
aXN0ZXJzLCBqaXQsIHNpemVvZi4uLihBcmd1bWVudFR5cGVzKSArIDEsIHJlc3VsdCk7CisgICAg
aml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmd1bWVudHMuLi4pOworICAgIHJldHVy
biBjb250ZXh0Lm1ha2VDYWxsKGZ1bmN0aW9uLnZhbHVlKCksIGV4Y2VwdGlvblRhcmdldCk7Cit9
CisKIHZvaWQgc3RvcmVDb2RlT3JpZ2luKFN0YXRlJiwgQ0NhbGxIZWxwZXJzJiwgQ29kZU9yaWdp
bik7Cit2b2lkIHJlZ2lzdGVyU2xvd1BhdGhDYWxsKFN0YXRlJiwgU2xvd1BhdGhDYWxsKTsKKwor
dGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRUeXBlcz4KK01hY3JvQXNzZW1ibGVyOjpDYWxs
IGNhbGxPcGVyYXRpb24oCisgICAgU3RhdGUmIHN0YXRlLCBjb25zdCBSZWdpc3RlclNldCYgdXNl
ZFJlZ2lzdGVycywgQ0NhbGxIZWxwZXJzJiBqaXQsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwKKyAg
ICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0KiBleGNlcHRpb25UYXJnZXQsIEZ1bmN0aW9uUHRyIGZ1
bmN0aW9uLCBHUFJSZWcgcmVzdWx0LCBBcmd1bWVudFR5cGVzLi4uIGFyZ3VtZW50cykKK3sKKyAg
ICBzdG9yZUNvZGVPcmlnaW4oc3RhdGUsIGppdCwgY29kZU9yaWdpbik7CisgICAgU2xvd1BhdGhD
YWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uSW1wbCh1c2VkUmVnaXN0ZXJzLCBqaXQsIGV4Y2VwdGlv
blRhcmdldCwgZnVuY3Rpb24sIHJlc3VsdCwgYXJndW1lbnRzLi4uKTsKKyAgICByZWdpc3RlclNs
b3dQYXRoQ2FsbChzdGF0ZSwgY2FsbCk7CisgICAgcmV0dXJuIGNhbGwuY2FsbCgpOworfQogCiBN
YWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKAogICAgIFN0YXRlJiwgY29uc3QgUmVn
aXN0ZXJTZXQmLCBDQ2FsbEhlbHBlcnMmLCBDb2RlT3JpZ2luLCBDQ2FsbEhlbHBlcnM6Okp1bXBM
aXN0KiwKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1N0ZExpYkV4dHJhcy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XVEYvd3RmL1N0ZExpYkV4dHJhcy5oCShyZXZpc2lvbiAxOTA3MzUpCisrKyBTb3Vy
Y2UvV1RGL3d0Zi9TdGRMaWJFeHRyYXMuaAkod29ya2luZyBjb3B5KQpAQCAtMjg3LDYgKzI4Nywz
MCBAQCBpbmxpbmUgdm9pZCBpbnNlcnRJbnRvQm91bmRlZFZlY3RvcihWZWN0CiAvLyBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTMxODE1CiBXVEZfRVhQT1JUX1BSSVZB
VEUgYm9vbCBpc0NvbXBpbGF0aW9uVGhyZWFkKCk7CiAKK3RlbXBsYXRlPHVuc2lnbmVkIGluZGV4
Pgorc3RydWN0IFR1cGxlQXBwbGljYXRvciB7CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rv
ciwgdHlwZW5hbWUuLi4gVHVwbGVUeXBlcywgdHlwZW5hbWUuLi4gQXJnVHlwZXM+CisgICAgdm9p
ZCBhcHBseShjb25zdCBGdW5jdG9yJiBmdW5jdG9yLCBjb25zdCBzdGQ6OnR1cGxlPFR1cGxlVHlw
ZXMuLi4+JiB0dXBsZSwgQXJnVHlwZXMuLi4gYXJnVHlwZXMpCisgICAgeworICAgICAgICBUdXBs
ZUFwcGxpY2F0b3I8aW5kZXggLSAxPjo6YXBwbHkoZnVuY3RvciwgdHVwbGUsIGFyZ1R5cGVzLi4u
LCBzdGQ6OmdldDxzaXplb2YuLi4oVHVwbGVUeXBlcykgLSBpbmRleD4odHVwbGUpKTsKKyAgICB9
Cit9OworCit0ZW1wbGF0ZTw+CitzdHJ1Y3QgVHVwbGVBcHBsaWNhdG9yPDA+IHsKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBGdW5jdG9yLCB0eXBlbmFtZS4uLiBUdXBsZVR5cGVzLCB0eXBlbmFtZS4u
LiBBcmdUeXBlcz4KKyAgICB2b2lkIGFwcGx5KGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IsIGNvbnN0
IHN0ZDo6dHVwbGU8VHVwbGVUeXBlcy4uLj4mLCBBcmdUeXBlcy4uLiBhcmdUeXBlcykKKyAgICB7
CisgICAgICAgIGZ1bmN0b3IoYXJnVHlwZXMuLi4pOworICAgIH0KK307CisKK3RlbXBsYXRlPHR5
cGVuYW1lIEZ1bmN0b3IsIHR5cGVuYW1lLi4uIFR1cGxlVHlwZXM+Cit2b2lkIHR1cGxlQXBwbHko
Y29uc3QgRnVuY3RvciYgZnVuY3RvciwgY29uc3Qgc3RkOjp0dXBsZTxUdXBsZVR5cGVzLi4uPiYg
dHVwbGUpCit7CisgICAgVHVwbGVBcHBsaWNhdG9yPHNpemVvZi4uLihUdXBsZVR5cGVzKT46OmFw
cGx5KGZ1bmN0b3IsIHR1cGxlKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV1RGCiAKIC8vIFRoaXMg
dmVyc2lvbiBvZiBwbGFjZW1lbnQgbmV3IG9taXRzIGEgMCBjaGVjay4KQEAgLTM5Miw2ICs0MTYs
NyBAQCB1c2luZyBXVEY6OnRyeUJpbmFyeVNlYXJjaDsKIHVzaW5nIFdURjo6YXBwcm94aW1hdGVC
aW5hcnlTZWFyY2g7CiB1c2luZyBXVEY6OmJpdHdpc2VfY2FzdDsKIHVzaW5nIFdURjo6c2FmZUNh
c3Q7Cit1c2luZyBXVEY6OnR1cGxlQXBwbHk7CiAKICNpZiBDT01QSUxFUl9TVVBQT1JUUyhDWFhf
VVNFUl9MSVRFUkFMUykKIC8vIFdlIG5vcm1hbGx5IGRvbid0IHdhbnQgdG8gYnJpbmcgaW4gZW50
aXJlIHN0ZCBuYW1lc3BhY2VzLCBidXQgbGl0ZXJhbHMgYXJlIGFuIGV4Y2VwdGlvbi4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>262735</attachid>
            <date>2015-10-08 18:31:25 -0700</date>
            <delta_ts>2015-10-08 21:20:11 -0700</delta_ts>
            <desc>more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>31786</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2Vt
Ymxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJz
dHJhY3RNYWNyb0Fzc2VtYmxlci5oCShyZXZpc2lvbiAxOTA3NDkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMTAwNCw2ICsxMDA0LDE3IEBAIHB1YmxpYzoKICAgICAgICAgQXNzZW1ibGVyVHlwZTo6
cmVwbGFjZVdpdGhBZGRyZXNzQ29tcHV0YXRpb24obGFiZWwuZGF0YUxvY2F0aW9uKCkpOwogICAg
IH0KIAorICAgIHZvaWQgYWRkTGlua1Rhc2soU2hhcmVkVGFzazx2b2lkKExpbmtCdWZmZXImKT4q
IHRhc2spCisgICAgeworICAgICAgICBtX2xpbmtUYXNrcy5hcHBlbmQodGFzayk7CisgICAgfQor
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGFkZExpbmtUYXNrKGNv
bnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgeworICAgICAgICBhZGRMaW5rVGFzayhjcmVhdGVT
aGFyZWRUYXNrPHZvaWQoTGlua0J1ZmZlciYpPihmdW5jdG9yKSk7CisgICAgfQorCiBwcm90ZWN0
ZWQ6CiAgICAgQWJzdHJhY3RNYWNyb0Fzc2VtYmxlcigpCiAgICAgICAgIDogbV9yYW5kb21Tb3Vy
Y2UoY3J5cHRvZ3JhcGhpY2FsbHlSYW5kb21OdW1iZXIoKSkKQEAgLTEwOTksMTAgKzExMTAsOSBA
QCBwcm90ZWN0ZWQ6CiAKICAgICB1bnNpZ25lZCBtX3RlbXBSZWdpc3RlcnNWYWxpZEJpdHM7CiAK
LSAgICBmcmllbmQgY2xhc3MgTGlua0J1ZmZlcjsKLQotcHJpdmF0ZToKKyAgICBWZWN0b3I8UmVm
UHRyPFNoYXJlZFRhc2s8dm9pZChMaW5rQnVmZmVyJik+Pj4gbV9saW5rVGFza3M7CiAKKyAgICBm
cmllbmQgY2xhc3MgTGlua0J1ZmZlcjsKIH07IC8vIGNsYXNzIEFic3RyYWN0TWFjcm9Bc3NlbWJs
ZXIKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL0xpbmtCdWZmZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5jcHAJKHJldmlzaW9uIDE5MDc0OSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE5Myw2ICsxOTMsOSBAQCB2b2lkIExpbmtCdWZmZXI6OmxpbmtDb2RlKE1hY3JvQXNzZW1ibGVy
CiAjZWxpZiBDUFUoQVJNNjQpCiAgICAgY29weUNvbXBhY3RBbmRMaW5rQ29kZTx1aW50MzJfdD4o
bWFjcm9Bc3NlbWJsZXIsIG93bmVyVUlELCBlZmZvcnQpOwogI2VuZGlmCisKKyAgICBmb3IgKGF1
dG8mIHRhc2sgOiBtYWNyb0Fzc2VtYmxlci5tX2xpbmtUYXNrcykKKyAgICAgICAgdGFzay0+cnVu
KCp0aGlzKTsKIH0KIAogdm9pZCBMaW5rQnVmZmVyOjphbGxvY2F0ZShzaXplX3QgaW5pdGlhbFNp
emUsIHZvaWQqIG93bmVyVUlELCBKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExhenlTbG93UGF0aC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMYXp5U2xvd1BhdGguY3BwCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMYXp5U2xvd1BhdGguY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlz
dHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBt
YXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09G
VFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAor
ICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZUTExh
enlTbG93UGF0aC5oIgorCisjaW5jbHVkZSAiRlRMU2xvd1BhdGhDYWxsLmgiCisKK25hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKKworTGF6eVNsb3dQYXRoOjpMYXp5U2xvd1BhdGgoCisg
ICAgQ29kZUxvY2F0aW9uTGFiZWwgcGF0Y2hwb2ludCwgQ29kZUxvY2F0aW9uTGFiZWwgZXhjZXB0
aW9uVGFyZ2V0LAorICAgIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLCBHZW5lcmF0
b3IqIGdlbmVyYXRvcikKKyAgICA6IG1fcGF0Y2hwb2ludChwYXRjaHBvaW50KQorICAgICwgbV9l
eGNlcHRpb25UYXJnZXQoZXhjZXB0aW9uVGFyZ2V0KQorICAgICwgbV91c2VkUmVnaXN0ZXJzKHVz
ZWRSZWdpc3RlcnMpCisgICAgLCBtX2dlbmVyYXRvcihnZW5lcmF0b3IpCit7Cit9CisKK0xhenlT
bG93UGF0aDo6fkxhenlTbG93UGF0aCgpCit7Cit9CisKK3ZvaWQgTGF6eVNsb3dQYXRoOjpnZW5l
cmF0ZShDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3sKKyAgICBSRUxFQVNFX0FTU0VSVCghbV9zdHVi
KTsKKworICAgIFZNJiB2bSA9ICpjb2RlQmxvY2stPnZtKCk7CisKKyAgICBDQ2FsbEhlbHBlcnMg
aml0KCZ2bSwgY29kZUJsb2NrKTsKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IGV4Y2VwdGlv
bkp1bXBzOworICAgIG1fZ2VuZXJhdG9yLT5ydW4oaml0LCBtX2V4Y2VwdGlvblRhcmdldCA/ICZl
eGNlcHRpb25KdW1wcyA6IG51bGxwdHIsICp0aGlzKTsKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXAg
ZG9uZSA9IGppdC5qdW1wKCk7CisKKyAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIodm0sIGppdCwg
Y29kZUJsb2NrLCBKSVRDb21waWxhdGlvbk11c3RTdWNjZWVkKTsKKyAgICBsaW5rQnVmZmVyLmxp
bmsoZG9uZSwgbV9wYXRjaHBvaW50LmxhYmVsQXRPZmZzZXQoTWFjcm9Bc3NlbWJsZXI6Om1heEp1
bXBSZXBsYWNlbWVudFNpemUoKSkpOworICAgIGlmIChleGNlcHRpb25UYXJnZXQpCisgICAgICAg
IGxpbmtCdWZmZXIubGluayhleGNlcHRpb25KdW1wcywgbV9leGNlcHRpb25UYXJnZXQpOworICAg
IG1fc3R1YiA9IEZJTkFMSVpFX0NPREVfRk9SKGNvZGVCbG9jaywgbGlua0J1ZmZlciwgKCJMYXp5
IHNsb3cgcGF0aCBjYWxsIHN0dWIiKSk7CisKKyAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwbGFjZVdp
dGhKdW1wKG1fcGF0Y2hwb2ludCwgQ29kZUxvY2F0aW9uTGFiZWwobV9zdHViLmNvZGUoKSkpOwor
fQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCisKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExMYXp5U2xvd1BhdGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTExhenlTbG93UGF0aC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExMYXp5U2xvd1BhdGguaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgRlRMTGF6eVNsb3dQYXRoX2gKKyNkZWZpbmUgRlRMTGF6eVNsb3dQYXRoX2gKKwor
I2luY2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUgIkNvZGVMb2NhdGlvbi5oIgorI2luY2x1
ZGUgIkdQUkluZm8uaCIKKyNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlckNvZGVSZWYuaCIKKyNpbmNs
dWRlICJSZWdpc3RlclNldC5oIgorI2luY2x1ZGUgPHd0Zi9TaGFyZWRUYXNrLmg+CisKK25hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKKworY2xhc3MgTGF6eVNsb3dQYXRoIHsKKyAgICBX
VEZfTUFLRV9OT05DT1BZQUJMRShMYXp5U2xvd1BhdGgpOworICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOworcHVibGljOgorICAgIHR5cGVkZWYgU2hhcmVkVGFzazx2b2lkKENDYWxsSGVscGVy
cyYsIENDYWxsSGVscGVyczo6SnVtcExpc3QqIGV4Y2VwdGlvbkp1bXBzLCBMYXp5U2xvd1BhdGgm
KT4gR2VuZXJhdG9yOworICAgIAorICAgIExhenlTbG93UGF0aCgKKyAgICAgICAgQ29kZUxvY2F0
aW9uTGFiZWwgcGF0Y2hwb2ludCwgQ29kZUxvY2F0aW9uTGFiZWwgZXhjZXB0aW9uVGFyZ2V0LAor
ICAgICAgICBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywgR2VuZXJhdG9yKik7CisK
KyAgICB+TGF6eVNsb3dQYXRoKCk7CisgICAgCisgICAgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRS
ZWdpc3RlcnMoKSBjb25zdCB7IHJldHVybiBtX3VzZWRSZWdpc3RlcnM7IH0KKworICAgIHZvaWQg
Z2VuZXJhdGUoQ29kZUJsb2NrKik7CisKK3ByaXZhdGU6CisgICAgQ29kZUxvY2F0aW9uTGFiZWwg
bV9wYXRjaHBvaW50OworICAgIENvZGVMb2NhdGlvbkxhYmVsIG1fZXhjZXB0aW9uVGFyZ2V0Owor
ICAgIFJlZ2lzdGVyU2V0IG1fdXNlZFJlZ2lzdGVyczsKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWYgbV9zdHViOworICAgIFJlZlB0cjxHZW5lcmF0b3I+IG1fZ2VuZXJhdG9yOworfTsKKworfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRlRMTGF6eVNsb3dQYXRoX2gKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMYXp5U2xvd1BhdGhDYWxsLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMYXp5U2xvd1BhdGhDYWxs
LmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExhenlTbG93
UGF0aENhbGwuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDYyIEBACisvKgorICogQ29weXJp
Z2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBv
ZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3Rp
Y2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIu
CisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBh
bmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAq
CisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUg
TElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAq
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklD
RVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJS
VVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZ
LCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5D
TFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9G
IFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9T
U0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgRlRMTGF6eVNsb3dQYXRo
Q2FsbF9oCisjZGVmaW5lIEZUTExhenlTbG93UGF0aENhbGxfaAorCisjaW5jbHVkZSAiQ29kZUJs
b2NrLmgiCisjaW5jbHVkZSAiQ29kZUxvY2F0aW9uLmgiCisjaW5jbHVkZSAiRlRMU2xvd1BhdGhD
YWxsLmgiCisjaW5jbHVkZSAiR1BSSW5mby5oIgorI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyQ29k
ZVJlZi5oIgorI2luY2x1ZGUgIlJlZ2lzdGVyU2V0LmgiCisKK25hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgRlRMIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgUmVzdWx0VHlwZSwgdHlwZW5hbWUuLi4g
QXJndW1lbnRUeXBlcz4KK3N0ZDo6dW5pcXVlX3B0cjxMYXp5U2xvd1BhdGg+IGNyZWF0ZUxhenlT
bG93UGF0aENhbGwoCisgICAgQ29kZUxvY2F0aW9ubGFiZWwgcGF0Y2hwb2ludCwgQ29kZUxvY2F0
aW9uTGFiZWwgZXhjZXB0aW9uVGFyZ2V0LCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVy
cywKKyAgICBGdW5jdGlvblB0ciBmdW5jdGlvbiwgUmVzdWx0VHlwZSByZXN1bHQsIEFyZ3VtZW50
VHlwZXMuLi4gYXJndW1lbnRzKQoreworICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPExhenlT
bG93UGF0aD4oCisgICAgICAgIHBhdGNocG9pbnQsIGV4Y2VwdGlvblRhcmdldCwgdXNlZFJlZ2lz
dGVycywKKyAgICAgICAgWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgQ0NhbGxIZWxwZXJzOjpKdW1w
TGlzdCogZXhjZXB0aW9uSnVtcHMsIExhenlTbG93UGF0aCYgbGF6eVNsb3dQYXRoKSB7CisgICAg
ICAgICAgICBTbG93UGF0aENhbGwgc2xvd1BhdGggPSBjYWxsT3BlcmF0aW9uKAorICAgICAgICAg
ICAgICAgIGxhenlTbG93UGF0aC51c2VkUmVnaXN0ZXJzKCksIGppdCwgZXhjZXB0aW9uSnVtcHMs
IGZ1bmN0aW9uLCByZXN1bHQsIGFyZ3VtZW50cy4uLik7CisgICAgICAgICAgICBqaXQuYWRkTGlu
a1Rhc2soCisgICAgICAgICAgICAgICAgWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluaygKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHNsb3dQYXRoLmNhbGwoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIENvZGVMb2NhdGlv
bkxhYmVsKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGppdC52bSgpLT5mdGxUaHVua3Mt
PmdldFNsb3dQYXRoQ2FsbFRodW5rKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAq
aml0LnZtKCksIHNsb3dQYXRoLmtleSgpKS5jb2RlKCkpKTsKKyAgICAgICAgICAgICAgICB9KTsK
KyAgICAgICAgfSk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKKworI2VuZGlmIC8v
IEZUTExhenlTbG93UGF0aENhbGxfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTFNsb3dQYXRoQ2FsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExTbG93UGF0aENhbGwuY3BwCShyZXZpc2lvbiAxOTA3NDkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTFNsb3dQYXRoQ2FsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1
LDEzMSArMzUsOTYgQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewogCi1uYW1l
c3BhY2UgewotCiAvLyBUaGlzIGNvZGUgcmVsaWVzIG9uIHVzIGJlaW5nIDY0LWJpdC4gRlRMIGlz
IGN1cnJlbnRseSBhbHdheXMgNjQtYml0Lgogc3RhdGljIGNvbnN0IHNpemVfdCB3b3JkU2l6ZSA9
IDg7CiAKLS8vIFRoaXMgd2lsbCBiZSBhbiBSQUlJIHRoaW5neSB0aGF0IHdpbGwgc2V0IHVwIHRo
ZSBuZWNlc3Nhcnkgc3RhY2sgc2l6ZXMgYW5kIG9mZnNldHMgYW5kIHN1Y2guCi1jbGFzcyBDYWxs
Q29udGV4dCB7Ci1wdWJsaWM6Ci0gICAgQ2FsbENvbnRleHQoCi0gICAgICAgIFN0YXRlJiBzdGF0
ZSwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsIENDYWxsSGVscGVycyYgaml0LAot
ICAgICAgICB1bnNpZ25lZCBudW1BcmdzLCBHUFJSZWcgcmV0dXJuUmVnaXN0ZXIpCi0gICAgICAg
IDogbV9zdGF0ZShzdGF0ZSkKLSAgICAgICAgLCBtX3VzZWRSZWdpc3RlcnModXNlZFJlZ2lzdGVy
cykKLSAgICAgICAgLCBtX2ppdChqaXQpCi0gICAgICAgICwgbV9udW1BcmdzKG51bUFyZ3MpCi0g
ICAgICAgICwgbV9yZXR1cm5SZWdpc3RlcihyZXR1cm5SZWdpc3RlcikKLSAgICB7Ci0gICAgICAg
IC8vIFdlIGRvbid0IGNhcmUgdGhhdCB5b3UncmUgdXNpbmcgY2FsbGVlLXNhdmUsIHN0YWNrLCBv
ciBoYXJkd2FyZSByZWdpc3RlcnMuCi0gICAgICAgIG1fdXNlZFJlZ2lzdGVycy5leGNsdWRlKFJl
Z2lzdGVyU2V0OjpzdGFja1JlZ2lzdGVycygpKTsKLSAgICAgICAgbV91c2VkUmVnaXN0ZXJzLmV4
Y2x1ZGUoUmVnaXN0ZXJTZXQ6OnJlc2VydmVkSGFyZHdhcmVSZWdpc3RlcnMoKSk7Ci0gICAgICAg
IG1fdXNlZFJlZ2lzdGVycy5leGNsdWRlKFJlZ2lzdGVyU2V0OjpjYWxsZWVTYXZlUmVnaXN0ZXJz
KCkpOwotICAgICAgICAKLSAgICAgICAgLy8gVGhlIHJldHVybiByZWdpc3RlciBkb2Vzbid0IG5l
ZWQgdG8gYmUgc2F2ZWQuCi0gICAgICAgIGlmIChtX3JldHVyblJlZ2lzdGVyICE9IEludmFsaWRH
UFJSZWcpCi0gICAgICAgICAgICBtX3VzZWRSZWdpc3RlcnMuY2xlYXIobV9yZXR1cm5SZWdpc3Rl
cik7Ci0gICAgICAgIAotICAgICAgICBzaXplX3Qgc3RhY2tCeXRlc05lZWRlZEZvclJldHVybkFk
ZHJlc3MgPSB3b3JkU2l6ZTsKLSAgICAgICAgCi0gICAgICAgIG1fb2Zmc2V0VG9TYXZpbmdBcmVh
ID0KLSAgICAgICAgICAgIChzdGQ6Om1heChtX251bUFyZ3MsIE5VTUJFUl9PRl9BUkdVTUVOVF9S
RUdJU1RFUlMpIC0gTlVNQkVSX09GX0FSR1VNRU5UX1JFR0lTVEVSUykgKiB3b3JkU2l6ZTsKLSAg
ICAgICAgCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IHN0ZDo6bWluKE5VTUJFUl9PRl9BUkdV
TUVOVF9SRUdJU1RFUlMsIG51bUFyZ3MpOyBpLS07KQotICAgICAgICAgICAgbV9hcmd1bWVudFJl
Z2lzdGVycy5zZXQoR1BSSW5mbzo6dG9Bcmd1bWVudFJlZ2lzdGVyKGkpKTsKLSAgICAgICAgbV9j
YWxsaW5nQ29udmVudGlvblJlZ2lzdGVycy5tZXJnZShtX2FyZ3VtZW50UmVnaXN0ZXJzKTsKLSAg
ICAgICAgaWYgKHJldHVyblJlZ2lzdGVyICE9IEludmFsaWRHUFJSZWcpCi0gICAgICAgICAgICBt
X2NhbGxpbmdDb252ZW50aW9uUmVnaXN0ZXJzLnNldChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7
Ci0gICAgICAgIG1fY2FsbGluZ0NvbnZlbnRpb25SZWdpc3RlcnMuZmlsdGVyKG1fdXNlZFJlZ2lz
dGVycyk7Ci0gICAgICAgIAotICAgICAgICB1bnNpZ25lZCBudW1iZXJPZkNhbGxpbmdDb252ZW50
aW9uUmVnaXN0ZXJzID0KLSAgICAgICAgICAgIG1fY2FsbGluZ0NvbnZlbnRpb25SZWdpc3RlcnMu
bnVtYmVyT2ZTZXRSZWdpc3RlcnMoKTsKLSAgICAgICAgCi0gICAgICAgIHNpemVfdCBvZmZzZXRU
b1RodW5rU2F2aW5nQXJlYSA9Ci0gICAgICAgICAgICBtX29mZnNldFRvU2F2aW5nQXJlYSArCi0g
ICAgICAgICAgICBudW1iZXJPZkNhbGxpbmdDb252ZW50aW9uUmVnaXN0ZXJzICogd29yZFNpemU7
Ci0gICAgICAgIAotICAgICAgICBtX3N0YWNrQnl0ZXNOZWVkZWQgPQotICAgICAgICAgICAgb2Zm
c2V0VG9UaHVua1NhdmluZ0FyZWEgKwotICAgICAgICAgICAgc3RhY2tCeXRlc05lZWRlZEZvclJl
dHVybkFkZHJlc3MgKwotICAgICAgICAgICAgKG1fdXNlZFJlZ2lzdGVycy5udW1iZXJPZlNldFJl
Z2lzdGVycygpIC0gbnVtYmVyT2ZDYWxsaW5nQ29udmVudGlvblJlZ2lzdGVycykgKiB3b3JkU2l6
ZTsKLSAgICAgICAgCi0gICAgICAgIG1fc3RhY2tCeXRlc05lZWRlZCA9IChtX3N0YWNrQnl0ZXNO
ZWVkZWQgKyBzdGFja0FsaWdubWVudEJ5dGVzKCkgLSAxKSAmIH4oc3RhY2tBbGlnbm1lbnRCeXRl
cygpIC0gMSk7Ci0gICAgICAgIAotICAgICAgICBtX2ppdC5zdWJQdHIoQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tMzIobV9zdGFja0J5dGVzTmVlZGVkKSwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50
ZXJSZWdpc3Rlcik7Ci0gICAgICAgIAotICAgICAgICBtX3RodW5rU2F2ZVNldCA9IG1fdXNlZFJl
Z2lzdGVyczsKLSAgICAgICAgCi0gICAgICAgIC8vIFRoaXMgcmVsaWVzIG9uIGFsbCBjYWxsaW5n
IGNvbnZlbnRpb24gcmVnaXN0ZXJzIGFsc28gYmVpbmcgdGVtcCByZWdpc3RlcnMuCi0gICAgICAg
IHVuc2lnbmVkIHN0YWNrSW5kZXggPSAwOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBHUFJJ
bmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgaS0tOykgewotICAgICAgICAgICAgR1BSUmVnIHJlZyA9
IEdQUkluZm86OnRvUmVnaXN0ZXIoaSk7Ci0gICAgICAgICAgICBpZiAoIW1fY2FsbGluZ0NvbnZl
bnRpb25SZWdpc3RlcnMuZ2V0KHJlZykpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgICAgICBtX2ppdC5zdG9yZVB0cihyZWcsIENDYWxsSGVscGVyczo6QWRkcmVzcyhDQ2FsbEhl
bHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBtX29mZnNldFRvU2F2aW5nQXJlYSArIChzdGFj
a0luZGV4KyspICogd29yZFNpemUpKTsKLSAgICAgICAgICAgIG1fdGh1bmtTYXZlU2V0LmNsZWFy
KHJlZyk7Ci0gICAgICAgIH0KK1Nsb3dQYXRoQ2FsbENvbnRleHQ6OlNsb3dQYXRoQ2FsbENvbnRl
eHQoCisgICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVycywgQ0NhbGxIZWxwZXJzJiBqaXQsIHVu
c2lnbmVkIG51bUFyZ3MsIEdQUlJlZyByZXR1cm5SZWdpc3RlcikKKyAgICA6IG1faml0KGppdCkK
KyAgICAsIG1fbnVtQXJncyhudW1BcmdzKQorICAgICwgbV9yZXR1cm5SZWdpc3RlcihyZXR1cm5S
ZWdpc3RlcikKK3sKKyAgICAvLyBXZSBkb24ndCBjYXJlIHRoYXQgeW91J3JlIHVzaW5nIGNhbGxl
ZS1zYXZlLCBzdGFjaywgb3IgaGFyZHdhcmUgcmVnaXN0ZXJzLgorICAgIHVzZWRSZWdpc3RlcnMu
ZXhjbHVkZShSZWdpc3RlclNldDo6c3RhY2tSZWdpc3RlcnMoKSk7CisgICAgdXNlZFJlZ2lzdGVy
cy5leGNsdWRlKFJlZ2lzdGVyU2V0OjpyZXNlcnZlZEhhcmR3YXJlUmVnaXN0ZXJzKCkpOworICAg
IHVzZWRSZWdpc3RlcnMuZXhjbHVkZShSZWdpc3RlclNldDo6Y2FsbGVlU2F2ZVJlZ2lzdGVycygp
KTsKICAgICAgICAgCi0gICAgICAgIG1fb2Zmc2V0ID0gb2Zmc2V0VG9UaHVua1NhdmluZ0FyZWE7
Ci0gICAgfQotICAgIAotICAgIH5DYWxsQ29udGV4dCgpCi0gICAgewotICAgICAgICBpZiAobV9y
ZXR1cm5SZWdpc3RlciAhPSBJbnZhbGlkR1BSUmVnKQotICAgICAgICAgICAgbV9qaXQubW92ZShH
UFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgbV9yZXR1cm5SZWdpc3Rlcik7Ci0gICAgICAgIAotICAg
ICAgICB1bnNpZ25lZCBzdGFja0luZGV4ID0gMDsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
R1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7IGktLTspIHsKLSAgICAgICAgICAgIEdQUlJlZyBy
ZWcgPSBHUFJJbmZvOjp0b1JlZ2lzdGVyKGkpOwotICAgICAgICAgICAgaWYgKCFtX2NhbGxpbmdD
b252ZW50aW9uUmVnaXN0ZXJzLmdldChyZWcpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICAgICAgbV9qaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoQ0NhbGxIZWxw
ZXJzOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgbV9vZmZzZXRUb1NhdmluZ0FyZWEgKyAoc3RhY2tJ
bmRleCsrKSAqIHdvcmRTaXplKSwgcmVnKTsKLSAgICAgICAgfQorICAgIC8vIFRoZSByZXR1cm4g
cmVnaXN0ZXIgZG9lc24ndCBuZWVkIHRvIGJlIHNhdmVkLgorICAgIGlmIChtX3JldHVyblJlZ2lz
dGVyICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIHVzZWRSZWdpc3RlcnMuY2xlYXIobV9yZXR1
cm5SZWdpc3Rlcik7CiAgICAgICAgIAotICAgICAgICBtX2ppdC5hZGRQdHIoQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tMzIobV9zdGFja0J5dGVzTmVlZGVkKSwgQ0NhbGxIZWxwZXJzOjpzdGFja1Bv
aW50ZXJSZWdpc3Rlcik7Ci0gICAgfQotICAgIAotICAgIFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3Rl
cnMoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fdGh1bmtTYXZlU2V0OwotICAgIH0K
LSAgICAKLSAgICBwdHJkaWZmX3Qgb2Zmc2V0KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVy
biBtX29mZnNldDsKKyAgICBzaXplX3Qgc3RhY2tCeXRlc05lZWRlZEZvclJldHVybkFkZHJlc3Mg
PSB3b3JkU2l6ZTsKKyAgICAgICAgCisgICAgbV9vZmZzZXRUb1NhdmluZ0FyZWEgPQorICAgICAg
ICAoc3RkOjptYXgobV9udW1BcmdzLCBOVU1CRVJfT0ZfQVJHVU1FTlRfUkVHSVNURVJTKSAtIE5V
TUJFUl9PRl9BUkdVTUVOVF9SRUdJU1RFUlMpICogd29yZFNpemU7CisgICAgICAgIAorICAgIGZv
ciAodW5zaWduZWQgaSA9IHN0ZDo6bWluKE5VTUJFUl9PRl9BUkdVTUVOVF9SRUdJU1RFUlMsIG51
bUFyZ3MpOyBpLS07KQorICAgICAgICBtX2FyZ3VtZW50UmVnaXN0ZXJzLnNldChHUFJJbmZvOjp0
b0FyZ3VtZW50UmVnaXN0ZXIoaSkpOworICAgIG1fY2FsbGluZ0NvbnZlbnRpb25SZWdpc3RlcnMu
bWVyZ2UobV9hcmd1bWVudFJlZ2lzdGVycyk7CisgICAgaWYgKHJldHVyblJlZ2lzdGVyICE9IElu
dmFsaWRHUFJSZWcpCisgICAgICAgIG1fY2FsbGluZ0NvbnZlbnRpb25SZWdpc3RlcnMuc2V0KEdQ
UkluZm86OnJldHVyblZhbHVlR1BSKTsKKyAgICBtX2NhbGxpbmdDb252ZW50aW9uUmVnaXN0ZXJz
LmZpbHRlcih1c2VkUmVnaXN0ZXJzKTsKKyAgICAgICAgCisgICAgdW5zaWduZWQgbnVtYmVyT2ZD
YWxsaW5nQ29udmVudGlvblJlZ2lzdGVycyA9CisgICAgICAgIG1fY2FsbGluZ0NvbnZlbnRpb25S
ZWdpc3RlcnMubnVtYmVyT2ZTZXRSZWdpc3RlcnMoKTsKKyAgICAgICAgCisgICAgc2l6ZV90IG9m
ZnNldFRvVGh1bmtTYXZpbmdBcmVhID0KKyAgICAgICAgbV9vZmZzZXRUb1NhdmluZ0FyZWEgKwor
ICAgICAgICBudW1iZXJPZkNhbGxpbmdDb252ZW50aW9uUmVnaXN0ZXJzICogd29yZFNpemU7Cisg
ICAgICAgIAorICAgIG1fc3RhY2tCeXRlc05lZWRlZCA9CisgICAgICAgIG9mZnNldFRvVGh1bmtT
YXZpbmdBcmVhICsKKyAgICAgICAgc3RhY2tCeXRlc05lZWRlZEZvclJldHVybkFkZHJlc3MgKwor
ICAgICAgICAodXNlZFJlZ2lzdGVycy5udW1iZXJPZlNldFJlZ2lzdGVycygpIC0gbnVtYmVyT2ZD
YWxsaW5nQ29udmVudGlvblJlZ2lzdGVycykgKiB3b3JkU2l6ZTsKKyAgICAgICAgCisgICAgbV9z
dGFja0J5dGVzTmVlZGVkID0gKG1fc3RhY2tCeXRlc05lZWRlZCArIHN0YWNrQWxpZ25tZW50Qnl0
ZXMoKSAtIDEpICYgfihzdGFja0FsaWdubWVudEJ5dGVzKCkgLSAxKTsKKyAgICAgICAgCisgICAg
bV9qaXQuc3ViUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKG1fc3RhY2tCeXRlc05lZWRl
ZCksIENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworCisgICAgbV90aHVua1Nh
dmVTZXQgPSB1c2VkUmVnaXN0ZXJzOworICAgICAgICAKKyAgICAvLyBUaGlzIHJlbGllcyBvbiBh
bGwgY2FsbGluZyBjb252ZW50aW9uIHJlZ2lzdGVycyBhbHNvIGJlaW5nIHRlbXAgcmVnaXN0ZXJz
LgorICAgIHVuc2lnbmVkIHN0YWNrSW5kZXggPSAwOworICAgIGZvciAodW5zaWduZWQgaSA9IEdQ
UkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyBpLS07KSB7CisgICAgICAgIEdQUlJlZyByZWcgPSBH
UFJJbmZvOjp0b1JlZ2lzdGVyKGkpOworICAgICAgICBpZiAoIW1fY2FsbGluZ0NvbnZlbnRpb25S
ZWdpc3RlcnMuZ2V0KHJlZykpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgbV9qaXQu
c3RvcmVQdHIocmVnLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoQ0NhbGxIZWxwZXJzOjpzdGFja1Bv
aW50ZXJSZWdpc3RlciwgbV9vZmZzZXRUb1NhdmluZ0FyZWEgKyAoc3RhY2tJbmRleCsrKSAqIHdv
cmRTaXplKSk7CisgICAgICAgIG1fdGh1bmtTYXZlU2V0LmNsZWFyKHJlZyk7CiAgICAgfQorICAg
ICAgICAKKyAgICBtX29mZnNldCA9IG9mZnNldFRvVGh1bmtTYXZpbmdBcmVhOworfQogICAgIAot
ICAgIFNsb3dQYXRoQ2FsbEtleSBrZXlXaXRoVGFyZ2V0KHZvaWQqIGNhbGxUYXJnZXQpIGNvbnN0
Ci0gICAgewotICAgICAgICByZXR1cm4gU2xvd1BhdGhDYWxsS2V5KHVzZWRSZWdpc3RlcnMoKSwg
Y2FsbFRhcmdldCwgbV9hcmd1bWVudFJlZ2lzdGVycywgb2Zmc2V0KCkpOwotICAgIH0KK1Nsb3dQ
YXRoQ2FsbENvbnRleHQ6On5TbG93UGF0aENhbGxDb250ZXh0KCkKK3sKKyAgICBpZiAobV9yZXR1
cm5SZWdpc3RlciAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBtX2ppdC5tb3ZlKEdQUkluZm86
OnJldHVyblZhbHVlR1BSLCBtX3JldHVyblJlZ2lzdGVyKTsKICAgICAKLSAgICBNYWNyb0Fzc2Vt
Ymxlcjo6Q2FsbCBtYWtlQ2FsbCh2b2lkKiBjYWxsVGFyZ2V0LCBNYWNyb0Fzc2VtYmxlcjo6SnVt
cExpc3QqIGV4Y2VwdGlvblRhcmdldCkKLSAgICB7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpD
YWxsIHJlc3VsdCA9IG1faml0LmNhbGwoKTsKLSAgICAgICAgbV9zdGF0ZS5maW5hbGl6ZXItPnNs
b3dQYXRoQ2FsbHMuYXBwZW5kKFNsb3dQYXRoQ2FsbCgKLSAgICAgICAgICAgIHJlc3VsdCwga2V5
V2l0aFRhcmdldChjYWxsVGFyZ2V0KSkpOwotICAgICAgICBpZiAoZXhjZXB0aW9uVGFyZ2V0KQot
ICAgICAgICAgICAgZXhjZXB0aW9uVGFyZ2V0LT5hcHBlbmQobV9qaXQuZW1pdEV4Y2VwdGlvbkNo
ZWNrKCkpOwotICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIHVuc2lnbmVkIHN0YWNrSW5kZXgg
PSAwOworICAgIGZvciAodW5zaWduZWQgaSA9IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyBp
LS07KSB7CisgICAgICAgIEdQUlJlZyByZWcgPSBHUFJJbmZvOjp0b1JlZ2lzdGVyKGkpOworICAg
ICAgICBpZiAoIW1fY2FsbGluZ0NvbnZlbnRpb25SZWdpc3RlcnMuZ2V0KHJlZykpCisgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgbV9qaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJl
c3MoQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgbV9vZmZzZXRUb1NhdmluZ0Fy
ZWEgKyAoc3RhY2tJbmRleCsrKSAqIHdvcmRTaXplKSwgcmVnKTsKICAgICB9CiAgICAgCi1wcml2
YXRlOgotICAgIFN0YXRlJiBtX3N0YXRlOwotICAgIFJlZ2lzdGVyU2V0IG1fdXNlZFJlZ2lzdGVy
czsKLSAgICBSZWdpc3RlclNldCBtX2FyZ3VtZW50UmVnaXN0ZXJzOwotICAgIFJlZ2lzdGVyU2V0
IG1fY2FsbGluZ0NvbnZlbnRpb25SZWdpc3RlcnM7Ci0gICAgQ0NhbGxIZWxwZXJzJiBtX2ppdDsK
LSAgICB1bnNpZ25lZCBtX251bUFyZ3M7Ci0gICAgR1BSUmVnIG1fcmV0dXJuUmVnaXN0ZXI7Ci0g
ICAgc2l6ZV90IG1fb2Zmc2V0VG9TYXZpbmdBcmVhOwotICAgIHNpemVfdCBtX3N0YWNrQnl0ZXNO
ZWVkZWQ7Ci0gICAgUmVnaXN0ZXJTZXQgbV90aHVua1NhdmVTZXQ7Ci0gICAgcHRyZGlmZl90IG1f
b2Zmc2V0OwotfTsKKyAgICBtX2ppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIo
bV9zdGFja0J5dGVzTmVlZGVkKSwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7
Cit9CiAKLX0gLy8gYW5vbnltb3VzIG5hbWVzcGFjZQorU2xvd1BhdGhDYWxsS2V5IFNsb3dQYXRo
Q2FsbENvbnRleHQ6OmtleVdpdGhUYXJnZXQodm9pZCogY2FsbFRhcmdldCkgY29uc3QKK3sKKyAg
ICByZXR1cm4gU2xvd1BhdGhDYWxsS2V5KG1fdGh1bmtTYXZlU2V0LCBjYWxsVGFyZ2V0LCBtX2Fy
Z3VtZW50UmVnaXN0ZXJzLCBtX29mZnNldCk7Cit9CisKK1Nsb3dQYXRoQ2FsbCBTbG93UGF0aENh
bGxDb250ZXh0OjptYWtlQ2FsbCh2b2lkKiBjYWxsVGFyZ2V0LCBNYWNyb0Fzc2VtYmxlcjo6SnVt
cExpc3QqIGV4Y2VwdGlvblRhcmdldCkKK3sKKyAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxs
ID0gbV9qaXQuY2FsbCgpOworICAgIFNsb3dQYXRoQ2FsbCByZXN1bHQoY2FsbCwga2V5V2l0aFRh
cmdldChjYWxsVGFyZ2V0KSk7CisgICAgaWYgKGV4Y2VwdGlvblRhcmdldCkKKyAgICAgICAgZXhj
ZXB0aW9uVGFyZ2V0LT5hcHBlbmQobV9qaXQuZW1pdEV4Y2VwdGlvbkNoZWNrKCkpOworICAgIHJl
dHVybiByZXN1bHQ7Cit9CiAKIHZvaWQgc3RvcmVDb2RlT3JpZ2luKFN0YXRlJiBzdGF0ZSwgQ0Nh
bGxIZWxwZXJzJiBqaXQsIENvZGVPcmlnaW4gY29kZU9yaWdpbikKIHsKQEAgLTE3MywxNyArMTM4
LDIwIEBAIHZvaWQgc3RvcmVDb2RlT3JpZ2luKFN0YXRlJiBzdGF0ZSwgQ0NhbGwKICAgICAgICAg
Q0NhbGxIZWxwZXJzOjp0YWdGb3Ioc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihKU1N0YWNr
OjpBcmd1bWVudENvdW50KSkpOwogfQogCit2b2lkIHJlZ2lzdGVyU2xvd1BhdGhDYWxsKFN0YXRl
JiBzdGF0ZSwgU2xvd1BhdGhDYWxsIGNhbGwpCit7CisgICAgc3RhdGUuZmluYWxpemVyLT5zbG93
UGF0aENhbGxzLmFwcGVuZChjYWxsKTsKK30KKwogTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9w
ZXJhdGlvbigKICAgICBTdGF0ZSYgc3RhdGUsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0
ZXJzLCBDQ2FsbEhlbHBlcnMmIGppdCwKICAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wTGlzdCogZXhjZXB0aW9uVGFyZ2V0LAogICAgIEpfSklUT3BlcmF0aW9u
X0VTc2lDSSBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHVi
SW5mbywKICAgICBHUFJSZWcgb2JqZWN0LCBjb25zdCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQog
ewotICAgIHN0b3JlQ29kZU9yaWdpbihzdGF0ZSwgaml0LCBjb2RlT3JpZ2luKTsKLSAgICBDYWxs
Q29udGV4dCBjb250ZXh0KHN0YXRlLCB1c2VkUmVnaXN0ZXJzLCBqaXQsIDQsIHJlc3VsdCk7Ci0g
ICAgaml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZSgKKyAgICByZXR1cm4gY2FsbE9wZXJh
dGlvbigKKyAgICAgICAgc3RhdGUsIHVzZWRSZWdpc3RlcnMsIGppdCwgY29kZU9yaWdpbiwgZXhj
ZXB0aW9uVGFyZ2V0LCBGdW5jdGlvblB0cihvcGVyYXRpb24pLCByZXN1bHQsCiAgICAgICAgIEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihzdHViSW5mbyksIG9iamVjdCwgQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tUHRyKHVpZCkpOwotICAgIHJldHVybiBjb250ZXh0Lm1ha2VDYWxsKGJpdHdp
c2VfY2FzdDx2b2lkKj4ob3BlcmF0aW9uKSwgZXhjZXB0aW9uVGFyZ2V0KTsKIH0KIAogTWFjcm9B
c3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbigKQEAgLTE5MiwxMiArMTYwLDkgQEAgTWFjcm9B
c3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbigKICAgICBKX0pJVE9wZXJhdGlvbl9FU3NpSkkg
b3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sCiAg
ICAgR1BSUmVnIG9iamVjdCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKIHsKLSAgICBzdG9yZUNv
ZGVPcmlnaW4oc3RhdGUsIGppdCwgY29kZU9yaWdpbik7Ci0gICAgQ2FsbENvbnRleHQgY29udGV4
dChzdGF0ZSwgdXNlZFJlZ2lzdGVycywgaml0LCA0LCByZXN1bHQpOwotICAgIGppdC5zZXR1cEFy
Z3VtZW50c1dpdGhFeGVjU3RhdGUoCi0gICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0
cihzdHViSW5mbyksIG9iamVjdCwKLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRy
KHVpZCkpOwotICAgIHJldHVybiBjb250ZXh0Lm1ha2VDYWxsKGJpdHdpc2VfY2FzdDx2b2lkKj4o
b3BlcmF0aW9uKSwgZXhjZXB0aW9uVGFyZ2V0KTsKKyAgICByZXR1cm4gY2FsbE9wZXJhdGlvbigK
KyAgICAgICAgc3RhdGUsIHVzZWRSZWdpc3RlcnMsIGppdCwgY29kZU9yaWdpbiwgZXhjZXB0aW9u
VGFyZ2V0LCBGdW5jdGlvblB0cihvcGVyYXRpb24pLCByZXN1bHQsCisgICAgICAgIENDYWxsSGVs
cGVyczo6VHJ1c3RlZEltbVB0cihzdHViSW5mbyksIG9iamVjdCwgQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tUHRyKHVpZCkpOwogfQogCiBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9u
KApAQCAtMjA2LDEyICsxNzEsOSBAQCBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9u
KAogICAgIFZfSklUT3BlcmF0aW9uX0VTc2lKSkkgb3BlcmF0aW9uLCBTdHJ1Y3R1cmVTdHViSW5m
byogc3R1YkluZm8sIEdQUlJlZyB2YWx1ZSwKICAgICBHUFJSZWcgb2JqZWN0LCBVbmlxdWVkU3Ry
aW5nSW1wbCogdWlkKQogewotICAgIHN0b3JlQ29kZU9yaWdpbihzdGF0ZSwgaml0LCBjb2RlT3Jp
Z2luKTsKLSAgICBDYWxsQ29udGV4dCBjb250ZXh0KHN0YXRlLCB1c2VkUmVnaXN0ZXJzLCBqaXQs
IDUsIEludmFsaWRHUFJSZWcpOwotICAgIGppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUo
Ci0gICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihzdHViSW5mbyksIHZhbHVlLCBv
YmplY3QsCi0gICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cih1aWQpKTsKLSAgICBy
ZXR1cm4gY29udGV4dC5tYWtlQ2FsbChiaXR3aXNlX2Nhc3Q8dm9pZCo+KG9wZXJhdGlvbiksIGV4
Y2VwdGlvblRhcmdldCk7CisgICAgcmV0dXJuIGNhbGxPcGVyYXRpb24oCisgICAgICAgIHN0YXRl
LCB1c2VkUmVnaXN0ZXJzLCBqaXQsIGNvZGVPcmlnaW4sIGV4Y2VwdGlvblRhcmdldCwgRnVuY3Rp
b25QdHIob3BlcmF0aW9uKSwgSW52YWxpZEdQUlJlZywKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tUHRyKHN0dWJJbmZvKSwgdmFsdWUsIG9iamVjdCwgQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tUHRyKHVpZCkpOwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNsb3dQYXRoQ2FsbC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU2xvd1BhdGhDYWxsLmgJKHJldmlzaW9uIDE5
MDc0OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU2xvd1BhdGhDYWxsLmgJKHdv
cmtpbmcgY29weSkKQEAgLTU1LDcgKzU1LDUxIEBAIHByaXZhdGU6CiAgICAgU2xvd1BhdGhDYWxs
S2V5IG1fa2V5OwogfTsKIAorLy8gVGhpcyB3aWxsIGJlIGFuIFJBSUkgdGhpbmd5IHRoYXQgd2ls
bCBzZXQgdXAgdGhlIG5lY2Vzc2FyeSBzdGFjayBzaXplcyBhbmQgb2Zmc2V0cyBhbmQgc3VjaC4K
K2NsYXNzIFNsb3dQYXRoQ2FsbENvbnRleHQgeworcHVibGljOgorICAgIFNsb3dQYXRoQ2FsbENv
bnRleHQoUmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVycywgQ0NhbGxIZWxwZXJzJiwgdW5zaWduZWQg
bnVtQXJncywgR1BSUmVnIHJldHVyblJlZ2lzdGVyKTsKKyAgICB+U2xvd1BhdGhDYWxsQ29udGV4
dCgpOworCisgICAgU2xvd1BhdGhDYWxsIG1ha2VDYWxsKHZvaWQqIGNhbGxUYXJnZXQsIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wTGlzdCogZXhjZXB0aW9uVGFyZ2V0KTsKKworcHJpdmF0ZToKKyAgICBT
bG93UGF0aENhbGxLZXkga2V5V2l0aFRhcmdldCh2b2lkKiBjYWxsVGFyZ2V0KSBjb25zdDsKKyAg
ICAKKyAgICBSZWdpc3RlclNldCBtX2FyZ3VtZW50UmVnaXN0ZXJzOworICAgIFJlZ2lzdGVyU2V0
IG1fY2FsbGluZ0NvbnZlbnRpb25SZWdpc3RlcnM7CisgICAgQ0NhbGxIZWxwZXJzJiBtX2ppdDsK
KyAgICB1bnNpZ25lZCBtX251bUFyZ3M7CisgICAgR1BSUmVnIG1fcmV0dXJuUmVnaXN0ZXI7Cisg
ICAgc2l6ZV90IG1fb2Zmc2V0VG9TYXZpbmdBcmVhOworICAgIHNpemVfdCBtX3N0YWNrQnl0ZXNO
ZWVkZWQ7CisgICAgUmVnaXN0ZXJTZXQgbV90aHVua1NhdmVTZXQ7CisgICAgcHRyZGlmZl90IG1f
b2Zmc2V0OworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRUeXBlcz4KK1Nsb3dQ
YXRoQ2FsbCBjYWxsT3BlcmF0aW9uKAorICAgIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0
ZXJzLCBDQ2FsbEhlbHBlcnMmIGppdCwgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCogZXhjZXB0aW9u
VGFyZ2V0LAorICAgIEZ1bmN0aW9uUHRyIGZ1bmN0aW9uLCBHUFJSZWcgcmVzdWx0LCBBcmd1bWVu
dFR5cGVzLi4uIGFyZ3VtZW50cykKK3sKKyAgICBTbG93UGF0aENhbGxDb250ZXh0IGNvbnRleHQo
dXNlZFJlZ2lzdGVycywgaml0LCBzaXplb2YuLi4oQXJndW1lbnRUeXBlcykgKyAxLCByZXN1bHQp
OworICAgIGppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJndW1lbnRzLi4uKTsKKyAg
ICByZXR1cm4gY29udGV4dC5tYWtlQ2FsbChmdW5jdGlvbi52YWx1ZSgpLCBleGNlcHRpb25UYXJn
ZXQpOworfQorCiB2b2lkIHN0b3JlQ29kZU9yaWdpbihTdGF0ZSYsIENDYWxsSGVscGVycyYsIENv
ZGVPcmlnaW4pOwordm9pZCByZWdpc3RlclNsb3dQYXRoQ2FsbChTdGF0ZSYsIFNsb3dQYXRoQ2Fs
bCk7CisKK3RlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50VHlwZXM+CitNYWNyb0Fzc2VtYmxl
cjo6Q2FsbCBjYWxsT3BlcmF0aW9uKAorICAgIFN0YXRlJiBzdGF0ZSwgY29uc3QgUmVnaXN0ZXJT
ZXQmIHVzZWRSZWdpc3RlcnMsIENDYWxsSGVscGVycyYgaml0LCBDb2RlT3JpZ2luIGNvZGVPcmln
aW4sCisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCogZXhjZXB0aW9uVGFyZ2V0LCBGdW5jdGlv
blB0ciBmdW5jdGlvbiwgR1BSUmVnIHJlc3VsdCwgQXJndW1lbnRUeXBlcy4uLiBhcmd1bWVudHMp
Cit7CisgICAgc3RvcmVDb2RlT3JpZ2luKHN0YXRlLCBqaXQsIGNvZGVPcmlnaW4pOworICAgIFNs
b3dQYXRoQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbih1c2VkUmVnaXN0ZXJzLCBqaXQsIGV4Y2Vw
dGlvblRhcmdldCwgZnVuY3Rpb24sIHJlc3VsdCwgYXJndW1lbnRzLi4uKTsKKyAgICByZWdpc3Rl
clNsb3dQYXRoQ2FsbChzdGF0ZSwgY2FsbCk7CisgICAgcmV0dXJuIGNhbGwuY2FsbCgpOworfQog
CiBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKAogICAgIFN0YXRlJiwgY29uc3Qg
UmVnaXN0ZXJTZXQmLCBDQ2FsbEhlbHBlcnMmLCBDb2RlT3JpZ2luLCBDQ2FsbEhlbHBlcnM6Okp1
bXBMaXN0KiwKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1BhcmFsbGVsSGVscGVyUG9vbC5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dURi93dGYvUGFyYWxsZWxIZWxwZXJQb29sLmNwcAkocmV2aXNp
b24gMTkwNzQ5KQorKysgU291cmNlL1dURi93dGYvUGFyYWxsZWxIZWxwZXJQb29sLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTMsNyArNTMsNyBAQCBQYXJhbGxlbEhlbHBlckNsaWVudDo6flBhcmFs
bGVsSGVscGVyQ2xpCiAgICAgfQogfQogCi12b2lkIFBhcmFsbGVsSGVscGVyQ2xpZW50OjpzZXRU
YXNrKFJlZlB0cjxTaGFyZWRUYXNrPiB0YXNrKQordm9pZCBQYXJhbGxlbEhlbHBlckNsaWVudDo6
c2V0VGFzayhSZWZQdHI8U2hhcmVkVGFzazx2b2lkKCk+PiB0YXNrKQogewogICAgIExvY2tIb2xk
ZXIgbG9ja2VyKG1fcG9vbC0+bV9sb2NrKTsKICAgICBSRUxFQVNFX0FTU0VSVCghbV90YXNrKTsK
QEAgLTY5LDcgKzY5LDcgQEAgdm9pZCBQYXJhbGxlbEhlbHBlckNsaWVudDo6ZmluaXNoKCkKIAog
dm9pZCBQYXJhbGxlbEhlbHBlckNsaWVudDo6ZG9Tb21lSGVscGluZygpCiB7Ci0gICAgUmVmUHRy
PFNoYXJlZFRhc2s+IHRhc2s7CisgICAgUmVmUHRyPFNoYXJlZFRhc2s8dm9pZCgpPj4gdGFzazsK
ICAgICB7CiAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fcG9vbC0+bV9sb2NrKTsKICAgICAg
ICAgdGFzayA9IGNsYWltVGFzayhsb2NrZXIpOwpAQCAtODAsNyArODAsNyBAQCB2b2lkIFBhcmFs
bGVsSGVscGVyQ2xpZW50Ojpkb1NvbWVIZWxwaW5nCiAgICAgcnVuVGFzayh0YXNrKTsKIH0KIAot
dm9pZCBQYXJhbGxlbEhlbHBlckNsaWVudDo6cnVuVGFza0luUGFyYWxsZWwoUmVmUHRyPFNoYXJl
ZFRhc2s+IHRhc2spCit2b2lkIFBhcmFsbGVsSGVscGVyQ2xpZW50OjpydW5UYXNrSW5QYXJhbGxl
bChSZWZQdHI8U2hhcmVkVGFzazx2b2lkKCk+PiB0YXNrKQogewogICAgIHNldFRhc2sodGFzayk7
CiAgICAgZG9Tb21lSGVscGluZygpOwpAQCAtOTQsNyArOTQsNyBAQCB2b2lkIFBhcmFsbGVsSGVs
cGVyQ2xpZW50OjpmaW5pc2goY29uc3QgCiAgICAgICAgIG1fcG9vbC0+bV93b3JrQ29tcGxldGVD
b25kaXRpb24ud2FpdChtX3Bvb2wtPm1fbG9jayk7CiB9CiAKLVJlZlB0cjxTaGFyZWRUYXNrPiBQ
YXJhbGxlbEhlbHBlckNsaWVudDo6Y2xhaW1UYXNrKGNvbnN0IExvY2tIb2xkZXImKQorUmVmUHRy
PFNoYXJlZFRhc2s8dm9pZCgpPj4gUGFyYWxsZWxIZWxwZXJDbGllbnQ6OmNsYWltVGFzayhjb25z
dCBMb2NrSG9sZGVyJikKIHsKICAgICBpZiAoIW1fdGFzaykKICAgICAgICAgcmV0dXJuIG51bGxw
dHI7CkBAIC0xMDMsNyArMTAzLDcgQEAgUmVmUHRyPFNoYXJlZFRhc2s+IFBhcmFsbGVsSGVscGVy
Q2xpZW50OgogICAgIHJldHVybiBtX3Rhc2s7CiB9CiAKLXZvaWQgUGFyYWxsZWxIZWxwZXJDbGll
bnQ6OnJ1blRhc2soUmVmUHRyPFNoYXJlZFRhc2s+IHRhc2spCit2b2lkIFBhcmFsbGVsSGVscGVy
Q2xpZW50OjpydW5UYXNrKFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoKT4+IHRhc2spCiB7CiAgICAg
UkVMRUFTRV9BU1NFUlQobV9udW1BY3RpdmUpOwogICAgIFJFTEVBU0VfQVNTRVJUKHRhc2spOwpA
QCAtMTUzLDcgKzE1Myw3IEBAIHZvaWQgUGFyYWxsZWxIZWxwZXJQb29sOjplbnN1cmVUaHJlYWRz
KHUKIHZvaWQgUGFyYWxsZWxIZWxwZXJQb29sOjpkb1NvbWVIZWxwaW5nKCkKIHsKICAgICBQYXJh
bGxlbEhlbHBlckNsaWVudCogY2xpZW50OwotICAgIFJlZlB0cjxTaGFyZWRUYXNrPiB0YXNrOwor
ICAgIFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoKT4+IHRhc2s7CiAgICAgewogICAgICAgICBMb2Nr
SG9sZGVyIGxvY2tlcihtX2xvY2spOwogICAgICAgICBjbGllbnQgPSBnZXRDbGllbnRXaXRoVGFz
ayhsb2NrZXIpOwpAQCAtMTgyLDcgKzE4Miw3IEBAIHZvaWQgUGFyYWxsZWxIZWxwZXJQb29sOjpo
ZWxwZXJUaHJlYWRCb2QKIHsKICAgICBmb3IgKDs7KSB7CiAgICAgICAgIFBhcmFsbGVsSGVscGVy
Q2xpZW50KiBjbGllbnQ7Ci0gICAgICAgIFJlZlB0cjxTaGFyZWRUYXNrPiB0YXNrOworICAgICAg
ICBSZWZQdHI8U2hhcmVkVGFzazx2b2lkKCk+PiB0YXNrOwogCiAgICAgICAgIHsKICAgICAgICAg
ICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7CkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9QYXJh
bGxlbEhlbHBlclBvb2wuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9QYXJhbGxlbEhl
bHBlclBvb2wuaAkocmV2aXNpb24gMTkwNzQ5KQorKysgU291cmNlL1dURi93dGYvUGFyYWxsZWxI
ZWxwZXJQb29sLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzMCwxMiArMTMwLDEyIEBAIHB1YmxpYzoK
ICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgUGFyYWxsZWxIZWxwZXJDbGllbnQoUmVmUHRyPFBhcmFs
bGVsSGVscGVyUG9vbD4pOwogICAgIFdURl9FWFBPUlRfUFJJVkFURSB+UGFyYWxsZWxIZWxwZXJD
bGllbnQoKTsKIAotICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIHNldFRhc2soUmVmUHRyPFNo
YXJlZFRhc2s+KTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBzZXRUYXNrKFJlZlB0cjxT
aGFyZWRUYXNrPHZvaWQoKT4+KTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CiAg
ICAgdm9pZCBzZXRGdW5jdGlvbihjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQogICAgIHsKLSAgICAg
ICAgc2V0VGFzayhjcmVhdGVTaGFyZWRUYXNrKGZ1bmN0b3IpKTsKKyAgICAgICAgc2V0VGFzayhj
cmVhdGVTaGFyZWRUYXNrPHZvaWQoKT4oZnVuY3RvcikpOwogICAgIH0KICAgICAKICAgICBXVEZf
RVhQT1JUX1BSSVZBVEUgdm9pZCBmaW5pc2goKTsKQEAgLTE0Niw3ICsxNDYsNyBAQCBwdWJsaWM6
CiAgICAgLy8gY2xpZW50LT5zZXRUYXNrKHRhc2spOwogICAgIC8vIGNsaWVudC0+ZG9Tb21lSGVs
cGluZygpOwogICAgIC8vIGNsaWVudC0+ZmluaXNoKCk7Ci0gICAgV1RGX0VYUE9SVF9QUklWQVRF
IHZvaWQgcnVuVGFza0luUGFyYWxsZWwoUmVmUHRyPFNoYXJlZFRhc2s+KTsKKyAgICBXVEZfRVhQ
T1JUX1BSSVZBVEUgdm9pZCBydW5UYXNrSW5QYXJhbGxlbChSZWZQdHI8U2hhcmVkVGFzazx2b2lk
KCk+Pik7CiAKICAgICAvLyBFcXVpdmFsZW50IHRvOgogICAgIC8vIGNsaWVudC0+c2V0RnVuY3Rp
b24oZnVuY3Rvcik7CkBAIC0xNTUsNyArMTU1LDcgQEAgcHVibGljOgogICAgIHRlbXBsYXRlPHR5
cGVuYW1lIEZ1bmN0b3I+CiAgICAgdm9pZCBydW5GdW5jdGlvbkluUGFyYWxsZWwoY29uc3QgRnVu
Y3RvciYgZnVuY3RvcikKICAgICB7Ci0gICAgICAgIHJ1blRhc2tJblBhcmFsbGVsKGNyZWF0ZVNo
YXJlZFRhc2soZnVuY3RvcikpOworICAgICAgICBydW5UYXNrSW5QYXJhbGxlbChjcmVhdGVTaGFy
ZWRUYXNrPHZvaWQoKT4oZnVuY3RvcikpOwogICAgIH0KIAogICAgIFBhcmFsbGVsSGVscGVyUG9v
bCYgcG9vbCgpIHsgcmV0dXJuICptX3Bvb2w7IH0KQEAgLTE2NSwxMSArMTY1LDExIEBAIHByaXZh
dGU6CiAgICAgZnJpZW5kIGNsYXNzIFBhcmFsbGVsSGVscGVyUG9vbDsKIAogICAgIHZvaWQgZmlu
aXNoKGNvbnN0IExvY2tIb2xkZXImKTsKLSAgICBSZWZQdHI8U2hhcmVkVGFzaz4gY2xhaW1UYXNr
KGNvbnN0IExvY2tIb2xkZXImKTsKLSAgICB2b2lkIHJ1blRhc2soUmVmUHRyPFNoYXJlZFRhc2s+
KTsKKyAgICBSZWZQdHI8U2hhcmVkVGFzazx2b2lkKCk+PiBjbGFpbVRhc2soY29uc3QgTG9ja0hv
bGRlciYpOworICAgIHZvaWQgcnVuVGFzayhSZWZQdHI8U2hhcmVkVGFzazx2b2lkKCk+Pik7CiAg
ICAgCiAgICAgUmVmUHRyPFBhcmFsbGVsSGVscGVyUG9vbD4gbV9wb29sOwotICAgIFJlZlB0cjxT
aGFyZWRUYXNrPiBtX3Rhc2s7CisgICAgUmVmUHRyPFNoYXJlZFRhc2s8dm9pZCgpPj4gbV90YXNr
OwogICAgIHVuc2lnbmVkIG1fbnVtQWN0aXZlIHsgMCB9OwogfTsKIApJbmRleDogU291cmNlL1dU
Ri93dGYvU2hhcmVkVGFzay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1NoYXJlZFRh
c2suaAkocmV2aXNpb24gMTkwNzQ5KQorKysgU291cmNlL1dURi93dGYvU2hhcmVkVGFzay5oCSh3
b3JraW5nIGNvcHkpCkBAIC00MSwxMyArNDEsMTMgQEAgbmFtZXNwYWNlIFdURiB7CiAvLwogLy8g
SGVyZSdzIGFuIGV4YW1wbGUgb2YgaG93IFNoYXJlZFRhc2sgY2FuIGJlIGJldHRlciB0aGFuIHN0
ZDo6ZnVuY3Rpb24uIElmIHlvdSBkbzoKIC8vCi0vLyBzdGQ6OmZ1bmN0aW9uIGEgPSBiOworLy8g
c3RkOjpmdW5jdGlvbjxpbnQoZG91YmxlKT4gYSA9IGI7CiAvLwogLy8gVGhlbiAiYSIgd2lsbCBn
ZXQgaXRzIG93biBjb3B5IG9mIGFsbCBjYXB0dXJlZCBieS12YWx1ZSB2YXJpYWJsZXMuIFRoZSBh
Y3Qgb2YgY29weWluZyBtYXkKIC8vIHJlcXVpcmUgY2FsbHMgdG8gc3lzdGVtIG1hbGxvYywgYW5k
IGl0IG1heSBiZSBsaW5lYXIgdGltZSBpbiB0aGUgdG90YWwgc2l6ZSBvZiBjYXB0dXJlZAogLy8g
dmFyaWFibGVzLiBPbiB0aGUgb3RoZXIgaGFuZCwgaWYgeW91IGRvOgogLy8KLS8vIFJlZlB0cjxT
aGFyZWRUYXNrPiBhID0gYjsKKy8vIFJlZlB0cjxTaGFyZWRUYXNrPGludChkb3VibGUpPiBhID0g
YjsKIC8vCiAvLyBUaGVuICJhIiB3aWxsIHBvaW50IHRvIHRoZSBzYW1lIHRhc2sgYXMgYiwgYW5k
IHRoZSBvbmx5IHdvcmsgaW52b2x2ZWQgaXMgdGhlIENBUyB0byBpbmNyZWFzZSB0aGUKIC8vIHJl
ZmVyZW5jZSBjb3VudC4KQEAgLTU4LDE4ICs1OCwyMSBAQCBuYW1lc3BhY2UgV1RGIHsKIC8vIGNy
ZWF0ZVNoYXJlZFRhc2soKSwgYmVsb3cpLiBCdXQgU2hhcmVkVGFzayBhbHNvIGFsbG93cyB5b3Ug
dG8gY3JlYXRlIHlvdXIgb3duIHN1YmNsYXNzIGFuZCBwdXQKIC8vIHN0YXRlIGluIG1lbWJlciBm
aWVsZHMuIFRoaXMgY2FuIGJlIG1vcmUgbmF0dXJhbCBpZiB5b3Ugd2FudCBmaW5lLWdyYWluZWQg
Y29udHJvbCBvdmVyIHdoYXQKIC8vIHN0YXRlIGlzIHNoYXJlZCBiZXR3ZWVuIGluc3RhbmNlcyBv
ZiB0aGUgdGFzay4KLWNsYXNzIFNoYXJlZFRhc2sgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50
ZWQ8U2hhcmVkVGFzaz4gewordGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rpb25UeXBlPiBjbGFzcyBT
aGFyZWRUYXNrOwordGVtcGxhdGU8dHlwZW5hbWUgUmVzdWx0VHlwZSwgdHlwZW5hbWUuLi4gQXJn
dW1lbnRUeXBlcz4KK2NsYXNzIFNoYXJlZFRhc2s8UmVzdWx0VHlwZShBcmd1bWVudFR5cGVzLi4u
KT4gOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8U2hhcmVkVGFzazxSZXN1bHRUeXBlKEFy
Z3VtZW50VHlwZXMuLi4pPj4gewogcHVibGljOgogICAgIFNoYXJlZFRhc2soKSB7IH0KICAgICB2
aXJ0dWFsIH5TaGFyZWRUYXNrKCkgeyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgcnVuKCkgPSAwOwor
ICAgIHZpcnR1YWwgUmVzdWx0VHlwZSBydW4oQXJndW1lbnRUeXBlcy4uLikgPSAwOwogfTsKIAog
Ly8gVGhpcyBpcyBhIHV0aWxpdHkgY2xhc3MgdGhhdCBhbGxvd3MgeW91IHRvIGNyZWF0ZSBhIFNo
YXJlZFRhc2sgc3ViY2xhc3MgdXNpbmcgYSBsYW1iZGEuIFVzdWFsbHksCiAvLyB5b3UgZG9uJ3Qg
d2FudCB0byB1c2UgdGhpcyBjbGFzcyBkaXJlY3RseS4gVXNlIGNyZWF0ZVNoYXJlZFRhc2soKSBp
bnN0ZWFkLgotdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KLWNsYXNzIFNoYXJlZFRhc2tGdW5j
dG9yIDogcHVibGljIFNoYXJlZFRhc2sgewordGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rpb25UeXBl
LCB0eXBlbmFtZSBGdW5jdG9yPiBjbGFzcyBTaGFyZWRUYXNrRnVuY3RvcjsKK3RlbXBsYXRlPHR5
cGVuYW1lIFJlc3VsdFR5cGUsIHR5cGVuYW1lLi4uIEFyZ3VtZW50VHlwZXMsIHR5cGVuYW1lIEZ1
bmN0b3I+CitjbGFzcyBTaGFyZWRUYXNrRnVuY3RvcjxSZXN1bHRUeXBlKEFyZ3VtZW50VHlwZXMu
Li4pPiA6IHB1YmxpYyBTaGFyZWRUYXNrPFJlc3VsdFR5cGUoQXJndW1lbnRUeXBlcy4uLik+IHsK
IHB1YmxpYzoKICAgICBTaGFyZWRUYXNrRnVuY3Rvcihjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQog
ICAgICAgICA6IG1fZnVuY3RvcihmdW5jdG9yKQpAQCAtNzcsOSArODAsOSBAQCBwdWJsaWM6CiAg
ICAgfQogCiBwcml2YXRlOgotICAgIHZvaWQgcnVuKCkgb3ZlcnJpZGUKKyAgICBSZXN1bHRUeXBl
IHJ1bihBcmd1bWVudFR5cGVzLi4uIGFyZ3VtZW50cykgb3ZlcnJpZGUKICAgICB7Ci0gICAgICAg
IG1fZnVuY3RvcigpOworICAgICAgICByZXR1cm4gbV9mdW5jdG9yKGFyZ3VtZW50cy4uLik7CiAg
ICAgfQogCiAgICAgRnVuY3RvciBtX2Z1bmN0b3I7CkBAIC04Nyw3ICs5MCw3IEBAIHByaXZhdGU6
CiAKIC8vIENyZWF0ZSBhIFNoYXJlZFRhc2sgZnJvbSBhIGZ1bmN0b3IsIHN1Y2ggYXMgYSBsYW1i
ZGEuIFlvdSBjYW4gdXNlIHRoaXMgbGlrZSBzbzoKIC8vCi0vLyBSZWZQdHI8U2hhcmVkVGFzaz4g
dGFzayA9IGNyZWF0ZVNoYXJlZFRhc2soCisvLyBSZWZQdHI8U2hhcmVkVGFzazx2b2lkKCk+PiB0
YXNrID0gY3JlYXRlU2hhcmVkVGFzazx2b2lkKCk+KAogLy8gICAgIFs9XSAoKSB7CiAvLyAgICAg
ICAgIGRvIHRoaW5nczsKIC8vICAgICB9KTsKQEAgLTEwMiwxMCArMTA1LDEwIEBAIHByaXZhdGU6
CiAvLyBPbiB0aGUgb3RoZXIgaGFuZCwgaWYgeW91IHVzZSBzb21ldGhpbmcgbGlrZSBQYXJhbGxl
bEhlbHBlckNsaWVudDo6cnVuVGFza0luUGFyYWxsZWwoKSAob3IgaXRzCiAvLyBoZWxwZXIsIHJ1
bkZ1bmN0aW9uSW5QYXJhbGxlbCgpLCB3aGljaCBkb2VzIGNyZWF0ZVNoYXJlZFRhc2soKSBmb3Ig
eW91KSwgdGhlbiBpdCBjYW4gYmUgT0sgdG8KIC8vIHVzZSBbJl0sIHNpbmNlIHRoZSBzdGFjayBm
cmFtZSB3aWxsIHJlbWFpbiBsaXZlIGZvciB0aGUgZW50aXJlIGR1cmF0aW9uIG9mIHRoZSB0YXNr
J3MgbGlmZXRpbWUuCi10ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgotUmVmPFNoYXJlZFRhc2s+
IGNyZWF0ZVNoYXJlZFRhc2soY29uc3QgRnVuY3RvciYgZnVuY3RvcikKK3RlbXBsYXRlPHR5cGVu
YW1lIEZ1bmN0aW9uVHlwZSwgdHlwZW5hbWUgRnVuY3Rvcj4KK1JlZjxTaGFyZWRUYXNrPEZ1bmN0
aW9uVHlwZT4+IGNyZWF0ZVNoYXJlZFRhc2soY29uc3QgRnVuY3RvciYgZnVuY3RvcikKIHsKLSAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTaGFyZWRUYXNrRnVuY3RvcjxGdW5jdG9yPihmdW5jdG9y
KSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2hhcmVkVGFza0Z1bmN0b3I8RnVuY3Rpb25U
eXBlLCBGdW5jdG9yPihmdW5jdG9yKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdURgpJbmRleDog
U291cmNlL1dURi93dGYvU3RkTGliRXh0cmFzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93
dGYvU3RkTGliRXh0cmFzLmgJKHJldmlzaW9uIDE5MDc0OSkKKysrIFNvdXJjZS9XVEYvd3RmL1N0
ZExpYkV4dHJhcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOTIsNiArMzkyLDcgQEAgdXNpbmcgV1RG
Ojp0cnlCaW5hcnlTZWFyY2g7CiB1c2luZyBXVEY6OmFwcHJveGltYXRlQmluYXJ5U2VhcmNoOwog
dXNpbmcgV1RGOjpiaXR3aXNlX2Nhc3Q7CiB1c2luZyBXVEY6OnNhZmVDYXN0OwordXNpbmcgV1RG
Ojp0dXBsZUFwcGx5OwogCiAjaWYgQ09NUElMRVJfU1VQUE9SVFMoQ1hYX1VTRVJfTElURVJBTFMp
CiAvLyBXZSBub3JtYWxseSBkb24ndCB3YW50IHRvIGJyaW5nIGluIGVudGlyZSBzdGQgbmFtZXNw
YWNlcywgYnV0IGxpdGVyYWxzIGFyZSBhbiBleGNlcHRpb24uCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>262741</attachid>
            <date>2015-10-08 21:20:11 -0700</date>
            <delta_ts>2015-10-09 12:26:45 -0700</delta_ts>
            <desc>more things</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>44569</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2Vt
Ymxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJz
dHJhY3RNYWNyb0Fzc2VtYmxlci5oCShyZXZpc2lvbiAxOTA3NDkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAkod29ya2luZyBjb3B5
KQpAQCAtMTAwNCw2ICsxMDA0LDE3IEBAIHB1YmxpYzoKICAgICAgICAgQXNzZW1ibGVyVHlwZTo6
cmVwbGFjZVdpdGhBZGRyZXNzQ29tcHV0YXRpb24obGFiZWwuZGF0YUxvY2F0aW9uKCkpOwogICAg
IH0KIAorICAgIHZvaWQgYWRkTGlua1Rhc2soU2hhcmVkVGFzazx2b2lkKExpbmtCdWZmZXImKT4q
IHRhc2spCisgICAgeworICAgICAgICBtX2xpbmtUYXNrcy5hcHBlbmQodGFzayk7CisgICAgfQor
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGFkZExpbmtUYXNrKGNv
bnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgeworICAgICAgICBhZGRMaW5rVGFzayhjcmVhdGVT
aGFyZWRUYXNrPHZvaWQoTGlua0J1ZmZlciYpPihmdW5jdG9yKSk7CisgICAgfQorCiBwcm90ZWN0
ZWQ6CiAgICAgQWJzdHJhY3RNYWNyb0Fzc2VtYmxlcigpCiAgICAgICAgIDogbV9yYW5kb21Tb3Vy
Y2UoY3J5cHRvZ3JhcGhpY2FsbHlSYW5kb21OdW1iZXIoKSkKQEAgLTEwOTksMTAgKzExMTAsOSBA
QCBwcm90ZWN0ZWQ6CiAKICAgICB1bnNpZ25lZCBtX3RlbXBSZWdpc3RlcnNWYWxpZEJpdHM7CiAK
LSAgICBmcmllbmQgY2xhc3MgTGlua0J1ZmZlcjsKLQotcHJpdmF0ZToKKyAgICBWZWN0b3I8UmVm
UHRyPFNoYXJlZFRhc2s8dm9pZChMaW5rQnVmZmVyJik+Pj4gbV9saW5rVGFza3M7CiAKKyAgICBm
cmllbmQgY2xhc3MgTGlua0J1ZmZlcjsKIH07IC8vIGNsYXNzIEFic3RyYWN0TWFjcm9Bc3NlbWJs
ZXIKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL0xpbmtCdWZmZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5jcHAJKHJldmlzaW9uIDE5MDc0OSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE5Myw2ICsxOTMsOSBAQCB2b2lkIExpbmtCdWZmZXI6OmxpbmtDb2RlKE1hY3JvQXNzZW1ibGVy
CiAjZWxpZiBDUFUoQVJNNjQpCiAgICAgY29weUNvbXBhY3RBbmRMaW5rQ29kZTx1aW50MzJfdD4o
bWFjcm9Bc3NlbWJsZXIsIG93bmVyVUlELCBlZmZvcnQpOwogI2VuZGlmCisKKyAgICBmb3IgKGF1
dG8mIHRhc2sgOiBtYWNyb0Fzc2VtYmxlci5tX2xpbmtUYXNrcykKKyAgICAgICAgdGFzay0+cnVu
KCp0aGlzKTsKIH0KIAogdm9pZCBMaW5rQnVmZmVyOjphbGxvY2F0ZShzaXplX3QgaW5pdGlhbFNp
emUsIHZvaWQqIG93bmVyVUlELCBKSVRDb21waWxhdGlvbkVmZm9ydCBlZmZvcnQpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5oCShy
ZXZpc2lvbiAxOTA3NDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3Jv
QXNzZW1ibGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzMCw2ICsyMzAsMTUgQEAgcHVibGljOgog
ICAgICAgICBzdG9yZVB0cihpbW0sIGFkZHJlc3NGb3JQb2tlKGluZGV4KSk7CiAgICAgfQogCisg
ICAgdm9pZCBwdXNoKFRydXN0ZWRJbW1QdHIgaW1tKQorICAgIHsKKyNpZiBDUFUoWDg2XzY0KSB8
fCBDUFUoQVJNNjQpCisgICAgICAgIHB1c2goVHJ1c3RlZEltbTY0KGltbSkpOworI2Vsc2UKKyAg
ICAgICAgcHVzaChUcnVzdGVkSW1tMzIoaW1tKSk7CisjZW5kaWYKKyAgICB9CisKICNpZiAhQ1BV
KEFSTTY0KQogICAgIHZvaWQgcHVzaFRvU2F2ZShSZWdpc3RlcklEIHNyYykKICAgICB7CkBAIC0y
MzksNiArMjQ4LDEwIEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIHB1c2goaW1tKTsKICAgICB9
CisgICAgdm9pZCBwdXNoVG9TYXZlSW1tZWRpYXRlKFRydXN0ZWRJbW1QdHIgaW1tKQorICAgIHsK
KyAgICAgICAgcHVzaChpbW0pOworICAgIH0KICAgICB2b2lkIHBvcFRvUmVzdG9yZShSZWdpc3Rl
cklEIGRlc3QpCiAgICAgewogICAgICAgICBwb3AoZGVzdCk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyWDg2XzY0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlclg4Nl82NC5oCShy
ZXZpc2lvbiAxOTA3NDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3Jv
QXNzZW1ibGVyWDg2XzY0LmgJKHdvcmtpbmcgY29weSkKQEAgLTU1LDYgKzU1LDEyIEBAIHB1Ymxp
YzoKICAgICB1c2luZyBNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbjo6bG9hZERvdWJsZTsKICAgICB1
c2luZyBNYWNyb0Fzc2VtYmxlclg4NkNvbW1vbjo6Y29udmVydEludDMyVG9Eb3VibGU7CiAKKyAg
ICB2b2lkIHB1c2goVHJ1c3RlZEltbTY0IGltbSkKKyAgICB7CisgICAgICAgIG1vdmUoaW1tLCBz
Y3JhdGNoUmVnaXN0ZXIpOworICAgICAgICBwdXNoKHNjcmF0Y2hSZWdpc3Rlcik7CisgICAgfQor
CiAgICAgdm9pZCBhZGQzMihUcnVzdGVkSW1tMzIgaW1tLCBBYnNvbHV0ZUFkZHJlc3MgYWRkcmVz
cykKICAgICB7CiAgICAgICAgIG1vdmUoVHJ1c3RlZEltbVB0cihhZGRyZXNzLm1fcHRyKSwgc2Ny
YXRjaFJlZ2lzdGVyKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGls
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxl
LmNwcAkocmV2aXNpb24gMTkwNzQ5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExD
b21waWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMzLDcgKzMzMyw3IEBAIHN0YXRpYyB2b2lk
IGZpeEZ1bmN0aW9uQmFzZWRPblN0YWNrTWFwcygKIHsKICAgICBHcmFwaCYgZ3JhcGggPSBzdGF0
ZS5ncmFwaDsKICAgICBWTSYgdm0gPSBncmFwaC5tX3ZtOwotICAgIFN0YWNrTWFwcyBzdGFja21h
cHMgPSBqaXRDb2RlLT5zdGFja21hcHM7CisgICAgU3RhY2tNYXBzJiBzdGFja21hcHMgPSBqaXRD
b2RlLT5zdGFja21hcHM7CiAgICAgCiAgICAgaW50IGxvY2Fsc09mZnNldCA9IG9mZnNldE9mU3Rh
Y2tSZWdpb24ocmVjb3JkTWFwLCBzdGF0ZS5jYXB0dXJlZFN0YWNrbWFwSUQpICsgZ3JhcGgubV9u
ZXh0TWFjaGluZUxvY2FsOwogICAgIGludCB2YXJhcmdzU3BpbGxTbG90c09mZnNldCA9IG9mZnNl
dE9mU3RhY2tSZWdpb24ocmVjb3JkTWFwLCBzdGF0ZS52YXJhcmdzU3BpbGxTbG90c1N0YWNrbWFw
SUQpOwpAQCAtNDM5LDcgKzQzOSwxMCBAQCBzdGF0aWMgdm9pZCBmaXhGdW5jdGlvbkJhc2VkT25T
dGFja01hcHMoCiAgICAgICAgIHN0YXRlLmZpbmFsaXplci0+ZXhpdFRodW5rc0xpbmtCdWZmZXIg
PSBXVEY6Om1vdmUobGlua0J1ZmZlcik7CiAgICAgfQogCi0gICAgaWYgKCFzdGF0ZS5nZXRCeUlk
cy5pc0VtcHR5KCkgfHwgIXN0YXRlLnB1dEJ5SWRzLmlzRW1wdHkoKSB8fCAhc3RhdGUuY2hlY2tJ
bnMuaXNFbXB0eSgpKSB7CisgICAgaWYgKCFzdGF0ZS5nZXRCeUlkcy5pc0VtcHR5KCkKKyAgICAg
ICAgfHwgIXN0YXRlLnB1dEJ5SWRzLmlzRW1wdHkoKQorICAgICAgICB8fCAhc3RhdGUuY2hlY2tJ
bnMuaXNFbXB0eSgpCisgICAgICAgIHx8ICFzdGF0ZS5sYXp5U2xvd1BhdGhzLmlzRW1wdHkoKSkg
ewogICAgICAgICBDQ2FsbEhlbHBlcnMgc2xvd1BhdGhKSVQoJnZtLCBjb2RlQmxvY2spOwogICAg
ICAgICAKICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBleGNlcHRpb25UYXJnZXQ7CkBA
IC01NTYsNiArNTU5LDQ1IEBAIHN0YXRpYyB2b2lkIGZpeEZ1bmN0aW9uQmFzZWRPblN0YWNrTWFw
cygKICAgICAgICAgICAgICAgICBjaGVja0luLm1fZ2VuZXJhdG9ycy5hcHBlbmQoQ2hlY2tJbkdl
bmVyYXRvcihzdHViSW5mbywgc2xvd0NhbGwsIGJlZ2luKSk7CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KKworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBzdGF0ZS5sYXp5U2xvd1BhdGhzLnNp
emUoKTsgaS0tOykgeworICAgICAgICAgICAgTGF6eVNsb3dQYXRoRGVzY3JpcHRvciYgbGF6eVNs
b3dQYXRoID0gc3RhdGUubGF6eVNsb3dQYXRoc1tpXTsKKworICAgICAgICAgICAgaWYgKHZlcmJv
c2VDb21waWxhdGlvbkVuYWJsZWQoKSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCJIYW5kbGlu
ZyBsYXp5U2xvd1BhdGggc3RhY2ttYXAgIyIsIGxhenlTbG93UGF0aC5zdGFja21hcElEKCksICJc
biIpOworCisgICAgICAgICAgICBhdXRvIGl0ZXIgPSByZWNvcmRNYXAuZmluZChsYXp5U2xvd1Bh
dGguc3RhY2ttYXBJRCgpKTsKKyAgICAgICAgICAgIGlmIChpdGVyID09IHJlY29yZE1hcC5lbmQo
KSkgeworICAgICAgICAgICAgICAgIC8vIEl0IHdhcyBvcHRpbWl6ZWQgb3V0LgorICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgaXRlci0+dmFsdWUuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAg
ICBTdGFja01hcHM6OlJlY29yZCYgcmVjb3JkID0gaXRlci0+dmFsdWVbaV07CisgICAgICAgICAg
ICAgICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVycyA9IHVzZWRSZWdpc3RlcnNGb3IocmVjb3Jk
KTsKKyAgICAgICAgICAgICAgICBWZWN0b3I8TG9jYXRpb24+IGxvY2F0aW9uczsKKyAgICAgICAg
ICAgICAgICBmb3IgKGF1dG8gbG9jYXRpb24gOiByZWNvcmQubG9jYXRpb25zKQorICAgICAgICAg
ICAgICAgICAgICBsb2NhdGlvbnMuYXBwZW5kKExvY2F0aW9uOjpmb3JTdGFja21hcHMoJnN0YWNr
bWFwcywgbG9jYXRpb24pKTsKKworICAgICAgICAgICAgICAgIGNoYXIqIHN0YXJ0T2ZJQyA9Cisg
ICAgICAgICAgICAgICAgICAgIGJpdHdpc2VfY2FzdDxjaGFyKj4oZ2VuZXJhdGVkRnVuY3Rpb24p
ICsgaXRlci0+dmFsdWUuaW5zdHJ1Y3Rpb25PZmZzZXQ7CisgICAgICAgICAgICAgICAgQ29kZUxv
Y2F0aW9uTGFiZWwgcGF0Y2hwb2ludChNYWNyb0Fzc2VtYmxlckNvZGVQdHIoc3RhcnRPZklDKSk7
CisgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwgZXhjZXB0aW9uVGFyZ2V0ID0KKyAg
ICAgICAgICAgICAgICAgICAgc3RhdGUuZmluYWxpemVyLT5oYW5kbGVFeGNlcHRpb25zTGlua0J1
ZmZlci0+ZW50cnlwb2ludCgpOworCisgICAgICAgICAgICAgICAgTGF6eVNsb3dQYXRoKiBsYXp5
U2xvd1BhdGggPSBzdGF0ZS5qaXRDb2RlLT5sYXp5U2xvd1BhdGhzLmFkZCgKKyAgICAgICAgICAg
ICAgICAgICAgcGF0Y2hwb2ludCwgZXhjZXB0aW9uVGFyZ2V0LCB1c2VkUmVnaXN0ZXJzLCBsYXp5
U2xvd1BhdGguY2FsbFNpdGVJbmRleCgpLAorICAgICAgICAgICAgICAgICAgICBsYXp5U2xvd1Bh
dGgubV9saW5rZXItPnJ1bihsb2NhdGlvbnMpKTsKKworICAgICAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6TGFiZWwgYmVnaW4gPSBzbG93UGF0aEpJVC5sYWJlbCgpOworCisgICAgICAgICAgICAg
ICAgc2xvd1BhdGhKSVQucHVzaFRvU2F2ZUltbWVkaWF0ZShUcnVzdGVkSW1tUHRyKGxhenlTbG93
UGF0aCkpOworICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBnZW5lcmF0b3JKdW1w
ID0gc2xvd1BhdGhKSVQuanVtcCgpOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAg
IGxhenlTbG93UGF0aC5tX2dlbmVyYXRvcnMuYXBwZW5kKHN0ZDo6bWFrZV90dXBsZShsYXp5U2xv
d1BhdGgsIGJlZ2luKSk7CisgICAgICAgICAgICAgICAgc3RhdGUuZmluYWxpemVyLT5sYXp5U2xv
d1BhdGhHZW5lcmF0b3JKdW1wcy5hcHBlbmQoZ2VuZXJhdG9ySnVtcCk7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGV4Y2VwdGlvblRhcmdldC5saW5rKCZzbG93
UGF0aEpJVCk7CiAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpKdW1wIGV4Y2VwdGlvbkp1bXAgPSBz
bG93UGF0aEpJVC5qdW1wKCk7CkBAIC01NzgsMTIgKzYyMCwxOCBAQCBzdGF0aWMgdm9pZCBmaXhG
dW5jdGlvbkJhc2VkT25TdGFja01hcHMoCiAgICAgICAgICAgICAgICAgc3RhdGUsIGNvZGVCbG9j
aywgZ2VuZXJhdGVkRnVuY3Rpb24sIHJlY29yZE1hcCwgc3RhdGUucHV0QnlJZHNbaV0sCiAgICAg
ICAgICAgICAgICAgc2l6ZU9mUHV0QnlJZCgpKTsKICAgICAgICAgfQotCiAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IHN0YXRlLmNoZWNrSW5zLnNpemUoKTsgaS0tOykgewogICAgICAgICAgICAg
Z2VuZXJhdGVDaGVja0luSUNGYXN0UGF0aCgKICAgICAgICAgICAgICAgICBzdGF0ZSwgY29kZUJs
b2NrLCBnZW5lcmF0ZWRGdW5jdGlvbiwgcmVjb3JkTWFwLCBzdGF0ZS5jaGVja0luc1tpXSwKICAg
ICAgICAgICAgICAgICBzaXplT2ZJbigpKTsgCi0gICAgICAgIH0gCisgICAgICAgIH0KKyAgICAg
ICAgZm9yICh1bnNpZ25lZCBpID0gc3RhdGUubGF6eVNsb3dQYXRocy5zaXplKCk7IGktLTspIHsK
KyAgICAgICAgICAgIExhenlTbG93UGF0aERlc2NyaXB0b3ImIGxhenlTbG93UGF0aCA9IHN0YXRl
LmxhenlTbG93UGF0aHNbaV07CisgICAgICAgICAgICBmb3IgKGF1dG8mIHR1cGxlIDogbGF6eVNs
b3dQYXRoLm1fZ2VuZXJhdG9ycykgeworICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpy
ZXBsYWNlV2l0aEp1bXAoCisgICAgICAgICAgICAgICAgICAgIHN0ZDo6Z2V0PDA+KHR1cGxlKS0+
cGF0Y2hwb2ludCgpLCBsaW5rQnVmZmVyLmxvY2F0aW9uT2Yoc3RkOjpnZXQ8MT4odHVwbGUpKSk7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KICAgICB9CiAgICAgCiAgICAgYWRqdXN0Q2FsbElD
c0ZvclN0YWNrbWFwcyhzdGF0ZS5qc0NhbGxzLCByZWNvcmRNYXApOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExJbmxpbmVDYWNoZURlc2NyaXB0b3IuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTElubGluZUNhY2hlRGVzY3JpcHRvci5oCShy
ZXZpc2lvbiAxOTA3NDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTElubGluZUNh
Y2hlRGVzY3JpcHRvci5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jt
cywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTI5LDYgKzI5LDcgQEAKICNpZiBF
TkFCTEUoRlRMX0pJVCkKIAogI2luY2x1ZGUgIkNvZGVPcmlnaW4uaCIKKyNpbmNsdWRlICJGVExM
YXp5U2xvd1BhdGguaCIKICNpbmNsdWRlICJKSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oIgogI2lu
Y2x1ZGUgIk1hY3JvQXNzZW1ibGVyLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvVW5pcXVlZFN0cmlu
Z0ltcGwuaD4KQEAgLTExNCwxNiArMTE1LDQwIEBAIHB1YmxpYzoKICAgICBDaGVja0luRGVzY3Jp
cHRvcigpIHsgfQogICAgIAogICAgIENoZWNrSW5EZXNjcmlwdG9yKHVuc2lnbmVkIHN0YWNrbWFw
SUQsIENhbGxTaXRlSW5kZXggY2FsbFNpdGUsIGNvbnN0IFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQp
Ci0gICAgICAgIDogSW5saW5lQ2FjaGVEZXNjcmlwdG9yKHN0YWNrbWFwSUQsIGNhbGxTaXRlLCBu
dWxscHRyKQotICAgICAgICAsIG1fdWlkKHVpZCkKKyAgICAgICAgOiBJbmxpbmVDYWNoZURlc2Ny
aXB0b3Ioc3RhY2ttYXBJRCwgY2FsbFNpdGUsIHVpZCkKICAgICB7CiAgICAgfQotCiAgICAgCi0g
ICAgY29uc3QgVW5pcXVlZFN0cmluZ0ltcGwqIG1fdWlkOwogICAgIFZlY3RvcjxDaGVja0luR2Vu
ZXJhdG9yPiBtX2dlbmVyYXRvcnM7CiB9OwogCisvLyBZb3UgY2FuIGNyZWF0ZSBhIGxhenkgc2xv
dyBwYXRoIGNhbGwgaW4gbG93ZXJERkdUb0xMVk0gYnkgZG9pbmc6CisvLyBtX2Z0bFN0YXRlLmxh
enlTbG93UGF0aHMuYXBwZW5kKAorLy8gICAgIExhenlTbG93UGF0aERlc2NyaXB0b3IoCisvLyAg
ICAgICAgIHN0YWNrbWFwSUQsIGNhbGxTaXRlSW5kZXgsCisvLyAgICAgICAgIGNyZWF0ZVNoYXJl
ZFRhc2s8UmVmUHRyPExhenlTbG93UGF0aDo6R2VuZXJhdG9yPihjb25zdCBWZWN0b3I8TG9jYXRp
b24+Jik+KAorLy8gICAgICAgICAgICAgW10gKGNvbnN0IFZlY3RvcjxMb2NhdGlvbj4mIGxvY2F0
aW9ucykgLT4gUmVmUHRyPExhenlTbG93UGF0aDo6R2VuZXJhdG9yPiB7CisvLyAgICAgICAgICAg
ICAgICAgLy8gVGhpcyBsYW1iZGEgc2hvdWxkIGp1c3QgcmVjb3JkIHRoZSByZWdpc3RlcnMgdGhh
dCB3ZSB3aWxsIGJlIHVzaW5nLCBhbmQgcmV0dXJuCisvLyAgICAgICAgICAgICAgICAgLy8gYSBT
aGFyZWRUYXNrIHRoYXQgd2lsbCBhY3R1YWxseSBnZW5lcmF0ZSB0aGUgc2xvdyBwYXRoLgorLy8g
ICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVMYXp5Q2FsbEdlbmVyYXRvcigKKy8vICAgICAg
ICAgICAgICAgICAgICAgZnVuY3Rpb24sIGxvY2F0aW9uc1swXS5kaXJlY3RHUFIoKSwgbG9jYXRp
b25zWzFdLmRpcmVjdEdQUigpKTsKKy8vICAgICAgICAgICAgIH0pKSk7CitjbGFzcyBMYXp5U2xv
d1BhdGhEZXNjcmlwdG9yIDogcHVibGljIElubGluZUNhY2hlRGVzY3JpcHRvciB7CitwdWJsaWM6
CisgICAgTGF6eVNsb3dQYXRoRGVzY3JpcHRvcigpIHsgfQorCisgICAgTGF6eVNsb3dQYXRoRGVz
Y3JpcHRvcigKKyAgICAgICAgdW5zaWduZWQgc3RhY2ttYXBJRCwgQ2FsbFNpdGVJbmRleCBjYWxs
U2l0ZSwKKyAgICAgICAgU2hhcmVkVGFzazxSZWZQdHI8TGF6eVNsb3dQYXRoOjpHZW5lcmF0b3I+
KGNvbnN0IFZlY3RvcjxMb2NhdGlvbj4mKT4qIGxpbmtlcikKKyAgICAgICAgOiBJbmxpbmVDYWNo
ZURlc2NyaXB0b3Ioc3RhY2ttYXBJRCwgY2FsbFNpdGUsIG51bGxwdHIpCisgICAgICAgICwgbV9n
ZW5lcmF0b3IoZ2VuZXJhdG9yKQorICAgIHsKKyAgICB9CisKKyAgICBWZWN0b3I8c3RkOjp0dXBs
ZTxMYXp5U2xvd1BhdGgqLCBDQ2FsbEhlbHBlcnM6OkxhYmVsPj4gbV9nZW5lcmF0b3JzOworCisg
ICAgUmVmUHRyPFNoYXJlZFRhc2s8UmVmUHRyPExhenlTbG93UGF0aDo6R2VuZXJhdG9yPihjb25z
dCBWZWN0b3I8TG9jYXRpb24+Jik+PiBtX2xpbmtlcjsKK307CiAKIH0gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpGVEwKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRDb2RlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRDb2RlLmgJKHJl
dmlzaW9uIDE5MDc0OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklUQ29kZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC04Niw2ICs4Niw3IEBAIHB1YmxpYzoKICAgICBERkc6OkNvbW1v
bkRhdGEgY29tbW9uOwogICAgIFNlZ21lbnRlZFZlY3RvcjxPU1JFeGl0LCA4PiBvc3JFeGl0Owog
ICAgIFN0YWNrTWFwcyBzdGFja21hcHM7CisgICAgQmFnPExhenlTbG93UGF0aD4gbGF6eVNsb3dQ
YXRoczsKICAgICAKIHByaXZhdGU6CiAgICAgVmVjdG9yPFJlZlB0cjxEYXRhU2VjdGlvbj4+IG1f
ZGF0YVNlY3Rpb25zOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRGaW5h
bGl6ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklU
RmluYWxpemVyLmNwcAkocmV2aXNpb24gMTkwNzQ5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExKSVRGaW5hbGl6ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTIsNiArMTEyLDEz
IEBAIGJvb2wgSklURmluYWxpemVyOjpmaW5hbGl6ZUZ1bmN0aW9uKCkKICAgICAgICAgICAgICAg
ICBjYWxsLmNhbGwoKSwKICAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbChtX3BsYW4u
dm0uZnRsVGh1bmtzLT5nZXRTbG93UGF0aENhbGxUaHVuayhtX3BsYW4udm0sIGNhbGwua2V5KCkp
LmNvZGUoKSkpOwogICAgICAgICB9CisKKyAgICAgICAgZm9yIChDQ2FsbEhlbHBlcnM6Okp1bXAg
anVtcCA6IGxhenlTbG93UGF0aEdlbmVyYXRvckp1bXBzKSB7CisgICAgICAgICAgICBzaWRlQ29k
ZUxpbmtCdWZmZXItPmxpbmsoCisgICAgICAgICAgICAgICAganVtcCwKKyAgICAgICAgICAgICAg
ICBDb2RlTG9jYXRpb25MYWJlbCgKKyAgICAgICAgICAgICAgICAgICAgbV9wbGFuLnZtLmdldENU
SVN0dWIobGF6eVNsb3dQYXRoR2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKS5jb2RlKCkpKTsKKyAg
ICAgICAgfQogICAgICAgICAKICAgICAgICAgaml0Q29kZS0+YWRkSGFuZGxlKEZJTkFMSVpFX0RG
R19DT0RFKAogICAgICAgICAgICAgKnNpZGVDb2RlTGlua0J1ZmZlciwKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMSklURmluYWxpemVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRGaW5hbGl6ZXIuaAkocmV2aXNpb24gMTkwNzQ5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRGaW5hbGl6ZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtNjcsNiArNjcsNyBAQCBwdWJsaWM6CiAgICAgVmVjdG9yPE91dE9mTGluZUNvZGVJ
bmZvPiBvdXRPZkxpbmVDb2RlSW5mb3M7CiAgICAgVmVjdG9yPFNsb3dQYXRoQ2FsbD4gc2xvd1Bh
dGhDYWxsczsgLy8gQ2FsbHMgaW5zaWRlIHRoZSBzaWRlIGNvZGUuCiAgICAgVmVjdG9yPE9TUkV4
aXRDb21waWxhdGlvbkluZm8+IG9zckV4aXQ7CisgICAgVmVjdG9yPENDYWxsSGVscGVyczo6SnVt
cD4gbGF6eVNsb3dQYXRoR2VuZXJhdG9ySnVtcHM7CiAgICAgR2VuZXJhdGVkRnVuY3Rpb24gZnVu
Y3Rpb247CiAgICAgUmVmUHRyPEpJVENvZGU+IGppdENvZGU7CiB9OwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExMYXp5U2xvd1BhdGguY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTGF6eVNsb3dQYXRoLmNwcAkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTGF6eVNsb3dQYXRoLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDY5IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGVExMYXp5U2xvd1Bh
dGguaCIKKworI2luY2x1ZGUgIkZUTFNsb3dQYXRoQ2FsbC5oIgorCituYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEZUTCB7CisKK0xhenlTbG93UGF0aDo6TGF6eVNsb3dQYXRoKAorICAgIENvZGVM
b2NhdGlvbkxhYmVsIHBhdGNocG9pbnQsIENvZGVMb2NhdGlvbkxhYmVsIGV4Y2VwdGlvblRhcmdl
dCwKKyAgICBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywgR2VuZXJhdG9yKiBnZW5l
cmF0b3IpCisgICAgOiBtX3BhdGNocG9pbnQocGF0Y2hwb2ludCkKKyAgICAsIG1fZXhjZXB0aW9u
VGFyZ2V0KGV4Y2VwdGlvblRhcmdldCkKKyAgICAsIG1fdXNlZFJlZ2lzdGVycyh1c2VkUmVnaXN0
ZXJzKQorICAgICwgbV9nZW5lcmF0b3IoZ2VuZXJhdG9yKQoreworfQorCitMYXp5U2xvd1BhdGg6
On5MYXp5U2xvd1BhdGgoKQoreworfQorCit2b2lkIExhenlTbG93UGF0aDo6Z2VuZXJhdGUoQ29k
ZUJsb2NrKiBjb2RlQmxvY2spCit7CisgICAgUkVMRUFTRV9BU1NFUlQoIW1fc3R1Yik7CisKKyAg
ICBWTSYgdm0gPSAqY29kZUJsb2NrLT52bSgpOworCisgICAgQ0NhbGxIZWxwZXJzIGppdCgmdm0s
IGNvZGVCbG9jayk7CisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBleGNlcHRpb25KdW1wczsK
KyAgICBtX2dlbmVyYXRvci0+cnVuKGppdCwgbV9leGNlcHRpb25UYXJnZXQgPyAmZXhjZXB0aW9u
SnVtcHMgOiBudWxscHRyLCAqdGhpcyk7CisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGRvbmUgPSBq
aXQuanVtcCgpOworCisgICAgTGlua0J1ZmZlciBsaW5rQnVmZmVyKHZtLCBqaXQsIGNvZGVCbG9j
aywgSklUQ29tcGlsYXRpb25NdXN0U3VjY2VlZCk7CisgICAgbGlua0J1ZmZlci5saW5rKGRvbmUs
IG1fcGF0Y2hwb2ludC5sYWJlbEF0T2Zmc2V0KE1hY3JvQXNzZW1ibGVyOjptYXhKdW1wUmVwbGFj
ZW1lbnRTaXplKCkpKTsKKyAgICBpZiAoZXhjZXB0aW9uVGFyZ2V0KQorICAgICAgICBsaW5rQnVm
ZmVyLmxpbmsoZXhjZXB0aW9uSnVtcHMsIG1fZXhjZXB0aW9uVGFyZ2V0KTsKKyAgICBtX3N0dWIg
PSBGSU5BTElaRV9DT0RFX0ZPUihjb2RlQmxvY2ssIGxpbmtCdWZmZXIsICgiTGF6eSBzbG93IHBh
dGggY2FsbCBzdHViIikpOworCisgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGxhY2VXaXRoSnVtcCht
X3BhdGNocG9pbnQsIENvZGVMb2NhdGlvbkxhYmVsKG1fc3R1Yi5jb2RlKCkpKTsKK30KKworfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMTGF6eVNsb3dQYXRoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExMYXp5U2xvd1BhdGguaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMTGF6eVNsb3dQYXRoLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw2OCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVm
IEZUTExhenlTbG93UGF0aF9oCisjZGVmaW5lIEZUTExhenlTbG93UGF0aF9oCisKKyNpbmNsdWRl
ICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJDb2RlTG9jYXRpb24uaCIKKyNpbmNsdWRlICJHUFJJ
bmZvLmgiCisjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgiCisjaW5jbHVkZSAiUmVn
aXN0ZXJTZXQuaCIKKyNpbmNsdWRlIDx3dGYvU2hhcmVkVGFzay5oPgorCituYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIEZUTCB7CisKK2NsYXNzIExhenlTbG93UGF0aCB7CisgICAgV1RGX01BS0Vf
Tk9OQ09QWUFCTEUoTGF6eVNsb3dQYXRoKTsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
K3B1YmxpYzoKKyAgICB0eXBlZGVmIFNoYXJlZFRhc2s8dm9pZChDQ2FsbEhlbHBlcnMmLCBDQ2Fs
bEhlbHBlcnM6Okp1bXBMaXN0KiBleGNlcHRpb25KdW1wcywgTGF6eVNsb3dQYXRoJik+IEdlbmVy
YXRvcjsKKyAgICAKKyAgICBMYXp5U2xvd1BhdGgoCisgICAgICAgIENvZGVMb2NhdGlvbkxhYmVs
IHBhdGNocG9pbnQsIENvZGVMb2NhdGlvbkxhYmVsIGV4Y2VwdGlvblRhcmdldCwKKyAgICAgICAg
Y29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJ
bmRleCwgUmVmUHRyPEdlbmVyYXRvcj4pOworCisgICAgfkxhenlTbG93UGF0aCgpOworCisgICAg
Q29kZUxvY2F0aW9uTGFiZWwgcGF0Y2hwb2ludCgpIGNvbnN0IHsgcmV0dXJuIG1fcGF0Y2hwb2lu
dDsgfQorICAgIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzKCkgY29uc3QgeyByZXR1
cm4gbV91c2VkUmVnaXN0ZXJzOyB9CisgICAgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4KCkg
Y29uc3QgeyByZXR1cm4gbV9jYWxsU2l0ZUluZGV4OyB9CisKKyAgICB2b2lkIGdlbmVyYXRlKENv
ZGVCbG9jayopOworCitwcml2YXRlOgorICAgIENvZGVMb2NhdGlvbkxhYmVsIG1fcGF0Y2hwb2lu
dDsKKyAgICBDb2RlTG9jYXRpb25MYWJlbCBtX2V4Y2VwdGlvblRhcmdldDsKKyAgICBSZWdpc3Rl
clNldCBtX3VzZWRSZWdpc3RlcnM7CisgICAgQ2FsbFNpdGVJbmRleCBtX2NhbGxTaXRlSW5kZXg7
CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG1fc3R1YjsKKyAgICBSZWZQdHI8R2VuZXJhdG9y
PiBtX2dlbmVyYXRvcjsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKKworI2VuZGlm
IC8vIEZUTExhenlTbG93UGF0aF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMTGF6eVNsb3dQYXRoQ2FsbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMTGF6eVNsb3dQYXRoQ2FsbC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExMYXp5U2xvd1BhdGhDYWxsLmgJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaWZuZGVmIEZUTExhenlTbG93UGF0aENhbGxfaAorI2RlZmluZSBGVExMYXp5U2xvd1BhdGhD
YWxsX2gKKworI2luY2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUgIkNvZGVMb2NhdGlvbi5o
IgorI2luY2x1ZGUgIkZUTFNsb3dQYXRoQ2FsbC5oIgorI2luY2x1ZGUgIkdQUkluZm8uaCIKKyNp
bmNsdWRlICJNYWNyb0Fzc2VtYmxlckNvZGVSZWYuaCIKKyNpbmNsdWRlICJSZWdpc3RlclNldC5o
IgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CisKK3RlbXBsYXRlPHR5cGVuYW1l
IFJlc3VsdFR5cGUsIHR5cGVuYW1lLi4uIEFyZ3VtZW50VHlwZXM+CitSZWZQdHI8TGF6eVNsb3dQ
YXRoOjpHZW5lcmF0b3I+IGNyZWF0ZUxhenlDYWxsR2VuZXJhdG9yKAorICAgIEZ1bmN0aW9uUHRy
IGZ1bmN0aW9uLCBSZXN1bHRUeXBlIHJlc3VsdCwgQXJndW1lbnRUeXBlcy4uLiBhcmd1bWVudHMp
Cit7CisgICAgcmV0dXJuIGNyZWF0ZVNoYXJlZFRhc2s8TGF6eVNsb3dQYXRoOjpHZW5lcmF0b3I+
KAorICAgICAgICBbPV0gKENDYWxsSGVscGVycyYgaml0LCBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0
KiBleGNlcHRpb25KdW1wcywgTGF6eVNsb3dQYXRoJiBsYXp5U2xvd1BhdGgpIHsKKyAgICAgICAg
ICAgIGppdC5zdG9yZTMyKAorICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bTMyKGxhenlTbG93UGF0aC5jYWxsU2l0ZUluZGV4KCkuYml0cygpKSwKKyAgICAgICAgICAgICAg
ICBDQ2FsbEhlbHBlcnM6OnRhZ0ZvcihKU1N0YWNrOjpBcmd1bWVudENvdW50KSk7CisgICAgICAg
ICAgICBTbG93UGF0aENhbGwgc2xvd1BhdGggPSBjYWxsT3BlcmF0aW9uKAorICAgICAgICAgICAg
ICAgIGxhenlTbG93UGF0aC51c2VkUmVnaXN0ZXJzKCksIGppdCwgZXhjZXB0aW9uSnVtcHMsIGZ1
bmN0aW9uLCByZXN1bHQsIGFyZ3VtZW50cy4uLik7CisgICAgICAgICAgICBqaXQuYWRkTGlua1Rh
c2soCisgICAgICAgICAgICAgICAgWz1dIChMaW5rQnVmZmVyJiBsaW5rQnVmZmVyKSB7CisgICAg
ICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIubGluaygKKyAgICAgICAgICAgICAgICAgICAgICAg
IHNsb3dQYXRoLmNhbGwoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxh
YmVsKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGppdC52bSgpLT5mdGxUaHVua3MtPmdl
dFNsb3dQYXRoQ2FsbFRodW5rKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqaml0
LnZtKCksIHNsb3dQYXRoLmtleSgpKS5jb2RlKCkpKTsKKyAgICAgICAgICAgICAgICB9KTsKKyAg
ICAgICAgfSk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKKworI2VuZGlmIC8vIEZU
TExhenlTbG93UGF0aENhbGxfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TExvd2VyREZHVG9MTFZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkocmV2aXNpb24gMTkwNzQ5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTYzMDMsOSArNjMwMywxMyBAQCBwcml2YXRlOgogICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVh
dGlvbik7CiAgICAgICAgIAogICAgICAgICBtX291dC5hcHBlbmRUbyhzbG93UGF0aCwgY29udGlu
dWF0aW9uKTsKLSAgICAgICAgCi0gICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dSZXN1bHQgPSBt
X291dC5hbmNob3Iodm1DYWxsKAotICAgICAgICAgICAgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlv
bk5ld09iamVjdCksIG1fY2FsbEZyYW1lLCBtX291dC5jb25zdEludFB0cihzdHJ1Y3R1cmUpKSk7
CisKKyAgICAgICAgTFZhbHVlIHNsb3dSZXN1bHRWYWx1ZSA9IGxhenlTbG93UGF0aCgKKyAgICAg
ICAgICAgIFs9XSAoY29uc3QgVmVjdG9yPExvY2F0aW9uPiYgbG9jYXRpb25zKSAtPiBSZWZQdHI8
TGF6eVNsb3dQYXRoOjpHZW5lcmF0b3I+IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRl
TGF6eUNhbGxHZW5lcmF0b3IoCisgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbk5ld09iamVj
dCwgbG9jYXRpb25zWzBdLmRpcmVjdEdQUigpLCBzdHJ1Y3R1cmUpOworICAgICAgICAgICAgfSk7
CisgICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dSZXN1bHQgPSBtX291dC5hbmNob3Ioc2xvd1Jl
c3VsdFZhbHVlKTsKICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwogICAgICAgICAK
ICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CkBAIC03MTYz
LDYgKzcxNjcsMjMgQEAgcHJpdmF0ZToKICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0
aW9uLCBsYXN0TmV4dCk7CiAgICAgICAgIHJldHVybiBtX291dC5waGkobV9vdXQuaW50MzIsIGZh
c3RSZXN1bHQsIHNsb3dSZXN1bHQpOwogICAgIH0KKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1
bmN0b3IsIHR5cGVuYW1lLi4uIEFyZ3VtZW50VHlwZXM+CisgICAgTFZhbHVlIGxhenlTbG93UGF0
aChjb25zdCBGdW5jdG9yJiBmdW5jdG9yLCBBcmd1bWVudFR5cGVzLi4uIGFyZ3VtZW50cykKKyAg
ICB7CisgICAgICAgIHVuc2lnbmVkIHN0YWNrbWFwSUQgPSBtX3N0YWNrbWFwSURzKys7CisKKyAg
ICAgICAgTFZhbHVlIGNhbGwgPSBtX291dC5jYWxsKAorICAgICAgICAgICAgbV9vdXQucGF0Y2hw
b2ludEludDY0SW50cmluc2ljKCksCisgICAgICAgICAgICBtX291dC5jb25zdEludDY0KHN0YWNr
bWFwSUQpLCBtX291dC5jb25zdEludDMyKE1hY3JvQXNzZW1ibGVyOjptYXhKdW1wUmVwbGFjZW1l
bnRTaXplKCkpLAorICAgICAgICAgICAgY29uc3ROdWxsKG1fb3V0LnJlZjgpLCBtX291dC5jb25z
dEludDMyKHNpemVvZi4uLihhcmd1bWVudHMpKSwgYXJndW1lbnRzLi4uKTsKKyAgICAgICAgc2V0
SW5zdHJ1Y3Rpb25DYWxsaW5nQ29udmVudGlvbihjYWxsLCBMTFZNQW55UmVnQ2FsbENvbnYpOwor
CisgICAgICAgIGF1dG8gbGlua2VyID0KKyAgICAgICAgICAgIGNyZWF0ZVNoYXJlZFRhc2s8UmVm
UHRyPExhenlTbG93UGF0aDo6R2VuZXJhdG9yPihjb25zdCBWZWN0b3I8TG9jYXRpb24mPik+KGZ1
bmN0b3IpOworICAgICAgICAKKyAgICAgICAgbV9mdGxTdGF0ZS5sYXp5U2xvd1BhdGhzLmFwcGVu
ZChMYXp5U2xvd1BhdGhEZXNjcmlwdG9yKHN0YWNrbWFwSUQsIGNhbGxTaXRlSW5kZXgsIGxpbmtl
cikpOworICAgIH0KICAgICAKICAgICB2b2lkIHNwZWN1bGF0ZSgKICAgICAgICAgRXhpdEtpbmQg
a2luZCwgRm9ybWF0dGVkVmFsdWUgbG93VmFsdWUsIE5vZGUqIGhpZ2hWYWx1ZSwgTFZhbHVlIGZh
aWxDb25kaXRpb24pCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNsb3dQYXRo
Q2FsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTbG93
UGF0aENhbGwuY3BwCShyZXZpc2lvbiAxOTA3NDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTFNsb3dQYXRoQ2FsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDEzMSArMzUsOTIg
QEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewogCi1uYW1lc3BhY2UgewotCiAv
LyBUaGlzIGNvZGUgcmVsaWVzIG9uIHVzIGJlaW5nIDY0LWJpdC4gRlRMIGlzIGN1cnJlbnRseSBh
bHdheXMgNjQtYml0Lgogc3RhdGljIGNvbnN0IHNpemVfdCB3b3JkU2l6ZSA9IDg7CiAKLS8vIFRo
aXMgd2lsbCBiZSBhbiBSQUlJIHRoaW5neSB0aGF0IHdpbGwgc2V0IHVwIHRoZSBuZWNlc3Nhcnkg
c3RhY2sgc2l6ZXMgYW5kIG9mZnNldHMgYW5kIHN1Y2guCi1jbGFzcyBDYWxsQ29udGV4dCB7Ci1w
dWJsaWM6Ci0gICAgQ2FsbENvbnRleHQoCi0gICAgICAgIFN0YXRlJiBzdGF0ZSwgY29uc3QgUmVn
aXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsIENDYWxsSGVscGVycyYgaml0LAotICAgICAgICB1bnNp
Z25lZCBudW1BcmdzLCBHUFJSZWcgcmV0dXJuUmVnaXN0ZXIpCi0gICAgICAgIDogbV9zdGF0ZShz
dGF0ZSkKLSAgICAgICAgLCBtX3VzZWRSZWdpc3RlcnModXNlZFJlZ2lzdGVycykKLSAgICAgICAg
LCBtX2ppdChqaXQpCi0gICAgICAgICwgbV9udW1BcmdzKG51bUFyZ3MpCi0gICAgICAgICwgbV9y
ZXR1cm5SZWdpc3RlcihyZXR1cm5SZWdpc3RlcikKLSAgICB7Ci0gICAgICAgIC8vIFdlIGRvbid0
IGNhcmUgdGhhdCB5b3UncmUgdXNpbmcgY2FsbGVlLXNhdmUsIHN0YWNrLCBvciBoYXJkd2FyZSBy
ZWdpc3RlcnMuCi0gICAgICAgIG1fdXNlZFJlZ2lzdGVycy5leGNsdWRlKFJlZ2lzdGVyU2V0Ojpz
dGFja1JlZ2lzdGVycygpKTsKLSAgICAgICAgbV91c2VkUmVnaXN0ZXJzLmV4Y2x1ZGUoUmVnaXN0
ZXJTZXQ6OnJlc2VydmVkSGFyZHdhcmVSZWdpc3RlcnMoKSk7Ci0gICAgICAgIG1fdXNlZFJlZ2lz
dGVycy5leGNsdWRlKFJlZ2lzdGVyU2V0OjpjYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOwotICAgICAg
ICAKLSAgICAgICAgLy8gVGhlIHJldHVybiByZWdpc3RlciBkb2Vzbid0IG5lZWQgdG8gYmUgc2F2
ZWQuCi0gICAgICAgIGlmIChtX3JldHVyblJlZ2lzdGVyICE9IEludmFsaWRHUFJSZWcpCi0gICAg
ICAgICAgICBtX3VzZWRSZWdpc3RlcnMuY2xlYXIobV9yZXR1cm5SZWdpc3Rlcik7Ci0gICAgICAg
IAotICAgICAgICBzaXplX3Qgc3RhY2tCeXRlc05lZWRlZEZvclJldHVybkFkZHJlc3MgPSB3b3Jk
U2l6ZTsKLSAgICAgICAgCi0gICAgICAgIG1fb2Zmc2V0VG9TYXZpbmdBcmVhID0KLSAgICAgICAg
ICAgIChzdGQ6Om1heChtX251bUFyZ3MsIE5VTUJFUl9PRl9BUkdVTUVOVF9SRUdJU1RFUlMpIC0g
TlVNQkVSX09GX0FSR1VNRU5UX1JFR0lTVEVSUykgKiB3b3JkU2l6ZTsKLSAgICAgICAgCi0gICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IHN0ZDo6bWluKE5VTUJFUl9PRl9BUkdVTUVOVF9SRUdJU1RF
UlMsIG51bUFyZ3MpOyBpLS07KQotICAgICAgICAgICAgbV9hcmd1bWVudFJlZ2lzdGVycy5zZXQo
R1BSSW5mbzo6dG9Bcmd1bWVudFJlZ2lzdGVyKGkpKTsKLSAgICAgICAgbV9jYWxsaW5nQ29udmVu
dGlvblJlZ2lzdGVycy5tZXJnZShtX2FyZ3VtZW50UmVnaXN0ZXJzKTsKLSAgICAgICAgaWYgKHJl
dHVyblJlZ2lzdGVyICE9IEludmFsaWRHUFJSZWcpCi0gICAgICAgICAgICBtX2NhbGxpbmdDb252
ZW50aW9uUmVnaXN0ZXJzLnNldChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7Ci0gICAgICAgIG1f
Y2FsbGluZ0NvbnZlbnRpb25SZWdpc3RlcnMuZmlsdGVyKG1fdXNlZFJlZ2lzdGVycyk7Ci0gICAg
ICAgIAotICAgICAgICB1bnNpZ25lZCBudW1iZXJPZkNhbGxpbmdDb252ZW50aW9uUmVnaXN0ZXJz
ID0KLSAgICAgICAgICAgIG1fY2FsbGluZ0NvbnZlbnRpb25SZWdpc3RlcnMubnVtYmVyT2ZTZXRS
ZWdpc3RlcnMoKTsKLSAgICAgICAgCi0gICAgICAgIHNpemVfdCBvZmZzZXRUb1RodW5rU2F2aW5n
QXJlYSA9Ci0gICAgICAgICAgICBtX29mZnNldFRvU2F2aW5nQXJlYSArCi0gICAgICAgICAgICBu
dW1iZXJPZkNhbGxpbmdDb252ZW50aW9uUmVnaXN0ZXJzICogd29yZFNpemU7Ci0gICAgICAgIAot
ICAgICAgICBtX3N0YWNrQnl0ZXNOZWVkZWQgPQotICAgICAgICAgICAgb2Zmc2V0VG9UaHVua1Nh
dmluZ0FyZWEgKwotICAgICAgICAgICAgc3RhY2tCeXRlc05lZWRlZEZvclJldHVybkFkZHJlc3Mg
KwotICAgICAgICAgICAgKG1fdXNlZFJlZ2lzdGVycy5udW1iZXJPZlNldFJlZ2lzdGVycygpIC0g
bnVtYmVyT2ZDYWxsaW5nQ29udmVudGlvblJlZ2lzdGVycykgKiB3b3JkU2l6ZTsKLSAgICAgICAg
Ci0gICAgICAgIG1fc3RhY2tCeXRlc05lZWRlZCA9IChtX3N0YWNrQnl0ZXNOZWVkZWQgKyBzdGFj
a0FsaWdubWVudEJ5dGVzKCkgLSAxKSAmIH4oc3RhY2tBbGlnbm1lbnRCeXRlcygpIC0gMSk7Ci0g
ICAgICAgIAotICAgICAgICBtX2ppdC5zdWJQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIo
bV9zdGFja0J5dGVzTmVlZGVkKSwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7
Ci0gICAgICAgIAotICAgICAgICBtX3RodW5rU2F2ZVNldCA9IG1fdXNlZFJlZ2lzdGVyczsKLSAg
ICAgICAgCi0gICAgICAgIC8vIFRoaXMgcmVsaWVzIG9uIGFsbCBjYWxsaW5nIGNvbnZlbnRpb24g
cmVnaXN0ZXJzIGFsc28gYmVpbmcgdGVtcCByZWdpc3RlcnMuCi0gICAgICAgIHVuc2lnbmVkIHN0
YWNrSW5kZXggPSAwOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBHUFJJbmZvOjpudW1iZXJP
ZlJlZ2lzdGVyczsgaS0tOykgewotICAgICAgICAgICAgR1BSUmVnIHJlZyA9IEdQUkluZm86OnRv
UmVnaXN0ZXIoaSk7Ci0gICAgICAgICAgICBpZiAoIW1fY2FsbGluZ0NvbnZlbnRpb25SZWdpc3Rl
cnMuZ2V0KHJlZykpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBtX2pp
dC5zdG9yZVB0cihyZWcsIENDYWxsSGVscGVyczo6QWRkcmVzcyhDQ2FsbEhlbHBlcnM6OnN0YWNr
UG9pbnRlclJlZ2lzdGVyLCBtX29mZnNldFRvU2F2aW5nQXJlYSArIChzdGFja0luZGV4KyspICog
d29yZFNpemUpKTsKLSAgICAgICAgICAgIG1fdGh1bmtTYXZlU2V0LmNsZWFyKHJlZyk7Ci0gICAg
ICAgIH0KK1Nsb3dQYXRoQ2FsbENvbnRleHQ6OlNsb3dQYXRoQ2FsbENvbnRleHQoCisgICAgUmVn
aXN0ZXJTZXQgdXNlZFJlZ2lzdGVycywgQ0NhbGxIZWxwZXJzJiBqaXQsIHVuc2lnbmVkIG51bUFy
Z3MsIEdQUlJlZyByZXR1cm5SZWdpc3RlcikKKyAgICA6IG1faml0KGppdCkKKyAgICAsIG1fbnVt
QXJncyhudW1BcmdzKQorICAgICwgbV9yZXR1cm5SZWdpc3RlcihyZXR1cm5SZWdpc3RlcikKK3sK
KyAgICAvLyBXZSBkb24ndCBjYXJlIHRoYXQgeW91J3JlIHVzaW5nIGNhbGxlZS1zYXZlLCBzdGFj
aywgb3IgaGFyZHdhcmUgcmVnaXN0ZXJzLgorICAgIHVzZWRSZWdpc3RlcnMuZXhjbHVkZShSZWdp
c3RlclNldDo6c3RhY2tSZWdpc3RlcnMoKSk7CisgICAgdXNlZFJlZ2lzdGVycy5leGNsdWRlKFJl
Z2lzdGVyU2V0OjpyZXNlcnZlZEhhcmR3YXJlUmVnaXN0ZXJzKCkpOworICAgIHVzZWRSZWdpc3Rl
cnMuZXhjbHVkZShSZWdpc3RlclNldDo6Y2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKICAgICAgICAg
Ci0gICAgICAgIG1fb2Zmc2V0ID0gb2Zmc2V0VG9UaHVua1NhdmluZ0FyZWE7Ci0gICAgfQotICAg
IAotICAgIH5DYWxsQ29udGV4dCgpCi0gICAgewotICAgICAgICBpZiAobV9yZXR1cm5SZWdpc3Rl
ciAhPSBJbnZhbGlkR1BSUmVnKQotICAgICAgICAgICAgbV9qaXQubW92ZShHUFJJbmZvOjpyZXR1
cm5WYWx1ZUdQUiwgbV9yZXR1cm5SZWdpc3Rlcik7Ci0gICAgICAgIAotICAgICAgICB1bnNpZ25l
ZCBzdGFja0luZGV4ID0gMDsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gR1BSSW5mbzo6bnVt
YmVyT2ZSZWdpc3RlcnM7IGktLTspIHsKLSAgICAgICAgICAgIEdQUlJlZyByZWcgPSBHUFJJbmZv
Ojp0b1JlZ2lzdGVyKGkpOwotICAgICAgICAgICAgaWYgKCFtX2NhbGxpbmdDb252ZW50aW9uUmVn
aXN0ZXJzLmdldChyZWcpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAg
bV9qaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoQ0NhbGxIZWxwZXJzOjpzdGFja1Bv
aW50ZXJSZWdpc3RlciwgbV9vZmZzZXRUb1NhdmluZ0FyZWEgKyAoc3RhY2tJbmRleCsrKSAqIHdv
cmRTaXplKSwgcmVnKTsKLSAgICAgICAgfQorICAgIC8vIFRoZSByZXR1cm4gcmVnaXN0ZXIgZG9l
c24ndCBuZWVkIHRvIGJlIHNhdmVkLgorICAgIGlmIChtX3JldHVyblJlZ2lzdGVyICE9IEludmFs
aWRHUFJSZWcpCisgICAgICAgIHVzZWRSZWdpc3RlcnMuY2xlYXIobV9yZXR1cm5SZWdpc3Rlcik7
CiAgICAgICAgIAotICAgICAgICBtX2ppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
MzIobV9zdGFja0J5dGVzTmVlZGVkKSwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rl
cik7Ci0gICAgfQotICAgIAotICAgIFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3RlcnMoKSBjb25zdAot
ICAgIHsKLSAgICAgICAgcmV0dXJuIG1fdGh1bmtTYXZlU2V0OwotICAgIH0KLSAgICAKLSAgICBw
dHJkaWZmX3Qgb2Zmc2V0KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX29mZnNldDsK
KyAgICBzaXplX3Qgc3RhY2tCeXRlc05lZWRlZEZvclJldHVybkFkZHJlc3MgPSB3b3JkU2l6ZTsK
KyAgICAgICAgCisgICAgbV9vZmZzZXRUb1NhdmluZ0FyZWEgPQorICAgICAgICAoc3RkOjptYXgo
bV9udW1BcmdzLCBOVU1CRVJfT0ZfQVJHVU1FTlRfUkVHSVNURVJTKSAtIE5VTUJFUl9PRl9BUkdV
TUVOVF9SRUdJU1RFUlMpICogd29yZFNpemU7CisgICAgICAgIAorICAgIGZvciAodW5zaWduZWQg
aSA9IHN0ZDo6bWluKE5VTUJFUl9PRl9BUkdVTUVOVF9SRUdJU1RFUlMsIG51bUFyZ3MpOyBpLS07
KQorICAgICAgICBtX2FyZ3VtZW50UmVnaXN0ZXJzLnNldChHUFJJbmZvOjp0b0FyZ3VtZW50UmVn
aXN0ZXIoaSkpOworICAgIG1fY2FsbGluZ0NvbnZlbnRpb25SZWdpc3RlcnMubWVyZ2UobV9hcmd1
bWVudFJlZ2lzdGVycyk7CisgICAgaWYgKHJldHVyblJlZ2lzdGVyICE9IEludmFsaWRHUFJSZWcp
CisgICAgICAgIG1fY2FsbGluZ0NvbnZlbnRpb25SZWdpc3RlcnMuc2V0KEdQUkluZm86OnJldHVy
blZhbHVlR1BSKTsKKyAgICBtX2NhbGxpbmdDb252ZW50aW9uUmVnaXN0ZXJzLmZpbHRlcih1c2Vk
UmVnaXN0ZXJzKTsKKyAgICAgICAgCisgICAgdW5zaWduZWQgbnVtYmVyT2ZDYWxsaW5nQ29udmVu
dGlvblJlZ2lzdGVycyA9CisgICAgICAgIG1fY2FsbGluZ0NvbnZlbnRpb25SZWdpc3RlcnMubnVt
YmVyT2ZTZXRSZWdpc3RlcnMoKTsKKyAgICAgICAgCisgICAgc2l6ZV90IG9mZnNldFRvVGh1bmtT
YXZpbmdBcmVhID0KKyAgICAgICAgbV9vZmZzZXRUb1NhdmluZ0FyZWEgKworICAgICAgICBudW1i
ZXJPZkNhbGxpbmdDb252ZW50aW9uUmVnaXN0ZXJzICogd29yZFNpemU7CisgICAgICAgIAorICAg
IG1fc3RhY2tCeXRlc05lZWRlZCA9CisgICAgICAgIG9mZnNldFRvVGh1bmtTYXZpbmdBcmVhICsK
KyAgICAgICAgc3RhY2tCeXRlc05lZWRlZEZvclJldHVybkFkZHJlc3MgKworICAgICAgICAodXNl
ZFJlZ2lzdGVycy5udW1iZXJPZlNldFJlZ2lzdGVycygpIC0gbnVtYmVyT2ZDYWxsaW5nQ29udmVu
dGlvblJlZ2lzdGVycykgKiB3b3JkU2l6ZTsKKyAgICAgICAgCisgICAgbV9zdGFja0J5dGVzTmVl
ZGVkID0gKG1fc3RhY2tCeXRlc05lZWRlZCArIHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSAtIDEpICYg
fihzdGFja0FsaWdubWVudEJ5dGVzKCkgLSAxKTsKKyAgICAgICAgCisgICAgbV9qaXQuc3ViUHRy
KENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKG1fc3RhY2tCeXRlc05lZWRlZCksIENDYWxsSGVs
cGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworCisgICAgbV90aHVua1NhdmVTZXQgPSB1c2Vk
UmVnaXN0ZXJzOworICAgICAgICAKKyAgICAvLyBUaGlzIHJlbGllcyBvbiBhbGwgY2FsbGluZyBj
b252ZW50aW9uIHJlZ2lzdGVycyBhbHNvIGJlaW5nIHRlbXAgcmVnaXN0ZXJzLgorICAgIHVuc2ln
bmVkIHN0YWNrSW5kZXggPSAwOworICAgIGZvciAodW5zaWduZWQgaSA9IEdQUkluZm86Om51bWJl
ck9mUmVnaXN0ZXJzOyBpLS07KSB7CisgICAgICAgIEdQUlJlZyByZWcgPSBHUFJJbmZvOjp0b1Jl
Z2lzdGVyKGkpOworICAgICAgICBpZiAoIW1fY2FsbGluZ0NvbnZlbnRpb25SZWdpc3RlcnMuZ2V0
KHJlZykpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgbV9qaXQuc3RvcmVQdHIocmVn
LCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rl
ciwgbV9vZmZzZXRUb1NhdmluZ0FyZWEgKyAoc3RhY2tJbmRleCsrKSAqIHdvcmRTaXplKSk7Cisg
ICAgICAgIG1fdGh1bmtTYXZlU2V0LmNsZWFyKHJlZyk7CiAgICAgfQorICAgICAgICAKKyAgICBt
X29mZnNldCA9IG9mZnNldFRvVGh1bmtTYXZpbmdBcmVhOworfQogICAgIAotICAgIFNsb3dQYXRo
Q2FsbEtleSBrZXlXaXRoVGFyZ2V0KHZvaWQqIGNhbGxUYXJnZXQpIGNvbnN0Ci0gICAgewotICAg
ICAgICByZXR1cm4gU2xvd1BhdGhDYWxsS2V5KHVzZWRSZWdpc3RlcnMoKSwgY2FsbFRhcmdldCwg
bV9hcmd1bWVudFJlZ2lzdGVycywgb2Zmc2V0KCkpOwotICAgIH0KK1Nsb3dQYXRoQ2FsbENvbnRl
eHQ6On5TbG93UGF0aENhbGxDb250ZXh0KCkKK3sKKyAgICBpZiAobV9yZXR1cm5SZWdpc3RlciAh
PSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBtX2ppdC5tb3ZlKEdQUkluZm86OnJldHVyblZhbHVl
R1BSLCBtX3JldHVyblJlZ2lzdGVyKTsKICAgICAKLSAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBt
YWtlQ2FsbCh2b2lkKiBjYWxsVGFyZ2V0LCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QqIGV4Y2Vw
dGlvblRhcmdldCkKLSAgICB7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIHJlc3VsdCA9
IG1faml0LmNhbGwoKTsKLSAgICAgICAgbV9zdGF0ZS5maW5hbGl6ZXItPnNsb3dQYXRoQ2FsbHMu
YXBwZW5kKFNsb3dQYXRoQ2FsbCgKLSAgICAgICAgICAgIHJlc3VsdCwga2V5V2l0aFRhcmdldChj
YWxsVGFyZ2V0KSkpOwotICAgICAgICBpZiAoZXhjZXB0aW9uVGFyZ2V0KQotICAgICAgICAgICAg
ZXhjZXB0aW9uVGFyZ2V0LT5hcHBlbmQobV9qaXQuZW1pdEV4Y2VwdGlvbkNoZWNrKCkpOwotICAg
ICAgICByZXR1cm4gcmVzdWx0OworICAgIHVuc2lnbmVkIHN0YWNrSW5kZXggPSAwOworICAgIGZv
ciAodW5zaWduZWQgaSA9IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyBpLS07KSB7CisgICAg
ICAgIEdQUlJlZyByZWcgPSBHUFJJbmZvOjp0b1JlZ2lzdGVyKGkpOworICAgICAgICBpZiAoIW1f
Y2FsbGluZ0NvbnZlbnRpb25SZWdpc3RlcnMuZ2V0KHJlZykpCisgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgbV9qaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoQ0NhbGxIZWxw
ZXJzOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgbV9vZmZzZXRUb1NhdmluZ0FyZWEgKyAoc3RhY2tJ
bmRleCsrKSAqIHdvcmRTaXplKSwgcmVnKTsKICAgICB9CiAgICAgCi1wcml2YXRlOgotICAgIFN0
YXRlJiBtX3N0YXRlOwotICAgIFJlZ2lzdGVyU2V0IG1fdXNlZFJlZ2lzdGVyczsKLSAgICBSZWdp
c3RlclNldCBtX2FyZ3VtZW50UmVnaXN0ZXJzOwotICAgIFJlZ2lzdGVyU2V0IG1fY2FsbGluZ0Nv
bnZlbnRpb25SZWdpc3RlcnM7Ci0gICAgQ0NhbGxIZWxwZXJzJiBtX2ppdDsKLSAgICB1bnNpZ25l
ZCBtX251bUFyZ3M7Ci0gICAgR1BSUmVnIG1fcmV0dXJuUmVnaXN0ZXI7Ci0gICAgc2l6ZV90IG1f
b2Zmc2V0VG9TYXZpbmdBcmVhOwotICAgIHNpemVfdCBtX3N0YWNrQnl0ZXNOZWVkZWQ7Ci0gICAg
UmVnaXN0ZXJTZXQgbV90aHVua1NhdmVTZXQ7Ci0gICAgcHRyZGlmZl90IG1fb2Zmc2V0OwotfTsK
KyAgICBtX2ppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIobV9zdGFja0J5dGVz
TmVlZGVkKSwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7Cit9CiAKLX0gLy8g
YW5vbnltb3VzIG5hbWVzcGFjZQorU2xvd1BhdGhDYWxsS2V5IFNsb3dQYXRoQ2FsbENvbnRleHQ6
OmtleVdpdGhUYXJnZXQodm9pZCogY2FsbFRhcmdldCkgY29uc3QKK3sKKyAgICByZXR1cm4gU2xv
d1BhdGhDYWxsS2V5KG1fdGh1bmtTYXZlU2V0LCBjYWxsVGFyZ2V0LCBtX2FyZ3VtZW50UmVnaXN0
ZXJzLCBtX29mZnNldCk7Cit9CisKK1Nsb3dQYXRoQ2FsbCBTbG93UGF0aENhbGxDb250ZXh0Ojpt
YWtlQ2FsbCh2b2lkKiBjYWxsVGFyZ2V0KQoreworICAgIHJldHVybiBTbG93UGF0aENhbGwobV9q
aXQuY2FsbCgpLCBrZXlXaXRoVGFyZ2V0KGNhbGxUYXJnZXQpKTsKK30KIAogdm9pZCBzdG9yZUNv
ZGVPcmlnaW4oU3RhdGUmIHN0YXRlLCBDQ2FsbEhlbHBlcnMmIGppdCwgQ29kZU9yaWdpbiBjb2Rl
T3JpZ2luKQogewpAQCAtMTczLDE3ICsxMzQsMjAgQEAgdm9pZCBzdG9yZUNvZGVPcmlnaW4oU3Rh
dGUmIHN0YXRlLCBDQ2FsbAogICAgICAgICBDQ2FsbEhlbHBlcnM6OnRhZ0ZvcihzdGF0aWNfY2Fz
dDxWaXJ0dWFsUmVnaXN0ZXI+KEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpKSk7CiB9CiAKK3ZvaWQg
cmVnaXN0ZXJTbG93UGF0aENhbGwoU3RhdGUmIHN0YXRlLCBTbG93UGF0aENhbGwgY2FsbCkKK3sK
KyAgICBzdGF0ZS5maW5hbGl6ZXItPnNsb3dQYXRoQ2FsbHMuYXBwZW5kKGNhbGwpOworfQorCiBN
YWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKAogICAgIFN0YXRlJiBzdGF0ZSwgY29u
c3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsIENDYWxsSGVscGVycyYgaml0LAogICAgIENv
ZGVPcmlnaW4gY29kZU9yaWdpbiwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0KiBleGNlcHRpb25U
YXJnZXQsCiAgICAgSl9KSVRPcGVyYXRpb25fRVNzaUNJIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3Vs
dCwgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLAogICAgIEdQUlJlZyBvYmplY3QsIGNvbnN0
IFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCiB7Ci0gICAgc3RvcmVDb2RlT3JpZ2luKHN0YXRlLCBq
aXQsIGNvZGVPcmlnaW4pOwotICAgIENhbGxDb250ZXh0IGNvbnRleHQoc3RhdGUsIHVzZWRSZWdp
c3RlcnMsIGppdCwgNCwgcmVzdWx0KTsKLSAgICBqaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0
YXRlKAorICAgIHJldHVybiBjYWxsT3BlcmF0aW9uKAorICAgICAgICBzdGF0ZSwgdXNlZFJlZ2lz
dGVycywgaml0LCBjb2RlT3JpZ2luLCBleGNlcHRpb25UYXJnZXQsIEZ1bmN0aW9uUHRyKG9wZXJh
dGlvbiksIHJlc3VsdCwKICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHN0dWJJ
bmZvKSwgb2JqZWN0LCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIodWlkKSk7Ci0gICAgcmV0
dXJuIGNvbnRleHQubWFrZUNhbGwoYml0d2lzZV9jYXN0PHZvaWQqPihvcGVyYXRpb24pLCBleGNl
cHRpb25UYXJnZXQpOwogfQogCiBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKApA
QCAtMTkyLDEyICsxNTYsOSBAQCBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKAog
ICAgIEpfSklUT3BlcmF0aW9uX0VTc2lKSSBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIFN0cnVj
dHVyZVN0dWJJbmZvKiBzdHViSW5mbywKICAgICBHUFJSZWcgb2JqZWN0LCBVbmlxdWVkU3RyaW5n
SW1wbCogdWlkKQogewotICAgIHN0b3JlQ29kZU9yaWdpbihzdGF0ZSwgaml0LCBjb2RlT3JpZ2lu
KTsKLSAgICBDYWxsQ29udGV4dCBjb250ZXh0KHN0YXRlLCB1c2VkUmVnaXN0ZXJzLCBqaXQsIDQs
IHJlc3VsdCk7Ci0gICAgaml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZSgKLSAgICAgICAg
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHN0dWJJbmZvKSwgb2JqZWN0LAotICAgICAgICBD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIodWlkKSk7Ci0gICAgcmV0dXJuIGNvbnRleHQubWFr
ZUNhbGwoYml0d2lzZV9jYXN0PHZvaWQqPihvcGVyYXRpb24pLCBleGNlcHRpb25UYXJnZXQpOwor
ICAgIHJldHVybiBjYWxsT3BlcmF0aW9uKAorICAgICAgICBzdGF0ZSwgdXNlZFJlZ2lzdGVycywg
aml0LCBjb2RlT3JpZ2luLCBleGNlcHRpb25UYXJnZXQsIEZ1bmN0aW9uUHRyKG9wZXJhdGlvbiks
IHJlc3VsdCwKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHN0dWJJbmZvKSwg
b2JqZWN0LCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIodWlkKSk7CiB9CiAKIE1hY3JvQXNz
ZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oCkBAIC0yMDYsMTIgKzE2Nyw5IEBAIE1hY3JvQXNz
ZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oCiAgICAgVl9KSVRPcGVyYXRpb25fRVNzaUpKSSBv
cGVyYXRpb24sIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgR1BSUmVnIHZhbHVlLAogICAg
IEdQUlJlZyBvYmplY3QsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCiB7Ci0gICAgc3RvcmVDb2Rl
T3JpZ2luKHN0YXRlLCBqaXQsIGNvZGVPcmlnaW4pOwotICAgIENhbGxDb250ZXh0IGNvbnRleHQo
c3RhdGUsIHVzZWRSZWdpc3RlcnMsIGppdCwgNSwgSW52YWxpZEdQUlJlZyk7Ci0gICAgaml0LnNl
dHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZSgKLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tUHRyKHN0dWJJbmZvKSwgdmFsdWUsIG9iamVjdCwKLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tUHRyKHVpZCkpOwotICAgIHJldHVybiBjb250ZXh0Lm1ha2VDYWxsKGJpdHdpc2Vf
Y2FzdDx2b2lkKj4ob3BlcmF0aW9uKSwgZXhjZXB0aW9uVGFyZ2V0KTsKKyAgICByZXR1cm4gY2Fs
bE9wZXJhdGlvbigKKyAgICAgICAgc3RhdGUsIHVzZWRSZWdpc3RlcnMsIGppdCwgY29kZU9yaWdp
biwgZXhjZXB0aW9uVGFyZ2V0LCBGdW5jdGlvblB0cihvcGVyYXRpb24pLCBJbnZhbGlkR1BSUmVn
LAorICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoc3R1YkluZm8pLCB2YWx1ZSwg
b2JqZWN0LCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIodWlkKSk7CiB9CiAKIH0gfSAvLyBu
YW1lc3BhY2UgSlNDOjpGVEwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU2xv
d1BhdGhDYWxsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExT
bG93UGF0aENhbGwuaAkocmV2aXNpb24gMTkwNzQ5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExTbG93UGF0aENhbGwuaAkod29ya2luZyBjb3B5KQpAQCAtNTUsNyArNTUsNTcgQEAg
cHJpdmF0ZToKICAgICBTbG93UGF0aENhbGxLZXkgbV9rZXk7CiB9OwogCisvLyBUaGlzIHdpbGwg
YmUgYW4gUkFJSSB0aGluZ3kgdGhhdCB3aWxsIHNldCB1cCB0aGUgbmVjZXNzYXJ5IHN0YWNrIHNp
emVzIGFuZCBvZmZzZXRzIGFuZCBzdWNoLgorY2xhc3MgU2xvd1BhdGhDYWxsQ29udGV4dCB7Citw
dWJsaWM6CisgICAgU2xvd1BhdGhDYWxsQ29udGV4dChSZWdpc3RlclNldCB1c2VkUmVnaXN0ZXJz
LCBDQ2FsbEhlbHBlcnMmLCB1bnNpZ25lZCBudW1BcmdzLCBHUFJSZWcgcmV0dXJuUmVnaXN0ZXIp
OworICAgIH5TbG93UGF0aENhbGxDb250ZXh0KCk7CisKKyAgICBTbG93UGF0aENhbGwgbWFrZUNh
bGwodm9pZCogY2FsbFRhcmdldCk7CisKK3ByaXZhdGU6CisgICAgU2xvd1BhdGhDYWxsS2V5IGtl
eVdpdGhUYXJnZXQodm9pZCogY2FsbFRhcmdldCkgY29uc3Q7CisgICAgCisgICAgUmVnaXN0ZXJT
ZXQgbV9hcmd1bWVudFJlZ2lzdGVyczsKKyAgICBSZWdpc3RlclNldCBtX2NhbGxpbmdDb252ZW50
aW9uUmVnaXN0ZXJzOworICAgIENDYWxsSGVscGVycyYgbV9qaXQ7CisgICAgdW5zaWduZWQgbV9u
dW1BcmdzOworICAgIEdQUlJlZyBtX3JldHVyblJlZ2lzdGVyOworICAgIHNpemVfdCBtX29mZnNl
dFRvU2F2aW5nQXJlYTsKKyAgICBzaXplX3QgbV9zdGFja0J5dGVzTmVlZGVkOworICAgIFJlZ2lz
dGVyU2V0IG1fdGh1bmtTYXZlU2V0OworICAgIHB0cmRpZmZfdCBtX29mZnNldDsKK307CisKK3Rl
bXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50VHlwZXM+CitTbG93UGF0aENhbGwgY2FsbE9wZXJh
dGlvbigKKyAgICBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywgQ0NhbGxIZWxwZXJz
JiBqaXQsIENDYWxsSGVscGVyczo6SnVtcExpc3QqIGV4Y2VwdGlvblRhcmdldCwKKyAgICBGdW5j
dGlvblB0ciBmdW5jdGlvbiwgR1BSUmVnIHJlc3VsdCwgQXJndW1lbnRUeXBlcy4uLiBhcmd1bWVu
dHMpCit7CisgICAgU2xvd1BhdGhDYWxsIHJlc3VsdDsKKyAgICB7CisgICAgICAgIFNsb3dQYXRo
Q2FsbENvbnRleHQgY29udGV4dCh1c2VkUmVnaXN0ZXJzLCBqaXQsIHNpemVvZi4uLihBcmd1bWVu
dFR5cGVzKSArIDEsIHJlc3VsdCk7CisgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVj
U3RhdGUoYXJndW1lbnRzLi4uKTsKKyAgICAgICAgcmVzdWx0ID0gY29udGV4dC5tYWtlQ2FsbChm
dW5jdGlvbi52YWx1ZSgpKTsKKyAgICB9CisgICAgaWYgKGV4Y2VwdGlvblRhcmdldCkKKyAgICAg
ICAgZXhjZXB0aW9uVGFyZ2V0LT5hcHBlbmQoaml0LmVtaXRFeGNlcHRpb25DaGVjaygpKTsKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCiB2b2lkIHN0b3JlQ29kZU9yaWdpbihTdGF0ZSYsIENDYWxs
SGVscGVycyYsIENvZGVPcmlnaW4pOwordm9pZCByZWdpc3RlclNsb3dQYXRoQ2FsbChTdGF0ZSYs
IFNsb3dQYXRoQ2FsbCk7CisKK3RlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50VHlwZXM+CitN
YWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKAorICAgIFN0YXRlJiBzdGF0ZSwgY29u
c3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsIENDYWxsSGVscGVycyYgaml0LCBDb2RlT3Jp
Z2luIGNvZGVPcmlnaW4sCisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCogZXhjZXB0aW9uVGFy
Z2V0LCBGdW5jdGlvblB0ciBmdW5jdGlvbiwgR1BSUmVnIHJlc3VsdCwgQXJndW1lbnRUeXBlcy4u
LiBhcmd1bWVudHMpCit7CisgICAgc3RvcmVDb2RlT3JpZ2luKHN0YXRlLCBqaXQsIGNvZGVPcmln
aW4pOworICAgIFNsb3dQYXRoQ2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbih1c2VkUmVnaXN0ZXJz
LCBqaXQsIGV4Y2VwdGlvblRhcmdldCwgZnVuY3Rpb24sIHJlc3VsdCwgYXJndW1lbnRzLi4uKTsK
KyAgICByZWdpc3RlclNsb3dQYXRoQ2FsbChzdGF0ZSwgY2FsbCk7CisgICAgcmV0dXJuIGNhbGwu
Y2FsbCgpOworfQogCiBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKAogICAgIFN0
YXRlJiwgY29uc3QgUmVnaXN0ZXJTZXQmLCBDQ2FsbEhlbHBlcnMmLCBDb2RlT3JpZ2luLCBDQ2Fs
bEhlbHBlcnM6Okp1bXBMaXN0KiwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
U3RhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0YXRl
LmgJKHJldmlzaW9uIDE5MDc0OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3Rh
dGUuaAkod29ya2luZyBjb3B5KQpAQCAtNzgsNiArNzgsNyBAQCBwdWJsaWM6CiAgICAgU2VnbWVu
dGVkVmVjdG9yPEdldEJ5SWREZXNjcmlwdG9yPiBnZXRCeUlkczsKICAgICBTZWdtZW50ZWRWZWN0
b3I8UHV0QnlJZERlc2NyaXB0b3I+IHB1dEJ5SWRzOwogICAgIFNlZ21lbnRlZFZlY3RvcjxDaGVj
a0luRGVzY3JpcHRvcj4gY2hlY2tJbnM7CisgICAgU2VnbWVudGVkVmVjdG9yPExhenlTbG93UGF0
aERlc2NyaXB0b3I+IGxhenlTbG93UGF0aHM7CiAgICAgVmVjdG9yPEpTQ2FsbD4ganNDYWxsczsK
ICAgICBWZWN0b3I8SlNDYWxsVmFyYXJncz4ganNDYWxsVmFyYXJnc2VzOwogICAgIFZlY3RvcjxK
U1RhaWxDYWxsPiBqc1RhaWxDYWxsczsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1BhcmFsbGVsSGVs
cGVyUG9vbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvUGFyYWxsZWxIZWxwZXJQ
b29sLmNwcAkocmV2aXNpb24gMTkwNzQ5KQorKysgU291cmNlL1dURi93dGYvUGFyYWxsZWxIZWxw
ZXJQb29sLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMsNyArNTMsNyBAQCBQYXJhbGxlbEhlbHBl
ckNsaWVudDo6flBhcmFsbGVsSGVscGVyQ2xpCiAgICAgfQogfQogCi12b2lkIFBhcmFsbGVsSGVs
cGVyQ2xpZW50OjpzZXRUYXNrKFJlZlB0cjxTaGFyZWRUYXNrPiB0YXNrKQordm9pZCBQYXJhbGxl
bEhlbHBlckNsaWVudDo6c2V0VGFzayhSZWZQdHI8U2hhcmVkVGFzazx2b2lkKCk+PiB0YXNrKQog
ewogICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fcG9vbC0+bV9sb2NrKTsKICAgICBSRUxFQVNFX0FT
U0VSVCghbV90YXNrKTsKQEAgLTY5LDcgKzY5LDcgQEAgdm9pZCBQYXJhbGxlbEhlbHBlckNsaWVu
dDo6ZmluaXNoKCkKIAogdm9pZCBQYXJhbGxlbEhlbHBlckNsaWVudDo6ZG9Tb21lSGVscGluZygp
CiB7Ci0gICAgUmVmUHRyPFNoYXJlZFRhc2s+IHRhc2s7CisgICAgUmVmUHRyPFNoYXJlZFRhc2s8
dm9pZCgpPj4gdGFzazsKICAgICB7CiAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fcG9vbC0+
bV9sb2NrKTsKICAgICAgICAgdGFzayA9IGNsYWltVGFzayhsb2NrZXIpOwpAQCAtODAsNyArODAs
NyBAQCB2b2lkIFBhcmFsbGVsSGVscGVyQ2xpZW50Ojpkb1NvbWVIZWxwaW5nCiAgICAgcnVuVGFz
ayh0YXNrKTsKIH0KIAotdm9pZCBQYXJhbGxlbEhlbHBlckNsaWVudDo6cnVuVGFza0luUGFyYWxs
ZWwoUmVmUHRyPFNoYXJlZFRhc2s+IHRhc2spCit2b2lkIFBhcmFsbGVsSGVscGVyQ2xpZW50Ojpy
dW5UYXNrSW5QYXJhbGxlbChSZWZQdHI8U2hhcmVkVGFzazx2b2lkKCk+PiB0YXNrKQogewogICAg
IHNldFRhc2sodGFzayk7CiAgICAgZG9Tb21lSGVscGluZygpOwpAQCAtOTQsNyArOTQsNyBAQCB2
b2lkIFBhcmFsbGVsSGVscGVyQ2xpZW50OjpmaW5pc2goY29uc3QgCiAgICAgICAgIG1fcG9vbC0+
bV93b3JrQ29tcGxldGVDb25kaXRpb24ud2FpdChtX3Bvb2wtPm1fbG9jayk7CiB9CiAKLVJlZlB0
cjxTaGFyZWRUYXNrPiBQYXJhbGxlbEhlbHBlckNsaWVudDo6Y2xhaW1UYXNrKGNvbnN0IExvY2tI
b2xkZXImKQorUmVmUHRyPFNoYXJlZFRhc2s8dm9pZCgpPj4gUGFyYWxsZWxIZWxwZXJDbGllbnQ6
OmNsYWltVGFzayhjb25zdCBMb2NrSG9sZGVyJikKIHsKICAgICBpZiAoIW1fdGFzaykKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CkBAIC0xMDMsNyArMTAzLDcgQEAgUmVmUHRyPFNoYXJlZFRhc2s+
IFBhcmFsbGVsSGVscGVyQ2xpZW50OgogICAgIHJldHVybiBtX3Rhc2s7CiB9CiAKLXZvaWQgUGFy
YWxsZWxIZWxwZXJDbGllbnQ6OnJ1blRhc2soUmVmUHRyPFNoYXJlZFRhc2s+IHRhc2spCit2b2lk
IFBhcmFsbGVsSGVscGVyQ2xpZW50OjpydW5UYXNrKFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoKT4+
IHRhc2spCiB7CiAgICAgUkVMRUFTRV9BU1NFUlQobV9udW1BY3RpdmUpOwogICAgIFJFTEVBU0Vf
QVNTRVJUKHRhc2spOwpAQCAtMTUzLDcgKzE1Myw3IEBAIHZvaWQgUGFyYWxsZWxIZWxwZXJQb29s
OjplbnN1cmVUaHJlYWRzKHUKIHZvaWQgUGFyYWxsZWxIZWxwZXJQb29sOjpkb1NvbWVIZWxwaW5n
KCkKIHsKICAgICBQYXJhbGxlbEhlbHBlckNsaWVudCogY2xpZW50OwotICAgIFJlZlB0cjxTaGFy
ZWRUYXNrPiB0YXNrOworICAgIFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoKT4+IHRhc2s7CiAgICAg
ewogICAgICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2xvY2spOwogICAgICAgICBjbGllbnQgPSBn
ZXRDbGllbnRXaXRoVGFzayhsb2NrZXIpOwpAQCAtMTgyLDcgKzE4Miw3IEBAIHZvaWQgUGFyYWxs
ZWxIZWxwZXJQb29sOjpoZWxwZXJUaHJlYWRCb2QKIHsKICAgICBmb3IgKDs7KSB7CiAgICAgICAg
IFBhcmFsbGVsSGVscGVyQ2xpZW50KiBjbGllbnQ7Ci0gICAgICAgIFJlZlB0cjxTaGFyZWRUYXNr
PiB0YXNrOworICAgICAgICBSZWZQdHI8U2hhcmVkVGFzazx2b2lkKCk+PiB0YXNrOwogCiAgICAg
ICAgIHsKICAgICAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7CkluZGV4OiBTb3Vy
Y2UvV1RGL3d0Zi9QYXJhbGxlbEhlbHBlclBvb2wuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RG
L3d0Zi9QYXJhbGxlbEhlbHBlclBvb2wuaAkocmV2aXNpb24gMTkwNzQ5KQorKysgU291cmNlL1dU
Ri93dGYvUGFyYWxsZWxIZWxwZXJQb29sLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzMCwxMiArMTMw
LDEyIEBAIHB1YmxpYzoKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgUGFyYWxsZWxIZWxwZXJDbGll
bnQoUmVmUHRyPFBhcmFsbGVsSGVscGVyUG9vbD4pOwogICAgIFdURl9FWFBPUlRfUFJJVkFURSB+
UGFyYWxsZWxIZWxwZXJDbGllbnQoKTsKIAotICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIHNl
dFRhc2soUmVmUHRyPFNoYXJlZFRhc2s+KTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBz
ZXRUYXNrKFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoKT4+KTsKIAogICAgIHRlbXBsYXRlPHR5cGVu
YW1lIEZ1bmN0b3I+CiAgICAgdm9pZCBzZXRGdW5jdGlvbihjb25zdCBGdW5jdG9yJiBmdW5jdG9y
KQogICAgIHsKLSAgICAgICAgc2V0VGFzayhjcmVhdGVTaGFyZWRUYXNrKGZ1bmN0b3IpKTsKKyAg
ICAgICAgc2V0VGFzayhjcmVhdGVTaGFyZWRUYXNrPHZvaWQoKT4oZnVuY3RvcikpOwogICAgIH0K
ICAgICAKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBmaW5pc2goKTsKQEAgLTE0Niw3ICsx
NDYsNyBAQCBwdWJsaWM6CiAgICAgLy8gY2xpZW50LT5zZXRUYXNrKHRhc2spOwogICAgIC8vIGNs
aWVudC0+ZG9Tb21lSGVscGluZygpOwogICAgIC8vIGNsaWVudC0+ZmluaXNoKCk7Ci0gICAgV1RG
X0VYUE9SVF9QUklWQVRFIHZvaWQgcnVuVGFza0luUGFyYWxsZWwoUmVmUHRyPFNoYXJlZFRhc2s+
KTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBydW5UYXNrSW5QYXJhbGxlbChSZWZQdHI8
U2hhcmVkVGFzazx2b2lkKCk+Pik7CiAKICAgICAvLyBFcXVpdmFsZW50IHRvOgogICAgIC8vIGNs
aWVudC0+c2V0RnVuY3Rpb24oZnVuY3Rvcik7CkBAIC0xNTUsNyArMTU1LDcgQEAgcHVibGljOgog
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CiAgICAgdm9pZCBydW5GdW5jdGlvbkluUGFy
YWxsZWwoY29uc3QgRnVuY3RvciYgZnVuY3RvcikKICAgICB7Ci0gICAgICAgIHJ1blRhc2tJblBh
cmFsbGVsKGNyZWF0ZVNoYXJlZFRhc2soZnVuY3RvcikpOworICAgICAgICBydW5UYXNrSW5QYXJh
bGxlbChjcmVhdGVTaGFyZWRUYXNrPHZvaWQoKT4oZnVuY3RvcikpOwogICAgIH0KIAogICAgIFBh
cmFsbGVsSGVscGVyUG9vbCYgcG9vbCgpIHsgcmV0dXJuICptX3Bvb2w7IH0KQEAgLTE2NSwxMSAr
MTY1LDExIEBAIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIFBhcmFsbGVsSGVscGVyUG9vbDsK
IAogICAgIHZvaWQgZmluaXNoKGNvbnN0IExvY2tIb2xkZXImKTsKLSAgICBSZWZQdHI8U2hhcmVk
VGFzaz4gY2xhaW1UYXNrKGNvbnN0IExvY2tIb2xkZXImKTsKLSAgICB2b2lkIHJ1blRhc2soUmVm
UHRyPFNoYXJlZFRhc2s+KTsKKyAgICBSZWZQdHI8U2hhcmVkVGFzazx2b2lkKCk+PiBjbGFpbVRh
c2soY29uc3QgTG9ja0hvbGRlciYpOworICAgIHZvaWQgcnVuVGFzayhSZWZQdHI8U2hhcmVkVGFz
azx2b2lkKCk+Pik7CiAgICAgCiAgICAgUmVmUHRyPFBhcmFsbGVsSGVscGVyUG9vbD4gbV9wb29s
OwotICAgIFJlZlB0cjxTaGFyZWRUYXNrPiBtX3Rhc2s7CisgICAgUmVmUHRyPFNoYXJlZFRhc2s8
dm9pZCgpPj4gbV90YXNrOwogICAgIHVuc2lnbmVkIG1fbnVtQWN0aXZlIHsgMCB9OwogfTsKIApJ
bmRleDogU291cmNlL1dURi93dGYvU2hhcmVkVGFzay5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
VEYvd3RmL1NoYXJlZFRhc2suaAkocmV2aXNpb24gMTkwNzQ5KQorKysgU291cmNlL1dURi93dGYv
U2hhcmVkVGFzay5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSwxMyArNDEsMTMgQEAgbmFtZXNwYWNl
IFdURiB7CiAvLwogLy8gSGVyZSdzIGFuIGV4YW1wbGUgb2YgaG93IFNoYXJlZFRhc2sgY2FuIGJl
IGJldHRlciB0aGFuIHN0ZDo6ZnVuY3Rpb24uIElmIHlvdSBkbzoKIC8vCi0vLyBzdGQ6OmZ1bmN0
aW9uIGEgPSBiOworLy8gc3RkOjpmdW5jdGlvbjxpbnQoZG91YmxlKT4gYSA9IGI7CiAvLwogLy8g
VGhlbiAiYSIgd2lsbCBnZXQgaXRzIG93biBjb3B5IG9mIGFsbCBjYXB0dXJlZCBieS12YWx1ZSB2
YXJpYWJsZXMuIFRoZSBhY3Qgb2YgY29weWluZyBtYXkKIC8vIHJlcXVpcmUgY2FsbHMgdG8gc3lz
dGVtIG1hbGxvYywgYW5kIGl0IG1heSBiZSBsaW5lYXIgdGltZSBpbiB0aGUgdG90YWwgc2l6ZSBv
ZiBjYXB0dXJlZAogLy8gdmFyaWFibGVzLiBPbiB0aGUgb3RoZXIgaGFuZCwgaWYgeW91IGRvOgog
Ly8KLS8vIFJlZlB0cjxTaGFyZWRUYXNrPiBhID0gYjsKKy8vIFJlZlB0cjxTaGFyZWRUYXNrPGlu
dChkb3VibGUpPiBhID0gYjsKIC8vCiAvLyBUaGVuICJhIiB3aWxsIHBvaW50IHRvIHRoZSBzYW1l
IHRhc2sgYXMgYiwgYW5kIHRoZSBvbmx5IHdvcmsgaW52b2x2ZWQgaXMgdGhlIENBUyB0byBpbmNy
ZWFzZSB0aGUKIC8vIHJlZmVyZW5jZSBjb3VudC4KQEAgLTU4LDE4ICs1OCwyMSBAQCBuYW1lc3Bh
Y2UgV1RGIHsKIC8vIGNyZWF0ZVNoYXJlZFRhc2soKSwgYmVsb3cpLiBCdXQgU2hhcmVkVGFzayBh
bHNvIGFsbG93cyB5b3UgdG8gY3JlYXRlIHlvdXIgb3duIHN1YmNsYXNzIGFuZCBwdXQKIC8vIHN0
YXRlIGluIG1lbWJlciBmaWVsZHMuIFRoaXMgY2FuIGJlIG1vcmUgbmF0dXJhbCBpZiB5b3Ugd2Fu
dCBmaW5lLWdyYWluZWQgY29udHJvbCBvdmVyIHdoYXQKIC8vIHN0YXRlIGlzIHNoYXJlZCBiZXR3
ZWVuIGluc3RhbmNlcyBvZiB0aGUgdGFzay4KLWNsYXNzIFNoYXJlZFRhc2sgOiBwdWJsaWMgVGhy
ZWFkU2FmZVJlZkNvdW50ZWQ8U2hhcmVkVGFzaz4gewordGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rp
b25UeXBlPiBjbGFzcyBTaGFyZWRUYXNrOwordGVtcGxhdGU8dHlwZW5hbWUgUmVzdWx0VHlwZSwg
dHlwZW5hbWUuLi4gQXJndW1lbnRUeXBlcz4KK2NsYXNzIFNoYXJlZFRhc2s8UmVzdWx0VHlwZShB
cmd1bWVudFR5cGVzLi4uKT4gOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8U2hhcmVkVGFz
azxSZXN1bHRUeXBlKEFyZ3VtZW50VHlwZXMuLi4pPj4gewogcHVibGljOgogICAgIFNoYXJlZFRh
c2soKSB7IH0KICAgICB2aXJ0dWFsIH5TaGFyZWRUYXNrKCkgeyB9CiAKLSAgICB2aXJ0dWFsIHZv
aWQgcnVuKCkgPSAwOworICAgIHZpcnR1YWwgUmVzdWx0VHlwZSBydW4oQXJndW1lbnRUeXBlcy4u
LikgPSAwOwogfTsKIAogLy8gVGhpcyBpcyBhIHV0aWxpdHkgY2xhc3MgdGhhdCBhbGxvd3MgeW91
IHRvIGNyZWF0ZSBhIFNoYXJlZFRhc2sgc3ViY2xhc3MgdXNpbmcgYSBsYW1iZGEuIFVzdWFsbHks
CiAvLyB5b3UgZG9uJ3Qgd2FudCB0byB1c2UgdGhpcyBjbGFzcyBkaXJlY3RseS4gVXNlIGNyZWF0
ZVNoYXJlZFRhc2soKSBpbnN0ZWFkLgotdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KLWNsYXNz
IFNoYXJlZFRhc2tGdW5jdG9yIDogcHVibGljIFNoYXJlZFRhc2sgewordGVtcGxhdGU8dHlwZW5h
bWUgRnVuY3Rpb25UeXBlLCB0eXBlbmFtZSBGdW5jdG9yPiBjbGFzcyBTaGFyZWRUYXNrRnVuY3Rv
cjsKK3RlbXBsYXRlPHR5cGVuYW1lIFJlc3VsdFR5cGUsIHR5cGVuYW1lLi4uIEFyZ3VtZW50VHlw
ZXMsIHR5cGVuYW1lIEZ1bmN0b3I+CitjbGFzcyBTaGFyZWRUYXNrRnVuY3RvcjxSZXN1bHRUeXBl
KEFyZ3VtZW50VHlwZXMuLi4pPiA6IHB1YmxpYyBTaGFyZWRUYXNrPFJlc3VsdFR5cGUoQXJndW1l
bnRUeXBlcy4uLik+IHsKIHB1YmxpYzoKICAgICBTaGFyZWRUYXNrRnVuY3Rvcihjb25zdCBGdW5j
dG9yJiBmdW5jdG9yKQogICAgICAgICA6IG1fZnVuY3RvcihmdW5jdG9yKQpAQCAtNzcsOSArODAs
OSBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgotICAgIHZvaWQgcnVuKCkgb3ZlcnJpZGUK
KyAgICBSZXN1bHRUeXBlIHJ1bihBcmd1bWVudFR5cGVzLi4uIGFyZ3VtZW50cykgb3ZlcnJpZGUK
ICAgICB7Ci0gICAgICAgIG1fZnVuY3RvcigpOworICAgICAgICByZXR1cm4gbV9mdW5jdG9yKGFy
Z3VtZW50cy4uLik7CiAgICAgfQogCiAgICAgRnVuY3RvciBtX2Z1bmN0b3I7CkBAIC04Nyw3ICs5
MCw3IEBAIHByaXZhdGU6CiAKIC8vIENyZWF0ZSBhIFNoYXJlZFRhc2sgZnJvbSBhIGZ1bmN0b3Is
IHN1Y2ggYXMgYSBsYW1iZGEuIFlvdSBjYW4gdXNlIHRoaXMgbGlrZSBzbzoKIC8vCi0vLyBSZWZQ
dHI8U2hhcmVkVGFzaz4gdGFzayA9IGNyZWF0ZVNoYXJlZFRhc2soCisvLyBSZWZQdHI8U2hhcmVk
VGFzazx2b2lkKCk+PiB0YXNrID0gY3JlYXRlU2hhcmVkVGFzazx2b2lkKCk+KAogLy8gICAgIFs9
XSAoKSB7CiAvLyAgICAgICAgIGRvIHRoaW5nczsKIC8vICAgICB9KTsKQEAgLTEwMiwxMCArMTA1
LDEwIEBAIHByaXZhdGU6CiAvLyBPbiB0aGUgb3RoZXIgaGFuZCwgaWYgeW91IHVzZSBzb21ldGhp
bmcgbGlrZSBQYXJhbGxlbEhlbHBlckNsaWVudDo6cnVuVGFza0luUGFyYWxsZWwoKSAob3IgaXRz
CiAvLyBoZWxwZXIsIHJ1bkZ1bmN0aW9uSW5QYXJhbGxlbCgpLCB3aGljaCBkb2VzIGNyZWF0ZVNo
YXJlZFRhc2soKSBmb3IgeW91KSwgdGhlbiBpdCBjYW4gYmUgT0sgdG8KIC8vIHVzZSBbJl0sIHNp
bmNlIHRoZSBzdGFjayBmcmFtZSB3aWxsIHJlbWFpbiBsaXZlIGZvciB0aGUgZW50aXJlIGR1cmF0
aW9uIG9mIHRoZSB0YXNrJ3MgbGlmZXRpbWUuCi10ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgot
UmVmPFNoYXJlZFRhc2s+IGNyZWF0ZVNoYXJlZFRhc2soY29uc3QgRnVuY3RvciYgZnVuY3RvcikK
K3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0aW9uVHlwZSwgdHlwZW5hbWUgRnVuY3Rvcj4KK1JlZjxT
aGFyZWRUYXNrPEZ1bmN0aW9uVHlwZT4+IGNyZWF0ZVNoYXJlZFRhc2soY29uc3QgRnVuY3RvciYg
ZnVuY3RvcikKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTaGFyZWRUYXNrRnVuY3RvcjxG
dW5jdG9yPihmdW5jdG9yKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2hhcmVkVGFza0Z1
bmN0b3I8RnVuY3Rpb25UeXBlLCBGdW5jdG9yPihmdW5jdG9yKSk7CiB9CiAKIH0gLy8gbmFtZXNw
YWNlIFdURgpJbmRleDogU291cmNlL1dURi93dGYvU3RkTGliRXh0cmFzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dURi93dGYvU3RkTGliRXh0cmFzLmgJKHJldmlzaW9uIDE5MDc0OSkKKysrIFNv
dXJjZS9XVEYvd3RmL1N0ZExpYkV4dHJhcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOTIsNiArMzky
LDcgQEAgdXNpbmcgV1RGOjp0cnlCaW5hcnlTZWFyY2g7CiB1c2luZyBXVEY6OmFwcHJveGltYXRl
QmluYXJ5U2VhcmNoOwogdXNpbmcgV1RGOjpiaXR3aXNlX2Nhc3Q7CiB1c2luZyBXVEY6OnNhZmVD
YXN0OwordXNpbmcgV1RGOjp0dXBsZUFwcGx5OwogCiAjaWYgQ09NUElMRVJfU1VQUE9SVFMoQ1hY
X1VTRVJfTElURVJBTFMpCiAvLyBXZSBub3JtYWxseSBkb24ndCB3YW50IHRvIGJyaW5nIGluIGVu
dGlyZSBzdGQgbmFtZXNwYWNlcywgYnV0IGxpdGVyYWxzIGFyZSBhbiBleGNlcHRpb24uCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>262786</attachid>
            <date>2015-10-09 12:26:45 -0700</date>
            <delta_ts>2015-10-09 13:53:40 -0700</delta_ts>
            <desc>it&apos;s doing things</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>59035</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxOTA3NDkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtNDk0LDYgKzQ5NCw5IEBACiAJCTBGQjE3NjYyMTk2QjhG
OUUwMDkxMDUyQSAvKiBERkdQdXJlVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCMTc2NUUxOTZCOEY5RTAwOTEwNTJBIC8qIERGR1B1cmVW
YWx1ZS5jcHAgKi87IH07CiAJCTBGQjE3NjYzMTk2QjhGOUUwMDkxMDUyQSAvKiBERkdQdXJlVmFs
dWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjE3
NjVGMTk2QjhGOUUwMDkxMDUyQSAvKiBERkdQdXJlVmFsdWUuaCAqLzsgfTsKIAkJMEZCNDM4QTMx
OTI3MEIxRDAwRTFGQkM5IC8qIFN0cnVjdHVyZVNldC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI0MzhBMjE5MjcwQjFEMDBFMUZCQzkgLyogU3Ry
dWN0dXJlU2V0LmNwcCAqLzsgfTsKKwkJMEZCNEZCNzMxQkM4NDMxNDAwMjVDQTVBIC8qIEZUTExh
enlTbG93UGF0aC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkI0RkI3MDFCQzg0MzE0MDAyNUNBNUEgLyogRlRMTGF6eVNsb3dQYXRoLmNwcCAqLzsg
fTsKKwkJMEZCNEZCNzQxQkM4NDMxNDAwMjVDQTVBIC8qIEZUTExhenlTbG93UGF0aC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCNEZCNzExQkM4NDMx
NDAwMjVDQTVBIC8qIEZUTExhenlTbG93UGF0aC5oICovOyB9OworCQkwRkI0RkI3NTFCQzg0MzE0
MDAyNUNBNUEgLyogRlRMTGF6eVNsb3dQYXRoQ2FsbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCNEZCNzIxQkM4NDMxNDAwMjVDQTVBIC8qIEZUTExh
enlTbG93UGF0aENhbGwuaCAqLzsgfTsKIAkJMEZCNTQ2NzcxNEY1OUI1QzAwMkMyOTg5IC8qIExh
enlPcGVyYW5kVmFsdWVQcm9maWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkI1NDY3NjE0RjU5QUQxMDAyQzI5ODkgLyogTGF6eU9wZXJhbmRWYWx1
ZVByb2ZpbGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQkwRkI1NDY3OTE0RjVDNDZCMDAyQzI5ODkgLyogTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCNTQ2
NzgxNEY1QzQ2ODAwMkMyOTg5IC8qIExhenlPcGVyYW5kVmFsdWVQcm9maWxlLmNwcCAqLzsgfTsK
IAkJMEZCNTQ2N0IxNEY1QzdFMTAwMkMyOTg5IC8qIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2Zp
bGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjU0
NjdBMTRGNUM3RDQwMDJDMjk4OSAvKiBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTIzNTMsNiAr
MjM1Niw5IEBACiAJCTBGQjRCNTFGMTZCNjI3NzIwMDNGNjk2QiAvKiBERkdOb2RlQWxsb2NhdG9y
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR05vZGVBbGxvY2F0b3IuaDsg
cGF0aCA9IGRmZy9ERkdOb2RlQWxsb2NhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGQjRCNTIxMTZCNjI3OEQwMDNGNjk2QiAvKiBGdW5jdGlvbkV4ZWN1dGFibGVEdW1wLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZ1bmN0aW9uRXhlY3V0YWJs
ZUR1bXAuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkI0QjUyMjE2QjYyNzhE
MDAzRjY5NkIgLyogRnVuY3Rpb25FeGVjdXRhYmxlRHVtcC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBGdW5jdGlvbkV4ZWN1dGFibGVEdW1wLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGQjRGQjcwMUJDODQzMTQwMDI1Q0E1QSAvKiBGVExMYXp5U2xvd1BhdGgu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRlRMTGF6eVNsb3dQYXRo
LmNwcDsgcGF0aCA9IGZ0bC9GVExMYXp5U2xvd1BhdGguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRkI0RkI3MTFCQzg0MzE0MDAyNUNBNUEgLyogRlRMTGF6eVNsb3dQYXRoLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTExhenlTbG93UGF0aC5oOyBwYXRo
ID0gZnRsL0ZUTExhenlTbG93UGF0aC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RkI0RkI3MjFCQzg0MzE0MDAyNUNBNUEgLyogRlRMTGF6eVNsb3dQYXRoQ2FsbC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExMYXp5U2xvd1BhdGhDYWxsLmg7IHBhdGggPSBm
dGwvRlRMTGF6eVNsb3dQYXRoQ2FsbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RkI1NDY3NjE0RjU5QUQxMDAyQzI5ODkgLyogTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZCNTQ2NzgxNEY1QzQ2ODAwMkMyOTg5IC8q
IExhenlPcGVyYW5kVmFsdWVQcm9maWxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IExhenlPcGVyYW5kVmFsdWVQcm9maWxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEZCNTQ2N0ExNEY1QzdENDAwMkMyOTg5IC8qIE1ldGhvZE9mR2V0dGluZ0FW
YWx1ZVByb2ZpbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWV0aG9kT2ZH
ZXR0aW5nQVZhbHVlUHJvZmlsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzk5
MSw2ICszOTk3LDkgQEAKIAkJCQkwRkQxMjAzMjFBOEM4NUJEMDAwRjUyODAgLyogRlRMSlNDYWxs
VmFyYXJncy5oICovLAogCQkJCTYyNzc0REE4MUI4RDRCMTkwMDA2RjA1QSAvKiBGVExKU1RhaWxD
YWxsLmNwcCAqLywKIAkJCQk2Mjc3NERBOTFCOEQ0QjE5MDAwNkYwNUEgLyogRlRMSlNUYWlsQ2Fs
bC5oICovLAorCQkJCTBGQjRGQjcwMUJDODQzMTQwMDI1Q0E1QSAvKiBGVExMYXp5U2xvd1BhdGgu
Y3BwICovLAorCQkJCTBGQjRGQjcxMUJDODQzMTQwMDI1Q0E1QSAvKiBGVExMYXp5U2xvd1BhdGgu
aCAqLywKKwkJCQkwRkI0RkI3MjFCQzg0MzE0MDAyNUNBNUEgLyogRlRMTGF6eVNsb3dQYXRoQ2Fs
bC5oICovLAogCQkJCTBGOEYyQjkzMTcyRTA0OUUwMDdEQkRBNSAvKiBGVExMaW5rLmNwcCAqLywK
IAkJCQkwRjhGMkI5NDE3MkUwNDlFMDA3REJEQTUgLyogRlRMTGluay5oICovLAogCQkJCTBGQ0VG
QUREMTgwNzM4QzAwMDQ3MkNFNCAvKiBGVExMb2NhdGlvbi5jcHAgKi8sCkBAIC02MjYyLDYgKzYy
NzEsNyBAQAogCQkJCTBGNjM5NDc4MTVEQ0UzNEIwMDZBNTk3QyAvKiBERkdTdHJ1Y3R1cmVBYnN0
cmFjdFZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjUwQUYzQzE5M0U4QjM5MDA2NzRFRTgg
LyogREZHU3RydWN0dXJlQ2xvYmJlclN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjc5MDg1
NjE5QTI5MEIyMDBGNjMxMEMgLyogREZHU3RydWN0dXJlUmVnaXN0cmF0aW9uUGhhc2UuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTBGQjRGQjc1MUJDODQzMTQwMDI1Q0E1QSAvKiBGVExMYXp5U2xvd1Bh
dGhDYWxsLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJGQ0NGRjE4QTYwMDcwMDAxQTI3RjggLyog
REZHVGhyZWFkRGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDMDk3QTIxNDZCMjhDQzAwQ0Yy
NDQyIC8qIERGR1RodW5rcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEOEEzMjgxN0Q1MUY1NzAw
Q0EyQzQwIC8qIERGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLApA
QCAtNjYyMCw2ICs2NjMwLDcgQEAKIAkJCQk3QzE4NEUxQjE3QkVEQkQzMDA3Q0I2M0EgLyogSlNQ
cm9taXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk3QzE4NEUyMzE3QkVFMjQwMDA3Q0I2M0EgLyog
SlNQcm9taXNlQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTdDMDA4Q0RCMTg3MTI0
QkIwMDk1NUMyNCAvKiBKU1Byb21pc2VEZWZlcnJlZC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZC
NEZCNzQxQkM4NDMxNDAwMjVDQTVBIC8qIEZUTExhenlTbG93UGF0aC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJN0MxODRFMUYxN0JFRTIyRTAwN0NCNjNBIC8qIEpTUHJvbWlzZVByb3RvdHlwZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMkEwNUFCRDYxOTYxREYyNDAwMzQxNzUwIC8qIEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTNFRjg4NzUxQjY2REYyMzAwM0Yy
NkNCIC8qIEpTUHJvcGVydHlOYW1lSXRlcmF0b3IuaCBpbiBIZWFkZXJzICovLApAQCAtODA1NCw2
ICs4MDY1LDcgQEAKIAkJCQkxNDQ2OURFQjEwN0VDN0U3MDA2NTA0NDYgLyogU3RyaW5nQ29uc3Ry
dWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNzBFQzBFQzYxQUEwRDdEQTAwQjZBQUZBIC8q
IFN0cmluZ0l0ZXJhdG9yUHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0NDY5REVD
MTA3RUM3RTcwMDY1MDQ0NiAvKiBTdHJpbmdPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
MEZCNEZCNzMxQkM4NDMxNDAwMjVDQTVBIC8qIEZUTExhenlTbG93UGF0aC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkxNDQ2OURFRDEwN0VDN0U3MDA2NTA0NDYgLyogU3RyaW5nUHJvdG90eXBlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTkzMzVGMjREMTJFNjc2NUIwMDJCNTU1MyAvKiBTdHJpbmdS
ZWN1cnNpb25DaGVja2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDREUzQjQzMEU2QzgzMkQw
MDE0NTNBNyAvKiBTdHJ1Y3R1cmUuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJs
ZXIuaAkocmV2aXNpb24gMTkwNzQ5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcg
QEAKICNpbmNsdWRlICJPcHRpb25zLmgiCiAjaW5jbHVkZSA8d3RmL0NyeXB0b2dyYXBoaWNhbGx5
UmFuZG9tTnVtYmVyLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8
d3RmL1NoYXJlZFRhc2suaD4KICNpbmNsdWRlIDx3dGYvV2Vha1JhbmRvbS5oPgogCiAjaWYgRU5B
QkxFKEFTU0VNQkxFUikKQEAgLTEwMDQsNiArMTAwNSwxNyBAQCBwdWJsaWM6CiAgICAgICAgIEFz
c2VtYmxlclR5cGU6OnJlcGxhY2VXaXRoQWRkcmVzc0NvbXB1dGF0aW9uKGxhYmVsLmRhdGFMb2Nh
dGlvbigpKTsKICAgICB9CiAKKyAgICB2b2lkIGFkZExpbmtUYXNrKFJlZlB0cjxTaGFyZWRUYXNr
PHZvaWQoTGlua0J1ZmZlciYpPj4gdGFzaykKKyAgICB7CisgICAgICAgIG1fbGlua1Rhc2tzLmFw
cGVuZCh0YXNrKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAg
IHZvaWQgYWRkTGlua1Rhc2soY29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB7CisgICAgICAg
IG1fbGlua1Rhc2tzLmFwcGVuZChjcmVhdGVTaGFyZWRUYXNrPHZvaWQoTGlua0J1ZmZlciYpPihm
dW5jdG9yKSk7CisgICAgfQorCiBwcm90ZWN0ZWQ6CiAgICAgQWJzdHJhY3RNYWNyb0Fzc2VtYmxl
cigpCiAgICAgICAgIDogbV9yYW5kb21Tb3VyY2UoY3J5cHRvZ3JhcGhpY2FsbHlSYW5kb21OdW1i
ZXIoKSkKQEAgLTEwOTksMTAgKzExMTEsOSBAQCBwcm90ZWN0ZWQ6CiAKICAgICB1bnNpZ25lZCBt
X3RlbXBSZWdpc3RlcnNWYWxpZEJpdHM7CiAKLSAgICBmcmllbmQgY2xhc3MgTGlua0J1ZmZlcjsK
LQotcHJpdmF0ZToKKyAgICBWZWN0b3I8UmVmUHRyPFNoYXJlZFRhc2s8dm9pZChMaW5rQnVmZmVy
Jik+Pj4gbV9saW5rVGFza3M7CiAKKyAgICBmcmllbmQgY2xhc3MgTGlua0J1ZmZlcjsKIH07IC8v
IGNsYXNzIEFic3RyYWN0TWFjcm9Bc3NlbWJsZXIKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5jcHAJKHJl
dmlzaW9uIDE5MDc0OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1
ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5Myw2ICsxOTMsOSBAQCB2b2lkIExpbmtCdWZm
ZXI6OmxpbmtDb2RlKE1hY3JvQXNzZW1ibGVyCiAjZWxpZiBDUFUoQVJNNjQpCiAgICAgY29weUNv
bXBhY3RBbmRMaW5rQ29kZTx1aW50MzJfdD4obWFjcm9Bc3NlbWJsZXIsIG93bmVyVUlELCBlZmZv
cnQpOwogI2VuZGlmCisKKyAgICBmb3IgKGF1dG8mIHRhc2sgOiBtYWNyb0Fzc2VtYmxlci5tX2xp
bmtUYXNrcykKKyAgICAgICAgdGFzay0+cnVuKCp0aGlzKTsKIH0KIAogdm9pZCBMaW5rQnVmZmVy
OjphbGxvY2F0ZShzaXplX3QgaW5pdGlhbFNpemUsIHZvaWQqIG93bmVyVUlELCBKSVRDb21waWxh
dGlvbkVmZm9ydCBlZmZvcnQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVy
L0xpbmtCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1i
bGVyL0xpbmtCdWZmZXIuaAkocmV2aXNpb24gMTkwNzQ5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1OSw2ICsyNTks
OCBAQCBwdWJsaWM6CiAgICAgYm9vbCB3YXNBbHJlYWR5RGlzYXNzZW1ibGVkKCkgY29uc3QgeyBy
ZXR1cm4gbV9hbHJlYWR5RGlzYXNzZW1ibGVkOyB9CiAgICAgdm9pZCBkaWRBbHJlYWR5RGlzYXNz
ZW1ibGUoKSB7IG1fYWxyZWFkeURpc2Fzc2VtYmxlZCA9IHRydWU7IH0KIAorICAgIFZNJiB2bSgp
IHsgcmV0dXJuICptX3ZtOyB9CisKIHByaXZhdGU6CiAjaWYgRU5BQkxFKEJSQU5DSF9DT01QQUNU
SU9OKQogICAgIGludCBleGVjdXRhYmxlT2Zmc2V0Rm9yKGludCBsb2NhdGlvbikKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcAkocmV2aXNpb24gMTkwNzQ5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzMzLDcgKzMzMyw3IEBAIHN0YXRpYyB2b2lkIGZpeEZ1bmN0aW9uQmFzZWRPblN0YWNr
TWFwcygKIHsKICAgICBHcmFwaCYgZ3JhcGggPSBzdGF0ZS5ncmFwaDsKICAgICBWTSYgdm0gPSBn
cmFwaC5tX3ZtOwotICAgIFN0YWNrTWFwcyBzdGFja21hcHMgPSBqaXRDb2RlLT5zdGFja21hcHM7
CisgICAgU3RhY2tNYXBzJiBzdGFja21hcHMgPSBqaXRDb2RlLT5zdGFja21hcHM7CiAgICAgCiAg
ICAgaW50IGxvY2Fsc09mZnNldCA9IG9mZnNldE9mU3RhY2tSZWdpb24ocmVjb3JkTWFwLCBzdGF0
ZS5jYXB0dXJlZFN0YWNrbWFwSUQpICsgZ3JhcGgubV9uZXh0TWFjaGluZUxvY2FsOwogICAgIGlu
dCB2YXJhcmdzU3BpbGxTbG90c09mZnNldCA9IG9mZnNldE9mU3RhY2tSZWdpb24ocmVjb3JkTWFw
LCBzdGF0ZS52YXJhcmdzU3BpbGxTbG90c1N0YWNrbWFwSUQpOwpAQCAtNDM5LDcgKzQzOSwxMCBA
QCBzdGF0aWMgdm9pZCBmaXhGdW5jdGlvbkJhc2VkT25TdGFja01hcHMoCiAgICAgICAgIHN0YXRl
LmZpbmFsaXplci0+ZXhpdFRodW5rc0xpbmtCdWZmZXIgPSBXVEY6Om1vdmUobGlua0J1ZmZlcik7
CiAgICAgfQogCi0gICAgaWYgKCFzdGF0ZS5nZXRCeUlkcy5pc0VtcHR5KCkgfHwgIXN0YXRlLnB1
dEJ5SWRzLmlzRW1wdHkoKSB8fCAhc3RhdGUuY2hlY2tJbnMuaXNFbXB0eSgpKSB7CisgICAgaWYg
KCFzdGF0ZS5nZXRCeUlkcy5pc0VtcHR5KCkKKyAgICAgICAgfHwgIXN0YXRlLnB1dEJ5SWRzLmlz
RW1wdHkoKQorICAgICAgICB8fCAhc3RhdGUuY2hlY2tJbnMuaXNFbXB0eSgpCisgICAgICAgIHx8
ICFzdGF0ZS5sYXp5U2xvd1BhdGhzLmlzRW1wdHkoKSkgewogICAgICAgICBDQ2FsbEhlbHBlcnMg
c2xvd1BhdGhKSVQoJnZtLCBjb2RlQmxvY2spOwogICAgICAgICAKICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpKdW1wTGlzdCBleGNlcHRpb25UYXJnZXQ7CkBAIC00NzMsNyArNDc2LDggQEAgc3RhdGlj
IHZvaWQgZml4RnVuY3Rpb25CYXNlZE9uU3RhY2tNYXBzKAogCiAgICAgICAgICAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCA9IGNhbGxPcGVyYXRpb24oCiAgICAgICAgICAgICAgICAg
ICAgIHN0YXRlLCB1c2VkUmVnaXN0ZXJzLCBzbG93UGF0aEpJVCwgY29kZU9yaWdpbiwgJmV4Y2Vw
dGlvblRhcmdldCwKLSAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXpl
LCByZXN1bHQsIGdlbi5zdHViSW5mbygpLCBiYXNlLCBnZXRCeUlkLnVpZCgpKTsKKyAgICAgICAg
ICAgICAgICAgICAgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCByZXN1bHQsIENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksCisgICAgICAgICAgICAgICAgICAgIGJh
c2UsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihnZXRCeUlkLnVpZCgpKSk7CiAKICAgICAg
ICAgICAgICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGJlZ2luLCBjYWxsKTsKIApAQCAtNTEx
LDcgKzUxNSw5IEBAIHN0YXRpYyB2b2lkIGZpeEZ1bmN0aW9uQmFzZWRPblN0YWNrTWFwcygKICAg
ICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxs
ID0gY2FsbE9wZXJhdGlvbigKICAgICAgICAgICAgICAgICAgICAgc3RhdGUsIHVzZWRSZWdpc3Rl
cnMsIHNsb3dQYXRoSklULCBjb2RlT3JpZ2luLCAmZXhjZXB0aW9uVGFyZ2V0LAotICAgICAgICAg
ICAgICAgICAgICBnZW4uc2xvd1BhdGhGdW5jdGlvbigpLCBnZW4uc3R1YkluZm8oKSwgdmFsdWUs
IGJhc2UsIHB1dEJ5SWQudWlkKCkpOworICAgICAgICAgICAgICAgICAgICBnZW4uc2xvd1BhdGhG
dW5jdGlvbigpLCBJbnZhbGlkR1BSUmVnLAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCB2YWx1ZSwgYmFzZSwKKyAgICAgICAg
ICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHB1dEJ5SWQudWlkKCkpKTsK
ICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxs
KGJlZ2luLCBjYWxsKTsKICAgICAgICAgICAgICAgICAKQEAgLTU0OSwxMyArNTU1LDU3IEBAIHN0
YXRpYyB2b2lkIGZpeEZ1bmN0aW9uQmFzZWRPblN0YWNrTWFwcygKIAogICAgICAgICAgICAgICAg
IE1hY3JvQXNzZW1ibGVyOjpDYWxsIHNsb3dDYWxsID0gY2FsbE9wZXJhdGlvbigKICAgICAgICAg
ICAgICAgICAgICAgc3RhdGUsIHVzZWRSZWdpc3RlcnMsIHNsb3dQYXRoSklULCBjb2RlT3JpZ2lu
LCAmZXhjZXB0aW9uVGFyZ2V0LAotICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25Jbk9wdGlt
aXplLCByZXN1bHQsIHN0dWJJbmZvLCBvYmosIGNoZWNrSW4ubV91aWQpOworICAgICAgICAgICAg
ICAgICAgICBvcGVyYXRpb25Jbk9wdGltaXplLCByZXN1bHQsIENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbVB0cihzdHViSW5mbyksIG9iaiwKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tUHRyKGNoZWNrSW4udWlkKCkpKTsKIAogICAgICAgICAgICAgICAgIGNoZWNr
SW4ubV9zbG93UGF0aERvbmUuYXBwZW5kKHNsb3dQYXRoSklULmp1bXAoKSk7CiAgICAgICAgICAg
ICAgICAgCiAgICAgICAgICAgICAgICAgY2hlY2tJbi5tX2dlbmVyYXRvcnMuYXBwZW5kKENoZWNr
SW5HZW5lcmF0b3Ioc3R1YkluZm8sIHNsb3dDYWxsLCBiZWdpbikpOwogICAgICAgICAgICAgfQog
ICAgICAgICB9CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gc3RhdGUubGF6eVNsb3dQYXRo
cy5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgIExhenlTbG93UGF0aERlc2NyaXB0b3ImIGRl
c2NyaXB0b3IgPSBzdGF0ZS5sYXp5U2xvd1BhdGhzW2ldOworCisgICAgICAgICAgICBpZiAodmVy
Ym9zZUNvbXBpbGF0aW9uRW5hYmxlZCgpKQorICAgICAgICAgICAgICAgIGRhdGFMb2coIkhhbmRs
aW5nIGxhenlTbG93UGF0aCBzdGFja21hcCAjIiwgZGVzY3JpcHRvci5zdGFja21hcElEKCksICJc
biIpOworCisgICAgICAgICAgICBhdXRvIGl0ZXIgPSByZWNvcmRNYXAuZmluZChkZXNjcmlwdG9y
LnN0YWNrbWFwSUQoKSk7CisgICAgICAgICAgICBpZiAoaXRlciA9PSByZWNvcmRNYXAuZW5kKCkp
IHsKKyAgICAgICAgICAgICAgICAvLyBJdCB3YXMgb3B0aW1pemVkIG91dC4KKyAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGl0ZXItPnZhbHVlLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICAgICAg
U3RhY2tNYXBzOjpSZWNvcmQmIHJlY29yZCA9IGl0ZXItPnZhbHVlW2ldOworICAgICAgICAgICAg
ICAgIFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3RlcnMgPSB1c2VkUmVnaXN0ZXJzRm9yKHJlY29yZCk7
CisgICAgICAgICAgICAgICAgVmVjdG9yPExvY2F0aW9uPiBsb2NhdGlvbnM7CisgICAgICAgICAg
ICAgICAgZm9yIChhdXRvIGxvY2F0aW9uIDogcmVjb3JkLmxvY2F0aW9ucykKKyAgICAgICAgICAg
ICAgICAgICAgbG9jYXRpb25zLmFwcGVuZChMb2NhdGlvbjo6Zm9yU3RhY2ttYXBzKCZzdGFja21h
cHMsIGxvY2F0aW9uKSk7CisKKyAgICAgICAgICAgICAgICBjaGFyKiBzdGFydE9mSUMgPQorICAg
ICAgICAgICAgICAgICAgICBiaXR3aXNlX2Nhc3Q8Y2hhcio+KGdlbmVyYXRlZEZ1bmN0aW9uKSAr
IHJlY29yZC5pbnN0cnVjdGlvbk9mZnNldDsKKyAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25M
YWJlbCBwYXRjaHBvaW50KChNYWNyb0Fzc2VtYmxlckNvZGVQdHIoc3RhcnRPZklDKSkpOworICAg
ICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIGV4Y2VwdGlvblRhcmdldCA9CisgICAgICAg
ICAgICAgICAgICAgIHN0YXRlLmZpbmFsaXplci0+aGFuZGxlRXhjZXB0aW9uc0xpbmtCdWZmZXIt
PmVudHJ5cG9pbnQoKTsKKworICAgICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxMYXp5U2xv
d1BhdGg+IGxhenlTbG93UGF0aCA9IHN0ZDo6bWFrZV91bmlxdWU8TGF6eVNsb3dQYXRoPigKKyAg
ICAgICAgICAgICAgICAgICAgcGF0Y2hwb2ludCwgZXhjZXB0aW9uVGFyZ2V0LCB1c2VkUmVnaXN0
ZXJzLCBkZXNjcmlwdG9yLmNhbGxTaXRlSW5kZXgoKSwKKyAgICAgICAgICAgICAgICAgICAgZGVz
Y3JpcHRvci5tX2xpbmtlci0+cnVuKGxvY2F0aW9ucykpOworCisgICAgICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpMYWJlbCBiZWdpbiA9IHNsb3dQYXRoSklULmxhYmVsKCk7CisKKyAgICAgICAg
ICAgICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgcHVzaGluZyB0aGUgbGF6eSBzbG93IHBh
dGggaW5kZXggaW4gc29tZSB2ZWN0b3Igb3Igd2hhdGV2ZXIuCisgICAgICAgICAgICAgICAgc2xv
d1BhdGhKSVQucHVzaFRvU2F2ZUltbWVkaWF0ZVdpdGhvdXRUb3VjaGluZ1JlZ2lzdGVycygKKyAg
ICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoc3RhdGUuaml0Q29k
ZS0+bGF6eVNsb3dQYXRocy5zaXplKCkpKTsKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6
Okp1bXAgZ2VuZXJhdG9ySnVtcCA9IHNsb3dQYXRoSklULmp1bXAoKTsKKyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICBkZXNjcmlwdG9yLm1fZ2VuZXJhdG9ycy5hcHBlbmQoc3RkOjpt
YWtlX3R1cGxlKGxhenlTbG93UGF0aC5nZXQoKSwgYmVnaW4pKTsKKworICAgICAgICAgICAgICAg
IHN0YXRlLmppdENvZGUtPmxhenlTbG93UGF0aHMuYXBwZW5kKFdURjo6bW92ZShsYXp5U2xvd1Bh
dGgpKTsKKyAgICAgICAgICAgICAgICBzdGF0ZS5maW5hbGl6ZXItPmxhenlTbG93UGF0aEdlbmVy
YXRvckp1bXBzLmFwcGVuZChnZW5lcmF0b3JKdW1wKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQogICAgICAgICAKICAgICAgICAgZXhjZXB0aW9uVGFyZ2V0LmxpbmsoJnNsb3dQYXRoSklUKTsK
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZXhjZXB0aW9uSnVtcCA9IHNsb3dQYXRoSklU
Lmp1bXAoKTsKQEAgLTU3OCwxMiArNjI4LDE5IEBAIHN0YXRpYyB2b2lkIGZpeEZ1bmN0aW9uQmFz
ZWRPblN0YWNrTWFwcygKICAgICAgICAgICAgICAgICBzdGF0ZSwgY29kZUJsb2NrLCBnZW5lcmF0
ZWRGdW5jdGlvbiwgcmVjb3JkTWFwLCBzdGF0ZS5wdXRCeUlkc1tpXSwKICAgICAgICAgICAgICAg
ICBzaXplT2ZQdXRCeUlkKCkpOwogICAgICAgICB9Ci0KICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gc3RhdGUuY2hlY2tJbnMuc2l6ZSgpOyBpLS07KSB7CiAgICAgICAgICAgICBnZW5lcmF0ZUNo
ZWNrSW5JQ0Zhc3RQYXRoKAogICAgICAgICAgICAgICAgIHN0YXRlLCBjb2RlQmxvY2ssIGdlbmVy
YXRlZEZ1bmN0aW9uLCByZWNvcmRNYXAsIHN0YXRlLmNoZWNrSW5zW2ldLAogICAgICAgICAgICAg
ICAgIHNpemVPZkluKCkpOyAKLSAgICAgICAgfSAKKyAgICAgICAgfQorICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSBzdGF0ZS5sYXp5U2xvd1BhdGhzLnNpemUoKTsgaS0tOykgeworICAgICAgICAg
ICAgTGF6eVNsb3dQYXRoRGVzY3JpcHRvciYgbGF6eVNsb3dQYXRoID0gc3RhdGUubGF6eVNsb3dQ
YXRoc1tpXTsKKyAgICAgICAgICAgIGZvciAoYXV0byYgdHVwbGUgOiBsYXp5U2xvd1BhdGgubV9n
ZW5lcmF0b3JzKSB7CisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGxhY2VXaXRo
SnVtcCgKKyAgICAgICAgICAgICAgICAgICAgc3RkOjpnZXQ8MD4odHVwbGUpLT5wYXRjaHBvaW50
KCksCisgICAgICAgICAgICAgICAgICAgIHN0YXRlLmZpbmFsaXplci0+c2lkZUNvZGVMaW5rQnVm
ZmVyLT5sb2NhdGlvbk9mKHN0ZDo6Z2V0PDE+KHR1cGxlKSkpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CiAgICAgfQogICAgIAogICAgIGFkanVzdENhbGxJQ3NGb3JTdGFja21hcHMoc3RhdGUu
anNDYWxscywgcmVjb3JkTWFwKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
SW5saW5lQ2FjaGVEZXNjcmlwdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExJbmxpbmVDYWNoZURlc2NyaXB0b3IuaAkocmV2aXNpb24gMTkwNzQ5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbmxpbmVDYWNoZURlc2NyaXB0b3IuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIw
MTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0yOSwxMiArMjksMTUgQEAKICNpZiBFTkFCTEUoRlRMX0pJVCkKIAog
I2luY2x1ZGUgIkNvZGVPcmlnaW4uaCIKKyNpbmNsdWRlICJGVExMYXp5U2xvd1BhdGguaCIKICNp
bmNsdWRlICJKSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oIgogI2luY2x1ZGUgIk1hY3JvQXNzZW1i
bGVyLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvVW5pcXVlZFN0cmluZ0ltcGwuaD4KIAogbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewogCitjbGFzcyBMb2NhdGlvbjsKKwogY2xhc3MgSW5s
aW5lQ2FjaGVEZXNjcmlwdG9yIHsKIHB1YmxpYzoKICAgICBJbmxpbmVDYWNoZURlc2NyaXB0b3Io
KSAKQEAgLTExMywxNyArMTE2LDQzIEBAIGNsYXNzIENoZWNrSW5EZXNjcmlwdG9yIDogcHVibGlj
IElubGluZUMKIHB1YmxpYzoKICAgICBDaGVja0luRGVzY3JpcHRvcigpIHsgfQogICAgIAotICAg
IENoZWNrSW5EZXNjcmlwdG9yKHVuc2lnbmVkIHN0YWNrbWFwSUQsIENhbGxTaXRlSW5kZXggY2Fs
bFNpdGUsIGNvbnN0IFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCi0gICAgICAgIDogSW5saW5lQ2Fj
aGVEZXNjcmlwdG9yKHN0YWNrbWFwSUQsIGNhbGxTaXRlLCBudWxscHRyKQotICAgICAgICAsIG1f
dWlkKHVpZCkKKyAgICBDaGVja0luRGVzY3JpcHRvcih1bnNpZ25lZCBzdGFja21hcElELCBDYWxs
U2l0ZUluZGV4IGNhbGxTaXRlLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQorICAgICAgICA6IElu
bGluZUNhY2hlRGVzY3JpcHRvcihzdGFja21hcElELCBjYWxsU2l0ZSwgdWlkKQogICAgIHsKICAg
ICB9Ci0KICAgICAKLSAgICBjb25zdCBVbmlxdWVkU3RyaW5nSW1wbCogbV91aWQ7CiAgICAgVmVj
dG9yPENoZWNrSW5HZW5lcmF0b3I+IG1fZ2VuZXJhdG9yczsKIH07CiAKKy8vIFlvdSBjYW4gY3Jl
YXRlIGEgbGF6eSBzbG93IHBhdGggY2FsbCBpbiBsb3dlckRGR1RvTExWTSBieSBkb2luZzoKKy8v
IG1fZnRsU3RhdGUubGF6eVNsb3dQYXRocy5hcHBlbmQoCisvLyAgICAgTGF6eVNsb3dQYXRoRGVz
Y3JpcHRvcigKKy8vICAgICAgICAgc3RhY2ttYXBJRCwgY2FsbFNpdGVJbmRleCwKKy8vICAgICAg
ICAgY3JlYXRlU2hhcmVkVGFzazxSZWZQdHI8TGF6eVNsb3dQYXRoOjpHZW5lcmF0b3I+KGNvbnN0
IFZlY3RvcjxMb2NhdGlvbj4mKT4oCisvLyAgICAgICAgICAgICBbXSAoY29uc3QgVmVjdG9yPExv
Y2F0aW9uPiYgbG9jYXRpb25zKSAtPiBSZWZQdHI8TGF6eVNsb3dQYXRoOjpHZW5lcmF0b3I+IHsK
Ky8vICAgICAgICAgICAgICAgICAvLyBUaGlzIGxhbWJkYSBzaG91bGQganVzdCByZWNvcmQgdGhl
IHJlZ2lzdGVycyB0aGF0IHdlIHdpbGwgYmUgdXNpbmcsIGFuZCByZXR1cm4KKy8vICAgICAgICAg
ICAgICAgICAvLyBhIFNoYXJlZFRhc2sgdGhhdCB3aWxsIGFjdHVhbGx5IGdlbmVyYXRlIHRoZSBz
bG93IHBhdGguCisvLyAgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxhenlDYWxsR2VuZXJh
dG9yKAorLy8gICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiwgbG9jYXRpb25zWzBdLmRpcmVj
dEdQUigpLCBsb2NhdGlvbnNbMV0uZGlyZWN0R1BSKCkpOworLy8gICAgICAgICAgICAgfSkpKTsK
K3R5cGVkZWYgUmVmUHRyPExhenlTbG93UGF0aDo6R2VuZXJhdG9yPiBMYXp5U2xvd1BhdGhMaW5r
ZXJGdW5jdGlvbihjb25zdCBWZWN0b3I8TG9jYXRpb24+Jik7Cit0eXBlZGVmIFNoYXJlZFRhc2s8
TGF6eVNsb3dQYXRoTGlua2VyRnVuY3Rpb24+IExhenlTbG93UGF0aExpbmtlclRhc2s7CitjbGFz
cyBMYXp5U2xvd1BhdGhEZXNjcmlwdG9yIDogcHVibGljIElubGluZUNhY2hlRGVzY3JpcHRvciB7
CitwdWJsaWM6CisgICAgTGF6eVNsb3dQYXRoRGVzY3JpcHRvcigpIHsgfQorCisgICAgTGF6eVNs
b3dQYXRoRGVzY3JpcHRvcigKKyAgICAgICAgdW5zaWduZWQgc3RhY2ttYXBJRCwgQ2FsbFNpdGVJ
bmRleCBjYWxsU2l0ZSwKKyAgICAgICAgUmVmUHRyPExhenlTbG93UGF0aExpbmtlclRhc2s+IGxp
bmtlcikKKyAgICAgICAgOiBJbmxpbmVDYWNoZURlc2NyaXB0b3Ioc3RhY2ttYXBJRCwgY2FsbFNp
dGUsIG51bGxwdHIpCisgICAgICAgICwgbV9saW5rZXIobGlua2VyKQorICAgIHsKKyAgICB9CisK
KyAgICBWZWN0b3I8c3RkOjp0dXBsZTxMYXp5U2xvd1BhdGgqLCBDQ2FsbEhlbHBlcnM6OkxhYmVs
Pj4gbV9nZW5lcmF0b3JzOworCisgICAgUmVmUHRyPExhenlTbG93UGF0aExpbmtlclRhc2s+IG1f
bGlua2VyOworfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVENvZGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTEpJVENvZGUuaAkocmV2aXNpb24gMTkwNzQ5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRDb2RlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYg
KzMwLDcgQEAKIAogI2luY2x1ZGUgIkRGR0NvbW1vbkRhdGEuaCIKICNpbmNsdWRlICJGVExEYXRh
U2VjdGlvbi5oIgorI2luY2x1ZGUgIkZUTExhenlTbG93UGF0aC5oIgogI2luY2x1ZGUgIkZUTE9T
UkV4aXQuaCIKICNpbmNsdWRlICJGVExTdGFja01hcHMuaCIKICNpbmNsdWRlICJGVExVbndpbmRJ
bmZvLmgiCkBAIC04Niw2ICs4Nyw3IEBAIHB1YmxpYzoKICAgICBERkc6OkNvbW1vbkRhdGEgY29t
bW9uOwogICAgIFNlZ21lbnRlZFZlY3RvcjxPU1JFeGl0LCA4PiBvc3JFeGl0OwogICAgIFN0YWNr
TWFwcyBzdGFja21hcHM7CisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxMYXp5U2xvd1BhdGg+
PiBsYXp5U2xvd1BhdGhzOwogICAgIAogcHJpdmF0ZToKICAgICBWZWN0b3I8UmVmUHRyPERhdGFT
ZWN0aW9uPj4gbV9kYXRhU2VjdGlvbnM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTEpJVEZpbmFsaXplci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExKSVRGaW5hbGl6ZXIuY3BwCShyZXZpc2lvbiAxOTA3NDkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTEpJVEZpbmFsaXplci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEx
Miw2ICsxMTIsMTMgQEAgYm9vbCBKSVRGaW5hbGl6ZXI6OmZpbmFsaXplRnVuY3Rpb24oKQogICAg
ICAgICAgICAgICAgIGNhbGwuY2FsbCgpLAogICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxh
YmVsKG1fcGxhbi52bS5mdGxUaHVua3MtPmdldFNsb3dQYXRoQ2FsbFRodW5rKG1fcGxhbi52bSwg
Y2FsbC5rZXkoKSkuY29kZSgpKSk7CiAgICAgICAgIH0KKworICAgICAgICBmb3IgKENDYWxsSGVs
cGVyczo6SnVtcCBqdW1wIDogbGF6eVNsb3dQYXRoR2VuZXJhdG9ySnVtcHMpIHsKKyAgICAgICAg
ICAgIHNpZGVDb2RlTGlua0J1ZmZlci0+bGluaygKKyAgICAgICAgICAgICAgICBqdW1wLAorICAg
ICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsKAorICAgICAgICAgICAgICAgICAgICBtX3Bs
YW4udm0uZ2V0Q1RJU3R1YihsYXp5U2xvd1BhdGhHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3IpLmNv
ZGUoKSkpOworICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBqaXRDb2RlLT5hZGRIYW5kbGUo
RklOQUxJWkVfREZHX0NPREUoCiAgICAgICAgICAgICAqc2lkZUNvZGVMaW5rQnVmZmVyLApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRGaW5hbGl6ZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVEZpbmFsaXplci5oCShyZXZpc2lv
biAxOTA3NDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVEZpbmFsaXplci5o
CSh3b3JraW5nIGNvcHkpCkBAIC02Nyw2ICs2Nyw3IEBAIHB1YmxpYzoKICAgICBWZWN0b3I8T3V0
T2ZMaW5lQ29kZUluZm8+IG91dE9mTGluZUNvZGVJbmZvczsKICAgICBWZWN0b3I8U2xvd1BhdGhD
YWxsPiBzbG93UGF0aENhbGxzOyAvLyBDYWxscyBpbnNpZGUgdGhlIHNpZGUgY29kZS4KICAgICBW
ZWN0b3I8T1NSRXhpdENvbXBpbGF0aW9uSW5mbz4gb3NyRXhpdDsKKyAgICBWZWN0b3I8Q0NhbGxI
ZWxwZXJzOjpKdW1wPiBsYXp5U2xvd1BhdGhHZW5lcmF0b3JKdW1wczsKICAgICBHZW5lcmF0ZWRG
dW5jdGlvbiBmdW5jdGlvbjsKICAgICBSZWZQdHI8SklUQ29kZT4gaml0Q29kZTsKIH07CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExhenlTbG93UGF0aC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMYXp5U2xvd1BhdGguY3BwCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMYXp5U2xvd1BhdGguY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICog
RVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5P
IEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9S
IEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZ
LCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBP
RiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhP
V0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIg
SU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQor
ICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkZU
TExhenlTbG93UGF0aC5oIgorCisjaW5jbHVkZSAiRlRMU2xvd1BhdGhDYWxsLmgiCisjaW5jbHVk
ZSAiTGlua0J1ZmZlci5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CisKK0xh
enlTbG93UGF0aDo6TGF6eVNsb3dQYXRoKAorICAgIENvZGVMb2NhdGlvbkxhYmVsIHBhdGNocG9p
bnQsIENvZGVMb2NhdGlvbkxhYmVsIGV4Y2VwdGlvblRhcmdldCwKKyAgICBjb25zdCBSZWdpc3Rl
clNldCYgdXNlZFJlZ2lzdGVycywgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4LCBSZWZQdHI8
R2VuZXJhdG9yPiBnZW5lcmF0b3IpCisgICAgOiBtX3BhdGNocG9pbnQocGF0Y2hwb2ludCkKKyAg
ICAsIG1fZXhjZXB0aW9uVGFyZ2V0KGV4Y2VwdGlvblRhcmdldCkKKyAgICAsIG1fdXNlZFJlZ2lz
dGVycyh1c2VkUmVnaXN0ZXJzKQorICAgICwgbV9jYWxsU2l0ZUluZGV4KGNhbGxTaXRlSW5kZXgp
CisgICAgLCBtX2dlbmVyYXRvcihnZW5lcmF0b3IpCit7Cit9CisKK0xhenlTbG93UGF0aDo6fkxh
enlTbG93UGF0aCgpCit7Cit9CisKK3ZvaWQgTGF6eVNsb3dQYXRoOjpnZW5lcmF0ZShDb2RlQmxv
Y2sqIGNvZGVCbG9jaykKK3sKKyAgICBSRUxFQVNFX0FTU0VSVCghbV9zdHViKTsKKworICAgIFZN
JiB2bSA9ICpjb2RlQmxvY2stPnZtKCk7CisKKyAgICBDQ2FsbEhlbHBlcnMgaml0KCZ2bSwgY29k
ZUJsb2NrKTsKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IGV4Y2VwdGlvbkp1bXBzOworICAg
IG1fZ2VuZXJhdG9yLT5ydW4oaml0LCBtX2V4Y2VwdGlvblRhcmdldCA/ICZleGNlcHRpb25KdW1w
cyA6IG51bGxwdHIsICp0aGlzKTsKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZG9uZSA9IGppdC5q
dW1wKCk7CisKKyAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIodm0sIGppdCwgY29kZUJsb2NrLCBK
SVRDb21waWxhdGlvbk11c3RTdWNjZWVkKTsKKyAgICBsaW5rQnVmZmVyLmxpbmsoZG9uZSwgbV9w
YXRjaHBvaW50LmxhYmVsQXRPZmZzZXQoTWFjcm9Bc3NlbWJsZXI6Om1heEp1bXBSZXBsYWNlbWVu
dFNpemUoKSkpOworICAgIGlmIChtX2V4Y2VwdGlvblRhcmdldCkKKyAgICAgICAgbGlua0J1ZmZl
ci5saW5rKGV4Y2VwdGlvbkp1bXBzLCBtX2V4Y2VwdGlvblRhcmdldCk7CisgICAgbV9zdHViID0g
RklOQUxJWkVfQ09ERV9GT1IoY29kZUJsb2NrLCBsaW5rQnVmZmVyLCAoIkxhenkgc2xvdyBwYXRo
IGNhbGwgc3R1YiIpKTsKKworICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBsYWNlV2l0aEp1bXAobV9w
YXRjaHBvaW50LCBDb2RlTG9jYXRpb25MYWJlbChtX3N0dWIuY29kZSgpKSk7Cit9CisKK30gfSAv
LyBuYW1lc3BhY2UgSlNDOjpGVEwKKworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTExhenlTbG93UGF0aC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMTGF6eVNsb3dQYXRoLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTExhenlTbG93UGF0aC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzggQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBG
VExMYXp5U2xvd1BhdGhfaAorI2RlZmluZSBGVExMYXp5U2xvd1BhdGhfaAorCisjaW5jbHVkZSAi
Q0NhbGxIZWxwZXJzLmgiCisjaW5jbHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiQ29kZUxv
Y2F0aW9uLmgiCisjaW5jbHVkZSAiR1BSSW5mby5oIgorI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVy
Q29kZVJlZi5oIgorI2luY2x1ZGUgIlJlZ2lzdGVyU2V0LmgiCisjaW5jbHVkZSA8d3RmL1NoYXJl
ZFRhc2suaD4KKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgeworCitjbGFzcyBMYXp5
U2xvd1BhdGggeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKExhenlTbG93UGF0aCk7CisgICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgdHlwZWRlZiB2b2lkIEdlbmVy
YXRvckZ1bmN0aW9uKENDYWxsSGVscGVycyYsIENDYWxsSGVscGVyczo6SnVtcExpc3QqIGV4Y2Vw
dGlvbkp1bXBzLCBMYXp5U2xvd1BhdGgmKTsKKyAgICB0eXBlZGVmIFNoYXJlZFRhc2s8R2VuZXJh
dG9yRnVuY3Rpb24+IEdlbmVyYXRvcjsKKworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+
CisgICAgc3RhdGljIFJlZlB0cjxHZW5lcmF0b3I+IGNyZWF0ZUdlbmVyYXRvcihjb25zdCBGdW5j
dG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZVNoYXJlZFRhc2s8R2Vu
ZXJhdG9yRnVuY3Rpb24+KGZ1bmN0b3IpOworICAgIH0KKyAgICAKKyAgICBMYXp5U2xvd1BhdGgo
CisgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIHBhdGNocG9pbnQsIENvZGVMb2NhdGlvbkxhYmVs
IGV4Y2VwdGlvblRhcmdldCwKKyAgICAgICAgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3Rl
cnMsIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCwgUmVmUHRyPEdlbmVyYXRvcj4pOworCisg
ICAgfkxhenlTbG93UGF0aCgpOworCisgICAgQ29kZUxvY2F0aW9uTGFiZWwgcGF0Y2hwb2ludCgp
IGNvbnN0IHsgcmV0dXJuIG1fcGF0Y2hwb2ludDsgfQorICAgIGNvbnN0IFJlZ2lzdGVyU2V0JiB1
c2VkUmVnaXN0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV91c2VkUmVnaXN0ZXJzOyB9CisgICAgQ2Fs
bFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4KCkgY29uc3QgeyByZXR1cm4gbV9jYWxsU2l0ZUluZGV4
OyB9CisKKyAgICB2b2lkIGdlbmVyYXRlKENvZGVCbG9jayopOworCisgICAgTWFjcm9Bc3NlbWJs
ZXJDb2RlUmVmIHN0dWIoKSBjb25zdCB7IHJldHVybiBtX3N0dWI7IH0KKworcHJpdmF0ZToKKyAg
ICBDb2RlTG9jYXRpb25MYWJlbCBtX3BhdGNocG9pbnQ7CisgICAgQ29kZUxvY2F0aW9uTGFiZWwg
bV9leGNlcHRpb25UYXJnZXQ7CisgICAgUmVnaXN0ZXJTZXQgbV91c2VkUmVnaXN0ZXJzOworICAg
IENhbGxTaXRlSW5kZXggbV9jYWxsU2l0ZUluZGV4OworICAgIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZiBtX3N0dWI7CisgICAgUmVmUHRyPEdlbmVyYXRvcj4gbV9nZW5lcmF0b3I7Cit9OworCit9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6RlRMCisKKyNlbmRpZiAvLyBGVExMYXp5U2xvd1BhdGhfaAorCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExhenlTbG93UGF0aENhbGwuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExhenlTbG93UGF0aENhbGwu
aAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTGF6eVNsb3dQ
YXRoQ2FsbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNjYgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBGVExMYXp5U2xvd1BhdGhD
YWxsX2gKKyNkZWZpbmUgRlRMTGF6eVNsb3dQYXRoQ2FsbF9oCisKKyNpbmNsdWRlICJDb2RlQmxv
Y2suaCIKKyNpbmNsdWRlICJDb2RlTG9jYXRpb24uaCIKKyNpbmNsdWRlICJGVExMYXp5U2xvd1Bh
dGguaCIKKyNpbmNsdWRlICJGVExTbG93UGF0aENhbGwuaCIKKyNpbmNsdWRlICJGVExUaHVua3Mu
aCIKKyNpbmNsdWRlICJHUFJJbmZvLmgiCisjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
LmgiCisjaW5jbHVkZSAiUmVnaXN0ZXJTZXQuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBGVEwgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBSZXN1bHRUeXBlLCB0eXBlbmFtZS4uLiBBcmd1
bWVudFR5cGVzPgorUmVmUHRyPExhenlTbG93UGF0aDo6R2VuZXJhdG9yPiBjcmVhdGVMYXp5Q2Fs
bEdlbmVyYXRvcigKKyAgICBGdW5jdGlvblB0ciBmdW5jdGlvbiwgUmVzdWx0VHlwZSByZXN1bHQs
IEFyZ3VtZW50VHlwZXMuLi4gYXJndW1lbnRzKQoreworICAgIHJldHVybiBMYXp5U2xvd1BhdGg6
OmNyZWF0ZUdlbmVyYXRvcigKKyAgICAgICAgWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgQ0NhbGxI
ZWxwZXJzOjpKdW1wTGlzdCogZXhjZXB0aW9uSnVtcHMsIExhenlTbG93UGF0aCYgbGF6eVNsb3dQ
YXRoKSB7CisgICAgICAgICAgICBqaXQuc3RvcmUzMigKKyAgICAgICAgICAgICAgICBDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW0zMihsYXp5U2xvd1BhdGguY2FsbFNpdGVJbmRleCgpLmJpdHMoKSks
CisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjp0YWdGb3IoSlNTdGFjazo6QXJndW1lbnRD
b3VudCkpOworICAgICAgICAgICAgU2xvd1BhdGhDYWxsIHNsb3dQYXRoID0gY2FsbE9wZXJhdGlv
bigKKyAgICAgICAgICAgICAgICBsYXp5U2xvd1BhdGgudXNlZFJlZ2lzdGVycygpLCBqaXQsIGV4
Y2VwdGlvbkp1bXBzLCBmdW5jdGlvbiwgcmVzdWx0LCBhcmd1bWVudHMuLi4pOworICAgICAgICAg
ICAgaml0LmFkZExpbmtUYXNrKAorICAgICAgICAgICAgICAgIFs9XSAoTGlua0J1ZmZlciYgbGlu
a0J1ZmZlcikgeworICAgICAgICAgICAgICAgICAgICBWTSYgdm0gPSBsaW5rQnVmZmVyLnZtKCk7
CisgICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWYgdGh1bmsgPQorICAgICAgICAgICAgICAgICAgICAgICAgdm0uZnRsVGh1bmtzLT5n
ZXRTbG93UGF0aENhbGxUaHVuayh2bSwgc2xvd1BhdGgua2V5KCkpOworICAgICAgICAgICAgICAg
ICAgICAKKyAgICAgICAgICAgICAgICAgICAgbGlua0J1ZmZlci5saW5rKHNsb3dQYXRoLmNhbGwo
KSwgQ29kZUxvY2F0aW9uTGFiZWwodGh1bmsuY29kZSgpKSk7CisgICAgICAgICAgICAgICAgfSk7
CisgICAgICAgIH0pOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCisKKyNlbmRpZiAv
LyBGVExMYXp5U2xvd1BhdGhDYWxsX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExMb3dlckRGR1RvTExWTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHJldmlzaW9uIDE5MDc0OSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zOSw2ICszOSw3IEBACiAjaW5jbHVkZSAiRlRMRm9yT1NSRW50cnlKSVRDb2RlLmgiCiAj
aW5jbHVkZSAiRlRMRm9ybWF0dGVkVmFsdWUuaCIKICNpbmNsdWRlICJGVExJbmxpbmVDYWNoZVNp
emUuaCIKKyNpbmNsdWRlICJGVExMYXp5U2xvd1BhdGhDYWxsLmgiCiAjaW5jbHVkZSAiRlRMTG93
ZXJlZE5vZGVWYWx1ZS5oIgogI2luY2x1ZGUgIkZUTE9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJG
VExPdXRwdXQuaCIKQEAgLTUwNjYsNyArNTA2Nyw3IEBAIHByaXZhdGU6CiAgICAgICAgIGlmIChK
U1N0cmluZyogc3RyaW5nID0gbV9ub2RlLT5jaGlsZDEoKS0+ZHluYW1pY0Nhc3RDb25zdGFudDxK
U1N0cmluZyo+KCkpIHsKICAgICAgICAgICAgIGlmIChzdHJpbmctPnRyeUdldFZhbHVlSW1wbCgp
ICYmIHN0cmluZy0+dHJ5R2V0VmFsdWVJbXBsKCktPmlzQXRvbWljKCkpIHsKIAotICAgICAgICAg
ICAgICAgIGNvbnN0IGF1dG8gc3RyID0gc3RhdGljX2Nhc3Q8Y29uc3QgQXRvbWljU3RyaW5nSW1w
bCo+KHN0cmluZy0+dHJ5R2V0VmFsdWVJbXBsKCkpOworICAgICAgICAgICAgICAgIFVuaXF1ZWRT
dHJpbmdJbXBsKiBzdHIgPSBiaXR3aXNlX2Nhc3Q8VW5pcXVlZFN0cmluZ0ltcGwqPihzdHJpbmct
PnRyeUdldFZhbHVlSW1wbCgpKTsKICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzdGFja21hcElE
ID0gbV9zdGFja21hcElEcysrOwogICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgTFZhbHVl
IGNhbGwgPSBtX291dC5jYWxsKApAQCAtNjMwMyw5ICs2MzA0LDE0IEBAIHByaXZhdGU6CiAgICAg
ICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKICAgICAgICAgCiAgICAgICAgIG1fb3V0LmFw
cGVuZFRvKHNsb3dQYXRoLCBjb250aW51YXRpb24pOwotICAgICAgICAKLSAgICAgICAgVmFsdWVG
cm9tQmxvY2sgc2xvd1Jlc3VsdCA9IG1fb3V0LmFuY2hvcih2bUNhbGwoCi0gICAgICAgICAgICBt
X291dC5vcGVyYXRpb24ob3BlcmF0aW9uTmV3T2JqZWN0KSwgbV9jYWxsRnJhbWUsIG1fb3V0LmNv
bnN0SW50UHRyKHN0cnVjdHVyZSkpKTsKKworICAgICAgICBMVmFsdWUgc2xvd1Jlc3VsdFZhbHVl
ID0gbGF6eVNsb3dQYXRoKAorICAgICAgICAgICAgWz1dIChjb25zdCBWZWN0b3I8TG9jYXRpb24+
JiBsb2NhdGlvbnMpIC0+IFJlZlB0cjxMYXp5U2xvd1BhdGg6OkdlbmVyYXRvcj4geworICAgICAg
ICAgICAgICAgIHJldHVybiBjcmVhdGVMYXp5Q2FsbEdlbmVyYXRvcigKKyAgICAgICAgICAgICAg
ICAgICAgb3BlcmF0aW9uTmV3T2JqZWN0LCBsb2NhdGlvbnNbMF0uZGlyZWN0R1BSKCksCisgICAg
ICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpKTsK
KyAgICAgICAgICAgIH0pOworICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93UmVzdWx0ID0gbV9v
dXQuYW5jaG9yKHNsb3dSZXN1bHRWYWx1ZSk7CiAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0
aW9uKTsKICAgICAgICAgCiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFz
dE5leHQpOwpAQCAtNzE2Myw2ICs3MTY5LDI4IEBAIHByaXZhdGU6CiAgICAgICAgIG1fb3V0LmFw
cGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwogICAgICAgICByZXR1cm4gbV9vdXQucGhp
KG1fb3V0LmludDMyLCBmYXN0UmVzdWx0LCBzbG93UmVzdWx0KTsKICAgICB9CisKKyAgICB0ZW1w
bGF0ZTx0eXBlbmFtZSBGdW5jdG9yLCB0eXBlbmFtZS4uLiBBcmd1bWVudFR5cGVzPgorICAgIExW
YWx1ZSBsYXp5U2xvd1BhdGgoY29uc3QgRnVuY3RvciYgZnVuY3RvciwgQXJndW1lbnRUeXBlcy4u
LiBhcmd1bWVudHMpCisgICAgeworICAgICAgICB1bnNpZ25lZCBzdGFja21hcElEID0gbV9zdGFj
a21hcElEcysrOworCisgICAgICAgIExWYWx1ZSBjYWxsID0gbV9vdXQuY2FsbCgKKyAgICAgICAg
ICAgIG1fb3V0LnBhdGNocG9pbnRJbnQ2NEludHJpbnNpYygpLAorICAgICAgICAgICAgbV9vdXQu
Y29uc3RJbnQ2NChzdGFja21hcElEKSwgbV9vdXQuY29uc3RJbnQzMihNYWNyb0Fzc2VtYmxlcjo6
bWF4SnVtcFJlcGxhY2VtZW50U2l6ZSgpKSwKKyAgICAgICAgICAgIGNvbnN0TnVsbChtX291dC5y
ZWY4KSwgbV9vdXQuY29uc3RJbnQzMihzaXplb2YuLi4oYXJndW1lbnRzKSksIGFyZ3VtZW50cy4u
Lik7CisgICAgICAgIHNldEluc3RydWN0aW9uQ2FsbGluZ0NvbnZlbnRpb24oY2FsbCwgTExWTUFu
eVJlZ0NhbGxDb252KTsKKworICAgICAgICBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXggPQor
ICAgICAgICAgICAgbV9mdGxTdGF0ZS5qaXRDb2RlLT5jb21tb24uYWRkQ29kZU9yaWdpbihtX25v
ZGUtPm9yaWdpbi5zZW1hbnRpYyk7CisgICAgICAgIAorICAgICAgICBSZWZQdHI8TGF6eVNsb3dQ
YXRoTGlua2VyVGFzaz4gbGlua2VyID0KKyAgICAgICAgICAgIGNyZWF0ZVNoYXJlZFRhc2s8TGF6
eVNsb3dQYXRoTGlua2VyRnVuY3Rpb24+KGZ1bmN0b3IpOworCisgICAgICAgIG1fZnRsU3RhdGUu
bGF6eVNsb3dQYXRocy5hcHBlbmQoTGF6eVNsb3dQYXRoRGVzY3JpcHRvcihzdGFja21hcElELCBj
YWxsU2l0ZUluZGV4LCBsaW5rZXIpKTsKKworICAgICAgICByZXR1cm4gY2FsbDsKKyAgICB9CiAg
ICAgCiAgICAgdm9pZCBzcGVjdWxhdGUoCiAgICAgICAgIEV4aXRLaW5kIGtpbmQsIEZvcm1hdHRl
ZFZhbHVlIGxvd1ZhbHVlLCBOb2RlKiBoaWdoVmFsdWUsIExWYWx1ZSBmYWlsQ29uZGl0aW9uKQpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPcGVyYXRpb25zLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9wZXJhdGlvbnMuY3BwCShyZXZp
c2lvbiAxOTA3NDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9wZXJhdGlvbnMu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMCw2ICszMCw4IEBACiAKICNpbmNsdWRlICJDbG9uZWRB
cmd1bWVudHMuaCIKICNpbmNsdWRlICJEaXJlY3RBcmd1bWVudHMuaCIKKyNpbmNsdWRlICJGVExK
SVRDb2RlLmgiCisjaW5jbHVkZSAiRlRMTGF6eVNsb3dQYXRoLmgiCiAjaW5jbHVkZSAiSW5saW5l
Q2FsbEZyYW1lLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIkpTTGV4aWNh
bEVudmlyb25tZW50LmgiCkBAIC0zNTcsNiArMzU5LDIyIEBAIGV4dGVybiAiQyIgSlNDZWxsKiBK
SVRfT1BFUkFUSU9OIG9wZXJhdGkKICAgICB9CiB9CiAKK2V4dGVybiAiQyIgdm9pZCogSklUX09Q
RVJBVElPTiBjb21waWxlRlRMTGF6eVNsb3dQYXRoKEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQg
aW5kZXgpCit7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKworICAgIC8vIFdlIGNhbm5vdCBH
Qy4gV2UndmUgZ290IHBvaW50ZXJzIGluIGV2aWwgcGxhY2VzLgorICAgIERlZmVyR0NGb3JBV2hp
bGUgZGVmZXJHQyh2bS5oZWFwKTsKKworICAgIENvZGVCbG9jayogY29kZUJsb2NrID0gZXhlYy0+
Y29kZUJsb2NrKCk7CisgICAgSklUQ29kZSogaml0Q29kZSA9IGNvZGVCbG9jay0+aml0Q29kZSgp
LT5mdGwoKTsKKworICAgIExhenlTbG93UGF0aCYgbGF6eVNsb3dQYXRoID0gKmppdENvZGUtPmxh
enlTbG93UGF0aHNbaW5kZXhdOworICAgIGxhenlTbG93UGF0aC5nZW5lcmF0ZShjb2RlQmxvY2sp
OworCisgICAgcmV0dXJuIGxhenlTbG93UGF0aC5zdHViKCkuY29kZSgpLmV4ZWN1dGFibGVBZGRy
ZXNzKCk7Cit9CisKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKIAogI2VuZGlmIC8vIEVOQUJM
RShGVExfSklUKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPcGVyYXRpb25z
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPcGVyYXRpb25z
LmgJKHJldmlzaW9uIDE5MDc0OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3Bl
cmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw4IEBACiAKIG5hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgRlRMIHsKIAorY2xhc3MgTGF6eVNsb3dQYXRoOworCiBleHRlcm4gIkMi
IHsKIAogSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld09iamVjdFdpdGhCdXR0ZXJm
bHkoRXhlY1N0YXRlKiwgU3RydWN0dXJlKikgV1RGX0lOVEVSTkFMOwpAQCAtNDMsNiArNDUsOCBA
QCBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTWF0ZXJpYWxpCiB2b2lkIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uUG9wdWxhdGVPYmplY3RJbk9TUigKICAgICBFeGVjU3RhdGUqLCBFeGl0
VGltZU9iamVjdE1hdGVyaWFsaXphdGlvbiosIEVuY29kZWRKU1ZhbHVlKiwgRW5jb2RlZEpTVmFs
dWUqKSBXVEZfSU5URVJOQUw7CiAKK3ZvaWQqIEpJVF9PUEVSQVRJT04gY29tcGlsZUZUTExhenlT
bG93UGF0aChFeGVjU3RhdGUqLCB1bnNpZ25lZCkgV1RGX0lOVEVSTkFMOworCiB9IC8vIGV4dGVy
biAiQyIKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkRGRwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExTbG93UGF0aENhbGwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMU2xvd1BhdGhDYWxsLmNwcAkocmV2aXNpb24gMTkwNzQ5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTbG93UGF0aENhbGwuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zNSwxMzEgKzM1LDkyIEBACiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRM
IHsKIAotbmFtZXNwYWNlIHsKLQogLy8gVGhpcyBjb2RlIHJlbGllcyBvbiB1cyBiZWluZyA2NC1i
aXQuIEZUTCBpcyBjdXJyZW50bHkgYWx3YXlzIDY0LWJpdC4KIHN0YXRpYyBjb25zdCBzaXplX3Qg
d29yZFNpemUgPSA4OwogCi0vLyBUaGlzIHdpbGwgYmUgYW4gUkFJSSB0aGluZ3kgdGhhdCB3aWxs
IHNldCB1cCB0aGUgbmVjZXNzYXJ5IHN0YWNrIHNpemVzIGFuZCBvZmZzZXRzIGFuZCBzdWNoLgot
Y2xhc3MgQ2FsbENvbnRleHQgewotcHVibGljOgotICAgIENhbGxDb250ZXh0KAotICAgICAgICBT
dGF0ZSYgc3RhdGUsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLCBDQ2FsbEhlbHBl
cnMmIGppdCwKLSAgICAgICAgdW5zaWduZWQgbnVtQXJncywgR1BSUmVnIHJldHVyblJlZ2lzdGVy
KQotICAgICAgICA6IG1fc3RhdGUoc3RhdGUpCi0gICAgICAgICwgbV91c2VkUmVnaXN0ZXJzKHVz
ZWRSZWdpc3RlcnMpCi0gICAgICAgICwgbV9qaXQoaml0KQotICAgICAgICAsIG1fbnVtQXJncyhu
dW1BcmdzKQotICAgICAgICAsIG1fcmV0dXJuUmVnaXN0ZXIocmV0dXJuUmVnaXN0ZXIpCi0gICAg
ewotICAgICAgICAvLyBXZSBkb24ndCBjYXJlIHRoYXQgeW91J3JlIHVzaW5nIGNhbGxlZS1zYXZl
LCBzdGFjaywgb3IgaGFyZHdhcmUgcmVnaXN0ZXJzLgotICAgICAgICBtX3VzZWRSZWdpc3RlcnMu
ZXhjbHVkZShSZWdpc3RlclNldDo6c3RhY2tSZWdpc3RlcnMoKSk7Ci0gICAgICAgIG1fdXNlZFJl
Z2lzdGVycy5leGNsdWRlKFJlZ2lzdGVyU2V0OjpyZXNlcnZlZEhhcmR3YXJlUmVnaXN0ZXJzKCkp
OwotICAgICAgICBtX3VzZWRSZWdpc3RlcnMuZXhjbHVkZShSZWdpc3RlclNldDo6Y2FsbGVlU2F2
ZVJlZ2lzdGVycygpKTsKLSAgICAgICAgCi0gICAgICAgIC8vIFRoZSByZXR1cm4gcmVnaXN0ZXIg
ZG9lc24ndCBuZWVkIHRvIGJlIHNhdmVkLgotICAgICAgICBpZiAobV9yZXR1cm5SZWdpc3RlciAh
PSBJbnZhbGlkR1BSUmVnKQotICAgICAgICAgICAgbV91c2VkUmVnaXN0ZXJzLmNsZWFyKG1fcmV0
dXJuUmVnaXN0ZXIpOwotICAgICAgICAKLSAgICAgICAgc2l6ZV90IHN0YWNrQnl0ZXNOZWVkZWRG
b3JSZXR1cm5BZGRyZXNzID0gd29yZFNpemU7Ci0gICAgICAgIAotICAgICAgICBtX29mZnNldFRv
U2F2aW5nQXJlYSA9Ci0gICAgICAgICAgICAoc3RkOjptYXgobV9udW1BcmdzLCBOVU1CRVJfT0Zf
QVJHVU1FTlRfUkVHSVNURVJTKSAtIE5VTUJFUl9PRl9BUkdVTUVOVF9SRUdJU1RFUlMpICogd29y
ZFNpemU7Ci0gICAgICAgIAotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBzdGQ6Om1pbihOVU1C
RVJfT0ZfQVJHVU1FTlRfUkVHSVNURVJTLCBudW1BcmdzKTsgaS0tOykKLSAgICAgICAgICAgIG1f
YXJndW1lbnRSZWdpc3RlcnMuc2V0KEdQUkluZm86OnRvQXJndW1lbnRSZWdpc3RlcihpKSk7Ci0g
ICAgICAgIG1fY2FsbGluZ0NvbnZlbnRpb25SZWdpc3RlcnMubWVyZ2UobV9hcmd1bWVudFJlZ2lz
dGVycyk7Ci0gICAgICAgIGlmIChyZXR1cm5SZWdpc3RlciAhPSBJbnZhbGlkR1BSUmVnKQotICAg
ICAgICAgICAgbV9jYWxsaW5nQ29udmVudGlvblJlZ2lzdGVycy5zZXQoR1BSSW5mbzo6cmV0dXJu
VmFsdWVHUFIpOwotICAgICAgICBtX2NhbGxpbmdDb252ZW50aW9uUmVnaXN0ZXJzLmZpbHRlciht
X3VzZWRSZWdpc3RlcnMpOwotICAgICAgICAKLSAgICAgICAgdW5zaWduZWQgbnVtYmVyT2ZDYWxs
aW5nQ29udmVudGlvblJlZ2lzdGVycyA9Ci0gICAgICAgICAgICBtX2NhbGxpbmdDb252ZW50aW9u
UmVnaXN0ZXJzLm51bWJlck9mU2V0UmVnaXN0ZXJzKCk7Ci0gICAgICAgIAotICAgICAgICBzaXpl
X3Qgb2Zmc2V0VG9UaHVua1NhdmluZ0FyZWEgPQotICAgICAgICAgICAgbV9vZmZzZXRUb1Nhdmlu
Z0FyZWEgKwotICAgICAgICAgICAgbnVtYmVyT2ZDYWxsaW5nQ29udmVudGlvblJlZ2lzdGVycyAq
IHdvcmRTaXplOwotICAgICAgICAKLSAgICAgICAgbV9zdGFja0J5dGVzTmVlZGVkID0KLSAgICAg
ICAgICAgIG9mZnNldFRvVGh1bmtTYXZpbmdBcmVhICsKLSAgICAgICAgICAgIHN0YWNrQnl0ZXNO
ZWVkZWRGb3JSZXR1cm5BZGRyZXNzICsKLSAgICAgICAgICAgIChtX3VzZWRSZWdpc3RlcnMubnVt
YmVyT2ZTZXRSZWdpc3RlcnMoKSAtIG51bWJlck9mQ2FsbGluZ0NvbnZlbnRpb25SZWdpc3RlcnMp
ICogd29yZFNpemU7Ci0gICAgICAgIAotICAgICAgICBtX3N0YWNrQnl0ZXNOZWVkZWQgPSAobV9z
dGFja0J5dGVzTmVlZGVkICsgc3RhY2tBbGlnbm1lbnRCeXRlcygpIC0gMSkgJiB+KHN0YWNrQWxp
Z25tZW50Qnl0ZXMoKSAtIDEpOwotICAgICAgICAKLSAgICAgICAgbV9qaXQuc3ViUHRyKENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbTMyKG1fc3RhY2tCeXRlc05lZWRlZCksIENDYWxsSGVscGVyczo6
c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotICAgICAgICAKLSAgICAgICAgbV90aHVua1NhdmVTZXQg
PSBtX3VzZWRSZWdpc3RlcnM7Ci0gICAgICAgIAotICAgICAgICAvLyBUaGlzIHJlbGllcyBvbiBh
bGwgY2FsbGluZyBjb252ZW50aW9uIHJlZ2lzdGVycyBhbHNvIGJlaW5nIHRlbXAgcmVnaXN0ZXJz
LgotICAgICAgICB1bnNpZ25lZCBzdGFja0luZGV4ID0gMDsKLSAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7IGktLTspIHsKLSAgICAgICAgICAgIEdQ
UlJlZyByZWcgPSBHUFJJbmZvOjp0b1JlZ2lzdGVyKGkpOwotICAgICAgICAgICAgaWYgKCFtX2Nh
bGxpbmdDb252ZW50aW9uUmVnaXN0ZXJzLmdldChyZWcpKQotICAgICAgICAgICAgICAgIGNvbnRp
bnVlOwotICAgICAgICAgICAgbV9qaXQuc3RvcmVQdHIocmVnLCBDQ2FsbEhlbHBlcnM6OkFkZHJl
c3MoQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgbV9vZmZzZXRUb1NhdmluZ0Fy
ZWEgKyAoc3RhY2tJbmRleCsrKSAqIHdvcmRTaXplKSk7Ci0gICAgICAgICAgICBtX3RodW5rU2F2
ZVNldC5jbGVhcihyZWcpOwotICAgICAgICB9CitTbG93UGF0aENhbGxDb250ZXh0OjpTbG93UGF0
aENhbGxDb250ZXh0KAorICAgIFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3RlcnMsIENDYWxsSGVscGVy
cyYgaml0LCB1bnNpZ25lZCBudW1BcmdzLCBHUFJSZWcgcmV0dXJuUmVnaXN0ZXIpCisgICAgOiBt
X2ppdChqaXQpCisgICAgLCBtX251bUFyZ3MobnVtQXJncykKKyAgICAsIG1fcmV0dXJuUmVnaXN0
ZXIocmV0dXJuUmVnaXN0ZXIpCit7CisgICAgLy8gV2UgZG9uJ3QgY2FyZSB0aGF0IHlvdSdyZSB1
c2luZyBjYWxsZWUtc2F2ZSwgc3RhY2ssIG9yIGhhcmR3YXJlIHJlZ2lzdGVycy4KKyAgICB1c2Vk
UmVnaXN0ZXJzLmV4Y2x1ZGUoUmVnaXN0ZXJTZXQ6OnN0YWNrUmVnaXN0ZXJzKCkpOworICAgIHVz
ZWRSZWdpc3RlcnMuZXhjbHVkZShSZWdpc3RlclNldDo6cmVzZXJ2ZWRIYXJkd2FyZVJlZ2lzdGVy
cygpKTsKKyAgICB1c2VkUmVnaXN0ZXJzLmV4Y2x1ZGUoUmVnaXN0ZXJTZXQ6OmNhbGxlZVNhdmVS
ZWdpc3RlcnMoKSk7CiAgICAgICAgIAotICAgICAgICBtX29mZnNldCA9IG9mZnNldFRvVGh1bmtT
YXZpbmdBcmVhOwotICAgIH0KLSAgICAKLSAgICB+Q2FsbENvbnRleHQoKQotICAgIHsKLSAgICAg
ICAgaWYgKG1fcmV0dXJuUmVnaXN0ZXIgIT0gSW52YWxpZEdQUlJlZykKLSAgICAgICAgICAgIG1f
aml0Lm1vdmUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIG1fcmV0dXJuUmVnaXN0ZXIpOwotICAg
ICAgICAKLSAgICAgICAgdW5zaWduZWQgc3RhY2tJbmRleCA9IDA7Ci0gICAgICAgIGZvciAodW5z
aWduZWQgaSA9IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyBpLS07KSB7Ci0gICAgICAgICAg
ICBHUFJSZWcgcmVnID0gR1BSSW5mbzo6dG9SZWdpc3RlcihpKTsKLSAgICAgICAgICAgIGlmICgh
bV9jYWxsaW5nQ29udmVudGlvblJlZ2lzdGVycy5nZXQocmVnKSkKLSAgICAgICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgICAgIG1faml0LmxvYWRQdHIoQ0NhbGxIZWxwZXJzOjpBZGRyZXNz
KENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIG1fb2Zmc2V0VG9TYXZpbmdBcmVh
ICsgKHN0YWNrSW5kZXgrKykgKiB3b3JkU2l6ZSksIHJlZyk7Ci0gICAgICAgIH0KKyAgICAvLyBU
aGUgcmV0dXJuIHJlZ2lzdGVyIGRvZXNuJ3QgbmVlZCB0byBiZSBzYXZlZC4KKyAgICBpZiAobV9y
ZXR1cm5SZWdpc3RlciAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICB1c2VkUmVnaXN0ZXJzLmNs
ZWFyKG1fcmV0dXJuUmVnaXN0ZXIpOwogICAgICAgICAKLSAgICAgICAgbV9qaXQuYWRkUHRyKEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKG1fc3RhY2tCeXRlc05lZWRlZCksIENDYWxsSGVscGVy
czo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOwotICAgIH0KLSAgICAKLSAgICBSZWdpc3RlclNldCB1
c2VkUmVnaXN0ZXJzKCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX3RodW5rU2F2ZVNl
dDsKLSAgICB9Ci0gICAgCi0gICAgcHRyZGlmZl90IG9mZnNldCgpIGNvbnN0Ci0gICAgewotICAg
ICAgICByZXR1cm4gbV9vZmZzZXQ7CisgICAgc2l6ZV90IHN0YWNrQnl0ZXNOZWVkZWRGb3JSZXR1
cm5BZGRyZXNzID0gd29yZFNpemU7CisgICAgICAgIAorICAgIG1fb2Zmc2V0VG9TYXZpbmdBcmVh
ID0KKyAgICAgICAgKHN0ZDo6bWF4KG1fbnVtQXJncywgTlVNQkVSX09GX0FSR1VNRU5UX1JFR0lT
VEVSUykgLSBOVU1CRVJfT0ZfQVJHVU1FTlRfUkVHSVNURVJTKSAqIHdvcmRTaXplOworICAgICAg
ICAKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBzdGQ6Om1pbihOVU1CRVJfT0ZfQVJHVU1FTlRfUkVH
SVNURVJTLCBudW1BcmdzKTsgaS0tOykKKyAgICAgICAgbV9hcmd1bWVudFJlZ2lzdGVycy5zZXQo
R1BSSW5mbzo6dG9Bcmd1bWVudFJlZ2lzdGVyKGkpKTsKKyAgICBtX2NhbGxpbmdDb252ZW50aW9u
UmVnaXN0ZXJzLm1lcmdlKG1fYXJndW1lbnRSZWdpc3RlcnMpOworICAgIGlmIChyZXR1cm5SZWdp
c3RlciAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBtX2NhbGxpbmdDb252ZW50aW9uUmVnaXN0
ZXJzLnNldChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7CisgICAgbV9jYWxsaW5nQ29udmVudGlv
blJlZ2lzdGVycy5maWx0ZXIodXNlZFJlZ2lzdGVycyk7CisgICAgICAgIAorICAgIHVuc2lnbmVk
IG51bWJlck9mQ2FsbGluZ0NvbnZlbnRpb25SZWdpc3RlcnMgPQorICAgICAgICBtX2NhbGxpbmdD
b252ZW50aW9uUmVnaXN0ZXJzLm51bWJlck9mU2V0UmVnaXN0ZXJzKCk7CisgICAgICAgIAorICAg
IHNpemVfdCBvZmZzZXRUb1RodW5rU2F2aW5nQXJlYSA9CisgICAgICAgIG1fb2Zmc2V0VG9TYXZp
bmdBcmVhICsKKyAgICAgICAgbnVtYmVyT2ZDYWxsaW5nQ29udmVudGlvblJlZ2lzdGVycyAqIHdv
cmRTaXplOworICAgICAgICAKKyAgICBtX3N0YWNrQnl0ZXNOZWVkZWQgPQorICAgICAgICBvZmZz
ZXRUb1RodW5rU2F2aW5nQXJlYSArCisgICAgICAgIHN0YWNrQnl0ZXNOZWVkZWRGb3JSZXR1cm5B
ZGRyZXNzICsKKyAgICAgICAgKHVzZWRSZWdpc3RlcnMubnVtYmVyT2ZTZXRSZWdpc3RlcnMoKSAt
IG51bWJlck9mQ2FsbGluZ0NvbnZlbnRpb25SZWdpc3RlcnMpICogd29yZFNpemU7CisgICAgICAg
IAorICAgIG1fc3RhY2tCeXRlc05lZWRlZCA9IChtX3N0YWNrQnl0ZXNOZWVkZWQgKyBzdGFja0Fs
aWdubWVudEJ5dGVzKCkgLSAxKSAmIH4oc3RhY2tBbGlnbm1lbnRCeXRlcygpIC0gMSk7CisgICAg
ICAgIAorICAgIG1faml0LnN1YlB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihtX3N0YWNr
Qnl0ZXNOZWVkZWQpLCBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKworICAg
IG1fdGh1bmtTYXZlU2V0ID0gdXNlZFJlZ2lzdGVyczsKKyAgICAgICAgCisgICAgLy8gVGhpcyBy
ZWxpZXMgb24gYWxsIGNhbGxpbmcgY29udmVudGlvbiByZWdpc3RlcnMgYWxzbyBiZWluZyB0ZW1w
IHJlZ2lzdGVycy4KKyAgICB1bnNpZ25lZCBzdGFja0luZGV4ID0gMDsKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgaS0tOykgeworICAgICAgICBHUFJS
ZWcgcmVnID0gR1BSSW5mbzo6dG9SZWdpc3RlcihpKTsKKyAgICAgICAgaWYgKCFtX2NhbGxpbmdD
b252ZW50aW9uUmVnaXN0ZXJzLmdldChyZWcpKQorICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgIG1faml0LnN0b3JlUHRyKHJlZywgQ0NhbGxIZWxwZXJzOjpBZGRyZXNzKENDYWxsSGVscGVy
czo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIG1fb2Zmc2V0VG9TYXZpbmdBcmVhICsgKHN0YWNrSW5k
ZXgrKykgKiB3b3JkU2l6ZSkpOworICAgICAgICBtX3RodW5rU2F2ZVNldC5jbGVhcihyZWcpOwog
ICAgIH0KKyAgICAgICAgCisgICAgbV9vZmZzZXQgPSBvZmZzZXRUb1RodW5rU2F2aW5nQXJlYTsK
K30KICAgICAKLSAgICBTbG93UGF0aENhbGxLZXkga2V5V2l0aFRhcmdldCh2b2lkKiBjYWxsVGFy
Z2V0KSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIFNsb3dQYXRoQ2FsbEtleSh1c2VkUmVn
aXN0ZXJzKCksIGNhbGxUYXJnZXQsIG1fYXJndW1lbnRSZWdpc3RlcnMsIG9mZnNldCgpKTsKLSAg
ICB9CitTbG93UGF0aENhbGxDb250ZXh0Ojp+U2xvd1BhdGhDYWxsQ29udGV4dCgpCit7CisgICAg
aWYgKG1fcmV0dXJuUmVnaXN0ZXIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgbV9qaXQubW92
ZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgbV9yZXR1cm5SZWdpc3Rlcik7CiAgICAgCi0gICAg
TWFjcm9Bc3NlbWJsZXI6OkNhbGwgbWFrZUNhbGwodm9pZCogY2FsbFRhcmdldCwgTWFjcm9Bc3Nl
bWJsZXI6Okp1bXBMaXN0KiBleGNlcHRpb25UYXJnZXQpCi0gICAgewotICAgICAgICBNYWNyb0Fz
c2VtYmxlcjo6Q2FsbCByZXN1bHQgPSBtX2ppdC5jYWxsKCk7Ci0gICAgICAgIG1fc3RhdGUuZmlu
YWxpemVyLT5zbG93UGF0aENhbGxzLmFwcGVuZChTbG93UGF0aENhbGwoCi0gICAgICAgICAgICBy
ZXN1bHQsIGtleVdpdGhUYXJnZXQoY2FsbFRhcmdldCkpKTsKLSAgICAgICAgaWYgKGV4Y2VwdGlv
blRhcmdldCkKLSAgICAgICAgICAgIGV4Y2VwdGlvblRhcmdldC0+YXBwZW5kKG1faml0LmVtaXRF
eGNlcHRpb25DaGVjaygpKTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB1bnNpZ25lZCBz
dGFja0luZGV4ID0gMDsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSBHUFJJbmZvOjpudW1iZXJPZlJl
Z2lzdGVyczsgaS0tOykgeworICAgICAgICBHUFJSZWcgcmVnID0gR1BSSW5mbzo6dG9SZWdpc3Rl
cihpKTsKKyAgICAgICAgaWYgKCFtX2NhbGxpbmdDb252ZW50aW9uUmVnaXN0ZXJzLmdldChyZWcp
KQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIG1faml0LmxvYWRQdHIoQ0NhbGxIZWxw
ZXJzOjpBZGRyZXNzKENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIG1fb2Zmc2V0
VG9TYXZpbmdBcmVhICsgKHN0YWNrSW5kZXgrKykgKiB3b3JkU2l6ZSksIHJlZyk7CiAgICAgfQog
ICAgIAotcHJpdmF0ZToKLSAgICBTdGF0ZSYgbV9zdGF0ZTsKLSAgICBSZWdpc3RlclNldCBtX3Vz
ZWRSZWdpc3RlcnM7Ci0gICAgUmVnaXN0ZXJTZXQgbV9hcmd1bWVudFJlZ2lzdGVyczsKLSAgICBS
ZWdpc3RlclNldCBtX2NhbGxpbmdDb252ZW50aW9uUmVnaXN0ZXJzOwotICAgIENDYWxsSGVscGVy
cyYgbV9qaXQ7Ci0gICAgdW5zaWduZWQgbV9udW1BcmdzOwotICAgIEdQUlJlZyBtX3JldHVyblJl
Z2lzdGVyOwotICAgIHNpemVfdCBtX29mZnNldFRvU2F2aW5nQXJlYTsKLSAgICBzaXplX3QgbV9z
dGFja0J5dGVzTmVlZGVkOwotICAgIFJlZ2lzdGVyU2V0IG1fdGh1bmtTYXZlU2V0OwotICAgIHB0
cmRpZmZfdCBtX29mZnNldDsKLX07CisgICAgbV9qaXQuYWRkUHRyKENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbTMyKG1fc3RhY2tCeXRlc05lZWRlZCksIENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVy
UmVnaXN0ZXIpOworfQogCi19IC8vIGFub255bW91cyBuYW1lc3BhY2UKK1Nsb3dQYXRoQ2FsbEtl
eSBTbG93UGF0aENhbGxDb250ZXh0OjprZXlXaXRoVGFyZ2V0KHZvaWQqIGNhbGxUYXJnZXQpIGNv
bnN0Cit7CisgICAgcmV0dXJuIFNsb3dQYXRoQ2FsbEtleShtX3RodW5rU2F2ZVNldCwgY2FsbFRh
cmdldCwgbV9hcmd1bWVudFJlZ2lzdGVycywgbV9vZmZzZXQpOworfQorCitTbG93UGF0aENhbGwg
U2xvd1BhdGhDYWxsQ29udGV4dDo6bWFrZUNhbGwodm9pZCogY2FsbFRhcmdldCkKK3sKKyAgICBy
ZXR1cm4gU2xvd1BhdGhDYWxsKG1faml0LmNhbGwoKSwga2V5V2l0aFRhcmdldChjYWxsVGFyZ2V0
KSk7Cit9CiAKIHZvaWQgc3RvcmVDb2RlT3JpZ2luKFN0YXRlJiBzdGF0ZSwgQ0NhbGxIZWxwZXJz
JiBqaXQsIENvZGVPcmlnaW4gY29kZU9yaWdpbikKIHsKQEAgLTE3Myw0NSArMTM0LDkgQEAgdm9p
ZCBzdG9yZUNvZGVPcmlnaW4oU3RhdGUmIHN0YXRlLCBDQ2FsbAogICAgICAgICBDQ2FsbEhlbHBl
cnM6OnRhZ0ZvcihzdGF0aWNfY2FzdDxWaXJ0dWFsUmVnaXN0ZXI+KEpTU3RhY2s6OkFyZ3VtZW50
Q291bnQpKSk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oCi0gICAg
U3RhdGUmIHN0YXRlLCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywgQ0NhbGxIZWxw
ZXJzJiBqaXQsCi0gICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBNYWNyb0Fzc2VtYmxlcjo6SnVt
cExpc3QqIGV4Y2VwdGlvblRhcmdldCwKLSAgICBKX0pJVE9wZXJhdGlvbl9FU3NpQ0kgb3BlcmF0
aW9uLCBHUFJSZWcgcmVzdWx0LCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sCi0gICAgR1BS
UmVnIG9iamVjdCwgY29uc3QgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKLXsKLSAgICBzdG9yZUNv
ZGVPcmlnaW4oc3RhdGUsIGppdCwgY29kZU9yaWdpbik7Ci0gICAgQ2FsbENvbnRleHQgY29udGV4
dChzdGF0ZSwgdXNlZFJlZ2lzdGVycywgaml0LCA0LCByZXN1bHQpOwotICAgIGppdC5zZXR1cEFy
Z3VtZW50c1dpdGhFeGVjU3RhdGUoCi0gICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0
cihzdHViSW5mbyksIG9iamVjdCwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHVpZCkpOwot
ICAgIHJldHVybiBjb250ZXh0Lm1ha2VDYWxsKGJpdHdpc2VfY2FzdDx2b2lkKj4ob3BlcmF0aW9u
KSwgZXhjZXB0aW9uVGFyZ2V0KTsKLX0KLQotTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJh
dGlvbigKLSAgICBTdGF0ZSYgc3RhdGUsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJz
LCBDQ2FsbEhlbHBlcnMmIGppdCwKLSAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIE1hY3JvQXNz
ZW1ibGVyOjpKdW1wTGlzdCogZXhjZXB0aW9uVGFyZ2V0LAotICAgIEpfSklUT3BlcmF0aW9uX0VT
c2lKSSBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5m
bywKLSAgICBHUFJSZWcgb2JqZWN0LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQotewotICAgIHN0
b3JlQ29kZU9yaWdpbihzdGF0ZSwgaml0LCBjb2RlT3JpZ2luKTsKLSAgICBDYWxsQ29udGV4dCBj
b250ZXh0KHN0YXRlLCB1c2VkUmVnaXN0ZXJzLCBqaXQsIDQsIHJlc3VsdCk7Ci0gICAgaml0LnNl
dHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZSgKLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tUHRyKHN0dWJJbmZvKSwgb2JqZWN0LAotICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW1QdHIodWlkKSk7Ci0gICAgcmV0dXJuIGNvbnRleHQubWFrZUNhbGwoYml0d2lzZV9jYXN0PHZv
aWQqPihvcGVyYXRpb24pLCBleGNlcHRpb25UYXJnZXQpOwotfQotCi1NYWNyb0Fzc2VtYmxlcjo6
Q2FsbCBjYWxsT3BlcmF0aW9uKAotICAgIFN0YXRlJiBzdGF0ZSwgY29uc3QgUmVnaXN0ZXJTZXQm
IHVzZWRSZWdpc3RlcnMsIENDYWxsSGVscGVycyYgaml0LCAKLSAgICBDb2RlT3JpZ2luIGNvZGVP
cmlnaW4sIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCogZXhjZXB0aW9uVGFyZ2V0LAotICAgIFZf
SklUT3BlcmF0aW9uX0VTc2lKSkkgb3BlcmF0aW9uLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1Yklu
Zm8sIEdQUlJlZyB2YWx1ZSwKLSAgICBHUFJSZWcgb2JqZWN0LCBVbmlxdWVkU3RyaW5nSW1wbCog
dWlkKQotewotICAgIHN0b3JlQ29kZU9yaWdpbihzdGF0ZSwgaml0LCBjb2RlT3JpZ2luKTsKLSAg
ICBDYWxsQ29udGV4dCBjb250ZXh0KHN0YXRlLCB1c2VkUmVnaXN0ZXJzLCBqaXQsIDUsIEludmFs
aWRHUFJSZWcpOwotICAgIGppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoCi0gICAgICAg
IENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihzdHViSW5mbyksIHZhbHVlLCBvYmplY3QsCi0g
ICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cih1aWQpKTsKLSAgICByZXR1cm4gY29u
dGV4dC5tYWtlQ2FsbChiaXR3aXNlX2Nhc3Q8dm9pZCo+KG9wZXJhdGlvbiksIGV4Y2VwdGlvblRh
cmdldCk7Cit2b2lkIHJlZ2lzdGVyU2xvd1BhdGhDYWxsKFN0YXRlJiBzdGF0ZSwgU2xvd1BhdGhD
YWxsIGNhbGwpCit7CisgICAgc3RhdGUuZmluYWxpemVyLT5zbG93UGF0aENhbGxzLmFwcGVuZChj
YWxsKTsKIH0KIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExTbG93UGF0aENhbGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTFNsb3dQYXRoQ2FsbC5oCShyZXZpc2lvbiAxOTA3NDkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNsb3dQYXRoQ2FsbC5oCSh3b3JraW5nIGNvcHkp
CkBAIC01NSwyMCArNTUsNTcgQEAgcHJpdmF0ZToKICAgICBTbG93UGF0aENhbGxLZXkgbV9rZXk7
CiB9OwogCisvLyBUaGlzIHdpbGwgYmUgYW4gUkFJSSB0aGluZ3kgdGhhdCB3aWxsIHNldCB1cCB0
aGUgbmVjZXNzYXJ5IHN0YWNrIHNpemVzIGFuZCBvZmZzZXRzIGFuZCBzdWNoLgorY2xhc3MgU2xv
d1BhdGhDYWxsQ29udGV4dCB7CitwdWJsaWM6CisgICAgU2xvd1BhdGhDYWxsQ29udGV4dChSZWdp
c3RlclNldCB1c2VkUmVnaXN0ZXJzLCBDQ2FsbEhlbHBlcnMmLCB1bnNpZ25lZCBudW1BcmdzLCBH
UFJSZWcgcmV0dXJuUmVnaXN0ZXIpOworICAgIH5TbG93UGF0aENhbGxDb250ZXh0KCk7CisKKyAg
ICBTbG93UGF0aENhbGwgbWFrZUNhbGwodm9pZCogY2FsbFRhcmdldCk7CisKK3ByaXZhdGU6Cisg
ICAgU2xvd1BhdGhDYWxsS2V5IGtleVdpdGhUYXJnZXQodm9pZCogY2FsbFRhcmdldCkgY29uc3Q7
CisgICAgCisgICAgUmVnaXN0ZXJTZXQgbV9hcmd1bWVudFJlZ2lzdGVyczsKKyAgICBSZWdpc3Rl
clNldCBtX2NhbGxpbmdDb252ZW50aW9uUmVnaXN0ZXJzOworICAgIENDYWxsSGVscGVycyYgbV9q
aXQ7CisgICAgdW5zaWduZWQgbV9udW1BcmdzOworICAgIEdQUlJlZyBtX3JldHVyblJlZ2lzdGVy
OworICAgIHNpemVfdCBtX29mZnNldFRvU2F2aW5nQXJlYTsKKyAgICBzaXplX3QgbV9zdGFja0J5
dGVzTmVlZGVkOworICAgIFJlZ2lzdGVyU2V0IG1fdGh1bmtTYXZlU2V0OworICAgIHB0cmRpZmZf
dCBtX29mZnNldDsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50VHlwZXM+CitT
bG93UGF0aENhbGwgY2FsbE9wZXJhdGlvbigKKyAgICBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJl
Z2lzdGVycywgQ0NhbGxIZWxwZXJzJiBqaXQsIENDYWxsSGVscGVyczo6SnVtcExpc3QqIGV4Y2Vw
dGlvblRhcmdldCwKKyAgICBGdW5jdGlvblB0ciBmdW5jdGlvbiwgR1BSUmVnIHJlc3VsdEdQUiwg
QXJndW1lbnRUeXBlcy4uLiBhcmd1bWVudHMpCit7CisgICAgU2xvd1BhdGhDYWxsIGNhbGw7Cisg
ICAgeworICAgICAgICBTbG93UGF0aENhbGxDb250ZXh0IGNvbnRleHQodXNlZFJlZ2lzdGVycywg
aml0LCBzaXplb2YuLi4oQXJndW1lbnRUeXBlcykgKyAxLCByZXN1bHRHUFIpOworICAgICAgICBq
aXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZ3VtZW50cy4uLik7CisgICAgICAgIGNh
bGwgPSBjb250ZXh0Lm1ha2VDYWxsKGZ1bmN0aW9uLnZhbHVlKCkpOworICAgIH0KKyAgICBpZiAo
ZXhjZXB0aW9uVGFyZ2V0KQorICAgICAgICBleGNlcHRpb25UYXJnZXQtPmFwcGVuZChqaXQuZW1p
dEV4Y2VwdGlvbkNoZWNrKCkpOworICAgIHJldHVybiBjYWxsOworfQorCiB2b2lkIHN0b3JlQ29k
ZU9yaWdpbihTdGF0ZSYsIENDYWxsSGVscGVycyYsIENvZGVPcmlnaW4pOwordm9pZCByZWdpc3Rl
clNsb3dQYXRoQ2FsbChTdGF0ZSYsIFNsb3dQYXRoQ2FsbCk7CiAKK3RlbXBsYXRlPHR5cGVuYW1l
Li4uIEFyZ3VtZW50VHlwZXM+CiBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKAot
ICAgIFN0YXRlJiwgY29uc3QgUmVnaXN0ZXJTZXQmLCBDQ2FsbEhlbHBlcnMmLCBDb2RlT3JpZ2lu
LCBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0KiwKLSAgICBKX0pJVE9wZXJhdGlvbl9FU3NpQ0ksIEdQ
UlJlZywgU3RydWN0dXJlU3R1YkluZm8qLCBHUFJSZWcsCi0gICAgY29uc3QgVW5pcXVlZFN0cmlu
Z0ltcGwqIHVpZCk7Ci1NYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKAotICAgIFN0
YXRlJiwgY29uc3QgUmVnaXN0ZXJTZXQmLCBDQ2FsbEhlbHBlcnMmLCBDb2RlT3JpZ2luLCBDQ2Fs
bEhlbHBlcnM6Okp1bXBMaXN0KiwKLSAgICBKX0pJVE9wZXJhdGlvbl9FU3NpSkksIEdQUlJlZyBy
ZXN1bHQsIFN0cnVjdHVyZVN0dWJJbmZvKiwgR1BSUmVnIG9iamVjdCwKLSAgICBVbmlxdWVkU3Ry
aW5nSW1wbCogdWlkKTsKLU1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oCi0gICAg
U3RhdGUmLCBjb25zdCBSZWdpc3RlclNldCYsIENDYWxsSGVscGVycyYsIENvZGVPcmlnaW4sIEND
YWxsSGVscGVyczo6SnVtcExpc3QqLAotICAgIFZfSklUT3BlcmF0aW9uX0VTc2lKSkksIFN0cnVj
dHVyZVN0dWJJbmZvKiwgR1BSUmVnIHZhbHVlLCBHUFJSZWcgb2JqZWN0LAotICAgIFVuaXF1ZWRT
dHJpbmdJbXBsKiB1aWQpOworICAgIFN0YXRlJiBzdGF0ZSwgY29uc3QgUmVnaXN0ZXJTZXQmIHVz
ZWRSZWdpc3RlcnMsIENDYWxsSGVscGVycyYgaml0LCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sCisg
ICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCogZXhjZXB0aW9uVGFyZ2V0LCBGdW5jdGlvblB0ciBm
dW5jdGlvbiwgR1BSUmVnIHJlc3VsdCwgQXJndW1lbnRUeXBlcy4uLiBhcmd1bWVudHMpCit7Cisg
ICAgc3RvcmVDb2RlT3JpZ2luKHN0YXRlLCBqaXQsIGNvZGVPcmlnaW4pOworICAgIFNsb3dQYXRo
Q2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbih1c2VkUmVnaXN0ZXJzLCBqaXQsIGV4Y2VwdGlvblRh
cmdldCwgZnVuY3Rpb24sIHJlc3VsdCwgYXJndW1lbnRzLi4uKTsKKyAgICByZWdpc3RlclNsb3dQ
YXRoQ2FsbChzdGF0ZSwgY2FsbCk7CisgICAgcmV0dXJuIGNhbGwuY2FsbCgpOworfQogCiB9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6RlRMCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMU3RhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0
YXRlLmgJKHJldmlzaW9uIDE5MDc0OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
U3RhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtNzgsNiArNzgsNyBAQCBwdWJsaWM6CiAgICAgU2Vn
bWVudGVkVmVjdG9yPEdldEJ5SWREZXNjcmlwdG9yPiBnZXRCeUlkczsKICAgICBTZWdtZW50ZWRW
ZWN0b3I8UHV0QnlJZERlc2NyaXB0b3I+IHB1dEJ5SWRzOwogICAgIFNlZ21lbnRlZFZlY3RvcjxD
aGVja0luRGVzY3JpcHRvcj4gY2hlY2tJbnM7CisgICAgU2VnbWVudGVkVmVjdG9yPExhenlTbG93
UGF0aERlc2NyaXB0b3I+IGxhenlTbG93UGF0aHM7CiAgICAgVmVjdG9yPEpTQ2FsbD4ganNDYWxs
czsKICAgICBWZWN0b3I8SlNDYWxsVmFyYXJncz4ganNDYWxsVmFyYXJnc2VzOwogICAgIFZlY3Rv
cjxKU1RhaWxDYWxsPiBqc1RhaWxDYWxsczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMVGh1bmtzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTFRodW5rcy5jcHAJKHJldmlzaW9uIDE5MDc0OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMVGh1bmtzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2lu
Y2x1ZGUgIkFzc2VtYmx5SGVscGVycy5oIgogI2luY2x1ZGUgIkZQUkluZm8uaCIKICNpbmNsdWRl
ICJGVExPU1JFeGl0Q29tcGlsZXIuaCIKKyNpbmNsdWRlICJGVExPcGVyYXRpb25zLmgiCiAjaW5j
bHVkZSAiRlRMU2F2ZVJlc3RvcmUuaCIKICNpbmNsdWRlICJHUFJJbmZvLmgiCiAjaW5jbHVkZSAi
TGlua0J1ZmZlci5oIgpAQCAtMzksMTEgKzQwLDEyIEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgRlRMIHsKIAogdXNpbmcgbmFtZXNwYWNlIERGRzsKIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
IG9zckV4aXRHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3IoVk0qIHZtKQorc3RhdGljIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZiBnZW5lcmljR2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKAorICAgIFZNKiB2
bSwgRnVuY3Rpb25QdHIgZ2VuZXJhdGlvbkZ1bmN0aW9uLCBjb25zdCBjaGFyKiBuYW1lLCB1bnNp
Z25lZCBleHRyYVBvcHNUb1Jlc3RvcmUpCiB7CiAgICAgQXNzZW1ibHlIZWxwZXJzIGppdCh2bSwg
MCk7CiAgICAgCi0gICAgLy8gTm90ZSB0aGF0IHRoZSAicmV0dXJuIGFkZHJlc3MiIHdpbGwgYmUg
dGhlIE9TUiBleGl0IElELgorICAgIC8vIE5vdGUgdGhhdCB0aGUgInJldHVybiBhZGRyZXNzIiB3
aWxsIGJlIHRoZSBJRCB0aGF0IHdlIHBhc3MgdG8gdGhlIGdlbmVyYXRpb24gZnVuY3Rpb24uCiAg
ICAgCiAgICAgcHRyZGlmZl90IHN0YWNrTWlzYWxpZ25tZW50ID0gTWFjcm9Bc3NlbWJsZXI6OnB1
c2hUb1NhdmVCeXRlT2Zmc2V0KCk7CiAgICAgCkBAIC05MCwxMSArOTIsMTQgQEAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmIG9zckV4aXRHZW5lcmF0aW9uVAogICAgIHdoaWxlIChudW1iZXJPZlJlcXVp
cmVkUG9wcy0tKQogICAgICAgICBqaXQucG9wVG9SZXN0b3JlKEdQUkluZm86OnJlZ1QxKTsKICAg
ICBqaXQucG9wVG9SZXN0b3JlKE1hY3JvQXNzZW1ibGVyOjpmcmFtZVBvaW50ZXJSZWdpc3Rlcik7
Ci0gICAgCi0gICAgLy8gQXQgdGhpcyBwb2ludCB3ZSdyZSBzaXR0aW5nIG9uIHRoZSByZXR1cm4g
YWRkcmVzcyAtIHNvIGlmIHdlIGRpZCBhIGp1bXAgcmlnaHQgbm93LCB0aGUKLSAgICAvLyB0YWls
LWNhbGxlZSB3b3VsZCBiZSBoYXBweS4gSW5zdGVhZCB3ZSdsbCBzdGFzaCB0aGUgY2FsbGVlIGlu
IHRoZSByZXR1cm4gYWRkcmVzcyBhbmQgdGhlbgotICAgIC8vIHJlc3RvcmUgYWxsIHJlZ2lzdGVy
cy4KLSAgICAKKworICAgIC8vIFdoZW4gd2UgY2FtZSBpbiBoZXJlLCB0aGVyZSB3YXMgYW4gYWRk
aXRpb25hbCB0aGluZyBwdXNoZWQgdG8gdGhlIHN0YWNrLiBTb21lIGNsaWVudHMgd2FudCBpdAor
ICAgIC8vIHBvcHBlZCBiZWZvcmUgcHJvY2VlZGluZy4KKyAgICB3aGlsZSAoZXh0cmFQb3BzVG9S
ZXN0b3JlLS0pCisgICAgICAgIGppdC5wb3BUb1Jlc3RvcmUoR1BSSW5mbzo6cmVnVDEpOworCisg
ICAgLy8gUHV0IHRoZSByZXR1cm4gYWRkcmVzcyB3aGVyZXZlciB0aGUgcmV0dXJuIGluc3RydWN0
aW9uIHdhbnRzIGl0LiBPbiBhbGwgcGxhdGZvcm1zLCB0aGlzCisgICAgLy8gZW5zdXJlcyB0aGF0
IHRoZSByZXR1cm4gYWRkcmVzcyBpcyBvdXQgb2YgdGhlIHdheSBvZiByZWdpc3RlciByZXN0b3Jh
dGlvbi4KICAgICBqaXQucmVzdG9yZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1cm4oR1BSSW5mbzo6
cmVnVDApOwogCiAgICAgcmVzdG9yZUFsbFJlZ2lzdGVycyhqaXQsIGJ1ZmZlcik7CkBAIC0xMDIs
OCArMTA3LDIyIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBvc3JFeGl0R2VuZXJhdGlvblQKICAg
ICBqaXQucmV0KCk7CiAgICAgCiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sIGppdCwg
R0xPQkFMX1RIVU5LX0lEKTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKGZ1bmN0aW9uQ2FsbCwgY29t
cGlsZUZUTE9TUkV4aXQpOwotICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCAo
IkZUTCBPU1IgZXhpdCBnZW5lcmF0aW9uIHRodW5rIikpOworICAgIHBhdGNoQnVmZmVyLmxpbmso
ZnVuY3Rpb25DYWxsLCBnZW5lcmF0aW9uRnVuY3Rpb24pOworICAgIHJldHVybiBGSU5BTElaRV9D
T0RFKHBhdGNoQnVmZmVyLCAoIiVzIiwgbmFtZSkpOworfQorCitNYWNyb0Fzc2VtYmxlckNvZGVS
ZWYgb3NyRXhpdEdlbmVyYXRpb25UaHVua0dlbmVyYXRvcihWTSogdm0pCit7CisgICAgdW5zaWdu
ZWQgZXh0cmFQb3BzVG9SZXN0b3JlID0gMDsKKyAgICByZXR1cm4gZ2VuZXJpY0dlbmVyYXRpb25U
aHVua0dlbmVyYXRvcigKKyAgICAgICAgdm0sIGNvbXBpbGVGVExPU1JFeGl0LCAiRlRMIE9TUiBl
eGl0IGdlbmVyYXRpb24gdGh1bmsiLCBleHRyYVBvcHNUb1Jlc3RvcmUpOworfQorCitNYWNyb0Fz
c2VtYmxlckNvZGVSZWYgbGF6eVNsb3dQYXRoR2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKFZNKiB2
bSkKK3sKKyAgICB1bnNpZ25lZCBleHRyYVBvcHNUb1Jlc3RvcmUgPSAxOworICAgIHJldHVybiBn
ZW5lcmljR2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKAorICAgICAgICB2bSwgY29tcGlsZUZUTExh
enlTbG93UGF0aCwgIkZUTCBsYXp5IHNsb3cgcGF0aCBnZW5lcmF0aW9uIHRodW5rIiwgZXh0cmFQ
b3BzVG9SZXN0b3JlKTsKIH0KIAogc3RhdGljIHZvaWQgcmVnaXN0ZXJDbG9iYmVyQ2hlY2soQXNz
ZW1ibHlIZWxwZXJzJiBqaXQsIFJlZ2lzdGVyU2V0IGRvbnRDbG9iYmVyKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExUaHVua3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTFRodW5rcy5oCShyZXZpc2lvbiAxOTA3NDkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTFRodW5rcy5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0
MCw3IEBAIGNsYXNzIFZNOwogbmFtZXNwYWNlIEZUTCB7CiAKIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZiBvc3JFeGl0R2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKFZNKik7CitNYWNyb0Fzc2VtYmxlckNv
ZGVSZWYgbGF6eVNsb3dQYXRoR2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKFZNKik7CiBNYWNyb0Fz
c2VtYmxlckNvZGVSZWYgc2xvd1BhdGhDYWxsVGh1bmtHZW5lcmF0b3IoVk0mLCBjb25zdCBTbG93
UGF0aENhbGxLZXkmKTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgS2V5VHlwZUFyZ3VtZW50PgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCShyZXZpc2lv
biAxOTA3NDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDMxLDcgKzEwMzEsNyBAQCBKU0NlbGwqIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uTmV3T2JqZWN0CiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAg
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Ci0gICAgCisKICAgICByZXR1
cm4gY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYywgc3RydWN0dXJlKTsKIH0KIApJbmRleDogU291
cmNlL1dURi93dGYvUGFyYWxsZWxIZWxwZXJQb29sLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V1RGL3d0Zi9QYXJhbGxlbEhlbHBlclBvb2wuY3BwCShyZXZpc2lvbiAxOTA3NDkpCisrKyBTb3Vy
Y2UvV1RGL3d0Zi9QYXJhbGxlbEhlbHBlclBvb2wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Myw3
ICs1Myw3IEBAIFBhcmFsbGVsSGVscGVyQ2xpZW50Ojp+UGFyYWxsZWxIZWxwZXJDbGkKICAgICB9
CiB9CiAKLXZvaWQgUGFyYWxsZWxIZWxwZXJDbGllbnQ6OnNldFRhc2soUmVmUHRyPFNoYXJlZFRh
c2s+IHRhc2spCit2b2lkIFBhcmFsbGVsSGVscGVyQ2xpZW50OjpzZXRUYXNrKFJlZlB0cjxTaGFy
ZWRUYXNrPHZvaWQoKT4+IHRhc2spCiB7CiAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9wb29sLT5t
X2xvY2spOwogICAgIFJFTEVBU0VfQVNTRVJUKCFtX3Rhc2spOwpAQCAtNjksNyArNjksNyBAQCB2
b2lkIFBhcmFsbGVsSGVscGVyQ2xpZW50OjpmaW5pc2goKQogCiB2b2lkIFBhcmFsbGVsSGVscGVy
Q2xpZW50Ojpkb1NvbWVIZWxwaW5nKCkKIHsKLSAgICBSZWZQdHI8U2hhcmVkVGFzaz4gdGFzazsK
KyAgICBSZWZQdHI8U2hhcmVkVGFzazx2b2lkKCk+PiB0YXNrOwogICAgIHsKICAgICAgICAgTG9j
a0hvbGRlciBsb2NrZXIobV9wb29sLT5tX2xvY2spOwogICAgICAgICB0YXNrID0gY2xhaW1UYXNr
KGxvY2tlcik7CkBAIC04MCw3ICs4MCw3IEBAIHZvaWQgUGFyYWxsZWxIZWxwZXJDbGllbnQ6OmRv
U29tZUhlbHBpbmcKICAgICBydW5UYXNrKHRhc2spOwogfQogCi12b2lkIFBhcmFsbGVsSGVscGVy
Q2xpZW50OjpydW5UYXNrSW5QYXJhbGxlbChSZWZQdHI8U2hhcmVkVGFzaz4gdGFzaykKK3ZvaWQg
UGFyYWxsZWxIZWxwZXJDbGllbnQ6OnJ1blRhc2tJblBhcmFsbGVsKFJlZlB0cjxTaGFyZWRUYXNr
PHZvaWQoKT4+IHRhc2spCiB7CiAgICAgc2V0VGFzayh0YXNrKTsKICAgICBkb1NvbWVIZWxwaW5n
KCk7CkBAIC05NCw3ICs5NCw3IEBAIHZvaWQgUGFyYWxsZWxIZWxwZXJDbGllbnQ6OmZpbmlzaChj
b25zdCAKICAgICAgICAgbV9wb29sLT5tX3dvcmtDb21wbGV0ZUNvbmRpdGlvbi53YWl0KG1fcG9v
bC0+bV9sb2NrKTsKIH0KIAotUmVmUHRyPFNoYXJlZFRhc2s+IFBhcmFsbGVsSGVscGVyQ2xpZW50
OjpjbGFpbVRhc2soY29uc3QgTG9ja0hvbGRlciYpCitSZWZQdHI8U2hhcmVkVGFzazx2b2lkKCk+
PiBQYXJhbGxlbEhlbHBlckNsaWVudDo6Y2xhaW1UYXNrKGNvbnN0IExvY2tIb2xkZXImKQogewog
ICAgIGlmICghbV90YXNrKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTEwMyw3ICsxMDMs
NyBAQCBSZWZQdHI8U2hhcmVkVGFzaz4gUGFyYWxsZWxIZWxwZXJDbGllbnQ6CiAgICAgcmV0dXJu
IG1fdGFzazsKIH0KIAotdm9pZCBQYXJhbGxlbEhlbHBlckNsaWVudDo6cnVuVGFzayhSZWZQdHI8
U2hhcmVkVGFzaz4gdGFzaykKK3ZvaWQgUGFyYWxsZWxIZWxwZXJDbGllbnQ6OnJ1blRhc2soUmVm
UHRyPFNoYXJlZFRhc2s8dm9pZCgpPj4gdGFzaykKIHsKICAgICBSRUxFQVNFX0FTU0VSVChtX251
bUFjdGl2ZSk7CiAgICAgUkVMRUFTRV9BU1NFUlQodGFzayk7CkBAIC0xNTMsNyArMTUzLDcgQEAg
dm9pZCBQYXJhbGxlbEhlbHBlclBvb2w6OmVuc3VyZVRocmVhZHModQogdm9pZCBQYXJhbGxlbEhl
bHBlclBvb2w6OmRvU29tZUhlbHBpbmcoKQogewogICAgIFBhcmFsbGVsSGVscGVyQ2xpZW50KiBj
bGllbnQ7Ci0gICAgUmVmUHRyPFNoYXJlZFRhc2s+IHRhc2s7CisgICAgUmVmUHRyPFNoYXJlZFRh
c2s8dm9pZCgpPj4gdGFzazsKICAgICB7CiAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9j
ayk7CiAgICAgICAgIGNsaWVudCA9IGdldENsaWVudFdpdGhUYXNrKGxvY2tlcik7CkBAIC0xODIs
NyArMTgyLDcgQEAgdm9pZCBQYXJhbGxlbEhlbHBlclBvb2w6OmhlbHBlclRocmVhZEJvZAogewog
ICAgIGZvciAoOzspIHsKICAgICAgICAgUGFyYWxsZWxIZWxwZXJDbGllbnQqIGNsaWVudDsKLSAg
ICAgICAgUmVmUHRyPFNoYXJlZFRhc2s+IHRhc2s7CisgICAgICAgIFJlZlB0cjxTaGFyZWRUYXNr
PHZvaWQoKT4+IHRhc2s7CiAKICAgICAgICAgewogICAgICAgICAgICAgTG9ja0hvbGRlciBsb2Nr
ZXIobV9sb2NrKTsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1BhcmFsbGVsSGVscGVyUG9vbC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1BhcmFsbGVsSGVscGVyUG9vbC5oCShyZXZpc2lv
biAxOTA3NDkpCisrKyBTb3VyY2UvV1RGL3d0Zi9QYXJhbGxlbEhlbHBlclBvb2wuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTMwLDEyICsxMzAsMTIgQEAgcHVibGljOgogICAgIFdURl9FWFBPUlRfUFJJ
VkFURSBQYXJhbGxlbEhlbHBlckNsaWVudChSZWZQdHI8UGFyYWxsZWxIZWxwZXJQb29sPik7CiAg
ICAgV1RGX0VYUE9SVF9QUklWQVRFIH5QYXJhbGxlbEhlbHBlckNsaWVudCgpOwogCi0gICAgV1RG
X0VYUE9SVF9QUklWQVRFIHZvaWQgc2V0VGFzayhSZWZQdHI8U2hhcmVkVGFzaz4pOworICAgIFdU
Rl9FWFBPUlRfUFJJVkFURSB2b2lkIHNldFRhc2soUmVmUHRyPFNoYXJlZFRhc2s8dm9pZCgpPj4p
OwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KICAgICB2b2lkIHNldEZ1bmN0aW9u
KGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCiAgICAgewotICAgICAgICBzZXRUYXNrKGNyZWF0ZVNo
YXJlZFRhc2soZnVuY3RvcikpOworICAgICAgICBzZXRUYXNrKGNyZWF0ZVNoYXJlZFRhc2s8dm9p
ZCgpPihmdW5jdG9yKSk7CiAgICAgfQogICAgIAogICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lk
IGZpbmlzaCgpOwpAQCAtMTQ2LDcgKzE0Niw3IEBAIHB1YmxpYzoKICAgICAvLyBjbGllbnQtPnNl
dFRhc2sodGFzayk7CiAgICAgLy8gY2xpZW50LT5kb1NvbWVIZWxwaW5nKCk7CiAgICAgLy8gY2xp
ZW50LT5maW5pc2goKTsKLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBydW5UYXNrSW5QYXJh
bGxlbChSZWZQdHI8U2hhcmVkVGFzaz4pOworICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIHJ1
blRhc2tJblBhcmFsbGVsKFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoKT4+KTsKIAogICAgIC8vIEVx
dWl2YWxlbnQgdG86CiAgICAgLy8gY2xpZW50LT5zZXRGdW5jdGlvbihmdW5jdG9yKTsKQEAgLTE1
NSw3ICsxNTUsNyBAQCBwdWJsaWM6CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KICAg
ICB2b2lkIHJ1bkZ1bmN0aW9uSW5QYXJhbGxlbChjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQogICAg
IHsKLSAgICAgICAgcnVuVGFza0luUGFyYWxsZWwoY3JlYXRlU2hhcmVkVGFzayhmdW5jdG9yKSk7
CisgICAgICAgIHJ1blRhc2tJblBhcmFsbGVsKGNyZWF0ZVNoYXJlZFRhc2s8dm9pZCgpPihmdW5j
dG9yKSk7CiAgICAgfQogCiAgICAgUGFyYWxsZWxIZWxwZXJQb29sJiBwb29sKCkgeyByZXR1cm4g
Km1fcG9vbDsgfQpAQCAtMTY1LDExICsxNjUsMTEgQEAgcHJpdmF0ZToKICAgICBmcmllbmQgY2xh
c3MgUGFyYWxsZWxIZWxwZXJQb29sOwogCiAgICAgdm9pZCBmaW5pc2goY29uc3QgTG9ja0hvbGRl
ciYpOwotICAgIFJlZlB0cjxTaGFyZWRUYXNrPiBjbGFpbVRhc2soY29uc3QgTG9ja0hvbGRlciYp
OwotICAgIHZvaWQgcnVuVGFzayhSZWZQdHI8U2hhcmVkVGFzaz4pOworICAgIFJlZlB0cjxTaGFy
ZWRUYXNrPHZvaWQoKT4+IGNsYWltVGFzayhjb25zdCBMb2NrSG9sZGVyJik7CisgICAgdm9pZCBy
dW5UYXNrKFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoKT4+KTsKICAgICAKICAgICBSZWZQdHI8UGFy
YWxsZWxIZWxwZXJQb29sPiBtX3Bvb2w7Ci0gICAgUmVmUHRyPFNoYXJlZFRhc2s+IG1fdGFzazsK
KyAgICBSZWZQdHI8U2hhcmVkVGFzazx2b2lkKCk+PiBtX3Rhc2s7CiAgICAgdW5zaWduZWQgbV9u
dW1BY3RpdmUgeyAwIH07CiB9OwogCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9TaGFyZWRUYXNrLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvU2hhcmVkVGFzay5oCShyZXZpc2lvbiAxOTA3
NDkpCisrKyBTb3VyY2UvV1RGL3d0Zi9TaGFyZWRUYXNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTQx
LDEzICs0MSwxMyBAQCBuYW1lc3BhY2UgV1RGIHsKIC8vCiAvLyBIZXJlJ3MgYW4gZXhhbXBsZSBv
ZiBob3cgU2hhcmVkVGFzayBjYW4gYmUgYmV0dGVyIHRoYW4gc3RkOjpmdW5jdGlvbi4gSWYgeW91
IGRvOgogLy8KLS8vIHN0ZDo6ZnVuY3Rpb24gYSA9IGI7CisvLyBzdGQ6OmZ1bmN0aW9uPGludChk
b3VibGUpPiBhID0gYjsKIC8vCiAvLyBUaGVuICJhIiB3aWxsIGdldCBpdHMgb3duIGNvcHkgb2Yg
YWxsIGNhcHR1cmVkIGJ5LXZhbHVlIHZhcmlhYmxlcy4gVGhlIGFjdCBvZiBjb3B5aW5nIG1heQog
Ly8gcmVxdWlyZSBjYWxscyB0byBzeXN0ZW0gbWFsbG9jLCBhbmQgaXQgbWF5IGJlIGxpbmVhciB0
aW1lIGluIHRoZSB0b3RhbCBzaXplIG9mIGNhcHR1cmVkCiAvLyB2YXJpYWJsZXMuIE9uIHRoZSBv
dGhlciBoYW5kLCBpZiB5b3UgZG86CiAvLwotLy8gUmVmUHRyPFNoYXJlZFRhc2s+IGEgPSBiOwor
Ly8gUmVmUHRyPFNoYXJlZFRhc2s8aW50KGRvdWJsZSk+IGEgPSBiOwogLy8KIC8vIFRoZW4gImEi
IHdpbGwgcG9pbnQgdG8gdGhlIHNhbWUgdGFzayBhcyBiLCBhbmQgdGhlIG9ubHkgd29yayBpbnZv
bHZlZCBpcyB0aGUgQ0FTIHRvIGluY3JlYXNlIHRoZQogLy8gcmVmZXJlbmNlIGNvdW50LgpAQCAt
NTgsMTggKzU4LDIxIEBAIG5hbWVzcGFjZSBXVEYgewogLy8gY3JlYXRlU2hhcmVkVGFzaygpLCBi
ZWxvdykuIEJ1dCBTaGFyZWRUYXNrIGFsc28gYWxsb3dzIHlvdSB0byBjcmVhdGUgeW91ciBvd24g
c3ViY2xhc3MgYW5kIHB1dAogLy8gc3RhdGUgaW4gbWVtYmVyIGZpZWxkcy4gVGhpcyBjYW4gYmUg
bW9yZSBuYXR1cmFsIGlmIHlvdSB3YW50IGZpbmUtZ3JhaW5lZCBjb250cm9sIG92ZXIgd2hhdAog
Ly8gc3RhdGUgaXMgc2hhcmVkIGJldHdlZW4gaW5zdGFuY2VzIG9mIHRoZSB0YXNrLgotY2xhc3Mg
U2hhcmVkVGFzayA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxTaGFyZWRUYXNrPiB7Cit0
ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdGlvblR5cGU+IGNsYXNzIFNoYXJlZFRhc2s7Cit0ZW1wbGF0
ZTx0eXBlbmFtZSBSZXN1bHRUeXBlLCB0eXBlbmFtZS4uLiBBcmd1bWVudFR5cGVzPgorY2xhc3Mg
U2hhcmVkVGFzazxSZXN1bHRUeXBlKEFyZ3VtZW50VHlwZXMuLi4pPiA6IHB1YmxpYyBUaHJlYWRT
YWZlUmVmQ291bnRlZDxTaGFyZWRUYXNrPFJlc3VsdFR5cGUoQXJndW1lbnRUeXBlcy4uLik+PiB7
CiBwdWJsaWM6CiAgICAgU2hhcmVkVGFzaygpIHsgfQogICAgIHZpcnR1YWwgflNoYXJlZFRhc2so
KSB7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBydW4oKSA9IDA7CisgICAgdmlydHVhbCBSZXN1bHRU
eXBlIHJ1bihBcmd1bWVudFR5cGVzLi4uKSA9IDA7CiB9OwogCiAvLyBUaGlzIGlzIGEgdXRpbGl0
eSBjbGFzcyB0aGF0IGFsbG93cyB5b3UgdG8gY3JlYXRlIGEgU2hhcmVkVGFzayBzdWJjbGFzcyB1
c2luZyBhIGxhbWJkYS4gVXN1YWxseSwKIC8vIHlvdSBkb24ndCB3YW50IHRvIHVzZSB0aGlzIGNs
YXNzIGRpcmVjdGx5LiBVc2UgY3JlYXRlU2hhcmVkVGFzaygpIGluc3RlYWQuCi10ZW1wbGF0ZTx0
eXBlbmFtZSBGdW5jdG9yPgotY2xhc3MgU2hhcmVkVGFza0Z1bmN0b3IgOiBwdWJsaWMgU2hhcmVk
VGFzayB7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdGlvblR5cGUsIHR5cGVuYW1lIEZ1bmN0b3I+
IGNsYXNzIFNoYXJlZFRhc2tGdW5jdG9yOwordGVtcGxhdGU8dHlwZW5hbWUgUmVzdWx0VHlwZSwg
dHlwZW5hbWUuLi4gQXJndW1lbnRUeXBlcywgdHlwZW5hbWUgRnVuY3Rvcj4KK2NsYXNzIFNoYXJl
ZFRhc2tGdW5jdG9yPFJlc3VsdFR5cGUoQXJndW1lbnRUeXBlcy4uLiksIEZ1bmN0b3I+IDogcHVi
bGljIFNoYXJlZFRhc2s8UmVzdWx0VHlwZShBcmd1bWVudFR5cGVzLi4uKT4gewogcHVibGljOgog
ICAgIFNoYXJlZFRhc2tGdW5jdG9yKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCiAgICAgICAgIDog
bV9mdW5jdG9yKGZ1bmN0b3IpCkBAIC03Nyw5ICs4MCw5IEBAIHB1YmxpYzoKICAgICB9CiAKIHBy
aXZhdGU6Ci0gICAgdm9pZCBydW4oKSBvdmVycmlkZQorICAgIFJlc3VsdFR5cGUgcnVuKEFyZ3Vt
ZW50VHlwZXMuLi4gYXJndW1lbnRzKSBvdmVycmlkZQogICAgIHsKLSAgICAgICAgbV9mdW5jdG9y
KCk7CisgICAgICAgIHJldHVybiBtX2Z1bmN0b3IoYXJndW1lbnRzLi4uKTsKICAgICB9CiAKICAg
ICBGdW5jdG9yIG1fZnVuY3RvcjsKQEAgLTg3LDcgKzkwLDcgQEAgcHJpdmF0ZToKIAogLy8gQ3Jl
YXRlIGEgU2hhcmVkVGFzayBmcm9tIGEgZnVuY3Rvciwgc3VjaCBhcyBhIGxhbWJkYS4gWW91IGNh
biB1c2UgdGhpcyBsaWtlIHNvOgogLy8KLS8vIFJlZlB0cjxTaGFyZWRUYXNrPiB0YXNrID0gY3Jl
YXRlU2hhcmVkVGFzaygKKy8vIFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoKT4+IHRhc2sgPSBjcmVh
dGVTaGFyZWRUYXNrPHZvaWQoKT4oCiAvLyAgICAgWz1dICgpIHsKIC8vICAgICAgICAgZG8gdGhp
bmdzOwogLy8gICAgIH0pOwpAQCAtMTAyLDEwICsxMDUsMTAgQEAgcHJpdmF0ZToKIC8vIE9uIHRo
ZSBvdGhlciBoYW5kLCBpZiB5b3UgdXNlIHNvbWV0aGluZyBsaWtlIFBhcmFsbGVsSGVscGVyQ2xp
ZW50OjpydW5UYXNrSW5QYXJhbGxlbCgpIChvciBpdHMKIC8vIGhlbHBlciwgcnVuRnVuY3Rpb25J
blBhcmFsbGVsKCksIHdoaWNoIGRvZXMgY3JlYXRlU2hhcmVkVGFzaygpIGZvciB5b3UpLCB0aGVu
IGl0IGNhbiBiZSBPSyB0bwogLy8gdXNlIFsmXSwgc2luY2UgdGhlIHN0YWNrIGZyYW1lIHdpbGwg
cmVtYWluIGxpdmUgZm9yIHRoZSBlbnRpcmUgZHVyYXRpb24gb2YgdGhlIHRhc2sncyBsaWZldGlt
ZS4KLXRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Ci1SZWY8U2hhcmVkVGFzaz4gY3JlYXRlU2hh
cmVkVGFzayhjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rp
b25UeXBlLCB0eXBlbmFtZSBGdW5jdG9yPgorUmVmPFNoYXJlZFRhc2s8RnVuY3Rpb25UeXBlPj4g
Y3JlYXRlU2hhcmVkVGFzayhjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQogewotICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IFNoYXJlZFRhc2tGdW5jdG9yPEZ1bmN0b3I+KGZ1bmN0b3IpKTsKKyAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBTaGFyZWRUYXNrRnVuY3RvcjxGdW5jdGlvblR5cGUsIEZ1bmN0
b3I+KGZ1bmN0b3IpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV1RGCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>262792</attachid>
            <date>2015-10-09 13:53:40 -0700</date>
            <delta_ts>2015-10-10 14:31:21 -0700</delta_ts>
            <desc>even more powerful but probably totally wrong</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>68326</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxOTA3NDkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtNDk0LDYgKzQ5NCw5IEBACiAJCTBGQjE3NjYyMTk2QjhG
OUUwMDkxMDUyQSAvKiBERkdQdXJlVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCMTc2NUUxOTZCOEY5RTAwOTEwNTJBIC8qIERGR1B1cmVW
YWx1ZS5jcHAgKi87IH07CiAJCTBGQjE3NjYzMTk2QjhGOUUwMDkxMDUyQSAvKiBERkdQdXJlVmFs
dWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjE3
NjVGMTk2QjhGOUUwMDkxMDUyQSAvKiBERkdQdXJlVmFsdWUuaCAqLzsgfTsKIAkJMEZCNDM4QTMx
OTI3MEIxRDAwRTFGQkM5IC8qIFN0cnVjdHVyZVNldC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI0MzhBMjE5MjcwQjFEMDBFMUZCQzkgLyogU3Ry
dWN0dXJlU2V0LmNwcCAqLzsgfTsKKwkJMEZCNEZCNzMxQkM4NDMxNDAwMjVDQTVBIC8qIEZUTExh
enlTbG93UGF0aC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkI0RkI3MDFCQzg0MzE0MDAyNUNBNUEgLyogRlRMTGF6eVNsb3dQYXRoLmNwcCAqLzsg
fTsKKwkJMEZCNEZCNzQxQkM4NDMxNDAwMjVDQTVBIC8qIEZUTExhenlTbG93UGF0aC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCNEZCNzExQkM4NDMx
NDAwMjVDQTVBIC8qIEZUTExhenlTbG93UGF0aC5oICovOyB9OworCQkwRkI0RkI3NTFCQzg0MzE0
MDAyNUNBNUEgLyogRlRMTGF6eVNsb3dQYXRoQ2FsbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCNEZCNzIxQkM4NDMxNDAwMjVDQTVBIC8qIEZUTExh
enlTbG93UGF0aENhbGwuaCAqLzsgfTsKIAkJMEZCNTQ2NzcxNEY1OUI1QzAwMkMyOTg5IC8qIExh
enlPcGVyYW5kVmFsdWVQcm9maWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkI1NDY3NjE0RjU5QUQxMDAyQzI5ODkgLyogTGF6eU9wZXJhbmRWYWx1
ZVByb2ZpbGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQkwRkI1NDY3OTE0RjVDNDZCMDAyQzI5ODkgLyogTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCNTQ2
NzgxNEY1QzQ2ODAwMkMyOTg5IC8qIExhenlPcGVyYW5kVmFsdWVQcm9maWxlLmNwcCAqLzsgfTsK
IAkJMEZCNTQ2N0IxNEY1QzdFMTAwMkMyOTg5IC8qIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2Zp
bGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjU0
NjdBMTRGNUM3RDQwMDJDMjk4OSAvKiBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTIzNTMsNiAr
MjM1Niw5IEBACiAJCTBGQjRCNTFGMTZCNjI3NzIwMDNGNjk2QiAvKiBERkdOb2RlQWxsb2NhdG9y
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR05vZGVBbGxvY2F0b3IuaDsg
cGF0aCA9IGRmZy9ERkdOb2RlQWxsb2NhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGQjRCNTIxMTZCNjI3OEQwMDNGNjk2QiAvKiBGdW5jdGlvbkV4ZWN1dGFibGVEdW1wLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZ1bmN0aW9uRXhlY3V0YWJs
ZUR1bXAuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkI0QjUyMjE2QjYyNzhE
MDAzRjY5NkIgLyogRnVuY3Rpb25FeGVjdXRhYmxlRHVtcC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBGdW5jdGlvbkV4ZWN1dGFibGVEdW1wLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGQjRGQjcwMUJDODQzMTQwMDI1Q0E1QSAvKiBGVExMYXp5U2xvd1BhdGgu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRlRMTGF6eVNsb3dQYXRo
LmNwcDsgcGF0aCA9IGZ0bC9GVExMYXp5U2xvd1BhdGguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRkI0RkI3MTFCQzg0MzE0MDAyNUNBNUEgLyogRlRMTGF6eVNsb3dQYXRoLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTExhenlTbG93UGF0aC5oOyBwYXRo
ID0gZnRsL0ZUTExhenlTbG93UGF0aC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RkI0RkI3MjFCQzg0MzE0MDAyNUNBNUEgLyogRlRMTGF6eVNsb3dQYXRoQ2FsbC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExMYXp5U2xvd1BhdGhDYWxsLmg7IHBhdGggPSBm
dGwvRlRMTGF6eVNsb3dQYXRoQ2FsbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RkI1NDY3NjE0RjU5QUQxMDAyQzI5ODkgLyogTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZCNTQ2NzgxNEY1QzQ2ODAwMkMyOTg5IC8q
IExhenlPcGVyYW5kVmFsdWVQcm9maWxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IExhenlPcGVyYW5kVmFsdWVQcm9maWxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEZCNTQ2N0ExNEY1QzdENDAwMkMyOTg5IC8qIE1ldGhvZE9mR2V0dGluZ0FW
YWx1ZVByb2ZpbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWV0aG9kT2ZH
ZXR0aW5nQVZhbHVlUHJvZmlsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzk5
MSw2ICszOTk3LDkgQEAKIAkJCQkwRkQxMjAzMjFBOEM4NUJEMDAwRjUyODAgLyogRlRMSlNDYWxs
VmFyYXJncy5oICovLAogCQkJCTYyNzc0REE4MUI4RDRCMTkwMDA2RjA1QSAvKiBGVExKU1RhaWxD
YWxsLmNwcCAqLywKIAkJCQk2Mjc3NERBOTFCOEQ0QjE5MDAwNkYwNUEgLyogRlRMSlNUYWlsQ2Fs
bC5oICovLAorCQkJCTBGQjRGQjcwMUJDODQzMTQwMDI1Q0E1QSAvKiBGVExMYXp5U2xvd1BhdGgu
Y3BwICovLAorCQkJCTBGQjRGQjcxMUJDODQzMTQwMDI1Q0E1QSAvKiBGVExMYXp5U2xvd1BhdGgu
aCAqLywKKwkJCQkwRkI0RkI3MjFCQzg0MzE0MDAyNUNBNUEgLyogRlRMTGF6eVNsb3dQYXRoQ2Fs
bC5oICovLAogCQkJCTBGOEYyQjkzMTcyRTA0OUUwMDdEQkRBNSAvKiBGVExMaW5rLmNwcCAqLywK
IAkJCQkwRjhGMkI5NDE3MkUwNDlFMDA3REJEQTUgLyogRlRMTGluay5oICovLAogCQkJCTBGQ0VG
QUREMTgwNzM4QzAwMDQ3MkNFNCAvKiBGVExMb2NhdGlvbi5jcHAgKi8sCkBAIC02MjYyLDYgKzYy
NzEsNyBAQAogCQkJCTBGNjM5NDc4MTVEQ0UzNEIwMDZBNTk3QyAvKiBERkdTdHJ1Y3R1cmVBYnN0
cmFjdFZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjUwQUYzQzE5M0U4QjM5MDA2NzRFRTgg
LyogREZHU3RydWN0dXJlQ2xvYmJlclN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjc5MDg1
NjE5QTI5MEIyMDBGNjMxMEMgLyogREZHU3RydWN0dXJlUmVnaXN0cmF0aW9uUGhhc2UuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTBGQjRGQjc1MUJDODQzMTQwMDI1Q0E1QSAvKiBGVExMYXp5U2xvd1Bh
dGhDYWxsLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJGQ0NGRjE4QTYwMDcwMDAxQTI3RjggLyog
REZHVGhyZWFkRGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDMDk3QTIxNDZCMjhDQzAwQ0Yy
NDQyIC8qIERGR1RodW5rcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEOEEzMjgxN0Q1MUY1NzAw
Q0EyQzQwIC8qIERGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLApA
QCAtNjYyMCw2ICs2NjMwLDcgQEAKIAkJCQk3QzE4NEUxQjE3QkVEQkQzMDA3Q0I2M0EgLyogSlNQ
cm9taXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk3QzE4NEUyMzE3QkVFMjQwMDA3Q0I2M0EgLyog
SlNQcm9taXNlQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTdDMDA4Q0RCMTg3MTI0
QkIwMDk1NUMyNCAvKiBKU1Byb21pc2VEZWZlcnJlZC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZC
NEZCNzQxQkM4NDMxNDAwMjVDQTVBIC8qIEZUTExhenlTbG93UGF0aC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJN0MxODRFMUYxN0JFRTIyRTAwN0NCNjNBIC8qIEpTUHJvbWlzZVByb3RvdHlwZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMkEwNUFCRDYxOTYxREYyNDAwMzQxNzUwIC8qIEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTNFRjg4NzUxQjY2REYyMzAwM0Yy
NkNCIC8qIEpTUHJvcGVydHlOYW1lSXRlcmF0b3IuaCBpbiBIZWFkZXJzICovLApAQCAtODA1NCw2
ICs4MDY1LDcgQEAKIAkJCQkxNDQ2OURFQjEwN0VDN0U3MDA2NTA0NDYgLyogU3RyaW5nQ29uc3Ry
dWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNzBFQzBFQzYxQUEwRDdEQTAwQjZBQUZBIC8q
IFN0cmluZ0l0ZXJhdG9yUHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0NDY5REVD
MTA3RUM3RTcwMDY1MDQ0NiAvKiBTdHJpbmdPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
MEZCNEZCNzMxQkM4NDMxNDAwMjVDQTVBIC8qIEZUTExhenlTbG93UGF0aC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkxNDQ2OURFRDEwN0VDN0U3MDA2NTA0NDYgLyogU3RyaW5nUHJvdG90eXBlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTkzMzVGMjREMTJFNjc2NUIwMDJCNTU1MyAvKiBTdHJpbmdS
ZWN1cnNpb25DaGVja2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDREUzQjQzMEU2QzgzMkQw
MDE0NTNBNyAvKiBTdHJ1Y3R1cmUuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJs
ZXIuaAkocmV2aXNpb24gMTkwNzQ5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcg
QEAKICNpbmNsdWRlICJPcHRpb25zLmgiCiAjaW5jbHVkZSA8d3RmL0NyeXB0b2dyYXBoaWNhbGx5
UmFuZG9tTnVtYmVyLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8
d3RmL1NoYXJlZFRhc2suaD4KICNpbmNsdWRlIDx3dGYvV2Vha1JhbmRvbS5oPgogCiAjaWYgRU5B
QkxFKEFTU0VNQkxFUikKQEAgLTEwMDQsNiArMTAwNSwxNyBAQCBwdWJsaWM6CiAgICAgICAgIEFz
c2VtYmxlclR5cGU6OnJlcGxhY2VXaXRoQWRkcmVzc0NvbXB1dGF0aW9uKGxhYmVsLmRhdGFMb2Nh
dGlvbigpKTsKICAgICB9CiAKKyAgICB2b2lkIGFkZExpbmtUYXNrKFJlZlB0cjxTaGFyZWRUYXNr
PHZvaWQoTGlua0J1ZmZlciYpPj4gdGFzaykKKyAgICB7CisgICAgICAgIG1fbGlua1Rhc2tzLmFw
cGVuZCh0YXNrKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAg
IHZvaWQgYWRkTGlua1Rhc2soY29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB7CisgICAgICAg
IG1fbGlua1Rhc2tzLmFwcGVuZChjcmVhdGVTaGFyZWRUYXNrPHZvaWQoTGlua0J1ZmZlciYpPihm
dW5jdG9yKSk7CisgICAgfQorCiBwcm90ZWN0ZWQ6CiAgICAgQWJzdHJhY3RNYWNyb0Fzc2VtYmxl
cigpCiAgICAgICAgIDogbV9yYW5kb21Tb3VyY2UoY3J5cHRvZ3JhcGhpY2FsbHlSYW5kb21OdW1i
ZXIoKSkKQEAgLTEwOTksMTAgKzExMTEsOSBAQCBwcm90ZWN0ZWQ6CiAKICAgICB1bnNpZ25lZCBt
X3RlbXBSZWdpc3RlcnNWYWxpZEJpdHM7CiAKLSAgICBmcmllbmQgY2xhc3MgTGlua0J1ZmZlcjsK
LQotcHJpdmF0ZToKKyAgICBWZWN0b3I8UmVmUHRyPFNoYXJlZFRhc2s8dm9pZChMaW5rQnVmZmVy
Jik+Pj4gbV9saW5rVGFza3M7CiAKKyAgICBmcmllbmQgY2xhc3MgTGlua0J1ZmZlcjsKIH07IC8v
IGNsYXNzIEFic3RyYWN0TWFjcm9Bc3NlbWJsZXIKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5jcHAJKHJl
dmlzaW9uIDE5MDc0OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1
ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5Myw2ICsxOTMsOSBAQCB2b2lkIExpbmtCdWZm
ZXI6OmxpbmtDb2RlKE1hY3JvQXNzZW1ibGVyCiAjZWxpZiBDUFUoQVJNNjQpCiAgICAgY29weUNv
bXBhY3RBbmRMaW5rQ29kZTx1aW50MzJfdD4obWFjcm9Bc3NlbWJsZXIsIG93bmVyVUlELCBlZmZv
cnQpOwogI2VuZGlmCisKKyAgICBmb3IgKGF1dG8mIHRhc2sgOiBtYWNyb0Fzc2VtYmxlci5tX2xp
bmtUYXNrcykKKyAgICAgICAgdGFzay0+cnVuKCp0aGlzKTsKIH0KIAogdm9pZCBMaW5rQnVmZmVy
OjphbGxvY2F0ZShzaXplX3QgaW5pdGlhbFNpemUsIHZvaWQqIG93bmVyVUlELCBKSVRDb21waWxh
dGlvbkVmZm9ydCBlZmZvcnQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVy
L0xpbmtCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1i
bGVyL0xpbmtCdWZmZXIuaAkocmV2aXNpb24gMTkwNzQ5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTI1OSw2ICsyNTks
OCBAQCBwdWJsaWM6CiAgICAgYm9vbCB3YXNBbHJlYWR5RGlzYXNzZW1ibGVkKCkgY29uc3QgeyBy
ZXR1cm4gbV9hbHJlYWR5RGlzYXNzZW1ibGVkOyB9CiAgICAgdm9pZCBkaWRBbHJlYWR5RGlzYXNz
ZW1ibGUoKSB7IG1fYWxyZWFkeURpc2Fzc2VtYmxlZCA9IHRydWU7IH0KIAorICAgIFZNJiB2bSgp
IHsgcmV0dXJuICptX3ZtOyB9CisKIHByaXZhdGU6CiAjaWYgRU5BQkxFKEJSQU5DSF9DT01QQUNU
SU9OKQogICAgIGludCBleGVjdXRhYmxlT2Zmc2V0Rm9yKGludCBsb2NhdGlvbikKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uaAkocmV2aXNpb24gMTkw
NzQ5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uaAkod29y
a2luZyBjb3B5KQpAQCAtNzQsNyArNzQsNyBAQCBzdHJ1Y3QgQ29kZU9yaWdpbiB7CiAgICAgfQog
ICAgIAogICAgIGJvb2wgaXNTZXQoKSBjb25zdCB7IHJldHVybiBieXRlY29kZUluZGV4ICE9IGlu
dmFsaWRCeXRlY29kZUluZGV4OyB9Ci0gICAgYm9vbCBvcGVyYXRvciEoKSBjb25zdCB7IHJldHVy
biAhaXNTZXQoKTsgfQorICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVy
biAhaXNTZXQoKTsgfQogICAgIAogICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBj
b25zdAogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21waWxlLmNw
cAkocmV2aXNpb24gMTkwNzQ5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExDb21w
aWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMzLDcgKzMzMyw3IEBAIHN0YXRpYyB2b2lkIGZp
eEZ1bmN0aW9uQmFzZWRPblN0YWNrTWFwcygKIHsKICAgICBHcmFwaCYgZ3JhcGggPSBzdGF0ZS5n
cmFwaDsKICAgICBWTSYgdm0gPSBncmFwaC5tX3ZtOwotICAgIFN0YWNrTWFwcyBzdGFja21hcHMg
PSBqaXRDb2RlLT5zdGFja21hcHM7CisgICAgU3RhY2tNYXBzJiBzdGFja21hcHMgPSBqaXRDb2Rl
LT5zdGFja21hcHM7CiAgICAgCiAgICAgaW50IGxvY2Fsc09mZnNldCA9IG9mZnNldE9mU3RhY2tS
ZWdpb24ocmVjb3JkTWFwLCBzdGF0ZS5jYXB0dXJlZFN0YWNrbWFwSUQpICsgZ3JhcGgubV9uZXh0
TWFjaGluZUxvY2FsOwogICAgIGludCB2YXJhcmdzU3BpbGxTbG90c09mZnNldCA9IG9mZnNldE9m
U3RhY2tSZWdpb24ocmVjb3JkTWFwLCBzdGF0ZS52YXJhcmdzU3BpbGxTbG90c1N0YWNrbWFwSUQp
OwpAQCAtNDM5LDcgKzQzOSwxMCBAQCBzdGF0aWMgdm9pZCBmaXhGdW5jdGlvbkJhc2VkT25TdGFj
a01hcHMoCiAgICAgICAgIHN0YXRlLmZpbmFsaXplci0+ZXhpdFRodW5rc0xpbmtCdWZmZXIgPSBX
VEY6Om1vdmUobGlua0J1ZmZlcik7CiAgICAgfQogCi0gICAgaWYgKCFzdGF0ZS5nZXRCeUlkcy5p
c0VtcHR5KCkgfHwgIXN0YXRlLnB1dEJ5SWRzLmlzRW1wdHkoKSB8fCAhc3RhdGUuY2hlY2tJbnMu
aXNFbXB0eSgpKSB7CisgICAgaWYgKCFzdGF0ZS5nZXRCeUlkcy5pc0VtcHR5KCkKKyAgICAgICAg
fHwgIXN0YXRlLnB1dEJ5SWRzLmlzRW1wdHkoKQorICAgICAgICB8fCAhc3RhdGUuY2hlY2tJbnMu
aXNFbXB0eSgpCisgICAgICAgIHx8ICFzdGF0ZS5sYXp5U2xvd1BhdGhzLmlzRW1wdHkoKSkgewog
ICAgICAgICBDQ2FsbEhlbHBlcnMgc2xvd1BhdGhKSVQoJnZtLCBjb2RlQmxvY2spOwogICAgICAg
ICAKICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBleGNlcHRpb25UYXJnZXQ7CkBAIC00
NzMsNyArNDc2LDggQEAgc3RhdGljIHZvaWQgZml4RnVuY3Rpb25CYXNlZE9uU3RhY2tNYXBzKAog
CiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCA9IGNhbGxPcGVyYXRp
b24oCiAgICAgICAgICAgICAgICAgICAgIHN0YXRlLCB1c2VkUmVnaXN0ZXJzLCBzbG93UGF0aEpJ
VCwgY29kZU9yaWdpbiwgJmV4Y2VwdGlvblRhcmdldCwKLSAgICAgICAgICAgICAgICAgICAgb3Bl
cmF0aW9uR2V0QnlJZE9wdGltaXplLCByZXN1bHQsIGdlbi5zdHViSW5mbygpLCBiYXNlLCBnZXRC
eUlkLnVpZCgpKTsKKyAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXpl
LCByZXN1bHQsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihnZW4uc3R1YkluZm8oKSksCisg
ICAgICAgICAgICAgICAgICAgIGJhc2UsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihnZXRC
eUlkLnVpZCgpKSk7CiAKICAgICAgICAgICAgICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGJl
Z2luLCBjYWxsKTsKIApAQCAtNTExLDcgKzUxNSw5IEBAIHN0YXRpYyB2b2lkIGZpeEZ1bmN0aW9u
QmFzZWRPblN0YWNrTWFwcygKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBNYWNy
b0Fzc2VtYmxlcjo6Q2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbigKICAgICAgICAgICAgICAgICAg
ICAgc3RhdGUsIHVzZWRSZWdpc3RlcnMsIHNsb3dQYXRoSklULCBjb2RlT3JpZ2luLCAmZXhjZXB0
aW9uVGFyZ2V0LAotICAgICAgICAgICAgICAgICAgICBnZW4uc2xvd1BhdGhGdW5jdGlvbigpLCBn
ZW4uc3R1YkluZm8oKSwgdmFsdWUsIGJhc2UsIHB1dEJ5SWQudWlkKCkpOworICAgICAgICAgICAg
ICAgICAgICBnZW4uc2xvd1BhdGhGdW5jdGlvbigpLCBJbnZhbGlkR1BSUmVnLAorICAgICAgICAg
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLCB2
YWx1ZSwgYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
UHRyKHB1dEJ5SWQudWlkKCkpKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBn
ZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGJlZ2luLCBjYWxsKTsKICAgICAgICAgICAgICAgICAKQEAg
LTU0OSwxMyArNTU1LDU3IEBAIHN0YXRpYyB2b2lkIGZpeEZ1bmN0aW9uQmFzZWRPblN0YWNrTWFw
cygKIAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIHNsb3dDYWxsID0gY2Fs
bE9wZXJhdGlvbigKICAgICAgICAgICAgICAgICAgICAgc3RhdGUsIHVzZWRSZWdpc3RlcnMsIHNs
b3dQYXRoSklULCBjb2RlT3JpZ2luLCAmZXhjZXB0aW9uVGFyZ2V0LAotICAgICAgICAgICAgICAg
ICAgICBvcGVyYXRpb25Jbk9wdGltaXplLCByZXN1bHQsIHN0dWJJbmZvLCBvYmosIGNoZWNrSW4u
bV91aWQpOworICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25Jbk9wdGltaXplLCByZXN1bHQs
IENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihzdHViSW5mbyksIG9iaiwKKyAgICAgICAgICAg
ICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGNoZWNrSW4udWlkKCkpKTsKIAog
ICAgICAgICAgICAgICAgIGNoZWNrSW4ubV9zbG93UGF0aERvbmUuYXBwZW5kKHNsb3dQYXRoSklU
Lmp1bXAoKSk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgY2hlY2tJbi5tX2dl
bmVyYXRvcnMuYXBwZW5kKENoZWNrSW5HZW5lcmF0b3Ioc3R1YkluZm8sIHNsb3dDYWxsLCBiZWdp
bikpOwogICAgICAgICAgICAgfQogICAgICAgICB9CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gc3RhdGUubGF6eVNsb3dQYXRocy5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgIExhenlT
bG93UGF0aERlc2NyaXB0b3ImIGRlc2NyaXB0b3IgPSBzdGF0ZS5sYXp5U2xvd1BhdGhzW2ldOwor
CisgICAgICAgICAgICBpZiAodmVyYm9zZUNvbXBpbGF0aW9uRW5hYmxlZCgpKQorICAgICAgICAg
ICAgICAgIGRhdGFMb2coIkhhbmRsaW5nIGxhenlTbG93UGF0aCBzdGFja21hcCAjIiwgZGVzY3Jp
cHRvci5zdGFja21hcElEKCksICJcbiIpOworCisgICAgICAgICAgICBhdXRvIGl0ZXIgPSByZWNv
cmRNYXAuZmluZChkZXNjcmlwdG9yLnN0YWNrbWFwSUQoKSk7CisgICAgICAgICAgICBpZiAoaXRl
ciA9PSByZWNvcmRNYXAuZW5kKCkpIHsKKyAgICAgICAgICAgICAgICAvLyBJdCB3YXMgb3B0aW1p
emVkIG91dC4KKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGl0ZXItPnZhbHVlLnNpemUoKTsgKytp
KSB7CisgICAgICAgICAgICAgICAgU3RhY2tNYXBzOjpSZWNvcmQmIHJlY29yZCA9IGl0ZXItPnZh
bHVlW2ldOworICAgICAgICAgICAgICAgIFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3RlcnMgPSB1c2Vk
UmVnaXN0ZXJzRm9yKHJlY29yZCk7CisgICAgICAgICAgICAgICAgVmVjdG9yPExvY2F0aW9uPiBs
b2NhdGlvbnM7CisgICAgICAgICAgICAgICAgZm9yIChhdXRvIGxvY2F0aW9uIDogcmVjb3JkLmxv
Y2F0aW9ucykKKyAgICAgICAgICAgICAgICAgICAgbG9jYXRpb25zLmFwcGVuZChMb2NhdGlvbjo6
Zm9yU3RhY2ttYXBzKCZzdGFja21hcHMsIGxvY2F0aW9uKSk7CisKKyAgICAgICAgICAgICAgICBj
aGFyKiBzdGFydE9mSUMgPQorICAgICAgICAgICAgICAgICAgICBiaXR3aXNlX2Nhc3Q8Y2hhcio+
KGdlbmVyYXRlZEZ1bmN0aW9uKSArIHJlY29yZC5pbnN0cnVjdGlvbk9mZnNldDsKKyAgICAgICAg
ICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCBwYXRjaHBvaW50KChNYWNyb0Fzc2VtYmxlckNvZGVQ
dHIoc3RhcnRPZklDKSkpOworICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIGV4Y2Vw
dGlvblRhcmdldCA9CisgICAgICAgICAgICAgICAgICAgIHN0YXRlLmZpbmFsaXplci0+aGFuZGxl
RXhjZXB0aW9uc0xpbmtCdWZmZXItPmVudHJ5cG9pbnQoKTsKKworICAgICAgICAgICAgICAgIHN0
ZDo6dW5pcXVlX3B0cjxMYXp5U2xvd1BhdGg+IGxhenlTbG93UGF0aCA9IHN0ZDo6bWFrZV91bmlx
dWU8TGF6eVNsb3dQYXRoPigKKyAgICAgICAgICAgICAgICAgICAgcGF0Y2hwb2ludCwgZXhjZXB0
aW9uVGFyZ2V0LCB1c2VkUmVnaXN0ZXJzLCBkZXNjcmlwdG9yLmNhbGxTaXRlSW5kZXgoKSwKKyAg
ICAgICAgICAgICAgICAgICAgZGVzY3JpcHRvci5tX2xpbmtlci0+cnVuKGxvY2F0aW9ucykpOwor
CisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpMYWJlbCBiZWdpbiA9IHNsb3dQYXRoSklU
LmxhYmVsKCk7CisKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgcHVz
aGluZyB0aGUgbGF6eSBzbG93IHBhdGggaW5kZXggaW4gc29tZSB2ZWN0b3Igb3Igd2hhdGV2ZXIu
CisgICAgICAgICAgICAgICAgc2xvd1BhdGhKSVQucHVzaFRvU2F2ZUltbWVkaWF0ZVdpdGhvdXRU
b3VjaGluZ1JlZ2lzdGVycygKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVz
dGVkSW1tMzIoc3RhdGUuaml0Q29kZS0+bGF6eVNsb3dQYXRocy5zaXplKCkpKTsKKyAgICAgICAg
ICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgZ2VuZXJhdG9ySnVtcCA9IHNsb3dQYXRoSklULmp1
bXAoKTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBkZXNjcmlwdG9yLm1fZ2Vu
ZXJhdG9ycy5hcHBlbmQoc3RkOjptYWtlX3R1cGxlKGxhenlTbG93UGF0aC5nZXQoKSwgYmVnaW4p
KTsKKworICAgICAgICAgICAgICAgIHN0YXRlLmppdENvZGUtPmxhenlTbG93UGF0aHMuYXBwZW5k
KFdURjo6bW92ZShsYXp5U2xvd1BhdGgpKTsKKyAgICAgICAgICAgICAgICBzdGF0ZS5maW5hbGl6
ZXItPmxhenlTbG93UGF0aEdlbmVyYXRvckp1bXBzLmFwcGVuZChnZW5lcmF0b3JKdW1wKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQogICAgICAgICAKICAgICAgICAgZXhjZXB0aW9uVGFyZ2V0
LmxpbmsoJnNsb3dQYXRoSklUKTsKICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZXhjZXB0
aW9uSnVtcCA9IHNsb3dQYXRoSklULmp1bXAoKTsKQEAgLTU3OCwxMiArNjI4LDE5IEBAIHN0YXRp
YyB2b2lkIGZpeEZ1bmN0aW9uQmFzZWRPblN0YWNrTWFwcygKICAgICAgICAgICAgICAgICBzdGF0
ZSwgY29kZUJsb2NrLCBnZW5lcmF0ZWRGdW5jdGlvbiwgcmVjb3JkTWFwLCBzdGF0ZS5wdXRCeUlk
c1tpXSwKICAgICAgICAgICAgICAgICBzaXplT2ZQdXRCeUlkKCkpOwogICAgICAgICB9Ci0KICAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gc3RhdGUuY2hlY2tJbnMuc2l6ZSgpOyBpLS07KSB7CiAg
ICAgICAgICAgICBnZW5lcmF0ZUNoZWNrSW5JQ0Zhc3RQYXRoKAogICAgICAgICAgICAgICAgIHN0
YXRlLCBjb2RlQmxvY2ssIGdlbmVyYXRlZEZ1bmN0aW9uLCByZWNvcmRNYXAsIHN0YXRlLmNoZWNr
SW5zW2ldLAogICAgICAgICAgICAgICAgIHNpemVPZkluKCkpOyAKLSAgICAgICAgfSAKKyAgICAg
ICAgfQorICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBzdGF0ZS5sYXp5U2xvd1BhdGhzLnNpemUo
KTsgaS0tOykgeworICAgICAgICAgICAgTGF6eVNsb3dQYXRoRGVzY3JpcHRvciYgbGF6eVNsb3dQ
YXRoID0gc3RhdGUubGF6eVNsb3dQYXRoc1tpXTsKKyAgICAgICAgICAgIGZvciAoYXV0byYgdHVw
bGUgOiBsYXp5U2xvd1BhdGgubV9nZW5lcmF0b3JzKSB7CisgICAgICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OnJlcGxhY2VXaXRoSnVtcCgKKyAgICAgICAgICAgICAgICAgICAgc3RkOjpnZXQ8
MD4odHVwbGUpLT5wYXRjaHBvaW50KCksCisgICAgICAgICAgICAgICAgICAgIHN0YXRlLmZpbmFs
aXplci0+c2lkZUNvZGVMaW5rQnVmZmVyLT5sb2NhdGlvbk9mKHN0ZDo6Z2V0PDE+KHR1cGxlKSkp
OworICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAgfQogICAgIAogICAgIGFkanVzdENhbGxJ
Q3NGb3JTdGFja21hcHMoc3RhdGUuanNDYWxscywgcmVjb3JkTWFwKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMSW5saW5lQ2FjaGVEZXNjcmlwdG9yLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbmxpbmVDYWNoZURlc2NyaXB0b3IuaAko
cmV2aXNpb24gMTkwNzQ5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbmxpbmVD
YWNoZURlc2NyaXB0b3IuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yOSwxMiArMjksMTUgQEAKICNp
ZiBFTkFCTEUoRlRMX0pJVCkKIAogI2luY2x1ZGUgIkNvZGVPcmlnaW4uaCIKKyNpbmNsdWRlICJG
VExMYXp5U2xvd1BhdGguaCIKICNpbmNsdWRlICJKSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oIgog
I2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvVW5pcXVlZFN0
cmluZ0ltcGwuaD4KIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewogCitjbGFzcyBM
b2NhdGlvbjsKKwogY2xhc3MgSW5saW5lQ2FjaGVEZXNjcmlwdG9yIHsKIHB1YmxpYzoKICAgICBJ
bmxpbmVDYWNoZURlc2NyaXB0b3IoKSAKQEAgLTExMywxNyArMTE2LDQzIEBAIGNsYXNzIENoZWNr
SW5EZXNjcmlwdG9yIDogcHVibGljIElubGluZUMKIHB1YmxpYzoKICAgICBDaGVja0luRGVzY3Jp
cHRvcigpIHsgfQogICAgIAotICAgIENoZWNrSW5EZXNjcmlwdG9yKHVuc2lnbmVkIHN0YWNrbWFw
SUQsIENhbGxTaXRlSW5kZXggY2FsbFNpdGUsIGNvbnN0IFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQp
Ci0gICAgICAgIDogSW5saW5lQ2FjaGVEZXNjcmlwdG9yKHN0YWNrbWFwSUQsIGNhbGxTaXRlLCBu
dWxscHRyKQotICAgICAgICAsIG1fdWlkKHVpZCkKKyAgICBDaGVja0luRGVzY3JpcHRvcih1bnNp
Z25lZCBzdGFja21hcElELCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlLCBVbmlxdWVkU3RyaW5nSW1w
bCogdWlkKQorICAgICAgICA6IElubGluZUNhY2hlRGVzY3JpcHRvcihzdGFja21hcElELCBjYWxs
U2l0ZSwgdWlkKQogICAgIHsKICAgICB9Ci0KICAgICAKLSAgICBjb25zdCBVbmlxdWVkU3RyaW5n
SW1wbCogbV91aWQ7CiAgICAgVmVjdG9yPENoZWNrSW5HZW5lcmF0b3I+IG1fZ2VuZXJhdG9yczsK
IH07CiAKKy8vIFlvdSBjYW4gY3JlYXRlIGEgbGF6eSBzbG93IHBhdGggY2FsbCBpbiBsb3dlckRG
R1RvTExWTSBieSBkb2luZzoKKy8vIG1fZnRsU3RhdGUubGF6eVNsb3dQYXRocy5hcHBlbmQoCisv
LyAgICAgTGF6eVNsb3dQYXRoRGVzY3JpcHRvcigKKy8vICAgICAgICAgc3RhY2ttYXBJRCwgY2Fs
bFNpdGVJbmRleCwKKy8vICAgICAgICAgY3JlYXRlU2hhcmVkVGFzazxSZWZQdHI8TGF6eVNsb3dQ
YXRoOjpHZW5lcmF0b3I+KGNvbnN0IFZlY3RvcjxMb2NhdGlvbj4mKT4oCisvLyAgICAgICAgICAg
ICBbXSAoY29uc3QgVmVjdG9yPExvY2F0aW9uPiYgbG9jYXRpb25zKSAtPiBSZWZQdHI8TGF6eVNs
b3dQYXRoOjpHZW5lcmF0b3I+IHsKKy8vICAgICAgICAgICAgICAgICAvLyBUaGlzIGxhbWJkYSBz
aG91bGQganVzdCByZWNvcmQgdGhlIHJlZ2lzdGVycyB0aGF0IHdlIHdpbGwgYmUgdXNpbmcsIGFu
ZCByZXR1cm4KKy8vICAgICAgICAgICAgICAgICAvLyBhIFNoYXJlZFRhc2sgdGhhdCB3aWxsIGFj
dHVhbGx5IGdlbmVyYXRlIHRoZSBzbG93IHBhdGguCisvLyAgICAgICAgICAgICAgICAgcmV0dXJu
IGNyZWF0ZUxhenlDYWxsR2VuZXJhdG9yKAorLy8gICAgICAgICAgICAgICAgICAgICBmdW5jdGlv
biwgbG9jYXRpb25zWzBdLmRpcmVjdEdQUigpLCBsb2NhdGlvbnNbMV0uZGlyZWN0R1BSKCkpOwor
Ly8gICAgICAgICAgICAgfSkpKTsKK3R5cGVkZWYgUmVmUHRyPExhenlTbG93UGF0aDo6R2VuZXJh
dG9yPiBMYXp5U2xvd1BhdGhMaW5rZXJGdW5jdGlvbihjb25zdCBWZWN0b3I8TG9jYXRpb24+Jik7
Cit0eXBlZGVmIFNoYXJlZFRhc2s8TGF6eVNsb3dQYXRoTGlua2VyRnVuY3Rpb24+IExhenlTbG93
UGF0aExpbmtlclRhc2s7CitjbGFzcyBMYXp5U2xvd1BhdGhEZXNjcmlwdG9yIDogcHVibGljIElu
bGluZUNhY2hlRGVzY3JpcHRvciB7CitwdWJsaWM6CisgICAgTGF6eVNsb3dQYXRoRGVzY3JpcHRv
cigpIHsgfQorCisgICAgTGF6eVNsb3dQYXRoRGVzY3JpcHRvcigKKyAgICAgICAgdW5zaWduZWQg
c3RhY2ttYXBJRCwgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZSwKKyAgICAgICAgUmVmUHRyPExhenlT
bG93UGF0aExpbmtlclRhc2s+IGxpbmtlcikKKyAgICAgICAgOiBJbmxpbmVDYWNoZURlc2NyaXB0
b3Ioc3RhY2ttYXBJRCwgY2FsbFNpdGUsIG51bGxwdHIpCisgICAgICAgICwgbV9saW5rZXIobGlu
a2VyKQorICAgIHsKKyAgICB9CisKKyAgICBWZWN0b3I8c3RkOjp0dXBsZTxMYXp5U2xvd1BhdGgq
LCBDQ2FsbEhlbHBlcnM6OkxhYmVsPj4gbV9nZW5lcmF0b3JzOworCisgICAgUmVmUHRyPExhenlT
bG93UGF0aExpbmtlclRhc2s+IG1fbGlua2VyOworfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBKU0M6
OkZUTAogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVENvZGUuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVENvZGUuaAkocmV2aXNp
b24gMTkwNzQ5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRDb2RlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgIkRGR0NvbW1vbkRhdGEu
aCIKICNpbmNsdWRlICJGVExEYXRhU2VjdGlvbi5oIgorI2luY2x1ZGUgIkZUTExhenlTbG93UGF0
aC5oIgogI2luY2x1ZGUgIkZUTE9TUkV4aXQuaCIKICNpbmNsdWRlICJGVExTdGFja01hcHMuaCIK
ICNpbmNsdWRlICJGVExVbndpbmRJbmZvLmgiCkBAIC04Niw2ICs4Nyw3IEBAIHB1YmxpYzoKICAg
ICBERkc6OkNvbW1vbkRhdGEgY29tbW9uOwogICAgIFNlZ21lbnRlZFZlY3RvcjxPU1JFeGl0LCA4
PiBvc3JFeGl0OwogICAgIFN0YWNrTWFwcyBzdGFja21hcHM7CisgICAgVmVjdG9yPHN0ZDo6dW5p
cXVlX3B0cjxMYXp5U2xvd1BhdGg+PiBsYXp5U2xvd1BhdGhzOwogICAgIAogcHJpdmF0ZToKICAg
ICBWZWN0b3I8UmVmUHRyPERhdGFTZWN0aW9uPj4gbV9kYXRhU2VjdGlvbnM7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVEZpbmFsaXplci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRGaW5hbGl6ZXIuY3BwCShyZXZpc2lvbiAx
OTA3NDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVEZpbmFsaXplci5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTExMiw2ICsxMTIsMTMgQEAgYm9vbCBKSVRGaW5hbGl6ZXI6OmZp
bmFsaXplRnVuY3Rpb24oKQogICAgICAgICAgICAgICAgIGNhbGwuY2FsbCgpLAogICAgICAgICAg
ICAgICAgIENvZGVMb2NhdGlvbkxhYmVsKG1fcGxhbi52bS5mdGxUaHVua3MtPmdldFNsb3dQYXRo
Q2FsbFRodW5rKG1fcGxhbi52bSwgY2FsbC5rZXkoKSkuY29kZSgpKSk7CiAgICAgICAgIH0KKwor
ICAgICAgICBmb3IgKENDYWxsSGVscGVyczo6SnVtcCBqdW1wIDogbGF6eVNsb3dQYXRoR2VuZXJh
dG9ySnVtcHMpIHsKKyAgICAgICAgICAgIHNpZGVDb2RlTGlua0J1ZmZlci0+bGluaygKKyAgICAg
ICAgICAgICAgICBqdW1wLAorICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsKAorICAg
ICAgICAgICAgICAgICAgICBtX3BsYW4udm0uZ2V0Q1RJU3R1YihsYXp5U2xvd1BhdGhHZW5lcmF0
aW9uVGh1bmtHZW5lcmF0b3IpLmNvZGUoKSkpOworICAgICAgICB9CiAgICAgICAgIAogICAgICAg
ICBqaXRDb2RlLT5hZGRIYW5kbGUoRklOQUxJWkVfREZHX0NPREUoCiAgICAgICAgICAgICAqc2lk
ZUNvZGVMaW5rQnVmZmVyLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRG
aW5hbGl6ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJ
VEZpbmFsaXplci5oCShyZXZpc2lvbiAxOTA3NDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTEpJVEZpbmFsaXplci5oCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw2ICs2Nyw3IEBAIHB1
YmxpYzoKICAgICBWZWN0b3I8T3V0T2ZMaW5lQ29kZUluZm8+IG91dE9mTGluZUNvZGVJbmZvczsK
ICAgICBWZWN0b3I8U2xvd1BhdGhDYWxsPiBzbG93UGF0aENhbGxzOyAvLyBDYWxscyBpbnNpZGUg
dGhlIHNpZGUgY29kZS4KICAgICBWZWN0b3I8T1NSRXhpdENvbXBpbGF0aW9uSW5mbz4gb3NyRXhp
dDsKKyAgICBWZWN0b3I8Q0NhbGxIZWxwZXJzOjpKdW1wPiBsYXp5U2xvd1BhdGhHZW5lcmF0b3JK
dW1wczsKICAgICBHZW5lcmF0ZWRGdW5jdGlvbiBmdW5jdGlvbjsKICAgICBSZWZQdHI8SklUQ29k
ZT4gaml0Q29kZTsKIH07CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExhenlT
bG93UGF0aC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExM
YXp5U2xvd1BhdGguY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExMYXp5U2xvd1BhdGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNzQgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkZUTExhenlTbG93UGF0aC5oIgorCisjaW5jbHVkZSAiRlRMU2xv
d1BhdGhDYWxsLmgiCisjaW5jbHVkZSAiTGlua0J1ZmZlci5oIgorCituYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEZUTCB7CisKK0xhenlTbG93UGF0aDo6TGF6eVNsb3dQYXRoKAorICAgIENvZGVM
b2NhdGlvbkxhYmVsIHBhdGNocG9pbnQsIENvZGVMb2NhdGlvbkxhYmVsIGV4Y2VwdGlvblRhcmdl
dCwKKyAgICBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywgQ2FsbFNpdGVJbmRleCBj
YWxsU2l0ZUluZGV4LCBSZWZQdHI8R2VuZXJhdG9yPiBnZW5lcmF0b3IpCisgICAgOiBtX3BhdGNo
cG9pbnQocGF0Y2hwb2ludCkKKyAgICAsIG1fZXhjZXB0aW9uVGFyZ2V0KGV4Y2VwdGlvblRhcmdl
dCkKKyAgICAsIG1fdXNlZFJlZ2lzdGVycyh1c2VkUmVnaXN0ZXJzKQorICAgICwgbV9jYWxsU2l0
ZUluZGV4KGNhbGxTaXRlSW5kZXgpCisgICAgLCBtX2dlbmVyYXRvcihnZW5lcmF0b3IpCit7Cit9
CisKK0xhenlTbG93UGF0aDo6fkxhenlTbG93UGF0aCgpCit7Cit9CisKK3ZvaWQgTGF6eVNsb3dQ
YXRoOjpnZW5lcmF0ZShDb2RlQmxvY2sqIGNvZGVCbG9jaykKK3sKKyAgICBSRUxFQVNFX0FTU0VS
VCghbV9zdHViKTsKKworICAgIFZNJiB2bSA9ICpjb2RlQmxvY2stPnZtKCk7CisKKyAgICBDQ2Fs
bEhlbHBlcnMgaml0KCZ2bSwgY29kZUJsb2NrKTsKKyAgICBHZW5lcmF0aW9uUGFyYW1zIHBhcmFt
czsKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IGV4Y2VwdGlvbkp1bXBzOworICAgIHBhcmFt
cy5leGNlcHRpb25KdW1wcyA9IG1fZXhjZXB0aW9uVGFyZ2V0ID8gJmV4Y2VwdGlvbkp1bXBzIDog
bnVsbHB0cjsKKyAgICBwYXJhbXMubGF6eVNsb3dQYXRoID0gdGhpczsKKyAgICBtX2dlbmVyYXRv
ci0+cnVuKGppdCwgcGFyYW1zKTsKKworICAgIExpbmtCdWZmZXIgbGlua0J1ZmZlcih2bSwgaml0
LCBjb2RlQmxvY2ssIEpJVENvbXBpbGF0aW9uTXVzdFN1Y2NlZWQpOworICAgIGxpbmtCdWZmZXIu
bGluaygKKyAgICAgICAgcGFyYW1zLmRvbmVKdW1wcywgbV9wYXRjaHBvaW50LmxhYmVsQXRPZmZz
ZXQoTWFjcm9Bc3NlbWJsZXI6Om1heEp1bXBSZXBsYWNlbWVudFNpemUoKSkpOworICAgIGlmICht
X2V4Y2VwdGlvblRhcmdldCkKKyAgICAgICAgbGlua0J1ZmZlci5saW5rKGV4Y2VwdGlvbkp1bXBz
LCBtX2V4Y2VwdGlvblRhcmdldCk7CisgICAgbV9zdHViID0gRklOQUxJWkVfQ09ERV9GT1IoY29k
ZUJsb2NrLCBsaW5rQnVmZmVyLCAoIkxhenkgc2xvdyBwYXRoIGNhbGwgc3R1YiIpKTsKKworICAg
IE1hY3JvQXNzZW1ibGVyOjpyZXBsYWNlV2l0aEp1bXAobV9wYXRjaHBvaW50LCBDb2RlTG9jYXRp
b25MYWJlbChtX3N0dWIuY29kZSgpKSk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwK
KworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExhenlTbG93UGF0aC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTGF6eVNsb3dQYXRoLmgJ
KHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExhenlTbG93UGF0
aC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsODYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBGVExMYXp5U2xvd1BhdGhfaAorI2Rl
ZmluZSBGVExMYXp5U2xvd1BhdGhfaAorCisjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCisjaW5j
bHVkZSAiQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiQ29kZUxvY2F0aW9uLmgiCisjaW5jbHVkZSAi
R1BSSW5mby5oIgorI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyQ29kZVJlZi5oIgorI2luY2x1ZGUg
IlJlZ2lzdGVyU2V0LmgiCisjaW5jbHVkZSA8d3RmL1NoYXJlZFRhc2suaD4KKworbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBGVEwgeworCitjbGFzcyBMYXp5U2xvd1BhdGggeworICAgIFdURl9N
QUtFX05PTkNPUFlBQkxFKExhenlTbG93UGF0aCk7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CitwdWJsaWM6CisgICAgc3RydWN0IEdlbmVyYXRpb25QYXJhbXMgeworICAgICAgICAvLyBF
eHRyYSBwYXJhbWV0ZXJzIHRvIHRoZSBHZW5lcmF0b3JGdW5jdGlvbiBhcmUgbWFkZSBpbnRvIGZp
ZWxkcyBvZiB0aGlzIHN0cnVjdCwgc28gdGhhdCBpZgorICAgICAgICAvLyB3ZSBhZGQgbmV3IHBh
cmFtZXRlcnMsIHdlIGRvbid0IGhhdmUgdG8gY2hhbmdlIGFsbCBvZiB0aGUgdXNlcnMuCisgICAg
ICAgIENDYWxsSGVscGVyczo6SnVtcExpc3QgZG9uZUp1bXBzOworICAgICAgICBDQ2FsbEhlbHBl
cnM6Okp1bXBMaXN0KiBleGNlcHRpb25KdW1wczsKKyAgICAgICAgTGF6eVNsb3dQYXRoKiBsYXp5
U2xvd1BhdGg7CisgICAgfTsKKworICAgIHR5cGVkZWYgdm9pZCBHZW5lcmF0b3JGdW5jdGlvbihD
Q2FsbEhlbHBlcnMmLCBHZW5lcmF0aW9uUGFyYW1zJik7CisgICAgdHlwZWRlZiBTaGFyZWRUYXNr
PEdlbmVyYXRvckZ1bmN0aW9uPiBHZW5lcmF0b3I7CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBG
dW5jdG9yPgorICAgIHN0YXRpYyBSZWZQdHI8R2VuZXJhdG9yPiBjcmVhdGVHZW5lcmF0b3IoY29u
c3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB7CisgICAgICAgIHJldHVybiBjcmVhdGVTaGFyZWRU
YXNrPEdlbmVyYXRvckZ1bmN0aW9uPihmdW5jdG9yKTsKKyAgICB9CisgICAgCisgICAgTGF6eVNs
b3dQYXRoKAorICAgICAgICBDb2RlTG9jYXRpb25MYWJlbCBwYXRjaHBvaW50LCBDb2RlTG9jYXRp
b25MYWJlbCBleGNlcHRpb25UYXJnZXQsCisgICAgICAgIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2Vk
UmVnaXN0ZXJzLCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgsIFJlZlB0cjxHZW5lcmF0b3I+
KTsKKworICAgIH5MYXp5U2xvd1BhdGgoKTsKKworICAgIENvZGVMb2NhdGlvbkxhYmVsIHBhdGNo
cG9pbnQoKSBjb25zdCB7IHJldHVybiBtX3BhdGNocG9pbnQ7IH0KKyAgICBjb25zdCBSZWdpc3Rl
clNldCYgdXNlZFJlZ2lzdGVycygpIGNvbnN0IHsgcmV0dXJuIG1fdXNlZFJlZ2lzdGVyczsgfQor
ICAgIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCgpIGNvbnN0IHsgcmV0dXJuIG1fY2FsbFNp
dGVJbmRleDsgfQorCisgICAgdm9pZCBnZW5lcmF0ZShDb2RlQmxvY2sqKTsKKworICAgIE1hY3Jv
QXNzZW1ibGVyQ29kZVJlZiBzdHViKCkgY29uc3QgeyByZXR1cm4gbV9zdHViOyB9CisKK3ByaXZh
dGU6CisgICAgQ29kZUxvY2F0aW9uTGFiZWwgbV9wYXRjaHBvaW50OworICAgIENvZGVMb2NhdGlv
bkxhYmVsIG1fZXhjZXB0aW9uVGFyZ2V0OworICAgIFJlZ2lzdGVyU2V0IG1fdXNlZFJlZ2lzdGVy
czsKKyAgICBDYWxsU2l0ZUluZGV4IG1fY2FsbFNpdGVJbmRleDsKKyAgICBNYWNyb0Fzc2VtYmxl
ckNvZGVSZWYgbV9zdHViOworICAgIFJlZlB0cjxHZW5lcmF0b3I+IG1fZ2VuZXJhdG9yOworfTsK
KworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRlRMTGF6eVNsb3dQYXRo
X2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMYXp5U2xvd1BhdGhDYWxs
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMYXp5U2xvd1Bh
dGhDYWxsLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExh
enlTbG93UGF0aENhbGwuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDY4IEBACisvKgorICog
Q29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgRlRMTGF6eVNs
b3dQYXRoQ2FsbF9oCisjZGVmaW5lIEZUTExhenlTbG93UGF0aENhbGxfaAorCisjaW5jbHVkZSAi
Q29kZUJsb2NrLmgiCisjaW5jbHVkZSAiQ29kZUxvY2F0aW9uLmgiCisjaW5jbHVkZSAiRlRMTGF6
eVNsb3dQYXRoLmgiCisjaW5jbHVkZSAiRlRMU2xvd1BhdGhDYWxsLmgiCisjaW5jbHVkZSAiRlRM
VGh1bmtzLmgiCisjaW5jbHVkZSAiR1BSSW5mby5oIgorI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVy
Q29kZVJlZi5oIgorI2luY2x1ZGUgIlJlZ2lzdGVyU2V0LmgiCisKK25hbWVzcGFjZSBKU0MgeyBu
YW1lc3BhY2UgRlRMIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgUmVzdWx0VHlwZSwgdHlwZW5hbWUu
Li4gQXJndW1lbnRUeXBlcz4KK1JlZlB0cjxMYXp5U2xvd1BhdGg6OkdlbmVyYXRvcj4gY3JlYXRl
TGF6eUNhbGxHZW5lcmF0b3IoCisgICAgRnVuY3Rpb25QdHIgZnVuY3Rpb24sIFJlc3VsdFR5cGUg
cmVzdWx0LCBBcmd1bWVudFR5cGVzLi4uIGFyZ3VtZW50cykKK3sKKyAgICByZXR1cm4gTGF6eVNs
b3dQYXRoOjpjcmVhdGVHZW5lcmF0b3IoCisgICAgICAgIFs9XSAoQ0NhbGxIZWxwZXJzJiBqaXQs
IExhenlTbG93UGF0aDo6R2VuZXJhdGlvblBhcmFtcyYgcGFyYW1zKSB7CisgICAgICAgICAgICBq
aXQuc3RvcmUzMigKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihw
YXJhbXMubGF6eVNsb3dQYXRoLT5jYWxsU2l0ZUluZGV4KCkuYml0cygpKSwKKyAgICAgICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6OnRhZ0ZvcihKU1N0YWNrOjpBcmd1bWVudENvdW50KSk7CisgICAg
ICAgICAgICBTbG93UGF0aENhbGwgc2xvd1BhdGggPSBjYWxsT3BlcmF0aW9uKAorICAgICAgICAg
ICAgICAgIHBhcmFtcy5sYXp5U2xvd1BhdGgtPnVzZWRSZWdpc3RlcnMoKSwgaml0LCBwYXJhbXMu
ZXhjZXB0aW9uSnVtcHMsIGZ1bmN0aW9uLCByZXN1bHQsCisgICAgICAgICAgICAgICAgYXJndW1l
bnRzLi4uKTsKKyAgICAgICAgICAgIGppdC5hZGRMaW5rVGFzaygKKyAgICAgICAgICAgICAgICBb
PV0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgVk0mIHZt
ID0gbGlua0J1ZmZlci52bSgpOworICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAg
ICAgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHRodW5rID0KKyAgICAgICAgICAgICAgICAgICAg
ICAgIHZtLmZ0bFRodW5rcy0+Z2V0U2xvd1BhdGhDYWxsVGh1bmsodm0sIHNsb3dQYXRoLmtleSgp
KTsKKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIGxpbmtCdWZmZXIu
bGluayhzbG93UGF0aC5jYWxsKCksIENvZGVMb2NhdGlvbkxhYmVsKHRodW5rLmNvZGUoKSkpOwor
ICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgcGFyYW1zLmRvbmVKdW1wcy5hcHBlbmQo
aml0Lmp1bXAoKSk7CisgICAgICAgIH0pOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRM
CisKKyNlbmRpZiAvLyBGVExMYXp5U2xvd1BhdGhDYWxsX2gKKwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHJldmlzaW9uIDE5MDc0
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zOSw2ICszOSw3IEBACiAjaW5jbHVkZSAiRlRMRm9yT1NSRW50cnlK
SVRDb2RlLmgiCiAjaW5jbHVkZSAiRlRMRm9ybWF0dGVkVmFsdWUuaCIKICNpbmNsdWRlICJGVExJ
bmxpbmVDYWNoZVNpemUuaCIKKyNpbmNsdWRlICJGVExMYXp5U2xvd1BhdGhDYWxsLmgiCiAjaW5j
bHVkZSAiRlRMTG93ZXJlZE5vZGVWYWx1ZS5oIgogI2luY2x1ZGUgIkZUTE9wZXJhdGlvbnMuaCIK
ICNpbmNsdWRlICJGVExPdXRwdXQuaCIKQEAgLTUwLDYgKzUxLDcgQEAKICNpbmNsdWRlICJPcGVy
YW5kc0lubGluZXMuaCIKICNpbmNsdWRlICJTY29wZWRBcmd1bWVudHMuaCIKICNpbmNsdWRlICJT
Y29wZWRBcmd1bWVudHNUYWJsZS5oIgorI2luY2x1ZGUgIlNjcmF0Y2hSZWdpc3RlckFsbG9jYXRv
ci5oIgogI2luY2x1ZGUgIlZpcnR1YWxSZWdpc3Rlci5oIgogI2luY2x1ZGUgIldhdGNoZG9nLmgi
CiAjaW5jbHVkZSA8YXRvbWljPgpAQCAtNTA2Niw3ICs1MDY4LDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgaWYgKEpTU3RyaW5nKiBzdHJpbmcgPSBtX25vZGUtPmNoaWxkMSgpLT5keW5hbWljQ2FzdENv
bnN0YW50PEpTU3RyaW5nKj4oKSkgewogICAgICAgICAgICAgaWYgKHN0cmluZy0+dHJ5R2V0VmFs
dWVJbXBsKCkgJiYgc3RyaW5nLT50cnlHZXRWYWx1ZUltcGwoKS0+aXNBdG9taWMoKSkgewogCi0g
ICAgICAgICAgICAgICAgY29uc3QgYXV0byBzdHIgPSBzdGF0aWNfY2FzdDxjb25zdCBBdG9taWNT
dHJpbmdJbXBsKj4oc3RyaW5nLT50cnlHZXRWYWx1ZUltcGwoKSk7CisgICAgICAgICAgICAgICAg
VW5pcXVlZFN0cmluZ0ltcGwqIHN0ciA9IGJpdHdpc2VfY2FzdDxVbmlxdWVkU3RyaW5nSW1wbCo+
KHN0cmluZy0+dHJ5R2V0VmFsdWVJbXBsKCkpOwogICAgICAgICAgICAgICAgIHVuc2lnbmVkIHN0
YWNrbWFwSUQgPSBtX3N0YWNrbWFwSURzKys7CiAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICBMVmFsdWUgY2FsbCA9IG1fb3V0LmNhbGwoCkBAIC02MzAzLDkgKzYzMDUsMTQgQEAgcHJpdmF0
ZToKICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwogICAgICAgICAKICAgICAgICAg
bV9vdXQuYXBwZW5kVG8oc2xvd1BhdGgsIGNvbnRpbnVhdGlvbik7Ci0gICAgICAgIAotICAgICAg
ICBWYWx1ZUZyb21CbG9jayBzbG93UmVzdWx0ID0gbV9vdXQuYW5jaG9yKHZtQ2FsbCgKLSAgICAg
ICAgICAgIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25OZXdPYmplY3QpLCBtX2NhbGxGcmFtZSwg
bV9vdXQuY29uc3RJbnRQdHIoc3RydWN0dXJlKSkpOworCisgICAgICAgIExWYWx1ZSBzbG93UmVz
dWx0VmFsdWUgPSBsYXp5U2xvd1BhdGgoCisgICAgICAgICAgICBbPV0gKGNvbnN0IFZlY3RvcjxM
b2NhdGlvbj4mIGxvY2F0aW9ucykgLT4gUmVmUHRyPExhenlTbG93UGF0aDo6R2VuZXJhdG9yPiB7
CisgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxhenlDYWxsR2VuZXJhdG9yKAorICAgICAg
ICAgICAgICAgICAgICBvcGVyYXRpb25OZXdPYmplY3QsIGxvY2F0aW9uc1swXS5kaXJlY3RHUFIo
KSwKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHN0cnVj
dHVyZSkpOworICAgICAgICAgICAgfSk7CisgICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dSZXN1
bHQgPSBtX291dC5hbmNob3Ioc2xvd1Jlc3VsdFZhbHVlKTsKICAgICAgICAgbV9vdXQuanVtcChj
b250aW51YXRpb24pOwogICAgICAgICAKICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0
aW9uLCBsYXN0TmV4dCk7CkBAIC03MTYzLDYgKzcxNzAsMjggQEAgcHJpdmF0ZToKICAgICAgICAg
bV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CiAgICAgICAgIHJldHVybiBt
X291dC5waGkobV9vdXQuaW50MzIsIGZhc3RSZXN1bHQsIHNsb3dSZXN1bHQpOwogICAgIH0KKwor
ICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3IsIHR5cGVuYW1lLi4uIEFyZ3VtZW50VHlwZXM+
CisgICAgTFZhbHVlIGxhenlTbG93UGF0aChjb25zdCBGdW5jdG9yJiBmdW5jdG9yLCBBcmd1bWVu
dFR5cGVzLi4uIGFyZ3VtZW50cykKKyAgICB7CisgICAgICAgIHVuc2lnbmVkIHN0YWNrbWFwSUQg
PSBtX3N0YWNrbWFwSURzKys7CisKKyAgICAgICAgTFZhbHVlIGNhbGwgPSBtX291dC5jYWxsKAor
ICAgICAgICAgICAgbV9vdXQucGF0Y2hwb2ludEludDY0SW50cmluc2ljKCksCisgICAgICAgICAg
ICBtX291dC5jb25zdEludDY0KHN0YWNrbWFwSUQpLCBtX291dC5jb25zdEludDMyKE1hY3JvQXNz
ZW1ibGVyOjptYXhKdW1wUmVwbGFjZW1lbnRTaXplKCkpLAorICAgICAgICAgICAgY29uc3ROdWxs
KG1fb3V0LnJlZjgpLCBtX291dC5jb25zdEludDMyKHNpemVvZi4uLihhcmd1bWVudHMpKSwgYXJn
dW1lbnRzLi4uKTsKKyAgICAgICAgc2V0SW5zdHJ1Y3Rpb25DYWxsaW5nQ29udmVudGlvbihjYWxs
LCBMTFZNQW55UmVnQ2FsbENvbnYpOworCisgICAgICAgIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJ
bmRleCA9CisgICAgICAgICAgICBtX2Z0bFN0YXRlLmppdENvZGUtPmNvbW1vbi5hZGRDb2RlT3Jp
Z2luKG1fbm9kZS0+b3JpZ2luLnNlbWFudGljKTsKKyAgICAgICAgCisgICAgICAgIFJlZlB0cjxM
YXp5U2xvd1BhdGhMaW5rZXJUYXNrPiBsaW5rZXIgPQorICAgICAgICAgICAgY3JlYXRlU2hhcmVk
VGFzazxMYXp5U2xvd1BhdGhMaW5rZXJGdW5jdGlvbj4oZnVuY3Rvcik7CisKKyAgICAgICAgbV9m
dGxTdGF0ZS5sYXp5U2xvd1BhdGhzLmFwcGVuZChMYXp5U2xvd1BhdGhEZXNjcmlwdG9yKHN0YWNr
bWFwSUQsIGNhbGxTaXRlSW5kZXgsIGxpbmtlcikpOworCisgICAgICAgIHJldHVybiBjYWxsOwor
ICAgIH0KICAgICAKICAgICB2b2lkIHNwZWN1bGF0ZSgKICAgICAgICAgRXhpdEtpbmQga2luZCwg
Rm9ybWF0dGVkVmFsdWUgbG93VmFsdWUsIE5vZGUqIGhpZ2hWYWx1ZSwgTFZhbHVlIGZhaWxDb25k
aXRpb24pCkBAIC04MjY3LDMzICs4Mjk2LDY3IEBAIHByaXZhdGU6CiAKICAgICB2b2lkIGVtaXRT
dG9yZUJhcnJpZXIoTFZhbHVlIGJhc2UpCiAgICAgewotICAgICAgICBMQmFzaWNCbG9jayBpc01h
cmtlZEFuZE5vdFJlbWVtYmVyZWQgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIlN0b3JlIGJhcnJp
ZXIgaXMgbWFya2VkIGJsb2NrIikpOwotICAgICAgICBMQmFzaWNCbG9jayBidWZmZXJIYXNTcGFj
ZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiU3RvcmUgYmFycmllciBidWZmZXIgaGFzIHNwYWNl
IikpOwotICAgICAgICBMQmFzaWNCbG9jayBidWZmZXJJc0Z1bGwgPSBGVExfTkVXX0JMT0NLKG1f
b3V0LCAoIlN0b3JlIGJhcnJpZXIgYnVmZmVyIGlzIGZ1bGwiKSk7CisgICAgICAgIExCYXNpY0Js
b2NrIHNsb3dQYXRoID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJTdG9yZSBiYXJyaWVyIHNsb3cg
cGF0aCIpKTsKICAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9D
SyhtX291dCwgKCJTdG9yZSBiYXJyaWVyIGNvbnRpbnVhdGlvbiIpKTsKIAotICAgICAgICAvLyBD
aGVjayB0aGUgbWFyayBieXRlLiAKLSAgICAgICAgbV9vdXQuYnJhbmNoKAotICAgICAgICAgICAg
bV9vdXQubm90WmVybzgobG9hZENlbGxTdGF0ZShiYXNlKSksIHVzdWFsbHkoY29udGludWF0aW9u
KSwgcmFyZWx5KGlzTWFya2VkQW5kTm90UmVtZW1iZXJlZCkpOwotCi0gICAgICAgIC8vIEFwcGVu
ZCB0byB0aGUgd3JpdGUgYmFycmllciBidWZmZXIuCi0gICAgICAgIExCYXNpY0Jsb2NrIGxhc3RO
ZXh0ID0gbV9vdXQuYXBwZW5kVG8oaXNNYXJrZWRBbmROb3RSZW1lbWJlcmVkLCBidWZmZXJIYXNT
cGFjZSk7Ci0gICAgICAgIExWYWx1ZSBjdXJyZW50QnVmZmVySW5kZXggPSBtX291dC5sb2FkMzIo
bV9vdXQuYWJzb2x1dGUodm0oKS5oZWFwLndyaXRlQmFycmllckJ1ZmZlcigpLmN1cnJlbnRJbmRl
eEFkZHJlc3MoKSkpOwotICAgICAgICBMVmFsdWUgYnVmZmVyQ2FwYWNpdHkgPSBtX291dC5jb25z
dEludDMyKHZtKCkuaGVhcC53cml0ZUJhcnJpZXJCdWZmZXIoKS5jYXBhY2l0eSgpKTsKICAgICAg
ICAgbV9vdXQuYnJhbmNoKAotICAgICAgICAgICAgbV9vdXQubGVzc1RoYW4oY3VycmVudEJ1ZmZl
ckluZGV4LCBidWZmZXJDYXBhY2l0eSksCi0gICAgICAgICAgICB1c3VhbGx5KGJ1ZmZlckhhc1Nw
YWNlKSwgcmFyZWx5KGJ1ZmZlcklzRnVsbCkpOworICAgICAgICAgICAgbV9vdXQubm90WmVybzgo
bG9hZENlbGxTdGF0ZShiYXNlKSksIHVzdWFsbHkoY29udGludWF0aW9uKSwgcmFyZWx5KHNsb3dQ
YXRoKSk7CiAKLSAgICAgICAgLy8gQnVmZmVyIGhhcyBzcGFjZSwgc3RvcmUgdG8gaXQuCi0gICAg
ICAgIG1fb3V0LmFwcGVuZFRvKGJ1ZmZlckhhc1NwYWNlLCBidWZmZXJJc0Z1bGwpOwotICAgICAg
ICBMVmFsdWUgd3JpdGVCYXJyaWVyQnVmZmVyQmFzZSA9IG1fb3V0LmNvbnN0SW50UHRyKHZtKCku
aGVhcC53cml0ZUJhcnJpZXJCdWZmZXIoKS5idWZmZXIoKSk7Ci0gICAgICAgIG1fb3V0LnN0b3Jl
UHRyKGJhc2UsIG1fb3V0LmJhc2VJbmRleChtX2hlYXBzLldyaXRlQmFycmllckJ1ZmZlcl9idWZm
ZXJDb250ZW50cywgd3JpdGVCYXJyaWVyQnVmZmVyQmFzZSwgbV9vdXQuemVyb0V4dFB0cihjdXJy
ZW50QnVmZmVySW5kZXgpKSk7Ci0gICAgICAgIG1fb3V0LnN0b3JlMzIobV9vdXQuYWRkKGN1cnJl
bnRCdWZmZXJJbmRleCwgbV9vdXQuY29uc3RJbnQzMigxKSksIG1fb3V0LmFic29sdXRlKHZtKCku
aGVhcC53cml0ZUJhcnJpZXJCdWZmZXIoKS5jdXJyZW50SW5kZXhBZGRyZXNzKCkpKTsKLSAgICAg
ICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4
dCA9IG1fb3V0LmFwcGVuZFRvKHNsb3dQYXRoLCBjb250aW51YXRpb24pOwogCi0gICAgICAgIC8v
IEJ1ZmZlciBpcyBvdXQgb2Ygc3BhY2UsIGZsdXNoIGl0LgotICAgICAgICBtX291dC5hcHBlbmRU
byhidWZmZXJJc0Z1bGwsIGNvbnRpbnVhdGlvbik7Ci0gICAgICAgIHZtQ2FsbE5vRXhjZXB0aW9u
cyhtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uRmx1c2hXcml0ZUJhcnJpZXJCdWZmZXIpLCBtX2Nh
bGxGcmFtZSwgYmFzZSk7CisgICAgICAgIC8vIFdlIGVtaXQgdGhlIHN0b3JlIGJhcnJpZXIgc2xv
dyBwYXRoIGxhemlseS4gSW4gYSBsb3Qgb2YgY2FzZXMsIHRoaXMgd2lsbCBuZXZlciBmaXJlLiBB
bmQKKyAgICAgICAgLy8gd2hlbiBpdCBkb2VzIGZpcmUsIGl0IG1ha2VzIHNlbnNlIGZvciB1cyB0
byBnZW5lcmF0ZSB0aGlzIGNvZGUgdXNpbmcgb3VyIEpJVCByYXRoZXIgdGhhbgorICAgICAgICAv
LyB3YXN0aW5nIExMVk0ncyB0aW1lIG9wdGltaXppbmcgaXQuCisgICAgICAgIGxhenlTbG93UGF0
aCgKKyAgICAgICAgICAgIFs9XSAoY29uc3QgVmVjdG9yPExvY2F0aW9uPiYgbG9jYXRpb25zKSAt
PiBSZWZQdHI8TGF6eVNsb3dQYXRoOjpHZW5lcmF0b3I+IHsKKyAgICAgICAgICAgICAgICBHUFJS
ZWcgYmFzZUdQUiA9IGxvY2F0aW9uc1swXS5kaXJlY3RHUFIoKTsKKworICAgICAgICAgICAgICAg
IHJldHVybiBMYXp5U2xvd1BhdGg6OmNyZWF0ZUdlbmVyYXRvcigKKyAgICAgICAgICAgICAgICAg
ICAgWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgTGF6eVNsb3dQYXRoOjpHZW5lcmF0aW9uUGFyYW1z
JiBwYXJhbXMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyU2V0IHVzZWRSZWdp
c3RlcnMgPSBwYXJhbXMubGF6eVNsb3dQYXRoLT51c2VkUmVnaXN0ZXJzKCk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3Igc2NyYXRjaFJlZ2lzdGVyQWxs
b2NhdG9yKHVzZWRSZWdpc3RlcnMpOworICAgICAgICAgICAgICAgICAgICAgICAgc2NyYXRjaFJl
Z2lzdGVyQWxsb2NhdG9yLmxvY2soYmFzZUdQUik7CisKKyAgICAgICAgICAgICAgICAgICAgICAg
IEdQUlJlZyBzY3JhdGNoMSA9IHNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0
Y2hHUFIoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoMiA9IHNjcmF0
Y2hSZWdpc3RlckFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKKworICAgICAgICAgICAg
ICAgICAgICAgICAgdW5zaWduZWQgYnl0ZXNQdXNoZWQgPQorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIHNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5wcmVzZXJ2ZVJldXNlZFJlZ2lzdGVyc0J5
UHVzaGluZyhqaXQpOworCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSd2ZSBhbHJlYWR5
IHNhdmVkIHRoZXNlLCBzbyB3aGVuIHdlIG1ha2UgYSBzbG93IHBhdGggY2FsbCwgd2UgZG9uJ3Qg
aGF2ZQorICAgICAgICAgICAgICAgICAgICAgICAgLy8gdG8gc2F2ZSB0aGVtIGFnYWluLgorICAg
ICAgICAgICAgICAgICAgICAgICAgdXNlZFJlZ2lzdGVycy5leGNsdWRlKFJlZ2lzdGVyU2V0KHNj
cmF0Y2gxLCBzY3JhdGNoMikpOworCisgICAgICAgICAgICAgICAgICAgICAgICBXcml0ZUJhcnJp
ZXJCdWZmZXImIHdyaXRlQmFycmllckJ1ZmZlciA9IGppdC52bSgpLT5oZWFwLndyaXRlQmFycmll
ckJ1ZmZlcigpOworICAgICAgICAgICAgICAgICAgICAgICAgaml0LmxvYWQzMih3cml0ZUJhcnJp
ZXJCdWZmZXIuY3VycmVudEluZGV4QWRkcmVzcygpLCBzY3JhdGNoMik7CisgICAgICAgICAgICAg
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgbmVlZFRvRmx1c2ggPSBqaXQuYnJhbmNoMzIo
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBYm92ZU9yRXF1YWws
IHNjcmF0Y2gyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbTMyKHdyaXRlQmFycmllckJ1ZmZlci5jYXBhY2l0eSgpKSk7CisKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGppdC5hZGQzMihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMigxKSwgc2Ny
YXRjaDIpOworICAgICAgICAgICAgICAgICAgICAgICAgaml0LnN0b3JlMzIoc2NyYXRjaDIsIHdy
aXRlQmFycmllckJ1ZmZlci5jdXJyZW50SW5kZXhBZGRyZXNzKCkpOworCisgICAgICAgICAgICAg
ICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIod3JpdGVCYXJy
aWVyQnVmZmVyLmJ1ZmZlcigpKSwgc2NyYXRjaDEpOworICAgICAgICAgICAgICAgICAgICAgICAg
aml0LnN0b3JlUHRyKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VHUFIsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgoCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmF0Y2gxLCBzY3JhdGNoMiwgQ0NhbGxIZWxwZXJz
OjpTY2FsZVB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RhdGljX2Nhc3Q8
aW50MzJfdD4oLXNpemVvZih2b2lkKikpKSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIHNj
cmF0Y2hSZWdpc3RlckFsbG9jYXRvci5yZXN0b3JlUmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5nKGpp
dCwgYnl0ZXNQdXNoZWQpOworCisgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMuZG9uZUp1
bXBzLmFwcGVuZChqaXQuanVtcCgpKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgbmVlZFRv
Rmx1c2gubGluaygmaml0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxPcGVyYXRpb24o
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlZFJlZ2lzdGVycywgaml0LCBwYXJhbXMu
bGF6eVNsb3dQYXRoLT5jYWxsU2l0ZUluZGV4KCksCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgcGFyYW1zLmV4Y2VwdGlvbkp1bXBzLCBvcGVyYXRpb25GbHVzaFdyaXRlQmFycmllckJ1ZmZl
ciwgSW52YWxpZEdQUlJlZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXNlR1BSKTsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5yZXN0b3Jl
UmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5nKGppdCwgYnl0ZXNQdXNoZWQpOworICAgICAgICAgICAg
ICAgICAgICAgICAgcGFyYW1zLmRvbmVKdW1wcy5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAgICAg
ICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIGJhc2UpOwogICAg
ICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CiAKICAgICAgICAgbV9vdXQuYXBwZW5kVG8o
Y29udGludWF0aW9uLCBsYXN0TmV4dCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTE9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDE5MDc0OSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMw
LDggQEAKIAogI2luY2x1ZGUgIkNsb25lZEFyZ3VtZW50cy5oIgogI2luY2x1ZGUgIkRpcmVjdEFy
Z3VtZW50cy5oIgorI2luY2x1ZGUgIkZUTEpJVENvZGUuaCIKKyNpbmNsdWRlICJGVExMYXp5U2xv
d1BhdGguaCIKICNpbmNsdWRlICJJbmxpbmVDYWxsRnJhbWUuaCIKICNpbmNsdWRlICJKU0NJbmxp
bmVzLmgiCiAjaW5jbHVkZSAiSlNMZXhpY2FsRW52aXJvbm1lbnQuaCIKQEAgLTM1Nyw2ICszNTks
MjIgQEAgZXh0ZXJuICJDIiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aQogICAgIH0KIH0K
IAorZXh0ZXJuICJDIiB2b2lkKiBKSVRfT1BFUkFUSU9OIGNvbXBpbGVGVExMYXp5U2xvd1BhdGgo
RXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpbmRleCkKK3sKKyAgICBWTSYgdm0gPSBleGVjLT52
bSgpOworCisgICAgLy8gV2UgY2Fubm90IEdDLiBXZSd2ZSBnb3QgcG9pbnRlcnMgaW4gZXZpbCBw
bGFjZXMuCisgICAgRGVmZXJHQ0ZvckFXaGlsZSBkZWZlckdDKHZtLmhlYXApOworCisgICAgQ29k
ZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKKyAgICBKSVRDb2RlKiBqaXRD
b2RlID0gY29kZUJsb2NrLT5qaXRDb2RlKCktPmZ0bCgpOworCisgICAgTGF6eVNsb3dQYXRoJiBs
YXp5U2xvd1BhdGggPSAqaml0Q29kZS0+bGF6eVNsb3dQYXRoc1tpbmRleF07CisgICAgbGF6eVNs
b3dQYXRoLmdlbmVyYXRlKGNvZGVCbG9jayk7CisKKyAgICByZXR1cm4gbGF6eVNsb3dQYXRoLnN0
dWIoKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKK30KKwogfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkZUTAogCiAjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTE9wZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTE9wZXJhdGlvbnMuaAkocmV2aXNpb24gMTkwNzQ5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPcGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTMz
LDYgKzMzLDggQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewogCitjbGFzcyBM
YXp5U2xvd1BhdGg7CisKIGV4dGVybiAiQyIgewogCiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uTmV3T2JqZWN0V2l0aEJ1dHRlcmZseShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqKSBXVEZf
SU5URVJOQUw7CkBAIC00Myw2ICs0NSw4IEBAIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRp
b25NYXRlcmlhbGkKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25Qb3B1bGF0ZU9iamVjdElu
T1NSKAogICAgIEV4ZWNTdGF0ZSosIEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0aW9uKiwgRW5j
b2RlZEpTVmFsdWUqLCBFbmNvZGVkSlNWYWx1ZSopIFdURl9JTlRFUk5BTDsKIAordm9pZCogSklU
X09QRVJBVElPTiBjb21waWxlRlRMTGF6eVNsb3dQYXRoKEV4ZWNTdGF0ZSosIHVuc2lnbmVkKSBX
VEZfSU5URVJOQUw7CisKIH0gLy8gZXh0ZXJuICJDIgogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6
REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNsb3dQYXRoQ2FsbC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTbG93UGF0aENhbGwu
Y3BwCShyZXZpc2lvbiAxOTA3NDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNs
b3dQYXRoQ2FsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzUsMTgzICszNSwxMDMgQEAKIAog
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewogCi1uYW1lc3BhY2UgewotCiAvLyBUaGlz
IGNvZGUgcmVsaWVzIG9uIHVzIGJlaW5nIDY0LWJpdC4gRlRMIGlzIGN1cnJlbnRseSBhbHdheXMg
NjQtYml0Lgogc3RhdGljIGNvbnN0IHNpemVfdCB3b3JkU2l6ZSA9IDg7CiAKLS8vIFRoaXMgd2ls
bCBiZSBhbiBSQUlJIHRoaW5neSB0aGF0IHdpbGwgc2V0IHVwIHRoZSBuZWNlc3Nhcnkgc3RhY2sg
c2l6ZXMgYW5kIG9mZnNldHMgYW5kIHN1Y2guCi1jbGFzcyBDYWxsQ29udGV4dCB7Ci1wdWJsaWM6
Ci0gICAgQ2FsbENvbnRleHQoCi0gICAgICAgIFN0YXRlJiBzdGF0ZSwgY29uc3QgUmVnaXN0ZXJT
ZXQmIHVzZWRSZWdpc3RlcnMsIENDYWxsSGVscGVycyYgaml0LAotICAgICAgICB1bnNpZ25lZCBu
dW1BcmdzLCBHUFJSZWcgcmV0dXJuUmVnaXN0ZXIpCi0gICAgICAgIDogbV9zdGF0ZShzdGF0ZSkK
LSAgICAgICAgLCBtX3VzZWRSZWdpc3RlcnModXNlZFJlZ2lzdGVycykKLSAgICAgICAgLCBtX2pp
dChqaXQpCi0gICAgICAgICwgbV9udW1BcmdzKG51bUFyZ3MpCi0gICAgICAgICwgbV9yZXR1cm5S
ZWdpc3RlcihyZXR1cm5SZWdpc3RlcikKLSAgICB7Ci0gICAgICAgIC8vIFdlIGRvbid0IGNhcmUg
dGhhdCB5b3UncmUgdXNpbmcgY2FsbGVlLXNhdmUsIHN0YWNrLCBvciBoYXJkd2FyZSByZWdpc3Rl
cnMuCi0gICAgICAgIG1fdXNlZFJlZ2lzdGVycy5leGNsdWRlKFJlZ2lzdGVyU2V0OjpzdGFja1Jl
Z2lzdGVycygpKTsKLSAgICAgICAgbV91c2VkUmVnaXN0ZXJzLmV4Y2x1ZGUoUmVnaXN0ZXJTZXQ6
OnJlc2VydmVkSGFyZHdhcmVSZWdpc3RlcnMoKSk7Ci0gICAgICAgIG1fdXNlZFJlZ2lzdGVycy5l
eGNsdWRlKFJlZ2lzdGVyU2V0OjpjYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOwotICAgICAgICAKLSAg
ICAgICAgLy8gVGhlIHJldHVybiByZWdpc3RlciBkb2Vzbid0IG5lZWQgdG8gYmUgc2F2ZWQuCi0g
ICAgICAgIGlmIChtX3JldHVyblJlZ2lzdGVyICE9IEludmFsaWRHUFJSZWcpCi0gICAgICAgICAg
ICBtX3VzZWRSZWdpc3RlcnMuY2xlYXIobV9yZXR1cm5SZWdpc3Rlcik7Ci0gICAgICAgIAotICAg
ICAgICBzaXplX3Qgc3RhY2tCeXRlc05lZWRlZEZvclJldHVybkFkZHJlc3MgPSB3b3JkU2l6ZTsK
LSAgICAgICAgCi0gICAgICAgIG1fb2Zmc2V0VG9TYXZpbmdBcmVhID0KLSAgICAgICAgICAgIChz
dGQ6Om1heChtX251bUFyZ3MsIE5VTUJFUl9PRl9BUkdVTUVOVF9SRUdJU1RFUlMpIC0gTlVNQkVS
X09GX0FSR1VNRU5UX1JFR0lTVEVSUykgKiB3b3JkU2l6ZTsKLSAgICAgICAgCi0gICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IHN0ZDo6bWluKE5VTUJFUl9PRl9BUkdVTUVOVF9SRUdJU1RFUlMsIG51
bUFyZ3MpOyBpLS07KQotICAgICAgICAgICAgbV9hcmd1bWVudFJlZ2lzdGVycy5zZXQoR1BSSW5m
bzo6dG9Bcmd1bWVudFJlZ2lzdGVyKGkpKTsKLSAgICAgICAgbV9jYWxsaW5nQ29udmVudGlvblJl
Z2lzdGVycy5tZXJnZShtX2FyZ3VtZW50UmVnaXN0ZXJzKTsKLSAgICAgICAgaWYgKHJldHVyblJl
Z2lzdGVyICE9IEludmFsaWRHUFJSZWcpCi0gICAgICAgICAgICBtX2NhbGxpbmdDb252ZW50aW9u
UmVnaXN0ZXJzLnNldChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7Ci0gICAgICAgIG1fY2FsbGlu
Z0NvbnZlbnRpb25SZWdpc3RlcnMuZmlsdGVyKG1fdXNlZFJlZ2lzdGVycyk7Ci0gICAgICAgIAot
ICAgICAgICB1bnNpZ25lZCBudW1iZXJPZkNhbGxpbmdDb252ZW50aW9uUmVnaXN0ZXJzID0KLSAg
ICAgICAgICAgIG1fY2FsbGluZ0NvbnZlbnRpb25SZWdpc3RlcnMubnVtYmVyT2ZTZXRSZWdpc3Rl
cnMoKTsKLSAgICAgICAgCi0gICAgICAgIHNpemVfdCBvZmZzZXRUb1RodW5rU2F2aW5nQXJlYSA9
Ci0gICAgICAgICAgICBtX29mZnNldFRvU2F2aW5nQXJlYSArCi0gICAgICAgICAgICBudW1iZXJP
ZkNhbGxpbmdDb252ZW50aW9uUmVnaXN0ZXJzICogd29yZFNpemU7Ci0gICAgICAgIAotICAgICAg
ICBtX3N0YWNrQnl0ZXNOZWVkZWQgPQotICAgICAgICAgICAgb2Zmc2V0VG9UaHVua1NhdmluZ0Fy
ZWEgKwotICAgICAgICAgICAgc3RhY2tCeXRlc05lZWRlZEZvclJldHVybkFkZHJlc3MgKwotICAg
ICAgICAgICAgKG1fdXNlZFJlZ2lzdGVycy5udW1iZXJPZlNldFJlZ2lzdGVycygpIC0gbnVtYmVy
T2ZDYWxsaW5nQ29udmVudGlvblJlZ2lzdGVycykgKiB3b3JkU2l6ZTsKLSAgICAgICAgCi0gICAg
ICAgIG1fc3RhY2tCeXRlc05lZWRlZCA9IChtX3N0YWNrQnl0ZXNOZWVkZWQgKyBzdGFja0FsaWdu
bWVudEJ5dGVzKCkgLSAxKSAmIH4oc3RhY2tBbGlnbm1lbnRCeXRlcygpIC0gMSk7Ci0gICAgICAg
IAotICAgICAgICBtX2ppdC5zdWJQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIobV9zdGFj
a0J5dGVzTmVlZGVkKSwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7Ci0gICAg
ICAgIAotICAgICAgICBtX3RodW5rU2F2ZVNldCA9IG1fdXNlZFJlZ2lzdGVyczsKLSAgICAgICAg
Ci0gICAgICAgIC8vIFRoaXMgcmVsaWVzIG9uIGFsbCBjYWxsaW5nIGNvbnZlbnRpb24gcmVnaXN0
ZXJzIGFsc28gYmVpbmcgdGVtcCByZWdpc3RlcnMuCi0gICAgICAgIHVuc2lnbmVkIHN0YWNrSW5k
ZXggPSAwOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBHUFJJbmZvOjpudW1iZXJPZlJlZ2lz
dGVyczsgaS0tOykgewotICAgICAgICAgICAgR1BSUmVnIHJlZyA9IEdQUkluZm86OnRvUmVnaXN0
ZXIoaSk7Ci0gICAgICAgICAgICBpZiAoIW1fY2FsbGluZ0NvbnZlbnRpb25SZWdpc3RlcnMuZ2V0
KHJlZykpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBtX2ppdC5zdG9y
ZVB0cihyZWcsIENDYWxsSGVscGVyczo6QWRkcmVzcyhDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRl
clJlZ2lzdGVyLCBtX29mZnNldFRvU2F2aW5nQXJlYSArIChzdGFja0luZGV4KyspICogd29yZFNp
emUpKTsKLSAgICAgICAgICAgIG1fdGh1bmtTYXZlU2V0LmNsZWFyKHJlZyk7Ci0gICAgICAgIH0K
K1Nsb3dQYXRoQ2FsbENvbnRleHQ6OlNsb3dQYXRoQ2FsbENvbnRleHQoCisgICAgUmVnaXN0ZXJT
ZXQgdXNlZFJlZ2lzdGVycywgQ0NhbGxIZWxwZXJzJiBqaXQsIHVuc2lnbmVkIG51bUFyZ3MsIEdQ
UlJlZyByZXR1cm5SZWdpc3RlcikKKyAgICA6IG1faml0KGppdCkKKyAgICAsIG1fbnVtQXJncyhu
dW1BcmdzKQorICAgICwgbV9yZXR1cm5SZWdpc3RlcihyZXR1cm5SZWdpc3RlcikKK3sKKyAgICAv
LyBXZSBkb24ndCBjYXJlIHRoYXQgeW91J3JlIHVzaW5nIGNhbGxlZS1zYXZlLCBzdGFjaywgb3Ig
aGFyZHdhcmUgcmVnaXN0ZXJzLgorICAgIHVzZWRSZWdpc3RlcnMuZXhjbHVkZShSZWdpc3RlclNl
dDo6c3RhY2tSZWdpc3RlcnMoKSk7CisgICAgdXNlZFJlZ2lzdGVycy5leGNsdWRlKFJlZ2lzdGVy
U2V0OjpyZXNlcnZlZEhhcmR3YXJlUmVnaXN0ZXJzKCkpOworICAgIHVzZWRSZWdpc3RlcnMuZXhj
bHVkZShSZWdpc3RlclNldDo6Y2FsbGVlU2F2ZVJlZ2lzdGVycygpKTsKICAgICAgICAgCi0gICAg
ICAgIG1fb2Zmc2V0ID0gb2Zmc2V0VG9UaHVua1NhdmluZ0FyZWE7Ci0gICAgfQotICAgIAotICAg
IH5DYWxsQ29udGV4dCgpCi0gICAgewotICAgICAgICBpZiAobV9yZXR1cm5SZWdpc3RlciAhPSBJ
bnZhbGlkR1BSUmVnKQotICAgICAgICAgICAgbV9qaXQubW92ZShHUFJJbmZvOjpyZXR1cm5WYWx1
ZUdQUiwgbV9yZXR1cm5SZWdpc3Rlcik7Ci0gICAgICAgIAotICAgICAgICB1bnNpZ25lZCBzdGFj
a0luZGV4ID0gMDsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gR1BSSW5mbzo6bnVtYmVyT2ZS
ZWdpc3RlcnM7IGktLTspIHsKLSAgICAgICAgICAgIEdQUlJlZyByZWcgPSBHUFJJbmZvOjp0b1Jl
Z2lzdGVyKGkpOwotICAgICAgICAgICAgaWYgKCFtX2NhbGxpbmdDb252ZW50aW9uUmVnaXN0ZXJz
LmdldChyZWcpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgbV9qaXQu
bG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJS
ZWdpc3RlciwgbV9vZmZzZXRUb1NhdmluZ0FyZWEgKyAoc3RhY2tJbmRleCsrKSAqIHdvcmRTaXpl
KSwgcmVnKTsKLSAgICAgICAgfQorICAgIC8vIFRoZSByZXR1cm4gcmVnaXN0ZXIgZG9lc24ndCBu
ZWVkIHRvIGJlIHNhdmVkLgorICAgIGlmIChtX3JldHVyblJlZ2lzdGVyICE9IEludmFsaWRHUFJS
ZWcpCisgICAgICAgIHVzZWRSZWdpc3RlcnMuY2xlYXIobV9yZXR1cm5SZWdpc3Rlcik7CiAgICAg
ICAgIAotICAgICAgICBtX2ppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIobV9z
dGFja0J5dGVzTmVlZGVkKSwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7Ci0g
ICAgfQotICAgIAotICAgIFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3RlcnMoKSBjb25zdAotICAgIHsK
LSAgICAgICAgcmV0dXJuIG1fdGh1bmtTYXZlU2V0OwotICAgIH0KLSAgICAKLSAgICBwdHJkaWZm
X3Qgb2Zmc2V0KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBtX29mZnNldDsKKyAgICBz
aXplX3Qgc3RhY2tCeXRlc05lZWRlZEZvclJldHVybkFkZHJlc3MgPSB3b3JkU2l6ZTsKKyAgICAg
ICAgCisgICAgbV9vZmZzZXRUb1NhdmluZ0FyZWEgPQorICAgICAgICAoc3RkOjptYXgobV9udW1B
cmdzLCBOVU1CRVJfT0ZfQVJHVU1FTlRfUkVHSVNURVJTKSAtIE5VTUJFUl9PRl9BUkdVTUVOVF9S
RUdJU1RFUlMpICogd29yZFNpemU7CisgICAgICAgIAorICAgIGZvciAodW5zaWduZWQgaSA9IHN0
ZDo6bWluKE5VTUJFUl9PRl9BUkdVTUVOVF9SRUdJU1RFUlMsIG51bUFyZ3MpOyBpLS07KQorICAg
ICAgICBtX2FyZ3VtZW50UmVnaXN0ZXJzLnNldChHUFJJbmZvOjp0b0FyZ3VtZW50UmVnaXN0ZXIo
aSkpOworICAgIG1fY2FsbGluZ0NvbnZlbnRpb25SZWdpc3RlcnMubWVyZ2UobV9hcmd1bWVudFJl
Z2lzdGVycyk7CisgICAgaWYgKHJldHVyblJlZ2lzdGVyICE9IEludmFsaWRHUFJSZWcpCisgICAg
ICAgIG1fY2FsbGluZ0NvbnZlbnRpb25SZWdpc3RlcnMuc2V0KEdQUkluZm86OnJldHVyblZhbHVl
R1BSKTsKKyAgICBtX2NhbGxpbmdDb252ZW50aW9uUmVnaXN0ZXJzLmZpbHRlcih1c2VkUmVnaXN0
ZXJzKTsKKyAgICAgICAgCisgICAgdW5zaWduZWQgbnVtYmVyT2ZDYWxsaW5nQ29udmVudGlvblJl
Z2lzdGVycyA9CisgICAgICAgIG1fY2FsbGluZ0NvbnZlbnRpb25SZWdpc3RlcnMubnVtYmVyT2ZT
ZXRSZWdpc3RlcnMoKTsKKyAgICAgICAgCisgICAgc2l6ZV90IG9mZnNldFRvVGh1bmtTYXZpbmdB
cmVhID0KKyAgICAgICAgbV9vZmZzZXRUb1NhdmluZ0FyZWEgKworICAgICAgICBudW1iZXJPZkNh
bGxpbmdDb252ZW50aW9uUmVnaXN0ZXJzICogd29yZFNpemU7CisgICAgICAgIAorICAgIG1fc3Rh
Y2tCeXRlc05lZWRlZCA9CisgICAgICAgIG9mZnNldFRvVGh1bmtTYXZpbmdBcmVhICsKKyAgICAg
ICAgc3RhY2tCeXRlc05lZWRlZEZvclJldHVybkFkZHJlc3MgKworICAgICAgICAodXNlZFJlZ2lz
dGVycy5udW1iZXJPZlNldFJlZ2lzdGVycygpIC0gbnVtYmVyT2ZDYWxsaW5nQ29udmVudGlvblJl
Z2lzdGVycykgKiB3b3JkU2l6ZTsKKyAgICAgICAgCisgICAgbV9zdGFja0J5dGVzTmVlZGVkID0g
KG1fc3RhY2tCeXRlc05lZWRlZCArIHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSAtIDEpICYgfihzdGFj
a0FsaWdubWVudEJ5dGVzKCkgLSAxKTsKKyAgICAgICAgCisgICAgbV9qaXQuc3ViUHRyKENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbTMyKG1fc3RhY2tCeXRlc05lZWRlZCksIENDYWxsSGVscGVyczo6
c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworCisgICAgbV90aHVua1NhdmVTZXQgPSB1c2VkUmVnaXN0
ZXJzOworICAgICAgICAKKyAgICAvLyBUaGlzIHJlbGllcyBvbiBhbGwgY2FsbGluZyBjb252ZW50
aW9uIHJlZ2lzdGVycyBhbHNvIGJlaW5nIHRlbXAgcmVnaXN0ZXJzLgorICAgIHVuc2lnbmVkIHN0
YWNrSW5kZXggPSAwOworICAgIGZvciAodW5zaWduZWQgaSA9IEdQUkluZm86Om51bWJlck9mUmVn
aXN0ZXJzOyBpLS07KSB7CisgICAgICAgIEdQUlJlZyByZWcgPSBHUFJJbmZvOjp0b1JlZ2lzdGVy
KGkpOworICAgICAgICBpZiAoIW1fY2FsbGluZ0NvbnZlbnRpb25SZWdpc3RlcnMuZ2V0KHJlZykp
CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgbV9qaXQuc3RvcmVQdHIocmVnLCBDQ2Fs
bEhlbHBlcnM6OkFkZHJlc3MoQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgbV9v
ZmZzZXRUb1NhdmluZ0FyZWEgKyAoc3RhY2tJbmRleCsrKSAqIHdvcmRTaXplKSk7CisgICAgICAg
IG1fdGh1bmtTYXZlU2V0LmNsZWFyKHJlZyk7CiAgICAgfQorICAgICAgICAKKyAgICBtX29mZnNl
dCA9IG9mZnNldFRvVGh1bmtTYXZpbmdBcmVhOworfQogICAgIAotICAgIFNsb3dQYXRoQ2FsbEtl
eSBrZXlXaXRoVGFyZ2V0KHZvaWQqIGNhbGxUYXJnZXQpIGNvbnN0Ci0gICAgewotICAgICAgICBy
ZXR1cm4gU2xvd1BhdGhDYWxsS2V5KHVzZWRSZWdpc3RlcnMoKSwgY2FsbFRhcmdldCwgbV9hcmd1
bWVudFJlZ2lzdGVycywgb2Zmc2V0KCkpOwotICAgIH0KK1Nsb3dQYXRoQ2FsbENvbnRleHQ6On5T
bG93UGF0aENhbGxDb250ZXh0KCkKK3sKKyAgICBpZiAobV9yZXR1cm5SZWdpc3RlciAhPSBJbnZh
bGlkR1BSUmVnKQorICAgICAgICBtX2ppdC5tb3ZlKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBt
X3JldHVyblJlZ2lzdGVyKTsKICAgICAKLSAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBtYWtlQ2Fs
bCh2b2lkKiBjYWxsVGFyZ2V0LCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QqIGV4Y2VwdGlvblRh
cmdldCkKLSAgICB7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIHJlc3VsdCA9IG1faml0
LmNhbGwoKTsKLSAgICAgICAgbV9zdGF0ZS5maW5hbGl6ZXItPnNsb3dQYXRoQ2FsbHMuYXBwZW5k
KFNsb3dQYXRoQ2FsbCgKLSAgICAgICAgICAgIHJlc3VsdCwga2V5V2l0aFRhcmdldChjYWxsVGFy
Z2V0KSkpOwotICAgICAgICBpZiAoZXhjZXB0aW9uVGFyZ2V0KQotICAgICAgICAgICAgZXhjZXB0
aW9uVGFyZ2V0LT5hcHBlbmQobV9qaXQuZW1pdEV4Y2VwdGlvbkNoZWNrKCkpOwotICAgICAgICBy
ZXR1cm4gcmVzdWx0OworICAgIHVuc2lnbmVkIHN0YWNrSW5kZXggPSAwOworICAgIGZvciAodW5z
aWduZWQgaSA9IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyBpLS07KSB7CisgICAgICAgIEdQ
UlJlZyByZWcgPSBHUFJJbmZvOjp0b1JlZ2lzdGVyKGkpOworICAgICAgICBpZiAoIW1fY2FsbGlu
Z0NvbnZlbnRpb25SZWdpc3RlcnMuZ2V0KHJlZykpCisgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgbV9qaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoQ0NhbGxIZWxwZXJzOjpz
dGFja1BvaW50ZXJSZWdpc3RlciwgbV9vZmZzZXRUb1NhdmluZ0FyZWEgKyAoc3RhY2tJbmRleCsr
KSAqIHdvcmRTaXplKSwgcmVnKTsKICAgICB9CiAgICAgCi1wcml2YXRlOgotICAgIFN0YXRlJiBt
X3N0YXRlOwotICAgIFJlZ2lzdGVyU2V0IG1fdXNlZFJlZ2lzdGVyczsKLSAgICBSZWdpc3RlclNl
dCBtX2FyZ3VtZW50UmVnaXN0ZXJzOwotICAgIFJlZ2lzdGVyU2V0IG1fY2FsbGluZ0NvbnZlbnRp
b25SZWdpc3RlcnM7Ci0gICAgQ0NhbGxIZWxwZXJzJiBtX2ppdDsKLSAgICB1bnNpZ25lZCBtX251
bUFyZ3M7Ci0gICAgR1BSUmVnIG1fcmV0dXJuUmVnaXN0ZXI7Ci0gICAgc2l6ZV90IG1fb2Zmc2V0
VG9TYXZpbmdBcmVhOwotICAgIHNpemVfdCBtX3N0YWNrQnl0ZXNOZWVkZWQ7Ci0gICAgUmVnaXN0
ZXJTZXQgbV90aHVua1NhdmVTZXQ7Ci0gICAgcHRyZGlmZl90IG1fb2Zmc2V0OwotfTsKKyAgICBt
X2ppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIobV9zdGFja0J5dGVzTmVlZGVk
KSwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7Cit9CiAKLX0gLy8gYW5vbnlt
b3VzIG5hbWVzcGFjZQorU2xvd1BhdGhDYWxsS2V5IFNsb3dQYXRoQ2FsbENvbnRleHQ6OmtleVdp
dGhUYXJnZXQodm9pZCogY2FsbFRhcmdldCkgY29uc3QKK3sKKyAgICByZXR1cm4gU2xvd1BhdGhD
YWxsS2V5KG1fdGh1bmtTYXZlU2V0LCBjYWxsVGFyZ2V0LCBtX2FyZ3VtZW50UmVnaXN0ZXJzLCBt
X29mZnNldCk7Cit9CiAKLXZvaWQgc3RvcmVDb2RlT3JpZ2luKFN0YXRlJiBzdGF0ZSwgQ0NhbGxI
ZWxwZXJzJiBqaXQsIENvZGVPcmlnaW4gY29kZU9yaWdpbikKK1Nsb3dQYXRoQ2FsbCBTbG93UGF0
aENhbGxDb250ZXh0OjptYWtlQ2FsbCh2b2lkKiBjYWxsVGFyZ2V0KQogewotICAgIGlmICghY29k
ZU9yaWdpbi5pc1NldCgpKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgQ2FsbFNpdGVJbmRl
eCBjYWxsU2l0ZSA9IHN0YXRlLmppdENvZGUtPmNvbW1vbi5hZGRDb2RlT3JpZ2luKGNvZGVPcmln
aW4pOwotICAgIHVuc2lnbmVkIGxvY2F0aW9uQml0cyA9IGNhbGxTaXRlLmJpdHMoKTsKLSAgICBq
aXQuc3RvcmUzMigKLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIobG9jYXRpb25C
aXRzKSwKLSAgICAgICAgQ0NhbGxIZWxwZXJzOjp0YWdGb3Ioc3RhdGljX2Nhc3Q8VmlydHVhbFJl
Z2lzdGVyPihKU1N0YWNrOjpBcmd1bWVudENvdW50KSkpOwotfQotCi1NYWNyb0Fzc2VtYmxlcjo6
Q2FsbCBjYWxsT3BlcmF0aW9uKAotICAgIFN0YXRlJiBzdGF0ZSwgY29uc3QgUmVnaXN0ZXJTZXQm
IHVzZWRSZWdpc3RlcnMsIENDYWxsSGVscGVycyYgaml0LAotICAgIENvZGVPcmlnaW4gY29kZU9y
aWdpbiwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0KiBleGNlcHRpb25UYXJnZXQsCi0gICAgSl9K
SVRPcGVyYXRpb25fRVNzaUNJIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3VsdCwgU3RydWN0dXJlU3R1
YkluZm8qIHN0dWJJbmZvLAotICAgIEdQUlJlZyBvYmplY3QsIGNvbnN0IFVuaXF1ZWRTdHJpbmdJ
bXBsKiB1aWQpCi17Ci0gICAgc3RvcmVDb2RlT3JpZ2luKHN0YXRlLCBqaXQsIGNvZGVPcmlnaW4p
OwotICAgIENhbGxDb250ZXh0IGNvbnRleHQoc3RhdGUsIHVzZWRSZWdpc3RlcnMsIGppdCwgNCwg
cmVzdWx0KTsKLSAgICBqaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKAotICAgICAgICBD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoc3R1YkluZm8pLCBvYmplY3QsIENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbVB0cih1aWQpKTsKLSAgICByZXR1cm4gY29udGV4dC5tYWtlQ2FsbChiaXR3
aXNlX2Nhc3Q8dm9pZCo+KG9wZXJhdGlvbiksIGV4Y2VwdGlvblRhcmdldCk7Ci19Ci0KLU1hY3Jv
QXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oCi0gICAgU3RhdGUmIHN0YXRlLCBjb25zdCBS
ZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywgQ0NhbGxIZWxwZXJzJiBqaXQsCi0gICAgQ29kZU9y
aWdpbiBjb2RlT3JpZ2luLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QqIGV4Y2VwdGlvblRhcmdl
dCwKLSAgICBKX0pJVE9wZXJhdGlvbl9FU3NpSkkgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBT
dHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sCi0gICAgR1BSUmVnIG9iamVjdCwgVW5pcXVlZFN0
cmluZ0ltcGwqIHVpZCkKLXsKLSAgICBzdG9yZUNvZGVPcmlnaW4oc3RhdGUsIGppdCwgY29kZU9y
aWdpbik7Ci0gICAgQ2FsbENvbnRleHQgY29udGV4dChzdGF0ZSwgdXNlZFJlZ2lzdGVycywgaml0
LCA0LCByZXN1bHQpOwotICAgIGppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoCi0gICAg
ICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihzdHViSW5mbyksIG9iamVjdCwKLSAgICAg
ICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHVpZCkpOwotICAgIHJldHVybiBjb250ZXh0
Lm1ha2VDYWxsKGJpdHdpc2VfY2FzdDx2b2lkKj4ob3BlcmF0aW9uKSwgZXhjZXB0aW9uVGFyZ2V0
KTsKLX0KLQotTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbigKLSAgICBTdGF0ZSYg
c3RhdGUsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLCBDQ2FsbEhlbHBlcnMmIGpp
dCwgCi0gICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3Qq
IGV4Y2VwdGlvblRhcmdldCwKLSAgICBWX0pJVE9wZXJhdGlvbl9FU3NpSkpJIG9wZXJhdGlvbiwg
U3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBHUFJSZWcgdmFsdWUsCi0gICAgR1BSUmVnIG9i
amVjdCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKLXsKLSAgICBzdG9yZUNvZGVPcmlnaW4oc3Rh
dGUsIGppdCwgY29kZU9yaWdpbik7Ci0gICAgQ2FsbENvbnRleHQgY29udGV4dChzdGF0ZSwgdXNl
ZFJlZ2lzdGVycywgaml0LCA1LCBJbnZhbGlkR1BSUmVnKTsKLSAgICBqaXQuc2V0dXBBcmd1bWVu
dHNXaXRoRXhlY1N0YXRlKAotICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoc3R1
YkluZm8pLCB2YWx1ZSwgb2JqZWN0LAotICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1Q
dHIodWlkKSk7Ci0gICAgcmV0dXJuIGNvbnRleHQubWFrZUNhbGwoYml0d2lzZV9jYXN0PHZvaWQq
PihvcGVyYXRpb24pLCBleGNlcHRpb25UYXJnZXQpOworICAgIHJldHVybiBTbG93UGF0aENhbGwo
bV9qaXQuY2FsbCgpLCBrZXlXaXRoVGFyZ2V0KGNhbGxUYXJnZXQpKTsKK30KKwordm9pZCByZWdp
c3RlclNsb3dQYXRoQ2FsbChTdGF0ZSYgc3RhdGUsIFNsb3dQYXRoQ2FsbCBjYWxsKQoreworICAg
IHN0YXRlLmZpbmFsaXplci0+c2xvd1BhdGhDYWxscy5hcHBlbmQoY2FsbCk7Cit9CisKK0NhbGxT
aXRlSW5kZXggY2FsbFNpdGVJbmRleEZvckNvZGVPcmlnaW4oU3RhdGUmIHN0YXRlLCBDb2RlT3Jp
Z2luIGNvZGVPcmlnaW4pCit7CisgICAgaWYgKGNvZGVPcmlnaW4pCisgICAgICAgIHJldHVybiBz
dGF0ZS5qaXRDb2RlLT5jb21tb24uYWRkQ29kZU9yaWdpbihjb2RlT3JpZ2luKTsKKyAgICByZXR1
cm4gQ2FsbFNpdGVJbmRleCgpOwogfQogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNsb3dQYXRoQ2FsbC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU2xvd1BhdGhDYWxsLmgJKHJldmlzaW9u
IDE5MDc0OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU2xvd1BhdGhDYWxsLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEz
LCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykg
MjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucwpAQCAtNTUsMjAgKzU1LDcyIEBAIHByaXZhdGU6CiAgICAgU2xvd1Bh
dGhDYWxsS2V5IG1fa2V5OwogfTsKIAotdm9pZCBzdG9yZUNvZGVPcmlnaW4oU3RhdGUmLCBDQ2Fs
bEhlbHBlcnMmLCBDb2RlT3JpZ2luKTsKKy8vIFRoaXMgd2lsbCBiZSBhbiBSQUlJIHRoaW5neSB0
aGF0IHdpbGwgc2V0IHVwIHRoZSBuZWNlc3Nhcnkgc3RhY2sgc2l6ZXMgYW5kIG9mZnNldHMgYW5k
IHN1Y2guCitjbGFzcyBTbG93UGF0aENhbGxDb250ZXh0IHsKK3B1YmxpYzoKKyAgICBTbG93UGF0
aENhbGxDb250ZXh0KFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3RlcnMsIENDYWxsSGVscGVycyYsIHVu
c2lnbmVkIG51bUFyZ3MsIEdQUlJlZyByZXR1cm5SZWdpc3Rlcik7CisgICAgflNsb3dQYXRoQ2Fs
bENvbnRleHQoKTsKIAorICAgIFNsb3dQYXRoQ2FsbCBtYWtlQ2FsbCh2b2lkKiBjYWxsVGFyZ2V0
KTsKKworcHJpdmF0ZToKKyAgICBTbG93UGF0aENhbGxLZXkga2V5V2l0aFRhcmdldCh2b2lkKiBj
YWxsVGFyZ2V0KSBjb25zdDsKKyAgICAKKyAgICBSZWdpc3RlclNldCBtX2FyZ3VtZW50UmVnaXN0
ZXJzOworICAgIFJlZ2lzdGVyU2V0IG1fY2FsbGluZ0NvbnZlbnRpb25SZWdpc3RlcnM7CisgICAg
Q0NhbGxIZWxwZXJzJiBtX2ppdDsKKyAgICB1bnNpZ25lZCBtX251bUFyZ3M7CisgICAgR1BSUmVn
IG1fcmV0dXJuUmVnaXN0ZXI7CisgICAgc2l6ZV90IG1fb2Zmc2V0VG9TYXZpbmdBcmVhOworICAg
IHNpemVfdCBtX3N0YWNrQnl0ZXNOZWVkZWQ7CisgICAgUmVnaXN0ZXJTZXQgbV90aHVua1NhdmVT
ZXQ7CisgICAgcHRyZGlmZl90IG1fb2Zmc2V0OworfTsKKwordGVtcGxhdGU8dHlwZW5hbWUuLi4g
QXJndW1lbnRUeXBlcz4KK1Nsb3dQYXRoQ2FsbCBjYWxsT3BlcmF0aW9uKAorICAgIGNvbnN0IFJl
Z2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLCBDQ2FsbEhlbHBlcnMmIGppdCwgQ0NhbGxIZWxwZXJz
OjpKdW1wTGlzdCogZXhjZXB0aW9uVGFyZ2V0LAorICAgIEZ1bmN0aW9uUHRyIGZ1bmN0aW9uLCBH
UFJSZWcgcmVzdWx0R1BSLCBBcmd1bWVudFR5cGVzLi4uIGFyZ3VtZW50cykKK3sKKyAgICBTbG93
UGF0aENhbGwgY2FsbDsKKyAgICB7CisgICAgICAgIFNsb3dQYXRoQ2FsbENvbnRleHQgY29udGV4
dCh1c2VkUmVnaXN0ZXJzLCBqaXQsIHNpemVvZi4uLihBcmd1bWVudFR5cGVzKSArIDEsIHJlc3Vs
dEdQUik7CisgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJndW1lbnRz
Li4uKTsKKyAgICAgICAgY2FsbCA9IGNvbnRleHQubWFrZUNhbGwoZnVuY3Rpb24udmFsdWUoKSk7
CisgICAgfQorICAgIGlmIChleGNlcHRpb25UYXJnZXQpCisgICAgICAgIGV4Y2VwdGlvblRhcmdl
dC0+YXBwZW5kKGppdC5lbWl0RXhjZXB0aW9uQ2hlY2soKSk7CisgICAgcmV0dXJuIGNhbGw7Cit9
CisKK3RlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50VHlwZXM+CitTbG93UGF0aENhbGwgY2Fs
bE9wZXJhdGlvbigKKyAgICBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywgQ0NhbGxI
ZWxwZXJzJiBqaXQsIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCwKKyAgICBDQ2FsbEhlbHBl
cnM6Okp1bXBMaXN0KiBleGNlcHRpb25UYXJnZXQsIEZ1bmN0aW9uUHRyIGZ1bmN0aW9uLCBHUFJS
ZWcgcmVzdWx0R1BSLAorICAgIEFyZ3VtZW50VHlwZXMuLi4gYXJndW1lbnRzKQoreworICAgIGlm
IChjYWxsU2l0ZUluZGV4KSB7CisgICAgICAgIGppdC5zdG9yZTMyKAorICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoY2FsbFNpdGVJbmRleC5iaXRzKCkpLAorICAgICAgICAg
ICAgQ0NhbGxIZWxwZXJzOjp0YWdGb3IoSlNTdGFjazo6QXJndW1lbnRDb3VudCkpOworICAgIH0K
KyAgICByZXR1cm4gY2FsbE9wZXJhdGlvbih1c2VkUmVnaXN0ZXJzLCBqaXQsIGV4Y2VwdGlvblRh
cmdldCwgZnVuY3Rpb24sIHJlc3VsdEdQUiwgYXJndW1lbnRzLi4uKTsKK30KKwordm9pZCByZWdp
c3RlclNsb3dQYXRoQ2FsbChTdGF0ZSYsIFNsb3dQYXRoQ2FsbCk7CitDYWxsU2l0ZUluZGV4IGNh
bGxTaXRlSW5kZXhGb3JDb2RlT3JpZ2luKFN0YXRlJiwgQ29kZU9yaWdpbik7CisKK3RlbXBsYXRl
PHR5cGVuYW1lLi4uIEFyZ3VtZW50VHlwZXM+CiBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3Bl
cmF0aW9uKAotICAgIFN0YXRlJiwgY29uc3QgUmVnaXN0ZXJTZXQmLCBDQ2FsbEhlbHBlcnMmLCBD
b2RlT3JpZ2luLCBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0KiwKLSAgICBKX0pJVE9wZXJhdGlvbl9F
U3NpQ0ksIEdQUlJlZywgU3RydWN0dXJlU3R1YkluZm8qLCBHUFJSZWcsCi0gICAgY29uc3QgVW5p
cXVlZFN0cmluZ0ltcGwqIHVpZCk7Ci1NYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9u
KAotICAgIFN0YXRlJiwgY29uc3QgUmVnaXN0ZXJTZXQmLCBDQ2FsbEhlbHBlcnMmLCBDb2RlT3Jp
Z2luLCBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0KiwKLSAgICBKX0pJVE9wZXJhdGlvbl9FU3NpSkks
IEdQUlJlZyByZXN1bHQsIFN0cnVjdHVyZVN0dWJJbmZvKiwgR1BSUmVnIG9iamVjdCwKLSAgICBV
bmlxdWVkU3RyaW5nSW1wbCogdWlkKTsKLU1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRp
b24oCi0gICAgU3RhdGUmLCBjb25zdCBSZWdpc3RlclNldCYsIENDYWxsSGVscGVycyYsIENvZGVP
cmlnaW4sIENDYWxsSGVscGVyczo6SnVtcExpc3QqLAotICAgIFZfSklUT3BlcmF0aW9uX0VTc2lK
SkksIFN0cnVjdHVyZVN0dWJJbmZvKiwgR1BSUmVnIHZhbHVlLCBHUFJSZWcgb2JqZWN0LAotICAg
IFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpOworICAgIFN0YXRlJiBzdGF0ZSwgY29uc3QgUmVnaXN0
ZXJTZXQmIHVzZWRSZWdpc3RlcnMsIENDYWxsSGVscGVycyYgaml0LCBDb2RlT3JpZ2luIGNvZGVP
cmlnaW4sCisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCogZXhjZXB0aW9uVGFyZ2V0LCBGdW5j
dGlvblB0ciBmdW5jdGlvbiwgR1BSUmVnIHJlc3VsdCwgQXJndW1lbnRUeXBlcy4uLiBhcmd1bWVu
dHMpCit7CisgICAgU2xvd1BhdGhDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKAorICAgICAgICB1
c2VkUmVnaXN0ZXJzLCBqaXQsIGNhbGxTaXRlSW5kZXhGb3JDb2RlT3JpZ2luKHN0YXRlLCBjb2Rl
T3JpZ2luKSwgZXhjZXB0aW9uVGFyZ2V0LCBmdW5jdGlvbiwKKyAgICAgICAgcmVzdWx0LCBhcmd1
bWVudHMuLi4pOworICAgIHJlZ2lzdGVyU2xvd1BhdGhDYWxsKHN0YXRlLCBjYWxsKTsKKyAgICBy
ZXR1cm4gY2FsbC5jYWxsKCk7Cit9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGF0ZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhdGUuaAkocmV2aXNpb24gMTkwNzQ5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTdGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03
OCw2ICs3OCw3IEBAIHB1YmxpYzoKICAgICBTZWdtZW50ZWRWZWN0b3I8R2V0QnlJZERlc2NyaXB0
b3I+IGdldEJ5SWRzOwogICAgIFNlZ21lbnRlZFZlY3RvcjxQdXRCeUlkRGVzY3JpcHRvcj4gcHV0
QnlJZHM7CiAgICAgU2VnbWVudGVkVmVjdG9yPENoZWNrSW5EZXNjcmlwdG9yPiBjaGVja0luczsK
KyAgICBTZWdtZW50ZWRWZWN0b3I8TGF6eVNsb3dQYXRoRGVzY3JpcHRvcj4gbGF6eVNsb3dQYXRo
czsKICAgICBWZWN0b3I8SlNDYWxsPiBqc0NhbGxzOwogICAgIFZlY3RvcjxKU0NhbGxWYXJhcmdz
PiBqc0NhbGxWYXJhcmdzZXM7CiAgICAgVmVjdG9yPEpTVGFpbENhbGw+IGpzVGFpbENhbGxzOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExUaHVua3MuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVGh1bmtzLmNwcAkocmV2aXNpb24gMTkw
NzQ5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExUaHVua3MuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMSw2ICszMSw3IEBACiAjaW5jbHVkZSAiQXNzZW1ibHlIZWxwZXJzLmgiCiAj
aW5jbHVkZSAiRlBSSW5mby5oIgogI2luY2x1ZGUgIkZUTE9TUkV4aXRDb21waWxlci5oIgorI2lu
Y2x1ZGUgIkZUTE9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJGVExTYXZlUmVzdG9yZS5oIgogI2lu
Y2x1ZGUgIkdQUkluZm8uaCIKICNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCkBAIC0zOSwxMSArNDAs
MTIgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewogCiB1c2luZyBuYW1lc3BhY2Ug
REZHOwogCi1NYWNyb0Fzc2VtYmxlckNvZGVSZWYgb3NyRXhpdEdlbmVyYXRpb25UaHVua0dlbmVy
YXRvcihWTSogdm0pCitzdGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGdlbmVyaWNHZW5lcmF0
aW9uVGh1bmtHZW5lcmF0b3IoCisgICAgVk0qIHZtLCBGdW5jdGlvblB0ciBnZW5lcmF0aW9uRnVu
Y3Rpb24sIGNvbnN0IGNoYXIqIG5hbWUsIHVuc2lnbmVkIGV4dHJhUG9wc1RvUmVzdG9yZSkKIHsK
ICAgICBBc3NlbWJseUhlbHBlcnMgaml0KHZtLCAwKTsKICAgICAKLSAgICAvLyBOb3RlIHRoYXQg
dGhlICJyZXR1cm4gYWRkcmVzcyIgd2lsbCBiZSB0aGUgT1NSIGV4aXQgSUQuCisgICAgLy8gTm90
ZSB0aGF0IHRoZSAicmV0dXJuIGFkZHJlc3MiIHdpbGwgYmUgdGhlIElEIHRoYXQgd2UgcGFzcyB0
byB0aGUgZ2VuZXJhdGlvbiBmdW5jdGlvbi4KICAgICAKICAgICBwdHJkaWZmX3Qgc3RhY2tNaXNh
bGlnbm1lbnQgPSBNYWNyb0Fzc2VtYmxlcjo6cHVzaFRvU2F2ZUJ5dGVPZmZzZXQoKTsKICAgICAK
QEAgLTkwLDExICs5MiwxNCBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgb3NyRXhpdEdlbmVyYXRp
b25UCiAgICAgd2hpbGUgKG51bWJlck9mUmVxdWlyZWRQb3BzLS0pCiAgICAgICAgIGppdC5wb3BU
b1Jlc3RvcmUoR1BSSW5mbzo6cmVnVDEpOwogICAgIGppdC5wb3BUb1Jlc3RvcmUoTWFjcm9Bc3Nl
bWJsZXI6OmZyYW1lUG9pbnRlclJlZ2lzdGVyKTsKLSAgICAKLSAgICAvLyBBdCB0aGlzIHBvaW50
IHdlJ3JlIHNpdHRpbmcgb24gdGhlIHJldHVybiBhZGRyZXNzIC0gc28gaWYgd2UgZGlkIGEganVt
cCByaWdodCBub3csIHRoZQotICAgIC8vIHRhaWwtY2FsbGVlIHdvdWxkIGJlIGhhcHB5LiBJbnN0
ZWFkIHdlJ2xsIHN0YXNoIHRoZSBjYWxsZWUgaW4gdGhlIHJldHVybiBhZGRyZXNzIGFuZCB0aGVu
Ci0gICAgLy8gcmVzdG9yZSBhbGwgcmVnaXN0ZXJzLgotICAgIAorCisgICAgLy8gV2hlbiB3ZSBj
YW1lIGluIGhlcmUsIHRoZXJlIHdhcyBhbiBhZGRpdGlvbmFsIHRoaW5nIHB1c2hlZCB0byB0aGUg
c3RhY2suIFNvbWUgY2xpZW50cyB3YW50IGl0CisgICAgLy8gcG9wcGVkIGJlZm9yZSBwcm9jZWVk
aW5nLgorICAgIHdoaWxlIChleHRyYVBvcHNUb1Jlc3RvcmUtLSkKKyAgICAgICAgaml0LnBvcFRv
UmVzdG9yZShHUFJJbmZvOjpyZWdUMSk7CisKKyAgICAvLyBQdXQgdGhlIHJldHVybiBhZGRyZXNz
IHdoZXJldmVyIHRoZSByZXR1cm4gaW5zdHJ1Y3Rpb24gd2FudHMgaXQuIE9uIGFsbCBwbGF0Zm9y
bXMsIHRoaXMKKyAgICAvLyBlbnN1cmVzIHRoYXQgdGhlIHJldHVybiBhZGRyZXNzIGlzIG91dCBv
ZiB0aGUgd2F5IG9mIHJlZ2lzdGVyIHJlc3RvcmF0aW9uLgogICAgIGppdC5yZXN0b3JlUmV0dXJu
QWRkcmVzc0JlZm9yZVJldHVybihHUFJJbmZvOjpyZWdUMCk7CiAKICAgICByZXN0b3JlQWxsUmVn
aXN0ZXJzKGppdCwgYnVmZmVyKTsKQEAgLTEwMiw4ICsxMDcsMjIgQEAgTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmIG9zckV4aXRHZW5lcmF0aW9uVAogICAgIGppdC5yZXQoKTsKICAgICAKICAgICBMaW5r
QnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwgaml0LCBHTE9CQUxfVEhVTktfSUQpOwotICAgIHBhdGNo
QnVmZmVyLmxpbmsoZnVuY3Rpb25DYWxsLCBjb21waWxlRlRMT1NSRXhpdCk7Ci0gICAgcmV0dXJu
IEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsICgiRlRMIE9TUiBleGl0IGdlbmVyYXRpb24gdGh1
bmsiKSk7CisgICAgcGF0Y2hCdWZmZXIubGluayhmdW5jdGlvbkNhbGwsIGdlbmVyYXRpb25GdW5j
dGlvbik7CisgICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsICgiJXMiLCBuYW1l
KSk7Cit9CisKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBvc3JFeGl0R2VuZXJhdGlvblRodW5rR2Vu
ZXJhdG9yKFZNKiB2bSkKK3sKKyAgICB1bnNpZ25lZCBleHRyYVBvcHNUb1Jlc3RvcmUgPSAwOwor
ICAgIHJldHVybiBnZW5lcmljR2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKAorICAgICAgICB2bSwg
Y29tcGlsZUZUTE9TUkV4aXQsICJGVEwgT1NSIGV4aXQgZ2VuZXJhdGlvbiB0aHVuayIsIGV4dHJh
UG9wc1RvUmVzdG9yZSk7Cit9CisKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBsYXp5U2xvd1BhdGhH
ZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3IoVk0qIHZtKQoreworICAgIHVuc2lnbmVkIGV4dHJhUG9w
c1RvUmVzdG9yZSA9IDE7CisgICAgcmV0dXJuIGdlbmVyaWNHZW5lcmF0aW9uVGh1bmtHZW5lcmF0
b3IoCisgICAgICAgIHZtLCBjb21waWxlRlRMTGF6eVNsb3dQYXRoLCAiRlRMIGxhenkgc2xvdyBw
YXRoIGdlbmVyYXRpb24gdGh1bmsiLCBleHRyYVBvcHNUb1Jlc3RvcmUpOwogfQogCiBzdGF0aWMg
dm9pZCByZWdpc3RlckNsb2JiZXJDaGVjayhBc3NlbWJseUhlbHBlcnMmIGppdCwgUmVnaXN0ZXJT
ZXQgZG9udENsb2JiZXIpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFRodW5r
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVGh1bmtzLmgJ
KHJldmlzaW9uIDE5MDc0OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVGh1bmtz
LmgJKHdvcmtpbmcgY29weSkKQEAgLTQwLDYgKzQwLDcgQEAgY2xhc3MgVk07CiBuYW1lc3BhY2Ug
RlRMIHsKIAogTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG9zckV4aXRHZW5lcmF0aW9uVGh1bmtHZW5l
cmF0b3IoVk0qKTsKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBsYXp5U2xvd1BhdGhHZW5lcmF0aW9u
VGh1bmtHZW5lcmF0b3IoVk0qKTsKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBzbG93UGF0aENhbGxU
aHVua0dlbmVyYXRvcihWTSYsIGNvbnN0IFNsb3dQYXRoQ2FsbEtleSYpOwogCiB0ZW1wbGF0ZTx0
eXBlbmFtZSBLZXlUeXBlQXJndW1lbnQ+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50
ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ludGVycHJldGVyL0NhbGxGcmFtZS5oCShyZXZpc2lvbiAxOTA3NDkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgJKHdvcmtpbmcgY29weSkKQEAgLTEs
NyArMSw3IEBACiAvKgogICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAxIEhhcnJpIFBvcnRlbiAo
cG9ydGVuQGtkZS5vcmcpCiAgKiAgQ29weXJpZ2h0IChDKSAyMDAxIFBldGVyIEtlbGx5IChwbWtA
cG9zdC5jb20pCi0gKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA3LCAyMDA4LCAyMDExLCAyMDEz
LCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMp
IDIwMDMsIDIwMDcsIDIwMDgsIDIwMTEsIDIwMTMtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYwpAQCAtMzksNiArMzksMTEgQEAgbmFtZXNw
YWNlIEpTQyAgewogICAgIGNsYXNzIEpTU2NvcGU7CiAKICAgICBzdHJ1Y3QgQ2FsbFNpdGVJbmRl
eCB7CisgICAgICAgIENhbGxTaXRlSW5kZXgoKQorICAgICAgICAgICAgOiBtX2JpdHMoVUlOVF9N
QVgpCisgICAgICAgIHsKKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgZXhwbGljaXQgQ2Fs
bFNpdGVJbmRleCh1aW50MzJfdCBiaXRzKQogICAgICAgICAgICAgOiBtX2JpdHMoYml0cykKICAg
ICAgICAgeyB9CkBAIC00Nyw2ICs1Miw5IEBAIG5hbWVzcGFjZSBKU0MgIHsKICAgICAgICAgICAg
IDogbV9iaXRzKGJpdHdpc2VfY2FzdDx1aW50MzJfdD4oaW5zdHJ1Y3Rpb24pKQogICAgICAgICB7
IH0KICNlbmRpZgorCisgICAgICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJl
dHVybiBtX2JpdHMgIT0gVUlOVF9NQVg7IH0KKyAgICAgICAgCiAgICAgICAgIGlubGluZSB1aW50
MzJfdCBiaXRzKCkgY29uc3QgeyByZXR1cm4gbV9iaXRzOyB9CiAKICAgICBwcml2YXRlOgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCShyZXZpc2lv
biAxOTA3NDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDMxLDcgKzEwMzEsNyBAQCBKU0NlbGwqIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uTmV3T2JqZWN0CiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAg
TmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Ci0gICAgCisKICAgICByZXR1
cm4gY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYywgc3RydWN0dXJlKTsKIH0KIApJbmRleDogU291
cmNlL1dURi93dGYvUGFyYWxsZWxIZWxwZXJQb29sLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V1RGL3d0Zi9QYXJhbGxlbEhlbHBlclBvb2wuY3BwCShyZXZpc2lvbiAxOTA3NDkpCisrKyBTb3Vy
Y2UvV1RGL3d0Zi9QYXJhbGxlbEhlbHBlclBvb2wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Myw3
ICs1Myw3IEBAIFBhcmFsbGVsSGVscGVyQ2xpZW50Ojp+UGFyYWxsZWxIZWxwZXJDbGkKICAgICB9
CiB9CiAKLXZvaWQgUGFyYWxsZWxIZWxwZXJDbGllbnQ6OnNldFRhc2soUmVmUHRyPFNoYXJlZFRh
c2s+IHRhc2spCit2b2lkIFBhcmFsbGVsSGVscGVyQ2xpZW50OjpzZXRUYXNrKFJlZlB0cjxTaGFy
ZWRUYXNrPHZvaWQoKT4+IHRhc2spCiB7CiAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9wb29sLT5t
X2xvY2spOwogICAgIFJFTEVBU0VfQVNTRVJUKCFtX3Rhc2spOwpAQCAtNjksNyArNjksNyBAQCB2
b2lkIFBhcmFsbGVsSGVscGVyQ2xpZW50OjpmaW5pc2goKQogCiB2b2lkIFBhcmFsbGVsSGVscGVy
Q2xpZW50Ojpkb1NvbWVIZWxwaW5nKCkKIHsKLSAgICBSZWZQdHI8U2hhcmVkVGFzaz4gdGFzazsK
KyAgICBSZWZQdHI8U2hhcmVkVGFzazx2b2lkKCk+PiB0YXNrOwogICAgIHsKICAgICAgICAgTG9j
a0hvbGRlciBsb2NrZXIobV9wb29sLT5tX2xvY2spOwogICAgICAgICB0YXNrID0gY2xhaW1UYXNr
KGxvY2tlcik7CkBAIC04MCw3ICs4MCw3IEBAIHZvaWQgUGFyYWxsZWxIZWxwZXJDbGllbnQ6OmRv
U29tZUhlbHBpbmcKICAgICBydW5UYXNrKHRhc2spOwogfQogCi12b2lkIFBhcmFsbGVsSGVscGVy
Q2xpZW50OjpydW5UYXNrSW5QYXJhbGxlbChSZWZQdHI8U2hhcmVkVGFzaz4gdGFzaykKK3ZvaWQg
UGFyYWxsZWxIZWxwZXJDbGllbnQ6OnJ1blRhc2tJblBhcmFsbGVsKFJlZlB0cjxTaGFyZWRUYXNr
PHZvaWQoKT4+IHRhc2spCiB7CiAgICAgc2V0VGFzayh0YXNrKTsKICAgICBkb1NvbWVIZWxwaW5n
KCk7CkBAIC05NCw3ICs5NCw3IEBAIHZvaWQgUGFyYWxsZWxIZWxwZXJDbGllbnQ6OmZpbmlzaChj
b25zdCAKICAgICAgICAgbV9wb29sLT5tX3dvcmtDb21wbGV0ZUNvbmRpdGlvbi53YWl0KG1fcG9v
bC0+bV9sb2NrKTsKIH0KIAotUmVmUHRyPFNoYXJlZFRhc2s+IFBhcmFsbGVsSGVscGVyQ2xpZW50
OjpjbGFpbVRhc2soY29uc3QgTG9ja0hvbGRlciYpCitSZWZQdHI8U2hhcmVkVGFzazx2b2lkKCk+
PiBQYXJhbGxlbEhlbHBlckNsaWVudDo6Y2xhaW1UYXNrKGNvbnN0IExvY2tIb2xkZXImKQogewog
ICAgIGlmICghbV90YXNrKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTEwMyw3ICsxMDMs
NyBAQCBSZWZQdHI8U2hhcmVkVGFzaz4gUGFyYWxsZWxIZWxwZXJDbGllbnQ6CiAgICAgcmV0dXJu
IG1fdGFzazsKIH0KIAotdm9pZCBQYXJhbGxlbEhlbHBlckNsaWVudDo6cnVuVGFzayhSZWZQdHI8
U2hhcmVkVGFzaz4gdGFzaykKK3ZvaWQgUGFyYWxsZWxIZWxwZXJDbGllbnQ6OnJ1blRhc2soUmVm
UHRyPFNoYXJlZFRhc2s8dm9pZCgpPj4gdGFzaykKIHsKICAgICBSRUxFQVNFX0FTU0VSVChtX251
bUFjdGl2ZSk7CiAgICAgUkVMRUFTRV9BU1NFUlQodGFzayk7CkBAIC0xNTMsNyArMTUzLDcgQEAg
dm9pZCBQYXJhbGxlbEhlbHBlclBvb2w6OmVuc3VyZVRocmVhZHModQogdm9pZCBQYXJhbGxlbEhl
bHBlclBvb2w6OmRvU29tZUhlbHBpbmcoKQogewogICAgIFBhcmFsbGVsSGVscGVyQ2xpZW50KiBj
bGllbnQ7Ci0gICAgUmVmUHRyPFNoYXJlZFRhc2s+IHRhc2s7CisgICAgUmVmUHRyPFNoYXJlZFRh
c2s8dm9pZCgpPj4gdGFzazsKICAgICB7CiAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9j
ayk7CiAgICAgICAgIGNsaWVudCA9IGdldENsaWVudFdpdGhUYXNrKGxvY2tlcik7CkBAIC0xODIs
NyArMTgyLDcgQEAgdm9pZCBQYXJhbGxlbEhlbHBlclBvb2w6OmhlbHBlclRocmVhZEJvZAogewog
ICAgIGZvciAoOzspIHsKICAgICAgICAgUGFyYWxsZWxIZWxwZXJDbGllbnQqIGNsaWVudDsKLSAg
ICAgICAgUmVmUHRyPFNoYXJlZFRhc2s+IHRhc2s7CisgICAgICAgIFJlZlB0cjxTaGFyZWRUYXNr
PHZvaWQoKT4+IHRhc2s7CiAKICAgICAgICAgewogICAgICAgICAgICAgTG9ja0hvbGRlciBsb2Nr
ZXIobV9sb2NrKTsKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1BhcmFsbGVsSGVscGVyUG9vbC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1BhcmFsbGVsSGVscGVyUG9vbC5oCShyZXZpc2lv
biAxOTA3NDkpCisrKyBTb3VyY2UvV1RGL3d0Zi9QYXJhbGxlbEhlbHBlclBvb2wuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTMwLDEyICsxMzAsMTIgQEAgcHVibGljOgogICAgIFdURl9FWFBPUlRfUFJJ
VkFURSBQYXJhbGxlbEhlbHBlckNsaWVudChSZWZQdHI8UGFyYWxsZWxIZWxwZXJQb29sPik7CiAg
ICAgV1RGX0VYUE9SVF9QUklWQVRFIH5QYXJhbGxlbEhlbHBlckNsaWVudCgpOwogCi0gICAgV1RG
X0VYUE9SVF9QUklWQVRFIHZvaWQgc2V0VGFzayhSZWZQdHI8U2hhcmVkVGFzaz4pOworICAgIFdU
Rl9FWFBPUlRfUFJJVkFURSB2b2lkIHNldFRhc2soUmVmUHRyPFNoYXJlZFRhc2s8dm9pZCgpPj4p
OwogCiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KICAgICB2b2lkIHNldEZ1bmN0aW9u
KGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCiAgICAgewotICAgICAgICBzZXRUYXNrKGNyZWF0ZVNo
YXJlZFRhc2soZnVuY3RvcikpOworICAgICAgICBzZXRUYXNrKGNyZWF0ZVNoYXJlZFRhc2s8dm9p
ZCgpPihmdW5jdG9yKSk7CiAgICAgfQogICAgIAogICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lk
IGZpbmlzaCgpOwpAQCAtMTQ2LDcgKzE0Niw3IEBAIHB1YmxpYzoKICAgICAvLyBjbGllbnQtPnNl
dFRhc2sodGFzayk7CiAgICAgLy8gY2xpZW50LT5kb1NvbWVIZWxwaW5nKCk7CiAgICAgLy8gY2xp
ZW50LT5maW5pc2goKTsKLSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBydW5UYXNrSW5QYXJh
bGxlbChSZWZQdHI8U2hhcmVkVGFzaz4pOworICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIHJ1
blRhc2tJblBhcmFsbGVsKFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoKT4+KTsKIAogICAgIC8vIEVx
dWl2YWxlbnQgdG86CiAgICAgLy8gY2xpZW50LT5zZXRGdW5jdGlvbihmdW5jdG9yKTsKQEAgLTE1
NSw3ICsxNTUsNyBAQCBwdWJsaWM6CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KICAg
ICB2b2lkIHJ1bkZ1bmN0aW9uSW5QYXJhbGxlbChjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQogICAg
IHsKLSAgICAgICAgcnVuVGFza0luUGFyYWxsZWwoY3JlYXRlU2hhcmVkVGFzayhmdW5jdG9yKSk7
CisgICAgICAgIHJ1blRhc2tJblBhcmFsbGVsKGNyZWF0ZVNoYXJlZFRhc2s8dm9pZCgpPihmdW5j
dG9yKSk7CiAgICAgfQogCiAgICAgUGFyYWxsZWxIZWxwZXJQb29sJiBwb29sKCkgeyByZXR1cm4g
Km1fcG9vbDsgfQpAQCAtMTY1LDExICsxNjUsMTEgQEAgcHJpdmF0ZToKICAgICBmcmllbmQgY2xh
c3MgUGFyYWxsZWxIZWxwZXJQb29sOwogCiAgICAgdm9pZCBmaW5pc2goY29uc3QgTG9ja0hvbGRl
ciYpOwotICAgIFJlZlB0cjxTaGFyZWRUYXNrPiBjbGFpbVRhc2soY29uc3QgTG9ja0hvbGRlciYp
OwotICAgIHZvaWQgcnVuVGFzayhSZWZQdHI8U2hhcmVkVGFzaz4pOworICAgIFJlZlB0cjxTaGFy
ZWRUYXNrPHZvaWQoKT4+IGNsYWltVGFzayhjb25zdCBMb2NrSG9sZGVyJik7CisgICAgdm9pZCBy
dW5UYXNrKFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoKT4+KTsKICAgICAKICAgICBSZWZQdHI8UGFy
YWxsZWxIZWxwZXJQb29sPiBtX3Bvb2w7Ci0gICAgUmVmUHRyPFNoYXJlZFRhc2s+IG1fdGFzazsK
KyAgICBSZWZQdHI8U2hhcmVkVGFzazx2b2lkKCk+PiBtX3Rhc2s7CiAgICAgdW5zaWduZWQgbV9u
dW1BY3RpdmUgeyAwIH07CiB9OwogCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9TaGFyZWRUYXNrLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvU2hhcmVkVGFzay5oCShyZXZpc2lvbiAxOTA3
NDkpCisrKyBTb3VyY2UvV1RGL3d0Zi9TaGFyZWRUYXNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTQx
LDEzICs0MSwxMyBAQCBuYW1lc3BhY2UgV1RGIHsKIC8vCiAvLyBIZXJlJ3MgYW4gZXhhbXBsZSBv
ZiBob3cgU2hhcmVkVGFzayBjYW4gYmUgYmV0dGVyIHRoYW4gc3RkOjpmdW5jdGlvbi4gSWYgeW91
IGRvOgogLy8KLS8vIHN0ZDo6ZnVuY3Rpb24gYSA9IGI7CisvLyBzdGQ6OmZ1bmN0aW9uPGludChk
b3VibGUpPiBhID0gYjsKIC8vCiAvLyBUaGVuICJhIiB3aWxsIGdldCBpdHMgb3duIGNvcHkgb2Yg
YWxsIGNhcHR1cmVkIGJ5LXZhbHVlIHZhcmlhYmxlcy4gVGhlIGFjdCBvZiBjb3B5aW5nIG1heQog
Ly8gcmVxdWlyZSBjYWxscyB0byBzeXN0ZW0gbWFsbG9jLCBhbmQgaXQgbWF5IGJlIGxpbmVhciB0
aW1lIGluIHRoZSB0b3RhbCBzaXplIG9mIGNhcHR1cmVkCiAvLyB2YXJpYWJsZXMuIE9uIHRoZSBv
dGhlciBoYW5kLCBpZiB5b3UgZG86CiAvLwotLy8gUmVmUHRyPFNoYXJlZFRhc2s+IGEgPSBiOwor
Ly8gUmVmUHRyPFNoYXJlZFRhc2s8aW50KGRvdWJsZSk+IGEgPSBiOwogLy8KIC8vIFRoZW4gImEi
IHdpbGwgcG9pbnQgdG8gdGhlIHNhbWUgdGFzayBhcyBiLCBhbmQgdGhlIG9ubHkgd29yayBpbnZv
bHZlZCBpcyB0aGUgQ0FTIHRvIGluY3JlYXNlIHRoZQogLy8gcmVmZXJlbmNlIGNvdW50LgpAQCAt
NTgsMTggKzU4LDIxIEBAIG5hbWVzcGFjZSBXVEYgewogLy8gY3JlYXRlU2hhcmVkVGFzaygpLCBi
ZWxvdykuIEJ1dCBTaGFyZWRUYXNrIGFsc28gYWxsb3dzIHlvdSB0byBjcmVhdGUgeW91ciBvd24g
c3ViY2xhc3MgYW5kIHB1dAogLy8gc3RhdGUgaW4gbWVtYmVyIGZpZWxkcy4gVGhpcyBjYW4gYmUg
bW9yZSBuYXR1cmFsIGlmIHlvdSB3YW50IGZpbmUtZ3JhaW5lZCBjb250cm9sIG92ZXIgd2hhdAog
Ly8gc3RhdGUgaXMgc2hhcmVkIGJldHdlZW4gaW5zdGFuY2VzIG9mIHRoZSB0YXNrLgotY2xhc3Mg
U2hhcmVkVGFzayA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxTaGFyZWRUYXNrPiB7Cit0
ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdGlvblR5cGU+IGNsYXNzIFNoYXJlZFRhc2s7Cit0ZW1wbGF0
ZTx0eXBlbmFtZSBSZXN1bHRUeXBlLCB0eXBlbmFtZS4uLiBBcmd1bWVudFR5cGVzPgorY2xhc3Mg
U2hhcmVkVGFzazxSZXN1bHRUeXBlKEFyZ3VtZW50VHlwZXMuLi4pPiA6IHB1YmxpYyBUaHJlYWRT
YWZlUmVmQ291bnRlZDxTaGFyZWRUYXNrPFJlc3VsdFR5cGUoQXJndW1lbnRUeXBlcy4uLik+PiB7
CiBwdWJsaWM6CiAgICAgU2hhcmVkVGFzaygpIHsgfQogICAgIHZpcnR1YWwgflNoYXJlZFRhc2so
KSB7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBydW4oKSA9IDA7CisgICAgdmlydHVhbCBSZXN1bHRU
eXBlIHJ1bihBcmd1bWVudFR5cGVzLi4uKSA9IDA7CiB9OwogCiAvLyBUaGlzIGlzIGEgdXRpbGl0
eSBjbGFzcyB0aGF0IGFsbG93cyB5b3UgdG8gY3JlYXRlIGEgU2hhcmVkVGFzayBzdWJjbGFzcyB1
c2luZyBhIGxhbWJkYS4gVXN1YWxseSwKIC8vIHlvdSBkb24ndCB3YW50IHRvIHVzZSB0aGlzIGNs
YXNzIGRpcmVjdGx5LiBVc2UgY3JlYXRlU2hhcmVkVGFzaygpIGluc3RlYWQuCi10ZW1wbGF0ZTx0
eXBlbmFtZSBGdW5jdG9yPgotY2xhc3MgU2hhcmVkVGFza0Z1bmN0b3IgOiBwdWJsaWMgU2hhcmVk
VGFzayB7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdGlvblR5cGUsIHR5cGVuYW1lIEZ1bmN0b3I+
IGNsYXNzIFNoYXJlZFRhc2tGdW5jdG9yOwordGVtcGxhdGU8dHlwZW5hbWUgUmVzdWx0VHlwZSwg
dHlwZW5hbWUuLi4gQXJndW1lbnRUeXBlcywgdHlwZW5hbWUgRnVuY3Rvcj4KK2NsYXNzIFNoYXJl
ZFRhc2tGdW5jdG9yPFJlc3VsdFR5cGUoQXJndW1lbnRUeXBlcy4uLiksIEZ1bmN0b3I+IDogcHVi
bGljIFNoYXJlZFRhc2s8UmVzdWx0VHlwZShBcmd1bWVudFR5cGVzLi4uKT4gewogcHVibGljOgog
ICAgIFNoYXJlZFRhc2tGdW5jdG9yKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCiAgICAgICAgIDog
bV9mdW5jdG9yKGZ1bmN0b3IpCkBAIC03Nyw5ICs4MCw5IEBAIHB1YmxpYzoKICAgICB9CiAKIHBy
aXZhdGU6Ci0gICAgdm9pZCBydW4oKSBvdmVycmlkZQorICAgIFJlc3VsdFR5cGUgcnVuKEFyZ3Vt
ZW50VHlwZXMuLi4gYXJndW1lbnRzKSBvdmVycmlkZQogICAgIHsKLSAgICAgICAgbV9mdW5jdG9y
KCk7CisgICAgICAgIHJldHVybiBtX2Z1bmN0b3IoYXJndW1lbnRzLi4uKTsKICAgICB9CiAKICAg
ICBGdW5jdG9yIG1fZnVuY3RvcjsKQEAgLTg3LDcgKzkwLDcgQEAgcHJpdmF0ZToKIAogLy8gQ3Jl
YXRlIGEgU2hhcmVkVGFzayBmcm9tIGEgZnVuY3Rvciwgc3VjaCBhcyBhIGxhbWJkYS4gWW91IGNh
biB1c2UgdGhpcyBsaWtlIHNvOgogLy8KLS8vIFJlZlB0cjxTaGFyZWRUYXNrPiB0YXNrID0gY3Jl
YXRlU2hhcmVkVGFzaygKKy8vIFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoKT4+IHRhc2sgPSBjcmVh
dGVTaGFyZWRUYXNrPHZvaWQoKT4oCiAvLyAgICAgWz1dICgpIHsKIC8vICAgICAgICAgZG8gdGhp
bmdzOwogLy8gICAgIH0pOwpAQCAtMTAyLDEwICsxMDUsMTAgQEAgcHJpdmF0ZToKIC8vIE9uIHRo
ZSBvdGhlciBoYW5kLCBpZiB5b3UgdXNlIHNvbWV0aGluZyBsaWtlIFBhcmFsbGVsSGVscGVyQ2xp
ZW50OjpydW5UYXNrSW5QYXJhbGxlbCgpIChvciBpdHMKIC8vIGhlbHBlciwgcnVuRnVuY3Rpb25J
blBhcmFsbGVsKCksIHdoaWNoIGRvZXMgY3JlYXRlU2hhcmVkVGFzaygpIGZvciB5b3UpLCB0aGVu
IGl0IGNhbiBiZSBPSyB0bwogLy8gdXNlIFsmXSwgc2luY2UgdGhlIHN0YWNrIGZyYW1lIHdpbGwg
cmVtYWluIGxpdmUgZm9yIHRoZSBlbnRpcmUgZHVyYXRpb24gb2YgdGhlIHRhc2sncyBsaWZldGlt
ZS4KLXRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Ci1SZWY8U2hhcmVkVGFzaz4gY3JlYXRlU2hh
cmVkVGFzayhjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rp
b25UeXBlLCB0eXBlbmFtZSBGdW5jdG9yPgorUmVmPFNoYXJlZFRhc2s8RnVuY3Rpb25UeXBlPj4g
Y3JlYXRlU2hhcmVkVGFzayhjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQogewotICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IFNoYXJlZFRhc2tGdW5jdG9yPEZ1bmN0b3I+KGZ1bmN0b3IpKTsKKyAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBTaGFyZWRUYXNrRnVuY3RvcjxGdW5jdGlvblR5cGUsIEZ1bmN0
b3I+KGZ1bmN0b3IpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgV1RGCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>262832</attachid>
            <date>2015-10-10 14:31:21 -0700</date>
            <delta_ts>2015-10-10 15:02:01 -0700</delta_ts>
            <desc>passing more tests</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>69622</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxOTA3NDkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtNDk0LDYgKzQ5NCw5IEBACiAJCTBGQjE3NjYyMTk2QjhG
OUUwMDkxMDUyQSAvKiBERkdQdXJlVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCMTc2NUUxOTZCOEY5RTAwOTEwNTJBIC8qIERGR1B1cmVW
YWx1ZS5jcHAgKi87IH07CiAJCTBGQjE3NjYzMTk2QjhGOUUwMDkxMDUyQSAvKiBERkdQdXJlVmFs
dWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjE3
NjVGMTk2QjhGOUUwMDkxMDUyQSAvKiBERkdQdXJlVmFsdWUuaCAqLzsgfTsKIAkJMEZCNDM4QTMx
OTI3MEIxRDAwRTFGQkM5IC8qIFN0cnVjdHVyZVNldC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI0MzhBMjE5MjcwQjFEMDBFMUZCQzkgLyogU3Ry
dWN0dXJlU2V0LmNwcCAqLzsgfTsKKwkJMEZCNEZCNzMxQkM4NDMxNDAwMjVDQTVBIC8qIEZUTExh
enlTbG93UGF0aC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkI0RkI3MDFCQzg0MzE0MDAyNUNBNUEgLyogRlRMTGF6eVNsb3dQYXRoLmNwcCAqLzsg
fTsKKwkJMEZCNEZCNzQxQkM4NDMxNDAwMjVDQTVBIC8qIEZUTExhenlTbG93UGF0aC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCNEZCNzExQkM4NDMx
NDAwMjVDQTVBIC8qIEZUTExhenlTbG93UGF0aC5oICovOyB9OworCQkwRkI0RkI3NTFCQzg0MzE0
MDAyNUNBNUEgLyogRlRMTGF6eVNsb3dQYXRoQ2FsbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCNEZCNzIxQkM4NDMxNDAwMjVDQTVBIC8qIEZUTExh
enlTbG93UGF0aENhbGwuaCAqLzsgfTsKIAkJMEZCNTQ2NzcxNEY1OUI1QzAwMkMyOTg5IC8qIExh
enlPcGVyYW5kVmFsdWVQcm9maWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkI1NDY3NjE0RjU5QUQxMDAyQzI5ODkgLyogTGF6eU9wZXJhbmRWYWx1
ZVByb2ZpbGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQkwRkI1NDY3OTE0RjVDNDZCMDAyQzI5ODkgLyogTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCNTQ2
NzgxNEY1QzQ2ODAwMkMyOTg5IC8qIExhenlPcGVyYW5kVmFsdWVQcm9maWxlLmNwcCAqLzsgfTsK
IAkJMEZCNTQ2N0IxNEY1QzdFMTAwMkMyOTg5IC8qIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2Zp
bGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjU0
NjdBMTRGNUM3RDQwMDJDMjk4OSAvKiBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTIzNTMsNiAr
MjM1Niw5IEBACiAJCTBGQjRCNTFGMTZCNjI3NzIwMDNGNjk2QiAvKiBERkdOb2RlQWxsb2NhdG9y
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR05vZGVBbGxvY2F0b3IuaDsg
cGF0aCA9IGRmZy9ERkdOb2RlQWxsb2NhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGQjRCNTIxMTZCNjI3OEQwMDNGNjk2QiAvKiBGdW5jdGlvbkV4ZWN1dGFibGVEdW1wLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZ1bmN0aW9uRXhlY3V0YWJs
ZUR1bXAuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkI0QjUyMjE2QjYyNzhE
MDAzRjY5NkIgLyogRnVuY3Rpb25FeGVjdXRhYmxlRHVtcC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBGdW5jdGlvbkV4ZWN1dGFibGVEdW1wLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGQjRGQjcwMUJDODQzMTQwMDI1Q0E1QSAvKiBGVExMYXp5U2xvd1BhdGgu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRlRMTGF6eVNsb3dQYXRo
LmNwcDsgcGF0aCA9IGZ0bC9GVExMYXp5U2xvd1BhdGguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRkI0RkI3MTFCQzg0MzE0MDAyNUNBNUEgLyogRlRMTGF6eVNsb3dQYXRoLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTExhenlTbG93UGF0aC5oOyBwYXRo
ID0gZnRsL0ZUTExhenlTbG93UGF0aC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RkI0RkI3MjFCQzg0MzE0MDAyNUNBNUEgLyogRlRMTGF6eVNsb3dQYXRoQ2FsbC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExMYXp5U2xvd1BhdGhDYWxsLmg7IHBhdGggPSBm
dGwvRlRMTGF6eVNsb3dQYXRoQ2FsbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RkI1NDY3NjE0RjU5QUQxMDAyQzI5ODkgLyogTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZCNTQ2NzgxNEY1QzQ2ODAwMkMyOTg5IC8q
IExhenlPcGVyYW5kVmFsdWVQcm9maWxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IExhenlPcGVyYW5kVmFsdWVQcm9maWxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEZCNTQ2N0ExNEY1QzdENDAwMkMyOTg5IC8qIE1ldGhvZE9mR2V0dGluZ0FW
YWx1ZVByb2ZpbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWV0aG9kT2ZH
ZXR0aW5nQVZhbHVlUHJvZmlsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzk5
MSw2ICszOTk3LDkgQEAKIAkJCQkwRkQxMjAzMjFBOEM4NUJEMDAwRjUyODAgLyogRlRMSlNDYWxs
VmFyYXJncy5oICovLAogCQkJCTYyNzc0REE4MUI4RDRCMTkwMDA2RjA1QSAvKiBGVExKU1RhaWxD
YWxsLmNwcCAqLywKIAkJCQk2Mjc3NERBOTFCOEQ0QjE5MDAwNkYwNUEgLyogRlRMSlNUYWlsQ2Fs
bC5oICovLAorCQkJCTBGQjRGQjcwMUJDODQzMTQwMDI1Q0E1QSAvKiBGVExMYXp5U2xvd1BhdGgu
Y3BwICovLAorCQkJCTBGQjRGQjcxMUJDODQzMTQwMDI1Q0E1QSAvKiBGVExMYXp5U2xvd1BhdGgu
aCAqLywKKwkJCQkwRkI0RkI3MjFCQzg0MzE0MDAyNUNBNUEgLyogRlRMTGF6eVNsb3dQYXRoQ2Fs
bC5oICovLAogCQkJCTBGOEYyQjkzMTcyRTA0OUUwMDdEQkRBNSAvKiBGVExMaW5rLmNwcCAqLywK
IAkJCQkwRjhGMkI5NDE3MkUwNDlFMDA3REJEQTUgLyogRlRMTGluay5oICovLAogCQkJCTBGQ0VG
QUREMTgwNzM4QzAwMDQ3MkNFNCAvKiBGVExMb2NhdGlvbi5jcHAgKi8sCkBAIC02MjYyLDYgKzYy
NzEsNyBAQAogCQkJCTBGNjM5NDc4MTVEQ0UzNEIwMDZBNTk3QyAvKiBERkdTdHJ1Y3R1cmVBYnN0
cmFjdFZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjUwQUYzQzE5M0U4QjM5MDA2NzRFRTgg
LyogREZHU3RydWN0dXJlQ2xvYmJlclN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjc5MDg1
NjE5QTI5MEIyMDBGNjMxMEMgLyogREZHU3RydWN0dXJlUmVnaXN0cmF0aW9uUGhhc2UuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTBGQjRGQjc1MUJDODQzMTQwMDI1Q0E1QSAvKiBGVExMYXp5U2xvd1Bh
dGhDYWxsLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJGQ0NGRjE4QTYwMDcwMDAxQTI3RjggLyog
REZHVGhyZWFkRGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDMDk3QTIxNDZCMjhDQzAwQ0Yy
NDQyIC8qIERGR1RodW5rcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEOEEzMjgxN0Q1MUY1NzAw
Q0EyQzQwIC8qIERGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLApA
QCAtNjYyMCw2ICs2NjMwLDcgQEAKIAkJCQk3QzE4NEUxQjE3QkVEQkQzMDA3Q0I2M0EgLyogSlNQ
cm9taXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk3QzE4NEUyMzE3QkVFMjQwMDA3Q0I2M0EgLyog
SlNQcm9taXNlQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTdDMDA4Q0RCMTg3MTI0
QkIwMDk1NUMyNCAvKiBKU1Byb21pc2VEZWZlcnJlZC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZC
NEZCNzQxQkM4NDMxNDAwMjVDQTVBIC8qIEZUTExhenlTbG93UGF0aC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJN0MxODRFMUYxN0JFRTIyRTAwN0NCNjNBIC8qIEpTUHJvbWlzZVByb3RvdHlwZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMkEwNUFCRDYxOTYxREYyNDAwMzQxNzUwIC8qIEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTNFRjg4NzUxQjY2REYyMzAwM0Yy
NkNCIC8qIEpTUHJvcGVydHlOYW1lSXRlcmF0b3IuaCBpbiBIZWFkZXJzICovLApAQCAtODA1NCw2
ICs4MDY1LDcgQEAKIAkJCQkxNDQ2OURFQjEwN0VDN0U3MDA2NTA0NDYgLyogU3RyaW5nQ29uc3Ry
dWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNzBFQzBFQzYxQUEwRDdEQTAwQjZBQUZBIC8q
IFN0cmluZ0l0ZXJhdG9yUHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0NDY5REVD
MTA3RUM3RTcwMDY1MDQ0NiAvKiBTdHJpbmdPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
MEZCNEZCNzMxQkM4NDMxNDAwMjVDQTVBIC8qIEZUTExhenlTbG93UGF0aC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkxNDQ2OURFRDEwN0VDN0U3MDA2NTA0NDYgLyogU3RyaW5nUHJvdG90eXBlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTkzMzVGMjREMTJFNjc2NUIwMDJCNTU1MyAvKiBTdHJpbmdS
ZWN1cnNpb25DaGVja2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDREUzQjQzMEU2QzgzMkQw
MDE0NTNBNyAvKiBTdHJ1Y3R1cmUuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJs
ZXIuaAkocmV2aXNpb24gMTkwNzQ5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcg
QEAKICNpbmNsdWRlICJPcHRpb25zLmgiCiAjaW5jbHVkZSA8d3RmL0NyeXB0b2dyYXBoaWNhbGx5
UmFuZG9tTnVtYmVyLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8
d3RmL1NoYXJlZFRhc2suaD4KICNpbmNsdWRlIDx3dGYvV2Vha1JhbmRvbS5oPgogCiAjaWYgRU5B
QkxFKEFTU0VNQkxFUikKQEAgLTEwMDQsNiArMTAwNSwxNyBAQCBwdWJsaWM6CiAgICAgICAgIEFz
c2VtYmxlclR5cGU6OnJlcGxhY2VXaXRoQWRkcmVzc0NvbXB1dGF0aW9uKGxhYmVsLmRhdGFMb2Nh
dGlvbigpKTsKICAgICB9CiAKKyAgICB2b2lkIGFkZExpbmtUYXNrKFJlZlB0cjxTaGFyZWRUYXNr
PHZvaWQoTGlua0J1ZmZlciYpPj4gdGFzaykKKyAgICB7CisgICAgICAgIG1fbGlua1Rhc2tzLmFw
cGVuZCh0YXNrKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAg
IHZvaWQgYWRkTGlua1Rhc2soY29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB7CisgICAgICAg
IG1fbGlua1Rhc2tzLmFwcGVuZChjcmVhdGVTaGFyZWRUYXNrPHZvaWQoTGlua0J1ZmZlciYpPihm
dW5jdG9yKSk7CisgICAgfQorCiBwcm90ZWN0ZWQ6CiAgICAgQWJzdHJhY3RNYWNyb0Fzc2VtYmxl
cigpCiAgICAgICAgIDogbV9yYW5kb21Tb3VyY2UoY3J5cHRvZ3JhcGhpY2FsbHlSYW5kb21OdW1i
ZXIoKSkKQEAgLTEwOTksMTAgKzExMTEsOSBAQCBwcm90ZWN0ZWQ6CiAKICAgICB1bnNpZ25lZCBt
X3RlbXBSZWdpc3RlcnNWYWxpZEJpdHM7CiAKLSAgICBmcmllbmQgY2xhc3MgTGlua0J1ZmZlcjsK
LQotcHJpdmF0ZToKKyAgICBWZWN0b3I8UmVmUHRyPFNoYXJlZFRhc2s8dm9pZChMaW5rQnVmZmVy
Jik+Pj4gbV9saW5rVGFza3M7CiAKKyAgICBmcmllbmQgY2xhc3MgTGlua0J1ZmZlcjsKIH07IC8v
IGNsYXNzIEFic3RyYWN0TWFjcm9Bc3NlbWJsZXIKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5jcHAJKHJl
dmlzaW9uIDE5MDc0OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1
ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5Myw2ICsxOTMsOCBAQCB2b2lkIExpbmtCdWZm
ZXI6OmxpbmtDb2RlKE1hY3JvQXNzZW1ibGVyCiAjZWxpZiBDUFUoQVJNNjQpCiAgICAgY29weUNv
bXBhY3RBbmRMaW5rQ29kZTx1aW50MzJfdD4obWFjcm9Bc3NlbWJsZXIsIG93bmVyVUlELCBlZmZv
cnQpOwogI2VuZGlmCisKKyAgICBtX2xpbmtUYXNrcyA9IFdURjo6bW92ZShtYWNyb0Fzc2VtYmxl
ci5tX2xpbmtUYXNrcyk7CiB9CiAKIHZvaWQgTGlua0J1ZmZlcjo6YWxsb2NhdGUoc2l6ZV90IGlu
aXRpYWxTaXplLCB2b2lkKiBvd25lclVJRCwgSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQpA
QCAtMjI0LDYgKzIyNiw5IEBAIHZvaWQgTGlua0J1ZmZlcjo6c2hyaW5rKHNpemVfdCBuZXdTaXpl
KQogCiB2b2lkIExpbmtCdWZmZXI6OnBlcmZvcm1GaW5hbGl6YXRpb24oKQogeworICAgIGZvciAo
YXV0byYgdGFzayA6IG1fbGlua1Rhc2tzKQorICAgICAgICB0YXNrLT5ydW4oKnRoaXMpOworCiAj
aWZuZGVmIE5ERUJVRwogICAgIEFTU0VSVCghaXNDb21waWxhdGlvblRocmVhZCgpKTsKICAgICBB
U1NFUlQoIW1fY29tcGxldGVkKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvTGlua0J1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvTGlua0J1ZmZlci5oCShyZXZpc2lvbiAxOTA3NDkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjU5LDYgKzI1
OSw4IEBAIHB1YmxpYzoKICAgICBib29sIHdhc0FscmVhZHlEaXNhc3NlbWJsZWQoKSBjb25zdCB7
IHJldHVybiBtX2FscmVhZHlEaXNhc3NlbWJsZWQ7IH0KICAgICB2b2lkIGRpZEFscmVhZHlEaXNh
c3NlbWJsZSgpIHsgbV9hbHJlYWR5RGlzYXNzZW1ibGVkID0gdHJ1ZTsgfQogCisgICAgVk0mIHZt
KCkgeyByZXR1cm4gKm1fdm07IH0KKwogcHJpdmF0ZToKICNpZiBFTkFCTEUoQlJBTkNIX0NPTVBB
Q1RJT04pCiAgICAgaW50IGV4ZWN1dGFibGVPZmZzZXRGb3IoaW50IGxvY2F0aW9uKQpAQCAtMzE1
LDYgKzMxNyw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2NvbXBsZXRlZDsKICNlbmRpZgogICAg
IGJvb2wgbV9hbHJlYWR5RGlzYXNzZW1ibGVkIHsgZmFsc2UgfTsKKyAgICBWZWN0b3I8UmVmUHRy
PFNoYXJlZFRhc2s8dm9pZChMaW5rQnVmZmVyJik+Pj4gbV9saW5rVGFza3M7CiB9OwogCiAjZGVm
aW5lIEZJTkFMSVpFX0NPREVfSUYoY29uZGl0aW9uLCBsaW5rQnVmZmVyUmVmZXJlbmNlLCBkYXRh
TG9nRkFyZ3VtZW50c0ZvckhlYWRpbmcpICBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29kZU9yaWdpbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlT3JpZ2luLmgJKHJldmlzaW9uIDE5MDc0OSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmgJKHdvcmtpbmcgY29weSkKQEAgLTc0LDcg
Kzc0LDcgQEAgc3RydWN0IENvZGVPcmlnaW4gewogICAgIH0KICAgICAKICAgICBib29sIGlzU2V0
KCkgY29uc3QgeyByZXR1cm4gYnl0ZWNvZGVJbmRleCAhPSBpbnZhbGlkQnl0ZWNvZGVJbmRleDsg
fQotICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIWlzU2V0KCk7IH0KKyAgICBl
eHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gaXNTZXQoKTsgfQogICAgIAog
ICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdAogICAgIHsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhh
c2UuY3BwCShyZXZpc2lvbiAxOTA3NDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTEsNiArOTEsNyBA
QCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgbV9p
bnRlcnByZXRlci5leGVjdXRlKG5vZGVJbmRleCk7CiAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIG1fc3RhdGUucmVzZXQoKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAg
aWYgKGRpZENsaXBCbG9jaykgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExD
b21waWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENv
bXBpbGUuY3BwCShyZXZpc2lvbiAxOTA3NDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTENvbXBpbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMzMsNyArMzMzLDcgQEAgc3RhdGlj
IHZvaWQgZml4RnVuY3Rpb25CYXNlZE9uU3RhY2tNYXBzKAogewogICAgIEdyYXBoJiBncmFwaCA9
IHN0YXRlLmdyYXBoOwogICAgIFZNJiB2bSA9IGdyYXBoLm1fdm07Ci0gICAgU3RhY2tNYXBzIHN0
YWNrbWFwcyA9IGppdENvZGUtPnN0YWNrbWFwczsKKyAgICBTdGFja01hcHMmIHN0YWNrbWFwcyA9
IGppdENvZGUtPnN0YWNrbWFwczsKICAgICAKICAgICBpbnQgbG9jYWxzT2Zmc2V0ID0gb2Zmc2V0
T2ZTdGFja1JlZ2lvbihyZWNvcmRNYXAsIHN0YXRlLmNhcHR1cmVkU3RhY2ttYXBJRCkgKyBncmFw
aC5tX25leHRNYWNoaW5lTG9jYWw7CiAgICAgaW50IHZhcmFyZ3NTcGlsbFNsb3RzT2Zmc2V0ID0g
b2Zmc2V0T2ZTdGFja1JlZ2lvbihyZWNvcmRNYXAsIHN0YXRlLnZhcmFyZ3NTcGlsbFNsb3RzU3Rh
Y2ttYXBJRCk7CkBAIC00MzksNyArNDM5LDEwIEBAIHN0YXRpYyB2b2lkIGZpeEZ1bmN0aW9uQmFz
ZWRPblN0YWNrTWFwcygKICAgICAgICAgc3RhdGUuZmluYWxpemVyLT5leGl0VGh1bmtzTGlua0J1
ZmZlciA9IFdURjo6bW92ZShsaW5rQnVmZmVyKTsKICAgICB9CiAKLSAgICBpZiAoIXN0YXRlLmdl
dEJ5SWRzLmlzRW1wdHkoKSB8fCAhc3RhdGUucHV0QnlJZHMuaXNFbXB0eSgpIHx8ICFzdGF0ZS5j
aGVja0lucy5pc0VtcHR5KCkpIHsKKyAgICBpZiAoIXN0YXRlLmdldEJ5SWRzLmlzRW1wdHkoKQor
ICAgICAgICB8fCAhc3RhdGUucHV0QnlJZHMuaXNFbXB0eSgpCisgICAgICAgIHx8ICFzdGF0ZS5j
aGVja0lucy5pc0VtcHR5KCkKKyAgICAgICAgfHwgIXN0YXRlLmxhenlTbG93UGF0aHMuaXNFbXB0
eSgpKSB7CiAgICAgICAgIENDYWxsSGVscGVycyBzbG93UGF0aEpJVCgmdm0sIGNvZGVCbG9jayk7
CiAgICAgICAgIAogICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IGV4Y2VwdGlvblRhcmdl
dDsKQEAgLTQ3Myw3ICs0NzYsOCBAQCBzdGF0aWMgdm9pZCBmaXhGdW5jdGlvbkJhc2VkT25TdGFj
a01hcHMoCiAKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsID0gY2Fs
bE9wZXJhdGlvbigKICAgICAgICAgICAgICAgICAgICAgc3RhdGUsIHVzZWRSZWdpc3RlcnMsIHNs
b3dQYXRoSklULCBjb2RlT3JpZ2luLCAmZXhjZXB0aW9uVGFyZ2V0LAotICAgICAgICAgICAgICAg
ICAgICBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIHJlc3VsdCwgZ2VuLnN0dWJJbmZvKCksIGJh
c2UsIGdldEJ5SWQudWlkKCkpOworICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25HZXRCeUlk
T3B0aW1pemUsIHJlc3VsdCwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5m
bygpKSwKKyAgICAgICAgICAgICAgICAgICAgYmFzZSwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
UHRyKGdldEJ5SWQudWlkKCkpKS5jYWxsKCk7CiAKICAgICAgICAgICAgICAgICBnZW4ucmVwb3J0
U2xvd1BhdGhDYWxsKGJlZ2luLCBjYWxsKTsKIApAQCAtNTExLDcgKzUxNSw5IEBAIHN0YXRpYyB2
b2lkIGZpeEZ1bmN0aW9uQmFzZWRPblN0YWNrTWFwcygKICAgICAgICAgICAgICAgICAKICAgICAg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbigKICAg
ICAgICAgICAgICAgICAgICAgc3RhdGUsIHVzZWRSZWdpc3RlcnMsIHNsb3dQYXRoSklULCBjb2Rl
T3JpZ2luLCAmZXhjZXB0aW9uVGFyZ2V0LAotICAgICAgICAgICAgICAgICAgICBnZW4uc2xvd1Bh
dGhGdW5jdGlvbigpLCBnZW4uc3R1YkluZm8oKSwgdmFsdWUsIGJhc2UsIHB1dEJ5SWQudWlkKCkp
OworICAgICAgICAgICAgICAgICAgICBnZW4uc2xvd1BhdGhGdW5jdGlvbigpLCBJbnZhbGlkR1BS
UmVnLAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoZ2Vu
LnN0dWJJbmZvKCkpLCB2YWx1ZSwgYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tUHRyKHB1dEJ5SWQudWlkKCkpKS5jYWxsKCk7CiAgICAgICAgICAgICAg
ICAgCiAgICAgICAgICAgICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChiZWdpbiwgY2FsbCk7
CiAgICAgICAgICAgICAgICAgCkBAIC01NDksMTMgKzU1NSw1NyBAQCBzdGF0aWMgdm9pZCBmaXhG
dW5jdGlvbkJhc2VkT25TdGFja01hcHMoCiAKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6Q2FsbCBzbG93Q2FsbCA9IGNhbGxPcGVyYXRpb24oCiAgICAgICAgICAgICAgICAgICAgIHN0
YXRlLCB1c2VkUmVnaXN0ZXJzLCBzbG93UGF0aEpJVCwgY29kZU9yaWdpbiwgJmV4Y2VwdGlvblRh
cmdldCwKLSAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uSW5PcHRpbWl6ZSwgcmVzdWx0LCBz
dHViSW5mbywgb2JqLCBjaGVja0luLm1fdWlkKTsKKyAgICAgICAgICAgICAgICAgICAgb3BlcmF0
aW9uSW5PcHRpbWl6ZSwgcmVzdWx0LCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoc3R1Yklu
Zm8pLCBvYmosCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0
cihjaGVja0luLnVpZCgpKSkuY2FsbCgpOwogCiAgICAgICAgICAgICAgICAgY2hlY2tJbi5tX3Ns
b3dQYXRoRG9uZS5hcHBlbmQoc2xvd1BhdGhKSVQuanVtcCgpKTsKICAgICAgICAgICAgICAgICAK
ICAgICAgICAgICAgICAgICBjaGVja0luLm1fZ2VuZXJhdG9ycy5hcHBlbmQoQ2hlY2tJbkdlbmVy
YXRvcihzdHViSW5mbywgc2xvd0NhbGwsIGJlZ2luKSk7CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KKworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBzdGF0ZS5sYXp5U2xvd1BhdGhzLnNpemUo
KTsgaS0tOykgeworICAgICAgICAgICAgTGF6eVNsb3dQYXRoRGVzY3JpcHRvciYgZGVzY3JpcHRv
ciA9IHN0YXRlLmxhenlTbG93UGF0aHNbaV07CisKKyAgICAgICAgICAgIGlmICh2ZXJib3NlQ29t
cGlsYXRpb25FbmFibGVkKCkpCisgICAgICAgICAgICAgICAgZGF0YUxvZygiSGFuZGxpbmcgbGF6
eVNsb3dQYXRoIHN0YWNrbWFwICMiLCBkZXNjcmlwdG9yLnN0YWNrbWFwSUQoKSwgIlxuIik7CisK
KyAgICAgICAgICAgIGF1dG8gaXRlciA9IHJlY29yZE1hcC5maW5kKGRlc2NyaXB0b3Iuc3RhY2tt
YXBJRCgpKTsKKyAgICAgICAgICAgIGlmIChpdGVyID09IHJlY29yZE1hcC5lbmQoKSkgeworICAg
ICAgICAgICAgICAgIC8vIEl0IHdhcyBvcHRpbWl6ZWQgb3V0LgorICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgaXRlci0+dmFsdWUuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBTdGFja01h
cHM6OlJlY29yZCYgcmVjb3JkID0gaXRlci0+dmFsdWVbaV07CisgICAgICAgICAgICAgICAgUmVn
aXN0ZXJTZXQgdXNlZFJlZ2lzdGVycyA9IHVzZWRSZWdpc3RlcnNGb3IocmVjb3JkKTsKKyAgICAg
ICAgICAgICAgICBWZWN0b3I8TG9jYXRpb24+IGxvY2F0aW9uczsKKyAgICAgICAgICAgICAgICBm
b3IgKGF1dG8gbG9jYXRpb24gOiByZWNvcmQubG9jYXRpb25zKQorICAgICAgICAgICAgICAgICAg
ICBsb2NhdGlvbnMuYXBwZW5kKExvY2F0aW9uOjpmb3JTdGFja21hcHMoJnN0YWNrbWFwcywgbG9j
YXRpb24pKTsKKworICAgICAgICAgICAgICAgIGNoYXIqIHN0YXJ0T2ZJQyA9CisgICAgICAgICAg
ICAgICAgICAgIGJpdHdpc2VfY2FzdDxjaGFyKj4oZ2VuZXJhdGVkRnVuY3Rpb24pICsgcmVjb3Jk
Lmluc3RydWN0aW9uT2Zmc2V0OworICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIHBh
dGNocG9pbnQoKE1hY3JvQXNzZW1ibGVyQ29kZVB0cihzdGFydE9mSUMpKSk7CisgICAgICAgICAg
ICAgICAgQ29kZUxvY2F0aW9uTGFiZWwgZXhjZXB0aW9uVGFyZ2V0ID0KKyAgICAgICAgICAgICAg
ICAgICAgc3RhdGUuZmluYWxpemVyLT5oYW5kbGVFeGNlcHRpb25zTGlua0J1ZmZlci0+ZW50cnlw
b2ludCgpOworCisgICAgICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPExhenlTbG93UGF0aD4g
bGF6eVNsb3dQYXRoID0gc3RkOjptYWtlX3VuaXF1ZTxMYXp5U2xvd1BhdGg+KAorICAgICAgICAg
ICAgICAgICAgICBwYXRjaHBvaW50LCBleGNlcHRpb25UYXJnZXQsIHVzZWRSZWdpc3RlcnMsIGRl
c2NyaXB0b3IuY2FsbFNpdGVJbmRleCgpLAorICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdG9y
Lm1fbGlua2VyLT5ydW4obG9jYXRpb25zKSk7CisKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBl
cnM6OkxhYmVsIGJlZ2luID0gc2xvd1BhdGhKSVQubGFiZWwoKTsKKworICAgICAgICAgICAgICAg
IC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBwdXNoaW5nIHRoZSBsYXp5IHNsb3cgcGF0aCBpbmRl
eCBpbiBzb21lIHZlY3RvciBvciB3aGF0ZXZlci4KKyAgICAgICAgICAgICAgICBzbG93UGF0aEpJ
VC5wdXNoVG9TYXZlSW1tZWRpYXRlV2l0aG91dFRvdWNoaW5nUmVnaXN0ZXJzKAorICAgICAgICAg
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihzdGF0ZS5qaXRDb2RlLT5sYXp5
U2xvd1BhdGhzLnNpemUoKSkpOworICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBn
ZW5lcmF0b3JKdW1wID0gc2xvd1BhdGhKSVQuanVtcCgpOworICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgIGRlc2NyaXB0b3IubV9nZW5lcmF0b3JzLmFwcGVuZChzdGQ6Om1ha2VfdHVw
bGUobGF6eVNsb3dQYXRoLmdldCgpLCBiZWdpbikpOworCisgICAgICAgICAgICAgICAgc3RhdGUu
aml0Q29kZS0+bGF6eVNsb3dQYXRocy5hcHBlbmQoV1RGOjptb3ZlKGxhenlTbG93UGF0aCkpOwor
ICAgICAgICAgICAgICAgIHN0YXRlLmZpbmFsaXplci0+bGF6eVNsb3dQYXRoR2VuZXJhdG9ySnVt
cHMuYXBwZW5kKGdlbmVyYXRvckp1bXApOworICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAg
ICAgIAogICAgICAgICBleGNlcHRpb25UYXJnZXQubGluaygmc2xvd1BhdGhKSVQpOwogICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBleGNlcHRpb25KdW1wID0gc2xvd1BhdGhKSVQuanVtcCgp
OwpAQCAtNTc4LDEyICs2MjgsMTkgQEAgc3RhdGljIHZvaWQgZml4RnVuY3Rpb25CYXNlZE9uU3Rh
Y2tNYXBzKAogICAgICAgICAgICAgICAgIHN0YXRlLCBjb2RlQmxvY2ssIGdlbmVyYXRlZEZ1bmN0
aW9uLCByZWNvcmRNYXAsIHN0YXRlLnB1dEJ5SWRzW2ldLAogICAgICAgICAgICAgICAgIHNpemVP
ZlB1dEJ5SWQoKSk7CiAgICAgICAgIH0KLQogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBzdGF0
ZS5jaGVja0lucy5zaXplKCk7IGktLTspIHsKICAgICAgICAgICAgIGdlbmVyYXRlQ2hlY2tJbklD
RmFzdFBhdGgoCiAgICAgICAgICAgICAgICAgc3RhdGUsIGNvZGVCbG9jaywgZ2VuZXJhdGVkRnVu
Y3Rpb24sIHJlY29yZE1hcCwgc3RhdGUuY2hlY2tJbnNbaV0sCiAgICAgICAgICAgICAgICAgc2l6
ZU9mSW4oKSk7IAotICAgICAgICB9IAorICAgICAgICB9CisgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IHN0YXRlLmxhenlTbG93UGF0aHMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICBMYXp5
U2xvd1BhdGhEZXNjcmlwdG9yJiBsYXp5U2xvd1BhdGggPSBzdGF0ZS5sYXp5U2xvd1BhdGhzW2ld
OworICAgICAgICAgICAgZm9yIChhdXRvJiB0dXBsZSA6IGxhenlTbG93UGF0aC5tX2dlbmVyYXRv
cnMpIHsKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwbGFjZVdpdGhKdW1wKAor
ICAgICAgICAgICAgICAgICAgICBzdGQ6OmdldDwwPih0dXBsZSktPnBhdGNocG9pbnQoKSwKKyAg
ICAgICAgICAgICAgICAgICAgc3RhdGUuZmluYWxpemVyLT5zaWRlQ29kZUxpbmtCdWZmZXItPmxv
Y2F0aW9uT2Yoc3RkOjpnZXQ8MT4odHVwbGUpKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
ICAgICB9CiAgICAgCiAgICAgYWRqdXN0Q2FsbElDc0ZvclN0YWNrbWFwcyhzdGF0ZS5qc0NhbGxz
LCByZWNvcmRNYXApOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbmxpbmVD
YWNoZURlc2NyaXB0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTElubGluZUNhY2hlRGVzY3JpcHRvci5oCShyZXZpc2lvbiAxOTA3NDkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTElubGluZUNhY2hlRGVzY3JpcHRvci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTI5LDEyICsyOSwxNSBAQAogI2lmIEVOQUJMRShGVExfSklUKQogCiAjaW5jbHVk
ZSAiQ29kZU9yaWdpbi5oIgorI2luY2x1ZGUgIkZUTExhenlTbG93UGF0aC5oIgogI2luY2x1ZGUg
IkpJVElubGluZUNhY2hlR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXIuaCIK
ICNpbmNsdWRlIDx3dGYvdGV4dC9VbmlxdWVkU3RyaW5nSW1wbC5oPgogCiBuYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIEZUTCB7CiAKK2NsYXNzIExvY2F0aW9uOworCiBjbGFzcyBJbmxpbmVDYWNo
ZURlc2NyaXB0b3IgewogcHVibGljOgogICAgIElubGluZUNhY2hlRGVzY3JpcHRvcigpIApAQCAt
MTEzLDE3ICsxMTYsNDMgQEAgY2xhc3MgQ2hlY2tJbkRlc2NyaXB0b3IgOiBwdWJsaWMgSW5saW5l
QwogcHVibGljOgogICAgIENoZWNrSW5EZXNjcmlwdG9yKCkgeyB9CiAgICAgCi0gICAgQ2hlY2tJ
bkRlc2NyaXB0b3IodW5zaWduZWQgc3RhY2ttYXBJRCwgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZSwg
Y29uc3QgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKLSAgICAgICAgOiBJbmxpbmVDYWNoZURlc2Ny
aXB0b3Ioc3RhY2ttYXBJRCwgY2FsbFNpdGUsIG51bGxwdHIpCi0gICAgICAgICwgbV91aWQodWlk
KQorICAgIENoZWNrSW5EZXNjcmlwdG9yKHVuc2lnbmVkIHN0YWNrbWFwSUQsIENhbGxTaXRlSW5k
ZXggY2FsbFNpdGUsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCisgICAgICAgIDogSW5saW5lQ2Fj
aGVEZXNjcmlwdG9yKHN0YWNrbWFwSUQsIGNhbGxTaXRlLCB1aWQpCiAgICAgewogICAgIH0KLQog
ICAgIAotICAgIGNvbnN0IFVuaXF1ZWRTdHJpbmdJbXBsKiBtX3VpZDsKICAgICBWZWN0b3I8Q2hl
Y2tJbkdlbmVyYXRvcj4gbV9nZW5lcmF0b3JzOwogfTsKIAorLy8gWW91IGNhbiBjcmVhdGUgYSBs
YXp5IHNsb3cgcGF0aCBjYWxsIGluIGxvd2VyREZHVG9MTFZNIGJ5IGRvaW5nOgorLy8gbV9mdGxT
dGF0ZS5sYXp5U2xvd1BhdGhzLmFwcGVuZCgKKy8vICAgICBMYXp5U2xvd1BhdGhEZXNjcmlwdG9y
KAorLy8gICAgICAgICBzdGFja21hcElELCBjYWxsU2l0ZUluZGV4LAorLy8gICAgICAgICBjcmVh
dGVTaGFyZWRUYXNrPFJlZlB0cjxMYXp5U2xvd1BhdGg6OkdlbmVyYXRvcj4oY29uc3QgVmVjdG9y
PExvY2F0aW9uPiYpPigKKy8vICAgICAgICAgICAgIFtdIChjb25zdCBWZWN0b3I8TG9jYXRpb24+
JiBsb2NhdGlvbnMpIC0+IFJlZlB0cjxMYXp5U2xvd1BhdGg6OkdlbmVyYXRvcj4geworLy8gICAg
ICAgICAgICAgICAgIC8vIFRoaXMgbGFtYmRhIHNob3VsZCBqdXN0IHJlY29yZCB0aGUgcmVnaXN0
ZXJzIHRoYXQgd2Ugd2lsbCBiZSB1c2luZywgYW5kIHJldHVybgorLy8gICAgICAgICAgICAgICAg
IC8vIGEgU2hhcmVkVGFzayB0aGF0IHdpbGwgYWN0dWFsbHkgZ2VuZXJhdGUgdGhlIHNsb3cgcGF0
aC4KKy8vICAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlTGF6eUNhbGxHZW5lcmF0b3IoCisv
LyAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uLCBsb2NhdGlvbnNbMF0uZGlyZWN0R1BSKCks
IGxvY2F0aW9uc1sxXS5kaXJlY3RHUFIoKSk7CisvLyAgICAgICAgICAgICB9KSkpOwordHlwZWRl
ZiBSZWZQdHI8TGF6eVNsb3dQYXRoOjpHZW5lcmF0b3I+IExhenlTbG93UGF0aExpbmtlckZ1bmN0
aW9uKGNvbnN0IFZlY3RvcjxMb2NhdGlvbj4mKTsKK3R5cGVkZWYgU2hhcmVkVGFzazxMYXp5U2xv
d1BhdGhMaW5rZXJGdW5jdGlvbj4gTGF6eVNsb3dQYXRoTGlua2VyVGFzazsKK2NsYXNzIExhenlT
bG93UGF0aERlc2NyaXB0b3IgOiBwdWJsaWMgSW5saW5lQ2FjaGVEZXNjcmlwdG9yIHsKK3B1Ymxp
YzoKKyAgICBMYXp5U2xvd1BhdGhEZXNjcmlwdG9yKCkgeyB9CisKKyAgICBMYXp5U2xvd1BhdGhE
ZXNjcmlwdG9yKAorICAgICAgICB1bnNpZ25lZCBzdGFja21hcElELCBDYWxsU2l0ZUluZGV4IGNh
bGxTaXRlLAorICAgICAgICBSZWZQdHI8TGF6eVNsb3dQYXRoTGlua2VyVGFzaz4gbGlua2VyKQor
ICAgICAgICA6IElubGluZUNhY2hlRGVzY3JpcHRvcihzdGFja21hcElELCBjYWxsU2l0ZSwgbnVs
bHB0cikKKyAgICAgICAgLCBtX2xpbmtlcihsaW5rZXIpCisgICAgeworICAgIH0KKworICAgIFZl
Y3RvcjxzdGQ6OnR1cGxlPExhenlTbG93UGF0aCosIENDYWxsSGVscGVyczo6TGFiZWw+PiBtX2dl
bmVyYXRvcnM7CisKKyAgICBSZWZQdHI8TGF6eVNsb3dQYXRoTGlua2VyVGFzaz4gbV9saW5rZXI7
Cit9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMSklUQ29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMSklUQ29kZS5oCShyZXZpc2lvbiAxOTA3NDkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTEpJVENvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBA
QAogCiAjaW5jbHVkZSAiREZHQ29tbW9uRGF0YS5oIgogI2luY2x1ZGUgIkZUTERhdGFTZWN0aW9u
LmgiCisjaW5jbHVkZSAiRlRMTGF6eVNsb3dQYXRoLmgiCiAjaW5jbHVkZSAiRlRMT1NSRXhpdC5o
IgogI2luY2x1ZGUgIkZUTFN0YWNrTWFwcy5oIgogI2luY2x1ZGUgIkZUTFVud2luZEluZm8uaCIK
QEAgLTg2LDYgKzg3LDcgQEAgcHVibGljOgogICAgIERGRzo6Q29tbW9uRGF0YSBjb21tb247CiAg
ICAgU2VnbWVudGVkVmVjdG9yPE9TUkV4aXQsIDg+IG9zckV4aXQ7CiAgICAgU3RhY2tNYXBzIHN0
YWNrbWFwczsKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPExhenlTbG93UGF0aD4+IGxhenlT
bG93UGF0aHM7CiAgICAgCiBwcml2YXRlOgogICAgIFZlY3RvcjxSZWZQdHI8RGF0YVNlY3Rpb24+
PiBtX2RhdGFTZWN0aW9uczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklU
RmluYWxpemVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TEpJVEZpbmFsaXplci5jcHAJKHJldmlzaW9uIDE5MDc0OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMSklURmluYWxpemVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA2LDExICsx
MDYsMTEgQEAgYm9vbCBKSVRGaW5hbGl6ZXI6OmZpbmFsaXplRnVuY3Rpb24oKQogICAgICAgICAv
LyBTaWRlIGNvZGUgaXMgZm9yIHNwZWNpYWwgc2xvdyBwYXRocyB0aGF0IHdlIGdlbmVyYXRlIG91
cnNlbHZlcywgbGlrZSBmb3IgaW5saW5lCiAgICAgICAgIC8vIGNhY2hlcy4KICAgICAgICAgCi0g
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IHNsb3dQYXRoQ2FsbHMuc2l6ZSgpOyBpLS07KSB7Ci0g
ICAgICAgICAgICBTbG93UGF0aENhbGwmIGNhbGwgPSBzbG93UGF0aENhbGxzW2ldOworICAgICAg
ICBmb3IgKENDYWxsSGVscGVyczo6SnVtcCBqdW1wIDogbGF6eVNsb3dQYXRoR2VuZXJhdG9ySnVt
cHMpIHsKICAgICAgICAgICAgIHNpZGVDb2RlTGlua0J1ZmZlci0+bGluaygKLSAgICAgICAgICAg
ICAgICBjYWxsLmNhbGwoKSwKLSAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbChtX3Bs
YW4udm0uZnRsVGh1bmtzLT5nZXRTbG93UGF0aENhbGxUaHVuayhtX3BsYW4udm0sIGNhbGwua2V5
KCkpLmNvZGUoKSkpOworICAgICAgICAgICAgICAgIGp1bXAsCisgICAgICAgICAgICAgICAgQ29k
ZUxvY2F0aW9uTGFiZWwoCisgICAgICAgICAgICAgICAgICAgIG1fcGxhbi52bS5nZXRDVElTdHVi
KGxhenlTbG93UGF0aEdlbmVyYXRpb25UaHVua0dlbmVyYXRvcikuY29kZSgpKSk7CiAgICAgICAg
IH0KICAgICAgICAgCiAgICAgICAgIGppdENvZGUtPmFkZEhhbmRsZShGSU5BTElaRV9ERkdfQ09E
RSgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklURmluYWxpemVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRGaW5hbGl6ZXIuaAko
cmV2aXNpb24gMTkwNzQ5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRGaW5h
bGl6ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNjUsOCArNjUsOCBAQCBwdWJsaWM6CiAgICAgc3Rk
Ojp1bmlxdWVfcHRyPExpbmtCdWZmZXI+IHNpZGVDb2RlTGlua0J1ZmZlcjsKICAgICBzdGQ6OnVu
aXF1ZV9wdHI8TGlua0J1ZmZlcj4gaGFuZGxlRXhjZXB0aW9uc0xpbmtCdWZmZXI7CiAgICAgVmVj
dG9yPE91dE9mTGluZUNvZGVJbmZvPiBvdXRPZkxpbmVDb2RlSW5mb3M7Ci0gICAgVmVjdG9yPFNs
b3dQYXRoQ2FsbD4gc2xvd1BhdGhDYWxsczsgLy8gQ2FsbHMgaW5zaWRlIHRoZSBzaWRlIGNvZGUu
CiAgICAgVmVjdG9yPE9TUkV4aXRDb21waWxhdGlvbkluZm8+IG9zckV4aXQ7CisgICAgVmVjdG9y
PENDYWxsSGVscGVyczo6SnVtcD4gbGF6eVNsb3dQYXRoR2VuZXJhdG9ySnVtcHM7CiAgICAgR2Vu
ZXJhdGVkRnVuY3Rpb24gZnVuY3Rpb247CiAgICAgUmVmUHRyPEpJVENvZGU+IGppdENvZGU7CiB9
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMYXp5U2xvd1BhdGguY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTGF6eVNsb3dQYXRoLmNw
cAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTGF6eVNsb3dQ
YXRoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc0IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJGVExMYXp5U2xvd1BhdGguaCIKKworI2luY2x1ZGUgIkZUTFNsb3dQYXRoQ2FsbC5oIgor
I2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwg
eworCitMYXp5U2xvd1BhdGg6OkxhenlTbG93UGF0aCgKKyAgICBDb2RlTG9jYXRpb25MYWJlbCBw
YXRjaHBvaW50LCBDb2RlTG9jYXRpb25MYWJlbCBleGNlcHRpb25UYXJnZXQsCisgICAgY29uc3Qg
UmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCwg
UmVmUHRyPEdlbmVyYXRvcj4gZ2VuZXJhdG9yKQorICAgIDogbV9wYXRjaHBvaW50KHBhdGNocG9p
bnQpCisgICAgLCBtX2V4Y2VwdGlvblRhcmdldChleGNlcHRpb25UYXJnZXQpCisgICAgLCBtX3Vz
ZWRSZWdpc3RlcnModXNlZFJlZ2lzdGVycykKKyAgICAsIG1fY2FsbFNpdGVJbmRleChjYWxsU2l0
ZUluZGV4KQorICAgICwgbV9nZW5lcmF0b3IoZ2VuZXJhdG9yKQoreworfQorCitMYXp5U2xvd1Bh
dGg6On5MYXp5U2xvd1BhdGgoKQoreworfQorCit2b2lkIExhenlTbG93UGF0aDo6Z2VuZXJhdGUo
Q29kZUJsb2NrKiBjb2RlQmxvY2spCit7CisgICAgUkVMRUFTRV9BU1NFUlQoIW1fc3R1Yik7CisK
KyAgICBWTSYgdm0gPSAqY29kZUJsb2NrLT52bSgpOworCisgICAgQ0NhbGxIZWxwZXJzIGppdCgm
dm0sIGNvZGVCbG9jayk7CisgICAgR2VuZXJhdGlvblBhcmFtcyBwYXJhbXM7CisgICAgQ0NhbGxI
ZWxwZXJzOjpKdW1wTGlzdCBleGNlcHRpb25KdW1wczsKKyAgICBwYXJhbXMuZXhjZXB0aW9uSnVt
cHMgPSBtX2V4Y2VwdGlvblRhcmdldCA/ICZleGNlcHRpb25KdW1wcyA6IG51bGxwdHI7CisgICAg
cGFyYW1zLmxhenlTbG93UGF0aCA9IHRoaXM7CisgICAgbV9nZW5lcmF0b3ItPnJ1bihqaXQsIHBh
cmFtcyk7CisKKyAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIodm0sIGppdCwgY29kZUJsb2NrLCBK
SVRDb21waWxhdGlvbk11c3RTdWNjZWVkKTsKKyAgICBsaW5rQnVmZmVyLmxpbmsoCisgICAgICAg
IHBhcmFtcy5kb25lSnVtcHMsIG1fcGF0Y2hwb2ludC5sYWJlbEF0T2Zmc2V0KE1hY3JvQXNzZW1i
bGVyOjptYXhKdW1wUmVwbGFjZW1lbnRTaXplKCkpKTsKKyAgICBpZiAobV9leGNlcHRpb25UYXJn
ZXQpCisgICAgICAgIGxpbmtCdWZmZXIubGluayhleGNlcHRpb25KdW1wcywgbV9leGNlcHRpb25U
YXJnZXQpOworICAgIG1fc3R1YiA9IEZJTkFMSVpFX0NPREVfRk9SKGNvZGVCbG9jaywgbGlua0J1
ZmZlciwgKCJMYXp5IHNsb3cgcGF0aCBjYWxsIHN0dWIiKSk7CisKKyAgICBNYWNyb0Fzc2VtYmxl
cjo6cmVwbGFjZVdpdGhKdW1wKG1fcGF0Y2hwb2ludCwgQ29kZUxvY2F0aW9uTGFiZWwobV9zdHVi
LmNvZGUoKSkpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCisKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMYXp5U2xvd1BhdGguaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExhenlTbG93UGF0aC5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMYXp5U2xvd1BhdGguaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDg2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgRlRMTGF6eVNsb3dQYXRoX2gKKyNkZWZpbmUgRlRMTGF6eVNs
b3dQYXRoX2gKKworI2luY2x1ZGUgIkNDYWxsSGVscGVycy5oIgorI2luY2x1ZGUgIkNvZGVCbG9j
ay5oIgorI2luY2x1ZGUgIkNvZGVMb2NhdGlvbi5oIgorI2luY2x1ZGUgIkdQUkluZm8uaCIKKyNp
bmNsdWRlICJNYWNyb0Fzc2VtYmxlckNvZGVSZWYuaCIKKyNpbmNsdWRlICJSZWdpc3RlclNldC5o
IgorI2luY2x1ZGUgPHd0Zi9TaGFyZWRUYXNrLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgRlRMIHsKKworY2xhc3MgTGF6eVNsb3dQYXRoIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJM
RShMYXp5U2xvd1BhdGgpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgor
ICAgIHN0cnVjdCBHZW5lcmF0aW9uUGFyYW1zIHsKKyAgICAgICAgLy8gRXh0cmEgcGFyYW1ldGVy
cyB0byB0aGUgR2VuZXJhdG9yRnVuY3Rpb24gYXJlIG1hZGUgaW50byBmaWVsZHMgb2YgdGhpcyBz
dHJ1Y3QsIHNvIHRoYXQgaWYKKyAgICAgICAgLy8gd2UgYWRkIG5ldyBwYXJhbWV0ZXJzLCB3ZSBk
b24ndCBoYXZlIHRvIGNoYW5nZSBhbGwgb2YgdGhlIHVzZXJzLgorICAgICAgICBDQ2FsbEhlbHBl
cnM6Okp1bXBMaXN0IGRvbmVKdW1wczsKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCog
ZXhjZXB0aW9uSnVtcHM7CisgICAgICAgIExhenlTbG93UGF0aCogbGF6eVNsb3dQYXRoOworICAg
IH07CisKKyAgICB0eXBlZGVmIHZvaWQgR2VuZXJhdG9yRnVuY3Rpb24oQ0NhbGxIZWxwZXJzJiwg
R2VuZXJhdGlvblBhcmFtcyYpOworICAgIHR5cGVkZWYgU2hhcmVkVGFzazxHZW5lcmF0b3JGdW5j
dGlvbj4gR2VuZXJhdG9yOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICBz
dGF0aWMgUmVmUHRyPEdlbmVyYXRvcj4gY3JlYXRlR2VuZXJhdG9yKGNvbnN0IEZ1bmN0b3ImIGZ1
bmN0b3IpCisgICAgeworICAgICAgICByZXR1cm4gY3JlYXRlU2hhcmVkVGFzazxHZW5lcmF0b3JG
dW5jdGlvbj4oZnVuY3Rvcik7CisgICAgfQorICAgIAorICAgIExhenlTbG93UGF0aCgKKyAgICAg
ICAgQ29kZUxvY2F0aW9uTGFiZWwgcGF0Y2hwb2ludCwgQ29kZUxvY2F0aW9uTGFiZWwgZXhjZXB0
aW9uVGFyZ2V0LAorICAgICAgICBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywgQ2Fs
bFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4LCBSZWZQdHI8R2VuZXJhdG9yPik7CisKKyAgICB+TGF6
eVNsb3dQYXRoKCk7CisKKyAgICBDb2RlTG9jYXRpb25MYWJlbCBwYXRjaHBvaW50KCkgY29uc3Qg
eyByZXR1cm4gbV9wYXRjaHBvaW50OyB9CisgICAgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdp
c3RlcnMoKSBjb25zdCB7IHJldHVybiBtX3VzZWRSZWdpc3RlcnM7IH0KKyAgICBDYWxsU2l0ZUlu
ZGV4IGNhbGxTaXRlSW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2NhbGxTaXRlSW5kZXg7IH0KKwor
ICAgIHZvaWQgZ2VuZXJhdGUoQ29kZUJsb2NrKik7CisKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVS
ZWYgc3R1YigpIGNvbnN0IHsgcmV0dXJuIG1fc3R1YjsgfQorCitwcml2YXRlOgorICAgIENvZGVM
b2NhdGlvbkxhYmVsIG1fcGF0Y2hwb2ludDsKKyAgICBDb2RlTG9jYXRpb25MYWJlbCBtX2V4Y2Vw
dGlvblRhcmdldDsKKyAgICBSZWdpc3RlclNldCBtX3VzZWRSZWdpc3RlcnM7CisgICAgQ2FsbFNp
dGVJbmRleCBtX2NhbGxTaXRlSW5kZXg7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG1fc3R1
YjsKKyAgICBSZWZQdHI8R2VuZXJhdG9yPiBtX2dlbmVyYXRvcjsKK307CisKK30gfSAvLyBuYW1l
c3BhY2UgSlNDOjpGVEwKKworI2VuZGlmIC8vIEZUTExhenlTbG93UGF0aF9oCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTGF6eVNsb3dQYXRoQ2FsbC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTGF6eVNsb3dQYXRoQ2FsbC5oCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMYXp5U2xvd1BhdGhDYWxs
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEZUTExhenlTbG93UGF0aENhbGxfaAor
I2RlZmluZSBGVExMYXp5U2xvd1BhdGhDYWxsX2gKKworI2luY2x1ZGUgIkNvZGVCbG9jay5oIgor
I2luY2x1ZGUgIkNvZGVMb2NhdGlvbi5oIgorI2luY2x1ZGUgIkZUTExhenlTbG93UGF0aC5oIgor
I2luY2x1ZGUgIkZUTFNsb3dQYXRoQ2FsbC5oIgorI2luY2x1ZGUgIkZUTFRodW5rcy5oIgorI2lu
Y2x1ZGUgIkdQUkluZm8uaCIKKyNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlckNvZGVSZWYuaCIKKyNp
bmNsdWRlICJSZWdpc3RlclNldC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7
CisKK3RlbXBsYXRlPHR5cGVuYW1lIFJlc3VsdFR5cGUsIHR5cGVuYW1lLi4uIEFyZ3VtZW50VHlw
ZXM+CitSZWZQdHI8TGF6eVNsb3dQYXRoOjpHZW5lcmF0b3I+IGNyZWF0ZUxhenlDYWxsR2VuZXJh
dG9yKAorICAgIEZ1bmN0aW9uUHRyIGZ1bmN0aW9uLCBSZXN1bHRUeXBlIHJlc3VsdCwgQXJndW1l
bnRUeXBlcy4uLiBhcmd1bWVudHMpCit7CisgICAgcmV0dXJuIExhenlTbG93UGF0aDo6Y3JlYXRl
R2VuZXJhdG9yKAorICAgICAgICBbPV0gKENDYWxsSGVscGVycyYgaml0LCBMYXp5U2xvd1BhdGg6
OkdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICAgICAgaml0LnN0b3JlMzIoCisg
ICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIocGFyYW1zLmxhenlTbG93
UGF0aC0+Y2FsbFNpdGVJbmRleCgpLmJpdHMoKSksCisgICAgICAgICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjp0YWdGb3IoSlNTdGFjazo6QXJndW1lbnRDb3VudCkpOworICAgICAgICAgICAgU2xvd1Bh
dGhDYWxsIHNsb3dQYXRoID0gY2FsbE9wZXJhdGlvbigKKyAgICAgICAgICAgICAgICBwYXJhbXMu
bGF6eVNsb3dQYXRoLT51c2VkUmVnaXN0ZXJzKCksIGppdCwgcGFyYW1zLmV4Y2VwdGlvbkp1bXBz
LCBmdW5jdGlvbiwgcmVzdWx0LAorICAgICAgICAgICAgICAgIGFyZ3VtZW50cy4uLik7CisgICAg
ICAgICAgICBwYXJhbXMuZG9uZUp1bXBzLmFwcGVuZChqaXQuanVtcCgpKTsKKyAgICAgICAgfSk7
Cit9CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKKworI2VuZGlmIC8vIEZUTExhenlTbG93
UGF0aENhbGxfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZH
VG9MTFZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExv
d2VyREZHVG9MTFZNLmNwcAkocmV2aXNpb24gMTkwNzQ5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDYgKzM5
LDcgQEAKICNpbmNsdWRlICJGVExGb3JPU1JFbnRyeUpJVENvZGUuaCIKICNpbmNsdWRlICJGVExG
b3JtYXR0ZWRWYWx1ZS5oIgogI2luY2x1ZGUgIkZUTElubGluZUNhY2hlU2l6ZS5oIgorI2luY2x1
ZGUgIkZUTExhenlTbG93UGF0aENhbGwuaCIKICNpbmNsdWRlICJGVExMb3dlcmVkTm9kZVZhbHVl
LmgiCiAjaW5jbHVkZSAiRlRMT3BlcmF0aW9ucy5oIgogI2luY2x1ZGUgIkZUTE91dHB1dC5oIgpA
QCAtNTAsNiArNTEsNyBAQAogI2luY2x1ZGUgIk9wZXJhbmRzSW5saW5lcy5oIgogI2luY2x1ZGUg
IlNjb3BlZEFyZ3VtZW50cy5oIgogI2luY2x1ZGUgIlNjb3BlZEFyZ3VtZW50c1RhYmxlLmgiCisj
aW5jbHVkZSAiU2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmgiCiAjaW5jbHVkZSAiVmlydHVhbFJl
Z2lzdGVyLmgiCiAjaW5jbHVkZSAiV2F0Y2hkb2cuaCIKICNpbmNsdWRlIDxhdG9taWM+CkBAIC01
MDY2LDcgKzUwNjgsNyBAQCBwcml2YXRlOgogICAgICAgICBpZiAoSlNTdHJpbmcqIHN0cmluZyA9
IG1fbm9kZS0+Y2hpbGQxKCktPmR5bmFtaWNDYXN0Q29uc3RhbnQ8SlNTdHJpbmcqPigpKSB7CiAg
ICAgICAgICAgICBpZiAoc3RyaW5nLT50cnlHZXRWYWx1ZUltcGwoKSAmJiBzdHJpbmctPnRyeUdl
dFZhbHVlSW1wbCgpLT5pc0F0b21pYygpKSB7CiAKLSAgICAgICAgICAgICAgICBjb25zdCBhdXRv
IHN0ciA9IHN0YXRpY19jYXN0PGNvbnN0IEF0b21pY1N0cmluZ0ltcGwqPihzdHJpbmctPnRyeUdl
dFZhbHVlSW1wbCgpKTsKKyAgICAgICAgICAgICAgICBVbmlxdWVkU3RyaW5nSW1wbCogc3RyID0g
Yml0d2lzZV9jYXN0PFVuaXF1ZWRTdHJpbmdJbXBsKj4oc3RyaW5nLT50cnlHZXRWYWx1ZUltcGwo
KSk7CiAgICAgICAgICAgICAgICAgdW5zaWduZWQgc3RhY2ttYXBJRCA9IG1fc3RhY2ttYXBJRHMr
KzsKICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgIExWYWx1ZSBjYWxsID0gbV9vdXQuY2Fs
bCgKQEAgLTYzMDMsOSArNjMwNSwxNCBAQCBwcml2YXRlOgogICAgICAgICBtX291dC5qdW1wKGNv
bnRpbnVhdGlvbik7CiAgICAgICAgIAogICAgICAgICBtX291dC5hcHBlbmRUbyhzbG93UGF0aCwg
Y29udGludWF0aW9uKTsKLSAgICAgICAgCi0gICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dSZXN1
bHQgPSBtX291dC5hbmNob3Iodm1DYWxsKAotICAgICAgICAgICAgbV9vdXQub3BlcmF0aW9uKG9w
ZXJhdGlvbk5ld09iamVjdCksIG1fY2FsbEZyYW1lLCBtX291dC5jb25zdEludFB0cihzdHJ1Y3R1
cmUpKSk7CisKKyAgICAgICAgTFZhbHVlIHNsb3dSZXN1bHRWYWx1ZSA9IGxhenlTbG93UGF0aCgK
KyAgICAgICAgICAgIFs9XSAoY29uc3QgVmVjdG9yPExvY2F0aW9uPiYgbG9jYXRpb25zKSAtPiBS
ZWZQdHI8TGF6eVNsb3dQYXRoOjpHZW5lcmF0b3I+IHsKKyAgICAgICAgICAgICAgICByZXR1cm4g
Y3JlYXRlTGF6eUNhbGxHZW5lcmF0b3IoCisgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbk5l
d09iamVjdCwgbG9jYXRpb25zWzBdLmRpcmVjdEdQUigpLAorICAgICAgICAgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSk7CisgICAgICAgICAgICB9KTsK
KyAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd1Jlc3VsdCA9IG1fb3V0LmFuY2hvcihzbG93UmVz
dWx0VmFsdWUpOwogICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CiAgICAgICAgIAog
ICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKQEAgLTcxNjMs
NiArNzE3MCwyOCBAQCBwcml2YXRlOgogICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRp
b24sIGxhc3ROZXh0KTsKICAgICAgICAgcmV0dXJuIG1fb3V0LnBoaShtX291dC5pbnQzMiwgZmFz
dFJlc3VsdCwgc2xvd1Jlc3VsdCk7CiAgICAgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVu
Y3RvciwgdHlwZW5hbWUuLi4gQXJndW1lbnRUeXBlcz4KKyAgICBMVmFsdWUgbGF6eVNsb3dQYXRo
KGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IsIEFyZ3VtZW50VHlwZXMuLi4gYXJndW1lbnRzKQorICAg
IHsKKyAgICAgICAgdW5zaWduZWQgc3RhY2ttYXBJRCA9IG1fc3RhY2ttYXBJRHMrKzsKKworICAg
ICAgICBMVmFsdWUgY2FsbCA9IG1fb3V0LmNhbGwoCisgICAgICAgICAgICBtX291dC5wYXRjaHBv
aW50SW50NjRJbnRyaW5zaWMoKSwKKyAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50NjQoc3RhY2tt
YXBJRCksIG1fb3V0LmNvbnN0SW50MzIoTWFjcm9Bc3NlbWJsZXI6Om1heEp1bXBSZXBsYWNlbWVu
dFNpemUoKSksCisgICAgICAgICAgICBjb25zdE51bGwobV9vdXQucmVmOCksIG1fb3V0LmNvbnN0
SW50MzIoc2l6ZW9mLi4uKGFyZ3VtZW50cykpLCBhcmd1bWVudHMuLi4pOworICAgICAgICBzZXRJ
bnN0cnVjdGlvbkNhbGxpbmdDb252ZW50aW9uKGNhbGwsIExMVk1BbnlSZWdDYWxsQ29udik7CisK
KyAgICAgICAgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4ID0KKyAgICAgICAgICAgIG1fZnRs
U3RhdGUuaml0Q29kZS0+Y29tbW9uLmFkZENvZGVPcmlnaW4obV9ub2RlLT5vcmlnaW4uc2VtYW50
aWMpOworICAgICAgICAKKyAgICAgICAgUmVmUHRyPExhenlTbG93UGF0aExpbmtlclRhc2s+IGxp
bmtlciA9CisgICAgICAgICAgICBjcmVhdGVTaGFyZWRUYXNrPExhenlTbG93UGF0aExpbmtlckZ1
bmN0aW9uPihmdW5jdG9yKTsKKworICAgICAgICBtX2Z0bFN0YXRlLmxhenlTbG93UGF0aHMuYXBw
ZW5kKExhenlTbG93UGF0aERlc2NyaXB0b3Ioc3RhY2ttYXBJRCwgY2FsbFNpdGVJbmRleCwgbGlu
a2VyKSk7CisKKyAgICAgICAgcmV0dXJuIGNhbGw7CisgICAgfQogICAgIAogICAgIHZvaWQgc3Bl
Y3VsYXRlKAogICAgICAgICBFeGl0S2luZCBraW5kLCBGb3JtYXR0ZWRWYWx1ZSBsb3dWYWx1ZSwg
Tm9kZSogaGlnaFZhbHVlLCBMVmFsdWUgZmFpbENvbmRpdGlvbikKQEAgLTgyNjcsMzMgKzgyOTYs
NjcgQEAgcHJpdmF0ZToKIAogICAgIHZvaWQgZW1pdFN0b3JlQmFycmllcihMVmFsdWUgYmFzZSkK
ICAgICB7Ci0gICAgICAgIExCYXNpY0Jsb2NrIGlzTWFya2VkQW5kTm90UmVtZW1iZXJlZCA9IEZU
TF9ORVdfQkxPQ0sobV9vdXQsICgiU3RvcmUgYmFycmllciBpcyBtYXJrZWQgYmxvY2siKSk7Ci0g
ICAgICAgIExCYXNpY0Jsb2NrIGJ1ZmZlckhhc1NwYWNlID0gRlRMX05FV19CTE9DSyhtX291dCwg
KCJTdG9yZSBiYXJyaWVyIGJ1ZmZlciBoYXMgc3BhY2UiKSk7Ci0gICAgICAgIExCYXNpY0Jsb2Nr
IGJ1ZmZlcklzRnVsbCA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiU3RvcmUgYmFycmllciBidWZm
ZXIgaXMgZnVsbCIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgc2xvd1BhdGggPSBGVExfTkVXX0JM
T0NLKG1fb3V0LCAoIlN0b3JlIGJhcnJpZXIgc2xvdyBwYXRoIikpOwogICAgICAgICBMQmFzaWNC
bG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIlN0b3JlIGJhcnJpZXIg
Y29udGludWF0aW9uIikpOwogCi0gICAgICAgIC8vIENoZWNrIHRoZSBtYXJrIGJ5dGUuIAotICAg
ICAgICBtX291dC5icmFuY2goCi0gICAgICAgICAgICBtX291dC5ub3RaZXJvOChsb2FkQ2VsbFN0
YXRlKGJhc2UpKSwgdXN1YWxseShjb250aW51YXRpb24pLCByYXJlbHkoaXNNYXJrZWRBbmROb3RS
ZW1lbWJlcmVkKSk7Ci0KLSAgICAgICAgLy8gQXBwZW5kIHRvIHRoZSB3cml0ZSBiYXJyaWVyIGJ1
ZmZlci4KLSAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhpc01h
cmtlZEFuZE5vdFJlbWVtYmVyZWQsIGJ1ZmZlckhhc1NwYWNlKTsKLSAgICAgICAgTFZhbHVlIGN1
cnJlbnRCdWZmZXJJbmRleCA9IG1fb3V0LmxvYWQzMihtX291dC5hYnNvbHV0ZSh2bSgpLmhlYXAu
d3JpdGVCYXJyaWVyQnVmZmVyKCkuY3VycmVudEluZGV4QWRkcmVzcygpKSk7Ci0gICAgICAgIExW
YWx1ZSBidWZmZXJDYXBhY2l0eSA9IG1fb3V0LmNvbnN0SW50MzIodm0oKS5oZWFwLndyaXRlQmFy
cmllckJ1ZmZlcigpLmNhcGFjaXR5KCkpOwogICAgICAgICBtX291dC5icmFuY2goCi0gICAgICAg
ICAgICBtX291dC5sZXNzVGhhbihjdXJyZW50QnVmZmVySW5kZXgsIGJ1ZmZlckNhcGFjaXR5KSwK
LSAgICAgICAgICAgIHVzdWFsbHkoYnVmZmVySGFzU3BhY2UpLCByYXJlbHkoYnVmZmVySXNGdWxs
KSk7CisgICAgICAgICAgICBtX291dC5ub3RaZXJvOChsb2FkQ2VsbFN0YXRlKGJhc2UpKSwgdXN1
YWxseShjb250aW51YXRpb24pLCByYXJlbHkoc2xvd1BhdGgpKTsKIAotICAgICAgICAvLyBCdWZm
ZXIgaGFzIHNwYWNlLCBzdG9yZSB0byBpdC4KLSAgICAgICAgbV9vdXQuYXBwZW5kVG8oYnVmZmVy
SGFzU3BhY2UsIGJ1ZmZlcklzRnVsbCk7Ci0gICAgICAgIExWYWx1ZSB3cml0ZUJhcnJpZXJCdWZm
ZXJCYXNlID0gbV9vdXQuY29uc3RJbnRQdHIodm0oKS5oZWFwLndyaXRlQmFycmllckJ1ZmZlcigp
LmJ1ZmZlcigpKTsKLSAgICAgICAgbV9vdXQuc3RvcmVQdHIoYmFzZSwgbV9vdXQuYmFzZUluZGV4
KG1faGVhcHMuV3JpdGVCYXJyaWVyQnVmZmVyX2J1ZmZlckNvbnRlbnRzLCB3cml0ZUJhcnJpZXJC
dWZmZXJCYXNlLCBtX291dC56ZXJvRXh0UHRyKGN1cnJlbnRCdWZmZXJJbmRleCkpKTsKLSAgICAg
ICAgbV9vdXQuc3RvcmUzMihtX291dC5hZGQoY3VycmVudEJ1ZmZlckluZGV4LCBtX291dC5jb25z
dEludDMyKDEpKSwgbV9vdXQuYWJzb2x1dGUodm0oKS5oZWFwLndyaXRlQmFycmllckJ1ZmZlcigp
LmN1cnJlbnRJbmRleEFkZHJlc3MoKSkpOwotICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlv
bik7CisgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oc2xvd1Bh
dGgsIGNvbnRpbnVhdGlvbik7CiAKLSAgICAgICAgLy8gQnVmZmVyIGlzIG91dCBvZiBzcGFjZSwg
Zmx1c2ggaXQuCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKGJ1ZmZlcklzRnVsbCwgY29udGludWF0
aW9uKTsKLSAgICAgICAgdm1DYWxsTm9FeGNlcHRpb25zKG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRp
b25GbHVzaFdyaXRlQmFycmllckJ1ZmZlciksIG1fY2FsbEZyYW1lLCBiYXNlKTsKKyAgICAgICAg
Ly8gV2UgZW1pdCB0aGUgc3RvcmUgYmFycmllciBzbG93IHBhdGggbGF6aWx5LiBJbiBhIGxvdCBv
ZiBjYXNlcywgdGhpcyB3aWxsIG5ldmVyIGZpcmUuIEFuZAorICAgICAgICAvLyB3aGVuIGl0IGRv
ZXMgZmlyZSwgaXQgbWFrZXMgc2Vuc2UgZm9yIHVzIHRvIGdlbmVyYXRlIHRoaXMgY29kZSB1c2lu
ZyBvdXIgSklUIHJhdGhlciB0aGFuCisgICAgICAgIC8vIHdhc3RpbmcgTExWTSdzIHRpbWUgb3B0
aW1pemluZyBpdC4KKyAgICAgICAgbGF6eVNsb3dQYXRoKAorICAgICAgICAgICAgWz1dIChjb25z
dCBWZWN0b3I8TG9jYXRpb24+JiBsb2NhdGlvbnMpIC0+IFJlZlB0cjxMYXp5U2xvd1BhdGg6Okdl
bmVyYXRvcj4geworICAgICAgICAgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gbG9jYXRpb25zWzFd
LmRpcmVjdEdQUigpOworCisgICAgICAgICAgICAgICAgcmV0dXJuIExhenlTbG93UGF0aDo6Y3Jl
YXRlR2VuZXJhdG9yKAorICAgICAgICAgICAgICAgICAgICBbPV0gKENDYWxsSGVscGVycyYgaml0
LCBMYXp5U2xvd1BhdGg6OkdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICAgICAg
ICAgICAgICAgICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVycyA9IHBhcmFtcy5sYXp5U2xvd1Bh
dGgtPnVzZWRSZWdpc3RlcnMoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFNjcmF0Y2hSZWdp
c3RlckFsbG9jYXRvciBzY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IodXNlZFJlZ2lzdGVycyk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBzY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IubG9jayhiYXNl
R1BSKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2gxID0gc2NyYXRj
aFJlZ2lzdGVyQWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOworICAgICAgICAgICAgICAg
ICAgICAgICAgR1BSUmVnIHNjcmF0Y2gyID0gc2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmFsbG9j
YXRlU2NyYXRjaEdQUigpOworCisgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBieXRl
c1B1c2hlZCA9CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NyYXRjaFJlZ2lzdGVyQWxs
b2NhdG9yLnByZXNlcnZlUmV1c2VkUmVnaXN0ZXJzQnlQdXNoaW5nKGppdCk7CisKKyAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIFdlJ3ZlIGFscmVhZHkgc2F2ZWQgdGhlc2UsIHNvIHdoZW4gd2Ug
bWFrZSBhIHNsb3cgcGF0aCBjYWxsLCB3ZSBkb24ndCBoYXZlCisgICAgICAgICAgICAgICAgICAg
ICAgICAvLyB0byBzYXZlIHRoZW0gYWdhaW4uCisgICAgICAgICAgICAgICAgICAgICAgICB1c2Vk
UmVnaXN0ZXJzLmV4Y2x1ZGUoUmVnaXN0ZXJTZXQoc2NyYXRjaDEsIHNjcmF0Y2gyKSk7CisKKyAg
ICAgICAgICAgICAgICAgICAgICAgIFdyaXRlQmFycmllckJ1ZmZlciYgd3JpdGVCYXJyaWVyQnVm
ZmVyID0gaml0LnZtKCktPmhlYXAud3JpdGVCYXJyaWVyQnVmZmVyKCk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBqaXQubG9hZDMyKHdyaXRlQmFycmllckJ1ZmZlci5jdXJyZW50SW5kZXhBZGRy
ZXNzKCksIHNjcmF0Y2gyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6
SnVtcCBuZWVkVG9GbHVzaCA9IGppdC5icmFuY2gzMigKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6OkFib3ZlT3JFcXVhbCwgc2NyYXRjaDIsCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIod3JpdGVCYXJyaWVyQnVm
ZmVyLmNhcGFjaXR5KCkpKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgaml0LmFkZDMyKEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKDEpLCBzY3JhdGNoMik7CisgICAgICAgICAgICAgICAg
ICAgICAgICBqaXQuc3RvcmUzMihzY3JhdGNoMiwgd3JpdGVCYXJyaWVyQnVmZmVyLmN1cnJlbnRJ
bmRleEFkZHJlc3MoKSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGppdC5tb3ZlKENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbVB0cih3cml0ZUJhcnJpZXJCdWZmZXIuYnVmZmVyKCkpLCBzY3Jh
dGNoMSk7CisgICAgICAgICAgICAgICAgICAgICAgICBqaXQuc3RvcmVQdHIoCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgYmFzZUdQUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6OkJhc2VJbmRleCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
c2NyYXRjaDEsIHNjcmF0Y2gyLCBDQ2FsbEhlbHBlcnM6OlNjYWxlUHRyLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQzMl90Pigtc2l6ZW9mKHZvaWQqKSkp
KTsKKworICAgICAgICAgICAgICAgICAgICAgICAgc2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLnJl
c3RvcmVSZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmcoaml0LCBieXRlc1B1c2hlZCk7CisKKyAgICAg
ICAgICAgICAgICAgICAgICAgIHBhcmFtcy5kb25lSnVtcHMuYXBwZW5kKGppdC5qdW1wKCkpOwor
CisgICAgICAgICAgICAgICAgICAgICAgICBuZWVkVG9GbHVzaC5saW5rKCZqaXQpOworICAgICAg
ICAgICAgICAgICAgICAgICAgY2FsbE9wZXJhdGlvbigKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB1c2VkUmVnaXN0ZXJzLCBqaXQsIHBhcmFtcy5sYXp5U2xvd1BhdGgtPmNhbGxTaXRlSW5k
ZXgoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMuZXhjZXB0aW9uSnVtcHMs
IG9wZXJhdGlvbkZsdXNoV3JpdGVCYXJyaWVyQnVmZmVyLCBJbnZhbGlkR1BSUmVnLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIGJhc2VHUFIpOworICAgICAgICAgICAgICAgICAgICAgICAg
c2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLnJlc3RvcmVSZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmco
aml0LCBieXRlc1B1c2hlZCk7CisgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMuZG9uZUp1
bXBzLmFwcGVuZChqaXQuanVtcCgpKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAg
ICAgICB9LAorICAgICAgICAgICAgYmFzZSk7CiAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0
aW9uKTsKIAogICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3BlcmF0aW9ucy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPcGVyYXRpb25zLmNwcAkocmV2
aXNpb24gMTkwNzQ5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPcGVyYXRpb25z
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsOCBAQAogCiAjaW5jbHVkZSAiQ2xvbmVk
QXJndW1lbnRzLmgiCiAjaW5jbHVkZSAiRGlyZWN0QXJndW1lbnRzLmgiCisjaW5jbHVkZSAiRlRM
SklUQ29kZS5oIgorI2luY2x1ZGUgIkZUTExhenlTbG93UGF0aC5oIgogI2luY2x1ZGUgIklubGlu
ZUNhbGxGcmFtZS5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJKU0xleGlj
YWxFbnZpcm9ubWVudC5oIgpAQCAtMzU3LDYgKzM1OSwyMiBAQCBleHRlcm4gIkMiIEpTQ2VsbCog
SklUX09QRVJBVElPTiBvcGVyYXRpCiAgICAgfQogfQogCitleHRlcm4gIkMiIHZvaWQqIEpJVF9P
UEVSQVRJT04gY29tcGlsZUZUTExhenlTbG93UGF0aChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVk
IGluZGV4KQoreworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisKKyAgICAvLyBXZSBjYW5ub3Qg
R0MuIFdlJ3ZlIGdvdCBwb2ludGVycyBpbiBldmlsIHBsYWNlcy4KKyAgICBEZWZlckdDRm9yQVdo
aWxlIGRlZmVyR0Modm0uaGVhcCk7CisKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMt
PmNvZGVCbG9jaygpOworICAgIEpJVENvZGUqIGppdENvZGUgPSBjb2RlQmxvY2stPmppdENvZGUo
KS0+ZnRsKCk7CisKKyAgICBMYXp5U2xvd1BhdGgmIGxhenlTbG93UGF0aCA9ICpqaXRDb2RlLT5s
YXp5U2xvd1BhdGhzW2luZGV4XTsKKyAgICBsYXp5U2xvd1BhdGguZ2VuZXJhdGUoY29kZUJsb2Nr
KTsKKworICAgIHJldHVybiBsYXp5U2xvd1BhdGguc3R1YigpLmNvZGUoKS5leGVjdXRhYmxlQWRk
cmVzcygpOworfQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCiAKICNlbmRpZiAvLyBFTkFC
TEUoRlRMX0pJVCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3BlcmF0aW9u
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3BlcmF0aW9u
cy5oCShyZXZpc2lvbiAxOTA3NDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9w
ZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsOCBAQAogCiBuYW1lc3BhY2Ug
SlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAKK2NsYXNzIExhenlTbG93UGF0aDsKKwogZXh0ZXJuICJD
IiB7CiAKIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdPYmplY3RXaXRoQnV0dGVy
Zmx5KEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSopIFdURl9JTlRFUk5BTDsKQEAgLTQzLDYgKzQ1LDgg
QEAgSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk1hdGVyaWFsaQogdm9pZCBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvblBvcHVsYXRlT2JqZWN0SW5PU1IoCiAgICAgRXhlY1N0YXRlKiwgRXhp
dFRpbWVPYmplY3RNYXRlcmlhbGl6YXRpb24qLCBFbmNvZGVkSlNWYWx1ZSosIEVuY29kZWRKU1Zh
bHVlKikgV1RGX0lOVEVSTkFMOwogCit2b2lkKiBKSVRfT1BFUkFUSU9OIGNvbXBpbGVGVExMYXp5
U2xvd1BhdGgoRXhlY1N0YXRlKiwgdW5zaWduZWQpIFdURl9JTlRFUk5BTDsKKwogfSAvLyBleHRl
cm4gIkMiCiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMU2xvd1BhdGhDYWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTFNsb3dQYXRoQ2FsbC5jcHAJKHJldmlzaW9uIDE5MDc0OSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU2xvd1BhdGhDYWxsLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTUg
QXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFu
ZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9k
aWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25k
aXRpb25zCkBAIC0zMCwxODggKzMwLDExNiBAQAogCiAjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgi
CiAjaW5jbHVkZSAiRlRMU3RhdGUuaCIKKyNpbmNsdWRlICJGVExUaHVua3MuaCIKICNpbmNsdWRl
ICJHUFJJbmZvLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEZUTCB7CiAKLW5hbWVzcGFjZSB7Ci0KIC8vIFRoaXMgY29kZSByZWxpZXMgb24g
dXMgYmVpbmcgNjQtYml0LiBGVEwgaXMgY3VycmVudGx5IGFsd2F5cyA2NC1iaXQuCiBzdGF0aWMg
Y29uc3Qgc2l6ZV90IHdvcmRTaXplID0gODsKIAotLy8gVGhpcyB3aWxsIGJlIGFuIFJBSUkgdGhp
bmd5IHRoYXQgd2lsbCBzZXQgdXAgdGhlIG5lY2Vzc2FyeSBzdGFjayBzaXplcyBhbmQgb2Zmc2V0
cyBhbmQgc3VjaC4KLWNsYXNzIENhbGxDb250ZXh0IHsKLXB1YmxpYzoKLSAgICBDYWxsQ29udGV4
dCgKLSAgICAgICAgU3RhdGUmIHN0YXRlLCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVy
cywgQ0NhbGxIZWxwZXJzJiBqaXQsCi0gICAgICAgIHVuc2lnbmVkIG51bUFyZ3MsIEdQUlJlZyBy
ZXR1cm5SZWdpc3RlcikKLSAgICAgICAgOiBtX3N0YXRlKHN0YXRlKQotICAgICAgICAsIG1fdXNl
ZFJlZ2lzdGVycyh1c2VkUmVnaXN0ZXJzKQotICAgICAgICAsIG1faml0KGppdCkKLSAgICAgICAg
LCBtX251bUFyZ3MobnVtQXJncykKLSAgICAgICAgLCBtX3JldHVyblJlZ2lzdGVyKHJldHVyblJl
Z2lzdGVyKQotICAgIHsKLSAgICAgICAgLy8gV2UgZG9uJ3QgY2FyZSB0aGF0IHlvdSdyZSB1c2lu
ZyBjYWxsZWUtc2F2ZSwgc3RhY2ssIG9yIGhhcmR3YXJlIHJlZ2lzdGVycy4KLSAgICAgICAgbV91
c2VkUmVnaXN0ZXJzLmV4Y2x1ZGUoUmVnaXN0ZXJTZXQ6OnN0YWNrUmVnaXN0ZXJzKCkpOwotICAg
ICAgICBtX3VzZWRSZWdpc3RlcnMuZXhjbHVkZShSZWdpc3RlclNldDo6cmVzZXJ2ZWRIYXJkd2Fy
ZVJlZ2lzdGVycygpKTsKLSAgICAgICAgbV91c2VkUmVnaXN0ZXJzLmV4Y2x1ZGUoUmVnaXN0ZXJT
ZXQ6OmNhbGxlZVNhdmVSZWdpc3RlcnMoKSk7Ci0gICAgICAgIAotICAgICAgICAvLyBUaGUgcmV0
dXJuIHJlZ2lzdGVyIGRvZXNuJ3QgbmVlZCB0byBiZSBzYXZlZC4KLSAgICAgICAgaWYgKG1fcmV0
dXJuUmVnaXN0ZXIgIT0gSW52YWxpZEdQUlJlZykKLSAgICAgICAgICAgIG1fdXNlZFJlZ2lzdGVy
cy5jbGVhcihtX3JldHVyblJlZ2lzdGVyKTsKLSAgICAgICAgCi0gICAgICAgIHNpemVfdCBzdGFj
a0J5dGVzTmVlZGVkRm9yUmV0dXJuQWRkcmVzcyA9IHdvcmRTaXplOwotICAgICAgICAKLSAgICAg
ICAgbV9vZmZzZXRUb1NhdmluZ0FyZWEgPQotICAgICAgICAgICAgKHN0ZDo6bWF4KG1fbnVtQXJn
cywgTlVNQkVSX09GX0FSR1VNRU5UX1JFR0lTVEVSUykgLSBOVU1CRVJfT0ZfQVJHVU1FTlRfUkVH
SVNURVJTKSAqIHdvcmRTaXplOwotICAgICAgICAKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
c3RkOjptaW4oTlVNQkVSX09GX0FSR1VNRU5UX1JFR0lTVEVSUywgbnVtQXJncyk7IGktLTspCi0g
ICAgICAgICAgICBtX2FyZ3VtZW50UmVnaXN0ZXJzLnNldChHUFJJbmZvOjp0b0FyZ3VtZW50UmVn
aXN0ZXIoaSkpOwotICAgICAgICBtX2NhbGxpbmdDb252ZW50aW9uUmVnaXN0ZXJzLm1lcmdlKG1f
YXJndW1lbnRSZWdpc3RlcnMpOwotICAgICAgICBpZiAocmV0dXJuUmVnaXN0ZXIgIT0gSW52YWxp
ZEdQUlJlZykKLSAgICAgICAgICAgIG1fY2FsbGluZ0NvbnZlbnRpb25SZWdpc3RlcnMuc2V0KEdQ
UkluZm86OnJldHVyblZhbHVlR1BSKTsKLSAgICAgICAgbV9jYWxsaW5nQ29udmVudGlvblJlZ2lz
dGVycy5maWx0ZXIobV91c2VkUmVnaXN0ZXJzKTsKLSAgICAgICAgCi0gICAgICAgIHVuc2lnbmVk
IG51bWJlck9mQ2FsbGluZ0NvbnZlbnRpb25SZWdpc3RlcnMgPQotICAgICAgICAgICAgbV9jYWxs
aW5nQ29udmVudGlvblJlZ2lzdGVycy5udW1iZXJPZlNldFJlZ2lzdGVycygpOwotICAgICAgICAK
LSAgICAgICAgc2l6ZV90IG9mZnNldFRvVGh1bmtTYXZpbmdBcmVhID0KLSAgICAgICAgICAgIG1f
b2Zmc2V0VG9TYXZpbmdBcmVhICsKLSAgICAgICAgICAgIG51bWJlck9mQ2FsbGluZ0NvbnZlbnRp
b25SZWdpc3RlcnMgKiB3b3JkU2l6ZTsKLSAgICAgICAgCi0gICAgICAgIG1fc3RhY2tCeXRlc05l
ZWRlZCA9Ci0gICAgICAgICAgICBvZmZzZXRUb1RodW5rU2F2aW5nQXJlYSArCi0gICAgICAgICAg
ICBzdGFja0J5dGVzTmVlZGVkRm9yUmV0dXJuQWRkcmVzcyArCi0gICAgICAgICAgICAobV91c2Vk
UmVnaXN0ZXJzLm51bWJlck9mU2V0UmVnaXN0ZXJzKCkgLSBudW1iZXJPZkNhbGxpbmdDb252ZW50
aW9uUmVnaXN0ZXJzKSAqIHdvcmRTaXplOwotICAgICAgICAKLSAgICAgICAgbV9zdGFja0J5dGVz
TmVlZGVkID0gKG1fc3RhY2tCeXRlc05lZWRlZCArIHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSAtIDEp
ICYgfihzdGFja0FsaWdubWVudEJ5dGVzKCkgLSAxKTsKLSAgICAgICAgCi0gICAgICAgIG1faml0
LnN1YlB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihtX3N0YWNrQnl0ZXNOZWVkZWQpLCBD
Q2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKLSAgICAgICAgCi0gICAgICAgIG1f
dGh1bmtTYXZlU2V0ID0gbV91c2VkUmVnaXN0ZXJzOwotICAgICAgICAKLSAgICAgICAgLy8gVGhp
cyByZWxpZXMgb24gYWxsIGNhbGxpbmcgY29udmVudGlvbiByZWdpc3RlcnMgYWxzbyBiZWluZyB0
ZW1wIHJlZ2lzdGVycy4KLSAgICAgICAgdW5zaWduZWQgc3RhY2tJbmRleCA9IDA7Ci0gICAgICAg
IGZvciAodW5zaWduZWQgaSA9IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyBpLS07KSB7Ci0g
ICAgICAgICAgICBHUFJSZWcgcmVnID0gR1BSSW5mbzo6dG9SZWdpc3RlcihpKTsKLSAgICAgICAg
ICAgIGlmICghbV9jYWxsaW5nQ29udmVudGlvblJlZ2lzdGVycy5nZXQocmVnKSkKLSAgICAgICAg
ICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKHJlZywgQ0NhbGxI
ZWxwZXJzOjpBZGRyZXNzKENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIG1fb2Zm
c2V0VG9TYXZpbmdBcmVhICsgKHN0YWNrSW5kZXgrKykgKiB3b3JkU2l6ZSkpOwotICAgICAgICAg
ICAgbV90aHVua1NhdmVTZXQuY2xlYXIocmVnKTsKLSAgICAgICAgfQorU2xvd1BhdGhDYWxsQ29u
dGV4dDo6U2xvd1BhdGhDYWxsQ29udGV4dCgKKyAgICBSZWdpc3RlclNldCB1c2VkUmVnaXN0ZXJz
LCBDQ2FsbEhlbHBlcnMmIGppdCwgdW5zaWduZWQgbnVtQXJncywgR1BSUmVnIHJldHVyblJlZ2lz
dGVyKQorICAgIDogbV9qaXQoaml0KQorICAgICwgbV9udW1BcmdzKG51bUFyZ3MpCisgICAgLCBt
X3JldHVyblJlZ2lzdGVyKHJldHVyblJlZ2lzdGVyKQoreworICAgIC8vIFdlIGRvbid0IGNhcmUg
dGhhdCB5b3UncmUgdXNpbmcgY2FsbGVlLXNhdmUsIHN0YWNrLCBvciBoYXJkd2FyZSByZWdpc3Rl
cnMuCisgICAgdXNlZFJlZ2lzdGVycy5leGNsdWRlKFJlZ2lzdGVyU2V0OjpzdGFja1JlZ2lzdGVy
cygpKTsKKyAgICB1c2VkUmVnaXN0ZXJzLmV4Y2x1ZGUoUmVnaXN0ZXJTZXQ6OnJlc2VydmVkSGFy
ZHdhcmVSZWdpc3RlcnMoKSk7CisgICAgdXNlZFJlZ2lzdGVycy5leGNsdWRlKFJlZ2lzdGVyU2V0
OjpjYWxsZWVTYXZlUmVnaXN0ZXJzKCkpOwogICAgICAgICAKLSAgICAgICAgbV9vZmZzZXQgPSBv
ZmZzZXRUb1RodW5rU2F2aW5nQXJlYTsKLSAgICB9Ci0gICAgCi0gICAgfkNhbGxDb250ZXh0KCkK
LSAgICB7Ci0gICAgICAgIGlmIChtX3JldHVyblJlZ2lzdGVyICE9IEludmFsaWRHUFJSZWcpCi0g
ICAgICAgICAgICBtX2ppdC5tb3ZlKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBtX3JldHVyblJl
Z2lzdGVyKTsKLSAgICAgICAgCi0gICAgICAgIHVuc2lnbmVkIHN0YWNrSW5kZXggPSAwOwotICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgaS0tOykg
ewotICAgICAgICAgICAgR1BSUmVnIHJlZyA9IEdQUkluZm86OnRvUmVnaXN0ZXIoaSk7Ci0gICAg
ICAgICAgICBpZiAoIW1fY2FsbGluZ0NvbnZlbnRpb25SZWdpc3RlcnMuZ2V0KHJlZykpCi0gICAg
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBtX2ppdC5sb2FkUHRyKENDYWxsSGVs
cGVyczo6QWRkcmVzcyhDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBtX29mZnNl
dFRvU2F2aW5nQXJlYSArIChzdGFja0luZGV4KyspICogd29yZFNpemUpLCByZWcpOwotICAgICAg
ICB9CisgICAgLy8gVGhlIHJldHVybiByZWdpc3RlciBkb2Vzbid0IG5lZWQgdG8gYmUgc2F2ZWQu
CisgICAgaWYgKG1fcmV0dXJuUmVnaXN0ZXIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgdXNl
ZFJlZ2lzdGVycy5jbGVhcihtX3JldHVyblJlZ2lzdGVyKTsKICAgICAgICAgCi0gICAgICAgIG1f
aml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihtX3N0YWNrQnl0ZXNOZWVkZWQp
LCBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKLSAgICB9Ci0gICAgCi0gICAg
UmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVycygpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4g
bV90aHVua1NhdmVTZXQ7Ci0gICAgfQotICAgIAotICAgIHB0cmRpZmZfdCBvZmZzZXQoKSBjb25z
dAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fb2Zmc2V0OworICAgIHNpemVfdCBzdGFja0J5dGVz
TmVlZGVkRm9yUmV0dXJuQWRkcmVzcyA9IHdvcmRTaXplOworICAgICAgICAKKyAgICBtX29mZnNl
dFRvU2F2aW5nQXJlYSA9CisgICAgICAgIChzdGQ6Om1heChtX251bUFyZ3MsIE5VTUJFUl9PRl9B
UkdVTUVOVF9SRUdJU1RFUlMpIC0gTlVNQkVSX09GX0FSR1VNRU5UX1JFR0lTVEVSUykgKiB3b3Jk
U2l6ZTsKKyAgICAgICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0gc3RkOjptaW4oTlVNQkVSX09G
X0FSR1VNRU5UX1JFR0lTVEVSUywgbnVtQXJncyk7IGktLTspCisgICAgICAgIG1fYXJndW1lbnRS
ZWdpc3RlcnMuc2V0KEdQUkluZm86OnRvQXJndW1lbnRSZWdpc3RlcihpKSk7CisgICAgbV9jYWxs
aW5nQ29udmVudGlvblJlZ2lzdGVycy5tZXJnZShtX2FyZ3VtZW50UmVnaXN0ZXJzKTsKKyAgICBp
ZiAocmV0dXJuUmVnaXN0ZXIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgbV9jYWxsaW5nQ29u
dmVudGlvblJlZ2lzdGVycy5zZXQoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAgIG1fY2Fs
bGluZ0NvbnZlbnRpb25SZWdpc3RlcnMuZmlsdGVyKHVzZWRSZWdpc3RlcnMpOworICAgICAgICAK
KyAgICB1bnNpZ25lZCBudW1iZXJPZkNhbGxpbmdDb252ZW50aW9uUmVnaXN0ZXJzID0KKyAgICAg
ICAgbV9jYWxsaW5nQ29udmVudGlvblJlZ2lzdGVycy5udW1iZXJPZlNldFJlZ2lzdGVycygpOwor
ICAgICAgICAKKyAgICBzaXplX3Qgb2Zmc2V0VG9UaHVua1NhdmluZ0FyZWEgPQorICAgICAgICBt
X29mZnNldFRvU2F2aW5nQXJlYSArCisgICAgICAgIG51bWJlck9mQ2FsbGluZ0NvbnZlbnRpb25S
ZWdpc3RlcnMgKiB3b3JkU2l6ZTsKKyAgICAgICAgCisgICAgbV9zdGFja0J5dGVzTmVlZGVkID0K
KyAgICAgICAgb2Zmc2V0VG9UaHVua1NhdmluZ0FyZWEgKworICAgICAgICBzdGFja0J5dGVzTmVl
ZGVkRm9yUmV0dXJuQWRkcmVzcyArCisgICAgICAgICh1c2VkUmVnaXN0ZXJzLm51bWJlck9mU2V0
UmVnaXN0ZXJzKCkgLSBudW1iZXJPZkNhbGxpbmdDb252ZW50aW9uUmVnaXN0ZXJzKSAqIHdvcmRT
aXplOworICAgICAgICAKKyAgICBtX3N0YWNrQnl0ZXNOZWVkZWQgPSAobV9zdGFja0J5dGVzTmVl
ZGVkICsgc3RhY2tBbGlnbm1lbnRCeXRlcygpIC0gMSkgJiB+KHN0YWNrQWxpZ25tZW50Qnl0ZXMo
KSAtIDEpOworICAgICAgICAKKyAgICBtX2ppdC5zdWJQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tMzIobV9zdGFja0J5dGVzTmVlZGVkKSwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdp
c3Rlcik7CisKKyAgICBtX3RodW5rU2F2ZVNldCA9IHVzZWRSZWdpc3RlcnM7CisgICAgICAgIAor
ICAgIC8vIFRoaXMgcmVsaWVzIG9uIGFsbCBjYWxsaW5nIGNvbnZlbnRpb24gcmVnaXN0ZXJzIGFs
c28gYmVpbmcgdGVtcCByZWdpc3RlcnMuCisgICAgdW5zaWduZWQgc3RhY2tJbmRleCA9IDA7Cisg
ICAgZm9yICh1bnNpZ25lZCBpID0gR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7IGktLTspIHsK
KyAgICAgICAgR1BSUmVnIHJlZyA9IEdQUkluZm86OnRvUmVnaXN0ZXIoaSk7CisgICAgICAgIGlm
ICghbV9jYWxsaW5nQ29udmVudGlvblJlZ2lzdGVycy5nZXQocmVnKSkKKyAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICBtX2ppdC5zdG9yZVB0cihyZWcsIENDYWxsSGVscGVyczo6QWRkcmVz
cyhDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBtX29mZnNldFRvU2F2aW5nQXJl
YSArIChzdGFja0luZGV4KyspICogd29yZFNpemUpKTsKKyAgICAgICAgbV90aHVua1NhdmVTZXQu
Y2xlYXIocmVnKTsKICAgICB9CisgICAgICAgIAorICAgIG1fb2Zmc2V0ID0gb2Zmc2V0VG9UaHVu
a1NhdmluZ0FyZWE7Cit9CiAgICAgCi0gICAgU2xvd1BhdGhDYWxsS2V5IGtleVdpdGhUYXJnZXQo
dm9pZCogY2FsbFRhcmdldCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBTbG93UGF0aENh
bGxLZXkodXNlZFJlZ2lzdGVycygpLCBjYWxsVGFyZ2V0LCBtX2FyZ3VtZW50UmVnaXN0ZXJzLCBv
ZmZzZXQoKSk7Ci0gICAgfQorU2xvd1BhdGhDYWxsQ29udGV4dDo6flNsb3dQYXRoQ2FsbENvbnRl
eHQoKQoreworICAgIGlmIChtX3JldHVyblJlZ2lzdGVyICE9IEludmFsaWRHUFJSZWcpCisgICAg
ICAgIG1faml0Lm1vdmUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIG1fcmV0dXJuUmVnaXN0ZXIp
OwogICAgIAotICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIG1ha2VDYWxsKHZvaWQqIGNhbGxUYXJn
ZXQsIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCogZXhjZXB0aW9uVGFyZ2V0KQotICAgIHsKLSAg
ICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgcmVzdWx0ID0gbV9qaXQuY2FsbCgpOwotICAgICAg
ICBtX3N0YXRlLmZpbmFsaXplci0+c2xvd1BhdGhDYWxscy5hcHBlbmQoU2xvd1BhdGhDYWxsKAot
ICAgICAgICAgICAgcmVzdWx0LCBrZXlXaXRoVGFyZ2V0KGNhbGxUYXJnZXQpKSk7Ci0gICAgICAg
IGlmIChleGNlcHRpb25UYXJnZXQpCi0gICAgICAgICAgICBleGNlcHRpb25UYXJnZXQtPmFwcGVu
ZChtX2ppdC5lbWl0RXhjZXB0aW9uQ2hlY2soKSk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Cisg
ICAgdW5zaWduZWQgc3RhY2tJbmRleCA9IDA7CisgICAgZm9yICh1bnNpZ25lZCBpID0gR1BSSW5m
bzo6bnVtYmVyT2ZSZWdpc3RlcnM7IGktLTspIHsKKyAgICAgICAgR1BSUmVnIHJlZyA9IEdQUklu
Zm86OnRvUmVnaXN0ZXIoaSk7CisgICAgICAgIGlmICghbV9jYWxsaW5nQ29udmVudGlvblJlZ2lz
dGVycy5nZXQocmVnKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBtX2ppdC5sb2Fk
UHRyKENDYWxsSGVscGVyczo6QWRkcmVzcyhDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lz
dGVyLCBtX29mZnNldFRvU2F2aW5nQXJlYSArIChzdGFja0luZGV4KyspICogd29yZFNpemUpLCBy
ZWcpOwogICAgIH0KICAgICAKLXByaXZhdGU6Ci0gICAgU3RhdGUmIG1fc3RhdGU7Ci0gICAgUmVn
aXN0ZXJTZXQgbV91c2VkUmVnaXN0ZXJzOwotICAgIFJlZ2lzdGVyU2V0IG1fYXJndW1lbnRSZWdp
c3RlcnM7Ci0gICAgUmVnaXN0ZXJTZXQgbV9jYWxsaW5nQ29udmVudGlvblJlZ2lzdGVyczsKLSAg
ICBDQ2FsbEhlbHBlcnMmIG1faml0OwotICAgIHVuc2lnbmVkIG1fbnVtQXJnczsKLSAgICBHUFJS
ZWcgbV9yZXR1cm5SZWdpc3RlcjsKLSAgICBzaXplX3QgbV9vZmZzZXRUb1NhdmluZ0FyZWE7Ci0g
ICAgc2l6ZV90IG1fc3RhY2tCeXRlc05lZWRlZDsKLSAgICBSZWdpc3RlclNldCBtX3RodW5rU2F2
ZVNldDsKLSAgICBwdHJkaWZmX3QgbV9vZmZzZXQ7Ci19OwotCi19IC8vIGFub255bW91cyBuYW1l
c3BhY2UKLQotdm9pZCBzdG9yZUNvZGVPcmlnaW4oU3RhdGUmIHN0YXRlLCBDQ2FsbEhlbHBlcnMm
IGppdCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQotewotICAgIGlmICghY29kZU9yaWdpbi5pc1Nl
dCgpKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZSA9
IHN0YXRlLmppdENvZGUtPmNvbW1vbi5hZGRDb2RlT3JpZ2luKGNvZGVPcmlnaW4pOwotICAgIHVu
c2lnbmVkIGxvY2F0aW9uQml0cyA9IGNhbGxTaXRlLmJpdHMoKTsKLSAgICBqaXQuc3RvcmUzMigK
LSAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIobG9jYXRpb25CaXRzKSwKLSAgICAg
ICAgQ0NhbGxIZWxwZXJzOjp0YWdGb3Ioc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihKU1N0
YWNrOjpBcmd1bWVudENvdW50KSkpOworICAgIG1faml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW0zMihtX3N0YWNrQnl0ZXNOZWVkZWQpLCBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRl
clJlZ2lzdGVyKTsKIH0KIAotTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbigKLSAg
ICBTdGF0ZSYgc3RhdGUsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLCBDQ2FsbEhl
bHBlcnMmIGppdCwKLSAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIE1hY3JvQXNzZW1ibGVyOjpK
dW1wTGlzdCogZXhjZXB0aW9uVGFyZ2V0LAotICAgIEpfSklUT3BlcmF0aW9uX0VTc2lDSSBvcGVy
YXRpb24sIEdQUlJlZyByZXN1bHQsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywKLSAgICBH
UFJSZWcgb2JqZWN0LCBjb25zdCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQorU2xvd1BhdGhDYWxs
S2V5IFNsb3dQYXRoQ2FsbENvbnRleHQ6OmtleVdpdGhUYXJnZXQodm9pZCogY2FsbFRhcmdldCkg
Y29uc3QKIHsKLSAgICBzdG9yZUNvZGVPcmlnaW4oc3RhdGUsIGppdCwgY29kZU9yaWdpbik7Ci0g
ICAgQ2FsbENvbnRleHQgY29udGV4dChzdGF0ZSwgdXNlZFJlZ2lzdGVycywgaml0LCA0LCByZXN1
bHQpOwotICAgIGppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoCi0gICAgICAgIENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbVB0cihzdHViSW5mbyksIG9iamVjdCwgQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tUHRyKHVpZCkpOwotICAgIHJldHVybiBjb250ZXh0Lm1ha2VDYWxsKGJpdHdpc2Vf
Y2FzdDx2b2lkKj4ob3BlcmF0aW9uKSwgZXhjZXB0aW9uVGFyZ2V0KTsKKyAgICByZXR1cm4gU2xv
d1BhdGhDYWxsS2V5KG1fdGh1bmtTYXZlU2V0LCBjYWxsVGFyZ2V0LCBtX2FyZ3VtZW50UmVnaXN0
ZXJzLCBtX29mZnNldCk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRpb24o
Ci0gICAgU3RhdGUmIHN0YXRlLCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywgQ0Nh
bGxIZWxwZXJzJiBqaXQsCi0gICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBNYWNyb0Fzc2VtYmxl
cjo6SnVtcExpc3QqIGV4Y2VwdGlvblRhcmdldCwKLSAgICBKX0pJVE9wZXJhdGlvbl9FU3NpSkkg
b3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sCi0g
ICAgR1BSUmVnIG9iamVjdCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKK1Nsb3dQYXRoQ2FsbCBT
bG93UGF0aENhbGxDb250ZXh0OjptYWtlQ2FsbCh2b2lkKiBjYWxsVGFyZ2V0KQogewotICAgIHN0
b3JlQ29kZU9yaWdpbihzdGF0ZSwgaml0LCBjb2RlT3JpZ2luKTsKLSAgICBDYWxsQ29udGV4dCBj
b250ZXh0KHN0YXRlLCB1c2VkUmVnaXN0ZXJzLCBqaXQsIDQsIHJlc3VsdCk7Ci0gICAgaml0LnNl
dHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZSgKLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tUHRyKHN0dWJJbmZvKSwgb2JqZWN0LAotICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW1QdHIodWlkKSk7Ci0gICAgcmV0dXJuIGNvbnRleHQubWFrZUNhbGwoYml0d2lzZV9jYXN0PHZv
aWQqPihvcGVyYXRpb24pLCBleGNlcHRpb25UYXJnZXQpOworICAgIFNsb3dQYXRoQ2FsbCByZXN1
bHQgPSBTbG93UGF0aENhbGwobV9qaXQuY2FsbCgpLCBrZXlXaXRoVGFyZ2V0KGNhbGxUYXJnZXQp
KTsKKworICAgIG1faml0LmFkZExpbmtUYXNrKAorICAgICAgICBbcmVzdWx0XSAoTGlua0J1ZmZl
ciYgbGlua0J1ZmZlcikgeworICAgICAgICAgICAgVk0mIHZtID0gbGlua0J1ZmZlci52bSgpOwor
CisgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgdGh1bmsgPQorICAgICAgICAgICAg
ICAgIHZtLmZ0bFRodW5rcy0+Z2V0U2xvd1BhdGhDYWxsVGh1bmsodm0sIHJlc3VsdC5rZXkoKSk7
CisKKyAgICAgICAgICAgIGxpbmtCdWZmZXIubGluayhyZXN1bHQuY2FsbCgpLCBDb2RlTG9jYXRp
b25MYWJlbCh0aHVuay5jb2RlKCkpKTsKKyAgICAgICAgfSk7CisgICAgCisgICAgcmV0dXJuIHJl
c3VsdDsKIH0KIAotTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbigKLSAgICBTdGF0
ZSYgc3RhdGUsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLCBDQ2FsbEhlbHBlcnMm
IGppdCwgCi0gICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExp
c3QqIGV4Y2VwdGlvblRhcmdldCwKLSAgICBWX0pJVE9wZXJhdGlvbl9FU3NpSkpJIG9wZXJhdGlv
biwgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBHUFJSZWcgdmFsdWUsCi0gICAgR1BSUmVn
IG9iamVjdCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKK0NhbGxTaXRlSW5kZXggY2FsbFNpdGVJ
bmRleEZvckNvZGVPcmlnaW4oU3RhdGUmIHN0YXRlLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCiB7
Ci0gICAgc3RvcmVDb2RlT3JpZ2luKHN0YXRlLCBqaXQsIGNvZGVPcmlnaW4pOwotICAgIENhbGxD
b250ZXh0IGNvbnRleHQoc3RhdGUsIHVzZWRSZWdpc3RlcnMsIGppdCwgNSwgSW52YWxpZEdQUlJl
Zyk7Ci0gICAgaml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZSgKLSAgICAgICAgQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHN0dWJJbmZvKSwgdmFsdWUsIG9iamVjdCwKLSAgICAgICAg
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHVpZCkpOwotICAgIHJldHVybiBjb250ZXh0Lm1h
a2VDYWxsKGJpdHdpc2VfY2FzdDx2b2lkKj4ob3BlcmF0aW9uKSwgZXhjZXB0aW9uVGFyZ2V0KTsK
KyAgICBpZiAoY29kZU9yaWdpbikKKyAgICAgICAgcmV0dXJuIHN0YXRlLmppdENvZGUtPmNvbW1v
bi5hZGRDb2RlT3JpZ2luKGNvZGVPcmlnaW4pOworICAgIHJldHVybiBDYWxsU2l0ZUluZGV4KCk7
CiB9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMU2xvd1BhdGhDYWxsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExTbG93UGF0aENhbGwuaAkocmV2aXNpb24gMTkwNzQ5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTbG93UGF0aENhbGwuaAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC01NSwyMCArNTUsNzEgQEAgcHJpdmF0ZToKICAgICBTbG93UGF0aENhbGxLZXkgbV9rZXk7CiB9
OwogCi12b2lkIHN0b3JlQ29kZU9yaWdpbihTdGF0ZSYsIENDYWxsSGVscGVycyYsIENvZGVPcmln
aW4pOworLy8gVGhpcyB3aWxsIGJlIGFuIFJBSUkgdGhpbmd5IHRoYXQgd2lsbCBzZXQgdXAgdGhl
IG5lY2Vzc2FyeSBzdGFjayBzaXplcyBhbmQgb2Zmc2V0cyBhbmQgc3VjaC4KK2NsYXNzIFNsb3dQ
YXRoQ2FsbENvbnRleHQgeworcHVibGljOgorICAgIFNsb3dQYXRoQ2FsbENvbnRleHQoUmVnaXN0
ZXJTZXQgdXNlZFJlZ2lzdGVycywgQ0NhbGxIZWxwZXJzJiwgdW5zaWduZWQgbnVtQXJncywgR1BS
UmVnIHJldHVyblJlZ2lzdGVyKTsKKyAgICB+U2xvd1BhdGhDYWxsQ29udGV4dCgpOworCisgICAg
Ly8gTk9URTogVGhlIGNhbGwgdGhhdCB0aGlzIHJldHVybnMgaXMgYWxyZWFkeSBnb2luZyB0byBi
ZSBsaW5rZWQgYnkgdGhlIEpJVCB1c2luZyBhZGRMaW5rVGFzaygpLAorICAgIC8vIHNvIHRoZXJl
IGlzIG5vIG5lZWQgZm9yIHlvdSB0byBsaW5rIGl0IHlvdXJzZWxmLgorICAgIFNsb3dQYXRoQ2Fs
bCBtYWtlQ2FsbCh2b2lkKiBjYWxsVGFyZ2V0KTsKKworcHJpdmF0ZToKKyAgICBTbG93UGF0aENh
bGxLZXkga2V5V2l0aFRhcmdldCh2b2lkKiBjYWxsVGFyZ2V0KSBjb25zdDsKKyAgICAKKyAgICBS
ZWdpc3RlclNldCBtX2FyZ3VtZW50UmVnaXN0ZXJzOworICAgIFJlZ2lzdGVyU2V0IG1fY2FsbGlu
Z0NvbnZlbnRpb25SZWdpc3RlcnM7CisgICAgQ0NhbGxIZWxwZXJzJiBtX2ppdDsKKyAgICB1bnNp
Z25lZCBtX251bUFyZ3M7CisgICAgR1BSUmVnIG1fcmV0dXJuUmVnaXN0ZXI7CisgICAgc2l6ZV90
IG1fb2Zmc2V0VG9TYXZpbmdBcmVhOworICAgIHNpemVfdCBtX3N0YWNrQnl0ZXNOZWVkZWQ7Cisg
ICAgUmVnaXN0ZXJTZXQgbV90aHVua1NhdmVTZXQ7CisgICAgcHRyZGlmZl90IG1fb2Zmc2V0Owor
fTsKKwordGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRUeXBlcz4KK1Nsb3dQYXRoQ2FsbCBj
YWxsT3BlcmF0aW9uKAorICAgIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLCBDQ2Fs
bEhlbHBlcnMmIGppdCwgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCogZXhjZXB0aW9uVGFyZ2V0LAor
ICAgIEZ1bmN0aW9uUHRyIGZ1bmN0aW9uLCBHUFJSZWcgcmVzdWx0R1BSLCBBcmd1bWVudFR5cGVz
Li4uIGFyZ3VtZW50cykKK3sKKyAgICBTbG93UGF0aENhbGwgY2FsbDsKKyAgICB7CisgICAgICAg
IFNsb3dQYXRoQ2FsbENvbnRleHQgY29udGV4dCh1c2VkUmVnaXN0ZXJzLCBqaXQsIHNpemVvZi4u
LihBcmd1bWVudFR5cGVzKSArIDEsIHJlc3VsdEdQUik7CisgICAgICAgIGppdC5zZXR1cEFyZ3Vt
ZW50c1dpdGhFeGVjU3RhdGUoYXJndW1lbnRzLi4uKTsKKyAgICAgICAgY2FsbCA9IGNvbnRleHQu
bWFrZUNhbGwoZnVuY3Rpb24udmFsdWUoKSk7CisgICAgfQorICAgIGlmIChleGNlcHRpb25UYXJn
ZXQpCisgICAgICAgIGV4Y2VwdGlvblRhcmdldC0+YXBwZW5kKGppdC5lbWl0RXhjZXB0aW9uQ2hl
Y2soKSk7CisgICAgcmV0dXJuIGNhbGw7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3Vt
ZW50VHlwZXM+CitTbG93UGF0aENhbGwgY2FsbE9wZXJhdGlvbigKKyAgICBjb25zdCBSZWdpc3Rl
clNldCYgdXNlZFJlZ2lzdGVycywgQ0NhbGxIZWxwZXJzJiBqaXQsIENhbGxTaXRlSW5kZXggY2Fs
bFNpdGVJbmRleCwKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0KiBleGNlcHRpb25UYXJnZXQs
IEZ1bmN0aW9uUHRyIGZ1bmN0aW9uLCBHUFJSZWcgcmVzdWx0R1BSLAorICAgIEFyZ3VtZW50VHlw
ZXMuLi4gYXJndW1lbnRzKQoreworICAgIGlmIChjYWxsU2l0ZUluZGV4KSB7CisgICAgICAgIGpp
dC5zdG9yZTMyKAorICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoY2FsbFNp
dGVJbmRleC5iaXRzKCkpLAorICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjp0YWdGb3IoSlNTdGFj
azo6QXJndW1lbnRDb3VudCkpOworICAgIH0KKyAgICByZXR1cm4gY2FsbE9wZXJhdGlvbih1c2Vk
UmVnaXN0ZXJzLCBqaXQsIGV4Y2VwdGlvblRhcmdldCwgZnVuY3Rpb24sIHJlc3VsdEdQUiwgYXJn
dW1lbnRzLi4uKTsKK30KKworQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4Rm9yQ29kZU9yaWdp
bihTdGF0ZSYsIENvZGVPcmlnaW4pOwogCi1NYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3BlcmF0
aW9uKAotICAgIFN0YXRlJiwgY29uc3QgUmVnaXN0ZXJTZXQmLCBDQ2FsbEhlbHBlcnMmLCBDb2Rl
T3JpZ2luLCBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0KiwKLSAgICBKX0pJVE9wZXJhdGlvbl9FU3Np
Q0ksIEdQUlJlZywgU3RydWN0dXJlU3R1YkluZm8qLCBHUFJSZWcsCi0gICAgY29uc3QgVW5pcXVl
ZFN0cmluZ0ltcGwqIHVpZCk7Ci1NYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKAot
ICAgIFN0YXRlJiwgY29uc3QgUmVnaXN0ZXJTZXQmLCBDQ2FsbEhlbHBlcnMmLCBDb2RlT3JpZ2lu
LCBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0KiwKLSAgICBKX0pJVE9wZXJhdGlvbl9FU3NpSkksIEdQ
UlJlZyByZXN1bHQsIFN0cnVjdHVyZVN0dWJJbmZvKiwgR1BSUmVnIG9iamVjdCwKLSAgICBVbmlx
dWVkU3RyaW5nSW1wbCogdWlkKTsKLU1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRpb24o
Ci0gICAgU3RhdGUmLCBjb25zdCBSZWdpc3RlclNldCYsIENDYWxsSGVscGVycyYsIENvZGVPcmln
aW4sIENDYWxsSGVscGVyczo6SnVtcExpc3QqLAotICAgIFZfSklUT3BlcmF0aW9uX0VTc2lKSkks
IFN0cnVjdHVyZVN0dWJJbmZvKiwgR1BSUmVnIHZhbHVlLCBHUFJSZWcgb2JqZWN0LAotICAgIFVu
aXF1ZWRTdHJpbmdJbXBsKiB1aWQpOwordGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRUeXBl
cz4KK1Nsb3dQYXRoQ2FsbCBjYWxsT3BlcmF0aW9uKAorICAgIFN0YXRlJiBzdGF0ZSwgY29uc3Qg
UmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsIENDYWxsSGVscGVycyYgaml0LCBDb2RlT3JpZ2lu
IGNvZGVPcmlnaW4sCisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCogZXhjZXB0aW9uVGFyZ2V0
LCBGdW5jdGlvblB0ciBmdW5jdGlvbiwgR1BSUmVnIHJlc3VsdCwgQXJndW1lbnRUeXBlcy4uLiBh
cmd1bWVudHMpCit7CisgICAgcmV0dXJuIGNhbGxPcGVyYXRpb24oCisgICAgICAgIHVzZWRSZWdp
c3RlcnMsIGppdCwgY2FsbFNpdGVJbmRleEZvckNvZGVPcmlnaW4oc3RhdGUsIGNvZGVPcmlnaW4p
LCBleGNlcHRpb25UYXJnZXQsIGZ1bmN0aW9uLAorICAgICAgICByZXN1bHQsIGFyZ3VtZW50cy4u
Lik7Cit9CiAKIH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExTdGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMU3RhdGUuaAkocmV2aXNpb24gMTkwNzQ5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExTdGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03OCw2ICs3OCw3IEBAIHB1
YmxpYzoKICAgICBTZWdtZW50ZWRWZWN0b3I8R2V0QnlJZERlc2NyaXB0b3I+IGdldEJ5SWRzOwog
ICAgIFNlZ21lbnRlZFZlY3RvcjxQdXRCeUlkRGVzY3JpcHRvcj4gcHV0QnlJZHM7CiAgICAgU2Vn
bWVudGVkVmVjdG9yPENoZWNrSW5EZXNjcmlwdG9yPiBjaGVja0luczsKKyAgICBTZWdtZW50ZWRW
ZWN0b3I8TGF6eVNsb3dQYXRoRGVzY3JpcHRvcj4gbGF6eVNsb3dQYXRoczsKICAgICBWZWN0b3I8
SlNDYWxsPiBqc0NhbGxzOwogICAgIFZlY3RvcjxKU0NhbGxWYXJhcmdzPiBqc0NhbGxWYXJhcmdz
ZXM7CiAgICAgVmVjdG9yPEpTVGFpbENhbGw+IGpzVGFpbENhbGxzOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExUaHVua3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMVGh1bmtzLmNwcAkocmV2aXNpb24gMTkwNzQ5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExUaHVua3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2
ICszMSw3IEBACiAjaW5jbHVkZSAiQXNzZW1ibHlIZWxwZXJzLmgiCiAjaW5jbHVkZSAiRlBSSW5m
by5oIgogI2luY2x1ZGUgIkZUTE9TUkV4aXRDb21waWxlci5oIgorI2luY2x1ZGUgIkZUTE9wZXJh
dGlvbnMuaCIKICNpbmNsdWRlICJGVExTYXZlUmVzdG9yZS5oIgogI2luY2x1ZGUgIkdQUkluZm8u
aCIKICNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCkBAIC0zOSwxMSArNDAsMTIgQEAgbmFtZXNwYWNl
IEpTQyB7IG5hbWVzcGFjZSBGVEwgewogCiB1c2luZyBuYW1lc3BhY2UgREZHOwogCi1NYWNyb0Fz
c2VtYmxlckNvZGVSZWYgb3NyRXhpdEdlbmVyYXRpb25UaHVua0dlbmVyYXRvcihWTSogdm0pCitz
dGF0aWMgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIGdlbmVyaWNHZW5lcmF0aW9uVGh1bmtHZW5lcmF0
b3IoCisgICAgVk0qIHZtLCBGdW5jdGlvblB0ciBnZW5lcmF0aW9uRnVuY3Rpb24sIGNvbnN0IGNo
YXIqIG5hbWUsIHVuc2lnbmVkIGV4dHJhUG9wc1RvUmVzdG9yZSkKIHsKICAgICBBc3NlbWJseUhl
bHBlcnMgaml0KHZtLCAwKTsKICAgICAKLSAgICAvLyBOb3RlIHRoYXQgdGhlICJyZXR1cm4gYWRk
cmVzcyIgd2lsbCBiZSB0aGUgT1NSIGV4aXQgSUQuCisgICAgLy8gTm90ZSB0aGF0IHRoZSAicmV0
dXJuIGFkZHJlc3MiIHdpbGwgYmUgdGhlIElEIHRoYXQgd2UgcGFzcyB0byB0aGUgZ2VuZXJhdGlv
biBmdW5jdGlvbi4KICAgICAKICAgICBwdHJkaWZmX3Qgc3RhY2tNaXNhbGlnbm1lbnQgPSBNYWNy
b0Fzc2VtYmxlcjo6cHVzaFRvU2F2ZUJ5dGVPZmZzZXQoKTsKICAgICAKQEAgLTkwLDExICs5Miwx
NCBAQCBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgb3NyRXhpdEdlbmVyYXRpb25UCiAgICAgd2hpbGUg
KG51bWJlck9mUmVxdWlyZWRQb3BzLS0pCiAgICAgICAgIGppdC5wb3BUb1Jlc3RvcmUoR1BSSW5m
bzo6cmVnVDEpOwogICAgIGppdC5wb3BUb1Jlc3RvcmUoTWFjcm9Bc3NlbWJsZXI6OmZyYW1lUG9p
bnRlclJlZ2lzdGVyKTsKLSAgICAKLSAgICAvLyBBdCB0aGlzIHBvaW50IHdlJ3JlIHNpdHRpbmcg
b24gdGhlIHJldHVybiBhZGRyZXNzIC0gc28gaWYgd2UgZGlkIGEganVtcCByaWdodCBub3csIHRo
ZQotICAgIC8vIHRhaWwtY2FsbGVlIHdvdWxkIGJlIGhhcHB5LiBJbnN0ZWFkIHdlJ2xsIHN0YXNo
IHRoZSBjYWxsZWUgaW4gdGhlIHJldHVybiBhZGRyZXNzIGFuZCB0aGVuCi0gICAgLy8gcmVzdG9y
ZSBhbGwgcmVnaXN0ZXJzLgotICAgIAorCisgICAgLy8gV2hlbiB3ZSBjYW1lIGluIGhlcmUsIHRo
ZXJlIHdhcyBhbiBhZGRpdGlvbmFsIHRoaW5nIHB1c2hlZCB0byB0aGUgc3RhY2suIFNvbWUgY2xp
ZW50cyB3YW50IGl0CisgICAgLy8gcG9wcGVkIGJlZm9yZSBwcm9jZWVkaW5nLgorICAgIHdoaWxl
IChleHRyYVBvcHNUb1Jlc3RvcmUtLSkKKyAgICAgICAgaml0LnBvcFRvUmVzdG9yZShHUFJJbmZv
OjpyZWdUMSk7CisKKyAgICAvLyBQdXQgdGhlIHJldHVybiBhZGRyZXNzIHdoZXJldmVyIHRoZSBy
ZXR1cm4gaW5zdHJ1Y3Rpb24gd2FudHMgaXQuIE9uIGFsbCBwbGF0Zm9ybXMsIHRoaXMKKyAgICAv
LyBlbnN1cmVzIHRoYXQgdGhlIHJldHVybiBhZGRyZXNzIGlzIG91dCBvZiB0aGUgd2F5IG9mIHJl
Z2lzdGVyIHJlc3RvcmF0aW9uLgogICAgIGppdC5yZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJl
dHVybihHUFJJbmZvOjpyZWdUMCk7CiAKICAgICByZXN0b3JlQWxsUmVnaXN0ZXJzKGppdCwgYnVm
ZmVyKTsKQEAgLTEwMiw4ICsxMDcsMjIgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG9zckV4aXRH
ZW5lcmF0aW9uVAogICAgIGppdC5yZXQoKTsKICAgICAKICAgICBMaW5rQnVmZmVyIHBhdGNoQnVm
ZmVyKCp2bSwgaml0LCBHTE9CQUxfVEhVTktfSUQpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoZnVu
Y3Rpb25DYWxsLCBjb21waWxlRlRMT1NSRXhpdCk7Ci0gICAgcmV0dXJuIEZJTkFMSVpFX0NPREUo
cGF0Y2hCdWZmZXIsICgiRlRMIE9TUiBleGl0IGdlbmVyYXRpb24gdGh1bmsiKSk7CisgICAgcGF0
Y2hCdWZmZXIubGluayhmdW5jdGlvbkNhbGwsIGdlbmVyYXRpb25GdW5jdGlvbik7CisgICAgcmV0
dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZmZXIsICgiJXMiLCBuYW1lKSk7Cit9CisKK01hY3Jv
QXNzZW1ibGVyQ29kZVJlZiBvc3JFeGl0R2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKFZNKiB2bSkK
K3sKKyAgICB1bnNpZ25lZCBleHRyYVBvcHNUb1Jlc3RvcmUgPSAwOworICAgIHJldHVybiBnZW5l
cmljR2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKAorICAgICAgICB2bSwgY29tcGlsZUZUTE9TUkV4
aXQsICJGVEwgT1NSIGV4aXQgZ2VuZXJhdGlvbiB0aHVuayIsIGV4dHJhUG9wc1RvUmVzdG9yZSk7
Cit9CisKK01hY3JvQXNzZW1ibGVyQ29kZVJlZiBsYXp5U2xvd1BhdGhHZW5lcmF0aW9uVGh1bmtH
ZW5lcmF0b3IoVk0qIHZtKQoreworICAgIHVuc2lnbmVkIGV4dHJhUG9wc1RvUmVzdG9yZSA9IDE7
CisgICAgcmV0dXJuIGdlbmVyaWNHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3IoCisgICAgICAgIHZt
LCBjb21waWxlRlRMTGF6eVNsb3dQYXRoLCAiRlRMIGxhenkgc2xvdyBwYXRoIGdlbmVyYXRpb24g
dGh1bmsiLCBleHRyYVBvcHNUb1Jlc3RvcmUpOwogfQogCiBzdGF0aWMgdm9pZCByZWdpc3RlckNs
b2JiZXJDaGVjayhBc3NlbWJseUhlbHBlcnMmIGppdCwgUmVnaXN0ZXJTZXQgZG9udENsb2JiZXIp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFRodW5rcy5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVGh1bmtzLmgJKHJldmlzaW9uIDE5MDc0
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVGh1bmtzLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTQwLDYgKzQwLDcgQEAgY2xhc3MgVk07CiBuYW1lc3BhY2UgRlRMIHsKIAogTWFjcm9B
c3NlbWJsZXJDb2RlUmVmIG9zckV4aXRHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3IoVk0qKTsKK01h
Y3JvQXNzZW1ibGVyQ29kZVJlZiBsYXp5U2xvd1BhdGhHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3Io
Vk0qKTsKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBzbG93UGF0aENhbGxUaHVua0dlbmVyYXRvcihW
TSYsIGNvbnN0IFNsb3dQYXRoQ2FsbEtleSYpOwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlUeXBl
QXJndW1lbnQ+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZy
YW1lLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0Nh
bGxGcmFtZS5oCShyZXZpc2lvbiAxOTA3NDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50
ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAvKgog
ICogIENvcHlyaWdodCAoQykgMTk5OS0yMDAxIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcp
CiAgKiAgQ29weXJpZ2h0IChDKSAyMDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCi0gKiAg
Q29weXJpZ2h0IChDKSAyMDAzLCAyMDA3LCAyMDA4LCAyMDExLCAyMDEzLCAyMDE0IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDcsIDIw
MDgsIDIwMTEsIDIwMTMtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgog
ICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFy
eSBHZW5lcmFsIFB1YmxpYwpAQCAtMzksNiArMzksMTEgQEAgbmFtZXNwYWNlIEpTQyAgewogICAg
IGNsYXNzIEpTU2NvcGU7CiAKICAgICBzdHJ1Y3QgQ2FsbFNpdGVJbmRleCB7CisgICAgICAgIENh
bGxTaXRlSW5kZXgoKQorICAgICAgICAgICAgOiBtX2JpdHMoVUlOVF9NQVgpCisgICAgICAgIHsK
KyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgZXhwbGljaXQgQ2FsbFNpdGVJbmRleCh1aW50
MzJfdCBiaXRzKQogICAgICAgICAgICAgOiBtX2JpdHMoYml0cykKICAgICAgICAgeyB9CkBAIC00
Nyw2ICs1Miw5IEBAIG5hbWVzcGFjZSBKU0MgIHsKICAgICAgICAgICAgIDogbV9iaXRzKGJpdHdp
c2VfY2FzdDx1aW50MzJfdD4oaW5zdHJ1Y3Rpb24pKQogICAgICAgICB7IH0KICNlbmRpZgorCisg
ICAgICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiBtX2JpdHMgIT0g
VUlOVF9NQVg7IH0KKyAgICAgICAgCiAgICAgICAgIGlubGluZSB1aW50MzJfdCBiaXRzKCkgY29u
c3QgeyByZXR1cm4gbV9iaXRzOyB9CiAKICAgICBwcml2YXRlOgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAxOTA3NDkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMDMxLDcgKzEwMzEsNyBAQCBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3
T2JqZWN0CiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcih2bSwgZXhlYyk7Ci0gICAgCisKICAgICByZXR1cm4gY29uc3RydWN0RW1w
dHlPYmplY3QoZXhlYywgc3RydWN0dXJlKTsKIH0KIApJbmRleDogU291cmNlL1dURi93dGYvUGFy
YWxsZWxIZWxwZXJQb29sLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9QYXJhbGxl
bEhlbHBlclBvb2wuY3BwCShyZXZpc2lvbiAxOTA3NDkpCisrKyBTb3VyY2UvV1RGL3d0Zi9QYXJh
bGxlbEhlbHBlclBvb2wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Myw3ICs1Myw3IEBAIFBhcmFs
bGVsSGVscGVyQ2xpZW50Ojp+UGFyYWxsZWxIZWxwZXJDbGkKICAgICB9CiB9CiAKLXZvaWQgUGFy
YWxsZWxIZWxwZXJDbGllbnQ6OnNldFRhc2soUmVmUHRyPFNoYXJlZFRhc2s+IHRhc2spCit2b2lk
IFBhcmFsbGVsSGVscGVyQ2xpZW50OjpzZXRUYXNrKFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoKT4+
IHRhc2spCiB7CiAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9wb29sLT5tX2xvY2spOwogICAgIFJF
TEVBU0VfQVNTRVJUKCFtX3Rhc2spOwpAQCAtNjksNyArNjksNyBAQCB2b2lkIFBhcmFsbGVsSGVs
cGVyQ2xpZW50OjpmaW5pc2goKQogCiB2b2lkIFBhcmFsbGVsSGVscGVyQ2xpZW50Ojpkb1NvbWVI
ZWxwaW5nKCkKIHsKLSAgICBSZWZQdHI8U2hhcmVkVGFzaz4gdGFzazsKKyAgICBSZWZQdHI8U2hh
cmVkVGFzazx2b2lkKCk+PiB0YXNrOwogICAgIHsKICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIo
bV9wb29sLT5tX2xvY2spOwogICAgICAgICB0YXNrID0gY2xhaW1UYXNrKGxvY2tlcik7CkBAIC04
MCw3ICs4MCw3IEBAIHZvaWQgUGFyYWxsZWxIZWxwZXJDbGllbnQ6OmRvU29tZUhlbHBpbmcKICAg
ICBydW5UYXNrKHRhc2spOwogfQogCi12b2lkIFBhcmFsbGVsSGVscGVyQ2xpZW50OjpydW5UYXNr
SW5QYXJhbGxlbChSZWZQdHI8U2hhcmVkVGFzaz4gdGFzaykKK3ZvaWQgUGFyYWxsZWxIZWxwZXJD
bGllbnQ6OnJ1blRhc2tJblBhcmFsbGVsKFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoKT4+IHRhc2sp
CiB7CiAgICAgc2V0VGFzayh0YXNrKTsKICAgICBkb1NvbWVIZWxwaW5nKCk7CkBAIC05NCw3ICs5
NCw3IEBAIHZvaWQgUGFyYWxsZWxIZWxwZXJDbGllbnQ6OmZpbmlzaChjb25zdCAKICAgICAgICAg
bV9wb29sLT5tX3dvcmtDb21wbGV0ZUNvbmRpdGlvbi53YWl0KG1fcG9vbC0+bV9sb2NrKTsKIH0K
IAotUmVmUHRyPFNoYXJlZFRhc2s+IFBhcmFsbGVsSGVscGVyQ2xpZW50OjpjbGFpbVRhc2soY29u
c3QgTG9ja0hvbGRlciYpCitSZWZQdHI8U2hhcmVkVGFzazx2b2lkKCk+PiBQYXJhbGxlbEhlbHBl
ckNsaWVudDo6Y2xhaW1UYXNrKGNvbnN0IExvY2tIb2xkZXImKQogewogICAgIGlmICghbV90YXNr
KQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTEwMyw3ICsxMDMsNyBAQCBSZWZQdHI8U2hh
cmVkVGFzaz4gUGFyYWxsZWxIZWxwZXJDbGllbnQ6CiAgICAgcmV0dXJuIG1fdGFzazsKIH0KIAot
dm9pZCBQYXJhbGxlbEhlbHBlckNsaWVudDo6cnVuVGFzayhSZWZQdHI8U2hhcmVkVGFzaz4gdGFz
aykKK3ZvaWQgUGFyYWxsZWxIZWxwZXJDbGllbnQ6OnJ1blRhc2soUmVmUHRyPFNoYXJlZFRhc2s8
dm9pZCgpPj4gdGFzaykKIHsKICAgICBSRUxFQVNFX0FTU0VSVChtX251bUFjdGl2ZSk7CiAgICAg
UkVMRUFTRV9BU1NFUlQodGFzayk7CkBAIC0xNTMsNyArMTUzLDcgQEAgdm9pZCBQYXJhbGxlbEhl
bHBlclBvb2w6OmVuc3VyZVRocmVhZHModQogdm9pZCBQYXJhbGxlbEhlbHBlclBvb2w6OmRvU29t
ZUhlbHBpbmcoKQogewogICAgIFBhcmFsbGVsSGVscGVyQ2xpZW50KiBjbGllbnQ7Ci0gICAgUmVm
UHRyPFNoYXJlZFRhc2s+IHRhc2s7CisgICAgUmVmUHRyPFNoYXJlZFRhc2s8dm9pZCgpPj4gdGFz
azsKICAgICB7CiAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7CiAgICAgICAgIGNs
aWVudCA9IGdldENsaWVudFdpdGhUYXNrKGxvY2tlcik7CkBAIC0xODIsNyArMTgyLDcgQEAgdm9p
ZCBQYXJhbGxlbEhlbHBlclBvb2w6OmhlbHBlclRocmVhZEJvZAogewogICAgIGZvciAoOzspIHsK
ICAgICAgICAgUGFyYWxsZWxIZWxwZXJDbGllbnQqIGNsaWVudDsKLSAgICAgICAgUmVmUHRyPFNo
YXJlZFRhc2s+IHRhc2s7CisgICAgICAgIFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoKT4+IHRhc2s7
CiAKICAgICAgICAgewogICAgICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9sb2NrKTsKSW5k
ZXg6IFNvdXJjZS9XVEYvd3RmL1BhcmFsbGVsSGVscGVyUG9vbC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XVEYvd3RmL1BhcmFsbGVsSGVscGVyUG9vbC5oCShyZXZpc2lvbiAxOTA3NDkpCisrKyBT
b3VyY2UvV1RGL3d0Zi9QYXJhbGxlbEhlbHBlclBvb2wuaAkod29ya2luZyBjb3B5KQpAQCAtMTMw
LDEyICsxMzAsMTIgQEAgcHVibGljOgogICAgIFdURl9FWFBPUlRfUFJJVkFURSBQYXJhbGxlbEhl
bHBlckNsaWVudChSZWZQdHI8UGFyYWxsZWxIZWxwZXJQb29sPik7CiAgICAgV1RGX0VYUE9SVF9Q
UklWQVRFIH5QYXJhbGxlbEhlbHBlckNsaWVudCgpOwogCi0gICAgV1RGX0VYUE9SVF9QUklWQVRF
IHZvaWQgc2V0VGFzayhSZWZQdHI8U2hhcmVkVGFzaz4pOworICAgIFdURl9FWFBPUlRfUFJJVkFU
RSB2b2lkIHNldFRhc2soUmVmUHRyPFNoYXJlZFRhc2s8dm9pZCgpPj4pOwogCiAgICAgdGVtcGxh
dGU8dHlwZW5hbWUgRnVuY3Rvcj4KICAgICB2b2lkIHNldEZ1bmN0aW9uKGNvbnN0IEZ1bmN0b3Im
IGZ1bmN0b3IpCiAgICAgewotICAgICAgICBzZXRUYXNrKGNyZWF0ZVNoYXJlZFRhc2soZnVuY3Rv
cikpOworICAgICAgICBzZXRUYXNrKGNyZWF0ZVNoYXJlZFRhc2s8dm9pZCgpPihmdW5jdG9yKSk7
CiAgICAgfQogICAgIAogICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGZpbmlzaCgpOwpAQCAt
MTQ2LDcgKzE0Niw3IEBAIHB1YmxpYzoKICAgICAvLyBjbGllbnQtPnNldFRhc2sodGFzayk7CiAg
ICAgLy8gY2xpZW50LT5kb1NvbWVIZWxwaW5nKCk7CiAgICAgLy8gY2xpZW50LT5maW5pc2goKTsK
LSAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBydW5UYXNrSW5QYXJhbGxlbChSZWZQdHI8U2hh
cmVkVGFzaz4pOworICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIHJ1blRhc2tJblBhcmFsbGVs
KFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoKT4+KTsKIAogICAgIC8vIEVxdWl2YWxlbnQgdG86CiAg
ICAgLy8gY2xpZW50LT5zZXRGdW5jdGlvbihmdW5jdG9yKTsKQEAgLTE1NSw3ICsxNTUsNyBAQCBw
dWJsaWM6CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KICAgICB2b2lkIHJ1bkZ1bmN0
aW9uSW5QYXJhbGxlbChjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQogICAgIHsKLSAgICAgICAgcnVu
VGFza0luUGFyYWxsZWwoY3JlYXRlU2hhcmVkVGFzayhmdW5jdG9yKSk7CisgICAgICAgIHJ1blRh
c2tJblBhcmFsbGVsKGNyZWF0ZVNoYXJlZFRhc2s8dm9pZCgpPihmdW5jdG9yKSk7CiAgICAgfQog
CiAgICAgUGFyYWxsZWxIZWxwZXJQb29sJiBwb29sKCkgeyByZXR1cm4gKm1fcG9vbDsgfQpAQCAt
MTY1LDExICsxNjUsMTEgQEAgcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgUGFyYWxsZWxIZWxw
ZXJQb29sOwogCiAgICAgdm9pZCBmaW5pc2goY29uc3QgTG9ja0hvbGRlciYpOwotICAgIFJlZlB0
cjxTaGFyZWRUYXNrPiBjbGFpbVRhc2soY29uc3QgTG9ja0hvbGRlciYpOwotICAgIHZvaWQgcnVu
VGFzayhSZWZQdHI8U2hhcmVkVGFzaz4pOworICAgIFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoKT4+
IGNsYWltVGFzayhjb25zdCBMb2NrSG9sZGVyJik7CisgICAgdm9pZCBydW5UYXNrKFJlZlB0cjxT
aGFyZWRUYXNrPHZvaWQoKT4+KTsKICAgICAKICAgICBSZWZQdHI8UGFyYWxsZWxIZWxwZXJQb29s
PiBtX3Bvb2w7Ci0gICAgUmVmUHRyPFNoYXJlZFRhc2s+IG1fdGFzazsKKyAgICBSZWZQdHI8U2hh
cmVkVGFzazx2b2lkKCk+PiBtX3Rhc2s7CiAgICAgdW5zaWduZWQgbV9udW1BY3RpdmUgeyAwIH07
CiB9OwogCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9TaGFyZWRUYXNrLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dURi93dGYvU2hhcmVkVGFzay5oCShyZXZpc2lvbiAxOTA3NDkpCisrKyBTb3VyY2Uv
V1RGL3d0Zi9TaGFyZWRUYXNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDEzICs0MSwxMyBAQCBu
YW1lc3BhY2UgV1RGIHsKIC8vCiAvLyBIZXJlJ3MgYW4gZXhhbXBsZSBvZiBob3cgU2hhcmVkVGFz
ayBjYW4gYmUgYmV0dGVyIHRoYW4gc3RkOjpmdW5jdGlvbi4gSWYgeW91IGRvOgogLy8KLS8vIHN0
ZDo6ZnVuY3Rpb24gYSA9IGI7CisvLyBzdGQ6OmZ1bmN0aW9uPGludChkb3VibGUpPiBhID0gYjsK
IC8vCiAvLyBUaGVuICJhIiB3aWxsIGdldCBpdHMgb3duIGNvcHkgb2YgYWxsIGNhcHR1cmVkIGJ5
LXZhbHVlIHZhcmlhYmxlcy4gVGhlIGFjdCBvZiBjb3B5aW5nIG1heQogLy8gcmVxdWlyZSBjYWxs
cyB0byBzeXN0ZW0gbWFsbG9jLCBhbmQgaXQgbWF5IGJlIGxpbmVhciB0aW1lIGluIHRoZSB0b3Rh
bCBzaXplIG9mIGNhcHR1cmVkCiAvLyB2YXJpYWJsZXMuIE9uIHRoZSBvdGhlciBoYW5kLCBpZiB5
b3UgZG86CiAvLwotLy8gUmVmUHRyPFNoYXJlZFRhc2s+IGEgPSBiOworLy8gUmVmUHRyPFNoYXJl
ZFRhc2s8aW50KGRvdWJsZSk+IGEgPSBiOwogLy8KIC8vIFRoZW4gImEiIHdpbGwgcG9pbnQgdG8g
dGhlIHNhbWUgdGFzayBhcyBiLCBhbmQgdGhlIG9ubHkgd29yayBpbnZvbHZlZCBpcyB0aGUgQ0FT
IHRvIGluY3JlYXNlIHRoZQogLy8gcmVmZXJlbmNlIGNvdW50LgpAQCAtNTgsMTggKzU4LDIxIEBA
IG5hbWVzcGFjZSBXVEYgewogLy8gY3JlYXRlU2hhcmVkVGFzaygpLCBiZWxvdykuIEJ1dCBTaGFy
ZWRUYXNrIGFsc28gYWxsb3dzIHlvdSB0byBjcmVhdGUgeW91ciBvd24gc3ViY2xhc3MgYW5kIHB1
dAogLy8gc3RhdGUgaW4gbWVtYmVyIGZpZWxkcy4gVGhpcyBjYW4gYmUgbW9yZSBuYXR1cmFsIGlm
IHlvdSB3YW50IGZpbmUtZ3JhaW5lZCBjb250cm9sIG92ZXIgd2hhdAogLy8gc3RhdGUgaXMgc2hh
cmVkIGJldHdlZW4gaW5zdGFuY2VzIG9mIHRoZSB0YXNrLgotY2xhc3MgU2hhcmVkVGFzayA6IHB1
YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxTaGFyZWRUYXNrPiB7Cit0ZW1wbGF0ZTx0eXBlbmFt
ZSBGdW5jdGlvblR5cGU+IGNsYXNzIFNoYXJlZFRhc2s7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBSZXN1
bHRUeXBlLCB0eXBlbmFtZS4uLiBBcmd1bWVudFR5cGVzPgorY2xhc3MgU2hhcmVkVGFzazxSZXN1
bHRUeXBlKEFyZ3VtZW50VHlwZXMuLi4pPiA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxT
aGFyZWRUYXNrPFJlc3VsdFR5cGUoQXJndW1lbnRUeXBlcy4uLik+PiB7CiBwdWJsaWM6CiAgICAg
U2hhcmVkVGFzaygpIHsgfQogICAgIHZpcnR1YWwgflNoYXJlZFRhc2soKSB7IH0KIAotICAgIHZp
cnR1YWwgdm9pZCBydW4oKSA9IDA7CisgICAgdmlydHVhbCBSZXN1bHRUeXBlIHJ1bihBcmd1bWVu
dFR5cGVzLi4uKSA9IDA7CiB9OwogCiAvLyBUaGlzIGlzIGEgdXRpbGl0eSBjbGFzcyB0aGF0IGFs
bG93cyB5b3UgdG8gY3JlYXRlIGEgU2hhcmVkVGFzayBzdWJjbGFzcyB1c2luZyBhIGxhbWJkYS4g
VXN1YWxseSwKIC8vIHlvdSBkb24ndCB3YW50IHRvIHVzZSB0aGlzIGNsYXNzIGRpcmVjdGx5LiBV
c2UgY3JlYXRlU2hhcmVkVGFzaygpIGluc3RlYWQuCi10ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9y
PgotY2xhc3MgU2hhcmVkVGFza0Z1bmN0b3IgOiBwdWJsaWMgU2hhcmVkVGFzayB7Cit0ZW1wbGF0
ZTx0eXBlbmFtZSBGdW5jdGlvblR5cGUsIHR5cGVuYW1lIEZ1bmN0b3I+IGNsYXNzIFNoYXJlZFRh
c2tGdW5jdG9yOwordGVtcGxhdGU8dHlwZW5hbWUgUmVzdWx0VHlwZSwgdHlwZW5hbWUuLi4gQXJn
dW1lbnRUeXBlcywgdHlwZW5hbWUgRnVuY3Rvcj4KK2NsYXNzIFNoYXJlZFRhc2tGdW5jdG9yPFJl
c3VsdFR5cGUoQXJndW1lbnRUeXBlcy4uLiksIEZ1bmN0b3I+IDogcHVibGljIFNoYXJlZFRhc2s8
UmVzdWx0VHlwZShBcmd1bWVudFR5cGVzLi4uKT4gewogcHVibGljOgogICAgIFNoYXJlZFRhc2tG
dW5jdG9yKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCiAgICAgICAgIDogbV9mdW5jdG9yKGZ1bmN0
b3IpCkBAIC03Nyw5ICs4MCw5IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAgdm9p
ZCBydW4oKSBvdmVycmlkZQorICAgIFJlc3VsdFR5cGUgcnVuKEFyZ3VtZW50VHlwZXMuLi4gYXJn
dW1lbnRzKSBvdmVycmlkZQogICAgIHsKLSAgICAgICAgbV9mdW5jdG9yKCk7CisgICAgICAgIHJl
dHVybiBtX2Z1bmN0b3IoYXJndW1lbnRzLi4uKTsKICAgICB9CiAKICAgICBGdW5jdG9yIG1fZnVu
Y3RvcjsKQEAgLTg3LDcgKzkwLDcgQEAgcHJpdmF0ZToKIAogLy8gQ3JlYXRlIGEgU2hhcmVkVGFz
ayBmcm9tIGEgZnVuY3Rvciwgc3VjaCBhcyBhIGxhbWJkYS4gWW91IGNhbiB1c2UgdGhpcyBsaWtl
IHNvOgogLy8KLS8vIFJlZlB0cjxTaGFyZWRUYXNrPiB0YXNrID0gY3JlYXRlU2hhcmVkVGFzaygK
Ky8vIFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoKT4+IHRhc2sgPSBjcmVhdGVTaGFyZWRUYXNrPHZv
aWQoKT4oCiAvLyAgICAgWz1dICgpIHsKIC8vICAgICAgICAgZG8gdGhpbmdzOwogLy8gICAgIH0p
OwpAQCAtMTAyLDEwICsxMDUsMTAgQEAgcHJpdmF0ZToKIC8vIE9uIHRoZSBvdGhlciBoYW5kLCBp
ZiB5b3UgdXNlIHNvbWV0aGluZyBsaWtlIFBhcmFsbGVsSGVscGVyQ2xpZW50OjpydW5UYXNrSW5Q
YXJhbGxlbCgpIChvciBpdHMKIC8vIGhlbHBlciwgcnVuRnVuY3Rpb25JblBhcmFsbGVsKCksIHdo
aWNoIGRvZXMgY3JlYXRlU2hhcmVkVGFzaygpIGZvciB5b3UpLCB0aGVuIGl0IGNhbiBiZSBPSyB0
bwogLy8gdXNlIFsmXSwgc2luY2UgdGhlIHN0YWNrIGZyYW1lIHdpbGwgcmVtYWluIGxpdmUgZm9y
IHRoZSBlbnRpcmUgZHVyYXRpb24gb2YgdGhlIHRhc2sncyBsaWZldGltZS4KLXRlbXBsYXRlPHR5
cGVuYW1lIEZ1bmN0b3I+Ci1SZWY8U2hhcmVkVGFzaz4gY3JlYXRlU2hhcmVkVGFzayhjb25zdCBG
dW5jdG9yJiBmdW5jdG9yKQordGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rpb25UeXBlLCB0eXBlbmFt
ZSBGdW5jdG9yPgorUmVmPFNoYXJlZFRhc2s8RnVuY3Rpb25UeXBlPj4gY3JlYXRlU2hhcmVkVGFz
ayhjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNo
YXJlZFRhc2tGdW5jdG9yPEZ1bmN0b3I+KGZ1bmN0b3IpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYo
Km5ldyBTaGFyZWRUYXNrRnVuY3RvcjxGdW5jdGlvblR5cGUsIEZ1bmN0b3I+KGZ1bmN0b3IpKTsK
IH0KIAogfSAvLyBuYW1lc3BhY2UgV1RGCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>262833</attachid>
            <date>2015-10-10 15:02:01 -0700</date>
            <delta_ts>2015-10-10 17:54:49 -0700</delta_ts>
            <desc>and now, with documentation</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>74225</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxOTA3NDkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtNDk0LDYgKzQ5NCw5IEBACiAJCTBGQjE3NjYyMTk2QjhG
OUUwMDkxMDUyQSAvKiBERkdQdXJlVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCMTc2NUUxOTZCOEY5RTAwOTEwNTJBIC8qIERGR1B1cmVW
YWx1ZS5jcHAgKi87IH07CiAJCTBGQjE3NjYzMTk2QjhGOUUwMDkxMDUyQSAvKiBERkdQdXJlVmFs
dWUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjE3
NjVGMTk2QjhGOUUwMDkxMDUyQSAvKiBERkdQdXJlVmFsdWUuaCAqLzsgfTsKIAkJMEZCNDM4QTMx
OTI3MEIxRDAwRTFGQkM5IC8qIFN0cnVjdHVyZVNldC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI0MzhBMjE5MjcwQjFEMDBFMUZCQzkgLyogU3Ry
dWN0dXJlU2V0LmNwcCAqLzsgfTsKKwkJMEZCNEZCNzMxQkM4NDMxNDAwMjVDQTVBIC8qIEZUTExh
enlTbG93UGF0aC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkI0RkI3MDFCQzg0MzE0MDAyNUNBNUEgLyogRlRMTGF6eVNsb3dQYXRoLmNwcCAqLzsg
fTsKKwkJMEZCNEZCNzQxQkM4NDMxNDAwMjVDQTVBIC8qIEZUTExhenlTbG93UGF0aC5oIGluIEhl
YWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCNEZCNzExQkM4NDMx
NDAwMjVDQTVBIC8qIEZUTExhenlTbG93UGF0aC5oICovOyB9OworCQkwRkI0RkI3NTFCQzg0MzE0
MDAyNUNBNUEgLyogRlRMTGF6eVNsb3dQYXRoQ2FsbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCNEZCNzIxQkM4NDMxNDAwMjVDQTVBIC8qIEZUTExh
enlTbG93UGF0aENhbGwuaCAqLzsgfTsKIAkJMEZCNTQ2NzcxNEY1OUI1QzAwMkMyOTg5IC8qIExh
enlPcGVyYW5kVmFsdWVQcm9maWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkI1NDY3NjE0RjU5QUQxMDAyQzI5ODkgLyogTGF6eU9wZXJhbmRWYWx1
ZVByb2ZpbGUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9
OwogCQkwRkI1NDY3OTE0RjVDNDZCMDAyQzI5ODkgLyogTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCNTQ2
NzgxNEY1QzQ2ODAwMkMyOTg5IC8qIExhenlPcGVyYW5kVmFsdWVQcm9maWxlLmNwcCAqLzsgfTsK
IAkJMEZCNTQ2N0IxNEY1QzdFMTAwMkMyOTg5IC8qIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2Zp
bGUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjU0
NjdBMTRGNUM3RDQwMDJDMjk4OSAvKiBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTIzNTMsNiAr
MjM1Niw5IEBACiAJCTBGQjRCNTFGMTZCNjI3NzIwMDNGNjk2QiAvKiBERkdOb2RlQWxsb2NhdG9y
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR05vZGVBbGxvY2F0b3IuaDsg
cGF0aCA9IGRmZy9ERkdOb2RlQWxsb2NhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGQjRCNTIxMTZCNjI3OEQwMDNGNjk2QiAvKiBGdW5jdGlvbkV4ZWN1dGFibGVEdW1wLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEZ1bmN0aW9uRXhlY3V0YWJs
ZUR1bXAuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkI0QjUyMjE2QjYyNzhE
MDAzRjY5NkIgLyogRnVuY3Rpb25FeGVjdXRhYmxlRHVtcC5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBGdW5jdGlvbkV4ZWN1dGFibGVEdW1wLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CisJCTBGQjRGQjcwMUJDODQzMTQwMDI1Q0E1QSAvKiBGVExMYXp5U2xvd1BhdGgu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gRlRMTGF6eVNsb3dQYXRo
LmNwcDsgcGF0aCA9IGZ0bC9GVExMYXp5U2xvd1BhdGguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OworCQkwRkI0RkI3MTFCQzg0MzE0MDAyNUNBNUEgLyogRlRMTGF6eVNsb3dQYXRoLmgg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTExhenlTbG93UGF0aC5oOyBwYXRo
ID0gZnRsL0ZUTExhenlTbG93UGF0aC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkw
RkI0RkI3MjFCQzg0MzE0MDAyNUNBNUEgLyogRlRMTGF6eVNsb3dQYXRoQ2FsbC5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExMYXp5U2xvd1BhdGhDYWxsLmg7IHBhdGggPSBm
dGwvRlRMTGF6eVNsb3dQYXRoQ2FsbC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RkI1NDY3NjE0RjU5QUQxMDAyQzI5ODkgLyogTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZCNTQ2NzgxNEY1QzQ2ODAwMkMyOTg5IC8q
IExhenlPcGVyYW5kVmFsdWVQcm9maWxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNw
cDsgcGF0aCA9IExhenlPcGVyYW5kVmFsdWVQcm9maWxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEZCNTQ2N0ExNEY1QzdENDAwMkMyOTg5IC8qIE1ldGhvZE9mR2V0dGluZ0FW
YWx1ZVByb2ZpbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWV0aG9kT2ZH
ZXR0aW5nQVZhbHVlUHJvZmlsZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzk5
MSw2ICszOTk3LDkgQEAKIAkJCQkwRkQxMjAzMjFBOEM4NUJEMDAwRjUyODAgLyogRlRMSlNDYWxs
VmFyYXJncy5oICovLAogCQkJCTYyNzc0REE4MUI4RDRCMTkwMDA2RjA1QSAvKiBGVExKU1RhaWxD
YWxsLmNwcCAqLywKIAkJCQk2Mjc3NERBOTFCOEQ0QjE5MDAwNkYwNUEgLyogRlRMSlNUYWlsQ2Fs
bC5oICovLAorCQkJCTBGQjRGQjcwMUJDODQzMTQwMDI1Q0E1QSAvKiBGVExMYXp5U2xvd1BhdGgu
Y3BwICovLAorCQkJCTBGQjRGQjcxMUJDODQzMTQwMDI1Q0E1QSAvKiBGVExMYXp5U2xvd1BhdGgu
aCAqLywKKwkJCQkwRkI0RkI3MjFCQzg0MzE0MDAyNUNBNUEgLyogRlRMTGF6eVNsb3dQYXRoQ2Fs
bC5oICovLAogCQkJCTBGOEYyQjkzMTcyRTA0OUUwMDdEQkRBNSAvKiBGVExMaW5rLmNwcCAqLywK
IAkJCQkwRjhGMkI5NDE3MkUwNDlFMDA3REJEQTUgLyogRlRMTGluay5oICovLAogCQkJCTBGQ0VG
QUREMTgwNzM4QzAwMDQ3MkNFNCAvKiBGVExMb2NhdGlvbi5jcHAgKi8sCkBAIC02MjYyLDYgKzYy
NzEsNyBAQAogCQkJCTBGNjM5NDc4MTVEQ0UzNEIwMDZBNTk3QyAvKiBERkdTdHJ1Y3R1cmVBYnN0
cmFjdFZhbHVlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjUwQUYzQzE5M0U4QjM5MDA2NzRFRTgg
LyogREZHU3RydWN0dXJlQ2xvYmJlclN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjc5MDg1
NjE5QTI5MEIyMDBGNjMxMEMgLyogREZHU3RydWN0dXJlUmVnaXN0cmF0aW9uUGhhc2UuaCBpbiBI
ZWFkZXJzICovLAorCQkJCTBGQjRGQjc1MUJDODQzMTQwMDI1Q0E1QSAvKiBGVExMYXp5U2xvd1Bh
dGhDYWxsLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjJGQ0NGRjE4QTYwMDcwMDAxQTI3RjggLyog
REZHVGhyZWFkRGF0YS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZDMDk3QTIxNDZCMjhDQzAwQ0Yy
NDQyIC8qIERGR1RodW5rcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEOEEzMjgxN0Q1MUY1NzAw
Q0EyQzQwIC8qIERGR1RpZXJVcENoZWNrSW5qZWN0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLApA
QCAtNjYyMCw2ICs2NjMwLDcgQEAKIAkJCQk3QzE4NEUxQjE3QkVEQkQzMDA3Q0I2M0EgLyogSlNQ
cm9taXNlLmggaW4gSGVhZGVycyAqLywKIAkJCQk3QzE4NEUyMzE3QkVFMjQwMDA3Q0I2M0EgLyog
SlNQcm9taXNlQ29uc3RydWN0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTdDMDA4Q0RCMTg3MTI0
QkIwMDk1NUMyNCAvKiBKU1Byb21pc2VEZWZlcnJlZC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZC
NEZCNzQxQkM4NDMxNDAwMjVDQTVBIC8qIEZUTExhenlTbG93UGF0aC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJN0MxODRFMUYxN0JFRTIyRTAwN0NCNjNBIC8qIEpTUHJvbWlzZVByb3RvdHlwZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMkEwNUFCRDYxOTYxREYyNDAwMzQxNzUwIC8qIEpTUHJvcGVydHlO
YW1lRW51bWVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTNFRjg4NzUxQjY2REYyMzAwM0Yy
NkNCIC8qIEpTUHJvcGVydHlOYW1lSXRlcmF0b3IuaCBpbiBIZWFkZXJzICovLApAQCAtODA1NCw2
ICs4MDY1LDcgQEAKIAkJCQkxNDQ2OURFQjEwN0VDN0U3MDA2NTA0NDYgLyogU3RyaW5nQ29uc3Ry
dWN0b3IuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNzBFQzBFQzYxQUEwRDdEQTAwQjZBQUZBIC8q
IFN0cmluZ0l0ZXJhdG9yUHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0NDY5REVD
MTA3RUM3RTcwMDY1MDQ0NiAvKiBTdHJpbmdPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJ
MEZCNEZCNzMxQkM4NDMxNDAwMjVDQTVBIC8qIEZUTExhenlTbG93UGF0aC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkxNDQ2OURFRDEwN0VDN0U3MDA2NTA0NDYgLyogU3RyaW5nUHJvdG90eXBlLmNw
cCBpbiBTb3VyY2VzICovLAogCQkJCTkzMzVGMjREMTJFNjc2NUIwMDJCNTU1MyAvKiBTdHJpbmdS
ZWN1cnNpb25DaGVja2VyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUJDREUzQjQzMEU2QzgzMkQw
MDE0NTNBNyAvKiBTdHJ1Y3R1cmUuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJs
ZXIuaAkocmV2aXNpb24gMTkwNzQ5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcg
QEAKICNpbmNsdWRlICJPcHRpb25zLmgiCiAjaW5jbHVkZSA8d3RmL0NyeXB0b2dyYXBoaWNhbGx5
UmFuZG9tTnVtYmVyLmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8
d3RmL1NoYXJlZFRhc2suaD4KICNpbmNsdWRlIDx3dGYvV2Vha1JhbmRvbS5oPgogCiAjaWYgRU5B
QkxFKEFTU0VNQkxFUikKQEAgLTEwMDQsNiArMTAwNSwxNyBAQCBwdWJsaWM6CiAgICAgICAgIEFz
c2VtYmxlclR5cGU6OnJlcGxhY2VXaXRoQWRkcmVzc0NvbXB1dGF0aW9uKGxhYmVsLmRhdGFMb2Nh
dGlvbigpKTsKICAgICB9CiAKKyAgICB2b2lkIGFkZExpbmtUYXNrKFJlZlB0cjxTaGFyZWRUYXNr
PHZvaWQoTGlua0J1ZmZlciYpPj4gdGFzaykKKyAgICB7CisgICAgICAgIG1fbGlua1Rhc2tzLmFw
cGVuZCh0YXNrKTsKKyAgICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAg
IHZvaWQgYWRkTGlua1Rhc2soY29uc3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB7CisgICAgICAg
IG1fbGlua1Rhc2tzLmFwcGVuZChjcmVhdGVTaGFyZWRUYXNrPHZvaWQoTGlua0J1ZmZlciYpPihm
dW5jdG9yKSk7CisgICAgfQorCiBwcm90ZWN0ZWQ6CiAgICAgQWJzdHJhY3RNYWNyb0Fzc2VtYmxl
cigpCiAgICAgICAgIDogbV9yYW5kb21Tb3VyY2UoY3J5cHRvZ3JhcGhpY2FsbHlSYW5kb21OdW1i
ZXIoKSkKQEAgLTEwOTksMTAgKzExMTEsOSBAQCBwcm90ZWN0ZWQ6CiAKICAgICB1bnNpZ25lZCBt
X3RlbXBSZWdpc3RlcnNWYWxpZEJpdHM7CiAKLSAgICBmcmllbmQgY2xhc3MgTGlua0J1ZmZlcjsK
LQotcHJpdmF0ZToKKyAgICBWZWN0b3I8UmVmUHRyPFNoYXJlZFRhc2s8dm9pZChMaW5rQnVmZmVy
Jik+Pj4gbV9saW5rVGFza3M7CiAKKyAgICBmcmllbmQgY2xhc3MgTGlua0J1ZmZlcjsKIH07IC8v
IGNsYXNzIEFic3RyYWN0TWFjcm9Bc3NlbWJsZXIKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5jcHAJKHJl
dmlzaW9uIDE5MDc0OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1
ZmZlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5Myw2ICsxOTMsOCBAQCB2b2lkIExpbmtCdWZm
ZXI6OmxpbmtDb2RlKE1hY3JvQXNzZW1ibGVyCiAjZWxpZiBDUFUoQVJNNjQpCiAgICAgY29weUNv
bXBhY3RBbmRMaW5rQ29kZTx1aW50MzJfdD4obWFjcm9Bc3NlbWJsZXIsIG93bmVyVUlELCBlZmZv
cnQpOwogI2VuZGlmCisKKyAgICBtX2xpbmtUYXNrcyA9IFdURjo6bW92ZShtYWNyb0Fzc2VtYmxl
ci5tX2xpbmtUYXNrcyk7CiB9CiAKIHZvaWQgTGlua0J1ZmZlcjo6YWxsb2NhdGUoc2l6ZV90IGlu
aXRpYWxTaXplLCB2b2lkKiBvd25lclVJRCwgSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQpA
QCAtMjI0LDYgKzIyNiw5IEBAIHZvaWQgTGlua0J1ZmZlcjo6c2hyaW5rKHNpemVfdCBuZXdTaXpl
KQogCiB2b2lkIExpbmtCdWZmZXI6OnBlcmZvcm1GaW5hbGl6YXRpb24oKQogeworICAgIGZvciAo
YXV0byYgdGFzayA6IG1fbGlua1Rhc2tzKQorICAgICAgICB0YXNrLT5ydW4oKnRoaXMpOworCiAj
aWZuZGVmIE5ERUJVRwogICAgIEFTU0VSVCghaXNDb21waWxhdGlvblRocmVhZCgpKTsKICAgICBB
U1NFUlQoIW1fY29tcGxldGVkKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvTGlua0J1ZmZlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvTGlua0J1ZmZlci5oCShyZXZpc2lvbiAxOTA3NDkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjU5LDYgKzI1
OSw4IEBAIHB1YmxpYzoKICAgICBib29sIHdhc0FscmVhZHlEaXNhc3NlbWJsZWQoKSBjb25zdCB7
IHJldHVybiBtX2FscmVhZHlEaXNhc3NlbWJsZWQ7IH0KICAgICB2b2lkIGRpZEFscmVhZHlEaXNh
c3NlbWJsZSgpIHsgbV9hbHJlYWR5RGlzYXNzZW1ibGVkID0gdHJ1ZTsgfQogCisgICAgVk0mIHZt
KCkgeyByZXR1cm4gKm1fdm07IH0KKwogcHJpdmF0ZToKICNpZiBFTkFCTEUoQlJBTkNIX0NPTVBB
Q1RJT04pCiAgICAgaW50IGV4ZWN1dGFibGVPZmZzZXRGb3IoaW50IGxvY2F0aW9uKQpAQCAtMzE1
LDYgKzMxNyw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX2NvbXBsZXRlZDsKICNlbmRpZgogICAg
IGJvb2wgbV9hbHJlYWR5RGlzYXNzZW1ibGVkIHsgZmFsc2UgfTsKKyAgICBWZWN0b3I8UmVmUHRy
PFNoYXJlZFRhc2s8dm9pZChMaW5rQnVmZmVyJik+Pj4gbV9saW5rVGFza3M7CiB9OwogCiAjZGVm
aW5lIEZJTkFMSVpFX0NPREVfSUYoY29uZGl0aW9uLCBsaW5rQnVmZmVyUmVmZXJlbmNlLCBkYXRh
TG9nRkFyZ3VtZW50c0ZvckhlYWRpbmcpICBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29kZU9yaWdpbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlT3JpZ2luLmgJKHJldmlzaW9uIDE5MDc0OSkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmgJKHdvcmtpbmcgY29weSkKQEAgLTc0LDcg
Kzc0LDcgQEAgc3RydWN0IENvZGVPcmlnaW4gewogICAgIH0KICAgICAKICAgICBib29sIGlzU2V0
KCkgY29uc3QgeyByZXR1cm4gYnl0ZWNvZGVJbmRleCAhPSBpbnZhbGlkQnl0ZWNvZGVJbmRleDsg
fQotICAgIGJvb2wgb3BlcmF0b3IhKCkgY29uc3QgeyByZXR1cm4gIWlzU2V0KCk7IH0KKyAgICBl
eHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gaXNTZXQoKTsgfQogICAgIAog
ICAgIGJvb2wgaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKSBjb25zdAogICAgIHsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhhc2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ29uc3RhbnRGb2xkaW5nUGhh
c2UuY3BwCShyZXZpc2lvbiAxOTA3NDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R0NvbnN0YW50Rm9sZGluZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTEsNiArOTEsNyBA
QCBwdWJsaWM6CiAgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAgICAgbV9p
bnRlcnByZXRlci5leGVjdXRlKG5vZGVJbmRleCk7CiAgICAgICAgICAgICAgICAgfQorICAgICAg
ICAgICAgICAgIG1fc3RhdGUucmVzZXQoKTsKICAgICAgICAgICAgIH0KIAogICAgICAgICAgICAg
aWYgKGRpZENsaXBCbG9jaykgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExD
b21waWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENv
bXBpbGUuY3BwCShyZXZpc2lvbiAxOTA3NDkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTENvbXBpbGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMzMsNyArMzMzLDcgQEAgc3RhdGlj
IHZvaWQgZml4RnVuY3Rpb25CYXNlZE9uU3RhY2tNYXBzKAogewogICAgIEdyYXBoJiBncmFwaCA9
IHN0YXRlLmdyYXBoOwogICAgIFZNJiB2bSA9IGdyYXBoLm1fdm07Ci0gICAgU3RhY2tNYXBzIHN0
YWNrbWFwcyA9IGppdENvZGUtPnN0YWNrbWFwczsKKyAgICBTdGFja01hcHMmIHN0YWNrbWFwcyA9
IGppdENvZGUtPnN0YWNrbWFwczsKICAgICAKICAgICBpbnQgbG9jYWxzT2Zmc2V0ID0gb2Zmc2V0
T2ZTdGFja1JlZ2lvbihyZWNvcmRNYXAsIHN0YXRlLmNhcHR1cmVkU3RhY2ttYXBJRCkgKyBncmFw
aC5tX25leHRNYWNoaW5lTG9jYWw7CiAgICAgaW50IHZhcmFyZ3NTcGlsbFNsb3RzT2Zmc2V0ID0g
b2Zmc2V0T2ZTdGFja1JlZ2lvbihyZWNvcmRNYXAsIHN0YXRlLnZhcmFyZ3NTcGlsbFNsb3RzU3Rh
Y2ttYXBJRCk7CkBAIC00MzksNyArNDM5LDEwIEBAIHN0YXRpYyB2b2lkIGZpeEZ1bmN0aW9uQmFz
ZWRPblN0YWNrTWFwcygKICAgICAgICAgc3RhdGUuZmluYWxpemVyLT5leGl0VGh1bmtzTGlua0J1
ZmZlciA9IFdURjo6bW92ZShsaW5rQnVmZmVyKTsKICAgICB9CiAKLSAgICBpZiAoIXN0YXRlLmdl
dEJ5SWRzLmlzRW1wdHkoKSB8fCAhc3RhdGUucHV0QnlJZHMuaXNFbXB0eSgpIHx8ICFzdGF0ZS5j
aGVja0lucy5pc0VtcHR5KCkpIHsKKyAgICBpZiAoIXN0YXRlLmdldEJ5SWRzLmlzRW1wdHkoKQor
ICAgICAgICB8fCAhc3RhdGUucHV0QnlJZHMuaXNFbXB0eSgpCisgICAgICAgIHx8ICFzdGF0ZS5j
aGVja0lucy5pc0VtcHR5KCkKKyAgICAgICAgfHwgIXN0YXRlLmxhenlTbG93UGF0aHMuaXNFbXB0
eSgpKSB7CiAgICAgICAgIENDYWxsSGVscGVycyBzbG93UGF0aEpJVCgmdm0sIGNvZGVCbG9jayk7
CiAgICAgICAgIAogICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IGV4Y2VwdGlvblRhcmdl
dDsKQEAgLTQ3Myw3ICs0NzYsOCBAQCBzdGF0aWMgdm9pZCBmaXhGdW5jdGlvbkJhc2VkT25TdGFj
a01hcHMoCiAKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsID0gY2Fs
bE9wZXJhdGlvbigKICAgICAgICAgICAgICAgICAgICAgc3RhdGUsIHVzZWRSZWdpc3RlcnMsIHNs
b3dQYXRoSklULCBjb2RlT3JpZ2luLCAmZXhjZXB0aW9uVGFyZ2V0LAotICAgICAgICAgICAgICAg
ICAgICBvcGVyYXRpb25HZXRCeUlkT3B0aW1pemUsIHJlc3VsdCwgZ2VuLnN0dWJJbmZvKCksIGJh
c2UsIGdldEJ5SWQudWlkKCkpOworICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25HZXRCeUlk
T3B0aW1pemUsIHJlc3VsdCwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGdlbi5zdHViSW5m
bygpKSwKKyAgICAgICAgICAgICAgICAgICAgYmFzZSwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
UHRyKGdldEJ5SWQudWlkKCkpKS5jYWxsKCk7CiAKICAgICAgICAgICAgICAgICBnZW4ucmVwb3J0
U2xvd1BhdGhDYWxsKGJlZ2luLCBjYWxsKTsKIApAQCAtNTExLDcgKzUxNSw5IEBAIHN0YXRpYyB2
b2lkIGZpeEZ1bmN0aW9uQmFzZWRPblN0YWNrTWFwcygKICAgICAgICAgICAgICAgICAKICAgICAg
ICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsID0gY2FsbE9wZXJhdGlvbigKICAg
ICAgICAgICAgICAgICAgICAgc3RhdGUsIHVzZWRSZWdpc3RlcnMsIHNsb3dQYXRoSklULCBjb2Rl
T3JpZ2luLCAmZXhjZXB0aW9uVGFyZ2V0LAotICAgICAgICAgICAgICAgICAgICBnZW4uc2xvd1Bh
dGhGdW5jdGlvbigpLCBnZW4uc3R1YkluZm8oKSwgdmFsdWUsIGJhc2UsIHB1dEJ5SWQudWlkKCkp
OworICAgICAgICAgICAgICAgICAgICBnZW4uc2xvd1BhdGhGdW5jdGlvbigpLCBJbnZhbGlkR1BS
UmVnLAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoZ2Vu
LnN0dWJJbmZvKCkpLCB2YWx1ZSwgYmFzZSwKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tUHRyKHB1dEJ5SWQudWlkKCkpKS5jYWxsKCk7CiAgICAgICAgICAgICAg
ICAgCiAgICAgICAgICAgICAgICAgZ2VuLnJlcG9ydFNsb3dQYXRoQ2FsbChiZWdpbiwgY2FsbCk7
CiAgICAgICAgICAgICAgICAgCkBAIC01NDksMTMgKzU1NSw1NyBAQCBzdGF0aWMgdm9pZCBmaXhG
dW5jdGlvbkJhc2VkT25TdGFja01hcHMoCiAKICAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxl
cjo6Q2FsbCBzbG93Q2FsbCA9IGNhbGxPcGVyYXRpb24oCiAgICAgICAgICAgICAgICAgICAgIHN0
YXRlLCB1c2VkUmVnaXN0ZXJzLCBzbG93UGF0aEpJVCwgY29kZU9yaWdpbiwgJmV4Y2VwdGlvblRh
cmdldCwKLSAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uSW5PcHRpbWl6ZSwgcmVzdWx0LCBz
dHViSW5mbywgb2JqLCBjaGVja0luLm1fdWlkKTsKKyAgICAgICAgICAgICAgICAgICAgb3BlcmF0
aW9uSW5PcHRpbWl6ZSwgcmVzdWx0LCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoc3R1Yklu
Zm8pLCBvYmosCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0
cihjaGVja0luLnVpZCgpKSkuY2FsbCgpOwogCiAgICAgICAgICAgICAgICAgY2hlY2tJbi5tX3Ns
b3dQYXRoRG9uZS5hcHBlbmQoc2xvd1BhdGhKSVQuanVtcCgpKTsKICAgICAgICAgICAgICAgICAK
ICAgICAgICAgICAgICAgICBjaGVja0luLm1fZ2VuZXJhdG9ycy5hcHBlbmQoQ2hlY2tJbkdlbmVy
YXRvcihzdHViSW5mbywgc2xvd0NhbGwsIGJlZ2luKSk7CiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KKworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBzdGF0ZS5sYXp5U2xvd1BhdGhzLnNpemUo
KTsgaS0tOykgeworICAgICAgICAgICAgTGF6eVNsb3dQYXRoRGVzY3JpcHRvciYgZGVzY3JpcHRv
ciA9IHN0YXRlLmxhenlTbG93UGF0aHNbaV07CisKKyAgICAgICAgICAgIGlmICh2ZXJib3NlQ29t
cGlsYXRpb25FbmFibGVkKCkpCisgICAgICAgICAgICAgICAgZGF0YUxvZygiSGFuZGxpbmcgbGF6
eVNsb3dQYXRoIHN0YWNrbWFwICMiLCBkZXNjcmlwdG9yLnN0YWNrbWFwSUQoKSwgIlxuIik7CisK
KyAgICAgICAgICAgIGF1dG8gaXRlciA9IHJlY29yZE1hcC5maW5kKGRlc2NyaXB0b3Iuc3RhY2tt
YXBJRCgpKTsKKyAgICAgICAgICAgIGlmIChpdGVyID09IHJlY29yZE1hcC5lbmQoKSkgeworICAg
ICAgICAgICAgICAgIC8vIEl0IHdhcyBvcHRpbWl6ZWQgb3V0LgorICAgICAgICAgICAgICAgIGNv
bnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgaXRlci0+dmFsdWUuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAgICAgICBTdGFja01h
cHM6OlJlY29yZCYgcmVjb3JkID0gaXRlci0+dmFsdWVbaV07CisgICAgICAgICAgICAgICAgUmVn
aXN0ZXJTZXQgdXNlZFJlZ2lzdGVycyA9IHVzZWRSZWdpc3RlcnNGb3IocmVjb3JkKTsKKyAgICAg
ICAgICAgICAgICBWZWN0b3I8TG9jYXRpb24+IGxvY2F0aW9uczsKKyAgICAgICAgICAgICAgICBm
b3IgKGF1dG8gbG9jYXRpb24gOiByZWNvcmQubG9jYXRpb25zKQorICAgICAgICAgICAgICAgICAg
ICBsb2NhdGlvbnMuYXBwZW5kKExvY2F0aW9uOjpmb3JTdGFja21hcHMoJnN0YWNrbWFwcywgbG9j
YXRpb24pKTsKKworICAgICAgICAgICAgICAgIGNoYXIqIHN0YXJ0T2ZJQyA9CisgICAgICAgICAg
ICAgICAgICAgIGJpdHdpc2VfY2FzdDxjaGFyKj4oZ2VuZXJhdGVkRnVuY3Rpb24pICsgcmVjb3Jk
Lmluc3RydWN0aW9uT2Zmc2V0OworICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIHBh
dGNocG9pbnQoKE1hY3JvQXNzZW1ibGVyQ29kZVB0cihzdGFydE9mSUMpKSk7CisgICAgICAgICAg
ICAgICAgQ29kZUxvY2F0aW9uTGFiZWwgZXhjZXB0aW9uVGFyZ2V0ID0KKyAgICAgICAgICAgICAg
ICAgICAgc3RhdGUuZmluYWxpemVyLT5oYW5kbGVFeGNlcHRpb25zTGlua0J1ZmZlci0+ZW50cnlw
b2ludCgpOworCisgICAgICAgICAgICAgICAgc3RkOjp1bmlxdWVfcHRyPExhenlTbG93UGF0aD4g
bGF6eVNsb3dQYXRoID0gc3RkOjptYWtlX3VuaXF1ZTxMYXp5U2xvd1BhdGg+KAorICAgICAgICAg
ICAgICAgICAgICBwYXRjaHBvaW50LCBleGNlcHRpb25UYXJnZXQsIHVzZWRSZWdpc3RlcnMsIGRl
c2NyaXB0b3IuY2FsbFNpdGVJbmRleCgpLAorICAgICAgICAgICAgICAgICAgICBkZXNjcmlwdG9y
Lm1fbGlua2VyLT5ydW4obG9jYXRpb25zKSk7CisKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBl
cnM6OkxhYmVsIGJlZ2luID0gc2xvd1BhdGhKSVQubGFiZWwoKTsKKworICAgICAgICAgICAgICAg
IC8vIEZJWE1FOiBUaGlzIHNob3VsZCBiZSBwdXNoaW5nIHRoZSBsYXp5IHNsb3cgcGF0aCBpbmRl
eCBpbiBzb21lIHZlY3RvciBvciB3aGF0ZXZlci4KKyAgICAgICAgICAgICAgICBzbG93UGF0aEpJ
VC5wdXNoVG9TYXZlSW1tZWRpYXRlV2l0aG91dFRvdWNoaW5nUmVnaXN0ZXJzKAorICAgICAgICAg
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihzdGF0ZS5qaXRDb2RlLT5sYXp5
U2xvd1BhdGhzLnNpemUoKSkpOworICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBn
ZW5lcmF0b3JKdW1wID0gc2xvd1BhdGhKSVQuanVtcCgpOworICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgIGRlc2NyaXB0b3IubV9nZW5lcmF0b3JzLmFwcGVuZChzdGQ6Om1ha2VfdHVw
bGUobGF6eVNsb3dQYXRoLmdldCgpLCBiZWdpbikpOworCisgICAgICAgICAgICAgICAgc3RhdGUu
aml0Q29kZS0+bGF6eVNsb3dQYXRocy5hcHBlbmQoV1RGOjptb3ZlKGxhenlTbG93UGF0aCkpOwor
ICAgICAgICAgICAgICAgIHN0YXRlLmZpbmFsaXplci0+bGF6eVNsb3dQYXRoR2VuZXJhdG9ySnVt
cHMuYXBwZW5kKGdlbmVyYXRvckp1bXApOworICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAg
ICAgIAogICAgICAgICBleGNlcHRpb25UYXJnZXQubGluaygmc2xvd1BhdGhKSVQpOwogICAgICAg
ICBNYWNyb0Fzc2VtYmxlcjo6SnVtcCBleGNlcHRpb25KdW1wID0gc2xvd1BhdGhKSVQuanVtcCgp
OwpAQCAtNTc4LDEyICs2MjgsMTkgQEAgc3RhdGljIHZvaWQgZml4RnVuY3Rpb25CYXNlZE9uU3Rh
Y2tNYXBzKAogICAgICAgICAgICAgICAgIHN0YXRlLCBjb2RlQmxvY2ssIGdlbmVyYXRlZEZ1bmN0
aW9uLCByZWNvcmRNYXAsIHN0YXRlLnB1dEJ5SWRzW2ldLAogICAgICAgICAgICAgICAgIHNpemVP
ZlB1dEJ5SWQoKSk7CiAgICAgICAgIH0KLQogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBzdGF0
ZS5jaGVja0lucy5zaXplKCk7IGktLTspIHsKICAgICAgICAgICAgIGdlbmVyYXRlQ2hlY2tJbklD
RmFzdFBhdGgoCiAgICAgICAgICAgICAgICAgc3RhdGUsIGNvZGVCbG9jaywgZ2VuZXJhdGVkRnVu
Y3Rpb24sIHJlY29yZE1hcCwgc3RhdGUuY2hlY2tJbnNbaV0sCiAgICAgICAgICAgICAgICAgc2l6
ZU9mSW4oKSk7IAotICAgICAgICB9IAorICAgICAgICB9CisgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IHN0YXRlLmxhenlTbG93UGF0aHMuc2l6ZSgpOyBpLS07KSB7CisgICAgICAgICAgICBMYXp5
U2xvd1BhdGhEZXNjcmlwdG9yJiBsYXp5U2xvd1BhdGggPSBzdGF0ZS5sYXp5U2xvd1BhdGhzW2ld
OworICAgICAgICAgICAgZm9yIChhdXRvJiB0dXBsZSA6IGxhenlTbG93UGF0aC5tX2dlbmVyYXRv
cnMpIHsKKyAgICAgICAgICAgICAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwbGFjZVdpdGhKdW1wKAor
ICAgICAgICAgICAgICAgICAgICBzdGQ6OmdldDwwPih0dXBsZSktPnBhdGNocG9pbnQoKSwKKyAg
ICAgICAgICAgICAgICAgICAgc3RhdGUuZmluYWxpemVyLT5zaWRlQ29kZUxpbmtCdWZmZXItPmxv
Y2F0aW9uT2Yoc3RkOjpnZXQ8MT4odHVwbGUpKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
ICAgICB9CiAgICAgCiAgICAgYWRqdXN0Q2FsbElDc0ZvclN0YWNrbWFwcyhzdGF0ZS5qc0NhbGxz
LCByZWNvcmRNYXApOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbmxpbmVD
YWNoZURlc2NyaXB0b3IuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTElubGluZUNhY2hlRGVzY3JpcHRvci5oCShyZXZpc2lvbiAxOTA3NDkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTElubGluZUNhY2hlRGVzY3JpcHRvci5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBs
ZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNSBB
cHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKQEAgLTI5LDEyICsyOSwxNSBAQAogI2lmIEVOQUJMRShGVExfSklUKQogCiAjaW5jbHVk
ZSAiQ29kZU9yaWdpbi5oIgorI2luY2x1ZGUgIkZUTExhenlTbG93UGF0aC5oIgogI2luY2x1ZGUg
IkpJVElubGluZUNhY2hlR2VuZXJhdG9yLmgiCiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXIuaCIK
ICNpbmNsdWRlIDx3dGYvdGV4dC9VbmlxdWVkU3RyaW5nSW1wbC5oPgogCiBuYW1lc3BhY2UgSlND
IHsgbmFtZXNwYWNlIEZUTCB7CiAKK2NsYXNzIExvY2F0aW9uOworCiBjbGFzcyBJbmxpbmVDYWNo
ZURlc2NyaXB0b3IgewogcHVibGljOgogICAgIElubGluZUNhY2hlRGVzY3JpcHRvcigpIApAQCAt
MTEzLDE3ICsxMTYsNDMgQEAgY2xhc3MgQ2hlY2tJbkRlc2NyaXB0b3IgOiBwdWJsaWMgSW5saW5l
QwogcHVibGljOgogICAgIENoZWNrSW5EZXNjcmlwdG9yKCkgeyB9CiAgICAgCi0gICAgQ2hlY2tJ
bkRlc2NyaXB0b3IodW5zaWduZWQgc3RhY2ttYXBJRCwgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZSwg
Y29uc3QgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKLSAgICAgICAgOiBJbmxpbmVDYWNoZURlc2Ny
aXB0b3Ioc3RhY2ttYXBJRCwgY2FsbFNpdGUsIG51bGxwdHIpCi0gICAgICAgICwgbV91aWQodWlk
KQorICAgIENoZWNrSW5EZXNjcmlwdG9yKHVuc2lnbmVkIHN0YWNrbWFwSUQsIENhbGxTaXRlSW5k
ZXggY2FsbFNpdGUsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCisgICAgICAgIDogSW5saW5lQ2Fj
aGVEZXNjcmlwdG9yKHN0YWNrbWFwSUQsIGNhbGxTaXRlLCB1aWQpCiAgICAgewogICAgIH0KLQog
ICAgIAotICAgIGNvbnN0IFVuaXF1ZWRTdHJpbmdJbXBsKiBtX3VpZDsKICAgICBWZWN0b3I8Q2hl
Y2tJbkdlbmVyYXRvcj4gbV9nZW5lcmF0b3JzOwogfTsKIAorLy8gWW91IGNhbiBjcmVhdGUgYSBs
YXp5IHNsb3cgcGF0aCBjYWxsIGluIGxvd2VyREZHVG9MTFZNIGJ5IGRvaW5nOgorLy8gbV9mdGxT
dGF0ZS5sYXp5U2xvd1BhdGhzLmFwcGVuZCgKKy8vICAgICBMYXp5U2xvd1BhdGhEZXNjcmlwdG9y
KAorLy8gICAgICAgICBzdGFja21hcElELCBjYWxsU2l0ZUluZGV4LAorLy8gICAgICAgICBjcmVh
dGVTaGFyZWRUYXNrPFJlZlB0cjxMYXp5U2xvd1BhdGg6OkdlbmVyYXRvcj4oY29uc3QgVmVjdG9y
PExvY2F0aW9uPiYpPigKKy8vICAgICAgICAgICAgIFtdIChjb25zdCBWZWN0b3I8TG9jYXRpb24+
JiBsb2NhdGlvbnMpIC0+IFJlZlB0cjxMYXp5U2xvd1BhdGg6OkdlbmVyYXRvcj4geworLy8gICAg
ICAgICAgICAgICAgIC8vIFRoaXMgbGFtYmRhIHNob3VsZCBqdXN0IHJlY29yZCB0aGUgcmVnaXN0
ZXJzIHRoYXQgd2Ugd2lsbCBiZSB1c2luZywgYW5kIHJldHVybgorLy8gICAgICAgICAgICAgICAg
IC8vIGEgU2hhcmVkVGFzayB0aGF0IHdpbGwgYWN0dWFsbHkgZ2VuZXJhdGUgdGhlIHNsb3cgcGF0
aC4KKy8vICAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlTGF6eUNhbGxHZW5lcmF0b3IoCisv
LyAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9uLCBsb2NhdGlvbnNbMF0uZGlyZWN0R1BSKCks
IGxvY2F0aW9uc1sxXS5kaXJlY3RHUFIoKSk7CisvLyAgICAgICAgICAgICB9KSkpOwordHlwZWRl
ZiBSZWZQdHI8TGF6eVNsb3dQYXRoOjpHZW5lcmF0b3I+IExhenlTbG93UGF0aExpbmtlckZ1bmN0
aW9uKGNvbnN0IFZlY3RvcjxMb2NhdGlvbj4mKTsKK3R5cGVkZWYgU2hhcmVkVGFzazxMYXp5U2xv
d1BhdGhMaW5rZXJGdW5jdGlvbj4gTGF6eVNsb3dQYXRoTGlua2VyVGFzazsKK2NsYXNzIExhenlT
bG93UGF0aERlc2NyaXB0b3IgOiBwdWJsaWMgSW5saW5lQ2FjaGVEZXNjcmlwdG9yIHsKK3B1Ymxp
YzoKKyAgICBMYXp5U2xvd1BhdGhEZXNjcmlwdG9yKCkgeyB9CisKKyAgICBMYXp5U2xvd1BhdGhE
ZXNjcmlwdG9yKAorICAgICAgICB1bnNpZ25lZCBzdGFja21hcElELCBDYWxsU2l0ZUluZGV4IGNh
bGxTaXRlLAorICAgICAgICBSZWZQdHI8TGF6eVNsb3dQYXRoTGlua2VyVGFzaz4gbGlua2VyKQor
ICAgICAgICA6IElubGluZUNhY2hlRGVzY3JpcHRvcihzdGFja21hcElELCBjYWxsU2l0ZSwgbnVs
bHB0cikKKyAgICAgICAgLCBtX2xpbmtlcihsaW5rZXIpCisgICAgeworICAgIH0KKworICAgIFZl
Y3RvcjxzdGQ6OnR1cGxlPExhenlTbG93UGF0aCosIENDYWxsSGVscGVyczo6TGFiZWw+PiBtX2dl
bmVyYXRvcnM7CisKKyAgICBSZWZQdHI8TGF6eVNsb3dQYXRoTGlua2VyVGFzaz4gbV9saW5rZXI7
Cit9OwogCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMSklUQ29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMSklUQ29kZS5oCShyZXZpc2lvbiAxOTA3NDkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTEpJVENvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBA
QAogCiAjaW5jbHVkZSAiREZHQ29tbW9uRGF0YS5oIgogI2luY2x1ZGUgIkZUTERhdGFTZWN0aW9u
LmgiCisjaW5jbHVkZSAiRlRMTGF6eVNsb3dQYXRoLmgiCiAjaW5jbHVkZSAiRlRMT1NSRXhpdC5o
IgogI2luY2x1ZGUgIkZUTFN0YWNrTWFwcy5oIgogI2luY2x1ZGUgIkZUTFVud2luZEluZm8uaCIK
QEAgLTg2LDYgKzg3LDcgQEAgcHVibGljOgogICAgIERGRzo6Q29tbW9uRGF0YSBjb21tb247CiAg
ICAgU2VnbWVudGVkVmVjdG9yPE9TUkV4aXQsIDg+IG9zckV4aXQ7CiAgICAgU3RhY2tNYXBzIHN0
YWNrbWFwczsKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPExhenlTbG93UGF0aD4+IGxhenlT
bG93UGF0aHM7CiAgICAgCiBwcml2YXRlOgogICAgIFZlY3RvcjxSZWZQdHI8RGF0YVNlY3Rpb24+
PiBtX2RhdGFTZWN0aW9uczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklU
RmluYWxpemVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TEpJVEZpbmFsaXplci5jcHAJKHJldmlzaW9uIDE5MDc0OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMSklURmluYWxpemVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA2LDExICsx
MDYsMTEgQEAgYm9vbCBKSVRGaW5hbGl6ZXI6OmZpbmFsaXplRnVuY3Rpb24oKQogICAgICAgICAv
LyBTaWRlIGNvZGUgaXMgZm9yIHNwZWNpYWwgc2xvdyBwYXRocyB0aGF0IHdlIGdlbmVyYXRlIG91
cnNlbHZlcywgbGlrZSBmb3IgaW5saW5lCiAgICAgICAgIC8vIGNhY2hlcy4KICAgICAgICAgCi0g
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IHNsb3dQYXRoQ2FsbHMuc2l6ZSgpOyBpLS07KSB7Ci0g
ICAgICAgICAgICBTbG93UGF0aENhbGwmIGNhbGwgPSBzbG93UGF0aENhbGxzW2ldOworICAgICAg
ICBmb3IgKENDYWxsSGVscGVyczo6SnVtcCBqdW1wIDogbGF6eVNsb3dQYXRoR2VuZXJhdG9ySnVt
cHMpIHsKICAgICAgICAgICAgIHNpZGVDb2RlTGlua0J1ZmZlci0+bGluaygKLSAgICAgICAgICAg
ICAgICBjYWxsLmNhbGwoKSwKLSAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbChtX3Bs
YW4udm0uZnRsVGh1bmtzLT5nZXRTbG93UGF0aENhbGxUaHVuayhtX3BsYW4udm0sIGNhbGwua2V5
KCkpLmNvZGUoKSkpOworICAgICAgICAgICAgICAgIGp1bXAsCisgICAgICAgICAgICAgICAgQ29k
ZUxvY2F0aW9uTGFiZWwoCisgICAgICAgICAgICAgICAgICAgIG1fcGxhbi52bS5nZXRDVElTdHVi
KGxhenlTbG93UGF0aEdlbmVyYXRpb25UaHVua0dlbmVyYXRvcikuY29kZSgpKSk7CiAgICAgICAg
IH0KICAgICAgICAgCiAgICAgICAgIGppdENvZGUtPmFkZEhhbmRsZShGSU5BTElaRV9ERkdfQ09E
RSgKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklURmluYWxpemVyLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRGaW5hbGl6ZXIuaAko
cmV2aXNpb24gMTkwNzQ5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRGaW5h
bGl6ZXIuaAkod29ya2luZyBjb3B5KQpAQCAtNjUsOCArNjUsOCBAQCBwdWJsaWM6CiAgICAgc3Rk
Ojp1bmlxdWVfcHRyPExpbmtCdWZmZXI+IHNpZGVDb2RlTGlua0J1ZmZlcjsKICAgICBzdGQ6OnVu
aXF1ZV9wdHI8TGlua0J1ZmZlcj4gaGFuZGxlRXhjZXB0aW9uc0xpbmtCdWZmZXI7CiAgICAgVmVj
dG9yPE91dE9mTGluZUNvZGVJbmZvPiBvdXRPZkxpbmVDb2RlSW5mb3M7Ci0gICAgVmVjdG9yPFNs
b3dQYXRoQ2FsbD4gc2xvd1BhdGhDYWxsczsgLy8gQ2FsbHMgaW5zaWRlIHRoZSBzaWRlIGNvZGUu
CiAgICAgVmVjdG9yPE9TUkV4aXRDb21waWxhdGlvbkluZm8+IG9zckV4aXQ7CisgICAgVmVjdG9y
PENDYWxsSGVscGVyczo6SnVtcD4gbGF6eVNsb3dQYXRoR2VuZXJhdG9ySnVtcHM7CiAgICAgR2Vu
ZXJhdGVkRnVuY3Rpb24gZnVuY3Rpb247CiAgICAgUmVmUHRyPEpJVENvZGU+IGppdENvZGU7CiB9
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMYXp5U2xvd1BhdGguY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTGF6eVNsb3dQYXRoLmNw
cAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTGF6eVNsb3dQ
YXRoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDc0IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJGVExMYXp5U2xvd1BhdGguaCIKKworI2luY2x1ZGUgIkZUTFNsb3dQYXRoQ2FsbC5oIgor
I2luY2x1ZGUgIkxpbmtCdWZmZXIuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwg
eworCitMYXp5U2xvd1BhdGg6OkxhenlTbG93UGF0aCgKKyAgICBDb2RlTG9jYXRpb25MYWJlbCBw
YXRjaHBvaW50LCBDb2RlTG9jYXRpb25MYWJlbCBleGNlcHRpb25UYXJnZXQsCisgICAgY29uc3Qg
UmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCwg
UmVmUHRyPEdlbmVyYXRvcj4gZ2VuZXJhdG9yKQorICAgIDogbV9wYXRjaHBvaW50KHBhdGNocG9p
bnQpCisgICAgLCBtX2V4Y2VwdGlvblRhcmdldChleGNlcHRpb25UYXJnZXQpCisgICAgLCBtX3Vz
ZWRSZWdpc3RlcnModXNlZFJlZ2lzdGVycykKKyAgICAsIG1fY2FsbFNpdGVJbmRleChjYWxsU2l0
ZUluZGV4KQorICAgICwgbV9nZW5lcmF0b3IoZ2VuZXJhdG9yKQoreworfQorCitMYXp5U2xvd1Bh
dGg6On5MYXp5U2xvd1BhdGgoKQoreworfQorCit2b2lkIExhenlTbG93UGF0aDo6Z2VuZXJhdGUo
Q29kZUJsb2NrKiBjb2RlQmxvY2spCit7CisgICAgUkVMRUFTRV9BU1NFUlQoIW1fc3R1Yik7CisK
KyAgICBWTSYgdm0gPSAqY29kZUJsb2NrLT52bSgpOworCisgICAgQ0NhbGxIZWxwZXJzIGppdCgm
dm0sIGNvZGVCbG9jayk7CisgICAgR2VuZXJhdGlvblBhcmFtcyBwYXJhbXM7CisgICAgQ0NhbGxI
ZWxwZXJzOjpKdW1wTGlzdCBleGNlcHRpb25KdW1wczsKKyAgICBwYXJhbXMuZXhjZXB0aW9uSnVt
cHMgPSBtX2V4Y2VwdGlvblRhcmdldCA/ICZleGNlcHRpb25KdW1wcyA6IG51bGxwdHI7CisgICAg
cGFyYW1zLmxhenlTbG93UGF0aCA9IHRoaXM7CisgICAgbV9nZW5lcmF0b3ItPnJ1bihqaXQsIHBh
cmFtcyk7CisKKyAgICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIodm0sIGppdCwgY29kZUJsb2NrLCBK
SVRDb21waWxhdGlvbk11c3RTdWNjZWVkKTsKKyAgICBsaW5rQnVmZmVyLmxpbmsoCisgICAgICAg
IHBhcmFtcy5kb25lSnVtcHMsIG1fcGF0Y2hwb2ludC5sYWJlbEF0T2Zmc2V0KE1hY3JvQXNzZW1i
bGVyOjptYXhKdW1wUmVwbGFjZW1lbnRTaXplKCkpKTsKKyAgICBpZiAobV9leGNlcHRpb25UYXJn
ZXQpCisgICAgICAgIGxpbmtCdWZmZXIubGluayhleGNlcHRpb25KdW1wcywgbV9leGNlcHRpb25U
YXJnZXQpOworICAgIG1fc3R1YiA9IEZJTkFMSVpFX0NPREVfRk9SKGNvZGVCbG9jaywgbGlua0J1
ZmZlciwgKCJMYXp5IHNsb3cgcGF0aCBjYWxsIHN0dWIiKSk7CisKKyAgICBNYWNyb0Fzc2VtYmxl
cjo6cmVwbGFjZVdpdGhKdW1wKG1fcGF0Y2hwb2ludCwgQ29kZUxvY2F0aW9uTGFiZWwobV9zdHVi
LmNvZGUoKSkpOworfQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCisKKwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMYXp5U2xvd1BhdGguaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExhenlTbG93UGF0aC5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMYXp5U2xvd1BhdGguaAkod29ya2luZyBj
b3B5KQpAQCAtMCwwICsxLDkxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwor
ICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisg
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAorICovCisKKyNpZm5kZWYgRlRMTGF6eVNsb3dQYXRoX2gKKyNkZWZpbmUgRlRMTGF6eVNs
b3dQYXRoX2gKKworI2luY2x1ZGUgIkNDYWxsSGVscGVycy5oIgorI2luY2x1ZGUgIkNvZGVCbG9j
ay5oIgorI2luY2x1ZGUgIkNvZGVMb2NhdGlvbi5oIgorI2luY2x1ZGUgIkdQUkluZm8uaCIKKyNp
bmNsdWRlICJNYWNyb0Fzc2VtYmxlckNvZGVSZWYuaCIKKyNpbmNsdWRlICJSZWdpc3RlclNldC5o
IgorI2luY2x1ZGUgPHd0Zi9TaGFyZWRUYXNrLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgRlRMIHsKKworLy8gQSBMYXp5U2xvd1BhdGggaXMgYW4gb2JqZWN0IHRoYXQgcmVwcmVzZW50
cyBhIHBpZWNlIG9mIGNvZGUgdGhhdCBpcyBwYXJ0IG9mIEZUTCBnZW5lcmF0ZWQgY29kZQorLy8g
dGhhdCB3aWxsIGJlIGdlbmVyYXRlZCBsYXppbHkuIEl0IGhvbGRzIGFsbCBvZiB0aGUgaW1wb3J0
YW50IGluZm9ybWF0aW9uIG5lZWRlZCB0byBnZW5lcmF0ZSB0aGF0CisvLyBjb2RlLCBzdWNoIGFz
IHdoZXJlIHRvIGxpbmsganVtcHMgdG8gYW5kIHdoaWNoIHJlZ2lzdGVycyBhcmUgaW4gdXNlLiBJ
dCBhbHNvIGhhcyBhIHJlZmVyZW5jZSB0byBhCisvLyBTaGFyZWRUYXNrIHRoYXQgd2lsbCBkbyB0
aGUgYWN0dWFsIGNvZGUgZ2VuZXJhdGlvbi4gVGhhdCBTaGFyZWRUYXNrIG1heSBoYXZlIGFkZGl0
aW9uYWwgZGF0YSwgbGlrZQorLy8gd2hpY2ggcmVnaXN0ZXJzIGhvbGQgdGhlIGlucHV0cyBvciBv
dXRwdXRzLgorY2xhc3MgTGF6eVNsb3dQYXRoIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShM
YXp5U2xvd1BhdGgpOworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAg
IHN0cnVjdCBHZW5lcmF0aW9uUGFyYW1zIHsKKyAgICAgICAgLy8gRXh0cmEgcGFyYW1ldGVycyB0
byB0aGUgR2VuZXJhdG9yRnVuY3Rpb24gYXJlIG1hZGUgaW50byBmaWVsZHMgb2YgdGhpcyBzdHJ1
Y3QsIHNvIHRoYXQgaWYKKyAgICAgICAgLy8gd2UgYWRkIG5ldyBwYXJhbWV0ZXJzLCB3ZSBkb24n
dCBoYXZlIHRvIGNoYW5nZSBhbGwgb2YgdGhlIHVzZXJzLgorICAgICAgICBDQ2FsbEhlbHBlcnM6
Okp1bXBMaXN0IGRvbmVKdW1wczsKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCogZXhj
ZXB0aW9uSnVtcHM7CisgICAgICAgIExhenlTbG93UGF0aCogbGF6eVNsb3dQYXRoOworICAgIH07
CisKKyAgICB0eXBlZGVmIHZvaWQgR2VuZXJhdG9yRnVuY3Rpb24oQ0NhbGxIZWxwZXJzJiwgR2Vu
ZXJhdGlvblBhcmFtcyYpOworICAgIHR5cGVkZWYgU2hhcmVkVGFzazxHZW5lcmF0b3JGdW5jdGlv
bj4gR2VuZXJhdG9yOworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICBzdGF0
aWMgUmVmUHRyPEdlbmVyYXRvcj4gY3JlYXRlR2VuZXJhdG9yKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0
b3IpCisgICAgeworICAgICAgICByZXR1cm4gY3JlYXRlU2hhcmVkVGFzazxHZW5lcmF0b3JGdW5j
dGlvbj4oZnVuY3Rvcik7CisgICAgfQorICAgIAorICAgIExhenlTbG93UGF0aCgKKyAgICAgICAg
Q29kZUxvY2F0aW9uTGFiZWwgcGF0Y2hwb2ludCwgQ29kZUxvY2F0aW9uTGFiZWwgZXhjZXB0aW9u
VGFyZ2V0LAorICAgICAgICBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywgQ2FsbFNp
dGVJbmRleCBjYWxsU2l0ZUluZGV4LCBSZWZQdHI8R2VuZXJhdG9yPik7CisKKyAgICB+TGF6eVNs
b3dQYXRoKCk7CisKKyAgICBDb2RlTG9jYXRpb25MYWJlbCBwYXRjaHBvaW50KCkgY29uc3QgeyBy
ZXR1cm4gbV9wYXRjaHBvaW50OyB9CisgICAgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3Rl
cnMoKSBjb25zdCB7IHJldHVybiBtX3VzZWRSZWdpc3RlcnM7IH0KKyAgICBDYWxsU2l0ZUluZGV4
IGNhbGxTaXRlSW5kZXgoKSBjb25zdCB7IHJldHVybiBtX2NhbGxTaXRlSW5kZXg7IH0KKworICAg
IHZvaWQgZ2VuZXJhdGUoQ29kZUJsb2NrKik7CisKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYg
c3R1YigpIGNvbnN0IHsgcmV0dXJuIG1fc3R1YjsgfQorCitwcml2YXRlOgorICAgIENvZGVMb2Nh
dGlvbkxhYmVsIG1fcGF0Y2hwb2ludDsKKyAgICBDb2RlTG9jYXRpb25MYWJlbCBtX2V4Y2VwdGlv
blRhcmdldDsKKyAgICBSZWdpc3RlclNldCBtX3VzZWRSZWdpc3RlcnM7CisgICAgQ2FsbFNpdGVJ
bmRleCBtX2NhbGxTaXRlSW5kZXg7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG1fc3R1YjsK
KyAgICBSZWZQdHI8R2VuZXJhdG9yPiBtX2dlbmVyYXRvcjsKK307CisKK30gfSAvLyBuYW1lc3Bh
Y2UgSlNDOjpGVEwKKworI2VuZGlmIC8vIEZUTExhenlTbG93UGF0aF9oCisKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTGF6eVNsb3dQYXRoQ2FsbC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTGF6eVNsb3dQYXRoQ2FsbC5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMYXp5U2xvd1BhdGhDYWxsLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAx
NSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
CisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisg
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEZUTExhenlTbG93UGF0aENhbGxfaAorI2Rl
ZmluZSBGVExMYXp5U2xvd1BhdGhDYWxsX2gKKworI2luY2x1ZGUgIkNvZGVCbG9jay5oIgorI2lu
Y2x1ZGUgIkNvZGVMb2NhdGlvbi5oIgorI2luY2x1ZGUgIkZUTExhenlTbG93UGF0aC5oIgorI2lu
Y2x1ZGUgIkZUTFNsb3dQYXRoQ2FsbC5oIgorI2luY2x1ZGUgIkZUTFRodW5rcy5oIgorI2luY2x1
ZGUgIkdQUkluZm8uaCIKKyNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlckNvZGVSZWYuaCIKKyNpbmNs
dWRlICJSZWdpc3RlclNldC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFJlc3VsdFR5cGUsIHR5cGVuYW1lLi4uIEFyZ3VtZW50VHlwZXM+
CitSZWZQdHI8TGF6eVNsb3dQYXRoOjpHZW5lcmF0b3I+IGNyZWF0ZUxhenlDYWxsR2VuZXJhdG9y
KAorICAgIEZ1bmN0aW9uUHRyIGZ1bmN0aW9uLCBSZXN1bHRUeXBlIHJlc3VsdCwgQXJndW1lbnRU
eXBlcy4uLiBhcmd1bWVudHMpCit7CisgICAgcmV0dXJuIExhenlTbG93UGF0aDo6Y3JlYXRlR2Vu
ZXJhdG9yKAorICAgICAgICBbPV0gKENDYWxsSGVscGVycyYgaml0LCBMYXp5U2xvd1BhdGg6Okdl
bmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICAgICAgY2FsbE9wZXJhdGlvbigKKyAg
ICAgICAgICAgICAgICBwYXJhbXMubGF6eVNsb3dQYXRoLT51c2VkUmVnaXN0ZXJzKCksIGppdCwg
cGFyYW1zLmxhenlTbG93UGF0aC0+Y2FsbFNpdGVJbmRleCgpLAorICAgICAgICAgICAgICAgIHBh
cmFtcy5leGNlcHRpb25KdW1wcywgZnVuY3Rpb24sIHJlc3VsdCwgYXJndW1lbnRzLi4uKTsKKyAg
ICAgICAgICAgIHBhcmFtcy5kb25lSnVtcHMuYXBwZW5kKGppdC5qdW1wKCkpOworICAgICAgICB9
KTsKK30KKworfSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRlRMTGF6eVNs
b3dQYXRoQ2FsbF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJE
RkdUb0xMVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
TG93ZXJERkdUb0xMVk0uY3BwCShyZXZpc2lvbiAxOTA3NDkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksNiAr
MzksNyBAQAogI2luY2x1ZGUgIkZUTEZvck9TUkVudHJ5SklUQ29kZS5oIgogI2luY2x1ZGUgIkZU
TEZvcm1hdHRlZFZhbHVlLmgiCiAjaW5jbHVkZSAiRlRMSW5saW5lQ2FjaGVTaXplLmgiCisjaW5j
bHVkZSAiRlRMTGF6eVNsb3dQYXRoQ2FsbC5oIgogI2luY2x1ZGUgIkZUTExvd2VyZWROb2RlVmFs
dWUuaCIKICNpbmNsdWRlICJGVExPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiRlRMT3V0cHV0Lmgi
CkBAIC01MCw2ICs1MSw3IEBACiAjaW5jbHVkZSAiT3BlcmFuZHNJbmxpbmVzLmgiCiAjaW5jbHVk
ZSAiU2NvcGVkQXJndW1lbnRzLmgiCiAjaW5jbHVkZSAiU2NvcGVkQXJndW1lbnRzVGFibGUuaCIK
KyNpbmNsdWRlICJTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaCIKICNpbmNsdWRlICJWaXJ0dWFs
UmVnaXN0ZXIuaCIKICNpbmNsdWRlICJXYXRjaGRvZy5oIgogI2luY2x1ZGUgPGF0b21pYz4KQEAg
LTUwNjYsNyArNTA2OCw3IEBAIHByaXZhdGU6CiAgICAgICAgIGlmIChKU1N0cmluZyogc3RyaW5n
ID0gbV9ub2RlLT5jaGlsZDEoKS0+ZHluYW1pY0Nhc3RDb25zdGFudDxKU1N0cmluZyo+KCkpIHsK
ICAgICAgICAgICAgIGlmIChzdHJpbmctPnRyeUdldFZhbHVlSW1wbCgpICYmIHN0cmluZy0+dHJ5
R2V0VmFsdWVJbXBsKCktPmlzQXRvbWljKCkpIHsKIAotICAgICAgICAgICAgICAgIGNvbnN0IGF1
dG8gc3RyID0gc3RhdGljX2Nhc3Q8Y29uc3QgQXRvbWljU3RyaW5nSW1wbCo+KHN0cmluZy0+dHJ5
R2V0VmFsdWVJbXBsKCkpOworICAgICAgICAgICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiBzdHIg
PSBiaXR3aXNlX2Nhc3Q8VW5pcXVlZFN0cmluZ0ltcGwqPihzdHJpbmctPnRyeUdldFZhbHVlSW1w
bCgpKTsKICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzdGFja21hcElEID0gbV9zdGFja21hcElE
cysrOwogICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgTFZhbHVlIGNhbGwgPSBtX291dC5j
YWxsKApAQCAtNjMwMyw5ICs2MzA1LDE0IEBAIHByaXZhdGU6CiAgICAgICAgIG1fb3V0Lmp1bXAo
Y29udGludWF0aW9uKTsKICAgICAgICAgCiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKHNsb3dQYXRo
LCBjb250aW51YXRpb24pOwotICAgICAgICAKLSAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd1Jl
c3VsdCA9IG1fb3V0LmFuY2hvcih2bUNhbGwoCi0gICAgICAgICAgICBtX291dC5vcGVyYXRpb24o
b3BlcmF0aW9uTmV3T2JqZWN0KSwgbV9jYWxsRnJhbWUsIG1fb3V0LmNvbnN0SW50UHRyKHN0cnVj
dHVyZSkpKTsKKworICAgICAgICBMVmFsdWUgc2xvd1Jlc3VsdFZhbHVlID0gbGF6eVNsb3dQYXRo
KAorICAgICAgICAgICAgWz1dIChjb25zdCBWZWN0b3I8TG9jYXRpb24+JiBsb2NhdGlvbnMpIC0+
IFJlZlB0cjxMYXp5U2xvd1BhdGg6OkdlbmVyYXRvcj4geworICAgICAgICAgICAgICAgIHJldHVy
biBjcmVhdGVMYXp5Q2FsbEdlbmVyYXRvcigKKyAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9u
TmV3T2JqZWN0LCBsb2NhdGlvbnNbMF0uZGlyZWN0R1BSKCksCisgICAgICAgICAgICAgICAgICAg
IENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpKTsKKyAgICAgICAgICAgIH0p
OworICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93UmVzdWx0ID0gbV9vdXQuYW5jaG9yKHNsb3dS
ZXN1bHRWYWx1ZSk7CiAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKICAgICAgICAg
CiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwpAQCAtNzE2
Myw2ICs3MTcwLDg2IEBAIHByaXZhdGU6CiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVh
dGlvbiwgbGFzdE5leHQpOwogICAgICAgICByZXR1cm4gbV9vdXQucGhpKG1fb3V0LmludDMyLCBm
YXN0UmVzdWx0LCBzbG93UmVzdWx0KTsKICAgICB9CisKKyAgICAvLyBUaGlzIGlzIGEgbWVjaGFu
aXNtIGZvciBjcmVhdGluZyBhIGNvZGUgZ2VuZXJhdG9yIHRoYXQgZmlsbHMgaW4gYSBnYXAgaW4g
dGhlIGNvZGUgdXNpbmcgb3VyCisgICAgLy8gb3duIE1hY3JvQXNzZW1ibGVyLiBUaGlzIGlzIHVz
ZWZ1bCBmb3Igc2xvdyBwYXRocyB0aGF0IGludm9sdmUgYSBsb3Qgb2YgY29kZSBhbmQgd2UgZG9u
J3Qgd2FudAorICAgIC8vIHRvIHBheSB0aGUgcHJpY2Ugb2YgTExWTSBvcHRpbWl6aW5nIGl0LiBJ
dCdzIGFsc28gZ29vZCB3aGVuIHRoZSBzbG93IHBhdGggbWF5IGludm9sdmUgYSBsb3Qgb2YKKyAg
ICAvLyBjb2RlLiBBIGxhenkgc2xvdyBwYXRoIHdpbGwgb25seSBiZSBleGVjdXRlZCBpZiBpdCBh
Y3R1YWxseSBleGVjdXRlcy4gT24gdGhlIG90aGVyIGhhbmQsIGEKKyAgICAvLyBsYXp5IHNsb3cg
cGF0aCBhbHdheXMgaW5jdXJzIHRoZSBjb3N0IG9mIHR3byBhZGRpdGlvbmFsIGp1bXBzLiBBbHNv
LCB0aGUgbGF6eSBzbG93IHBhdGgncworICAgIC8vIHJlZ2lzdGVyIGFsbG9jYXRpb24gc3RhdGUg
aXMgc2xhdmVkIHRvIHdoYXRldmVyIExMVk0gZGlkLCBzbyB5b3UgaGF2ZSB0byB1c2UgYQorICAg
IC8vIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvciB0byB0cnkgdG8gdXNlIHNvbWUgdW51c2VkIHJl
Z2lzdGVycyBhbmQgeW91IG1heSBoYXZlIHRvIHNwaWxsIHRvIHRvcAorICAgIC8vIG9mIHN0YWNr
IGlmIHRoZXJlIGFyZW4ndCBlbm91Z2ggcmVnaXN0ZXJzIGF2YWlsYWJsZS4KKyAgICAvLworICAg
IC8vIExhenkgc2xvdyBwYXRocyBpbnZvbHZlIHRocmVlIGRpZmZlcmVudCBzdGFnZXMgb2YgZXhl
Y3V0aW9uLiBFYWNoIHN0YWdlIGhhcyB1bmlxdWUKKyAgICAvLyBjYXBhYmlsaXRpZXMgYW5kIGtu
b3dsZWRnZS4gVGhlIHN0YWdlcyBhcmU6CisgICAgLy8KKyAgICAvLyAxKSBERkctPkxMVk0gbG93
ZXJpbmcsIGkuZS4gY29kZSB0aGF0IHJ1bnMgaW4gdGhpcyBwaGFzZS4gTG93ZXJpbmcgaXMgdGhl
IGxhc3QgdGltZSB5b3Ugd2lsbAorICAgIC8vICAgIGhhdmUgYWNjZXNzIHRvIExWYWx1ZXMuIElm
IHRoZXJlIGlzIGFuIExWYWx1ZSB0aGF0IG5lZWRzIHRvIGJlIGZlZCBhcyBpbnB1dCB0byBhIGxh
enkgc2xvdworICAgIC8vICAgIHBhdGgsIHRoZW4geW91IG11c3QgcGFzcyBpdCBhcyBhbiBhcmd1
bWVudCBoZXJlIChhcyBvbmUgb2YgdGhlIHZhcmFyZ3MgYXJndW1lbnRzIGFmdGVyIHRoZQorICAg
IC8vICAgIGZ1bmN0b3IpLiBCdXQsIGxvd2VyaW5nIGRvZXNuJ3Qga25vdyB3aGljaCByZWdpc3Rl
cnMgd2lsbCBiZSB1c2VkIGZvciB0aG9zZSBMVmFsdWVzLiBIZW5jZQorICAgIC8vICAgIHlvdSBw
YXNzIGEgbGFtYmRhIHRvIGxhenlTbG93UGF0aCgpIGFuZCB0aGF0IGxhbWJkYSB3aWxsIHJ1biBk
dXJpbmcgc3RhZ2UgKDIpOgorICAgIC8vCisgICAgLy8gMikgRlRMQ29tcGlsZS5jcHAncyBmaXhG
dW5jdGlvbkJhc2VkT25TdGFja01hcHMuIFRoaXMgY29kZSwgd2hpY2ggd2UgY2FsbCAiY29tcGls
aW5nIiwgaXMgdGhlCisgICAgLy8gICAgb25seSBzdGFnZSBhdCB3aGljaCB3ZSBrbm93IHRoZSBt
YXBwaW5nIGZyb20gYXJndW1lbnRzIHBhc3NlZCB0byB0aGlzIG1ldGhvZCBpbiAoMSkgYW5kIHRo
ZQorICAgIC8vICAgIHJlZ2lzdGVycyB0aGF0IExMVk0gc2VsZWN0ZWQgZm9yIHRob3NlIGFyZ3Vt
ZW50cy4gWW91IGRvbid0IGFjdHVhbGx5IHdhbnQgdG8gZ2VuZXJhdGUgYW55CisgICAgLy8gICAg
Y29kZSBoZXJlLCBzaW5jZSB0aGVuIHRoZSBzbG93IHBhdGggd291bGRuJ3QgYWN0dWFsbHkgYmUg
bGF6aWx5IGdlbmVyYXRlZC4gSW5zdGVhZCwgeW91CisgICAgLy8gICAgd2FudCB0byBzYXZlIHRo
ZSByZWdpc3RlcnMgYmVpbmcgdXNlZCBmb3IgdGhlIGFyZ3VtZW50cyBhbmQgZGVmZXIgY29kZSBn
ZW5lcmF0aW9uIHRvIHN0YWdlCisgICAgLy8gICAgKDMpIGJ5IGNyZWF0aW5nIGFuZCByZXR1cm5p
bmcgYSBMYXp5U2xvd1BhdGg6OkdlbmVyYXRvcjoKKyAgICAvLworICAgIC8vIDMpIExhenlTbG93
UGF0aCdzIGdlbmVyYXRlKCkgbWV0aG9kLiBUaGlzIGNvZGUgcnVucyBpbiByZXNwb25zZSB0byB0
aGUgbGF6eSBzbG93IHBhdGgKKyAgICAvLyAgICBleGVjdXRpbmcgZm9yIHRoZSBmaXJzdCB0aW1l
LiBJdCB3aWxsIGNhbGwgdGhlIGdlbmVyYXRvciB5b3UgY3JlYXRlZCBpbiBzdGFnZSAoMikuCisg
ICAgLy8KKyAgICAvLyBBIHR5cGljYWwgdXNlIG9mIGxhenlTbG93UGF0aCgpIHdpbGwgbG9vayBs
aWtlIHRoZSBleGFtcGxlIGJlbG93LCB3aGljaCBqdXN0IGNyZWF0ZXMgYSBzbG93CisgICAgLy8g
cGF0aCB0aGF0IGFkZHMgc29tZSB2YWx1ZSB0byB0aGUgaW5wdXQgYW5kIHJldHVybnMgaXQuCisg
ICAgLy8KKyAgICAvLyAvLyBTdGFnZSAoMSkgaXMgaGVyZS4gVGhpcyBpcyB5b3VyIGxhc3QgY2hh
bmNlIHRvIGZpZ3VyZSBvdXQgd2hpY2ggTFZhbHVlcyB0byB1c2UgYXMgaW5wdXRzLgorICAgIC8v
IC8vIE5vdGljZSBob3cgd2UgcGFzcyAiaW5wdXQiIGFzIGFuIGFyZ3VtZW50IHRvIGxhenlTbG93
UGF0aCgpLgorICAgIC8vIExWYWx1ZSBpbnB1dCA9IC4uLjsKKyAgICAvLyBpbnQgYWRkZW5kID0g
Li4uOworICAgIC8vIExWYWx1ZSBvdXRwdXQgPSBsYXp5U2xvd1BhdGgoCisgICAgLy8gICAgIFs9
XSAoY29uc3QgVmVjdG9yPExvY2F0aW9uPiYgbG9jYXRpb25zKSAtPiBSZWZQdHI8TGF6eVNsb3dQ
YXRoOjpHZW5lcmF0b3I+IHsKKyAgICAvLyAgICAgICAgIC8vIFN0YWdlICgyKSBpcyBoZXJlLiBU
aGlzIGlzIHlvdXIgbGFzdCBjaGFuY2UgdG8gZmlndXJlIG91dCB3aGljaCByZWdpc3RlcnMgYXJl
IHVzZWQKKyAgICAvLyAgICAgICAgIC8vIGZvciB3aGljaCB2YWx1ZXMuIExvY2F0aW9uIHplcm8g
aXMgYWx3YXlzIHRoZSByZXR1cm4gdmFsdWUuIFlvdSBjYW4gaWdub3JlIGl0IGlmCisgICAgLy8g
ICAgICAgICAvLyB5b3UgZG9uJ3Qgd2FudCB0byByZXR1cm4gYW55dGhpbmcuIExvY2F0aW9uIDEg
aXMgdGhlIHJlZ2lzdGVyIGZvciB0aGUgZmlyc3QKKyAgICAvLyAgICAgICAgIC8vIGFyZ3VtZW50
IHRvIHRoZSBsYXp5U2xvd1BhdGgoKSwgaS5lLiAiaW5wdXQiLiBOb3RlIHRoYXQgdGhlIExvY2F0
aW9uIG9iamVjdCBjb3VsZAorICAgIC8vICAgICAgICAgLy8gYWxzbyBob2xkIGFuIEZQUiwgaWYg
eW91IGFyZSBwYXNzaW5nIGEgZG91YmxlLgorICAgIC8vICAgICAgICAgR1BSUmVnIG91dHB1dEdQ
UiA9IGxvY2F0aW9uc1swXS5kaXJlY3RHUFIoKTsKKyAgICAvLyAgICAgICAgIEdQUlJlZyBpbnB1
dEdQUiA9IGxvY2F0aW9uc1sxXS5kaXJlY3RHUFIoKTsKKyAgICAvLyAgICAgICAgIHJldHVybiBM
YXp5U2xvd1BhdGg6OmNyZWF0ZUdlbmVyYXRvcigKKyAgICAvLyAgICAgICAgICAgICBbPV0gKEND
YWxsSGVscGVycyYgaml0LCBMYXp5U2xvd1BhdGg6OkdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykg
eworICAgIC8vICAgICAgICAgICAgICAgICAvLyBTdGFnZSAoMykgaXMgaGVyZS4gVGhpcyBpcyB3
aGVuIHlvdSBnZW5lcmF0ZSBjb2RlLiBZb3UgaGF2ZSBhY2Nlc3MgdG8gdGhlCisgICAgLy8gICAg
ICAgICAgICAgICAgIC8vIHJlZ2lzdGVycyB5b3UgY29sbGVjdGVkIGluIHN0YWdlICgyKSBiZWNh
dXNlIHRoaXMgbGFtYmRhIGNsb3NlcyBvdmVyIHRob3NlCisgICAgLy8gICAgICAgICAgICAgICAg
IC8vIHZhcmlhYmxlcyAob3V0cHV0R1BSIGFuZCBpbnB1dEdQUikuIFlvdSBhbHNvIGhhdmUgYWNj
ZXNzIHRvIHdoYXRldmVyIGV4dHJhCisgICAgLy8gICAgICAgICAgICAgICAgIC8vIGRhdGEgeW91
IGNvbGxlY3RlZCBpbiBzdGFnZSAoMSksIHN1Y2ggYXMgdGhlIGFkZGVuZCBpbiB0aGlzIGNhc2Uu
CisgICAgLy8gICAgICAgICAgICAgICAgIGppdC5hZGQzMihUcnVzdGVkSW1tMzIoYWRkZW5kKSwg
aW5wdXRHUFIsIG91dHB1dEdQUik7CisgICAgLy8gICAgICAgICAgICAgICAgIC8vIFlvdSBoYXZl
IHRvIGVuZCBieSBqdW1waW5nIHRvIGRvbmUuIFRoZXJlIGlzIG5vdGhpbmcgdG8gZmFsbCB0aHJv
dWdoIHRvLgorICAgIC8vICAgICAgICAgICAgICAgICAvLyBZb3UgY2FuIGFsc28ganVtcCB0byB0
aGUgZXhjZXB0aW9uIGhhbmRsZXIgKHNlZSBMYXp5U2xvd1BhdGguaCBmb3IgbW9yZQorICAgIC8v
ICAgICAgICAgICAgICAgICAvLyBpbmZvKS4gTm90ZSB0aGF0IGN1cnJlbnRseSB5b3UgY2Fubm90
IE9TUiBleGl0LgorICAgIC8vICAgICAgICAgICAgICAgICBwYXJhbXMuZG9uZUp1bXBzLmFwcGVu
ZChqaXQuanVtcCgpKTsKKyAgICAvLyAgICAgICAgICAgICB9KTsKKyAgICAvLyAgICAgfSwKKyAg
ICAvLyAgICAgaW5wdXQpOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3IsIHR5cGVuYW1l
Li4uIEFyZ3VtZW50VHlwZXM+CisgICAgTFZhbHVlIGxhenlTbG93UGF0aChjb25zdCBGdW5jdG9y
JiBmdW5jdG9yLCBBcmd1bWVudFR5cGVzLi4uIGFyZ3VtZW50cykKKyAgICB7CisgICAgICAgIHVu
c2lnbmVkIHN0YWNrbWFwSUQgPSBtX3N0YWNrbWFwSURzKys7CisKKyAgICAgICAgTFZhbHVlIGNh
bGwgPSBtX291dC5jYWxsKAorICAgICAgICAgICAgbV9vdXQucGF0Y2hwb2ludEludDY0SW50cmlu
c2ljKCksCisgICAgICAgICAgICBtX291dC5jb25zdEludDY0KHN0YWNrbWFwSUQpLCBtX291dC5j
b25zdEludDMyKE1hY3JvQXNzZW1ibGVyOjptYXhKdW1wUmVwbGFjZW1lbnRTaXplKCkpLAorICAg
ICAgICAgICAgY29uc3ROdWxsKG1fb3V0LnJlZjgpLCBtX291dC5jb25zdEludDMyKHNpemVvZi4u
Lihhcmd1bWVudHMpKSwgYXJndW1lbnRzLi4uKTsKKyAgICAgICAgc2V0SW5zdHJ1Y3Rpb25DYWxs
aW5nQ29udmVudGlvbihjYWxsLCBMTFZNQW55UmVnQ2FsbENvbnYpOworCisgICAgICAgIENhbGxT
aXRlSW5kZXggY2FsbFNpdGVJbmRleCA9CisgICAgICAgICAgICBtX2Z0bFN0YXRlLmppdENvZGUt
PmNvbW1vbi5hZGRDb2RlT3JpZ2luKG1fbm9kZS0+b3JpZ2luLnNlbWFudGljKTsKKyAgICAgICAg
CisgICAgICAgIFJlZlB0cjxMYXp5U2xvd1BhdGhMaW5rZXJUYXNrPiBsaW5rZXIgPQorICAgICAg
ICAgICAgY3JlYXRlU2hhcmVkVGFzazxMYXp5U2xvd1BhdGhMaW5rZXJGdW5jdGlvbj4oZnVuY3Rv
cik7CisKKyAgICAgICAgbV9mdGxTdGF0ZS5sYXp5U2xvd1BhdGhzLmFwcGVuZChMYXp5U2xvd1Bh
dGhEZXNjcmlwdG9yKHN0YWNrbWFwSUQsIGNhbGxTaXRlSW5kZXgsIGxpbmtlcikpOworCisgICAg
ICAgIHJldHVybiBjYWxsOworICAgIH0KICAgICAKICAgICB2b2lkIHNwZWN1bGF0ZSgKICAgICAg
ICAgRXhpdEtpbmQga2luZCwgRm9ybWF0dGVkVmFsdWUgbG93VmFsdWUsIE5vZGUqIGhpZ2hWYWx1
ZSwgTFZhbHVlIGZhaWxDb25kaXRpb24pCkBAIC04MjY3LDMzICs4MzU0LDY3IEBAIHByaXZhdGU6
CiAKICAgICB2b2lkIGVtaXRTdG9yZUJhcnJpZXIoTFZhbHVlIGJhc2UpCiAgICAgewotICAgICAg
ICBMQmFzaWNCbG9jayBpc01hcmtlZEFuZE5vdFJlbWVtYmVyZWQgPSBGVExfTkVXX0JMT0NLKG1f
b3V0LCAoIlN0b3JlIGJhcnJpZXIgaXMgbWFya2VkIGJsb2NrIikpOwotICAgICAgICBMQmFzaWNC
bG9jayBidWZmZXJIYXNTcGFjZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiU3RvcmUgYmFycmll
ciBidWZmZXIgaGFzIHNwYWNlIikpOwotICAgICAgICBMQmFzaWNCbG9jayBidWZmZXJJc0Z1bGwg
PSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIlN0b3JlIGJhcnJpZXIgYnVmZmVyIGlzIGZ1bGwiKSk7
CisgICAgICAgIExCYXNpY0Jsb2NrIHNsb3dQYXRoID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJT
dG9yZSBiYXJyaWVyIHNsb3cgcGF0aCIpKTsKICAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0
aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJTdG9yZSBiYXJyaWVyIGNvbnRpbnVhdGlvbiIp
KTsKIAotICAgICAgICAvLyBDaGVjayB0aGUgbWFyayBieXRlLiAKLSAgICAgICAgbV9vdXQuYnJh
bmNoKAotICAgICAgICAgICAgbV9vdXQubm90WmVybzgobG9hZENlbGxTdGF0ZShiYXNlKSksIHVz
dWFsbHkoY29udGludWF0aW9uKSwgcmFyZWx5KGlzTWFya2VkQW5kTm90UmVtZW1iZXJlZCkpOwot
Ci0gICAgICAgIC8vIEFwcGVuZCB0byB0aGUgd3JpdGUgYmFycmllciBidWZmZXIuCi0gICAgICAg
IExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oaXNNYXJrZWRBbmROb3RSZW1l
bWJlcmVkLCBidWZmZXJIYXNTcGFjZSk7Ci0gICAgICAgIExWYWx1ZSBjdXJyZW50QnVmZmVySW5k
ZXggPSBtX291dC5sb2FkMzIobV9vdXQuYWJzb2x1dGUodm0oKS5oZWFwLndyaXRlQmFycmllckJ1
ZmZlcigpLmN1cnJlbnRJbmRleEFkZHJlc3MoKSkpOwotICAgICAgICBMVmFsdWUgYnVmZmVyQ2Fw
YWNpdHkgPSBtX291dC5jb25zdEludDMyKHZtKCkuaGVhcC53cml0ZUJhcnJpZXJCdWZmZXIoKS5j
YXBhY2l0eSgpKTsKICAgICAgICAgbV9vdXQuYnJhbmNoKAotICAgICAgICAgICAgbV9vdXQubGVz
c1RoYW4oY3VycmVudEJ1ZmZlckluZGV4LCBidWZmZXJDYXBhY2l0eSksCi0gICAgICAgICAgICB1
c3VhbGx5KGJ1ZmZlckhhc1NwYWNlKSwgcmFyZWx5KGJ1ZmZlcklzRnVsbCkpOworICAgICAgICAg
ICAgbV9vdXQubm90WmVybzgobG9hZENlbGxTdGF0ZShiYXNlKSksIHVzdWFsbHkoY29udGludWF0
aW9uKSwgcmFyZWx5KHNsb3dQYXRoKSk7CiAKLSAgICAgICAgLy8gQnVmZmVyIGhhcyBzcGFjZSwg
c3RvcmUgdG8gaXQuCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKGJ1ZmZlckhhc1NwYWNlLCBidWZm
ZXJJc0Z1bGwpOwotICAgICAgICBMVmFsdWUgd3JpdGVCYXJyaWVyQnVmZmVyQmFzZSA9IG1fb3V0
LmNvbnN0SW50UHRyKHZtKCkuaGVhcC53cml0ZUJhcnJpZXJCdWZmZXIoKS5idWZmZXIoKSk7Ci0g
ICAgICAgIG1fb3V0LnN0b3JlUHRyKGJhc2UsIG1fb3V0LmJhc2VJbmRleChtX2hlYXBzLldyaXRl
QmFycmllckJ1ZmZlcl9idWZmZXJDb250ZW50cywgd3JpdGVCYXJyaWVyQnVmZmVyQmFzZSwgbV9v
dXQuemVyb0V4dFB0cihjdXJyZW50QnVmZmVySW5kZXgpKSk7Ci0gICAgICAgIG1fb3V0LnN0b3Jl
MzIobV9vdXQuYWRkKGN1cnJlbnRCdWZmZXJJbmRleCwgbV9vdXQuY29uc3RJbnQzMigxKSksIG1f
b3V0LmFic29sdXRlKHZtKCkuaGVhcC53cml0ZUJhcnJpZXJCdWZmZXIoKS5jdXJyZW50SW5kZXhB
ZGRyZXNzKCkpKTsKLSAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworICAgICAgICBM
QmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKHNsb3dQYXRoLCBjb250aW51YXRp
b24pOwogCi0gICAgICAgIC8vIEJ1ZmZlciBpcyBvdXQgb2Ygc3BhY2UsIGZsdXNoIGl0LgotICAg
ICAgICBtX291dC5hcHBlbmRUbyhidWZmZXJJc0Z1bGwsIGNvbnRpbnVhdGlvbik7Ci0gICAgICAg
IHZtQ2FsbE5vRXhjZXB0aW9ucyhtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uRmx1c2hXcml0ZUJh
cnJpZXJCdWZmZXIpLCBtX2NhbGxGcmFtZSwgYmFzZSk7CisgICAgICAgIC8vIFdlIGVtaXQgdGhl
IHN0b3JlIGJhcnJpZXIgc2xvdyBwYXRoIGxhemlseS4gSW4gYSBsb3Qgb2YgY2FzZXMsIHRoaXMg
d2lsbCBuZXZlciBmaXJlLiBBbmQKKyAgICAgICAgLy8gd2hlbiBpdCBkb2VzIGZpcmUsIGl0IG1h
a2VzIHNlbnNlIGZvciB1cyB0byBnZW5lcmF0ZSB0aGlzIGNvZGUgdXNpbmcgb3VyIEpJVCByYXRo
ZXIgdGhhbgorICAgICAgICAvLyB3YXN0aW5nIExMVk0ncyB0aW1lIG9wdGltaXppbmcgaXQuCisg
ICAgICAgIGxhenlTbG93UGF0aCgKKyAgICAgICAgICAgIFs9XSAoY29uc3QgVmVjdG9yPExvY2F0
aW9uPiYgbG9jYXRpb25zKSAtPiBSZWZQdHI8TGF6eVNsb3dQYXRoOjpHZW5lcmF0b3I+IHsKKyAg
ICAgICAgICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGxvY2F0aW9uc1sxXS5kaXJlY3RHUFIoKTsK
KworICAgICAgICAgICAgICAgIHJldHVybiBMYXp5U2xvd1BhdGg6OmNyZWF0ZUdlbmVyYXRvcigK
KyAgICAgICAgICAgICAgICAgICAgWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgTGF6eVNsb3dQYXRo
OjpHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFJl
Z2lzdGVyU2V0IHVzZWRSZWdpc3RlcnMgPSBwYXJhbXMubGF6eVNsb3dQYXRoLT51c2VkUmVnaXN0
ZXJzKCk7CisgICAgICAgICAgICAgICAgICAgICAgICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3Ig
c2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yKHVzZWRSZWdpc3RlcnMpOworICAgICAgICAgICAgICAg
ICAgICAgICAgc2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmxvY2soYmFzZUdQUik7CisKKyAgICAg
ICAgICAgICAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNoMSA9IHNjcmF0Y2hSZWdpc3RlckFsbG9j
YXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIEdQUlJl
ZyBzY3JhdGNoMiA9IHNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIo
KTsKKworICAgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgYnl0ZXNQdXNoZWQgPQorICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5wcmVzZXJ2
ZVJldXNlZFJlZ2lzdGVyc0J5UHVzaGluZyhqaXQpOworCisgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBXZSd2ZSBhbHJlYWR5IHNhdmVkIHRoZXNlLCBzbyB3aGVuIHdlIG1ha2UgYSBzbG93IHBh
dGggY2FsbCwgd2UgZG9uJ3QgaGF2ZQorICAgICAgICAgICAgICAgICAgICAgICAgLy8gdG8gc2F2
ZSB0aGVtIGFnYWluLgorICAgICAgICAgICAgICAgICAgICAgICAgdXNlZFJlZ2lzdGVycy5leGNs
dWRlKFJlZ2lzdGVyU2V0KHNjcmF0Y2gxLCBzY3JhdGNoMikpOworCisgICAgICAgICAgICAgICAg
ICAgICAgICBXcml0ZUJhcnJpZXJCdWZmZXImIHdyaXRlQmFycmllckJ1ZmZlciA9IGppdC52bSgp
LT5oZWFwLndyaXRlQmFycmllckJ1ZmZlcigpOworICAgICAgICAgICAgICAgICAgICAgICAgaml0
LmxvYWQzMih3cml0ZUJhcnJpZXJCdWZmZXIuY3VycmVudEluZGV4QWRkcmVzcygpLCBzY3JhdGNo
Mik7CisgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgbmVlZFRvRmx1
c2ggPSBqaXQuYnJhbmNoMzIoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpBYm92ZU9yRXF1YWwsIHNjcmF0Y2gyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHdyaXRlQmFycmllckJ1ZmZlci5jYXBhY2l0eSgp
KSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGppdC5hZGQzMihDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW0zMigxKSwgc2NyYXRjaDIpOworICAgICAgICAgICAgICAgICAgICAgICAgaml0LnN0
b3JlMzIoc2NyYXRjaDIsIHdyaXRlQmFycmllckJ1ZmZlci5jdXJyZW50SW5kZXhBZGRyZXNzKCkp
OworCisgICAgICAgICAgICAgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW1QdHIod3JpdGVCYXJyaWVyQnVmZmVyLmJ1ZmZlcigpKSwgc2NyYXRjaDEpOworICAgICAg
ICAgICAgICAgICAgICAgICAgaml0LnN0b3JlUHRyKAorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGJhc2VHUFIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpC
YXNlSW5kZXgoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmF0Y2gxLCBzY3Jh
dGNoMiwgQ0NhbGxIZWxwZXJzOjpTY2FsZVB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgc3RhdGljX2Nhc3Q8aW50MzJfdD4oLXNpemVvZih2b2lkKikpKSk7CisKKyAgICAgICAg
ICAgICAgICAgICAgICAgIHNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5yZXN0b3JlUmV1c2VkUmVn
aXN0ZXJzQnlQb3BwaW5nKGppdCwgYnl0ZXNQdXNoZWQpOworCisgICAgICAgICAgICAgICAgICAg
ICAgICBwYXJhbXMuZG9uZUp1bXBzLmFwcGVuZChqaXQuanVtcCgpKTsKKworICAgICAgICAgICAg
ICAgICAgICAgICAgbmVlZFRvRmx1c2gubGluaygmaml0KTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGNhbGxPcGVyYXRpb24oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlZFJlZ2lz
dGVycywgaml0LCBwYXJhbXMubGF6eVNsb3dQYXRoLT5jYWxsU2l0ZUluZGV4KCksCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgcGFyYW1zLmV4Y2VwdGlvbkp1bXBzLCBvcGVyYXRpb25GbHVz
aFdyaXRlQmFycmllckJ1ZmZlciwgSW52YWxpZEdQUlJlZywKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBiYXNlR1BSKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNjcmF0Y2hSZWdpc3Rl
ckFsbG9jYXRvci5yZXN0b3JlUmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5nKGppdCwgYnl0ZXNQdXNo
ZWQpOworICAgICAgICAgICAgICAgICAgICAgICAgcGFyYW1zLmRvbmVKdW1wcy5hcHBlbmQoaml0
Lmp1bXAoKSk7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfSwKKyAgICAg
ICAgICAgIGJhc2UpOwogICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CiAKICAgICAg
ICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDE5MDc0OSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTMwLDYgKzMwLDggQEAKIAogI2luY2x1ZGUgIkNsb25lZEFyZ3VtZW50cy5oIgog
I2luY2x1ZGUgIkRpcmVjdEFyZ3VtZW50cy5oIgorI2luY2x1ZGUgIkZUTEpJVENvZGUuaCIKKyNp
bmNsdWRlICJGVExMYXp5U2xvd1BhdGguaCIKICNpbmNsdWRlICJJbmxpbmVDYWxsRnJhbWUuaCIK
ICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNMZXhpY2FsRW52aXJvbm1lbnQu
aCIKQEAgLTM1Nyw2ICszNTksMjIgQEAgZXh0ZXJuICJDIiBKU0NlbGwqIEpJVF9PUEVSQVRJT04g
b3BlcmF0aQogICAgIH0KIH0KIAorZXh0ZXJuICJDIiB2b2lkKiBKSVRfT1BFUkFUSU9OIGNvbXBp
bGVGVExMYXp5U2xvd1BhdGgoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpbmRleCkKK3sKKyAg
ICBWTSYgdm0gPSBleGVjLT52bSgpOworCisgICAgLy8gV2UgY2Fubm90IEdDLiBXZSd2ZSBnb3Qg
cG9pbnRlcnMgaW4gZXZpbCBwbGFjZXMuCisgICAgRGVmZXJHQ0ZvckFXaGlsZSBkZWZlckdDKHZt
LmhlYXApOworCisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsK
KyAgICBKSVRDb2RlKiBqaXRDb2RlID0gY29kZUJsb2NrLT5qaXRDb2RlKCktPmZ0bCgpOworCisg
ICAgTGF6eVNsb3dQYXRoJiBsYXp5U2xvd1BhdGggPSAqaml0Q29kZS0+bGF6eVNsb3dQYXRoc1tp
bmRleF07CisgICAgbGF6eVNsb3dQYXRoLmdlbmVyYXRlKGNvZGVCbG9jayk7CisKKyAgICByZXR1
cm4gbGF6eVNsb3dQYXRoLnN0dWIoKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKK30KKwog
fSB9IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAogCiAjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9wZXJhdGlvbnMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9wZXJhdGlvbnMuaAkocmV2aXNpb24g
MTkwNzQ5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPcGVyYXRpb25zLmgJKHdv
cmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDggQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFj
ZSBGVEwgewogCitjbGFzcyBMYXp5U2xvd1BhdGg7CisKIGV4dGVybiAiQyIgewogCiBKU0NlbGwq
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3T2JqZWN0V2l0aEJ1dHRlcmZseShFeGVjU3RhdGUq
LCBTdHJ1Y3R1cmUqKSBXVEZfSU5URVJOQUw7CkBAIC00Myw2ICs0NSw4IEBAIEpTQ2VsbCogSklU
X09QRVJBVElPTiBvcGVyYXRpb25NYXRlcmlhbGkKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRp
b25Qb3B1bGF0ZU9iamVjdEluT1NSKAogICAgIEV4ZWNTdGF0ZSosIEV4aXRUaW1lT2JqZWN0TWF0
ZXJpYWxpemF0aW9uKiwgRW5jb2RlZEpTVmFsdWUqLCBFbmNvZGVkSlNWYWx1ZSopIFdURl9JTlRF
Uk5BTDsKIAordm9pZCogSklUX09QRVJBVElPTiBjb21waWxlRlRMTGF6eVNsb3dQYXRoKEV4ZWNT
dGF0ZSosIHVuc2lnbmVkKSBXVEZfSU5URVJOQUw7CisKIH0gLy8gZXh0ZXJuICJDIgogCiB9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TFNsb3dQYXRoQ2FsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExTbG93UGF0aENhbGwuY3BwCShyZXZpc2lvbiAxOTA3NDkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTFNsb3dQYXRoQ2FsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSAr
MSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE1IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzAs
MTg4ICszMCwxMTYgQEAKIAogI2luY2x1ZGUgIkNDYWxsSGVscGVycy5oIgogI2luY2x1ZGUgIkZU
TFN0YXRlLmgiCisjaW5jbHVkZSAiRlRMVGh1bmtzLmgiCiAjaW5jbHVkZSAiR1BSSW5mby5oIgog
I2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwg
ewogCi1uYW1lc3BhY2UgewotCiAvLyBUaGlzIGNvZGUgcmVsaWVzIG9uIHVzIGJlaW5nIDY0LWJp
dC4gRlRMIGlzIGN1cnJlbnRseSBhbHdheXMgNjQtYml0Lgogc3RhdGljIGNvbnN0IHNpemVfdCB3
b3JkU2l6ZSA9IDg7CiAKLS8vIFRoaXMgd2lsbCBiZSBhbiBSQUlJIHRoaW5neSB0aGF0IHdpbGwg
c2V0IHVwIHRoZSBuZWNlc3Nhcnkgc3RhY2sgc2l6ZXMgYW5kIG9mZnNldHMgYW5kIHN1Y2guCi1j
bGFzcyBDYWxsQ29udGV4dCB7Ci1wdWJsaWM6Ci0gICAgQ2FsbENvbnRleHQoCi0gICAgICAgIFN0
YXRlJiBzdGF0ZSwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsIENDYWxsSGVscGVy
cyYgaml0LAotICAgICAgICB1bnNpZ25lZCBudW1BcmdzLCBHUFJSZWcgcmV0dXJuUmVnaXN0ZXIp
Ci0gICAgICAgIDogbV9zdGF0ZShzdGF0ZSkKLSAgICAgICAgLCBtX3VzZWRSZWdpc3RlcnModXNl
ZFJlZ2lzdGVycykKLSAgICAgICAgLCBtX2ppdChqaXQpCi0gICAgICAgICwgbV9udW1BcmdzKG51
bUFyZ3MpCi0gICAgICAgICwgbV9yZXR1cm5SZWdpc3RlcihyZXR1cm5SZWdpc3RlcikKLSAgICB7
Ci0gICAgICAgIC8vIFdlIGRvbid0IGNhcmUgdGhhdCB5b3UncmUgdXNpbmcgY2FsbGVlLXNhdmUs
IHN0YWNrLCBvciBoYXJkd2FyZSByZWdpc3RlcnMuCi0gICAgICAgIG1fdXNlZFJlZ2lzdGVycy5l
eGNsdWRlKFJlZ2lzdGVyU2V0OjpzdGFja1JlZ2lzdGVycygpKTsKLSAgICAgICAgbV91c2VkUmVn
aXN0ZXJzLmV4Y2x1ZGUoUmVnaXN0ZXJTZXQ6OnJlc2VydmVkSGFyZHdhcmVSZWdpc3RlcnMoKSk7
Ci0gICAgICAgIG1fdXNlZFJlZ2lzdGVycy5leGNsdWRlKFJlZ2lzdGVyU2V0OjpjYWxsZWVTYXZl
UmVnaXN0ZXJzKCkpOwotICAgICAgICAKLSAgICAgICAgLy8gVGhlIHJldHVybiByZWdpc3RlciBk
b2Vzbid0IG5lZWQgdG8gYmUgc2F2ZWQuCi0gICAgICAgIGlmIChtX3JldHVyblJlZ2lzdGVyICE9
IEludmFsaWRHUFJSZWcpCi0gICAgICAgICAgICBtX3VzZWRSZWdpc3RlcnMuY2xlYXIobV9yZXR1
cm5SZWdpc3Rlcik7Ci0gICAgICAgIAotICAgICAgICBzaXplX3Qgc3RhY2tCeXRlc05lZWRlZEZv
clJldHVybkFkZHJlc3MgPSB3b3JkU2l6ZTsKLSAgICAgICAgCi0gICAgICAgIG1fb2Zmc2V0VG9T
YXZpbmdBcmVhID0KLSAgICAgICAgICAgIChzdGQ6Om1heChtX251bUFyZ3MsIE5VTUJFUl9PRl9B
UkdVTUVOVF9SRUdJU1RFUlMpIC0gTlVNQkVSX09GX0FSR1VNRU5UX1JFR0lTVEVSUykgKiB3b3Jk
U2l6ZTsKLSAgICAgICAgCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IHN0ZDo6bWluKE5VTUJF
Ul9PRl9BUkdVTUVOVF9SRUdJU1RFUlMsIG51bUFyZ3MpOyBpLS07KQotICAgICAgICAgICAgbV9h
cmd1bWVudFJlZ2lzdGVycy5zZXQoR1BSSW5mbzo6dG9Bcmd1bWVudFJlZ2lzdGVyKGkpKTsKLSAg
ICAgICAgbV9jYWxsaW5nQ29udmVudGlvblJlZ2lzdGVycy5tZXJnZShtX2FyZ3VtZW50UmVnaXN0
ZXJzKTsKLSAgICAgICAgaWYgKHJldHVyblJlZ2lzdGVyICE9IEludmFsaWRHUFJSZWcpCi0gICAg
ICAgICAgICBtX2NhbGxpbmdDb252ZW50aW9uUmVnaXN0ZXJzLnNldChHUFJJbmZvOjpyZXR1cm5W
YWx1ZUdQUik7Ci0gICAgICAgIG1fY2FsbGluZ0NvbnZlbnRpb25SZWdpc3RlcnMuZmlsdGVyKG1f
dXNlZFJlZ2lzdGVycyk7Ci0gICAgICAgIAotICAgICAgICB1bnNpZ25lZCBudW1iZXJPZkNhbGxp
bmdDb252ZW50aW9uUmVnaXN0ZXJzID0KLSAgICAgICAgICAgIG1fY2FsbGluZ0NvbnZlbnRpb25S
ZWdpc3RlcnMubnVtYmVyT2ZTZXRSZWdpc3RlcnMoKTsKLSAgICAgICAgCi0gICAgICAgIHNpemVf
dCBvZmZzZXRUb1RodW5rU2F2aW5nQXJlYSA9Ci0gICAgICAgICAgICBtX29mZnNldFRvU2F2aW5n
QXJlYSArCi0gICAgICAgICAgICBudW1iZXJPZkNhbGxpbmdDb252ZW50aW9uUmVnaXN0ZXJzICog
d29yZFNpemU7Ci0gICAgICAgIAotICAgICAgICBtX3N0YWNrQnl0ZXNOZWVkZWQgPQotICAgICAg
ICAgICAgb2Zmc2V0VG9UaHVua1NhdmluZ0FyZWEgKwotICAgICAgICAgICAgc3RhY2tCeXRlc05l
ZWRlZEZvclJldHVybkFkZHJlc3MgKwotICAgICAgICAgICAgKG1fdXNlZFJlZ2lzdGVycy5udW1i
ZXJPZlNldFJlZ2lzdGVycygpIC0gbnVtYmVyT2ZDYWxsaW5nQ29udmVudGlvblJlZ2lzdGVycykg
KiB3b3JkU2l6ZTsKLSAgICAgICAgCi0gICAgICAgIG1fc3RhY2tCeXRlc05lZWRlZCA9IChtX3N0
YWNrQnl0ZXNOZWVkZWQgKyBzdGFja0FsaWdubWVudEJ5dGVzKCkgLSAxKSAmIH4oc3RhY2tBbGln
bm1lbnRCeXRlcygpIC0gMSk7Ci0gICAgICAgIAotICAgICAgICBtX2ppdC5zdWJQdHIoQ0NhbGxI
ZWxwZXJzOjpUcnVzdGVkSW1tMzIobV9zdGFja0J5dGVzTmVlZGVkKSwgQ0NhbGxIZWxwZXJzOjpz
dGFja1BvaW50ZXJSZWdpc3Rlcik7Ci0gICAgICAgIAotICAgICAgICBtX3RodW5rU2F2ZVNldCA9
IG1fdXNlZFJlZ2lzdGVyczsKLSAgICAgICAgCi0gICAgICAgIC8vIFRoaXMgcmVsaWVzIG9uIGFs
bCBjYWxsaW5nIGNvbnZlbnRpb24gcmVnaXN0ZXJzIGFsc28gYmVpbmcgdGVtcCByZWdpc3RlcnMu
Ci0gICAgICAgIHVuc2lnbmVkIHN0YWNrSW5kZXggPSAwOwotICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgaS0tOykgewotICAgICAgICAgICAgR1BS
UmVnIHJlZyA9IEdQUkluZm86OnRvUmVnaXN0ZXIoaSk7Ci0gICAgICAgICAgICBpZiAoIW1fY2Fs
bGluZ0NvbnZlbnRpb25SZWdpc3RlcnMuZ2V0KHJlZykpCi0gICAgICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgICAgICBtX2ppdC5zdG9yZVB0cihyZWcsIENDYWxsSGVscGVyczo6QWRkcmVz
cyhDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBtX29mZnNldFRvU2F2aW5nQXJl
YSArIChzdGFja0luZGV4KyspICogd29yZFNpemUpKTsKLSAgICAgICAgICAgIG1fdGh1bmtTYXZl
U2V0LmNsZWFyKHJlZyk7Ci0gICAgICAgIH0KK1Nsb3dQYXRoQ2FsbENvbnRleHQ6OlNsb3dQYXRo
Q2FsbENvbnRleHQoCisgICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVycywgQ0NhbGxIZWxwZXJz
JiBqaXQsIHVuc2lnbmVkIG51bUFyZ3MsIEdQUlJlZyByZXR1cm5SZWdpc3RlcikKKyAgICA6IG1f
aml0KGppdCkKKyAgICAsIG1fbnVtQXJncyhudW1BcmdzKQorICAgICwgbV9yZXR1cm5SZWdpc3Rl
cihyZXR1cm5SZWdpc3RlcikKK3sKKyAgICAvLyBXZSBkb24ndCBjYXJlIHRoYXQgeW91J3JlIHVz
aW5nIGNhbGxlZS1zYXZlLCBzdGFjaywgb3IgaGFyZHdhcmUgcmVnaXN0ZXJzLgorICAgIHVzZWRS
ZWdpc3RlcnMuZXhjbHVkZShSZWdpc3RlclNldDo6c3RhY2tSZWdpc3RlcnMoKSk7CisgICAgdXNl
ZFJlZ2lzdGVycy5leGNsdWRlKFJlZ2lzdGVyU2V0OjpyZXNlcnZlZEhhcmR3YXJlUmVnaXN0ZXJz
KCkpOworICAgIHVzZWRSZWdpc3RlcnMuZXhjbHVkZShSZWdpc3RlclNldDo6Y2FsbGVlU2F2ZVJl
Z2lzdGVycygpKTsKICAgICAgICAgCi0gICAgICAgIG1fb2Zmc2V0ID0gb2Zmc2V0VG9UaHVua1Nh
dmluZ0FyZWE7Ci0gICAgfQotICAgIAotICAgIH5DYWxsQ29udGV4dCgpCi0gICAgewotICAgICAg
ICBpZiAobV9yZXR1cm5SZWdpc3RlciAhPSBJbnZhbGlkR1BSUmVnKQotICAgICAgICAgICAgbV9q
aXQubW92ZShHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgbV9yZXR1cm5SZWdpc3Rlcik7Ci0gICAg
ICAgIAotICAgICAgICB1bnNpZ25lZCBzdGFja0luZGV4ID0gMDsKLSAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7IGktLTspIHsKLSAgICAgICAgICAg
IEdQUlJlZyByZWcgPSBHUFJJbmZvOjp0b1JlZ2lzdGVyKGkpOwotICAgICAgICAgICAgaWYgKCFt
X2NhbGxpbmdDb252ZW50aW9uUmVnaXN0ZXJzLmdldChyZWcpKQotICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICAgICAgbV9qaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3Mo
Q0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgbV9vZmZzZXRUb1NhdmluZ0FyZWEg
KyAoc3RhY2tJbmRleCsrKSAqIHdvcmRTaXplKSwgcmVnKTsKLSAgICAgICAgfQorICAgIC8vIFRo
ZSByZXR1cm4gcmVnaXN0ZXIgZG9lc24ndCBuZWVkIHRvIGJlIHNhdmVkLgorICAgIGlmIChtX3Jl
dHVyblJlZ2lzdGVyICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIHVzZWRSZWdpc3RlcnMuY2xl
YXIobV9yZXR1cm5SZWdpc3Rlcik7CiAgICAgICAgIAotICAgICAgICBtX2ppdC5hZGRQdHIoQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIobV9zdGFja0J5dGVzTmVlZGVkKSwgQ0NhbGxIZWxwZXJz
OjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7Ci0gICAgfQotICAgIAotICAgIFJlZ2lzdGVyU2V0IHVz
ZWRSZWdpc3RlcnMoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fdGh1bmtTYXZlU2V0
OwotICAgIH0KLSAgICAKLSAgICBwdHJkaWZmX3Qgb2Zmc2V0KCkgY29uc3QKLSAgICB7Ci0gICAg
ICAgIHJldHVybiBtX29mZnNldDsKKyAgICBzaXplX3Qgc3RhY2tCeXRlc05lZWRlZEZvclJldHVy
bkFkZHJlc3MgPSB3b3JkU2l6ZTsKKyAgICAgICAgCisgICAgbV9vZmZzZXRUb1NhdmluZ0FyZWEg
PQorICAgICAgICAoc3RkOjptYXgobV9udW1BcmdzLCBOVU1CRVJfT0ZfQVJHVU1FTlRfUkVHSVNU
RVJTKSAtIE5VTUJFUl9PRl9BUkdVTUVOVF9SRUdJU1RFUlMpICogd29yZFNpemU7CisgICAgICAg
IAorICAgIGZvciAodW5zaWduZWQgaSA9IHN0ZDo6bWluKE5VTUJFUl9PRl9BUkdVTUVOVF9SRUdJ
U1RFUlMsIG51bUFyZ3MpOyBpLS07KQorICAgICAgICBtX2FyZ3VtZW50UmVnaXN0ZXJzLnNldChH
UFJJbmZvOjp0b0FyZ3VtZW50UmVnaXN0ZXIoaSkpOworICAgIG1fY2FsbGluZ0NvbnZlbnRpb25S
ZWdpc3RlcnMubWVyZ2UobV9hcmd1bWVudFJlZ2lzdGVycyk7CisgICAgaWYgKHJldHVyblJlZ2lz
dGVyICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIG1fY2FsbGluZ0NvbnZlbnRpb25SZWdpc3Rl
cnMuc2V0KEdQUkluZm86OnJldHVyblZhbHVlR1BSKTsKKyAgICBtX2NhbGxpbmdDb252ZW50aW9u
UmVnaXN0ZXJzLmZpbHRlcih1c2VkUmVnaXN0ZXJzKTsKKyAgICAgICAgCisgICAgdW5zaWduZWQg
bnVtYmVyT2ZDYWxsaW5nQ29udmVudGlvblJlZ2lzdGVycyA9CisgICAgICAgIG1fY2FsbGluZ0Nv
bnZlbnRpb25SZWdpc3RlcnMubnVtYmVyT2ZTZXRSZWdpc3RlcnMoKTsKKyAgICAgICAgCisgICAg
c2l6ZV90IG9mZnNldFRvVGh1bmtTYXZpbmdBcmVhID0KKyAgICAgICAgbV9vZmZzZXRUb1Nhdmlu
Z0FyZWEgKworICAgICAgICBudW1iZXJPZkNhbGxpbmdDb252ZW50aW9uUmVnaXN0ZXJzICogd29y
ZFNpemU7CisgICAgICAgIAorICAgIG1fc3RhY2tCeXRlc05lZWRlZCA9CisgICAgICAgIG9mZnNl
dFRvVGh1bmtTYXZpbmdBcmVhICsKKyAgICAgICAgc3RhY2tCeXRlc05lZWRlZEZvclJldHVybkFk
ZHJlc3MgKworICAgICAgICAodXNlZFJlZ2lzdGVycy5udW1iZXJPZlNldFJlZ2lzdGVycygpIC0g
bnVtYmVyT2ZDYWxsaW5nQ29udmVudGlvblJlZ2lzdGVycykgKiB3b3JkU2l6ZTsKKyAgICAgICAg
CisgICAgbV9zdGFja0J5dGVzTmVlZGVkID0gKG1fc3RhY2tCeXRlc05lZWRlZCArIHN0YWNrQWxp
Z25tZW50Qnl0ZXMoKSAtIDEpICYgfihzdGFja0FsaWdubWVudEJ5dGVzKCkgLSAxKTsKKyAgICAg
ICAgCisgICAgbV9qaXQuc3ViUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKG1fc3RhY2tC
eXRlc05lZWRlZCksIENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworCisgICAg
bV90aHVua1NhdmVTZXQgPSB1c2VkUmVnaXN0ZXJzOworICAgICAgICAKKyAgICAvLyBUaGlzIHJl
bGllcyBvbiBhbGwgY2FsbGluZyBjb252ZW50aW9uIHJlZ2lzdGVycyBhbHNvIGJlaW5nIHRlbXAg
cmVnaXN0ZXJzLgorICAgIHVuc2lnbmVkIHN0YWNrSW5kZXggPSAwOworICAgIGZvciAodW5zaWdu
ZWQgaSA9IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyBpLS07KSB7CisgICAgICAgIEdQUlJl
ZyByZWcgPSBHUFJJbmZvOjp0b1JlZ2lzdGVyKGkpOworICAgICAgICBpZiAoIW1fY2FsbGluZ0Nv
bnZlbnRpb25SZWdpc3RlcnMuZ2V0KHJlZykpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAg
ICAgbV9qaXQuc3RvcmVQdHIocmVnLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoQ0NhbGxIZWxwZXJz
OjpzdGFja1BvaW50ZXJSZWdpc3RlciwgbV9vZmZzZXRUb1NhdmluZ0FyZWEgKyAoc3RhY2tJbmRl
eCsrKSAqIHdvcmRTaXplKSk7CisgICAgICAgIG1fdGh1bmtTYXZlU2V0LmNsZWFyKHJlZyk7CiAg
ICAgfQorICAgICAgICAKKyAgICBtX29mZnNldCA9IG9mZnNldFRvVGh1bmtTYXZpbmdBcmVhOwor
fQogICAgIAotICAgIFNsb3dQYXRoQ2FsbEtleSBrZXlXaXRoVGFyZ2V0KHZvaWQqIGNhbGxUYXJn
ZXQpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gU2xvd1BhdGhDYWxsS2V5KHVzZWRSZWdp
c3RlcnMoKSwgY2FsbFRhcmdldCwgbV9hcmd1bWVudFJlZ2lzdGVycywgb2Zmc2V0KCkpOwotICAg
IH0KK1Nsb3dQYXRoQ2FsbENvbnRleHQ6On5TbG93UGF0aENhbGxDb250ZXh0KCkKK3sKKyAgICBp
ZiAobV9yZXR1cm5SZWdpc3RlciAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBtX2ppdC5tb3Zl
KEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBtX3JldHVyblJlZ2lzdGVyKTsKICAgICAKLSAgICBN
YWNyb0Fzc2VtYmxlcjo6Q2FsbCBtYWtlQ2FsbCh2b2lkKiBjYWxsVGFyZ2V0LCBNYWNyb0Fzc2Vt
Ymxlcjo6SnVtcExpc3QqIGV4Y2VwdGlvblRhcmdldCkKLSAgICB7Ci0gICAgICAgIE1hY3JvQXNz
ZW1ibGVyOjpDYWxsIHJlc3VsdCA9IG1faml0LmNhbGwoKTsKLSAgICAgICAgbV9zdGF0ZS5maW5h
bGl6ZXItPnNsb3dQYXRoQ2FsbHMuYXBwZW5kKFNsb3dQYXRoQ2FsbCgKLSAgICAgICAgICAgIHJl
c3VsdCwga2V5V2l0aFRhcmdldChjYWxsVGFyZ2V0KSkpOwotICAgICAgICBpZiAoZXhjZXB0aW9u
VGFyZ2V0KQotICAgICAgICAgICAgZXhjZXB0aW9uVGFyZ2V0LT5hcHBlbmQobV9qaXQuZW1pdEV4
Y2VwdGlvbkNoZWNrKCkpOwotICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIHVuc2lnbmVkIHN0
YWNrSW5kZXggPSAwOworICAgIGZvciAodW5zaWduZWQgaSA9IEdQUkluZm86Om51bWJlck9mUmVn
aXN0ZXJzOyBpLS07KSB7CisgICAgICAgIEdQUlJlZyByZWcgPSBHUFJJbmZvOjp0b1JlZ2lzdGVy
KGkpOworICAgICAgICBpZiAoIW1fY2FsbGluZ0NvbnZlbnRpb25SZWdpc3RlcnMuZ2V0KHJlZykp
CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgbV9qaXQubG9hZFB0cihDQ2FsbEhlbHBl
cnM6OkFkZHJlc3MoQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgbV9vZmZzZXRU
b1NhdmluZ0FyZWEgKyAoc3RhY2tJbmRleCsrKSAqIHdvcmRTaXplKSwgcmVnKTsKICAgICB9CiAg
ICAgCi1wcml2YXRlOgotICAgIFN0YXRlJiBtX3N0YXRlOwotICAgIFJlZ2lzdGVyU2V0IG1fdXNl
ZFJlZ2lzdGVyczsKLSAgICBSZWdpc3RlclNldCBtX2FyZ3VtZW50UmVnaXN0ZXJzOwotICAgIFJl
Z2lzdGVyU2V0IG1fY2FsbGluZ0NvbnZlbnRpb25SZWdpc3RlcnM7Ci0gICAgQ0NhbGxIZWxwZXJz
JiBtX2ppdDsKLSAgICB1bnNpZ25lZCBtX251bUFyZ3M7Ci0gICAgR1BSUmVnIG1fcmV0dXJuUmVn
aXN0ZXI7Ci0gICAgc2l6ZV90IG1fb2Zmc2V0VG9TYXZpbmdBcmVhOwotICAgIHNpemVfdCBtX3N0
YWNrQnl0ZXNOZWVkZWQ7Ci0gICAgUmVnaXN0ZXJTZXQgbV90aHVua1NhdmVTZXQ7Ci0gICAgcHRy
ZGlmZl90IG1fb2Zmc2V0OwotfTsKLQotfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCi0KLXZvaWQg
c3RvcmVDb2RlT3JpZ2luKFN0YXRlJiBzdGF0ZSwgQ0NhbGxIZWxwZXJzJiBqaXQsIENvZGVPcmln
aW4gY29kZU9yaWdpbikKLXsKLSAgICBpZiAoIWNvZGVPcmlnaW4uaXNTZXQoKSkKLSAgICAgICAg
cmV0dXJuOwotICAgIAotICAgIENhbGxTaXRlSW5kZXggY2FsbFNpdGUgPSBzdGF0ZS5qaXRDb2Rl
LT5jb21tb24uYWRkQ29kZU9yaWdpbihjb2RlT3JpZ2luKTsKLSAgICB1bnNpZ25lZCBsb2NhdGlv
bkJpdHMgPSBjYWxsU2l0ZS5iaXRzKCk7Ci0gICAgaml0LnN0b3JlMzIoCi0gICAgICAgIENDYWxs
SGVscGVyczo6VHJ1c3RlZEltbTMyKGxvY2F0aW9uQml0cyksCi0gICAgICAgIENDYWxsSGVscGVy
czo6dGFnRm9yKHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4oSlNTdGFjazo6QXJndW1lbnRD
b3VudCkpKTsKKyAgICBtX2ppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIobV9z
dGFja0J5dGVzTmVlZGVkKSwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiB9
CiAKLU1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oCi0gICAgU3RhdGUmIHN0YXRl
LCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywgQ0NhbGxIZWxwZXJzJiBqaXQsCi0g
ICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QqIGV4Y2Vw
dGlvblRhcmdldCwKLSAgICBKX0pJVE9wZXJhdGlvbl9FU3NpQ0kgb3BlcmF0aW9uLCBHUFJSZWcg
cmVzdWx0LCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sCi0gICAgR1BSUmVnIG9iamVjdCwg
Y29uc3QgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKK1Nsb3dQYXRoQ2FsbEtleSBTbG93UGF0aENh
bGxDb250ZXh0OjprZXlXaXRoVGFyZ2V0KHZvaWQqIGNhbGxUYXJnZXQpIGNvbnN0CiB7Ci0gICAg
c3RvcmVDb2RlT3JpZ2luKHN0YXRlLCBqaXQsIGNvZGVPcmlnaW4pOwotICAgIENhbGxDb250ZXh0
IGNvbnRleHQoc3RhdGUsIHVzZWRSZWdpc3RlcnMsIGppdCwgNCwgcmVzdWx0KTsKLSAgICBqaXQu
c2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKAotICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW1QdHIoc3R1YkluZm8pLCBvYmplY3QsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cih1
aWQpKTsKLSAgICByZXR1cm4gY29udGV4dC5tYWtlQ2FsbChiaXR3aXNlX2Nhc3Q8dm9pZCo+KG9w
ZXJhdGlvbiksIGV4Y2VwdGlvblRhcmdldCk7CisgICAgcmV0dXJuIFNsb3dQYXRoQ2FsbEtleSht
X3RodW5rU2F2ZVNldCwgY2FsbFRhcmdldCwgbV9hcmd1bWVudFJlZ2lzdGVycywgbV9vZmZzZXQp
OwogfQogCi1NYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKAotICAgIFN0YXRlJiBz
dGF0ZSwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsIENDYWxsSGVscGVycyYgaml0
LAotICAgIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0KiBl
eGNlcHRpb25UYXJnZXQsCi0gICAgSl9KSVRPcGVyYXRpb25fRVNzaUpJIG9wZXJhdGlvbiwgR1BS
UmVnIHJlc3VsdCwgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLAotICAgIEdQUlJlZyBvYmpl
Y3QsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCitTbG93UGF0aENhbGwgU2xvd1BhdGhDYWxsQ29u
dGV4dDo6bWFrZUNhbGwodm9pZCogY2FsbFRhcmdldCkKIHsKLSAgICBzdG9yZUNvZGVPcmlnaW4o
c3RhdGUsIGppdCwgY29kZU9yaWdpbik7Ci0gICAgQ2FsbENvbnRleHQgY29udGV4dChzdGF0ZSwg
dXNlZFJlZ2lzdGVycywgaml0LCA0LCByZXN1bHQpOwotICAgIGppdC5zZXR1cEFyZ3VtZW50c1dp
dGhFeGVjU3RhdGUoCi0gICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihzdHViSW5m
byksIG9iamVjdCwKLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHVpZCkpOwot
ICAgIHJldHVybiBjb250ZXh0Lm1ha2VDYWxsKGJpdHdpc2VfY2FzdDx2b2lkKj4ob3BlcmF0aW9u
KSwgZXhjZXB0aW9uVGFyZ2V0KTsKKyAgICBTbG93UGF0aENhbGwgcmVzdWx0ID0gU2xvd1BhdGhD
YWxsKG1faml0LmNhbGwoKSwga2V5V2l0aFRhcmdldChjYWxsVGFyZ2V0KSk7CisKKyAgICBtX2pp
dC5hZGRMaW5rVGFzaygKKyAgICAgICAgW3Jlc3VsdF0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIp
IHsKKyAgICAgICAgICAgIFZNJiB2bSA9IGxpbmtCdWZmZXIudm0oKTsKKworICAgICAgICAgICAg
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHRodW5rID0KKyAgICAgICAgICAgICAgICB2bS5mdGxUaHVu
a3MtPmdldFNsb3dQYXRoQ2FsbFRodW5rKHZtLCByZXN1bHQua2V5KCkpOworCisgICAgICAgICAg
ICBsaW5rQnVmZmVyLmxpbmsocmVzdWx0LmNhbGwoKSwgQ29kZUxvY2F0aW9uTGFiZWwodGh1bmsu
Y29kZSgpKSk7CisgICAgICAgIH0pOworICAgIAorICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLU1h
Y3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oCi0gICAgU3RhdGUmIHN0YXRlLCBjb25z
dCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywgQ0NhbGxIZWxwZXJzJiBqaXQsIAotICAgIENv
ZGVPcmlnaW4gY29kZU9yaWdpbiwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0KiBleGNlcHRpb25U
YXJnZXQsCi0gICAgVl9KSVRPcGVyYXRpb25fRVNzaUpKSSBvcGVyYXRpb24sIFN0cnVjdHVyZVN0
dWJJbmZvKiBzdHViSW5mbywgR1BSUmVnIHZhbHVlLAotICAgIEdQUlJlZyBvYmplY3QsIFVuaXF1
ZWRTdHJpbmdJbXBsKiB1aWQpCitDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXhGb3JDb2RlT3Jp
Z2luKFN0YXRlJiBzdGF0ZSwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQogewotICAgIHN0b3JlQ29k
ZU9yaWdpbihzdGF0ZSwgaml0LCBjb2RlT3JpZ2luKTsKLSAgICBDYWxsQ29udGV4dCBjb250ZXh0
KHN0YXRlLCB1c2VkUmVnaXN0ZXJzLCBqaXQsIDUsIEludmFsaWRHUFJSZWcpOwotICAgIGppdC5z
ZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoCi0gICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3Rl
ZEltbVB0cihzdHViSW5mbyksIHZhbHVlLCBvYmplY3QsCi0gICAgICAgIENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbVB0cih1aWQpKTsKLSAgICByZXR1cm4gY29udGV4dC5tYWtlQ2FsbChiaXR3aXNl
X2Nhc3Q8dm9pZCo+KG9wZXJhdGlvbiksIGV4Y2VwdGlvblRhcmdldCk7CisgICAgaWYgKGNvZGVP
cmlnaW4pCisgICAgICAgIHJldHVybiBzdGF0ZS5qaXRDb2RlLT5jb21tb24uYWRkQ29kZU9yaWdp
bihjb2RlT3JpZ2luKTsKKyAgICByZXR1cm4gQ2FsbFNpdGVJbmRleCgpOwogfQogCiB9IH0gLy8g
bmFtZXNwYWNlIEpTQzo6RlRMCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNs
b3dQYXRoQ2FsbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
U2xvd1BhdGhDYWxsLmgJKHJldmlzaW9uIDE5MDc0OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMU2xvd1BhdGhDYWxsLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTUsMjAgKzU1LDcx
IEBAIHByaXZhdGU6CiAgICAgU2xvd1BhdGhDYWxsS2V5IG1fa2V5OwogfTsKIAotdm9pZCBzdG9y
ZUNvZGVPcmlnaW4oU3RhdGUmLCBDQ2FsbEhlbHBlcnMmLCBDb2RlT3JpZ2luKTsKKy8vIFRoaXMg
d2lsbCBiZSBhbiBSQUlJIHRoaW5neSB0aGF0IHdpbGwgc2V0IHVwIHRoZSBuZWNlc3Nhcnkgc3Rh
Y2sgc2l6ZXMgYW5kIG9mZnNldHMgYW5kIHN1Y2guCitjbGFzcyBTbG93UGF0aENhbGxDb250ZXh0
IHsKK3B1YmxpYzoKKyAgICBTbG93UGF0aENhbGxDb250ZXh0KFJlZ2lzdGVyU2V0IHVzZWRSZWdp
c3RlcnMsIENDYWxsSGVscGVycyYsIHVuc2lnbmVkIG51bUFyZ3MsIEdQUlJlZyByZXR1cm5SZWdp
c3Rlcik7CisgICAgflNsb3dQYXRoQ2FsbENvbnRleHQoKTsKKworICAgIC8vIE5PVEU6IFRoZSBj
YWxsIHRoYXQgdGhpcyByZXR1cm5zIGlzIGFscmVhZHkgZ29pbmcgdG8gYmUgbGlua2VkIGJ5IHRo
ZSBKSVQgdXNpbmcgYWRkTGlua1Rhc2soKSwKKyAgICAvLyBzbyB0aGVyZSBpcyBubyBuZWVkIGZv
ciB5b3UgdG8gbGluayBpdCB5b3Vyc2VsZi4KKyAgICBTbG93UGF0aENhbGwgbWFrZUNhbGwodm9p
ZCogY2FsbFRhcmdldCk7CisKK3ByaXZhdGU6CisgICAgU2xvd1BhdGhDYWxsS2V5IGtleVdpdGhU
YXJnZXQodm9pZCogY2FsbFRhcmdldCkgY29uc3Q7CisgICAgCisgICAgUmVnaXN0ZXJTZXQgbV9h
cmd1bWVudFJlZ2lzdGVyczsKKyAgICBSZWdpc3RlclNldCBtX2NhbGxpbmdDb252ZW50aW9uUmVn
aXN0ZXJzOworICAgIENDYWxsSGVscGVycyYgbV9qaXQ7CisgICAgdW5zaWduZWQgbV9udW1Bcmdz
OworICAgIEdQUlJlZyBtX3JldHVyblJlZ2lzdGVyOworICAgIHNpemVfdCBtX29mZnNldFRvU2F2
aW5nQXJlYTsKKyAgICBzaXplX3QgbV9zdGFja0J5dGVzTmVlZGVkOworICAgIFJlZ2lzdGVyU2V0
IG1fdGh1bmtTYXZlU2V0OworICAgIHB0cmRpZmZfdCBtX29mZnNldDsKK307CisKK3RlbXBsYXRl
PHR5cGVuYW1lLi4uIEFyZ3VtZW50VHlwZXM+CitTbG93UGF0aENhbGwgY2FsbE9wZXJhdGlvbigK
KyAgICBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywgQ0NhbGxIZWxwZXJzJiBqaXQs
IENDYWxsSGVscGVyczo6SnVtcExpc3QqIGV4Y2VwdGlvblRhcmdldCwKKyAgICBGdW5jdGlvblB0
ciBmdW5jdGlvbiwgR1BSUmVnIHJlc3VsdEdQUiwgQXJndW1lbnRUeXBlcy4uLiBhcmd1bWVudHMp
Cit7CisgICAgU2xvd1BhdGhDYWxsIGNhbGw7CisgICAgeworICAgICAgICBTbG93UGF0aENhbGxD
b250ZXh0IGNvbnRleHQodXNlZFJlZ2lzdGVycywgaml0LCBzaXplb2YuLi4oQXJndW1lbnRUeXBl
cykgKyAxLCByZXN1bHRHUFIpOworICAgICAgICBqaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0
YXRlKGFyZ3VtZW50cy4uLik7CisgICAgICAgIGNhbGwgPSBjb250ZXh0Lm1ha2VDYWxsKGZ1bmN0
aW9uLnZhbHVlKCkpOworICAgIH0KKyAgICBpZiAoZXhjZXB0aW9uVGFyZ2V0KQorICAgICAgICBl
eGNlcHRpb25UYXJnZXQtPmFwcGVuZChqaXQuZW1pdEV4Y2VwdGlvbkNoZWNrKCkpOworICAgIHJl
dHVybiBjYWxsOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudFR5cGVzPgorU2xv
d1BhdGhDYWxsIGNhbGxPcGVyYXRpb24oCisgICAgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdp
c3RlcnMsIENDYWxsSGVscGVycyYgaml0LCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgsCisg
ICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCogZXhjZXB0aW9uVGFyZ2V0LCBGdW5jdGlvblB0ciBm
dW5jdGlvbiwgR1BSUmVnIHJlc3VsdEdQUiwKKyAgICBBcmd1bWVudFR5cGVzLi4uIGFyZ3VtZW50
cykKK3sKKyAgICBpZiAoY2FsbFNpdGVJbmRleCkgeworICAgICAgICBqaXQuc3RvcmUzMigKKyAg
ICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGNhbGxTaXRlSW5kZXguYml0cygp
KSwKKyAgICAgICAgICAgIENDYWxsSGVscGVyczo6dGFnRm9yKEpTU3RhY2s6OkFyZ3VtZW50Q291
bnQpKTsKKyAgICB9CisgICAgcmV0dXJuIGNhbGxPcGVyYXRpb24odXNlZFJlZ2lzdGVycywgaml0
LCBleGNlcHRpb25UYXJnZXQsIGZ1bmN0aW9uLCByZXN1bHRHUFIsIGFyZ3VtZW50cy4uLik7Cit9
CisKK0NhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleEZvckNvZGVPcmlnaW4oU3RhdGUmLCBDb2Rl
T3JpZ2luKTsKIAotTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbigKLSAgICBTdGF0
ZSYsIGNvbnN0IFJlZ2lzdGVyU2V0JiwgQ0NhbGxIZWxwZXJzJiwgQ29kZU9yaWdpbiwgQ0NhbGxI
ZWxwZXJzOjpKdW1wTGlzdCosCi0gICAgSl9KSVRPcGVyYXRpb25fRVNzaUNJLCBHUFJSZWcsIFN0
cnVjdHVyZVN0dWJJbmZvKiwgR1BSUmVnLAotICAgIGNvbnN0IFVuaXF1ZWRTdHJpbmdJbXBsKiB1
aWQpOwotTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbigKLSAgICBTdGF0ZSYsIGNv
bnN0IFJlZ2lzdGVyU2V0JiwgQ0NhbGxIZWxwZXJzJiwgQ29kZU9yaWdpbiwgQ0NhbGxIZWxwZXJz
OjpKdW1wTGlzdCosCi0gICAgSl9KSVRPcGVyYXRpb25fRVNzaUpJLCBHUFJSZWcgcmVzdWx0LCBT
dHJ1Y3R1cmVTdHViSW5mbyosIEdQUlJlZyBvYmplY3QsCi0gICAgVW5pcXVlZFN0cmluZ0ltcGwq
IHVpZCk7Ci1NYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKAotICAgIFN0YXRlJiwg
Y29uc3QgUmVnaXN0ZXJTZXQmLCBDQ2FsbEhlbHBlcnMmLCBDb2RlT3JpZ2luLCBDQ2FsbEhlbHBl
cnM6Okp1bXBMaXN0KiwKLSAgICBWX0pJVE9wZXJhdGlvbl9FU3NpSkpJLCBTdHJ1Y3R1cmVTdHVi
SW5mbyosIEdQUlJlZyB2YWx1ZSwgR1BSUmVnIG9iamVjdCwKLSAgICBVbmlxdWVkU3RyaW5nSW1w
bCogdWlkKTsKK3RlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50VHlwZXM+CitTbG93UGF0aENh
bGwgY2FsbE9wZXJhdGlvbigKKyAgICBTdGF0ZSYgc3RhdGUsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1
c2VkUmVnaXN0ZXJzLCBDQ2FsbEhlbHBlcnMmIGppdCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLAor
ICAgIENDYWxsSGVscGVyczo6SnVtcExpc3QqIGV4Y2VwdGlvblRhcmdldCwgRnVuY3Rpb25QdHIg
ZnVuY3Rpb24sIEdQUlJlZyByZXN1bHQsIEFyZ3VtZW50VHlwZXMuLi4gYXJndW1lbnRzKQorewor
ICAgIHJldHVybiBjYWxsT3BlcmF0aW9uKAorICAgICAgICB1c2VkUmVnaXN0ZXJzLCBqaXQsIGNh
bGxTaXRlSW5kZXhGb3JDb2RlT3JpZ2luKHN0YXRlLCBjb2RlT3JpZ2luKSwgZXhjZXB0aW9uVGFy
Z2V0LCBmdW5jdGlvbiwKKyAgICAgICAgcmVzdWx0LCBhcmd1bWVudHMuLi4pOworfQogCiB9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6RlRMCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMU3RhdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0
YXRlLmgJKHJldmlzaW9uIDE5MDc0OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
U3RhdGUuaAkod29ya2luZyBjb3B5KQpAQCAtNzgsNiArNzgsNyBAQCBwdWJsaWM6CiAgICAgU2Vn
bWVudGVkVmVjdG9yPEdldEJ5SWREZXNjcmlwdG9yPiBnZXRCeUlkczsKICAgICBTZWdtZW50ZWRW
ZWN0b3I8UHV0QnlJZERlc2NyaXB0b3I+IHB1dEJ5SWRzOwogICAgIFNlZ21lbnRlZFZlY3RvcjxD
aGVja0luRGVzY3JpcHRvcj4gY2hlY2tJbnM7CisgICAgU2VnbWVudGVkVmVjdG9yPExhenlTbG93
UGF0aERlc2NyaXB0b3I+IGxhenlTbG93UGF0aHM7CiAgICAgVmVjdG9yPEpTQ2FsbD4ganNDYWxs
czsKICAgICBWZWN0b3I8SlNDYWxsVmFyYXJncz4ganNDYWxsVmFyYXJnc2VzOwogICAgIFZlY3Rv
cjxKU1RhaWxDYWxsPiBqc1RhaWxDYWxsczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMVGh1bmtzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTFRodW5rcy5jcHAJKHJldmlzaW9uIDE5MDc0OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMVGh1bmtzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2lu
Y2x1ZGUgIkFzc2VtYmx5SGVscGVycy5oIgogI2luY2x1ZGUgIkZQUkluZm8uaCIKICNpbmNsdWRl
ICJGVExPU1JFeGl0Q29tcGlsZXIuaCIKKyNpbmNsdWRlICJGVExPcGVyYXRpb25zLmgiCiAjaW5j
bHVkZSAiRlRMU2F2ZVJlc3RvcmUuaCIKICNpbmNsdWRlICJHUFJJbmZvLmgiCiAjaW5jbHVkZSAi
TGlua0J1ZmZlci5oIgpAQCAtMzksMTEgKzQwLDEyIEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3Bh
Y2UgRlRMIHsKIAogdXNpbmcgbmFtZXNwYWNlIERGRzsKIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVm
IG9zckV4aXRHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3IoVk0qIHZtKQorc3RhdGljIE1hY3JvQXNz
ZW1ibGVyQ29kZVJlZiBnZW5lcmljR2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKAorICAgIFZNKiB2
bSwgRnVuY3Rpb25QdHIgZ2VuZXJhdGlvbkZ1bmN0aW9uLCBjb25zdCBjaGFyKiBuYW1lLCB1bnNp
Z25lZCBleHRyYVBvcHNUb1Jlc3RvcmUpCiB7CiAgICAgQXNzZW1ibHlIZWxwZXJzIGppdCh2bSwg
MCk7CiAgICAgCi0gICAgLy8gTm90ZSB0aGF0IHRoZSAicmV0dXJuIGFkZHJlc3MiIHdpbGwgYmUg
dGhlIE9TUiBleGl0IElELgorICAgIC8vIE5vdGUgdGhhdCB0aGUgInJldHVybiBhZGRyZXNzIiB3
aWxsIGJlIHRoZSBJRCB0aGF0IHdlIHBhc3MgdG8gdGhlIGdlbmVyYXRpb24gZnVuY3Rpb24uCiAg
ICAgCiAgICAgcHRyZGlmZl90IHN0YWNrTWlzYWxpZ25tZW50ID0gTWFjcm9Bc3NlbWJsZXI6OnB1
c2hUb1NhdmVCeXRlT2Zmc2V0KCk7CiAgICAgCkBAIC05MCwxMSArOTIsMTQgQEAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmIG9zckV4aXRHZW5lcmF0aW9uVAogICAgIHdoaWxlIChudW1iZXJPZlJlcXVp
cmVkUG9wcy0tKQogICAgICAgICBqaXQucG9wVG9SZXN0b3JlKEdQUkluZm86OnJlZ1QxKTsKICAg
ICBqaXQucG9wVG9SZXN0b3JlKE1hY3JvQXNzZW1ibGVyOjpmcmFtZVBvaW50ZXJSZWdpc3Rlcik7
Ci0gICAgCi0gICAgLy8gQXQgdGhpcyBwb2ludCB3ZSdyZSBzaXR0aW5nIG9uIHRoZSByZXR1cm4g
YWRkcmVzcyAtIHNvIGlmIHdlIGRpZCBhIGp1bXAgcmlnaHQgbm93LCB0aGUKLSAgICAvLyB0YWls
LWNhbGxlZSB3b3VsZCBiZSBoYXBweS4gSW5zdGVhZCB3ZSdsbCBzdGFzaCB0aGUgY2FsbGVlIGlu
IHRoZSByZXR1cm4gYWRkcmVzcyBhbmQgdGhlbgotICAgIC8vIHJlc3RvcmUgYWxsIHJlZ2lzdGVy
cy4KLSAgICAKKworICAgIC8vIFdoZW4gd2UgY2FtZSBpbiBoZXJlLCB0aGVyZSB3YXMgYW4gYWRk
aXRpb25hbCB0aGluZyBwdXNoZWQgdG8gdGhlIHN0YWNrLiBTb21lIGNsaWVudHMgd2FudCBpdAor
ICAgIC8vIHBvcHBlZCBiZWZvcmUgcHJvY2VlZGluZy4KKyAgICB3aGlsZSAoZXh0cmFQb3BzVG9S
ZXN0b3JlLS0pCisgICAgICAgIGppdC5wb3BUb1Jlc3RvcmUoR1BSSW5mbzo6cmVnVDEpOworCisg
ICAgLy8gUHV0IHRoZSByZXR1cm4gYWRkcmVzcyB3aGVyZXZlciB0aGUgcmV0dXJuIGluc3RydWN0
aW9uIHdhbnRzIGl0LiBPbiBhbGwgcGxhdGZvcm1zLCB0aGlzCisgICAgLy8gZW5zdXJlcyB0aGF0
IHRoZSByZXR1cm4gYWRkcmVzcyBpcyBvdXQgb2YgdGhlIHdheSBvZiByZWdpc3RlciByZXN0b3Jh
dGlvbi4KICAgICBqaXQucmVzdG9yZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1cm4oR1BSSW5mbzo6
cmVnVDApOwogCiAgICAgcmVzdG9yZUFsbFJlZ2lzdGVycyhqaXQsIGJ1ZmZlcik7CkBAIC0xMDIs
OCArMTA3LDIyIEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBvc3JFeGl0R2VuZXJhdGlvblQKICAg
ICBqaXQucmV0KCk7CiAgICAgCiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sIGppdCwg
R0xPQkFMX1RIVU5LX0lEKTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKGZ1bmN0aW9uQ2FsbCwgY29t
cGlsZUZUTE9TUkV4aXQpOwotICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCAo
IkZUTCBPU1IgZXhpdCBnZW5lcmF0aW9uIHRodW5rIikpOworICAgIHBhdGNoQnVmZmVyLmxpbmso
ZnVuY3Rpb25DYWxsLCBnZW5lcmF0aW9uRnVuY3Rpb24pOworICAgIHJldHVybiBGSU5BTElaRV9D
T0RFKHBhdGNoQnVmZmVyLCAoIiVzIiwgbmFtZSkpOworfQorCitNYWNyb0Fzc2VtYmxlckNvZGVS
ZWYgb3NyRXhpdEdlbmVyYXRpb25UaHVua0dlbmVyYXRvcihWTSogdm0pCit7CisgICAgdW5zaWdu
ZWQgZXh0cmFQb3BzVG9SZXN0b3JlID0gMDsKKyAgICByZXR1cm4gZ2VuZXJpY0dlbmVyYXRpb25U
aHVua0dlbmVyYXRvcigKKyAgICAgICAgdm0sIGNvbXBpbGVGVExPU1JFeGl0LCAiRlRMIE9TUiBl
eGl0IGdlbmVyYXRpb24gdGh1bmsiLCBleHRyYVBvcHNUb1Jlc3RvcmUpOworfQorCitNYWNyb0Fz
c2VtYmxlckNvZGVSZWYgbGF6eVNsb3dQYXRoR2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKFZNKiB2
bSkKK3sKKyAgICB1bnNpZ25lZCBleHRyYVBvcHNUb1Jlc3RvcmUgPSAxOworICAgIHJldHVybiBn
ZW5lcmljR2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKAorICAgICAgICB2bSwgY29tcGlsZUZUTExh
enlTbG93UGF0aCwgIkZUTCBsYXp5IHNsb3cgcGF0aCBnZW5lcmF0aW9uIHRodW5rIiwgZXh0cmFQ
b3BzVG9SZXN0b3JlKTsKIH0KIAogc3RhdGljIHZvaWQgcmVnaXN0ZXJDbG9iYmVyQ2hlY2soQXNz
ZW1ibHlIZWxwZXJzJiBqaXQsIFJlZ2lzdGVyU2V0IGRvbnRDbG9iYmVyKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExUaHVua3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZnRsL0ZUTFRodW5rcy5oCShyZXZpc2lvbiAxOTA3NDkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTFRodW5rcy5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0
MCw3IEBAIGNsYXNzIFZNOwogbmFtZXNwYWNlIEZUTCB7CiAKIE1hY3JvQXNzZW1ibGVyQ29kZVJl
ZiBvc3JFeGl0R2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKFZNKik7CitNYWNyb0Fzc2VtYmxlckNv
ZGVSZWYgbGF6eVNsb3dQYXRoR2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKFZNKik7CiBNYWNyb0Fz
c2VtYmxlckNvZGVSZWYgc2xvd1BhdGhDYWxsVGh1bmtHZW5lcmF0b3IoVk0mLCBjb25zdCBTbG93
UGF0aENhbGxLZXkmKTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgS2V5VHlwZUFyZ3VtZW50PgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuaAkocmV2
aXNpb24gMTkwNzQ5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxG
cmFtZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICBDb3B5cmlnaHQg
KEMpIDE5OTktMjAwMSBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQogICogIENvcHlyaWdo
dCAoQykgMjAwMSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQotICogIENvcHlyaWdodCAoQykg
MjAwMywgMjAwNywgMjAwOCwgMjAxMSwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA3LCAyMDA4LCAyMDExLCAyMDEz
LTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJs
aWMKQEAgLTM5LDYgKzM5LDExIEBAIG5hbWVzcGFjZSBKU0MgIHsKICAgICBjbGFzcyBKU1Njb3Bl
OwogCiAgICAgc3RydWN0IENhbGxTaXRlSW5kZXggeworICAgICAgICBDYWxsU2l0ZUluZGV4KCkK
KyAgICAgICAgICAgIDogbV9iaXRzKFVJTlRfTUFYKQorICAgICAgICB7CisgICAgICAgIH0KKyAg
ICAgICAgCiAgICAgICAgIGV4cGxpY2l0IENhbGxTaXRlSW5kZXgodWludDMyX3QgYml0cykKICAg
ICAgICAgICAgIDogbV9iaXRzKGJpdHMpCiAgICAgICAgIHsgfQpAQCAtNDcsNiArNTIsOSBAQCBu
YW1lc3BhY2UgSlNDICB7CiAgICAgICAgICAgICA6IG1fYml0cyhiaXR3aXNlX2Nhc3Q8dWludDMy
X3Q+KGluc3RydWN0aW9uKSkKICAgICAgICAgeyB9CiAjZW5kaWYKKworICAgICAgICBleHBsaWNp
dCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gbV9iaXRzICE9IFVJTlRfTUFYOyB9Cisg
ICAgICAgIAogICAgICAgICBpbmxpbmUgdWludDMyX3QgYml0cygpIGNvbnN0IHsgcmV0dXJuIG1f
Yml0czsgfQogCiAgICAgcHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMTkwNzQ5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTAzMSw3ICsx
MDMxLDcgQEAgSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld09iamVjdAogewogICAg
IFZNKiB2bSA9ICZleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIo
dm0sIGV4ZWMpOwotICAgIAorCiAgICAgcmV0dXJuIGNvbnN0cnVjdEVtcHR5T2JqZWN0KGV4ZWMs
IHN0cnVjdHVyZSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1BhcmFsbGVsSGVscGVyUG9v
bC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvUGFyYWxsZWxIZWxwZXJQb29sLmNw
cAkocmV2aXNpb24gMTkwNzQ5KQorKysgU291cmNlL1dURi93dGYvUGFyYWxsZWxIZWxwZXJQb29s
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTMsNyArNTMsNyBAQCBQYXJhbGxlbEhlbHBlckNsaWVu
dDo6flBhcmFsbGVsSGVscGVyQ2xpCiAgICAgfQogfQogCi12b2lkIFBhcmFsbGVsSGVscGVyQ2xp
ZW50OjpzZXRUYXNrKFJlZlB0cjxTaGFyZWRUYXNrPiB0YXNrKQordm9pZCBQYXJhbGxlbEhlbHBl
ckNsaWVudDo6c2V0VGFzayhSZWZQdHI8U2hhcmVkVGFzazx2b2lkKCk+PiB0YXNrKQogewogICAg
IExvY2tIb2xkZXIgbG9ja2VyKG1fcG9vbC0+bV9sb2NrKTsKICAgICBSRUxFQVNFX0FTU0VSVCgh
bV90YXNrKTsKQEAgLTY5LDcgKzY5LDcgQEAgdm9pZCBQYXJhbGxlbEhlbHBlckNsaWVudDo6Zmlu
aXNoKCkKIAogdm9pZCBQYXJhbGxlbEhlbHBlckNsaWVudDo6ZG9Tb21lSGVscGluZygpCiB7Ci0g
ICAgUmVmUHRyPFNoYXJlZFRhc2s+IHRhc2s7CisgICAgUmVmUHRyPFNoYXJlZFRhc2s8dm9pZCgp
Pj4gdGFzazsKICAgICB7CiAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fcG9vbC0+bV9sb2Nr
KTsKICAgICAgICAgdGFzayA9IGNsYWltVGFzayhsb2NrZXIpOwpAQCAtODAsNyArODAsNyBAQCB2
b2lkIFBhcmFsbGVsSGVscGVyQ2xpZW50Ojpkb1NvbWVIZWxwaW5nCiAgICAgcnVuVGFzayh0YXNr
KTsKIH0KIAotdm9pZCBQYXJhbGxlbEhlbHBlckNsaWVudDo6cnVuVGFza0luUGFyYWxsZWwoUmVm
UHRyPFNoYXJlZFRhc2s+IHRhc2spCit2b2lkIFBhcmFsbGVsSGVscGVyQ2xpZW50OjpydW5UYXNr
SW5QYXJhbGxlbChSZWZQdHI8U2hhcmVkVGFzazx2b2lkKCk+PiB0YXNrKQogewogICAgIHNldFRh
c2sodGFzayk7CiAgICAgZG9Tb21lSGVscGluZygpOwpAQCAtOTQsNyArOTQsNyBAQCB2b2lkIFBh
cmFsbGVsSGVscGVyQ2xpZW50OjpmaW5pc2goY29uc3QgCiAgICAgICAgIG1fcG9vbC0+bV93b3Jr
Q29tcGxldGVDb25kaXRpb24ud2FpdChtX3Bvb2wtPm1fbG9jayk7CiB9CiAKLVJlZlB0cjxTaGFy
ZWRUYXNrPiBQYXJhbGxlbEhlbHBlckNsaWVudDo6Y2xhaW1UYXNrKGNvbnN0IExvY2tIb2xkZXIm
KQorUmVmUHRyPFNoYXJlZFRhc2s8dm9pZCgpPj4gUGFyYWxsZWxIZWxwZXJDbGllbnQ6OmNsYWlt
VGFzayhjb25zdCBMb2NrSG9sZGVyJikKIHsKICAgICBpZiAoIW1fdGFzaykKICAgICAgICAgcmV0
dXJuIG51bGxwdHI7CkBAIC0xMDMsNyArMTAzLDcgQEAgUmVmUHRyPFNoYXJlZFRhc2s+IFBhcmFs
bGVsSGVscGVyQ2xpZW50OgogICAgIHJldHVybiBtX3Rhc2s7CiB9CiAKLXZvaWQgUGFyYWxsZWxI
ZWxwZXJDbGllbnQ6OnJ1blRhc2soUmVmUHRyPFNoYXJlZFRhc2s+IHRhc2spCit2b2lkIFBhcmFs
bGVsSGVscGVyQ2xpZW50OjpydW5UYXNrKFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoKT4+IHRhc2sp
CiB7CiAgICAgUkVMRUFTRV9BU1NFUlQobV9udW1BY3RpdmUpOwogICAgIFJFTEVBU0VfQVNTRVJU
KHRhc2spOwpAQCAtMTUzLDcgKzE1Myw3IEBAIHZvaWQgUGFyYWxsZWxIZWxwZXJQb29sOjplbnN1
cmVUaHJlYWRzKHUKIHZvaWQgUGFyYWxsZWxIZWxwZXJQb29sOjpkb1NvbWVIZWxwaW5nKCkKIHsK
ICAgICBQYXJhbGxlbEhlbHBlckNsaWVudCogY2xpZW50OwotICAgIFJlZlB0cjxTaGFyZWRUYXNr
PiB0YXNrOworICAgIFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoKT4+IHRhc2s7CiAgICAgewogICAg
ICAgICBMb2NrSG9sZGVyIGxvY2tlcihtX2xvY2spOwogICAgICAgICBjbGllbnQgPSBnZXRDbGll
bnRXaXRoVGFzayhsb2NrZXIpOwpAQCAtMTgyLDcgKzE4Miw3IEBAIHZvaWQgUGFyYWxsZWxIZWxw
ZXJQb29sOjpoZWxwZXJUaHJlYWRCb2QKIHsKICAgICBmb3IgKDs7KSB7CiAgICAgICAgIFBhcmFs
bGVsSGVscGVyQ2xpZW50KiBjbGllbnQ7Ci0gICAgICAgIFJlZlB0cjxTaGFyZWRUYXNrPiB0YXNr
OworICAgICAgICBSZWZQdHI8U2hhcmVkVGFzazx2b2lkKCk+PiB0YXNrOwogCiAgICAgICAgIHsK
ICAgICAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7CkluZGV4OiBTb3VyY2UvV1RG
L3d0Zi9QYXJhbGxlbEhlbHBlclBvb2wuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9Q
YXJhbGxlbEhlbHBlclBvb2wuaAkocmV2aXNpb24gMTkwNzQ5KQorKysgU291cmNlL1dURi93dGYv
UGFyYWxsZWxIZWxwZXJQb29sLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzMCwxMiArMTMwLDEyIEBA
IHB1YmxpYzoKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgUGFyYWxsZWxIZWxwZXJDbGllbnQoUmVm
UHRyPFBhcmFsbGVsSGVscGVyUG9vbD4pOwogICAgIFdURl9FWFBPUlRfUFJJVkFURSB+UGFyYWxs
ZWxIZWxwZXJDbGllbnQoKTsKIAotICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIHNldFRhc2so
UmVmUHRyPFNoYXJlZFRhc2s+KTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBzZXRUYXNr
KFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoKT4+KTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1
bmN0b3I+CiAgICAgdm9pZCBzZXRGdW5jdGlvbihjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQogICAg
IHsKLSAgICAgICAgc2V0VGFzayhjcmVhdGVTaGFyZWRUYXNrKGZ1bmN0b3IpKTsKKyAgICAgICAg
c2V0VGFzayhjcmVhdGVTaGFyZWRUYXNrPHZvaWQoKT4oZnVuY3RvcikpOwogICAgIH0KICAgICAK
ICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBmaW5pc2goKTsKQEAgLTE0Niw3ICsxNDYsNyBA
QCBwdWJsaWM6CiAgICAgLy8gY2xpZW50LT5zZXRUYXNrKHRhc2spOwogICAgIC8vIGNsaWVudC0+
ZG9Tb21lSGVscGluZygpOwogICAgIC8vIGNsaWVudC0+ZmluaXNoKCk7Ci0gICAgV1RGX0VYUE9S
VF9QUklWQVRFIHZvaWQgcnVuVGFza0luUGFyYWxsZWwoUmVmUHRyPFNoYXJlZFRhc2s+KTsKKyAg
ICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBydW5UYXNrSW5QYXJhbGxlbChSZWZQdHI8U2hhcmVk
VGFzazx2b2lkKCk+Pik7CiAKICAgICAvLyBFcXVpdmFsZW50IHRvOgogICAgIC8vIGNsaWVudC0+
c2V0RnVuY3Rpb24oZnVuY3Rvcik7CkBAIC0xNTUsNyArMTU1LDcgQEAgcHVibGljOgogICAgIHRl
bXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+CiAgICAgdm9pZCBydW5GdW5jdGlvbkluUGFyYWxsZWwo
Y29uc3QgRnVuY3RvciYgZnVuY3RvcikKICAgICB7Ci0gICAgICAgIHJ1blRhc2tJblBhcmFsbGVs
KGNyZWF0ZVNoYXJlZFRhc2soZnVuY3RvcikpOworICAgICAgICBydW5UYXNrSW5QYXJhbGxlbChj
cmVhdGVTaGFyZWRUYXNrPHZvaWQoKT4oZnVuY3RvcikpOwogICAgIH0KIAogICAgIFBhcmFsbGVs
SGVscGVyUG9vbCYgcG9vbCgpIHsgcmV0dXJuICptX3Bvb2w7IH0KQEAgLTE2NSwxMSArMTY1LDEx
IEBAIHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIFBhcmFsbGVsSGVscGVyUG9vbDsKIAogICAg
IHZvaWQgZmluaXNoKGNvbnN0IExvY2tIb2xkZXImKTsKLSAgICBSZWZQdHI8U2hhcmVkVGFzaz4g
Y2xhaW1UYXNrKGNvbnN0IExvY2tIb2xkZXImKTsKLSAgICB2b2lkIHJ1blRhc2soUmVmUHRyPFNo
YXJlZFRhc2s+KTsKKyAgICBSZWZQdHI8U2hhcmVkVGFzazx2b2lkKCk+PiBjbGFpbVRhc2soY29u
c3QgTG9ja0hvbGRlciYpOworICAgIHZvaWQgcnVuVGFzayhSZWZQdHI8U2hhcmVkVGFzazx2b2lk
KCk+Pik7CiAgICAgCiAgICAgUmVmUHRyPFBhcmFsbGVsSGVscGVyUG9vbD4gbV9wb29sOwotICAg
IFJlZlB0cjxTaGFyZWRUYXNrPiBtX3Rhc2s7CisgICAgUmVmUHRyPFNoYXJlZFRhc2s8dm9pZCgp
Pj4gbV90YXNrOwogICAgIHVuc2lnbmVkIG1fbnVtQWN0aXZlIHsgMCB9OwogfTsKIApJbmRleDog
U291cmNlL1dURi93dGYvU2hhcmVkVGFzay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3Rm
L1NoYXJlZFRhc2suaAkocmV2aXNpb24gMTkwNzQ5KQorKysgU291cmNlL1dURi93dGYvU2hhcmVk
VGFzay5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSwxMyArNDEsMTMgQEAgbmFtZXNwYWNlIFdURiB7
CiAvLwogLy8gSGVyZSdzIGFuIGV4YW1wbGUgb2YgaG93IFNoYXJlZFRhc2sgY2FuIGJlIGJldHRl
ciB0aGFuIHN0ZDo6ZnVuY3Rpb24uIElmIHlvdSBkbzoKIC8vCi0vLyBzdGQ6OmZ1bmN0aW9uIGEg
PSBiOworLy8gc3RkOjpmdW5jdGlvbjxpbnQoZG91YmxlKT4gYSA9IGI7CiAvLwogLy8gVGhlbiAi
YSIgd2lsbCBnZXQgaXRzIG93biBjb3B5IG9mIGFsbCBjYXB0dXJlZCBieS12YWx1ZSB2YXJpYWJs
ZXMuIFRoZSBhY3Qgb2YgY29weWluZyBtYXkKIC8vIHJlcXVpcmUgY2FsbHMgdG8gc3lzdGVtIG1h
bGxvYywgYW5kIGl0IG1heSBiZSBsaW5lYXIgdGltZSBpbiB0aGUgdG90YWwgc2l6ZSBvZiBjYXB0
dXJlZAogLy8gdmFyaWFibGVzLiBPbiB0aGUgb3RoZXIgaGFuZCwgaWYgeW91IGRvOgogLy8KLS8v
IFJlZlB0cjxTaGFyZWRUYXNrPiBhID0gYjsKKy8vIFJlZlB0cjxTaGFyZWRUYXNrPGludChkb3Vi
bGUpPiBhID0gYjsKIC8vCiAvLyBUaGVuICJhIiB3aWxsIHBvaW50IHRvIHRoZSBzYW1lIHRhc2sg
YXMgYiwgYW5kIHRoZSBvbmx5IHdvcmsgaW52b2x2ZWQgaXMgdGhlIENBUyB0byBpbmNyZWFzZSB0
aGUKIC8vIHJlZmVyZW5jZSBjb3VudC4KQEAgLTU4LDE4ICs1OCwyMSBAQCBuYW1lc3BhY2UgV1RG
IHsKIC8vIGNyZWF0ZVNoYXJlZFRhc2soKSwgYmVsb3cpLiBCdXQgU2hhcmVkVGFzayBhbHNvIGFs
bG93cyB5b3UgdG8gY3JlYXRlIHlvdXIgb3duIHN1YmNsYXNzIGFuZCBwdXQKIC8vIHN0YXRlIGlu
IG1lbWJlciBmaWVsZHMuIFRoaXMgY2FuIGJlIG1vcmUgbmF0dXJhbCBpZiB5b3Ugd2FudCBmaW5l
LWdyYWluZWQgY29udHJvbCBvdmVyIHdoYXQKIC8vIHN0YXRlIGlzIHNoYXJlZCBiZXR3ZWVuIGlu
c3RhbmNlcyBvZiB0aGUgdGFzay4KLWNsYXNzIFNoYXJlZFRhc2sgOiBwdWJsaWMgVGhyZWFkU2Fm
ZVJlZkNvdW50ZWQ8U2hhcmVkVGFzaz4gewordGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rpb25UeXBl
PiBjbGFzcyBTaGFyZWRUYXNrOwordGVtcGxhdGU8dHlwZW5hbWUgUmVzdWx0VHlwZSwgdHlwZW5h
bWUuLi4gQXJndW1lbnRUeXBlcz4KK2NsYXNzIFNoYXJlZFRhc2s8UmVzdWx0VHlwZShBcmd1bWVu
dFR5cGVzLi4uKT4gOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8U2hhcmVkVGFzazxSZXN1
bHRUeXBlKEFyZ3VtZW50VHlwZXMuLi4pPj4gewogcHVibGljOgogICAgIFNoYXJlZFRhc2soKSB7
IH0KICAgICB2aXJ0dWFsIH5TaGFyZWRUYXNrKCkgeyB9CiAKLSAgICB2aXJ0dWFsIHZvaWQgcnVu
KCkgPSAwOworICAgIHZpcnR1YWwgUmVzdWx0VHlwZSBydW4oQXJndW1lbnRUeXBlcy4uLikgPSAw
OwogfTsKIAogLy8gVGhpcyBpcyBhIHV0aWxpdHkgY2xhc3MgdGhhdCBhbGxvd3MgeW91IHRvIGNy
ZWF0ZSBhIFNoYXJlZFRhc2sgc3ViY2xhc3MgdXNpbmcgYSBsYW1iZGEuIFVzdWFsbHksCiAvLyB5
b3UgZG9uJ3Qgd2FudCB0byB1c2UgdGhpcyBjbGFzcyBkaXJlY3RseS4gVXNlIGNyZWF0ZVNoYXJl
ZFRhc2soKSBpbnN0ZWFkLgotdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KLWNsYXNzIFNoYXJl
ZFRhc2tGdW5jdG9yIDogcHVibGljIFNoYXJlZFRhc2sgewordGVtcGxhdGU8dHlwZW5hbWUgRnVu
Y3Rpb25UeXBlLCB0eXBlbmFtZSBGdW5jdG9yPiBjbGFzcyBTaGFyZWRUYXNrRnVuY3RvcjsKK3Rl
bXBsYXRlPHR5cGVuYW1lIFJlc3VsdFR5cGUsIHR5cGVuYW1lLi4uIEFyZ3VtZW50VHlwZXMsIHR5
cGVuYW1lIEZ1bmN0b3I+CitjbGFzcyBTaGFyZWRUYXNrRnVuY3RvcjxSZXN1bHRUeXBlKEFyZ3Vt
ZW50VHlwZXMuLi4pLCBGdW5jdG9yPiA6IHB1YmxpYyBTaGFyZWRUYXNrPFJlc3VsdFR5cGUoQXJn
dW1lbnRUeXBlcy4uLik+IHsKIHB1YmxpYzoKICAgICBTaGFyZWRUYXNrRnVuY3Rvcihjb25zdCBG
dW5jdG9yJiBmdW5jdG9yKQogICAgICAgICA6IG1fZnVuY3RvcihmdW5jdG9yKQpAQCAtNzcsOSAr
ODAsOSBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgotICAgIHZvaWQgcnVuKCkgb3ZlcnJp
ZGUKKyAgICBSZXN1bHRUeXBlIHJ1bihBcmd1bWVudFR5cGVzLi4uIGFyZ3VtZW50cykgb3ZlcnJp
ZGUKICAgICB7Ci0gICAgICAgIG1fZnVuY3RvcigpOworICAgICAgICByZXR1cm4gbV9mdW5jdG9y
KGFyZ3VtZW50cy4uLik7CiAgICAgfQogCiAgICAgRnVuY3RvciBtX2Z1bmN0b3I7CkBAIC04Nyw3
ICs5MCw3IEBAIHByaXZhdGU6CiAKIC8vIENyZWF0ZSBhIFNoYXJlZFRhc2sgZnJvbSBhIGZ1bmN0
b3IsIHN1Y2ggYXMgYSBsYW1iZGEuIFlvdSBjYW4gdXNlIHRoaXMgbGlrZSBzbzoKIC8vCi0vLyBS
ZWZQdHI8U2hhcmVkVGFzaz4gdGFzayA9IGNyZWF0ZVNoYXJlZFRhc2soCisvLyBSZWZQdHI8U2hh
cmVkVGFzazx2b2lkKCk+PiB0YXNrID0gY3JlYXRlU2hhcmVkVGFzazx2b2lkKCk+KAogLy8gICAg
IFs9XSAoKSB7CiAvLyAgICAgICAgIGRvIHRoaW5nczsKIC8vICAgICB9KTsKQEAgLTEwMiwxMCAr
MTA1LDEwIEBAIHByaXZhdGU6CiAvLyBPbiB0aGUgb3RoZXIgaGFuZCwgaWYgeW91IHVzZSBzb21l
dGhpbmcgbGlrZSBQYXJhbGxlbEhlbHBlckNsaWVudDo6cnVuVGFza0luUGFyYWxsZWwoKSAob3Ig
aXRzCiAvLyBoZWxwZXIsIHJ1bkZ1bmN0aW9uSW5QYXJhbGxlbCgpLCB3aGljaCBkb2VzIGNyZWF0
ZVNoYXJlZFRhc2soKSBmb3IgeW91KSwgdGhlbiBpdCBjYW4gYmUgT0sgdG8KIC8vIHVzZSBbJl0s
IHNpbmNlIHRoZSBzdGFjayBmcmFtZSB3aWxsIHJlbWFpbiBsaXZlIGZvciB0aGUgZW50aXJlIGR1
cmF0aW9uIG9mIHRoZSB0YXNrJ3MgbGlmZXRpbWUuCi10ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9y
PgotUmVmPFNoYXJlZFRhc2s+IGNyZWF0ZVNoYXJlZFRhc2soY29uc3QgRnVuY3RvciYgZnVuY3Rv
cikKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0aW9uVHlwZSwgdHlwZW5hbWUgRnVuY3Rvcj4KK1Jl
ZjxTaGFyZWRUYXNrPEZ1bmN0aW9uVHlwZT4+IGNyZWF0ZVNoYXJlZFRhc2soY29uc3QgRnVuY3Rv
ciYgZnVuY3RvcikKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTaGFyZWRUYXNrRnVuY3Rv
cjxGdW5jdG9yPihmdW5jdG9yKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2hhcmVkVGFz
a0Z1bmN0b3I8RnVuY3Rpb25UeXBlLCBGdW5jdG9yPihmdW5jdG9yKSk7CiB9CiAKIH0gLy8gbmFt
ZXNwYWNlIFdURgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>262841</attachid>
            <date>2015-10-10 17:54:49 -0700</date>
            <delta_ts>2015-10-10 18:23:36 -0700</delta_ts>
            <desc>almost done</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>100550</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTkwODQzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyMyBA
QAorMjAxNS0xMC0xMCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEZUTCBzaG91bGQgZ2VuZXJhdGUgY29kZSB0byBjYWxsIHNsb3cgcGF0aHMgbGF6aWx5CisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDk5MzYKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZSBvZnRlbiBoYXZl
IGNvbXBsZXggc2xvdyBwYXRocyBpbiBGVEwtZ2VuZXJhdGVkIGNvZGUuIFRob3NlIHNsb3cgcGF0
aHMgbWF5IG5ldmVyIHJ1bi4gRXZlbgorICAgICAgICBpZiB0aGV5IGRvIHJ1biwgdGhleSBkb24n
dCBuZWVkIHN0ZWxsYXIgcGVyZm9ybWFuY2UuIFNvLCBpdCBkb2Vzbid0IG1ha2Ugc2Vuc2UgdG8g
aGF2ZSBMTFZNCisgICAgICAgIHdvcnJ5IGFib3V0IGNvbXBpbGluZyBzdWNoIHNsb3cgcGF0aCBj
b2RlLgorCisgICAgICAgIFRoaXMgcGF0Y2ggZW5hYmxlcyB1cyB0byB1c2Ugb3VyIG93biBNYWNy
b0Fzc2VtYmxlciBmb3IgY29tcGlsaW5nIHRoZSBzbG93IHBhdGggaW5zaWRlIEZUTAorICAgICAg
ICBjb2RlLiBJdCBkb2VzIHRoaXMgYnkgdXNpbmcgYSBjcmF6eSBsYW1iZGEgdGhpbmd5IChzZWUg
RlRMTG93ZXJERkdUb0xMVk0uY3BwJ3MgbGF6eVNsb3dQYXRoKCkKKyAgICAgICAgYW5kIGl0cyBk
b2N1bWVudGF0aW9uKS4gVGhlIHJlc3VsdCBpcyBxdWl0ZSBuYXR1cmFsIHRvIHVzZS4KKworICAg
ICAgICBFdmVuIGZvciBzdHJhaWdodCBzbG93IHBhdGggY2FsbHMgdmlhIHNvbWV0aGluZyBsaWtl
IHZtQ2FsbCgpLCB0aGUgbGF6eVNsb3dQYXRoIG9mZmVycyB0aGUKKyAgICAgICAgYmVuZWZpdCB0
aGF0IHRoZSBjYWxsIG1hcnNoYWxsaW5nIGFuZCB0aGUgZXhjZXB0aW9uIGNoZWNraW5nIGFyZSBu
b3QgZXhwcmVzc2VkIHVzaW5nIExMVk0gSVIKKyAgICAgICAgYW5kIGRvIG5vdCByZXF1aXJlIExM
Vk0gdG8gdGhpbmsgYWJvdXQgaXQuIEl0IGFsc28gaGFzIHRoZSBiZW5lZml0IHRoYXQgd2UgbmV2
ZXIgZ2VuZXJhdGUgdGhlCisgICAgICAgIGNvZGUgaWYgaXQgbmV2ZXIgcnVucy4gVGhhdCdzIGdy
ZWF0LCBzaW5jZSBmdW5jdGlvbiBjYWxscyB1c3VhbGx5IGludm9sdmUgfjEwIGluc3RydWN0aW9u
cworICAgICAgICB0b3RhbCAobW92ZSBhcmd1bWVudHMgdG8gYXJndW1lbnQgcmVnaXN0ZXJzLCBt
YWtlIHRoZSBjYWxsLCBjaGVjayBleGNlcHRpb24sIGV0Yy4pLgorCisgICAgICAgIFRoaXMgc2hv
d3Mgc21hbGwgc3BlZWQtdXBzIG9uIGEgYnVuY2ggb2YgdGhpbmdzLiBObyBiaWcgd2luIG9uIGFu
eSBiZW5jaG1hcmsgYWdncmVnYXRlLiBCdXQKKyAgICAgICAgbWFpbmx5IHRoaXMgaXMgZG9uZSBm
b3IgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0OTg1Miwgd2hlcmUg
d2UgZm91bmQgdGhhdAorICAgICAgICBvdXRsaW5pbmcgdGhlIHNsb3cgcGF0aCBpbiB0aGlzIHdh
eSB3YXMgYSBzaWduaWZpY2FudCBzcGVlZCBib29zdC4KKworICAgICAgICAqIENNYWtlTGlzdHMu
dHh0OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4
cHJvajoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
OgorICAgICAgICAqIGFzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmg6CisgICAgICAg
IChKU0M6OkFic3RyYWN0TWFjcm9Bc3NlbWJsZXI6OnJlcGxhY2VXaXRoQWRkcmVzc0NvbXB1dGF0
aW9uKToKKyAgICAgICAgKEpTQzo6QWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjo6YWRkTGlua1Rhc2sp
OgorICAgICAgICAoSlNDOjpBYnN0cmFjdE1hY3JvQXNzZW1ibGVyOjpBYnN0cmFjdE1hY3JvQXNz
ZW1ibGVyKToKKyAgICAgICAgKiBhc3NlbWJsZXIvTGlua0J1ZmZlci5jcHA6CisgICAgICAgIChK
U0M6OkxpbmtCdWZmZXI6OmxpbmtDb2RlKToKKyAgICAgICAgKEpTQzo6TGlua0J1ZmZlcjo6YWxs
b2NhdGUpOgorICAgICAgICAoSlNDOjpMaW5rQnVmZmVyOjpwZXJmb3JtRmluYWxpemF0aW9uKToK
KyAgICAgICAgKiBhc3NlbWJsZXIvTGlua0J1ZmZlci5oOgorICAgICAgICAoSlNDOjpMaW5rQnVm
ZmVyOjp3YXNBbHJlYWR5RGlzYXNzZW1ibGVkKToKKyAgICAgICAgKEpTQzo6TGlua0J1ZmZlcjo6
ZGlkQWxyZWFkeURpc2Fzc2VtYmxlKToKKyAgICAgICAgKEpTQzo6TGlua0J1ZmZlcjo6dm0pOgor
ICAgICAgICAoSlNDOjpMaW5rQnVmZmVyOjpleGVjdXRhYmxlT2Zmc2V0Rm9yKToKKyAgICAgICAg
KiBieXRlY29kZS9Db2RlT3JpZ2luLmg6CisgICAgICAgIChKU0M6OkNvZGVPcmlnaW46OkNvZGVP
cmlnaW4pOgorICAgICAgICAoSlNDOjpDb2RlT3JpZ2luOjppc1NldCk6CisgICAgICAgIChKU0M6
OkNvZGVPcmlnaW46Om9wZXJhdG9yIGJvb2wpOgorICAgICAgICAoSlNDOjpDb2RlT3JpZ2luOjpp
c0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSk6CisgICAgICAgIChKU0M6OkNvZGVPcmlnaW46Om9wZXJh
dG9yISk6IERlbGV0ZWQuCisgICAgICAgICogZnRsL0ZUTENvbXBpbGUuY3BwOgorICAgICAgICAo
SlNDOjpGVEw6Om1tQWxsb2NhdGVEYXRhU2VjdGlvbik6CisgICAgICAgICogZnRsL0ZUTElubGlu
ZUNhY2hlRGVzY3JpcHRvci5oOgorICAgICAgICAoSlNDOjpGVEw6OklubGluZUNhY2hlRGVzY3Jp
cHRvcjo6SW5saW5lQ2FjaGVEZXNjcmlwdG9yKToKKyAgICAgICAgKEpTQzo6RlRMOjpDaGVja0lu
RGVzY3JpcHRvcjo6Q2hlY2tJbkRlc2NyaXB0b3IpOgorICAgICAgICAoSlNDOjpGVEw6OkxhenlT
bG93UGF0aERlc2NyaXB0b3I6OkxhenlTbG93UGF0aERlc2NyaXB0b3IpOgorICAgICAgICAqIGZ0
bC9GVExKSVRDb2RlLmg6CisgICAgICAgICogZnRsL0ZUTEpJVEZpbmFsaXplci5jcHA6CisgICAg
ICAgIChKU0M6OkZUTDo6SklURmluYWxpemVyOjpmaW5hbGl6ZUZ1bmN0aW9uKToKKyAgICAgICAg
KiBmdGwvRlRMSklURmluYWxpemVyLmg6CisgICAgICAgICogZnRsL0ZUTExhenlTbG93UGF0aC5j
cHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpGVEw6OkxhenlTbG93UGF0aDo6TGF6eVNsb3dQYXRo
KToKKyAgICAgICAgKEpTQzo6RlRMOjpMYXp5U2xvd1BhdGg6On5MYXp5U2xvd1BhdGgpOgorICAg
ICAgICAoSlNDOjpGVEw6OkxhenlTbG93UGF0aDo6Z2VuZXJhdGUpOgorICAgICAgICAqIGZ0bC9G
VExMYXp5U2xvd1BhdGguaDogQWRkZWQuCisgICAgICAgIChKU0M6OkZUTDo6TGF6eVNsb3dQYXRo
OjpjcmVhdGVHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpGVEw6OkxhenlTbG93UGF0aDo6cGF0
Y2hwb2ludCk6CisgICAgICAgIChKU0M6OkZUTDo6TGF6eVNsb3dQYXRoOjp1c2VkUmVnaXN0ZXJz
KToKKyAgICAgICAgKEpTQzo6RlRMOjpMYXp5U2xvd1BhdGg6OmNhbGxTaXRlSW5kZXgpOgorICAg
ICAgICAoSlNDOjpGVEw6OkxhenlTbG93UGF0aDo6c3R1Yik6CisgICAgICAgICogZnRsL0ZUTExh
enlTbG93UGF0aENhbGwuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkZUTDo6Y3JlYXRlTGF6eUNh
bGxHZW5lcmF0b3IpOgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvTExWTS5jcHA6CisgICAg
ICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUNyZWF0ZUFjdGl2YXRp
b24pOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVOZXdG
dW5jdGlvbik6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvTExWTTo6Y29tcGls
ZUNyZWF0ZURpcmVjdEFyZ3VtZW50cyk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRG
R1RvTExWTTo6Y29tcGlsZU5ld0FycmF5V2l0aFNpemUpOgorICAgICAgICAoSlNDOjpGVEw6OkRG
Rzo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVNYWtlUm9wZSk6CisgICAgICAgIChKU0M6OkZUTDo6
REZHOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZU5vdGlmeVdyaXRlKToKKyAgICAgICAgKEpTQzo6
RlRMOjpERkc6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlSXNPYmplY3RPck51bGwpOgorICAgICAg
ICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVJc0Z1bmN0aW9uKToKKyAg
ICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlSW4pOgorICAgICAg
ICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVNYXRlcmlhbGl6ZU5ld09i
amVjdCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZU1h
dGVyaWFsaXplQ3JlYXRlQWN0aXZhdGlvbik6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dl
ckRGR1RvTExWTTo6Y29tcGlsZUNoZWNrV2F0Y2hkb2dUaW1lcik6CisgICAgICAgIChKU0M6OkZU
TDo6REZHOjpMb3dlckRGR1RvTExWTTo6YWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2VXaXRoU2l6ZUlt
cGwpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0xMVk06OmFsbG9jYXRlT2Jq
ZWN0KToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9MTFZNOjphbGxvY2F0ZUpT
QXJyYXkpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0xMVk06OmJ1aWxkVHlw
ZU9mKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9MTFZNOjpzZW5zaWJsZURv
dWJsZVRvSW50MzIpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0xMVk06Omxh
enlTbG93UGF0aCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvTExWTTo6c3Bl
Y3VsYXRlKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9MTFZNOjplbWl0U3Rv
cmVCYXJyaWVyKToKKyAgICAgICAgKiBmdGwvRlRMT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChK
U0M6OkZUTDo6b3BlcmF0aW9uTWF0ZXJpYWxpemVPYmplY3RJbk9TUik6CisgICAgICAgIChKU0M6
OkZUTDo6Y29tcGlsZUZUTExhenlTbG93UGF0aCk6CisgICAgICAgICogZnRsL0ZUTE9wZXJhdGlv
bnMuaDoKKyAgICAgICAgKiBmdGwvRlRMU2xvd1BhdGhDYWxsLmNwcDoKKyAgICAgICAgKEpTQzo6
RlRMOjpTbG93UGF0aENhbGxDb250ZXh0OjpTbG93UGF0aENhbGxDb250ZXh0KToKKyAgICAgICAg
KEpTQzo6RlRMOjpTbG93UGF0aENhbGxDb250ZXh0Ojp+U2xvd1BhdGhDYWxsQ29udGV4dCk6Cisg
ICAgICAgIChKU0M6OkZUTDo6U2xvd1BhdGhDYWxsQ29udGV4dDo6a2V5V2l0aFRhcmdldCk6Cisg
ICAgICAgIChKU0M6OkZUTDo6U2xvd1BhdGhDYWxsQ29udGV4dDo6bWFrZUNhbGwpOgorICAgICAg
ICAoSlNDOjpGVEw6OmNhbGxTaXRlSW5kZXhGb3JDb2RlT3JpZ2luKToKKyAgICAgICAgKEpTQzo6
RlRMOjpzdG9yZUNvZGVPcmlnaW4pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpGVEw6OmNhbGxP
cGVyYXRpb24pOiBEZWxldGVkLgorICAgICAgICAqIGZ0bC9GVExTbG93UGF0aENhbGwuaDoKKyAg
ICAgICAgKEpTQzo6RlRMOjpjYWxsT3BlcmF0aW9uKToKKyAgICAgICAgKiBmdGwvRlRMU3RhdGUu
aDoKKyAgICAgICAgKiBmdGwvRlRMVGh1bmtzLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpnZW5l
cmljR2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6RlRMOjpvc3JFeGl0
R2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6RlRMOjpsYXp5U2xvd1Bh
dGhHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpGVEw6OnJlZ2lzdGVy
Q2xvYmJlckNoZWNrKToKKyAgICAgICAgKiBmdGwvRlRMVGh1bmtzLmg6CisgICAgICAgICogaW50
ZXJwcmV0ZXIvQ2FsbEZyYW1lLmg6CisgICAgICAgIChKU0M6OkNhbGxTaXRlSW5kZXg6OkNhbGxT
aXRlSW5kZXgpOgorICAgICAgICAoSlNDOjpDYWxsU2l0ZUluZGV4OjpvcGVyYXRvciBib29sKToK
KyAgICAgICAgKEpTQzo6Q2FsbFNpdGVJbmRleDo6Yml0cyk6CisgICAgICAgICogaml0L0NDYWxs
SGVscGVycy5oOgorICAgICAgICAoSlNDOjpDQ2FsbEhlbHBlcnM6OnNldHVwQXJndW1lbnQpOgor
ICAgICAgICAoSlNDOjpDQ2FsbEhlbHBlcnM6OnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZSk6
CisgICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMuY3BwOgorCiAyMDE1LTEwLTEwICBBbmRyZWFz
IEtsaW5nICA8YWtsaW5nQGFwcGxlLmNvbT4KIAogICAgICAgICBSZWR1Y2UgcG9pbnRsZXNzIG1h
bGxvYyB0cmFmZmljIGluIENvZGVCbG9jayBjb25zdHJ1Y3Rpb24uCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAxOTA4NDMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTkwNSw2ICs5MDUsNyBA
QCBpZiAoRU5BQkxFX0ZUTF9KSVQpCiAgICAgICAgIGZ0bC9GVExKU0NhbGxCYXNlLmNwcAogICAg
ICAgICBmdGwvRlRMSlNDYWxsVmFyYXJncy5jcHAKICAgICAgICAgZnRsL0ZUTEpTVGFpbENhbGwu
Y3BwCisgICAgICAgIGZ0bC9GVExMYXp5U2xvd1BhdGguY3BwCiAgICAgICAgIGZ0bC9GVExMaW5r
LmNwcAogICAgICAgICBmdGwvRlRMTG9jYXRpb24uY3BwCiAgICAgICAgIGZ0bC9GVExMb3dlckRG
R1RvTExWTS5jcHAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52
Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvagko
cmV2aXNpb24gMTkwODQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
LnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNTQwLDYg
KzU0MCw3IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxmdGxcRlRMSlNDYWxsQmFzZS5j
cHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxmdGxcRlRMSlNDYWxsVmFyYXJncy5j
cHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxmdGxcRlRMSlNUYWlsQ2FsbC5jcHAi
IC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxmdGxcRlRMTGF6eVNsb3dQYXRoLmNwcCIg
Lz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGZ0bFxGVExMaW5rLmNwcCIgLz4KICAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGZ0bFxGVExMb2NhdGlvbi5jcHAiIC8+CiAgICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxmdGxcRlRMTG93ZXJERkdUb0xMVk0uY3BwIiAvPgpAQCAtMTMwMiw2
ICsxMzAzLDggQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGZ0bFxGVExKU0NhbGxCYXNl
LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxmdGxcRlRMSlNDYWxsVmFyYXJncy5o
IiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZnRsXEZUTEpTVGFpbENhbGwuaCIgLz4K
KyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGZ0bFxGVExMYXp5U2xvd1BhdGguaCIgLz4KKyAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGZ0bFxGVExMYXp5U2xvd1BhdGhDYWxsLmgiIC8+CiAg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxmdGxcRlRMTGluay5oIiAvPgogICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cZnRsXEZUTExvY2F0aW9uLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxmdGxcRlRMTG93ZXJERkdUb0xMVk0uaCIgLz4KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCShyZXZpc2lvbiAxOTA4NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpA
QCAtNDk0LDYgKzQ5NCw5IEBACiAJCTBGQjE3NjYyMTk2QjhGOUUwMDkxMDUyQSAvKiBERkdQdXJl
VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZCMTc2NUUxOTZCOEY5RTAwOTEwNTJBIC8qIERGR1B1cmVWYWx1ZS5jcHAgKi87IH07CiAJCTBG
QjE3NjYzMTk2QjhGOUUwMDkxMDUyQSAvKiBERkdQdXJlVmFsdWUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjE3NjVGMTk2QjhGOUUwMDkxMDUyQSAv
KiBERkdQdXJlVmFsdWUuaCAqLzsgfTsKIAkJMEZCNDM4QTMxOTI3MEIxRDAwRTFGQkM5IC8qIFN0
cnVjdHVyZVNldC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkI0MzhBMjE5MjcwQjFEMDBFMUZCQzkgLyogU3RydWN0dXJlU2V0LmNwcCAqLzsgfTsK
KwkJMEZCNEZCNzMxQkM4NDMxNDAwMjVDQTVBIC8qIEZUTExhenlTbG93UGF0aC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI0RkI3MDFCQzg0MzE0
MDAyNUNBNUEgLyogRlRMTGF6eVNsb3dQYXRoLmNwcCAqLzsgfTsKKwkJMEZCNEZCNzQxQkM4NDMx
NDAwMjVDQTVBIC8qIEZUTExhenlTbG93UGF0aC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCNEZCNzExQkM4NDMxNDAwMjVDQTVBIC8qIEZUTExhenlT
bG93UGF0aC5oICovOyB9OworCQkwRkI0RkI3NTFCQzg0MzE0MDAyNUNBNUEgLyogRlRMTGF6eVNs
b3dQYXRoQ2FsbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZCNEZCNzIxQkM4NDMxNDAwMjVDQTVBIC8qIEZUTExhenlTbG93UGF0aENhbGwuaCAqLzsg
fTsKIAkJMEZCNTQ2NzcxNEY1OUI1QzAwMkMyOTg5IC8qIExhenlPcGVyYW5kVmFsdWVQcm9maWxl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI1NDY3
NjE0RjU5QUQxMDAyQzI5ODkgLyogTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkI1NDY3OTE0RjVDNDZC
MDAyQzI5ODkgLyogTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCNTQ2NzgxNEY1QzQ2ODAwMkMyOTg5IC8q
IExhenlPcGVyYW5kVmFsdWVQcm9maWxlLmNwcCAqLzsgfTsKIAkJMEZCNTQ2N0IxNEY1QzdFMTAw
MkMyOTg5IC8qIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjU0NjdBMTRGNUM3RDQwMDJDMjk4OSAv
KiBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTIzNTIsNiArMjM1NSw5IEBACiAJCTBGQjRCNTFG
MTZCNjI3NzIwMDNGNjk2QiAvKiBERkdOb2RlQWxsb2NhdG9yLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IERGR05vZGVBbGxvY2F0b3IuaDsgcGF0aCA9IGRmZy9ERkdOb2RlQWxs
b2NhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQjRCNTIxMTZCNjI3OEQw
MDNGNjk2QiAvKiBGdW5jdGlvbkV4ZWN1dGFibGVEdW1wLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEZ1bmN0aW9uRXhlY3V0YWJsZUR1bXAuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRkI0QjUyMjE2QjYyNzhEMDAzRjY5NkIgLyogRnVuY3Rpb25F
eGVjdXRhYmxlRHVtcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGdW5jdGlv
bkV4ZWN1dGFibGVEdW1wLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGQjRGQjcw
MUJDODQzMTQwMDI1Q0E1QSAvKiBGVExMYXp5U2xvd1BhdGguY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gRlRMTGF6eVNsb3dQYXRoLmNwcDsgcGF0aCA9IGZ0bC9GVExM
YXp5U2xvd1BhdGguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkI0RkI3MTFC
Qzg0MzE0MDAyNUNBNUEgLyogRlRMTGF6eVNsb3dQYXRoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IEZUTExhenlTbG93UGF0aC5oOyBwYXRoID0gZnRsL0ZUTExhenlTbG93UGF0
aC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkI0RkI3MjFCQzg0MzE0MDAyNUNB
NUEgLyogRlRMTGF6eVNsb3dQYXRoQ2FsbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBGVExMYXp5U2xvd1BhdGhDYWxsLmg7IHBhdGggPSBmdGwvRlRMTGF6eVNsb3dQYXRoQ2Fs
bC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkI1NDY3NjE0RjU5QUQxMDAyQzI5
ODkgLyogTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEZCNTQ2NzgxNEY1QzQ2ODAwMkMyOTg5IC8qIExhenlPcGVyYW5kVmFsdWVQcm9m
aWxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExhenlPcGVyYW5k
VmFsdWVQcm9maWxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZCNTQ2N0Ex
NEY1QzdENDAwMkMyOTg5IC8qIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzk4OSw2ICszOTk1LDkgQEAKIAkJCQkw
RkQxMjAzMjFBOEM4NUJEMDAwRjUyODAgLyogRlRMSlNDYWxsVmFyYXJncy5oICovLAogCQkJCTYy
Nzc0REE4MUI4RDRCMTkwMDA2RjA1QSAvKiBGVExKU1RhaWxDYWxsLmNwcCAqLywKIAkJCQk2Mjc3
NERBOTFCOEQ0QjE5MDAwNkYwNUEgLyogRlRMSlNUYWlsQ2FsbC5oICovLAorCQkJCTBGQjRGQjcw
MUJDODQzMTQwMDI1Q0E1QSAvKiBGVExMYXp5U2xvd1BhdGguY3BwICovLAorCQkJCTBGQjRGQjcx
MUJDODQzMTQwMDI1Q0E1QSAvKiBGVExMYXp5U2xvd1BhdGguaCAqLywKKwkJCQkwRkI0RkI3MjFC
Qzg0MzE0MDAyNUNBNUEgLyogRlRMTGF6eVNsb3dQYXRoQ2FsbC5oICovLAogCQkJCTBGOEYyQjkz
MTcyRTA0OUUwMDdEQkRBNSAvKiBGVExMaW5rLmNwcCAqLywKIAkJCQkwRjhGMkI5NDE3MkUwNDlF
MDA3REJEQTUgLyogRlRMTGluay5oICovLAogCQkJCTBGQ0VGQUREMTgwNzM4QzAwMDQ3MkNFNCAv
KiBGVExMb2NhdGlvbi5jcHAgKi8sCkBAIC02MjU5LDYgKzYyNjgsNyBAQAogCQkJCTBGNjM5NDc4
MTVEQ0UzNEIwMDZBNTk3QyAvKiBERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRjUwQUYzQzE5M0U4QjM5MDA2NzRFRTggLyogREZHU3RydWN0dXJlQ2xvYmJl
clN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjc5MDg1NjE5QTI5MEIyMDBGNjMxMEMgLyog
REZHU3RydWN0dXJlUmVnaXN0cmF0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGQjRG
Qjc1MUJDODQzMTQwMDI1Q0E1QSAvKiBGVExMYXp5U2xvd1BhdGhDYWxsLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjJGQ0NGRjE4QTYwMDcwMDAxQTI3RjggLyogREZHVGhyZWFkRGF0YS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEZDMDk3QTIxNDZCMjhDQzAwQ0YyNDQyIC8qIERGR1RodW5rcy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEZEOEEzMjgxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1RpZXJVcENo
ZWNrSW5qZWN0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLApAQCAtNjYxNyw2ICs2NjI3LDcgQEAK
IAkJCQk3QzE4NEUxQjE3QkVEQkQzMDA3Q0I2M0EgLyogSlNQcm9taXNlLmggaW4gSGVhZGVycyAq
LywKIAkJCQk3QzE4NEUyMzE3QkVFMjQwMDA3Q0I2M0EgLyogSlNQcm9taXNlQ29uc3RydWN0b3Iu
aCBpbiBIZWFkZXJzICovLAogCQkJCTdDMDA4Q0RCMTg3MTI0QkIwMDk1NUMyNCAvKiBKU1Byb21p
c2VEZWZlcnJlZC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZCNEZCNzQxQkM4NDMxNDAwMjVDQTVB
IC8qIEZUTExhenlTbG93UGF0aC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0MxODRFMUYxN0JFRTIy
RTAwN0NCNjNBIC8qIEpTUHJvbWlzZVByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkEw
NUFCRDYxOTYxREYyNDAwMzQxNzUwIC8qIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJRTNFRjg4NzUxQjY2REYyMzAwM0YyNkNCIC8qIEpTUHJvcGVydHlOYW1l
SXRlcmF0b3IuaCBpbiBIZWFkZXJzICovLApAQCAtODA1MCw2ICs4MDYxLDcgQEAKIAkJCQkxNDQ2
OURFQjEwN0VDN0U3MDA2NTA0NDYgLyogU3RyaW5nQ29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJNzBFQzBFQzYxQUEwRDdEQTAwQjZBQUZBIC8qIFN0cmluZ0l0ZXJhdG9yUHJvdG90
eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0NDY5REVDMTA3RUM3RTcwMDY1MDQ0NiAvKiBT
dHJpbmdPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZCNEZCNzMxQkM4NDMxNDAwMjVD
QTVBIC8qIEZUTExhenlTbG93UGF0aC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDQ2OURFRDEw
N0VDN0U3MDA2NTA0NDYgLyogU3RyaW5nUHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTkzMzVGMjREMTJFNjc2NUIwMDJCNTU1MyAvKiBTdHJpbmdSZWN1cnNpb25DaGVja2VyLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUJDREUzQjQzMEU2QzgzMkQwMDE0NTNBNyAvKiBTdHJ1Y3R1cmUu
Y3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVy
L0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAkocmV2aXNpb24gMTkwODQz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1i
bGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJPcHRpb25z
LmgiCiAjaW5jbHVkZSA8d3RmL0NyeXB0b2dyYXBoaWNhbGx5UmFuZG9tTnVtYmVyLmg+CiAjaW5j
bHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1NoYXJlZFRhc2suaD4KICNp
bmNsdWRlIDx3dGYvV2Vha1JhbmRvbS5oPgogCiAjaWYgRU5BQkxFKEFTU0VNQkxFUikKQEAgLTEw
MDQsNiArMTAwNSwxNyBAQCBwdWJsaWM6CiAgICAgICAgIEFzc2VtYmxlclR5cGU6OnJlcGxhY2VX
aXRoQWRkcmVzc0NvbXB1dGF0aW9uKGxhYmVsLmRhdGFMb2NhdGlvbigpKTsKICAgICB9CiAKKyAg
ICB2b2lkIGFkZExpbmtUYXNrKFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoTGlua0J1ZmZlciYpPj4g
dGFzaykKKyAgICB7CisgICAgICAgIG1fbGlua1Rhc2tzLmFwcGVuZCh0YXNrKTsKKyAgICB9CisK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgYWRkTGlua1Rhc2soY29u
c3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB7CisgICAgICAgIG1fbGlua1Rhc2tzLmFwcGVuZChj
cmVhdGVTaGFyZWRUYXNrPHZvaWQoTGlua0J1ZmZlciYpPihmdW5jdG9yKSk7CisgICAgfQorCiBw
cm90ZWN0ZWQ6CiAgICAgQWJzdHJhY3RNYWNyb0Fzc2VtYmxlcigpCiAgICAgICAgIDogbV9yYW5k
b21Tb3VyY2UoY3J5cHRvZ3JhcGhpY2FsbHlSYW5kb21OdW1iZXIoKSkKQEAgLTEwOTksMTAgKzEx
MTEsOSBAQCBwcm90ZWN0ZWQ6CiAKICAgICB1bnNpZ25lZCBtX3RlbXBSZWdpc3RlcnNWYWxpZEJp
dHM7CiAKLSAgICBmcmllbmQgY2xhc3MgTGlua0J1ZmZlcjsKLQotcHJpdmF0ZToKKyAgICBWZWN0
b3I8UmVmUHRyPFNoYXJlZFRhc2s8dm9pZChMaW5rQnVmZmVyJik+Pj4gbV9saW5rVGFza3M7CiAK
KyAgICBmcmllbmQgY2xhc3MgTGlua0J1ZmZlcjsKIH07IC8vIGNsYXNzIEFic3RyYWN0TWFjcm9B
c3NlbWJsZXIKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5jcHAJKHJldmlzaW9uIDE5MDg0MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE5Myw2ICsxOTMsOCBAQCB2b2lkIExpbmtCdWZmZXI6OmxpbmtDb2RlKE1hY3JvQXNz
ZW1ibGVyCiAjZWxpZiBDUFUoQVJNNjQpCiAgICAgY29weUNvbXBhY3RBbmRMaW5rQ29kZTx1aW50
MzJfdD4obWFjcm9Bc3NlbWJsZXIsIG93bmVyVUlELCBlZmZvcnQpOwogI2VuZGlmCisKKyAgICBt
X2xpbmtUYXNrcyA9IFdURjo6bW92ZShtYWNyb0Fzc2VtYmxlci5tX2xpbmtUYXNrcyk7CiB9CiAK
IHZvaWQgTGlua0J1ZmZlcjo6YWxsb2NhdGUoc2l6ZV90IGluaXRpYWxTaXplLCB2b2lkKiBvd25l
clVJRCwgSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQpAQCAtMjI0LDYgKzIyNiw5IEBAIHZv
aWQgTGlua0J1ZmZlcjo6c2hyaW5rKHNpemVfdCBuZXdTaXplKQogCiB2b2lkIExpbmtCdWZmZXI6
OnBlcmZvcm1GaW5hbGl6YXRpb24oKQogeworICAgIGZvciAoYXV0byYgdGFzayA6IG1fbGlua1Rh
c2tzKQorICAgICAgICB0YXNrLT5ydW4oKnRoaXMpOworCiAjaWZuZGVmIE5ERUJVRwogICAgIEFT
U0VSVCghaXNDb21waWxhdGlvblRocmVhZCgpKTsKICAgICBBU1NFUlQoIW1fY29tcGxldGVkKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5oCShy
ZXZpc2lvbiAxOTA4NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtC
dWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjU5LDYgKzI1OSw4IEBAIHB1YmxpYzoKICAgICBi
b29sIHdhc0FscmVhZHlEaXNhc3NlbWJsZWQoKSBjb25zdCB7IHJldHVybiBtX2FscmVhZHlEaXNh
c3NlbWJsZWQ7IH0KICAgICB2b2lkIGRpZEFscmVhZHlEaXNhc3NlbWJsZSgpIHsgbV9hbHJlYWR5
RGlzYXNzZW1ibGVkID0gdHJ1ZTsgfQogCisgICAgVk0mIHZtKCkgeyByZXR1cm4gKm1fdm07IH0K
KwogcHJpdmF0ZToKICNpZiBFTkFCTEUoQlJBTkNIX0NPTVBBQ1RJT04pCiAgICAgaW50IGV4ZWN1
dGFibGVPZmZzZXRGb3IoaW50IGxvY2F0aW9uKQpAQCAtMzE1LDYgKzMxNyw3IEBAIHByaXZhdGU6
CiAgICAgYm9vbCBtX2NvbXBsZXRlZDsKICNlbmRpZgogICAgIGJvb2wgbV9hbHJlYWR5RGlzYXNz
ZW1ibGVkIHsgZmFsc2UgfTsKKyAgICBWZWN0b3I8UmVmUHRyPFNoYXJlZFRhc2s8dm9pZChMaW5r
QnVmZmVyJik+Pj4gbV9saW5rVGFza3M7CiB9OwogCiAjZGVmaW5lIEZJTkFMSVpFX0NPREVfSUYo
Y29uZGl0aW9uLCBsaW5rQnVmZmVyUmVmZXJlbmNlLCBkYXRhTG9nRkFyZ3VtZW50c0ZvckhlYWRp
bmcpICBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2lu
LmgJKHJldmlzaW9uIDE5MDg0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlT3JpZ2luLmgJKHdvcmtpbmcgY29weSkKQEAgLTc0LDcgKzc0LDcgQEAgc3RydWN0IENvZGVP
cmlnaW4gewogICAgIH0KICAgICAKICAgICBib29sIGlzU2V0KCkgY29uc3QgeyByZXR1cm4gYnl0
ZWNvZGVJbmRleCAhPSBpbnZhbGlkQnl0ZWNvZGVJbmRleDsgfQotICAgIGJvb2wgb3BlcmF0b3Ih
KCkgY29uc3QgeyByZXR1cm4gIWlzU2V0KCk7IH0KKyAgICBleHBsaWNpdCBvcGVyYXRvciBib29s
KCkgY29uc3QgeyByZXR1cm4gaXNTZXQoKTsgfQogICAgIAogICAgIGJvb2wgaXNIYXNoVGFibGVE
ZWxldGVkVmFsdWUoKSBjb25zdAogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMQ29tcGlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExDb21waWxlLmNwcAkocmV2aXNpb24gMTkwODQzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExDb21waWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMzLDcgKzMzMyw3IEBA
IHN0YXRpYyB2b2lkIGZpeEZ1bmN0aW9uQmFzZWRPblN0YWNrTWFwcygKIHsKICAgICBHcmFwaCYg
Z3JhcGggPSBzdGF0ZS5ncmFwaDsKICAgICBWTSYgdm0gPSBncmFwaC5tX3ZtOwotICAgIFN0YWNr
TWFwcyBzdGFja21hcHMgPSBqaXRDb2RlLT5zdGFja21hcHM7CisgICAgU3RhY2tNYXBzJiBzdGFj
a21hcHMgPSBqaXRDb2RlLT5zdGFja21hcHM7CiAgICAgCiAgICAgaW50IGxvY2Fsc09mZnNldCA9
IG9mZnNldE9mU3RhY2tSZWdpb24ocmVjb3JkTWFwLCBzdGF0ZS5jYXB0dXJlZFN0YWNrbWFwSUQp
ICsgZ3JhcGgubV9uZXh0TWFjaGluZUxvY2FsOwogICAgIGludCB2YXJhcmdzU3BpbGxTbG90c09m
ZnNldCA9IG9mZnNldE9mU3RhY2tSZWdpb24ocmVjb3JkTWFwLCBzdGF0ZS52YXJhcmdzU3BpbGxT
bG90c1N0YWNrbWFwSUQpOwpAQCAtNDM5LDcgKzQzOSwxMCBAQCBzdGF0aWMgdm9pZCBmaXhGdW5j
dGlvbkJhc2VkT25TdGFja01hcHMoCiAgICAgICAgIHN0YXRlLmZpbmFsaXplci0+ZXhpdFRodW5r
c0xpbmtCdWZmZXIgPSBXVEY6Om1vdmUobGlua0J1ZmZlcik7CiAgICAgfQogCi0gICAgaWYgKCFz
dGF0ZS5nZXRCeUlkcy5pc0VtcHR5KCkgfHwgIXN0YXRlLnB1dEJ5SWRzLmlzRW1wdHkoKSB8fCAh
c3RhdGUuY2hlY2tJbnMuaXNFbXB0eSgpKSB7CisgICAgaWYgKCFzdGF0ZS5nZXRCeUlkcy5pc0Vt
cHR5KCkKKyAgICAgICAgfHwgIXN0YXRlLnB1dEJ5SWRzLmlzRW1wdHkoKQorICAgICAgICB8fCAh
c3RhdGUuY2hlY2tJbnMuaXNFbXB0eSgpCisgICAgICAgIHx8ICFzdGF0ZS5sYXp5U2xvd1BhdGhz
LmlzRW1wdHkoKSkgewogICAgICAgICBDQ2FsbEhlbHBlcnMgc2xvd1BhdGhKSVQoJnZtLCBjb2Rl
QmxvY2spOwogICAgICAgICAKICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBleGNlcHRp
b25UYXJnZXQ7CkBAIC00NzMsNyArNDc2LDggQEAgc3RhdGljIHZvaWQgZml4RnVuY3Rpb25CYXNl
ZE9uU3RhY2tNYXBzKAogCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2Fs
bCA9IGNhbGxPcGVyYXRpb24oCiAgICAgICAgICAgICAgICAgICAgIHN0YXRlLCB1c2VkUmVnaXN0
ZXJzLCBzbG93UGF0aEpJVCwgY29kZU9yaWdpbiwgJmV4Y2VwdGlvblRhcmdldCwKLSAgICAgICAg
ICAgICAgICAgICAgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCByZXN1bHQsIGdlbi5zdHViSW5m
bygpLCBiYXNlLCBnZXRCeUlkLnVpZCgpKTsKKyAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9u
R2V0QnlJZE9wdGltaXplLCByZXN1bHQsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihnZW4u
c3R1YkluZm8oKSksCisgICAgICAgICAgICAgICAgICAgIGJhc2UsIENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbVB0cihnZXRCeUlkLnVpZCgpKSkuY2FsbCgpOwogCiAgICAgICAgICAgICAgICAgZ2Vu
LnJlcG9ydFNsb3dQYXRoQ2FsbChiZWdpbiwgY2FsbCk7CiAKQEAgLTUxMSw3ICs1MTUsOSBAQCBz
dGF0aWMgdm9pZCBmaXhGdW5jdGlvbkJhc2VkT25TdGFja01hcHMoCiAgICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCA9IGNhbGxPcGVyYXRp
b24oCiAgICAgICAgICAgICAgICAgICAgIHN0YXRlLCB1c2VkUmVnaXN0ZXJzLCBzbG93UGF0aEpJ
VCwgY29kZU9yaWdpbiwgJmV4Y2VwdGlvblRhcmdldCwKLSAgICAgICAgICAgICAgICAgICAgZ2Vu
LnNsb3dQYXRoRnVuY3Rpb24oKSwgZ2VuLnN0dWJJbmZvKCksIHZhbHVlLCBiYXNlLCBwdXRCeUlk
LnVpZCgpKTsKKyAgICAgICAgICAgICAgICAgICAgZ2VuLnNsb3dQYXRoRnVuY3Rpb24oKSwgSW52
YWxpZEdQUlJlZywKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
UHRyKGdlbi5zdHViSW5mbygpKSwgdmFsdWUsIGJhc2UsCisgICAgICAgICAgICAgICAgICAgIEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihwdXRCeUlkLnVpZCgpKSkuY2FsbCgpOwogICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoYmVnaW4s
IGNhbGwpOwogICAgICAgICAgICAgICAgIApAQCAtNTQ5LDEzICs1NTUsNTcgQEAgc3RhdGljIHZv
aWQgZml4RnVuY3Rpb25CYXNlZE9uU3RhY2tNYXBzKAogCiAgICAgICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkNhbGwgc2xvd0NhbGwgPSBjYWxsT3BlcmF0aW9uKAogICAgICAgICAgICAgICAg
ICAgICBzdGF0ZSwgdXNlZFJlZ2lzdGVycywgc2xvd1BhdGhKSVQsIGNvZGVPcmlnaW4sICZleGNl
cHRpb25UYXJnZXQsCi0gICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbkluT3B0aW1pemUsIHJl
c3VsdCwgc3R1YkluZm8sIG9iaiwgY2hlY2tJbi5tX3VpZCk7CisgICAgICAgICAgICAgICAgICAg
IG9wZXJhdGlvbkluT3B0aW1pemUsIHJlc3VsdCwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRy
KHN0dWJJbmZvKSwgb2JqLAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW1QdHIoY2hlY2tJbi51aWQoKSkpLmNhbGwoKTsKIAogICAgICAgICAgICAgICAgIGNoZWNr
SW4ubV9zbG93UGF0aERvbmUuYXBwZW5kKHNsb3dQYXRoSklULmp1bXAoKSk7CiAgICAgICAgICAg
ICAgICAgCiAgICAgICAgICAgICAgICAgY2hlY2tJbi5tX2dlbmVyYXRvcnMuYXBwZW5kKENoZWNr
SW5HZW5lcmF0b3Ioc3R1YkluZm8sIHNsb3dDYWxsLCBiZWdpbikpOwogICAgICAgICAgICAgfQog
ICAgICAgICB9CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gc3RhdGUubGF6eVNsb3dQYXRo
cy5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgIExhenlTbG93UGF0aERlc2NyaXB0b3ImIGRl
c2NyaXB0b3IgPSBzdGF0ZS5sYXp5U2xvd1BhdGhzW2ldOworCisgICAgICAgICAgICBpZiAodmVy
Ym9zZUNvbXBpbGF0aW9uRW5hYmxlZCgpKQorICAgICAgICAgICAgICAgIGRhdGFMb2coIkhhbmRs
aW5nIGxhenlTbG93UGF0aCBzdGFja21hcCAjIiwgZGVzY3JpcHRvci5zdGFja21hcElEKCksICJc
biIpOworCisgICAgICAgICAgICBhdXRvIGl0ZXIgPSByZWNvcmRNYXAuZmluZChkZXNjcmlwdG9y
LnN0YWNrbWFwSUQoKSk7CisgICAgICAgICAgICBpZiAoaXRlciA9PSByZWNvcmRNYXAuZW5kKCkp
IHsKKyAgICAgICAgICAgICAgICAvLyBJdCB3YXMgb3B0aW1pemVkIG91dC4KKyAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGl0ZXItPnZhbHVlLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICAgICAg
U3RhY2tNYXBzOjpSZWNvcmQmIHJlY29yZCA9IGl0ZXItPnZhbHVlW2ldOworICAgICAgICAgICAg
ICAgIFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3RlcnMgPSB1c2VkUmVnaXN0ZXJzRm9yKHJlY29yZCk7
CisgICAgICAgICAgICAgICAgVmVjdG9yPExvY2F0aW9uPiBsb2NhdGlvbnM7CisgICAgICAgICAg
ICAgICAgZm9yIChhdXRvIGxvY2F0aW9uIDogcmVjb3JkLmxvY2F0aW9ucykKKyAgICAgICAgICAg
ICAgICAgICAgbG9jYXRpb25zLmFwcGVuZChMb2NhdGlvbjo6Zm9yU3RhY2ttYXBzKCZzdGFja21h
cHMsIGxvY2F0aW9uKSk7CisKKyAgICAgICAgICAgICAgICBjaGFyKiBzdGFydE9mSUMgPQorICAg
ICAgICAgICAgICAgICAgICBiaXR3aXNlX2Nhc3Q8Y2hhcio+KGdlbmVyYXRlZEZ1bmN0aW9uKSAr
IHJlY29yZC5pbnN0cnVjdGlvbk9mZnNldDsKKyAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25M
YWJlbCBwYXRjaHBvaW50KChNYWNyb0Fzc2VtYmxlckNvZGVQdHIoc3RhcnRPZklDKSkpOworICAg
ICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIGV4Y2VwdGlvblRhcmdldCA9CisgICAgICAg
ICAgICAgICAgICAgIHN0YXRlLmZpbmFsaXplci0+aGFuZGxlRXhjZXB0aW9uc0xpbmtCdWZmZXIt
PmVudHJ5cG9pbnQoKTsKKworICAgICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxMYXp5U2xv
d1BhdGg+IGxhenlTbG93UGF0aCA9IHN0ZDo6bWFrZV91bmlxdWU8TGF6eVNsb3dQYXRoPigKKyAg
ICAgICAgICAgICAgICAgICAgcGF0Y2hwb2ludCwgZXhjZXB0aW9uVGFyZ2V0LCB1c2VkUmVnaXN0
ZXJzLCBkZXNjcmlwdG9yLmNhbGxTaXRlSW5kZXgoKSwKKyAgICAgICAgICAgICAgICAgICAgZGVz
Y3JpcHRvci5tX2xpbmtlci0+cnVuKGxvY2F0aW9ucykpOworCisgICAgICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpMYWJlbCBiZWdpbiA9IHNsb3dQYXRoSklULmxhYmVsKCk7CisKKyAgICAgICAg
ICAgICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgcHVzaGluZyB0aGUgbGF6eSBzbG93IHBh
dGggaW5kZXggaW4gc29tZSB2ZWN0b3Igb3Igd2hhdGV2ZXIuCisgICAgICAgICAgICAgICAgc2xv
d1BhdGhKSVQucHVzaFRvU2F2ZUltbWVkaWF0ZVdpdGhvdXRUb3VjaGluZ1JlZ2lzdGVycygKKyAg
ICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoc3RhdGUuaml0Q29k
ZS0+bGF6eVNsb3dQYXRocy5zaXplKCkpKTsKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6
Okp1bXAgZ2VuZXJhdG9ySnVtcCA9IHNsb3dQYXRoSklULmp1bXAoKTsKKyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICBkZXNjcmlwdG9yLm1fZ2VuZXJhdG9ycy5hcHBlbmQoc3RkOjpt
YWtlX3R1cGxlKGxhenlTbG93UGF0aC5nZXQoKSwgYmVnaW4pKTsKKworICAgICAgICAgICAgICAg
IHN0YXRlLmppdENvZGUtPmxhenlTbG93UGF0aHMuYXBwZW5kKFdURjo6bW92ZShsYXp5U2xvd1Bh
dGgpKTsKKyAgICAgICAgICAgICAgICBzdGF0ZS5maW5hbGl6ZXItPmxhenlTbG93UGF0aEdlbmVy
YXRvckp1bXBzLmFwcGVuZChnZW5lcmF0b3JKdW1wKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQogICAgICAgICAKICAgICAgICAgZXhjZXB0aW9uVGFyZ2V0LmxpbmsoJnNsb3dQYXRoSklUKTsK
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZXhjZXB0aW9uSnVtcCA9IHNsb3dQYXRoSklU
Lmp1bXAoKTsKQEAgLTU3OCwxMiArNjI4LDE5IEBAIHN0YXRpYyB2b2lkIGZpeEZ1bmN0aW9uQmFz
ZWRPblN0YWNrTWFwcygKICAgICAgICAgICAgICAgICBzdGF0ZSwgY29kZUJsb2NrLCBnZW5lcmF0
ZWRGdW5jdGlvbiwgcmVjb3JkTWFwLCBzdGF0ZS5wdXRCeUlkc1tpXSwKICAgICAgICAgICAgICAg
ICBzaXplT2ZQdXRCeUlkKCkpOwogICAgICAgICB9Ci0KICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gc3RhdGUuY2hlY2tJbnMuc2l6ZSgpOyBpLS07KSB7CiAgICAgICAgICAgICBnZW5lcmF0ZUNo
ZWNrSW5JQ0Zhc3RQYXRoKAogICAgICAgICAgICAgICAgIHN0YXRlLCBjb2RlQmxvY2ssIGdlbmVy
YXRlZEZ1bmN0aW9uLCByZWNvcmRNYXAsIHN0YXRlLmNoZWNrSW5zW2ldLAogICAgICAgICAgICAg
ICAgIHNpemVPZkluKCkpOyAKLSAgICAgICAgfSAKKyAgICAgICAgfQorICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSBzdGF0ZS5sYXp5U2xvd1BhdGhzLnNpemUoKTsgaS0tOykgeworICAgICAgICAg
ICAgTGF6eVNsb3dQYXRoRGVzY3JpcHRvciYgbGF6eVNsb3dQYXRoID0gc3RhdGUubGF6eVNsb3dQ
YXRoc1tpXTsKKyAgICAgICAgICAgIGZvciAoYXV0byYgdHVwbGUgOiBsYXp5U2xvd1BhdGgubV9n
ZW5lcmF0b3JzKSB7CisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGxhY2VXaXRo
SnVtcCgKKyAgICAgICAgICAgICAgICAgICAgc3RkOjpnZXQ8MD4odHVwbGUpLT5wYXRjaHBvaW50
KCksCisgICAgICAgICAgICAgICAgICAgIHN0YXRlLmZpbmFsaXplci0+c2lkZUNvZGVMaW5rQnVm
ZmVyLT5sb2NhdGlvbk9mKHN0ZDo6Z2V0PDE+KHR1cGxlKSkpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CiAgICAgfQogICAgIAogICAgIGFkanVzdENhbGxJQ3NGb3JTdGFja21hcHMoc3RhdGUu
anNDYWxscywgcmVjb3JkTWFwKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
SW5saW5lQ2FjaGVEZXNjcmlwdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExJbmxpbmVDYWNoZURlc2NyaXB0b3IuaAkocmV2aXNpb24gMTkwODQzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbmxpbmVDYWNoZURlc2NyaXB0b3IuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIw
MTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0yOSwxMiArMjksMTUgQEAKICNpZiBFTkFCTEUoRlRMX0pJVCkKIAog
I2luY2x1ZGUgIkNvZGVPcmlnaW4uaCIKKyNpbmNsdWRlICJGVExMYXp5U2xvd1BhdGguaCIKICNp
bmNsdWRlICJKSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oIgogI2luY2x1ZGUgIk1hY3JvQXNzZW1i
bGVyLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvVW5pcXVlZFN0cmluZ0ltcGwuaD4KIAogbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewogCitjbGFzcyBMb2NhdGlvbjsKKwogY2xhc3MgSW5s
aW5lQ2FjaGVEZXNjcmlwdG9yIHsKIHB1YmxpYzoKICAgICBJbmxpbmVDYWNoZURlc2NyaXB0b3Io
KSAKQEAgLTExMywxNyArMTE2LDQ2IEBAIGNsYXNzIENoZWNrSW5EZXNjcmlwdG9yIDogcHVibGlj
IElubGluZUMKIHB1YmxpYzoKICAgICBDaGVja0luRGVzY3JpcHRvcigpIHsgfQogICAgIAotICAg
IENoZWNrSW5EZXNjcmlwdG9yKHVuc2lnbmVkIHN0YWNrbWFwSUQsIENhbGxTaXRlSW5kZXggY2Fs
bFNpdGUsIGNvbnN0IFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCi0gICAgICAgIDogSW5saW5lQ2Fj
aGVEZXNjcmlwdG9yKHN0YWNrbWFwSUQsIGNhbGxTaXRlLCBudWxscHRyKQotICAgICAgICAsIG1f
dWlkKHVpZCkKKyAgICBDaGVja0luRGVzY3JpcHRvcih1bnNpZ25lZCBzdGFja21hcElELCBDYWxs
U2l0ZUluZGV4IGNhbGxTaXRlLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQorICAgICAgICA6IElu
bGluZUNhY2hlRGVzY3JpcHRvcihzdGFja21hcElELCBjYWxsU2l0ZSwgdWlkKQogICAgIHsKICAg
ICB9Ci0KICAgICAKLSAgICBjb25zdCBVbmlxdWVkU3RyaW5nSW1wbCogbV91aWQ7CiAgICAgVmVj
dG9yPENoZWNrSW5HZW5lcmF0b3I+IG1fZ2VuZXJhdG9yczsKIH07CiAKKy8vIFlvdSBjYW4gY3Jl
YXRlIGEgbGF6eSBzbG93IHBhdGggY2FsbCBpbiBsb3dlckRGR1RvTExWTSBieSBkb2luZzoKKy8v
IG1fZnRsU3RhdGUubGF6eVNsb3dQYXRocy5hcHBlbmQoCisvLyAgICAgTGF6eVNsb3dQYXRoRGVz
Y3JpcHRvcigKKy8vICAgICAgICAgc3RhY2ttYXBJRCwgY2FsbFNpdGVJbmRleCwKKy8vICAgICAg
ICAgY3JlYXRlU2hhcmVkVGFzazxSZWZQdHI8TGF6eVNsb3dQYXRoOjpHZW5lcmF0b3I+KGNvbnN0
IFZlY3RvcjxMb2NhdGlvbj4mKT4oCisvLyAgICAgICAgICAgICBbXSAoY29uc3QgVmVjdG9yPExv
Y2F0aW9uPiYgbG9jYXRpb25zKSAtPiBSZWZQdHI8TGF6eVNsb3dQYXRoOjpHZW5lcmF0b3I+IHsK
Ky8vICAgICAgICAgICAgICAgICAvLyBUaGlzIGxhbWJkYSBzaG91bGQganVzdCByZWNvcmQgdGhl
IHJlZ2lzdGVycyB0aGF0IHdlIHdpbGwgYmUgdXNpbmcsIGFuZCByZXR1cm4KKy8vICAgICAgICAg
ICAgICAgICAvLyBhIFNoYXJlZFRhc2sgdGhhdCB3aWxsIGFjdHVhbGx5IGdlbmVyYXRlIHRoZSBz
bG93IHBhdGguCisvLyAgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxhenlDYWxsR2VuZXJh
dG9yKAorLy8gICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiwgbG9jYXRpb25zWzBdLmRpcmVj
dEdQUigpLCBsb2NhdGlvbnNbMV0uZGlyZWN0R1BSKCkpOworLy8gICAgICAgICAgICAgfSkpKTsK
Ky8vCisvLyBVc3VhbGx5LCB5b3UgY2FuIHVzZSB0aGUgTG93ZXJERkdUb0xMVk06OmxhenlTbG93
UGF0aCgpIGhlbHBlciwgd2hpY2ggdGFrZXMgY2FyZSBvZiB0aGUgZGVzY3JpcHRvcgorLy8gZm9y
IHlvdSBhbmQgYWxzbyBjcmVhdGVzIHRoZSBwYXRjaHBvaW50LgordHlwZWRlZiBSZWZQdHI8TGF6
eVNsb3dQYXRoOjpHZW5lcmF0b3I+IExhenlTbG93UGF0aExpbmtlckZ1bmN0aW9uKGNvbnN0IFZl
Y3RvcjxMb2NhdGlvbj4mKTsKK3R5cGVkZWYgU2hhcmVkVGFzazxMYXp5U2xvd1BhdGhMaW5rZXJG
dW5jdGlvbj4gTGF6eVNsb3dQYXRoTGlua2VyVGFzazsKK2NsYXNzIExhenlTbG93UGF0aERlc2Ny
aXB0b3IgOiBwdWJsaWMgSW5saW5lQ2FjaGVEZXNjcmlwdG9yIHsKK3B1YmxpYzoKKyAgICBMYXp5
U2xvd1BhdGhEZXNjcmlwdG9yKCkgeyB9CisKKyAgICBMYXp5U2xvd1BhdGhEZXNjcmlwdG9yKAor
ICAgICAgICB1bnNpZ25lZCBzdGFja21hcElELCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlLAorICAg
ICAgICBSZWZQdHI8TGF6eVNsb3dQYXRoTGlua2VyVGFzaz4gbGlua2VyKQorICAgICAgICA6IElu
bGluZUNhY2hlRGVzY3JpcHRvcihzdGFja21hcElELCBjYWxsU2l0ZSwgbnVsbHB0cikKKyAgICAg
ICAgLCBtX2xpbmtlcihsaW5rZXIpCisgICAgeworICAgIH0KKworICAgIFZlY3RvcjxzdGQ6OnR1
cGxlPExhenlTbG93UGF0aCosIENDYWxsSGVscGVyczo6TGFiZWw+PiBtX2dlbmVyYXRvcnM7CisK
KyAgICBSZWZQdHI8TGF6eVNsb3dQYXRoTGlua2VyVGFzaz4gbV9saW5rZXI7Cit9OwogCiB9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6RlRMCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMSklUQ29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
SklUQ29kZS5oCShyZXZpc2lvbiAxOTA4NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTEpJVENvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVk
ZSAiREZHQ29tbW9uRGF0YS5oIgogI2luY2x1ZGUgIkZUTERhdGFTZWN0aW9uLmgiCisjaW5jbHVk
ZSAiRlRMTGF6eVNsb3dQYXRoLmgiCiAjaW5jbHVkZSAiRlRMT1NSRXhpdC5oIgogI2luY2x1ZGUg
IkZUTFN0YWNrTWFwcy5oIgogI2luY2x1ZGUgIkZUTFVud2luZEluZm8uaCIKQEAgLTg2LDYgKzg3
LDcgQEAgcHVibGljOgogICAgIERGRzo6Q29tbW9uRGF0YSBjb21tb247CiAgICAgU2VnbWVudGVk
VmVjdG9yPE9TUkV4aXQsIDg+IG9zckV4aXQ7CiAgICAgU3RhY2tNYXBzIHN0YWNrbWFwczsKKyAg
ICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPExhenlTbG93UGF0aD4+IGxhenlTbG93UGF0aHM7CiAg
ICAgCiBwcml2YXRlOgogICAgIFZlY3RvcjxSZWZQdHI8RGF0YVNlY3Rpb24+PiBtX2RhdGFTZWN0
aW9uczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklURmluYWxpemVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVEZpbmFsaXpl
ci5jcHAJKHJldmlzaW9uIDE5MDg0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
SklURmluYWxpemVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA2LDExICsxMDYsMTEgQEAgYm9v
bCBKSVRGaW5hbGl6ZXI6OmZpbmFsaXplRnVuY3Rpb24oKQogICAgICAgICAvLyBTaWRlIGNvZGUg
aXMgZm9yIHNwZWNpYWwgc2xvdyBwYXRocyB0aGF0IHdlIGdlbmVyYXRlIG91cnNlbHZlcywgbGlr
ZSBmb3IgaW5saW5lCiAgICAgICAgIC8vIGNhY2hlcy4KICAgICAgICAgCi0gICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IHNsb3dQYXRoQ2FsbHMuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICBT
bG93UGF0aENhbGwmIGNhbGwgPSBzbG93UGF0aENhbGxzW2ldOworICAgICAgICBmb3IgKENDYWxs
SGVscGVyczo6SnVtcCBqdW1wIDogbGF6eVNsb3dQYXRoR2VuZXJhdG9ySnVtcHMpIHsKICAgICAg
ICAgICAgIHNpZGVDb2RlTGlua0J1ZmZlci0+bGluaygKLSAgICAgICAgICAgICAgICBjYWxsLmNh
bGwoKSwKLSAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbChtX3BsYW4udm0uZnRsVGh1
bmtzLT5nZXRTbG93UGF0aENhbGxUaHVuayhtX3BsYW4udm0sIGNhbGwua2V5KCkpLmNvZGUoKSkp
OworICAgICAgICAgICAgICAgIGp1bXAsCisgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFi
ZWwoCisgICAgICAgICAgICAgICAgICAgIG1fcGxhbi52bS5nZXRDVElTdHViKGxhenlTbG93UGF0
aEdlbmVyYXRpb25UaHVua0dlbmVyYXRvcikuY29kZSgpKSk7CiAgICAgICAgIH0KICAgICAgICAg
CiAgICAgICAgIGppdENvZGUtPmFkZEhhbmRsZShGSU5BTElaRV9ERkdfQ09ERSgKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklURmluYWxpemVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRGaW5hbGl6ZXIuaAkocmV2aXNpb24gMTkw
ODQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRGaW5hbGl6ZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtNjUsOCArNjUsOCBAQCBwdWJsaWM6CiAgICAgc3RkOjp1bmlxdWVfcHRy
PExpbmtCdWZmZXI+IHNpZGVDb2RlTGlua0J1ZmZlcjsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8TGlu
a0J1ZmZlcj4gaGFuZGxlRXhjZXB0aW9uc0xpbmtCdWZmZXI7CiAgICAgVmVjdG9yPE91dE9mTGlu
ZUNvZGVJbmZvPiBvdXRPZkxpbmVDb2RlSW5mb3M7Ci0gICAgVmVjdG9yPFNsb3dQYXRoQ2FsbD4g
c2xvd1BhdGhDYWxsczsgLy8gQ2FsbHMgaW5zaWRlIHRoZSBzaWRlIGNvZGUuCiAgICAgVmVjdG9y
PE9TUkV4aXRDb21waWxhdGlvbkluZm8+IG9zckV4aXQ7CisgICAgVmVjdG9yPENDYWxsSGVscGVy
czo6SnVtcD4gbGF6eVNsb3dQYXRoR2VuZXJhdG9ySnVtcHM7CiAgICAgR2VuZXJhdGVkRnVuY3Rp
b24gZnVuY3Rpb247CiAgICAgUmVmUHRyPEpJVENvZGU+IGppdENvZGU7CiB9OwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMYXp5U2xvd1BhdGguY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTGF6eVNsb3dQYXRoLmNwcAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTGF6eVNsb3dQYXRoLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDc0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGVExMYXp5
U2xvd1BhdGguaCIKKworI2luY2x1ZGUgIkZUTFNsb3dQYXRoQ2FsbC5oIgorI2luY2x1ZGUgIkxp
bmtCdWZmZXIuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgeworCitMYXp5U2xv
d1BhdGg6OkxhenlTbG93UGF0aCgKKyAgICBDb2RlTG9jYXRpb25MYWJlbCBwYXRjaHBvaW50LCBD
b2RlTG9jYXRpb25MYWJlbCBleGNlcHRpb25UYXJnZXQsCisgICAgY29uc3QgUmVnaXN0ZXJTZXQm
IHVzZWRSZWdpc3RlcnMsIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCwgUmVmUHRyPEdlbmVy
YXRvcj4gZ2VuZXJhdG9yKQorICAgIDogbV9wYXRjaHBvaW50KHBhdGNocG9pbnQpCisgICAgLCBt
X2V4Y2VwdGlvblRhcmdldChleGNlcHRpb25UYXJnZXQpCisgICAgLCBtX3VzZWRSZWdpc3RlcnMo
dXNlZFJlZ2lzdGVycykKKyAgICAsIG1fY2FsbFNpdGVJbmRleChjYWxsU2l0ZUluZGV4KQorICAg
ICwgbV9nZW5lcmF0b3IoZ2VuZXJhdG9yKQoreworfQorCitMYXp5U2xvd1BhdGg6On5MYXp5U2xv
d1BhdGgoKQoreworfQorCit2b2lkIExhenlTbG93UGF0aDo6Z2VuZXJhdGUoQ29kZUJsb2NrKiBj
b2RlQmxvY2spCit7CisgICAgUkVMRUFTRV9BU1NFUlQoIW1fc3R1Yik7CisKKyAgICBWTSYgdm0g
PSAqY29kZUJsb2NrLT52bSgpOworCisgICAgQ0NhbGxIZWxwZXJzIGppdCgmdm0sIGNvZGVCbG9j
ayk7CisgICAgR2VuZXJhdGlvblBhcmFtcyBwYXJhbXM7CisgICAgQ0NhbGxIZWxwZXJzOjpKdW1w
TGlzdCBleGNlcHRpb25KdW1wczsKKyAgICBwYXJhbXMuZXhjZXB0aW9uSnVtcHMgPSBtX2V4Y2Vw
dGlvblRhcmdldCA/ICZleGNlcHRpb25KdW1wcyA6IG51bGxwdHI7CisgICAgcGFyYW1zLmxhenlT
bG93UGF0aCA9IHRoaXM7CisgICAgbV9nZW5lcmF0b3ItPnJ1bihqaXQsIHBhcmFtcyk7CisKKyAg
ICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIodm0sIGppdCwgY29kZUJsb2NrLCBKSVRDb21waWxhdGlv
bk11c3RTdWNjZWVkKTsKKyAgICBsaW5rQnVmZmVyLmxpbmsoCisgICAgICAgIHBhcmFtcy5kb25l
SnVtcHMsIG1fcGF0Y2hwb2ludC5sYWJlbEF0T2Zmc2V0KE1hY3JvQXNzZW1ibGVyOjptYXhKdW1w
UmVwbGFjZW1lbnRTaXplKCkpKTsKKyAgICBpZiAobV9leGNlcHRpb25UYXJnZXQpCisgICAgICAg
IGxpbmtCdWZmZXIubGluayhleGNlcHRpb25KdW1wcywgbV9leGNlcHRpb25UYXJnZXQpOworICAg
IG1fc3R1YiA9IEZJTkFMSVpFX0NPREVfRk9SKGNvZGVCbG9jaywgbGlua0J1ZmZlciwgKCJMYXp5
IHNsb3cgcGF0aCBjYWxsIHN0dWIiKSk7CisKKyAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwbGFjZVdp
dGhKdW1wKG1fcGF0Y2hwb2ludCwgQ29kZUxvY2F0aW9uTGFiZWwobV9zdHViLmNvZGUoKSkpOwor
fQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCisKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExMYXp5U2xvd1BhdGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTExhenlTbG93UGF0aC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExMYXp5U2xvd1BhdGguaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDkxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgRlRMTGF6eVNsb3dQYXRoX2gKKyNkZWZpbmUgRlRMTGF6eVNsb3dQYXRoX2gKKwor
I2luY2x1ZGUgIkNDYWxsSGVscGVycy5oIgorI2luY2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1
ZGUgIkNvZGVMb2NhdGlvbi5oIgorI2luY2x1ZGUgIkdQUkluZm8uaCIKKyNpbmNsdWRlICJNYWNy
b0Fzc2VtYmxlckNvZGVSZWYuaCIKKyNpbmNsdWRlICJSZWdpc3RlclNldC5oIgorI2luY2x1ZGUg
PHd0Zi9TaGFyZWRUYXNrLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKKwor
Ly8gQSBMYXp5U2xvd1BhdGggaXMgYW4gb2JqZWN0IHRoYXQgcmVwcmVzZW50cyBhIHBpZWNlIG9m
IGNvZGUgdGhhdCBpcyBwYXJ0IG9mIEZUTCBnZW5lcmF0ZWQgY29kZQorLy8gdGhhdCB3aWxsIGJl
IGdlbmVyYXRlZCBsYXppbHkuIEl0IGhvbGRzIGFsbCBvZiB0aGUgaW1wb3J0YW50IGluZm9ybWF0
aW9uIG5lZWRlZCB0byBnZW5lcmF0ZSB0aGF0CisvLyBjb2RlLCBzdWNoIGFzIHdoZXJlIHRvIGxp
bmsganVtcHMgdG8gYW5kIHdoaWNoIHJlZ2lzdGVycyBhcmUgaW4gdXNlLiBJdCBhbHNvIGhhcyBh
IHJlZmVyZW5jZSB0byBhCisvLyBTaGFyZWRUYXNrIHRoYXQgd2lsbCBkbyB0aGUgYWN0dWFsIGNv
ZGUgZ2VuZXJhdGlvbi4gVGhhdCBTaGFyZWRUYXNrIG1heSBoYXZlIGFkZGl0aW9uYWwgZGF0YSwg
bGlrZQorLy8gd2hpY2ggcmVnaXN0ZXJzIGhvbGQgdGhlIGlucHV0cyBvciBvdXRwdXRzLgorY2xh
c3MgTGF6eVNsb3dQYXRoIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShMYXp5U2xvd1BhdGgp
OworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIHN0cnVjdCBHZW5l
cmF0aW9uUGFyYW1zIHsKKyAgICAgICAgLy8gRXh0cmEgcGFyYW1ldGVycyB0byB0aGUgR2VuZXJh
dG9yRnVuY3Rpb24gYXJlIG1hZGUgaW50byBmaWVsZHMgb2YgdGhpcyBzdHJ1Y3QsIHNvIHRoYXQg
aWYKKyAgICAgICAgLy8gd2UgYWRkIG5ldyBwYXJhbWV0ZXJzLCB3ZSBkb24ndCBoYXZlIHRvIGNo
YW5nZSBhbGwgb2YgdGhlIHVzZXJzLgorICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IGRv
bmVKdW1wczsKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCogZXhjZXB0aW9uSnVtcHM7
CisgICAgICAgIExhenlTbG93UGF0aCogbGF6eVNsb3dQYXRoOworICAgIH07CisKKyAgICB0eXBl
ZGVmIHZvaWQgR2VuZXJhdG9yRnVuY3Rpb24oQ0NhbGxIZWxwZXJzJiwgR2VuZXJhdGlvblBhcmFt
cyYpOworICAgIHR5cGVkZWYgU2hhcmVkVGFzazxHZW5lcmF0b3JGdW5jdGlvbj4gR2VuZXJhdG9y
OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICBzdGF0aWMgUmVmUHRyPEdl
bmVyYXRvcj4gY3JlYXRlR2VuZXJhdG9yKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgewor
ICAgICAgICByZXR1cm4gY3JlYXRlU2hhcmVkVGFzazxHZW5lcmF0b3JGdW5jdGlvbj4oZnVuY3Rv
cik7CisgICAgfQorICAgIAorICAgIExhenlTbG93UGF0aCgKKyAgICAgICAgQ29kZUxvY2F0aW9u
TGFiZWwgcGF0Y2hwb2ludCwgQ29kZUxvY2F0aW9uTGFiZWwgZXhjZXB0aW9uVGFyZ2V0LAorICAg
ICAgICBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywgQ2FsbFNpdGVJbmRleCBjYWxs
U2l0ZUluZGV4LCBSZWZQdHI8R2VuZXJhdG9yPik7CisKKyAgICB+TGF6eVNsb3dQYXRoKCk7CisK
KyAgICBDb2RlTG9jYXRpb25MYWJlbCBwYXRjaHBvaW50KCkgY29uc3QgeyByZXR1cm4gbV9wYXRj
aHBvaW50OyB9CisgICAgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMoKSBjb25zdCB7
IHJldHVybiBtX3VzZWRSZWdpc3RlcnM7IH0KKyAgICBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5k
ZXgoKSBjb25zdCB7IHJldHVybiBtX2NhbGxTaXRlSW5kZXg7IH0KKworICAgIHZvaWQgZ2VuZXJh
dGUoQ29kZUJsb2NrKik7CisKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgc3R1YigpIGNvbnN0
IHsgcmV0dXJuIG1fc3R1YjsgfQorCitwcml2YXRlOgorICAgIENvZGVMb2NhdGlvbkxhYmVsIG1f
cGF0Y2hwb2ludDsKKyAgICBDb2RlTG9jYXRpb25MYWJlbCBtX2V4Y2VwdGlvblRhcmdldDsKKyAg
ICBSZWdpc3RlclNldCBtX3VzZWRSZWdpc3RlcnM7CisgICAgQ2FsbFNpdGVJbmRleCBtX2NhbGxT
aXRlSW5kZXg7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG1fc3R1YjsKKyAgICBSZWZQdHI8
R2VuZXJhdG9yPiBtX2dlbmVyYXRvcjsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwK
KworI2VuZGlmIC8vIEZUTExhenlTbG93UGF0aF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMTGF6eVNsb3dQYXRoQ2FsbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMTGF6eVNsb3dQYXRoQ2FsbC5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMYXp5U2xvd1BhdGhDYWxsLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIEZUTExhenlTbG93UGF0aENhbGxfaAorI2RlZmluZSBGVExMYXp5
U2xvd1BhdGhDYWxsX2gKKworI2luY2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUgIkNvZGVM
b2NhdGlvbi5oIgorI2luY2x1ZGUgIkZUTExhenlTbG93UGF0aC5oIgorI2luY2x1ZGUgIkZUTFNs
b3dQYXRoQ2FsbC5oIgorI2luY2x1ZGUgIkZUTFRodW5rcy5oIgorI2luY2x1ZGUgIkdQUkluZm8u
aCIKKyNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlckNvZGVSZWYuaCIKKyNpbmNsdWRlICJSZWdpc3Rl
clNldC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFJlc3VsdFR5cGUsIHR5cGVuYW1lLi4uIEFyZ3VtZW50VHlwZXM+CitSZWZQdHI8TGF6
eVNsb3dQYXRoOjpHZW5lcmF0b3I+IGNyZWF0ZUxhenlDYWxsR2VuZXJhdG9yKAorICAgIEZ1bmN0
aW9uUHRyIGZ1bmN0aW9uLCBSZXN1bHRUeXBlIHJlc3VsdCwgQXJndW1lbnRUeXBlcy4uLiBhcmd1
bWVudHMpCit7CisgICAgcmV0dXJuIExhenlTbG93UGF0aDo6Y3JlYXRlR2VuZXJhdG9yKAorICAg
ICAgICBbPV0gKENDYWxsSGVscGVycyYgaml0LCBMYXp5U2xvd1BhdGg6OkdlbmVyYXRpb25QYXJh
bXMmIHBhcmFtcykgeworICAgICAgICAgICAgY2FsbE9wZXJhdGlvbigKKyAgICAgICAgICAgICAg
ICBwYXJhbXMubGF6eVNsb3dQYXRoLT51c2VkUmVnaXN0ZXJzKCksIGppdCwgcGFyYW1zLmxhenlT
bG93UGF0aC0+Y2FsbFNpdGVJbmRleCgpLAorICAgICAgICAgICAgICAgIHBhcmFtcy5leGNlcHRp
b25KdW1wcywgZnVuY3Rpb24sIHJlc3VsdCwgYXJndW1lbnRzLi4uKTsKKyAgICAgICAgICAgIHBh
cmFtcy5kb25lSnVtcHMuYXBwZW5kKGppdC5qdW1wKCkpOworICAgICAgICB9KTsKK30KKworfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRlRMTGF6eVNsb3dQYXRoQ2FsbF9o
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xM
Vk0uY3BwCShyZXZpc2lvbiAxOTA4NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TExvd2VyREZHVG9MTFZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksNyBAQAogI2lu
Y2x1ZGUgIkZUTEZvck9TUkVudHJ5SklUQ29kZS5oIgogI2luY2x1ZGUgIkZUTEZvcm1hdHRlZFZh
bHVlLmgiCiAjaW5jbHVkZSAiRlRMSW5saW5lQ2FjaGVTaXplLmgiCisjaW5jbHVkZSAiRlRMTGF6
eVNsb3dQYXRoQ2FsbC5oIgogI2luY2x1ZGUgIkZUTExvd2VyZWROb2RlVmFsdWUuaCIKICNpbmNs
dWRlICJGVExPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiRlRMT3V0cHV0LmgiCkBAIC01MCw2ICs1
MSw3IEBACiAjaW5jbHVkZSAiT3BlcmFuZHNJbmxpbmVzLmgiCiAjaW5jbHVkZSAiU2NvcGVkQXJn
dW1lbnRzLmgiCiAjaW5jbHVkZSAiU2NvcGVkQXJndW1lbnRzVGFibGUuaCIKKyNpbmNsdWRlICJT
Y3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaCIKICNpbmNsdWRlICJWaXJ0dWFsUmVnaXN0ZXIuaCIK
ICNpbmNsdWRlICJXYXRjaGRvZy5oIgogI2luY2x1ZGUgPGF0b21pYz4KQEAgLTMxNTksOSArMzE2
MSwxNSBAQCBwcml2YXRlOgogICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CiAgICAg
ICAgIAogICAgICAgICBtX291dC5hcHBlbmRUbyhzbG93UGF0aCwgY29udGludWF0aW9uKTsKLSAg
ICAgICAgTFZhbHVlIGNhbGxSZXN1bHQgPSB2bUNhbGwoCi0gICAgICAgICAgICBtX291dC5vcGVy
YXRpb24ob3BlcmF0aW9uQ3JlYXRlQWN0aXZhdGlvbkRpcmVjdCksIG1fY2FsbEZyYW1lLCB3ZWFr
UG9pbnRlcihzdHJ1Y3R1cmUpLAotICAgICAgICAgICAgc2NvcGUsIHdlYWtQb2ludGVyKHRhYmxl
KSwgbV9vdXQuY29uc3RJbnQ2NChKU1ZhbHVlOjplbmNvZGUoaW5pdGlhbGl6YXRpb25WYWx1ZSkp
KTsKKyAgICAgICAgTFZhbHVlIGNhbGxSZXN1bHQgPSBsYXp5U2xvd1BhdGgoCisgICAgICAgICAg
ICBbPV0gKGNvbnN0IFZlY3RvcjxMb2NhdGlvbj4mIGxvY2F0aW9ucykgLT4gUmVmUHRyPExhenlT
bG93UGF0aDo6R2VuZXJhdG9yPiB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxhenlD
YWxsR2VuZXJhdG9yKAorICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25DcmVhdGVBY3RpdmF0
aW9uRGlyZWN0LCBsb2NhdGlvbnNbMF0uZGlyZWN0R1BSKCksCisgICAgICAgICAgICAgICAgICAg
IENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBsb2NhdGlvbnNbMV0uZGly
ZWN0R1BSKCksCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0
cih0YWJsZSksCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTY0
KEpTVmFsdWU6OmVuY29kZShpbml0aWFsaXphdGlvblZhbHVlKSkpOworICAgICAgICAgICAgfSwK
KyAgICAgICAgICAgIHNjb3BlKTsKICAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd1Jlc3VsdCA9
IG1fb3V0LmFuY2hvcihjYWxsUmVzdWx0KTsKICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRp
b24pOwogICAgICAgICAKQEAgLTMyMTUsMTEgKzMyMjMsMjUgQEAgcHJpdmF0ZToKICAgICAgICAg
bV9vdXQuanVtcChjb250aW51YXRpb24pOwogICAgICAgICAKICAgICAgICAgbV9vdXQuYXBwZW5k
VG8oc2xvd1BhdGgsIGNvbnRpbnVhdGlvbik7Ci0gICAgICAgIAotICAgICAgICBMVmFsdWUgY2Fs
bFJlc3VsdCA9IGlzQXJyb3dGdW5jdGlvbgotICAgICAgICAgICAgPyB2bUNhbGwobV9vdXQub3Bl
cmF0aW9uKG9wZXJhdGlvbk5ld0Fycm93RnVuY3Rpb25XaXRoSW52YWxpZGF0ZWRSZWFsbG9jYXRp
b25XYXRjaHBvaW50KSwgbV9jYWxsRnJhbWUsIHNjb3BlLCB3ZWFrUG9pbnRlcihleGVjdXRhYmxl
KSwgdGhpc1ZhbHVlKQotICAgICAgICAgICAgOiB2bUNhbGwobV9vdXQub3BlcmF0aW9uKG9wZXJh
dGlvbk5ld0Z1bmN0aW9uV2l0aEludmFsaWRhdGVkUmVhbGxvY2F0aW9uV2F0Y2hwb2ludCksIG1f
Y2FsbEZyYW1lLCBzY29wZSwgd2Vha1BvaW50ZXIoZXhlY3V0YWJsZSkpOwotICAgICAgICAKKwor
ICAgICAgICBWZWN0b3I8TFZhbHVlPiBzbG93UGF0aEFyZ3VtZW50czsKKyAgICAgICAgc2xvd1Bh
dGhBcmd1bWVudHMuYXBwZW5kKHNjb3BlKTsKKyAgICAgICAgaWYgKGlzQXJyb3dGdW5jdGlvbikK
KyAgICAgICAgICAgIHNsb3dQYXRoQXJndW1lbnRzLmFwcGVuZCh0aGlzVmFsdWUpOworICAgICAg
ICBMVmFsdWUgY2FsbFJlc3VsdCA9IGxhenlTbG93UGF0aCgKKyAgICAgICAgICAgIFs9XSAoY29u
c3QgVmVjdG9yPExvY2F0aW9uPiYgbG9jYXRpb25zKSAtPiBSZWZQdHI8TGF6eVNsb3dQYXRoOjpH
ZW5lcmF0b3I+IHsKKyAgICAgICAgICAgICAgICBpZiAoaXNBcnJvd0Z1bmN0aW9uKSB7CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVMYXp5Q2FsbEdlbmVyYXRvcigKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG9wZXJhdGlvbk5ld0Fycm93RnVuY3Rpb25XaXRoSW52YWxpZGF0ZWRS
ZWFsbG9jYXRpb25XYXRjaHBvaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb25z
WzBdLmRpcmVjdEdQUigpLCBsb2NhdGlvbnNbMV0uZGlyZWN0R1BSKCksCisgICAgICAgICAgICAg
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoZXhlY3V0YWJsZSksIGxvY2F0
aW9uc1syXS5kaXJlY3RHUFIoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IHJldHVybiBjcmVhdGVMYXp5Q2FsbEdlbmVyYXRvcigKKyAgICAgICAgICAgICAgICAgICAgb3Bl
cmF0aW9uTmV3RnVuY3Rpb25XaXRoSW52YWxpZGF0ZWRSZWFsbG9jYXRpb25XYXRjaHBvaW50LAor
ICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbnNbMF0uZGlyZWN0R1BSKCksIGxvY2F0aW9uc1sx
XS5kaXJlY3RHUFIoKSwKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tUHRyKGV4ZWN1dGFibGUpKTsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBzbG93UGF0
aEFyZ3VtZW50cyk7CiAgICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dSZXN1bHQgPSBtX291dC5h
bmNob3IoY2FsbFJlc3VsdCk7CiAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKICAg
ICAgICAgCkBAIC0zMjcxLDkgKzMyOTMsMTMgQEAgcHJpdmF0ZToKICAgICAgICAgbV9vdXQuanVt
cChjb250aW51YXRpb24pOwogICAgICAgICAKICAgICAgICAgbV9vdXQuYXBwZW5kVG8oc2xvd1Bh
dGgsIGNvbnRpbnVhdGlvbik7Ci0gICAgICAgIExWYWx1ZSBjYWxsUmVzdWx0ID0gdm1DYWxsKAot
ICAgICAgICAgICAgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbkNyZWF0ZURpcmVjdEFyZ3VtZW50
cyksIG1fY2FsbEZyYW1lLCB3ZWFrUG9pbnRlcihzdHJ1Y3R1cmUpLAotICAgICAgICAgICAgbGVu
Z3RoLnZhbHVlLCBtX291dC5jb25zdEludDMyKG1pbkNhcGFjaXR5KSk7CisgICAgICAgIExWYWx1
ZSBjYWxsUmVzdWx0ID0gbGF6eVNsb3dQYXRoKAorICAgICAgICAgICAgWz1dIChjb25zdCBWZWN0
b3I8TG9jYXRpb24+JiBsb2NhdGlvbnMpIC0+IFJlZlB0cjxMYXp5U2xvd1BhdGg6OkdlbmVyYXRv
cj4geworICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVMYXp5Q2FsbEdlbmVyYXRvcigKKyAg
ICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uQ3JlYXRlRGlyZWN0QXJndW1lbnRzLCBsb2NhdGlv
bnNbMF0uZGlyZWN0R1BSKCksCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBsb2NhdGlvbnNbMV0uZGlyZWN0R1BSKCksCisgICAgICAg
ICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKG1pbkNhcGFjaXR5KSk7Cisg
ICAgICAgICAgICB9LCBsZW5ndGgudmFsdWUpOwogICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93
UmVzdWx0ID0gbV9vdXQuYW5jaG9yKGNhbGxSZXN1bHQpOwogICAgICAgICBtX291dC5qdW1wKGNv
bnRpbnVhdGlvbik7CiAgICAgICAgIApAQCAtMzU2Myw5ICszNTg5LDE0IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICBtX291dC5hcHBlbmRUbyhzbG93Q2FzZSwgY29udGludWF0aW9uKTsKICAgICAg
ICAgICAgIExWYWx1ZSBzdHJ1Y3R1cmVWYWx1ZSA9IG1fb3V0LnBoaSgKICAgICAgICAgICAgICAg
ICBtX291dC5pbnRQdHIsIGxhcmdlU3RydWN0dXJlLCBmYWlsU3RydWN0dXJlKTsKLSAgICAgICAg
ICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dSZXN1bHQgPSBtX291dC5hbmNob3Iodm1DYWxsKAotICAg
ICAgICAgICAgICAgIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplKSwK
LSAgICAgICAgICAgICAgICBtX2NhbGxGcmFtZSwgc3RydWN0dXJlVmFsdWUsIHB1YmxpY0xlbmd0
aCkpOworICAgICAgICAgICAgTFZhbHVlIHNsb3dSZXN1bHRWYWx1ZSA9IGxhenlTbG93UGF0aCgK
KyAgICAgICAgICAgICAgICBbPV0gKGNvbnN0IFZlY3RvcjxMb2NhdGlvbj4mIGxvY2F0aW9ucykg
LT4gUmVmUHRyPExhenlTbG93UGF0aDo6R2VuZXJhdG9yPiB7CisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBjcmVhdGVMYXp5Q2FsbEdlbmVyYXRvcigKKyAgICAgICAgICAgICAgICAgICAgICAg
IG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemUsIGxvY2F0aW9uc1swXS5kaXJlY3RHUFIoKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uc1sxXS5kaXJlY3RHUFIoKSwgbG9jYXRpb25z
WzJdLmRpcmVjdEdQUigpKTsKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIHN0
cnVjdHVyZVZhbHVlLCBwdWJsaWNMZW5ndGgpOworICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sg
c2xvd1Jlc3VsdCA9IG1fb3V0LmFuY2hvcihzbG93UmVzdWx0VmFsdWUpOwogICAgICAgICAgICAg
bV9vdXQuanVtcChjb250aW51YXRpb24pOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBtX291
dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKQEAgLTM3NjIsMjAgKzM3OTMsMjkg
QEAgcHJpdmF0ZToKICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwogICAgICAgICAK
ICAgICAgICAgbV9vdXQuYXBwZW5kVG8oc2xvd1BhdGgsIGNvbnRpbnVhdGlvbik7Ci0gICAgICAg
IFZhbHVlRnJvbUJsb2NrIHNsb3dSZXN1bHQ7CisgICAgICAgIExWYWx1ZSBzbG93UmVzdWx0VmFs
dWU7CiAgICAgICAgIHN3aXRjaCAobnVtS2lkcykgewogICAgICAgICBjYXNlIDI6Ci0gICAgICAg
ICAgICBzbG93UmVzdWx0ID0gbV9vdXQuYW5jaG9yKHZtQ2FsbCgKLSAgICAgICAgICAgICAgICBt
X291dC5vcGVyYXRpb24ob3BlcmF0aW9uTWFrZVJvcGUyKSwgbV9jYWxsRnJhbWUsIGtpZHNbMF0s
IGtpZHNbMV0pKTsKKyAgICAgICAgICAgIHNsb3dSZXN1bHRWYWx1ZSA9IGxhenlTbG93UGF0aCgK
KyAgICAgICAgICAgICAgICBbPV0gKGNvbnN0IFZlY3RvcjxMb2NhdGlvbj4mIGxvY2F0aW9ucykg
LT4gUmVmUHRyPExhenlTbG93UGF0aDo6R2VuZXJhdG9yPiB7CisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBjcmVhdGVMYXp5Q2FsbEdlbmVyYXRvcigKKyAgICAgICAgICAgICAgICAgICAgICAg
IG9wZXJhdGlvbk1ha2VSb3BlMiwgbG9jYXRpb25zWzBdLmRpcmVjdEdQUigpLCBsb2NhdGlvbnNb
MV0uZGlyZWN0R1BSKCksCisgICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbnNbMl0uZGly
ZWN0R1BSKCkpOworICAgICAgICAgICAgICAgIH0sIGtpZHNbMF0sIGtpZHNbMV0pOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgMzoKLSAgICAgICAgICAgIHNsb3dSZXN1bHQgPSBt
X291dC5hbmNob3Iodm1DYWxsKAotICAgICAgICAgICAgICAgIG1fb3V0Lm9wZXJhdGlvbihvcGVy
YXRpb25NYWtlUm9wZTMpLCBtX2NhbGxGcmFtZSwga2lkc1swXSwga2lkc1sxXSwga2lkc1syXSkp
OworICAgICAgICAgICAgc2xvd1Jlc3VsdFZhbHVlID0gbGF6eVNsb3dQYXRoKAorICAgICAgICAg
ICAgICAgIFs9XSAoY29uc3QgVmVjdG9yPExvY2F0aW9uPiYgbG9jYXRpb25zKSAtPiBSZWZQdHI8
TGF6eVNsb3dQYXRoOjpHZW5lcmF0b3I+IHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNy
ZWF0ZUxhenlDYWxsR2VuZXJhdG9yKAorICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9u
TWFrZVJvcGUzLCBsb2NhdGlvbnNbMF0uZGlyZWN0R1BSKCksIGxvY2F0aW9uc1sxXS5kaXJlY3RH
UFIoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uc1syXS5kaXJlY3RHUFIoKSwg
bG9jYXRpb25zWzNdLmRpcmVjdEdQUigpKTsKKyAgICAgICAgICAgICAgICB9LCBraWRzWzBdLCBr
aWRzWzFdLCBraWRzWzJdKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0Ogog
ICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkJhZCBudW1iZXIgb2YgY2hp
bGRyZW4iKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CisgICAgICAgIFZhbHVlRnJv
bUJsb2NrIHNsb3dSZXN1bHQgPSBtX291dC5hbmNob3Ioc2xvd1Jlc3VsdFZhbHVlKTsKICAgICAg
ICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwogICAgICAgICAKICAgICAgICAgbV9vdXQuYXBw
ZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CkBAIC00MTMyLDcgKzQxNzIsMTEgQEAgcHJp
dmF0ZToKICAgICAgICAgCiAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBw
ZW5kVG8oaXNOb3RJbnZhbGlkYXRlZCwgY29udGludWF0aW9uKTsKIAotICAgICAgICB2bUNhbGwo
bV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbk5vdGlmeVdyaXRlKSwgbV9jYWxsRnJhbWUsIG1fb3V0
LmNvbnN0SW50UHRyKHNldCkpOworICAgICAgICBsYXp5U2xvd1BhdGgoCisgICAgICAgICAgICBb
PV0gKGNvbnN0IFZlY3RvcjxMb2NhdGlvbj4mKSAtPiBSZWZQdHI8TGF6eVNsb3dQYXRoOjpHZW5l
cmF0b3I+IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlTGF6eUNhbGxHZW5lcmF0b3Io
CisgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbk5vdGlmeVdyaXRlLCBJbnZhbGlkR1BSUmVn
LCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoc2V0KSk7CisgICAgICAgICAgICB9KTsKICAg
ICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwogICAgICAgICAKICAgICAgICAgbV9vdXQu
YXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CkBAIC00OTc4LDEwICs1MDIyLDEzIEBA
IHByaXZhdGU6CiAgICAgICAgICAgICByYXJlbHkoc2xvd1BhdGgpLCB1c3VhbGx5KGNvbnRpbnVh
dGlvbikpOwogICAgICAgICAKICAgICAgICAgbV9vdXQuYXBwZW5kVG8oc2xvd1BhdGgsIG5vdENl
bGxDYXNlKTsKLSAgICAgICAgTFZhbHVlIHNsb3dSZXN1bHRWYWx1ZSA9IHZtQ2FsbCgKLSAgICAg
ICAgICAgIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25PYmplY3RJc09iamVjdCksIG1fY2FsbEZy
YW1lLCB3ZWFrUG9pbnRlcihnbG9iYWxPYmplY3QpLAotICAgICAgICAgICAgdmFsdWUpOwotICAg
ICAgICBWYWx1ZUZyb21CbG9jayBzbG93UmVzdWx0ID0gbV9vdXQuYW5jaG9yKG1fb3V0Lm5vdE51
bGwoc2xvd1Jlc3VsdFZhbHVlKSk7CisgICAgICAgIExWYWx1ZSBzbG93UmVzdWx0VmFsdWUgPSBs
YXp5U2xvd1BhdGgoCisgICAgICAgICAgICBbPV0gKGNvbnN0IFZlY3RvcjxMb2NhdGlvbj4mIGxv
Y2F0aW9ucykgLT4gUmVmUHRyPExhenlTbG93UGF0aDo6R2VuZXJhdG9yPiB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGNyZWF0ZUxhenlDYWxsR2VuZXJhdG9yKAorICAgICAgICAgICAgICAgICAg
ICBvcGVyYXRpb25PYmplY3RJc09iamVjdCwgbG9jYXRpb25zWzBdLmRpcmVjdEdQUigpLAorICAg
ICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoZ2xvYmFsT2JqZWN0
KSwgbG9jYXRpb25zWzFdLmRpcmVjdEdQUigpKTsKKyAgICAgICAgICAgIH0sIHZhbHVlKTsKKyAg
ICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd1Jlc3VsdCA9IG1fb3V0LmFuY2hvcihtX291dC5ub3Ra
ZXJvNjQoc2xvd1Jlc3VsdFZhbHVlKSk7CiAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9u
KTsKICAgICAgICAgCiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKG5vdENlbGxDYXNlLCBjb250aW51
YXRpb24pOwpAQCAtNTAyNSw5ICs1MDcyLDEyIEBAIHByaXZhdGU6CiAgICAgICAgICAgICByYXJl
bHkoc2xvd1BhdGgpLCB1c3VhbGx5KGNvbnRpbnVhdGlvbikpOwogICAgICAgICAKICAgICAgICAg
bV9vdXQuYXBwZW5kVG8oc2xvd1BhdGgsIGNvbnRpbnVhdGlvbik7Ci0gICAgICAgIExWYWx1ZSBz
bG93UmVzdWx0VmFsdWUgPSB2bUNhbGwoCi0gICAgICAgICAgICBtX291dC5vcGVyYXRpb24ob3Bl
cmF0aW9uT2JqZWN0SXNGdW5jdGlvbiksIG1fY2FsbEZyYW1lLCB3ZWFrUG9pbnRlcihnbG9iYWxP
YmplY3QpLAotICAgICAgICAgICAgdmFsdWUpOworICAgICAgICBMVmFsdWUgc2xvd1Jlc3VsdFZh
bHVlID0gbGF6eVNsb3dQYXRoKAorICAgICAgICAgICAgWz1dIChjb25zdCBWZWN0b3I8TG9jYXRp
b24+JiBsb2NhdGlvbnMpIC0+IFJlZlB0cjxMYXp5U2xvd1BhdGg6OkdlbmVyYXRvcj4geworICAg
ICAgICAgICAgICAgIHJldHVybiBjcmVhdGVMYXp5Q2FsbEdlbmVyYXRvcigKKyAgICAgICAgICAg
ICAgICAgICAgb3BlcmF0aW9uT2JqZWN0SXNGdW5jdGlvbiwgbG9jYXRpb25zWzBdLmRpcmVjdEdQ
UigpLAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoZ2xv
YmFsT2JqZWN0KSwgbG9jYXRpb25zWzFdLmRpcmVjdEdQUigpKTsKKyAgICAgICAgICAgIH0sIHZh
bHVlKTsKICAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd1Jlc3VsdCA9IG1fb3V0LmFuY2hvciht
X291dC5ub3ROdWxsKHNsb3dSZXN1bHRWYWx1ZSkpOwogICAgICAgICBtX291dC5qdW1wKGNvbnRp
bnVhdGlvbik7CiAgICAgICAgIApAQCAtNTA2Niw3ICs1MTE2LDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgaWYgKEpTU3RyaW5nKiBzdHJpbmcgPSBtX25vZGUtPmNoaWxkMSgpLT5keW5hbWljQ2FzdENv
bnN0YW50PEpTU3RyaW5nKj4oKSkgewogICAgICAgICAgICAgaWYgKHN0cmluZy0+dHJ5R2V0VmFs
dWVJbXBsKCkgJiYgc3RyaW5nLT50cnlHZXRWYWx1ZUltcGwoKS0+aXNBdG9taWMoKSkgewogCi0g
ICAgICAgICAgICAgICAgY29uc3QgYXV0byBzdHIgPSBzdGF0aWNfY2FzdDxjb25zdCBBdG9taWNT
dHJpbmdJbXBsKj4oc3RyaW5nLT50cnlHZXRWYWx1ZUltcGwoKSk7CisgICAgICAgICAgICAgICAg
VW5pcXVlZFN0cmluZ0ltcGwqIHN0ciA9IGJpdHdpc2VfY2FzdDxVbmlxdWVkU3RyaW5nSW1wbCo+
KHN0cmluZy0+dHJ5R2V0VmFsdWVJbXBsKCkpOwogICAgICAgICAgICAgICAgIHVuc2lnbmVkIHN0
YWNrbWFwSUQgPSBtX3N0YWNrbWFwSURzKys7CiAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICBMVmFsdWUgY2FsbCA9IG1fb3V0LmNhbGwoCkBAIC01NDYwLDEyICs1NTEwLDE2IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwogICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKHNsb3dQYXRoLCBjb250aW51
YXRpb24pOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIFZhbHVlRnJvbUJsb2Nr
IHNsb3dPYmplY3QgPSBtX291dC5hbmNob3Iodm1DYWxsKAotICAgICAgICAgICAgICAgICAgICBt
X291dC5vcGVyYXRpb24ob3BlcmF0aW9uTmV3T2JqZWN0V2l0aEJ1dHRlcmZseSksCi0gICAgICAg
ICAgICAgICAgICAgIG1fY2FsbEZyYW1lLCBtX291dC5jb25zdEludFB0cihzdHJ1Y3R1cmUpKSk7
CisKKyAgICAgICAgICAgICAgICBMVmFsdWUgc2xvd09iamVjdFZhbHVlID0gbGF6eVNsb3dQYXRo
KAorICAgICAgICAgICAgICAgICAgICBbPV0gKGNvbnN0IFZlY3RvcjxMb2NhdGlvbj4mIGxvY2F0
aW9ucykgLT4gUmVmUHRyPExhenlTbG93UGF0aDo6R2VuZXJhdG9yPiB7CisgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gY3JlYXRlTGF6eUNhbGxHZW5lcmF0b3IoCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgb3BlcmF0aW9uTmV3T2JqZWN0V2l0aEJ1dHRlcmZseSwgbG9jYXRpb25z
WzBdLmRpcmVjdEdQUigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7Cisg
ICAgICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd09iamVjdCA9IG1fb3V0LmFuY2hvcihz
bG93T2JqZWN0VmFsdWUpOwogICAgICAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dCdXR0
ZXJmbHkgPSBtX291dC5hbmNob3IoCi0gICAgICAgICAgICAgICAgICAgIG1fb3V0LmxvYWRQdHIo
c2xvd09iamVjdC52YWx1ZSgpLCBtX2hlYXBzLkpTT2JqZWN0X2J1dHRlcmZseSkpOworICAgICAg
ICAgICAgICAgICAgICBtX291dC5sb2FkUHRyKHNsb3dPYmplY3RWYWx1ZSwgbV9oZWFwcy5KU09i
amVjdF9idXR0ZXJmbHkpKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBtX291
dC5qdW1wKGNvbnRpbnVhdGlvbik7CiAgICAgICAgICAgICAgICAgCkBAIC01NTM3LDkgKzU1OTEs
MTQgQEAgcHJpdmF0ZToKICAgICAgICAgLy8gYmVjYXVzZSBhbGwgZmllbGRzIHdpbGwgYmUgb3Zl
cndyaXR0ZW4uCiAgICAgICAgIC8vIEZJWE1FOiBJdCBtYXkgYmUgd29ydGggY3JlYXRpbmcgYW4g
b3BlcmF0aW9uIHRoYXQgY2FsbHMgYSBjb25zdHJ1Y3RvciBvbiBKU0xleGljYWxFbnZpcm9ubWVu
dCB0aGF0IAogICAgICAgICAvLyBkb2Vzbid0IGluaXRpYWxpemUgZXZlcnkgc2xvdCBiZWNhdXNl
IHdlIGFyZSBndWFyYW50ZWVkIHRvIGRvIHRoYXQgaGVyZS4KLSAgICAgICAgTFZhbHVlIGNhbGxS
ZXN1bHQgPSB2bUNhbGwoCi0gICAgICAgICAgICBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uQ3Jl
YXRlQWN0aXZhdGlvbkRpcmVjdCksIG1fY2FsbEZyYW1lLCB3ZWFrUG9pbnRlcihzdHJ1Y3R1cmUp
LAotICAgICAgICAgICAgc2NvcGUsIHdlYWtQb2ludGVyKHRhYmxlKSwgbV9vdXQuY29uc3RJbnQ2
NChKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSkpKTsKKyAgICAgICAgTFZhbHVlIGNhbGxS
ZXN1bHQgPSBsYXp5U2xvd1BhdGgoCisgICAgICAgICAgICBbPV0gKGNvbnN0IFZlY3RvcjxMb2Nh
dGlvbj4mIGxvY2F0aW9ucykgLT4gUmVmUHRyPExhenlTbG93UGF0aDo6R2VuZXJhdG9yPiB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxhenlDYWxsR2VuZXJhdG9yKAorICAgICAgICAg
ICAgICAgICAgICBvcGVyYXRpb25DcmVhdGVBY3RpdmF0aW9uRGlyZWN0LCBsb2NhdGlvbnNbMF0u
ZGlyZWN0R1BSKCksCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bVB0cihzdHJ1Y3R1cmUpLCBsb2NhdGlvbnNbMV0uZGlyZWN0R1BSKCksCisgICAgICAgICAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cih0YWJsZSksCisgICAgICAgICAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKSkpOworICAgICAgICAgICAgfSwgc2NvcGUpOwogICAgICAgICBWYWx1ZUZyb21CbG9j
ayBzbG93UmVzdWx0ID0gIG1fb3V0LmFuY2hvcihjYWxsUmVzdWx0KTsKICAgICAgICAgbV9vdXQu
anVtcChjb250aW51YXRpb24pOwogCkBAIC01NTgxLDcgKzU2NDAsMTAgQEAgcHJpdmF0ZToKIAog
ICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKHRpbWVyRGlkRmly
ZSwgY29udGludWF0aW9uKTsKIAotICAgICAgICB2bUNhbGwobV9vdXQub3BlcmF0aW9uKG9wZXJh
dGlvbkhhbmRsZVdhdGNoZG9nVGltZXIpLCBtX2NhbGxGcmFtZSk7CisgICAgICAgIGxhenlTbG93
UGF0aCgKKyAgICAgICAgICAgIFs9XSAoY29uc3QgVmVjdG9yPExvY2F0aW9uPiYpIC0+IFJlZlB0
cjxMYXp5U2xvd1BhdGg6OkdlbmVyYXRvcj4geworICAgICAgICAgICAgICAgIHJldHVybiBjcmVh
dGVMYXp5Q2FsbEdlbmVyYXRvcihvcGVyYXRpb25IYW5kbGVXYXRjaGRvZ1RpbWVyLCBJbnZhbGlk
R1BSUmVnKTsKKyAgICAgICAgICAgIH0pOwogICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlv
bik7CiAgICAgICAgIAogICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3RO
ZXh0KTsKQEAgLTYwMTUsMTMgKzYwNzcsMTkgQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAg
IExWYWx1ZSBzbG93QnV0dGVyZmx5VmFsdWU7CiAgICAgICAgIGlmIChzaXplSW5WYWx1ZXMgPT0g
aW5pdGlhbE91dE9mTGluZUNhcGFjaXR5KSB7Ci0gICAgICAgICAgICBzbG93QnV0dGVyZmx5VmFs
dWUgPSB2bUNhbGwoCi0gICAgICAgICAgICAgICAgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbkFs
bG9jYXRlUHJvcGVydHlTdG9yYWdlV2l0aEluaXRpYWxDYXBhY2l0eSksCi0gICAgICAgICAgICAg
ICAgbV9jYWxsRnJhbWUpOworICAgICAgICAgICAgc2xvd0J1dHRlcmZseVZhbHVlID0gbGF6eVNs
b3dQYXRoKAorICAgICAgICAgICAgICAgIFs9XSAoY29uc3QgVmVjdG9yPExvY2F0aW9uPiYgbG9j
YXRpb25zKSAtPiBSZWZQdHI8TGF6eVNsb3dQYXRoOjpHZW5lcmF0b3I+IHsKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGNyZWF0ZUxhenlDYWxsR2VuZXJhdG9yKAorICAgICAgICAgICAgICAg
ICAgICAgICAgb3BlcmF0aW9uQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2VXaXRoSW5pdGlhbENhcGFj
aXR5LAorICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb25zWzBdLmRpcmVjdEdQUigpKTsK
KyAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHNsb3dC
dXR0ZXJmbHlWYWx1ZSA9IHZtQ2FsbCgKLSAgICAgICAgICAgICAgICBtX291dC5vcGVyYXRpb24o
b3BlcmF0aW9uQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UpLAotICAgICAgICAgICAgICAgIG1fY2Fs
bEZyYW1lLCBtX291dC5jb25zdEludFB0cihzaXplSW5WYWx1ZXMpKTsKKyAgICAgICAgICAgIHNs
b3dCdXR0ZXJmbHlWYWx1ZSA9IGxhenlTbG93UGF0aCgKKyAgICAgICAgICAgICAgICBbPV0gKGNv
bnN0IFZlY3RvcjxMb2NhdGlvbj4mIGxvY2F0aW9ucykgLT4gUmVmUHRyPExhenlTbG93UGF0aDo6
R2VuZXJhdG9yPiB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVMYXp5Q2FsbEdl
bmVyYXRvcigKKyAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbkFsbG9jYXRlUHJvcGVy
dHlTdG9yYWdlLCBsb2NhdGlvbnNbMF0uZGlyZWN0R1BSKCksCisgICAgICAgICAgICAgICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoc2l6ZUluVmFsdWVzKSk7CisgICAgICAg
ICAgICAgICAgfSk7CiAgICAgICAgIH0KICAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd0J1dHRl
cmZseSA9IG1fb3V0LmFuY2hvcihzbG93QnV0dGVyZmx5VmFsdWUpOwogICAgICAgICAKQEAgLTYz
MDMsOSArNjM3MSwxNCBAQCBwcml2YXRlOgogICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlv
bik7CiAgICAgICAgIAogICAgICAgICBtX291dC5hcHBlbmRUbyhzbG93UGF0aCwgY29udGludWF0
aW9uKTsKLSAgICAgICAgCi0gICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dSZXN1bHQgPSBtX291
dC5hbmNob3Iodm1DYWxsKAotICAgICAgICAgICAgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbk5l
d09iamVjdCksIG1fY2FsbEZyYW1lLCBtX291dC5jb25zdEludFB0cihzdHJ1Y3R1cmUpKSk7CisK
KyAgICAgICAgTFZhbHVlIHNsb3dSZXN1bHRWYWx1ZSA9IGxhenlTbG93UGF0aCgKKyAgICAgICAg
ICAgIFs9XSAoY29uc3QgVmVjdG9yPExvY2F0aW9uPiYgbG9jYXRpb25zKSAtPiBSZWZQdHI8TGF6
eVNsb3dQYXRoOjpHZW5lcmF0b3I+IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlTGF6
eUNhbGxHZW5lcmF0b3IoCisgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbk5ld09iamVjdCwg
bG9jYXRpb25zWzBdLmRpcmVjdEdQUigpLAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAg
VmFsdWVGcm9tQmxvY2sgc2xvd1Jlc3VsdCA9IG1fb3V0LmFuY2hvcihzbG93UmVzdWx0VmFsdWUp
OwogICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CiAgICAgICAgIAogICAgICAgICBt
X291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKQEAgLTYzNzcsMTAgKzY0NTAs
MTQgQEAgcHJpdmF0ZToKICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwogICAgICAg
ICAKICAgICAgICAgbV9vdXQuYXBwZW5kVG8oc2xvd1BhdGgsIGNvbnRpbnVhdGlvbik7Ci0gICAg
ICAgIAotICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93QXJyYXkgPSBtX291dC5hbmNob3Iodm1D
YWxsKAotICAgICAgICAgICAgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFNp
emUpLCBtX2NhbGxGcmFtZSwKLSAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50UHRyKHN0cnVjdHVy
ZSksIG1fb3V0LmNvbnN0SW50MzIobnVtRWxlbWVudHMpKSk7CisKKyAgICAgICAgTFZhbHVlIHNs
b3dBcnJheVZhbHVlID0gbGF6eVNsb3dQYXRoKAorICAgICAgICAgICAgWz1dIChjb25zdCBWZWN0
b3I8TG9jYXRpb24+JiBsb2NhdGlvbnMpIC0+IFJlZlB0cjxMYXp5U2xvd1BhdGg6OkdlbmVyYXRv
cj4geworICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVMYXp5Q2FsbEdlbmVyYXRvcigKKyAg
ICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZSwgbG9jYXRpb25zWzBd
LmRpcmVjdEdQUigpLAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW1QdHIoc3RydWN0dXJlKSwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIobnVtRWxlbWVudHMp
KTsKKyAgICAgICAgICAgIH0pOworICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93QXJyYXkgPSBt
X291dC5hbmNob3Ioc2xvd0FycmF5VmFsdWUpOwogICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93
QnV0dGVyZmx5ID0gbV9vdXQuYW5jaG9yKAogICAgICAgICAgICAgbV9vdXQubG9hZFB0cihzbG93
QXJyYXkudmFsdWUoKSwgbV9oZWFwcy5KU09iamVjdF9idXR0ZXJmbHkpKTsKIApAQCAtNzA0OSwx
NCArNzEyNiwxNyBAQCBwcml2YXRlOgogICAgICAgICBmdW5jdG9yKFR5cGVvZlR5cGU6Ok9iamVj
dCk7CiAgICAgICAgIAogICAgICAgICBtX291dC5hcHBlbmRUbyhzbG93UGF0aCwgdW5yZWFjaGFi
bGUpOwotICAgICAgICBMVmFsdWUgcmVzdWx0ID0gdm1DYWxsKAotICAgICAgICAgICAgbV9vdXQu
b3BlcmF0aW9uKG9wZXJhdGlvblR5cGVPZk9iamVjdEFzVHlwZW9mVHlwZSksIG1fY2FsbEZyYW1l
LAotICAgICAgICAgICAgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwgdmFsdWUpOworICAgICAg
ICBMVmFsdWUgcmVzdWx0ID0gbGF6eVNsb3dQYXRoKAorICAgICAgICAgICAgWz1dIChjb25zdCBW
ZWN0b3I8TG9jYXRpb24+JiBsb2NhdGlvbnMpIC0+IFJlZlB0cjxMYXp5U2xvd1BhdGg6OkdlbmVy
YXRvcj4geworICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVMYXp5Q2FsbEdlbmVyYXRvcigK
KyAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uVHlwZU9mT2JqZWN0QXNUeXBlb2ZUeXBlLCBs
b2NhdGlvbnNbMF0uZGlyZWN0R1BSKCksCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbVB0cihnbG9iYWxPYmplY3QpLCBsb2NhdGlvbnNbMV0uZGlyZWN0R1BSKCkp
OworICAgICAgICAgICAgfSwgdmFsdWUpOwogICAgICAgICBWZWN0b3I8U3dpdGNoQ2FzZSwgMz4g
Y2FzZXM7CiAgICAgICAgIGNhc2VzLmFwcGVuZChTd2l0Y2hDYXNlKG1fb3V0LmNvbnN0SW50MzIo
c3RhdGljX2Nhc3Q8aW50MzJfdD4oVHlwZW9mVHlwZTo6VW5kZWZpbmVkKSksIHVuZGVmaW5lZENh
c2UpKTsKICAgICAgICAgY2FzZXMuYXBwZW5kKFN3aXRjaENhc2UobV9vdXQuY29uc3RJbnQzMihz
dGF0aWNfY2FzdDxpbnQzMl90PihUeXBlb2ZUeXBlOjpPYmplY3QpKSwgcmVhbGx5T2JqZWN0Q2Fz
ZSkpOwogICAgICAgICBjYXNlcy5hcHBlbmQoU3dpdGNoQ2FzZShtX291dC5jb25zdEludDMyKHN0
YXRpY19jYXN0PGludDMyX3Q+KFR5cGVvZlR5cGU6OkZ1bmN0aW9uKSksIGZ1bmN0aW9uQ2FzZSkp
OwotICAgICAgICBtX291dC5zd2l0Y2hJbnN0cnVjdGlvbihyZXN1bHQsIGNhc2VzLCB1bnJlYWNo
YWJsZSwgV2VpZ2h0KCkpOworICAgICAgICBtX291dC5zd2l0Y2hJbnN0cnVjdGlvbihtX291dC5j
YXN0VG9JbnQzMihyZXN1bHQpLCBjYXNlcywgdW5yZWFjaGFibGUsIFdlaWdodCgpKTsKICAgICAg
ICAgCiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKHVucmVhY2hhYmxlLCBub3RPYmplY3RDYXNlKTsK
ICAgICAgICAgbV9vdXQudW5yZWFjaGFibGUoKTsKQEAgLTcxNjMsNiArNzI0MywxMTEgQEAgcHJp
dmF0ZToKICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CiAg
ICAgICAgIHJldHVybiBtX291dC5waGkobV9vdXQuaW50MzIsIGZhc3RSZXN1bHQsIHNsb3dSZXN1
bHQpOwogICAgIH0KKworICAgIC8vIFRoaXMgaXMgYSBtZWNoYW5pc20gZm9yIGNyZWF0aW5nIGEg
Y29kZSBnZW5lcmF0b3IgdGhhdCBmaWxscyBpbiBhIGdhcCBpbiB0aGUgY29kZSB1c2luZyBvdXIK
KyAgICAvLyBvd24gTWFjcm9Bc3NlbWJsZXIuIFRoaXMgaXMgdXNlZnVsIGZvciBzbG93IHBhdGhz
IHRoYXQgaW52b2x2ZSBhIGxvdCBvZiBjb2RlIGFuZCB3ZSBkb24ndCB3YW50CisgICAgLy8gdG8g
cGF5IHRoZSBwcmljZSBvZiBMTFZNIG9wdGltaXppbmcgaXQuIEEgbGF6eSBzbG93IHBhdGggd2ls
bCBvbmx5IGJlIGdlbmVyYXRlZCBpZiBpdCBhY3R1YWxseQorICAgIC8vIGV4ZWN1dGVzLiBPbiB0
aGUgb3RoZXIgaGFuZCwgYSBsYXp5IHNsb3cgcGF0aCBhbHdheXMgaW5jdXJzIHRoZSBjb3N0IG9m
IHR3byBhZGRpdGlvbmFsIGp1bXBzLgorICAgIC8vIEFsc28sIHRoZSBsYXp5IHNsb3cgcGF0aCdz
IHJlZ2lzdGVyIGFsbG9jYXRpb24gc3RhdGUgaXMgc2xhdmVkIHRvIHdoYXRldmVyIExMVk0gZGlk
LCBzbyB5b3UKKyAgICAvLyBoYXZlIHRvIHVzZSBhIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvciB0
byB0cnkgdG8gdXNlIHNvbWUgdW51c2VkIHJlZ2lzdGVycyBhbmQgeW91IG1heSBoYXZlCisgICAg
Ly8gdG8gc3BpbGwgdG8gdG9wIG9mIHN0YWNrIGlmIHRoZXJlIGFyZW4ndCBlbm91Z2ggcmVnaXN0
ZXJzIGF2YWlsYWJsZS4KKyAgICAvLworICAgIC8vIExhenkgc2xvdyBwYXRocyBpbnZvbHZlIHRo
cmVlIGRpZmZlcmVudCBzdGFnZXMgb2YgZXhlY3V0aW9uLiBFYWNoIHN0YWdlIGhhcyB1bmlxdWUK
KyAgICAvLyBjYXBhYmlsaXRpZXMgYW5kIGtub3dsZWRnZS4gVGhlIHN0YWdlcyBhcmU6CisgICAg
Ly8KKyAgICAvLyAxKSBERkctPkxMVk0gbG93ZXJpbmcsIGkuZS4gY29kZSB0aGF0IHJ1bnMgaW4g
dGhpcyBwaGFzZS4gTG93ZXJpbmcgaXMgdGhlIGxhc3QgdGltZSB5b3Ugd2lsbAorICAgIC8vICAg
IGhhdmUgYWNjZXNzIHRvIExWYWx1ZXMuIElmIHRoZXJlIGlzIGFuIExWYWx1ZSB0aGF0IG5lZWRz
IHRvIGJlIGZlZCBhcyBpbnB1dCB0byBhIGxhenkgc2xvdworICAgIC8vICAgIHBhdGgsIHRoZW4g
eW91IG11c3QgcGFzcyBpdCBhcyBhbiBhcmd1bWVudCBoZXJlIChhcyBvbmUgb2YgdGhlIHZhcmFy
Z3MgYXJndW1lbnRzIGFmdGVyIHRoZQorICAgIC8vICAgIGZ1bmN0b3IpLiBCdXQsIGxvd2VyaW5n
IGRvZXNuJ3Qga25vdyB3aGljaCByZWdpc3RlcnMgd2lsbCBiZSB1c2VkIGZvciB0aG9zZSBMVmFs
dWVzLiBIZW5jZQorICAgIC8vICAgIHlvdSBwYXNzIGEgbGFtYmRhIHRvIGxhenlTbG93UGF0aCgp
IGFuZCB0aGF0IGxhbWJkYSB3aWxsIHJ1biBkdXJpbmcgc3RhZ2UgKDIpOgorICAgIC8vCisgICAg
Ly8gMikgRlRMQ29tcGlsZS5jcHAncyBmaXhGdW5jdGlvbkJhc2VkT25TdGFja01hcHMuIFRoaXMg
Y29kZSBpcyB0aGUgb25seSBzdGFnZSBhdCB3aGljaCB3ZSBrbm93CisgICAgLy8gICAgdGhlIG1h
cHBpbmcgZnJvbSBhcmd1bWVudHMgcGFzc2VkIHRvIHRoaXMgbWV0aG9kIGluICgxKSBhbmQgdGhl
IHJlZ2lzdGVycyB0aGF0IExMVk0KKyAgICAvLyAgICBzZWxlY3RlZCBmb3IgdGhvc2UgYXJndW1l
bnRzLiBZb3UgZG9uJ3QgYWN0dWFsbHkgd2FudCB0byBnZW5lcmF0ZSBhbnkgY29kZSBoZXJlLCBz
aW5jZSB0aGVuCisgICAgLy8gICAgdGhlIHNsb3cgcGF0aCB3b3VsZG4ndCBhY3R1YWxseSBiZSBs
YXppbHkgZ2VuZXJhdGVkLiBJbnN0ZWFkLCB5b3Ugd2FudCB0byBzYXZlIHRoZQorICAgIC8vICAg
IHJlZ2lzdGVycyBiZWluZyB1c2VkIGZvciB0aGUgYXJndW1lbnRzIGFuZCBkZWZlciBjb2RlIGdl
bmVyYXRpb24gdG8gc3RhZ2UgKDMpIGJ5IGNyZWF0aW5nCisgICAgLy8gICAgYW5kIHJldHVybmlu
ZyBhIExhenlTbG93UGF0aDo6R2VuZXJhdG9yOgorICAgIC8vCisgICAgLy8gMykgTGF6eVNsb3dQ
YXRoJ3MgZ2VuZXJhdGUoKSBtZXRob2QuIFRoaXMgY29kZSBydW5zIGluIHJlc3BvbnNlIHRvIHRo
ZSBsYXp5IHNsb3cgcGF0aAorICAgIC8vICAgIGV4ZWN1dGluZyBmb3IgdGhlIGZpcnN0IHRpbWUu
IEl0IHdpbGwgY2FsbCB0aGUgZ2VuZXJhdG9yIHlvdSBjcmVhdGVkIGluIHN0YWdlICgyKS4KKyAg
ICAvLworICAgIC8vIE5vdGUgdGhhdCBlYWNoIHRpbWUgeW91IGludm9rZSBzdGFnZSAoMSksIHN0
YWdlICgyKSBtYXkgYmUgaW52b2tlZCB6ZXJvLCBvbmUsIG9yIG1hbnkgdGltZXMuCisgICAgLy8g
U3RhZ2UgKDIpIHdpbGwgdXN1YWxseSBiZSBpbnZva2VkIG9uY2UgZm9yIHN0YWdlICgxKS4gQnV0
LCBMTFZNIG1heSBraWxsIHRoZSBjb2RlLCBpbiB3aGljaAorICAgIC8vIGNhc2Ugc3RhZ2UgKDIp
IHdvbid0IHJ1bi4gTExWTSBtYXkgZHVwbGljYXRlIHRoZSBjb2RlIChmb3IgZXhhbXBsZSB2aWEg
anVtcCB0aHJlYWRpbmcpLAorICAgIC8vIGxlYWRpbmcgdG8gbWFueSBjYWxscyB0byB5b3VyIHN0
YWdlICgyKSBsYW1iZGEuIFN0YWdlICgzKSBtYXkgYmUgY2FsbGVkIHplcm8gb3Igb25jZSBmb3Ig
ZWFjaAorICAgIC8vIHN0YWdlICgyKS4gSXQgd2lsbCBiZSBjYWxsZWQgemVybyB0aW1lcyBpZiB0
aGUgc2xvdyBwYXRoIG5ldmVyIHJ1bnMuIFRoaXMgaXMgd2hhdCB5b3UgaG9wZSBmb3IKKyAgICAv
LyB3aGVuZXZlciB5b3UgdXNlIHRoZSBsYXp5U2xvd1BhdGgoKSBtZWNoYW5pc20uCisgICAgLy8K
KyAgICAvLyBBIHR5cGljYWwgdXNlIG9mIGxhenlTbG93UGF0aCgpIHdpbGwgbG9vayBsaWtlIHRo
ZSBleGFtcGxlIGJlbG93LCB3aGljaCBqdXN0IGNyZWF0ZXMgYSBzbG93CisgICAgLy8gcGF0aCB0
aGF0IGFkZHMgc29tZSB2YWx1ZSB0byB0aGUgaW5wdXQgYW5kIHJldHVybnMgaXQuCisgICAgLy8K
KyAgICAvLyAvLyBTdGFnZSAoMSkgaXMgaGVyZS4gVGhpcyBpcyB5b3VyIGxhc3QgY2hhbmNlIHRv
IGZpZ3VyZSBvdXQgd2hpY2ggTFZhbHVlcyB0byB1c2UgYXMgaW5wdXRzLgorICAgIC8vIC8vIE5v
dGljZSBob3cgd2UgcGFzcyAiaW5wdXQiIGFzIGFuIGFyZ3VtZW50IHRvIGxhenlTbG93UGF0aCgp
LgorICAgIC8vIExWYWx1ZSBpbnB1dCA9IC4uLjsKKyAgICAvLyBpbnQgYWRkZW5kID0gLi4uOwor
ICAgIC8vIExWYWx1ZSBvdXRwdXQgPSBsYXp5U2xvd1BhdGgoCisgICAgLy8gICAgIFs9XSAoY29u
c3QgVmVjdG9yPExvY2F0aW9uPiYgbG9jYXRpb25zKSAtPiBSZWZQdHI8TGF6eVNsb3dQYXRoOjpH
ZW5lcmF0b3I+IHsKKyAgICAvLyAgICAgICAgIC8vIFN0YWdlICgyKSBpcyBoZXJlLiBUaGlzIGlz
IHlvdXIgbGFzdCBjaGFuY2UgdG8gZmlndXJlIG91dCB3aGljaCByZWdpc3RlcnMgYXJlIHVzZWQK
KyAgICAvLyAgICAgICAgIC8vIGZvciB3aGljaCB2YWx1ZXMuIExvY2F0aW9uIHplcm8gaXMgYWx3
YXlzIHRoZSByZXR1cm4gdmFsdWUuIFlvdSBjYW4gaWdub3JlIGl0IGlmCisgICAgLy8gICAgICAg
ICAvLyB5b3UgZG9uJ3Qgd2FudCB0byByZXR1cm4gYW55dGhpbmcuIExvY2F0aW9uIDEgaXMgdGhl
IHJlZ2lzdGVyIGZvciB0aGUgZmlyc3QKKyAgICAvLyAgICAgICAgIC8vIGFyZ3VtZW50IHRvIHRo
ZSBsYXp5U2xvd1BhdGgoKSwgaS5lLiAiaW5wdXQiLiBOb3RlIHRoYXQgdGhlIExvY2F0aW9uIG9i
amVjdCBjb3VsZAorICAgIC8vICAgICAgICAgLy8gYWxzbyBob2xkIGFuIEZQUiwgaWYgeW91IGFy
ZSBwYXNzaW5nIGEgZG91YmxlLgorICAgIC8vICAgICAgICAgR1BSUmVnIG91dHB1dEdQUiA9IGxv
Y2F0aW9uc1swXS5kaXJlY3RHUFIoKTsKKyAgICAvLyAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9
IGxvY2F0aW9uc1sxXS5kaXJlY3RHUFIoKTsKKyAgICAvLyAgICAgICAgIHJldHVybiBMYXp5U2xv
d1BhdGg6OmNyZWF0ZUdlbmVyYXRvcigKKyAgICAvLyAgICAgICAgICAgICBbPV0gKENDYWxsSGVs
cGVycyYgaml0LCBMYXp5U2xvd1BhdGg6OkdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAg
IC8vICAgICAgICAgICAgICAgICAvLyBTdGFnZSAoMykgaXMgaGVyZS4gVGhpcyBpcyB3aGVuIHlv
dSBnZW5lcmF0ZSBjb2RlLiBZb3UgaGF2ZSBhY2Nlc3MgdG8gdGhlCisgICAgLy8gICAgICAgICAg
ICAgICAgIC8vIHJlZ2lzdGVycyB5b3UgY29sbGVjdGVkIGluIHN0YWdlICgyKSBiZWNhdXNlIHRo
aXMgbGFtYmRhIGNsb3NlcyBvdmVyIHRob3NlCisgICAgLy8gICAgICAgICAgICAgICAgIC8vIHZh
cmlhYmxlcyAob3V0cHV0R1BSIGFuZCBpbnB1dEdQUikuIFlvdSBhbHNvIGhhdmUgYWNjZXNzIHRv
IHdoYXRldmVyIGV4dHJhCisgICAgLy8gICAgICAgICAgICAgICAgIC8vIGRhdGEgeW91IGNvbGxl
Y3RlZCBpbiBzdGFnZSAoMSksIHN1Y2ggYXMgdGhlIGFkZGVuZCBpbiB0aGlzIGNhc2UuCisgICAg
Ly8gICAgICAgICAgICAgICAgIGppdC5hZGQzMihUcnVzdGVkSW1tMzIoYWRkZW5kKSwgaW5wdXRH
UFIsIG91dHB1dEdQUik7CisgICAgLy8gICAgICAgICAgICAgICAgIC8vIFlvdSBoYXZlIHRvIGVu
ZCBieSBqdW1waW5nIHRvIGRvbmUuIFRoZXJlIGlzIG5vdGhpbmcgdG8gZmFsbCB0aHJvdWdoIHRv
LgorICAgIC8vICAgICAgICAgICAgICAgICAvLyBZb3UgY2FuIGFsc28ganVtcCB0byB0aGUgZXhj
ZXB0aW9uIGhhbmRsZXIgKHNlZSBMYXp5U2xvd1BhdGguaCBmb3IgbW9yZQorICAgIC8vICAgICAg
ICAgICAgICAgICAvLyBpbmZvKS4gTm90ZSB0aGF0IGN1cnJlbnRseSB5b3UgY2Fubm90IE9TUiBl
eGl0LgorICAgIC8vICAgICAgICAgICAgICAgICBwYXJhbXMuZG9uZUp1bXBzLmFwcGVuZChqaXQu
anVtcCgpKTsKKyAgICAvLyAgICAgICAgICAgICB9KTsKKyAgICAvLyAgICAgfSwKKyAgICAvLyAg
ICAgaW5wdXQpOworICAgIC8vCisgICAgLy8gTm90ZSB0aGF0IGlmIHlvdXIgc2xvdyBwYXRoIGlz
IG9ubHkgZG9pbmcgYSBjYWxsLCB5b3UgY2FuIHVzZSB0aGUgY3JlYXRlTGF6eUNhbGxHZW5lcmF0
b3IoKQorICAgIC8vIGhlbHBlci4gRm9yIGV4YW1wbGU6CisgICAgLy8KKyAgICAvLyBMVmFsdWUg
aW5wdXQgPSAuLi47CisgICAgLy8gTFZhbHVlIG91dHB1dCA9IGxhenlTbG93UGF0aCgKKyAgICAv
LyAgICAgWz1dIChjb25zdCBWZWN0b3I8TG9jYXRpb24+JiBsb2NhdGlvbnMpIC0+IFJlZlB0cjxM
YXp5U2xvd1BhdGg6OkdlbmVyYXRvcj4geworICAgIC8vICAgICAgICAgcmV0dXJuIGNyZWF0ZUxh
enlDYWxsR2VuZXJhdG9yKAorICAgIC8vICAgICAgICAgICAgIG9wZXJhdGlvbkRvVGhpbmdzLCBs
b2NhdGlvbnNbMF0uZGlyZWN0R1BSKCksIGxvY2F0aW9uc1sxXS5kaXJlY3RHUFIoKSk7CisgICAg
Ly8gICAgIH0pOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3IsIHR5cGVuYW1lLi4uIEFy
Z3VtZW50VHlwZXM+CisgICAgTFZhbHVlIGxhenlTbG93UGF0aChjb25zdCBGdW5jdG9yJiBmdW5j
dG9yLCBBcmd1bWVudFR5cGVzLi4uIGFyZ3VtZW50cykKKyAgICB7CisgICAgICAgIHJldHVybiBs
YXp5U2xvd1BhdGgoZnVuY3RvciwgVmVjdG9yPExWYWx1ZT57IGFyZ3VtZW50cy4uLiB9KTsKKyAg
ICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIExWYWx1ZSBsYXp5U2xv
d1BhdGgoY29uc3QgRnVuY3RvciYgZnVuY3RvciwgY29uc3QgVmVjdG9yPExWYWx1ZT4mIHVzZXJB
cmd1bWVudHMpCisgICAgeworICAgICAgICB1bnNpZ25lZCBzdGFja21hcElEID0gbV9zdGFja21h
cElEcysrOworCisgICAgICAgIFZlY3RvcjxMVmFsdWU+IGFyZ3VtZW50czsKKyAgICAgICAgYXJn
dW1lbnRzLmFwcGVuZChtX291dC5jb25zdEludDY0KHN0YWNrbWFwSUQpKTsKKyAgICAgICAgYXJn
dW1lbnRzLmFwcGVuZChtX291dC5jb25zdEludDMyKE1hY3JvQXNzZW1ibGVyOjptYXhKdW1wUmVw
bGFjZW1lbnRTaXplKCkpKTsKKyAgICAgICAgYXJndW1lbnRzLmFwcGVuZChjb25zdE51bGwobV9v
dXQucmVmOCkpOworICAgICAgICBhcmd1bWVudHMuYXBwZW5kKG1fb3V0LmNvbnN0SW50MzIodXNl
ckFyZ3VtZW50cy5zaXplKCkpKTsKKyAgICAgICAgYXJndW1lbnRzLmFwcGVuZFZlY3Rvcih1c2Vy
QXJndW1lbnRzKTsKKyAgICAgICAgTFZhbHVlIGNhbGwgPSBtX291dC5jYWxsKG1fb3V0LnBhdGNo
cG9pbnRJbnQ2NEludHJpbnNpYygpLCBhcmd1bWVudHMpOworICAgICAgICBzZXRJbnN0cnVjdGlv
bkNhbGxpbmdDb252ZW50aW9uKGNhbGwsIExMVk1BbnlSZWdDYWxsQ29udik7CisKKyAgICAgICAg
Q2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4ID0KKyAgICAgICAgICAgIG1fZnRsU3RhdGUuaml0
Q29kZS0+Y29tbW9uLmFkZENvZGVPcmlnaW4obV9ub2RlLT5vcmlnaW4uc2VtYW50aWMpOworICAg
ICAgICAKKyAgICAgICAgUmVmUHRyPExhenlTbG93UGF0aExpbmtlclRhc2s+IGxpbmtlciA9Cisg
ICAgICAgICAgICBjcmVhdGVTaGFyZWRUYXNrPExhenlTbG93UGF0aExpbmtlckZ1bmN0aW9uPihm
dW5jdG9yKTsKKworICAgICAgICBtX2Z0bFN0YXRlLmxhenlTbG93UGF0aHMuYXBwZW5kKExhenlT
bG93UGF0aERlc2NyaXB0b3Ioc3RhY2ttYXBJRCwgY2FsbFNpdGVJbmRleCwgbGlua2VyKSk7CisK
KyAgICAgICAgcmV0dXJuIGNhbGw7CisgICAgfQogICAgIAogICAgIHZvaWQgc3BlY3VsYXRlKAog
ICAgICAgICBFeGl0S2luZCBraW5kLCBGb3JtYXR0ZWRWYWx1ZSBsb3dWYWx1ZSwgTm9kZSogaGln
aFZhbHVlLCBMVmFsdWUgZmFpbENvbmRpdGlvbikKQEAgLTgyNjcsMzMgKzg0NTIsNjcgQEAgcHJp
dmF0ZToKIAogICAgIHZvaWQgZW1pdFN0b3JlQmFycmllcihMVmFsdWUgYmFzZSkKICAgICB7Ci0g
ICAgICAgIExCYXNpY0Jsb2NrIGlzTWFya2VkQW5kTm90UmVtZW1iZXJlZCA9IEZUTF9ORVdfQkxP
Q0sobV9vdXQsICgiU3RvcmUgYmFycmllciBpcyBtYXJrZWQgYmxvY2siKSk7Ci0gICAgICAgIExC
YXNpY0Jsb2NrIGJ1ZmZlckhhc1NwYWNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJTdG9yZSBi
YXJyaWVyIGJ1ZmZlciBoYXMgc3BhY2UiKSk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIGJ1ZmZlcklz
RnVsbCA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiU3RvcmUgYmFycmllciBidWZmZXIgaXMgZnVs
bCIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgc2xvd1BhdGggPSBGVExfTkVXX0JMT0NLKG1fb3V0
LCAoIlN0b3JlIGJhcnJpZXIgc2xvdyBwYXRoIikpOwogICAgICAgICBMQmFzaWNCbG9jayBjb250
aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIlN0b3JlIGJhcnJpZXIgY29udGludWF0
aW9uIikpOwogCi0gICAgICAgIC8vIENoZWNrIHRoZSBtYXJrIGJ5dGUuIAotICAgICAgICBtX291
dC5icmFuY2goCi0gICAgICAgICAgICBtX291dC5ub3RaZXJvOChsb2FkQ2VsbFN0YXRlKGJhc2Up
KSwgdXN1YWxseShjb250aW51YXRpb24pLCByYXJlbHkoaXNNYXJrZWRBbmROb3RSZW1lbWJlcmVk
KSk7Ci0KLSAgICAgICAgLy8gQXBwZW5kIHRvIHRoZSB3cml0ZSBiYXJyaWVyIGJ1ZmZlci4KLSAg
ICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhpc01hcmtlZEFuZE5v
dFJlbWVtYmVyZWQsIGJ1ZmZlckhhc1NwYWNlKTsKLSAgICAgICAgTFZhbHVlIGN1cnJlbnRCdWZm
ZXJJbmRleCA9IG1fb3V0LmxvYWQzMihtX291dC5hYnNvbHV0ZSh2bSgpLmhlYXAud3JpdGVCYXJy
aWVyQnVmZmVyKCkuY3VycmVudEluZGV4QWRkcmVzcygpKSk7Ci0gICAgICAgIExWYWx1ZSBidWZm
ZXJDYXBhY2l0eSA9IG1fb3V0LmNvbnN0SW50MzIodm0oKS5oZWFwLndyaXRlQmFycmllckJ1ZmZl
cigpLmNhcGFjaXR5KCkpOwogICAgICAgICBtX291dC5icmFuY2goCi0gICAgICAgICAgICBtX291
dC5sZXNzVGhhbihjdXJyZW50QnVmZmVySW5kZXgsIGJ1ZmZlckNhcGFjaXR5KSwKLSAgICAgICAg
ICAgIHVzdWFsbHkoYnVmZmVySGFzU3BhY2UpLCByYXJlbHkoYnVmZmVySXNGdWxsKSk7CisgICAg
ICAgICAgICBtX291dC5ub3RaZXJvOChsb2FkQ2VsbFN0YXRlKGJhc2UpKSwgdXN1YWxseShjb250
aW51YXRpb24pLCByYXJlbHkoc2xvd1BhdGgpKTsKIAotICAgICAgICAvLyBCdWZmZXIgaGFzIHNw
YWNlLCBzdG9yZSB0byBpdC4KLSAgICAgICAgbV9vdXQuYXBwZW5kVG8oYnVmZmVySGFzU3BhY2Us
IGJ1ZmZlcklzRnVsbCk7Ci0gICAgICAgIExWYWx1ZSB3cml0ZUJhcnJpZXJCdWZmZXJCYXNlID0g
bV9vdXQuY29uc3RJbnRQdHIodm0oKS5oZWFwLndyaXRlQmFycmllckJ1ZmZlcigpLmJ1ZmZlcigp
KTsKLSAgICAgICAgbV9vdXQuc3RvcmVQdHIoYmFzZSwgbV9vdXQuYmFzZUluZGV4KG1faGVhcHMu
V3JpdGVCYXJyaWVyQnVmZmVyX2J1ZmZlckNvbnRlbnRzLCB3cml0ZUJhcnJpZXJCdWZmZXJCYXNl
LCBtX291dC56ZXJvRXh0UHRyKGN1cnJlbnRCdWZmZXJJbmRleCkpKTsKLSAgICAgICAgbV9vdXQu
c3RvcmUzMihtX291dC5hZGQoY3VycmVudEJ1ZmZlckluZGV4LCBtX291dC5jb25zdEludDMyKDEp
KSwgbV9vdXQuYWJzb2x1dGUodm0oKS5oZWFwLndyaXRlQmFycmllckJ1ZmZlcigpLmN1cnJlbnRJ
bmRleEFkZHJlc3MoKSkpOwotICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAg
ICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oc2xvd1BhdGgsIGNvbnRp
bnVhdGlvbik7CiAKLSAgICAgICAgLy8gQnVmZmVyIGlzIG91dCBvZiBzcGFjZSwgZmx1c2ggaXQu
Ci0gICAgICAgIG1fb3V0LmFwcGVuZFRvKGJ1ZmZlcklzRnVsbCwgY29udGludWF0aW9uKTsKLSAg
ICAgICAgdm1DYWxsTm9FeGNlcHRpb25zKG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25GbHVzaFdy
aXRlQmFycmllckJ1ZmZlciksIG1fY2FsbEZyYW1lLCBiYXNlKTsKKyAgICAgICAgLy8gV2UgZW1p
dCB0aGUgc3RvcmUgYmFycmllciBzbG93IHBhdGggbGF6aWx5LiBJbiBhIGxvdCBvZiBjYXNlcywg
dGhpcyB3aWxsIG5ldmVyIGZpcmUuIEFuZAorICAgICAgICAvLyB3aGVuIGl0IGRvZXMgZmlyZSwg
aXQgbWFrZXMgc2Vuc2UgZm9yIHVzIHRvIGdlbmVyYXRlIHRoaXMgY29kZSB1c2luZyBvdXIgSklU
IHJhdGhlciB0aGFuCisgICAgICAgIC8vIHdhc3RpbmcgTExWTSdzIHRpbWUgb3B0aW1pemluZyBp
dC4KKyAgICAgICAgbGF6eVNsb3dQYXRoKAorICAgICAgICAgICAgWz1dIChjb25zdCBWZWN0b3I8
TG9jYXRpb24+JiBsb2NhdGlvbnMpIC0+IFJlZlB0cjxMYXp5U2xvd1BhdGg6OkdlbmVyYXRvcj4g
eworICAgICAgICAgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gbG9jYXRpb25zWzFdLmRpcmVjdEdQ
UigpOworCisgICAgICAgICAgICAgICAgcmV0dXJuIExhenlTbG93UGF0aDo6Y3JlYXRlR2VuZXJh
dG9yKAorICAgICAgICAgICAgICAgICAgICBbPV0gKENDYWxsSGVscGVycyYgaml0LCBMYXp5U2xv
d1BhdGg6OkdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICAgICAgICAgICAgICAg
ICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVycyA9IHBhcmFtcy5sYXp5U2xvd1BhdGgtPnVzZWRS
ZWdpc3RlcnMoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9j
YXRvciBzY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IodXNlZFJlZ2lzdGVycyk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBzY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IubG9jayhiYXNlR1BSKTsKKwor
ICAgICAgICAgICAgICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2gxID0gc2NyYXRjaFJlZ2lzdGVy
QWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOworICAgICAgICAgICAgICAgICAgICAgICAg
R1BSUmVnIHNjcmF0Y2gyID0gc2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRj
aEdQUigpOworCisgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBieXRlc1B1c2hlZCA9
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLnBy
ZXNlcnZlUmV1c2VkUmVnaXN0ZXJzQnlQdXNoaW5nKGppdCk7CisKKyAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIFdlJ3ZlIGFscmVhZHkgc2F2ZWQgdGhlc2UsIHNvIHdoZW4gd2UgbWFrZSBhIHNs
b3cgcGF0aCBjYWxsLCB3ZSBkb24ndCBoYXZlCisgICAgICAgICAgICAgICAgICAgICAgICAvLyB0
byBzYXZlIHRoZW0gYWdhaW4uCisgICAgICAgICAgICAgICAgICAgICAgICB1c2VkUmVnaXN0ZXJz
LmV4Y2x1ZGUoUmVnaXN0ZXJTZXQoc2NyYXRjaDEsIHNjcmF0Y2gyKSk7CisKKyAgICAgICAgICAg
ICAgICAgICAgICAgIFdyaXRlQmFycmllckJ1ZmZlciYgd3JpdGVCYXJyaWVyQnVmZmVyID0gaml0
LnZtKCktPmhlYXAud3JpdGVCYXJyaWVyQnVmZmVyKCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBqaXQubG9hZDMyKHdyaXRlQmFycmllckJ1ZmZlci5jdXJyZW50SW5kZXhBZGRyZXNzKCksIHNj
cmF0Y2gyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBuZWVk
VG9GbHVzaCA9IGppdC5icmFuY2gzMigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQ2Fs
bEhlbHBlcnM6OkFib3ZlT3JFcXVhbCwgc2NyYXRjaDIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIod3JpdGVCYXJyaWVyQnVmZmVyLmNhcGFj
aXR5KCkpKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgaml0LmFkZDMyKENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbTMyKDEpLCBzY3JhdGNoMik7CisgICAgICAgICAgICAgICAgICAgICAgICBq
aXQuc3RvcmUzMihzY3JhdGNoMiwgd3JpdGVCYXJyaWVyQnVmZmVyLmN1cnJlbnRJbmRleEFkZHJl
c3MoKSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbVB0cih3cml0ZUJhcnJpZXJCdWZmZXIuYnVmZmVyKCkpLCBzY3JhdGNoMSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBqaXQuc3RvcmVQdHIoCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYmFzZUdQUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBl
cnM6OkJhc2VJbmRleCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NyYXRjaDEs
IHNjcmF0Y2gyLCBDQ2FsbEhlbHBlcnM6OlNjYWxlUHRyLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQzMl90Pigtc2l6ZW9mKHZvaWQqKSkpKTsKKworICAg
ICAgICAgICAgICAgICAgICAgICAgc2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLnJlc3RvcmVSZXVz
ZWRSZWdpc3RlcnNCeVBvcHBpbmcoaml0LCBieXRlc1B1c2hlZCk7CisKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHBhcmFtcy5kb25lSnVtcHMuYXBwZW5kKGppdC5qdW1wKCkpOworCisgICAgICAg
ICAgICAgICAgICAgICAgICBuZWVkVG9GbHVzaC5saW5rKCZqaXQpOworICAgICAgICAgICAgICAg
ICAgICAgICAgY2FsbE9wZXJhdGlvbigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2Vk
UmVnaXN0ZXJzLCBqaXQsIHBhcmFtcy5sYXp5U2xvd1BhdGgtPmNhbGxTaXRlSW5kZXgoKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMuZXhjZXB0aW9uSnVtcHMsIG9wZXJhdGlv
bkZsdXNoV3JpdGVCYXJyaWVyQnVmZmVyLCBJbnZhbGlkR1BSUmVnLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJhc2VHUFIpOworICAgICAgICAgICAgICAgICAgICAgICAgc2NyYXRjaFJl
Z2lzdGVyQWxsb2NhdG9yLnJlc3RvcmVSZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmcoaml0LCBieXRl
c1B1c2hlZCk7CisgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMuZG9uZUp1bXBzLmFwcGVu
ZChqaXQuanVtcCgpKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9LAor
ICAgICAgICAgICAgYmFzZSk7CiAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKIAog
ICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMTkw
ODQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPcGVyYXRpb25zLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzAsNiArMzAsOCBAQAogCiAjaW5jbHVkZSAiQ2xvbmVkQXJndW1lbnRz
LmgiCiAjaW5jbHVkZSAiRGlyZWN0QXJndW1lbnRzLmgiCisjaW5jbHVkZSAiRlRMSklUQ29kZS5o
IgorI2luY2x1ZGUgIkZUTExhenlTbG93UGF0aC5oIgogI2luY2x1ZGUgIklubGluZUNhbGxGcmFt
ZS5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJKU0xleGljYWxFbnZpcm9u
bWVudC5oIgpAQCAtMzU3LDYgKzM1OSwyMiBAQCBleHRlcm4gIkMiIEpTQ2VsbCogSklUX09QRVJB
VElPTiBvcGVyYXRpCiAgICAgfQogfQogCitleHRlcm4gIkMiIHZvaWQqIEpJVF9PUEVSQVRJT04g
Y29tcGlsZUZUTExhenlTbG93UGF0aChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGluZGV4KQor
eworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisKKyAgICAvLyBXZSBjYW5ub3QgR0MuIFdlJ3Zl
IGdvdCBwb2ludGVycyBpbiBldmlsIHBsYWNlcy4KKyAgICBEZWZlckdDRm9yQVdoaWxlIGRlZmVy
R0Modm0uaGVhcCk7CisKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9j
aygpOworICAgIEpJVENvZGUqIGppdENvZGUgPSBjb2RlQmxvY2stPmppdENvZGUoKS0+ZnRsKCk7
CisKKyAgICBMYXp5U2xvd1BhdGgmIGxhenlTbG93UGF0aCA9ICpqaXRDb2RlLT5sYXp5U2xvd1Bh
dGhzW2luZGV4XTsKKyAgICBsYXp5U2xvd1BhdGguZ2VuZXJhdGUoY29kZUJsb2NrKTsKKworICAg
IHJldHVybiBsYXp5U2xvd1BhdGguc3R1YigpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpOwor
fQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCiAKICNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJ
VCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3BlcmF0aW9ucy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3BlcmF0aW9ucy5oCShyZXZp
c2lvbiAxOTA4NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9wZXJhdGlvbnMu
aAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsOCBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIEZUTCB7CiAKK2NsYXNzIExhenlTbG93UGF0aDsKKwogZXh0ZXJuICJDIiB7CiAKIEpT
Q2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdPYmplY3RXaXRoQnV0dGVyZmx5KEV4ZWNT
dGF0ZSosIFN0cnVjdHVyZSopIFdURl9JTlRFUk5BTDsKQEAgLTQzLDYgKzQ1LDggQEAgSlNDZWxs
KiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk1hdGVyaWFsaQogdm9pZCBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvblBvcHVsYXRlT2JqZWN0SW5PU1IoCiAgICAgRXhlY1N0YXRlKiwgRXhpdFRpbWVPYmpl
Y3RNYXRlcmlhbGl6YXRpb24qLCBFbmNvZGVkSlNWYWx1ZSosIEVuY29kZWRKU1ZhbHVlKikgV1RG
X0lOVEVSTkFMOwogCit2b2lkKiBKSVRfT1BFUkFUSU9OIGNvbXBpbGVGVExMYXp5U2xvd1BhdGgo
RXhlY1N0YXRlKiwgdW5zaWduZWQpIFdURl9JTlRFUk5BTDsKKwogfSAvLyBleHRlcm4gIkMiCiAK
IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMU2xvd1BhdGhDYWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTFNsb3dQYXRoQ2FsbC5jcHAJKHJldmlzaW9uIDE5MDg0MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMU2xvd1BhdGhDYWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0zMCwxODggKzMwLDExNiBAQAogCiAjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCiAjaW5jbHVk
ZSAiRlRMU3RhdGUuaCIKKyNpbmNsdWRlICJGVExUaHVua3MuaCIKICNpbmNsdWRlICJHUFJJbmZv
LmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEZUTCB7CiAKLW5hbWVzcGFjZSB7Ci0KIC8vIFRoaXMgY29kZSByZWxpZXMgb24gdXMgYmVpbmcg
NjQtYml0LiBGVEwgaXMgY3VycmVudGx5IGFsd2F5cyA2NC1iaXQuCiBzdGF0aWMgY29uc3Qgc2l6
ZV90IHdvcmRTaXplID0gODsKIAotLy8gVGhpcyB3aWxsIGJlIGFuIFJBSUkgdGhpbmd5IHRoYXQg
d2lsbCBzZXQgdXAgdGhlIG5lY2Vzc2FyeSBzdGFjayBzaXplcyBhbmQgb2Zmc2V0cyBhbmQgc3Vj
aC4KLWNsYXNzIENhbGxDb250ZXh0IHsKLXB1YmxpYzoKLSAgICBDYWxsQ29udGV4dCgKLSAgICAg
ICAgU3RhdGUmIHN0YXRlLCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywgQ0NhbGxI
ZWxwZXJzJiBqaXQsCi0gICAgICAgIHVuc2lnbmVkIG51bUFyZ3MsIEdQUlJlZyByZXR1cm5SZWdp
c3RlcikKLSAgICAgICAgOiBtX3N0YXRlKHN0YXRlKQotICAgICAgICAsIG1fdXNlZFJlZ2lzdGVy
cyh1c2VkUmVnaXN0ZXJzKQotICAgICAgICAsIG1faml0KGppdCkKLSAgICAgICAgLCBtX251bUFy
Z3MobnVtQXJncykKLSAgICAgICAgLCBtX3JldHVyblJlZ2lzdGVyKHJldHVyblJlZ2lzdGVyKQot
ICAgIHsKLSAgICAgICAgLy8gV2UgZG9uJ3QgY2FyZSB0aGF0IHlvdSdyZSB1c2luZyBjYWxsZWUt
c2F2ZSwgc3RhY2ssIG9yIGhhcmR3YXJlIHJlZ2lzdGVycy4KLSAgICAgICAgbV91c2VkUmVnaXN0
ZXJzLmV4Y2x1ZGUoUmVnaXN0ZXJTZXQ6OnN0YWNrUmVnaXN0ZXJzKCkpOwotICAgICAgICBtX3Vz
ZWRSZWdpc3RlcnMuZXhjbHVkZShSZWdpc3RlclNldDo6cmVzZXJ2ZWRIYXJkd2FyZVJlZ2lzdGVy
cygpKTsKLSAgICAgICAgbV91c2VkUmVnaXN0ZXJzLmV4Y2x1ZGUoUmVnaXN0ZXJTZXQ6OmNhbGxl
ZVNhdmVSZWdpc3RlcnMoKSk7Ci0gICAgICAgIAotICAgICAgICAvLyBUaGUgcmV0dXJuIHJlZ2lz
dGVyIGRvZXNuJ3QgbmVlZCB0byBiZSBzYXZlZC4KLSAgICAgICAgaWYgKG1fcmV0dXJuUmVnaXN0
ZXIgIT0gSW52YWxpZEdQUlJlZykKLSAgICAgICAgICAgIG1fdXNlZFJlZ2lzdGVycy5jbGVhciht
X3JldHVyblJlZ2lzdGVyKTsKLSAgICAgICAgCi0gICAgICAgIHNpemVfdCBzdGFja0J5dGVzTmVl
ZGVkRm9yUmV0dXJuQWRkcmVzcyA9IHdvcmRTaXplOwotICAgICAgICAKLSAgICAgICAgbV9vZmZz
ZXRUb1NhdmluZ0FyZWEgPQotICAgICAgICAgICAgKHN0ZDo6bWF4KG1fbnVtQXJncywgTlVNQkVS
X09GX0FSR1VNRU5UX1JFR0lTVEVSUykgLSBOVU1CRVJfT0ZfQVJHVU1FTlRfUkVHSVNURVJTKSAq
IHdvcmRTaXplOwotICAgICAgICAKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gc3RkOjptaW4o
TlVNQkVSX09GX0FSR1VNRU5UX1JFR0lTVEVSUywgbnVtQXJncyk7IGktLTspCi0gICAgICAgICAg
ICBtX2FyZ3VtZW50UmVnaXN0ZXJzLnNldChHUFJJbmZvOjp0b0FyZ3VtZW50UmVnaXN0ZXIoaSkp
OwotICAgICAgICBtX2NhbGxpbmdDb252ZW50aW9uUmVnaXN0ZXJzLm1lcmdlKG1fYXJndW1lbnRS
ZWdpc3RlcnMpOwotICAgICAgICBpZiAocmV0dXJuUmVnaXN0ZXIgIT0gSW52YWxpZEdQUlJlZykK
LSAgICAgICAgICAgIG1fY2FsbGluZ0NvbnZlbnRpb25SZWdpc3RlcnMuc2V0KEdQUkluZm86OnJl
dHVyblZhbHVlR1BSKTsKLSAgICAgICAgbV9jYWxsaW5nQ29udmVudGlvblJlZ2lzdGVycy5maWx0
ZXIobV91c2VkUmVnaXN0ZXJzKTsKLSAgICAgICAgCi0gICAgICAgIHVuc2lnbmVkIG51bWJlck9m
Q2FsbGluZ0NvbnZlbnRpb25SZWdpc3RlcnMgPQotICAgICAgICAgICAgbV9jYWxsaW5nQ29udmVu
dGlvblJlZ2lzdGVycy5udW1iZXJPZlNldFJlZ2lzdGVycygpOwotICAgICAgICAKLSAgICAgICAg
c2l6ZV90IG9mZnNldFRvVGh1bmtTYXZpbmdBcmVhID0KLSAgICAgICAgICAgIG1fb2Zmc2V0VG9T
YXZpbmdBcmVhICsKLSAgICAgICAgICAgIG51bWJlck9mQ2FsbGluZ0NvbnZlbnRpb25SZWdpc3Rl
cnMgKiB3b3JkU2l6ZTsKLSAgICAgICAgCi0gICAgICAgIG1fc3RhY2tCeXRlc05lZWRlZCA9Ci0g
ICAgICAgICAgICBvZmZzZXRUb1RodW5rU2F2aW5nQXJlYSArCi0gICAgICAgICAgICBzdGFja0J5
dGVzTmVlZGVkRm9yUmV0dXJuQWRkcmVzcyArCi0gICAgICAgICAgICAobV91c2VkUmVnaXN0ZXJz
Lm51bWJlck9mU2V0UmVnaXN0ZXJzKCkgLSBudW1iZXJPZkNhbGxpbmdDb252ZW50aW9uUmVnaXN0
ZXJzKSAqIHdvcmRTaXplOwotICAgICAgICAKLSAgICAgICAgbV9zdGFja0J5dGVzTmVlZGVkID0g
KG1fc3RhY2tCeXRlc05lZWRlZCArIHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSAtIDEpICYgfihzdGFj
a0FsaWdubWVudEJ5dGVzKCkgLSAxKTsKLSAgICAgICAgCi0gICAgICAgIG1faml0LnN1YlB0cihD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihtX3N0YWNrQnl0ZXNOZWVkZWQpLCBDQ2FsbEhlbHBl
cnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKLSAgICAgICAgCi0gICAgICAgIG1fdGh1bmtTYXZl
U2V0ID0gbV91c2VkUmVnaXN0ZXJzOwotICAgICAgICAKLSAgICAgICAgLy8gVGhpcyByZWxpZXMg
b24gYWxsIGNhbGxpbmcgY29udmVudGlvbiByZWdpc3RlcnMgYWxzbyBiZWluZyB0ZW1wIHJlZ2lz
dGVycy4KLSAgICAgICAgdW5zaWduZWQgc3RhY2tJbmRleCA9IDA7Ci0gICAgICAgIGZvciAodW5z
aWduZWQgaSA9IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyBpLS07KSB7Ci0gICAgICAgICAg
ICBHUFJSZWcgcmVnID0gR1BSSW5mbzo6dG9SZWdpc3RlcihpKTsKLSAgICAgICAgICAgIGlmICgh
bV9jYWxsaW5nQ29udmVudGlvblJlZ2lzdGVycy5nZXQocmVnKSkKLSAgICAgICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKHJlZywgQ0NhbGxIZWxwZXJzOjpB
ZGRyZXNzKENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIG1fb2Zmc2V0VG9TYXZp
bmdBcmVhICsgKHN0YWNrSW5kZXgrKykgKiB3b3JkU2l6ZSkpOwotICAgICAgICAgICAgbV90aHVu
a1NhdmVTZXQuY2xlYXIocmVnKTsKLSAgICAgICAgfQorU2xvd1BhdGhDYWxsQ29udGV4dDo6U2xv
d1BhdGhDYWxsQ29udGV4dCgKKyAgICBSZWdpc3RlclNldCB1c2VkUmVnaXN0ZXJzLCBDQ2FsbEhl
bHBlcnMmIGppdCwgdW5zaWduZWQgbnVtQXJncywgR1BSUmVnIHJldHVyblJlZ2lzdGVyKQorICAg
IDogbV9qaXQoaml0KQorICAgICwgbV9udW1BcmdzKG51bUFyZ3MpCisgICAgLCBtX3JldHVyblJl
Z2lzdGVyKHJldHVyblJlZ2lzdGVyKQoreworICAgIC8vIFdlIGRvbid0IGNhcmUgdGhhdCB5b3Un
cmUgdXNpbmcgY2FsbGVlLXNhdmUsIHN0YWNrLCBvciBoYXJkd2FyZSByZWdpc3RlcnMuCisgICAg
dXNlZFJlZ2lzdGVycy5leGNsdWRlKFJlZ2lzdGVyU2V0OjpzdGFja1JlZ2lzdGVycygpKTsKKyAg
ICB1c2VkUmVnaXN0ZXJzLmV4Y2x1ZGUoUmVnaXN0ZXJTZXQ6OnJlc2VydmVkSGFyZHdhcmVSZWdp
c3RlcnMoKSk7CisgICAgdXNlZFJlZ2lzdGVycy5leGNsdWRlKFJlZ2lzdGVyU2V0OjpjYWxsZWVT
YXZlUmVnaXN0ZXJzKCkpOwogICAgICAgICAKLSAgICAgICAgbV9vZmZzZXQgPSBvZmZzZXRUb1Ro
dW5rU2F2aW5nQXJlYTsKLSAgICB9Ci0gICAgCi0gICAgfkNhbGxDb250ZXh0KCkKLSAgICB7Ci0g
ICAgICAgIGlmIChtX3JldHVyblJlZ2lzdGVyICE9IEludmFsaWRHUFJSZWcpCi0gICAgICAgICAg
ICBtX2ppdC5tb3ZlKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBtX3JldHVyblJlZ2lzdGVyKTsK
LSAgICAgICAgCi0gICAgICAgIHVuc2lnbmVkIHN0YWNrSW5kZXggPSAwOwotICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgaS0tOykgewotICAgICAg
ICAgICAgR1BSUmVnIHJlZyA9IEdQUkluZm86OnRvUmVnaXN0ZXIoaSk7Ci0gICAgICAgICAgICBp
ZiAoIW1fY2FsbGluZ0NvbnZlbnRpb25SZWdpc3RlcnMuZ2V0KHJlZykpCi0gICAgICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgICAgICBtX2ppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRk
cmVzcyhDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBtX29mZnNldFRvU2F2aW5n
QXJlYSArIChzdGFja0luZGV4KyspICogd29yZFNpemUpLCByZWcpOwotICAgICAgICB9CisgICAg
Ly8gVGhlIHJldHVybiByZWdpc3RlciBkb2Vzbid0IG5lZWQgdG8gYmUgc2F2ZWQuCisgICAgaWYg
KG1fcmV0dXJuUmVnaXN0ZXIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgdXNlZFJlZ2lzdGVy
cy5jbGVhcihtX3JldHVyblJlZ2lzdGVyKTsKICAgICAgICAgCi0gICAgICAgIG1faml0LmFkZFB0
cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihtX3N0YWNrQnl0ZXNOZWVkZWQpLCBDQ2FsbEhl
bHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKLSAgICB9Ci0gICAgCi0gICAgUmVnaXN0ZXJT
ZXQgdXNlZFJlZ2lzdGVycygpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV90aHVua1Nh
dmVTZXQ7Ci0gICAgfQotICAgIAotICAgIHB0cmRpZmZfdCBvZmZzZXQoKSBjb25zdAotICAgIHsK
LSAgICAgICAgcmV0dXJuIG1fb2Zmc2V0OworICAgIHNpemVfdCBzdGFja0J5dGVzTmVlZGVkRm9y
UmV0dXJuQWRkcmVzcyA9IHdvcmRTaXplOworICAgICAgICAKKyAgICBtX29mZnNldFRvU2F2aW5n
QXJlYSA9CisgICAgICAgIChzdGQ6Om1heChtX251bUFyZ3MsIE5VTUJFUl9PRl9BUkdVTUVOVF9S
RUdJU1RFUlMpIC0gTlVNQkVSX09GX0FSR1VNRU5UX1JFR0lTVEVSUykgKiB3b3JkU2l6ZTsKKyAg
ICAgICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0gc3RkOjptaW4oTlVNQkVSX09GX0FSR1VNRU5U
X1JFR0lTVEVSUywgbnVtQXJncyk7IGktLTspCisgICAgICAgIG1fYXJndW1lbnRSZWdpc3RlcnMu
c2V0KEdQUkluZm86OnRvQXJndW1lbnRSZWdpc3RlcihpKSk7CisgICAgbV9jYWxsaW5nQ29udmVu
dGlvblJlZ2lzdGVycy5tZXJnZShtX2FyZ3VtZW50UmVnaXN0ZXJzKTsKKyAgICBpZiAocmV0dXJu
UmVnaXN0ZXIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgbV9jYWxsaW5nQ29udmVudGlvblJl
Z2lzdGVycy5zZXQoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAgIG1fY2FsbGluZ0NvbnZl
bnRpb25SZWdpc3RlcnMuZmlsdGVyKHVzZWRSZWdpc3RlcnMpOworICAgICAgICAKKyAgICB1bnNp
Z25lZCBudW1iZXJPZkNhbGxpbmdDb252ZW50aW9uUmVnaXN0ZXJzID0KKyAgICAgICAgbV9jYWxs
aW5nQ29udmVudGlvblJlZ2lzdGVycy5udW1iZXJPZlNldFJlZ2lzdGVycygpOworICAgICAgICAK
KyAgICBzaXplX3Qgb2Zmc2V0VG9UaHVua1NhdmluZ0FyZWEgPQorICAgICAgICBtX29mZnNldFRv
U2F2aW5nQXJlYSArCisgICAgICAgIG51bWJlck9mQ2FsbGluZ0NvbnZlbnRpb25SZWdpc3RlcnMg
KiB3b3JkU2l6ZTsKKyAgICAgICAgCisgICAgbV9zdGFja0J5dGVzTmVlZGVkID0KKyAgICAgICAg
b2Zmc2V0VG9UaHVua1NhdmluZ0FyZWEgKworICAgICAgICBzdGFja0J5dGVzTmVlZGVkRm9yUmV0
dXJuQWRkcmVzcyArCisgICAgICAgICh1c2VkUmVnaXN0ZXJzLm51bWJlck9mU2V0UmVnaXN0ZXJz
KCkgLSBudW1iZXJPZkNhbGxpbmdDb252ZW50aW9uUmVnaXN0ZXJzKSAqIHdvcmRTaXplOworICAg
ICAgICAKKyAgICBtX3N0YWNrQnl0ZXNOZWVkZWQgPSAobV9zdGFja0J5dGVzTmVlZGVkICsgc3Rh
Y2tBbGlnbm1lbnRCeXRlcygpIC0gMSkgJiB+KHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSAtIDEpOwor
ICAgICAgICAKKyAgICBtX2ppdC5zdWJQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIobV9z
dGFja0J5dGVzTmVlZGVkKSwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisK
KyAgICBtX3RodW5rU2F2ZVNldCA9IHVzZWRSZWdpc3RlcnM7CisgICAgICAgIAorICAgIC8vIFRo
aXMgcmVsaWVzIG9uIGFsbCBjYWxsaW5nIGNvbnZlbnRpb24gcmVnaXN0ZXJzIGFsc28gYmVpbmcg
dGVtcCByZWdpc3RlcnMuCisgICAgdW5zaWduZWQgc3RhY2tJbmRleCA9IDA7CisgICAgZm9yICh1
bnNpZ25lZCBpID0gR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7IGktLTspIHsKKyAgICAgICAg
R1BSUmVnIHJlZyA9IEdQUkluZm86OnRvUmVnaXN0ZXIoaSk7CisgICAgICAgIGlmICghbV9jYWxs
aW5nQ29udmVudGlvblJlZ2lzdGVycy5nZXQocmVnKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICBtX2ppdC5zdG9yZVB0cihyZWcsIENDYWxsSGVscGVyczo6QWRkcmVzcyhDQ2FsbEhl
bHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBtX29mZnNldFRvU2F2aW5nQXJlYSArIChzdGFj
a0luZGV4KyspICogd29yZFNpemUpKTsKKyAgICAgICAgbV90aHVua1NhdmVTZXQuY2xlYXIocmVn
KTsKICAgICB9CisgICAgICAgIAorICAgIG1fb2Zmc2V0ID0gb2Zmc2V0VG9UaHVua1NhdmluZ0Fy
ZWE7Cit9CiAgICAgCi0gICAgU2xvd1BhdGhDYWxsS2V5IGtleVdpdGhUYXJnZXQodm9pZCogY2Fs
bFRhcmdldCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBTbG93UGF0aENhbGxLZXkodXNl
ZFJlZ2lzdGVycygpLCBjYWxsVGFyZ2V0LCBtX2FyZ3VtZW50UmVnaXN0ZXJzLCBvZmZzZXQoKSk7
Ci0gICAgfQorU2xvd1BhdGhDYWxsQ29udGV4dDo6flNsb3dQYXRoQ2FsbENvbnRleHQoKQorewor
ICAgIGlmIChtX3JldHVyblJlZ2lzdGVyICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIG1faml0
Lm1vdmUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIG1fcmV0dXJuUmVnaXN0ZXIpOwogICAgIAot
ICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIG1ha2VDYWxsKHZvaWQqIGNhbGxUYXJnZXQsIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wTGlzdCogZXhjZXB0aW9uVGFyZ2V0KQotICAgIHsKLSAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OkNhbGwgcmVzdWx0ID0gbV9qaXQuY2FsbCgpOwotICAgICAgICBtX3N0YXRl
LmZpbmFsaXplci0+c2xvd1BhdGhDYWxscy5hcHBlbmQoU2xvd1BhdGhDYWxsKAotICAgICAgICAg
ICAgcmVzdWx0LCBrZXlXaXRoVGFyZ2V0KGNhbGxUYXJnZXQpKSk7Ci0gICAgICAgIGlmIChleGNl
cHRpb25UYXJnZXQpCi0gICAgICAgICAgICBleGNlcHRpb25UYXJnZXQtPmFwcGVuZChtX2ppdC5l
bWl0RXhjZXB0aW9uQ2hlY2soKSk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgdW5zaWdu
ZWQgc3RhY2tJbmRleCA9IDA7CisgICAgZm9yICh1bnNpZ25lZCBpID0gR1BSSW5mbzo6bnVtYmVy
T2ZSZWdpc3RlcnM7IGktLTspIHsKKyAgICAgICAgR1BSUmVnIHJlZyA9IEdQUkluZm86OnRvUmVn
aXN0ZXIoaSk7CisgICAgICAgIGlmICghbV9jYWxsaW5nQ29udmVudGlvblJlZ2lzdGVycy5nZXQo
cmVnKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBtX2ppdC5sb2FkUHRyKENDYWxs
SGVscGVyczo6QWRkcmVzcyhDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBtX29m
ZnNldFRvU2F2aW5nQXJlYSArIChzdGFja0luZGV4KyspICogd29yZFNpemUpLCByZWcpOwogICAg
IH0KICAgICAKLXByaXZhdGU6Ci0gICAgU3RhdGUmIG1fc3RhdGU7Ci0gICAgUmVnaXN0ZXJTZXQg
bV91c2VkUmVnaXN0ZXJzOwotICAgIFJlZ2lzdGVyU2V0IG1fYXJndW1lbnRSZWdpc3RlcnM7Ci0g
ICAgUmVnaXN0ZXJTZXQgbV9jYWxsaW5nQ29udmVudGlvblJlZ2lzdGVyczsKLSAgICBDQ2FsbEhl
bHBlcnMmIG1faml0OwotICAgIHVuc2lnbmVkIG1fbnVtQXJnczsKLSAgICBHUFJSZWcgbV9yZXR1
cm5SZWdpc3RlcjsKLSAgICBzaXplX3QgbV9vZmZzZXRUb1NhdmluZ0FyZWE7Ci0gICAgc2l6ZV90
IG1fc3RhY2tCeXRlc05lZWRlZDsKLSAgICBSZWdpc3RlclNldCBtX3RodW5rU2F2ZVNldDsKLSAg
ICBwdHJkaWZmX3QgbV9vZmZzZXQ7Ci19OwotCi19IC8vIGFub255bW91cyBuYW1lc3BhY2UKLQot
dm9pZCBzdG9yZUNvZGVPcmlnaW4oU3RhdGUmIHN0YXRlLCBDQ2FsbEhlbHBlcnMmIGppdCwgQ29k
ZU9yaWdpbiBjb2RlT3JpZ2luKQotewotICAgIGlmICghY29kZU9yaWdpbi5pc1NldCgpKQotICAg
ICAgICByZXR1cm47Ci0gICAgCi0gICAgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZSA9IHN0YXRlLmpp
dENvZGUtPmNvbW1vbi5hZGRDb2RlT3JpZ2luKGNvZGVPcmlnaW4pOwotICAgIHVuc2lnbmVkIGxv
Y2F0aW9uQml0cyA9IGNhbGxTaXRlLmJpdHMoKTsKLSAgICBqaXQuc3RvcmUzMigKLSAgICAgICAg
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIobG9jYXRpb25CaXRzKSwKLSAgICAgICAgQ0NhbGxI
ZWxwZXJzOjp0YWdGb3Ioc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihKU1N0YWNrOjpBcmd1
bWVudENvdW50KSkpOworICAgIG1faml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0z
MihtX3N0YWNrQnl0ZXNOZWVkZWQpLCBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVy
KTsKIH0KIAotTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbigKLSAgICBTdGF0ZSYg
c3RhdGUsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLCBDQ2FsbEhlbHBlcnMmIGpp
dCwKLSAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCog
ZXhjZXB0aW9uVGFyZ2V0LAotICAgIEpfSklUT3BlcmF0aW9uX0VTc2lDSSBvcGVyYXRpb24sIEdQ
UlJlZyByZXN1bHQsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywKLSAgICBHUFJSZWcgb2Jq
ZWN0LCBjb25zdCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQorU2xvd1BhdGhDYWxsS2V5IFNsb3dQ
YXRoQ2FsbENvbnRleHQ6OmtleVdpdGhUYXJnZXQodm9pZCogY2FsbFRhcmdldCkgY29uc3QKIHsK
LSAgICBzdG9yZUNvZGVPcmlnaW4oc3RhdGUsIGppdCwgY29kZU9yaWdpbik7Ci0gICAgQ2FsbENv
bnRleHQgY29udGV4dChzdGF0ZSwgdXNlZFJlZ2lzdGVycywgaml0LCA0LCByZXN1bHQpOwotICAg
IGppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoCi0gICAgICAgIENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbVB0cihzdHViSW5mbyksIG9iamVjdCwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
UHRyKHVpZCkpOwotICAgIHJldHVybiBjb250ZXh0Lm1ha2VDYWxsKGJpdHdpc2VfY2FzdDx2b2lk
Kj4ob3BlcmF0aW9uKSwgZXhjZXB0aW9uVGFyZ2V0KTsKKyAgICByZXR1cm4gU2xvd1BhdGhDYWxs
S2V5KG1fdGh1bmtTYXZlU2V0LCBjYWxsVGFyZ2V0LCBtX2FyZ3VtZW50UmVnaXN0ZXJzLCBtX29m
ZnNldCk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oCi0gICAgU3Rh
dGUmIHN0YXRlLCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywgQ0NhbGxIZWxwZXJz
JiBqaXQsCi0gICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExp
c3QqIGV4Y2VwdGlvblRhcmdldCwKLSAgICBKX0pJVE9wZXJhdGlvbl9FU3NpSkkgb3BlcmF0aW9u
LCBHUFJSZWcgcmVzdWx0LCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sCi0gICAgR1BSUmVn
IG9iamVjdCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKK1Nsb3dQYXRoQ2FsbCBTbG93UGF0aENh
bGxDb250ZXh0OjptYWtlQ2FsbCh2b2lkKiBjYWxsVGFyZ2V0KQogewotICAgIHN0b3JlQ29kZU9y
aWdpbihzdGF0ZSwgaml0LCBjb2RlT3JpZ2luKTsKLSAgICBDYWxsQ29udGV4dCBjb250ZXh0KHN0
YXRlLCB1c2VkUmVnaXN0ZXJzLCBqaXQsIDQsIHJlc3VsdCk7Ci0gICAgaml0LnNldHVwQXJndW1l
bnRzV2l0aEV4ZWNTdGF0ZSgKLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHN0
dWJJbmZvKSwgb2JqZWN0LAotICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIodWlk
KSk7Ci0gICAgcmV0dXJuIGNvbnRleHQubWFrZUNhbGwoYml0d2lzZV9jYXN0PHZvaWQqPihvcGVy
YXRpb24pLCBleGNlcHRpb25UYXJnZXQpOworICAgIFNsb3dQYXRoQ2FsbCByZXN1bHQgPSBTbG93
UGF0aENhbGwobV9qaXQuY2FsbCgpLCBrZXlXaXRoVGFyZ2V0KGNhbGxUYXJnZXQpKTsKKworICAg
IG1faml0LmFkZExpbmtUYXNrKAorICAgICAgICBbcmVzdWx0XSAoTGlua0J1ZmZlciYgbGlua0J1
ZmZlcikgeworICAgICAgICAgICAgVk0mIHZtID0gbGlua0J1ZmZlci52bSgpOworCisgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgdGh1bmsgPQorICAgICAgICAgICAgICAgIHZtLmZ0
bFRodW5rcy0+Z2V0U2xvd1BhdGhDYWxsVGh1bmsodm0sIHJlc3VsdC5rZXkoKSk7CisKKyAgICAg
ICAgICAgIGxpbmtCdWZmZXIubGluayhyZXN1bHQuY2FsbCgpLCBDb2RlTG9jYXRpb25MYWJlbCh0
aHVuay5jb2RlKCkpKTsKKyAgICAgICAgfSk7CisgICAgCisgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAotTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbigKLSAgICBTdGF0ZSYgc3RhdGUs
IGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLCBDQ2FsbEhlbHBlcnMmIGppdCwgCi0g
ICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QqIGV4Y2Vw
dGlvblRhcmdldCwKLSAgICBWX0pJVE9wZXJhdGlvbl9FU3NpSkpJIG9wZXJhdGlvbiwgU3RydWN0
dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBHUFJSZWcgdmFsdWUsCi0gICAgR1BSUmVnIG9iamVjdCwg
VW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKK0NhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleEZvckNv
ZGVPcmlnaW4oU3RhdGUmIHN0YXRlLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCiB7Ci0gICAgc3Rv
cmVDb2RlT3JpZ2luKHN0YXRlLCBqaXQsIGNvZGVPcmlnaW4pOwotICAgIENhbGxDb250ZXh0IGNv
bnRleHQoc3RhdGUsIHVzZWRSZWdpc3RlcnMsIGppdCwgNSwgSW52YWxpZEdQUlJlZyk7Ci0gICAg
aml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZSgKLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tUHRyKHN0dWJJbmZvKSwgdmFsdWUsIG9iamVjdCwKLSAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tUHRyKHVpZCkpOwotICAgIHJldHVybiBjb250ZXh0Lm1ha2VDYWxsKGJp
dHdpc2VfY2FzdDx2b2lkKj4ob3BlcmF0aW9uKSwgZXhjZXB0aW9uVGFyZ2V0KTsKKyAgICBpZiAo
Y29kZU9yaWdpbikKKyAgICAgICAgcmV0dXJuIHN0YXRlLmppdENvZGUtPmNvbW1vbi5hZGRDb2Rl
T3JpZ2luKGNvZGVPcmlnaW4pOworICAgIHJldHVybiBDYWxsU2l0ZUluZGV4KCk7CiB9CiAKIH0g
fSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMU2xvd1BhdGhDYWxsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExTbG93UGF0aENhbGwuaAkocmV2aXNpb24gMTkwODQzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExTbG93UGF0aENhbGwuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01NSwyMCAr
NTUsNzEgQEAgcHJpdmF0ZToKICAgICBTbG93UGF0aENhbGxLZXkgbV9rZXk7CiB9OwogCi12b2lk
IHN0b3JlQ29kZU9yaWdpbihTdGF0ZSYsIENDYWxsSGVscGVycyYsIENvZGVPcmlnaW4pOworLy8g
VGhpcyB3aWxsIGJlIGFuIFJBSUkgdGhpbmd5IHRoYXQgd2lsbCBzZXQgdXAgdGhlIG5lY2Vzc2Fy
eSBzdGFjayBzaXplcyBhbmQgb2Zmc2V0cyBhbmQgc3VjaC4KK2NsYXNzIFNsb3dQYXRoQ2FsbENv
bnRleHQgeworcHVibGljOgorICAgIFNsb3dQYXRoQ2FsbENvbnRleHQoUmVnaXN0ZXJTZXQgdXNl
ZFJlZ2lzdGVycywgQ0NhbGxIZWxwZXJzJiwgdW5zaWduZWQgbnVtQXJncywgR1BSUmVnIHJldHVy
blJlZ2lzdGVyKTsKKyAgICB+U2xvd1BhdGhDYWxsQ29udGV4dCgpOworCisgICAgLy8gTk9URTog
VGhlIGNhbGwgdGhhdCB0aGlzIHJldHVybnMgaXMgYWxyZWFkeSBnb2luZyB0byBiZSBsaW5rZWQg
YnkgdGhlIEpJVCB1c2luZyBhZGRMaW5rVGFzaygpLAorICAgIC8vIHNvIHRoZXJlIGlzIG5vIG5l
ZWQgZm9yIHlvdSB0byBsaW5rIGl0IHlvdXJzZWxmLgorICAgIFNsb3dQYXRoQ2FsbCBtYWtlQ2Fs
bCh2b2lkKiBjYWxsVGFyZ2V0KTsKKworcHJpdmF0ZToKKyAgICBTbG93UGF0aENhbGxLZXkga2V5
V2l0aFRhcmdldCh2b2lkKiBjYWxsVGFyZ2V0KSBjb25zdDsKKyAgICAKKyAgICBSZWdpc3RlclNl
dCBtX2FyZ3VtZW50UmVnaXN0ZXJzOworICAgIFJlZ2lzdGVyU2V0IG1fY2FsbGluZ0NvbnZlbnRp
b25SZWdpc3RlcnM7CisgICAgQ0NhbGxIZWxwZXJzJiBtX2ppdDsKKyAgICB1bnNpZ25lZCBtX251
bUFyZ3M7CisgICAgR1BSUmVnIG1fcmV0dXJuUmVnaXN0ZXI7CisgICAgc2l6ZV90IG1fb2Zmc2V0
VG9TYXZpbmdBcmVhOworICAgIHNpemVfdCBtX3N0YWNrQnl0ZXNOZWVkZWQ7CisgICAgUmVnaXN0
ZXJTZXQgbV90aHVua1NhdmVTZXQ7CisgICAgcHRyZGlmZl90IG1fb2Zmc2V0OworfTsKKwordGVt
cGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRUeXBlcz4KK1Nsb3dQYXRoQ2FsbCBjYWxsT3BlcmF0
aW9uKAorICAgIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLCBDQ2FsbEhlbHBlcnMm
IGppdCwgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCogZXhjZXB0aW9uVGFyZ2V0LAorICAgIEZ1bmN0
aW9uUHRyIGZ1bmN0aW9uLCBHUFJSZWcgcmVzdWx0R1BSLCBBcmd1bWVudFR5cGVzLi4uIGFyZ3Vt
ZW50cykKK3sKKyAgICBTbG93UGF0aENhbGwgY2FsbDsKKyAgICB7CisgICAgICAgIFNsb3dQYXRo
Q2FsbENvbnRleHQgY29udGV4dCh1c2VkUmVnaXN0ZXJzLCBqaXQsIHNpemVvZi4uLihBcmd1bWVu
dFR5cGVzKSArIDEsIHJlc3VsdEdQUik7CisgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50c1dpdGhF
eGVjU3RhdGUoYXJndW1lbnRzLi4uKTsKKyAgICAgICAgY2FsbCA9IGNvbnRleHQubWFrZUNhbGwo
ZnVuY3Rpb24udmFsdWUoKSk7CisgICAgfQorICAgIGlmIChleGNlcHRpb25UYXJnZXQpCisgICAg
ICAgIGV4Y2VwdGlvblRhcmdldC0+YXBwZW5kKGppdC5lbWl0RXhjZXB0aW9uQ2hlY2soKSk7Cisg
ICAgcmV0dXJuIGNhbGw7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50VHlwZXM+
CitTbG93UGF0aENhbGwgY2FsbE9wZXJhdGlvbigKKyAgICBjb25zdCBSZWdpc3RlclNldCYgdXNl
ZFJlZ2lzdGVycywgQ0NhbGxIZWxwZXJzJiBqaXQsIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRl
eCwKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0KiBleGNlcHRpb25UYXJnZXQsIEZ1bmN0aW9u
UHRyIGZ1bmN0aW9uLCBHUFJSZWcgcmVzdWx0R1BSLAorICAgIEFyZ3VtZW50VHlwZXMuLi4gYXJn
dW1lbnRzKQoreworICAgIGlmIChjYWxsU2l0ZUluZGV4KSB7CisgICAgICAgIGppdC5zdG9yZTMy
KAorICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoY2FsbFNpdGVJbmRleC5i
aXRzKCkpLAorICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjp0YWdGb3IoSlNTdGFjazo6QXJndW1l
bnRDb3VudCkpOworICAgIH0KKyAgICByZXR1cm4gY2FsbE9wZXJhdGlvbih1c2VkUmVnaXN0ZXJz
LCBqaXQsIGV4Y2VwdGlvblRhcmdldCwgZnVuY3Rpb24sIHJlc3VsdEdQUiwgYXJndW1lbnRzLi4u
KTsKK30KKworQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4Rm9yQ29kZU9yaWdpbihTdGF0ZSYs
IENvZGVPcmlnaW4pOwogCi1NYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKAotICAg
IFN0YXRlJiwgY29uc3QgUmVnaXN0ZXJTZXQmLCBDQ2FsbEhlbHBlcnMmLCBDb2RlT3JpZ2luLCBD
Q2FsbEhlbHBlcnM6Okp1bXBMaXN0KiwKLSAgICBKX0pJVE9wZXJhdGlvbl9FU3NpQ0ksIEdQUlJl
ZywgU3RydWN0dXJlU3R1YkluZm8qLCBHUFJSZWcsCi0gICAgY29uc3QgVW5pcXVlZFN0cmluZ0lt
cGwqIHVpZCk7Ci1NYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKAotICAgIFN0YXRl
JiwgY29uc3QgUmVnaXN0ZXJTZXQmLCBDQ2FsbEhlbHBlcnMmLCBDb2RlT3JpZ2luLCBDQ2FsbEhl
bHBlcnM6Okp1bXBMaXN0KiwKLSAgICBKX0pJVE9wZXJhdGlvbl9FU3NpSkksIEdQUlJlZyByZXN1
bHQsIFN0cnVjdHVyZVN0dWJJbmZvKiwgR1BSUmVnIG9iamVjdCwKLSAgICBVbmlxdWVkU3RyaW5n
SW1wbCogdWlkKTsKLU1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oCi0gICAgU3Rh
dGUmLCBjb25zdCBSZWdpc3RlclNldCYsIENDYWxsSGVscGVycyYsIENvZGVPcmlnaW4sIENDYWxs
SGVscGVyczo6SnVtcExpc3QqLAotICAgIFZfSklUT3BlcmF0aW9uX0VTc2lKSkksIFN0cnVjdHVy
ZVN0dWJJbmZvKiwgR1BSUmVnIHZhbHVlLCBHUFJSZWcgb2JqZWN0LAotICAgIFVuaXF1ZWRTdHJp
bmdJbXBsKiB1aWQpOwordGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRUeXBlcz4KK1Nsb3dQ
YXRoQ2FsbCBjYWxsT3BlcmF0aW9uKAorICAgIFN0YXRlJiBzdGF0ZSwgY29uc3QgUmVnaXN0ZXJT
ZXQmIHVzZWRSZWdpc3RlcnMsIENDYWxsSGVscGVycyYgaml0LCBDb2RlT3JpZ2luIGNvZGVPcmln
aW4sCisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCogZXhjZXB0aW9uVGFyZ2V0LCBGdW5jdGlv
blB0ciBmdW5jdGlvbiwgR1BSUmVnIHJlc3VsdCwgQXJndW1lbnRUeXBlcy4uLiBhcmd1bWVudHMp
Cit7CisgICAgcmV0dXJuIGNhbGxPcGVyYXRpb24oCisgICAgICAgIHVzZWRSZWdpc3RlcnMsIGpp
dCwgY2FsbFNpdGVJbmRleEZvckNvZGVPcmlnaW4oc3RhdGUsIGNvZGVPcmlnaW4pLCBleGNlcHRp
b25UYXJnZXQsIGZ1bmN0aW9uLAorICAgICAgICByZXN1bHQsIGFyZ3VtZW50cy4uLik7Cit9CiAK
IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExTdGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMU3RhdGUuaAkocmV2aXNpb24gMTkwODQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExTdGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03OCw2ICs3OCw3IEBAIHB1YmxpYzoKICAg
ICBTZWdtZW50ZWRWZWN0b3I8R2V0QnlJZERlc2NyaXB0b3I+IGdldEJ5SWRzOwogICAgIFNlZ21l
bnRlZFZlY3RvcjxQdXRCeUlkRGVzY3JpcHRvcj4gcHV0QnlJZHM7CiAgICAgU2VnbWVudGVkVmVj
dG9yPENoZWNrSW5EZXNjcmlwdG9yPiBjaGVja0luczsKKyAgICBTZWdtZW50ZWRWZWN0b3I8TGF6
eVNsb3dQYXRoRGVzY3JpcHRvcj4gbGF6eVNsb3dQYXRoczsKICAgICBWZWN0b3I8SlNDYWxsPiBq
c0NhbGxzOwogICAgIFZlY3RvcjxKU0NhbGxWYXJhcmdzPiBqc0NhbGxWYXJhcmdzZXM7CiAgICAg
VmVjdG9yPEpTVGFpbENhbGw+IGpzVGFpbENhbGxzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExUaHVua3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMVGh1bmtzLmNwcAkocmV2aXNpb24gMTkwODQzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExUaHVua3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBA
CiAjaW5jbHVkZSAiQXNzZW1ibHlIZWxwZXJzLmgiCiAjaW5jbHVkZSAiRlBSSW5mby5oIgogI2lu
Y2x1ZGUgIkZUTE9TUkV4aXRDb21waWxlci5oIgorI2luY2x1ZGUgIkZUTE9wZXJhdGlvbnMuaCIK
ICNpbmNsdWRlICJGVExTYXZlUmVzdG9yZS5oIgogI2luY2x1ZGUgIkdQUkluZm8uaCIKICNpbmNs
dWRlICJMaW5rQnVmZmVyLmgiCkBAIC0zOSwxMSArNDAsMTIgQEAgbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBGVEwgewogCiB1c2luZyBuYW1lc3BhY2UgREZHOwogCi1NYWNyb0Fzc2VtYmxlckNv
ZGVSZWYgb3NyRXhpdEdlbmVyYXRpb25UaHVua0dlbmVyYXRvcihWTSogdm0pCitzdGF0aWMgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmIGdlbmVyaWNHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3IoCisgICAg
Vk0qIHZtLCBGdW5jdGlvblB0ciBnZW5lcmF0aW9uRnVuY3Rpb24sIGNvbnN0IGNoYXIqIG5hbWUs
IHVuc2lnbmVkIGV4dHJhUG9wc1RvUmVzdG9yZSkKIHsKICAgICBBc3NlbWJseUhlbHBlcnMgaml0
KHZtLCAwKTsKICAgICAKLSAgICAvLyBOb3RlIHRoYXQgdGhlICJyZXR1cm4gYWRkcmVzcyIgd2ls
bCBiZSB0aGUgT1NSIGV4aXQgSUQuCisgICAgLy8gTm90ZSB0aGF0IHRoZSAicmV0dXJuIGFkZHJl
c3MiIHdpbGwgYmUgdGhlIElEIHRoYXQgd2UgcGFzcyB0byB0aGUgZ2VuZXJhdGlvbiBmdW5jdGlv
bi4KICAgICAKICAgICBwdHJkaWZmX3Qgc3RhY2tNaXNhbGlnbm1lbnQgPSBNYWNyb0Fzc2VtYmxl
cjo6cHVzaFRvU2F2ZUJ5dGVPZmZzZXQoKTsKICAgICAKQEAgLTkwLDExICs5MiwxNCBAQCBNYWNy
b0Fzc2VtYmxlckNvZGVSZWYgb3NyRXhpdEdlbmVyYXRpb25UCiAgICAgd2hpbGUgKG51bWJlck9m
UmVxdWlyZWRQb3BzLS0pCiAgICAgICAgIGppdC5wb3BUb1Jlc3RvcmUoR1BSSW5mbzo6cmVnVDEp
OwogICAgIGppdC5wb3BUb1Jlc3RvcmUoTWFjcm9Bc3NlbWJsZXI6OmZyYW1lUG9pbnRlclJlZ2lz
dGVyKTsKLSAgICAKLSAgICAvLyBBdCB0aGlzIHBvaW50IHdlJ3JlIHNpdHRpbmcgb24gdGhlIHJl
dHVybiBhZGRyZXNzIC0gc28gaWYgd2UgZGlkIGEganVtcCByaWdodCBub3csIHRoZQotICAgIC8v
IHRhaWwtY2FsbGVlIHdvdWxkIGJlIGhhcHB5LiBJbnN0ZWFkIHdlJ2xsIHN0YXNoIHRoZSBjYWxs
ZWUgaW4gdGhlIHJldHVybiBhZGRyZXNzIGFuZCB0aGVuCi0gICAgLy8gcmVzdG9yZSBhbGwgcmVn
aXN0ZXJzLgotICAgIAorCisgICAgLy8gV2hlbiB3ZSBjYW1lIGluIGhlcmUsIHRoZXJlIHdhcyBh
biBhZGRpdGlvbmFsIHRoaW5nIHB1c2hlZCB0byB0aGUgc3RhY2suIFNvbWUgY2xpZW50cyB3YW50
IGl0CisgICAgLy8gcG9wcGVkIGJlZm9yZSBwcm9jZWVkaW5nLgorICAgIHdoaWxlIChleHRyYVBv
cHNUb1Jlc3RvcmUtLSkKKyAgICAgICAgaml0LnBvcFRvUmVzdG9yZShHUFJJbmZvOjpyZWdUMSk7
CisKKyAgICAvLyBQdXQgdGhlIHJldHVybiBhZGRyZXNzIHdoZXJldmVyIHRoZSByZXR1cm4gaW5z
dHJ1Y3Rpb24gd2FudHMgaXQuIE9uIGFsbCBwbGF0Zm9ybXMsIHRoaXMKKyAgICAvLyBlbnN1cmVz
IHRoYXQgdGhlIHJldHVybiBhZGRyZXNzIGlzIG91dCBvZiB0aGUgd2F5IG9mIHJlZ2lzdGVyIHJl
c3RvcmF0aW9uLgogICAgIGppdC5yZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybihHUFJJ
bmZvOjpyZWdUMCk7CiAKICAgICByZXN0b3JlQWxsUmVnaXN0ZXJzKGppdCwgYnVmZmVyKTsKQEAg
LTEwMiw4ICsxMDcsMjIgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG9zckV4aXRHZW5lcmF0aW9u
VAogICAgIGppdC5yZXQoKTsKICAgICAKICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwg
aml0LCBHTE9CQUxfVEhVTktfSUQpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoZnVuY3Rpb25DYWxs
LCBjb21waWxlRlRMT1NSRXhpdCk7Ci0gICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZm
ZXIsICgiRlRMIE9TUiBleGl0IGdlbmVyYXRpb24gdGh1bmsiKSk7CisgICAgcGF0Y2hCdWZmZXIu
bGluayhmdW5jdGlvbkNhbGwsIGdlbmVyYXRpb25GdW5jdGlvbik7CisgICAgcmV0dXJuIEZJTkFM
SVpFX0NPREUocGF0Y2hCdWZmZXIsICgiJXMiLCBuYW1lKSk7Cit9CisKK01hY3JvQXNzZW1ibGVy
Q29kZVJlZiBvc3JFeGl0R2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKFZNKiB2bSkKK3sKKyAgICB1
bnNpZ25lZCBleHRyYVBvcHNUb1Jlc3RvcmUgPSAwOworICAgIHJldHVybiBnZW5lcmljR2VuZXJh
dGlvblRodW5rR2VuZXJhdG9yKAorICAgICAgICB2bSwgY29tcGlsZUZUTE9TUkV4aXQsICJGVEwg
T1NSIGV4aXQgZ2VuZXJhdGlvbiB0aHVuayIsIGV4dHJhUG9wc1RvUmVzdG9yZSk7Cit9CisKK01h
Y3JvQXNzZW1ibGVyQ29kZVJlZiBsYXp5U2xvd1BhdGhHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3Io
Vk0qIHZtKQoreworICAgIHVuc2lnbmVkIGV4dHJhUG9wc1RvUmVzdG9yZSA9IDE7CisgICAgcmV0
dXJuIGdlbmVyaWNHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3IoCisgICAgICAgIHZtLCBjb21waWxl
RlRMTGF6eVNsb3dQYXRoLCAiRlRMIGxhenkgc2xvdyBwYXRoIGdlbmVyYXRpb24gdGh1bmsiLCBl
eHRyYVBvcHNUb1Jlc3RvcmUpOwogfQogCiBzdGF0aWMgdm9pZCByZWdpc3RlckNsb2JiZXJDaGVj
ayhBc3NlbWJseUhlbHBlcnMmIGppdCwgUmVnaXN0ZXJTZXQgZG9udENsb2JiZXIpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFRodW5rcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVGh1bmtzLmgJKHJldmlzaW9uIDE5MDg0MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVGh1bmtzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQw
LDYgKzQwLDcgQEAgY2xhc3MgVk07CiBuYW1lc3BhY2UgRlRMIHsKIAogTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmIG9zckV4aXRHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3IoVk0qKTsKK01hY3JvQXNzZW1i
bGVyQ29kZVJlZiBsYXp5U2xvd1BhdGhHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3IoVk0qKTsKIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZiBzbG93UGF0aENhbGxUaHVua0dlbmVyYXRvcihWTSYsIGNvbnN0
IFNsb3dQYXRoQ2FsbEtleSYpOwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlUeXBlQXJndW1lbnQ+
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5o
CShyZXZpc2lvbiAxOTA4NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIv
Q2FsbEZyYW1lLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAvKgogICogIENvcHly
aWdodCAoQykgMTk5OS0yMDAxIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCiAgKiAgQ29w
eXJpZ2h0IChDKSAyMDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCi0gKiAgQ29weXJpZ2h0
IChDKSAyMDAzLCAyMDA3LCAyMDA4LCAyMDExLCAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDcsIDIwMDgsIDIwMTEs
IDIwMTMtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
ICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYwpAQCAtMzksNiArMzksMTEgQEAgbmFtZXNwYWNlIEpTQyAgewogICAgIGNsYXNzIEpT
U2NvcGU7CiAKICAgICBzdHJ1Y3QgQ2FsbFNpdGVJbmRleCB7CisgICAgICAgIENhbGxTaXRlSW5k
ZXgoKQorICAgICAgICAgICAgOiBtX2JpdHMoVUlOVF9NQVgpCisgICAgICAgIHsKKyAgICAgICAg
fQorICAgICAgICAKICAgICAgICAgZXhwbGljaXQgQ2FsbFNpdGVJbmRleCh1aW50MzJfdCBiaXRz
KQogICAgICAgICAgICAgOiBtX2JpdHMoYml0cykKICAgICAgICAgeyB9CkBAIC00Nyw2ICs1Miw5
IEBAIG5hbWVzcGFjZSBKU0MgIHsKICAgICAgICAgICAgIDogbV9iaXRzKGJpdHdpc2VfY2FzdDx1
aW50MzJfdD4oaW5zdHJ1Y3Rpb24pKQogICAgICAgICB7IH0KICNlbmRpZgorCisgICAgICAgIGV4
cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiBtX2JpdHMgIT0gVUlOVF9NQVg7
IH0KKyAgICAgICAgCiAgICAgICAgIGlubGluZSB1aW50MzJfdCBiaXRzKCkgY29uc3QgeyByZXR1
cm4gbV9iaXRzOyB9CiAKICAgICBwcml2YXRlOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9DQ2FsbEhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0NDYWxsSGVscGVycy5oCShyZXZpc2lvbiAxOTA4NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0NDYWxsSGVscGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC02Myw2ICs2Myw4IEBA
IHB1YmxpYzoKICAgICAgICAgcG9rZShHUFJJbmZvOjpub25BcmdHUFIwLCBQT0tFX0FSR1VNRU5U
X09GRlNFVCArIGFyZ3VtZW50SW5kZXggLSBHUFJJbmZvOjpudW1iZXJPZkFyZ3VtZW50UmVnaXN0
ZXJzKTsKICAgICB9CiAKKyAgICB2b2lkIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZSgpIHsg
c2V0dXBBcmd1bWVudHNFeGVjU3RhdGUoKTsgfQorCiAgICAgLy8gVGhlc2UgbWV0aG9kcyB1c2Vk
IHRvIHNvcnQgYXJndW1lbnRzIGludG8gdGhlIGNvcnJlY3QgcmVnaXN0ZXJzLgogICAgIC8vIE9u
IFg4NiB3ZSB1c2UgY2RlY2wgY2FsbGluZyBjb252ZW50aW9ucywgd2hpY2ggcGFzcyBhbGwgYXJn
dW1lbnRzIG9uIHRoZQogICAgIC8vIHN0YWNrLiBPbiBvdGhlciBhcmNoaXRlY3R1cmVzIHdlIG1h
eSBuZWVkIHRvIHNvcnQgdmFsdWVzIGludG8gdGhlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDE5MDg0MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEw
MzEsNyArMTAzMSw3IEBAIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdPYmplY3QK
IHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIg
dHJhY2VyKHZtLCBleGVjKTsKLSAgICAKKwogICAgIHJldHVybiBjb25zdHJ1Y3RFbXB0eU9iamVj
dChleGVjLCBzdHJ1Y3R1cmUpOwogfQogCkluZGV4OiBTb3VyY2UvV1RGL0NoYW5nZUxvZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV1RGL0NoYW5nZUxvZwkocmV2aXNpb24gMTkwODQzKQorKysgU291
cmNlL1dURi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzNyBAQAorMjAxNS0x
MC0xMCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIEZUTCBzaG91
bGQgZ2VuZXJhdGUgY29kZSB0byBjYWxsIHNsb3cgcGF0aHMgbGF6aWx5CisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDk5MzYKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBFbmFibGVzIFNoYXJlZFRhc2sgdG8g
aGFuZGxlIGFueSBmdW5jdGlvbiB0eXBlLCBub3QganVzdCB2b2lkKCkuCisKKyAgICAgICAgSXQn
cyBwcm9iYWJseSBiZXR0ZXIgdG8gdXNlIFNoYXJlZFRhc2sgaW5zdGVhZCBvZiBzdGQ6OmZ1bmN0
aW9uIGluIHBlcmZvcm1hbmNlLXNlbnNpdGl2ZQorICAgICAgICBjb2RlLiBzdGQ6OmZ1bmN0aW9u
IHVzZXMgdGhlIHN5c3RlbSBtYWxsb2MgYW5kIGhhcyBjb3B5IHNlbWFudGljcy4gU2hhcmVkVGFz
ayB1c2VzIEZhc3RNYWxsb2MKKyAgICAgICAgYW5kIGhhcyBhbGlhc2luZyBzZW1hbnRpY3MuIFNv
LCB5b3UgY2FuIGp1c3QgdHJ1c3QgdGhhdCBpdCB3aWxsIGhhdmUgc2Vuc2libGUgcGVyZm9ybWFu
Y2UKKyAgICAgICAgY2hhcmFjdGVyaXN0aWNzLgorCisgICAgICAgICogd3RmL1BhcmFsbGVsSGVs
cGVyUG9vbC5jcHA6CisgICAgICAgIChXVEY6OlBhcmFsbGVsSGVscGVyQ2xpZW50Ojp+UGFyYWxs
ZWxIZWxwZXJDbGllbnQpOgorICAgICAgICAoV1RGOjpQYXJhbGxlbEhlbHBlckNsaWVudDo6c2V0
VGFzayk6CisgICAgICAgIChXVEY6OlBhcmFsbGVsSGVscGVyQ2xpZW50Ojpkb1NvbWVIZWxwaW5n
KToKKyAgICAgICAgKFdURjo6UGFyYWxsZWxIZWxwZXJDbGllbnQ6OnJ1blRhc2tJblBhcmFsbGVs
KToKKyAgICAgICAgKFdURjo6UGFyYWxsZWxIZWxwZXJDbGllbnQ6OmZpbmlzaCk6CisgICAgICAg
IChXVEY6OlBhcmFsbGVsSGVscGVyQ2xpZW50OjpjbGFpbVRhc2spOgorICAgICAgICAoV1RGOjpQ
YXJhbGxlbEhlbHBlckNsaWVudDo6cnVuVGFzayk6CisgICAgICAgIChXVEY6OlBhcmFsbGVsSGVs
cGVyUG9vbDo6ZG9Tb21lSGVscGluZyk6CisgICAgICAgIChXVEY6OlBhcmFsbGVsSGVscGVyUG9v
bDo6aGVscGVyVGhyZWFkQm9keSk6CisgICAgICAgICogd3RmL1BhcmFsbGVsSGVscGVyUG9vbC5o
OgorICAgICAgICAoV1RGOjpQYXJhbGxlbEhlbHBlckNsaWVudDo6c2V0RnVuY3Rpb24pOgorICAg
ICAgICAoV1RGOjpQYXJhbGxlbEhlbHBlckNsaWVudDo6cnVuRnVuY3Rpb25JblBhcmFsbGVsKToK
KyAgICAgICAgKFdURjo6UGFyYWxsZWxIZWxwZXJDbGllbnQ6OnBvb2wpOgorICAgICAgICAqIHd0
Zi9TaGFyZWRUYXNrLmg6CisgICAgICAgIChXVEY6OmNyZWF0ZVNoYXJlZFRhc2spOgorICAgICAg
ICAoV1RGOjpTaGFyZWRUYXNrOjpTaGFyZWRUYXNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6
U2hhcmVkVGFzazo6flNoYXJlZFRhc2spOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpTaGFyZWRU
YXNrRnVuY3Rvcjo6U2hhcmVkVGFza0Z1bmN0b3IpOiBEZWxldGVkLgorCiAyMDE1LTEwLTEwICBE
YW4gQmVybnN0ZWluICA8bWl0ekBhcHBsZS5jb20+CiAKICAgICAgICAgW2lPU10gUmVtb3ZlIHVu
bmVjZXNzYXJ5IGlPUyB2ZXJzaW9uIGNoZWNrcwpJbmRleDogU291cmNlL1dURi93dGYvUGFyYWxs
ZWxIZWxwZXJQb29sLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9QYXJhbGxlbEhl
bHBlclBvb2wuY3BwCShyZXZpc2lvbiAxOTA4NDMpCisrKyBTb3VyY2UvV1RGL3d0Zi9QYXJhbGxl
bEhlbHBlclBvb2wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Myw3ICs1Myw3IEBAIFBhcmFsbGVs
SGVscGVyQ2xpZW50Ojp+UGFyYWxsZWxIZWxwZXJDbGkKICAgICB9CiB9CiAKLXZvaWQgUGFyYWxs
ZWxIZWxwZXJDbGllbnQ6OnNldFRhc2soUmVmUHRyPFNoYXJlZFRhc2s+IHRhc2spCit2b2lkIFBh
cmFsbGVsSGVscGVyQ2xpZW50OjpzZXRUYXNrKFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoKT4+IHRh
c2spCiB7CiAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9wb29sLT5tX2xvY2spOwogICAgIFJFTEVB
U0VfQVNTRVJUKCFtX3Rhc2spOwpAQCAtNjksNyArNjksNyBAQCB2b2lkIFBhcmFsbGVsSGVscGVy
Q2xpZW50OjpmaW5pc2goKQogCiB2b2lkIFBhcmFsbGVsSGVscGVyQ2xpZW50Ojpkb1NvbWVIZWxw
aW5nKCkKIHsKLSAgICBSZWZQdHI8U2hhcmVkVGFzaz4gdGFzazsKKyAgICBSZWZQdHI8U2hhcmVk
VGFzazx2b2lkKCk+PiB0YXNrOwogICAgIHsKICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9w
b29sLT5tX2xvY2spOwogICAgICAgICB0YXNrID0gY2xhaW1UYXNrKGxvY2tlcik7CkBAIC04MCw3
ICs4MCw3IEBAIHZvaWQgUGFyYWxsZWxIZWxwZXJDbGllbnQ6OmRvU29tZUhlbHBpbmcKICAgICBy
dW5UYXNrKHRhc2spOwogfQogCi12b2lkIFBhcmFsbGVsSGVscGVyQ2xpZW50OjpydW5UYXNrSW5Q
YXJhbGxlbChSZWZQdHI8U2hhcmVkVGFzaz4gdGFzaykKK3ZvaWQgUGFyYWxsZWxIZWxwZXJDbGll
bnQ6OnJ1blRhc2tJblBhcmFsbGVsKFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoKT4+IHRhc2spCiB7
CiAgICAgc2V0VGFzayh0YXNrKTsKICAgICBkb1NvbWVIZWxwaW5nKCk7CkBAIC05NCw3ICs5NCw3
IEBAIHZvaWQgUGFyYWxsZWxIZWxwZXJDbGllbnQ6OmZpbmlzaChjb25zdCAKICAgICAgICAgbV9w
b29sLT5tX3dvcmtDb21wbGV0ZUNvbmRpdGlvbi53YWl0KG1fcG9vbC0+bV9sb2NrKTsKIH0KIAot
UmVmUHRyPFNoYXJlZFRhc2s+IFBhcmFsbGVsSGVscGVyQ2xpZW50OjpjbGFpbVRhc2soY29uc3Qg
TG9ja0hvbGRlciYpCitSZWZQdHI8U2hhcmVkVGFzazx2b2lkKCk+PiBQYXJhbGxlbEhlbHBlckNs
aWVudDo6Y2xhaW1UYXNrKGNvbnN0IExvY2tIb2xkZXImKQogewogICAgIGlmICghbV90YXNrKQog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTEwMyw3ICsxMDMsNyBAQCBSZWZQdHI8U2hhcmVk
VGFzaz4gUGFyYWxsZWxIZWxwZXJDbGllbnQ6CiAgICAgcmV0dXJuIG1fdGFzazsKIH0KIAotdm9p
ZCBQYXJhbGxlbEhlbHBlckNsaWVudDo6cnVuVGFzayhSZWZQdHI8U2hhcmVkVGFzaz4gdGFzaykK
K3ZvaWQgUGFyYWxsZWxIZWxwZXJDbGllbnQ6OnJ1blRhc2soUmVmUHRyPFNoYXJlZFRhc2s8dm9p
ZCgpPj4gdGFzaykKIHsKICAgICBSRUxFQVNFX0FTU0VSVChtX251bUFjdGl2ZSk7CiAgICAgUkVM
RUFTRV9BU1NFUlQodGFzayk7CkBAIC0xNTMsNyArMTUzLDcgQEAgdm9pZCBQYXJhbGxlbEhlbHBl
clBvb2w6OmVuc3VyZVRocmVhZHModQogdm9pZCBQYXJhbGxlbEhlbHBlclBvb2w6OmRvU29tZUhl
bHBpbmcoKQogewogICAgIFBhcmFsbGVsSGVscGVyQ2xpZW50KiBjbGllbnQ7Ci0gICAgUmVmUHRy
PFNoYXJlZFRhc2s+IHRhc2s7CisgICAgUmVmUHRyPFNoYXJlZFRhc2s8dm9pZCgpPj4gdGFzazsK
ICAgICB7CiAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7CiAgICAgICAgIGNsaWVu
dCA9IGdldENsaWVudFdpdGhUYXNrKGxvY2tlcik7CkBAIC0xODIsNyArMTgyLDcgQEAgdm9pZCBQ
YXJhbGxlbEhlbHBlclBvb2w6OmhlbHBlclRocmVhZEJvZAogewogICAgIGZvciAoOzspIHsKICAg
ICAgICAgUGFyYWxsZWxIZWxwZXJDbGllbnQqIGNsaWVudDsKLSAgICAgICAgUmVmUHRyPFNoYXJl
ZFRhc2s+IHRhc2s7CisgICAgICAgIFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoKT4+IHRhc2s7CiAK
ICAgICAgICAgewogICAgICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9sb2NrKTsKSW5kZXg6
IFNvdXJjZS9XVEYvd3RmL1BhcmFsbGVsSGVscGVyUG9vbC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XVEYvd3RmL1BhcmFsbGVsSGVscGVyUG9vbC5oCShyZXZpc2lvbiAxOTA4NDMpCisrKyBTb3Vy
Y2UvV1RGL3d0Zi9QYXJhbGxlbEhlbHBlclBvb2wuaAkod29ya2luZyBjb3B5KQpAQCAtMTMwLDEy
ICsxMzAsMTIgQEAgcHVibGljOgogICAgIFdURl9FWFBPUlRfUFJJVkFURSBQYXJhbGxlbEhlbHBl
ckNsaWVudChSZWZQdHI8UGFyYWxsZWxIZWxwZXJQb29sPik7CiAgICAgV1RGX0VYUE9SVF9QUklW
QVRFIH5QYXJhbGxlbEhlbHBlckNsaWVudCgpOwogCi0gICAgV1RGX0VYUE9SVF9QUklWQVRFIHZv
aWQgc2V0VGFzayhSZWZQdHI8U2hhcmVkVGFzaz4pOworICAgIFdURl9FWFBPUlRfUFJJVkFURSB2
b2lkIHNldFRhc2soUmVmUHRyPFNoYXJlZFRhc2s8dm9pZCgpPj4pOwogCiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgRnVuY3Rvcj4KICAgICB2b2lkIHNldEZ1bmN0aW9uKGNvbnN0IEZ1bmN0b3ImIGZ1
bmN0b3IpCiAgICAgewotICAgICAgICBzZXRUYXNrKGNyZWF0ZVNoYXJlZFRhc2soZnVuY3Rvcikp
OworICAgICAgICBzZXRUYXNrKGNyZWF0ZVNoYXJlZFRhc2s8dm9pZCgpPihmdW5jdG9yKSk7CiAg
ICAgfQogICAgIAogICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGZpbmlzaCgpOwpAQCAtMTQ2
LDcgKzE0Niw3IEBAIHB1YmxpYzoKICAgICAvLyBjbGllbnQtPnNldFRhc2sodGFzayk7CiAgICAg
Ly8gY2xpZW50LT5kb1NvbWVIZWxwaW5nKCk7CiAgICAgLy8gY2xpZW50LT5maW5pc2goKTsKLSAg
ICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBydW5UYXNrSW5QYXJhbGxlbChSZWZQdHI8U2hhcmVk
VGFzaz4pOworICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIHJ1blRhc2tJblBhcmFsbGVsKFJl
ZlB0cjxTaGFyZWRUYXNrPHZvaWQoKT4+KTsKIAogICAgIC8vIEVxdWl2YWxlbnQgdG86CiAgICAg
Ly8gY2xpZW50LT5zZXRGdW5jdGlvbihmdW5jdG9yKTsKQEAgLTE1NSw3ICsxNTUsNyBAQCBwdWJs
aWM6CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KICAgICB2b2lkIHJ1bkZ1bmN0aW9u
SW5QYXJhbGxlbChjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQogICAgIHsKLSAgICAgICAgcnVuVGFz
a0luUGFyYWxsZWwoY3JlYXRlU2hhcmVkVGFzayhmdW5jdG9yKSk7CisgICAgICAgIHJ1blRhc2tJ
blBhcmFsbGVsKGNyZWF0ZVNoYXJlZFRhc2s8dm9pZCgpPihmdW5jdG9yKSk7CiAgICAgfQogCiAg
ICAgUGFyYWxsZWxIZWxwZXJQb29sJiBwb29sKCkgeyByZXR1cm4gKm1fcG9vbDsgfQpAQCAtMTY1
LDExICsxNjUsMTEgQEAgcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgUGFyYWxsZWxIZWxwZXJQ
b29sOwogCiAgICAgdm9pZCBmaW5pc2goY29uc3QgTG9ja0hvbGRlciYpOwotICAgIFJlZlB0cjxT
aGFyZWRUYXNrPiBjbGFpbVRhc2soY29uc3QgTG9ja0hvbGRlciYpOwotICAgIHZvaWQgcnVuVGFz
ayhSZWZQdHI8U2hhcmVkVGFzaz4pOworICAgIFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoKT4+IGNs
YWltVGFzayhjb25zdCBMb2NrSG9sZGVyJik7CisgICAgdm9pZCBydW5UYXNrKFJlZlB0cjxTaGFy
ZWRUYXNrPHZvaWQoKT4+KTsKICAgICAKICAgICBSZWZQdHI8UGFyYWxsZWxIZWxwZXJQb29sPiBt
X3Bvb2w7Ci0gICAgUmVmUHRyPFNoYXJlZFRhc2s+IG1fdGFzazsKKyAgICBSZWZQdHI8U2hhcmVk
VGFzazx2b2lkKCk+PiBtX3Rhc2s7CiAgICAgdW5zaWduZWQgbV9udW1BY3RpdmUgeyAwIH07CiB9
OwogCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9TaGFyZWRUYXNrLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dURi93dGYvU2hhcmVkVGFzay5oCShyZXZpc2lvbiAxOTA4NDMpCisrKyBTb3VyY2UvV1RG
L3d0Zi9TaGFyZWRUYXNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDEzICs0MSwxMyBAQCBuYW1l
c3BhY2UgV1RGIHsKIC8vCiAvLyBIZXJlJ3MgYW4gZXhhbXBsZSBvZiBob3cgU2hhcmVkVGFzayBj
YW4gYmUgYmV0dGVyIHRoYW4gc3RkOjpmdW5jdGlvbi4gSWYgeW91IGRvOgogLy8KLS8vIHN0ZDo6
ZnVuY3Rpb24gYSA9IGI7CisvLyBzdGQ6OmZ1bmN0aW9uPGludChkb3VibGUpPiBhID0gYjsKIC8v
CiAvLyBUaGVuICJhIiB3aWxsIGdldCBpdHMgb3duIGNvcHkgb2YgYWxsIGNhcHR1cmVkIGJ5LXZh
bHVlIHZhcmlhYmxlcy4gVGhlIGFjdCBvZiBjb3B5aW5nIG1heQogLy8gcmVxdWlyZSBjYWxscyB0
byBzeXN0ZW0gbWFsbG9jLCBhbmQgaXQgbWF5IGJlIGxpbmVhciB0aW1lIGluIHRoZSB0b3RhbCBz
aXplIG9mIGNhcHR1cmVkCiAvLyB2YXJpYWJsZXMuIE9uIHRoZSBvdGhlciBoYW5kLCBpZiB5b3Ug
ZG86CiAvLwotLy8gUmVmUHRyPFNoYXJlZFRhc2s+IGEgPSBiOworLy8gUmVmUHRyPFNoYXJlZFRh
c2s8aW50KGRvdWJsZSk+IGEgPSBiOwogLy8KIC8vIFRoZW4gImEiIHdpbGwgcG9pbnQgdG8gdGhl
IHNhbWUgdGFzayBhcyBiLCBhbmQgdGhlIG9ubHkgd29yayBpbnZvbHZlZCBpcyB0aGUgQ0FTIHRv
IGluY3JlYXNlIHRoZQogLy8gcmVmZXJlbmNlIGNvdW50LgpAQCAtNTgsMTggKzU4LDIxIEBAIG5h
bWVzcGFjZSBXVEYgewogLy8gY3JlYXRlU2hhcmVkVGFzaygpLCBiZWxvdykuIEJ1dCBTaGFyZWRU
YXNrIGFsc28gYWxsb3dzIHlvdSB0byBjcmVhdGUgeW91ciBvd24gc3ViY2xhc3MgYW5kIHB1dAog
Ly8gc3RhdGUgaW4gbWVtYmVyIGZpZWxkcy4gVGhpcyBjYW4gYmUgbW9yZSBuYXR1cmFsIGlmIHlv
dSB3YW50IGZpbmUtZ3JhaW5lZCBjb250cm9sIG92ZXIgd2hhdAogLy8gc3RhdGUgaXMgc2hhcmVk
IGJldHdlZW4gaW5zdGFuY2VzIG9mIHRoZSB0YXNrLgotY2xhc3MgU2hhcmVkVGFzayA6IHB1Ymxp
YyBUaHJlYWRTYWZlUmVmQ291bnRlZDxTaGFyZWRUYXNrPiB7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBG
dW5jdGlvblR5cGU+IGNsYXNzIFNoYXJlZFRhc2s7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBSZXN1bHRU
eXBlLCB0eXBlbmFtZS4uLiBBcmd1bWVudFR5cGVzPgorY2xhc3MgU2hhcmVkVGFzazxSZXN1bHRU
eXBlIChBcmd1bWVudFR5cGVzLi4uKT4gOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8U2hh
cmVkVGFzazxSZXN1bHRUeXBlIChBcmd1bWVudFR5cGVzLi4uKT4+IHsKIHB1YmxpYzoKICAgICBT
aGFyZWRUYXNrKCkgeyB9CiAgICAgdmlydHVhbCB+U2hhcmVkVGFzaygpIHsgfQogCi0gICAgdmly
dHVhbCB2b2lkIHJ1bigpID0gMDsKKyAgICB2aXJ0dWFsIFJlc3VsdFR5cGUgcnVuKEFyZ3VtZW50
VHlwZXMmJi4uLikgPSAwOwogfTsKIAogLy8gVGhpcyBpcyBhIHV0aWxpdHkgY2xhc3MgdGhhdCBh
bGxvd3MgeW91IHRvIGNyZWF0ZSBhIFNoYXJlZFRhc2sgc3ViY2xhc3MgdXNpbmcgYSBsYW1iZGEu
IFVzdWFsbHksCiAvLyB5b3UgZG9uJ3Qgd2FudCB0byB1c2UgdGhpcyBjbGFzcyBkaXJlY3RseS4g
VXNlIGNyZWF0ZVNoYXJlZFRhc2soKSBpbnN0ZWFkLgotdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rv
cj4KLWNsYXNzIFNoYXJlZFRhc2tGdW5jdG9yIDogcHVibGljIFNoYXJlZFRhc2sgewordGVtcGxh
dGU8dHlwZW5hbWUgRnVuY3Rpb25UeXBlLCB0eXBlbmFtZSBGdW5jdG9yPiBjbGFzcyBTaGFyZWRU
YXNrRnVuY3RvcjsKK3RlbXBsYXRlPHR5cGVuYW1lIFJlc3VsdFR5cGUsIHR5cGVuYW1lLi4uIEFy
Z3VtZW50VHlwZXMsIHR5cGVuYW1lIEZ1bmN0b3I+CitjbGFzcyBTaGFyZWRUYXNrRnVuY3RvcjxS
ZXN1bHRUeXBlIChBcmd1bWVudFR5cGVzLi4uKSwgRnVuY3Rvcj4gOiBwdWJsaWMgU2hhcmVkVGFz
azxSZXN1bHRUeXBlIChBcmd1bWVudFR5cGVzLi4uKT4gewogcHVibGljOgogICAgIFNoYXJlZFRh
c2tGdW5jdG9yKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCiAgICAgICAgIDogbV9mdW5jdG9yKGZ1
bmN0b3IpCkBAIC03Nyw5ICs4MCw5IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAg
dm9pZCBydW4oKSBvdmVycmlkZQorICAgIFJlc3VsdFR5cGUgcnVuKEFyZ3VtZW50VHlwZXMmJi4u
LiBhcmd1bWVudHMpIG92ZXJyaWRlCiAgICAgewotICAgICAgICBtX2Z1bmN0b3IoKTsKKyAgICAg
ICAgcmV0dXJuIG1fZnVuY3RvcihzdGQ6OmZvcndhcmQ8QXJndW1lbnRUeXBlcz4oYXJndW1lbnRz
KS4uLik7CiAgICAgfQogCiAgICAgRnVuY3RvciBtX2Z1bmN0b3I7CkBAIC04Nyw3ICs5MCw3IEBA
IHByaXZhdGU6CiAKIC8vIENyZWF0ZSBhIFNoYXJlZFRhc2sgZnJvbSBhIGZ1bmN0b3IsIHN1Y2gg
YXMgYSBsYW1iZGEuIFlvdSBjYW4gdXNlIHRoaXMgbGlrZSBzbzoKIC8vCi0vLyBSZWZQdHI8U2hh
cmVkVGFzaz4gdGFzayA9IGNyZWF0ZVNoYXJlZFRhc2soCisvLyBSZWZQdHI8U2hhcmVkVGFzazx2
b2lkKCk+PiB0YXNrID0gY3JlYXRlU2hhcmVkVGFzazx2b2lkKCk+KAogLy8gICAgIFs9XSAoKSB7
CiAvLyAgICAgICAgIGRvIHRoaW5nczsKIC8vICAgICB9KTsKQEAgLTEwMiwxMCArMTA1LDEwIEBA
IHByaXZhdGU6CiAvLyBPbiB0aGUgb3RoZXIgaGFuZCwgaWYgeW91IHVzZSBzb21ldGhpbmcgbGlr
ZSBQYXJhbGxlbEhlbHBlckNsaWVudDo6cnVuVGFza0luUGFyYWxsZWwoKSAob3IgaXRzCiAvLyBo
ZWxwZXIsIHJ1bkZ1bmN0aW9uSW5QYXJhbGxlbCgpLCB3aGljaCBkb2VzIGNyZWF0ZVNoYXJlZFRh
c2soKSBmb3IgeW91KSwgdGhlbiBpdCBjYW4gYmUgT0sgdG8KIC8vIHVzZSBbJl0sIHNpbmNlIHRo
ZSBzdGFjayBmcmFtZSB3aWxsIHJlbWFpbiBsaXZlIGZvciB0aGUgZW50aXJlIGR1cmF0aW9uIG9m
IHRoZSB0YXNrJ3MgbGlmZXRpbWUuCi10ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgotUmVmPFNo
YXJlZFRhc2s+IGNyZWF0ZVNoYXJlZFRhc2soY29uc3QgRnVuY3RvciYgZnVuY3RvcikKK3RlbXBs
YXRlPHR5cGVuYW1lIEZ1bmN0aW9uVHlwZSwgdHlwZW5hbWUgRnVuY3Rvcj4KK1JlZjxTaGFyZWRU
YXNrPEZ1bmN0aW9uVHlwZT4+IGNyZWF0ZVNoYXJlZFRhc2soY29uc3QgRnVuY3RvciYgZnVuY3Rv
cikKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTaGFyZWRUYXNrRnVuY3RvcjxGdW5jdG9y
PihmdW5jdG9yKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2hhcmVkVGFza0Z1bmN0b3I8
RnVuY3Rpb25UeXBlLCBGdW5jdG9yPihmdW5jdG9yKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdU
Rgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>262843</attachid>
            <date>2015-10-10 18:23:36 -0700</date>
            <delta_ts>2015-10-10 20:05:07 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>100550</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTkwODQzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEyMyBA
QAorMjAxNS0xMC0xMCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEZUTCBzaG91bGQgZ2VuZXJhdGUgY29kZSB0byBjYWxsIHNsb3cgcGF0aHMgbGF6aWx5CisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDk5MzYKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZSBvZnRlbiBoYXZl
IGNvbXBsZXggc2xvdyBwYXRocyBpbiBGVEwtZ2VuZXJhdGVkIGNvZGUuIFRob3NlIHNsb3cgcGF0
aHMgbWF5IG5ldmVyIHJ1bi4gRXZlbgorICAgICAgICBpZiB0aGV5IGRvIHJ1biwgdGhleSBkb24n
dCBuZWVkIHN0ZWxsYXIgcGVyZm9ybWFuY2UuIFNvLCBpdCBkb2Vzbid0IG1ha2Ugc2Vuc2UgdG8g
aGF2ZSBMTFZNCisgICAgICAgIHdvcnJ5IGFib3V0IGNvbXBpbGluZyBzdWNoIHNsb3cgcGF0aCBj
b2RlLgorCisgICAgICAgIFRoaXMgcGF0Y2ggZW5hYmxlcyB1cyB0byB1c2Ugb3VyIG93biBNYWNy
b0Fzc2VtYmxlciBmb3IgY29tcGlsaW5nIHRoZSBzbG93IHBhdGggaW5zaWRlIEZUTAorICAgICAg
ICBjb2RlLiBJdCBkb2VzIHRoaXMgYnkgdXNpbmcgYSBjcmF6eSBsYW1iZGEgdGhpbmd5IChzZWUg
RlRMTG93ZXJERkdUb0xMVk0uY3BwJ3MgbGF6eVNsb3dQYXRoKCkKKyAgICAgICAgYW5kIGl0cyBk
b2N1bWVudGF0aW9uKS4gVGhlIHJlc3VsdCBpcyBxdWl0ZSBuYXR1cmFsIHRvIHVzZS4KKworICAg
ICAgICBFdmVuIGZvciBzdHJhaWdodCBzbG93IHBhdGggY2FsbHMgdmlhIHNvbWV0aGluZyBsaWtl
IHZtQ2FsbCgpLCB0aGUgbGF6eVNsb3dQYXRoIG9mZmVycyB0aGUKKyAgICAgICAgYmVuZWZpdCB0
aGF0IHRoZSBjYWxsIG1hcnNoYWxsaW5nIGFuZCB0aGUgZXhjZXB0aW9uIGNoZWNraW5nIGFyZSBu
b3QgZXhwcmVzc2VkIHVzaW5nIExMVk0gSVIKKyAgICAgICAgYW5kIGRvIG5vdCByZXF1aXJlIExM
Vk0gdG8gdGhpbmsgYWJvdXQgaXQuIEl0IGFsc28gaGFzIHRoZSBiZW5lZml0IHRoYXQgd2UgbmV2
ZXIgZ2VuZXJhdGUgdGhlCisgICAgICAgIGNvZGUgaWYgaXQgbmV2ZXIgcnVucy4gVGhhdCdzIGdy
ZWF0LCBzaW5jZSBmdW5jdGlvbiBjYWxscyB1c3VhbGx5IGludm9sdmUgfjEwIGluc3RydWN0aW9u
cworICAgICAgICB0b3RhbCAobW92ZSBhcmd1bWVudHMgdG8gYXJndW1lbnQgcmVnaXN0ZXJzLCBt
YWtlIHRoZSBjYWxsLCBjaGVjayBleGNlcHRpb24sIGV0Yy4pLgorCisgICAgICAgIFRoaXMgc2hv
d3Mgc21hbGwgc3BlZWQtdXBzIG9uIGEgYnVuY2ggb2YgdGhpbmdzLiBObyBiaWcgd2luIG9uIGFu
eSBiZW5jaG1hcmsgYWdncmVnYXRlLiBCdXQKKyAgICAgICAgbWFpbmx5IHRoaXMgaXMgZG9uZSBm
b3IgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0OTg1Miwgd2hlcmUg
d2UgZm91bmQgdGhhdAorICAgICAgICBvdXRsaW5pbmcgdGhlIHNsb3cgcGF0aCBpbiB0aGlzIHdh
eSB3YXMgYSBzaWduaWZpY2FudCBzcGVlZCBib29zdC4KKworICAgICAgICAqIENNYWtlTGlzdHMu
dHh0OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4
cHJvajoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
OgorICAgICAgICAqIGFzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmg6CisgICAgICAg
IChKU0M6OkFic3RyYWN0TWFjcm9Bc3NlbWJsZXI6OnJlcGxhY2VXaXRoQWRkcmVzc0NvbXB1dGF0
aW9uKToKKyAgICAgICAgKEpTQzo6QWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjo6YWRkTGlua1Rhc2sp
OgorICAgICAgICAoSlNDOjpBYnN0cmFjdE1hY3JvQXNzZW1ibGVyOjpBYnN0cmFjdE1hY3JvQXNz
ZW1ibGVyKToKKyAgICAgICAgKiBhc3NlbWJsZXIvTGlua0J1ZmZlci5jcHA6CisgICAgICAgIChK
U0M6OkxpbmtCdWZmZXI6OmxpbmtDb2RlKToKKyAgICAgICAgKEpTQzo6TGlua0J1ZmZlcjo6YWxs
b2NhdGUpOgorICAgICAgICAoSlNDOjpMaW5rQnVmZmVyOjpwZXJmb3JtRmluYWxpemF0aW9uKToK
KyAgICAgICAgKiBhc3NlbWJsZXIvTGlua0J1ZmZlci5oOgorICAgICAgICAoSlNDOjpMaW5rQnVm
ZmVyOjp3YXNBbHJlYWR5RGlzYXNzZW1ibGVkKToKKyAgICAgICAgKEpTQzo6TGlua0J1ZmZlcjo6
ZGlkQWxyZWFkeURpc2Fzc2VtYmxlKToKKyAgICAgICAgKEpTQzo6TGlua0J1ZmZlcjo6dm0pOgor
ICAgICAgICAoSlNDOjpMaW5rQnVmZmVyOjpleGVjdXRhYmxlT2Zmc2V0Rm9yKToKKyAgICAgICAg
KiBieXRlY29kZS9Db2RlT3JpZ2luLmg6CisgICAgICAgIChKU0M6OkNvZGVPcmlnaW46OkNvZGVP
cmlnaW4pOgorICAgICAgICAoSlNDOjpDb2RlT3JpZ2luOjppc1NldCk6CisgICAgICAgIChKU0M6
OkNvZGVPcmlnaW46Om9wZXJhdG9yIGJvb2wpOgorICAgICAgICAoSlNDOjpDb2RlT3JpZ2luOjpp
c0hhc2hUYWJsZURlbGV0ZWRWYWx1ZSk6CisgICAgICAgIChKU0M6OkNvZGVPcmlnaW46Om9wZXJh
dG9yISk6IERlbGV0ZWQuCisgICAgICAgICogZnRsL0ZUTENvbXBpbGUuY3BwOgorICAgICAgICAo
SlNDOjpGVEw6Om1tQWxsb2NhdGVEYXRhU2VjdGlvbik6CisgICAgICAgICogZnRsL0ZUTElubGlu
ZUNhY2hlRGVzY3JpcHRvci5oOgorICAgICAgICAoSlNDOjpGVEw6OklubGluZUNhY2hlRGVzY3Jp
cHRvcjo6SW5saW5lQ2FjaGVEZXNjcmlwdG9yKToKKyAgICAgICAgKEpTQzo6RlRMOjpDaGVja0lu
RGVzY3JpcHRvcjo6Q2hlY2tJbkRlc2NyaXB0b3IpOgorICAgICAgICAoSlNDOjpGVEw6OkxhenlT
bG93UGF0aERlc2NyaXB0b3I6OkxhenlTbG93UGF0aERlc2NyaXB0b3IpOgorICAgICAgICAqIGZ0
bC9GVExKSVRDb2RlLmg6CisgICAgICAgICogZnRsL0ZUTEpJVEZpbmFsaXplci5jcHA6CisgICAg
ICAgIChKU0M6OkZUTDo6SklURmluYWxpemVyOjpmaW5hbGl6ZUZ1bmN0aW9uKToKKyAgICAgICAg
KiBmdGwvRlRMSklURmluYWxpemVyLmg6CisgICAgICAgICogZnRsL0ZUTExhenlTbG93UGF0aC5j
cHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpGVEw6OkxhenlTbG93UGF0aDo6TGF6eVNsb3dQYXRo
KToKKyAgICAgICAgKEpTQzo6RlRMOjpMYXp5U2xvd1BhdGg6On5MYXp5U2xvd1BhdGgpOgorICAg
ICAgICAoSlNDOjpGVEw6OkxhenlTbG93UGF0aDo6Z2VuZXJhdGUpOgorICAgICAgICAqIGZ0bC9G
VExMYXp5U2xvd1BhdGguaDogQWRkZWQuCisgICAgICAgIChKU0M6OkZUTDo6TGF6eVNsb3dQYXRo
OjpjcmVhdGVHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpGVEw6OkxhenlTbG93UGF0aDo6cGF0
Y2hwb2ludCk6CisgICAgICAgIChKU0M6OkZUTDo6TGF6eVNsb3dQYXRoOjp1c2VkUmVnaXN0ZXJz
KToKKyAgICAgICAgKEpTQzo6RlRMOjpMYXp5U2xvd1BhdGg6OmNhbGxTaXRlSW5kZXgpOgorICAg
ICAgICAoSlNDOjpGVEw6OkxhenlTbG93UGF0aDo6c3R1Yik6CisgICAgICAgICogZnRsL0ZUTExh
enlTbG93UGF0aENhbGwuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkZUTDo6Y3JlYXRlTGF6eUNh
bGxHZW5lcmF0b3IpOgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvTExWTS5jcHA6CisgICAg
ICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUNyZWF0ZUFjdGl2YXRp
b24pOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVOZXdG
dW5jdGlvbik6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvTExWTTo6Y29tcGls
ZUNyZWF0ZURpcmVjdEFyZ3VtZW50cyk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRG
R1RvTExWTTo6Y29tcGlsZU5ld0FycmF5V2l0aFNpemUpOgorICAgICAgICAoSlNDOjpGVEw6OkRG
Rzo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVNYWtlUm9wZSk6CisgICAgICAgIChKU0M6OkZUTDo6
REZHOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZU5vdGlmeVdyaXRlKToKKyAgICAgICAgKEpTQzo6
RlRMOjpERkc6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlSXNPYmplY3RPck51bGwpOgorICAgICAg
ICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVJc0Z1bmN0aW9uKToKKyAg
ICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlSW4pOgorICAgICAg
ICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVNYXRlcmlhbGl6ZU5ld09i
amVjdCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZU1h
dGVyaWFsaXplQ3JlYXRlQWN0aXZhdGlvbik6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dl
ckRGR1RvTExWTTo6Y29tcGlsZUNoZWNrV2F0Y2hkb2dUaW1lcik6CisgICAgICAgIChKU0M6OkZU
TDo6REZHOjpMb3dlckRGR1RvTExWTTo6YWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2VXaXRoU2l6ZUlt
cGwpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0xMVk06OmFsbG9jYXRlT2Jq
ZWN0KToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9MTFZNOjphbGxvY2F0ZUpT
QXJyYXkpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0xMVk06OmJ1aWxkVHlw
ZU9mKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9MTFZNOjpzZW5zaWJsZURv
dWJsZVRvSW50MzIpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0xMVk06Omxh
enlTbG93UGF0aCk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvTExWTTo6c3Bl
Y3VsYXRlKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9MTFZNOjplbWl0U3Rv
cmVCYXJyaWVyKToKKyAgICAgICAgKiBmdGwvRlRMT3BlcmF0aW9ucy5jcHA6CisgICAgICAgIChK
U0M6OkZUTDo6b3BlcmF0aW9uTWF0ZXJpYWxpemVPYmplY3RJbk9TUik6CisgICAgICAgIChKU0M6
OkZUTDo6Y29tcGlsZUZUTExhenlTbG93UGF0aCk6CisgICAgICAgICogZnRsL0ZUTE9wZXJhdGlv
bnMuaDoKKyAgICAgICAgKiBmdGwvRlRMU2xvd1BhdGhDYWxsLmNwcDoKKyAgICAgICAgKEpTQzo6
RlRMOjpTbG93UGF0aENhbGxDb250ZXh0OjpTbG93UGF0aENhbGxDb250ZXh0KToKKyAgICAgICAg
KEpTQzo6RlRMOjpTbG93UGF0aENhbGxDb250ZXh0Ojp+U2xvd1BhdGhDYWxsQ29udGV4dCk6Cisg
ICAgICAgIChKU0M6OkZUTDo6U2xvd1BhdGhDYWxsQ29udGV4dDo6a2V5V2l0aFRhcmdldCk6Cisg
ICAgICAgIChKU0M6OkZUTDo6U2xvd1BhdGhDYWxsQ29udGV4dDo6bWFrZUNhbGwpOgorICAgICAg
ICAoSlNDOjpGVEw6OmNhbGxTaXRlSW5kZXhGb3JDb2RlT3JpZ2luKToKKyAgICAgICAgKEpTQzo6
RlRMOjpzdG9yZUNvZGVPcmlnaW4pOiBEZWxldGVkLgorICAgICAgICAoSlNDOjpGVEw6OmNhbGxP
cGVyYXRpb24pOiBEZWxldGVkLgorICAgICAgICAqIGZ0bC9GVExTbG93UGF0aENhbGwuaDoKKyAg
ICAgICAgKEpTQzo6RlRMOjpjYWxsT3BlcmF0aW9uKToKKyAgICAgICAgKiBmdGwvRlRMU3RhdGUu
aDoKKyAgICAgICAgKiBmdGwvRlRMVGh1bmtzLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjpnZW5l
cmljR2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6RlRMOjpvc3JFeGl0
R2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6RlRMOjpsYXp5U2xvd1Bh
dGhHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpGVEw6OnJlZ2lzdGVy
Q2xvYmJlckNoZWNrKToKKyAgICAgICAgKiBmdGwvRlRMVGh1bmtzLmg6CisgICAgICAgICogaW50
ZXJwcmV0ZXIvQ2FsbEZyYW1lLmg6CisgICAgICAgIChKU0M6OkNhbGxTaXRlSW5kZXg6OkNhbGxT
aXRlSW5kZXgpOgorICAgICAgICAoSlNDOjpDYWxsU2l0ZUluZGV4OjpvcGVyYXRvciBib29sKToK
KyAgICAgICAgKEpTQzo6Q2FsbFNpdGVJbmRleDo6Yml0cyk6CisgICAgICAgICogaml0L0NDYWxs
SGVscGVycy5oOgorICAgICAgICAoSlNDOjpDQ2FsbEhlbHBlcnM6OnNldHVwQXJndW1lbnQpOgor
ICAgICAgICAoSlNDOjpDQ2FsbEhlbHBlcnM6OnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZSk6
CisgICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMuY3BwOgorCiAyMDE1LTEwLTEwICBBbmRyZWFz
IEtsaW5nICA8YWtsaW5nQGFwcGxlLmNvbT4KIAogICAgICAgICBSZWR1Y2UgcG9pbnRsZXNzIG1h
bGxvYyB0cmFmZmljIGluIENvZGVCbG9jayBjb25zdHJ1Y3Rpb24uCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAxOTA4NDMpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcgY29weSkKQEAgLTkwNSw2ICs5MDUsNyBA
QCBpZiAoRU5BQkxFX0ZUTF9KSVQpCiAgICAgICAgIGZ0bC9GVExKU0NhbGxCYXNlLmNwcAogICAg
ICAgICBmdGwvRlRMSlNDYWxsVmFyYXJncy5jcHAKICAgICAgICAgZnRsL0ZUTEpTVGFpbENhbGwu
Y3BwCisgICAgICAgIGZ0bC9GVExMYXp5U2xvd1BhdGguY3BwCiAgICAgICAgIGZ0bC9GVExMaW5r
LmNwcAogICAgICAgICBmdGwvRlRMTG9jYXRpb24uY3BwCiAgICAgICAgIGZ0bC9GVExMb3dlckRG
R1RvTExWTS5jcHAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52
Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvagko
cmV2aXNpb24gMTkwODQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
LnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvagkod29ya2luZyBjb3B5KQpAQCAtNTQwLDYg
KzU0MCw3IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxmdGxcRlRMSlNDYWxsQmFzZS5j
cHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxmdGxcRlRMSlNDYWxsVmFyYXJncy5j
cHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxmdGxcRlRMSlNUYWlsQ2FsbC5jcHAi
IC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxmdGxcRlRMTGF6eVNsb3dQYXRoLmNwcCIg
Lz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGZ0bFxGVExMaW5rLmNwcCIgLz4KICAgICA8
Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGZ0bFxGVExMb2NhdGlvbi5jcHAiIC8+CiAgICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxmdGxcRlRMTG93ZXJERkdUb0xMVk0uY3BwIiAvPgpAQCAtMTMwMiw2
ICsxMzAzLDggQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGZ0bFxGVExKU0NhbGxCYXNl
LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxmdGxcRlRMSlNDYWxsVmFyYXJncy5o
IiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZnRsXEZUTEpTVGFpbENhbGwuaCIgLz4K
KyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGZ0bFxGVExMYXp5U2xvd1BhdGguaCIgLz4KKyAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGZ0bFxGVExMYXp5U2xvd1BhdGhDYWxsLmgiIC8+CiAg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxmdGxcRlRMTGluay5oIiAvPgogICAgIDxDbEluY2x1
ZGUgSW5jbHVkZT0iLi5cZnRsXEZUTExvY2F0aW9uLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxmdGxcRlRMTG93ZXJERkdUb0xMVk0uaCIgLz4KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCShyZXZpc2lvbiAxOTA4NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
SmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpA
QCAtNDk0LDYgKzQ5NCw5IEBACiAJCTBGQjE3NjYyMTk2QjhGOUUwMDkxMDUyQSAvKiBERkdQdXJl
VmFsdWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZCMTc2NUUxOTZCOEY5RTAwOTEwNTJBIC8qIERGR1B1cmVWYWx1ZS5jcHAgKi87IH07CiAJCTBG
QjE3NjYzMTk2QjhGOUUwMDkxMDUyQSAvKiBERkdQdXJlVmFsdWUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjE3NjVGMTk2QjhGOUUwMDkxMDUyQSAv
KiBERkdQdXJlVmFsdWUuaCAqLzsgfTsKIAkJMEZCNDM4QTMxOTI3MEIxRDAwRTFGQkM5IC8qIFN0
cnVjdHVyZVNldC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVS
ZWYgPSAwRkI0MzhBMjE5MjcwQjFEMDBFMUZCQzkgLyogU3RydWN0dXJlU2V0LmNwcCAqLzsgfTsK
KwkJMEZCNEZCNzMxQkM4NDMxNDAwMjVDQTVBIC8qIEZUTExhenlTbG93UGF0aC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI0RkI3MDFCQzg0MzE0
MDAyNUNBNUEgLyogRlRMTGF6eVNsb3dQYXRoLmNwcCAqLzsgfTsKKwkJMEZCNEZCNzQxQkM4NDMx
NDAwMjVDQTVBIC8qIEZUTExhenlTbG93UGF0aC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCNEZCNzExQkM4NDMxNDAwMjVDQTVBIC8qIEZUTExhenlT
bG93UGF0aC5oICovOyB9OworCQkwRkI0RkI3NTFCQzg0MzE0MDAyNUNBNUEgLyogRlRMTGF6eVNs
b3dQYXRoQ2FsbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZCNEZCNzIxQkM4NDMxNDAwMjVDQTVBIC8qIEZUTExhenlTbG93UGF0aENhbGwuaCAqLzsg
fTsKIAkJMEZCNTQ2NzcxNEY1OUI1QzAwMkMyOTg5IC8qIExhenlPcGVyYW5kVmFsdWVQcm9maWxl
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkI1NDY3
NjE0RjU5QUQxMDAyQzI5ODkgLyogTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkI1NDY3OTE0RjVDNDZC
MDAyQzI5ODkgLyogTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCNTQ2NzgxNEY1QzQ2ODAwMkMyOTg5IC8q
IExhenlPcGVyYW5kVmFsdWVQcm9maWxlLmNwcCAqLzsgfTsKIAkJMEZCNTQ2N0IxNEY1QzdFMTAw
MkMyOTg5IC8qIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjU0NjdBMTRGNUM3RDQwMDJDMjk4OSAv
KiBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTIzNTIsNiArMjM1NSw5IEBACiAJCTBGQjRCNTFG
MTZCNjI3NzIwMDNGNjk2QiAvKiBERkdOb2RlQWxsb2NhdG9yLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IERGR05vZGVBbGxvY2F0b3IuaDsgcGF0aCA9IGRmZy9ERkdOb2RlQWxs
b2NhdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQjRCNTIxMTZCNjI3OEQw
MDNGNjk2QiAvKiBGdW5jdGlvbkV4ZWN1dGFibGVEdW1wLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IEZ1bmN0aW9uRXhlY3V0YWJsZUR1bXAuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkwRkI0QjUyMjE2QjYyNzhEMDAzRjY5NkIgLyogRnVuY3Rpb25F
eGVjdXRhYmxlRHVtcC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBGdW5jdGlv
bkV4ZWN1dGFibGVEdW1wLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGQjRGQjcw
MUJDODQzMTQwMDI1Q0E1QSAvKiBGVExMYXp5U2xvd1BhdGguY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBuYW1lID0gRlRMTGF6eVNsb3dQYXRoLmNwcDsgcGF0aCA9IGZ0bC9GVExM
YXp5U2xvd1BhdGguY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkI0RkI3MTFC
Qzg0MzE0MDAyNUNBNUEgLyogRlRMTGF6eVNsb3dQYXRoLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgbmFtZSA9IEZUTExhenlTbG93UGF0aC5oOyBwYXRoID0gZnRsL0ZUTExhenlTbG93UGF0
aC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkI0RkI3MjFCQzg0MzE0MDAyNUNB
NUEgLyogRlRMTGF6eVNsb3dQYXRoQ2FsbC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5h
bWUgPSBGVExMYXp5U2xvd1BhdGhDYWxsLmg7IHBhdGggPSBmdGwvRlRMTGF6eVNsb3dQYXRoQ2Fs
bC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkI1NDY3NjE0RjU5QUQxMDAyQzI5
ODkgLyogTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gTGF6eU9wZXJhbmRWYWx1ZVByb2ZpbGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEZCNTQ2NzgxNEY1QzQ2ODAwMkMyOTg5IC8qIExhenlPcGVyYW5kVmFsdWVQcm9m
aWxlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IExhenlPcGVyYW5k
VmFsdWVQcm9maWxlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZCNTQ2N0Ex
NEY1QzdENDAwMkMyOTg5IC8qIE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gTWV0aG9kT2ZHZXR0aW5nQVZhbHVlUHJvZmlsZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzk4OSw2ICszOTk1LDkgQEAKIAkJCQkw
RkQxMjAzMjFBOEM4NUJEMDAwRjUyODAgLyogRlRMSlNDYWxsVmFyYXJncy5oICovLAogCQkJCTYy
Nzc0REE4MUI4RDRCMTkwMDA2RjA1QSAvKiBGVExKU1RhaWxDYWxsLmNwcCAqLywKIAkJCQk2Mjc3
NERBOTFCOEQ0QjE5MDAwNkYwNUEgLyogRlRMSlNUYWlsQ2FsbC5oICovLAorCQkJCTBGQjRGQjcw
MUJDODQzMTQwMDI1Q0E1QSAvKiBGVExMYXp5U2xvd1BhdGguY3BwICovLAorCQkJCTBGQjRGQjcx
MUJDODQzMTQwMDI1Q0E1QSAvKiBGVExMYXp5U2xvd1BhdGguaCAqLywKKwkJCQkwRkI0RkI3MjFC
Qzg0MzE0MDAyNUNBNUEgLyogRlRMTGF6eVNsb3dQYXRoQ2FsbC5oICovLAogCQkJCTBGOEYyQjkz
MTcyRTA0OUUwMDdEQkRBNSAvKiBGVExMaW5rLmNwcCAqLywKIAkJCQkwRjhGMkI5NDE3MkUwNDlF
MDA3REJEQTUgLyogRlRMTGluay5oICovLAogCQkJCTBGQ0VGQUREMTgwNzM4QzAwMDQ3MkNFNCAv
KiBGVExMb2NhdGlvbi5jcHAgKi8sCkBAIC02MjU5LDYgKzYyNjgsNyBAQAogCQkJCTBGNjM5NDc4
MTVEQ0UzNEIwMDZBNTk3QyAvKiBERkdTdHJ1Y3R1cmVBYnN0cmFjdFZhbHVlLmggaW4gSGVhZGVy
cyAqLywKIAkJCQkwRjUwQUYzQzE5M0U4QjM5MDA2NzRFRTggLyogREZHU3RydWN0dXJlQ2xvYmJl
clN0YXRlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjc5MDg1NjE5QTI5MEIyMDBGNjMxMEMgLyog
REZHU3RydWN0dXJlUmVnaXN0cmF0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGQjRG
Qjc1MUJDODQzMTQwMDI1Q0E1QSAvKiBGVExMYXp5U2xvd1BhdGhDYWxsLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjJGQ0NGRjE4QTYwMDcwMDAxQTI3RjggLyogREZHVGhyZWFkRGF0YS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEZDMDk3QTIxNDZCMjhDQzAwQ0YyNDQyIC8qIERGR1RodW5rcy5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEZEOEEzMjgxN0Q1MUY1NzAwQ0EyQzQwIC8qIERGR1RpZXJVcENo
ZWNrSW5qZWN0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLApAQCAtNjYxNyw2ICs2NjI3LDcgQEAK
IAkJCQk3QzE4NEUxQjE3QkVEQkQzMDA3Q0I2M0EgLyogSlNQcm9taXNlLmggaW4gSGVhZGVycyAq
LywKIAkJCQk3QzE4NEUyMzE3QkVFMjQwMDA3Q0I2M0EgLyogSlNQcm9taXNlQ29uc3RydWN0b3Iu
aCBpbiBIZWFkZXJzICovLAogCQkJCTdDMDA4Q0RCMTg3MTI0QkIwMDk1NUMyNCAvKiBKU1Byb21p
c2VEZWZlcnJlZC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZCNEZCNzQxQkM4NDMxNDAwMjVDQTVB
IC8qIEZUTExhenlTbG93UGF0aC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0MxODRFMUYxN0JFRTIy
RTAwN0NCNjNBIC8qIEpTUHJvbWlzZVByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkEw
NUFCRDYxOTYxREYyNDAwMzQxNzUwIC8qIEpTUHJvcGVydHlOYW1lRW51bWVyYXRvci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJRTNFRjg4NzUxQjY2REYyMzAwM0YyNkNCIC8qIEpTUHJvcGVydHlOYW1l
SXRlcmF0b3IuaCBpbiBIZWFkZXJzICovLApAQCAtODA1MCw2ICs4MDYxLDcgQEAKIAkJCQkxNDQ2
OURFQjEwN0VDN0U3MDA2NTA0NDYgLyogU3RyaW5nQ29uc3RydWN0b3IuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJNzBFQzBFQzYxQUEwRDdEQTAwQjZBQUZBIC8qIFN0cmluZ0l0ZXJhdG9yUHJvdG90
eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTE0NDY5REVDMTA3RUM3RTcwMDY1MDQ0NiAvKiBT
dHJpbmdPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMEZCNEZCNzMxQkM4NDMxNDAwMjVD
QTVBIC8qIEZUTExhenlTbG93UGF0aC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDQ2OURFRDEw
N0VDN0U3MDA2NTA0NDYgLyogU3RyaW5nUHJvdG90eXBlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTkzMzVGMjREMTJFNjc2NUIwMDJCNTU1MyAvKiBTdHJpbmdSZWN1cnNpb25DaGVja2VyLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUJDREUzQjQzMEU2QzgzMkQwMDE0NTNBNyAvKiBTdHJ1Y3R1cmUu
Y3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVy
L0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAkocmV2aXNpb24gMTkwODQz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1i
bGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJPcHRpb25z
LmgiCiAjaW5jbHVkZSA8d3RmL0NyeXB0b2dyYXBoaWNhbGx5UmFuZG9tTnVtYmVyLmg+CiAjaW5j
bHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1NoYXJlZFRhc2suaD4KICNp
bmNsdWRlIDx3dGYvV2Vha1JhbmRvbS5oPgogCiAjaWYgRU5BQkxFKEFTU0VNQkxFUikKQEAgLTEw
MDQsNiArMTAwNSwxNyBAQCBwdWJsaWM6CiAgICAgICAgIEFzc2VtYmxlclR5cGU6OnJlcGxhY2VX
aXRoQWRkcmVzc0NvbXB1dGF0aW9uKGxhYmVsLmRhdGFMb2NhdGlvbigpKTsKICAgICB9CiAKKyAg
ICB2b2lkIGFkZExpbmtUYXNrKFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoTGlua0J1ZmZlciYpPj4g
dGFzaykKKyAgICB7CisgICAgICAgIG1fbGlua1Rhc2tzLmFwcGVuZCh0YXNrKTsKKyAgICB9CisK
KyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIHZvaWQgYWRkTGlua1Rhc2soY29u
c3QgRnVuY3RvciYgZnVuY3RvcikKKyAgICB7CisgICAgICAgIG1fbGlua1Rhc2tzLmFwcGVuZChj
cmVhdGVTaGFyZWRUYXNrPHZvaWQoTGlua0J1ZmZlciYpPihmdW5jdG9yKSk7CisgICAgfQorCiBw
cm90ZWN0ZWQ6CiAgICAgQWJzdHJhY3RNYWNyb0Fzc2VtYmxlcigpCiAgICAgICAgIDogbV9yYW5k
b21Tb3VyY2UoY3J5cHRvZ3JhcGhpY2FsbHlSYW5kb21OdW1iZXIoKSkKQEAgLTEwOTksMTAgKzEx
MTEsOSBAQCBwcm90ZWN0ZWQ6CiAKICAgICB1bnNpZ25lZCBtX3RlbXBSZWdpc3RlcnNWYWxpZEJp
dHM7CiAKLSAgICBmcmllbmQgY2xhc3MgTGlua0J1ZmZlcjsKLQotcHJpdmF0ZToKKyAgICBWZWN0
b3I8UmVmUHRyPFNoYXJlZFRhc2s8dm9pZChMaW5rQnVmZmVyJik+Pj4gbV9saW5rVGFza3M7CiAK
KyAgICBmcmllbmQgY2xhc3MgTGlua0J1ZmZlcjsKIH07IC8vIGNsYXNzIEFic3RyYWN0TWFjcm9B
c3NlbWJsZXIKIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5jcHAJKHJldmlzaW9uIDE5MDg0MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE5Myw2ICsxOTMsOCBAQCB2b2lkIExpbmtCdWZmZXI6OmxpbmtDb2RlKE1hY3JvQXNz
ZW1ibGVyCiAjZWxpZiBDUFUoQVJNNjQpCiAgICAgY29weUNvbXBhY3RBbmRMaW5rQ29kZTx1aW50
MzJfdD4obWFjcm9Bc3NlbWJsZXIsIG93bmVyVUlELCBlZmZvcnQpOwogI2VuZGlmCisKKyAgICBt
X2xpbmtUYXNrcyA9IFdURjo6bW92ZShtYWNyb0Fzc2VtYmxlci5tX2xpbmtUYXNrcyk7CiB9CiAK
IHZvaWQgTGlua0J1ZmZlcjo6YWxsb2NhdGUoc2l6ZV90IGluaXRpYWxTaXplLCB2b2lkKiBvd25l
clVJRCwgSklUQ29tcGlsYXRpb25FZmZvcnQgZWZmb3J0KQpAQCAtMjI0LDYgKzIyNiw5IEBAIHZv
aWQgTGlua0J1ZmZlcjo6c2hyaW5rKHNpemVfdCBuZXdTaXplKQogCiB2b2lkIExpbmtCdWZmZXI6
OnBlcmZvcm1GaW5hbGl6YXRpb24oKQogeworICAgIGZvciAoYXV0byYgdGFzayA6IG1fbGlua1Rh
c2tzKQorICAgICAgICB0YXNrLT5ydW4oKnRoaXMpOworCiAjaWZuZGVmIE5ERUJVRwogICAgIEFT
U0VSVCghaXNDb21waWxhdGlvblRocmVhZCgpKTsKICAgICBBU1NFUlQoIW1fY29tcGxldGVkKTsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTGlua0J1ZmZlci5oCShy
ZXZpc2lvbiAxOTA4NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtC
dWZmZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjU5LDYgKzI1OSw4IEBAIHB1YmxpYzoKICAgICBi
b29sIHdhc0FscmVhZHlEaXNhc3NlbWJsZWQoKSBjb25zdCB7IHJldHVybiBtX2FscmVhZHlEaXNh
c3NlbWJsZWQ7IH0KICAgICB2b2lkIGRpZEFscmVhZHlEaXNhc3NlbWJsZSgpIHsgbV9hbHJlYWR5
RGlzYXNzZW1ibGVkID0gdHJ1ZTsgfQogCisgICAgVk0mIHZtKCkgeyByZXR1cm4gKm1fdm07IH0K
KwogcHJpdmF0ZToKICNpZiBFTkFCTEUoQlJBTkNIX0NPTVBBQ1RJT04pCiAgICAgaW50IGV4ZWN1
dGFibGVPZmZzZXRGb3IoaW50IGxvY2F0aW9uKQpAQCAtMzE1LDYgKzMxNyw3IEBAIHByaXZhdGU6
CiAgICAgYm9vbCBtX2NvbXBsZXRlZDsKICNlbmRpZgogICAgIGJvb2wgbV9hbHJlYWR5RGlzYXNz
ZW1ibGVkIHsgZmFsc2UgfTsKKyAgICBWZWN0b3I8UmVmUHRyPFNoYXJlZFRhc2s8dm9pZChMaW5r
QnVmZmVyJik+Pj4gbV9saW5rVGFza3M7CiB9OwogCiAjZGVmaW5lIEZJTkFMSVpFX0NPREVfSUYo
Y29uZGl0aW9uLCBsaW5rQnVmZmVyUmVmZXJlbmNlLCBkYXRhTG9nRkFyZ3VtZW50c0ZvckhlYWRp
bmcpICBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2lu
LmgJKHJldmlzaW9uIDE5MDg0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlT3JpZ2luLmgJKHdvcmtpbmcgY29weSkKQEAgLTc0LDcgKzc0LDcgQEAgc3RydWN0IENvZGVP
cmlnaW4gewogICAgIH0KICAgICAKICAgICBib29sIGlzU2V0KCkgY29uc3QgeyByZXR1cm4gYnl0
ZWNvZGVJbmRleCAhPSBpbnZhbGlkQnl0ZWNvZGVJbmRleDsgfQotICAgIGJvb2wgb3BlcmF0b3Ih
KCkgY29uc3QgeyByZXR1cm4gIWlzU2V0KCk7IH0KKyAgICBleHBsaWNpdCBvcGVyYXRvciBib29s
KCkgY29uc3QgeyByZXR1cm4gaXNTZXQoKTsgfQogICAgIAogICAgIGJvb2wgaXNIYXNoVGFibGVE
ZWxldGVkVmFsdWUoKSBjb25zdAogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMQ29tcGlsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExDb21waWxlLmNwcAkocmV2aXNpb24gMTkwODQzKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExDb21waWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMzLDcgKzMzMyw3IEBA
IHN0YXRpYyB2b2lkIGZpeEZ1bmN0aW9uQmFzZWRPblN0YWNrTWFwcygKIHsKICAgICBHcmFwaCYg
Z3JhcGggPSBzdGF0ZS5ncmFwaDsKICAgICBWTSYgdm0gPSBncmFwaC5tX3ZtOwotICAgIFN0YWNr
TWFwcyBzdGFja21hcHMgPSBqaXRDb2RlLT5zdGFja21hcHM7CisgICAgU3RhY2tNYXBzJiBzdGFj
a21hcHMgPSBqaXRDb2RlLT5zdGFja21hcHM7CiAgICAgCiAgICAgaW50IGxvY2Fsc09mZnNldCA9
IG9mZnNldE9mU3RhY2tSZWdpb24ocmVjb3JkTWFwLCBzdGF0ZS5jYXB0dXJlZFN0YWNrbWFwSUQp
ICsgZ3JhcGgubV9uZXh0TWFjaGluZUxvY2FsOwogICAgIGludCB2YXJhcmdzU3BpbGxTbG90c09m
ZnNldCA9IG9mZnNldE9mU3RhY2tSZWdpb24ocmVjb3JkTWFwLCBzdGF0ZS52YXJhcmdzU3BpbGxT
bG90c1N0YWNrbWFwSUQpOwpAQCAtNDM5LDcgKzQzOSwxMCBAQCBzdGF0aWMgdm9pZCBmaXhGdW5j
dGlvbkJhc2VkT25TdGFja01hcHMoCiAgICAgICAgIHN0YXRlLmZpbmFsaXplci0+ZXhpdFRodW5r
c0xpbmtCdWZmZXIgPSBXVEY6Om1vdmUobGlua0J1ZmZlcik7CiAgICAgfQogCi0gICAgaWYgKCFz
dGF0ZS5nZXRCeUlkcy5pc0VtcHR5KCkgfHwgIXN0YXRlLnB1dEJ5SWRzLmlzRW1wdHkoKSB8fCAh
c3RhdGUuY2hlY2tJbnMuaXNFbXB0eSgpKSB7CisgICAgaWYgKCFzdGF0ZS5nZXRCeUlkcy5pc0Vt
cHR5KCkKKyAgICAgICAgfHwgIXN0YXRlLnB1dEJ5SWRzLmlzRW1wdHkoKQorICAgICAgICB8fCAh
c3RhdGUuY2hlY2tJbnMuaXNFbXB0eSgpCisgICAgICAgIHx8ICFzdGF0ZS5sYXp5U2xvd1BhdGhz
LmlzRW1wdHkoKSkgewogICAgICAgICBDQ2FsbEhlbHBlcnMgc2xvd1BhdGhKSVQoJnZtLCBjb2Rl
QmxvY2spOwogICAgICAgICAKICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBleGNlcHRp
b25UYXJnZXQ7CkBAIC00NzMsNyArNDc2LDggQEAgc3RhdGljIHZvaWQgZml4RnVuY3Rpb25CYXNl
ZE9uU3RhY2tNYXBzKAogCiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2Fs
bCA9IGNhbGxPcGVyYXRpb24oCiAgICAgICAgICAgICAgICAgICAgIHN0YXRlLCB1c2VkUmVnaXN0
ZXJzLCBzbG93UGF0aEpJVCwgY29kZU9yaWdpbiwgJmV4Y2VwdGlvblRhcmdldCwKLSAgICAgICAg
ICAgICAgICAgICAgb3BlcmF0aW9uR2V0QnlJZE9wdGltaXplLCByZXN1bHQsIGdlbi5zdHViSW5m
bygpLCBiYXNlLCBnZXRCeUlkLnVpZCgpKTsKKyAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9u
R2V0QnlJZE9wdGltaXplLCByZXN1bHQsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihnZW4u
c3R1YkluZm8oKSksCisgICAgICAgICAgICAgICAgICAgIGJhc2UsIENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbVB0cihnZXRCeUlkLnVpZCgpKSkuY2FsbCgpOwogCiAgICAgICAgICAgICAgICAgZ2Vu
LnJlcG9ydFNsb3dQYXRoQ2FsbChiZWdpbiwgY2FsbCk7CiAKQEAgLTUxMSw3ICs1MTUsOSBAQCBz
dGF0aWMgdm9pZCBmaXhGdW5jdGlvbkJhc2VkT25TdGFja01hcHMoCiAgICAgICAgICAgICAgICAg
CiAgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbCA9IGNhbGxPcGVyYXRp
b24oCiAgICAgICAgICAgICAgICAgICAgIHN0YXRlLCB1c2VkUmVnaXN0ZXJzLCBzbG93UGF0aEpJ
VCwgY29kZU9yaWdpbiwgJmV4Y2VwdGlvblRhcmdldCwKLSAgICAgICAgICAgICAgICAgICAgZ2Vu
LnNsb3dQYXRoRnVuY3Rpb24oKSwgZ2VuLnN0dWJJbmZvKCksIHZhbHVlLCBiYXNlLCBwdXRCeUlk
LnVpZCgpKTsKKyAgICAgICAgICAgICAgICAgICAgZ2VuLnNsb3dQYXRoRnVuY3Rpb24oKSwgSW52
YWxpZEdQUlJlZywKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
UHRyKGdlbi5zdHViSW5mbygpKSwgdmFsdWUsIGJhc2UsCisgICAgICAgICAgICAgICAgICAgIEND
YWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihwdXRCeUlkLnVpZCgpKSkuY2FsbCgpOwogICAgICAg
ICAgICAgICAgIAogICAgICAgICAgICAgICAgIGdlbi5yZXBvcnRTbG93UGF0aENhbGwoYmVnaW4s
IGNhbGwpOwogICAgICAgICAgICAgICAgIApAQCAtNTQ5LDEzICs1NTUsNTcgQEAgc3RhdGljIHZv
aWQgZml4RnVuY3Rpb25CYXNlZE9uU3RhY2tNYXBzKAogCiAgICAgICAgICAgICAgICAgTWFjcm9B
c3NlbWJsZXI6OkNhbGwgc2xvd0NhbGwgPSBjYWxsT3BlcmF0aW9uKAogICAgICAgICAgICAgICAg
ICAgICBzdGF0ZSwgdXNlZFJlZ2lzdGVycywgc2xvd1BhdGhKSVQsIGNvZGVPcmlnaW4sICZleGNl
cHRpb25UYXJnZXQsCi0gICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbkluT3B0aW1pemUsIHJl
c3VsdCwgc3R1YkluZm8sIG9iaiwgY2hlY2tJbi5tX3VpZCk7CisgICAgICAgICAgICAgICAgICAg
IG9wZXJhdGlvbkluT3B0aW1pemUsIHJlc3VsdCwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRy
KHN0dWJJbmZvKSwgb2JqLAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0
ZWRJbW1QdHIoY2hlY2tJbi51aWQoKSkpLmNhbGwoKTsKIAogICAgICAgICAgICAgICAgIGNoZWNr
SW4ubV9zbG93UGF0aERvbmUuYXBwZW5kKHNsb3dQYXRoSklULmp1bXAoKSk7CiAgICAgICAgICAg
ICAgICAgCiAgICAgICAgICAgICAgICAgY2hlY2tJbi5tX2dlbmVyYXRvcnMuYXBwZW5kKENoZWNr
SW5HZW5lcmF0b3Ioc3R1YkluZm8sIHNsb3dDYWxsLCBiZWdpbikpOwogICAgICAgICAgICAgfQog
ICAgICAgICB9CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gc3RhdGUubGF6eVNsb3dQYXRo
cy5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgIExhenlTbG93UGF0aERlc2NyaXB0b3ImIGRl
c2NyaXB0b3IgPSBzdGF0ZS5sYXp5U2xvd1BhdGhzW2ldOworCisgICAgICAgICAgICBpZiAodmVy
Ym9zZUNvbXBpbGF0aW9uRW5hYmxlZCgpKQorICAgICAgICAgICAgICAgIGRhdGFMb2coIkhhbmRs
aW5nIGxhenlTbG93UGF0aCBzdGFja21hcCAjIiwgZGVzY3JpcHRvci5zdGFja21hcElEKCksICJc
biIpOworCisgICAgICAgICAgICBhdXRvIGl0ZXIgPSByZWNvcmRNYXAuZmluZChkZXNjcmlwdG9y
LnN0YWNrbWFwSUQoKSk7CisgICAgICAgICAgICBpZiAoaXRlciA9PSByZWNvcmRNYXAuZW5kKCkp
IHsKKyAgICAgICAgICAgICAgICAvLyBJdCB3YXMgb3B0aW1pemVkIG91dC4KKyAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGl0ZXItPnZhbHVlLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICAgICAg
U3RhY2tNYXBzOjpSZWNvcmQmIHJlY29yZCA9IGl0ZXItPnZhbHVlW2ldOworICAgICAgICAgICAg
ICAgIFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3RlcnMgPSB1c2VkUmVnaXN0ZXJzRm9yKHJlY29yZCk7
CisgICAgICAgICAgICAgICAgVmVjdG9yPExvY2F0aW9uPiBsb2NhdGlvbnM7CisgICAgICAgICAg
ICAgICAgZm9yIChhdXRvIGxvY2F0aW9uIDogcmVjb3JkLmxvY2F0aW9ucykKKyAgICAgICAgICAg
ICAgICAgICAgbG9jYXRpb25zLmFwcGVuZChMb2NhdGlvbjo6Zm9yU3RhY2ttYXBzKCZzdGFja21h
cHMsIGxvY2F0aW9uKSk7CisKKyAgICAgICAgICAgICAgICBjaGFyKiBzdGFydE9mSUMgPQorICAg
ICAgICAgICAgICAgICAgICBiaXR3aXNlX2Nhc3Q8Y2hhcio+KGdlbmVyYXRlZEZ1bmN0aW9uKSAr
IHJlY29yZC5pbnN0cnVjdGlvbk9mZnNldDsKKyAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25M
YWJlbCBwYXRjaHBvaW50KChNYWNyb0Fzc2VtYmxlckNvZGVQdHIoc3RhcnRPZklDKSkpOworICAg
ICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIGV4Y2VwdGlvblRhcmdldCA9CisgICAgICAg
ICAgICAgICAgICAgIHN0YXRlLmZpbmFsaXplci0+aGFuZGxlRXhjZXB0aW9uc0xpbmtCdWZmZXIt
PmVudHJ5cG9pbnQoKTsKKworICAgICAgICAgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxMYXp5U2xv
d1BhdGg+IGxhenlTbG93UGF0aCA9IHN0ZDo6bWFrZV91bmlxdWU8TGF6eVNsb3dQYXRoPigKKyAg
ICAgICAgICAgICAgICAgICAgcGF0Y2hwb2ludCwgZXhjZXB0aW9uVGFyZ2V0LCB1c2VkUmVnaXN0
ZXJzLCBkZXNjcmlwdG9yLmNhbGxTaXRlSW5kZXgoKSwKKyAgICAgICAgICAgICAgICAgICAgZGVz
Y3JpcHRvci5tX2xpbmtlci0+cnVuKGxvY2F0aW9ucykpOworCisgICAgICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpMYWJlbCBiZWdpbiA9IHNsb3dQYXRoSklULmxhYmVsKCk7CisKKyAgICAgICAg
ICAgICAgICAvLyBGSVhNRTogVGhpcyBzaG91bGQgYmUgcHVzaGluZyB0aGUgbGF6eSBzbG93IHBh
dGggaW5kZXggaW4gc29tZSB2ZWN0b3Igb3Igd2hhdGV2ZXIuCisgICAgICAgICAgICAgICAgc2xv
d1BhdGhKSVQucHVzaFRvU2F2ZUltbWVkaWF0ZVdpdGhvdXRUb3VjaGluZ1JlZ2lzdGVycygKKyAg
ICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoc3RhdGUuaml0Q29k
ZS0+bGF6eVNsb3dQYXRocy5zaXplKCkpKTsKKyAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6
Okp1bXAgZ2VuZXJhdG9ySnVtcCA9IHNsb3dQYXRoSklULmp1bXAoKTsKKyAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICBkZXNjcmlwdG9yLm1fZ2VuZXJhdG9ycy5hcHBlbmQoc3RkOjpt
YWtlX3R1cGxlKGxhenlTbG93UGF0aC5nZXQoKSwgYmVnaW4pKTsKKworICAgICAgICAgICAgICAg
IHN0YXRlLmppdENvZGUtPmxhenlTbG93UGF0aHMuYXBwZW5kKFdURjo6bW92ZShsYXp5U2xvd1Bh
dGgpKTsKKyAgICAgICAgICAgICAgICBzdGF0ZS5maW5hbGl6ZXItPmxhenlTbG93UGF0aEdlbmVy
YXRvckp1bXBzLmFwcGVuZChnZW5lcmF0b3JKdW1wKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQogICAgICAgICAKICAgICAgICAgZXhjZXB0aW9uVGFyZ2V0LmxpbmsoJnNsb3dQYXRoSklUKTsK
ICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6Okp1bXAgZXhjZXB0aW9uSnVtcCA9IHNsb3dQYXRoSklU
Lmp1bXAoKTsKQEAgLTU3OCwxMiArNjI4LDE5IEBAIHN0YXRpYyB2b2lkIGZpeEZ1bmN0aW9uQmFz
ZWRPblN0YWNrTWFwcygKICAgICAgICAgICAgICAgICBzdGF0ZSwgY29kZUJsb2NrLCBnZW5lcmF0
ZWRGdW5jdGlvbiwgcmVjb3JkTWFwLCBzdGF0ZS5wdXRCeUlkc1tpXSwKICAgICAgICAgICAgICAg
ICBzaXplT2ZQdXRCeUlkKCkpOwogICAgICAgICB9Ci0KICAgICAgICAgZm9yICh1bnNpZ25lZCBp
ID0gc3RhdGUuY2hlY2tJbnMuc2l6ZSgpOyBpLS07KSB7CiAgICAgICAgICAgICBnZW5lcmF0ZUNo
ZWNrSW5JQ0Zhc3RQYXRoKAogICAgICAgICAgICAgICAgIHN0YXRlLCBjb2RlQmxvY2ssIGdlbmVy
YXRlZEZ1bmN0aW9uLCByZWNvcmRNYXAsIHN0YXRlLmNoZWNrSW5zW2ldLAogICAgICAgICAgICAg
ICAgIHNpemVPZkluKCkpOyAKLSAgICAgICAgfSAKKyAgICAgICAgfQorICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSBzdGF0ZS5sYXp5U2xvd1BhdGhzLnNpemUoKTsgaS0tOykgeworICAgICAgICAg
ICAgTGF6eVNsb3dQYXRoRGVzY3JpcHRvciYgbGF6eVNsb3dQYXRoID0gc3RhdGUubGF6eVNsb3dQ
YXRoc1tpXTsKKyAgICAgICAgICAgIGZvciAoYXV0byYgdHVwbGUgOiBsYXp5U2xvd1BhdGgubV9n
ZW5lcmF0b3JzKSB7CisgICAgICAgICAgICAgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGxhY2VXaXRo
SnVtcCgKKyAgICAgICAgICAgICAgICAgICAgc3RkOjpnZXQ8MD4odHVwbGUpLT5wYXRjaHBvaW50
KCksCisgICAgICAgICAgICAgICAgICAgIHN0YXRlLmZpbmFsaXplci0+c2lkZUNvZGVMaW5rQnVm
ZmVyLT5sb2NhdGlvbk9mKHN0ZDo6Z2V0PDE+KHR1cGxlKSkpOworICAgICAgICAgICAgfQorICAg
ICAgICB9CiAgICAgfQogICAgIAogICAgIGFkanVzdENhbGxJQ3NGb3JTdGFja21hcHMoc3RhdGUu
anNDYWxscywgcmVjb3JkTWFwKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
SW5saW5lQ2FjaGVEZXNjcmlwdG9yLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExJbmxpbmVDYWNoZURlc2NyaXB0b3IuaAkocmV2aXNpb24gMTkwODQzKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbmxpbmVDYWNoZURlc2NyaXB0b3IuaAkod29y
a2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIw
MTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEz
LTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0yOSwxMiArMjksMTUgQEAKICNpZiBFTkFCTEUoRlRMX0pJVCkKIAog
I2luY2x1ZGUgIkNvZGVPcmlnaW4uaCIKKyNpbmNsdWRlICJGVExMYXp5U2xvd1BhdGguaCIKICNp
bmNsdWRlICJKSVRJbmxpbmVDYWNoZUdlbmVyYXRvci5oIgogI2luY2x1ZGUgIk1hY3JvQXNzZW1i
bGVyLmgiCiAjaW5jbHVkZSA8d3RmL3RleHQvVW5pcXVlZFN0cmluZ0ltcGwuaD4KIAogbmFtZXNw
YWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewogCitjbGFzcyBMb2NhdGlvbjsKKwogY2xhc3MgSW5s
aW5lQ2FjaGVEZXNjcmlwdG9yIHsKIHB1YmxpYzoKICAgICBJbmxpbmVDYWNoZURlc2NyaXB0b3Io
KSAKQEAgLTExMywxNyArMTE2LDQ2IEBAIGNsYXNzIENoZWNrSW5EZXNjcmlwdG9yIDogcHVibGlj
IElubGluZUMKIHB1YmxpYzoKICAgICBDaGVja0luRGVzY3JpcHRvcigpIHsgfQogICAgIAotICAg
IENoZWNrSW5EZXNjcmlwdG9yKHVuc2lnbmVkIHN0YWNrbWFwSUQsIENhbGxTaXRlSW5kZXggY2Fs
bFNpdGUsIGNvbnN0IFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCi0gICAgICAgIDogSW5saW5lQ2Fj
aGVEZXNjcmlwdG9yKHN0YWNrbWFwSUQsIGNhbGxTaXRlLCBudWxscHRyKQotICAgICAgICAsIG1f
dWlkKHVpZCkKKyAgICBDaGVja0luRGVzY3JpcHRvcih1bnNpZ25lZCBzdGFja21hcElELCBDYWxs
U2l0ZUluZGV4IGNhbGxTaXRlLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQorICAgICAgICA6IElu
bGluZUNhY2hlRGVzY3JpcHRvcihzdGFja21hcElELCBjYWxsU2l0ZSwgdWlkKQogICAgIHsKICAg
ICB9Ci0KICAgICAKLSAgICBjb25zdCBVbmlxdWVkU3RyaW5nSW1wbCogbV91aWQ7CiAgICAgVmVj
dG9yPENoZWNrSW5HZW5lcmF0b3I+IG1fZ2VuZXJhdG9yczsKIH07CiAKKy8vIFlvdSBjYW4gY3Jl
YXRlIGEgbGF6eSBzbG93IHBhdGggY2FsbCBpbiBsb3dlckRGR1RvTExWTSBieSBkb2luZzoKKy8v
IG1fZnRsU3RhdGUubGF6eVNsb3dQYXRocy5hcHBlbmQoCisvLyAgICAgTGF6eVNsb3dQYXRoRGVz
Y3JpcHRvcigKKy8vICAgICAgICAgc3RhY2ttYXBJRCwgY2FsbFNpdGVJbmRleCwKKy8vICAgICAg
ICAgY3JlYXRlU2hhcmVkVGFzazxSZWZQdHI8TGF6eVNsb3dQYXRoOjpHZW5lcmF0b3I+KGNvbnN0
IFZlY3RvcjxMb2NhdGlvbj4mKT4oCisvLyAgICAgICAgICAgICBbXSAoY29uc3QgVmVjdG9yPExv
Y2F0aW9uPiYgbG9jYXRpb25zKSAtPiBSZWZQdHI8TGF6eVNsb3dQYXRoOjpHZW5lcmF0b3I+IHsK
Ky8vICAgICAgICAgICAgICAgICAvLyBUaGlzIGxhbWJkYSBzaG91bGQganVzdCByZWNvcmQgdGhl
IHJlZ2lzdGVycyB0aGF0IHdlIHdpbGwgYmUgdXNpbmcsIGFuZCByZXR1cm4KKy8vICAgICAgICAg
ICAgICAgICAvLyBhIFNoYXJlZFRhc2sgdGhhdCB3aWxsIGFjdHVhbGx5IGdlbmVyYXRlIHRoZSBz
bG93IHBhdGguCisvLyAgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxhenlDYWxsR2VuZXJh
dG9yKAorLy8gICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbiwgbG9jYXRpb25zWzBdLmRpcmVj
dEdQUigpLCBsb2NhdGlvbnNbMV0uZGlyZWN0R1BSKCkpOworLy8gICAgICAgICAgICAgfSkpKTsK
Ky8vCisvLyBVc3VhbGx5LCB5b3UgY2FuIHVzZSB0aGUgTG93ZXJERkdUb0xMVk06OmxhenlTbG93
UGF0aCgpIGhlbHBlciwgd2hpY2ggdGFrZXMgY2FyZSBvZiB0aGUgZGVzY3JpcHRvcgorLy8gZm9y
IHlvdSBhbmQgYWxzbyBjcmVhdGVzIHRoZSBwYXRjaHBvaW50LgordHlwZWRlZiBSZWZQdHI8TGF6
eVNsb3dQYXRoOjpHZW5lcmF0b3I+IExhenlTbG93UGF0aExpbmtlckZ1bmN0aW9uKGNvbnN0IFZl
Y3RvcjxMb2NhdGlvbj4mKTsKK3R5cGVkZWYgU2hhcmVkVGFzazxMYXp5U2xvd1BhdGhMaW5rZXJG
dW5jdGlvbj4gTGF6eVNsb3dQYXRoTGlua2VyVGFzazsKK2NsYXNzIExhenlTbG93UGF0aERlc2Ny
aXB0b3IgOiBwdWJsaWMgSW5saW5lQ2FjaGVEZXNjcmlwdG9yIHsKK3B1YmxpYzoKKyAgICBMYXp5
U2xvd1BhdGhEZXNjcmlwdG9yKCkgeyB9CisKKyAgICBMYXp5U2xvd1BhdGhEZXNjcmlwdG9yKAor
ICAgICAgICB1bnNpZ25lZCBzdGFja21hcElELCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlLAorICAg
ICAgICBSZWZQdHI8TGF6eVNsb3dQYXRoTGlua2VyVGFzaz4gbGlua2VyKQorICAgICAgICA6IElu
bGluZUNhY2hlRGVzY3JpcHRvcihzdGFja21hcElELCBjYWxsU2l0ZSwgbnVsbHB0cikKKyAgICAg
ICAgLCBtX2xpbmtlcihsaW5rZXIpCisgICAgeworICAgIH0KKworICAgIFZlY3RvcjxzdGQ6OnR1
cGxlPExhenlTbG93UGF0aCosIENDYWxsSGVscGVyczo6TGFiZWw+PiBtX2dlbmVyYXRvcnM7CisK
KyAgICBSZWZQdHI8TGF6eVNsb3dQYXRoTGlua2VyVGFzaz4gbV9saW5rZXI7Cit9OwogCiB9IH0g
Ly8gbmFtZXNwYWNlIEpTQzo6RlRMCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMSklUQ29kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
SklUQ29kZS5oCShyZXZpc2lvbiAxOTA4NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTEpJVENvZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVk
ZSAiREZHQ29tbW9uRGF0YS5oIgogI2luY2x1ZGUgIkZUTERhdGFTZWN0aW9uLmgiCisjaW5jbHVk
ZSAiRlRMTGF6eVNsb3dQYXRoLmgiCiAjaW5jbHVkZSAiRlRMT1NSRXhpdC5oIgogI2luY2x1ZGUg
IkZUTFN0YWNrTWFwcy5oIgogI2luY2x1ZGUgIkZUTFVud2luZEluZm8uaCIKQEAgLTg2LDYgKzg3
LDcgQEAgcHVibGljOgogICAgIERGRzo6Q29tbW9uRGF0YSBjb21tb247CiAgICAgU2VnbWVudGVk
VmVjdG9yPE9TUkV4aXQsIDg+IG9zckV4aXQ7CiAgICAgU3RhY2tNYXBzIHN0YWNrbWFwczsKKyAg
ICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPExhenlTbG93UGF0aD4+IGxhenlTbG93UGF0aHM7CiAg
ICAgCiBwcml2YXRlOgogICAgIFZlY3RvcjxSZWZQdHI8RGF0YVNlY3Rpb24+PiBtX2RhdGFTZWN0
aW9uczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklURmluYWxpemVyLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVEZpbmFsaXpl
ci5jcHAJKHJldmlzaW9uIDE5MDg0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
SklURmluYWxpemVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA2LDExICsxMDYsMTEgQEAgYm9v
bCBKSVRGaW5hbGl6ZXI6OmZpbmFsaXplRnVuY3Rpb24oKQogICAgICAgICAvLyBTaWRlIGNvZGUg
aXMgZm9yIHNwZWNpYWwgc2xvdyBwYXRocyB0aGF0IHdlIGdlbmVyYXRlIG91cnNlbHZlcywgbGlr
ZSBmb3IgaW5saW5lCiAgICAgICAgIC8vIGNhY2hlcy4KICAgICAgICAgCi0gICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IHNsb3dQYXRoQ2FsbHMuc2l6ZSgpOyBpLS07KSB7Ci0gICAgICAgICAgICBT
bG93UGF0aENhbGwmIGNhbGwgPSBzbG93UGF0aENhbGxzW2ldOworICAgICAgICBmb3IgKENDYWxs
SGVscGVyczo6SnVtcCBqdW1wIDogbGF6eVNsb3dQYXRoR2VuZXJhdG9ySnVtcHMpIHsKICAgICAg
ICAgICAgIHNpZGVDb2RlTGlua0J1ZmZlci0+bGluaygKLSAgICAgICAgICAgICAgICBjYWxsLmNh
bGwoKSwKLSAgICAgICAgICAgICAgICBDb2RlTG9jYXRpb25MYWJlbChtX3BsYW4udm0uZnRsVGh1
bmtzLT5nZXRTbG93UGF0aENhbGxUaHVuayhtX3BsYW4udm0sIGNhbGwua2V5KCkpLmNvZGUoKSkp
OworICAgICAgICAgICAgICAgIGp1bXAsCisgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFi
ZWwoCisgICAgICAgICAgICAgICAgICAgIG1fcGxhbi52bS5nZXRDVElTdHViKGxhenlTbG93UGF0
aEdlbmVyYXRpb25UaHVua0dlbmVyYXRvcikuY29kZSgpKSk7CiAgICAgICAgIH0KICAgICAgICAg
CiAgICAgICAgIGppdENvZGUtPmFkZEhhbmRsZShGSU5BTElaRV9ERkdfQ09ERSgKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklURmluYWxpemVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRGaW5hbGl6ZXIuaAkocmV2aXNpb24gMTkw
ODQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRGaW5hbGl6ZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtNjUsOCArNjUsOCBAQCBwdWJsaWM6CiAgICAgc3RkOjp1bmlxdWVfcHRy
PExpbmtCdWZmZXI+IHNpZGVDb2RlTGlua0J1ZmZlcjsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8TGlu
a0J1ZmZlcj4gaGFuZGxlRXhjZXB0aW9uc0xpbmtCdWZmZXI7CiAgICAgVmVjdG9yPE91dE9mTGlu
ZUNvZGVJbmZvPiBvdXRPZkxpbmVDb2RlSW5mb3M7Ci0gICAgVmVjdG9yPFNsb3dQYXRoQ2FsbD4g
c2xvd1BhdGhDYWxsczsgLy8gQ2FsbHMgaW5zaWRlIHRoZSBzaWRlIGNvZGUuCiAgICAgVmVjdG9y
PE9TUkV4aXRDb21waWxhdGlvbkluZm8+IG9zckV4aXQ7CisgICAgVmVjdG9yPENDYWxsSGVscGVy
czo6SnVtcD4gbGF6eVNsb3dQYXRoR2VuZXJhdG9ySnVtcHM7CiAgICAgR2VuZXJhdGVkRnVuY3Rp
b24gZnVuY3Rpb247CiAgICAgUmVmUHRyPEpJVENvZGU+IGppdENvZGU7CiB9OwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMYXp5U2xvd1BhdGguY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTGF6eVNsb3dQYXRoLmNwcAkocmV2aXNpb24g
MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTGF6eVNsb3dQYXRoLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDc0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFw
cGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQg
dXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlm
aWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0
aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBt
dXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3Ry
aWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdo
dAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2lu
ZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0
ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRX
QVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkg
RElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1Ig
Q09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAq
IFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNF
LCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVS
IENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENP
TlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VO
Q0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9G
IFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJGVExMYXp5
U2xvd1BhdGguaCIKKworI2luY2x1ZGUgIkZUTFNsb3dQYXRoQ2FsbC5oIgorI2luY2x1ZGUgIkxp
bmtCdWZmZXIuaCIKKworbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgeworCitMYXp5U2xv
d1BhdGg6OkxhenlTbG93UGF0aCgKKyAgICBDb2RlTG9jYXRpb25MYWJlbCBwYXRjaHBvaW50LCBD
b2RlTG9jYXRpb25MYWJlbCBleGNlcHRpb25UYXJnZXQsCisgICAgY29uc3QgUmVnaXN0ZXJTZXQm
IHVzZWRSZWdpc3RlcnMsIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCwgUmVmUHRyPEdlbmVy
YXRvcj4gZ2VuZXJhdG9yKQorICAgIDogbV9wYXRjaHBvaW50KHBhdGNocG9pbnQpCisgICAgLCBt
X2V4Y2VwdGlvblRhcmdldChleGNlcHRpb25UYXJnZXQpCisgICAgLCBtX3VzZWRSZWdpc3RlcnMo
dXNlZFJlZ2lzdGVycykKKyAgICAsIG1fY2FsbFNpdGVJbmRleChjYWxsU2l0ZUluZGV4KQorICAg
ICwgbV9nZW5lcmF0b3IoZ2VuZXJhdG9yKQoreworfQorCitMYXp5U2xvd1BhdGg6On5MYXp5U2xv
d1BhdGgoKQoreworfQorCit2b2lkIExhenlTbG93UGF0aDo6Z2VuZXJhdGUoQ29kZUJsb2NrKiBj
b2RlQmxvY2spCit7CisgICAgUkVMRUFTRV9BU1NFUlQoIW1fc3R1Yik7CisKKyAgICBWTSYgdm0g
PSAqY29kZUJsb2NrLT52bSgpOworCisgICAgQ0NhbGxIZWxwZXJzIGppdCgmdm0sIGNvZGVCbG9j
ayk7CisgICAgR2VuZXJhdGlvblBhcmFtcyBwYXJhbXM7CisgICAgQ0NhbGxIZWxwZXJzOjpKdW1w
TGlzdCBleGNlcHRpb25KdW1wczsKKyAgICBwYXJhbXMuZXhjZXB0aW9uSnVtcHMgPSBtX2V4Y2Vw
dGlvblRhcmdldCA/ICZleGNlcHRpb25KdW1wcyA6IG51bGxwdHI7CisgICAgcGFyYW1zLmxhenlT
bG93UGF0aCA9IHRoaXM7CisgICAgbV9nZW5lcmF0b3ItPnJ1bihqaXQsIHBhcmFtcyk7CisKKyAg
ICBMaW5rQnVmZmVyIGxpbmtCdWZmZXIodm0sIGppdCwgY29kZUJsb2NrLCBKSVRDb21waWxhdGlv
bk11c3RTdWNjZWVkKTsKKyAgICBsaW5rQnVmZmVyLmxpbmsoCisgICAgICAgIHBhcmFtcy5kb25l
SnVtcHMsIG1fcGF0Y2hwb2ludC5sYWJlbEF0T2Zmc2V0KE1hY3JvQXNzZW1ibGVyOjptYXhKdW1w
UmVwbGFjZW1lbnRTaXplKCkpKTsKKyAgICBpZiAobV9leGNlcHRpb25UYXJnZXQpCisgICAgICAg
IGxpbmtCdWZmZXIubGluayhleGNlcHRpb25KdW1wcywgbV9leGNlcHRpb25UYXJnZXQpOworICAg
IG1fc3R1YiA9IEZJTkFMSVpFX0NPREVfRk9SKGNvZGVCbG9jaywgbGlua0J1ZmZlciwgKCJMYXp5
IHNsb3cgcGF0aCBjYWxsIHN0dWIiKSk7CisKKyAgICBNYWNyb0Fzc2VtYmxlcjo6cmVwbGFjZVdp
dGhKdW1wKG1fcGF0Y2hwb2ludCwgQ29kZUxvY2F0aW9uTGFiZWwobV9zdHViLmNvZGUoKSkpOwor
fQorCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCisKKwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExMYXp5U2xvd1BhdGguaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTExhenlTbG93UGF0aC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2Z0bC9GVExMYXp5U2xvd1BhdGguaAkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDkxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpZm5kZWYgRlRMTGF6eVNsb3dQYXRoX2gKKyNkZWZpbmUgRlRMTGF6eVNsb3dQYXRoX2gKKwor
I2luY2x1ZGUgIkNDYWxsSGVscGVycy5oIgorI2luY2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1
ZGUgIkNvZGVMb2NhdGlvbi5oIgorI2luY2x1ZGUgIkdQUkluZm8uaCIKKyNpbmNsdWRlICJNYWNy
b0Fzc2VtYmxlckNvZGVSZWYuaCIKKyNpbmNsdWRlICJSZWdpc3RlclNldC5oIgorI2luY2x1ZGUg
PHd0Zi9TaGFyZWRUYXNrLmg+CisKK25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKKwor
Ly8gQSBMYXp5U2xvd1BhdGggaXMgYW4gb2JqZWN0IHRoYXQgcmVwcmVzZW50cyBhIHBpZWNlIG9m
IGNvZGUgdGhhdCBpcyBwYXJ0IG9mIEZUTCBnZW5lcmF0ZWQgY29kZQorLy8gdGhhdCB3aWxsIGJl
IGdlbmVyYXRlZCBsYXppbHkuIEl0IGhvbGRzIGFsbCBvZiB0aGUgaW1wb3J0YW50IGluZm9ybWF0
aW9uIG5lZWRlZCB0byBnZW5lcmF0ZSB0aGF0CisvLyBjb2RlLCBzdWNoIGFzIHdoZXJlIHRvIGxp
bmsganVtcHMgdG8gYW5kIHdoaWNoIHJlZ2lzdGVycyBhcmUgaW4gdXNlLiBJdCBhbHNvIGhhcyBh
IHJlZmVyZW5jZSB0byBhCisvLyBTaGFyZWRUYXNrIHRoYXQgd2lsbCBkbyB0aGUgYWN0dWFsIGNv
ZGUgZ2VuZXJhdGlvbi4gVGhhdCBTaGFyZWRUYXNrIG1heSBoYXZlIGFkZGl0aW9uYWwgZGF0YSwg
bGlrZQorLy8gd2hpY2ggcmVnaXN0ZXJzIGhvbGQgdGhlIGlucHV0cyBvciBvdXRwdXRzLgorY2xh
c3MgTGF6eVNsb3dQYXRoIHsKKyAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShMYXp5U2xvd1BhdGgp
OworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIHN0cnVjdCBHZW5l
cmF0aW9uUGFyYW1zIHsKKyAgICAgICAgLy8gRXh0cmEgcGFyYW1ldGVycyB0byB0aGUgR2VuZXJh
dG9yRnVuY3Rpb24gYXJlIG1hZGUgaW50byBmaWVsZHMgb2YgdGhpcyBzdHJ1Y3QsIHNvIHRoYXQg
aWYKKyAgICAgICAgLy8gd2UgYWRkIG5ldyBwYXJhbWV0ZXJzLCB3ZSBkb24ndCBoYXZlIHRvIGNo
YW5nZSBhbGwgb2YgdGhlIHVzZXJzLgorICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0IGRv
bmVKdW1wczsKKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCogZXhjZXB0aW9uSnVtcHM7
CisgICAgICAgIExhenlTbG93UGF0aCogbGF6eVNsb3dQYXRoOworICAgIH07CisKKyAgICB0eXBl
ZGVmIHZvaWQgR2VuZXJhdG9yRnVuY3Rpb24oQ0NhbGxIZWxwZXJzJiwgR2VuZXJhdGlvblBhcmFt
cyYpOworICAgIHR5cGVkZWYgU2hhcmVkVGFzazxHZW5lcmF0b3JGdW5jdGlvbj4gR2VuZXJhdG9y
OworCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICBzdGF0aWMgUmVmUHRyPEdl
bmVyYXRvcj4gY3JlYXRlR2VuZXJhdG9yKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCisgICAgewor
ICAgICAgICByZXR1cm4gY3JlYXRlU2hhcmVkVGFzazxHZW5lcmF0b3JGdW5jdGlvbj4oZnVuY3Rv
cik7CisgICAgfQorICAgIAorICAgIExhenlTbG93UGF0aCgKKyAgICAgICAgQ29kZUxvY2F0aW9u
TGFiZWwgcGF0Y2hwb2ludCwgQ29kZUxvY2F0aW9uTGFiZWwgZXhjZXB0aW9uVGFyZ2V0LAorICAg
ICAgICBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywgQ2FsbFNpdGVJbmRleCBjYWxs
U2l0ZUluZGV4LCBSZWZQdHI8R2VuZXJhdG9yPik7CisKKyAgICB+TGF6eVNsb3dQYXRoKCk7CisK
KyAgICBDb2RlTG9jYXRpb25MYWJlbCBwYXRjaHBvaW50KCkgY29uc3QgeyByZXR1cm4gbV9wYXRj
aHBvaW50OyB9CisgICAgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMoKSBjb25zdCB7
IHJldHVybiBtX3VzZWRSZWdpc3RlcnM7IH0KKyAgICBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5k
ZXgoKSBjb25zdCB7IHJldHVybiBtX2NhbGxTaXRlSW5kZXg7IH0KKworICAgIHZvaWQgZ2VuZXJh
dGUoQ29kZUJsb2NrKik7CisKKyAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgc3R1YigpIGNvbnN0
IHsgcmV0dXJuIG1fc3R1YjsgfQorCitwcml2YXRlOgorICAgIENvZGVMb2NhdGlvbkxhYmVsIG1f
cGF0Y2hwb2ludDsKKyAgICBDb2RlTG9jYXRpb25MYWJlbCBtX2V4Y2VwdGlvblRhcmdldDsKKyAg
ICBSZWdpc3RlclNldCBtX3VzZWRSZWdpc3RlcnM7CisgICAgQ2FsbFNpdGVJbmRleCBtX2NhbGxT
aXRlSW5kZXg7CisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG1fc3R1YjsKKyAgICBSZWZQdHI8
R2VuZXJhdG9yPiBtX2dlbmVyYXRvcjsKK307CisKK30gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwK
KworI2VuZGlmIC8vIEZUTExhenlTbG93UGF0aF9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMTGF6eVNsb3dQYXRoQ2FsbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9mdGwvRlRMTGF6eVNsb3dQYXRoQ2FsbC5oCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMYXp5U2xvd1BhdGhDYWxsLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKKyAqLworCisjaWZuZGVmIEZUTExhenlTbG93UGF0aENhbGxfaAorI2RlZmluZSBGVExMYXp5
U2xvd1BhdGhDYWxsX2gKKworI2luY2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUgIkNvZGVM
b2NhdGlvbi5oIgorI2luY2x1ZGUgIkZUTExhenlTbG93UGF0aC5oIgorI2luY2x1ZGUgIkZUTFNs
b3dQYXRoQ2FsbC5oIgorI2luY2x1ZGUgIkZUTFRodW5rcy5oIgorI2luY2x1ZGUgIkdQUkluZm8u
aCIKKyNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlckNvZGVSZWYuaCIKKyNpbmNsdWRlICJSZWdpc3Rl
clNldC5oIgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CisKK3RlbXBsYXRlPHR5
cGVuYW1lIFJlc3VsdFR5cGUsIHR5cGVuYW1lLi4uIEFyZ3VtZW50VHlwZXM+CitSZWZQdHI8TGF6
eVNsb3dQYXRoOjpHZW5lcmF0b3I+IGNyZWF0ZUxhenlDYWxsR2VuZXJhdG9yKAorICAgIEZ1bmN0
aW9uUHRyIGZ1bmN0aW9uLCBSZXN1bHRUeXBlIHJlc3VsdCwgQXJndW1lbnRUeXBlcy4uLiBhcmd1
bWVudHMpCit7CisgICAgcmV0dXJuIExhenlTbG93UGF0aDo6Y3JlYXRlR2VuZXJhdG9yKAorICAg
ICAgICBbPV0gKENDYWxsSGVscGVycyYgaml0LCBMYXp5U2xvd1BhdGg6OkdlbmVyYXRpb25QYXJh
bXMmIHBhcmFtcykgeworICAgICAgICAgICAgY2FsbE9wZXJhdGlvbigKKyAgICAgICAgICAgICAg
ICBwYXJhbXMubGF6eVNsb3dQYXRoLT51c2VkUmVnaXN0ZXJzKCksIGppdCwgcGFyYW1zLmxhenlT
bG93UGF0aC0+Y2FsbFNpdGVJbmRleCgpLAorICAgICAgICAgICAgICAgIHBhcmFtcy5leGNlcHRp
b25KdW1wcywgZnVuY3Rpb24sIHJlc3VsdCwgYXJndW1lbnRzLi4uKTsKKyAgICAgICAgICAgIHBh
cmFtcy5kb25lSnVtcHMuYXBwZW5kKGppdC5qdW1wKCkpOworICAgICAgICB9KTsKK30KKworfSB9
IC8vIG5hbWVzcGFjZSBKU0M6OkZUTAorCisjZW5kaWYgLy8gRlRMTGF6eVNsb3dQYXRoQ2FsbF9o
CisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xM
Vk0uY3BwCShyZXZpc2lvbiAxOTA4NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZU
TExvd2VyREZHVG9MTFZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksNiArMzksNyBAQAogI2lu
Y2x1ZGUgIkZUTEZvck9TUkVudHJ5SklUQ29kZS5oIgogI2luY2x1ZGUgIkZUTEZvcm1hdHRlZFZh
bHVlLmgiCiAjaW5jbHVkZSAiRlRMSW5saW5lQ2FjaGVTaXplLmgiCisjaW5jbHVkZSAiRlRMTGF6
eVNsb3dQYXRoQ2FsbC5oIgogI2luY2x1ZGUgIkZUTExvd2VyZWROb2RlVmFsdWUuaCIKICNpbmNs
dWRlICJGVExPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiRlRMT3V0cHV0LmgiCkBAIC01MCw2ICs1
MSw3IEBACiAjaW5jbHVkZSAiT3BlcmFuZHNJbmxpbmVzLmgiCiAjaW5jbHVkZSAiU2NvcGVkQXJn
dW1lbnRzLmgiCiAjaW5jbHVkZSAiU2NvcGVkQXJndW1lbnRzVGFibGUuaCIKKyNpbmNsdWRlICJT
Y3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IuaCIKICNpbmNsdWRlICJWaXJ0dWFsUmVnaXN0ZXIuaCIK
ICNpbmNsdWRlICJXYXRjaGRvZy5oIgogI2luY2x1ZGUgPGF0b21pYz4KQEAgLTMxNTksOSArMzE2
MSwxNSBAQCBwcml2YXRlOgogICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CiAgICAg
ICAgIAogICAgICAgICBtX291dC5hcHBlbmRUbyhzbG93UGF0aCwgY29udGludWF0aW9uKTsKLSAg
ICAgICAgTFZhbHVlIGNhbGxSZXN1bHQgPSB2bUNhbGwoCi0gICAgICAgICAgICBtX291dC5vcGVy
YXRpb24ob3BlcmF0aW9uQ3JlYXRlQWN0aXZhdGlvbkRpcmVjdCksIG1fY2FsbEZyYW1lLCB3ZWFr
UG9pbnRlcihzdHJ1Y3R1cmUpLAotICAgICAgICAgICAgc2NvcGUsIHdlYWtQb2ludGVyKHRhYmxl
KSwgbV9vdXQuY29uc3RJbnQ2NChKU1ZhbHVlOjplbmNvZGUoaW5pdGlhbGl6YXRpb25WYWx1ZSkp
KTsKKyAgICAgICAgTFZhbHVlIGNhbGxSZXN1bHQgPSBsYXp5U2xvd1BhdGgoCisgICAgICAgICAg
ICBbPV0gKGNvbnN0IFZlY3RvcjxMb2NhdGlvbj4mIGxvY2F0aW9ucykgLT4gUmVmUHRyPExhenlT
bG93UGF0aDo6R2VuZXJhdG9yPiB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxhenlD
YWxsR2VuZXJhdG9yKAorICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25DcmVhdGVBY3RpdmF0
aW9uRGlyZWN0LCBsb2NhdGlvbnNbMF0uZGlyZWN0R1BSKCksCisgICAgICAgICAgICAgICAgICAg
IENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBsb2NhdGlvbnNbMV0uZGly
ZWN0R1BSKCksCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0
cih0YWJsZSksCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTY0
KEpTVmFsdWU6OmVuY29kZShpbml0aWFsaXphdGlvblZhbHVlKSkpOworICAgICAgICAgICAgfSwK
KyAgICAgICAgICAgIHNjb3BlKTsKICAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd1Jlc3VsdCA9
IG1fb3V0LmFuY2hvcihjYWxsUmVzdWx0KTsKICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRp
b24pOwogICAgICAgICAKQEAgLTMyMTUsMTEgKzMyMjMsMjUgQEAgcHJpdmF0ZToKICAgICAgICAg
bV9vdXQuanVtcChjb250aW51YXRpb24pOwogICAgICAgICAKICAgICAgICAgbV9vdXQuYXBwZW5k
VG8oc2xvd1BhdGgsIGNvbnRpbnVhdGlvbik7Ci0gICAgICAgIAotICAgICAgICBMVmFsdWUgY2Fs
bFJlc3VsdCA9IGlzQXJyb3dGdW5jdGlvbgotICAgICAgICAgICAgPyB2bUNhbGwobV9vdXQub3Bl
cmF0aW9uKG9wZXJhdGlvbk5ld0Fycm93RnVuY3Rpb25XaXRoSW52YWxpZGF0ZWRSZWFsbG9jYXRp
b25XYXRjaHBvaW50KSwgbV9jYWxsRnJhbWUsIHNjb3BlLCB3ZWFrUG9pbnRlcihleGVjdXRhYmxl
KSwgdGhpc1ZhbHVlKQotICAgICAgICAgICAgOiB2bUNhbGwobV9vdXQub3BlcmF0aW9uKG9wZXJh
dGlvbk5ld0Z1bmN0aW9uV2l0aEludmFsaWRhdGVkUmVhbGxvY2F0aW9uV2F0Y2hwb2ludCksIG1f
Y2FsbEZyYW1lLCBzY29wZSwgd2Vha1BvaW50ZXIoZXhlY3V0YWJsZSkpOwotICAgICAgICAKKwor
ICAgICAgICBWZWN0b3I8TFZhbHVlPiBzbG93UGF0aEFyZ3VtZW50czsKKyAgICAgICAgc2xvd1Bh
dGhBcmd1bWVudHMuYXBwZW5kKHNjb3BlKTsKKyAgICAgICAgaWYgKGlzQXJyb3dGdW5jdGlvbikK
KyAgICAgICAgICAgIHNsb3dQYXRoQXJndW1lbnRzLmFwcGVuZCh0aGlzVmFsdWUpOworICAgICAg
ICBMVmFsdWUgY2FsbFJlc3VsdCA9IGxhenlTbG93UGF0aCgKKyAgICAgICAgICAgIFs9XSAoY29u
c3QgVmVjdG9yPExvY2F0aW9uPiYgbG9jYXRpb25zKSAtPiBSZWZQdHI8TGF6eVNsb3dQYXRoOjpH
ZW5lcmF0b3I+IHsKKyAgICAgICAgICAgICAgICBpZiAoaXNBcnJvd0Z1bmN0aW9uKSB7CisgICAg
ICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVMYXp5Q2FsbEdlbmVyYXRvcigKKyAgICAgICAg
ICAgICAgICAgICAgICAgIG9wZXJhdGlvbk5ld0Fycm93RnVuY3Rpb25XaXRoSW52YWxpZGF0ZWRS
ZWFsbG9jYXRpb25XYXRjaHBvaW50LAorICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb25z
WzBdLmRpcmVjdEdQUigpLCBsb2NhdGlvbnNbMV0uZGlyZWN0R1BSKCksCisgICAgICAgICAgICAg
ICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoZXhlY3V0YWJsZSksIGxvY2F0
aW9uc1syXS5kaXJlY3RHUFIoKSk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IHJldHVybiBjcmVhdGVMYXp5Q2FsbEdlbmVyYXRvcigKKyAgICAgICAgICAgICAgICAgICAgb3Bl
cmF0aW9uTmV3RnVuY3Rpb25XaXRoSW52YWxpZGF0ZWRSZWFsbG9jYXRpb25XYXRjaHBvaW50LAor
ICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbnNbMF0uZGlyZWN0R1BSKCksIGxvY2F0aW9uc1sx
XS5kaXJlY3RHUFIoKSwKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVk
SW1tUHRyKGV4ZWN1dGFibGUpKTsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBzbG93UGF0
aEFyZ3VtZW50cyk7CiAgICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dSZXN1bHQgPSBtX291dC5h
bmNob3IoY2FsbFJlc3VsdCk7CiAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKICAg
ICAgICAgCkBAIC0zMjcxLDkgKzMyOTMsMTMgQEAgcHJpdmF0ZToKICAgICAgICAgbV9vdXQuanVt
cChjb250aW51YXRpb24pOwogICAgICAgICAKICAgICAgICAgbV9vdXQuYXBwZW5kVG8oc2xvd1Bh
dGgsIGNvbnRpbnVhdGlvbik7Ci0gICAgICAgIExWYWx1ZSBjYWxsUmVzdWx0ID0gdm1DYWxsKAot
ICAgICAgICAgICAgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbkNyZWF0ZURpcmVjdEFyZ3VtZW50
cyksIG1fY2FsbEZyYW1lLCB3ZWFrUG9pbnRlcihzdHJ1Y3R1cmUpLAotICAgICAgICAgICAgbGVu
Z3RoLnZhbHVlLCBtX291dC5jb25zdEludDMyKG1pbkNhcGFjaXR5KSk7CisgICAgICAgIExWYWx1
ZSBjYWxsUmVzdWx0ID0gbGF6eVNsb3dQYXRoKAorICAgICAgICAgICAgWz1dIChjb25zdCBWZWN0
b3I8TG9jYXRpb24+JiBsb2NhdGlvbnMpIC0+IFJlZlB0cjxMYXp5U2xvd1BhdGg6OkdlbmVyYXRv
cj4geworICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVMYXp5Q2FsbEdlbmVyYXRvcigKKyAg
ICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uQ3JlYXRlRGlyZWN0QXJndW1lbnRzLCBsb2NhdGlv
bnNbMF0uZGlyZWN0R1BSKCksCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1
c3RlZEltbVB0cihzdHJ1Y3R1cmUpLCBsb2NhdGlvbnNbMV0uZGlyZWN0R1BSKCksCisgICAgICAg
ICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKG1pbkNhcGFjaXR5KSk7Cisg
ICAgICAgICAgICB9LCBsZW5ndGgudmFsdWUpOwogICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93
UmVzdWx0ID0gbV9vdXQuYW5jaG9yKGNhbGxSZXN1bHQpOwogICAgICAgICBtX291dC5qdW1wKGNv
bnRpbnVhdGlvbik7CiAgICAgICAgIApAQCAtMzU2Myw5ICszNTg5LDE0IEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICBtX291dC5hcHBlbmRUbyhzbG93Q2FzZSwgY29udGludWF0aW9uKTsKICAgICAg
ICAgICAgIExWYWx1ZSBzdHJ1Y3R1cmVWYWx1ZSA9IG1fb3V0LnBoaSgKICAgICAgICAgICAgICAg
ICBtX291dC5pbnRQdHIsIGxhcmdlU3RydWN0dXJlLCBmYWlsU3RydWN0dXJlKTsKLSAgICAgICAg
ICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dSZXN1bHQgPSBtX291dC5hbmNob3Iodm1DYWxsKAotICAg
ICAgICAgICAgICAgIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplKSwK
LSAgICAgICAgICAgICAgICBtX2NhbGxGcmFtZSwgc3RydWN0dXJlVmFsdWUsIHB1YmxpY0xlbmd0
aCkpOworICAgICAgICAgICAgTFZhbHVlIHNsb3dSZXN1bHRWYWx1ZSA9IGxhenlTbG93UGF0aCgK
KyAgICAgICAgICAgICAgICBbPV0gKGNvbnN0IFZlY3RvcjxMb2NhdGlvbj4mIGxvY2F0aW9ucykg
LT4gUmVmUHRyPExhenlTbG93UGF0aDo6R2VuZXJhdG9yPiB7CisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBjcmVhdGVMYXp5Q2FsbEdlbmVyYXRvcigKKyAgICAgICAgICAgICAgICAgICAgICAg
IG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemUsIGxvY2F0aW9uc1swXS5kaXJlY3RHUFIoKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uc1sxXS5kaXJlY3RHUFIoKSwgbG9jYXRpb25z
WzJdLmRpcmVjdEdQUigpKTsKKyAgICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgIHN0
cnVjdHVyZVZhbHVlLCBwdWJsaWNMZW5ndGgpOworICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sg
c2xvd1Jlc3VsdCA9IG1fb3V0LmFuY2hvcihzbG93UmVzdWx0VmFsdWUpOwogICAgICAgICAgICAg
bV9vdXQuanVtcChjb250aW51YXRpb24pOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBtX291
dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKQEAgLTM3NjIsMjAgKzM3OTMsMjkg
QEAgcHJpdmF0ZToKICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwogICAgICAgICAK
ICAgICAgICAgbV9vdXQuYXBwZW5kVG8oc2xvd1BhdGgsIGNvbnRpbnVhdGlvbik7Ci0gICAgICAg
IFZhbHVlRnJvbUJsb2NrIHNsb3dSZXN1bHQ7CisgICAgICAgIExWYWx1ZSBzbG93UmVzdWx0VmFs
dWU7CiAgICAgICAgIHN3aXRjaCAobnVtS2lkcykgewogICAgICAgICBjYXNlIDI6Ci0gICAgICAg
ICAgICBzbG93UmVzdWx0ID0gbV9vdXQuYW5jaG9yKHZtQ2FsbCgKLSAgICAgICAgICAgICAgICBt
X291dC5vcGVyYXRpb24ob3BlcmF0aW9uTWFrZVJvcGUyKSwgbV9jYWxsRnJhbWUsIGtpZHNbMF0s
IGtpZHNbMV0pKTsKKyAgICAgICAgICAgIHNsb3dSZXN1bHRWYWx1ZSA9IGxhenlTbG93UGF0aCgK
KyAgICAgICAgICAgICAgICBbPV0gKGNvbnN0IFZlY3RvcjxMb2NhdGlvbj4mIGxvY2F0aW9ucykg
LT4gUmVmUHRyPExhenlTbG93UGF0aDo6R2VuZXJhdG9yPiB7CisgICAgICAgICAgICAgICAgICAg
IHJldHVybiBjcmVhdGVMYXp5Q2FsbEdlbmVyYXRvcigKKyAgICAgICAgICAgICAgICAgICAgICAg
IG9wZXJhdGlvbk1ha2VSb3BlMiwgbG9jYXRpb25zWzBdLmRpcmVjdEdQUigpLCBsb2NhdGlvbnNb
MV0uZGlyZWN0R1BSKCksCisgICAgICAgICAgICAgICAgICAgICAgICBsb2NhdGlvbnNbMl0uZGly
ZWN0R1BSKCkpOworICAgICAgICAgICAgICAgIH0sIGtpZHNbMF0sIGtpZHNbMV0pOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgIGNhc2UgMzoKLSAgICAgICAgICAgIHNsb3dSZXN1bHQgPSBt
X291dC5hbmNob3Iodm1DYWxsKAotICAgICAgICAgICAgICAgIG1fb3V0Lm9wZXJhdGlvbihvcGVy
YXRpb25NYWtlUm9wZTMpLCBtX2NhbGxGcmFtZSwga2lkc1swXSwga2lkc1sxXSwga2lkc1syXSkp
OworICAgICAgICAgICAgc2xvd1Jlc3VsdFZhbHVlID0gbGF6eVNsb3dQYXRoKAorICAgICAgICAg
ICAgICAgIFs9XSAoY29uc3QgVmVjdG9yPExvY2F0aW9uPiYgbG9jYXRpb25zKSAtPiBSZWZQdHI8
TGF6eVNsb3dQYXRoOjpHZW5lcmF0b3I+IHsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGNy
ZWF0ZUxhenlDYWxsR2VuZXJhdG9yKAorICAgICAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9u
TWFrZVJvcGUzLCBsb2NhdGlvbnNbMF0uZGlyZWN0R1BSKCksIGxvY2F0aW9uc1sxXS5kaXJlY3RH
UFIoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uc1syXS5kaXJlY3RHUFIoKSwg
bG9jYXRpb25zWzNdLmRpcmVjdEdQUigpKTsKKyAgICAgICAgICAgICAgICB9LCBraWRzWzBdLCBr
aWRzWzFdLCBraWRzWzJdKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICBkZWZhdWx0Ogog
ICAgICAgICAgICAgREZHX0NSQVNIKG1fZ3JhcGgsIG1fbm9kZSwgIkJhZCBudW1iZXIgb2YgY2hp
bGRyZW4iKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CisgICAgICAgIFZhbHVlRnJv
bUJsb2NrIHNsb3dSZXN1bHQgPSBtX291dC5hbmNob3Ioc2xvd1Jlc3VsdFZhbHVlKTsKICAgICAg
ICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwogICAgICAgICAKICAgICAgICAgbV9vdXQuYXBw
ZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CkBAIC00MTMyLDcgKzQxNzIsMTEgQEAgcHJp
dmF0ZToKICAgICAgICAgCiAgICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBw
ZW5kVG8oaXNOb3RJbnZhbGlkYXRlZCwgY29udGludWF0aW9uKTsKIAotICAgICAgICB2bUNhbGwo
bV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbk5vdGlmeVdyaXRlKSwgbV9jYWxsRnJhbWUsIG1fb3V0
LmNvbnN0SW50UHRyKHNldCkpOworICAgICAgICBsYXp5U2xvd1BhdGgoCisgICAgICAgICAgICBb
PV0gKGNvbnN0IFZlY3RvcjxMb2NhdGlvbj4mKSAtPiBSZWZQdHI8TGF6eVNsb3dQYXRoOjpHZW5l
cmF0b3I+IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlTGF6eUNhbGxHZW5lcmF0b3Io
CisgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbk5vdGlmeVdyaXRlLCBJbnZhbGlkR1BSUmVn
LCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoc2V0KSk7CisgICAgICAgICAgICB9KTsKICAg
ICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwogICAgICAgICAKICAgICAgICAgbV9vdXQu
YXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CkBAIC00OTc4LDEwICs1MDIyLDEzIEBA
IHByaXZhdGU6CiAgICAgICAgICAgICByYXJlbHkoc2xvd1BhdGgpLCB1c3VhbGx5KGNvbnRpbnVh
dGlvbikpOwogICAgICAgICAKICAgICAgICAgbV9vdXQuYXBwZW5kVG8oc2xvd1BhdGgsIG5vdENl
bGxDYXNlKTsKLSAgICAgICAgTFZhbHVlIHNsb3dSZXN1bHRWYWx1ZSA9IHZtQ2FsbCgKLSAgICAg
ICAgICAgIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25PYmplY3RJc09iamVjdCksIG1fY2FsbEZy
YW1lLCB3ZWFrUG9pbnRlcihnbG9iYWxPYmplY3QpLAotICAgICAgICAgICAgdmFsdWUpOwotICAg
ICAgICBWYWx1ZUZyb21CbG9jayBzbG93UmVzdWx0ID0gbV9vdXQuYW5jaG9yKG1fb3V0Lm5vdE51
bGwoc2xvd1Jlc3VsdFZhbHVlKSk7CisgICAgICAgIExWYWx1ZSBzbG93UmVzdWx0VmFsdWUgPSBs
YXp5U2xvd1BhdGgoCisgICAgICAgICAgICBbPV0gKGNvbnN0IFZlY3RvcjxMb2NhdGlvbj4mIGxv
Y2F0aW9ucykgLT4gUmVmUHRyPExhenlTbG93UGF0aDo6R2VuZXJhdG9yPiB7CisgICAgICAgICAg
ICAgICAgcmV0dXJuIGNyZWF0ZUxhenlDYWxsR2VuZXJhdG9yKAorICAgICAgICAgICAgICAgICAg
ICBvcGVyYXRpb25PYmplY3RJc09iamVjdCwgbG9jYXRpb25zWzBdLmRpcmVjdEdQUigpLAorICAg
ICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoZ2xvYmFsT2JqZWN0
KSwgbG9jYXRpb25zWzFdLmRpcmVjdEdQUigpKTsKKyAgICAgICAgICAgIH0sIHZhbHVlKTsKKyAg
ICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd1Jlc3VsdCA9IG1fb3V0LmFuY2hvcihtX291dC5ub3Ra
ZXJvNjQoc2xvd1Jlc3VsdFZhbHVlKSk7CiAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9u
KTsKICAgICAgICAgCiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKG5vdENlbGxDYXNlLCBjb250aW51
YXRpb24pOwpAQCAtNTAyNSw5ICs1MDcyLDEyIEBAIHByaXZhdGU6CiAgICAgICAgICAgICByYXJl
bHkoc2xvd1BhdGgpLCB1c3VhbGx5KGNvbnRpbnVhdGlvbikpOwogICAgICAgICAKICAgICAgICAg
bV9vdXQuYXBwZW5kVG8oc2xvd1BhdGgsIGNvbnRpbnVhdGlvbik7Ci0gICAgICAgIExWYWx1ZSBz
bG93UmVzdWx0VmFsdWUgPSB2bUNhbGwoCi0gICAgICAgICAgICBtX291dC5vcGVyYXRpb24ob3Bl
cmF0aW9uT2JqZWN0SXNGdW5jdGlvbiksIG1fY2FsbEZyYW1lLCB3ZWFrUG9pbnRlcihnbG9iYWxP
YmplY3QpLAotICAgICAgICAgICAgdmFsdWUpOworICAgICAgICBMVmFsdWUgc2xvd1Jlc3VsdFZh
bHVlID0gbGF6eVNsb3dQYXRoKAorICAgICAgICAgICAgWz1dIChjb25zdCBWZWN0b3I8TG9jYXRp
b24+JiBsb2NhdGlvbnMpIC0+IFJlZlB0cjxMYXp5U2xvd1BhdGg6OkdlbmVyYXRvcj4geworICAg
ICAgICAgICAgICAgIHJldHVybiBjcmVhdGVMYXp5Q2FsbEdlbmVyYXRvcigKKyAgICAgICAgICAg
ICAgICAgICAgb3BlcmF0aW9uT2JqZWN0SXNGdW5jdGlvbiwgbG9jYXRpb25zWzBdLmRpcmVjdEdQ
UigpLAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoZ2xv
YmFsT2JqZWN0KSwgbG9jYXRpb25zWzFdLmRpcmVjdEdQUigpKTsKKyAgICAgICAgICAgIH0sIHZh
bHVlKTsKICAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd1Jlc3VsdCA9IG1fb3V0LmFuY2hvciht
X291dC5ub3ROdWxsKHNsb3dSZXN1bHRWYWx1ZSkpOwogICAgICAgICBtX291dC5qdW1wKGNvbnRp
bnVhdGlvbik7CiAgICAgICAgIApAQCAtNTA2Niw3ICs1MTE2LDcgQEAgcHJpdmF0ZToKICAgICAg
ICAgaWYgKEpTU3RyaW5nKiBzdHJpbmcgPSBtX25vZGUtPmNoaWxkMSgpLT5keW5hbWljQ2FzdENv
bnN0YW50PEpTU3RyaW5nKj4oKSkgewogICAgICAgICAgICAgaWYgKHN0cmluZy0+dHJ5R2V0VmFs
dWVJbXBsKCkgJiYgc3RyaW5nLT50cnlHZXRWYWx1ZUltcGwoKS0+aXNBdG9taWMoKSkgewogCi0g
ICAgICAgICAgICAgICAgY29uc3QgYXV0byBzdHIgPSBzdGF0aWNfY2FzdDxjb25zdCBBdG9taWNT
dHJpbmdJbXBsKj4oc3RyaW5nLT50cnlHZXRWYWx1ZUltcGwoKSk7CisgICAgICAgICAgICAgICAg
VW5pcXVlZFN0cmluZ0ltcGwqIHN0ciA9IGJpdHdpc2VfY2FzdDxVbmlxdWVkU3RyaW5nSW1wbCo+
KHN0cmluZy0+dHJ5R2V0VmFsdWVJbXBsKCkpOwogICAgICAgICAgICAgICAgIHVuc2lnbmVkIHN0
YWNrbWFwSUQgPSBtX3N0YWNrbWFwSURzKys7CiAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICBMVmFsdWUgY2FsbCA9IG1fb3V0LmNhbGwoCkBAIC01NDYwLDEyICs1NTEwLDE2IEBAIHByaXZh
dGU6CiAgICAgICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwogICAgICAgICAg
ICAgICAgIAogICAgICAgICAgICAgICAgIG1fb3V0LmFwcGVuZFRvKHNsb3dQYXRoLCBjb250aW51
YXRpb24pOwotICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIFZhbHVlRnJvbUJsb2Nr
IHNsb3dPYmplY3QgPSBtX291dC5hbmNob3Iodm1DYWxsKAotICAgICAgICAgICAgICAgICAgICBt
X291dC5vcGVyYXRpb24ob3BlcmF0aW9uTmV3T2JqZWN0V2l0aEJ1dHRlcmZseSksCi0gICAgICAg
ICAgICAgICAgICAgIG1fY2FsbEZyYW1lLCBtX291dC5jb25zdEludFB0cihzdHJ1Y3R1cmUpKSk7
CisKKyAgICAgICAgICAgICAgICBMVmFsdWUgc2xvd09iamVjdFZhbHVlID0gbGF6eVNsb3dQYXRo
KAorICAgICAgICAgICAgICAgICAgICBbPV0gKGNvbnN0IFZlY3RvcjxMb2NhdGlvbj4mIGxvY2F0
aW9ucykgLT4gUmVmUHRyPExhenlTbG93UGF0aDo6R2VuZXJhdG9yPiB7CisgICAgICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gY3JlYXRlTGF6eUNhbGxHZW5lcmF0b3IoCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgb3BlcmF0aW9uTmV3T2JqZWN0V2l0aEJ1dHRlcmZseSwgbG9jYXRpb25z
WzBdLmRpcmVjdEdQUigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbVB0cihzdHJ1Y3R1cmUpKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7Cisg
ICAgICAgICAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd09iamVjdCA9IG1fb3V0LmFuY2hvcihz
bG93T2JqZWN0VmFsdWUpOwogICAgICAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dCdXR0
ZXJmbHkgPSBtX291dC5hbmNob3IoCi0gICAgICAgICAgICAgICAgICAgIG1fb3V0LmxvYWRQdHIo
c2xvd09iamVjdC52YWx1ZSgpLCBtX2hlYXBzLkpTT2JqZWN0X2J1dHRlcmZseSkpOworICAgICAg
ICAgICAgICAgICAgICBtX291dC5sb2FkUHRyKHNsb3dPYmplY3RWYWx1ZSwgbV9oZWFwcy5KU09i
amVjdF9idXR0ZXJmbHkpKTsKICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgICBtX291
dC5qdW1wKGNvbnRpbnVhdGlvbik7CiAgICAgICAgICAgICAgICAgCkBAIC01NTM3LDkgKzU1OTEs
MTQgQEAgcHJpdmF0ZToKICAgICAgICAgLy8gYmVjYXVzZSBhbGwgZmllbGRzIHdpbGwgYmUgb3Zl
cndyaXR0ZW4uCiAgICAgICAgIC8vIEZJWE1FOiBJdCBtYXkgYmUgd29ydGggY3JlYXRpbmcgYW4g
b3BlcmF0aW9uIHRoYXQgY2FsbHMgYSBjb25zdHJ1Y3RvciBvbiBKU0xleGljYWxFbnZpcm9ubWVu
dCB0aGF0IAogICAgICAgICAvLyBkb2Vzbid0IGluaXRpYWxpemUgZXZlcnkgc2xvdCBiZWNhdXNl
IHdlIGFyZSBndWFyYW50ZWVkIHRvIGRvIHRoYXQgaGVyZS4KLSAgICAgICAgTFZhbHVlIGNhbGxS
ZXN1bHQgPSB2bUNhbGwoCi0gICAgICAgICAgICBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uQ3Jl
YXRlQWN0aXZhdGlvbkRpcmVjdCksIG1fY2FsbEZyYW1lLCB3ZWFrUG9pbnRlcihzdHJ1Y3R1cmUp
LAotICAgICAgICAgICAgc2NvcGUsIHdlYWtQb2ludGVyKHRhYmxlKSwgbV9vdXQuY29uc3RJbnQ2
NChKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSkpKTsKKyAgICAgICAgTFZhbHVlIGNhbGxS
ZXN1bHQgPSBsYXp5U2xvd1BhdGgoCisgICAgICAgICAgICBbPV0gKGNvbnN0IFZlY3RvcjxMb2Nh
dGlvbj4mIGxvY2F0aW9ucykgLT4gUmVmUHRyPExhenlTbG93UGF0aDo6R2VuZXJhdG9yPiB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxhenlDYWxsR2VuZXJhdG9yKAorICAgICAgICAg
ICAgICAgICAgICBvcGVyYXRpb25DcmVhdGVBY3RpdmF0aW9uRGlyZWN0LCBsb2NhdGlvbnNbMF0u
ZGlyZWN0R1BSKCksCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bVB0cihzdHJ1Y3R1cmUpLCBsb2NhdGlvbnNbMV0uZGlyZWN0R1BSKCksCisgICAgICAgICAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cih0YWJsZSksCisgICAgICAgICAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTY0KEpTVmFsdWU6OmVuY29kZShqc1VuZGVm
aW5lZCgpKSkpOworICAgICAgICAgICAgfSwgc2NvcGUpOwogICAgICAgICBWYWx1ZUZyb21CbG9j
ayBzbG93UmVzdWx0ID0gIG1fb3V0LmFuY2hvcihjYWxsUmVzdWx0KTsKICAgICAgICAgbV9vdXQu
anVtcChjb250aW51YXRpb24pOwogCkBAIC01NTgxLDcgKzU2NDAsMTAgQEAgcHJpdmF0ZToKIAog
ICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKHRpbWVyRGlkRmly
ZSwgY29udGludWF0aW9uKTsKIAotICAgICAgICB2bUNhbGwobV9vdXQub3BlcmF0aW9uKG9wZXJh
dGlvbkhhbmRsZVdhdGNoZG9nVGltZXIpLCBtX2NhbGxGcmFtZSk7CisgICAgICAgIGxhenlTbG93
UGF0aCgKKyAgICAgICAgICAgIFs9XSAoY29uc3QgVmVjdG9yPExvY2F0aW9uPiYpIC0+IFJlZlB0
cjxMYXp5U2xvd1BhdGg6OkdlbmVyYXRvcj4geworICAgICAgICAgICAgICAgIHJldHVybiBjcmVh
dGVMYXp5Q2FsbEdlbmVyYXRvcihvcGVyYXRpb25IYW5kbGVXYXRjaGRvZ1RpbWVyLCBJbnZhbGlk
R1BSUmVnKTsKKyAgICAgICAgICAgIH0pOwogICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlv
bik7CiAgICAgICAgIAogICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3RO
ZXh0KTsKQEAgLTYwMTUsMTMgKzYwNzcsMTkgQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAg
IExWYWx1ZSBzbG93QnV0dGVyZmx5VmFsdWU7CiAgICAgICAgIGlmIChzaXplSW5WYWx1ZXMgPT0g
aW5pdGlhbE91dE9mTGluZUNhcGFjaXR5KSB7Ci0gICAgICAgICAgICBzbG93QnV0dGVyZmx5VmFs
dWUgPSB2bUNhbGwoCi0gICAgICAgICAgICAgICAgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbkFs
bG9jYXRlUHJvcGVydHlTdG9yYWdlV2l0aEluaXRpYWxDYXBhY2l0eSksCi0gICAgICAgICAgICAg
ICAgbV9jYWxsRnJhbWUpOworICAgICAgICAgICAgc2xvd0J1dHRlcmZseVZhbHVlID0gbGF6eVNs
b3dQYXRoKAorICAgICAgICAgICAgICAgIFs9XSAoY29uc3QgVmVjdG9yPExvY2F0aW9uPiYgbG9j
YXRpb25zKSAtPiBSZWZQdHI8TGF6eVNsb3dQYXRoOjpHZW5lcmF0b3I+IHsKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGNyZWF0ZUxhenlDYWxsR2VuZXJhdG9yKAorICAgICAgICAgICAgICAg
ICAgICAgICAgb3BlcmF0aW9uQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2VXaXRoSW5pdGlhbENhcGFj
aXR5LAorICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb25zWzBdLmRpcmVjdEdQUigpKTsK
KyAgICAgICAgICAgICAgICB9KTsKICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHNsb3dC
dXR0ZXJmbHlWYWx1ZSA9IHZtQ2FsbCgKLSAgICAgICAgICAgICAgICBtX291dC5vcGVyYXRpb24o
b3BlcmF0aW9uQWxsb2NhdGVQcm9wZXJ0eVN0b3JhZ2UpLAotICAgICAgICAgICAgICAgIG1fY2Fs
bEZyYW1lLCBtX291dC5jb25zdEludFB0cihzaXplSW5WYWx1ZXMpKTsKKyAgICAgICAgICAgIHNs
b3dCdXR0ZXJmbHlWYWx1ZSA9IGxhenlTbG93UGF0aCgKKyAgICAgICAgICAgICAgICBbPV0gKGNv
bnN0IFZlY3RvcjxMb2NhdGlvbj4mIGxvY2F0aW9ucykgLT4gUmVmUHRyPExhenlTbG93UGF0aDo6
R2VuZXJhdG9yPiB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVMYXp5Q2FsbEdl
bmVyYXRvcigKKyAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbkFsbG9jYXRlUHJvcGVy
dHlTdG9yYWdlLCBsb2NhdGlvbnNbMF0uZGlyZWN0R1BSKCksCisgICAgICAgICAgICAgICAgICAg
ICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoc2l6ZUluVmFsdWVzKSk7CisgICAgICAg
ICAgICAgICAgfSk7CiAgICAgICAgIH0KICAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd0J1dHRl
cmZseSA9IG1fb3V0LmFuY2hvcihzbG93QnV0dGVyZmx5VmFsdWUpOwogICAgICAgICAKQEAgLTYz
MDMsOSArNjM3MSwxNCBAQCBwcml2YXRlOgogICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlv
bik7CiAgICAgICAgIAogICAgICAgICBtX291dC5hcHBlbmRUbyhzbG93UGF0aCwgY29udGludWF0
aW9uKTsKLSAgICAgICAgCi0gICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dSZXN1bHQgPSBtX291
dC5hbmNob3Iodm1DYWxsKAotICAgICAgICAgICAgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbk5l
d09iamVjdCksIG1fY2FsbEZyYW1lLCBtX291dC5jb25zdEludFB0cihzdHJ1Y3R1cmUpKSk7CisK
KyAgICAgICAgTFZhbHVlIHNsb3dSZXN1bHRWYWx1ZSA9IGxhenlTbG93UGF0aCgKKyAgICAgICAg
ICAgIFs9XSAoY29uc3QgVmVjdG9yPExvY2F0aW9uPiYgbG9jYXRpb25zKSAtPiBSZWZQdHI8TGF6
eVNsb3dQYXRoOjpHZW5lcmF0b3I+IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlTGF6
eUNhbGxHZW5lcmF0b3IoCisgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbk5ld09iamVjdCwg
bG9jYXRpb25zWzBdLmRpcmVjdEdQUigpLAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBl
cnM6OlRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSk7CisgICAgICAgICAgICB9KTsKKyAgICAgICAg
VmFsdWVGcm9tQmxvY2sgc2xvd1Jlc3VsdCA9IG1fb3V0LmFuY2hvcihzbG93UmVzdWx0VmFsdWUp
OwogICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CiAgICAgICAgIAogICAgICAgICBt
X291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKQEAgLTYzNzcsMTAgKzY0NTAs
MTQgQEAgcHJpdmF0ZToKICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwogICAgICAg
ICAKICAgICAgICAgbV9vdXQuYXBwZW5kVG8oc2xvd1BhdGgsIGNvbnRpbnVhdGlvbik7Ci0gICAg
ICAgIAotICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93QXJyYXkgPSBtX291dC5hbmNob3Iodm1D
YWxsKAotICAgICAgICAgICAgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbk5ld0FycmF5V2l0aFNp
emUpLCBtX2NhbGxGcmFtZSwKLSAgICAgICAgICAgIG1fb3V0LmNvbnN0SW50UHRyKHN0cnVjdHVy
ZSksIG1fb3V0LmNvbnN0SW50MzIobnVtRWxlbWVudHMpKSk7CisKKyAgICAgICAgTFZhbHVlIHNs
b3dBcnJheVZhbHVlID0gbGF6eVNsb3dQYXRoKAorICAgICAgICAgICAgWz1dIChjb25zdCBWZWN0
b3I8TG9jYXRpb24+JiBsb2NhdGlvbnMpIC0+IFJlZlB0cjxMYXp5U2xvd1BhdGg6OkdlbmVyYXRv
cj4geworICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVMYXp5Q2FsbEdlbmVyYXRvcigKKyAg
ICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZSwgbG9jYXRpb25zWzBd
LmRpcmVjdEdQUigpLAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJ
bW1QdHIoc3RydWN0dXJlKSwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIobnVtRWxlbWVudHMp
KTsKKyAgICAgICAgICAgIH0pOworICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93QXJyYXkgPSBt
X291dC5hbmNob3Ioc2xvd0FycmF5VmFsdWUpOwogICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93
QnV0dGVyZmx5ID0gbV9vdXQuYW5jaG9yKAogICAgICAgICAgICAgbV9vdXQubG9hZFB0cihzbG93
QXJyYXkudmFsdWUoKSwgbV9oZWFwcy5KU09iamVjdF9idXR0ZXJmbHkpKTsKIApAQCAtNzA0OSwx
NCArNzEyNiwxNyBAQCBwcml2YXRlOgogICAgICAgICBmdW5jdG9yKFR5cGVvZlR5cGU6Ok9iamVj
dCk7CiAgICAgICAgIAogICAgICAgICBtX291dC5hcHBlbmRUbyhzbG93UGF0aCwgdW5yZWFjaGFi
bGUpOwotICAgICAgICBMVmFsdWUgcmVzdWx0ID0gdm1DYWxsKAotICAgICAgICAgICAgbV9vdXQu
b3BlcmF0aW9uKG9wZXJhdGlvblR5cGVPZk9iamVjdEFzVHlwZW9mVHlwZSksIG1fY2FsbEZyYW1l
LAotICAgICAgICAgICAgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwgdmFsdWUpOworICAgICAg
ICBMVmFsdWUgcmVzdWx0ID0gbGF6eVNsb3dQYXRoKAorICAgICAgICAgICAgWz1dIChjb25zdCBW
ZWN0b3I8TG9jYXRpb24+JiBsb2NhdGlvbnMpIC0+IFJlZlB0cjxMYXp5U2xvd1BhdGg6OkdlbmVy
YXRvcj4geworICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVMYXp5Q2FsbEdlbmVyYXRvcigK
KyAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uVHlwZU9mT2JqZWN0QXNUeXBlb2ZUeXBlLCBs
b2NhdGlvbnNbMF0uZGlyZWN0R1BSKCksCisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbVB0cihnbG9iYWxPYmplY3QpLCBsb2NhdGlvbnNbMV0uZGlyZWN0R1BSKCkp
OworICAgICAgICAgICAgfSwgdmFsdWUpOwogICAgICAgICBWZWN0b3I8U3dpdGNoQ2FzZSwgMz4g
Y2FzZXM7CiAgICAgICAgIGNhc2VzLmFwcGVuZChTd2l0Y2hDYXNlKG1fb3V0LmNvbnN0SW50MzIo
c3RhdGljX2Nhc3Q8aW50MzJfdD4oVHlwZW9mVHlwZTo6VW5kZWZpbmVkKSksIHVuZGVmaW5lZENh
c2UpKTsKICAgICAgICAgY2FzZXMuYXBwZW5kKFN3aXRjaENhc2UobV9vdXQuY29uc3RJbnQzMihz
dGF0aWNfY2FzdDxpbnQzMl90PihUeXBlb2ZUeXBlOjpPYmplY3QpKSwgcmVhbGx5T2JqZWN0Q2Fz
ZSkpOwogICAgICAgICBjYXNlcy5hcHBlbmQoU3dpdGNoQ2FzZShtX291dC5jb25zdEludDMyKHN0
YXRpY19jYXN0PGludDMyX3Q+KFR5cGVvZlR5cGU6OkZ1bmN0aW9uKSksIGZ1bmN0aW9uQ2FzZSkp
OwotICAgICAgICBtX291dC5zd2l0Y2hJbnN0cnVjdGlvbihyZXN1bHQsIGNhc2VzLCB1bnJlYWNo
YWJsZSwgV2VpZ2h0KCkpOworICAgICAgICBtX291dC5zd2l0Y2hJbnN0cnVjdGlvbihtX291dC5j
YXN0VG9JbnQzMihyZXN1bHQpLCBjYXNlcywgdW5yZWFjaGFibGUsIFdlaWdodCgpKTsKICAgICAg
ICAgCiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKHVucmVhY2hhYmxlLCBub3RPYmplY3RDYXNlKTsK
ICAgICAgICAgbV9vdXQudW5yZWFjaGFibGUoKTsKQEAgLTcxNjMsNiArNzI0MywxMTEgQEAgcHJp
dmF0ZToKICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CiAg
ICAgICAgIHJldHVybiBtX291dC5waGkobV9vdXQuaW50MzIsIGZhc3RSZXN1bHQsIHNsb3dSZXN1
bHQpOwogICAgIH0KKworICAgIC8vIFRoaXMgaXMgYSBtZWNoYW5pc20gZm9yIGNyZWF0aW5nIGEg
Y29kZSBnZW5lcmF0b3IgdGhhdCBmaWxscyBpbiBhIGdhcCBpbiB0aGUgY29kZSB1c2luZyBvdXIK
KyAgICAvLyBvd24gTWFjcm9Bc3NlbWJsZXIuIFRoaXMgaXMgdXNlZnVsIGZvciBzbG93IHBhdGhz
IHRoYXQgaW52b2x2ZSBhIGxvdCBvZiBjb2RlIGFuZCB3ZSBkb24ndCB3YW50CisgICAgLy8gdG8g
cGF5IHRoZSBwcmljZSBvZiBMTFZNIG9wdGltaXppbmcgaXQuIEEgbGF6eSBzbG93IHBhdGggd2ls
bCBvbmx5IGJlIGdlbmVyYXRlZCBpZiBpdCBhY3R1YWxseQorICAgIC8vIGV4ZWN1dGVzLiBPbiB0
aGUgb3RoZXIgaGFuZCwgYSBsYXp5IHNsb3cgcGF0aCBhbHdheXMgaW5jdXJzIHRoZSBjb3N0IG9m
IHR3byBhZGRpdGlvbmFsIGp1bXBzLgorICAgIC8vIEFsc28sIHRoZSBsYXp5IHNsb3cgcGF0aCdz
IHJlZ2lzdGVyIGFsbG9jYXRpb24gc3RhdGUgaXMgc2xhdmVkIHRvIHdoYXRldmVyIExMVk0gZGlk
LCBzbyB5b3UKKyAgICAvLyBoYXZlIHRvIHVzZSBhIFNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvciB0
byB0cnkgdG8gdXNlIHNvbWUgdW51c2VkIHJlZ2lzdGVycyBhbmQgeW91IG1heSBoYXZlCisgICAg
Ly8gdG8gc3BpbGwgdG8gdG9wIG9mIHN0YWNrIGlmIHRoZXJlIGFyZW4ndCBlbm91Z2ggcmVnaXN0
ZXJzIGF2YWlsYWJsZS4KKyAgICAvLworICAgIC8vIExhenkgc2xvdyBwYXRocyBpbnZvbHZlIHRo
cmVlIGRpZmZlcmVudCBzdGFnZXMgb2YgZXhlY3V0aW9uLiBFYWNoIHN0YWdlIGhhcyB1bmlxdWUK
KyAgICAvLyBjYXBhYmlsaXRpZXMgYW5kIGtub3dsZWRnZS4gVGhlIHN0YWdlcyBhcmU6CisgICAg
Ly8KKyAgICAvLyAxKSBERkctPkxMVk0gbG93ZXJpbmcsIGkuZS4gY29kZSB0aGF0IHJ1bnMgaW4g
dGhpcyBwaGFzZS4gTG93ZXJpbmcgaXMgdGhlIGxhc3QgdGltZSB5b3Ugd2lsbAorICAgIC8vICAg
IGhhdmUgYWNjZXNzIHRvIExWYWx1ZXMuIElmIHRoZXJlIGlzIGFuIExWYWx1ZSB0aGF0IG5lZWRz
IHRvIGJlIGZlZCBhcyBpbnB1dCB0byBhIGxhenkgc2xvdworICAgIC8vICAgIHBhdGgsIHRoZW4g
eW91IG11c3QgcGFzcyBpdCBhcyBhbiBhcmd1bWVudCBoZXJlIChhcyBvbmUgb2YgdGhlIHZhcmFy
Z3MgYXJndW1lbnRzIGFmdGVyIHRoZQorICAgIC8vICAgIGZ1bmN0b3IpLiBCdXQsIGxvd2VyaW5n
IGRvZXNuJ3Qga25vdyB3aGljaCByZWdpc3RlcnMgd2lsbCBiZSB1c2VkIGZvciB0aG9zZSBMVmFs
dWVzLiBIZW5jZQorICAgIC8vICAgIHlvdSBwYXNzIGEgbGFtYmRhIHRvIGxhenlTbG93UGF0aCgp
IGFuZCB0aGF0IGxhbWJkYSB3aWxsIHJ1biBkdXJpbmcgc3RhZ2UgKDIpOgorICAgIC8vCisgICAg
Ly8gMikgRlRMQ29tcGlsZS5jcHAncyBmaXhGdW5jdGlvbkJhc2VkT25TdGFja01hcHMuIFRoaXMg
Y29kZSBpcyB0aGUgb25seSBzdGFnZSBhdCB3aGljaCB3ZSBrbm93CisgICAgLy8gICAgdGhlIG1h
cHBpbmcgZnJvbSBhcmd1bWVudHMgcGFzc2VkIHRvIHRoaXMgbWV0aG9kIGluICgxKSBhbmQgdGhl
IHJlZ2lzdGVycyB0aGF0IExMVk0KKyAgICAvLyAgICBzZWxlY3RlZCBmb3IgdGhvc2UgYXJndW1l
bnRzLiBZb3UgZG9uJ3QgYWN0dWFsbHkgd2FudCB0byBnZW5lcmF0ZSBhbnkgY29kZSBoZXJlLCBz
aW5jZSB0aGVuCisgICAgLy8gICAgdGhlIHNsb3cgcGF0aCB3b3VsZG4ndCBhY3R1YWxseSBiZSBs
YXppbHkgZ2VuZXJhdGVkLiBJbnN0ZWFkLCB5b3Ugd2FudCB0byBzYXZlIHRoZQorICAgIC8vICAg
IHJlZ2lzdGVycyBiZWluZyB1c2VkIGZvciB0aGUgYXJndW1lbnRzIGFuZCBkZWZlciBjb2RlIGdl
bmVyYXRpb24gdG8gc3RhZ2UgKDMpIGJ5IGNyZWF0aW5nCisgICAgLy8gICAgYW5kIHJldHVybmlu
ZyBhIExhenlTbG93UGF0aDo6R2VuZXJhdG9yOgorICAgIC8vCisgICAgLy8gMykgTGF6eVNsb3dQ
YXRoJ3MgZ2VuZXJhdGUoKSBtZXRob2QuIFRoaXMgY29kZSBydW5zIGluIHJlc3BvbnNlIHRvIHRo
ZSBsYXp5IHNsb3cgcGF0aAorICAgIC8vICAgIGV4ZWN1dGluZyBmb3IgdGhlIGZpcnN0IHRpbWUu
IEl0IHdpbGwgY2FsbCB0aGUgZ2VuZXJhdG9yIHlvdSBjcmVhdGVkIGluIHN0YWdlICgyKS4KKyAg
ICAvLworICAgIC8vIE5vdGUgdGhhdCBlYWNoIHRpbWUgeW91IGludm9rZSBzdGFnZSAoMSksIHN0
YWdlICgyKSBtYXkgYmUgaW52b2tlZCB6ZXJvLCBvbmUsIG9yIG1hbnkgdGltZXMuCisgICAgLy8g
U3RhZ2UgKDIpIHdpbGwgdXN1YWxseSBiZSBpbnZva2VkIG9uY2UgZm9yIHN0YWdlICgxKS4gQnV0
LCBMTFZNIG1heSBraWxsIHRoZSBjb2RlLCBpbiB3aGljaAorICAgIC8vIGNhc2Ugc3RhZ2UgKDIp
IHdvbid0IHJ1bi4gTExWTSBtYXkgZHVwbGljYXRlIHRoZSBjb2RlIChmb3IgZXhhbXBsZSB2aWEg
anVtcCB0aHJlYWRpbmcpLAorICAgIC8vIGxlYWRpbmcgdG8gbWFueSBjYWxscyB0byB5b3VyIHN0
YWdlICgyKSBsYW1iZGEuIFN0YWdlICgzKSBtYXkgYmUgY2FsbGVkIHplcm8gb3Igb25jZSBmb3Ig
ZWFjaAorICAgIC8vIHN0YWdlICgyKS4gSXQgd2lsbCBiZSBjYWxsZWQgemVybyB0aW1lcyBpZiB0
aGUgc2xvdyBwYXRoIG5ldmVyIHJ1bnMuIFRoaXMgaXMgd2hhdCB5b3UgaG9wZSBmb3IKKyAgICAv
LyB3aGVuZXZlciB5b3UgdXNlIHRoZSBsYXp5U2xvd1BhdGgoKSBtZWNoYW5pc20uCisgICAgLy8K
KyAgICAvLyBBIHR5cGljYWwgdXNlIG9mIGxhenlTbG93UGF0aCgpIHdpbGwgbG9vayBsaWtlIHRo
ZSBleGFtcGxlIGJlbG93LCB3aGljaCBqdXN0IGNyZWF0ZXMgYSBzbG93CisgICAgLy8gcGF0aCB0
aGF0IGFkZHMgc29tZSB2YWx1ZSB0byB0aGUgaW5wdXQgYW5kIHJldHVybnMgaXQuCisgICAgLy8K
KyAgICAvLyAvLyBTdGFnZSAoMSkgaXMgaGVyZS4gVGhpcyBpcyB5b3VyIGxhc3QgY2hhbmNlIHRv
IGZpZ3VyZSBvdXQgd2hpY2ggTFZhbHVlcyB0byB1c2UgYXMgaW5wdXRzLgorICAgIC8vIC8vIE5v
dGljZSBob3cgd2UgcGFzcyAiaW5wdXQiIGFzIGFuIGFyZ3VtZW50IHRvIGxhenlTbG93UGF0aCgp
LgorICAgIC8vIExWYWx1ZSBpbnB1dCA9IC4uLjsKKyAgICAvLyBpbnQgYWRkZW5kID0gLi4uOwor
ICAgIC8vIExWYWx1ZSBvdXRwdXQgPSBsYXp5U2xvd1BhdGgoCisgICAgLy8gICAgIFs9XSAoY29u
c3QgVmVjdG9yPExvY2F0aW9uPiYgbG9jYXRpb25zKSAtPiBSZWZQdHI8TGF6eVNsb3dQYXRoOjpH
ZW5lcmF0b3I+IHsKKyAgICAvLyAgICAgICAgIC8vIFN0YWdlICgyKSBpcyBoZXJlLiBUaGlzIGlz
IHlvdXIgbGFzdCBjaGFuY2UgdG8gZmlndXJlIG91dCB3aGljaCByZWdpc3RlcnMgYXJlIHVzZWQK
KyAgICAvLyAgICAgICAgIC8vIGZvciB3aGljaCB2YWx1ZXMuIExvY2F0aW9uIHplcm8gaXMgYWx3
YXlzIHRoZSByZXR1cm4gdmFsdWUuIFlvdSBjYW4gaWdub3JlIGl0IGlmCisgICAgLy8gICAgICAg
ICAvLyB5b3UgZG9uJ3Qgd2FudCB0byByZXR1cm4gYW55dGhpbmcuIExvY2F0aW9uIDEgaXMgdGhl
IHJlZ2lzdGVyIGZvciB0aGUgZmlyc3QKKyAgICAvLyAgICAgICAgIC8vIGFyZ3VtZW50IHRvIHRo
ZSBsYXp5U2xvd1BhdGgoKSwgaS5lLiAiaW5wdXQiLiBOb3RlIHRoYXQgdGhlIExvY2F0aW9uIG9i
amVjdCBjb3VsZAorICAgIC8vICAgICAgICAgLy8gYWxzbyBob2xkIGFuIEZQUiwgaWYgeW91IGFy
ZSBwYXNzaW5nIGEgZG91YmxlLgorICAgIC8vICAgICAgICAgR1BSUmVnIG91dHB1dEdQUiA9IGxv
Y2F0aW9uc1swXS5kaXJlY3RHUFIoKTsKKyAgICAvLyAgICAgICAgIEdQUlJlZyBpbnB1dEdQUiA9
IGxvY2F0aW9uc1sxXS5kaXJlY3RHUFIoKTsKKyAgICAvLyAgICAgICAgIHJldHVybiBMYXp5U2xv
d1BhdGg6OmNyZWF0ZUdlbmVyYXRvcigKKyAgICAvLyAgICAgICAgICAgICBbPV0gKENDYWxsSGVs
cGVycyYgaml0LCBMYXp5U2xvd1BhdGg6OkdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAg
IC8vICAgICAgICAgICAgICAgICAvLyBTdGFnZSAoMykgaXMgaGVyZS4gVGhpcyBpcyB3aGVuIHlv
dSBnZW5lcmF0ZSBjb2RlLiBZb3UgaGF2ZSBhY2Nlc3MgdG8gdGhlCisgICAgLy8gICAgICAgICAg
ICAgICAgIC8vIHJlZ2lzdGVycyB5b3UgY29sbGVjdGVkIGluIHN0YWdlICgyKSBiZWNhdXNlIHRo
aXMgbGFtYmRhIGNsb3NlcyBvdmVyIHRob3NlCisgICAgLy8gICAgICAgICAgICAgICAgIC8vIHZh
cmlhYmxlcyAob3V0cHV0R1BSIGFuZCBpbnB1dEdQUikuIFlvdSBhbHNvIGhhdmUgYWNjZXNzIHRv
IHdoYXRldmVyIGV4dHJhCisgICAgLy8gICAgICAgICAgICAgICAgIC8vIGRhdGEgeW91IGNvbGxl
Y3RlZCBpbiBzdGFnZSAoMSksIHN1Y2ggYXMgdGhlIGFkZGVuZCBpbiB0aGlzIGNhc2UuCisgICAg
Ly8gICAgICAgICAgICAgICAgIGppdC5hZGQzMihUcnVzdGVkSW1tMzIoYWRkZW5kKSwgaW5wdXRH
UFIsIG91dHB1dEdQUik7CisgICAgLy8gICAgICAgICAgICAgICAgIC8vIFlvdSBoYXZlIHRvIGVu
ZCBieSBqdW1waW5nIHRvIGRvbmUuIFRoZXJlIGlzIG5vdGhpbmcgdG8gZmFsbCB0aHJvdWdoIHRv
LgorICAgIC8vICAgICAgICAgICAgICAgICAvLyBZb3UgY2FuIGFsc28ganVtcCB0byB0aGUgZXhj
ZXB0aW9uIGhhbmRsZXIgKHNlZSBMYXp5U2xvd1BhdGguaCBmb3IgbW9yZQorICAgIC8vICAgICAg
ICAgICAgICAgICAvLyBpbmZvKS4gTm90ZSB0aGF0IGN1cnJlbnRseSB5b3UgY2Fubm90IE9TUiBl
eGl0LgorICAgIC8vICAgICAgICAgICAgICAgICBwYXJhbXMuZG9uZUp1bXBzLmFwcGVuZChqaXQu
anVtcCgpKTsKKyAgICAvLyAgICAgICAgICAgICB9KTsKKyAgICAvLyAgICAgfSwKKyAgICAvLyAg
ICAgaW5wdXQpOworICAgIC8vCisgICAgLy8gTm90ZSB0aGF0IGlmIHlvdXIgc2xvdyBwYXRoIGlz
IG9ubHkgZG9pbmcgYSBjYWxsLCB5b3UgY2FuIHVzZSB0aGUgY3JlYXRlTGF6eUNhbGxHZW5lcmF0
b3IoKQorICAgIC8vIGhlbHBlci4gRm9yIGV4YW1wbGU6CisgICAgLy8KKyAgICAvLyBMVmFsdWUg
aW5wdXQgPSAuLi47CisgICAgLy8gTFZhbHVlIG91dHB1dCA9IGxhenlTbG93UGF0aCgKKyAgICAv
LyAgICAgWz1dIChjb25zdCBWZWN0b3I8TG9jYXRpb24+JiBsb2NhdGlvbnMpIC0+IFJlZlB0cjxM
YXp5U2xvd1BhdGg6OkdlbmVyYXRvcj4geworICAgIC8vICAgICAgICAgcmV0dXJuIGNyZWF0ZUxh
enlDYWxsR2VuZXJhdG9yKAorICAgIC8vICAgICAgICAgICAgIG9wZXJhdGlvbkRvVGhpbmdzLCBs
b2NhdGlvbnNbMF0uZGlyZWN0R1BSKCksIGxvY2F0aW9uc1sxXS5kaXJlY3RHUFIoKSk7CisgICAg
Ly8gICAgIH0pOworICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3IsIHR5cGVuYW1lLi4uIEFy
Z3VtZW50VHlwZXM+CisgICAgTFZhbHVlIGxhenlTbG93UGF0aChjb25zdCBGdW5jdG9yJiBmdW5j
dG9yLCBBcmd1bWVudFR5cGVzLi4uIGFyZ3VtZW50cykKKyAgICB7CisgICAgICAgIHJldHVybiBs
YXp5U2xvd1BhdGgoZnVuY3RvciwgVmVjdG9yPExWYWx1ZT57IGFyZ3VtZW50cy4uLiB9KTsKKyAg
ICB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgorICAgIExWYWx1ZSBsYXp5U2xv
d1BhdGgoY29uc3QgRnVuY3RvciYgZnVuY3RvciwgY29uc3QgVmVjdG9yPExWYWx1ZT4mIHVzZXJB
cmd1bWVudHMpCisgICAgeworICAgICAgICB1bnNpZ25lZCBzdGFja21hcElEID0gbV9zdGFja21h
cElEcysrOworCisgICAgICAgIFZlY3RvcjxMVmFsdWU+IGFyZ3VtZW50czsKKyAgICAgICAgYXJn
dW1lbnRzLmFwcGVuZChtX291dC5jb25zdEludDY0KHN0YWNrbWFwSUQpKTsKKyAgICAgICAgYXJn
dW1lbnRzLmFwcGVuZChtX291dC5jb25zdEludDMyKE1hY3JvQXNzZW1ibGVyOjptYXhKdW1wUmVw
bGFjZW1lbnRTaXplKCkpKTsKKyAgICAgICAgYXJndW1lbnRzLmFwcGVuZChjb25zdE51bGwobV9v
dXQucmVmOCkpOworICAgICAgICBhcmd1bWVudHMuYXBwZW5kKG1fb3V0LmNvbnN0SW50MzIodXNl
ckFyZ3VtZW50cy5zaXplKCkpKTsKKyAgICAgICAgYXJndW1lbnRzLmFwcGVuZFZlY3Rvcih1c2Vy
QXJndW1lbnRzKTsKKyAgICAgICAgTFZhbHVlIGNhbGwgPSBtX291dC5jYWxsKG1fb3V0LnBhdGNo
cG9pbnRJbnQ2NEludHJpbnNpYygpLCBhcmd1bWVudHMpOworICAgICAgICBzZXRJbnN0cnVjdGlv
bkNhbGxpbmdDb252ZW50aW9uKGNhbGwsIExMVk1BbnlSZWdDYWxsQ29udik7CisKKyAgICAgICAg
Q2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4ID0KKyAgICAgICAgICAgIG1fZnRsU3RhdGUuaml0
Q29kZS0+Y29tbW9uLmFkZENvZGVPcmlnaW4obV9ub2RlLT5vcmlnaW4uc2VtYW50aWMpOworICAg
ICAgICAKKyAgICAgICAgUmVmUHRyPExhenlTbG93UGF0aExpbmtlclRhc2s+IGxpbmtlciA9Cisg
ICAgICAgICAgICBjcmVhdGVTaGFyZWRUYXNrPExhenlTbG93UGF0aExpbmtlckZ1bmN0aW9uPihm
dW5jdG9yKTsKKworICAgICAgICBtX2Z0bFN0YXRlLmxhenlTbG93UGF0aHMuYXBwZW5kKExhenlT
bG93UGF0aERlc2NyaXB0b3Ioc3RhY2ttYXBJRCwgY2FsbFNpdGVJbmRleCwgbGlua2VyKSk7CisK
KyAgICAgICAgcmV0dXJuIGNhbGw7CisgICAgfQogICAgIAogICAgIHZvaWQgc3BlY3VsYXRlKAog
ICAgICAgICBFeGl0S2luZCBraW5kLCBGb3JtYXR0ZWRWYWx1ZSBsb3dWYWx1ZSwgTm9kZSogaGln
aFZhbHVlLCBMVmFsdWUgZmFpbENvbmRpdGlvbikKQEAgLTgyNjcsMzMgKzg0NTIsNjcgQEAgcHJp
dmF0ZToKIAogICAgIHZvaWQgZW1pdFN0b3JlQmFycmllcihMVmFsdWUgYmFzZSkKICAgICB7Ci0g
ICAgICAgIExCYXNpY0Jsb2NrIGlzTWFya2VkQW5kTm90UmVtZW1iZXJlZCA9IEZUTF9ORVdfQkxP
Q0sobV9vdXQsICgiU3RvcmUgYmFycmllciBpcyBtYXJrZWQgYmxvY2siKSk7Ci0gICAgICAgIExC
YXNpY0Jsb2NrIGJ1ZmZlckhhc1NwYWNlID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJTdG9yZSBi
YXJyaWVyIGJ1ZmZlciBoYXMgc3BhY2UiKSk7Ci0gICAgICAgIExCYXNpY0Jsb2NrIGJ1ZmZlcklz
RnVsbCA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiU3RvcmUgYmFycmllciBidWZmZXIgaXMgZnVs
bCIpKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgc2xvd1BhdGggPSBGVExfTkVXX0JMT0NLKG1fb3V0
LCAoIlN0b3JlIGJhcnJpZXIgc2xvdyBwYXRoIikpOwogICAgICAgICBMQmFzaWNCbG9jayBjb250
aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIlN0b3JlIGJhcnJpZXIgY29udGludWF0
aW9uIikpOwogCi0gICAgICAgIC8vIENoZWNrIHRoZSBtYXJrIGJ5dGUuIAotICAgICAgICBtX291
dC5icmFuY2goCi0gICAgICAgICAgICBtX291dC5ub3RaZXJvOChsb2FkQ2VsbFN0YXRlKGJhc2Up
KSwgdXN1YWxseShjb250aW51YXRpb24pLCByYXJlbHkoaXNNYXJrZWRBbmROb3RSZW1lbWJlcmVk
KSk7Ci0KLSAgICAgICAgLy8gQXBwZW5kIHRvIHRoZSB3cml0ZSBiYXJyaWVyIGJ1ZmZlci4KLSAg
ICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhpc01hcmtlZEFuZE5v
dFJlbWVtYmVyZWQsIGJ1ZmZlckhhc1NwYWNlKTsKLSAgICAgICAgTFZhbHVlIGN1cnJlbnRCdWZm
ZXJJbmRleCA9IG1fb3V0LmxvYWQzMihtX291dC5hYnNvbHV0ZSh2bSgpLmhlYXAud3JpdGVCYXJy
aWVyQnVmZmVyKCkuY3VycmVudEluZGV4QWRkcmVzcygpKSk7Ci0gICAgICAgIExWYWx1ZSBidWZm
ZXJDYXBhY2l0eSA9IG1fb3V0LmNvbnN0SW50MzIodm0oKS5oZWFwLndyaXRlQmFycmllckJ1ZmZl
cigpLmNhcGFjaXR5KCkpOwogICAgICAgICBtX291dC5icmFuY2goCi0gICAgICAgICAgICBtX291
dC5sZXNzVGhhbihjdXJyZW50QnVmZmVySW5kZXgsIGJ1ZmZlckNhcGFjaXR5KSwKLSAgICAgICAg
ICAgIHVzdWFsbHkoYnVmZmVySGFzU3BhY2UpLCByYXJlbHkoYnVmZmVySXNGdWxsKSk7CisgICAg
ICAgICAgICBtX291dC5ub3RaZXJvOChsb2FkQ2VsbFN0YXRlKGJhc2UpKSwgdXN1YWxseShjb250
aW51YXRpb24pLCByYXJlbHkoc2xvd1BhdGgpKTsKIAotICAgICAgICAvLyBCdWZmZXIgaGFzIHNw
YWNlLCBzdG9yZSB0byBpdC4KLSAgICAgICAgbV9vdXQuYXBwZW5kVG8oYnVmZmVySGFzU3BhY2Us
IGJ1ZmZlcklzRnVsbCk7Ci0gICAgICAgIExWYWx1ZSB3cml0ZUJhcnJpZXJCdWZmZXJCYXNlID0g
bV9vdXQuY29uc3RJbnRQdHIodm0oKS5oZWFwLndyaXRlQmFycmllckJ1ZmZlcigpLmJ1ZmZlcigp
KTsKLSAgICAgICAgbV9vdXQuc3RvcmVQdHIoYmFzZSwgbV9vdXQuYmFzZUluZGV4KG1faGVhcHMu
V3JpdGVCYXJyaWVyQnVmZmVyX2J1ZmZlckNvbnRlbnRzLCB3cml0ZUJhcnJpZXJCdWZmZXJCYXNl
LCBtX291dC56ZXJvRXh0UHRyKGN1cnJlbnRCdWZmZXJJbmRleCkpKTsKLSAgICAgICAgbV9vdXQu
c3RvcmUzMihtX291dC5hZGQoY3VycmVudEJ1ZmZlckluZGV4LCBtX291dC5jb25zdEludDMyKDEp
KSwgbV9vdXQuYWJzb2x1dGUodm0oKS5oZWFwLndyaXRlQmFycmllckJ1ZmZlcigpLmN1cnJlbnRJ
bmRleEFkZHJlc3MoKSkpOwotICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CisgICAg
ICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oc2xvd1BhdGgsIGNvbnRp
bnVhdGlvbik7CiAKLSAgICAgICAgLy8gQnVmZmVyIGlzIG91dCBvZiBzcGFjZSwgZmx1c2ggaXQu
Ci0gICAgICAgIG1fb3V0LmFwcGVuZFRvKGJ1ZmZlcklzRnVsbCwgY29udGludWF0aW9uKTsKLSAg
ICAgICAgdm1DYWxsTm9FeGNlcHRpb25zKG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25GbHVzaFdy
aXRlQmFycmllckJ1ZmZlciksIG1fY2FsbEZyYW1lLCBiYXNlKTsKKyAgICAgICAgLy8gV2UgZW1p
dCB0aGUgc3RvcmUgYmFycmllciBzbG93IHBhdGggbGF6aWx5LiBJbiBhIGxvdCBvZiBjYXNlcywg
dGhpcyB3aWxsIG5ldmVyIGZpcmUuIEFuZAorICAgICAgICAvLyB3aGVuIGl0IGRvZXMgZmlyZSwg
aXQgbWFrZXMgc2Vuc2UgZm9yIHVzIHRvIGdlbmVyYXRlIHRoaXMgY29kZSB1c2luZyBvdXIgSklU
IHJhdGhlciB0aGFuCisgICAgICAgIC8vIHdhc3RpbmcgTExWTSdzIHRpbWUgb3B0aW1pemluZyBp
dC4KKyAgICAgICAgbGF6eVNsb3dQYXRoKAorICAgICAgICAgICAgWz1dIChjb25zdCBWZWN0b3I8
TG9jYXRpb24+JiBsb2NhdGlvbnMpIC0+IFJlZlB0cjxMYXp5U2xvd1BhdGg6OkdlbmVyYXRvcj4g
eworICAgICAgICAgICAgICAgIEdQUlJlZyBiYXNlR1BSID0gbG9jYXRpb25zWzFdLmRpcmVjdEdQ
UigpOworCisgICAgICAgICAgICAgICAgcmV0dXJuIExhenlTbG93UGF0aDo6Y3JlYXRlR2VuZXJh
dG9yKAorICAgICAgICAgICAgICAgICAgICBbPV0gKENDYWxsSGVscGVycyYgaml0LCBMYXp5U2xv
d1BhdGg6OkdlbmVyYXRpb25QYXJhbXMmIHBhcmFtcykgeworICAgICAgICAgICAgICAgICAgICAg
ICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVycyA9IHBhcmFtcy5sYXp5U2xvd1BhdGgtPnVzZWRS
ZWdpc3RlcnMoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIFNjcmF0Y2hSZWdpc3RlckFsbG9j
YXRvciBzY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IodXNlZFJlZ2lzdGVycyk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBzY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IubG9jayhiYXNlR1BSKTsKKwor
ICAgICAgICAgICAgICAgICAgICAgICAgR1BSUmVnIHNjcmF0Y2gxID0gc2NyYXRjaFJlZ2lzdGVy
QWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRjaEdQUigpOworICAgICAgICAgICAgICAgICAgICAgICAg
R1BSUmVnIHNjcmF0Y2gyID0gc2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmFsbG9jYXRlU2NyYXRj
aEdQUigpOworCisgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBieXRlc1B1c2hlZCA9
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLnBy
ZXNlcnZlUmV1c2VkUmVnaXN0ZXJzQnlQdXNoaW5nKGppdCk7CisKKyAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIFdlJ3ZlIGFscmVhZHkgc2F2ZWQgdGhlc2UsIHNvIHdoZW4gd2UgbWFrZSBhIHNs
b3cgcGF0aCBjYWxsLCB3ZSBkb24ndCBoYXZlCisgICAgICAgICAgICAgICAgICAgICAgICAvLyB0
byBzYXZlIHRoZW0gYWdhaW4uCisgICAgICAgICAgICAgICAgICAgICAgICB1c2VkUmVnaXN0ZXJz
LmV4Y2x1ZGUoUmVnaXN0ZXJTZXQoc2NyYXRjaDEsIHNjcmF0Y2gyKSk7CisKKyAgICAgICAgICAg
ICAgICAgICAgICAgIFdyaXRlQmFycmllckJ1ZmZlciYgd3JpdGVCYXJyaWVyQnVmZmVyID0gaml0
LnZtKCktPmhlYXAud3JpdGVCYXJyaWVyQnVmZmVyKCk7CisgICAgICAgICAgICAgICAgICAgICAg
ICBqaXQubG9hZDMyKHdyaXRlQmFycmllckJ1ZmZlci5jdXJyZW50SW5kZXhBZGRyZXNzKCksIHNj
cmF0Y2gyKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcCBuZWVk
VG9GbHVzaCA9IGppdC5icmFuY2gzMigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQ2Fs
bEhlbHBlcnM6OkFib3ZlT3JFcXVhbCwgc2NyYXRjaDIsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIod3JpdGVCYXJyaWVyQnVmZmVyLmNhcGFj
aXR5KCkpKTsKKworICAgICAgICAgICAgICAgICAgICAgICAgaml0LmFkZDMyKENDYWxsSGVscGVy
czo6VHJ1c3RlZEltbTMyKDEpLCBzY3JhdGNoMik7CisgICAgICAgICAgICAgICAgICAgICAgICBq
aXQuc3RvcmUzMihzY3JhdGNoMiwgd3JpdGVCYXJyaWVyQnVmZmVyLmN1cnJlbnRJbmRleEFkZHJl
c3MoKSk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGppdC5tb3ZlKENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbVB0cih3cml0ZUJhcnJpZXJCdWZmZXIuYnVmZmVyKCkpLCBzY3JhdGNoMSk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBqaXQuc3RvcmVQdHIoCisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgYmFzZUdQUiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBl
cnM6OkJhc2VJbmRleCgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc2NyYXRjaDEs
IHNjcmF0Y2gyLCBDQ2FsbEhlbHBlcnM6OlNjYWxlUHRyLAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBzdGF0aWNfY2FzdDxpbnQzMl90Pigtc2l6ZW9mKHZvaWQqKSkpKTsKKworICAg
ICAgICAgICAgICAgICAgICAgICAgc2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLnJlc3RvcmVSZXVz
ZWRSZWdpc3RlcnNCeVBvcHBpbmcoaml0LCBieXRlc1B1c2hlZCk7CisKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHBhcmFtcy5kb25lSnVtcHMuYXBwZW5kKGppdC5qdW1wKCkpOworCisgICAgICAg
ICAgICAgICAgICAgICAgICBuZWVkVG9GbHVzaC5saW5rKCZqaXQpOworICAgICAgICAgICAgICAg
ICAgICAgICAgY2FsbE9wZXJhdGlvbigKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB1c2Vk
UmVnaXN0ZXJzLCBqaXQsIHBhcmFtcy5sYXp5U2xvd1BhdGgtPmNhbGxTaXRlSW5kZXgoKSwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMuZXhjZXB0aW9uSnVtcHMsIG9wZXJhdGlv
bkZsdXNoV3JpdGVCYXJyaWVyQnVmZmVyLCBJbnZhbGlkR1BSUmVnLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGJhc2VHUFIpOworICAgICAgICAgICAgICAgICAgICAgICAgc2NyYXRjaFJl
Z2lzdGVyQWxsb2NhdG9yLnJlc3RvcmVSZXVzZWRSZWdpc3RlcnNCeVBvcHBpbmcoaml0LCBieXRl
c1B1c2hlZCk7CisgICAgICAgICAgICAgICAgICAgICAgICBwYXJhbXMuZG9uZUp1bXBzLmFwcGVu
ZChqaXQuanVtcCgpKTsKKyAgICAgICAgICAgICAgICAgICAgfSk7CisgICAgICAgICAgICB9LAor
ICAgICAgICAgICAgYmFzZSk7CiAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKIAog
ICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMTkw
ODQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPcGVyYXRpb25zLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzAsNiArMzAsOCBAQAogCiAjaW5jbHVkZSAiQ2xvbmVkQXJndW1lbnRz
LmgiCiAjaW5jbHVkZSAiRGlyZWN0QXJndW1lbnRzLmgiCisjaW5jbHVkZSAiRlRMSklUQ29kZS5o
IgorI2luY2x1ZGUgIkZUTExhenlTbG93UGF0aC5oIgogI2luY2x1ZGUgIklubGluZUNhbGxGcmFt
ZS5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJKU0xleGljYWxFbnZpcm9u
bWVudC5oIgpAQCAtMzU3LDYgKzM1OSwyMiBAQCBleHRlcm4gIkMiIEpTQ2VsbCogSklUX09QRVJB
VElPTiBvcGVyYXRpCiAgICAgfQogfQogCitleHRlcm4gIkMiIHZvaWQqIEpJVF9PUEVSQVRJT04g
Y29tcGlsZUZUTExhenlTbG93UGF0aChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGluZGV4KQor
eworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisKKyAgICAvLyBXZSBjYW5ub3QgR0MuIFdlJ3Zl
IGdvdCBwb2ludGVycyBpbiBldmlsIHBsYWNlcy4KKyAgICBEZWZlckdDRm9yQVdoaWxlIGRlZmVy
R0Modm0uaGVhcCk7CisKKyAgICBDb2RlQmxvY2sqIGNvZGVCbG9jayA9IGV4ZWMtPmNvZGVCbG9j
aygpOworICAgIEpJVENvZGUqIGppdENvZGUgPSBjb2RlQmxvY2stPmppdENvZGUoKS0+ZnRsKCk7
CisKKyAgICBMYXp5U2xvd1BhdGgmIGxhenlTbG93UGF0aCA9ICpqaXRDb2RlLT5sYXp5U2xvd1Bh
dGhzW2luZGV4XTsKKyAgICBsYXp5U2xvd1BhdGguZ2VuZXJhdGUoY29kZUJsb2NrKTsKKworICAg
IHJldHVybiBsYXp5U2xvd1BhdGguc3R1YigpLmNvZGUoKS5leGVjdXRhYmxlQWRkcmVzcygpOwor
fQorCiB9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCiAKICNlbmRpZiAvLyBFTkFCTEUoRlRMX0pJ
VCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3BlcmF0aW9ucy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3BlcmF0aW9ucy5oCShyZXZp
c2lvbiAxOTA4NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9wZXJhdGlvbnMu
aAkod29ya2luZyBjb3B5KQpAQCAtMzMsNiArMzMsOCBAQAogCiBuYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIEZUTCB7CiAKK2NsYXNzIExhenlTbG93UGF0aDsKKwogZXh0ZXJuICJDIiB7CiAKIEpT
Q2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdPYmplY3RXaXRoQnV0dGVyZmx5KEV4ZWNT
dGF0ZSosIFN0cnVjdHVyZSopIFdURl9JTlRFUk5BTDsKQEAgLTQzLDYgKzQ1LDggQEAgSlNDZWxs
KiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk1hdGVyaWFsaQogdm9pZCBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvblBvcHVsYXRlT2JqZWN0SW5PU1IoCiAgICAgRXhlY1N0YXRlKiwgRXhpdFRpbWVPYmpl
Y3RNYXRlcmlhbGl6YXRpb24qLCBFbmNvZGVkSlNWYWx1ZSosIEVuY29kZWRKU1ZhbHVlKikgV1RG
X0lOVEVSTkFMOwogCit2b2lkKiBKSVRfT1BFUkFUSU9OIGNvbXBpbGVGVExMYXp5U2xvd1BhdGgo
RXhlY1N0YXRlKiwgdW5zaWduZWQpIFdURl9JTlRFUk5BTDsKKwogfSAvLyBleHRlcm4gIkMiCiAK
IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpERkcKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMU2xvd1BhdGhDYWxsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTFNsb3dQYXRoQ2FsbC5jcHAJKHJldmlzaW9uIDE5MDg0MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMU2xvd1BhdGhDYWxsLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBA
IC0zMCwxODggKzMwLDExNiBAQAogCiAjaW5jbHVkZSAiQ0NhbGxIZWxwZXJzLmgiCiAjaW5jbHVk
ZSAiRlRMU3RhdGUuaCIKKyNpbmNsdWRlICJGVExUaHVua3MuaCIKICNpbmNsdWRlICJHUFJJbmZv
LmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNl
IEZUTCB7CiAKLW5hbWVzcGFjZSB7Ci0KIC8vIFRoaXMgY29kZSByZWxpZXMgb24gdXMgYmVpbmcg
NjQtYml0LiBGVEwgaXMgY3VycmVudGx5IGFsd2F5cyA2NC1iaXQuCiBzdGF0aWMgY29uc3Qgc2l6
ZV90IHdvcmRTaXplID0gODsKIAotLy8gVGhpcyB3aWxsIGJlIGFuIFJBSUkgdGhpbmd5IHRoYXQg
d2lsbCBzZXQgdXAgdGhlIG5lY2Vzc2FyeSBzdGFjayBzaXplcyBhbmQgb2Zmc2V0cyBhbmQgc3Vj
aC4KLWNsYXNzIENhbGxDb250ZXh0IHsKLXB1YmxpYzoKLSAgICBDYWxsQ29udGV4dCgKLSAgICAg
ICAgU3RhdGUmIHN0YXRlLCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywgQ0NhbGxI
ZWxwZXJzJiBqaXQsCi0gICAgICAgIHVuc2lnbmVkIG51bUFyZ3MsIEdQUlJlZyByZXR1cm5SZWdp
c3RlcikKLSAgICAgICAgOiBtX3N0YXRlKHN0YXRlKQotICAgICAgICAsIG1fdXNlZFJlZ2lzdGVy
cyh1c2VkUmVnaXN0ZXJzKQotICAgICAgICAsIG1faml0KGppdCkKLSAgICAgICAgLCBtX251bUFy
Z3MobnVtQXJncykKLSAgICAgICAgLCBtX3JldHVyblJlZ2lzdGVyKHJldHVyblJlZ2lzdGVyKQot
ICAgIHsKLSAgICAgICAgLy8gV2UgZG9uJ3QgY2FyZSB0aGF0IHlvdSdyZSB1c2luZyBjYWxsZWUt
c2F2ZSwgc3RhY2ssIG9yIGhhcmR3YXJlIHJlZ2lzdGVycy4KLSAgICAgICAgbV91c2VkUmVnaXN0
ZXJzLmV4Y2x1ZGUoUmVnaXN0ZXJTZXQ6OnN0YWNrUmVnaXN0ZXJzKCkpOwotICAgICAgICBtX3Vz
ZWRSZWdpc3RlcnMuZXhjbHVkZShSZWdpc3RlclNldDo6cmVzZXJ2ZWRIYXJkd2FyZVJlZ2lzdGVy
cygpKTsKLSAgICAgICAgbV91c2VkUmVnaXN0ZXJzLmV4Y2x1ZGUoUmVnaXN0ZXJTZXQ6OmNhbGxl
ZVNhdmVSZWdpc3RlcnMoKSk7Ci0gICAgICAgIAotICAgICAgICAvLyBUaGUgcmV0dXJuIHJlZ2lz
dGVyIGRvZXNuJ3QgbmVlZCB0byBiZSBzYXZlZC4KLSAgICAgICAgaWYgKG1fcmV0dXJuUmVnaXN0
ZXIgIT0gSW52YWxpZEdQUlJlZykKLSAgICAgICAgICAgIG1fdXNlZFJlZ2lzdGVycy5jbGVhciht
X3JldHVyblJlZ2lzdGVyKTsKLSAgICAgICAgCi0gICAgICAgIHNpemVfdCBzdGFja0J5dGVzTmVl
ZGVkRm9yUmV0dXJuQWRkcmVzcyA9IHdvcmRTaXplOwotICAgICAgICAKLSAgICAgICAgbV9vZmZz
ZXRUb1NhdmluZ0FyZWEgPQotICAgICAgICAgICAgKHN0ZDo6bWF4KG1fbnVtQXJncywgTlVNQkVS
X09GX0FSR1VNRU5UX1JFR0lTVEVSUykgLSBOVU1CRVJfT0ZfQVJHVU1FTlRfUkVHSVNURVJTKSAq
IHdvcmRTaXplOwotICAgICAgICAKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gc3RkOjptaW4o
TlVNQkVSX09GX0FSR1VNRU5UX1JFR0lTVEVSUywgbnVtQXJncyk7IGktLTspCi0gICAgICAgICAg
ICBtX2FyZ3VtZW50UmVnaXN0ZXJzLnNldChHUFJJbmZvOjp0b0FyZ3VtZW50UmVnaXN0ZXIoaSkp
OwotICAgICAgICBtX2NhbGxpbmdDb252ZW50aW9uUmVnaXN0ZXJzLm1lcmdlKG1fYXJndW1lbnRS
ZWdpc3RlcnMpOwotICAgICAgICBpZiAocmV0dXJuUmVnaXN0ZXIgIT0gSW52YWxpZEdQUlJlZykK
LSAgICAgICAgICAgIG1fY2FsbGluZ0NvbnZlbnRpb25SZWdpc3RlcnMuc2V0KEdQUkluZm86OnJl
dHVyblZhbHVlR1BSKTsKLSAgICAgICAgbV9jYWxsaW5nQ29udmVudGlvblJlZ2lzdGVycy5maWx0
ZXIobV91c2VkUmVnaXN0ZXJzKTsKLSAgICAgICAgCi0gICAgICAgIHVuc2lnbmVkIG51bWJlck9m
Q2FsbGluZ0NvbnZlbnRpb25SZWdpc3RlcnMgPQotICAgICAgICAgICAgbV9jYWxsaW5nQ29udmVu
dGlvblJlZ2lzdGVycy5udW1iZXJPZlNldFJlZ2lzdGVycygpOwotICAgICAgICAKLSAgICAgICAg
c2l6ZV90IG9mZnNldFRvVGh1bmtTYXZpbmdBcmVhID0KLSAgICAgICAgICAgIG1fb2Zmc2V0VG9T
YXZpbmdBcmVhICsKLSAgICAgICAgICAgIG51bWJlck9mQ2FsbGluZ0NvbnZlbnRpb25SZWdpc3Rl
cnMgKiB3b3JkU2l6ZTsKLSAgICAgICAgCi0gICAgICAgIG1fc3RhY2tCeXRlc05lZWRlZCA9Ci0g
ICAgICAgICAgICBvZmZzZXRUb1RodW5rU2F2aW5nQXJlYSArCi0gICAgICAgICAgICBzdGFja0J5
dGVzTmVlZGVkRm9yUmV0dXJuQWRkcmVzcyArCi0gICAgICAgICAgICAobV91c2VkUmVnaXN0ZXJz
Lm51bWJlck9mU2V0UmVnaXN0ZXJzKCkgLSBudW1iZXJPZkNhbGxpbmdDb252ZW50aW9uUmVnaXN0
ZXJzKSAqIHdvcmRTaXplOwotICAgICAgICAKLSAgICAgICAgbV9zdGFja0J5dGVzTmVlZGVkID0g
KG1fc3RhY2tCeXRlc05lZWRlZCArIHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSAtIDEpICYgfihzdGFj
a0FsaWdubWVudEJ5dGVzKCkgLSAxKTsKLSAgICAgICAgCi0gICAgICAgIG1faml0LnN1YlB0cihD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihtX3N0YWNrQnl0ZXNOZWVkZWQpLCBDQ2FsbEhlbHBl
cnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKLSAgICAgICAgCi0gICAgICAgIG1fdGh1bmtTYXZl
U2V0ID0gbV91c2VkUmVnaXN0ZXJzOwotICAgICAgICAKLSAgICAgICAgLy8gVGhpcyByZWxpZXMg
b24gYWxsIGNhbGxpbmcgY29udmVudGlvbiByZWdpc3RlcnMgYWxzbyBiZWluZyB0ZW1wIHJlZ2lz
dGVycy4KLSAgICAgICAgdW5zaWduZWQgc3RhY2tJbmRleCA9IDA7Ci0gICAgICAgIGZvciAodW5z
aWduZWQgaSA9IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyBpLS07KSB7Ci0gICAgICAgICAg
ICBHUFJSZWcgcmVnID0gR1BSSW5mbzo6dG9SZWdpc3RlcihpKTsKLSAgICAgICAgICAgIGlmICgh
bV9jYWxsaW5nQ29udmVudGlvblJlZ2lzdGVycy5nZXQocmVnKSkKLSAgICAgICAgICAgICAgICBj
b250aW51ZTsKLSAgICAgICAgICAgIG1faml0LnN0b3JlUHRyKHJlZywgQ0NhbGxIZWxwZXJzOjpB
ZGRyZXNzKENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIsIG1fb2Zmc2V0VG9TYXZp
bmdBcmVhICsgKHN0YWNrSW5kZXgrKykgKiB3b3JkU2l6ZSkpOwotICAgICAgICAgICAgbV90aHVu
a1NhdmVTZXQuY2xlYXIocmVnKTsKLSAgICAgICAgfQorU2xvd1BhdGhDYWxsQ29udGV4dDo6U2xv
d1BhdGhDYWxsQ29udGV4dCgKKyAgICBSZWdpc3RlclNldCB1c2VkUmVnaXN0ZXJzLCBDQ2FsbEhl
bHBlcnMmIGppdCwgdW5zaWduZWQgbnVtQXJncywgR1BSUmVnIHJldHVyblJlZ2lzdGVyKQorICAg
IDogbV9qaXQoaml0KQorICAgICwgbV9udW1BcmdzKG51bUFyZ3MpCisgICAgLCBtX3JldHVyblJl
Z2lzdGVyKHJldHVyblJlZ2lzdGVyKQoreworICAgIC8vIFdlIGRvbid0IGNhcmUgdGhhdCB5b3Un
cmUgdXNpbmcgY2FsbGVlLXNhdmUsIHN0YWNrLCBvciBoYXJkd2FyZSByZWdpc3RlcnMuCisgICAg
dXNlZFJlZ2lzdGVycy5leGNsdWRlKFJlZ2lzdGVyU2V0OjpzdGFja1JlZ2lzdGVycygpKTsKKyAg
ICB1c2VkUmVnaXN0ZXJzLmV4Y2x1ZGUoUmVnaXN0ZXJTZXQ6OnJlc2VydmVkSGFyZHdhcmVSZWdp
c3RlcnMoKSk7CisgICAgdXNlZFJlZ2lzdGVycy5leGNsdWRlKFJlZ2lzdGVyU2V0OjpjYWxsZWVT
YXZlUmVnaXN0ZXJzKCkpOwogICAgICAgICAKLSAgICAgICAgbV9vZmZzZXQgPSBvZmZzZXRUb1Ro
dW5rU2F2aW5nQXJlYTsKLSAgICB9Ci0gICAgCi0gICAgfkNhbGxDb250ZXh0KCkKLSAgICB7Ci0g
ICAgICAgIGlmIChtX3JldHVyblJlZ2lzdGVyICE9IEludmFsaWRHUFJSZWcpCi0gICAgICAgICAg
ICBtX2ppdC5tb3ZlKEdQUkluZm86OnJldHVyblZhbHVlR1BSLCBtX3JldHVyblJlZ2lzdGVyKTsK
LSAgICAgICAgCi0gICAgICAgIHVuc2lnbmVkIHN0YWNrSW5kZXggPSAwOwotICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBHUFJJbmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgaS0tOykgewotICAgICAg
ICAgICAgR1BSUmVnIHJlZyA9IEdQUkluZm86OnRvUmVnaXN0ZXIoaSk7Ci0gICAgICAgICAgICBp
ZiAoIW1fY2FsbGluZ0NvbnZlbnRpb25SZWdpc3RlcnMuZ2V0KHJlZykpCi0gICAgICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgICAgICBtX2ppdC5sb2FkUHRyKENDYWxsSGVscGVyczo6QWRk
cmVzcyhDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBtX29mZnNldFRvU2F2aW5n
QXJlYSArIChzdGFja0luZGV4KyspICogd29yZFNpemUpLCByZWcpOwotICAgICAgICB9CisgICAg
Ly8gVGhlIHJldHVybiByZWdpc3RlciBkb2Vzbid0IG5lZWQgdG8gYmUgc2F2ZWQuCisgICAgaWYg
KG1fcmV0dXJuUmVnaXN0ZXIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgdXNlZFJlZ2lzdGVy
cy5jbGVhcihtX3JldHVyblJlZ2lzdGVyKTsKICAgICAgICAgCi0gICAgICAgIG1faml0LmFkZFB0
cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihtX3N0YWNrQnl0ZXNOZWVkZWQpLCBDQ2FsbEhl
bHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKLSAgICB9Ci0gICAgCi0gICAgUmVnaXN0ZXJT
ZXQgdXNlZFJlZ2lzdGVycygpIGNvbnN0Ci0gICAgewotICAgICAgICByZXR1cm4gbV90aHVua1Nh
dmVTZXQ7Ci0gICAgfQotICAgIAotICAgIHB0cmRpZmZfdCBvZmZzZXQoKSBjb25zdAotICAgIHsK
LSAgICAgICAgcmV0dXJuIG1fb2Zmc2V0OworICAgIHNpemVfdCBzdGFja0J5dGVzTmVlZGVkRm9y
UmV0dXJuQWRkcmVzcyA9IHdvcmRTaXplOworICAgICAgICAKKyAgICBtX29mZnNldFRvU2F2aW5n
QXJlYSA9CisgICAgICAgIChzdGQ6Om1heChtX251bUFyZ3MsIE5VTUJFUl9PRl9BUkdVTUVOVF9S
RUdJU1RFUlMpIC0gTlVNQkVSX09GX0FSR1VNRU5UX1JFR0lTVEVSUykgKiB3b3JkU2l6ZTsKKyAg
ICAgICAgCisgICAgZm9yICh1bnNpZ25lZCBpID0gc3RkOjptaW4oTlVNQkVSX09GX0FSR1VNRU5U
X1JFR0lTVEVSUywgbnVtQXJncyk7IGktLTspCisgICAgICAgIG1fYXJndW1lbnRSZWdpc3RlcnMu
c2V0KEdQUkluZm86OnRvQXJndW1lbnRSZWdpc3RlcihpKSk7CisgICAgbV9jYWxsaW5nQ29udmVu
dGlvblJlZ2lzdGVycy5tZXJnZShtX2FyZ3VtZW50UmVnaXN0ZXJzKTsKKyAgICBpZiAocmV0dXJu
UmVnaXN0ZXIgIT0gSW52YWxpZEdQUlJlZykKKyAgICAgICAgbV9jYWxsaW5nQ29udmVudGlvblJl
Z2lzdGVycy5zZXQoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIpOworICAgIG1fY2FsbGluZ0NvbnZl
bnRpb25SZWdpc3RlcnMuZmlsdGVyKHVzZWRSZWdpc3RlcnMpOworICAgICAgICAKKyAgICB1bnNp
Z25lZCBudW1iZXJPZkNhbGxpbmdDb252ZW50aW9uUmVnaXN0ZXJzID0KKyAgICAgICAgbV9jYWxs
aW5nQ29udmVudGlvblJlZ2lzdGVycy5udW1iZXJPZlNldFJlZ2lzdGVycygpOworICAgICAgICAK
KyAgICBzaXplX3Qgb2Zmc2V0VG9UaHVua1NhdmluZ0FyZWEgPQorICAgICAgICBtX29mZnNldFRv
U2F2aW5nQXJlYSArCisgICAgICAgIG51bWJlck9mQ2FsbGluZ0NvbnZlbnRpb25SZWdpc3RlcnMg
KiB3b3JkU2l6ZTsKKyAgICAgICAgCisgICAgbV9zdGFja0J5dGVzTmVlZGVkID0KKyAgICAgICAg
b2Zmc2V0VG9UaHVua1NhdmluZ0FyZWEgKworICAgICAgICBzdGFja0J5dGVzTmVlZGVkRm9yUmV0
dXJuQWRkcmVzcyArCisgICAgICAgICh1c2VkUmVnaXN0ZXJzLm51bWJlck9mU2V0UmVnaXN0ZXJz
KCkgLSBudW1iZXJPZkNhbGxpbmdDb252ZW50aW9uUmVnaXN0ZXJzKSAqIHdvcmRTaXplOworICAg
ICAgICAKKyAgICBtX3N0YWNrQnl0ZXNOZWVkZWQgPSAobV9zdGFja0J5dGVzTmVlZGVkICsgc3Rh
Y2tBbGlnbm1lbnRCeXRlcygpIC0gMSkgJiB+KHN0YWNrQWxpZ25tZW50Qnl0ZXMoKSAtIDEpOwor
ICAgICAgICAKKyAgICBtX2ppdC5zdWJQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIobV9z
dGFja0J5dGVzTmVlZGVkKSwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisK
KyAgICBtX3RodW5rU2F2ZVNldCA9IHVzZWRSZWdpc3RlcnM7CisgICAgICAgIAorICAgIC8vIFRo
aXMgcmVsaWVzIG9uIGFsbCBjYWxsaW5nIGNvbnZlbnRpb24gcmVnaXN0ZXJzIGFsc28gYmVpbmcg
dGVtcCByZWdpc3RlcnMuCisgICAgdW5zaWduZWQgc3RhY2tJbmRleCA9IDA7CisgICAgZm9yICh1
bnNpZ25lZCBpID0gR1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7IGktLTspIHsKKyAgICAgICAg
R1BSUmVnIHJlZyA9IEdQUkluZm86OnRvUmVnaXN0ZXIoaSk7CisgICAgICAgIGlmICghbV9jYWxs
aW5nQ29udmVudGlvblJlZ2lzdGVycy5nZXQocmVnKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICBtX2ppdC5zdG9yZVB0cihyZWcsIENDYWxsSGVscGVyczo6QWRkcmVzcyhDQ2FsbEhl
bHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBtX29mZnNldFRvU2F2aW5nQXJlYSArIChzdGFj
a0luZGV4KyspICogd29yZFNpemUpKTsKKyAgICAgICAgbV90aHVua1NhdmVTZXQuY2xlYXIocmVn
KTsKICAgICB9CisgICAgICAgIAorICAgIG1fb2Zmc2V0ID0gb2Zmc2V0VG9UaHVua1NhdmluZ0Fy
ZWE7Cit9CiAgICAgCi0gICAgU2xvd1BhdGhDYWxsS2V5IGtleVdpdGhUYXJnZXQodm9pZCogY2Fs
bFRhcmdldCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVybiBTbG93UGF0aENhbGxLZXkodXNl
ZFJlZ2lzdGVycygpLCBjYWxsVGFyZ2V0LCBtX2FyZ3VtZW50UmVnaXN0ZXJzLCBvZmZzZXQoKSk7
Ci0gICAgfQorU2xvd1BhdGhDYWxsQ29udGV4dDo6flNsb3dQYXRoQ2FsbENvbnRleHQoKQorewor
ICAgIGlmIChtX3JldHVyblJlZ2lzdGVyICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIG1faml0
Lm1vdmUoR1BSSW5mbzo6cmV0dXJuVmFsdWVHUFIsIG1fcmV0dXJuUmVnaXN0ZXIpOwogICAgIAot
ICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIG1ha2VDYWxsKHZvaWQqIGNhbGxUYXJnZXQsIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wTGlzdCogZXhjZXB0aW9uVGFyZ2V0KQotICAgIHsKLSAgICAgICAgTWFj
cm9Bc3NlbWJsZXI6OkNhbGwgcmVzdWx0ID0gbV9qaXQuY2FsbCgpOwotICAgICAgICBtX3N0YXRl
LmZpbmFsaXplci0+c2xvd1BhdGhDYWxscy5hcHBlbmQoU2xvd1BhdGhDYWxsKAotICAgICAgICAg
ICAgcmVzdWx0LCBrZXlXaXRoVGFyZ2V0KGNhbGxUYXJnZXQpKSk7Ci0gICAgICAgIGlmIChleGNl
cHRpb25UYXJnZXQpCi0gICAgICAgICAgICBleGNlcHRpb25UYXJnZXQtPmFwcGVuZChtX2ppdC5l
bWl0RXhjZXB0aW9uQ2hlY2soKSk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgdW5zaWdu
ZWQgc3RhY2tJbmRleCA9IDA7CisgICAgZm9yICh1bnNpZ25lZCBpID0gR1BSSW5mbzo6bnVtYmVy
T2ZSZWdpc3RlcnM7IGktLTspIHsKKyAgICAgICAgR1BSUmVnIHJlZyA9IEdQUkluZm86OnRvUmVn
aXN0ZXIoaSk7CisgICAgICAgIGlmICghbV9jYWxsaW5nQ29udmVudGlvblJlZ2lzdGVycy5nZXQo
cmVnKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBtX2ppdC5sb2FkUHRyKENDYWxs
SGVscGVyczo6QWRkcmVzcyhDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBtX29m
ZnNldFRvU2F2aW5nQXJlYSArIChzdGFja0luZGV4KyspICogd29yZFNpemUpLCByZWcpOwogICAg
IH0KICAgICAKLXByaXZhdGU6Ci0gICAgU3RhdGUmIG1fc3RhdGU7Ci0gICAgUmVnaXN0ZXJTZXQg
bV91c2VkUmVnaXN0ZXJzOwotICAgIFJlZ2lzdGVyU2V0IG1fYXJndW1lbnRSZWdpc3RlcnM7Ci0g
ICAgUmVnaXN0ZXJTZXQgbV9jYWxsaW5nQ29udmVudGlvblJlZ2lzdGVyczsKLSAgICBDQ2FsbEhl
bHBlcnMmIG1faml0OwotICAgIHVuc2lnbmVkIG1fbnVtQXJnczsKLSAgICBHUFJSZWcgbV9yZXR1
cm5SZWdpc3RlcjsKLSAgICBzaXplX3QgbV9vZmZzZXRUb1NhdmluZ0FyZWE7Ci0gICAgc2l6ZV90
IG1fc3RhY2tCeXRlc05lZWRlZDsKLSAgICBSZWdpc3RlclNldCBtX3RodW5rU2F2ZVNldDsKLSAg
ICBwdHJkaWZmX3QgbV9vZmZzZXQ7Ci19OwotCi19IC8vIGFub255bW91cyBuYW1lc3BhY2UKLQot
dm9pZCBzdG9yZUNvZGVPcmlnaW4oU3RhdGUmIHN0YXRlLCBDQ2FsbEhlbHBlcnMmIGppdCwgQ29k
ZU9yaWdpbiBjb2RlT3JpZ2luKQotewotICAgIGlmICghY29kZU9yaWdpbi5pc1NldCgpKQotICAg
ICAgICByZXR1cm47Ci0gICAgCi0gICAgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZSA9IHN0YXRlLmpp
dENvZGUtPmNvbW1vbi5hZGRDb2RlT3JpZ2luKGNvZGVPcmlnaW4pOwotICAgIHVuc2lnbmVkIGxv
Y2F0aW9uQml0cyA9IGNhbGxTaXRlLmJpdHMoKTsKLSAgICBqaXQuc3RvcmUzMigKLSAgICAgICAg
Q0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIobG9jYXRpb25CaXRzKSwKLSAgICAgICAgQ0NhbGxI
ZWxwZXJzOjp0YWdGb3Ioc3RhdGljX2Nhc3Q8VmlydHVhbFJlZ2lzdGVyPihKU1N0YWNrOjpBcmd1
bWVudENvdW50KSkpOworICAgIG1faml0LmFkZFB0cihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0z
MihtX3N0YWNrQnl0ZXNOZWVkZWQpLCBDQ2FsbEhlbHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVy
KTsKIH0KIAotTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbigKLSAgICBTdGF0ZSYg
c3RhdGUsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLCBDQ2FsbEhlbHBlcnMmIGpp
dCwKLSAgICBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIE1hY3JvQXNzZW1ibGVyOjpKdW1wTGlzdCog
ZXhjZXB0aW9uVGFyZ2V0LAotICAgIEpfSklUT3BlcmF0aW9uX0VTc2lDSSBvcGVyYXRpb24sIEdQ
UlJlZyByZXN1bHQsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywKLSAgICBHUFJSZWcgb2Jq
ZWN0LCBjb25zdCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQorU2xvd1BhdGhDYWxsS2V5IFNsb3dQ
YXRoQ2FsbENvbnRleHQ6OmtleVdpdGhUYXJnZXQodm9pZCogY2FsbFRhcmdldCkgY29uc3QKIHsK
LSAgICBzdG9yZUNvZGVPcmlnaW4oc3RhdGUsIGppdCwgY29kZU9yaWdpbik7Ci0gICAgQ2FsbENv
bnRleHQgY29udGV4dChzdGF0ZSwgdXNlZFJlZ2lzdGVycywgaml0LCA0LCByZXN1bHQpOwotICAg
IGppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoCi0gICAgICAgIENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbVB0cihzdHViSW5mbyksIG9iamVjdCwgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
UHRyKHVpZCkpOwotICAgIHJldHVybiBjb250ZXh0Lm1ha2VDYWxsKGJpdHdpc2VfY2FzdDx2b2lk
Kj4ob3BlcmF0aW9uKSwgZXhjZXB0aW9uVGFyZ2V0KTsKKyAgICByZXR1cm4gU2xvd1BhdGhDYWxs
S2V5KG1fdGh1bmtTYXZlU2V0LCBjYWxsVGFyZ2V0LCBtX2FyZ3VtZW50UmVnaXN0ZXJzLCBtX29m
ZnNldCk7CiB9CiAKLU1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oCi0gICAgU3Rh
dGUmIHN0YXRlLCBjb25zdCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywgQ0NhbGxIZWxwZXJz
JiBqaXQsCi0gICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExp
c3QqIGV4Y2VwdGlvblRhcmdldCwKLSAgICBKX0pJVE9wZXJhdGlvbl9FU3NpSkkgb3BlcmF0aW9u
LCBHUFJSZWcgcmVzdWx0LCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sCi0gICAgR1BSUmVn
IG9iamVjdCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKK1Nsb3dQYXRoQ2FsbCBTbG93UGF0aENh
bGxDb250ZXh0OjptYWtlQ2FsbCh2b2lkKiBjYWxsVGFyZ2V0KQogewotICAgIHN0b3JlQ29kZU9y
aWdpbihzdGF0ZSwgaml0LCBjb2RlT3JpZ2luKTsKLSAgICBDYWxsQ29udGV4dCBjb250ZXh0KHN0
YXRlLCB1c2VkUmVnaXN0ZXJzLCBqaXQsIDQsIHJlc3VsdCk7Ci0gICAgaml0LnNldHVwQXJndW1l
bnRzV2l0aEV4ZWNTdGF0ZSgKLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHN0
dWJJbmZvKSwgb2JqZWN0LAotICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIodWlk
KSk7Ci0gICAgcmV0dXJuIGNvbnRleHQubWFrZUNhbGwoYml0d2lzZV9jYXN0PHZvaWQqPihvcGVy
YXRpb24pLCBleGNlcHRpb25UYXJnZXQpOworICAgIFNsb3dQYXRoQ2FsbCByZXN1bHQgPSBTbG93
UGF0aENhbGwobV9qaXQuY2FsbCgpLCBrZXlXaXRoVGFyZ2V0KGNhbGxUYXJnZXQpKTsKKworICAg
IG1faml0LmFkZExpbmtUYXNrKAorICAgICAgICBbcmVzdWx0XSAoTGlua0J1ZmZlciYgbGlua0J1
ZmZlcikgeworICAgICAgICAgICAgVk0mIHZtID0gbGlua0J1ZmZlci52bSgpOworCisgICAgICAg
ICAgICBNYWNyb0Fzc2VtYmxlckNvZGVSZWYgdGh1bmsgPQorICAgICAgICAgICAgICAgIHZtLmZ0
bFRodW5rcy0+Z2V0U2xvd1BhdGhDYWxsVGh1bmsodm0sIHJlc3VsdC5rZXkoKSk7CisKKyAgICAg
ICAgICAgIGxpbmtCdWZmZXIubGluayhyZXN1bHQuY2FsbCgpLCBDb2RlTG9jYXRpb25MYWJlbCh0
aHVuay5jb2RlKCkpKTsKKyAgICAgICAgfSk7CisgICAgCisgICAgcmV0dXJuIHJlc3VsdDsKIH0K
IAotTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbigKLSAgICBTdGF0ZSYgc3RhdGUs
IGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLCBDQ2FsbEhlbHBlcnMmIGppdCwgCi0g
ICAgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QqIGV4Y2Vw
dGlvblRhcmdldCwKLSAgICBWX0pJVE9wZXJhdGlvbl9FU3NpSkpJIG9wZXJhdGlvbiwgU3RydWN0
dXJlU3R1YkluZm8qIHN0dWJJbmZvLCBHUFJSZWcgdmFsdWUsCi0gICAgR1BSUmVnIG9iamVjdCwg
VW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKK0NhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleEZvckNv
ZGVPcmlnaW4oU3RhdGUmIHN0YXRlLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4pCiB7Ci0gICAgc3Rv
cmVDb2RlT3JpZ2luKHN0YXRlLCBqaXQsIGNvZGVPcmlnaW4pOwotICAgIENhbGxDb250ZXh0IGNv
bnRleHQoc3RhdGUsIHVzZWRSZWdpc3RlcnMsIGppdCwgNSwgSW52YWxpZEdQUlJlZyk7Ci0gICAg
aml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZSgKLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tUHRyKHN0dWJJbmZvKSwgdmFsdWUsIG9iamVjdCwKLSAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tUHRyKHVpZCkpOwotICAgIHJldHVybiBjb250ZXh0Lm1ha2VDYWxsKGJp
dHdpc2VfY2FzdDx2b2lkKj4ob3BlcmF0aW9uKSwgZXhjZXB0aW9uVGFyZ2V0KTsKKyAgICBpZiAo
Y29kZU9yaWdpbikKKyAgICAgICAgcmV0dXJuIHN0YXRlLmppdENvZGUtPmNvbW1vbi5hZGRDb2Rl
T3JpZ2luKGNvZGVPcmlnaW4pOworICAgIHJldHVybiBDYWxsU2l0ZUluZGV4KCk7CiB9CiAKIH0g
fSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMU2xvd1BhdGhDYWxsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExTbG93UGF0aENhbGwuaAkocmV2aXNpb24gMTkwODQzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExTbG93UGF0aENhbGwuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUg
QEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC01NSwyMCAr
NTUsNzEgQEAgcHJpdmF0ZToKICAgICBTbG93UGF0aENhbGxLZXkgbV9rZXk7CiB9OwogCi12b2lk
IHN0b3JlQ29kZU9yaWdpbihTdGF0ZSYsIENDYWxsSGVscGVycyYsIENvZGVPcmlnaW4pOworLy8g
VGhpcyB3aWxsIGJlIGFuIFJBSUkgdGhpbmd5IHRoYXQgd2lsbCBzZXQgdXAgdGhlIG5lY2Vzc2Fy
eSBzdGFjayBzaXplcyBhbmQgb2Zmc2V0cyBhbmQgc3VjaC4KK2NsYXNzIFNsb3dQYXRoQ2FsbENv
bnRleHQgeworcHVibGljOgorICAgIFNsb3dQYXRoQ2FsbENvbnRleHQoUmVnaXN0ZXJTZXQgdXNl
ZFJlZ2lzdGVycywgQ0NhbGxIZWxwZXJzJiwgdW5zaWduZWQgbnVtQXJncywgR1BSUmVnIHJldHVy
blJlZ2lzdGVyKTsKKyAgICB+U2xvd1BhdGhDYWxsQ29udGV4dCgpOworCisgICAgLy8gTk9URTog
VGhlIGNhbGwgdGhhdCB0aGlzIHJldHVybnMgaXMgYWxyZWFkeSBnb2luZyB0byBiZSBsaW5rZWQg
YnkgdGhlIEpJVCB1c2luZyBhZGRMaW5rVGFzaygpLAorICAgIC8vIHNvIHRoZXJlIGlzIG5vIG5l
ZWQgZm9yIHlvdSB0byBsaW5rIGl0IHlvdXJzZWxmLgorICAgIFNsb3dQYXRoQ2FsbCBtYWtlQ2Fs
bCh2b2lkKiBjYWxsVGFyZ2V0KTsKKworcHJpdmF0ZToKKyAgICBTbG93UGF0aENhbGxLZXkga2V5
V2l0aFRhcmdldCh2b2lkKiBjYWxsVGFyZ2V0KSBjb25zdDsKKyAgICAKKyAgICBSZWdpc3RlclNl
dCBtX2FyZ3VtZW50UmVnaXN0ZXJzOworICAgIFJlZ2lzdGVyU2V0IG1fY2FsbGluZ0NvbnZlbnRp
b25SZWdpc3RlcnM7CisgICAgQ0NhbGxIZWxwZXJzJiBtX2ppdDsKKyAgICB1bnNpZ25lZCBtX251
bUFyZ3M7CisgICAgR1BSUmVnIG1fcmV0dXJuUmVnaXN0ZXI7CisgICAgc2l6ZV90IG1fb2Zmc2V0
VG9TYXZpbmdBcmVhOworICAgIHNpemVfdCBtX3N0YWNrQnl0ZXNOZWVkZWQ7CisgICAgUmVnaXN0
ZXJTZXQgbV90aHVua1NhdmVTZXQ7CisgICAgcHRyZGlmZl90IG1fb2Zmc2V0OworfTsKKwordGVt
cGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRUeXBlcz4KK1Nsb3dQYXRoQ2FsbCBjYWxsT3BlcmF0
aW9uKAorICAgIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzLCBDQ2FsbEhlbHBlcnMm
IGppdCwgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCogZXhjZXB0aW9uVGFyZ2V0LAorICAgIEZ1bmN0
aW9uUHRyIGZ1bmN0aW9uLCBHUFJSZWcgcmVzdWx0R1BSLCBBcmd1bWVudFR5cGVzLi4uIGFyZ3Vt
ZW50cykKK3sKKyAgICBTbG93UGF0aENhbGwgY2FsbDsKKyAgICB7CisgICAgICAgIFNsb3dQYXRo
Q2FsbENvbnRleHQgY29udGV4dCh1c2VkUmVnaXN0ZXJzLCBqaXQsIHNpemVvZi4uLihBcmd1bWVu
dFR5cGVzKSArIDEsIHJlc3VsdEdQUik7CisgICAgICAgIGppdC5zZXR1cEFyZ3VtZW50c1dpdGhF
eGVjU3RhdGUoYXJndW1lbnRzLi4uKTsKKyAgICAgICAgY2FsbCA9IGNvbnRleHQubWFrZUNhbGwo
ZnVuY3Rpb24udmFsdWUoKSk7CisgICAgfQorICAgIGlmIChleGNlcHRpb25UYXJnZXQpCisgICAg
ICAgIGV4Y2VwdGlvblRhcmdldC0+YXBwZW5kKGppdC5lbWl0RXhjZXB0aW9uQ2hlY2soKSk7Cisg
ICAgcmV0dXJuIGNhbGw7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50VHlwZXM+
CitTbG93UGF0aENhbGwgY2FsbE9wZXJhdGlvbigKKyAgICBjb25zdCBSZWdpc3RlclNldCYgdXNl
ZFJlZ2lzdGVycywgQ0NhbGxIZWxwZXJzJiBqaXQsIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRl
eCwKKyAgICBDQ2FsbEhlbHBlcnM6Okp1bXBMaXN0KiBleGNlcHRpb25UYXJnZXQsIEZ1bmN0aW9u
UHRyIGZ1bmN0aW9uLCBHUFJSZWcgcmVzdWx0R1BSLAorICAgIEFyZ3VtZW50VHlwZXMuLi4gYXJn
dW1lbnRzKQoreworICAgIGlmIChjYWxsU2l0ZUluZGV4KSB7CisgICAgICAgIGppdC5zdG9yZTMy
KAorICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIoY2FsbFNpdGVJbmRleC5i
aXRzKCkpLAorICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjp0YWdGb3IoSlNTdGFjazo6QXJndW1l
bnRDb3VudCkpOworICAgIH0KKyAgICByZXR1cm4gY2FsbE9wZXJhdGlvbih1c2VkUmVnaXN0ZXJz
LCBqaXQsIGV4Y2VwdGlvblRhcmdldCwgZnVuY3Rpb24sIHJlc3VsdEdQUiwgYXJndW1lbnRzLi4u
KTsKK30KKworQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4Rm9yQ29kZU9yaWdpbihTdGF0ZSYs
IENvZGVPcmlnaW4pOwogCi1NYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKAotICAg
IFN0YXRlJiwgY29uc3QgUmVnaXN0ZXJTZXQmLCBDQ2FsbEhlbHBlcnMmLCBDb2RlT3JpZ2luLCBD
Q2FsbEhlbHBlcnM6Okp1bXBMaXN0KiwKLSAgICBKX0pJVE9wZXJhdGlvbl9FU3NpQ0ksIEdQUlJl
ZywgU3RydWN0dXJlU3R1YkluZm8qLCBHUFJSZWcsCi0gICAgY29uc3QgVW5pcXVlZFN0cmluZ0lt
cGwqIHVpZCk7Ci1NYWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKAotICAgIFN0YXRl
JiwgY29uc3QgUmVnaXN0ZXJTZXQmLCBDQ2FsbEhlbHBlcnMmLCBDb2RlT3JpZ2luLCBDQ2FsbEhl
bHBlcnM6Okp1bXBMaXN0KiwKLSAgICBKX0pJVE9wZXJhdGlvbl9FU3NpSkksIEdQUlJlZyByZXN1
bHQsIFN0cnVjdHVyZVN0dWJJbmZvKiwgR1BSUmVnIG9iamVjdCwKLSAgICBVbmlxdWVkU3RyaW5n
SW1wbCogdWlkKTsKLU1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oCi0gICAgU3Rh
dGUmLCBjb25zdCBSZWdpc3RlclNldCYsIENDYWxsSGVscGVycyYsIENvZGVPcmlnaW4sIENDYWxs
SGVscGVyczo6SnVtcExpc3QqLAotICAgIFZfSklUT3BlcmF0aW9uX0VTc2lKSkksIFN0cnVjdHVy
ZVN0dWJJbmZvKiwgR1BSUmVnIHZhbHVlLCBHUFJSZWcgb2JqZWN0LAotICAgIFVuaXF1ZWRTdHJp
bmdJbXBsKiB1aWQpOwordGVtcGxhdGU8dHlwZW5hbWUuLi4gQXJndW1lbnRUeXBlcz4KK1Nsb3dQ
YXRoQ2FsbCBjYWxsT3BlcmF0aW9uKAorICAgIFN0YXRlJiBzdGF0ZSwgY29uc3QgUmVnaXN0ZXJT
ZXQmIHVzZWRSZWdpc3RlcnMsIENDYWxsSGVscGVycyYgaml0LCBDb2RlT3JpZ2luIGNvZGVPcmln
aW4sCisgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCogZXhjZXB0aW9uVGFyZ2V0LCBGdW5jdGlv
blB0ciBmdW5jdGlvbiwgR1BSUmVnIHJlc3VsdCwgQXJndW1lbnRUeXBlcy4uLiBhcmd1bWVudHMp
Cit7CisgICAgcmV0dXJuIGNhbGxPcGVyYXRpb24oCisgICAgICAgIHVzZWRSZWdpc3RlcnMsIGpp
dCwgY2FsbFNpdGVJbmRleEZvckNvZGVPcmlnaW4oc3RhdGUsIGNvZGVPcmlnaW4pLCBleGNlcHRp
b25UYXJnZXQsIGZ1bmN0aW9uLAorICAgICAgICByZXN1bHQsIGFyZ3VtZW50cy4uLik7Cit9CiAK
IH0gfSAvLyBuYW1lc3BhY2UgSlNDOjpGVEwKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExTdGF0ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwv
RlRMU3RhdGUuaAkocmV2aXNpb24gMTkwODQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExTdGF0ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC03OCw2ICs3OCw3IEBAIHB1YmxpYzoKICAg
ICBTZWdtZW50ZWRWZWN0b3I8R2V0QnlJZERlc2NyaXB0b3I+IGdldEJ5SWRzOwogICAgIFNlZ21l
bnRlZFZlY3RvcjxQdXRCeUlkRGVzY3JpcHRvcj4gcHV0QnlJZHM7CiAgICAgU2VnbWVudGVkVmVj
dG9yPENoZWNrSW5EZXNjcmlwdG9yPiBjaGVja0luczsKKyAgICBTZWdtZW50ZWRWZWN0b3I8TGF6
eVNsb3dQYXRoRGVzY3JpcHRvcj4gbGF6eVNsb3dQYXRoczsKICAgICBWZWN0b3I8SlNDYWxsPiBq
c0NhbGxzOwogICAgIFZlY3RvcjxKU0NhbGxWYXJhcmdzPiBqc0NhbGxWYXJhcmdzZXM7CiAgICAg
VmVjdG9yPEpTVGFpbENhbGw+IGpzVGFpbENhbGxzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2Z0bC9GVExUaHVua3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMVGh1bmtzLmNwcAkocmV2aXNpb24gMTkwODQzKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExUaHVua3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw2ICszMSw3IEBA
CiAjaW5jbHVkZSAiQXNzZW1ibHlIZWxwZXJzLmgiCiAjaW5jbHVkZSAiRlBSSW5mby5oIgogI2lu
Y2x1ZGUgIkZUTE9TUkV4aXRDb21waWxlci5oIgorI2luY2x1ZGUgIkZUTE9wZXJhdGlvbnMuaCIK
ICNpbmNsdWRlICJGVExTYXZlUmVzdG9yZS5oIgogI2luY2x1ZGUgIkdQUkluZm8uaCIKICNpbmNs
dWRlICJMaW5rQnVmZmVyLmgiCkBAIC0zOSwxMSArNDAsMTIgQEAgbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBGVEwgewogCiB1c2luZyBuYW1lc3BhY2UgREZHOwogCi1NYWNyb0Fzc2VtYmxlckNv
ZGVSZWYgb3NyRXhpdEdlbmVyYXRpb25UaHVua0dlbmVyYXRvcihWTSogdm0pCitzdGF0aWMgTWFj
cm9Bc3NlbWJsZXJDb2RlUmVmIGdlbmVyaWNHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3IoCisgICAg
Vk0qIHZtLCBGdW5jdGlvblB0ciBnZW5lcmF0aW9uRnVuY3Rpb24sIGNvbnN0IGNoYXIqIG5hbWUs
IHVuc2lnbmVkIGV4dHJhUG9wc1RvUmVzdG9yZSkKIHsKICAgICBBc3NlbWJseUhlbHBlcnMgaml0
KHZtLCAwKTsKICAgICAKLSAgICAvLyBOb3RlIHRoYXQgdGhlICJyZXR1cm4gYWRkcmVzcyIgd2ls
bCBiZSB0aGUgT1NSIGV4aXQgSUQuCisgICAgLy8gTm90ZSB0aGF0IHRoZSAicmV0dXJuIGFkZHJl
c3MiIHdpbGwgYmUgdGhlIElEIHRoYXQgd2UgcGFzcyB0byB0aGUgZ2VuZXJhdGlvbiBmdW5jdGlv
bi4KICAgICAKICAgICBwdHJkaWZmX3Qgc3RhY2tNaXNhbGlnbm1lbnQgPSBNYWNyb0Fzc2VtYmxl
cjo6cHVzaFRvU2F2ZUJ5dGVPZmZzZXQoKTsKICAgICAKQEAgLTkwLDExICs5MiwxNCBAQCBNYWNy
b0Fzc2VtYmxlckNvZGVSZWYgb3NyRXhpdEdlbmVyYXRpb25UCiAgICAgd2hpbGUgKG51bWJlck9m
UmVxdWlyZWRQb3BzLS0pCiAgICAgICAgIGppdC5wb3BUb1Jlc3RvcmUoR1BSSW5mbzo6cmVnVDEp
OwogICAgIGppdC5wb3BUb1Jlc3RvcmUoTWFjcm9Bc3NlbWJsZXI6OmZyYW1lUG9pbnRlclJlZ2lz
dGVyKTsKLSAgICAKLSAgICAvLyBBdCB0aGlzIHBvaW50IHdlJ3JlIHNpdHRpbmcgb24gdGhlIHJl
dHVybiBhZGRyZXNzIC0gc28gaWYgd2UgZGlkIGEganVtcCByaWdodCBub3csIHRoZQotICAgIC8v
IHRhaWwtY2FsbGVlIHdvdWxkIGJlIGhhcHB5LiBJbnN0ZWFkIHdlJ2xsIHN0YXNoIHRoZSBjYWxs
ZWUgaW4gdGhlIHJldHVybiBhZGRyZXNzIGFuZCB0aGVuCi0gICAgLy8gcmVzdG9yZSBhbGwgcmVn
aXN0ZXJzLgotICAgIAorCisgICAgLy8gV2hlbiB3ZSBjYW1lIGluIGhlcmUsIHRoZXJlIHdhcyBh
biBhZGRpdGlvbmFsIHRoaW5nIHB1c2hlZCB0byB0aGUgc3RhY2suIFNvbWUgY2xpZW50cyB3YW50
IGl0CisgICAgLy8gcG9wcGVkIGJlZm9yZSBwcm9jZWVkaW5nLgorICAgIHdoaWxlIChleHRyYVBv
cHNUb1Jlc3RvcmUtLSkKKyAgICAgICAgaml0LnBvcFRvUmVzdG9yZShHUFJJbmZvOjpyZWdUMSk7
CisKKyAgICAvLyBQdXQgdGhlIHJldHVybiBhZGRyZXNzIHdoZXJldmVyIHRoZSByZXR1cm4gaW5z
dHJ1Y3Rpb24gd2FudHMgaXQuIE9uIGFsbCBwbGF0Zm9ybXMsIHRoaXMKKyAgICAvLyBlbnN1cmVz
IHRoYXQgdGhlIHJldHVybiBhZGRyZXNzIGlzIG91dCBvZiB0aGUgd2F5IG9mIHJlZ2lzdGVyIHJl
c3RvcmF0aW9uLgogICAgIGppdC5yZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybihHUFJJ
bmZvOjpyZWdUMCk7CiAKICAgICByZXN0b3JlQWxsUmVnaXN0ZXJzKGppdCwgYnVmZmVyKTsKQEAg
LTEwMiw4ICsxMDcsMjIgQEAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG9zckV4aXRHZW5lcmF0aW9u
VAogICAgIGppdC5yZXQoKTsKICAgICAKICAgICBMaW5rQnVmZmVyIHBhdGNoQnVmZmVyKCp2bSwg
aml0LCBHTE9CQUxfVEhVTktfSUQpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoZnVuY3Rpb25DYWxs
LCBjb21waWxlRlRMT1NSRXhpdCk7Ci0gICAgcmV0dXJuIEZJTkFMSVpFX0NPREUocGF0Y2hCdWZm
ZXIsICgiRlRMIE9TUiBleGl0IGdlbmVyYXRpb24gdGh1bmsiKSk7CisgICAgcGF0Y2hCdWZmZXIu
bGluayhmdW5jdGlvbkNhbGwsIGdlbmVyYXRpb25GdW5jdGlvbik7CisgICAgcmV0dXJuIEZJTkFM
SVpFX0NPREUocGF0Y2hCdWZmZXIsICgiJXMiLCBuYW1lKSk7Cit9CisKK01hY3JvQXNzZW1ibGVy
Q29kZVJlZiBvc3JFeGl0R2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKFZNKiB2bSkKK3sKKyAgICB1
bnNpZ25lZCBleHRyYVBvcHNUb1Jlc3RvcmUgPSAwOworICAgIHJldHVybiBnZW5lcmljR2VuZXJh
dGlvblRodW5rR2VuZXJhdG9yKAorICAgICAgICB2bSwgY29tcGlsZUZUTE9TUkV4aXQsICJGVEwg
T1NSIGV4aXQgZ2VuZXJhdGlvbiB0aHVuayIsIGV4dHJhUG9wc1RvUmVzdG9yZSk7Cit9CisKK01h
Y3JvQXNzZW1ibGVyQ29kZVJlZiBsYXp5U2xvd1BhdGhHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3Io
Vk0qIHZtKQoreworICAgIHVuc2lnbmVkIGV4dHJhUG9wc1RvUmVzdG9yZSA9IDE7CisgICAgcmV0
dXJuIGdlbmVyaWNHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3IoCisgICAgICAgIHZtLCBjb21waWxl
RlRMTGF6eVNsb3dQYXRoLCAiRlRMIGxhenkgc2xvdyBwYXRoIGdlbmVyYXRpb24gdGh1bmsiLCBl
eHRyYVBvcHNUb1Jlc3RvcmUpOwogfQogCiBzdGF0aWMgdm9pZCByZWdpc3RlckNsb2JiZXJDaGVj
ayhBc3NlbWJseUhlbHBlcnMmIGppdCwgUmVnaXN0ZXJTZXQgZG9udENsb2JiZXIpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFRodW5rcy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVGh1bmtzLmgJKHJldmlzaW9uIDE5MDg0MykKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVGh1bmtzLmgJKHdvcmtpbmcgY29weSkKQEAgLTQw
LDYgKzQwLDcgQEAgY2xhc3MgVk07CiBuYW1lc3BhY2UgRlRMIHsKIAogTWFjcm9Bc3NlbWJsZXJD
b2RlUmVmIG9zckV4aXRHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3IoVk0qKTsKK01hY3JvQXNzZW1i
bGVyQ29kZVJlZiBsYXp5U2xvd1BhdGhHZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3IoVk0qKTsKIE1h
Y3JvQXNzZW1ibGVyQ29kZVJlZiBzbG93UGF0aENhbGxUaHVua0dlbmVyYXRvcihWTSYsIGNvbnN0
IFNsb3dQYXRoQ2FsbEtleSYpOwogCiB0ZW1wbGF0ZTx0eXBlbmFtZSBLZXlUeXBlQXJndW1lbnQ+
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvQ2FsbEZyYW1lLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5o
CShyZXZpc2lvbiAxOTA4NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIv
Q2FsbEZyYW1lLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNyArMSw3IEBACiAvKgogICogIENvcHly
aWdodCAoQykgMTk5OS0yMDAxIEhhcnJpIFBvcnRlbiAocG9ydGVuQGtkZS5vcmcpCiAgKiAgQ29w
eXJpZ2h0IChDKSAyMDAxIFBldGVyIEtlbGx5IChwbWtAcG9zdC5jb20pCi0gKiAgQ29weXJpZ2h0
IChDKSAyMDAzLCAyMDA3LCAyMDA4LCAyMDExLCAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMDMsIDIwMDcsIDIwMDgsIDIwMTEs
IDIwMTMtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
ICAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFs
IFB1YmxpYwpAQCAtMzksNiArMzksMTEgQEAgbmFtZXNwYWNlIEpTQyAgewogICAgIGNsYXNzIEpT
U2NvcGU7CiAKICAgICBzdHJ1Y3QgQ2FsbFNpdGVJbmRleCB7CisgICAgICAgIENhbGxTaXRlSW5k
ZXgoKQorICAgICAgICAgICAgOiBtX2JpdHMoVUlOVF9NQVgpCisgICAgICAgIHsKKyAgICAgICAg
fQorICAgICAgICAKICAgICAgICAgZXhwbGljaXQgQ2FsbFNpdGVJbmRleCh1aW50MzJfdCBiaXRz
KQogICAgICAgICAgICAgOiBtX2JpdHMoYml0cykKICAgICAgICAgeyB9CkBAIC00Nyw2ICs1Miw5
IEBAIG5hbWVzcGFjZSBKU0MgIHsKICAgICAgICAgICAgIDogbV9iaXRzKGJpdHdpc2VfY2FzdDx1
aW50MzJfdD4oaW5zdHJ1Y3Rpb24pKQogICAgICAgICB7IH0KICNlbmRpZgorCisgICAgICAgIGV4
cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiBtX2JpdHMgIT0gVUlOVF9NQVg7
IH0KKyAgICAgICAgCiAgICAgICAgIGlubGluZSB1aW50MzJfdCBiaXRzKCkgY29uc3QgeyByZXR1
cm4gbV9iaXRzOyB9CiAKICAgICBwcml2YXRlOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ppdC9DQ2FsbEhlbHBlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0NDYWxsSGVscGVycy5oCShyZXZpc2lvbiAxOTA4NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0NDYWxsSGVscGVycy5oCSh3b3JraW5nIGNvcHkpCkBAIC02Myw2ICs2Myw4IEBA
IHB1YmxpYzoKICAgICAgICAgcG9rZShHUFJJbmZvOjpub25BcmdHUFIwLCBQT0tFX0FSR1VNRU5U
X09GRlNFVCArIGFyZ3VtZW50SW5kZXggLSBHUFJJbmZvOjpudW1iZXJPZkFyZ3VtZW50UmVnaXN0
ZXJzKTsKICAgICB9CiAKKyAgICB2b2lkIHNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZSgpIHsg
c2V0dXBBcmd1bWVudHNFeGVjU3RhdGUoKTsgfQorCiAgICAgLy8gVGhlc2UgbWV0aG9kcyB1c2Vk
IHRvIHNvcnQgYXJndW1lbnRzIGludG8gdGhlIGNvcnJlY3QgcmVnaXN0ZXJzLgogICAgIC8vIE9u
IFg4NiB3ZSB1c2UgY2RlY2wgY2FsbGluZyBjb252ZW50aW9ucywgd2hpY2ggcGFzcyBhbGwgYXJn
dW1lbnRzIG9uIHRoZQogICAgIC8vIHN0YWNrLiBPbiBvdGhlciBhcmNoaXRlY3R1cmVzIHdlIG1h
eSBuZWVkIHRvIHNvcnQgdmFsdWVzIGludG8gdGhlCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDE5MDg0MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEw
MzEsNyArMTAzMSw3IEBAIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdPYmplY3QK
IHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIg
dHJhY2VyKHZtLCBleGVjKTsKLSAgICAKKwogICAgIHJldHVybiBjb25zdHJ1Y3RFbXB0eU9iamVj
dChleGVjLCBzdHJ1Y3R1cmUpOwogfQogCkluZGV4OiBTb3VyY2UvV1RGL0NoYW5nZUxvZwo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV1RGL0NoYW5nZUxvZwkocmV2aXNpb24gMTkwODQzKQorKysgU291
cmNlL1dURi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwzNyBAQAorMjAxNS0x
MC0xMCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIEZUTCBzaG91
bGQgZ2VuZXJhdGUgY29kZSB0byBjYWxsIHNsb3cgcGF0aHMgbGF6aWx5CisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDk5MzYKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBFbmFibGVzIFNoYXJlZFRhc2sgdG8g
aGFuZGxlIGFueSBmdW5jdGlvbiB0eXBlLCBub3QganVzdCB2b2lkKCkuCisKKyAgICAgICAgSXQn
cyBwcm9iYWJseSBiZXR0ZXIgdG8gdXNlIFNoYXJlZFRhc2sgaW5zdGVhZCBvZiBzdGQ6OmZ1bmN0
aW9uIGluIHBlcmZvcm1hbmNlLXNlbnNpdGl2ZQorICAgICAgICBjb2RlLiBzdGQ6OmZ1bmN0aW9u
IHVzZXMgdGhlIHN5c3RlbSBtYWxsb2MgYW5kIGhhcyBjb3B5IHNlbWFudGljcy4gU2hhcmVkVGFz
ayB1c2VzIEZhc3RNYWxsb2MKKyAgICAgICAgYW5kIGhhcyBhbGlhc2luZyBzZW1hbnRpY3MuIFNv
LCB5b3UgY2FuIGp1c3QgdHJ1c3QgdGhhdCBpdCB3aWxsIGhhdmUgc2Vuc2libGUgcGVyZm9ybWFu
Y2UKKyAgICAgICAgY2hhcmFjdGVyaXN0aWNzLgorCisgICAgICAgICogd3RmL1BhcmFsbGVsSGVs
cGVyUG9vbC5jcHA6CisgICAgICAgIChXVEY6OlBhcmFsbGVsSGVscGVyQ2xpZW50Ojp+UGFyYWxs
ZWxIZWxwZXJDbGllbnQpOgorICAgICAgICAoV1RGOjpQYXJhbGxlbEhlbHBlckNsaWVudDo6c2V0
VGFzayk6CisgICAgICAgIChXVEY6OlBhcmFsbGVsSGVscGVyQ2xpZW50Ojpkb1NvbWVIZWxwaW5n
KToKKyAgICAgICAgKFdURjo6UGFyYWxsZWxIZWxwZXJDbGllbnQ6OnJ1blRhc2tJblBhcmFsbGVs
KToKKyAgICAgICAgKFdURjo6UGFyYWxsZWxIZWxwZXJDbGllbnQ6OmZpbmlzaCk6CisgICAgICAg
IChXVEY6OlBhcmFsbGVsSGVscGVyQ2xpZW50OjpjbGFpbVRhc2spOgorICAgICAgICAoV1RGOjpQ
YXJhbGxlbEhlbHBlckNsaWVudDo6cnVuVGFzayk6CisgICAgICAgIChXVEY6OlBhcmFsbGVsSGVs
cGVyUG9vbDo6ZG9Tb21lSGVscGluZyk6CisgICAgICAgIChXVEY6OlBhcmFsbGVsSGVscGVyUG9v
bDo6aGVscGVyVGhyZWFkQm9keSk6CisgICAgICAgICogd3RmL1BhcmFsbGVsSGVscGVyUG9vbC5o
OgorICAgICAgICAoV1RGOjpQYXJhbGxlbEhlbHBlckNsaWVudDo6c2V0RnVuY3Rpb24pOgorICAg
ICAgICAoV1RGOjpQYXJhbGxlbEhlbHBlckNsaWVudDo6cnVuRnVuY3Rpb25JblBhcmFsbGVsKToK
KyAgICAgICAgKFdURjo6UGFyYWxsZWxIZWxwZXJDbGllbnQ6OnBvb2wpOgorICAgICAgICAqIHd0
Zi9TaGFyZWRUYXNrLmg6CisgICAgICAgIChXVEY6OmNyZWF0ZVNoYXJlZFRhc2spOgorICAgICAg
ICAoV1RGOjpTaGFyZWRUYXNrOjpTaGFyZWRUYXNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6
U2hhcmVkVGFzazo6flNoYXJlZFRhc2spOiBEZWxldGVkLgorICAgICAgICAoV1RGOjpTaGFyZWRU
YXNrRnVuY3Rvcjo6U2hhcmVkVGFza0Z1bmN0b3IpOiBEZWxldGVkLgorCiAyMDE1LTEwLTEwICBE
YW4gQmVybnN0ZWluICA8bWl0ekBhcHBsZS5jb20+CiAKICAgICAgICAgW2lPU10gUmVtb3ZlIHVu
bmVjZXNzYXJ5IGlPUyB2ZXJzaW9uIGNoZWNrcwpJbmRleDogU291cmNlL1dURi93dGYvUGFyYWxs
ZWxIZWxwZXJQb29sLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9QYXJhbGxlbEhl
bHBlclBvb2wuY3BwCShyZXZpc2lvbiAxOTA4NDMpCisrKyBTb3VyY2UvV1RGL3d0Zi9QYXJhbGxl
bEhlbHBlclBvb2wuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01Myw3ICs1Myw3IEBAIFBhcmFsbGVs
SGVscGVyQ2xpZW50Ojp+UGFyYWxsZWxIZWxwZXJDbGkKICAgICB9CiB9CiAKLXZvaWQgUGFyYWxs
ZWxIZWxwZXJDbGllbnQ6OnNldFRhc2soUmVmUHRyPFNoYXJlZFRhc2s+IHRhc2spCit2b2lkIFBh
cmFsbGVsSGVscGVyQ2xpZW50OjpzZXRUYXNrKFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoKT4+IHRh
c2spCiB7CiAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9wb29sLT5tX2xvY2spOwogICAgIFJFTEVB
U0VfQVNTRVJUKCFtX3Rhc2spOwpAQCAtNjksNyArNjksNyBAQCB2b2lkIFBhcmFsbGVsSGVscGVy
Q2xpZW50OjpmaW5pc2goKQogCiB2b2lkIFBhcmFsbGVsSGVscGVyQ2xpZW50Ojpkb1NvbWVIZWxw
aW5nKCkKIHsKLSAgICBSZWZQdHI8U2hhcmVkVGFzaz4gdGFzazsKKyAgICBSZWZQdHI8U2hhcmVk
VGFzazx2b2lkKCk+PiB0YXNrOwogICAgIHsKICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9w
b29sLT5tX2xvY2spOwogICAgICAgICB0YXNrID0gY2xhaW1UYXNrKGxvY2tlcik7CkBAIC04MCw3
ICs4MCw3IEBAIHZvaWQgUGFyYWxsZWxIZWxwZXJDbGllbnQ6OmRvU29tZUhlbHBpbmcKICAgICBy
dW5UYXNrKHRhc2spOwogfQogCi12b2lkIFBhcmFsbGVsSGVscGVyQ2xpZW50OjpydW5UYXNrSW5Q
YXJhbGxlbChSZWZQdHI8U2hhcmVkVGFzaz4gdGFzaykKK3ZvaWQgUGFyYWxsZWxIZWxwZXJDbGll
bnQ6OnJ1blRhc2tJblBhcmFsbGVsKFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoKT4+IHRhc2spCiB7
CiAgICAgc2V0VGFzayh0YXNrKTsKICAgICBkb1NvbWVIZWxwaW5nKCk7CkBAIC05NCw3ICs5NCw3
IEBAIHZvaWQgUGFyYWxsZWxIZWxwZXJDbGllbnQ6OmZpbmlzaChjb25zdCAKICAgICAgICAgbV9w
b29sLT5tX3dvcmtDb21wbGV0ZUNvbmRpdGlvbi53YWl0KG1fcG9vbC0+bV9sb2NrKTsKIH0KIAot
UmVmUHRyPFNoYXJlZFRhc2s+IFBhcmFsbGVsSGVscGVyQ2xpZW50OjpjbGFpbVRhc2soY29uc3Qg
TG9ja0hvbGRlciYpCitSZWZQdHI8U2hhcmVkVGFzazx2b2lkKCk+PiBQYXJhbGxlbEhlbHBlckNs
aWVudDo6Y2xhaW1UYXNrKGNvbnN0IExvY2tIb2xkZXImKQogewogICAgIGlmICghbV90YXNrKQog
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTEwMyw3ICsxMDMsNyBAQCBSZWZQdHI8U2hhcmVk
VGFzaz4gUGFyYWxsZWxIZWxwZXJDbGllbnQ6CiAgICAgcmV0dXJuIG1fdGFzazsKIH0KIAotdm9p
ZCBQYXJhbGxlbEhlbHBlckNsaWVudDo6cnVuVGFzayhSZWZQdHI8U2hhcmVkVGFzaz4gdGFzaykK
K3ZvaWQgUGFyYWxsZWxIZWxwZXJDbGllbnQ6OnJ1blRhc2soUmVmUHRyPFNoYXJlZFRhc2s8dm9p
ZCgpPj4gdGFzaykKIHsKICAgICBSRUxFQVNFX0FTU0VSVChtX251bUFjdGl2ZSk7CiAgICAgUkVM
RUFTRV9BU1NFUlQodGFzayk7CkBAIC0xNTMsNyArMTUzLDcgQEAgdm9pZCBQYXJhbGxlbEhlbHBl
clBvb2w6OmVuc3VyZVRocmVhZHModQogdm9pZCBQYXJhbGxlbEhlbHBlclBvb2w6OmRvU29tZUhl
bHBpbmcoKQogewogICAgIFBhcmFsbGVsSGVscGVyQ2xpZW50KiBjbGllbnQ7Ci0gICAgUmVmUHRy
PFNoYXJlZFRhc2s+IHRhc2s7CisgICAgUmVmUHRyPFNoYXJlZFRhc2s8dm9pZCgpPj4gdGFzazsK
ICAgICB7CiAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7CiAgICAgICAgIGNsaWVu
dCA9IGdldENsaWVudFdpdGhUYXNrKGxvY2tlcik7CkBAIC0xODIsNyArMTgyLDcgQEAgdm9pZCBQ
YXJhbGxlbEhlbHBlclBvb2w6OmhlbHBlclRocmVhZEJvZAogewogICAgIGZvciAoOzspIHsKICAg
ICAgICAgUGFyYWxsZWxIZWxwZXJDbGllbnQqIGNsaWVudDsKLSAgICAgICAgUmVmUHRyPFNoYXJl
ZFRhc2s+IHRhc2s7CisgICAgICAgIFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoKT4+IHRhc2s7CiAK
ICAgICAgICAgewogICAgICAgICAgICAgTG9ja0hvbGRlciBsb2NrZXIobV9sb2NrKTsKSW5kZXg6
IFNvdXJjZS9XVEYvd3RmL1BhcmFsbGVsSGVscGVyUG9vbC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XVEYvd3RmL1BhcmFsbGVsSGVscGVyUG9vbC5oCShyZXZpc2lvbiAxOTA4NDMpCisrKyBTb3Vy
Y2UvV1RGL3d0Zi9QYXJhbGxlbEhlbHBlclBvb2wuaAkod29ya2luZyBjb3B5KQpAQCAtMTMwLDEy
ICsxMzAsMTIgQEAgcHVibGljOgogICAgIFdURl9FWFBPUlRfUFJJVkFURSBQYXJhbGxlbEhlbHBl
ckNsaWVudChSZWZQdHI8UGFyYWxsZWxIZWxwZXJQb29sPik7CiAgICAgV1RGX0VYUE9SVF9QUklW
QVRFIH5QYXJhbGxlbEhlbHBlckNsaWVudCgpOwogCi0gICAgV1RGX0VYUE9SVF9QUklWQVRFIHZv
aWQgc2V0VGFzayhSZWZQdHI8U2hhcmVkVGFzaz4pOworICAgIFdURl9FWFBPUlRfUFJJVkFURSB2
b2lkIHNldFRhc2soUmVmUHRyPFNoYXJlZFRhc2s8dm9pZCgpPj4pOwogCiAgICAgdGVtcGxhdGU8
dHlwZW5hbWUgRnVuY3Rvcj4KICAgICB2b2lkIHNldEZ1bmN0aW9uKGNvbnN0IEZ1bmN0b3ImIGZ1
bmN0b3IpCiAgICAgewotICAgICAgICBzZXRUYXNrKGNyZWF0ZVNoYXJlZFRhc2soZnVuY3Rvcikp
OworICAgICAgICBzZXRUYXNrKGNyZWF0ZVNoYXJlZFRhc2s8dm9pZCgpPihmdW5jdG9yKSk7CiAg
ICAgfQogICAgIAogICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGZpbmlzaCgpOwpAQCAtMTQ2
LDcgKzE0Niw3IEBAIHB1YmxpYzoKICAgICAvLyBjbGllbnQtPnNldFRhc2sodGFzayk7CiAgICAg
Ly8gY2xpZW50LT5kb1NvbWVIZWxwaW5nKCk7CiAgICAgLy8gY2xpZW50LT5maW5pc2goKTsKLSAg
ICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBydW5UYXNrSW5QYXJhbGxlbChSZWZQdHI8U2hhcmVk
VGFzaz4pOworICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIHJ1blRhc2tJblBhcmFsbGVsKFJl
ZlB0cjxTaGFyZWRUYXNrPHZvaWQoKT4+KTsKIAogICAgIC8vIEVxdWl2YWxlbnQgdG86CiAgICAg
Ly8gY2xpZW50LT5zZXRGdW5jdGlvbihmdW5jdG9yKTsKQEAgLTE1NSw3ICsxNTUsNyBAQCBwdWJs
aWM6CiAgICAgdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KICAgICB2b2lkIHJ1bkZ1bmN0aW9u
SW5QYXJhbGxlbChjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQogICAgIHsKLSAgICAgICAgcnVuVGFz
a0luUGFyYWxsZWwoY3JlYXRlU2hhcmVkVGFzayhmdW5jdG9yKSk7CisgICAgICAgIHJ1blRhc2tJ
blBhcmFsbGVsKGNyZWF0ZVNoYXJlZFRhc2s8dm9pZCgpPihmdW5jdG9yKSk7CiAgICAgfQogCiAg
ICAgUGFyYWxsZWxIZWxwZXJQb29sJiBwb29sKCkgeyByZXR1cm4gKm1fcG9vbDsgfQpAQCAtMTY1
LDExICsxNjUsMTEgQEAgcHJpdmF0ZToKICAgICBmcmllbmQgY2xhc3MgUGFyYWxsZWxIZWxwZXJQ
b29sOwogCiAgICAgdm9pZCBmaW5pc2goY29uc3QgTG9ja0hvbGRlciYpOwotICAgIFJlZlB0cjxT
aGFyZWRUYXNrPiBjbGFpbVRhc2soY29uc3QgTG9ja0hvbGRlciYpOwotICAgIHZvaWQgcnVuVGFz
ayhSZWZQdHI8U2hhcmVkVGFzaz4pOworICAgIFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoKT4+IGNs
YWltVGFzayhjb25zdCBMb2NrSG9sZGVyJik7CisgICAgdm9pZCBydW5UYXNrKFJlZlB0cjxTaGFy
ZWRUYXNrPHZvaWQoKT4+KTsKICAgICAKICAgICBSZWZQdHI8UGFyYWxsZWxIZWxwZXJQb29sPiBt
X3Bvb2w7Ci0gICAgUmVmUHRyPFNoYXJlZFRhc2s+IG1fdGFzazsKKyAgICBSZWZQdHI8U2hhcmVk
VGFzazx2b2lkKCk+PiBtX3Rhc2s7CiAgICAgdW5zaWduZWQgbV9udW1BY3RpdmUgeyAwIH07CiB9
OwogCkluZGV4OiBTb3VyY2UvV1RGL3d0Zi9TaGFyZWRUYXNrLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dURi93dGYvU2hhcmVkVGFzay5oCShyZXZpc2lvbiAxOTA4NDMpCisrKyBTb3VyY2UvV1RG
L3d0Zi9TaGFyZWRUYXNrLmgJKHdvcmtpbmcgY29weSkKQEAgLTQxLDEzICs0MSwxMyBAQCBuYW1l
c3BhY2UgV1RGIHsKIC8vCiAvLyBIZXJlJ3MgYW4gZXhhbXBsZSBvZiBob3cgU2hhcmVkVGFzayBj
YW4gYmUgYmV0dGVyIHRoYW4gc3RkOjpmdW5jdGlvbi4gSWYgeW91IGRvOgogLy8KLS8vIHN0ZDo6
ZnVuY3Rpb24gYSA9IGI7CisvLyBzdGQ6OmZ1bmN0aW9uPGludChkb3VibGUpPiBhID0gYjsKIC8v
CiAvLyBUaGVuICJhIiB3aWxsIGdldCBpdHMgb3duIGNvcHkgb2YgYWxsIGNhcHR1cmVkIGJ5LXZh
bHVlIHZhcmlhYmxlcy4gVGhlIGFjdCBvZiBjb3B5aW5nIG1heQogLy8gcmVxdWlyZSBjYWxscyB0
byBzeXN0ZW0gbWFsbG9jLCBhbmQgaXQgbWF5IGJlIGxpbmVhciB0aW1lIGluIHRoZSB0b3RhbCBz
aXplIG9mIGNhcHR1cmVkCiAvLyB2YXJpYWJsZXMuIE9uIHRoZSBvdGhlciBoYW5kLCBpZiB5b3Ug
ZG86CiAvLwotLy8gUmVmUHRyPFNoYXJlZFRhc2s+IGEgPSBiOworLy8gUmVmUHRyPFNoYXJlZFRh
c2s8aW50KGRvdWJsZSk+IGEgPSBiOwogLy8KIC8vIFRoZW4gImEiIHdpbGwgcG9pbnQgdG8gdGhl
IHNhbWUgdGFzayBhcyBiLCBhbmQgdGhlIG9ubHkgd29yayBpbnZvbHZlZCBpcyB0aGUgQ0FTIHRv
IGluY3JlYXNlIHRoZQogLy8gcmVmZXJlbmNlIGNvdW50LgpAQCAtNTgsMTggKzU4LDIxIEBAIG5h
bWVzcGFjZSBXVEYgewogLy8gY3JlYXRlU2hhcmVkVGFzaygpLCBiZWxvdykuIEJ1dCBTaGFyZWRU
YXNrIGFsc28gYWxsb3dzIHlvdSB0byBjcmVhdGUgeW91ciBvd24gc3ViY2xhc3MgYW5kIHB1dAog
Ly8gc3RhdGUgaW4gbWVtYmVyIGZpZWxkcy4gVGhpcyBjYW4gYmUgbW9yZSBuYXR1cmFsIGlmIHlv
dSB3YW50IGZpbmUtZ3JhaW5lZCBjb250cm9sIG92ZXIgd2hhdAogLy8gc3RhdGUgaXMgc2hhcmVk
IGJldHdlZW4gaW5zdGFuY2VzIG9mIHRoZSB0YXNrLgotY2xhc3MgU2hhcmVkVGFzayA6IHB1Ymxp
YyBUaHJlYWRTYWZlUmVmQ291bnRlZDxTaGFyZWRUYXNrPiB7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBG
dW5jdGlvblR5cGU+IGNsYXNzIFNoYXJlZFRhc2s7Cit0ZW1wbGF0ZTx0eXBlbmFtZSBSZXN1bHRU
eXBlLCB0eXBlbmFtZS4uLiBBcmd1bWVudFR5cGVzPgorY2xhc3MgU2hhcmVkVGFzazxSZXN1bHRU
eXBlIChBcmd1bWVudFR5cGVzLi4uKT4gOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8U2hh
cmVkVGFzazxSZXN1bHRUeXBlIChBcmd1bWVudFR5cGVzLi4uKT4+IHsKIHB1YmxpYzoKICAgICBT
aGFyZWRUYXNrKCkgeyB9CiAgICAgdmlydHVhbCB+U2hhcmVkVGFzaygpIHsgfQogCi0gICAgdmly
dHVhbCB2b2lkIHJ1bigpID0gMDsKKyAgICB2aXJ0dWFsIFJlc3VsdFR5cGUgcnVuKEFyZ3VtZW50
VHlwZXMmJi4uLikgPSAwOwogfTsKIAogLy8gVGhpcyBpcyBhIHV0aWxpdHkgY2xhc3MgdGhhdCBh
bGxvd3MgeW91IHRvIGNyZWF0ZSBhIFNoYXJlZFRhc2sgc3ViY2xhc3MgdXNpbmcgYSBsYW1iZGEu
IFVzdWFsbHksCiAvLyB5b3UgZG9uJ3Qgd2FudCB0byB1c2UgdGhpcyBjbGFzcyBkaXJlY3RseS4g
VXNlIGNyZWF0ZVNoYXJlZFRhc2soKSBpbnN0ZWFkLgotdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rv
cj4KLWNsYXNzIFNoYXJlZFRhc2tGdW5jdG9yIDogcHVibGljIFNoYXJlZFRhc2sgewordGVtcGxh
dGU8dHlwZW5hbWUgRnVuY3Rpb25UeXBlLCB0eXBlbmFtZSBGdW5jdG9yPiBjbGFzcyBTaGFyZWRU
YXNrRnVuY3RvcjsKK3RlbXBsYXRlPHR5cGVuYW1lIFJlc3VsdFR5cGUsIHR5cGVuYW1lLi4uIEFy
Z3VtZW50VHlwZXMsIHR5cGVuYW1lIEZ1bmN0b3I+CitjbGFzcyBTaGFyZWRUYXNrRnVuY3RvcjxS
ZXN1bHRUeXBlIChBcmd1bWVudFR5cGVzLi4uKSwgRnVuY3Rvcj4gOiBwdWJsaWMgU2hhcmVkVGFz
azxSZXN1bHRUeXBlIChBcmd1bWVudFR5cGVzLi4uKT4gewogcHVibGljOgogICAgIFNoYXJlZFRh
c2tGdW5jdG9yKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCiAgICAgICAgIDogbV9mdW5jdG9yKGZ1
bmN0b3IpCkBAIC03Nyw5ICs4MCw5IEBAIHB1YmxpYzoKICAgICB9CiAKIHByaXZhdGU6Ci0gICAg
dm9pZCBydW4oKSBvdmVycmlkZQorICAgIFJlc3VsdFR5cGUgcnVuKEFyZ3VtZW50VHlwZXMmJi4u
LiBhcmd1bWVudHMpIG92ZXJyaWRlCiAgICAgewotICAgICAgICBtX2Z1bmN0b3IoKTsKKyAgICAg
ICAgcmV0dXJuIG1fZnVuY3RvcihzdGQ6OmZvcndhcmQ8QXJndW1lbnRUeXBlcz4oYXJndW1lbnRz
KS4uLik7CiAgICAgfQogCiAgICAgRnVuY3RvciBtX2Z1bmN0b3I7CkBAIC04Nyw3ICs5MCw3IEBA
IHByaXZhdGU6CiAKIC8vIENyZWF0ZSBhIFNoYXJlZFRhc2sgZnJvbSBhIGZ1bmN0b3IsIHN1Y2gg
YXMgYSBsYW1iZGEuIFlvdSBjYW4gdXNlIHRoaXMgbGlrZSBzbzoKIC8vCi0vLyBSZWZQdHI8U2hh
cmVkVGFzaz4gdGFzayA9IGNyZWF0ZVNoYXJlZFRhc2soCisvLyBSZWZQdHI8U2hhcmVkVGFzazx2
b2lkKCk+PiB0YXNrID0gY3JlYXRlU2hhcmVkVGFzazx2b2lkKCk+KAogLy8gICAgIFs9XSAoKSB7
CiAvLyAgICAgICAgIGRvIHRoaW5nczsKIC8vICAgICB9KTsKQEAgLTEwMiwxMCArMTA1LDEwIEBA
IHByaXZhdGU6CiAvLyBPbiB0aGUgb3RoZXIgaGFuZCwgaWYgeW91IHVzZSBzb21ldGhpbmcgbGlr
ZSBQYXJhbGxlbEhlbHBlckNsaWVudDo6cnVuVGFza0luUGFyYWxsZWwoKSAob3IgaXRzCiAvLyBo
ZWxwZXIsIHJ1bkZ1bmN0aW9uSW5QYXJhbGxlbCgpLCB3aGljaCBkb2VzIGNyZWF0ZVNoYXJlZFRh
c2soKSBmb3IgeW91KSwgdGhlbiBpdCBjYW4gYmUgT0sgdG8KIC8vIHVzZSBbJl0sIHNpbmNlIHRo
ZSBzdGFjayBmcmFtZSB3aWxsIHJlbWFpbiBsaXZlIGZvciB0aGUgZW50aXJlIGR1cmF0aW9uIG9m
IHRoZSB0YXNrJ3MgbGlmZXRpbWUuCi10ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yPgotUmVmPFNo
YXJlZFRhc2s+IGNyZWF0ZVNoYXJlZFRhc2soY29uc3QgRnVuY3RvciYgZnVuY3RvcikKK3RlbXBs
YXRlPHR5cGVuYW1lIEZ1bmN0aW9uVHlwZSwgdHlwZW5hbWUgRnVuY3Rvcj4KK1JlZjxTaGFyZWRU
YXNrPEZ1bmN0aW9uVHlwZT4+IGNyZWF0ZVNoYXJlZFRhc2soY29uc3QgRnVuY3RvciYgZnVuY3Rv
cikKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBTaGFyZWRUYXNrRnVuY3RvcjxGdW5jdG9y
PihmdW5jdG9yKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgU2hhcmVkVGFza0Z1bmN0b3I8
RnVuY3Rpb25UeXBlLCBGdW5jdG9yPihmdW5jdG9yKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdU
Rgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>262844</attachid>
            <date>2015-10-10 20:05:07 -0700</date>
            <delta_ts>2015-10-12 10:09:55 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>102645</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTkwODQzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0NiBA
QAorMjAxNS0xMC0xMCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEZUTCBzaG91bGQgZ2VuZXJhdGUgY29kZSB0byBjYWxsIHNsb3cgcGF0aHMgbGF6aWx5CisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDk5MzYKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZSBvZnRlbiBoYXZl
IGNvbXBsZXggc2xvdyBwYXRocyBpbiBGVEwtZ2VuZXJhdGVkIGNvZGUuIFRob3NlIHNsb3cgcGF0
aHMgbWF5IG5ldmVyIHJ1bi4gRXZlbgorICAgICAgICBpZiB0aGV5IGRvIHJ1biwgdGhleSBkb24n
dCBuZWVkIHN0ZWxsYXIgcGVyZm9ybWFuY2UuIFNvLCBpdCBkb2Vzbid0IG1ha2Ugc2Vuc2UgdG8g
aGF2ZSBMTFZNCisgICAgICAgIHdvcnJ5IGFib3V0IGNvbXBpbGluZyBzdWNoIHNsb3cgcGF0aCBj
b2RlLgorCisgICAgICAgIFRoaXMgcGF0Y2ggZW5hYmxlcyB1cyB0byB1c2Ugb3VyIG93biBNYWNy
b0Fzc2VtYmxlciBmb3IgY29tcGlsaW5nIHRoZSBzbG93IHBhdGggaW5zaWRlIEZUTAorICAgICAg
ICBjb2RlLiBJdCBkb2VzIHRoaXMgYnkgdXNpbmcgYSBjcmF6eSBsYW1iZGEgdGhpbmd5IChzZWUg
RlRMTG93ZXJERkdUb0xMVk0uY3BwJ3MgbGF6eVNsb3dQYXRoKCkKKyAgICAgICAgYW5kIGl0cyBk
b2N1bWVudGF0aW9uKS4gVGhlIHJlc3VsdCBpcyBxdWl0ZSBuYXR1cmFsIHRvIHVzZS4KKworICAg
ICAgICBFdmVuIGZvciBzdHJhaWdodCBzbG93IHBhdGggY2FsbHMgdmlhIHNvbWV0aGluZyBsaWtl
IHZtQ2FsbCgpLCB0aGUgbGF6eVNsb3dQYXRoIG9mZmVycyB0aGUKKyAgICAgICAgYmVuZWZpdCB0
aGF0IHRoZSBjYWxsIG1hcnNoYWxsaW5nIGFuZCB0aGUgZXhjZXB0aW9uIGNoZWNraW5nIGFyZSBu
b3QgZXhwcmVzc2VkIHVzaW5nIExMVk0gSVIKKyAgICAgICAgYW5kIGRvIG5vdCByZXF1aXJlIExM
Vk0gdG8gdGhpbmsgYWJvdXQgaXQuIEl0IGFsc28gaGFzIHRoZSBiZW5lZml0IHRoYXQgd2UgbmV2
ZXIgZ2VuZXJhdGUgdGhlCisgICAgICAgIGNvZGUgaWYgaXQgbmV2ZXIgcnVucy4gVGhhdCdzIGdy
ZWF0LCBzaW5jZSBmdW5jdGlvbiBjYWxscyB1c3VhbGx5IGludm9sdmUgfjEwIGluc3RydWN0aW9u
cworICAgICAgICB0b3RhbCAobW92ZSBhcmd1bWVudHMgdG8gYXJndW1lbnQgcmVnaXN0ZXJzLCBt
YWtlIHRoZSBjYWxsLCBjaGVjayBleGNlcHRpb24sIGV0Yy4pLgorCisgICAgICAgIFRoaXMgcGF0
Y2ggYWRkcyB0aGUgbGF6eSBzbG93IHBhdGggYWJzdHJhY3Rpb24gYW5kIHVzZXMgaXQgZm9yIHNv
bWUgc2xvdyBwYXRocyBpbiB0aGUgRlRMLgorICAgICAgICBUaGUgY29kZSB3ZSBnZW5lcmF0ZSB3
aXRoIGxhenkgc2xvdyBwYXRocyBpcyB3b3JzZSB0aGFuIHRoZSBjb2RlIHRoYXQgTExWTSB3b3Vs
ZCBoYXZlCisgICAgICAgIGdlbmVyYXRlZC4gVGhlcmVmb3JlLCBhIGxhenkgc2xvdyBwYXRoIG9u
bHkgbWFrZXMgc2Vuc2Ugd2hlbiB3ZSBoYXZlIHN0cm9uZyBldmlkZW5jZSB0aGF0CisgICAgICAg
IHRoZSBzbG93IHBhdGggd2lsbCBleGVjdXRlIGluZnJlcXVlbnRseSByZWxhdGl2ZSB0byB0aGUg
ZmFzdCBwYXRoLiBUaGlzIGNvbXBsZXRlbHkgcHJlY2x1ZGVzCisgICAgICAgIHRoZSB1c2Ugb2Yg
bGF6eSBzbG93IHBhdGhzIGZvciBvdXQtb2YtbGluZSBOb2RlcyB0aGF0IHVuY29uZGl0aW9uYWxs
eSBjYWxsIGEgQysrIGZ1bmN0aW9uLgorICAgICAgICBJdCBhbHNvIHByZWNsdWRlcyB0aGVpciB1
c2UgZm9yIHRoZSBHZXRCeVZhbCBvdXQtb2YtYm91bmRzIGhhbmRsZXIsIHNpbmNlIHdoZW4gd2Ug
Z2VuZXJhdGUKKyAgICAgICAgYSBHZXRCeVZhbCB3aXRoIGFuIG91dC1vZi1ib3VuZHMgaGFuZGxl
ciBpdCBtZWFucyB0aGF0IHdlIG9ubHkga25vdyB0aGF0IHRoZSBvdXQtb2YtYm91bmRzCisgICAg
ICAgIGNhc2UgZXhlY3V0ZWQgYXQgbGVhc3Qgb25jZS4gU28sIGZvciBhbGwgd2Uga25vdywgaXQg
bWF5IGFjdHVhbGx5IGJlIHRoZSBjb21tb24gY2FzZS4gU28sCisgICAgICAgIHRoaXMgcGF0Y2gg
anVzdCBkZXBsb3llZCB0aGUgbGF6eSBzbG93IHBhdGggZm9yIEdDIHNsb3cgcGF0aHMgYW5kIG1h
c3F1ZXJhZGVzLWFzLXVuZGVmaW5lZAorICAgICAgICBzbG93IHBhdGhzLiBJdCBtYWtlcyBzZW5z
ZSBmb3IgR0Mgc2xvdyBwYXRocyBiZWNhdXNlIHRob3NlIGhhdmUgYSBzdGF0aXN0aWNhbCBndWFy
YW50ZWUgb2YKKyAgICAgICAgc2xvdyBwYXRoIGZyZXF1ZW5jeSAtIHVzdWFsbHkgYm91bmRlZCBh
dCAxLzEwLiBJdCBtYWtlcyBzZW5zZSBmb3IgbWFzcXVlcmFkZXMtYXMtdW5kZWZpbmVkCisgICAg
ICAgIGJlY2F1c2Ugd2UgY2FuIHNheSBxdWl0ZSBjb25maWRlbnRseSB0aGF0IHRoaXMgaXMgYW4g
dW5jb21tb24gc2NlbmFyaW8gb24gdGhlIG1vZGVybiBXZWIuCisKKyAgICAgICAgU29tZXRoaW5n
IHRoYXQncyBhbHdheXMgYmVlbiBjaGFsbGVuZ2luZyBhYm91dCBhYnN0cmFjdGlvbnMgaW52b2x2
aW5nIHRoZSBNYWNyb0Fzc2VtYmxlciBpcworICAgICAgICB0aGF0IGxpbmtpbmcgaXMgYSBzZXBh
cmF0ZSBwaGFzZSwgYW5kIHRoZXJlIGlzIG5vIHdheSBmb3Igc29tZW9uZSB3aG8gaXMganVzdCBn
aXZlbiBhY2Nlc3MgdG8KKyAgICAgICAgdGhlIE1hY3JvQXNzZW1ibGVyJiB0byBlbWl0IGNvZGUg
dGhhdCByZXF1aXJlcyBsaW5raW5nLCBzaW5jZSBsaW5raW5nIGhhcHBlbnMgb25jZSB3ZSBoYXZl
CisgICAgICAgIGVtaXR0ZWQgYWxsIGNvZGUgYW5kIHdlIGFyZSBjcmVhdGluZyB0aGUgTGlua0J1
ZmZlci4gTW9yZW92ZXIsIHRoZSBGVEwgcmVxdWlyZXMgdGhhdCB0aGUKKyAgICAgICAgZmluYWwg
cGFydHMgb2YgbGlua2luZyBoYXBwZW4gb24gdGhlIG1haW4gdGhyZWFkLiBUaGlzIHBhdGNoIHJh
biBpbnRvIHRoaXMgaXNzdWUsIGFuZCBzb2x2ZWQKKyAgICAgICAgaXQgY29tcHJlaGVuc2l2ZWx5
LCBieSBpbnRyb2R1Y2luZyBNYWNyb0Fzc2VtYmxlcjo6YWRkTGlua1Rhc2soKS4gVGhpcyB0YWtl
cyBhIGxhbWJkYSBhbmQKKyAgICAgICAgcnVucyBpdCBhdCB0aGUgYml0dGVyIGVuZCBvZiBsaW5r
aW5nIC0gd2hlbiBwZXJmb3JtRmluYWxpemF0aW9uKCkgaXMgY2FsbGVkLiBUaGlzIGVuc3VyZSB0
aGF0CisgICAgICAgIHRoZSB0YXNrIGFkZGVkIGJ5IGFkZExpbmtUYXNrKCkgcnVucyBvbiB0aGUg
bWFpbiB0aHJlYWQuIFRoaXMgcGF0Y2ggZG9lc24ndCByZXBsYWNlIGFsbCBvZgorICAgICAgICB0
aGUgcHJldmlvdXNseSBleGlzdGluZyBpZGlvbXMgZm9yIGRlYWxpbmcgd2l0aCB0aGlzIGlzc3Vl
OyB3ZSBjYW4gZG8gdGhhdCBsYXRlci4KKworICAgICAgICBUaGlzIHNob3dzIHNtYWxsIHNwZWVk
LXVwcyBvbiBhIGJ1bmNoIG9mIHRoaW5ncy4gTm8gYmlnIHdpbiBvbiBhbnkgYmVuY2htYXJrIGFn
Z3JlZ2F0ZS4gQnV0CisgICAgICAgIG1haW5seSB0aGlzIGlzIGRvbmUgZm9yIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDk4NTIsIHdoZXJlIHdlIGZvdW5kIHRoYXQK
KyAgICAgICAgb3V0bGluaW5nIHRoZSBzbG93IHBhdGggaW4gdGhpcyB3YXkgd2FzIGEgc2lnbmlm
aWNhbnQgc3BlZWQgYm9vc3QuCisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAg
KiBKYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2o6CisgICAgICAg
ICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBh
c3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oOgorICAgICAgICAoSlNDOjpBYnN0cmFj
dE1hY3JvQXNzZW1ibGVyOjpyZXBsYWNlV2l0aEFkZHJlc3NDb21wdXRhdGlvbik6CisgICAgICAg
IChKU0M6OkFic3RyYWN0TWFjcm9Bc3NlbWJsZXI6OmFkZExpbmtUYXNrKToKKyAgICAgICAgKEpT
Qzo6QWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjo6QWJzdHJhY3RNYWNyb0Fzc2VtYmxlcik6CisgICAg
ICAgICogYXNzZW1ibGVyL0xpbmtCdWZmZXIuY3BwOgorICAgICAgICAoSlNDOjpMaW5rQnVmZmVy
OjpsaW5rQ29kZSk6CisgICAgICAgIChKU0M6OkxpbmtCdWZmZXI6OmFsbG9jYXRlKToKKyAgICAg
ICAgKEpTQzo6TGlua0J1ZmZlcjo6cGVyZm9ybUZpbmFsaXphdGlvbik6CisgICAgICAgICogYXNz
ZW1ibGVyL0xpbmtCdWZmZXIuaDoKKyAgICAgICAgKEpTQzo6TGlua0J1ZmZlcjo6d2FzQWxyZWFk
eURpc2Fzc2VtYmxlZCk6CisgICAgICAgIChKU0M6OkxpbmtCdWZmZXI6OmRpZEFscmVhZHlEaXNh
c3NlbWJsZSk6CisgICAgICAgIChKU0M6OkxpbmtCdWZmZXI6OnZtKToKKyAgICAgICAgKEpTQzo6
TGlua0J1ZmZlcjo6ZXhlY3V0YWJsZU9mZnNldEZvcik6CisgICAgICAgICogYnl0ZWNvZGUvQ29k
ZU9yaWdpbi5oOgorICAgICAgICAoSlNDOjpDb2RlT3JpZ2luOjpDb2RlT3JpZ2luKToKKyAgICAg
ICAgKEpTQzo6Q29kZU9yaWdpbjo6aXNTZXQpOgorICAgICAgICAoSlNDOjpDb2RlT3JpZ2luOjpv
cGVyYXRvciBib29sKToKKyAgICAgICAgKEpTQzo6Q29kZU9yaWdpbjo6aXNIYXNoVGFibGVEZWxl
dGVkVmFsdWUpOgorICAgICAgICAoSlNDOjpDb2RlT3JpZ2luOjpvcGVyYXRvciEpOiBEZWxldGVk
LgorICAgICAgICAqIGZ0bC9GVExDb21waWxlLmNwcDoKKyAgICAgICAgKEpTQzo6RlRMOjptbUFs
bG9jYXRlRGF0YVNlY3Rpb24pOgorICAgICAgICAqIGZ0bC9GVExJbmxpbmVDYWNoZURlc2NyaXB0
b3IuaDoKKyAgICAgICAgKEpTQzo6RlRMOjpJbmxpbmVDYWNoZURlc2NyaXB0b3I6OklubGluZUNh
Y2hlRGVzY3JpcHRvcik6CisgICAgICAgIChKU0M6OkZUTDo6Q2hlY2tJbkRlc2NyaXB0b3I6OkNo
ZWNrSW5EZXNjcmlwdG9yKToKKyAgICAgICAgKEpTQzo6RlRMOjpMYXp5U2xvd1BhdGhEZXNjcmlw
dG9yOjpMYXp5U2xvd1BhdGhEZXNjcmlwdG9yKToKKyAgICAgICAgKiBmdGwvRlRMSklUQ29kZS5o
OgorICAgICAgICAqIGZ0bC9GVExKSVRGaW5hbGl6ZXIuY3BwOgorICAgICAgICAoSlNDOjpGVEw6
OkpJVEZpbmFsaXplcjo6ZmluYWxpemVGdW5jdGlvbik6CisgICAgICAgICogZnRsL0ZUTEpJVEZp
bmFsaXplci5oOgorICAgICAgICAqIGZ0bC9GVExMYXp5U2xvd1BhdGguY3BwOiBBZGRlZC4KKyAg
ICAgICAgKEpTQzo6RlRMOjpMYXp5U2xvd1BhdGg6OkxhenlTbG93UGF0aCk6CisgICAgICAgIChK
U0M6OkZUTDo6TGF6eVNsb3dQYXRoOjp+TGF6eVNsb3dQYXRoKToKKyAgICAgICAgKEpTQzo6RlRM
OjpMYXp5U2xvd1BhdGg6OmdlbmVyYXRlKToKKyAgICAgICAgKiBmdGwvRlRMTGF6eVNsb3dQYXRo
Lmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpGVEw6OkxhenlTbG93UGF0aDo6Y3JlYXRlR2VuZXJh
dG9yKToKKyAgICAgICAgKEpTQzo6RlRMOjpMYXp5U2xvd1BhdGg6OnBhdGNocG9pbnQpOgorICAg
ICAgICAoSlNDOjpGVEw6OkxhenlTbG93UGF0aDo6dXNlZFJlZ2lzdGVycyk6CisgICAgICAgIChK
U0M6OkZUTDo6TGF6eVNsb3dQYXRoOjpjYWxsU2l0ZUluZGV4KToKKyAgICAgICAgKEpTQzo6RlRM
OjpMYXp5U2xvd1BhdGg6OnN0dWIpOgorICAgICAgICAqIGZ0bC9GVExMYXp5U2xvd1BhdGhDYWxs
Lmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpGVEw6OmNyZWF0ZUxhenlDYWxsR2VuZXJhdG9yKToK
KyAgICAgICAgKiBmdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwOgorICAgICAgICAoSlNDOjpGVEw6
OkRGRzo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVDcmVhdGVBY3RpdmF0aW9uKToKKyAgICAgICAg
KEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlTmV3RnVuY3Rpb24pOgorICAg
ICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVDcmVhdGVEaXJlY3RB
cmd1bWVudHMpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0xMVk06OmNvbXBp
bGVOZXdBcnJheVdpdGhTaXplKToKKyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9M
TFZNOjpjb21waWxlTWFrZVJvcGUpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdU
b0xMVk06OmNvbXBpbGVOb3RpZnlXcml0ZSk6CisgICAgICAgIChKU0M6OkZUTDo6REZHOjpMb3dl
ckRGR1RvTExWTTo6Y29tcGlsZUlzT2JqZWN0T3JOdWxsKToKKyAgICAgICAgKEpTQzo6RlRMOjpE
Rkc6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlSXNGdW5jdGlvbik6CisgICAgICAgIChKU0M6OkZU
TDo6REZHOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUluKToKKyAgICAgICAgKEpTQzo6RlRMOjpE
Rkc6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlTWF0ZXJpYWxpemVOZXdPYmplY3QpOgorICAgICAg
ICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVNYXRlcmlhbGl6ZUNyZWF0
ZUFjdGl2YXRpb24pOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0xMVk06OmNv
bXBpbGVDaGVja1dhdGNoZG9nVGltZXIpOgorICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJE
RkdUb0xMVk06OmFsbG9jYXRlUHJvcGVydHlTdG9yYWdlV2l0aFNpemVJbXBsKToKKyAgICAgICAg
KEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9MTFZNOjphbGxvY2F0ZU9iamVjdCk6CisgICAgICAg
IChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvTExWTTo6YWxsb2NhdGVKU0FycmF5KToKKyAgICAg
ICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9MTFZNOjpidWlsZFR5cGVPZik6CisgICAgICAg
IChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvTExWTTo6c2Vuc2libGVEb3VibGVUb0ludDMyKToK
KyAgICAgICAgKEpTQzo6RlRMOjpERkc6Okxvd2VyREZHVG9MTFZNOjpsYXp5U2xvd1BhdGgpOgor
ICAgICAgICAoSlNDOjpGVEw6OkRGRzo6TG93ZXJERkdUb0xMVk06OnNwZWN1bGF0ZSk6CisgICAg
ICAgIChKU0M6OkZUTDo6REZHOjpMb3dlckRGR1RvTExWTTo6ZW1pdFN0b3JlQmFycmllcik6Cisg
ICAgICAgICogZnRsL0ZUTE9wZXJhdGlvbnMuY3BwOgorICAgICAgICAoSlNDOjpGVEw6Om9wZXJh
dGlvbk1hdGVyaWFsaXplT2JqZWN0SW5PU1IpOgorICAgICAgICAoSlNDOjpGVEw6OmNvbXBpbGVG
VExMYXp5U2xvd1BhdGgpOgorICAgICAgICAqIGZ0bC9GVExPcGVyYXRpb25zLmg6CisgICAgICAg
ICogZnRsL0ZUTFNsb3dQYXRoQ2FsbC5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6U2xvd1BhdGhD
YWxsQ29udGV4dDo6U2xvd1BhdGhDYWxsQ29udGV4dCk6CisgICAgICAgIChKU0M6OkZUTDo6U2xv
d1BhdGhDYWxsQ29udGV4dDo6flNsb3dQYXRoQ2FsbENvbnRleHQpOgorICAgICAgICAoSlNDOjpG
VEw6OlNsb3dQYXRoQ2FsbENvbnRleHQ6OmtleVdpdGhUYXJnZXQpOgorICAgICAgICAoSlNDOjpG
VEw6OlNsb3dQYXRoQ2FsbENvbnRleHQ6Om1ha2VDYWxsKToKKyAgICAgICAgKEpTQzo6RlRMOjpj
YWxsU2l0ZUluZGV4Rm9yQ29kZU9yaWdpbik6CisgICAgICAgIChKU0M6OkZUTDo6c3RvcmVDb2Rl
T3JpZ2luKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6RlRMOjpjYWxsT3BlcmF0aW9uKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBmdGwvRlRMU2xvd1BhdGhDYWxsLmg6CisgICAgICAgIChKU0M6OkZU
TDo6Y2FsbE9wZXJhdGlvbik6CisgICAgICAgICogZnRsL0ZUTFN0YXRlLmg6CisgICAgICAgICog
ZnRsL0ZUTFRodW5rcy5jcHA6CisgICAgICAgIChKU0M6OkZUTDo6Z2VuZXJpY0dlbmVyYXRpb25U
aHVua0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkZUTDo6b3NyRXhpdEdlbmVyYXRpb25UaHVu
a0dlbmVyYXRvcik6CisgICAgICAgIChKU0M6OkZUTDo6bGF6eVNsb3dQYXRoR2VuZXJhdGlvblRo
dW5rR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6RlRMOjpyZWdpc3RlckNsb2JiZXJDaGVjayk6
CisgICAgICAgICogZnRsL0ZUTFRodW5rcy5oOgorICAgICAgICAqIGludGVycHJldGVyL0NhbGxG
cmFtZS5oOgorICAgICAgICAoSlNDOjpDYWxsU2l0ZUluZGV4OjpDYWxsU2l0ZUluZGV4KToKKyAg
ICAgICAgKEpTQzo6Q2FsbFNpdGVJbmRleDo6b3BlcmF0b3IgYm9vbCk6CisgICAgICAgIChKU0M6
OkNhbGxTaXRlSW5kZXg6OmJpdHMpOgorICAgICAgICAqIGppdC9DQ2FsbEhlbHBlcnMuaDoKKyAg
ICAgICAgKEpTQzo6Q0NhbGxIZWxwZXJzOjpzZXR1cEFyZ3VtZW50KToKKyAgICAgICAgKEpTQzo6
Q0NhbGxIZWxwZXJzOjpzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUpOgorICAgICAgICAqIGpp
dC9KSVRPcGVyYXRpb25zLmNwcDoKKwogMjAxNS0xMC0xMCAgQW5kcmVhcyBLbGluZyAgPGFrbGlu
Z0BhcHBsZS5jb20+CiAKICAgICAgICAgUmVkdWNlIHBvaW50bGVzcyBtYWxsb2MgdHJhZmZpYyBp
biBDb2RlQmxvY2sgY29uc3RydWN0aW9uLgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NN
YWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxp
c3RzLnR4dAkocmV2aXNpb24gMTkwODQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtl
TGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC05MDUsNiArOTA1LDcgQEAgaWYgKEVOQUJMRV9G
VExfSklUKQogICAgICAgICBmdGwvRlRMSlNDYWxsQmFzZS5jcHAKICAgICAgICAgZnRsL0ZUTEpT
Q2FsbFZhcmFyZ3MuY3BwCiAgICAgICAgIGZ0bC9GVExKU1RhaWxDYWxsLmNwcAorICAgICAgICBm
dGwvRlRMTGF6eVNsb3dQYXRoLmNwcAogICAgICAgICBmdGwvRlRMTGluay5jcHAKICAgICAgICAg
ZnRsL0ZUTExvY2F0aW9uLmNwcAogICAgICAgICBmdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2Ny
aXB0Q29yZS52Y3hwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oJKHJldmlzaW9uIDE5MDg0
MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFT
Y3JpcHRDb3JlLnZjeHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTU0MCw2ICs1NDAsNyBAQAogICAg
IDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cZnRsXEZUTEpTQ2FsbEJhc2UuY3BwIiAvPgogICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5cZnRsXEZUTEpTQ2FsbFZhcmFyZ3MuY3BwIiAvPgogICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5cZnRsXEZUTEpTVGFpbENhbGwuY3BwIiAvPgorICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5cZnRsXEZUTExhenlTbG93UGF0aC5jcHAiIC8+CiAgICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxmdGxcRlRMTGluay5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNs
dWRlPSIuLlxmdGxcRlRMTG9jYXRpb24uY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5cZnRsXEZUTExvd2VyREZHVG9MTFZNLmNwcCIgLz4KQEAgLTEzMDIsNiArMTMwMyw4IEBACiAg
ICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxmdGxcRlRMSlNDYWxsQmFzZS5oIiAvPgogICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cZnRsXEZUTEpTQ2FsbFZhcmFyZ3MuaCIgLz4KICAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXGZ0bFxGVExKU1RhaWxDYWxsLmgiIC8+CisgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxmdGxcRlRMTGF6eVNsb3dQYXRoLmgiIC8+CisgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxmdGxcRlRMTGF6eVNsb3dQYXRoQ2FsbC5oIiAvPgogICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5cZnRsXEZUTExpbmsuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XGZ0bFxGVExMb2NhdGlvbi5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cZnRsXEZU
TExvd2VyREZHVG9MTFZNLmgiIC8+CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNj
cmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvago9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagko
cmV2aXNpb24gMTkwODQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
Lnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTQ5NCw2ICs0OTQs
OSBAQAogCQkwRkIxNzY2MjE5NkI4RjlFMDA5MTA1MkEgLyogREZHUHVyZVZhbHVlLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjE3NjVFMTk2QjhG
OUUwMDkxMDUyQSAvKiBERkdQdXJlVmFsdWUuY3BwICovOyB9OwogCQkwRkIxNzY2MzE5NkI4RjlF
MDA5MTA1MkEgLyogREZHUHVyZVZhbHVlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkIxNzY1RjE5NkI4RjlFMDA5MTA1MkEgLyogREZHUHVyZVZhbHVl
LmggKi87IH07CiAJCTBGQjQzOEEzMTkyNzBCMUQwMEUxRkJDOSAvKiBTdHJ1Y3R1cmVTZXQuY3Bw
IGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCNDM4QTIx
OTI3MEIxRDAwRTFGQkM5IC8qIFN0cnVjdHVyZVNldC5jcHAgKi87IH07CisJCTBGQjRGQjczMUJD
ODQzMTQwMDI1Q0E1QSAvKiBGVExMYXp5U2xvd1BhdGguY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCNEZCNzAxQkM4NDMxNDAwMjVDQTVBIC8qIEZU
TExhenlTbG93UGF0aC5jcHAgKi87IH07CisJCTBGQjRGQjc0MUJDODQzMTQwMDI1Q0E1QSAvKiBG
VExMYXp5U2xvd1BhdGguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGQjRGQjcxMUJDODQzMTQwMDI1Q0E1QSAvKiBGVExMYXp5U2xvd1BhdGguaCAqLzsg
fTsKKwkJMEZCNEZCNzUxQkM4NDMxNDAwMjVDQTVBIC8qIEZUTExhenlTbG93UGF0aENhbGwuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQjRGQjcyMUJD
ODQzMTQwMDI1Q0E1QSAvKiBGVExMYXp5U2xvd1BhdGhDYWxsLmggKi87IH07CiAJCTBGQjU0Njc3
MTRGNTlCNUMwMDJDMjk4OSAvKiBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5oIGluIEhlYWRlcnMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZCNTQ2NzYxNEY1OUFEMTAwMkMy
OTg5IC8qIExhenlPcGVyYW5kVmFsdWVQcm9maWxlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZCNTQ2NzkxNEY1QzQ2QjAwMkMyOTg5IC8qIExh
enlPcGVyYW5kVmFsdWVQcm9maWxlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGQjU0Njc4MTRGNUM0NjgwMDJDMjk4OSAvKiBMYXp5T3BlcmFuZFZh
bHVlUHJvZmlsZS5jcHAgKi87IH07CiAJCTBGQjU0NjdCMTRGNUM3RTEwMDJDMjk4OSAvKiBNZXRo
b2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSAwRkI1NDY3QTE0RjVDN0Q0MDAyQzI5ODkgLyogTWV0aG9kT2ZHZXR0
aW5nQVZhbHVlUHJvZmlsZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CkBAIC0yMzUyLDYgKzIzNTUsOSBAQAogCQkwRkI0QjUxRjE2QjYyNzcyMDAzRjY5
NkIgLyogREZHTm9kZUFsbG9jYXRvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUg
PSBERkdOb2RlQWxsb2NhdG9yLmg7IHBhdGggPSBkZmcvREZHTm9kZUFsbG9jYXRvci5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkI0QjUyMTE2QjYyNzhEMDAzRjY5NkIgLyogRnVu
Y3Rpb25FeGVjdXRhYmxlRHVtcC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBGdW5jdGlvbkV4ZWN1dGFibGVEdW1wLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEZCNEI1MjIxNkI2Mjc4RDAwM0Y2OTZCIC8qIEZ1bmN0aW9uRXhlY3V0YWJsZUR1bXAu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gRnVuY3Rpb25FeGVjdXRhYmxlRHVt
cC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkI0RkI3MDFCQzg0MzE0MDAyNUNB
NUEgLyogRlRMTGF6eVNsb3dQYXRoLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
bmFtZSA9IEZUTExhenlTbG93UGF0aC5jcHA7IHBhdGggPSBmdGwvRlRMTGF6eVNsb3dQYXRoLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZCNEZCNzExQkM4NDMxNDAwMjVDQTVB
IC8qIEZUTExhenlTbG93UGF0aC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBG
VExMYXp5U2xvd1BhdGguaDsgcGF0aCA9IGZ0bC9GVExMYXp5U2xvd1BhdGguaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZCNEZCNzIxQkM4NDMxNDAwMjVDQTVBIC8qIEZUTExhenlT
bG93UGF0aENhbGwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRlRMTGF6eVNs
b3dQYXRoQ2FsbC5oOyBwYXRoID0gZnRsL0ZUTExhenlTbG93UGF0aENhbGwuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZCNTQ2NzYxNEY1OUFEMTAwMkMyOTg5IC8qIExhenlPcGVy
YW5kVmFsdWVQcm9maWxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IExhenlP
cGVyYW5kVmFsdWVQcm9maWxlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQjU0
Njc4MTRGNUM0NjgwMDJDMjk4OSAvKiBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBMYXp5T3BlcmFuZFZhbHVlUHJvZmlsZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQjU0NjdBMTRGNUM3RDQwMDJDMjk4
OSAvKiBNZXRob2RPZkdldHRpbmdBVmFsdWVQcm9maWxlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IE1ldGhvZE9mR2V0dGluZ0FWYWx1ZVByb2ZpbGUuaDsgc291cmNlVHJlZSA9
ICI8Z3JvdXA+IjsgfTsKQEAgLTM5ODksNiArMzk5NSw5IEBACiAJCQkJMEZEMTIwMzIxQThDODVC
RDAwMEY1MjgwIC8qIEZUTEpTQ2FsbFZhcmFyZ3MuaCAqLywKIAkJCQk2Mjc3NERBODFCOEQ0QjE5
MDAwNkYwNUEgLyogRlRMSlNUYWlsQ2FsbC5jcHAgKi8sCiAJCQkJNjI3NzREQTkxQjhENEIxOTAw
MDZGMDVBIC8qIEZUTEpTVGFpbENhbGwuaCAqLywKKwkJCQkwRkI0RkI3MDFCQzg0MzE0MDAyNUNB
NUEgLyogRlRMTGF6eVNsb3dQYXRoLmNwcCAqLywKKwkJCQkwRkI0RkI3MTFCQzg0MzE0MDAyNUNB
NUEgLyogRlRMTGF6eVNsb3dQYXRoLmggKi8sCisJCQkJMEZCNEZCNzIxQkM4NDMxNDAwMjVDQTVB
IC8qIEZUTExhenlTbG93UGF0aENhbGwuaCAqLywKIAkJCQkwRjhGMkI5MzE3MkUwNDlFMDA3REJE
QTUgLyogRlRMTGluay5jcHAgKi8sCiAJCQkJMEY4RjJCOTQxNzJFMDQ5RTAwN0RCREE1IC8qIEZU
TExpbmsuaCAqLywKIAkJCQkwRkNFRkFERDE4MDczOEMwMDA0NzJDRTQgLyogRlRMTG9jYXRpb24u
Y3BwICovLApAQCAtNjI1OSw2ICs2MjY4LDcgQEAKIAkJCQkwRjYzOTQ3ODE1RENFMzRCMDA2QTU5
N0MgLyogREZHU3RydWN0dXJlQWJzdHJhY3RWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY1
MEFGM0MxOTNFOEIzOTAwNjc0RUU4IC8qIERGR1N0cnVjdHVyZUNsb2JiZXJTdGF0ZS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEY3OTA4NTYxOUEyOTBCMjAwRjYzMTBDIC8qIERGR1N0cnVjdHVyZVJl
Z2lzdHJhdGlvblBoYXNlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkI0RkI3NTFCQzg0MzE0MDAy
NUNBNUEgLyogRlRMTGF6eVNsb3dQYXRoQ2FsbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyRkND
RkYxOEE2MDA3MDAwMUEyN0Y4IC8qIERGR1RocmVhZERhdGEuaCBpbiBIZWFkZXJzICovLAogCQkJ
CTBGQzA5N0EyMTQ2QjI4Q0MwMENGMjQ0MiAvKiBERkdUaHVua3MuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGRDhBMzI4MTdENTFGNTcwMENBMkM0MCAvKiBERkdUaWVyVXBDaGVja0luamVjdGlvblBo
YXNlLmggaW4gSGVhZGVycyAqLywKQEAgLTY2MTcsNiArNjYyNyw3IEBACiAJCQkJN0MxODRFMUIx
N0JFREJEMzAwN0NCNjNBIC8qIEpTUHJvbWlzZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJN0MxODRF
MjMxN0JFRTI0MDAwN0NCNjNBIC8qIEpTUHJvbWlzZUNvbnN0cnVjdG9yLmggaW4gSGVhZGVycyAq
LywKIAkJCQk3QzAwOENEQjE4NzEyNEJCMDA5NTVDMjQgLyogSlNQcm9taXNlRGVmZXJyZWQuaCBp
biBIZWFkZXJzICovLAorCQkJCTBGQjRGQjc0MUJDODQzMTQwMDI1Q0E1QSAvKiBGVExMYXp5U2xv
d1BhdGguaCBpbiBIZWFkZXJzICovLAogCQkJCTdDMTg0RTFGMTdCRUUyMkUwMDdDQjYzQSAvKiBK
U1Byb21pc2VQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTJBMDVBQkQ2MTk2MURGMjQw
MDM0MTc1MCAvKiBKU1Byb3BlcnR5TmFtZUVudW1lcmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUUzRUY4ODc1MUI2NkRGMjMwMDNGMjZDQiAvKiBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yLmggaW4g
SGVhZGVycyAqLywKQEAgLTgwNTAsNiArODA2MSw3IEBACiAJCQkJMTQ0NjlERUIxMDdFQzdFNzAw
NjUwNDQ2IC8qIFN0cmluZ0NvbnN0cnVjdG9yLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTcwRUMw
RUM2MUFBMEQ3REEwMEI2QUFGQSAvKiBTdHJpbmdJdGVyYXRvclByb3RvdHlwZS5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkxNDQ2OURFQzEwN0VDN0U3MDA2NTA0NDYgLyogU3RyaW5nT2JqZWN0LmNw
cCBpbiBTb3VyY2VzICovLAorCQkJCTBGQjRGQjczMUJDODQzMTQwMDI1Q0E1QSAvKiBGVExMYXp5
U2xvd1BhdGguY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ0NjlERUQxMDdFQzdFNzAwNjUwNDQ2
IC8qIFN0cmluZ1Byb3RvdHlwZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk5MzM1RjI0RDEyRTY3
NjVCMDAyQjU1NTMgLyogU3RyaW5nUmVjdXJzaW9uQ2hlY2tlci5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQlCQ0RFM0I0MzBFNkM4MzJEMDAxNDUzQTcgLyogU3RydWN0dXJlLmNwcCBpbiBTb3VyY2Vz
ICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3Jv
QXNzZW1ibGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgJKHJldmlzaW9uIDE5MDg0MykKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiT3B0aW9ucy5oIgogI2luY2x1ZGUg
PHd0Zi9DcnlwdG9ncmFwaGljYWxseVJhbmRvbU51bWJlci5oPgogI2luY2x1ZGUgPHd0Zi9Ob25j
b3B5YWJsZS5oPgorI2luY2x1ZGUgPHd0Zi9TaGFyZWRUYXNrLmg+CiAjaW5jbHVkZSA8d3RmL1dl
YWtSYW5kb20uaD4KIAogI2lmIEVOQUJMRShBU1NFTUJMRVIpCkBAIC0xMDA0LDYgKzEwMDUsMTcg
QEAgcHVibGljOgogICAgICAgICBBc3NlbWJsZXJUeXBlOjpyZXBsYWNlV2l0aEFkZHJlc3NDb21w
dXRhdGlvbihsYWJlbC5kYXRhTG9jYXRpb24oKSk7CiAgICAgfQogCisgICAgdm9pZCBhZGRMaW5r
VGFzayhSZWZQdHI8U2hhcmVkVGFzazx2b2lkKExpbmtCdWZmZXImKT4+IHRhc2spCisgICAgewor
ICAgICAgICBtX2xpbmtUYXNrcy5hcHBlbmQodGFzayk7CisgICAgfQorCisgICAgdGVtcGxhdGU8
dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICB2b2lkIGFkZExpbmtUYXNrKGNvbnN0IEZ1bmN0b3ImIGZ1
bmN0b3IpCisgICAgeworICAgICAgICBtX2xpbmtUYXNrcy5hcHBlbmQoY3JlYXRlU2hhcmVkVGFz
azx2b2lkKExpbmtCdWZmZXImKT4oZnVuY3RvcikpOworICAgIH0KKwogcHJvdGVjdGVkOgogICAg
IEFic3RyYWN0TWFjcm9Bc3NlbWJsZXIoKQogICAgICAgICA6IG1fcmFuZG9tU291cmNlKGNyeXB0
b2dyYXBoaWNhbGx5UmFuZG9tTnVtYmVyKCkpCkBAIC0xMDk5LDEwICsxMTExLDkgQEAgcHJvdGVj
dGVkOgogCiAgICAgdW5zaWduZWQgbV90ZW1wUmVnaXN0ZXJzVmFsaWRCaXRzOwogCi0gICAgZnJp
ZW5kIGNsYXNzIExpbmtCdWZmZXI7Ci0KLXByaXZhdGU6CisgICAgVmVjdG9yPFJlZlB0cjxTaGFy
ZWRUYXNrPHZvaWQoTGlua0J1ZmZlciYpPj4+IG1fbGlua1Rhc2tzOwogCisgICAgZnJpZW5kIGNs
YXNzIExpbmtCdWZmZXI7CiB9OyAvLyBjbGFzcyBBYnN0cmFjdE1hY3JvQXNzZW1ibGVyCiAKIH0g
Ly8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9M
aW5rQnVmZmVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYXNzZW1i
bGVyL0xpbmtCdWZmZXIuY3BwCShyZXZpc2lvbiAxOTA4NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTMsNiAr
MTkzLDggQEAgdm9pZCBMaW5rQnVmZmVyOjpsaW5rQ29kZShNYWNyb0Fzc2VtYmxlcgogI2VsaWYg
Q1BVKEFSTTY0KQogICAgIGNvcHlDb21wYWN0QW5kTGlua0NvZGU8dWludDMyX3Q+KG1hY3JvQXNz
ZW1ibGVyLCBvd25lclVJRCwgZWZmb3J0KTsKICNlbmRpZgorCisgICAgbV9saW5rVGFza3MgPSBX
VEY6Om1vdmUobWFjcm9Bc3NlbWJsZXIubV9saW5rVGFza3MpOwogfQogCiB2b2lkIExpbmtCdWZm
ZXI6OmFsbG9jYXRlKHNpemVfdCBpbml0aWFsU2l6ZSwgdm9pZCogb3duZXJVSUQsIEpJVENvbXBp
bGF0aW9uRWZmb3J0IGVmZm9ydCkKQEAgLTIyNCw2ICsyMjYsOSBAQCB2b2lkIExpbmtCdWZmZXI6
OnNocmluayhzaXplX3QgbmV3U2l6ZSkKIAogdm9pZCBMaW5rQnVmZmVyOjpwZXJmb3JtRmluYWxp
emF0aW9uKCkKIHsKKyAgICBmb3IgKGF1dG8mIHRhc2sgOiBtX2xpbmtUYXNrcykKKyAgICAgICAg
dGFzay0+cnVuKCp0aGlzKTsKKwogI2lmbmRlZiBOREVCVUcKICAgICBBU1NFUlQoIWlzQ29tcGls
YXRpb25UaHJlYWQoKSk7CiAgICAgQVNTRVJUKCFtX2NvbXBsZXRlZCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0xpbmtCdWZmZXIuaAkocmV2aXNpb24gMTkwODQz
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9MaW5rQnVmZmVyLmgJKHdvcmtp
bmcgY29weSkKQEAgLTI1OSw2ICsyNTksOCBAQCBwdWJsaWM6CiAgICAgYm9vbCB3YXNBbHJlYWR5
RGlzYXNzZW1ibGVkKCkgY29uc3QgeyByZXR1cm4gbV9hbHJlYWR5RGlzYXNzZW1ibGVkOyB9CiAg
ICAgdm9pZCBkaWRBbHJlYWR5RGlzYXNzZW1ibGUoKSB7IG1fYWxyZWFkeURpc2Fzc2VtYmxlZCA9
IHRydWU7IH0KIAorICAgIFZNJiB2bSgpIHsgcmV0dXJuICptX3ZtOyB9CisKIHByaXZhdGU6CiAj
aWYgRU5BQkxFKEJSQU5DSF9DT01QQUNUSU9OKQogICAgIGludCBleGVjdXRhYmxlT2Zmc2V0Rm9y
KGludCBsb2NhdGlvbikKQEAgLTMxNSw2ICszMTcsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgbV9j
b21wbGV0ZWQ7CiAjZW5kaWYKICAgICBib29sIG1fYWxyZWFkeURpc2Fzc2VtYmxlZCB7IGZhbHNl
IH07CisgICAgVmVjdG9yPFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoTGlua0J1ZmZlciYpPj4+IG1f
bGlua1Rhc2tzOwogfTsKIAogI2RlZmluZSBGSU5BTElaRV9DT0RFX0lGKGNvbmRpdGlvbiwgbGlu
a0J1ZmZlclJlZmVyZW5jZSwgZGF0YUxvZ0ZBcmd1bWVudHNGb3JIZWFkaW5nKSAgXApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5oCShyZXZpc2lvbiAx
OTA4NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5oCSh3
b3JraW5nIGNvcHkpCkBAIC03NCw3ICs3NCw3IEBAIHN0cnVjdCBDb2RlT3JpZ2luIHsKICAgICB9
CiAgICAgCiAgICAgYm9vbCBpc1NldCgpIGNvbnN0IHsgcmV0dXJuIGJ5dGVjb2RlSW5kZXggIT0g
aW52YWxpZEJ5dGVjb2RlSW5kZXg7IH0KLSAgICBib29sIG9wZXJhdG9yISgpIGNvbnN0IHsgcmV0
dXJuICFpc1NldCgpOyB9CisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0
dXJuIGlzU2V0KCk7IH0KICAgICAKICAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkg
Y29uc3QKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTENvbXBpbGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29tcGlsZS5j
cHAJKHJldmlzaW9uIDE5MDg0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMQ29t
cGlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzMyw3ICszMzMsNyBAQCBzdGF0aWMgdm9pZCBm
aXhGdW5jdGlvbkJhc2VkT25TdGFja01hcHMoCiB7CiAgICAgR3JhcGgmIGdyYXBoID0gc3RhdGUu
Z3JhcGg7CiAgICAgVk0mIHZtID0gZ3JhcGgubV92bTsKLSAgICBTdGFja01hcHMgc3RhY2ttYXBz
ID0gaml0Q29kZS0+c3RhY2ttYXBzOworICAgIFN0YWNrTWFwcyYgc3RhY2ttYXBzID0gaml0Q29k
ZS0+c3RhY2ttYXBzOwogICAgIAogICAgIGludCBsb2NhbHNPZmZzZXQgPSBvZmZzZXRPZlN0YWNr
UmVnaW9uKHJlY29yZE1hcCwgc3RhdGUuY2FwdHVyZWRTdGFja21hcElEKSArIGdyYXBoLm1fbmV4
dE1hY2hpbmVMb2NhbDsKICAgICBpbnQgdmFyYXJnc1NwaWxsU2xvdHNPZmZzZXQgPSBvZmZzZXRP
ZlN0YWNrUmVnaW9uKHJlY29yZE1hcCwgc3RhdGUudmFyYXJnc1NwaWxsU2xvdHNTdGFja21hcElE
KTsKQEAgLTQzOSw3ICs0MzksMTAgQEAgc3RhdGljIHZvaWQgZml4RnVuY3Rpb25CYXNlZE9uU3Rh
Y2tNYXBzKAogICAgICAgICBzdGF0ZS5maW5hbGl6ZXItPmV4aXRUaHVua3NMaW5rQnVmZmVyID0g
V1RGOjptb3ZlKGxpbmtCdWZmZXIpOwogICAgIH0KIAotICAgIGlmICghc3RhdGUuZ2V0QnlJZHMu
aXNFbXB0eSgpIHx8ICFzdGF0ZS5wdXRCeUlkcy5pc0VtcHR5KCkgfHwgIXN0YXRlLmNoZWNrSW5z
LmlzRW1wdHkoKSkgeworICAgIGlmICghc3RhdGUuZ2V0QnlJZHMuaXNFbXB0eSgpCisgICAgICAg
IHx8ICFzdGF0ZS5wdXRCeUlkcy5pc0VtcHR5KCkKKyAgICAgICAgfHwgIXN0YXRlLmNoZWNrSW5z
LmlzRW1wdHkoKQorICAgICAgICB8fCAhc3RhdGUubGF6eVNsb3dQYXRocy5pc0VtcHR5KCkpIHsK
ICAgICAgICAgQ0NhbGxIZWxwZXJzIHNsb3dQYXRoSklUKCZ2bSwgY29kZUJsb2NrKTsKICAgICAg
ICAgCiAgICAgICAgIENDYWxsSGVscGVyczo6SnVtcExpc3QgZXhjZXB0aW9uVGFyZ2V0OwpAQCAt
NDczLDcgKzQ3Niw4IEBAIHN0YXRpYyB2b2lkIGZpeEZ1bmN0aW9uQmFzZWRPblN0YWNrTWFwcygK
IAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwgPSBjYWxsT3BlcmF0
aW9uKAogICAgICAgICAgICAgICAgICAgICBzdGF0ZSwgdXNlZFJlZ2lzdGVycywgc2xvd1BhdGhK
SVQsIGNvZGVPcmlnaW4sICZleGNlcHRpb25UYXJnZXQsCi0gICAgICAgICAgICAgICAgICAgIG9w
ZXJhdGlvbkdldEJ5SWRPcHRpbWl6ZSwgcmVzdWx0LCBnZW4uc3R1YkluZm8oKSwgYmFzZSwgZ2V0
QnlJZC51aWQoKSk7CisgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbkdldEJ5SWRPcHRpbWl6
ZSwgcmVzdWx0LCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoZ2VuLnN0dWJJbmZvKCkpLAor
ICAgICAgICAgICAgICAgICAgICBiYXNlLCBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoZ2V0
QnlJZC51aWQoKSkpLmNhbGwoKTsKIAogICAgICAgICAgICAgICAgIGdlbi5yZXBvcnRTbG93UGF0
aENhbGwoYmVnaW4sIGNhbGwpOwogCkBAIC01MTEsNyArNTE1LDkgQEAgc3RhdGljIHZvaWQgZml4
RnVuY3Rpb25CYXNlZE9uU3RhY2tNYXBzKAogICAgICAgICAgICAgICAgIAogICAgICAgICAgICAg
ICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxsIGNhbGwgPSBjYWxsT3BlcmF0aW9uKAogICAgICAgICAg
ICAgICAgICAgICBzdGF0ZSwgdXNlZFJlZ2lzdGVycywgc2xvd1BhdGhKSVQsIGNvZGVPcmlnaW4s
ICZleGNlcHRpb25UYXJnZXQsCi0gICAgICAgICAgICAgICAgICAgIGdlbi5zbG93UGF0aEZ1bmN0
aW9uKCksIGdlbi5zdHViSW5mbygpLCB2YWx1ZSwgYmFzZSwgcHV0QnlJZC51aWQoKSk7CisgICAg
ICAgICAgICAgICAgICAgIGdlbi5zbG93UGF0aEZ1bmN0aW9uKCksIEludmFsaWRHUFJSZWcsCisg
ICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihnZW4uc3R1Yklu
Zm8oKSksIHZhbHVlLCBiYXNlLAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRy
dXN0ZWRJbW1QdHIocHV0QnlJZC51aWQoKSkpLmNhbGwoKTsKICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICBnZW4ucmVwb3J0U2xvd1BhdGhDYWxsKGJlZ2luLCBjYWxsKTsKICAgICAg
ICAgICAgICAgICAKQEAgLTU0OSwxMyArNTU1LDU3IEBAIHN0YXRpYyB2b2lkIGZpeEZ1bmN0aW9u
QmFzZWRPblN0YWNrTWFwcygKIAogICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpDYWxs
IHNsb3dDYWxsID0gY2FsbE9wZXJhdGlvbigKICAgICAgICAgICAgICAgICAgICAgc3RhdGUsIHVz
ZWRSZWdpc3RlcnMsIHNsb3dQYXRoSklULCBjb2RlT3JpZ2luLCAmZXhjZXB0aW9uVGFyZ2V0LAot
ICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25Jbk9wdGltaXplLCByZXN1bHQsIHN0dWJJbmZv
LCBvYmosIGNoZWNrSW4ubV91aWQpOworICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25Jbk9w
dGltaXplLCByZXN1bHQsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihzdHViSW5mbyksIG9i
aiwKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGNoZWNr
SW4udWlkKCkpKS5jYWxsKCk7CiAKICAgICAgICAgICAgICAgICBjaGVja0luLm1fc2xvd1BhdGhE
b25lLmFwcGVuZChzbG93UGF0aEpJVC5qdW1wKCkpOwogICAgICAgICAgICAgICAgIAogICAgICAg
ICAgICAgICAgIGNoZWNrSW4ubV9nZW5lcmF0b3JzLmFwcGVuZChDaGVja0luR2VuZXJhdG9yKHN0
dWJJbmZvLCBzbG93Q2FsbCwgYmVnaW4pKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQorCisg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IHN0YXRlLmxhenlTbG93UGF0aHMuc2l6ZSgpOyBpLS07
KSB7CisgICAgICAgICAgICBMYXp5U2xvd1BhdGhEZXNjcmlwdG9yJiBkZXNjcmlwdG9yID0gc3Rh
dGUubGF6eVNsb3dQYXRoc1tpXTsKKworICAgICAgICAgICAgaWYgKHZlcmJvc2VDb21waWxhdGlv
bkVuYWJsZWQoKSkKKyAgICAgICAgICAgICAgICBkYXRhTG9nKCJIYW5kbGluZyBsYXp5U2xvd1Bh
dGggc3RhY2ttYXAgIyIsIGRlc2NyaXB0b3Iuc3RhY2ttYXBJRCgpLCAiXG4iKTsKKworICAgICAg
ICAgICAgYXV0byBpdGVyID0gcmVjb3JkTWFwLmZpbmQoZGVzY3JpcHRvci5zdGFja21hcElEKCkp
OworICAgICAgICAgICAgaWYgKGl0ZXIgPT0gcmVjb3JkTWFwLmVuZCgpKSB7CisgICAgICAgICAg
ICAgICAgLy8gSXQgd2FzIG9wdGltaXplZCBvdXQuCisgICAgICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBp
dGVyLT52YWx1ZS5zaXplKCk7ICsraSkgeworICAgICAgICAgICAgICAgIFN0YWNrTWFwczo6UmVj
b3JkJiByZWNvcmQgPSBpdGVyLT52YWx1ZVtpXTsKKyAgICAgICAgICAgICAgICBSZWdpc3RlclNl
dCB1c2VkUmVnaXN0ZXJzID0gdXNlZFJlZ2lzdGVyc0ZvcihyZWNvcmQpOworICAgICAgICAgICAg
ICAgIFZlY3RvcjxMb2NhdGlvbj4gbG9jYXRpb25zOworICAgICAgICAgICAgICAgIGZvciAoYXV0
byBsb2NhdGlvbiA6IHJlY29yZC5sb2NhdGlvbnMpCisgICAgICAgICAgICAgICAgICAgIGxvY2F0
aW9ucy5hcHBlbmQoTG9jYXRpb246OmZvclN0YWNrbWFwcygmc3RhY2ttYXBzLCBsb2NhdGlvbikp
OworCisgICAgICAgICAgICAgICAgY2hhciogc3RhcnRPZklDID0KKyAgICAgICAgICAgICAgICAg
ICAgYml0d2lzZV9jYXN0PGNoYXIqPihnZW5lcmF0ZWRGdW5jdGlvbikgKyByZWNvcmQuaW5zdHJ1
Y3Rpb25PZmZzZXQ7CisgICAgICAgICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwgcGF0Y2hwb2lu
dCgoTWFjcm9Bc3NlbWJsZXJDb2RlUHRyKHN0YXJ0T2ZJQykpKTsKKyAgICAgICAgICAgICAgICBD
b2RlTG9jYXRpb25MYWJlbCBleGNlcHRpb25UYXJnZXQgPQorICAgICAgICAgICAgICAgICAgICBz
dGF0ZS5maW5hbGl6ZXItPmhhbmRsZUV4Y2VwdGlvbnNMaW5rQnVmZmVyLT5lbnRyeXBvaW50KCk7
CisKKyAgICAgICAgICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8TGF6eVNsb3dQYXRoPiBsYXp5U2xv
d1BhdGggPSBzdGQ6Om1ha2VfdW5pcXVlPExhenlTbG93UGF0aD4oCisgICAgICAgICAgICAgICAg
ICAgIHBhdGNocG9pbnQsIGV4Y2VwdGlvblRhcmdldCwgdXNlZFJlZ2lzdGVycywgZGVzY3JpcHRv
ci5jYWxsU2l0ZUluZGV4KCksCisgICAgICAgICAgICAgICAgICAgIGRlc2NyaXB0b3IubV9saW5r
ZXItPnJ1bihsb2NhdGlvbnMpKTsKKworICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6TGFi
ZWwgYmVnaW4gPSBzbG93UGF0aEpJVC5sYWJlbCgpOworCisgICAgICAgICAgICAgICAgLy8gRklY
TUU6IFRoaXMgc2hvdWxkIGJlIHB1c2hpbmcgdGhlIGxhenkgc2xvdyBwYXRoIGluZGV4IGluIHNv
bWUgdmVjdG9yIG9yIHdoYXRldmVyLgorICAgICAgICAgICAgICAgIHNsb3dQYXRoSklULnB1c2hU
b1NhdmVJbW1lZGlhdGVXaXRob3V0VG91Y2hpbmdSZWdpc3RlcnMoCisgICAgICAgICAgICAgICAg
ICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKHN0YXRlLmppdENvZGUtPmxhenlTbG93UGF0
aHMuc2l6ZSgpKSk7CisgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wIGdlbmVyYXRv
ckp1bXAgPSBzbG93UGF0aEpJVC5qdW1wKCk7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgZGVzY3JpcHRvci5tX2dlbmVyYXRvcnMuYXBwZW5kKHN0ZDo6bWFrZV90dXBsZShsYXp5
U2xvd1BhdGguZ2V0KCksIGJlZ2luKSk7CisKKyAgICAgICAgICAgICAgICBzdGF0ZS5qaXRDb2Rl
LT5sYXp5U2xvd1BhdGhzLmFwcGVuZChXVEY6Om1vdmUobGF6eVNsb3dQYXRoKSk7CisgICAgICAg
ICAgICAgICAgc3RhdGUuZmluYWxpemVyLT5sYXp5U2xvd1BhdGhHZW5lcmF0b3JKdW1wcy5hcHBl
bmQoZ2VuZXJhdG9ySnVtcCk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KICAgICAgICAgCiAg
ICAgICAgIGV4Y2VwdGlvblRhcmdldC5saW5rKCZzbG93UGF0aEpJVCk7CiAgICAgICAgIE1hY3Jv
QXNzZW1ibGVyOjpKdW1wIGV4Y2VwdGlvbkp1bXAgPSBzbG93UGF0aEpJVC5qdW1wKCk7CkBAIC01
NzgsMTIgKzYyOCwxOSBAQCBzdGF0aWMgdm9pZCBmaXhGdW5jdGlvbkJhc2VkT25TdGFja01hcHMo
CiAgICAgICAgICAgICAgICAgc3RhdGUsIGNvZGVCbG9jaywgZ2VuZXJhdGVkRnVuY3Rpb24sIHJl
Y29yZE1hcCwgc3RhdGUucHV0QnlJZHNbaV0sCiAgICAgICAgICAgICAgICAgc2l6ZU9mUHV0QnlJ
ZCgpKTsKICAgICAgICAgfQotCiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IHN0YXRlLmNoZWNr
SW5zLnNpemUoKTsgaS0tOykgewogICAgICAgICAgICAgZ2VuZXJhdGVDaGVja0luSUNGYXN0UGF0
aCgKICAgICAgICAgICAgICAgICBzdGF0ZSwgY29kZUJsb2NrLCBnZW5lcmF0ZWRGdW5jdGlvbiwg
cmVjb3JkTWFwLCBzdGF0ZS5jaGVja0luc1tpXSwKICAgICAgICAgICAgICAgICBzaXplT2ZJbigp
KTsgCi0gICAgICAgIH0gCisgICAgICAgIH0KKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gc3Rh
dGUubGF6eVNsb3dQYXRocy5zaXplKCk7IGktLTspIHsKKyAgICAgICAgICAgIExhenlTbG93UGF0
aERlc2NyaXB0b3ImIGxhenlTbG93UGF0aCA9IHN0YXRlLmxhenlTbG93UGF0aHNbaV07CisgICAg
ICAgICAgICBmb3IgKGF1dG8mIHR1cGxlIDogbGF6eVNsb3dQYXRoLm1fZ2VuZXJhdG9ycykgewor
ICAgICAgICAgICAgICAgIE1hY3JvQXNzZW1ibGVyOjpyZXBsYWNlV2l0aEp1bXAoCisgICAgICAg
ICAgICAgICAgICAgIHN0ZDo6Z2V0PDA+KHR1cGxlKS0+cGF0Y2hwb2ludCgpLAorICAgICAgICAg
ICAgICAgICAgICBzdGF0ZS5maW5hbGl6ZXItPnNpZGVDb2RlTGlua0J1ZmZlci0+bG9jYXRpb25P
ZihzdGQ6OmdldDwxPih0dXBsZSkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgIH0K
ICAgICAKICAgICBhZGp1c3RDYWxsSUNzRm9yU3RhY2ttYXBzKHN0YXRlLmpzQ2FsbHMsIHJlY29y
ZE1hcCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTElubGluZUNhY2hlRGVz
Y3JpcHRvci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW5s
aW5lQ2FjaGVEZXNjcmlwdG9yLmgJKHJldmlzaW9uIDE5MDg0MykKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMSW5saW5lQ2FjaGVEZXNjcmlwdG9yLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE1IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpA
QCAtMjksMTIgKzI5LDE1IEBACiAjaWYgRU5BQkxFKEZUTF9KSVQpCiAKICNpbmNsdWRlICJDb2Rl
T3JpZ2luLmgiCisjaW5jbHVkZSAiRlRMTGF6eVNsb3dQYXRoLmgiCiAjaW5jbHVkZSAiSklUSW5s
aW5lQ2FjaGVHZW5lcmF0b3IuaCIKICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlci5oIgogI2luY2x1
ZGUgPHd0Zi90ZXh0L1VuaXF1ZWRTdHJpbmdJbXBsLmg+CiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgRlRMIHsKIAorY2xhc3MgTG9jYXRpb247CisKIGNsYXNzIElubGluZUNhY2hlRGVzY3Jp
cHRvciB7CiBwdWJsaWM6CiAgICAgSW5saW5lQ2FjaGVEZXNjcmlwdG9yKCkgCkBAIC0xMTMsMTcg
KzExNiw0NiBAQCBjbGFzcyBDaGVja0luRGVzY3JpcHRvciA6IHB1YmxpYyBJbmxpbmVDCiBwdWJs
aWM6CiAgICAgQ2hlY2tJbkRlc2NyaXB0b3IoKSB7IH0KICAgICAKLSAgICBDaGVja0luRGVzY3Jp
cHRvcih1bnNpZ25lZCBzdGFja21hcElELCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlLCBjb25zdCBV
bmlxdWVkU3RyaW5nSW1wbCogdWlkKQotICAgICAgICA6IElubGluZUNhY2hlRGVzY3JpcHRvcihz
dGFja21hcElELCBjYWxsU2l0ZSwgbnVsbHB0cikKLSAgICAgICAgLCBtX3VpZCh1aWQpCisgICAg
Q2hlY2tJbkRlc2NyaXB0b3IodW5zaWduZWQgc3RhY2ttYXBJRCwgQ2FsbFNpdGVJbmRleCBjYWxs
U2l0ZSwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKKyAgICAgICAgOiBJbmxpbmVDYWNoZURlc2Ny
aXB0b3Ioc3RhY2ttYXBJRCwgY2FsbFNpdGUsIHVpZCkKICAgICB7CiAgICAgfQotCiAgICAgCi0g
ICAgY29uc3QgVW5pcXVlZFN0cmluZ0ltcGwqIG1fdWlkOwogICAgIFZlY3RvcjxDaGVja0luR2Vu
ZXJhdG9yPiBtX2dlbmVyYXRvcnM7CiB9OwogCisvLyBZb3UgY2FuIGNyZWF0ZSBhIGxhenkgc2xv
dyBwYXRoIGNhbGwgaW4gbG93ZXJERkdUb0xMVk0gYnkgZG9pbmc6CisvLyBtX2Z0bFN0YXRlLmxh
enlTbG93UGF0aHMuYXBwZW5kKAorLy8gICAgIExhenlTbG93UGF0aERlc2NyaXB0b3IoCisvLyAg
ICAgICAgIHN0YWNrbWFwSUQsIGNhbGxTaXRlSW5kZXgsCisvLyAgICAgICAgIGNyZWF0ZVNoYXJl
ZFRhc2s8UmVmUHRyPExhenlTbG93UGF0aDo6R2VuZXJhdG9yPihjb25zdCBWZWN0b3I8TG9jYXRp
b24+Jik+KAorLy8gICAgICAgICAgICAgW10gKGNvbnN0IFZlY3RvcjxMb2NhdGlvbj4mIGxvY2F0
aW9ucykgLT4gUmVmUHRyPExhenlTbG93UGF0aDo6R2VuZXJhdG9yPiB7CisvLyAgICAgICAgICAg
ICAgICAgLy8gVGhpcyBsYW1iZGEgc2hvdWxkIGp1c3QgcmVjb3JkIHRoZSByZWdpc3RlcnMgdGhh
dCB3ZSB3aWxsIGJlIHVzaW5nLCBhbmQgcmV0dXJuCisvLyAgICAgICAgICAgICAgICAgLy8gYSBT
aGFyZWRUYXNrIHRoYXQgd2lsbCBhY3R1YWxseSBnZW5lcmF0ZSB0aGUgc2xvdyBwYXRoLgorLy8g
ICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVMYXp5Q2FsbEdlbmVyYXRvcigKKy8vICAgICAg
ICAgICAgICAgICAgICAgZnVuY3Rpb24sIGxvY2F0aW9uc1swXS5kaXJlY3RHUFIoKSwgbG9jYXRp
b25zWzFdLmRpcmVjdEdQUigpKTsKKy8vICAgICAgICAgICAgIH0pKSk7CisvLworLy8gVXN1YWxs
eSwgeW91IGNhbiB1c2UgdGhlIExvd2VyREZHVG9MTFZNOjpsYXp5U2xvd1BhdGgoKSBoZWxwZXIs
IHdoaWNoIHRha2VzIGNhcmUgb2YgdGhlIGRlc2NyaXB0b3IKKy8vIGZvciB5b3UgYW5kIGFsc28g
Y3JlYXRlcyB0aGUgcGF0Y2hwb2ludC4KK3R5cGVkZWYgUmVmUHRyPExhenlTbG93UGF0aDo6R2Vu
ZXJhdG9yPiBMYXp5U2xvd1BhdGhMaW5rZXJGdW5jdGlvbihjb25zdCBWZWN0b3I8TG9jYXRpb24+
Jik7Cit0eXBlZGVmIFNoYXJlZFRhc2s8TGF6eVNsb3dQYXRoTGlua2VyRnVuY3Rpb24+IExhenlT
bG93UGF0aExpbmtlclRhc2s7CitjbGFzcyBMYXp5U2xvd1BhdGhEZXNjcmlwdG9yIDogcHVibGlj
IElubGluZUNhY2hlRGVzY3JpcHRvciB7CitwdWJsaWM6CisgICAgTGF6eVNsb3dQYXRoRGVzY3Jp
cHRvcigpIHsgfQorCisgICAgTGF6eVNsb3dQYXRoRGVzY3JpcHRvcigKKyAgICAgICAgdW5zaWdu
ZWQgc3RhY2ttYXBJRCwgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZSwKKyAgICAgICAgUmVmUHRyPExh
enlTbG93UGF0aExpbmtlclRhc2s+IGxpbmtlcikKKyAgICAgICAgOiBJbmxpbmVDYWNoZURlc2Ny
aXB0b3Ioc3RhY2ttYXBJRCwgY2FsbFNpdGUsIG51bGxwdHIpCisgICAgICAgICwgbV9saW5rZXIo
bGlua2VyKQorICAgIHsKKyAgICB9CisKKyAgICBWZWN0b3I8c3RkOjp0dXBsZTxMYXp5U2xvd1Bh
dGgqLCBDQ2FsbEhlbHBlcnM6OkxhYmVsPj4gbV9nZW5lcmF0b3JzOworCisgICAgUmVmUHRyPExh
enlTbG93UGF0aExpbmtlclRhc2s+IG1fbGlua2VyOworfTsKIAogfSB9IC8vIG5hbWVzcGFjZSBK
U0M6OkZUTAogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVENvZGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVENvZGUuaAkocmV2
aXNpb24gMTkwODQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRDb2RlLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTMwLDYgKzMwLDcgQEAKIAogI2luY2x1ZGUgIkRGR0NvbW1vbkRh
dGEuaCIKICNpbmNsdWRlICJGVExEYXRhU2VjdGlvbi5oIgorI2luY2x1ZGUgIkZUTExhenlTbG93
UGF0aC5oIgogI2luY2x1ZGUgIkZUTE9TUkV4aXQuaCIKICNpbmNsdWRlICJGVExTdGFja01hcHMu
aCIKICNpbmNsdWRlICJGVExVbndpbmRJbmZvLmgiCkBAIC04Niw2ICs4Nyw3IEBAIHB1YmxpYzoK
ICAgICBERkc6OkNvbW1vbkRhdGEgY29tbW9uOwogICAgIFNlZ21lbnRlZFZlY3RvcjxPU1JFeGl0
LCA4PiBvc3JFeGl0OwogICAgIFN0YWNrTWFwcyBzdGFja21hcHM7CisgICAgVmVjdG9yPHN0ZDo6
dW5pcXVlX3B0cjxMYXp5U2xvd1BhdGg+PiBsYXp5U2xvd1BhdGhzOwogICAgIAogcHJpdmF0ZToK
ICAgICBWZWN0b3I8UmVmUHRyPERhdGFTZWN0aW9uPj4gbV9kYXRhU2VjdGlvbnM7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVEZpbmFsaXplci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExKSVRGaW5hbGl6ZXIuY3BwCShyZXZpc2lv
biAxOTA4NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEpJVEZpbmFsaXplci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNiwxMSArMTA2LDExIEBAIGJvb2wgSklURmluYWxpemVy
OjpmaW5hbGl6ZUZ1bmN0aW9uKCkKICAgICAgICAgLy8gU2lkZSBjb2RlIGlzIGZvciBzcGVjaWFs
IHNsb3cgcGF0aHMgdGhhdCB3ZSBnZW5lcmF0ZSBvdXJzZWx2ZXMsIGxpa2UgZm9yIGlubGluZQog
ICAgICAgICAvLyBjYWNoZXMuCiAgICAgICAgIAotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBz
bG93UGF0aENhbGxzLnNpemUoKTsgaS0tOykgewotICAgICAgICAgICAgU2xvd1BhdGhDYWxsJiBj
YWxsID0gc2xvd1BhdGhDYWxsc1tpXTsKKyAgICAgICAgZm9yIChDQ2FsbEhlbHBlcnM6Okp1bXAg
anVtcCA6IGxhenlTbG93UGF0aEdlbmVyYXRvckp1bXBzKSB7CiAgICAgICAgICAgICBzaWRlQ29k
ZUxpbmtCdWZmZXItPmxpbmsoCi0gICAgICAgICAgICAgICAgY2FsbC5jYWxsKCksCi0gICAgICAg
ICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwobV9wbGFuLnZtLmZ0bFRodW5rcy0+Z2V0U2xvd1Bh
dGhDYWxsVGh1bmsobV9wbGFuLnZtLCBjYWxsLmtleSgpKS5jb2RlKCkpKTsKKyAgICAgICAgICAg
ICAgICBqdW1wLAorICAgICAgICAgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsKAorICAgICAgICAg
ICAgICAgICAgICBtX3BsYW4udm0uZ2V0Q1RJU3R1YihsYXp5U2xvd1BhdGhHZW5lcmF0aW9uVGh1
bmtHZW5lcmF0b3IpLmNvZGUoKSkpOwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBqaXRD
b2RlLT5hZGRIYW5kbGUoRklOQUxJWkVfREZHX0NPREUoCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTEpJVEZpbmFsaXplci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMSklURmluYWxpemVyLmgJKHJldmlzaW9uIDE5MDg0MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSklURmluYWxpemVyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTY1LDggKzY1LDggQEAgcHVibGljOgogICAgIHN0ZDo6dW5pcXVlX3B0cjxMaW5rQnVmZmVyPiBz
aWRlQ29kZUxpbmtCdWZmZXI7CiAgICAgc3RkOjp1bmlxdWVfcHRyPExpbmtCdWZmZXI+IGhhbmRs
ZUV4Y2VwdGlvbnNMaW5rQnVmZmVyOwogICAgIFZlY3RvcjxPdXRPZkxpbmVDb2RlSW5mbz4gb3V0
T2ZMaW5lQ29kZUluZm9zOwotICAgIFZlY3RvcjxTbG93UGF0aENhbGw+IHNsb3dQYXRoQ2FsbHM7
IC8vIENhbGxzIGluc2lkZSB0aGUgc2lkZSBjb2RlLgogICAgIFZlY3RvcjxPU1JFeGl0Q29tcGls
YXRpb25JbmZvPiBvc3JFeGl0OworICAgIFZlY3RvcjxDQ2FsbEhlbHBlcnM6Okp1bXA+IGxhenlT
bG93UGF0aEdlbmVyYXRvckp1bXBzOwogICAgIEdlbmVyYXRlZEZ1bmN0aW9uIGZ1bmN0aW9uOwog
ICAgIFJlZlB0cjxKSVRDb2RlPiBqaXRDb2RlOwogfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMTGF6eVNsb3dQYXRoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTExhenlTbG93UGF0aC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZnRsL0ZUTExhenlTbG93UGF0aC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSw3NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElF
RCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUg
SU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJF
Q1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwg
REFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBP
RiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiRlRMTGF6eVNsb3dQYXRoLmgiCisK
KyNpbmNsdWRlICJGVExTbG93UGF0aENhbGwuaCIKKyNpbmNsdWRlICJMaW5rQnVmZmVyLmgiCisK
K25hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKKworTGF6eVNsb3dQYXRoOjpMYXp5U2xv
d1BhdGgoCisgICAgQ29kZUxvY2F0aW9uTGFiZWwgcGF0Y2hwb2ludCwgQ29kZUxvY2F0aW9uTGFi
ZWwgZXhjZXB0aW9uVGFyZ2V0LAorICAgIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJz
LCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgsIFJlZlB0cjxHZW5lcmF0b3I+IGdlbmVyYXRv
cikKKyAgICA6IG1fcGF0Y2hwb2ludChwYXRjaHBvaW50KQorICAgICwgbV9leGNlcHRpb25UYXJn
ZXQoZXhjZXB0aW9uVGFyZ2V0KQorICAgICwgbV91c2VkUmVnaXN0ZXJzKHVzZWRSZWdpc3RlcnMp
CisgICAgLCBtX2NhbGxTaXRlSW5kZXgoY2FsbFNpdGVJbmRleCkKKyAgICAsIG1fZ2VuZXJhdG9y
KGdlbmVyYXRvcikKK3sKK30KKworTGF6eVNsb3dQYXRoOjp+TGF6eVNsb3dQYXRoKCkKK3sKK30K
Kwordm9pZCBMYXp5U2xvd1BhdGg6OmdlbmVyYXRlKENvZGVCbG9jayogY29kZUJsb2NrKQorewor
ICAgIFJFTEVBU0VfQVNTRVJUKCFtX3N0dWIpOworCisgICAgVk0mIHZtID0gKmNvZGVCbG9jay0+
dm0oKTsKKworICAgIENDYWxsSGVscGVycyBqaXQoJnZtLCBjb2RlQmxvY2spOworICAgIEdlbmVy
YXRpb25QYXJhbXMgcGFyYW1zOworICAgIENDYWxsSGVscGVyczo6SnVtcExpc3QgZXhjZXB0aW9u
SnVtcHM7CisgICAgcGFyYW1zLmV4Y2VwdGlvbkp1bXBzID0gbV9leGNlcHRpb25UYXJnZXQgPyAm
ZXhjZXB0aW9uSnVtcHMgOiBudWxscHRyOworICAgIHBhcmFtcy5sYXp5U2xvd1BhdGggPSB0aGlz
OworICAgIG1fZ2VuZXJhdG9yLT5ydW4oaml0LCBwYXJhbXMpOworCisgICAgTGlua0J1ZmZlciBs
aW5rQnVmZmVyKHZtLCBqaXQsIGNvZGVCbG9jaywgSklUQ29tcGlsYXRpb25NdXN0U3VjY2VlZCk7
CisgICAgbGlua0J1ZmZlci5saW5rKAorICAgICAgICBwYXJhbXMuZG9uZUp1bXBzLCBtX3BhdGNo
cG9pbnQubGFiZWxBdE9mZnNldChNYWNyb0Fzc2VtYmxlcjo6bWF4SnVtcFJlcGxhY2VtZW50U2l6
ZSgpKSk7CisgICAgaWYgKG1fZXhjZXB0aW9uVGFyZ2V0KQorICAgICAgICBsaW5rQnVmZmVyLmxp
bmsoZXhjZXB0aW9uSnVtcHMsIG1fZXhjZXB0aW9uVGFyZ2V0KTsKKyAgICBtX3N0dWIgPSBGSU5B
TElaRV9DT0RFX0ZPUihjb2RlQmxvY2ssIGxpbmtCdWZmZXIsICgiTGF6eSBzbG93IHBhdGggY2Fs
bCBzdHViIikpOworCisgICAgTWFjcm9Bc3NlbWJsZXI6OnJlcGxhY2VXaXRoSnVtcChtX3BhdGNo
cG9pbnQsIENvZGVMb2NhdGlvbkxhYmVsKG1fc3R1Yi5jb2RlKCkpKTsKK30KKworfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkZUTAorCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
TGF6eVNsb3dQYXRoLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9G
VExMYXp5U2xvd1BhdGguaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9m
dGwvRlRMTGF6eVNsb3dQYXRoLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw5MSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBg
QVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1F
UkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFS
RSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEZUTExh
enlTbG93UGF0aF9oCisjZGVmaW5lIEZUTExhenlTbG93UGF0aF9oCisKKyNpbmNsdWRlICJDQ2Fs
bEhlbHBlcnMuaCIKKyNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJDb2RlTG9jYXRp
b24uaCIKKyNpbmNsdWRlICJHUFJJbmZvLmgiCisjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmLmgiCisjaW5jbHVkZSAiUmVnaXN0ZXJTZXQuaCIKKyNpbmNsdWRlIDx3dGYvU2hhcmVkVGFz
ay5oPgorCituYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CisKKy8vIEEgTGF6eVNsb3dQ
YXRoIGlzIGFuIG9iamVjdCB0aGF0IHJlcHJlc2VudHMgYSBwaWVjZSBvZiBjb2RlIHRoYXQgaXMg
cGFydCBvZiBGVEwgZ2VuZXJhdGVkIGNvZGUKKy8vIHRoYXQgd2lsbCBiZSBnZW5lcmF0ZWQgbGF6
aWx5LiBJdCBob2xkcyBhbGwgb2YgdGhlIGltcG9ydGFudCBpbmZvcm1hdGlvbiBuZWVkZWQgdG8g
Z2VuZXJhdGUgdGhhdAorLy8gY29kZSwgc3VjaCBhcyB3aGVyZSB0byBsaW5rIGp1bXBzIHRvIGFu
ZCB3aGljaCByZWdpc3RlcnMgYXJlIGluIHVzZS4gSXQgYWxzbyBoYXMgYSByZWZlcmVuY2UgdG8g
YQorLy8gU2hhcmVkVGFzayB0aGF0IHdpbGwgZG8gdGhlIGFjdHVhbCBjb2RlIGdlbmVyYXRpb24u
IFRoYXQgU2hhcmVkVGFzayBtYXkgaGF2ZSBhZGRpdGlvbmFsIGRhdGEsIGxpa2UKKy8vIHdoaWNo
IHJlZ2lzdGVycyBob2xkIHRoZSBpbnB1dHMgb3Igb3V0cHV0cy4KK2NsYXNzIExhenlTbG93UGF0
aCB7CisgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoTGF6eVNsb3dQYXRoKTsKKyAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBzdHJ1Y3QgR2VuZXJhdGlvblBhcmFtcyB7
CisgICAgICAgIC8vIEV4dHJhIHBhcmFtZXRlcnMgdG8gdGhlIEdlbmVyYXRvckZ1bmN0aW9uIGFy
ZSBtYWRlIGludG8gZmllbGRzIG9mIHRoaXMgc3RydWN0LCBzbyB0aGF0IGlmCisgICAgICAgIC8v
IHdlIGFkZCBuZXcgcGFyYW1ldGVycywgd2UgZG9uJ3QgaGF2ZSB0byBjaGFuZ2UgYWxsIG9mIHRo
ZSB1c2Vycy4KKyAgICAgICAgQ0NhbGxIZWxwZXJzOjpKdW1wTGlzdCBkb25lSnVtcHM7CisgICAg
ICAgIENDYWxsSGVscGVyczo6SnVtcExpc3QqIGV4Y2VwdGlvbkp1bXBzOworICAgICAgICBMYXp5
U2xvd1BhdGgqIGxhenlTbG93UGF0aDsKKyAgICB9OworCisgICAgdHlwZWRlZiB2b2lkIEdlbmVy
YXRvckZ1bmN0aW9uKENDYWxsSGVscGVycyYsIEdlbmVyYXRpb25QYXJhbXMmKTsKKyAgICB0eXBl
ZGVmIFNoYXJlZFRhc2s8R2VuZXJhdG9yRnVuY3Rpb24+IEdlbmVyYXRvcjsKKworICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEZ1bmN0b3I+CisgICAgc3RhdGljIFJlZlB0cjxHZW5lcmF0b3I+IGNyZWF0
ZUdlbmVyYXRvcihjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IGNyZWF0ZVNoYXJlZFRhc2s8R2VuZXJhdG9yRnVuY3Rpb24+KGZ1bmN0b3IpOworICAgIH0KKyAg
ICAKKyAgICBMYXp5U2xvd1BhdGgoCisgICAgICAgIENvZGVMb2NhdGlvbkxhYmVsIHBhdGNocG9p
bnQsIENvZGVMb2NhdGlvbkxhYmVsIGV4Y2VwdGlvblRhcmdldCwKKyAgICAgICAgY29uc3QgUmVn
aXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsIENhbGxTaXRlSW5kZXggY2FsbFNpdGVJbmRleCwgUmVm
UHRyPEdlbmVyYXRvcj4pOworCisgICAgfkxhenlTbG93UGF0aCgpOworCisgICAgQ29kZUxvY2F0
aW9uTGFiZWwgcGF0Y2hwb2ludCgpIGNvbnN0IHsgcmV0dXJuIG1fcGF0Y2hwb2ludDsgfQorICAg
IGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV91c2Vk
UmVnaXN0ZXJzOyB9CisgICAgQ2FsbFNpdGVJbmRleCBjYWxsU2l0ZUluZGV4KCkgY29uc3QgeyBy
ZXR1cm4gbV9jYWxsU2l0ZUluZGV4OyB9CisKKyAgICB2b2lkIGdlbmVyYXRlKENvZGVCbG9jayop
OworCisgICAgTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIHN0dWIoKSBjb25zdCB7IHJldHVybiBtX3N0
dWI7IH0KKworcHJpdmF0ZToKKyAgICBDb2RlTG9jYXRpb25MYWJlbCBtX3BhdGNocG9pbnQ7Cisg
ICAgQ29kZUxvY2F0aW9uTGFiZWwgbV9leGNlcHRpb25UYXJnZXQ7CisgICAgUmVnaXN0ZXJTZXQg
bV91c2VkUmVnaXN0ZXJzOworICAgIENhbGxTaXRlSW5kZXggbV9jYWxsU2l0ZUluZGV4OworICAg
IE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBtX3N0dWI7CisgICAgUmVmUHRyPEdlbmVyYXRvcj4gbV9n
ZW5lcmF0b3I7Cit9OworCit9IH0gLy8gbmFtZXNwYWNlIEpTQzo6RlRMCisKKyNlbmRpZiAvLyBG
VExMYXp5U2xvd1BhdGhfaAorCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExh
enlTbG93UGF0aENhbGwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTExhenlTbG93UGF0aENhbGwuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMTGF6eVNsb3dQYXRoQ2FsbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
NTYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisg
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
KyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lm
bmRlZiBGVExMYXp5U2xvd1BhdGhDYWxsX2gKKyNkZWZpbmUgRlRMTGF6eVNsb3dQYXRoQ2FsbF9o
CisKKyNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJDb2RlTG9jYXRpb24uaCIKKyNp
bmNsdWRlICJGVExMYXp5U2xvd1BhdGguaCIKKyNpbmNsdWRlICJGVExTbG93UGF0aENhbGwuaCIK
KyNpbmNsdWRlICJGVExUaHVua3MuaCIKKyNpbmNsdWRlICJHUFJJbmZvLmgiCisjaW5jbHVkZSAi
TWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgiCisjaW5jbHVkZSAiUmVnaXN0ZXJTZXQuaCIKKworbmFt
ZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBSZXN1bHRU
eXBlLCB0eXBlbmFtZS4uLiBBcmd1bWVudFR5cGVzPgorUmVmUHRyPExhenlTbG93UGF0aDo6R2Vu
ZXJhdG9yPiBjcmVhdGVMYXp5Q2FsbEdlbmVyYXRvcigKKyAgICBGdW5jdGlvblB0ciBmdW5jdGlv
biwgUmVzdWx0VHlwZSByZXN1bHQsIEFyZ3VtZW50VHlwZXMuLi4gYXJndW1lbnRzKQoreworICAg
IHJldHVybiBMYXp5U2xvd1BhdGg6OmNyZWF0ZUdlbmVyYXRvcigKKyAgICAgICAgWz1dIChDQ2Fs
bEhlbHBlcnMmIGppdCwgTGF6eVNsb3dQYXRoOjpHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsK
KyAgICAgICAgICAgIGNhbGxPcGVyYXRpb24oCisgICAgICAgICAgICAgICAgcGFyYW1zLmxhenlT
bG93UGF0aC0+dXNlZFJlZ2lzdGVycygpLCBqaXQsIHBhcmFtcy5sYXp5U2xvd1BhdGgtPmNhbGxT
aXRlSW5kZXgoKSwKKyAgICAgICAgICAgICAgICBwYXJhbXMuZXhjZXB0aW9uSnVtcHMsIGZ1bmN0
aW9uLCByZXN1bHQsIGFyZ3VtZW50cy4uLik7CisgICAgICAgICAgICBwYXJhbXMuZG9uZUp1bXBz
LmFwcGVuZChqaXQuanVtcCgpKTsKKyAgICAgICAgfSk7Cit9CisKK30gfSAvLyBuYW1lc3BhY2Ug
SlNDOjpGVEwKKworI2VuZGlmIC8vIEZUTExhenlTbG93UGF0aENhbGxfaAorCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkocmV2aXNp
b24gMTkwODQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExW
TS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDYgKzM5LDcgQEAKICNpbmNsdWRlICJGVExGb3JP
U1JFbnRyeUpJVENvZGUuaCIKICNpbmNsdWRlICJGVExGb3JtYXR0ZWRWYWx1ZS5oIgogI2luY2x1
ZGUgIkZUTElubGluZUNhY2hlU2l6ZS5oIgorI2luY2x1ZGUgIkZUTExhenlTbG93UGF0aENhbGwu
aCIKICNpbmNsdWRlICJGVExMb3dlcmVkTm9kZVZhbHVlLmgiCiAjaW5jbHVkZSAiRlRMT3BlcmF0
aW9ucy5oIgogI2luY2x1ZGUgIkZUTE91dHB1dC5oIgpAQCAtNTAsNiArNTEsNyBAQAogI2luY2x1
ZGUgIk9wZXJhbmRzSW5saW5lcy5oIgogI2luY2x1ZGUgIlNjb3BlZEFyZ3VtZW50cy5oIgogI2lu
Y2x1ZGUgIlNjb3BlZEFyZ3VtZW50c1RhYmxlLmgiCisjaW5jbHVkZSAiU2NyYXRjaFJlZ2lzdGVy
QWxsb2NhdG9yLmgiCiAjaW5jbHVkZSAiVmlydHVhbFJlZ2lzdGVyLmgiCiAjaW5jbHVkZSAiV2F0
Y2hkb2cuaCIKICNpbmNsdWRlIDxhdG9taWM+CkBAIC0zMTU5LDkgKzMxNjEsMTUgQEAgcHJpdmF0
ZToKICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwogICAgICAgICAKICAgICAgICAg
bV9vdXQuYXBwZW5kVG8oc2xvd1BhdGgsIGNvbnRpbnVhdGlvbik7Ci0gICAgICAgIExWYWx1ZSBj
YWxsUmVzdWx0ID0gdm1DYWxsKAotICAgICAgICAgICAgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlv
bkNyZWF0ZUFjdGl2YXRpb25EaXJlY3QpLCBtX2NhbGxGcmFtZSwgd2Vha1BvaW50ZXIoc3RydWN0
dXJlKSwKLSAgICAgICAgICAgIHNjb3BlLCB3ZWFrUG9pbnRlcih0YWJsZSksIG1fb3V0LmNvbnN0
SW50NjQoSlNWYWx1ZTo6ZW5jb2RlKGluaXRpYWxpemF0aW9uVmFsdWUpKSk7CisgICAgICAgIExW
YWx1ZSBjYWxsUmVzdWx0ID0gbGF6eVNsb3dQYXRoKAorICAgICAgICAgICAgWz1dIChjb25zdCBW
ZWN0b3I8TG9jYXRpb24+JiBsb2NhdGlvbnMpIC0+IFJlZlB0cjxMYXp5U2xvd1BhdGg6OkdlbmVy
YXRvcj4geworICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVMYXp5Q2FsbEdlbmVyYXRvcigK
KyAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uQ3JlYXRlQWN0aXZhdGlvbkRpcmVjdCwgbG9j
YXRpb25zWzBdLmRpcmVjdEdQUigpLAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6
OlRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgbG9jYXRpb25zWzFdLmRpcmVjdEdQUigpLAorICAg
ICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIodGFibGUpLAorICAg
ICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNv
ZGUoaW5pdGlhbGl6YXRpb25WYWx1ZSkpKTsKKyAgICAgICAgICAgIH0sCisgICAgICAgICAgICBz
Y29wZSk7CiAgICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dSZXN1bHQgPSBtX291dC5hbmNob3Io
Y2FsbFJlc3VsdCk7CiAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKICAgICAgICAg
CkBAIC0zMjE1LDExICszMjIzLDI1IEBAIHByaXZhdGU6CiAgICAgICAgIG1fb3V0Lmp1bXAoY29u
dGludWF0aW9uKTsKICAgICAgICAgCiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKHNsb3dQYXRoLCBj
b250aW51YXRpb24pOwotICAgICAgICAKLSAgICAgICAgTFZhbHVlIGNhbGxSZXN1bHQgPSBpc0Fy
cm93RnVuY3Rpb24KLSAgICAgICAgICAgID8gdm1DYWxsKG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRp
b25OZXdBcnJvd0Z1bmN0aW9uV2l0aEludmFsaWRhdGVkUmVhbGxvY2F0aW9uV2F0Y2hwb2ludCks
IG1fY2FsbEZyYW1lLCBzY29wZSwgd2Vha1BvaW50ZXIoZXhlY3V0YWJsZSksIHRoaXNWYWx1ZSkK
LSAgICAgICAgICAgIDogdm1DYWxsKG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25OZXdGdW5jdGlv
bldpdGhJbnZhbGlkYXRlZFJlYWxsb2NhdGlvbldhdGNocG9pbnQpLCBtX2NhbGxGcmFtZSwgc2Nv
cGUsIHdlYWtQb2ludGVyKGV4ZWN1dGFibGUpKTsKLSAgICAgICAgCisKKyAgICAgICAgVmVjdG9y
PExWYWx1ZT4gc2xvd1BhdGhBcmd1bWVudHM7CisgICAgICAgIHNsb3dQYXRoQXJndW1lbnRzLmFw
cGVuZChzY29wZSk7CisgICAgICAgIGlmIChpc0Fycm93RnVuY3Rpb24pCisgICAgICAgICAgICBz
bG93UGF0aEFyZ3VtZW50cy5hcHBlbmQodGhpc1ZhbHVlKTsKKyAgICAgICAgTFZhbHVlIGNhbGxS
ZXN1bHQgPSBsYXp5U2xvd1BhdGgoCisgICAgICAgICAgICBbPV0gKGNvbnN0IFZlY3RvcjxMb2Nh
dGlvbj4mIGxvY2F0aW9ucykgLT4gUmVmUHRyPExhenlTbG93UGF0aDo6R2VuZXJhdG9yPiB7Cisg
ICAgICAgICAgICAgICAgaWYgKGlzQXJyb3dGdW5jdGlvbikgeworICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gY3JlYXRlTGF6eUNhbGxHZW5lcmF0b3IoCisgICAgICAgICAgICAgICAgICAgICAg
ICBvcGVyYXRpb25OZXdBcnJvd0Z1bmN0aW9uV2l0aEludmFsaWRhdGVkUmVhbGxvY2F0aW9uV2F0
Y2hwb2ludCwKKyAgICAgICAgICAgICAgICAgICAgICAgIGxvY2F0aW9uc1swXS5kaXJlY3RHUFIo
KSwgbG9jYXRpb25zWzFdLmRpcmVjdEdQUigpLAorICAgICAgICAgICAgICAgICAgICAgICAgQ0Nh
bGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGV4ZWN1dGFibGUpLCBsb2NhdGlvbnNbMl0uZGlyZWN0
R1BSKCkpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRl
TGF6eUNhbGxHZW5lcmF0b3IoCisgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbk5ld0Z1bmN0
aW9uV2l0aEludmFsaWRhdGVkUmVhbGxvY2F0aW9uV2F0Y2hwb2ludCwKKyAgICAgICAgICAgICAg
ICAgICAgbG9jYXRpb25zWzBdLmRpcmVjdEdQUigpLCBsb2NhdGlvbnNbMV0uZGlyZWN0R1BSKCks
CisgICAgICAgICAgICAgICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihleGVjdXRh
YmxlKSk7CisgICAgICAgICAgICB9LAorICAgICAgICAgICAgc2xvd1BhdGhBcmd1bWVudHMpOwog
ICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93UmVzdWx0ID0gbV9vdXQuYW5jaG9yKGNhbGxSZXN1
bHQpOwogICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CiAgICAgICAgIApAQCAtMzI3
MSw5ICszMjkzLDEzIEBAIHByaXZhdGU6CiAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9u
KTsKICAgICAgICAgCiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKHNsb3dQYXRoLCBjb250aW51YXRp
b24pOwotICAgICAgICBMVmFsdWUgY2FsbFJlc3VsdCA9IHZtQ2FsbCgKLSAgICAgICAgICAgIG1f
b3V0Lm9wZXJhdGlvbihvcGVyYXRpb25DcmVhdGVEaXJlY3RBcmd1bWVudHMpLCBtX2NhbGxGcmFt
ZSwgd2Vha1BvaW50ZXIoc3RydWN0dXJlKSwKLSAgICAgICAgICAgIGxlbmd0aC52YWx1ZSwgbV9v
dXQuY29uc3RJbnQzMihtaW5DYXBhY2l0eSkpOworICAgICAgICBMVmFsdWUgY2FsbFJlc3VsdCA9
IGxhenlTbG93UGF0aCgKKyAgICAgICAgICAgIFs9XSAoY29uc3QgVmVjdG9yPExvY2F0aW9uPiYg
bG9jYXRpb25zKSAtPiBSZWZQdHI8TGF6eVNsb3dQYXRoOjpHZW5lcmF0b3I+IHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gY3JlYXRlTGF6eUNhbGxHZW5lcmF0b3IoCisgICAgICAgICAgICAgICAg
ICAgIG9wZXJhdGlvbkNyZWF0ZURpcmVjdEFyZ3VtZW50cywgbG9jYXRpb25zWzBdLmRpcmVjdEdQ
UigpLAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoc3Ry
dWN0dXJlKSwgbG9jYXRpb25zWzFdLmRpcmVjdEdQUigpLAorICAgICAgICAgICAgICAgICAgICBD
Q2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0zMihtaW5DYXBhY2l0eSkpOworICAgICAgICAgICAgfSwg
bGVuZ3RoLnZhbHVlKTsKICAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd1Jlc3VsdCA9IG1fb3V0
LmFuY2hvcihjYWxsUmVzdWx0KTsKICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwog
ICAgICAgICAKQEAgLTM1NjMsOSArMzU4OSwxNCBAQCBwcml2YXRlOgogICAgICAgICAgICAgbV9v
dXQuYXBwZW5kVG8oc2xvd0Nhc2UsIGNvbnRpbnVhdGlvbik7CiAgICAgICAgICAgICBMVmFsdWUg
c3RydWN0dXJlVmFsdWUgPSBtX291dC5waGkoCiAgICAgICAgICAgICAgICAgbV9vdXQuaW50UHRy
LCBsYXJnZVN0cnVjdHVyZSwgZmFpbFN0cnVjdHVyZSk7Ci0gICAgICAgICAgICBWYWx1ZUZyb21C
bG9jayBzbG93UmVzdWx0ID0gbV9vdXQuYW5jaG9yKHZtQ2FsbCgKLSAgICAgICAgICAgICAgICBt
X291dC5vcGVyYXRpb24ob3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZSksCi0gICAgICAgICAgICAg
ICAgbV9jYWxsRnJhbWUsIHN0cnVjdHVyZVZhbHVlLCBwdWJsaWNMZW5ndGgpKTsKKyAgICAgICAg
ICAgIExWYWx1ZSBzbG93UmVzdWx0VmFsdWUgPSBsYXp5U2xvd1BhdGgoCisgICAgICAgICAgICAg
ICAgWz1dIChjb25zdCBWZWN0b3I8TG9jYXRpb24+JiBsb2NhdGlvbnMpIC0+IFJlZlB0cjxMYXp5
U2xvd1BhdGg6OkdlbmVyYXRvcj4geworICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRl
TGF6eUNhbGxHZW5lcmF0b3IoCisgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25OZXdB
cnJheVdpdGhTaXplLCBsb2NhdGlvbnNbMF0uZGlyZWN0R1BSKCksCisgICAgICAgICAgICAgICAg
ICAgICAgICBsb2NhdGlvbnNbMV0uZGlyZWN0R1BSKCksIGxvY2F0aW9uc1syXS5kaXJlY3RHUFIo
KSk7CisgICAgICAgICAgICAgICAgfSwKKyAgICAgICAgICAgICAgICBzdHJ1Y3R1cmVWYWx1ZSwg
cHVibGljTGVuZ3RoKTsKKyAgICAgICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dSZXN1bHQgPSBt
X291dC5hbmNob3Ioc2xvd1Jlc3VsdFZhbHVlKTsKICAgICAgICAgICAgIG1fb3V0Lmp1bXAoY29u
dGludWF0aW9uKTsKICAgICAgICAgICAgIAogICAgICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29u
dGludWF0aW9uLCBsYXN0TmV4dCk7CkBAIC0zNzYyLDIwICszNzkzLDI5IEBAIHByaXZhdGU6CiAg
ICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKICAgICAgICAgCiAgICAgICAgIG1fb3V0
LmFwcGVuZFRvKHNsb3dQYXRoLCBjb250aW51YXRpb24pOwotICAgICAgICBWYWx1ZUZyb21CbG9j
ayBzbG93UmVzdWx0OworICAgICAgICBMVmFsdWUgc2xvd1Jlc3VsdFZhbHVlOwogICAgICAgICBz
d2l0Y2ggKG51bUtpZHMpIHsKICAgICAgICAgY2FzZSAyOgotICAgICAgICAgICAgc2xvd1Jlc3Vs
dCA9IG1fb3V0LmFuY2hvcih2bUNhbGwoCi0gICAgICAgICAgICAgICAgbV9vdXQub3BlcmF0aW9u
KG9wZXJhdGlvbk1ha2VSb3BlMiksIG1fY2FsbEZyYW1lLCBraWRzWzBdLCBraWRzWzFdKSk7Cisg
ICAgICAgICAgICBzbG93UmVzdWx0VmFsdWUgPSBsYXp5U2xvd1BhdGgoCisgICAgICAgICAgICAg
ICAgWz1dIChjb25zdCBWZWN0b3I8TG9jYXRpb24+JiBsb2NhdGlvbnMpIC0+IFJlZlB0cjxMYXp5
U2xvd1BhdGg6OkdlbmVyYXRvcj4geworICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRl
TGF6eUNhbGxHZW5lcmF0b3IoCisgICAgICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25NYWtl
Um9wZTIsIGxvY2F0aW9uc1swXS5kaXJlY3RHUFIoKSwgbG9jYXRpb25zWzFdLmRpcmVjdEdQUigp
LAorICAgICAgICAgICAgICAgICAgICAgICAgbG9jYXRpb25zWzJdLmRpcmVjdEdQUigpKTsKKyAg
ICAgICAgICAgICAgICB9LCBraWRzWzBdLCBraWRzWzFdKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICBjYXNlIDM6Ci0gICAgICAgICAgICBzbG93UmVzdWx0ID0gbV9vdXQuYW5jaG9yKHZt
Q2FsbCgKLSAgICAgICAgICAgICAgICBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uTWFrZVJvcGUz
KSwgbV9jYWxsRnJhbWUsIGtpZHNbMF0sIGtpZHNbMV0sIGtpZHNbMl0pKTsKKyAgICAgICAgICAg
IHNsb3dSZXN1bHRWYWx1ZSA9IGxhenlTbG93UGF0aCgKKyAgICAgICAgICAgICAgICBbPV0gKGNv
bnN0IFZlY3RvcjxMb2NhdGlvbj4mIGxvY2F0aW9ucykgLT4gUmVmUHRyPExhenlTbG93UGF0aDo6
R2VuZXJhdG9yPiB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVMYXp5Q2FsbEdl
bmVyYXRvcigKKyAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJhdGlvbk1ha2VSb3BlMywgbG9j
YXRpb25zWzBdLmRpcmVjdEdQUigpLCBsb2NhdGlvbnNbMV0uZGlyZWN0R1BSKCksCisgICAgICAg
ICAgICAgICAgICAgICAgICBsb2NhdGlvbnNbMl0uZGlyZWN0R1BSKCksIGxvY2F0aW9uc1szXS5k
aXJlY3RHUFIoKSk7CisgICAgICAgICAgICAgICAgfSwga2lkc1swXSwga2lkc1sxXSwga2lkc1sy
XSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgIERG
R19DUkFTSChtX2dyYXBoLCBtX25vZGUsICJCYWQgbnVtYmVyIG9mIGNoaWxkcmVuIik7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQorICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93UmVz
dWx0ID0gbV9vdXQuYW5jaG9yKHNsb3dSZXN1bHRWYWx1ZSk7CiAgICAgICAgIG1fb3V0Lmp1bXAo
Y29udGludWF0aW9uKTsKICAgICAgICAgCiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVh
dGlvbiwgbGFzdE5leHQpOwpAQCAtNDEzMiw3ICs0MTcyLDExIEBAIHByaXZhdGU6CiAgICAgICAg
IAogICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGlzTm90SW52
YWxpZGF0ZWQsIGNvbnRpbnVhdGlvbik7CiAKLSAgICAgICAgdm1DYWxsKG1fb3V0Lm9wZXJhdGlv
bihvcGVyYXRpb25Ob3RpZnlXcml0ZSksIG1fY2FsbEZyYW1lLCBtX291dC5jb25zdEludFB0cihz
ZXQpKTsKKyAgICAgICAgbGF6eVNsb3dQYXRoKAorICAgICAgICAgICAgWz1dIChjb25zdCBWZWN0
b3I8TG9jYXRpb24+JikgLT4gUmVmUHRyPExhenlTbG93UGF0aDo6R2VuZXJhdG9yPiB7CisgICAg
ICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxhenlDYWxsR2VuZXJhdG9yKAorICAgICAgICAgICAg
ICAgICAgICBvcGVyYXRpb25Ob3RpZnlXcml0ZSwgSW52YWxpZEdQUlJlZywgQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tUHRyKHNldCkpOworICAgICAgICAgICAgfSk7CiAgICAgICAgIG1fb3V0Lmp1
bXAoY29udGludWF0aW9uKTsKICAgICAgICAgCiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRp
bnVhdGlvbiwgbGFzdE5leHQpOwpAQCAtNDk3OCwxMCArNTAyMiwxMyBAQCBwcml2YXRlOgogICAg
ICAgICAgICAgcmFyZWx5KHNsb3dQYXRoKSwgdXN1YWxseShjb250aW51YXRpb24pKTsKICAgICAg
ICAgCiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKHNsb3dQYXRoLCBub3RDZWxsQ2FzZSk7Ci0gICAg
ICAgIExWYWx1ZSBzbG93UmVzdWx0VmFsdWUgPSB2bUNhbGwoCi0gICAgICAgICAgICBtX291dC5v
cGVyYXRpb24ob3BlcmF0aW9uT2JqZWN0SXNPYmplY3QpLCBtX2NhbGxGcmFtZSwgd2Vha1BvaW50
ZXIoZ2xvYmFsT2JqZWN0KSwKLSAgICAgICAgICAgIHZhbHVlKTsKLSAgICAgICAgVmFsdWVGcm9t
QmxvY2sgc2xvd1Jlc3VsdCA9IG1fb3V0LmFuY2hvcihtX291dC5ub3ROdWxsKHNsb3dSZXN1bHRW
YWx1ZSkpOworICAgICAgICBMVmFsdWUgc2xvd1Jlc3VsdFZhbHVlID0gbGF6eVNsb3dQYXRoKAor
ICAgICAgICAgICAgWz1dIChjb25zdCBWZWN0b3I8TG9jYXRpb24+JiBsb2NhdGlvbnMpIC0+IFJl
ZlB0cjxMYXp5U2xvd1BhdGg6OkdlbmVyYXRvcj4geworICAgICAgICAgICAgICAgIHJldHVybiBj
cmVhdGVMYXp5Q2FsbEdlbmVyYXRvcigKKyAgICAgICAgICAgICAgICAgICAgb3BlcmF0aW9uT2Jq
ZWN0SXNPYmplY3QsIGxvY2F0aW9uc1swXS5kaXJlY3RHUFIoKSwKKyAgICAgICAgICAgICAgICAg
ICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGdsb2JhbE9iamVjdCksIGxvY2F0aW9uc1sx
XS5kaXJlY3RHUFIoKSk7CisgICAgICAgICAgICB9LCB2YWx1ZSk7CisgICAgICAgIFZhbHVlRnJv
bUJsb2NrIHNsb3dSZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQubm90WmVybzY0KHNsb3dSZXN1
bHRWYWx1ZSkpOwogICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CiAgICAgICAgIAog
ICAgICAgICBtX291dC5hcHBlbmRUbyhub3RDZWxsQ2FzZSwgY29udGludWF0aW9uKTsKQEAgLTUw
MjUsOSArNTA3MiwxMiBAQCBwcml2YXRlOgogICAgICAgICAgICAgcmFyZWx5KHNsb3dQYXRoKSwg
dXN1YWxseShjb250aW51YXRpb24pKTsKICAgICAgICAgCiAgICAgICAgIG1fb3V0LmFwcGVuZFRv
KHNsb3dQYXRoLCBjb250aW51YXRpb24pOwotICAgICAgICBMVmFsdWUgc2xvd1Jlc3VsdFZhbHVl
ID0gdm1DYWxsKAotICAgICAgICAgICAgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbk9iamVjdElz
RnVuY3Rpb24pLCBtX2NhbGxGcmFtZSwgd2Vha1BvaW50ZXIoZ2xvYmFsT2JqZWN0KSwKLSAgICAg
ICAgICAgIHZhbHVlKTsKKyAgICAgICAgTFZhbHVlIHNsb3dSZXN1bHRWYWx1ZSA9IGxhenlTbG93
UGF0aCgKKyAgICAgICAgICAgIFs9XSAoY29uc3QgVmVjdG9yPExvY2F0aW9uPiYgbG9jYXRpb25z
KSAtPiBSZWZQdHI8TGF6eVNsb3dQYXRoOjpHZW5lcmF0b3I+IHsKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gY3JlYXRlTGF6eUNhbGxHZW5lcmF0b3IoCisgICAgICAgICAgICAgICAgICAgIG9wZXJh
dGlvbk9iamVjdElzRnVuY3Rpb24sIGxvY2F0aW9uc1swXS5kaXJlY3RHUFIoKSwKKyAgICAgICAg
ICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKGdsb2JhbE9iamVjdCksIGxv
Y2F0aW9uc1sxXS5kaXJlY3RHUFIoKSk7CisgICAgICAgICAgICB9LCB2YWx1ZSk7CiAgICAgICAg
IFZhbHVlRnJvbUJsb2NrIHNsb3dSZXN1bHQgPSBtX291dC5hbmNob3IobV9vdXQubm90TnVsbChz
bG93UmVzdWx0VmFsdWUpKTsKICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwogICAg
ICAgICAKQEAgLTUwNjYsNyArNTExNiw3IEBAIHByaXZhdGU6CiAgICAgICAgIGlmIChKU1N0cmlu
Zyogc3RyaW5nID0gbV9ub2RlLT5jaGlsZDEoKS0+ZHluYW1pY0Nhc3RDb25zdGFudDxKU1N0cmlu
Zyo+KCkpIHsKICAgICAgICAgICAgIGlmIChzdHJpbmctPnRyeUdldFZhbHVlSW1wbCgpICYmIHN0
cmluZy0+dHJ5R2V0VmFsdWVJbXBsKCktPmlzQXRvbWljKCkpIHsKIAotICAgICAgICAgICAgICAg
IGNvbnN0IGF1dG8gc3RyID0gc3RhdGljX2Nhc3Q8Y29uc3QgQXRvbWljU3RyaW5nSW1wbCo+KHN0
cmluZy0+dHJ5R2V0VmFsdWVJbXBsKCkpOworICAgICAgICAgICAgICAgIFVuaXF1ZWRTdHJpbmdJ
bXBsKiBzdHIgPSBiaXR3aXNlX2Nhc3Q8VW5pcXVlZFN0cmluZ0ltcGwqPihzdHJpbmctPnRyeUdl
dFZhbHVlSW1wbCgpKTsKICAgICAgICAgICAgICAgICB1bnNpZ25lZCBzdGFja21hcElEID0gbV9z
dGFja21hcElEcysrOwogICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgTFZhbHVlIGNhbGwg
PSBtX291dC5jYWxsKApAQCAtNTQ2MCwxMiArNTUxMCwxNiBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKICAgICAgICAgICAgICAgICAKICAgICAg
ICAgICAgICAgICBtX291dC5hcHBlbmRUbyhzbG93UGF0aCwgY29udGludWF0aW9uKTsKLSAgICAg
ICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93T2JqZWN0ID0g
bV9vdXQuYW5jaG9yKHZtQ2FsbCgKLSAgICAgICAgICAgICAgICAgICAgbV9vdXQub3BlcmF0aW9u
KG9wZXJhdGlvbk5ld09iamVjdFdpdGhCdXR0ZXJmbHkpLAotICAgICAgICAgICAgICAgICAgICBt
X2NhbGxGcmFtZSwgbV9vdXQuY29uc3RJbnRQdHIoc3RydWN0dXJlKSkpOworCisgICAgICAgICAg
ICAgICAgTFZhbHVlIHNsb3dPYmplY3RWYWx1ZSA9IGxhenlTbG93UGF0aCgKKyAgICAgICAgICAg
ICAgICAgICAgWz1dIChjb25zdCBWZWN0b3I8TG9jYXRpb24+JiBsb2NhdGlvbnMpIC0+IFJlZlB0
cjxMYXp5U2xvd1BhdGg6OkdlbmVyYXRvcj4geworICAgICAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGNyZWF0ZUxhenlDYWxsR2VuZXJhdG9yKAorICAgICAgICAgICAgICAgICAgICAgICAgICAg
IG9wZXJhdGlvbk5ld09iamVjdFdpdGhCdXR0ZXJmbHksIGxvY2F0aW9uc1swXS5kaXJlY3RHUFIo
KSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1Q
dHIoc3RydWN0dXJlKSk7CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgICAg
IFZhbHVlRnJvbUJsb2NrIHNsb3dPYmplY3QgPSBtX291dC5hbmNob3Ioc2xvd09iamVjdFZhbHVl
KTsKICAgICAgICAgICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93QnV0dGVyZmx5ID0gbV9vdXQu
YW5jaG9yKAotICAgICAgICAgICAgICAgICAgICBtX291dC5sb2FkUHRyKHNsb3dPYmplY3QudmFs
dWUoKSwgbV9oZWFwcy5KU09iamVjdF9idXR0ZXJmbHkpKTsKKyAgICAgICAgICAgICAgICAgICAg
bV9vdXQubG9hZFB0cihzbG93T2JqZWN0VmFsdWUsIG1faGVhcHMuSlNPYmplY3RfYnV0dGVyZmx5
KSk7CiAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgbV9vdXQuanVtcChjb250aW51
YXRpb24pOwogICAgICAgICAgICAgICAgIApAQCAtNTUzNyw5ICs1NTkxLDE0IEBAIHByaXZhdGU6
CiAgICAgICAgIC8vIGJlY2F1c2UgYWxsIGZpZWxkcyB3aWxsIGJlIG92ZXJ3cml0dGVuLgogICAg
ICAgICAvLyBGSVhNRTogSXQgbWF5IGJlIHdvcnRoIGNyZWF0aW5nIGFuIG9wZXJhdGlvbiB0aGF0
IGNhbGxzIGEgY29uc3RydWN0b3Igb24gSlNMZXhpY2FsRW52aXJvbm1lbnQgdGhhdCAKICAgICAg
ICAgLy8gZG9lc24ndCBpbml0aWFsaXplIGV2ZXJ5IHNsb3QgYmVjYXVzZSB3ZSBhcmUgZ3VhcmFu
dGVlZCB0byBkbyB0aGF0IGhlcmUuCi0gICAgICAgIExWYWx1ZSBjYWxsUmVzdWx0ID0gdm1DYWxs
KAotICAgICAgICAgICAgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbkNyZWF0ZUFjdGl2YXRpb25E
aXJlY3QpLCBtX2NhbGxGcmFtZSwgd2Vha1BvaW50ZXIoc3RydWN0dXJlKSwKLSAgICAgICAgICAg
IHNjb3BlLCB3ZWFrUG9pbnRlcih0YWJsZSksIG1fb3V0LmNvbnN0SW50NjQoSlNWYWx1ZTo6ZW5j
b2RlKGpzVW5kZWZpbmVkKCkpKSk7CisgICAgICAgIExWYWx1ZSBjYWxsUmVzdWx0ID0gbGF6eVNs
b3dQYXRoKAorICAgICAgICAgICAgWz1dIChjb25zdCBWZWN0b3I8TG9jYXRpb24+JiBsb2NhdGlv
bnMpIC0+IFJlZlB0cjxMYXp5U2xvd1BhdGg6OkdlbmVyYXRvcj4geworICAgICAgICAgICAgICAg
IHJldHVybiBjcmVhdGVMYXp5Q2FsbEdlbmVyYXRvcigKKyAgICAgICAgICAgICAgICAgICAgb3Bl
cmF0aW9uQ3JlYXRlQWN0aXZhdGlvbkRpcmVjdCwgbG9jYXRpb25zWzBdLmRpcmVjdEdQUigpLAor
ICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIoc3RydWN0dXJl
KSwgbG9jYXRpb25zWzFdLmRpcmVjdEdQUigpLAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW1QdHIodGFibGUpLAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhl
bHBlcnM6OlRydXN0ZWRJbW02NChKU1ZhbHVlOjplbmNvZGUoanNVbmRlZmluZWQoKSkpKTsKKyAg
ICAgICAgICAgIH0sIHNjb3BlKTsKICAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd1Jlc3VsdCA9
ICBtX291dC5hbmNob3IoY2FsbFJlc3VsdCk7CiAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0
aW9uKTsKIApAQCAtNTU4MSw3ICs1NjQwLDEwIEBAIHByaXZhdGU6CiAKICAgICAgICAgTEJhc2lj
QmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyh0aW1lckRpZEZpcmUsIGNvbnRpbnVhdGlv
bik7CiAKLSAgICAgICAgdm1DYWxsKG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25IYW5kbGVXYXRj
aGRvZ1RpbWVyKSwgbV9jYWxsRnJhbWUpOworICAgICAgICBsYXp5U2xvd1BhdGgoCisgICAgICAg
ICAgICBbPV0gKGNvbnN0IFZlY3RvcjxMb2NhdGlvbj4mKSAtPiBSZWZQdHI8TGF6eVNsb3dQYXRo
OjpHZW5lcmF0b3I+IHsKKyAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlTGF6eUNhbGxHZW5l
cmF0b3Iob3BlcmF0aW9uSGFuZGxlV2F0Y2hkb2dUaW1lciwgSW52YWxpZEdQUlJlZyk7CisgICAg
ICAgICAgICB9KTsKICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwogICAgICAgICAK
ICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CkBAIC02MDE1
LDEzICs2MDc3LDE5IEBAIHByaXZhdGU6CiAgICAgICAgIAogICAgICAgICBMVmFsdWUgc2xvd0J1
dHRlcmZseVZhbHVlOwogICAgICAgICBpZiAoc2l6ZUluVmFsdWVzID09IGluaXRpYWxPdXRPZkxp
bmVDYXBhY2l0eSkgewotICAgICAgICAgICAgc2xvd0J1dHRlcmZseVZhbHVlID0gdm1DYWxsKAot
ICAgICAgICAgICAgICAgIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25BbGxvY2F0ZVByb3BlcnR5
U3RvcmFnZVdpdGhJbml0aWFsQ2FwYWNpdHkpLAotICAgICAgICAgICAgICAgIG1fY2FsbEZyYW1l
KTsKKyAgICAgICAgICAgIHNsb3dCdXR0ZXJmbHlWYWx1ZSA9IGxhenlTbG93UGF0aCgKKyAgICAg
ICAgICAgICAgICBbPV0gKGNvbnN0IFZlY3RvcjxMb2NhdGlvbj4mIGxvY2F0aW9ucykgLT4gUmVm
UHRyPExhenlTbG93UGF0aDo6R2VuZXJhdG9yPiB7CisgICAgICAgICAgICAgICAgICAgIHJldHVy
biBjcmVhdGVMYXp5Q2FsbEdlbmVyYXRvcigKKyAgICAgICAgICAgICAgICAgICAgICAgIG9wZXJh
dGlvbkFsbG9jYXRlUHJvcGVydHlTdG9yYWdlV2l0aEluaXRpYWxDYXBhY2l0eSwKKyAgICAgICAg
ICAgICAgICAgICAgICAgIGxvY2F0aW9uc1swXS5kaXJlY3RHUFIoKSk7CisgICAgICAgICAgICAg
ICAgfSk7CiAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBzbG93QnV0dGVyZmx5VmFsdWUg
PSB2bUNhbGwoCi0gICAgICAgICAgICAgICAgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbkFsbG9j
YXRlUHJvcGVydHlTdG9yYWdlKSwKLSAgICAgICAgICAgICAgICBtX2NhbGxGcmFtZSwgbV9vdXQu
Y29uc3RJbnRQdHIoc2l6ZUluVmFsdWVzKSk7CisgICAgICAgICAgICBzbG93QnV0dGVyZmx5VmFs
dWUgPSBsYXp5U2xvd1BhdGgoCisgICAgICAgICAgICAgICAgWz1dIChjb25zdCBWZWN0b3I8TG9j
YXRpb24+JiBsb2NhdGlvbnMpIC0+IFJlZlB0cjxMYXp5U2xvd1BhdGg6OkdlbmVyYXRvcj4gewor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gY3JlYXRlTGF6eUNhbGxHZW5lcmF0b3IoCisgICAg
ICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25BbGxvY2F0ZVByb3BlcnR5U3RvcmFnZSwgbG9j
YXRpb25zWzBdLmRpcmVjdEdQUigpLAorICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxw
ZXJzOjpUcnVzdGVkSW1tUHRyKHNpemVJblZhbHVlcykpOworICAgICAgICAgICAgICAgIH0pOwog
ICAgICAgICB9CiAgICAgICAgIFZhbHVlRnJvbUJsb2NrIHNsb3dCdXR0ZXJmbHkgPSBtX291dC5h
bmNob3Ioc2xvd0J1dHRlcmZseVZhbHVlKTsKICAgICAgICAgCkBAIC02MzAzLDkgKzYzNzEsMTQg
QEAgcHJpdmF0ZToKICAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOwogICAgICAgICAK
ICAgICAgICAgbV9vdXQuYXBwZW5kVG8oc2xvd1BhdGgsIGNvbnRpbnVhdGlvbik7Ci0gICAgICAg
IAotICAgICAgICBWYWx1ZUZyb21CbG9jayBzbG93UmVzdWx0ID0gbV9vdXQuYW5jaG9yKHZtQ2Fs
bCgKLSAgICAgICAgICAgIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25OZXdPYmplY3QpLCBtX2Nh
bGxGcmFtZSwgbV9vdXQuY29uc3RJbnRQdHIoc3RydWN0dXJlKSkpOworCisgICAgICAgIExWYWx1
ZSBzbG93UmVzdWx0VmFsdWUgPSBsYXp5U2xvd1BhdGgoCisgICAgICAgICAgICBbPV0gKGNvbnN0
IFZlY3RvcjxMb2NhdGlvbj4mIGxvY2F0aW9ucykgLT4gUmVmUHRyPExhenlTbG93UGF0aDo6R2Vu
ZXJhdG9yPiB7CisgICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUxhenlDYWxsR2VuZXJhdG9y
KAorICAgICAgICAgICAgICAgICAgICBvcGVyYXRpb25OZXdPYmplY3QsIGxvY2F0aW9uc1swXS5k
aXJlY3RHUFIoKSwKKyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1t
UHRyKHN0cnVjdHVyZSkpOworICAgICAgICAgICAgfSk7CisgICAgICAgIFZhbHVlRnJvbUJsb2Nr
IHNsb3dSZXN1bHQgPSBtX291dC5hbmNob3Ioc2xvd1Jlc3VsdFZhbHVlKTsKICAgICAgICAgbV9v
dXQuanVtcChjb250aW51YXRpb24pOwogICAgICAgICAKICAgICAgICAgbV9vdXQuYXBwZW5kVG8o
Y29udGludWF0aW9uLCBsYXN0TmV4dCk7CkBAIC02Mzc3LDEwICs2NDUwLDE0IEBAIHByaXZhdGU6
CiAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKICAgICAgICAgCiAgICAgICAgIG1f
b3V0LmFwcGVuZFRvKHNsb3dQYXRoLCBjb250aW51YXRpb24pOwotICAgICAgICAKLSAgICAgICAg
VmFsdWVGcm9tQmxvY2sgc2xvd0FycmF5ID0gbV9vdXQuYW5jaG9yKHZtQ2FsbCgKLSAgICAgICAg
ICAgIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplKSwgbV9jYWxsRnJh
bWUsCi0gICAgICAgICAgICBtX291dC5jb25zdEludFB0cihzdHJ1Y3R1cmUpLCBtX291dC5jb25z
dEludDMyKG51bUVsZW1lbnRzKSkpOworCisgICAgICAgIExWYWx1ZSBzbG93QXJyYXlWYWx1ZSA9
IGxhenlTbG93UGF0aCgKKyAgICAgICAgICAgIFs9XSAoY29uc3QgVmVjdG9yPExvY2F0aW9uPiYg
bG9jYXRpb25zKSAtPiBSZWZQdHI8TGF6eVNsb3dQYXRoOjpHZW5lcmF0b3I+IHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gY3JlYXRlTGF6eUNhbGxHZW5lcmF0b3IoCisgICAgICAgICAgICAgICAg
ICAgIG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemUsIGxvY2F0aW9uc1swXS5kaXJlY3RHUFIoKSwK
KyAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHN0cnVjdHVy
ZSksIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKG51bUVsZW1lbnRzKSk7CisgICAgICAgICAg
ICB9KTsKKyAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd0FycmF5ID0gbV9vdXQuYW5jaG9yKHNs
b3dBcnJheVZhbHVlKTsKICAgICAgICAgVmFsdWVGcm9tQmxvY2sgc2xvd0J1dHRlcmZseSA9IG1f
b3V0LmFuY2hvcigKICAgICAgICAgICAgIG1fb3V0LmxvYWRQdHIoc2xvd0FycmF5LnZhbHVlKCks
IG1faGVhcHMuSlNPYmplY3RfYnV0dGVyZmx5KSk7CiAKQEAgLTcwNDksMTQgKzcxMjYsMTcgQEAg
cHJpdmF0ZToKICAgICAgICAgZnVuY3RvcihUeXBlb2ZUeXBlOjpPYmplY3QpOwogICAgICAgICAK
ICAgICAgICAgbV9vdXQuYXBwZW5kVG8oc2xvd1BhdGgsIHVucmVhY2hhYmxlKTsKLSAgICAgICAg
TFZhbHVlIHJlc3VsdCA9IHZtQ2FsbCgKLSAgICAgICAgICAgIG1fb3V0Lm9wZXJhdGlvbihvcGVy
YXRpb25UeXBlT2ZPYmplY3RBc1R5cGVvZlR5cGUpLCBtX2NhbGxGcmFtZSwKLSAgICAgICAgICAg
IHdlYWtQb2ludGVyKGdsb2JhbE9iamVjdCksIHZhbHVlKTsKKyAgICAgICAgTFZhbHVlIHJlc3Vs
dCA9IGxhenlTbG93UGF0aCgKKyAgICAgICAgICAgIFs9XSAoY29uc3QgVmVjdG9yPExvY2F0aW9u
PiYgbG9jYXRpb25zKSAtPiBSZWZQdHI8TGF6eVNsb3dQYXRoOjpHZW5lcmF0b3I+IHsKKyAgICAg
ICAgICAgICAgICByZXR1cm4gY3JlYXRlTGF6eUNhbGxHZW5lcmF0b3IoCisgICAgICAgICAgICAg
ICAgICAgIG9wZXJhdGlvblR5cGVPZk9iamVjdEFzVHlwZW9mVHlwZSwgbG9jYXRpb25zWzBdLmRp
cmVjdEdQUigpLAorICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1Q
dHIoZ2xvYmFsT2JqZWN0KSwgbG9jYXRpb25zWzFdLmRpcmVjdEdQUigpKTsKKyAgICAgICAgICAg
IH0sIHZhbHVlKTsKICAgICAgICAgVmVjdG9yPFN3aXRjaENhc2UsIDM+IGNhc2VzOwogICAgICAg
ICBjYXNlcy5hcHBlbmQoU3dpdGNoQ2FzZShtX291dC5jb25zdEludDMyKHN0YXRpY19jYXN0PGlu
dDMyX3Q+KFR5cGVvZlR5cGU6OlVuZGVmaW5lZCkpLCB1bmRlZmluZWRDYXNlKSk7CiAgICAgICAg
IGNhc2VzLmFwcGVuZChTd2l0Y2hDYXNlKG1fb3V0LmNvbnN0SW50MzIoc3RhdGljX2Nhc3Q8aW50
MzJfdD4oVHlwZW9mVHlwZTo6T2JqZWN0KSksIHJlYWxseU9iamVjdENhc2UpKTsKICAgICAgICAg
Y2FzZXMuYXBwZW5kKFN3aXRjaENhc2UobV9vdXQuY29uc3RJbnQzMihzdGF0aWNfY2FzdDxpbnQz
Ml90PihUeXBlb2ZUeXBlOjpGdW5jdGlvbikpLCBmdW5jdGlvbkNhc2UpKTsKLSAgICAgICAgbV9v
dXQuc3dpdGNoSW5zdHJ1Y3Rpb24ocmVzdWx0LCBjYXNlcywgdW5yZWFjaGFibGUsIFdlaWdodCgp
KTsKKyAgICAgICAgbV9vdXQuc3dpdGNoSW5zdHJ1Y3Rpb24obV9vdXQuY2FzdFRvSW50MzIocmVz
dWx0KSwgY2FzZXMsIHVucmVhY2hhYmxlLCBXZWlnaHQoKSk7CiAgICAgICAgIAogICAgICAgICBt
X291dC5hcHBlbmRUbyh1bnJlYWNoYWJsZSwgbm90T2JqZWN0Q2FzZSk7CiAgICAgICAgIG1fb3V0
LnVucmVhY2hhYmxlKCk7CkBAIC03MTYzLDYgKzcyNDMsMTExIEBAIHByaXZhdGU6CiAgICAgICAg
IG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwogICAgICAgICByZXR1cm4g
bV9vdXQucGhpKG1fb3V0LmludDMyLCBmYXN0UmVzdWx0LCBzbG93UmVzdWx0KTsKICAgICB9CisK
KyAgICAvLyBUaGlzIGlzIGEgbWVjaGFuaXNtIGZvciBjcmVhdGluZyBhIGNvZGUgZ2VuZXJhdG9y
IHRoYXQgZmlsbHMgaW4gYSBnYXAgaW4gdGhlIGNvZGUgdXNpbmcgb3VyCisgICAgLy8gb3duIE1h
Y3JvQXNzZW1ibGVyLiBUaGlzIGlzIHVzZWZ1bCBmb3Igc2xvdyBwYXRocyB0aGF0IGludm9sdmUg
YSBsb3Qgb2YgY29kZSBhbmQgd2UgZG9uJ3Qgd2FudAorICAgIC8vIHRvIHBheSB0aGUgcHJpY2Ug
b2YgTExWTSBvcHRpbWl6aW5nIGl0LiBBIGxhenkgc2xvdyBwYXRoIHdpbGwgb25seSBiZSBnZW5l
cmF0ZWQgaWYgaXQgYWN0dWFsbHkKKyAgICAvLyBleGVjdXRlcy4gT24gdGhlIG90aGVyIGhhbmQs
IGEgbGF6eSBzbG93IHBhdGggYWx3YXlzIGluY3VycyB0aGUgY29zdCBvZiB0d28gYWRkaXRpb25h
bCBqdW1wcy4KKyAgICAvLyBBbHNvLCB0aGUgbGF6eSBzbG93IHBhdGgncyByZWdpc3RlciBhbGxv
Y2F0aW9uIHN0YXRlIGlzIHNsYXZlZCB0byB3aGF0ZXZlciBMTFZNIGRpZCwgc28geW91CisgICAg
Ly8gaGF2ZSB0byB1c2UgYSBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3IgdG8gdHJ5IHRvIHVzZSBz
b21lIHVudXNlZCByZWdpc3RlcnMgYW5kIHlvdSBtYXkgaGF2ZQorICAgIC8vIHRvIHNwaWxsIHRv
IHRvcCBvZiBzdGFjayBpZiB0aGVyZSBhcmVuJ3QgZW5vdWdoIHJlZ2lzdGVycyBhdmFpbGFibGUu
CisgICAgLy8KKyAgICAvLyBMYXp5IHNsb3cgcGF0aHMgaW52b2x2ZSB0aHJlZSBkaWZmZXJlbnQg
c3RhZ2VzIG9mIGV4ZWN1dGlvbi4gRWFjaCBzdGFnZSBoYXMgdW5pcXVlCisgICAgLy8gY2FwYWJp
bGl0aWVzIGFuZCBrbm93bGVkZ2UuIFRoZSBzdGFnZXMgYXJlOgorICAgIC8vCisgICAgLy8gMSkg
REZHLT5MTFZNIGxvd2VyaW5nLCBpLmUuIGNvZGUgdGhhdCBydW5zIGluIHRoaXMgcGhhc2UuIExv
d2VyaW5nIGlzIHRoZSBsYXN0IHRpbWUgeW91IHdpbGwKKyAgICAvLyAgICBoYXZlIGFjY2VzcyB0
byBMVmFsdWVzLiBJZiB0aGVyZSBpcyBhbiBMVmFsdWUgdGhhdCBuZWVkcyB0byBiZSBmZWQgYXMg
aW5wdXQgdG8gYSBsYXp5IHNsb3cKKyAgICAvLyAgICBwYXRoLCB0aGVuIHlvdSBtdXN0IHBhc3Mg
aXQgYXMgYW4gYXJndW1lbnQgaGVyZSAoYXMgb25lIG9mIHRoZSB2YXJhcmdzIGFyZ3VtZW50cyBh
ZnRlciB0aGUKKyAgICAvLyAgICBmdW5jdG9yKS4gQnV0LCBsb3dlcmluZyBkb2Vzbid0IGtub3cg
d2hpY2ggcmVnaXN0ZXJzIHdpbGwgYmUgdXNlZCBmb3IgdGhvc2UgTFZhbHVlcy4gSGVuY2UKKyAg
ICAvLyAgICB5b3UgcGFzcyBhIGxhbWJkYSB0byBsYXp5U2xvd1BhdGgoKSBhbmQgdGhhdCBsYW1i
ZGEgd2lsbCBydW4gZHVyaW5nIHN0YWdlICgyKToKKyAgICAvLworICAgIC8vIDIpIEZUTENvbXBp
bGUuY3BwJ3MgZml4RnVuY3Rpb25CYXNlZE9uU3RhY2tNYXBzLiBUaGlzIGNvZGUgaXMgdGhlIG9u
bHkgc3RhZ2UgYXQgd2hpY2ggd2Uga25vdworICAgIC8vICAgIHRoZSBtYXBwaW5nIGZyb20gYXJn
dW1lbnRzIHBhc3NlZCB0byB0aGlzIG1ldGhvZCBpbiAoMSkgYW5kIHRoZSByZWdpc3RlcnMgdGhh
dCBMTFZNCisgICAgLy8gICAgc2VsZWN0ZWQgZm9yIHRob3NlIGFyZ3VtZW50cy4gWW91IGRvbid0
IGFjdHVhbGx5IHdhbnQgdG8gZ2VuZXJhdGUgYW55IGNvZGUgaGVyZSwgc2luY2UgdGhlbgorICAg
IC8vICAgIHRoZSBzbG93IHBhdGggd291bGRuJ3QgYWN0dWFsbHkgYmUgbGF6aWx5IGdlbmVyYXRl
ZC4gSW5zdGVhZCwgeW91IHdhbnQgdG8gc2F2ZSB0aGUKKyAgICAvLyAgICByZWdpc3RlcnMgYmVp
bmcgdXNlZCBmb3IgdGhlIGFyZ3VtZW50cyBhbmQgZGVmZXIgY29kZSBnZW5lcmF0aW9uIHRvIHN0
YWdlICgzKSBieSBjcmVhdGluZworICAgIC8vICAgIGFuZCByZXR1cm5pbmcgYSBMYXp5U2xvd1Bh
dGg6OkdlbmVyYXRvcjoKKyAgICAvLworICAgIC8vIDMpIExhenlTbG93UGF0aCdzIGdlbmVyYXRl
KCkgbWV0aG9kLiBUaGlzIGNvZGUgcnVucyBpbiByZXNwb25zZSB0byB0aGUgbGF6eSBzbG93IHBh
dGgKKyAgICAvLyAgICBleGVjdXRpbmcgZm9yIHRoZSBmaXJzdCB0aW1lLiBJdCB3aWxsIGNhbGwg
dGhlIGdlbmVyYXRvciB5b3UgY3JlYXRlZCBpbiBzdGFnZSAoMikuCisgICAgLy8KKyAgICAvLyBO
b3RlIHRoYXQgZWFjaCB0aW1lIHlvdSBpbnZva2Ugc3RhZ2UgKDEpLCBzdGFnZSAoMikgbWF5IGJl
IGludm9rZWQgemVybywgb25lLCBvciBtYW55IHRpbWVzLgorICAgIC8vIFN0YWdlICgyKSB3aWxs
IHVzdWFsbHkgYmUgaW52b2tlZCBvbmNlIGZvciBzdGFnZSAoMSkuIEJ1dCwgTExWTSBtYXkga2ls
bCB0aGUgY29kZSwgaW4gd2hpY2gKKyAgICAvLyBjYXNlIHN0YWdlICgyKSB3b24ndCBydW4uIExM
Vk0gbWF5IGR1cGxpY2F0ZSB0aGUgY29kZSAoZm9yIGV4YW1wbGUgdmlhIGp1bXAgdGhyZWFkaW5n
KSwKKyAgICAvLyBsZWFkaW5nIHRvIG1hbnkgY2FsbHMgdG8geW91ciBzdGFnZSAoMikgbGFtYmRh
LiBTdGFnZSAoMykgbWF5IGJlIGNhbGxlZCB6ZXJvIG9yIG9uY2UgZm9yIGVhY2gKKyAgICAvLyBz
dGFnZSAoMikuIEl0IHdpbGwgYmUgY2FsbGVkIHplcm8gdGltZXMgaWYgdGhlIHNsb3cgcGF0aCBu
ZXZlciBydW5zLiBUaGlzIGlzIHdoYXQgeW91IGhvcGUgZm9yCisgICAgLy8gd2hlbmV2ZXIgeW91
IHVzZSB0aGUgbGF6eVNsb3dQYXRoKCkgbWVjaGFuaXNtLgorICAgIC8vCisgICAgLy8gQSB0eXBp
Y2FsIHVzZSBvZiBsYXp5U2xvd1BhdGgoKSB3aWxsIGxvb2sgbGlrZSB0aGUgZXhhbXBsZSBiZWxv
dywgd2hpY2gganVzdCBjcmVhdGVzIGEgc2xvdworICAgIC8vIHBhdGggdGhhdCBhZGRzIHNvbWUg
dmFsdWUgdG8gdGhlIGlucHV0IGFuZCByZXR1cm5zIGl0LgorICAgIC8vCisgICAgLy8gLy8gU3Rh
Z2UgKDEpIGlzIGhlcmUuIFRoaXMgaXMgeW91ciBsYXN0IGNoYW5jZSB0byBmaWd1cmUgb3V0IHdo
aWNoIExWYWx1ZXMgdG8gdXNlIGFzIGlucHV0cy4KKyAgICAvLyAvLyBOb3RpY2UgaG93IHdlIHBh
c3MgImlucHV0IiBhcyBhbiBhcmd1bWVudCB0byBsYXp5U2xvd1BhdGgoKS4KKyAgICAvLyBMVmFs
dWUgaW5wdXQgPSAuLi47CisgICAgLy8gaW50IGFkZGVuZCA9IC4uLjsKKyAgICAvLyBMVmFsdWUg
b3V0cHV0ID0gbGF6eVNsb3dQYXRoKAorICAgIC8vICAgICBbPV0gKGNvbnN0IFZlY3RvcjxMb2Nh
dGlvbj4mIGxvY2F0aW9ucykgLT4gUmVmUHRyPExhenlTbG93UGF0aDo6R2VuZXJhdG9yPiB7Cisg
ICAgLy8gICAgICAgICAvLyBTdGFnZSAoMikgaXMgaGVyZS4gVGhpcyBpcyB5b3VyIGxhc3QgY2hh
bmNlIHRvIGZpZ3VyZSBvdXQgd2hpY2ggcmVnaXN0ZXJzIGFyZSB1c2VkCisgICAgLy8gICAgICAg
ICAvLyBmb3Igd2hpY2ggdmFsdWVzLiBMb2NhdGlvbiB6ZXJvIGlzIGFsd2F5cyB0aGUgcmV0dXJu
IHZhbHVlLiBZb3UgY2FuIGlnbm9yZSBpdCBpZgorICAgIC8vICAgICAgICAgLy8geW91IGRvbid0
IHdhbnQgdG8gcmV0dXJuIGFueXRoaW5nLiBMb2NhdGlvbiAxIGlzIHRoZSByZWdpc3RlciBmb3Ig
dGhlIGZpcnN0CisgICAgLy8gICAgICAgICAvLyBhcmd1bWVudCB0byB0aGUgbGF6eVNsb3dQYXRo
KCksIGkuZS4gImlucHV0Ii4gTm90ZSB0aGF0IHRoZSBMb2NhdGlvbiBvYmplY3QgY291bGQKKyAg
ICAvLyAgICAgICAgIC8vIGFsc28gaG9sZCBhbiBGUFIsIGlmIHlvdSBhcmUgcGFzc2luZyBhIGRv
dWJsZS4KKyAgICAvLyAgICAgICAgIEdQUlJlZyBvdXRwdXRHUFIgPSBsb2NhdGlvbnNbMF0uZGly
ZWN0R1BSKCk7CisgICAgLy8gICAgICAgICBHUFJSZWcgaW5wdXRHUFIgPSBsb2NhdGlvbnNbMV0u
ZGlyZWN0R1BSKCk7CisgICAgLy8gICAgICAgICByZXR1cm4gTGF6eVNsb3dQYXRoOjpjcmVhdGVH
ZW5lcmF0b3IoCisgICAgLy8gICAgICAgICAgICAgWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgTGF6
eVNsb3dQYXRoOjpHZW5lcmF0aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAvLyAgICAgICAgICAg
ICAgICAgLy8gU3RhZ2UgKDMpIGlzIGhlcmUuIFRoaXMgaXMgd2hlbiB5b3UgZ2VuZXJhdGUgY29k
ZS4gWW91IGhhdmUgYWNjZXNzIHRvIHRoZQorICAgIC8vICAgICAgICAgICAgICAgICAvLyByZWdp
c3RlcnMgeW91IGNvbGxlY3RlZCBpbiBzdGFnZSAoMikgYmVjYXVzZSB0aGlzIGxhbWJkYSBjbG9z
ZXMgb3ZlciB0aG9zZQorICAgIC8vICAgICAgICAgICAgICAgICAvLyB2YXJpYWJsZXMgKG91dHB1
dEdQUiBhbmQgaW5wdXRHUFIpLiBZb3UgYWxzbyBoYXZlIGFjY2VzcyB0byB3aGF0ZXZlciBleHRy
YQorICAgIC8vICAgICAgICAgICAgICAgICAvLyBkYXRhIHlvdSBjb2xsZWN0ZWQgaW4gc3RhZ2Ug
KDEpLCBzdWNoIGFzIHRoZSBhZGRlbmQgaW4gdGhpcyBjYXNlLgorICAgIC8vICAgICAgICAgICAg
ICAgICBqaXQuYWRkMzIoVHJ1c3RlZEltbTMyKGFkZGVuZCksIGlucHV0R1BSLCBvdXRwdXRHUFIp
OworICAgIC8vICAgICAgICAgICAgICAgICAvLyBZb3UgaGF2ZSB0byBlbmQgYnkganVtcGluZyB0
byBkb25lLiBUaGVyZSBpcyBub3RoaW5nIHRvIGZhbGwgdGhyb3VnaCB0by4KKyAgICAvLyAgICAg
ICAgICAgICAgICAgLy8gWW91IGNhbiBhbHNvIGp1bXAgdG8gdGhlIGV4Y2VwdGlvbiBoYW5kbGVy
IChzZWUgTGF6eVNsb3dQYXRoLmggZm9yIG1vcmUKKyAgICAvLyAgICAgICAgICAgICAgICAgLy8g
aW5mbykuIE5vdGUgdGhhdCBjdXJyZW50bHkgeW91IGNhbm5vdCBPU1IgZXhpdC4KKyAgICAvLyAg
ICAgICAgICAgICAgICAgcGFyYW1zLmRvbmVKdW1wcy5hcHBlbmQoaml0Lmp1bXAoKSk7CisgICAg
Ly8gICAgICAgICAgICAgfSk7CisgICAgLy8gICAgIH0sCisgICAgLy8gICAgIGlucHV0KTsKKyAg
ICAvLworICAgIC8vIE5vdGUgdGhhdCBpZiB5b3VyIHNsb3cgcGF0aCBpcyBvbmx5IGRvaW5nIGEg
Y2FsbCwgeW91IGNhbiB1c2UgdGhlIGNyZWF0ZUxhenlDYWxsR2VuZXJhdG9yKCkKKyAgICAvLyBo
ZWxwZXIuIEZvciBleGFtcGxlOgorICAgIC8vCisgICAgLy8gTFZhbHVlIGlucHV0ID0gLi4uOwor
ICAgIC8vIExWYWx1ZSBvdXRwdXQgPSBsYXp5U2xvd1BhdGgoCisgICAgLy8gICAgIFs9XSAoY29u
c3QgVmVjdG9yPExvY2F0aW9uPiYgbG9jYXRpb25zKSAtPiBSZWZQdHI8TGF6eVNsb3dQYXRoOjpH
ZW5lcmF0b3I+IHsKKyAgICAvLyAgICAgICAgIHJldHVybiBjcmVhdGVMYXp5Q2FsbEdlbmVyYXRv
cigKKyAgICAvLyAgICAgICAgICAgICBvcGVyYXRpb25Eb1RoaW5ncywgbG9jYXRpb25zWzBdLmRp
cmVjdEdQUigpLCBsb2NhdGlvbnNbMV0uZGlyZWN0R1BSKCkpOworICAgIC8vICAgICB9KTsKKyAg
ICB0ZW1wbGF0ZTx0eXBlbmFtZSBGdW5jdG9yLCB0eXBlbmFtZS4uLiBBcmd1bWVudFR5cGVzPgor
ICAgIExWYWx1ZSBsYXp5U2xvd1BhdGgoY29uc3QgRnVuY3RvciYgZnVuY3RvciwgQXJndW1lbnRU
eXBlcy4uLiBhcmd1bWVudHMpCisgICAgeworICAgICAgICByZXR1cm4gbGF6eVNsb3dQYXRoKGZ1
bmN0b3IsIFZlY3RvcjxMVmFsdWU+eyBhcmd1bWVudHMuLi4gfSk7CisgICAgfQorCisgICAgdGVt
cGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KKyAgICBMVmFsdWUgbGF6eVNsb3dQYXRoKGNvbnN0IEZ1
bmN0b3ImIGZ1bmN0b3IsIGNvbnN0IFZlY3RvcjxMVmFsdWU+JiB1c2VyQXJndW1lbnRzKQorICAg
IHsKKyAgICAgICAgdW5zaWduZWQgc3RhY2ttYXBJRCA9IG1fc3RhY2ttYXBJRHMrKzsKKworICAg
ICAgICBWZWN0b3I8TFZhbHVlPiBhcmd1bWVudHM7CisgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQo
bV9vdXQuY29uc3RJbnQ2NChzdGFja21hcElEKSk7CisgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQo
bV9vdXQuY29uc3RJbnQzMihNYWNyb0Fzc2VtYmxlcjo6bWF4SnVtcFJlcGxhY2VtZW50U2l6ZSgp
KSk7CisgICAgICAgIGFyZ3VtZW50cy5hcHBlbmQoY29uc3ROdWxsKG1fb3V0LnJlZjgpKTsKKyAg
ICAgICAgYXJndW1lbnRzLmFwcGVuZChtX291dC5jb25zdEludDMyKHVzZXJBcmd1bWVudHMuc2l6
ZSgpKSk7CisgICAgICAgIGFyZ3VtZW50cy5hcHBlbmRWZWN0b3IodXNlckFyZ3VtZW50cyk7Cisg
ICAgICAgIExWYWx1ZSBjYWxsID0gbV9vdXQuY2FsbChtX291dC5wYXRjaHBvaW50SW50NjRJbnRy
aW5zaWMoKSwgYXJndW1lbnRzKTsKKyAgICAgICAgc2V0SW5zdHJ1Y3Rpb25DYWxsaW5nQ29udmVu
dGlvbihjYWxsLCBMTFZNQW55UmVnQ2FsbENvbnYpOworCisgICAgICAgIENhbGxTaXRlSW5kZXgg
Y2FsbFNpdGVJbmRleCA9CisgICAgICAgICAgICBtX2Z0bFN0YXRlLmppdENvZGUtPmNvbW1vbi5h
ZGRDb2RlT3JpZ2luKG1fbm9kZS0+b3JpZ2luLnNlbWFudGljKTsKKyAgICAgICAgCisgICAgICAg
IFJlZlB0cjxMYXp5U2xvd1BhdGhMaW5rZXJUYXNrPiBsaW5rZXIgPQorICAgICAgICAgICAgY3Jl
YXRlU2hhcmVkVGFzazxMYXp5U2xvd1BhdGhMaW5rZXJGdW5jdGlvbj4oZnVuY3Rvcik7CisKKyAg
ICAgICAgbV9mdGxTdGF0ZS5sYXp5U2xvd1BhdGhzLmFwcGVuZChMYXp5U2xvd1BhdGhEZXNjcmlw
dG9yKHN0YWNrbWFwSUQsIGNhbGxTaXRlSW5kZXgsIGxpbmtlcikpOworCisgICAgICAgIHJldHVy
biBjYWxsOworICAgIH0KICAgICAKICAgICB2b2lkIHNwZWN1bGF0ZSgKICAgICAgICAgRXhpdEtp
bmQga2luZCwgRm9ybWF0dGVkVmFsdWUgbG93VmFsdWUsIE5vZGUqIGhpZ2hWYWx1ZSwgTFZhbHVl
IGZhaWxDb25kaXRpb24pCkBAIC04MjY3LDMzICs4NDUyLDY3IEBAIHByaXZhdGU6CiAKICAgICB2
b2lkIGVtaXRTdG9yZUJhcnJpZXIoTFZhbHVlIGJhc2UpCiAgICAgewotICAgICAgICBMQmFzaWNC
bG9jayBpc01hcmtlZEFuZE5vdFJlbWVtYmVyZWQgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIlN0
b3JlIGJhcnJpZXIgaXMgbWFya2VkIGJsb2NrIikpOwotICAgICAgICBMQmFzaWNCbG9jayBidWZm
ZXJIYXNTcGFjZSA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiU3RvcmUgYmFycmllciBidWZmZXIg
aGFzIHNwYWNlIikpOwotICAgICAgICBMQmFzaWNCbG9jayBidWZmZXJJc0Z1bGwgPSBGVExfTkVX
X0JMT0NLKG1fb3V0LCAoIlN0b3JlIGJhcnJpZXIgYnVmZmVyIGlzIGZ1bGwiKSk7CisgICAgICAg
IExCYXNpY0Jsb2NrIHNsb3dQYXRoID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJTdG9yZSBiYXJy
aWVyIHNsb3cgcGF0aCIpKTsKICAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRM
X05FV19CTE9DSyhtX291dCwgKCJTdG9yZSBiYXJyaWVyIGNvbnRpbnVhdGlvbiIpKTsKIAotICAg
ICAgICAvLyBDaGVjayB0aGUgbWFyayBieXRlLiAKLSAgICAgICAgbV9vdXQuYnJhbmNoKAotICAg
ICAgICAgICAgbV9vdXQubm90WmVybzgobG9hZENlbGxTdGF0ZShiYXNlKSksIHVzdWFsbHkoY29u
dGludWF0aW9uKSwgcmFyZWx5KGlzTWFya2VkQW5kTm90UmVtZW1iZXJlZCkpOwotCi0gICAgICAg
IC8vIEFwcGVuZCB0byB0aGUgd3JpdGUgYmFycmllciBidWZmZXIuCi0gICAgICAgIExCYXNpY0Js
b2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oaXNNYXJrZWRBbmROb3RSZW1lbWJlcmVkLCBi
dWZmZXJIYXNTcGFjZSk7Ci0gICAgICAgIExWYWx1ZSBjdXJyZW50QnVmZmVySW5kZXggPSBtX291
dC5sb2FkMzIobV9vdXQuYWJzb2x1dGUodm0oKS5oZWFwLndyaXRlQmFycmllckJ1ZmZlcigpLmN1
cnJlbnRJbmRleEFkZHJlc3MoKSkpOwotICAgICAgICBMVmFsdWUgYnVmZmVyQ2FwYWNpdHkgPSBt
X291dC5jb25zdEludDMyKHZtKCkuaGVhcC53cml0ZUJhcnJpZXJCdWZmZXIoKS5jYXBhY2l0eSgp
KTsKICAgICAgICAgbV9vdXQuYnJhbmNoKAotICAgICAgICAgICAgbV9vdXQubGVzc1RoYW4oY3Vy
cmVudEJ1ZmZlckluZGV4LCBidWZmZXJDYXBhY2l0eSksCi0gICAgICAgICAgICB1c3VhbGx5KGJ1
ZmZlckhhc1NwYWNlKSwgcmFyZWx5KGJ1ZmZlcklzRnVsbCkpOworICAgICAgICAgICAgbV9vdXQu
bm90WmVybzgobG9hZENlbGxTdGF0ZShiYXNlKSksIHVzdWFsbHkoY29udGludWF0aW9uKSwgcmFy
ZWx5KHNsb3dQYXRoKSk7CiAKLSAgICAgICAgLy8gQnVmZmVyIGhhcyBzcGFjZSwgc3RvcmUgdG8g
aXQuCi0gICAgICAgIG1fb3V0LmFwcGVuZFRvKGJ1ZmZlckhhc1NwYWNlLCBidWZmZXJJc0Z1bGwp
OwotICAgICAgICBMVmFsdWUgd3JpdGVCYXJyaWVyQnVmZmVyQmFzZSA9IG1fb3V0LmNvbnN0SW50
UHRyKHZtKCkuaGVhcC53cml0ZUJhcnJpZXJCdWZmZXIoKS5idWZmZXIoKSk7Ci0gICAgICAgIG1f
b3V0LnN0b3JlUHRyKGJhc2UsIG1fb3V0LmJhc2VJbmRleChtX2hlYXBzLldyaXRlQmFycmllckJ1
ZmZlcl9idWZmZXJDb250ZW50cywgd3JpdGVCYXJyaWVyQnVmZmVyQmFzZSwgbV9vdXQuemVyb0V4
dFB0cihjdXJyZW50QnVmZmVySW5kZXgpKSk7Ci0gICAgICAgIG1fb3V0LnN0b3JlMzIobV9vdXQu
YWRkKGN1cnJlbnRCdWZmZXJJbmRleCwgbV9vdXQuY29uc3RJbnQzMigxKSksIG1fb3V0LmFic29s
dXRlKHZtKCkuaGVhcC53cml0ZUJhcnJpZXJCdWZmZXIoKS5jdXJyZW50SW5kZXhBZGRyZXNzKCkp
KTsKLSAgICAgICAgbV9vdXQuanVtcChjb250aW51YXRpb24pOworICAgICAgICBMQmFzaWNCbG9j
ayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKHNsb3dQYXRoLCBjb250aW51YXRpb24pOwogCi0g
ICAgICAgIC8vIEJ1ZmZlciBpcyBvdXQgb2Ygc3BhY2UsIGZsdXNoIGl0LgotICAgICAgICBtX291
dC5hcHBlbmRUbyhidWZmZXJJc0Z1bGwsIGNvbnRpbnVhdGlvbik7Ci0gICAgICAgIHZtQ2FsbE5v
RXhjZXB0aW9ucyhtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uRmx1c2hXcml0ZUJhcnJpZXJCdWZm
ZXIpLCBtX2NhbGxGcmFtZSwgYmFzZSk7CisgICAgICAgIC8vIFdlIGVtaXQgdGhlIHN0b3JlIGJh
cnJpZXIgc2xvdyBwYXRoIGxhemlseS4gSW4gYSBsb3Qgb2YgY2FzZXMsIHRoaXMgd2lsbCBuZXZl
ciBmaXJlLiBBbmQKKyAgICAgICAgLy8gd2hlbiBpdCBkb2VzIGZpcmUsIGl0IG1ha2VzIHNlbnNl
IGZvciB1cyB0byBnZW5lcmF0ZSB0aGlzIGNvZGUgdXNpbmcgb3VyIEpJVCByYXRoZXIgdGhhbgor
ICAgICAgICAvLyB3YXN0aW5nIExMVk0ncyB0aW1lIG9wdGltaXppbmcgaXQuCisgICAgICAgIGxh
enlTbG93UGF0aCgKKyAgICAgICAgICAgIFs9XSAoY29uc3QgVmVjdG9yPExvY2F0aW9uPiYgbG9j
YXRpb25zKSAtPiBSZWZQdHI8TGF6eVNsb3dQYXRoOjpHZW5lcmF0b3I+IHsKKyAgICAgICAgICAg
ICAgICBHUFJSZWcgYmFzZUdQUiA9IGxvY2F0aW9uc1sxXS5kaXJlY3RHUFIoKTsKKworICAgICAg
ICAgICAgICAgIHJldHVybiBMYXp5U2xvd1BhdGg6OmNyZWF0ZUdlbmVyYXRvcigKKyAgICAgICAg
ICAgICAgICAgICAgWz1dIChDQ2FsbEhlbHBlcnMmIGppdCwgTGF6eVNsb3dQYXRoOjpHZW5lcmF0
aW9uUGFyYW1zJiBwYXJhbXMpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIFJlZ2lzdGVyU2V0
IHVzZWRSZWdpc3RlcnMgPSBwYXJhbXMubGF6eVNsb3dQYXRoLT51c2VkUmVnaXN0ZXJzKCk7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBTY3JhdGNoUmVnaXN0ZXJBbGxvY2F0b3Igc2NyYXRjaFJl
Z2lzdGVyQWxsb2NhdG9yKHVzZWRSZWdpc3RlcnMpOworICAgICAgICAgICAgICAgICAgICAgICAg
c2NyYXRjaFJlZ2lzdGVyQWxsb2NhdG9yLmxvY2soYmFzZUdQUik7CisKKyAgICAgICAgICAgICAg
ICAgICAgICAgIEdQUlJlZyBzY3JhdGNoMSA9IHNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5hbGxv
Y2F0ZVNjcmF0Y2hHUFIoKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIEdQUlJlZyBzY3JhdGNo
MiA9IHNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5hbGxvY2F0ZVNjcmF0Y2hHUFIoKTsKKworICAg
ICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgYnl0ZXNQdXNoZWQgPQorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIHNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5wcmVzZXJ2ZVJldXNlZFJl
Z2lzdGVyc0J5UHVzaGluZyhqaXQpOworCisgICAgICAgICAgICAgICAgICAgICAgICAvLyBXZSd2
ZSBhbHJlYWR5IHNhdmVkIHRoZXNlLCBzbyB3aGVuIHdlIG1ha2UgYSBzbG93IHBhdGggY2FsbCwg
d2UgZG9uJ3QgaGF2ZQorICAgICAgICAgICAgICAgICAgICAgICAgLy8gdG8gc2F2ZSB0aGVtIGFn
YWluLgorICAgICAgICAgICAgICAgICAgICAgICAgdXNlZFJlZ2lzdGVycy5leGNsdWRlKFJlZ2lz
dGVyU2V0KHNjcmF0Y2gxLCBzY3JhdGNoMikpOworCisgICAgICAgICAgICAgICAgICAgICAgICBX
cml0ZUJhcnJpZXJCdWZmZXImIHdyaXRlQmFycmllckJ1ZmZlciA9IGppdC52bSgpLT5oZWFwLndy
aXRlQmFycmllckJ1ZmZlcigpOworICAgICAgICAgICAgICAgICAgICAgICAgaml0LmxvYWQzMih3
cml0ZUJhcnJpZXJCdWZmZXIuY3VycmVudEluZGV4QWRkcmVzcygpLCBzY3JhdGNoMik7CisgICAg
ICAgICAgICAgICAgICAgICAgICBDQ2FsbEhlbHBlcnM6Okp1bXAgbmVlZFRvRmx1c2ggPSBqaXQu
YnJhbmNoMzIoCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpBYm92
ZU9yRXF1YWwsIHNjcmF0Y2gyLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIENDYWxsSGVs
cGVyczo6VHJ1c3RlZEltbTMyKHdyaXRlQmFycmllckJ1ZmZlci5jYXBhY2l0eSgpKSk7CisKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGppdC5hZGQzMihDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW0z
MigxKSwgc2NyYXRjaDIpOworICAgICAgICAgICAgICAgICAgICAgICAgaml0LnN0b3JlMzIoc2Ny
YXRjaDIsIHdyaXRlQmFycmllckJ1ZmZlci5jdXJyZW50SW5kZXhBZGRyZXNzKCkpOworCisgICAg
ICAgICAgICAgICAgICAgICAgICBqaXQubW92ZShDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIo
d3JpdGVCYXJyaWVyQnVmZmVyLmJ1ZmZlcigpKSwgc2NyYXRjaDEpOworICAgICAgICAgICAgICAg
ICAgICAgICAgaml0LnN0b3JlUHRyKAorICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhc2VH
UFIsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0NhbGxIZWxwZXJzOjpCYXNlSW5kZXgo
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNjcmF0Y2gxLCBzY3JhdGNoMiwgQ0Nh
bGxIZWxwZXJzOjpTY2FsZVB0ciwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3Rh
dGljX2Nhc3Q8aW50MzJfdD4oLXNpemVvZih2b2lkKikpKSk7CisKKyAgICAgICAgICAgICAgICAg
ICAgICAgIHNjcmF0Y2hSZWdpc3RlckFsbG9jYXRvci5yZXN0b3JlUmV1c2VkUmVnaXN0ZXJzQnlQ
b3BwaW5nKGppdCwgYnl0ZXNQdXNoZWQpOworCisgICAgICAgICAgICAgICAgICAgICAgICBwYXJh
bXMuZG9uZUp1bXBzLmFwcGVuZChqaXQuanVtcCgpKTsKKworICAgICAgICAgICAgICAgICAgICAg
ICAgbmVlZFRvRmx1c2gubGluaygmaml0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGNhbGxP
cGVyYXRpb24oCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlZFJlZ2lzdGVycywgaml0
LCBwYXJhbXMubGF6eVNsb3dQYXRoLT5jYWxsU2l0ZUluZGV4KCksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgcGFyYW1zLmV4Y2VwdGlvbkp1bXBzLCBvcGVyYXRpb25GbHVzaFdyaXRlQmFy
cmllckJ1ZmZlciwgSW52YWxpZEdQUlJlZywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBi
YXNlR1BSKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNjcmF0Y2hSZWdpc3RlckFsbG9jYXRv
ci5yZXN0b3JlUmV1c2VkUmVnaXN0ZXJzQnlQb3BwaW5nKGppdCwgYnl0ZXNQdXNoZWQpOworICAg
ICAgICAgICAgICAgICAgICAgICAgcGFyYW1zLmRvbmVKdW1wcy5hcHBlbmQoaml0Lmp1bXAoKSk7
CisgICAgICAgICAgICAgICAgICAgIH0pOworICAgICAgICAgICAgfSwKKyAgICAgICAgICAgIGJh
c2UpOwogICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CiAKICAgICAgICAgbV9vdXQu
YXBwZW5kVG8oY29udGludWF0aW9uLCBsYXN0TmV4dCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTE9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDE5MDg0MykKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMwLDYgKzMwLDggQEAKIAogI2luY2x1ZGUgIkNsb25lZEFyZ3VtZW50cy5oIgogI2luY2x1ZGUg
IkRpcmVjdEFyZ3VtZW50cy5oIgorI2luY2x1ZGUgIkZUTEpJVENvZGUuaCIKKyNpbmNsdWRlICJG
VExMYXp5U2xvd1BhdGguaCIKICNpbmNsdWRlICJJbmxpbmVDYWxsRnJhbWUuaCIKICNpbmNsdWRl
ICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNMZXhpY2FsRW52aXJvbm1lbnQuaCIKQEAgLTM1
Nyw2ICszNTksMjIgQEAgZXh0ZXJuICJDIiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aQog
ICAgIH0KIH0KIAorZXh0ZXJuICJDIiB2b2lkKiBKSVRfT1BFUkFUSU9OIGNvbXBpbGVGVExMYXp5
U2xvd1BhdGgoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpbmRleCkKK3sKKyAgICBWTSYgdm0g
PSBleGVjLT52bSgpOworCisgICAgLy8gV2UgY2Fubm90IEdDLiBXZSd2ZSBnb3QgcG9pbnRlcnMg
aW4gZXZpbCBwbGFjZXMuCisgICAgRGVmZXJHQ0ZvckFXaGlsZSBkZWZlckdDKHZtLmhlYXApOwor
CisgICAgQ29kZUJsb2NrKiBjb2RlQmxvY2sgPSBleGVjLT5jb2RlQmxvY2soKTsKKyAgICBKSVRD
b2RlKiBqaXRDb2RlID0gY29kZUJsb2NrLT5qaXRDb2RlKCktPmZ0bCgpOworCisgICAgTGF6eVNs
b3dQYXRoJiBsYXp5U2xvd1BhdGggPSAqaml0Q29kZS0+bGF6eVNsb3dQYXRoc1tpbmRleF07Cisg
ICAgbGF6eVNsb3dQYXRoLmdlbmVyYXRlKGNvZGVCbG9jayk7CisKKyAgICByZXR1cm4gbGF6eVNs
b3dQYXRoLnN0dWIoKS5jb2RlKCkuZXhlY3V0YWJsZUFkZHJlc3MoKTsKK30KKwogfSB9IC8vIG5h
bWVzcGFjZSBKU0M6OkZUTAogCiAjZW5kaWYgLy8gRU5BQkxFKEZUTF9KSVQpCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9wZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTE9wZXJhdGlvbnMuaAkocmV2aXNpb24gMTkwODQzKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExPcGVyYXRpb25zLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTMzLDYgKzMzLDggQEAKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewog
CitjbGFzcyBMYXp5U2xvd1BhdGg7CisKIGV4dGVybiAiQyIgewogCiBKU0NlbGwqIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uTmV3T2JqZWN0V2l0aEJ1dHRlcmZseShFeGVjU3RhdGUqLCBTdHJ1Y3R1
cmUqKSBXVEZfSU5URVJOQUw7CkBAIC00Myw2ICs0NSw4IEBAIEpTQ2VsbCogSklUX09QRVJBVElP
TiBvcGVyYXRpb25NYXRlcmlhbGkKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25Qb3B1bGF0
ZU9iamVjdEluT1NSKAogICAgIEV4ZWNTdGF0ZSosIEV4aXRUaW1lT2JqZWN0TWF0ZXJpYWxpemF0
aW9uKiwgRW5jb2RlZEpTVmFsdWUqLCBFbmNvZGVkSlNWYWx1ZSopIFdURl9JTlRFUk5BTDsKIAor
dm9pZCogSklUX09QRVJBVElPTiBjb21waWxlRlRMTGF6eVNsb3dQYXRoKEV4ZWNTdGF0ZSosIHVu
c2lnbmVkKSBXVEZfSU5URVJOQUw7CisKIH0gLy8gZXh0ZXJuICJDIgogCiB9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6REZHCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNsb3dQYXRo
Q2FsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExTbG93
UGF0aENhbGwuY3BwCShyZXZpc2lvbiAxOTA4NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTFNsb3dQYXRoQ2FsbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAv
KgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzAsMTg4ICszMCwx
MTYgQEAKIAogI2luY2x1ZGUgIkNDYWxsSGVscGVycy5oIgogI2luY2x1ZGUgIkZUTFN0YXRlLmgi
CisjaW5jbHVkZSAiRlRMVGh1bmtzLmgiCiAjaW5jbHVkZSAiR1BSSW5mby5oIgogI2luY2x1ZGUg
IkpTQ0lubGluZXMuaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewogCi1uYW1l
c3BhY2UgewotCiAvLyBUaGlzIGNvZGUgcmVsaWVzIG9uIHVzIGJlaW5nIDY0LWJpdC4gRlRMIGlz
IGN1cnJlbnRseSBhbHdheXMgNjQtYml0Lgogc3RhdGljIGNvbnN0IHNpemVfdCB3b3JkU2l6ZSA9
IDg7CiAKLS8vIFRoaXMgd2lsbCBiZSBhbiBSQUlJIHRoaW5neSB0aGF0IHdpbGwgc2V0IHVwIHRo
ZSBuZWNlc3Nhcnkgc3RhY2sgc2l6ZXMgYW5kIG9mZnNldHMgYW5kIHN1Y2guCi1jbGFzcyBDYWxs
Q29udGV4dCB7Ci1wdWJsaWM6Ci0gICAgQ2FsbENvbnRleHQoCi0gICAgICAgIFN0YXRlJiBzdGF0
ZSwgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsIENDYWxsSGVscGVycyYgaml0LAot
ICAgICAgICB1bnNpZ25lZCBudW1BcmdzLCBHUFJSZWcgcmV0dXJuUmVnaXN0ZXIpCi0gICAgICAg
IDogbV9zdGF0ZShzdGF0ZSkKLSAgICAgICAgLCBtX3VzZWRSZWdpc3RlcnModXNlZFJlZ2lzdGVy
cykKLSAgICAgICAgLCBtX2ppdChqaXQpCi0gICAgICAgICwgbV9udW1BcmdzKG51bUFyZ3MpCi0g
ICAgICAgICwgbV9yZXR1cm5SZWdpc3RlcihyZXR1cm5SZWdpc3RlcikKLSAgICB7Ci0gICAgICAg
IC8vIFdlIGRvbid0IGNhcmUgdGhhdCB5b3UncmUgdXNpbmcgY2FsbGVlLXNhdmUsIHN0YWNrLCBv
ciBoYXJkd2FyZSByZWdpc3RlcnMuCi0gICAgICAgIG1fdXNlZFJlZ2lzdGVycy5leGNsdWRlKFJl
Z2lzdGVyU2V0OjpzdGFja1JlZ2lzdGVycygpKTsKLSAgICAgICAgbV91c2VkUmVnaXN0ZXJzLmV4
Y2x1ZGUoUmVnaXN0ZXJTZXQ6OnJlc2VydmVkSGFyZHdhcmVSZWdpc3RlcnMoKSk7Ci0gICAgICAg
IG1fdXNlZFJlZ2lzdGVycy5leGNsdWRlKFJlZ2lzdGVyU2V0OjpjYWxsZWVTYXZlUmVnaXN0ZXJz
KCkpOwotICAgICAgICAKLSAgICAgICAgLy8gVGhlIHJldHVybiByZWdpc3RlciBkb2Vzbid0IG5l
ZWQgdG8gYmUgc2F2ZWQuCi0gICAgICAgIGlmIChtX3JldHVyblJlZ2lzdGVyICE9IEludmFsaWRH
UFJSZWcpCi0gICAgICAgICAgICBtX3VzZWRSZWdpc3RlcnMuY2xlYXIobV9yZXR1cm5SZWdpc3Rl
cik7Ci0gICAgICAgIAotICAgICAgICBzaXplX3Qgc3RhY2tCeXRlc05lZWRlZEZvclJldHVybkFk
ZHJlc3MgPSB3b3JkU2l6ZTsKLSAgICAgICAgCi0gICAgICAgIG1fb2Zmc2V0VG9TYXZpbmdBcmVh
ID0KLSAgICAgICAgICAgIChzdGQ6Om1heChtX251bUFyZ3MsIE5VTUJFUl9PRl9BUkdVTUVOVF9S
RUdJU1RFUlMpIC0gTlVNQkVSX09GX0FSR1VNRU5UX1JFR0lTVEVSUykgKiB3b3JkU2l6ZTsKLSAg
ICAgICAgCi0gICAgICAgIGZvciAodW5zaWduZWQgaSA9IHN0ZDo6bWluKE5VTUJFUl9PRl9BUkdV
TUVOVF9SRUdJU1RFUlMsIG51bUFyZ3MpOyBpLS07KQotICAgICAgICAgICAgbV9hcmd1bWVudFJl
Z2lzdGVycy5zZXQoR1BSSW5mbzo6dG9Bcmd1bWVudFJlZ2lzdGVyKGkpKTsKLSAgICAgICAgbV9j
YWxsaW5nQ29udmVudGlvblJlZ2lzdGVycy5tZXJnZShtX2FyZ3VtZW50UmVnaXN0ZXJzKTsKLSAg
ICAgICAgaWYgKHJldHVyblJlZ2lzdGVyICE9IEludmFsaWRHUFJSZWcpCi0gICAgICAgICAgICBt
X2NhbGxpbmdDb252ZW50aW9uUmVnaXN0ZXJzLnNldChHUFJJbmZvOjpyZXR1cm5WYWx1ZUdQUik7
Ci0gICAgICAgIG1fY2FsbGluZ0NvbnZlbnRpb25SZWdpc3RlcnMuZmlsdGVyKG1fdXNlZFJlZ2lz
dGVycyk7Ci0gICAgICAgIAotICAgICAgICB1bnNpZ25lZCBudW1iZXJPZkNhbGxpbmdDb252ZW50
aW9uUmVnaXN0ZXJzID0KLSAgICAgICAgICAgIG1fY2FsbGluZ0NvbnZlbnRpb25SZWdpc3RlcnMu
bnVtYmVyT2ZTZXRSZWdpc3RlcnMoKTsKLSAgICAgICAgCi0gICAgICAgIHNpemVfdCBvZmZzZXRU
b1RodW5rU2F2aW5nQXJlYSA9Ci0gICAgICAgICAgICBtX29mZnNldFRvU2F2aW5nQXJlYSArCi0g
ICAgICAgICAgICBudW1iZXJPZkNhbGxpbmdDb252ZW50aW9uUmVnaXN0ZXJzICogd29yZFNpemU7
Ci0gICAgICAgIAotICAgICAgICBtX3N0YWNrQnl0ZXNOZWVkZWQgPQotICAgICAgICAgICAgb2Zm
c2V0VG9UaHVua1NhdmluZ0FyZWEgKwotICAgICAgICAgICAgc3RhY2tCeXRlc05lZWRlZEZvclJl
dHVybkFkZHJlc3MgKwotICAgICAgICAgICAgKG1fdXNlZFJlZ2lzdGVycy5udW1iZXJPZlNldFJl
Z2lzdGVycygpIC0gbnVtYmVyT2ZDYWxsaW5nQ29udmVudGlvblJlZ2lzdGVycykgKiB3b3JkU2l6
ZTsKLSAgICAgICAgCi0gICAgICAgIG1fc3RhY2tCeXRlc05lZWRlZCA9IChtX3N0YWNrQnl0ZXNO
ZWVkZWQgKyBzdGFja0FsaWdubWVudEJ5dGVzKCkgLSAxKSAmIH4oc3RhY2tBbGlnbm1lbnRCeXRl
cygpIC0gMSk7Ci0gICAgICAgIAotICAgICAgICBtX2ppdC5zdWJQdHIoQ0NhbGxIZWxwZXJzOjpU
cnVzdGVkSW1tMzIobV9zdGFja0J5dGVzTmVlZGVkKSwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50
ZXJSZWdpc3Rlcik7Ci0gICAgICAgIAotICAgICAgICBtX3RodW5rU2F2ZVNldCA9IG1fdXNlZFJl
Z2lzdGVyczsKLSAgICAgICAgCi0gICAgICAgIC8vIFRoaXMgcmVsaWVzIG9uIGFsbCBjYWxsaW5n
IGNvbnZlbnRpb24gcmVnaXN0ZXJzIGFsc28gYmVpbmcgdGVtcCByZWdpc3RlcnMuCi0gICAgICAg
IHVuc2lnbmVkIHN0YWNrSW5kZXggPSAwOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBHUFJJ
bmZvOjpudW1iZXJPZlJlZ2lzdGVyczsgaS0tOykgewotICAgICAgICAgICAgR1BSUmVnIHJlZyA9
IEdQUkluZm86OnRvUmVnaXN0ZXIoaSk7Ci0gICAgICAgICAgICBpZiAoIW1fY2FsbGluZ0NvbnZl
bnRpb25SZWdpc3RlcnMuZ2V0KHJlZykpCi0gICAgICAgICAgICAgICAgY29udGludWU7Ci0gICAg
ICAgICAgICBtX2ppdC5zdG9yZVB0cihyZWcsIENDYWxsSGVscGVyczo6QWRkcmVzcyhDQ2FsbEhl
bHBlcnM6OnN0YWNrUG9pbnRlclJlZ2lzdGVyLCBtX29mZnNldFRvU2F2aW5nQXJlYSArIChzdGFj
a0luZGV4KyspICogd29yZFNpemUpKTsKLSAgICAgICAgICAgIG1fdGh1bmtTYXZlU2V0LmNsZWFy
KHJlZyk7Ci0gICAgICAgIH0KK1Nsb3dQYXRoQ2FsbENvbnRleHQ6OlNsb3dQYXRoQ2FsbENvbnRl
eHQoCisgICAgUmVnaXN0ZXJTZXQgdXNlZFJlZ2lzdGVycywgQ0NhbGxIZWxwZXJzJiBqaXQsIHVu
c2lnbmVkIG51bUFyZ3MsIEdQUlJlZyByZXR1cm5SZWdpc3RlcikKKyAgICA6IG1faml0KGppdCkK
KyAgICAsIG1fbnVtQXJncyhudW1BcmdzKQorICAgICwgbV9yZXR1cm5SZWdpc3RlcihyZXR1cm5S
ZWdpc3RlcikKK3sKKyAgICAvLyBXZSBkb24ndCBjYXJlIHRoYXQgeW91J3JlIHVzaW5nIGNhbGxl
ZS1zYXZlLCBzdGFjaywgb3IgaGFyZHdhcmUgcmVnaXN0ZXJzLgorICAgIHVzZWRSZWdpc3RlcnMu
ZXhjbHVkZShSZWdpc3RlclNldDo6c3RhY2tSZWdpc3RlcnMoKSk7CisgICAgdXNlZFJlZ2lzdGVy
cy5leGNsdWRlKFJlZ2lzdGVyU2V0OjpyZXNlcnZlZEhhcmR3YXJlUmVnaXN0ZXJzKCkpOworICAg
IHVzZWRSZWdpc3RlcnMuZXhjbHVkZShSZWdpc3RlclNldDo6Y2FsbGVlU2F2ZVJlZ2lzdGVycygp
KTsKICAgICAgICAgCi0gICAgICAgIG1fb2Zmc2V0ID0gb2Zmc2V0VG9UaHVua1NhdmluZ0FyZWE7
Ci0gICAgfQotICAgIAotICAgIH5DYWxsQ29udGV4dCgpCi0gICAgewotICAgICAgICBpZiAobV9y
ZXR1cm5SZWdpc3RlciAhPSBJbnZhbGlkR1BSUmVnKQotICAgICAgICAgICAgbV9qaXQubW92ZShH
UFJJbmZvOjpyZXR1cm5WYWx1ZUdQUiwgbV9yZXR1cm5SZWdpc3Rlcik7Ci0gICAgICAgIAotICAg
ICAgICB1bnNpZ25lZCBzdGFja0luZGV4ID0gMDsKLSAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
R1BSSW5mbzo6bnVtYmVyT2ZSZWdpc3RlcnM7IGktLTspIHsKLSAgICAgICAgICAgIEdQUlJlZyBy
ZWcgPSBHUFJJbmZvOjp0b1JlZ2lzdGVyKGkpOwotICAgICAgICAgICAgaWYgKCFtX2NhbGxpbmdD
b252ZW50aW9uUmVnaXN0ZXJzLmdldChyZWcpKQotICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICAgICAgbV9qaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoQ0NhbGxIZWxw
ZXJzOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgbV9vZmZzZXRUb1NhdmluZ0FyZWEgKyAoc3RhY2tJ
bmRleCsrKSAqIHdvcmRTaXplKSwgcmVnKTsKLSAgICAgICAgfQorICAgIC8vIFRoZSByZXR1cm4g
cmVnaXN0ZXIgZG9lc24ndCBuZWVkIHRvIGJlIHNhdmVkLgorICAgIGlmIChtX3JldHVyblJlZ2lz
dGVyICE9IEludmFsaWRHUFJSZWcpCisgICAgICAgIHVzZWRSZWdpc3RlcnMuY2xlYXIobV9yZXR1
cm5SZWdpc3Rlcik7CiAgICAgICAgIAotICAgICAgICBtX2ppdC5hZGRQdHIoQ0NhbGxIZWxwZXJz
OjpUcnVzdGVkSW1tMzIobV9zdGFja0J5dGVzTmVlZGVkKSwgQ0NhbGxIZWxwZXJzOjpzdGFja1Bv
aW50ZXJSZWdpc3Rlcik7Ci0gICAgfQotICAgIAotICAgIFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3Rl
cnMoKSBjb25zdAotICAgIHsKLSAgICAgICAgcmV0dXJuIG1fdGh1bmtTYXZlU2V0OwotICAgIH0K
LSAgICAKLSAgICBwdHJkaWZmX3Qgb2Zmc2V0KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIHJldHVy
biBtX29mZnNldDsKKyAgICBzaXplX3Qgc3RhY2tCeXRlc05lZWRlZEZvclJldHVybkFkZHJlc3Mg
PSB3b3JkU2l6ZTsKKyAgICAgICAgCisgICAgbV9vZmZzZXRUb1NhdmluZ0FyZWEgPQorICAgICAg
ICAoc3RkOjptYXgobV9udW1BcmdzLCBOVU1CRVJfT0ZfQVJHVU1FTlRfUkVHSVNURVJTKSAtIE5V
TUJFUl9PRl9BUkdVTUVOVF9SRUdJU1RFUlMpICogd29yZFNpemU7CisgICAgICAgIAorICAgIGZv
ciAodW5zaWduZWQgaSA9IHN0ZDo6bWluKE5VTUJFUl9PRl9BUkdVTUVOVF9SRUdJU1RFUlMsIG51
bUFyZ3MpOyBpLS07KQorICAgICAgICBtX2FyZ3VtZW50UmVnaXN0ZXJzLnNldChHUFJJbmZvOjp0
b0FyZ3VtZW50UmVnaXN0ZXIoaSkpOworICAgIG1fY2FsbGluZ0NvbnZlbnRpb25SZWdpc3RlcnMu
bWVyZ2UobV9hcmd1bWVudFJlZ2lzdGVycyk7CisgICAgaWYgKHJldHVyblJlZ2lzdGVyICE9IElu
dmFsaWRHUFJSZWcpCisgICAgICAgIG1fY2FsbGluZ0NvbnZlbnRpb25SZWdpc3RlcnMuc2V0KEdQ
UkluZm86OnJldHVyblZhbHVlR1BSKTsKKyAgICBtX2NhbGxpbmdDb252ZW50aW9uUmVnaXN0ZXJz
LmZpbHRlcih1c2VkUmVnaXN0ZXJzKTsKKyAgICAgICAgCisgICAgdW5zaWduZWQgbnVtYmVyT2ZD
YWxsaW5nQ29udmVudGlvblJlZ2lzdGVycyA9CisgICAgICAgIG1fY2FsbGluZ0NvbnZlbnRpb25S
ZWdpc3RlcnMubnVtYmVyT2ZTZXRSZWdpc3RlcnMoKTsKKyAgICAgICAgCisgICAgc2l6ZV90IG9m
ZnNldFRvVGh1bmtTYXZpbmdBcmVhID0KKyAgICAgICAgbV9vZmZzZXRUb1NhdmluZ0FyZWEgKwor
ICAgICAgICBudW1iZXJPZkNhbGxpbmdDb252ZW50aW9uUmVnaXN0ZXJzICogd29yZFNpemU7Cisg
ICAgICAgIAorICAgIG1fc3RhY2tCeXRlc05lZWRlZCA9CisgICAgICAgIG9mZnNldFRvVGh1bmtT
YXZpbmdBcmVhICsKKyAgICAgICAgc3RhY2tCeXRlc05lZWRlZEZvclJldHVybkFkZHJlc3MgKwor
ICAgICAgICAodXNlZFJlZ2lzdGVycy5udW1iZXJPZlNldFJlZ2lzdGVycygpIC0gbnVtYmVyT2ZD
YWxsaW5nQ29udmVudGlvblJlZ2lzdGVycykgKiB3b3JkU2l6ZTsKKyAgICAgICAgCisgICAgbV9z
dGFja0J5dGVzTmVlZGVkID0gKG1fc3RhY2tCeXRlc05lZWRlZCArIHN0YWNrQWxpZ25tZW50Qnl0
ZXMoKSAtIDEpICYgfihzdGFja0FsaWdubWVudEJ5dGVzKCkgLSAxKTsKKyAgICAgICAgCisgICAg
bV9qaXQuc3ViUHRyKENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKG1fc3RhY2tCeXRlc05lZWRl
ZCksIENDYWxsSGVscGVyczo6c3RhY2tQb2ludGVyUmVnaXN0ZXIpOworCisgICAgbV90aHVua1Nh
dmVTZXQgPSB1c2VkUmVnaXN0ZXJzOworICAgICAgICAKKyAgICAvLyBUaGlzIHJlbGllcyBvbiBh
bGwgY2FsbGluZyBjb252ZW50aW9uIHJlZ2lzdGVycyBhbHNvIGJlaW5nIHRlbXAgcmVnaXN0ZXJz
LgorICAgIHVuc2lnbmVkIHN0YWNrSW5kZXggPSAwOworICAgIGZvciAodW5zaWduZWQgaSA9IEdQ
UkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyBpLS07KSB7CisgICAgICAgIEdQUlJlZyByZWcgPSBH
UFJJbmZvOjp0b1JlZ2lzdGVyKGkpOworICAgICAgICBpZiAoIW1fY2FsbGluZ0NvbnZlbnRpb25S
ZWdpc3RlcnMuZ2V0KHJlZykpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgbV9qaXQu
c3RvcmVQdHIocmVnLCBDQ2FsbEhlbHBlcnM6OkFkZHJlc3MoQ0NhbGxIZWxwZXJzOjpzdGFja1Bv
aW50ZXJSZWdpc3RlciwgbV9vZmZzZXRUb1NhdmluZ0FyZWEgKyAoc3RhY2tJbmRleCsrKSAqIHdv
cmRTaXplKSk7CisgICAgICAgIG1fdGh1bmtTYXZlU2V0LmNsZWFyKHJlZyk7CiAgICAgfQorICAg
ICAgICAKKyAgICBtX29mZnNldCA9IG9mZnNldFRvVGh1bmtTYXZpbmdBcmVhOworfQogICAgIAot
ICAgIFNsb3dQYXRoQ2FsbEtleSBrZXlXaXRoVGFyZ2V0KHZvaWQqIGNhbGxUYXJnZXQpIGNvbnN0
Ci0gICAgewotICAgICAgICByZXR1cm4gU2xvd1BhdGhDYWxsS2V5KHVzZWRSZWdpc3RlcnMoKSwg
Y2FsbFRhcmdldCwgbV9hcmd1bWVudFJlZ2lzdGVycywgb2Zmc2V0KCkpOwotICAgIH0KK1Nsb3dQ
YXRoQ2FsbENvbnRleHQ6On5TbG93UGF0aENhbGxDb250ZXh0KCkKK3sKKyAgICBpZiAobV9yZXR1
cm5SZWdpc3RlciAhPSBJbnZhbGlkR1BSUmVnKQorICAgICAgICBtX2ppdC5tb3ZlKEdQUkluZm86
OnJldHVyblZhbHVlR1BSLCBtX3JldHVyblJlZ2lzdGVyKTsKICAgICAKLSAgICBNYWNyb0Fzc2Vt
Ymxlcjo6Q2FsbCBtYWtlQ2FsbCh2b2lkKiBjYWxsVGFyZ2V0LCBNYWNyb0Fzc2VtYmxlcjo6SnVt
cExpc3QqIGV4Y2VwdGlvblRhcmdldCkKLSAgICB7Ci0gICAgICAgIE1hY3JvQXNzZW1ibGVyOjpD
YWxsIHJlc3VsdCA9IG1faml0LmNhbGwoKTsKLSAgICAgICAgbV9zdGF0ZS5maW5hbGl6ZXItPnNs
b3dQYXRoQ2FsbHMuYXBwZW5kKFNsb3dQYXRoQ2FsbCgKLSAgICAgICAgICAgIHJlc3VsdCwga2V5
V2l0aFRhcmdldChjYWxsVGFyZ2V0KSkpOwotICAgICAgICBpZiAoZXhjZXB0aW9uVGFyZ2V0KQot
ICAgICAgICAgICAgZXhjZXB0aW9uVGFyZ2V0LT5hcHBlbmQobV9qaXQuZW1pdEV4Y2VwdGlvbkNo
ZWNrKCkpOwotICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIHVuc2lnbmVkIHN0YWNrSW5kZXgg
PSAwOworICAgIGZvciAodW5zaWduZWQgaSA9IEdQUkluZm86Om51bWJlck9mUmVnaXN0ZXJzOyBp
LS07KSB7CisgICAgICAgIEdQUlJlZyByZWcgPSBHUFJJbmZvOjp0b1JlZ2lzdGVyKGkpOworICAg
ICAgICBpZiAoIW1fY2FsbGluZ0NvbnZlbnRpb25SZWdpc3RlcnMuZ2V0KHJlZykpCisgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgbV9qaXQubG9hZFB0cihDQ2FsbEhlbHBlcnM6OkFkZHJl
c3MoQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3RlciwgbV9vZmZzZXRUb1NhdmluZ0Fy
ZWEgKyAoc3RhY2tJbmRleCsrKSAqIHdvcmRTaXplKSwgcmVnKTsKICAgICB9CiAgICAgCi1wcml2
YXRlOgotICAgIFN0YXRlJiBtX3N0YXRlOwotICAgIFJlZ2lzdGVyU2V0IG1fdXNlZFJlZ2lzdGVy
czsKLSAgICBSZWdpc3RlclNldCBtX2FyZ3VtZW50UmVnaXN0ZXJzOwotICAgIFJlZ2lzdGVyU2V0
IG1fY2FsbGluZ0NvbnZlbnRpb25SZWdpc3RlcnM7Ci0gICAgQ0NhbGxIZWxwZXJzJiBtX2ppdDsK
LSAgICB1bnNpZ25lZCBtX251bUFyZ3M7Ci0gICAgR1BSUmVnIG1fcmV0dXJuUmVnaXN0ZXI7Ci0g
ICAgc2l6ZV90IG1fb2Zmc2V0VG9TYXZpbmdBcmVhOwotICAgIHNpemVfdCBtX3N0YWNrQnl0ZXNO
ZWVkZWQ7Ci0gICAgUmVnaXN0ZXJTZXQgbV90aHVua1NhdmVTZXQ7Ci0gICAgcHRyZGlmZl90IG1f
b2Zmc2V0OwotfTsKLQotfSAvLyBhbm9ueW1vdXMgbmFtZXNwYWNlCi0KLXZvaWQgc3RvcmVDb2Rl
T3JpZ2luKFN0YXRlJiBzdGF0ZSwgQ0NhbGxIZWxwZXJzJiBqaXQsIENvZGVPcmlnaW4gY29kZU9y
aWdpbikKLXsKLSAgICBpZiAoIWNvZGVPcmlnaW4uaXNTZXQoKSkKLSAgICAgICAgcmV0dXJuOwot
ICAgIAotICAgIENhbGxTaXRlSW5kZXggY2FsbFNpdGUgPSBzdGF0ZS5qaXRDb2RlLT5jb21tb24u
YWRkQ29kZU9yaWdpbihjb2RlT3JpZ2luKTsKLSAgICB1bnNpZ25lZCBsb2NhdGlvbkJpdHMgPSBj
YWxsU2l0ZS5iaXRzKCk7Ci0gICAgaml0LnN0b3JlMzIoCi0gICAgICAgIENDYWxsSGVscGVyczo6
VHJ1c3RlZEltbTMyKGxvY2F0aW9uQml0cyksCi0gICAgICAgIENDYWxsSGVscGVyczo6dGFnRm9y
KHN0YXRpY19jYXN0PFZpcnR1YWxSZWdpc3Rlcj4oSlNTdGFjazo6QXJndW1lbnRDb3VudCkpKTsK
KyAgICBtX2ppdC5hZGRQdHIoQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tMzIobV9zdGFja0J5dGVz
TmVlZGVkKSwgQ0NhbGxIZWxwZXJzOjpzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiB9CiAKLU1hY3Jv
QXNzZW1ibGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oCi0gICAgU3RhdGUmIHN0YXRlLCBjb25zdCBS
ZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywgQ0NhbGxIZWxwZXJzJiBqaXQsCi0gICAgQ29kZU9y
aWdpbiBjb2RlT3JpZ2luLCBNYWNyb0Fzc2VtYmxlcjo6SnVtcExpc3QqIGV4Y2VwdGlvblRhcmdl
dCwKLSAgICBKX0pJVE9wZXJhdGlvbl9FU3NpQ0kgb3BlcmF0aW9uLCBHUFJSZWcgcmVzdWx0LCBT
dHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sCi0gICAgR1BSUmVnIG9iamVjdCwgY29uc3QgVW5p
cXVlZFN0cmluZ0ltcGwqIHVpZCkKK1Nsb3dQYXRoQ2FsbEtleSBTbG93UGF0aENhbGxDb250ZXh0
OjprZXlXaXRoVGFyZ2V0KHZvaWQqIGNhbGxUYXJnZXQpIGNvbnN0CiB7Ci0gICAgc3RvcmVDb2Rl
T3JpZ2luKHN0YXRlLCBqaXQsIGNvZGVPcmlnaW4pOwotICAgIENhbGxDb250ZXh0IGNvbnRleHQo
c3RhdGUsIHVzZWRSZWdpc3RlcnMsIGppdCwgNCwgcmVzdWx0KTsKLSAgICBqaXQuc2V0dXBBcmd1
bWVudHNXaXRoRXhlY1N0YXRlKAotICAgICAgICBDQ2FsbEhlbHBlcnM6OlRydXN0ZWRJbW1QdHIo
c3R1YkluZm8pLCBvYmplY3QsIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cih1aWQpKTsKLSAg
ICByZXR1cm4gY29udGV4dC5tYWtlQ2FsbChiaXR3aXNlX2Nhc3Q8dm9pZCo+KG9wZXJhdGlvbiks
IGV4Y2VwdGlvblRhcmdldCk7CisgICAgcmV0dXJuIFNsb3dQYXRoQ2FsbEtleShtX3RodW5rU2F2
ZVNldCwgY2FsbFRhcmdldCwgbV9hcmd1bWVudFJlZ2lzdGVycywgbV9vZmZzZXQpOwogfQogCi1N
YWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKAotICAgIFN0YXRlJiBzdGF0ZSwgY29u
c3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsIENDYWxsSGVscGVycyYgaml0LAotICAgIENv
ZGVPcmlnaW4gY29kZU9yaWdpbiwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0KiBleGNlcHRpb25U
YXJnZXQsCi0gICAgSl9KSVRPcGVyYXRpb25fRVNzaUpJIG9wZXJhdGlvbiwgR1BSUmVnIHJlc3Vs
dCwgU3RydWN0dXJlU3R1YkluZm8qIHN0dWJJbmZvLAotICAgIEdQUlJlZyBvYmplY3QsIFVuaXF1
ZWRTdHJpbmdJbXBsKiB1aWQpCitTbG93UGF0aENhbGwgU2xvd1BhdGhDYWxsQ29udGV4dDo6bWFr
ZUNhbGwodm9pZCogY2FsbFRhcmdldCkKIHsKLSAgICBzdG9yZUNvZGVPcmlnaW4oc3RhdGUsIGpp
dCwgY29kZU9yaWdpbik7Ci0gICAgQ2FsbENvbnRleHQgY29udGV4dChzdGF0ZSwgdXNlZFJlZ2lz
dGVycywgaml0LCA0LCByZXN1bHQpOwotICAgIGppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3Rh
dGUoCi0gICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihzdHViSW5mbyksIG9iamVj
dCwKLSAgICAgICAgQ0NhbGxIZWxwZXJzOjpUcnVzdGVkSW1tUHRyKHVpZCkpOwotICAgIHJldHVy
biBjb250ZXh0Lm1ha2VDYWxsKGJpdHdpc2VfY2FzdDx2b2lkKj4ob3BlcmF0aW9uKSwgZXhjZXB0
aW9uVGFyZ2V0KTsKKyAgICBTbG93UGF0aENhbGwgcmVzdWx0ID0gU2xvd1BhdGhDYWxsKG1faml0
LmNhbGwoKSwga2V5V2l0aFRhcmdldChjYWxsVGFyZ2V0KSk7CisKKyAgICBtX2ppdC5hZGRMaW5r
VGFzaygKKyAgICAgICAgW3Jlc3VsdF0gKExpbmtCdWZmZXImIGxpbmtCdWZmZXIpIHsKKyAgICAg
ICAgICAgIFZNJiB2bSA9IGxpbmtCdWZmZXIudm0oKTsKKworICAgICAgICAgICAgTWFjcm9Bc3Nl
bWJsZXJDb2RlUmVmIHRodW5rID0KKyAgICAgICAgICAgICAgICB2bS5mdGxUaHVua3MtPmdldFNs
b3dQYXRoQ2FsbFRodW5rKHZtLCByZXN1bHQua2V5KCkpOworCisgICAgICAgICAgICBsaW5rQnVm
ZmVyLmxpbmsocmVzdWx0LmNhbGwoKSwgQ29kZUxvY2F0aW9uTGFiZWwodGh1bmsuY29kZSgpKSk7
CisgICAgICAgIH0pOworICAgIAorICAgIHJldHVybiByZXN1bHQ7CiB9CiAKLU1hY3JvQXNzZW1i
bGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oCi0gICAgU3RhdGUmIHN0YXRlLCBjb25zdCBSZWdpc3Rl
clNldCYgdXNlZFJlZ2lzdGVycywgQ0NhbGxIZWxwZXJzJiBqaXQsIAotICAgIENvZGVPcmlnaW4g
Y29kZU9yaWdpbiwgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0KiBleGNlcHRpb25UYXJnZXQsCi0g
ICAgVl9KSVRPcGVyYXRpb25fRVNzaUpKSSBvcGVyYXRpb24sIFN0cnVjdHVyZVN0dWJJbmZvKiBz
dHViSW5mbywgR1BSUmVnIHZhbHVlLAotICAgIEdQUlJlZyBvYmplY3QsIFVuaXF1ZWRTdHJpbmdJ
bXBsKiB1aWQpCitDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXhGb3JDb2RlT3JpZ2luKFN0YXRl
JiBzdGF0ZSwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luKQogewotICAgIHN0b3JlQ29kZU9yaWdpbihz
dGF0ZSwgaml0LCBjb2RlT3JpZ2luKTsKLSAgICBDYWxsQ29udGV4dCBjb250ZXh0KHN0YXRlLCB1
c2VkUmVnaXN0ZXJzLCBqaXQsIDUsIEludmFsaWRHUFJSZWcpOwotICAgIGppdC5zZXR1cEFyZ3Vt
ZW50c1dpdGhFeGVjU3RhdGUoCi0gICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZEltbVB0cihz
dHViSW5mbyksIHZhbHVlLCBvYmplY3QsCi0gICAgICAgIENDYWxsSGVscGVyczo6VHJ1c3RlZElt
bVB0cih1aWQpKTsKLSAgICByZXR1cm4gY29udGV4dC5tYWtlQ2FsbChiaXR3aXNlX2Nhc3Q8dm9p
ZCo+KG9wZXJhdGlvbiksIGV4Y2VwdGlvblRhcmdldCk7CisgICAgaWYgKGNvZGVPcmlnaW4pCisg
ICAgICAgIHJldHVybiBzdGF0ZS5qaXRDb2RlLT5jb21tb24uYWRkQ29kZU9yaWdpbihjb2RlT3Jp
Z2luKTsKKyAgICByZXR1cm4gQ2FsbFNpdGVJbmRleCgpOwogfQogCiB9IH0gLy8gbmFtZXNwYWNl
IEpTQzo6RlRMCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFNsb3dQYXRoQ2Fs
bC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU2xvd1BhdGhD
YWxsLmgJKHJldmlzaW9uIDE5MDg0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
U2xvd1BhdGhDYWxsLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29w
eXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNTUsMjAgKzU1LDcxIEBAIHByaXZh
dGU6CiAgICAgU2xvd1BhdGhDYWxsS2V5IG1fa2V5OwogfTsKIAotdm9pZCBzdG9yZUNvZGVPcmln
aW4oU3RhdGUmLCBDQ2FsbEhlbHBlcnMmLCBDb2RlT3JpZ2luKTsKKy8vIFRoaXMgd2lsbCBiZSBh
biBSQUlJIHRoaW5neSB0aGF0IHdpbGwgc2V0IHVwIHRoZSBuZWNlc3Nhcnkgc3RhY2sgc2l6ZXMg
YW5kIG9mZnNldHMgYW5kIHN1Y2guCitjbGFzcyBTbG93UGF0aENhbGxDb250ZXh0IHsKK3B1Ymxp
YzoKKyAgICBTbG93UGF0aENhbGxDb250ZXh0KFJlZ2lzdGVyU2V0IHVzZWRSZWdpc3RlcnMsIEND
YWxsSGVscGVycyYsIHVuc2lnbmVkIG51bUFyZ3MsIEdQUlJlZyByZXR1cm5SZWdpc3Rlcik7Cisg
ICAgflNsb3dQYXRoQ2FsbENvbnRleHQoKTsKKworICAgIC8vIE5PVEU6IFRoZSBjYWxsIHRoYXQg
dGhpcyByZXR1cm5zIGlzIGFscmVhZHkgZ29pbmcgdG8gYmUgbGlua2VkIGJ5IHRoZSBKSVQgdXNp
bmcgYWRkTGlua1Rhc2soKSwKKyAgICAvLyBzbyB0aGVyZSBpcyBubyBuZWVkIGZvciB5b3UgdG8g
bGluayBpdCB5b3Vyc2VsZi4KKyAgICBTbG93UGF0aENhbGwgbWFrZUNhbGwodm9pZCogY2FsbFRh
cmdldCk7CisKK3ByaXZhdGU6CisgICAgU2xvd1BhdGhDYWxsS2V5IGtleVdpdGhUYXJnZXQodm9p
ZCogY2FsbFRhcmdldCkgY29uc3Q7CisgICAgCisgICAgUmVnaXN0ZXJTZXQgbV9hcmd1bWVudFJl
Z2lzdGVyczsKKyAgICBSZWdpc3RlclNldCBtX2NhbGxpbmdDb252ZW50aW9uUmVnaXN0ZXJzOwor
ICAgIENDYWxsSGVscGVycyYgbV9qaXQ7CisgICAgdW5zaWduZWQgbV9udW1BcmdzOworICAgIEdQ
UlJlZyBtX3JldHVyblJlZ2lzdGVyOworICAgIHNpemVfdCBtX29mZnNldFRvU2F2aW5nQXJlYTsK
KyAgICBzaXplX3QgbV9zdGFja0J5dGVzTmVlZGVkOworICAgIFJlZ2lzdGVyU2V0IG1fdGh1bmtT
YXZlU2V0OworICAgIHB0cmRpZmZfdCBtX29mZnNldDsKK307CisKK3RlbXBsYXRlPHR5cGVuYW1l
Li4uIEFyZ3VtZW50VHlwZXM+CitTbG93UGF0aENhbGwgY2FsbE9wZXJhdGlvbigKKyAgICBjb25z
dCBSZWdpc3RlclNldCYgdXNlZFJlZ2lzdGVycywgQ0NhbGxIZWxwZXJzJiBqaXQsIENDYWxsSGVs
cGVyczo6SnVtcExpc3QqIGV4Y2VwdGlvblRhcmdldCwKKyAgICBGdW5jdGlvblB0ciBmdW5jdGlv
biwgR1BSUmVnIHJlc3VsdEdQUiwgQXJndW1lbnRUeXBlcy4uLiBhcmd1bWVudHMpCit7CisgICAg
U2xvd1BhdGhDYWxsIGNhbGw7CisgICAgeworICAgICAgICBTbG93UGF0aENhbGxDb250ZXh0IGNv
bnRleHQodXNlZFJlZ2lzdGVycywgaml0LCBzaXplb2YuLi4oQXJndW1lbnRUeXBlcykgKyAxLCBy
ZXN1bHRHUFIpOworICAgICAgICBqaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZ3Vt
ZW50cy4uLik7CisgICAgICAgIGNhbGwgPSBjb250ZXh0Lm1ha2VDYWxsKGZ1bmN0aW9uLnZhbHVl
KCkpOworICAgIH0KKyAgICBpZiAoZXhjZXB0aW9uVGFyZ2V0KQorICAgICAgICBleGNlcHRpb25U
YXJnZXQtPmFwcGVuZChqaXQuZW1pdEV4Y2VwdGlvbkNoZWNrKCkpOworICAgIHJldHVybiBjYWxs
OworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZS4uLiBBcmd1bWVudFR5cGVzPgorU2xvd1BhdGhDYWxs
IGNhbGxPcGVyYXRpb24oCisgICAgY29uc3QgUmVnaXN0ZXJTZXQmIHVzZWRSZWdpc3RlcnMsIEND
YWxsSGVscGVycyYgaml0LCBDYWxsU2l0ZUluZGV4IGNhbGxTaXRlSW5kZXgsCisgICAgQ0NhbGxI
ZWxwZXJzOjpKdW1wTGlzdCogZXhjZXB0aW9uVGFyZ2V0LCBGdW5jdGlvblB0ciBmdW5jdGlvbiwg
R1BSUmVnIHJlc3VsdEdQUiwKKyAgICBBcmd1bWVudFR5cGVzLi4uIGFyZ3VtZW50cykKK3sKKyAg
ICBpZiAoY2FsbFNpdGVJbmRleCkgeworICAgICAgICBqaXQuc3RvcmUzMigKKyAgICAgICAgICAg
IENDYWxsSGVscGVyczo6VHJ1c3RlZEltbTMyKGNhbGxTaXRlSW5kZXguYml0cygpKSwKKyAgICAg
ICAgICAgIENDYWxsSGVscGVyczo6dGFnRm9yKEpTU3RhY2s6OkFyZ3VtZW50Q291bnQpKTsKKyAg
ICB9CisgICAgcmV0dXJuIGNhbGxPcGVyYXRpb24odXNlZFJlZ2lzdGVycywgaml0LCBleGNlcHRp
b25UYXJnZXQsIGZ1bmN0aW9uLCByZXN1bHRHUFIsIGFyZ3VtZW50cy4uLik7Cit9CisKK0NhbGxT
aXRlSW5kZXggY2FsbFNpdGVJbmRleEZvckNvZGVPcmlnaW4oU3RhdGUmLCBDb2RlT3JpZ2luKTsK
IAotTWFjcm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbigKLSAgICBTdGF0ZSYsIGNvbnN0
IFJlZ2lzdGVyU2V0JiwgQ0NhbGxIZWxwZXJzJiwgQ29kZU9yaWdpbiwgQ0NhbGxIZWxwZXJzOjpK
dW1wTGlzdCosCi0gICAgSl9KSVRPcGVyYXRpb25fRVNzaUNJLCBHUFJSZWcsIFN0cnVjdHVyZVN0
dWJJbmZvKiwgR1BSUmVnLAotICAgIGNvbnN0IFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpOwotTWFj
cm9Bc3NlbWJsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbigKLSAgICBTdGF0ZSYsIGNvbnN0IFJlZ2lz
dGVyU2V0JiwgQ0NhbGxIZWxwZXJzJiwgQ29kZU9yaWdpbiwgQ0NhbGxIZWxwZXJzOjpKdW1wTGlz
dCosCi0gICAgSl9KSVRPcGVyYXRpb25fRVNzaUpJLCBHUFJSZWcgcmVzdWx0LCBTdHJ1Y3R1cmVT
dHViSW5mbyosIEdQUlJlZyBvYmplY3QsCi0gICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCk7Ci1N
YWNyb0Fzc2VtYmxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKAotICAgIFN0YXRlJiwgY29uc3QgUmVn
aXN0ZXJTZXQmLCBDQ2FsbEhlbHBlcnMmLCBDb2RlT3JpZ2luLCBDQ2FsbEhlbHBlcnM6Okp1bXBM
aXN0KiwKLSAgICBWX0pJVE9wZXJhdGlvbl9FU3NpSkpJLCBTdHJ1Y3R1cmVTdHViSW5mbyosIEdQ
UlJlZyB2YWx1ZSwgR1BSUmVnIG9iamVjdCwKLSAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKTsK
K3RlbXBsYXRlPHR5cGVuYW1lLi4uIEFyZ3VtZW50VHlwZXM+CitTbG93UGF0aENhbGwgY2FsbE9w
ZXJhdGlvbigKKyAgICBTdGF0ZSYgc3RhdGUsIGNvbnN0IFJlZ2lzdGVyU2V0JiB1c2VkUmVnaXN0
ZXJzLCBDQ2FsbEhlbHBlcnMmIGppdCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLAorICAgIENDYWxs
SGVscGVyczo6SnVtcExpc3QqIGV4Y2VwdGlvblRhcmdldCwgRnVuY3Rpb25QdHIgZnVuY3Rpb24s
IEdQUlJlZyByZXN1bHQsIEFyZ3VtZW50VHlwZXMuLi4gYXJndW1lbnRzKQoreworICAgIHJldHVy
biBjYWxsT3BlcmF0aW9uKAorICAgICAgICB1c2VkUmVnaXN0ZXJzLCBqaXQsIGNhbGxTaXRlSW5k
ZXhGb3JDb2RlT3JpZ2luKHN0YXRlLCBjb2RlT3JpZ2luKSwgZXhjZXB0aW9uVGFyZ2V0LCBmdW5j
dGlvbiwKKyAgICAgICAgcmVzdWx0LCBhcmd1bWVudHMuLi4pOworfQogCiB9IH0gLy8gbmFtZXNw
YWNlIEpTQzo6RlRMCiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhdGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFN0YXRlLmgJKHJl
dmlzaW9uIDE5MDg0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMU3RhdGUuaAko
d29ya2luZyBjb3B5KQpAQCAtNzgsNiArNzgsNyBAQCBwdWJsaWM6CiAgICAgU2VnbWVudGVkVmVj
dG9yPEdldEJ5SWREZXNjcmlwdG9yPiBnZXRCeUlkczsKICAgICBTZWdtZW50ZWRWZWN0b3I8UHV0
QnlJZERlc2NyaXB0b3I+IHB1dEJ5SWRzOwogICAgIFNlZ21lbnRlZFZlY3RvcjxDaGVja0luRGVz
Y3JpcHRvcj4gY2hlY2tJbnM7CisgICAgU2VnbWVudGVkVmVjdG9yPExhenlTbG93UGF0aERlc2Ny
aXB0b3I+IGxhenlTbG93UGF0aHM7CiAgICAgVmVjdG9yPEpTQ2FsbD4ganNDYWxsczsKICAgICBW
ZWN0b3I8SlNDYWxsVmFyYXJncz4ganNDYWxsVmFyYXJnc2VzOwogICAgIFZlY3RvcjxKU1RhaWxD
YWxsPiBqc1RhaWxDYWxsczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMVGh1
bmtzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTFRodW5r
cy5jcHAJKHJldmlzaW9uIDE5MDg0MykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
VGh1bmtzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkFz
c2VtYmx5SGVscGVycy5oIgogI2luY2x1ZGUgIkZQUkluZm8uaCIKICNpbmNsdWRlICJGVExPU1JF
eGl0Q29tcGlsZXIuaCIKKyNpbmNsdWRlICJGVExPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiRlRM
U2F2ZVJlc3RvcmUuaCIKICNpbmNsdWRlICJHUFJJbmZvLmgiCiAjaW5jbHVkZSAiTGlua0J1ZmZl
ci5oIgpAQCAtMzksMTEgKzQwLDEyIEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsK
IAogdXNpbmcgbmFtZXNwYWNlIERGRzsKIAotTWFjcm9Bc3NlbWJsZXJDb2RlUmVmIG9zckV4aXRH
ZW5lcmF0aW9uVGh1bmtHZW5lcmF0b3IoVk0qIHZtKQorc3RhdGljIE1hY3JvQXNzZW1ibGVyQ29k
ZVJlZiBnZW5lcmljR2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKAorICAgIFZNKiB2bSwgRnVuY3Rp
b25QdHIgZ2VuZXJhdGlvbkZ1bmN0aW9uLCBjb25zdCBjaGFyKiBuYW1lLCB1bnNpZ25lZCBleHRy
YVBvcHNUb1Jlc3RvcmUpCiB7CiAgICAgQXNzZW1ibHlIZWxwZXJzIGppdCh2bSwgMCk7CiAgICAg
Ci0gICAgLy8gTm90ZSB0aGF0IHRoZSAicmV0dXJuIGFkZHJlc3MiIHdpbGwgYmUgdGhlIE9TUiBl
eGl0IElELgorICAgIC8vIE5vdGUgdGhhdCB0aGUgInJldHVybiBhZGRyZXNzIiB3aWxsIGJlIHRo
ZSBJRCB0aGF0IHdlIHBhc3MgdG8gdGhlIGdlbmVyYXRpb24gZnVuY3Rpb24uCiAgICAgCiAgICAg
cHRyZGlmZl90IHN0YWNrTWlzYWxpZ25tZW50ID0gTWFjcm9Bc3NlbWJsZXI6OnB1c2hUb1NhdmVC
eXRlT2Zmc2V0KCk7CiAgICAgCkBAIC05MCwxMSArOTIsMTQgQEAgTWFjcm9Bc3NlbWJsZXJDb2Rl
UmVmIG9zckV4aXRHZW5lcmF0aW9uVAogICAgIHdoaWxlIChudW1iZXJPZlJlcXVpcmVkUG9wcy0t
KQogICAgICAgICBqaXQucG9wVG9SZXN0b3JlKEdQUkluZm86OnJlZ1QxKTsKICAgICBqaXQucG9w
VG9SZXN0b3JlKE1hY3JvQXNzZW1ibGVyOjpmcmFtZVBvaW50ZXJSZWdpc3Rlcik7Ci0gICAgCi0g
ICAgLy8gQXQgdGhpcyBwb2ludCB3ZSdyZSBzaXR0aW5nIG9uIHRoZSByZXR1cm4gYWRkcmVzcyAt
IHNvIGlmIHdlIGRpZCBhIGp1bXAgcmlnaHQgbm93LCB0aGUKLSAgICAvLyB0YWlsLWNhbGxlZSB3
b3VsZCBiZSBoYXBweS4gSW5zdGVhZCB3ZSdsbCBzdGFzaCB0aGUgY2FsbGVlIGluIHRoZSByZXR1
cm4gYWRkcmVzcyBhbmQgdGhlbgotICAgIC8vIHJlc3RvcmUgYWxsIHJlZ2lzdGVycy4KLSAgICAK
KworICAgIC8vIFdoZW4gd2UgY2FtZSBpbiBoZXJlLCB0aGVyZSB3YXMgYW4gYWRkaXRpb25hbCB0
aGluZyBwdXNoZWQgdG8gdGhlIHN0YWNrLiBTb21lIGNsaWVudHMgd2FudCBpdAorICAgIC8vIHBv
cHBlZCBiZWZvcmUgcHJvY2VlZGluZy4KKyAgICB3aGlsZSAoZXh0cmFQb3BzVG9SZXN0b3JlLS0p
CisgICAgICAgIGppdC5wb3BUb1Jlc3RvcmUoR1BSSW5mbzo6cmVnVDEpOworCisgICAgLy8gUHV0
IHRoZSByZXR1cm4gYWRkcmVzcyB3aGVyZXZlciB0aGUgcmV0dXJuIGluc3RydWN0aW9uIHdhbnRz
IGl0LiBPbiBhbGwgcGxhdGZvcm1zLCB0aGlzCisgICAgLy8gZW5zdXJlcyB0aGF0IHRoZSByZXR1
cm4gYWRkcmVzcyBpcyBvdXQgb2YgdGhlIHdheSBvZiByZWdpc3RlciByZXN0b3JhdGlvbi4KICAg
ICBqaXQucmVzdG9yZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1cm4oR1BSSW5mbzo6cmVnVDApOwog
CiAgICAgcmVzdG9yZUFsbFJlZ2lzdGVycyhqaXQsIGJ1ZmZlcik7CkBAIC0xMDIsOCArMTA3LDIy
IEBAIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBvc3JFeGl0R2VuZXJhdGlvblQKICAgICBqaXQucmV0
KCk7CiAgICAgCiAgICAgTGlua0J1ZmZlciBwYXRjaEJ1ZmZlcigqdm0sIGppdCwgR0xPQkFMX1RI
VU5LX0lEKTsKLSAgICBwYXRjaEJ1ZmZlci5saW5rKGZ1bmN0aW9uQ2FsbCwgY29tcGlsZUZUTE9T
UkV4aXQpOwotICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNoQnVmZmVyLCAoIkZUTCBPU1Ig
ZXhpdCBnZW5lcmF0aW9uIHRodW5rIikpOworICAgIHBhdGNoQnVmZmVyLmxpbmsoZnVuY3Rpb25D
YWxsLCBnZW5lcmF0aW9uRnVuY3Rpb24pOworICAgIHJldHVybiBGSU5BTElaRV9DT0RFKHBhdGNo
QnVmZmVyLCAoIiVzIiwgbmFtZSkpOworfQorCitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgb3NyRXhp
dEdlbmVyYXRpb25UaHVua0dlbmVyYXRvcihWTSogdm0pCit7CisgICAgdW5zaWduZWQgZXh0cmFQ
b3BzVG9SZXN0b3JlID0gMDsKKyAgICByZXR1cm4gZ2VuZXJpY0dlbmVyYXRpb25UaHVua0dlbmVy
YXRvcigKKyAgICAgICAgdm0sIGNvbXBpbGVGVExPU1JFeGl0LCAiRlRMIE9TUiBleGl0IGdlbmVy
YXRpb24gdGh1bmsiLCBleHRyYVBvcHNUb1Jlc3RvcmUpOworfQorCitNYWNyb0Fzc2VtYmxlckNv
ZGVSZWYgbGF6eVNsb3dQYXRoR2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKFZNKiB2bSkKK3sKKyAg
ICB1bnNpZ25lZCBleHRyYVBvcHNUb1Jlc3RvcmUgPSAxOworICAgIHJldHVybiBnZW5lcmljR2Vu
ZXJhdGlvblRodW5rR2VuZXJhdG9yKAorICAgICAgICB2bSwgY29tcGlsZUZUTExhenlTbG93UGF0
aCwgIkZUTCBsYXp5IHNsb3cgcGF0aCBnZW5lcmF0aW9uIHRodW5rIiwgZXh0cmFQb3BzVG9SZXN0
b3JlKTsKIH0KIAogc3RhdGljIHZvaWQgcmVnaXN0ZXJDbG9iYmVyQ2hlY2soQXNzZW1ibHlIZWxw
ZXJzJiBqaXQsIFJlZ2lzdGVyU2V0IGRvbnRDbG9iYmVyKQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExUaHVua3MuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTFRodW5rcy5oCShyZXZpc2lvbiAxOTA4NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZnRsL0ZUTFRodW5rcy5oCSh3b3JraW5nIGNvcHkpCkBAIC00MCw2ICs0MCw3IEBAIGNs
YXNzIFZNOwogbmFtZXNwYWNlIEZUTCB7CiAKIE1hY3JvQXNzZW1ibGVyQ29kZVJlZiBvc3JFeGl0
R2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKFZNKik7CitNYWNyb0Fzc2VtYmxlckNvZGVSZWYgbGF6
eVNsb3dQYXRoR2VuZXJhdGlvblRodW5rR2VuZXJhdG9yKFZNKik7CiBNYWNyb0Fzc2VtYmxlckNv
ZGVSZWYgc2xvd1BhdGhDYWxsVGh1bmtHZW5lcmF0b3IoVk0mLCBjb25zdCBTbG93UGF0aENhbGxL
ZXkmKTsKIAogdGVtcGxhdGU8dHlwZW5hbWUgS2V5VHlwZUFyZ3VtZW50PgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9DYWxsRnJhbWUuaAkocmV2aXNpb24gMTkw
ODQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0NhbGxGcmFtZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDcgKzEsNyBAQAogLyoKICAqICBDb3B5cmlnaHQgKEMpIDE5OTkt
MjAwMSBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQogICogIENvcHlyaWdodCAoQykgMjAw
MSBQZXRlciBLZWxseSAocG1rQHBvc3QuY29tKQotICogIENvcHlyaWdodCAoQykgMjAwMywgMjAw
NywgMjAwOCwgMjAxMSwgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiAgQ29weXJpZ2h0IChDKSAyMDAzLCAyMDA3LCAyMDA4LCAyMDExLCAyMDEzLTIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCiAgKiAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMKQEAgLTM5
LDYgKzM5LDExIEBAIG5hbWVzcGFjZSBKU0MgIHsKICAgICBjbGFzcyBKU1Njb3BlOwogCiAgICAg
c3RydWN0IENhbGxTaXRlSW5kZXggeworICAgICAgICBDYWxsU2l0ZUluZGV4KCkKKyAgICAgICAg
ICAgIDogbV9iaXRzKFVJTlRfTUFYKQorICAgICAgICB7CisgICAgICAgIH0KKyAgICAgICAgCiAg
ICAgICAgIGV4cGxpY2l0IENhbGxTaXRlSW5kZXgodWludDMyX3QgYml0cykKICAgICAgICAgICAg
IDogbV9iaXRzKGJpdHMpCiAgICAgICAgIHsgfQpAQCAtNDcsNiArNTIsOSBAQCBuYW1lc3BhY2Ug
SlNDICB7CiAgICAgICAgICAgICA6IG1fYml0cyhiaXR3aXNlX2Nhc3Q8dWludDMyX3Q+KGluc3Ry
dWN0aW9uKSkKICAgICAgICAgeyB9CiAjZW5kaWYKKworICAgICAgICBleHBsaWNpdCBvcGVyYXRv
ciBib29sKCkgY29uc3QgeyByZXR1cm4gbV9iaXRzICE9IFVJTlRfTUFYOyB9CisgICAgICAgIAog
ICAgICAgICBpbmxpbmUgdWludDMyX3QgYml0cygpIGNvbnN0IHsgcmV0dXJuIG1fYml0czsgfQog
CiAgICAgcHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvQ0NhbGxIZWxw
ZXJzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2FsbEhlbHBl
cnMuaAkocmV2aXNpb24gMTkwODQzKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9DQ2Fs
bEhlbHBlcnMuaAkod29ya2luZyBjb3B5KQpAQCAtNjMsNiArNjMsOCBAQCBwdWJsaWM6CiAgICAg
ICAgIHBva2UoR1BSSW5mbzo6bm9uQXJnR1BSMCwgUE9LRV9BUkdVTUVOVF9PRkZTRVQgKyBhcmd1
bWVudEluZGV4IC0gR1BSSW5mbzo6bnVtYmVyT2ZBcmd1bWVudFJlZ2lzdGVycyk7CiAgICAgfQog
CisgICAgdm9pZCBzZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoKSB7IHNldHVwQXJndW1lbnRz
RXhlY1N0YXRlKCk7IH0KKwogICAgIC8vIFRoZXNlIG1ldGhvZHMgdXNlZCB0byBzb3J0IGFyZ3Vt
ZW50cyBpbnRvIHRoZSBjb3JyZWN0IHJlZ2lzdGVycy4KICAgICAvLyBPbiBYODYgd2UgdXNlIGNk
ZWNsIGNhbGxpbmcgY29udmVudGlvbnMsIHdoaWNoIHBhc3MgYWxsIGFyZ3VtZW50cyBvbiB0aGUK
ICAgICAvLyBzdGFjay4gT24gb3RoZXIgYXJjaGl0ZWN0dXJlcyB3ZSBtYXkgbmVlZCB0byBzb3J0
IHZhbHVlcyBpbnRvIHRoZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVy
YXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9w
ZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAxOTA4NDMpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVE9wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDMxLDcgKzEwMzEsNyBA
QCBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3T2JqZWN0CiB7CiAgICAgVk0qIHZt
ID0gJmV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcih2bSwgZXhl
Yyk7Ci0gICAgCisKICAgICByZXR1cm4gY29uc3RydWN0RW1wdHlPYmplY3QoZXhlYywgc3RydWN0
dXJlKTsKIH0KIApJbmRleDogU291cmNlL1dURi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dURi9DaGFuZ2VMb2cJKHJldmlzaW9uIDE5MDg0MykKKysrIFNvdXJjZS9XVEYvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzcgQEAKKzIwMTUtMTAtMTAgIEZpbGlwIFBp
emxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBGVEwgc2hvdWxkIGdlbmVyYXRlIGNv
ZGUgdG8gY2FsbCBzbG93IHBhdGhzIGxhemlseQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQ5OTM2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgRW5hYmxlcyBTaGFyZWRUYXNrIHRvIGhhbmRsZSBhbnkgZnVu
Y3Rpb24gdHlwZSwgbm90IGp1c3Qgdm9pZCgpLgorCisgICAgICAgIEl0J3MgcHJvYmFibHkgYmV0
dGVyIHRvIHVzZSBTaGFyZWRUYXNrIGluc3RlYWQgb2Ygc3RkOjpmdW5jdGlvbiBpbiBwZXJmb3Jt
YW5jZS1zZW5zaXRpdmUKKyAgICAgICAgY29kZS4gc3RkOjpmdW5jdGlvbiB1c2VzIHRoZSBzeXN0
ZW0gbWFsbG9jIGFuZCBoYXMgY29weSBzZW1hbnRpY3MuIFNoYXJlZFRhc2sgdXNlcyBGYXN0TWFs
bG9jCisgICAgICAgIGFuZCBoYXMgYWxpYXNpbmcgc2VtYW50aWNzLiBTbywgeW91IGNhbiBqdXN0
IHRydXN0IHRoYXQgaXQgd2lsbCBoYXZlIHNlbnNpYmxlIHBlcmZvcm1hbmNlCisgICAgICAgIGNo
YXJhY3RlcmlzdGljcy4KKworICAgICAgICAqIHd0Zi9QYXJhbGxlbEhlbHBlclBvb2wuY3BwOgor
ICAgICAgICAoV1RGOjpQYXJhbGxlbEhlbHBlckNsaWVudDo6flBhcmFsbGVsSGVscGVyQ2xpZW50
KToKKyAgICAgICAgKFdURjo6UGFyYWxsZWxIZWxwZXJDbGllbnQ6OnNldFRhc2spOgorICAgICAg
ICAoV1RGOjpQYXJhbGxlbEhlbHBlckNsaWVudDo6ZG9Tb21lSGVscGluZyk6CisgICAgICAgIChX
VEY6OlBhcmFsbGVsSGVscGVyQ2xpZW50OjpydW5UYXNrSW5QYXJhbGxlbCk6CisgICAgICAgIChX
VEY6OlBhcmFsbGVsSGVscGVyQ2xpZW50OjpmaW5pc2gpOgorICAgICAgICAoV1RGOjpQYXJhbGxl
bEhlbHBlckNsaWVudDo6Y2xhaW1UYXNrKToKKyAgICAgICAgKFdURjo6UGFyYWxsZWxIZWxwZXJD
bGllbnQ6OnJ1blRhc2spOgorICAgICAgICAoV1RGOjpQYXJhbGxlbEhlbHBlclBvb2w6OmRvU29t
ZUhlbHBpbmcpOgorICAgICAgICAoV1RGOjpQYXJhbGxlbEhlbHBlclBvb2w6OmhlbHBlclRocmVh
ZEJvZHkpOgorICAgICAgICAqIHd0Zi9QYXJhbGxlbEhlbHBlclBvb2wuaDoKKyAgICAgICAgKFdU
Rjo6UGFyYWxsZWxIZWxwZXJDbGllbnQ6OnNldEZ1bmN0aW9uKToKKyAgICAgICAgKFdURjo6UGFy
YWxsZWxIZWxwZXJDbGllbnQ6OnJ1bkZ1bmN0aW9uSW5QYXJhbGxlbCk6CisgICAgICAgIChXVEY6
OlBhcmFsbGVsSGVscGVyQ2xpZW50Ojpwb29sKToKKyAgICAgICAgKiB3dGYvU2hhcmVkVGFzay5o
OgorICAgICAgICAoV1RGOjpjcmVhdGVTaGFyZWRUYXNrKToKKyAgICAgICAgKFdURjo6U2hhcmVk
VGFzazo6U2hhcmVkVGFzayk6IERlbGV0ZWQuCisgICAgICAgIChXVEY6OlNoYXJlZFRhc2s6On5T
aGFyZWRUYXNrKTogRGVsZXRlZC4KKyAgICAgICAgKFdURjo6U2hhcmVkVGFza0Z1bmN0b3I6OlNo
YXJlZFRhc2tGdW5jdG9yKTogRGVsZXRlZC4KKwogMjAxNS0xMC0xMCAgRGFuIEJlcm5zdGVpbiAg
PG1pdHpAYXBwbGUuY29tPgogCiAgICAgICAgIFtpT1NdIFJlbW92ZSB1bm5lY2Vzc2FyeSBpT1Mg
dmVyc2lvbiBjaGVja3MKSW5kZXg6IFNvdXJjZS9XVEYvd3RmL1BhcmFsbGVsSGVscGVyUG9vbC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dURi93dGYvUGFyYWxsZWxIZWxwZXJQb29sLmNwcAko
cmV2aXNpb24gMTkwODQzKQorKysgU291cmNlL1dURi93dGYvUGFyYWxsZWxIZWxwZXJQb29sLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTMsNyArNTMsNyBAQCBQYXJhbGxlbEhlbHBlckNsaWVudDo6
flBhcmFsbGVsSGVscGVyQ2xpCiAgICAgfQogfQogCi12b2lkIFBhcmFsbGVsSGVscGVyQ2xpZW50
OjpzZXRUYXNrKFJlZlB0cjxTaGFyZWRUYXNrPiB0YXNrKQordm9pZCBQYXJhbGxlbEhlbHBlckNs
aWVudDo6c2V0VGFzayhSZWZQdHI8U2hhcmVkVGFzazx2b2lkKCk+PiB0YXNrKQogewogICAgIExv
Y2tIb2xkZXIgbG9ja2VyKG1fcG9vbC0+bV9sb2NrKTsKICAgICBSRUxFQVNFX0FTU0VSVCghbV90
YXNrKTsKQEAgLTY5LDcgKzY5LDcgQEAgdm9pZCBQYXJhbGxlbEhlbHBlckNsaWVudDo6ZmluaXNo
KCkKIAogdm9pZCBQYXJhbGxlbEhlbHBlckNsaWVudDo6ZG9Tb21lSGVscGluZygpCiB7Ci0gICAg
UmVmUHRyPFNoYXJlZFRhc2s+IHRhc2s7CisgICAgUmVmUHRyPFNoYXJlZFRhc2s8dm9pZCgpPj4g
dGFzazsKICAgICB7CiAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fcG9vbC0+bV9sb2NrKTsK
ICAgICAgICAgdGFzayA9IGNsYWltVGFzayhsb2NrZXIpOwpAQCAtODAsNyArODAsNyBAQCB2b2lk
IFBhcmFsbGVsSGVscGVyQ2xpZW50Ojpkb1NvbWVIZWxwaW5nCiAgICAgcnVuVGFzayh0YXNrKTsK
IH0KIAotdm9pZCBQYXJhbGxlbEhlbHBlckNsaWVudDo6cnVuVGFza0luUGFyYWxsZWwoUmVmUHRy
PFNoYXJlZFRhc2s+IHRhc2spCit2b2lkIFBhcmFsbGVsSGVscGVyQ2xpZW50OjpydW5UYXNrSW5Q
YXJhbGxlbChSZWZQdHI8U2hhcmVkVGFzazx2b2lkKCk+PiB0YXNrKQogewogICAgIHNldFRhc2so
dGFzayk7CiAgICAgZG9Tb21lSGVscGluZygpOwpAQCAtOTQsNyArOTQsNyBAQCB2b2lkIFBhcmFs
bGVsSGVscGVyQ2xpZW50OjpmaW5pc2goY29uc3QgCiAgICAgICAgIG1fcG9vbC0+bV93b3JrQ29t
cGxldGVDb25kaXRpb24ud2FpdChtX3Bvb2wtPm1fbG9jayk7CiB9CiAKLVJlZlB0cjxTaGFyZWRU
YXNrPiBQYXJhbGxlbEhlbHBlckNsaWVudDo6Y2xhaW1UYXNrKGNvbnN0IExvY2tIb2xkZXImKQor
UmVmUHRyPFNoYXJlZFRhc2s8dm9pZCgpPj4gUGFyYWxsZWxIZWxwZXJDbGllbnQ6OmNsYWltVGFz
ayhjb25zdCBMb2NrSG9sZGVyJikKIHsKICAgICBpZiAoIW1fdGFzaykKICAgICAgICAgcmV0dXJu
IG51bGxwdHI7CkBAIC0xMDMsNyArMTAzLDcgQEAgUmVmUHRyPFNoYXJlZFRhc2s+IFBhcmFsbGVs
SGVscGVyQ2xpZW50OgogICAgIHJldHVybiBtX3Rhc2s7CiB9CiAKLXZvaWQgUGFyYWxsZWxIZWxw
ZXJDbGllbnQ6OnJ1blRhc2soUmVmUHRyPFNoYXJlZFRhc2s+IHRhc2spCit2b2lkIFBhcmFsbGVs
SGVscGVyQ2xpZW50OjpydW5UYXNrKFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoKT4+IHRhc2spCiB7
CiAgICAgUkVMRUFTRV9BU1NFUlQobV9udW1BY3RpdmUpOwogICAgIFJFTEVBU0VfQVNTRVJUKHRh
c2spOwpAQCAtMTUzLDcgKzE1Myw3IEBAIHZvaWQgUGFyYWxsZWxIZWxwZXJQb29sOjplbnN1cmVU
aHJlYWRzKHUKIHZvaWQgUGFyYWxsZWxIZWxwZXJQb29sOjpkb1NvbWVIZWxwaW5nKCkKIHsKICAg
ICBQYXJhbGxlbEhlbHBlckNsaWVudCogY2xpZW50OwotICAgIFJlZlB0cjxTaGFyZWRUYXNrPiB0
YXNrOworICAgIFJlZlB0cjxTaGFyZWRUYXNrPHZvaWQoKT4+IHRhc2s7CiAgICAgewogICAgICAg
ICBMb2NrSG9sZGVyIGxvY2tlcihtX2xvY2spOwogICAgICAgICBjbGllbnQgPSBnZXRDbGllbnRX
aXRoVGFzayhsb2NrZXIpOwpAQCAtMTgyLDcgKzE4Miw3IEBAIHZvaWQgUGFyYWxsZWxIZWxwZXJQ
b29sOjpoZWxwZXJUaHJlYWRCb2QKIHsKICAgICBmb3IgKDs7KSB7CiAgICAgICAgIFBhcmFsbGVs
SGVscGVyQ2xpZW50KiBjbGllbnQ7Ci0gICAgICAgIFJlZlB0cjxTaGFyZWRUYXNrPiB0YXNrOwor
ICAgICAgICBSZWZQdHI8U2hhcmVkVGFzazx2b2lkKCk+PiB0YXNrOwogCiAgICAgICAgIHsKICAg
ICAgICAgICAgIExvY2tIb2xkZXIgbG9ja2VyKG1fbG9jayk7CkluZGV4OiBTb3VyY2UvV1RGL3d0
Zi9QYXJhbGxlbEhlbHBlclBvb2wuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV1RGL3d0Zi9QYXJh
bGxlbEhlbHBlclBvb2wuaAkocmV2aXNpb24gMTkwODQzKQorKysgU291cmNlL1dURi93dGYvUGFy
YWxsZWxIZWxwZXJQb29sLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzMCwxMiArMTMwLDEyIEBAIHB1
YmxpYzoKICAgICBXVEZfRVhQT1JUX1BSSVZBVEUgUGFyYWxsZWxIZWxwZXJDbGllbnQoUmVmUHRy
PFBhcmFsbGVsSGVscGVyUG9vbD4pOwogICAgIFdURl9FWFBPUlRfUFJJVkFURSB+UGFyYWxsZWxI
ZWxwZXJDbGllbnQoKTsKIAotICAgIFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIHNldFRhc2soUmVm
UHRyPFNoYXJlZFRhc2s+KTsKKyAgICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBzZXRUYXNrKFJl
ZlB0cjxTaGFyZWRUYXNrPHZvaWQoKT4+KTsKIAogICAgIHRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0
b3I+CiAgICAgdm9pZCBzZXRGdW5jdGlvbihjb25zdCBGdW5jdG9yJiBmdW5jdG9yKQogICAgIHsK
LSAgICAgICAgc2V0VGFzayhjcmVhdGVTaGFyZWRUYXNrKGZ1bmN0b3IpKTsKKyAgICAgICAgc2V0
VGFzayhjcmVhdGVTaGFyZWRUYXNrPHZvaWQoKT4oZnVuY3RvcikpOwogICAgIH0KICAgICAKICAg
ICBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBmaW5pc2goKTsKQEAgLTE0Niw3ICsxNDYsNyBAQCBw
dWJsaWM6CiAgICAgLy8gY2xpZW50LT5zZXRUYXNrKHRhc2spOwogICAgIC8vIGNsaWVudC0+ZG9T
b21lSGVscGluZygpOwogICAgIC8vIGNsaWVudC0+ZmluaXNoKCk7Ci0gICAgV1RGX0VYUE9SVF9Q
UklWQVRFIHZvaWQgcnVuVGFza0luUGFyYWxsZWwoUmVmUHRyPFNoYXJlZFRhc2s+KTsKKyAgICBX
VEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBydW5UYXNrSW5QYXJhbGxlbChSZWZQdHI8U2hhcmVkVGFz
azx2b2lkKCk+Pik7CiAKICAgICAvLyBFcXVpdmFsZW50IHRvOgogICAgIC8vIGNsaWVudC0+c2V0
RnVuY3Rpb24oZnVuY3Rvcik7CkBAIC0xNTUsNyArMTU1LDcgQEAgcHVibGljOgogICAgIHRlbXBs
YXRlPHR5cGVuYW1lIEZ1bmN0b3I+CiAgICAgdm9pZCBydW5GdW5jdGlvbkluUGFyYWxsZWwoY29u
c3QgRnVuY3RvciYgZnVuY3RvcikKICAgICB7Ci0gICAgICAgIHJ1blRhc2tJblBhcmFsbGVsKGNy
ZWF0ZVNoYXJlZFRhc2soZnVuY3RvcikpOworICAgICAgICBydW5UYXNrSW5QYXJhbGxlbChjcmVh
dGVTaGFyZWRUYXNrPHZvaWQoKT4oZnVuY3RvcikpOwogICAgIH0KIAogICAgIFBhcmFsbGVsSGVs
cGVyUG9vbCYgcG9vbCgpIHsgcmV0dXJuICptX3Bvb2w7IH0KQEAgLTE2NSwxMSArMTY1LDExIEBA
IHByaXZhdGU6CiAgICAgZnJpZW5kIGNsYXNzIFBhcmFsbGVsSGVscGVyUG9vbDsKIAogICAgIHZv
aWQgZmluaXNoKGNvbnN0IExvY2tIb2xkZXImKTsKLSAgICBSZWZQdHI8U2hhcmVkVGFzaz4gY2xh
aW1UYXNrKGNvbnN0IExvY2tIb2xkZXImKTsKLSAgICB2b2lkIHJ1blRhc2soUmVmUHRyPFNoYXJl
ZFRhc2s+KTsKKyAgICBSZWZQdHI8U2hhcmVkVGFzazx2b2lkKCk+PiBjbGFpbVRhc2soY29uc3Qg
TG9ja0hvbGRlciYpOworICAgIHZvaWQgcnVuVGFzayhSZWZQdHI8U2hhcmVkVGFzazx2b2lkKCk+
Pik7CiAgICAgCiAgICAgUmVmUHRyPFBhcmFsbGVsSGVscGVyUG9vbD4gbV9wb29sOwotICAgIFJl
ZlB0cjxTaGFyZWRUYXNrPiBtX3Rhc2s7CisgICAgUmVmUHRyPFNoYXJlZFRhc2s8dm9pZCgpPj4g
bV90YXNrOwogICAgIHVuc2lnbmVkIG1fbnVtQWN0aXZlIHsgMCB9OwogfTsKIApJbmRleDogU291
cmNlL1dURi93dGYvU2hhcmVkVGFzay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XVEYvd3RmL1No
YXJlZFRhc2suaAkocmV2aXNpb24gMTkwODQzKQorKysgU291cmNlL1dURi93dGYvU2hhcmVkVGFz
ay5oCSh3b3JraW5nIGNvcHkpCkBAIC00MSwxMyArNDEsMTMgQEAgbmFtZXNwYWNlIFdURiB7CiAv
LwogLy8gSGVyZSdzIGFuIGV4YW1wbGUgb2YgaG93IFNoYXJlZFRhc2sgY2FuIGJlIGJldHRlciB0
aGFuIHN0ZDo6ZnVuY3Rpb24uIElmIHlvdSBkbzoKIC8vCi0vLyBzdGQ6OmZ1bmN0aW9uIGEgPSBi
OworLy8gc3RkOjpmdW5jdGlvbjxpbnQoZG91YmxlKT4gYSA9IGI7CiAvLwogLy8gVGhlbiAiYSIg
d2lsbCBnZXQgaXRzIG93biBjb3B5IG9mIGFsbCBjYXB0dXJlZCBieS12YWx1ZSB2YXJpYWJsZXMu
IFRoZSBhY3Qgb2YgY29weWluZyBtYXkKIC8vIHJlcXVpcmUgY2FsbHMgdG8gc3lzdGVtIG1hbGxv
YywgYW5kIGl0IG1heSBiZSBsaW5lYXIgdGltZSBpbiB0aGUgdG90YWwgc2l6ZSBvZiBjYXB0dXJl
ZAogLy8gdmFyaWFibGVzLiBPbiB0aGUgb3RoZXIgaGFuZCwgaWYgeW91IGRvOgogLy8KLS8vIFJl
ZlB0cjxTaGFyZWRUYXNrPiBhID0gYjsKKy8vIFJlZlB0cjxTaGFyZWRUYXNrPGludChkb3VibGUp
PiBhID0gYjsKIC8vCiAvLyBUaGVuICJhIiB3aWxsIHBvaW50IHRvIHRoZSBzYW1lIHRhc2sgYXMg
YiwgYW5kIHRoZSBvbmx5IHdvcmsgaW52b2x2ZWQgaXMgdGhlIENBUyB0byBpbmNyZWFzZSB0aGUK
IC8vIHJlZmVyZW5jZSBjb3VudC4KQEAgLTU4LDE4ICs1OCwyMSBAQCBuYW1lc3BhY2UgV1RGIHsK
IC8vIGNyZWF0ZVNoYXJlZFRhc2soKSwgYmVsb3cpLiBCdXQgU2hhcmVkVGFzayBhbHNvIGFsbG93
cyB5b3UgdG8gY3JlYXRlIHlvdXIgb3duIHN1YmNsYXNzIGFuZCBwdXQKIC8vIHN0YXRlIGluIG1l
bWJlciBmaWVsZHMuIFRoaXMgY2FuIGJlIG1vcmUgbmF0dXJhbCBpZiB5b3Ugd2FudCBmaW5lLWdy
YWluZWQgY29udHJvbCBvdmVyIHdoYXQKIC8vIHN0YXRlIGlzIHNoYXJlZCBiZXR3ZWVuIGluc3Rh
bmNlcyBvZiB0aGUgdGFzay4KLWNsYXNzIFNoYXJlZFRhc2sgOiBwdWJsaWMgVGhyZWFkU2FmZVJl
ZkNvdW50ZWQ8U2hhcmVkVGFzaz4gewordGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rpb25UeXBlPiBj
bGFzcyBTaGFyZWRUYXNrOwordGVtcGxhdGU8dHlwZW5hbWUgUmVzdWx0VHlwZSwgdHlwZW5hbWUu
Li4gQXJndW1lbnRUeXBlcz4KK2NsYXNzIFNoYXJlZFRhc2s8UmVzdWx0VHlwZSAoQXJndW1lbnRU
eXBlcy4uLik+IDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFNoYXJlZFRhc2s8UmVzdWx0
VHlwZSAoQXJndW1lbnRUeXBlcy4uLik+PiB7CiBwdWJsaWM6CiAgICAgU2hhcmVkVGFzaygpIHsg
fQogICAgIHZpcnR1YWwgflNoYXJlZFRhc2soKSB7IH0KIAotICAgIHZpcnR1YWwgdm9pZCBydW4o
KSA9IDA7CisgICAgdmlydHVhbCBSZXN1bHRUeXBlIHJ1bihBcmd1bWVudFR5cGVzJiYuLi4pID0g
MDsKIH07CiAKIC8vIFRoaXMgaXMgYSB1dGlsaXR5IGNsYXNzIHRoYXQgYWxsb3dzIHlvdSB0byBj
cmVhdGUgYSBTaGFyZWRUYXNrIHN1YmNsYXNzIHVzaW5nIGEgbGFtYmRhLiBVc3VhbGx5LAogLy8g
eW91IGRvbid0IHdhbnQgdG8gdXNlIHRoaXMgY2xhc3MgZGlyZWN0bHkuIFVzZSBjcmVhdGVTaGFy
ZWRUYXNrKCkgaW5zdGVhZC4KLXRlbXBsYXRlPHR5cGVuYW1lIEZ1bmN0b3I+Ci1jbGFzcyBTaGFy
ZWRUYXNrRnVuY3RvciA6IHB1YmxpYyBTaGFyZWRUYXNrIHsKK3RlbXBsYXRlPHR5cGVuYW1lIEZ1
bmN0aW9uVHlwZSwgdHlwZW5hbWUgRnVuY3Rvcj4gY2xhc3MgU2hhcmVkVGFza0Z1bmN0b3I7Cit0
ZW1wbGF0ZTx0eXBlbmFtZSBSZXN1bHRUeXBlLCB0eXBlbmFtZS4uLiBBcmd1bWVudFR5cGVzLCB0
eXBlbmFtZSBGdW5jdG9yPgorY2xhc3MgU2hhcmVkVGFza0Z1bmN0b3I8UmVzdWx0VHlwZSAoQXJn
dW1lbnRUeXBlcy4uLiksIEZ1bmN0b3I+IDogcHVibGljIFNoYXJlZFRhc2s8UmVzdWx0VHlwZSAo
QXJndW1lbnRUeXBlcy4uLik+IHsKIHB1YmxpYzoKICAgICBTaGFyZWRUYXNrRnVuY3Rvcihjb25z
dCBGdW5jdG9yJiBmdW5jdG9yKQogICAgICAgICA6IG1fZnVuY3RvcihmdW5jdG9yKQpAQCAtNzcs
OSArODAsOSBAQCBwdWJsaWM6CiAgICAgfQogCiBwcml2YXRlOgotICAgIHZvaWQgcnVuKCkgb3Zl
cnJpZGUKKyAgICBSZXN1bHRUeXBlIHJ1bihBcmd1bWVudFR5cGVzJiYuLi4gYXJndW1lbnRzKSBv
dmVycmlkZQogICAgIHsKLSAgICAgICAgbV9mdW5jdG9yKCk7CisgICAgICAgIHJldHVybiBtX2Z1
bmN0b3Ioc3RkOjpmb3J3YXJkPEFyZ3VtZW50VHlwZXM+KGFyZ3VtZW50cykuLi4pOwogICAgIH0K
IAogICAgIEZ1bmN0b3IgbV9mdW5jdG9yOwpAQCAtODcsNyArOTAsNyBAQCBwcml2YXRlOgogCiAv
LyBDcmVhdGUgYSBTaGFyZWRUYXNrIGZyb20gYSBmdW5jdG9yLCBzdWNoIGFzIGEgbGFtYmRhLiBZ
b3UgY2FuIHVzZSB0aGlzIGxpa2Ugc286CiAvLwotLy8gUmVmUHRyPFNoYXJlZFRhc2s+IHRhc2sg
PSBjcmVhdGVTaGFyZWRUYXNrKAorLy8gUmVmUHRyPFNoYXJlZFRhc2s8dm9pZCgpPj4gdGFzayA9
IGNyZWF0ZVNoYXJlZFRhc2s8dm9pZCgpPigKIC8vICAgICBbPV0gKCkgewogLy8gICAgICAgICBk
byB0aGluZ3M7CiAvLyAgICAgfSk7CkBAIC0xMDIsMTAgKzEwNSwxMCBAQCBwcml2YXRlOgogLy8g
T24gdGhlIG90aGVyIGhhbmQsIGlmIHlvdSB1c2Ugc29tZXRoaW5nIGxpa2UgUGFyYWxsZWxIZWxw
ZXJDbGllbnQ6OnJ1blRhc2tJblBhcmFsbGVsKCkgKG9yIGl0cwogLy8gaGVscGVyLCBydW5GdW5j
dGlvbkluUGFyYWxsZWwoKSwgd2hpY2ggZG9lcyBjcmVhdGVTaGFyZWRUYXNrKCkgZm9yIHlvdSks
IHRoZW4gaXQgY2FuIGJlIE9LIHRvCiAvLyB1c2UgWyZdLCBzaW5jZSB0aGUgc3RhY2sgZnJhbWUg
d2lsbCByZW1haW4gbGl2ZSBmb3IgdGhlIGVudGlyZSBkdXJhdGlvbiBvZiB0aGUgdGFzaydzIGxp
ZmV0aW1lLgotdGVtcGxhdGU8dHlwZW5hbWUgRnVuY3Rvcj4KLVJlZjxTaGFyZWRUYXNrPiBjcmVh
dGVTaGFyZWRUYXNrKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCit0ZW1wbGF0ZTx0eXBlbmFtZSBG
dW5jdGlvblR5cGUsIHR5cGVuYW1lIEZ1bmN0b3I+CitSZWY8U2hhcmVkVGFzazxGdW5jdGlvblR5
cGU+PiBjcmVhdGVTaGFyZWRUYXNrKGNvbnN0IEZ1bmN0b3ImIGZ1bmN0b3IpCiB7Ci0gICAgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgU2hhcmVkVGFza0Z1bmN0b3I8RnVuY3Rvcj4oZnVuY3RvcikpOwor
ICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFNoYXJlZFRhc2tGdW5jdG9yPEZ1bmN0aW9uVHlwZSwg
RnVuY3Rvcj4oZnVuY3RvcikpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXVEYK
</data>
<flag name="review"
          id="288037"
          type_id="1"
          status="+"
          setter="saam"
    />
          </attachment>
      

    </bug>

</bugzilla>