<?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>143232</bug_id>
          
          <creation_ts>2015-03-30 11:39:03 -0700</creation_ts>
          <short_desc>JSC should detect singleton functions</short_desc>
          <delta_ts>2015-04-13 16:08:49 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>143496</dependson>
          <blocked>142944</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>ggaren</cc>
    
    <cc>mark.lam</cc>
    
    <cc>mhahnenb</cc>
    
    <cc>mmirman</cc>
    
    <cc>msaboff</cc>
    
    <cc>nrotem</cc>
    
    <cc>oliver</cc>
    
    <cc>saam</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1081255</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-30 11:39:03 -0700</bug_when>
    <thetext>We currently don&apos;t really need to detect singleton functions because we have lots of other crazy ways of optimizing scoped accesses.  But now that the scope is loaded from the function, it would be simpler and a bit more efficient to just detect singleton functions.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1081262</commentid>
    <comment_count>1</comment_count>
      <attachid>249753</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-30 11:56:59 -0700</bug_when>
    <thetext>Created attachment 249753
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1081311</commentid>
    <comment_count>2</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-30 14:52:47 -0700</bug_when>
    <thetext>This should make implementing block scoping easier, since the watchpointing of values in scopes no longer relies on a function reentry watchpoint.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1081335</commentid>
    <comment_count>3</comment_count>
      <attachid>249774</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-30 15:30:05 -0700</bug_when>
    <thetext>Created attachment 249774
more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1081729</commentid>
    <comment_count>4</comment_count>
      <attachid>249840</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-31 12:16:56 -0700</bug_when>
    <thetext>Created attachment 249840
all good</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1081730</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-03-31 12:19:36 -0700</bug_when>
    <thetext>Attachment 249840 did not pass style-queue:


ERROR: Source/JavaScriptCore/runtime/JSFunction.h:70:  The parameter name &quot;vm&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/runtime/JSFunction.h:70:  The parameter name &quot;executable&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/runtime/JSFunction.h:70:  The parameter name &quot;scope&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 3 in 69 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>1081732</commentid>
    <comment_count>6</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-31 12:21:22 -0700</bug_when>
    <thetext>(In reply to comment #5)
&gt; Attachment 249840 [details] did not pass style-queue:
&gt; 
&gt; 
&gt; ERROR: Source/JavaScriptCore/runtime/JSFunction.h:70:  The parameter name
&gt; &quot;vm&quot; adds no information, so it should be removed. 
&gt; [readability/parameter_name] [5]
&gt; ERROR: Source/JavaScriptCore/runtime/JSFunction.h:70:  The parameter name
&gt; &quot;executable&quot; adds no information, so it should be removed. 
&gt; [readability/parameter_name] [5]
&gt; ERROR: Source/JavaScriptCore/runtime/JSFunction.h:70:  The parameter name
&gt; &quot;scope&quot; adds no information, so it should be removed. 
&gt; [readability/parameter_name] [5]
&gt; Total errors found: 3 in 69 files

Fixed locally.

&gt; 
&gt; 
&gt; If any of these errors are false positives, please file a bug against
&gt; check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1081752</commentid>
    <comment_count>7</comment_count>
      <attachid>249840</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2015-03-31 12:55:26 -0700</bug_when>
    <thetext>Comment on attachment 249840
all good

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

r=me

&gt; Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:3466
&gt; +                    // Main thread stores to the global object: always first store a value first, and

Should the clause actually be &quot;always store a value first,&quot;?

&gt; Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:3467
&gt; +                    // only after that we touch the watchpoint set. There is a fence in the touch, that

Would it make sense to add &quot;do&quot; before &quot;we&quot;?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1081755</commentid>
    <comment_count>8</comment_count>
      <attachid>249844</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-31 13:06:26 -0700</bug_when>
    <thetext>Created attachment 249844
with fixes

Address review feedback.  Should fix build.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1081756</commentid>
    <comment_count>9</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-31 13:09:57 -0700</bug_when>
    <thetext>There are some perf pathologies in CompressionBench.  I&apos;ll investigate.


Benchmark report for SunSpider, LongSpider, V8Spider, Octane, Kraken, JSRegress, AsmBench, and CompressionBench on oldmac.

VMs tested:
&quot;TipOfTree&quot; at /home/pizlo/WebKit/secondary/OpenSource/WebKitBuild/Release/bin/jsc
&quot;FunctionRealloc&quot; at /home/pizlo/WebKit/primary/OpenSource/WebKitBuild/Release/bin/jsc

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

                                                        TipOfTree              FunctionRealloc                                  
SunSpider:
   3d-cube                                            9.3927+-1.8483     ?     10.3775+-1.4847        ? might be 1.1048x slower
   3d-morph                                          23.5558+-3.1663           21.6784+-1.8651          might be 1.0866x faster
   3d-raytrace                                       12.5393+-2.0719           12.0161+-1.5998          might be 1.0435x faster
   access-binary-trees                                4.8812+-1.3332     ?      5.1445+-1.9022        ? might be 1.0539x slower
   access-fannkuch                                   11.2394+-1.7326     ?     11.9386+-1.1693        ? might be 1.0622x slower
   access-nbody                                       5.1036+-0.4620     ?      5.4509+-0.7176        ? might be 1.0681x slower
   access-nsieve                                      6.2306+-1.2258            6.2264+-1.5130        
   bitops-3bit-bits-in-byte                           2.6175+-0.5868     ?      2.8580+-0.4253        ? might be 1.0919x slower
   bitops-bits-in-byte                                7.8233+-1.6677            6.9554+-0.7678          might be 1.1248x faster
   bitops-bitwise-and                                 3.4921+-0.6541     ?      4.0706+-0.8163        ? might be 1.1657x slower
   bitops-nsieve-bits                                 6.1803+-0.1647     ?      6.6783+-1.1447        ? might be 1.0806x slower
   controlflow-recursive                              4.7417+-0.4712            4.7040+-1.0420        
   crypto-aes                                         6.7043+-0.1485            6.5564+-0.2377          might be 1.0226x faster
   crypto-md5                                         4.7288+-0.8535     ?      4.9893+-0.7757        ? might be 1.0551x slower
   crypto-sha1                                        6.1534+-1.9704            4.3193+-0.8673          might be 1.4246x faster
   date-format-tofte                                 17.1707+-3.7331           15.3980+-0.4944          might be 1.1151x faster
   date-format-xparb                                 12.2037+-2.7149           10.6510+-1.1884          might be 1.1458x faster
   math-cordic                                        5.7905+-1.0880     ?      6.4437+-1.3517        ? might be 1.1128x slower
   math-partial-sums                                 18.0555+-0.0801           17.9943+-0.0660        
   math-spectral-norm                                 3.8210+-0.7226     ?      4.4190+-0.8149        ? might be 1.1565x slower
   regexp-dna                                        11.2852+-0.0442     ?     12.0616+-1.9415        ? might be 1.0688x slower
   string-base64                                      6.4191+-0.0877     ?      6.5739+-0.3238        ? might be 1.0241x slower
   string-fasta                                      15.3351+-2.3861           14.7872+-2.9285          might be 1.0371x faster
   string-tagcloud                                   18.3768+-1.2366           18.2568+-1.5532        
   string-unpack-code                                32.9510+-1.4864           32.7387+-0.5484        
   string-validate-input                              9.0435+-1.4952     ?      9.3000+-1.5615        ? might be 1.0284x slower

   &lt;arithmetic&gt;                                      10.2245+-0.2099           10.0995+-0.3191          might be 1.0124x faster

                                                        TipOfTree              FunctionRealloc                                  
LongSpider:
   3d-cube                                         1712.6300+-21.4639    ?   1724.1806+-40.6021       ?
   3d-morph                                        4157.1873+-12.2667    ?   4174.3197+-20.2732       ?
   3d-raytrace                                     1376.7355+-9.5985     !   1412.9830+-6.2525        ! definitely 1.0263x slower
   access-binary-trees                             1658.3138+-16.1820        1657.3691+-10.5446       
   access-fannkuch                                  534.3027+-19.7702    ?    555.3927+-26.0238       ? might be 1.0395x slower
   access-nbody                                    1216.8623+-4.4274         1213.9810+-5.2013        
   access-nsieve                                   1218.9384+-8.9384     ?   1220.3412+-16.0518       ?
   bitops-3bit-bits-in-byte                          62.9862+-2.7846           62.4499+-2.0066        
   bitops-bits-in-byte                              399.0030+-3.7246     ?    399.3698+-3.3687        ?
   bitops-nsieve-bits                              1147.5780+-10.2248        1144.2249+-6.9929        
   controlflow-recursive                            831.9004+-9.3905          820.3755+-3.0040          might be 1.0140x faster
   crypto-aes                                      1157.9582+-7.3481     ?   1162.9887+-6.4068        ?
   crypto-md5                                       907.8794+-9.6367          906.1702+-20.6249       
   crypto-sha1                                     1058.8525+-14.6407        1050.9257+-9.9945        
   date-format-tofte                               1383.1835+-56.7323        1325.1572+-15.5792         might be 1.0438x faster
   date-format-xparb                               1214.9996+-11.6471    ^   1138.7748+-48.9319       ^ definitely 1.0669x faster
   math-cordic                                      816.1796+-4.2416          815.2502+-4.5022        
   math-partial-sums                               1968.4484+-3.8607     ^   1955.0970+-4.8144        ^ definitely 1.0068x faster
   math-spectral-norm                              1306.4214+-2.6181         1306.4146+-5.8093        
   string-base64                                    553.4489+-13.1187         549.4940+-18.0411       
   string-fasta                                     942.9110+-38.3970         896.0475+-9.5482          might be 1.0523x faster
   string-tagcloud                                  385.2338+-4.5271     ?    387.8548+-7.1329        ?

   &lt;geometric&gt;                                      937.7653+-5.2358          932.5396+-3.3715          might be 1.0056x faster

                                                        TipOfTree              FunctionRealloc                                  
V8Spider:
   crypto                                            86.4222+-2.2984     ?     89.7272+-4.8254        ? might be 1.0382x slower
   deltablue                                        116.8864+-19.2434         112.7854+-11.2138         might be 1.0364x faster
   earley-boyer                                      75.8636+-2.4877     ?     77.2036+-3.0241        ? might be 1.0177x slower
   raytrace                                          53.0747+-12.2419    ?     55.9456+-7.5687        ? might be 1.0541x slower
   regexp                                           112.7055+-0.7269     ?    113.1554+-0.4287        ?
   richards                                         124.7788+-8.3877          118.3923+-5.4382          might be 1.0539x faster
   splay                                             60.9011+-3.1350           60.8982+-1.5767        

   &lt;geometric&gt;                                       85.7271+-4.5254     ?     86.1554+-1.9961        ? might be 1.0050x slower

                                                        TipOfTree              FunctionRealloc                                  
Octane:
   encrypt                                           0.34609+-0.00138    ?     0.34700+-0.00298       ?
   decrypt                                           6.25669+-0.01962    ?     6.26907+-0.02945       ?
   deltablue                                x2       0.33038+-0.00362          0.32846+-0.00447       
   earley                                            0.96014+-0.01427          0.95743+-0.01069       
   boyer                                            12.38363+-0.15715         12.37759+-0.07690       
   navier-stokes                            x2       7.88809+-0.00452    !     7.90223+-0.00561       ! definitely 1.0018x slower
   raytrace                                 x2       2.14260+-0.10196    ?     2.20183+-0.13576       ? might be 1.0276x slower
   richards                                 x2       0.22031+-0.00147    ?     0.22102+-0.00170       ?
   splay                                    x2       0.62017+-0.00762    ?     0.62249+-0.00669       ?
   regexp                                   x2      58.03444+-0.97246         57.70738+-0.99109       
   pdfjs                                    x2      82.73664+-1.57898    ?    84.50687+-0.83376       ? might be 1.0214x slower
   mandreel                                 x2      87.93816+-1.99566         86.79938+-0.99672         might be 1.0131x faster
   gbemu                                    x2      79.96769+-9.53319         75.53983+-2.68907         might be 1.0586x faster
   closure                                           0.88788+-0.00548          0.88099+-0.00280       
   jquery                                           11.64480+-0.06114         11.60246+-0.03312       
   box2d                                    x2      22.49244+-0.29788    ^    21.57721+-0.16184       ^ definitely 1.0424x faster
   zlib                                     x2     594.35528+-54.86557   ?   652.16482+-43.30586      ? might be 1.0973x slower
   typescript                               x2    1317.18315+-29.31654      1306.60579+-13.72498      

   &lt;geometric&gt;                                      11.42052+-0.13145    ?    11.43520+-0.09474       ? might be 1.0013x slower

                                                        TipOfTree              FunctionRealloc                                  
Kraken:
   ai-astar                                          513.861+-3.354      ?     524.119+-21.324        ? might be 1.0200x slower
   audio-beat-detection                              185.313+-4.384      ?     187.915+-5.633         ? might be 1.0140x slower
   audio-dft                                         242.134+-1.799      ?     243.175+-3.542         ?
   audio-fft                                         138.039+-7.647      ?     146.888+-5.864         ? might be 1.0641x slower
   audio-oscillator                                  315.134+-2.403      ?     316.194+-2.053         ?
   imaging-darkroom                                  225.047+-3.308            223.728+-3.350         
   imaging-desaturate                                116.416+-2.733            116.233+-2.625         
   imaging-gaussian-blur                             196.472+-2.612            196.432+-4.282         
   json-parse-financial                               90.952+-0.801             90.600+-0.402         
   json-stringify-tinderbox                           99.845+-0.682      ^      98.191+-0.573         ^ definitely 1.0168x faster
   stanford-crypto-aes                               106.183+-3.280            105.531+-2.785         
   stanford-crypto-ccm                                91.398+-3.869      ?      95.621+-9.437         ? might be 1.0462x slower
   stanford-crypto-pbkdf2                            290.288+-2.129      ?     292.126+-3.889         ?
   stanford-crypto-sha256-iterative                   90.418+-1.892      ?      90.681+-2.543         ?

   &lt;arithmetic&gt;                                      192.964+-0.710      ?     194.817+-1.589         ? might be 1.0096x slower

                                                        TipOfTree              FunctionRealloc                                  
JSRegress:
   string-concat-object                               4.1331+-0.4336            3.9305+-0.5191          might be 1.0515x faster
   array-with-double-add                              7.3525+-1.6249     ?      8.0118+-1.3576        ? might be 1.0897x slower
   function-with-eval                               165.2315+-1.0274          162.1337+-3.0188          might be 1.0191x faster
   logical-not                                        8.6750+-0.3274            8.6239+-0.4859        
   ArrayBuffer-Int8Array-alloc                       22.7898+-1.6087           21.3260+-1.9768          might be 1.0686x faster
   int-or-other-neg-then-get-by-val                   8.9694+-1.6959            7.8311+-0.5134          might be 1.1454x faster
   infer-closure-const-then-reenter-no-inline   
                                                     83.3424+-2.5907     !     97.6171+-0.7365        ! definitely 1.1713x slower
   infer-one-time-closure                            17.7982+-1.5861     ?     17.8459+-1.6061        ?
   substring                                         98.1547+-5.9465           92.9586+-2.3325          might be 1.0559x faster
   getter                                            10.6856+-2.1625            9.7270+-1.7427          might be 1.0986x faster
   fold-get-by-id-to-multi-get-by-offset-rare-int   
                                                     14.5086+-1.7346     ?     14.5503+-2.1568        ?
   imul-mixed                                        13.2085+-1.2824     ?     13.7556+-1.2431        ? might be 1.0414x slower
   getter-no-activation                               8.4005+-1.2637            8.3891+-2.1689        
   substring-concat                                  76.7749+-0.6797     ?     77.0467+-1.2568        ?
   undefined-property-access                        581.4713+-2.9068     ^    525.4448+-2.6439        ^ definitely 1.1066x faster
   sinkable-new-object-dag                          105.0912+-2.0912     ?    106.8400+-3.1117        ? might be 1.0166x slower
   fold-multi-put-by-offset-to-put-by-offset   
                                                      8.7699+-2.1910     ?     10.4214+-1.8332        ? might be 1.1883x slower
   varargs-call                                      21.6717+-0.5074     ?     23.9276+-2.3686        ? might be 1.1041x slower
   basic-set                                         14.3798+-1.6213     ?     15.0500+-2.2439        ? might be 1.0466x slower
   int-or-other-min-then-get-by-val                   8.0947+-1.3830            7.8690+-1.4859          might be 1.0287x faster
   Float64Array-to-Int16Array-set                   118.0739+-1.5744     ?    118.1057+-1.8511        ?
   switch-constant                                   12.9303+-1.0725     ?     13.3358+-1.8458        ? might be 1.0314x slower
   array-prototype-some                             149.6493+-6.4309          147.6893+-4.8334          might be 1.0133x faster
   gcse-poly-get-less-obvious                        30.4652+-1.5335     ?     30.8305+-2.3120        ? might be 1.0120x slower
   string-out-of-bounds                              21.0960+-0.3055     ?     22.1875+-1.0636        ? might be 1.0517x slower
   string-concat-pair-simple                         17.8265+-1.4125     ?     18.0328+-1.3941        ? might be 1.0116x slower
   double-to-int32-typed-array                        3.8047+-0.6989     ?      4.2555+-0.0861        ? might be 1.1185x slower
   sparse-conditional                                 2.6863+-0.4602            2.2996+-0.4897          might be 1.1681x faster
   external-arguments-getbyval                        2.7742+-0.7443     ?      3.2356+-1.2947        ? might be 1.1663x slower
   get-by-id-proto-or-self                           29.9170+-2.8901           28.5693+-2.3399          might be 1.0472x faster
   Int8Array-load                                     6.4299+-1.3992     ?      6.8507+-1.5938        ? might be 1.0655x slower
   slow-array-profile-convergence                     4.4463+-0.0408     ?      5.3347+-1.0177        ? might be 1.1998x slower
   make-rope-cse                                      6.7788+-0.3622     ?      7.1635+-0.0647        ? might be 1.0567x slower
   marsaglia-larger-ints                             67.4926+-1.9478           67.0031+-1.2025        
   HashMap-put-get-iterate                           43.9340+-2.0496           43.0710+-2.8617          might be 1.0200x faster
   plus-boolean-arith                                 5.1296+-1.0726            4.7387+-0.8986          might be 1.0825x faster
   nested-function-parsing                           62.5202+-0.7629     !     64.1783+-0.5322        ! definitely 1.0265x slower
   plus-boolean                                       4.9980+-1.8859            3.9158+-0.4664          might be 1.2764x faster
   put-by-val-direct                                  1.1375+-0.2338     ?      1.2194+-0.1932        ? might be 1.0720x slower
   negative-zero-negate                               0.6130+-0.0962            0.5894+-0.1187          might be 1.0399x faster
   inline-get-scoped-var                              7.9749+-0.8455     ?      8.2491+-1.5856        ? might be 1.0344x slower
   global-var-const-infer-fire-from-opt               2.1568+-1.6487            2.1545+-1.2628        
   arguments-out-of-bounds                           22.1458+-0.4461           21.4967+-0.5681          might be 1.0302x faster
   large-int-captured                                10.6507+-1.9659           10.2518+-1.6068          might be 1.0389x faster
   object-closure-call                                9.8663+-1.6626            9.8505+-1.8615        
   array-nonarray-polymorhpic-access                 60.6990+-4.3365           59.7797+-4.4807          might be 1.0154x faster
   poly-chain-access-different-prototypes-simple   
                                                      4.9943+-0.9967     ?      6.5967+-2.1634        ? might be 1.3208x slower
   inline-arguments-aliased-access                    9.0350+-1.6901            8.3214+-0.9576          might be 1.0858x faster
   switch-string-basic-big-var                       38.6795+-0.9497     ?     39.3291+-0.7283        ? might be 1.0168x slower
   tear-off-arguments                                 8.3411+-1.3714            8.1512+-0.9861          might be 1.0233x faster
   neg-boolean                                        6.5004+-1.2247            6.1180+-1.2828          might be 1.0625x faster
   external-arguments-putbyval                        5.8436+-0.7490            4.7250+-1.1445          might be 1.2367x faster
   array-with-int32-add-sub                          12.6624+-2.1361     ?     13.1613+-2.3079        ? might be 1.0394x slower
   in-one-case-true                                  15.0920+-0.4381     ?     16.6793+-2.9208        ? might be 1.1052x slower
   string-get-by-val-out-of-bounds                    9.6750+-2.7490            9.4634+-2.1308          might be 1.0224x faster
   Float32Array-to-Float64Array-set                 100.5439+-1.3725          100.4899+-1.9363        
   get-by-val-out-of-bounds                           7.1596+-0.7214     ?      8.1813+-1.7365        ? might be 1.1427x slower
   Int16Array-bubble-sort-with-byteLength            48.7245+-2.1840           48.2799+-2.8677        
   string-char-code-at                               25.2042+-3.6632     ?     25.6789+-2.9643        ? might be 1.0188x slower
   double-pollution-getbyval                         11.6953+-0.1628     ?     11.8954+-0.3743        ? might be 1.0171x slower
   obvious-sink-pathology-taken                     204.2742+-1.8992     ?    204.6290+-2.8411        ?
   for-of-iterate-array-keys                          7.4501+-1.8347     ?      8.0476+-1.9563        ? might be 1.0802x slower
   try-catch-get-by-val-direct-arguments              9.4877+-0.0354     ?     10.4214+-1.8576        ? might be 1.0984x slower
   arguments                                         15.3453+-1.0903           14.9008+-0.5758          might be 1.0298x faster
   to-int32-boolean                                  27.4456+-2.5249           26.6657+-0.4924          might be 1.0292x faster
   slow-convergence                                   6.1135+-0.4486     ^      4.4623+-0.0639        ^ definitely 1.3700x faster
   new-array-dead                                    20.6069+-1.3492           19.8903+-1.0061          might be 1.0360x faster
   function-test                                      7.5100+-1.1332            7.0223+-1.7765          might be 1.0694x faster
   elidable-new-object-tree                          74.8958+-2.1654           73.4664+-2.4848          might be 1.0195x faster
   varargs-inline                                    13.8626+-1.0402     ?     14.8818+-0.5105        ? might be 1.0735x slower
   get-by-id-self-or-proto                           29.0742+-1.8144     ?     30.2278+-2.4499        ? might be 1.0397x slower
   fold-put-by-id-to-multi-put-by-offset             14.9158+-3.8287           13.0568+-2.3411          might be 1.1424x faster
   cmpeq-obj-to-obj-other                            16.5774+-0.6350     ?     18.4022+-1.8493        ? might be 1.1101x slower
   in-two-cases                                      15.8858+-0.3778     ?     16.3715+-1.2692        ? might be 1.0306x slower
   direct-arguments-getbyval                          2.4313+-0.9232     ?      2.5839+-0.9846        ? might be 1.0628x slower
   method-on-number                                  29.8306+-1.7739           28.2861+-0.9487          might be 1.0546x faster
   gcse-poly-get                                     32.7299+-2.4534           31.5986+-2.1018          might be 1.0358x faster
   branch-fold                                        6.4615+-1.2009     ?      6.9510+-1.2250        ? might be 1.0758x slower
   setter                                             8.5365+-0.6510     ?      8.8151+-1.4570        ? might be 1.0326x slower
   simple-activation-demo                            36.6371+-0.3563     ?     38.3120+-2.1208        ? might be 1.0457x slower
   switch-string-basic-big                           21.1182+-1.4417     ?     23.0440+-2.1673        ? might be 1.0912x slower
   double-to-uint32-typed-array                       4.1045+-0.5528            3.9637+-0.7169          might be 1.0355x faster
   cell-argument                                     13.3107+-2.2246           12.4418+-0.5546          might be 1.0698x faster
   HashMap-put-get-iterate-keys                      42.4377+-0.9345     ?     45.4631+-4.8469        ? might be 1.0713x slower
   array-with-double-sum                              6.5466+-1.4309     ?      6.9577+-1.4269        ? might be 1.0628x slower
   sin-boolean                                       26.2377+-1.8061           26.0317+-1.6634        
   switch-string-length-tower                        17.3553+-0.0522     ^     16.6027+-0.0424        ^ definitely 1.0453x faster
   integer-modulo                                     3.9066+-1.0812     ?      4.4248+-0.8729        ? might be 1.1327x slower
   minus-boolean                                      4.9972+-0.9803            4.7617+-1.0376          might be 1.0495x faster
   plus-boolean-double                                5.6785+-1.0594     ?      6.7063+-1.1711        ? might be 1.1810x slower
   weird-inlining-const-prop                          4.6827+-2.0603            3.6344+-0.9114          might be 1.2884x faster
   get_callee_monomorphic                             6.1488+-0.4030     ?      7.2278+-1.0474        ? might be 1.1755x slower
   singleton-scope                                  104.7633+-0.2421     !    109.2273+-2.3759        ! definitely 1.0426x slower
   indexed-properties-in-objects                      4.4072+-0.1290     ?      5.6432+-1.9858        ? might be 1.2804x slower
   function-dot-apply                                 3.7294+-0.7526     ?      4.2453+-0.9699        ? might be 1.1383x slower
   rare-osr-exit-on-local                            24.3157+-2.5482           23.6240+-2.3544          might be 1.0293x faster
   in-one-case-false                                 16.7926+-1.9317     ?     17.3334+-2.7490        ? might be 1.0322x slower
   sinkable-new-object-taken                         85.4812+-5.2929           83.7348+-2.7117          might be 1.0209x faster
   inlined-put-by-id-transition                      18.5172+-0.8328     ?     19.6544+-1.4309        ? might be 1.0614x slower
   int-or-other-max-then-get-by-val                   7.9321+-1.2313     ?      8.1562+-0.7359        ? might be 1.0282x slower
   string-cons-tower                                 11.9584+-0.1064     ?     11.9981+-0.0692        ?
   polymorphic-put-by-id                             44.2642+-3.4460     ?     45.2116+-3.1653        ? might be 1.0214x slower
   string-repeat-arith                               50.3586+-0.7573     !     55.3770+-0.4638        ! definitely 1.0997x slower
   varargs                                           16.7673+-2.6264           16.3774+-0.2146          might be 1.0238x faster
   deltablue-varargs                                348.1871+-11.1266         345.9655+-9.3573        
   undefined-test                                     6.4071+-1.2343     ?      7.0092+-1.8147        ? might be 1.0940x slower
   infer-one-time-closure-ten-vars                   18.8096+-0.8130     ^     17.7785+-0.1269        ^ definitely 1.0580x faster
   arguments-strict-mode                             16.8280+-0.6263     ?     17.0412+-1.1624        ? might be 1.0127x slower
   imul-double-only                                  12.5883+-1.5999           12.4911+-1.5441        
   Float64Array-alloc-long-lived                    103.1875+-1.8439          102.2204+-2.0729        
   tear-off-arguments-simple                          5.7156+-0.8735     ?      6.2530+-1.3784        ? might be 1.0940x slower
   splice-to-remove                                  32.5669+-1.8579     ?     33.3354+-2.6106        ? might be 1.0236x slower
   fold-double-to-int                                26.1076+-2.7128           25.0291+-0.7062          might be 1.0431x faster
   fold-put-structure                                 9.7543+-1.8179            9.7071+-1.9531        
   infer-closure-const-then-put-to-scope-no-inline   
                                                     17.8738+-1.3627     !     20.7871+-1.2706        ! definitely 1.1630x slower
   Int32Array-alloc-long-lived                       82.1756+-1.1836     ?     82.4659+-1.5770        ?
   new-array-push                                     6.6601+-0.4976     ?      7.5287+-0.6704        ? might be 1.1304x slower
   infer-closure-const-then-mov-no-inline             6.0376+-0.7641     ?      8.0443+-1.8933        ? might be 1.3324x slower
   string-test                                        6.4943+-1.6038     ?      7.2229+-1.4537        ? might be 1.1122x slower
   call-spread-apply                                 47.4108+-2.1533     ?     49.4011+-5.1294        ? might be 1.0420x slower
   string-var-equality                               54.5150+-1.6756     ^     52.4035+-0.0784        ^ definitely 1.0403x faster
   captured-assignments                               0.7523+-0.1663     ?      0.7955+-0.1713        ? might be 1.0575x slower
   register-pressure-from-osr                        34.5943+-4.9054           33.2580+-2.8828          might be 1.0402x faster
   switch-string-basic                               20.5780+-2.2720     ?     22.6458+-3.9292        ? might be 1.1005x slower
   hoist-poly-check-structure                         6.2955+-1.3335     ?      7.1665+-1.3742        ? might be 1.1384x slower
   string-equality                                   29.4926+-5.9261           27.8624+-2.7451          might be 1.0585x faster
   mul-boolean                                        5.5966+-1.1212            4.3410+-0.3771          might be 1.2892x faster
   int-or-other-add                                  10.1258+-0.8154            9.8025+-0.6774          might be 1.0330x faster
   switch-string-big-length-tower-var                30.6421+-1.8812           30.4718+-1.4592        
   structure-hoist-over-transitions                   5.1747+-1.3121            4.8115+-0.8208          might be 1.0755x faster
   array-with-int32-or-double-sum                     6.4361+-1.1669            6.1510+-1.2760          might be 1.0464x faster
   get_callee_polymorphic                             5.3673+-0.3930     ?      5.4115+-0.1999        ?
   fixed-typed-array-storage-var-index                2.2437+-0.4115     ?      2.2575+-0.6130        ?
   max-boolean                                        4.8072+-0.9545            4.2950+-0.8651          might be 1.1193x faster
   switch-string-length-tower-var                    23.8527+-0.1324     ^     23.1174+-0.0320        ^ definitely 1.0318x faster
   DataView-custom-properties                        78.9757+-2.5133     ?     79.7572+-2.5465        ?
   elidable-new-object-roflcopter                    73.8210+-5.8979           72.3543+-5.6609          might be 1.0203x faster
   Int32Array-Int8Array-view-alloc                   11.3870+-0.6036     ?     11.5214+-0.1898        ? might be 1.0118x slower
   constant-test                                      9.5382+-0.8483     ?     10.0256+-1.0991        ? might be 1.0511x slower
   poly-chain-access-different-prototypes             4.8267+-1.5888            4.6674+-1.1468          might be 1.0341x faster
   Float32Array-matrix-mult                           7.5221+-1.5374            7.0380+-0.2419          might be 1.0688x faster
   temporal-structure                                21.2728+-2.5288     ?     22.7310+-2.0870        ? might be 1.0685x slower
   ArrayBuffer-Int8Array-alloc-long-lived-buffer   
                                                     45.6100+-1.6293     ?     46.6044+-0.8011        ? might be 1.0218x slower
   switch-string-short                               17.3809+-0.0999     ^     16.5746+-0.0605        ^ definitely 1.0486x faster
   infer-closure-const-then-reenter                 181.5669+-2.0224     ^     34.7546+-0.3631        ^ definitely 5.2242x faster
   hoist-make-rope                                   17.7815+-0.9670     ?     18.4797+-1.5842        ? might be 1.0393x slower
   ArrayBuffer-DataView-alloc-long-lived             27.0790+-0.6252     ?     27.5136+-0.5277        ? might be 1.0160x slower
   put-by-id                                         19.7596+-0.6988           19.5826+-0.9831        
   marsaglia-osr-entry                               35.1433+-2.4439           34.3422+-1.3157          might be 1.0233x faster
   fold-multi-put-by-offset-to-replace-or-transition-put-by-offset   
                                                     15.2616+-1.7467     ?     16.6427+-2.9713        ? might be 1.0905x slower
   double-pollution-putbyoffset                       8.9895+-1.6725     ?     10.0496+-3.0122        ? might be 1.1179x slower
   allocate-big-object                                4.8097+-0.2305     ?      4.8237+-0.6354        ?
   ArrayBuffer-Int8Array-alloc-large-long-lived   
                                                     75.1158+-2.6146     ^     67.7994+-4.1495        ^ definitely 1.1079x faster
   new-array-buffer-push                             10.1701+-0.3898            9.7193+-0.3084          might be 1.0464x faster
   proto-getter-access                               15.7438+-1.9698           15.1745+-1.2859          might be 1.0375x faster
   elidable-new-object-then-call                     65.0165+-1.8863     ?     66.1386+-2.6830        ? might be 1.0173x slower
   getter-richards                                  162.5688+-21.6944         157.6792+-9.3295          might be 1.0310x faster
   int-or-other-div-then-get-by-val                   7.2026+-1.4680     ?      7.3310+-1.3733        ? might be 1.0178x slower
   for-of-iterate-array-entries                       8.0518+-1.4014     ?      9.6695+-1.8806        ? might be 1.2009x slower
   switch-char-constant                               5.6707+-1.3215            4.7314+-0.7734          might be 1.1985x faster
   infer-closure-const-then-put-to-scope             34.5287+-1.4602     ?     36.1645+-0.4194        ? might be 1.0474x slower
   varargs-strict-mode                               16.4589+-2.0082           16.3476+-0.0867        
   get-by-id-quadmorphic-check-structure-elimination-simple   
                                                      6.5141+-1.8491     ?      7.2647+-1.6594        ? might be 1.1152x slower
   infer-one-time-deep-closure                       31.0538+-1.7563           30.4079+-0.9054          might be 1.0212x faster
   obvious-sink-pathology                           193.3276+-1.7824     ?    194.7242+-5.3572        ?
   by-val-generic                                    14.7705+-0.4122     ?     16.5571+-2.6212        ? might be 1.1210x slower
   ftl-library-inlining                             113.1843+-20.2965    ?    114.0601+-19.2391       ?
   array-access-polymorphic-structure                11.5600+-2.0347           11.2024+-1.2929          might be 1.0319x faster
   int-or-other-sub-then-get-by-val                   8.9184+-1.3496            7.6993+-0.8800          might be 1.1583x faster
   Int16Array-load-int-mul                            3.0353+-0.5343            2.7732+-0.5527          might be 1.0945x faster
   varargs-construct-inline                          33.6563+-0.7327     ?     34.2858+-2.2946        ? might be 1.0187x slower
   get-by-id-bimorphic-check-structure-elimination   
                                                     11.7346+-3.4445           11.5706+-2.6188          might be 1.0142x faster
   for-of-iterate-array-values                        6.9768+-1.0211     ?      7.8172+-1.6042        ? might be 1.1205x slower
   string-get-by-val-out-of-bounds-insane             5.9778+-0.8561            5.6424+-0.2120          might be 1.0594x faster
   cfg-simplify                                       5.8690+-1.1478            5.3339+-0.7786          might be 1.1003x faster
   put-by-id-replace-and-transition                  14.3352+-0.5686           14.2711+-1.1606        
   HashMap-string-put-get-iterate                    41.8795+-2.6127     ?     42.8315+-2.4942        ? might be 1.0227x slower
   negative-zero-modulo                               0.5887+-0.1308            0.5530+-0.1347          might be 1.0645x faster
   string-cons-repeat                                11.9399+-0.3255     ?     12.0018+-0.2841        ?
   array-prototype-every                            153.1156+-7.6803          146.3458+-6.4994          might be 1.0463x faster
   assign-custom-setter                               6.2412+-0.0763     ?      6.7279+-0.8864        ? might be 1.0780x slower
   Int16Array-to-Int32Array-set                     112.6842+-2.4712     ^     99.1448+-2.6317        ^ definitely 1.1366x faster
   string-sub                                        98.2621+-2.9818     !    104.9269+-2.4310        ! definitely 1.0678x slower
   string-get-by-val                                  6.9843+-1.6573            6.1730+-0.9859          might be 1.1314x faster
   mul-boolean-double                                 6.5012+-1.2422     ?      7.5038+-1.7683        ? might be 1.1542x slower
   infer-constant-global-property                   494.0874+-2.8789     ?    494.4902+-3.1898        ?
   string-get-by-val-big-char                        13.1410+-2.6686           12.9345+-1.7212          might be 1.0160x faster
   switch-char                                        9.8388+-0.2336     ?     11.5446+-1.7560        ? might be 1.1734x slower
   ArrayBuffer-Int8Array-alloc-long-lived            27.2399+-1.0396     ^     24.5490+-0.7803        ^ definitely 1.1096x faster
   put-by-id-slightly-polymorphic                     6.3022+-3.2506            5.4589+-0.9878          might be 1.1545x faster
   Int32Array-alloc-large                            38.0667+-0.5581     ?     38.4395+-1.0390        ?
   infer-closure-const-then-mov                      29.2384+-1.8265     ?     32.2907+-2.6336        ? might be 1.1044x slower
   exit-length-on-plain-object                       21.7659+-0.1090     ^     21.4329+-0.2089        ^ definitely 1.0155x faster
   object-test                                        6.6823+-1.2964            6.5208+-1.3674          might be 1.0248x faster
   poly-stricteq                                     80.4878+-0.1109     ?     81.1385+-1.3067        ?
   string-concat-simple                              17.8630+-0.3782     ?     18.1691+-1.1251        ? might be 1.0171x slower
   large-int-neg                                     27.0183+-2.3535           25.0152+-0.2090          might be 1.0801x faster
   int-or-other-add-then-get-by-val                   8.3490+-1.1028            8.1183+-1.4005          might be 1.0284x faster
   string-hash                                        4.3291+-1.2013     ?      4.3960+-0.8732        ? might be 1.0155x slower
   fold-multi-get-by-offset-to-poly-get-by-offset   
                                                     13.5063+-3.2416           11.6581+-3.0429          might be 1.1585x faster
   simple-getter-access                              20.7037+-1.0528           20.1712+-0.6343          might be 1.0264x faster
   ArrayBuffer-DataView-alloc-large-long-lived   
                                                     70.8417+-3.3029     ?     71.4030+-1.0019        ?
   mod-boolean                                       10.7845+-0.2325     ?     11.7873+-1.4427        ? might be 1.0930x slower
   integer-divide                                    16.8208+-0.4158     ?     17.2799+-1.4233        ? might be 1.0273x slower
   make-indexed-storage                               6.3986+-1.2148     ?      6.7296+-1.3560        ? might be 1.0517x slower
   chain-getter-access                               17.0520+-1.4205           16.0935+-1.8976          might be 1.0596x faster
   int-or-other-neg-zero-then-get-by-val             37.0946+-1.3418     ?     37.3979+-0.5333        ?
   varargs-construct                                 48.0425+-1.4571     ?     50.1279+-2.4514        ? might be 1.0434x slower
   call-spread-call                                  37.2600+-1.4847     ?     39.4958+-1.7511        ? might be 1.0600x slower
   array-prototype-map                              156.0912+-3.5712     ?    166.6296+-8.1009        ? might be 1.0675x slower
   div-boolean                                       12.7122+-1.8653           12.1572+-0.6186          might be 1.0457x faster
   try-catch-get-by-val-cloned-arguments             21.6048+-0.1967     ?     22.0427+-0.5453        ? might be 1.0203x slower
   lots-of-fields                                    24.4757+-1.0683     ?     24.8946+-0.6685        ? might be 1.0171x slower
   double-to-uint32-typed-array-no-inline             5.1740+-0.9416            4.5108+-0.9511          might be 1.1470x faster
   array-with-double-mul-add                          9.6835+-2.6887     ?     10.8852+-2.3050        ? might be 1.1241x slower
   arity-mismatch-inlining                            1.7327+-0.2726            1.6347+-0.3312          might be 1.0600x faster
   int-or-other-abs-zero-then-get-by-val             38.9401+-2.5978           38.5500+-2.7144          might be 1.0101x faster
   assign-custom-setter-polymorphic                   4.9011+-0.8546     ?      5.1540+-0.7113        ? might be 1.0516x slower
   inline-arguments-access                            7.8643+-1.2001     ?      8.5517+-0.9360        ? might be 1.0874x slower
   ArrayBuffer-Int32Array-byteOffset                  5.8546+-0.3968     ?      6.4763+-1.3764        ? might be 1.1062x slower
   string-concat-pair-object                          4.1082+-0.5223     ?      4.1693+-0.0499        ? might be 1.0149x slower
   big-int-mul                                        8.0975+-2.0253            7.9838+-1.2219          might be 1.0142x faster
   simple-poly-call-nested                           12.9127+-1.1834           12.3571+-1.8312          might be 1.0450x faster
   inline-arguments-local-escape                      7.4880+-0.5198     ?      8.3348+-0.9591        ? might be 1.1131x slower
   Int32Array-alloc                                   5.0411+-0.2843            5.0363+-0.1944        
   poly-chain-access-simpler                          4.8992+-0.6778     ?      5.4043+-1.1040        ? might be 1.1031x slower
   adapt-to-double-divide                            21.9694+-0.4239     ?     22.2947+-0.6047        ? might be 1.0148x slower
   abs-boolean                                        6.2254+-1.6461            5.9148+-1.1268          might be 1.0525x faster
   double-to-int32-typed-array-no-inline              4.2327+-0.6950     ?      4.3982+-1.4057        ? might be 1.0391x slower
   number-test                                        6.1469+-1.5018            5.8357+-1.0671          might be 1.0533x faster
   polymorphic-structure                             27.3512+-2.1819     ?     27.8853+-2.6867        ? might be 1.0195x slower
   int-overflow-local                                 8.1801+-2.2051     ?      9.2571+-3.5795        ? might be 1.1317x slower
   div-boolean-double                                 6.9991+-0.3622     ?      7.3012+-1.4520        ? might be 1.0432x slower
   new-array-buffer-dead                              5.7280+-1.0557            5.6670+-0.9959          might be 1.0108x faster
   in-four-cases                                     29.6939+-2.0237     ?     30.7677+-2.8198        ? might be 1.0362x slower
   Int16Array-alloc-long-lived                       73.1728+-0.3661     ^     71.7484+-0.9676        ^ definitely 1.0199x faster
   infer-constant-property                            4.7104+-0.9096     ?      5.2323+-1.2287        ? might be 1.1108x slower
   Int8Array-alloc-long-lived                        65.7314+-0.6789     ?     65.9612+-1.0574        ?
   put-by-val-large-index-blank-indexing-type   
                                                     10.1652+-0.2301     ?     10.8263+-0.5025        ? might be 1.0650x slower
   boolean-test                                       6.4658+-1.4845            5.9284+-0.8934          might be 1.0906x faster
   double-get-by-val-out-of-bounds                    7.3571+-0.9137     ?      8.4583+-1.8711        ? might be 1.1497x slower
   fold-multi-put-by-offset-to-poly-put-by-offset   
                                                     11.3470+-1.2783            9.9430+-1.4963          might be 1.1412x faster
   polymorphic-get-by-id                              5.6313+-0.9348            5.2335+-0.9987          might be 1.0760x faster
   int-or-other-mod-then-get-by-val                   6.8902+-0.6892     ?      8.0750+-1.9349        ? might be 1.1719x slower
   min-boolean                                        4.1488+-0.8252     ?      5.4956+-1.3545        ? might be 1.3246x slower
   get-by-id-check-structure-elimination              9.2596+-0.4605     ?      9.3645+-0.2114        ? might be 1.0113x slower
   delay-tear-off-arguments-strictmode               21.6449+-2.3765     ?     22.7062+-2.4157        ? might be 1.0490x slower
   arguments-named-and-reflective                    18.2091+-0.7621           18.0347+-0.5012        
   emscripten-cube2hash                              54.6792+-8.6073           50.5494+-4.4136          might be 1.0817x faster
   put-by-val-machine-int                             4.5337+-0.7442     ?      4.6960+-0.5990        ? might be 1.0358x slower
   try-catch-get-by-val-scoped-arguments             11.5208+-0.1942     ?     12.0230+-0.4159        ? might be 1.0436x slower
   minus-boolean-double                               5.8029+-1.5989            5.4576+-1.1203          might be 1.0633x faster
   ftl-library-inlining-dataview                    100.4742+-3.1301     ?    104.3418+-4.5625        ? might be 1.0385x slower
   destructuring-swap                                10.1442+-0.6354     ?     10.6677+-1.5970        ? might be 1.0516x slower
   int-or-other-mul-then-get-by-val                   8.0623+-1.1926            7.4357+-1.3863          might be 1.0843x faster
   misc-strict-eq                                    64.0642+-3.0669     ?     65.6877+-5.5913        ? might be 1.0253x slower
   int-or-other-sub                                   7.0800+-1.1763            6.5275+-1.0817          might be 1.0847x faster
   empty-string-plus-int                              9.3695+-1.3103            8.9368+-1.7284          might be 1.0484x faster
   unprofiled-licm                                   34.9999+-1.7758     ?     36.1466+-4.6053        ? might be 1.0328x slower
   no-inline-constructor                            177.5682+-1.4708     ?    177.9597+-1.9521        ?
   global-var-const-infer                             1.2695+-0.2146            1.1063+-0.2115          might be 1.1475x faster
   get-by-id-bimorphic-check-structure-elimination-simple   
                                                      4.5905+-0.8249     ?      4.6622+-0.9961        ? might be 1.0156x slower
   switch                                            18.4781+-2.3896           17.8021+-2.5561          might be 1.0380x faster
   obviously-elidable-new-object                     57.6269+-1.9380     ?     58.9076+-1.4483        ? might be 1.0222x slower
   fixed-typed-array-storage                          1.7862+-0.4109     ?      1.8198+-0.4035        ? might be 1.0188x slower
   substring-concat-weird                            69.6988+-1.3866     ?     69.7988+-0.4315        ?
   sinkable-new-object                               62.2484+-1.0901           61.9700+-1.4497        
   simple-poly-call                                   2.5915+-0.6260     ?      2.6630+-0.1542        ? might be 1.0276x slower
   negative-zero-divide                               0.6238+-0.1268            0.5912+-0.1290          might be 1.0551x faster
   imul-int-only                                     15.6973+-1.0863           15.6483+-0.7474        
   hoist-poly-check-structure-effectful-loop   
                                                      9.7757+-3.0720            9.6466+-1.8321          might be 1.0134x faster
   Int16Array-bubble-sort                            46.4881+-1.6263           45.6230+-0.0976          might be 1.0190x faster
   int52-spill                                       11.3113+-0.3613     ?     13.1313+-1.9601        ? might be 1.1609x slower
   string-long-ident-equality                        22.5336+-3.0419           21.6704+-1.0897          might be 1.0398x faster
   aliased-arguments-getbyval                         2.9233+-1.2404            2.4813+-0.8392          might be 1.1782x faster
   fold-get-by-id-to-multi-get-by-offset             13.6812+-1.8336           13.6378+-2.7709        
   fold-multi-get-by-offset-to-get-by-offset   
                                                     11.5203+-2.6749     ?     12.5235+-3.1092        ? might be 1.0871x slower
   asmjs_bool_bug                                    11.0662+-1.0359           10.9027+-0.1540          might be 1.0150x faster
   fround                                            28.7963+-1.7035     ?     29.4992+-2.3417        ? might be 1.0244x slower
   switch-string-basic-var                           33.3255+-3.5344           31.7995+-6.1372          might be 1.0480x faster
   array-with-double-increment                        5.7658+-1.3133     ?      6.7611+-1.6888        ? might be 1.1726x slower
   get-by-id-chain-from-try-block                    13.5448+-0.0922     ?     13.6331+-0.1471        ?
   infer-one-time-closure-two-vars                   17.7526+-0.8408           17.3698+-0.6754          might be 1.0220x faster
   create-lots-of-functions                          40.2867+-2.1051           39.0177+-2.1276          might be 1.0325x faster
   elidable-new-object-dag                           65.5000+-3.9559           64.5265+-2.0018          might be 1.0151x faster
   polyvariant-monomorphic-get-by-id                 15.2995+-1.5947     ?     17.3973+-3.8965        ? might be 1.1371x slower
   Int8Array-load-with-byteLength                     6.5491+-1.3797            6.0976+-0.8412          might be 1.0740x faster
   array-prototype-forEach                          143.0687+-6.2167     ?    143.5450+-6.0256        ?
   large-int                                         22.9926+-1.8812           22.7121+-1.8307          might be 1.0124x faster
   int-or-other-abs-then-get-by-val                   9.6839+-1.4440            9.2134+-1.2689          might be 1.0511x faster
   gcse                                               9.8724+-2.2503            9.6228+-3.4780          might be 1.0259x faster
   cast-int-to-double                                10.9247+-1.4338           10.5759+-0.9061          might be 1.0330x faster
   destructuring-arguments                           25.0527+-0.5034     ?     26.0627+-1.3782        ? might be 1.0403x slower
   poly-chain-access                                  4.2781+-0.8009     ?      4.6617+-0.8338        ? might be 1.0897x slower
   polymorphic-array-call                             2.0916+-0.2000     ?      2.2159+-0.2235        ? might be 1.0594x slower
   array-splice-contiguous                           96.9450+-10.2748          92.0464+-5.5049          might be 1.0532x faster
   mod-boolean-double                                12.0567+-2.2048           10.3524+-0.5450          might be 1.1646x faster

   &lt;geometric&gt;                                       14.9348+-0.1204     ?     14.9597+-0.1005        ? might be 1.0017x slower

                                                        TipOfTree              FunctionRealloc                                  
AsmBench:
   bigfib.cpp                                       762.2795+-12.9901    !    796.2536+-10.5541       ! definitely 1.0446x slower
   n-body.c                                        2015.2334+-1.9373     ?   2019.4775+-3.6410        ?
   FloatMM.c                                       1135.8015+-22.1074    ?   1155.2264+-2.5682        ? might be 1.0171x slower
   cray.c                                           767.6041+-28.3988    ?    801.4739+-5.8783        ? might be 1.0441x slower
   stepanov_container.cpp                          5556.4023+-39.1732    ?   5574.3343+-18.4033       ?
   dry.c                                            818.2845+-35.2464         790.9192+-23.4038         might be 1.0346x faster
   gcc-loops.cpp                                   7013.8607+-38.3068    ?   7051.9246+-103.7669      ?
   Towers.c                                         465.8109+-7.3643          451.8176+-11.5756         might be 1.0310x faster
   Quicksort.c                                      703.3576+-2.1536     ?    704.4541+-8.8259        ?

   &lt;geometric&gt;                                     1340.4445+-5.1091     ?   1348.2654+-6.8608        ? might be 1.0058x slower

                                                        TipOfTree              FunctionRealloc                                  
CompressionBench:
   huffman                                          632.5870+-23.8658    ?    642.1671+-26.9759       ? might be 1.0151x slower
   arithmetic-simple                                642.7873+-4.1431     !    670.4495+-22.9164       ! definitely 1.0430x slower
   arithmetic-precise                               502.8314+-12.7710    ?    520.4318+-8.4281        ? might be 1.0350x slower
   arithmetic-complex-precise                       500.3788+-8.8826     ?    516.4002+-7.6858        ? might be 1.0320x slower
   arithmetic-precise-order-0                       679.6448+-14.8879    ?    690.2684+-5.9071        ? might be 1.0156x slower
   arithmetic-precise-order-1                       528.1278+-13.4463    ?    538.3418+-5.1507        ? might be 1.0193x slower
   arithmetic-precise-order-2                       554.2217+-3.2980     !    574.7643+-4.0120        ! definitely 1.0371x slower
   arithmetic-simple-order-1                        624.3350+-6.6309     !    639.4243+-2.1735        ! definitely 1.0242x slower
   arithmetic-simple-order-2                        695.4292+-5.9827     !    711.0038+-5.5694        ! definitely 1.0224x slower
   lz-string                                        467.8931+-10.6896    ?    472.3737+-4.9408        ?

   &lt;geometric&gt;                                      577.5367+-3.6241     !    592.1537+-4.3534        ! definitely 1.0253x slower

                                                        TipOfTree              FunctionRealloc                                  

                                                        TipOfTree              FunctionRealloc                                  
Geomean of preferred means:
   &lt;scaled-result&gt;                                  109.6649+-0.8579     ?    110.0916+-0.8314        ? might be 1.0039x slower</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1081808</commentid>
    <comment_count>10</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-31 15:48:01 -0700</bug_when>
    <thetext>I believe that the CompressionBench regression is because we were already having a bad rage-recompilation due to some weak references.  So this is a red herring.  We should fix that separately.

I fixed the other regressions.  We need to run strength reduction late to ensure that GetIndexedPropertyStorage gets folded to ConstantStoragePointer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1081817</commentid>
    <comment_count>11</comment_count>
      <attachid>249865</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-03-31 16:01:50 -0700</bug_when>
    <thetext>Created attachment 249865
the patch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1082107</commentid>
    <comment_count>12</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-04-01 14:46:43 -0700</bug_when>
    <thetext>Latest perf numbers:


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

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/pizlo/secondary/OpenSource/WebKitBuild/Release/jsc (r182200)
&quot;FunctionRealloc&quot; at /Volumes/Data/pizlo/quartary/OpenSource/WebKitBuild/Release/jsc (r182200)

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

                                                        TipOfTree              FunctionRealloc                                  
SunSpider:
   3d-cube                                            8.4810+-0.2016            8.4732+-0.1296        
   3d-morph                                          12.1388+-0.1951     !     12.4761+-0.1142        ! definitely 1.0278x slower
   3d-raytrace                                       11.3971+-0.2271     ?     11.4582+-0.2299        ?
   access-binary-trees                                3.8177+-0.0985     ?      3.8732+-0.1827        ? might be 1.0145x slower
   access-fannkuch                                   10.4670+-0.1228     ?     10.5421+-0.1770        ?
   access-nbody                                       5.5786+-0.1508     ?      5.5892+-0.1518        ?
   access-nsieve                                      5.6069+-0.1690            5.5050+-0.1952          might be 1.0185x faster
   bitops-3bit-bits-in-byte                           2.3797+-0.1142     ?      2.4126+-0.0752        ? might be 1.0138x slower
   bitops-bits-in-byte                                6.5447+-0.0950     ?      6.5991+-0.1082        ?
   bitops-bitwise-and                                 3.0582+-0.0865     ?      3.1058+-0.0797        ? might be 1.0156x slower
   bitops-nsieve-bits                                 6.9078+-0.1584            6.8429+-0.1447        
   controlflow-recursive                              3.5944+-0.1084            3.4936+-0.1484          might be 1.0288x faster
   crypto-aes                                         7.2669+-0.2349     ?      7.3394+-0.2256        ?
   crypto-md5                                         4.3189+-0.1658     ?      4.3491+-0.1976        ?
   crypto-sha1                                        4.3068+-0.2171            4.2981+-0.1929        
   date-format-tofte                                 17.6088+-0.7711     ?     17.6542+-0.6337        ?
   date-format-xparb                                 10.1322+-0.3880     ?     10.2145+-0.4346        ?
   math-cordic                                        5.7141+-0.1352            5.6290+-0.0937          might be 1.0151x faster
   math-partial-sums                                 11.7697+-0.2021     ?     11.9012+-0.1128        ? might be 1.0112x slower
   math-spectral-norm                                 3.5730+-0.1509            3.5647+-0.1088        
   regexp-dna                                        11.5015+-0.3987           11.4412+-0.3274        
   string-base64                                      7.9395+-0.1392            7.8960+-0.3815        
   string-fasta                                      13.1721+-0.3000           13.1628+-0.2633        
   string-tagcloud                                   18.6296+-0.5084           18.2605+-0.3327          might be 1.0202x faster
   string-unpack-code                                38.6478+-0.7940           37.8841+-0.6727          might be 1.0202x faster
   string-validate-input                              9.1630+-0.2202     ?      9.1967+-0.1833        ?

   &lt;arithmetic&gt;                                       9.3737+-0.0869            9.3524+-0.0714          might be 1.0023x faster

                                                        TipOfTree              FunctionRealloc                                  
LongSpider:
   3d-cube                                         1590.1569+-9.8988     !   1628.6880+-16.0210       ! definitely 1.0242x slower
   3d-morph                                        2002.7146+-7.3762     ?   2006.1272+-17.4664       ?
   3d-raytrace                                     1587.8490+-29.2992        1575.9705+-11.9158       
   access-binary-trees                             1905.9116+-20.4482        1904.8468+-13.9499       
   access-fannkuch                                  615.8153+-29.8431    ?    622.0608+-23.7807       ? might be 1.0101x slower
   access-nbody                                    1502.4249+-15.8854        1491.1864+-9.9597        
   access-nsieve                                   1758.1257+-10.4707    ?   1770.8966+-18.8340       ?
   bitops-3bit-bits-in-byte                          72.2614+-0.8734           72.1582+-0.5813        
   bitops-bits-in-byte                              401.1255+-4.5546          400.0387+-3.4656        
   bitops-nsieve-bits                              1472.2507+-20.1884        1462.2565+-11.6723       
   controlflow-recursive                           1087.1993+-8.3525         1075.4246+-8.2157          might be 1.0109x faster
   crypto-aes                                      1324.4575+-8.0747     ?   1332.2167+-8.3142        ?
   crypto-md5                                       999.7779+-11.3507         997.9005+-10.6537       
   crypto-sha1                                     1407.4612+-8.0650         1404.6551+-17.6433       
   date-format-tofte                               1522.4288+-13.6064    !   1562.5554+-19.4320       ! definitely 1.0264x slower
   date-format-xparb                               1405.8477+-28.7087    ?   1449.3708+-27.0644       ? might be 1.0310x slower
   math-cordic                                     1163.0284+-77.3048    ?   1213.1833+-5.4777        ? might be 1.0431x slower
   math-partial-sums                               1321.4050+-13.4235    ?   1345.5815+-14.2393       ? might be 1.0183x slower
   math-spectral-norm                              1226.3757+-13.9633    ?   1233.6867+-9.6120        ?
   string-base64                                    650.8695+-5.4045          650.8557+-4.0222        
   string-fasta                                     892.4399+-8.2187     ?    901.1303+-8.6010        ?
   string-tagcloud                                  446.6796+-6.3249          435.8852+-7.6501          might be 1.0248x faster

   &lt;geometric&gt;                                     1015.8707+-4.2799     ?   1021.3146+-2.3849        ? might be 1.0054x slower

                                                        TipOfTree              FunctionRealloc                                  
V8Spider:
   crypto                                           102.8811+-1.4076     ?    103.2911+-1.2926        ?
   deltablue                                        126.4406+-2.4481          123.9976+-4.2167          might be 1.0197x faster
   earley-boyer                                      82.5880+-0.6222           82.0009+-1.1918        
   raytrace                                          52.6703+-1.4138           52.3138+-1.7909        
   regexp                                           129.9740+-1.9519          128.4670+-0.7258          might be 1.0117x faster
   richards                                         132.3771+-4.8818     ?    133.1882+-2.7955        ?
   splay                                             65.4045+-2.8652           64.4268+-4.9704          might be 1.0152x faster

   &lt;geometric&gt;                                       93.7320+-0.4995           93.0464+-1.0792          might be 1.0074x faster

                                                        TipOfTree              FunctionRealloc                                  
Octane:
   encrypt                                           0.47781+-0.01484          0.47385+-0.01162       
   decrypt                                           8.42039+-0.10206    ?     8.44427+-0.08932       ?
   deltablue                                x2       0.39722+-0.00520    ?     0.39876+-0.00519       ?
   earley                                            1.10154+-0.01648    ?     1.12632+-0.01318       ? might be 1.0225x slower
   boyer                                            14.28735+-0.15547    ?    14.31238+-0.10447       ?
   navier-stokes                            x2       7.46542+-0.08310          7.38812+-0.02874         might be 1.0105x faster
   raytrace                                 x2       2.59856+-0.04965          2.54591+-0.08113         might be 1.0207x faster
   richards                                 x2       0.24333+-0.00303    ?     0.24343+-0.00314       ?
   splay                                    x2       0.66503+-0.01520    ?     0.67626+-0.01363       ? might be 1.0169x slower
   regexp                                   x2      64.25706+-1.46037         64.22079+-0.87271       
   pdfjs                                    x2      90.13653+-0.83521    ?    91.25179+-0.98928       ? might be 1.0124x slower
   mandreel                                 x2     106.54531+-1.63132    ?   106.85910+-1.38959       ?
   gbemu                                    x2      94.31471+-3.43407         93.48742+-1.67201       
   closure                                           0.99443+-0.00899    ?     1.00298+-0.01273       ?
   jquery                                           14.13406+-3.71944         12.68464+-0.17084         might be 1.1143x faster
   box2d                                    x2      26.84720+-0.32516    ^    26.01378+-0.23466       ^ definitely 1.0320x faster
   zlib                                     x2     731.52295+-8.73186    ^   693.89528+-9.38646       ^ definitely 1.0542x faster
   typescript                               x2    1431.76099+-18.30633   ?  1442.10099+-16.90197      ?

   &lt;geometric&gt;                                      13.14068+-0.10837         13.04385+-0.06096         might be 1.0074x faster

                                                        TipOfTree              FunctionRealloc                                  
Kraken:
   ai-astar                                          829.929+-5.855      ?     834.398+-7.019         ?
   audio-beat-detection                              216.717+-5.053      ?     217.840+-6.128         ?
   audio-dft                                         305.650+-23.639     ?     325.836+-26.220        ? might be 1.0660x slower
   audio-fft                                         160.772+-2.898      ?     161.230+-1.588         ?
   audio-oscillator                                  385.197+-2.677            384.154+-4.338         
   imaging-darkroom                                  177.239+-1.475      ?     177.768+-1.236         ?
   imaging-desaturate                                148.185+-1.274            147.704+-0.669         
   imaging-gaussian-blur                             223.501+-2.043            222.010+-2.916         
   json-parse-financial                               94.679+-1.074      ?      94.982+-2.406         ?
   json-stringify-tinderbox                          108.179+-1.348      !     116.289+-5.440         ! definitely 1.0750x slower
   stanford-crypto-aes                               123.731+-2.408            121.056+-1.357           might be 1.0221x faster
   stanford-crypto-ccm                               105.156+-13.043     ?     107.447+-13.094        ? might be 1.0218x slower
   stanford-crypto-pbkdf2                            311.438+-2.290            309.873+-4.378         
   stanford-crypto-sha256-iterative                   97.113+-1.222      ?      97.845+-1.708         ?

   &lt;arithmetic&gt;                                      234.820+-2.559      ?     237.031+-3.088         ? might be 1.0094x slower

                                                        TipOfTree              FunctionRealloc                                  
JSRegress:
   abs-boolean                                        4.6372+-0.1259     ?      4.7638+-0.0884        ? might be 1.0273x slower
   adapt-to-double-divide                            19.9825+-0.2952           19.8339+-0.2262        
   aliased-arguments-getbyval                         1.7673+-0.0818     !      1.9916+-0.1361        ! definitely 1.1269x slower
   allocate-big-object                                4.5236+-0.4153            4.5191+-0.3605        
   arguments-named-and-reflective                    20.2916+-0.5043     ?     20.5632+-0.3065        ? might be 1.0134x slower
   arguments-out-of-bounds                           21.8207+-0.3953           21.5380+-0.3002          might be 1.0131x faster
   arguments-strict-mode                             18.5219+-0.6590           18.5168+-0.2517        
   arguments                                         16.3992+-0.1757     ?     16.4232+-0.3912        ?
   arity-mismatch-inlining                            1.3746+-0.0841            1.3198+-0.1411          might be 1.0415x faster
   array-access-polymorphic-structure                14.5602+-0.1622     ^     12.9334+-0.3096        ^ definitely 1.1258x faster
   array-nonarray-polymorhpic-access                 69.2900+-3.0440     ?     69.3665+-3.0998        ?
   array-prototype-every                            188.9119+-2.4220     ?    193.6886+-3.7007        ? might be 1.0253x slower
   array-prototype-forEach                          186.4793+-3.0560     ?    188.5688+-1.7800        ? might be 1.0112x slower
   array-prototype-map                              204.3593+-1.0954     ?    214.3596+-17.0101       ? might be 1.0489x slower
   array-prototype-some                             187.4749+-1.6526     ?    191.7623+-4.9094        ? might be 1.0229x slower
   array-splice-contiguous                           89.2327+-1.1187           87.8767+-1.2159          might be 1.0154x faster
   array-with-double-add                              7.6300+-0.1700            7.6036+-0.0887        
   array-with-double-increment                        5.6619+-0.1618            5.6455+-0.0905        
   array-with-double-mul-add                         11.9068+-0.1280     ?     11.9188+-0.2289        ?
   array-with-double-sum                              5.5288+-0.1122            5.5083+-0.1187        
   array-with-int32-add-sub                          13.4939+-0.1411           13.4639+-0.1336        
   array-with-int32-or-double-sum                     5.3707+-0.1237     ?      5.3938+-0.1268        ?
   ArrayBuffer-DataView-alloc-large-long-lived   
                                                     68.1457+-1.3899     ?     69.8191+-0.8247        ? might be 1.0246x slower
   ArrayBuffer-DataView-alloc-long-lived             30.3087+-1.8649     ?     30.8167+-1.1397        ? might be 1.0168x slower
   ArrayBuffer-Int32Array-byteOffset                  5.3802+-0.0606     ?      5.3955+-0.1678        ?
   ArrayBuffer-Int8Array-alloc-large-long-lived   
                                                     71.1059+-2.0208     ?     72.8843+-2.8889        ? might be 1.0250x slower
   ArrayBuffer-Int8Array-alloc-long-lived-buffer   
                                                     50.0404+-3.7933           49.2636+-2.6133          might be 1.0158x faster
   ArrayBuffer-Int8Array-alloc-long-lived            27.1328+-0.6367     ?     27.6198+-1.5397        ? might be 1.0179x slower
   ArrayBuffer-Int8Array-alloc                       22.4934+-0.9702     ?     24.1892+-2.6156        ? might be 1.0754x slower
   asmjs_bool_bug                                    13.4961+-0.2351     ^     12.9948+-0.1355        ^ definitely 1.0386x faster
   assign-custom-setter-polymorphic                   6.3818+-0.1343            6.1565+-0.1140          might be 1.0366x faster
   assign-custom-setter                               8.4947+-0.2133            8.3595+-0.1698          might be 1.0162x faster
   basic-set                                         15.8360+-0.7404     ?     15.9752+-0.6336        ?
   big-int-mul                                        7.8745+-0.0586     ?      7.9682+-0.1643        ? might be 1.0119x slower
   boolean-test                                       4.9748+-0.0520            4.9549+-0.0561        
   branch-fold                                        5.3802+-0.1496            5.3325+-0.1120        
   by-val-generic                                    16.7179+-1.8055           16.3497+-0.3780          might be 1.0225x faster
   call-spread-apply                                 61.8566+-3.0846           61.1526+-1.3215          might be 1.0115x faster
   call-spread-call                                  49.3092+-0.4431     ?     50.0270+-0.5757        ? might be 1.0146x slower
   captured-assignments                               0.8538+-0.0857     ?      0.8712+-0.0613        ? might be 1.0203x slower
   cast-int-to-double                                 8.7362+-0.1623     ?      8.8175+-0.1564        ?
   cell-argument                                     12.2745+-0.2501     ?     12.6148+-0.1795        ? might be 1.0277x slower
   cfg-simplify                                       4.0476+-0.1407            4.0116+-0.1127        
   chain-getter-access                               17.0269+-0.4141           16.9087+-0.2847        
   cmpeq-obj-to-obj-other                            17.3100+-0.3928           16.7251+-0.2809          might be 1.0350x faster
   constant-test                                      8.2809+-0.1057     ?      8.3166+-0.1129        ?
   create-lots-of-functions                          41.8090+-0.5457           41.6048+-1.6994        
   DataView-custom-properties                        78.4391+-3.5927     ?     78.6688+-1.8705        ?
   deconstructing-parameters-overridden-by-function   
                                                      0.8975+-0.0946            0.8899+-0.0782        
   delay-tear-off-arguments-strictmode               27.7898+-0.2365           27.7741+-0.2850        
   deltablue-varargs                                366.5708+-3.8329          361.7295+-2.1793          might be 1.0134x faster
   destructuring-arguments                           27.8071+-0.1289     ?     28.0787+-0.1919        ?
   destructuring-swap                                 8.5881+-0.1470            8.5191+-0.1542        
   direct-arguments-getbyval                          1.8448+-0.2143     ?      1.9458+-0.2518        ? might be 1.0547x slower
   div-boolean-double                                 5.9832+-0.1617     ?      6.0423+-0.1020        ?
   div-boolean                                       10.3437+-0.1096     ?     10.3875+-0.1868        ?
   double-get-by-val-out-of-bounds                    8.3682+-0.2938     ?      8.6376+-0.1440        ? might be 1.0322x slower
   double-pollution-getbyval                         10.3070+-0.1039           10.2623+-0.1009        
   double-pollution-putbyoffset                       8.3718+-0.1686            8.2369+-0.2534          might be 1.0164x faster
   double-to-int32-typed-array-no-inline              3.7122+-0.0852     ?      3.8353+-0.1069        ? might be 1.0331x slower
   double-to-int32-typed-array                        3.2496+-0.1074     ?      3.3577+-0.1150        ? might be 1.0333x slower
   double-to-uint32-typed-array-no-inline             3.8170+-0.1068     ?      3.9489+-0.1584        ? might be 1.0345x slower
   double-to-uint32-typed-array                       3.3094+-0.1271     ?      3.3969+-0.1449        ? might be 1.0264x slower
   elidable-new-object-dag                           65.3667+-0.8646     ?     65.3841+-0.8496        ?
   elidable-new-object-roflcopter                    72.3917+-0.7270     ?     72.7797+-0.8268        ?
   elidable-new-object-then-call                     62.4799+-0.7429           61.8256+-0.5751          might be 1.0106x faster
   elidable-new-object-tree                          72.1904+-1.1482     ?     73.0547+-0.8683        ? might be 1.0120x slower
   empty-string-plus-int                             10.1538+-0.1839     !     10.5570+-0.1847        ! definitely 1.0397x slower
   emscripten-cube2hash                              57.7673+-0.9597           57.2740+-1.0135        
   exit-length-on-plain-object                       31.8496+-1.0197           31.6769+-3.2369        
   external-arguments-getbyval                        2.1076+-0.1099            2.1009+-0.1574        
   external-arguments-putbyval                        4.0160+-0.1408     ?      4.1803+-0.1359        ? might be 1.0409x slower
   fixed-typed-array-storage-var-index                1.9669+-0.0581     !      2.1321+-0.0412        ! definitely 1.0840x slower
   fixed-typed-array-storage                          1.4421+-0.1518     ?      1.4993+-0.0846        ? might be 1.0396x slower
   Float32Array-matrix-mult                           8.3491+-0.1332            8.3363+-0.2336        
   Float32Array-to-Float64Array-set                 120.2933+-2.4242          120.1361+-1.0831        
   Float64Array-alloc-long-lived                    118.2761+-1.0303     ^    115.0354+-1.3362        ^ definitely 1.0282x faster
   Float64Array-to-Int16Array-set                   147.3549+-1.3292     ?    151.5083+-5.5450        ? might be 1.0282x slower
   fold-double-to-int                                29.1365+-0.5560     ^     26.0089+-0.2821        ^ definitely 1.1203x faster
   fold-get-by-id-to-multi-get-by-offset-rare-int   
                                                     14.6176+-0.3314     ?     15.2863+-0.4227        ? might be 1.0458x slower
   fold-get-by-id-to-multi-get-by-offset             12.6366+-0.3634     ?     12.8507+-0.3584        ? might be 1.0169x slower
   fold-multi-get-by-offset-to-get-by-offset   
                                                     11.5122+-0.8367           11.3775+-0.8546          might be 1.0118x faster
   fold-multi-get-by-offset-to-poly-get-by-offset   
                                                     11.9398+-0.3632           11.9010+-0.3681        
   fold-multi-put-by-offset-to-poly-put-by-offset   
                                                     10.4482+-1.0406           10.3116+-0.8087          might be 1.0132x faster
   fold-multi-put-by-offset-to-put-by-offset   
                                                      8.3604+-0.8719     ?      8.8287+-0.7708        ? might be 1.0560x slower
   fold-multi-put-by-offset-to-replace-or-transition-put-by-offset   
                                                     16.6799+-0.9914           16.1919+-1.2984          might be 1.0301x faster
   fold-put-by-id-to-multi-put-by-offset             11.5290+-0.6581     ?     11.8126+-0.7568        ? might be 1.0246x slower
   fold-put-structure                                 8.7214+-0.6114     ?      8.9083+-0.8191        ? might be 1.0214x slower
   for-of-iterate-array-entries                       8.6837+-0.1654     ?      8.7337+-0.1135        ?
   for-of-iterate-array-keys                          7.2896+-0.2281            7.2611+-0.2046        
   for-of-iterate-array-values                        6.9913+-0.0982     ?      7.0334+-0.1715        ?
   fround                                            26.4005+-0.3801     ?     26.7940+-0.5490        ? might be 1.0149x slower
   ftl-library-inlining-dataview                    148.9085+-1.4847     ?    149.1331+-3.5390        ?
   ftl-library-inlining                             136.2604+-3.7671          135.5728+-2.3505        
   function-dot-apply                                 3.6984+-0.1377     ?      3.8004+-0.1058        ? might be 1.0276x slower
   function-test                                      5.5102+-0.1849            5.3671+-0.0860          might be 1.0267x faster
   function-with-eval                               174.6312+-1.9965     ?    175.0583+-2.2060        ?
   gcse-poly-get-less-obvious                        37.3602+-0.6146           37.0553+-0.5090        
   gcse-poly-get                                     37.4473+-0.7193           37.2612+-0.5492        
   gcse                                               9.3502+-0.1681     ?      9.5082+-0.1373        ? might be 1.0169x slower
   get-by-id-bimorphic-check-structure-elimination-simple   
                                                      4.1667+-0.1306            4.1512+-0.0899        
   get-by-id-bimorphic-check-structure-elimination   
                                                     12.4229+-0.1872     ?     12.5432+-0.2446        ?
   get-by-id-chain-from-try-block                    14.1735+-0.1919           14.1320+-0.1747        
   get-by-id-check-structure-elimination             11.0828+-0.0993     ?     11.2359+-0.1233        ? might be 1.0138x slower
   get-by-id-proto-or-self                           33.5221+-3.3577           32.3248+-2.7986          might be 1.0370x faster
   get-by-id-quadmorphic-check-structure-elimination-simple   
                                                      5.3187+-0.1135            5.2923+-0.0665        
   get-by-id-self-or-proto                           32.7278+-2.8678     ?     33.3554+-3.1478        ? might be 1.0192x slower
   get-by-val-out-of-bounds                           8.0638+-0.1936     ?      8.1963+-0.2155        ? might be 1.0164x slower
   get_callee_monomorphic                             6.5424+-0.2295            6.2639+-0.4453          might be 1.0445x faster
   get_callee_polymorphic                             5.7527+-0.2408     ?      5.8416+-0.2076        ? might be 1.0155x slower
   getter-no-activation                               6.3410+-0.0669     ?      6.5377+-0.1459        ? might be 1.0310x slower
   getter-richards                                  176.7166+-3.0653          176.4984+-3.8682        
   getter                                            10.1573+-0.1994     ^      9.6432+-0.1948        ^ definitely 1.0533x faster
   global-var-const-infer-fire-from-opt               1.7760+-0.2435            1.7373+-0.2085          might be 1.0223x faster
   global-var-const-infer                             1.7332+-0.1211            1.6862+-0.1399          might be 1.0279x faster
   HashMap-put-get-iterate-keys                      50.0980+-0.5020     ?     50.1169+-0.5774        ?
   HashMap-put-get-iterate                           49.8684+-0.8090           49.6967+-1.1841        
   HashMap-string-put-get-iterate                    52.6733+-2.3512           50.3297+-0.7130          might be 1.0466x faster
   hoist-make-rope                                   18.1472+-0.8036           17.3600+-1.1625          might be 1.0453x faster
   hoist-poly-check-structure-effectful-loop   
                                                      9.7716+-0.1461            9.7013+-0.1772        
   hoist-poly-check-structure                         6.4919+-0.1409     ?      6.5953+-0.1482        ? might be 1.0159x slower
   imul-double-only                                  12.8941+-1.1252     ?     13.5534+-1.6023        ? might be 1.0511x slower
   imul-int-only                                     14.7253+-0.0843           14.6727+-0.4274        
   imul-mixed                                        12.7329+-0.6915           12.2440+-0.6065          might be 1.0399x faster
   in-four-cases                                     35.9988+-0.6766           35.8795+-0.4670        
   in-one-case-false                                 18.9905+-0.3746           18.9587+-0.2044        
   in-one-case-true                                  18.9263+-0.3610     ?     18.9657+-0.3272        ?
   in-two-cases                                      19.5633+-0.1760     ?     19.5686+-0.2553        ?
   indexed-properties-in-objects                      4.6455+-0.1189     ?      4.8112+-0.0514        ? might be 1.0357x slower
   infer-closure-const-then-mov-no-inline             6.1092+-0.0947     !      6.6040+-0.0760        ! definitely 1.0810x slower
   infer-closure-const-then-mov                      26.3870+-0.7470     !     27.5795+-0.3128        ! definitely 1.0452x slower
   infer-closure-const-then-put-to-scope-no-inline   
                                                     19.3095+-0.3852     !     23.2356+-0.3130        ! definitely 1.2033x slower
   infer-closure-const-then-put-to-scope             31.2489+-0.5619     !     32.9851+-0.2978        ! definitely 1.0556x slower
   infer-closure-const-then-reenter-no-inline   
                                                     92.5141+-1.4086     !    108.8505+-1.2300        ! definitely 1.1766x slower
   infer-closure-const-then-reenter                 236.8604+-6.5741     ^     31.1582+-0.2091        ^ definitely 7.6019x faster
   infer-constant-global-property                    39.5734+-0.4515           39.3753+-0.3443        
   infer-constant-property                            3.7166+-0.0658            3.7120+-0.1221        
   infer-one-time-closure-ten-vars                   18.0313+-0.2373           17.7373+-0.2708          might be 1.0166x faster
   infer-one-time-closure-two-vars                   17.2639+-0.2185           17.1375+-0.3049        
   infer-one-time-closure                            17.0057+-0.1600     ?     17.1001+-0.3862        ?
   infer-one-time-deep-closure                       30.1902+-0.3151     ?     30.2829+-0.4074        ?
   inline-arguments-access                            7.0894+-0.1696     ?      7.3212+-0.2613        ? might be 1.0327x slower
   inline-arguments-aliased-access                    7.1412+-0.2026     ?      7.2084+-0.1055        ?
   inline-arguments-local-escape                      7.3125+-0.2066     ?      7.5053+-0.0561        ? might be 1.0264x slower
   inline-get-scoped-var                              6.0421+-0.1398     !      6.3124+-0.1138        ! definitely 1.0447x slower
   inlined-put-by-id-transition                      18.0750+-0.3434           17.8066+-0.1391          might be 1.0151x faster
   int-or-other-abs-then-get-by-val                   9.6622+-0.0685            9.6152+-0.0830        
   int-or-other-abs-zero-then-get-by-val             34.6544+-0.4110     ?     34.9651+-0.5338        ?
   int-or-other-add-then-get-by-val                   8.7907+-0.1282            8.7207+-0.1241        
   int-or-other-add                                   9.0822+-0.1876     ?      9.4688+-0.2067        ? might be 1.0426x slower
   int-or-other-div-then-get-by-val                   6.7786+-0.1137            6.7284+-0.1957        
   int-or-other-max-then-get-by-val                   7.4323+-0.1825     !      8.4701+-0.1942        ! definitely 1.1396x slower
   int-or-other-min-then-get-by-val                   7.4322+-0.1881     ?      7.5576+-0.0934        ? might be 1.0169x slower
   int-or-other-mod-then-get-by-val                   6.2262+-0.1026     ?      6.3436+-0.1092        ? might be 1.0189x slower
   int-or-other-mul-then-get-by-val                   6.8903+-0.1049            6.7707+-0.2051          might be 1.0177x faster
   int-or-other-neg-then-get-by-val                   8.3860+-0.1769            8.3529+-0.1944        
   int-or-other-neg-zero-then-get-by-val             34.4082+-0.3267     ?     34.9393+-0.3330        ? might be 1.0154x slower
   int-or-other-sub-then-get-by-val                   9.2271+-0.1540     ^      8.9202+-0.0742        ^ definitely 1.0344x faster
   int-or-other-sub                                   5.8077+-0.1196     !      6.8139+-0.2399        ! definitely 1.1733x slower
   int-overflow-local                                 8.1946+-0.1155     ^      7.8297+-0.0660        ^ definitely 1.0466x faster
   Int16Array-alloc-long-lived                       82.6193+-0.5185           81.5149+-0.9530          might be 1.0135x faster
   Int16Array-bubble-sort-with-byteLength            51.9357+-0.7168     ^     49.4991+-0.6169        ^ definitely 1.0492x faster
   Int16Array-bubble-sort                            51.0082+-0.4468     ^     49.7795+-0.6038        ^ definitely 1.0247x faster
   Int16Array-load-int-mul                            2.3557+-0.0915     ?      2.3997+-0.1075        ? might be 1.0187x slower
   Int16Array-to-Int32Array-set                     116.4325+-1.9561          115.3062+-0.9175        
   Int32Array-alloc-large                            38.2351+-1.0482     ?     38.7608+-1.1816        ? might be 1.0137x slower
   Int32Array-alloc-long-lived                       92.4040+-1.1904     ?     92.5303+-1.8599        ?
   Int32Array-alloc                                   5.4092+-0.1471     ?      5.4372+-0.1305        ?
   Int32Array-Int8Array-view-alloc                   14.1265+-0.7158     ?     14.8606+-0.7761        ? might be 1.0520x slower
   int52-spill                                       12.5463+-0.2710           12.1144+-0.3065          might be 1.0357x faster
   Int8Array-alloc-long-lived                        75.2791+-0.3760           74.2340+-0.7447          might be 1.0141x faster
   Int8Array-load-with-byteLength                     5.1659+-0.0703     ?      5.2334+-0.1120        ? might be 1.0131x slower
   Int8Array-load                                     5.3096+-0.0715            5.2802+-0.1269        
   integer-divide                                    19.7816+-0.2810           19.7015+-0.3242        
   integer-modulo                                     3.7594+-0.2221            3.6230+-0.1634          might be 1.0376x faster
   large-int-captured                                10.3087+-0.2176           10.1399+-0.2703          might be 1.0166x faster
   large-int-neg                                     31.0345+-0.3633           30.9097+-0.5126        
   large-int                                         27.7433+-0.2488     ?     27.9448+-0.4867        ?
   logical-not                                        8.4107+-0.1273            8.1319+-0.1792          might be 1.0343x faster
   lots-of-fields                                    23.8121+-0.2324           23.4897+-0.3222          might be 1.0137x faster
   make-indexed-storage                               5.6484+-0.1775            5.6114+-0.3052        
   make-rope-cse                                      7.5108+-0.2069            7.3688+-0.1714          might be 1.0193x faster
   marsaglia-larger-ints                             67.1167+-0.5147     ?     67.4016+-0.9295        ?
   marsaglia-osr-entry                               35.0520+-0.5643     ?     35.2349+-0.6770        ?
   max-boolean                                        4.0460+-0.1713     ?      4.1387+-0.2301        ? might be 1.0229x slower
   method-on-number                                  34.4795+-0.3560           34.0663+-0.2046          might be 1.0121x faster
   min-boolean                                        3.8215+-0.0703     ?      4.3843+-0.6749        ? might be 1.1473x slower
   minus-boolean-double                               4.4462+-0.0787     ?      4.4812+-0.1234        ?
   minus-boolean                                      3.7967+-0.0885            3.7502+-0.1091          might be 1.0124x faster
   misc-strict-eq                                    72.5022+-1.1873     ?     72.8765+-1.9463        ?
   mod-boolean-double                                14.5662+-0.2512           14.5234+-0.1763        
   mod-boolean                                        9.3221+-0.1531     ?      9.4073+-0.1700        ?
   mul-boolean-double                                 5.0779+-0.1309            5.0721+-0.1080        
   mul-boolean                                        4.0280+-0.0940     ?      4.0941+-0.0710        ? might be 1.0164x slower
   neg-boolean                                        4.6706+-0.0830     ?      4.7434+-0.1553        ? might be 1.0156x slower
   negative-zero-divide                               0.5830+-0.0704     ?      0.6000+-0.0663        ? might be 1.0292x slower
   negative-zero-modulo                               0.6558+-0.0649     ?      0.6691+-0.0821        ? might be 1.0204x slower
   negative-zero-negate                               0.5862+-0.0723            0.5860+-0.0756        
   nested-function-parsing                           72.7106+-0.9411     !     74.8148+-0.5389        ! definitely 1.0289x slower
   new-array-buffer-dead                              4.0808+-0.1568     ?      4.3743+-0.2097        ? might be 1.0719x slower
   new-array-buffer-push                             10.5935+-0.1473           10.5618+-0.1996        
   new-array-dead                                    17.1913+-0.4906           17.1818+-0.3454        
   new-array-push                                     6.8381+-0.3412     ?      6.9331+-0.4804        ? might be 1.0139x slower
   no-inline-constructor                            182.4877+-2.8688     ?    182.7014+-2.3212        ?
   number-test                                        4.8836+-0.0891     ?      4.9356+-0.0777        ? might be 1.0106x slower
   object-closure-call                               10.6036+-0.2423           10.5870+-0.2489        
   object-test                                        5.3441+-0.1452            5.2143+-0.0914          might be 1.0249x faster
   obvious-sink-pathology-taken                     221.1471+-2.0352          220.3617+-1.4686        
   obvious-sink-pathology                           208.9010+-4.2433          207.1008+-4.7430        
   obviously-elidable-new-object                     56.7538+-2.4072     ?     57.2893+-1.0050        ?
   plus-boolean-arith                                 4.1536+-0.1203            4.0943+-0.1095          might be 1.0145x faster
   plus-boolean-double                                4.5243+-0.0976            4.4610+-0.0866          might be 1.0142x faster
   plus-boolean                                       3.7138+-0.1452            3.6554+-0.0620          might be 1.0160x faster
   poly-chain-access-different-prototypes-simple   
                                                      5.3973+-0.1752            5.2826+-0.0916          might be 1.0217x faster
   poly-chain-access-different-prototypes             4.0162+-0.0481     ?      4.0165+-0.0692        ?
   poly-chain-access-simpler                          5.2909+-0.1136     ?      5.3205+-0.0742        ?
   poly-chain-access                                  4.0023+-0.1131            3.9496+-0.1124          might be 1.0134x faster
   poly-stricteq                                    101.9936+-2.2821     ?    102.7776+-0.9535        ?
   polymorphic-array-call                             2.7008+-0.2202            2.4980+-0.2858          might be 1.0812x faster
   polymorphic-get-by-id                              5.3763+-0.1344     ?      5.3870+-0.1336        ?
   polymorphic-put-by-id                             48.1921+-4.9036     ?     49.2382+-3.9072        ? might be 1.0217x slower
   polymorphic-structure                             31.1222+-0.8660           30.7380+-0.6559          might be 1.0125x faster
   polyvariant-monomorphic-get-by-id                 17.7556+-0.1641           17.5857+-0.2170        
   proto-getter-access                               17.0512+-0.3949     ?     17.1710+-0.3316        ?
   put-by-id-replace-and-transition                  15.0740+-0.2256           14.9371+-0.2162        
   put-by-id-slightly-polymorphic                     4.1481+-0.1023            4.1259+-0.0682        
   put-by-id                                         20.7929+-0.5375     ?     21.2352+-0.5364        ? might be 1.0213x slower
   put-by-val-direct                                  0.9870+-0.0132     !      1.1253+-0.0880        ! definitely 1.1401x slower
   put-by-val-large-index-blank-indexing-type   
                                                     11.0206+-0.3753           11.0180+-0.2295        
   put-by-val-machine-int                             4.5713+-0.2182     ?      4.5990+-0.0696        ?
   rare-osr-exit-on-local                            25.9672+-0.1732     ?     26.0394+-0.2222        ?
   register-pressure-from-osr                        39.1909+-0.1581     !     40.1932+-0.5707        ! definitely 1.0256x slower
   setter                                             7.7785+-0.1390     ?      7.8680+-0.1151        ? might be 1.0115x slower
   simple-activation-demo                            41.3638+-0.5648     ?     41.7620+-0.3541        ?
   simple-getter-access                              22.6350+-0.6422           22.2850+-0.5462          might be 1.0157x faster
   simple-poly-call-nested                           13.8516+-0.3141           13.7382+-0.5731        
   simple-poly-call                                   2.2760+-0.1396            2.2244+-0.0600          might be 1.0232x faster
   sin-boolean                                       30.0334+-1.0078           30.0226+-0.7781        
   singleton-scope                                  129.8584+-1.5479     ?    130.1784+-1.4936        ?
   sinkable-new-object-dag                          119.6704+-1.3304          116.6926+-5.5818          might be 1.0255x faster
   sinkable-new-object-taken                         93.1318+-1.3153           91.9278+-0.8242          might be 1.0131x faster
   sinkable-new-object                               63.2611+-1.0232           63.1046+-1.1282        
   slow-array-profile-convergence                     5.1769+-0.1649     ?      5.3076+-0.2221        ? might be 1.0252x slower
   slow-convergence                                   6.0119+-0.0724     ^      4.7785+-0.1149        ^ definitely 1.2581x faster
   sparse-conditional                                 1.8597+-0.0745     ?      1.9451+-0.0703        ? might be 1.0459x slower
   splice-to-remove                                  33.5450+-0.3225     ?     34.8856+-2.7404        ? might be 1.0400x slower
   string-char-code-at                               29.7480+-0.3641     !     30.6230+-0.3865        ! definitely 1.0294x slower
   string-concat-object                               3.9719+-0.3222            3.9559+-0.2861        
   string-concat-pair-object                          3.9095+-0.2550     ?      3.9724+-0.3149        ? might be 1.0161x slower
   string-concat-pair-simple                         20.1566+-0.3627           20.0327+-0.1462        
   string-concat-simple                              21.1319+-0.5068           20.8547+-0.4359          might be 1.0133x faster
   string-cons-repeat                                12.9817+-0.2427     ?     12.9977+-0.3710        ?
   string-cons-tower                                 13.1386+-0.2451     ?     13.1702+-0.3352        ?
   string-equality                                   32.8647+-0.3635     ?     33.0878+-0.1265        ?
   string-get-by-val-big-char                        13.6868+-0.2376     ?     13.8095+-0.2041        ?
   string-get-by-val-out-of-bounds-insane             7.9911+-0.0935     !      8.2723+-0.1450        ! definitely 1.0352x slower
   string-get-by-val-out-of-bounds                    9.7182+-0.2431     ?      9.8190+-0.1035        ? might be 1.0104x slower
   string-get-by-val                                  6.8730+-0.0967            6.8180+-0.1469        
   string-hash                                        3.6246+-0.1083     ?      3.6258+-0.1198        ?
   string-long-ident-equality                        26.6435+-0.2455     !     27.4686+-0.2429        ! definitely 1.0310x slower
   string-out-of-bounds                              21.8202+-0.2930     ?     21.9139+-0.3522        ?
   string-repeat-arith                               62.2993+-0.3713     !     68.6299+-0.2938        ! definitely 1.1016x slower
   string-sub                                       120.9099+-1.9737          118.9036+-1.6034          might be 1.0169x faster
   string-test                                        4.9242+-0.1972            4.7723+-0.0964          might be 1.0318x faster
   string-var-equality                               61.4928+-0.8376     !     63.8375+-0.8524        ! definitely 1.0381x slower
   structure-hoist-over-transitions                   4.1767+-0.1524     ?      4.1901+-0.2087        ?
   substring-concat-weird                            75.5112+-1.0627           75.1747+-0.9039        
   substring-concat                                  79.3778+-0.6537     ?     79.8456+-0.9833        ?
   substring                                         91.1971+-0.5745     ?     91.2722+-0.7358        ?
   switch-char-constant                               3.7733+-0.1198     ?      3.8507+-0.1095        ? might be 1.0205x slower
   switch-char                                       11.5227+-0.3795     ?     11.5981+-0.4664        ?
   switch-constant                                   14.3551+-0.8554           13.8326+-0.6792          might be 1.0378x faster
   switch-string-basic-big-var                       31.0388+-0.6432     !     32.9944+-0.2559        ! definitely 1.0630x slower
   switch-string-basic-big                           24.3395+-1.2638     ?     25.2662+-1.5895        ? might be 1.0381x slower
   switch-string-basic-var                           33.3258+-1.8387           32.9588+-0.2273          might be 1.0111x faster
   switch-string-basic                               23.5888+-1.5529     ?     26.3652+-2.5347        ? might be 1.1177x slower
   switch-string-big-length-tower-var                30.6675+-0.4558     ?     30.9092+-0.3109        ?
   switch-string-length-tower-var                    26.2149+-0.4051     ?     26.3083+-0.3444        ?
   switch-string-length-tower                        21.9967+-1.2382           20.9017+-0.2629          might be 1.0524x faster
   switch-string-short                               20.7013+-0.3406     ?     20.8234+-0.1648        ?
   switch                                            19.6932+-0.4004           19.4009+-0.4384          might be 1.0151x faster
   tear-off-arguments-simple                          5.5334+-0.1674            5.3845+-0.2102          might be 1.0276x faster
   tear-off-arguments                                 8.0594+-0.3016            8.0449+-0.1589        
   temporal-structure                                19.9373+-0.2048     ?     20.1066+-0.1977        ?
   to-int32-boolean                                  25.3206+-0.3265     ?     25.5153+-0.2054        ?
   try-catch-get-by-val-cloned-arguments             28.4725+-0.4571     ?     28.7288+-0.8583        ?
   try-catch-get-by-val-direct-arguments             11.0622+-0.3328     ?     11.0740+-0.2457        ?
   try-catch-get-by-val-scoped-arguments             14.1603+-0.6126           13.5814+-0.3222          might be 1.0426x faster
   undefined-property-access                        590.8569+-3.2191     ^    543.6483+-4.0454        ^ definitely 1.0868x faster
   undefined-test                                     5.1136+-0.1049     ?      5.1878+-0.1633        ? might be 1.0145x slower
   unprofiled-licm                                   35.3812+-0.9065           35.3144+-0.4174        
   varargs-call                                      25.3518+-0.4672     ?     26.2458+-0.4407        ? might be 1.0353x slower
   varargs-construct-inline                          38.4165+-0.4056     ?     39.1309+-0.5410        ? might be 1.0186x slower
   varargs-construct                                 58.4938+-0.6851     !     59.8538+-0.5924        ! definitely 1.0233x slower
   varargs-inline                                    15.6162+-0.1483     !     17.3502+-0.2058        ! definitely 1.1110x slower
   varargs-strict-mode                               18.3553+-0.3675     !     19.7152+-0.2157        ! definitely 1.0741x slower
   varargs                                           17.8351+-0.1403     !     19.5759+-0.1199        ! definitely 1.0976x slower
   weird-inlining-const-prop                          3.7981+-0.1105            3.7394+-0.2096          might be 1.0157x faster

   &lt;geometric&gt;                                       14.8229+-0.0281           14.8109+-0.0425          might be 1.0008x faster

                                                        TipOfTree              FunctionRealloc                                  
AsmBench:
   bigfib.cpp                                       890.3599+-8.2649     !    929.6189+-15.7229       ! definitely 1.0441x slower
   cray.c                                           870.2829+-7.3294     !    935.6772+-5.6458        ! definitely 1.0751x slower
   dry.c                                           1031.7040+-30.0777        1003.2992+-27.5600         might be 1.0283x faster
   FloatMM.c                                       1314.9526+-9.2808     !   1355.8177+-7.9437        ! definitely 1.0311x slower
   gcc-loops.cpp                                   8320.4091+-54.6634        8306.8607+-30.7496       
   n-body.c                                        2476.7920+-16.1929        2472.5660+-13.9471       
   Quicksort.c                                      724.7983+-5.9733     ^    715.4457+-3.1240        ^ definitely 1.0131x faster
   stepanov_container.cpp                          6467.5629+-150.3867   ?   6547.4906+-116.9477      ? might be 1.0124x slower
   Towers.c                                         613.9661+-3.9391     ^    576.1823+-7.4044        ^ definitely 1.0656x faster

   &lt;geometric&gt;                                     1582.6853+-5.4215     ?   1591.6498+-8.4391        ? might be 1.0057x slower

                                                        TipOfTree              FunctionRealloc                                  
CompressionBench:
   huffman                                          777.7400+-9.7981     !    807.4622+-8.9564        ! definitely 1.0382x slower
   arithmetic-simple                                724.4967+-4.5291     !    741.8892+-6.9666        ! definitely 1.0240x slower
   arithmetic-precise                               558.7560+-4.4426     !    575.2786+-5.8740        ! definitely 1.0296x slower
   arithmetic-complex-precise                       553.6388+-4.9665     !    579.5320+-5.3444        ! definitely 1.0468x slower
   arithmetic-precise-order-0                       784.5962+-18.9015         781.9229+-8.9835        
   arithmetic-precise-order-1                       604.7003+-23.0804    ?    611.0160+-5.2036        ? might be 1.0104x slower
   arithmetic-precise-order-2                       676.8846+-32.2441         673.5516+-10.6048       
   arithmetic-simple-order-1                        718.5388+-2.6832     !    736.0574+-4.5831        ! definitely 1.0244x slower
   arithmetic-simple-order-2                        782.7725+-7.0706     ?    795.7834+-10.0304       ? might be 1.0166x slower
   lz-string                                        617.6868+-22.3185    ?    626.6821+-38.3485       ? might be 1.0146x slower

   &lt;geometric&gt;                                      674.2246+-6.7804     !    687.3929+-4.1989        ! definitely 1.0195x slower

                                                        TipOfTree              FunctionRealloc                                  

                                                        TipOfTree              FunctionRealloc                                  
Geomean of preferred means:
   &lt;scaled-result&gt;                                  120.1940+-0.3077     ?    120.5229+-0.2672        ? might be 1.0027x slower</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1083491</commentid>
    <comment_count>13</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-04-07 17:01:19 -0700</bug_when>
    <thetext>Figured out the cause of the regressions.  Some tests now do one more round of exits because previously, a GetClosureVar that was unprofiled but constant folded would just get constant folded - while now, an unprofiled GetClosureVar is an exit site.

It&apos;s worth having some hack that constant-folds this sooner.  This is yet another one of those examples of sooner SSA conversion being better than our weird CPS IR.  I&apos;ll look into it.

Right now this is a 1% speed-up on Octane, and some of the AsmBench tests are seeing speed-ups.  So if I find a good hack then we should have a healthy net speed-up from this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1083493</commentid>
    <comment_count>14</comment_count>
      <attachid>250317</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-04-07 17:04:57 -0700</bug_when>
    <thetext>Created attachment 250317
more</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1083526</commentid>
    <comment_count>15</comment_count>
      <attachid>250327</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-04-07 20:16:22 -0700</bug_when>
    <thetext>Created attachment 250327
even more

Replacing VariableWatchpointSet with InferredValue, which is a super easy to use singleton inference thingy.  For now I&apos;m making FunctionExecutable use it, and then I&apos;ll make SymbolTable use it for inferring JSScope singletons.  This will give us a more rational approach to early constant-folding of resolve_scope while also handling the case where a non-singleton scope chain leads to a singleton scope.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1083543</commentid>
    <comment_count>16</comment_count>
      <attachid>250331</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-04-07 21:34:28 -0700</bug_when>
    <thetext>Created attachment 250331
this might be the one!

Now I&apos;m using InferredValue to infer JSSymbolTableObjects for a given SymbolTable.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1083693</commentid>
    <comment_count>17</comment_count>
      <attachid>250374</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-04-08 12:35:15 -0700</bug_when>
    <thetext>Created attachment 250374
the patch

Benchmark report for SunSpider, LongSpider, V8Spider, Octane, Kraken, JSRegress, AsmBench, and CompressionBench on dethklok (MacBookPro9,1).

VMs tested:
&quot;TipOfTree&quot; at /Volumes/Data/pizlo/secondary/OpenSource/WebKitBuild/Release/jsc (r182498)
&quot;FunctionRealloc&quot; at /Volumes/Data/pizlo/primary/OpenSource/WebKitBuild/Release/jsc (r182498)

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

                                                        TipOfTree              FunctionRealloc                                  
SunSpider:
   3d-cube                                            4.9250+-0.0801     ?      4.9863+-0.1011        ? might be 1.0125x slower
   3d-morph                                           5.6396+-0.0299     ?      5.7006+-0.1988        ? might be 1.0108x slower
   3d-raytrace                                        6.7137+-0.7093            6.3422+-0.1512          might be 1.0586x faster
   access-binary-trees                                2.3136+-0.0800            2.2896+-0.1110          might be 1.0105x faster
   access-fannkuch                                    5.8263+-0.2175            5.7805+-0.0903        
   access-nbody                                       2.8565+-0.0301     ?      2.9017+-0.1637        ? might be 1.0158x slower
   access-nsieve                                      3.3407+-0.0719     ?      3.4296+-0.1716        ? might be 1.0266x slower
   bitops-3bit-bits-in-byte                           1.6421+-0.0679            1.5901+-0.0508          might be 1.0327x faster
   bitops-bits-in-byte                                3.3757+-0.0444     ?      3.5194+-0.2701        ? might be 1.0426x slower
   bitops-bitwise-and                                 2.0987+-0.0384     ?      2.1454+-0.0595        ? might be 1.0223x slower
   bitops-nsieve-bits                                 4.0744+-0.4957            3.8364+-0.2075          might be 1.0620x faster
   controlflow-recursive                              2.1493+-0.0421     ?      2.2019+-0.1857        ? might be 1.0245x slower
   crypto-aes                                         4.2770+-0.2552            4.0697+-0.0574          might be 1.0510x faster
   crypto-md5                                         2.4952+-0.1359            2.4247+-0.0292          might be 1.0291x faster
   crypto-sha1                                        2.6940+-0.1898     ?      2.8033+-0.2341        ? might be 1.0406x slower
   date-format-tofte                                  9.2659+-0.1627     ?      9.4330+-0.1897        ? might be 1.0180x slower
   date-format-xparb                                  5.3555+-0.1723     ?      5.5708+-0.1605        ? might be 1.0402x slower
   math-cordic                                        3.1312+-0.0564            3.0493+-0.0480          might be 1.0268x faster
   math-partial-sums                                  5.2253+-0.1211     ?      5.4952+-0.6956        ? might be 1.0517x slower
   math-spectral-norm                                 1.9673+-0.0277     ?      1.9851+-0.1193        ?
   regexp-dna                                         7.6839+-1.2630            7.6123+-1.2103        
   string-base64                                      4.9362+-0.7948            4.7124+-0.2037          might be 1.0475x faster
   string-fasta                                       6.7264+-0.0922            6.6978+-0.2167        
   string-tagcloud                                    9.6509+-0.2356     ?      9.6871+-0.2718        ?
   string-unpack-code                                19.9715+-0.8735           19.7571+-0.7070          might be 1.0109x faster
   string-validate-input                              4.9993+-0.2065            4.9528+-0.1388        

   &lt;arithmetic&gt;                                       5.1283+-0.0568            5.1144+-0.0766          might be 1.0027x faster

                                                        TipOfTree              FunctionRealloc                                  
LongSpider:
   3d-cube                                         1085.8740+-15.5978    ?   1088.3162+-17.7758       ?
   3d-morph                                        1552.8687+-23.6196        1534.4194+-3.0586          might be 1.0120x faster
   3d-raytrace                                      734.0000+-6.2293          726.2999+-6.4545          might be 1.0106x faster
   access-binary-trees                             1019.5015+-9.9440         1017.7312+-8.7104        
   access-fannkuch                                  328.3807+-8.7917     ?    336.0554+-8.6994        ? might be 1.0234x slower
   access-nbody                                     614.6836+-1.4039     ?    619.4366+-5.1307        ?
   access-nsieve                                    854.5482+-13.1418    ?    856.3176+-6.5269        ?
   bitops-3bit-bits-in-byte                          44.7743+-0.8615           44.6446+-0.7625        
   bitops-bits-in-byte                              104.8393+-1.5066     ?    106.0655+-1.8013        ? might be 1.0117x slower
   bitops-nsieve-bits                               705.1925+-13.1786         701.2912+-6.1613        
   controlflow-recursive                            495.3839+-20.3753         479.4252+-3.1846          might be 1.0333x faster
   crypto-aes                                       709.2493+-8.6884     ?    716.2637+-4.1725        ?
   crypto-md5                                       567.7901+-20.5173         552.2805+-6.3440          might be 1.0281x faster
   crypto-sha1                                      604.7793+-10.9915    ?    644.2812+-105.8182      ? might be 1.0653x slower
   date-format-tofte                                769.9083+-31.5751    ?    790.5561+-9.7426        ? might be 1.0268x slower
   date-format-xparb                                792.6657+-97.3842         781.4341+-34.0010         might be 1.0144x faster
   math-cordic                                      595.3482+-2.2452     ?    596.3726+-4.7895        ?
   math-partial-sums                                510.4870+-8.0785          509.3400+-5.0383        
   math-spectral-norm                               566.9928+-4.5623     ?    567.0435+-3.0728        ?
   string-base64                                    366.1850+-4.5037     ?    373.5304+-16.0132       ? might be 1.0201x slower
   string-fasta                                     456.5754+-3.9428          452.4404+-3.1441        
   string-tagcloud                                  215.4006+-1.9615     ?    217.0247+-3.6130        ?

   &lt;geometric&gt;                                      507.2100+-3.9932     ?    508.4441+-3.0733        ? might be 1.0024x slower

                                                        TipOfTree              FunctionRealloc                                  
V8Spider:
   crypto                                            56.8501+-1.5859           54.5890+-1.7855          might be 1.0414x faster
   deltablue                                         93.4441+-6.1436     ?     96.1612+-3.2731        ? might be 1.0291x slower
   earley-boyer                                      42.5973+-1.6500     ?     42.7173+-0.7018        ?
   raytrace                                          40.8090+-2.6844           39.7108+-2.6831          might be 1.0277x faster
   regexp                                            68.5098+-2.6313           67.2522+-1.3989          might be 1.0187x faster
   richards                                          80.0323+-1.8785           78.4126+-1.4421          might be 1.0207x faster
   splay                                             38.7594+-0.9634     ?     38.7640+-1.4481        ?

   &lt;geometric&gt;                                       56.9958+-0.9743           56.3980+-0.7812          might be 1.0106x faster

                                                        TipOfTree              FunctionRealloc                                  
Octane:
   encrypt                                           0.20254+-0.00131          0.20235+-0.00093       
   decrypt                                           3.62811+-0.04524    ?     3.64212+-0.05664       ?
   deltablue                                x2       0.20885+-0.00196    ?     0.20899+-0.00209       ?
   earley                                            0.58767+-0.00696          0.58420+-0.00383       
   boyer                                             6.42312+-0.02325    ?     6.45272+-0.06872       ?
   navier-stokes                            x2       5.20860+-0.00996    ?     5.23259+-0.04911       ?
   raytrace                                 x2       1.28691+-0.02382          1.25601+-0.04226         might be 1.0246x faster
   richards                                 x2       0.12288+-0.00145          0.12246+-0.00099       
   splay                                    x2       0.38392+-0.00311    ?     0.38745+-0.00439       ?
   regexp                                   x2      33.19287+-0.22299    ?    33.42332+-0.36159       ?
   pdfjs                                    x2      44.98951+-0.28259         44.51823+-0.23829         might be 1.0106x faster
   mandreel                                 x2      50.35633+-0.44106    ?    50.40703+-0.18486       ?
   gbemu                                    x2      39.53212+-0.74386         38.78705+-0.49685         might be 1.0192x faster
   closure                                           0.56719+-0.00967          0.56064+-0.00525         might be 1.0117x faster
   jquery                                            7.17399+-0.12855          7.06396+-0.04765         might be 1.0156x faster
   box2d                                    x2      12.48591+-0.62880         12.22665+-0.10551         might be 1.0212x faster
   zlib                                     x2     387.08908+-1.12193    ?   388.81367+-10.58554      ?
   typescript                               x2     828.58215+-11.77211       823.00090+-10.42154      

   &lt;geometric&gt;                                       6.73098+-0.01962          6.69938+-0.02472         might be 1.0047x faster

                                                        TipOfTree              FunctionRealloc                                  
Kraken:
   ai-astar                                          268.630+-1.717      ?     268.990+-1.770         ?
   audio-beat-detection                              107.139+-1.261      ?     107.169+-1.567         ?
   audio-dft                                         149.999+-1.665      ?     150.266+-3.511         ?
   audio-fft                                          84.409+-4.369      ?      84.991+-3.205         ?
   audio-oscillator                                  208.242+-1.704      ?     208.601+-2.494         ?
   imaging-darkroom                                  104.364+-0.223      ?     105.681+-1.855         ? might be 1.0126x slower
   imaging-desaturate                                 64.143+-1.830             64.060+-2.149         
   imaging-gaussian-blur                             113.142+-2.197      ?     113.680+-2.415         ?
   json-parse-financial                               45.894+-1.993      ?      47.161+-1.987         ? might be 1.0276x slower
   json-stringify-tinderbox                           57.887+-2.955             56.130+-1.293           might be 1.0313x faster
   stanford-crypto-aes                                63.479+-1.990             63.417+-1.391         
   stanford-crypto-ccm                                51.550+-1.785             50.344+-1.888           might be 1.0240x faster
   stanford-crypto-pbkdf2                            170.440+-3.982            168.231+-1.815           might be 1.0131x faster
   stanford-crypto-sha256-iterative                   57.687+-3.326             56.389+-4.199           might be 1.0230x faster

   &lt;arithmetic&gt;                                      110.500+-0.818            110.365+-0.550           might be 1.0012x faster

                                                        TipOfTree              FunctionRealloc                                  
JSRegress:
   abs-boolean                                        2.6721+-0.0445     ?      2.7322+-0.1365        ? might be 1.0225x slower
   adapt-to-double-divide                            16.6415+-0.2463     ?     16.7919+-0.2573        ?
   aliased-arguments-getbyval                         1.2297+-0.1014     ?      1.2565+-0.0695        ? might be 1.0218x slower
   allocate-big-object                                2.6691+-0.1555            2.6017+-0.0659          might be 1.0259x faster
   arguments-named-and-reflective                    12.8475+-0.7888     ?     12.9371+-1.4552        ?
   arguments-out-of-bounds                           15.2753+-0.7596           14.8877+-0.3218          might be 1.0260x faster
   arguments-strict-mode                             11.6694+-0.3823     ?     11.7072+-0.5141        ?
   arguments                                         10.0948+-0.2859     ?     10.3591+-0.4032        ? might be 1.0262x slower
   arity-mismatch-inlining                            0.8979+-0.0927            0.8612+-0.0194          might be 1.0425x faster
   array-access-polymorphic-structure                 6.5102+-0.1263     ?      7.4481+-1.0109        ? might be 1.1441x slower
   array-nonarray-polymorhpic-access                 37.0502+-2.8047           36.3414+-1.9855          might be 1.0195x faster
   array-prototype-every                             87.9055+-1.2179     ?     91.1745+-2.8241        ? might be 1.0372x slower
   array-prototype-forEach                           86.9964+-2.7757           84.5792+-2.6438          might be 1.0286x faster
   array-prototype-map                               93.3152+-2.5707     ?     95.5261+-2.7503        ? might be 1.0237x slower
   array-prototype-some                              87.8527+-2.1499     ?     91.7321+-2.2425        ? might be 1.0442x slower
   array-splice-contiguous                           42.7360+-2.3043           42.2169+-1.1395          might be 1.0123x faster
   array-with-double-add                              4.1158+-0.0862     ?      4.1702+-0.0490        ? might be 1.0132x slower
   array-with-double-increment                        3.2271+-0.0299     ?      3.2449+-0.0620        ?
   array-with-double-mul-add                          4.9999+-0.1034     ?      5.0585+-0.0857        ? might be 1.0117x slower
   array-with-double-sum                              3.3687+-0.2597            3.3095+-0.0860          might be 1.0179x faster
   array-with-int32-add-sub                           6.7706+-0.1403     ?      6.8940+-0.2987        ? might be 1.0182x slower
   array-with-int32-or-double-sum                     3.3932+-0.0870            3.3459+-0.0389          might be 1.0141x faster
   ArrayBuffer-DataView-alloc-large-long-lived   
                                                     34.3880+-1.9397           33.9420+-1.8951          might be 1.0131x faster
   ArrayBuffer-DataView-alloc-long-lived             14.8265+-1.6271     ?     15.0337+-1.1313        ? might be 1.0140x slower
   ArrayBuffer-Int32Array-byteOffset                  3.8442+-0.0595            3.8185+-0.1536        
   ArrayBuffer-Int8Array-alloc-large-long-lived   
                                                     32.7754+-0.7473     ?     34.7366+-1.6586        ? might be 1.0598x slower
   ArrayBuffer-Int8Array-alloc-long-lived-buffer   
                                                     24.6790+-2.1027           24.5888+-1.9104        
   ArrayBuffer-Int8Array-alloc-long-lived            15.5741+-1.4961           15.2957+-1.8175          might be 1.0182x faster
   ArrayBuffer-Int8Array-alloc                       11.2515+-0.4011     ?     11.8396+-1.5375        ? might be 1.0523x slower
   asmjs_bool_bug                                     7.8272+-0.3912            7.6112+-0.0462          might be 1.0284x faster
   assign-custom-setter-polymorphic                   2.9849+-0.0390     ?      3.0129+-0.0544        ?
   assign-custom-setter                               4.0579+-0.0804     ?      4.1091+-0.2139        ? might be 1.0126x slower
   basic-set                                          8.7367+-0.6426            8.7349+-0.7051        
   big-int-mul                                        4.1639+-0.1180            4.1188+-0.0441          might be 1.0109x faster
   boolean-test                                       3.1341+-0.1890            3.0630+-0.0440          might be 1.0232x faster
   branch-fold                                        3.6842+-0.0328     ?      3.7117+-0.1265        ?
   by-val-generic                                     8.0981+-0.2651     ?      8.5984+-1.1100        ? might be 1.0618x slower
   call-spread-apply                                 33.3491+-3.7182           29.3708+-1.0046          might be 1.1355x faster
   call-spread-call                                  25.3745+-1.1686           24.8943+-1.6182          might be 1.0193x faster
   captured-assignments                               0.4669+-0.0123     ?      0.4751+-0.0135        ? might be 1.0174x slower
   cast-int-to-double                                 5.2768+-0.0321     ?      5.2994+-0.0349        ?
   cell-argument                                      8.6812+-0.3289            8.5165+-0.1978          might be 1.0193x faster
   cfg-simplify                                       2.9582+-0.1849     ?      2.9646+-0.1286        ?
   chain-getter-access                               10.1713+-0.1406           10.1506+-0.3318        
   cmpeq-obj-to-obj-other                            11.1842+-0.9734     ?     11.6505+-0.7955        ? might be 1.0417x slower
   constant-test                                      4.9452+-0.0582            4.9423+-0.0380        
   create-lots-of-functions                          23.9682+-1.7810     ?     24.3022+-1.0070        ? might be 1.0139x slower
   DataView-custom-properties                        40.1956+-2.2900     ?     40.4730+-1.9227        ?
   deconstructing-parameters-overridden-by-function   
                                                      0.5295+-0.0429            0.5199+-0.0359          might be 1.0185x faster
   delay-tear-off-arguments-strictmode               13.6793+-0.1243           13.6103+-0.2022        
   deltablue-varargs                                201.6226+-2.9561          200.9221+-2.8593        
   destructuring-arguments                           16.3276+-0.3521           16.2229+-0.3170        
   destructuring-swap                                 5.0611+-0.1195            4.9955+-0.0138          might be 1.0131x faster
   direct-arguments-getbyval                          1.2489+-0.0721            1.2147+-0.0771          might be 1.0281x faster
   div-boolean-double                                 5.2085+-0.0126     ?      5.2226+-0.0311        ?
   div-boolean                                        7.9036+-0.2002            7.7737+-0.0207          might be 1.0167x faster
   double-get-by-val-out-of-bounds                    4.5190+-0.1426            4.4896+-0.1440        
   double-pollution-getbyval                          8.8409+-0.0327     ?      9.1069+-0.3619        ? might be 1.0301x slower
   double-pollution-putbyoffset                       4.2846+-0.0295     ?      4.3129+-0.1571        ?
   double-to-int32-typed-array-no-inline              2.2485+-0.0394     ?      2.3029+-0.0535        ? might be 1.0242x slower
   double-to-int32-typed-array                        1.9615+-0.0697     ?      2.0110+-0.1784        ? might be 1.0252x slower
   double-to-uint32-typed-array-no-inline             2.3477+-0.2173            2.3301+-0.0508        
   double-to-uint32-typed-array                       2.0369+-0.1130            2.0211+-0.0682        
   elidable-new-object-dag                           44.4705+-0.9421           44.3093+-1.8957        
   elidable-new-object-roflcopter                    47.1418+-2.1445     ?     48.3983+-1.6167        ? might be 1.0267x slower
   elidable-new-object-then-call                     39.0524+-0.9886     ?     40.0160+-1.6801        ? might be 1.0247x slower
   elidable-new-object-tree                          45.8427+-2.2329     ?     46.8080+-2.1215        ? might be 1.0211x slower
   empty-string-plus-int                              5.3478+-0.0859     ?      5.3951+-0.0979        ?
   emscripten-cube2hash                              38.9958+-1.4705     ?     39.3750+-2.3065        ?
   exit-length-on-plain-object                       15.0839+-1.8035           14.6549+-1.6338          might be 1.0293x faster
   external-arguments-getbyval                        1.2096+-0.0368            1.1970+-0.0639          might be 1.0105x faster
   external-arguments-putbyval                        2.2732+-0.0320     ?      2.2767+-0.0642        ?
   fixed-typed-array-storage-var-index                1.2992+-0.0928            1.2384+-0.0336          might be 1.0492x faster
   fixed-typed-array-storage                          0.9459+-0.1064            0.9283+-0.0073          might be 1.0190x faster
   Float32Array-matrix-mult                           4.2386+-0.0523     ?      4.2989+-0.1015        ? might be 1.0142x slower
   Float32Array-to-Float64Array-set                  58.6935+-1.9507           54.0833+-3.5596          might be 1.0852x faster
   Float64Array-alloc-long-lived                     72.4810+-1.3233           72.4694+-1.1342        
   Float64Array-to-Int16Array-set                    69.7657+-2.1106           68.9403+-1.6763          might be 1.0120x faster
   fold-double-to-int                                13.4434+-0.1715           13.4080+-0.2180        
   fold-get-by-id-to-multi-get-by-offset-rare-int   
                                                      9.5300+-0.2884     ?      9.9062+-0.8518        ? might be 1.0395x slower
   fold-get-by-id-to-multi-get-by-offset              9.7065+-1.1641     ?      9.7499+-0.8591        ?
   fold-multi-get-by-offset-to-get-by-offset   
                                                      7.7506+-1.4456     ?      9.1993+-0.8010        ? might be 1.1869x slower
   fold-multi-get-by-offset-to-poly-get-by-offset   
                                                      8.3392+-0.7665     ?      9.3884+-1.1029        ? might be 1.1258x slower
   fold-multi-put-by-offset-to-poly-put-by-offset   
                                                      8.0717+-1.5918     ?      8.1219+-1.3453        ?
   fold-multi-put-by-offset-to-put-by-offset   
                                                      6.1981+-1.5556            5.0907+-0.9989          might be 1.2175x faster
   fold-multi-put-by-offset-to-replace-or-transition-put-by-offset   
                                                      9.3127+-0.8532     ?      9.6066+-0.6015        ? might be 1.0316x slower
   fold-put-by-id-to-multi-put-by-offset              9.8420+-1.6091            9.7350+-0.6356          might be 1.0110x faster
   fold-put-structure                                 6.9079+-0.6056            5.5673+-1.5670          might be 1.2408x faster
   for-of-iterate-array-entries                       4.5448+-0.1054     ?      4.6523+-0.1439        ? might be 1.0237x slower
   for-of-iterate-array-keys                          3.8466+-0.0551     ?      3.9411+-0.1235        ? might be 1.0246x slower
   for-of-iterate-array-values                        3.7158+-0.0463            3.6975+-0.0122        
   fround                                            20.3944+-0.6229           19.8998+-0.2584          might be 1.0249x faster
   ftl-library-inlining-dataview                     79.9185+-1.9203           77.9720+-2.5283          might be 1.0250x faster
   ftl-library-inlining                              76.0061+-18.5782          74.6234+-18.7884         might be 1.0185x faster
   function-dot-apply                                 1.9779+-0.1565     !      2.2473+-0.0703        ! definitely 1.1362x slower
   function-test                                      3.3751+-0.0359            3.3640+-0.0274        
   function-with-eval                                96.8919+-3.2764     ?    102.7410+-2.8724        ? might be 1.0604x slower
   gcse-poly-get-less-obvious                        19.6378+-2.4901     ?     20.3600+-1.0937        ? might be 1.0368x slower
   gcse-poly-get                                     23.4616+-1.2810     ^     20.5409+-1.0509        ^ definitely 1.1422x faster
   gcse                                               4.2965+-0.0450     ?      4.3239+-0.0705        ?
   get-by-id-bimorphic-check-structure-elimination-simple   
                                                      2.7705+-0.0744            2.7700+-0.0383        
   get-by-id-bimorphic-check-structure-elimination   
                                                      6.1460+-0.0338            6.0777+-0.1038          might be 1.0112x faster
   get-by-id-chain-from-try-block                     7.4904+-1.4817            6.6653+-0.1408          might be 1.1238x faster
   get-by-id-check-structure-elimination              5.1137+-0.0692     ?      5.5386+-0.6989        ? might be 1.0831x slower
   get-by-id-proto-or-self                           18.0013+-1.2829           17.2503+-0.5130          might be 1.0435x faster
   get-by-id-quadmorphic-check-structure-elimination-simple   
                                                      2.9962+-0.1257            2.9550+-0.0311          might be 1.0139x faster
   get-by-id-self-or-proto                           17.3097+-0.1460     ?     17.4957+-0.3640        ? might be 1.0107x slower
   get-by-val-out-of-bounds                           4.3345+-0.0878     ?      4.4478+-0.1702        ? might be 1.0261x slower
   get_callee_monomorphic                             3.7051+-0.1990            3.6634+-0.0426          might be 1.0114x faster
   get_callee_polymorphic                             3.6258+-0.0906     ?      3.7197+-0.3644        ? might be 1.0259x slower
   getter-no-activation                               4.8075+-0.8977     ?      4.8239+-0.0071        ?
   getter-richards                                  126.4342+-7.2845          121.7340+-8.7555          might be 1.0386x faster
   getter                                             6.0412+-0.8295            5.7036+-0.8249          might be 1.0592x faster
   global-var-const-infer-fire-from-opt               0.9473+-0.1049            0.8702+-0.0562          might be 1.0887x faster
   global-var-const-infer                             0.8368+-0.0894     ?      0.9104+-0.1455        ? might be 1.0880x slower
   HashMap-put-get-iterate-keys                      27.0236+-0.4763     ?     27.1150+-0.9376        ?
   HashMap-put-get-iterate                           26.0730+-0.2155     ?     26.7907+-0.6871        ? might be 1.0275x slower
   HashMap-string-put-get-iterate                    27.7793+-1.4063           27.2145+-0.8901          might be 1.0208x faster
   hoist-make-rope                                   12.0557+-0.8316           11.6673+-0.9282          might be 1.0333x faster
   hoist-poly-check-structure-effectful-loop   
                                                      5.1092+-0.3055     ?      5.1335+-0.2283        ?
   hoist-poly-check-structure                         3.7584+-0.0514     ?      3.7816+-0.0570        ?
   imul-double-only                                   8.7391+-0.5145            8.6867+-0.8248        
   imul-int-only                                     10.3331+-0.9641     ?     10.9566+-1.1022        ? might be 1.0603x slower
   imul-mixed                                         8.4437+-0.3619            7.9890+-0.4019          might be 1.0569x faster
   in-four-cases                                     19.3302+-1.1096           18.8748+-0.4128          might be 1.0241x faster
   in-one-case-false                                 10.0962+-0.3028     ?     10.1195+-0.3660        ?
   in-one-case-true                                  10.0107+-0.2461     ?     10.2807+-0.6490        ? might be 1.0270x slower
   in-two-cases                                      10.1748+-0.0913     ?     10.4299+-0.4617        ? might be 1.0251x slower
   indexed-properties-in-objects                      2.8966+-0.0284     ?      2.9602+-0.1427        ? might be 1.0219x slower
   infer-closure-const-then-mov-no-inline             4.0253+-0.4873            3.6569+-0.0289          might be 1.1007x faster
   infer-closure-const-then-mov                      17.8190+-0.4552     !     19.6688+-0.4287        ! definitely 1.1038x slower
   infer-closure-const-then-put-to-scope-no-inline   
                                                     12.2506+-1.4569     ?     13.2628+-0.2349        ? might be 1.0826x slower
   infer-closure-const-then-put-to-scope             22.9888+-1.4733     ?     23.4200+-1.4928        ? might be 1.0188x slower
   infer-closure-const-then-reenter-no-inline   
                                                     49.6613+-1.6597     !     63.3414+-1.3726        ! definitely 1.2755x slower
   infer-closure-const-then-reenter                 125.5074+-4.1101     ^     23.2455+-1.8735        ^ definitely 5.3992x faster
   infer-constant-global-property                    31.3693+-1.2861     ?     31.7639+-3.1413        ? might be 1.0126x slower
   infer-constant-property                            2.7829+-0.1079            2.7197+-0.0381          might be 1.0232x faster
   infer-one-time-closure-ten-vars                   12.1574+-0.3044     ?     12.9643+-0.8596        ? might be 1.0664x slower
   infer-one-time-closure-two-vars                   12.2651+-0.9391     ?     13.3950+-1.6687        ? might be 1.0921x slower
   infer-one-time-closure                            11.8008+-0.3774     ?     12.0962+-0.2744        ? might be 1.0250x slower
   infer-one-time-deep-closure                       21.6983+-1.3487           21.5813+-1.1795        
   inline-arguments-access                            4.2643+-0.0336     ?      4.3363+-0.0619        ? might be 1.0169x slower
   inline-arguments-aliased-access                    4.3071+-0.0708     ?      4.3975+-0.1341        ? might be 1.0210x slower
   inline-arguments-local-escape                      4.5760+-0.3566            4.4696+-0.1115          might be 1.0238x faster
   inline-get-scoped-var                              4.4269+-0.3565     ?      4.8453+-0.2166        ? might be 1.0945x slower
   inlined-put-by-id-transition                      11.0185+-0.6563           10.4552+-0.6400          might be 1.0539x faster
   int-or-other-abs-then-get-by-val                   4.9395+-0.0646     ?      5.2116+-0.2627        ? might be 1.0551x slower
   int-or-other-abs-zero-then-get-by-val             16.7398+-0.3194     ?     17.8930+-0.9118        ? might be 1.0689x slower
   int-or-other-add-then-get-by-val                   4.3014+-0.0967     ?      4.3725+-0.2560        ? might be 1.0165x slower
   int-or-other-add                                   5.2650+-0.0214     ?      5.3743+-0.0946        ? might be 1.0208x slower
   int-or-other-div-then-get-by-val                   4.2203+-0.0130     ?      4.3703+-0.1473        ? might be 1.0355x slower
   int-or-other-max-then-get-by-val                   4.3542+-0.0604            4.3460+-0.0507        
   int-or-other-min-then-get-by-val                   4.4829+-0.0906            4.4381+-0.0257          might be 1.0101x faster
   int-or-other-mod-then-get-by-val                   3.9177+-0.0386            3.8794+-0.0493        
   int-or-other-mul-then-get-by-val                   3.9874+-0.0327     ?      4.0895+-0.1592        ? might be 1.0256x slower
   int-or-other-neg-then-get-by-val                   4.6661+-0.1757            4.6402+-0.0837        
   int-or-other-neg-zero-then-get-by-val             17.5003+-1.3031           17.2601+-0.3999          might be 1.0139x faster
   int-or-other-sub-then-get-by-val                   4.3774+-0.1353            4.2879+-0.0808          might be 1.0209x faster
   int-or-other-sub                                   3.5516+-0.0361            3.5033+-0.0512          might be 1.0138x faster
   int-overflow-local                                 4.3203+-0.0232            4.3164+-0.0783        
   Int16Array-alloc-long-lived                       50.4646+-1.2298           50.0060+-1.1079        
   Int16Array-bubble-sort-with-byteLength            21.1336+-0.9369     ?     21.3282+-1.9904        ?
   Int16Array-bubble-sort                            20.5496+-0.7094     ?     20.8999+-1.4582        ? might be 1.0170x slower
   Int16Array-load-int-mul                            1.5358+-0.1098            1.5077+-0.0280          might be 1.0187x faster
   Int16Array-to-Int32Array-set                      60.5276+-0.9697     ^     51.5043+-1.8603        ^ definitely 1.1752x faster
   Int32Array-alloc-large                            25.4411+-1.3066           24.8808+-0.7636          might be 1.0225x faster
   Int32Array-alloc-long-lived                       56.5892+-2.0863     ?     57.5586+-1.6539        ? might be 1.0171x slower
   Int32Array-alloc                                   3.6598+-0.4836     ?      3.9104+-0.6795        ? might be 1.0685x slower
   Int32Array-Int8Array-view-alloc                    8.0074+-1.1381            7.2189+-0.6000          might be 1.1092x faster
   int52-spill                                        6.3981+-0.1304     ?      6.6352+-0.1556        ? might be 1.0371x slower
   Int8Array-alloc-long-lived                        47.0903+-1.9396     ?     48.9224+-1.1670        ? might be 1.0389x slower
   Int8Array-load-with-byteLength                     3.3986+-0.0959            3.3497+-0.0436          might be 1.0146x faster
   Int8Array-load                                     3.4084+-0.0638            3.3662+-0.0588          might be 1.0126x faster
   integer-divide                                    12.1721+-1.1017           11.7240+-0.1626          might be 1.0382x faster
   integer-modulo                                     2.1011+-0.0970            2.0991+-0.0399        
   large-int-captured                                 5.7803+-0.3257            5.6272+-0.0875          might be 1.0272x faster
   large-int-neg                                     17.0446+-1.1951           16.4922+-0.5063          might be 1.0335x faster
   large-int                                         14.8522+-0.2491     ?     15.4784+-1.4207        ? might be 1.0422x slower
   logical-not                                        4.5147+-0.0349     !      4.6130+-0.0363        ! definitely 1.0218x slower
   lots-of-fields                                    12.9028+-0.4683           12.8330+-0.5821        
   make-indexed-storage                               3.0599+-0.0807     ?      3.1136+-0.0556        ? might be 1.0175x slower
   make-rope-cse                                      5.1518+-0.7830            4.5785+-0.0428          might be 1.1252x faster
   marsaglia-larger-ints                             36.8245+-2.2106           35.7552+-0.3837          might be 1.0299x faster
   marsaglia-osr-entry                               23.2393+-0.5851           23.0422+-0.5852        
   max-boolean                                        2.4629+-0.0530     ?      2.5089+-0.0327        ? might be 1.0187x slower
   method-on-number                                  18.8588+-1.1383           17.8641+-1.4631          might be 1.0557x faster
   min-boolean                                        2.5190+-0.0783     ?      2.5672+-0.1105        ? might be 1.0191x slower
   minus-boolean-double                               3.2124+-0.1193            3.1503+-0.0329          might be 1.0197x faster
   minus-boolean                                      2.3447+-0.0729     ?      2.3465+-0.0855        ?
   misc-strict-eq                                    38.7329+-2.3414           37.6043+-0.5565          might be 1.0300x faster
   mod-boolean-double                                11.7033+-1.1577           11.3716+-0.8281          might be 1.0292x faster
   mod-boolean                                        7.8176+-0.0517     ?      7.9848+-0.2553        ? might be 1.0214x slower
   mul-boolean-double                                 3.8910+-0.2424            3.7233+-0.0645          might be 1.0451x faster
   mul-boolean                                        2.9137+-0.1433            2.9001+-0.0454        
   neg-boolean                                        3.1691+-0.0371     ?      3.1995+-0.0462        ?
   negative-zero-divide                               0.3701+-0.0218     ?      0.3813+-0.0402        ? might be 1.0302x slower
   negative-zero-modulo                               0.3611+-0.0181            0.3577+-0.0184        
   negative-zero-negate                               0.3416+-0.0196     ?      0.3643+-0.0181        ? might be 1.0667x slower
   nested-function-parsing                           37.0640+-0.1599     !     40.5151+-2.0894        ! definitely 1.0931x slower
   new-array-buffer-dead                              2.8475+-0.0408     ?      2.8789+-0.0788        ? might be 1.0110x slower
   new-array-buffer-push                              6.6461+-0.2402     ?      7.3286+-0.9158        ? might be 1.1027x slower
   new-array-dead                                    12.4574+-0.2386           12.4506+-0.7829        
   new-array-push                                     3.8422+-0.0448     ?      3.9250+-0.1532        ? might be 1.0215x slower
   no-inline-constructor                            120.2118+-2.7387     ?    122.0947+-2.9645        ? might be 1.0157x slower
   number-test                                        3.0001+-0.0317     ?      3.0051+-0.0157        ?
   object-closure-call                                5.7203+-0.0676     ?      5.7278+-0.0479        ?
   object-test                                        3.1082+-0.0211     ?      3.1385+-0.1146        ?
   obvious-sink-pathology-taken                     145.3853+-2.4106     ?    147.8713+-1.4735        ? might be 1.0171x slower
   obvious-sink-pathology                           140.9152+-1.7669          140.6307+-1.4081        
   obviously-elidable-new-object                     35.3818+-0.6485     ?     37.1530+-2.1010        ? might be 1.0501x slower
   plus-boolean-arith                                 2.4963+-0.0226     ?      2.5302+-0.0154        ? might be 1.0136x slower
   plus-boolean-double                                3.2215+-0.0978            3.1997+-0.1211        
   plus-boolean                                       2.3877+-0.0327     ?      2.4266+-0.1163        ? might be 1.0163x slower
   poly-chain-access-different-prototypes-simple   
                                                      3.2528+-0.0854     ?      3.2957+-0.0424        ? might be 1.0132x slower
   poly-chain-access-different-prototypes             2.6219+-0.0696     ?      2.6584+-0.1093        ? might be 1.0139x slower
   poly-chain-access-simpler                          3.2926+-0.0679     ?      3.3030+-0.0452        ?
   poly-chain-access                                  2.5900+-0.0356     ?      2.6113+-0.0373        ?
   poly-stricteq                                     58.9033+-3.1377     ?     59.7670+-2.4642        ? might be 1.0147x slower
   polymorphic-array-call                             1.3232+-0.1640     ?      1.3932+-0.1755        ? might be 1.0530x slower
   polymorphic-get-by-id                              3.0669+-0.0453     ?      3.1140+-0.0375        ? might be 1.0153x slower
   polymorphic-put-by-id                             29.2610+-2.2635           28.5816+-1.0558          might be 1.0238x faster
   polymorphic-structure                             15.1651+-0.4424           15.1484+-0.5156        
   polyvariant-monomorphic-get-by-id                  8.4717+-0.0593     ?      8.5545+-0.1306        ?
   proto-getter-access                               10.1666+-0.1689           10.0459+-0.1305          might be 1.0120x faster
   put-by-id-replace-and-transition                   8.6154+-0.2126     ?      8.6696+-0.1889        ?
   put-by-id-slightly-polymorphic                     2.8499+-0.0620            2.8289+-0.0424        
   put-by-id                                         13.4347+-0.4986     ?     13.5535+-0.5035        ?
   put-by-val-direct                                  0.6392+-0.0263            0.6353+-0.0238        
   put-by-val-large-index-blank-indexing-type   
                                                      6.0756+-0.5585     ?      6.4419+-1.1898        ? might be 1.0603x slower
   put-by-val-machine-int                             2.7293+-0.1250            2.6810+-0.0403          might be 1.0180x faster
   rare-osr-exit-on-local                            14.8688+-0.1897           14.7635+-0.2397        
   register-pressure-from-osr                        22.2151+-1.4501           21.6177+-0.1658          might be 1.0276x faster
   setter                                             6.2104+-0.7597            5.5968+-0.5182          might be 1.1096x faster
   simple-activation-demo                            25.9100+-0.9220     ?     26.2005+-1.4012        ? might be 1.0112x slower
   simple-getter-access                              12.8553+-0.2566           12.6443+-0.2594          might be 1.0167x faster
   simple-poly-call-nested                            8.1139+-0.2874     ?      8.2025+-0.3744        ? might be 1.0109x slower
   simple-poly-call                                   1.3916+-0.1283            1.3170+-0.0797          might be 1.0567x faster
   sin-boolean                                       23.7073+-1.7334           23.2901+-0.6743          might be 1.0179x faster
   singleton-scope                                   70.9766+-1.6444           68.2211+-2.0617          might be 1.0404x faster
   sinkable-new-object-dag                           71.5484+-2.4277           70.1779+-0.9151          might be 1.0195x faster
   sinkable-new-object-taken                         52.7122+-2.4708           50.8223+-2.8833          might be 1.0372x faster
   sinkable-new-object                               39.2212+-1.9521     ?     39.4716+-0.4705        ?
   slow-array-profile-convergence                     2.7756+-0.0472     ?      2.8069+-0.0799        ? might be 1.0113x slower
   slow-convergence                                   3.2941+-0.1620     ^      2.6208+-0.0611        ^ definitely 1.2569x faster
   sparse-conditional                                 1.1672+-0.0278            1.1508+-0.0303          might be 1.0142x faster
   splice-to-remove                                  16.3682+-0.4114     ?     17.2229+-1.2211        ? might be 1.0522x slower
   string-char-code-at                               16.2557+-0.2036     ?     16.4409+-0.1585        ? might be 1.0114x slower
   string-concat-object                               2.3905+-0.0573     ?      2.4158+-0.0515        ? might be 1.0106x slower
   string-concat-pair-object                          2.3828+-0.1034            2.3558+-0.0372          might be 1.0115x faster
   string-concat-pair-simple                         12.3417+-1.4062           11.1431+-0.2081          might be 1.1076x faster
   string-concat-simple                              12.4489+-1.2146           11.9434+-0.6104          might be 1.0423x faster
   string-cons-repeat                                 7.8883+-0.7565     ?      8.3374+-0.8112        ? might be 1.0569x slower
   string-cons-tower                                  8.6018+-0.9184     ?      8.9860+-1.1453        ? might be 1.0447x slower
   string-equality                                   17.5401+-0.4610     ?     17.7528+-0.3738        ? might be 1.0121x slower
   string-get-by-val-big-char                         7.1405+-0.0720     ?      7.1433+-0.1335        ?
   string-get-by-val-out-of-bounds-insane             3.8757+-0.1365            3.7973+-0.0309          might be 1.0207x faster
   string-get-by-val-out-of-bounds                    5.3198+-0.0311     ^      5.2170+-0.0601        ^ definitely 1.0197x faster
   string-get-by-val                                  3.2744+-0.0564            3.2570+-0.0453        
   string-hash                                        2.1146+-0.0421     ?      2.1158+-0.0888        ?
   string-long-ident-equality                        14.4252+-0.1519     ?     14.5861+-0.5747        ? might be 1.0112x slower
   string-out-of-bounds                              14.8557+-0.1456     ?     15.1298+-0.3558        ? might be 1.0185x slower
   string-repeat-arith                               35.4165+-1.8666           34.4462+-1.9443          might be 1.0282x faster
   string-sub                                        67.9183+-1.2971     ?     68.9661+-5.0363        ? might be 1.0154x slower
   string-test                                        2.9734+-0.0515            2.8972+-0.0304          might be 1.0263x faster
   string-var-equality                               30.9649+-1.4551     !     37.3593+-1.1015        ! definitely 1.2065x slower
   structure-hoist-over-transitions                   2.6285+-0.1643            2.5727+-0.0650          might be 1.0217x faster
   substring-concat-weird                            38.8635+-1.5136     ?     38.9397+-1.3364        ?
   substring-concat                                  40.8782+-1.8642     ?     41.4612+-1.8470        ? might be 1.0143x slower
   substring                                         45.6228+-1.1480           45.5901+-1.7298        
   switch-char-constant                               2.7616+-0.0738     ?      2.8000+-0.0961        ? might be 1.0139x slower
   switch-char                                        6.9162+-0.8870     ?      7.0967+-1.0097        ? might be 1.0261x slower
   switch-constant                                    8.1318+-0.1631            8.0712+-0.4472        
   switch-string-basic-big-var                       15.5608+-1.3076     ?     15.9170+-1.7665        ? might be 1.0229x slower
   switch-string-basic-big                           14.9167+-1.5947           14.7517+-1.6817          might be 1.0112x faster
   switch-string-basic-var                           16.1773+-1.8509           15.8918+-1.5889          might be 1.0180x faster
   switch-string-basic                               13.8016+-1.6902     ?     14.0821+-1.7849        ? might be 1.0203x slower
   switch-string-big-length-tower-var                20.6296+-1.3130           20.3771+-1.2284          might be 1.0124x faster
   switch-string-length-tower-var                    15.2662+-1.4159           15.2255+-1.2368        
   switch-string-length-tower                        12.6387+-0.0880           12.5393+-0.1764        
   switch-string-short                               14.1183+-1.7640           13.2578+-1.3292          might be 1.0649x faster
   switch                                            12.2740+-0.2487           12.0433+-0.2248          might be 1.0192x faster
   tear-off-arguments-simple                          3.4851+-0.2705            3.3212+-0.1423          might be 1.0493x faster
   tear-off-arguments                                 4.4690+-0.0361            4.4526+-0.0721        
   temporal-structure                                13.3090+-1.5777           12.3705+-0.3304          might be 1.0759x faster
   to-int32-boolean                                  13.9733+-0.5374           13.8850+-0.5287        
   try-catch-get-by-val-cloned-arguments             14.6123+-1.2164           14.2061+-0.4527          might be 1.0286x faster
   try-catch-get-by-val-direct-arguments              6.0341+-0.2334     ?      6.1515+-0.0728        ? might be 1.0195x slower
   try-catch-get-by-val-scoped-arguments              7.7464+-1.1047     ?      8.0839+-0.9557        ? might be 1.0436x slower
   undefined-property-access                        388.0720+-4.3181     ^    355.3491+-3.6221        ^ definitely 1.0921x faster
   undefined-test                                     3.1049+-0.1231            2.9772+-0.0462          might be 1.0429x faster
   unprofiled-licm                                   22.9626+-0.5814     ?     22.9842+-0.5800        ?
   varargs-call                                      15.8070+-1.3433     ?     16.9543+-1.4527        ? might be 1.0726x slower
   varargs-construct-inline                          23.1932+-1.2714           22.8490+-1.7358          might be 1.0151x faster
   varargs-construct                                 31.9290+-1.0798     ?     32.3120+-1.4279        ? might be 1.0120x slower
   varargs-inline                                     9.1115+-0.1467     !      9.5127+-0.1576        ! definitely 1.0440x slower
   varargs-strict-mode                                9.5859+-0.0867     !     10.1805+-0.1338        ! definitely 1.0620x slower
   varargs                                           10.0417+-1.0761     ?     10.0990+-0.1622        ?
   weird-inlining-const-prop                          2.3427+-0.1311            2.2876+-0.1233          might be 1.0241x faster

   &lt;geometric&gt;                                        8.7315+-0.0308            8.6923+-0.0172          might be 1.0045x faster

                                                        TipOfTree              FunctionRealloc                                  
AsmBench:
   bigfib.cpp                                       493.0593+-3.7750          490.5004+-2.1220        
   cray.c                                           439.2513+-7.6554     ^    427.6735+-1.8534        ^ definitely 1.0271x faster
   dry.c                                            491.2350+-2.0374          488.2406+-7.1499        
   FloatMM.c                                        729.8935+-3.2026     ?    732.0606+-5.5383        ?
   gcc-loops.cpp                                   4302.6537+-98.8335    ?   4302.8216+-13.3102       ?
   n-body.c                                        1009.8979+-25.9154         984.4889+-2.5985          might be 1.0258x faster
   Quicksort.c                                      450.5911+-11.1394    ^    435.3630+-2.3627        ^ definitely 1.0350x faster
   stepanov_container.cpp                          3584.0342+-16.9142        3567.1348+-10.9824       
   Towers.c                                         265.6820+-2.2044          265.4826+-9.6995        

   &lt;geometric&gt;                                      806.6878+-3.3973     ^    797.7624+-3.6862        ^ definitely 1.0112x faster

                                                        TipOfTree              FunctionRealloc                                  
CompressionBench:
   huffman                                          369.7833+-8.1116     !    383.1773+-2.7191        ! definitely 1.0362x slower
   arithmetic-simple                                398.6577+-2.6603     ?    401.0917+-8.3839        ?
   arithmetic-precise                               299.4504+-2.5867          297.3054+-3.8346        
   arithmetic-complex-precise                       298.4787+-4.0636     ?    300.7178+-3.7527        ?
   arithmetic-precise-order-0                       428.0608+-4.5119          427.2370+-5.7287        
   arithmetic-precise-order-1                       327.3994+-3.5718     ?    328.2664+-7.5618        ?
   arithmetic-precise-order-2                       364.8403+-3.5319     ?    367.4930+-4.8679        ?
   arithmetic-simple-order-1                        424.3108+-4.3663     ?    426.0158+-6.7366        ?
   arithmetic-simple-order-2                        471.4926+-1.9479     ?    472.7461+-3.8261        ?
   lz-string                                        328.2074+-23.2972    ?    332.5008+-22.7965       ? might be 1.0131x slower

   &lt;geometric&gt;                                      366.8501+-2.6268     ?    369.4032+-2.3654        ? might be 1.0070x slower

                                                        TipOfTree              FunctionRealloc                                  

                                                        TipOfTree              FunctionRealloc                                  
Geomean of preferred means:
   &lt;scaled-result&gt;                                   64.0958+-0.1805           63.8925+-0.1926          might be 1.0032x faster</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1083695</commentid>
    <comment_count>18</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-04-08 12:39:12 -0700</bug_when>
    <thetext>Attachment 250374 did not pass style-queue:


ERROR: Source/JavaScriptCore/runtime/InferredValue.h:53:  The parameter name &quot;globalObject&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 1 in 74 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>1083732</commentid>
    <comment_count>19</comment_count>
      <attachid>250384</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-04-08 14:14:57 -0700</bug_when>
    <thetext>Created attachment 250384
fix some builds</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1083760</commentid>
    <comment_count>20</comment_count>
      <attachid>250392</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-04-08 16:05:13 -0700</bug_when>
    <thetext>Created attachment 250392
more fixes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1083761</commentid>
    <comment_count>21</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2015-04-08 16:07:31 -0700</bug_when>
    <thetext>Attachment 250392 did not pass style-queue:


ERROR: Source/JavaScriptCore/runtime/JSFunction.h:63:  The parameter name &quot;vm&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/runtime/JSFunction.h:63:  The parameter name &quot;executable&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
ERROR: Source/JavaScriptCore/runtime/JSFunction.h:63:  The parameter name &quot;scope&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 3 in 75 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>1083835</commentid>
    <comment_count>22</comment_count>
      <attachid>250407</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-04-08 20:43:12 -0700</bug_when>
    <thetext>Created attachment 250407
fix style</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1084028</commentid>
    <comment_count>23</comment_count>
      <attachid>250407</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2015-04-09 13:22:06 -0700</bug_when>
    <thetext>Comment on attachment 250407
fix style

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

r=me

&gt; Source/JavaScriptCore/ChangeLog:35
&gt; +          constant folding. Second, it means that we will detect a singlton scope even if it is

singlton =&gt; singleton

&gt; Source/JavaScriptCore/ChangeLog:50
&gt; +        change, block scoping would had had to have some story for the function reentry watchpoint on any

would had had to have =&gt; would have needed

&gt; Source/JavaScriptCore/bytecode/VariableWriteFireDetail.h:50
&gt; +private:
&gt; +    JSObject* m_object;
&gt; +    const PropertyName&amp; m_name;

Would be nice to &quot;void* operator new(size_t) = delete;&quot; to help document and enforce that this is a stack-only thing.

&gt; Source/JavaScriptCore/bytecode/Watchpoint.h:91
&gt; +    WatchpointState stateOnMainThread() const

You can run JS on a non-main thread, so we should probably call this &quot;stateOnJSThread&quot;.

&gt; Source/JavaScriptCore/bytecode/Watchpoint.h:233
&gt; +    // Fast way of getting the state, which only works from the main thread.
&gt; +    WatchpointState stateOnMainThread() const

only works from the JS execution thread.

stateOnJSThread.

&gt; Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:3503
&gt; +                    JSValue value = globalObject-&gt;variableAt(offset).get();

What happens if the JS thread resizes the global object&apos;s segmented vector while the compilation thread tries to read from it. Might the compilation thread try to read from free&apos;d memory? Individual segments will not be deleted in a segmented vector, but the parent vector that points to the individual segments may be deleted.

&gt; Source/JavaScriptCore/dfg/DFGGraph.cpp:1056
&gt; +        value = activation-&gt;variableAt(offset).get();

Same concurrency question about variableAt.

&gt; Source/JavaScriptCore/runtime/InferredValue.h:110
&gt; +    class ValueCleanup : public UnconditionalFinalizer {

Please use WTF_MAKE_FAST_ALLOCATED.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1084514</commentid>
    <comment_count>24</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-04-11 07:52:05 -0700</bug_when>
    <thetext>(In reply to comment #23)
&gt; Comment on attachment 250407 [details]
&gt; fix style
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=250407&amp;action=review
&gt; 
&gt; r=me
&gt; 
&gt; &gt; Source/JavaScriptCore/ChangeLog:35
&gt; &gt; +          constant folding. Second, it means that we will detect a singlton scope even if it is
&gt; 
&gt; singlton =&gt; singleton
&gt; 
&gt; &gt; Source/JavaScriptCore/ChangeLog:50
&gt; &gt; +        change, block scoping would had had to have some story for the function reentry watchpoint on any
&gt; 
&gt; would had had to have =&gt; would have needed
&gt; 
&gt; &gt; Source/JavaScriptCore/bytecode/VariableWriteFireDetail.h:50
&gt; &gt; +private:
&gt; &gt; +    JSObject* m_object;
&gt; &gt; +    const PropertyName&amp; m_name;
&gt; 
&gt; Would be nice to &quot;void* operator new(size_t) = delete;&quot; to help document and
&gt; enforce that this is a stack-only thing.

Interesting.  Will do@

&gt; 
&gt; &gt; Source/JavaScriptCore/bytecode/Watchpoint.h:91
&gt; &gt; +    WatchpointState stateOnMainThread() const
&gt; 
&gt; You can run JS on a non-main thread, so we should probably call this
&gt; &quot;stateOnJSThread&quot;.
&gt; 
&gt; &gt; Source/JavaScriptCore/bytecode/Watchpoint.h:233
&gt; &gt; +    // Fast way of getting the state, which only works from the main thread.
&gt; &gt; +    WatchpointState stateOnMainThread() const
&gt; 
&gt; only works from the JS execution thread.
&gt; 
&gt; stateOnJSThread.

OK!

&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:3503
&gt; &gt; +                    JSValue value = globalObject-&gt;variableAt(offset).get();
&gt; 
&gt; What happens if the JS thread resizes the global object&apos;s segmented vector
&gt; while the compilation thread tries to read from it. Might the compilation
&gt; thread try to read from free&apos;d memory? Individual segments will not be
&gt; deleted in a segmented vector, but the parent vector that points to the
&gt; individual segments may be deleted.

You found a bug!  It&apos;s a shamefully self-inflicted one, too.  The solution is just to say:

JSValue value = JSValue::decode(*bitwise_cast&lt;EncodedJSValue*&gt;(operand));

That&apos;s because the bytecode has a pointer to the global inside it.  Currently, we assert equivalence between &amp;variableAt(offset) and that expression.  So, we should remove the assertion and just use the bytecode&apos;s pointer operand directly.

JSSegmentedVariableObject is unusual in this regard - the rest of our object models allow for concurrent access because all interior data structures are subject to GC and will not be invalidated until a GC flip, which synchronizes correctly with compiler threads (by waiting for them to either complete, or safepoint into LLVM).  I&apos;ll add a FIXME comment in JSSegmentedVariableObject and file a bug about that.  It&apos;s an asymptomatic bug right now because the compiler accesses globals directly by pointer (via the operand in the bytecode and in the case of Get/PutGlobalVar, a pointer operand in DFG IR), but it&apos;s a surprising and undesirable thing so we should change it eventually.

&gt; 
&gt; &gt; Source/JavaScriptCore/dfg/DFGGraph.cpp:1056
&gt; &gt; +        value = activation-&gt;variableAt(offset).get();
&gt; 
&gt; Same concurrency question about variableAt.

Nope!  Activations use a more sensible object model - in fact the properties are just inline and there is no resizing - so this has no such concurrency issue.

&gt; 
&gt; &gt; Source/JavaScriptCore/runtime/InferredValue.h:110
&gt; &gt; +    class ValueCleanup : public UnconditionalFinalizer {
&gt; 
&gt; Please use WTF_MAKE_FAST_ALLOCATED.

OK!

Thanks for the review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1084973</commentid>
    <comment_count>25</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-04-13 15:14:46 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/182759</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1084990</commentid>
    <comment_count>26</comment_count>
    <who name="Brent Fulgham">bfulgham</who>
    <bug_when>2015-04-13 16:06:07 -0700</bug_when>
    <thetext>I don&apos;t know why EWS didn&apos;t catch this, but we&apos;re getting Windows build failure with this patch:

error C2248: &apos;JSC::InferredValue::ValueCleanup&apos; : cannot access private class declared in class &apos;JSC::InferredValue&apos; (..\runtime\InferredValue.cpp)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1084991</commentid>
    <comment_count>27</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2015-04-13 16:08:49 -0700</bug_when>
    <thetext>(In reply to comment #26)
&gt; I don&apos;t know why EWS didn&apos;t catch this, but we&apos;re getting Windows build
&gt; failure with this patch:
&gt; 
&gt; error C2248: &apos;JSC::InferredValue::ValueCleanup&apos; : cannot access private
&gt; class declared in class &apos;JSC::InferredValue&apos; (..\runtime\InferredValue.cpp)

I think I just fixed this.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>249753</attachid>
            <date>2015-03-30 11:56:59 -0700</date>
            <delta_ts>2015-03-30 15:30:05 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>59883</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QuanNvbgo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0
Lmpzb24JKHJldmlzaW9uIDE4MjA2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9CeXRlY29kZUxpc3QuanNvbgkod29ya2luZyBjb3B5KQpAQCAtNiw3ICs2LDYgQEAKICAgICAg
ICAgICAgIHsgIm5hbWUiIDogIm9wX2VudGVyIiwgImxlbmd0aCIgOiAxIH0sCiAgICAgICAgICAg
ICB7ICJuYW1lIiA6ICJvcF9jcmVhdGVfbGV4aWNhbF9lbnZpcm9ubWVudCIsICJsZW5ndGgiIDog
MyB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfZ2V0X3Njb3BlIiwgImxlbmd0aCIgOiAy
IH0sCi0gICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF90b3VjaF9lbnRyeSIsICJsZW5ndGgiIDog
MSB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfY3JlYXRlX2RpcmVjdF9hcmd1bWVudHMi
LCAibGVuZ3RoIiA6IDIgfSwKICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX2NyZWF0ZV9zY29w
ZWRfYXJndW1lbnRzIiwgImxlbmd0aCIgOiAzIH0sCiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJv
cF9jcmVhdGVfb3V0X29mX2JhbmRfYXJndW1lbnRzIiwgImxlbmd0aCIgOiAyIH0sCkBAIC0xMDMs
NyArMTAyLDcgQEAKICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX2NvbnN0cnVjdF92YXJhcmdz
IiwgImxlbmd0aCIgOiA5IH0sCiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9zdHJjYXQiLCAi
bGVuZ3RoIiA6IDQgfSwKICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX3RvX3ByaW1pdGl2ZSIs
ICJsZW5ndGgiIDogMyB9LAotICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfcmVzb2x2ZV9zY29w
ZSIsICJsZW5ndGgiIDogNyB9LAorICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfcmVzb2x2ZV9z
Y29wZSIsICJsZW5ndGgiIDogNiB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfZ2V0X2Zy
b21fc2NvcGUiLCAibGVuZ3RoIiA6IDggfSwKICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX3B1
dF90b19zY29wZSIsICJsZW5ndGgiIDogNyB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3Bf
Z2V0X2Zyb21fYXJndW1lbnRzIiwgImxlbmd0aCIgOiA1IH0sCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMTgyMDY5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE0ODQsNyArMTQ4NCw2IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wQnl0ZWNvZGUoCiAg
ICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMsICVzLCAldTwlc3wlcz4sICVkIiwgcmVnaXN0
ZXJOYW1lKHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShzY29wZSkuZGF0YSgpLCBpZE5hbWUoaWQw
LCBpZGVudGlmaWVyKGlkMCkpLmRhdGEoKSwKICAgICAgICAgICAgICAgICBtb2RlQW5kVHlwZS5v
cGVyYW5kKCksIHJlc29sdmVNb2RlTmFtZShtb2RlQW5kVHlwZS5tb2RlKCkpLCByZXNvbHZlVHlw
ZU5hbWUobW9kZUFuZFR5cGUudHlwZSgpKSwKICAgICAgICAgICAgICAgICBkZXB0aCk7Ci0gICAg
ICAgICAgICArK2l0OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2Fz
ZSBvcF9nZXRfZnJvbV9zY29wZTogewpAQCAtMTkzMSw4ICsxOTMwLDYgQEAgQ29kZUJsb2NrOjpD
b2RlQmxvY2soU2NyaXB0RXhlY3V0YWJsZSogbwogICAgICAgICAgICAgUmVzb2x2ZU9wIG9wID0g
SlNTY29wZTo6YWJzdHJhY3RSZXNvbHZlKG1fZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIG5l
ZWRzQWN0aXZhdGlvbigpLCBzY29wZSwgaWRlbnQsIEdldCwgdHlwZSk7CiAgICAgICAgICAgICBp
bnN0cnVjdGlvbnNbaSArIDRdLnUub3BlcmFuZCA9IG9wLnR5cGU7CiAgICAgICAgICAgICBpbnN0
cnVjdGlvbnNbaSArIDVdLnUub3BlcmFuZCA9IG9wLmRlcHRoOwotICAgICAgICAgICAgaWYgKG9w
LmxleGljYWxFbnZpcm9ubWVudCkKLSAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIDZd
LnUubGV4aWNhbEVudmlyb25tZW50LnNldCgqdm0oKSwgb3duZXJFeGVjdXRhYmxlLCBvcC5sZXhp
Y2FsRW52aXJvbm1lbnQpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIApAQCAtMjUy
MCwxNSArMjUxNyw2IEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSgK
ICAgICAgICAgICAgICAgICBjdXJJbnN0cnVjdGlvblszXS51LnRvVGhpc1N0YXR1cyA9IG1lcmdl
KAogICAgICAgICAgICAgICAgICAgICBjdXJJbnN0cnVjdGlvblszXS51LnRvVGhpc1N0YXR1cywg
VG9UaGlzQ2xlYXJlZEJ5R0MpOwogICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
Y2FzZSBvcF9yZXNvbHZlX3Njb3BlOiB7Ci0gICAgICAgICAgICAgICAgV3JpdGVCYXJyaWVyQmFz
ZTxKU0xleGljYWxFbnZpcm9ubWVudD4mIGxleGljYWxFbnZpcm9ubWVudCA9IGN1ckluc3RydWN0
aW9uWzZdLnUubGV4aWNhbEVudmlyb25tZW50OwotICAgICAgICAgICAgICAgIGlmICghbGV4aWNh
bEVudmlyb25tZW50IHx8IEhlYXA6OmlzTWFya2VkKGxleGljYWxFbnZpcm9ubWVudC5nZXQoKSkp
Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIGlmIChPcHRpb25z
Ojp2ZXJib3NlT1NSKCkpCi0gICAgICAgICAgICAgICAgICAgIGRhdGFMb2dGKCJDbGVhcmluZyBk
ZWFkIGxleGljYWxFbnZpcm9ubWVudCAlcC5cbiIsIGxleGljYWxFbnZpcm9ubWVudC5nZXQoKSk7
Ci0gICAgICAgICAgICAgICAgbGV4aWNhbEVudmlyb25tZW50LmNsZWFyKCk7Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9CiAgICAgICAgICAgICBjYXNlIG9wX2dldF9mcm9t
X3Njb3BlOgogICAgICAgICAgICAgY2FzZSBvcF9wdXRfdG9fc2NvcGU6IHsKICAgICAgICAgICAg
ICAgICBSZXNvbHZlTW9kZUFuZFR5cGUgbW9kZUFuZFR5cGUgPQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmNwcAkocmV2aXNpb24gMTgyMDY5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNDEsNiArMTQxLDE4IEBAIHZvaWQgQ29kZU9yaWdpbjo6ZHVtcEluQ29udGV4
dChQcmludFN0cmUKICAgICBkdW1wKG91dCk7CiB9CiAKK0pTRnVuY3Rpb24qIElubGluZUNhbGxG
cmFtZTo6Y2FsbGVlQ29uc3RhbnQoKSBjb25zdAoreworICAgIGlmIChjYWxsZWVSZWNvdmVyeS5p
c0NvbnN0YW50KCkpCisgICAgICAgIHJldHVybiBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNhbGxlZVJl
Y292ZXJ5LmNvbnN0YW50KCkpOworICAgIHJldHVybiBudWxscHRyOworfQorCit2b2lkIElubGlu
ZUNhbGxGcmFtZTo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAg
dmlzaXRvci5hcHBlbmQoJmV4ZWN1dGFibGUpOworfQorCiBKU0Z1bmN0aW9uKiBJbmxpbmVDYWxs
RnJhbWU6OmNhbGxlZUZvckNhbGxGcmFtZShFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CiB7CiAgICAg
cmV0dXJuIGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY2FsbGVlUmVjb3ZlcnkucmVjb3ZlcihleGVjKSk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmgJKHJl
dmlzaW9uIDE4MjA2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3Jp
Z2luLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDYgQEAKIAogI2luY2x1ZGUgIkNvZGVC
bG9ja0hhc2guaCIKICNpbmNsdWRlICJDb2RlU3BlY2lhbGl6YXRpb25LaW5kLmgiCi0jaW5jbHVk
ZSAiSlNGdW5jdGlvbi5oIgogI2luY2x1ZGUgIlZhbHVlUmVjb3ZlcnkuaCIKICNpbmNsdWRlICJX
cml0ZUJhcnJpZXIuaCIKICNpbmNsdWRlIDx3dGYvQml0VmVjdG9yLmg+CkBAIC0yMDcsMTcgKzIw
Niw4IEBAIHN0cnVjdCBJbmxpbmVDYWxsRnJhbWUgewogICAgIAogICAgIENvZGVTcGVjaWFsaXph
dGlvbktpbmQgc3BlY2lhbGl6YXRpb25LaW5kKCkgY29uc3QgeyByZXR1cm4gc3BlY2lhbGl6YXRp
b25LaW5kRm9yKHN0YXRpY19jYXN0PEtpbmQ+KGtpbmQpKTsgfQogCi0gICAgSlNGdW5jdGlvbiog
Y2FsbGVlQ29uc3RhbnQoKSBjb25zdAotICAgIHsKLSAgICAgICAgaWYgKGNhbGxlZVJlY292ZXJ5
LmlzQ29uc3RhbnQoKSkKLSAgICAgICAgICAgIHJldHVybiBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNh
bGxlZVJlY292ZXJ5LmNvbnN0YW50KCkpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAg
ICB2b2lkIHZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQotICAgIHsKLSAgICAg
ICAgdmlzaXRvci5hcHBlbmQoJmV4ZWN1dGFibGUpOwotICAgIH0KKyAgICBKU0Z1bmN0aW9uKiBj
YWxsZWVDb25zdGFudCgpIGNvbnN0OworICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0
b3ImKTsKICAgICAKICAgICAvLyBHZXQgdGhlIGNhbGxlZSBnaXZlbiBhIG1hY2hpbmUgY2FsbCBm
cmFtZSB0byB3aGljaCB0aGlzIElubGluZUNhbGxGcmFtZSBiZWxvbmdzLgogICAgIEpTRnVuY3Rp
b24qIGNhbGxlZUZvckNhbGxGcmFtZShFeGVjU3RhdGUqKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0cnVjdGlvbi5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0cnVjdGlvbi5oCShyZXZpc2lvbiAxODIwNjkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5zdHJ1Y3Rpb24uaAkod29ya2lu
ZyBjb3B5KQpAQCAtNDYsNyArNDYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIGNsYXNzIEFycmF5QWxs
b2NhdGlvblByb2ZpbGU7CiBjbGFzcyBBcnJheVByb2ZpbGU7CiBjbGFzcyBPYmplY3RBbGxvY2F0
aW9uUHJvZmlsZTsKLWNsYXNzIFZhcmlhYmxlV2F0Y2hwb2ludFNldDsKK2NsYXNzIFdhdGNocG9p
bnRTZXQ7CiBzdHJ1Y3QgTExJbnRDYWxsTGlua0luZm87CiBzdHJ1Y3QgVmFsdWVQcm9maWxlOwog
CkBAIC0xMTcsOCArMTE3LDcgQEAgc3RydWN0IEluc3RydWN0aW9uIHsKICAgICAgICAgQXJyYXlQ
cm9maWxlKiBhcnJheVByb2ZpbGU7CiAgICAgICAgIEFycmF5QWxsb2NhdGlvblByb2ZpbGUqIGFy
cmF5QWxsb2NhdGlvblByb2ZpbGU7CiAgICAgICAgIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlKiBv
YmplY3RBbGxvY2F0aW9uUHJvZmlsZTsKLSAgICAgICAgVmFyaWFibGVXYXRjaHBvaW50U2V0KiB3
YXRjaHBvaW50U2V0OwotICAgICAgICBXcml0ZUJhcnJpZXJCYXNlPEpTTGV4aWNhbEVudmlyb25t
ZW50PiBsZXhpY2FsRW52aXJvbm1lbnQ7CisgICAgICAgIFdhdGNocG9pbnRTZXQqIHdhdGNocG9p
bnRTZXQ7CiAgICAgICAgIHZvaWQqIHBvaW50ZXI7CiAgICAgICAgIGJvb2wqIHByZWRpY2F0ZVBv
aW50ZXI7CiAgICAgICAgIFRvVGhpc1N0YXR1cyB0b1RoaXNTdGF0dXM7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFyaWFibGVXYXRjaHBvaW50U2V0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFyaWFibGVXYXRjaHBvaW50
U2V0LmNwcAkocmV2aXNpb24gMTgyMDY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1ZhcmlhYmxlV2F0Y2hwb2ludFNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1
IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTM1LDE0ICszNSw5
IEBAIHZvaWQgVmFyaWFibGVXcml0ZUZpcmVEZXRhaWw6OmR1bXAoUHJpbnQKICAgICBvdXQucHJp
bnQoIldyaXRlIHRvICIsIG1fbmFtZSwgIiBpbiAiLCBKU1ZhbHVlKG1fb2JqZWN0KSk7CiB9CiAK
LXZvaWQgVmFyaWFibGVXYXRjaHBvaW50U2V0Ojpub3RpZnlXcml0ZShWTSYgdm0sIEpTVmFsdWUg
dmFsdWUsIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBjb25zdCBQcm9wZXJ0eU5hbWUmIHByb3BlcnR5
TmFtZSkKK3ZvaWQgVmFyaWFibGVXYXRjaHBvaW50U2V0Ojpub3RpZnlXcml0ZShWTSYgdm0sIEpT
Q2VsbCogb3duZXIsIEpTVmFsdWUgdmFsdWUsIGNvbnN0IGNoYXIqIHJlYXNvbikKIHsKLSAgICBu
b3RpZnlXcml0ZSh2bSwgdmFsdWUsIFZhcmlhYmxlV3JpdGVGaXJlRGV0YWlsKGJhc2VPYmplY3Qs
IHByb3BlcnR5TmFtZSkpOwotfQotCi12b2lkIFZhcmlhYmxlV2F0Y2hwb2ludFNldDo6bm90aWZ5
V3JpdGUoVk0mIHZtLCBKU1ZhbHVlIHZhbHVlLCBjb25zdCBjaGFyKiByZWFzb24pCi17Ci0gICAg
bm90aWZ5V3JpdGUodm0sIHZhbHVlLCBTdHJpbmdGaXJlRGV0YWlsKHJlYXNvbikpOworICAgIG5v
dGlmeVdyaXRlKHZtLCBvd25lciwgdmFsdWUsIFN0cmluZ0ZpcmVEZXRhaWwocmVhc29uKSk7CiB9
CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1ZhcmlhYmxlV2F0Y2hwb2ludFNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9WYXJpYWJsZVdhdGNocG9pbnRTZXQuaAkocmV2aXNpb24gMTgyMDY5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhcmlhYmxlV2F0Y2hwb2ludFNl
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykg
MjAxMi0yMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAo
QykgMjAxMi0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRp
c3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdp
dGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBm
b2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzIsMjkgKzMyLDEyIEBACiBuYW1lc3BhY2UgSlNDIHsK
IAogY2xhc3MgSlNPYmplY3Q7Ci1jbGFzcyBTeW1ib2xUYWJsZTsKLQotY2xhc3MgVmFyaWFibGVX
cml0ZUZpcmVEZXRhaWwgOiBwdWJsaWMgRmlyZURldGFpbCB7Ci1wdWJsaWM6Ci0gICAgVmFyaWFi
bGVXcml0ZUZpcmVEZXRhaWwoSlNPYmplY3QqIG9iamVjdCwgY29uc3QgUHJvcGVydHlOYW1lJiBu
YW1lKQotICAgICAgICA6IG1fb2JqZWN0KG9iamVjdCkKLSAgICAgICAgLCBtX25hbWUobmFtZSkK
LSAgICB7Ci0gICAgfQotICAgIAotICAgIHZpcnR1YWwgdm9pZCBkdW1wKFByaW50U3RyZWFtJikg
Y29uc3Qgb3ZlcnJpZGU7Ci0KLXByaXZhdGU6Ci0gICAgSlNPYmplY3QqIG1fb2JqZWN0OwotICAg
IGNvbnN0IFByb3BlcnR5TmFtZSYgbV9uYW1lOwotfTsKIAogY2xhc3MgVmFyaWFibGVXYXRjaHBv
aW50U2V0IDogcHVibGljIFdhdGNocG9pbnRTZXQgewogICAgIGZyaWVuZCBjbGFzcyBMTEludE9m
ZnNldHNFeHRyYWN0b3I7CiBwdWJsaWM6Ci0gICAgVmFyaWFibGVXYXRjaHBvaW50U2V0KFN5bWJv
bFRhYmxlJiBzeW1ib2xUYWJsZSkKKyAgICBWYXJpYWJsZVdhdGNocG9pbnRTZXQoKQogICAgICAg
ICA6IFdhdGNocG9pbnRTZXQoQ2xlYXJXYXRjaHBvaW50KQotICAgICAgICAsIG1fc3ltYm9sVGFi
bGUoc3ltYm9sVGFibGUpCiAgICAgewogICAgIH0KICAgICAKQEAgLTczLDkgKzU2LDggQEAgcHVi
bGljOgogICAgIC8vICAgICAgICB5b3Ugd2lsbCBoYXZlIGJlZW4gbm90aWZpZWQgdGhhdCB0aGUg
d2F0Y2hwb2ludCB3YXMgZmlyZWQuCiAgICAgSlNWYWx1ZSBpbmZlcnJlZFZhbHVlKCkgY29uc3Qg
eyByZXR1cm4gbV9pbmZlcnJlZFZhbHVlLmdldCgpOyB9CiAgICAgCi0gICAgdm9pZCBub3RpZnlX
cml0ZShWTSYsIEpTVmFsdWUsIGNvbnN0IEZpcmVEZXRhaWwmKTsKLSAgICBKU19FWFBPUlRfUFJJ
VkFURSB2b2lkIG5vdGlmeVdyaXRlKFZNJiwgSlNWYWx1ZSwgSlNPYmplY3QqIGJhc2VPYmplY3Qs
IGNvbnN0IFByb3BlcnR5TmFtZSYpOwotICAgIHZvaWQgbm90aWZ5V3JpdGUoVk0mLCBKU1ZhbHVl
LCBjb25zdCBjaGFyKiByZWFzb24pOworICAgIHZvaWQgbm90aWZ5V3JpdGUoVk0mLCBKU0NlbGwq
IG93bmVyLCBKU1ZhbHVlLCBjb25zdCBGaXJlRGV0YWlsJik7CisgICAgdm9pZCBub3RpZnlXcml0
ZShWTSYsIEpTQ2VsbCogb3duZXIsIEpTVmFsdWUsIGNvbnN0IGNoYXIqIHJlYXNvbik7CiAgICAg
CiAgICAgdm9pZCBpbnZhbGlkYXRlKGNvbnN0IEZpcmVEZXRhaWwmIGRldGFpbCkKICAgICB7CkBA
IC04MywxNSArNjUsMTkgQEAgcHVibGljOgogICAgICAgICBXYXRjaHBvaW50U2V0OjppbnZhbGlk
YXRlKGRldGFpbCk7CiAgICAgfQogICAgIAotICAgIHZvaWQgZmluYWxpemVVbmNvbmRpdGlvbmFs
bHkoY29uc3QgRmlyZURldGFpbCYgZGV0YWlsKQorICAgIGJvb2wgbmVlZFRvRmluYWxpemUoKQog
ICAgIHsKICAgICAgICAgQVNTRVJUKCEhbV9pbmZlcnJlZFZhbHVlID09IChzdGF0ZSgpID09IElz
V2F0Y2hlZCkpOwogICAgICAgICBpZiAoIW1faW5mZXJyZWRWYWx1ZSkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIG1faW5mZXJyZWRWYWx1ZS5nZXQoKS5pc0NlbGwo
KTsKKyAgICB9CisgICAgCisgICAgdm9pZCBmaW5hbGl6ZVVuY29uZGl0aW9uYWxseShjb25zdCBG
aXJlRGV0YWlsJiBkZXRhaWwpCisgICAgeworICAgICAgICBpZiAoIW5lZWRUb0ZpbmFsaXplKCkp
CiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIEpTVmFsdWUgaW5mZXJyZWRWYWx1ZSA9IG1f
aW5mZXJyZWRWYWx1ZS5nZXQoKTsKLSAgICAgICAgaWYgKCFpbmZlcnJlZFZhbHVlLmlzQ2VsbCgp
KQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBKU0NlbGwqIGNlbGwgPSBpbmZlcnJlZFZh
bHVlLmFzQ2VsbCgpOworICAgICAgICBKU0NlbGwqIGNlbGwgPSBtX2luZmVycmVkVmFsdWUuZ2V0
KCkuYXNDZWxsKCk7CiAgICAgICAgIGlmIChIZWFwOjppc01hcmtlZChjZWxsKSkKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgaW52YWxpZGF0ZShkZXRhaWwpOwpAQCAtMTAwLDcgKzg2LDYg
QEAgcHVibGljOgogICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogYWRkcmVzc09mSW5mZXJyZWRW
YWx1ZSgpIHsgcmV0dXJuICZtX2luZmVycmVkVmFsdWU7IH0KICAgICAKIHByaXZhdGU6Ci0gICAg
U3ltYm9sVGFibGUmIG1fc3ltYm9sVGFibGU7CiAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+IG1f
aW5mZXJyZWRWYWx1ZTsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9WYXJpYWJsZVdhdGNocG9pbnRTZXRJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhcmlhYmxlV2F0Y2hwb2ludFNldElubGluZXMuaAkocmV2
aXNpb24gMTgyMDY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhcmlhYmxl
V2F0Y2hwb2ludFNldElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8q
Ci0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsMTcgKzI2LDE3IEBACiAj
aWZuZGVmIFZhcmlhYmxlV2F0Y2hwb2ludFNldElubGluZXNfaAogI2RlZmluZSBWYXJpYWJsZVdh
dGNocG9pbnRTZXRJbmxpbmVzX2gKIAotI2luY2x1ZGUgIlN5bWJvbFRhYmxlLmgiCiAjaW5jbHVk
ZSAiVmFyaWFibGVXYXRjaHBvaW50U2V0LmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCi1pbmxpbmUg
dm9pZCBWYXJpYWJsZVdhdGNocG9pbnRTZXQ6Om5vdGlmeVdyaXRlKFZNJiB2bSwgSlNWYWx1ZSB2
YWx1ZSwgY29uc3QgRmlyZURldGFpbCYgZGV0YWlsKQoraW5saW5lIHZvaWQgVmFyaWFibGVXYXRj
aHBvaW50U2V0Ojpub3RpZnlXcml0ZSgKKyAgICBWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEpTVmFs
dWUgdmFsdWUsIGNvbnN0IEZpcmVEZXRhaWwmIGRldGFpbCkKIHsKICAgICBBU1NFUlQoISF2YWx1
ZSk7CiAgICAgc3dpdGNoIChzdGF0ZSgpKSB7CiAgICAgY2FzZSBDbGVhcldhdGNocG9pbnQ6Ci0g
ICAgICAgIG1faW5mZXJyZWRWYWx1ZS5zZXQodm0sICZtX3N5bWJvbFRhYmxlLCB2YWx1ZSk7Cisg
ICAgICAgIG1faW5mZXJyZWRWYWx1ZS5zZXQodm0sIG93bmVyLCB2YWx1ZSk7CiAgICAgICAgIHN0
YXJ0V2F0Y2hpbmcoKTsKICAgICAgICAgcmV0dXJuOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvVmFyaWFibGVXcml0ZUZpcmVEZXRhaWwuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYXJpYWJsZVdyaXRlRmlyZURldGFpbC5j
cHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFyaWFi
bGVXcml0ZUZpcmVEZXRhaWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzkgQEAKKy8q
CisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
KyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBg
YEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBN
RVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBB
UkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRS
SUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBT
UEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09E
UyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJ
TkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBP
RiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRP
UlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5Z
IFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VE
IE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIlZhcmlhYmxlV3JpdGVGaXJlRGV0YWlsLmgiCisKKyNpbmNsdWRl
ICJKU0NJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeworCit2b2lkIFZhcmlhYmxlV3JpdGVG
aXJlRGV0YWlsOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50
KCJXcml0ZSB0byAiLCBtX25hbWUsICIgaW4gIiwgSlNWYWx1ZShtX29iamVjdCkpOworfQorCit9
IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1ZhcmlhYmxlV3JpdGVGaXJlRGV0YWlsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1ZhcmlhYmxlV3JpdGVGaXJlRGV0YWlsLmgJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFyaWFibGVXcml0ZUZpcmVEZXRhaWwu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgVmFyaWFibGVXcml0ZUZpcmVEZXRhaWxf
aAorI2RlZmluZSBWYXJpYWJsZVdyaXRlRmlyZURldGFpbF9oCisKKyNpbmNsdWRlICJXYXRjaHBv
aW50LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBKU09iamVjdCo7CitjbGFzcyBQcm9w
ZXJ0eU5hbWU7CisKK2NsYXNzIFZhcmlhYmxlV3JpdGVGaXJlRGV0YWlsIDogcHVibGljIEZpcmVE
ZXRhaWwgeworcHVibGljOgorICAgIFZhcmlhYmxlV3JpdGVGaXJlRGV0YWlsKEpTT2JqZWN0KiBv
YmplY3QsIGNvbnN0IFByb3BlcnR5TmFtZSYgbmFtZSkKKyAgICAgICAgOiBtX29iamVjdChvYmpl
Y3QpCisgICAgICAgICwgbV9uYW1lKG5hbWUpCisgICAgeworICAgIH0KKyAgICAKKyAgICB2aXJ0
dWFsIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworCitwcml2YXRlOgor
ICAgIEpTT2JqZWN0KiBtX29iamVjdDsKKyAgICBjb25zdCBQcm9wZXJ0eU5hbWUmIG1fbmFtZTsK
K307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gVmFyaWFibGVXcml0ZUZpcmVE
ZXRhaWxfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1dhdGNocG9pbnQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvV2F0Y2hwb2lu
dC5oCShyZXZpc2lvbiAxODIwNjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
V2F0Y2hwb2ludC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjUsMjAgKzEyNSwyNCBAQCBwdWJsaWM6
CiAgICAgLy8gc2V0IHdhdGNocG9pbnRzIHRoYXQgd2UgYmVsaWV2ZSB3aWxsIGFjdHVhbGx5IGJl
IGZpcmVkLgogICAgIHZvaWQgc3RhcnRXYXRjaGluZygpCiAgICAgewotICAgICAgICBBU1NFUlQo
c3RhdGUoKSAhPSBJc0ludmFsaWRhdGVkKTsKKyAgICAgICAgQVNTRVJUKG1fc3RhdGUgIT0gSXNJ
bnZhbGlkYXRlZCk7CisgICAgICAgIGlmIChtX3N0YXRlID09IElzV2F0Y2hlZCkKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKICAgICAgICAgbV9z
dGF0ZSA9IElzV2F0Y2hlZDsKKyAgICAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKICAgICB9
CiAgICAgCiAgICAgdm9pZCBmaXJlQWxsKGNvbnN0IEZpcmVEZXRhaWwmIGRldGFpbCkKICAgICB7
Ci0gICAgICAgIGlmIChMSUtFTFkoc3RhdGUoKSAhPSBJc1dhdGNoZWQpKQorICAgICAgICBpZiAo
TElLRUxZKG1fc3RhdGUgIT0gSXNXYXRjaGVkKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAg
ICAgZmlyZUFsbFNsb3coZGV0YWlsKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBmaXJlQWxsKGNv
bnN0IGNoYXIqIHJlYXNvbikKICAgICB7Ci0gICAgICAgIGlmIChMSUtFTFkoc3RhdGUoKSAhPSBJ
c1dhdGNoZWQpKQorICAgICAgICBpZiAoTElLRUxZKG1fc3RhdGUgIT0gSXNXYXRjaGVkKSkKICAg
ICAgICAgICAgIHJldHVybjsKICAgICAgICAgZmlyZUFsbFNsb3cocmVhc29uKTsKICAgICB9CkBA
IC0xNTEsMTMgKzE1NSwyMyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBmaXJlQWxsKGRldGFpbCk7
CiAgICAgfQogICAgIAorICAgIHZvaWQgdG91Y2goY29uc3QgY2hhciogcmVhc29uKQorICAgIHsK
KyAgICAgICAgdG91Y2goU3RyaW5nRmlyZURldGFpbChyZWFzb24pKTsKKyAgICB9CisgICAgCiAg
ICAgdm9pZCBpbnZhbGlkYXRlKGNvbnN0IEZpcmVEZXRhaWwmIGRldGFpbCkKICAgICB7CiAgICAg
ICAgIGlmIChzdGF0ZSgpID09IElzV2F0Y2hlZCkKICAgICAgICAgICAgIGZpcmVBbGwoZGV0YWls
KTsKICAgICAgICAgbV9zdGF0ZSA9IElzSW52YWxpZGF0ZWQ7CiAgICAgfQotCisgICAgCisgICAg
dm9pZCBpbnZhbGlkYXRlKGNvbnN0IGNoYXIqIHJlYXNvbikKKyAgICB7CisgICAgICAgIGludmFs
aWRhdGUoU3RyaW5nRmlyZURldGFpbChyZWFzb24pKTsKKyAgICB9CisgICAgCiAgICAgaW50OF90
KiBhZGRyZXNzT2ZTdGF0ZSgpIHsgcmV0dXJuICZtX3N0YXRlOyB9CiAgICAgaW50OF90KiBhZGRy
ZXNzT2ZTZXRJc05vdEVtcHR5KCkgeyByZXR1cm4gJm1fc2V0SXNOb3RFbXB0eTsgfQogICAgIApA
QCAtMjYxLDcgKzI3NSwxMSBAQCBwdWJsaWM6CiAgICAgICAgICAgICBmYXQoKS0+dG91Y2goZGV0
YWlsKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQotICAgICAgICBpZiAoZGVjb2Rl
U3RhdGUobV9kYXRhKSA9PSBDbGVhcldhdGNocG9pbnQpCisgICAgICAgIHVpbnRwdHJfdCBkYXRh
ID0gbV9kYXRhOworICAgICAgICBpZiAoZGVjb2RlU3RhdGUoZGF0YSkgPT0gSXNJbnZhbGlkYXRl
ZCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsK
KyAgICAgICAgaWYgKGRlY29kZVN0YXRlKGRhdGEpID09IENsZWFyV2F0Y2hwb2ludCkKICAgICAg
ICAgICAgIG1fZGF0YSA9IGVuY29kZVN0YXRlKElzV2F0Y2hlZCk7CiAgICAgICAgIGVsc2UKICAg
ICAgICAgICAgIG1fZGF0YSA9IGVuY29kZVN0YXRlKElzSW52YWxpZGF0ZWQpOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdl
bmVyYXRvci5jcHAJKHJldmlzaW9uIDE4MjA2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NjYs
OSArNDY2LDYgQEAgQnl0ZWNvZGVHZW5lcmF0b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKFZNJgogICAg
ICAgICB9CiAgICAgfQogICAgIAotICAgIGlmIChtX3N5bWJvbFRhYmxlLT5zY29wZVNpemUoKSkK
LSAgICAgICAgZW1pdE9wY29kZShvcF90b3VjaF9lbnRyeSk7Ci0KICAgICBpZiAoaXNDb25zdHJ1
Y3RvcigpKSB7CiAgICAgICAgIGlmIChjb25zdHJ1Y3RvcktpbmQoKSA9PSBDb25zdHJ1Y3Rvcktp
bmQ6OkRlcml2ZWQpIHsKICAgICAgICAgICAgIG1fbmV3VGFyZ2V0UmVnaXN0ZXIgPSBhZGRWYXIo
KTsKQEAgLTEzMjQsOCArMTMyMSw2IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjpl
bWl0UmVzb2wKICAgICAgICAgCiAgICAgICAgIEFTU0VSVCghbV9zeW1ib2xUYWJsZSB8fCAhbV9z
eW1ib2xUYWJsZS0+Y29udGFpbnModmFyaWFibGUuaWRlbnQoKS5pbXBsKCkpIHx8IHJlc29sdmVU
eXBlKCkgPT0gRHluYW1pYyk7CiAgICAgICAgIAotICAgICAgICBtX2NvZGVCbG9jay0+YWRkUHJv
cGVydHlBY2Nlc3NJbnN0cnVjdGlvbihpbnN0cnVjdGlvbnMoKS5zaXplKCkpOwotICAgICAgICAK
ICAgICAgICAgLy8gcmVzb2x2ZV9zY29wZSBkc3QsIGlkLCBSZXNvbHZlVHlwZSwgZGVwdGgKICAg
ICAgICAgZW1pdE9wY29kZShvcF9yZXNvbHZlX3Njb3BlKTsKICAgICAgICAgZHN0ID0gdGVtcERl
c3RpbmF0aW9uKGRzdCk7CkBAIC0xMzM0LDcgKzEzMjksNiBAQCBSZWdpc3RlcklEKiBCeXRlY29k
ZUdlbmVyYXRvcjo6ZW1pdFJlc29sCiAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZChhZGRD
b25zdGFudCh2YXJpYWJsZS5pZGVudCgpKSk7CiAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVu
ZChyZXNvbHZlVHlwZSgpKTsKICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKDApOwotICAg
ICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoMCk7CiAgICAgICAgIHJldHVybiBkc3Q7CiAgICAg
fQogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVy
cHJldGVySW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkocmV2aXNpb24gMTgyMDY5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xMzQxLDYgKzEzNDEsNyBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0
ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgfQogCiAgICAgY2FzZSBDcmVhdGVUaGlzOiB7CisgICAg
ICAgIC8vIEZJWE1FOiBXZSBjYW4gZm9sZCB0aGlzIHRvIE5ld09iamVjdCBpZiB0aGUgaW5jb21p
bmcgY2FsbGVlIGlzIGEgY29uc3RhbnQuCiAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShT
cGVjRmluYWxPYmplY3QpOwogICAgICAgICBicmVhazsKICAgICB9CkBAIC0xNDAzLDYgKzE0MDQs
MTUgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgICAgICBi
cmVhazsKICAgICAgICAgCiAgICAgY2FzZSBHZXRDYWxsZWU6CisgICAgICAgIGlmIChGdW5jdGlv
bkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBqc0R5bmFtaWNDYXN0PEZ1bmN0aW9uRXhlY3V0YWJs
ZSo+KG1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSkpIHsKKyAgICAgICAgICAgIFZhcmlh
YmxlV2F0Y2hwb2ludFNldCYgc2V0ID0gZXhlY3V0YWJsZS0+ZnVuY3Rpb25SZWFsbG9jYXRpb25X
YXRjaHBvaW50U2V0KCk7CisgICAgICAgICAgICBpZiAoSlNWYWx1ZSB2YWx1ZSA9IHNldC5pbmZl
cnJlZFZhbHVlKCkpIHsKKyAgICAgICAgICAgICAgICBtX2dyYXBoLndhdGNocG9pbnRzKCkuYWRk
TGF6aWx5KCZzZXQpOworICAgICAgICAgICAgICAgIEpTRnVuY3Rpb24qIGZ1bmN0aW9uID0ganND
YXN0PEpTRnVuY3Rpb24qPih2YWx1ZSk7CisgICAgICAgICAgICAgICAgc2V0Q29uc3RhbnQobm9k
ZSwgKm1fZ3JhcGguZnJlZXplKGZ1bmN0aW9uKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KICAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNw
ZWNGdW5jdGlvbik7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCShyZXZpc2lvbiAxODIw
NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjc4LDggKzI3OCwyMCBAQCBwcml2YXRlOgogICAgICAgICAgICAg
ICAgIGlmIChvcGVyYW5kLm9mZnNldCgpID09IEpTU3RhY2s6OkNhbGxlZSkKICAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIHdlYWtKU0NvbnN0YW50KGNhbGxlZSk7CiAgICAgICAgICAgICB9Ci0g
ICAgICAgIH0gZWxzZSBpZiAob3BlcmFuZC5vZmZzZXQoKSA9PSBKU1N0YWNrOjpDYWxsZWUpCisg
ICAgICAgIH0gZWxzZSBpZiAob3BlcmFuZC5vZmZzZXQoKSA9PSBKU1N0YWNrOjpDYWxsZWUpIHsK
KyAgICAgICAgICAgIC8vIFdlIGhhdmUgdG8gZG8gc29tZSBjb25zdGFudC1mb2xkaW5nIGhlcmUg
YmVjYXVzZSB0aGlzIGVuYWJsZXMgQ3JlYXRlVGhpcyBmb2xkaW5nLiBOb3RlCisgICAgICAgICAg
ICAvLyB0aGF0IHdlIGRvbid0IGhhdmUgc3VjaCB3YXRjaHBvaW50LWJhc2VkIGZvbGRpbmcgZm9y
IGlubGluZWQgdXNlcyBvZiBDYWxsZWUsIHNpbmNlIGluIHRoYXQKKyAgICAgICAgICAgIC8vIGNh
c2UgaWYgdGhlIGZ1bmN0aW9uIGlzIGEgc2luZ2xldG9uIHRoZW4gd2UgYWxyZWFkeSBrbm93IGl0
LgorICAgICAgICAgICAgaWYgKEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IGpzRHlu
YW1pY0Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4obV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJs
ZSgpKSkgeworICAgICAgICAgICAgICAgIFZhcmlhYmxlV2F0Y2hwb2ludFNldCYgc2V0ID0gZXhl
Y3V0YWJsZS0+ZnVuY3Rpb25SZWFsbG9jYXRpb25XYXRjaHBvaW50U2V0KCk7CisgICAgICAgICAg
ICAgICAgaWYgKEpTVmFsdWUgdmFsdWUgPSBzZXQuaW5mZXJyZWRWYWx1ZSgpKSB7CisgICAgICAg
ICAgICAgICAgICAgIG1fZ3JhcGgud2F0Y2hwb2ludHMoKS5hZGRMYXppbHkoJnNldCk7CisgICAg
ICAgICAgICAgICAgICAgIEpTRnVuY3Rpb24qIGZ1bmN0aW9uID0ganNDYXN0PEpTRnVuY3Rpb24q
Pih2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB3ZWFrSlNDb25zdGFudChmdW5j
dGlvbik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0
dXJuIGFkZFRvR3JhcGgoR2V0Q2FsbGVlKTsKKyAgICAgICAgfQogICAgICAgICAKICAgICAgICAg
cmV0dXJuIGdldERpcmVjdChtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQob3BlcmFuZCkp
OwogICAgIH0KQEAgLTI1MTksNiArMjUzMSwxMiBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpjbGVh
ckNhY2hlcygpCiBOb2RlKiBCeXRlQ29kZVBhcnNlcjo6Z2V0U2NvcGUoVmlydHVhbFJlZ2lzdGVy
IHNjb3BlQ2hhaW4sIHVuc2lnbmVkIHNraXBDb3VudCkKIHsKICAgICBOb2RlKiBsb2NhbEJhc2Ug
PSBnZXQoc2NvcGVDaGFpbik7CisgICAgYWRkVG9HcmFwaChQaGFudG9tLCBsb2NhbEJhc2UpOyAv
LyBPU1IgZXhpdCBjYW5ub3QgaGFuZGxlIHJlc29sdmVfc2NvcGUgb24gYSBEQ0UnZCBzY29wZS4K
KyAgICBpZiAoSlNTY29wZSogc2NvcGUgPSBsb2NhbEJhc2UtPmR5bmFtaWNDYXN0Q29uc3RhbnQ8
SlNTY29wZSo+KCkpIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBuID0gc2tpcENvdW50OyBuLS07
KQorICAgICAgICAgICAgc2NvcGUgPSBzY29wZS0+bmV4dCgpOworICAgICAgICByZXR1cm4gd2Vh
a0pTQ29uc3RhbnQoc2NvcGUpOworICAgIH0KICAgICBmb3IgKHVuc2lnbmVkIG4gPSBza2lwQ291
bnQ7IG4tLTspCiAgICAgICAgIGxvY2FsQmFzZSA9IGFkZFRvR3JhcGgoU2tpcFNjb3BlLCBsb2Nh
bEJhc2UpOwogICAgIHJldHVybiBsb2NhbEJhc2U7CkBAIC0yNTkzLDExICsyNjExLDYgQEAgYm9v
bCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgTkVYVF9P
UENPREUob3BfZW50ZXIpOwogICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgY2FzZSBv
cF90b3VjaF9lbnRyeToKLSAgICAgICAgICAgIGlmIChtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVC
bG9jay0+c3ltYm9sVGFibGUoKS0+bV9mdW5jdGlvbkVudGVyZWRPbmNlLmlzU3RpbGxWYWxpZCgp
KQotICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoRm9yY2VPU1JFeGl0KTsKLSAgICAgICAgICAg
IE5FWFRfT1BDT0RFKG9wX3RvdWNoX2VudHJ5KTsKLSAgICAgICAgICAgIAogICAgICAgICBjYXNl
IG9wX3RvX3RoaXM6IHsKICAgICAgICAgICAgIE5vZGUqIG9wMSA9IGdldFRoaXMoKTsKICAgICAg
ICAgICAgIGlmIChvcDEtPm9wKCkgIT0gVG9UaGlzKSB7CkBAIC0zMzc1LDE3ICszMzg4LDcgQEAg
Ym9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgY2Fz
ZSBMb2NhbENsb3N1cmVWYXI6CiAgICAgICAgICAgICBjYXNlIENsb3N1cmVWYXI6CiAgICAgICAg
ICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgICAg
ICAgICAgSlNMZXhpY2FsRW52aXJvbm1lbnQqIGxleGljYWxFbnZpcm9ubWVudCA9IGN1cnJlbnRJ
bnN0cnVjdGlvbls2XS51LmxleGljYWxFbnZpcm9ubWVudC5nZXQoKTsKLSAgICAgICAgICAgICAg
ICBpZiAobGV4aWNhbEVudmlyb25tZW50Ci0gICAgICAgICAgICAgICAgICAgICYmIGxleGljYWxF
bnZpcm9ubWVudC0+c3ltYm9sVGFibGUoKS0+bV9mdW5jdGlvbkVudGVyZWRPbmNlLmlzU3RpbGxW
YWxpZCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgud2F0Y2hwb2ludHMoKS5hZGRM
YXppbHkobGV4aWNhbEVudmlyb25tZW50LT5zeW1ib2xUYWJsZSgpLT5tX2Z1bmN0aW9uRW50ZXJl
ZE9uY2UpOwotICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKFBoYW50b20sIGdldERpcmVj
dChtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJ
bnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpKSkpOwotICAgICAgICAgICAgICAgICAgICBzZXQoVmly
dHVhbFJlZ2lzdGVyKGRzdCksIHdlYWtKU0NvbnN0YW50KGxleGljYWxFbnZpcm9ubWVudCkpOwot
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rlcihkc3QpLCBnZXRTY29wZShWaXJ0dWFsUmVnaXN0ZXIo
Y3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCksIGRlcHRoKSk7Ci0gICAgICAgICAgICAg
ICAgaWYgKGlubGluZUNhbGxGcmFtZSgpKQotICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBo
KFBoYW50b20sIGdldERpcmVjdChtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQoVmlydHVh
bFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpKSkpOwogICAgICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgY2FzZSBEeW5hbWljOgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcAko
cmV2aXNpb24gMTgyMDY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmls
aXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Niw3ICs5Niw2IEBAIENhcGFiaWxpdHlMZXZl
bCBjYXBhYmlsaXR5TGV2ZWwoT3Bjb2RlSUQKICAgICAKICAgICBzd2l0Y2ggKG9wY29kZUlEKSB7
CiAgICAgY2FzZSBvcF9lbnRlcjoKLSAgICBjYXNlIG9wX3RvdWNoX2VudHJ5OgogICAgIGNhc2Ug
b3BfdG9fdGhpczoKICAgICBjYXNlIG9wX2NoZWNrX3RkejoKICAgICBjYXNlIG9wX2NyZWF0ZV90
aGlzOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHJl
dmlzaW9uIDE4MjA2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC04NjAsMTEgKzg2MCwxNyBAQCB2b2lkIGNsb2JiZXJpemUo
R3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgY2FzZSBOZXdTdHJpbmdPYmplY3Q6CiAgICAg
Y2FzZSBQaGFudG9tTmV3T2JqZWN0OgogICAgIGNhc2UgTWF0ZXJpYWxpemVOZXdPYmplY3Q6Ci0g
ICAgY2FzZSBOZXdGdW5jdGlvbjoKICAgICAgICAgcmVhZChIZWFwT2JqZWN0Q291bnQpOwogICAg
ICAgICB3cml0ZShIZWFwT2JqZWN0Q291bnQpOwogICAgICAgICByZXR1cm47CiAgICAgICAgIAor
ICAgIGNhc2UgTmV3RnVuY3Rpb246CisgICAgICAgIGlmIChub2RlLT5jYXN0T3BlcmFuZDxGdW5j
dGlvbkV4ZWN1dGFibGUqPigpLT5mdW5jdGlvblJlYWxsb2NhdGlvbldhdGNocG9pbnRTZXQoKS5p
c1N0aWxsVmFsaWQoKSkKKyAgICAgICAgICAgIHdyaXRlKFdhdGNocG9pbnRfZmlyZSk7CisgICAg
ICAgIHJlYWQoSGVhcE9iamVjdENvdW50KTsKKyAgICAgICAgd3JpdGUoSGVhcE9iamVjdENvdW50
KTsKKyAgICAgICAgcmV0dXJuOworCiAgICAgY2FzZSBSZWdFeHBFeGVjOgogICAgIGNhc2UgUmVn
RXhwVGVzdDoKICAgICAgICAgcmVhZChSZWdFeHBTdGF0ZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0dyYXBoLmNwcAkocmV2aXNpb24gMTgyMDY5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwMzUsMjIgKzEw
MzUsMjEgQEAgSlNWYWx1ZSBHcmFwaDo6dHJ5R2V0Q29uc3RhbnRDbG9zdXJlVmFyKAogICAgIFN5
bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSA9IGFjdGl2YXRpb24tPnN5bWJvbFRhYmxlKCk7CiAgICAg
Q29uY3VycmVudEpJVExvY2tlciBsb2NrZXIoc3ltYm9sVGFibGUtPm1fbG9jayk7CiAgICAgCi0g
ICAgaWYgKHN5bWJvbFRhYmxlLT5tX2Z1bmN0aW9uRW50ZXJlZE9uY2UuaGFzQmVlbkludmFsaWRh
dGVkKCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlKCk7Ci0gICAgCiAgICAgU3ltYm9sVGFibGVF
bnRyeSogZW50cnkgPSBzeW1ib2xUYWJsZS0+ZW50cnlGb3IobG9ja2VyLCBvZmZzZXQpOwogICAg
IGlmICghZW50cnkpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CiAgICAgCi0gICAgVmFyaWFi
bGVXYXRjaHBvaW50U2V0KiBzZXQgPSBlbnRyeS0+d2F0Y2hwb2ludFNldCgpOworICAgIFdhdGNo
cG9pbnRTZXQqIHNldCA9IGVudHJ5LT53YXRjaHBvaW50U2V0KCk7CiAgICAgaWYgKCFzZXQpCiAg
ICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CiAgICAgCi0gICAgSlNWYWx1ZSB2YWx1ZSA9IHNldC0+
aW5mZXJyZWRWYWx1ZSgpOworICAgIGlmIChzZXQtPnN0YXRlKCkgIT0gSXNXYXRjaGVkKQorICAg
ICAgICByZXR1cm4gSlNWYWx1ZSgpOworICAgIAorICAgIEpTVmFsdWUgdmFsdWUgPSBhY3RpdmF0
aW9uLT52YXJpYWJsZUF0KGVudHJ5LT5zY29wZU9mZnNldCgpKS5nZXQoKTsKICAgICBpZiAoIXZh
bHVlKQogICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwogICAgIAotICAgIHdhdGNocG9pbnRzKCku
YWRkTGF6aWx5KHN5bWJvbFRhYmxlLT5tX2Z1bmN0aW9uRW50ZXJlZE9uY2UpOwogICAgIHdhdGNo
cG9pbnRzKCkuYWRkTGF6aWx5KHNldCk7CiAgICAgCiAgICAgcmV0dXJuIHZhbHVlOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJl
dmlzaW9uIDE4MjA2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MzY1LDggKzQzNjUsMTMgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZU5ld0Z1bmN0aW9uKAogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5k
IHNjb3BlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICBHUFJSZWcgc2NvcGVHUFIgPSBzY29w
ZS5ncHIoKTsKICAgICBmbHVzaFJlZ2lzdGVycygpOwotICAgIGNhbGxPcGVyYXRpb24oCi0gICAg
ICAgIG9wZXJhdGlvbk5ld0Z1bmN0aW9uLCByZXN1bHRHUFIsIHNjb3BlR1BSLCBub2RlLT5jYXN0
T3BlcmFuZDxGdW5jdGlvbkV4ZWN1dGFibGUqPigpKTsKKyAgICBGdW5jdGlvbkV4ZWN1dGFibGUq
IGV4ZWN1dGFibGUgPSBub2RlLT5jYXN0T3BlcmFuZDxGdW5jdGlvbkV4ZWN1dGFibGUqPigpOwor
ICAgIEpfSklUT3BlcmF0aW9uX0VKc2NDIGZ1bmN0aW9uOworICAgIGlmIChleGVjdXRhYmxlLT5m
dW5jdGlvblJlYWxsb2NhdGlvbldhdGNocG9pbnRTZXQoKS5pc1N0aWxsVmFsaWQoKSkKKyAgICAg
ICAgZnVuY3Rpb24gPSBvcGVyYXRpb25OZXdGdW5jdGlvbjsKKyAgICBlbHNlCisgICAgICAgIGZ1
bmN0aW9uID0gb3BlcmF0aW9uTmV3RnVuY3Rpb25XaXRoSW52YWxpZGF0ZWRSZWFsbG9jYXRpb25X
YXRjaHBvaW50OworICAgIGNhbGxPcGVyYXRpb24oZnVuY3Rpb24sIHJlc3VsdEdQUiwgc2NvcGVH
UFIsIGV4ZWN1dGFibGUpOwogICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKIH0KIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNl
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmFyZ3NG
b3J3YXJkaW5nUGhhc2UuY3BwCShyZXZpc2lvbiAxODIwNjkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiREZHQ2xvYmJlcml6ZS5oIgogI2luY2x1ZGUgIkRG
R0dyYXBoLmgiCiAjaW5jbHVkZSAiREZHUGhhc2UuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgi
CiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCShyZXZpc2lvbiAx
ODIwNjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OSw2ICs4OSw0NyBAQCB1c2luZyBuYW1lc3BhY2Ugc3Rk
OwogCiBuYW1lc3BhY2UgSlNDIHsKIAorU3RyaW5nIFN0YWNrRnJhbWU6OmZyaWVuZGx5U291cmNl
VVJMKCkgY29uc3QKK3sKKyAgICBTdHJpbmcgdHJhY2VMaW5lOworICAgIAorICAgIHN3aXRjaCAo
Y29kZVR5cGUpIHsKKyAgICBjYXNlIFN0YWNrRnJhbWVFdmFsQ29kZToKKyAgICBjYXNlIFN0YWNr
RnJhbWVGdW5jdGlvbkNvZGU6CisgICAgY2FzZSBTdGFja0ZyYW1lR2xvYmFsQ29kZToKKyAgICAg
ICAgaWYgKCFzb3VyY2VVUkwuaXNFbXB0eSgpKQorICAgICAgICAgICAgdHJhY2VMaW5lID0gc291
cmNlVVJMLmltcGwoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTdGFja0ZyYW1lTmF0aXZl
Q29kZToKKyAgICAgICAgdHJhY2VMaW5lID0gIltuYXRpdmUgY29kZV0iOworICAgICAgICBicmVh
azsKKyAgICB9CisgICAgcmV0dXJuIHRyYWNlTGluZS5pc051bGwoKSA/IGVtcHR5U3RyaW5nKCkg
OiB0cmFjZUxpbmU7Cit9CisKK1N0cmluZyBTdGFja0ZyYW1lOjpmcmllbmRseUZ1bmN0aW9uTmFt
ZShDYWxsRnJhbWUqIGNhbGxGcmFtZSkgY29uc3QKK3sKKyAgICBTdHJpbmcgdHJhY2VMaW5lOwor
ICAgIEpTT2JqZWN0KiBzdGFja0ZyYW1lQ2FsbGVlID0gY2FsbGVlLmdldCgpOworCisgICAgc3dp
dGNoIChjb2RlVHlwZSkgeworICAgIGNhc2UgU3RhY2tGcmFtZUV2YWxDb2RlOgorICAgICAgICB0
cmFjZUxpbmUgPSAiZXZhbCBjb2RlIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTdGFja0Zy
YW1lTmF0aXZlQ29kZToKKyAgICAgICAgaWYgKGNhbGxlZSkKKyAgICAgICAgICAgIHRyYWNlTGlu
ZSA9IGdldENhbGN1bGF0ZWREaXNwbGF5TmFtZShjYWxsRnJhbWUsIHN0YWNrRnJhbWVDYWxsZWUp
LmltcGwoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTdGFja0ZyYW1lRnVuY3Rpb25Db2Rl
OgorICAgICAgICB0cmFjZUxpbmUgPSBnZXRDYWxjdWxhdGVkRGlzcGxheU5hbWUoY2FsbEZyYW1l
LCBzdGFja0ZyYW1lQ2FsbGVlKS5pbXBsKCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgU3Rh
Y2tGcmFtZUdsb2JhbENvZGU6CisgICAgICAgIHRyYWNlTGluZSA9ICJnbG9iYWwgY29kZSI7Cisg
ICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gdHJhY2VMaW5lLmlzTnVsbCgpID8gZW1w
dHlTdHJpbmcoKSA6IHRyYWNlTGluZTsKK30KKwogSlNWYWx1ZSBldmFsKENhbGxGcmFtZSogY2Fs
bEZyYW1lKQogewogICAgIGlmICghY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaAkocmV2
aXNpb24gMTgyMDY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVy
cHJldGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTkwLDQ1ICs5MCw4IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldDsKICAgICAgICAgU3RyaW5nIHNvdXJj
ZVVSTDsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgU3RyaW5nIHRvU3RyaW5nKENhbGxGcmFt
ZSopOwotICAgICAgICBTdHJpbmcgZnJpZW5kbHlTb3VyY2VVUkwoKSBjb25zdAotICAgICAgICB7
Ci0gICAgICAgICAgICBTdHJpbmcgdHJhY2VMaW5lOwotCi0gICAgICAgICAgICBzd2l0Y2ggKGNv
ZGVUeXBlKSB7Ci0gICAgICAgICAgICBjYXNlIFN0YWNrRnJhbWVFdmFsQ29kZToKLSAgICAgICAg
ICAgIGNhc2UgU3RhY2tGcmFtZUZ1bmN0aW9uQ29kZToKLSAgICAgICAgICAgIGNhc2UgU3RhY2tG
cmFtZUdsb2JhbENvZGU6Ci0gICAgICAgICAgICAgICAgaWYgKCFzb3VyY2VVUkwuaXNFbXB0eSgp
KQotICAgICAgICAgICAgICAgICAgICB0cmFjZUxpbmUgPSBzb3VyY2VVUkwuaW1wbCgpOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBTdGFja0ZyYW1lTmF0aXZlQ29k
ZToKLSAgICAgICAgICAgICAgICB0cmFjZUxpbmUgPSAiW25hdGl2ZSBjb2RlXSI7Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gdHJhY2VM
aW5lLmlzTnVsbCgpID8gZW1wdHlTdHJpbmcoKSA6IHRyYWNlTGluZTsKLSAgICAgICAgfQotICAg
ICAgICBTdHJpbmcgZnJpZW5kbHlGdW5jdGlvbk5hbWUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpIGNv
bnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIFN0cmluZyB0cmFjZUxpbmU7Ci0gICAgICAgICAg
ICBKU09iamVjdCogc3RhY2tGcmFtZUNhbGxlZSA9IGNhbGxlZS5nZXQoKTsKLQotICAgICAgICAg
ICAgc3dpdGNoIChjb2RlVHlwZSkgewotICAgICAgICAgICAgY2FzZSBTdGFja0ZyYW1lRXZhbENv
ZGU6Ci0gICAgICAgICAgICAgICAgdHJhY2VMaW5lID0gImV2YWwgY29kZSI7Ci0gICAgICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFN0YWNrRnJhbWVOYXRpdmVDb2RlOgotICAg
ICAgICAgICAgICAgIGlmIChjYWxsZWUpCi0gICAgICAgICAgICAgICAgICAgIHRyYWNlTGluZSA9
IGdldENhbGN1bGF0ZWREaXNwbGF5TmFtZShjYWxsRnJhbWUsIHN0YWNrRnJhbWVDYWxsZWUpLmlt
cGwoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgU3RhY2tGcmFt
ZUZ1bmN0aW9uQ29kZToKLSAgICAgICAgICAgICAgICB0cmFjZUxpbmUgPSBnZXRDYWxjdWxhdGVk
RGlzcGxheU5hbWUoY2FsbEZyYW1lLCBzdGFja0ZyYW1lQ2FsbGVlKS5pbXBsKCk7Ci0gICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFN0YWNrRnJhbWVHbG9iYWxDb2RlOgot
ICAgICAgICAgICAgICAgIHRyYWNlTGluZSA9ICJnbG9iYWwgY29kZSI7Ci0gICAgICAgICAgICAg
ICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gdHJhY2VMaW5lLmlz
TnVsbCgpID8gZW1wdHlTdHJpbmcoKSA6IHRyYWNlTGluZTsKLSAgICAgICAgfQorICAgICAgICBT
dHJpbmcgZnJpZW5kbHlTb3VyY2VVUkwoKSBjb25zdDsKKyAgICAgICAgU3RyaW5nIGZyaWVuZGx5
RnVuY3Rpb25OYW1lKENhbGxGcmFtZSopIGNvbnN0OwogICAgICAgICBKU19FWFBPUlRfUFJJVkFU
RSB2b2lkIGNvbXB1dGVMaW5lQW5kQ29sdW1uKHVuc2lnbmVkJiBsaW5lLCB1bnNpZ25lZCYgY29s
dW1uKTsKIAogICAgIHByaXZhdGU6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCShy
ZXZpc2lvbiAxODIwNjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTE4OSw3ICsxODksNiBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVN
YWluUGFzcygpCiAgICAgICAgIERFRklORV9TTE9XX09QKGlzX29iamVjdF9vcl9udWxsKQogICAg
ICAgICBERUZJTkVfU0xPV19PUCh0eXBlb2YpCiAKLSAgICAgICAgREVGSU5FX09QKG9wX3RvdWNo
X2VudHJ5KQogICAgICAgICBERUZJTkVfT1Aob3BfYWRkKQogICAgICAgICBERUZJTkVfT1Aob3Bf
Yml0YW5kKQogICAgICAgICBERUZJTkVfT1Aob3BfYml0b3IpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklULmgJKHJldmlzaW9uIDE4MjA2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklULmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1Nyw3ICs0NTcsNiBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgCiAgICAgICAgIHZvaWQgYXNzZXJ0U3RhY2tQb2ludGVyT2Zmc2V0KCk7CiAKLSAg
ICAgICAgdm9pZCBlbWl0X29wX3RvdWNoX2VudHJ5KEluc3RydWN0aW9uKik7CiAgICAgICAgIHZv
aWQgZW1pdF9vcF9hZGQoSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2JpdGFu
ZChJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfYml0b3IoSW5zdHJ1Y3Rpb24q
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkocmV2aXNp
b24gMTgyMDY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtODc5LDE1ICs4NzksNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
dG9fbnVtYmVyKEluc3RydWN0CiAKICNlbmRpZiAvLyBVU0UoSlNWQUxVRTY0KQogCi12b2lkIEpJ
VDo6ZW1pdF9vcF90b3VjaF9lbnRyeShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQot
ewotICAgIGlmIChtX2NvZGVCbG9jay0+c3ltYm9sVGFibGUoKS0+bV9mdW5jdGlvbkVudGVyZWRP
bmNlLmhhc0JlZW5JbnZhbGlkYXRlZCgpKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgSklU
U2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3df
cGF0aF90b3VjaF9lbnRyeSk7Ci0gICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKLX0KLQogdm9pZCBK
SVQ6OmVtaXRfb3BfbG9vcF9oaW50KEluc3RydWN0aW9uKikKIHsKICAgICAvLyBFbWl0IHRoZSBK
SVQgb3B0aW1pemF0aW9uIGNoZWNrOiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMTgyMDY5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTMzLDYgKzkz
MywxNCBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5lCiAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShKU0Z1bmN0aW9uOjpjcmVhdGUodm0sIHN0YXRpY19jYXN0PEZ1
bmN0aW9uRXhlY3V0YWJsZSo+KGZ1bmN0aW9uRXhlY3V0YWJsZSksIHNjb3BlKSk7CiB9CiAKK0Vu
Y29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3RnVuY3Rpb25XaXRoSW52YWxp
ZGF0ZWRSZWFsbG9jYXRpb25XYXRjaHBvaW50KEV4ZWNTdGF0ZSogZXhlYywgSlNTY29wZSogc2Nv
cGUsIEpTQ2VsbCogZnVuY3Rpb25FeGVjdXRhYmxlKQoreworICAgIEFTU0VSVChmdW5jdGlvbkV4
ZWN1dGFibGUtPmluaGVyaXRzKEZ1bmN0aW9uRXhlY3V0YWJsZTo6aW5mbygpKSk7CisgICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwg
ZXhlYyk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU0Z1bmN0aW9uOjpjcmVhdGVXaXRo
SW52YWxpZGF0ZWRSZWFsbG9jYXRpb25XYXRjaHBvaW50KHZtLCBzdGF0aWNfY2FzdDxGdW5jdGlv
bkV4ZWN1dGFibGUqPihmdW5jdGlvbkV4ZWN1dGFibGUpLCBzY29wZSkpOworfQorCiBKU0NlbGwq
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3T2JqZWN0KEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUpCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAkocmV2aXNpb24gMTgyMDY5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI3OCw2ICsyNzgsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbk5lCiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0FycmF5QnVm
ZmVyV2l0aFByb2ZpbGUoRXhlY1N0YXRlKiwgQXJyYXlBbGxvY2F0aW9uUHJvZmlsZSosIGNvbnN0
IEpTVmFsdWUqIHZhbHVlcywgaW50MzJfdCBzaXplKSBXVEZfSU5URVJOQUw7CiBFbmNvZGVkSlNW
YWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemVBbmRQcm9maWxlKEV4
ZWNTdGF0ZSosIEFycmF5QWxsb2NhdGlvblByb2ZpbGUqLCBFbmNvZGVkSlNWYWx1ZSBzaXplKSBX
VEZfSU5URVJOQUw7CiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0Z1
bmN0aW9uKEV4ZWNTdGF0ZSosIEpTU2NvcGUqLCBKU0NlbGwqKSBXVEZfSU5URVJOQUw7CitFbmNv
ZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0Z1bmN0aW9uV2l0aEludmFsaWRh
dGVkUmVhbGxvY2F0aW9uV2F0Y2hwb2ludChFeGVjU3RhdGUqLCBKU1Njb3BlKiwgSlNDZWxsKikg
V1RGX0lOVEVSTkFMOwogSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld09iamVjdChF
eGVjU3RhdGUqLCBTdHJ1Y3R1cmUqKSBXVEZfSU5URVJOQUw7CiBFbmNvZGVkSlNWYWx1ZSBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvbk5ld1JlZ2V4cChFeGVjU3RhdGUqLCB2b2lkKikgV1RGX0lOVEVS
TkFMOwogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkhhbmRsZVdhdGNoZG9nVGltZXIoRXhl
Y1N0YXRlKikgV1RGX0lOVEVSTkFMOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50
L0xMSW50U2xvd1BhdGhzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
bGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCShyZXZpc2lvbiAxODIwNjkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0x
Mzg0LDggKzEzODQsMTIgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3B1dF90b19z
YwogICAgIGlmIChtb2RlQW5kVHlwZS50eXBlKCkgPT0gTG9jYWxDbG9zdXJlVmFyKSB7CiAgICAg
ICAgIEpTTGV4aWNhbEVudmlyb25tZW50KiBlbnZpcm9ubWVudCA9IGpzQ2FzdDxKU0xleGljYWxF
bnZpcm9ubWVudCo+KHNjb3BlKTsKICAgICAgICAgZW52aXJvbm1lbnQtPnZhcmlhYmxlQXQoU2Nv
cGVPZmZzZXQocGNbNl0udS5vcGVyYW5kKSkuc2V0KHZtLCBlbnZpcm9ubWVudCwgdmFsdWUpOwot
ICAgICAgICBpZiAoVmFyaWFibGVXYXRjaHBvaW50U2V0KiBzZXQgPSBwY1s1XS51LndhdGNocG9p
bnRTZXQpCi0gICAgICAgICAgICBzZXQtPm5vdGlmeVdyaXRlKHZtLCB2YWx1ZSwgIkV4ZWN1dGVk
IG9wX3B1dF9zY29wZTxMb2NhbENsb3N1cmVWYXI+Iik7CisgICAgICAgIAorICAgICAgICAvLyBI
YXZlIHRvIGRvIHRoaXMgKmFmdGVyKiB0aGUgd3JpdGUsIGJlY2F1c2UgaWYgdGhpcyBwdXRzIHRo
ZSBzZXQgaW50byBJc1dhdGNoZWQsIHRoZW4gd2UgbmVlZAorICAgICAgICAvLyB0byBoYXZlIGFs
cmVhZHkgY2hhbmdlZCB0aGUgdmFsdWUgb2YgdGhlIHZhcmlhYmxlLiBPdGhlcndpc2Ugd2UgbWln
aHQgd2F0Y2ggYW5kIGNvbnN0YW50LWZvbGQKKyAgICAgICAgLy8gdG8gdGhlIFVuZGVmaW5lZCB2
YWx1ZSBmcm9tIGJlZm9yZSB0aGUgYXNzaWdubWVudC4KKyAgICAgICAgaWYgKFdhdGNocG9pbnRT
ZXQqIHNldCA9IHBjWzVdLnUud2F0Y2hwb2ludFNldCkKKyAgICAgICAgICAgIHNldC0+dG91Y2go
IkV4ZWN1dGVkIG9wX3B1dF9zY29wZTxMb2NhbENsb3N1cmVWYXI+Iik7CiAgICAgICAgIExMSU5U
X0VORCgpOwogICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xl
dmVsSW50ZXJwcmV0ZXI2NC5hc20KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHJldmlzaW9uIDE4MjA2OSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCSh3b3Jr
aW5nIGNvcHkpCkBAIC02OTAsMTEgKzY5MCw4IEBAIF9sbGludF9vcF9tb3Y6CiAgICAgZGlzcGF0
Y2goMykKIAogCi1tYWNybyBub3RpZnlXcml0ZShzZXQsIHZhbHVlLCBzY3JhdGNoLCBzbG93KQot
ICAgIGxvYWRiIFZhcmlhYmxlV2F0Y2hwb2ludFNldDo6bV9zdGF0ZVtzZXRdLCBzY3JhdGNoCi0g
ICAgYmllcSBzY3JhdGNoLCBJc0ludmFsaWRhdGVkLCAuZG9uZQotICAgIGJxbmVxIHZhbHVlLCBW
YXJpYWJsZVdhdGNocG9pbnRTZXQ6Om1faW5mZXJyZWRWYWx1ZVtzZXRdLCBzbG93Ci0uZG9uZToK
K21hY3JvIG5vdGlmeVdyaXRlKHNldCwgc2xvdykKKyAgICBiYm5lcSBXYXRjaHBvaW50U2V0Ojpt
X3N0YXRlW3NldF0sIElzSW52YWxpZGF0ZWQsIHNsb3cKIGVuZAogCiBfbGxpbnRfb3Bfbm90OgpA
QCAtMTk0NCwzOSArMTk0MSwzOSBAQCBfbGxpbnRfb3BfcmVzb2x2ZV9zY29wZToKICNyR2xvYmFs
UHJvcGVydHk6CiAgICAgYmluZXEgdDAsIEdsb2JhbFByb3BlcnR5LCAuckdsb2JhbFZhcgogICAg
IGdldEdsb2JhbE9iamVjdCgxKQotICAgIGRpc3BhdGNoKDcpCisgICAgZGlzcGF0Y2goNikKIAog
LnJHbG9iYWxWYXI6CiAgICAgYmluZXEgdDAsIEdsb2JhbFZhciwgLnJDbG9zdXJlVmFyCiAgICAg
Z2V0R2xvYmFsT2JqZWN0KDEpCi0gICAgZGlzcGF0Y2goNykKKyAgICBkaXNwYXRjaCg2KQogCiAu
ckNsb3N1cmVWYXI6CiAgICAgYmluZXEgdDAsIENsb3N1cmVWYXIsIC5yR2xvYmFsUHJvcGVydHlX
aXRoVmFySW5qZWN0aW9uQ2hlY2tzCiAgICAgcmVzb2x2ZVNjb3BlKCkKLSAgICBkaXNwYXRjaCg3
KQorICAgIGRpc3BhdGNoKDYpCiAKIC5yR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hl
Y2tzOgogICAgIGJpbmVxIHQwLCBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3Ms
IC5yR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcwogICAgIHZhckluamVjdGlvbkNoZWNr
KC5yRHluYW1pYykKICAgICBnZXRHbG9iYWxPYmplY3QoMSkKLSAgICBkaXNwYXRjaCg3KQorICAg
IGRpc3BhdGNoKDYpCiAKIC5yR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKICAgICBi
aW5lcSB0MCwgR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgLnJDbG9zdXJlVmFyV2l0
aFZhckluamVjdGlvbkNoZWNrcwogICAgIHZhckluamVjdGlvbkNoZWNrKC5yRHluYW1pYykKICAg
ICBnZXRHbG9iYWxPYmplY3QoMSkKLSAgICBkaXNwYXRjaCg3KQorICAgIGRpc3BhdGNoKDYpCiAK
IC5yQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6CiAgICAgYmluZXEgdDAsIENsb3N1
cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCAuckR5bmFtaWMKICAgICB2YXJJbmplY3Rpb25D
aGVjayguckR5bmFtaWMpCiAgICAgcmVzb2x2ZVNjb3BlKCkKLSAgICBkaXNwYXRjaCg3KQorICAg
IGRpc3BhdGNoKDYpCiAKIC5yRHluYW1pYzoKICAgICBjYWxsU2xvd1BhdGgoX2xsaW50X3Nsb3df
cGF0aF9yZXNvbHZlX3Njb3BlKQotICAgIGRpc3BhdGNoKDcpCisgICAgZGlzcGF0Y2goNikKIAog
CiBtYWNybyBsb2FkV2l0aFN0cnVjdHVyZUNoZWNrKG9wZXJhbmQsIHNsb3dQYXRoKQpAQCAtMjA2
OSw4ICsyMDY2LDggQEAgbWFjcm8gcHV0R2xvYmFsVmFyKCkKICAgICBsb2FkaXNGcm9tSW5zdHJ1
Y3Rpb24oMywgdDApCiAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZSh0MCwgdDEpCiAgICAgbG9h
ZHBGcm9tSW5zdHJ1Y3Rpb24oNSwgdDIpCi0gICAgbm90aWZ5V3JpdGUodDIsIHQxLCB0MCwgLnBE
eW5hbWljKQogICAgIGxvYWRwRnJvbUluc3RydWN0aW9uKDYsIHQwKQorICAgIG5vdGlmeVdyaXRl
KHQyLCAucER5bmFtaWMpCiAgICAgc3RvcmVxIHQxLCBbdDBdCiBlbmQKIApAQCAtMjA4Niw3ICsy
MDgzLDcgQEAgbWFjcm8gcHV0TG9jYWxDbG9zdXJlVmFyKCkKICAgICBsb2FkQ29uc3RhbnRPclZh
cmlhYmxlKHQxLCB0MikKICAgICBsb2FkcEZyb21JbnN0cnVjdGlvbig1LCB0MykKICAgICBidHB6
IHQzLCAubm9WYXJpYWJsZVdhdGNocG9pbnRTZXQKLSAgICBub3RpZnlXcml0ZSh0MywgdDIsIHQx
LCAucER5bmFtaWMpCisgICAgbm90aWZ5V3JpdGUodDMsIC5wRHluYW1pYykKIC5ub1ZhcmlhYmxl
V2F0Y2hwb2ludFNldDoKICAgICBsb2FkaXNGcm9tSW5zdHJ1Y3Rpb24oNiwgdDEpCiAgICAgc3Rv
cmVxIHQyLCBKU0Vudmlyb25tZW50UmVjb3JkX3ZhcmlhYmxlc1t0MCwgdDEsIDhdCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20KPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIu
YXNtCShyZXZpc2lvbiAxODIwNjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93
TGV2ZWxJbnRlcnByZXRlci5hc20JKHdvcmtpbmcgY29weSkKQEAgLTkyMCwxMiArOTIwLDYgQEAg
ZW5kCiAKIAogIyBWYWx1ZS1yZXByZXNlbnRhdGlvbi1hZ25vc3RpYyBjb2RlLgotX2xsaW50X29w
X3RvdWNoX2VudHJ5OgotICAgIHRyYWNlRXhlY3V0aW9uKCkKLSAgICBjYWxsU2xvd1BhdGgoX3Ns
b3dfcGF0aF90b3VjaF9lbnRyeSkKLSAgICBkaXNwYXRjaCgxKQotCi0KIF9sbGludF9vcF9jcmVh
dGVfZGlyZWN0X2FyZ3VtZW50czoKICAgICB0cmFjZUV4ZWN1dGlvbigpCiAgICAgY2FsbFNsb3dQ
YXRoKF9zbG93X3BhdGhfY3JlYXRlX2RpcmVjdF9hcmd1bWVudHMpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAJKHJldmlzaW9u
IDE4MjA2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRo
cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwNiwxMyArMjA2LDYgQEAgU0xPV19QQVRIX0RFQ0wo
c2xvd19wYXRoX2NvbnN0cnVjdF9hcml0eQogICAgIFJFVFVSTl9UV08oMCwgc2V0dXBBcml0eUNo
ZWNrRGF0YSh2bSwgc2xvdHNUb0FkZCkpOwogfQogCi1TTE9XX1BBVEhfREVDTChzbG93X3BhdGhf
dG91Y2hfZW50cnkpCi17Ci0gICAgQkVHSU4oKTsKLSAgICBleGVjLT5jb2RlQmxvY2soKS0+c3lt
Ym9sVGFibGUoKS0+bV9mdW5jdGlvbkVudGVyZWRPbmNlLnRvdWNoKCJGdW5jdGlvbiAocmUpZW50
ZXJlZCIpOwotICAgIEVORCgpOwotfQotCiBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfY3JlYXRl
X2RpcmVjdF9hcmd1bWVudHMpCiB7CiAgICAgQkVHSU4oKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5oCShyZXZpc2lvbiAxODIwNjkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuaAkod29y
a2luZyBjb3B5KQpAQCAtMTgxLDcgKzE4MSw2IEBAIFNMT1dfUEFUSF9ERUNMKG5hbWUpIFdURl9J
TlRFUk5BTAogICAgIAogU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9jYWxsX2FyaXR5
Q2hlY2spOwogU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9jb25zdHJ1Y3RfYXJpdHlD
aGVjayk7Ci1TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX3RvdWNoX2VudHJ5KTsKIFNM
T1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfY3JlYXRlX2RpcmVjdF9hcmd1bWVudHMpOwog
U0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9jcmVhdGVfc2NvcGVkX2FyZ3VtZW50cyk7
CiBTTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX2NyZWF0ZV9vdXRfb2ZfYmFuZF9hcmd1
bWVudHMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJs
ZS5jcHAJKHJldmlzaW9uIDE4MjA2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0V4ZWN1dGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MDAsNiArNDAwLDcgQEAgRnVuY3Rp
b25FeGVjdXRhYmxlOjpGdW5jdGlvbkV4ZWN1dGFibGUoVgogICAgIHVuc2lnbmVkIGxhc3RMaW5l
LCB1bnNpZ25lZCBzdGFydENvbHVtbiwgdW5zaWduZWQgZW5kQ29sdW1uKQogICAgIDogU2NyaXB0
RXhlY3V0YWJsZSh2bS5mdW5jdGlvbkV4ZWN1dGFibGVTdHJ1Y3R1cmUuZ2V0KCksIHZtLCBzb3Vy
Y2UsIHVubGlua2VkRXhlY3V0YWJsZS0+aXNJblN0cmljdENvbnRleHQoKSkKICAgICAsIG1fdW5s
aW5rZWRFeGVjdXRhYmxlKHZtLCB0aGlzLCB1bmxpbmtlZEV4ZWN1dGFibGUpCisgICAgLCBtX2Z1
bmN0aW9uUmVhbGxvY2F0aW9uV2F0Y2hwb2ludFNldCh0aGlzKQogewogICAgIFJFTEVBU0VfQVNT
RVJUKCFzb3VyY2UuaXNOdWxsKCkpOwogICAgIEFTU0VSVChzb3VyY2UubGVuZ3RoKCkpOwpAQCAt
NTY3LDYgKzU2OCwxMiBAQCB2b2lkIEZ1bmN0aW9uRXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbihK
CiAgICAgaWYgKHRoaXNPYmplY3QtPm1fY29kZUJsb2NrRm9yQ29uc3RydWN0KQogICAgICAgICB0
aGlzT2JqZWN0LT5tX2NvZGVCbG9ja0ZvckNvbnN0cnVjdC0+dmlzaXRBZ2dyZWdhdGUodmlzaXRv
cik7CiAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fdW5saW5rZWRFeGVjdXRhYmxl
KTsKKyAgICAKKyAgICBpZiAodGhpc09iamVjdC0+bV9mdW5jdGlvblJlYWxsb2NhdGlvbldhdGNo
cG9pbnRTZXQubmVlZFRvRmluYWxpemUoKSkgeworICAgICAgICBpZiAoIXRoaXNPYmplY3QtPm1f
d2F0Y2hwb2ludENsZWFudXApCisgICAgICAgICAgICB0aGlzT2JqZWN0LT5tX3dhdGNocG9pbnRD
bGVhbnVwID0gc3RkOjptYWtlX3VuaXF1ZTxXYXRjaHBvaW50Q2xlYW51cD4odGhpc09iamVjdCk7
CisgICAgICAgIHZpc2l0b3IuYWRkVW5jb25kaXRpb25hbEZpbmFsaXplcih0aGlzT2JqZWN0LT5t
X3dhdGNocG9pbnRDbGVhbnVwLmdldCgpKTsKKyAgICB9CiB9CiAKIFN5bWJvbFRhYmxlKiBGdW5j
dGlvbkV4ZWN1dGFibGU6OnN5bWJvbFRhYmxlKENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkK
QEAgLTYyMiw2ICs2MjksMjEgQEAgRnVuY3Rpb25FeGVjdXRhYmxlKiBGdW5jdGlvbkV4ZWN1dGFi
bGU6OgogICAgIHJldHVybiB1bmxpbmtlZEV4ZWN1dGFibGUtPmxpbmsoZXhlYy52bSgpLCBzb3Vy
Y2UsIG92ZXJyaWRlTGluZU51bWJlcik7CiB9CiAKK0Z1bmN0aW9uRXhlY3V0YWJsZTo6V2F0Y2hw
b2ludENsZWFudXA6OldhdGNocG9pbnRDbGVhbnVwKEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0
YWJsZSkKKyAgICA6IG1fZXhlY3V0YWJsZShleGVjdXRhYmxlKQoreworfQorCitGdW5jdGlvbkV4
ZWN1dGFibGU6OldhdGNocG9pbnRDbGVhbnVwOjp+V2F0Y2hwb2ludENsZWFudXAoKQoreworfQor
Cit2b2lkIEZ1bmN0aW9uRXhlY3V0YWJsZTo6V2F0Y2hwb2ludENsZWFudXA6OmZpbmFsaXplVW5j
b25kaXRpb25hbGx5KCkKK3sKKyAgICBtX2V4ZWN1dGFibGUtPmZ1bmN0aW9uUmVhbGxvY2F0aW9u
V2F0Y2hwb2ludFNldCgpLmZpbmFsaXplVW5jb25kaXRpb25hbGx5KAorICAgICAgICBTdHJpbmdG
aXJlRGV0YWlsKCJGdW5jdGlvbkV4ZWN1dGFibGUgY2xlYW4tdXAgZHVyaW5nIEdDIikpOworfQor
CiB2b2lkIEV4ZWN1dGFibGVCYXNlOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7CiAg
ICAgRXhlY3V0YWJsZUJhc2UqIHJlYWxUaGlzID0gY29uc3RfY2FzdDxFeGVjdXRhYmxlQmFzZSo+
KHRoaXMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUu
aAkocmV2aXNpb24gMTgyMDY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhl
Y3V0YWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw4ICszMyw2IEBACiAjaW5jbHVkZSAiQ29t
cGlsYXRpb25SZXN1bHQuaCIKICNpbmNsdWRlICJERkdQbGFuLmgiCiAjaW5jbHVkZSAiSGFuZGxl
ckluZm8uaCIKLSNpbmNsdWRlICJKU0Z1bmN0aW9uLmgiCi0jaW5jbHVkZSAiSW50ZXJwcmV0ZXIu
aCIKICNpbmNsdWRlICJKSVRDb2RlLmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIKICNp
bmNsdWRlICJSZWdpc3RlclByZXNlcnZhdGlvbk1vZGUuaCIKQEAgLTQyLDYgKzQwLDcgQEAKICNp
bmNsdWRlICJTb3VyY2VDb2RlLmgiCiAjaW5jbHVkZSAiVHlwZVNldC5oIgogI2luY2x1ZGUgIlVu
bGlua2VkQ29kZUJsb2NrLmgiCisjaW5jbHVkZSAiVmFyaWFibGVXYXRjaHBvaW50U2V0LmgiCiAK
IG5hbWVzcGFjZSBKU0MgewogCkBAIC02NDksNiArNjQ4LDggQEAgcHVibGljOgogICAgIHZvaWQg
dW5saW5rQ2FsbHMoKTsKIAogICAgIHZvaWQgY2xlYXJDb2RlKCk7CisgICAgCisgICAgVmFyaWFi
bGVXYXRjaHBvaW50U2V0JiBmdW5jdGlvblJlYWxsb2NhdGlvbldhdGNocG9pbnRTZXQoKSB7IHJl
dHVybiBtX2Z1bmN0aW9uUmVhbGxvY2F0aW9uV2F0Y2hwb2ludFNldDsgfQogCiBwcml2YXRlOgog
ICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSgKQEAgLTY2NywxMiArNjY4LDI2IEBAIHByaXZhdGU6CiAg
ICAgfQogCiAgICAgZnJpZW5kIGNsYXNzIFNjcmlwdEV4ZWN1dGFibGU7CisgICAgCisgICAgY2xh
c3MgV2F0Y2hwb2ludENsZWFudXAgOiBwdWJsaWMgVW5jb25kaXRpb25hbEZpbmFsaXplciB7Cisg
ICAgcHVibGljOgorICAgICAgICBXYXRjaHBvaW50Q2xlYW51cChGdW5jdGlvbkV4ZWN1dGFibGUq
KTsKKyAgICAgICAgdmlydHVhbCB+V2F0Y2hwb2ludENsZWFudXAoKTsKKyAgICAgICAgCisgICAg
cHJvdGVjdGVkOgorICAgICAgICB2b2lkIGZpbmFsaXplVW5jb25kaXRpb25hbGx5KCkgb3ZlcnJp
ZGU7CisgICAgICAgIAorICAgIHByaXZhdGU6CisgICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSog
bV9leGVjdXRhYmxlOworICAgIH07CiAKICAgICBXcml0ZUJhcnJpZXI8VW5saW5rZWRGdW5jdGlv
bkV4ZWN1dGFibGU+IG1fdW5saW5rZWRFeGVjdXRhYmxlOwogICAgIFJlZlB0cjxGdW5jdGlvbkNv
ZGVCbG9jaz4gbV9jb2RlQmxvY2tGb3JDYWxsOwogICAgIFJlZlB0cjxGdW5jdGlvbkNvZGVCbG9j
az4gbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3Q7CiAgICAgUmVmUHRyPFR5cGVTZXQ+IG1fcmV0dXJu
U3RhdGVtZW50VHlwZVNldDsKICAgICB1bnNpZ25lZCBtX3BhcmFtZXRlcnNTdGFydE9mZnNldDsK
KyAgICBWYXJpYWJsZVdhdGNocG9pbnRTZXQgbV9mdW5jdGlvblJlYWxsb2NhdGlvbldhdGNocG9p
bnRTZXQ7CisgICAgc3RkOjp1bmlxdWVfcHRyPFdhdGNocG9pbnRDbGVhbnVwPiBtX3dhdGNocG9p
bnRDbGVhbnVwOwogfTsKIAogaW5saW5lIHZvaWQgRXhlY3V0YWJsZUJhc2U6OmNsZWFyQ29kZVZp
cnR1YWwoRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0NJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNDSW5saW5lcy5oCShyZXZpc2lvbiAxODIwNjkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTUx
LDYgKzUxLDcgQEAKICNpbmNsdWRlICJPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiU2xvdFZpc2l0
b3JJbmxpbmVzLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlSW5saW5lcy5oIgorI2luY2x1ZGUgIlZh
cmlhYmxlV2F0Y2hwb2ludFNldElubGluZXMuaCIKICNpbmNsdWRlICJXZWFrR0NNYXBJbmxpbmVz
LmgiCiAKICNlbmRpZiAvLyBKU0NJbmxpbmVzX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwCShyZXZpc2lvbiAxODIwNjkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NTksNiArNTksMTMgQEAgYm9vbCBKU0Z1bmN0aW9uOjppc0hvc3RGdW5jdGlvbk5vbklubGluZQog
ICAgIHJldHVybiBpc0hvc3RGdW5jdGlvbigpOwogfQogCitKU0Z1bmN0aW9uKiBKU0Z1bmN0aW9u
OjpjcmVhdGUoVk0mIHZtLCBGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUsIEpTU2NvcGUq
IHNjb3BlKQoreworICAgIEpTRnVuY3Rpb24qIHJlc3VsdCA9IGNyZWF0ZUltcGwodm0sIGV4ZWN1
dGFibGUsIHNjb3BlKTsKKyAgICBleGVjdXRhYmxlLT5mdW5jdGlvblJlYWxsb2NhdGlvbldhdGNo
cG9pbnRTZXQoKS5ub3RpZnlXcml0ZSh2bSwgcmVzdWx0LCAiQWxsb2NhdGluZyBhIGZ1bmN0aW9u
Iik7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogSlNGdW5jdGlvbiogSlNGdW5jdGlvbjo6Y3Jl
YXRlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgaW50IGxlbmd0aCwgY29u
c3QgU3RyaW5nJiBuYW1lLCBOYXRpdmVGdW5jdGlvbiBuYXRpdmVGdW5jdGlvbiwgSW50cmluc2lj
IGludHJpbnNpYywgTmF0aXZlRnVuY3Rpb24gbmF0aXZlQ29uc3RydWN0b3IpCiB7CiAgICAgTmF0
aXZlRXhlY3V0YWJsZSogZXhlY3V0YWJsZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTRnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0Z1bmN0aW9uLmgJKHJldmlzaW9uIDE4MjA2OSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMjQsNiArMjQs
NyBAQAogI2lmbmRlZiBKU0Z1bmN0aW9uX2gKICNkZWZpbmUgSlNGdW5jdGlvbl9oCiAKKyNpbmNs
dWRlICJFeGVjdXRhYmxlLmgiCiAjaW5jbHVkZSAiSW50ZXJuYWxGdW5jdGlvbi5oIgogI2luY2x1
ZGUgIkpTQ2FsbGVlLmgiCiAjaW5jbHVkZSAiSlNTY29wZS5oIgpAQCAtNTksMTUgKzYwLDE1IEBA
IHB1YmxpYzoKICAgICB0eXBlZGVmIEpTQ2FsbGVlIEJhc2U7CiAKICAgICBKU19FWFBPUlRfUFJJ
VkFURSBzdGF0aWMgSlNGdW5jdGlvbiogY3JlYXRlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBpbnQg
bGVuZ3RoLCBjb25zdCBTdHJpbmcmIG5hbWUsIE5hdGl2ZUZ1bmN0aW9uLCBJbnRyaW5zaWMgPSBO
b0ludHJpbnNpYywgTmF0aXZlRnVuY3Rpb24gbmF0aXZlQ29uc3RydWN0b3IgPSBjYWxsSG9zdEZ1
bmN0aW9uQXNDb25zdHJ1Y3Rvcik7Ci0KLSAgICBzdGF0aWMgSlNGdW5jdGlvbiogY3JlYXRlKFZN
JiB2bSwgRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlLCBKU1Njb3BlKiBzY29wZSkKKyAg
ICAKKyAgICBzdGF0aWMgSlNGdW5jdGlvbiogY3JlYXRlV2l0aEludmFsaWRhdGVkUmVhbGxvY2F0
aW9uV2F0Y2hwb2ludChWTSYgdm0sIEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSwgSlNT
Y29wZSogc2NvcGUpCiAgICAgewotICAgICAgICBKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9IG5ldyAo
Tm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTRnVuY3Rpb24+KHZtLmhlYXApKSBKU0Z1bmN0aW9uKHZt
LCBleGVjdXRhYmxlLCBzY29wZSk7Ci0gICAgICAgIEFTU0VSVChmdW5jdGlvbi0+c3RydWN0dXJl
KCktPmdsb2JhbE9iamVjdCgpKTsKLSAgICAgICAgZnVuY3Rpb24tPmZpbmlzaENyZWF0aW9uKHZt
KTsKLSAgICAgICAgcmV0dXJuIGZ1bmN0aW9uOworICAgICAgICBBU1NFUlQoZXhlY3V0YWJsZS0+
ZnVuY3Rpb25SZWFsbG9jYXRpb25XYXRjaHBvaW50U2V0KCkuaGFzQmVlbkludmFsaWRhdGVkKCkp
OworICAgICAgICByZXR1cm4gY3JlYXRlSW1wbCh2bSwgZXhlY3V0YWJsZSwgc2NvcGUpOwogICAg
IH0KIAorICAgIHN0YXRpYyBKU0Z1bmN0aW9uKiBjcmVhdGUoVk0mIHZtLCBGdW5jdGlvbkV4ZWN1
dGFibGUqIGV4ZWN1dGFibGUsIEpTU2NvcGUqIHNjb3BlKTsKKwogICAgIHN0YXRpYyBKU0Z1bmN0
aW9uKiBjcmVhdGVCdWlsdGluRnVuY3Rpb24oVk0mLCBGdW5jdGlvbkV4ZWN1dGFibGUqLCBKU0ds
b2JhbE9iamVjdCopOwogCiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKQEAgLTE0
OSw2ICsxNTAsMTQgQEAgcHJvdGVjdGVkOgogICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4o
SlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKIAogcHJpdmF0ZToKKyAgICBzdGF0aWMgSlNGdW5jdGlv
biogY3JlYXRlSW1wbChWTSYgdm0sIEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSwgSlNT
Y29wZSogc2NvcGUpCisgICAgeworICAgICAgICBKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9IG5ldyAo
Tm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTRnVuY3Rpb24+KHZtLmhlYXApKSBKU0Z1bmN0aW9uKHZt
LCBleGVjdXRhYmxlLCBzY29wZSk7CisgICAgICAgIEFTU0VSVChmdW5jdGlvbi0+c3RydWN0dXJl
KCktPmdsb2JhbE9iamVjdCgpKTsKKyAgICAgICAgZnVuY3Rpb24tPmZpbmlzaENyZWF0aW9uKHZt
KTsKKyAgICAgICAgcmV0dXJuIGZ1bmN0aW9uOworICAgIH0KKyAgICAKICAgICBmcmllbmQgY2xh
c3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogCiAgICAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIGFy
Z3VtZW50c0dldHRlcihFeGVjU3RhdGUqLCBKU09iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBQcm9w
ZXJ0eU5hbWUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMZXhpY2Fs
RW52aXJvbm1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTTGV4aWNhbEVudmlyb25tZW50LmNwcAkocmV2aXNpb24gMTgyMDY5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMZXhpY2FsRW52aXJvbm1lbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC03Nyw2ICs3Nyw3IEBAIGlubGluZSBib29sIEpTTGV4aWNhbEVudmlyb25tZW50
OjpzeW1ib2wKICAgICBBU1NFUlQoIUhlYXA6OmhlYXAodmFsdWUpIHx8IEhlYXA6OmhlYXAodmFs
dWUpID09IEhlYXA6OmhlYXAodGhpcykpOwogICAgIAogICAgIFdyaXRlQmFycmllckJhc2U8VW5r
bm93bj4qIHJlZzsKKyAgICBXYXRjaHBvaW50U2V0KiBzZXQ7CiAgICAgewogICAgICAgICBHQ1Nh
ZmVDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihzeW1ib2xUYWJsZSgpLT5tX2xvY2ssIGV4ZWMt
PnZtKCkuaGVhcCk7CiAgICAgICAgIFN5bWJvbFRhYmxlOjpNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBz
eW1ib2xUYWJsZSgpLT5maW5kKGxvY2tlciwgcHJvcGVydHlOYW1lLnVpZCgpKTsKQEAgLTkyLDEx
ICs5MywxMSBAQCBpbmxpbmUgYm9vbCBKU0xleGljYWxFbnZpcm9ubWVudDo6c3ltYm9sCiAgICAg
ICAgIC8vIERlZmVuZCBhZ2FpbnN0IHRoZSBpbnNwZWN0b3IgYXNraW5nIGZvciBhIHZhciBhZnRl
ciBpdCBoYXMgYmVlbiBvcHRpbWl6ZWQgb3V0LgogICAgICAgICBpZiAoIWlzVmFsaWQob2Zmc2V0
KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgaWYgKFZhcmlhYmxlV2F0Y2hw
b2ludFNldCogc2V0ID0gaXRlci0+dmFsdWUud2F0Y2hwb2ludFNldCgpKQotICAgICAgICAgICAg
c2V0LT5pbnZhbGlkYXRlKFZhcmlhYmxlV3JpdGVGaXJlRGV0YWlsKHRoaXMsIHByb3BlcnR5TmFt
ZSkpOyAvLyBEb24ndCBtZXNzIGFyb3VuZCAtIGlmIHdlIGhhZCBmb3VuZCB0aGlzIHN0YXRpY2Fs
bHksIHdlIHdvdWxkIGhhdmUgaW52YWxpZGF0ZWQgaXQuCisgICAgICAgIHNldCA9IGl0ZXItPnZh
bHVlLndhdGNocG9pbnRTZXQoKTsKICAgICAgICAgcmVnID0gJnZhcmlhYmxlQXQob2Zmc2V0KTsK
ICAgICB9CiAgICAgcmVnLT5zZXQodm0sIHRoaXMsIHZhbHVlKTsKKyAgICBzZXQtPmludmFsaWRh
dGUoVmFyaWFibGVXcml0ZUZpcmVEZXRhaWwodGhpcywgcHJvcGVydHlOYW1lKSk7IC8vIERvbid0
IG1lc3MgYXJvdW5kIC0gaWYgd2UgaGFkIGZvdW5kIHRoaXMgc3RhdGljYWxseSwgd2Ugd291bGQg
aGF2ZSBpbnZhbGlkYXRlZCBpdC4KICAgICByZXR1cm4gdHJ1ZTsKIH0KIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTY29wZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2NvcGUuaAkocmV2aXNpb24gMTgyMDY5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTY29wZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
MSw3ICszMSw3IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgU2NvcGVDaGFpbkl0ZXJhdG9y
OwotY2xhc3MgVmFyaWFibGVXYXRjaHBvaW50U2V0OworY2xhc3MgV2F0Y2hwb2ludFNldDsKIAog
ZW51bSBSZXNvbHZlTW9kZSB7CiAgICAgVGhyb3dJZk5vdEZvdW5kLApAQCAtMTAyLDcgKzEwMiw3
IEBAIGlubGluZSBib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKFJlc28KIH0KIAogc3RydWN0
IFJlc29sdmVPcCB7Ci0gICAgUmVzb2x2ZU9wKFJlc29sdmVUeXBlIHR5cGUsIHNpemVfdCBkZXB0
aCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTTGV4aWNhbEVudmlyb25tZW50KiBsZXhpY2FsRW52
aXJvbm1lbnQsIFZhcmlhYmxlV2F0Y2hwb2ludFNldCogd2F0Y2hwb2ludFNldCwgdWludHB0cl90
IG9wZXJhbmQpCisgICAgUmVzb2x2ZU9wKFJlc29sdmVUeXBlIHR5cGUsIHNpemVfdCBkZXB0aCwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTTGV4aWNhbEVudmlyb25tZW50KiBsZXhpY2FsRW52aXJv
bm1lbnQsIFdhdGNocG9pbnRTZXQqIHdhdGNocG9pbnRTZXQsIHVpbnRwdHJfdCBvcGVyYW5kKQog
ICAgICAgICA6IHR5cGUodHlwZSkKICAgICAgICAgLCBkZXB0aChkZXB0aCkKICAgICAgICAgLCBz
dHJ1Y3R1cmUoc3RydWN0dXJlKQpAQCAtMTE2LDcgKzExNiw3IEBAIHN0cnVjdCBSZXNvbHZlT3Ag
ewogICAgIHNpemVfdCBkZXB0aDsKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZTsKICAgICBKU0xl
eGljYWxFbnZpcm9ubWVudCogbGV4aWNhbEVudmlyb25tZW50OwotICAgIFZhcmlhYmxlV2F0Y2hw
b2ludFNldCogd2F0Y2hwb2ludFNldDsKKyAgICBXYXRjaHBvaW50U2V0KiB3YXRjaHBvaW50U2V0
OwogICAgIHVpbnRwdHJfdCBvcGVyYW5kOwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuaAkocmV2aXNpb24gMTgy
MDY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVj
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBACiAjaW5jbHVkZSAiSlNTY29wZS5o
IgogI2luY2x1ZGUgIlByb3BlcnR5RGVzY3JpcHRvci5oIgogI2luY2x1ZGUgIlN5bWJvbFRhYmxl
LmgiCi0jaW5jbHVkZSAiVmFyaWFibGVXYXRjaHBvaW50U2V0SW5saW5lcy5oIgorI2luY2x1ZGUg
IlZhcmlhYmxlV3JpdGVGaXJlRGV0YWlsLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC0xMjYs
NiArMTI2LDcgQEAgaW5saW5lIGJvb2wgc3ltYm9sVGFibGVQdXQoCiAgICAgQVNTRVJUKCFIZWFw
OjpoZWFwKHZhbHVlKSB8fCBIZWFwOjpoZWFwKHZhbHVlKSA9PSBIZWFwOjpoZWFwKG9iamVjdCkp
OwogICAgIAogICAgIFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIHJlZzsKKyAgICBXYXRjaHBv
aW50U2V0KiBzZXQ7CiAgICAgewogICAgICAgICBTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUgPSAq
b2JqZWN0LT5zeW1ib2xUYWJsZSgpOwogICAgICAgICAvLyBGSVhNRTogVGhpcyBpcyB2ZXJ5IHN1
c3BpY2lvdXMuIFdlIHNob3VsZG4ndCBuZWVkIGEgR0Mtc2FmZSBsb2NrIGhlcmUuCkBAIC0xNDIs
MTcgKzE0MywxNCBAQCBpbmxpbmUgYm9vbCBzeW1ib2xUYWJsZVB1dCgKICAgICAgICAgICAgICAg
ICB0aHJvd1R5cGVFcnJvcihleGVjLCBTdHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJy
b3IpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKFZh
cmlhYmxlV2F0Y2hwb2ludFNldCogc2V0ID0gaXRlci0+dmFsdWUud2F0Y2hwb2ludFNldCgpKSB7
Ci0gICAgICAgICAgICAvLyBGSVhNRTogSXQncyBzdHJhbmdlIHRoYXQgd2UncmUgZG9pbmcgdGhp
cyB3aGlsZSBob2xkaW5nIHRoZSBzeW1ib2wgdGFibGUncyBsb2NrLgotICAgICAgICAgICAgLy8g
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNDYwMQotICAgICAgICAg
ICAgc2V0LT5ub3RpZnlXcml0ZSh2bSwgdmFsdWUsIG9iamVjdCwgcHJvcGVydHlOYW1lKTsKLSAg
ICAgICAgfQorICAgICAgICBzZXQgPSBpdGVyLT52YWx1ZS53YXRjaHBvaW50U2V0KCk7CiAgICAg
ICAgIHJlZyA9ICZvYmplY3QtPnZhcmlhYmxlQXQoZmFzdEVudHJ5LnNjb3BlT2Zmc2V0KCkpOwog
ICAgIH0KICAgICAvLyBJJ2QgcHJlZmVyIHdlIG5vdCBob2xkIGxvY2sgd2hpbGUgZXhlY3V0aW5n
IGJhcnJpZXJzLCBzaW5jZSBJIHByZWZlciB0byByZXNlcnZlCiAgICAgLy8gdGhlIHJpZ2h0IGZv
ciBiYXJyaWVycyB0byBiZSBhYmxlIHRvIHRyaWdnZXIgR0MuIEFuZCBJIGRvbid0IHdhbnQgdG8g
aG9sZCBWTQogICAgIC8vIGxvY2tzIHdoaWxlIEdDJ2luZy4KICAgICByZWctPnNldCh2bSwgb2Jq
ZWN0LCB2YWx1ZSk7CisgICAgc2V0LT50b3VjaChWYXJpYWJsZVdyaXRlRmlyZURldGFpbChvYmpl
Y3QsIHByb3BlcnR5TmFtZSkpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0xNjQsNiArMTYy
LDcgQEAgaW5saW5lIGJvb2wgc3ltYm9sVGFibGVQdXRXaXRoQXR0cmlidXRlcwogICAgIEFTU0VS
VCghSGVhcDo6aGVhcCh2YWx1ZSkgfHwgSGVhcDo6aGVhcCh2YWx1ZSkgPT0gSGVhcDo6aGVhcChv
YmplY3QpKTsKIAogICAgIFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIHJlZzsKKyAgICBXYXRj
aHBvaW50U2V0KiBzZXQ7CiAgICAgewogICAgICAgICBTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUg
PSAqb2JqZWN0LT5zeW1ib2xUYWJsZSgpOwogICAgICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxv
Y2tlcihzeW1ib2xUYWJsZS5tX2xvY2spOwpAQCAtMTcyLDEyICsxNzEsMTIgQEAgaW5saW5lIGJv
b2wgc3ltYm9sVGFibGVQdXRXaXRoQXR0cmlidXRlcwogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgICAgICBTeW1ib2xUYWJsZUVudHJ5JiBlbnRyeSA9IGl0ZXItPnZhbHVlOwogICAgICAg
ICBBU1NFUlQoIWVudHJ5LmlzTnVsbCgpKTsKLSAgICAgICAgaWYgKFZhcmlhYmxlV2F0Y2hwb2lu
dFNldCogc2V0ID0gZW50cnkud2F0Y2hwb2ludFNldCgpKQotICAgICAgICAgICAgc2V0LT5ub3Rp
ZnlXcml0ZSh2bSwgdmFsdWUsIG9iamVjdCwgcHJvcGVydHlOYW1lKTsKKyAgICAgICAgc2V0ID0g
ZW50cnkud2F0Y2hwb2ludFNldCgpOwogICAgICAgICBlbnRyeS5zZXRBdHRyaWJ1dGVzKGF0dHJp
YnV0ZXMpOwogICAgICAgICByZWcgPSAmb2JqZWN0LT52YXJpYWJsZUF0KGVudHJ5LnNjb3BlT2Zm
c2V0KCkpOwogICAgIH0KICAgICByZWctPnNldCh2bSwgb2JqZWN0LCB2YWx1ZSk7CisgICAgc2V0
LT50b3VjaChWYXJpYWJsZVdyaXRlRmlyZURldGFpbChvYmplY3QsIHByb3BlcnR5TmFtZSkpOwog
ICAgIHJldHVybiB0cnVlOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9QdXRQcm9wZXJ0eVNsb3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9QdXRQcm9wZXJ0eVNsb3QuaAkocmV2aXNpb24gMTgyMDY5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvUHV0UHJvcGVydHlTbG90LmgJKHdvcmtpbmcgY29weSkKQEAg
LTI4LDYgKzI4LDcgQEAKICNkZWZpbmUgUHV0UHJvcGVydHlTbG90X2gKIAogI2luY2x1ZGUgIkpT
Q0pTVmFsdWUuaCIKKyNpbmNsdWRlICJQcm9wZXJ0eU9mZnNldC5oIgogCiAjaW5jbHVkZSA8d3Rm
L0Fzc2VydGlvbnMuaD4KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3lt
Ym9sVGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L1N5bWJvbFRhYmxlLmNwcAkocmV2aXNpb24gMTgyMDY5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw2
IEBACiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIlNsb3RWaXNpdG9ySW5saW5l
cy5oIgogI2luY2x1ZGUgIlR5cGVQcm9maWxlci5oIgotI2luY2x1ZGUgIlZhcmlhYmxlV2F0Y2hw
b2ludFNldElubGluZXMuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTYwLDEzICs1OSw2IEBA
IHZvaWQgU3ltYm9sVGFibGVFbnRyeTo6ZnJlZUZhdEVudHJ5U2xvdygKICAgICBkZWxldGUgZmF0
RW50cnkoKTsKIH0KIAotSlNWYWx1ZSBTeW1ib2xUYWJsZUVudHJ5OjppbmZlcnJlZFZhbHVlKCkK
LXsKLSAgICBpZiAoIWlzRmF0KCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlKCk7Ci0gICAgcmV0
dXJuIGZhdEVudHJ5KCktPm1fd2F0Y2hwb2ludHMtPmluZmVycmVkVmFsdWUoKTsKLX0KLQogdm9p
ZCBTeW1ib2xUYWJsZUVudHJ5OjpwcmVwYXJlVG9XYXRjaChTeW1ib2xUYWJsZSogc3ltYm9sVGFi
bGUpCiB7CiAgICAgaWYgKCFpc1dhdGNoYWJsZSgpKQpAQCAtNzQsNyArNjYsNyBAQCB2b2lkIFN5
bWJvbFRhYmxlRW50cnk6OnByZXBhcmVUb1dhdGNoKFN5CiAgICAgRmF0RW50cnkqIGVudHJ5ID0g
aW5mbGF0ZSgpOwogICAgIGlmIChlbnRyeS0+bV93YXRjaHBvaW50cykKICAgICAgICAgcmV0dXJu
OwotICAgIGVudHJ5LT5tX3dhdGNocG9pbnRzID0gYWRvcHRSZWYobmV3IFZhcmlhYmxlV2F0Y2hw
b2ludFNldCgqc3ltYm9sVGFibGUpKTsKKyAgICBlbnRyeS0+bV93YXRjaHBvaW50cyA9IGFkb3B0
UmVmKG5ldyBXYXRjaHBvaW50U2V0KENsZWFyV2F0Y2hwb2ludCkpOwogfQogCiB2b2lkIFN5bWJv
bFRhYmxlRW50cnk6OmFkZFdhdGNocG9pbnQoV2F0Y2hwb2ludCogd2F0Y2hwb2ludCkKQEAgLTgy
LDE1ICs3NCw2IEBAIHZvaWQgU3ltYm9sVGFibGVFbnRyeTo6YWRkV2F0Y2hwb2ludChXYXQKICAg
ICBmYXRFbnRyeSgpLT5tX3dhdGNocG9pbnRzLT5hZGQod2F0Y2hwb2ludCk7CiB9CiAKLXZvaWQg
U3ltYm9sVGFibGVFbnRyeTo6bm90aWZ5V3JpdGVTbG93KFZNJiB2bSwgSlNWYWx1ZSB2YWx1ZSwg
Y29uc3QgRmlyZURldGFpbCYgZGV0YWlsKQotewotICAgIFZhcmlhYmxlV2F0Y2hwb2ludFNldCog
d2F0Y2hwb2ludHMgPSBmYXRFbnRyeSgpLT5tX3dhdGNocG9pbnRzLmdldCgpOwotICAgIGlmICgh
d2F0Y2hwb2ludHMpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICB3YXRjaHBvaW50cy0+bm90
aWZ5V3JpdGUodm0sIHZhbHVlLCBkZXRhaWwpOwotfQotCiBTeW1ib2xUYWJsZUVudHJ5OjpGYXRF
bnRyeSogU3ltYm9sVGFibGVFbnRyeTo6aW5mbGF0ZVNsb3coKQogewogICAgIEZhdEVudHJ5KiBl
bnRyeSA9IG5ldyBGYXRFbnRyeShtX2JpdHMpOwpAQCAtMTAxLDcgKzg0LDYgQEAgU3ltYm9sVGFi
bGVFbnRyeTo6RmF0RW50cnkqIFN5bWJvbFRhYmxlRQogU3ltYm9sVGFibGU6OlN5bWJvbFRhYmxl
KFZNJiB2bSkKICAgICA6IEpTQ2VsbCh2bSwgdm0uc3ltYm9sVGFibGVTdHJ1Y3R1cmUuZ2V0KCkp
CiAgICAgLCBtX3VzZXNOb25TdHJpY3RFdmFsKGZhbHNlKQotICAgICwgbV9mdW5jdGlvbkVudGVy
ZWRPbmNlKENsZWFyV2F0Y2hwb2ludCkKIHsKIH0KIApAQCAtMTEzLDM2ICs5NSwxMSBAQCB2b2lk
IFN5bWJvbFRhYmxlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogCiAgICAgCiAgICAgdmlzaXRvci5h
cHBlbmQoJnRoaXNTeW1ib2xUYWJsZS0+bV9hcmd1bWVudHMpOwogICAgIAotICAgIGlmICghdGhp
c1N5bWJvbFRhYmxlLT5tX3dhdGNocG9pbnRDbGVhbnVwKSB7Ci0gICAgICAgIHRoaXNTeW1ib2xU
YWJsZS0+bV93YXRjaHBvaW50Q2xlYW51cCA9Ci0gICAgICAgICAgICBzdGQ6Om1ha2VfdW5pcXVl
PFdhdGNocG9pbnRDbGVhbnVwPih0aGlzU3ltYm9sVGFibGUpOwotICAgIH0KLSAgICAKLSAgICB2
aXNpdG9yLmFkZFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIodGhpc1N5bWJvbFRhYmxlLT5tX3dhdGNo
cG9pbnRDbGVhbnVwLmdldCgpKTsKLSAgICAKICAgICAvLyBTYXZlIHNvbWUgbWVtb3J5LiBUaGlz
IGlzIE8obikgdG8gcmVidWlsZCBhbmQgd2UgZG8gc28gb24gdGhlIGZseS4KICAgICBDb25jdXJy
ZW50SklUTG9ja2VyIGxvY2tlcih0aGlzU3ltYm9sVGFibGUtPm1fbG9jayk7CiAgICAgdGhpc1N5
bWJvbFRhYmxlLT5tX2xvY2FsVG9FbnRyeSA9IG51bGxwdHI7CiB9CiAKLVN5bWJvbFRhYmxlOjpX
YXRjaHBvaW50Q2xlYW51cDo6V2F0Y2hwb2ludENsZWFudXAoU3ltYm9sVGFibGUqIHN5bWJvbFRh
YmxlKQotICAgIDogbV9zeW1ib2xUYWJsZShzeW1ib2xUYWJsZSkKLXsKLX0KLQotU3ltYm9sVGFi
bGU6OldhdGNocG9pbnRDbGVhbnVwOjp+V2F0Y2hwb2ludENsZWFudXAoKSB7IH0KLQotdm9pZCBT
eW1ib2xUYWJsZTo6V2F0Y2hwb2ludENsZWFudXA6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KCkK
LXsKLSAgICBTdHJpbmdGaXJlRGV0YWlsIGRldGFpbCgiU3ltYm9sIHRhYmxlIGNsZWFuLXVwIGR1
cmluZyBHQyIpOwotICAgIE1hcDo6aXRlcmF0b3IgaXRlciA9IG1fc3ltYm9sVGFibGUtPm1fbWFw
LmJlZ2luKCk7Ci0gICAgTWFwOjppdGVyYXRvciBlbmQgPSBtX3N5bWJvbFRhYmxlLT5tX21hcC5l
bmQoKTsKLSAgICBmb3IgKDsgaXRlciAhPSBlbmQ7ICsraXRlcikgewotICAgICAgICBpZiAoVmFy
aWFibGVXYXRjaHBvaW50U2V0KiBzZXQgPSBpdGVyLT52YWx1ZS53YXRjaHBvaW50U2V0KCkpCi0g
ICAgICAgICAgICBzZXQtPmZpbmFsaXplVW5jb25kaXRpb25hbGx5KGRldGFpbCk7Ci0gICAgfQot
fQotCiBjb25zdCBTeW1ib2xUYWJsZTo6TG9jYWxUb0VudHJ5VmVjJiBTeW1ib2xUYWJsZTo6bG9j
YWxUb0VudHJ5KGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImKQogewogICAgIGlmIChVTkxJS0VM
WSghbV9sb2NhbFRvRW50cnkpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TeW1ib2xUYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1N5bWJvbFRhYmxlLmgJKHJldmlzaW9uIDE4MjA2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM1LDEzICszNSwx
NSBAQAogI2luY2x1ZGUgIlNjb3BlZEFyZ3VtZW50c1RhYmxlLmgiCiAjaW5jbHVkZSAiVHlwZUxv
Y2F0aW9uLmgiCiAjaW5jbHVkZSAiVmFyT2Zmc2V0LmgiCi0jaW5jbHVkZSAiVmFyaWFibGVXYXRj
aHBvaW50U2V0LmgiCisjaW5jbHVkZSAiV2F0Y2hwb2ludC5oIgogI2luY2x1ZGUgPG1lbW9yeT4K
ICNpbmNsdWRlIDx3dGYvSGFzaFRyYWl0cy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0lt
cGwuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNzIFN5bWJvbFRhYmxlOworCiBzdGF0aWMg
QUxXQVlTX0lOTElORSBpbnQgbWlzc2luZ1N5bWJvbE1hcmtlcigpIHsgcmV0dXJuIHN0ZDo6bnVt
ZXJpY19saW1pdHM8aW50Pjo6bWF4KCk7IH0KIAogLy8gVGhlIGJpdCB0d2lkZGxpbmcgaW4gdGhp
cyBjbGFzcyBhc3N1bWVzIHRoYXQgZXZlcnkgcmVnaXN0ZXIgaW5kZXggaXMgYQpAQCAtNjMsMTEg
KzY1LDExIEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIGludCBtaXNzaW5nU3ltYm9sTWEKIC8vIGNv
dW50ZWQgcG9pbnRlciB0byBhIHNoYXJlZCBXYXRjaHBvaW50U2V0LiBUaHVzLCBpbi1wbGFjZSBl
ZGl0cyBvZiB0aGUKIC8vIFdhdGNocG9pbnRTZXQgd2lsbCBtYW5pZmVzdCBpbiBhbGwgY29waWVz
LiBIZXJlJ3MgYSBwaWN0dXJlOgogLy8KLS8vIFN5bWJvbFRhYmxlRW50cnkgLS0+IEZhdEVudHJ5
IC0tPiBWYXJpYWJsZVdhdGNocG9pbnRTZXQKKy8vIFN5bWJvbFRhYmxlRW50cnkgLS0+IEZhdEVu
dHJ5IC0tPiBXYXRjaHBvaW50U2V0CiAvLwogLy8gSWYgeW91IG1ha2UgYSBjb3B5IG9mIGEgU3lt
Ym9sVGFibGVFbnRyeSwgeW91IHdpbGwgaGF2ZToKIC8vCi0vLyBvcmlnaW5hbDogU3ltYm9sVGFi
bGVFbnRyeSAtLT4gRmF0RW50cnkgLS0+IFZhcmlhYmxlV2F0Y2hwb2ludFNldAorLy8gb3JpZ2lu
YWw6IFN5bWJvbFRhYmxlRW50cnkgLS0+IEZhdEVudHJ5IC0tPiBXYXRjaHBvaW50U2V0CiAvLyBj
b3B5OiAgICAgU3ltYm9sVGFibGVFbnRyeSAtLT4gRmF0RW50cnkgLS0tLS1eCiAKIHN0cnVjdCBT
eW1ib2xUYWJsZUVudHJ5IHsKQEAgLTI2MCwxMCArMjYyLDEwIEBAIHB1YmxpYzoKICAgICAgICAg
cmV0dXJuIGJpdHMoKSAmIERvbnRFbnVtRmxhZzsKICAgICB9CiAgICAgCi0gICAgSlNWYWx1ZSBp
bmZlcnJlZFZhbHVlKCk7Ci0KICAgICB2b2lkIGRpc2FibGVXYXRjaGluZygpCiAgICAgeworICAg
ICAgICBpZiAoV2F0Y2hwb2ludFNldCogc2V0ID0gd2F0Y2hwb2ludFNldCgpKQorICAgICAgICAg
ICAgc2V0LT5pbnZhbGlkYXRlKCJEaXNhYmxpbmcgd2F0Y2hpbmcgaW4gc3ltYm9sIHRhYmxlIik7
CiAgICAgICAgIGlmICh2YXJPZmZzZXQoKS5pc1Njb3BlKCkpCiAgICAgICAgICAgICBwYWNrKHZh
ck9mZnNldCgpLCBmYWxzZSwgaXNSZWFkT25seSgpLCBpc0RvbnRFbnVtKCkpOwogICAgIH0KQEAg
LTI3MiwyMCArMjc0LDEzIEBAIHB1YmxpYzoKICAgICAKICAgICB2b2lkIGFkZFdhdGNocG9pbnQo
V2F0Y2hwb2ludCopOwogICAgIAotICAgIFZhcmlhYmxlV2F0Y2hwb2ludFNldCogd2F0Y2hwb2lu
dFNldCgpCisgICAgV2F0Y2hwb2ludFNldCogd2F0Y2hwb2ludFNldCgpCiAgICAgewogICAgICAg
ICBpZiAoIWlzRmF0KCkpCiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgcmV0dXJuIGZh
dEVudHJ5KCktPm1fd2F0Y2hwb2ludHMuZ2V0KCk7CiAgICAgfQogICAgIAotICAgIEFMV0FZU19J
TkxJTkUgdm9pZCBub3RpZnlXcml0ZShWTSYgdm0sIEpTVmFsdWUgdmFsdWUsIGNvbnN0IEZpcmVE
ZXRhaWwmIGRldGFpbCkKLSAgICB7Ci0gICAgICAgIGlmIChMSUtFTFkoIWlzRmF0KCkpKQotICAg
ICAgICAgICAgcmV0dXJuOwotICAgICAgICBub3RpZnlXcml0ZVNsb3codm0sIHZhbHVlLCBkZXRh
aWwpOwotICAgIH0KLSAgICAKIHByaXZhdGU6CiAgICAgc3RhdGljIGNvbnN0IGludHB0cl90IFNs
aW1GbGFnID0gMHgxOwogICAgIHN0YXRpYyBjb25zdCBpbnRwdHJfdCBSZWFkT25seUZsYWcgPSAw
eDI7CkBAIC0zMDgsNyArMzAzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIGludHB0
cl90IG1fYml0czsgLy8gYWx3YXlzIGhhcyBGYXRGbGFnIHNldCBhbmQgZXhhY3RseSBtYXRjaGVz
IHdoYXQgdGhlIGJpdHMgd291bGQgaGF2ZSBiZWVuIGlmIHRoaXMgd2Fzbid0IGZhdC4KICAgICAg
ICAgCi0gICAgICAgIFJlZlB0cjxWYXJpYWJsZVdhdGNocG9pbnRTZXQ+IG1fd2F0Y2hwb2ludHM7
CisgICAgICAgIFJlZlB0cjxXYXRjaHBvaW50U2V0PiBtX3dhdGNocG9pbnRzOwogICAgIH07CiAg
ICAgCiAgICAgU3ltYm9sVGFibGVFbnRyeSYgY29weVNsb3coY29uc3QgU3ltYm9sVGFibGVFbnRy
eSYpOwpAQCAtNjQ2LDE4ICs2NDEsNiBAQCBwcm90ZWN0ZWQ6CiAgICAgc3RhdGljIGNvbnN0IHVu
c2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gU3RydWN0dXJlSXNJbW1vcnRhbCB8IEJhc2U6OlN0cnVj
dHVyZUZsYWdzOwogCiBwcml2YXRlOgotICAgIGNsYXNzIFdhdGNocG9pbnRDbGVhbnVwIDogcHVi
bGljIFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIgewotICAgIHB1YmxpYzoKLSAgICAgICAgV2F0Y2hw
b2ludENsZWFudXAoU3ltYm9sVGFibGUqKTsKLSAgICAgICAgdmlydHVhbCB+V2F0Y2hwb2ludENs
ZWFudXAoKTsKLSAgICAgICAgCi0gICAgcHJvdGVjdGVkOgotICAgICAgICB2aXJ0dWFsIHZvaWQg
ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoKSBvdmVycmlkZTsKLQotICAgIHByaXZhdGU6Ci0gICAg
ICAgIFN5bWJvbFRhYmxlKiBtX3N5bWJvbFRhYmxlOwotICAgIH07Ci0gICAgCiAgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgU3ltYm9sVGFibGUoVk0mKTsKICAgICB+U3ltYm9sVGFibGUoKTsKIApAQCAt
Njc1LDEyICs2NTgsOSBAQCBwcml2YXRlOgogICAgIAogICAgIFdyaXRlQmFycmllcjxTY29wZWRB
cmd1bWVudHNUYWJsZT4gbV9hcmd1bWVudHM7CiAgICAgCi0gICAgc3RkOjp1bmlxdWVfcHRyPFdh
dGNocG9pbnRDbGVhbnVwPiBtX3dhdGNocG9pbnRDbGVhbnVwOwogICAgIHN0ZDo6dW5pcXVlX3B0
cjxMb2NhbFRvRW50cnlWZWM+IG1fbG9jYWxUb0VudHJ5OwogCiBwdWJsaWM6Ci0gICAgSW5saW5l
V2F0Y2hwb2ludFNldCBtX2Z1bmN0aW9uRW50ZXJlZE9uY2U7Ci0gICAgCiAgICAgbXV0YWJsZSBD
b25jdXJyZW50SklUTG9jayBtX2xvY2s7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9UeXBlUHJvZmlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1R5cGVQcm9maWxlci5jcHAJKHJldmlzaW9uIDE4MjA2OSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVQcm9maWxlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgIkluc3BlY3RvclByb3RvY29sT2JqZWN0
cy5oIgogI2luY2x1ZGUgIlR5cGVMb2NhdGlvbi5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmlu
Z0J1aWxkZXIuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>249774</attachid>
            <date>2015-03-30 15:30:05 -0700</date>
            <delta_ts>2015-03-31 12:16:56 -0700</delta_ts>
            <desc>more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>86698</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJv
amVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxODIwNjkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzgzLDYgKzM4Myw4IEBACiAJCTBGNkIxQ0M2MTg2MkM0
NzgwMDg0NUQ5NyAvKiBGVExVbndpbmRJbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjZCMUNDMjE4NjJDNDc4MDA4NDVEOTcgLyogRlRMVW53aW5k
SW5mby5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CTBGNkIxQ0M5MTg2NDFERjgwMDg0NUQ5NyAvKiBBcml0eUNoZWNrRmFpbFJldHVyblRodW5rcy5j
cHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjZCMUND
NzE4NjQxREY4MDA4NDVEOTcgLyogQXJpdHlDaGVja0ZhaWxSZXR1cm5UaHVua3MuY3BwICovOyB9
OwogCQkwRjZCMUNDQTE4NjQxREY4MDA4NDVEOTcgLyogQXJpdHlDaGVja0ZhaWxSZXR1cm5UaHVu
a3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNkIx
Q0M4MTg2NDFERjgwMDg0NUQ5NyAvKiBBcml0eUNoZWNrRmFpbFJldHVyblRodW5rcy5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGNkM3MzUwMUFD
OUY5OUYwMEJFMTY4MiAvKiBWYXJpYWJsZVdyaXRlRmlyZURldGFpbC5jcHAgaW4gU291cmNlcyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjZDNzM0RTFBQzlGOTlGMDBCRTE2
ODIgLyogVmFyaWFibGVXcml0ZUZpcmVEZXRhaWwuY3BwICovOyB9OworCQkwRjZDNzM1MTFBQzlG
OTlGMDBCRTE2ODIgLyogVmFyaWFibGVXcml0ZUZpcmVEZXRhaWwuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNkM3MzRGMUFDOUY5OUYwMEJFMTY4MiAv
KiBWYXJpYWJsZVdyaXRlRmlyZURldGFpbC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTBGNkU4NDVBMTkwMzBCRUYwMDU2Mjc0MSAvKiBERkdWYXJp
YWJsZUFjY2Vzc0RhdGEuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY2RTg0NTkxOTAzMEJFRjAwNTYyNzQxIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0
YS5jcHAgKi87IH07CiAJCTBGNkZDNzUwMTk2MTEwQTgwMEUxRDAyRCAvKiBDb21wbGV4R2V0U3Rh
dHVzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
NkZDNzRFMTk2MTEwQTgwMEUxRDAyRCAvKiBDb21wbGV4R2V0U3RhdHVzLmNwcCAqLzsgfTsKIAkJ
MEY2RkM3NTExOTYxMTBBODAwRTFEMDJEIC8qIENvbXBsZXhHZXRTdGF0dXMuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNkZDNzRGMTk2MTEwQTgwMEUx
RDAyRCAvKiBDb21wbGV4R2V0U3RhdHVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTIxMDAsNiArMjEwMiw4IEBACiAJCTBGNkIxQ0MyMTg2MkM0
NzgwMDg0NUQ5NyAvKiBGVExVbndpbmRJbmZvLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
bmFtZSA9IEZUTFVud2luZEluZm8uaDsgcGF0aCA9IGZ0bC9GVExVbndpbmRJbmZvLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNkIxQ0M3MTg2NDFERjgwMDg0NUQ5NyAvKiBBcml0
eUNoZWNrRmFpbFJldHVyblRodW5rcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7
IHBhdGggPSBBcml0eUNoZWNrRmFpbFJldHVyblRodW5rcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGNkIxQ0M4MTg2NDFERjgwMDg0NUQ5NyAvKiBBcml0eUNoZWNrRmFpbFJl
dHVyblRodW5rcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBcml0eUNoZWNr
RmFpbFJldHVyblRodW5rcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjZDNzM0
RTFBQzlGOTlGMDBCRTE2ODIgLyogVmFyaWFibGVXcml0ZUZpcmVEZXRhaWwuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVmFyaWFibGVXcml0ZUZpcmVEZXRhaWwuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjZDNzM0RjFBQzlGOTlGMDBCRTE2ODIg
LyogVmFyaWFibGVXcml0ZUZpcmVEZXRhaWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gVmFyaWFibGVXcml0ZUZpcmVEZXRhaWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEY2RTg0NTkxOTAzMEJFRjAwNTYyNzQxIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YS5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdWYXJpYWJsZUFjY2Vz
c0RhdGEuY3BwOyBwYXRoID0gZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNkZDNzRFMTk2MTEwQTgwMEUxRDAyRCAvKiBDb21wbGV4
R2V0U3RhdHVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvbXBs
ZXhHZXRTdGF0dXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjZGQzc0RjE5
NjExMEE4MDBFMUQwMkQgLyogQ29tcGxleEdldFN0YXR1cy5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBDb21wbGV4R2V0U3RhdHVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CkBAIC01MjgwLDYgKzUyODQsOCBAQAogCQkJCTBGQ0E5MTEyMTk1RTY2QTAwMDQyNjQzOCAv
KiBWYXJpYWJsZVdhdGNocG9pbnRTZXQuY3BwICovLAogCQkJCTBGOTE4MUM2MTg0MTVDQTUwMDU3
QjY2OSAvKiBWYXJpYWJsZVdhdGNocG9pbnRTZXQuaCAqLywKIAkJCQlGRTUyNDhGODE5MTQ0MkQ5
MDBCN0ZERTQgLyogVmFyaWFibGVXYXRjaHBvaW50U2V0SW5saW5lcy5oICovLAorCQkJCTBGNkM3
MzRFMUFDOUY5OUYwMEJFMTY4MiAvKiBWYXJpYWJsZVdyaXRlRmlyZURldGFpbC5jcHAgKi8sCisJ
CQkJMEY2QzczNEYxQUM5Rjk5RjAwQkUxNjgyIC8qIFZhcmlhYmxlV3JpdGVGaXJlRGV0YWlsLmgg
Ki8sCiAJCQkJMEYyMEMyNTgxQTgwMTNBQjAwREEzMjI5IC8qIFZpcnR1YWxSZWdpc3Rlci5jcHAg
Ki8sCiAJCQkJMEY0MjZBNDYxNDYwQ0JBQjAwMTMxRjhGIC8qIFZpcnR1YWxSZWdpc3Rlci5oICov
LAogCQkJCTBGOTE5RDIyMTU4NTNDREUwMDRBNEU3RCAvKiBXYXRjaHBvaW50LmNwcCAqLywKQEAg
LTYzNTQsNiArNjM2MCw3IEBACiAJCQkJQTcwOUYyRjAxN0EwQUMwNDAwNTEyRTk4IC8qIFNsb3dQ
YXRoQ2FsbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTMzMDQwMDQwRTZBNzQ5NDAwNzg2RTZBIC8q
IFNtYWxsU3RyaW5ncy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NjQwRTE2RjVDRDAwQjM0
NDYwIC8qIFNvdXJjZUNvZGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGNkM3MzUxMUFDOUY5OUYw
MEJFMTY4MiAvKiBWYXJpYWJsZVdyaXRlRmlyZURldGFpbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
QkMxOEM0NjMwRTE2RjVDRDAwQjM0NDYwIC8qIFNvdXJjZVByb3ZpZGVyLmggaW4gSGVhZGVycyAq
LywKIAkJCQk3MEVDMEVDMzFBQTBEN0RBMDBCNkFBRkEgLyogSlNTdHJpbmdJdGVyYXRvci5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJRTQ5REMxNkMxMkVGMjk0RTAwMTg0QTFGIC8qIFNvdXJjZVByb3Zp
ZGVyQ2FjaGUuaCBpbiBIZWFkZXJzICovLApAQCAtNjk2Myw2ICs2OTcwLDcgQEAKIAkJCQlBNzdG
MTgyMTE2NDA4OEIyMDA2NDBBNDcgLyogQ29kZUNhY2hlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJ
CTBGOEY5NDQ2MTY2NzY0RjEwMEQ2MTk3MSAvKiBDb2RlT3JpZ2luLmNwcCBpbiBTb3VyY2VzICov
LAogCQkJCTg2QjU4MjY3MTREMjc5NkMwMEE5QzMwNiAvKiBDb2RlUHJvZmlsZS5jcHAgaW4gU291
cmNlcyAqLywKKwkJCQkwRjZDNzM1MDFBQzlGOTlGMDBCRTE2ODIgLyogVmFyaWFibGVXcml0ZUZp
cmVEZXRhaWwuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODZCNTgyNjkxNEQyNzk3MDAwQTlDMzA2
IC8qIENvZGVQcm9maWxpbmcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY4Rjk0M0MxNjY3NjMx
MzAwRDYxOTcxIC8qIENvZGVTcGVjaWFsaXphdGlvbktpbmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEY4Rjk0NDIxNjY3NjMzNTAwRDYxOTcxIC8qIENvZGVUeXBlLmNwcCBpbiBTb3VyY2VzICov
LApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5qc29u
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxp
c3QuanNvbgkocmV2aXNpb24gMTgyMDY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0J5dGVjb2RlTGlzdC5qc29uCSh3b3JraW5nIGNvcHkpCkBAIC02LDcgKzYsNiBAQAogICAg
ICAgICAgICAgeyAibmFtZSIgOiAib3BfZW50ZXIiLCAibGVuZ3RoIiA6IDEgfSwKICAgICAgICAg
ICAgIHsgIm5hbWUiIDogIm9wX2NyZWF0ZV9sZXhpY2FsX2Vudmlyb25tZW50IiwgImxlbmd0aCIg
OiAzIH0sCiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9nZXRfc2NvcGUiLCAibGVuZ3RoIiA6
IDIgfSwKLSAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX3RvdWNoX2VudHJ5IiwgImxlbmd0aCIg
OiAxIH0sCiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9jcmVhdGVfZGlyZWN0X2FyZ3VtZW50
cyIsICJsZW5ndGgiIDogMiB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfY3JlYXRlX3Nj
b3BlZF9hcmd1bWVudHMiLCAibGVuZ3RoIiA6IDMgfSwKICAgICAgICAgICAgIHsgIm5hbWUiIDog
Im9wX2NyZWF0ZV9vdXRfb2ZfYmFuZF9hcmd1bWVudHMiLCAibGVuZ3RoIiA6IDIgfSwKQEAgLTEw
Myw3ICsxMDIsNyBAQAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfY29uc3RydWN0X3ZhcmFy
Z3MiLCAibGVuZ3RoIiA6IDkgfSwKICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX3N0cmNhdCIs
ICJsZW5ndGgiIDogNCB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfdG9fcHJpbWl0aXZl
IiwgImxlbmd0aCIgOiAzIH0sCi0gICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9yZXNvbHZlX3Nj
b3BlIiwgImxlbmd0aCIgOiA3IH0sCisgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9yZXNvbHZl
X3Njb3BlIiwgImxlbmd0aCIgOiA2IH0sCiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9nZXRf
ZnJvbV9zY29wZSIsICJsZW5ndGgiIDogOCB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3Bf
cHV0X3RvX3Njb3BlIiwgImxlbmd0aCIgOiA3IH0sCiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJv
cF9nZXRfZnJvbV9hcmd1bWVudHMiLCAibGVuZ3RoIiA6IDUgfSwKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZVVzZURlZi5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZVVzZURlZi5oCShyZXZpc2lvbiAxODIw
NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuaAko
d29ya2luZyBjb3B5KQpAQCAtNTAsNyArNTAsNiBAQCB2b2lkIGNvbXB1dGVVc2VzRm9yQnl0ZWNv
ZGVPZmZzZXQoCiAgICAgY2FzZSBvcF9uZXdfb2JqZWN0OgogICAgIGNhc2Ugb3BfZW50ZXI6CiAg
ICAgY2FzZSBvcF9jYXRjaDoKLSAgICBjYXNlIG9wX3RvdWNoX2VudHJ5OgogICAgIGNhc2Ugb3Bf
cHJvZmlsZV9jb250cm9sX2Zsb3c6CiAgICAgY2FzZSBvcF9jcmVhdGVfZGlyZWN0X2FyZ3VtZW50
czoKICAgICBjYXNlIG9wX2NyZWF0ZV9vdXRfb2ZfYmFuZF9hcmd1bWVudHM6CkBAIC0yNzgsNyAr
Mjc3LDYgQEAgdm9pZCBjb21wdXRlRGVmc0ZvckJ5dGVjb2RlT2Zmc2V0KENvZGVCbAogICAgIGNh
c2Ugb3BfcHV0X2J5X2luZGV4OgogICAgIGNhc2Ugb3BfcHJvZmlsZV90eXBlOgogICAgIGNhc2Ug
b3BfcHJvZmlsZV9jb250cm9sX2Zsb3c6Ci0gICAgY2FzZSBvcF90b3VjaF9lbnRyeToKICAgICBj
YXNlIG9wX3B1dF90b19hcmd1bWVudHM6CiAjZGVmaW5lIExMSU5UX0hFTFBFUl9PUENPREVTKG9w
Y29kZSwgbGVuZ3RoKSBjYXNlIG9wY29kZToKICAgICAgICAgRk9SX0VBQ0hfTExJTlRfT1BDT0RF
X0VYVEVOU0lPTihMTElOVF9IRUxQRVJfT1BDT0RFUyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMTgyMDY5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTczMywxMCArNzMzLDYgQEAgdm9pZCBDb2RlQmxvY2s6OmR1bXBCeXRlY29kZSgKICAgICAg
ICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImVudGVy
Iik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBjYXNlIG9wX3RvdWNo
X2VudHJ5OiB7Ci0gICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2Nh
dGlvbiwgaXQsICJ0b3VjaF9lbnRyeSIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0K
ICAgICAgICAgY2FzZSBvcF9jcmVhdGVfbGV4aWNhbF9lbnZpcm9ubWVudDogewogICAgICAgICAg
ICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7CiAgICAgICAgICAgICBpbnQgcjEgPSAoKytp
dCktPnUub3BlcmFuZDsKQEAgLTE0ODQsNyArMTQ4MCw2IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1w
Qnl0ZWNvZGUoCiAgICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMsICVzLCAldTwlc3wlcz4s
ICVkIiwgcmVnaXN0ZXJOYW1lKHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShzY29wZSkuZGF0YSgp
LCBpZE5hbWUoaWQwLCBpZGVudGlmaWVyKGlkMCkpLmRhdGEoKSwKICAgICAgICAgICAgICAgICBt
b2RlQW5kVHlwZS5vcGVyYW5kKCksIHJlc29sdmVNb2RlTmFtZShtb2RlQW5kVHlwZS5tb2RlKCkp
LCByZXNvbHZlVHlwZU5hbWUobW9kZUFuZFR5cGUudHlwZSgpKSwKICAgICAgICAgICAgICAgICBk
ZXB0aCk7Ci0gICAgICAgICAgICArK2l0OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
ICAgICAgICAgY2FzZSBvcF9nZXRfZnJvbV9zY29wZTogewpAQCAtMTkzMSw4ICsxOTI2LDYgQEAg
Q29kZUJsb2NrOjpDb2RlQmxvY2soU2NyaXB0RXhlY3V0YWJsZSogbwogICAgICAgICAgICAgUmVz
b2x2ZU9wIG9wID0gSlNTY29wZTo6YWJzdHJhY3RSZXNvbHZlKG1fZ2xvYmFsT2JqZWN0LT5nbG9i
YWxFeGVjKCksIG5lZWRzQWN0aXZhdGlvbigpLCBzY29wZSwgaWRlbnQsIEdldCwgdHlwZSk7CiAg
ICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIDRdLnUub3BlcmFuZCA9IG9wLnR5cGU7CiAgICAg
ICAgICAgICBpbnN0cnVjdGlvbnNbaSArIDVdLnUub3BlcmFuZCA9IG9wLmRlcHRoOwotICAgICAg
ICAgICAgaWYgKG9wLmxleGljYWxFbnZpcm9ubWVudCkKLSAgICAgICAgICAgICAgICBpbnN0cnVj
dGlvbnNbaSArIDZdLnUubGV4aWNhbEVudmlyb25tZW50LnNldCgqdm0oKSwgb3duZXJFeGVjdXRh
YmxlLCBvcC5sZXhpY2FsRW52aXJvbm1lbnQpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KIApAQCAtMjUyMCwxNSArMjUxMyw2IEBAIHZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6ZVVuY29u
ZGl0aW9uYWxseSgKICAgICAgICAgICAgICAgICBjdXJJbnN0cnVjdGlvblszXS51LnRvVGhpc1N0
YXR1cyA9IG1lcmdlKAogICAgICAgICAgICAgICAgICAgICBjdXJJbnN0cnVjdGlvblszXS51LnRv
VGhpc1N0YXR1cywgVG9UaGlzQ2xlYXJlZEJ5R0MpOwogICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgY2FzZSBvcF9yZXNvbHZlX3Njb3BlOiB7Ci0gICAgICAgICAgICAgICAgV3Jp
dGVCYXJyaWVyQmFzZTxKU0xleGljYWxFbnZpcm9ubWVudD4mIGxleGljYWxFbnZpcm9ubWVudCA9
IGN1ckluc3RydWN0aW9uWzZdLnUubGV4aWNhbEVudmlyb25tZW50OwotICAgICAgICAgICAgICAg
IGlmICghbGV4aWNhbEVudmlyb25tZW50IHx8IEhlYXA6OmlzTWFya2VkKGxleGljYWxFbnZpcm9u
bWVudC5nZXQoKSkpCi0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAg
IGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCi0gICAgICAgICAgICAgICAgICAgIGRhdGFMb2dG
KCJDbGVhcmluZyBkZWFkIGxleGljYWxFbnZpcm9ubWVudCAlcC5cbiIsIGxleGljYWxFbnZpcm9u
bWVudC5nZXQoKSk7Ci0gICAgICAgICAgICAgICAgbGV4aWNhbEVudmlyb25tZW50LmNsZWFyKCk7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9CiAgICAgICAgICAgICBjYXNl
IG9wX2dldF9mcm9tX3Njb3BlOgogICAgICAgICAgICAgY2FzZSBvcF9wdXRfdG9fc2NvcGU6IHsK
ICAgICAgICAgICAgICAgICBSZXNvbHZlTW9kZUFuZFR5cGUgbW9kZUFuZFR5cGUgPQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmNwcAkocmV2aXNp
b24gMTgyMDY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDEsNiArMTQxLDE4IEBAIHZvaWQgQ29kZU9yaWdpbjo6
ZHVtcEluQ29udGV4dChQcmludFN0cmUKICAgICBkdW1wKG91dCk7CiB9CiAKK0pTRnVuY3Rpb24q
IElubGluZUNhbGxGcmFtZTo6Y2FsbGVlQ29uc3RhbnQoKSBjb25zdAoreworICAgIGlmIChjYWxs
ZWVSZWNvdmVyeS5pc0NvbnN0YW50KCkpCisgICAgICAgIHJldHVybiBqc0Nhc3Q8SlNGdW5jdGlv
bio+KGNhbGxlZVJlY292ZXJ5LmNvbnN0YW50KCkpOworICAgIHJldHVybiBudWxscHRyOworfQor
Cit2b2lkIElubGluZUNhbGxGcmFtZTo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCit7CisgICAgdmlzaXRvci5hcHBlbmQoJmV4ZWN1dGFibGUpOworfQorCiBKU0Z1bmN0aW9u
KiBJbmxpbmVDYWxsRnJhbWU6OmNhbGxlZUZvckNhbGxGcmFtZShFeGVjU3RhdGUqIGV4ZWMpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY2FsbGVlUmVjb3ZlcnkucmVj
b3ZlcihleGVjKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9y
aWdpbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2Rl
T3JpZ2luLmgJKHJldmlzaW9uIDE4MjA2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlT3JpZ2luLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDYgQEAKIAogI2lu
Y2x1ZGUgIkNvZGVCbG9ja0hhc2guaCIKICNpbmNsdWRlICJDb2RlU3BlY2lhbGl6YXRpb25LaW5k
LmgiCi0jaW5jbHVkZSAiSlNGdW5jdGlvbi5oIgogI2luY2x1ZGUgIlZhbHVlUmVjb3ZlcnkuaCIK
ICNpbmNsdWRlICJXcml0ZUJhcnJpZXIuaCIKICNpbmNsdWRlIDx3dGYvQml0VmVjdG9yLmg+CkBA
IC0yMDcsMTcgKzIwNiw4IEBAIHN0cnVjdCBJbmxpbmVDYWxsRnJhbWUgewogICAgIAogICAgIENv
ZGVTcGVjaWFsaXphdGlvbktpbmQgc3BlY2lhbGl6YXRpb25LaW5kKCkgY29uc3QgeyByZXR1cm4g
c3BlY2lhbGl6YXRpb25LaW5kRm9yKHN0YXRpY19jYXN0PEtpbmQ+KGtpbmQpKTsgfQogCi0gICAg
SlNGdW5jdGlvbiogY2FsbGVlQ29uc3RhbnQoKSBjb25zdAotICAgIHsKLSAgICAgICAgaWYgKGNh
bGxlZVJlY292ZXJ5LmlzQ29uc3RhbnQoKSkKLSAgICAgICAgICAgIHJldHVybiBqc0Nhc3Q8SlNG
dW5jdGlvbio+KGNhbGxlZVJlY292ZXJ5LmNvbnN0YW50KCkpOwotICAgICAgICByZXR1cm4gMDsK
LSAgICB9Ci0KLSAgICB2b2lkIHZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQot
ICAgIHsKLSAgICAgICAgdmlzaXRvci5hcHBlbmQoJmV4ZWN1dGFibGUpOwotICAgIH0KKyAgICBK
U0Z1bmN0aW9uKiBjYWxsZWVDb25zdGFudCgpIGNvbnN0OworICAgIHZvaWQgdmlzaXRBZ2dyZWdh
dGUoU2xvdFZpc2l0b3ImKTsKICAgICAKICAgICAvLyBHZXQgdGhlIGNhbGxlZSBnaXZlbiBhIG1h
Y2hpbmUgY2FsbCBmcmFtZSB0byB3aGljaCB0aGlzIElubGluZUNhbGxGcmFtZSBiZWxvbmdzLgog
ICAgIEpTRnVuY3Rpb24qIGNhbGxlZUZvckNhbGxGcmFtZShFeGVjU3RhdGUqKSBjb25zdDsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0cnVjdGlvbi5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0cnVjdGlvbi5oCShyZXZp
c2lvbiAxODIwNjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5zdHJ1Y3Rp
b24uaAkod29ya2luZyBjb3B5KQpAQCAtNDYsNyArNDYsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIGNs
YXNzIEFycmF5QWxsb2NhdGlvblByb2ZpbGU7CiBjbGFzcyBBcnJheVByb2ZpbGU7CiBjbGFzcyBP
YmplY3RBbGxvY2F0aW9uUHJvZmlsZTsKLWNsYXNzIFZhcmlhYmxlV2F0Y2hwb2ludFNldDsKK2Ns
YXNzIFdhdGNocG9pbnRTZXQ7CiBzdHJ1Y3QgTExJbnRDYWxsTGlua0luZm87CiBzdHJ1Y3QgVmFs
dWVQcm9maWxlOwogCkBAIC0xMTcsOCArMTE3LDcgQEAgc3RydWN0IEluc3RydWN0aW9uIHsKICAg
ICAgICAgQXJyYXlQcm9maWxlKiBhcnJheVByb2ZpbGU7CiAgICAgICAgIEFycmF5QWxsb2NhdGlv
blByb2ZpbGUqIGFycmF5QWxsb2NhdGlvblByb2ZpbGU7CiAgICAgICAgIE9iamVjdEFsbG9jYXRp
b25Qcm9maWxlKiBvYmplY3RBbGxvY2F0aW9uUHJvZmlsZTsKLSAgICAgICAgVmFyaWFibGVXYXRj
aHBvaW50U2V0KiB3YXRjaHBvaW50U2V0OwotICAgICAgICBXcml0ZUJhcnJpZXJCYXNlPEpTTGV4
aWNhbEVudmlyb25tZW50PiBsZXhpY2FsRW52aXJvbm1lbnQ7CisgICAgICAgIFdhdGNocG9pbnRT
ZXQqIHdhdGNocG9pbnRTZXQ7CiAgICAgICAgIHZvaWQqIHBvaW50ZXI7CiAgICAgICAgIGJvb2wq
IHByZWRpY2F0ZVBvaW50ZXI7CiAgICAgICAgIFRvVGhpc1N0YXR1cyB0b1RoaXNTdGF0dXM7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFyaWFibGVXYXRjaHBvaW50U2V0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFyaWFi
bGVXYXRjaHBvaW50U2V0LmNwcAkocmV2aXNpb24gMTgyMDY5KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1ZhcmlhYmxlV2F0Y2hwb2ludFNldC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxNCwgMjAxNSBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAg
LTM1LDE0ICszNSw5IEBAIHZvaWQgVmFyaWFibGVXcml0ZUZpcmVEZXRhaWw6OmR1bXAoUHJpbnQK
ICAgICBvdXQucHJpbnQoIldyaXRlIHRvICIsIG1fbmFtZSwgIiBpbiAiLCBKU1ZhbHVlKG1fb2Jq
ZWN0KSk7CiB9CiAKLXZvaWQgVmFyaWFibGVXYXRjaHBvaW50U2V0Ojpub3RpZnlXcml0ZShWTSYg
dm0sIEpTVmFsdWUgdmFsdWUsIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBjb25zdCBQcm9wZXJ0eU5h
bWUmIHByb3BlcnR5TmFtZSkKK3ZvaWQgVmFyaWFibGVXYXRjaHBvaW50U2V0Ojpub3RpZnlXcml0
ZShWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEpTVmFsdWUgdmFsdWUsIGNvbnN0IGNoYXIqIHJlYXNv
bikKIHsKLSAgICBub3RpZnlXcml0ZSh2bSwgdmFsdWUsIFZhcmlhYmxlV3JpdGVGaXJlRGV0YWls
KGJhc2VPYmplY3QsIHByb3BlcnR5TmFtZSkpOwotfQotCi12b2lkIFZhcmlhYmxlV2F0Y2hwb2lu
dFNldDo6bm90aWZ5V3JpdGUoVk0mIHZtLCBKU1ZhbHVlIHZhbHVlLCBjb25zdCBjaGFyKiByZWFz
b24pCi17Ci0gICAgbm90aWZ5V3JpdGUodm0sIHZhbHVlLCBTdHJpbmdGaXJlRGV0YWlsKHJlYXNv
bikpOworICAgIG5vdGlmeVdyaXRlKHZtLCBvd25lciwgdmFsdWUsIFN0cmluZ0ZpcmVEZXRhaWwo
cmVhc29uKSk7CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1ZhcmlhYmxlV2F0Y2hwb2ludFNldC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYXJpYWJsZVdhdGNocG9pbnRTZXQuaAkocmV2
aXNpb24gMTgyMDY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhcmlhYmxl
V2F0Y2hwb2ludFNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMi0yMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
IENvcHlyaWdodCAoQykgMjAxMi0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzIsMjkgKzMyLDEyIEBACiBuYW1l
c3BhY2UgSlNDIHsKIAogY2xhc3MgSlNPYmplY3Q7Ci1jbGFzcyBTeW1ib2xUYWJsZTsKLQotY2xh
c3MgVmFyaWFibGVXcml0ZUZpcmVEZXRhaWwgOiBwdWJsaWMgRmlyZURldGFpbCB7Ci1wdWJsaWM6
Ci0gICAgVmFyaWFibGVXcml0ZUZpcmVEZXRhaWwoSlNPYmplY3QqIG9iamVjdCwgY29uc3QgUHJv
cGVydHlOYW1lJiBuYW1lKQotICAgICAgICA6IG1fb2JqZWN0KG9iamVjdCkKLSAgICAgICAgLCBt
X25hbWUobmFtZSkKLSAgICB7Ci0gICAgfQotICAgIAotICAgIHZpcnR1YWwgdm9pZCBkdW1wKFBy
aW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7Ci0KLXByaXZhdGU6Ci0gICAgSlNPYmplY3QqIG1f
b2JqZWN0OwotICAgIGNvbnN0IFByb3BlcnR5TmFtZSYgbV9uYW1lOwotfTsKIAogY2xhc3MgVmFy
aWFibGVXYXRjaHBvaW50U2V0IDogcHVibGljIFdhdGNocG9pbnRTZXQgewogICAgIGZyaWVuZCBj
bGFzcyBMTEludE9mZnNldHNFeHRyYWN0b3I7CiBwdWJsaWM6Ci0gICAgVmFyaWFibGVXYXRjaHBv
aW50U2V0KFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSkKKyAgICBWYXJpYWJsZVdhdGNocG9pbnRT
ZXQoKQogICAgICAgICA6IFdhdGNocG9pbnRTZXQoQ2xlYXJXYXRjaHBvaW50KQotICAgICAgICAs
IG1fc3ltYm9sVGFibGUoc3ltYm9sVGFibGUpCiAgICAgewogICAgIH0KICAgICAKQEAgLTczLDkg
KzU2LDggQEAgcHVibGljOgogICAgIC8vICAgICAgICB5b3Ugd2lsbCBoYXZlIGJlZW4gbm90aWZp
ZWQgdGhhdCB0aGUgd2F0Y2hwb2ludCB3YXMgZmlyZWQuCiAgICAgSlNWYWx1ZSBpbmZlcnJlZFZh
bHVlKCkgY29uc3QgeyByZXR1cm4gbV9pbmZlcnJlZFZhbHVlLmdldCgpOyB9CiAgICAgCi0gICAg
dm9pZCBub3RpZnlXcml0ZShWTSYsIEpTVmFsdWUsIGNvbnN0IEZpcmVEZXRhaWwmKTsKLSAgICBK
U19FWFBPUlRfUFJJVkFURSB2b2lkIG5vdGlmeVdyaXRlKFZNJiwgSlNWYWx1ZSwgSlNPYmplY3Qq
IGJhc2VPYmplY3QsIGNvbnN0IFByb3BlcnR5TmFtZSYpOwotICAgIHZvaWQgbm90aWZ5V3JpdGUo
Vk0mLCBKU1ZhbHVlLCBjb25zdCBjaGFyKiByZWFzb24pOworICAgIHZvaWQgbm90aWZ5V3JpdGUo
Vk0mLCBKU0NlbGwqIG93bmVyLCBKU1ZhbHVlLCBjb25zdCBGaXJlRGV0YWlsJik7CisgICAgdm9p
ZCBub3RpZnlXcml0ZShWTSYsIEpTQ2VsbCogb3duZXIsIEpTVmFsdWUsIGNvbnN0IGNoYXIqIHJl
YXNvbik7CiAgICAgCiAgICAgdm9pZCBpbnZhbGlkYXRlKGNvbnN0IEZpcmVEZXRhaWwmIGRldGFp
bCkKICAgICB7CkBAIC04MywxNSArNjUsMTkgQEAgcHVibGljOgogICAgICAgICBXYXRjaHBvaW50
U2V0OjppbnZhbGlkYXRlKGRldGFpbCk7CiAgICAgfQogICAgIAotICAgIHZvaWQgZmluYWxpemVV
bmNvbmRpdGlvbmFsbHkoY29uc3QgRmlyZURldGFpbCYgZGV0YWlsKQorICAgIGJvb2wgbmVlZFRv
RmluYWxpemUoKQogICAgIHsKICAgICAgICAgQVNTRVJUKCEhbV9pbmZlcnJlZFZhbHVlID09IChz
dGF0ZSgpID09IElzV2F0Y2hlZCkpOwogICAgICAgICBpZiAoIW1faW5mZXJyZWRWYWx1ZSkKKyAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIG1faW5mZXJyZWRWYWx1ZS5n
ZXQoKS5pc0NlbGwoKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBmaW5hbGl6ZVVuY29uZGl0aW9u
YWxseShjb25zdCBGaXJlRGV0YWlsJiBkZXRhaWwpCisgICAgeworICAgICAgICBpZiAoIW5lZWRU
b0ZpbmFsaXplKCkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIEpTVmFsdWUgaW5mZXJy
ZWRWYWx1ZSA9IG1faW5mZXJyZWRWYWx1ZS5nZXQoKTsKLSAgICAgICAgaWYgKCFpbmZlcnJlZFZh
bHVlLmlzQ2VsbCgpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBKU0NlbGwqIGNlbGwg
PSBpbmZlcnJlZFZhbHVlLmFzQ2VsbCgpOworICAgICAgICBKU0NlbGwqIGNlbGwgPSBtX2luZmVy
cmVkVmFsdWUuZ2V0KCkuYXNDZWxsKCk7CiAgICAgICAgIGlmIChIZWFwOjppc01hcmtlZChjZWxs
KSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgaW52YWxpZGF0ZShkZXRhaWwpOwpAQCAt
MTAwLDcgKzg2LDYgQEAgcHVibGljOgogICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogYWRkcmVz
c09mSW5mZXJyZWRWYWx1ZSgpIHsgcmV0dXJuICZtX2luZmVycmVkVmFsdWU7IH0KICAgICAKIHBy
aXZhdGU6Ci0gICAgU3ltYm9sVGFibGUmIG1fc3ltYm9sVGFibGU7CiAgICAgV3JpdGVCYXJyaWVy
PFVua25vd24+IG1faW5mZXJyZWRWYWx1ZTsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9WYXJpYWJsZVdhdGNocG9pbnRTZXRJbmxpbmVzLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhcmlhYmxlV2F0Y2hwb2ludFNldElu
bGluZXMuaAkocmV2aXNpb24gMTgyMDY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1ZhcmlhYmxlV2F0Y2hwb2ludFNldElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1
ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsMTcg
KzI2LDE3IEBACiAjaWZuZGVmIFZhcmlhYmxlV2F0Y2hwb2ludFNldElubGluZXNfaAogI2RlZmlu
ZSBWYXJpYWJsZVdhdGNocG9pbnRTZXRJbmxpbmVzX2gKIAotI2luY2x1ZGUgIlN5bWJvbFRhYmxl
LmgiCiAjaW5jbHVkZSAiVmFyaWFibGVXYXRjaHBvaW50U2V0LmgiCiAKIG5hbWVzcGFjZSBKU0Mg
ewogCi1pbmxpbmUgdm9pZCBWYXJpYWJsZVdhdGNocG9pbnRTZXQ6Om5vdGlmeVdyaXRlKFZNJiB2
bSwgSlNWYWx1ZSB2YWx1ZSwgY29uc3QgRmlyZURldGFpbCYgZGV0YWlsKQoraW5saW5lIHZvaWQg
VmFyaWFibGVXYXRjaHBvaW50U2V0Ojpub3RpZnlXcml0ZSgKKyAgICBWTSYgdm0sIEpTQ2VsbCog
b3duZXIsIEpTVmFsdWUgdmFsdWUsIGNvbnN0IEZpcmVEZXRhaWwmIGRldGFpbCkKIHsKICAgICBB
U1NFUlQoISF2YWx1ZSk7CiAgICAgc3dpdGNoIChzdGF0ZSgpKSB7CiAgICAgY2FzZSBDbGVhcldh
dGNocG9pbnQ6Ci0gICAgICAgIG1faW5mZXJyZWRWYWx1ZS5zZXQodm0sICZtX3N5bWJvbFRhYmxl
LCB2YWx1ZSk7CisgICAgICAgIG1faW5mZXJyZWRWYWx1ZS5zZXQodm0sIG93bmVyLCB2YWx1ZSk7
CiAgICAgICAgIHN0YXJ0V2F0Y2hpbmcoKTsKICAgICAgICAgcmV0dXJuOwogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFyaWFibGVXcml0ZUZpcmVEZXRhaWwuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYXJpYWJsZVdyaXRl
RmlyZURldGFpbC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvVmFyaWFibGVXcml0ZUZpcmVEZXRhaWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlZhcmlhYmxlV3JpdGVGaXJlRGV0YWlsLmgi
CisKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeworCit2b2lkIFZh
cmlhYmxlV3JpdGVGaXJlRGV0YWlsOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7Cisg
ICAgb3V0LnByaW50KCJXcml0ZSB0byAiLCBtX25hbWUsICIgaW4gIiwgSlNWYWx1ZShtX29iamVj
dCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1ZhcmlhYmxlV3JpdGVGaXJlRGV0YWlsLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhcmlhYmxlV3JpdGVGaXJlRGV0YWlsLmgJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFyaWFibGVXcml0
ZUZpcmVEZXRhaWwuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUzIEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgVmFyaWFibGVXcml0
ZUZpcmVEZXRhaWxfaAorI2RlZmluZSBWYXJpYWJsZVdyaXRlRmlyZURldGFpbF9oCisKKyNpbmNs
dWRlICJXYXRjaHBvaW50LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBKU09iamVjdDsK
K2NsYXNzIFByb3BlcnR5TmFtZTsKKworY2xhc3MgVmFyaWFibGVXcml0ZUZpcmVEZXRhaWwgOiBw
dWJsaWMgRmlyZURldGFpbCB7CitwdWJsaWM6CisgICAgVmFyaWFibGVXcml0ZUZpcmVEZXRhaWwo
SlNPYmplY3QqIG9iamVjdCwgY29uc3QgUHJvcGVydHlOYW1lJiBuYW1lKQorICAgICAgICA6IG1f
b2JqZWN0KG9iamVjdCkKKyAgICAgICAgLCBtX25hbWUobmFtZSkKKyAgICB7CisgICAgfQorICAg
IAorICAgIHZpcnR1YWwgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisK
K3ByaXZhdGU6CisgICAgSlNPYmplY3QqIG1fb2JqZWN0OworICAgIGNvbnN0IFByb3BlcnR5TmFt
ZSYgbV9uYW1lOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBWYXJpYWJs
ZVdyaXRlRmlyZURldGFpbF9oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
V2F0Y2hwb2ludC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9XYXRjaHBvaW50LmgJKHJldmlzaW9uIDE4MjA2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9XYXRjaHBvaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEyNSwyMCArMTI1LDI0
IEBAIHB1YmxpYzoKICAgICAvLyBzZXQgd2F0Y2hwb2ludHMgdGhhdCB3ZSBiZWxpZXZlIHdpbGwg
YWN0dWFsbHkgYmUgZmlyZWQuCiAgICAgdm9pZCBzdGFydFdhdGNoaW5nKCkKICAgICB7Ci0gICAg
ICAgIEFTU0VSVChzdGF0ZSgpICE9IElzSW52YWxpZGF0ZWQpOworICAgICAgICBBU1NFUlQobV9z
dGF0ZSAhPSBJc0ludmFsaWRhdGVkKTsKKyAgICAgICAgaWYgKG1fc3RhdGUgPT0gSXNXYXRjaGVk
KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOwog
ICAgICAgICBtX3N0YXRlID0gSXNXYXRjaGVkOworICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5j
ZSgpOwogICAgIH0KICAgICAKICAgICB2b2lkIGZpcmVBbGwoY29uc3QgRmlyZURldGFpbCYgZGV0
YWlsKQogICAgIHsKLSAgICAgICAgaWYgKExJS0VMWShzdGF0ZSgpICE9IElzV2F0Y2hlZCkpCisg
ICAgICAgIGlmIChMSUtFTFkobV9zdGF0ZSAhPSBJc1dhdGNoZWQpKQogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICBmaXJlQWxsU2xvdyhkZXRhaWwpOwogICAgIH0KICAgICAKICAgICB2b2lk
IGZpcmVBbGwoY29uc3QgY2hhciogcmVhc29uKQogICAgIHsKLSAgICAgICAgaWYgKExJS0VMWShz
dGF0ZSgpICE9IElzV2F0Y2hlZCkpCisgICAgICAgIGlmIChMSUtFTFkobV9zdGF0ZSAhPSBJc1dh
dGNoZWQpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBmaXJlQWxsU2xvdyhyZWFzb24p
OwogICAgIH0KQEAgLTE1MSwxMyArMTU1LDIzIEBAIHB1YmxpYzoKICAgICAgICAgICAgIGZpcmVB
bGwoZGV0YWlsKTsKICAgICB9CiAgICAgCisgICAgdm9pZCB0b3VjaChjb25zdCBjaGFyKiByZWFz
b24pCisgICAgeworICAgICAgICB0b3VjaChTdHJpbmdGaXJlRGV0YWlsKHJlYXNvbikpOworICAg
IH0KKyAgICAKICAgICB2b2lkIGludmFsaWRhdGUoY29uc3QgRmlyZURldGFpbCYgZGV0YWlsKQog
ICAgIHsKICAgICAgICAgaWYgKHN0YXRlKCkgPT0gSXNXYXRjaGVkKQogICAgICAgICAgICAgZmly
ZUFsbChkZXRhaWwpOwogICAgICAgICBtX3N0YXRlID0gSXNJbnZhbGlkYXRlZDsKICAgICB9Ci0K
KyAgICAKKyAgICB2b2lkIGludmFsaWRhdGUoY29uc3QgY2hhciogcmVhc29uKQorICAgIHsKKyAg
ICAgICAgaW52YWxpZGF0ZShTdHJpbmdGaXJlRGV0YWlsKHJlYXNvbikpOworICAgIH0KKyAgICAK
ICAgICBpbnQ4X3QqIGFkZHJlc3NPZlN0YXRlKCkgeyByZXR1cm4gJm1fc3RhdGU7IH0KICAgICBp
bnQ4X3QqIGFkZHJlc3NPZlNldElzTm90RW1wdHkoKSB7IHJldHVybiAmbV9zZXRJc05vdEVtcHR5
OyB9CiAgICAgCkBAIC0yNjEsNyArMjc1LDExIEBAIHB1YmxpYzoKICAgICAgICAgICAgIGZhdCgp
LT50b3VjaChkZXRhaWwpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAg
IGlmIChkZWNvZGVTdGF0ZShtX2RhdGEpID09IENsZWFyV2F0Y2hwb2ludCkKKyAgICAgICAgdWlu
dHB0cl90IGRhdGEgPSBtX2RhdGE7CisgICAgICAgIGlmIChkZWNvZGVTdGF0ZShkYXRhKSA9PSBJ
c0ludmFsaWRhdGVkKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBXVEY6OnN0b3JlU3Rv
cmVGZW5jZSgpOworICAgICAgICBpZiAoZGVjb2RlU3RhdGUoZGF0YSkgPT0gQ2xlYXJXYXRjaHBv
aW50KQogICAgICAgICAgICAgbV9kYXRhID0gZW5jb2RlU3RhdGUoSXNXYXRjaGVkKTsKICAgICAg
ICAgZWxzZQogICAgICAgICAgICAgbV9kYXRhID0gZW5jb2RlU3RhdGUoSXNJbnZhbGlkYXRlZCk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJh
dG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVy
L0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMTgyMDY5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ2Niw5ICs0NjYsNiBAQCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0
b3IoVk0mCiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgaWYgKG1fc3ltYm9sVGFibGUtPnNj
b3BlU2l6ZSgpKQotICAgICAgICBlbWl0T3Bjb2RlKG9wX3RvdWNoX2VudHJ5KTsKLQogICAgIGlm
IChpc0NvbnN0cnVjdG9yKCkpIHsKICAgICAgICAgaWYgKGNvbnN0cnVjdG9yS2luZCgpID09IENv
bnN0cnVjdG9yS2luZDo6RGVyaXZlZCkgewogICAgICAgICAgICAgbV9uZXdUYXJnZXRSZWdpc3Rl
ciA9IGFkZFZhcigpOwpAQCAtMTMyNCw4ICsxMzIxLDYgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVH
ZW5lcmF0b3I6OmVtaXRSZXNvbAogICAgICAgICAKICAgICAgICAgQVNTRVJUKCFtX3N5bWJvbFRh
YmxlIHx8ICFtX3N5bWJvbFRhYmxlLT5jb250YWlucyh2YXJpYWJsZS5pZGVudCgpLmltcGwoKSkg
fHwgcmVzb2x2ZVR5cGUoKSA9PSBEeW5hbWljKTsKICAgICAgICAgCi0gICAgICAgIG1fY29kZUJs
b2NrLT5hZGRQcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uKGluc3RydWN0aW9ucygpLnNpemUoKSk7
Ci0gICAgICAgIAogICAgICAgICAvLyByZXNvbHZlX3Njb3BlIGRzdCwgaWQsIFJlc29sdmVUeXBl
LCBkZXB0aAogICAgICAgICBlbWl0T3Bjb2RlKG9wX3Jlc29sdmVfc2NvcGUpOwogICAgICAgICBk
c3QgPSB0ZW1wRGVzdGluYXRpb24oZHN0KTsKQEAgLTEzMzQsNyArMTMyOSw2IEBAIFJlZ2lzdGVy
SUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0UmVzb2wKICAgICAgICAgaW5zdHJ1Y3Rpb25zKCku
YXBwZW5kKGFkZENvbnN0YW50KHZhcmlhYmxlLmlkZW50KCkpKTsKICAgICAgICAgaW5zdHJ1Y3Rp
b25zKCkuYXBwZW5kKHJlc29sdmVUeXBlKCkpOwogICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBl
bmQoMCk7Ci0gICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCgwKTsKICAgICAgICAgcmV0dXJu
IGRzdDsKICAgICB9CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fi
c3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCShyZXZpc2lvbiAxODIw
NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJ
bmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzNDEsNiArMTM0MSw3IEBAIGJvb2wgQWJzdHJh
Y3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICB9CiAKICAgICBjYXNlIENyZWF0ZVRo
aXM6IHsKKyAgICAgICAgLy8gRklYTUU6IFdlIGNhbiBmb2xkIHRoaXMgdG8gTmV3T2JqZWN0IGlm
IHRoZSBpbmNvbWluZyBjYWxsZWUgaXMgYSBjb25zdGFudC4KICAgICAgICAgZm9yTm9kZShub2Rl
KS5zZXRUeXBlKFNwZWNGaW5hbE9iamVjdCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTE0
MDMsNiArMTQwNCwxNSBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5
CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBjYXNlIEdldENhbGxlZToKKyAgICAgICAg
aWYgKEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IGpzRHluYW1pY0Nhc3Q8RnVuY3Rp
b25FeGVjdXRhYmxlKj4obV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpKSkgeworICAgICAg
ICAgICAgVmFyaWFibGVXYXRjaHBvaW50U2V0JiBzZXQgPSBleGVjdXRhYmxlLT5mdW5jdGlvblJl
YWxsb2NhdGlvbldhdGNocG9pbnRTZXQoKTsKKyAgICAgICAgICAgIGlmIChKU1ZhbHVlIHZhbHVl
ID0gc2V0LmluZmVycmVkVmFsdWUoKSkgeworICAgICAgICAgICAgICAgIG1fZ3JhcGgud2F0Y2hw
b2ludHMoKS5hZGRMYXppbHkoJnNldCk7CisgICAgICAgICAgICAgICAgSlNGdW5jdGlvbiogZnVu
Y3Rpb24gPSBqc0Nhc3Q8SlNGdW5jdGlvbio+KHZhbHVlKTsKKyAgICAgICAgICAgICAgICBzZXRD
b25zdGFudChub2RlLCAqbV9ncmFwaC5mcmVlemUoZnVuY3Rpb24pKTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgICAgICBmb3JOb2RlKG5vZGUp
LnNldFR5cGUoU3BlY0Z1bmN0aW9uKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJl
dmlzaW9uIDE4MjA2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQ
YXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzgsOCArMjc4LDIwIEBAIHByaXZhdGU6CiAg
ICAgICAgICAgICAgICAgaWYgKG9wZXJhbmQub2Zmc2V0KCkgPT0gSlNTdGFjazo6Q2FsbGVlKQog
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gd2Vha0pTQ29uc3RhbnQoY2FsbGVlKTsKICAgICAg
ICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChvcGVyYW5kLm9mZnNldCgpID09IEpTU3RhY2s6
OkNhbGxlZSkKKyAgICAgICAgfSBlbHNlIGlmIChvcGVyYW5kLm9mZnNldCgpID09IEpTU3RhY2s6
OkNhbGxlZSkgeworICAgICAgICAgICAgLy8gV2UgaGF2ZSB0byBkbyBzb21lIGNvbnN0YW50LWZv
bGRpbmcgaGVyZSBiZWNhdXNlIHRoaXMgZW5hYmxlcyBDcmVhdGVUaGlzIGZvbGRpbmcuIE5vdGUK
KyAgICAgICAgICAgIC8vIHRoYXQgd2UgZG9uJ3QgaGF2ZSBzdWNoIHdhdGNocG9pbnQtYmFzZWQg
Zm9sZGluZyBmb3IgaW5saW5lZCB1c2VzIG9mIENhbGxlZSwgc2luY2UgaW4gdGhhdAorICAgICAg
ICAgICAgLy8gY2FzZSBpZiB0aGUgZnVuY3Rpb24gaXMgYSBzaW5nbGV0b24gdGhlbiB3ZSBhbHJl
YWR5IGtub3cgaXQuCisgICAgICAgICAgICBpZiAoRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRh
YmxlID0ganNEeW5hbWljQ2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihtX2NvZGVCbG9jay0+b3du
ZXJFeGVjdXRhYmxlKCkpKSB7CisgICAgICAgICAgICAgICAgVmFyaWFibGVXYXRjaHBvaW50U2V0
JiBzZXQgPSBleGVjdXRhYmxlLT5mdW5jdGlvblJlYWxsb2NhdGlvbldhdGNocG9pbnRTZXQoKTsK
KyAgICAgICAgICAgICAgICBpZiAoSlNWYWx1ZSB2YWx1ZSA9IHNldC5pbmZlcnJlZFZhbHVlKCkp
IHsKKyAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC53YXRjaHBvaW50cygpLmFkZExhemlseSgm
c2V0KTsKKyAgICAgICAgICAgICAgICAgICAgSlNGdW5jdGlvbiogZnVuY3Rpb24gPSBqc0Nhc3Q8
SlNGdW5jdGlvbio+KHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdlYWtKU0Nv
bnN0YW50KGZ1bmN0aW9uKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CiAgICAg
ICAgICAgICByZXR1cm4gYWRkVG9HcmFwaChHZXRDYWxsZWUpOworICAgICAgICB9CiAgICAgICAg
IAogICAgICAgICByZXR1cm4gZ2V0RGlyZWN0KG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFu
ZChvcGVyYW5kKSk7CiAgICAgfQpAQCAtMjUxOSw2ICsyNTMxLDEyIEBAIHZvaWQgQnl0ZUNvZGVQ
YXJzZXI6OmNsZWFyQ2FjaGVzKCkKIE5vZGUqIEJ5dGVDb2RlUGFyc2VyOjpnZXRTY29wZShWaXJ0
dWFsUmVnaXN0ZXIgc2NvcGVDaGFpbiwgdW5zaWduZWQgc2tpcENvdW50KQogewogICAgIE5vZGUq
IGxvY2FsQmFzZSA9IGdldChzY29wZUNoYWluKTsKKyAgICBhZGRUb0dyYXBoKFBoYW50b20sIGxv
Y2FsQmFzZSk7IC8vIE9TUiBleGl0IGNhbm5vdCBoYW5kbGUgcmVzb2x2ZV9zY29wZSBvbiBhIERD
RSdkIHNjb3BlLgorICAgIGlmIChKU1Njb3BlKiBzY29wZSA9IGxvY2FsQmFzZS0+ZHluYW1pY0Nh
c3RDb25zdGFudDxKU1Njb3BlKj4oKSkgeworICAgICAgICBmb3IgKHVuc2lnbmVkIG4gPSBza2lw
Q291bnQ7IG4tLTspCisgICAgICAgICAgICBzY29wZSA9IHNjb3BlLT5uZXh0KCk7CisgICAgICAg
IHJldHVybiB3ZWFrSlNDb25zdGFudChzY29wZSk7CisgICAgfQogICAgIGZvciAodW5zaWduZWQg
biA9IHNraXBDb3VudDsgbi0tOykKICAgICAgICAgbG9jYWxCYXNlID0gYWRkVG9HcmFwaChTa2lw
U2NvcGUsIGxvY2FsQmFzZSk7CiAgICAgcmV0dXJuIGxvY2FsQmFzZTsKQEAgLTI1OTMsMTEgKzI2
MTEsNiBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAg
ICAgICBORVhUX09QQ09ERShvcF9lbnRlcik7CiAgICAgICAgIH0KICAgICAgICAgICAgIAotICAg
ICAgICBjYXNlIG9wX3RvdWNoX2VudHJ5OgotICAgICAgICAgICAgaWYgKG1faW5saW5lU3RhY2tU
b3AtPm1fY29kZUJsb2NrLT5zeW1ib2xUYWJsZSgpLT5tX2Z1bmN0aW9uRW50ZXJlZE9uY2UuaXNT
dGlsbFZhbGlkKCkpCi0gICAgICAgICAgICAgICAgYWRkVG9HcmFwaChGb3JjZU9TUkV4aXQpOwot
ICAgICAgICAgICAgTkVYVF9PUENPREUob3BfdG91Y2hfZW50cnkpOwotICAgICAgICAgICAgCiAg
ICAgICAgIGNhc2Ugb3BfdG9fdGhpczogewogICAgICAgICAgICAgTm9kZSogb3AxID0gZ2V0VGhp
cygpOwogICAgICAgICAgICAgaWYgKG9wMS0+b3AoKSAhPSBUb1RoaXMpIHsKQEAgLTMzNzUsMTcg
KzMzODgsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAg
ICAgICAgICBjYXNlIExvY2FsQ2xvc3VyZVZhcjoKICAgICAgICAgICAgIGNhc2UgQ2xvc3VyZVZh
cjoKICAgICAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsK
LSAgICAgICAgICAgICAgICBKU0xleGljYWxFbnZpcm9ubWVudCogbGV4aWNhbEVudmlyb25tZW50
ID0gY3VycmVudEluc3RydWN0aW9uWzZdLnUubGV4aWNhbEVudmlyb25tZW50LmdldCgpOwotICAg
ICAgICAgICAgICAgIGlmIChsZXhpY2FsRW52aXJvbm1lbnQKLSAgICAgICAgICAgICAgICAgICAg
JiYgbGV4aWNhbEVudmlyb25tZW50LT5zeW1ib2xUYWJsZSgpLT5tX2Z1bmN0aW9uRW50ZXJlZE9u
Y2UuaXNTdGlsbFZhbGlkKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC53YXRjaHBv
aW50cygpLmFkZExhemlseShsZXhpY2FsRW52aXJvbm1lbnQtPnN5bWJvbFRhYmxlKCktPm1fZnVu
Y3Rpb25FbnRlcmVkT25jZSk7Ci0gICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoUGhhbnRv
bSwgZ2V0RGlyZWN0KG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZChWaXJ0dWFsUmVnaXN0
ZXIoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCkpKSk7Ci0gICAgICAgICAgICAgICAg
ICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoZHN0KSwgd2Vha0pTQ29uc3RhbnQobGV4aWNhbEVudmly
b25tZW50KSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGRzdCksIGdldFNjb3BlKFZpcnR1
YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSwgZGVwdGgpKTsKLSAg
ICAgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lKCkpCi0gICAgICAgICAgICAgICAgICAg
IGFkZFRvR3JhcGgoUGhhbnRvbSwgZ2V0RGlyZWN0KG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3Bl
cmFuZChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCkpKSk7
CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBjYXNl
IER5bmFtaWM6CkBAIC0zNDM3LDE5ICszNDQwLDU4IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBh
cnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgIGNhc2UgR2xvYmFsVmFyOgogICAgICAgICAg
ICAgY2FzZSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgICAgICAg
ICAgYWRkVG9HcmFwaChQaGFudG9tLCBnZXQoVmlydHVhbFJlZ2lzdGVyKHNjb3BlKSkpOwotICAg
ICAgICAgICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKGdsb2JhbE9iamVjdC0+c3lt
Ym9sVGFibGUoKS0+bV9sb2NrKTsKLSAgICAgICAgICAgICAgICBTeW1ib2xUYWJsZUVudHJ5IGVu
dHJ5ID0gZ2xvYmFsT2JqZWN0LT5zeW1ib2xUYWJsZSgpLT5nZXQobG9ja2VyLCB1aWQpOwotICAg
ICAgICAgICAgICAgIFZhcmlhYmxlV2F0Y2hwb2ludFNldCogd2F0Y2hwb2ludFNldCA9IGVudHJ5
LndhdGNocG9pbnRTZXQoKTsKLSAgICAgICAgICAgICAgICBKU1ZhbHVlIGluZmVycmVkVmFsdWUg
PQotICAgICAgICAgICAgICAgICAgICB3YXRjaHBvaW50U2V0ID8gd2F0Y2hwb2ludFNldC0+aW5m
ZXJyZWRWYWx1ZSgpIDogSlNWYWx1ZSgpOwotICAgICAgICAgICAgICAgIGlmICghaW5mZXJyZWRW
YWx1ZSkgewotICAgICAgICAgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0g
Z2V0UHJlZGljdGlvbigpOwotICAgICAgICAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVy
KGRzdCksIGFkZFRvR3JhcGgoR2V0R2xvYmFsVmFyLCBPcEluZm8ob3BlcmFuZCksIE9wSW5mbyhw
cmVkaWN0aW9uKSkpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAg
ICBXYXRjaHBvaW50U2V0KiB3YXRjaHBvaW50U2V0OworICAgICAgICAgICAgICAgIFNjb3BlT2Zm
c2V0IG9mZnNldDsKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIENvbmN1
cnJlbnRKSVRMb2NrZXIgbG9ja2VyKGdsb2JhbE9iamVjdC0+c3ltYm9sVGFibGUoKS0+bV9sb2Nr
KTsKKyAgICAgICAgICAgICAgICAgICAgU3ltYm9sVGFibGVFbnRyeSBlbnRyeSA9IGdsb2JhbE9i
amVjdC0+c3ltYm9sVGFibGUoKS0+Z2V0KGxvY2tlciwgdWlkKTsKKyAgICAgICAgICAgICAgICAg
ICAgd2F0Y2hwb2ludFNldCA9IGVudHJ5LndhdGNocG9pbnRTZXQoKTsKKyAgICAgICAgICAgICAg
ICAgICAgb2Zmc2V0ID0gZW50cnkuc2NvcGVPZmZzZXQoKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICAgICAgaWYgKHdhdGNocG9pbnRTZXQgJiYgd2F0Y2hwb2ludFNldC0+c3RhdGUo
KSA9PSBJc1dhdGNoZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBoYXMgYSBmdW4g
Y29uY3VycmVuY3kgc3RvcnkuIFRoZXJlIGlzIHRoZSBwb3NzaWJpbGl0eSBvZiBhIHJhY2UgaW4g
dHdvCisgICAgICAgICAgICAgICAgICAgIC8vIGRpcmVjdGlvbnM6CisgICAgICAgICAgICAgICAg
ICAgIC8vCisgICAgICAgICAgICAgICAgICAgIC8vIFdlIHNlZSB0aGF0IHRoZSBzZXQgSXNXYXRj
aGVkLCBidXQgaW4gdGhlIG1lYW50aW1lIGl0IGdldHMgaW52YWxpZGF0ZWQ6IHRoaXMgaXMKKyAg
ICAgICAgICAgICAgICAgICAgLy8gZmluZSBiZWNhdXNlIGlmIHdlIHNhdyB0aGF0IGl0IElzV2F0
Y2hlZCB0aGVuIHdlIGFkZCBhIHdhdGNocG9pbnQuIElmIGl0IGdldHMKKyAgICAgICAgICAgICAg
ICAgICAgLy8gaW52YWxpZGF0ZWQsIHRoZW4gdGhpcyBjb21waWxhdGlvbiBpcyBpbnZhbGlkYXRl
ZC4gTm90ZSB0aGF0IGluIHRoZSBtZWFudGltZSB3ZQorICAgICAgICAgICAgICAgICAgICAvLyBt
YXkgbG9hZCBhbiBhYnN1cmQgdmFsdWUgZnJvbSB0aGUgZ2xvYmFsIG9iamVjdC4gSXQncyBmaW5l
IHRvIGxvYWQgYW4gYWJzdXJkCisgICAgICAgICAgICAgICAgICAgIC8vIHZhbHVlIGlmIHRoZSBj
b21waWxhdGlvbiBpcyBpbnZhbGlkYXRlZCBhbnl3YXkuCisgICAgICAgICAgICAgICAgICAgIC8v
CisgICAgICAgICAgICAgICAgICAgIC8vIFdlIHNlZSB0aGF0IHRoZSBzZXQgSXNXYXRjaGVkLCBi
dXQgdGhlIHZhbHVlIGlzbid0IHlldCBpbml0aWFsaXplZDogdGhpcyBpc24ndAorICAgICAgICAg
ICAgICAgICAgICAvLyBwb3NzaWJsZSBiZWNhdXNlIG9mIHRoZSBvcmRlcmluZyBvZiBvcGVyYXRp
b25zLgorICAgICAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgICAgICAvLyBIZXJl
J3MgaG93IHdlIG9yZGVyIG9wZXJhdGlvbnM6CisgICAgICAgICAgICAgICAgICAgIC8vCisgICAg
ICAgICAgICAgICAgICAgIC8vIE1haW4gdGhyZWFkIHN0b3JlcyB0byB0aGUgZ2xvYmFsIG9iamVj
dDogYWx3YXlzIGZpcnN0IHN0b3JlIGEgdmFsdWUgZmlyc3QsIGFuZAorICAgICAgICAgICAgICAg
ICAgICAvLyBvbmx5IGFmdGVyIHRoYXQgd2UgdG91Y2ggdGhlIHdhdGNocG9pbnQgc2V0LiBUaGVy
ZSBpcyBhIGZlbmNlIGluIHRoZSB0b3VjaCwgdGhhdAorICAgICAgICAgICAgICAgICAgICAvLyBl
bnN1cmVzIHRoYXQgdGhlIHN0b3JlIHRvIHRoZSBnbG9iYWwgb2JqZWN0IGFsd2F5cyBoYXBwZW5z
IGJlZm9yZSB0aGUgdG91Y2ggb24gdGhlCisgICAgICAgICAgICAgICAgICAgIC8vIHNldC4KKyAg
ICAgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAgICAgLy8gQ29tcGlsYXRpb24g
dGhyZWFkOiBhbHdheXMgZmlyc3QgbG9hZCB0aGUgc3RhdGUgb2YgdGhlIHdhdGNocG9pbnQgc2V0
LCBhbmQgdGhlbgorICAgICAgICAgICAgICAgICAgICAvLyBsb2FkIHRoZSB2YWx1ZS4gVGhlIFdh
dGNocG9pbnRTZXQ6OnN0YXRlKCkgbWV0aG9kIGRvZXMgZmVuY2VzIGZvciB1cyB0byBlbnN1cmUK
KyAgICAgICAgICAgICAgICAgICAgLy8gdGhhdCB0aGUgbG9hZCBvZiB0aGUgc3RhdGUgaGFwcGVu
cyBiZWZvcmUgb3VyIGxvYWQgb2YgdGhlIHZhbHVlLgorICAgICAgICAgICAgICAgICAgICAvLwor
ICAgICAgICAgICAgICAgICAgICAvLyBGaW5hbGl6aW5nIGNvbXBpbGF0aW9uOiB0aGlzIGhhcHBl
bnMgb24gdGhlIG1haW4gdGhyZWFkIGFuZCBzeW5jaHJvbm91c2x5IGNoZWNrcworICAgICAgICAg
ICAgICAgICAgICAvLyB2YWxpZGl0eSBvZiBhbGwgd2F0Y2hwb2ludCBzZXRzLgorICAgICAgICAg
ICAgICAgICAgICAvLworICAgICAgICAgICAgICAgICAgICAvLyBXZSB3aWxsIG9ubHkgcGVyZm9y
bSBvcHRpbWl6YXRpb25zIGlmIHRoZSBsb2FkIG9mIHRoZSBzdGF0ZSB5aWVsZHMgSXNXYXRjaGVk
LiBUaGF0CisgICAgICAgICAgICAgICAgICAgIC8vIG1lYW5zIHRoYXQgYXQgbGVhc3Qgb25lIHN0
b3JlIHdvdWxkIGhhdmUgaGFwcGVuZWQgdG8gaW5pdGlhbGl6ZSB0aGUgb3JpZ2luYWwgdmFsdWUK
KyAgICAgICAgICAgICAgICAgICAgLy8gb2YgdGhlIHZhcmlhYmxlICh0aGF0IGlzLCB0aGUgdmFs
dWUgd2UnZCBsaWtlIHRvIGNvbnN0YW50IGZvbGQgdG8pLiBUaGVyZSBtYXkgYmUKKyAgICAgICAg
ICAgICAgICAgICAgLy8gb3RoZXIgc3RvcmVzIHRoYXQgaGFwcGVuIGFmdGVyIHRoYXQsIGJ1dCB0
aG9zZSBzdG9yZXMgd2lsbCBpbnZhbGlkYXRlIHRoZQorICAgICAgICAgICAgICAgICAgICAvLyB3
YXRjaHBvaW50IHNldCBhbmQgYWxzbyB0aGUgY29tcGlsYXRpb24uCisgICAgICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgICAgICBBU1NFUlQoYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4o
Jmdsb2JhbE9iamVjdC0+dmFyaWFibGVBdChvZmZzZXQpKSA9PSBvcGVyYW5kKTsKKyAgICAgICAg
ICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGdsb2JhbE9iamVjdC0+dmFyaWFibGVBdChvZmZz
ZXQpLmdldCgpOworICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUpIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIG1fZ3JhcGgud2F0Y2hwb2ludHMoKS5hZGRMYXppbHkod2F0Y2hwb2ludFNl
dCk7CisgICAgICAgICAgICAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGRzdCksIHdl
YWtKU0NvbnN0YW50KHZhbHVlKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAK
LSAgICAgICAgICAgICAgICBtX2dyYXBoLndhdGNocG9pbnRzKCkuYWRkTGF6aWx5KHdhdGNocG9p
bnRTZXQpOwotICAgICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoZHN0KSwgd2Vha0pT
Q29uc3RhbnQoaW5mZXJyZWRWYWx1ZSkpOworICAgICAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBl
IHByZWRpY3Rpb24gPSBnZXRQcmVkaWN0aW9uKCk7CisgICAgICAgICAgICAgICAgc2V0KFZpcnR1
YWxSZWdpc3Rlcihkc3QpLCBhZGRUb0dyYXBoKEdldEdsb2JhbFZhciwgT3BJbmZvKG9wZXJhbmQp
LCBPcEluZm8ocHJlZGljdGlvbikpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIGNhc2UgTG9jYWxDbG9zdXJlVmFyOgpAQCAtMzQ5Niw3ICszNTM4
LDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAg
ICAgICAgIHVpZCA9IG51bGxwdHI7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIFN0cnVjdHVy
ZSogc3RydWN0dXJlID0gbnVsbHB0cjsKLSAgICAgICAgICAgIFZhcmlhYmxlV2F0Y2hwb2ludFNl
dCogd2F0Y2hwb2ludHMgPSBudWxscHRyOworICAgICAgICAgICAgV2F0Y2hwb2ludFNldCogd2F0
Y2hwb2ludHMgPSBudWxscHRyOwogICAgICAgICAgICAgdWludHB0cl90IG9wZXJhbmQ7CiAgICAg
ICAgICAgICB7CiAgICAgICAgICAgICAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9p
bmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5tX2xvY2spOwpAQCAtMzUzOSw4ICszNTgx
LDEwIEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgTm9kZSogdmFsdWVOb2RlID0gZ2V0KFZpcnR1YWxS
ZWdpc3Rlcih2YWx1ZSkpOwogICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoUHV0R2xvYmFsVmFy
LCBPcEluZm8ob3BlcmFuZCksIHZhbHVlTm9kZSk7Ci0gICAgICAgICAgICAgICAgaWYgKHdhdGNo
cG9pbnRzICYmIHdhdGNocG9pbnRzLT5zdGF0ZSgpICE9IElzSW52YWxpZGF0ZWQpCi0gICAgICAg
ICAgICAgICAgICAgIGFkZFRvR3JhcGgoTm90aWZ5V3JpdGUsIE9wSW5mbyh3YXRjaHBvaW50cyks
IHZhbHVlTm9kZSk7CisgICAgICAgICAgICAgICAgaWYgKHdhdGNocG9pbnRzICYmIHdhdGNocG9p
bnRzLT5zdGF0ZSgpICE9IElzSW52YWxpZGF0ZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8g
TXVzdCBoYXBwZW4gYWZ0ZXIgdGhlIHN0b3JlLiBTZWUgY29tbWVudCBmb3IgR2V0R2xvYmFsVmFy
LgorICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKE5vdGlmeVdyaXRlLCBPcEluZm8od2F0
Y2hwb2ludHMpKTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgLy8gS2VlcCBz
Y29wZSBhbGl2ZSB1bnRpbCBhZnRlciBwdXQuCiAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChQ
aGFudG9tLCBnZXQoVmlydHVhbFJlZ2lzdGVyKHNjb3BlKSkpOwogICAgICAgICAgICAgICAgIGJy
ZWFrOwpAQCAtMzU1MSwxMCArMzU5NSwxMiBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJs
b2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAgICAgTm9kZSogc2NvcGVOb2RlID0gZ2V0KFZpcnR1
YWxSZWdpc3RlcihzY29wZSkpOwogICAgICAgICAgICAgICAgIE5vZGUqIHZhbHVlTm9kZSA9IGdl
dChWaXJ0dWFsUmVnaXN0ZXIodmFsdWUpKTsKIAotICAgICAgICAgICAgICAgIGlmICh3YXRjaHBv
aW50cyAmJiB3YXRjaHBvaW50cy0+c3RhdGUoKSAhPSBJc0ludmFsaWRhdGVkKQotICAgICAgICAg
ICAgICAgICAgICBhZGRUb0dyYXBoKE5vdGlmeVdyaXRlLCBPcEluZm8od2F0Y2hwb2ludHMpLCB2
YWx1ZU5vZGUpOwotCiAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChQdXRDbG9zdXJlVmFyLCBP
cEluZm8ob3BlcmFuZCksIHNjb3BlTm9kZSwgdmFsdWVOb2RlKTsKKworICAgICAgICAgICAgICAg
IGlmICh3YXRjaHBvaW50cyAmJiB3YXRjaHBvaW50cy0+c3RhdGUoKSAhPSBJc0ludmFsaWRhdGVk
KSB7CisgICAgICAgICAgICAgICAgICAgIC8vIE11c3QgaGFwcGVuIGFmdGVyIHRoZSBzdG9yZS4g
U2VlIGNvbW1lbnQgZm9yIEdldEdsb2JhbFZhci4KKyAgICAgICAgICAgICAgICAgICAgYWRkVG9H
cmFwaChOb3RpZnlXcml0ZSwgT3BJbmZvKHdhdGNocG9pbnRzKSk7CisgICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgY2Fz
ZSBEeW5hbWljOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRp
ZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJp
bGl0aWVzLmNwcAkocmV2aXNpb24gMTgyMDY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDYXBhYmlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Niw3ICs5Niw2IEBAIENh
cGFiaWxpdHlMZXZlbCBjYXBhYmlsaXR5TGV2ZWwoT3Bjb2RlSUQKICAgICAKICAgICBzd2l0Y2gg
KG9wY29kZUlEKSB7CiAgICAgY2FzZSBvcF9lbnRlcjoKLSAgICBjYXNlIG9wX3RvdWNoX2VudHJ5
OgogICAgIGNhc2Ugb3BfdG9fdGhpczoKICAgICBjYXNlIG9wX2NoZWNrX3RkejoKICAgICBjYXNl
IG9wX2NyZWF0ZV90aGlzOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9i
YmVyaXplLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9i
YmVyaXplLmgJKHJldmlzaW9uIDE4MjA2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQ2xvYmJlcml6ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC04NjAsMTEgKzg2MCwxNyBAQCB2b2lk
IGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgY2FzZSBOZXdTdHJpbmdP
YmplY3Q6CiAgICAgY2FzZSBQaGFudG9tTmV3T2JqZWN0OgogICAgIGNhc2UgTWF0ZXJpYWxpemVO
ZXdPYmplY3Q6Ci0gICAgY2FzZSBOZXdGdW5jdGlvbjoKICAgICAgICAgcmVhZChIZWFwT2JqZWN0
Q291bnQpOwogICAgICAgICB3cml0ZShIZWFwT2JqZWN0Q291bnQpOwogICAgICAgICByZXR1cm47
CiAgICAgICAgIAorICAgIGNhc2UgTmV3RnVuY3Rpb246CisgICAgICAgIGlmIChub2RlLT5jYXN0
T3BlcmFuZDxGdW5jdGlvbkV4ZWN1dGFibGUqPigpLT5mdW5jdGlvblJlYWxsb2NhdGlvbldhdGNo
cG9pbnRTZXQoKS5pc1N0aWxsVmFsaWQoKSkKKyAgICAgICAgICAgIHdyaXRlKFdhdGNocG9pbnRf
ZmlyZSk7CisgICAgICAgIHJlYWQoSGVhcE9iamVjdENvdW50KTsKKyAgICAgICAgd3JpdGUoSGVh
cE9iamVjdENvdW50KTsKKyAgICAgICAgcmV0dXJuOworCiAgICAgY2FzZSBSZWdFeHBFeGVjOgog
ICAgIGNhc2UgUmVnRXhwVGVzdDoKICAgICAgICAgcmVhZChSZWdFeHBTdGF0ZSk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkocmV2aXNpb24gMTgyMDY5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMwOCw4ICszMDgsOCBAQCB2b2lkIEdyYXBoOjpkdW1wKFByaW50U3RyZWFtJiBvdXQsIGNvbnN0
CiAgICAgICAgIG91dC5wcmludChjb21tYSwgIl4iLCBub2RlLT5waGkoKS0+aW5kZXgoKSk7CiAg
ICAgaWYgKG5vZGUtPmhhc0V4ZWN1dGlvbkNvdW50ZXIoKSkKICAgICAgICAgb3V0LnByaW50KGNv
bW1hLCBSYXdQb2ludGVyKG5vZGUtPmV4ZWN1dGlvbkNvdW50ZXIoKSkpOwotICAgIGlmIChub2Rl
LT5oYXNWYXJpYWJsZVdhdGNocG9pbnRTZXQoKSkKLSAgICAgICAgb3V0LnByaW50KGNvbW1hLCBS
YXdQb2ludGVyKG5vZGUtPnZhcmlhYmxlV2F0Y2hwb2ludFNldCgpKSk7CisgICAgaWYgKG5vZGUt
Pmhhc1dhdGNocG9pbnRTZXQoKSkKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCBSYXdQb2ludGVy
KG5vZGUtPndhdGNocG9pbnRTZXQoKSkpOwogICAgIGlmIChub2RlLT5oYXNUeXBlZEFycmF5KCkp
CiAgICAgICAgIG91dC5wcmludChjb21tYSwgaW5Db250ZXh0KEpTVmFsdWUobm9kZS0+dHlwZWRB
cnJheSgpKSwgY29udGV4dCkpOwogICAgIGlmIChub2RlLT5oYXNTdG9yYWdlUG9pbnRlcigpKQpA
QCAtMTAyNSw2ICsxMDI1LDggQEAgSlNWYWx1ZSBHcmFwaDo6dHJ5R2V0Q29uc3RhbnRQcm9wZXJ0
eShjbwogCiBKU1ZhbHVlIEdyYXBoOjp0cnlHZXRDb25zdGFudENsb3N1cmVWYXIoSlNWYWx1ZSBi
YXNlLCBTY29wZU9mZnNldCBvZmZzZXQpCiB7CisgICAgLy8gVGhpcyBoYXMgYW4gYXdlc29tZSBj
b25jdXJyZW5jeSBzdG9yeS4gU2VlIGNvbW1lbnQgZm9yIEdldEdsb2JhbFZhciBpbiBCeXRlQ29k
ZVBhcnNlci4KKyAgICAKICAgICBpZiAoIWJhc2UpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7
CiAgICAgCkBAIC0xMDMzLDI0ICsxMDM1LDI4IEBAIEpTVmFsdWUgR3JhcGg6OnRyeUdldENvbnN0
YW50Q2xvc3VyZVZhcigKICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKICAgICAKICAgICBTeW1i
b2xUYWJsZSogc3ltYm9sVGFibGUgPSBhY3RpdmF0aW9uLT5zeW1ib2xUYWJsZSgpOwotICAgIENv
bmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKHN5bWJvbFRhYmxlLT5tX2xvY2spOwotICAgIAotICAg
IGlmIChzeW1ib2xUYWJsZS0+bV9mdW5jdGlvbkVudGVyZWRPbmNlLmhhc0JlZW5JbnZhbGlkYXRl
ZCgpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwotICAgIAotICAgIFN5bWJvbFRhYmxlRW50
cnkqIGVudHJ5ID0gc3ltYm9sVGFibGUtPmVudHJ5Rm9yKGxvY2tlciwgb2Zmc2V0KTsKLSAgICBp
ZiAoIWVudHJ5KQotICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwotICAgIAotICAgIFZhcmlhYmxl
V2F0Y2hwb2ludFNldCogc2V0ID0gZW50cnktPndhdGNocG9pbnRTZXQoKTsKLSAgICBpZiAoIXNl
dCkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKLSAgICAKLSAgICBKU1ZhbHVlIHZhbHVlID0g
c2V0LT5pbmZlcnJlZFZhbHVlKCk7Ci0gICAgaWYgKCF2YWx1ZSkKLSAgICAgICAgcmV0dXJuIEpT
VmFsdWUoKTsKKyAgICBKU1ZhbHVlIHZhbHVlOworICAgIFdhdGNocG9pbnRTZXQqIHNldDsKKyAg
ICB7CisgICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKHN5bWJvbFRhYmxlLT5tX2xv
Y2spOworICAgICAgICAKKyAgICAgICAgU3ltYm9sVGFibGVFbnRyeSogZW50cnkgPSBzeW1ib2xU
YWJsZS0+ZW50cnlGb3IobG9ja2VyLCBvZmZzZXQpOworICAgICAgICBpZiAoIWVudHJ5KQorICAg
ICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKKyAgICAgICAgCisgICAgICAgIHNldCA9IGVudHJ5
LT53YXRjaHBvaW50U2V0KCk7CisgICAgICAgIGlmICghc2V0KQorICAgICAgICAgICAgcmV0dXJu
IEpTVmFsdWUoKTsKKyAgICAgICAgCisgICAgICAgIGlmIChzZXQtPnN0YXRlKCkgIT0gSXNXYXRj
aGVkKQorICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKKyAgICAgICAgCisgICAgICAgIEFT
U0VSVChlbnRyeS0+c2NvcGVPZmZzZXQoKSA9PSBvZmZzZXQpOworICAgICAgICB2YWx1ZSA9IGFj
dGl2YXRpb24tPnZhcmlhYmxlQXQob2Zmc2V0KS5nZXQoKTsKKyAgICAgICAgaWYgKCF2YWx1ZSkK
KyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CisgICAgfQogICAgIAotICAgIHdhdGNocG9p
bnRzKCkuYWRkTGF6aWx5KHN5bWJvbFRhYmxlLT5tX2Z1bmN0aW9uRW50ZXJlZE9uY2UpOwogICAg
IHdhdGNocG9pbnRzKCkuYWRkTGF6aWx5KHNldCk7CiAgICAgCiAgICAgcmV0dXJuIHZhbHVlOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDE4MjA2OSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
MjE5LDE0ICsxMjE5LDE0IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgbV9vcEluZm8gPSBiaXR3
aXNlX2Nhc3Q8dWludHB0cl90Pih2YWx1ZSk7CiAgICAgfQogICAgIAotICAgIGJvb2wgaGFzVmFy
aWFibGVXYXRjaHBvaW50U2V0KCkKKyAgICBib29sIGhhc1dhdGNocG9pbnRTZXQoKQogICAgIHsK
ICAgICAgICAgcmV0dXJuIG9wKCkgPT0gTm90aWZ5V3JpdGU7CiAgICAgfQogICAgIAotICAgIFZh
cmlhYmxlV2F0Y2hwb2ludFNldCogdmFyaWFibGVXYXRjaHBvaW50U2V0KCkKKyAgICBXYXRjaHBv
aW50U2V0KiB3YXRjaHBvaW50U2V0KCkKICAgICB7Ci0gICAgICAgIHJldHVybiByZWludGVycHJl
dF9jYXN0PFZhcmlhYmxlV2F0Y2hwb2ludFNldCo+KG1fb3BJbmZvKTsKKyAgICAgICAgcmV0dXJu
IHJlaW50ZXJwcmV0X2Nhc3Q8V2F0Y2hwb2ludFNldCo+KG1fb3BJbmZvKTsKICAgICB9CiAgICAg
CiAgICAgYm9vbCBoYXNUeXBlZEFycmF5KCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMTgyMDY5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA1NCwx
MyArMTA1NCwxMiBAQCBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblN3aXRjaFN0cmluCiAg
ICAgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXIqPihleGVjLT5jb2RlQmxvY2soKS0+c3RyaW5nU3dp
dGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpLmN0aUZvclZhbHVlKHN0cmluZy0+dmFsdWUoZXhlYyku
aW1wbCgpKS5leGVjdXRhYmxlQWRkcmVzcygpKTsKIH0KIAotdm9pZCBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvbk5vdGlmeVdyaXRlKEV4ZWNTdGF0ZSogZXhlYywgVmFyaWFibGVXYXRjaHBvaW50U2V0
KiBzZXQsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3ZvaWQgSklUX09QRVJBVElPTiBv
cGVyYXRpb25Ob3RpZnlXcml0ZShFeGVjU3RhdGUqIGV4ZWMsIFdhdGNocG9pbnRTZXQqIHNldCkK
IHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0
cmFjZXIoJnZtLCBleGVjKTsKLSAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVu
Y29kZWRWYWx1ZSk7CiAKLSAgICBzZXQtPm5vdGlmeVdyaXRlKHZtLCB2YWx1ZSwgIkV4ZWN1dGVk
IE5vdGlmeVdyaXRlIik7CisgICAgc2V0LT50b3VjaCgiRXhlY3V0ZWQgTm90aWZ5V3JpdGUiKTsK
IH0KIAogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRocm93U3RhY2tPdmVyZmxvd0ZvclZh
cmFyZ3MoRXhlY1N0YXRlKiBleGVjKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPcGVyYXRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdPcGVyYXRpb25zLmgJKHJldmlzaW9uIDE4MjA2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjUsNyArMTI1LDcgQEAg
SlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk1ha2VSb3BlMgogSlNDZWxsKiBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvbk1ha2VSb3BlMyhFeGVjU3RhdGUqLCBKU1N0cmluZyosIEpTU3RyaW5n
KiwgSlNTdHJpbmcqKTsKIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRmluZFN3aXRjaElt
bVRhcmdldEZvckRvdWJsZShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgc2l6ZV90IHRhYmxl
SW5kZXgpOwogY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25Td2l0Y2hTdHJpbmcoRXhlY1N0
YXRlKiwgc2l6ZV90IHRhYmxlSW5kZXgsIEpTU3RyaW5nKik7Ci12b2lkIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uTm90aWZ5V3JpdGUoRXhlY1N0YXRlKiwgVmFyaWFibGVXYXRjaHBvaW50U2V0Kiwg
RW5jb2RlZEpTVmFsdWUpOwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5vdGlmeVdyaXRl
KEV4ZWNTdGF0ZSosIFdhdGNocG9pbnRTZXQqKTsKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRp
b25UaHJvd1N0YWNrT3ZlcmZsb3dGb3JWYXJhcmdzKEV4ZWNTdGF0ZSopIFdURl9JTlRFUk5BTDsK
IGludDMyX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25TaXplT2ZWYXJhcmdzKEV4ZWNTdGF0ZSos
IEVuY29kZWRKU1ZhbHVlIGFyZ3VtZW50cywgaW50MzJfdCBmaXJzdFZhckFyZ09mZnNldCk7CiB2
b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTG9hZFZhcmFyZ3MoRXhlY1N0YXRlKiwgaW50MzJf
dCBmaXJzdEVsZW1lbnREZXN0LCBFbmNvZGVkSlNWYWx1ZSBhcmd1bWVudHMsIGludDMyX3Qgb2Zm
c2V0LCBpbnQzMl90IGxlbmd0aCwgaW50MzJfdCBtYW5kYXRvcnlNaW5pbXVtKTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAko
cmV2aXNpb24gMTgyMDY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAxNCwyNCArNDAxNCwxNSBAQCB2b2lk
IFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgfQogCiAgICAgY2FzZSBO
b3RpZnlXcml0ZTogewotICAgICAgICBWYXJpYWJsZVdhdGNocG9pbnRTZXQqIHNldCA9IG5vZGUt
PnZhcmlhYmxlV2F0Y2hwb2ludFNldCgpOwotICAgIAotICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2
YWx1ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZh
bHVlLmdwcigpOwotICAgIAotICAgICAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKLSAgICAg
ICAgR1BSUmVnIHRlbXBHUFIgPSB0ZW1wLmdwcigpOwotICAgIAotICAgICAgICBtX2ppdC5sb2Fk
OChzZXQtPmFkZHJlc3NPZlN0YXRlKCksIHRlbXBHUFIpOwotICAgIAotICAgICAgICBKSVRDb21w
aWxlcjo6SnVtcCBpc0RvbmUgPQotICAgICAgICAgICAgbV9qaXQuYnJhbmNoMzIoSklUQ29tcGls
ZXI6OkVxdWFsLCB0ZW1wR1BSLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpOwotICAgICAg
ICBKSVRDb21waWxlcjo6SnVtcCBzbG93Q2FzZSA9IG1faml0LmJyYW5jaDY0KEpJVENvbXBpbGVy
OjpOb3RFcXVhbCwKLSAgICAgICAgICAgIEpJVENvbXBpbGVyOjpBYnNvbHV0ZUFkZHJlc3Moc2V0
LT5hZGRyZXNzT2ZJbmZlcnJlZFZhbHVlKCkpLCB2YWx1ZUdQUik7Ci0gICAgICAgIGlzRG9uZS5s
aW5rKCZtX2ppdCk7Ci0gICAgCisgICAgICAgIFdhdGNocG9pbnRTZXQqIHNldCA9IG5vZGUtPndh
dGNocG9pbnRTZXQoKTsKKyAgICAgICAgCisgICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dD
YXNlID0gbV9qaXQuYnJhbmNoOCgKKyAgICAgICAgICAgIEpJVENvbXBpbGVyOjpOb3RFcXVhbCwK
KyAgICAgICAgICAgIEpJVENvbXBpbGVyOjpBYnNvbHV0ZUFkZHJlc3Moc2V0LT5hZGRyZXNzT2ZT
dGF0ZSgpKSwKKyAgICAgICAgICAgIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSk7CisgICAg
ICAgIAogICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKLSAgICAgICAgICAgIHNsb3dQYXRo
Q2FsbChzbG93Q2FzZSwgdGhpcywgb3BlcmF0aW9uTm90aWZ5V3JpdGUsIE5vUmVzdWx0LCBzZXQs
IHZhbHVlR1BSKSk7CisgICAgICAgICAgICBzbG93UGF0aENhbGwoc2xvd0Nhc2UsIHRoaXMsIG9w
ZXJhdGlvbk5vdGlmeVdyaXRlLCBOb1Jlc3VsdCwgc2V0KSk7CiAKICAgICAgICAgbm9SZXN1bHQo
bm9kZSk7CiAgICAgICAgIGJyZWFrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHJldmlzaW9uIDE4MjA2OSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00MzY1LDggKzQzNjUsMTMgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU5ld0Z1bmN0
aW9uKAogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIHNjb3BlKHRoaXMsIG5vZGUtPmNoaWxkMSgp
KTsKICAgICBHUFJSZWcgc2NvcGVHUFIgPSBzY29wZS5ncHIoKTsKICAgICBmbHVzaFJlZ2lzdGVy
cygpOwotICAgIGNhbGxPcGVyYXRpb24oCi0gICAgICAgIG9wZXJhdGlvbk5ld0Z1bmN0aW9uLCBy
ZXN1bHRHUFIsIHNjb3BlR1BSLCBub2RlLT5jYXN0T3BlcmFuZDxGdW5jdGlvbkV4ZWN1dGFibGUq
PigpKTsKKyAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBub2RlLT5jYXN0T3Bl
cmFuZDxGdW5jdGlvbkV4ZWN1dGFibGUqPigpOworICAgIEpfSklUT3BlcmF0aW9uX0VKc2NDIGZ1
bmN0aW9uOworICAgIGlmIChleGVjdXRhYmxlLT5mdW5jdGlvblJlYWxsb2NhdGlvbldhdGNocG9p
bnRTZXQoKS5pc1N0aWxsVmFsaWQoKSkKKyAgICAgICAgZnVuY3Rpb24gPSBvcGVyYXRpb25OZXdG
dW5jdGlvbjsKKyAgICBlbHNlCisgICAgICAgIGZ1bmN0aW9uID0gb3BlcmF0aW9uTmV3RnVuY3Rp
b25XaXRoSW52YWxpZGF0ZWRSZWFsbG9jYXRpb25XYXRjaHBvaW50OworICAgIGNhbGxPcGVyYXRp
b24oZnVuY3Rpb24sIHJlc3VsdEdQUiwgc2NvcGVHUFIsIGV4ZWN1dGFibGUpOwogICAgIGNlbGxS
ZXN1bHQocmVzdWx0R1BSLCBub2RlKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24gMTgyMDY5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xNDY2LDYgKzE0NjYsMTIgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbChv
cGVyYXRpb24pOwogICAgIH0KIAorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24o
Vl9KSVRPcGVyYXRpb25fRVdzIG9wZXJhdGlvbiwgV2F0Y2hwb2ludFNldCogd2F0Y2hwb2ludFNl
dCkKKyAgICB7CisgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVz
dGVkSW1tUHRyKHdhdGNocG9pbnRTZXQpKTsKKyAgICAgICAgcmV0dXJuIGFwcGVuZENhbGwob3Bl
cmF0aW9uKTsKKyAgICB9CisKICAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKERf
SklUT3BlcmF0aW9uX0VKIG9wZXJhdGlvbiwgRlBSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzEpCiAg
ICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoYXJnMSk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2Uu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyYXJnc0Zv
cndhcmRpbmdQaGFzZS5jcHAJKHJldmlzaW9uIDE4MjA2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJERkdDbG9iYmVyaXplLmgiCiAjaW5jbHVkZSAiREZH
R3JhcGguaCIKICNpbmNsdWRlICJERkdQaGFzZS5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIK
IAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZnRsL0ZUTEludHJpbnNpY1JlcG9zaXRvcnkuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEludHJpbnNpY1JlcG9zaXRvcnkuaAkocmV2aXNpb24g
MTgyMDY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbnRyaW5zaWNSZXBvc2l0
b3J5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNiw2ICsxMDYsNyBAQCBuYW1lc3BhY2UgSlNDIHsg
bmFtZXNwYWNlIEZUTCB7CiAgICAgbWFjcm8oVl9KSVRPcGVyYXRpb25fRUMsIGZ1bmN0aW9uVHlw
ZSh2b2lkVHlwZSwgaW50UHRyLCBpbnRQdHIpKSBcCiAgICAgbWFjcm8oVl9KSVRPcGVyYXRpb25f
RUNiLCBmdW5jdGlvblR5cGUodm9pZFR5cGUsIGludFB0ciwgaW50UHRyKSkgXAogICAgIG1hY3Jv
KFZfSklUT3BlcmF0aW9uX0VWd3NKLCBmdW5jdGlvblR5cGUodm9pZFR5cGUsIGludFB0ciwgaW50
UHRyLCBpbnQ2NCkpIFwKKyAgICBtYWNybyhWX0pJVE9wZXJhdGlvbl9FV3MsIGZ1bmN0aW9uVHlw
ZSh2b2lkVHlwZSwgaW50UHRyLCBpbnRQdHIpKSBcCiAgICAgbWFjcm8oVl9KSVRPcGVyYXRpb25f
RVpKWlpaLCBmdW5jdGlvblR5cGUodm9pZFR5cGUsIGludFB0ciwgaW50MzIsIGludDY0LCBpbnQz
MiwgaW50MzIsIGludDMyKSkgXAogICAgIG1hY3JvKFZfSklUT3BlcmF0aW9uX0osIGZ1bmN0aW9u
VHlwZSh2b2lkVHlwZSwgaW50NjQpKSBcCiAgICAgbWFjcm8oVl9KSVRPcGVyYXRpb25fWiwgZnVu
Y3Rpb25UeXBlKHZvaWRUeXBlLCBpbnQzMikpIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCShyZXZpc2lvbiAxODIwNjkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMzc4MywyOSArMzc4MywxOSBAQCBwcml2YXRlOgogICAgIAogICAgIHZvaWQgY29t
cGlsZU5vdGlmeVdyaXRlKCkKICAgICB7Ci0gICAgICAgIFZhcmlhYmxlV2F0Y2hwb2ludFNldCog
c2V0ID0gbV9ub2RlLT52YXJpYWJsZVdhdGNocG9pbnRTZXQoKTsKLSAgICAgICAgCi0gICAgICAg
IExWYWx1ZSB2YWx1ZSA9IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSk7CisgICAgICAgIFdh
dGNocG9pbnRTZXQqIHNldCA9IG1fbm9kZS0+d2F0Y2hwb2ludFNldCgpOwogICAgICAgICAKICAg
ICAgICAgTEJhc2ljQmxvY2sgaXNOb3RJbnZhbGlkYXRlZCA9IEZUTF9ORVdfQkxPQ0sobV9vdXQs
ICgiTm90aWZ5V3JpdGUgbm90IGludmFsaWRhdGVkIGNhc2UiKSk7Ci0gICAgICAgIExCYXNpY0Js
b2NrIG5vdGlmeVNsb3cgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIk5vdGlmeVdyaXRlIG5vdGlm
eSBzbG93IGNhc2UiKSk7CiAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVhdGlvbiA9IEZUTF9O
RVdfQkxPQ0sobV9vdXQsICgiTm90aWZ5V3JpdGUgY29udGludWF0aW9uIikpOwogICAgICAgICAK
ICAgICAgICAgTFZhbHVlIHN0YXRlID0gbV9vdXQubG9hZDgobV9vdXQuYWJzb2x1dGUoc2V0LT5h
ZGRyZXNzT2ZTdGF0ZSgpKSk7Ci0gICAgICAgIAogICAgICAgICBtX291dC5icmFuY2goCiAgICAg
ICAgICAgICBtX291dC5lcXVhbChzdGF0ZSwgbV9vdXQuY29uc3RJbnQ4KElzSW52YWxpZGF0ZWQp
KSwKICAgICAgICAgICAgIHVzdWFsbHkoY29udGludWF0aW9uKSwgcmFyZWx5KGlzTm90SW52YWxp
ZGF0ZWQpKTsKICAgICAgICAgCi0gICAgICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQu
YXBwZW5kVG8oaXNOb3RJbnZhbGlkYXRlZCwgbm90aWZ5U2xvdyk7Ci0KLSAgICAgICAgbV9vdXQu
YnJhbmNoKAotICAgICAgICAgICAgbV9vdXQuZXF1YWwodmFsdWUsIG1fb3V0LmxvYWQ2NChtX291
dC5hYnNvbHV0ZShzZXQtPmFkZHJlc3NPZkluZmVycmVkVmFsdWUoKSkpKSwKLSAgICAgICAgICAg
IHVuc3VyZShjb250aW51YXRpb24pLCB1bnN1cmUobm90aWZ5U2xvdykpOwotCi0gICAgICAgIG1f
b3V0LmFwcGVuZFRvKG5vdGlmeVNsb3csIGNvbnRpbnVhdGlvbik7CisgICAgICAgIExCYXNpY0Js
b2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oaXNOb3RJbnZhbGlkYXRlZCwgY29udGludWF0
aW9uKTsKIAotICAgICAgICB2bUNhbGwobV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbk5vdGlmeVdy
aXRlKSwgbV9jYWxsRnJhbWUsIG1fb3V0LmNvbnN0SW50UHRyKHNldCksIHZhbHVlKTsKKyAgICAg
ICAgdm1DYWxsKG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25Ob3RpZnlXcml0ZSksIG1fY2FsbEZy
YW1lLCBtX291dC5jb25zdEludFB0cihzZXQpKTsKICAgICAgICAgbV9vdXQuanVtcChjb250aW51
YXRpb24pOwogICAgICAgICAKICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29udGludWF0aW9uLCBs
YXN0TmV4dCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJw
cmV0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRl
ci9JbnRlcnByZXRlci5jcHAJKHJldmlzaW9uIDE4MjA2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg5LDYg
Kzg5LDQ3IEBAIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKIG5hbWVzcGFjZSBKU0MgewogCitTdHJp
bmcgU3RhY2tGcmFtZTo6ZnJpZW5kbHlTb3VyY2VVUkwoKSBjb25zdAoreworICAgIFN0cmluZyB0
cmFjZUxpbmU7CisgICAgCisgICAgc3dpdGNoIChjb2RlVHlwZSkgeworICAgIGNhc2UgU3RhY2tG
cmFtZUV2YWxDb2RlOgorICAgIGNhc2UgU3RhY2tGcmFtZUZ1bmN0aW9uQ29kZToKKyAgICBjYXNl
IFN0YWNrRnJhbWVHbG9iYWxDb2RlOgorICAgICAgICBpZiAoIXNvdXJjZVVSTC5pc0VtcHR5KCkp
CisgICAgICAgICAgICB0cmFjZUxpbmUgPSBzb3VyY2VVUkwuaW1wbCgpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIFN0YWNrRnJhbWVOYXRpdmVDb2RlOgorICAgICAgICB0cmFjZUxpbmUgPSAi
W25hdGl2ZSBjb2RlXSI7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gdHJhY2VM
aW5lLmlzTnVsbCgpID8gZW1wdHlTdHJpbmcoKSA6IHRyYWNlTGluZTsKK30KKworU3RyaW5nIFN0
YWNrRnJhbWU6OmZyaWVuZGx5RnVuY3Rpb25OYW1lKENhbGxGcmFtZSogY2FsbEZyYW1lKSBjb25z
dAoreworICAgIFN0cmluZyB0cmFjZUxpbmU7CisgICAgSlNPYmplY3QqIHN0YWNrRnJhbWVDYWxs
ZWUgPSBjYWxsZWUuZ2V0KCk7CisKKyAgICBzd2l0Y2ggKGNvZGVUeXBlKSB7CisgICAgY2FzZSBT
dGFja0ZyYW1lRXZhbENvZGU6CisgICAgICAgIHRyYWNlTGluZSA9ICJldmFsIGNvZGUiOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIFN0YWNrRnJhbWVOYXRpdmVDb2RlOgorICAgICAgICBpZiAo
Y2FsbGVlKQorICAgICAgICAgICAgdHJhY2VMaW5lID0gZ2V0Q2FsY3VsYXRlZERpc3BsYXlOYW1l
KGNhbGxGcmFtZSwgc3RhY2tGcmFtZUNhbGxlZSkuaW1wbCgpOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIFN0YWNrRnJhbWVGdW5jdGlvbkNvZGU6CisgICAgICAgIHRyYWNlTGluZSA9IGdldENh
bGN1bGF0ZWREaXNwbGF5TmFtZShjYWxsRnJhbWUsIHN0YWNrRnJhbWVDYWxsZWUpLmltcGwoKTsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTdGFja0ZyYW1lR2xvYmFsQ29kZToKKyAgICAgICAg
dHJhY2VMaW5lID0gImdsb2JhbCBjb2RlIjsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIHJl
dHVybiB0cmFjZUxpbmUuaXNOdWxsKCkgPyBlbXB0eVN0cmluZygpIDogdHJhY2VMaW5lOworfQor
CiBKU1ZhbHVlIGV2YWwoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7CiAgICAgaWYgKCFjYWxsRnJh
bWUtPmFyZ3VtZW50Q291bnQoKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnBy
ZXRlci9JbnRlcnByZXRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9p
bnRlcnByZXRlci9JbnRlcnByZXRlci5oCShyZXZpc2lvbiAxODIwNjkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
OTAsNDUgKzkwLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHVuc2lnbmVkIGJ5dGVjb2Rl
T2Zmc2V0OwogICAgICAgICBTdHJpbmcgc291cmNlVVJMOwogICAgICAgICBKU19FWFBPUlRfUFJJ
VkFURSBTdHJpbmcgdG9TdHJpbmcoQ2FsbEZyYW1lKik7Ci0gICAgICAgIFN0cmluZyBmcmllbmRs
eVNvdXJjZVVSTCgpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIFN0cmluZyB0cmFjZUxp
bmU7Ci0KLSAgICAgICAgICAgIHN3aXRjaCAoY29kZVR5cGUpIHsKLSAgICAgICAgICAgIGNhc2Ug
U3RhY2tGcmFtZUV2YWxDb2RlOgotICAgICAgICAgICAgY2FzZSBTdGFja0ZyYW1lRnVuY3Rpb25D
b2RlOgotICAgICAgICAgICAgY2FzZSBTdGFja0ZyYW1lR2xvYmFsQ29kZToKLSAgICAgICAgICAg
ICAgICBpZiAoIXNvdXJjZVVSTC5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgICAgIHRyYWNl
TGluZSA9IHNvdXJjZVVSTC5pbXBsKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICBjYXNlIFN0YWNrRnJhbWVOYXRpdmVDb2RlOgotICAgICAgICAgICAgICAgIHRyYWNlTGlu
ZSA9ICJbbmF0aXZlIGNvZGVdIjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIHJldHVybiB0cmFjZUxpbmUuaXNOdWxsKCkgPyBlbXB0eVN0cmluZygp
IDogdHJhY2VMaW5lOwotICAgICAgICB9Ci0gICAgICAgIFN0cmluZyBmcmllbmRseUZ1bmN0aW9u
TmFtZShDYWxsRnJhbWUqIGNhbGxGcmFtZSkgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAg
U3RyaW5nIHRyYWNlTGluZTsKLSAgICAgICAgICAgIEpTT2JqZWN0KiBzdGFja0ZyYW1lQ2FsbGVl
ID0gY2FsbGVlLmdldCgpOwotCi0gICAgICAgICAgICBzd2l0Y2ggKGNvZGVUeXBlKSB7Ci0gICAg
ICAgICAgICBjYXNlIFN0YWNrRnJhbWVFdmFsQ29kZToKLSAgICAgICAgICAgICAgICB0cmFjZUxp
bmUgPSAiZXZhbCBjb2RlIjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNh
c2UgU3RhY2tGcmFtZU5hdGl2ZUNvZGU6Ci0gICAgICAgICAgICAgICAgaWYgKGNhbGxlZSkKLSAg
ICAgICAgICAgICAgICAgICAgdHJhY2VMaW5lID0gZ2V0Q2FsY3VsYXRlZERpc3BsYXlOYW1lKGNh
bGxGcmFtZSwgc3RhY2tGcmFtZUNhbGxlZSkuaW1wbCgpOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgY2FzZSBTdGFja0ZyYW1lRnVuY3Rpb25Db2RlOgotICAgICAgICAgICAg
ICAgIHRyYWNlTGluZSA9IGdldENhbGN1bGF0ZWREaXNwbGF5TmFtZShjYWxsRnJhbWUsIHN0YWNr
RnJhbWVDYWxsZWUpLmltcGwoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IGNhc2UgU3RhY2tGcmFtZUdsb2JhbENvZGU6Ci0gICAgICAgICAgICAgICAgdHJhY2VMaW5lID0g
Imdsb2JhbCBjb2RlIjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAg
ICAgICAgICAgIHJldHVybiB0cmFjZUxpbmUuaXNOdWxsKCkgPyBlbXB0eVN0cmluZygpIDogdHJh
Y2VMaW5lOwotICAgICAgICB9CisgICAgICAgIFN0cmluZyBmcmllbmRseVNvdXJjZVVSTCgpIGNv
bnN0OworICAgICAgICBTdHJpbmcgZnJpZW5kbHlGdW5jdGlvbk5hbWUoQ2FsbEZyYW1lKikgY29u
c3Q7CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgY29tcHV0ZUxpbmVBbmRDb2x1bW4o
dW5zaWduZWQmIGxpbmUsIHVuc2lnbmVkJiBjb2x1bW4pOwogCiAgICAgcHJpdmF0ZToKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDE4MjA2OSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTg5LDcgKzE4OSw2
IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKICAgICAgICAgREVGSU5FX1NM
T1dfT1AoaXNfb2JqZWN0X29yX251bGwpCiAgICAgICAgIERFRklORV9TTE9XX09QKHR5cGVvZikK
IAotICAgICAgICBERUZJTkVfT1Aob3BfdG91Y2hfZW50cnkpCiAgICAgICAgIERFRklORV9PUChv
cF9hZGQpCiAgICAgICAgIERFRklORV9PUChvcF9iaXRhbmQpCiAgICAgICAgIERFRklORV9PUChv
cF9iaXRvcikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkocmV2aXNpb24gMTgyMDY5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkod29ya2luZyBjb3B5KQpAQCAtNDU3
LDcgKzQ1Nyw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAKICAgICAgICAgdm9pZCBhc3Nl
cnRTdGFja1BvaW50ZXJPZmZzZXQoKTsKIAotICAgICAgICB2b2lkIGVtaXRfb3BfdG91Y2hfZW50
cnkoSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2FkZChJbnN0cnVjdGlvbiop
OwogICAgICAgICB2b2lkIGVtaXRfb3BfYml0YW5kKEluc3RydWN0aW9uKik7CiAgICAgICAgIHZv
aWQgZW1pdF9vcF9iaXRvcihJbnN0cnVjdGlvbiopOwpAQCAtNjQwLDEzICs2MzksOSBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0R2V0R2xvYmFsVmFyKHVpbnRwdHJfdCBvcGVy
YW5kKTsKICAgICAgICAgdm9pZCBlbWl0R2V0Q2xvc3VyZVZhcihpbnQgc2NvcGUsIHVpbnRwdHJf
dCBvcGVyYW5kKTsKICAgICAgICAgdm9pZCBlbWl0UHV0R2xvYmFsUHJvcGVydHkodWludHB0cl90
KiBvcGVyYW5kU2xvdCwgaW50IHZhbHVlKTsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICB2
b2lkIGVtaXROb3RpZnlXcml0ZShSZWdpc3RlcklEIHZhbHVlLCBSZWdpc3RlcklEIHNjcmF0Y2gs
IFZhcmlhYmxlV2F0Y2hwb2ludFNldCopOwotI2Vsc2UKLSAgICAgICAgdm9pZCBlbWl0Tm90aWZ5
V3JpdGUoUmVnaXN0ZXJJRCB0YWcsIFJlZ2lzdGVySUQgcGF5bG9hZCwgUmVnaXN0ZXJJRCBzY3Jh
dGNoLCBWYXJpYWJsZVdhdGNocG9pbnRTZXQqKTsKLSNlbmRpZgotICAgICAgICB2b2lkIGVtaXRQ
dXRHbG9iYWxWYXIodWludHB0cl90IG9wZXJhbmQsIGludCB2YWx1ZSwgVmFyaWFibGVXYXRjaHBv
aW50U2V0Kik7Ci0gICAgICAgIHZvaWQgZW1pdFB1dENsb3N1cmVWYXIoaW50IHNjb3BlLCB1aW50
cHRyX3Qgb3BlcmFuZCwgaW50IHZhbHVlLCBWYXJpYWJsZVdhdGNocG9pbnRTZXQqKTsKKyAgICAg
ICAgdm9pZCBlbWl0Tm90aWZ5V3JpdGUoV2F0Y2hwb2ludFNldCopOworICAgICAgICB2b2lkIGVt
aXRQdXRHbG9iYWxWYXIodWludHB0cl90IG9wZXJhbmQsIGludCB2YWx1ZSwgV2F0Y2hwb2ludFNl
dCopOworICAgICAgICB2b2lkIGVtaXRQdXRDbG9zdXJlVmFyKGludCBzY29wZSwgdWludHB0cl90
IG9wZXJhbmQsIGludCB2YWx1ZSwgV2F0Y2hwb2ludFNldCopOwogCiAgICAgICAgIHZvaWQgZW1p
dEluaXRSZWdpc3RlcihpbnQgZHN0KTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRPcGNvZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVE9wY29kZXMuY3BwCShyZXZpc2lvbiAxODIwNjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVE9wY29kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NzksMTUgKzg3OSw2IEBA
IHZvaWQgSklUOjplbWl0U2xvd19vcF90b19udW1iZXIoSW5zdHJ1Y3QKIAogI2VuZGlmIC8vIFVT
RShKU1ZBTFVFNjQpCiAKLXZvaWQgSklUOjplbWl0X29wX3RvdWNoX2VudHJ5KEluc3RydWN0aW9u
KiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgaWYgKG1fY29kZUJsb2NrLT5zeW1ib2xUYWJs
ZSgpLT5tX2Z1bmN0aW9uRW50ZXJlZE9uY2UuaGFzQmVlbkludmFsaWRhdGVkKCkpCi0gICAgICAg
IHJldHVybjsKLSAgICAKLSAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1
cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX3RvdWNoX2VudHJ5KTsKLSAgICBzbG93UGF0aENh
bGwuY2FsbCgpOwotfQotCiB2b2lkIEpJVDo6ZW1pdF9vcF9sb29wX2hpbnQoSW5zdHJ1Y3Rpb24q
KQogewogICAgIC8vIEVtaXQgdGhlIEpJVCBvcHRpbWl6YXRpb24gY2hlY2s6IApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAxODIw
NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC05MzMsNiArOTMzLDE0IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uTmUKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTRnVuY3Rpb246OmNy
ZWF0ZSh2bSwgc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oZnVuY3Rpb25FeGVjdXRh
YmxlKSwgc2NvcGUpKTsKIH0KIAorRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRp
b25OZXdGdW5jdGlvbldpdGhJbnZhbGlkYXRlZFJlYWxsb2NhdGlvbldhdGNocG9pbnQoRXhlY1N0
YXRlKiBleGVjLCBKU1Njb3BlKiBzY29wZSwgSlNDZWxsKiBmdW5jdGlvbkV4ZWN1dGFibGUpCit7
CisgICAgQVNTRVJUKGZ1bmN0aW9uRXhlY3V0YWJsZS0+aW5oZXJpdHMoRnVuY3Rpb25FeGVjdXRh
YmxlOjppbmZvKCkpKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxG
cmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2Rl
KEpTRnVuY3Rpb246OmNyZWF0ZVdpdGhJbnZhbGlkYXRlZFJlYWxsb2NhdGlvbldhdGNocG9pbnQo
dm0sIHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGZ1bmN0aW9uRXhlY3V0YWJsZSks
IHNjb3BlKSk7Cit9CisKIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdPYmplY3Qo
RXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsKICAgICBWTSogdm0gPSAm
ZXhlYy0+dm0oKTsKQEAgLTE3MDMsOCArMTcxMSw4IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVy
YXRpb25QdXRUb1Njb3BlKEUKICAgICBpZiAobW9kZUFuZFR5cGUudHlwZSgpID09IExvY2FsQ2xv
c3VyZVZhcikgewogICAgICAgICBKU0xleGljYWxFbnZpcm9ubWVudCogZW52aXJvbm1lbnQgPSBq
c0Nhc3Q8SlNMZXhpY2FsRW52aXJvbm1lbnQqPihzY29wZSk7CiAgICAgICAgIGVudmlyb25tZW50
LT52YXJpYWJsZUF0KFNjb3BlT2Zmc2V0KHBjWzZdLnUub3BlcmFuZCkpLnNldCh2bSwgZW52aXJv
bm1lbnQsIHZhbHVlKTsKLSAgICAgICAgaWYgKFZhcmlhYmxlV2F0Y2hwb2ludFNldCogc2V0ID0g
cGNbNV0udS53YXRjaHBvaW50U2V0KQotICAgICAgICAgICAgc2V0LT5ub3RpZnlXcml0ZSh2bSwg
dmFsdWUsICJFeGVjdXRlZCBvcF9wdXRfc2NvcGU8TG9jYWxDbG9zdXJlVmFyPiIpOworICAgICAg
ICBpZiAoV2F0Y2hwb2ludFNldCogc2V0ID0gcGNbNV0udS53YXRjaHBvaW50U2V0KQorICAgICAg
ICAgICAgc2V0LT50b3VjaCgiRXhlY3V0ZWQgb3BfcHV0X3Njb3BlPExvY2FsQ2xvc3VyZVZhcj4i
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAobW9kZUFuZFR5cGUubW9kZSgpID09
IFRocm93SWZOb3RGb3VuZCAmJiAhc2NvcGUtPmhhc1Byb3BlcnR5KGV4ZWMsIGlkZW50KSkgewpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgJKHJldmlzaW9u
IDE4MjA2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCSh3
b3JraW5nIGNvcHkpCkBAIC04Niw2ICs4Niw3IEBAIGV4dGVybiAiQyIgewogICAgIFY6IHZvaWQK
ICAgICBWbTogVk0qCiAgICAgVndzOiBWYXJpYWJsZVdhdGNocG9pbnRTZXQqCisgICAgV3M6IFdh
dGNocG9pbnRTZXQqCiAgICAgWjogaW50MzJfdAogKi8KIApAQCAtMTkyLDYgKzE5Myw3IEBAIHR5
cGVkZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgqVl9KSVRPcGVyYXQKIHR5cGVkZWYgdm9pZCBKSVRf
T1BFUkFUSU9OICgqVl9KSVRPcGVyYXRpb25fRVBaSikoRXhlY1N0YXRlKiwgdm9pZCosIGludDMy
X3QsIEVuY29kZWRKU1ZhbHVlKTsKIHR5cGVkZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgqVl9KSVRP
cGVyYXRpb25fRVNzaUpKSSkoRXhlY1N0YXRlKiwgU3RydWN0dXJlU3R1YkluZm8qLCBFbmNvZGVk
SlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIFN0cmluZ0ltcGwqKTsKIHR5cGVkZWYgdm9pZCBKSVRf
T1BFUkFUSU9OICgqVl9KSVRPcGVyYXRpb25fRVZ3c0opKEV4ZWNTdGF0ZSosIFZhcmlhYmxlV2F0
Y2hwb2ludFNldCosIEVuY29kZWRKU1ZhbHVlKTsKK3R5cGVkZWYgdm9pZCBKSVRfT1BFUkFUSU9O
ICgqVl9KSVRPcGVyYXRpb25fRVdzKShFeGVjU3RhdGUqLCBXYXRjaHBvaW50U2V0Kik7CiB0eXBl
ZGVmIHZvaWQgSklUX09QRVJBVElPTiAoKlZfSklUT3BlcmF0aW9uX0VaKShFeGVjU3RhdGUqLCBp
bnQzMl90KTsKIHR5cGVkZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgqVl9KSVRPcGVyYXRpb25fRVpK
KShFeGVjU3RhdGUqLCBpbnQzMl90LCBFbmNvZGVkSlNWYWx1ZSk7CiB0eXBlZGVmIHZvaWQgSklU
X09QRVJBVElPTiAoKlZfSklUT3BlcmF0aW9uX0VaSlpaWikoRXhlY1N0YXRlKiwgaW50MzJfdCwg
RW5jb2RlZEpTVmFsdWUsIGludDMyX3QsIGludDMyX3QsIGludDMyX3QpOwpAQCAtMjc4LDYgKzI4
MCw3IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmUKIEVuY29kZWRK
U1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3QXJyYXlCdWZmZXJXaXRoUHJvZmlsZShF
eGVjU3RhdGUqLCBBcnJheUFsbG9jYXRpb25Qcm9maWxlKiwgY29uc3QgSlNWYWx1ZSogdmFsdWVz
LCBpbnQzMl90IHNpemUpIFdURl9JTlRFUk5BTDsKIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZUFuZFByb2ZpbGUoRXhlY1N0YXRlKiwgQXJyYXlB
bGxvY2F0aW9uUHJvZmlsZSosIEVuY29kZWRKU1ZhbHVlIHNpemUpIFdURl9JTlRFUk5BTDsKIEVu
Y29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3RnVuY3Rpb24oRXhlY1N0YXRl
KiwgSlNTY29wZSosIEpTQ2VsbCopIFdURl9JTlRFUk5BTDsKK0VuY29kZWRKU1ZhbHVlIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uTmV3RnVuY3Rpb25XaXRoSW52YWxpZGF0ZWRSZWFsbG9jYXRpb25X
YXRjaHBvaW50KEV4ZWNTdGF0ZSosIEpTU2NvcGUqLCBKU0NlbGwqKSBXVEZfSU5URVJOQUw7CiBK
U0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3T2JqZWN0KEV4ZWNTdGF0ZSosIFN0cnVj
dHVyZSopIFdURl9JTlRFUk5BTDsKIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uTmV3UmVnZXhwKEV4ZWNTdGF0ZSosIHZvaWQqKSBXVEZfSU5URVJOQUw7CiB2b2lkIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uSGFuZGxlV2F0Y2hkb2dUaW1lcihFeGVjU3RhdGUqKSBXVEZfSU5U
RVJOQUw7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5
QWNjZXNzLmNwcAkocmV2aXNpb24gMTgyMDY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcyOCwyOSArNzI4LDI2
IEBAIHZvaWQgSklUOjplbWl0UHV0R2xvYmFsUHJvcGVydHkodWludHB0cl8KICAgICBzdG9yZVB0
cihyZWdUMiwgQmFzZUluZGV4KHJlZ1QwLCByZWdUMSwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZM
aW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7CiB9CiAKLXZvaWQgSklU
OjplbWl0Tm90aWZ5V3JpdGUoUmVnaXN0ZXJJRCB2YWx1ZSwgUmVnaXN0ZXJJRCBzY3JhdGNoLCBW
YXJpYWJsZVdhdGNocG9pbnRTZXQqIHNldCkKK3ZvaWQgSklUOjplbWl0Tm90aWZ5V3JpdGUoV2F0
Y2hwb2ludFNldCogc2V0KQogewogICAgIGlmICghc2V0IHx8IHNldC0+c3RhdGUoKSA9PSBJc0lu
dmFsaWRhdGVkKQogICAgICAgICByZXR1cm47CiAgICAgCi0gICAgbG9hZDgoc2V0LT5hZGRyZXNz
T2ZTdGF0ZSgpLCBzY3JhdGNoKTsKLSAgICBKdW1wIGlzRG9uZSA9IGJyYW5jaDMyKEVxdWFsLCBz
Y3JhdGNoLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpOwotICAgIGFkZFNsb3dDYXNlKGJy
YW5jaDY0KE5vdEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3Moc2V0LT5hZGRyZXNzT2ZJbmZlcnJlZFZh
bHVlKCkpLCB2YWx1ZSkpOwotICAgIGlzRG9uZS5saW5rKHRoaXMpOworICAgIGFkZFNsb3dDYXNl
KGJyYW5jaDgoTm90RXF1YWwsIEFic29sdXRlQWRkcmVzcyhzZXQtPmFkZHJlc3NPZlN0YXRlKCkp
LCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRQdXRH
bG9iYWxWYXIodWludHB0cl90IG9wZXJhbmQsIGludCB2YWx1ZSwgVmFyaWFibGVXYXRjaHBvaW50
U2V0KiBzZXQpCit2b2lkIEpJVDo6ZW1pdFB1dEdsb2JhbFZhcih1aW50cHRyX3Qgb3BlcmFuZCwg
aW50IHZhbHVlLCBXYXRjaHBvaW50U2V0KiBzZXQpCiB7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIGVtaXROb3RpZnlXcml0ZShyZWdUMCwgcmVnVDEsIHNl
dCk7CisgICAgZW1pdE5vdGlmeVdyaXRlKHNldCk7CiAgICAgc3RvcmVQdHIocmVnVDAsIHJlaW50
ZXJwcmV0X2Nhc3Q8dm9pZCo+KG9wZXJhbmQpKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRQdXRDbG9z
dXJlVmFyKGludCBzY29wZSwgdWludHB0cl90IG9wZXJhbmQsIGludCB2YWx1ZSwgVmFyaWFibGVX
YXRjaHBvaW50U2V0KiBzZXQpCit2b2lkIEpJVDo6ZW1pdFB1dENsb3N1cmVWYXIoaW50IHNjb3Bl
LCB1aW50cHRyX3Qgb3BlcmFuZCwgaW50IHZhbHVlLCBXYXRjaHBvaW50U2V0KiBzZXQpCiB7CiAg
ICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOwogICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKLSAgICBlbWl0Tm90aWZ5V3JpdGUocmVnVDEsIHJl
Z1QyLCBzZXQpOworICAgIGVtaXROb3RpZnlXcml0ZShzZXQpOwogICAgIHN0b3JlUHRyKHJlZ1Qx
LCBBZGRyZXNzKHJlZ1QwLCBKU0Vudmlyb25tZW50UmVjb3JkOjpvZmZzZXRPZlZhcmlhYmxlcygp
ICsgb3BlcmFuZCAqIHNpemVvZihSZWdpc3RlcikpKTsKIH0KIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCShyZXZpc2lvbiAxODIwNjkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMzg0LDggKzEzODQsMTIgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xv
d19wYXRoX3B1dF90b19zYwogICAgIGlmIChtb2RlQW5kVHlwZS50eXBlKCkgPT0gTG9jYWxDbG9z
dXJlVmFyKSB7CiAgICAgICAgIEpTTGV4aWNhbEVudmlyb25tZW50KiBlbnZpcm9ubWVudCA9IGpz
Q2FzdDxKU0xleGljYWxFbnZpcm9ubWVudCo+KHNjb3BlKTsKICAgICAgICAgZW52aXJvbm1lbnQt
PnZhcmlhYmxlQXQoU2NvcGVPZmZzZXQocGNbNl0udS5vcGVyYW5kKSkuc2V0KHZtLCBlbnZpcm9u
bWVudCwgdmFsdWUpOwotICAgICAgICBpZiAoVmFyaWFibGVXYXRjaHBvaW50U2V0KiBzZXQgPSBw
Y1s1XS51LndhdGNocG9pbnRTZXQpCi0gICAgICAgICAgICBzZXQtPm5vdGlmeVdyaXRlKHZtLCB2
YWx1ZSwgIkV4ZWN1dGVkIG9wX3B1dF9zY29wZTxMb2NhbENsb3N1cmVWYXI+Iik7CisgICAgICAg
IAorICAgICAgICAvLyBIYXZlIHRvIGRvIHRoaXMgKmFmdGVyKiB0aGUgd3JpdGUsIGJlY2F1c2Ug
aWYgdGhpcyBwdXRzIHRoZSBzZXQgaW50byBJc1dhdGNoZWQsIHRoZW4gd2UgbmVlZAorICAgICAg
ICAvLyB0byBoYXZlIGFscmVhZHkgY2hhbmdlZCB0aGUgdmFsdWUgb2YgdGhlIHZhcmlhYmxlLiBP
dGhlcndpc2Ugd2UgbWlnaHQgd2F0Y2ggYW5kIGNvbnN0YW50LWZvbGQKKyAgICAgICAgLy8gdG8g
dGhlIFVuZGVmaW5lZCB2YWx1ZSBmcm9tIGJlZm9yZSB0aGUgYXNzaWdubWVudC4KKyAgICAgICAg
aWYgKFdhdGNocG9pbnRTZXQqIHNldCA9IHBjWzVdLnUud2F0Y2hwb2ludFNldCkKKyAgICAgICAg
ICAgIHNldC0+dG91Y2goIkV4ZWN1dGVkIG9wX3B1dF9zY29wZTxMb2NhbENsb3N1cmVWYXI+Iik7
CiAgICAgICAgIExMSU5UX0VORCgpOwogICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20KPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHJldmlzaW9u
IDE4MjA2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJl
dGVyNjQuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC02OTAsMTEgKzY5MCw4IEBAIF9sbGludF9vcF9t
b3Y6CiAgICAgZGlzcGF0Y2goMykKIAogCi1tYWNybyBub3RpZnlXcml0ZShzZXQsIHZhbHVlLCBz
Y3JhdGNoLCBzbG93KQotICAgIGxvYWRiIFZhcmlhYmxlV2F0Y2hwb2ludFNldDo6bV9zdGF0ZVtz
ZXRdLCBzY3JhdGNoCi0gICAgYmllcSBzY3JhdGNoLCBJc0ludmFsaWRhdGVkLCAuZG9uZQotICAg
IGJxbmVxIHZhbHVlLCBWYXJpYWJsZVdhdGNocG9pbnRTZXQ6Om1faW5mZXJyZWRWYWx1ZVtzZXRd
LCBzbG93Ci0uZG9uZToKK21hY3JvIG5vdGlmeVdyaXRlKHNldCwgc2xvdykKKyAgICBiYm5lcSBX
YXRjaHBvaW50U2V0OjptX3N0YXRlW3NldF0sIElzSW52YWxpZGF0ZWQsIHNsb3cKIGVuZAogCiBf
bGxpbnRfb3Bfbm90OgpAQCAtMTk0NCwzOSArMTk0MSwzOSBAQCBfbGxpbnRfb3BfcmVzb2x2ZV9z
Y29wZToKICNyR2xvYmFsUHJvcGVydHk6CiAgICAgYmluZXEgdDAsIEdsb2JhbFByb3BlcnR5LCAu
ckdsb2JhbFZhcgogICAgIGdldEdsb2JhbE9iamVjdCgxKQotICAgIGRpc3BhdGNoKDcpCisgICAg
ZGlzcGF0Y2goNikKIAogLnJHbG9iYWxWYXI6CiAgICAgYmluZXEgdDAsIEdsb2JhbFZhciwgLnJD
bG9zdXJlVmFyCiAgICAgZ2V0R2xvYmFsT2JqZWN0KDEpCi0gICAgZGlzcGF0Y2goNykKKyAgICBk
aXNwYXRjaCg2KQogCiAuckNsb3N1cmVWYXI6CiAgICAgYmluZXEgdDAsIENsb3N1cmVWYXIsIC5y
R2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzCiAgICAgcmVzb2x2ZVNjb3BlKCkK
LSAgICBkaXNwYXRjaCg3KQorICAgIGRpc3BhdGNoKDYpCiAKIC5yR2xvYmFsUHJvcGVydHlXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzOgogICAgIGJpbmVxIHQwLCBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJ
bmplY3Rpb25DaGVja3MsIC5yR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcwogICAgIHZh
ckluamVjdGlvbkNoZWNrKC5yRHluYW1pYykKICAgICBnZXRHbG9iYWxPYmplY3QoMSkKLSAgICBk
aXNwYXRjaCg3KQorICAgIGRpc3BhdGNoKDYpCiAKIC5yR2xvYmFsVmFyV2l0aFZhckluamVjdGlv
bkNoZWNrczoKICAgICBiaW5lcSB0MCwgR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywg
LnJDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcwogICAgIHZhckluamVjdGlvbkNoZWNr
KC5yRHluYW1pYykKICAgICBnZXRHbG9iYWxPYmplY3QoMSkKLSAgICBkaXNwYXRjaCg3KQorICAg
IGRpc3BhdGNoKDYpCiAKIC5yQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6CiAgICAg
YmluZXEgdDAsIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCAuckR5bmFtaWMKICAg
ICB2YXJJbmplY3Rpb25DaGVjayguckR5bmFtaWMpCiAgICAgcmVzb2x2ZVNjb3BlKCkKLSAgICBk
aXNwYXRjaCg3KQorICAgIGRpc3BhdGNoKDYpCiAKIC5yRHluYW1pYzoKICAgICBjYWxsU2xvd1Bh
dGgoX2xsaW50X3Nsb3dfcGF0aF9yZXNvbHZlX3Njb3BlKQotICAgIGRpc3BhdGNoKDcpCisgICAg
ZGlzcGF0Y2goNikKIAogCiBtYWNybyBsb2FkV2l0aFN0cnVjdHVyZUNoZWNrKG9wZXJhbmQsIHNs
b3dQYXRoKQpAQCAtMjA2OSw4ICsyMDY2LDggQEAgbWFjcm8gcHV0R2xvYmFsVmFyKCkKICAgICBs
b2FkaXNGcm9tSW5zdHJ1Y3Rpb24oMywgdDApCiAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZSh0
MCwgdDEpCiAgICAgbG9hZHBGcm9tSW5zdHJ1Y3Rpb24oNSwgdDIpCi0gICAgbm90aWZ5V3JpdGUo
dDIsIHQxLCB0MCwgLnBEeW5hbWljKQogICAgIGxvYWRwRnJvbUluc3RydWN0aW9uKDYsIHQwKQor
ICAgIG5vdGlmeVdyaXRlKHQyLCAucER5bmFtaWMpCiAgICAgc3RvcmVxIHQxLCBbdDBdCiBlbmQK
IApAQCAtMjA4Niw3ICsyMDgzLDcgQEAgbWFjcm8gcHV0TG9jYWxDbG9zdXJlVmFyKCkKICAgICBs
b2FkQ29uc3RhbnRPclZhcmlhYmxlKHQxLCB0MikKICAgICBsb2FkcEZyb21JbnN0cnVjdGlvbig1
LCB0MykKICAgICBidHB6IHQzLCAubm9WYXJpYWJsZVdhdGNocG9pbnRTZXQKLSAgICBub3RpZnlX
cml0ZSh0MywgdDIsIHQxLCAucER5bmFtaWMpCisgICAgbm90aWZ5V3JpdGUodDMsIC5wRHluYW1p
YykKIC5ub1ZhcmlhYmxlV2F0Y2hwb2ludFNldDoKICAgICBsb2FkaXNGcm9tSW5zdHJ1Y3Rpb24o
NiwgdDEpCiAgICAgc3RvcmVxIHQyLCBKU0Vudmlyb25tZW50UmVjb3JkX3ZhcmlhYmxlc1t0MCwg
dDEsIDhdCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnBy
ZXRlci5hc20KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xl
dmVsSW50ZXJwcmV0ZXIuYXNtCShyZXZpc2lvbiAxODIwNjkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20JKHdvcmtpbmcgY29weSkKQEAgLTky
MCwxMiArOTIwLDYgQEAgZW5kCiAKIAogIyBWYWx1ZS1yZXByZXNlbnRhdGlvbi1hZ25vc3RpYyBj
b2RlLgotX2xsaW50X29wX3RvdWNoX2VudHJ5OgotICAgIHRyYWNlRXhlY3V0aW9uKCkKLSAgICBj
YWxsU2xvd1BhdGgoX3Nsb3dfcGF0aF90b3VjaF9lbnRyeSkKLSAgICBkaXNwYXRjaCgxKQotCi0K
IF9sbGludF9vcF9jcmVhdGVfZGlyZWN0X2FyZ3VtZW50czoKICAgICB0cmFjZUV4ZWN1dGlvbigp
CiAgICAgY2FsbFNsb3dQYXRoKF9zbG93X3BhdGhfY3JlYXRlX2RpcmVjdF9hcmd1bWVudHMpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRo
cy5jcHAJKHJldmlzaW9uIDE4MjA2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0NvbW1vblNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwNiwxMyArMjA2LDYgQEAg
U0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2NvbnN0cnVjdF9hcml0eQogICAgIFJFVFVSTl9UV08o
MCwgc2V0dXBBcml0eUNoZWNrRGF0YSh2bSwgc2xvdHNUb0FkZCkpOwogfQogCi1TTE9XX1BBVEhf
REVDTChzbG93X3BhdGhfdG91Y2hfZW50cnkpCi17Ci0gICAgQkVHSU4oKTsKLSAgICBleGVjLT5j
b2RlQmxvY2soKS0+c3ltYm9sVGFibGUoKS0+bV9mdW5jdGlvbkVudGVyZWRPbmNlLnRvdWNoKCJG
dW5jdGlvbiAocmUpZW50ZXJlZCIpOwotICAgIEVORCgpOwotfQotCiBTTE9XX1BBVEhfREVDTChz
bG93X3BhdGhfY3JlYXRlX2RpcmVjdF9hcmd1bWVudHMpCiB7CiAgICAgQkVHSU4oKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5oCShy
ZXZpc2lvbiAxODIwNjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25T
bG93UGF0aHMuaAkod29ya2luZyBjb3B5KQpAQCAtMTgxLDcgKzE4MSw2IEBAIFNMT1dfUEFUSF9E
RUNMKG5hbWUpIFdURl9JTlRFUk5BTAogICAgIAogU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3df
cGF0aF9jYWxsX2FyaXR5Q2hlY2spOwogU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9j
b25zdHJ1Y3RfYXJpdHlDaGVjayk7Ci1TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX3Rv
dWNoX2VudHJ5KTsKIFNMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfY3JlYXRlX2RpcmVj
dF9hcmd1bWVudHMpOwogU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9jcmVhdGVfc2Nv
cGVkX2FyZ3VtZW50cyk7CiBTTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX2NyZWF0ZV9v
dXRfb2ZfYmFuZF9hcmd1bWVudHMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRXhlY3V0YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRXhlY3V0YWJsZS5jcHAJKHJldmlzaW9uIDE4MjA2OSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NjcsNiAr
NTY3LDEyIEBAIHZvaWQgRnVuY3Rpb25FeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuKEoKICAgICBp
ZiAodGhpc09iamVjdC0+bV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QpCiAgICAgICAgIHRoaXNPYmpl
Y3QtPm1fY29kZUJsb2NrRm9yQ29uc3RydWN0LT52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKICAg
ICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV91bmxpbmtlZEV4ZWN1dGFibGUpOworICAg
IAorICAgIGlmICh0aGlzT2JqZWN0LT5tX2Z1bmN0aW9uUmVhbGxvY2F0aW9uV2F0Y2hwb2ludFNl
dC5uZWVkVG9GaW5hbGl6ZSgpKSB7CisgICAgICAgIGlmICghdGhpc09iamVjdC0+bV93YXRjaHBv
aW50Q2xlYW51cCkKKyAgICAgICAgICAgIHRoaXNPYmplY3QtPm1fd2F0Y2hwb2ludENsZWFudXAg
PSBzdGQ6Om1ha2VfdW5pcXVlPFdhdGNocG9pbnRDbGVhbnVwPih0aGlzT2JqZWN0KTsKKyAgICAg
ICAgdmlzaXRvci5hZGRVbmNvbmRpdGlvbmFsRmluYWxpemVyKHRoaXNPYmplY3QtPm1fd2F0Y2hw
b2ludENsZWFudXAuZ2V0KCkpOworICAgIH0KIH0KIAogU3ltYm9sVGFibGUqIEZ1bmN0aW9uRXhl
Y3V0YWJsZTo6c3ltYm9sVGFibGUoQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5kKQpAQCAtNjIy
LDYgKzYyOCwyMSBAQCBGdW5jdGlvbkV4ZWN1dGFibGUqIEZ1bmN0aW9uRXhlY3V0YWJsZTo6CiAg
ICAgcmV0dXJuIHVubGlua2VkRXhlY3V0YWJsZS0+bGluayhleGVjLnZtKCksIHNvdXJjZSwgb3Zl
cnJpZGVMaW5lTnVtYmVyKTsKIH0KIAorRnVuY3Rpb25FeGVjdXRhYmxlOjpXYXRjaHBvaW50Q2xl
YW51cDo6V2F0Y2hwb2ludENsZWFudXAoRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlKQor
ICAgIDogbV9leGVjdXRhYmxlKGV4ZWN1dGFibGUpCit7Cit9CisKK0Z1bmN0aW9uRXhlY3V0YWJs
ZTo6V2F0Y2hwb2ludENsZWFudXA6On5XYXRjaHBvaW50Q2xlYW51cCgpCit7Cit9CisKK3ZvaWQg
RnVuY3Rpb25FeGVjdXRhYmxlOjpXYXRjaHBvaW50Q2xlYW51cDo6ZmluYWxpemVVbmNvbmRpdGlv
bmFsbHkoKQoreworICAgIG1fZXhlY3V0YWJsZS0+ZnVuY3Rpb25SZWFsbG9jYXRpb25XYXRjaHBv
aW50U2V0KCkuZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoCisgICAgICAgIFN0cmluZ0ZpcmVEZXRh
aWwoIkZ1bmN0aW9uRXhlY3V0YWJsZSBjbGVhbi11cCBkdXJpbmcgR0MiKSk7Cit9CisKIHZvaWQg
RXhlY3V0YWJsZUJhc2U6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKIHsKICAgICBFeGVj
dXRhYmxlQmFzZSogcmVhbFRoaXMgPSBjb25zdF9jYXN0PEV4ZWN1dGFibGVCYXNlKj4odGhpcyk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCShyZXZp
c2lvbiAxODIwNjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDggKzMzLDYgQEAKICNpbmNsdWRlICJDb21waWxhdGlv
blJlc3VsdC5oIgogI2luY2x1ZGUgIkRGR1BsYW4uaCIKICNpbmNsdWRlICJIYW5kbGVySW5mby5o
IgotI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKLSNpbmNsdWRlICJJbnRlcnByZXRlci5oIgogI2lu
Y2x1ZGUgIkpJVENvZGUuaCIKICNpbmNsdWRlICJKU0dsb2JhbE9iamVjdC5oIgogI2luY2x1ZGUg
IlJlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZS5oIgpAQCAtNDIsNiArNDAsNyBAQAogI2luY2x1ZGUg
IlNvdXJjZUNvZGUuaCIKICNpbmNsdWRlICJUeXBlU2V0LmgiCiAjaW5jbHVkZSAiVW5saW5rZWRD
b2RlQmxvY2suaCIKKyNpbmNsdWRlICJWYXJpYWJsZVdhdGNocG9pbnRTZXQuaCIKIAogbmFtZXNw
YWNlIEpTQyB7CiAKQEAgLTY0OSw2ICs2NDgsOCBAQCBwdWJsaWM6CiAgICAgdm9pZCB1bmxpbmtD
YWxscygpOwogCiAgICAgdm9pZCBjbGVhckNvZGUoKTsKKyAgICAKKyAgICBWYXJpYWJsZVdhdGNo
cG9pbnRTZXQmIGZ1bmN0aW9uUmVhbGxvY2F0aW9uV2F0Y2hwb2ludFNldCgpIHsgcmV0dXJuIG1f
ZnVuY3Rpb25SZWFsbG9jYXRpb25XYXRjaHBvaW50U2V0OyB9CiAKIHByaXZhdGU6CiAgICAgRnVu
Y3Rpb25FeGVjdXRhYmxlKApAQCAtNjY3LDEyICs2NjgsMjYgQEAgcHJpdmF0ZToKICAgICB9CiAK
ICAgICBmcmllbmQgY2xhc3MgU2NyaXB0RXhlY3V0YWJsZTsKKyAgICAKKyAgICBjbGFzcyBXYXRj
aHBvaW50Q2xlYW51cCA6IHB1YmxpYyBVbmNvbmRpdGlvbmFsRmluYWxpemVyIHsKKyAgICBwdWJs
aWM6CisgICAgICAgIFdhdGNocG9pbnRDbGVhbnVwKEZ1bmN0aW9uRXhlY3V0YWJsZSopOworICAg
ICAgICB2aXJ0dWFsIH5XYXRjaHBvaW50Q2xlYW51cCgpOworICAgICAgICAKKyAgICBwcm90ZWN0
ZWQ6CisgICAgICAgIHZvaWQgZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoKSBvdmVycmlkZTsKKyAg
ICAgICAgCisgICAgcHJpdmF0ZToKKyAgICAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBtX2V4ZWN1
dGFibGU7CisgICAgfTsKIAogICAgIFdyaXRlQmFycmllcjxVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0
YWJsZT4gbV91bmxpbmtlZEV4ZWN1dGFibGU7CiAgICAgUmVmUHRyPEZ1bmN0aW9uQ29kZUJsb2Nr
PiBtX2NvZGVCbG9ja0ZvckNhbGw7CiAgICAgUmVmUHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiBtX2Nv
ZGVCbG9ja0ZvckNvbnN0cnVjdDsKICAgICBSZWZQdHI8VHlwZVNldD4gbV9yZXR1cm5TdGF0ZW1l
bnRUeXBlU2V0OwogICAgIHVuc2lnbmVkIG1fcGFyYW1ldGVyc1N0YXJ0T2Zmc2V0OworICAgIFZh
cmlhYmxlV2F0Y2hwb2ludFNldCBtX2Z1bmN0aW9uUmVhbGxvY2F0aW9uV2F0Y2hwb2ludFNldDsK
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2F0Y2hwb2ludENsZWFudXA+IG1fd2F0Y2hwb2ludENsZWFu
dXA7CiB9OwogCiBpbmxpbmUgdm9pZCBFeGVjdXRhYmxlQmFzZTo6Y2xlYXJDb2RlVmlydHVhbChF
eGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTQ0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0NJbmxpbmVzLmgJKHJldmlzaW9uIDE4MjA2OSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQ0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtNTEsNiArNTEs
NyBAQAogI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJTbG90VmlzaXRvcklubGlu
ZXMuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVJbmxpbmVzLmgiCisjaW5jbHVkZSAiVmFyaWFibGVX
YXRjaHBvaW50U2V0SW5saW5lcy5oIgogI2luY2x1ZGUgIldlYWtHQ01hcElubGluZXMuaCIKIAog
I2VuZGlmIC8vIEpTQ0lubGluZXNfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNGdW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNGdW5jdGlvbi5jcHAJKHJldmlzaW9uIDE4MjA2OSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OSw2ICs1
OSwxNCBAQCBib29sIEpTRnVuY3Rpb246OmlzSG9zdEZ1bmN0aW9uTm9uSW5saW5lCiAgICAgcmV0
dXJuIGlzSG9zdEZ1bmN0aW9uKCk7CiB9CiAKK0pTRnVuY3Rpb24qIEpTRnVuY3Rpb246OmNyZWF0
ZShWTSYgdm0sIEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSwgSlNTY29wZSogc2NvcGUp
Cit7CisgICAgSlNGdW5jdGlvbiogcmVzdWx0ID0gY3JlYXRlSW1wbCh2bSwgZXhlY3V0YWJsZSwg
c2NvcGUpOworICAgIGV4ZWN1dGFibGUtPmZ1bmN0aW9uUmVhbGxvY2F0aW9uV2F0Y2hwb2ludFNl
dCgpLm5vdGlmeVdyaXRlKAorICAgICAgICB2bSwgZXhlY3V0YWJsZSwgcmVzdWx0LCAiQWxsb2Nh
dGluZyBhIGZ1bmN0aW9uIik7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogSlNGdW5jdGlvbiog
SlNGdW5jdGlvbjo6Y3JlYXRlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwg
aW50IGxlbmd0aCwgY29uc3QgU3RyaW5nJiBuYW1lLCBOYXRpdmVGdW5jdGlvbiBuYXRpdmVGdW5j
dGlvbiwgSW50cmluc2ljIGludHJpbnNpYywgTmF0aXZlRnVuY3Rpb24gbmF0aXZlQ29uc3RydWN0
b3IpCiB7CiAgICAgTmF0aXZlRXhlY3V0YWJsZSogZXhlY3V0YWJsZTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgJKHJldmlzaW9uIDE4MjA2OSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaAkod29ya2luZyBjb3B5
KQpAQCAtMjQsNiArMjQsNyBAQAogI2lmbmRlZiBKU0Z1bmN0aW9uX2gKICNkZWZpbmUgSlNGdW5j
dGlvbl9oCiAKKyNpbmNsdWRlICJFeGVjdXRhYmxlLmgiCiAjaW5jbHVkZSAiSW50ZXJuYWxGdW5j
dGlvbi5oIgogI2luY2x1ZGUgIkpTQ2FsbGVlLmgiCiAjaW5jbHVkZSAiSlNTY29wZS5oIgpAQCAt
NTksMTUgKzYwLDE1IEBAIHB1YmxpYzoKICAgICB0eXBlZGVmIEpTQ2FsbGVlIEJhc2U7CiAKICAg
ICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgSlNGdW5jdGlvbiogY3JlYXRlKFZNJiwgSlNHbG9i
YWxPYmplY3QqLCBpbnQgbGVuZ3RoLCBjb25zdCBTdHJpbmcmIG5hbWUsIE5hdGl2ZUZ1bmN0aW9u
LCBJbnRyaW5zaWMgPSBOb0ludHJpbnNpYywgTmF0aXZlRnVuY3Rpb24gbmF0aXZlQ29uc3RydWN0
b3IgPSBjYWxsSG9zdEZ1bmN0aW9uQXNDb25zdHJ1Y3Rvcik7Ci0KLSAgICBzdGF0aWMgSlNGdW5j
dGlvbiogY3JlYXRlKFZNJiB2bSwgRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlLCBKU1Nj
b3BlKiBzY29wZSkKKyAgICAKKyAgICBzdGF0aWMgSlNGdW5jdGlvbiogY3JlYXRlV2l0aEludmFs
aWRhdGVkUmVhbGxvY2F0aW9uV2F0Y2hwb2ludChWTSYgdm0sIEZ1bmN0aW9uRXhlY3V0YWJsZSog
ZXhlY3V0YWJsZSwgSlNTY29wZSogc2NvcGUpCiAgICAgewotICAgICAgICBKU0Z1bmN0aW9uKiBm
dW5jdGlvbiA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTRnVuY3Rpb24+KHZtLmhlYXAp
KSBKU0Z1bmN0aW9uKHZtLCBleGVjdXRhYmxlLCBzY29wZSk7Ci0gICAgICAgIEFTU0VSVChmdW5j
dGlvbi0+c3RydWN0dXJlKCktPmdsb2JhbE9iamVjdCgpKTsKLSAgICAgICAgZnVuY3Rpb24tPmZp
bmlzaENyZWF0aW9uKHZtKTsKLSAgICAgICAgcmV0dXJuIGZ1bmN0aW9uOworICAgICAgICBBU1NF
UlQoZXhlY3V0YWJsZS0+ZnVuY3Rpb25SZWFsbG9jYXRpb25XYXRjaHBvaW50U2V0KCkuaGFzQmVl
bkludmFsaWRhdGVkKCkpOworICAgICAgICByZXR1cm4gY3JlYXRlSW1wbCh2bSwgZXhlY3V0YWJs
ZSwgc2NvcGUpOwogICAgIH0KIAorICAgIHN0YXRpYyBKU0Z1bmN0aW9uKiBjcmVhdGUoVk0mIHZt
LCBGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUsIEpTU2NvcGUqIHNjb3BlKTsKKwogICAg
IHN0YXRpYyBKU0Z1bmN0aW9uKiBjcmVhdGVCdWlsdGluRnVuY3Rpb24oVk0mLCBGdW5jdGlvbkV4
ZWN1dGFibGUqLCBKU0dsb2JhbE9iamVjdCopOwogCiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShK
U0NlbGwqKTsKQEAgLTE0OSw2ICsxNTAsMTQgQEAgcHJvdGVjdGVkOgogICAgIHN0YXRpYyB2b2lk
IHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKIAogcHJpdmF0ZToKKyAgICBz
dGF0aWMgSlNGdW5jdGlvbiogY3JlYXRlSW1wbChWTSYgdm0sIEZ1bmN0aW9uRXhlY3V0YWJsZSog
ZXhlY3V0YWJsZSwgSlNTY29wZSogc2NvcGUpCisgICAgeworICAgICAgICBKU0Z1bmN0aW9uKiBm
dW5jdGlvbiA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTRnVuY3Rpb24+KHZtLmhlYXAp
KSBKU0Z1bmN0aW9uKHZtLCBleGVjdXRhYmxlLCBzY29wZSk7CisgICAgICAgIEFTU0VSVChmdW5j
dGlvbi0+c3RydWN0dXJlKCktPmdsb2JhbE9iamVjdCgpKTsKKyAgICAgICAgZnVuY3Rpb24tPmZp
bmlzaENyZWF0aW9uKHZtKTsKKyAgICAgICAgcmV0dXJuIGZ1bmN0aW9uOworICAgIH0KKyAgICAK
ICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogCiAgICAgc3RhdGljIEVu
Y29kZWRKU1ZhbHVlIGFyZ3VtZW50c0dldHRlcihFeGVjU3RhdGUqLCBKU09iamVjdCosIEVuY29k
ZWRKU1ZhbHVlLCBQcm9wZXJ0eU5hbWUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkocmV2aXNpb24gMTgyMDY5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMjUsNiArMTI1LDcgQEAKICNpbmNsdWRlICJTeW1ib2xDb25zdHJ1Y3Rvci5oIgog
I2luY2x1ZGUgIlN5bWJvbFByb3RvdHlwZS5oIgogI2luY2x1ZGUgIlZhcmlhYmxlV2F0Y2hwb2lu
dFNldElubGluZXMuaCIKKyNpbmNsdWRlICJWYXJpYWJsZVdyaXRlRmlyZURldGFpbC5oIgogI2lu
Y2x1ZGUgIldlYWtHQ01hcElubGluZXMuaCIKICNpbmNsdWRlICJXZWFrTWFwQ29uc3RydWN0b3Iu
aCIKICNpbmNsdWRlICJXZWFrTWFwUHJvdG90eXBlLmgiCkBAIC01MTAsNyArNTExLDcgQEAgdm9p
ZCBKU0dsb2JhbE9iamVjdDo6YWRkRnVuY3Rpb24oRXhlY1N0YQogICAgIE5ld0dsb2JhbFZhciB2
YXIgPSBhZGRHbG9iYWxWYXIocHJvcGVydHlOYW1lLCBJc1ZhcmlhYmxlKTsKICAgICB2YXJpYWJs
ZUF0KHZhci5vZmZzZXQpLnNldChleGVjLT52bSgpLCB0aGlzLCB2YWx1ZSk7CiAgICAgaWYgKHZh
ci5zZXQpCi0gICAgICAgIHZhci5zZXQtPm5vdGlmeVdyaXRlKHZtLCB2YWx1ZSwgVmFyaWFibGVX
cml0ZUZpcmVEZXRhaWwodGhpcywgcHJvcGVydHlOYW1lKSk7CisgICAgICAgIHZhci5zZXQtPnRv
dWNoKFZhcmlhYmxlV3JpdGVGaXJlRGV0YWlsKHRoaXMsIHByb3BlcnR5TmFtZSkpOwogfQogCiBz
dGF0aWMgaW5saW5lIEpTT2JqZWN0KiBsYXN0SW5Qcm90b3R5cGVDaGFpbihKU09iamVjdCogb2Jq
ZWN0KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3Qu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9i
amVjdC5oCShyZXZpc2lvbiAxODIwNjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0dsb2JhbE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMzIsNyArMzMyLDcgQEAgcHJv
dGVjdGVkOgogCiAgICAgc3RydWN0IE5ld0dsb2JhbFZhciB7CiAgICAgICAgIFNjb3BlT2Zmc2V0
IG9mZnNldDsKLSAgICAgICAgVmFyaWFibGVXYXRjaHBvaW50U2V0KiBzZXQ7CisgICAgICAgIFdh
dGNocG9pbnRTZXQqIHNldDsKICAgICB9OwogICAgIE5ld0dsb2JhbFZhciBhZGRHbG9iYWxWYXIo
Y29uc3QgSWRlbnRpZmllciYsIENvbnN0YW50TW9kZSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTTGV4aWNhbEVudmlyb25tZW50LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xleGljYWxFbnZpcm9ubWVudC5jcHAJKHJl
dmlzaW9uIDE4MjA2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTGV4aWNh
bEVudmlyb25tZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzcsNiArNzcsNyBAQCBpbmxpbmUg
Ym9vbCBKU0xleGljYWxFbnZpcm9ubWVudDo6c3ltYm9sCiAgICAgQVNTRVJUKCFIZWFwOjpoZWFw
KHZhbHVlKSB8fCBIZWFwOjpoZWFwKHZhbHVlKSA9PSBIZWFwOjpoZWFwKHRoaXMpKTsKICAgICAK
ICAgICBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiByZWc7CisgICAgV2F0Y2hwb2ludFNldCog
c2V0OwogICAgIHsKICAgICAgICAgR0NTYWZlQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIoc3lt
Ym9sVGFibGUoKS0+bV9sb2NrLCBleGVjLT52bSgpLmhlYXApOwogICAgICAgICBTeW1ib2xUYWJs
ZTo6TWFwOjppdGVyYXRvciBpdGVyID0gc3ltYm9sVGFibGUoKS0+ZmluZChsb2NrZXIsIHByb3Bl
cnR5TmFtZS51aWQoKSk7CkBAIC05MiwxMSArOTMsMTEgQEAgaW5saW5lIGJvb2wgSlNMZXhpY2Fs
RW52aXJvbm1lbnQ6OnN5bWJvbAogICAgICAgICAvLyBEZWZlbmQgYWdhaW5zdCB0aGUgaW5zcGVj
dG9yIGFza2luZyBmb3IgYSB2YXIgYWZ0ZXIgaXQgaGFzIGJlZW4gb3B0aW1pemVkIG91dC4KICAg
ICAgICAgaWYgKCFpc1ZhbGlkKG9mZnNldCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgIGlmIChWYXJpYWJsZVdhdGNocG9pbnRTZXQqIHNldCA9IGl0ZXItPnZhbHVlLndhdGNo
cG9pbnRTZXQoKSkKLSAgICAgICAgICAgIHNldC0+aW52YWxpZGF0ZShWYXJpYWJsZVdyaXRlRmly
ZURldGFpbCh0aGlzLCBwcm9wZXJ0eU5hbWUpKTsgLy8gRG9uJ3QgbWVzcyBhcm91bmQgLSBpZiB3
ZSBoYWQgZm91bmQgdGhpcyBzdGF0aWNhbGx5LCB3ZSB3b3VsZCBoYXZlIGludmFsaWRhdGVkIGl0
LgorICAgICAgICBzZXQgPSBpdGVyLT52YWx1ZS53YXRjaHBvaW50U2V0KCk7CiAgICAgICAgIHJl
ZyA9ICZ2YXJpYWJsZUF0KG9mZnNldCk7CiAgICAgfQogICAgIHJlZy0+c2V0KHZtLCB0aGlzLCB2
YWx1ZSk7CisgICAgc2V0LT5pbnZhbGlkYXRlKFZhcmlhYmxlV3JpdGVGaXJlRGV0YWlsKHRoaXMs
IHByb3BlcnR5TmFtZSkpOyAvLyBEb24ndCBtZXNzIGFyb3VuZCAtIGlmIHdlIGhhZCBmb3VuZCB0
aGlzIHN0YXRpY2FsbHksIHdlIHdvdWxkIGhhdmUgaW52YWxpZGF0ZWQgaXQuCiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2NvcGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Njb3BlLmgJ
KHJldmlzaW9uIDE4MjA2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2Nv
cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQAogbmFtZXNwYWNlIEpTQyB7CiAK
IGNsYXNzIFNjb3BlQ2hhaW5JdGVyYXRvcjsKLWNsYXNzIFZhcmlhYmxlV2F0Y2hwb2ludFNldDsK
K2NsYXNzIFdhdGNocG9pbnRTZXQ7CiAKIGVudW0gUmVzb2x2ZU1vZGUgewogICAgIFRocm93SWZO
b3RGb3VuZCwKQEAgLTEwMiw3ICsxMDIsNyBAQCBpbmxpbmUgYm9vbCBuZWVkc1ZhckluamVjdGlv
bkNoZWNrcyhSZXNvCiB9CiAKIHN0cnVjdCBSZXNvbHZlT3AgewotICAgIFJlc29sdmVPcChSZXNv
bHZlVHlwZSB0eXBlLCBzaXplX3QgZGVwdGgsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0xleGlj
YWxFbnZpcm9ubWVudCogbGV4aWNhbEVudmlyb25tZW50LCBWYXJpYWJsZVdhdGNocG9pbnRTZXQq
IHdhdGNocG9pbnRTZXQsIHVpbnRwdHJfdCBvcGVyYW5kKQorICAgIFJlc29sdmVPcChSZXNvbHZl
VHlwZSB0eXBlLCBzaXplX3QgZGVwdGgsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0xleGljYWxF
bnZpcm9ubWVudCogbGV4aWNhbEVudmlyb25tZW50LCBXYXRjaHBvaW50U2V0KiB3YXRjaHBvaW50
U2V0LCB1aW50cHRyX3Qgb3BlcmFuZCkKICAgICAgICAgOiB0eXBlKHR5cGUpCiAgICAgICAgICwg
ZGVwdGgoZGVwdGgpCiAgICAgICAgICwgc3RydWN0dXJlKHN0cnVjdHVyZSkKQEAgLTExNiw3ICsx
MTYsNyBAQCBzdHJ1Y3QgUmVzb2x2ZU9wIHsKICAgICBzaXplX3QgZGVwdGg7CiAgICAgU3RydWN0
dXJlKiBzdHJ1Y3R1cmU7CiAgICAgSlNMZXhpY2FsRW52aXJvbm1lbnQqIGxleGljYWxFbnZpcm9u
bWVudDsKLSAgICBWYXJpYWJsZVdhdGNocG9pbnRTZXQqIHdhdGNocG9pbnRTZXQ7CisgICAgV2F0
Y2hwb2ludFNldCogd2F0Y2hwb2ludFNldDsKICAgICB1aW50cHRyX3Qgb3BlcmFuZDsKIH07CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3Qu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRh
YmxlT2JqZWN0LmgJKHJldmlzaW9uIDE4MjA2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIs
NyBAQAogI2luY2x1ZGUgIkpTU2NvcGUuaCIKICNpbmNsdWRlICJQcm9wZXJ0eURlc2NyaXB0b3Iu
aCIKICNpbmNsdWRlICJTeW1ib2xUYWJsZS5oIgotI2luY2x1ZGUgIlZhcmlhYmxlV2F0Y2hwb2lu
dFNldElubGluZXMuaCIKKyNpbmNsdWRlICJWYXJpYWJsZVdyaXRlRmlyZURldGFpbC5oIgogCiBu
YW1lc3BhY2UgSlNDIHsKIApAQCAtMTI2LDYgKzEyNiw3IEBAIGlubGluZSBib29sIHN5bWJvbFRh
YmxlUHV0KAogICAgIEFTU0VSVCghSGVhcDo6aGVhcCh2YWx1ZSkgfHwgSGVhcDo6aGVhcCh2YWx1
ZSkgPT0gSGVhcDo6aGVhcChvYmplY3QpKTsKICAgICAKICAgICBXcml0ZUJhcnJpZXJCYXNlPFVu
a25vd24+KiByZWc7CisgICAgV2F0Y2hwb2ludFNldCogc2V0OwogICAgIHsKICAgICAgICAgU3lt
Ym9sVGFibGUmIHN5bWJvbFRhYmxlID0gKm9iamVjdC0+c3ltYm9sVGFibGUoKTsKICAgICAgICAg
Ly8gRklYTUU6IFRoaXMgaXMgdmVyeSBzdXNwaWNpb3VzLiBXZSBzaG91bGRuJ3QgbmVlZCBhIEdD
LXNhZmUgbG9jayBoZXJlLgpAQCAtMTQyLDE3ICsxNDMsMTQgQEAgaW5saW5lIGJvb2wgc3ltYm9s
VGFibGVQdXQoCiAgICAgICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgU3RyaWN0TW9k
ZVJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwog
ICAgICAgICB9Ci0gICAgICAgIGlmIChWYXJpYWJsZVdhdGNocG9pbnRTZXQqIHNldCA9IGl0ZXIt
PnZhbHVlLndhdGNocG9pbnRTZXQoKSkgewotICAgICAgICAgICAgLy8gRklYTUU6IEl0J3Mgc3Ry
YW5nZSB0aGF0IHdlJ3JlIGRvaW5nIHRoaXMgd2hpbGUgaG9sZGluZyB0aGUgc3ltYm9sIHRhYmxl
J3MgbG9jay4KLSAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xMzQ2MDEKLSAgICAgICAgICAgIHNldC0+bm90aWZ5V3JpdGUodm0sIHZhbHVlLCBv
YmplY3QsIHByb3BlcnR5TmFtZSk7Ci0gICAgICAgIH0KKyAgICAgICAgc2V0ID0gaXRlci0+dmFs
dWUud2F0Y2hwb2ludFNldCgpOwogICAgICAgICByZWcgPSAmb2JqZWN0LT52YXJpYWJsZUF0KGZh
c3RFbnRyeS5zY29wZU9mZnNldCgpKTsKICAgICB9CiAgICAgLy8gSSdkIHByZWZlciB3ZSBub3Qg
aG9sZCBsb2NrIHdoaWxlIGV4ZWN1dGluZyBiYXJyaWVycywgc2luY2UgSSBwcmVmZXIgdG8gcmVz
ZXJ2ZQogICAgIC8vIHRoZSByaWdodCBmb3IgYmFycmllcnMgdG8gYmUgYWJsZSB0byB0cmlnZ2Vy
IEdDLiBBbmQgSSBkb24ndCB3YW50IHRvIGhvbGQgVk0KICAgICAvLyBsb2NrcyB3aGlsZSBHQydp
bmcuCiAgICAgcmVnLT5zZXQodm0sIG9iamVjdCwgdmFsdWUpOworICAgIHNldC0+dG91Y2goVmFy
aWFibGVXcml0ZUZpcmVEZXRhaWwob2JqZWN0LCBwcm9wZXJ0eU5hbWUpKTsKICAgICByZXR1cm4g
dHJ1ZTsKIH0KIApAQCAtMTY0LDYgKzE2Miw3IEBAIGlubGluZSBib29sIHN5bWJvbFRhYmxlUHV0
V2l0aEF0dHJpYnV0ZXMKICAgICBBU1NFUlQoIUhlYXA6OmhlYXAodmFsdWUpIHx8IEhlYXA6Omhl
YXAodmFsdWUpID09IEhlYXA6OmhlYXAob2JqZWN0KSk7CiAKICAgICBXcml0ZUJhcnJpZXJCYXNl
PFVua25vd24+KiByZWc7CisgICAgV2F0Y2hwb2ludFNldCogc2V0OwogICAgIHsKICAgICAgICAg
U3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlID0gKm9iamVjdC0+c3ltYm9sVGFibGUoKTsKICAgICAg
ICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIoc3ltYm9sVGFibGUubV9sb2NrKTsKQEAgLTE3
MiwxMiArMTcxLDEyIEBAIGlubGluZSBib29sIHN5bWJvbFRhYmxlUHV0V2l0aEF0dHJpYnV0ZXMK
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgU3ltYm9sVGFibGVFbnRyeSYgZW50
cnkgPSBpdGVyLT52YWx1ZTsKICAgICAgICAgQVNTRVJUKCFlbnRyeS5pc051bGwoKSk7Ci0gICAg
ICAgIGlmIChWYXJpYWJsZVdhdGNocG9pbnRTZXQqIHNldCA9IGVudHJ5LndhdGNocG9pbnRTZXQo
KSkKLSAgICAgICAgICAgIHNldC0+bm90aWZ5V3JpdGUodm0sIHZhbHVlLCBvYmplY3QsIHByb3Bl
cnR5TmFtZSk7CisgICAgICAgIHNldCA9IGVudHJ5LndhdGNocG9pbnRTZXQoKTsKICAgICAgICAg
ZW50cnkuc2V0QXR0cmlidXRlcyhhdHRyaWJ1dGVzKTsKICAgICAgICAgcmVnID0gJm9iamVjdC0+
dmFyaWFibGVBdChlbnRyeS5zY29wZU9mZnNldCgpKTsKICAgICB9CiAgICAgcmVnLT5zZXQodm0s
IG9iamVjdCwgdmFsdWUpOworICAgIHNldC0+dG91Y2goVmFyaWFibGVXcml0ZUZpcmVEZXRhaWwo
b2JqZWN0LCBwcm9wZXJ0eU5hbWUpKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHV0UHJvcGVydHlTbG90LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHV0UHJvcGVydHlTbG90LmgJKHJldmlz
aW9uIDE4MjA2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1B1dFByb3BlcnR5
U2xvdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAjZGVmaW5lIFB1dFByb3Bl
cnR5U2xvdF9oCiAKICNpbmNsdWRlICJKU0NKU1ZhbHVlLmgiCisjaW5jbHVkZSAiUHJvcGVydHlP
ZmZzZXQuaCIKIAogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5jcHAJKHJldmlzaW9uIDE4MjA2
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzMsNyArMzMsNiBAQAogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNp
bmNsdWRlICJTbG90VmlzaXRvcklubGluZXMuaCIKICNpbmNsdWRlICJUeXBlUHJvZmlsZXIuaCIK
LSNpbmNsdWRlICJWYXJpYWJsZVdhdGNocG9pbnRTZXRJbmxpbmVzLmgiCiAKIG5hbWVzcGFjZSBK
U0MgewogCkBAIC02MCwxMyArNTksNiBAQCB2b2lkIFN5bWJvbFRhYmxlRW50cnk6OmZyZWVGYXRF
bnRyeVNsb3coCiAgICAgZGVsZXRlIGZhdEVudHJ5KCk7CiB9CiAKLUpTVmFsdWUgU3ltYm9sVGFi
bGVFbnRyeTo6aW5mZXJyZWRWYWx1ZSgpCi17Ci0gICAgaWYgKCFpc0ZhdCgpKQotICAgICAgICBy
ZXR1cm4gSlNWYWx1ZSgpOwotICAgIHJldHVybiBmYXRFbnRyeSgpLT5tX3dhdGNocG9pbnRzLT5p
bmZlcnJlZFZhbHVlKCk7Ci19Ci0KIHZvaWQgU3ltYm9sVGFibGVFbnRyeTo6cHJlcGFyZVRvV2F0
Y2goU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlKQogewogICAgIGlmICghaXNXYXRjaGFibGUoKSkK
QEAgLTc0LDcgKzY2LDcgQEAgdm9pZCBTeW1ib2xUYWJsZUVudHJ5OjpwcmVwYXJlVG9XYXRjaChT
eQogICAgIEZhdEVudHJ5KiBlbnRyeSA9IGluZmxhdGUoKTsKICAgICBpZiAoZW50cnktPm1fd2F0
Y2hwb2ludHMpCiAgICAgICAgIHJldHVybjsKLSAgICBlbnRyeS0+bV93YXRjaHBvaW50cyA9IGFk
b3B0UmVmKG5ldyBWYXJpYWJsZVdhdGNocG9pbnRTZXQoKnN5bWJvbFRhYmxlKSk7CisgICAgZW50
cnktPm1fd2F0Y2hwb2ludHMgPSBhZG9wdFJlZihuZXcgV2F0Y2hwb2ludFNldChDbGVhcldhdGNo
cG9pbnQpKTsKIH0KIAogdm9pZCBTeW1ib2xUYWJsZUVudHJ5OjphZGRXYXRjaHBvaW50KFdhdGNo
cG9pbnQqIHdhdGNocG9pbnQpCkBAIC04MiwxNSArNzQsNiBAQCB2b2lkIFN5bWJvbFRhYmxlRW50
cnk6OmFkZFdhdGNocG9pbnQoV2F0CiAgICAgZmF0RW50cnkoKS0+bV93YXRjaHBvaW50cy0+YWRk
KHdhdGNocG9pbnQpOwogfQogCi12b2lkIFN5bWJvbFRhYmxlRW50cnk6Om5vdGlmeVdyaXRlU2xv
dyhWTSYgdm0sIEpTVmFsdWUgdmFsdWUsIGNvbnN0IEZpcmVEZXRhaWwmIGRldGFpbCkKLXsKLSAg
ICBWYXJpYWJsZVdhdGNocG9pbnRTZXQqIHdhdGNocG9pbnRzID0gZmF0RW50cnkoKS0+bV93YXRj
aHBvaW50cy5nZXQoKTsKLSAgICBpZiAoIXdhdGNocG9pbnRzKQotICAgICAgICByZXR1cm47Ci0g
ICAgCi0gICAgd2F0Y2hwb2ludHMtPm5vdGlmeVdyaXRlKHZtLCB2YWx1ZSwgZGV0YWlsKTsKLX0K
LQogU3ltYm9sVGFibGVFbnRyeTo6RmF0RW50cnkqIFN5bWJvbFRhYmxlRW50cnk6OmluZmxhdGVT
bG93KCkKIHsKICAgICBGYXRFbnRyeSogZW50cnkgPSBuZXcgRmF0RW50cnkobV9iaXRzKTsKQEAg
LTEwMSw3ICs4NCw2IEBAIFN5bWJvbFRhYmxlRW50cnk6OkZhdEVudHJ5KiBTeW1ib2xUYWJsZUUK
IFN5bWJvbFRhYmxlOjpTeW1ib2xUYWJsZShWTSYgdm0pCiAgICAgOiBKU0NlbGwodm0sIHZtLnN5
bWJvbFRhYmxlU3RydWN0dXJlLmdldCgpKQogICAgICwgbV91c2VzTm9uU3RyaWN0RXZhbChmYWxz
ZSkKLSAgICAsIG1fZnVuY3Rpb25FbnRlcmVkT25jZShDbGVhcldhdGNocG9pbnQpCiB7CiB9CiAK
QEAgLTExMywzNiArOTUsMTEgQEAgdm9pZCBTeW1ib2xUYWJsZTo6dmlzaXRDaGlsZHJlbihKU0Nl
bGwqIAogICAgIAogICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzU3ltYm9sVGFibGUtPm1fYXJndW1l
bnRzKTsKICAgICAKLSAgICBpZiAoIXRoaXNTeW1ib2xUYWJsZS0+bV93YXRjaHBvaW50Q2xlYW51
cCkgewotICAgICAgICB0aGlzU3ltYm9sVGFibGUtPm1fd2F0Y2hwb2ludENsZWFudXAgPQotICAg
ICAgICAgICAgc3RkOjptYWtlX3VuaXF1ZTxXYXRjaHBvaW50Q2xlYW51cD4odGhpc1N5bWJvbFRh
YmxlKTsKLSAgICB9Ci0gICAgCi0gICAgdmlzaXRvci5hZGRVbmNvbmRpdGlvbmFsRmluYWxpemVy
KHRoaXNTeW1ib2xUYWJsZS0+bV93YXRjaHBvaW50Q2xlYW51cC5nZXQoKSk7Ci0gICAgCiAgICAg
Ly8gU2F2ZSBzb21lIG1lbW9yeS4gVGhpcyBpcyBPKG4pIHRvIHJlYnVpbGQgYW5kIHdlIGRvIHNv
IG9uIHRoZSBmbHkuCiAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIodGhpc1N5bWJvbFRh
YmxlLT5tX2xvY2spOwogICAgIHRoaXNTeW1ib2xUYWJsZS0+bV9sb2NhbFRvRW50cnkgPSBudWxs
cHRyOwogfQogCi1TeW1ib2xUYWJsZTo6V2F0Y2hwb2ludENsZWFudXA6OldhdGNocG9pbnRDbGVh
bnVwKFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSkKLSAgICA6IG1fc3ltYm9sVGFibGUoc3ltYm9s
VGFibGUpCi17Ci19Ci0KLVN5bWJvbFRhYmxlOjpXYXRjaHBvaW50Q2xlYW51cDo6fldhdGNocG9p
bnRDbGVhbnVwKCkgeyB9Ci0KLXZvaWQgU3ltYm9sVGFibGU6OldhdGNocG9pbnRDbGVhbnVwOjpm
aW5hbGl6ZVVuY29uZGl0aW9uYWxseSgpCi17Ci0gICAgU3RyaW5nRmlyZURldGFpbCBkZXRhaWwo
IlN5bWJvbCB0YWJsZSBjbGVhbi11cCBkdXJpbmcgR0MiKTsKLSAgICBNYXA6Oml0ZXJhdG9yIGl0
ZXIgPSBtX3N5bWJvbFRhYmxlLT5tX21hcC5iZWdpbigpOwotICAgIE1hcDo6aXRlcmF0b3IgZW5k
ID0gbV9zeW1ib2xUYWJsZS0+bV9tYXAuZW5kKCk7Ci0gICAgZm9yICg7IGl0ZXIgIT0gZW5kOyAr
K2l0ZXIpIHsKLSAgICAgICAgaWYgKFZhcmlhYmxlV2F0Y2hwb2ludFNldCogc2V0ID0gaXRlci0+
dmFsdWUud2F0Y2hwb2ludFNldCgpKQotICAgICAgICAgICAgc2V0LT5maW5hbGl6ZVVuY29uZGl0
aW9uYWxseShkZXRhaWwpOwotICAgIH0KLX0KLQogY29uc3QgU3ltYm9sVGFibGU6OkxvY2FsVG9F
bnRyeVZlYyYgU3ltYm9sVGFibGU6OmxvY2FsVG9FbnRyeShjb25zdCBDb25jdXJyZW50SklUTG9j
a2VyJikKIHsKICAgICBpZiAoVU5MSUtFTFkoIW1fbG9jYWxUb0VudHJ5KSkgewpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5oCShyZXZpc2lvbiAxODIw
NjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0zNSwxMyArMzUsMTUgQEAKICNpbmNsdWRlICJTY29wZWRBcmd1bWVudHNU
YWJsZS5oIgogI2luY2x1ZGUgIlR5cGVMb2NhdGlvbi5oIgogI2luY2x1ZGUgIlZhck9mZnNldC5o
IgotI2luY2x1ZGUgIlZhcmlhYmxlV2F0Y2hwb2ludFNldC5oIgorI2luY2x1ZGUgIldhdGNocG9p
bnQuaCIKICNpbmNsdWRlIDxtZW1vcnk+CiAjaW5jbHVkZSA8d3RmL0hhc2hUcmFpdHMuaD4KICNp
bmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdJbXBsLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCitjbGFz
cyBTeW1ib2xUYWJsZTsKKwogc3RhdGljIEFMV0FZU19JTkxJTkUgaW50IG1pc3NpbmdTeW1ib2xN
YXJrZXIoKSB7IHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpOyB9CiAKIC8v
IFRoZSBiaXQgdHdpZGRsaW5nIGluIHRoaXMgY2xhc3MgYXNzdW1lcyB0aGF0IGV2ZXJ5IHJlZ2lz
dGVyIGluZGV4IGlzIGEKQEAgLTYzLDExICs2NSwxMSBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSBp
bnQgbWlzc2luZ1N5bWJvbE1hCiAvLyBjb3VudGVkIHBvaW50ZXIgdG8gYSBzaGFyZWQgV2F0Y2hw
b2ludFNldC4gVGh1cywgaW4tcGxhY2UgZWRpdHMgb2YgdGhlCiAvLyBXYXRjaHBvaW50U2V0IHdp
bGwgbWFuaWZlc3QgaW4gYWxsIGNvcGllcy4gSGVyZSdzIGEgcGljdHVyZToKIC8vCi0vLyBTeW1i
b2xUYWJsZUVudHJ5IC0tPiBGYXRFbnRyeSAtLT4gVmFyaWFibGVXYXRjaHBvaW50U2V0CisvLyBT
eW1ib2xUYWJsZUVudHJ5IC0tPiBGYXRFbnRyeSAtLT4gV2F0Y2hwb2ludFNldAogLy8KIC8vIElm
IHlvdSBtYWtlIGEgY29weSBvZiBhIFN5bWJvbFRhYmxlRW50cnksIHlvdSB3aWxsIGhhdmU6CiAv
LwotLy8gb3JpZ2luYWw6IFN5bWJvbFRhYmxlRW50cnkgLS0+IEZhdEVudHJ5IC0tPiBWYXJpYWJs
ZVdhdGNocG9pbnRTZXQKKy8vIG9yaWdpbmFsOiBTeW1ib2xUYWJsZUVudHJ5IC0tPiBGYXRFbnRy
eSAtLT4gV2F0Y2hwb2ludFNldAogLy8gY29weTogICAgIFN5bWJvbFRhYmxlRW50cnkgLS0+IEZh
dEVudHJ5IC0tLS0tXgogCiBzdHJ1Y3QgU3ltYm9sVGFibGVFbnRyeSB7CkBAIC0yNjAsMTAgKzI2
MiwxMCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBiaXRzKCkgJiBEb250RW51bUZsYWc7CiAg
ICAgfQogICAgIAotICAgIEpTVmFsdWUgaW5mZXJyZWRWYWx1ZSgpOwotCiAgICAgdm9pZCBkaXNh
YmxlV2F0Y2hpbmcoKQogICAgIHsKKyAgICAgICAgaWYgKFdhdGNocG9pbnRTZXQqIHNldCA9IHdh
dGNocG9pbnRTZXQoKSkKKyAgICAgICAgICAgIHNldC0+aW52YWxpZGF0ZSgiRGlzYWJsaW5nIHdh
dGNoaW5nIGluIHN5bWJvbCB0YWJsZSIpOwogICAgICAgICBpZiAodmFyT2Zmc2V0KCkuaXNTY29w
ZSgpKQogICAgICAgICAgICAgcGFjayh2YXJPZmZzZXQoKSwgZmFsc2UsIGlzUmVhZE9ubHkoKSwg
aXNEb250RW51bSgpKTsKICAgICB9CkBAIC0yNzIsMjAgKzI3NCwxMyBAQCBwdWJsaWM6CiAgICAg
CiAgICAgdm9pZCBhZGRXYXRjaHBvaW50KFdhdGNocG9pbnQqKTsKICAgICAKLSAgICBWYXJpYWJs
ZVdhdGNocG9pbnRTZXQqIHdhdGNocG9pbnRTZXQoKQorICAgIFdhdGNocG9pbnRTZXQqIHdhdGNo
cG9pbnRTZXQoKQogICAgIHsKICAgICAgICAgaWYgKCFpc0ZhdCgpKQogICAgICAgICAgICAgcmV0
dXJuIDA7CiAgICAgICAgIHJldHVybiBmYXRFbnRyeSgpLT5tX3dhdGNocG9pbnRzLmdldCgpOwog
ICAgIH0KICAgICAKLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgbm90aWZ5V3JpdGUoVk0mIHZtLCBK
U1ZhbHVlIHZhbHVlLCBjb25zdCBGaXJlRGV0YWlsJiBkZXRhaWwpCi0gICAgewotICAgICAgICBp
ZiAoTElLRUxZKCFpc0ZhdCgpKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbm90aWZ5
V3JpdGVTbG93KHZtLCB2YWx1ZSwgZGV0YWlsKTsKLSAgICB9Ci0gICAgCiBwcml2YXRlOgogICAg
IHN0YXRpYyBjb25zdCBpbnRwdHJfdCBTbGltRmxhZyA9IDB4MTsKICAgICBzdGF0aWMgY29uc3Qg
aW50cHRyX3QgUmVhZE9ubHlGbGFnID0gMHgyOwpAQCAtMzA4LDcgKzMwMyw3IEBAIHByaXZhdGU6
CiAgICAgICAgIAogICAgICAgICBpbnRwdHJfdCBtX2JpdHM7IC8vIGFsd2F5cyBoYXMgRmF0Rmxh
ZyBzZXQgYW5kIGV4YWN0bHkgbWF0Y2hlcyB3aGF0IHRoZSBiaXRzIHdvdWxkIGhhdmUgYmVlbiBp
ZiB0aGlzIHdhc24ndCBmYXQuCiAgICAgICAgIAotICAgICAgICBSZWZQdHI8VmFyaWFibGVXYXRj
aHBvaW50U2V0PiBtX3dhdGNocG9pbnRzOworICAgICAgICBSZWZQdHI8V2F0Y2hwb2ludFNldD4g
bV93YXRjaHBvaW50czsKICAgICB9OwogICAgIAogICAgIFN5bWJvbFRhYmxlRW50cnkmIGNvcHlT
bG93KGNvbnN0IFN5bWJvbFRhYmxlRW50cnkmKTsKQEAgLTY0NiwxOCArNjQxLDYgQEAgcHJvdGVj
dGVkOgogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IFN0cnVjdHVy
ZUlzSW1tb3J0YWwgfCBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKIAogcHJpdmF0ZToKLSAgICBjbGFz
cyBXYXRjaHBvaW50Q2xlYW51cCA6IHB1YmxpYyBVbmNvbmRpdGlvbmFsRmluYWxpemVyIHsKLSAg
ICBwdWJsaWM6Ci0gICAgICAgIFdhdGNocG9pbnRDbGVhbnVwKFN5bWJvbFRhYmxlKik7Ci0gICAg
ICAgIHZpcnR1YWwgfldhdGNocG9pbnRDbGVhbnVwKCk7Ci0gICAgICAgIAotICAgIHByb3RlY3Rl
ZDoKLSAgICAgICAgdmlydHVhbCB2b2lkIGZpbmFsaXplVW5jb25kaXRpb25hbGx5KCkgb3ZlcnJp
ZGU7Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBTeW1ib2xUYWJsZSogbV9zeW1ib2xUYWJsZTsK
LSAgICB9OwotICAgIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIFN5bWJvbFRhYmxlKFZNJik7CiAg
ICAgflN5bWJvbFRhYmxlKCk7CiAKQEAgLTY3NSwxMiArNjU4LDkgQEAgcHJpdmF0ZToKICAgICAK
ICAgICBXcml0ZUJhcnJpZXI8U2NvcGVkQXJndW1lbnRzVGFibGU+IG1fYXJndW1lbnRzOwogICAg
IAotICAgIHN0ZDo6dW5pcXVlX3B0cjxXYXRjaHBvaW50Q2xlYW51cD4gbV93YXRjaHBvaW50Q2xl
YW51cDsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8TG9jYWxUb0VudHJ5VmVjPiBtX2xvY2FsVG9FbnRy
eTsKIAogcHVibGljOgotICAgIElubGluZVdhdGNocG9pbnRTZXQgbV9mdW5jdGlvbkVudGVyZWRP
bmNlOwotICAgIAogICAgIG11dGFibGUgQ29uY3VycmVudEpJVExvY2sgbV9sb2NrOwogfTsKIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZVByb2ZpbGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlUHJvZmlsZXIuY3Bw
CShyZXZpc2lvbiAxODIwNjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBl
UHJvZmlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbmNsdWRl
ICJJbnNwZWN0b3JQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlICJUeXBlTG9jYXRpb24uaCIK
KyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKIG5hbWVzcGFjZSBKU0Mgewog
Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>249840</attachid>
            <date>2015-03-31 12:16:56 -0700</date>
            <delta_ts>2015-03-31 13:06:26 -0700</delta_ts>
            <desc>all good</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>118115</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTgyMTkxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5NyBA
QAorMjAxNS0wMy0zMSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEpTQyBzaG91bGQgZGV0ZWN0IHNpbmdsZXRvbiBmdW5jdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MzIzMgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgVGhpcyBzdGFydGVkIG91dCBh
cyBhbiBhdHRlbXB0IHRvIG1ha2UgY29uc3RydWN0b3JzIGZhc3RlciBieSBkZXRlY3Rpbmcgd2hl
biBhIGNvbnN0cnVjdG9yIGlzIGEKKyAgICAgICAgc2luZ2xldG9uLiBUaGUgaWRlYSBpcyB0aGF0
IGVhY2ggRnVuY3Rpb25FeGVjdXRhYmxlIGhhcyBhIFZhcmlhYmxlV2F0Y2hwb2ludFNldCAtIGEg
d2F0Y2hwb2ludAorICAgICAgICBhbG9uZyB3aXRoIGFuIGluZmVycmVkIHZhbHVlIC0gdGhhdCBk
ZXRlY3RzIGlmIG9ubHkgb25lIEpTRnVuY3Rpb24gaGFzIGJlZW4gYWxsb2NhdGVkIGZvciB0aGF0
CisgICAgICAgIGV4ZWN1dGFibGUsIGFuZCBpZiBzbywgd2hhdCB0aGF0IEpTRnVuY3Rpb24gaXMu
IFRoZW4sIGluc2lkZSB0aGUgY29kZSBmb3IgdGhlIEZ1bmN0aW9uRXhlY3V0YWJsZSwKKyAgICAg
ICAgaWYgdGhlIHdhdGNocG9pbnQgc2V0IGhhcyBhbiBpbmZlcnJlZCB2YWx1ZSAoaS5lLiBpdCdz
IGJlZW4gaW5pdGlhbGl6ZWQgYW5kIGl0IGlzIHN0aWxsIHZhbGlkKSwKKyAgICAgICAgd2UgY2Fu
IGNvbnN0YW50LWZvbGQgR2V0Q2FsbGVlLgorICAgICAgICAKKyAgICAgICAgVW5mb3J0dW5hdGVs
eSwgY29uc3RydWN0b3JzIGRvbid0IHVzZSBHZXRDYWxsZWUgYW55bW9yZSwgc28gdGhhdCBkaWRu
J3QgcGFuIG91dC4gQnV0IGluIHRoZQorICAgICAgICBwcm9jZXNzIEkgcmVhbGl6ZWQgdGhyZWUg
dGhpbmdzOgorICAgICAgICAKKyAgICAgICAgLSBUaGlzIGFsbG93cyB1cyB0byBjb21wbGV0ZWx5
IGVsaW1pbmF0ZSB0aGUgR2V0Q2FsbGVlL0dldFNjb3BlIHNlcXVlbmNlIHRoYXQgd2Ugc3RpbGwg
c29tZXRpbWVzCisgICAgICAgICAgaGFkIGV2ZW4gaW4gY29kZSB3aGVyZSBvdXIgc2luZ2xldG9u
LWNsb3N1cmUgZGV0ZWN0aW9uIHdvcmtlZC4gVGhhdCdzIGJlY2F1c2Ugc2luZ2xldG9uLWNsb3N1
cmUKKyAgICAgICAgICBpbmZlcmVuY2Ugd29ya2VkIGF0IHRoZSBvcF9yZXNvbHZlX3Njb3BlLCBh
bmQgdGhhdCBvcF9yZXNvbHZlX3Njb3BlIHN0aWxsIG5lZWRlZCB0byBrZWVwIGFsaXZlCisgICAg
ICAgICAgdGhlIGluY29taW5nIHNjb3BlIGluIGNhc2Ugd2UgT1NSIGV4aXQuIEJ1dCBieSBjb25z
dGFudC1mb2xkaW5nIEdldENhbGxlZSwgdGhhdCBzZXF1ZW5jZQorICAgICAgICAgIGRpc2FwcGVh
cnMuIE9TUiBleGl0IGNhbiByZW1hdGVyaWFsaXplIHRoZSBjYWxsZWUgb3IgdGhlIHNjb3BlIGJ5
IGp1c3Qga25vd2luZyB0aGVpciBjb25zdGFudAorICAgICAgICAgIHZhbHVlcy4KKyAgICAgICAg
CisgICAgICAgIC0gVGhpcyBhbGxvd3MgdXMgdG8gZWxpbWluYXRlIHRoZSBmdW5jdGlvbiByZWVu
dHJ5IHdhdGNocG9pbnQuIFRoYXQgd2F0Y2hwb2ludCBpbmZlcnJlZCBzaW5nbGV0b24KKyAgICAg
ICAgICBjbG9zdXJlcy4gQnV0IHdlIGRvbid0IG5lZWQgdG8gaW5mZXIgc2luZ2xldG9uIGNsb3N1
cmVzLCBpZiB3ZSBhcmUgaW5mZXJyaW5nIHNpbmdsZXRvbiBjYWxsZWVzLgorICAgICAgICAgIFNv
LCB0aGF0IGtpbGxzIGEgYnVuY2ggb2YgY29kZS4KKyAgICAgICAgCisgICAgICAgIC0gVGhpcyBh
bGxvd3MgdXMgdG8gdXNlIGEgbm9ybWFsIFdhdGNocG9pbnRTZXQsIGluc3RlYWQgb2YgYSBWYXJp
YWJsZVdhdGNocG9pbnRTZXQsIGZvciBpbmZlcnJpbmcKKyAgICAgICAgICBjb25zdGFudCB2YWx1
ZXMgaW4gc2NvcGVzLiBQcmV2aW91c2x5IHdoZW4gdGhlIERGRyBpbmZlcnJlZCB0aGF0IGEgY2xv
c3VyZSB2YXJpYWJsZSB3YXMKKyAgICAgICAgICBjb25zdGFudCwgaXQgd291bGRuJ3Qga25vdyB3
aGljaCBjbG9zdXJlIHRoYXQgdmFyaWFibGUgd2FzIGluIGFuZCBzbyBpdCBjb3VsZG4ndCBqdXN0
IGxvYWQgdGhhdAorICAgICAgICAgIHZhbHVlLiBCdXQgbm93IHdlIGFyZSBmaXJzdCBpbmZlcnJp
bmcgdGhhdCB0aGUgZnVuY3Rpb24gaXMgYSBzaW5nbGV0b24sIHdoaWNoIG1lYW5zIHRoYXQgd2UK
KyAgICAgICAgICBrbm93IGV4YWN0bHkgd2hhdCBzY29wZSBpdCBwb2ludHMgdG8sIGFuZCB3ZSBj
YW4gbG9hZCB0aGUgdmFsdWUgZnJvbSB0aGUgc2NvcGUuIFVzaW5nIGEKKyAgICAgICAgICBXYXRj
aHBvaW50U2V0IGluc3RlYWQgb2YgYSBWYXJpYWJsZVdhdGNocG9pbnRTZXQgc2F2ZXMgc29tZSBt
ZW1vcnkgYW5kIHNpbXBsaWZpZXMgYSBidW5jaCBvZgorICAgICAgICAgIGNvZGUuIFRoaXMgYWxz
byBtZWFucyB0aGF0IG5vdywgdGhlIG9ubHkgdXNlciBvZiBWYXJpYWJsZVdhdGNocG9pbnRTZXQg
aXMgRnVuY3Rpb25FeGVjdXRhYmxlLgorICAgICAgICAgIEkndmUgdHdlYWtlZCB0aGUgY29kZSBv
ZiBWYXJpYWJsZVdhdGNocG9pbnRTZXQgdG8gcmVkdWNlIGl0cyBwb3dlciB0byBqdXN0IGJlIHdo
YXQKKyAgICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUgd2FudHMuCisgICAgICAgIAorICAgICAg
ICBUaGlzIGFsc28gaGFzIHRoZSBlZmZlY3Qgb2Ygc2ltcGxpZnlpbmcgdGhlIGltcGxlbWVudGF0
aW9uIG9mIGJsb2NrIHNjb3BpbmcuIFByaW9yIHRvIHRoaXMKKyAgICAgICAgY2hhbmdlLCBibG9j
ayBzY29waW5nIHdvdWxkIGhhZCBoYWQgdG8gaGF2ZSBzb21lIHN0b3J5IGZvciB0aGUgZnVuY3Rp
b24gcmVlbnRyeSB3YXRjaHBvaW50IG9uIGFueQorICAgICAgICBuZXN0ZWQgc3ltYm9sIHRhYmxl
LiBUaGF0J3MgdG90YWxseSB3ZWlyZCB0byB0aGluayBhYm91dDsgaXQncyBub3QgcmVhbGx5IGEg
ZnVuY3Rpb24gcmVlbnRyeSBidXQKKyAgICAgICAgYSBzY29wZSByZWVudHJ5LiBOb3cgd2UgZG9u
J3QgaGF2ZSB0byB0aGluayBhYm91dCB0aGlzLiBDb25zdGFudCBpbmZlcmVuY2Ugb24gbmVzdGVk
IHNjb3BlcyB3aWxsCisgICAgICAgICJqdXN0IHdvcmsiOiBpZiB3ZSBwcm92ZSB0aGF0IHdlIGtu
b3cgdGhlIGNvbnN0YW50IHZhbHVlIG9mIHRoZSBzY29wZSB0aGVuIHRoZSBtYWNoaW5lcnkga2lj
a3MKKyAgICAgICAgaW4sIG90aGVyd2lzZSBpdCBkb2Vzbid0LgorCisgICAgICAgICogQ01ha2VM
aXN0cy50eHQ6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29y
ZS52Y3hwcm9qOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2o6CisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0Lmpzb246CisgICAgICAgICog
Ynl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuaDoKKyAgICAgICAgKEpTQzo6Y29tcHV0ZVVzZXNGb3JC
eXRlY29kZU9mZnNldCk6CisgICAgICAgIChKU0M6OmNvbXB1dGVEZWZzRm9yQnl0ZWNvZGVPZmZz
ZXQpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OkNv
ZGVCbG9jazo6ZHVtcEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpDb2RlQmxv
Y2spOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KToK
KyAgICAgICAgKiBieXRlY29kZS9Db2RlT3JpZ2luLmNwcDoKKyAgICAgICAgKEpTQzo6SW5saW5l
Q2FsbEZyYW1lOjpjYWxsZWVDb25zdGFudCk6CisgICAgICAgIChKU0M6OklubGluZUNhbGxGcmFt
ZTo6dmlzaXRBZ2dyZWdhdGUpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVPcmlnaW4uaDoKKyAg
ICAgICAgKEpTQzo6SW5saW5lQ2FsbEZyYW1lOjpjYWxsZWVDb25zdGFudCk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OklubGluZUNhbGxGcmFtZTo6dmlzaXRBZ2dyZWdhdGUpOiBEZWxldGVkLgor
ICAgICAgICAqIGJ5dGVjb2RlL0luc3RydWN0aW9uLmg6CisgICAgICAgICogYnl0ZWNvZGUvVmFy
aWFibGVXYXRjaHBvaW50U2V0LmNwcDoKKyAgICAgICAgKEpTQzo6VmFyaWFibGVXYXRjaHBvaW50
U2V0Ojpub3RpZnlXcml0ZSk6CisgICAgICAgIChKU0M6OlZhcmlhYmxlV3JpdGVGaXJlRGV0YWls
OjpkdW1wKTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9WYXJpYWJsZVdhdGNocG9pbnRT
ZXQuaDoKKyAgICAgICAgKEpTQzo6VmFyaWFibGVXYXRjaHBvaW50U2V0OjpWYXJpYWJsZVdhdGNo
cG9pbnRTZXQpOgorICAgICAgICAoSlNDOjpWYXJpYWJsZVdhdGNocG9pbnRTZXQ6Om5lZWRUb0Zp
bmFsaXplKToKKyAgICAgICAgKEpTQzo6VmFyaWFibGVXYXRjaHBvaW50U2V0OjpmaW5hbGl6ZVVu
Y29uZGl0aW9uYWxseSk6CisgICAgICAgIChKU0M6OlZhcmlhYmxlV3JpdGVGaXJlRGV0YWlsOjpW
YXJpYWJsZVdyaXRlRmlyZURldGFpbCk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUvVmFy
aWFibGVXYXRjaHBvaW50U2V0SW5saW5lcy5oOgorICAgICAgICAoSlNDOjpWYXJpYWJsZVdhdGNo
cG9pbnRTZXQ6Om5vdGlmeVdyaXRlKToKKyAgICAgICAgKiBieXRlY29kZS9WYXJpYWJsZVdyaXRl
RmlyZURldGFpbC5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpWYXJpYWJsZVdyaXRlRmlyZURl
dGFpbDo6ZHVtcCk6CisgICAgICAgICogYnl0ZWNvZGUvVmFyaWFibGVXcml0ZUZpcmVEZXRhaWwu
aDogQWRkZWQuCisgICAgICAgIChKU0M6OlZhcmlhYmxlV3JpdGVGaXJlRGV0YWlsOjpWYXJpYWJs
ZVdyaXRlRmlyZURldGFpbCk6CisgICAgICAgICogYnl0ZWNvZGUvV2F0Y2hwb2ludC5oOgorICAg
ICAgICAoSlNDOjpXYXRjaHBvaW50U2V0OjpzdGFydFdhdGNoaW5nKToKKyAgICAgICAgKEpTQzo6
V2F0Y2hwb2ludFNldDo6ZmlyZUFsbCk6CisgICAgICAgIChKU0M6OldhdGNocG9pbnRTZXQ6OnRv
dWNoKToKKyAgICAgICAgKEpTQzo6V2F0Y2hwb2ludFNldDo6aW52YWxpZGF0ZSk6CisgICAgICAg
IChKU0M6OklubGluZVdhdGNocG9pbnRTZXQ6OnRvdWNoKToKKyAgICAgICAgKiBieXRlY29tcGls
ZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRv
cjo6Qnl0ZWNvZGVHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6
ZW1pdFJlc29sdmVTY29wZSk6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJ
bmxpbmVzLmg6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFj
dFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKToKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQ
YXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpnZXQpOgorICAg
ICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpnZXRTY29wZSk6CisgICAgICAgIChKU0M6
OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2spOgorICAgICAgICAqIGRmZy9ERkdDYXBh
YmlsaXRpZXMuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmNhcGFiaWxpdHlMZXZlbCk6CisgICAg
ICAgICogZGZnL0RGR0Nsb2JiZXJpemUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpjbG9iYmVyaXpl
KToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguY3BwOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBo
OjpkdW1wKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6dHJ5R2V0Q29uc3RhbnRDbG9zdXJl
VmFyKToKKyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6
Omhhc1dhdGNocG9pbnRTZXQpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OndhdGNocG9pbnRT
ZXQpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc1ZhcmlhYmxlV2F0Y2hwb2ludFNldCk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6dmFyaWFibGVXYXRjaHBvaW50U2V0
KTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6CisgICAgICAgICog
ZGZnL0RGR09wZXJhdGlvbnMuaDoKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlTmV3RnVuY3Rpb24p
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlTm90aWZ5V3JpdGUp
OgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpjYWxsT3BlcmF0aW9uKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3Vs
YXRpdmVKSVQzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1Zh
cmFyZ3NGb3J3YXJkaW5nUGhhc2UuY3BwOgorICAgICAgICAqIGZ0bC9GVExJbnRyaW5zaWNSZXBv
c2l0b3J5Lmg6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcDoKKyAgICAgICAg
KEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZU5vdGlmeVdyaXRlKToKKyAgICAgICAg
KiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHA6CisgICAgICAgIChKU0M6OlN0YWNrRnJhbWU6
OmZyaWVuZGx5U291cmNlVVJMKToKKyAgICAgICAgKEpTQzo6U3RhY2tGcmFtZTo6ZnJpZW5kbHlG
dW5jdGlvbk5hbWUpOgorICAgICAgICAqIGludGVycHJldGVyL0ludGVycHJldGVyLmg6CisgICAg
ICAgIChKU0M6OlN0YWNrRnJhbWU6OmZyaWVuZGx5U291cmNlVVJMKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6U3RhY2tGcmFtZTo6ZnJpZW5kbHlGdW5jdGlvbk5hbWUpOiBEZWxldGVkLgorICAg
ICAgICAqIGppdC9KSVQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXROb3RpZnlXcml0ZSk6
CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcyk6CisgICAgICAgICog
aml0L0pJVC5oOgorICAgICAgICAqIGppdC9KSVRPcGNvZGVzLmNwcDoKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X29wX3RvdWNoX2VudHJ5KTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvSklUT3Bl
cmF0aW9ucy5jcHA6CisgICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMuaDoKKyAgICAgICAgKiBq
aXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRQdXRHbG9i
YWxWYXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRQdXRDbG9zdXJlVmFyKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0Tm90aWZ5V3JpdGUpOiBEZWxldGVkLgorICAgICAgICAqIGppdC9KSVRQ
cm9wZXJ0eUFjY2VzczMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0UHV0R2xvYmFs
VmFyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0UHV0Q2xvc3VyZVZhcik6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdE5vdGlmeVdyaXRlKTogRGVsZXRlZC4KKyAgICAgICAgKiBsbGludC9MTElu
dFNsb3dQYXRocy5jcHA6CisgICAgICAgIChKU0M6OkxMSW50OjpMTElOVF9TTE9XX1BBVEhfREVD
TCk6CisgICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc206CisgICAgICAgICog
bGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbToKKyAgICAgICAgKiBsbGludC9Mb3dM
ZXZlbEludGVycHJldGVyNjQuYXNtOgorICAgICAgICAqIHJ1bnRpbWUvQ29tbW9uU2xvd1BhdGhz
LmNwcDoKKyAgICAgICAgKEpTQzo6U0xPV19QQVRIX0RFQ0wpOiBEZWxldGVkLgorICAgICAgICAq
IHJ1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmg6CisgICAgICAgICogcnVudGltZS9FeGVjdXRhYmxl
LmNwcDoKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25FeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuKToK
KyAgICAgICAgKEpTQzo6RnVuY3Rpb25FeGVjdXRhYmxlOjpXYXRjaHBvaW50Q2xlYW51cDo6V2F0
Y2hwb2ludENsZWFudXApOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFibGU6OldhdGNo
cG9pbnRDbGVhbnVwOjp+V2F0Y2hwb2ludENsZWFudXApOgorICAgICAgICAoSlNDOjpGdW5jdGlv
bkV4ZWN1dGFibGU6OldhdGNocG9pbnRDbGVhbnVwOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSk6
CisgICAgICAgICogcnVudGltZS9FeGVjdXRhYmxlLmg6CisgICAgICAgIChKU0M6OkZ1bmN0aW9u
RXhlY3V0YWJsZTo6ZnVuY3Rpb25SZWFsbG9jYXRpb25XYXRjaHBvaW50U2V0KToKKyAgICAgICAg
KiBydW50aW1lL0pTQ0lubGluZXMuaDoKKyAgICAgICAgKiBydW50aW1lL0pTRnVuY3Rpb24uY3Bw
OgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpjcmVhdGUpOgorICAgICAgICAqIHJ1bnRpbWUv
SlNGdW5jdGlvbi5oOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpjcmVhdGVXaXRoSW52YWxp
ZGF0ZWRSZWFsbG9jYXRpb25XYXRjaHBvaW50KToKKyAgICAgICAgKEpTQzo6SlNGdW5jdGlvbjo6
Y3JlYXRlSW1wbCk6CisgICAgICAgIChKU0M6OkpTRnVuY3Rpb246OmNyZWF0ZSk6IERlbGV0ZWQu
CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpT
R2xvYmFsT2JqZWN0OjphZGRHbG9iYWxWYXIpOgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVj
dDo6YWRkRnVuY3Rpb24pOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuaDoKKyAg
ICAgICAgKiBydW50aW1lL0pTTGV4aWNhbEVudmlyb25tZW50LmNwcDoKKyAgICAgICAgKEpTQzo6
SlNMZXhpY2FsRW52aXJvbm1lbnQ6OnN5bWJvbFRhYmxlUHV0KToKKyAgICAgICAgKiBydW50aW1l
L0pTU2NvcGUuaDoKKyAgICAgICAgKEpTQzo6UmVzb2x2ZU9wOjpSZXNvbHZlT3ApOgorICAgICAg
ICAqIHJ1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5oOgorICAgICAgICAoSlNDOjpzeW1ib2xU
YWJsZVB1dCk6CisgICAgICAgIChKU0M6OnN5bWJvbFRhYmxlUHV0V2l0aEF0dHJpYnV0ZXMpOgor
ICAgICAgICAqIHJ1bnRpbWUvUHV0UHJvcGVydHlTbG90Lmg6CisgICAgICAgICogcnVudGltZS9T
eW1ib2xUYWJsZS5jcHA6CisgICAgICAgIChKU0M6OlN5bWJvbFRhYmxlRW50cnk6OnByZXBhcmVU
b1dhdGNoKToKKyAgICAgICAgKEpTQzo6U3ltYm9sVGFibGU6OlN5bWJvbFRhYmxlKToKKyAgICAg
ICAgKEpTQzo6U3ltYm9sVGFibGU6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpTeW1i
b2xUYWJsZUVudHJ5OjppbmZlcnJlZFZhbHVlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3lt
Ym9sVGFibGVFbnRyeTo6bm90aWZ5V3JpdGVTbG93KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
U3ltYm9sVGFibGU6OldhdGNocG9pbnRDbGVhbnVwOjpXYXRjaHBvaW50Q2xlYW51cCk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OlN5bWJvbFRhYmxlOjpXYXRjaHBvaW50Q2xlYW51cDo6fldhdGNo
cG9pbnRDbGVhbnVwKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3ltYm9sVGFibGU6OldhdGNo
cG9pbnRDbGVhbnVwOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSk6IERlbGV0ZWQuCisgICAgICAg
ICogcnVudGltZS9TeW1ib2xUYWJsZS5oOgorICAgICAgICAoSlNDOjpTeW1ib2xUYWJsZUVudHJ5
OjpkaXNhYmxlV2F0Y2hpbmcpOgorICAgICAgICAoSlNDOjpTeW1ib2xUYWJsZUVudHJ5Ojp3YXRj
aHBvaW50U2V0KToKKyAgICAgICAgKEpTQzo6U3ltYm9sVGFibGVFbnRyeTo6bm90aWZ5V3JpdGUp
OiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvVHlwZVByb2ZpbGVyLmNwcDoKKyAgICAgICAg
KiB0ZXN0cy9zdHJlc3MvaW5mZXItdW5pbml0aWFsaXplZC1jbG9zdXJlLXZhci5qczogQWRkZWQu
CisgICAgICAgICogdGVzdHMvc3RyZXNzL3NpbmdsZXRvbi1zY29wZS10aGVuLW92ZXJ3cml0ZS5q
czogQWRkZWQuCisgICAgICAgICogdGVzdHMvc3RyZXNzL3NpbmdsZXRvbi1zY29wZS10aGVuLXJl
YWxsb2MtYW5kLW92ZXJ3cml0ZS5qczogQWRkZWQuCisgICAgICAgICogdGVzdHMvc3RyZXNzL3Np
bmdsZXRvbi1zY29wZS10aGVuLXJlYWxsb2MuanM6IEFkZGVkLgorCiAyMDE1LTAzLTMxICBZdXN1
a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgogCiAgICAgICAgIFtFUzZdIE9iamVj
dCB0eXBlIHJlc3RyaWN0aW9ucyBvbiBhIGZpcnN0IHBhcmFtZXRlciBvZiBzZXZlcmFsIE9iamVj
dC4qIGZ1bmN0aW9ucyBhcmUgcmVsYXhlZApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NN
YWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxp
c3RzLnR4dAkocmV2aXNpb24gMTgyMDY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtl
TGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xMDYsNiArMTA2LDcgQEAgc2V0KEphdmFTY3Jp
cHRDb3JlX1NPVVJDRVMKICAgICBieXRlY29kZS9VbmxpbmtlZEluc3RydWN0aW9uU3RyZWFtLmNw
cAogICAgIGJ5dGVjb2RlL1ZhbHVlUmVjb3ZlcnkuY3BwCiAgICAgYnl0ZWNvZGUvVmFyaWFibGVX
YXRjaHBvaW50U2V0LmNwcAorICAgIGJ5dGVjb2RlL1ZhcmlhYmxlV3JpdGVGaXJlRGV0YWlsLmNw
cAogICAgIGJ5dGVjb2RlL1ZpcnR1YWxSZWdpc3Rlci5jcHAKICAgICBieXRlY29kZS9XYXRjaHBv
aW50LmNwcAogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4
cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oJKHJl
dmlzaW9uIDE4MjA2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52
Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTM1Myw2ICsz
NTMsNyBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcVW5saW5rZWRJbnN0
cnVjdGlvblN0cmVhbS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRlY29k
ZVxWYWx1ZVJlY292ZXJ5LmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVj
b2RlXFZhcmlhYmxlV2F0Y2hwb2ludFNldC5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxieXRlY29kZVxWYXJpYWJsZVdyaXRlRmlyZURldGFpbC5jcHAiIC8+CiAgICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxieXRlY29kZVxWaXJ0dWFsUmVnaXN0ZXIuY3BwIiAvPgogICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcV2F0Y2hwb2ludC5jcHAiIC8+CiAgICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxieXRlY29tcGlsZXJcQnl0ZWNvZGVHZW5lcmF0b3IuY3BwIiAv
PgpAQCAtMTAwNSw2ICsxMDA2LDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVj
b2RlXFZhbHVlUHJvZmlsZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNv
ZGVcVmFsdWVSZWNvdmVyeS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNv
ZGVcVmFyaWFibGVXYXRjaHBvaW50U2V0LmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxieXRlY29kZVxWYXJpYWJsZVdyaXRlRmlyZURldGFpbC5oIiAvPgogICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5cYnl0ZWNvZGVcVmlydHVhbFJlZ2lzdGVyLmgiIC8+CiAgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxieXRlY29kZVxXYXRjaHBvaW50LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxieXRlY29tcGlsZXJcQnl0ZWNvZGVHZW5lcmF0b3IuaCIgLz4KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxODIwNjkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29y
a2luZyBjb3B5KQpAQCAtMzgzLDYgKzM4Myw4IEBACiAJCTBGNkIxQ0M2MTg2MkM0NzgwMDg0NUQ5
NyAvKiBGVExVbndpbmRJbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjZCMUNDMjE4NjJDNDc4MDA4NDVEOTcgLyogRlRMVW53aW5kSW5mby5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNkIxQ0M5
MTg2NDFERjgwMDg0NUQ5NyAvKiBBcml0eUNoZWNrRmFpbFJldHVyblRodW5rcy5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjZCMUNDNzE4NjQxREY4
MDA4NDVEOTcgLyogQXJpdHlDaGVja0ZhaWxSZXR1cm5UaHVua3MuY3BwICovOyB9OwogCQkwRjZC
MUNDQTE4NjQxREY4MDA4NDVEOTcgLyogQXJpdHlDaGVja0ZhaWxSZXR1cm5UaHVua3MuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNkIxQ0M4MTg2NDFE
RjgwMDg0NUQ5NyAvKiBBcml0eUNoZWNrRmFpbFJldHVyblRodW5rcy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGNkM3MzUwMUFDOUY5OUYwMEJF
MTY4MiAvKiBWYXJpYWJsZVdyaXRlRmlyZURldGFpbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjZDNzM0RTFBQzlGOTlGMDBCRTE2ODIgLyogVmFy
aWFibGVXcml0ZUZpcmVEZXRhaWwuY3BwICovOyB9OworCQkwRjZDNzM1MTFBQzlGOTlGMDBCRTE2
ODIgLyogVmFyaWFibGVXcml0ZUZpcmVEZXRhaWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNkM3MzRGMUFDOUY5OUYwMEJFMTY4MiAvKiBWYXJpYWJs
ZVdyaXRlRmlyZURldGFpbC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTBGNkU4NDVBMTkwMzBCRUYwMDU2Mjc0MSAvKiBERkdWYXJpYWJsZUFjY2Vz
c0RhdGEuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY2RTg0NTkxOTAzMEJFRjAwNTYyNzQxIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YS5jcHAgKi87
IH07CiAJCTBGNkZDNzUwMTk2MTEwQTgwMEUxRDAyRCAvKiBDb21wbGV4R2V0U3RhdHVzLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNkZDNzRFMTk2
MTEwQTgwMEUxRDAyRCAvKiBDb21wbGV4R2V0U3RhdHVzLmNwcCAqLzsgfTsKIAkJMEY2RkM3NTEx
OTYxMTBBODAwRTFEMDJEIC8qIENvbXBsZXhHZXRTdGF0dXMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNkZDNzRGMTk2MTEwQTgwMEUxRDAyRCAvKiBD
b21wbGV4R2V0U3RhdHVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKQEAgLTIxMDAsNiArMjEwMiw4IEBACiAJCTBGNkIxQ0MyMTg2MkM0NzgwMDg0NUQ5
NyAvKiBGVExVbndpbmRJbmZvLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZU
TFVud2luZEluZm8uaDsgcGF0aCA9IGZ0bC9GVExVbndpbmRJbmZvLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGNkIxQ0M3MTg2NDFERjgwMDg0NUQ5NyAvKiBBcml0eUNoZWNrRmFp
bFJldHVyblRodW5rcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBB
cml0eUNoZWNrRmFpbFJldHVyblRodW5rcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGNkIxQ0M4MTg2NDFERjgwMDg0NUQ5NyAvKiBBcml0eUNoZWNrRmFpbFJldHVyblRodW5r
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBcml0eUNoZWNrRmFpbFJldHVy
blRodW5rcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjZDNzM0RTFBQzlGOTlG
MDBCRTE2ODIgLyogVmFyaWFibGVXcml0ZUZpcmVEZXRhaWwuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gVmFyaWFibGVXcml0ZUZpcmVEZXRhaWwuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRjZDNzM0RjFBQzlGOTlGMDBCRTE2ODIgLyogVmFyaWFi
bGVXcml0ZUZpcmVEZXRhaWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmFy
aWFibGVXcml0ZUZpcmVEZXRhaWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2
RTg0NTkxOTAzMEJFRjAwNTYyNzQxIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdWYXJpYWJsZUFjY2Vzc0RhdGEuY3Bw
OyBwYXRoID0gZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGNkZDNzRFMTk2MTEwQTgwMEUxRDAyRCAvKiBDb21wbGV4R2V0U3RhdHVz
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvbXBsZXhHZXRTdGF0
dXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjZGQzc0RjE5NjExMEE4MDBF
MUQwMkQgLyogQ29tcGxleEdldFN0YXR1cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBDb21wbGV4R2V0U3RhdHVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01
MjgwLDYgKzUyODQsOCBAQAogCQkJCTBGQ0E5MTEyMTk1RTY2QTAwMDQyNjQzOCAvKiBWYXJpYWJs
ZVdhdGNocG9pbnRTZXQuY3BwICovLAogCQkJCTBGOTE4MUM2MTg0MTVDQTUwMDU3QjY2OSAvKiBW
YXJpYWJsZVdhdGNocG9pbnRTZXQuaCAqLywKIAkJCQlGRTUyNDhGODE5MTQ0MkQ5MDBCN0ZERTQg
LyogVmFyaWFibGVXYXRjaHBvaW50U2V0SW5saW5lcy5oICovLAorCQkJCTBGNkM3MzRFMUFDOUY5
OUYwMEJFMTY4MiAvKiBWYXJpYWJsZVdyaXRlRmlyZURldGFpbC5jcHAgKi8sCisJCQkJMEY2Qzcz
NEYxQUM5Rjk5RjAwQkUxNjgyIC8qIFZhcmlhYmxlV3JpdGVGaXJlRGV0YWlsLmggKi8sCiAJCQkJ
MEYyMEMyNTgxQTgwMTNBQjAwREEzMjI5IC8qIFZpcnR1YWxSZWdpc3Rlci5jcHAgKi8sCiAJCQkJ
MEY0MjZBNDYxNDYwQ0JBQjAwMTMxRjhGIC8qIFZpcnR1YWxSZWdpc3Rlci5oICovLAogCQkJCTBG
OTE5RDIyMTU4NTNDREUwMDRBNEU3RCAvKiBXYXRjaHBvaW50LmNwcCAqLywKQEAgLTYzNTQsNiAr
NjM2MCw3IEBACiAJCQkJQTcwOUYyRjAxN0EwQUMwNDAwNTEyRTk4IC8qIFNsb3dQYXRoQ2FsbC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJOTMzMDQwMDQwRTZBNzQ5NDAwNzg2RTZBIC8qIFNtYWxsU3Ry
aW5ncy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NjQwRTE2RjVDRDAwQjM0NDYwIC8qIFNv
dXJjZUNvZGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGNkM3MzUxMUFDOUY5OUYwMEJFMTY4MiAv
KiBWYXJpYWJsZVdyaXRlRmlyZURldGFpbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NjMw
RTE2RjVDRDAwQjM0NDYwIC8qIFNvdXJjZVByb3ZpZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk3
MEVDMEVDMzFBQTBEN0RBMDBCNkFBRkEgLyogSlNTdHJpbmdJdGVyYXRvci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJRTQ5REMxNkMxMkVGMjk0RTAwMTg0QTFGIC8qIFNvdXJjZVByb3ZpZGVyQ2FjaGUu
aCBpbiBIZWFkZXJzICovLApAQCAtNjk2Myw2ICs2OTcwLDcgQEAKIAkJCQlBNzdGMTgyMTE2NDA4
OEIyMDA2NDBBNDcgLyogQ29kZUNhY2hlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGOEY5NDQ2
MTY2NzY0RjEwMEQ2MTk3MSAvKiBDb2RlT3JpZ2luLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2
QjU4MjY3MTREMjc5NkMwMEE5QzMwNiAvKiBDb2RlUHJvZmlsZS5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQkwRjZDNzM1MDFBQzlGOTlGMDBCRTE2ODIgLyogVmFyaWFibGVXcml0ZUZpcmVEZXRhaWwu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODZCNTgyNjkxNEQyNzk3MDAwQTlDMzA2IC8qIENvZGVQ
cm9maWxpbmcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY4Rjk0M0MxNjY3NjMxMzAwRDYxOTcx
IC8qIENvZGVTcGVjaWFsaXphdGlvbktpbmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY4Rjk0
NDIxNjY3NjMzNTAwRDYxOTcxIC8qIENvZGVUeXBlLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5qc29uCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QuanNvbgko
cmV2aXNpb24gMTgyMDY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVj
b2RlTGlzdC5qc29uCSh3b3JraW5nIGNvcHkpCkBAIC02LDcgKzYsNiBAQAogICAgICAgICAgICAg
eyAibmFtZSIgOiAib3BfZW50ZXIiLCAibGVuZ3RoIiA6IDEgfSwKICAgICAgICAgICAgIHsgIm5h
bWUiIDogIm9wX2NyZWF0ZV9sZXhpY2FsX2Vudmlyb25tZW50IiwgImxlbmd0aCIgOiAzIH0sCiAg
ICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9nZXRfc2NvcGUiLCAibGVuZ3RoIiA6IDIgfSwKLSAg
ICAgICAgICAgIHsgIm5hbWUiIDogIm9wX3RvdWNoX2VudHJ5IiwgImxlbmd0aCIgOiAxIH0sCiAg
ICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9jcmVhdGVfZGlyZWN0X2FyZ3VtZW50cyIsICJsZW5n
dGgiIDogMiB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfY3JlYXRlX3Njb3BlZF9hcmd1
bWVudHMiLCAibGVuZ3RoIiA6IDMgfSwKICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX2NyZWF0
ZV9vdXRfb2ZfYmFuZF9hcmd1bWVudHMiLCAibGVuZ3RoIiA6IDIgfSwKQEAgLTEwMyw3ICsxMDIs
NyBAQAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfY29uc3RydWN0X3ZhcmFyZ3MiLCAibGVu
Z3RoIiA6IDkgfSwKICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX3N0cmNhdCIsICJsZW5ndGgi
IDogNCB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfdG9fcHJpbWl0aXZlIiwgImxlbmd0
aCIgOiAzIH0sCi0gICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9yZXNvbHZlX3Njb3BlIiwgImxl
bmd0aCIgOiA3IH0sCisgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9yZXNvbHZlX3Njb3BlIiwg
Imxlbmd0aCIgOiA2IH0sCiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9nZXRfZnJvbV9zY29w
ZSIsICJsZW5ndGgiIDogOCB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfcHV0X3RvX3Nj
b3BlIiwgImxlbmd0aCIgOiA3IH0sCiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9nZXRfZnJv
bV9hcmd1bWVudHMiLCAibGVuZ3RoIiA6IDUgfSwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9CeXRlY29kZVVzZURlZi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZVVzZURlZi5oCShyZXZpc2lvbiAxODIwNjkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuaAkod29ya2luZyBj
b3B5KQpAQCAtNTAsNyArNTAsNiBAQCB2b2lkIGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVPZmZzZXQo
CiAgICAgY2FzZSBvcF9uZXdfb2JqZWN0OgogICAgIGNhc2Ugb3BfZW50ZXI6CiAgICAgY2FzZSBv
cF9jYXRjaDoKLSAgICBjYXNlIG9wX3RvdWNoX2VudHJ5OgogICAgIGNhc2Ugb3BfcHJvZmlsZV9j
b250cm9sX2Zsb3c6CiAgICAgY2FzZSBvcF9jcmVhdGVfZGlyZWN0X2FyZ3VtZW50czoKICAgICBj
YXNlIG9wX2NyZWF0ZV9vdXRfb2ZfYmFuZF9hcmd1bWVudHM6CkBAIC0yNzgsNyArMjc3LDYgQEAg
dm9pZCBjb21wdXRlRGVmc0ZvckJ5dGVjb2RlT2Zmc2V0KENvZGVCbAogICAgIGNhc2Ugb3BfcHV0
X2J5X2luZGV4OgogICAgIGNhc2Ugb3BfcHJvZmlsZV90eXBlOgogICAgIGNhc2Ugb3BfcHJvZmls
ZV9jb250cm9sX2Zsb3c6Ci0gICAgY2FzZSBvcF90b3VjaF9lbnRyeToKICAgICBjYXNlIG9wX3B1
dF90b19hcmd1bWVudHM6CiAjZGVmaW5lIExMSU5UX0hFTFBFUl9PUENPREVTKG9wY29kZSwgbGVu
Z3RoKSBjYXNlIG9wY29kZToKICAgICAgICAgRk9SX0VBQ0hfTExJTlRfT1BDT0RFX0VYVEVOU0lP
TihMTElOVF9IRUxQRVJfT1BDT0RFUyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMTgyMDY5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczMywx
MCArNzMzLDYgQEAgdm9pZCBDb2RlQmxvY2s6OmR1bXBCeXRlY29kZSgKICAgICAgICAgICAgIHBy
aW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImVudGVyIik7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBjYXNlIG9wX3RvdWNoX2VudHJ5OiB7
Ci0gICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQs
ICJ0b3VjaF9lbnRyeSIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KICAgICAgICAg
Y2FzZSBvcF9jcmVhdGVfbGV4aWNhbF9lbnZpcm9ubWVudDogewogICAgICAgICAgICAgaW50IHIw
ID0gKCsraXQpLT51Lm9wZXJhbmQ7CiAgICAgICAgICAgICBpbnQgcjEgPSAoKytpdCktPnUub3Bl
cmFuZDsKQEAgLTE0ODQsNyArMTQ4MCw2IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wQnl0ZWNvZGUo
CiAgICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMsICVzLCAldTwlc3wlcz4sICVkIiwgcmVn
aXN0ZXJOYW1lKHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShzY29wZSkuZGF0YSgpLCBpZE5hbWUo
aWQwLCBpZGVudGlmaWVyKGlkMCkpLmRhdGEoKSwKICAgICAgICAgICAgICAgICBtb2RlQW5kVHlw
ZS5vcGVyYW5kKCksIHJlc29sdmVNb2RlTmFtZShtb2RlQW5kVHlwZS5tb2RlKCkpLCByZXNvbHZl
VHlwZU5hbWUobW9kZUFuZFR5cGUudHlwZSgpKSwKICAgICAgICAgICAgICAgICBkZXB0aCk7Ci0g
ICAgICAgICAgICArK2l0OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAg
Y2FzZSBvcF9nZXRfZnJvbV9zY29wZTogewpAQCAtMTkzMSw4ICsxOTI2LDYgQEAgQ29kZUJsb2Nr
OjpDb2RlQmxvY2soU2NyaXB0RXhlY3V0YWJsZSogbwogICAgICAgICAgICAgUmVzb2x2ZU9wIG9w
ID0gSlNTY29wZTo6YWJzdHJhY3RSZXNvbHZlKG1fZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCks
IG5lZWRzQWN0aXZhdGlvbigpLCBzY29wZSwgaWRlbnQsIEdldCwgdHlwZSk7CiAgICAgICAgICAg
ICBpbnN0cnVjdGlvbnNbaSArIDRdLnUub3BlcmFuZCA9IG9wLnR5cGU7CiAgICAgICAgICAgICBp
bnN0cnVjdGlvbnNbaSArIDVdLnUub3BlcmFuZCA9IG9wLmRlcHRoOwotICAgICAgICAgICAgaWYg
KG9wLmxleGljYWxFbnZpcm9ubWVudCkKLSAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSAr
IDZdLnUubGV4aWNhbEVudmlyb25tZW50LnNldCgqdm0oKSwgb3duZXJFeGVjdXRhYmxlLCBvcC5s
ZXhpY2FsRW52aXJvbm1lbnQpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIApAQCAt
MTk3Niw3ICsxOTY5LDcgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soU2NyaXB0RXhlY3V0YWJsZSog
bwogICAgICAgICAgICAgICAgICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX3N5bWJv
bFRhYmxlLT5tX2xvY2spOwogICAgICAgICAgICAgICAgICAgICBTeW1ib2xUYWJsZTo6TWFwOjpp
dGVyYXRvciBpdGVyID0gbV9zeW1ib2xUYWJsZS0+ZmluZChsb2NrZXIsIHVpZCk7CiAgICAgICAg
ICAgICAgICAgICAgIEFTU0VSVChpdGVyICE9IG1fc3ltYm9sVGFibGUtPmVuZChsb2NrZXIpKTsK
LSAgICAgICAgICAgICAgICAgICAgaXRlci0+dmFsdWUucHJlcGFyZVRvV2F0Y2goc3ltYm9sVGFi
bGUoKSk7CisgICAgICAgICAgICAgICAgICAgIGl0ZXItPnZhbHVlLnByZXBhcmVUb1dhdGNoKCk7
CiAgICAgICAgICAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgNV0udS53YXRjaHBvaW50U2V0
ID0gaXRlci0+dmFsdWUud2F0Y2hwb2ludFNldCgpOwogICAgICAgICAgICAgICAgIH0gZWxzZQog
ICAgICAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIDVdLnUud2F0Y2hwb2ludFNldCA9
IG51bGxwdHI7CkBAIC0yNTIwLDE1ICsyNTEzLDYgQEAgdm9pZCBDb2RlQmxvY2s6OmZpbmFsaXpl
VW5jb25kaXRpb25hbGx5KAogICAgICAgICAgICAgICAgIGN1ckluc3RydWN0aW9uWzNdLnUudG9U
aGlzU3RhdHVzID0gbWVyZ2UoCiAgICAgICAgICAgICAgICAgICAgIGN1ckluc3RydWN0aW9uWzNd
LnUudG9UaGlzU3RhdHVzLCBUb1RoaXNDbGVhcmVkQnlHQyk7CiAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICBjYXNlIG9wX3Jlc29sdmVfc2NvcGU6IHsKLSAgICAgICAgICAgICAg
ICBXcml0ZUJhcnJpZXJCYXNlPEpTTGV4aWNhbEVudmlyb25tZW50PiYgbGV4aWNhbEVudmlyb25t
ZW50ID0gY3VySW5zdHJ1Y3Rpb25bNl0udS5sZXhpY2FsRW52aXJvbm1lbnQ7Ci0gICAgICAgICAg
ICAgICAgaWYgKCFsZXhpY2FsRW52aXJvbm1lbnQgfHwgSGVhcDo6aXNNYXJrZWQobGV4aWNhbEVu
dmlyb25tZW50LmdldCgpKSkKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKLSAgICAgICAgICAgICAgICAgICAgZGF0
YUxvZ0YoIkNsZWFyaW5nIGRlYWQgbGV4aWNhbEVudmlyb25tZW50ICVwLlxuIiwgbGV4aWNhbEVu
dmlyb25tZW50LmdldCgpKTsKLSAgICAgICAgICAgICAgICBsZXhpY2FsRW52aXJvbm1lbnQuY2xl
YXIoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KICAgICAgICAgICAg
IGNhc2Ugb3BfZ2V0X2Zyb21fc2NvcGU6CiAgICAgICAgICAgICBjYXNlIG9wX3B1dF90b19zY29w
ZTogewogICAgICAgICAgICAgICAgIFJlc29sdmVNb2RlQW5kVHlwZSBtb2RlQW5kVHlwZSA9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uY3BwCShy
ZXZpc2lvbiAxODIwNjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9y
aWdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0MSw2ICsxNDEsMTggQEAgdm9pZCBDb2RlT3Jp
Z2luOjpkdW1wSW5Db250ZXh0KFByaW50U3RyZQogICAgIGR1bXAob3V0KTsKIH0KIAorSlNGdW5j
dGlvbiogSW5saW5lQ2FsbEZyYW1lOjpjYWxsZWVDb25zdGFudCgpIGNvbnN0Cit7CisgICAgaWYg
KGNhbGxlZVJlY292ZXJ5LmlzQ29uc3RhbnQoKSkKKyAgICAgICAgcmV0dXJuIGpzQ2FzdDxKU0Z1
bmN0aW9uKj4oY2FsbGVlUmVjb3ZlcnkuY29uc3RhbnQoKSk7CisgICAgcmV0dXJuIG51bGxwdHI7
Cit9CisKK3ZvaWQgSW5saW5lQ2FsbEZyYW1lOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYg
dmlzaXRvcikKK3sKKyAgICB2aXNpdG9yLmFwcGVuZCgmZXhlY3V0YWJsZSk7Cit9CisKIEpTRnVu
Y3Rpb24qIElubGluZUNhbGxGcmFtZTo6Y2FsbGVlRm9yQ2FsbEZyYW1lKEV4ZWNTdGF0ZSogZXhl
YykgY29uc3QKIHsKICAgICByZXR1cm4ganNDYXN0PEpTRnVuY3Rpb24qPihjYWxsZWVSZWNvdmVy
eS5yZWNvdmVyKGV4ZWMpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlT3JpZ2luLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVPcmlnaW4uaAkocmV2aXNpb24gMTgyMDY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NvZGVPcmlnaW4uaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNiBAQAog
CiAjaW5jbHVkZSAiQ29kZUJsb2NrSGFzaC5oIgogI2luY2x1ZGUgIkNvZGVTcGVjaWFsaXphdGlv
bktpbmQuaCIKLSNpbmNsdWRlICJKU0Z1bmN0aW9uLmgiCiAjaW5jbHVkZSAiVmFsdWVSZWNvdmVy
eS5oIgogI2luY2x1ZGUgIldyaXRlQmFycmllci5oIgogI2luY2x1ZGUgPHd0Zi9CaXRWZWN0b3Iu
aD4KQEAgLTIwNywxNyArMjA2LDggQEAgc3RydWN0IElubGluZUNhbGxGcmFtZSB7CiAgICAgCiAg
ICAgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBzcGVjaWFsaXphdGlvbktpbmQoKSBjb25zdCB7IHJl
dHVybiBzcGVjaWFsaXphdGlvbktpbmRGb3Ioc3RhdGljX2Nhc3Q8S2luZD4oa2luZCkpOyB9CiAK
LSAgICBKU0Z1bmN0aW9uKiBjYWxsZWVDb25zdGFudCgpIGNvbnN0Ci0gICAgewotICAgICAgICBp
ZiAoY2FsbGVlUmVjb3ZlcnkuaXNDb25zdGFudCgpKQotICAgICAgICAgICAgcmV0dXJuIGpzQ2Fz
dDxKU0Z1bmN0aW9uKj4oY2FsbGVlUmVjb3ZlcnkuY29uc3RhbnQoKSk7Ci0gICAgICAgIHJldHVy
biAwOwotICAgIH0KLQotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCi0gICAgewotICAgICAgICB2aXNpdG9yLmFwcGVuZCgmZXhlY3V0YWJsZSk7Ci0gICAgfQor
ICAgIEpTRnVuY3Rpb24qIGNhbGxlZUNvbnN0YW50KCkgY29uc3Q7CisgICAgdm9pZCB2aXNpdEFn
Z3JlZ2F0ZShTbG90VmlzaXRvciYpOwogICAgIAogICAgIC8vIEdldCB0aGUgY2FsbGVlIGdpdmVu
IGEgbWFjaGluZSBjYWxsIGZyYW1lIHRvIHdoaWNoIHRoaXMgSW5saW5lQ2FsbEZyYW1lIGJlbG9u
Z3MuCiAgICAgSlNGdW5jdGlvbiogY2FsbGVlRm9yQ2FsbEZyYW1lKEV4ZWNTdGF0ZSopIGNvbnN0
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luc3RydWN0aW9uLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luc3RydWN0aW9uLmgJ
KHJldmlzaW9uIDE4MjA2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0
cnVjdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0Niw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogY2xhc3MgQXJyYXlBbGxvY2F0aW9uUHJvZmlsZTsKIGNsYXNzIEFycmF5UHJvZmlsZTsKIGNs
YXNzIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlOwotY2xhc3MgVmFyaWFibGVXYXRjaHBvaW50U2V0
OworY2xhc3MgV2F0Y2hwb2ludFNldDsKIHN0cnVjdCBMTEludENhbGxMaW5rSW5mbzsKIHN0cnVj
dCBWYWx1ZVByb2ZpbGU7CiAKQEAgLTExNyw4ICsxMTcsNyBAQCBzdHJ1Y3QgSW5zdHJ1Y3Rpb24g
ewogICAgICAgICBBcnJheVByb2ZpbGUqIGFycmF5UHJvZmlsZTsKICAgICAgICAgQXJyYXlBbGxv
Y2F0aW9uUHJvZmlsZSogYXJyYXlBbGxvY2F0aW9uUHJvZmlsZTsKICAgICAgICAgT2JqZWN0QWxs
b2NhdGlvblByb2ZpbGUqIG9iamVjdEFsbG9jYXRpb25Qcm9maWxlOwotICAgICAgICBWYXJpYWJs
ZVdhdGNocG9pbnRTZXQqIHdhdGNocG9pbnRTZXQ7Ci0gICAgICAgIFdyaXRlQmFycmllckJhc2U8
SlNMZXhpY2FsRW52aXJvbm1lbnQ+IGxleGljYWxFbnZpcm9ubWVudDsKKyAgICAgICAgV2F0Y2hw
b2ludFNldCogd2F0Y2hwb2ludFNldDsKICAgICAgICAgdm9pZCogcG9pbnRlcjsKICAgICAgICAg
Ym9vbCogcHJlZGljYXRlUG9pbnRlcjsKICAgICAgICAgVG9UaGlzU3RhdHVzIHRvVGhpc1N0YXR1
czsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYXJpYWJsZVdhdGNocG9p
bnRTZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9W
YXJpYWJsZVdhdGNocG9pbnRTZXQuY3BwCShyZXZpc2lvbiAxODIwNjkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFyaWFibGVXYXRjaHBvaW50U2V0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMzAsMTkgKzMwLDkgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLXZvaWQgVmFyaWFibGVX
cml0ZUZpcmVEZXRhaWw6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3ZvaWQgVmFyaWFi
bGVXYXRjaHBvaW50U2V0Ojpub3RpZnlXcml0ZShWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEpTVmFs
dWUgdmFsdWUsIGNvbnN0IGNoYXIqIHJlYXNvbikKIHsKLSAgICBvdXQucHJpbnQoIldyaXRlIHRv
ICIsIG1fbmFtZSwgIiBpbiAiLCBKU1ZhbHVlKG1fb2JqZWN0KSk7Ci19Ci0KLXZvaWQgVmFyaWFi
bGVXYXRjaHBvaW50U2V0Ojpub3RpZnlXcml0ZShWTSYgdm0sIEpTVmFsdWUgdmFsdWUsIEpTT2Jq
ZWN0KiBiYXNlT2JqZWN0LCBjb25zdCBQcm9wZXJ0eU5hbWUmIHByb3BlcnR5TmFtZSkKLXsKLSAg
ICBub3RpZnlXcml0ZSh2bSwgdmFsdWUsIFZhcmlhYmxlV3JpdGVGaXJlRGV0YWlsKGJhc2VPYmpl
Y3QsIHByb3BlcnR5TmFtZSkpOwotfQotCi12b2lkIFZhcmlhYmxlV2F0Y2hwb2ludFNldDo6bm90
aWZ5V3JpdGUoVk0mIHZtLCBKU1ZhbHVlIHZhbHVlLCBjb25zdCBjaGFyKiByZWFzb24pCi17Ci0g
ICAgbm90aWZ5V3JpdGUodm0sIHZhbHVlLCBTdHJpbmdGaXJlRGV0YWlsKHJlYXNvbikpOworICAg
IG5vdGlmeVdyaXRlKHZtLCBvd25lciwgdmFsdWUsIFN0cmluZ0ZpcmVEZXRhaWwocmVhc29uKSk7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1ZhcmlhYmxlV2F0Y2hwb2ludFNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9WYXJpYWJsZVdhdGNocG9pbnRTZXQuaAkocmV2aXNpb24gMTgy
MDY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhcmlhYmxlV2F0Y2hwb2lu
dFNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMi0yMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMi0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzIsMjkgKzMyLDEyIEBACiBuYW1lc3BhY2UgSlND
IHsKIAogY2xhc3MgSlNPYmplY3Q7Ci1jbGFzcyBTeW1ib2xUYWJsZTsKLQotY2xhc3MgVmFyaWFi
bGVXcml0ZUZpcmVEZXRhaWwgOiBwdWJsaWMgRmlyZURldGFpbCB7Ci1wdWJsaWM6Ci0gICAgVmFy
aWFibGVXcml0ZUZpcmVEZXRhaWwoSlNPYmplY3QqIG9iamVjdCwgY29uc3QgUHJvcGVydHlOYW1l
JiBuYW1lKQotICAgICAgICA6IG1fb2JqZWN0KG9iamVjdCkKLSAgICAgICAgLCBtX25hbWUobmFt
ZSkKLSAgICB7Ci0gICAgfQotICAgIAotICAgIHZpcnR1YWwgdm9pZCBkdW1wKFByaW50U3RyZWFt
JikgY29uc3Qgb3ZlcnJpZGU7Ci0KLXByaXZhdGU6Ci0gICAgSlNPYmplY3QqIG1fb2JqZWN0Owot
ICAgIGNvbnN0IFByb3BlcnR5TmFtZSYgbV9uYW1lOwotfTsKIAogY2xhc3MgVmFyaWFibGVXYXRj
aHBvaW50U2V0IDogcHVibGljIFdhdGNocG9pbnRTZXQgewogICAgIGZyaWVuZCBjbGFzcyBMTElu
dE9mZnNldHNFeHRyYWN0b3I7CiBwdWJsaWM6Ci0gICAgVmFyaWFibGVXYXRjaHBvaW50U2V0KFN5
bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSkKKyAgICBWYXJpYWJsZVdhdGNocG9pbnRTZXQoKQogICAg
ICAgICA6IFdhdGNocG9pbnRTZXQoQ2xlYXJXYXRjaHBvaW50KQotICAgICAgICAsIG1fc3ltYm9s
VGFibGUoc3ltYm9sVGFibGUpCiAgICAgewogICAgIH0KICAgICAKQEAgLTczLDkgKzU2LDggQEAg
cHVibGljOgogICAgIC8vICAgICAgICB5b3Ugd2lsbCBoYXZlIGJlZW4gbm90aWZpZWQgdGhhdCB0
aGUgd2F0Y2hwb2ludCB3YXMgZmlyZWQuCiAgICAgSlNWYWx1ZSBpbmZlcnJlZFZhbHVlKCkgY29u
c3QgeyByZXR1cm4gbV9pbmZlcnJlZFZhbHVlLmdldCgpOyB9CiAgICAgCi0gICAgdm9pZCBub3Rp
ZnlXcml0ZShWTSYsIEpTVmFsdWUsIGNvbnN0IEZpcmVEZXRhaWwmKTsKLSAgICBKU19FWFBPUlRf
UFJJVkFURSB2b2lkIG5vdGlmeVdyaXRlKFZNJiwgSlNWYWx1ZSwgSlNPYmplY3QqIGJhc2VPYmpl
Y3QsIGNvbnN0IFByb3BlcnR5TmFtZSYpOwotICAgIHZvaWQgbm90aWZ5V3JpdGUoVk0mLCBKU1Zh
bHVlLCBjb25zdCBjaGFyKiByZWFzb24pOworICAgIHZvaWQgbm90aWZ5V3JpdGUoVk0mLCBKU0Nl
bGwqIG93bmVyLCBKU1ZhbHVlLCBjb25zdCBGaXJlRGV0YWlsJik7CisgICAgdm9pZCBub3RpZnlX
cml0ZShWTSYsIEpTQ2VsbCogb3duZXIsIEpTVmFsdWUsIGNvbnN0IGNoYXIqIHJlYXNvbik7CiAg
ICAgCiAgICAgdm9pZCBpbnZhbGlkYXRlKGNvbnN0IEZpcmVEZXRhaWwmIGRldGFpbCkKICAgICB7
CkBAIC04MywxNSArNjUsMTkgQEAgcHVibGljOgogICAgICAgICBXYXRjaHBvaW50U2V0OjppbnZh
bGlkYXRlKGRldGFpbCk7CiAgICAgfQogICAgIAotICAgIHZvaWQgZmluYWxpemVVbmNvbmRpdGlv
bmFsbHkoY29uc3QgRmlyZURldGFpbCYgZGV0YWlsKQorICAgIGJvb2wgbmVlZFRvRmluYWxpemUo
KQogICAgIHsKICAgICAgICAgQVNTRVJUKCEhbV9pbmZlcnJlZFZhbHVlID09IChzdGF0ZSgpID09
IElzV2F0Y2hlZCkpOwogICAgICAgICBpZiAoIW1faW5mZXJyZWRWYWx1ZSkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIG1faW5mZXJyZWRWYWx1ZS5nZXQoKS5pc0Nl
bGwoKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBmaW5hbGl6ZVVuY29uZGl0aW9uYWxseShjb25z
dCBGaXJlRGV0YWlsJiBkZXRhaWwpCisgICAgeworICAgICAgICBpZiAoIW5lZWRUb0ZpbmFsaXpl
KCkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIEpTVmFsdWUgaW5mZXJyZWRWYWx1ZSA9
IG1faW5mZXJyZWRWYWx1ZS5nZXQoKTsKLSAgICAgICAgaWYgKCFpbmZlcnJlZFZhbHVlLmlzQ2Vs
bCgpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBKU0NlbGwqIGNlbGwgPSBpbmZlcnJl
ZFZhbHVlLmFzQ2VsbCgpOworICAgICAgICBKU0NlbGwqIGNlbGwgPSBtX2luZmVycmVkVmFsdWUu
Z2V0KCkuYXNDZWxsKCk7CiAgICAgICAgIGlmIChIZWFwOjppc01hcmtlZChjZWxsKSkKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgaW52YWxpZGF0ZShkZXRhaWwpOwpAQCAtMTAwLDcgKzg2
LDYgQEAgcHVibGljOgogICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogYWRkcmVzc09mSW5mZXJy
ZWRWYWx1ZSgpIHsgcmV0dXJuICZtX2luZmVycmVkVmFsdWU7IH0KICAgICAKIHByaXZhdGU6Ci0g
ICAgU3ltYm9sVGFibGUmIG1fc3ltYm9sVGFibGU7CiAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+
IG1faW5mZXJyZWRWYWx1ZTsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9WYXJpYWJsZVdhdGNocG9pbnRTZXRJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhcmlhYmxlV2F0Y2hwb2ludFNldElubGluZXMuaAko
cmV2aXNpb24gMTgyMDY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Zhcmlh
YmxlV2F0Y2hwb2ludFNldElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsMTcgKzI2LDE3IEBA
CiAjaWZuZGVmIFZhcmlhYmxlV2F0Y2hwb2ludFNldElubGluZXNfaAogI2RlZmluZSBWYXJpYWJs
ZVdhdGNocG9pbnRTZXRJbmxpbmVzX2gKIAotI2luY2x1ZGUgIlN5bWJvbFRhYmxlLmgiCiAjaW5j
bHVkZSAiVmFyaWFibGVXYXRjaHBvaW50U2V0LmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCi1pbmxp
bmUgdm9pZCBWYXJpYWJsZVdhdGNocG9pbnRTZXQ6Om5vdGlmeVdyaXRlKFZNJiB2bSwgSlNWYWx1
ZSB2YWx1ZSwgY29uc3QgRmlyZURldGFpbCYgZGV0YWlsKQoraW5saW5lIHZvaWQgVmFyaWFibGVX
YXRjaHBvaW50U2V0Ojpub3RpZnlXcml0ZSgKKyAgICBWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEpT
VmFsdWUgdmFsdWUsIGNvbnN0IEZpcmVEZXRhaWwmIGRldGFpbCkKIHsKICAgICBBU1NFUlQoISF2
YWx1ZSk7CiAgICAgc3dpdGNoIChzdGF0ZSgpKSB7CiAgICAgY2FzZSBDbGVhcldhdGNocG9pbnQ6
Ci0gICAgICAgIG1faW5mZXJyZWRWYWx1ZS5zZXQodm0sICZtX3N5bWJvbFRhYmxlLCB2YWx1ZSk7
CisgICAgICAgIG1faW5mZXJyZWRWYWx1ZS5zZXQodm0sIG93bmVyLCB2YWx1ZSk7CiAgICAgICAg
IHN0YXJ0V2F0Y2hpbmcoKTsKICAgICAgICAgcmV0dXJuOwogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvVmFyaWFibGVXcml0ZUZpcmVEZXRhaWwuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYXJpYWJsZVdyaXRlRmlyZURldGFp
bC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFy
aWFibGVXcml0ZUZpcmVEZXRhaWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMzkgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIlZhcmlhYmxlV3JpdGVGaXJlRGV0YWlsLmgiCisKKyNpbmNs
dWRlICJKU0NJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeworCit2b2lkIFZhcmlhYmxlV3Jp
dGVGaXJlRGV0YWlsOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnBy
aW50KCJXcml0ZSB0byAiLCBtX25hbWUsICIgaW4gIiwgSlNWYWx1ZShtX29iamVjdCkpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1ZhcmlhYmxlV3JpdGVGaXJlRGV0YWlsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1ZhcmlhYmxlV3JpdGVGaXJlRGV0YWlsLmgJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFyaWFibGVXcml0ZUZpcmVEZXRh
aWwuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDUzIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgVmFyaWFibGVXcml0ZUZpcmVEZXRh
aWxfaAorI2RlZmluZSBWYXJpYWJsZVdyaXRlRmlyZURldGFpbF9oCisKKyNpbmNsdWRlICJXYXRj
aHBvaW50LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBKU09iamVjdDsKK2NsYXNzIFBy
b3BlcnR5TmFtZTsKKworY2xhc3MgVmFyaWFibGVXcml0ZUZpcmVEZXRhaWwgOiBwdWJsaWMgRmly
ZURldGFpbCB7CitwdWJsaWM6CisgICAgVmFyaWFibGVXcml0ZUZpcmVEZXRhaWwoSlNPYmplY3Qq
IG9iamVjdCwgY29uc3QgUHJvcGVydHlOYW1lJiBuYW1lKQorICAgICAgICA6IG1fb2JqZWN0KG9i
amVjdCkKKyAgICAgICAgLCBtX25hbWUobmFtZSkKKyAgICB7CisgICAgfQorICAgIAorICAgIHZp
cnR1YWwgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisKK3ByaXZhdGU6
CisgICAgSlNPYmplY3QqIG1fb2JqZWN0OworICAgIGNvbnN0IFByb3BlcnR5TmFtZSYgbV9uYW1l
OworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBWYXJpYWJsZVdyaXRlRmly
ZURldGFpbF9oCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvV2F0Y2hwb2lu
dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9XYXRjaHBv
aW50LmgJKHJldmlzaW9uIDE4MjA2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9XYXRjaHBvaW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTEyNSwyMCArMTI1LDI0IEBAIHB1Ymxp
YzoKICAgICAvLyBzZXQgd2F0Y2hwb2ludHMgdGhhdCB3ZSBiZWxpZXZlIHdpbGwgYWN0dWFsbHkg
YmUgZmlyZWQuCiAgICAgdm9pZCBzdGFydFdhdGNoaW5nKCkKICAgICB7Ci0gICAgICAgIEFTU0VS
VChzdGF0ZSgpICE9IElzSW52YWxpZGF0ZWQpOworICAgICAgICBBU1NFUlQobV9zdGF0ZSAhPSBJ
c0ludmFsaWRhdGVkKTsKKyAgICAgICAgaWYgKG1fc3RhdGUgPT0gSXNXYXRjaGVkKQorICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOwogICAgICAgICBt
X3N0YXRlID0gSXNXYXRjaGVkOworICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOwogICAg
IH0KICAgICAKICAgICB2b2lkIGZpcmVBbGwoY29uc3QgRmlyZURldGFpbCYgZGV0YWlsKQogICAg
IHsKLSAgICAgICAgaWYgKExJS0VMWShzdGF0ZSgpICE9IElzV2F0Y2hlZCkpCisgICAgICAgIGlm
IChMSUtFTFkobV9zdGF0ZSAhPSBJc1dhdGNoZWQpKQogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICBmaXJlQWxsU2xvdyhkZXRhaWwpOwogICAgIH0KICAgICAKICAgICB2b2lkIGZpcmVBbGwo
Y29uc3QgY2hhciogcmVhc29uKQogICAgIHsKLSAgICAgICAgaWYgKExJS0VMWShzdGF0ZSgpICE9
IElzV2F0Y2hlZCkpCisgICAgICAgIGlmIChMSUtFTFkobV9zdGF0ZSAhPSBJc1dhdGNoZWQpKQog
ICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBmaXJlQWxsU2xvdyhyZWFzb24pOwogICAgIH0K
QEAgLTE1MSwxMyArMTU1LDIzIEBAIHB1YmxpYzoKICAgICAgICAgICAgIGZpcmVBbGwoZGV0YWls
KTsKICAgICB9CiAgICAgCisgICAgdm9pZCB0b3VjaChjb25zdCBjaGFyKiByZWFzb24pCisgICAg
eworICAgICAgICB0b3VjaChTdHJpbmdGaXJlRGV0YWlsKHJlYXNvbikpOworICAgIH0KKyAgICAK
ICAgICB2b2lkIGludmFsaWRhdGUoY29uc3QgRmlyZURldGFpbCYgZGV0YWlsKQogICAgIHsKICAg
ICAgICAgaWYgKHN0YXRlKCkgPT0gSXNXYXRjaGVkKQogICAgICAgICAgICAgZmlyZUFsbChkZXRh
aWwpOwogICAgICAgICBtX3N0YXRlID0gSXNJbnZhbGlkYXRlZDsKICAgICB9Ci0KKyAgICAKKyAg
ICB2b2lkIGludmFsaWRhdGUoY29uc3QgY2hhciogcmVhc29uKQorICAgIHsKKyAgICAgICAgaW52
YWxpZGF0ZShTdHJpbmdGaXJlRGV0YWlsKHJlYXNvbikpOworICAgIH0KKyAgICAKICAgICBpbnQ4
X3QqIGFkZHJlc3NPZlN0YXRlKCkgeyByZXR1cm4gJm1fc3RhdGU7IH0KICAgICBpbnQ4X3QqIGFk
ZHJlc3NPZlNldElzTm90RW1wdHkoKSB7IHJldHVybiAmbV9zZXRJc05vdEVtcHR5OyB9CiAgICAg
CkBAIC0yNjEsNyArMjc1LDExIEBAIHB1YmxpYzoKICAgICAgICAgICAgIGZhdCgpLT50b3VjaChk
ZXRhaWwpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIGlmIChkZWNv
ZGVTdGF0ZShtX2RhdGEpID09IENsZWFyV2F0Y2hwb2ludCkKKyAgICAgICAgdWludHB0cl90IGRh
dGEgPSBtX2RhdGE7CisgICAgICAgIGlmIChkZWNvZGVTdGF0ZShkYXRhKSA9PSBJc0ludmFsaWRh
dGVkKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgp
OworICAgICAgICBpZiAoZGVjb2RlU3RhdGUoZGF0YSkgPT0gQ2xlYXJXYXRjaHBvaW50KQogICAg
ICAgICAgICAgbV9kYXRhID0gZW5jb2RlU3RhdGUoSXNXYXRjaGVkKTsKICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgbV9kYXRhID0gZW5jb2RlU3RhdGUoSXNJbnZhbGlkYXRlZCk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2Rl
R2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMTgyMDY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2
Niw5ICs0NjYsNiBAQCBCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoVk0mCiAg
ICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgaWYgKG1fc3ltYm9sVGFibGUtPnNjb3BlU2l6ZSgp
KQotICAgICAgICBlbWl0T3Bjb2RlKG9wX3RvdWNoX2VudHJ5KTsKLQogICAgIGlmIChpc0NvbnN0
cnVjdG9yKCkpIHsKICAgICAgICAgaWYgKGNvbnN0cnVjdG9yS2luZCgpID09IENvbnN0cnVjdG9y
S2luZDo6RGVyaXZlZCkgewogICAgICAgICAgICAgbV9uZXdUYXJnZXRSZWdpc3RlciA9IGFkZFZh
cigpOwpAQCAtMTMyNCw4ICsxMzIxLDYgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6
OmVtaXRSZXNvbAogICAgICAgICAKICAgICAgICAgQVNTRVJUKCFtX3N5bWJvbFRhYmxlIHx8ICFt
X3N5bWJvbFRhYmxlLT5jb250YWlucyh2YXJpYWJsZS5pZGVudCgpLmltcGwoKSkgfHwgcmVzb2x2
ZVR5cGUoKSA9PSBEeW5hbWljKTsKICAgICAgICAgCi0gICAgICAgIG1fY29kZUJsb2NrLT5hZGRQ
cm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uKGluc3RydWN0aW9ucygpLnNpemUoKSk7Ci0gICAgICAg
IAogICAgICAgICAvLyByZXNvbHZlX3Njb3BlIGRzdCwgaWQsIFJlc29sdmVUeXBlLCBkZXB0aAog
ICAgICAgICBlbWl0T3Bjb2RlKG9wX3Jlc29sdmVfc2NvcGUpOwogICAgICAgICBkc3QgPSB0ZW1w
RGVzdGluYXRpb24oZHN0KTsKQEAgLTEzMzQsNyArMTMyOSw2IEBAIFJlZ2lzdGVySUQqIEJ5dGVj
b2RlR2VuZXJhdG9yOjplbWl0UmVzb2wKICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGFk
ZENvbnN0YW50KHZhcmlhYmxlLmlkZW50KCkpKTsKICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBw
ZW5kKHJlc29sdmVUeXBlKCkpOwogICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoMCk7Ci0g
ICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCgwKTsKICAgICAgICAgcmV0dXJuIGRzdDsKICAg
ICB9CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50
ZXJwcmV0ZXJJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCShyZXZpc2lvbiAxODIwNjkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEzNDEsNiArMTM0MSw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnBy
ZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICB9CiAKICAgICBjYXNlIENyZWF0ZVRoaXM6IHsKKyAg
ICAgICAgLy8gRklYTUU6IFdlIGNhbiBmb2xkIHRoaXMgdG8gTmV3T2JqZWN0IGlmIHRoZSBpbmNv
bWluZyBjYWxsZWUgaXMgYSBjb25zdGFudC4KICAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBl
KFNwZWNGaW5hbE9iamVjdCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTE0MDMsNiArMTQw
NCwxNSBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAg
IGJyZWFrOwogICAgICAgICAKICAgICBjYXNlIEdldENhbGxlZToKKyAgICAgICAgaWYgKEZ1bmN0
aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IGpzRHluYW1pY0Nhc3Q8RnVuY3Rpb25FeGVjdXRh
YmxlKj4obV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpKSkgeworICAgICAgICAgICAgVmFy
aWFibGVXYXRjaHBvaW50U2V0JiBzZXQgPSBleGVjdXRhYmxlLT5mdW5jdGlvblJlYWxsb2NhdGlv
bldhdGNocG9pbnRTZXQoKTsKKyAgICAgICAgICAgIGlmIChKU1ZhbHVlIHZhbHVlID0gc2V0Lmlu
ZmVycmVkVmFsdWUoKSkgeworICAgICAgICAgICAgICAgIG1fZ3JhcGgud2F0Y2hwb2ludHMoKS5h
ZGRMYXppbHkoJnNldCk7CisgICAgICAgICAgICAgICAgSlNGdW5jdGlvbiogZnVuY3Rpb24gPSBq
c0Nhc3Q8SlNGdW5jdGlvbio+KHZhbHVlKTsKKyAgICAgICAgICAgICAgICBzZXRDb25zdGFudChu
b2RlLCAqbV9ncmFwaC5mcmVlemUoZnVuY3Rpb24pKTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUo
U3BlY0Z1bmN0aW9uKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDE4
MjA2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yNzgsOCArMjc4LDIwIEBAIHByaXZhdGU6CiAgICAgICAgICAg
ICAgICAgaWYgKG9wZXJhbmQub2Zmc2V0KCkgPT0gSlNTdGFjazo6Q2FsbGVlKQogICAgICAgICAg
ICAgICAgICAgICByZXR1cm4gd2Vha0pTQ29uc3RhbnQoY2FsbGVlKTsKICAgICAgICAgICAgIH0K
LSAgICAgICAgfSBlbHNlIGlmIChvcGVyYW5kLm9mZnNldCgpID09IEpTU3RhY2s6OkNhbGxlZSkK
KyAgICAgICAgfSBlbHNlIGlmIChvcGVyYW5kLm9mZnNldCgpID09IEpTU3RhY2s6OkNhbGxlZSkg
eworICAgICAgICAgICAgLy8gV2UgaGF2ZSB0byBkbyBzb21lIGNvbnN0YW50LWZvbGRpbmcgaGVy
ZSBiZWNhdXNlIHRoaXMgZW5hYmxlcyBDcmVhdGVUaGlzIGZvbGRpbmcuIE5vdGUKKyAgICAgICAg
ICAgIC8vIHRoYXQgd2UgZG9uJ3QgaGF2ZSBzdWNoIHdhdGNocG9pbnQtYmFzZWQgZm9sZGluZyBm
b3IgaW5saW5lZCB1c2VzIG9mIENhbGxlZSwgc2luY2UgaW4gdGhhdAorICAgICAgICAgICAgLy8g
Y2FzZSBpZiB0aGUgZnVuY3Rpb24gaXMgYSBzaW5nbGV0b24gdGhlbiB3ZSBhbHJlYWR5IGtub3cg
aXQuCisgICAgICAgICAgICBpZiAoRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlID0ganNE
eW5hbWljQ2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRh
YmxlKCkpKSB7CisgICAgICAgICAgICAgICAgVmFyaWFibGVXYXRjaHBvaW50U2V0JiBzZXQgPSBl
eGVjdXRhYmxlLT5mdW5jdGlvblJlYWxsb2NhdGlvbldhdGNocG9pbnRTZXQoKTsKKyAgICAgICAg
ICAgICAgICBpZiAoSlNWYWx1ZSB2YWx1ZSA9IHNldC5pbmZlcnJlZFZhbHVlKCkpIHsKKyAgICAg
ICAgICAgICAgICAgICAgbV9ncmFwaC53YXRjaHBvaW50cygpLmFkZExhemlseSgmc2V0KTsKKyAg
ICAgICAgICAgICAgICAgICAgSlNGdW5jdGlvbiogZnVuY3Rpb24gPSBqc0Nhc3Q8SlNGdW5jdGlv
bio+KHZhbHVlKTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdlYWtKU0NvbnN0YW50KGZ1
bmN0aW9uKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBy
ZXR1cm4gYWRkVG9HcmFwaChHZXRDYWxsZWUpOworICAgICAgICB9CiAgICAgICAgIAogICAgICAg
ICByZXR1cm4gZ2V0RGlyZWN0KG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZChvcGVyYW5k
KSk7CiAgICAgfQpAQCAtMjUxOSw2ICsyNTMxLDEyIEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmNs
ZWFyQ2FjaGVzKCkKIE5vZGUqIEJ5dGVDb2RlUGFyc2VyOjpnZXRTY29wZShWaXJ0dWFsUmVnaXN0
ZXIgc2NvcGVDaGFpbiwgdW5zaWduZWQgc2tpcENvdW50KQogewogICAgIE5vZGUqIGxvY2FsQmFz
ZSA9IGdldChzY29wZUNoYWluKTsKKyAgICBhZGRUb0dyYXBoKFBoYW50b20sIGxvY2FsQmFzZSk7
IC8vIE9TUiBleGl0IGNhbm5vdCBoYW5kbGUgcmVzb2x2ZV9zY29wZSBvbiBhIERDRSdkIHNjb3Bl
LgorICAgIGlmIChKU1Njb3BlKiBzY29wZSA9IGxvY2FsQmFzZS0+ZHluYW1pY0Nhc3RDb25zdGFu
dDxKU1Njb3BlKj4oKSkgeworICAgICAgICBmb3IgKHVuc2lnbmVkIG4gPSBza2lwQ291bnQ7IG4t
LTspCisgICAgICAgICAgICBzY29wZSA9IHNjb3BlLT5uZXh0KCk7CisgICAgICAgIHJldHVybiB3
ZWFrSlNDb25zdGFudChzY29wZSk7CisgICAgfQogICAgIGZvciAodW5zaWduZWQgbiA9IHNraXBD
b3VudDsgbi0tOykKICAgICAgICAgbG9jYWxCYXNlID0gYWRkVG9HcmFwaChTa2lwU2NvcGUsIGxv
Y2FsQmFzZSk7CiAgICAgcmV0dXJuIGxvY2FsQmFzZTsKQEAgLTI1OTMsMTEgKzI2MTEsNiBAQCBi
b29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICBORVhU
X09QQ09ERShvcF9lbnRlcik7CiAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICBjYXNl
IG9wX3RvdWNoX2VudHJ5OgotICAgICAgICAgICAgaWYgKG1faW5saW5lU3RhY2tUb3AtPm1fY29k
ZUJsb2NrLT5zeW1ib2xUYWJsZSgpLT5tX2Z1bmN0aW9uRW50ZXJlZE9uY2UuaXNTdGlsbFZhbGlk
KCkpCi0gICAgICAgICAgICAgICAgYWRkVG9HcmFwaChGb3JjZU9TUkV4aXQpOwotICAgICAgICAg
ICAgTkVYVF9PUENPREUob3BfdG91Y2hfZW50cnkpOwotICAgICAgICAgICAgCiAgICAgICAgIGNh
c2Ugb3BfdG9fdGhpczogewogICAgICAgICAgICAgTm9kZSogb3AxID0gZ2V0VGhpcygpOwogICAg
ICAgICAgICAgaWYgKG9wMS0+b3AoKSAhPSBUb1RoaXMpIHsKQEAgLTMzNzUsMTcgKzMzODgsNyBA
QCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICBj
YXNlIExvY2FsQ2xvc3VyZVZhcjoKICAgICAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcjoKICAgICAg
ICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAg
ICAgICAgICBKU0xleGljYWxFbnZpcm9ubWVudCogbGV4aWNhbEVudmlyb25tZW50ID0gY3VycmVu
dEluc3RydWN0aW9uWzZdLnUubGV4aWNhbEVudmlyb25tZW50LmdldCgpOwotICAgICAgICAgICAg
ICAgIGlmIChsZXhpY2FsRW52aXJvbm1lbnQKLSAgICAgICAgICAgICAgICAgICAgJiYgbGV4aWNh
bEVudmlyb25tZW50LT5zeW1ib2xUYWJsZSgpLT5tX2Z1bmN0aW9uRW50ZXJlZE9uY2UuaXNTdGls
bFZhbGlkKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC53YXRjaHBvaW50cygpLmFk
ZExhemlseShsZXhpY2FsRW52aXJvbm1lbnQtPnN5bWJvbFRhYmxlKCktPm1fZnVuY3Rpb25FbnRl
cmVkT25jZSk7Ci0gICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoUGhhbnRvbSwgZ2V0RGly
ZWN0KG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVu
dEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCkpKSk7Ci0gICAgICAgICAgICAgICAgICAgIHNldChW
aXJ0dWFsUmVnaXN0ZXIoZHN0KSwgd2Vha0pTQ29uc3RhbnQobGV4aWNhbEVudmlyb25tZW50KSk7
Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KICAgICAgICAg
ICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGRzdCksIGdldFNjb3BlKFZpcnR1YWxSZWdpc3Rl
cihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSwgZGVwdGgpKTsKLSAgICAgICAgICAg
ICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lKCkpCi0gICAgICAgICAgICAgICAgICAgIGFkZFRvR3Jh
cGgoUGhhbnRvbSwgZ2V0RGlyZWN0KG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZChWaXJ0
dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCkpKSk7CiAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBjYXNlIER5bmFtaWM6
CkBAIC0zNDM3LDE5ICszNDQwLDU4IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2so
dW5zaWduZWQKICAgICAgICAgICAgIGNhc2UgR2xvYmFsVmFyOgogICAgICAgICAgICAgY2FzZSBH
bG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7CiAgICAgICAgICAgICAgICAgYWRkVG9H
cmFwaChQaGFudG9tLCBnZXQoVmlydHVhbFJlZ2lzdGVyKHNjb3BlKSkpOwotICAgICAgICAgICAg
ICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKGdsb2JhbE9iamVjdC0+c3ltYm9sVGFibGUo
KS0+bV9sb2NrKTsKLSAgICAgICAgICAgICAgICBTeW1ib2xUYWJsZUVudHJ5IGVudHJ5ID0gZ2xv
YmFsT2JqZWN0LT5zeW1ib2xUYWJsZSgpLT5nZXQobG9ja2VyLCB1aWQpOwotICAgICAgICAgICAg
ICAgIFZhcmlhYmxlV2F0Y2hwb2ludFNldCogd2F0Y2hwb2ludFNldCA9IGVudHJ5LndhdGNocG9p
bnRTZXQoKTsKLSAgICAgICAgICAgICAgICBKU1ZhbHVlIGluZmVycmVkVmFsdWUgPQotICAgICAg
ICAgICAgICAgICAgICB3YXRjaHBvaW50U2V0ID8gd2F0Y2hwb2ludFNldC0+aW5mZXJyZWRWYWx1
ZSgpIDogSlNWYWx1ZSgpOwotICAgICAgICAgICAgICAgIGlmICghaW5mZXJyZWRWYWx1ZSkgewot
ICAgICAgICAgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0gZ2V0UHJlZGlj
dGlvbigpOwotICAgICAgICAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGRzdCksIGFk
ZFRvR3JhcGgoR2V0R2xvYmFsVmFyLCBPcEluZm8ob3BlcmFuZCksIE9wSW5mbyhwcmVkaWN0aW9u
KSkpOwotICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBXYXRjaHBv
aW50U2V0KiB3YXRjaHBvaW50U2V0OworICAgICAgICAgICAgICAgIFNjb3BlT2Zmc2V0IG9mZnNl
dDsKKyAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKSVRM
b2NrZXIgbG9ja2VyKGdsb2JhbE9iamVjdC0+c3ltYm9sVGFibGUoKS0+bV9sb2NrKTsKKyAgICAg
ICAgICAgICAgICAgICAgU3ltYm9sVGFibGVFbnRyeSBlbnRyeSA9IGdsb2JhbE9iamVjdC0+c3lt
Ym9sVGFibGUoKS0+Z2V0KGxvY2tlciwgdWlkKTsKKyAgICAgICAgICAgICAgICAgICAgd2F0Y2hw
b2ludFNldCA9IGVudHJ5LndhdGNocG9pbnRTZXQoKTsKKyAgICAgICAgICAgICAgICAgICAgb2Zm
c2V0ID0gZW50cnkuc2NvcGVPZmZzZXQoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAg
ICAgICAgaWYgKHdhdGNocG9pbnRTZXQgJiYgd2F0Y2hwb2ludFNldC0+c3RhdGUoKSA9PSBJc1dh
dGNoZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gVGhpcyBoYXMgYSBmdW4gY29uY3VycmVu
Y3kgc3RvcnkuIFRoZXJlIGlzIHRoZSBwb3NzaWJpbGl0eSBvZiBhIHJhY2UgaW4gdHdvCisgICAg
ICAgICAgICAgICAgICAgIC8vIGRpcmVjdGlvbnM6CisgICAgICAgICAgICAgICAgICAgIC8vCisg
ICAgICAgICAgICAgICAgICAgIC8vIFdlIHNlZSB0aGF0IHRoZSBzZXQgSXNXYXRjaGVkLCBidXQg
aW4gdGhlIG1lYW50aW1lIGl0IGdldHMgaW52YWxpZGF0ZWQ6IHRoaXMgaXMKKyAgICAgICAgICAg
ICAgICAgICAgLy8gZmluZSBiZWNhdXNlIGlmIHdlIHNhdyB0aGF0IGl0IElzV2F0Y2hlZCB0aGVu
IHdlIGFkZCBhIHdhdGNocG9pbnQuIElmIGl0IGdldHMKKyAgICAgICAgICAgICAgICAgICAgLy8g
aW52YWxpZGF0ZWQsIHRoZW4gdGhpcyBjb21waWxhdGlvbiBpcyBpbnZhbGlkYXRlZC4gTm90ZSB0
aGF0IGluIHRoZSBtZWFudGltZSB3ZQorICAgICAgICAgICAgICAgICAgICAvLyBtYXkgbG9hZCBh
biBhYnN1cmQgdmFsdWUgZnJvbSB0aGUgZ2xvYmFsIG9iamVjdC4gSXQncyBmaW5lIHRvIGxvYWQg
YW4gYWJzdXJkCisgICAgICAgICAgICAgICAgICAgIC8vIHZhbHVlIGlmIHRoZSBjb21waWxhdGlv
biBpcyBpbnZhbGlkYXRlZCBhbnl3YXkuCisgICAgICAgICAgICAgICAgICAgIC8vCisgICAgICAg
ICAgICAgICAgICAgIC8vIFdlIHNlZSB0aGF0IHRoZSBzZXQgSXNXYXRjaGVkLCBidXQgdGhlIHZh
bHVlIGlzbid0IHlldCBpbml0aWFsaXplZDogdGhpcyBpc24ndAorICAgICAgICAgICAgICAgICAg
ICAvLyBwb3NzaWJsZSBiZWNhdXNlIG9mIHRoZSBvcmRlcmluZyBvZiBvcGVyYXRpb25zLgorICAg
ICAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgICAgICAvLyBIZXJlJ3MgaG93IHdl
IG9yZGVyIG9wZXJhdGlvbnM6CisgICAgICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAg
ICAgICAgIC8vIE1haW4gdGhyZWFkIHN0b3JlcyB0byB0aGUgZ2xvYmFsIG9iamVjdDogYWx3YXlz
IGZpcnN0IHN0b3JlIGEgdmFsdWUgZmlyc3QsIGFuZAorICAgICAgICAgICAgICAgICAgICAvLyBv
bmx5IGFmdGVyIHRoYXQgd2UgdG91Y2ggdGhlIHdhdGNocG9pbnQgc2V0LiBUaGVyZSBpcyBhIGZl
bmNlIGluIHRoZSB0b3VjaCwgdGhhdAorICAgICAgICAgICAgICAgICAgICAvLyBlbnN1cmVzIHRo
YXQgdGhlIHN0b3JlIHRvIHRoZSBnbG9iYWwgb2JqZWN0IGFsd2F5cyBoYXBwZW5zIGJlZm9yZSB0
aGUgdG91Y2ggb24gdGhlCisgICAgICAgICAgICAgICAgICAgIC8vIHNldC4KKyAgICAgICAgICAg
ICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAgICAgLy8gQ29tcGlsYXRpb24gdGhyZWFkOiBh
bHdheXMgZmlyc3QgbG9hZCB0aGUgc3RhdGUgb2YgdGhlIHdhdGNocG9pbnQgc2V0LCBhbmQgdGhl
bgorICAgICAgICAgICAgICAgICAgICAvLyBsb2FkIHRoZSB2YWx1ZS4gVGhlIFdhdGNocG9pbnRT
ZXQ6OnN0YXRlKCkgbWV0aG9kIGRvZXMgZmVuY2VzIGZvciB1cyB0byBlbnN1cmUKKyAgICAgICAg
ICAgICAgICAgICAgLy8gdGhhdCB0aGUgbG9hZCBvZiB0aGUgc3RhdGUgaGFwcGVucyBiZWZvcmUg
b3VyIGxvYWQgb2YgdGhlIHZhbHVlLgorICAgICAgICAgICAgICAgICAgICAvLworICAgICAgICAg
ICAgICAgICAgICAvLyBGaW5hbGl6aW5nIGNvbXBpbGF0aW9uOiB0aGlzIGhhcHBlbnMgb24gdGhl
IG1haW4gdGhyZWFkIGFuZCBzeW5jaHJvbm91c2x5IGNoZWNrcworICAgICAgICAgICAgICAgICAg
ICAvLyB2YWxpZGl0eSBvZiBhbGwgd2F0Y2hwb2ludCBzZXRzLgorICAgICAgICAgICAgICAgICAg
ICAvLworICAgICAgICAgICAgICAgICAgICAvLyBXZSB3aWxsIG9ubHkgcGVyZm9ybSBvcHRpbWl6
YXRpb25zIGlmIHRoZSBsb2FkIG9mIHRoZSBzdGF0ZSB5aWVsZHMgSXNXYXRjaGVkLiBUaGF0Cisg
ICAgICAgICAgICAgICAgICAgIC8vIG1lYW5zIHRoYXQgYXQgbGVhc3Qgb25lIHN0b3JlIHdvdWxk
IGhhdmUgaGFwcGVuZWQgdG8gaW5pdGlhbGl6ZSB0aGUgb3JpZ2luYWwgdmFsdWUKKyAgICAgICAg
ICAgICAgICAgICAgLy8gb2YgdGhlIHZhcmlhYmxlICh0aGF0IGlzLCB0aGUgdmFsdWUgd2UnZCBs
aWtlIHRvIGNvbnN0YW50IGZvbGQgdG8pLiBUaGVyZSBtYXkgYmUKKyAgICAgICAgICAgICAgICAg
ICAgLy8gb3RoZXIgc3RvcmVzIHRoYXQgaGFwcGVuIGFmdGVyIHRoYXQsIGJ1dCB0aG9zZSBzdG9y
ZXMgd2lsbCBpbnZhbGlkYXRlIHRoZQorICAgICAgICAgICAgICAgICAgICAvLyB3YXRjaHBvaW50
IHNldCBhbmQgYWxzbyB0aGUgY29tcGlsYXRpb24uCisgICAgICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgICAgICAgICBBU1NFUlQoYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4oJmdsb2JhbE9i
amVjdC0+dmFyaWFibGVBdChvZmZzZXQpKSA9PSBvcGVyYW5kKTsKKyAgICAgICAgICAgICAgICAg
ICAgSlNWYWx1ZSB2YWx1ZSA9IGdsb2JhbE9iamVjdC0+dmFyaWFibGVBdChvZmZzZXQpLmdldCgp
OworICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG1fZ3JhcGgud2F0Y2hwb2ludHMoKS5hZGRMYXppbHkod2F0Y2hwb2ludFNldCk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGRzdCksIHdlYWtKU0NvbnN0
YW50KHZhbHVlKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgICAgICBtX2dyYXBoLndhdGNocG9pbnRzKCkuYWRkTGF6aWx5KHdhdGNocG9pbnRTZXQpOwot
ICAgICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoZHN0KSwgd2Vha0pTQ29uc3RhbnQo
aW5mZXJyZWRWYWx1ZSkpOworICAgICAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rp
b24gPSBnZXRQcmVkaWN0aW9uKCk7CisgICAgICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rl
cihkc3QpLCBhZGRUb0dyYXBoKEdldEdsb2JhbFZhciwgT3BJbmZvKG9wZXJhbmQpLCBPcEluZm8o
cHJlZGljdGlvbikpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgIGNhc2UgTG9jYWxDbG9zdXJlVmFyOgpAQCAtMzQ5Niw3ICszNTM4LDcgQEAgYm9v
bCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgICAgIHVp
ZCA9IG51bGxwdHI7CiAgICAgICAgICAgICAKICAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0
dXJlID0gbnVsbHB0cjsKLSAgICAgICAgICAgIFZhcmlhYmxlV2F0Y2hwb2ludFNldCogd2F0Y2hw
b2ludHMgPSBudWxscHRyOworICAgICAgICAgICAgV2F0Y2hwb2ludFNldCogd2F0Y2hwb2ludHMg
PSBudWxscHRyOwogICAgICAgICAgICAgdWludHB0cl90IG9wZXJhbmQ7CiAgICAgICAgICAgICB7
CiAgICAgICAgICAgICAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIobV9pbmxpbmVTdGFj
a1RvcC0+bV9wcm9maWxlZEJsb2NrLT5tX2xvY2spOwpAQCAtMzUzOSw4ICszNTgxLDEwIEBAIGJv
b2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgTm9kZSogdmFsdWVOb2RlID0gZ2V0KFZpcnR1YWxSZWdpc3Rlcih2
YWx1ZSkpOwogICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoUHV0R2xvYmFsVmFyLCBPcEluZm8o
b3BlcmFuZCksIHZhbHVlTm9kZSk7Ci0gICAgICAgICAgICAgICAgaWYgKHdhdGNocG9pbnRzICYm
IHdhdGNocG9pbnRzLT5zdGF0ZSgpICE9IElzSW52YWxpZGF0ZWQpCi0gICAgICAgICAgICAgICAg
ICAgIGFkZFRvR3JhcGgoTm90aWZ5V3JpdGUsIE9wSW5mbyh3YXRjaHBvaW50cyksIHZhbHVlTm9k
ZSk7CisgICAgICAgICAgICAgICAgaWYgKHdhdGNocG9pbnRzICYmIHdhdGNocG9pbnRzLT5zdGF0
ZSgpICE9IElzSW52YWxpZGF0ZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gTXVzdCBoYXBw
ZW4gYWZ0ZXIgdGhlIHN0b3JlLiBTZWUgY29tbWVudCBmb3IgR2V0R2xvYmFsVmFyLgorICAgICAg
ICAgICAgICAgICAgICBhZGRUb0dyYXBoKE5vdGlmeVdyaXRlLCBPcEluZm8od2F0Y2hwb2ludHMp
KTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgLy8gS2VlcCBzY29wZSBhbGl2
ZSB1bnRpbCBhZnRlciBwdXQuCiAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChQaGFudG9tLCBn
ZXQoVmlydHVhbFJlZ2lzdGVyKHNjb3BlKSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwpAQCAt
MzU1MSwxMCArMzU5NSwxMiBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2ln
bmVkCiAgICAgICAgICAgICAgICAgTm9kZSogc2NvcGVOb2RlID0gZ2V0KFZpcnR1YWxSZWdpc3Rl
cihzY29wZSkpOwogICAgICAgICAgICAgICAgIE5vZGUqIHZhbHVlTm9kZSA9IGdldChWaXJ0dWFs
UmVnaXN0ZXIodmFsdWUpKTsKIAotICAgICAgICAgICAgICAgIGlmICh3YXRjaHBvaW50cyAmJiB3
YXRjaHBvaW50cy0+c3RhdGUoKSAhPSBJc0ludmFsaWRhdGVkKQotICAgICAgICAgICAgICAgICAg
ICBhZGRUb0dyYXBoKE5vdGlmeVdyaXRlLCBPcEluZm8od2F0Y2hwb2ludHMpLCB2YWx1ZU5vZGUp
OwotCiAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChQdXRDbG9zdXJlVmFyLCBPcEluZm8ob3Bl
cmFuZCksIHNjb3BlTm9kZSwgdmFsdWVOb2RlKTsKKworICAgICAgICAgICAgICAgIGlmICh3YXRj
aHBvaW50cyAmJiB3YXRjaHBvaW50cy0+c3RhdGUoKSAhPSBJc0ludmFsaWRhdGVkKSB7CisgICAg
ICAgICAgICAgICAgICAgIC8vIE11c3QgaGFwcGVuIGFmdGVyIHRoZSBzdG9yZS4gU2VlIGNvbW1l
bnQgZm9yIEdldEdsb2JhbFZhci4KKyAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChOb3Rp
ZnlXcml0ZSwgT3BJbmZvKHdhdGNocG9pbnRzKSk7CisgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgY2FzZSBEeW5hbWlj
OgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNw
cAkocmV2aXNpb24gMTgyMDY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBh
YmlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05Niw3ICs5Niw2IEBAIENhcGFiaWxpdHlM
ZXZlbCBjYXBhYmlsaXR5TGV2ZWwoT3Bjb2RlSUQKICAgICAKICAgICBzd2l0Y2ggKG9wY29kZUlE
KSB7CiAgICAgY2FzZSBvcF9lbnRlcjoKLSAgICBjYXNlIG9wX3RvdWNoX2VudHJ5OgogICAgIGNh
c2Ugb3BfdG9fdGhpczoKICAgICBjYXNlIG9wX2NoZWNrX3RkejoKICAgICBjYXNlIG9wX2NyZWF0
ZV90aGlzOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJ
KHJldmlzaW9uIDE4MjA2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJl
cml6ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC04NjAsMTEgKzg2MCwxNyBAQCB2b2lkIGNsb2JiZXJp
emUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgY2FzZSBOZXdTdHJpbmdPYmplY3Q6CiAg
ICAgY2FzZSBQaGFudG9tTmV3T2JqZWN0OgogICAgIGNhc2UgTWF0ZXJpYWxpemVOZXdPYmplY3Q6
Ci0gICAgY2FzZSBOZXdGdW5jdGlvbjoKICAgICAgICAgcmVhZChIZWFwT2JqZWN0Q291bnQpOwog
ICAgICAgICB3cml0ZShIZWFwT2JqZWN0Q291bnQpOwogICAgICAgICByZXR1cm47CiAgICAgICAg
IAorICAgIGNhc2UgTmV3RnVuY3Rpb246CisgICAgICAgIGlmIChub2RlLT5jYXN0T3BlcmFuZDxG
dW5jdGlvbkV4ZWN1dGFibGUqPigpLT5mdW5jdGlvblJlYWxsb2NhdGlvbldhdGNocG9pbnRTZXQo
KS5pc1N0aWxsVmFsaWQoKSkKKyAgICAgICAgICAgIHdyaXRlKFdhdGNocG9pbnRfZmlyZSk7Cisg
ICAgICAgIHJlYWQoSGVhcE9iamVjdENvdW50KTsKKyAgICAgICAgd3JpdGUoSGVhcE9iamVjdENv
dW50KTsKKyAgICAgICAgcmV0dXJuOworCiAgICAgY2FzZSBSZWdFeHBFeGVjOgogICAgIGNhc2Ug
UmVnRXhwVGVzdDoKICAgICAgICAgcmVhZChSZWdFeHBTdGF0ZSk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkocmV2aXNpb24gMTgyMDY5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMwOCw4ICsz
MDgsOCBAQCB2b2lkIEdyYXBoOjpkdW1wKFByaW50U3RyZWFtJiBvdXQsIGNvbnN0CiAgICAgICAg
IG91dC5wcmludChjb21tYSwgIl4iLCBub2RlLT5waGkoKS0+aW5kZXgoKSk7CiAgICAgaWYgKG5v
ZGUtPmhhc0V4ZWN1dGlvbkNvdW50ZXIoKSkKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCBSYXdQ
b2ludGVyKG5vZGUtPmV4ZWN1dGlvbkNvdW50ZXIoKSkpOwotICAgIGlmIChub2RlLT5oYXNWYXJp
YWJsZVdhdGNocG9pbnRTZXQoKSkKLSAgICAgICAgb3V0LnByaW50KGNvbW1hLCBSYXdQb2ludGVy
KG5vZGUtPnZhcmlhYmxlV2F0Y2hwb2ludFNldCgpKSk7CisgICAgaWYgKG5vZGUtPmhhc1dhdGNo
cG9pbnRTZXQoKSkKKyAgICAgICAgb3V0LnByaW50KGNvbW1hLCBSYXdQb2ludGVyKG5vZGUtPndh
dGNocG9pbnRTZXQoKSkpOwogICAgIGlmIChub2RlLT5oYXNUeXBlZEFycmF5KCkpCiAgICAgICAg
IG91dC5wcmludChjb21tYSwgaW5Db250ZXh0KEpTVmFsdWUobm9kZS0+dHlwZWRBcnJheSgpKSwg
Y29udGV4dCkpOwogICAgIGlmIChub2RlLT5oYXNTdG9yYWdlUG9pbnRlcigpKQpAQCAtMTAyNSw2
ICsxMDI1LDggQEAgSlNWYWx1ZSBHcmFwaDo6dHJ5R2V0Q29uc3RhbnRQcm9wZXJ0eShjbwogCiBK
U1ZhbHVlIEdyYXBoOjp0cnlHZXRDb25zdGFudENsb3N1cmVWYXIoSlNWYWx1ZSBiYXNlLCBTY29w
ZU9mZnNldCBvZmZzZXQpCiB7CisgICAgLy8gVGhpcyBoYXMgYW4gYXdlc29tZSBjb25jdXJyZW5j
eSBzdG9yeS4gU2VlIGNvbW1lbnQgZm9yIEdldEdsb2JhbFZhciBpbiBCeXRlQ29kZVBhcnNlci4K
KyAgICAKICAgICBpZiAoIWJhc2UpCiAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CiAgICAgCkBA
IC0xMDMzLDI0ICsxMDM1LDI4IEBAIEpTVmFsdWUgR3JhcGg6OnRyeUdldENvbnN0YW50Q2xvc3Vy
ZVZhcigKICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKICAgICAKICAgICBTeW1ib2xUYWJsZSog
c3ltYm9sVGFibGUgPSBhY3RpdmF0aW9uLT5zeW1ib2xUYWJsZSgpOwotICAgIENvbmN1cnJlbnRK
SVRMb2NrZXIgbG9ja2VyKHN5bWJvbFRhYmxlLT5tX2xvY2spOwotICAgIAotICAgIGlmIChzeW1i
b2xUYWJsZS0+bV9mdW5jdGlvbkVudGVyZWRPbmNlLmhhc0JlZW5JbnZhbGlkYXRlZCgpKQotICAg
ICAgICByZXR1cm4gSlNWYWx1ZSgpOwotICAgIAotICAgIFN5bWJvbFRhYmxlRW50cnkqIGVudHJ5
ID0gc3ltYm9sVGFibGUtPmVudHJ5Rm9yKGxvY2tlciwgb2Zmc2V0KTsKLSAgICBpZiAoIWVudHJ5
KQotICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwotICAgIAotICAgIFZhcmlhYmxlV2F0Y2hwb2lu
dFNldCogc2V0ID0gZW50cnktPndhdGNocG9pbnRTZXQoKTsKLSAgICBpZiAoIXNldCkKLSAgICAg
ICAgcmV0dXJuIEpTVmFsdWUoKTsKLSAgICAKLSAgICBKU1ZhbHVlIHZhbHVlID0gc2V0LT5pbmZl
cnJlZFZhbHVlKCk7Ci0gICAgaWYgKCF2YWx1ZSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsK
KyAgICBKU1ZhbHVlIHZhbHVlOworICAgIFdhdGNocG9pbnRTZXQqIHNldDsKKyAgICB7CisgICAg
ICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKHN5bWJvbFRhYmxlLT5tX2xvY2spOworICAg
ICAgICAKKyAgICAgICAgU3ltYm9sVGFibGVFbnRyeSogZW50cnkgPSBzeW1ib2xUYWJsZS0+ZW50
cnlGb3IobG9ja2VyLCBvZmZzZXQpOworICAgICAgICBpZiAoIWVudHJ5KQorICAgICAgICAgICAg
cmV0dXJuIEpTVmFsdWUoKTsKKyAgICAgICAgCisgICAgICAgIHNldCA9IGVudHJ5LT53YXRjaHBv
aW50U2V0KCk7CisgICAgICAgIGlmICghc2V0KQorICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUo
KTsKKyAgICAgICAgCisgICAgICAgIGlmIChzZXQtPnN0YXRlKCkgIT0gSXNXYXRjaGVkKQorICAg
ICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKKyAgICAgICAgCisgICAgICAgIEFTU0VSVChlbnRy
eS0+c2NvcGVPZmZzZXQoKSA9PSBvZmZzZXQpOworICAgICAgICB2YWx1ZSA9IGFjdGl2YXRpb24t
PnZhcmlhYmxlQXQob2Zmc2V0KS5nZXQoKTsKKyAgICAgICAgaWYgKCF2YWx1ZSkKKyAgICAgICAg
ICAgIHJldHVybiBKU1ZhbHVlKCk7CisgICAgfQogICAgIAotICAgIHdhdGNocG9pbnRzKCkuYWRk
TGF6aWx5KHN5bWJvbFRhYmxlLT5tX2Z1bmN0aW9uRW50ZXJlZE9uY2UpOwogICAgIHdhdGNocG9p
bnRzKCkuYWRkTGF6aWx5KHNldCk7CiAgICAgCiAgICAgcmV0dXJuIHZhbHVlOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDE4MjA2OSkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjE5LDE0ICsx
MjE5LDE0IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgbV9vcEluZm8gPSBiaXR3aXNlX2Nhc3Q8
dWludHB0cl90Pih2YWx1ZSk7CiAgICAgfQogICAgIAotICAgIGJvb2wgaGFzVmFyaWFibGVXYXRj
aHBvaW50U2V0KCkKKyAgICBib29sIGhhc1dhdGNocG9pbnRTZXQoKQogICAgIHsKICAgICAgICAg
cmV0dXJuIG9wKCkgPT0gTm90aWZ5V3JpdGU7CiAgICAgfQogICAgIAotICAgIFZhcmlhYmxlV2F0
Y2hwb2ludFNldCogdmFyaWFibGVXYXRjaHBvaW50U2V0KCkKKyAgICBXYXRjaHBvaW50U2V0KiB3
YXRjaHBvaW50U2V0KCkKICAgICB7Ci0gICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFZh
cmlhYmxlV2F0Y2hwb2ludFNldCo+KG1fb3BJbmZvKTsKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJw
cmV0X2Nhc3Q8V2F0Y2hwb2ludFNldCo+KG1fb3BJbmZvKTsKICAgICB9CiAgICAgCiAgICAgYm9v
bCBoYXNUeXBlZEFycmF5KCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3Bl
cmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdP
cGVyYXRpb25zLmNwcAkocmV2aXNpb24gMTgyMDY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA1NCwxMyArMTA1NCwx
MiBAQCBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblN3aXRjaFN0cmluCiAgICAgcmV0dXJu
IHN0YXRpY19jYXN0PGNoYXIqPihleGVjLT5jb2RlQmxvY2soKS0+c3RyaW5nU3dpdGNoSnVtcFRh
YmxlKHRhYmxlSW5kZXgpLmN0aUZvclZhbHVlKHN0cmluZy0+dmFsdWUoZXhlYykuaW1wbCgpKS5l
eGVjdXRhYmxlQWRkcmVzcygpKTsKIH0KIAotdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5v
dGlmeVdyaXRlKEV4ZWNTdGF0ZSogZXhlYywgVmFyaWFibGVXYXRjaHBvaW50U2V0KiBzZXQsIEVu
Y29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25O
b3RpZnlXcml0ZShFeGVjU3RhdGUqIGV4ZWMsIFdhdGNocG9pbnRTZXQqIHNldCkKIHsKICAgICBW
TSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZt
LCBleGVjKTsKLSAgICBKU1ZhbHVlIHZhbHVlID0gSlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1
ZSk7CiAKLSAgICBzZXQtPm5vdGlmeVdyaXRlKHZtLCB2YWx1ZSwgIkV4ZWN1dGVkIE5vdGlmeVdy
aXRlIik7CisgICAgc2V0LT50b3VjaCgiRXhlY3V0ZWQgTm90aWZ5V3JpdGUiKTsKIH0KIAogdm9p
ZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRocm93U3RhY2tPdmVyZmxvd0ZvclZhcmFyZ3MoRXhl
Y1N0YXRlKiBleGVjKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRp
b25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRp
b25zLmgJKHJldmlzaW9uIDE4MjA2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
T3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjUsNyArMTI1LDcgQEAgSlNDZWxsKiBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvbk1ha2VSb3BlMgogSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvbk1ha2VSb3BlMyhFeGVjU3RhdGUqLCBKU1N0cmluZyosIEpTU3RyaW5nKiwgSlNTdHJp
bmcqKTsKIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uRmluZFN3aXRjaEltbVRhcmdldEZv
ckRvdWJsZShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSwgc2l6ZV90IHRhYmxlSW5kZXgpOwog
Y2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25Td2l0Y2hTdHJpbmcoRXhlY1N0YXRlKiwgc2l6
ZV90IHRhYmxlSW5kZXgsIEpTU3RyaW5nKik7Ci12b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
Tm90aWZ5V3JpdGUoRXhlY1N0YXRlKiwgVmFyaWFibGVXYXRjaHBvaW50U2V0KiwgRW5jb2RlZEpT
VmFsdWUpOwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5vdGlmeVdyaXRlKEV4ZWNTdGF0
ZSosIFdhdGNocG9pbnRTZXQqKTsKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25UaHJvd1N0
YWNrT3ZlcmZsb3dGb3JWYXJhcmdzKEV4ZWNTdGF0ZSopIFdURl9JTlRFUk5BTDsKIGludDMyX3Qg
SklUX09QRVJBVElPTiBvcGVyYXRpb25TaXplT2ZWYXJhcmdzKEV4ZWNTdGF0ZSosIEVuY29kZWRK
U1ZhbHVlIGFyZ3VtZW50cywgaW50MzJfdCBmaXJzdFZhckFyZ09mZnNldCk7CiB2b2lkIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uTG9hZFZhcmFyZ3MoRXhlY1N0YXRlKiwgaW50MzJfdCBmaXJzdEVs
ZW1lbnREZXN0LCBFbmNvZGVkSlNWYWx1ZSBhcmd1bWVudHMsIGludDMyX3Qgb2Zmc2V0LCBpbnQz
Ml90IGxlbmd0aCwgaW50MzJfdCBtYW5kYXRvcnlNaW5pbXVtKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2
aXNpb24gMTgyMDY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2
ZUpJVDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzk4MiwzMiArMzk4Miw3IEBAIHZvaWQg
U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICB9CiAKICAgICBjYXNlIE5v
dGlmeVdyaXRlOiB7Ci0gICAgICAgIFZhcmlhYmxlV2F0Y2hwb2ludFNldCogc2V0ID0gbm9kZS0+
dmFyaWFibGVXYXRjaHBvaW50U2V0KCk7Ci0gICAgCi0gICAgICAgIEpTVmFsdWVPcGVyYW5kIHZh
bHVlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgR1BSUmVnIHZhbHVlVGFnR1BSID0g
dmFsdWUudGFnR1BSKCk7Ci0gICAgICAgIEdQUlJlZyB2YWx1ZVBheWxvYWRHUFIgPSB2YWx1ZS5w
YXlsb2FkR1BSKCk7Ci0gICAgCi0gICAgICAgIEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOwotICAg
ICAgICBHUFJSZWcgdGVtcEdQUiA9IHRlbXAuZ3ByKCk7Ci0gICAgCi0gICAgICAgIG1faml0Lmxv
YWQ4KHNldC0+YWRkcmVzc09mU3RhdGUoKSwgdGVtcEdQUik7Ci0gICAgCi0gICAgICAgIEpJVENv
bXBpbGVyOjpKdW1wIGlzRG9uZSA9IG1faml0LmJyYW5jaDMyKEpJVENvbXBpbGVyOjpFcXVhbCwg
dGVtcEdQUiwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKTsKLSAgICAgICAgSklUQ29tcGls
ZXI6Okp1bXBMaXN0IG5vdGlmeVNsb3c7Ci0gICAgICAgIG5vdGlmeVNsb3cuYXBwZW5kKG1faml0
LmJyYW5jaDMyKAotICAgICAgICAgICAgSklUQ29tcGlsZXI6Ok5vdEVxdWFsLAotICAgICAgICAg
ICAgSklUQ29tcGlsZXI6OkFic29sdXRlQWRkcmVzcyhzZXQtPmFkZHJlc3NPZkluZmVycmVkVmFs
dWUoKS0+cGF5bG9hZFBvaW50ZXIoKSksCi0gICAgICAgICAgICB2YWx1ZVBheWxvYWRHUFIpKTsK
LSAgICAgICAgbm90aWZ5U2xvdy5hcHBlbmQobV9qaXQuYnJhbmNoMzIoCi0gICAgICAgICAgICBK
SVRDb21waWxlcjo6Tm90RXF1YWwsIAotICAgICAgICAgICAgSklUQ29tcGlsZXI6OkFic29sdXRl
QWRkcmVzcyhzZXQtPmFkZHJlc3NPZkluZmVycmVkVmFsdWUoKS0+dGFnUG9pbnRlcigpKSwKLSAg
ICAgICAgICAgIHZhbHVlVGFnR1BSKSk7Ci0gICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAot
ICAgICAgICAgICAgc2xvd1BhdGhDYWxsKG5vdGlmeVNsb3csIHRoaXMsIG9wZXJhdGlvbk5vdGlm
eVdyaXRlLCBOb1Jlc3VsdCwgc2V0LCB2YWx1ZVRhZ0dQUiwgdmFsdWVQYXlsb2FkR1BSKSk7Ci0g
ICAgICAgIGlzRG9uZS5saW5rKCZtX2ppdCk7Ci0gICAgCi0gICAgICAgIG5vUmVzdWx0KG5vZGUp
OworICAgICAgICBjb21waWxlTm90aWZ5V3JpdGUobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAg
IH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklUNjQuY3BwCShyZXZpc2lvbiAxODIwNjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MDE0LDI2ICs0
MDE0LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgIH0K
IAogICAgIGNhc2UgTm90aWZ5V3JpdGU6IHsKLSAgICAgICAgVmFyaWFibGVXYXRjaHBvaW50U2V0
KiBzZXQgPSBub2RlLT52YXJpYWJsZVdhdGNocG9pbnRTZXQoKTsKLSAgICAKLSAgICAgICAgSlNW
YWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBHUFJSZWcg
dmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKLSAgICAKLSAgICAgICAgR1BSVGVtcG9yYXJ5IHRlbXAo
dGhpcyk7Ci0gICAgICAgIEdQUlJlZyB0ZW1wR1BSID0gdGVtcC5ncHIoKTsKLSAgICAKLSAgICAg
ICAgbV9qaXQubG9hZDgoc2V0LT5hZGRyZXNzT2ZTdGF0ZSgpLCB0ZW1wR1BSKTsKLSAgICAKLSAg
ICAgICAgSklUQ29tcGlsZXI6Okp1bXAgaXNEb25lID0KLSAgICAgICAgICAgIG1faml0LmJyYW5j
aDMyKEpJVENvbXBpbGVyOjpFcXVhbCwgdGVtcEdQUiwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0
ZWQpKTsKLSAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgc2xvd0Nhc2UgPSBtX2ppdC5icmFuY2g2
NChKSVRDb21waWxlcjo6Tm90RXF1YWwsCi0gICAgICAgICAgICBKSVRDb21waWxlcjo6QWJzb2x1
dGVBZGRyZXNzKHNldC0+YWRkcmVzc09mSW5mZXJyZWRWYWx1ZSgpKSwgdmFsdWVHUFIpOwotICAg
ICAgICBpc0RvbmUubGluaygmbV9qaXQpOwotICAgIAotICAgICAgICBhZGRTbG93UGF0aEdlbmVy
YXRvcigKLSAgICAgICAgICAgIHNsb3dQYXRoQ2FsbChzbG93Q2FzZSwgdGhpcywgb3BlcmF0aW9u
Tm90aWZ5V3JpdGUsIE5vUmVzdWx0LCBzZXQsIHZhbHVlR1BSKSk7Ci0KLSAgICAgICAgbm9SZXN1
bHQobm9kZSk7CisgICAgICAgIGNvbXBpbGVOb3RpZnlXcml0ZShub2RlKTsKICAgICAgICAgYnJl
YWs7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0
aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMTgyMDY5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQzNjUsOCAr
NDM2NSwxMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTmV3RnVuY3Rpb24oCiAgICAg
U3BlY3VsYXRlQ2VsbE9wZXJhbmQgc2NvcGUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwogICAgIEdQ
UlJlZyBzY29wZUdQUiA9IHNjb3BlLmdwcigpOwogICAgIGZsdXNoUmVnaXN0ZXJzKCk7Ci0gICAg
Y2FsbE9wZXJhdGlvbigKLSAgICAgICAgb3BlcmF0aW9uTmV3RnVuY3Rpb24sIHJlc3VsdEdQUiwg
c2NvcGVHUFIsIG5vZGUtPmNhc3RPcGVyYW5kPEZ1bmN0aW9uRXhlY3V0YWJsZSo+KCkpOworICAg
IEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IG5vZGUtPmNhc3RPcGVyYW5kPEZ1bmN0
aW9uRXhlY3V0YWJsZSo+KCk7CisgICAgSl9KSVRPcGVyYXRpb25fRUpzY0MgZnVuY3Rpb247Cisg
ICAgaWYgKGV4ZWN1dGFibGUtPmZ1bmN0aW9uUmVhbGxvY2F0aW9uV2F0Y2hwb2ludFNldCgpLmlz
U3RpbGxWYWxpZCgpKQorICAgICAgICBmdW5jdGlvbiA9IG9wZXJhdGlvbk5ld0Z1bmN0aW9uOwor
ICAgIGVsc2UKKyAgICAgICAgZnVuY3Rpb24gPSBvcGVyYXRpb25OZXdGdW5jdGlvbldpdGhJbnZh
bGlkYXRlZFJlYWxsb2NhdGlvbldhdGNocG9pbnQ7CisgICAgY2FsbE9wZXJhdGlvbihmdW5jdGlv
biwgcmVzdWx0R1BSLCBzY29wZUdQUiwgZXhlY3V0YWJsZSk7CiAgICAgY2VsbFJlc3VsdChyZXN1
bHRHUFIsIG5vZGUpOwogfQogCkBAIC00NzEyLDYgKzQ3MTcsMjEgQEAgdm9pZCBTcGVjdWxhdGl2
ZUpJVDo6Y29tcGlsZUNyZWF0ZUNsb25lZAogICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBub2Rl
KTsKIH0KIAordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU5vdGlmeVdyaXRlKE5vZGUqIG5v
ZGUpCit7CisgICAgV2F0Y2hwb2ludFNldCogc2V0ID0gbm9kZS0+d2F0Y2hwb2ludFNldCgpOwor
ICAgIAorICAgIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dDYXNlID0gbV9qaXQuYnJhbmNoOCgKKyAg
ICAgICAgSklUQ29tcGlsZXI6Ok5vdEVxdWFsLAorICAgICAgICBKSVRDb21waWxlcjo6QWJzb2x1
dGVBZGRyZXNzKHNldC0+YWRkcmVzc09mU3RhdGUoKSksCisgICAgICAgIFRydXN0ZWRJbW0zMihJ
c0ludmFsaWRhdGVkKSk7CisgICAgCisgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCisgICAgICAg
IHNsb3dQYXRoQ2FsbChzbG93Q2FzZSwgdGhpcywgb3BlcmF0aW9uTm90aWZ5V3JpdGUsIE5vUmVz
dWx0LCBzZXQpKTsKKyAgICAKKyAgICBub1Jlc3VsdChub2RlKTsKK30KKwogYm9vbCBTcGVjdWxh
dGl2ZUpJVDo6Y29tcGlsZVJlZ0V4cEV4ZWMoTm9kZSogbm9kZSkKIHsKICAgICB1bnNpZ25lZCBi
cmFuY2hJbmRleEluQmxvY2sgPSBkZXRlY3RQZWVwSG9sZUJyYW5jaCgpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkocmV2aXNpb24gMTgy
MDY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xNDY2LDYgKzE0NjYsMTIgQEAgcHVibGljOgogICAgICAgICByZXR1
cm4gYXBwZW5kQ2FsbChvcGVyYXRpb24pOwogICAgIH0KIAorICAgIEpJVENvbXBpbGVyOjpDYWxs
IGNhbGxPcGVyYXRpb24oVl9KSVRPcGVyYXRpb25fRVdzIG9wZXJhdGlvbiwgV2F0Y2hwb2ludFNl
dCogd2F0Y2hwb2ludFNldCkKKyAgICB7CisgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0
aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRyKHdhdGNocG9pbnRTZXQpKTsKKyAgICAgICAgcmV0dXJu
IGFwcGVuZENhbGwob3BlcmF0aW9uKTsKKyAgICB9CisKICAgICBKSVRDb21waWxlcjo6Q2FsbCBj
YWxsT3BlcmF0aW9uKERfSklUT3BlcmF0aW9uX0VKIG9wZXJhdGlvbiwgRlBSUmVnIHJlc3VsdCwg
R1BSUmVnIGFyZzEpCiAgICAgewogICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVj
U3RhdGUoYXJnMSk7CkBAIC0yMjEzLDYgKzIyMTksNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBjb21w
aWxlUHV0VG9Bcmd1bWVudHMoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZUNyZWF0ZVNjb3BlZEFy
Z3VtZW50cyhOb2RlKik7CiAgICAgdm9pZCBjb21waWxlQ3JlYXRlQ2xvbmVkQXJndW1lbnRzKE5v
ZGUqKTsKKyAgICB2b2lkIGNvbXBpbGVOb3RpZnlXcml0ZShOb2RlKik7CiAgICAgYm9vbCBjb21w
aWxlUmVnRXhwRXhlYyhOb2RlKik7CiAgICAgCiAgICAgSklUQ29tcGlsZXI6Okp1bXAgYnJhbmNo
SXNDZWxsKEpTVmFsdWVSZWdzKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
VmFyYXJnc0ZvcndhcmRpbmdQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlLmNwcAkocmV2aXNpb24gMTgyMDY5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkRGR0Nsb2Ji
ZXJpemUuaCIKICNpbmNsdWRlICJERkdHcmFwaC5oIgogI2luY2x1ZGUgIkRGR1BoYXNlLmgiCisj
aW5jbHVkZSAiSlNDSW5saW5lcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW50cmluc2ljUmVwb3NpdG9y
eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW50cmluc2lj
UmVwb3NpdG9yeS5oCShyZXZpc2lvbiAxODIwNjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZnRsL0ZUTEludHJpbnNpY1JlcG9zaXRvcnkuaAkod29ya2luZyBjb3B5KQpAQCAtMTA2LDYgKzEw
Niw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKICAgICBtYWNybyhWX0pJVE9w
ZXJhdGlvbl9FQywgZnVuY3Rpb25UeXBlKHZvaWRUeXBlLCBpbnRQdHIsIGludFB0cikpIFwKICAg
ICBtYWNybyhWX0pJVE9wZXJhdGlvbl9FQ2IsIGZ1bmN0aW9uVHlwZSh2b2lkVHlwZSwgaW50UHRy
LCBpbnRQdHIpKSBcCiAgICAgbWFjcm8oVl9KSVRPcGVyYXRpb25fRVZ3c0osIGZ1bmN0aW9uVHlw
ZSh2b2lkVHlwZSwgaW50UHRyLCBpbnRQdHIsIGludDY0KSkgXAorICAgIG1hY3JvKFZfSklUT3Bl
cmF0aW9uX0VXcywgZnVuY3Rpb25UeXBlKHZvaWRUeXBlLCBpbnRQdHIsIGludFB0cikpIFwKICAg
ICBtYWNybyhWX0pJVE9wZXJhdGlvbl9FWkpaWlosIGZ1bmN0aW9uVHlwZSh2b2lkVHlwZSwgaW50
UHRyLCBpbnQzMiwgaW50NjQsIGludDMyLCBpbnQzMiwgaW50MzIpKSBcCiAgICAgbWFjcm8oVl9K
SVRPcGVyYXRpb25fSiwgZnVuY3Rpb25UeXBlKHZvaWRUeXBlLCBpbnQ2NCkpIFwKICAgICBtYWNy
byhWX0pJVE9wZXJhdGlvbl9aLCBmdW5jdGlvblR5cGUodm9pZFR5cGUsIGludDMyKSkgXApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJ
KHJldmlzaW9uIDE4MjA2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJE
RkdUb0xMVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNzgzLDI5ICszNzgzLDE5IEBAIHByaXZh
dGU6CiAgICAgCiAgICAgdm9pZCBjb21waWxlTm90aWZ5V3JpdGUoKQogICAgIHsKLSAgICAgICAg
VmFyaWFibGVXYXRjaHBvaW50U2V0KiBzZXQgPSBtX25vZGUtPnZhcmlhYmxlV2F0Y2hwb2ludFNl
dCgpOwotICAgICAgICAKLSAgICAgICAgTFZhbHVlIHZhbHVlID0gbG93SlNWYWx1ZShtX25vZGUt
PmNoaWxkMSgpKTsKKyAgICAgICAgV2F0Y2hwb2ludFNldCogc2V0ID0gbV9ub2RlLT53YXRjaHBv
aW50U2V0KCk7CiAgICAgICAgIAogICAgICAgICBMQmFzaWNCbG9jayBpc05vdEludmFsaWRhdGVk
ID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJOb3RpZnlXcml0ZSBub3QgaW52YWxpZGF0ZWQgY2Fz
ZSIpKTsKLSAgICAgICAgTEJhc2ljQmxvY2sgbm90aWZ5U2xvdyA9IEZUTF9ORVdfQkxPQ0sobV9v
dXQsICgiTm90aWZ5V3JpdGUgbm90aWZ5IHNsb3cgY2FzZSIpKTsKICAgICAgICAgTEJhc2ljQmxv
Y2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJOb3RpZnlXcml0ZSBjb250
aW51YXRpb24iKSk7CiAgICAgICAgIAogICAgICAgICBMVmFsdWUgc3RhdGUgPSBtX291dC5sb2Fk
OChtX291dC5hYnNvbHV0ZShzZXQtPmFkZHJlc3NPZlN0YXRlKCkpKTsKLSAgICAgICAgCiAgICAg
ICAgIG1fb3V0LmJyYW5jaCgKICAgICAgICAgICAgIG1fb3V0LmVxdWFsKHN0YXRlLCBtX291dC5j
b25zdEludDgoSXNJbnZhbGlkYXRlZCkpLAogICAgICAgICAgICAgdXN1YWxseShjb250aW51YXRp
b24pLCByYXJlbHkoaXNOb3RJbnZhbGlkYXRlZCkpOwogICAgICAgICAKLSAgICAgICAgTEJhc2lj
QmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhpc05vdEludmFsaWRhdGVkLCBub3RpZnlT
bG93KTsKLQotICAgICAgICBtX291dC5icmFuY2goCi0gICAgICAgICAgICBtX291dC5lcXVhbCh2
YWx1ZSwgbV9vdXQubG9hZDY0KG1fb3V0LmFic29sdXRlKHNldC0+YWRkcmVzc09mSW5mZXJyZWRW
YWx1ZSgpKSkpLAotICAgICAgICAgICAgdW5zdXJlKGNvbnRpbnVhdGlvbiksIHVuc3VyZShub3Rp
ZnlTbG93KSk7Ci0KLSAgICAgICAgbV9vdXQuYXBwZW5kVG8obm90aWZ5U2xvdywgY29udGludWF0
aW9uKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhpc05v
dEludmFsaWRhdGVkLCBjb250aW51YXRpb24pOwogCi0gICAgICAgIHZtQ2FsbChtX291dC5vcGVy
YXRpb24ob3BlcmF0aW9uTm90aWZ5V3JpdGUpLCBtX2NhbGxGcmFtZSwgbV9vdXQuY29uc3RJbnRQ
dHIoc2V0KSwgdmFsdWUpOworICAgICAgICB2bUNhbGwobV9vdXQub3BlcmF0aW9uKG9wZXJhdGlv
bk5vdGlmeVdyaXRlKSwgbV9jYWxsRnJhbWUsIG1fb3V0LmNvbnN0SW50UHRyKHNldCkpOwogICAg
ICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CiAgICAgICAgIAogICAgICAgICBtX291dC5h
cHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAkocmV2aXNpb24gMTgyMDY5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtODksNiArODksNDcgQEAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAog
bmFtZXNwYWNlIEpTQyB7CiAKK1N0cmluZyBTdGFja0ZyYW1lOjpmcmllbmRseVNvdXJjZVVSTCgp
IGNvbnN0Cit7CisgICAgU3RyaW5nIHRyYWNlTGluZTsKKyAgICAKKyAgICBzd2l0Y2ggKGNvZGVU
eXBlKSB7CisgICAgY2FzZSBTdGFja0ZyYW1lRXZhbENvZGU6CisgICAgY2FzZSBTdGFja0ZyYW1l
RnVuY3Rpb25Db2RlOgorICAgIGNhc2UgU3RhY2tGcmFtZUdsb2JhbENvZGU6CisgICAgICAgIGlm
ICghc291cmNlVVJMLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHRyYWNlTGluZSA9IHNvdXJjZVVS
TC5pbXBsKCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgU3RhY2tGcmFtZU5hdGl2ZUNvZGU6
CisgICAgICAgIHRyYWNlTGluZSA9ICJbbmF0aXZlIGNvZGVdIjsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorICAgIHJldHVybiB0cmFjZUxpbmUuaXNOdWxsKCkgPyBlbXB0eVN0cmluZygpIDogdHJh
Y2VMaW5lOworfQorCitTdHJpbmcgU3RhY2tGcmFtZTo6ZnJpZW5kbHlGdW5jdGlvbk5hbWUoQ2Fs
bEZyYW1lKiBjYWxsRnJhbWUpIGNvbnN0Cit7CisgICAgU3RyaW5nIHRyYWNlTGluZTsKKyAgICBK
U09iamVjdCogc3RhY2tGcmFtZUNhbGxlZSA9IGNhbGxlZS5nZXQoKTsKKworICAgIHN3aXRjaCAo
Y29kZVR5cGUpIHsKKyAgICBjYXNlIFN0YWNrRnJhbWVFdmFsQ29kZToKKyAgICAgICAgdHJhY2VM
aW5lID0gImV2YWwgY29kZSI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgU3RhY2tGcmFtZU5h
dGl2ZUNvZGU6CisgICAgICAgIGlmIChjYWxsZWUpCisgICAgICAgICAgICB0cmFjZUxpbmUgPSBn
ZXRDYWxjdWxhdGVkRGlzcGxheU5hbWUoY2FsbEZyYW1lLCBzdGFja0ZyYW1lQ2FsbGVlKS5pbXBs
KCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgU3RhY2tGcmFtZUZ1bmN0aW9uQ29kZToKKyAg
ICAgICAgdHJhY2VMaW5lID0gZ2V0Q2FsY3VsYXRlZERpc3BsYXlOYW1lKGNhbGxGcmFtZSwgc3Rh
Y2tGcmFtZUNhbGxlZSkuaW1wbCgpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFN0YWNrRnJh
bWVHbG9iYWxDb2RlOgorICAgICAgICB0cmFjZUxpbmUgPSAiZ2xvYmFsIGNvZGUiOworICAgICAg
ICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIHRyYWNlTGluZS5pc051bGwoKSA/IGVtcHR5U3Ry
aW5nKCkgOiB0cmFjZUxpbmU7Cit9CisKIEpTVmFsdWUgZXZhbChDYWxsRnJhbWUqIGNhbGxGcmFt
ZSkKIHsKICAgICBpZiAoIWNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmgJKHJldmlzaW9u
IDE4MjA2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRl
ci5oCSh3b3JraW5nIGNvcHkpCkBAIC05MCw0NSArOTAsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQ7CiAgICAgICAgIFN0cmluZyBzb3VyY2VVUkw7
CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIFN0cmluZyB0b1N0cmluZyhDYWxsRnJhbWUqKTsK
LSAgICAgICAgU3RyaW5nIGZyaWVuZGx5U291cmNlVVJMKCkgY29uc3QKLSAgICAgICAgewotICAg
ICAgICAgICAgU3RyaW5nIHRyYWNlTGluZTsKLQotICAgICAgICAgICAgc3dpdGNoIChjb2RlVHlw
ZSkgewotICAgICAgICAgICAgY2FzZSBTdGFja0ZyYW1lRXZhbENvZGU6Ci0gICAgICAgICAgICBj
YXNlIFN0YWNrRnJhbWVGdW5jdGlvbkNvZGU6Ci0gICAgICAgICAgICBjYXNlIFN0YWNrRnJhbWVH
bG9iYWxDb2RlOgotICAgICAgICAgICAgICAgIGlmICghc291cmNlVVJMLmlzRW1wdHkoKSkKLSAg
ICAgICAgICAgICAgICAgICAgdHJhY2VMaW5lID0gc291cmNlVVJMLmltcGwoKTsKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgU3RhY2tGcmFtZU5hdGl2ZUNvZGU6Ci0g
ICAgICAgICAgICAgICAgdHJhY2VMaW5lID0gIltuYXRpdmUgY29kZV0iOwotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHRyYWNlTGluZS5p
c051bGwoKSA/IGVtcHR5U3RyaW5nKCkgOiB0cmFjZUxpbmU7Ci0gICAgICAgIH0KLSAgICAgICAg
U3RyaW5nIGZyaWVuZGx5RnVuY3Rpb25OYW1lKENhbGxGcmFtZSogY2FsbEZyYW1lKSBjb25zdAot
ICAgICAgICB7Ci0gICAgICAgICAgICBTdHJpbmcgdHJhY2VMaW5lOwotICAgICAgICAgICAgSlNP
YmplY3QqIHN0YWNrRnJhbWVDYWxsZWUgPSBjYWxsZWUuZ2V0KCk7Ci0KLSAgICAgICAgICAgIHN3
aXRjaCAoY29kZVR5cGUpIHsKLSAgICAgICAgICAgIGNhc2UgU3RhY2tGcmFtZUV2YWxDb2RlOgot
ICAgICAgICAgICAgICAgIHRyYWNlTGluZSA9ICJldmFsIGNvZGUiOwotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgY2FzZSBTdGFja0ZyYW1lTmF0aXZlQ29kZToKLSAgICAgICAg
ICAgICAgICBpZiAoY2FsbGVlKQotICAgICAgICAgICAgICAgICAgICB0cmFjZUxpbmUgPSBnZXRD
YWxjdWxhdGVkRGlzcGxheU5hbWUoY2FsbEZyYW1lLCBzdGFja0ZyYW1lQ2FsbGVlKS5pbXBsKCk7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFN0YWNrRnJhbWVGdW5j
dGlvbkNvZGU6Ci0gICAgICAgICAgICAgICAgdHJhY2VMaW5lID0gZ2V0Q2FsY3VsYXRlZERpc3Bs
YXlOYW1lKGNhbGxGcmFtZSwgc3RhY2tGcmFtZUNhbGxlZSkuaW1wbCgpOwotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBTdGFja0ZyYW1lR2xvYmFsQ29kZToKLSAgICAg
ICAgICAgICAgICB0cmFjZUxpbmUgPSAiZ2xvYmFsIGNvZGUiOwotICAgICAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHRyYWNlTGluZS5pc051bGwo
KSA/IGVtcHR5U3RyaW5nKCkgOiB0cmFjZUxpbmU7Ci0gICAgICAgIH0KKyAgICAgICAgU3RyaW5n
IGZyaWVuZGx5U291cmNlVVJMKCkgY29uc3Q7CisgICAgICAgIFN0cmluZyBmcmllbmRseUZ1bmN0
aW9uTmFtZShDYWxsRnJhbWUqKSBjb25zdDsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9p
ZCBjb21wdXRlTGluZUFuZENvbHVtbih1bnNpZ25lZCYgbGluZSwgdW5zaWduZWQmIGNvbHVtbik7
CiAKICAgICBwcml2YXRlOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkocmV2aXNp
b24gMTgyMDY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMDUsNiArMTA1LDE0IEBAIHZvaWQgSklUOjplbWl0RW50ZXJPcHRpbWl6YXRp
b25DaGVjaygpCiB9CiAjZW5kaWYKIAordm9pZCBKSVQ6OmVtaXROb3RpZnlXcml0ZShXYXRjaHBv
aW50U2V0KiBzZXQpCit7CisgICAgaWYgKCFzZXQgfHwgc2V0LT5zdGF0ZSgpID09IElzSW52YWxp
ZGF0ZWQpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBhZGRTbG93Q2FzZShicmFuY2g4KE5v
dEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3Moc2V0LT5hZGRyZXNzT2ZTdGF0ZSgpKSwgVHJ1c3RlZElt
bTMyKElzSW52YWxpZGF0ZWQpKSk7Cit9CisKIHZvaWQgSklUOjphc3NlcnRTdGFja1BvaW50ZXJP
ZmZzZXQoKQogewogICAgIGlmIChBU1NFUlRfRElTQUJMRUQpCkBAIC0xODksNyArMTk3LDYgQEAg
dm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogICAgICAgICBERUZJTkVfU0xPV19P
UChpc19vYmplY3Rfb3JfbnVsbCkKICAgICAgICAgREVGSU5FX1NMT1dfT1AodHlwZW9mKQogCi0g
ICAgICAgIERFRklORV9PUChvcF90b3VjaF9lbnRyeSkKICAgICAgICAgREVGSU5FX09QKG9wX2Fk
ZCkKICAgICAgICAgREVGSU5FX09QKG9wX2JpdGFuZCkKICAgICAgICAgREVGSU5FX09QKG9wX2Jp
dG9yKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCShyZXZpc2lvbiAxODIwNjkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NTcsNyAr
NDU3LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIAogICAgICAgICB2b2lkIGFzc2VydFN0
YWNrUG9pbnRlck9mZnNldCgpOwogCi0gICAgICAgIHZvaWQgZW1pdF9vcF90b3VjaF9lbnRyeShJ
bnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfYWRkKEluc3RydWN0aW9uKik7CiAg
ICAgICAgIHZvaWQgZW1pdF9vcF9iaXRhbmQoSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBl
bWl0X29wX2JpdG9yKEluc3RydWN0aW9uKik7CkBAIC02NDAsMTMgKzYzOSw5IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRHZXRHbG9iYWxWYXIodWludHB0cl90IG9wZXJhbmQp
OwogICAgICAgICB2b2lkIGVtaXRHZXRDbG9zdXJlVmFyKGludCBzY29wZSwgdWludHB0cl90IG9w
ZXJhbmQpOwogICAgICAgICB2b2lkIGVtaXRQdXRHbG9iYWxQcm9wZXJ0eSh1aW50cHRyX3QqIG9w
ZXJhbmRTbG90LCBpbnQgdmFsdWUpOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIHZvaWQg
ZW1pdE5vdGlmeVdyaXRlKFJlZ2lzdGVySUQgdmFsdWUsIFJlZ2lzdGVySUQgc2NyYXRjaCwgVmFy
aWFibGVXYXRjaHBvaW50U2V0Kik7Ci0jZWxzZQotICAgICAgICB2b2lkIGVtaXROb3RpZnlXcml0
ZShSZWdpc3RlcklEIHRhZywgUmVnaXN0ZXJJRCBwYXlsb2FkLCBSZWdpc3RlcklEIHNjcmF0Y2gs
IFZhcmlhYmxlV2F0Y2hwb2ludFNldCopOwotI2VuZGlmCi0gICAgICAgIHZvaWQgZW1pdFB1dEds
b2JhbFZhcih1aW50cHRyX3Qgb3BlcmFuZCwgaW50IHZhbHVlLCBWYXJpYWJsZVdhdGNocG9pbnRT
ZXQqKTsKLSAgICAgICAgdm9pZCBlbWl0UHV0Q2xvc3VyZVZhcihpbnQgc2NvcGUsIHVpbnRwdHJf
dCBvcGVyYW5kLCBpbnQgdmFsdWUsIFZhcmlhYmxlV2F0Y2hwb2ludFNldCopOworICAgICAgICB2
b2lkIGVtaXROb3RpZnlXcml0ZShXYXRjaHBvaW50U2V0Kik7CisgICAgICAgIHZvaWQgZW1pdFB1
dEdsb2JhbFZhcih1aW50cHRyX3Qgb3BlcmFuZCwgaW50IHZhbHVlLCBXYXRjaHBvaW50U2V0Kik7
CisgICAgICAgIHZvaWQgZW1pdFB1dENsb3N1cmVWYXIoaW50IHNjb3BlLCB1aW50cHRyX3Qgb3Bl
cmFuZCwgaW50IHZhbHVlLCBXYXRjaHBvaW50U2V0Kik7CiAKICAgICAgICAgdm9pZCBlbWl0SW5p
dFJlZ2lzdGVyKGludCBkc3QpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VE9wY29kZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
T3Bjb2Rlcy5jcHAJKHJldmlzaW9uIDE4MjA2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUT3Bjb2Rlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg3OSwxNSArODc5LDYgQEAgdm9p
ZCBKSVQ6OmVtaXRTbG93X29wX3RvX251bWJlcihJbnN0cnVjdAogCiAjZW5kaWYgLy8gVVNFKEpT
VkFMVUU2NCkKIAotdm9pZCBKSVQ6OmVtaXRfb3BfdG91Y2hfZW50cnkoSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBpZiAobV9jb2RlQmxvY2stPnN5bWJvbFRhYmxlKCkt
Pm1fZnVuY3Rpb25FbnRlcmVkT25jZS5oYXNCZWVuSW52YWxpZGF0ZWQoKSkKLSAgICAgICAgcmV0
dXJuOwotICAgIAotICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVu
dEluc3RydWN0aW9uLCBzbG93X3BhdGhfdG91Y2hfZW50cnkpOwotICAgIHNsb3dQYXRoQ2FsbC5j
YWxsKCk7Ci19Ci0KIHZvaWQgSklUOjplbWl0X29wX2xvb3BfaGludChJbnN0cnVjdGlvbiopCiB7
CiAgICAgLy8gRW1pdCB0aGUgSklUIG9wdGltaXphdGlvbiBjaGVjazogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDE4MjA2OSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTkzMyw2ICs5MzMsMTQgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBv
cGVyYXRpb25OZQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNGdW5jdGlvbjo6Y3JlYXRl
KHZtLCBzdGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihmdW5jdGlvbkV4ZWN1dGFibGUp
LCBzY29wZSkpOwogfQogCitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5l
d0Z1bmN0aW9uV2l0aEludmFsaWRhdGVkUmVhbGxvY2F0aW9uV2F0Y2hwb2ludChFeGVjU3RhdGUq
IGV4ZWMsIEpTU2NvcGUqIHNjb3BlLCBKU0NlbGwqIGZ1bmN0aW9uRXhlY3V0YWJsZSkKK3sKKyAg
ICBBU1NFUlQoZnVuY3Rpb25FeGVjdXRhYmxlLT5pbmhlcml0cyhGdW5jdGlvbkV4ZWN1dGFibGU6
OmluZm8oKSkpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1l
VHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNG
dW5jdGlvbjo6Y3JlYXRlV2l0aEludmFsaWRhdGVkUmVhbGxvY2F0aW9uV2F0Y2hwb2ludCh2bSwg
c3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oZnVuY3Rpb25FeGVjdXRhYmxlKSwgc2Nv
cGUpKTsKK30KKwogSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld09iamVjdChFeGVj
U3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlKQogewogICAgIFZNKiB2bSA9ICZleGVj
LT52bSgpOwpAQCAtMTcwMyw4ICsxNzExLDggQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
blB1dFRvU2NvcGUoRQogICAgIGlmIChtb2RlQW5kVHlwZS50eXBlKCkgPT0gTG9jYWxDbG9zdXJl
VmFyKSB7CiAgICAgICAgIEpTTGV4aWNhbEVudmlyb25tZW50KiBlbnZpcm9ubWVudCA9IGpzQ2Fz
dDxKU0xleGljYWxFbnZpcm9ubWVudCo+KHNjb3BlKTsKICAgICAgICAgZW52aXJvbm1lbnQtPnZh
cmlhYmxlQXQoU2NvcGVPZmZzZXQocGNbNl0udS5vcGVyYW5kKSkuc2V0KHZtLCBlbnZpcm9ubWVu
dCwgdmFsdWUpOwotICAgICAgICBpZiAoVmFyaWFibGVXYXRjaHBvaW50U2V0KiBzZXQgPSBwY1s1
XS51LndhdGNocG9pbnRTZXQpCi0gICAgICAgICAgICBzZXQtPm5vdGlmeVdyaXRlKHZtLCB2YWx1
ZSwgIkV4ZWN1dGVkIG9wX3B1dF9zY29wZTxMb2NhbENsb3N1cmVWYXI+Iik7CisgICAgICAgIGlm
IChXYXRjaHBvaW50U2V0KiBzZXQgPSBwY1s1XS51LndhdGNocG9pbnRTZXQpCisgICAgICAgICAg
ICBzZXQtPnRvdWNoKCJFeGVjdXRlZCBvcF9wdXRfc2NvcGU8TG9jYWxDbG9zdXJlVmFyPiIpOwog
ICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlmIChtb2RlQW5kVHlwZS5tb2RlKCkgPT0gVGhy
b3dJZk5vdEZvdW5kICYmICFzY29wZS0+aGFzUHJvcGVydHkoZXhlYywgaWRlbnQpKSB7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAkocmV2aXNpb24gMTgy
MDY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgJKHdvcmtp
bmcgY29weSkKQEAgLTg2LDYgKzg2LDcgQEAgZXh0ZXJuICJDIiB7CiAgICAgVjogdm9pZAogICAg
IFZtOiBWTSoKICAgICBWd3M6IFZhcmlhYmxlV2F0Y2hwb2ludFNldCoKKyAgICBXczogV2F0Y2hw
b2ludFNldCoKICAgICBaOiBpbnQzMl90CiAqLwogCkBAIC0xOTIsNiArMTkzLDcgQEAgdHlwZWRl
ZiB2b2lkIEpJVF9PUEVSQVRJT04gKCpWX0pJVE9wZXJhdAogdHlwZWRlZiB2b2lkIEpJVF9PUEVS
QVRJT04gKCpWX0pJVE9wZXJhdGlvbl9FUFpKKShFeGVjU3RhdGUqLCB2b2lkKiwgaW50MzJfdCwg
RW5jb2RlZEpTVmFsdWUpOwogdHlwZWRlZiB2b2lkIEpJVF9PUEVSQVRJT04gKCpWX0pJVE9wZXJh
dGlvbl9FU3NpSkpJKShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmVTdHViSW5mbyosIEVuY29kZWRKU1Zh
bHVlLCBFbmNvZGVkSlNWYWx1ZSwgU3RyaW5nSW1wbCopOwogdHlwZWRlZiB2b2lkIEpJVF9PUEVS
QVRJT04gKCpWX0pJVE9wZXJhdGlvbl9FVndzSikoRXhlY1N0YXRlKiwgVmFyaWFibGVXYXRjaHBv
aW50U2V0KiwgRW5jb2RlZEpTVmFsdWUpOwordHlwZWRlZiB2b2lkIEpJVF9PUEVSQVRJT04gKCpW
X0pJVE9wZXJhdGlvbl9FV3MpKEV4ZWNTdGF0ZSosIFdhdGNocG9pbnRTZXQqKTsKIHR5cGVkZWYg
dm9pZCBKSVRfT1BFUkFUSU9OICgqVl9KSVRPcGVyYXRpb25fRVopKEV4ZWNTdGF0ZSosIGludDMy
X3QpOwogdHlwZWRlZiB2b2lkIEpJVF9PUEVSQVRJT04gKCpWX0pJVE9wZXJhdGlvbl9FWkopKEV4
ZWNTdGF0ZSosIGludDMyX3QsIEVuY29kZWRKU1ZhbHVlKTsKIHR5cGVkZWYgdm9pZCBKSVRfT1BF
UkFUSU9OICgqVl9KSVRPcGVyYXRpb25fRVpKWlpaKShFeGVjU3RhdGUqLCBpbnQzMl90LCBFbmNv
ZGVkSlNWYWx1ZSwgaW50MzJfdCwgaW50MzJfdCwgaW50MzJfdCk7CkBAIC0yNzgsNiArMjgwLDcg
QEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25OZQogRW5jb2RlZEpTVmFs
dWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdBcnJheUJ1ZmZlcldpdGhQcm9maWxlKEV4ZWNT
dGF0ZSosIEFycmF5QWxsb2NhdGlvblByb2ZpbGUqLCBjb25zdCBKU1ZhbHVlKiB2YWx1ZXMsIGlu
dDMyX3Qgc2l6ZSkgV1RGX0lOVEVSTkFMOwogRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBv
cGVyYXRpb25OZXdBcnJheVdpdGhTaXplQW5kUHJvZmlsZShFeGVjU3RhdGUqLCBBcnJheUFsbG9j
YXRpb25Qcm9maWxlKiwgRW5jb2RlZEpTVmFsdWUgc2l6ZSkgV1RGX0lOVEVSTkFMOwogRW5jb2Rl
ZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdGdW5jdGlvbihFeGVjU3RhdGUqLCBK
U1Njb3BlKiwgSlNDZWxsKikgV1RGX0lOVEVSTkFMOworRW5jb2RlZEpTVmFsdWUgSklUX09QRVJB
VElPTiBvcGVyYXRpb25OZXdGdW5jdGlvbldpdGhJbnZhbGlkYXRlZFJlYWxsb2NhdGlvbldhdGNo
cG9pbnQoRXhlY1N0YXRlKiwgSlNTY29wZSosIEpTQ2VsbCopIFdURl9JTlRFUk5BTDsKIEpTQ2Vs
bCogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdPYmplY3QoRXhlY1N0YXRlKiwgU3RydWN0dXJl
KikgV1RGX0lOVEVSTkFMOwogRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25O
ZXdSZWdleHAoRXhlY1N0YXRlKiwgdm9pZCopIFdURl9JTlRFUk5BTDsKIHZvaWQgSklUX09QRVJB
VElPTiBvcGVyYXRpb25IYW5kbGVXYXRjaGRvZ1RpbWVyKEV4ZWNTdGF0ZSopIFdURl9JTlRFUk5B
TDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82
NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0
eUFjY2VzczMyXzY0LmNwcAkocmV2aXNpb24gMTgyMDY5KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzUw
LDI3ICs3NTAsMTAgQEAgdm9pZCBKSVQ6OmVtaXRQdXRHbG9iYWxQcm9wZXJ0eSh1aW50cHRyXwog
ICAgIHN0b3JlMzIocmVnVDIsIEJhc2VJbmRleChyZWdUMCwgcmVnVDEsIFRpbWVzRWlnaHQsIChm
aXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSArIE9CSkVD
VF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpKTsKIH0K
IAotdm9pZCBKSVQ6OmVtaXROb3RpZnlXcml0ZShSZWdpc3RlcklEIHRhZywgUmVnaXN0ZXJJRCBw
YXlsb2FkLCBSZWdpc3RlcklEIHNjcmF0Y2gsIFZhcmlhYmxlV2F0Y2hwb2ludFNldCogc2V0KQot
ewotICAgIGlmICghc2V0IHx8IHNldC0+c3RhdGUoKSA9PSBJc0ludmFsaWRhdGVkKQotICAgICAg
ICByZXR1cm47Ci0gICAgCi0gICAgbG9hZDgoc2V0LT5hZGRyZXNzT2ZTdGF0ZSgpLCBzY3JhdGNo
KTsKLSAgICBKdW1wIGlzRG9uZSA9IGJyYW5jaDMyKEVxdWFsLCBzY3JhdGNoLCBUcnVzdGVkSW1t
MzIoSXNJbnZhbGlkYXRlZCkpOwotCi0gICAgSnVtcExpc3Qgbm90aWZ5U2xvdyA9IGJyYW5jaDMy
KAotICAgICAgICBOb3RFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKHNldC0+YWRkcmVzc09mSW5mZXJy
ZWRWYWx1ZSgpLT5wYXlsb2FkUG9pbnRlcigpKSwgcGF5bG9hZCk7Ci0gICAgbm90aWZ5U2xvdy5h
cHBlbmQoYnJhbmNoMzIoCi0gICAgICAgIE5vdEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3Moc2V0LT5h
ZGRyZXNzT2ZJbmZlcnJlZFZhbHVlKCktPnRhZ1BvaW50ZXIoKSksIHRhZykpOwotICAgIGFkZFNs
b3dDYXNlKG5vdGlmeVNsb3cpOwotCi0gICAgaXNEb25lLmxpbmsodGhpcyk7Ci19Ci0KIHZvaWQg
SklUOjplbWl0UHV0R2xvYmFsVmFyKHVpbnRwdHJfdCBvcGVyYW5kLCBpbnQgdmFsdWUsIFZhcmlh
YmxlV2F0Y2hwb2ludFNldCogc2V0KQogewogICAgIGVtaXRMb2FkKHZhbHVlLCByZWdUMSwgcmVn
VDApOwotICAgIGVtaXROb3RpZnlXcml0ZShyZWdUMSwgcmVnVDAsIHJlZ1QyLCBzZXQpOworICAg
IGVtaXROb3RpZnlXcml0ZShzZXQpOwogICAgIHN0b3JlMzIocmVnVDEsIHJlaW50ZXJwcmV0X2Nh
c3Q8Y2hhcio+KG9wZXJhbmQpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0
b3IsIGFzQml0cy50YWcpKTsKICAgICBzdG9yZTMyKHJlZ1QwLCByZWludGVycHJldF9jYXN0PGNo
YXIqPihvcGVyYW5kKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBh
c0JpdHMucGF5bG9hZCkpOwogfQpAQCAtNzc5LDcgKzc2Miw3IEBAIHZvaWQgSklUOjplbWl0UHV0
Q2xvc3VyZVZhcihpbnQgc2NvcGUsIHUKIHsKICAgICBlbWl0TG9hZCh2YWx1ZSwgcmVnVDMsIHJl
Z1QyKTsKICAgICBlbWl0TG9hZChzY29wZSwgcmVnVDEsIHJlZ1QwKTsKLSAgICBlbWl0Tm90aWZ5
V3JpdGUocmVnVDMsIHJlZ1QyLCByZWdUNCwgc2V0KTsKKyAgICBlbWl0Tm90aWZ5V3JpdGUoc2V0
KTsKICAgICBzdG9yZTMyKHJlZ1QzLCBBZGRyZXNzKHJlZ1QwLCBKU0Vudmlyb25tZW50UmVjb3Jk
OjpvZmZzZXRPZlZhcmlhYmxlcygpICsgb3BlcmFuZCAqIHNpemVvZihSZWdpc3RlcikgKyBUYWdP
ZmZzZXQpKTsKICAgICBzdG9yZTMyKHJlZ1QyLCBBZGRyZXNzKHJlZ1QwLCBKU0Vudmlyb25tZW50
UmVjb3JkOjpvZmZzZXRPZlZhcmlhYmxlcygpICsgb3BlcmFuZCAqIHNpemVvZihSZWdpc3Rlcikg
KyBQYXlsb2FkT2Zmc2V0KSk7CiB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VFByb3BlcnR5QWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkocmV2aXNpb24gMTgyMDY5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTcyOCwyOSArNzI4LDE4IEBAIHZvaWQgSklUOjplbWl0UHV0R2xvYmFsUHJvcGVydHkodWludHB0
cl8KICAgICBzdG9yZVB0cihyZWdUMiwgQmFzZUluZGV4KHJlZ1QwLCByZWdUMSwgVGltZXNFaWdo
dCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7
CiB9CiAKLXZvaWQgSklUOjplbWl0Tm90aWZ5V3JpdGUoUmVnaXN0ZXJJRCB2YWx1ZSwgUmVnaXN0
ZXJJRCBzY3JhdGNoLCBWYXJpYWJsZVdhdGNocG9pbnRTZXQqIHNldCkKLXsKLSAgICBpZiAoIXNl
dCB8fCBzZXQtPnN0YXRlKCkgPT0gSXNJbnZhbGlkYXRlZCkKLSAgICAgICAgcmV0dXJuOwotICAg
IAotICAgIGxvYWQ4KHNldC0+YWRkcmVzc09mU3RhdGUoKSwgc2NyYXRjaCk7Ci0gICAgSnVtcCBp
c0RvbmUgPSBicmFuY2gzMihFcXVhbCwgc2NyYXRjaCwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0
ZWQpKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2g2NChOb3RFcXVhbCwgQWJzb2x1dGVBZGRyZXNz
KHNldC0+YWRkcmVzc09mSW5mZXJyZWRWYWx1ZSgpKSwgdmFsdWUpKTsKLSAgICBpc0RvbmUubGlu
ayh0aGlzKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRQdXRHbG9iYWxWYXIodWludHB0cl90IG9wZXJh
bmQsIGludCB2YWx1ZSwgVmFyaWFibGVXYXRjaHBvaW50U2V0KiBzZXQpCit2b2lkIEpJVDo6ZW1p
dFB1dEdsb2JhbFZhcih1aW50cHRyX3Qgb3BlcmFuZCwgaW50IHZhbHVlLCBXYXRjaHBvaW50U2V0
KiBzZXQpCiB7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAg
IGVtaXROb3RpZnlXcml0ZShyZWdUMCwgcmVnVDEsIHNldCk7CisgICAgZW1pdE5vdGlmeVdyaXRl
KHNldCk7CiAgICAgc3RvcmVQdHIocmVnVDAsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KG9wZXJh
bmQpKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRQdXRDbG9zdXJlVmFyKGludCBzY29wZSwgdWludHB0
cl90IG9wZXJhbmQsIGludCB2YWx1ZSwgVmFyaWFibGVXYXRjaHBvaW50U2V0KiBzZXQpCit2b2lk
IEpJVDo6ZW1pdFB1dENsb3N1cmVWYXIoaW50IHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCwgaW50
IHZhbHVlLCBXYXRjaHBvaW50U2V0KiBzZXQpCiB7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rl
cih2YWx1ZSwgcmVnVDEpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1Qw
KTsKLSAgICBlbWl0Tm90aWZ5V3JpdGUocmVnVDEsIHJlZ1QyLCBzZXQpOworICAgIGVtaXROb3Rp
ZnlXcml0ZShzZXQpOwogICAgIHN0b3JlUHRyKHJlZ1QxLCBBZGRyZXNzKHJlZ1QwLCBKU0Vudmly
b25tZW50UmVjb3JkOjpvZmZzZXRPZlZhcmlhYmxlcygpICsgb3BlcmFuZCAqIHNpemVvZihSZWdp
c3RlcikpKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xv
d1BhdGhzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJ
bnRTbG93UGF0aHMuY3BwCShyZXZpc2lvbiAxODIwNjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMzg0LDggKzEz
ODQsMTIgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3B1dF90b19zYwogICAgIGlm
IChtb2RlQW5kVHlwZS50eXBlKCkgPT0gTG9jYWxDbG9zdXJlVmFyKSB7CiAgICAgICAgIEpTTGV4
aWNhbEVudmlyb25tZW50KiBlbnZpcm9ubWVudCA9IGpzQ2FzdDxKU0xleGljYWxFbnZpcm9ubWVu
dCo+KHNjb3BlKTsKICAgICAgICAgZW52aXJvbm1lbnQtPnZhcmlhYmxlQXQoU2NvcGVPZmZzZXQo
cGNbNl0udS5vcGVyYW5kKSkuc2V0KHZtLCBlbnZpcm9ubWVudCwgdmFsdWUpOwotICAgICAgICBp
ZiAoVmFyaWFibGVXYXRjaHBvaW50U2V0KiBzZXQgPSBwY1s1XS51LndhdGNocG9pbnRTZXQpCi0g
ICAgICAgICAgICBzZXQtPm5vdGlmeVdyaXRlKHZtLCB2YWx1ZSwgIkV4ZWN1dGVkIG9wX3B1dF9z
Y29wZTxMb2NhbENsb3N1cmVWYXI+Iik7CisgICAgICAgIAorICAgICAgICAvLyBIYXZlIHRvIGRv
IHRoaXMgKmFmdGVyKiB0aGUgd3JpdGUsIGJlY2F1c2UgaWYgdGhpcyBwdXRzIHRoZSBzZXQgaW50
byBJc1dhdGNoZWQsIHRoZW4gd2UgbmVlZAorICAgICAgICAvLyB0byBoYXZlIGFscmVhZHkgY2hh
bmdlZCB0aGUgdmFsdWUgb2YgdGhlIHZhcmlhYmxlLiBPdGhlcndpc2Ugd2UgbWlnaHQgd2F0Y2gg
YW5kIGNvbnN0YW50LWZvbGQKKyAgICAgICAgLy8gdG8gdGhlIFVuZGVmaW5lZCB2YWx1ZSBmcm9t
IGJlZm9yZSB0aGUgYXNzaWdubWVudC4KKyAgICAgICAgaWYgKFdhdGNocG9pbnRTZXQqIHNldCA9
IHBjWzVdLnUud2F0Y2hwb2ludFNldCkKKyAgICAgICAgICAgIHNldC0+dG91Y2goIkV4ZWN1dGVk
IG9wX3B1dF9zY29wZTxMb2NhbENsb3N1cmVWYXI+Iik7CiAgICAgICAgIExMSU5UX0VORCgpOwog
ICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJw
cmV0ZXIzMl82NC5hc20KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50
L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20JKHJldmlzaW9uIDE4MjA2OSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCSh3b3Jr
aW5nIGNvcHkpCkBAIC04MDUsMTQgKzgwNSw2IEBAIF9sbGludF9vcF9tb3Y6CiAgICAgZGlzcGF0
Y2goMykKIAogCi1tYWNybyBub3RpZnlXcml0ZShzZXQsIHZhbHVlVGFnLCB2YWx1ZVBheWxvYWQs
IHNjcmF0Y2gsIHNsb3cpCi0gICAgbG9hZGIgVmFyaWFibGVXYXRjaHBvaW50U2V0OjptX3N0YXRl
W3NldF0sIHNjcmF0Y2gKLSAgICBiaWVxIHNjcmF0Y2gsIElzSW52YWxpZGF0ZWQsIC5kb25lCi0g
ICAgYmluZXEgdmFsdWVQYXlsb2FkLCBWYXJpYWJsZVdhdGNocG9pbnRTZXQ6Om1faW5mZXJyZWRW
YWx1ZSArIFBheWxvYWRPZmZzZXRbc2V0XSwgc2xvdwotICAgIGJpbmVxIHZhbHVlVGFnLCBWYXJp
YWJsZVdhdGNocG9pbnRTZXQ6Om1faW5mZXJyZWRWYWx1ZSArIFRhZ09mZnNldFtzZXRdLCBzbG93
Ci0uZG9uZToKLWVuZAotCiBfbGxpbnRfb3Bfbm90OgogICAgIHRyYWNlRXhlY3V0aW9uKCkKICAg
ICBsb2FkaSA4W1BDXSwgdDAKQEAgLTIwNzUsMzkgKzIwNjcsMzkgQEAgX2xsaW50X29wX3Jlc29s
dmVfc2NvcGU6CiAjckdsb2JhbFByb3BlcnR5OgogICAgIGJpbmVxIHQwLCBHbG9iYWxQcm9wZXJ0
eSwgLnJHbG9iYWxWYXIKICAgICBnZXRHbG9iYWxPYmplY3QoMSkKLSAgICBkaXNwYXRjaCg3KQor
ICAgIGRpc3BhdGNoKDYpCiAKIC5yR2xvYmFsVmFyOgogICAgIGJpbmVxIHQwLCBHbG9iYWxWYXIs
IC5yQ2xvc3VyZVZhcgogICAgIGdldEdsb2JhbE9iamVjdCgxKQotICAgIGRpc3BhdGNoKDcpCisg
ICAgZGlzcGF0Y2goNikKIAogLnJDbG9zdXJlVmFyOgogICAgIGJpbmVxIHQwLCBDbG9zdXJlVmFy
LCAuckdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcwogICAgIHJlc29sdmVTY29w
ZSgpCi0gICAgZGlzcGF0Y2goNykKKyAgICBkaXNwYXRjaCg2KQogCiAuckdsb2JhbFByb3BlcnR5
V2l0aFZhckluamVjdGlvbkNoZWNrczoKICAgICBiaW5lcSB0MCwgR2xvYmFsUHJvcGVydHlXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzLCAuckdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MKICAg
ICB2YXJJbmplY3Rpb25DaGVjayguckR5bmFtaWMpCiAgICAgZ2V0R2xvYmFsT2JqZWN0KDEpCi0g
ICAgZGlzcGF0Y2goNykKKyAgICBkaXNwYXRjaCg2KQogCiAuckdsb2JhbFZhcldpdGhWYXJJbmpl
Y3Rpb25DaGVja3M6CiAgICAgYmluZXEgdDAsIEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVj
a3MsIC5yQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MKICAgICB2YXJJbmplY3Rpb25D
aGVjayguckR5bmFtaWMpCiAgICAgZ2V0R2xvYmFsT2JqZWN0KDEpCi0gICAgZGlzcGF0Y2goNykK
KyAgICBkaXNwYXRjaCg2KQogCiAuckNsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgog
ICAgIGJpbmVxIHQwLCBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgLnJEeW5hbWlj
CiAgICAgdmFySW5qZWN0aW9uQ2hlY2soLnJEeW5hbWljKQogICAgIHJlc29sdmVTY29wZSgpCi0g
ICAgZGlzcGF0Y2goNykKKyAgICBkaXNwYXRjaCg2KQogCiAuckR5bmFtaWM6CiAgICAgY2FsbFNs
b3dQYXRoKF9sbGludF9zbG93X3BhdGhfcmVzb2x2ZV9zY29wZSkKLSAgICBkaXNwYXRjaCg3KQor
ICAgIGRpc3BhdGNoKDYpCiAKIAogbWFjcm8gbG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhvcGVyYW5k
LCBzbG93UGF0aCkKQEAgLTIyMDQsNyArMjE5Niw3IEBAIG1hY3JvIHB1dEdsb2JhbFZhcigpCiAg
ICAgbG9hZGlzRnJvbUluc3RydWN0aW9uKDMsIHQwKQogICAgIGxvYWRDb25zdGFudE9yVmFyaWFi
bGUodDAsIHQxLCB0MikKICAgICBsb2FkcEZyb21JbnN0cnVjdGlvbig1LCB0MykKLSAgICBub3Rp
ZnlXcml0ZSh0MywgdDEsIHQyLCB0MCwgLnBEeW5hbWljKQorICAgIG5vdGlmeVdyaXRlKHQzLCAu
cER5bmFtaWMpCiAgICAgbG9hZHBGcm9tSW5zdHJ1Y3Rpb24oNiwgdDApCiAgICAgc3RvcmVpIHQx
LCBUYWdPZmZzZXRbdDBdCiAgICAgc3RvcmVpIHQyLCBQYXlsb2FkT2Zmc2V0W3QwXQpAQCAtMjIy
Myw3ICsyMjE1LDcgQEAgbWFjcm8gcHV0TG9jYWxDbG9zdXJlVmFyKCkKICAgICBsb2FkQ29uc3Rh
bnRPclZhcmlhYmxlKHQxLCB0MiwgdDMpCiAgICAgbG9hZHBGcm9tSW5zdHJ1Y3Rpb24oNSwgdDQp
CiAgICAgYnRweiB0NCwgLm5vVmFyaWFibGVXYXRjaHBvaW50U2V0Ci0gICAgbm90aWZ5V3JpdGUo
dDQsIHQyLCB0MywgdDEsIC5wRHluYW1pYykKKyAgICBub3RpZnlXcml0ZSh0NCwgLnBEeW5hbWlj
KQogLm5vVmFyaWFibGVXYXRjaHBvaW50U2V0OgogICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlvbig2
LCB0MSkKICAgICBzdG9yZWkgdDIsIEpTRW52aXJvbm1lbnRSZWNvcmRfdmFyaWFibGVzICsgVGFn
T2Zmc2V0W3QwLCB0MSwgOF0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dM
ZXZlbEludGVycHJldGVyNjQuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCShyZXZpc2lvbiAxODIwNjkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQkod29y
a2luZyBjb3B5KQpAQCAtNjkwLDEzICs2OTAsNiBAQCBfbGxpbnRfb3BfbW92OgogICAgIGRpc3Bh
dGNoKDMpCiAKIAotbWFjcm8gbm90aWZ5V3JpdGUoc2V0LCB2YWx1ZSwgc2NyYXRjaCwgc2xvdykK
LSAgICBsb2FkYiBWYXJpYWJsZVdhdGNocG9pbnRTZXQ6Om1fc3RhdGVbc2V0XSwgc2NyYXRjaAot
ICAgIGJpZXEgc2NyYXRjaCwgSXNJbnZhbGlkYXRlZCwgLmRvbmUKLSAgICBicW5lcSB2YWx1ZSwg
VmFyaWFibGVXYXRjaHBvaW50U2V0OjptX2luZmVycmVkVmFsdWVbc2V0XSwgc2xvdwotLmRvbmU6
Ci1lbmQKLQogX2xsaW50X29wX25vdDoKICAgICB0cmFjZUV4ZWN1dGlvbigpCiAgICAgbG9hZGlz
RnJvbUluc3RydWN0aW9uKDIsIHQwKQpAQCAtMTk0NCwzOSArMTkzNywzOSBAQCBfbGxpbnRfb3Bf
cmVzb2x2ZV9zY29wZToKICNyR2xvYmFsUHJvcGVydHk6CiAgICAgYmluZXEgdDAsIEdsb2JhbFBy
b3BlcnR5LCAuckdsb2JhbFZhcgogICAgIGdldEdsb2JhbE9iamVjdCgxKQotICAgIGRpc3BhdGNo
KDcpCisgICAgZGlzcGF0Y2goNikKIAogLnJHbG9iYWxWYXI6CiAgICAgYmluZXEgdDAsIEdsb2Jh
bFZhciwgLnJDbG9zdXJlVmFyCiAgICAgZ2V0R2xvYmFsT2JqZWN0KDEpCi0gICAgZGlzcGF0Y2go
NykKKyAgICBkaXNwYXRjaCg2KQogCiAuckNsb3N1cmVWYXI6CiAgICAgYmluZXEgdDAsIENsb3N1
cmVWYXIsIC5yR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzCiAgICAgcmVzb2x2
ZVNjb3BlKCkKLSAgICBkaXNwYXRjaCg3KQorICAgIGRpc3BhdGNoKDYpCiAKIC5yR2xvYmFsUHJv
cGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgogICAgIGJpbmVxIHQwLCBHbG9iYWxQcm9wZXJ0
eVdpdGhWYXJJbmplY3Rpb25DaGVja3MsIC5yR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNr
cwogICAgIHZhckluamVjdGlvbkNoZWNrKC5yRHluYW1pYykKICAgICBnZXRHbG9iYWxPYmplY3Qo
MSkKLSAgICBkaXNwYXRjaCg3KQorICAgIGRpc3BhdGNoKDYpCiAKIC5yR2xvYmFsVmFyV2l0aFZh
ckluamVjdGlvbkNoZWNrczoKICAgICBiaW5lcSB0MCwgR2xvYmFsVmFyV2l0aFZhckluamVjdGlv
bkNoZWNrcywgLnJDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcwogICAgIHZhckluamVj
dGlvbkNoZWNrKC5yRHluYW1pYykKICAgICBnZXRHbG9iYWxPYmplY3QoMSkKLSAgICBkaXNwYXRj
aCg3KQorICAgIGRpc3BhdGNoKDYpCiAKIC5yQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVj
a3M6CiAgICAgYmluZXEgdDAsIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCAuckR5
bmFtaWMKICAgICB2YXJJbmplY3Rpb25DaGVjayguckR5bmFtaWMpCiAgICAgcmVzb2x2ZVNjb3Bl
KCkKLSAgICBkaXNwYXRjaCg3KQorICAgIGRpc3BhdGNoKDYpCiAKIC5yRHluYW1pYzoKICAgICBj
YWxsU2xvd1BhdGgoX2xsaW50X3Nsb3dfcGF0aF9yZXNvbHZlX3Njb3BlKQotICAgIGRpc3BhdGNo
KDcpCisgICAgZGlzcGF0Y2goNikKIAogCiBtYWNybyBsb2FkV2l0aFN0cnVjdHVyZUNoZWNrKG9w
ZXJhbmQsIHNsb3dQYXRoKQpAQCAtMjA2OSw4ICsyMDYyLDggQEAgbWFjcm8gcHV0R2xvYmFsVmFy
KCkKICAgICBsb2FkaXNGcm9tSW5zdHJ1Y3Rpb24oMywgdDApCiAgICAgbG9hZENvbnN0YW50T3JW
YXJpYWJsZSh0MCwgdDEpCiAgICAgbG9hZHBGcm9tSW5zdHJ1Y3Rpb24oNSwgdDIpCi0gICAgbm90
aWZ5V3JpdGUodDIsIHQxLCB0MCwgLnBEeW5hbWljKQogICAgIGxvYWRwRnJvbUluc3RydWN0aW9u
KDYsIHQwKQorICAgIG5vdGlmeVdyaXRlKHQyLCAucER5bmFtaWMpCiAgICAgc3RvcmVxIHQxLCBb
dDBdCiBlbmQKIApAQCAtMjA4Niw3ICsyMDc5LDcgQEAgbWFjcm8gcHV0TG9jYWxDbG9zdXJlVmFy
KCkKICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHQxLCB0MikKICAgICBsb2FkcEZyb21JbnN0
cnVjdGlvbig1LCB0MykKICAgICBidHB6IHQzLCAubm9WYXJpYWJsZVdhdGNocG9pbnRTZXQKLSAg
ICBub3RpZnlXcml0ZSh0MywgdDIsIHQxLCAucER5bmFtaWMpCisgICAgbm90aWZ5V3JpdGUodDMs
IC5wRHluYW1pYykKIC5ub1ZhcmlhYmxlV2F0Y2hwb2ludFNldDoKICAgICBsb2FkaXNGcm9tSW5z
dHJ1Y3Rpb24oNiwgdDEpCiAgICAgc3RvcmVxIHQyLCBKU0Vudmlyb25tZW50UmVjb3JkX3Zhcmlh
Ymxlc1t0MCwgdDEsIDhdCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2
ZWxJbnRlcnByZXRlci5hc20KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xs
aW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCShyZXZpc2lvbiAxODIwNjkpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20JKHdvcmtpbmcgY29w
eSkKQEAgLTUxOSw2ICs1MTksMTAgQEAgbWFjcm8gc2tpcElmSXNSZW1lbWJlcmVkT3JJbkVkZW4o
Y2VsbCwgcwogICAgIGNvbnRpbnVhdGlvbihzY3JhdGNoMSkKIGVuZAogCittYWNybyBub3RpZnlX
cml0ZShzZXQsIHNsb3cpCisgICAgYmJuZXEgV2F0Y2hwb2ludFNldDo6bV9zdGF0ZVtzZXRdLCBJ
c0ludmFsaWRhdGVkLCBzbG93CitlbmQKKwogbWFjcm8gY2hlY2tTd2l0Y2hUb0pJVChpbmNyZW1l
bnQsIGFjdGlvbikKICAgICBsb2FkcCBDb2RlQmxvY2tbY2ZyXSwgdDAKICAgICBiYWRkaXMgaW5j
cmVtZW50LCBDb2RlQmxvY2s6Om1fbGxpbnRFeGVjdXRlQ291bnRlciArIEJhc2VsaW5lRXhlY3V0
aW9uQ291bnRlcjo6bV9jb3VudGVyW3QwXSwgLmNvbnRpbnVlCkBAIC05MjAsMTIgKzkyNCw2IEBA
IGVuZAogCiAKICMgVmFsdWUtcmVwcmVzZW50YXRpb24tYWdub3N0aWMgY29kZS4KLV9sbGludF9v
cF90b3VjaF9lbnRyeToKLSAgICB0cmFjZUV4ZWN1dGlvbigpCi0gICAgY2FsbFNsb3dQYXRoKF9z
bG93X3BhdGhfdG91Y2hfZW50cnkpCi0gICAgZGlzcGF0Y2goMSkKLQotCiBfbGxpbnRfb3BfY3Jl
YXRlX2RpcmVjdF9hcmd1bWVudHM6CiAgICAgdHJhY2VFeGVjdXRpb24oKQogICAgIGNhbGxTbG93
UGF0aChfc2xvd19wYXRoX2NyZWF0ZV9kaXJlY3RfYXJndW1lbnRzKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCShyZXZpc2lv
biAxODIwNjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0
aHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMDYsMTMgKzIwNiw2IEBAIFNMT1dfUEFUSF9ERUNM
KHNsb3dfcGF0aF9jb25zdHJ1Y3RfYXJpdHkKICAgICBSRVRVUk5fVFdPKDAsIHNldHVwQXJpdHlD
aGVja0RhdGEodm0sIHNsb3RzVG9BZGQpKTsKIH0KIAotU0xPV19QQVRIX0RFQ0woc2xvd19wYXRo
X3RvdWNoX2VudHJ5KQotewotICAgIEJFR0lOKCk7Ci0gICAgZXhlYy0+Y29kZUJsb2NrKCktPnN5
bWJvbFRhYmxlKCktPm1fZnVuY3Rpb25FbnRlcmVkT25jZS50b3VjaCgiRnVuY3Rpb24gKHJlKWVu
dGVyZWQiKTsKLSAgICBFTkQoKTsKLX0KLQogU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2NyZWF0
ZV9kaXJlY3RfYXJndW1lbnRzKQogewogICAgIEJFR0lOKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuaAkocmV2aXNpb24gMTgyMDY5
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTE4MSw3ICsxODEsNiBAQCBTTE9XX1BBVEhfREVDTChuYW1lKSBXVEZf
SU5URVJOQUwKICAgICAKIFNMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfY2FsbF9hcml0
eUNoZWNrKTsKIFNMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfY29uc3RydWN0X2FyaXR5
Q2hlY2spOwotU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF90b3VjaF9lbnRyeSk7CiBT
TE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX2NyZWF0ZV9kaXJlY3RfYXJndW1lbnRzKTsK
IFNMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfY3JlYXRlX3Njb3BlZF9hcmd1bWVudHMp
OwogU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9jcmVhdGVfb3V0X29mX2JhbmRfYXJn
dW1lbnRzKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFi
bGUuY3BwCShyZXZpc2lvbiAxODIwNjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9FeGVjdXRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTY3LDYgKzU2NywxMiBAQCB2b2lk
IEZ1bmN0aW9uRXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbihKCiAgICAgaWYgKHRoaXNPYmplY3Qt
Pm1fY29kZUJsb2NrRm9yQ29uc3RydWN0KQogICAgICAgICB0aGlzT2JqZWN0LT5tX2NvZGVCbG9j
a0ZvckNvbnN0cnVjdC0+dmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CiAgICAgdmlzaXRvci5hcHBl
bmQoJnRoaXNPYmplY3QtPm1fdW5saW5rZWRFeGVjdXRhYmxlKTsKKyAgICAKKyAgICBpZiAodGhp
c09iamVjdC0+bV9mdW5jdGlvblJlYWxsb2NhdGlvbldhdGNocG9pbnRTZXQubmVlZFRvRmluYWxp
emUoKSkgeworICAgICAgICBpZiAoIXRoaXNPYmplY3QtPm1fd2F0Y2hwb2ludENsZWFudXApCisg
ICAgICAgICAgICB0aGlzT2JqZWN0LT5tX3dhdGNocG9pbnRDbGVhbnVwID0gc3RkOjptYWtlX3Vu
aXF1ZTxXYXRjaHBvaW50Q2xlYW51cD4odGhpc09iamVjdCk7CisgICAgICAgIHZpc2l0b3IuYWRk
VW5jb25kaXRpb25hbEZpbmFsaXplcih0aGlzT2JqZWN0LT5tX3dhdGNocG9pbnRDbGVhbnVwLmdl
dCgpKTsKKyAgICB9CiB9CiAKIFN5bWJvbFRhYmxlKiBGdW5jdGlvbkV4ZWN1dGFibGU6OnN5bWJv
bFRhYmxlKENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKQEAgLTYyMiw2ICs2MjgsMjEgQEAg
RnVuY3Rpb25FeGVjdXRhYmxlKiBGdW5jdGlvbkV4ZWN1dGFibGU6OgogICAgIHJldHVybiB1bmxp
bmtlZEV4ZWN1dGFibGUtPmxpbmsoZXhlYy52bSgpLCBzb3VyY2UsIG92ZXJyaWRlTGluZU51bWJl
cik7CiB9CiAKK0Z1bmN0aW9uRXhlY3V0YWJsZTo6V2F0Y2hwb2ludENsZWFudXA6OldhdGNocG9p
bnRDbGVhbnVwKEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSkKKyAgICA6IG1fZXhlY3V0
YWJsZShleGVjdXRhYmxlKQoreworfQorCitGdW5jdGlvbkV4ZWN1dGFibGU6OldhdGNocG9pbnRD
bGVhbnVwOjp+V2F0Y2hwb2ludENsZWFudXAoKQoreworfQorCit2b2lkIEZ1bmN0aW9uRXhlY3V0
YWJsZTo6V2F0Y2hwb2ludENsZWFudXA6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KCkKK3sKKyAg
ICBtX2V4ZWN1dGFibGUtPmZ1bmN0aW9uUmVhbGxvY2F0aW9uV2F0Y2hwb2ludFNldCgpLmZpbmFs
aXplVW5jb25kaXRpb25hbGx5KAorICAgICAgICBTdHJpbmdGaXJlRGV0YWlsKCJGdW5jdGlvbkV4
ZWN1dGFibGUgY2xlYW4tdXAgZHVyaW5nIEdDIikpOworfQorCiB2b2lkIEV4ZWN1dGFibGVCYXNl
OjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0CiB7CiAgICAgRXhlY3V0YWJsZUJhc2UqIHJl
YWxUaGlzID0gY29uc3RfY2FzdDxFeGVjdXRhYmxlQmFzZSo+KHRoaXMpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAkocmV2aXNpb24gMTgyMDY5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zMyw4ICszMyw2IEBACiAjaW5jbHVkZSAiQ29tcGlsYXRpb25SZXN1bHQuaCIKICNp
bmNsdWRlICJERkdQbGFuLmgiCiAjaW5jbHVkZSAiSGFuZGxlckluZm8uaCIKLSNpbmNsdWRlICJK
U0Z1bmN0aW9uLmgiCi0jaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKICNpbmNsdWRlICJKSVRDb2Rl
LmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIKICNpbmNsdWRlICJSZWdpc3RlclByZXNl
cnZhdGlvbk1vZGUuaCIKQEAgLTQyLDYgKzQwLDcgQEAKICNpbmNsdWRlICJTb3VyY2VDb2RlLmgi
CiAjaW5jbHVkZSAiVHlwZVNldC5oIgogI2luY2x1ZGUgIlVubGlua2VkQ29kZUJsb2NrLmgiCisj
aW5jbHVkZSAiVmFyaWFibGVXYXRjaHBvaW50U2V0LmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCkBA
IC02NDksNiArNjQ4LDggQEAgcHVibGljOgogICAgIHZvaWQgdW5saW5rQ2FsbHMoKTsKIAogICAg
IHZvaWQgY2xlYXJDb2RlKCk7CisgICAgCisgICAgVmFyaWFibGVXYXRjaHBvaW50U2V0JiBmdW5j
dGlvblJlYWxsb2NhdGlvbldhdGNocG9pbnRTZXQoKSB7IHJldHVybiBtX2Z1bmN0aW9uUmVhbGxv
Y2F0aW9uV2F0Y2hwb2ludFNldDsgfQogCiBwcml2YXRlOgogICAgIEZ1bmN0aW9uRXhlY3V0YWJs
ZSgKQEAgLTY2NywxMiArNjY4LDI2IEBAIHByaXZhdGU6CiAgICAgfQogCiAgICAgZnJpZW5kIGNs
YXNzIFNjcmlwdEV4ZWN1dGFibGU7CisgICAgCisgICAgY2xhc3MgV2F0Y2hwb2ludENsZWFudXAg
OiBwdWJsaWMgVW5jb25kaXRpb25hbEZpbmFsaXplciB7CisgICAgcHVibGljOgorICAgICAgICBX
YXRjaHBvaW50Q2xlYW51cChGdW5jdGlvbkV4ZWN1dGFibGUqKTsKKyAgICAgICAgdmlydHVhbCB+
V2F0Y2hwb2ludENsZWFudXAoKTsKKyAgICAgICAgCisgICAgcHJvdGVjdGVkOgorICAgICAgICB2
b2lkIGZpbmFsaXplVW5jb25kaXRpb25hbGx5KCkgb3ZlcnJpZGU7CisgICAgICAgIAorICAgIHBy
aXZhdGU6CisgICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogbV9leGVjdXRhYmxlOworICAgIH07
CiAKICAgICBXcml0ZUJhcnJpZXI8VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU+IG1fdW5saW5r
ZWRFeGVjdXRhYmxlOwogICAgIFJlZlB0cjxGdW5jdGlvbkNvZGVCbG9jaz4gbV9jb2RlQmxvY2tG
b3JDYWxsOwogICAgIFJlZlB0cjxGdW5jdGlvbkNvZGVCbG9jaz4gbV9jb2RlQmxvY2tGb3JDb25z
dHJ1Y3Q7CiAgICAgUmVmUHRyPFR5cGVTZXQ+IG1fcmV0dXJuU3RhdGVtZW50VHlwZVNldDsKICAg
ICB1bnNpZ25lZCBtX3BhcmFtZXRlcnNTdGFydE9mZnNldDsKKyAgICBWYXJpYWJsZVdhdGNocG9p
bnRTZXQgbV9mdW5jdGlvblJlYWxsb2NhdGlvbldhdGNocG9pbnRTZXQ7CisgICAgc3RkOjp1bmlx
dWVfcHRyPFdhdGNocG9pbnRDbGVhbnVwPiBtX3dhdGNocG9pbnRDbGVhbnVwOwogfTsKIAogaW5s
aW5lIHZvaWQgRXhlY3V0YWJsZUJhc2U6OmNsZWFyQ29kZVZpcnR1YWwoRXhlY3V0YWJsZUJhc2Uq
IGV4ZWN1dGFibGUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0NJbmxp
bmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSW5s
aW5lcy5oCShyZXZpc2lvbiAxODIwNjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0NJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTUxLDYgKzUxLDcgQEAKICNpbmNsdWRl
ICJPcGVyYXRpb25zLmgiCiAjaW5jbHVkZSAiU2xvdFZpc2l0b3JJbmxpbmVzLmgiCiAjaW5jbHVk
ZSAiU3RydWN0dXJlSW5saW5lcy5oIgorI2luY2x1ZGUgIlZhcmlhYmxlV2F0Y2hwb2ludFNldElu
bGluZXMuaCIKICNpbmNsdWRlICJXZWFrR0NNYXBJbmxpbmVzLmgiCiAKICNlbmRpZiAvLyBKU0NJ
bmxpbmVzX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rp
b24uY3BwCShyZXZpc2lvbiAxODIwNjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0Z1bmN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTksNiArNTksMTQgQEAgYm9vbCBK
U0Z1bmN0aW9uOjppc0hvc3RGdW5jdGlvbk5vbklubGluZQogICAgIHJldHVybiBpc0hvc3RGdW5j
dGlvbigpOwogfQogCitKU0Z1bmN0aW9uKiBKU0Z1bmN0aW9uOjpjcmVhdGUoVk0mIHZtLCBGdW5j
dGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUsIEpTU2NvcGUqIHNjb3BlKQoreworICAgIEpTRnVu
Y3Rpb24qIHJlc3VsdCA9IGNyZWF0ZUltcGwodm0sIGV4ZWN1dGFibGUsIHNjb3BlKTsKKyAgICBl
eGVjdXRhYmxlLT5mdW5jdGlvblJlYWxsb2NhdGlvbldhdGNocG9pbnRTZXQoKS5ub3RpZnlXcml0
ZSgKKyAgICAgICAgdm0sIGV4ZWN1dGFibGUsIHJlc3VsdCwgIkFsbG9jYXRpbmcgYSBmdW5jdGlv
biIpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIEpTRnVuY3Rpb24qIEpTRnVuY3Rpb246OmNy
ZWF0ZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QsIGludCBsZW5ndGgsIGNv
bnN0IFN0cmluZyYgbmFtZSwgTmF0aXZlRnVuY3Rpb24gbmF0aXZlRnVuY3Rpb24sIEludHJpbnNp
YyBpbnRyaW5zaWMsIE5hdGl2ZUZ1bmN0aW9uIG5hdGl2ZUNvbnN0cnVjdG9yKQogewogICAgIE5h
dGl2ZUV4ZWN1dGFibGUqIGV4ZWN1dGFibGU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0Z1bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNGdW5jdGlvbi5oCShyZXZpc2lvbiAxODIwNjkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTI0LDYgKzI0
LDcgQEAKICNpZm5kZWYgSlNGdW5jdGlvbl9oCiAjZGVmaW5lIEpTRnVuY3Rpb25faAogCisjaW5j
bHVkZSAiRXhlY3V0YWJsZS5oIgogI2luY2x1ZGUgIkludGVybmFsRnVuY3Rpb24uaCIKICNpbmNs
dWRlICJKU0NhbGxlZS5oIgogI2luY2x1ZGUgIkpTU2NvcGUuaCIKQEAgLTU5LDE1ICs2MCwxNSBA
QCBwdWJsaWM6CiAgICAgdHlwZWRlZiBKU0NhbGxlZSBCYXNlOwogCiAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgc3RhdGljIEpTRnVuY3Rpb24qIGNyZWF0ZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgaW50
IGxlbmd0aCwgY29uc3QgU3RyaW5nJiBuYW1lLCBOYXRpdmVGdW5jdGlvbiwgSW50cmluc2ljID0g
Tm9JbnRyaW5zaWMsIE5hdGl2ZUZ1bmN0aW9uIG5hdGl2ZUNvbnN0cnVjdG9yID0gY2FsbEhvc3RG
dW5jdGlvbkFzQ29uc3RydWN0b3IpOwotCi0gICAgc3RhdGljIEpTRnVuY3Rpb24qIGNyZWF0ZShW
TSYgdm0sIEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSwgSlNTY29wZSogc2NvcGUpCisg
ICAgCisgICAgc3RhdGljIEpTRnVuY3Rpb24qIGNyZWF0ZVdpdGhJbnZhbGlkYXRlZFJlYWxsb2Nh
dGlvbldhdGNocG9pbnQoVk0mIHZtLCBGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUsIEpT
U2NvcGUqIHNjb3BlKQogICAgIHsKLSAgICAgICAgSlNGdW5jdGlvbiogZnVuY3Rpb24gPSBuZXcg
KE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0Z1bmN0aW9uPih2bS5oZWFwKSkgSlNGdW5jdGlvbih2
bSwgZXhlY3V0YWJsZSwgc2NvcGUpOwotICAgICAgICBBU1NFUlQoZnVuY3Rpb24tPnN0cnVjdHVy
ZSgpLT5nbG9iYWxPYmplY3QoKSk7Ci0gICAgICAgIGZ1bmN0aW9uLT5maW5pc2hDcmVhdGlvbih2
bSk7Ci0gICAgICAgIHJldHVybiBmdW5jdGlvbjsKKyAgICAgICAgQVNTRVJUKGV4ZWN1dGFibGUt
PmZ1bmN0aW9uUmVhbGxvY2F0aW9uV2F0Y2hwb2ludFNldCgpLmhhc0JlZW5JbnZhbGlkYXRlZCgp
KTsKKyAgICAgICAgcmV0dXJuIGNyZWF0ZUltcGwodm0sIGV4ZWN1dGFibGUsIHNjb3BlKTsKICAg
ICB9CiAKKyAgICBzdGF0aWMgSlNGdW5jdGlvbiogY3JlYXRlKFZNJiB2bSwgRnVuY3Rpb25FeGVj
dXRhYmxlKiBleGVjdXRhYmxlLCBKU1Njb3BlKiBzY29wZSk7CisKICAgICBzdGF0aWMgSlNGdW5j
dGlvbiogY3JlYXRlQnVpbHRpbkZ1bmN0aW9uKFZNJiwgRnVuY3Rpb25FeGVjdXRhYmxlKiwgSlNH
bG9iYWxPYmplY3QqKTsKIAogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CkBAIC0x
NDksNiArMTUwLDE0IEBAIHByb3RlY3RlZDoKICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVu
KEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAKIHByaXZhdGU6CisgICAgc3RhdGljIEpTRnVuY3Rp
b24qIGNyZWF0ZUltcGwoVk0mIHZtLCBGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUsIEpT
U2NvcGUqIHNjb3BlKQorICAgIHsKKyAgICAgICAgSlNGdW5jdGlvbiogZnVuY3Rpb24gPSBuZXcg
KE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0Z1bmN0aW9uPih2bS5oZWFwKSkgSlNGdW5jdGlvbih2
bSwgZXhlY3V0YWJsZSwgc2NvcGUpOworICAgICAgICBBU1NFUlQoZnVuY3Rpb24tPnN0cnVjdHVy
ZSgpLT5nbG9iYWxPYmplY3QoKSk7CisgICAgICAgIGZ1bmN0aW9uLT5maW5pc2hDcmVhdGlvbih2
bSk7CisgICAgICAgIHJldHVybiBmdW5jdGlvbjsKKyAgICB9CisgICAgCiAgICAgZnJpZW5kIGNs
YXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKIAogICAgIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBh
cmd1bWVudHNHZXR0ZXIoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgUHJv
cGVydHlOYW1lKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFs
T2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0dsb2JhbE9iamVjdC5jcHAJKHJldmlzaW9uIDE4MjA2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI1LDYg
KzEyNSw3IEBACiAjaW5jbHVkZSAiU3ltYm9sQ29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJTeW1i
b2xQcm90b3R5cGUuaCIKICNpbmNsdWRlICJWYXJpYWJsZVdhdGNocG9pbnRTZXRJbmxpbmVzLmgi
CisjaW5jbHVkZSAiVmFyaWFibGVXcml0ZUZpcmVEZXRhaWwuaCIKICNpbmNsdWRlICJXZWFrR0NN
YXBJbmxpbmVzLmgiCiAjaW5jbHVkZSAiV2Vha01hcENvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAi
V2Vha01hcFByb3RvdHlwZS5oIgpAQCAtNDg5LDcgKzQ5MCw3IEBAIEpTR2xvYmFsT2JqZWN0OjpO
ZXdHbG9iYWxWYXIgSlNHbG9iYWxPYmoKICAgICBTY29wZU9mZnNldCBvZmZzZXQgPSBzeW1ib2xU
YWJsZSgpLT50YWtlTmV4dFNjb3BlT2Zmc2V0KGxvY2tlcik7CiAgICAgU3ltYm9sVGFibGVFbnRy
eSBuZXdFbnRyeShWYXJPZmZzZXQob2Zmc2V0KSwgKGNvbnN0YW50TW9kZSA9PSBJc0NvbnN0YW50
KSA/IFJlYWRPbmx5IDogMCk7CiAgICAgaWYgKGNvbnN0YW50TW9kZSA9PSBJc1ZhcmlhYmxlKQot
ICAgICAgICBuZXdFbnRyeS5wcmVwYXJlVG9XYXRjaChzeW1ib2xUYWJsZSgpKTsKKyAgICAgICAg
bmV3RW50cnkucHJlcGFyZVRvV2F0Y2goKTsKICAgICBlbHNlCiAgICAgICAgIG5ld0VudHJ5LmRp
c2FibGVXYXRjaGluZygpOwogICAgIHN5bWJvbFRhYmxlKCktPmFkZChsb2NrZXIsIGlkZW50Lmlt
cGwoKSwgbmV3RW50cnkpOwpAQCAtNTEwLDcgKzUxMSw3IEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6
OmFkZEZ1bmN0aW9uKEV4ZWNTdGEKICAgICBOZXdHbG9iYWxWYXIgdmFyID0gYWRkR2xvYmFsVmFy
KHByb3BlcnR5TmFtZSwgSXNWYXJpYWJsZSk7CiAgICAgdmFyaWFibGVBdCh2YXIub2Zmc2V0KS5z
ZXQoZXhlYy0+dm0oKSwgdGhpcywgdmFsdWUpOwogICAgIGlmICh2YXIuc2V0KQotICAgICAgICB2
YXIuc2V0LT5ub3RpZnlXcml0ZSh2bSwgdmFsdWUsIFZhcmlhYmxlV3JpdGVGaXJlRGV0YWlsKHRo
aXMsIHByb3BlcnR5TmFtZSkpOworICAgICAgICB2YXIuc2V0LT50b3VjaChWYXJpYWJsZVdyaXRl
RmlyZURldGFpbCh0aGlzLCBwcm9wZXJ0eU5hbWUpKTsKIH0KIAogc3RhdGljIGlubGluZSBKU09i
amVjdCogbGFzdEluUHJvdG90eXBlQ2hhaW4oSlNPYmplY3QqIG9iamVjdCkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAkocmV2aXNpb24g
MTgyMDY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3Qu
aAkod29ya2luZyBjb3B5KQpAQCAtMzMyLDcgKzMzMiw3IEBAIHByb3RlY3RlZDoKIAogICAgIHN0
cnVjdCBOZXdHbG9iYWxWYXIgewogICAgICAgICBTY29wZU9mZnNldCBvZmZzZXQ7Ci0gICAgICAg
IFZhcmlhYmxlV2F0Y2hwb2ludFNldCogc2V0OworICAgICAgICBXYXRjaHBvaW50U2V0KiBzZXQ7
CiAgICAgfTsKICAgICBOZXdHbG9iYWxWYXIgYWRkR2xvYmFsVmFyKGNvbnN0IElkZW50aWZpZXIm
LCBDb25zdGFudE1vZGUpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0xleGljYWxFbnZpcm9ubWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNMZXhpY2FsRW52aXJvbm1lbnQuY3BwCShyZXZpc2lvbiAxODIwNjkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xleGljYWxFbnZpcm9ubWVudC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTc3LDYgKzc3LDcgQEAgaW5saW5lIGJvb2wgSlNMZXhpY2FsRW52
aXJvbm1lbnQ6OnN5bWJvbAogICAgIEFTU0VSVCghSGVhcDo6aGVhcCh2YWx1ZSkgfHwgSGVhcDo6
aGVhcCh2YWx1ZSkgPT0gSGVhcDo6aGVhcCh0aGlzKSk7CiAgICAgCiAgICAgV3JpdGVCYXJyaWVy
QmFzZTxVbmtub3duPiogcmVnOworICAgIFdhdGNocG9pbnRTZXQqIHNldDsKICAgICB7CiAgICAg
ICAgIEdDU2FmZUNvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKHN5bWJvbFRhYmxlKCktPm1fbG9j
aywgZXhlYy0+dm0oKS5oZWFwKTsKICAgICAgICAgU3ltYm9sVGFibGU6Ok1hcDo6aXRlcmF0b3Ig
aXRlciA9IHN5bWJvbFRhYmxlKCktPmZpbmQobG9ja2VyLCBwcm9wZXJ0eU5hbWUudWlkKCkpOwpA
QCAtOTIsMTEgKzkzLDEyIEBAIGlubGluZSBib29sIEpTTGV4aWNhbEVudmlyb25tZW50OjpzeW1i
b2wKICAgICAgICAgLy8gRGVmZW5kIGFnYWluc3QgdGhlIGluc3BlY3RvciBhc2tpbmcgZm9yIGEg
dmFyIGFmdGVyIGl0IGhhcyBiZWVuIG9wdGltaXplZCBvdXQuCiAgICAgICAgIGlmICghaXNWYWxp
ZChvZmZzZXQpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoVmFyaWFi
bGVXYXRjaHBvaW50U2V0KiBzZXQgPSBpdGVyLT52YWx1ZS53YXRjaHBvaW50U2V0KCkpCi0gICAg
ICAgICAgICBzZXQtPmludmFsaWRhdGUoVmFyaWFibGVXcml0ZUZpcmVEZXRhaWwodGhpcywgcHJv
cGVydHlOYW1lKSk7IC8vIERvbid0IG1lc3MgYXJvdW5kIC0gaWYgd2UgaGFkIGZvdW5kIHRoaXMg
c3RhdGljYWxseSwgd2Ugd291bGQgaGF2ZSBpbnZhbGlkYXRlZCBpdC4KKyAgICAgICAgc2V0ID0g
aXRlci0+dmFsdWUud2F0Y2hwb2ludFNldCgpOwogICAgICAgICByZWcgPSAmdmFyaWFibGVBdChv
ZmZzZXQpOwogICAgIH0KICAgICByZWctPnNldCh2bSwgdGhpcywgdmFsdWUpOworICAgIGlmIChz
ZXQpCisgICAgICAgIHNldC0+aW52YWxpZGF0ZShWYXJpYWJsZVdyaXRlRmlyZURldGFpbCh0aGlz
LCBwcm9wZXJ0eU5hbWUpKTsgLy8gRG9uJ3QgbWVzcyBhcm91bmQgLSBpZiB3ZSBoYWQgZm91bmQg
dGhpcyBzdGF0aWNhbGx5LCB3ZSB3b3VsZCBoYXZlIGludmFsaWRhdGVkIGl0LgogICAgIHJldHVy
biB0cnVlOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Njb3Bl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTY29wZS5o
CShyZXZpc2lvbiAxODIwNjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Nj
b3BlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAKIG5hbWVzcGFjZSBKU0Mgewog
CiBjbGFzcyBTY29wZUNoYWluSXRlcmF0b3I7Ci1jbGFzcyBWYXJpYWJsZVdhdGNocG9pbnRTZXQ7
CitjbGFzcyBXYXRjaHBvaW50U2V0OwogCiBlbnVtIFJlc29sdmVNb2RlIHsKICAgICBUaHJvd0lm
Tm90Rm91bmQsCkBAIC0xMDIsNyArMTAyLDcgQEAgaW5saW5lIGJvb2wgbmVlZHNWYXJJbmplY3Rp
b25DaGVja3MoUmVzbwogfQogCiBzdHJ1Y3QgUmVzb2x2ZU9wIHsKLSAgICBSZXNvbHZlT3AoUmVz
b2x2ZVR5cGUgdHlwZSwgc2l6ZV90IGRlcHRoLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNMZXhp
Y2FsRW52aXJvbm1lbnQqIGxleGljYWxFbnZpcm9ubWVudCwgVmFyaWFibGVXYXRjaHBvaW50U2V0
KiB3YXRjaHBvaW50U2V0LCB1aW50cHRyX3Qgb3BlcmFuZCkKKyAgICBSZXNvbHZlT3AoUmVzb2x2
ZVR5cGUgdHlwZSwgc2l6ZV90IGRlcHRoLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNMZXhpY2Fs
RW52aXJvbm1lbnQqIGxleGljYWxFbnZpcm9ubWVudCwgV2F0Y2hwb2ludFNldCogd2F0Y2hwb2lu
dFNldCwgdWludHB0cl90IG9wZXJhbmQpCiAgICAgICAgIDogdHlwZSh0eXBlKQogICAgICAgICAs
IGRlcHRoKGRlcHRoKQogICAgICAgICAsIHN0cnVjdHVyZShzdHJ1Y3R1cmUpCkBAIC0xMTYsNyAr
MTE2LDcgQEAgc3RydWN0IFJlc29sdmVPcCB7CiAgICAgc2l6ZV90IGRlcHRoOwogICAgIFN0cnVj
dHVyZSogc3RydWN0dXJlOwogICAgIEpTTGV4aWNhbEVudmlyb25tZW50KiBsZXhpY2FsRW52aXJv
bm1lbnQ7Ci0gICAgVmFyaWFibGVXYXRjaHBvaW50U2V0KiB3YXRjaHBvaW50U2V0OworICAgIFdh
dGNocG9pbnRTZXQqIHdhdGNocG9pbnRTZXQ7CiAgICAgdWludHB0cl90IG9wZXJhbmQ7CiB9Owog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xU
YWJsZU9iamVjdC5oCShyZXZpc2lvbiAxODIwNjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMy
LDcgQEAKICNpbmNsdWRlICJKU1Njb3BlLmgiCiAjaW5jbHVkZSAiUHJvcGVydHlEZXNjcmlwdG9y
LmgiCiAjaW5jbHVkZSAiU3ltYm9sVGFibGUuaCIKLSNpbmNsdWRlICJWYXJpYWJsZVdhdGNocG9p
bnRTZXRJbmxpbmVzLmgiCisjaW5jbHVkZSAiVmFyaWFibGVXcml0ZUZpcmVEZXRhaWwuaCIKIAog
bmFtZXNwYWNlIEpTQyB7CiAKQEAgLTEyNiw2ICsxMjYsNyBAQCBpbmxpbmUgYm9vbCBzeW1ib2xU
YWJsZVB1dCgKICAgICBBU1NFUlQoIUhlYXA6OmhlYXAodmFsdWUpIHx8IEhlYXA6OmhlYXAodmFs
dWUpID09IEhlYXA6OmhlYXAob2JqZWN0KSk7CiAgICAgCiAgICAgV3JpdGVCYXJyaWVyQmFzZTxV
bmtub3duPiogcmVnOworICAgIFdhdGNocG9pbnRTZXQqIHNldDsKICAgICB7CiAgICAgICAgIFN5
bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSA9ICpvYmplY3QtPnN5bWJvbFRhYmxlKCk7CiAgICAgICAg
IC8vIEZJWE1FOiBUaGlzIGlzIHZlcnkgc3VzcGljaW91cy4gV2Ugc2hvdWxkbid0IG5lZWQgYSBH
Qy1zYWZlIGxvY2sgaGVyZS4KQEAgLTE0MiwxNyArMTQzLDE1IEBAIGlubGluZSBib29sIHN5bWJv
bFRhYmxlUHV0KAogICAgICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIFN0cmljdE1v
ZGVSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICAgICAgfQotICAgICAgICBpZiAoVmFyaWFibGVXYXRjaHBvaW50U2V0KiBzZXQgPSBpdGVy
LT52YWx1ZS53YXRjaHBvaW50U2V0KCkpIHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBJdCdzIHN0
cmFuZ2UgdGhhdCB3ZSdyZSBkb2luZyB0aGlzIHdoaWxlIGhvbGRpbmcgdGhlIHN5bWJvbCB0YWJs
ZSdzIGxvY2suCi0gICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MTM0NjAxCi0gICAgICAgICAgICBzZXQtPm5vdGlmeVdyaXRlKHZtLCB2YWx1ZSwg
b2JqZWN0LCBwcm9wZXJ0eU5hbWUpOwotICAgICAgICB9CisgICAgICAgIHNldCA9IGl0ZXItPnZh
bHVlLndhdGNocG9pbnRTZXQoKTsKICAgICAgICAgcmVnID0gJm9iamVjdC0+dmFyaWFibGVBdChm
YXN0RW50cnkuc2NvcGVPZmZzZXQoKSk7CiAgICAgfQogICAgIC8vIEknZCBwcmVmZXIgd2Ugbm90
IGhvbGQgbG9jayB3aGlsZSBleGVjdXRpbmcgYmFycmllcnMsIHNpbmNlIEkgcHJlZmVyIHRvIHJl
c2VydmUKICAgICAvLyB0aGUgcmlnaHQgZm9yIGJhcnJpZXJzIHRvIGJlIGFibGUgdG8gdHJpZ2dl
ciBHQy4gQW5kIEkgZG9uJ3Qgd2FudCB0byBob2xkIFZNCiAgICAgLy8gbG9ja3Mgd2hpbGUgR0Mn
aW5nLgogICAgIHJlZy0+c2V0KHZtLCBvYmplY3QsIHZhbHVlKTsKKyAgICBpZiAoc2V0KQorICAg
ICAgICBzZXQtPnRvdWNoKFZhcmlhYmxlV3JpdGVGaXJlRGV0YWlsKG9iamVjdCwgcHJvcGVydHlO
YW1lKSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTE2NCw2ICsxNjMsNyBAQCBpbmxpbmUg
Ym9vbCBzeW1ib2xUYWJsZVB1dFdpdGhBdHRyaWJ1dGVzCiAgICAgQVNTRVJUKCFIZWFwOjpoZWFw
KHZhbHVlKSB8fCBIZWFwOjpoZWFwKHZhbHVlKSA9PSBIZWFwOjpoZWFwKG9iamVjdCkpOwogCiAg
ICAgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiogcmVnOworICAgIFdhdGNocG9pbnRTZXQqIHNl
dDsKICAgICB7CiAgICAgICAgIFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSA9ICpvYmplY3QtPnN5
bWJvbFRhYmxlKCk7CiAgICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKHN5bWJvbFRh
YmxlLm1fbG9jayk7CkBAIC0xNzIsMTIgKzE3MiwxMyBAQCBpbmxpbmUgYm9vbCBzeW1ib2xUYWJs
ZVB1dFdpdGhBdHRyaWJ1dGVzCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIFN5
bWJvbFRhYmxlRW50cnkmIGVudHJ5ID0gaXRlci0+dmFsdWU7CiAgICAgICAgIEFTU0VSVCghZW50
cnkuaXNOdWxsKCkpOwotICAgICAgICBpZiAoVmFyaWFibGVXYXRjaHBvaW50U2V0KiBzZXQgPSBl
bnRyeS53YXRjaHBvaW50U2V0KCkpCi0gICAgICAgICAgICBzZXQtPm5vdGlmeVdyaXRlKHZtLCB2
YWx1ZSwgb2JqZWN0LCBwcm9wZXJ0eU5hbWUpOworICAgICAgICBzZXQgPSBlbnRyeS53YXRjaHBv
aW50U2V0KCk7CiAgICAgICAgIGVudHJ5LnNldEF0dHJpYnV0ZXMoYXR0cmlidXRlcyk7CiAgICAg
ICAgIHJlZyA9ICZvYmplY3QtPnZhcmlhYmxlQXQoZW50cnkuc2NvcGVPZmZzZXQoKSk7CiAgICAg
fQogICAgIHJlZy0+c2V0KHZtLCBvYmplY3QsIHZhbHVlKTsKKyAgICBpZiAoc2V0KQorICAgICAg
ICBzZXQtPnRvdWNoKFZhcmlhYmxlV3JpdGVGaXJlRGV0YWlsKG9iamVjdCwgcHJvcGVydHlOYW1l
KSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1B1dFByb3BlcnR5U2xvdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1B1dFByb3BlcnR5U2xvdC5oCShyZXZpc2lvbiAxODIwNjkpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9QdXRQcm9wZXJ0eVNsb3QuaAkod29ya2luZyBjb3B5
KQpAQCAtMjgsNiArMjgsNyBAQAogI2RlZmluZSBQdXRQcm9wZXJ0eVNsb3RfaAogCiAjaW5jbHVk
ZSAiSlNDSlNWYWx1ZS5oIgorI2luY2x1ZGUgIlByb3BlcnR5T2Zmc2V0LmgiCiAKICNpbmNsdWRl
IDx3dGYvQXNzZXJ0aW9ucy5oPgogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TeW1ib2xUYWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvU3ltYm9sVGFibGUuY3BwCShyZXZpc2lvbiAxODIwNjkpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcg
KzMzLDYgQEAKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiU2xvdFZpc2l0b3JJ
bmxpbmVzLmgiCiAjaW5jbHVkZSAiVHlwZVByb2ZpbGVyLmgiCi0jaW5jbHVkZSAiVmFyaWFibGVX
YXRjaHBvaW50U2V0SW5saW5lcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtNjAsMjEgKzU5
LDE0IEBAIHZvaWQgU3ltYm9sVGFibGVFbnRyeTo6ZnJlZUZhdEVudHJ5U2xvdygKICAgICBkZWxl
dGUgZmF0RW50cnkoKTsKIH0KIAotSlNWYWx1ZSBTeW1ib2xUYWJsZUVudHJ5OjppbmZlcnJlZFZh
bHVlKCkKLXsKLSAgICBpZiAoIWlzRmF0KCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlKCk7Ci0g
ICAgcmV0dXJuIGZhdEVudHJ5KCktPm1fd2F0Y2hwb2ludHMtPmluZmVycmVkVmFsdWUoKTsKLX0K
LQotdm9pZCBTeW1ib2xUYWJsZUVudHJ5OjpwcmVwYXJlVG9XYXRjaChTeW1ib2xUYWJsZSogc3lt
Ym9sVGFibGUpCit2b2lkIFN5bWJvbFRhYmxlRW50cnk6OnByZXBhcmVUb1dhdGNoKCkKIHsKICAg
ICBpZiAoIWlzV2F0Y2hhYmxlKCkpCiAgICAgICAgIHJldHVybjsKICAgICBGYXRFbnRyeSogZW50
cnkgPSBpbmZsYXRlKCk7CiAgICAgaWYgKGVudHJ5LT5tX3dhdGNocG9pbnRzKQogICAgICAgICBy
ZXR1cm47Ci0gICAgZW50cnktPm1fd2F0Y2hwb2ludHMgPSBhZG9wdFJlZihuZXcgVmFyaWFibGVX
YXRjaHBvaW50U2V0KCpzeW1ib2xUYWJsZSkpOworICAgIGVudHJ5LT5tX3dhdGNocG9pbnRzID0g
YWRvcHRSZWYobmV3IFdhdGNocG9pbnRTZXQoQ2xlYXJXYXRjaHBvaW50KSk7CiB9CiAKIHZvaWQg
U3ltYm9sVGFibGVFbnRyeTo6YWRkV2F0Y2hwb2ludChXYXRjaHBvaW50KiB3YXRjaHBvaW50KQpA
QCAtODIsMTUgKzc0LDYgQEAgdm9pZCBTeW1ib2xUYWJsZUVudHJ5OjphZGRXYXRjaHBvaW50KFdh
dAogICAgIGZhdEVudHJ5KCktPm1fd2F0Y2hwb2ludHMtPmFkZCh3YXRjaHBvaW50KTsKIH0KIAot
dm9pZCBTeW1ib2xUYWJsZUVudHJ5Ojpub3RpZnlXcml0ZVNsb3coVk0mIHZtLCBKU1ZhbHVlIHZh
bHVlLCBjb25zdCBGaXJlRGV0YWlsJiBkZXRhaWwpCi17Ci0gICAgVmFyaWFibGVXYXRjaHBvaW50
U2V0KiB3YXRjaHBvaW50cyA9IGZhdEVudHJ5KCktPm1fd2F0Y2hwb2ludHMuZ2V0KCk7Ci0gICAg
aWYgKCF3YXRjaHBvaW50cykKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIHdhdGNocG9pbnRz
LT5ub3RpZnlXcml0ZSh2bSwgdmFsdWUsIGRldGFpbCk7Ci19Ci0KIFN5bWJvbFRhYmxlRW50cnk6
OkZhdEVudHJ5KiBTeW1ib2xUYWJsZUVudHJ5OjppbmZsYXRlU2xvdygpCiB7CiAgICAgRmF0RW50
cnkqIGVudHJ5ID0gbmV3IEZhdEVudHJ5KG1fYml0cyk7CkBAIC0xMDEsNyArODQsNiBAQCBTeW1i
b2xUYWJsZUVudHJ5OjpGYXRFbnRyeSogU3ltYm9sVGFibGVFCiBTeW1ib2xUYWJsZTo6U3ltYm9s
VGFibGUoVk0mIHZtKQogICAgIDogSlNDZWxsKHZtLCB2bS5zeW1ib2xUYWJsZVN0cnVjdHVyZS5n
ZXQoKSkKICAgICAsIG1fdXNlc05vblN0cmljdEV2YWwoZmFsc2UpCi0gICAgLCBtX2Z1bmN0aW9u
RW50ZXJlZE9uY2UoQ2xlYXJXYXRjaHBvaW50KQogewogfQogCkBAIC0xMTMsMzYgKzk1LDExIEBA
IHZvaWQgU3ltYm9sVGFibGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiAKICAgICAKICAgICB2aXNp
dG9yLmFwcGVuZCgmdGhpc1N5bWJvbFRhYmxlLT5tX2FyZ3VtZW50cyk7CiAgICAgCi0gICAgaWYg
KCF0aGlzU3ltYm9sVGFibGUtPm1fd2F0Y2hwb2ludENsZWFudXApIHsKLSAgICAgICAgdGhpc1N5
bWJvbFRhYmxlLT5tX3dhdGNocG9pbnRDbGVhbnVwID0KLSAgICAgICAgICAgIHN0ZDo6bWFrZV91
bmlxdWU8V2F0Y2hwb2ludENsZWFudXA+KHRoaXNTeW1ib2xUYWJsZSk7Ci0gICAgfQotICAgIAot
ICAgIHZpc2l0b3IuYWRkVW5jb25kaXRpb25hbEZpbmFsaXplcih0aGlzU3ltYm9sVGFibGUtPm1f
d2F0Y2hwb2ludENsZWFudXAuZ2V0KCkpOwotICAgIAogICAgIC8vIFNhdmUgc29tZSBtZW1vcnku
IFRoaXMgaXMgTyhuKSB0byByZWJ1aWxkIGFuZCB3ZSBkbyBzbyBvbiB0aGUgZmx5LgogICAgIENv
bmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKHRoaXNTeW1ib2xUYWJsZS0+bV9sb2NrKTsKICAgICB0
aGlzU3ltYm9sVGFibGUtPm1fbG9jYWxUb0VudHJ5ID0gbnVsbHB0cjsKIH0KIAotU3ltYm9sVGFi
bGU6OldhdGNocG9pbnRDbGVhbnVwOjpXYXRjaHBvaW50Q2xlYW51cChTeW1ib2xUYWJsZSogc3lt
Ym9sVGFibGUpCi0gICAgOiBtX3N5bWJvbFRhYmxlKHN5bWJvbFRhYmxlKQotewotfQotCi1TeW1i
b2xUYWJsZTo6V2F0Y2hwb2ludENsZWFudXA6On5XYXRjaHBvaW50Q2xlYW51cCgpIHsgfQotCi12
b2lkIFN5bWJvbFRhYmxlOjpXYXRjaHBvaW50Q2xlYW51cDo6ZmluYWxpemVVbmNvbmRpdGlvbmFs
bHkoKQotewotICAgIFN0cmluZ0ZpcmVEZXRhaWwgZGV0YWlsKCJTeW1ib2wgdGFibGUgY2xlYW4t
dXAgZHVyaW5nIEdDIik7Ci0gICAgTWFwOjppdGVyYXRvciBpdGVyID0gbV9zeW1ib2xUYWJsZS0+
bV9tYXAuYmVnaW4oKTsKLSAgICBNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fc3ltYm9sVGFibGUtPm1f
bWFwLmVuZCgpOwotICAgIGZvciAoOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7Ci0gICAgICAgIGlm
IChWYXJpYWJsZVdhdGNocG9pbnRTZXQqIHNldCA9IGl0ZXItPnZhbHVlLndhdGNocG9pbnRTZXQo
KSkKLSAgICAgICAgICAgIHNldC0+ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoZGV0YWlsKTsKLSAg
ICB9Ci19Ci0KIGNvbnN0IFN5bWJvbFRhYmxlOjpMb2NhbFRvRW50cnlWZWMmIFN5bWJvbFRhYmxl
Ojpsb2NhbFRvRW50cnkoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYpCiB7CiAgICAgaWYgKFVO
TElLRUxZKCFtX2xvY2FsVG9FbnRyeSkpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N5bWJvbFRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3ltYm9sVGFibGUuaAkocmV2aXNpb24gMTgyMDY5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzUsMTMg
KzM1LDE1IEBACiAjaW5jbHVkZSAiU2NvcGVkQXJndW1lbnRzVGFibGUuaCIKICNpbmNsdWRlICJU
eXBlTG9jYXRpb24uaCIKICNpbmNsdWRlICJWYXJPZmZzZXQuaCIKLSNpbmNsdWRlICJWYXJpYWJs
ZVdhdGNocG9pbnRTZXQuaCIKKyNpbmNsdWRlICJXYXRjaHBvaW50LmgiCiAjaW5jbHVkZSA8bWVt
b3J5PgogI2luY2x1ZGUgPHd0Zi9IYXNoVHJhaXRzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3Ry
aW5nSW1wbC5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAorY2xhc3MgU3ltYm9sVGFibGU7CisKIHN0
YXRpYyBBTFdBWVNfSU5MSU5FIGludCBtaXNzaW5nU3ltYm9sTWFya2VyKCkgeyByZXR1cm4gc3Rk
OjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKTsgfQogCiAvLyBUaGUgYml0IHR3aWRkbGluZyBp
biB0aGlzIGNsYXNzIGFzc3VtZXMgdGhhdCBldmVyeSByZWdpc3RlciBpbmRleCBpcyBhCkBAIC02
MywxMSArNjUsMTEgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgaW50IG1pc3NpbmdTeW1ib2xNYQog
Ly8gY291bnRlZCBwb2ludGVyIHRvIGEgc2hhcmVkIFdhdGNocG9pbnRTZXQuIFRodXMsIGluLXBs
YWNlIGVkaXRzIG9mIHRoZQogLy8gV2F0Y2hwb2ludFNldCB3aWxsIG1hbmlmZXN0IGluIGFsbCBj
b3BpZXMuIEhlcmUncyBhIHBpY3R1cmU6CiAvLwotLy8gU3ltYm9sVGFibGVFbnRyeSAtLT4gRmF0
RW50cnkgLS0+IFZhcmlhYmxlV2F0Y2hwb2ludFNldAorLy8gU3ltYm9sVGFibGVFbnRyeSAtLT4g
RmF0RW50cnkgLS0+IFdhdGNocG9pbnRTZXQKIC8vCiAvLyBJZiB5b3UgbWFrZSBhIGNvcHkgb2Yg
YSBTeW1ib2xUYWJsZUVudHJ5LCB5b3Ugd2lsbCBoYXZlOgogLy8KLS8vIG9yaWdpbmFsOiBTeW1i
b2xUYWJsZUVudHJ5IC0tPiBGYXRFbnRyeSAtLT4gVmFyaWFibGVXYXRjaHBvaW50U2V0CisvLyBv
cmlnaW5hbDogU3ltYm9sVGFibGVFbnRyeSAtLT4gRmF0RW50cnkgLS0+IFdhdGNocG9pbnRTZXQK
IC8vIGNvcHk6ICAgICBTeW1ib2xUYWJsZUVudHJ5IC0tPiBGYXRFbnRyeSAtLS0tLV4KIAogc3Ry
dWN0IFN5bWJvbFRhYmxlRW50cnkgewpAQCAtMjYwLDMyICsyNjIsNDQgQEAgcHVibGljOgogICAg
ICAgICByZXR1cm4gYml0cygpICYgRG9udEVudW1GbGFnOwogICAgIH0KICAgICAKLSAgICBKU1Zh
bHVlIGluZmVycmVkVmFsdWUoKTsKLQogICAgIHZvaWQgZGlzYWJsZVdhdGNoaW5nKCkKICAgICB7
CisgICAgICAgIGlmIChXYXRjaHBvaW50U2V0KiBzZXQgPSB3YXRjaHBvaW50U2V0KCkpCisgICAg
ICAgICAgICBzZXQtPmludmFsaWRhdGUoIkRpc2FibGluZyB3YXRjaGluZyBpbiBzeW1ib2wgdGFi
bGUiKTsKICAgICAgICAgaWYgKHZhck9mZnNldCgpLmlzU2NvcGUoKSkKICAgICAgICAgICAgIHBh
Y2sodmFyT2Zmc2V0KCksIGZhbHNlLCBpc1JlYWRPbmx5KCksIGlzRG9udEVudW0oKSk7CiAgICAg
fQogICAgIAotICAgIHZvaWQgcHJlcGFyZVRvV2F0Y2goU3ltYm9sVGFibGUqKTsKKyAgICB2b2lk
IHByZXBhcmVUb1dhdGNoKCk7CiAgICAgCiAgICAgdm9pZCBhZGRXYXRjaHBvaW50KFdhdGNocG9p
bnQqKTsKICAgICAKLSAgICBWYXJpYWJsZVdhdGNocG9pbnRTZXQqIHdhdGNocG9pbnRTZXQoKQor
ICAgIC8vIFRoaXMgd2F0Y2hwb2ludCBzZXQgaXMgaW5pdGlhbGl6ZWQgY2xlYXIsIGFuZCBnb2Vz
IHRocm91Z2ggdGhlIGZvbGxvd2luZyBzdGF0ZSB0cmFuc2l0aW9uczoKKyAgICAvLyAKKyAgICAv
LyBGaXJzdCB3cml0ZSB0byB0aGlzIHZhciwgaW4gYW55IHNjb3BlIHRoYXQgaGFzIHRoaXMgc3lt
Ym9sIHRhYmxlOiBDbGVhci0+SXNXYXRjaGVkLgorICAgIC8vCisgICAgLy8gU2Vjb25kIHdyaXRl
IHRvIHRoaXMgdmFyLCBpbiBhbnkgc2NvcGUgdGhhdCBoYXMgdGhpcyBzeW1ib2wgdGFibGU6IElz
V2F0Y2hlZC0+SXNJbnZhbGlkYXRlZC4KKyAgICAvLworICAgIC8vIFdlIGVuc3VyZSB0aGF0IHdl
IHRvdWNoIHRoZSBzZXQgKGkuZS4gdHJpZ2dlciBpdHMgc3RhdGUgdHJhbnNpdGlvbikgYWZ0ZXIg
d2UgZG8gdGhlIHdyaXRlLiBUaGlzCisgICAgLy8gbWVhbnMgdGhhdCBpZiB5b3UncmUgaW4gdGhl
IGNvbXBpbGVyIHRocmVhZCwgYW5kIHlvdToKKyAgICAvLworICAgIC8vIDEpIE9ic2VydmUgdGhh
dCB0aGUgc2V0IElzV2F0Y2hlZCBhbmQgY29tbWl0IHRvIGFkZGluZyB5b3VyIHdhdGNocG9pbnQu
CisgICAgLy8gMikgTG9hZCBhIHZhbHVlIGZyb20gYW55IHNjb3BlIHRoYXQgaGFzIHRoaXMgd2F0
Y2hwb2ludCBzZXQuCisgICAgLy8KKyAgICAvLyBUaGVuIHlvdSBjYW4gYmUgc3VyZSB0aGF0IHRo
YXQgdmFsdWUgaXMgZWl0aGVyIGdvaW5nIHRvIGJlIHRoZSBjb3JyZWN0IHZhbHVlIGZvciB0aGF0
IHZhciBmb3JldmVyLAorICAgIC8vIG9yIHRoZSB3YXRjaHBvaW50IHNldCB3aWxsIGludmFsaWRh
dGUgYW5kIHlvdSdsbCBnZXQgZmlyZWQuCisgICAgLy8KKyAgICAvLyBJdCdzIHBvc3NpYmxlIHRv
IHdyaXRlIGEgcHJvZ3JhbSB0aGF0IGZpcnN0IGNyZWF0ZXMgbXVsdGlwbGUgc2NvcGVzIHdpdGgg
dGhlIHNhbWUgdmFyLCBhbmQgdGhlbgorICAgIC8vIGluaXRpYWxpemVzIHRoYXQgdmFyIGluIGp1
c3Qgb25lIG9mIHRoZW0uIFRoaXMgbWVhbnMgdGhhdCBhIGNvbXBpbGF0aW9uIGNvdWxkIGNvbnN0
YW50LWZvbGQgdG8gb25lCisgICAgLy8gb2YgdGhlIHNjb3BlcyB0aGF0IHN0aWxsIGhhcyBhbiB1
bmRlZmluZWQgdmFsdWUgZm9yIHRoaXMgdmFyaWFibGUuIFRoYXQncyBmaW5lLCBiZWNhdXNlIGF0
IHRoYXQKKyAgICAvLyBwb2ludCBhbnkgd3JpdGUgdG8gYW55IG9mIHRoZSBpbnN0YW5jZXMgb2Yg
dGhhdCB2YXJpYWJsZSB3b3VsZCBmaXJlIHRoZSB3YXRjaHBvaW50LgorICAgIFdhdGNocG9pbnRT
ZXQqIHdhdGNocG9pbnRTZXQoKQogICAgIHsKICAgICAgICAgaWYgKCFpc0ZhdCgpKQogICAgICAg
ICAgICAgcmV0dXJuIDA7CiAgICAgICAgIHJldHVybiBmYXRFbnRyeSgpLT5tX3dhdGNocG9pbnRz
LmdldCgpOwogICAgIH0KICAgICAKLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgbm90aWZ5V3JpdGUo
Vk0mIHZtLCBKU1ZhbHVlIHZhbHVlLCBjb25zdCBGaXJlRGV0YWlsJiBkZXRhaWwpCi0gICAgewot
ICAgICAgICBpZiAoTElLRUxZKCFpc0ZhdCgpKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAg
ICAgbm90aWZ5V3JpdGVTbG93KHZtLCB2YWx1ZSwgZGV0YWlsKTsKLSAgICB9Ci0gICAgCiBwcml2
YXRlOgogICAgIHN0YXRpYyBjb25zdCBpbnRwdHJfdCBTbGltRmxhZyA9IDB4MTsKICAgICBzdGF0
aWMgY29uc3QgaW50cHRyX3QgUmVhZE9ubHlGbGFnID0gMHgyOwpAQCAtMzA4LDcgKzMyMiw3IEBA
IHByaXZhdGU6CiAgICAgICAgIAogICAgICAgICBpbnRwdHJfdCBtX2JpdHM7IC8vIGFsd2F5cyBo
YXMgRmF0RmxhZyBzZXQgYW5kIGV4YWN0bHkgbWF0Y2hlcyB3aGF0IHRoZSBiaXRzIHdvdWxkIGhh
dmUgYmVlbiBpZiB0aGlzIHdhc24ndCBmYXQuCiAgICAgICAgIAotICAgICAgICBSZWZQdHI8VmFy
aWFibGVXYXRjaHBvaW50U2V0PiBtX3dhdGNocG9pbnRzOworICAgICAgICBSZWZQdHI8V2F0Y2hw
b2ludFNldD4gbV93YXRjaHBvaW50czsKICAgICB9OwogICAgIAogICAgIFN5bWJvbFRhYmxlRW50
cnkmIGNvcHlTbG93KGNvbnN0IFN5bWJvbFRhYmxlRW50cnkmKTsKQEAgLTY0NiwxOCArNjYwLDYg
QEAgcHJvdGVjdGVkOgogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9
IFN0cnVjdHVyZUlzSW1tb3J0YWwgfCBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKIAogcHJpdmF0ZToK
LSAgICBjbGFzcyBXYXRjaHBvaW50Q2xlYW51cCA6IHB1YmxpYyBVbmNvbmRpdGlvbmFsRmluYWxp
emVyIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIFdhdGNocG9pbnRDbGVhbnVwKFN5bWJvbFRhYmxl
Kik7Ci0gICAgICAgIHZpcnR1YWwgfldhdGNocG9pbnRDbGVhbnVwKCk7Ci0gICAgICAgIAotICAg
IHByb3RlY3RlZDoKLSAgICAgICAgdmlydHVhbCB2b2lkIGZpbmFsaXplVW5jb25kaXRpb25hbGx5
KCkgb3ZlcnJpZGU7Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBTeW1ib2xUYWJsZSogbV9zeW1i
b2xUYWJsZTsKLSAgICB9OwotICAgIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIFN5bWJvbFRhYmxl
KFZNJik7CiAgICAgflN5bWJvbFRhYmxlKCk7CiAKQEAgLTY3NSwxMiArNjc3LDkgQEAgcHJpdmF0
ZToKICAgICAKICAgICBXcml0ZUJhcnJpZXI8U2NvcGVkQXJndW1lbnRzVGFibGU+IG1fYXJndW1l
bnRzOwogICAgIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxXYXRjaHBvaW50Q2xlYW51cD4gbV93YXRj
aHBvaW50Q2xlYW51cDsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8TG9jYWxUb0VudHJ5VmVjPiBtX2xv
Y2FsVG9FbnRyeTsKIAogcHVibGljOgotICAgIElubGluZVdhdGNocG9pbnRTZXQgbV9mdW5jdGlv
bkVudGVyZWRPbmNlOwotICAgIAogICAgIG11dGFibGUgQ29uY3VycmVudEpJVExvY2sgbV9sb2Nr
OwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZVByb2ZpbGVy
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlUHJv
ZmlsZXIuY3BwCShyZXZpc2lvbiAxODIwNjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9UeXBlUHJvZmlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAK
ICNpbmNsdWRlICJJbnNwZWN0b3JQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlICJUeXBlTG9j
YXRpb24uaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKIG5hbWVzcGFj
ZSBKU0MgewogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2luZmVy
LXVuaW5pdGlhbGl6ZWQtY2xvc3VyZS12YXIuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9pbmZlci11bmluaXRpYWxpemVkLWNsb3N1cmUtdmFyLmpz
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9pbmZl
ci11bmluaXRpYWxpemVkLWNsb3N1cmUtdmFyLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEs
MjYgQEAKK2Z1bmN0aW9uIGZvbyhwKSB7CisgICAgdmFyIHg7CisgICAgCisgICAgbm9JbmxpbmUo
Zik7CisgICAgCisgICAgaWYgKHApIHsKKyAgICAgICAgdmFyIGYgPSBmdW5jdGlvbigpIHsgcmV0
dXJuIHg7IH0KKyAgICAgICAgCisgICAgICAgIGZvbyhmYWxzZSk7CisgICAgICAgIAorICAgICAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwOyArK2kpIHsKKyAgICAgICAgICAgIHZhciByZXN1
bHQgPSBmKCk7CisgICAgICAgICAgICBpZiAocmVzdWx0ICE9PSB2b2lkIDApCisgICAgICAgICAg
ICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0ICgxKTogIiArIHJlc3VsdDsKKyAgICAgICAg
fQorICAgICAgICAKKyAgICAgICAgeCA9IDQzOworICAgICAgICAKKyAgICAgICAgdmFyIHJlc3Vs
dCA9IGYoKTsKKyAgICAgICAgaWYgKHJlc3VsdCAhPSA0MykKKyAgICAgICAgICAgIHRocm93ICJF
cnJvcjogYmFkIHJlc3VsdCAoMik6ICIgKyByZXN1bHQ7CisgICAgfSBlbHNlCisgICAgICAgIHgg
PSA0MjsKK30KKworZm9vKHRydWUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3Rz
L3N0cmVzcy9zaW5nbGV0b24tc2NvcGUtdGhlbi1vdmVyd3JpdGUuanMKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9zaW5nbGV0b24tc2NvcGUtdGhlbi1v
dmVyd3JpdGUuanMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMv
c3RyZXNzL3NpbmdsZXRvbi1zY29wZS10aGVuLW92ZXJ3cml0ZS5qcwkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDIwIEBACitmdW5jdGlvbiBmb28oYSkgeworICAgIHZhciB4ID0gYSArIDE7Cisg
ICAgdmFyIGYgPSBmdW5jdGlvbihhKSB7CisgICAgICAgIHJldHVybiB4ICsgYTsKKyAgICB9Owor
ICAgIG5vSW5saW5lKGYpOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgewor
ICAgICAgICB2YXIgcmVzdWx0ID0gZihpKTsKKyAgICAgICAgaWYgKHJlc3VsdCAhPSBhICsgMSAr
IGkpCisgICAgICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQ6ICIgKyByZXN1bHQ7Cisg
ICAgfQorICAgIHggPSA5OTk7CisgICAgdmFyIHJlc3VsdCA9IGYoMSk7CisgICAgaWYgKHJlc3Vs
dCAhPSA5OTkgKyAxKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQ6ICIgKyByZXN1
bHQ7Cit9CisKK25vSW5saW5lKGZvbyk7Citmb3IgKHZhciBpID0gMDsgaSA8IDM7ICsraSkKKyAg
ICBmb28oNDIgKyBpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3Mv
c2luZ2xldG9uLXNjb3BlLXRoZW4tcmVhbGxvYy1hbmQtb3ZlcndyaXRlLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3Mvc2luZ2xldG9uLXNjb3BlLXRo
ZW4tcmVhbGxvYy1hbmQtb3ZlcndyaXRlLmpzCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9zaW5nbGV0b24tc2NvcGUtdGhlbi1yZWFsbG9jLWFuZC1v
dmVyd3JpdGUuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMCBAQAorZnVuY3Rpb24gZm9v
KGEpIHsKKyAgICB2YXIgeCA9IGEgKyAxOworICAgIHJldHVybiBmdW5jdGlvbihhKSB7CisgICAg
ICAgIHJldHVybiB4ICsgYTsKKyAgICB9OworfQorCit2YXIgZiA9IGZvbyg0Mik7Citub0lubGlu
ZShmKTsKKworZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsgKytpKSB7CisgICAgdmFyIHJlc3Vs
dCA9IGYoaSk7CisgICAgaWYgKHJlc3VsdCAhPSA0MiArIDEgKyBpKQorICAgICAgICB0aHJvdyAi
RXJyb3I6IGJhZCByZXN1bHQ6ICIgKyByZXN1bHQ7Cit9CisKK3ZhciBmID0gZm9vKDQzKTsKK3Zh
ciByZXN1bHQgPSBmKDEpOworaWYgKHJlc3VsdCAhPSA0MyArIDEgKyAxKQorICAgIHRocm93ICJF
cnJvcjogYmFkIHJlc3VsdDogIiArIHJlc3VsdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS90ZXN0cy9zdHJlc3Mvc2luZ2xldG9uLXNjb3BlLXRoZW4tcmVhbGxvYy5qcwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3NpbmdsZXRvbi1zY29wZS10
aGVuLXJlYWxsb2MuanMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVz
dHMvc3RyZXNzL3NpbmdsZXRvbi1zY29wZS10aGVuLXJlYWxsb2MuanMJKHdvcmtpbmcgY29weSkK
QEAgLTAsMCArMSwyMCBAQAorZnVuY3Rpb24gZm9vKGEpIHsKKyAgICB2YXIgeCA9IGEgKyAxOwor
ICAgIHJldHVybiBmdW5jdGlvbihhKSB7CisgICAgICAgIHJldHVybiB4ICs9IGE7CisgICAgfTsK
K30KKwordmFyIGYgPSBmb28oNDIpOworbm9JbmxpbmUoZik7CisKK2ZvciAodmFyIGkgPSAwOyBp
IDwgMTAwMDA7ICsraSkgeworICAgIHZhciByZXN1bHQgPSBmKDEpOworICAgIGlmIChyZXN1bHQg
IT0gNDIgKyAxICsgaSArIDEpCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdDogIiAr
IHJlc3VsdDsKK30KKwordmFyIGYgPSBmb28oNDMpOwordmFyIHJlc3VsdCA9IGYoMSk7CitpZiAo
cmVzdWx0ICE9IDQzICsgMSArIDEpCisgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0OiAiICsg
cmVzdWx0OwpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMTgyMTkxKQorKysgTGF5b3V0VGVzdHMvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjAgQEAKKzIwMTUtMDMtMzEgIEZpbGlwIFBp
emxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBKU0Mgc2hvdWxkIGRldGVjdCBzaW5n
bGV0b24gZnVuY3Rpb25zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0xNDMyMzIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIGpzL3JlZ3Jlc3MvY3JlYXRlLWxvdHMtb2YtZnVuY3Rpb25zLWV4cGVjdGVkLnR4
dDogQWRkZWQuCisgICAgICAgICoganMvcmVncmVzcy9jcmVhdGUtbG90cy1vZi1mdW5jdGlvbnMu
aHRtbDogQWRkZWQuCisgICAgICAgICoganMvcmVncmVzcy9uby1pbmxpbmUtY29uc3RydWN0b3It
ZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL25vLWlubGluZS1jb25z
dHJ1Y3Rvci5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9j
cmVhdGUtbG90cy1vZi1mdW5jdGlvbnMuanM6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3Mv
c2NyaXB0LXRlc3RzL25vLWlubGluZS1jb25zdHJ1Y3Rvci5qczogQWRkZWQuCisgICAgICAgICog
anMvcmVncmVzcy9zY3JpcHQtdGVzdHMvc2luZ2xldG9uLXNjb3BlLmpzOiBBZGRlZC4KKyAgICAg
ICAgKiBqcy9yZWdyZXNzL3NpbmdsZXRvbi1zY29wZS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAg
ICAgICAqIGpzL3JlZ3Jlc3Mvc2luZ2xldG9uLXNjb3BlLmh0bWw6IEFkZGVkLgorCiAyMDE1LTAz
LTMxICBCZXRoIERha2luICA8YmRha2luQGFwcGxlLmNvbT4KIAogICAgICAgICBSRUdSRVNTSU9O
IChyMTczNDg0KTogUmVkdWNpbmcgY29udGVudCBvZiBzY3JvbGxhYmxlIHJlZ2lvbiBkb2VzIG5v
dCByZXNldCBzY3JvbGwgCkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2NyZWF0ZS1sb3Rz
LW9mLWZ1bmN0aW9ucy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMv
cmVncmVzcy9jcmVhdGUtbG90cy1vZi1mdW5jdGlvbnMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAw
KQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9jcmVhdGUtbG90cy1vZi1mdW5jdGlvbnMtZXhw
ZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAgQEAKK0pTUmVncmVzcy9jcmVh
dGUtbG90cy1vZi1mdW5jdGlvbnMKKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVz
IG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BB
U1Mgbm8gZXhjZXB0aW9uIHRocm93bgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQor
CitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvY3JlYXRlLWxv
dHMtb2YtZnVuY3Rpb25zLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVz
cy9jcmVhdGUtbG90cy1vZi1mdW5jdGlvbnMuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRl
c3RzL2pzL3JlZ3Jlc3MvY3JlYXRlLWxvdHMtb2YtZnVuY3Rpb25zLmh0bWwJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwxMiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQg
SFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMv
anMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0i
Li4vLi4vcmVzb3VyY2VzL3JlZ3Jlc3MtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJz
Y3JpcHQtdGVzdHMvY3JlYXRlLWxvdHMtb2YtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KKzxzY3Jp
cHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcmVncmVzcy1wb3N0LmpzIj48L3NjcmlwdD4KKzxzY3Jp
cHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9k
eT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvbm8taW5saW5lLWNvbnN0
cnVjdG9yLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNz
L25vLWlubGluZS1jb25zdHJ1Y3Rvci1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlv
dXRUZXN0cy9qcy9yZWdyZXNzL25vLWlubGluZS1jb25zdHJ1Y3Rvci1leHBlY3RlZC50eHQJKHdv
cmtpbmcgY29weSkKQEAgLTAsMCArMSwxMCBAQAorSlNSZWdyZXNzL25vLWlubGluZS1jb25zdHJ1
Y3RvcgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3Nh
Z2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBubyBleGNlcHRpb24g
dGhyb3duCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUK
KwpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9uby1pbmxpbmUtY29uc3RydWN0b3IuaHRt
bAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL25vLWlubGluZS1jb25zdHJ1
Y3Rvci5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9uby1pbmxp
bmUtY29uc3RydWN0b3IuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyIEBACis8IURP
Q1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFk
PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+
Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcmVncmVzcy1w
cmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy9uby1pbmxpbmUtY29u
c3RydWN0b3IuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdy
ZXNzLXBvc3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10
ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVz
dHMvanMvcmVncmVzcy9zaW5nbGV0b24tc2NvcGUtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2luZ2xldG9uLXNjb3BlLWV4cGVjdGVkLnR4dAkocmV2
aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2luZ2xldG9uLXNjb3BlLWV4cGVj
dGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwIEBACitKU1JlZ3Jlc3Mvc2luZ2xl
dG9uLXNjb3BlCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIg
bWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIG5vIGV4Y2Vw
dGlvbiB0aHJvd24KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01Q
TEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NpbmdsZXRvbi1zY29wZS5odG1s
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2luZ2xldG9uLXNjb3BlLmh0
bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NpbmdsZXRvbi1zY29w
ZS5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIgQEAKKzwhRE9DVFlQRSBIVE1MIFBV
QkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNy
Yz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxi
b2R5PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNzLXByZS5qcyI+PC9zY3Jp
cHQ+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL3NpbmdsZXRvbi1zY29wZS5qcyI+PC9zY3Jp
cHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3JlZ3Jlc3MtcG9zdC5qcyI+PC9zY3Jp
cHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3Jp
cHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3Njcmlw
dC10ZXN0cy9jcmVhdGUtbG90cy1vZi1mdW5jdGlvbnMuanMKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvY3JlYXRlLWxvdHMtb2YtZnVuY3Rpb25zLmpz
CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvY3Jl
YXRlLWxvdHMtb2YtZnVuY3Rpb25zLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIgQEAK
K2Z1bmN0aW9uIGZvbygpIHsKKyAgICB2YXIgcmVzdWx0ID0gMDsKKyAgICBmb3IgKHZhciBpID0g
MDsgaSA8IDEwMDsgKytpKQorICAgICAgICByZXN1bHQgKz0gKGZ1bmN0aW9uKCkgeyByZXR1cm4g
aSB9KSgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTAw
MDA7ICsraSkgeworICAgIHZhciByZXN1bHQgPSBmb28oKTsKKyAgICBpZiAocmVzdWx0ICE9IDQ5
NTApCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdDogIiArIHJlc3VsdDsKK30KSW5k
ZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL25vLWlubGluZS1jb25zdHJ1
Y3Rvci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0
cy9uby1pbmxpbmUtY29uc3RydWN0b3IuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9q
cy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9uby1pbmxpbmUtY29uc3RydWN0b3IuanMJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwxMyBAQAorZnVuY3Rpb24gRm9vKCkgeworICAgIHZhciBvID0ge2Y6
e2Y6e2Y6e2Y6NDJ9fX19OworICAgIHRoaXMuZiA9IDQyOworfQorCitub0lubGluZShGb28pOwor
Citmb3IgKHZhciBpID0gMDsgaSA8IDMwMDAwMDA7ICsraSkgeworICAgIHZhciByZXN1bHQgPSBu
ZXcgRm9vKCk7CisgICAgaWYgKHJlc3VsdC5mICE9IDQyKQorICAgICAgICB0aHJvdyAiRXJyb3I6
IGJhZCByZXN1bHQ6ICIgKyByZXN1bHQuZjsKK30KKwpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVn
cmVzcy9zY3JpcHQtdGVzdHMvc2luZ2xldG9uLXNjb3BlLmpzCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL3NpbmdsZXRvbi1zY29wZS5qcwkocmV2aXNp
b24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL3NpbmdsZXRvbi1z
Y29wZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE2IEBACitmdW5jdGlvbiBmb28oKSB7
CisgICAgdmFyIHggPSA0MjsKKyAgICB2YXIgeSA9IDQzOworICAgIHJldHVybiBmdW5jdGlvbih6
KSB7CisgICAgICAgIHZhciByZXN1bHQgPSB4ICsgeTsKKyAgICAgICAgeCArPSB6OworICAgICAg
ICB5ICs9IHo7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorfQorCit2YXIgZiA9IGZv
bygpOworbm9JbmxpbmUoZik7CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDAwMDA7ICsraSkK
KyAgICBmKDEpOwo=
</data>
<flag name="review"
          id="274681"
          type_id="1"
          status="+"
          setter="msaboff"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>249844</attachid>
            <date>2015-03-31 13:06:26 -0700</date>
            <delta_ts>2015-03-31 16:01:50 -0700</delta_ts>
            <desc>with fixes</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>118346</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTgyMTkxKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5NyBA
QAorMjAxNS0wMy0zMSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEpTQyBzaG91bGQgZGV0ZWN0IHNpbmdsZXRvbiBmdW5jdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MzIzMgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE1pY2hhZWwgU2Fib2ZmLgorICAgICAgICAKKyAgICAgICAgVGhpcyBzdGFydGVkIG91dCBh
cyBhbiBhdHRlbXB0IHRvIG1ha2UgY29uc3RydWN0b3JzIGZhc3RlciBieSBkZXRlY3Rpbmcgd2hl
biBhIGNvbnN0cnVjdG9yIGlzIGEKKyAgICAgICAgc2luZ2xldG9uLiBUaGUgaWRlYSBpcyB0aGF0
IGVhY2ggRnVuY3Rpb25FeGVjdXRhYmxlIGhhcyBhIFZhcmlhYmxlV2F0Y2hwb2ludFNldCAtIGEg
d2F0Y2hwb2ludAorICAgICAgICBhbG9uZyB3aXRoIGFuIGluZmVycmVkIHZhbHVlIC0gdGhhdCBk
ZXRlY3RzIGlmIG9ubHkgb25lIEpTRnVuY3Rpb24gaGFzIGJlZW4gYWxsb2NhdGVkIGZvciB0aGF0
CisgICAgICAgIGV4ZWN1dGFibGUsIGFuZCBpZiBzbywgd2hhdCB0aGF0IEpTRnVuY3Rpb24gaXMu
IFRoZW4sIGluc2lkZSB0aGUgY29kZSBmb3IgdGhlIEZ1bmN0aW9uRXhlY3V0YWJsZSwKKyAgICAg
ICAgaWYgdGhlIHdhdGNocG9pbnQgc2V0IGhhcyBhbiBpbmZlcnJlZCB2YWx1ZSAoaS5lLiBpdCdz
IGJlZW4gaW5pdGlhbGl6ZWQgYW5kIGl0IGlzIHN0aWxsIHZhbGlkKSwKKyAgICAgICAgd2UgY2Fu
IGNvbnN0YW50LWZvbGQgR2V0Q2FsbGVlLgorICAgICAgICAKKyAgICAgICAgVW5mb3J0dW5hdGVs
eSwgY29uc3RydWN0b3JzIGRvbid0IHVzZSBHZXRDYWxsZWUgYW55bW9yZSwgc28gdGhhdCBkaWRu
J3QgcGFuIG91dC4gQnV0IGluIHRoZQorICAgICAgICBwcm9jZXNzIEkgcmVhbGl6ZWQgdGhyZWUg
dGhpbmdzOgorICAgICAgICAKKyAgICAgICAgLSBUaGlzIGFsbG93cyB1cyB0byBjb21wbGV0ZWx5
IGVsaW1pbmF0ZSB0aGUgR2V0Q2FsbGVlL0dldFNjb3BlIHNlcXVlbmNlIHRoYXQgd2Ugc3RpbGwg
c29tZXRpbWVzCisgICAgICAgICAgaGFkIGV2ZW4gaW4gY29kZSB3aGVyZSBvdXIgc2luZ2xldG9u
LWNsb3N1cmUgZGV0ZWN0aW9uIHdvcmtlZC4gVGhhdCdzIGJlY2F1c2Ugc2luZ2xldG9uLWNsb3N1
cmUKKyAgICAgICAgICBpbmZlcmVuY2Ugd29ya2VkIGF0IHRoZSBvcF9yZXNvbHZlX3Njb3BlLCBh
bmQgdGhhdCBvcF9yZXNvbHZlX3Njb3BlIHN0aWxsIG5lZWRlZCB0byBrZWVwIGFsaXZlCisgICAg
ICAgICAgdGhlIGluY29taW5nIHNjb3BlIGluIGNhc2Ugd2UgT1NSIGV4aXQuIEJ1dCBieSBjb25z
dGFudC1mb2xkaW5nIEdldENhbGxlZSwgdGhhdCBzZXF1ZW5jZQorICAgICAgICAgIGRpc2FwcGVh
cnMuIE9TUiBleGl0IGNhbiByZW1hdGVyaWFsaXplIHRoZSBjYWxsZWUgb3IgdGhlIHNjb3BlIGJ5
IGp1c3Qga25vd2luZyB0aGVpciBjb25zdGFudAorICAgICAgICAgIHZhbHVlcy4KKyAgICAgICAg
CisgICAgICAgIC0gVGhpcyBhbGxvd3MgdXMgdG8gZWxpbWluYXRlIHRoZSBmdW5jdGlvbiByZWVu
dHJ5IHdhdGNocG9pbnQuIFRoYXQgd2F0Y2hwb2ludCBpbmZlcnJlZCBzaW5nbGV0b24KKyAgICAg
ICAgICBjbG9zdXJlcy4gQnV0IHdlIGRvbid0IG5lZWQgdG8gaW5mZXIgc2luZ2xldG9uIGNsb3N1
cmVzLCBpZiB3ZSBhcmUgaW5mZXJyaW5nIHNpbmdsZXRvbiBjYWxsZWVzLgorICAgICAgICAgIFNv
LCB0aGF0IGtpbGxzIGEgYnVuY2ggb2YgY29kZS4KKyAgICAgICAgCisgICAgICAgIC0gVGhpcyBh
bGxvd3MgdXMgdG8gdXNlIGEgbm9ybWFsIFdhdGNocG9pbnRTZXQsIGluc3RlYWQgb2YgYSBWYXJp
YWJsZVdhdGNocG9pbnRTZXQsIGZvciBpbmZlcnJpbmcKKyAgICAgICAgICBjb25zdGFudCB2YWx1
ZXMgaW4gc2NvcGVzLiBQcmV2aW91c2x5IHdoZW4gdGhlIERGRyBpbmZlcnJlZCB0aGF0IGEgY2xv
c3VyZSB2YXJpYWJsZSB3YXMKKyAgICAgICAgICBjb25zdGFudCwgaXQgd291bGRuJ3Qga25vdyB3
aGljaCBjbG9zdXJlIHRoYXQgdmFyaWFibGUgd2FzIGluIGFuZCBzbyBpdCBjb3VsZG4ndCBqdXN0
IGxvYWQgdGhhdAorICAgICAgICAgIHZhbHVlLiBCdXQgbm93IHdlIGFyZSBmaXJzdCBpbmZlcnJp
bmcgdGhhdCB0aGUgZnVuY3Rpb24gaXMgYSBzaW5nbGV0b24sIHdoaWNoIG1lYW5zIHRoYXQgd2UK
KyAgICAgICAgICBrbm93IGV4YWN0bHkgd2hhdCBzY29wZSBpdCBwb2ludHMgdG8sIGFuZCB3ZSBj
YW4gbG9hZCB0aGUgdmFsdWUgZnJvbSB0aGUgc2NvcGUuIFVzaW5nIGEKKyAgICAgICAgICBXYXRj
aHBvaW50U2V0IGluc3RlYWQgb2YgYSBWYXJpYWJsZVdhdGNocG9pbnRTZXQgc2F2ZXMgc29tZSBt
ZW1vcnkgYW5kIHNpbXBsaWZpZXMgYSBidW5jaCBvZgorICAgICAgICAgIGNvZGUuIFRoaXMgYWxz
byBtZWFucyB0aGF0IG5vdywgdGhlIG9ubHkgdXNlciBvZiBWYXJpYWJsZVdhdGNocG9pbnRTZXQg
aXMgRnVuY3Rpb25FeGVjdXRhYmxlLgorICAgICAgICAgIEkndmUgdHdlYWtlZCB0aGUgY29kZSBv
ZiBWYXJpYWJsZVdhdGNocG9pbnRTZXQgdG8gcmVkdWNlIGl0cyBwb3dlciB0byBqdXN0IGJlIHdo
YXQKKyAgICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUgd2FudHMuCisgICAgICAgIAorICAgICAg
ICBUaGlzIGFsc28gaGFzIHRoZSBlZmZlY3Qgb2Ygc2ltcGxpZnlpbmcgdGhlIGltcGxlbWVudGF0
aW9uIG9mIGJsb2NrIHNjb3BpbmcuIFByaW9yIHRvIHRoaXMKKyAgICAgICAgY2hhbmdlLCBibG9j
ayBzY29waW5nIHdvdWxkIGhhZCBoYWQgdG8gaGF2ZSBzb21lIHN0b3J5IGZvciB0aGUgZnVuY3Rp
b24gcmVlbnRyeSB3YXRjaHBvaW50IG9uIGFueQorICAgICAgICBuZXN0ZWQgc3ltYm9sIHRhYmxl
LiBUaGF0J3MgdG90YWxseSB3ZWlyZCB0byB0aGluayBhYm91dDsgaXQncyBub3QgcmVhbGx5IGEg
ZnVuY3Rpb24gcmVlbnRyeSBidXQKKyAgICAgICAgYSBzY29wZSByZWVudHJ5LiBOb3cgd2UgZG9u
J3QgaGF2ZSB0byB0aGluayBhYm91dCB0aGlzLiBDb25zdGFudCBpbmZlcmVuY2Ugb24gbmVzdGVk
IHNjb3BlcyB3aWxsCisgICAgICAgICJqdXN0IHdvcmsiOiBpZiB3ZSBwcm92ZSB0aGF0IHdlIGtu
b3cgdGhlIGNvbnN0YW50IHZhbHVlIG9mIHRoZSBzY29wZSB0aGVuIHRoZSBtYWNoaW5lcnkga2lj
a3MKKyAgICAgICAgaW4sIG90aGVyd2lzZSBpdCBkb2Vzbid0LgorCisgICAgICAgICogQ01ha2VM
aXN0cy50eHQ6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29y
ZS52Y3hwcm9qOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2o6CisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0Lmpzb246CisgICAgICAgICog
Ynl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuaDoKKyAgICAgICAgKEpTQzo6Y29tcHV0ZVVzZXNGb3JC
eXRlY29kZU9mZnNldCk6CisgICAgICAgIChKU0M6OmNvbXB1dGVEZWZzRm9yQnl0ZWNvZGVPZmZz
ZXQpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OkNv
ZGVCbG9jazo6ZHVtcEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpDb2RlQmxv
Y2spOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KToK
KyAgICAgICAgKiBieXRlY29kZS9Db2RlT3JpZ2luLmNwcDoKKyAgICAgICAgKEpTQzo6SW5saW5l
Q2FsbEZyYW1lOjpjYWxsZWVDb25zdGFudCk6CisgICAgICAgIChKU0M6OklubGluZUNhbGxGcmFt
ZTo6dmlzaXRBZ2dyZWdhdGUpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVPcmlnaW4uaDoKKyAg
ICAgICAgKEpTQzo6SW5saW5lQ2FsbEZyYW1lOjpjYWxsZWVDb25zdGFudCk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OklubGluZUNhbGxGcmFtZTo6dmlzaXRBZ2dyZWdhdGUpOiBEZWxldGVkLgor
ICAgICAgICAqIGJ5dGVjb2RlL0luc3RydWN0aW9uLmg6CisgICAgICAgICogYnl0ZWNvZGUvVmFy
aWFibGVXYXRjaHBvaW50U2V0LmNwcDoKKyAgICAgICAgKEpTQzo6VmFyaWFibGVXYXRjaHBvaW50
U2V0Ojpub3RpZnlXcml0ZSk6CisgICAgICAgIChKU0M6OlZhcmlhYmxlV3JpdGVGaXJlRGV0YWls
OjpkdW1wKTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9WYXJpYWJsZVdhdGNocG9pbnRT
ZXQuaDoKKyAgICAgICAgKEpTQzo6VmFyaWFibGVXYXRjaHBvaW50U2V0OjpWYXJpYWJsZVdhdGNo
cG9pbnRTZXQpOgorICAgICAgICAoSlNDOjpWYXJpYWJsZVdhdGNocG9pbnRTZXQ6Om5lZWRUb0Zp
bmFsaXplKToKKyAgICAgICAgKEpTQzo6VmFyaWFibGVXYXRjaHBvaW50U2V0OjpmaW5hbGl6ZVVu
Y29uZGl0aW9uYWxseSk6CisgICAgICAgIChKU0M6OlZhcmlhYmxlV3JpdGVGaXJlRGV0YWlsOjpW
YXJpYWJsZVdyaXRlRmlyZURldGFpbCk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUvVmFy
aWFibGVXYXRjaHBvaW50U2V0SW5saW5lcy5oOgorICAgICAgICAoSlNDOjpWYXJpYWJsZVdhdGNo
cG9pbnRTZXQ6Om5vdGlmeVdyaXRlKToKKyAgICAgICAgKiBieXRlY29kZS9WYXJpYWJsZVdyaXRl
RmlyZURldGFpbC5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpWYXJpYWJsZVdyaXRlRmlyZURl
dGFpbDo6ZHVtcCk6CisgICAgICAgICogYnl0ZWNvZGUvVmFyaWFibGVXcml0ZUZpcmVEZXRhaWwu
aDogQWRkZWQuCisgICAgICAgIChKU0M6OlZhcmlhYmxlV3JpdGVGaXJlRGV0YWlsOjpWYXJpYWJs
ZVdyaXRlRmlyZURldGFpbCk6CisgICAgICAgICogYnl0ZWNvZGUvV2F0Y2hwb2ludC5oOgorICAg
ICAgICAoSlNDOjpXYXRjaHBvaW50U2V0OjpzdGFydFdhdGNoaW5nKToKKyAgICAgICAgKEpTQzo6
V2F0Y2hwb2ludFNldDo6ZmlyZUFsbCk6CisgICAgICAgIChKU0M6OldhdGNocG9pbnRTZXQ6OnRv
dWNoKToKKyAgICAgICAgKEpTQzo6V2F0Y2hwb2ludFNldDo6aW52YWxpZGF0ZSk6CisgICAgICAg
IChKU0M6OklubGluZVdhdGNocG9pbnRTZXQ6OnRvdWNoKToKKyAgICAgICAgKiBieXRlY29tcGls
ZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRv
cjo6Qnl0ZWNvZGVHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6
ZW1pdFJlc29sdmVTY29wZSk6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJ
bmxpbmVzLmg6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFj
dFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKToKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQ
YXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpnZXQpOgorICAg
ICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpnZXRTY29wZSk6CisgICAgICAgIChKU0M6
OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2spOgorICAgICAgICAqIGRmZy9ERkdDYXBh
YmlsaXRpZXMuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmNhcGFiaWxpdHlMZXZlbCk6CisgICAg
ICAgICogZGZnL0RGR0Nsb2JiZXJpemUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpjbG9iYmVyaXpl
KToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguY3BwOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBo
OjpkdW1wKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6dHJ5R2V0Q29uc3RhbnRDbG9zdXJl
VmFyKToKKyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6
Omhhc1dhdGNocG9pbnRTZXQpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OndhdGNocG9pbnRT
ZXQpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc1ZhcmlhYmxlV2F0Y2hwb2ludFNldCk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6dmFyaWFibGVXYXRjaHBvaW50U2V0
KTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6CisgICAgICAgICog
ZGZnL0RGR09wZXJhdGlvbnMuaDoKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlTmV3RnVuY3Rpb24p
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlTm90aWZ5V3JpdGUp
OgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpjYWxsT3BlcmF0aW9uKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3Vs
YXRpdmVKSVQzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1Zh
cmFyZ3NGb3J3YXJkaW5nUGhhc2UuY3BwOgorICAgICAgICAqIGZ0bC9GVExJbnRyaW5zaWNSZXBv
c2l0b3J5Lmg6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcDoKKyAgICAgICAg
KEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZU5vdGlmeVdyaXRlKToKKyAgICAgICAg
KiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHA6CisgICAgICAgIChKU0M6OlN0YWNrRnJhbWU6
OmZyaWVuZGx5U291cmNlVVJMKToKKyAgICAgICAgKEpTQzo6U3RhY2tGcmFtZTo6ZnJpZW5kbHlG
dW5jdGlvbk5hbWUpOgorICAgICAgICAqIGludGVycHJldGVyL0ludGVycHJldGVyLmg6CisgICAg
ICAgIChKU0M6OlN0YWNrRnJhbWU6OmZyaWVuZGx5U291cmNlVVJMKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6U3RhY2tGcmFtZTo6ZnJpZW5kbHlGdW5jdGlvbk5hbWUpOiBEZWxldGVkLgorICAg
ICAgICAqIGppdC9KSVQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXROb3RpZnlXcml0ZSk6
CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcyk6CisgICAgICAgICog
aml0L0pJVC5oOgorICAgICAgICAqIGppdC9KSVRPcGNvZGVzLmNwcDoKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X29wX3RvdWNoX2VudHJ5KTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvSklUT3Bl
cmF0aW9ucy5jcHA6CisgICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMuaDoKKyAgICAgICAgKiBq
aXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRQdXRHbG9i
YWxWYXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRQdXRDbG9zdXJlVmFyKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0Tm90aWZ5V3JpdGUpOiBEZWxldGVkLgorICAgICAgICAqIGppdC9KSVRQ
cm9wZXJ0eUFjY2VzczMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0UHV0R2xvYmFs
VmFyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0UHV0Q2xvc3VyZVZhcik6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdE5vdGlmeVdyaXRlKTogRGVsZXRlZC4KKyAgICAgICAgKiBsbGludC9MTElu
dFNsb3dQYXRocy5jcHA6CisgICAgICAgIChKU0M6OkxMSW50OjpMTElOVF9TTE9XX1BBVEhfREVD
TCk6CisgICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc206CisgICAgICAgICog
bGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbToKKyAgICAgICAgKiBsbGludC9Mb3dM
ZXZlbEludGVycHJldGVyNjQuYXNtOgorICAgICAgICAqIHJ1bnRpbWUvQ29tbW9uU2xvd1BhdGhz
LmNwcDoKKyAgICAgICAgKEpTQzo6U0xPV19QQVRIX0RFQ0wpOiBEZWxldGVkLgorICAgICAgICAq
IHJ1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmg6CisgICAgICAgICogcnVudGltZS9FeGVjdXRhYmxl
LmNwcDoKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25FeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuKToK
KyAgICAgICAgKEpTQzo6RnVuY3Rpb25FeGVjdXRhYmxlOjpXYXRjaHBvaW50Q2xlYW51cDo6V2F0
Y2hwb2ludENsZWFudXApOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFibGU6OldhdGNo
cG9pbnRDbGVhbnVwOjp+V2F0Y2hwb2ludENsZWFudXApOgorICAgICAgICAoSlNDOjpGdW5jdGlv
bkV4ZWN1dGFibGU6OldhdGNocG9pbnRDbGVhbnVwOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSk6
CisgICAgICAgICogcnVudGltZS9FeGVjdXRhYmxlLmg6CisgICAgICAgIChKU0M6OkZ1bmN0aW9u
RXhlY3V0YWJsZTo6ZnVuY3Rpb25SZWFsbG9jYXRpb25XYXRjaHBvaW50U2V0KToKKyAgICAgICAg
KiBydW50aW1lL0pTQ0lubGluZXMuaDoKKyAgICAgICAgKiBydW50aW1lL0pTRnVuY3Rpb24uY3Bw
OgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpjcmVhdGUpOgorICAgICAgICAqIHJ1bnRpbWUv
SlNGdW5jdGlvbi5oOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpjcmVhdGVXaXRoSW52YWxp
ZGF0ZWRSZWFsbG9jYXRpb25XYXRjaHBvaW50KToKKyAgICAgICAgKEpTQzo6SlNGdW5jdGlvbjo6
Y3JlYXRlSW1wbCk6CisgICAgICAgIChKU0M6OkpTRnVuY3Rpb246OmNyZWF0ZSk6IERlbGV0ZWQu
CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpT
R2xvYmFsT2JqZWN0OjphZGRHbG9iYWxWYXIpOgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVj
dDo6YWRkRnVuY3Rpb24pOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuaDoKKyAg
ICAgICAgKiBydW50aW1lL0pTTGV4aWNhbEVudmlyb25tZW50LmNwcDoKKyAgICAgICAgKEpTQzo6
SlNMZXhpY2FsRW52aXJvbm1lbnQ6OnN5bWJvbFRhYmxlUHV0KToKKyAgICAgICAgKiBydW50aW1l
L0pTU2NvcGUuaDoKKyAgICAgICAgKEpTQzo6UmVzb2x2ZU9wOjpSZXNvbHZlT3ApOgorICAgICAg
ICAqIHJ1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5oOgorICAgICAgICAoSlNDOjpzeW1ib2xU
YWJsZVB1dCk6CisgICAgICAgIChKU0M6OnN5bWJvbFRhYmxlUHV0V2l0aEF0dHJpYnV0ZXMpOgor
ICAgICAgICAqIHJ1bnRpbWUvUHV0UHJvcGVydHlTbG90Lmg6CisgICAgICAgICogcnVudGltZS9T
eW1ib2xUYWJsZS5jcHA6CisgICAgICAgIChKU0M6OlN5bWJvbFRhYmxlRW50cnk6OnByZXBhcmVU
b1dhdGNoKToKKyAgICAgICAgKEpTQzo6U3ltYm9sVGFibGU6OlN5bWJvbFRhYmxlKToKKyAgICAg
ICAgKEpTQzo6U3ltYm9sVGFibGU6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpTeW1i
b2xUYWJsZUVudHJ5OjppbmZlcnJlZFZhbHVlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3lt
Ym9sVGFibGVFbnRyeTo6bm90aWZ5V3JpdGVTbG93KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
U3ltYm9sVGFibGU6OldhdGNocG9pbnRDbGVhbnVwOjpXYXRjaHBvaW50Q2xlYW51cCk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OlN5bWJvbFRhYmxlOjpXYXRjaHBvaW50Q2xlYW51cDo6fldhdGNo
cG9pbnRDbGVhbnVwKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3ltYm9sVGFibGU6OldhdGNo
cG9pbnRDbGVhbnVwOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSk6IERlbGV0ZWQuCisgICAgICAg
ICogcnVudGltZS9TeW1ib2xUYWJsZS5oOgorICAgICAgICAoSlNDOjpTeW1ib2xUYWJsZUVudHJ5
OjpkaXNhYmxlV2F0Y2hpbmcpOgorICAgICAgICAoSlNDOjpTeW1ib2xUYWJsZUVudHJ5Ojp3YXRj
aHBvaW50U2V0KToKKyAgICAgICAgKEpTQzo6U3ltYm9sVGFibGVFbnRyeTo6bm90aWZ5V3JpdGUp
OiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvVHlwZVByb2ZpbGVyLmNwcDoKKyAgICAgICAg
KiB0ZXN0cy9zdHJlc3MvaW5mZXItdW5pbml0aWFsaXplZC1jbG9zdXJlLXZhci5qczogQWRkZWQu
CisgICAgICAgICogdGVzdHMvc3RyZXNzL3NpbmdsZXRvbi1zY29wZS10aGVuLW92ZXJ3cml0ZS5q
czogQWRkZWQuCisgICAgICAgICogdGVzdHMvc3RyZXNzL3NpbmdsZXRvbi1zY29wZS10aGVuLXJl
YWxsb2MtYW5kLW92ZXJ3cml0ZS5qczogQWRkZWQuCisgICAgICAgICogdGVzdHMvc3RyZXNzL3Np
bmdsZXRvbi1zY29wZS10aGVuLXJlYWxsb2MuanM6IEFkZGVkLgorCiAyMDE1LTAzLTMxICBZdXN1
a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgogCiAgICAgICAgIFtFUzZdIE9iamVj
dCB0eXBlIHJlc3RyaWN0aW9ucyBvbiBhIGZpcnN0IHBhcmFtZXRlciBvZiBzZXZlcmFsIE9iamVj
dC4qIGZ1bmN0aW9ucyBhcmUgcmVsYXhlZApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NN
YWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxp
c3RzLnR4dAkocmV2aXNpb24gMTgyMDY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtl
TGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xMDYsNiArMTA2LDcgQEAgc2V0KEphdmFTY3Jp
cHRDb3JlX1NPVVJDRVMKICAgICBieXRlY29kZS9VbmxpbmtlZEluc3RydWN0aW9uU3RyZWFtLmNw
cAogICAgIGJ5dGVjb2RlL1ZhbHVlUmVjb3ZlcnkuY3BwCiAgICAgYnl0ZWNvZGUvVmFyaWFibGVX
YXRjaHBvaW50U2V0LmNwcAorICAgIGJ5dGVjb2RlL1ZhcmlhYmxlV3JpdGVGaXJlRGV0YWlsLmNw
cAogICAgIGJ5dGVjb2RlL1ZpcnR1YWxSZWdpc3Rlci5jcHAKICAgICBieXRlY29kZS9XYXRjaHBv
aW50LmNwcAogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4
cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oJKHJl
dmlzaW9uIDE4MjA2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52
Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTM1Myw2ICsz
NTMsNyBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcVW5saW5rZWRJbnN0
cnVjdGlvblN0cmVhbS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRlY29k
ZVxWYWx1ZVJlY292ZXJ5LmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVj
b2RlXFZhcmlhYmxlV2F0Y2hwb2ludFNldC5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxieXRlY29kZVxWYXJpYWJsZVdyaXRlRmlyZURldGFpbC5jcHAiIC8+CiAgICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxieXRlY29kZVxWaXJ0dWFsUmVnaXN0ZXIuY3BwIiAvPgogICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcV2F0Y2hwb2ludC5jcHAiIC8+CiAgICAgPENs
Q29tcGlsZSBJbmNsdWRlPSIuLlxieXRlY29tcGlsZXJcQnl0ZWNvZGVHZW5lcmF0b3IuY3BwIiAv
PgpAQCAtMTAwNSw2ICsxMDA2LDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVj
b2RlXFZhbHVlUHJvZmlsZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNv
ZGVcVmFsdWVSZWNvdmVyeS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNv
ZGVcVmFyaWFibGVXYXRjaHBvaW50U2V0LmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxieXRlY29kZVxWYXJpYWJsZVdyaXRlRmlyZURldGFpbC5oIiAvPgogICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5cYnl0ZWNvZGVcVmlydHVhbFJlZ2lzdGVyLmgiIC8+CiAgICAgPENsSW5jbHVk
ZSBJbmNsdWRlPSIuLlxieXRlY29kZVxXYXRjaHBvaW50LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxieXRlY29tcGlsZXJcQnl0ZWNvZGVHZW5lcmF0b3IuaCIgLz4KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxODIwNjkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29y
a2luZyBjb3B5KQpAQCAtMzgzLDYgKzM4Myw4IEBACiAJCTBGNkIxQ0M2MTg2MkM0NzgwMDg0NUQ5
NyAvKiBGVExVbndpbmRJbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjZCMUNDMjE4NjJDNDc4MDA4NDVEOTcgLyogRlRMVW53aW5kSW5mby5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNkIxQ0M5
MTg2NDFERjgwMDg0NUQ5NyAvKiBBcml0eUNoZWNrRmFpbFJldHVyblRodW5rcy5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjZCMUNDNzE4NjQxREY4
MDA4NDVEOTcgLyogQXJpdHlDaGVja0ZhaWxSZXR1cm5UaHVua3MuY3BwICovOyB9OwogCQkwRjZC
MUNDQTE4NjQxREY4MDA4NDVEOTcgLyogQXJpdHlDaGVja0ZhaWxSZXR1cm5UaHVua3MuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNkIxQ0M4MTg2NDFE
RjgwMDg0NUQ5NyAvKiBBcml0eUNoZWNrRmFpbFJldHVyblRodW5rcy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGNkM3MzUwMUFDOUY5OUYwMEJF
MTY4MiAvKiBWYXJpYWJsZVdyaXRlRmlyZURldGFpbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjZDNzM0RTFBQzlGOTlGMDBCRTE2ODIgLyogVmFy
aWFibGVXcml0ZUZpcmVEZXRhaWwuY3BwICovOyB9OworCQkwRjZDNzM1MTFBQzlGOTlGMDBCRTE2
ODIgLyogVmFyaWFibGVXcml0ZUZpcmVEZXRhaWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNkM3MzRGMUFDOUY5OUYwMEJFMTY4MiAvKiBWYXJpYWJs
ZVdyaXRlRmlyZURldGFpbC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTBGNkU4NDVBMTkwMzBCRUYwMDU2Mjc0MSAvKiBERkdWYXJpYWJsZUFjY2Vz
c0RhdGEuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY2RTg0NTkxOTAzMEJFRjAwNTYyNzQxIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YS5jcHAgKi87
IH07CiAJCTBGNkZDNzUwMTk2MTEwQTgwMEUxRDAyRCAvKiBDb21wbGV4R2V0U3RhdHVzLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNkZDNzRFMTk2
MTEwQTgwMEUxRDAyRCAvKiBDb21wbGV4R2V0U3RhdHVzLmNwcCAqLzsgfTsKIAkJMEY2RkM3NTEx
OTYxMTBBODAwRTFEMDJEIC8qIENvbXBsZXhHZXRTdGF0dXMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNkZDNzRGMTk2MTEwQTgwMEUxRDAyRCAvKiBD
b21wbGV4R2V0U3RhdHVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKQEAgLTIxMDAsNiArMjEwMiw4IEBACiAJCTBGNkIxQ0MyMTg2MkM0NzgwMDg0NUQ5
NyAvKiBGVExVbndpbmRJbmZvLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZU
TFVud2luZEluZm8uaDsgcGF0aCA9IGZ0bC9GVExVbndpbmRJbmZvLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGNkIxQ0M3MTg2NDFERjgwMDg0NUQ5NyAvKiBBcml0eUNoZWNrRmFp
bFJldHVyblRodW5rcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBB
cml0eUNoZWNrRmFpbFJldHVyblRodW5rcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGNkIxQ0M4MTg2NDFERjgwMDg0NUQ5NyAvKiBBcml0eUNoZWNrRmFpbFJldHVyblRodW5r
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBcml0eUNoZWNrRmFpbFJldHVy
blRodW5rcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjZDNzM0RTFBQzlGOTlG
MDBCRTE2ODIgLyogVmFyaWFibGVXcml0ZUZpcmVEZXRhaWwuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gVmFyaWFibGVXcml0ZUZpcmVEZXRhaWwuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRjZDNzM0RjFBQzlGOTlGMDBCRTE2ODIgLyogVmFyaWFi
bGVXcml0ZUZpcmVEZXRhaWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmFy
aWFibGVXcml0ZUZpcmVEZXRhaWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2
RTg0NTkxOTAzMEJFRjAwNTYyNzQxIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdWYXJpYWJsZUFjY2Vzc0RhdGEuY3Bw
OyBwYXRoID0gZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGNkZDNzRFMTk2MTEwQTgwMEUxRDAyRCAvKiBDb21wbGV4R2V0U3RhdHVz
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvbXBsZXhHZXRTdGF0
dXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjZGQzc0RjE5NjExMEE4MDBF
MUQwMkQgLyogQ29tcGxleEdldFN0YXR1cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBDb21wbGV4R2V0U3RhdHVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01
MjgwLDYgKzUyODQsOCBAQAogCQkJCTBGQ0E5MTEyMTk1RTY2QTAwMDQyNjQzOCAvKiBWYXJpYWJs
ZVdhdGNocG9pbnRTZXQuY3BwICovLAogCQkJCTBGOTE4MUM2MTg0MTVDQTUwMDU3QjY2OSAvKiBW
YXJpYWJsZVdhdGNocG9pbnRTZXQuaCAqLywKIAkJCQlGRTUyNDhGODE5MTQ0MkQ5MDBCN0ZERTQg
LyogVmFyaWFibGVXYXRjaHBvaW50U2V0SW5saW5lcy5oICovLAorCQkJCTBGNkM3MzRFMUFDOUY5
OUYwMEJFMTY4MiAvKiBWYXJpYWJsZVdyaXRlRmlyZURldGFpbC5jcHAgKi8sCisJCQkJMEY2Qzcz
NEYxQUM5Rjk5RjAwQkUxNjgyIC8qIFZhcmlhYmxlV3JpdGVGaXJlRGV0YWlsLmggKi8sCiAJCQkJ
MEYyMEMyNTgxQTgwMTNBQjAwREEzMjI5IC8qIFZpcnR1YWxSZWdpc3Rlci5jcHAgKi8sCiAJCQkJ
MEY0MjZBNDYxNDYwQ0JBQjAwMTMxRjhGIC8qIFZpcnR1YWxSZWdpc3Rlci5oICovLAogCQkJCTBG
OTE5RDIyMTU4NTNDREUwMDRBNEU3RCAvKiBXYXRjaHBvaW50LmNwcCAqLywKQEAgLTYzNTQsNiAr
NjM2MCw3IEBACiAJCQkJQTcwOUYyRjAxN0EwQUMwNDAwNTEyRTk4IC8qIFNsb3dQYXRoQ2FsbC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJOTMzMDQwMDQwRTZBNzQ5NDAwNzg2RTZBIC8qIFNtYWxsU3Ry
aW5ncy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NjQwRTE2RjVDRDAwQjM0NDYwIC8qIFNv
dXJjZUNvZGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGNkM3MzUxMUFDOUY5OUYwMEJFMTY4MiAv
KiBWYXJpYWJsZVdyaXRlRmlyZURldGFpbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NjMw
RTE2RjVDRDAwQjM0NDYwIC8qIFNvdXJjZVByb3ZpZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk3
MEVDMEVDMzFBQTBEN0RBMDBCNkFBRkEgLyogSlNTdHJpbmdJdGVyYXRvci5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJRTQ5REMxNkMxMkVGMjk0RTAwMTg0QTFGIC8qIFNvdXJjZVByb3ZpZGVyQ2FjaGUu
aCBpbiBIZWFkZXJzICovLApAQCAtNjk2Myw2ICs2OTcwLDcgQEAKIAkJCQlBNzdGMTgyMTE2NDA4
OEIyMDA2NDBBNDcgLyogQ29kZUNhY2hlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGOEY5NDQ2
MTY2NzY0RjEwMEQ2MTk3MSAvKiBDb2RlT3JpZ2luLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2
QjU4MjY3MTREMjc5NkMwMEE5QzMwNiAvKiBDb2RlUHJvZmlsZS5jcHAgaW4gU291cmNlcyAqLywK
KwkJCQkwRjZDNzM1MDFBQzlGOTlGMDBCRTE2ODIgLyogVmFyaWFibGVXcml0ZUZpcmVEZXRhaWwu
Y3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODZCNTgyNjkxNEQyNzk3MDAwQTlDMzA2IC8qIENvZGVQ
cm9maWxpbmcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY4Rjk0M0MxNjY3NjMxMzAwRDYxOTcx
IC8qIENvZGVTcGVjaWFsaXphdGlvbktpbmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY4Rjk0
NDIxNjY3NjMzNTAwRDYxOTcxIC8qIENvZGVUeXBlLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5qc29uCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QuanNvbgko
cmV2aXNpb24gMTgyMDY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVj
b2RlTGlzdC5qc29uCSh3b3JraW5nIGNvcHkpCkBAIC02LDcgKzYsNiBAQAogICAgICAgICAgICAg
eyAibmFtZSIgOiAib3BfZW50ZXIiLCAibGVuZ3RoIiA6IDEgfSwKICAgICAgICAgICAgIHsgIm5h
bWUiIDogIm9wX2NyZWF0ZV9sZXhpY2FsX2Vudmlyb25tZW50IiwgImxlbmd0aCIgOiAzIH0sCiAg
ICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9nZXRfc2NvcGUiLCAibGVuZ3RoIiA6IDIgfSwKLSAg
ICAgICAgICAgIHsgIm5hbWUiIDogIm9wX3RvdWNoX2VudHJ5IiwgImxlbmd0aCIgOiAxIH0sCiAg
ICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9jcmVhdGVfZGlyZWN0X2FyZ3VtZW50cyIsICJsZW5n
dGgiIDogMiB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfY3JlYXRlX3Njb3BlZF9hcmd1
bWVudHMiLCAibGVuZ3RoIiA6IDMgfSwKICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX2NyZWF0
ZV9vdXRfb2ZfYmFuZF9hcmd1bWVudHMiLCAibGVuZ3RoIiA6IDIgfSwKQEAgLTEwMyw3ICsxMDIs
NyBAQAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfY29uc3RydWN0X3ZhcmFyZ3MiLCAibGVu
Z3RoIiA6IDkgfSwKICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX3N0cmNhdCIsICJsZW5ndGgi
IDogNCB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfdG9fcHJpbWl0aXZlIiwgImxlbmd0
aCIgOiAzIH0sCi0gICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9yZXNvbHZlX3Njb3BlIiwgImxl
bmd0aCIgOiA3IH0sCisgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9yZXNvbHZlX3Njb3BlIiwg
Imxlbmd0aCIgOiA2IH0sCiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9nZXRfZnJvbV9zY29w
ZSIsICJsZW5ndGgiIDogOCB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfcHV0X3RvX3Nj
b3BlIiwgImxlbmd0aCIgOiA3IH0sCiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9nZXRfZnJv
bV9hcmd1bWVudHMiLCAibGVuZ3RoIiA6IDUgfSwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9CeXRlY29kZVVzZURlZi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZVVzZURlZi5oCShyZXZpc2lvbiAxODIwNjkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuaAkod29ya2luZyBj
b3B5KQpAQCAtNTAsNyArNTAsNiBAQCB2b2lkIGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVPZmZzZXQo
CiAgICAgY2FzZSBvcF9uZXdfb2JqZWN0OgogICAgIGNhc2Ugb3BfZW50ZXI6CiAgICAgY2FzZSBv
cF9jYXRjaDoKLSAgICBjYXNlIG9wX3RvdWNoX2VudHJ5OgogICAgIGNhc2Ugb3BfcHJvZmlsZV9j
b250cm9sX2Zsb3c6CiAgICAgY2FzZSBvcF9jcmVhdGVfZGlyZWN0X2FyZ3VtZW50czoKICAgICBj
YXNlIG9wX2NyZWF0ZV9vdXRfb2ZfYmFuZF9hcmd1bWVudHM6CkBAIC0yNzgsNyArMjc3LDYgQEAg
dm9pZCBjb21wdXRlRGVmc0ZvckJ5dGVjb2RlT2Zmc2V0KENvZGVCbAogICAgIGNhc2Ugb3BfcHV0
X2J5X2luZGV4OgogICAgIGNhc2Ugb3BfcHJvZmlsZV90eXBlOgogICAgIGNhc2Ugb3BfcHJvZmls
ZV9jb250cm9sX2Zsb3c6Ci0gICAgY2FzZSBvcF90b3VjaF9lbnRyeToKICAgICBjYXNlIG9wX3B1
dF90b19hcmd1bWVudHM6CiAjZGVmaW5lIExMSU5UX0hFTFBFUl9PUENPREVTKG9wY29kZSwgbGVu
Z3RoKSBjYXNlIG9wY29kZToKICAgICAgICAgRk9SX0VBQ0hfTExJTlRfT1BDT0RFX0VYVEVOU0lP
TihMTElOVF9IRUxQRVJfT1BDT0RFUyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMTgyMDY5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTczMywx
MCArNzMzLDYgQEAgdm9pZCBDb2RlQmxvY2s6OmR1bXBCeXRlY29kZSgKICAgICAgICAgICAgIHBy
aW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImVudGVyIik7CiAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBjYXNlIG9wX3RvdWNoX2VudHJ5OiB7
Ci0gICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQs
ICJ0b3VjaF9lbnRyeSIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KICAgICAgICAg
Y2FzZSBvcF9jcmVhdGVfbGV4aWNhbF9lbnZpcm9ubWVudDogewogICAgICAgICAgICAgaW50IHIw
ID0gKCsraXQpLT51Lm9wZXJhbmQ7CiAgICAgICAgICAgICBpbnQgcjEgPSAoKytpdCktPnUub3Bl
cmFuZDsKQEAgLTE0ODQsNyArMTQ4MCw2IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wQnl0ZWNvZGUo
CiAgICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMsICVzLCAldTwlc3wlcz4sICVkIiwgcmVn
aXN0ZXJOYW1lKHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShzY29wZSkuZGF0YSgpLCBpZE5hbWUo
aWQwLCBpZGVudGlmaWVyKGlkMCkpLmRhdGEoKSwKICAgICAgICAgICAgICAgICBtb2RlQW5kVHlw
ZS5vcGVyYW5kKCksIHJlc29sdmVNb2RlTmFtZShtb2RlQW5kVHlwZS5tb2RlKCkpLCByZXNvbHZl
VHlwZU5hbWUobW9kZUFuZFR5cGUudHlwZSgpKSwKICAgICAgICAgICAgICAgICBkZXB0aCk7Ci0g
ICAgICAgICAgICArK2l0OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAg
Y2FzZSBvcF9nZXRfZnJvbV9zY29wZTogewpAQCAtMTkzMSw4ICsxOTI2LDYgQEAgQ29kZUJsb2Nr
OjpDb2RlQmxvY2soU2NyaXB0RXhlY3V0YWJsZSogbwogICAgICAgICAgICAgUmVzb2x2ZU9wIG9w
ID0gSlNTY29wZTo6YWJzdHJhY3RSZXNvbHZlKG1fZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCks
IG5lZWRzQWN0aXZhdGlvbigpLCBzY29wZSwgaWRlbnQsIEdldCwgdHlwZSk7CiAgICAgICAgICAg
ICBpbnN0cnVjdGlvbnNbaSArIDRdLnUub3BlcmFuZCA9IG9wLnR5cGU7CiAgICAgICAgICAgICBp
bnN0cnVjdGlvbnNbaSArIDVdLnUub3BlcmFuZCA9IG9wLmRlcHRoOwotICAgICAgICAgICAgaWYg
KG9wLmxleGljYWxFbnZpcm9ubWVudCkKLSAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSAr
IDZdLnUubGV4aWNhbEVudmlyb25tZW50LnNldCgqdm0oKSwgb3duZXJFeGVjdXRhYmxlLCBvcC5s
ZXhpY2FsRW52aXJvbm1lbnQpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIApAQCAt
MTk3Niw3ICsxOTY5LDcgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soU2NyaXB0RXhlY3V0YWJsZSog
bwogICAgICAgICAgICAgICAgICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX3N5bWJv
bFRhYmxlLT5tX2xvY2spOwogICAgICAgICAgICAgICAgICAgICBTeW1ib2xUYWJsZTo6TWFwOjpp
dGVyYXRvciBpdGVyID0gbV9zeW1ib2xUYWJsZS0+ZmluZChsb2NrZXIsIHVpZCk7CiAgICAgICAg
ICAgICAgICAgICAgIEFTU0VSVChpdGVyICE9IG1fc3ltYm9sVGFibGUtPmVuZChsb2NrZXIpKTsK
LSAgICAgICAgICAgICAgICAgICAgaXRlci0+dmFsdWUucHJlcGFyZVRvV2F0Y2goc3ltYm9sVGFi
bGUoKSk7CisgICAgICAgICAgICAgICAgICAgIGl0ZXItPnZhbHVlLnByZXBhcmVUb1dhdGNoKCk7
CiAgICAgICAgICAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgNV0udS53YXRjaHBvaW50U2V0
ID0gaXRlci0+dmFsdWUud2F0Y2hwb2ludFNldCgpOwogICAgICAgICAgICAgICAgIH0gZWxzZQog
ICAgICAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIDVdLnUud2F0Y2hwb2ludFNldCA9
IG51bGxwdHI7CkBAIC0yNTIwLDE1ICsyNTEzLDYgQEAgdm9pZCBDb2RlQmxvY2s6OmZpbmFsaXpl
VW5jb25kaXRpb25hbGx5KAogICAgICAgICAgICAgICAgIGN1ckluc3RydWN0aW9uWzNdLnUudG9U
aGlzU3RhdHVzID0gbWVyZ2UoCiAgICAgICAgICAgICAgICAgICAgIGN1ckluc3RydWN0aW9uWzNd
LnUudG9UaGlzU3RhdHVzLCBUb1RoaXNDbGVhcmVkQnlHQyk7CiAgICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICBjYXNlIG9wX3Jlc29sdmVfc2NvcGU6IHsKLSAgICAgICAgICAgICAg
ICBXcml0ZUJhcnJpZXJCYXNlPEpTTGV4aWNhbEVudmlyb25tZW50PiYgbGV4aWNhbEVudmlyb25t
ZW50ID0gY3VySW5zdHJ1Y3Rpb25bNl0udS5sZXhpY2FsRW52aXJvbm1lbnQ7Ci0gICAgICAgICAg
ICAgICAgaWYgKCFsZXhpY2FsRW52aXJvbm1lbnQgfHwgSGVhcDo6aXNNYXJrZWQobGV4aWNhbEVu
dmlyb25tZW50LmdldCgpKSkKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKLSAgICAgICAgICAgICAgICAgICAgZGF0
YUxvZ0YoIkNsZWFyaW5nIGRlYWQgbGV4aWNhbEVudmlyb25tZW50ICVwLlxuIiwgbGV4aWNhbEVu
dmlyb25tZW50LmdldCgpKTsKLSAgICAgICAgICAgICAgICBsZXhpY2FsRW52aXJvbm1lbnQuY2xl
YXIoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KICAgICAgICAgICAg
IGNhc2Ugb3BfZ2V0X2Zyb21fc2NvcGU6CiAgICAgICAgICAgICBjYXNlIG9wX3B1dF90b19zY29w
ZTogewogICAgICAgICAgICAgICAgIFJlc29sdmVNb2RlQW5kVHlwZSBtb2RlQW5kVHlwZSA9Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uY3BwCShy
ZXZpc2lvbiAxODIwNjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9y
aWdpbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0MSw2ICsxNDEsMTggQEAgdm9pZCBDb2RlT3Jp
Z2luOjpkdW1wSW5Db250ZXh0KFByaW50U3RyZQogICAgIGR1bXAob3V0KTsKIH0KIAorSlNGdW5j
dGlvbiogSW5saW5lQ2FsbEZyYW1lOjpjYWxsZWVDb25zdGFudCgpIGNvbnN0Cit7CisgICAgaWYg
KGNhbGxlZVJlY292ZXJ5LmlzQ29uc3RhbnQoKSkKKyAgICAgICAgcmV0dXJuIGpzQ2FzdDxKU0Z1
bmN0aW9uKj4oY2FsbGVlUmVjb3ZlcnkuY29uc3RhbnQoKSk7CisgICAgcmV0dXJuIG51bGxwdHI7
Cit9CisKK3ZvaWQgSW5saW5lQ2FsbEZyYW1lOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYg
dmlzaXRvcikKK3sKKyAgICB2aXNpdG9yLmFwcGVuZCgmZXhlY3V0YWJsZSk7Cit9CisKIEpTRnVu
Y3Rpb24qIElubGluZUNhbGxGcmFtZTo6Y2FsbGVlRm9yQ2FsbEZyYW1lKEV4ZWNTdGF0ZSogZXhl
YykgY29uc3QKIHsKICAgICByZXR1cm4ganNDYXN0PEpTRnVuY3Rpb24qPihjYWxsZWVSZWNvdmVy
eS5yZWNvdmVyKGV4ZWMpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlT3JpZ2luLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVPcmlnaW4uaAkocmV2aXNpb24gMTgyMDY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NvZGVPcmlnaW4uaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNiBAQAog
CiAjaW5jbHVkZSAiQ29kZUJsb2NrSGFzaC5oIgogI2luY2x1ZGUgIkNvZGVTcGVjaWFsaXphdGlv
bktpbmQuaCIKLSNpbmNsdWRlICJKU0Z1bmN0aW9uLmgiCiAjaW5jbHVkZSAiVmFsdWVSZWNvdmVy
eS5oIgogI2luY2x1ZGUgIldyaXRlQmFycmllci5oIgogI2luY2x1ZGUgPHd0Zi9CaXRWZWN0b3Iu
aD4KQEAgLTIwNywxNyArMjA2LDggQEAgc3RydWN0IElubGluZUNhbGxGcmFtZSB7CiAgICAgCiAg
ICAgQ29kZVNwZWNpYWxpemF0aW9uS2luZCBzcGVjaWFsaXphdGlvbktpbmQoKSBjb25zdCB7IHJl
dHVybiBzcGVjaWFsaXphdGlvbktpbmRGb3Ioc3RhdGljX2Nhc3Q8S2luZD4oa2luZCkpOyB9CiAK
LSAgICBKU0Z1bmN0aW9uKiBjYWxsZWVDb25zdGFudCgpIGNvbnN0Ci0gICAgewotICAgICAgICBp
ZiAoY2FsbGVlUmVjb3ZlcnkuaXNDb25zdGFudCgpKQotICAgICAgICAgICAgcmV0dXJuIGpzQ2Fz
dDxKU0Z1bmN0aW9uKj4oY2FsbGVlUmVjb3ZlcnkuY29uc3RhbnQoKSk7Ci0gICAgICAgIHJldHVy
biAwOwotICAgIH0KLQotICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCi0gICAgewotICAgICAgICB2aXNpdG9yLmFwcGVuZCgmZXhlY3V0YWJsZSk7Ci0gICAgfQor
ICAgIEpTRnVuY3Rpb24qIGNhbGxlZUNvbnN0YW50KCkgY29uc3Q7CisgICAgdm9pZCB2aXNpdEFn
Z3JlZ2F0ZShTbG90VmlzaXRvciYpOwogICAgIAogICAgIC8vIEdldCB0aGUgY2FsbGVlIGdpdmVu
IGEgbWFjaGluZSBjYWxsIGZyYW1lIHRvIHdoaWNoIHRoaXMgSW5saW5lQ2FsbEZyYW1lIGJlbG9u
Z3MuCiAgICAgSlNGdW5jdGlvbiogY2FsbGVlRm9yQ2FsbEZyYW1lKEV4ZWNTdGF0ZSopIGNvbnN0
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luc3RydWN0aW9uLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luc3RydWN0aW9uLmgJ
KHJldmlzaW9uIDE4MjA2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0
cnVjdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC00Niw3ICs0Niw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogY2xhc3MgQXJyYXlBbGxvY2F0aW9uUHJvZmlsZTsKIGNsYXNzIEFycmF5UHJvZmlsZTsKIGNs
YXNzIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlOwotY2xhc3MgVmFyaWFibGVXYXRjaHBvaW50U2V0
OworY2xhc3MgV2F0Y2hwb2ludFNldDsKIHN0cnVjdCBMTEludENhbGxMaW5rSW5mbzsKIHN0cnVj
dCBWYWx1ZVByb2ZpbGU7CiAKQEAgLTExNyw4ICsxMTcsNyBAQCBzdHJ1Y3QgSW5zdHJ1Y3Rpb24g
ewogICAgICAgICBBcnJheVByb2ZpbGUqIGFycmF5UHJvZmlsZTsKICAgICAgICAgQXJyYXlBbGxv
Y2F0aW9uUHJvZmlsZSogYXJyYXlBbGxvY2F0aW9uUHJvZmlsZTsKICAgICAgICAgT2JqZWN0QWxs
b2NhdGlvblByb2ZpbGUqIG9iamVjdEFsbG9jYXRpb25Qcm9maWxlOwotICAgICAgICBWYXJpYWJs
ZVdhdGNocG9pbnRTZXQqIHdhdGNocG9pbnRTZXQ7Ci0gICAgICAgIFdyaXRlQmFycmllckJhc2U8
SlNMZXhpY2FsRW52aXJvbm1lbnQ+IGxleGljYWxFbnZpcm9ubWVudDsKKyAgICAgICAgV2F0Y2hw
b2ludFNldCogd2F0Y2hwb2ludFNldDsKICAgICAgICAgdm9pZCogcG9pbnRlcjsKICAgICAgICAg
Ym9vbCogcHJlZGljYXRlUG9pbnRlcjsKICAgICAgICAgVG9UaGlzU3RhdHVzIHRvVGhpc1N0YXR1
czsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYXJpYWJsZVdhdGNocG9p
bnRTZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9W
YXJpYWJsZVdhdGNocG9pbnRTZXQuY3BwCShyZXZpc2lvbiAxODIwNjkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFyaWFibGVXYXRjaHBvaW50U2V0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE1IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cwpAQCAtMzAsMTkgKzMwLDkgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLXZvaWQgVmFyaWFibGVX
cml0ZUZpcmVEZXRhaWw6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3ZvaWQgVmFyaWFi
bGVXYXRjaHBvaW50U2V0Ojpub3RpZnlXcml0ZShWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEpTVmFs
dWUgdmFsdWUsIGNvbnN0IGNoYXIqIHJlYXNvbikKIHsKLSAgICBvdXQucHJpbnQoIldyaXRlIHRv
ICIsIG1fbmFtZSwgIiBpbiAiLCBKU1ZhbHVlKG1fb2JqZWN0KSk7Ci19Ci0KLXZvaWQgVmFyaWFi
bGVXYXRjaHBvaW50U2V0Ojpub3RpZnlXcml0ZShWTSYgdm0sIEpTVmFsdWUgdmFsdWUsIEpTT2Jq
ZWN0KiBiYXNlT2JqZWN0LCBjb25zdCBQcm9wZXJ0eU5hbWUmIHByb3BlcnR5TmFtZSkKLXsKLSAg
ICBub3RpZnlXcml0ZSh2bSwgdmFsdWUsIFZhcmlhYmxlV3JpdGVGaXJlRGV0YWlsKGJhc2VPYmpl
Y3QsIHByb3BlcnR5TmFtZSkpOwotfQotCi12b2lkIFZhcmlhYmxlV2F0Y2hwb2ludFNldDo6bm90
aWZ5V3JpdGUoVk0mIHZtLCBKU1ZhbHVlIHZhbHVlLCBjb25zdCBjaGFyKiByZWFzb24pCi17Ci0g
ICAgbm90aWZ5V3JpdGUodm0sIHZhbHVlLCBTdHJpbmdGaXJlRGV0YWlsKHJlYXNvbikpOworICAg
IG5vdGlmeVdyaXRlKHZtLCBvd25lciwgdmFsdWUsIFN0cmluZ0ZpcmVEZXRhaWwocmVhc29uKSk7
CiB9CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1ZhcmlhYmxlV2F0Y2hwb2ludFNldC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9WYXJpYWJsZVdhdGNocG9pbnRTZXQuaAkocmV2aXNpb24gMTgy
MDY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhcmlhYmxlV2F0Y2hwb2lu
dFNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxMi0yMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdo
dCAoQykgMjAxMi0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzIsMjkgKzMyLDEyIEBACiBuYW1lc3BhY2UgSlND
IHsKIAogY2xhc3MgSlNPYmplY3Q7Ci1jbGFzcyBTeW1ib2xUYWJsZTsKLQotY2xhc3MgVmFyaWFi
bGVXcml0ZUZpcmVEZXRhaWwgOiBwdWJsaWMgRmlyZURldGFpbCB7Ci1wdWJsaWM6Ci0gICAgVmFy
aWFibGVXcml0ZUZpcmVEZXRhaWwoSlNPYmplY3QqIG9iamVjdCwgY29uc3QgUHJvcGVydHlOYW1l
JiBuYW1lKQotICAgICAgICA6IG1fb2JqZWN0KG9iamVjdCkKLSAgICAgICAgLCBtX25hbWUobmFt
ZSkKLSAgICB7Ci0gICAgfQotICAgIAotICAgIHZpcnR1YWwgdm9pZCBkdW1wKFByaW50U3RyZWFt
JikgY29uc3Qgb3ZlcnJpZGU7Ci0KLXByaXZhdGU6Ci0gICAgSlNPYmplY3QqIG1fb2JqZWN0Owot
ICAgIGNvbnN0IFByb3BlcnR5TmFtZSYgbV9uYW1lOwotfTsKIAogY2xhc3MgVmFyaWFibGVXYXRj
aHBvaW50U2V0IDogcHVibGljIFdhdGNocG9pbnRTZXQgewogICAgIGZyaWVuZCBjbGFzcyBMTElu
dE9mZnNldHNFeHRyYWN0b3I7CiBwdWJsaWM6Ci0gICAgVmFyaWFibGVXYXRjaHBvaW50U2V0KFN5
bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSkKKyAgICBWYXJpYWJsZVdhdGNocG9pbnRTZXQoKQogICAg
ICAgICA6IFdhdGNocG9pbnRTZXQoQ2xlYXJXYXRjaHBvaW50KQotICAgICAgICAsIG1fc3ltYm9s
VGFibGUoc3ltYm9sVGFibGUpCiAgICAgewogICAgIH0KICAgICAKQEAgLTczLDkgKzU2LDggQEAg
cHVibGljOgogICAgIC8vICAgICAgICB5b3Ugd2lsbCBoYXZlIGJlZW4gbm90aWZpZWQgdGhhdCB0
aGUgd2F0Y2hwb2ludCB3YXMgZmlyZWQuCiAgICAgSlNWYWx1ZSBpbmZlcnJlZFZhbHVlKCkgY29u
c3QgeyByZXR1cm4gbV9pbmZlcnJlZFZhbHVlLmdldCgpOyB9CiAgICAgCi0gICAgdm9pZCBub3Rp
ZnlXcml0ZShWTSYsIEpTVmFsdWUsIGNvbnN0IEZpcmVEZXRhaWwmKTsKLSAgICBKU19FWFBPUlRf
UFJJVkFURSB2b2lkIG5vdGlmeVdyaXRlKFZNJiwgSlNWYWx1ZSwgSlNPYmplY3QqIGJhc2VPYmpl
Y3QsIGNvbnN0IFByb3BlcnR5TmFtZSYpOwotICAgIHZvaWQgbm90aWZ5V3JpdGUoVk0mLCBKU1Zh
bHVlLCBjb25zdCBjaGFyKiByZWFzb24pOworICAgIHZvaWQgbm90aWZ5V3JpdGUoVk0mLCBKU0Nl
bGwqIG93bmVyLCBKU1ZhbHVlLCBjb25zdCBGaXJlRGV0YWlsJik7CisgICAgdm9pZCBub3RpZnlX
cml0ZShWTSYsIEpTQ2VsbCogb3duZXIsIEpTVmFsdWUsIGNvbnN0IGNoYXIqIHJlYXNvbik7CiAg
ICAgCiAgICAgdm9pZCBpbnZhbGlkYXRlKGNvbnN0IEZpcmVEZXRhaWwmIGRldGFpbCkKICAgICB7
CkBAIC04MywxNSArNjUsMTkgQEAgcHVibGljOgogICAgICAgICBXYXRjaHBvaW50U2V0OjppbnZh
bGlkYXRlKGRldGFpbCk7CiAgICAgfQogICAgIAotICAgIHZvaWQgZmluYWxpemVVbmNvbmRpdGlv
bmFsbHkoY29uc3QgRmlyZURldGFpbCYgZGV0YWlsKQorICAgIGJvb2wgbmVlZFRvRmluYWxpemUo
KQogICAgIHsKICAgICAgICAgQVNTRVJUKCEhbV9pbmZlcnJlZFZhbHVlID09IChzdGF0ZSgpID09
IElzV2F0Y2hlZCkpOwogICAgICAgICBpZiAoIW1faW5mZXJyZWRWYWx1ZSkKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgcmV0dXJuIG1faW5mZXJyZWRWYWx1ZS5nZXQoKS5pc0Nl
bGwoKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBmaW5hbGl6ZVVuY29uZGl0aW9uYWxseShjb25z
dCBGaXJlRGV0YWlsJiBkZXRhaWwpCisgICAgeworICAgICAgICBpZiAoIW5lZWRUb0ZpbmFsaXpl
KCkpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIEpTVmFsdWUgaW5mZXJyZWRWYWx1ZSA9
IG1faW5mZXJyZWRWYWx1ZS5nZXQoKTsKLSAgICAgICAgaWYgKCFpbmZlcnJlZFZhbHVlLmlzQ2Vs
bCgpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBKU0NlbGwqIGNlbGwgPSBpbmZlcnJl
ZFZhbHVlLmFzQ2VsbCgpOworICAgICAgICBKU0NlbGwqIGNlbGwgPSBtX2luZmVycmVkVmFsdWUu
Z2V0KCkuYXNDZWxsKCk7CiAgICAgICAgIGlmIChIZWFwOjppc01hcmtlZChjZWxsKSkKICAgICAg
ICAgICAgIHJldHVybjsKICAgICAgICAgaW52YWxpZGF0ZShkZXRhaWwpOwpAQCAtMTAwLDcgKzg2
LDYgQEAgcHVibGljOgogICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogYWRkcmVzc09mSW5mZXJy
ZWRWYWx1ZSgpIHsgcmV0dXJuICZtX2luZmVycmVkVmFsdWU7IH0KICAgICAKIHByaXZhdGU6Ci0g
ICAgU3ltYm9sVGFibGUmIG1fc3ltYm9sVGFibGU7CiAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+
IG1faW5mZXJyZWRWYWx1ZTsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9WYXJpYWJsZVdhdGNocG9pbnRTZXRJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhcmlhYmxlV2F0Y2hwb2ludFNldElubGluZXMuaAko
cmV2aXNpb24gMTgyMDY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Zhcmlh
YmxlV2F0Y2hwb2ludFNldElubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDE0LCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjYsMTcgKzI2LDE3IEBA
CiAjaWZuZGVmIFZhcmlhYmxlV2F0Y2hwb2ludFNldElubGluZXNfaAogI2RlZmluZSBWYXJpYWJs
ZVdhdGNocG9pbnRTZXRJbmxpbmVzX2gKIAotI2luY2x1ZGUgIlN5bWJvbFRhYmxlLmgiCiAjaW5j
bHVkZSAiVmFyaWFibGVXYXRjaHBvaW50U2V0LmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCi1pbmxp
bmUgdm9pZCBWYXJpYWJsZVdhdGNocG9pbnRTZXQ6Om5vdGlmeVdyaXRlKFZNJiB2bSwgSlNWYWx1
ZSB2YWx1ZSwgY29uc3QgRmlyZURldGFpbCYgZGV0YWlsKQoraW5saW5lIHZvaWQgVmFyaWFibGVX
YXRjaHBvaW50U2V0Ojpub3RpZnlXcml0ZSgKKyAgICBWTSYgdm0sIEpTQ2VsbCogb3duZXIsIEpT
VmFsdWUgdmFsdWUsIGNvbnN0IEZpcmVEZXRhaWwmIGRldGFpbCkKIHsKICAgICBBU1NFUlQoISF2
YWx1ZSk7CiAgICAgc3dpdGNoIChzdGF0ZSgpKSB7CiAgICAgY2FzZSBDbGVhcldhdGNocG9pbnQ6
Ci0gICAgICAgIG1faW5mZXJyZWRWYWx1ZS5zZXQodm0sICZtX3N5bWJvbFRhYmxlLCB2YWx1ZSk7
CisgICAgICAgIG1faW5mZXJyZWRWYWx1ZS5zZXQodm0sIG93bmVyLCB2YWx1ZSk7CiAgICAgICAg
IHN0YXJ0V2F0Y2hpbmcoKTsKICAgICAgICAgcmV0dXJuOwogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvVmFyaWFibGVXcml0ZUZpcmVEZXRhaWwuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYXJpYWJsZVdyaXRlRmlyZURldGFp
bC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFy
aWFibGVXcml0ZUZpcmVEZXRhaWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNDQgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIlZhcmlhYmxlV3JpdGVGaXJlRGV0YWlsLmgiCisKKyNpbmNs
dWRlICJKU0NJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeworCit2b2lkIFZhcmlhYmxlV3Jp
dGVGaXJlRGV0YWlsOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnBy
aW50KCJXcml0ZSB0byAiLCBtX25hbWUsICIgaW4gIiwgSlNWYWx1ZShtX29iamVjdCkpOworfQor
Cit2b2lkIFZhcmlhYmxlV3JpdGVGaXJlRGV0YWlsOjp0b3VjaChXYXRjaHBvaW50U2V0KiBzZXQs
IEpTT2JqZWN0KiBvYmplY3QsIGNvbnN0IFByb3BlcnR5TmFtZSYgbmFtZSkKK3sKKyAgICBzZXQt
PnRvdWNoKFZhcmlhYmxlV3JpdGVGaXJlRGV0YWlsKG9iamVjdCwgbmFtZSkpOworfQorCit9IC8v
IG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Zh
cmlhYmxlV3JpdGVGaXJlRGV0YWlsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1ZhcmlhYmxlV3JpdGVGaXJlRGV0YWlsLmgJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFyaWFibGVXcml0ZUZpcmVEZXRhaWwuaAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgVmFyaWFibGVXcml0ZUZpcmVEZXRhaWxfaAor
I2RlZmluZSBWYXJpYWJsZVdyaXRlRmlyZURldGFpbF9oCisKKyNpbmNsdWRlICJXYXRjaHBvaW50
LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBKU09iamVjdDsKK2NsYXNzIFByb3BlcnR5
TmFtZTsKKworY2xhc3MgVmFyaWFibGVXcml0ZUZpcmVEZXRhaWwgOiBwdWJsaWMgRmlyZURldGFp
bCB7CitwdWJsaWM6CisgICAgVmFyaWFibGVXcml0ZUZpcmVEZXRhaWwoSlNPYmplY3QqIG9iamVj
dCwgY29uc3QgUHJvcGVydHlOYW1lJiBuYW1lKQorICAgICAgICA6IG1fb2JqZWN0KG9iamVjdCkK
KyAgICAgICAgLCBtX25hbWUobmFtZSkKKyAgICB7CisgICAgfQorICAgIAorICAgIHZpcnR1YWwg
dm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgCisgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgdm9pZCB0b3VjaChXYXRjaHBvaW50U2V0KiwgSlNPYmplY3QqLCBjb25zdCBQ
cm9wZXJ0eU5hbWUmKTsKKworcHJpdmF0ZToKKyAgICBKU09iamVjdCogbV9vYmplY3Q7CisgICAg
Y29uc3QgUHJvcGVydHlOYW1lJiBtX25hbWU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKwor
I2VuZGlmIC8vIFZhcmlhYmxlV3JpdGVGaXJlRGV0YWlsX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9XYXRjaHBvaW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1dhdGNocG9pbnQuaAkocmV2aXNpb24gMTgyMDY5KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1dhdGNocG9pbnQuaAkod29ya2luZyBjb3B5KQpA
QCAtMTI1LDIwICsxMjUsMjQgQEAgcHVibGljOgogICAgIC8vIHNldCB3YXRjaHBvaW50cyB0aGF0
IHdlIGJlbGlldmUgd2lsbCBhY3R1YWxseSBiZSBmaXJlZC4KICAgICB2b2lkIHN0YXJ0V2F0Y2hp
bmcoKQogICAgIHsKLSAgICAgICAgQVNTRVJUKHN0YXRlKCkgIT0gSXNJbnZhbGlkYXRlZCk7Cisg
ICAgICAgIEFTU0VSVChtX3N0YXRlICE9IElzSW52YWxpZGF0ZWQpOworICAgICAgICBpZiAobV9z
dGF0ZSA9PSBJc1dhdGNoZWQpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIFdURjo6c3Rv
cmVTdG9yZUZlbmNlKCk7CiAgICAgICAgIG1fc3RhdGUgPSBJc1dhdGNoZWQ7CisgICAgICAgIFdU
Rjo6c3RvcmVTdG9yZUZlbmNlKCk7CiAgICAgfQogICAgIAogICAgIHZvaWQgZmlyZUFsbChjb25z
dCBGaXJlRGV0YWlsJiBkZXRhaWwpCiAgICAgewotICAgICAgICBpZiAoTElLRUxZKHN0YXRlKCkg
IT0gSXNXYXRjaGVkKSkKKyAgICAgICAgaWYgKExJS0VMWShtX3N0YXRlICE9IElzV2F0Y2hlZCkp
CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGZpcmVBbGxTbG93KGRldGFpbCk7CiAgICAg
fQogICAgIAogICAgIHZvaWQgZmlyZUFsbChjb25zdCBjaGFyKiByZWFzb24pCiAgICAgewotICAg
ICAgICBpZiAoTElLRUxZKHN0YXRlKCkgIT0gSXNXYXRjaGVkKSkKKyAgICAgICAgaWYgKExJS0VM
WShtX3N0YXRlICE9IElzV2F0Y2hlZCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGZp
cmVBbGxTbG93KHJlYXNvbik7CiAgICAgfQpAQCAtMTUxLDEzICsxNTUsMjMgQEAgcHVibGljOgog
ICAgICAgICAgICAgZmlyZUFsbChkZXRhaWwpOwogICAgIH0KICAgICAKKyAgICB2b2lkIHRvdWNo
KGNvbnN0IGNoYXIqIHJlYXNvbikKKyAgICB7CisgICAgICAgIHRvdWNoKFN0cmluZ0ZpcmVEZXRh
aWwocmVhc29uKSk7CisgICAgfQorICAgIAogICAgIHZvaWQgaW52YWxpZGF0ZShjb25zdCBGaXJl
RGV0YWlsJiBkZXRhaWwpCiAgICAgewogICAgICAgICBpZiAoc3RhdGUoKSA9PSBJc1dhdGNoZWQp
CiAgICAgICAgICAgICBmaXJlQWxsKGRldGFpbCk7CiAgICAgICAgIG1fc3RhdGUgPSBJc0ludmFs
aWRhdGVkOwogICAgIH0KLQorICAgIAorICAgIHZvaWQgaW52YWxpZGF0ZShjb25zdCBjaGFyKiBy
ZWFzb24pCisgICAgeworICAgICAgICBpbnZhbGlkYXRlKFN0cmluZ0ZpcmVEZXRhaWwocmVhc29u
KSk7CisgICAgfQorICAgIAogICAgIGludDhfdCogYWRkcmVzc09mU3RhdGUoKSB7IHJldHVybiAm
bV9zdGF0ZTsgfQogICAgIGludDhfdCogYWRkcmVzc09mU2V0SXNOb3RFbXB0eSgpIHsgcmV0dXJu
ICZtX3NldElzTm90RW1wdHk7IH0KICAgICAKQEAgLTI2MSw3ICsyNzUsMTEgQEAgcHVibGljOgog
ICAgICAgICAgICAgZmF0KCktPnRvdWNoKGRldGFpbCk7CiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KLSAgICAgICAgaWYgKGRlY29kZVN0YXRlKG1fZGF0YSkgPT0gQ2xlYXJXYXRjaHBv
aW50KQorICAgICAgICB1aW50cHRyX3QgZGF0YSA9IG1fZGF0YTsKKyAgICAgICAgaWYgKGRlY29k
ZVN0YXRlKGRhdGEpID09IElzSW52YWxpZGF0ZWQpCisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CisgICAgICAgIGlmIChkZWNvZGVTdGF0ZShkYXRh
KSA9PSBDbGVhcldhdGNocG9pbnQpCiAgICAgICAgICAgICBtX2RhdGEgPSBlbmNvZGVTdGF0ZShJ
c1dhdGNoZWQpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBtX2RhdGEgPSBlbmNvZGVTdGF0
ZShJc0ludmFsaWRhdGVkKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGls
ZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAxODIwNjkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9y
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDY2LDkgKzQ2Niw2IEBAIEJ5dGVjb2RlR2VuZXJhdG9y
OjpCeXRlY29kZUdlbmVyYXRvcihWTSYKICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICBpZiAo
bV9zeW1ib2xUYWJsZS0+c2NvcGVTaXplKCkpCi0gICAgICAgIGVtaXRPcGNvZGUob3BfdG91Y2hf
ZW50cnkpOwotCiAgICAgaWYgKGlzQ29uc3RydWN0b3IoKSkgewogICAgICAgICBpZiAoY29uc3Ry
dWN0b3JLaW5kKCkgPT0gQ29uc3RydWN0b3JLaW5kOjpEZXJpdmVkKSB7CiAgICAgICAgICAgICBt
X25ld1RhcmdldFJlZ2lzdGVyID0gYWRkVmFyKCk7CkBAIC0xMzI0LDggKzEzMjEsNiBAQCBSZWdp
c3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFJlc29sCiAgICAgICAgIAogICAgICAgICBB
U1NFUlQoIW1fc3ltYm9sVGFibGUgfHwgIW1fc3ltYm9sVGFibGUtPmNvbnRhaW5zKHZhcmlhYmxl
LmlkZW50KCkuaW1wbCgpKSB8fCByZXNvbHZlVHlwZSgpID09IER5bmFtaWMpOwogICAgICAgICAK
LSAgICAgICAgbV9jb2RlQmxvY2stPmFkZFByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb24oaW5zdHJ1
Y3Rpb25zKCkuc2l6ZSgpKTsKLSAgICAgICAgCiAgICAgICAgIC8vIHJlc29sdmVfc2NvcGUgZHN0
LCBpZCwgUmVzb2x2ZVR5cGUsIGRlcHRoCiAgICAgICAgIGVtaXRPcGNvZGUob3BfcmVzb2x2ZV9z
Y29wZSk7CiAgICAgICAgIGRzdCA9IHRlbXBEZXN0aW5hdGlvbihkc3QpOwpAQCAtMTMzNCw3ICsx
MzI5LDYgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRSZXNvbAogICAgICAg
ICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYWRkQ29uc3RhbnQodmFyaWFibGUuaWRlbnQoKSkpOwog
ICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQocmVzb2x2ZVR5cGUoKSk7CiAgICAgICAgIGlu
c3RydWN0aW9ucygpLmFwcGVuZCgwKTsKLSAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKDAp
OwogICAgICAgICByZXR1cm4gZHN0OwogICAgIH0KICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVz
LmgJKHJldmlzaW9uIDE4MjA2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJz
dHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTM0MSw2ICsxMzQx
LDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgIH0KIAog
ICAgIGNhc2UgQ3JlYXRlVGhpczogeworICAgICAgICAvLyBGSVhNRTogV2UgY2FuIGZvbGQgdGhp
cyB0byBOZXdPYmplY3QgaWYgdGhlIGluY29taW5nIGNhbGxlZSBpcyBhIGNvbnN0YW50LgogICAg
ICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0ZpbmFsT2JqZWN0KTsKICAgICAgICAgYnJl
YWs7CiAgICAgfQpAQCAtMTQwMyw2ICsxNDA0LDE1IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRl
cjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNhc2UgR2V0
Q2FsbGVlOgorICAgICAgICBpZiAoRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlID0ganNE
eW5hbWljQ2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRh
YmxlKCkpKSB7CisgICAgICAgICAgICBWYXJpYWJsZVdhdGNocG9pbnRTZXQmIHNldCA9IGV4ZWN1
dGFibGUtPmZ1bmN0aW9uUmVhbGxvY2F0aW9uV2F0Y2hwb2ludFNldCgpOworICAgICAgICAgICAg
aWYgKEpTVmFsdWUgdmFsdWUgPSBzZXQuaW5mZXJyZWRWYWx1ZSgpKSB7CisgICAgICAgICAgICAg
ICAgbV9ncmFwaC53YXRjaHBvaW50cygpLmFkZExhemlseSgmc2V0KTsKKyAgICAgICAgICAgICAg
ICBKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4odmFsdWUpOworICAg
ICAgICAgICAgICAgIHNldENvbnN0YW50KG5vZGUsICptX2dyYXBoLmZyZWV6ZShmdW5jdGlvbikp
OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAg
ICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjRnVuY3Rpb24pOwogICAgICAgICBicmVhazsK
ICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFy
c2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVD
b2RlUGFyc2VyLmNwcAkocmV2aXNpb24gMTgyMDY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3OCw4ICsyNzgs
MjAgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBpZiAob3BlcmFuZC5vZmZzZXQoKSA9PSBK
U1N0YWNrOjpDYWxsZWUpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB3ZWFrSlNDb25zdGFu
dChjYWxsZWUpOwogICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKG9wZXJhbmQub2Zm
c2V0KCkgPT0gSlNTdGFjazo6Q2FsbGVlKQorICAgICAgICB9IGVsc2UgaWYgKG9wZXJhbmQub2Zm
c2V0KCkgPT0gSlNTdGFjazo6Q2FsbGVlKSB7CisgICAgICAgICAgICAvLyBXZSBoYXZlIHRvIGRv
IHNvbWUgY29uc3RhbnQtZm9sZGluZyBoZXJlIGJlY2F1c2UgdGhpcyBlbmFibGVzIENyZWF0ZVRo
aXMgZm9sZGluZy4gTm90ZQorICAgICAgICAgICAgLy8gdGhhdCB3ZSBkb24ndCBoYXZlIHN1Y2gg
d2F0Y2hwb2ludC1iYXNlZCBmb2xkaW5nIGZvciBpbmxpbmVkIHVzZXMgb2YgQ2FsbGVlLCBzaW5j
ZSBpbiB0aGF0CisgICAgICAgICAgICAvLyBjYXNlIGlmIHRoZSBmdW5jdGlvbiBpcyBhIHNpbmds
ZXRvbiB0aGVuIHdlIGFscmVhZHkga25vdyBpdC4KKyAgICAgICAgICAgIGlmIChGdW5jdGlvbkV4
ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBqc0R5bmFtaWNDYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+
KG1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSkpIHsKKyAgICAgICAgICAgICAgICBWYXJp
YWJsZVdhdGNocG9pbnRTZXQmIHNldCA9IGV4ZWN1dGFibGUtPmZ1bmN0aW9uUmVhbGxvY2F0aW9u
V2F0Y2hwb2ludFNldCgpOworICAgICAgICAgICAgICAgIGlmIChKU1ZhbHVlIHZhbHVlID0gc2V0
LmluZmVycmVkVmFsdWUoKSkgeworICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLndhdGNocG9p
bnRzKCkuYWRkTGF6aWx5KCZzZXQpOworICAgICAgICAgICAgICAgICAgICBKU0Z1bmN0aW9uKiBm
dW5jdGlvbiA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4odmFsdWUpOworICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gd2Vha0pTQ29uc3RhbnQoZnVuY3Rpb24pOworICAgICAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiBhZGRUb0dyYXBoKEdldENhbGxlZSk7Cisg
ICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHJldHVybiBnZXREaXJlY3QobV9pbmxpbmVTdGFj
a1RvcC0+cmVtYXBPcGVyYW5kKG9wZXJhbmQpKTsKICAgICB9CkBAIC0yNTE5LDYgKzI1MzEsMTIg
QEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6Y2xlYXJDYWNoZXMoKQogTm9kZSogQnl0ZUNvZGVQYXJz
ZXI6OmdldFNjb3BlKFZpcnR1YWxSZWdpc3RlciBzY29wZUNoYWluLCB1bnNpZ25lZCBza2lwQ291
bnQpCiB7CiAgICAgTm9kZSogbG9jYWxCYXNlID0gZ2V0KHNjb3BlQ2hhaW4pOworICAgIGFkZFRv
R3JhcGgoUGhhbnRvbSwgbG9jYWxCYXNlKTsgLy8gT1NSIGV4aXQgY2Fubm90IGhhbmRsZSByZXNv
bHZlX3Njb3BlIG9uIGEgRENFJ2Qgc2NvcGUuCisgICAgaWYgKEpTU2NvcGUqIHNjb3BlID0gbG9j
YWxCYXNlLT5keW5hbWljQ2FzdENvbnN0YW50PEpTU2NvcGUqPigpKSB7CisgICAgICAgIGZvciAo
dW5zaWduZWQgbiA9IHNraXBDb3VudDsgbi0tOykKKyAgICAgICAgICAgIHNjb3BlID0gc2NvcGUt
Pm5leHQoKTsKKyAgICAgICAgcmV0dXJuIHdlYWtKU0NvbnN0YW50KHNjb3BlKTsKKyAgICB9CiAg
ICAgZm9yICh1bnNpZ25lZCBuID0gc2tpcENvdW50OyBuLS07KQogICAgICAgICBsb2NhbEJhc2Ug
PSBhZGRUb0dyYXBoKFNraXBTY29wZSwgbG9jYWxCYXNlKTsKICAgICByZXR1cm4gbG9jYWxCYXNl
OwpAQCAtMjU5MywxMSArMjYxMSw2IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2so
dW5zaWduZWQKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2VudGVyKTsKICAgICAgICAgfQog
ICAgICAgICAgICAgCi0gICAgICAgIGNhc2Ugb3BfdG91Y2hfZW50cnk6Ci0gICAgICAgICAgICBp
ZiAobV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2stPnN5bWJvbFRhYmxlKCktPm1fZnVuY3Rp
b25FbnRlcmVkT25jZS5pc1N0aWxsVmFsaWQoKSkKLSAgICAgICAgICAgICAgICBhZGRUb0dyYXBo
KEZvcmNlT1NSRXhpdCk7Ci0gICAgICAgICAgICBORVhUX09QQ09ERShvcF90b3VjaF9lbnRyeSk7
Ci0gICAgICAgICAgICAKICAgICAgICAgY2FzZSBvcF90b190aGlzOiB7CiAgICAgICAgICAgICBO
b2RlKiBvcDEgPSBnZXRUaGlzKCk7CiAgICAgICAgICAgICBpZiAob3AxLT5vcCgpICE9IFRvVGhp
cykgewpAQCAtMzM3NSwxNyArMzM4OCw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxv
Y2sodW5zaWduZWQKICAgICAgICAgICAgIGNhc2UgTG9jYWxDbG9zdXJlVmFyOgogICAgICAgICAg
ICAgY2FzZSBDbG9zdXJlVmFyOgogICAgICAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhcklu
amVjdGlvbkNoZWNrczogewotICAgICAgICAgICAgICAgIEpTTGV4aWNhbEVudmlyb25tZW50KiBs
ZXhpY2FsRW52aXJvbm1lbnQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bNl0udS5sZXhpY2FsRW52aXJv
bm1lbnQuZ2V0KCk7Ci0gICAgICAgICAgICAgICAgaWYgKGxleGljYWxFbnZpcm9ubWVudAotICAg
ICAgICAgICAgICAgICAgICAmJiBsZXhpY2FsRW52aXJvbm1lbnQtPnN5bWJvbFRhYmxlKCktPm1f
ZnVuY3Rpb25FbnRlcmVkT25jZS5pc1N0aWxsVmFsaWQoKSkgewotICAgICAgICAgICAgICAgICAg
ICBtX2dyYXBoLndhdGNocG9pbnRzKCkuYWRkTGF6aWx5KGxleGljYWxFbnZpcm9ubWVudC0+c3lt
Ym9sVGFibGUoKS0+bV9mdW5jdGlvbkVudGVyZWRPbmNlKTsKLSAgICAgICAgICAgICAgICAgICAg
YWRkVG9HcmFwaChQaGFudG9tLCBnZXREaXJlY3QobV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVy
YW5kKFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSkpKTsK
LSAgICAgICAgICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rlcihkc3QpLCB3ZWFrSlNDb25z
dGFudChsZXhpY2FsRW52aXJvbm1lbnQpKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoZHN0
KSwgZ2V0U2NvcGUoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJh
bmQpLCBkZXB0aCkpOwotICAgICAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUoKSkKLSAg
ICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChQaGFudG9tLCBnZXREaXJlY3QobV9pbmxpbmVT
dGFja1RvcC0+cmVtYXBPcGVyYW5kKFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25b
Ml0udS5vcGVyYW5kKSkpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIGNhc2UgRHluYW1pYzoKQEAgLTM0MzcsMTkgKzM0NDAsNTggQEAgYm9vbCBC
eXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgY2FzZSBHbG9i
YWxWYXI6CiAgICAgICAgICAgICBjYXNlIEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6
IHsKICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKFBoYW50b20sIGdldChWaXJ0dWFsUmVnaXN0
ZXIoc2NvcGUpKSk7Ci0gICAgICAgICAgICAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIo
Z2xvYmFsT2JqZWN0LT5zeW1ib2xUYWJsZSgpLT5tX2xvY2spOwotICAgICAgICAgICAgICAgIFN5
bWJvbFRhYmxlRW50cnkgZW50cnkgPSBnbG9iYWxPYmplY3QtPnN5bWJvbFRhYmxlKCktPmdldChs
b2NrZXIsIHVpZCk7Ci0gICAgICAgICAgICAgICAgVmFyaWFibGVXYXRjaHBvaW50U2V0KiB3YXRj
aHBvaW50U2V0ID0gZW50cnkud2F0Y2hwb2ludFNldCgpOwotICAgICAgICAgICAgICAgIEpTVmFs
dWUgaW5mZXJyZWRWYWx1ZSA9Ci0gICAgICAgICAgICAgICAgICAgIHdhdGNocG9pbnRTZXQgPyB3
YXRjaHBvaW50U2V0LT5pbmZlcnJlZFZhbHVlKCkgOiBKU1ZhbHVlKCk7Ci0gICAgICAgICAgICAg
ICAgaWYgKCFpbmZlcnJlZFZhbHVlKSB7Ci0gICAgICAgICAgICAgICAgICAgIFNwZWN1bGF0ZWRU
eXBlIHByZWRpY3Rpb24gPSBnZXRQcmVkaWN0aW9uKCk7Ci0gICAgICAgICAgICAgICAgICAgIHNl
dChWaXJ0dWFsUmVnaXN0ZXIoZHN0KSwgYWRkVG9HcmFwaChHZXRHbG9iYWxWYXIsIE9wSW5mbyhv
cGVyYW5kKSwgT3BJbmZvKHByZWRpY3Rpb24pKSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgICAgIFdhdGNocG9pbnRTZXQqIHdhdGNocG9pbnRTZXQ7CisgICAgICAg
ICAgICAgICAgU2NvcGVPZmZzZXQgb2Zmc2V0OworICAgICAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIoZ2xvYmFsT2JqZWN0LT5zeW1i
b2xUYWJsZSgpLT5tX2xvY2spOworICAgICAgICAgICAgICAgICAgICBTeW1ib2xUYWJsZUVudHJ5
IGVudHJ5ID0gZ2xvYmFsT2JqZWN0LT5zeW1ib2xUYWJsZSgpLT5nZXQobG9ja2VyLCB1aWQpOwor
ICAgICAgICAgICAgICAgICAgICB3YXRjaHBvaW50U2V0ID0gZW50cnkud2F0Y2hwb2ludFNldCgp
OworICAgICAgICAgICAgICAgICAgICBvZmZzZXQgPSBlbnRyeS5zY29wZU9mZnNldCgpOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAod2F0Y2hwb2ludFNldCAmJiB3YXRj
aHBvaW50U2V0LT5zdGF0ZSgpID09IElzV2F0Y2hlZCkgeworICAgICAgICAgICAgICAgICAgICAv
LyBUaGlzIGhhcyBhIGZ1biBjb25jdXJyZW5jeSBzdG9yeS4gVGhlcmUgaXMgdGhlIHBvc3NpYmls
aXR5IG9mIGEgcmFjZSBpbiB0d28KKyAgICAgICAgICAgICAgICAgICAgLy8gZGlyZWN0aW9uczoK
KyAgICAgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAgICAgLy8gV2Ugc2VlIHRo
YXQgdGhlIHNldCBJc1dhdGNoZWQsIGJ1dCBpbiB0aGUgbWVhbnRpbWUgaXQgZ2V0cyBpbnZhbGlk
YXRlZDogdGhpcyBpcworICAgICAgICAgICAgICAgICAgICAvLyBmaW5lIGJlY2F1c2UgaWYgd2Ug
c2F3IHRoYXQgaXQgSXNXYXRjaGVkIHRoZW4gd2UgYWRkIGEgd2F0Y2hwb2ludC4gSWYgaXQgZ2V0
cworICAgICAgICAgICAgICAgICAgICAvLyBpbnZhbGlkYXRlZCwgdGhlbiB0aGlzIGNvbXBpbGF0
aW9uIGlzIGludmFsaWRhdGVkLiBOb3RlIHRoYXQgaW4gdGhlIG1lYW50aW1lIHdlCisgICAgICAg
ICAgICAgICAgICAgIC8vIG1heSBsb2FkIGFuIGFic3VyZCB2YWx1ZSBmcm9tIHRoZSBnbG9iYWwg
b2JqZWN0LiBJdCdzIGZpbmUgdG8gbG9hZCBhbiBhYnN1cmQKKyAgICAgICAgICAgICAgICAgICAg
Ly8gdmFsdWUgaWYgdGhlIGNvbXBpbGF0aW9uIGlzIGludmFsaWRhdGVkIGFueXdheS4KKyAgICAg
ICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAgICAgLy8gV2Ugc2VlIHRoYXQgdGhl
IHNldCBJc1dhdGNoZWQsIGJ1dCB0aGUgdmFsdWUgaXNuJ3QgeWV0IGluaXRpYWxpemVkOiB0aGlz
IGlzbid0CisgICAgICAgICAgICAgICAgICAgIC8vIHBvc3NpYmxlIGJlY2F1c2Ugb2YgdGhlIG9y
ZGVyaW5nIG9mIG9wZXJhdGlvbnMuCisgICAgICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAg
ICAgICAgICAgIC8vIEhlcmUncyBob3cgd2Ugb3JkZXIgb3BlcmF0aW9uczoKKyAgICAgICAgICAg
ICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAgICAgLy8gTWFpbiB0aHJlYWQgc3RvcmVzIHRv
IHRoZSBnbG9iYWwgb2JqZWN0OiBhbHdheXMgc3RvcmUgYSB2YWx1ZSBmaXJzdCwgYW5kIG9ubHkK
KyAgICAgICAgICAgICAgICAgICAgLy8gYWZ0ZXIgdGhhdCBkbyB3ZSB0b3VjaCB0aGUgd2F0Y2hw
b2ludCBzZXQuIFRoZXJlIGlzIGEgZmVuY2UgaW4gdGhlIHRvdWNoLCB0aGF0CisgICAgICAgICAg
ICAgICAgICAgIC8vIGVuc3VyZXMgdGhhdCB0aGUgc3RvcmUgdG8gdGhlIGdsb2JhbCBvYmplY3Qg
YWx3YXlzIGhhcHBlbnMgYmVmb3JlIHRoZSB0b3VjaCBvbiB0aGUKKyAgICAgICAgICAgICAgICAg
ICAgLy8gc2V0LgorICAgICAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgICAgICAv
LyBDb21waWxhdGlvbiB0aHJlYWQ6IGFsd2F5cyBmaXJzdCBsb2FkIHRoZSBzdGF0ZSBvZiB0aGUg
d2F0Y2hwb2ludCBzZXQsIGFuZCB0aGVuCisgICAgICAgICAgICAgICAgICAgIC8vIGxvYWQgdGhl
IHZhbHVlLiBUaGUgV2F0Y2hwb2ludFNldDo6c3RhdGUoKSBtZXRob2QgZG9lcyBmZW5jZXMgZm9y
IHVzIHRvIGVuc3VyZQorICAgICAgICAgICAgICAgICAgICAvLyB0aGF0IHRoZSBsb2FkIG9mIHRo
ZSBzdGF0ZSBoYXBwZW5zIGJlZm9yZSBvdXIgbG9hZCBvZiB0aGUgdmFsdWUuCisgICAgICAgICAg
ICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgICAgIC8vIEZpbmFsaXppbmcgY29tcGlsYXRp
b246IHRoaXMgaGFwcGVucyBvbiB0aGUgbWFpbiB0aHJlYWQgYW5kIHN5bmNocm9ub3VzbHkgY2hl
Y2tzCisgICAgICAgICAgICAgICAgICAgIC8vIHZhbGlkaXR5IG9mIGFsbCB3YXRjaHBvaW50IHNl
dHMuCisgICAgICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgICAgIC8vIFdlIHdp
bGwgb25seSBwZXJmb3JtIG9wdGltaXphdGlvbnMgaWYgdGhlIGxvYWQgb2YgdGhlIHN0YXRlIHlp
ZWxkcyBJc1dhdGNoZWQuIFRoYXQKKyAgICAgICAgICAgICAgICAgICAgLy8gbWVhbnMgdGhhdCBh
dCBsZWFzdCBvbmUgc3RvcmUgd291bGQgaGF2ZSBoYXBwZW5lZCB0byBpbml0aWFsaXplIHRoZSBv
cmlnaW5hbCB2YWx1ZQorICAgICAgICAgICAgICAgICAgICAvLyBvZiB0aGUgdmFyaWFibGUgKHRo
YXQgaXMsIHRoZSB2YWx1ZSB3ZSdkIGxpa2UgdG8gY29uc3RhbnQgZm9sZCB0bykuIFRoZXJlIG1h
eSBiZQorICAgICAgICAgICAgICAgICAgICAvLyBvdGhlciBzdG9yZXMgdGhhdCBoYXBwZW4gYWZ0
ZXIgdGhhdCwgYnV0IHRob3NlIHN0b3JlcyB3aWxsIGludmFsaWRhdGUgdGhlCisgICAgICAgICAg
ICAgICAgICAgIC8vIHdhdGNocG9pbnQgc2V0IGFuZCBhbHNvIHRoZSBjb21waWxhdGlvbi4KKyAg
ICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChiaXR3aXNlX2Nh
c3Q8dWludHB0cl90PigmZ2xvYmFsT2JqZWN0LT52YXJpYWJsZUF0KG9mZnNldCkpID09IG9wZXJh
bmQpOworICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gZ2xvYmFsT2JqZWN0LT52
YXJpYWJsZUF0KG9mZnNldCkuZ2V0KCk7CisgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSkg
eworICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC53YXRjaHBvaW50cygpLmFkZExhemls
eSh3YXRjaHBvaW50U2V0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVn
aXN0ZXIoZHN0KSwgd2Vha0pTQ29uc3RhbnQodmFsdWUpKTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAg
ICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIG1fZ3JhcGgud2F0Y2hwb2ludHMoKS5hZGRM
YXppbHkod2F0Y2hwb2ludFNldCk7Ci0gICAgICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rl
cihkc3QpLCB3ZWFrSlNDb25zdGFudChpbmZlcnJlZFZhbHVlKSk7CisgICAgICAgICAgICAgICAg
U3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IGdldFByZWRpY3Rpb24oKTsKKyAgICAgICAgICAg
ICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGRzdCksIGFkZFRvR3JhcGgoR2V0R2xvYmFsVmFyLCBP
cEluZm8ob3BlcmFuZCksIE9wSW5mbyhwcmVkaWN0aW9uKSkpOwogICAgICAgICAgICAgICAgIGJy
ZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgY2FzZSBMb2NhbENsb3N1cmVWYXI6CkBA
IC0zNDk2LDcgKzM1MzgsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2ln
bmVkCiAgICAgICAgICAgICAgICAgdWlkID0gbnVsbHB0cjsKICAgICAgICAgICAgIAogICAgICAg
ICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBudWxscHRyOwotICAgICAgICAgICAgVmFyaWFi
bGVXYXRjaHBvaW50U2V0KiB3YXRjaHBvaW50cyA9IG51bGxwdHI7CisgICAgICAgICAgICBXYXRj
aHBvaW50U2V0KiB3YXRjaHBvaW50cyA9IG51bGxwdHI7CiAgICAgICAgICAgICB1aW50cHRyX3Qg
b3BlcmFuZDsKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBDb25jdXJyZW50SklUTG9j
a2VyIGxvY2tlcihtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPm1fbG9jayk7CkBA
IC0zNTM5LDggKzM1ODEsMTAgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNp
Z25lZAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBOb2RlKiB2YWx1ZU5vZGUg
PSBnZXQoVmlydHVhbFJlZ2lzdGVyKHZhbHVlKSk7CiAgICAgICAgICAgICAgICAgYWRkVG9HcmFw
aChQdXRHbG9iYWxWYXIsIE9wSW5mbyhvcGVyYW5kKSwgdmFsdWVOb2RlKTsKLSAgICAgICAgICAg
ICAgICBpZiAod2F0Y2hwb2ludHMgJiYgd2F0Y2hwb2ludHMtPnN0YXRlKCkgIT0gSXNJbnZhbGlk
YXRlZCkKLSAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChOb3RpZnlXcml0ZSwgT3BJbmZv
KHdhdGNocG9pbnRzKSwgdmFsdWVOb2RlKTsKKyAgICAgICAgICAgICAgICBpZiAod2F0Y2hwb2lu
dHMgJiYgd2F0Y2hwb2ludHMtPnN0YXRlKCkgIT0gSXNJbnZhbGlkYXRlZCkgeworICAgICAgICAg
ICAgICAgICAgICAvLyBNdXN0IGhhcHBlbiBhZnRlciB0aGUgc3RvcmUuIFNlZSBjb21tZW50IGZv
ciBHZXRHbG9iYWxWYXIuCisgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoTm90aWZ5V3Jp
dGUsIE9wSW5mbyh3YXRjaHBvaW50cykpOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAvLyBLZWVwIHNjb3BlIGFsaXZlIHVudGlsIGFmdGVyIHB1dC4KICAgICAgICAgICAgICAg
ICBhZGRUb0dyYXBoKFBoYW50b20sIGdldChWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUpKSk7CiAgICAg
ICAgICAgICAgICAgYnJlYWs7CkBAIC0zNTUxLDEwICszNTk1LDEyIEBAIGJvb2wgQnl0ZUNvZGVQ
YXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgICAgICBOb2RlKiBzY29wZU5v
ZGUgPSBnZXQoVmlydHVhbFJlZ2lzdGVyKHNjb3BlKSk7CiAgICAgICAgICAgICAgICAgTm9kZSog
dmFsdWVOb2RlID0gZ2V0KFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSkpOwogCi0gICAgICAgICAgICAg
ICAgaWYgKHdhdGNocG9pbnRzICYmIHdhdGNocG9pbnRzLT5zdGF0ZSgpICE9IElzSW52YWxpZGF0
ZWQpCi0gICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoTm90aWZ5V3JpdGUsIE9wSW5mbyh3
YXRjaHBvaW50cyksIHZhbHVlTm9kZSk7Ci0KICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKFB1
dENsb3N1cmVWYXIsIE9wSW5mbyhvcGVyYW5kKSwgc2NvcGVOb2RlLCB2YWx1ZU5vZGUpOworCisg
ICAgICAgICAgICAgICAgaWYgKHdhdGNocG9pbnRzICYmIHdhdGNocG9pbnRzLT5zdGF0ZSgpICE9
IElzSW52YWxpZGF0ZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gTXVzdCBoYXBwZW4gYWZ0
ZXIgdGhlIHN0b3JlLiBTZWUgY29tbWVudCBmb3IgR2V0R2xvYmFsVmFyLgorICAgICAgICAgICAg
ICAgICAgICBhZGRUb0dyYXBoKE5vdGlmeVdyaXRlLCBPcEluZm8od2F0Y2hwb2ludHMpKTsKKyAg
ICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAg
ICAgICAgICAgICBjYXNlIER5bmFtaWM6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0NhcGFiaWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwCShyZXZpc2lvbiAxODIwNjkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk2
LDcgKzk2LDYgQEAgQ2FwYWJpbGl0eUxldmVsIGNhcGFiaWxpdHlMZXZlbChPcGNvZGVJRAogICAg
IAogICAgIHN3aXRjaCAob3Bjb2RlSUQpIHsKICAgICBjYXNlIG9wX2VudGVyOgotICAgIGNhc2Ug
b3BfdG91Y2hfZW50cnk6CiAgICAgY2FzZSBvcF90b190aGlzOgogICAgIGNhc2Ugb3BfY2hlY2tf
dGR6OgogICAgIGNhc2Ugb3BfY3JlYXRlX3RoaXM6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Nsb2JiZXJpemUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkocmV2aXNpb24gMTgyMDY5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHdvcmtpbmcgY29weSkKQEAgLTg2MCwxMSAr
ODYwLDE3IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUqIG5vZGUKICAgICBj
YXNlIE5ld1N0cmluZ09iamVjdDoKICAgICBjYXNlIFBoYW50b21OZXdPYmplY3Q6CiAgICAgY2Fz
ZSBNYXRlcmlhbGl6ZU5ld09iamVjdDoKLSAgICBjYXNlIE5ld0Z1bmN0aW9uOgogICAgICAgICBy
ZWFkKEhlYXBPYmplY3RDb3VudCk7CiAgICAgICAgIHdyaXRlKEhlYXBPYmplY3RDb3VudCk7CiAg
ICAgICAgIHJldHVybjsKICAgICAgICAgCisgICAgY2FzZSBOZXdGdW5jdGlvbjoKKyAgICAgICAg
aWYgKG5vZGUtPmNhc3RPcGVyYW5kPEZ1bmN0aW9uRXhlY3V0YWJsZSo+KCktPmZ1bmN0aW9uUmVh
bGxvY2F0aW9uV2F0Y2hwb2ludFNldCgpLmlzU3RpbGxWYWxpZCgpKQorICAgICAgICAgICAgd3Jp
dGUoV2F0Y2hwb2ludF9maXJlKTsKKyAgICAgICAgcmVhZChIZWFwT2JqZWN0Q291bnQpOworICAg
ICAgICB3cml0ZShIZWFwT2JqZWN0Q291bnQpOworICAgICAgICByZXR1cm47CisKICAgICBjYXNl
IFJlZ0V4cEV4ZWM6CiAgICAgY2FzZSBSZWdFeHBUZXN0OgogICAgICAgICByZWFkKFJlZ0V4cFN0
YXRlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lv
biAxODIwNjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMzA4LDggKzMwOCw4IEBAIHZvaWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJl
YW0mIG91dCwgY29uc3QKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiXiIsIG5vZGUtPnBoaSgp
LT5pbmRleCgpKTsKICAgICBpZiAobm9kZS0+aGFzRXhlY3V0aW9uQ291bnRlcigpKQogICAgICAg
ICBvdXQucHJpbnQoY29tbWEsIFJhd1BvaW50ZXIobm9kZS0+ZXhlY3V0aW9uQ291bnRlcigpKSk7
Ci0gICAgaWYgKG5vZGUtPmhhc1ZhcmlhYmxlV2F0Y2hwb2ludFNldCgpKQotICAgICAgICBvdXQu
cHJpbnQoY29tbWEsIFJhd1BvaW50ZXIobm9kZS0+dmFyaWFibGVXYXRjaHBvaW50U2V0KCkpKTsK
KyAgICBpZiAobm9kZS0+aGFzV2F0Y2hwb2ludFNldCgpKQorICAgICAgICBvdXQucHJpbnQoY29t
bWEsIFJhd1BvaW50ZXIobm9kZS0+d2F0Y2hwb2ludFNldCgpKSk7CiAgICAgaWYgKG5vZGUtPmhh
c1R5cGVkQXJyYXkoKSkKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCBpbkNvbnRleHQoSlNWYWx1
ZShub2RlLT50eXBlZEFycmF5KCkpLCBjb250ZXh0KSk7CiAgICAgaWYgKG5vZGUtPmhhc1N0b3Jh
Z2VQb2ludGVyKCkpCkBAIC0xMDI1LDYgKzEwMjUsOCBAQCBKU1ZhbHVlIEdyYXBoOjp0cnlHZXRD
b25zdGFudFByb3BlcnR5KGNvCiAKIEpTVmFsdWUgR3JhcGg6OnRyeUdldENvbnN0YW50Q2xvc3Vy
ZVZhcihKU1ZhbHVlIGJhc2UsIFNjb3BlT2Zmc2V0IG9mZnNldCkKIHsKKyAgICAvLyBUaGlzIGhh
cyBhbiBhd2Vzb21lIGNvbmN1cnJlbmN5IHN0b3J5LiBTZWUgY29tbWVudCBmb3IgR2V0R2xvYmFs
VmFyIGluIEJ5dGVDb2RlUGFyc2VyLgorICAgIAogICAgIGlmICghYmFzZSkKICAgICAgICAgcmV0
dXJuIEpTVmFsdWUoKTsKICAgICAKQEAgLTEwMzMsMjQgKzEwMzUsMjggQEAgSlNWYWx1ZSBHcmFw
aDo6dHJ5R2V0Q29uc3RhbnRDbG9zdXJlVmFyKAogICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwog
ICAgIAogICAgIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSA9IGFjdGl2YXRpb24tPnN5bWJvbFRh
YmxlKCk7Ci0gICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIoc3ltYm9sVGFibGUtPm1fbG9j
ayk7Ci0gICAgCi0gICAgaWYgKHN5bWJvbFRhYmxlLT5tX2Z1bmN0aW9uRW50ZXJlZE9uY2UuaGFz
QmVlbkludmFsaWRhdGVkKCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlKCk7Ci0gICAgCi0gICAg
U3ltYm9sVGFibGVFbnRyeSogZW50cnkgPSBzeW1ib2xUYWJsZS0+ZW50cnlGb3IobG9ja2VyLCBv
ZmZzZXQpOwotICAgIGlmICghZW50cnkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlKCk7Ci0gICAg
Ci0gICAgVmFyaWFibGVXYXRjaHBvaW50U2V0KiBzZXQgPSBlbnRyeS0+d2F0Y2hwb2ludFNldCgp
OwotICAgIGlmICghc2V0KQotICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwotICAgIAotICAgIEpT
VmFsdWUgdmFsdWUgPSBzZXQtPmluZmVycmVkVmFsdWUoKTsKLSAgICBpZiAoIXZhbHVlKQotICAg
ICAgICByZXR1cm4gSlNWYWx1ZSgpOworICAgIEpTVmFsdWUgdmFsdWU7CisgICAgV2F0Y2hwb2lu
dFNldCogc2V0OworICAgIHsKKyAgICAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIoc3lt
Ym9sVGFibGUtPm1fbG9jayk7CisgICAgICAgIAorICAgICAgICBTeW1ib2xUYWJsZUVudHJ5KiBl
bnRyeSA9IHN5bWJvbFRhYmxlLT5lbnRyeUZvcihsb2NrZXIsIG9mZnNldCk7CisgICAgICAgIGlm
ICghZW50cnkpCisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOworICAgICAgICAKKyAgICAg
ICAgc2V0ID0gZW50cnktPndhdGNocG9pbnRTZXQoKTsKKyAgICAgICAgaWYgKCFzZXQpCisgICAg
ICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOworICAgICAgICAKKyAgICAgICAgaWYgKHNldC0+c3Rh
dGUoKSAhPSBJc1dhdGNoZWQpCisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOworICAgICAg
ICAKKyAgICAgICAgQVNTRVJUKGVudHJ5LT5zY29wZU9mZnNldCgpID09IG9mZnNldCk7CisgICAg
ICAgIHZhbHVlID0gYWN0aXZhdGlvbi0+dmFyaWFibGVBdChvZmZzZXQpLmdldCgpOworICAgICAg
ICBpZiAoIXZhbHVlKQorICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKKyAgICB9CiAgICAg
Ci0gICAgd2F0Y2hwb2ludHMoKS5hZGRMYXppbHkoc3ltYm9sVGFibGUtPm1fZnVuY3Rpb25FbnRl
cmVkT25jZSk7CiAgICAgd2F0Y2hwb2ludHMoKS5hZGRMYXppbHkoc2V0KTsKICAgICAKICAgICBy
ZXR1cm4gdmFsdWU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNp
b24gMTgyMDY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEyMTksMTQgKzEyMTksMTQgQEAgc3RydWN0IE5vZGUgewogICAgICAgICBt
X29wSW5mbyA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHZhbHVlKTsKICAgICB9CiAgICAgCi0g
ICAgYm9vbCBoYXNWYXJpYWJsZVdhdGNocG9pbnRTZXQoKQorICAgIGJvb2wgaGFzV2F0Y2hwb2lu
dFNldCgpCiAgICAgewogICAgICAgICByZXR1cm4gb3AoKSA9PSBOb3RpZnlXcml0ZTsKICAgICB9
CiAgICAgCi0gICAgVmFyaWFibGVXYXRjaHBvaW50U2V0KiB2YXJpYWJsZVdhdGNocG9pbnRTZXQo
KQorICAgIFdhdGNocG9pbnRTZXQqIHdhdGNocG9pbnRTZXQoKQogICAgIHsKLSAgICAgICAgcmV0
dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VmFyaWFibGVXYXRjaHBvaW50U2V0Kj4obV9vcEluZm8pOwor
ICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxXYXRjaHBvaW50U2V0Kj4obV9vcEluZm8p
OwogICAgIH0KICAgICAKICAgICBib29sIGhhc1R5cGVkQXJyYXkoKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAxODIwNjkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMDU0LDEzICsxMDU0LDEyIEBAIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
U3dpdGNoU3RyaW4KICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y2hhcio+KGV4ZWMtPmNvZGVCbG9j
aygpLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCkuY3RpRm9yVmFsdWUoc3RyaW5n
LT52YWx1ZShleGVjKS5pbXBsKCkpLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwogfQogCi12b2lkIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uTm90aWZ5V3JpdGUoRXhlY1N0YXRlKiBleGVjLCBWYXJpYWJs
ZVdhdGNocG9pbnRTZXQqIHNldCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQordm9pZCBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5vdGlmeVdyaXRlKEV4ZWNTdGF0ZSogZXhlYywgV2F0Y2hw
b2ludFNldCogc2V0KQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2Fs
bEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwotICAgIEpTVmFsdWUgdmFsdWUgPSBKU1Zh
bHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKIAotICAgIHNldC0+bm90aWZ5V3JpdGUodm0sIHZh
bHVlLCAiRXhlY3V0ZWQgTm90aWZ5V3JpdGUiKTsKKyAgICBzZXQtPnRvdWNoKCJFeGVjdXRlZCBO
b3RpZnlXcml0ZSIpOwogfQogCiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVGhyb3dTdGFj
a092ZXJmbG93Rm9yVmFyYXJncyhFeGVjU3RhdGUqIGV4ZWMpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAkocmV2aXNpb24gMTgyMDY5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTEy
NSw3ICsxMjUsNyBAQCBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTWFrZVJvcGUyCiBK
U0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTWFrZVJvcGUzKEV4ZWNTdGF0ZSosIEpTU3Ry
aW5nKiwgSlNTdHJpbmcqLCBKU1N0cmluZyopOwogY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRp
b25GaW5kU3dpdGNoSW1tVGFyZ2V0Rm9yRG91YmxlKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVl
LCBzaXplX3QgdGFibGVJbmRleCk7CiBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblN3aXRj
aFN0cmluZyhFeGVjU3RhdGUqLCBzaXplX3QgdGFibGVJbmRleCwgSlNTdHJpbmcqKTsKLXZvaWQg
SklUX09QRVJBVElPTiBvcGVyYXRpb25Ob3RpZnlXcml0ZShFeGVjU3RhdGUqLCBWYXJpYWJsZVdh
dGNocG9pbnRTZXQqLCBFbmNvZGVkSlNWYWx1ZSk7Cit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uTm90aWZ5V3JpdGUoRXhlY1N0YXRlKiwgV2F0Y2hwb2ludFNldCopOwogdm9pZCBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvblRocm93U3RhY2tPdmVyZmxvd0ZvclZhcmFyZ3MoRXhlY1N0YXRlKikg
V1RGX0lOVEVSTkFMOwogaW50MzJfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblNpemVPZlZhcmFy
Z3MoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgYXJndW1lbnRzLCBpbnQzMl90IGZpcnN0VmFy
QXJnT2Zmc2V0KTsKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25Mb2FkVmFyYXJncyhFeGVj
U3RhdGUqLCBpbnQzMl90IGZpcnN0RWxlbWVudERlc3QsIEVuY29kZWRKU1ZhbHVlIGFyZ3VtZW50
cywgaW50MzJfdCBvZmZzZXQsIGludDMyX3QgbGVuZ3RoLCBpbnQzMl90IG1hbmRhdG9yeU1pbmlt
dW0pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMy
XzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklUMzJfNjQuY3BwCShyZXZpc2lvbiAxODIwNjkpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
OTgyLDMyICszOTgyLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2Rl
KQogICAgIH0KIAogICAgIGNhc2UgTm90aWZ5V3JpdGU6IHsKLSAgICAgICAgVmFyaWFibGVXYXRj
aHBvaW50U2V0KiBzZXQgPSBub2RlLT52YXJpYWJsZVdhdGNocG9pbnRTZXQoKTsKLSAgICAKLSAg
ICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgICAg
ICBHUFJSZWcgdmFsdWVUYWdHUFIgPSB2YWx1ZS50YWdHUFIoKTsKLSAgICAgICAgR1BSUmVnIHZh
bHVlUGF5bG9hZEdQUiA9IHZhbHVlLnBheWxvYWRHUFIoKTsKLSAgICAKLSAgICAgICAgR1BSVGVt
cG9yYXJ5IHRlbXAodGhpcyk7Ci0gICAgICAgIEdQUlJlZyB0ZW1wR1BSID0gdGVtcC5ncHIoKTsK
LSAgICAKLSAgICAgICAgbV9qaXQubG9hZDgoc2V0LT5hZGRyZXNzT2ZTdGF0ZSgpLCB0ZW1wR1BS
KTsKLSAgICAKLSAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgaXNEb25lID0gbV9qaXQuYnJhbmNo
MzIoSklUQ29tcGlsZXI6OkVxdWFsLCB0ZW1wR1BSLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRl
ZCkpOwotICAgICAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgbm90aWZ5U2xvdzsKLSAgICAgICAg
bm90aWZ5U2xvdy5hcHBlbmQobV9qaXQuYnJhbmNoMzIoCi0gICAgICAgICAgICBKSVRDb21waWxl
cjo6Tm90RXF1YWwsCi0gICAgICAgICAgICBKSVRDb21waWxlcjo6QWJzb2x1dGVBZGRyZXNzKHNl
dC0+YWRkcmVzc09mSW5mZXJyZWRWYWx1ZSgpLT5wYXlsb2FkUG9pbnRlcigpKSwKLSAgICAgICAg
ICAgIHZhbHVlUGF5bG9hZEdQUikpOwotICAgICAgICBub3RpZnlTbG93LmFwcGVuZChtX2ppdC5i
cmFuY2gzMigKLSAgICAgICAgICAgIEpJVENvbXBpbGVyOjpOb3RFcXVhbCwgCi0gICAgICAgICAg
ICBKSVRDb21waWxlcjo6QWJzb2x1dGVBZGRyZXNzKHNldC0+YWRkcmVzc09mSW5mZXJyZWRWYWx1
ZSgpLT50YWdQb2ludGVyKCkpLAotICAgICAgICAgICAgdmFsdWVUYWdHUFIpKTsKLSAgICAgICAg
YWRkU2xvd1BhdGhHZW5lcmF0b3IoCi0gICAgICAgICAgICBzbG93UGF0aENhbGwobm90aWZ5U2xv
dywgdGhpcywgb3BlcmF0aW9uTm90aWZ5V3JpdGUsIE5vUmVzdWx0LCBzZXQsIHZhbHVlVGFnR1BS
LCB2YWx1ZVBheWxvYWRHUFIpKTsKLSAgICAgICAgaXNEb25lLmxpbmsoJm1faml0KTsKLSAgICAK
LSAgICAgICAgbm9SZXN1bHQobm9kZSk7CisgICAgICAgIGNvbXBpbGVOb3RpZnlXcml0ZShub2Rl
KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDE4MjA2OSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQwMTQsMjYgKzQwMTQsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlKE5vZGUqIG5vZGUpCiAgICAgfQogCiAgICAgY2FzZSBOb3RpZnlXcml0ZTogewotICAgICAg
ICBWYXJpYWJsZVdhdGNocG9pbnRTZXQqIHNldCA9IG5vZGUtPnZhcmlhYmxlV2F0Y2hwb2ludFNl
dCgpOwotICAgIAotICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLT5jaGls
ZDEoKSk7Ci0gICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOwotICAgIAotICAg
ICAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKLSAgICAgICAgR1BSUmVnIHRlbXBHUFIgPSB0
ZW1wLmdwcigpOwotICAgIAotICAgICAgICBtX2ppdC5sb2FkOChzZXQtPmFkZHJlc3NPZlN0YXRl
KCksIHRlbXBHUFIpOwotICAgIAotICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBpc0RvbmUgPQot
ICAgICAgICAgICAgbV9qaXQuYnJhbmNoMzIoSklUQ29tcGlsZXI6OkVxdWFsLCB0ZW1wR1BSLCBU
cnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpOwotICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBz
bG93Q2FzZSA9IG1faml0LmJyYW5jaDY0KEpJVENvbXBpbGVyOjpOb3RFcXVhbCwKLSAgICAgICAg
ICAgIEpJVENvbXBpbGVyOjpBYnNvbHV0ZUFkZHJlc3Moc2V0LT5hZGRyZXNzT2ZJbmZlcnJlZFZh
bHVlKCkpLCB2YWx1ZUdQUik7Ci0gICAgICAgIGlzRG9uZS5saW5rKCZtX2ppdCk7Ci0gICAgCi0g
ICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAotICAgICAgICAgICAgc2xvd1BhdGhDYWxsKHNs
b3dDYXNlLCB0aGlzLCBvcGVyYXRpb25Ob3RpZnlXcml0ZSwgTm9SZXN1bHQsIHNldCwgdmFsdWVH
UFIpKTsKLQotICAgICAgICBub1Jlc3VsdChub2RlKTsKKyAgICAgICAgY29tcGlsZU5vdGlmeVdy
aXRlKG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAxODIwNjkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDM2NSw4ICs0MzY1LDEzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVOZXdGdW5jdGlvbigKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBzY29wZSh0aGlzLCBu
b2RlLT5jaGlsZDEoKSk7CiAgICAgR1BSUmVnIHNjb3BlR1BSID0gc2NvcGUuZ3ByKCk7CiAgICAg
Zmx1c2hSZWdpc3RlcnMoKTsKLSAgICBjYWxsT3BlcmF0aW9uKAotICAgICAgICBvcGVyYXRpb25O
ZXdGdW5jdGlvbiwgcmVzdWx0R1BSLCBzY29wZUdQUiwgbm9kZS0+Y2FzdE9wZXJhbmQ8RnVuY3Rp
b25FeGVjdXRhYmxlKj4oKSk7CisgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlID0g
bm9kZS0+Y2FzdE9wZXJhbmQ8RnVuY3Rpb25FeGVjdXRhYmxlKj4oKTsKKyAgICBKX0pJVE9wZXJh
dGlvbl9FSnNjQyBmdW5jdGlvbjsKKyAgICBpZiAoZXhlY3V0YWJsZS0+ZnVuY3Rpb25SZWFsbG9j
YXRpb25XYXRjaHBvaW50U2V0KCkuaXNTdGlsbFZhbGlkKCkpCisgICAgICAgIGZ1bmN0aW9uID0g
b3BlcmF0aW9uTmV3RnVuY3Rpb247CisgICAgZWxzZQorICAgICAgICBmdW5jdGlvbiA9IG9wZXJh
dGlvbk5ld0Z1bmN0aW9uV2l0aEludmFsaWRhdGVkUmVhbGxvY2F0aW9uV2F0Y2hwb2ludDsKKyAg
ICBjYWxsT3BlcmF0aW9uKGZ1bmN0aW9uLCByZXN1bHRHUFIsIHNjb3BlR1BSLCBleGVjdXRhYmxl
KTsKICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CiB9CiAKQEAgLTQ3MTIsNiArNDcx
NywyMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ3JlYXRlQ2xvbmVkCiAgICAgY2Vs
bFJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOwogfQogCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlTm90aWZ5V3JpdGUoTm9kZSogbm9kZSkKK3sKKyAgICBXYXRjaHBvaW50U2V0KiBzZXQgPSBu
b2RlLT53YXRjaHBvaW50U2V0KCk7CisgICAgCisgICAgSklUQ29tcGlsZXI6Okp1bXAgc2xvd0Nh
c2UgPSBtX2ppdC5icmFuY2g4KAorICAgICAgICBKSVRDb21waWxlcjo6Tm90RXF1YWwsCisgICAg
ICAgIEpJVENvbXBpbGVyOjpBYnNvbHV0ZUFkZHJlc3Moc2V0LT5hZGRyZXNzT2ZTdGF0ZSgpKSwK
KyAgICAgICAgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKTsKKyAgICAKKyAgICBhZGRTbG93
UGF0aEdlbmVyYXRvcigKKyAgICAgICAgc2xvd1BhdGhDYWxsKHNsb3dDYXNlLCB0aGlzLCBvcGVy
YXRpb25Ob3RpZnlXcml0ZSwgTm9SZXN1bHQsIHNldCkpOworICAgIAorICAgIG5vUmVzdWx0KG5v
ZGUpOworfQorCiBib29sIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUmVnRXhwRXhlYyhOb2RlKiBu
b2RlKQogewogICAgIHVuc2lnbmVkIGJyYW5jaEluZGV4SW5CbG9jayA9IGRldGVjdFBlZXBIb2xl
QnJhbmNoKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVC5oCShyZXZpc2lvbiAxODIwNjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTE0NjYsNiArMTQ2NiwxMiBA
QCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsKG9wZXJhdGlvbik7CiAgICAgfQog
CisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0pJVE9wZXJhdGlvbl9FV3Mg
b3BlcmF0aW9uLCBXYXRjaHBvaW50U2V0KiB3YXRjaHBvaW50U2V0KQorICAgIHsKKyAgICAgICAg
bV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW1QdHIod2F0Y2hwb2lu
dFNldCkpOworICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbChvcGVyYXRpb24pOworICAgIH0KKwog
ICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oRF9KSVRPcGVyYXRpb25fRUogb3Bl
cmF0aW9uLCBGUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSkKICAgICB7CiAgICAgICAgIG1faml0
LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxKTsKQEAgLTIyMTMsNiArMjIxOSw3IEBA
IHB1YmxpYzoKICAgICB2b2lkIGNvbXBpbGVQdXRUb0FyZ3VtZW50cyhOb2RlKik7CiAgICAgdm9p
ZCBjb21waWxlQ3JlYXRlU2NvcGVkQXJndW1lbnRzKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVD
cmVhdGVDbG9uZWRBcmd1bWVudHMoTm9kZSopOworICAgIHZvaWQgY29tcGlsZU5vdGlmeVdyaXRl
KE5vZGUqKTsKICAgICBib29sIGNvbXBpbGVSZWdFeHBFeGVjKE5vZGUqKTsKICAgICAKICAgICBK
SVRDb21waWxlcjo6SnVtcCBicmFuY2hJc0NlbGwoSlNWYWx1ZVJlZ3MpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhh
c2UuY3BwCShyZXZpc2lvbiAxODIwNjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3
IEBACiAjaW5jbHVkZSAiREZHQ2xvYmJlcml6ZS5oIgogI2luY2x1ZGUgIkRGR0dyYXBoLmgiCiAj
aW5jbHVkZSAiREZHUGhhc2UuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAKIG5hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExJbnRyaW5zaWNSZXBvc2l0b3J5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExJbnRyaW5zaWNSZXBvc2l0b3J5LmgJKHJldmlzaW9uIDE4MjA2OSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW50cmluc2ljUmVwb3NpdG9yeS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMDYsNiArMTA2LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBG
VEwgewogICAgIG1hY3JvKFZfSklUT3BlcmF0aW9uX0VDLCBmdW5jdGlvblR5cGUodm9pZFR5cGUs
IGludFB0ciwgaW50UHRyKSkgXAogICAgIG1hY3JvKFZfSklUT3BlcmF0aW9uX0VDYiwgZnVuY3Rp
b25UeXBlKHZvaWRUeXBlLCBpbnRQdHIsIGludFB0cikpIFwKICAgICBtYWNybyhWX0pJVE9wZXJh
dGlvbl9FVndzSiwgZnVuY3Rpb25UeXBlKHZvaWRUeXBlLCBpbnRQdHIsIGludFB0ciwgaW50NjQp
KSBcCisgICAgbWFjcm8oVl9KSVRPcGVyYXRpb25fRVdzLCBmdW5jdGlvblR5cGUodm9pZFR5cGUs
IGludFB0ciwgaW50UHRyKSkgXAogICAgIG1hY3JvKFZfSklUT3BlcmF0aW9uX0VaSlpaWiwgZnVu
Y3Rpb25UeXBlKHZvaWRUeXBlLCBpbnRQdHIsIGludDMyLCBpbnQ2NCwgaW50MzIsIGludDMyLCBp
bnQzMikpIFwKICAgICBtYWNybyhWX0pJVE9wZXJhdGlvbl9KLCBmdW5jdGlvblR5cGUodm9pZFR5
cGUsIGludDY0KSkgXAogICAgIG1hY3JvKFZfSklUT3BlcmF0aW9uX1osIGZ1bmN0aW9uVHlwZSh2
b2lkVHlwZSwgaW50MzIpKSBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExv
d2VyREZHVG9MTFZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTExvd2VyREZHVG9MTFZNLmNwcAkocmV2aXNpb24gMTgyMDY5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3
ODMsMjkgKzM3ODMsMTkgQEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lkIGNvbXBpbGVOb3RpZnlX
cml0ZSgpCiAgICAgewotICAgICAgICBWYXJpYWJsZVdhdGNocG9pbnRTZXQqIHNldCA9IG1fbm9k
ZS0+dmFyaWFibGVXYXRjaHBvaW50U2V0KCk7Ci0gICAgICAgIAotICAgICAgICBMVmFsdWUgdmFs
dWUgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBXYXRjaHBvaW50U2V0
KiBzZXQgPSBtX25vZGUtPndhdGNocG9pbnRTZXQoKTsKICAgICAgICAgCiAgICAgICAgIExCYXNp
Y0Jsb2NrIGlzTm90SW52YWxpZGF0ZWQgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIk5vdGlmeVdy
aXRlIG5vdCBpbnZhbGlkYXRlZCBjYXNlIikpOwotICAgICAgICBMQmFzaWNCbG9jayBub3RpZnlT
bG93ID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJOb3RpZnlXcml0ZSBub3RpZnkgc2xvdyBjYXNl
IikpOwogICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1f
b3V0LCAoIk5vdGlmeVdyaXRlIGNvbnRpbnVhdGlvbiIpKTsKICAgICAgICAgCiAgICAgICAgIExW
YWx1ZSBzdGF0ZSA9IG1fb3V0LmxvYWQ4KG1fb3V0LmFic29sdXRlKHNldC0+YWRkcmVzc09mU3Rh
dGUoKSkpOwotICAgICAgICAKICAgICAgICAgbV9vdXQuYnJhbmNoKAogICAgICAgICAgICAgbV9v
dXQuZXF1YWwoc3RhdGUsIG1fb3V0LmNvbnN0SW50OChJc0ludmFsaWRhdGVkKSksCiAgICAgICAg
ICAgICB1c3VhbGx5KGNvbnRpbnVhdGlvbiksIHJhcmVseShpc05vdEludmFsaWRhdGVkKSk7CiAg
ICAgICAgIAotICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGlz
Tm90SW52YWxpZGF0ZWQsIG5vdGlmeVNsb3cpOwotCi0gICAgICAgIG1fb3V0LmJyYW5jaCgKLSAg
ICAgICAgICAgIG1fb3V0LmVxdWFsKHZhbHVlLCBtX291dC5sb2FkNjQobV9vdXQuYWJzb2x1dGUo
c2V0LT5hZGRyZXNzT2ZJbmZlcnJlZFZhbHVlKCkpKSksCi0gICAgICAgICAgICB1bnN1cmUoY29u
dGludWF0aW9uKSwgdW5zdXJlKG5vdGlmeVNsb3cpKTsKLQotICAgICAgICBtX291dC5hcHBlbmRU
byhub3RpZnlTbG93LCBjb250aW51YXRpb24pOworICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4
dCA9IG1fb3V0LmFwcGVuZFRvKGlzTm90SW52YWxpZGF0ZWQsIGNvbnRpbnVhdGlvbik7CiAKLSAg
ICAgICAgdm1DYWxsKG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25Ob3RpZnlXcml0ZSksIG1fY2Fs
bEZyYW1lLCBtX291dC5jb25zdEludFB0cihzZXQpLCB2YWx1ZSk7CisgICAgICAgIHZtQ2FsbCht
X291dC5vcGVyYXRpb24ob3BlcmF0aW9uTm90aWZ5V3JpdGUpLCBtX2NhbGxGcmFtZSwgbV9vdXQu
Y29uc3RJbnRQdHIoc2V0KSk7CiAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKICAg
ICAgICAgCiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0
ZXIuY3BwCShyZXZpc2lvbiAxODIwNjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJw
cmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OSw2ICs4OSw0NyBAQCB1
c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1lc3BhY2UgSlNDIHsKIAorU3RyaW5nIFN0YWNrRnJh
bWU6OmZyaWVuZGx5U291cmNlVVJMKCkgY29uc3QKK3sKKyAgICBTdHJpbmcgdHJhY2VMaW5lOwor
ICAgIAorICAgIHN3aXRjaCAoY29kZVR5cGUpIHsKKyAgICBjYXNlIFN0YWNrRnJhbWVFdmFsQ29k
ZToKKyAgICBjYXNlIFN0YWNrRnJhbWVGdW5jdGlvbkNvZGU6CisgICAgY2FzZSBTdGFja0ZyYW1l
R2xvYmFsQ29kZToKKyAgICAgICAgaWYgKCFzb3VyY2VVUkwuaXNFbXB0eSgpKQorICAgICAgICAg
ICAgdHJhY2VMaW5lID0gc291cmNlVVJMLmltcGwoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBTdGFja0ZyYW1lTmF0aXZlQ29kZToKKyAgICAgICAgdHJhY2VMaW5lID0gIltuYXRpdmUgY29k
ZV0iOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIHRyYWNlTGluZS5pc051bGwo
KSA/IGVtcHR5U3RyaW5nKCkgOiB0cmFjZUxpbmU7Cit9CisKK1N0cmluZyBTdGFja0ZyYW1lOjpm
cmllbmRseUZ1bmN0aW9uTmFtZShDYWxsRnJhbWUqIGNhbGxGcmFtZSkgY29uc3QKK3sKKyAgICBT
dHJpbmcgdHJhY2VMaW5lOworICAgIEpTT2JqZWN0KiBzdGFja0ZyYW1lQ2FsbGVlID0gY2FsbGVl
LmdldCgpOworCisgICAgc3dpdGNoIChjb2RlVHlwZSkgeworICAgIGNhc2UgU3RhY2tGcmFtZUV2
YWxDb2RlOgorICAgICAgICB0cmFjZUxpbmUgPSAiZXZhbCBjb2RlIjsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBTdGFja0ZyYW1lTmF0aXZlQ29kZToKKyAgICAgICAgaWYgKGNhbGxlZSkKKyAg
ICAgICAgICAgIHRyYWNlTGluZSA9IGdldENhbGN1bGF0ZWREaXNwbGF5TmFtZShjYWxsRnJhbWUs
IHN0YWNrRnJhbWVDYWxsZWUpLmltcGwoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTdGFj
a0ZyYW1lRnVuY3Rpb25Db2RlOgorICAgICAgICB0cmFjZUxpbmUgPSBnZXRDYWxjdWxhdGVkRGlz
cGxheU5hbWUoY2FsbEZyYW1lLCBzdGFja0ZyYW1lQ2FsbGVlKS5pbXBsKCk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgU3RhY2tGcmFtZUdsb2JhbENvZGU6CisgICAgICAgIHRyYWNlTGluZSA9
ICJnbG9iYWwgY29kZSI7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gdHJhY2VM
aW5lLmlzTnVsbCgpID8gZW1wdHlTdHJpbmcoKSA6IHRyYWNlTGluZTsKK30KKwogSlNWYWx1ZSBl
dmFsKENhbGxGcmFtZSogY2FsbEZyYW1lKQogewogICAgIGlmICghY2FsbEZyYW1lLT5hcmd1bWVu
dENvdW50KCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJw
cmV0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIv
SW50ZXJwcmV0ZXIuaAkocmV2aXNpb24gMTgyMDY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ludGVycHJldGVyL0ludGVycHJldGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTkwLDQ1ICs5MCw4
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldDsKICAg
ICAgICAgU3RyaW5nIHNvdXJjZVVSTDsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgU3RyaW5n
IHRvU3RyaW5nKENhbGxGcmFtZSopOwotICAgICAgICBTdHJpbmcgZnJpZW5kbHlTb3VyY2VVUkwo
KSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICBTdHJpbmcgdHJhY2VMaW5lOwotCi0gICAg
ICAgICAgICBzd2l0Y2ggKGNvZGVUeXBlKSB7Ci0gICAgICAgICAgICBjYXNlIFN0YWNrRnJhbWVF
dmFsQ29kZToKLSAgICAgICAgICAgIGNhc2UgU3RhY2tGcmFtZUZ1bmN0aW9uQ29kZToKLSAgICAg
ICAgICAgIGNhc2UgU3RhY2tGcmFtZUdsb2JhbENvZGU6Ci0gICAgICAgICAgICAgICAgaWYgKCFz
b3VyY2VVUkwuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgICAgICB0cmFjZUxpbmUgPSBzb3Vy
Y2VVUkwuaW1wbCgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBT
dGFja0ZyYW1lTmF0aXZlQ29kZToKLSAgICAgICAgICAgICAgICB0cmFjZUxpbmUgPSAiW25hdGl2
ZSBjb2RlXSI7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICByZXR1cm4gdHJhY2VMaW5lLmlzTnVsbCgpID8gZW1wdHlTdHJpbmcoKSA6IHRyYWNlTGlu
ZTsKLSAgICAgICAgfQotICAgICAgICBTdHJpbmcgZnJpZW5kbHlGdW5jdGlvbk5hbWUoQ2FsbEZy
YW1lKiBjYWxsRnJhbWUpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIFN0cmluZyB0cmFj
ZUxpbmU7Ci0gICAgICAgICAgICBKU09iamVjdCogc3RhY2tGcmFtZUNhbGxlZSA9IGNhbGxlZS5n
ZXQoKTsKLQotICAgICAgICAgICAgc3dpdGNoIChjb2RlVHlwZSkgewotICAgICAgICAgICAgY2Fz
ZSBTdGFja0ZyYW1lRXZhbENvZGU6Ci0gICAgICAgICAgICAgICAgdHJhY2VMaW5lID0gImV2YWwg
Y29kZSI7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFN0YWNrRnJh
bWVOYXRpdmVDb2RlOgotICAgICAgICAgICAgICAgIGlmIChjYWxsZWUpCi0gICAgICAgICAgICAg
ICAgICAgIHRyYWNlTGluZSA9IGdldENhbGN1bGF0ZWREaXNwbGF5TmFtZShjYWxsRnJhbWUsIHN0
YWNrRnJhbWVDYWxsZWUpLmltcGwoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIGNhc2UgU3RhY2tGcmFtZUZ1bmN0aW9uQ29kZToKLSAgICAgICAgICAgICAgICB0cmFjZUxp
bmUgPSBnZXRDYWxjdWxhdGVkRGlzcGxheU5hbWUoY2FsbEZyYW1lLCBzdGFja0ZyYW1lQ2FsbGVl
KS5pbXBsKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFN0YWNr
RnJhbWVHbG9iYWxDb2RlOgotICAgICAgICAgICAgICAgIHRyYWNlTGluZSA9ICJnbG9iYWwgY29k
ZSI7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBy
ZXR1cm4gdHJhY2VMaW5lLmlzTnVsbCgpID8gZW1wdHlTdHJpbmcoKSA6IHRyYWNlTGluZTsKLSAg
ICAgICAgfQorICAgICAgICBTdHJpbmcgZnJpZW5kbHlTb3VyY2VVUkwoKSBjb25zdDsKKyAgICAg
ICAgU3RyaW5nIGZyaWVuZGx5RnVuY3Rpb25OYW1lKENhbGxGcmFtZSopIGNvbnN0OwogICAgICAg
ICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGNvbXB1dGVMaW5lQW5kQ29sdW1uKHVuc2lnbmVkJiBs
aW5lLCB1bnNpZ25lZCYgY29sdW1uKTsKIAogICAgIHByaXZhdGU6CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVQuY3BwCShyZXZpc2lvbiAxODIwNjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNSw2ICsxMDUsMTQgQEAgdm9pZCBK
SVQ6OmVtaXRFbnRlck9wdGltaXphdGlvbkNoZWNrKCkKIH0KICNlbmRpZgogCit2b2lkIEpJVDo6
ZW1pdE5vdGlmeVdyaXRlKFdhdGNocG9pbnRTZXQqIHNldCkKK3sKKyAgICBpZiAoIXNldCB8fCBz
ZXQtPnN0YXRlKCkgPT0gSXNJbnZhbGlkYXRlZCkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAg
IGFkZFNsb3dDYXNlKGJyYW5jaDgoTm90RXF1YWwsIEFic29sdXRlQWRkcmVzcyhzZXQtPmFkZHJl
c3NPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKK30KKwogdm9pZCBK
SVQ6OmFzc2VydFN0YWNrUG9pbnRlck9mZnNldCgpCiB7CiAgICAgaWYgKEFTU0VSVF9ESVNBQkxF
RCkKQEAgLTE4OSw3ICsxOTcsNiBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygp
CiAgICAgICAgIERFRklORV9TTE9XX09QKGlzX29iamVjdF9vcl9udWxsKQogICAgICAgICBERUZJ
TkVfU0xPV19PUCh0eXBlb2YpCiAKLSAgICAgICAgREVGSU5FX09QKG9wX3RvdWNoX2VudHJ5KQog
ICAgICAgICBERUZJTkVfT1Aob3BfYWRkKQogICAgICAgICBERUZJTkVfT1Aob3BfYml0YW5kKQog
ICAgICAgICBERUZJTkVfT1Aob3BfYml0b3IpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJ
KHJldmlzaW9uIDE4MjA2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHdv
cmtpbmcgY29weSkKQEAgLTQ1Nyw3ICs0NTcsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
CiAgICAgICAgIHZvaWQgYXNzZXJ0U3RhY2tQb2ludGVyT2Zmc2V0KCk7CiAKLSAgICAgICAgdm9p
ZCBlbWl0X29wX3RvdWNoX2VudHJ5KEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9v
cF9hZGQoSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2JpdGFuZChJbnN0cnVj
dGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfYml0b3IoSW5zdHJ1Y3Rpb24qKTsKQEAgLTY0
MCwxMyArNjM5LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdEdldEdsb2Jh
bFZhcih1aW50cHRyX3Qgb3BlcmFuZCk7CiAgICAgICAgIHZvaWQgZW1pdEdldENsb3N1cmVWYXIo
aW50IHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCk7CiAgICAgICAgIHZvaWQgZW1pdFB1dEdsb2Jh
bFByb3BlcnR5KHVpbnRwdHJfdCogb3BlcmFuZFNsb3QsIGludCB2YWx1ZSk7Ci0jaWYgVVNFKEpT
VkFMVUU2NCkKLSAgICAgICAgdm9pZCBlbWl0Tm90aWZ5V3JpdGUoUmVnaXN0ZXJJRCB2YWx1ZSwg
UmVnaXN0ZXJJRCBzY3JhdGNoLCBWYXJpYWJsZVdhdGNocG9pbnRTZXQqKTsKLSNlbHNlCi0gICAg
ICAgIHZvaWQgZW1pdE5vdGlmeVdyaXRlKFJlZ2lzdGVySUQgdGFnLCBSZWdpc3RlcklEIHBheWxv
YWQsIFJlZ2lzdGVySUQgc2NyYXRjaCwgVmFyaWFibGVXYXRjaHBvaW50U2V0Kik7Ci0jZW5kaWYK
LSAgICAgICAgdm9pZCBlbWl0UHV0R2xvYmFsVmFyKHVpbnRwdHJfdCBvcGVyYW5kLCBpbnQgdmFs
dWUsIFZhcmlhYmxlV2F0Y2hwb2ludFNldCopOwotICAgICAgICB2b2lkIGVtaXRQdXRDbG9zdXJl
VmFyKGludCBzY29wZSwgdWludHB0cl90IG9wZXJhbmQsIGludCB2YWx1ZSwgVmFyaWFibGVXYXRj
aHBvaW50U2V0Kik7CisgICAgICAgIHZvaWQgZW1pdE5vdGlmeVdyaXRlKFdhdGNocG9pbnRTZXQq
KTsKKyAgICAgICAgdm9pZCBlbWl0UHV0R2xvYmFsVmFyKHVpbnRwdHJfdCBvcGVyYW5kLCBpbnQg
dmFsdWUsIFdhdGNocG9pbnRTZXQqKTsKKyAgICAgICAgdm9pZCBlbWl0UHV0Q2xvc3VyZVZhcihp
bnQgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kLCBpbnQgdmFsdWUsIFdhdGNocG9pbnRTZXQqKTsK
IAogICAgICAgICB2b2lkIGVtaXRJbml0UmVnaXN0ZXIoaW50IGRzdCk7CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkocmV2aXNpb24gMTgyMDY5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtODc5LDE1ICs4NzksNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdG9fbnVtYmVyKEluc3Ry
dWN0CiAKICNlbmRpZiAvLyBVU0UoSlNWQUxVRTY0KQogCi12b2lkIEpJVDo6ZW1pdF9vcF90b3Vj
aF9lbnRyeShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGlmIChtX2Nv
ZGVCbG9jay0+c3ltYm9sVGFibGUoKS0+bV9mdW5jdGlvbkVudGVyZWRPbmNlLmhhc0JlZW5JbnZh
bGlkYXRlZCgpKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgSklUU2xvd1BhdGhDYWxsIHNs
b3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF90b3VjaF9lbnRy
eSk7Ci0gICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKLX0KLQogdm9pZCBKSVQ6OmVtaXRfb3BfbG9v
cF9oaW50KEluc3RydWN0aW9uKikKIHsKICAgICAvLyBFbWl0IHRoZSBKSVQgb3B0aW1pemF0aW9u
IGNoZWNrOiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25z
LmNwcAkocmV2aXNpb24gMTgyMDY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRP
cGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTMzLDYgKzkzMywxNCBAQCBFbmNvZGVk
SlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5lCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShKU0Z1bmN0aW9uOjpjcmVhdGUodm0sIHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJs
ZSo+KGZ1bmN0aW9uRXhlY3V0YWJsZSksIHNjb3BlKSk7CiB9CiAKK0VuY29kZWRKU1ZhbHVlIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3RnVuY3Rpb25XaXRoSW52YWxpZGF0ZWRSZWFsbG9jYXRp
b25XYXRjaHBvaW50KEV4ZWNTdGF0ZSogZXhlYywgSlNTY29wZSogc2NvcGUsIEpTQ2VsbCogZnVu
Y3Rpb25FeGVjdXRhYmxlKQoreworICAgIEFTU0VSVChmdW5jdGlvbkV4ZWN1dGFibGUtPmluaGVy
aXRzKEZ1bmN0aW9uRXhlY3V0YWJsZTo6aW5mbygpKSk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShKU0Z1bmN0aW9uOjpjcmVhdGVXaXRoSW52YWxpZGF0ZWRSZWFs
bG9jYXRpb25XYXRjaHBvaW50KHZtLCBzdGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihm
dW5jdGlvbkV4ZWN1dGFibGUpLCBzY29wZSkpOworfQorCiBKU0NlbGwqIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uTmV3T2JqZWN0KEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUp
CiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CkBAIC0xNzAzLDggKzE3MTEsOCBAQCB2b2lk
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0VG9TY29wZShFCiAgICAgaWYgKG1vZGVBbmRUeXBl
LnR5cGUoKSA9PSBMb2NhbENsb3N1cmVWYXIpIHsKICAgICAgICAgSlNMZXhpY2FsRW52aXJvbm1l
bnQqIGVudmlyb25tZW50ID0ganNDYXN0PEpTTGV4aWNhbEVudmlyb25tZW50Kj4oc2NvcGUpOwog
ICAgICAgICBlbnZpcm9ubWVudC0+dmFyaWFibGVBdChTY29wZU9mZnNldChwY1s2XS51Lm9wZXJh
bmQpKS5zZXQodm0sIGVudmlyb25tZW50LCB2YWx1ZSk7Ci0gICAgICAgIGlmIChWYXJpYWJsZVdh
dGNocG9pbnRTZXQqIHNldCA9IHBjWzVdLnUud2F0Y2hwb2ludFNldCkKLSAgICAgICAgICAgIHNl
dC0+bm90aWZ5V3JpdGUodm0sIHZhbHVlLCAiRXhlY3V0ZWQgb3BfcHV0X3Njb3BlPExvY2FsQ2xv
c3VyZVZhcj4iKTsKKyAgICAgICAgaWYgKFdhdGNocG9pbnRTZXQqIHNldCA9IHBjWzVdLnUud2F0
Y2hwb2ludFNldCkKKyAgICAgICAgICAgIHNldC0+dG91Y2goIkV4ZWN1dGVkIG9wX3B1dF9zY29w
ZTxMb2NhbENsb3N1cmVWYXI+Iik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaWYgKG1v
ZGVBbmRUeXBlLm1vZGUoKSA9PSBUaHJvd0lmTm90Rm91bmQgJiYgIXNjb3BlLT5oYXNQcm9wZXJ0
eShleGVjLCBpZGVudCkpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bl
cmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bl
cmF0aW9ucy5oCShyZXZpc2lvbiAxODIwNjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVE9wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtODYsNiArODYsNyBAQCBleHRlcm4g
IkMiIHsKICAgICBWOiB2b2lkCiAgICAgVm06IFZNKgogICAgIFZ3czogVmFyaWFibGVXYXRjaHBv
aW50U2V0KgorICAgIFdzOiBXYXRjaHBvaW50U2V0KgogICAgIFo6IGludDMyX3QKICovCiAKQEAg
LTE5Miw2ICsxOTMsNyBAQCB0eXBlZGVmIHZvaWQgSklUX09QRVJBVElPTiAoKlZfSklUT3BlcmF0
CiB0eXBlZGVmIHZvaWQgSklUX09QRVJBVElPTiAoKlZfSklUT3BlcmF0aW9uX0VQWkopKEV4ZWNT
dGF0ZSosIHZvaWQqLCBpbnQzMl90LCBFbmNvZGVkSlNWYWx1ZSk7CiB0eXBlZGVmIHZvaWQgSklU
X09QRVJBVElPTiAoKlZfSklUT3BlcmF0aW9uX0VTc2lKSkkpKEV4ZWNTdGF0ZSosIFN0cnVjdHVy
ZVN0dWJJbmZvKiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBTdHJpbmdJbXBsKik7
CiB0eXBlZGVmIHZvaWQgSklUX09QRVJBVElPTiAoKlZfSklUT3BlcmF0aW9uX0VWd3NKKShFeGVj
U3RhdGUqLCBWYXJpYWJsZVdhdGNocG9pbnRTZXQqLCBFbmNvZGVkSlNWYWx1ZSk7Cit0eXBlZGVm
IHZvaWQgSklUX09QRVJBVElPTiAoKlZfSklUT3BlcmF0aW9uX0VXcykoRXhlY1N0YXRlKiwgV2F0
Y2hwb2ludFNldCopOwogdHlwZWRlZiB2b2lkIEpJVF9PUEVSQVRJT04gKCpWX0pJVE9wZXJhdGlv
bl9FWikoRXhlY1N0YXRlKiwgaW50MzJfdCk7CiB0eXBlZGVmIHZvaWQgSklUX09QRVJBVElPTiAo
KlZfSklUT3BlcmF0aW9uX0VaSikoRXhlY1N0YXRlKiwgaW50MzJfdCwgRW5jb2RlZEpTVmFsdWUp
OwogdHlwZWRlZiB2b2lkIEpJVF9PUEVSQVRJT04gKCpWX0pJVE9wZXJhdGlvbl9FWkpaWlopKEV4
ZWNTdGF0ZSosIGludDMyX3QsIEVuY29kZWRKU1ZhbHVlLCBpbnQzMl90LCBpbnQzMl90LCBpbnQz
Ml90KTsKQEAgLTI3OCw2ICsyODAsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvbk5lCiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0FycmF5
QnVmZmVyV2l0aFByb2ZpbGUoRXhlY1N0YXRlKiwgQXJyYXlBbGxvY2F0aW9uUHJvZmlsZSosIGNv
bnN0IEpTVmFsdWUqIHZhbHVlcywgaW50MzJfdCBzaXplKSBXVEZfSU5URVJOQUw7CiBFbmNvZGVk
SlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemVBbmRQcm9maWxl
KEV4ZWNTdGF0ZSosIEFycmF5QWxsb2NhdGlvblByb2ZpbGUqLCBFbmNvZGVkSlNWYWx1ZSBzaXpl
KSBXVEZfSU5URVJOQUw7CiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5l
d0Z1bmN0aW9uKEV4ZWNTdGF0ZSosIEpTU2NvcGUqLCBKU0NlbGwqKSBXVEZfSU5URVJOQUw7CitF
bmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0Z1bmN0aW9uV2l0aEludmFs
aWRhdGVkUmVhbGxvY2F0aW9uV2F0Y2hwb2ludChFeGVjU3RhdGUqLCBKU1Njb3BlKiwgSlNDZWxs
KikgV1RGX0lOVEVSTkFMOwogSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld09iamVj
dChFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqKSBXVEZfSU5URVJOQUw7CiBFbmNvZGVkSlNWYWx1ZSBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1JlZ2V4cChFeGVjU3RhdGUqLCB2b2lkKikgV1RGX0lO
VEVSTkFMOwogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkhhbmRsZVdhdGNoZG9nVGltZXIo
RXhlY1N0YXRlKikgV1RGX0lOVEVSTkFMOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCShyZXZpc2lvbiAxODIwNjkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC03NTAsMjcgKzc1MCwxMCBAQCB2b2lkIEpJVDo6ZW1pdFB1dEds
b2JhbFByb3BlcnR5KHVpbnRwdHJfCiAgICAgc3RvcmUzMihyZWdUMiwgQmFzZUluZGV4KHJlZ1Qw
LCByZWdUMSwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2Yo
RW5jb2RlZEpTVmFsdWUpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3Is
IGFzQml0cy5wYXlsb2FkKSkpOwogfQogCi12b2lkIEpJVDo6ZW1pdE5vdGlmeVdyaXRlKFJlZ2lz
dGVySUQgdGFnLCBSZWdpc3RlcklEIHBheWxvYWQsIFJlZ2lzdGVySUQgc2NyYXRjaCwgVmFyaWFi
bGVXYXRjaHBvaW50U2V0KiBzZXQpCi17Ci0gICAgaWYgKCFzZXQgfHwgc2V0LT5zdGF0ZSgpID09
IElzSW52YWxpZGF0ZWQpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBsb2FkOChzZXQtPmFk
ZHJlc3NPZlN0YXRlKCksIHNjcmF0Y2gpOwotICAgIEp1bXAgaXNEb25lID0gYnJhbmNoMzIoRXF1
YWwsIHNjcmF0Y2gsIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSk7Ci0KLSAgICBKdW1wTGlz
dCBub3RpZnlTbG93ID0gYnJhbmNoMzIoCi0gICAgICAgIE5vdEVxdWFsLCBBYnNvbHV0ZUFkZHJl
c3Moc2V0LT5hZGRyZXNzT2ZJbmZlcnJlZFZhbHVlKCktPnBheWxvYWRQb2ludGVyKCkpLCBwYXls
b2FkKTsKLSAgICBub3RpZnlTbG93LmFwcGVuZChicmFuY2gzMigKLSAgICAgICAgTm90RXF1YWws
IEFic29sdXRlQWRkcmVzcyhzZXQtPmFkZHJlc3NPZkluZmVycmVkVmFsdWUoKS0+dGFnUG9pbnRl
cigpKSwgdGFnKSk7Ci0gICAgYWRkU2xvd0Nhc2Uobm90aWZ5U2xvdyk7Ci0KLSAgICBpc0RvbmUu
bGluayh0aGlzKTsKLX0KLQogdm9pZCBKSVQ6OmVtaXRQdXRHbG9iYWxWYXIodWludHB0cl90IG9w
ZXJhbmQsIGludCB2YWx1ZSwgVmFyaWFibGVXYXRjaHBvaW50U2V0KiBzZXQpCiB7CiAgICAgZW1p
dExvYWQodmFsdWUsIHJlZ1QxLCByZWdUMCk7Ci0gICAgZW1pdE5vdGlmeVdyaXRlKHJlZ1QxLCBy
ZWdUMCwgcmVnVDIsIHNldCk7CisgICAgZW1pdE5vdGlmeVdyaXRlKHNldCk7CiAgICAgc3RvcmUz
MihyZWdUMSwgcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4ob3BlcmFuZCkgKyBPQkpFQ1RfT0ZGU0VU
T0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpOwogICAgIHN0b3JlMzIocmVn
VDAsIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG9wZXJhbmQpICsgT0JKRUNUX09GRlNFVE9GKEVu
Y29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSk7CiB9CkBAIC03NzksNyArNzYy
LDcgQEAgdm9pZCBKSVQ6OmVtaXRQdXRDbG9zdXJlVmFyKGludCBzY29wZSwgdQogewogICAgIGVt
aXRMb2FkKHZhbHVlLCByZWdUMywgcmVnVDIpOwogICAgIGVtaXRMb2FkKHNjb3BlLCByZWdUMSwg
cmVnVDApOwotICAgIGVtaXROb3RpZnlXcml0ZShyZWdUMywgcmVnVDIsIHJlZ1Q0LCBzZXQpOwor
ICAgIGVtaXROb3RpZnlXcml0ZShzZXQpOwogICAgIHN0b3JlMzIocmVnVDMsIEFkZHJlc3MocmVn
VDAsIEpTRW52aXJvbm1lbnRSZWNvcmQ6Om9mZnNldE9mVmFyaWFibGVzKCkgKyBvcGVyYW5kICog
c2l6ZW9mKFJlZ2lzdGVyKSArIFRhZ09mZnNldCkpOwogICAgIHN0b3JlMzIocmVnVDIsIEFkZHJl
c3MocmVnVDAsIEpTRW52aXJvbm1lbnRSZWNvcmQ6Om9mZnNldE9mVmFyaWFibGVzKCkgKyBvcGVy
YW5kICogc2l6ZW9mKFJlZ2lzdGVyKSArIFBheWxvYWRPZmZzZXQpKTsKIH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCShyZXZpc2lv
biAxODIwNjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzI4LDI5ICs3MjgsMTggQEAgdm9pZCBKSVQ6OmVtaXRQ
dXRHbG9iYWxQcm9wZXJ0eSh1aW50cHRyXwogICAgIHN0b3JlUHRyKHJlZ1QyLCBCYXNlSW5kZXgo
cmVnVDAsIHJlZ1QxLCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNp
emVvZihFbmNvZGVkSlNWYWx1ZSkpKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXROb3RpZnlXcml0ZShS
ZWdpc3RlcklEIHZhbHVlLCBSZWdpc3RlcklEIHNjcmF0Y2gsIFZhcmlhYmxlV2F0Y2hwb2ludFNl
dCogc2V0KQotewotICAgIGlmICghc2V0IHx8IHNldC0+c3RhdGUoKSA9PSBJc0ludmFsaWRhdGVk
KQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgbG9hZDgoc2V0LT5hZGRyZXNzT2ZTdGF0ZSgp
LCBzY3JhdGNoKTsKLSAgICBKdW1wIGlzRG9uZSA9IGJyYW5jaDMyKEVxdWFsLCBzY3JhdGNoLCBU
cnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDY0KE5v
dEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3Moc2V0LT5hZGRyZXNzT2ZJbmZlcnJlZFZhbHVlKCkpLCB2
YWx1ZSkpOwotICAgIGlzRG9uZS5saW5rKHRoaXMpOwotfQotCi12b2lkIEpJVDo6ZW1pdFB1dEds
b2JhbFZhcih1aW50cHRyX3Qgb3BlcmFuZCwgaW50IHZhbHVlLCBWYXJpYWJsZVdhdGNocG9pbnRT
ZXQqIHNldCkKK3ZvaWQgSklUOjplbWl0UHV0R2xvYmFsVmFyKHVpbnRwdHJfdCBvcGVyYW5kLCBp
bnQgdmFsdWUsIFdhdGNocG9pbnRTZXQqIHNldCkKIHsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgZW1pdE5vdGlmeVdyaXRlKHJlZ1QwLCByZWdUMSwgc2V0
KTsKKyAgICBlbWl0Tm90aWZ5V3JpdGUoc2V0KTsKICAgICBzdG9yZVB0cihyZWdUMCwgcmVpbnRl
cnByZXRfY2FzdDx2b2lkKj4ob3BlcmFuZCkpOwogfQogCi12b2lkIEpJVDo6ZW1pdFB1dENsb3N1
cmVWYXIoaW50IHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCwgaW50IHZhbHVlLCBWYXJpYWJsZVdh
dGNocG9pbnRTZXQqIHNldCkKK3ZvaWQgSklUOjplbWl0UHV0Q2xvc3VyZVZhcihpbnQgc2NvcGUs
IHVpbnRwdHJfdCBvcGVyYW5kLCBpbnQgdmFsdWUsIFdhdGNocG9pbnRTZXQqIHNldCkKIHsKICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMSk7CiAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihzY29wZSwgcmVnVDApOwotICAgIGVtaXROb3RpZnlXcml0ZShyZWdUMSwgcmVn
VDIsIHNldCk7CisgICAgZW1pdE5vdGlmeVdyaXRlKHNldCk7CiAgICAgc3RvcmVQdHIocmVnVDEs
IEFkZHJlc3MocmVnVDAsIEpTRW52aXJvbm1lbnRSZWNvcmQ6Om9mZnNldE9mVmFyaWFibGVzKCkg
KyBvcGVyYW5kICogc2l6ZW9mKFJlZ2lzdGVyKSkpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJKHJldmlzaW9uIDE4MjA2OSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEzODQsOCArMTM4NCwxMiBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93
X3BhdGhfcHV0X3RvX3NjCiAgICAgaWYgKG1vZGVBbmRUeXBlLnR5cGUoKSA9PSBMb2NhbENsb3N1
cmVWYXIpIHsKICAgICAgICAgSlNMZXhpY2FsRW52aXJvbm1lbnQqIGVudmlyb25tZW50ID0ganND
YXN0PEpTTGV4aWNhbEVudmlyb25tZW50Kj4oc2NvcGUpOwogICAgICAgICBlbnZpcm9ubWVudC0+
dmFyaWFibGVBdChTY29wZU9mZnNldChwY1s2XS51Lm9wZXJhbmQpKS5zZXQodm0sIGVudmlyb25t
ZW50LCB2YWx1ZSk7Ci0gICAgICAgIGlmIChWYXJpYWJsZVdhdGNocG9pbnRTZXQqIHNldCA9IHBj
WzVdLnUud2F0Y2hwb2ludFNldCkKLSAgICAgICAgICAgIHNldC0+bm90aWZ5V3JpdGUodm0sIHZh
bHVlLCAiRXhlY3V0ZWQgb3BfcHV0X3Njb3BlPExvY2FsQ2xvc3VyZVZhcj4iKTsKKyAgICAgICAg
CisgICAgICAgIC8vIEhhdmUgdG8gZG8gdGhpcyAqYWZ0ZXIqIHRoZSB3cml0ZSwgYmVjYXVzZSBp
ZiB0aGlzIHB1dHMgdGhlIHNldCBpbnRvIElzV2F0Y2hlZCwgdGhlbiB3ZSBuZWVkCisgICAgICAg
IC8vIHRvIGhhdmUgYWxyZWFkeSBjaGFuZ2VkIHRoZSB2YWx1ZSBvZiB0aGUgdmFyaWFibGUuIE90
aGVyd2lzZSB3ZSBtaWdodCB3YXRjaCBhbmQgY29uc3RhbnQtZm9sZAorICAgICAgICAvLyB0byB0
aGUgVW5kZWZpbmVkIHZhbHVlIGZyb20gYmVmb3JlIHRoZSBhc3NpZ25tZW50LgorICAgICAgICBp
ZiAoV2F0Y2hwb2ludFNldCogc2V0ID0gcGNbNV0udS53YXRjaHBvaW50U2V0KQorICAgICAgICAg
ICAgc2V0LT50b3VjaCgiRXhlY3V0ZWQgb3BfcHV0X3Njb3BlPExvY2FsQ2xvc3VyZVZhcj4iKTsK
ICAgICAgICAgTExJTlRfRU5EKCk7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQkocmV2
aXNpb24gMTgyMDY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50
ZXJwcmV0ZXIzMl82NC5hc20JKHdvcmtpbmcgY29weSkKQEAgLTgwNSwxNCArODA1LDYgQEAgX2xs
aW50X29wX21vdjoKICAgICBkaXNwYXRjaCgzKQogCiAKLW1hY3JvIG5vdGlmeVdyaXRlKHNldCwg
dmFsdWVUYWcsIHZhbHVlUGF5bG9hZCwgc2NyYXRjaCwgc2xvdykKLSAgICBsb2FkYiBWYXJpYWJs
ZVdhdGNocG9pbnRTZXQ6Om1fc3RhdGVbc2V0XSwgc2NyYXRjaAotICAgIGJpZXEgc2NyYXRjaCwg
SXNJbnZhbGlkYXRlZCwgLmRvbmUKLSAgICBiaW5lcSB2YWx1ZVBheWxvYWQsIFZhcmlhYmxlV2F0
Y2hwb2ludFNldDo6bV9pbmZlcnJlZFZhbHVlICsgUGF5bG9hZE9mZnNldFtzZXRdLCBzbG93Ci0g
ICAgYmluZXEgdmFsdWVUYWcsIFZhcmlhYmxlV2F0Y2hwb2ludFNldDo6bV9pbmZlcnJlZFZhbHVl
ICsgVGFnT2Zmc2V0W3NldF0sIHNsb3cKLS5kb25lOgotZW5kCi0KIF9sbGludF9vcF9ub3Q6CiAg
ICAgdHJhY2VFeGVjdXRpb24oKQogICAgIGxvYWRpIDhbUENdLCB0MApAQCAtMjA3NSwzOSArMjA2
NywzOSBAQCBfbGxpbnRfb3BfcmVzb2x2ZV9zY29wZToKICNyR2xvYmFsUHJvcGVydHk6CiAgICAg
YmluZXEgdDAsIEdsb2JhbFByb3BlcnR5LCAuckdsb2JhbFZhcgogICAgIGdldEdsb2JhbE9iamVj
dCgxKQotICAgIGRpc3BhdGNoKDcpCisgICAgZGlzcGF0Y2goNikKIAogLnJHbG9iYWxWYXI6CiAg
ICAgYmluZXEgdDAsIEdsb2JhbFZhciwgLnJDbG9zdXJlVmFyCiAgICAgZ2V0R2xvYmFsT2JqZWN0
KDEpCi0gICAgZGlzcGF0Y2goNykKKyAgICBkaXNwYXRjaCg2KQogCiAuckNsb3N1cmVWYXI6CiAg
ICAgYmluZXEgdDAsIENsb3N1cmVWYXIsIC5yR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzCiAgICAgcmVzb2x2ZVNjb3BlKCkKLSAgICBkaXNwYXRjaCg3KQorICAgIGRpc3BhdGNo
KDYpCiAKIC5yR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgogICAgIGJpbmVx
IHQwLCBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MsIC5yR2xvYmFsVmFyV2l0
aFZhckluamVjdGlvbkNoZWNrcwogICAgIHZhckluamVjdGlvbkNoZWNrKC5yRHluYW1pYykKICAg
ICBnZXRHbG9iYWxPYmplY3QoMSkKLSAgICBkaXNwYXRjaCg3KQorICAgIGRpc3BhdGNoKDYpCiAK
IC5yR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKICAgICBiaW5lcSB0MCwgR2xvYmFs
VmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgLnJDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNo
ZWNrcwogICAgIHZhckluamVjdGlvbkNoZWNrKC5yRHluYW1pYykKICAgICBnZXRHbG9iYWxPYmpl
Y3QoMSkKLSAgICBkaXNwYXRjaCg3KQorICAgIGRpc3BhdGNoKDYpCiAKIC5yQ2xvc3VyZVZhcldp
dGhWYXJJbmplY3Rpb25DaGVja3M6CiAgICAgYmluZXEgdDAsIENsb3N1cmVWYXJXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzLCAuckR5bmFtaWMKICAgICB2YXJJbmplY3Rpb25DaGVjayguckR5bmFtaWMp
CiAgICAgcmVzb2x2ZVNjb3BlKCkKLSAgICBkaXNwYXRjaCg3KQorICAgIGRpc3BhdGNoKDYpCiAK
IC5yRHluYW1pYzoKICAgICBjYWxsU2xvd1BhdGgoX2xsaW50X3Nsb3dfcGF0aF9yZXNvbHZlX3Nj
b3BlKQotICAgIGRpc3BhdGNoKDcpCisgICAgZGlzcGF0Y2goNikKIAogCiBtYWNybyBsb2FkV2l0
aFN0cnVjdHVyZUNoZWNrKG9wZXJhbmQsIHNsb3dQYXRoKQpAQCAtMjIwNCw3ICsyMTk2LDcgQEAg
bWFjcm8gcHV0R2xvYmFsVmFyKCkKICAgICBsb2FkaXNGcm9tSW5zdHJ1Y3Rpb24oMywgdDApCiAg
ICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZSh0MCwgdDEsIHQyKQogICAgIGxvYWRwRnJvbUluc3Ry
dWN0aW9uKDUsIHQzKQotICAgIG5vdGlmeVdyaXRlKHQzLCB0MSwgdDIsIHQwLCAucER5bmFtaWMp
CisgICAgbm90aWZ5V3JpdGUodDMsIC5wRHluYW1pYykKICAgICBsb2FkcEZyb21JbnN0cnVjdGlv
big2LCB0MCkKICAgICBzdG9yZWkgdDEsIFRhZ09mZnNldFt0MF0KICAgICBzdG9yZWkgdDIsIFBh
eWxvYWRPZmZzZXRbdDBdCkBAIC0yMjIzLDcgKzIyMTUsNyBAQCBtYWNybyBwdXRMb2NhbENsb3N1
cmVWYXIoKQogICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUodDEsIHQyLCB0MykKICAgICBsb2Fk
cEZyb21JbnN0cnVjdGlvbig1LCB0NCkKICAgICBidHB6IHQ0LCAubm9WYXJpYWJsZVdhdGNocG9p
bnRTZXQKLSAgICBub3RpZnlXcml0ZSh0NCwgdDIsIHQzLCB0MSwgLnBEeW5hbWljKQorICAgIG5v
dGlmeVdyaXRlKHQ0LCAucER5bmFtaWMpCiAubm9WYXJpYWJsZVdhdGNocG9pbnRTZXQ6CiAgICAg
bG9hZGlzRnJvbUluc3RydWN0aW9uKDYsIHQxKQogICAgIHN0b3JlaSB0MiwgSlNFbnZpcm9ubWVu
dFJlY29yZF92YXJpYWJsZXMgKyBUYWdPZmZzZXRbdDAsIHQxLCA4XQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20J
KHJldmlzaW9uIDE4MjA2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZl
bEludGVycHJldGVyNjQuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC02OTAsMTMgKzY5MCw2IEBAIF9s
bGludF9vcF9tb3Y6CiAgICAgZGlzcGF0Y2goMykKIAogCi1tYWNybyBub3RpZnlXcml0ZShzZXQs
IHZhbHVlLCBzY3JhdGNoLCBzbG93KQotICAgIGxvYWRiIFZhcmlhYmxlV2F0Y2hwb2ludFNldDo6
bV9zdGF0ZVtzZXRdLCBzY3JhdGNoCi0gICAgYmllcSBzY3JhdGNoLCBJc0ludmFsaWRhdGVkLCAu
ZG9uZQotICAgIGJxbmVxIHZhbHVlLCBWYXJpYWJsZVdhdGNocG9pbnRTZXQ6Om1faW5mZXJyZWRW
YWx1ZVtzZXRdLCBzbG93Ci0uZG9uZToKLWVuZAotCiBfbGxpbnRfb3Bfbm90OgogICAgIHRyYWNl
RXhlY3V0aW9uKCkKICAgICBsb2FkaXNGcm9tSW5zdHJ1Y3Rpb24oMiwgdDApCkBAIC0xOTQ0LDM5
ICsxOTM3LDM5IEBAIF9sbGludF9vcF9yZXNvbHZlX3Njb3BlOgogI3JHbG9iYWxQcm9wZXJ0eToK
ICAgICBiaW5lcSB0MCwgR2xvYmFsUHJvcGVydHksIC5yR2xvYmFsVmFyCiAgICAgZ2V0R2xvYmFs
T2JqZWN0KDEpCi0gICAgZGlzcGF0Y2goNykKKyAgICBkaXNwYXRjaCg2KQogCiAuckdsb2JhbFZh
cjoKICAgICBiaW5lcSB0MCwgR2xvYmFsVmFyLCAuckNsb3N1cmVWYXIKICAgICBnZXRHbG9iYWxP
YmplY3QoMSkKLSAgICBkaXNwYXRjaCg3KQorICAgIGRpc3BhdGNoKDYpCiAKIC5yQ2xvc3VyZVZh
cjoKICAgICBiaW5lcSB0MCwgQ2xvc3VyZVZhciwgLnJHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmpl
Y3Rpb25DaGVja3MKICAgICByZXNvbHZlU2NvcGUoKQotICAgIGRpc3BhdGNoKDcpCisgICAgZGlz
cGF0Y2goNikKIAogLnJHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6CiAgICAg
YmluZXEgdDAsIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcywgLnJHbG9iYWxW
YXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzCiAgICAgdmFySW5qZWN0aW9uQ2hlY2soLnJEeW5hbWlj
KQogICAgIGdldEdsb2JhbE9iamVjdCgxKQotICAgIGRpc3BhdGNoKDcpCisgICAgZGlzcGF0Y2go
NikKIAogLnJHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgogICAgIGJpbmVxIHQwLCBH
bG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCAuckNsb3N1cmVWYXJXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzCiAgICAgdmFySW5qZWN0aW9uQ2hlY2soLnJEeW5hbWljKQogICAgIGdldEdsb2Jh
bE9iamVjdCgxKQotICAgIGRpc3BhdGNoKDcpCisgICAgZGlzcGF0Y2goNikKIAogLnJDbG9zdXJl
VmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKICAgICBiaW5lcSB0MCwgQ2xvc3VyZVZhcldpdGhW
YXJJbmplY3Rpb25DaGVja3MsIC5yRHluYW1pYwogICAgIHZhckluamVjdGlvbkNoZWNrKC5yRHlu
YW1pYykKICAgICByZXNvbHZlU2NvcGUoKQotICAgIGRpc3BhdGNoKDcpCisgICAgZGlzcGF0Y2go
NikKIAogLnJEeW5hbWljOgogICAgIGNhbGxTbG93UGF0aChfbGxpbnRfc2xvd19wYXRoX3Jlc29s
dmVfc2NvcGUpCi0gICAgZGlzcGF0Y2goNykKKyAgICBkaXNwYXRjaCg2KQogCiAKIG1hY3JvIGxv
YWRXaXRoU3RydWN0dXJlQ2hlY2sob3BlcmFuZCwgc2xvd1BhdGgpCkBAIC0yMDY5LDggKzIwNjIs
OCBAQCBtYWNybyBwdXRHbG9iYWxWYXIoKQogICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlvbigzLCB0
MCkKICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHQwLCB0MSkKICAgICBsb2FkcEZyb21JbnN0
cnVjdGlvbig1LCB0MikKLSAgICBub3RpZnlXcml0ZSh0MiwgdDEsIHQwLCAucER5bmFtaWMpCiAg
ICAgbG9hZHBGcm9tSW5zdHJ1Y3Rpb24oNiwgdDApCisgICAgbm90aWZ5V3JpdGUodDIsIC5wRHlu
YW1pYykKICAgICBzdG9yZXEgdDEsIFt0MF0KIGVuZAogCkBAIC0yMDg2LDcgKzIwNzksNyBAQCBt
YWNybyBwdXRMb2NhbENsb3N1cmVWYXIoKQogICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUodDEs
IHQyKQogICAgIGxvYWRwRnJvbUluc3RydWN0aW9uKDUsIHQzKQogICAgIGJ0cHogdDMsIC5ub1Zh
cmlhYmxlV2F0Y2hwb2ludFNldAotICAgIG5vdGlmeVdyaXRlKHQzLCB0MiwgdDEsIC5wRHluYW1p
YykKKyAgICBub3RpZnlXcml0ZSh0MywgLnBEeW5hbWljKQogLm5vVmFyaWFibGVXYXRjaHBvaW50
U2V0OgogICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlvbig2LCB0MSkKICAgICBzdG9yZXEgdDIsIEpT
RW52aXJvbm1lbnRSZWNvcmRfdmFyaWFibGVzW3QwLCB0MSwgOF0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20JKHJldmlz
aW9uIDE4MjA2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVy
cHJldGVyLmFzbQkod29ya2luZyBjb3B5KQpAQCAtNTE5LDYgKzUxOSwxMCBAQCBtYWNybyBza2lw
SWZJc1JlbWVtYmVyZWRPckluRWRlbihjZWxsLCBzCiAgICAgY29udGludWF0aW9uKHNjcmF0Y2gx
KQogZW5kCiAKK21hY3JvIG5vdGlmeVdyaXRlKHNldCwgc2xvdykKKyAgICBiYm5lcSBXYXRjaHBv
aW50U2V0OjptX3N0YXRlW3NldF0sIElzSW52YWxpZGF0ZWQsIHNsb3cKK2VuZAorCiBtYWNybyBj
aGVja1N3aXRjaFRvSklUKGluY3JlbWVudCwgYWN0aW9uKQogICAgIGxvYWRwIENvZGVCbG9ja1tj
ZnJdLCB0MAogICAgIGJhZGRpcyBpbmNyZW1lbnQsIENvZGVCbG9jazo6bV9sbGludEV4ZWN1dGVD
b3VudGVyICsgQmFzZWxpbmVFeGVjdXRpb25Db3VudGVyOjptX2NvdW50ZXJbdDBdLCAuY29udGlu
dWUKQEAgLTkyMCwxMiArOTI0LDYgQEAgZW5kCiAKIAogIyBWYWx1ZS1yZXByZXNlbnRhdGlvbi1h
Z25vc3RpYyBjb2RlLgotX2xsaW50X29wX3RvdWNoX2VudHJ5OgotICAgIHRyYWNlRXhlY3V0aW9u
KCkKLSAgICBjYWxsU2xvd1BhdGgoX3Nsb3dfcGF0aF90b3VjaF9lbnRyeSkKLSAgICBkaXNwYXRj
aCgxKQotCi0KIF9sbGludF9vcF9jcmVhdGVfZGlyZWN0X2FyZ3VtZW50czoKICAgICB0cmFjZUV4
ZWN1dGlvbigpCiAgICAgY2FsbFNsb3dQYXRoKF9zbG93X3BhdGhfY3JlYXRlX2RpcmVjdF9hcmd1
bWVudHMpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0
aHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1v
blNsb3dQYXRocy5jcHAJKHJldmlzaW9uIDE4MjA2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwNiwxMyAr
MjA2LDYgQEAgU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2NvbnN0cnVjdF9hcml0eQogICAgIFJF
VFVSTl9UV08oMCwgc2V0dXBBcml0eUNoZWNrRGF0YSh2bSwgc2xvdHNUb0FkZCkpOwogfQogCi1T
TE9XX1BBVEhfREVDTChzbG93X3BhdGhfdG91Y2hfZW50cnkpCi17Ci0gICAgQkVHSU4oKTsKLSAg
ICBleGVjLT5jb2RlQmxvY2soKS0+c3ltYm9sVGFibGUoKS0+bV9mdW5jdGlvbkVudGVyZWRPbmNl
LnRvdWNoKCJGdW5jdGlvbiAocmUpZW50ZXJlZCIpOwotICAgIEVORCgpOwotfQotCiBTTE9XX1BB
VEhfREVDTChzbG93X3BhdGhfY3JlYXRlX2RpcmVjdF9hcmd1bWVudHMpCiB7CiAgICAgQkVHSU4o
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQ
YXRocy5oCShyZXZpc2lvbiAxODIwNjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Db21tb25TbG93UGF0aHMuaAkod29ya2luZyBjb3B5KQpAQCAtMTgxLDcgKzE4MSw2IEBAIFNM
T1dfUEFUSF9ERUNMKG5hbWUpIFdURl9JTlRFUk5BTAogICAgIAogU0xPV19QQVRIX0hJRERFTl9E
RUNMKHNsb3dfcGF0aF9jYWxsX2FyaXR5Q2hlY2spOwogU0xPV19QQVRIX0hJRERFTl9ERUNMKHNs
b3dfcGF0aF9jb25zdHJ1Y3RfYXJpdHlDaGVjayk7Ci1TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xv
d19wYXRoX3RvdWNoX2VudHJ5KTsKIFNMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfY3Jl
YXRlX2RpcmVjdF9hcmd1bWVudHMpOwogU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9j
cmVhdGVfc2NvcGVkX2FyZ3VtZW50cyk7CiBTTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRo
X2NyZWF0ZV9vdXRfb2ZfYmFuZF9hcmd1bWVudHMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAJKHJldmlzaW9uIDE4MjA2OSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01NjcsNiArNTY3LDEyIEBAIHZvaWQgRnVuY3Rpb25FeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVu
KEoKICAgICBpZiAodGhpc09iamVjdC0+bV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QpCiAgICAgICAg
IHRoaXNPYmplY3QtPm1fY29kZUJsb2NrRm9yQ29uc3RydWN0LT52aXNpdEFnZ3JlZ2F0ZSh2aXNp
dG9yKTsKICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV91bmxpbmtlZEV4ZWN1dGFi
bGUpOworICAgIAorICAgIGlmICh0aGlzT2JqZWN0LT5tX2Z1bmN0aW9uUmVhbGxvY2F0aW9uV2F0
Y2hwb2ludFNldC5uZWVkVG9GaW5hbGl6ZSgpKSB7CisgICAgICAgIGlmICghdGhpc09iamVjdC0+
bV93YXRjaHBvaW50Q2xlYW51cCkKKyAgICAgICAgICAgIHRoaXNPYmplY3QtPm1fd2F0Y2hwb2lu
dENsZWFudXAgPSBzdGQ6Om1ha2VfdW5pcXVlPFdhdGNocG9pbnRDbGVhbnVwPih0aGlzT2JqZWN0
KTsKKyAgICAgICAgdmlzaXRvci5hZGRVbmNvbmRpdGlvbmFsRmluYWxpemVyKHRoaXNPYmplY3Qt
Pm1fd2F0Y2hwb2ludENsZWFudXAuZ2V0KCkpOworICAgIH0KIH0KIAogU3ltYm9sVGFibGUqIEZ1
bmN0aW9uRXhlY3V0YWJsZTo6c3ltYm9sVGFibGUoQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5k
KQpAQCAtNjIyLDYgKzYyOCwyMSBAQCBGdW5jdGlvbkV4ZWN1dGFibGUqIEZ1bmN0aW9uRXhlY3V0
YWJsZTo6CiAgICAgcmV0dXJuIHVubGlua2VkRXhlY3V0YWJsZS0+bGluayhleGVjLnZtKCksIHNv
dXJjZSwgb3ZlcnJpZGVMaW5lTnVtYmVyKTsKIH0KIAorRnVuY3Rpb25FeGVjdXRhYmxlOjpXYXRj
aHBvaW50Q2xlYW51cDo6V2F0Y2hwb2ludENsZWFudXAoRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVj
dXRhYmxlKQorICAgIDogbV9leGVjdXRhYmxlKGV4ZWN1dGFibGUpCit7Cit9CisKK0Z1bmN0aW9u
RXhlY3V0YWJsZTo6V2F0Y2hwb2ludENsZWFudXA6On5XYXRjaHBvaW50Q2xlYW51cCgpCit7Cit9
CisKK3ZvaWQgRnVuY3Rpb25FeGVjdXRhYmxlOjpXYXRjaHBvaW50Q2xlYW51cDo6ZmluYWxpemVV
bmNvbmRpdGlvbmFsbHkoKQoreworICAgIG1fZXhlY3V0YWJsZS0+ZnVuY3Rpb25SZWFsbG9jYXRp
b25XYXRjaHBvaW50U2V0KCkuZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoCisgICAgICAgIFN0cmlu
Z0ZpcmVEZXRhaWwoIkZ1bmN0aW9uRXhlY3V0YWJsZSBjbGVhbi11cCBkdXJpbmcgR0MiKSk7Cit9
CisKIHZvaWQgRXhlY3V0YWJsZUJhc2U6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKIHsK
ICAgICBFeGVjdXRhYmxlQmFzZSogcmVhbFRoaXMgPSBjb25zdF9jYXN0PEV4ZWN1dGFibGVCYXNl
Kj4odGhpcyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJs
ZS5oCShyZXZpc2lvbiAxODIwNjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9F
eGVjdXRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDggKzMzLDYgQEAKICNpbmNsdWRlICJD
b21waWxhdGlvblJlc3VsdC5oIgogI2luY2x1ZGUgIkRGR1BsYW4uaCIKICNpbmNsdWRlICJIYW5k
bGVySW5mby5oIgotI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKLSNpbmNsdWRlICJJbnRlcnByZXRl
ci5oIgogI2luY2x1ZGUgIkpJVENvZGUuaCIKICNpbmNsdWRlICJKU0dsb2JhbE9iamVjdC5oIgog
I2luY2x1ZGUgIlJlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZS5oIgpAQCAtNDIsNiArNDAsNyBAQAog
I2luY2x1ZGUgIlNvdXJjZUNvZGUuaCIKICNpbmNsdWRlICJUeXBlU2V0LmgiCiAjaW5jbHVkZSAi
VW5saW5rZWRDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJWYXJpYWJsZVdhdGNocG9pbnRTZXQuaCIK
IAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTY0OSw2ICs2NDgsOCBAQCBwdWJsaWM6CiAgICAgdm9p
ZCB1bmxpbmtDYWxscygpOwogCiAgICAgdm9pZCBjbGVhckNvZGUoKTsKKyAgICAKKyAgICBWYXJp
YWJsZVdhdGNocG9pbnRTZXQmIGZ1bmN0aW9uUmVhbGxvY2F0aW9uV2F0Y2hwb2ludFNldCgpIHsg
cmV0dXJuIG1fZnVuY3Rpb25SZWFsbG9jYXRpb25XYXRjaHBvaW50U2V0OyB9CiAKIHByaXZhdGU6
CiAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKApAQCAtNjY3LDEyICs2NjgsMjYgQEAgcHJpdmF0ZToK
ICAgICB9CiAKICAgICBmcmllbmQgY2xhc3MgU2NyaXB0RXhlY3V0YWJsZTsKKyAgICAKKyAgICBj
bGFzcyBXYXRjaHBvaW50Q2xlYW51cCA6IHB1YmxpYyBVbmNvbmRpdGlvbmFsRmluYWxpemVyIHsK
KyAgICBwdWJsaWM6CisgICAgICAgIFdhdGNocG9pbnRDbGVhbnVwKEZ1bmN0aW9uRXhlY3V0YWJs
ZSopOworICAgICAgICB2aXJ0dWFsIH5XYXRjaHBvaW50Q2xlYW51cCgpOworICAgICAgICAKKyAg
ICBwcm90ZWN0ZWQ6CisgICAgICAgIHZvaWQgZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoKSBvdmVy
cmlkZTsKKyAgICAgICAgCisgICAgcHJpdmF0ZToKKyAgICAgICAgRnVuY3Rpb25FeGVjdXRhYmxl
KiBtX2V4ZWN1dGFibGU7CisgICAgfTsKIAogICAgIFdyaXRlQmFycmllcjxVbmxpbmtlZEZ1bmN0
aW9uRXhlY3V0YWJsZT4gbV91bmxpbmtlZEV4ZWN1dGFibGU7CiAgICAgUmVmUHRyPEZ1bmN0aW9u
Q29kZUJsb2NrPiBtX2NvZGVCbG9ja0ZvckNhbGw7CiAgICAgUmVmUHRyPEZ1bmN0aW9uQ29kZUJs
b2NrPiBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdDsKICAgICBSZWZQdHI8VHlwZVNldD4gbV9yZXR1
cm5TdGF0ZW1lbnRUeXBlU2V0OwogICAgIHVuc2lnbmVkIG1fcGFyYW1ldGVyc1N0YXJ0T2Zmc2V0
OworICAgIFZhcmlhYmxlV2F0Y2hwb2ludFNldCBtX2Z1bmN0aW9uUmVhbGxvY2F0aW9uV2F0Y2hw
b2ludFNldDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2F0Y2hwb2ludENsZWFudXA+IG1fd2F0Y2hw
b2ludENsZWFudXA7CiB9OwogCiBpbmxpbmUgdm9pZCBFeGVjdXRhYmxlQmFzZTo6Y2xlYXJDb2Rl
VmlydHVhbChFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQ0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0NJbmxpbmVzLmgJKHJldmlzaW9uIDE4MjA2OSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAt
NTEsNiArNTEsNyBAQAogI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJTbG90Vmlz
aXRvcklubGluZXMuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVJbmxpbmVzLmgiCisjaW5jbHVkZSAi
VmFyaWFibGVXYXRjaHBvaW50U2V0SW5saW5lcy5oIgogI2luY2x1ZGUgIldlYWtHQ01hcElubGlu
ZXMuaCIKIAogI2VuZGlmIC8vIEpTQ0lubGluZXNfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAJKHJldmlzaW9uIDE4MjA2OSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01OSw2ICs1OSwxNCBAQCBib29sIEpTRnVuY3Rpb246OmlzSG9zdEZ1bmN0aW9uTm9uSW5saW5l
CiAgICAgcmV0dXJuIGlzSG9zdEZ1bmN0aW9uKCk7CiB9CiAKK0pTRnVuY3Rpb24qIEpTRnVuY3Rp
b246OmNyZWF0ZShWTSYgdm0sIEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSwgSlNTY29w
ZSogc2NvcGUpCit7CisgICAgSlNGdW5jdGlvbiogcmVzdWx0ID0gY3JlYXRlSW1wbCh2bSwgZXhl
Y3V0YWJsZSwgc2NvcGUpOworICAgIGV4ZWN1dGFibGUtPmZ1bmN0aW9uUmVhbGxvY2F0aW9uV2F0
Y2hwb2ludFNldCgpLm5vdGlmeVdyaXRlKAorICAgICAgICB2bSwgZXhlY3V0YWJsZSwgcmVzdWx0
LCAiQWxsb2NhdGluZyBhIGZ1bmN0aW9uIik7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogSlNG
dW5jdGlvbiogSlNGdW5jdGlvbjo6Y3JlYXRlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgaW50IGxlbmd0aCwgY29uc3QgU3RyaW5nJiBuYW1lLCBOYXRpdmVGdW5jdGlvbiBu
YXRpdmVGdW5jdGlvbiwgSW50cmluc2ljIGludHJpbnNpYywgTmF0aXZlRnVuY3Rpb24gbmF0aXZl
Q29uc3RydWN0b3IpCiB7CiAgICAgTmF0aXZlRXhlY3V0YWJsZSogZXhlY3V0YWJsZTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgJKHJldmlzaW9uIDE4
MjA2OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaAkod29y
a2luZyBjb3B5KQpAQCAtMjQsNiArMjQsNyBAQAogI2lmbmRlZiBKU0Z1bmN0aW9uX2gKICNkZWZp
bmUgSlNGdW5jdGlvbl9oCiAKKyNpbmNsdWRlICJFeGVjdXRhYmxlLmgiCiAjaW5jbHVkZSAiSW50
ZXJuYWxGdW5jdGlvbi5oIgogI2luY2x1ZGUgIkpTQ2FsbGVlLmgiCiAjaW5jbHVkZSAiSlNTY29w
ZS5oIgpAQCAtNTksMTUgKzYwLDE1IEBAIHB1YmxpYzoKICAgICB0eXBlZGVmIEpTQ2FsbGVlIEJh
c2U7CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgSlNGdW5jdGlvbiogY3JlYXRlKFZN
JiwgSlNHbG9iYWxPYmplY3QqLCBpbnQgbGVuZ3RoLCBjb25zdCBTdHJpbmcmIG5hbWUsIE5hdGl2
ZUZ1bmN0aW9uLCBJbnRyaW5zaWMgPSBOb0ludHJpbnNpYywgTmF0aXZlRnVuY3Rpb24gbmF0aXZl
Q29uc3RydWN0b3IgPSBjYWxsSG9zdEZ1bmN0aW9uQXNDb25zdHJ1Y3Rvcik7Ci0KLSAgICBzdGF0
aWMgSlNGdW5jdGlvbiogY3JlYXRlKFZNJiB2bSwgRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRh
YmxlLCBKU1Njb3BlKiBzY29wZSkKKyAgICAKKyAgICBzdGF0aWMgSlNGdW5jdGlvbiogY3JlYXRl
V2l0aEludmFsaWRhdGVkUmVhbGxvY2F0aW9uV2F0Y2hwb2ludChWTSYgdm0sIEZ1bmN0aW9uRXhl
Y3V0YWJsZSogZXhlY3V0YWJsZSwgSlNTY29wZSogc2NvcGUpCiAgICAgewotICAgICAgICBKU0Z1
bmN0aW9uKiBmdW5jdGlvbiA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTRnVuY3Rpb24+
KHZtLmhlYXApKSBKU0Z1bmN0aW9uKHZtLCBleGVjdXRhYmxlLCBzY29wZSk7Ci0gICAgICAgIEFT
U0VSVChmdW5jdGlvbi0+c3RydWN0dXJlKCktPmdsb2JhbE9iamVjdCgpKTsKLSAgICAgICAgZnVu
Y3Rpb24tPmZpbmlzaENyZWF0aW9uKHZtKTsKLSAgICAgICAgcmV0dXJuIGZ1bmN0aW9uOworICAg
ICAgICBBU1NFUlQoZXhlY3V0YWJsZS0+ZnVuY3Rpb25SZWFsbG9jYXRpb25XYXRjaHBvaW50U2V0
KCkuaGFzQmVlbkludmFsaWRhdGVkKCkpOworICAgICAgICByZXR1cm4gY3JlYXRlSW1wbCh2bSwg
ZXhlY3V0YWJsZSwgc2NvcGUpOwogICAgIH0KIAorICAgIHN0YXRpYyBKU0Z1bmN0aW9uKiBjcmVh
dGUoVk0mLCBGdW5jdGlvbkV4ZWN1dGFibGUqLCBKU1Njb3BlKik7CisKICAgICBzdGF0aWMgSlNG
dW5jdGlvbiogY3JlYXRlQnVpbHRpbkZ1bmN0aW9uKFZNJiwgRnVuY3Rpb25FeGVjdXRhYmxlKiwg
SlNHbG9iYWxPYmplY3QqKTsKIAogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CkBA
IC0xNDksNiArMTUwLDE0IEBAIHByb3RlY3RlZDoKICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxk
cmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAKIHByaXZhdGU6CisgICAgc3RhdGljIEpTRnVu
Y3Rpb24qIGNyZWF0ZUltcGwoVk0mIHZtLCBGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUs
IEpTU2NvcGUqIHNjb3BlKQorICAgIHsKKyAgICAgICAgSlNGdW5jdGlvbiogZnVuY3Rpb24gPSBu
ZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0Z1bmN0aW9uPih2bS5oZWFwKSkgSlNGdW5jdGlv
bih2bSwgZXhlY3V0YWJsZSwgc2NvcGUpOworICAgICAgICBBU1NFUlQoZnVuY3Rpb24tPnN0cnVj
dHVyZSgpLT5nbG9iYWxPYmplY3QoKSk7CisgICAgICAgIGZ1bmN0aW9uLT5maW5pc2hDcmVhdGlv
bih2bSk7CisgICAgICAgIHJldHVybiBmdW5jdGlvbjsKKyAgICB9CisgICAgCiAgICAgZnJpZW5k
IGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKIAogICAgIHN0YXRpYyBFbmNvZGVkSlNWYWx1
ZSBhcmd1bWVudHNHZXR0ZXIoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwg
UHJvcGVydHlOYW1lKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xv
YmFsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0dsb2JhbE9iamVjdC5jcHAJKHJldmlzaW9uIDE4MjA2OSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI1
LDYgKzEyNSw3IEBACiAjaW5jbHVkZSAiU3ltYm9sQ29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJT
eW1ib2xQcm90b3R5cGUuaCIKICNpbmNsdWRlICJWYXJpYWJsZVdhdGNocG9pbnRTZXRJbmxpbmVz
LmgiCisjaW5jbHVkZSAiVmFyaWFibGVXcml0ZUZpcmVEZXRhaWwuaCIKICNpbmNsdWRlICJXZWFr
R0NNYXBJbmxpbmVzLmgiCiAjaW5jbHVkZSAiV2Vha01hcENvbnN0cnVjdG9yLmgiCiAjaW5jbHVk
ZSAiV2Vha01hcFByb3RvdHlwZS5oIgpAQCAtNDg5LDcgKzQ5MCw3IEBAIEpTR2xvYmFsT2JqZWN0
OjpOZXdHbG9iYWxWYXIgSlNHbG9iYWxPYmoKICAgICBTY29wZU9mZnNldCBvZmZzZXQgPSBzeW1i
b2xUYWJsZSgpLT50YWtlTmV4dFNjb3BlT2Zmc2V0KGxvY2tlcik7CiAgICAgU3ltYm9sVGFibGVF
bnRyeSBuZXdFbnRyeShWYXJPZmZzZXQob2Zmc2V0KSwgKGNvbnN0YW50TW9kZSA9PSBJc0NvbnN0
YW50KSA/IFJlYWRPbmx5IDogMCk7CiAgICAgaWYgKGNvbnN0YW50TW9kZSA9PSBJc1ZhcmlhYmxl
KQotICAgICAgICBuZXdFbnRyeS5wcmVwYXJlVG9XYXRjaChzeW1ib2xUYWJsZSgpKTsKKyAgICAg
ICAgbmV3RW50cnkucHJlcGFyZVRvV2F0Y2goKTsKICAgICBlbHNlCiAgICAgICAgIG5ld0VudHJ5
LmRpc2FibGVXYXRjaGluZygpOwogICAgIHN5bWJvbFRhYmxlKCktPmFkZChsb2NrZXIsIGlkZW50
LmltcGwoKSwgbmV3RW50cnkpOwpAQCAtNTEwLDcgKzUxMSw3IEBAIHZvaWQgSlNHbG9iYWxPYmpl
Y3Q6OmFkZEZ1bmN0aW9uKEV4ZWNTdGEKICAgICBOZXdHbG9iYWxWYXIgdmFyID0gYWRkR2xvYmFs
VmFyKHByb3BlcnR5TmFtZSwgSXNWYXJpYWJsZSk7CiAgICAgdmFyaWFibGVBdCh2YXIub2Zmc2V0
KS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgdmFsdWUpOwogICAgIGlmICh2YXIuc2V0KQotICAgICAg
ICB2YXIuc2V0LT5ub3RpZnlXcml0ZSh2bSwgdmFsdWUsIFZhcmlhYmxlV3JpdGVGaXJlRGV0YWls
KHRoaXMsIHByb3BlcnR5TmFtZSkpOworICAgICAgICB2YXIuc2V0LT50b3VjaChWYXJpYWJsZVdy
aXRlRmlyZURldGFpbCh0aGlzLCBwcm9wZXJ0eU5hbWUpKTsKIH0KIAogc3RhdGljIGlubGluZSBK
U09iamVjdCogbGFzdEluUHJvdG90eXBlQ2hhaW4oSlNPYmplY3QqIG9iamVjdCkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAkocmV2aXNp
b24gMTgyMDY5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmpl
Y3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzMyLDcgKzMzMiw3IEBAIHByb3RlY3RlZDoKIAogICAg
IHN0cnVjdCBOZXdHbG9iYWxWYXIgewogICAgICAgICBTY29wZU9mZnNldCBvZmZzZXQ7Ci0gICAg
ICAgIFZhcmlhYmxlV2F0Y2hwb2ludFNldCogc2V0OworICAgICAgICBXYXRjaHBvaW50U2V0KiBz
ZXQ7CiAgICAgfTsKICAgICBOZXdHbG9iYWxWYXIgYWRkR2xvYmFsVmFyKGNvbnN0IElkZW50aWZp
ZXImLCBDb25zdGFudE1vZGUpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0xleGljYWxFbnZpcm9ubWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNMZXhpY2FsRW52aXJvbm1lbnQuY3BwCShyZXZpc2lvbiAxODIwNjkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xleGljYWxFbnZpcm9ubWVudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTc3LDYgKzc3LDcgQEAgaW5saW5lIGJvb2wgSlNMZXhpY2Fs
RW52aXJvbm1lbnQ6OnN5bWJvbAogICAgIEFTU0VSVCghSGVhcDo6aGVhcCh2YWx1ZSkgfHwgSGVh
cDo6aGVhcCh2YWx1ZSkgPT0gSGVhcDo6aGVhcCh0aGlzKSk7CiAgICAgCiAgICAgV3JpdGVCYXJy
aWVyQmFzZTxVbmtub3duPiogcmVnOworICAgIFdhdGNocG9pbnRTZXQqIHNldDsKICAgICB7CiAg
ICAgICAgIEdDU2FmZUNvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKHN5bWJvbFRhYmxlKCktPm1f
bG9jaywgZXhlYy0+dm0oKS5oZWFwKTsKICAgICAgICAgU3ltYm9sVGFibGU6Ok1hcDo6aXRlcmF0
b3IgaXRlciA9IHN5bWJvbFRhYmxlKCktPmZpbmQobG9ja2VyLCBwcm9wZXJ0eU5hbWUudWlkKCkp
OwpAQCAtOTIsMTEgKzkzLDEyIEBAIGlubGluZSBib29sIEpTTGV4aWNhbEVudmlyb25tZW50Ojpz
eW1ib2wKICAgICAgICAgLy8gRGVmZW5kIGFnYWluc3QgdGhlIGluc3BlY3RvciBhc2tpbmcgZm9y
IGEgdmFyIGFmdGVyIGl0IGhhcyBiZWVuIG9wdGltaXplZCBvdXQuCiAgICAgICAgIGlmICghaXNW
YWxpZChvZmZzZXQpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoVmFy
aWFibGVXYXRjaHBvaW50U2V0KiBzZXQgPSBpdGVyLT52YWx1ZS53YXRjaHBvaW50U2V0KCkpCi0g
ICAgICAgICAgICBzZXQtPmludmFsaWRhdGUoVmFyaWFibGVXcml0ZUZpcmVEZXRhaWwodGhpcywg
cHJvcGVydHlOYW1lKSk7IC8vIERvbid0IG1lc3MgYXJvdW5kIC0gaWYgd2UgaGFkIGZvdW5kIHRo
aXMgc3RhdGljYWxseSwgd2Ugd291bGQgaGF2ZSBpbnZhbGlkYXRlZCBpdC4KKyAgICAgICAgc2V0
ID0gaXRlci0+dmFsdWUud2F0Y2hwb2ludFNldCgpOwogICAgICAgICByZWcgPSAmdmFyaWFibGVB
dChvZmZzZXQpOwogICAgIH0KICAgICByZWctPnNldCh2bSwgdGhpcywgdmFsdWUpOworICAgIGlm
IChzZXQpCisgICAgICAgIHNldC0+aW52YWxpZGF0ZShWYXJpYWJsZVdyaXRlRmlyZURldGFpbCh0
aGlzLCBwcm9wZXJ0eU5hbWUpKTsgLy8gRG9uJ3QgbWVzcyBhcm91bmQgLSBpZiB3ZSBoYWQgZm91
bmQgdGhpcyBzdGF0aWNhbGx5LCB3ZSB3b3VsZCBoYXZlIGludmFsaWRhdGVkIGl0LgogICAgIHJl
dHVybiB0cnVlOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Nj
b3BlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTY29w
ZS5oCShyZXZpc2lvbiAxODIwNjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1Njb3BlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAKIG5hbWVzcGFjZSBKU0Mg
ewogCiBjbGFzcyBTY29wZUNoYWluSXRlcmF0b3I7Ci1jbGFzcyBWYXJpYWJsZVdhdGNocG9pbnRT
ZXQ7CitjbGFzcyBXYXRjaHBvaW50U2V0OwogCiBlbnVtIFJlc29sdmVNb2RlIHsKICAgICBUaHJv
d0lmTm90Rm91bmQsCkBAIC0xMDIsNyArMTAyLDcgQEAgaW5saW5lIGJvb2wgbmVlZHNWYXJJbmpl
Y3Rpb25DaGVja3MoUmVzbwogfQogCiBzdHJ1Y3QgUmVzb2x2ZU9wIHsKLSAgICBSZXNvbHZlT3Ao
UmVzb2x2ZVR5cGUgdHlwZSwgc2l6ZV90IGRlcHRoLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNM
ZXhpY2FsRW52aXJvbm1lbnQqIGxleGljYWxFbnZpcm9ubWVudCwgVmFyaWFibGVXYXRjaHBvaW50
U2V0KiB3YXRjaHBvaW50U2V0LCB1aW50cHRyX3Qgb3BlcmFuZCkKKyAgICBSZXNvbHZlT3AoUmVz
b2x2ZVR5cGUgdHlwZSwgc2l6ZV90IGRlcHRoLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNMZXhp
Y2FsRW52aXJvbm1lbnQqIGxleGljYWxFbnZpcm9ubWVudCwgV2F0Y2hwb2ludFNldCogd2F0Y2hw
b2ludFNldCwgdWludHB0cl90IG9wZXJhbmQpCiAgICAgICAgIDogdHlwZSh0eXBlKQogICAgICAg
ICAsIGRlcHRoKGRlcHRoKQogICAgICAgICAsIHN0cnVjdHVyZShzdHJ1Y3R1cmUpCkBAIC0xMTYs
NyArMTE2LDcgQEAgc3RydWN0IFJlc29sdmVPcCB7CiAgICAgc2l6ZV90IGRlcHRoOwogICAgIFN0
cnVjdHVyZSogc3RydWN0dXJlOwogICAgIEpTTGV4aWNhbEVudmlyb25tZW50KiBsZXhpY2FsRW52
aXJvbm1lbnQ7Ci0gICAgVmFyaWFibGVXYXRjaHBvaW50U2V0KiB3YXRjaHBvaW50U2V0OworICAg
IFdhdGNocG9pbnRTZXQqIHdhdGNocG9pbnRTZXQ7CiAgICAgdWludHB0cl90IG9wZXJhbmQ7CiB9
OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2Jq
ZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1i
b2xUYWJsZU9iamVjdC5oCShyZXZpc2lvbiAxODIwNjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcg
KzMyLDcgQEAKICNpbmNsdWRlICJKU1Njb3BlLmgiCiAjaW5jbHVkZSAiUHJvcGVydHlEZXNjcmlw
dG9yLmgiCiAjaW5jbHVkZSAiU3ltYm9sVGFibGUuaCIKLSNpbmNsdWRlICJWYXJpYWJsZVdhdGNo
cG9pbnRTZXRJbmxpbmVzLmgiCisjaW5jbHVkZSAiVmFyaWFibGVXcml0ZUZpcmVEZXRhaWwuaCIK
IAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTEyNiw2ICsxMjYsNyBAQCBpbmxpbmUgYm9vbCBzeW1i
b2xUYWJsZVB1dCgKICAgICBBU1NFUlQoIUhlYXA6OmhlYXAodmFsdWUpIHx8IEhlYXA6OmhlYXAo
dmFsdWUpID09IEhlYXA6OmhlYXAob2JqZWN0KSk7CiAgICAgCiAgICAgV3JpdGVCYXJyaWVyQmFz
ZTxVbmtub3duPiogcmVnOworICAgIFdhdGNocG9pbnRTZXQqIHNldDsKICAgICB7CiAgICAgICAg
IFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSA9ICpvYmplY3QtPnN5bWJvbFRhYmxlKCk7CiAgICAg
ICAgIC8vIEZJWE1FOiBUaGlzIGlzIHZlcnkgc3VzcGljaW91cy4gV2Ugc2hvdWxkbid0IG5lZWQg
YSBHQy1zYWZlIGxvY2sgaGVyZS4KQEAgLTE0MiwxNyArMTQzLDE1IEBAIGlubGluZSBib29sIHN5
bWJvbFRhYmxlUHV0KAogICAgICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIFN0cmlj
dE1vZGVSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7CiAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICAgICAgfQotICAgICAgICBpZiAoVmFyaWFibGVXYXRjaHBvaW50U2V0KiBzZXQgPSBp
dGVyLT52YWx1ZS53YXRjaHBvaW50U2V0KCkpIHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBJdCdz
IHN0cmFuZ2UgdGhhdCB3ZSdyZSBkb2luZyB0aGlzIHdoaWxlIGhvbGRpbmcgdGhlIHN5bWJvbCB0
YWJsZSdzIGxvY2suCi0gICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTM0NjAxCi0gICAgICAgICAgICBzZXQtPm5vdGlmeVdyaXRlKHZtLCB2YWx1
ZSwgb2JqZWN0LCBwcm9wZXJ0eU5hbWUpOwotICAgICAgICB9CisgICAgICAgIHNldCA9IGl0ZXIt
PnZhbHVlLndhdGNocG9pbnRTZXQoKTsKICAgICAgICAgcmVnID0gJm9iamVjdC0+dmFyaWFibGVB
dChmYXN0RW50cnkuc2NvcGVPZmZzZXQoKSk7CiAgICAgfQogICAgIC8vIEknZCBwcmVmZXIgd2Ug
bm90IGhvbGQgbG9jayB3aGlsZSBleGVjdXRpbmcgYmFycmllcnMsIHNpbmNlIEkgcHJlZmVyIHRv
IHJlc2VydmUKICAgICAvLyB0aGUgcmlnaHQgZm9yIGJhcnJpZXJzIHRvIGJlIGFibGUgdG8gdHJp
Z2dlciBHQy4gQW5kIEkgZG9uJ3Qgd2FudCB0byBob2xkIFZNCiAgICAgLy8gbG9ja3Mgd2hpbGUg
R0MnaW5nLgogICAgIHJlZy0+c2V0KHZtLCBvYmplY3QsIHZhbHVlKTsKKyAgICBpZiAoc2V0KQor
ICAgICAgICBWYXJpYWJsZVdyaXRlRmlyZURldGFpbDo6dG91Y2goc2V0LCBvYmplY3QsIHByb3Bl
cnR5TmFtZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTE2NCw2ICsxNjMsNyBAQCBpbmxp
bmUgYm9vbCBzeW1ib2xUYWJsZVB1dFdpdGhBdHRyaWJ1dGVzCiAgICAgQVNTRVJUKCFIZWFwOjpo
ZWFwKHZhbHVlKSB8fCBIZWFwOjpoZWFwKHZhbHVlKSA9PSBIZWFwOjpoZWFwKG9iamVjdCkpOwog
CiAgICAgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiogcmVnOworICAgIFdhdGNocG9pbnRTZXQq
IHNldDsKICAgICB7CiAgICAgICAgIFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSA9ICpvYmplY3Qt
PnN5bWJvbFRhYmxlKCk7CiAgICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKHN5bWJv
bFRhYmxlLm1fbG9jayk7CkBAIC0xNzIsMTIgKzE3MiwxMyBAQCBpbmxpbmUgYm9vbCBzeW1ib2xU
YWJsZVB1dFdpdGhBdHRyaWJ1dGVzCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
IFN5bWJvbFRhYmxlRW50cnkmIGVudHJ5ID0gaXRlci0+dmFsdWU7CiAgICAgICAgIEFTU0VSVCgh
ZW50cnkuaXNOdWxsKCkpOwotICAgICAgICBpZiAoVmFyaWFibGVXYXRjaHBvaW50U2V0KiBzZXQg
PSBlbnRyeS53YXRjaHBvaW50U2V0KCkpCi0gICAgICAgICAgICBzZXQtPm5vdGlmeVdyaXRlKHZt
LCB2YWx1ZSwgb2JqZWN0LCBwcm9wZXJ0eU5hbWUpOworICAgICAgICBzZXQgPSBlbnRyeS53YXRj
aHBvaW50U2V0KCk7CiAgICAgICAgIGVudHJ5LnNldEF0dHJpYnV0ZXMoYXR0cmlidXRlcyk7CiAg
ICAgICAgIHJlZyA9ICZvYmplY3QtPnZhcmlhYmxlQXQoZW50cnkuc2NvcGVPZmZzZXQoKSk7CiAg
ICAgfQogICAgIHJlZy0+c2V0KHZtLCBvYmplY3QsIHZhbHVlKTsKKyAgICBpZiAoc2V0KQorICAg
ICAgICBWYXJpYWJsZVdyaXRlRmlyZURldGFpbDo6dG91Y2goc2V0LCBvYmplY3QsIHByb3BlcnR5
TmFtZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1B1dFByb3BlcnR5U2xvdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1B1dFByb3BlcnR5U2xvdC5oCShyZXZpc2lvbiAxODIwNjkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9QdXRQcm9wZXJ0eVNsb3QuaAkod29ya2luZyBj
b3B5KQpAQCAtMjgsNiArMjgsNyBAQAogI2RlZmluZSBQdXRQcm9wZXJ0eVNsb3RfaAogCiAjaW5j
bHVkZSAiSlNDSlNWYWx1ZS5oIgorI2luY2x1ZGUgIlByb3BlcnR5T2Zmc2V0LmgiCiAKICNpbmNs
dWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TeW1ib2xUYWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3ltYm9sVGFibGUuY3BwCShyZXZpc2lvbiAxODIwNjkpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMz
LDcgKzMzLDYgQEAKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiU2xvdFZpc2l0
b3JJbmxpbmVzLmgiCiAjaW5jbHVkZSAiVHlwZVByb2ZpbGVyLmgiCi0jaW5jbHVkZSAiVmFyaWFi
bGVXYXRjaHBvaW50U2V0SW5saW5lcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtNjAsMjEg
KzU5LDE0IEBAIHZvaWQgU3ltYm9sVGFibGVFbnRyeTo6ZnJlZUZhdEVudHJ5U2xvdygKICAgICBk
ZWxldGUgZmF0RW50cnkoKTsKIH0KIAotSlNWYWx1ZSBTeW1ib2xUYWJsZUVudHJ5OjppbmZlcnJl
ZFZhbHVlKCkKLXsKLSAgICBpZiAoIWlzRmF0KCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlKCk7
Ci0gICAgcmV0dXJuIGZhdEVudHJ5KCktPm1fd2F0Y2hwb2ludHMtPmluZmVycmVkVmFsdWUoKTsK
LX0KLQotdm9pZCBTeW1ib2xUYWJsZUVudHJ5OjpwcmVwYXJlVG9XYXRjaChTeW1ib2xUYWJsZSog
c3ltYm9sVGFibGUpCit2b2lkIFN5bWJvbFRhYmxlRW50cnk6OnByZXBhcmVUb1dhdGNoKCkKIHsK
ICAgICBpZiAoIWlzV2F0Y2hhYmxlKCkpCiAgICAgICAgIHJldHVybjsKICAgICBGYXRFbnRyeSog
ZW50cnkgPSBpbmZsYXRlKCk7CiAgICAgaWYgKGVudHJ5LT5tX3dhdGNocG9pbnRzKQogICAgICAg
ICByZXR1cm47Ci0gICAgZW50cnktPm1fd2F0Y2hwb2ludHMgPSBhZG9wdFJlZihuZXcgVmFyaWFi
bGVXYXRjaHBvaW50U2V0KCpzeW1ib2xUYWJsZSkpOworICAgIGVudHJ5LT5tX3dhdGNocG9pbnRz
ID0gYWRvcHRSZWYobmV3IFdhdGNocG9pbnRTZXQoQ2xlYXJXYXRjaHBvaW50KSk7CiB9CiAKIHZv
aWQgU3ltYm9sVGFibGVFbnRyeTo6YWRkV2F0Y2hwb2ludChXYXRjaHBvaW50KiB3YXRjaHBvaW50
KQpAQCAtODIsMTUgKzc0LDYgQEAgdm9pZCBTeW1ib2xUYWJsZUVudHJ5OjphZGRXYXRjaHBvaW50
KFdhdAogICAgIGZhdEVudHJ5KCktPm1fd2F0Y2hwb2ludHMtPmFkZCh3YXRjaHBvaW50KTsKIH0K
IAotdm9pZCBTeW1ib2xUYWJsZUVudHJ5Ojpub3RpZnlXcml0ZVNsb3coVk0mIHZtLCBKU1ZhbHVl
IHZhbHVlLCBjb25zdCBGaXJlRGV0YWlsJiBkZXRhaWwpCi17Ci0gICAgVmFyaWFibGVXYXRjaHBv
aW50U2V0KiB3YXRjaHBvaW50cyA9IGZhdEVudHJ5KCktPm1fd2F0Y2hwb2ludHMuZ2V0KCk7Ci0g
ICAgaWYgKCF3YXRjaHBvaW50cykKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIHdhdGNocG9p
bnRzLT5ub3RpZnlXcml0ZSh2bSwgdmFsdWUsIGRldGFpbCk7Ci19Ci0KIFN5bWJvbFRhYmxlRW50
cnk6OkZhdEVudHJ5KiBTeW1ib2xUYWJsZUVudHJ5OjppbmZsYXRlU2xvdygpCiB7CiAgICAgRmF0
RW50cnkqIGVudHJ5ID0gbmV3IEZhdEVudHJ5KG1fYml0cyk7CkBAIC0xMDEsNyArODQsNiBAQCBT
eW1ib2xUYWJsZUVudHJ5OjpGYXRFbnRyeSogU3ltYm9sVGFibGVFCiBTeW1ib2xUYWJsZTo6U3lt
Ym9sVGFibGUoVk0mIHZtKQogICAgIDogSlNDZWxsKHZtLCB2bS5zeW1ib2xUYWJsZVN0cnVjdHVy
ZS5nZXQoKSkKICAgICAsIG1fdXNlc05vblN0cmljdEV2YWwoZmFsc2UpCi0gICAgLCBtX2Z1bmN0
aW9uRW50ZXJlZE9uY2UoQ2xlYXJXYXRjaHBvaW50KQogewogfQogCkBAIC0xMTMsMzYgKzk1LDEx
IEBAIHZvaWQgU3ltYm9sVGFibGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiAKICAgICAKICAgICB2
aXNpdG9yLmFwcGVuZCgmdGhpc1N5bWJvbFRhYmxlLT5tX2FyZ3VtZW50cyk7CiAgICAgCi0gICAg
aWYgKCF0aGlzU3ltYm9sVGFibGUtPm1fd2F0Y2hwb2ludENsZWFudXApIHsKLSAgICAgICAgdGhp
c1N5bWJvbFRhYmxlLT5tX3dhdGNocG9pbnRDbGVhbnVwID0KLSAgICAgICAgICAgIHN0ZDo6bWFr
ZV91bmlxdWU8V2F0Y2hwb2ludENsZWFudXA+KHRoaXNTeW1ib2xUYWJsZSk7Ci0gICAgfQotICAg
IAotICAgIHZpc2l0b3IuYWRkVW5jb25kaXRpb25hbEZpbmFsaXplcih0aGlzU3ltYm9sVGFibGUt
Pm1fd2F0Y2hwb2ludENsZWFudXAuZ2V0KCkpOwotICAgIAogICAgIC8vIFNhdmUgc29tZSBtZW1v
cnkuIFRoaXMgaXMgTyhuKSB0byByZWJ1aWxkIGFuZCB3ZSBkbyBzbyBvbiB0aGUgZmx5LgogICAg
IENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKHRoaXNTeW1ib2xUYWJsZS0+bV9sb2NrKTsKICAg
ICB0aGlzU3ltYm9sVGFibGUtPm1fbG9jYWxUb0VudHJ5ID0gbnVsbHB0cjsKIH0KIAotU3ltYm9s
VGFibGU6OldhdGNocG9pbnRDbGVhbnVwOjpXYXRjaHBvaW50Q2xlYW51cChTeW1ib2xUYWJsZSog
c3ltYm9sVGFibGUpCi0gICAgOiBtX3N5bWJvbFRhYmxlKHN5bWJvbFRhYmxlKQotewotfQotCi1T
eW1ib2xUYWJsZTo6V2F0Y2hwb2ludENsZWFudXA6On5XYXRjaHBvaW50Q2xlYW51cCgpIHsgfQot
Ci12b2lkIFN5bWJvbFRhYmxlOjpXYXRjaHBvaW50Q2xlYW51cDo6ZmluYWxpemVVbmNvbmRpdGlv
bmFsbHkoKQotewotICAgIFN0cmluZ0ZpcmVEZXRhaWwgZGV0YWlsKCJTeW1ib2wgdGFibGUgY2xl
YW4tdXAgZHVyaW5nIEdDIik7Ci0gICAgTWFwOjppdGVyYXRvciBpdGVyID0gbV9zeW1ib2xUYWJs
ZS0+bV9tYXAuYmVnaW4oKTsKLSAgICBNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fc3ltYm9sVGFibGUt
Pm1fbWFwLmVuZCgpOwotICAgIGZvciAoOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7Ci0gICAgICAg
IGlmIChWYXJpYWJsZVdhdGNocG9pbnRTZXQqIHNldCA9IGl0ZXItPnZhbHVlLndhdGNocG9pbnRT
ZXQoKSkKLSAgICAgICAgICAgIHNldC0+ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoZGV0YWlsKTsK
LSAgICB9Ci19Ci0KIGNvbnN0IFN5bWJvbFRhYmxlOjpMb2NhbFRvRW50cnlWZWMmIFN5bWJvbFRh
YmxlOjpsb2NhbFRvRW50cnkoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYpCiB7CiAgICAgaWYg
KFVOTElLRUxZKCFtX2xvY2FsVG9FbnRyeSkpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1N5bWJvbFRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuaAkocmV2aXNpb24gMTgyMDY5KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzUs
MTMgKzM1LDE1IEBACiAjaW5jbHVkZSAiU2NvcGVkQXJndW1lbnRzVGFibGUuaCIKICNpbmNsdWRl
ICJUeXBlTG9jYXRpb24uaCIKICNpbmNsdWRlICJWYXJPZmZzZXQuaCIKLSNpbmNsdWRlICJWYXJp
YWJsZVdhdGNocG9pbnRTZXQuaCIKKyNpbmNsdWRlICJXYXRjaHBvaW50LmgiCiAjaW5jbHVkZSA8
bWVtb3J5PgogI2luY2x1ZGUgPHd0Zi9IYXNoVHJhaXRzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQv
U3RyaW5nSW1wbC5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAorY2xhc3MgU3ltYm9sVGFibGU7CisK
IHN0YXRpYyBBTFdBWVNfSU5MSU5FIGludCBtaXNzaW5nU3ltYm9sTWFya2VyKCkgeyByZXR1cm4g
c3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKTsgfQogCiAvLyBUaGUgYml0IHR3aWRkbGlu
ZyBpbiB0aGlzIGNsYXNzIGFzc3VtZXMgdGhhdCBldmVyeSByZWdpc3RlciBpbmRleCBpcyBhCkBA
IC02MywxMSArNjUsMTEgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgaW50IG1pc3NpbmdTeW1ib2xN
YQogLy8gY291bnRlZCBwb2ludGVyIHRvIGEgc2hhcmVkIFdhdGNocG9pbnRTZXQuIFRodXMsIGlu
LXBsYWNlIGVkaXRzIG9mIHRoZQogLy8gV2F0Y2hwb2ludFNldCB3aWxsIG1hbmlmZXN0IGluIGFs
bCBjb3BpZXMuIEhlcmUncyBhIHBpY3R1cmU6CiAvLwotLy8gU3ltYm9sVGFibGVFbnRyeSAtLT4g
RmF0RW50cnkgLS0+IFZhcmlhYmxlV2F0Y2hwb2ludFNldAorLy8gU3ltYm9sVGFibGVFbnRyeSAt
LT4gRmF0RW50cnkgLS0+IFdhdGNocG9pbnRTZXQKIC8vCiAvLyBJZiB5b3UgbWFrZSBhIGNvcHkg
b2YgYSBTeW1ib2xUYWJsZUVudHJ5LCB5b3Ugd2lsbCBoYXZlOgogLy8KLS8vIG9yaWdpbmFsOiBT
eW1ib2xUYWJsZUVudHJ5IC0tPiBGYXRFbnRyeSAtLT4gVmFyaWFibGVXYXRjaHBvaW50U2V0Cisv
LyBvcmlnaW5hbDogU3ltYm9sVGFibGVFbnRyeSAtLT4gRmF0RW50cnkgLS0+IFdhdGNocG9pbnRT
ZXQKIC8vIGNvcHk6ICAgICBTeW1ib2xUYWJsZUVudHJ5IC0tPiBGYXRFbnRyeSAtLS0tLV4KIAog
c3RydWN0IFN5bWJvbFRhYmxlRW50cnkgewpAQCAtMjYwLDMyICsyNjIsNDQgQEAgcHVibGljOgog
ICAgICAgICByZXR1cm4gYml0cygpICYgRG9udEVudW1GbGFnOwogICAgIH0KICAgICAKLSAgICBK
U1ZhbHVlIGluZmVycmVkVmFsdWUoKTsKLQogICAgIHZvaWQgZGlzYWJsZVdhdGNoaW5nKCkKICAg
ICB7CisgICAgICAgIGlmIChXYXRjaHBvaW50U2V0KiBzZXQgPSB3YXRjaHBvaW50U2V0KCkpCisg
ICAgICAgICAgICBzZXQtPmludmFsaWRhdGUoIkRpc2FibGluZyB3YXRjaGluZyBpbiBzeW1ib2wg
dGFibGUiKTsKICAgICAgICAgaWYgKHZhck9mZnNldCgpLmlzU2NvcGUoKSkKICAgICAgICAgICAg
IHBhY2sodmFyT2Zmc2V0KCksIGZhbHNlLCBpc1JlYWRPbmx5KCksIGlzRG9udEVudW0oKSk7CiAg
ICAgfQogICAgIAotICAgIHZvaWQgcHJlcGFyZVRvV2F0Y2goU3ltYm9sVGFibGUqKTsKKyAgICB2
b2lkIHByZXBhcmVUb1dhdGNoKCk7CiAgICAgCiAgICAgdm9pZCBhZGRXYXRjaHBvaW50KFdhdGNo
cG9pbnQqKTsKICAgICAKLSAgICBWYXJpYWJsZVdhdGNocG9pbnRTZXQqIHdhdGNocG9pbnRTZXQo
KQorICAgIC8vIFRoaXMgd2F0Y2hwb2ludCBzZXQgaXMgaW5pdGlhbGl6ZWQgY2xlYXIsIGFuZCBn
b2VzIHRocm91Z2ggdGhlIGZvbGxvd2luZyBzdGF0ZSB0cmFuc2l0aW9uczoKKyAgICAvLyAKKyAg
ICAvLyBGaXJzdCB3cml0ZSB0byB0aGlzIHZhciwgaW4gYW55IHNjb3BlIHRoYXQgaGFzIHRoaXMg
c3ltYm9sIHRhYmxlOiBDbGVhci0+SXNXYXRjaGVkLgorICAgIC8vCisgICAgLy8gU2Vjb25kIHdy
aXRlIHRvIHRoaXMgdmFyLCBpbiBhbnkgc2NvcGUgdGhhdCBoYXMgdGhpcyBzeW1ib2wgdGFibGU6
IElzV2F0Y2hlZC0+SXNJbnZhbGlkYXRlZC4KKyAgICAvLworICAgIC8vIFdlIGVuc3VyZSB0aGF0
IHdlIHRvdWNoIHRoZSBzZXQgKGkuZS4gdHJpZ2dlciBpdHMgc3RhdGUgdHJhbnNpdGlvbikgYWZ0
ZXIgd2UgZG8gdGhlIHdyaXRlLiBUaGlzCisgICAgLy8gbWVhbnMgdGhhdCBpZiB5b3UncmUgaW4g
dGhlIGNvbXBpbGVyIHRocmVhZCwgYW5kIHlvdToKKyAgICAvLworICAgIC8vIDEpIE9ic2VydmUg
dGhhdCB0aGUgc2V0IElzV2F0Y2hlZCBhbmQgY29tbWl0IHRvIGFkZGluZyB5b3VyIHdhdGNocG9p
bnQuCisgICAgLy8gMikgTG9hZCBhIHZhbHVlIGZyb20gYW55IHNjb3BlIHRoYXQgaGFzIHRoaXMg
d2F0Y2hwb2ludCBzZXQuCisgICAgLy8KKyAgICAvLyBUaGVuIHlvdSBjYW4gYmUgc3VyZSB0aGF0
IHRoYXQgdmFsdWUgaXMgZWl0aGVyIGdvaW5nIHRvIGJlIHRoZSBjb3JyZWN0IHZhbHVlIGZvciB0
aGF0IHZhciBmb3JldmVyLAorICAgIC8vIG9yIHRoZSB3YXRjaHBvaW50IHNldCB3aWxsIGludmFs
aWRhdGUgYW5kIHlvdSdsbCBnZXQgZmlyZWQuCisgICAgLy8KKyAgICAvLyBJdCdzIHBvc3NpYmxl
IHRvIHdyaXRlIGEgcHJvZ3JhbSB0aGF0IGZpcnN0IGNyZWF0ZXMgbXVsdGlwbGUgc2NvcGVzIHdp
dGggdGhlIHNhbWUgdmFyLCBhbmQgdGhlbgorICAgIC8vIGluaXRpYWxpemVzIHRoYXQgdmFyIGlu
IGp1c3Qgb25lIG9mIHRoZW0uIFRoaXMgbWVhbnMgdGhhdCBhIGNvbXBpbGF0aW9uIGNvdWxkIGNv
bnN0YW50LWZvbGQgdG8gb25lCisgICAgLy8gb2YgdGhlIHNjb3BlcyB0aGF0IHN0aWxsIGhhcyBh
biB1bmRlZmluZWQgdmFsdWUgZm9yIHRoaXMgdmFyaWFibGUuIFRoYXQncyBmaW5lLCBiZWNhdXNl
IGF0IHRoYXQKKyAgICAvLyBwb2ludCBhbnkgd3JpdGUgdG8gYW55IG9mIHRoZSBpbnN0YW5jZXMg
b2YgdGhhdCB2YXJpYWJsZSB3b3VsZCBmaXJlIHRoZSB3YXRjaHBvaW50LgorICAgIFdhdGNocG9p
bnRTZXQqIHdhdGNocG9pbnRTZXQoKQogICAgIHsKICAgICAgICAgaWYgKCFpc0ZhdCgpKQogICAg
ICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIHJldHVybiBmYXRFbnRyeSgpLT5tX3dhdGNocG9p
bnRzLmdldCgpOwogICAgIH0KICAgICAKLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgbm90aWZ5V3Jp
dGUoVk0mIHZtLCBKU1ZhbHVlIHZhbHVlLCBjb25zdCBGaXJlRGV0YWlsJiBkZXRhaWwpCi0gICAg
ewotICAgICAgICBpZiAoTElLRUxZKCFpc0ZhdCgpKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgbm90aWZ5V3JpdGVTbG93KHZtLCB2YWx1ZSwgZGV0YWlsKTsKLSAgICB9Ci0gICAgCiBw
cml2YXRlOgogICAgIHN0YXRpYyBjb25zdCBpbnRwdHJfdCBTbGltRmxhZyA9IDB4MTsKICAgICBz
dGF0aWMgY29uc3QgaW50cHRyX3QgUmVhZE9ubHlGbGFnID0gMHgyOwpAQCAtMzA4LDcgKzMyMiw3
IEBAIHByaXZhdGU6CiAgICAgICAgIAogICAgICAgICBpbnRwdHJfdCBtX2JpdHM7IC8vIGFsd2F5
cyBoYXMgRmF0RmxhZyBzZXQgYW5kIGV4YWN0bHkgbWF0Y2hlcyB3aGF0IHRoZSBiaXRzIHdvdWxk
IGhhdmUgYmVlbiBpZiB0aGlzIHdhc24ndCBmYXQuCiAgICAgICAgIAotICAgICAgICBSZWZQdHI8
VmFyaWFibGVXYXRjaHBvaW50U2V0PiBtX3dhdGNocG9pbnRzOworICAgICAgICBSZWZQdHI8V2F0
Y2hwb2ludFNldD4gbV93YXRjaHBvaW50czsKICAgICB9OwogICAgIAogICAgIFN5bWJvbFRhYmxl
RW50cnkmIGNvcHlTbG93KGNvbnN0IFN5bWJvbFRhYmxlRW50cnkmKTsKQEAgLTY0NiwxOCArNjYw
LDYgQEAgcHJvdGVjdGVkOgogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFn
cyA9IFN0cnVjdHVyZUlzSW1tb3J0YWwgfCBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKIAogcHJpdmF0
ZToKLSAgICBjbGFzcyBXYXRjaHBvaW50Q2xlYW51cCA6IHB1YmxpYyBVbmNvbmRpdGlvbmFsRmlu
YWxpemVyIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIFdhdGNocG9pbnRDbGVhbnVwKFN5bWJvbFRh
YmxlKik7Ci0gICAgICAgIHZpcnR1YWwgfldhdGNocG9pbnRDbGVhbnVwKCk7Ci0gICAgICAgIAot
ICAgIHByb3RlY3RlZDoKLSAgICAgICAgdmlydHVhbCB2b2lkIGZpbmFsaXplVW5jb25kaXRpb25h
bGx5KCkgb3ZlcnJpZGU7Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBTeW1ib2xUYWJsZSogbV9z
eW1ib2xUYWJsZTsKLSAgICB9OwotICAgIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIFN5bWJvbFRh
YmxlKFZNJik7CiAgICAgflN5bWJvbFRhYmxlKCk7CiAKQEAgLTY3NSwxMiArNjc3LDkgQEAgcHJp
dmF0ZToKICAgICAKICAgICBXcml0ZUJhcnJpZXI8U2NvcGVkQXJndW1lbnRzVGFibGU+IG1fYXJn
dW1lbnRzOwogICAgIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxXYXRjaHBvaW50Q2xlYW51cD4gbV93
YXRjaHBvaW50Q2xlYW51cDsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8TG9jYWxUb0VudHJ5VmVjPiBt
X2xvY2FsVG9FbnRyeTsKIAogcHVibGljOgotICAgIElubGluZVdhdGNocG9pbnRTZXQgbV9mdW5j
dGlvbkVudGVyZWRPbmNlOwotICAgIAogICAgIG11dGFibGUgQ29uY3VycmVudEpJVExvY2sgbV9s
b2NrOwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZVByb2Zp
bGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBl
UHJvZmlsZXIuY3BwCShyZXZpc2lvbiAxODIwNjkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9UeXBlUHJvZmlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBA
CiAKICNpbmNsdWRlICJJbnNwZWN0b3JQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlICJUeXBl
TG9jYXRpb24uaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKIG5hbWVz
cGFjZSBKU0MgewogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2lu
ZmVyLXVuaW5pdGlhbGl6ZWQtY2xvc3VyZS12YXIuanMKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9pbmZlci11bmluaXRpYWxpemVkLWNsb3N1cmUtdmFy
LmpzCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9p
bmZlci11bmluaXRpYWxpemVkLWNsb3N1cmUtdmFyLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMjYgQEAKK2Z1bmN0aW9uIGZvbyhwKSB7CisgICAgdmFyIHg7CisgICAgCisgICAgbm9Jbmxp
bmUoZik7CisgICAgCisgICAgaWYgKHApIHsKKyAgICAgICAgdmFyIGYgPSBmdW5jdGlvbigpIHsg
cmV0dXJuIHg7IH0KKyAgICAgICAgCisgICAgICAgIGZvbyhmYWxzZSk7CisgICAgICAgIAorICAg
ICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwOyArK2kpIHsKKyAgICAgICAgICAgIHZhciBy
ZXN1bHQgPSBmKCk7CisgICAgICAgICAgICBpZiAocmVzdWx0ICE9PSB2b2lkIDApCisgICAgICAg
ICAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0ICgxKTogIiArIHJlc3VsdDsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgeCA9IDQzOworICAgICAgICAKKyAgICAgICAgdmFyIHJl
c3VsdCA9IGYoKTsKKyAgICAgICAgaWYgKHJlc3VsdCAhPSA0MykKKyAgICAgICAgICAgIHRocm93
ICJFcnJvcjogYmFkIHJlc3VsdCAoMik6ICIgKyByZXN1bHQ7CisgICAgfSBlbHNlCisgICAgICAg
IHggPSA0MjsKK30KKworZm9vKHRydWUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rl
c3RzL3N0cmVzcy9zaW5nbGV0b24tc2NvcGUtdGhlbi1vdmVyd3JpdGUuanMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9zaW5nbGV0b24tc2NvcGUtdGhl
bi1vdmVyd3JpdGUuanMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVz
dHMvc3RyZXNzL3NpbmdsZXRvbi1zY29wZS10aGVuLW92ZXJ3cml0ZS5qcwkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDIwIEBACitmdW5jdGlvbiBmb28oYSkgeworICAgIHZhciB4ID0gYSArIDE7
CisgICAgdmFyIGYgPSBmdW5jdGlvbihhKSB7CisgICAgICAgIHJldHVybiB4ICsgYTsKKyAgICB9
OworICAgIG5vSW5saW5lKGYpOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7ICsraSkg
eworICAgICAgICB2YXIgcmVzdWx0ID0gZihpKTsKKyAgICAgICAgaWYgKHJlc3VsdCAhPSBhICsg
MSArIGkpCisgICAgICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQ6ICIgKyByZXN1bHQ7
CisgICAgfQorICAgIHggPSA5OTk7CisgICAgdmFyIHJlc3VsdCA9IGYoMSk7CisgICAgaWYgKHJl
c3VsdCAhPSA5OTkgKyAxKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQ6ICIgKyBy
ZXN1bHQ7Cit9CisKK25vSW5saW5lKGZvbyk7Citmb3IgKHZhciBpID0gMDsgaSA8IDM7ICsraSkK
KyAgICBmb28oNDIgKyBpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJl
c3Mvc2luZ2xldG9uLXNjb3BlLXRoZW4tcmVhbGxvYy1hbmQtb3ZlcndyaXRlLmpzCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3Mvc2luZ2xldG9uLXNjb3Bl
LXRoZW4tcmVhbGxvYy1hbmQtb3ZlcndyaXRlLmpzCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9zaW5nbGV0b24tc2NvcGUtdGhlbi1yZWFsbG9jLWFu
ZC1vdmVyd3JpdGUuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMCBAQAorZnVuY3Rpb24g
Zm9vKGEpIHsKKyAgICB2YXIgeCA9IGEgKyAxOworICAgIHJldHVybiBmdW5jdGlvbihhKSB7Cisg
ICAgICAgIHJldHVybiB4ICsgYTsKKyAgICB9OworfQorCit2YXIgZiA9IGZvbyg0Mik7Citub0lu
bGluZShmKTsKKworZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsgKytpKSB7CisgICAgdmFyIHJl
c3VsdCA9IGYoaSk7CisgICAgaWYgKHJlc3VsdCAhPSA0MiArIDEgKyBpKQorICAgICAgICB0aHJv
dyAiRXJyb3I6IGJhZCByZXN1bHQ6ICIgKyByZXN1bHQ7Cit9CisKK3ZhciBmID0gZm9vKDQzKTsK
K3ZhciByZXN1bHQgPSBmKDEpOworaWYgKHJlc3VsdCAhPSA0MyArIDEgKyAxKQorICAgIHRocm93
ICJFcnJvcjogYmFkIHJlc3VsdDogIiArIHJlc3VsdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS90ZXN0cy9zdHJlc3Mvc2luZ2xldG9uLXNjb3BlLXRoZW4tcmVhbGxvYy5qcwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3NpbmdsZXRvbi1zY29w
ZS10aGVuLXJlYWxsb2MuanMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
dGVzdHMvc3RyZXNzL3NpbmdsZXRvbi1zY29wZS10aGVuLXJlYWxsb2MuanMJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwyMCBAQAorZnVuY3Rpb24gZm9vKGEpIHsKKyAgICB2YXIgeCA9IGEgKyAx
OworICAgIHJldHVybiBmdW5jdGlvbihhKSB7CisgICAgICAgIHJldHVybiB4ICs9IGE7CisgICAg
fTsKK30KKwordmFyIGYgPSBmb28oNDIpOworbm9JbmxpbmUoZik7CisKK2ZvciAodmFyIGkgPSAw
OyBpIDwgMTAwMDA7ICsraSkgeworICAgIHZhciByZXN1bHQgPSBmKDEpOworICAgIGlmIChyZXN1
bHQgIT0gNDIgKyAxICsgaSArIDEpCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdDog
IiArIHJlc3VsdDsKK30KKwordmFyIGYgPSBmb28oNDMpOwordmFyIHJlc3VsdCA9IGYoMSk7Citp
ZiAocmVzdWx0ICE9IDQzICsgMSArIDEpCisgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0OiAi
ICsgcmVzdWx0OwpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMTgyMTkxKQorKysgTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjAgQEAKKzIwMTUtMDMtMzEgIEZpbGlw
IFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBKU0Mgc2hvdWxkIGRldGVjdCBz
aW5nbGV0b24gZnVuY3Rpb25zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNDMyMzIKKworICAgICAgICBSZXZpZXdlZCBieSBNaWNoYWVsIFNhYm9mZi4K
KworICAgICAgICAqIGpzL3JlZ3Jlc3MvY3JlYXRlLWxvdHMtb2YtZnVuY3Rpb25zLWV4cGVjdGVk
LnR4dDogQWRkZWQuCisgICAgICAgICoganMvcmVncmVzcy9jcmVhdGUtbG90cy1vZi1mdW5jdGlv
bnMuaHRtbDogQWRkZWQuCisgICAgICAgICoganMvcmVncmVzcy9uby1pbmxpbmUtY29uc3RydWN0
b3ItZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL25vLWlubGluZS1j
b25zdHJ1Y3Rvci5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL3NjcmlwdC10ZXN0
cy9jcmVhdGUtbG90cy1vZi1mdW5jdGlvbnMuanM6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jl
c3Mvc2NyaXB0LXRlc3RzL25vLWlubGluZS1jb25zdHJ1Y3Rvci5qczogQWRkZWQuCisgICAgICAg
ICoganMvcmVncmVzcy9zY3JpcHQtdGVzdHMvc2luZ2xldG9uLXNjb3BlLmpzOiBBZGRlZC4KKyAg
ICAgICAgKiBqcy9yZWdyZXNzL3NpbmdsZXRvbi1zY29wZS1leHBlY3RlZC50eHQ6IEFkZGVkLgor
ICAgICAgICAqIGpzL3JlZ3Jlc3Mvc2luZ2xldG9uLXNjb3BlLmh0bWw6IEFkZGVkLgorCiAyMDE1
LTAzLTMxICBCZXRoIERha2luICA8YmRha2luQGFwcGxlLmNvbT4KIAogICAgICAgICBSRUdSRVNT
SU9OIChyMTczNDg0KTogUmVkdWNpbmcgY29udGVudCBvZiBzY3JvbGxhYmxlIHJlZ2lvbiBkb2Vz
IG5vdCByZXNldCBzY3JvbGwgCkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2NyZWF0ZS1s
b3RzLW9mLWZ1bmN0aW9ucy1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
anMvcmVncmVzcy9jcmVhdGUtbG90cy1vZi1mdW5jdGlvbnMtZXhwZWN0ZWQudHh0CShyZXZpc2lv
biAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9jcmVhdGUtbG90cy1vZi1mdW5jdGlvbnMt
ZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAgQEAKK0pTUmVncmVzcy9j
cmVhdGUtbG90cy1vZi1mdW5jdGlvbnMKKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2Vy
aWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisK
K1BBU1Mgbm8gZXhjZXB0aW9uIHRocm93bgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1
ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvY3JlYXRl
LWxvdHMtb2YtZnVuY3Rpb25zLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVn
cmVzcy9jcmVhdGUtbG90cy1vZi1mdW5jdGlvbnMuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91
dFRlc3RzL2pzL3JlZ3Jlc3MvY3JlYXRlLWxvdHMtb2YtZnVuY3Rpb25zLmh0bWwJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwxMiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9E
VEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJj
ZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0IHNy
Yz0iLi4vLi4vcmVzb3VyY2VzL3JlZ3Jlc3MtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3Jj
PSJzY3JpcHQtdGVzdHMvY3JlYXRlLWxvdHMtb2YtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KKzxz
Y3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcmVncmVzcy1wb3N0LmpzIj48L3NjcmlwdD4KKzxz
Y3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwv
Ym9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvbm8taW5saW5lLWNv
bnN0cnVjdG9yLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdy
ZXNzL25vLWlubGluZS1jb25zdHJ1Y3Rvci1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBM
YXlvdXRUZXN0cy9qcy9yZWdyZXNzL25vLWlubGluZS1jb25zdHJ1Y3Rvci1leHBlY3RlZC50eHQJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMCBAQAorSlNSZWdyZXNzL25vLWlubGluZS1jb25z
dHJ1Y3RvcgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1l
c3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBubyBleGNlcHRp
b24gdGhyb3duCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExF
VEUKKwpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9uby1pbmxpbmUtY29uc3RydWN0b3Iu
aHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL25vLWlubGluZS1jb25z
dHJ1Y3Rvci5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9uby1p
bmxpbmUtY29uc3RydWN0b3IuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyIEBACis8
IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxo
ZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3Jp
cHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcmVncmVz
cy1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy9uby1pbmxpbmUt
Y29uc3RydWN0b3IuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9y
ZWdyZXNzLXBvc3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9q
cy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0
VGVzdHMvanMvcmVncmVzcy9zaW5nbGV0b24tc2NvcGUtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2luZ2xldG9uLXNjb3BlLWV4cGVjdGVkLnR4dAko
cmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2luZ2xldG9uLXNjb3BlLWV4
cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwIEBACitKU1JlZ3Jlc3Mvc2lu
Z2xldG9uLXNjb3BlCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFT
UyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIG5vIGV4
Y2VwdGlvbiB0aHJvd24KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBD
T01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NpbmdsZXRvbi1zY29wZS5o
dG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2luZ2xldG9uLXNjb3Bl
Lmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NpbmdsZXRvbi1z
Y29wZS5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIgQEAKKzwhRE9DVFlQRSBIVE1M
IFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0
IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4K
Kzxib2R5PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNzLXByZS5qcyI+PC9z
Y3JpcHQ+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL3NpbmdsZXRvbi1zY29wZS5qcyI+PC9z
Y3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3JlZ3Jlc3MtcG9zdC5qcyI+PC9z
Y3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9z
Y3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3Nj
cmlwdC10ZXN0cy9jcmVhdGUtbG90cy1vZi1mdW5jdGlvbnMuanMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvY3JlYXRlLWxvdHMtb2YtZnVuY3Rpb25z
LmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMv
Y3JlYXRlLWxvdHMtb2YtZnVuY3Rpb25zLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIg
QEAKK2Z1bmN0aW9uIGZvbygpIHsKKyAgICB2YXIgcmVzdWx0ID0gMDsKKyAgICBmb3IgKHZhciBp
ID0gMDsgaSA8IDEwMDsgKytpKQorICAgICAgICByZXN1bHQgKz0gKGZ1bmN0aW9uKCkgeyByZXR1
cm4gaSB9KSgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK2ZvciAodmFyIGkgPSAwOyBpIDwg
MTAwMDA7ICsraSkgeworICAgIHZhciByZXN1bHQgPSBmb28oKTsKKyAgICBpZiAocmVzdWx0ICE9
IDQ5NTApCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdDogIiArIHJlc3VsdDsKK30K
SW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL25vLWlubGluZS1jb25z
dHJ1Y3Rvci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10
ZXN0cy9uby1pbmxpbmUtY29uc3RydWN0b3IuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0
cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9uby1pbmxpbmUtY29uc3RydWN0b3IuanMJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwxMyBAQAorZnVuY3Rpb24gRm9vKCkgeworICAgIHZhciBvID0g
e2Y6e2Y6e2Y6e2Y6NDJ9fX19OworICAgIHRoaXMuZiA9IDQyOworfQorCitub0lubGluZShGb28p
OworCitmb3IgKHZhciBpID0gMDsgaSA8IDMwMDAwMDA7ICsraSkgeworICAgIHZhciByZXN1bHQg
PSBuZXcgRm9vKCk7CisgICAgaWYgKHJlc3VsdC5mICE9IDQyKQorICAgICAgICB0aHJvdyAiRXJy
b3I6IGJhZCByZXN1bHQ6ICIgKyByZXN1bHQuZjsKK30KKwpJbmRleDogTGF5b3V0VGVzdHMvanMv
cmVncmVzcy9zY3JpcHQtdGVzdHMvc2luZ2xldG9uLXNjb3BlLmpzCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL3NpbmdsZXRvbi1zY29wZS5qcwkocmV2
aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL3NpbmdsZXRv
bi1zY29wZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDE2IEBACitmdW5jdGlvbiBmb28o
KSB7CisgICAgdmFyIHggPSA0MjsKKyAgICB2YXIgeSA9IDQzOworICAgIHJldHVybiBmdW5jdGlv
bih6KSB7CisgICAgICAgIHZhciByZXN1bHQgPSB4ICsgeTsKKyAgICAgICAgeCArPSB6OworICAg
ICAgICB5ICs9IHo7CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorfQorCit2YXIgZiA9
IGZvbygpOworbm9JbmxpbmUoZik7CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDAwMDA7ICsr
aSkKKyAgICBmKDEpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>249865</attachid>
            <date>2015-03-31 16:01:50 -0700</date>
            <delta_ts>2015-04-07 17:04:57 -0700</delta_ts>
            <desc>the patch?</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>119411</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTgyMjAwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5NyBA
QAorMjAxNS0wMy0zMSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEpTQyBzaG91bGQgZGV0ZWN0IHNpbmdsZXRvbiBmdW5jdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MzIzMgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE1pY2hhZWwgU2Fib2ZmLgorICAgICAgICAKKyAgICAgICAgVGhpcyBzdGFydGVkIG91dCBh
cyBhbiBhdHRlbXB0IHRvIG1ha2UgY29uc3RydWN0b3JzIGZhc3RlciBieSBkZXRlY3Rpbmcgd2hl
biBhIGNvbnN0cnVjdG9yIGlzIGEKKyAgICAgICAgc2luZ2xldG9uLiBUaGUgaWRlYSBpcyB0aGF0
IGVhY2ggRnVuY3Rpb25FeGVjdXRhYmxlIGhhcyBhIFZhcmlhYmxlV2F0Y2hwb2ludFNldCAtIGEg
d2F0Y2hwb2ludAorICAgICAgICBhbG9uZyB3aXRoIGFuIGluZmVycmVkIHZhbHVlIC0gdGhhdCBk
ZXRlY3RzIGlmIG9ubHkgb25lIEpTRnVuY3Rpb24gaGFzIGJlZW4gYWxsb2NhdGVkIGZvciB0aGF0
CisgICAgICAgIGV4ZWN1dGFibGUsIGFuZCBpZiBzbywgd2hhdCB0aGF0IEpTRnVuY3Rpb24gaXMu
IFRoZW4sIGluc2lkZSB0aGUgY29kZSBmb3IgdGhlIEZ1bmN0aW9uRXhlY3V0YWJsZSwKKyAgICAg
ICAgaWYgdGhlIHdhdGNocG9pbnQgc2V0IGhhcyBhbiBpbmZlcnJlZCB2YWx1ZSAoaS5lLiBpdCdz
IGJlZW4gaW5pdGlhbGl6ZWQgYW5kIGl0IGlzIHN0aWxsIHZhbGlkKSwKKyAgICAgICAgd2UgY2Fu
IGNvbnN0YW50LWZvbGQgR2V0Q2FsbGVlLgorICAgICAgICAKKyAgICAgICAgVW5mb3J0dW5hdGVs
eSwgY29uc3RydWN0b3JzIGRvbid0IHVzZSBHZXRDYWxsZWUgYW55bW9yZSwgc28gdGhhdCBkaWRu
J3QgcGFuIG91dC4gQnV0IGluIHRoZQorICAgICAgICBwcm9jZXNzIEkgcmVhbGl6ZWQgdGhyZWUg
dGhpbmdzOgorICAgICAgICAKKyAgICAgICAgLSBUaGlzIGFsbG93cyB1cyB0byBjb21wbGV0ZWx5
IGVsaW1pbmF0ZSB0aGUgR2V0Q2FsbGVlL0dldFNjb3BlIHNlcXVlbmNlIHRoYXQgd2Ugc3RpbGwg
c29tZXRpbWVzCisgICAgICAgICAgaGFkIGV2ZW4gaW4gY29kZSB3aGVyZSBvdXIgc2luZ2xldG9u
LWNsb3N1cmUgZGV0ZWN0aW9uIHdvcmtlZC4gVGhhdCdzIGJlY2F1c2Ugc2luZ2xldG9uLWNsb3N1
cmUKKyAgICAgICAgICBpbmZlcmVuY2Ugd29ya2VkIGF0IHRoZSBvcF9yZXNvbHZlX3Njb3BlLCBh
bmQgdGhhdCBvcF9yZXNvbHZlX3Njb3BlIHN0aWxsIG5lZWRlZCB0byBrZWVwIGFsaXZlCisgICAg
ICAgICAgdGhlIGluY29taW5nIHNjb3BlIGluIGNhc2Ugd2UgT1NSIGV4aXQuIEJ1dCBieSBjb25z
dGFudC1mb2xkaW5nIEdldENhbGxlZSwgdGhhdCBzZXF1ZW5jZQorICAgICAgICAgIGRpc2FwcGVh
cnMuIE9TUiBleGl0IGNhbiByZW1hdGVyaWFsaXplIHRoZSBjYWxsZWUgb3IgdGhlIHNjb3BlIGJ5
IGp1c3Qga25vd2luZyB0aGVpciBjb25zdGFudAorICAgICAgICAgIHZhbHVlcy4KKyAgICAgICAg
CisgICAgICAgIC0gVGhpcyBhbGxvd3MgdXMgdG8gZWxpbWluYXRlIHRoZSBmdW5jdGlvbiByZWVu
dHJ5IHdhdGNocG9pbnQuIFRoYXQgd2F0Y2hwb2ludCBpbmZlcnJlZCBzaW5nbGV0b24KKyAgICAg
ICAgICBjbG9zdXJlcy4gQnV0IHdlIGRvbid0IG5lZWQgdG8gaW5mZXIgc2luZ2xldG9uIGNsb3N1
cmVzLCBpZiB3ZSBhcmUgaW5mZXJyaW5nIHNpbmdsZXRvbiBjYWxsZWVzLgorICAgICAgICAgIFNv
LCB0aGF0IGtpbGxzIGEgYnVuY2ggb2YgY29kZS4KKyAgICAgICAgCisgICAgICAgIC0gVGhpcyBh
bGxvd3MgdXMgdG8gdXNlIGEgbm9ybWFsIFdhdGNocG9pbnRTZXQsIGluc3RlYWQgb2YgYSBWYXJp
YWJsZVdhdGNocG9pbnRTZXQsIGZvciBpbmZlcnJpbmcKKyAgICAgICAgICBjb25zdGFudCB2YWx1
ZXMgaW4gc2NvcGVzLiBQcmV2aW91c2x5IHdoZW4gdGhlIERGRyBpbmZlcnJlZCB0aGF0IGEgY2xv
c3VyZSB2YXJpYWJsZSB3YXMKKyAgICAgICAgICBjb25zdGFudCwgaXQgd291bGRuJ3Qga25vdyB3
aGljaCBjbG9zdXJlIHRoYXQgdmFyaWFibGUgd2FzIGluIGFuZCBzbyBpdCBjb3VsZG4ndCBqdXN0
IGxvYWQgdGhhdAorICAgICAgICAgIHZhbHVlLiBCdXQgbm93IHdlIGFyZSBmaXJzdCBpbmZlcnJp
bmcgdGhhdCB0aGUgZnVuY3Rpb24gaXMgYSBzaW5nbGV0b24sIHdoaWNoIG1lYW5zIHRoYXQgd2UK
KyAgICAgICAgICBrbm93IGV4YWN0bHkgd2hhdCBzY29wZSBpdCBwb2ludHMgdG8sIGFuZCB3ZSBj
YW4gbG9hZCB0aGUgdmFsdWUgZnJvbSB0aGUgc2NvcGUuIFVzaW5nIGEKKyAgICAgICAgICBXYXRj
aHBvaW50U2V0IGluc3RlYWQgb2YgYSBWYXJpYWJsZVdhdGNocG9pbnRTZXQgc2F2ZXMgc29tZSBt
ZW1vcnkgYW5kIHNpbXBsaWZpZXMgYSBidW5jaCBvZgorICAgICAgICAgIGNvZGUuIFRoaXMgYWxz
byBtZWFucyB0aGF0IG5vdywgdGhlIG9ubHkgdXNlciBvZiBWYXJpYWJsZVdhdGNocG9pbnRTZXQg
aXMgRnVuY3Rpb25FeGVjdXRhYmxlLgorICAgICAgICAgIEkndmUgdHdlYWtlZCB0aGUgY29kZSBv
ZiBWYXJpYWJsZVdhdGNocG9pbnRTZXQgdG8gcmVkdWNlIGl0cyBwb3dlciB0byBqdXN0IGJlIHdo
YXQKKyAgICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUgd2FudHMuCisgICAgICAgIAorICAgICAg
ICBUaGlzIGFsc28gaGFzIHRoZSBlZmZlY3Qgb2Ygc2ltcGxpZnlpbmcgdGhlIGltcGxlbWVudGF0
aW9uIG9mIGJsb2NrIHNjb3BpbmcuIFByaW9yIHRvIHRoaXMKKyAgICAgICAgY2hhbmdlLCBibG9j
ayBzY29waW5nIHdvdWxkIGhhZCBoYWQgdG8gaGF2ZSBzb21lIHN0b3J5IGZvciB0aGUgZnVuY3Rp
b24gcmVlbnRyeSB3YXRjaHBvaW50IG9uIGFueQorICAgICAgICBuZXN0ZWQgc3ltYm9sIHRhYmxl
LiBUaGF0J3MgdG90YWxseSB3ZWlyZCB0byB0aGluayBhYm91dDsgaXQncyBub3QgcmVhbGx5IGEg
ZnVuY3Rpb24gcmVlbnRyeSBidXQKKyAgICAgICAgYSBzY29wZSByZWVudHJ5LiBOb3cgd2UgZG9u
J3QgaGF2ZSB0byB0aGluayBhYm91dCB0aGlzLiBDb25zdGFudCBpbmZlcmVuY2Ugb24gbmVzdGVk
IHNjb3BlcyB3aWxsCisgICAgICAgICJqdXN0IHdvcmsiOiBpZiB3ZSBwcm92ZSB0aGF0IHdlIGtu
b3cgdGhlIGNvbnN0YW50IHZhbHVlIG9mIHRoZSBzY29wZSB0aGVuIHRoZSBtYWNoaW5lcnkga2lj
a3MKKyAgICAgICAgaW4sIG90aGVyd2lzZSBpdCBkb2Vzbid0LgorCisgICAgICAgICogQ01ha2VM
aXN0cy50eHQ6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29y
ZS52Y3hwcm9qOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2o6CisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0Lmpzb246CisgICAgICAgICog
Ynl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuaDoKKyAgICAgICAgKEpTQzo6Y29tcHV0ZVVzZXNGb3JC
eXRlY29kZU9mZnNldCk6CisgICAgICAgIChKU0M6OmNvbXB1dGVEZWZzRm9yQnl0ZWNvZGVPZmZz
ZXQpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OkNv
ZGVCbG9jazo6ZHVtcEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpDb2RlQmxv
Y2spOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KToK
KyAgICAgICAgKiBieXRlY29kZS9Db2RlT3JpZ2luLmNwcDoKKyAgICAgICAgKEpTQzo6SW5saW5l
Q2FsbEZyYW1lOjpjYWxsZWVDb25zdGFudCk6CisgICAgICAgIChKU0M6OklubGluZUNhbGxGcmFt
ZTo6dmlzaXRBZ2dyZWdhdGUpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVPcmlnaW4uaDoKKyAg
ICAgICAgKEpTQzo6SW5saW5lQ2FsbEZyYW1lOjpjYWxsZWVDb25zdGFudCk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OklubGluZUNhbGxGcmFtZTo6dmlzaXRBZ2dyZWdhdGUpOiBEZWxldGVkLgor
ICAgICAgICAqIGJ5dGVjb2RlL0luc3RydWN0aW9uLmg6CisgICAgICAgICogYnl0ZWNvZGUvVmFy
aWFibGVXYXRjaHBvaW50U2V0LmNwcDoKKyAgICAgICAgKEpTQzo6VmFyaWFibGVXYXRjaHBvaW50
U2V0Ojpub3RpZnlXcml0ZSk6CisgICAgICAgIChKU0M6OlZhcmlhYmxlV3JpdGVGaXJlRGV0YWls
OjpkdW1wKTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9WYXJpYWJsZVdhdGNocG9pbnRT
ZXQuaDoKKyAgICAgICAgKEpTQzo6VmFyaWFibGVXYXRjaHBvaW50U2V0OjpWYXJpYWJsZVdhdGNo
cG9pbnRTZXQpOgorICAgICAgICAoSlNDOjpWYXJpYWJsZVdhdGNocG9pbnRTZXQ6Om5lZWRUb0Zp
bmFsaXplKToKKyAgICAgICAgKEpTQzo6VmFyaWFibGVXYXRjaHBvaW50U2V0OjpmaW5hbGl6ZVVu
Y29uZGl0aW9uYWxseSk6CisgICAgICAgIChKU0M6OlZhcmlhYmxlV3JpdGVGaXJlRGV0YWlsOjpW
YXJpYWJsZVdyaXRlRmlyZURldGFpbCk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUvVmFy
aWFibGVXYXRjaHBvaW50U2V0SW5saW5lcy5oOgorICAgICAgICAoSlNDOjpWYXJpYWJsZVdhdGNo
cG9pbnRTZXQ6Om5vdGlmeVdyaXRlKToKKyAgICAgICAgKiBieXRlY29kZS9WYXJpYWJsZVdyaXRl
RmlyZURldGFpbC5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpWYXJpYWJsZVdyaXRlRmlyZURl
dGFpbDo6ZHVtcCk6CisgICAgICAgICogYnl0ZWNvZGUvVmFyaWFibGVXcml0ZUZpcmVEZXRhaWwu
aDogQWRkZWQuCisgICAgICAgIChKU0M6OlZhcmlhYmxlV3JpdGVGaXJlRGV0YWlsOjpWYXJpYWJs
ZVdyaXRlRmlyZURldGFpbCk6CisgICAgICAgICogYnl0ZWNvZGUvV2F0Y2hwb2ludC5oOgorICAg
ICAgICAoSlNDOjpXYXRjaHBvaW50U2V0OjpzdGFydFdhdGNoaW5nKToKKyAgICAgICAgKEpTQzo6
V2F0Y2hwb2ludFNldDo6ZmlyZUFsbCk6CisgICAgICAgIChKU0M6OldhdGNocG9pbnRTZXQ6OnRv
dWNoKToKKyAgICAgICAgKEpTQzo6V2F0Y2hwb2ludFNldDo6aW52YWxpZGF0ZSk6CisgICAgICAg
IChKU0M6OklubGluZVdhdGNocG9pbnRTZXQ6OnRvdWNoKToKKyAgICAgICAgKiBieXRlY29tcGls
ZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRv
cjo6Qnl0ZWNvZGVHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6
ZW1pdFJlc29sdmVTY29wZSk6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJ
bmxpbmVzLmg6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFj
dFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKToKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQ
YXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpnZXQpOgorICAg
ICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpnZXRTY29wZSk6CisgICAgICAgIChKU0M6
OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2spOgorICAgICAgICAqIGRmZy9ERkdDYXBh
YmlsaXRpZXMuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmNhcGFiaWxpdHlMZXZlbCk6CisgICAg
ICAgICogZGZnL0RGR0Nsb2JiZXJpemUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpjbG9iYmVyaXpl
KToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguY3BwOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBo
OjpkdW1wKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6dHJ5R2V0Q29uc3RhbnRDbG9zdXJl
VmFyKToKKyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6
Omhhc1dhdGNocG9pbnRTZXQpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OndhdGNocG9pbnRT
ZXQpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc1ZhcmlhYmxlV2F0Y2hwb2ludFNldCk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6dmFyaWFibGVXYXRjaHBvaW50U2V0
KTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6CisgICAgICAgICog
ZGZnL0RGR09wZXJhdGlvbnMuaDoKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlTmV3RnVuY3Rpb24p
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlTm90aWZ5V3JpdGUp
OgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpjYWxsT3BlcmF0aW9uKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3Vs
YXRpdmVKSVQzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1Zh
cmFyZ3NGb3J3YXJkaW5nUGhhc2UuY3BwOgorICAgICAgICAqIGZ0bC9GVExJbnRyaW5zaWNSZXBv
c2l0b3J5Lmg6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcDoKKyAgICAgICAg
KEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZU5vdGlmeVdyaXRlKToKKyAgICAgICAg
KiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHA6CisgICAgICAgIChKU0M6OlN0YWNrRnJhbWU6
OmZyaWVuZGx5U291cmNlVVJMKToKKyAgICAgICAgKEpTQzo6U3RhY2tGcmFtZTo6ZnJpZW5kbHlG
dW5jdGlvbk5hbWUpOgorICAgICAgICAqIGludGVycHJldGVyL0ludGVycHJldGVyLmg6CisgICAg
ICAgIChKU0M6OlN0YWNrRnJhbWU6OmZyaWVuZGx5U291cmNlVVJMKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6U3RhY2tGcmFtZTo6ZnJpZW5kbHlGdW5jdGlvbk5hbWUpOiBEZWxldGVkLgorICAg
ICAgICAqIGppdC9KSVQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXROb3RpZnlXcml0ZSk6
CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcyk6CisgICAgICAgICog
aml0L0pJVC5oOgorICAgICAgICAqIGppdC9KSVRPcGNvZGVzLmNwcDoKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X29wX3RvdWNoX2VudHJ5KTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvSklUT3Bl
cmF0aW9ucy5jcHA6CisgICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMuaDoKKyAgICAgICAgKiBq
aXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRQdXRHbG9i
YWxWYXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRQdXRDbG9zdXJlVmFyKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0Tm90aWZ5V3JpdGUpOiBEZWxldGVkLgorICAgICAgICAqIGppdC9KSVRQ
cm9wZXJ0eUFjY2VzczMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0UHV0R2xvYmFs
VmFyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0UHV0Q2xvc3VyZVZhcik6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdE5vdGlmeVdyaXRlKTogRGVsZXRlZC4KKyAgICAgICAgKiBsbGludC9MTElu
dFNsb3dQYXRocy5jcHA6CisgICAgICAgIChKU0M6OkxMSW50OjpMTElOVF9TTE9XX1BBVEhfREVD
TCk6CisgICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc206CisgICAgICAgICog
bGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbToKKyAgICAgICAgKiBsbGludC9Mb3dM
ZXZlbEludGVycHJldGVyNjQuYXNtOgorICAgICAgICAqIHJ1bnRpbWUvQ29tbW9uU2xvd1BhdGhz
LmNwcDoKKyAgICAgICAgKEpTQzo6U0xPV19QQVRIX0RFQ0wpOiBEZWxldGVkLgorICAgICAgICAq
IHJ1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmg6CisgICAgICAgICogcnVudGltZS9FeGVjdXRhYmxl
LmNwcDoKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25FeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuKToK
KyAgICAgICAgKEpTQzo6RnVuY3Rpb25FeGVjdXRhYmxlOjpXYXRjaHBvaW50Q2xlYW51cDo6V2F0
Y2hwb2ludENsZWFudXApOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFibGU6OldhdGNo
cG9pbnRDbGVhbnVwOjp+V2F0Y2hwb2ludENsZWFudXApOgorICAgICAgICAoSlNDOjpGdW5jdGlv
bkV4ZWN1dGFibGU6OldhdGNocG9pbnRDbGVhbnVwOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSk6
CisgICAgICAgICogcnVudGltZS9FeGVjdXRhYmxlLmg6CisgICAgICAgIChKU0M6OkZ1bmN0aW9u
RXhlY3V0YWJsZTo6ZnVuY3Rpb25SZWFsbG9jYXRpb25XYXRjaHBvaW50U2V0KToKKyAgICAgICAg
KiBydW50aW1lL0pTQ0lubGluZXMuaDoKKyAgICAgICAgKiBydW50aW1lL0pTRnVuY3Rpb24uY3Bw
OgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpjcmVhdGUpOgorICAgICAgICAqIHJ1bnRpbWUv
SlNGdW5jdGlvbi5oOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpjcmVhdGVXaXRoSW52YWxp
ZGF0ZWRSZWFsbG9jYXRpb25XYXRjaHBvaW50KToKKyAgICAgICAgKEpTQzo6SlNGdW5jdGlvbjo6
Y3JlYXRlSW1wbCk6CisgICAgICAgIChKU0M6OkpTRnVuY3Rpb246OmNyZWF0ZSk6IERlbGV0ZWQu
CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpT
R2xvYmFsT2JqZWN0OjphZGRHbG9iYWxWYXIpOgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVj
dDo6YWRkRnVuY3Rpb24pOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuaDoKKyAg
ICAgICAgKiBydW50aW1lL0pTTGV4aWNhbEVudmlyb25tZW50LmNwcDoKKyAgICAgICAgKEpTQzo6
SlNMZXhpY2FsRW52aXJvbm1lbnQ6OnN5bWJvbFRhYmxlUHV0KToKKyAgICAgICAgKiBydW50aW1l
L0pTU2NvcGUuaDoKKyAgICAgICAgKEpTQzo6UmVzb2x2ZU9wOjpSZXNvbHZlT3ApOgorICAgICAg
ICAqIHJ1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5oOgorICAgICAgICAoSlNDOjpzeW1ib2xU
YWJsZVB1dCk6CisgICAgICAgIChKU0M6OnN5bWJvbFRhYmxlUHV0V2l0aEF0dHJpYnV0ZXMpOgor
ICAgICAgICAqIHJ1bnRpbWUvUHV0UHJvcGVydHlTbG90Lmg6CisgICAgICAgICogcnVudGltZS9T
eW1ib2xUYWJsZS5jcHA6CisgICAgICAgIChKU0M6OlN5bWJvbFRhYmxlRW50cnk6OnByZXBhcmVU
b1dhdGNoKToKKyAgICAgICAgKEpTQzo6U3ltYm9sVGFibGU6OlN5bWJvbFRhYmxlKToKKyAgICAg
ICAgKEpTQzo6U3ltYm9sVGFibGU6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpTeW1i
b2xUYWJsZUVudHJ5OjppbmZlcnJlZFZhbHVlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3lt
Ym9sVGFibGVFbnRyeTo6bm90aWZ5V3JpdGVTbG93KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
U3ltYm9sVGFibGU6OldhdGNocG9pbnRDbGVhbnVwOjpXYXRjaHBvaW50Q2xlYW51cCk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OlN5bWJvbFRhYmxlOjpXYXRjaHBvaW50Q2xlYW51cDo6fldhdGNo
cG9pbnRDbGVhbnVwKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3ltYm9sVGFibGU6OldhdGNo
cG9pbnRDbGVhbnVwOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSk6IERlbGV0ZWQuCisgICAgICAg
ICogcnVudGltZS9TeW1ib2xUYWJsZS5oOgorICAgICAgICAoSlNDOjpTeW1ib2xUYWJsZUVudHJ5
OjpkaXNhYmxlV2F0Y2hpbmcpOgorICAgICAgICAoSlNDOjpTeW1ib2xUYWJsZUVudHJ5Ojp3YXRj
aHBvaW50U2V0KToKKyAgICAgICAgKEpTQzo6U3ltYm9sVGFibGVFbnRyeTo6bm90aWZ5V3JpdGUp
OiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvVHlwZVByb2ZpbGVyLmNwcDoKKyAgICAgICAg
KiB0ZXN0cy9zdHJlc3MvaW5mZXItdW5pbml0aWFsaXplZC1jbG9zdXJlLXZhci5qczogQWRkZWQu
CisgICAgICAgICogdGVzdHMvc3RyZXNzL3NpbmdsZXRvbi1zY29wZS10aGVuLW92ZXJ3cml0ZS5q
czogQWRkZWQuCisgICAgICAgICogdGVzdHMvc3RyZXNzL3NpbmdsZXRvbi1zY29wZS10aGVuLXJl
YWxsb2MtYW5kLW92ZXJ3cml0ZS5qczogQWRkZWQuCisgICAgICAgICogdGVzdHMvc3RyZXNzL3Np
bmdsZXRvbi1zY29wZS10aGVuLXJlYWxsb2MuanM6IEFkZGVkLgorCiAyMDE1LTAzLTMxICBBbmRy
ZWFzIEtsaW5nICA8YWtsaW5nQGFwcGxlLmNvbT4KIAogICAgICAgICBMb2dpY2FsbHkgZW1wdHkg
V2Vha0Jsb2NrcyBzaG91bGQgbm90IHBpbiBkb3duIHRoZWlyIE1hcmtlZEJsb2NrcyBpbmRlZmlu
aXRlbHkuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CShyZXZpc2lvbiAx
ODIyMDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0cy50eHQJKHdvcmtpbmcg
Y29weSkKQEAgLTEwNiw2ICsxMDYsNyBAQCBzZXQoSmF2YVNjcmlwdENvcmVfU09VUkNFUwogICAg
IGJ5dGVjb2RlL1VubGlua2VkSW5zdHJ1Y3Rpb25TdHJlYW0uY3BwCiAgICAgYnl0ZWNvZGUvVmFs
dWVSZWNvdmVyeS5jcHAKICAgICBieXRlY29kZS9WYXJpYWJsZVdhdGNocG9pbnRTZXQuY3BwCisg
ICAgYnl0ZWNvZGUvVmFyaWFibGVXcml0ZUZpcmVEZXRhaWwuY3BwCiAgICAgYnl0ZWNvZGUvVmly
dHVhbFJlZ2lzdGVyLmNwcAogICAgIGJ5dGVjb2RlL1dhdGNocG9pbnQuY3BwCiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3Jl
LnZjeHByb2oKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnZjeHByb2ovSmF2YVNjcmlwdENvcmUudmN4cHJvagkocmV2aXNpb24gMTgyMjAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENv
cmUudmN4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzUzLDYgKzM1Myw3IEBACiAgICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxieXRlY29kZVxVbmxpbmtlZEluc3RydWN0aW9uU3RyZWFtLmNwcCIg
Lz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFZhbHVlUmVjb3ZlcnkuY3Bw
IiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcVmFyaWFibGVXYXRjaHBv
aW50U2V0LmNwcCIgLz4KKyAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFZhcmlh
YmxlV3JpdGVGaXJlRGV0YWlsLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5
dGVjb2RlXFZpcnR1YWxSZWdpc3Rlci5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxieXRlY29kZVxXYXRjaHBvaW50LmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4u
XGJ5dGVjb21waWxlclxCeXRlY29kZUdlbmVyYXRvci5jcHAiIC8+CkBAIC0xMDA1LDYgKzEwMDYs
NyBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcVmFsdWVQcm9maWxlLmgi
IC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxWYWx1ZVJlY292ZXJ5Lmgi
IC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxWYXJpYWJsZVdhdGNocG9p
bnRTZXQuaCIgLz4KKyAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFZhcmlhYmxl
V3JpdGVGaXJlRGV0YWlsLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29k
ZVxWaXJ0dWFsUmVnaXN0ZXIuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVj
b2RlXFdhdGNocG9pbnQuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb21w
aWxlclxCeXRlY29kZUdlbmVyYXRvci5oIiAvPgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2oJKHJldmlzaW9uIDE4MjIwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0zODMs
NiArMzgzLDggQEAKIAkJMEY2QjFDQzYxODYyQzQ3ODAwODQ1RDk3IC8qIEZUTFVud2luZEluZm8u
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNkIxQ0My
MTg2MkM0NzgwMDg0NUQ5NyAvKiBGVExVbndpbmRJbmZvLmggKi87IHNldHRpbmdzID0ge0FUVFJJ
QlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY2QjFDQzkxODY0MURGODAwODQ1RDk3IC8q
IEFyaXR5Q2hlY2tGYWlsUmV0dXJuVGh1bmtzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNkIxQ0M3MTg2NDFERjgwMDg0NUQ5NyAvKiBBcml0eUNo
ZWNrRmFpbFJldHVyblRodW5rcy5jcHAgKi87IH07CiAJCTBGNkIxQ0NBMTg2NDFERjgwMDg0NUQ5
NyAvKiBBcml0eUNoZWNrRmFpbFJldHVyblRodW5rcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2QjFDQzgxODY0MURGODAwODQ1RDk3IC8qIEFyaXR5
Q2hlY2tGYWlsUmV0dXJuVGh1bmtzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKKwkJMEY2QzczNTAxQUM5Rjk5RjAwQkUxNjgyIC8qIFZhcmlhYmxlV3Jp
dGVGaXJlRGV0YWlsLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGNkM3MzRFMUFDOUY5OUYwMEJFMTY4MiAvKiBWYXJpYWJsZVdyaXRlRmlyZURldGFp
bC5jcHAgKi87IH07CisJCTBGNkM3MzUxMUFDOUY5OUYwMEJFMTY4MiAvKiBWYXJpYWJsZVdyaXRl
RmlyZURldGFpbC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEY2QzczNEYxQUM5Rjk5RjAwQkUxNjgyIC8qIFZhcmlhYmxlV3JpdGVGaXJlRGV0YWlsLmgg
Ki87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY2RTg0
NUExOTAzMEJFRjAwNTYyNzQxIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjZFODQ1OTE5MDMwQkVGMDA1
NjI3NDEgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhLmNwcCAqLzsgfTsKIAkJMEY2RkM3NTAxOTYx
MTBBODAwRTFEMDJEIC8qIENvbXBsZXhHZXRTdGF0dXMuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2RkM3NEUxOTYxMTBBODAwRTFEMDJEIC8qIENv
bXBsZXhHZXRTdGF0dXMuY3BwICovOyB9OwogCQkwRjZGQzc1MTE5NjExMEE4MDBFMUQwMkQgLyog
Q29tcGxleEdldFN0YXR1cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY2RkM3NEYxOTYxMTBBODAwRTFEMDJEIC8qIENvbXBsZXhHZXRTdGF0dXMuaCAq
Lzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMjEwMCw2
ICsyMTAyLDggQEAKIAkJMEY2QjFDQzIxODYyQzQ3ODAwODQ1RDk3IC8qIEZUTFVud2luZEluZm8u
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gRlRMVW53aW5kSW5mby5oOyBwYXRo
ID0gZnRsL0ZUTFVud2luZEluZm8uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2
QjFDQzcxODY0MURGODAwODQ1RDk3IC8qIEFyaXR5Q2hlY2tGYWlsUmV0dXJuVGh1bmtzLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEFyaXR5Q2hlY2tGYWlsUmV0dXJu
VGh1bmtzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2QjFDQzgxODY0MURG
ODAwODQ1RDk3IC8qIEFyaXR5Q2hlY2tGYWlsUmV0dXJuVGh1bmtzLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEFyaXR5Q2hlY2tGYWlsUmV0dXJuVGh1bmtzLmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGNkM3MzRFMUFDOUY5OUYwMEJFMTY4MiAvKiBWYXJpYWJs
ZVdyaXRlRmlyZURldGFpbC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBWYXJpYWJsZVdyaXRlRmlyZURldGFpbC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGNkM3MzRGMUFDOUY5OUYwMEJFMTY4MiAvKiBWYXJpYWJsZVdyaXRlRmlyZURldGFpbC5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBWYXJpYWJsZVdyaXRlRmlyZURldGFp
bC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjZFODQ1OTE5MDMwQkVGMDA1NjI3
NDEgLyogREZHVmFyaWFibGVBY2Nlc3NEYXRhLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgbmFtZSA9IERGR1ZhcmlhYmxlQWNjZXNzRGF0YS5jcHA7IHBhdGggPSBkZmcvREZHVmFy
aWFibGVBY2Nlc3NEYXRhLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2RkM3
NEUxOTYxMTBBODAwRTFEMDJEIC8qIENvbXBsZXhHZXRTdGF0dXMuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29tcGxleEdldFN0YXR1cy5jcHA7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGNkZDNzRGMTk2MTEwQTgwMEUxRDAyRCAvKiBDb21wbGV4R2V0
U3RhdHVzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IENvbXBsZXhHZXRTdGF0
dXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTUyODAsNiArNTI4NCw4IEBACiAJ
CQkJMEZDQTkxMTIxOTVFNjZBMDAwNDI2NDM4IC8qIFZhcmlhYmxlV2F0Y2hwb2ludFNldC5jcHAg
Ki8sCiAJCQkJMEY5MTgxQzYxODQxNUNBNTAwNTdCNjY5IC8qIFZhcmlhYmxlV2F0Y2hwb2ludFNl
dC5oICovLAogCQkJCUZFNTI0OEY4MTkxNDQyRDkwMEI3RkRFNCAvKiBWYXJpYWJsZVdhdGNocG9p
bnRTZXRJbmxpbmVzLmggKi8sCisJCQkJMEY2QzczNEUxQUM5Rjk5RjAwQkUxNjgyIC8qIFZhcmlh
YmxlV3JpdGVGaXJlRGV0YWlsLmNwcCAqLywKKwkJCQkwRjZDNzM0RjFBQzlGOTlGMDBCRTE2ODIg
LyogVmFyaWFibGVXcml0ZUZpcmVEZXRhaWwuaCAqLywKIAkJCQkwRjIwQzI1ODFBODAxM0FCMDBE
QTMyMjkgLyogVmlydHVhbFJlZ2lzdGVyLmNwcCAqLywKIAkJCQkwRjQyNkE0NjE0NjBDQkFCMDAx
MzFGOEYgLyogVmlydHVhbFJlZ2lzdGVyLmggKi8sCiAJCQkJMEY5MTlEMjIxNTg1M0NERTAwNEE0
RTdEIC8qIFdhdGNocG9pbnQuY3BwICovLApAQCAtNjM1NCw2ICs2MzYwLDcgQEAKIAkJCQlBNzA5
RjJGMDE3QTBBQzA0MDA1MTJFOTggLyogU2xvd1BhdGhDYWxsLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk5MzMwNDAwNDBFNkE3NDk0MDA3ODZFNkEgLyogU21hbGxTdHJpbmdzLmggaW4gSGVhZGVycyAq
LywKIAkJCQlCQzE4QzQ2NDBFMTZGNUNEMDBCMzQ0NjAgLyogU291cmNlQ29kZS5oIGluIEhlYWRl
cnMgKi8sCisJCQkJMEY2QzczNTExQUM5Rjk5RjAwQkUxNjgyIC8qIFZhcmlhYmxlV3JpdGVGaXJl
RGV0YWlsLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ2MzBFMTZGNUNEMDBCMzQ0NjAgLyog
U291cmNlUHJvdmlkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTcwRUMwRUMzMUFBMEQ3REEwMEI2
QUFGQSAvKiBKU1N0cmluZ0l0ZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlFNDlEQzE2QzEy
RUYyOTRFMDAxODRBMUYgLyogU291cmNlUHJvdmlkZXJDYWNoZS5oIGluIEhlYWRlcnMgKi8sCkBA
IC02OTYzLDYgKzY5NzAsNyBAQAogCQkJCUE3N0YxODIxMTY0MDg4QjIwMDY0MEE0NyAvKiBDb2Rl
Q2FjaGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY4Rjk0NDYxNjY3NjRGMTAwRDYxOTcxIC8q
IENvZGVPcmlnaW4uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODZCNTgyNjcxNEQyNzk2QzAwQTlD
MzA2IC8qIENvZGVQcm9maWxlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGNkM3MzUwMUFDOUY5
OUYwMEJFMTY4MiAvKiBWYXJpYWJsZVdyaXRlRmlyZURldGFpbC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk4NkI1ODI2OTE0RDI3OTcwMDBBOUMzMDYgLyogQ29kZVByb2ZpbGluZy5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRjhGOTQzQzE2Njc2MzEzMDBENjE5NzEgLyogQ29kZVNwZWNpYWxpemF0
aW9uS2luZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjhGOTQ0MjE2Njc2MzM1MDBENjE5NzEg
LyogQ29kZVR5cGUuY3BwIGluIFNvdXJjZXMgKi8sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0Lmpzb24KPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5qc29uCShyZXZpc2lvbiAxODIyMDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0Lmpzb24JKHdvcmtp
bmcgY29weSkKQEAgLTYsNyArNiw2IEBACiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9lbnRl
ciIsICJsZW5ndGgiIDogMSB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfY3JlYXRlX2xl
eGljYWxfZW52aXJvbm1lbnQiLCAibGVuZ3RoIiA6IDMgfSwKICAgICAgICAgICAgIHsgIm5hbWUi
IDogIm9wX2dldF9zY29wZSIsICJsZW5ndGgiIDogMiB9LAotICAgICAgICAgICAgeyAibmFtZSIg
OiAib3BfdG91Y2hfZW50cnkiLCAibGVuZ3RoIiA6IDEgfSwKICAgICAgICAgICAgIHsgIm5hbWUi
IDogIm9wX2NyZWF0ZV9kaXJlY3RfYXJndW1lbnRzIiwgImxlbmd0aCIgOiAyIH0sCiAgICAgICAg
ICAgICB7ICJuYW1lIiA6ICJvcF9jcmVhdGVfc2NvcGVkX2FyZ3VtZW50cyIsICJsZW5ndGgiIDog
MyB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfY3JlYXRlX291dF9vZl9iYW5kX2FyZ3Vt
ZW50cyIsICJsZW5ndGgiIDogMiB9LApAQCAtMTAzLDcgKzEwMiw3IEBACiAgICAgICAgICAgICB7
ICJuYW1lIiA6ICJvcF9jb25zdHJ1Y3RfdmFyYXJncyIsICJsZW5ndGgiIDogOSB9LAogICAgICAg
ICAgICAgeyAibmFtZSIgOiAib3Bfc3RyY2F0IiwgImxlbmd0aCIgOiA0IH0sCiAgICAgICAgICAg
ICB7ICJuYW1lIiA6ICJvcF90b19wcmltaXRpdmUiLCAibGVuZ3RoIiA6IDMgfSwKLSAgICAgICAg
ICAgIHsgIm5hbWUiIDogIm9wX3Jlc29sdmVfc2NvcGUiLCAibGVuZ3RoIiA6IDcgfSwKKyAgICAg
ICAgICAgIHsgIm5hbWUiIDogIm9wX3Jlc29sdmVfc2NvcGUiLCAibGVuZ3RoIiA6IDYgfSwKICAg
ICAgICAgICAgIHsgIm5hbWUiIDogIm9wX2dldF9mcm9tX3Njb3BlIiwgImxlbmd0aCIgOiA4IH0s
CiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9wdXRfdG9fc2NvcGUiLCAibGVuZ3RoIiA6IDcg
fSwKICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX2dldF9mcm9tX2FyZ3VtZW50cyIsICJsZW5n
dGgiIDogNSB9LApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2Rl
VXNlRGVmLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5
dGVjb2RlVXNlRGVmLmgJKHJldmlzaW9uIDE4MjIwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9CeXRlY29kZVVzZURlZi5oCSh3b3JraW5nIGNvcHkpCkBAIC01MCw3ICs1MCw2
IEBAIHZvaWQgY29tcHV0ZVVzZXNGb3JCeXRlY29kZU9mZnNldCgKICAgICBjYXNlIG9wX25ld19v
YmplY3Q6CiAgICAgY2FzZSBvcF9lbnRlcjoKICAgICBjYXNlIG9wX2NhdGNoOgotICAgIGNhc2Ug
b3BfdG91Y2hfZW50cnk6CiAgICAgY2FzZSBvcF9wcm9maWxlX2NvbnRyb2xfZmxvdzoKICAgICBj
YXNlIG9wX2NyZWF0ZV9kaXJlY3RfYXJndW1lbnRzOgogICAgIGNhc2Ugb3BfY3JlYXRlX291dF9v
Zl9iYW5kX2FyZ3VtZW50czoKQEAgLTI3OCw3ICsyNzcsNiBAQCB2b2lkIGNvbXB1dGVEZWZzRm9y
Qnl0ZWNvZGVPZmZzZXQoQ29kZUJsCiAgICAgY2FzZSBvcF9wdXRfYnlfaW5kZXg6CiAgICAgY2Fz
ZSBvcF9wcm9maWxlX3R5cGU6CiAgICAgY2FzZSBvcF9wcm9maWxlX2NvbnRyb2xfZmxvdzoKLSAg
ICBjYXNlIG9wX3RvdWNoX2VudHJ5OgogICAgIGNhc2Ugb3BfcHV0X3RvX2FyZ3VtZW50czoKICNk
ZWZpbmUgTExJTlRfSEVMUEVSX09QQ09ERVMob3Bjb2RlLCBsZW5ndGgpIGNhc2Ugb3Bjb2RlOgog
ICAgICAgICBGT1JfRUFDSF9MTElOVF9PUENPREVfRVhURU5TSU9OKExMSU5UX0hFTFBFUl9PUENP
REVTKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
Y3BwCShyZXZpc2lvbiAxODIyMDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Q29kZUJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzMzLDEwICs3MzMsNiBAQCB2b2lkIENv
ZGVCbG9jazo6ZHVtcEJ5dGVjb2RlKAogICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91
dCwgZXhlYywgbG9jYXRpb24sIGl0LCAiZW50ZXIiKTsKICAgICAgICAgICAgIGJyZWFrOwogICAg
ICAgICB9Ci0gICAgICAgIGNhc2Ugb3BfdG91Y2hfZW50cnk6IHsKLSAgICAgICAgICAgIHByaW50
TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgInRvdWNoX2VudHJ5Iik7Ci0g
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQogICAgICAgICBjYXNlIG9wX2NyZWF0ZV9sZXhp
Y2FsX2Vudmlyb25tZW50OiB7CiAgICAgICAgICAgICBpbnQgcjAgPSAoKytpdCktPnUub3BlcmFu
ZDsKICAgICAgICAgICAgIGludCByMSA9ICgrK2l0KS0+dS5vcGVyYW5kOwpAQCAtMTQ4NCw3ICsx
NDgwLDYgQEAgdm9pZCBDb2RlQmxvY2s6OmR1bXBCeXRlY29kZSgKICAgICAgICAgICAgIG91dC5w
cmludGYoIiVzLCAlcywgJXMsICV1PCVzfCVzPiwgJWQiLCByZWdpc3Rlck5hbWUocjApLmRhdGEo
KSwgcmVnaXN0ZXJOYW1lKHNjb3BlKS5kYXRhKCksIGlkTmFtZShpZDAsIGlkZW50aWZpZXIoaWQw
KSkuZGF0YSgpLAogICAgICAgICAgICAgICAgIG1vZGVBbmRUeXBlLm9wZXJhbmQoKSwgcmVzb2x2
ZU1vZGVOYW1lKG1vZGVBbmRUeXBlLm1vZGUoKSksIHJlc29sdmVUeXBlTmFtZShtb2RlQW5kVHlw
ZS50eXBlKCkpLAogICAgICAgICAgICAgICAgIGRlcHRoKTsKLSAgICAgICAgICAgICsraXQ7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogICAgICAgICBjYXNlIG9wX2dldF9mcm9tX3Nj
b3BlOiB7CkBAIC0xOTMxLDggKzE5MjYsNiBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhTY3JpcHRF
eGVjdXRhYmxlKiBvCiAgICAgICAgICAgICBSZXNvbHZlT3Agb3AgPSBKU1Njb3BlOjphYnN0cmFj
dFJlc29sdmUobV9nbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwgbmVlZHNBY3RpdmF0aW9uKCks
IHNjb3BlLCBpZGVudCwgR2V0LCB0eXBlKTsKICAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsg
NF0udS5vcGVyYW5kID0gb3AudHlwZTsKICAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgNV0u
dS5vcGVyYW5kID0gb3AuZGVwdGg7Ci0gICAgICAgICAgICBpZiAob3AubGV4aWNhbEVudmlyb25t
ZW50KQotICAgICAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgNl0udS5sZXhpY2FsRW52aXJv
bm1lbnQuc2V0KCp2bSgpLCBvd25lckV4ZWN1dGFibGUsIG9wLmxleGljYWxFbnZpcm9ubWVudCk7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCkBAIC0xOTc2LDcgKzE5NjksNyBAQCBD
b2RlQmxvY2s6OkNvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBvCiAgICAgICAgICAgICAgICAg
ICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fc3ltYm9sVGFibGUtPm1fbG9jayk7CiAg
ICAgICAgICAgICAgICAgICAgIFN5bWJvbFRhYmxlOjpNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX3N5
bWJvbFRhYmxlLT5maW5kKGxvY2tlciwgdWlkKTsKICAgICAgICAgICAgICAgICAgICAgQVNTRVJU
KGl0ZXIgIT0gbV9zeW1ib2xUYWJsZS0+ZW5kKGxvY2tlcikpOwotICAgICAgICAgICAgICAgICAg
ICBpdGVyLT52YWx1ZS5wcmVwYXJlVG9XYXRjaChzeW1ib2xUYWJsZSgpKTsKKyAgICAgICAgICAg
ICAgICAgICAgaXRlci0+dmFsdWUucHJlcGFyZVRvV2F0Y2goKTsKICAgICAgICAgICAgICAgICAg
ICAgaW5zdHJ1Y3Rpb25zW2kgKyA1XS51LndhdGNocG9pbnRTZXQgPSBpdGVyLT52YWx1ZS53YXRj
aHBvaW50U2V0KCk7CiAgICAgICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgICAg
IGluc3RydWN0aW9uc1tpICsgNV0udS53YXRjaHBvaW50U2V0ID0gbnVsbHB0cjsKQEAgLTI1MjAs
MTUgKzI1MTMsNiBAQCB2b2lkIENvZGVCbG9jazo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoCiAg
ICAgICAgICAgICAgICAgY3VySW5zdHJ1Y3Rpb25bM10udS50b1RoaXNTdGF0dXMgPSBtZXJnZSgK
ICAgICAgICAgICAgICAgICAgICAgY3VySW5zdHJ1Y3Rpb25bM10udS50b1RoaXNTdGF0dXMsIFRv
VGhpc0NsZWFyZWRCeUdDKTsKICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNh
c2Ugb3BfcmVzb2x2ZV9zY29wZTogewotICAgICAgICAgICAgICAgIFdyaXRlQmFycmllckJhc2U8
SlNMZXhpY2FsRW52aXJvbm1lbnQ+JiBsZXhpY2FsRW52aXJvbm1lbnQgPSBjdXJJbnN0cnVjdGlv
bls2XS51LmxleGljYWxFbnZpcm9ubWVudDsKLSAgICAgICAgICAgICAgICBpZiAoIWxleGljYWxF
bnZpcm9ubWVudCB8fCBIZWFwOjppc01hcmtlZChsZXhpY2FsRW52aXJvbm1lbnQuZ2V0KCkpKQot
ICAgICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICBpZiAoT3B0aW9uczo6
dmVyYm9zZU9TUigpKQotICAgICAgICAgICAgICAgICAgICBkYXRhTG9nRigiQ2xlYXJpbmcgZGVh
ZCBsZXhpY2FsRW52aXJvbm1lbnQgJXAuXG4iLCBsZXhpY2FsRW52aXJvbm1lbnQuZ2V0KCkpOwot
ICAgICAgICAgICAgICAgIGxleGljYWxFbnZpcm9ubWVudC5jbGVhcigpOwotICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgfQogICAgICAgICAgICAgY2FzZSBvcF9nZXRfZnJvbV9z
Y29wZToKICAgICAgICAgICAgIGNhc2Ugb3BfcHV0X3RvX3Njb3BlOiB7CiAgICAgICAgICAgICAg
ICAgUmVzb2x2ZU1vZGVBbmRUeXBlIG1vZGVBbmRUeXBlID0KSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5jcHAJKHJldmlzaW9uIDE4MjIwMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTQxLDYgKzE0MSwxOCBAQCB2b2lkIENvZGVPcmlnaW46OmR1bXBJbkNvbnRleHQo
UHJpbnRTdHJlCiAgICAgZHVtcChvdXQpOwogfQogCitKU0Z1bmN0aW9uKiBJbmxpbmVDYWxsRnJh
bWU6OmNhbGxlZUNvbnN0YW50KCkgY29uc3QKK3sKKyAgICBpZiAoY2FsbGVlUmVjb3ZlcnkuaXND
b25zdGFudCgpKQorICAgICAgICByZXR1cm4ganNDYXN0PEpTRnVuY3Rpb24qPihjYWxsZWVSZWNv
dmVyeS5jb25zdGFudCgpKTsKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwordm9pZCBJbmxpbmVD
YWxsRnJhbWU6OnZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIHZp
c2l0b3IuYXBwZW5kKCZleGVjdXRhYmxlKTsKK30KKwogSlNGdW5jdGlvbiogSW5saW5lQ2FsbEZy
YW1lOjpjYWxsZWVGb3JDYWxsRnJhbWUoRXhlY1N0YXRlKiBleGVjKSBjb25zdAogewogICAgIHJl
dHVybiBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNhbGxlZVJlY292ZXJ5LnJlY292ZXIoZXhlYykpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5oCShyZXZp
c2lvbiAxODIyMDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdp
bi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw2IEBACiAKICNpbmNsdWRlICJDb2RlQmxv
Y2tIYXNoLmgiCiAjaW5jbHVkZSAiQ29kZVNwZWNpYWxpemF0aW9uS2luZC5oIgotI2luY2x1ZGUg
IkpTRnVuY3Rpb24uaCIKICNpbmNsdWRlICJWYWx1ZVJlY292ZXJ5LmgiCiAjaW5jbHVkZSAiV3Jp
dGVCYXJyaWVyLmgiCiAjaW5jbHVkZSA8d3RmL0JpdFZlY3Rvci5oPgpAQCAtMjA3LDE3ICsyMDYs
OCBAQCBzdHJ1Y3QgSW5saW5lQ2FsbEZyYW1lIHsKICAgICAKICAgICBDb2RlU3BlY2lhbGl6YXRp
b25LaW5kIHNwZWNpYWxpemF0aW9uS2luZCgpIGNvbnN0IHsgcmV0dXJuIHNwZWNpYWxpemF0aW9u
S2luZEZvcihzdGF0aWNfY2FzdDxLaW5kPihraW5kKSk7IH0KIAotICAgIEpTRnVuY3Rpb24qIGNh
bGxlZUNvbnN0YW50KCkgY29uc3QKLSAgICB7Ci0gICAgICAgIGlmIChjYWxsZWVSZWNvdmVyeS5p
c0NvbnN0YW50KCkpCi0gICAgICAgICAgICByZXR1cm4ganNDYXN0PEpTRnVuY3Rpb24qPihjYWxs
ZWVSZWNvdmVyeS5jb25zdGFudCgpKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAg
dm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKLSAgICB7Ci0gICAgICAg
IHZpc2l0b3IuYXBwZW5kKCZleGVjdXRhYmxlKTsKLSAgICB9CisgICAgSlNGdW5jdGlvbiogY2Fs
bGVlQ29uc3RhbnQoKSBjb25zdDsKKyAgICB2b2lkIHZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9y
Jik7CiAgICAgCiAgICAgLy8gR2V0IHRoZSBjYWxsZWUgZ2l2ZW4gYSBtYWNoaW5lIGNhbGwgZnJh
bWUgdG8gd2hpY2ggdGhpcyBJbmxpbmVDYWxsRnJhbWUgYmVsb25ncy4KICAgICBKU0Z1bmN0aW9u
KiBjYWxsZWVGb3JDYWxsRnJhbWUoRXhlY1N0YXRlKikgY29uc3Q7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5zdHJ1Y3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5zdHJ1Y3Rpb24uaAkocmV2aXNpb24gMTgyMjAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luc3RydWN0aW9uLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTQ2LDcgKzQ2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiBjbGFzcyBBcnJheUFsbG9j
YXRpb25Qcm9maWxlOwogY2xhc3MgQXJyYXlQcm9maWxlOwogY2xhc3MgT2JqZWN0QWxsb2NhdGlv
blByb2ZpbGU7Ci1jbGFzcyBWYXJpYWJsZVdhdGNocG9pbnRTZXQ7CitjbGFzcyBXYXRjaHBvaW50
U2V0Owogc3RydWN0IExMSW50Q2FsbExpbmtJbmZvOwogc3RydWN0IFZhbHVlUHJvZmlsZTsKIApA
QCAtMTE3LDggKzExNyw3IEBAIHN0cnVjdCBJbnN0cnVjdGlvbiB7CiAgICAgICAgIEFycmF5UHJv
ZmlsZSogYXJyYXlQcm9maWxlOwogICAgICAgICBBcnJheUFsbG9jYXRpb25Qcm9maWxlKiBhcnJh
eUFsbG9jYXRpb25Qcm9maWxlOwogICAgICAgICBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSogb2Jq
ZWN0QWxsb2NhdGlvblByb2ZpbGU7Ci0gICAgICAgIFZhcmlhYmxlV2F0Y2hwb2ludFNldCogd2F0
Y2hwb2ludFNldDsKLSAgICAgICAgV3JpdGVCYXJyaWVyQmFzZTxKU0xleGljYWxFbnZpcm9ubWVu
dD4gbGV4aWNhbEVudmlyb25tZW50OworICAgICAgICBXYXRjaHBvaW50U2V0KiB3YXRjaHBvaW50
U2V0OwogICAgICAgICB2b2lkKiBwb2ludGVyOwogICAgICAgICBib29sKiBwcmVkaWNhdGVQb2lu
dGVyOwogICAgICAgICBUb1RoaXNTdGF0dXMgdG9UaGlzU3RhdHVzOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhcmlhYmxlV2F0Y2hwb2ludFNldC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhcmlhYmxlV2F0Y2hwb2ludFNl
dC5jcHAJKHJldmlzaW9uIDE4MjIwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9WYXJpYWJsZVdhdGNocG9pbnRTZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMCwxOSArMzAsOSBA
QAogCiBuYW1lc3BhY2UgSlNDIHsKIAotdm9pZCBWYXJpYWJsZVdyaXRlRmlyZURldGFpbDo6ZHVt
cChQcmludFN0cmVhbSYgb3V0KSBjb25zdAordm9pZCBWYXJpYWJsZVdhdGNocG9pbnRTZXQ6Om5v
dGlmeVdyaXRlKFZNJiB2bSwgSlNDZWxsKiBvd25lciwgSlNWYWx1ZSB2YWx1ZSwgY29uc3QgY2hh
ciogcmVhc29uKQogewotICAgIG91dC5wcmludCgiV3JpdGUgdG8gIiwgbV9uYW1lLCAiIGluICIs
IEpTVmFsdWUobV9vYmplY3QpKTsKLX0KLQotdm9pZCBWYXJpYWJsZVdhdGNocG9pbnRTZXQ6Om5v
dGlmeVdyaXRlKFZNJiB2bSwgSlNWYWx1ZSB2YWx1ZSwgSlNPYmplY3QqIGJhc2VPYmplY3QsIGNv
bnN0IFByb3BlcnR5TmFtZSYgcHJvcGVydHlOYW1lKQotewotICAgIG5vdGlmeVdyaXRlKHZtLCB2
YWx1ZSwgVmFyaWFibGVXcml0ZUZpcmVEZXRhaWwoYmFzZU9iamVjdCwgcHJvcGVydHlOYW1lKSk7
Ci19Ci0KLXZvaWQgVmFyaWFibGVXYXRjaHBvaW50U2V0Ojpub3RpZnlXcml0ZShWTSYgdm0sIEpT
VmFsdWUgdmFsdWUsIGNvbnN0IGNoYXIqIHJlYXNvbikKLXsKLSAgICBub3RpZnlXcml0ZSh2bSwg
dmFsdWUsIFN0cmluZ0ZpcmVEZXRhaWwocmVhc29uKSk7CisgICAgbm90aWZ5V3JpdGUodm0sIG93
bmVyLCB2YWx1ZSwgU3RyaW5nRmlyZURldGFpbChyZWFzb24pKTsKIH0KIAogfSAvLyBuYW1lc3Bh
Y2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFyaWFibGVXYXRj
aHBvaW50U2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1ZhcmlhYmxlV2F0Y2hwb2ludFNldC5oCShyZXZpc2lvbiAxODIyMDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFyaWFibGVXYXRjaHBvaW50U2V0LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTQgQXBwbGUg
SW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTUgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCkBAIC0zMiwyOSArMzIsMTIgQEAKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBKU09iamVj
dDsKLWNsYXNzIFN5bWJvbFRhYmxlOwotCi1jbGFzcyBWYXJpYWJsZVdyaXRlRmlyZURldGFpbCA6
IHB1YmxpYyBGaXJlRGV0YWlsIHsKLXB1YmxpYzoKLSAgICBWYXJpYWJsZVdyaXRlRmlyZURldGFp
bChKU09iamVjdCogb2JqZWN0LCBjb25zdCBQcm9wZXJ0eU5hbWUmIG5hbWUpCi0gICAgICAgIDog
bV9vYmplY3Qob2JqZWN0KQotICAgICAgICAsIG1fbmFtZShuYW1lKQotICAgIHsKLSAgICB9Ci0g
ICAgCi0gICAgdmlydHVhbCB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsK
LQotcHJpdmF0ZToKLSAgICBKU09iamVjdCogbV9vYmplY3Q7Ci0gICAgY29uc3QgUHJvcGVydHlO
YW1lJiBtX25hbWU7Ci19OwogCiBjbGFzcyBWYXJpYWJsZVdhdGNocG9pbnRTZXQgOiBwdWJsaWMg
V2F0Y2hwb2ludFNldCB7CiAgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsK
IHB1YmxpYzoKLSAgICBWYXJpYWJsZVdhdGNocG9pbnRTZXQoU3ltYm9sVGFibGUmIHN5bWJvbFRh
YmxlKQorICAgIFZhcmlhYmxlV2F0Y2hwb2ludFNldCgpCiAgICAgICAgIDogV2F0Y2hwb2ludFNl
dChDbGVhcldhdGNocG9pbnQpCi0gICAgICAgICwgbV9zeW1ib2xUYWJsZShzeW1ib2xUYWJsZSkK
ICAgICB7CiAgICAgfQogICAgIApAQCAtNzMsOSArNTYsOCBAQCBwdWJsaWM6CiAgICAgLy8gICAg
ICAgIHlvdSB3aWxsIGhhdmUgYmVlbiBub3RpZmllZCB0aGF0IHRoZSB3YXRjaHBvaW50IHdhcyBm
aXJlZC4KICAgICBKU1ZhbHVlIGluZmVycmVkVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX2luZmVy
cmVkVmFsdWUuZ2V0KCk7IH0KICAgICAKLSAgICB2b2lkIG5vdGlmeVdyaXRlKFZNJiwgSlNWYWx1
ZSwgY29uc3QgRmlyZURldGFpbCYpOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgbm90aWZ5
V3JpdGUoVk0mLCBKU1ZhbHVlLCBKU09iamVjdCogYmFzZU9iamVjdCwgY29uc3QgUHJvcGVydHlO
YW1lJik7Ci0gICAgdm9pZCBub3RpZnlXcml0ZShWTSYsIEpTVmFsdWUsIGNvbnN0IGNoYXIqIHJl
YXNvbik7CisgICAgdm9pZCBub3RpZnlXcml0ZShWTSYsIEpTQ2VsbCogb3duZXIsIEpTVmFsdWUs
IGNvbnN0IEZpcmVEZXRhaWwmKTsKKyAgICB2b2lkIG5vdGlmeVdyaXRlKFZNJiwgSlNDZWxsKiBv
d25lciwgSlNWYWx1ZSwgY29uc3QgY2hhciogcmVhc29uKTsKICAgICAKICAgICB2b2lkIGludmFs
aWRhdGUoY29uc3QgRmlyZURldGFpbCYgZGV0YWlsKQogICAgIHsKQEAgLTgzLDE1ICs2NSwxOSBA
QCBwdWJsaWM6CiAgICAgICAgIFdhdGNocG9pbnRTZXQ6OmludmFsaWRhdGUoZGV0YWlsKTsKICAg
ICB9CiAgICAgCi0gICAgdm9pZCBmaW5hbGl6ZVVuY29uZGl0aW9uYWxseShjb25zdCBGaXJlRGV0
YWlsJiBkZXRhaWwpCisgICAgYm9vbCBuZWVkVG9GaW5hbGl6ZSgpCiAgICAgewogICAgICAgICBB
U1NFUlQoISFtX2luZmVycmVkVmFsdWUgPT0gKHN0YXRlKCkgPT0gSXNXYXRjaGVkKSk7CiAgICAg
ICAgIGlmICghbV9pbmZlcnJlZFZhbHVlKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICByZXR1cm4gbV9pbmZlcnJlZFZhbHVlLmdldCgpLmlzQ2VsbCgpOworICAgIH0KKyAgICAK
KyAgICB2b2lkIGZpbmFsaXplVW5jb25kaXRpb25hbGx5KGNvbnN0IEZpcmVEZXRhaWwmIGRldGFp
bCkKKyAgICB7CisgICAgICAgIGlmICghbmVlZFRvRmluYWxpemUoKSkKICAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgSlNWYWx1ZSBpbmZlcnJlZFZhbHVlID0gbV9pbmZlcnJlZFZhbHVlLmdl
dCgpOwotICAgICAgICBpZiAoIWluZmVycmVkVmFsdWUuaXNDZWxsKCkpCi0gICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIEpTQ2VsbCogY2VsbCA9IGluZmVycmVkVmFsdWUuYXNDZWxsKCk7Cisg
ICAgICAgIEpTQ2VsbCogY2VsbCA9IG1faW5mZXJyZWRWYWx1ZS5nZXQoKS5hc0NlbGwoKTsKICAg
ICAgICAgaWYgKEhlYXA6OmlzTWFya2VkKGNlbGwpKQogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICBpbnZhbGlkYXRlKGRldGFpbCk7CkBAIC0xMDAsNyArODYsNiBAQCBwdWJsaWM6CiAgICAg
V3JpdGVCYXJyaWVyPFVua25vd24+KiBhZGRyZXNzT2ZJbmZlcnJlZFZhbHVlKCkgeyByZXR1cm4g
Jm1faW5mZXJyZWRWYWx1ZTsgfQogICAgIAogcHJpdmF0ZToKLSAgICBTeW1ib2xUYWJsZSYgbV9z
eW1ib2xUYWJsZTsKICAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4gbV9pbmZlcnJlZFZhbHVlOwog
fTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhcmlhYmxlV2F0Y2hw
b2ludFNldElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvVmFyaWFibGVXYXRjaHBvaW50U2V0SW5saW5lcy5oCShyZXZpc2lvbiAxODIyMDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFyaWFibGVXYXRjaHBvaW50U2V0SW5s
aW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAo
QykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiwxNyArMjYsMTcgQEAKICNpZm5kZWYgVmFyaWFibGVX
YXRjaHBvaW50U2V0SW5saW5lc19oCiAjZGVmaW5lIFZhcmlhYmxlV2F0Y2hwb2ludFNldElubGlu
ZXNfaAogCi0jaW5jbHVkZSAiU3ltYm9sVGFibGUuaCIKICNpbmNsdWRlICJWYXJpYWJsZVdhdGNo
cG9pbnRTZXQuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWlubGluZSB2b2lkIFZhcmlhYmxlV2F0
Y2hwb2ludFNldDo6bm90aWZ5V3JpdGUoVk0mIHZtLCBKU1ZhbHVlIHZhbHVlLCBjb25zdCBGaXJl
RGV0YWlsJiBkZXRhaWwpCitpbmxpbmUgdm9pZCBWYXJpYWJsZVdhdGNocG9pbnRTZXQ6Om5vdGlm
eVdyaXRlKAorICAgIFZNJiB2bSwgSlNDZWxsKiBvd25lciwgSlNWYWx1ZSB2YWx1ZSwgY29uc3Qg
RmlyZURldGFpbCYgZGV0YWlsKQogewogICAgIEFTU0VSVCghIXZhbHVlKTsKICAgICBzd2l0Y2gg
KHN0YXRlKCkpIHsKICAgICBjYXNlIENsZWFyV2F0Y2hwb2ludDoKLSAgICAgICAgbV9pbmZlcnJl
ZFZhbHVlLnNldCh2bSwgJm1fc3ltYm9sVGFibGUsIHZhbHVlKTsKKyAgICAgICAgbV9pbmZlcnJl
ZFZhbHVlLnNldCh2bSwgb3duZXIsIHZhbHVlKTsKICAgICAgICAgc3RhcnRXYXRjaGluZygpOwog
ICAgICAgICByZXR1cm47CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9W
YXJpYWJsZVdyaXRlRmlyZURldGFpbC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1ZhcmlhYmxlV3JpdGVGaXJlRGV0YWlsLmNwcAkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYXJpYWJsZVdyaXRlRmlyZURldGFp
bC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiVmFyaWFibGVXcml0ZUZpcmVEZXRhaWwuaCIKKworI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIK
KworbmFtZXNwYWNlIEpTQyB7CisKK3ZvaWQgVmFyaWFibGVXcml0ZUZpcmVEZXRhaWw6OmR1bXAo
UHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoIldyaXRlIHRvICIsIG1f
bmFtZSwgIiBpbiAiLCBKU1ZhbHVlKG1fb2JqZWN0KSk7Cit9CisKK3ZvaWQgVmFyaWFibGVXcml0
ZUZpcmVEZXRhaWw6OnRvdWNoKFdhdGNocG9pbnRTZXQqIHNldCwgSlNPYmplY3QqIG9iamVjdCwg
Y29uc3QgUHJvcGVydHlOYW1lJiBuYW1lKQoreworICAgIHNldC0+dG91Y2goVmFyaWFibGVXcml0
ZUZpcmVEZXRhaWwob2JqZWN0LCBuYW1lKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFyaWFibGVXcml0ZUZpcmVEZXRh
aWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFyaWFi
bGVXcml0ZUZpcmVEZXRhaWwuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9WYXJpYWJsZVdyaXRlRmlyZURldGFpbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0w
LDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8K
KworI2lmbmRlZiBWYXJpYWJsZVdyaXRlRmlyZURldGFpbF9oCisjZGVmaW5lIFZhcmlhYmxlV3Jp
dGVGaXJlRGV0YWlsX2gKKworI2luY2x1ZGUgIldhdGNocG9pbnQuaCIKKworbmFtZXNwYWNlIEpT
QyB7CisKK2NsYXNzIEpTT2JqZWN0OworY2xhc3MgUHJvcGVydHlOYW1lOworCitjbGFzcyBWYXJp
YWJsZVdyaXRlRmlyZURldGFpbCA6IHB1YmxpYyBGaXJlRGV0YWlsIHsKK3B1YmxpYzoKKyAgICBW
YXJpYWJsZVdyaXRlRmlyZURldGFpbChKU09iamVjdCogb2JqZWN0LCBjb25zdCBQcm9wZXJ0eU5h
bWUmIG5hbWUpCisgICAgICAgIDogbV9vYmplY3Qob2JqZWN0KQorICAgICAgICAsIG1fbmFtZShu
YW1lKQorICAgIHsKKyAgICB9CisgICAgCisgICAgdmlydHVhbCB2b2lkIGR1bXAoUHJpbnRTdHJl
YW0mKSBjb25zdCBvdmVycmlkZTsKKyAgICAKKyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMg
dm9pZCB0b3VjaChXYXRjaHBvaW50U2V0KiwgSlNPYmplY3QqLCBjb25zdCBQcm9wZXJ0eU5hbWUm
KTsKKworcHJpdmF0ZToKKyAgICBKU09iamVjdCogbV9vYmplY3Q7CisgICAgY29uc3QgUHJvcGVy
dHlOYW1lJiBtX25hbWU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIFZh
cmlhYmxlV3JpdGVGaXJlRGV0YWlsX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9XYXRjaHBvaW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1dhdGNocG9pbnQuaAkocmV2aXNpb24gMTgyMjAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1dhdGNocG9pbnQuaAkod29ya2luZyBjb3B5KQpAQCAtMTI1LDIwICsx
MjUsMjQgQEAgcHVibGljOgogICAgIC8vIHNldCB3YXRjaHBvaW50cyB0aGF0IHdlIGJlbGlldmUg
d2lsbCBhY3R1YWxseSBiZSBmaXJlZC4KICAgICB2b2lkIHN0YXJ0V2F0Y2hpbmcoKQogICAgIHsK
LSAgICAgICAgQVNTRVJUKHN0YXRlKCkgIT0gSXNJbnZhbGlkYXRlZCk7CisgICAgICAgIEFTU0VS
VChtX3N0YXRlICE9IElzSW52YWxpZGF0ZWQpOworICAgICAgICBpZiAobV9zdGF0ZSA9PSBJc1dh
dGNoZWQpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIFdURjo6c3RvcmVTdG9yZUZlbmNl
KCk7CiAgICAgICAgIG1fc3RhdGUgPSBJc1dhdGNoZWQ7CisgICAgICAgIFdURjo6c3RvcmVTdG9y
ZUZlbmNlKCk7CiAgICAgfQogICAgIAogICAgIHZvaWQgZmlyZUFsbChjb25zdCBGaXJlRGV0YWls
JiBkZXRhaWwpCiAgICAgewotICAgICAgICBpZiAoTElLRUxZKHN0YXRlKCkgIT0gSXNXYXRjaGVk
KSkKKyAgICAgICAgaWYgKExJS0VMWShtX3N0YXRlICE9IElzV2F0Y2hlZCkpCiAgICAgICAgICAg
ICByZXR1cm47CiAgICAgICAgIGZpcmVBbGxTbG93KGRldGFpbCk7CiAgICAgfQogICAgIAogICAg
IHZvaWQgZmlyZUFsbChjb25zdCBjaGFyKiByZWFzb24pCiAgICAgewotICAgICAgICBpZiAoTElL
RUxZKHN0YXRlKCkgIT0gSXNXYXRjaGVkKSkKKyAgICAgICAgaWYgKExJS0VMWShtX3N0YXRlICE9
IElzV2F0Y2hlZCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGZpcmVBbGxTbG93KHJl
YXNvbik7CiAgICAgfQpAQCAtMTUxLDEzICsxNTUsMjMgQEAgcHVibGljOgogICAgICAgICAgICAg
ZmlyZUFsbChkZXRhaWwpOwogICAgIH0KICAgICAKKyAgICB2b2lkIHRvdWNoKGNvbnN0IGNoYXIq
IHJlYXNvbikKKyAgICB7CisgICAgICAgIHRvdWNoKFN0cmluZ0ZpcmVEZXRhaWwocmVhc29uKSk7
CisgICAgfQorICAgIAogICAgIHZvaWQgaW52YWxpZGF0ZShjb25zdCBGaXJlRGV0YWlsJiBkZXRh
aWwpCiAgICAgewogICAgICAgICBpZiAoc3RhdGUoKSA9PSBJc1dhdGNoZWQpCiAgICAgICAgICAg
ICBmaXJlQWxsKGRldGFpbCk7CiAgICAgICAgIG1fc3RhdGUgPSBJc0ludmFsaWRhdGVkOwogICAg
IH0KLQorICAgIAorICAgIHZvaWQgaW52YWxpZGF0ZShjb25zdCBjaGFyKiByZWFzb24pCisgICAg
eworICAgICAgICBpbnZhbGlkYXRlKFN0cmluZ0ZpcmVEZXRhaWwocmVhc29uKSk7CisgICAgfQor
ICAgIAogICAgIGludDhfdCogYWRkcmVzc09mU3RhdGUoKSB7IHJldHVybiAmbV9zdGF0ZTsgfQog
ICAgIGludDhfdCogYWRkcmVzc09mU2V0SXNOb3RFbXB0eSgpIHsgcmV0dXJuICZtX3NldElzTm90
RW1wdHk7IH0KICAgICAKQEAgLTI2MSw3ICsyNzUsMTEgQEAgcHVibGljOgogICAgICAgICAgICAg
ZmF0KCktPnRvdWNoKGRldGFpbCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAg
ICAgICAgaWYgKGRlY29kZVN0YXRlKG1fZGF0YSkgPT0gQ2xlYXJXYXRjaHBvaW50KQorICAgICAg
ICB1aW50cHRyX3QgZGF0YSA9IG1fZGF0YTsKKyAgICAgICAgaWYgKGRlY29kZVN0YXRlKGRhdGEp
ID09IElzSW52YWxpZGF0ZWQpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIFdURjo6c3Rv
cmVTdG9yZUZlbmNlKCk7CisgICAgICAgIGlmIChkZWNvZGVTdGF0ZShkYXRhKSA9PSBDbGVhcldh
dGNocG9pbnQpCiAgICAgICAgICAgICBtX2RhdGEgPSBlbmNvZGVTdGF0ZShJc1dhdGNoZWQpOwog
ICAgICAgICBlbHNlCiAgICAgICAgICAgICBtX2RhdGEgPSBlbmNvZGVTdGF0ZShJc0ludmFsaWRh
dGVkKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVH
ZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29t
cGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAxODIyMDApCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNDY2LDkgKzQ2Niw2IEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdl
bmVyYXRvcihWTSYKICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICBpZiAobV9zeW1ib2xUYWJs
ZS0+c2NvcGVTaXplKCkpCi0gICAgICAgIGVtaXRPcGNvZGUob3BfdG91Y2hfZW50cnkpOwotCiAg
ICAgaWYgKGlzQ29uc3RydWN0b3IoKSkgewogICAgICAgICBpZiAoY29uc3RydWN0b3JLaW5kKCkg
PT0gQ29uc3RydWN0b3JLaW5kOjpEZXJpdmVkKSB7CiAgICAgICAgICAgICBtX25ld1RhcmdldFJl
Z2lzdGVyID0gYWRkVmFyKCk7CkBAIC0xMzI0LDggKzEzMjEsNiBAQCBSZWdpc3RlcklEKiBCeXRl
Y29kZUdlbmVyYXRvcjo6ZW1pdFJlc29sCiAgICAgICAgIAogICAgICAgICBBU1NFUlQoIW1fc3lt
Ym9sVGFibGUgfHwgIW1fc3ltYm9sVGFibGUtPmNvbnRhaW5zKHZhcmlhYmxlLmlkZW50KCkuaW1w
bCgpKSB8fCByZXNvbHZlVHlwZSgpID09IER5bmFtaWMpOwogICAgICAgICAKLSAgICAgICAgbV9j
b2RlQmxvY2stPmFkZFByb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb24oaW5zdHJ1Y3Rpb25zKCkuc2l6
ZSgpKTsKLSAgICAgICAgCiAgICAgICAgIC8vIHJlc29sdmVfc2NvcGUgZHN0LCBpZCwgUmVzb2x2
ZVR5cGUsIGRlcHRoCiAgICAgICAgIGVtaXRPcGNvZGUob3BfcmVzb2x2ZV9zY29wZSk7CiAgICAg
ICAgIGRzdCA9IHRlbXBEZXN0aW5hdGlvbihkc3QpOwpAQCAtMTMzNCw3ICsxMzI5LDYgQEAgUmVn
aXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRSZXNvbAogICAgICAgICBpbnN0cnVjdGlv
bnMoKS5hcHBlbmQoYWRkQ29uc3RhbnQodmFyaWFibGUuaWRlbnQoKSkpOwogICAgICAgICBpbnN0
cnVjdGlvbnMoKS5hcHBlbmQocmVzb2x2ZVR5cGUoKSk7CiAgICAgICAgIGluc3RydWN0aW9ucygp
LmFwcGVuZCgwKTsKLSAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKDApOwogICAgICAgICBy
ZXR1cm4gZHN0OwogICAgIH0KICAgICAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHJldmlzaW9u
IDE4MjIwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnBy
ZXRlcklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMTM0MSw2ICsxMzQxLDcgQEAgYm9vbCBB
YnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0U3RhdGVUeQogICAgIH0KIAogICAgIGNhc2UgQ3Jl
YXRlVGhpczogeworICAgICAgICAvLyBGSVhNRTogV2UgY2FuIGZvbGQgdGhpcyB0byBOZXdPYmpl
Y3QgaWYgdGhlIGluY29taW5nIGNhbGxlZSBpcyBhIGNvbnN0YW50LgogICAgICAgICBmb3JOb2Rl
KG5vZGUpLnNldFR5cGUoU3BlY0ZpbmFsT2JqZWN0KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpA
QCAtMTQwMyw2ICsxNDA0LDE1IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0
YXRlVHkKICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgIGNhc2UgR2V0Q2FsbGVlOgorICAg
ICAgICBpZiAoRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlID0ganNEeW5hbWljQ2FzdDxG
dW5jdGlvbkV4ZWN1dGFibGUqPihtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCkpKSB7Cisg
ICAgICAgICAgICBWYXJpYWJsZVdhdGNocG9pbnRTZXQmIHNldCA9IGV4ZWN1dGFibGUtPmZ1bmN0
aW9uUmVhbGxvY2F0aW9uV2F0Y2hwb2ludFNldCgpOworICAgICAgICAgICAgaWYgKEpTVmFsdWUg
dmFsdWUgPSBzZXQuaW5mZXJyZWRWYWx1ZSgpKSB7CisgICAgICAgICAgICAgICAgbV9ncmFwaC53
YXRjaHBvaW50cygpLmFkZExhemlseSgmc2V0KTsKKyAgICAgICAgICAgICAgICBKU0Z1bmN0aW9u
KiBmdW5jdGlvbiA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4odmFsdWUpOworICAgICAgICAgICAgICAg
IHNldENvbnN0YW50KG5vZGUsICptX2dyYXBoLmZyZWV6ZShmdW5jdGlvbikpOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAgICAgIGZvck5vZGUo
bm9kZSkuc2V0VHlwZShTcGVjRnVuY3Rpb24pOwogICAgICAgICBicmVhazsKICAgICAgICAgCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNw
cAkocmV2aXNpb24gMTgyMjAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRl
Q29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI3OSw4ICsyNzksMjAgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgICAgICBpZiAob3BlcmFuZC5vZmZzZXQoKSA9PSBKU1N0YWNrOjpDYWxs
ZWUpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB3ZWFrSlNDb25zdGFudChjYWxsZWUpOwog
ICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKG9wZXJhbmQub2Zmc2V0KCkgPT0gSlNT
dGFjazo6Q2FsbGVlKQorICAgICAgICB9IGVsc2UgaWYgKG9wZXJhbmQub2Zmc2V0KCkgPT0gSlNT
dGFjazo6Q2FsbGVlKSB7CisgICAgICAgICAgICAvLyBXZSBoYXZlIHRvIGRvIHNvbWUgY29uc3Rh
bnQtZm9sZGluZyBoZXJlIGJlY2F1c2UgdGhpcyBlbmFibGVzIENyZWF0ZVRoaXMgZm9sZGluZy4g
Tm90ZQorICAgICAgICAgICAgLy8gdGhhdCB3ZSBkb24ndCBoYXZlIHN1Y2ggd2F0Y2hwb2ludC1i
YXNlZCBmb2xkaW5nIGZvciBpbmxpbmVkIHVzZXMgb2YgQ2FsbGVlLCBzaW5jZSBpbiB0aGF0Cisg
ICAgICAgICAgICAvLyBjYXNlIGlmIHRoZSBmdW5jdGlvbiBpcyBhIHNpbmdsZXRvbiB0aGVuIHdl
IGFscmVhZHkga25vdyBpdC4KKyAgICAgICAgICAgIGlmIChGdW5jdGlvbkV4ZWN1dGFibGUqIGV4
ZWN1dGFibGUgPSBqc0R5bmFtaWNDYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KG1fY29kZUJsb2Nr
LT5vd25lckV4ZWN1dGFibGUoKSkpIHsKKyAgICAgICAgICAgICAgICBWYXJpYWJsZVdhdGNocG9p
bnRTZXQmIHNldCA9IGV4ZWN1dGFibGUtPmZ1bmN0aW9uUmVhbGxvY2F0aW9uV2F0Y2hwb2ludFNl
dCgpOworICAgICAgICAgICAgICAgIGlmIChKU1ZhbHVlIHZhbHVlID0gc2V0LmluZmVycmVkVmFs
dWUoKSkgeworICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLndhdGNocG9pbnRzKCkuYWRkTGF6
aWx5KCZzZXQpOworICAgICAgICAgICAgICAgICAgICBKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9IGpz
Q2FzdDxKU0Z1bmN0aW9uKj4odmFsdWUpOworICAgICAgICAgICAgICAgICAgICByZXR1cm4gd2Vh
a0pTQ29uc3RhbnQoZnVuY3Rpb24pOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIHJldHVybiBhZGRUb0dyYXBoKEdldENhbGxlZSk7CisgICAgICAgIH0KICAg
ICAgICAgCiAgICAgICAgIHJldHVybiBnZXREaXJlY3QobV9pbmxpbmVTdGFja1RvcC0+cmVtYXBP
cGVyYW5kKG9wZXJhbmQpKTsKICAgICB9CkBAIC0yNTMyLDYgKzI1NDQsMTIgQEAgdm9pZCBCeXRl
Q29kZVBhcnNlcjo6Y2xlYXJDYWNoZXMoKQogTm9kZSogQnl0ZUNvZGVQYXJzZXI6OmdldFNjb3Bl
KFZpcnR1YWxSZWdpc3RlciBzY29wZUNoYWluLCB1bnNpZ25lZCBza2lwQ291bnQpCiB7CiAgICAg
Tm9kZSogbG9jYWxCYXNlID0gZ2V0KHNjb3BlQ2hhaW4pOworICAgIGFkZFRvR3JhcGgoUGhhbnRv
bSwgbG9jYWxCYXNlKTsgLy8gT1NSIGV4aXQgY2Fubm90IGhhbmRsZSByZXNvbHZlX3Njb3BlIG9u
IGEgRENFJ2Qgc2NvcGUuCisgICAgaWYgKEpTU2NvcGUqIHNjb3BlID0gbG9jYWxCYXNlLT5keW5h
bWljQ2FzdENvbnN0YW50PEpTU2NvcGUqPigpKSB7CisgICAgICAgIGZvciAodW5zaWduZWQgbiA9
IHNraXBDb3VudDsgbi0tOykKKyAgICAgICAgICAgIHNjb3BlID0gc2NvcGUtPm5leHQoKTsKKyAg
ICAgICAgcmV0dXJuIHdlYWtKU0NvbnN0YW50KHNjb3BlKTsKKyAgICB9CiAgICAgZm9yICh1bnNp
Z25lZCBuID0gc2tpcENvdW50OyBuLS07KQogICAgICAgICBsb2NhbEJhc2UgPSBhZGRUb0dyYXBo
KFNraXBTY29wZSwgbG9jYWxCYXNlKTsKICAgICByZXR1cm4gbG9jYWxCYXNlOwpAQCAtMjYwNiwx
MSArMjYyNCw2IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAg
ICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2VudGVyKTsKICAgICAgICAgfQogICAgICAgICAgICAg
Ci0gICAgICAgIGNhc2Ugb3BfdG91Y2hfZW50cnk6Ci0gICAgICAgICAgICBpZiAobV9pbmxpbmVT
dGFja1RvcC0+bV9jb2RlQmxvY2stPnN5bWJvbFRhYmxlKCktPm1fZnVuY3Rpb25FbnRlcmVkT25j
ZS5pc1N0aWxsVmFsaWQoKSkKLSAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKEZvcmNlT1NSRXhp
dCk7Ci0gICAgICAgICAgICBORVhUX09QQ09ERShvcF90b3VjaF9lbnRyeSk7Ci0gICAgICAgICAg
ICAKICAgICAgICAgY2FzZSBvcF90b190aGlzOiB7CiAgICAgICAgICAgICBOb2RlKiBvcDEgPSBn
ZXRUaGlzKCk7CiAgICAgICAgICAgICBpZiAob3AxLT5vcCgpICE9IFRvVGhpcykgewpAQCAtMzM4
OCwxNyArMzQwMSw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQK
ICAgICAgICAgICAgIGNhc2UgTG9jYWxDbG9zdXJlVmFyOgogICAgICAgICAgICAgY2FzZSBDbG9z
dXJlVmFyOgogICAgICAgICAgICAgY2FzZSBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNr
czogewotICAgICAgICAgICAgICAgIEpTTGV4aWNhbEVudmlyb25tZW50KiBsZXhpY2FsRW52aXJv
bm1lbnQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bNl0udS5sZXhpY2FsRW52aXJvbm1lbnQuZ2V0KCk7
Ci0gICAgICAgICAgICAgICAgaWYgKGxleGljYWxFbnZpcm9ubWVudAotICAgICAgICAgICAgICAg
ICAgICAmJiBsZXhpY2FsRW52aXJvbm1lbnQtPnN5bWJvbFRhYmxlKCktPm1fZnVuY3Rpb25FbnRl
cmVkT25jZS5pc1N0aWxsVmFsaWQoKSkgewotICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLndh
dGNocG9pbnRzKCkuYWRkTGF6aWx5KGxleGljYWxFbnZpcm9ubWVudC0+c3ltYm9sVGFibGUoKS0+
bV9mdW5jdGlvbkVudGVyZWRPbmNlKTsKLSAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChQ
aGFudG9tLCBnZXREaXJlY3QobV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKFZpcnR1YWxS
ZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSkpKTsKLSAgICAgICAgICAg
ICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rlcihkc3QpLCB3ZWFrSlNDb25zdGFudChsZXhpY2Fs
RW52aXJvbm1lbnQpKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgfQogICAgICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoZHN0KSwgZ2V0U2NvcGUo
VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpLCBkZXB0aCkp
OwotICAgICAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUoKSkKLSAgICAgICAgICAgICAg
ICAgICAgYWRkVG9HcmFwaChQaGFudG9tLCBnZXREaXJlY3QobV9pbmxpbmVTdGFja1RvcC0+cmVt
YXBPcGVyYW5kKFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5k
KSkpKTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAg
IGNhc2UgRHluYW1pYzoKQEAgLTM0NTAsMTkgKzM0NTMsNTggQEAgYm9vbCBCeXRlQ29kZVBhcnNl
cjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgY2FzZSBHbG9iYWxWYXI6CiAgICAg
ICAgICAgICBjYXNlIEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAg
ICAgICAgICBhZGRUb0dyYXBoKFBoYW50b20sIGdldChWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUpKSk7
Ci0gICAgICAgICAgICAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIoZ2xvYmFsT2JqZWN0
LT5zeW1ib2xUYWJsZSgpLT5tX2xvY2spOwotICAgICAgICAgICAgICAgIFN5bWJvbFRhYmxlRW50
cnkgZW50cnkgPSBnbG9iYWxPYmplY3QtPnN5bWJvbFRhYmxlKCktPmdldChsb2NrZXIsIHVpZCk7
Ci0gICAgICAgICAgICAgICAgVmFyaWFibGVXYXRjaHBvaW50U2V0KiB3YXRjaHBvaW50U2V0ID0g
ZW50cnkud2F0Y2hwb2ludFNldCgpOwotICAgICAgICAgICAgICAgIEpTVmFsdWUgaW5mZXJyZWRW
YWx1ZSA9Ci0gICAgICAgICAgICAgICAgICAgIHdhdGNocG9pbnRTZXQgPyB3YXRjaHBvaW50U2V0
LT5pbmZlcnJlZFZhbHVlKCkgOiBKU1ZhbHVlKCk7Ci0gICAgICAgICAgICAgICAgaWYgKCFpbmZl
cnJlZFZhbHVlKSB7Ci0gICAgICAgICAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rp
b24gPSBnZXRQcmVkaWN0aW9uKCk7Ci0gICAgICAgICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVn
aXN0ZXIoZHN0KSwgYWRkVG9HcmFwaChHZXRHbG9iYWxWYXIsIE9wSW5mbyhvcGVyYW5kKSwgT3BJ
bmZvKHByZWRpY3Rpb24pKSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgICAgIFdhdGNocG9pbnRTZXQqIHdhdGNocG9pbnRTZXQ7CisgICAgICAgICAgICAgICAgU2Nv
cGVPZmZzZXQgb2Zmc2V0OworICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAg
Q29uY3VycmVudEpJVExvY2tlciBsb2NrZXIoZ2xvYmFsT2JqZWN0LT5zeW1ib2xUYWJsZSgpLT5t
X2xvY2spOworICAgICAgICAgICAgICAgICAgICBTeW1ib2xUYWJsZUVudHJ5IGVudHJ5ID0gZ2xv
YmFsT2JqZWN0LT5zeW1ib2xUYWJsZSgpLT5nZXQobG9ja2VyLCB1aWQpOworICAgICAgICAgICAg
ICAgICAgICB3YXRjaHBvaW50U2V0ID0gZW50cnkud2F0Y2hwb2ludFNldCgpOworICAgICAgICAg
ICAgICAgICAgICBvZmZzZXQgPSBlbnRyeS5zY29wZU9mZnNldCgpOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICBpZiAod2F0Y2hwb2ludFNldCAmJiB3YXRjaHBvaW50U2V0LT5z
dGF0ZSgpID09IElzV2F0Y2hlZCkgeworICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGhhcyBh
IGZ1biBjb25jdXJyZW5jeSBzdG9yeS4gVGhlcmUgaXMgdGhlIHBvc3NpYmlsaXR5IG9mIGEgcmFj
ZSBpbiB0d28KKyAgICAgICAgICAgICAgICAgICAgLy8gZGlyZWN0aW9uczoKKyAgICAgICAgICAg
ICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAgICAgLy8gV2Ugc2VlIHRoYXQgdGhlIHNldCBJ
c1dhdGNoZWQsIGJ1dCBpbiB0aGUgbWVhbnRpbWUgaXQgZ2V0cyBpbnZhbGlkYXRlZDogdGhpcyBp
cworICAgICAgICAgICAgICAgICAgICAvLyBmaW5lIGJlY2F1c2UgaWYgd2Ugc2F3IHRoYXQgaXQg
SXNXYXRjaGVkIHRoZW4gd2UgYWRkIGEgd2F0Y2hwb2ludC4gSWYgaXQgZ2V0cworICAgICAgICAg
ICAgICAgICAgICAvLyBpbnZhbGlkYXRlZCwgdGhlbiB0aGlzIGNvbXBpbGF0aW9uIGlzIGludmFs
aWRhdGVkLiBOb3RlIHRoYXQgaW4gdGhlIG1lYW50aW1lIHdlCisgICAgICAgICAgICAgICAgICAg
IC8vIG1heSBsb2FkIGFuIGFic3VyZCB2YWx1ZSBmcm9tIHRoZSBnbG9iYWwgb2JqZWN0LiBJdCdz
IGZpbmUgdG8gbG9hZCBhbiBhYnN1cmQKKyAgICAgICAgICAgICAgICAgICAgLy8gdmFsdWUgaWYg
dGhlIGNvbXBpbGF0aW9uIGlzIGludmFsaWRhdGVkIGFueXdheS4KKyAgICAgICAgICAgICAgICAg
ICAgLy8KKyAgICAgICAgICAgICAgICAgICAgLy8gV2Ugc2VlIHRoYXQgdGhlIHNldCBJc1dhdGNo
ZWQsIGJ1dCB0aGUgdmFsdWUgaXNuJ3QgeWV0IGluaXRpYWxpemVkOiB0aGlzIGlzbid0CisgICAg
ICAgICAgICAgICAgICAgIC8vIHBvc3NpYmxlIGJlY2F1c2Ugb2YgdGhlIG9yZGVyaW5nIG9mIG9w
ZXJhdGlvbnMuCisgICAgICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgICAgIC8v
IEhlcmUncyBob3cgd2Ugb3JkZXIgb3BlcmF0aW9uczoKKyAgICAgICAgICAgICAgICAgICAgLy8K
KyAgICAgICAgICAgICAgICAgICAgLy8gTWFpbiB0aHJlYWQgc3RvcmVzIHRvIHRoZSBnbG9iYWwg
b2JqZWN0OiBhbHdheXMgc3RvcmUgYSB2YWx1ZSBmaXJzdCwgYW5kIG9ubHkKKyAgICAgICAgICAg
ICAgICAgICAgLy8gYWZ0ZXIgdGhhdCBkbyB3ZSB0b3VjaCB0aGUgd2F0Y2hwb2ludCBzZXQuIFRo
ZXJlIGlzIGEgZmVuY2UgaW4gdGhlIHRvdWNoLCB0aGF0CisgICAgICAgICAgICAgICAgICAgIC8v
IGVuc3VyZXMgdGhhdCB0aGUgc3RvcmUgdG8gdGhlIGdsb2JhbCBvYmplY3QgYWx3YXlzIGhhcHBl
bnMgYmVmb3JlIHRoZSB0b3VjaCBvbiB0aGUKKyAgICAgICAgICAgICAgICAgICAgLy8gc2V0Lgor
ICAgICAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgICAgICAvLyBDb21waWxhdGlv
biB0aHJlYWQ6IGFsd2F5cyBmaXJzdCBsb2FkIHRoZSBzdGF0ZSBvZiB0aGUgd2F0Y2hwb2ludCBz
ZXQsIGFuZCB0aGVuCisgICAgICAgICAgICAgICAgICAgIC8vIGxvYWQgdGhlIHZhbHVlLiBUaGUg
V2F0Y2hwb2ludFNldDo6c3RhdGUoKSBtZXRob2QgZG9lcyBmZW5jZXMgZm9yIHVzIHRvIGVuc3Vy
ZQorICAgICAgICAgICAgICAgICAgICAvLyB0aGF0IHRoZSBsb2FkIG9mIHRoZSBzdGF0ZSBoYXBw
ZW5zIGJlZm9yZSBvdXIgbG9hZCBvZiB0aGUgdmFsdWUuCisgICAgICAgICAgICAgICAgICAgIC8v
CisgICAgICAgICAgICAgICAgICAgIC8vIEZpbmFsaXppbmcgY29tcGlsYXRpb246IHRoaXMgaGFw
cGVucyBvbiB0aGUgbWFpbiB0aHJlYWQgYW5kIHN5bmNocm9ub3VzbHkgY2hlY2tzCisgICAgICAg
ICAgICAgICAgICAgIC8vIHZhbGlkaXR5IG9mIGFsbCB3YXRjaHBvaW50IHNldHMuCisgICAgICAg
ICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgICAgIC8vIFdlIHdpbGwgb25seSBwZXJm
b3JtIG9wdGltaXphdGlvbnMgaWYgdGhlIGxvYWQgb2YgdGhlIHN0YXRlIHlpZWxkcyBJc1dhdGNo
ZWQuIFRoYXQKKyAgICAgICAgICAgICAgICAgICAgLy8gbWVhbnMgdGhhdCBhdCBsZWFzdCBvbmUg
c3RvcmUgd291bGQgaGF2ZSBoYXBwZW5lZCB0byBpbml0aWFsaXplIHRoZSBvcmlnaW5hbCB2YWx1
ZQorICAgICAgICAgICAgICAgICAgICAvLyBvZiB0aGUgdmFyaWFibGUgKHRoYXQgaXMsIHRoZSB2
YWx1ZSB3ZSdkIGxpa2UgdG8gY29uc3RhbnQgZm9sZCB0bykuIFRoZXJlIG1heSBiZQorICAgICAg
ICAgICAgICAgICAgICAvLyBvdGhlciBzdG9yZXMgdGhhdCBoYXBwZW4gYWZ0ZXIgdGhhdCwgYnV0
IHRob3NlIHN0b3JlcyB3aWxsIGludmFsaWRhdGUgdGhlCisgICAgICAgICAgICAgICAgICAgIC8v
IHdhdGNocG9pbnQgc2V0IGFuZCBhbHNvIHRoZSBjb21waWxhdGlvbi4KKyAgICAgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICAgICAgICAgIEFTU0VSVChiaXR3aXNlX2Nhc3Q8dWludHB0cl90
PigmZ2xvYmFsT2JqZWN0LT52YXJpYWJsZUF0KG9mZnNldCkpID09IG9wZXJhbmQpOworICAgICAg
ICAgICAgICAgICAgICBKU1ZhbHVlIHZhbHVlID0gZ2xvYmFsT2JqZWN0LT52YXJpYWJsZUF0KG9m
ZnNldCkuZ2V0KCk7CisgICAgICAgICAgICAgICAgICAgIGlmICh2YWx1ZSkgeworICAgICAgICAg
ICAgICAgICAgICAgICAgbV9ncmFwaC53YXRjaHBvaW50cygpLmFkZExhemlseSh3YXRjaHBvaW50
U2V0KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoZHN0KSwg
d2Vha0pTQ29uc3RhbnQodmFsdWUpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
IAotICAgICAgICAgICAgICAgIG1fZ3JhcGgud2F0Y2hwb2ludHMoKS5hZGRMYXppbHkod2F0Y2hw
b2ludFNldCk7Ci0gICAgICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rlcihkc3QpLCB3ZWFr
SlNDb25zdGFudChpbmZlcnJlZFZhbHVlKSk7CisgICAgICAgICAgICAgICAgU3BlY3VsYXRlZFR5
cGUgcHJlZGljdGlvbiA9IGdldFByZWRpY3Rpb24oKTsKKyAgICAgICAgICAgICAgICBzZXQoVmly
dHVhbFJlZ2lzdGVyKGRzdCksIGFkZFRvR3JhcGgoR2V0R2xvYmFsVmFyLCBPcEluZm8ob3BlcmFu
ZCksIE9wSW5mbyhwcmVkaWN0aW9uKSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgY2FzZSBMb2NhbENsb3N1cmVWYXI6CkBAIC0zNTA5LDcgKzM1
NTEsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAg
ICAgICAgICAgdWlkID0gbnVsbHB0cjsKICAgICAgICAgICAgIAogICAgICAgICAgICAgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUgPSBudWxscHRyOwotICAgICAgICAgICAgVmFyaWFibGVXYXRjaHBvaW50
U2V0KiB3YXRjaHBvaW50cyA9IG51bGxwdHI7CisgICAgICAgICAgICBXYXRjaHBvaW50U2V0KiB3
YXRjaHBvaW50cyA9IG51bGxwdHI7CiAgICAgICAgICAgICB1aW50cHRyX3Qgb3BlcmFuZDsKICAg
ICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlciht
X2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2stPm1fbG9jayk7CkBAIC0zNTUyLDggKzM1
OTQsMTAgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBOb2RlKiB2YWx1ZU5vZGUgPSBnZXQoVmlydHVh
bFJlZ2lzdGVyKHZhbHVlKSk7CiAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChQdXRHbG9iYWxW
YXIsIE9wSW5mbyhvcGVyYW5kKSwgdmFsdWVOb2RlKTsKLSAgICAgICAgICAgICAgICBpZiAod2F0
Y2hwb2ludHMgJiYgd2F0Y2hwb2ludHMtPnN0YXRlKCkgIT0gSXNJbnZhbGlkYXRlZCkKLSAgICAg
ICAgICAgICAgICAgICAgYWRkVG9HcmFwaChOb3RpZnlXcml0ZSwgT3BJbmZvKHdhdGNocG9pbnRz
KSwgdmFsdWVOb2RlKTsKKyAgICAgICAgICAgICAgICBpZiAod2F0Y2hwb2ludHMgJiYgd2F0Y2hw
b2ludHMtPnN0YXRlKCkgIT0gSXNJbnZhbGlkYXRlZCkgeworICAgICAgICAgICAgICAgICAgICAv
LyBNdXN0IGhhcHBlbiBhZnRlciB0aGUgc3RvcmUuIFNlZSBjb21tZW50IGZvciBHZXRHbG9iYWxW
YXIuCisgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoTm90aWZ5V3JpdGUsIE9wSW5mbyh3
YXRjaHBvaW50cykpOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICAvLyBLZWVw
IHNjb3BlIGFsaXZlIHVudGlsIGFmdGVyIHB1dC4KICAgICAgICAgICAgICAgICBhZGRUb0dyYXBo
KFBoYW50b20sIGdldChWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUpKSk7CiAgICAgICAgICAgICAgICAg
YnJlYWs7CkBAIC0zNTY0LDEwICszNjA4LDEyIEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNl
QmxvY2sodW5zaWduZWQKICAgICAgICAgICAgICAgICBOb2RlKiBzY29wZU5vZGUgPSBnZXQoVmly
dHVhbFJlZ2lzdGVyKHNjb3BlKSk7CiAgICAgICAgICAgICAgICAgTm9kZSogdmFsdWVOb2RlID0g
Z2V0KFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSkpOwogCi0gICAgICAgICAgICAgICAgaWYgKHdhdGNo
cG9pbnRzICYmIHdhdGNocG9pbnRzLT5zdGF0ZSgpICE9IElzSW52YWxpZGF0ZWQpCi0gICAgICAg
ICAgICAgICAgICAgIGFkZFRvR3JhcGgoTm90aWZ5V3JpdGUsIE9wSW5mbyh3YXRjaHBvaW50cyks
IHZhbHVlTm9kZSk7Ci0KICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKFB1dENsb3N1cmVWYXIs
IE9wSW5mbyhvcGVyYW5kKSwgc2NvcGVOb2RlLCB2YWx1ZU5vZGUpOworCisgICAgICAgICAgICAg
ICAgaWYgKHdhdGNocG9pbnRzICYmIHdhdGNocG9pbnRzLT5zdGF0ZSgpICE9IElzSW52YWxpZGF0
ZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gTXVzdCBoYXBwZW4gYWZ0ZXIgdGhlIHN0b3Jl
LiBTZWUgY29tbWVudCBmb3IgR2V0R2xvYmFsVmFyLgorICAgICAgICAgICAgICAgICAgICBhZGRU
b0dyYXBoKE5vdGlmeVdyaXRlLCBPcEluZm8od2F0Y2hwb2ludHMpKTsKKyAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBj
YXNlIER5bmFtaWM6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxp
dGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBh
YmlsaXRpZXMuY3BwCShyZXZpc2lvbiAxODIyMDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0NhcGFiaWxpdGllcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk2LDcgKzk2LDYgQEAg
Q2FwYWJpbGl0eUxldmVsIGNhcGFiaWxpdHlMZXZlbChPcGNvZGVJRAogICAgIAogICAgIHN3aXRj
aCAob3Bjb2RlSUQpIHsKICAgICBjYXNlIG9wX2VudGVyOgotICAgIGNhc2Ugb3BfdG91Y2hfZW50
cnk6CiAgICAgY2FzZSBvcF90b190aGlzOgogICAgIGNhc2Ugb3BfY2hlY2tfdGR6OgogICAgIGNh
c2Ugb3BfY3JlYXRlX3RoaXM6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Ns
b2JiZXJpemUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Ns
b2JiZXJpemUuaAkocmV2aXNpb24gMTgyMjAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDbG9iYmVyaXplLmgJKHdvcmtpbmcgY29weSkKQEAgLTgxOSw3ICs4MTksNyBAQCB2b2lk
IGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAgICAgIAogICAgIGNhc2Ug
UHV0Q2xvc3VyZVZhcjoKICAgICAgICAgd3JpdGUoQWJzdHJhY3RIZWFwKFNjb3BlUHJvcGVydGll
cywgbm9kZS0+c2NvcGVPZmZzZXQoKS5vZmZzZXQoKSkpOwotICAgICAgICBkZWYoSGVhcExvY2F0
aW9uKENsb3N1cmVWYXJpYWJsZUxvYywgQWJzdHJhY3RIZWFwKFNjb3BlUHJvcGVydGllcywgbm9k
ZS0+c2NvcGVPZmZzZXQoKS5vZmZzZXQoKSksIG5vZGUtPmNoaWxkMigpKSwgbm9kZS0+Y2hpbGQy
KCkubm9kZSgpKTsKKyAgICAgICAgZGVmKEhlYXBMb2NhdGlvbihDbG9zdXJlVmFyaWFibGVMb2Ms
IEFic3RyYWN0SGVhcChTY29wZVByb3BlcnRpZXMsIG5vZGUtPnNjb3BlT2Zmc2V0KCkub2Zmc2V0
KCkpLCBub2RlLT5jaGlsZDEoKSksIG5vZGUtPmNoaWxkMigpLm5vZGUoKSk7CiAgICAgICAgIHJl
dHVybjsKICAgICAgICAgCiAgICAgY2FzZSBHZXRGcm9tQXJndW1lbnRzOiB7CkBAIC04NjMsMTEg
Kzg2MywxNyBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAg
Y2FzZSBOZXdTdHJpbmdPYmplY3Q6CiAgICAgY2FzZSBQaGFudG9tTmV3T2JqZWN0OgogICAgIGNh
c2UgTWF0ZXJpYWxpemVOZXdPYmplY3Q6Ci0gICAgY2FzZSBOZXdGdW5jdGlvbjoKICAgICAgICAg
cmVhZChIZWFwT2JqZWN0Q291bnQpOwogICAgICAgICB3cml0ZShIZWFwT2JqZWN0Q291bnQpOwog
ICAgICAgICByZXR1cm47CiAgICAgICAgIAorICAgIGNhc2UgTmV3RnVuY3Rpb246CisgICAgICAg
IGlmIChub2RlLT5jYXN0T3BlcmFuZDxGdW5jdGlvbkV4ZWN1dGFibGUqPigpLT5mdW5jdGlvblJl
YWxsb2NhdGlvbldhdGNocG9pbnRTZXQoKS5pc1N0aWxsVmFsaWQoKSkKKyAgICAgICAgICAgIHdy
aXRlKFdhdGNocG9pbnRfZmlyZSk7CisgICAgICAgIHJlYWQoSGVhcE9iamVjdENvdW50KTsKKyAg
ICAgICAgd3JpdGUoSGVhcE9iamVjdENvdW50KTsKKyAgICAgICAgcmV0dXJuOworCiAgICAgY2Fz
ZSBSZWdFeHBFeGVjOgogICAgIGNhc2UgUmVnRXhwVGVzdDoKICAgICAgICAgcmVhZChSZWdFeHBT
dGF0ZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkocmV2aXNp
b24gMTgyMjAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTMxMSw4ICszMTEsOCBAQCB2b2lkIEdyYXBoOjpkdW1wKFByaW50U3Ry
ZWFtJiBvdXQsIGNvbnN0CiAgICAgICAgIG91dC5wcmludChjb21tYSwgIl4iLCBub2RlLT5waGko
KS0+aW5kZXgoKSk7CiAgICAgaWYgKG5vZGUtPmhhc0V4ZWN1dGlvbkNvdW50ZXIoKSkKICAgICAg
ICAgb3V0LnByaW50KGNvbW1hLCBSYXdQb2ludGVyKG5vZGUtPmV4ZWN1dGlvbkNvdW50ZXIoKSkp
OwotICAgIGlmIChub2RlLT5oYXNWYXJpYWJsZVdhdGNocG9pbnRTZXQoKSkKLSAgICAgICAgb3V0
LnByaW50KGNvbW1hLCBSYXdQb2ludGVyKG5vZGUtPnZhcmlhYmxlV2F0Y2hwb2ludFNldCgpKSk7
CisgICAgaWYgKG5vZGUtPmhhc1dhdGNocG9pbnRTZXQoKSkKKyAgICAgICAgb3V0LnByaW50KGNv
bW1hLCBSYXdQb2ludGVyKG5vZGUtPndhdGNocG9pbnRTZXQoKSkpOwogICAgIGlmIChub2RlLT5o
YXNUeXBlZEFycmF5KCkpCiAgICAgICAgIG91dC5wcmludChjb21tYSwgaW5Db250ZXh0KEpTVmFs
dWUobm9kZS0+dHlwZWRBcnJheSgpKSwgY29udGV4dCkpOwogICAgIGlmIChub2RlLT5oYXNTdG9y
YWdlUG9pbnRlcigpKQpAQCAtMTAyOCw2ICsxMDI4LDggQEAgSlNWYWx1ZSBHcmFwaDo6dHJ5R2V0
Q29uc3RhbnRQcm9wZXJ0eShjbwogCiBKU1ZhbHVlIEdyYXBoOjp0cnlHZXRDb25zdGFudENsb3N1
cmVWYXIoSlNWYWx1ZSBiYXNlLCBTY29wZU9mZnNldCBvZmZzZXQpCiB7CisgICAgLy8gVGhpcyBo
YXMgYW4gYXdlc29tZSBjb25jdXJyZW5jeSBzdG9yeS4gU2VlIGNvbW1lbnQgZm9yIEdldEdsb2Jh
bFZhciBpbiBCeXRlQ29kZVBhcnNlci4KKyAgICAKICAgICBpZiAoIWJhc2UpCiAgICAgICAgIHJl
dHVybiBKU1ZhbHVlKCk7CiAgICAgCkBAIC0xMDM2LDI0ICsxMDM4LDI4IEBAIEpTVmFsdWUgR3Jh
cGg6OnRyeUdldENvbnN0YW50Q2xvc3VyZVZhcigKICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsK
ICAgICAKICAgICBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUgPSBhY3RpdmF0aW9uLT5zeW1ib2xU
YWJsZSgpOwotICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKHN5bWJvbFRhYmxlLT5tX2xv
Y2spOwotICAgIAotICAgIGlmIChzeW1ib2xUYWJsZS0+bV9mdW5jdGlvbkVudGVyZWRPbmNlLmhh
c0JlZW5JbnZhbGlkYXRlZCgpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwotICAgIAotICAg
IFN5bWJvbFRhYmxlRW50cnkqIGVudHJ5ID0gc3ltYm9sVGFibGUtPmVudHJ5Rm9yKGxvY2tlciwg
b2Zmc2V0KTsKLSAgICBpZiAoIWVudHJ5KQotICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwotICAg
IAotICAgIFZhcmlhYmxlV2F0Y2hwb2ludFNldCogc2V0ID0gZW50cnktPndhdGNocG9pbnRTZXQo
KTsKLSAgICBpZiAoIXNldCkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKLSAgICAKLSAgICBK
U1ZhbHVlIHZhbHVlID0gc2V0LT5pbmZlcnJlZFZhbHVlKCk7Ci0gICAgaWYgKCF2YWx1ZSkKLSAg
ICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKKyAgICBKU1ZhbHVlIHZhbHVlOworICAgIFdhdGNocG9p
bnRTZXQqIHNldDsKKyAgICB7CisgICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKHN5
bWJvbFRhYmxlLT5tX2xvY2spOworICAgICAgICAKKyAgICAgICAgU3ltYm9sVGFibGVFbnRyeSog
ZW50cnkgPSBzeW1ib2xUYWJsZS0+ZW50cnlGb3IobG9ja2VyLCBvZmZzZXQpOworICAgICAgICBp
ZiAoIWVudHJ5KQorICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKKyAgICAgICAgCisgICAg
ICAgIHNldCA9IGVudHJ5LT53YXRjaHBvaW50U2V0KCk7CisgICAgICAgIGlmICghc2V0KQorICAg
ICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKKyAgICAgICAgCisgICAgICAgIGlmIChzZXQtPnN0
YXRlKCkgIT0gSXNXYXRjaGVkKQorICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKKyAgICAg
ICAgCisgICAgICAgIEFTU0VSVChlbnRyeS0+c2NvcGVPZmZzZXQoKSA9PSBvZmZzZXQpOworICAg
ICAgICB2YWx1ZSA9IGFjdGl2YXRpb24tPnZhcmlhYmxlQXQob2Zmc2V0KS5nZXQoKTsKKyAgICAg
ICAgaWYgKCF2YWx1ZSkKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CisgICAgfQogICAg
IAotICAgIHdhdGNocG9pbnRzKCkuYWRkTGF6aWx5KHN5bWJvbFRhYmxlLT5tX2Z1bmN0aW9uRW50
ZXJlZE9uY2UpOwogICAgIHdhdGNocG9pbnRzKCkuYWRkTGF6aWx5KHNldCk7CiAgICAgCiAgICAg
cmV0dXJuIHZhbHVlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlz
aW9uIDE4MjIwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMjE5LDE0ICsxMjE5LDE0IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAg
bV9vcEluZm8gPSBiaXR3aXNlX2Nhc3Q8dWludHB0cl90Pih2YWx1ZSk7CiAgICAgfQogICAgIAot
ICAgIGJvb2wgaGFzVmFyaWFibGVXYXRjaHBvaW50U2V0KCkKKyAgICBib29sIGhhc1dhdGNocG9p
bnRTZXQoKQogICAgIHsKICAgICAgICAgcmV0dXJuIG9wKCkgPT0gTm90aWZ5V3JpdGU7CiAgICAg
fQogICAgIAotICAgIFZhcmlhYmxlV2F0Y2hwb2ludFNldCogdmFyaWFibGVXYXRjaHBvaW50U2V0
KCkKKyAgICBXYXRjaHBvaW50U2V0KiB3YXRjaHBvaW50U2V0KCkKICAgICB7Ci0gICAgICAgIHJl
dHVybiByZWludGVycHJldF9jYXN0PFZhcmlhYmxlV2F0Y2hwb2ludFNldCo+KG1fb3BJbmZvKTsK
KyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8V2F0Y2hwb2ludFNldCo+KG1fb3BJbmZv
KTsKICAgICB9CiAgICAgCiAgICAgYm9vbCBoYXNUeXBlZEFycmF5KCkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMTgyMjAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTA1NCwxMyArMTA1NCwxMiBAQCBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
blN3aXRjaFN0cmluCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXIqPihleGVjLT5jb2RlQmxv
Y2soKS0+c3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpLmN0aUZvclZhbHVlKHN0cmlu
Zy0+dmFsdWUoZXhlYykuaW1wbCgpKS5leGVjdXRhYmxlQWRkcmVzcygpKTsKIH0KIAotdm9pZCBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5vdGlmeVdyaXRlKEV4ZWNTdGF0ZSogZXhlYywgVmFyaWFi
bGVXYXRjaHBvaW50U2V0KiBzZXQsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3ZvaWQg
SklUX09QRVJBVElPTiBvcGVyYXRpb25Ob3RpZnlXcml0ZShFeGVjU3RhdGUqIGV4ZWMsIFdhdGNo
cG9pbnRTZXQqIHNldCkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2ZUNh
bGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKLSAgICBKU1ZhbHVlIHZhbHVlID0gSlNW
YWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAKLSAgICBzZXQtPm5vdGlmeVdyaXRlKHZtLCB2
YWx1ZSwgIkV4ZWN1dGVkIE5vdGlmeVdyaXRlIik7CisgICAgc2V0LT50b3VjaCgiRXhlY3V0ZWQg
Tm90aWZ5V3JpdGUiKTsKIH0KIAogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRocm93U3Rh
Y2tPdmVyZmxvd0ZvclZhcmFyZ3MoRXhlY1N0YXRlKiBleGVjKQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgJKHJldmlzaW9uIDE4MjIwMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
MjUsNyArMTI1LDcgQEAgSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk1ha2VSb3BlMgog
SlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk1ha2VSb3BlMyhFeGVjU3RhdGUqLCBKU1N0
cmluZyosIEpTU3RyaW5nKiwgSlNTdHJpbmcqKTsKIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uRmluZFN3aXRjaEltbVRhcmdldEZvckRvdWJsZShFeGVjU3RhdGUqLCBFbmNvZGVkSlNWYWx1
ZSwgc2l6ZV90IHRhYmxlSW5kZXgpOwogY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25Td2l0
Y2hTdHJpbmcoRXhlY1N0YXRlKiwgc2l6ZV90IHRhYmxlSW5kZXgsIEpTU3RyaW5nKik7Ci12b2lk
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTm90aWZ5V3JpdGUoRXhlY1N0YXRlKiwgVmFyaWFibGVX
YXRjaHBvaW50U2V0KiwgRW5jb2RlZEpTVmFsdWUpOwordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbk5vdGlmeVdyaXRlKEV4ZWNTdGF0ZSosIFdhdGNocG9pbnRTZXQqKTsKIHZvaWQgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25UaHJvd1N0YWNrT3ZlcmZsb3dGb3JWYXJhcmdzKEV4ZWNTdGF0ZSop
IFdURl9JTlRFUk5BTDsKIGludDMyX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25TaXplT2ZWYXJh
cmdzKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGFyZ3VtZW50cywgaW50MzJfdCBmaXJzdFZh
ckFyZ09mZnNldCk7CiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTG9hZFZhcmFyZ3MoRXhl
Y1N0YXRlKiwgaW50MzJfdCBmaXJzdEVsZW1lbnREZXN0LCBFbmNvZGVkSlNWYWx1ZSBhcmd1bWVu
dHMsIGludDMyX3Qgb2Zmc2V0LCBpbnQzMl90IGxlbmd0aCwgaW50MzJfdCBtYW5kYXRvcnlNaW5p
bXVtKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAkocmV2aXNpb24g
MTgyMjAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjY3LDYgKzI2Nyw3IEBAIFBsYW46OkNvbXBpbGF0aW9uUGF0aCBQbGFuOjpj
b21waWxlSW5UaHIKICAgICBwZXJmb3JtQ0ZBKGRmZyk7CiAgICAgcGVyZm9ybUNvbnN0YW50Rm9s
ZGluZyhkZmcpOwogICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOworICAgIGNoYW5nZWQgfD0gcGVy
Zm9ybVN0cmVuZ3RoUmVkdWN0aW9uKGRmZyk7CiAgICAgY2hhbmdlZCB8PSBwZXJmb3JtQ0ZHU2lt
cGxpZmljYXRpb24oZGZnKTsKICAgICBjaGFuZ2VkIHw9IHBlcmZvcm1Mb2NhbENTRShkZmcpOwog
ICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMy
XzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklUMzJfNjQuY3BwCShyZXZpc2lvbiAxODIyMDApCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
OTgyLDMyICszOTgyLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2Rl
KQogICAgIH0KIAogICAgIGNhc2UgTm90aWZ5V3JpdGU6IHsKLSAgICAgICAgVmFyaWFibGVXYXRj
aHBvaW50U2V0KiBzZXQgPSBub2RlLT52YXJpYWJsZVdhdGNocG9pbnRTZXQoKTsKLSAgICAKLSAg
ICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgICAg
ICBHUFJSZWcgdmFsdWVUYWdHUFIgPSB2YWx1ZS50YWdHUFIoKTsKLSAgICAgICAgR1BSUmVnIHZh
bHVlUGF5bG9hZEdQUiA9IHZhbHVlLnBheWxvYWRHUFIoKTsKLSAgICAKLSAgICAgICAgR1BSVGVt
cG9yYXJ5IHRlbXAodGhpcyk7Ci0gICAgICAgIEdQUlJlZyB0ZW1wR1BSID0gdGVtcC5ncHIoKTsK
LSAgICAKLSAgICAgICAgbV9qaXQubG9hZDgoc2V0LT5hZGRyZXNzT2ZTdGF0ZSgpLCB0ZW1wR1BS
KTsKLSAgICAKLSAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgaXNEb25lID0gbV9qaXQuYnJhbmNo
MzIoSklUQ29tcGlsZXI6OkVxdWFsLCB0ZW1wR1BSLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRl
ZCkpOwotICAgICAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgbm90aWZ5U2xvdzsKLSAgICAgICAg
bm90aWZ5U2xvdy5hcHBlbmQobV9qaXQuYnJhbmNoMzIoCi0gICAgICAgICAgICBKSVRDb21waWxl
cjo6Tm90RXF1YWwsCi0gICAgICAgICAgICBKSVRDb21waWxlcjo6QWJzb2x1dGVBZGRyZXNzKHNl
dC0+YWRkcmVzc09mSW5mZXJyZWRWYWx1ZSgpLT5wYXlsb2FkUG9pbnRlcigpKSwKLSAgICAgICAg
ICAgIHZhbHVlUGF5bG9hZEdQUikpOwotICAgICAgICBub3RpZnlTbG93LmFwcGVuZChtX2ppdC5i
cmFuY2gzMigKLSAgICAgICAgICAgIEpJVENvbXBpbGVyOjpOb3RFcXVhbCwgCi0gICAgICAgICAg
ICBKSVRDb21waWxlcjo6QWJzb2x1dGVBZGRyZXNzKHNldC0+YWRkcmVzc09mSW5mZXJyZWRWYWx1
ZSgpLT50YWdQb2ludGVyKCkpLAotICAgICAgICAgICAgdmFsdWVUYWdHUFIpKTsKLSAgICAgICAg
YWRkU2xvd1BhdGhHZW5lcmF0b3IoCi0gICAgICAgICAgICBzbG93UGF0aENhbGwobm90aWZ5U2xv
dywgdGhpcywgb3BlcmF0aW9uTm90aWZ5V3JpdGUsIE5vUmVzdWx0LCBzZXQsIHZhbHVlVGFnR1BS
LCB2YWx1ZVBheWxvYWRHUFIpKTsKLSAgICAgICAgaXNEb25lLmxpbmsoJm1faml0KTsKLSAgICAK
LSAgICAgICAgbm9SZXN1bHQobm9kZSk7CisgICAgICAgIGNvbXBpbGVOb3RpZnlXcml0ZShub2Rl
KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDE4MjIwMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQwMTQsMjYgKzQwMTQsNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlKE5vZGUqIG5vZGUpCiAgICAgfQogCiAgICAgY2FzZSBOb3RpZnlXcml0ZTogewotICAgICAg
ICBWYXJpYWJsZVdhdGNocG9pbnRTZXQqIHNldCA9IG5vZGUtPnZhcmlhYmxlV2F0Y2hwb2ludFNl
dCgpOwotICAgIAotICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLT5jaGls
ZDEoKSk7Ci0gICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOwotICAgIAotICAg
ICAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKLSAgICAgICAgR1BSUmVnIHRlbXBHUFIgPSB0
ZW1wLmdwcigpOwotICAgIAotICAgICAgICBtX2ppdC5sb2FkOChzZXQtPmFkZHJlc3NPZlN0YXRl
KCksIHRlbXBHUFIpOwotICAgIAotICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBpc0RvbmUgPQot
ICAgICAgICAgICAgbV9qaXQuYnJhbmNoMzIoSklUQ29tcGlsZXI6OkVxdWFsLCB0ZW1wR1BSLCBU
cnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpOwotICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBz
bG93Q2FzZSA9IG1faml0LmJyYW5jaDY0KEpJVENvbXBpbGVyOjpOb3RFcXVhbCwKLSAgICAgICAg
ICAgIEpJVENvbXBpbGVyOjpBYnNvbHV0ZUFkZHJlc3Moc2V0LT5hZGRyZXNzT2ZJbmZlcnJlZFZh
bHVlKCkpLCB2YWx1ZUdQUik7Ci0gICAgICAgIGlzRG9uZS5saW5rKCZtX2ppdCk7Ci0gICAgCi0g
ICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAotICAgICAgICAgICAgc2xvd1BhdGhDYWxsKHNs
b3dDYXNlLCB0aGlzLCBvcGVyYXRpb25Ob3RpZnlXcml0ZSwgTm9SZXN1bHQsIHNldCwgdmFsdWVH
UFIpKTsKLQotICAgICAgICBub1Jlc3VsdChub2RlKTsKKyAgICAgICAgY29tcGlsZU5vdGlmeVdy
aXRlKG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAxODIyMDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDM2NSw4ICs0MzY1LDEzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVOZXdGdW5jdGlvbigKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBzY29wZSh0aGlzLCBu
b2RlLT5jaGlsZDEoKSk7CiAgICAgR1BSUmVnIHNjb3BlR1BSID0gc2NvcGUuZ3ByKCk7CiAgICAg
Zmx1c2hSZWdpc3RlcnMoKTsKLSAgICBjYWxsT3BlcmF0aW9uKAotICAgICAgICBvcGVyYXRpb25O
ZXdGdW5jdGlvbiwgcmVzdWx0R1BSLCBzY29wZUdQUiwgbm9kZS0+Y2FzdE9wZXJhbmQ8RnVuY3Rp
b25FeGVjdXRhYmxlKj4oKSk7CisgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlID0g
bm9kZS0+Y2FzdE9wZXJhbmQ8RnVuY3Rpb25FeGVjdXRhYmxlKj4oKTsKKyAgICBKX0pJVE9wZXJh
dGlvbl9FSnNjQyBmdW5jdGlvbjsKKyAgICBpZiAoZXhlY3V0YWJsZS0+ZnVuY3Rpb25SZWFsbG9j
YXRpb25XYXRjaHBvaW50U2V0KCkuaXNTdGlsbFZhbGlkKCkpCisgICAgICAgIGZ1bmN0aW9uID0g
b3BlcmF0aW9uTmV3RnVuY3Rpb247CisgICAgZWxzZQorICAgICAgICBmdW5jdGlvbiA9IG9wZXJh
dGlvbk5ld0Z1bmN0aW9uV2l0aEludmFsaWRhdGVkUmVhbGxvY2F0aW9uV2F0Y2hwb2ludDsKKyAg
ICBjYWxsT3BlcmF0aW9uKGZ1bmN0aW9uLCByZXN1bHRHUFIsIHNjb3BlR1BSLCBleGVjdXRhYmxl
KTsKICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CiB9CiAKQEAgLTQ3MTIsNiArNDcx
NywyMSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ3JlYXRlQ2xvbmVkCiAgICAgY2Vs
bFJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOwogfQogCit2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21w
aWxlTm90aWZ5V3JpdGUoTm9kZSogbm9kZSkKK3sKKyAgICBXYXRjaHBvaW50U2V0KiBzZXQgPSBu
b2RlLT53YXRjaHBvaW50U2V0KCk7CisgICAgCisgICAgSklUQ29tcGlsZXI6Okp1bXAgc2xvd0Nh
c2UgPSBtX2ppdC5icmFuY2g4KAorICAgICAgICBKSVRDb21waWxlcjo6Tm90RXF1YWwsCisgICAg
ICAgIEpJVENvbXBpbGVyOjpBYnNvbHV0ZUFkZHJlc3Moc2V0LT5hZGRyZXNzT2ZTdGF0ZSgpKSwK
KyAgICAgICAgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKTsKKyAgICAKKyAgICBhZGRTbG93
UGF0aEdlbmVyYXRvcigKKyAgICAgICAgc2xvd1BhdGhDYWxsKHNsb3dDYXNlLCB0aGlzLCBvcGVy
YXRpb25Ob3RpZnlXcml0ZSwgTm9SZXN1bHQsIHNldCkpOworICAgIAorICAgIG5vUmVzdWx0KG5v
ZGUpOworfQorCiBib29sIFNwZWN1bGF0aXZlSklUOjpjb21waWxlUmVnRXhwRXhlYyhOb2RlKiBu
b2RlKQogewogICAgIHVuc2lnbmVkIGJyYW5jaEluZGV4SW5CbG9jayA9IGRldGVjdFBlZXBIb2xl
QnJhbmNoKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxh
dGl2ZUpJVC5oCShyZXZpc2lvbiAxODIyMDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1NwZWN1bGF0aXZlSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTE0NjYsNiArMTQ2NiwxMiBA
QCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsKG9wZXJhdGlvbik7CiAgICAgfQog
CisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0pJVE9wZXJhdGlvbl9FV3Mg
b3BlcmF0aW9uLCBXYXRjaHBvaW50U2V0KiB3YXRjaHBvaW50U2V0KQorICAgIHsKKyAgICAgICAg
bV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW1QdHIod2F0Y2hwb2lu
dFNldCkpOworICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbChvcGVyYXRpb24pOworICAgIH0KKwog
ICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oRF9KSVRPcGVyYXRpb25fRUogb3Bl
cmF0aW9uLCBGUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMSkKICAgICB7CiAgICAgICAgIG1faml0
LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShhcmcxKTsKQEAgLTIyMTMsNiArMjIxOSw3IEBA
IHB1YmxpYzoKICAgICB2b2lkIGNvbXBpbGVQdXRUb0FyZ3VtZW50cyhOb2RlKik7CiAgICAgdm9p
ZCBjb21waWxlQ3JlYXRlU2NvcGVkQXJndW1lbnRzKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVD
cmVhdGVDbG9uZWRBcmd1bWVudHMoTm9kZSopOworICAgIHZvaWQgY29tcGlsZU5vdGlmeVdyaXRl
KE5vZGUqKTsKICAgICBib29sIGNvbXBpbGVSZWdFeHBFeGVjKE5vZGUqKTsKICAgICAKICAgICBK
SVRDb21waWxlcjo6SnVtcCBicmFuY2hJc0NlbGwoSlNWYWx1ZVJlZ3MpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhh
c2UuY3BwCShyZXZpc2lvbiAxODIyMDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3
IEBACiAjaW5jbHVkZSAiREZHQ2xvYmJlcml6ZS5oIgogI2luY2x1ZGUgIkRGR0dyYXBoLmgiCiAj
aW5jbHVkZSAiREZHUGhhc2UuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAKIG5hbWVzcGFj
ZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0
bC9GVExJbnRyaW5zaWNSZXBvc2l0b3J5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExJbnRyaW5zaWNSZXBvc2l0b3J5LmgJKHJldmlzaW9uIDE4MjIwMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW50cmluc2ljUmVwb3NpdG9yeS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xMDYsNiArMTA2LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBG
VEwgewogICAgIG1hY3JvKFZfSklUT3BlcmF0aW9uX0VDLCBmdW5jdGlvblR5cGUodm9pZFR5cGUs
IGludFB0ciwgaW50UHRyKSkgXAogICAgIG1hY3JvKFZfSklUT3BlcmF0aW9uX0VDYiwgZnVuY3Rp
b25UeXBlKHZvaWRUeXBlLCBpbnRQdHIsIGludFB0cikpIFwKICAgICBtYWNybyhWX0pJVE9wZXJh
dGlvbl9FVndzSiwgZnVuY3Rpb25UeXBlKHZvaWRUeXBlLCBpbnRQdHIsIGludFB0ciwgaW50NjQp
KSBcCisgICAgbWFjcm8oVl9KSVRPcGVyYXRpb25fRVdzLCBmdW5jdGlvblR5cGUodm9pZFR5cGUs
IGludFB0ciwgaW50UHRyKSkgXAogICAgIG1hY3JvKFZfSklUT3BlcmF0aW9uX0VaSlpaWiwgZnVu
Y3Rpb25UeXBlKHZvaWRUeXBlLCBpbnRQdHIsIGludDMyLCBpbnQ2NCwgaW50MzIsIGludDMyLCBp
bnQzMikpIFwKICAgICBtYWNybyhWX0pJVE9wZXJhdGlvbl9KLCBmdW5jdGlvblR5cGUodm9pZFR5
cGUsIGludDY0KSkgXAogICAgIG1hY3JvKFZfSklUT3BlcmF0aW9uX1osIGZ1bmN0aW9uVHlwZSh2
b2lkVHlwZSwgaW50MzIpKSBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExv
d2VyREZHVG9MTFZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRs
L0ZUTExvd2VyREZHVG9MTFZNLmNwcAkocmV2aXNpb24gMTgyMjAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3
ODMsMjkgKzM3ODMsMTkgQEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lkIGNvbXBpbGVOb3RpZnlX
cml0ZSgpCiAgICAgewotICAgICAgICBWYXJpYWJsZVdhdGNocG9pbnRTZXQqIHNldCA9IG1fbm9k
ZS0+dmFyaWFibGVXYXRjaHBvaW50U2V0KCk7Ci0gICAgICAgIAotICAgICAgICBMVmFsdWUgdmFs
dWUgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBXYXRjaHBvaW50U2V0
KiBzZXQgPSBtX25vZGUtPndhdGNocG9pbnRTZXQoKTsKICAgICAgICAgCiAgICAgICAgIExCYXNp
Y0Jsb2NrIGlzTm90SW52YWxpZGF0ZWQgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIk5vdGlmeVdy
aXRlIG5vdCBpbnZhbGlkYXRlZCBjYXNlIikpOwotICAgICAgICBMQmFzaWNCbG9jayBub3RpZnlT
bG93ID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJOb3RpZnlXcml0ZSBub3RpZnkgc2xvdyBjYXNl
IikpOwogICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1f
b3V0LCAoIk5vdGlmeVdyaXRlIGNvbnRpbnVhdGlvbiIpKTsKICAgICAgICAgCiAgICAgICAgIExW
YWx1ZSBzdGF0ZSA9IG1fb3V0LmxvYWQ4KG1fb3V0LmFic29sdXRlKHNldC0+YWRkcmVzc09mU3Rh
dGUoKSkpOwotICAgICAgICAKICAgICAgICAgbV9vdXQuYnJhbmNoKAogICAgICAgICAgICAgbV9v
dXQuZXF1YWwoc3RhdGUsIG1fb3V0LmNvbnN0SW50OChJc0ludmFsaWRhdGVkKSksCiAgICAgICAg
ICAgICB1c3VhbGx5KGNvbnRpbnVhdGlvbiksIHJhcmVseShpc05vdEludmFsaWRhdGVkKSk7CiAg
ICAgICAgIAotICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGlz
Tm90SW52YWxpZGF0ZWQsIG5vdGlmeVNsb3cpOwotCi0gICAgICAgIG1fb3V0LmJyYW5jaCgKLSAg
ICAgICAgICAgIG1fb3V0LmVxdWFsKHZhbHVlLCBtX291dC5sb2FkNjQobV9vdXQuYWJzb2x1dGUo
c2V0LT5hZGRyZXNzT2ZJbmZlcnJlZFZhbHVlKCkpKSksCi0gICAgICAgICAgICB1bnN1cmUoY29u
dGludWF0aW9uKSwgdW5zdXJlKG5vdGlmeVNsb3cpKTsKLQotICAgICAgICBtX291dC5hcHBlbmRU
byhub3RpZnlTbG93LCBjb250aW51YXRpb24pOworICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4
dCA9IG1fb3V0LmFwcGVuZFRvKGlzTm90SW52YWxpZGF0ZWQsIGNvbnRpbnVhdGlvbik7CiAKLSAg
ICAgICAgdm1DYWxsKG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25Ob3RpZnlXcml0ZSksIG1fY2Fs
bEZyYW1lLCBtX291dC5jb25zdEludFB0cihzZXQpLCB2YWx1ZSk7CisgICAgICAgIHZtQ2FsbCht
X291dC5vcGVyYXRpb24ob3BlcmF0aW9uTm90aWZ5V3JpdGUpLCBtX2NhbGxGcmFtZSwgbV9vdXQu
Y29uc3RJbnRQdHIoc2V0KSk7CiAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKICAg
ICAgICAgCiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0
ZXIuY3BwCShyZXZpc2lvbiAxODIyMDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJw
cmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OSw2ICs4OSw0NyBAQCB1
c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1lc3BhY2UgSlNDIHsKIAorU3RyaW5nIFN0YWNrRnJh
bWU6OmZyaWVuZGx5U291cmNlVVJMKCkgY29uc3QKK3sKKyAgICBTdHJpbmcgdHJhY2VMaW5lOwor
ICAgIAorICAgIHN3aXRjaCAoY29kZVR5cGUpIHsKKyAgICBjYXNlIFN0YWNrRnJhbWVFdmFsQ29k
ZToKKyAgICBjYXNlIFN0YWNrRnJhbWVGdW5jdGlvbkNvZGU6CisgICAgY2FzZSBTdGFja0ZyYW1l
R2xvYmFsQ29kZToKKyAgICAgICAgaWYgKCFzb3VyY2VVUkwuaXNFbXB0eSgpKQorICAgICAgICAg
ICAgdHJhY2VMaW5lID0gc291cmNlVVJMLmltcGwoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBTdGFja0ZyYW1lTmF0aXZlQ29kZToKKyAgICAgICAgdHJhY2VMaW5lID0gIltuYXRpdmUgY29k
ZV0iOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIHRyYWNlTGluZS5pc051bGwo
KSA/IGVtcHR5U3RyaW5nKCkgOiB0cmFjZUxpbmU7Cit9CisKK1N0cmluZyBTdGFja0ZyYW1lOjpm
cmllbmRseUZ1bmN0aW9uTmFtZShDYWxsRnJhbWUqIGNhbGxGcmFtZSkgY29uc3QKK3sKKyAgICBT
dHJpbmcgdHJhY2VMaW5lOworICAgIEpTT2JqZWN0KiBzdGFja0ZyYW1lQ2FsbGVlID0gY2FsbGVl
LmdldCgpOworCisgICAgc3dpdGNoIChjb2RlVHlwZSkgeworICAgIGNhc2UgU3RhY2tGcmFtZUV2
YWxDb2RlOgorICAgICAgICB0cmFjZUxpbmUgPSAiZXZhbCBjb2RlIjsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBTdGFja0ZyYW1lTmF0aXZlQ29kZToKKyAgICAgICAgaWYgKGNhbGxlZSkKKyAg
ICAgICAgICAgIHRyYWNlTGluZSA9IGdldENhbGN1bGF0ZWREaXNwbGF5TmFtZShjYWxsRnJhbWUs
IHN0YWNrRnJhbWVDYWxsZWUpLmltcGwoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTdGFj
a0ZyYW1lRnVuY3Rpb25Db2RlOgorICAgICAgICB0cmFjZUxpbmUgPSBnZXRDYWxjdWxhdGVkRGlz
cGxheU5hbWUoY2FsbEZyYW1lLCBzdGFja0ZyYW1lQ2FsbGVlKS5pbXBsKCk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgU3RhY2tGcmFtZUdsb2JhbENvZGU6CisgICAgICAgIHRyYWNlTGluZSA9
ICJnbG9iYWwgY29kZSI7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gdHJhY2VM
aW5lLmlzTnVsbCgpID8gZW1wdHlTdHJpbmcoKSA6IHRyYWNlTGluZTsKK30KKwogSlNWYWx1ZSBl
dmFsKENhbGxGcmFtZSogY2FsbEZyYW1lKQogewogICAgIGlmICghY2FsbEZyYW1lLT5hcmd1bWVu
dENvdW50KCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJw
cmV0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIv
SW50ZXJwcmV0ZXIuaAkocmV2aXNpb24gMTgyMjAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ludGVycHJldGVyL0ludGVycHJldGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTkwLDQ1ICs5MCw4
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB1bnNpZ25lZCBieXRlY29kZU9mZnNldDsKICAg
ICAgICAgU3RyaW5nIHNvdXJjZVVSTDsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgU3RyaW5n
IHRvU3RyaW5nKENhbGxGcmFtZSopOwotICAgICAgICBTdHJpbmcgZnJpZW5kbHlTb3VyY2VVUkwo
KSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICBTdHJpbmcgdHJhY2VMaW5lOwotCi0gICAg
ICAgICAgICBzd2l0Y2ggKGNvZGVUeXBlKSB7Ci0gICAgICAgICAgICBjYXNlIFN0YWNrRnJhbWVF
dmFsQ29kZToKLSAgICAgICAgICAgIGNhc2UgU3RhY2tGcmFtZUZ1bmN0aW9uQ29kZToKLSAgICAg
ICAgICAgIGNhc2UgU3RhY2tGcmFtZUdsb2JhbENvZGU6Ci0gICAgICAgICAgICAgICAgaWYgKCFz
b3VyY2VVUkwuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgICAgICB0cmFjZUxpbmUgPSBzb3Vy
Y2VVUkwuaW1wbCgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBT
dGFja0ZyYW1lTmF0aXZlQ29kZToKLSAgICAgICAgICAgICAgICB0cmFjZUxpbmUgPSAiW25hdGl2
ZSBjb2RlXSI7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAg
ICAgICByZXR1cm4gdHJhY2VMaW5lLmlzTnVsbCgpID8gZW1wdHlTdHJpbmcoKSA6IHRyYWNlTGlu
ZTsKLSAgICAgICAgfQotICAgICAgICBTdHJpbmcgZnJpZW5kbHlGdW5jdGlvbk5hbWUoQ2FsbEZy
YW1lKiBjYWxsRnJhbWUpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIFN0cmluZyB0cmFj
ZUxpbmU7Ci0gICAgICAgICAgICBKU09iamVjdCogc3RhY2tGcmFtZUNhbGxlZSA9IGNhbGxlZS5n
ZXQoKTsKLQotICAgICAgICAgICAgc3dpdGNoIChjb2RlVHlwZSkgewotICAgICAgICAgICAgY2Fz
ZSBTdGFja0ZyYW1lRXZhbENvZGU6Ci0gICAgICAgICAgICAgICAgdHJhY2VMaW5lID0gImV2YWwg
Y29kZSI7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFN0YWNrRnJh
bWVOYXRpdmVDb2RlOgotICAgICAgICAgICAgICAgIGlmIChjYWxsZWUpCi0gICAgICAgICAgICAg
ICAgICAgIHRyYWNlTGluZSA9IGdldENhbGN1bGF0ZWREaXNwbGF5TmFtZShjYWxsRnJhbWUsIHN0
YWNrRnJhbWVDYWxsZWUpLmltcGwoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIGNhc2UgU3RhY2tGcmFtZUZ1bmN0aW9uQ29kZToKLSAgICAgICAgICAgICAgICB0cmFjZUxp
bmUgPSBnZXRDYWxjdWxhdGVkRGlzcGxheU5hbWUoY2FsbEZyYW1lLCBzdGFja0ZyYW1lQ2FsbGVl
KS5pbXBsKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFN0YWNr
RnJhbWVHbG9iYWxDb2RlOgotICAgICAgICAgICAgICAgIHRyYWNlTGluZSA9ICJnbG9iYWwgY29k
ZSI7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBy
ZXR1cm4gdHJhY2VMaW5lLmlzTnVsbCgpID8gZW1wdHlTdHJpbmcoKSA6IHRyYWNlTGluZTsKLSAg
ICAgICAgfQorICAgICAgICBTdHJpbmcgZnJpZW5kbHlTb3VyY2VVUkwoKSBjb25zdDsKKyAgICAg
ICAgU3RyaW5nIGZyaWVuZGx5RnVuY3Rpb25OYW1lKENhbGxGcmFtZSopIGNvbnN0OwogICAgICAg
ICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGNvbXB1dGVMaW5lQW5kQ29sdW1uKHVuc2lnbmVkJiBs
aW5lLCB1bnNpZ25lZCYgY29sdW1uKTsKIAogICAgIHByaXZhdGU6CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVQuY3BwCShyZXZpc2lvbiAxODIyMDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNSw2ICsxMDUsMTQgQEAgdm9pZCBK
SVQ6OmVtaXRFbnRlck9wdGltaXphdGlvbkNoZWNrKCkKIH0KICNlbmRpZgogCit2b2lkIEpJVDo6
ZW1pdE5vdGlmeVdyaXRlKFdhdGNocG9pbnRTZXQqIHNldCkKK3sKKyAgICBpZiAoIXNldCB8fCBz
ZXQtPnN0YXRlKCkgPT0gSXNJbnZhbGlkYXRlZCkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAg
IGFkZFNsb3dDYXNlKGJyYW5jaDgoTm90RXF1YWwsIEFic29sdXRlQWRkcmVzcyhzZXQtPmFkZHJl
c3NPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpKTsKK30KKwogdm9pZCBK
SVQ6OmFzc2VydFN0YWNrUG9pbnRlck9mZnNldCgpCiB7CiAgICAgaWYgKEFTU0VSVF9ESVNBQkxF
RCkKQEAgLTE4OSw3ICsxOTcsNiBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygp
CiAgICAgICAgIERFRklORV9TTE9XX09QKGlzX29iamVjdF9vcl9udWxsKQogICAgICAgICBERUZJ
TkVfU0xPV19PUCh0eXBlb2YpCiAKLSAgICAgICAgREVGSU5FX09QKG9wX3RvdWNoX2VudHJ5KQog
ICAgICAgICBERUZJTkVfT1Aob3BfYWRkKQogICAgICAgICBERUZJTkVfT1Aob3BfYml0YW5kKQog
ICAgICAgICBERUZJTkVfT1Aob3BfYml0b3IpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJ
KHJldmlzaW9uIDE4MjIwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHdv
cmtpbmcgY29weSkKQEAgLTQ1Nyw3ICs0NTcsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
CiAgICAgICAgIHZvaWQgYXNzZXJ0U3RhY2tQb2ludGVyT2Zmc2V0KCk7CiAKLSAgICAgICAgdm9p
ZCBlbWl0X29wX3RvdWNoX2VudHJ5KEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9v
cF9hZGQoSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2JpdGFuZChJbnN0cnVj
dGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfYml0b3IoSW5zdHJ1Y3Rpb24qKTsKQEAgLTY0
MCwxMyArNjM5LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQgZW1pdEdldEdsb2Jh
bFZhcih1aW50cHRyX3Qgb3BlcmFuZCk7CiAgICAgICAgIHZvaWQgZW1pdEdldENsb3N1cmVWYXIo
aW50IHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCk7CiAgICAgICAgIHZvaWQgZW1pdFB1dEdsb2Jh
bFByb3BlcnR5KHVpbnRwdHJfdCogb3BlcmFuZFNsb3QsIGludCB2YWx1ZSk7Ci0jaWYgVVNFKEpT
VkFMVUU2NCkKLSAgICAgICAgdm9pZCBlbWl0Tm90aWZ5V3JpdGUoUmVnaXN0ZXJJRCB2YWx1ZSwg
UmVnaXN0ZXJJRCBzY3JhdGNoLCBWYXJpYWJsZVdhdGNocG9pbnRTZXQqKTsKLSNlbHNlCi0gICAg
ICAgIHZvaWQgZW1pdE5vdGlmeVdyaXRlKFJlZ2lzdGVySUQgdGFnLCBSZWdpc3RlcklEIHBheWxv
YWQsIFJlZ2lzdGVySUQgc2NyYXRjaCwgVmFyaWFibGVXYXRjaHBvaW50U2V0Kik7Ci0jZW5kaWYK
LSAgICAgICAgdm9pZCBlbWl0UHV0R2xvYmFsVmFyKHVpbnRwdHJfdCBvcGVyYW5kLCBpbnQgdmFs
dWUsIFZhcmlhYmxlV2F0Y2hwb2ludFNldCopOwotICAgICAgICB2b2lkIGVtaXRQdXRDbG9zdXJl
VmFyKGludCBzY29wZSwgdWludHB0cl90IG9wZXJhbmQsIGludCB2YWx1ZSwgVmFyaWFibGVXYXRj
aHBvaW50U2V0Kik7CisgICAgICAgIHZvaWQgZW1pdE5vdGlmeVdyaXRlKFdhdGNocG9pbnRTZXQq
KTsKKyAgICAgICAgdm9pZCBlbWl0UHV0R2xvYmFsVmFyKHVpbnRwdHJfdCBvcGVyYW5kLCBpbnQg
dmFsdWUsIFdhdGNocG9pbnRTZXQqKTsKKyAgICAgICAgdm9pZCBlbWl0UHV0Q2xvc3VyZVZhcihp
bnQgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kLCBpbnQgdmFsdWUsIFdhdGNocG9pbnRTZXQqKTsK
IAogICAgICAgICB2b2lkIGVtaXRJbml0UmVnaXN0ZXIoaW50IGRzdCk7CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkocmV2aXNpb24gMTgyMjAwKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtODc5LDE1ICs4NzksNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfdG9fbnVtYmVyKEluc3Ry
dWN0CiAKICNlbmRpZiAvLyBVU0UoSlNWQUxVRTY0KQogCi12b2lkIEpJVDo6ZW1pdF9vcF90b3Vj
aF9lbnRyeShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQotewotICAgIGlmIChtX2Nv
ZGVCbG9jay0+c3ltYm9sVGFibGUoKS0+bV9mdW5jdGlvbkVudGVyZWRPbmNlLmhhc0JlZW5JbnZh
bGlkYXRlZCgpKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgSklUU2xvd1BhdGhDYWxsIHNs
b3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3dfcGF0aF90b3VjaF9lbnRy
eSk7Ci0gICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKLX0KLQogdm9pZCBKSVQ6OmVtaXRfb3BfbG9v
cF9oaW50KEluc3RydWN0aW9uKikKIHsKICAgICAvLyBFbWl0IHRoZSBKSVQgb3B0aW1pemF0aW9u
IGNoZWNrOiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25z
LmNwcAkocmV2aXNpb24gMTgyMjAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRP
cGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTMzLDYgKzkzMywxNCBAQCBFbmNvZGVk
SlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5lCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVu
Y29kZShKU0Z1bmN0aW9uOjpjcmVhdGUodm0sIHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJs
ZSo+KGZ1bmN0aW9uRXhlY3V0YWJsZSksIHNjb3BlKSk7CiB9CiAKK0VuY29kZWRKU1ZhbHVlIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3RnVuY3Rpb25XaXRoSW52YWxpZGF0ZWRSZWFsbG9jYXRp
b25XYXRjaHBvaW50KEV4ZWNTdGF0ZSogZXhlYywgSlNTY29wZSogc2NvcGUsIEpTQ2VsbCogZnVu
Y3Rpb25FeGVjdXRhYmxlKQoreworICAgIEFTU0VSVChmdW5jdGlvbkV4ZWN1dGFibGUtPmluaGVy
aXRzKEZ1bmN0aW9uRXhlY3V0YWJsZTo6aW5mbygpKSk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0o
KTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShKU0Z1bmN0aW9uOjpjcmVhdGVXaXRoSW52YWxpZGF0ZWRSZWFs
bG9jYXRpb25XYXRjaHBvaW50KHZtLCBzdGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihm
dW5jdGlvbkV4ZWN1dGFibGUpLCBzY29wZSkpOworfQorCiBKU0NlbGwqIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uTmV3T2JqZWN0KEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUp
CiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CkBAIC0xNzAzLDggKzE3MTEsOCBAQCB2b2lk
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0VG9TY29wZShFCiAgICAgaWYgKG1vZGVBbmRUeXBl
LnR5cGUoKSA9PSBMb2NhbENsb3N1cmVWYXIpIHsKICAgICAgICAgSlNMZXhpY2FsRW52aXJvbm1l
bnQqIGVudmlyb25tZW50ID0ganNDYXN0PEpTTGV4aWNhbEVudmlyb25tZW50Kj4oc2NvcGUpOwog
ICAgICAgICBlbnZpcm9ubWVudC0+dmFyaWFibGVBdChTY29wZU9mZnNldChwY1s2XS51Lm9wZXJh
bmQpKS5zZXQodm0sIGVudmlyb25tZW50LCB2YWx1ZSk7Ci0gICAgICAgIGlmIChWYXJpYWJsZVdh
dGNocG9pbnRTZXQqIHNldCA9IHBjWzVdLnUud2F0Y2hwb2ludFNldCkKLSAgICAgICAgICAgIHNl
dC0+bm90aWZ5V3JpdGUodm0sIHZhbHVlLCAiRXhlY3V0ZWQgb3BfcHV0X3Njb3BlPExvY2FsQ2xv
c3VyZVZhcj4iKTsKKyAgICAgICAgaWYgKFdhdGNocG9pbnRTZXQqIHNldCA9IHBjWzVdLnUud2F0
Y2hwb2ludFNldCkKKyAgICAgICAgICAgIHNldC0+dG91Y2goIkV4ZWN1dGVkIG9wX3B1dF9zY29w
ZTxMb2NhbENsb3N1cmVWYXI+Iik7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaWYgKG1v
ZGVBbmRUeXBlLm1vZGUoKSA9PSBUaHJvd0lmTm90Rm91bmQgJiYgIXNjb3BlLT5oYXNQcm9wZXJ0
eShleGVjLCBpZGVudCkpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bl
cmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bl
cmF0aW9ucy5oCShyZXZpc2lvbiAxODIyMDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0
L0pJVE9wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtODYsNiArODYsNyBAQCBleHRlcm4g
IkMiIHsKICAgICBWOiB2b2lkCiAgICAgVm06IFZNKgogICAgIFZ3czogVmFyaWFibGVXYXRjaHBv
aW50U2V0KgorICAgIFdzOiBXYXRjaHBvaW50U2V0KgogICAgIFo6IGludDMyX3QKICovCiAKQEAg
LTE5Miw2ICsxOTMsNyBAQCB0eXBlZGVmIHZvaWQgSklUX09QRVJBVElPTiAoKlZfSklUT3BlcmF0
CiB0eXBlZGVmIHZvaWQgSklUX09QRVJBVElPTiAoKlZfSklUT3BlcmF0aW9uX0VQWkopKEV4ZWNT
dGF0ZSosIHZvaWQqLCBpbnQzMl90LCBFbmNvZGVkSlNWYWx1ZSk7CiB0eXBlZGVmIHZvaWQgSklU
X09QRVJBVElPTiAoKlZfSklUT3BlcmF0aW9uX0VTc2lKSkkpKEV4ZWNTdGF0ZSosIFN0cnVjdHVy
ZVN0dWJJbmZvKiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBTdHJpbmdJbXBsKik7
CiB0eXBlZGVmIHZvaWQgSklUX09QRVJBVElPTiAoKlZfSklUT3BlcmF0aW9uX0VWd3NKKShFeGVj
U3RhdGUqLCBWYXJpYWJsZVdhdGNocG9pbnRTZXQqLCBFbmNvZGVkSlNWYWx1ZSk7Cit0eXBlZGVm
IHZvaWQgSklUX09QRVJBVElPTiAoKlZfSklUT3BlcmF0aW9uX0VXcykoRXhlY1N0YXRlKiwgV2F0
Y2hwb2ludFNldCopOwogdHlwZWRlZiB2b2lkIEpJVF9PUEVSQVRJT04gKCpWX0pJVE9wZXJhdGlv
bl9FWikoRXhlY1N0YXRlKiwgaW50MzJfdCk7CiB0eXBlZGVmIHZvaWQgSklUX09QRVJBVElPTiAo
KlZfSklUT3BlcmF0aW9uX0VaSikoRXhlY1N0YXRlKiwgaW50MzJfdCwgRW5jb2RlZEpTVmFsdWUp
OwogdHlwZWRlZiB2b2lkIEpJVF9PUEVSQVRJT04gKCpWX0pJVE9wZXJhdGlvbl9FWkpaWlopKEV4
ZWNTdGF0ZSosIGludDMyX3QsIEVuY29kZWRKU1ZhbHVlLCBpbnQzMl90LCBpbnQzMl90LCBpbnQz
Ml90KTsKQEAgLTI3OCw2ICsyODAsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvbk5lCiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0FycmF5
QnVmZmVyV2l0aFByb2ZpbGUoRXhlY1N0YXRlKiwgQXJyYXlBbGxvY2F0aW9uUHJvZmlsZSosIGNv
bnN0IEpTVmFsdWUqIHZhbHVlcywgaW50MzJfdCBzaXplKSBXVEZfSU5URVJOQUw7CiBFbmNvZGVk
SlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemVBbmRQcm9maWxl
KEV4ZWNTdGF0ZSosIEFycmF5QWxsb2NhdGlvblByb2ZpbGUqLCBFbmNvZGVkSlNWYWx1ZSBzaXpl
KSBXVEZfSU5URVJOQUw7CiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5l
d0Z1bmN0aW9uKEV4ZWNTdGF0ZSosIEpTU2NvcGUqLCBKU0NlbGwqKSBXVEZfSU5URVJOQUw7CitF
bmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0Z1bmN0aW9uV2l0aEludmFs
aWRhdGVkUmVhbGxvY2F0aW9uV2F0Y2hwb2ludChFeGVjU3RhdGUqLCBKU1Njb3BlKiwgSlNDZWxs
KikgV1RGX0lOVEVSTkFMOwogSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld09iamVj
dChFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqKSBXVEZfSU5URVJOQUw7CiBFbmNvZGVkSlNWYWx1ZSBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1JlZ2V4cChFeGVjU3RhdGUqLCB2b2lkKikgV1RGX0lO
VEVSTkFMOwogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkhhbmRsZVdhdGNoZG9nVGltZXIo
RXhlY1N0YXRlKikgV1RGX0lOVEVSTkFMOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCShyZXZpc2lvbiAxODIyMDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC03NTAsMjcgKzc1MCwxMCBAQCB2b2lkIEpJVDo6ZW1pdFB1dEds
b2JhbFByb3BlcnR5KHVpbnRwdHJfCiAgICAgc3RvcmUzMihyZWdUMiwgQmFzZUluZGV4KHJlZ1Qw
LCByZWdUMSwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2Yo
RW5jb2RlZEpTVmFsdWUpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3Is
IGFzQml0cy5wYXlsb2FkKSkpOwogfQogCi12b2lkIEpJVDo6ZW1pdE5vdGlmeVdyaXRlKFJlZ2lz
dGVySUQgdGFnLCBSZWdpc3RlcklEIHBheWxvYWQsIFJlZ2lzdGVySUQgc2NyYXRjaCwgVmFyaWFi
bGVXYXRjaHBvaW50U2V0KiBzZXQpCi17Ci0gICAgaWYgKCFzZXQgfHwgc2V0LT5zdGF0ZSgpID09
IElzSW52YWxpZGF0ZWQpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBsb2FkOChzZXQtPmFk
ZHJlc3NPZlN0YXRlKCksIHNjcmF0Y2gpOwotICAgIEp1bXAgaXNEb25lID0gYnJhbmNoMzIoRXF1
YWwsIHNjcmF0Y2gsIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSk7Ci0KLSAgICBKdW1wTGlz
dCBub3RpZnlTbG93ID0gYnJhbmNoMzIoCi0gICAgICAgIE5vdEVxdWFsLCBBYnNvbHV0ZUFkZHJl
c3Moc2V0LT5hZGRyZXNzT2ZJbmZlcnJlZFZhbHVlKCktPnBheWxvYWRQb2ludGVyKCkpLCBwYXls
b2FkKTsKLSAgICBub3RpZnlTbG93LmFwcGVuZChicmFuY2gzMigKLSAgICAgICAgTm90RXF1YWws
IEFic29sdXRlQWRkcmVzcyhzZXQtPmFkZHJlc3NPZkluZmVycmVkVmFsdWUoKS0+dGFnUG9pbnRl
cigpKSwgdGFnKSk7Ci0gICAgYWRkU2xvd0Nhc2Uobm90aWZ5U2xvdyk7Ci0KLSAgICBpc0RvbmUu
bGluayh0aGlzKTsKLX0KLQogdm9pZCBKSVQ6OmVtaXRQdXRHbG9iYWxWYXIodWludHB0cl90IG9w
ZXJhbmQsIGludCB2YWx1ZSwgVmFyaWFibGVXYXRjaHBvaW50U2V0KiBzZXQpCiB7CiAgICAgZW1p
dExvYWQodmFsdWUsIHJlZ1QxLCByZWdUMCk7Ci0gICAgZW1pdE5vdGlmeVdyaXRlKHJlZ1QxLCBy
ZWdUMCwgcmVnVDIsIHNldCk7CisgICAgZW1pdE5vdGlmeVdyaXRlKHNldCk7CiAgICAgc3RvcmUz
MihyZWdUMSwgcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4ob3BlcmFuZCkgKyBPQkpFQ1RfT0ZGU0VU
T0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpOwogICAgIHN0b3JlMzIocmVn
VDAsIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG9wZXJhbmQpICsgT0JKRUNUX09GRlNFVE9GKEVu
Y29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSk7CiB9CkBAIC03NzksNyArNzYy
LDcgQEAgdm9pZCBKSVQ6OmVtaXRQdXRDbG9zdXJlVmFyKGludCBzY29wZSwgdQogewogICAgIGVt
aXRMb2FkKHZhbHVlLCByZWdUMywgcmVnVDIpOwogICAgIGVtaXRMb2FkKHNjb3BlLCByZWdUMSwg
cmVnVDApOwotICAgIGVtaXROb3RpZnlXcml0ZShyZWdUMywgcmVnVDIsIHJlZ1Q0LCBzZXQpOwor
ICAgIGVtaXROb3RpZnlXcml0ZShzZXQpOwogICAgIHN0b3JlMzIocmVnVDMsIEFkZHJlc3MocmVn
VDAsIEpTRW52aXJvbm1lbnRSZWNvcmQ6Om9mZnNldE9mVmFyaWFibGVzKCkgKyBvcGVyYW5kICog
c2l6ZW9mKFJlZ2lzdGVyKSArIFRhZ09mZnNldCkpOwogICAgIHN0b3JlMzIocmVnVDIsIEFkZHJl
c3MocmVnVDAsIEpTRW52aXJvbm1lbnRSZWNvcmQ6Om9mZnNldE9mVmFyaWFibGVzKCkgKyBvcGVy
YW5kICogc2l6ZW9mKFJlZ2lzdGVyKSArIFBheWxvYWRPZmZzZXQpKTsKIH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCShyZXZpc2lv
biAxODIyMDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzI4LDI5ICs3MjgsMTggQEAgdm9pZCBKSVQ6OmVtaXRQ
dXRHbG9iYWxQcm9wZXJ0eSh1aW50cHRyXwogICAgIHN0b3JlUHRyKHJlZ1QyLCBCYXNlSW5kZXgo
cmVnVDAsIHJlZ1QxLCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNp
emVvZihFbmNvZGVkSlNWYWx1ZSkpKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXROb3RpZnlXcml0ZShS
ZWdpc3RlcklEIHZhbHVlLCBSZWdpc3RlcklEIHNjcmF0Y2gsIFZhcmlhYmxlV2F0Y2hwb2ludFNl
dCogc2V0KQotewotICAgIGlmICghc2V0IHx8IHNldC0+c3RhdGUoKSA9PSBJc0ludmFsaWRhdGVk
KQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgbG9hZDgoc2V0LT5hZGRyZXNzT2ZTdGF0ZSgp
LCBzY3JhdGNoKTsKLSAgICBKdW1wIGlzRG9uZSA9IGJyYW5jaDMyKEVxdWFsLCBzY3JhdGNoLCBU
cnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDY0KE5v
dEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3Moc2V0LT5hZGRyZXNzT2ZJbmZlcnJlZFZhbHVlKCkpLCB2
YWx1ZSkpOwotICAgIGlzRG9uZS5saW5rKHRoaXMpOwotfQotCi12b2lkIEpJVDo6ZW1pdFB1dEds
b2JhbFZhcih1aW50cHRyX3Qgb3BlcmFuZCwgaW50IHZhbHVlLCBWYXJpYWJsZVdhdGNocG9pbnRT
ZXQqIHNldCkKK3ZvaWQgSklUOjplbWl0UHV0R2xvYmFsVmFyKHVpbnRwdHJfdCBvcGVyYW5kLCBp
bnQgdmFsdWUsIFdhdGNocG9pbnRTZXQqIHNldCkKIHsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgZW1pdE5vdGlmeVdyaXRlKHJlZ1QwLCByZWdUMSwgc2V0
KTsKKyAgICBlbWl0Tm90aWZ5V3JpdGUoc2V0KTsKICAgICBzdG9yZVB0cihyZWdUMCwgcmVpbnRl
cnByZXRfY2FzdDx2b2lkKj4ob3BlcmFuZCkpOwogfQogCi12b2lkIEpJVDo6ZW1pdFB1dENsb3N1
cmVWYXIoaW50IHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCwgaW50IHZhbHVlLCBWYXJpYWJsZVdh
dGNocG9pbnRTZXQqIHNldCkKK3ZvaWQgSklUOjplbWl0UHV0Q2xvc3VyZVZhcihpbnQgc2NvcGUs
IHVpbnRwdHJfdCBvcGVyYW5kLCBpbnQgdmFsdWUsIFdhdGNocG9pbnRTZXQqIHNldCkKIHsKICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMSk7CiAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3RlcihzY29wZSwgcmVnVDApOwotICAgIGVtaXROb3RpZnlXcml0ZShyZWdUMSwgcmVn
VDIsIHNldCk7CisgICAgZW1pdE5vdGlmeVdyaXRlKHNldCk7CiAgICAgc3RvcmVQdHIocmVnVDEs
IEFkZHJlc3MocmVnVDAsIEpTRW52aXJvbm1lbnRSZWNvcmQ6Om9mZnNldE9mVmFyaWFibGVzKCkg
KyBvcGVyYW5kICogc2l6ZW9mKFJlZ2lzdGVyKSkpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJKHJldmlzaW9uIDE4MjIwMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEzODQsOCArMTM4NCwxMiBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93
X3BhdGhfcHV0X3RvX3NjCiAgICAgaWYgKG1vZGVBbmRUeXBlLnR5cGUoKSA9PSBMb2NhbENsb3N1
cmVWYXIpIHsKICAgICAgICAgSlNMZXhpY2FsRW52aXJvbm1lbnQqIGVudmlyb25tZW50ID0ganND
YXN0PEpTTGV4aWNhbEVudmlyb25tZW50Kj4oc2NvcGUpOwogICAgICAgICBlbnZpcm9ubWVudC0+
dmFyaWFibGVBdChTY29wZU9mZnNldChwY1s2XS51Lm9wZXJhbmQpKS5zZXQodm0sIGVudmlyb25t
ZW50LCB2YWx1ZSk7Ci0gICAgICAgIGlmIChWYXJpYWJsZVdhdGNocG9pbnRTZXQqIHNldCA9IHBj
WzVdLnUud2F0Y2hwb2ludFNldCkKLSAgICAgICAgICAgIHNldC0+bm90aWZ5V3JpdGUodm0sIHZh
bHVlLCAiRXhlY3V0ZWQgb3BfcHV0X3Njb3BlPExvY2FsQ2xvc3VyZVZhcj4iKTsKKyAgICAgICAg
CisgICAgICAgIC8vIEhhdmUgdG8gZG8gdGhpcyAqYWZ0ZXIqIHRoZSB3cml0ZSwgYmVjYXVzZSBp
ZiB0aGlzIHB1dHMgdGhlIHNldCBpbnRvIElzV2F0Y2hlZCwgdGhlbiB3ZSBuZWVkCisgICAgICAg
IC8vIHRvIGhhdmUgYWxyZWFkeSBjaGFuZ2VkIHRoZSB2YWx1ZSBvZiB0aGUgdmFyaWFibGUuIE90
aGVyd2lzZSB3ZSBtaWdodCB3YXRjaCBhbmQgY29uc3RhbnQtZm9sZAorICAgICAgICAvLyB0byB0
aGUgVW5kZWZpbmVkIHZhbHVlIGZyb20gYmVmb3JlIHRoZSBhc3NpZ25tZW50LgorICAgICAgICBp
ZiAoV2F0Y2hwb2ludFNldCogc2V0ID0gcGNbNV0udS53YXRjaHBvaW50U2V0KQorICAgICAgICAg
ICAgc2V0LT50b3VjaCgiRXhlY3V0ZWQgb3BfcHV0X3Njb3BlPExvY2FsQ2xvc3VyZVZhcj4iKTsK
ICAgICAgICAgTExJTlRfRU5EKCk7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQkocmV2
aXNpb24gMTgyMjAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50
ZXJwcmV0ZXIzMl82NC5hc20JKHdvcmtpbmcgY29weSkKQEAgLTgwNSwxNCArODA1LDYgQEAgX2xs
aW50X29wX21vdjoKICAgICBkaXNwYXRjaCgzKQogCiAKLW1hY3JvIG5vdGlmeVdyaXRlKHNldCwg
dmFsdWVUYWcsIHZhbHVlUGF5bG9hZCwgc2NyYXRjaCwgc2xvdykKLSAgICBsb2FkYiBWYXJpYWJs
ZVdhdGNocG9pbnRTZXQ6Om1fc3RhdGVbc2V0XSwgc2NyYXRjaAotICAgIGJpZXEgc2NyYXRjaCwg
SXNJbnZhbGlkYXRlZCwgLmRvbmUKLSAgICBiaW5lcSB2YWx1ZVBheWxvYWQsIFZhcmlhYmxlV2F0
Y2hwb2ludFNldDo6bV9pbmZlcnJlZFZhbHVlICsgUGF5bG9hZE9mZnNldFtzZXRdLCBzbG93Ci0g
ICAgYmluZXEgdmFsdWVUYWcsIFZhcmlhYmxlV2F0Y2hwb2ludFNldDo6bV9pbmZlcnJlZFZhbHVl
ICsgVGFnT2Zmc2V0W3NldF0sIHNsb3cKLS5kb25lOgotZW5kCi0KIF9sbGludF9vcF9ub3Q6CiAg
ICAgdHJhY2VFeGVjdXRpb24oKQogICAgIGxvYWRpIDhbUENdLCB0MApAQCAtMjA3NSwzOSArMjA2
NywzOSBAQCBfbGxpbnRfb3BfcmVzb2x2ZV9zY29wZToKICNyR2xvYmFsUHJvcGVydHk6CiAgICAg
YmluZXEgdDAsIEdsb2JhbFByb3BlcnR5LCAuckdsb2JhbFZhcgogICAgIGdldEdsb2JhbE9iamVj
dCgxKQotICAgIGRpc3BhdGNoKDcpCisgICAgZGlzcGF0Y2goNikKIAogLnJHbG9iYWxWYXI6CiAg
ICAgYmluZXEgdDAsIEdsb2JhbFZhciwgLnJDbG9zdXJlVmFyCiAgICAgZ2V0R2xvYmFsT2JqZWN0
KDEpCi0gICAgZGlzcGF0Y2goNykKKyAgICBkaXNwYXRjaCg2KQogCiAuckNsb3N1cmVWYXI6CiAg
ICAgYmluZXEgdDAsIENsb3N1cmVWYXIsIC5yR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9u
Q2hlY2tzCiAgICAgcmVzb2x2ZVNjb3BlKCkKLSAgICBkaXNwYXRjaCg3KQorICAgIGRpc3BhdGNo
KDYpCiAKIC5yR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgogICAgIGJpbmVx
IHQwLCBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MsIC5yR2xvYmFsVmFyV2l0
aFZhckluamVjdGlvbkNoZWNrcwogICAgIHZhckluamVjdGlvbkNoZWNrKC5yRHluYW1pYykKICAg
ICBnZXRHbG9iYWxPYmplY3QoMSkKLSAgICBkaXNwYXRjaCg3KQorICAgIGRpc3BhdGNoKDYpCiAK
IC5yR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKICAgICBiaW5lcSB0MCwgR2xvYmFs
VmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgLnJDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNo
ZWNrcwogICAgIHZhckluamVjdGlvbkNoZWNrKC5yRHluYW1pYykKICAgICBnZXRHbG9iYWxPYmpl
Y3QoMSkKLSAgICBkaXNwYXRjaCg3KQorICAgIGRpc3BhdGNoKDYpCiAKIC5yQ2xvc3VyZVZhcldp
dGhWYXJJbmplY3Rpb25DaGVja3M6CiAgICAgYmluZXEgdDAsIENsb3N1cmVWYXJXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzLCAuckR5bmFtaWMKICAgICB2YXJJbmplY3Rpb25DaGVjayguckR5bmFtaWMp
CiAgICAgcmVzb2x2ZVNjb3BlKCkKLSAgICBkaXNwYXRjaCg3KQorICAgIGRpc3BhdGNoKDYpCiAK
IC5yRHluYW1pYzoKICAgICBjYWxsU2xvd1BhdGgoX2xsaW50X3Nsb3dfcGF0aF9yZXNvbHZlX3Nj
b3BlKQotICAgIGRpc3BhdGNoKDcpCisgICAgZGlzcGF0Y2goNikKIAogCiBtYWNybyBsb2FkV2l0
aFN0cnVjdHVyZUNoZWNrKG9wZXJhbmQsIHNsb3dQYXRoKQpAQCAtMjIwNCw3ICsyMTk2LDcgQEAg
bWFjcm8gcHV0R2xvYmFsVmFyKCkKICAgICBsb2FkaXNGcm9tSW5zdHJ1Y3Rpb24oMywgdDApCiAg
ICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZSh0MCwgdDEsIHQyKQogICAgIGxvYWRwRnJvbUluc3Ry
dWN0aW9uKDUsIHQzKQotICAgIG5vdGlmeVdyaXRlKHQzLCB0MSwgdDIsIHQwLCAucER5bmFtaWMp
CisgICAgbm90aWZ5V3JpdGUodDMsIC5wRHluYW1pYykKICAgICBsb2FkcEZyb21JbnN0cnVjdGlv
big2LCB0MCkKICAgICBzdG9yZWkgdDEsIFRhZ09mZnNldFt0MF0KICAgICBzdG9yZWkgdDIsIFBh
eWxvYWRPZmZzZXRbdDBdCkBAIC0yMjIzLDcgKzIyMTUsNyBAQCBtYWNybyBwdXRMb2NhbENsb3N1
cmVWYXIoKQogICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUodDEsIHQyLCB0MykKICAgICBsb2Fk
cEZyb21JbnN0cnVjdGlvbig1LCB0NCkKICAgICBidHB6IHQ0LCAubm9WYXJpYWJsZVdhdGNocG9p
bnRTZXQKLSAgICBub3RpZnlXcml0ZSh0NCwgdDIsIHQzLCB0MSwgLnBEeW5hbWljKQorICAgIG5v
dGlmeVdyaXRlKHQ0LCAucER5bmFtaWMpCiAubm9WYXJpYWJsZVdhdGNocG9pbnRTZXQ6CiAgICAg
bG9hZGlzRnJvbUluc3RydWN0aW9uKDYsIHQxKQogICAgIHN0b3JlaSB0MiwgSlNFbnZpcm9ubWVu
dFJlY29yZF92YXJpYWJsZXMgKyBUYWdPZmZzZXRbdDAsIHQxLCA4XQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20J
KHJldmlzaW9uIDE4MjIwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZl
bEludGVycHJldGVyNjQuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC02OTAsMTMgKzY5MCw2IEBAIF9s
bGludF9vcF9tb3Y6CiAgICAgZGlzcGF0Y2goMykKIAogCi1tYWNybyBub3RpZnlXcml0ZShzZXQs
IHZhbHVlLCBzY3JhdGNoLCBzbG93KQotICAgIGxvYWRiIFZhcmlhYmxlV2F0Y2hwb2ludFNldDo6
bV9zdGF0ZVtzZXRdLCBzY3JhdGNoCi0gICAgYmllcSBzY3JhdGNoLCBJc0ludmFsaWRhdGVkLCAu
ZG9uZQotICAgIGJxbmVxIHZhbHVlLCBWYXJpYWJsZVdhdGNocG9pbnRTZXQ6Om1faW5mZXJyZWRW
YWx1ZVtzZXRdLCBzbG93Ci0uZG9uZToKLWVuZAotCiBfbGxpbnRfb3Bfbm90OgogICAgIHRyYWNl
RXhlY3V0aW9uKCkKICAgICBsb2FkaXNGcm9tSW5zdHJ1Y3Rpb24oMiwgdDApCkBAIC0xOTQ0LDM5
ICsxOTM3LDM5IEBAIF9sbGludF9vcF9yZXNvbHZlX3Njb3BlOgogI3JHbG9iYWxQcm9wZXJ0eToK
ICAgICBiaW5lcSB0MCwgR2xvYmFsUHJvcGVydHksIC5yR2xvYmFsVmFyCiAgICAgZ2V0R2xvYmFs
T2JqZWN0KDEpCi0gICAgZGlzcGF0Y2goNykKKyAgICBkaXNwYXRjaCg2KQogCiAuckdsb2JhbFZh
cjoKICAgICBiaW5lcSB0MCwgR2xvYmFsVmFyLCAuckNsb3N1cmVWYXIKICAgICBnZXRHbG9iYWxP
YmplY3QoMSkKLSAgICBkaXNwYXRjaCg3KQorICAgIGRpc3BhdGNoKDYpCiAKIC5yQ2xvc3VyZVZh
cjoKICAgICBiaW5lcSB0MCwgQ2xvc3VyZVZhciwgLnJHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmpl
Y3Rpb25DaGVja3MKICAgICByZXNvbHZlU2NvcGUoKQotICAgIGRpc3BhdGNoKDcpCisgICAgZGlz
cGF0Y2goNikKIAogLnJHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3M6CiAgICAg
YmluZXEgdDAsIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcywgLnJHbG9iYWxW
YXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzCiAgICAgdmFySW5qZWN0aW9uQ2hlY2soLnJEeW5hbWlj
KQogICAgIGdldEdsb2JhbE9iamVjdCgxKQotICAgIGRpc3BhdGNoKDcpCisgICAgZGlzcGF0Y2go
NikKIAogLnJHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgogICAgIGJpbmVxIHQwLCBH
bG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCAuckNsb3N1cmVWYXJXaXRoVmFySW5qZWN0
aW9uQ2hlY2tzCiAgICAgdmFySW5qZWN0aW9uQ2hlY2soLnJEeW5hbWljKQogICAgIGdldEdsb2Jh
bE9iamVjdCgxKQotICAgIGRpc3BhdGNoKDcpCisgICAgZGlzcGF0Y2goNikKIAogLnJDbG9zdXJl
VmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKICAgICBiaW5lcSB0MCwgQ2xvc3VyZVZhcldpdGhW
YXJJbmplY3Rpb25DaGVja3MsIC5yRHluYW1pYwogICAgIHZhckluamVjdGlvbkNoZWNrKC5yRHlu
YW1pYykKICAgICByZXNvbHZlU2NvcGUoKQotICAgIGRpc3BhdGNoKDcpCisgICAgZGlzcGF0Y2go
NikKIAogLnJEeW5hbWljOgogICAgIGNhbGxTbG93UGF0aChfbGxpbnRfc2xvd19wYXRoX3Jlc29s
dmVfc2NvcGUpCi0gICAgZGlzcGF0Y2goNykKKyAgICBkaXNwYXRjaCg2KQogCiAKIG1hY3JvIGxv
YWRXaXRoU3RydWN0dXJlQ2hlY2sob3BlcmFuZCwgc2xvd1BhdGgpCkBAIC0yMDY5LDggKzIwNjIs
OCBAQCBtYWNybyBwdXRHbG9iYWxWYXIoKQogICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlvbigzLCB0
MCkKICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHQwLCB0MSkKICAgICBsb2FkcEZyb21JbnN0
cnVjdGlvbig1LCB0MikKLSAgICBub3RpZnlXcml0ZSh0MiwgdDEsIHQwLCAucER5bmFtaWMpCiAg
ICAgbG9hZHBGcm9tSW5zdHJ1Y3Rpb24oNiwgdDApCisgICAgbm90aWZ5V3JpdGUodDIsIC5wRHlu
YW1pYykKICAgICBzdG9yZXEgdDEsIFt0MF0KIGVuZAogCkBAIC0yMDg2LDcgKzIwNzksNyBAQCBt
YWNybyBwdXRMb2NhbENsb3N1cmVWYXIoKQogICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUodDEs
IHQyKQogICAgIGxvYWRwRnJvbUluc3RydWN0aW9uKDUsIHQzKQogICAgIGJ0cHogdDMsIC5ub1Zh
cmlhYmxlV2F0Y2hwb2ludFNldAotICAgIG5vdGlmeVdyaXRlKHQzLCB0MiwgdDEsIC5wRHluYW1p
YykKKyAgICBub3RpZnlXcml0ZSh0MywgLnBEeW5hbWljKQogLm5vVmFyaWFibGVXYXRjaHBvaW50
U2V0OgogICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlvbig2LCB0MSkKICAgICBzdG9yZXEgdDIsIEpT
RW52aXJvbm1lbnRSZWNvcmRfdmFyaWFibGVzW3QwLCB0MSwgOF0KSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20JKHJldmlz
aW9uIDE4MjIwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVy
cHJldGVyLmFzbQkod29ya2luZyBjb3B5KQpAQCAtNTE5LDYgKzUxOSwxMCBAQCBtYWNybyBza2lw
SWZJc1JlbWVtYmVyZWRPckluRWRlbihjZWxsLCBzCiAgICAgY29udGludWF0aW9uKHNjcmF0Y2gx
KQogZW5kCiAKK21hY3JvIG5vdGlmeVdyaXRlKHNldCwgc2xvdykKKyAgICBiYm5lcSBXYXRjaHBv
aW50U2V0OjptX3N0YXRlW3NldF0sIElzSW52YWxpZGF0ZWQsIHNsb3cKK2VuZAorCiBtYWNybyBj
aGVja1N3aXRjaFRvSklUKGluY3JlbWVudCwgYWN0aW9uKQogICAgIGxvYWRwIENvZGVCbG9ja1tj
ZnJdLCB0MAogICAgIGJhZGRpcyBpbmNyZW1lbnQsIENvZGVCbG9jazo6bV9sbGludEV4ZWN1dGVD
b3VudGVyICsgQmFzZWxpbmVFeGVjdXRpb25Db3VudGVyOjptX2NvdW50ZXJbdDBdLCAuY29udGlu
dWUKQEAgLTkyMCwxMiArOTI0LDYgQEAgZW5kCiAKIAogIyBWYWx1ZS1yZXByZXNlbnRhdGlvbi1h
Z25vc3RpYyBjb2RlLgotX2xsaW50X29wX3RvdWNoX2VudHJ5OgotICAgIHRyYWNlRXhlY3V0aW9u
KCkKLSAgICBjYWxsU2xvd1BhdGgoX3Nsb3dfcGF0aF90b3VjaF9lbnRyeSkKLSAgICBkaXNwYXRj
aCgxKQotCi0KIF9sbGludF9vcF9jcmVhdGVfZGlyZWN0X2FyZ3VtZW50czoKICAgICB0cmFjZUV4
ZWN1dGlvbigpCiAgICAgY2FsbFNsb3dQYXRoKF9zbG93X3BhdGhfY3JlYXRlX2RpcmVjdF9hcmd1
bWVudHMpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0
aHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1v
blNsb3dQYXRocy5jcHAJKHJldmlzaW9uIDE4MjIwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwNiwxMyAr
MjA2LDYgQEAgU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2NvbnN0cnVjdF9hcml0eQogICAgIFJF
VFVSTl9UV08oMCwgc2V0dXBBcml0eUNoZWNrRGF0YSh2bSwgc2xvdHNUb0FkZCkpOwogfQogCi1T
TE9XX1BBVEhfREVDTChzbG93X3BhdGhfdG91Y2hfZW50cnkpCi17Ci0gICAgQkVHSU4oKTsKLSAg
ICBleGVjLT5jb2RlQmxvY2soKS0+c3ltYm9sVGFibGUoKS0+bV9mdW5jdGlvbkVudGVyZWRPbmNl
LnRvdWNoKCJGdW5jdGlvbiAocmUpZW50ZXJlZCIpOwotICAgIEVORCgpOwotfQotCiBTTE9XX1BB
VEhfREVDTChzbG93X3BhdGhfY3JlYXRlX2RpcmVjdF9hcmd1bWVudHMpCiB7CiAgICAgQkVHSU4o
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQ
YXRocy5oCShyZXZpc2lvbiAxODIyMDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Db21tb25TbG93UGF0aHMuaAkod29ya2luZyBjb3B5KQpAQCAtMTgxLDcgKzE4MSw2IEBAIFNM
T1dfUEFUSF9ERUNMKG5hbWUpIFdURl9JTlRFUk5BTAogICAgIAogU0xPV19QQVRIX0hJRERFTl9E
RUNMKHNsb3dfcGF0aF9jYWxsX2FyaXR5Q2hlY2spOwogU0xPV19QQVRIX0hJRERFTl9ERUNMKHNs
b3dfcGF0aF9jb25zdHJ1Y3RfYXJpdHlDaGVjayk7Ci1TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xv
d19wYXRoX3RvdWNoX2VudHJ5KTsKIFNMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfY3Jl
YXRlX2RpcmVjdF9hcmd1bWVudHMpOwogU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9j
cmVhdGVfc2NvcGVkX2FyZ3VtZW50cyk7CiBTTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRo
X2NyZWF0ZV9vdXRfb2ZfYmFuZF9hcmd1bWVudHMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAJKHJldmlzaW9uIDE4MjIwMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01NjcsNiArNTY3LDEyIEBAIHZvaWQgRnVuY3Rpb25FeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVu
KEoKICAgICBpZiAodGhpc09iamVjdC0+bV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QpCiAgICAgICAg
IHRoaXNPYmplY3QtPm1fY29kZUJsb2NrRm9yQ29uc3RydWN0LT52aXNpdEFnZ3JlZ2F0ZSh2aXNp
dG9yKTsKICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV91bmxpbmtlZEV4ZWN1dGFi
bGUpOworICAgIAorICAgIGlmICh0aGlzT2JqZWN0LT5tX2Z1bmN0aW9uUmVhbGxvY2F0aW9uV2F0
Y2hwb2ludFNldC5uZWVkVG9GaW5hbGl6ZSgpKSB7CisgICAgICAgIGlmICghdGhpc09iamVjdC0+
bV93YXRjaHBvaW50Q2xlYW51cCkKKyAgICAgICAgICAgIHRoaXNPYmplY3QtPm1fd2F0Y2hwb2lu
dENsZWFudXAgPSBzdGQ6Om1ha2VfdW5pcXVlPFdhdGNocG9pbnRDbGVhbnVwPih0aGlzT2JqZWN0
KTsKKyAgICAgICAgdmlzaXRvci5hZGRVbmNvbmRpdGlvbmFsRmluYWxpemVyKHRoaXNPYmplY3Qt
Pm1fd2F0Y2hwb2ludENsZWFudXAuZ2V0KCkpOworICAgIH0KIH0KIAogU3ltYm9sVGFibGUqIEZ1
bmN0aW9uRXhlY3V0YWJsZTo6c3ltYm9sVGFibGUoQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5k
KQpAQCAtNjIyLDYgKzYyOCwyMSBAQCBGdW5jdGlvbkV4ZWN1dGFibGUqIEZ1bmN0aW9uRXhlY3V0
YWJsZTo6CiAgICAgcmV0dXJuIHVubGlua2VkRXhlY3V0YWJsZS0+bGluayhleGVjLnZtKCksIHNv
dXJjZSwgb3ZlcnJpZGVMaW5lTnVtYmVyKTsKIH0KIAorRnVuY3Rpb25FeGVjdXRhYmxlOjpXYXRj
aHBvaW50Q2xlYW51cDo6V2F0Y2hwb2ludENsZWFudXAoRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVj
dXRhYmxlKQorICAgIDogbV9leGVjdXRhYmxlKGV4ZWN1dGFibGUpCit7Cit9CisKK0Z1bmN0aW9u
RXhlY3V0YWJsZTo6V2F0Y2hwb2ludENsZWFudXA6On5XYXRjaHBvaW50Q2xlYW51cCgpCit7Cit9
CisKK3ZvaWQgRnVuY3Rpb25FeGVjdXRhYmxlOjpXYXRjaHBvaW50Q2xlYW51cDo6ZmluYWxpemVV
bmNvbmRpdGlvbmFsbHkoKQoreworICAgIG1fZXhlY3V0YWJsZS0+ZnVuY3Rpb25SZWFsbG9jYXRp
b25XYXRjaHBvaW50U2V0KCkuZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoCisgICAgICAgIFN0cmlu
Z0ZpcmVEZXRhaWwoIkZ1bmN0aW9uRXhlY3V0YWJsZSBjbGVhbi11cCBkdXJpbmcgR0MiKSk7Cit9
CisKIHZvaWQgRXhlY3V0YWJsZUJhc2U6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKIHsK
ICAgICBFeGVjdXRhYmxlQmFzZSogcmVhbFRoaXMgPSBjb25zdF9jYXN0PEV4ZWN1dGFibGVCYXNl
Kj4odGhpcyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJs
ZS5oCShyZXZpc2lvbiAxODIyMDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9F
eGVjdXRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDggKzMzLDYgQEAKICNpbmNsdWRlICJD
b21waWxhdGlvblJlc3VsdC5oIgogI2luY2x1ZGUgIkRGR1BsYW4uaCIKICNpbmNsdWRlICJIYW5k
bGVySW5mby5oIgotI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKLSNpbmNsdWRlICJJbnRlcnByZXRl
ci5oIgogI2luY2x1ZGUgIkpJVENvZGUuaCIKICNpbmNsdWRlICJKU0dsb2JhbE9iamVjdC5oIgog
I2luY2x1ZGUgIlJlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZS5oIgpAQCAtNDIsNiArNDAsNyBAQAog
I2luY2x1ZGUgIlNvdXJjZUNvZGUuaCIKICNpbmNsdWRlICJUeXBlU2V0LmgiCiAjaW5jbHVkZSAi
VW5saW5rZWRDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJWYXJpYWJsZVdhdGNocG9pbnRTZXQuaCIK
IAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTY0OSw2ICs2NDgsOCBAQCBwdWJsaWM6CiAgICAgdm9p
ZCB1bmxpbmtDYWxscygpOwogCiAgICAgdm9pZCBjbGVhckNvZGUoKTsKKyAgICAKKyAgICBWYXJp
YWJsZVdhdGNocG9pbnRTZXQmIGZ1bmN0aW9uUmVhbGxvY2F0aW9uV2F0Y2hwb2ludFNldCgpIHsg
cmV0dXJuIG1fZnVuY3Rpb25SZWFsbG9jYXRpb25XYXRjaHBvaW50U2V0OyB9CiAKIHByaXZhdGU6
CiAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKApAQCAtNjY3LDEyICs2NjgsMjYgQEAgcHJpdmF0ZToK
ICAgICB9CiAKICAgICBmcmllbmQgY2xhc3MgU2NyaXB0RXhlY3V0YWJsZTsKKyAgICAKKyAgICBj
bGFzcyBXYXRjaHBvaW50Q2xlYW51cCA6IHB1YmxpYyBVbmNvbmRpdGlvbmFsRmluYWxpemVyIHsK
KyAgICBwdWJsaWM6CisgICAgICAgIFdhdGNocG9pbnRDbGVhbnVwKEZ1bmN0aW9uRXhlY3V0YWJs
ZSopOworICAgICAgICB2aXJ0dWFsIH5XYXRjaHBvaW50Q2xlYW51cCgpOworICAgICAgICAKKyAg
ICBwcm90ZWN0ZWQ6CisgICAgICAgIHZvaWQgZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoKSBvdmVy
cmlkZTsKKyAgICAgICAgCisgICAgcHJpdmF0ZToKKyAgICAgICAgRnVuY3Rpb25FeGVjdXRhYmxl
KiBtX2V4ZWN1dGFibGU7CisgICAgfTsKIAogICAgIFdyaXRlQmFycmllcjxVbmxpbmtlZEZ1bmN0
aW9uRXhlY3V0YWJsZT4gbV91bmxpbmtlZEV4ZWN1dGFibGU7CiAgICAgUmVmUHRyPEZ1bmN0aW9u
Q29kZUJsb2NrPiBtX2NvZGVCbG9ja0ZvckNhbGw7CiAgICAgUmVmUHRyPEZ1bmN0aW9uQ29kZUJs
b2NrPiBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdDsKICAgICBSZWZQdHI8VHlwZVNldD4gbV9yZXR1
cm5TdGF0ZW1lbnRUeXBlU2V0OwogICAgIHVuc2lnbmVkIG1fcGFyYW1ldGVyc1N0YXJ0T2Zmc2V0
OworICAgIFZhcmlhYmxlV2F0Y2hwb2ludFNldCBtX2Z1bmN0aW9uUmVhbGxvY2F0aW9uV2F0Y2hw
b2ludFNldDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8V2F0Y2hwb2ludENsZWFudXA+IG1fd2F0Y2hw
b2ludENsZWFudXA7CiB9OwogCiBpbmxpbmUgdm9pZCBFeGVjdXRhYmxlQmFzZTo6Y2xlYXJDb2Rl
VmlydHVhbChFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTQ0lubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0NJbmxpbmVzLmgJKHJldmlzaW9uIDE4MjIwMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0lubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAt
NTEsNiArNTEsNyBAQAogI2luY2x1ZGUgIk9wZXJhdGlvbnMuaCIKICNpbmNsdWRlICJTbG90Vmlz
aXRvcklubGluZXMuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVJbmxpbmVzLmgiCisjaW5jbHVkZSAi
VmFyaWFibGVXYXRjaHBvaW50U2V0SW5saW5lcy5oIgogI2luY2x1ZGUgIldlYWtHQ01hcElubGlu
ZXMuaCIKIAogI2VuZGlmIC8vIEpTQ0lubGluZXNfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAJKHJldmlzaW9uIDE4MjIwMCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC01OSw2ICs1OSwxNCBAQCBib29sIEpTRnVuY3Rpb246OmlzSG9zdEZ1bmN0aW9uTm9uSW5saW5l
CiAgICAgcmV0dXJuIGlzSG9zdEZ1bmN0aW9uKCk7CiB9CiAKK0pTRnVuY3Rpb24qIEpTRnVuY3Rp
b246OmNyZWF0ZShWTSYgdm0sIEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSwgSlNTY29w
ZSogc2NvcGUpCit7CisgICAgSlNGdW5jdGlvbiogcmVzdWx0ID0gY3JlYXRlSW1wbCh2bSwgZXhl
Y3V0YWJsZSwgc2NvcGUpOworICAgIGV4ZWN1dGFibGUtPmZ1bmN0aW9uUmVhbGxvY2F0aW9uV2F0
Y2hwb2ludFNldCgpLm5vdGlmeVdyaXRlKAorICAgICAgICB2bSwgZXhlY3V0YWJsZSwgcmVzdWx0
LCAiQWxsb2NhdGluZyBhIGZ1bmN0aW9uIik7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogSlNG
dW5jdGlvbiogSlNGdW5jdGlvbjo6Y3JlYXRlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgaW50IGxlbmd0aCwgY29uc3QgU3RyaW5nJiBuYW1lLCBOYXRpdmVGdW5jdGlvbiBu
YXRpdmVGdW5jdGlvbiwgSW50cmluc2ljIGludHJpbnNpYywgTmF0aXZlRnVuY3Rpb24gbmF0aXZl
Q29uc3RydWN0b3IpCiB7CiAgICAgTmF0aXZlRXhlY3V0YWJsZSogZXhlY3V0YWJsZTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmgJKHJldmlzaW9uIDE4
MjIwMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaAkod29y
a2luZyBjb3B5KQpAQCAtMjQsNiArMjQsNyBAQAogI2lmbmRlZiBKU0Z1bmN0aW9uX2gKICNkZWZp
bmUgSlNGdW5jdGlvbl9oCiAKKyNpbmNsdWRlICJFeGVjdXRhYmxlLmgiCiAjaW5jbHVkZSAiSW50
ZXJuYWxGdW5jdGlvbi5oIgogI2luY2x1ZGUgIkpTQ2FsbGVlLmgiCiAjaW5jbHVkZSAiSlNTY29w
ZS5oIgpAQCAtNTksMTUgKzYwLDE1IEBAIHB1YmxpYzoKICAgICB0eXBlZGVmIEpTQ2FsbGVlIEJh
c2U7CiAKICAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgSlNGdW5jdGlvbiogY3JlYXRlKFZN
JiwgSlNHbG9iYWxPYmplY3QqLCBpbnQgbGVuZ3RoLCBjb25zdCBTdHJpbmcmIG5hbWUsIE5hdGl2
ZUZ1bmN0aW9uLCBJbnRyaW5zaWMgPSBOb0ludHJpbnNpYywgTmF0aXZlRnVuY3Rpb24gbmF0aXZl
Q29uc3RydWN0b3IgPSBjYWxsSG9zdEZ1bmN0aW9uQXNDb25zdHJ1Y3Rvcik7Ci0KLSAgICBzdGF0
aWMgSlNGdW5jdGlvbiogY3JlYXRlKFZNJiB2bSwgRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRh
YmxlLCBKU1Njb3BlKiBzY29wZSkKKyAgICAKKyAgICBzdGF0aWMgSlNGdW5jdGlvbiogY3JlYXRl
V2l0aEludmFsaWRhdGVkUmVhbGxvY2F0aW9uV2F0Y2hwb2ludChWTSYgdm0sIEZ1bmN0aW9uRXhl
Y3V0YWJsZSogZXhlY3V0YWJsZSwgSlNTY29wZSogc2NvcGUpCiAgICAgewotICAgICAgICBKU0Z1
bmN0aW9uKiBmdW5jdGlvbiA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTRnVuY3Rpb24+
KHZtLmhlYXApKSBKU0Z1bmN0aW9uKHZtLCBleGVjdXRhYmxlLCBzY29wZSk7Ci0gICAgICAgIEFT
U0VSVChmdW5jdGlvbi0+c3RydWN0dXJlKCktPmdsb2JhbE9iamVjdCgpKTsKLSAgICAgICAgZnVu
Y3Rpb24tPmZpbmlzaENyZWF0aW9uKHZtKTsKLSAgICAgICAgcmV0dXJuIGZ1bmN0aW9uOworICAg
ICAgICBBU1NFUlQoZXhlY3V0YWJsZS0+ZnVuY3Rpb25SZWFsbG9jYXRpb25XYXRjaHBvaW50U2V0
KCkuaGFzQmVlbkludmFsaWRhdGVkKCkpOworICAgICAgICByZXR1cm4gY3JlYXRlSW1wbCh2bSwg
ZXhlY3V0YWJsZSwgc2NvcGUpOwogICAgIH0KIAorICAgIHN0YXRpYyBKU0Z1bmN0aW9uKiBjcmVh
dGUoVk0mLCBGdW5jdGlvbkV4ZWN1dGFibGUqLCBKU1Njb3BlKik7CisKICAgICBzdGF0aWMgSlNG
dW5jdGlvbiogY3JlYXRlQnVpbHRpbkZ1bmN0aW9uKFZNJiwgRnVuY3Rpb25FeGVjdXRhYmxlKiwg
SlNHbG9iYWxPYmplY3QqKTsKIAogICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CkBA
IC0xNDksNiArMTUwLDE0IEBAIHByb3RlY3RlZDoKICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxk
cmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAKIHByaXZhdGU6CisgICAgc3RhdGljIEpTRnVu
Y3Rpb24qIGNyZWF0ZUltcGwoVk0mIHZtLCBGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUs
IEpTU2NvcGUqIHNjb3BlKQorICAgIHsKKyAgICAgICAgSlNGdW5jdGlvbiogZnVuY3Rpb24gPSBu
ZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0Z1bmN0aW9uPih2bS5oZWFwKSkgSlNGdW5jdGlv
bih2bSwgZXhlY3V0YWJsZSwgc2NvcGUpOworICAgICAgICBBU1NFUlQoZnVuY3Rpb24tPnN0cnVj
dHVyZSgpLT5nbG9iYWxPYmplY3QoKSk7CisgICAgICAgIGZ1bmN0aW9uLT5maW5pc2hDcmVhdGlv
bih2bSk7CisgICAgICAgIHJldHVybiBmdW5jdGlvbjsKKyAgICB9CisgICAgCiAgICAgZnJpZW5k
IGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKIAogICAgIHN0YXRpYyBFbmNvZGVkSlNWYWx1
ZSBhcmd1bWVudHNHZXR0ZXIoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwg
UHJvcGVydHlOYW1lKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xv
YmFsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0dsb2JhbE9iamVjdC5jcHAJKHJldmlzaW9uIDE4MjIwMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI1
LDYgKzEyNSw3IEBACiAjaW5jbHVkZSAiU3ltYm9sQ29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJT
eW1ib2xQcm90b3R5cGUuaCIKICNpbmNsdWRlICJWYXJpYWJsZVdhdGNocG9pbnRTZXRJbmxpbmVz
LmgiCisjaW5jbHVkZSAiVmFyaWFibGVXcml0ZUZpcmVEZXRhaWwuaCIKICNpbmNsdWRlICJXZWFr
R0NNYXBJbmxpbmVzLmgiCiAjaW5jbHVkZSAiV2Vha01hcENvbnN0cnVjdG9yLmgiCiAjaW5jbHVk
ZSAiV2Vha01hcFByb3RvdHlwZS5oIgpAQCAtNDg5LDcgKzQ5MCw3IEBAIEpTR2xvYmFsT2JqZWN0
OjpOZXdHbG9iYWxWYXIgSlNHbG9iYWxPYmoKICAgICBTY29wZU9mZnNldCBvZmZzZXQgPSBzeW1i
b2xUYWJsZSgpLT50YWtlTmV4dFNjb3BlT2Zmc2V0KGxvY2tlcik7CiAgICAgU3ltYm9sVGFibGVF
bnRyeSBuZXdFbnRyeShWYXJPZmZzZXQob2Zmc2V0KSwgKGNvbnN0YW50TW9kZSA9PSBJc0NvbnN0
YW50KSA/IFJlYWRPbmx5IDogMCk7CiAgICAgaWYgKGNvbnN0YW50TW9kZSA9PSBJc1ZhcmlhYmxl
KQotICAgICAgICBuZXdFbnRyeS5wcmVwYXJlVG9XYXRjaChzeW1ib2xUYWJsZSgpKTsKKyAgICAg
ICAgbmV3RW50cnkucHJlcGFyZVRvV2F0Y2goKTsKICAgICBlbHNlCiAgICAgICAgIG5ld0VudHJ5
LmRpc2FibGVXYXRjaGluZygpOwogICAgIHN5bWJvbFRhYmxlKCktPmFkZChsb2NrZXIsIGlkZW50
LmltcGwoKSwgbmV3RW50cnkpOwpAQCAtNTEwLDcgKzUxMSw3IEBAIHZvaWQgSlNHbG9iYWxPYmpl
Y3Q6OmFkZEZ1bmN0aW9uKEV4ZWNTdGEKICAgICBOZXdHbG9iYWxWYXIgdmFyID0gYWRkR2xvYmFs
VmFyKHByb3BlcnR5TmFtZSwgSXNWYXJpYWJsZSk7CiAgICAgdmFyaWFibGVBdCh2YXIub2Zmc2V0
KS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgdmFsdWUpOwogICAgIGlmICh2YXIuc2V0KQotICAgICAg
ICB2YXIuc2V0LT5ub3RpZnlXcml0ZSh2bSwgdmFsdWUsIFZhcmlhYmxlV3JpdGVGaXJlRGV0YWls
KHRoaXMsIHByb3BlcnR5TmFtZSkpOworICAgICAgICB2YXIuc2V0LT50b3VjaChWYXJpYWJsZVdy
aXRlRmlyZURldGFpbCh0aGlzLCBwcm9wZXJ0eU5hbWUpKTsKIH0KIAogc3RhdGljIGlubGluZSBK
U09iamVjdCogbGFzdEluUHJvdG90eXBlQ2hhaW4oSlNPYmplY3QqIG9iamVjdCkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAkocmV2aXNp
b24gMTgyMjAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmpl
Y3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzMzLDcgKzMzMyw3IEBAIHByb3RlY3RlZDoKIAogICAg
IHN0cnVjdCBOZXdHbG9iYWxWYXIgewogICAgICAgICBTY29wZU9mZnNldCBvZmZzZXQ7Ci0gICAg
ICAgIFZhcmlhYmxlV2F0Y2hwb2ludFNldCogc2V0OworICAgICAgICBXYXRjaHBvaW50U2V0KiBz
ZXQ7CiAgICAgfTsKICAgICBOZXdHbG9iYWxWYXIgYWRkR2xvYmFsVmFyKGNvbnN0IElkZW50aWZp
ZXImLCBDb25zdGFudE1vZGUpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0xleGljYWxFbnZpcm9ubWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNMZXhpY2FsRW52aXJvbm1lbnQuY3BwCShyZXZpc2lvbiAxODIyMDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xleGljYWxFbnZpcm9ubWVudC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTc3LDYgKzc3LDcgQEAgaW5saW5lIGJvb2wgSlNMZXhpY2Fs
RW52aXJvbm1lbnQ6OnN5bWJvbAogICAgIEFTU0VSVCghSGVhcDo6aGVhcCh2YWx1ZSkgfHwgSGVh
cDo6aGVhcCh2YWx1ZSkgPT0gSGVhcDo6aGVhcCh0aGlzKSk7CiAgICAgCiAgICAgV3JpdGVCYXJy
aWVyQmFzZTxVbmtub3duPiogcmVnOworICAgIFdhdGNocG9pbnRTZXQqIHNldDsKICAgICB7CiAg
ICAgICAgIEdDU2FmZUNvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKHN5bWJvbFRhYmxlKCktPm1f
bG9jaywgZXhlYy0+dm0oKS5oZWFwKTsKICAgICAgICAgU3ltYm9sVGFibGU6Ok1hcDo6aXRlcmF0
b3IgaXRlciA9IHN5bWJvbFRhYmxlKCktPmZpbmQobG9ja2VyLCBwcm9wZXJ0eU5hbWUudWlkKCkp
OwpAQCAtOTIsMTEgKzkzLDEyIEBAIGlubGluZSBib29sIEpTTGV4aWNhbEVudmlyb25tZW50Ojpz
eW1ib2wKICAgICAgICAgLy8gRGVmZW5kIGFnYWluc3QgdGhlIGluc3BlY3RvciBhc2tpbmcgZm9y
IGEgdmFyIGFmdGVyIGl0IGhhcyBiZWVuIG9wdGltaXplZCBvdXQuCiAgICAgICAgIGlmICghaXNW
YWxpZChvZmZzZXQpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoVmFy
aWFibGVXYXRjaHBvaW50U2V0KiBzZXQgPSBpdGVyLT52YWx1ZS53YXRjaHBvaW50U2V0KCkpCi0g
ICAgICAgICAgICBzZXQtPmludmFsaWRhdGUoVmFyaWFibGVXcml0ZUZpcmVEZXRhaWwodGhpcywg
cHJvcGVydHlOYW1lKSk7IC8vIERvbid0IG1lc3MgYXJvdW5kIC0gaWYgd2UgaGFkIGZvdW5kIHRo
aXMgc3RhdGljYWxseSwgd2Ugd291bGQgaGF2ZSBpbnZhbGlkYXRlZCBpdC4KKyAgICAgICAgc2V0
ID0gaXRlci0+dmFsdWUud2F0Y2hwb2ludFNldCgpOwogICAgICAgICByZWcgPSAmdmFyaWFibGVB
dChvZmZzZXQpOwogICAgIH0KICAgICByZWctPnNldCh2bSwgdGhpcywgdmFsdWUpOworICAgIGlm
IChzZXQpCisgICAgICAgIHNldC0+aW52YWxpZGF0ZShWYXJpYWJsZVdyaXRlRmlyZURldGFpbCh0
aGlzLCBwcm9wZXJ0eU5hbWUpKTsgLy8gRG9uJ3QgbWVzcyBhcm91bmQgLSBpZiB3ZSBoYWQgZm91
bmQgdGhpcyBzdGF0aWNhbGx5LCB3ZSB3b3VsZCBoYXZlIGludmFsaWRhdGVkIGl0LgogICAgIHJl
dHVybiB0cnVlOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Nj
b3BlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTY29w
ZS5oCShyZXZpc2lvbiAxODIyMDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U1Njb3BlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAKIG5hbWVzcGFjZSBKU0Mg
ewogCiBjbGFzcyBTY29wZUNoYWluSXRlcmF0b3I7Ci1jbGFzcyBWYXJpYWJsZVdhdGNocG9pbnRT
ZXQ7CitjbGFzcyBXYXRjaHBvaW50U2V0OwogCiBlbnVtIFJlc29sdmVNb2RlIHsKICAgICBUaHJv
d0lmTm90Rm91bmQsCkBAIC0xMDIsNyArMTAyLDcgQEAgaW5saW5lIGJvb2wgbmVlZHNWYXJJbmpl
Y3Rpb25DaGVja3MoUmVzbwogfQogCiBzdHJ1Y3QgUmVzb2x2ZU9wIHsKLSAgICBSZXNvbHZlT3Ao
UmVzb2x2ZVR5cGUgdHlwZSwgc2l6ZV90IGRlcHRoLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNM
ZXhpY2FsRW52aXJvbm1lbnQqIGxleGljYWxFbnZpcm9ubWVudCwgVmFyaWFibGVXYXRjaHBvaW50
U2V0KiB3YXRjaHBvaW50U2V0LCB1aW50cHRyX3Qgb3BlcmFuZCkKKyAgICBSZXNvbHZlT3AoUmVz
b2x2ZVR5cGUgdHlwZSwgc2l6ZV90IGRlcHRoLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNMZXhp
Y2FsRW52aXJvbm1lbnQqIGxleGljYWxFbnZpcm9ubWVudCwgV2F0Y2hwb2ludFNldCogd2F0Y2hw
b2ludFNldCwgdWludHB0cl90IG9wZXJhbmQpCiAgICAgICAgIDogdHlwZSh0eXBlKQogICAgICAg
ICAsIGRlcHRoKGRlcHRoKQogICAgICAgICAsIHN0cnVjdHVyZShzdHJ1Y3R1cmUpCkBAIC0xMTYs
NyArMTE2LDcgQEAgc3RydWN0IFJlc29sdmVPcCB7CiAgICAgc2l6ZV90IGRlcHRoOwogICAgIFN0
cnVjdHVyZSogc3RydWN0dXJlOwogICAgIEpTTGV4aWNhbEVudmlyb25tZW50KiBsZXhpY2FsRW52
aXJvbm1lbnQ7Ci0gICAgVmFyaWFibGVXYXRjaHBvaW50U2V0KiB3YXRjaHBvaW50U2V0OworICAg
IFdhdGNocG9pbnRTZXQqIHdhdGNocG9pbnRTZXQ7CiAgICAgdWludHB0cl90IG9wZXJhbmQ7CiB9
OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2Jq
ZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1i
b2xUYWJsZU9iamVjdC5oCShyZXZpc2lvbiAxODIyMDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcg
KzMyLDcgQEAKICNpbmNsdWRlICJKU1Njb3BlLmgiCiAjaW5jbHVkZSAiUHJvcGVydHlEZXNjcmlw
dG9yLmgiCiAjaW5jbHVkZSAiU3ltYm9sVGFibGUuaCIKLSNpbmNsdWRlICJWYXJpYWJsZVdhdGNo
cG9pbnRTZXRJbmxpbmVzLmgiCisjaW5jbHVkZSAiVmFyaWFibGVXcml0ZUZpcmVEZXRhaWwuaCIK
IAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTEyNiw2ICsxMjYsNyBAQCBpbmxpbmUgYm9vbCBzeW1i
b2xUYWJsZVB1dCgKICAgICBBU1NFUlQoIUhlYXA6OmhlYXAodmFsdWUpIHx8IEhlYXA6OmhlYXAo
dmFsdWUpID09IEhlYXA6OmhlYXAob2JqZWN0KSk7CiAgICAgCiAgICAgV3JpdGVCYXJyaWVyQmFz
ZTxVbmtub3duPiogcmVnOworICAgIFdhdGNocG9pbnRTZXQqIHNldDsKICAgICB7CiAgICAgICAg
IFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSA9ICpvYmplY3QtPnN5bWJvbFRhYmxlKCk7CiAgICAg
ICAgIC8vIEZJWE1FOiBUaGlzIGlzIHZlcnkgc3VzcGljaW91cy4gV2Ugc2hvdWxkbid0IG5lZWQg
YSBHQy1zYWZlIGxvY2sgaGVyZS4KQEAgLTE0MiwxNyArMTQzLDE1IEBAIGlubGluZSBib29sIHN5
bWJvbFRhYmxlUHV0KAogICAgICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIFN0cmlj
dE1vZGVSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7CiAgICAgICAgICAgICByZXR1cm4gdHJ1
ZTsKICAgICAgICAgfQotICAgICAgICBpZiAoVmFyaWFibGVXYXRjaHBvaW50U2V0KiBzZXQgPSBp
dGVyLT52YWx1ZS53YXRjaHBvaW50U2V0KCkpIHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBJdCdz
IHN0cmFuZ2UgdGhhdCB3ZSdyZSBkb2luZyB0aGlzIHdoaWxlIGhvbGRpbmcgdGhlIHN5bWJvbCB0
YWJsZSdzIGxvY2suCi0gICAgICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTM0NjAxCi0gICAgICAgICAgICBzZXQtPm5vdGlmeVdyaXRlKHZtLCB2YWx1
ZSwgb2JqZWN0LCBwcm9wZXJ0eU5hbWUpOwotICAgICAgICB9CisgICAgICAgIHNldCA9IGl0ZXIt
PnZhbHVlLndhdGNocG9pbnRTZXQoKTsKICAgICAgICAgcmVnID0gJm9iamVjdC0+dmFyaWFibGVB
dChmYXN0RW50cnkuc2NvcGVPZmZzZXQoKSk7CiAgICAgfQogICAgIC8vIEknZCBwcmVmZXIgd2Ug
bm90IGhvbGQgbG9jayB3aGlsZSBleGVjdXRpbmcgYmFycmllcnMsIHNpbmNlIEkgcHJlZmVyIHRv
IHJlc2VydmUKICAgICAvLyB0aGUgcmlnaHQgZm9yIGJhcnJpZXJzIHRvIGJlIGFibGUgdG8gdHJp
Z2dlciBHQy4gQW5kIEkgZG9uJ3Qgd2FudCB0byBob2xkIFZNCiAgICAgLy8gbG9ja3Mgd2hpbGUg
R0MnaW5nLgogICAgIHJlZy0+c2V0KHZtLCBvYmplY3QsIHZhbHVlKTsKKyAgICBpZiAoc2V0KQor
ICAgICAgICBWYXJpYWJsZVdyaXRlRmlyZURldGFpbDo6dG91Y2goc2V0LCBvYmplY3QsIHByb3Bl
cnR5TmFtZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTE2NCw2ICsxNjMsNyBAQCBpbmxp
bmUgYm9vbCBzeW1ib2xUYWJsZVB1dFdpdGhBdHRyaWJ1dGVzCiAgICAgQVNTRVJUKCFIZWFwOjpo
ZWFwKHZhbHVlKSB8fCBIZWFwOjpoZWFwKHZhbHVlKSA9PSBIZWFwOjpoZWFwKG9iamVjdCkpOwog
CiAgICAgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiogcmVnOworICAgIFdhdGNocG9pbnRTZXQq
IHNldDsKICAgICB7CiAgICAgICAgIFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSA9ICpvYmplY3Qt
PnN5bWJvbFRhYmxlKCk7CiAgICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKHN5bWJv
bFRhYmxlLm1fbG9jayk7CkBAIC0xNzIsMTIgKzE3MiwxMyBAQCBpbmxpbmUgYm9vbCBzeW1ib2xU
YWJsZVB1dFdpdGhBdHRyaWJ1dGVzCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAg
IFN5bWJvbFRhYmxlRW50cnkmIGVudHJ5ID0gaXRlci0+dmFsdWU7CiAgICAgICAgIEFTU0VSVCgh
ZW50cnkuaXNOdWxsKCkpOwotICAgICAgICBpZiAoVmFyaWFibGVXYXRjaHBvaW50U2V0KiBzZXQg
PSBlbnRyeS53YXRjaHBvaW50U2V0KCkpCi0gICAgICAgICAgICBzZXQtPm5vdGlmeVdyaXRlKHZt
LCB2YWx1ZSwgb2JqZWN0LCBwcm9wZXJ0eU5hbWUpOworICAgICAgICBzZXQgPSBlbnRyeS53YXRj
aHBvaW50U2V0KCk7CiAgICAgICAgIGVudHJ5LnNldEF0dHJpYnV0ZXMoYXR0cmlidXRlcyk7CiAg
ICAgICAgIHJlZyA9ICZvYmplY3QtPnZhcmlhYmxlQXQoZW50cnkuc2NvcGVPZmZzZXQoKSk7CiAg
ICAgfQogICAgIHJlZy0+c2V0KHZtLCBvYmplY3QsIHZhbHVlKTsKKyAgICBpZiAoc2V0KQorICAg
ICAgICBWYXJpYWJsZVdyaXRlRmlyZURldGFpbDo6dG91Y2goc2V0LCBvYmplY3QsIHByb3BlcnR5
TmFtZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1B1dFByb3BlcnR5U2xvdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1B1dFByb3BlcnR5U2xvdC5oCShyZXZpc2lvbiAxODIyMDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9QdXRQcm9wZXJ0eVNsb3QuaAkod29ya2luZyBj
b3B5KQpAQCAtMjgsNiArMjgsNyBAQAogI2RlZmluZSBQdXRQcm9wZXJ0eVNsb3RfaAogCiAjaW5j
bHVkZSAiSlNDSlNWYWx1ZS5oIgorI2luY2x1ZGUgIlByb3BlcnR5T2Zmc2V0LmgiCiAKICNpbmNs
dWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9TeW1ib2xUYWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvU3ltYm9sVGFibGUuY3BwCShyZXZpc2lvbiAxODIyMDApCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMz
LDcgKzMzLDYgQEAKICNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiU2xvdFZpc2l0
b3JJbmxpbmVzLmgiCiAjaW5jbHVkZSAiVHlwZVByb2ZpbGVyLmgiCi0jaW5jbHVkZSAiVmFyaWFi
bGVXYXRjaHBvaW50U2V0SW5saW5lcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtNjAsMjEg
KzU5LDE0IEBAIHZvaWQgU3ltYm9sVGFibGVFbnRyeTo6ZnJlZUZhdEVudHJ5U2xvdygKICAgICBk
ZWxldGUgZmF0RW50cnkoKTsKIH0KIAotSlNWYWx1ZSBTeW1ib2xUYWJsZUVudHJ5OjppbmZlcnJl
ZFZhbHVlKCkKLXsKLSAgICBpZiAoIWlzRmF0KCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlKCk7
Ci0gICAgcmV0dXJuIGZhdEVudHJ5KCktPm1fd2F0Y2hwb2ludHMtPmluZmVycmVkVmFsdWUoKTsK
LX0KLQotdm9pZCBTeW1ib2xUYWJsZUVudHJ5OjpwcmVwYXJlVG9XYXRjaChTeW1ib2xUYWJsZSog
c3ltYm9sVGFibGUpCit2b2lkIFN5bWJvbFRhYmxlRW50cnk6OnByZXBhcmVUb1dhdGNoKCkKIHsK
ICAgICBpZiAoIWlzV2F0Y2hhYmxlKCkpCiAgICAgICAgIHJldHVybjsKICAgICBGYXRFbnRyeSog
ZW50cnkgPSBpbmZsYXRlKCk7CiAgICAgaWYgKGVudHJ5LT5tX3dhdGNocG9pbnRzKQogICAgICAg
ICByZXR1cm47Ci0gICAgZW50cnktPm1fd2F0Y2hwb2ludHMgPSBhZG9wdFJlZihuZXcgVmFyaWFi
bGVXYXRjaHBvaW50U2V0KCpzeW1ib2xUYWJsZSkpOworICAgIGVudHJ5LT5tX3dhdGNocG9pbnRz
ID0gYWRvcHRSZWYobmV3IFdhdGNocG9pbnRTZXQoQ2xlYXJXYXRjaHBvaW50KSk7CiB9CiAKIHZv
aWQgU3ltYm9sVGFibGVFbnRyeTo6YWRkV2F0Y2hwb2ludChXYXRjaHBvaW50KiB3YXRjaHBvaW50
KQpAQCAtODIsMTUgKzc0LDYgQEAgdm9pZCBTeW1ib2xUYWJsZUVudHJ5OjphZGRXYXRjaHBvaW50
KFdhdAogICAgIGZhdEVudHJ5KCktPm1fd2F0Y2hwb2ludHMtPmFkZCh3YXRjaHBvaW50KTsKIH0K
IAotdm9pZCBTeW1ib2xUYWJsZUVudHJ5Ojpub3RpZnlXcml0ZVNsb3coVk0mIHZtLCBKU1ZhbHVl
IHZhbHVlLCBjb25zdCBGaXJlRGV0YWlsJiBkZXRhaWwpCi17Ci0gICAgVmFyaWFibGVXYXRjaHBv
aW50U2V0KiB3YXRjaHBvaW50cyA9IGZhdEVudHJ5KCktPm1fd2F0Y2hwb2ludHMuZ2V0KCk7Ci0g
ICAgaWYgKCF3YXRjaHBvaW50cykKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIHdhdGNocG9p
bnRzLT5ub3RpZnlXcml0ZSh2bSwgdmFsdWUsIGRldGFpbCk7Ci19Ci0KIFN5bWJvbFRhYmxlRW50
cnk6OkZhdEVudHJ5KiBTeW1ib2xUYWJsZUVudHJ5OjppbmZsYXRlU2xvdygpCiB7CiAgICAgRmF0
RW50cnkqIGVudHJ5ID0gbmV3IEZhdEVudHJ5KG1fYml0cyk7CkBAIC0xMDEsNyArODQsNiBAQCBT
eW1ib2xUYWJsZUVudHJ5OjpGYXRFbnRyeSogU3ltYm9sVGFibGVFCiBTeW1ib2xUYWJsZTo6U3lt
Ym9sVGFibGUoVk0mIHZtKQogICAgIDogSlNDZWxsKHZtLCB2bS5zeW1ib2xUYWJsZVN0cnVjdHVy
ZS5nZXQoKSkKICAgICAsIG1fdXNlc05vblN0cmljdEV2YWwoZmFsc2UpCi0gICAgLCBtX2Z1bmN0
aW9uRW50ZXJlZE9uY2UoQ2xlYXJXYXRjaHBvaW50KQogewogfQogCkBAIC0xMTMsMzYgKzk1LDEx
IEBAIHZvaWQgU3ltYm9sVGFibGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiAKICAgICAKICAgICB2
aXNpdG9yLmFwcGVuZCgmdGhpc1N5bWJvbFRhYmxlLT5tX2FyZ3VtZW50cyk7CiAgICAgCi0gICAg
aWYgKCF0aGlzU3ltYm9sVGFibGUtPm1fd2F0Y2hwb2ludENsZWFudXApIHsKLSAgICAgICAgdGhp
c1N5bWJvbFRhYmxlLT5tX3dhdGNocG9pbnRDbGVhbnVwID0KLSAgICAgICAgICAgIHN0ZDo6bWFr
ZV91bmlxdWU8V2F0Y2hwb2ludENsZWFudXA+KHRoaXNTeW1ib2xUYWJsZSk7Ci0gICAgfQotICAg
IAotICAgIHZpc2l0b3IuYWRkVW5jb25kaXRpb25hbEZpbmFsaXplcih0aGlzU3ltYm9sVGFibGUt
Pm1fd2F0Y2hwb2ludENsZWFudXAuZ2V0KCkpOwotICAgIAogICAgIC8vIFNhdmUgc29tZSBtZW1v
cnkuIFRoaXMgaXMgTyhuKSB0byByZWJ1aWxkIGFuZCB3ZSBkbyBzbyBvbiB0aGUgZmx5LgogICAg
IENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKHRoaXNTeW1ib2xUYWJsZS0+bV9sb2NrKTsKICAg
ICB0aGlzU3ltYm9sVGFibGUtPm1fbG9jYWxUb0VudHJ5ID0gbnVsbHB0cjsKIH0KIAotU3ltYm9s
VGFibGU6OldhdGNocG9pbnRDbGVhbnVwOjpXYXRjaHBvaW50Q2xlYW51cChTeW1ib2xUYWJsZSog
c3ltYm9sVGFibGUpCi0gICAgOiBtX3N5bWJvbFRhYmxlKHN5bWJvbFRhYmxlKQotewotfQotCi1T
eW1ib2xUYWJsZTo6V2F0Y2hwb2ludENsZWFudXA6On5XYXRjaHBvaW50Q2xlYW51cCgpIHsgfQot
Ci12b2lkIFN5bWJvbFRhYmxlOjpXYXRjaHBvaW50Q2xlYW51cDo6ZmluYWxpemVVbmNvbmRpdGlv
bmFsbHkoKQotewotICAgIFN0cmluZ0ZpcmVEZXRhaWwgZGV0YWlsKCJTeW1ib2wgdGFibGUgY2xl
YW4tdXAgZHVyaW5nIEdDIik7Ci0gICAgTWFwOjppdGVyYXRvciBpdGVyID0gbV9zeW1ib2xUYWJs
ZS0+bV9tYXAuYmVnaW4oKTsKLSAgICBNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fc3ltYm9sVGFibGUt
Pm1fbWFwLmVuZCgpOwotICAgIGZvciAoOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7Ci0gICAgICAg
IGlmIChWYXJpYWJsZVdhdGNocG9pbnRTZXQqIHNldCA9IGl0ZXItPnZhbHVlLndhdGNocG9pbnRT
ZXQoKSkKLSAgICAgICAgICAgIHNldC0+ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoZGV0YWlsKTsK
LSAgICB9Ci19Ci0KIGNvbnN0IFN5bWJvbFRhYmxlOjpMb2NhbFRvRW50cnlWZWMmIFN5bWJvbFRh
YmxlOjpsb2NhbFRvRW50cnkoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYpCiB7CiAgICAgaWYg
KFVOTElLRUxZKCFtX2xvY2FsVG9FbnRyeSkpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1N5bWJvbFRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuaAkocmV2aXNpb24gMTgyMjAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzUs
MTMgKzM1LDE1IEBACiAjaW5jbHVkZSAiU2NvcGVkQXJndW1lbnRzVGFibGUuaCIKICNpbmNsdWRl
ICJUeXBlTG9jYXRpb24uaCIKICNpbmNsdWRlICJWYXJPZmZzZXQuaCIKLSNpbmNsdWRlICJWYXJp
YWJsZVdhdGNocG9pbnRTZXQuaCIKKyNpbmNsdWRlICJXYXRjaHBvaW50LmgiCiAjaW5jbHVkZSA8
bWVtb3J5PgogI2luY2x1ZGUgPHd0Zi9IYXNoVHJhaXRzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQv
U3RyaW5nSW1wbC5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIAorY2xhc3MgU3ltYm9sVGFibGU7CisK
IHN0YXRpYyBBTFdBWVNfSU5MSU5FIGludCBtaXNzaW5nU3ltYm9sTWFya2VyKCkgeyByZXR1cm4g
c3RkOjpudW1lcmljX2xpbWl0czxpbnQ+OjptYXgoKTsgfQogCiAvLyBUaGUgYml0IHR3aWRkbGlu
ZyBpbiB0aGlzIGNsYXNzIGFzc3VtZXMgdGhhdCBldmVyeSByZWdpc3RlciBpbmRleCBpcyBhCkBA
IC02MywxMSArNjUsMTEgQEAgc3RhdGljIEFMV0FZU19JTkxJTkUgaW50IG1pc3NpbmdTeW1ib2xN
YQogLy8gY291bnRlZCBwb2ludGVyIHRvIGEgc2hhcmVkIFdhdGNocG9pbnRTZXQuIFRodXMsIGlu
LXBsYWNlIGVkaXRzIG9mIHRoZQogLy8gV2F0Y2hwb2ludFNldCB3aWxsIG1hbmlmZXN0IGluIGFs
bCBjb3BpZXMuIEhlcmUncyBhIHBpY3R1cmU6CiAvLwotLy8gU3ltYm9sVGFibGVFbnRyeSAtLT4g
RmF0RW50cnkgLS0+IFZhcmlhYmxlV2F0Y2hwb2ludFNldAorLy8gU3ltYm9sVGFibGVFbnRyeSAt
LT4gRmF0RW50cnkgLS0+IFdhdGNocG9pbnRTZXQKIC8vCiAvLyBJZiB5b3UgbWFrZSBhIGNvcHkg
b2YgYSBTeW1ib2xUYWJsZUVudHJ5LCB5b3Ugd2lsbCBoYXZlOgogLy8KLS8vIG9yaWdpbmFsOiBT
eW1ib2xUYWJsZUVudHJ5IC0tPiBGYXRFbnRyeSAtLT4gVmFyaWFibGVXYXRjaHBvaW50U2V0Cisv
LyBvcmlnaW5hbDogU3ltYm9sVGFibGVFbnRyeSAtLT4gRmF0RW50cnkgLS0+IFdhdGNocG9pbnRT
ZXQKIC8vIGNvcHk6ICAgICBTeW1ib2xUYWJsZUVudHJ5IC0tPiBGYXRFbnRyeSAtLS0tLV4KIAog
c3RydWN0IFN5bWJvbFRhYmxlRW50cnkgewpAQCAtMjYwLDMyICsyNjIsNDQgQEAgcHVibGljOgog
ICAgICAgICByZXR1cm4gYml0cygpICYgRG9udEVudW1GbGFnOwogICAgIH0KICAgICAKLSAgICBK
U1ZhbHVlIGluZmVycmVkVmFsdWUoKTsKLQogICAgIHZvaWQgZGlzYWJsZVdhdGNoaW5nKCkKICAg
ICB7CisgICAgICAgIGlmIChXYXRjaHBvaW50U2V0KiBzZXQgPSB3YXRjaHBvaW50U2V0KCkpCisg
ICAgICAgICAgICBzZXQtPmludmFsaWRhdGUoIkRpc2FibGluZyB3YXRjaGluZyBpbiBzeW1ib2wg
dGFibGUiKTsKICAgICAgICAgaWYgKHZhck9mZnNldCgpLmlzU2NvcGUoKSkKICAgICAgICAgICAg
IHBhY2sodmFyT2Zmc2V0KCksIGZhbHNlLCBpc1JlYWRPbmx5KCksIGlzRG9udEVudW0oKSk7CiAg
ICAgfQogICAgIAotICAgIHZvaWQgcHJlcGFyZVRvV2F0Y2goU3ltYm9sVGFibGUqKTsKKyAgICB2
b2lkIHByZXBhcmVUb1dhdGNoKCk7CiAgICAgCiAgICAgdm9pZCBhZGRXYXRjaHBvaW50KFdhdGNo
cG9pbnQqKTsKICAgICAKLSAgICBWYXJpYWJsZVdhdGNocG9pbnRTZXQqIHdhdGNocG9pbnRTZXQo
KQorICAgIC8vIFRoaXMgd2F0Y2hwb2ludCBzZXQgaXMgaW5pdGlhbGl6ZWQgY2xlYXIsIGFuZCBn
b2VzIHRocm91Z2ggdGhlIGZvbGxvd2luZyBzdGF0ZSB0cmFuc2l0aW9uczoKKyAgICAvLyAKKyAg
ICAvLyBGaXJzdCB3cml0ZSB0byB0aGlzIHZhciwgaW4gYW55IHNjb3BlIHRoYXQgaGFzIHRoaXMg
c3ltYm9sIHRhYmxlOiBDbGVhci0+SXNXYXRjaGVkLgorICAgIC8vCisgICAgLy8gU2Vjb25kIHdy
aXRlIHRvIHRoaXMgdmFyLCBpbiBhbnkgc2NvcGUgdGhhdCBoYXMgdGhpcyBzeW1ib2wgdGFibGU6
IElzV2F0Y2hlZC0+SXNJbnZhbGlkYXRlZC4KKyAgICAvLworICAgIC8vIFdlIGVuc3VyZSB0aGF0
IHdlIHRvdWNoIHRoZSBzZXQgKGkuZS4gdHJpZ2dlciBpdHMgc3RhdGUgdHJhbnNpdGlvbikgYWZ0
ZXIgd2UgZG8gdGhlIHdyaXRlLiBUaGlzCisgICAgLy8gbWVhbnMgdGhhdCBpZiB5b3UncmUgaW4g
dGhlIGNvbXBpbGVyIHRocmVhZCwgYW5kIHlvdToKKyAgICAvLworICAgIC8vIDEpIE9ic2VydmUg
dGhhdCB0aGUgc2V0IElzV2F0Y2hlZCBhbmQgY29tbWl0IHRvIGFkZGluZyB5b3VyIHdhdGNocG9p
bnQuCisgICAgLy8gMikgTG9hZCBhIHZhbHVlIGZyb20gYW55IHNjb3BlIHRoYXQgaGFzIHRoaXMg
d2F0Y2hwb2ludCBzZXQuCisgICAgLy8KKyAgICAvLyBUaGVuIHlvdSBjYW4gYmUgc3VyZSB0aGF0
IHRoYXQgdmFsdWUgaXMgZWl0aGVyIGdvaW5nIHRvIGJlIHRoZSBjb3JyZWN0IHZhbHVlIGZvciB0
aGF0IHZhciBmb3JldmVyLAorICAgIC8vIG9yIHRoZSB3YXRjaHBvaW50IHNldCB3aWxsIGludmFs
aWRhdGUgYW5kIHlvdSdsbCBnZXQgZmlyZWQuCisgICAgLy8KKyAgICAvLyBJdCdzIHBvc3NpYmxl
IHRvIHdyaXRlIGEgcHJvZ3JhbSB0aGF0IGZpcnN0IGNyZWF0ZXMgbXVsdGlwbGUgc2NvcGVzIHdp
dGggdGhlIHNhbWUgdmFyLCBhbmQgdGhlbgorICAgIC8vIGluaXRpYWxpemVzIHRoYXQgdmFyIGlu
IGp1c3Qgb25lIG9mIHRoZW0uIFRoaXMgbWVhbnMgdGhhdCBhIGNvbXBpbGF0aW9uIGNvdWxkIGNv
bnN0YW50LWZvbGQgdG8gb25lCisgICAgLy8gb2YgdGhlIHNjb3BlcyB0aGF0IHN0aWxsIGhhcyBh
biB1bmRlZmluZWQgdmFsdWUgZm9yIHRoaXMgdmFyaWFibGUuIFRoYXQncyBmaW5lLCBiZWNhdXNl
IGF0IHRoYXQKKyAgICAvLyBwb2ludCBhbnkgd3JpdGUgdG8gYW55IG9mIHRoZSBpbnN0YW5jZXMg
b2YgdGhhdCB2YXJpYWJsZSB3b3VsZCBmaXJlIHRoZSB3YXRjaHBvaW50LgorICAgIFdhdGNocG9p
bnRTZXQqIHdhdGNocG9pbnRTZXQoKQogICAgIHsKICAgICAgICAgaWYgKCFpc0ZhdCgpKQogICAg
ICAgICAgICAgcmV0dXJuIDA7CiAgICAgICAgIHJldHVybiBmYXRFbnRyeSgpLT5tX3dhdGNocG9p
bnRzLmdldCgpOwogICAgIH0KICAgICAKLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgbm90aWZ5V3Jp
dGUoVk0mIHZtLCBKU1ZhbHVlIHZhbHVlLCBjb25zdCBGaXJlRGV0YWlsJiBkZXRhaWwpCi0gICAg
ewotICAgICAgICBpZiAoTElLRUxZKCFpc0ZhdCgpKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgbm90aWZ5V3JpdGVTbG93KHZtLCB2YWx1ZSwgZGV0YWlsKTsKLSAgICB9Ci0gICAgCiBw
cml2YXRlOgogICAgIHN0YXRpYyBjb25zdCBpbnRwdHJfdCBTbGltRmxhZyA9IDB4MTsKICAgICBz
dGF0aWMgY29uc3QgaW50cHRyX3QgUmVhZE9ubHlGbGFnID0gMHgyOwpAQCAtMzA4LDcgKzMyMiw3
IEBAIHByaXZhdGU6CiAgICAgICAgIAogICAgICAgICBpbnRwdHJfdCBtX2JpdHM7IC8vIGFsd2F5
cyBoYXMgRmF0RmxhZyBzZXQgYW5kIGV4YWN0bHkgbWF0Y2hlcyB3aGF0IHRoZSBiaXRzIHdvdWxk
IGhhdmUgYmVlbiBpZiB0aGlzIHdhc24ndCBmYXQuCiAgICAgICAgIAotICAgICAgICBSZWZQdHI8
VmFyaWFibGVXYXRjaHBvaW50U2V0PiBtX3dhdGNocG9pbnRzOworICAgICAgICBSZWZQdHI8V2F0
Y2hwb2ludFNldD4gbV93YXRjaHBvaW50czsKICAgICB9OwogICAgIAogICAgIFN5bWJvbFRhYmxl
RW50cnkmIGNvcHlTbG93KGNvbnN0IFN5bWJvbFRhYmxlRW50cnkmKTsKQEAgLTY0NiwxOCArNjYw
LDYgQEAgcHJvdGVjdGVkOgogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFn
cyA9IFN0cnVjdHVyZUlzSW1tb3J0YWwgfCBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKIAogcHJpdmF0
ZToKLSAgICBjbGFzcyBXYXRjaHBvaW50Q2xlYW51cCA6IHB1YmxpYyBVbmNvbmRpdGlvbmFsRmlu
YWxpemVyIHsKLSAgICBwdWJsaWM6Ci0gICAgICAgIFdhdGNocG9pbnRDbGVhbnVwKFN5bWJvbFRh
YmxlKik7Ci0gICAgICAgIHZpcnR1YWwgfldhdGNocG9pbnRDbGVhbnVwKCk7Ci0gICAgICAgIAot
ICAgIHByb3RlY3RlZDoKLSAgICAgICAgdmlydHVhbCB2b2lkIGZpbmFsaXplVW5jb25kaXRpb25h
bGx5KCkgb3ZlcnJpZGU7Ci0KLSAgICBwcml2YXRlOgotICAgICAgICBTeW1ib2xUYWJsZSogbV9z
eW1ib2xUYWJsZTsKLSAgICB9OwotICAgIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIFN5bWJvbFRh
YmxlKFZNJik7CiAgICAgflN5bWJvbFRhYmxlKCk7CiAKQEAgLTY3NSwxMiArNjc3LDkgQEAgcHJp
dmF0ZToKICAgICAKICAgICBXcml0ZUJhcnJpZXI8U2NvcGVkQXJndW1lbnRzVGFibGU+IG1fYXJn
dW1lbnRzOwogICAgIAotICAgIHN0ZDo6dW5pcXVlX3B0cjxXYXRjaHBvaW50Q2xlYW51cD4gbV93
YXRjaHBvaW50Q2xlYW51cDsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8TG9jYWxUb0VudHJ5VmVjPiBt
X2xvY2FsVG9FbnRyeTsKIAogcHVibGljOgotICAgIElubGluZVdhdGNocG9pbnRTZXQgbV9mdW5j
dGlvbkVudGVyZWRPbmNlOwotICAgIAogICAgIG11dGFibGUgQ29uY3VycmVudEpJVExvY2sgbV9s
b2NrOwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZVByb2Zp
bGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBl
UHJvZmlsZXIuY3BwCShyZXZpc2lvbiAxODIyMDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9UeXBlUHJvZmlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBA
CiAKICNpbmNsdWRlICJJbnNwZWN0b3JQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlICJUeXBl
TG9jYXRpb24uaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKIG5hbWVz
cGFjZSBKU0MgewogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2lu
ZmVyLXVuaW5pdGlhbGl6ZWQtY2xvc3VyZS12YXIuanMKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9pbmZlci11bmluaXRpYWxpemVkLWNsb3N1cmUtdmFy
LmpzCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9p
bmZlci11bmluaXRpYWxpemVkLWNsb3N1cmUtdmFyLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMjYgQEAKK2Z1bmN0aW9uIGZvbyhwKSB7CisgICAgdmFyIHg7CisgICAgCisgICAgbm9Jbmxp
bmUoZik7CisgICAgCisgICAgaWYgKHApIHsKKyAgICAgICAgdmFyIGYgPSBmdW5jdGlvbigpIHsg
cmV0dXJuIHg7IH0KKyAgICAgICAgCisgICAgICAgIGZvbyhmYWxzZSk7CisgICAgICAgIAorICAg
ICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwOyArK2kpIHsKKyAgICAgICAgICAgIHZhciBy
ZXN1bHQgPSBmKCk7CisgICAgICAgICAgICBpZiAocmVzdWx0ICE9PSB2b2lkIDApCisgICAgICAg
ICAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0ICgxKTogIiArIHJlc3VsdDsKKyAgICAg
ICAgfQorICAgICAgICAKKyAgICAgICAgeCA9IDQzOworICAgICAgICAKKyAgICAgICAgdmFyIHJl
c3VsdCA9IGYoKTsKKyAgICAgICAgaWYgKHJlc3VsdCAhPSA0MykKKyAgICAgICAgICAgIHRocm93
ICJFcnJvcjogYmFkIHJlc3VsdCAoMik6ICIgKyByZXN1bHQ7CisgICAgfSBlbHNlCisgICAgICAg
IHggPSA0MjsKK30KKworZm9vKHRydWUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rl
c3RzL3N0cmVzcy9zaW5nbGV0b24tc2NvcGUtdGhlbi1vdmVyd3JpdGUuanMKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9zaW5nbGV0b24tc2NvcGUtdGhl
bi1vdmVyd3JpdGUuanMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVz
dHMvc3RyZXNzL3NpbmdsZXRvbi1zY29wZS10aGVuLW92ZXJ3cml0ZS5qcwkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDIwIEBACitmdW5jdGlvbiBmb28oYSkgeworICAgIHZhciB4ID0gYSArIDE7
CisgICAgdmFyIGYgPSBmdW5jdGlvbihhKSB7CisgICAgICAgIHJldHVybiB4ICsgYTsKKyAgICB9
OworICAgIG5vSW5saW5lKGYpOworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7ICsraSkg
eworICAgICAgICB2YXIgcmVzdWx0ID0gZihpKTsKKyAgICAgICAgaWYgKHJlc3VsdCAhPSBhICsg
MSArIGkpCisgICAgICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQ6ICIgKyByZXN1bHQ7
CisgICAgfQorICAgIHggPSA5OTk7CisgICAgdmFyIHJlc3VsdCA9IGYoMSk7CisgICAgaWYgKHJl
c3VsdCAhPSA5OTkgKyAxKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQ6ICIgKyBy
ZXN1bHQ7Cit9CisKK25vSW5saW5lKGZvbyk7Citmb3IgKHZhciBpID0gMDsgaSA8IDM7ICsraSkK
KyAgICBmb28oNDIgKyBpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJl
c3Mvc2luZ2xldG9uLXNjb3BlLXRoZW4tcmVhbGxvYy1hbmQtb3ZlcndyaXRlLmpzCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3Mvc2luZ2xldG9uLXNjb3Bl
LXRoZW4tcmVhbGxvYy1hbmQtb3ZlcndyaXRlLmpzCShyZXZpc2lvbiAwKQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9zaW5nbGV0b24tc2NvcGUtdGhlbi1yZWFsbG9jLWFu
ZC1vdmVyd3JpdGUuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMCBAQAorZnVuY3Rpb24g
Zm9vKGEpIHsKKyAgICB2YXIgeCA9IGEgKyAxOworICAgIHJldHVybiBmdW5jdGlvbihhKSB7Cisg
ICAgICAgIHJldHVybiB4ICsgYTsKKyAgICB9OworfQorCit2YXIgZiA9IGZvbyg0Mik7Citub0lu
bGluZShmKTsKKworZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsgKytpKSB7CisgICAgdmFyIHJl
c3VsdCA9IGYoaSk7CisgICAgaWYgKHJlc3VsdCAhPSA0MiArIDEgKyBpKQorICAgICAgICB0aHJv
dyAiRXJyb3I6IGJhZCByZXN1bHQ6ICIgKyByZXN1bHQ7Cit9CisKK3ZhciBmID0gZm9vKDQzKTsK
K3ZhciByZXN1bHQgPSBmKDEpOworaWYgKHJlc3VsdCAhPSA0MyArIDEgKyAxKQorICAgIHRocm93
ICJFcnJvcjogYmFkIHJlc3VsdDogIiArIHJlc3VsdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS90ZXN0cy9zdHJlc3Mvc2luZ2xldG9uLXNjb3BlLXRoZW4tcmVhbGxvYy5qcwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3NpbmdsZXRvbi1zY29w
ZS10aGVuLXJlYWxsb2MuanMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
dGVzdHMvc3RyZXNzL3NpbmdsZXRvbi1zY29wZS10aGVuLXJlYWxsb2MuanMJKHdvcmtpbmcgY29w
eSkKQEAgLTAsMCArMSwyMCBAQAorZnVuY3Rpb24gZm9vKGEpIHsKKyAgICB2YXIgeCA9IGEgKyAx
OworICAgIHJldHVybiBmdW5jdGlvbihhKSB7CisgICAgICAgIHJldHVybiB4ICs9IGE7CisgICAg
fTsKK30KKwordmFyIGYgPSBmb28oNDIpOworbm9JbmxpbmUoZik7CisKK2ZvciAodmFyIGkgPSAw
OyBpIDwgMTAwMDA7ICsraSkgeworICAgIHZhciByZXN1bHQgPSBmKDEpOworICAgIGlmIChyZXN1
bHQgIT0gNDIgKyAxICsgaSArIDEpCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdDog
IiArIHJlc3VsdDsKK30KKwordmFyIGYgPSBmb28oNDMpOwordmFyIHJlc3VsdCA9IGYoMSk7Citp
ZiAocmVzdWx0ICE9IDQzICsgMSArIDEpCisgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0OiAi
ICsgcmVzdWx0OwpJbmRleDogTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMTgyMjAwKQorKysgTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjAgQEAKKzIwMTUtMDMtMzEgIEZpbGlw
IFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAgICAgICBKU0Mgc2hvdWxkIGRldGVjdCBz
aW5nbGV0b24gZnVuY3Rpb25zCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNDMyMzIKKworICAgICAgICBSZXZpZXdlZCBieSBNaWNoYWVsIFNhYm9mZi4K
KworICAgICAgICAqIGpzL3JlZ3Jlc3MvY3JlYXRlLWxvdHMtb2YtZnVuY3Rpb25zLWV4cGVjdGVk
LnR4dDogQWRkZWQuCisgICAgICAgICoganMvcmVncmVzcy9jcmVhdGUtbG90cy1vZi1mdW5jdGlv
bnMuaHRtbDogQWRkZWQuCisgICAgICAgICoganMvcmVncmVzcy9uby1pbmxpbmUtY29uc3RydWN0
b3ItZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL25vLWlubGluZS1j
b25zdHJ1Y3Rvci5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL3NjcmlwdC10ZXN0
cy9jcmVhdGUtbG90cy1vZi1mdW5jdGlvbnMuanM6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jl
c3Mvc2NyaXB0LXRlc3RzL25vLWlubGluZS1jb25zdHJ1Y3Rvci5qczogQWRkZWQuCisgICAgICAg
ICoganMvcmVncmVzcy9zY3JpcHQtdGVzdHMvc2luZ2xldG9uLXNjb3BlLmpzOiBBZGRlZC4KKyAg
ICAgICAgKiBqcy9yZWdyZXNzL3NpbmdsZXRvbi1zY29wZS1leHBlY3RlZC50eHQ6IEFkZGVkLgor
ICAgICAgICAqIGpzL3JlZ3Jlc3Mvc2luZ2xldG9uLXNjb3BlLmh0bWw6IEFkZGVkLgorCiAyMDE1
LTAzLTMxICBTYWlkIEFib3UtSGFsbGF3YSAgPHNhYm91aGFsbGF3YUBhcHBsZS5jb20+CiAKICAg
ICAgICAgYm9yZGVyLWltYWdlIHdpdGggJ2ZpbGwnIGtleXdvcmQgZG9lcyBub3QgZmlsbCB0aGUg
bWlkZGxlIGFyZWEgdW5sZXNzIHRoZSBib3JkZXIgd2lkdGggaXMgZ3JlYXRlciB0aGFuIHplcm8u
CkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2NyZWF0ZS1sb3RzLW9mLWZ1bmN0aW9ucy1l
eHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9jcmVhdGUt
bG90cy1vZi1mdW5jdGlvbnMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVz
dHMvanMvcmVncmVzcy9jcmVhdGUtbG90cy1vZi1mdW5jdGlvbnMtZXhwZWN0ZWQudHh0CSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAgQEAKK0pTUmVncmVzcy9jcmVhdGUtbG90cy1vZi1mdW5j
dGlvbnMKKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNz
YWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1Mgbm8gZXhjZXB0aW9u
IHRocm93bgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRF
CisKSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvY3JlYXRlLWxvdHMtb2YtZnVuY3Rpb25z
Lmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9jcmVhdGUtbG90cy1v
Zi1mdW5jdGlvbnMuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mv
Y3JlYXRlLWxvdHMtb2YtZnVuY3Rpb25zLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwx
MiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0
bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMi
Pjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2Vz
L3JlZ3Jlc3MtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvY3Jl
YXRlLWxvdHMtb2YtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9y
ZXNvdXJjZXMvcmVncmVzcy1wb3N0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9y
ZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5k
ZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvbm8taW5saW5lLWNvbnN0cnVjdG9yLWV4cGVjdGVk
LnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL25vLWlubGluZS1jb25z
dHJ1Y3Rvci1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdy
ZXNzL25vLWlubGluZS1jb25zdHJ1Y3Rvci1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwxMCBAQAorSlNSZWdyZXNzL25vLWlubGluZS1jb25zdHJ1Y3RvcgorCitPbiBzdWNj
ZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBi
eSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBubyBleGNlcHRpb24gdGhyb3duCitQQVNTIHN1
Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0
VGVzdHMvanMvcmVncmVzcy9uby1pbmxpbmUtY29uc3RydWN0b3IuaHRtbAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL25vLWlubGluZS1jb25zdHJ1Y3Rvci5odG1sCShyZXZp
c2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9uby1pbmxpbmUtY29uc3RydWN0b3Iu
aHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyIEBACis8IURPQ1RZUEUgSFRNTCBQVUJM
SUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9
Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9k
eT4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcmVncmVzcy1wcmUuanMiPjwvc2NyaXB0
PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy9uby1pbmxpbmUtY29uc3RydWN0b3IuanMiPjwv
c2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNzLXBvc3QuanMiPjwv
c2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwv
c2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9z
aW5nbGV0b24tc2NvcGUtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pz
L3JlZ3Jlc3Mvc2luZ2xldG9uLXNjb3BlLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExh
eW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2luZ2xldG9uLXNjb3BlLWV4cGVjdGVkLnR4dAkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDEwIEBACitKU1JlZ3Jlc3Mvc2luZ2xldG9uLXNjb3BlCisKK09u
IHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxv
d2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIG5vIGV4Y2VwdGlvbiB0aHJvd24KK1BB
U1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBM
YXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NpbmdsZXRvbi1zY29wZS5odG1sCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2luZ2xldG9uLXNjb3BlLmh0bWwJKHJldmlzaW9uIDAp
CisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NpbmdsZXRvbi1zY29wZS5odG1sCSh3b3JraW5n
IGNvcHkpCkBAIC0wLDAgKzEsMTIgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8v
RFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3Vy
Y2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdCBz
cmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNzLXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNy
Yz0ic2NyaXB0LXRlc3RzL3NpbmdsZXRvbi1zY29wZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNy
Yz0iLi4vLi4vcmVzb3VyY2VzL3JlZ3Jlc3MtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNy
Yz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8
L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9jcmVhdGUt
bG90cy1vZi1mdW5jdGlvbnMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVz
cy9zY3JpcHQtdGVzdHMvY3JlYXRlLWxvdHMtb2YtZnVuY3Rpb25zLmpzCShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvY3JlYXRlLWxvdHMtb2YtZnVu
Y3Rpb25zLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIgQEAKK2Z1bmN0aW9uIGZvbygp
IHsKKyAgICB2YXIgcmVzdWx0ID0gMDsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDsgKytp
KQorICAgICAgICByZXN1bHQgKz0gKGZ1bmN0aW9uKCkgeyByZXR1cm4gaSB9KSgpOworICAgIHJl
dHVybiByZXN1bHQ7Cit9CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgeworICAg
IHZhciByZXN1bHQgPSBmb28oKTsKKyAgICBpZiAocmVzdWx0ICE9IDQ5NTApCisgICAgICAgIHRo
cm93ICJFcnJvcjogYmFkIHJlc3VsdDogIiArIHJlc3VsdDsKK30KSW5kZXg6IExheW91dFRlc3Rz
L2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL25vLWlubGluZS1jb25zdHJ1Y3Rvci5qcwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9uby1pbmxpbmUtY29u
c3RydWN0b3IuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3Njcmlw
dC10ZXN0cy9uby1pbmxpbmUtY29uc3RydWN0b3IuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwxMyBAQAorZnVuY3Rpb24gRm9vKCkgeworICAgIHZhciBvID0ge2Y6e2Y6e2Y6e2Y6NDJ9fX19
OworICAgIHRoaXMuZiA9IDQyOworfQorCitub0lubGluZShGb28pOworCitmb3IgKHZhciBpID0g
MDsgaSA8IDMwMDAwMDA7ICsraSkgeworICAgIHZhciByZXN1bHQgPSBuZXcgRm9vKCk7CisgICAg
aWYgKHJlc3VsdC5mICE9IDQyKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQ6ICIg
KyByZXN1bHQuZjsKK30KKwpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVz
dHMvc2luZ2xldG9uLXNjb3BlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jl
c3Mvc2NyaXB0LXRlc3RzL3NpbmdsZXRvbi1zY29wZS5qcwkocmV2aXNpb24gMCkKKysrIExheW91
dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL3NpbmdsZXRvbi1zY29wZS5qcwkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDE2IEBACitmdW5jdGlvbiBmb28oKSB7CisgICAgdmFyIHggPSA0
MjsKKyAgICB2YXIgeSA9IDQzOworICAgIHJldHVybiBmdW5jdGlvbih6KSB7CisgICAgICAgIHZh
ciByZXN1bHQgPSB4ICsgeTsKKyAgICAgICAgeCArPSB6OworICAgICAgICB5ICs9IHo7CisgICAg
ICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorfQorCit2YXIgZiA9IGZvbygpOworbm9JbmxpbmUo
Zik7CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDAwMDA7ICsraSkKKyAgICBmKDEpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>250317</attachid>
            <date>2015-04-07 17:04:57 -0700</date>
            <delta_ts>2015-04-07 20:16:22 -0700</delta_ts>
            <desc>more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>120870</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTgyNDk4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5NyBA
QAorMjAxNS0wNC0wNyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEpTQyBzaG91bGQgZGV0ZWN0IHNpbmdsZXRvbiBmdW5jdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MzIzMgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE1pY2hhZWwgU2Fib2ZmLgorICAgICAgICAKKyAgICAgICAgVGhpcyBzdGFydGVkIG91dCBh
cyBhbiBhdHRlbXB0IHRvIG1ha2UgY29uc3RydWN0b3JzIGZhc3RlciBieSBkZXRlY3Rpbmcgd2hl
biBhIGNvbnN0cnVjdG9yIGlzIGEKKyAgICAgICAgc2luZ2xldG9uLiBUaGUgaWRlYSBpcyB0aGF0
IGVhY2ggRnVuY3Rpb25FeGVjdXRhYmxlIGhhcyBhIFZhcmlhYmxlV2F0Y2hwb2ludFNldCAtIGEg
d2F0Y2hwb2ludAorICAgICAgICBhbG9uZyB3aXRoIGFuIGluZmVycmVkIHZhbHVlIC0gdGhhdCBk
ZXRlY3RzIGlmIG9ubHkgb25lIEpTRnVuY3Rpb24gaGFzIGJlZW4gYWxsb2NhdGVkIGZvciB0aGF0
CisgICAgICAgIGV4ZWN1dGFibGUsIGFuZCBpZiBzbywgd2hhdCB0aGF0IEpTRnVuY3Rpb24gaXMu
IFRoZW4sIGluc2lkZSB0aGUgY29kZSBmb3IgdGhlIEZ1bmN0aW9uRXhlY3V0YWJsZSwKKyAgICAg
ICAgaWYgdGhlIHdhdGNocG9pbnQgc2V0IGhhcyBhbiBpbmZlcnJlZCB2YWx1ZSAoaS5lLiBpdCdz
IGJlZW4gaW5pdGlhbGl6ZWQgYW5kIGl0IGlzIHN0aWxsIHZhbGlkKSwKKyAgICAgICAgd2UgY2Fu
IGNvbnN0YW50LWZvbGQgR2V0Q2FsbGVlLgorICAgICAgICAKKyAgICAgICAgVW5mb3J0dW5hdGVs
eSwgY29uc3RydWN0b3JzIGRvbid0IHVzZSBHZXRDYWxsZWUgYW55bW9yZSwgc28gdGhhdCBkaWRu
J3QgcGFuIG91dC4gQnV0IGluIHRoZQorICAgICAgICBwcm9jZXNzIEkgcmVhbGl6ZWQgdGhyZWUg
dGhpbmdzOgorICAgICAgICAKKyAgICAgICAgLSBUaGlzIGFsbG93cyB1cyB0byBjb21wbGV0ZWx5
IGVsaW1pbmF0ZSB0aGUgR2V0Q2FsbGVlL0dldFNjb3BlIHNlcXVlbmNlIHRoYXQgd2Ugc3RpbGwg
c29tZXRpbWVzCisgICAgICAgICAgaGFkIGV2ZW4gaW4gY29kZSB3aGVyZSBvdXIgc2luZ2xldG9u
LWNsb3N1cmUgZGV0ZWN0aW9uIHdvcmtlZC4gVGhhdCdzIGJlY2F1c2Ugc2luZ2xldG9uLWNsb3N1
cmUKKyAgICAgICAgICBpbmZlcmVuY2Ugd29ya2VkIGF0IHRoZSBvcF9yZXNvbHZlX3Njb3BlLCBh
bmQgdGhhdCBvcF9yZXNvbHZlX3Njb3BlIHN0aWxsIG5lZWRlZCB0byBrZWVwIGFsaXZlCisgICAg
ICAgICAgdGhlIGluY29taW5nIHNjb3BlIGluIGNhc2Ugd2UgT1NSIGV4aXQuIEJ1dCBieSBjb25z
dGFudC1mb2xkaW5nIEdldENhbGxlZSwgdGhhdCBzZXF1ZW5jZQorICAgICAgICAgIGRpc2FwcGVh
cnMuIE9TUiBleGl0IGNhbiByZW1hdGVyaWFsaXplIHRoZSBjYWxsZWUgb3IgdGhlIHNjb3BlIGJ5
IGp1c3Qga25vd2luZyB0aGVpciBjb25zdGFudAorICAgICAgICAgIHZhbHVlcy4KKyAgICAgICAg
CisgICAgICAgIC0gVGhpcyBhbGxvd3MgdXMgdG8gZWxpbWluYXRlIHRoZSBmdW5jdGlvbiByZWVu
dHJ5IHdhdGNocG9pbnQuIFRoYXQgd2F0Y2hwb2ludCBpbmZlcnJlZCBzaW5nbGV0b24KKyAgICAg
ICAgICBjbG9zdXJlcy4gQnV0IHdlIGRvbid0IG5lZWQgdG8gaW5mZXIgc2luZ2xldG9uIGNsb3N1
cmVzLCBpZiB3ZSBhcmUgaW5mZXJyaW5nIHNpbmdsZXRvbiBjYWxsZWVzLgorICAgICAgICAgIFNv
LCB0aGF0IGtpbGxzIGEgYnVuY2ggb2YgY29kZS4KKyAgICAgICAgCisgICAgICAgIC0gVGhpcyBh
bGxvd3MgdXMgdG8gdXNlIGEgbm9ybWFsIFdhdGNocG9pbnRTZXQsIGluc3RlYWQgb2YgYSBWYXJp
YWJsZVdhdGNocG9pbnRTZXQsIGZvciBpbmZlcnJpbmcKKyAgICAgICAgICBjb25zdGFudCB2YWx1
ZXMgaW4gc2NvcGVzLiBQcmV2aW91c2x5IHdoZW4gdGhlIERGRyBpbmZlcnJlZCB0aGF0IGEgY2xv
c3VyZSB2YXJpYWJsZSB3YXMKKyAgICAgICAgICBjb25zdGFudCwgaXQgd291bGRuJ3Qga25vdyB3
aGljaCBjbG9zdXJlIHRoYXQgdmFyaWFibGUgd2FzIGluIGFuZCBzbyBpdCBjb3VsZG4ndCBqdXN0
IGxvYWQgdGhhdAorICAgICAgICAgIHZhbHVlLiBCdXQgbm93IHdlIGFyZSBmaXJzdCBpbmZlcnJp
bmcgdGhhdCB0aGUgZnVuY3Rpb24gaXMgYSBzaW5nbGV0b24sIHdoaWNoIG1lYW5zIHRoYXQgd2UK
KyAgICAgICAgICBrbm93IGV4YWN0bHkgd2hhdCBzY29wZSBpdCBwb2ludHMgdG8sIGFuZCB3ZSBj
YW4gbG9hZCB0aGUgdmFsdWUgZnJvbSB0aGUgc2NvcGUuIFVzaW5nIGEKKyAgICAgICAgICBXYXRj
aHBvaW50U2V0IGluc3RlYWQgb2YgYSBWYXJpYWJsZVdhdGNocG9pbnRTZXQgc2F2ZXMgc29tZSBt
ZW1vcnkgYW5kIHNpbXBsaWZpZXMgYSBidW5jaCBvZgorICAgICAgICAgIGNvZGUuIFRoaXMgYWxz
byBtZWFucyB0aGF0IG5vdywgdGhlIG9ubHkgdXNlciBvZiBWYXJpYWJsZVdhdGNocG9pbnRTZXQg
aXMgRnVuY3Rpb25FeGVjdXRhYmxlLgorICAgICAgICAgIEkndmUgdHdlYWtlZCB0aGUgY29kZSBv
ZiBWYXJpYWJsZVdhdGNocG9pbnRTZXQgdG8gcmVkdWNlIGl0cyBwb3dlciB0byBqdXN0IGJlIHdo
YXQKKyAgICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUgd2FudHMuCisgICAgICAgIAorICAgICAg
ICBUaGlzIGFsc28gaGFzIHRoZSBlZmZlY3Qgb2Ygc2ltcGxpZnlpbmcgdGhlIGltcGxlbWVudGF0
aW9uIG9mIGJsb2NrIHNjb3BpbmcuIFByaW9yIHRvIHRoaXMKKyAgICAgICAgY2hhbmdlLCBibG9j
ayBzY29waW5nIHdvdWxkIGhhZCBoYWQgdG8gaGF2ZSBzb21lIHN0b3J5IGZvciB0aGUgZnVuY3Rp
b24gcmVlbnRyeSB3YXRjaHBvaW50IG9uIGFueQorICAgICAgICBuZXN0ZWQgc3ltYm9sIHRhYmxl
LiBUaGF0J3MgdG90YWxseSB3ZWlyZCB0byB0aGluayBhYm91dDsgaXQncyBub3QgcmVhbGx5IGEg
ZnVuY3Rpb24gcmVlbnRyeSBidXQKKyAgICAgICAgYSBzY29wZSByZWVudHJ5LiBOb3cgd2UgZG9u
J3QgaGF2ZSB0byB0aGluayBhYm91dCB0aGlzLiBDb25zdGFudCBpbmZlcmVuY2Ugb24gbmVzdGVk
IHNjb3BlcyB3aWxsCisgICAgICAgICJqdXN0IHdvcmsiOiBpZiB3ZSBwcm92ZSB0aGF0IHdlIGtu
b3cgdGhlIGNvbnN0YW50IHZhbHVlIG9mIHRoZSBzY29wZSB0aGVuIHRoZSBtYWNoaW5lcnkga2lj
a3MKKyAgICAgICAgaW4sIG90aGVyd2lzZSBpdCBkb2Vzbid0LgorCisgICAgICAgICogQ01ha2VM
aXN0cy50eHQ6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29y
ZS52Y3hwcm9qOgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2o6CisgICAgICAgICogYnl0ZWNvZGUvQnl0ZWNvZGVMaXN0Lmpzb246CisgICAgICAgICog
Ynl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuaDoKKyAgICAgICAgKEpTQzo6Y29tcHV0ZVVzZXNGb3JC
eXRlY29kZU9mZnNldCk6CisgICAgICAgIChKU0M6OmNvbXB1dGVEZWZzRm9yQnl0ZWNvZGVPZmZz
ZXQpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OkNv
ZGVCbG9jazo6ZHVtcEJ5dGVjb2RlKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpDb2RlQmxv
Y2spOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KToK
KyAgICAgICAgKiBieXRlY29kZS9Db2RlT3JpZ2luLmNwcDoKKyAgICAgICAgKEpTQzo6SW5saW5l
Q2FsbEZyYW1lOjpjYWxsZWVDb25zdGFudCk6CisgICAgICAgIChKU0M6OklubGluZUNhbGxGcmFt
ZTo6dmlzaXRBZ2dyZWdhdGUpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVPcmlnaW4uaDoKKyAg
ICAgICAgKEpTQzo6SW5saW5lQ2FsbEZyYW1lOjpjYWxsZWVDb25zdGFudCk6IERlbGV0ZWQuCisg
ICAgICAgIChKU0M6OklubGluZUNhbGxGcmFtZTo6dmlzaXRBZ2dyZWdhdGUpOiBEZWxldGVkLgor
ICAgICAgICAqIGJ5dGVjb2RlL0luc3RydWN0aW9uLmg6CisgICAgICAgICogYnl0ZWNvZGUvVmFy
aWFibGVXYXRjaHBvaW50U2V0LmNwcDoKKyAgICAgICAgKEpTQzo6VmFyaWFibGVXYXRjaHBvaW50
U2V0Ojpub3RpZnlXcml0ZSk6CisgICAgICAgIChKU0M6OlZhcmlhYmxlV3JpdGVGaXJlRGV0YWls
OjpkdW1wKTogRGVsZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9WYXJpYWJsZVdhdGNocG9pbnRT
ZXQuaDoKKyAgICAgICAgKEpTQzo6VmFyaWFibGVXYXRjaHBvaW50U2V0OjpWYXJpYWJsZVdhdGNo
cG9pbnRTZXQpOgorICAgICAgICAoSlNDOjpWYXJpYWJsZVdhdGNocG9pbnRTZXQ6Om5lZWRUb0Zp
bmFsaXplKToKKyAgICAgICAgKEpTQzo6VmFyaWFibGVXYXRjaHBvaW50U2V0OjpmaW5hbGl6ZVVu
Y29uZGl0aW9uYWxseSk6CisgICAgICAgIChKU0M6OlZhcmlhYmxlV3JpdGVGaXJlRGV0YWlsOjpW
YXJpYWJsZVdyaXRlRmlyZURldGFpbCk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUvVmFy
aWFibGVXYXRjaHBvaW50U2V0SW5saW5lcy5oOgorICAgICAgICAoSlNDOjpWYXJpYWJsZVdhdGNo
cG9pbnRTZXQ6Om5vdGlmeVdyaXRlKToKKyAgICAgICAgKiBieXRlY29kZS9WYXJpYWJsZVdyaXRl
RmlyZURldGFpbC5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpWYXJpYWJsZVdyaXRlRmlyZURl
dGFpbDo6ZHVtcCk6CisgICAgICAgICogYnl0ZWNvZGUvVmFyaWFibGVXcml0ZUZpcmVEZXRhaWwu
aDogQWRkZWQuCisgICAgICAgIChKU0M6OlZhcmlhYmxlV3JpdGVGaXJlRGV0YWlsOjpWYXJpYWJs
ZVdyaXRlRmlyZURldGFpbCk6CisgICAgICAgICogYnl0ZWNvZGUvV2F0Y2hwb2ludC5oOgorICAg
ICAgICAoSlNDOjpXYXRjaHBvaW50U2V0OjpzdGFydFdhdGNoaW5nKToKKyAgICAgICAgKEpTQzo6
V2F0Y2hwb2ludFNldDo6ZmlyZUFsbCk6CisgICAgICAgIChKU0M6OldhdGNocG9pbnRTZXQ6OnRv
dWNoKToKKyAgICAgICAgKEpTQzo6V2F0Y2hwb2ludFNldDo6aW52YWxpZGF0ZSk6CisgICAgICAg
IChKU0M6OklubGluZVdhdGNocG9pbnRTZXQ6OnRvdWNoKToKKyAgICAgICAgKiBieXRlY29tcGls
ZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRv
cjo6Qnl0ZWNvZGVHZW5lcmF0b3IpOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6
ZW1pdFJlc29sdmVTY29wZSk6CisgICAgICAgICogZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJ
bmxpbmVzLmg6CisgICAgICAgIChKU0M6OkRGRzo6QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFj
dFN0YXRlVHlwZT46OmV4ZWN1dGVFZmZlY3RzKToKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQ
YXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpnZXQpOgorICAg
ICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpnZXRTY29wZSk6CisgICAgICAgIChKU0M6
OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2spOgorICAgICAgICAqIGRmZy9ERkdDYXBh
YmlsaXRpZXMuY3BwOgorICAgICAgICAoSlNDOjpERkc6OmNhcGFiaWxpdHlMZXZlbCk6CisgICAg
ICAgICogZGZnL0RGR0Nsb2JiZXJpemUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpjbG9iYmVyaXpl
KToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguY3BwOgorICAgICAgICAoSlNDOjpERkc6OkdyYXBo
OjpkdW1wKToKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6dHJ5R2V0Q29uc3RhbnRDbG9zdXJl
VmFyKToKKyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6
Omhhc1dhdGNocG9pbnRTZXQpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OndhdGNocG9pbnRT
ZXQpOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc1ZhcmlhYmxlV2F0Y2hwb2ludFNldCk6
IERlbGV0ZWQuCisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6dmFyaWFibGVXYXRjaHBvaW50U2V0
KTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHT3BlcmF0aW9ucy5jcHA6CisgICAgICAgICog
ZGZnL0RGR09wZXJhdGlvbnMuaDoKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuY3Bw
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlTmV3RnVuY3Rpb24p
OgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlTm90aWZ5V3JpdGUp
OgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oOgorICAgICAgICAoSlNDOjpERkc6
OlNwZWN1bGF0aXZlSklUOjpjYWxsT3BlcmF0aW9uKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3Vs
YXRpdmVKSVQzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAg
KEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RGR1Zh
cmFyZ3NGb3J3YXJkaW5nUGhhc2UuY3BwOgorICAgICAgICAqIGZ0bC9GVExJbnRyaW5zaWNSZXBv
c2l0b3J5Lmg6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcDoKKyAgICAgICAg
KEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZU5vdGlmeVdyaXRlKToKKyAgICAgICAg
KiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHA6CisgICAgICAgIChKU0M6OlN0YWNrRnJhbWU6
OmZyaWVuZGx5U291cmNlVVJMKToKKyAgICAgICAgKEpTQzo6U3RhY2tGcmFtZTo6ZnJpZW5kbHlG
dW5jdGlvbk5hbWUpOgorICAgICAgICAqIGludGVycHJldGVyL0ludGVycHJldGVyLmg6CisgICAg
ICAgIChKU0M6OlN0YWNrRnJhbWU6OmZyaWVuZGx5U291cmNlVVJMKTogRGVsZXRlZC4KKyAgICAg
ICAgKEpTQzo6U3RhY2tGcmFtZTo6ZnJpZW5kbHlGdW5jdGlvbk5hbWUpOiBEZWxldGVkLgorICAg
ICAgICAqIGppdC9KSVQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXROb3RpZnlXcml0ZSk6
CisgICAgICAgIChKU0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcyk6CisgICAgICAgICog
aml0L0pJVC5oOgorICAgICAgICAqIGppdC9KSVRPcGNvZGVzLmNwcDoKKyAgICAgICAgKEpTQzo6
SklUOjplbWl0X29wX3RvdWNoX2VudHJ5KTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvSklUT3Bl
cmF0aW9ucy5jcHA6CisgICAgICAgICogaml0L0pJVE9wZXJhdGlvbnMuaDoKKyAgICAgICAgKiBq
aXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRQdXRHbG9i
YWxWYXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRQdXRDbG9zdXJlVmFyKToKKyAgICAgICAg
KEpTQzo6SklUOjplbWl0Tm90aWZ5V3JpdGUpOiBEZWxldGVkLgorICAgICAgICAqIGppdC9KSVRQ
cm9wZXJ0eUFjY2VzczMyXzY0LmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0UHV0R2xvYmFs
VmFyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0UHV0Q2xvc3VyZVZhcik6CisgICAgICAgIChK
U0M6OkpJVDo6ZW1pdE5vdGlmeVdyaXRlKTogRGVsZXRlZC4KKyAgICAgICAgKiBsbGludC9MTElu
dFNsb3dQYXRocy5jcHA6CisgICAgICAgIChKU0M6OkxMSW50OjpMTElOVF9TTE9XX1BBVEhfREVD
TCk6CisgICAgICAgICogbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc206CisgICAgICAgICog
bGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbToKKyAgICAgICAgKiBsbGludC9Mb3dM
ZXZlbEludGVycHJldGVyNjQuYXNtOgorICAgICAgICAqIHJ1bnRpbWUvQ29tbW9uU2xvd1BhdGhz
LmNwcDoKKyAgICAgICAgKEpTQzo6U0xPV19QQVRIX0RFQ0wpOiBEZWxldGVkLgorICAgICAgICAq
IHJ1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmg6CisgICAgICAgICogcnVudGltZS9FeGVjdXRhYmxl
LmNwcDoKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25FeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuKToK
KyAgICAgICAgKEpTQzo6RnVuY3Rpb25FeGVjdXRhYmxlOjpXYXRjaHBvaW50Q2xlYW51cDo6V2F0
Y2hwb2ludENsZWFudXApOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFibGU6OldhdGNo
cG9pbnRDbGVhbnVwOjp+V2F0Y2hwb2ludENsZWFudXApOgorICAgICAgICAoSlNDOjpGdW5jdGlv
bkV4ZWN1dGFibGU6OldhdGNocG9pbnRDbGVhbnVwOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSk6
CisgICAgICAgICogcnVudGltZS9FeGVjdXRhYmxlLmg6CisgICAgICAgIChKU0M6OkZ1bmN0aW9u
RXhlY3V0YWJsZTo6ZnVuY3Rpb25SZWFsbG9jYXRpb25XYXRjaHBvaW50U2V0KToKKyAgICAgICAg
KiBydW50aW1lL0pTQ0lubGluZXMuaDoKKyAgICAgICAgKiBydW50aW1lL0pTRnVuY3Rpb24uY3Bw
OgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpjcmVhdGUpOgorICAgICAgICAqIHJ1bnRpbWUv
SlNGdW5jdGlvbi5oOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpjcmVhdGVXaXRoSW52YWxp
ZGF0ZWRSZWFsbG9jYXRpb25XYXRjaHBvaW50KToKKyAgICAgICAgKEpTQzo6SlNGdW5jdGlvbjo6
Y3JlYXRlSW1wbCk6CisgICAgICAgIChKU0M6OkpTRnVuY3Rpb246OmNyZWF0ZSk6IERlbGV0ZWQu
CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpT
R2xvYmFsT2JqZWN0OjphZGRHbG9iYWxWYXIpOgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVj
dDo6YWRkRnVuY3Rpb24pOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuaDoKKyAg
ICAgICAgKiBydW50aW1lL0pTTGV4aWNhbEVudmlyb25tZW50LmNwcDoKKyAgICAgICAgKEpTQzo6
SlNMZXhpY2FsRW52aXJvbm1lbnQ6OnN5bWJvbFRhYmxlUHV0KToKKyAgICAgICAgKiBydW50aW1l
L0pTU2NvcGUuaDoKKyAgICAgICAgKEpTQzo6UmVzb2x2ZU9wOjpSZXNvbHZlT3ApOgorICAgICAg
ICAqIHJ1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5oOgorICAgICAgICAoSlNDOjpzeW1ib2xU
YWJsZVB1dCk6CisgICAgICAgIChKU0M6OnN5bWJvbFRhYmxlUHV0V2l0aEF0dHJpYnV0ZXMpOgor
ICAgICAgICAqIHJ1bnRpbWUvUHV0UHJvcGVydHlTbG90Lmg6CisgICAgICAgICogcnVudGltZS9T
eW1ib2xUYWJsZS5jcHA6CisgICAgICAgIChKU0M6OlN5bWJvbFRhYmxlRW50cnk6OnByZXBhcmVU
b1dhdGNoKToKKyAgICAgICAgKEpTQzo6U3ltYm9sVGFibGU6OlN5bWJvbFRhYmxlKToKKyAgICAg
ICAgKEpTQzo6U3ltYm9sVGFibGU6OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpTeW1i
b2xUYWJsZUVudHJ5OjppbmZlcnJlZFZhbHVlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3lt
Ym9sVGFibGVFbnRyeTo6bm90aWZ5V3JpdGVTbG93KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6
U3ltYm9sVGFibGU6OldhdGNocG9pbnRDbGVhbnVwOjpXYXRjaHBvaW50Q2xlYW51cCk6IERlbGV0
ZWQuCisgICAgICAgIChKU0M6OlN5bWJvbFRhYmxlOjpXYXRjaHBvaW50Q2xlYW51cDo6fldhdGNo
cG9pbnRDbGVhbnVwKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3ltYm9sVGFibGU6OldhdGNo
cG9pbnRDbGVhbnVwOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSk6IERlbGV0ZWQuCisgICAgICAg
ICogcnVudGltZS9TeW1ib2xUYWJsZS5oOgorICAgICAgICAoSlNDOjpTeW1ib2xUYWJsZUVudHJ5
OjpkaXNhYmxlV2F0Y2hpbmcpOgorICAgICAgICAoSlNDOjpTeW1ib2xUYWJsZUVudHJ5Ojp3YXRj
aHBvaW50U2V0KToKKyAgICAgICAgKEpTQzo6U3ltYm9sVGFibGVFbnRyeTo6bm90aWZ5V3JpdGUp
OiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvVHlwZVByb2ZpbGVyLmNwcDoKKyAgICAgICAg
KiB0ZXN0cy9zdHJlc3MvaW5mZXItdW5pbml0aWFsaXplZC1jbG9zdXJlLXZhci5qczogQWRkZWQu
CisgICAgICAgICogdGVzdHMvc3RyZXNzL3NpbmdsZXRvbi1zY29wZS10aGVuLW92ZXJ3cml0ZS5q
czogQWRkZWQuCisgICAgICAgICogdGVzdHMvc3RyZXNzL3NpbmdsZXRvbi1zY29wZS10aGVuLXJl
YWxsb2MtYW5kLW92ZXJ3cml0ZS5qczogQWRkZWQuCisgICAgICAgICogdGVzdHMvc3RyZXNzL3Np
bmdsZXRvbi1zY29wZS10aGVuLXJlYWxsb2MuanM6IEFkZGVkLgorCiAyMDE1LTA0LTA3ICBGaWxp
cCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgQ29uc3RhbnQgZm9sZGluZyBv
ZiB0eXBlZCBhcnJheSBwcm9wZXJ0aWVzIHNob3VsZCBiZSBoYW5kbGVkIGJ5IEFJIHJhdGhlciB0
aGFuIHN0cmVuZ3RoIHJlZHVjdGlvbgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtl
TGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3Rz
LnR4dAkocmV2aXNpb24gMTgyNDk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlz
dHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xMDYsNiArMTA2LDcgQEAgc2V0KEphdmFTY3JpcHRD
b3JlX1NPVVJDRVMKICAgICBieXRlY29kZS9VbmxpbmtlZEluc3RydWN0aW9uU3RyZWFtLmNwcAog
ICAgIGJ5dGVjb2RlL1ZhbHVlUmVjb3ZlcnkuY3BwCiAgICAgYnl0ZWNvZGUvVmFyaWFibGVXYXRj
aHBvaW50U2V0LmNwcAorICAgIGJ5dGVjb2RlL1ZhcmlhYmxlV3JpdGVGaXJlRGV0YWlsLmNwcAog
ICAgIGJ5dGVjb2RlL1ZpcnR1YWxSZWdpc3Rlci5jcHAKICAgICBieXRlY29kZS9XYXRjaHBvaW50
LmNwcAogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJv
ai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oJKHJldmlz
aW9uIDE4MjQ5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hw
cm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTM1Myw2ICszNTMs
NyBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcVW5saW5rZWRJbnN0cnVj
dGlvblN0cmVhbS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRlY29kZVxW
YWx1ZVJlY292ZXJ5LmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2Rl
XFZhcmlhYmxlV2F0Y2hwb2ludFNldC5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxieXRlY29kZVxWYXJpYWJsZVdyaXRlRmlyZURldGFpbC5jcHAiIC8+CiAgICAgPENsQ29tcGls
ZSBJbmNsdWRlPSIuLlxieXRlY29kZVxWaXJ0dWFsUmVnaXN0ZXIuY3BwIiAvPgogICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcV2F0Y2hwb2ludC5jcHAiIC8+CiAgICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxieXRlY29tcGlsZXJcQnl0ZWNvZGVHZW5lcmF0b3IuY3BwIiAvPgpA
QCAtMTAwNSw2ICsxMDA2LDcgQEAKICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2Rl
XFZhbHVlUHJvZmlsZS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVc
VmFsdWVSZWNvdmVyeS5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVc
VmFyaWFibGVXYXRjaHBvaW50U2V0LmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxi
eXRlY29kZVxWYXJpYWJsZVdyaXRlRmlyZURldGFpbC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5cYnl0ZWNvZGVcVmlydHVhbFJlZ2lzdGVyLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJ
bmNsdWRlPSIuLlxieXRlY29kZVxXYXRjaHBvaW50LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNs
dWRlPSIuLlxieXRlY29tcGlsZXJcQnl0ZWNvZGVHZW5lcmF0b3IuaCIgLz4KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxODI0OTgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2lu
ZyBjb3B5KQpAQCAtMzgzLDYgKzM4Myw4IEBACiAJCTBGNkIxQ0M2MTg2MkM0NzgwMDg0NUQ5NyAv
KiBGVExVbndpbmRJbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSAwRjZCMUNDMjE4NjJDNDc4MDA4NDVEOTcgLyogRlRMVW53aW5kSW5mby5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNkIxQ0M5MTg2
NDFERjgwMDg0NUQ5NyAvKiBBcml0eUNoZWNrRmFpbFJldHVyblRodW5rcy5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjZCMUNDNzE4NjQxREY4MDA4
NDVEOTcgLyogQXJpdHlDaGVja0ZhaWxSZXR1cm5UaHVua3MuY3BwICovOyB9OwogCQkwRjZCMUND
QTE4NjQxREY4MDA4NDVEOTcgLyogQXJpdHlDaGVja0ZhaWxSZXR1cm5UaHVua3MuaCBpbiBIZWFk
ZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNkIxQ0M4MTg2NDFERjgw
MDg0NUQ5NyAvKiBBcml0eUNoZWNrRmFpbFJldHVyblRodW5rcy5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGNkM3MzUwMUFDOUY5OUYwMEJFMTY4
MiAvKiBWYXJpYWJsZVdyaXRlRmlyZURldGFpbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjZDNzM0RTFBQzlGOTlGMDBCRTE2ODIgLyogVmFyaWFi
bGVXcml0ZUZpcmVEZXRhaWwuY3BwICovOyB9OworCQkwRjZDNzM1MTFBQzlGOTlGMDBCRTE2ODIg
LyogVmFyaWFibGVXcml0ZUZpcmVEZXRhaWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGNkM3MzRGMUFDOUY5OUYwMEJFMTY4MiAvKiBWYXJpYWJsZVdy
aXRlRmlyZURldGFpbC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCTBGNkU4NDVBMTkwMzBCRUYwMDU2Mjc0MSAvKiBERkdWYXJpYWJsZUFjY2Vzc0Rh
dGEuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2
RTg0NTkxOTAzMEJFRjAwNTYyNzQxIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YS5jcHAgKi87IH07
CiAJCTBGNkZDNzUwMTk2MTEwQTgwMEUxRDAyRCAvKiBDb21wbGV4R2V0U3RhdHVzLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNkZDNzRFMTk2MTEw
QTgwMEUxRDAyRCAvKiBDb21wbGV4R2V0U3RhdHVzLmNwcCAqLzsgfTsKIAkJMEY2RkM3NTExOTYx
MTBBODAwRTFEMDJEIC8qIENvbXBsZXhHZXRTdGF0dXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNkZDNzRGMTk2MTEwQTgwMEUxRDAyRCAvKiBDb21w
bGV4R2V0U3RhdHVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKQEAgLTIxMDAsNiArMjEwMiw4IEBACiAJCTBGNkIxQ0MyMTg2MkM0NzgwMDg0NUQ5NyAv
KiBGVExVbndpbmRJbmZvLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTFVu
d2luZEluZm8uaDsgcGF0aCA9IGZ0bC9GVExVbndpbmRJbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGNkIxQ0M3MTg2NDFERjgwMDg0NUQ5NyAvKiBBcml0eUNoZWNrRmFpbFJl
dHVyblRodW5rcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBcml0
eUNoZWNrRmFpbFJldHVyblRodW5rcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGNkIxQ0M4MTg2NDFERjgwMDg0NUQ5NyAvKiBBcml0eUNoZWNrRmFpbFJldHVyblRodW5rcy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBcml0eUNoZWNrRmFpbFJldHVyblRo
dW5rcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjZDNzM0RTFBQzlGOTlGMDBC
RTE2ODIgLyogVmFyaWFibGVXcml0ZUZpcmVEZXRhaWwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gVmFyaWFibGVXcml0ZUZpcmVEZXRhaWwuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQkwRjZDNzM0RjFBQzlGOTlGMDBCRTE2ODIgLyogVmFyaWFibGVX
cml0ZUZpcmVEZXRhaWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmFyaWFi
bGVXcml0ZUZpcmVEZXRhaWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2RTg0
NTkxOTAzMEJFRjAwNTYyNzQxIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdWYXJpYWJsZUFjY2Vzc0RhdGEuY3BwOyBw
YXRoID0gZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCTBGNkZDNzRFMTk2MTEwQTgwMEUxRDAyRCAvKiBDb21wbGV4R2V0U3RhdHVzLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvbXBsZXhHZXRTdGF0dXMu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjZGQzc0RjE5NjExMEE4MDBFMUQw
MkQgLyogQ29tcGxleEdldFN0YXR1cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGgg
PSBDb21wbGV4R2V0U3RhdHVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01Mjgw
LDYgKzUyODQsOCBAQAogCQkJCTBGQ0E5MTEyMTk1RTY2QTAwMDQyNjQzOCAvKiBWYXJpYWJsZVdh
dGNocG9pbnRTZXQuY3BwICovLAogCQkJCTBGOTE4MUM2MTg0MTVDQTUwMDU3QjY2OSAvKiBWYXJp
YWJsZVdhdGNocG9pbnRTZXQuaCAqLywKIAkJCQlGRTUyNDhGODE5MTQ0MkQ5MDBCN0ZERTQgLyog
VmFyaWFibGVXYXRjaHBvaW50U2V0SW5saW5lcy5oICovLAorCQkJCTBGNkM3MzRFMUFDOUY5OUYw
MEJFMTY4MiAvKiBWYXJpYWJsZVdyaXRlRmlyZURldGFpbC5jcHAgKi8sCisJCQkJMEY2QzczNEYx
QUM5Rjk5RjAwQkUxNjgyIC8qIFZhcmlhYmxlV3JpdGVGaXJlRGV0YWlsLmggKi8sCiAJCQkJMEYy
MEMyNTgxQTgwMTNBQjAwREEzMjI5IC8qIFZpcnR1YWxSZWdpc3Rlci5jcHAgKi8sCiAJCQkJMEY0
MjZBNDYxNDYwQ0JBQjAwMTMxRjhGIC8qIFZpcnR1YWxSZWdpc3Rlci5oICovLAogCQkJCTBGOTE5
RDIyMTU4NTNDREUwMDRBNEU3RCAvKiBXYXRjaHBvaW50LmNwcCAqLywKQEAgLTYzNTQsNiArNjM2
MCw3IEBACiAJCQkJQTcwOUYyRjAxN0EwQUMwNDAwNTEyRTk4IC8qIFNsb3dQYXRoQ2FsbC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJOTMzMDQwMDQwRTZBNzQ5NDAwNzg2RTZBIC8qIFNtYWxsU3RyaW5n
cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NjQwRTE2RjVDRDAwQjM0NDYwIC8qIFNvdXJj
ZUNvZGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGNkM3MzUxMUFDOUY5OUYwMEJFMTY4MiAvKiBW
YXJpYWJsZVdyaXRlRmlyZURldGFpbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NjMwRTE2
RjVDRDAwQjM0NDYwIC8qIFNvdXJjZVByb3ZpZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk3MEVD
MEVDMzFBQTBEN0RBMDBCNkFBRkEgLyogSlNTdHJpbmdJdGVyYXRvci5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJRTQ5REMxNkMxMkVGMjk0RTAwMTg0QTFGIC8qIFNvdXJjZVByb3ZpZGVyQ2FjaGUuaCBp
biBIZWFkZXJzICovLApAQCAtNjk2Myw2ICs2OTcwLDcgQEAKIAkJCQlBNzdGMTgyMTE2NDA4OEIy
MDA2NDBBNDcgLyogQ29kZUNhY2hlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGOEY5NDQ2MTY2
NzY0RjEwMEQ2MTk3MSAvKiBDb2RlT3JpZ2luLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2QjU4
MjY3MTREMjc5NkMwMEE5QzMwNiAvKiBDb2RlUHJvZmlsZS5jcHAgaW4gU291cmNlcyAqLywKKwkJ
CQkwRjZDNzM1MDFBQzlGOTlGMDBCRTE2ODIgLyogVmFyaWFibGVXcml0ZUZpcmVEZXRhaWwuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJODZCNTgyNjkxNEQyNzk3MDAwQTlDMzA2IC8qIENvZGVQcm9m
aWxpbmcuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY4Rjk0M0MxNjY3NjMxMzAwRDYxOTcxIC8q
IENvZGVTcGVjaWFsaXphdGlvbktpbmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY4Rjk0NDIx
NjY3NjMzNTAwRDYxOTcxIC8qIENvZGVUeXBlLmNwcCBpbiBTb3VyY2VzICovLApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5qc29uCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QuanNvbgkocmV2
aXNpb24gMTgyNDk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2Rl
TGlzdC5qc29uCSh3b3JraW5nIGNvcHkpCkBAIC02LDcgKzYsNiBAQAogICAgICAgICAgICAgeyAi
bmFtZSIgOiAib3BfZW50ZXIiLCAibGVuZ3RoIiA6IDEgfSwKICAgICAgICAgICAgIHsgIm5hbWUi
IDogIm9wX2NyZWF0ZV9sZXhpY2FsX2Vudmlyb25tZW50IiwgImxlbmd0aCIgOiAzIH0sCiAgICAg
ICAgICAgICB7ICJuYW1lIiA6ICJvcF9nZXRfc2NvcGUiLCAibGVuZ3RoIiA6IDIgfSwKLSAgICAg
ICAgICAgIHsgIm5hbWUiIDogIm9wX3RvdWNoX2VudHJ5IiwgImxlbmd0aCIgOiAxIH0sCiAgICAg
ICAgICAgICB7ICJuYW1lIiA6ICJvcF9jcmVhdGVfZGlyZWN0X2FyZ3VtZW50cyIsICJsZW5ndGgi
IDogMiB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfY3JlYXRlX3Njb3BlZF9hcmd1bWVu
dHMiLCAibGVuZ3RoIiA6IDMgfSwKICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX2NyZWF0ZV9v
dXRfb2ZfYmFuZF9hcmd1bWVudHMiLCAibGVuZ3RoIiA6IDIgfSwKQEAgLTEwMyw3ICsxMDIsNyBA
QAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfY29uc3RydWN0X3ZhcmFyZ3MiLCAibGVuZ3Ro
IiA6IDkgfSwKICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX3N0cmNhdCIsICJsZW5ndGgiIDog
NCB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfdG9fcHJpbWl0aXZlIiwgImxlbmd0aCIg
OiAzIH0sCi0gICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9yZXNvbHZlX3Njb3BlIiwgImxlbmd0
aCIgOiA3IH0sCisgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9yZXNvbHZlX3Njb3BlIiwgImxl
bmd0aCIgOiA2IH0sCiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9nZXRfZnJvbV9zY29wZSIs
ICJsZW5ndGgiIDogOCB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfcHV0X3RvX3Njb3Bl
IiwgImxlbmd0aCIgOiA3IH0sCiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9nZXRfZnJvbV9h
cmd1bWVudHMiLCAibGVuZ3RoIiA6IDUgfSwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9CeXRlY29kZVVzZURlZi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9CeXRlY29kZVVzZURlZi5oCShyZXZpc2lvbiAxODI0OTgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuaAkod29ya2luZyBjb3B5
KQpAQCAtNTAsNyArNTAsNiBAQCB2b2lkIGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVPZmZzZXQoCiAg
ICAgY2FzZSBvcF9uZXdfb2JqZWN0OgogICAgIGNhc2Ugb3BfZW50ZXI6CiAgICAgY2FzZSBvcF9j
YXRjaDoKLSAgICBjYXNlIG9wX3RvdWNoX2VudHJ5OgogICAgIGNhc2Ugb3BfcHJvZmlsZV9jb250
cm9sX2Zsb3c6CiAgICAgY2FzZSBvcF9jcmVhdGVfZGlyZWN0X2FyZ3VtZW50czoKICAgICBjYXNl
IG9wX2NyZWF0ZV9vdXRfb2ZfYmFuZF9hcmd1bWVudHM6CkBAIC0yNzgsNyArMjc3LDYgQEAgdm9p
ZCBjb21wdXRlRGVmc0ZvckJ5dGVjb2RlT2Zmc2V0KENvZGVCbAogICAgIGNhc2Ugb3BfcHV0X2J5
X2luZGV4OgogICAgIGNhc2Ugb3BfcHJvZmlsZV90eXBlOgogICAgIGNhc2Ugb3BfcHJvZmlsZV9j
b250cm9sX2Zsb3c6Ci0gICAgY2FzZSBvcF90b3VjaF9lbnRyeToKICAgICBjYXNlIG9wX3B1dF90
b19hcmd1bWVudHM6CiAjZGVmaW5lIExMSU5UX0hFTFBFUl9PUENPREVTKG9wY29kZSwgbGVuZ3Ro
KSBjYXNlIG9wY29kZToKICAgICAgICAgRk9SX0VBQ0hfTExJTlRfT1BDT0RFX0VYVEVOU0lPTihM
TElOVF9IRUxQRVJfT1BDT0RFUyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMTgyNDk4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc1OCwxMCAr
NzU4LDYgQEAgdm9pZCBDb2RlQmxvY2s6OmR1bXBCeXRlY29kZSgKICAgICAgICAgICAgIHByaW50
TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImVudGVyIik7CiAgICAgICAg
ICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBjYXNlIG9wX3RvdWNoX2VudHJ5OiB7Ci0g
ICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJ0
b3VjaF9lbnRyeSIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KICAgICAgICAgY2Fz
ZSBvcF9jcmVhdGVfbGV4aWNhbF9lbnZpcm9ubWVudDogewogICAgICAgICAgICAgaW50IHIwID0g
KCsraXQpLT51Lm9wZXJhbmQ7CiAgICAgICAgICAgICBpbnQgcjEgPSAoKytpdCktPnUub3BlcmFu
ZDsKQEAgLTE1MDksNyArMTUwNSw2IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wQnl0ZWNvZGUoCiAg
ICAgICAgICAgICBvdXQucHJpbnRmKCIlcywgJXMsICVzLCAldTwlc3wlcz4sICVkIiwgcmVnaXN0
ZXJOYW1lKHIwKS5kYXRhKCksIHJlZ2lzdGVyTmFtZShzY29wZSkuZGF0YSgpLCBpZE5hbWUoaWQw
LCBpZGVudGlmaWVyKGlkMCkpLmRhdGEoKSwKICAgICAgICAgICAgICAgICBtb2RlQW5kVHlwZS5v
cGVyYW5kKCksIHJlc29sdmVNb2RlTmFtZShtb2RlQW5kVHlwZS5tb2RlKCkpLCByZXNvbHZlVHlw
ZU5hbWUobW9kZUFuZFR5cGUudHlwZSgpKSwKICAgICAgICAgICAgICAgICBkZXB0aCk7Ci0gICAg
ICAgICAgICArK2l0OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgY2Fz
ZSBvcF9nZXRfZnJvbV9zY29wZTogewpAQCAtMTk1Niw4ICsxOTUxLDYgQEAgQ29kZUJsb2NrOjpD
b2RlQmxvY2soU2NyaXB0RXhlY3V0YWJsZSogbwogICAgICAgICAgICAgUmVzb2x2ZU9wIG9wID0g
SlNTY29wZTo6YWJzdHJhY3RSZXNvbHZlKG1fZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIG5l
ZWRzQWN0aXZhdGlvbigpLCBzY29wZSwgaWRlbnQsIEdldCwgdHlwZSk7CiAgICAgICAgICAgICBp
bnN0cnVjdGlvbnNbaSArIDRdLnUub3BlcmFuZCA9IG9wLnR5cGU7CiAgICAgICAgICAgICBpbnN0
cnVjdGlvbnNbaSArIDVdLnUub3BlcmFuZCA9IG9wLmRlcHRoOwotICAgICAgICAgICAgaWYgKG9w
LmxleGljYWxFbnZpcm9ubWVudCkKLSAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIDZd
LnUubGV4aWNhbEVudmlyb25tZW50LnNldCgqdm0oKSwgb3duZXJFeGVjdXRhYmxlLCBvcC5sZXhp
Y2FsRW52aXJvbm1lbnQpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIApAQCAtMjAw
MSw3ICsxOTk0LDcgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soU2NyaXB0RXhlY3V0YWJsZSogbwog
ICAgICAgICAgICAgICAgICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX3N5bWJvbFRh
YmxlLT5tX2xvY2spOwogICAgICAgICAgICAgICAgICAgICBTeW1ib2xUYWJsZTo6TWFwOjppdGVy
YXRvciBpdGVyID0gbV9zeW1ib2xUYWJsZS0+ZmluZChsb2NrZXIsIHVpZCk7CiAgICAgICAgICAg
ICAgICAgICAgIEFTU0VSVChpdGVyICE9IG1fc3ltYm9sVGFibGUtPmVuZChsb2NrZXIpKTsKLSAg
ICAgICAgICAgICAgICAgICAgaXRlci0+dmFsdWUucHJlcGFyZVRvV2F0Y2goc3ltYm9sVGFibGUo
KSk7CisgICAgICAgICAgICAgICAgICAgIGl0ZXItPnZhbHVlLnByZXBhcmVUb1dhdGNoKCk7CiAg
ICAgICAgICAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgNV0udS53YXRjaHBvaW50U2V0ID0g
aXRlci0+dmFsdWUud2F0Y2hwb2ludFNldCgpOwogICAgICAgICAgICAgICAgIH0gZWxzZQogICAg
ICAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIDVdLnUud2F0Y2hwb2ludFNldCA9IG51
bGxwdHI7CkBAIC0yNTQ1LDE1ICsyNTM4LDYgQEAgdm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplVW5j
b25kaXRpb25hbGx5KAogICAgICAgICAgICAgICAgIGN1ckluc3RydWN0aW9uWzNdLnUudG9UaGlz
U3RhdHVzID0gbWVyZ2UoCiAgICAgICAgICAgICAgICAgICAgIGN1ckluc3RydWN0aW9uWzNdLnUu
dG9UaGlzU3RhdHVzLCBUb1RoaXNDbGVhcmVkQnlHQyk7CiAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICBjYXNlIG9wX3Jlc29sdmVfc2NvcGU6IHsKLSAgICAgICAgICAgICAgICBX
cml0ZUJhcnJpZXJCYXNlPEpTTGV4aWNhbEVudmlyb25tZW50PiYgbGV4aWNhbEVudmlyb25tZW50
ID0gY3VySW5zdHJ1Y3Rpb25bNl0udS5sZXhpY2FsRW52aXJvbm1lbnQ7Ci0gICAgICAgICAgICAg
ICAgaWYgKCFsZXhpY2FsRW52aXJvbm1lbnQgfHwgSGVhcDo6aXNNYXJrZWQobGV4aWNhbEVudmly
b25tZW50LmdldCgpKSkKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAg
ICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1IoKSkKLSAgICAgICAgICAgICAgICAgICAgZGF0YUxv
Z0YoIkNsZWFyaW5nIGRlYWQgbGV4aWNhbEVudmlyb25tZW50ICVwLlxuIiwgbGV4aWNhbEVudmly
b25tZW50LmdldCgpKTsKLSAgICAgICAgICAgICAgICBsZXhpY2FsRW52aXJvbm1lbnQuY2xlYXIo
KTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNh
c2Ugb3BfZ2V0X2Zyb21fc2NvcGU6CiAgICAgICAgICAgICBjYXNlIG9wX3B1dF90b19zY29wZTog
ewogICAgICAgICAgICAgICAgIFJlc29sdmVNb2RlQW5kVHlwZSBtb2RlQW5kVHlwZSA9CkBAIC0z
ODE1LDYgKzM3OTksMTggQEAgU3RyaW5nIENvZGVCbG9jazo6bmFtZUZvclJlZ2lzdGVyKFZpcnR1
YQogICAgIHJldHVybiAiIjsKIH0KIAorVmFsdWVQcm9maWxlKiBDb2RlQmxvY2s6OnZhbHVlUHJv
ZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KGludCBieXRlY29kZU9mZnNldCkKK3sKKyAgICBWYWx1ZVBy
b2ZpbGUqIHJlc3VsdCA9IGJpbmFyeVNlYXJjaDxWYWx1ZVByb2ZpbGUsIGludD4oCisgICAgICAg
IG1fdmFsdWVQcm9maWxlcywgbV92YWx1ZVByb2ZpbGVzLnNpemUoKSwgYnl0ZWNvZGVPZmZzZXQs
CisgICAgICAgIGdldFZhbHVlUHJvZmlsZUJ5dGVjb2RlT2Zmc2V0PFZhbHVlUHJvZmlsZT4pOwor
ICAgIEFTU0VSVChyZXN1bHQtPm1fYnl0ZWNvZGVPZmZzZXQgIT0gLTEpOworICAgIEFTU0VSVChp
bnN0cnVjdGlvbnMoKVtieXRlY29kZU9mZnNldCArIG9wY29kZUxlbmd0aCgKKyAgICAgICAgbV92
bS0+aW50ZXJwcmV0ZXItPmdldE9wY29kZUlEKAorICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKClb
Ynl0ZWNvZGVPZmZzZXRdLnUub3Bjb2RlKSkgLSAxXS51LnByb2ZpbGUgPT0gcmVzdWx0KTsKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCiB2b2lkIENvZGVCbG9jazo6dmFsaWRhdGUoKQogewogICAg
IEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcyBsaXZlbmVzcyh0aGlzKTsgLy8gQ29tcHV0ZSBkaXJl
Y3RseSBmcm9tIHNjcmF0Y2ggc28gaXQgZG9lc24ndCBlZmZlY3QgQ29kZUJsb2NrIGZvb3Rwcmlu
dC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJl
dmlzaW9uIDE4MjQ5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxv
Y2suaAkod29ya2luZyBjb3B5KQpAQCAtMzg2LDE3ICszODYsNyBAQCBwdWJsaWM6CiAKICAgICB1
bnNpZ25lZCBudW1iZXJPZlZhbHVlUHJvZmlsZXMoKSB7IHJldHVybiBtX3ZhbHVlUHJvZmlsZXMu
c2l6ZSgpOyB9CiAgICAgVmFsdWVQcm9maWxlKiB2YWx1ZVByb2ZpbGUoaW50IGluZGV4KSB7IHJl
dHVybiAmbV92YWx1ZVByb2ZpbGVzW2luZGV4XTsgfQotICAgIFZhbHVlUHJvZmlsZSogdmFsdWVQ
cm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQoaW50IGJ5dGVjb2RlT2Zmc2V0KQotICAgIHsKLSAgICAg
ICAgVmFsdWVQcm9maWxlKiByZXN1bHQgPSBiaW5hcnlTZWFyY2g8VmFsdWVQcm9maWxlLCBpbnQ+
KAotICAgICAgICAgICAgbV92YWx1ZVByb2ZpbGVzLCBtX3ZhbHVlUHJvZmlsZXMuc2l6ZSgpLCBi
eXRlY29kZU9mZnNldCwKLSAgICAgICAgICAgIGdldFZhbHVlUHJvZmlsZUJ5dGVjb2RlT2Zmc2V0
PFZhbHVlUHJvZmlsZT4pOwotICAgICAgICBBU1NFUlQocmVzdWx0LT5tX2J5dGVjb2RlT2Zmc2V0
ICE9IC0xKTsKLSAgICAgICAgQVNTRVJUKGluc3RydWN0aW9ucygpW2J5dGVjb2RlT2Zmc2V0ICsg
b3Bjb2RlTGVuZ3RoKAotICAgICAgICAgICAgbV92bS0+aW50ZXJwcmV0ZXItPmdldE9wY29kZUlE
KAotICAgICAgICAgICAgICAgIGluc3RydWN0aW9ucygpW2J5dGVjb2RlT2Zmc2V0XS51Lm9wY29k
ZSkpIC0gMV0udS5wcm9maWxlID09IHJlc3VsdCk7Ci0gICAgICAgIHJldHVybiByZXN1bHQ7Ci0g
ICAgfQorICAgIFZhbHVlUHJvZmlsZSogdmFsdWVQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQoaW50
IGJ5dGVjb2RlT2Zmc2V0KTsKICAgICBTcGVjdWxhdGVkVHlwZSB2YWx1ZVByb2ZpbGVQcmVkaWN0
aW9uRm9yQnl0ZWNvZGVPZmZzZXQoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYgbG9ja2VyLCBp
bnQgYnl0ZWNvZGVPZmZzZXQpCiAgICAgewogICAgICAgICByZXR1cm4gdmFsdWVQcm9maWxlRm9y
Qnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQpLT5jb21wdXRlVXBkYXRlZFByZWRpY3Rpb24o
bG9ja2VyKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2lu
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9y
aWdpbi5jcHAJKHJldmlzaW9uIDE4MjQ5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlT3JpZ2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQxLDYgKzE0MSwxOCBAQCB2
b2lkIENvZGVPcmlnaW46OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlCiAgICAgZHVtcChvdXQpOwog
fQogCitKU0Z1bmN0aW9uKiBJbmxpbmVDYWxsRnJhbWU6OmNhbGxlZUNvbnN0YW50KCkgY29uc3QK
K3sKKyAgICBpZiAoY2FsbGVlUmVjb3ZlcnkuaXNDb25zdGFudCgpKQorICAgICAgICByZXR1cm4g
anNDYXN0PEpTRnVuY3Rpb24qPihjYWxsZWVSZWNvdmVyeS5jb25zdGFudCgpKTsKKyAgICByZXR1
cm4gbnVsbHB0cjsKK30KKwordm9pZCBJbmxpbmVDYWxsRnJhbWU6OnZpc2l0QWdncmVnYXRlKFNs
b3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIHZpc2l0b3IuYXBwZW5kKCZleGVjdXRhYmxlKTsK
K30KKwogSlNGdW5jdGlvbiogSW5saW5lQ2FsbEZyYW1lOjpjYWxsZWVGb3JDYWxsRnJhbWUoRXhl
Y1N0YXRlKiBleGVjKSBjb25zdAogewogICAgIHJldHVybiBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNh
bGxlZVJlY292ZXJ5LnJlY292ZXIoZXhlYykpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0NvZGVPcmlnaW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5oCShyZXZpc2lvbiAxODI0OTgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw3
ICsyOCw2IEBACiAKICNpbmNsdWRlICJDb2RlQmxvY2tIYXNoLmgiCiAjaW5jbHVkZSAiQ29kZVNw
ZWNpYWxpemF0aW9uS2luZC5oIgotI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKICNpbmNsdWRlICJW
YWx1ZVJlY292ZXJ5LmgiCiAjaW5jbHVkZSAiV3JpdGVCYXJyaWVyLmgiCiAjaW5jbHVkZSA8d3Rm
L0JpdFZlY3Rvci5oPgpAQCAtMjA3LDE3ICsyMDYsOCBAQCBzdHJ1Y3QgSW5saW5lQ2FsbEZyYW1l
IHsKICAgICAKICAgICBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIHNwZWNpYWxpemF0aW9uS2luZCgp
IGNvbnN0IHsgcmV0dXJuIHNwZWNpYWxpemF0aW9uS2luZEZvcihzdGF0aWNfY2FzdDxLaW5kPihr
aW5kKSk7IH0KIAotICAgIEpTRnVuY3Rpb24qIGNhbGxlZUNvbnN0YW50KCkgY29uc3QKLSAgICB7
Ci0gICAgICAgIGlmIChjYWxsZWVSZWNvdmVyeS5pc0NvbnN0YW50KCkpCi0gICAgICAgICAgICBy
ZXR1cm4ganNDYXN0PEpTRnVuY3Rpb24qPihjYWxsZWVSZWNvdmVyeS5jb25zdGFudCgpKTsKLSAg
ICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90Vmlz
aXRvciYgdmlzaXRvcikKLSAgICB7Ci0gICAgICAgIHZpc2l0b3IuYXBwZW5kKCZleGVjdXRhYmxl
KTsKLSAgICB9CisgICAgSlNGdW5jdGlvbiogY2FsbGVlQ29uc3RhbnQoKSBjb25zdDsKKyAgICB2
b2lkIHZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7CiAgICAgCiAgICAgLy8gR2V0IHRoZSBj
YWxsZWUgZ2l2ZW4gYSBtYWNoaW5lIGNhbGwgZnJhbWUgdG8gd2hpY2ggdGhpcyBJbmxpbmVDYWxs
RnJhbWUgYmVsb25ncy4KICAgICBKU0Z1bmN0aW9uKiBjYWxsZWVGb3JDYWxsRnJhbWUoRXhlY1N0
YXRlKikgY29uc3Q7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5zdHJ1
Y3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5z
dHJ1Y3Rpb24uaAkocmV2aXNpb24gMTgyNDk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0luc3RydWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2LDcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiBjbGFzcyBBcnJheUFsbG9jYXRpb25Qcm9maWxlOwogY2xhc3MgQXJyYXlQ
cm9maWxlOwogY2xhc3MgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGU7Ci1jbGFzcyBWYXJpYWJsZVdh
dGNocG9pbnRTZXQ7CitjbGFzcyBXYXRjaHBvaW50U2V0Owogc3RydWN0IExMSW50Q2FsbExpbmtJ
bmZvOwogc3RydWN0IFZhbHVlUHJvZmlsZTsKIApAQCAtMTE3LDggKzExNyw3IEBAIHN0cnVjdCBJ
bnN0cnVjdGlvbiB7CiAgICAgICAgIEFycmF5UHJvZmlsZSogYXJyYXlQcm9maWxlOwogICAgICAg
ICBBcnJheUFsbG9jYXRpb25Qcm9maWxlKiBhcnJheUFsbG9jYXRpb25Qcm9maWxlOwogICAgICAg
ICBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSogb2JqZWN0QWxsb2NhdGlvblByb2ZpbGU7Ci0gICAg
ICAgIFZhcmlhYmxlV2F0Y2hwb2ludFNldCogd2F0Y2hwb2ludFNldDsKLSAgICAgICAgV3JpdGVC
YXJyaWVyQmFzZTxKU0xleGljYWxFbnZpcm9ubWVudD4gbGV4aWNhbEVudmlyb25tZW50OworICAg
ICAgICBXYXRjaHBvaW50U2V0KiB3YXRjaHBvaW50U2V0OwogICAgICAgICB2b2lkKiBwb2ludGVy
OwogICAgICAgICBib29sKiBwcmVkaWNhdGVQb2ludGVyOwogICAgICAgICBUb1RoaXNTdGF0dXMg
dG9UaGlzU3RhdHVzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Zhcmlh
YmxlV2F0Y2hwb2ludFNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1ZhcmlhYmxlV2F0Y2hwb2ludFNldC5jcHAJKHJldmlzaW9uIDE4MjQ5OCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYXJpYWJsZVdhdGNocG9pbnRTZXQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
NCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQs
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAog
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCkBAIC0zMCwxOSArMzAsOSBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAotdm9p
ZCBWYXJpYWJsZVdyaXRlRmlyZURldGFpbDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAor
dm9pZCBWYXJpYWJsZVdhdGNocG9pbnRTZXQ6Om5vdGlmeVdyaXRlKFZNJiB2bSwgSlNDZWxsKiBv
d25lciwgSlNWYWx1ZSB2YWx1ZSwgY29uc3QgY2hhciogcmVhc29uKQogewotICAgIG91dC5wcmlu
dCgiV3JpdGUgdG8gIiwgbV9uYW1lLCAiIGluICIsIEpTVmFsdWUobV9vYmplY3QpKTsKLX0KLQot
dm9pZCBWYXJpYWJsZVdhdGNocG9pbnRTZXQ6Om5vdGlmeVdyaXRlKFZNJiB2bSwgSlNWYWx1ZSB2
YWx1ZSwgSlNPYmplY3QqIGJhc2VPYmplY3QsIGNvbnN0IFByb3BlcnR5TmFtZSYgcHJvcGVydHlO
YW1lKQotewotICAgIG5vdGlmeVdyaXRlKHZtLCB2YWx1ZSwgVmFyaWFibGVXcml0ZUZpcmVEZXRh
aWwoYmFzZU9iamVjdCwgcHJvcGVydHlOYW1lKSk7Ci19Ci0KLXZvaWQgVmFyaWFibGVXYXRjaHBv
aW50U2V0Ojpub3RpZnlXcml0ZShWTSYgdm0sIEpTVmFsdWUgdmFsdWUsIGNvbnN0IGNoYXIqIHJl
YXNvbikKLXsKLSAgICBub3RpZnlXcml0ZSh2bSwgdmFsdWUsIFN0cmluZ0ZpcmVEZXRhaWwocmVh
c29uKSk7CisgICAgbm90aWZ5V3JpdGUodm0sIG93bmVyLCB2YWx1ZSwgU3RyaW5nRmlyZURldGFp
bChyZWFzb24pKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvVmFyaWFibGVXYXRjaHBvaW50U2V0LmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhcmlhYmxlV2F0Y2hwb2ludFNldC5oCShy
ZXZpc2lvbiAxODI0OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFyaWFi
bGVXYXRjaHBvaW50U2V0LmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICog
Q29weXJpZ2h0IChDKSAyMDEyLTIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEyLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMiwyOSArMzIsMTIgQEAKIG5h
bWVzcGFjZSBKU0MgewogCiBjbGFzcyBKU09iamVjdDsKLWNsYXNzIFN5bWJvbFRhYmxlOwotCi1j
bGFzcyBWYXJpYWJsZVdyaXRlRmlyZURldGFpbCA6IHB1YmxpYyBGaXJlRGV0YWlsIHsKLXB1Ymxp
YzoKLSAgICBWYXJpYWJsZVdyaXRlRmlyZURldGFpbChKU09iamVjdCogb2JqZWN0LCBjb25zdCBQ
cm9wZXJ0eU5hbWUmIG5hbWUpCi0gICAgICAgIDogbV9vYmplY3Qob2JqZWN0KQotICAgICAgICAs
IG1fbmFtZShuYW1lKQotICAgIHsKLSAgICB9Ci0gICAgCi0gICAgdmlydHVhbCB2b2lkIGR1bXAo
UHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKLQotcHJpdmF0ZToKLSAgICBKU09iamVjdCog
bV9vYmplY3Q7Ci0gICAgY29uc3QgUHJvcGVydHlOYW1lJiBtX25hbWU7Ci19OwogCiBjbGFzcyBW
YXJpYWJsZVdhdGNocG9pbnRTZXQgOiBwdWJsaWMgV2F0Y2hwb2ludFNldCB7CiAgICAgZnJpZW5k
IGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKIHB1YmxpYzoKLSAgICBWYXJpYWJsZVdhdGNo
cG9pbnRTZXQoU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlKQorICAgIFZhcmlhYmxlV2F0Y2hwb2lu
dFNldCgpCiAgICAgICAgIDogV2F0Y2hwb2ludFNldChDbGVhcldhdGNocG9pbnQpCi0gICAgICAg
ICwgbV9zeW1ib2xUYWJsZShzeW1ib2xUYWJsZSkKICAgICB7CiAgICAgfQogICAgIApAQCAtNzMs
OSArNTYsOCBAQCBwdWJsaWM6CiAgICAgLy8gICAgICAgIHlvdSB3aWxsIGhhdmUgYmVlbiBub3Rp
ZmllZCB0aGF0IHRoZSB3YXRjaHBvaW50IHdhcyBmaXJlZC4KICAgICBKU1ZhbHVlIGluZmVycmVk
VmFsdWUoKSBjb25zdCB7IHJldHVybiBtX2luZmVycmVkVmFsdWUuZ2V0KCk7IH0KICAgICAKLSAg
ICB2b2lkIG5vdGlmeVdyaXRlKFZNJiwgSlNWYWx1ZSwgY29uc3QgRmlyZURldGFpbCYpOwotICAg
IEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgbm90aWZ5V3JpdGUoVk0mLCBKU1ZhbHVlLCBKU09iamVj
dCogYmFzZU9iamVjdCwgY29uc3QgUHJvcGVydHlOYW1lJik7Ci0gICAgdm9pZCBub3RpZnlXcml0
ZShWTSYsIEpTVmFsdWUsIGNvbnN0IGNoYXIqIHJlYXNvbik7CisgICAgdm9pZCBub3RpZnlXcml0
ZShWTSYsIEpTQ2VsbCogb3duZXIsIEpTVmFsdWUsIGNvbnN0IEZpcmVEZXRhaWwmKTsKKyAgICB2
b2lkIG5vdGlmeVdyaXRlKFZNJiwgSlNDZWxsKiBvd25lciwgSlNWYWx1ZSwgY29uc3QgY2hhciog
cmVhc29uKTsKICAgICAKICAgICB2b2lkIGludmFsaWRhdGUoY29uc3QgRmlyZURldGFpbCYgZGV0
YWlsKQogICAgIHsKQEAgLTgzLDE1ICs2NSwxOSBAQCBwdWJsaWM6CiAgICAgICAgIFdhdGNocG9p
bnRTZXQ6OmludmFsaWRhdGUoZGV0YWlsKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBmaW5hbGl6
ZVVuY29uZGl0aW9uYWxseShjb25zdCBGaXJlRGV0YWlsJiBkZXRhaWwpCisgICAgYm9vbCBuZWVk
VG9GaW5hbGl6ZSgpCiAgICAgewogICAgICAgICBBU1NFUlQoISFtX2luZmVycmVkVmFsdWUgPT0g
KHN0YXRlKCkgPT0gSXNXYXRjaGVkKSk7CiAgICAgICAgIGlmICghbV9pbmZlcnJlZFZhbHVlKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICByZXR1cm4gbV9pbmZlcnJlZFZhbHVl
LmdldCgpLmlzQ2VsbCgpOworICAgIH0KKyAgICAKKyAgICB2b2lkIGZpbmFsaXplVW5jb25kaXRp
b25hbGx5KGNvbnN0IEZpcmVEZXRhaWwmIGRldGFpbCkKKyAgICB7CisgICAgICAgIGlmICghbmVl
ZFRvRmluYWxpemUoKSkKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgSlNWYWx1ZSBpbmZl
cnJlZFZhbHVlID0gbV9pbmZlcnJlZFZhbHVlLmdldCgpOwotICAgICAgICBpZiAoIWluZmVycmVk
VmFsdWUuaXNDZWxsKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIEpTQ2VsbCogY2Vs
bCA9IGluZmVycmVkVmFsdWUuYXNDZWxsKCk7CisgICAgICAgIEpTQ2VsbCogY2VsbCA9IG1faW5m
ZXJyZWRWYWx1ZS5nZXQoKS5hc0NlbGwoKTsKICAgICAgICAgaWYgKEhlYXA6OmlzTWFya2VkKGNl
bGwpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBpbnZhbGlkYXRlKGRldGFpbCk7CkBA
IC0xMDAsNyArODYsNiBAQCBwdWJsaWM6CiAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiBhZGRy
ZXNzT2ZJbmZlcnJlZFZhbHVlKCkgeyByZXR1cm4gJm1faW5mZXJyZWRWYWx1ZTsgfQogICAgIAog
cHJpdmF0ZToKLSAgICBTeW1ib2xUYWJsZSYgbV9zeW1ib2xUYWJsZTsKICAgICBXcml0ZUJhcnJp
ZXI8VW5rbm93bj4gbV9pbmZlcnJlZFZhbHVlOwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1ZhcmlhYmxlV2F0Y2hwb2ludFNldElubGluZXMuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFyaWFibGVXYXRjaHBvaW50U2V0
SW5saW5lcy5oCShyZXZpc2lvbiAxODI0OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvVmFyaWFibGVXYXRjaHBvaW50U2V0SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0x
LDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTQsIDIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0yNiwx
NyArMjYsMTcgQEAKICNpZm5kZWYgVmFyaWFibGVXYXRjaHBvaW50U2V0SW5saW5lc19oCiAjZGVm
aW5lIFZhcmlhYmxlV2F0Y2hwb2ludFNldElubGluZXNfaAogCi0jaW5jbHVkZSAiU3ltYm9sVGFi
bGUuaCIKICNpbmNsdWRlICJWYXJpYWJsZVdhdGNocG9pbnRTZXQuaCIKIAogbmFtZXNwYWNlIEpT
QyB7CiAKLWlubGluZSB2b2lkIFZhcmlhYmxlV2F0Y2hwb2ludFNldDo6bm90aWZ5V3JpdGUoVk0m
IHZtLCBKU1ZhbHVlIHZhbHVlLCBjb25zdCBGaXJlRGV0YWlsJiBkZXRhaWwpCitpbmxpbmUgdm9p
ZCBWYXJpYWJsZVdhdGNocG9pbnRTZXQ6Om5vdGlmeVdyaXRlKAorICAgIFZNJiB2bSwgSlNDZWxs
KiBvd25lciwgSlNWYWx1ZSB2YWx1ZSwgY29uc3QgRmlyZURldGFpbCYgZGV0YWlsKQogewogICAg
IEFTU0VSVCghIXZhbHVlKTsKICAgICBzd2l0Y2ggKHN0YXRlKCkpIHsKICAgICBjYXNlIENsZWFy
V2F0Y2hwb2ludDoKLSAgICAgICAgbV9pbmZlcnJlZFZhbHVlLnNldCh2bSwgJm1fc3ltYm9sVGFi
bGUsIHZhbHVlKTsKKyAgICAgICAgbV9pbmZlcnJlZFZhbHVlLnNldCh2bSwgb3duZXIsIHZhbHVl
KTsKICAgICAgICAgc3RhcnRXYXRjaGluZygpOwogICAgICAgICByZXR1cm47CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYXJpYWJsZVdyaXRlRmlyZURldGFpbC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhcmlhYmxlV3Jp
dGVGaXJlRGV0YWlsLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9WYXJpYWJsZVdyaXRlRmlyZURldGFpbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAs
MCArMSw0NCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiVmFyaWFibGVXcml0ZUZpcmVEZXRhaWwu
aCIKKworI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3ZvaWQg
VmFyaWFibGVXcml0ZUZpcmVEZXRhaWw6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sK
KyAgICBvdXQucHJpbnQoIldyaXRlIHRvICIsIG1fbmFtZSwgIiBpbiAiLCBKU1ZhbHVlKG1fb2Jq
ZWN0KSk7Cit9CisKK3ZvaWQgVmFyaWFibGVXcml0ZUZpcmVEZXRhaWw6OnRvdWNoKFdhdGNocG9p
bnRTZXQqIHNldCwgSlNPYmplY3QqIG9iamVjdCwgY29uc3QgUHJvcGVydHlOYW1lJiBuYW1lKQor
eworICAgIHNldC0+dG91Y2goVmFyaWFibGVXcml0ZUZpcmVEZXRhaWwob2JqZWN0LCBuYW1lKSk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvVmFyaWFibGVXcml0ZUZpcmVEZXRhaWwuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFyaWFibGVXcml0ZUZpcmVEZXRhaWwuaAkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYXJpYWJsZVdyaXRlRmly
ZURldGFpbC5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2lmbmRlZiBWYXJpYWJsZVdyaXRlRmly
ZURldGFpbF9oCisjZGVmaW5lIFZhcmlhYmxlV3JpdGVGaXJlRGV0YWlsX2gKKworI2luY2x1ZGUg
IldhdGNocG9pbnQuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEpTT2JqZWN0OworY2xh
c3MgUHJvcGVydHlOYW1lOworCitjbGFzcyBWYXJpYWJsZVdyaXRlRmlyZURldGFpbCA6IHB1Ymxp
YyBGaXJlRGV0YWlsIHsKK3B1YmxpYzoKKyAgICBWYXJpYWJsZVdyaXRlRmlyZURldGFpbChKU09i
amVjdCogb2JqZWN0LCBjb25zdCBQcm9wZXJ0eU5hbWUmIG5hbWUpCisgICAgICAgIDogbV9vYmpl
Y3Qob2JqZWN0KQorICAgICAgICAsIG1fbmFtZShuYW1lKQorICAgIHsKKyAgICB9CisgICAgCisg
ICAgdmlydHVhbCB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKyAgICAK
KyAgICBKU19FWFBPUlRfUFJJVkFURSBzdGF0aWMgdm9pZCB0b3VjaChXYXRjaHBvaW50U2V0Kiwg
SlNPYmplY3QqLCBjb25zdCBQcm9wZXJ0eU5hbWUmKTsKKworcHJpdmF0ZToKKyAgICBKU09iamVj
dCogbV9vYmplY3Q7CisgICAgY29uc3QgUHJvcGVydHlOYW1lJiBtX25hbWU7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIFZhcmlhYmxlV3JpdGVGaXJlRGV0YWlsX2gKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9XYXRjaHBvaW50LmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1dhdGNocG9pbnQuaAkocmV2aXNp
b24gMTgyNDk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1dhdGNocG9pbnQu
aAkod29ya2luZyBjb3B5KQpAQCAtMTI1LDIwICsxMjUsMjQgQEAgcHVibGljOgogICAgIC8vIHNl
dCB3YXRjaHBvaW50cyB0aGF0IHdlIGJlbGlldmUgd2lsbCBhY3R1YWxseSBiZSBmaXJlZC4KICAg
ICB2b2lkIHN0YXJ0V2F0Y2hpbmcoKQogICAgIHsKLSAgICAgICAgQVNTRVJUKHN0YXRlKCkgIT0g
SXNJbnZhbGlkYXRlZCk7CisgICAgICAgIEFTU0VSVChtX3N0YXRlICE9IElzSW52YWxpZGF0ZWQp
OworICAgICAgICBpZiAobV9zdGF0ZSA9PSBJc1dhdGNoZWQpCisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CiAgICAgICAgIG1fc3RhdGUgPSBJc1dh
dGNoZWQ7CisgICAgICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CiAgICAgfQogICAgIAogICAg
IHZvaWQgZmlyZUFsbChjb25zdCBGaXJlRGV0YWlsJiBkZXRhaWwpCiAgICAgewotICAgICAgICBp
ZiAoTElLRUxZKHN0YXRlKCkgIT0gSXNXYXRjaGVkKSkKKyAgICAgICAgaWYgKExJS0VMWShtX3N0
YXRlICE9IElzV2F0Y2hlZCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGZpcmVBbGxT
bG93KGRldGFpbCk7CiAgICAgfQogICAgIAogICAgIHZvaWQgZmlyZUFsbChjb25zdCBjaGFyKiBy
ZWFzb24pCiAgICAgewotICAgICAgICBpZiAoTElLRUxZKHN0YXRlKCkgIT0gSXNXYXRjaGVkKSkK
KyAgICAgICAgaWYgKExJS0VMWShtX3N0YXRlICE9IElzV2F0Y2hlZCkpCiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIGZpcmVBbGxTbG93KHJlYXNvbik7CiAgICAgfQpAQCAtMTUxLDEzICsx
NTUsMjMgQEAgcHVibGljOgogICAgICAgICAgICAgZmlyZUFsbChkZXRhaWwpOwogICAgIH0KICAg
ICAKKyAgICB2b2lkIHRvdWNoKGNvbnN0IGNoYXIqIHJlYXNvbikKKyAgICB7CisgICAgICAgIHRv
dWNoKFN0cmluZ0ZpcmVEZXRhaWwocmVhc29uKSk7CisgICAgfQorICAgIAogICAgIHZvaWQgaW52
YWxpZGF0ZShjb25zdCBGaXJlRGV0YWlsJiBkZXRhaWwpCiAgICAgewogICAgICAgICBpZiAoc3Rh
dGUoKSA9PSBJc1dhdGNoZWQpCiAgICAgICAgICAgICBmaXJlQWxsKGRldGFpbCk7CiAgICAgICAg
IG1fc3RhdGUgPSBJc0ludmFsaWRhdGVkOwogICAgIH0KLQorICAgIAorICAgIHZvaWQgaW52YWxp
ZGF0ZShjb25zdCBjaGFyKiByZWFzb24pCisgICAgeworICAgICAgICBpbnZhbGlkYXRlKFN0cmlu
Z0ZpcmVEZXRhaWwocmVhc29uKSk7CisgICAgfQorICAgIAogICAgIGludDhfdCogYWRkcmVzc09m
U3RhdGUoKSB7IHJldHVybiAmbV9zdGF0ZTsgfQogICAgIGludDhfdCogYWRkcmVzc09mU2V0SXNO
b3RFbXB0eSgpIHsgcmV0dXJuICZtX3NldElzTm90RW1wdHk7IH0KICAgICAKQEAgLTI2MSw3ICsy
NzUsMTEgQEAgcHVibGljOgogICAgICAgICAgICAgZmF0KCktPnRvdWNoKGRldGFpbCk7CiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGRlY29kZVN0YXRlKG1fZGF0
YSkgPT0gQ2xlYXJXYXRjaHBvaW50KQorICAgICAgICB1aW50cHRyX3QgZGF0YSA9IG1fZGF0YTsK
KyAgICAgICAgaWYgKGRlY29kZVN0YXRlKGRhdGEpID09IElzSW52YWxpZGF0ZWQpCisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CisgICAgICAgIGlm
IChkZWNvZGVTdGF0ZShkYXRhKSA9PSBDbGVhcldhdGNocG9pbnQpCiAgICAgICAgICAgICBtX2Rh
dGEgPSBlbmNvZGVTdGF0ZShJc1dhdGNoZWQpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBt
X2RhdGEgPSBlbmNvZGVTdGF0ZShJc0ludmFsaWRhdGVkKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3Bw
CShyZXZpc2lvbiAxODI0OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVy
L0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDY2LDkgKzQ2Niw2IEBA
IEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihWTSYKICAgICAgICAgfQogICAg
IH0KICAgICAKLSAgICBpZiAobV9zeW1ib2xUYWJsZS0+c2NvcGVTaXplKCkpCi0gICAgICAgIGVt
aXRPcGNvZGUob3BfdG91Y2hfZW50cnkpOwotCiAgICAgaWYgKGlzQ29uc3RydWN0b3IoKSkgewog
ICAgICAgICBpZiAoY29uc3RydWN0b3JLaW5kKCkgPT0gQ29uc3RydWN0b3JLaW5kOjpEZXJpdmVk
KSB7CiAgICAgICAgICAgICBtX25ld1RhcmdldFJlZ2lzdGVyID0gYWRkVmFyKCk7CkBAIC0xMzI0
LDggKzEzMjEsNiBAQCBSZWdpc3RlcklEKiBCeXRlY29kZUdlbmVyYXRvcjo6ZW1pdFJlc29sCiAg
ICAgICAgIAogICAgICAgICBBU1NFUlQoIW1fc3ltYm9sVGFibGUgfHwgIW1fc3ltYm9sVGFibGUt
PmNvbnRhaW5zKHZhcmlhYmxlLmlkZW50KCkuaW1wbCgpKSB8fCByZXNvbHZlVHlwZSgpID09IER5
bmFtaWMpOwogICAgICAgICAKLSAgICAgICAgbV9jb2RlQmxvY2stPmFkZFByb3BlcnR5QWNjZXNz
SW5zdHJ1Y3Rpb24oaW5zdHJ1Y3Rpb25zKCkuc2l6ZSgpKTsKLSAgICAgICAgCiAgICAgICAgIC8v
IHJlc29sdmVfc2NvcGUgZHN0LCBpZCwgUmVzb2x2ZVR5cGUsIGRlcHRoCiAgICAgICAgIGVtaXRP
cGNvZGUob3BfcmVzb2x2ZV9zY29wZSk7CiAgICAgICAgIGRzdCA9IHRlbXBEZXN0aW5hdGlvbihk
c3QpOwpAQCAtMTMzNCw3ICsxMzI5LDYgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6
OmVtaXRSZXNvbAogICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoYWRkQ29uc3RhbnQodmFy
aWFibGUuaWRlbnQoKSkpOwogICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQocmVzb2x2ZVR5
cGUoKSk7CiAgICAgICAgIGluc3RydWN0aW9ucygpLmFwcGVuZCgwKTsKLSAgICAgICAgaW5zdHJ1
Y3Rpb25zKCkuYXBwZW5kKDApOwogICAgICAgICByZXR1cm4gZHN0OwogICAgIH0KICAgICAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGlu
ZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0
SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHJldmlzaW9uIDE4MjQ5OCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAkod29ya2luZyBjb3B5
KQpAQCAtMTM0Miw2ICsxMzQyLDcgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFic3RyYWN0
U3RhdGVUeQogICAgIH0KIAogICAgIGNhc2UgQ3JlYXRlVGhpczogeworICAgICAgICAvLyBGSVhN
RTogV2UgY2FuIGZvbGQgdGhpcyB0byBOZXdPYmplY3QgaWYgdGhlIGluY29taW5nIGNhbGxlZSBp
cyBhIGNvbnN0YW50LgogICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0ZpbmFsT2Jq
ZWN0KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQpAQCAtMTQwMSw2ICsxNDAyLDE1IEBAIGJvb2wg
QWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICAgICAgYnJlYWs7CiAgICAg
ICAgIAogICAgIGNhc2UgR2V0Q2FsbGVlOgorICAgICAgICBpZiAoRnVuY3Rpb25FeGVjdXRhYmxl
KiBleGVjdXRhYmxlID0ganNEeW5hbWljQ2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihtX2NvZGVC
bG9jay0+b3duZXJFeGVjdXRhYmxlKCkpKSB7CisgICAgICAgICAgICBWYXJpYWJsZVdhdGNocG9p
bnRTZXQmIHNldCA9IGV4ZWN1dGFibGUtPmZ1bmN0aW9uUmVhbGxvY2F0aW9uV2F0Y2hwb2ludFNl
dCgpOworICAgICAgICAgICAgaWYgKEpTVmFsdWUgdmFsdWUgPSBzZXQuaW5mZXJyZWRWYWx1ZSgp
KSB7CisgICAgICAgICAgICAgICAgbV9ncmFwaC53YXRjaHBvaW50cygpLmFkZExhemlseSgmc2V0
KTsKKyAgICAgICAgICAgICAgICBKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9IGpzQ2FzdDxKU0Z1bmN0
aW9uKj4odmFsdWUpOworICAgICAgICAgICAgICAgIHNldENvbnN0YW50KG5vZGUsICptX2dyYXBo
LmZyZWV6ZShmdW5jdGlvbikpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
fQorICAgICAgICB9CiAgICAgICAgIGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjRnVuY3Rpb24p
OwogICAgICAgICBicmVhazsKICAgICAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAkocmV2aXNpb24gMTgyNDk4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTI3OSw4ICsyNzksMjAgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBpZiAob3Bl
cmFuZC5vZmZzZXQoKSA9PSBKU1N0YWNrOjpDYWxsZWUpCiAgICAgICAgICAgICAgICAgICAgIHJl
dHVybiB3ZWFrSlNDb25zdGFudChjYWxsZWUpOwogICAgICAgICAgICAgfQotICAgICAgICB9IGVs
c2UgaWYgKG9wZXJhbmQub2Zmc2V0KCkgPT0gSlNTdGFjazo6Q2FsbGVlKQorICAgICAgICB9IGVs
c2UgaWYgKG9wZXJhbmQub2Zmc2V0KCkgPT0gSlNTdGFjazo6Q2FsbGVlKSB7CisgICAgICAgICAg
ICAvLyBXZSBoYXZlIHRvIGRvIHNvbWUgY29uc3RhbnQtZm9sZGluZyBoZXJlIGJlY2F1c2UgdGhp
cyBlbmFibGVzIENyZWF0ZVRoaXMgZm9sZGluZy4gTm90ZQorICAgICAgICAgICAgLy8gdGhhdCB3
ZSBkb24ndCBoYXZlIHN1Y2ggd2F0Y2hwb2ludC1iYXNlZCBmb2xkaW5nIGZvciBpbmxpbmVkIHVz
ZXMgb2YgQ2FsbGVlLCBzaW5jZSBpbiB0aGF0CisgICAgICAgICAgICAvLyBjYXNlIGlmIHRoZSBm
dW5jdGlvbiBpcyBhIHNpbmdsZXRvbiB0aGVuIHdlIGFscmVhZHkga25vdyBpdC4KKyAgICAgICAg
ICAgIGlmIChGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBqc0R5bmFtaWNDYXN0PEZ1
bmN0aW9uRXhlY3V0YWJsZSo+KG1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSkpIHsKKyAg
ICAgICAgICAgICAgICBWYXJpYWJsZVdhdGNocG9pbnRTZXQmIHNldCA9IGV4ZWN1dGFibGUtPmZ1
bmN0aW9uUmVhbGxvY2F0aW9uV2F0Y2hwb2ludFNldCgpOworICAgICAgICAgICAgICAgIGlmIChK
U1ZhbHVlIHZhbHVlID0gc2V0LmluZmVycmVkVmFsdWUoKSkgeworICAgICAgICAgICAgICAgICAg
ICBtX2dyYXBoLndhdGNocG9pbnRzKCkuYWRkTGF6aWx5KCZzZXQpOworICAgICAgICAgICAgICAg
ICAgICBKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4odmFsdWUpOwor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gd2Vha0pTQ29uc3RhbnQoZnVuY3Rpb24pOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiBhZGRUb0dy
YXBoKEdldENhbGxlZSk7CisgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHJldHVybiBnZXRE
aXJlY3QobV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKG9wZXJhbmQpKTsKICAgICB9CkBA
IC0yNTMyLDYgKzI1NDQsMTIgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6Y2xlYXJDYWNoZXMoKQog
Tm9kZSogQnl0ZUNvZGVQYXJzZXI6OmdldFNjb3BlKFZpcnR1YWxSZWdpc3RlciBzY29wZUNoYWlu
LCB1bnNpZ25lZCBza2lwQ291bnQpCiB7CiAgICAgTm9kZSogbG9jYWxCYXNlID0gZ2V0KHNjb3Bl
Q2hhaW4pOworICAgIGFkZFRvR3JhcGgoUGhhbnRvbSwgbG9jYWxCYXNlKTsgLy8gT1NSIGV4aXQg
Y2Fubm90IGhhbmRsZSByZXNvbHZlX3Njb3BlIG9uIGEgRENFJ2Qgc2NvcGUuCisgICAgaWYgKEpT
U2NvcGUqIHNjb3BlID0gbG9jYWxCYXNlLT5keW5hbWljQ2FzdENvbnN0YW50PEpTU2NvcGUqPigp
KSB7CisgICAgICAgIGZvciAodW5zaWduZWQgbiA9IHNraXBDb3VudDsgbi0tOykKKyAgICAgICAg
ICAgIHNjb3BlID0gc2NvcGUtPm5leHQoKTsKKyAgICAgICAgcmV0dXJuIHdlYWtKU0NvbnN0YW50
KHNjb3BlKTsKKyAgICB9CiAgICAgZm9yICh1bnNpZ25lZCBuID0gc2tpcENvdW50OyBuLS07KQog
ICAgICAgICBsb2NhbEJhc2UgPSBhZGRUb0dyYXBoKFNraXBTY29wZSwgbG9jYWxCYXNlKTsKICAg
ICByZXR1cm4gbG9jYWxCYXNlOwpAQCAtMjYwNiwxMSArMjYyNCw2IEBAIGJvb2wgQnl0ZUNvZGVQ
YXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2Vu
dGVyKTsKICAgICAgICAgfQogICAgICAgICAgICAgCi0gICAgICAgIGNhc2Ugb3BfdG91Y2hfZW50
cnk6Ci0gICAgICAgICAgICBpZiAobV9pbmxpbmVTdGFja1RvcC0+bV9jb2RlQmxvY2stPnN5bWJv
bFRhYmxlKCktPm1fZnVuY3Rpb25FbnRlcmVkT25jZS5pc1N0aWxsVmFsaWQoKSkKLSAgICAgICAg
ICAgICAgICBhZGRUb0dyYXBoKEZvcmNlT1NSRXhpdCk7Ci0gICAgICAgICAgICBORVhUX09QQ09E
RShvcF90b3VjaF9lbnRyeSk7Ci0gICAgICAgICAgICAKICAgICAgICAgY2FzZSBvcF90b190aGlz
OiB7CiAgICAgICAgICAgICBOb2RlKiBvcDEgPSBnZXRUaGlzKCk7CiAgICAgICAgICAgICBpZiAo
b3AxLT5vcCgpICE9IFRvVGhpcykgewpAQCAtMzM4OCwxNyArMzQwMSw3IEBAIGJvb2wgQnl0ZUNv
ZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgIGNhc2UgTG9jYWxDbG9z
dXJlVmFyOgogICAgICAgICAgICAgY2FzZSBDbG9zdXJlVmFyOgogICAgICAgICAgICAgY2FzZSBD
bG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICAgICAgICAgIEpTTGV4
aWNhbEVudmlyb25tZW50KiBsZXhpY2FsRW52aXJvbm1lbnQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25b
Nl0udS5sZXhpY2FsRW52aXJvbm1lbnQuZ2V0KCk7Ci0gICAgICAgICAgICAgICAgaWYgKGxleGlj
YWxFbnZpcm9ubWVudAotICAgICAgICAgICAgICAgICAgICAmJiBsZXhpY2FsRW52aXJvbm1lbnQt
PnN5bWJvbFRhYmxlKCktPm1fZnVuY3Rpb25FbnRlcmVkT25jZS5pc1N0aWxsVmFsaWQoKSkgewot
ICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLndhdGNocG9pbnRzKCkuYWRkTGF6aWx5KGxleGlj
YWxFbnZpcm9ubWVudC0+c3ltYm9sVGFibGUoKS0+bV9mdW5jdGlvbkVudGVyZWRPbmNlKTsKLSAg
ICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChQaGFudG9tLCBnZXREaXJlY3QobV9pbmxpbmVT
dGFja1RvcC0+cmVtYXBPcGVyYW5kKFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25b
Ml0udS5vcGVyYW5kKSkpKTsKLSAgICAgICAgICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rl
cihkc3QpLCB3ZWFrSlNDb25zdGFudChsZXhpY2FsRW52aXJvbm1lbnQpKTsKLSAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIHNldChW
aXJ0dWFsUmVnaXN0ZXIoZHN0KSwgZ2V0U2NvcGUoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0
cnVjdGlvblsyXS51Lm9wZXJhbmQpLCBkZXB0aCkpOwotICAgICAgICAgICAgICAgIGlmIChpbmxp
bmVDYWxsRnJhbWUoKSkKLSAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChQaGFudG9tLCBn
ZXREaXJlY3QobV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKFZpcnR1YWxSZWdpc3Rlcihj
dXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSkpKTsKICAgICAgICAgICAgICAgICBicmVh
azsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNhc2UgRHluYW1pYzoKQEAgLTM0NTAsMTkg
KzM0NTMsNTggQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAg
ICAgICAgICAgY2FzZSBHbG9iYWxWYXI6CiAgICAgICAgICAgICBjYXNlIEdsb2JhbFZhcldpdGhW
YXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKFBoYW50b20s
IGdldChWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUpKSk7Ci0gICAgICAgICAgICAgICAgQ29uY3VycmVu
dEpJVExvY2tlciBsb2NrZXIoZ2xvYmFsT2JqZWN0LT5zeW1ib2xUYWJsZSgpLT5tX2xvY2spOwot
ICAgICAgICAgICAgICAgIFN5bWJvbFRhYmxlRW50cnkgZW50cnkgPSBnbG9iYWxPYmplY3QtPnN5
bWJvbFRhYmxlKCktPmdldChsb2NrZXIsIHVpZCk7Ci0gICAgICAgICAgICAgICAgVmFyaWFibGVX
YXRjaHBvaW50U2V0KiB3YXRjaHBvaW50U2V0ID0gZW50cnkud2F0Y2hwb2ludFNldCgpOwotICAg
ICAgICAgICAgICAgIEpTVmFsdWUgaW5mZXJyZWRWYWx1ZSA9Ci0gICAgICAgICAgICAgICAgICAg
IHdhdGNocG9pbnRTZXQgPyB3YXRjaHBvaW50U2V0LT5pbmZlcnJlZFZhbHVlKCkgOiBKU1ZhbHVl
KCk7Ci0gICAgICAgICAgICAgICAgaWYgKCFpbmZlcnJlZFZhbHVlKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSBnZXRQcmVkaWN0aW9uKCk7Ci0gICAg
ICAgICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoZHN0KSwgYWRkVG9HcmFwaChHZXRH
bG9iYWxWYXIsIE9wSW5mbyhvcGVyYW5kKSwgT3BJbmZvKHByZWRpY3Rpb24pKSk7Ci0gICAgICAg
ICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIFdhdGNocG9pbnRTZXQqIHdhdGNo
cG9pbnRTZXQ7CisgICAgICAgICAgICAgICAgU2NvcGVPZmZzZXQgb2Zmc2V0OworICAgICAgICAg
ICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIo
Z2xvYmFsT2JqZWN0LT5zeW1ib2xUYWJsZSgpLT5tX2xvY2spOworICAgICAgICAgICAgICAgICAg
ICBTeW1ib2xUYWJsZUVudHJ5IGVudHJ5ID0gZ2xvYmFsT2JqZWN0LT5zeW1ib2xUYWJsZSgpLT5n
ZXQobG9ja2VyLCB1aWQpOworICAgICAgICAgICAgICAgICAgICB3YXRjaHBvaW50U2V0ID0gZW50
cnkud2F0Y2hwb2ludFNldCgpOworICAgICAgICAgICAgICAgICAgICBvZmZzZXQgPSBlbnRyeS5z
Y29wZU9mZnNldCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAod2F0
Y2hwb2ludFNldCAmJiB3YXRjaHBvaW50U2V0LT5zdGF0ZSgpID09IElzV2F0Y2hlZCkgeworICAg
ICAgICAgICAgICAgICAgICAvLyBUaGlzIGhhcyBhIGZ1biBjb25jdXJyZW5jeSBzdG9yeS4gVGhl
cmUgaXMgdGhlIHBvc3NpYmlsaXR5IG9mIGEgcmFjZSBpbiB0d28KKyAgICAgICAgICAgICAgICAg
ICAgLy8gZGlyZWN0aW9uczoKKyAgICAgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAg
ICAgICAgLy8gV2Ugc2VlIHRoYXQgdGhlIHNldCBJc1dhdGNoZWQsIGJ1dCBpbiB0aGUgbWVhbnRp
bWUgaXQgZ2V0cyBpbnZhbGlkYXRlZDogdGhpcyBpcworICAgICAgICAgICAgICAgICAgICAvLyBm
aW5lIGJlY2F1c2UgaWYgd2Ugc2F3IHRoYXQgaXQgSXNXYXRjaGVkIHRoZW4gd2UgYWRkIGEgd2F0
Y2hwb2ludC4gSWYgaXQgZ2V0cworICAgICAgICAgICAgICAgICAgICAvLyBpbnZhbGlkYXRlZCwg
dGhlbiB0aGlzIGNvbXBpbGF0aW9uIGlzIGludmFsaWRhdGVkLiBOb3RlIHRoYXQgaW4gdGhlIG1l
YW50aW1lIHdlCisgICAgICAgICAgICAgICAgICAgIC8vIG1heSBsb2FkIGFuIGFic3VyZCB2YWx1
ZSBmcm9tIHRoZSBnbG9iYWwgb2JqZWN0LiBJdCdzIGZpbmUgdG8gbG9hZCBhbiBhYnN1cmQKKyAg
ICAgICAgICAgICAgICAgICAgLy8gdmFsdWUgaWYgdGhlIGNvbXBpbGF0aW9uIGlzIGludmFsaWRh
dGVkIGFueXdheS4KKyAgICAgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAgICAg
Ly8gV2Ugc2VlIHRoYXQgdGhlIHNldCBJc1dhdGNoZWQsIGJ1dCB0aGUgdmFsdWUgaXNuJ3QgeWV0
IGluaXRpYWxpemVkOiB0aGlzIGlzbid0CisgICAgICAgICAgICAgICAgICAgIC8vIHBvc3NpYmxl
IGJlY2F1c2Ugb2YgdGhlIG9yZGVyaW5nIG9mIG9wZXJhdGlvbnMuCisgICAgICAgICAgICAgICAg
ICAgIC8vCisgICAgICAgICAgICAgICAgICAgIC8vIEhlcmUncyBob3cgd2Ugb3JkZXIgb3BlcmF0
aW9uczoKKyAgICAgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAgICAgLy8gTWFp
biB0aHJlYWQgc3RvcmVzIHRvIHRoZSBnbG9iYWwgb2JqZWN0OiBhbHdheXMgc3RvcmUgYSB2YWx1
ZSBmaXJzdCwgYW5kIG9ubHkKKyAgICAgICAgICAgICAgICAgICAgLy8gYWZ0ZXIgdGhhdCBkbyB3
ZSB0b3VjaCB0aGUgd2F0Y2hwb2ludCBzZXQuIFRoZXJlIGlzIGEgZmVuY2UgaW4gdGhlIHRvdWNo
LCB0aGF0CisgICAgICAgICAgICAgICAgICAgIC8vIGVuc3VyZXMgdGhhdCB0aGUgc3RvcmUgdG8g
dGhlIGdsb2JhbCBvYmplY3QgYWx3YXlzIGhhcHBlbnMgYmVmb3JlIHRoZSB0b3VjaCBvbiB0aGUK
KyAgICAgICAgICAgICAgICAgICAgLy8gc2V0LgorICAgICAgICAgICAgICAgICAgICAvLworICAg
ICAgICAgICAgICAgICAgICAvLyBDb21waWxhdGlvbiB0aHJlYWQ6IGFsd2F5cyBmaXJzdCBsb2Fk
IHRoZSBzdGF0ZSBvZiB0aGUgd2F0Y2hwb2ludCBzZXQsIGFuZCB0aGVuCisgICAgICAgICAgICAg
ICAgICAgIC8vIGxvYWQgdGhlIHZhbHVlLiBUaGUgV2F0Y2hwb2ludFNldDo6c3RhdGUoKSBtZXRo
b2QgZG9lcyBmZW5jZXMgZm9yIHVzIHRvIGVuc3VyZQorICAgICAgICAgICAgICAgICAgICAvLyB0
aGF0IHRoZSBsb2FkIG9mIHRoZSBzdGF0ZSBoYXBwZW5zIGJlZm9yZSBvdXIgbG9hZCBvZiB0aGUg
dmFsdWUuCisgICAgICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgICAgIC8vIEZp
bmFsaXppbmcgY29tcGlsYXRpb246IHRoaXMgaGFwcGVucyBvbiB0aGUgbWFpbiB0aHJlYWQgYW5k
IHN5bmNocm9ub3VzbHkgY2hlY2tzCisgICAgICAgICAgICAgICAgICAgIC8vIHZhbGlkaXR5IG9m
IGFsbCB3YXRjaHBvaW50IHNldHMuCisgICAgICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAg
ICAgICAgICAgIC8vIFdlIHdpbGwgb25seSBwZXJmb3JtIG9wdGltaXphdGlvbnMgaWYgdGhlIGxv
YWQgb2YgdGhlIHN0YXRlIHlpZWxkcyBJc1dhdGNoZWQuIFRoYXQKKyAgICAgICAgICAgICAgICAg
ICAgLy8gbWVhbnMgdGhhdCBhdCBsZWFzdCBvbmUgc3RvcmUgd291bGQgaGF2ZSBoYXBwZW5lZCB0
byBpbml0aWFsaXplIHRoZSBvcmlnaW5hbCB2YWx1ZQorICAgICAgICAgICAgICAgICAgICAvLyBv
ZiB0aGUgdmFyaWFibGUgKHRoYXQgaXMsIHRoZSB2YWx1ZSB3ZSdkIGxpa2UgdG8gY29uc3RhbnQg
Zm9sZCB0bykuIFRoZXJlIG1heSBiZQorICAgICAgICAgICAgICAgICAgICAvLyBvdGhlciBzdG9y
ZXMgdGhhdCBoYXBwZW4gYWZ0ZXIgdGhhdCwgYnV0IHRob3NlIHN0b3JlcyB3aWxsIGludmFsaWRh
dGUgdGhlCisgICAgICAgICAgICAgICAgICAgIC8vIHdhdGNocG9pbnQgc2V0IGFuZCBhbHNvIHRo
ZSBjb21waWxhdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgICAg
IEFTU0VSVChiaXR3aXNlX2Nhc3Q8dWludHB0cl90PigmZ2xvYmFsT2JqZWN0LT52YXJpYWJsZUF0
KG9mZnNldCkpID09IG9wZXJhbmQpOworICAgICAgICAgICAgICAgICAgICBKU1ZhbHVlIHZhbHVl
ID0gZ2xvYmFsT2JqZWN0LT52YXJpYWJsZUF0KG9mZnNldCkuZ2V0KCk7CisgICAgICAgICAgICAg
ICAgICAgIGlmICh2YWx1ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC53YXRj
aHBvaW50cygpLmFkZExhemlseSh3YXRjaHBvaW50U2V0KTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoZHN0KSwgd2Vha0pTQ29uc3RhbnQodmFsdWUpKTsKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIG1fZ3JhcGgu
d2F0Y2hwb2ludHMoKS5hZGRMYXppbHkod2F0Y2hwb2ludFNldCk7Ci0gICAgICAgICAgICAgICAg
c2V0KFZpcnR1YWxSZWdpc3Rlcihkc3QpLCB3ZWFrSlNDb25zdGFudChpbmZlcnJlZFZhbHVlKSk7
CisgICAgICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IGdldFByZWRpY3Rp
b24oKTsKKyAgICAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGRzdCksIGFkZFRvR3Jh
cGgoR2V0R2xvYmFsVmFyLCBPcEluZm8ob3BlcmFuZCksIE9wSW5mbyhwcmVkaWN0aW9uKSkpOwog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgY2FzZSBM
b2NhbENsb3N1cmVWYXI6CkBAIC0zNTA5LDcgKzM1NTEsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2Vy
OjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAgICAgdWlkID0gbnVsbHB0cjsKICAg
ICAgICAgICAgIAogICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBudWxscHRyOwot
ICAgICAgICAgICAgVmFyaWFibGVXYXRjaHBvaW50U2V0KiB3YXRjaHBvaW50cyA9IG51bGxwdHI7
CisgICAgICAgICAgICBXYXRjaHBvaW50U2V0KiB3YXRjaHBvaW50cyA9IG51bGxwdHI7CiAgICAg
ICAgICAgICB1aW50cHRyX3Qgb3BlcmFuZDsKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAg
ICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVk
QmxvY2stPm1fbG9jayk7CkBAIC0zNTUyLDggKzM1OTQsMTAgQEAgYm9vbCBCeXRlQ29kZVBhcnNl
cjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICBOb2RlKiB2YWx1ZU5vZGUgPSBnZXQoVmlydHVhbFJlZ2lzdGVyKHZhbHVlKSk7CiAgICAgICAg
ICAgICAgICAgYWRkVG9HcmFwaChQdXRHbG9iYWxWYXIsIE9wSW5mbyhvcGVyYW5kKSwgdmFsdWVO
b2RlKTsKLSAgICAgICAgICAgICAgICBpZiAod2F0Y2hwb2ludHMgJiYgd2F0Y2hwb2ludHMtPnN0
YXRlKCkgIT0gSXNJbnZhbGlkYXRlZCkKLSAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChO
b3RpZnlXcml0ZSwgT3BJbmZvKHdhdGNocG9pbnRzKSwgdmFsdWVOb2RlKTsKKyAgICAgICAgICAg
ICAgICBpZiAod2F0Y2hwb2ludHMgJiYgd2F0Y2hwb2ludHMtPnN0YXRlKCkgIT0gSXNJbnZhbGlk
YXRlZCkgeworICAgICAgICAgICAgICAgICAgICAvLyBNdXN0IGhhcHBlbiBhZnRlciB0aGUgc3Rv
cmUuIFNlZSBjb21tZW50IGZvciBHZXRHbG9iYWxWYXIuCisgICAgICAgICAgICAgICAgICAgIGFk
ZFRvR3JhcGgoTm90aWZ5V3JpdGUsIE9wSW5mbyh3YXRjaHBvaW50cykpOworICAgICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgICAgICAvLyBLZWVwIHNjb3BlIGFsaXZlIHVudGlsIGFmdGVyIHB1
dC4KICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKFBoYW50b20sIGdldChWaXJ0dWFsUmVnaXN0
ZXIoc2NvcGUpKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0zNTY0LDEwICszNjA4LDEy
IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAg
ICAgICBOb2RlKiBzY29wZU5vZGUgPSBnZXQoVmlydHVhbFJlZ2lzdGVyKHNjb3BlKSk7CiAgICAg
ICAgICAgICAgICAgTm9kZSogdmFsdWVOb2RlID0gZ2V0KFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSkp
OwogCi0gICAgICAgICAgICAgICAgaWYgKHdhdGNocG9pbnRzICYmIHdhdGNocG9pbnRzLT5zdGF0
ZSgpICE9IElzSW52YWxpZGF0ZWQpCi0gICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoTm90
aWZ5V3JpdGUsIE9wSW5mbyh3YXRjaHBvaW50cyksIHZhbHVlTm9kZSk7Ci0KICAgICAgICAgICAg
ICAgICBhZGRUb0dyYXBoKFB1dENsb3N1cmVWYXIsIE9wSW5mbyhvcGVyYW5kKSwgc2NvcGVOb2Rl
LCB2YWx1ZU5vZGUpOworCisgICAgICAgICAgICAgICAgaWYgKHdhdGNocG9pbnRzICYmIHdhdGNo
cG9pbnRzLT5zdGF0ZSgpICE9IElzSW52YWxpZGF0ZWQpIHsKKyAgICAgICAgICAgICAgICAgICAg
Ly8gTXVzdCBoYXBwZW4gYWZ0ZXIgdGhlIHN0b3JlLiBTZWUgY29tbWVudCBmb3IgR2V0R2xvYmFs
VmFyLgorICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKE5vdGlmeVdyaXRlLCBPcEluZm8o
d2F0Y2hwb2ludHMpKTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBjYXNlIER5bmFtaWM6CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwCShyZXZpc2lvbiAxODI0
OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTk2LDcgKzk2LDYgQEAgQ2FwYWJpbGl0eUxldmVsIGNhcGFiaWxpdHlM
ZXZlbChPcGNvZGVJRAogICAgIAogICAgIHN3aXRjaCAob3Bjb2RlSUQpIHsKICAgICBjYXNlIG9w
X2VudGVyOgotICAgIGNhc2Ugb3BfdG91Y2hfZW50cnk6CiAgICAgY2FzZSBvcF90b190aGlzOgog
ICAgIGNhc2Ugb3BfY2hlY2tfdGR6OgogICAgIGNhc2Ugb3BfY3JlYXRlX3RoaXM6CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkocmV2aXNpb24gMTgyNDk4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTg1OCwxMSArODU4LDE3IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgs
IE5vZGUqIG5vZGUKICAgICBjYXNlIE5ld1N0cmluZ09iamVjdDoKICAgICBjYXNlIFBoYW50b21O
ZXdPYmplY3Q6CiAgICAgY2FzZSBNYXRlcmlhbGl6ZU5ld09iamVjdDoKLSAgICBjYXNlIE5ld0Z1
bmN0aW9uOgogICAgICAgICByZWFkKEhlYXBPYmplY3RDb3VudCk7CiAgICAgICAgIHdyaXRlKEhl
YXBPYmplY3RDb3VudCk7CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCisgICAgY2FzZSBOZXdG
dW5jdGlvbjoKKyAgICAgICAgaWYgKG5vZGUtPmNhc3RPcGVyYW5kPEZ1bmN0aW9uRXhlY3V0YWJs
ZSo+KCktPmZ1bmN0aW9uUmVhbGxvY2F0aW9uV2F0Y2hwb2ludFNldCgpLmlzU3RpbGxWYWxpZCgp
KQorICAgICAgICAgICAgd3JpdGUoV2F0Y2hwb2ludF9maXJlKTsKKyAgICAgICAgcmVhZChIZWFw
T2JqZWN0Q291bnQpOworICAgICAgICB3cml0ZShIZWFwT2JqZWN0Q291bnQpOworICAgICAgICBy
ZXR1cm47CisKICAgICBjYXNlIFJlZ0V4cEV4ZWM6CiAgICAgY2FzZSBSZWdFeHBUZXN0OgogICAg
ICAgICByZWFkKFJlZ0V4cFN0YXRlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
R3JhcGguY3BwCShyZXZpc2lvbiAxODI0OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzExLDggKzMxMSw4IEBAIHZvaWQgR3Jh
cGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwgY29uc3QKICAgICAgICAgb3V0LnByaW50KGNvbW1h
LCAiXiIsIG5vZGUtPnBoaSgpLT5pbmRleCgpKTsKICAgICBpZiAobm9kZS0+aGFzRXhlY3V0aW9u
Q291bnRlcigpKQogICAgICAgICBvdXQucHJpbnQoY29tbWEsIFJhd1BvaW50ZXIobm9kZS0+ZXhl
Y3V0aW9uQ291bnRlcigpKSk7Ci0gICAgaWYgKG5vZGUtPmhhc1ZhcmlhYmxlV2F0Y2hwb2ludFNl
dCgpKQotICAgICAgICBvdXQucHJpbnQoY29tbWEsIFJhd1BvaW50ZXIobm9kZS0+dmFyaWFibGVX
YXRjaHBvaW50U2V0KCkpKTsKKyAgICBpZiAobm9kZS0+aGFzV2F0Y2hwb2ludFNldCgpKQorICAg
ICAgICBvdXQucHJpbnQoY29tbWEsIFJhd1BvaW50ZXIobm9kZS0+d2F0Y2hwb2ludFNldCgpKSk7
CiAgICAgaWYgKG5vZGUtPmhhc1N0b3JhZ2VQb2ludGVyKCkpCiAgICAgICAgIG91dC5wcmludChj
b21tYSwgUmF3UG9pbnRlcihub2RlLT5zdG9yYWdlUG9pbnRlcigpKSk7CiAgICAgaWYgKG5vZGUt
Pmhhc09iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEoKSkKQEAgLTEwMjYsNiArMTAyNiw4IEBAIEpT
VmFsdWUgR3JhcGg6OnRyeUdldENvbnN0YW50UHJvcGVydHkoY28KIAogSlNWYWx1ZSBHcmFwaDo6
dHJ5R2V0Q29uc3RhbnRDbG9zdXJlVmFyKEpTVmFsdWUgYmFzZSwgU2NvcGVPZmZzZXQgb2Zmc2V0
KQogeworICAgIC8vIFRoaXMgaGFzIGFuIGF3ZXNvbWUgY29uY3VycmVuY3kgc3RvcnkuIFNlZSBj
b21tZW50IGZvciBHZXRHbG9iYWxWYXIgaW4gQnl0ZUNvZGVQYXJzZXIuCisgICAgCiAgICAgaWYg
KCFiYXNlKQogICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwogICAgIApAQCAtMTAzNCwyNCArMTAz
NiwyOCBAQCBKU1ZhbHVlIEdyYXBoOjp0cnlHZXRDb25zdGFudENsb3N1cmVWYXIoCiAgICAgICAg
IHJldHVybiBKU1ZhbHVlKCk7CiAgICAgCiAgICAgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlID0g
YWN0aXZhdGlvbi0+c3ltYm9sVGFibGUoKTsKLSAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tl
cihzeW1ib2xUYWJsZS0+bV9sb2NrKTsKLSAgICAKLSAgICBpZiAoc3ltYm9sVGFibGUtPm1fZnVu
Y3Rpb25FbnRlcmVkT25jZS5oYXNCZWVuSW52YWxpZGF0ZWQoKSkKLSAgICAgICAgcmV0dXJuIEpT
VmFsdWUoKTsKLSAgICAKLSAgICBTeW1ib2xUYWJsZUVudHJ5KiBlbnRyeSA9IHN5bWJvbFRhYmxl
LT5lbnRyeUZvcihsb2NrZXIsIG9mZnNldCk7Ci0gICAgaWYgKCFlbnRyeSkKLSAgICAgICAgcmV0
dXJuIEpTVmFsdWUoKTsKLSAgICAKLSAgICBWYXJpYWJsZVdhdGNocG9pbnRTZXQqIHNldCA9IGVu
dHJ5LT53YXRjaHBvaW50U2V0KCk7Ci0gICAgaWYgKCFzZXQpCi0gICAgICAgIHJldHVybiBKU1Zh
bHVlKCk7Ci0gICAgCi0gICAgSlNWYWx1ZSB2YWx1ZSA9IHNldC0+aW5mZXJyZWRWYWx1ZSgpOwot
ICAgIGlmICghdmFsdWUpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CisgICAgSlNWYWx1ZSB2
YWx1ZTsKKyAgICBXYXRjaHBvaW50U2V0KiBzZXQ7CisgICAgeworICAgICAgICBDb25jdXJyZW50
SklUTG9ja2VyIGxvY2tlcihzeW1ib2xUYWJsZS0+bV9sb2NrKTsKKyAgICAgICAgCisgICAgICAg
IFN5bWJvbFRhYmxlRW50cnkqIGVudHJ5ID0gc3ltYm9sVGFibGUtPmVudHJ5Rm9yKGxvY2tlciwg
b2Zmc2V0KTsKKyAgICAgICAgaWYgKCFlbnRyeSkKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVl
KCk7CisgICAgICAgIAorICAgICAgICBzZXQgPSBlbnRyeS0+d2F0Y2hwb2ludFNldCgpOworICAg
ICAgICBpZiAoIXNldCkKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CisgICAgICAgIAor
ICAgICAgICBpZiAoc2V0LT5zdGF0ZSgpICE9IElzV2F0Y2hlZCkKKyAgICAgICAgICAgIHJldHVy
biBKU1ZhbHVlKCk7CisgICAgICAgIAorICAgICAgICBBU1NFUlQoZW50cnktPnNjb3BlT2Zmc2V0
KCkgPT0gb2Zmc2V0KTsKKyAgICAgICAgdmFsdWUgPSBhY3RpdmF0aW9uLT52YXJpYWJsZUF0KG9m
ZnNldCkuZ2V0KCk7CisgICAgICAgIGlmICghdmFsdWUpCisgICAgICAgICAgICByZXR1cm4gSlNW
YWx1ZSgpOworICAgIH0KICAgICAKLSAgICB3YXRjaHBvaW50cygpLmFkZExhemlseShzeW1ib2xU
YWJsZS0+bV9mdW5jdGlvbkVudGVyZWRPbmNlKTsKICAgICB3YXRjaHBvaW50cygpLmFkZExhemls
eShzZXQpOwogICAgIAogICAgIHJldHVybiB2YWx1ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHTm9kZS5oCShyZXZpc2lvbiAxODI0OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTIxOSwxNCArMTIxOSwxNCBAQCBzdHJ1
Y3QgTm9kZSB7CiAgICAgICAgIG1fb3BJbmZvID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4odmFs
dWUpOwogICAgIH0KICAgICAKLSAgICBib29sIGhhc1ZhcmlhYmxlV2F0Y2hwb2ludFNldCgpCisg
ICAgYm9vbCBoYXNXYXRjaHBvaW50U2V0KCkKICAgICB7CiAgICAgICAgIHJldHVybiBvcCgpID09
IE5vdGlmeVdyaXRlOwogICAgIH0KICAgICAKLSAgICBWYXJpYWJsZVdhdGNocG9pbnRTZXQqIHZh
cmlhYmxlV2F0Y2hwb2ludFNldCgpCisgICAgV2F0Y2hwb2ludFNldCogd2F0Y2hwb2ludFNldCgp
CiAgICAgewotICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxWYXJpYWJsZVdhdGNocG9p
bnRTZXQqPihtX29wSW5mbyk7CisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFdhdGNo
cG9pbnRTZXQqPihtX29wSW5mbyk7CiAgICAgfQogICAgIAogICAgIGJvb2wgaGFzU3RvcmFnZVBv
aW50ZXIoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMu
Y3BwCShyZXZpc2lvbiAxODI0OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09w
ZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDc3LDEzICsxMDc3LDEyIEBAIGNoYXIq
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uU3dpdGNoU3RyaW4KICAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8Y2hhcio+KGV4ZWMtPmNvZGVCbG9jaygpLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJ
bmRleCkuY3RpRm9yVmFsdWUoc3RyaW5nLT52YWx1ZShleGVjKS5pbXBsKCkpLmV4ZWN1dGFibGVB
ZGRyZXNzKCkpOwogfQogCi12b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTm90aWZ5V3JpdGUo
RXhlY1N0YXRlKiBleGVjLCBWYXJpYWJsZVdhdGNocG9pbnRTZXQqIHNldCwgRW5jb2RlZEpTVmFs
dWUgZW5jb2RlZFZhbHVlKQordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5vdGlmeVdyaXRl
KEV4ZWNTdGF0ZSogZXhlYywgV2F0Y2hwb2ludFNldCogc2V0KQogewogICAgIFZNJiB2bSA9IGV4
ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwot
ICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKIAotICAg
IHNldC0+bm90aWZ5V3JpdGUodm0sIHZhbHVlLCAiRXhlY3V0ZWQgTm90aWZ5V3JpdGUiKTsKKyAg
ICBzZXQtPnRvdWNoKCJFeGVjdXRlZCBOb3RpZnlXcml0ZSIpOwogfQogCiB2b2lkIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uVGhyb3dTdGFja092ZXJmbG93Rm9yVmFyYXJncyhFeGVjU3RhdGUqIGV4
ZWMpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAkocmV2
aXNpb24gMTgyNDk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25z
LmgJKHdvcmtpbmcgY29weSkKQEAgLTEyNyw3ICsxMjcsNyBAQCBKU0NlbGwqIEpJVF9PUEVSQVRJ
T04gb3BlcmF0aW9uTWFrZVJvcGUyCiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTWFr
ZVJvcGUzKEV4ZWNTdGF0ZSosIEpTU3RyaW5nKiwgSlNTdHJpbmcqLCBKU1N0cmluZyopOwogY2hh
ciogSklUX09QRVJBVElPTiBvcGVyYXRpb25GaW5kU3dpdGNoSW1tVGFyZ2V0Rm9yRG91YmxlKEV4
ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBzaXplX3QgdGFibGVJbmRleCk7CiBjaGFyKiBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvblN3aXRjaFN0cmluZyhFeGVjU3RhdGUqLCBzaXplX3QgdGFibGVJ
bmRleCwgSlNTdHJpbmcqKTsKLXZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25Ob3RpZnlXcml0
ZShFeGVjU3RhdGUqLCBWYXJpYWJsZVdhdGNocG9pbnRTZXQqLCBFbmNvZGVkSlNWYWx1ZSk7Cit2
b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTm90aWZ5V3JpdGUoRXhlY1N0YXRlKiwgV2F0Y2hw
b2ludFNldCopOwogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRocm93U3RhY2tPdmVyZmxv
d0ZvclZhcmFyZ3MoRXhlY1N0YXRlKikgV1RGX0lOVEVSTkFMOwogaW50MzJfdCBKSVRfT1BFUkFU
SU9OIG9wZXJhdGlvblNpemVPZlZhcmFyZ3MoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgYXJn
dW1lbnRzLCBpbnQzMl90IGZpcnN0VmFyQXJnT2Zmc2V0KTsKIHZvaWQgSklUX09QRVJBVElPTiBv
cGVyYXRpb25Mb2FkVmFyYXJncyhFeGVjU3RhdGUqLCBpbnQzMl90IGZpcnN0RWxlbWVudERlc3Qs
IEVuY29kZWRKU1ZhbHVlIGFyZ3VtZW50cywgaW50MzJfdCBvZmZzZXQsIGludDMyX3QgbGVuZ3Ro
LCBpbnQzMl90IG1hbmRhdG9yeU1pbmltdW0pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdQbGFuLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR1BsYW4uY3BwCShyZXZpc2lvbiAxODI0OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1BsYW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjcsNiArMjY3LDcgQEAgUGxhbjo6
Q29tcGlsYXRpb25QYXRoIFBsYW46OmNvbXBpbGVJblRocgogICAgIHBlcmZvcm1DRkEoZGZnKTsK
ICAgICBwZXJmb3JtQ29uc3RhbnRGb2xkaW5nKGRmZyk7CiAgICAgYm9vbCBjaGFuZ2VkID0gZmFs
c2U7CisgICAgY2hhbmdlZCB8PSBwZXJmb3JtU3RyZW5ndGhSZWR1Y3Rpb24oZGZnKTsKICAgICBj
aGFuZ2VkIHw9IHBlcmZvcm1DRkdTaW1wbGlmaWNhdGlvbihkZmcpOwogICAgIGNoYW5nZWQgfD0g
cGVyZm9ybUxvY2FsQ1NFKGRmZyk7CiAgICAgCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHJldmlzaW9uIDE4MjQ5
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTM5ODcsMzIgKzM5ODcsNyBAQCB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgfQogCiAgICAgY2FzZSBOb3RpZnlXcml0ZTog
ewotICAgICAgICBWYXJpYWJsZVdhdGNocG9pbnRTZXQqIHNldCA9IG5vZGUtPnZhcmlhYmxlV2F0
Y2hwb2ludFNldCgpOwotICAgIAotICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBu
b2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIEdQUlJlZyB2YWx1ZVRhZ0dQUiA9IHZhbHVlLnRhZ0dQ
UigpOwotICAgICAgICBHUFJSZWcgdmFsdWVQYXlsb2FkR1BSID0gdmFsdWUucGF5bG9hZEdQUigp
OwotICAgIAotICAgICAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKLSAgICAgICAgR1BSUmVn
IHRlbXBHUFIgPSB0ZW1wLmdwcigpOwotICAgIAotICAgICAgICBtX2ppdC5sb2FkOChzZXQtPmFk
ZHJlc3NPZlN0YXRlKCksIHRlbXBHUFIpOwotICAgIAotICAgICAgICBKSVRDb21waWxlcjo6SnVt
cCBpc0RvbmUgPSBtX2ppdC5icmFuY2gzMihKSVRDb21waWxlcjo6RXF1YWwsIHRlbXBHUFIsIFRy
dXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSk7Ci0gICAgICAgIEpJVENvbXBpbGVyOjpKdW1wTGlz
dCBub3RpZnlTbG93OwotICAgICAgICBub3RpZnlTbG93LmFwcGVuZChtX2ppdC5icmFuY2gzMigK
LSAgICAgICAgICAgIEpJVENvbXBpbGVyOjpOb3RFcXVhbCwKLSAgICAgICAgICAgIEpJVENvbXBp
bGVyOjpBYnNvbHV0ZUFkZHJlc3Moc2V0LT5hZGRyZXNzT2ZJbmZlcnJlZFZhbHVlKCktPnBheWxv
YWRQb2ludGVyKCkpLAotICAgICAgICAgICAgdmFsdWVQYXlsb2FkR1BSKSk7Ci0gICAgICAgIG5v
dGlmeVNsb3cuYXBwZW5kKG1faml0LmJyYW5jaDMyKAotICAgICAgICAgICAgSklUQ29tcGlsZXI6
Ok5vdEVxdWFsLCAKLSAgICAgICAgICAgIEpJVENvbXBpbGVyOjpBYnNvbHV0ZUFkZHJlc3Moc2V0
LT5hZGRyZXNzT2ZJbmZlcnJlZFZhbHVlKCktPnRhZ1BvaW50ZXIoKSksCi0gICAgICAgICAgICB2
YWx1ZVRhZ0dQUikpOwotICAgICAgICBhZGRTbG93UGF0aEdlbmVyYXRvcigKLSAgICAgICAgICAg
IHNsb3dQYXRoQ2FsbChub3RpZnlTbG93LCB0aGlzLCBvcGVyYXRpb25Ob3RpZnlXcml0ZSwgTm9S
ZXN1bHQsIHNldCwgdmFsdWVUYWdHUFIsIHZhbHVlUGF5bG9hZEdQUikpOwotICAgICAgICBpc0Rv
bmUubGluaygmbV9qaXQpOwotICAgIAotICAgICAgICBub1Jlc3VsdChub2RlKTsKKyAgICAgICAg
Y29tcGlsZU5vdGlmeVdyaXRlKG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNw
cAkocmV2aXNpb24gMTgyNDk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVDY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAxOSwyNiArNDAxOSw3IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICB9CiAKICAgICBjYXNl
IE5vdGlmeVdyaXRlOiB7Ci0gICAgICAgIFZhcmlhYmxlV2F0Y2hwb2ludFNldCogc2V0ID0gbm9k
ZS0+dmFyaWFibGVXYXRjaHBvaW50U2V0KCk7Ci0gICAgCi0gICAgICAgIEpTVmFsdWVPcGVyYW5k
IHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgR1BSUmVnIHZhbHVlR1BSID0g
dmFsdWUuZ3ByKCk7Ci0gICAgCi0gICAgICAgIEdQUlRlbXBvcmFyeSB0ZW1wKHRoaXMpOwotICAg
ICAgICBHUFJSZWcgdGVtcEdQUiA9IHRlbXAuZ3ByKCk7Ci0gICAgCi0gICAgICAgIG1faml0Lmxv
YWQ4KHNldC0+YWRkcmVzc09mU3RhdGUoKSwgdGVtcEdQUik7Ci0gICAgCi0gICAgICAgIEpJVENv
bXBpbGVyOjpKdW1wIGlzRG9uZSA9Ci0gICAgICAgICAgICBtX2ppdC5icmFuY2gzMihKSVRDb21w
aWxlcjo6RXF1YWwsIHRlbXBHUFIsIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSk7Ci0gICAg
ICAgIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dDYXNlID0gbV9qaXQuYnJhbmNoNjQoSklUQ29tcGls
ZXI6Ok5vdEVxdWFsLAotICAgICAgICAgICAgSklUQ29tcGlsZXI6OkFic29sdXRlQWRkcmVzcyhz
ZXQtPmFkZHJlc3NPZkluZmVycmVkVmFsdWUoKSksIHZhbHVlR1BSKTsKLSAgICAgICAgaXNEb25l
LmxpbmsoJm1faml0KTsKLSAgICAKLSAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCi0gICAg
ICAgICAgICBzbG93UGF0aENhbGwoc2xvd0Nhc2UsIHRoaXMsIG9wZXJhdGlvbk5vdGlmeVdyaXRl
LCBOb1Jlc3VsdCwgc2V0LCB2YWx1ZUdQUikpOwotCi0gICAgICAgIG5vUmVzdWx0KG5vZGUpOwor
ICAgICAgICBjb21waWxlTm90aWZ5V3JpdGUobm9kZSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0K
IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VC5jcHAJKHJldmlzaW9uIDE4MjQ5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
U3BlY3VsYXRpdmVKSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MzY3LDggKzQzNjcsMTMgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU5ld0Z1bmN0aW9uKAogICAgIFNwZWN1bGF0ZUNl
bGxPcGVyYW5kIHNjb3BlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKICAgICBHUFJSZWcgc2NvcGVH
UFIgPSBzY29wZS5ncHIoKTsKICAgICBmbHVzaFJlZ2lzdGVycygpOwotICAgIGNhbGxPcGVyYXRp
b24oCi0gICAgICAgIG9wZXJhdGlvbk5ld0Z1bmN0aW9uLCByZXN1bHRHUFIsIHNjb3BlR1BSLCBu
b2RlLT5jYXN0T3BlcmFuZDxGdW5jdGlvbkV4ZWN1dGFibGUqPigpKTsKKyAgICBGdW5jdGlvbkV4
ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBub2RlLT5jYXN0T3BlcmFuZDxGdW5jdGlvbkV4ZWN1dGFi
bGUqPigpOworICAgIEpfSklUT3BlcmF0aW9uX0VKc2NDIGZ1bmN0aW9uOworICAgIGlmIChleGVj
dXRhYmxlLT5mdW5jdGlvblJlYWxsb2NhdGlvbldhdGNocG9pbnRTZXQoKS5pc1N0aWxsVmFsaWQo
KSkKKyAgICAgICAgZnVuY3Rpb24gPSBvcGVyYXRpb25OZXdGdW5jdGlvbjsKKyAgICBlbHNlCisg
ICAgICAgIGZ1bmN0aW9uID0gb3BlcmF0aW9uTmV3RnVuY3Rpb25XaXRoSW52YWxpZGF0ZWRSZWFs
bG9jYXRpb25XYXRjaHBvaW50OworICAgIGNhbGxPcGVyYXRpb24oZnVuY3Rpb24sIHJlc3VsdEdQ
Uiwgc2NvcGVHUFIsIGV4ZWN1dGFibGUpOwogICAgIGNlbGxSZXN1bHQocmVzdWx0R1BSLCBub2Rl
KTsKIH0KIApAQCAtNDcxNCw2ICs0NzE5LDIxIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBp
bGVDcmVhdGVDbG9uZWQKICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CiB9CiAKK3Zv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVOb3RpZnlXcml0ZShOb2RlKiBub2RlKQoreworICAg
IFdhdGNocG9pbnRTZXQqIHNldCA9IG5vZGUtPndhdGNocG9pbnRTZXQoKTsKKyAgICAKKyAgICBK
SVRDb21waWxlcjo6SnVtcCBzbG93Q2FzZSA9IG1faml0LmJyYW5jaDgoCisgICAgICAgIEpJVENv
bXBpbGVyOjpOb3RFcXVhbCwKKyAgICAgICAgSklUQ29tcGlsZXI6OkFic29sdXRlQWRkcmVzcyhz
ZXQtPmFkZHJlc3NPZlN0YXRlKCkpLAorICAgICAgICBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRl
ZCkpOworICAgIAorICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAorICAgICAgICBzbG93UGF0aENh
bGwoc2xvd0Nhc2UsIHRoaXMsIG9wZXJhdGlvbk5vdGlmeVdyaXRlLCBOb1Jlc3VsdCwgc2V0KSk7
CisgICAgCisgICAgbm9SZXN1bHQobm9kZSk7Cit9CisKIGJvb2wgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVSZWdFeHBFeGVjKE5vZGUqIG5vZGUpCiB7CiAgICAgdW5zaWduZWQgYnJhbmNoSW5kZXhJ
bkJsb2NrID0gZGV0ZWN0UGVlcEhvbGVCcmFuY2goKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHJldmlzaW9uIDE4MjQ5OCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5
KQpAQCAtMTQ2Niw2ICsxNDY2LDEyIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGFwcGVuZENh
bGwob3BlcmF0aW9uKTsKICAgICB9CiAKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0
aW9uKFZfSklUT3BlcmF0aW9uX0VXcyBvcGVyYXRpb24sIFdhdGNocG9pbnRTZXQqIHdhdGNocG9p
bnRTZXQpCisgICAgeworICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUo
VHJ1c3RlZEltbVB0cih3YXRjaHBvaW50U2V0KSk7CisgICAgICAgIHJldHVybiBhcHBlbmRDYWxs
KG9wZXJhdGlvbik7CisgICAgfQorCiAgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlv
bihEX0pJVE9wZXJhdGlvbl9FSiBvcGVyYXRpb24sIEZQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcx
KQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEp
OwpAQCAtMjIxMyw2ICsyMjE5LDcgQEAgcHVibGljOgogICAgIHZvaWQgY29tcGlsZVB1dFRvQXJn
dW1lbnRzKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVDcmVhdGVTY29wZWRBcmd1bWVudHMoTm9k
ZSopOwogICAgIHZvaWQgY29tcGlsZUNyZWF0ZUNsb25lZEFyZ3VtZW50cyhOb2RlKik7CisgICAg
dm9pZCBjb21waWxlTm90aWZ5V3JpdGUoTm9kZSopOwogICAgIGJvb2wgY29tcGlsZVJlZ0V4cEV4
ZWMoTm9kZSopOwogICAgIAogICAgIEpJVENvbXBpbGVyOjpKdW1wIGJyYW5jaElzQ2VsbChKU1Zh
bHVlUmVncyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmFyZ3NGb3J3
YXJkaW5nUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZS5jcHAJKHJldmlzaW9uIDE4MjQ5OCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMyLDYgKzMyLDcgQEAKICNpbmNsdWRlICJERkdDbG9iYmVyaXplLmgiCiAj
aW5jbHVkZSAiREZHR3JhcGguaCIKICNpbmNsdWRlICJERkdQaGFzZS5oIgorI2luY2x1ZGUgIkpT
Q0lubGluZXMuaCIKIAogbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEludHJpbnNpY1JlcG9zaXRvcnkuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEludHJpbnNpY1JlcG9zaXRvcnku
aAkocmV2aXNpb24gMTgyNDk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbnRy
aW5zaWNSZXBvc2l0b3J5LmgJKHdvcmtpbmcgY29weSkKQEAgLTEwNiw2ICsxMDYsNyBAQCBuYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIEZUTCB7CiAgICAgbWFjcm8oVl9KSVRPcGVyYXRpb25fRUMs
IGZ1bmN0aW9uVHlwZSh2b2lkVHlwZSwgaW50UHRyLCBpbnRQdHIpKSBcCiAgICAgbWFjcm8oVl9K
SVRPcGVyYXRpb25fRUNiLCBmdW5jdGlvblR5cGUodm9pZFR5cGUsIGludFB0ciwgaW50UHRyKSkg
XAogICAgIG1hY3JvKFZfSklUT3BlcmF0aW9uX0VWd3NKLCBmdW5jdGlvblR5cGUodm9pZFR5cGUs
IGludFB0ciwgaW50UHRyLCBpbnQ2NCkpIFwKKyAgICBtYWNybyhWX0pJVE9wZXJhdGlvbl9FV3Ms
IGZ1bmN0aW9uVHlwZSh2b2lkVHlwZSwgaW50UHRyLCBpbnRQdHIpKSBcCiAgICAgbWFjcm8oVl9K
SVRPcGVyYXRpb25fRVpKWlpaLCBmdW5jdGlvblR5cGUodm9pZFR5cGUsIGludFB0ciwgaW50MzIs
IGludDY0LCBpbnQzMiwgaW50MzIsIGludDMyKSkgXAogICAgIG1hY3JvKFZfSklUT3BlcmF0aW9u
X0osIGZ1bmN0aW9uVHlwZSh2b2lkVHlwZSwgaW50NjQpKSBcCiAgICAgbWFjcm8oVl9KSVRPcGVy
YXRpb25fWiwgZnVuY3Rpb25UeXBlKHZvaWRUeXBlLCBpbnQzMikpIFwKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCShyZXZpc2lvbiAx
ODI0OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzc4MywyOSArMzc4MywxOSBAQCBwcml2YXRlOgogICAgIAog
ICAgIHZvaWQgY29tcGlsZU5vdGlmeVdyaXRlKCkKICAgICB7Ci0gICAgICAgIFZhcmlhYmxlV2F0
Y2hwb2ludFNldCogc2V0ID0gbV9ub2RlLT52YXJpYWJsZVdhdGNocG9pbnRTZXQoKTsKLSAgICAg
ICAgCi0gICAgICAgIExWYWx1ZSB2YWx1ZSA9IGxvd0pTVmFsdWUobV9ub2RlLT5jaGlsZDEoKSk7
CisgICAgICAgIFdhdGNocG9pbnRTZXQqIHNldCA9IG1fbm9kZS0+d2F0Y2hwb2ludFNldCgpOwog
ICAgICAgICAKICAgICAgICAgTEJhc2ljQmxvY2sgaXNOb3RJbnZhbGlkYXRlZCA9IEZUTF9ORVdf
QkxPQ0sobV9vdXQsICgiTm90aWZ5V3JpdGUgbm90IGludmFsaWRhdGVkIGNhc2UiKSk7Ci0gICAg
ICAgIExCYXNpY0Jsb2NrIG5vdGlmeVNsb3cgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIk5vdGlm
eVdyaXRlIG5vdGlmeSBzbG93IGNhc2UiKSk7CiAgICAgICAgIExCYXNpY0Jsb2NrIGNvbnRpbnVh
dGlvbiA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiTm90aWZ5V3JpdGUgY29udGludWF0aW9uIikp
OwogICAgICAgICAKICAgICAgICAgTFZhbHVlIHN0YXRlID0gbV9vdXQubG9hZDgobV9vdXQuYWJz
b2x1dGUoc2V0LT5hZGRyZXNzT2ZTdGF0ZSgpKSk7Ci0gICAgICAgIAogICAgICAgICBtX291dC5i
cmFuY2goCiAgICAgICAgICAgICBtX291dC5lcXVhbChzdGF0ZSwgbV9vdXQuY29uc3RJbnQ4KElz
SW52YWxpZGF0ZWQpKSwKICAgICAgICAgICAgIHVzdWFsbHkoY29udGludWF0aW9uKSwgcmFyZWx5
KGlzTm90SW52YWxpZGF0ZWQpKTsKICAgICAgICAgCi0gICAgICAgIExCYXNpY0Jsb2NrIGxhc3RO
ZXh0ID0gbV9vdXQuYXBwZW5kVG8oaXNOb3RJbnZhbGlkYXRlZCwgbm90aWZ5U2xvdyk7Ci0KLSAg
ICAgICAgbV9vdXQuYnJhbmNoKAotICAgICAgICAgICAgbV9vdXQuZXF1YWwodmFsdWUsIG1fb3V0
LmxvYWQ2NChtX291dC5hYnNvbHV0ZShzZXQtPmFkZHJlc3NPZkluZmVycmVkVmFsdWUoKSkpKSwK
LSAgICAgICAgICAgIHVuc3VyZShjb250aW51YXRpb24pLCB1bnN1cmUobm90aWZ5U2xvdykpOwot
Ci0gICAgICAgIG1fb3V0LmFwcGVuZFRvKG5vdGlmeVNsb3csIGNvbnRpbnVhdGlvbik7CisgICAg
ICAgIExCYXNpY0Jsb2NrIGxhc3ROZXh0ID0gbV9vdXQuYXBwZW5kVG8oaXNOb3RJbnZhbGlkYXRl
ZCwgY29udGludWF0aW9uKTsKIAotICAgICAgICB2bUNhbGwobV9vdXQub3BlcmF0aW9uKG9wZXJh
dGlvbk5vdGlmeVdyaXRlKSwgbV9jYWxsRnJhbWUsIG1fb3V0LmNvbnN0SW50UHRyKHNldCksIHZh
bHVlKTsKKyAgICAgICAgdm1DYWxsKG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25Ob3RpZnlXcml0
ZSksIG1fY2FsbEZyYW1lLCBtX291dC5jb25zdEludFB0cihzZXQpKTsKICAgICAgICAgbV9vdXQu
anVtcChjb250aW51YXRpb24pOwogICAgICAgICAKICAgICAgICAgbV9vdXQuYXBwZW5kVG8oY29u
dGludWF0aW9uLCBsYXN0TmV4dCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJw
cmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAJKHJldmlzaW9uIDE4MjQ5OCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTg5LDYgKzg5LDQ3IEBAIHVzaW5nIG5hbWVzcGFjZSBzdGQ7CiAKIG5hbWVzcGFjZSBK
U0MgewogCitTdHJpbmcgU3RhY2tGcmFtZTo6ZnJpZW5kbHlTb3VyY2VVUkwoKSBjb25zdAorewor
ICAgIFN0cmluZyB0cmFjZUxpbmU7CisgICAgCisgICAgc3dpdGNoIChjb2RlVHlwZSkgeworICAg
IGNhc2UgU3RhY2tGcmFtZUV2YWxDb2RlOgorICAgIGNhc2UgU3RhY2tGcmFtZUZ1bmN0aW9uQ29k
ZToKKyAgICBjYXNlIFN0YWNrRnJhbWVHbG9iYWxDb2RlOgorICAgICAgICBpZiAoIXNvdXJjZVVS
TC5pc0VtcHR5KCkpCisgICAgICAgICAgICB0cmFjZUxpbmUgPSBzb3VyY2VVUkwuaW1wbCgpOwor
ICAgICAgICBicmVhazsKKyAgICBjYXNlIFN0YWNrRnJhbWVOYXRpdmVDb2RlOgorICAgICAgICB0
cmFjZUxpbmUgPSAiW25hdGl2ZSBjb2RlXSI7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBy
ZXR1cm4gdHJhY2VMaW5lLmlzTnVsbCgpID8gZW1wdHlTdHJpbmcoKSA6IHRyYWNlTGluZTsKK30K
KworU3RyaW5nIFN0YWNrRnJhbWU6OmZyaWVuZGx5RnVuY3Rpb25OYW1lKENhbGxGcmFtZSogY2Fs
bEZyYW1lKSBjb25zdAoreworICAgIFN0cmluZyB0cmFjZUxpbmU7CisgICAgSlNPYmplY3QqIHN0
YWNrRnJhbWVDYWxsZWUgPSBjYWxsZWUuZ2V0KCk7CisKKyAgICBzd2l0Y2ggKGNvZGVUeXBlKSB7
CisgICAgY2FzZSBTdGFja0ZyYW1lRXZhbENvZGU6CisgICAgICAgIHRyYWNlTGluZSA9ICJldmFs
IGNvZGUiOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFN0YWNrRnJhbWVOYXRpdmVDb2RlOgor
ICAgICAgICBpZiAoY2FsbGVlKQorICAgICAgICAgICAgdHJhY2VMaW5lID0gZ2V0Q2FsY3VsYXRl
ZERpc3BsYXlOYW1lKGNhbGxGcmFtZSwgc3RhY2tGcmFtZUNhbGxlZSkuaW1wbCgpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFN0YWNrRnJhbWVGdW5jdGlvbkNvZGU6CisgICAgICAgIHRyYWNl
TGluZSA9IGdldENhbGN1bGF0ZWREaXNwbGF5TmFtZShjYWxsRnJhbWUsIHN0YWNrRnJhbWVDYWxs
ZWUpLmltcGwoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTdGFja0ZyYW1lR2xvYmFsQ29k
ZToKKyAgICAgICAgdHJhY2VMaW5lID0gImdsb2JhbCBjb2RlIjsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorICAgIHJldHVybiB0cmFjZUxpbmUuaXNOdWxsKCkgPyBlbXB0eVN0cmluZygpIDogdHJh
Y2VMaW5lOworfQorCiBKU1ZhbHVlIGV2YWwoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiB7CiAgICAg
aWYgKCFjYWxsRnJhbWUtPmFyZ3VtZW50Q291bnQoKSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5oCShyZXZpc2lvbiAxODI0OTgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaAkod29ya2lu
ZyBjb3B5KQpAQCAtOTAsNDUgKzkwLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHVuc2ln
bmVkIGJ5dGVjb2RlT2Zmc2V0OwogICAgICAgICBTdHJpbmcgc291cmNlVVJMOwogICAgICAgICBK
U19FWFBPUlRfUFJJVkFURSBTdHJpbmcgdG9TdHJpbmcoQ2FsbEZyYW1lKik7Ci0gICAgICAgIFN0
cmluZyBmcmllbmRseVNvdXJjZVVSTCgpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIFN0
cmluZyB0cmFjZUxpbmU7Ci0KLSAgICAgICAgICAgIHN3aXRjaCAoY29kZVR5cGUpIHsKLSAgICAg
ICAgICAgIGNhc2UgU3RhY2tGcmFtZUV2YWxDb2RlOgotICAgICAgICAgICAgY2FzZSBTdGFja0Zy
YW1lRnVuY3Rpb25Db2RlOgotICAgICAgICAgICAgY2FzZSBTdGFja0ZyYW1lR2xvYmFsQ29kZToK
LSAgICAgICAgICAgICAgICBpZiAoIXNvdXJjZVVSTC5pc0VtcHR5KCkpCi0gICAgICAgICAgICAg
ICAgICAgIHRyYWNlTGluZSA9IHNvdXJjZVVSTC5pbXBsKCk7Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICBjYXNlIFN0YWNrRnJhbWVOYXRpdmVDb2RlOgotICAgICAgICAgICAg
ICAgIHRyYWNlTGluZSA9ICJbbmF0aXZlIGNvZGVdIjsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiB0cmFjZUxpbmUuaXNOdWxsKCkgPyBl
bXB0eVN0cmluZygpIDogdHJhY2VMaW5lOwotICAgICAgICB9Ci0gICAgICAgIFN0cmluZyBmcmll
bmRseUZ1bmN0aW9uTmFtZShDYWxsRnJhbWUqIGNhbGxGcmFtZSkgY29uc3QKLSAgICAgICAgewot
ICAgICAgICAgICAgU3RyaW5nIHRyYWNlTGluZTsKLSAgICAgICAgICAgIEpTT2JqZWN0KiBzdGFj
a0ZyYW1lQ2FsbGVlID0gY2FsbGVlLmdldCgpOwotCi0gICAgICAgICAgICBzd2l0Y2ggKGNvZGVU
eXBlKSB7Ci0gICAgICAgICAgICBjYXNlIFN0YWNrRnJhbWVFdmFsQ29kZToKLSAgICAgICAgICAg
ICAgICB0cmFjZUxpbmUgPSAiZXZhbCBjb2RlIjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAg
ICAgICAgICAgIGNhc2UgU3RhY2tGcmFtZU5hdGl2ZUNvZGU6Ci0gICAgICAgICAgICAgICAgaWYg
KGNhbGxlZSkKLSAgICAgICAgICAgICAgICAgICAgdHJhY2VMaW5lID0gZ2V0Q2FsY3VsYXRlZERp
c3BsYXlOYW1lKGNhbGxGcmFtZSwgc3RhY2tGcmFtZUNhbGxlZSkuaW1wbCgpOwotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBTdGFja0ZyYW1lRnVuY3Rpb25Db2RlOgot
ICAgICAgICAgICAgICAgIHRyYWNlTGluZSA9IGdldENhbGN1bGF0ZWREaXNwbGF5TmFtZShjYWxs
RnJhbWUsIHN0YWNrRnJhbWVDYWxsZWUpLmltcGwoKTsKLSAgICAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgICAgIGNhc2UgU3RhY2tGcmFtZUdsb2JhbENvZGU6Ci0gICAgICAgICAgICAgICAg
dHJhY2VMaW5lID0gImdsb2JhbCBjb2RlIjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiB0cmFjZUxpbmUuaXNOdWxsKCkgPyBlbXB0eVN0
cmluZygpIDogdHJhY2VMaW5lOwotICAgICAgICB9CisgICAgICAgIFN0cmluZyBmcmllbmRseVNv
dXJjZVVSTCgpIGNvbnN0OworICAgICAgICBTdHJpbmcgZnJpZW5kbHlGdW5jdGlvbk5hbWUoQ2Fs
bEZyYW1lKikgY29uc3Q7CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgY29tcHV0ZUxp
bmVBbmRDb2x1bW4odW5zaWduZWQmIGxpbmUsIHVuc2lnbmVkJiBjb2x1bW4pOwogCiAgICAgcHJp
dmF0ZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDE4MjQ5OCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTA1LDYgKzEwNSwxNCBAQCB2b2lkIEpJVDo6ZW1pdEVudGVyT3B0aW1pemF0aW9uQ2hlY2soKQog
fQogI2VuZGlmCiAKK3ZvaWQgSklUOjplbWl0Tm90aWZ5V3JpdGUoV2F0Y2hwb2ludFNldCogc2V0
KQoreworICAgIGlmICghc2V0IHx8IHNldC0+c3RhdGUoKSA9PSBJc0ludmFsaWRhdGVkKQorICAg
ICAgICByZXR1cm47CisgICAgCisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChOb3RFcXVhbCwgQWJz
b2x1dGVBZGRyZXNzKHNldC0+YWRkcmVzc09mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFs
aWRhdGVkKSkpOworfQorCiB2b2lkIEpJVDo6YXNzZXJ0U3RhY2tQb2ludGVyT2Zmc2V0KCkKIHsK
ICAgICBpZiAoQVNTRVJUX0RJU0FCTEVEKQpAQCAtMTg5LDcgKzE5Nyw2IEBAIHZvaWQgSklUOjpw
cml2YXRlQ29tcGlsZU1haW5QYXNzKCkKICAgICAgICAgREVGSU5FX1NMT1dfT1AoaXNfb2JqZWN0
X29yX251bGwpCiAgICAgICAgIERFRklORV9TTE9XX09QKHR5cGVvZikKIAotICAgICAgICBERUZJ
TkVfT1Aob3BfdG91Y2hfZW50cnkpCiAgICAgICAgIERFRklORV9PUChvcF9hZGQpCiAgICAgICAg
IERFRklORV9PUChvcF9iaXRhbmQpCiAgICAgICAgIERFRklORV9PUChvcF9iaXRvcikKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkocmV2aXNpb24gMTgyNDk4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVQuaAkod29ya2luZyBjb3B5KQpAQCAtNDU3LDcgKzQ1Nyw2IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICAKICAgICAgICAgdm9pZCBhc3NlcnRTdGFja1BvaW50ZXJP
ZmZzZXQoKTsKIAotICAgICAgICB2b2lkIGVtaXRfb3BfdG91Y2hfZW50cnkoSW5zdHJ1Y3Rpb24q
KTsKICAgICAgICAgdm9pZCBlbWl0X29wX2FkZChJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lk
IGVtaXRfb3BfYml0YW5kKEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9iaXRv
cihJbnN0cnVjdGlvbiopOwpAQCAtNjQwLDEzICs2MzksOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgdm9pZCBlbWl0R2V0R2xvYmFsVmFyKHVpbnRwdHJfdCBvcGVyYW5kKTsKICAgICAgICAg
dm9pZCBlbWl0R2V0Q2xvc3VyZVZhcihpbnQgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kKTsKICAg
ICAgICAgdm9pZCBlbWl0UHV0R2xvYmFsUHJvcGVydHkodWludHB0cl90KiBvcGVyYW5kU2xvdCwg
aW50IHZhbHVlKTsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICB2b2lkIGVtaXROb3RpZnlX
cml0ZShSZWdpc3RlcklEIHZhbHVlLCBSZWdpc3RlcklEIHNjcmF0Y2gsIFZhcmlhYmxlV2F0Y2hw
b2ludFNldCopOwotI2Vsc2UKLSAgICAgICAgdm9pZCBlbWl0Tm90aWZ5V3JpdGUoUmVnaXN0ZXJJ
RCB0YWcsIFJlZ2lzdGVySUQgcGF5bG9hZCwgUmVnaXN0ZXJJRCBzY3JhdGNoLCBWYXJpYWJsZVdh
dGNocG9pbnRTZXQqKTsKLSNlbmRpZgotICAgICAgICB2b2lkIGVtaXRQdXRHbG9iYWxWYXIodWlu
dHB0cl90IG9wZXJhbmQsIGludCB2YWx1ZSwgVmFyaWFibGVXYXRjaHBvaW50U2V0Kik7Ci0gICAg
ICAgIHZvaWQgZW1pdFB1dENsb3N1cmVWYXIoaW50IHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCwg
aW50IHZhbHVlLCBWYXJpYWJsZVdhdGNocG9pbnRTZXQqKTsKKyAgICAgICAgdm9pZCBlbWl0Tm90
aWZ5V3JpdGUoV2F0Y2hwb2ludFNldCopOworICAgICAgICB2b2lkIGVtaXRQdXRHbG9iYWxWYXIo
dWludHB0cl90IG9wZXJhbmQsIGludCB2YWx1ZSwgV2F0Y2hwb2ludFNldCopOworICAgICAgICB2
b2lkIGVtaXRQdXRDbG9zdXJlVmFyKGludCBzY29wZSwgdWludHB0cl90IG9wZXJhbmQsIGludCB2
YWx1ZSwgV2F0Y2hwb2ludFNldCopOwogCiAgICAgICAgIHZvaWQgZW1pdEluaXRSZWdpc3Rlcihp
bnQgZHN0KTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3Bw
CShyZXZpc2lvbiAxODI0OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29k
ZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NzksMTUgKzg3OSw2IEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF90b19udW1iZXIoSW5zdHJ1Y3QKIAogI2VuZGlmIC8vIFVTRShKU1ZBTFVFNjQpCiAK
LXZvaWQgSklUOjplbWl0X29wX3RvdWNoX2VudHJ5KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1
Y3Rpb24pCi17Ci0gICAgaWYgKG1fY29kZUJsb2NrLT5zeW1ib2xUYWJsZSgpLT5tX2Z1bmN0aW9u
RW50ZXJlZE9uY2UuaGFzQmVlbkludmFsaWRhdGVkKCkpCi0gICAgICAgIHJldHVybjsKLSAgICAK
LSAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlv
biwgc2xvd19wYXRoX3RvdWNoX2VudHJ5KTsKLSAgICBzbG93UGF0aENhbGwuY2FsbCgpOwotfQot
CiB2b2lkIEpJVDo6ZW1pdF9vcF9sb29wX2hpbnQoSW5zdHJ1Y3Rpb24qKQogewogICAgIC8vIEVt
aXQgdGhlIEpJVCBvcHRpbWl6YXRpb24gY2hlY2s6IApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAxODI0OTgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05
NTIsNiArOTUyLDE0IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmUK
ICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTRnVuY3Rpb246OmNyZWF0ZSh2bSwgc3RhdGlj
X2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oZnVuY3Rpb25FeGVjdXRhYmxlKSwgc2NvcGUpKTsK
IH0KIAorRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdGdW5jdGlvbldp
dGhJbnZhbGlkYXRlZFJlYWxsb2NhdGlvbldhdGNocG9pbnQoRXhlY1N0YXRlKiBleGVjLCBKU1Nj
b3BlKiBzY29wZSwgSlNDZWxsKiBmdW5jdGlvbkV4ZWN1dGFibGUpCit7CisgICAgQVNTRVJUKGZ1
bmN0aW9uRXhlY3V0YWJsZS0+aW5oZXJpdHMoRnVuY3Rpb25FeGVjdXRhYmxlOjppbmZvKCkpKTsK
KyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFj
ZXIoJnZtLCBleGVjKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTRnVuY3Rpb246OmNy
ZWF0ZVdpdGhJbnZhbGlkYXRlZFJlYWxsb2NhdGlvbldhdGNocG9pbnQodm0sIHN0YXRpY19jYXN0
PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGZ1bmN0aW9uRXhlY3V0YWJsZSksIHNjb3BlKSk7Cit9CisK
IEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdPYmplY3QoRXhlY1N0YXRlKiBleGVj
LCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKQEAg
LTE3MjIsOCArMTczMCw4IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRUb1Njb3Bl
KEUKICAgICBpZiAobW9kZUFuZFR5cGUudHlwZSgpID09IExvY2FsQ2xvc3VyZVZhcikgewogICAg
ICAgICBKU0xleGljYWxFbnZpcm9ubWVudCogZW52aXJvbm1lbnQgPSBqc0Nhc3Q8SlNMZXhpY2Fs
RW52aXJvbm1lbnQqPihzY29wZSk7CiAgICAgICAgIGVudmlyb25tZW50LT52YXJpYWJsZUF0KFNj
b3BlT2Zmc2V0KHBjWzZdLnUub3BlcmFuZCkpLnNldCh2bSwgZW52aXJvbm1lbnQsIHZhbHVlKTsK
LSAgICAgICAgaWYgKFZhcmlhYmxlV2F0Y2hwb2ludFNldCogc2V0ID0gcGNbNV0udS53YXRjaHBv
aW50U2V0KQotICAgICAgICAgICAgc2V0LT5ub3RpZnlXcml0ZSh2bSwgdmFsdWUsICJFeGVjdXRl
ZCBvcF9wdXRfc2NvcGU8TG9jYWxDbG9zdXJlVmFyPiIpOworICAgICAgICBpZiAoV2F0Y2hwb2lu
dFNldCogc2V0ID0gcGNbNV0udS53YXRjaHBvaW50U2V0KQorICAgICAgICAgICAgc2V0LT50b3Vj
aCgiRXhlY3V0ZWQgb3BfcHV0X3Njb3BlPExvY2FsQ2xvc3VyZVZhcj4iKTsKICAgICAgICAgcmV0
dXJuOwogICAgIH0KICAgICBpZiAobW9kZUFuZFR5cGUubW9kZSgpID09IFRocm93SWZOb3RGb3Vu
ZCAmJiAhc2NvcGUtPmhhc1Byb3BlcnR5KGV4ZWMsIGlkZW50KSkgewpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgJKHJldmlzaW9uIDE4MjQ5OCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBA
IC04Niw2ICs4Niw3IEBAIGV4dGVybiAiQyIgewogICAgIFY6IHZvaWQKICAgICBWbTogVk0qCiAg
ICAgVndzOiBWYXJpYWJsZVdhdGNocG9pbnRTZXQqCisgICAgV3M6IFdhdGNocG9pbnRTZXQqCiAg
ICAgWjogaW50MzJfdAogKi8KIApAQCAtMTkyLDYgKzE5Myw3IEBAIHR5cGVkZWYgdm9pZCBKSVRf
T1BFUkFUSU9OICgqVl9KSVRPcGVyYXQKIHR5cGVkZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgqVl9K
SVRPcGVyYXRpb25fRVBaSikoRXhlY1N0YXRlKiwgdm9pZCosIGludDMyX3QsIEVuY29kZWRKU1Zh
bHVlKTsKIHR5cGVkZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgqVl9KSVRPcGVyYXRpb25fRVNzaUpK
SSkoRXhlY1N0YXRlKiwgU3RydWN0dXJlU3R1YkluZm8qLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2Rl
ZEpTVmFsdWUsIFN0cmluZ0ltcGwqKTsKIHR5cGVkZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgqVl9K
SVRPcGVyYXRpb25fRVZ3c0opKEV4ZWNTdGF0ZSosIFZhcmlhYmxlV2F0Y2hwb2ludFNldCosIEVu
Y29kZWRKU1ZhbHVlKTsKK3R5cGVkZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgqVl9KSVRPcGVyYXRp
b25fRVdzKShFeGVjU3RhdGUqLCBXYXRjaHBvaW50U2V0Kik7CiB0eXBlZGVmIHZvaWQgSklUX09Q
RVJBVElPTiAoKlZfSklUT3BlcmF0aW9uX0VaKShFeGVjU3RhdGUqLCBpbnQzMl90KTsKIHR5cGVk
ZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgqVl9KSVRPcGVyYXRpb25fRVpKKShFeGVjU3RhdGUqLCBp
bnQzMl90LCBFbmNvZGVkSlNWYWx1ZSk7CiB0eXBlZGVmIHZvaWQgSklUX09QRVJBVElPTiAoKlZf
SklUT3BlcmF0aW9uX0VaSlpaWikoRXhlY1N0YXRlKiwgaW50MzJfdCwgRW5jb2RlZEpTVmFsdWUs
IGludDMyX3QsIGludDMyX3QsIGludDMyX3QpOwpAQCAtMjc4LDYgKzI4MCw3IEBAIEVuY29kZWRK
U1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmUKIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uTmV3QXJyYXlCdWZmZXJXaXRoUHJvZmlsZShFeGVjU3RhdGUqLCBBcnJh
eUFsbG9jYXRpb25Qcm9maWxlKiwgY29uc3QgSlNWYWx1ZSogdmFsdWVzLCBpbnQzMl90IHNpemUp
IFdURl9JTlRFUk5BTDsKIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3
QXJyYXlXaXRoU2l6ZUFuZFByb2ZpbGUoRXhlY1N0YXRlKiwgQXJyYXlBbGxvY2F0aW9uUHJvZmls
ZSosIEVuY29kZWRKU1ZhbHVlIHNpemUpIFdURl9JTlRFUk5BTDsKIEVuY29kZWRKU1ZhbHVlIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3RnVuY3Rpb24oRXhlY1N0YXRlKiwgSlNTY29wZSosIEpT
Q2VsbCopIFdURl9JTlRFUk5BTDsKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uTmV3RnVuY3Rpb25XaXRoSW52YWxpZGF0ZWRSZWFsbG9jYXRpb25XYXRjaHBvaW50KEV4ZWNT
dGF0ZSosIEpTU2NvcGUqLCBKU0NlbGwqKSBXVEZfSU5URVJOQUw7CiBKU0NlbGwqIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uTmV3T2JqZWN0KEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSopIFdURl9JTlRF
Uk5BTDsKIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3UmVnZXhwKEV4
ZWNTdGF0ZSosIHZvaWQqKSBXVEZfSU5URVJOQUw7CiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uSGFuZGxlV2F0Y2hkb2dUaW1lcihFeGVjU3RhdGUqKSBXVEZfSU5URVJOQUw7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82
NC5jcHAJKHJldmlzaW9uIDE4MjQ5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
UHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc1MCwyNyArNzUwLDEw
IEBAIHZvaWQgSklUOjplbWl0UHV0R2xvYmFsUHJvcGVydHkodWludHB0cl8KICAgICBzdG9yZTMy
KHJlZ1QyLCBCYXNlSW5kZXgocmVnVDAsIHJlZ1QxLCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxp
bmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgKyBPQkpFQ1RfT0ZGU0VUT0Yo
RW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSk7CiB9CiAKLXZvaWQgSklU
OjplbWl0Tm90aWZ5V3JpdGUoUmVnaXN0ZXJJRCB0YWcsIFJlZ2lzdGVySUQgcGF5bG9hZCwgUmVn
aXN0ZXJJRCBzY3JhdGNoLCBWYXJpYWJsZVdhdGNocG9pbnRTZXQqIHNldCkKLXsKLSAgICBpZiAo
IXNldCB8fCBzZXQtPnN0YXRlKCkgPT0gSXNJbnZhbGlkYXRlZCkKLSAgICAgICAgcmV0dXJuOwot
ICAgIAotICAgIGxvYWQ4KHNldC0+YWRkcmVzc09mU3RhdGUoKSwgc2NyYXRjaCk7Ci0gICAgSnVt
cCBpc0RvbmUgPSBicmFuY2gzMihFcXVhbCwgc2NyYXRjaCwgVHJ1c3RlZEltbTMyKElzSW52YWxp
ZGF0ZWQpKTsKLQotICAgIEp1bXBMaXN0IG5vdGlmeVNsb3cgPSBicmFuY2gzMigKLSAgICAgICAg
Tm90RXF1YWwsIEFic29sdXRlQWRkcmVzcyhzZXQtPmFkZHJlc3NPZkluZmVycmVkVmFsdWUoKS0+
cGF5bG9hZFBvaW50ZXIoKSksIHBheWxvYWQpOwotICAgIG5vdGlmeVNsb3cuYXBwZW5kKGJyYW5j
aDMyKAotICAgICAgICBOb3RFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKHNldC0+YWRkcmVzc09mSW5m
ZXJyZWRWYWx1ZSgpLT50YWdQb2ludGVyKCkpLCB0YWcpKTsKLSAgICBhZGRTbG93Q2FzZShub3Rp
ZnlTbG93KTsKLQotICAgIGlzRG9uZS5saW5rKHRoaXMpOwotfQotCiB2b2lkIEpJVDo6ZW1pdFB1
dEdsb2JhbFZhcih1aW50cHRyX3Qgb3BlcmFuZCwgaW50IHZhbHVlLCBWYXJpYWJsZVdhdGNocG9p
bnRTZXQqIHNldCkKIHsKICAgICBlbWl0TG9hZCh2YWx1ZSwgcmVnVDEsIHJlZ1QwKTsKLSAgICBl
bWl0Tm90aWZ5V3JpdGUocmVnVDEsIHJlZ1QwLCByZWdUMiwgc2V0KTsKKyAgICBlbWl0Tm90aWZ5
V3JpdGUoc2V0KTsKICAgICBzdG9yZTMyKHJlZ1QxLCByZWludGVycHJldF9jYXN0PGNoYXIqPihv
cGVyYW5kKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMu
dGFnKSk7CiAgICAgc3RvcmUzMihyZWdUMCwgcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4ob3BlcmFu
ZCkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxv
YWQpKTsKIH0KQEAgLTc3OSw3ICs3NjIsNyBAQCB2b2lkIEpJVDo6ZW1pdFB1dENsb3N1cmVWYXIo
aW50IHNjb3BlLCB1CiB7CiAgICAgZW1pdExvYWQodmFsdWUsIHJlZ1QzLCByZWdUMik7CiAgICAg
ZW1pdExvYWQoc2NvcGUsIHJlZ1QxLCByZWdUMCk7Ci0gICAgZW1pdE5vdGlmeVdyaXRlKHJlZ1Qz
LCByZWdUMiwgcmVnVDQsIHNldCk7CisgICAgZW1pdE5vdGlmeVdyaXRlKHNldCk7CiAgICAgc3Rv
cmUzMihyZWdUMywgQWRkcmVzcyhyZWdUMCwgSlNFbnZpcm9ubWVudFJlY29yZDo6b2Zmc2V0T2ZW
YXJpYWJsZXMoKSArIG9wZXJhbmQgKiBzaXplb2YoUmVnaXN0ZXIpICsgVGFnT2Zmc2V0KSk7CiAg
ICAgc3RvcmUzMihyZWdUMiwgQWRkcmVzcyhyZWdUMCwgSlNFbnZpcm9ubWVudFJlY29yZDo6b2Zm
c2V0T2ZWYXJpYWJsZXMoKSArIG9wZXJhbmQgKiBzaXplb2YoUmVnaXN0ZXIpICsgUGF5bG9hZE9m
ZnNldCkpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFj
Y2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9w
ZXJ0eUFjY2Vzcy5jcHAJKHJldmlzaW9uIDE4MjQ5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MjgsMjkgKzcy
OCwxOCBAQCB2b2lkIEpJVDo6ZW1pdFB1dEdsb2JhbFByb3BlcnR5KHVpbnRwdHJfCiAgICAgc3Rv
cmVQdHIocmVnVDIsIEJhc2VJbmRleChyZWdUMCwgcmVnVDEsIFRpbWVzRWlnaHQsIChmaXJzdE91
dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkpOwogfQogCi12b2lk
IEpJVDo6ZW1pdE5vdGlmeVdyaXRlKFJlZ2lzdGVySUQgdmFsdWUsIFJlZ2lzdGVySUQgc2NyYXRj
aCwgVmFyaWFibGVXYXRjaHBvaW50U2V0KiBzZXQpCi17Ci0gICAgaWYgKCFzZXQgfHwgc2V0LT5z
dGF0ZSgpID09IElzSW52YWxpZGF0ZWQpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBsb2Fk
OChzZXQtPmFkZHJlc3NPZlN0YXRlKCksIHNjcmF0Y2gpOwotICAgIEp1bXAgaXNEb25lID0gYnJh
bmNoMzIoRXF1YWwsIHNjcmF0Y2gsIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSk7Ci0gICAg
YWRkU2xvd0Nhc2UoYnJhbmNoNjQoTm90RXF1YWwsIEFic29sdXRlQWRkcmVzcyhzZXQtPmFkZHJl
c3NPZkluZmVycmVkVmFsdWUoKSksIHZhbHVlKSk7Ci0gICAgaXNEb25lLmxpbmsodGhpcyk7Ci19
Ci0KLXZvaWQgSklUOjplbWl0UHV0R2xvYmFsVmFyKHVpbnRwdHJfdCBvcGVyYW5kLCBpbnQgdmFs
dWUsIFZhcmlhYmxlV2F0Y2hwb2ludFNldCogc2V0KQordm9pZCBKSVQ6OmVtaXRQdXRHbG9iYWxW
YXIodWludHB0cl90IG9wZXJhbmQsIGludCB2YWx1ZSwgV2F0Y2hwb2ludFNldCogc2V0KQogewog
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBlbWl0Tm90aWZ5
V3JpdGUocmVnVDAsIHJlZ1QxLCBzZXQpOworICAgIGVtaXROb3RpZnlXcml0ZShzZXQpOwogICAg
IHN0b3JlUHRyKHJlZ1QwLCByZWludGVycHJldF9jYXN0PHZvaWQqPihvcGVyYW5kKSk7CiB9CiAK
LXZvaWQgSklUOjplbWl0UHV0Q2xvc3VyZVZhcihpbnQgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5k
LCBpbnQgdmFsdWUsIFZhcmlhYmxlV2F0Y2hwb2ludFNldCogc2V0KQordm9pZCBKSVQ6OmVtaXRQ
dXRDbG9zdXJlVmFyKGludCBzY29wZSwgdWludHB0cl90IG9wZXJhbmQsIGludCB2YWx1ZSwgV2F0
Y2hwb2ludFNldCogc2V0KQogewogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJl
Z1QxKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7Ci0gICAgZW1p
dE5vdGlmeVdyaXRlKHJlZ1QxLCByZWdUMiwgc2V0KTsKKyAgICBlbWl0Tm90aWZ5V3JpdGUoc2V0
KTsKICAgICBzdG9yZVB0cihyZWdUMSwgQWRkcmVzcyhyZWdUMCwgSlNFbnZpcm9ubWVudFJlY29y
ZDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSArIG9wZXJhbmQgKiBzaXplb2YoUmVnaXN0ZXIpKSk7CiB9
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhz
LmNwcAkocmV2aXNpb24gMTgyNDk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xM
SW50U2xvd1BhdGhzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQwMiw4ICsxNDAyLDEyIEBAIExM
SU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9wdXRfdG9fc2MKICAgICBpZiAobW9kZUFuZFR5
cGUudHlwZSgpID09IExvY2FsQ2xvc3VyZVZhcikgewogICAgICAgICBKU0xleGljYWxFbnZpcm9u
bWVudCogZW52aXJvbm1lbnQgPSBqc0Nhc3Q8SlNMZXhpY2FsRW52aXJvbm1lbnQqPihzY29wZSk7
CiAgICAgICAgIGVudmlyb25tZW50LT52YXJpYWJsZUF0KFNjb3BlT2Zmc2V0KHBjWzZdLnUub3Bl
cmFuZCkpLnNldCh2bSwgZW52aXJvbm1lbnQsIHZhbHVlKTsKLSAgICAgICAgaWYgKFZhcmlhYmxl
V2F0Y2hwb2ludFNldCogc2V0ID0gcGNbNV0udS53YXRjaHBvaW50U2V0KQotICAgICAgICAgICAg
c2V0LT5ub3RpZnlXcml0ZSh2bSwgdmFsdWUsICJFeGVjdXRlZCBvcF9wdXRfc2NvcGU8TG9jYWxD
bG9zdXJlVmFyPiIpOworICAgICAgICAKKyAgICAgICAgLy8gSGF2ZSB0byBkbyB0aGlzICphZnRl
ciogdGhlIHdyaXRlLCBiZWNhdXNlIGlmIHRoaXMgcHV0cyB0aGUgc2V0IGludG8gSXNXYXRjaGVk
LCB0aGVuIHdlIG5lZWQKKyAgICAgICAgLy8gdG8gaGF2ZSBhbHJlYWR5IGNoYW5nZWQgdGhlIHZh
bHVlIG9mIHRoZSB2YXJpYWJsZS4gT3RoZXJ3aXNlIHdlIG1pZ2h0IHdhdGNoIGFuZCBjb25zdGFu
dC1mb2xkCisgICAgICAgIC8vIHRvIHRoZSBVbmRlZmluZWQgdmFsdWUgZnJvbSBiZWZvcmUgdGhl
IGFzc2lnbm1lbnQuCisgICAgICAgIGlmIChXYXRjaHBvaW50U2V0KiBzZXQgPSBwY1s1XS51Lndh
dGNocG9pbnRTZXQpCisgICAgICAgICAgICBzZXQtPnRvdWNoKCJFeGVjdXRlZCBvcF9wdXRfc2Nv
cGU8TG9jYWxDbG9zdXJlVmFyPiIpOwogICAgICAgICBMTElOVF9FTkQoKTsKICAgICB9CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQu
YXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbElu
dGVycHJldGVyMzJfNjQuYXNtCShyZXZpc2lvbiAxODI0OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQkod29ya2luZyBjb3B5KQpA
QCAtODA1LDE0ICs4MDUsNiBAQCBfbGxpbnRfb3BfbW92OgogICAgIGRpc3BhdGNoKDMpCiAKIAot
bWFjcm8gbm90aWZ5V3JpdGUoc2V0LCB2YWx1ZVRhZywgdmFsdWVQYXlsb2FkLCBzY3JhdGNoLCBz
bG93KQotICAgIGxvYWRiIFZhcmlhYmxlV2F0Y2hwb2ludFNldDo6bV9zdGF0ZVtzZXRdLCBzY3Jh
dGNoCi0gICAgYmllcSBzY3JhdGNoLCBJc0ludmFsaWRhdGVkLCAuZG9uZQotICAgIGJpbmVxIHZh
bHVlUGF5bG9hZCwgVmFyaWFibGVXYXRjaHBvaW50U2V0OjptX2luZmVycmVkVmFsdWUgKyBQYXls
b2FkT2Zmc2V0W3NldF0sIHNsb3cKLSAgICBiaW5lcSB2YWx1ZVRhZywgVmFyaWFibGVXYXRjaHBv
aW50U2V0OjptX2luZmVycmVkVmFsdWUgKyBUYWdPZmZzZXRbc2V0XSwgc2xvdwotLmRvbmU6Ci1l
bmQKLQogX2xsaW50X29wX25vdDoKICAgICB0cmFjZUV4ZWN1dGlvbigpCiAgICAgbG9hZGkgOFtQ
Q10sIHQwCkBAIC0yMDc1LDM5ICsyMDY3LDM5IEBAIF9sbGludF9vcF9yZXNvbHZlX3Njb3BlOgog
I3JHbG9iYWxQcm9wZXJ0eToKICAgICBiaW5lcSB0MCwgR2xvYmFsUHJvcGVydHksIC5yR2xvYmFs
VmFyCiAgICAgZ2V0R2xvYmFsT2JqZWN0KDEpCi0gICAgZGlzcGF0Y2goNykKKyAgICBkaXNwYXRj
aCg2KQogCiAuckdsb2JhbFZhcjoKICAgICBiaW5lcSB0MCwgR2xvYmFsVmFyLCAuckNsb3N1cmVW
YXIKICAgICBnZXRHbG9iYWxPYmplY3QoMSkKLSAgICBkaXNwYXRjaCg3KQorICAgIGRpc3BhdGNo
KDYpCiAKIC5yQ2xvc3VyZVZhcjoKICAgICBiaW5lcSB0MCwgQ2xvc3VyZVZhciwgLnJHbG9iYWxQ
cm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MKICAgICByZXNvbHZlU2NvcGUoKQotICAgIGRp
c3BhdGNoKDcpCisgICAgZGlzcGF0Y2goNikKIAogLnJHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmpl
Y3Rpb25DaGVja3M6CiAgICAgYmluZXEgdDAsIEdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlv
bkNoZWNrcywgLnJHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzCiAgICAgdmFySW5qZWN0
aW9uQ2hlY2soLnJEeW5hbWljKQogICAgIGdldEdsb2JhbE9iamVjdCgxKQotICAgIGRpc3BhdGNo
KDcpCisgICAgZGlzcGF0Y2goNikKIAogLnJHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
OgogICAgIGJpbmVxIHQwLCBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCAuckNsb3N1
cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzCiAgICAgdmFySW5qZWN0aW9uQ2hlY2soLnJEeW5h
bWljKQogICAgIGdldEdsb2JhbE9iamVjdCgxKQotICAgIGRpc3BhdGNoKDcpCisgICAgZGlzcGF0
Y2goNikKIAogLnJDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKICAgICBiaW5lcSB0
MCwgQ2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MsIC5yRHluYW1pYwogICAgIHZhcklu
amVjdGlvbkNoZWNrKC5yRHluYW1pYykKICAgICByZXNvbHZlU2NvcGUoKQotICAgIGRpc3BhdGNo
KDcpCisgICAgZGlzcGF0Y2goNikKIAogLnJEeW5hbWljOgogICAgIGNhbGxTbG93UGF0aChfbGxp
bnRfc2xvd19wYXRoX3Jlc29sdmVfc2NvcGUpCi0gICAgZGlzcGF0Y2goNykKKyAgICBkaXNwYXRj
aCg2KQogCiAKIG1hY3JvIGxvYWRXaXRoU3RydWN0dXJlQ2hlY2sob3BlcmFuZCwgc2xvd1BhdGgp
CkBAIC0yMjA0LDcgKzIxOTYsNyBAQCBtYWNybyBwdXRHbG9iYWxWYXIoKQogICAgIGxvYWRpc0Zy
b21JbnN0cnVjdGlvbigzLCB0MCkKICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHQwLCB0MSwg
dDIpCiAgICAgbG9hZHBGcm9tSW5zdHJ1Y3Rpb24oNSwgdDMpCi0gICAgbm90aWZ5V3JpdGUodDMs
IHQxLCB0MiwgdDAsIC5wRHluYW1pYykKKyAgICBub3RpZnlXcml0ZSh0MywgLnBEeW5hbWljKQog
ICAgIGxvYWRwRnJvbUluc3RydWN0aW9uKDYsIHQwKQogICAgIHN0b3JlaSB0MSwgVGFnT2Zmc2V0
W3QwXQogICAgIHN0b3JlaSB0MiwgUGF5bG9hZE9mZnNldFt0MF0KQEAgLTIyMjMsNyArMjIxNSw3
IEBAIG1hY3JvIHB1dExvY2FsQ2xvc3VyZVZhcigpCiAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJs
ZSh0MSwgdDIsIHQzKQogICAgIGxvYWRwRnJvbUluc3RydWN0aW9uKDUsIHQ0KQogICAgIGJ0cHog
dDQsIC5ub1ZhcmlhYmxlV2F0Y2hwb2ludFNldAotICAgIG5vdGlmeVdyaXRlKHQ0LCB0MiwgdDMs
IHQxLCAucER5bmFtaWMpCisgICAgbm90aWZ5V3JpdGUodDQsIC5wRHluYW1pYykKIC5ub1Zhcmlh
YmxlV2F0Y2hwb2ludFNldDoKICAgICBsb2FkaXNGcm9tSW5zdHJ1Y3Rpb24oNiwgdDEpCiAgICAg
c3RvcmVpIHQyLCBKU0Vudmlyb25tZW50UmVjb3JkX3ZhcmlhYmxlcyArIFRhZ09mZnNldFt0MCwg
dDEsIDhdCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnBy
ZXRlcjY0LmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93
TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQkocmV2aXNpb24gMTgyNDk4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHdvcmtpbmcgY29weSkK
QEAgLTY5MCwxMyArNjkwLDYgQEAgX2xsaW50X29wX21vdjoKICAgICBkaXNwYXRjaCgzKQogCiAK
LW1hY3JvIG5vdGlmeVdyaXRlKHNldCwgdmFsdWUsIHNjcmF0Y2gsIHNsb3cpCi0gICAgbG9hZGIg
VmFyaWFibGVXYXRjaHBvaW50U2V0OjptX3N0YXRlW3NldF0sIHNjcmF0Y2gKLSAgICBiaWVxIHNj
cmF0Y2gsIElzSW52YWxpZGF0ZWQsIC5kb25lCi0gICAgYnFuZXEgdmFsdWUsIFZhcmlhYmxlV2F0
Y2hwb2ludFNldDo6bV9pbmZlcnJlZFZhbHVlW3NldF0sIHNsb3cKLS5kb25lOgotZW5kCi0KIF9s
bGludF9vcF9ub3Q6CiAgICAgdHJhY2VFeGVjdXRpb24oKQogICAgIGxvYWRpc0Zyb21JbnN0cnVj
dGlvbigyLCB0MCkKQEAgLTE5NDQsMzkgKzE5MzcsMzkgQEAgX2xsaW50X29wX3Jlc29sdmVfc2Nv
cGU6CiAjckdsb2JhbFByb3BlcnR5OgogICAgIGJpbmVxIHQwLCBHbG9iYWxQcm9wZXJ0eSwgLnJH
bG9iYWxWYXIKICAgICBnZXRHbG9iYWxPYmplY3QoMSkKLSAgICBkaXNwYXRjaCg3KQorICAgIGRp
c3BhdGNoKDYpCiAKIC5yR2xvYmFsVmFyOgogICAgIGJpbmVxIHQwLCBHbG9iYWxWYXIsIC5yQ2xv
c3VyZVZhcgogICAgIGdldEdsb2JhbE9iamVjdCgxKQotICAgIGRpc3BhdGNoKDcpCisgICAgZGlz
cGF0Y2goNikKIAogLnJDbG9zdXJlVmFyOgogICAgIGJpbmVxIHQwLCBDbG9zdXJlVmFyLCAuckds
b2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrcwogICAgIHJlc29sdmVTY29wZSgpCi0g
ICAgZGlzcGF0Y2goNykKKyAgICBkaXNwYXRjaCg2KQogCiAuckdsb2JhbFByb3BlcnR5V2l0aFZh
ckluamVjdGlvbkNoZWNrczoKICAgICBiaW5lcSB0MCwgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzLCAuckdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MKICAgICB2YXJJ
bmplY3Rpb25DaGVjayguckR5bmFtaWMpCiAgICAgZ2V0R2xvYmFsT2JqZWN0KDEpCi0gICAgZGlz
cGF0Y2goNykKKyAgICBkaXNwYXRjaCg2KQogCiAuckdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25D
aGVja3M6CiAgICAgYmluZXEgdDAsIEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MsIC5y
Q2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MKICAgICB2YXJJbmplY3Rpb25DaGVjaygu
ckR5bmFtaWMpCiAgICAgZ2V0R2xvYmFsT2JqZWN0KDEpCi0gICAgZGlzcGF0Y2goNykKKyAgICBk
aXNwYXRjaCg2KQogCiAuckNsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgogICAgIGJp
bmVxIHQwLCBDbG9zdXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgLnJEeW5hbWljCiAgICAg
dmFySW5qZWN0aW9uQ2hlY2soLnJEeW5hbWljKQogICAgIHJlc29sdmVTY29wZSgpCi0gICAgZGlz
cGF0Y2goNykKKyAgICBkaXNwYXRjaCg2KQogCiAuckR5bmFtaWM6CiAgICAgY2FsbFNsb3dQYXRo
KF9sbGludF9zbG93X3BhdGhfcmVzb2x2ZV9zY29wZSkKLSAgICBkaXNwYXRjaCg3KQorICAgIGRp
c3BhdGNoKDYpCiAKIAogbWFjcm8gbG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhvcGVyYW5kLCBzbG93
UGF0aCkKQEAgLTIwNjksOCArMjA2Miw4IEBAIG1hY3JvIHB1dEdsb2JhbFZhcigpCiAgICAgbG9h
ZGlzRnJvbUluc3RydWN0aW9uKDMsIHQwKQogICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUodDAs
IHQxKQogICAgIGxvYWRwRnJvbUluc3RydWN0aW9uKDUsIHQyKQotICAgIG5vdGlmeVdyaXRlKHQy
LCB0MSwgdDAsIC5wRHluYW1pYykKICAgICBsb2FkcEZyb21JbnN0cnVjdGlvbig2LCB0MCkKKyAg
ICBub3RpZnlXcml0ZSh0MiwgLnBEeW5hbWljKQogICAgIHN0b3JlcSB0MSwgW3QwXQogZW5kCiAK
QEAgLTIwODYsNyArMjA3OSw3IEBAIG1hY3JvIHB1dExvY2FsQ2xvc3VyZVZhcigpCiAgICAgbG9h
ZENvbnN0YW50T3JWYXJpYWJsZSh0MSwgdDIpCiAgICAgbG9hZHBGcm9tSW5zdHJ1Y3Rpb24oNSwg
dDMpCiAgICAgYnRweiB0MywgLm5vVmFyaWFibGVXYXRjaHBvaW50U2V0Ci0gICAgbm90aWZ5V3Jp
dGUodDMsIHQyLCB0MSwgLnBEeW5hbWljKQorICAgIG5vdGlmeVdyaXRlKHQzLCAucER5bmFtaWMp
CiAubm9WYXJpYWJsZVdhdGNocG9pbnRTZXQ6CiAgICAgbG9hZGlzRnJvbUluc3RydWN0aW9uKDYs
IHQxKQogICAgIHN0b3JlcSB0MiwgSlNFbnZpcm9ubWVudFJlY29yZF92YXJpYWJsZXNbdDAsIHQx
LCA4XQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0
ZXIuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZl
bEludGVycHJldGVyLmFzbQkocmV2aXNpb24gMTgyNDk4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC01MTks
NiArNTE5LDEwIEBAIG1hY3JvIHNraXBJZklzUmVtZW1iZXJlZE9ySW5FZGVuKGNlbGwsIHMKICAg
ICBjb250aW51YXRpb24oc2NyYXRjaDEpCiBlbmQKIAorbWFjcm8gbm90aWZ5V3JpdGUoc2V0LCBz
bG93KQorICAgIGJibmVxIFdhdGNocG9pbnRTZXQ6Om1fc3RhdGVbc2V0XSwgSXNJbnZhbGlkYXRl
ZCwgc2xvdworZW5kCisKIG1hY3JvIGNoZWNrU3dpdGNoVG9KSVQoaW5jcmVtZW50LCBhY3Rpb24p
CiAgICAgbG9hZHAgQ29kZUJsb2NrW2Nmcl0sIHQwCiAgICAgYmFkZGlzIGluY3JlbWVudCwgQ29k
ZUJsb2NrOjptX2xsaW50RXhlY3V0ZUNvdW50ZXIgKyBCYXNlbGluZUV4ZWN1dGlvbkNvdW50ZXI6
Om1fY291bnRlclt0MF0sIC5jb250aW51ZQpAQCAtOTIwLDEyICs5MjQsNiBAQCBlbmQKIAogCiAj
IFZhbHVlLXJlcHJlc2VudGF0aW9uLWFnbm9zdGljIGNvZGUuCi1fbGxpbnRfb3BfdG91Y2hfZW50
cnk6Ci0gICAgdHJhY2VFeGVjdXRpb24oKQotICAgIGNhbGxTbG93UGF0aChfc2xvd19wYXRoX3Rv
dWNoX2VudHJ5KQotICAgIGRpc3BhdGNoKDEpCi0KLQogX2xsaW50X29wX2NyZWF0ZV9kaXJlY3Rf
YXJndW1lbnRzOgogICAgIHRyYWNlRXhlY3V0aW9uKCkKICAgICBjYWxsU2xvd1BhdGgoX3Nsb3df
cGF0aF9jcmVhdGVfZGlyZWN0X2FyZ3VtZW50cykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAkocmV2aXNpb24gMTgyNDk4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjA2LDEzICsyMDYsNiBAQCBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhf
Y29uc3RydWN0X2FyaXR5CiAgICAgUkVUVVJOX1RXTygwLCBzZXR1cEFyaXR5Q2hlY2tEYXRhKHZt
LCBzbG90c1RvQWRkKSk7CiB9CiAKLVNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF90b3VjaF9lbnRy
eSkKLXsKLSAgICBCRUdJTigpOwotICAgIGV4ZWMtPmNvZGVCbG9jaygpLT5zeW1ib2xUYWJsZSgp
LT5tX2Z1bmN0aW9uRW50ZXJlZE9uY2UudG91Y2goIkZ1bmN0aW9uIChyZSllbnRlcmVkIik7Ci0g
ICAgRU5EKCk7Ci19Ci0KIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9jcmVhdGVfZGlyZWN0X2Fy
Z3VtZW50cykKIHsKICAgICBCRUdJTigpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmgJKHJldmlzaW9uIDE4MjQ5OCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xODEsNyArMTgxLDYgQEAgU0xPV19QQVRIX0RFQ0wobmFtZSkgV1RGX0lOVEVSTkFMCiAg
ICAgCiBTTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX2NhbGxfYXJpdHlDaGVjayk7CiBT
TE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX2NvbnN0cnVjdF9hcml0eUNoZWNrKTsKLVNM
T1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfdG91Y2hfZW50cnkpOwogU0xPV19QQVRIX0hJ
RERFTl9ERUNMKHNsb3dfcGF0aF9jcmVhdGVfZGlyZWN0X2FyZ3VtZW50cyk7CiBTTE9XX1BBVEhf
SElEREVOX0RFQ0woc2xvd19wYXRoX2NyZWF0ZV9zY29wZWRfYXJndW1lbnRzKTsKIFNMT1dfUEFU
SF9ISURERU5fREVDTChzbG93X3BhdGhfY3JlYXRlX291dF9vZl9iYW5kX2FyZ3VtZW50cyk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAkocmV2
aXNpb24gMTgyNDk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJs
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU2Nyw2ICs1NjcsMTIgQEAgdm9pZCBGdW5jdGlvbkV4
ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW4oSgogICAgIGlmICh0aGlzT2JqZWN0LT5tX2NvZGVCbG9j
a0ZvckNvbnN0cnVjdCkKICAgICAgICAgdGhpc09iamVjdC0+bV9jb2RlQmxvY2tGb3JDb25zdHJ1
Y3QtPnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOwogICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2Jq
ZWN0LT5tX3VubGlua2VkRXhlY3V0YWJsZSk7CisgICAgCisgICAgaWYgKHRoaXNPYmplY3QtPm1f
ZnVuY3Rpb25SZWFsbG9jYXRpb25XYXRjaHBvaW50U2V0Lm5lZWRUb0ZpbmFsaXplKCkpIHsKKyAg
ICAgICAgaWYgKCF0aGlzT2JqZWN0LT5tX3dhdGNocG9pbnRDbGVhbnVwKQorICAgICAgICAgICAg
dGhpc09iamVjdC0+bV93YXRjaHBvaW50Q2xlYW51cCA9IHN0ZDo6bWFrZV91bmlxdWU8V2F0Y2hw
b2ludENsZWFudXA+KHRoaXNPYmplY3QpOworICAgICAgICB2aXNpdG9yLmFkZFVuY29uZGl0aW9u
YWxGaW5hbGl6ZXIodGhpc09iamVjdC0+bV93YXRjaHBvaW50Q2xlYW51cC5nZXQoKSk7CisgICAg
fQogfQogCiBTeW1ib2xUYWJsZSogRnVuY3Rpb25FeGVjdXRhYmxlOjpzeW1ib2xUYWJsZShDb2Rl
U3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCkBAIC02MjIsNiArNjI4LDIxIEBAIEZ1bmN0aW9uRXhl
Y3V0YWJsZSogRnVuY3Rpb25FeGVjdXRhYmxlOjoKICAgICByZXR1cm4gdW5saW5rZWRFeGVjdXRh
YmxlLT5saW5rKGV4ZWMudm0oKSwgc291cmNlLCBvdmVycmlkZUxpbmVOdW1iZXIpOwogfQogCitG
dW5jdGlvbkV4ZWN1dGFibGU6OldhdGNocG9pbnRDbGVhbnVwOjpXYXRjaHBvaW50Q2xlYW51cChG
dW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUpCisgICAgOiBtX2V4ZWN1dGFibGUoZXhlY3V0
YWJsZSkKK3sKK30KKworRnVuY3Rpb25FeGVjdXRhYmxlOjpXYXRjaHBvaW50Q2xlYW51cDo6fldh
dGNocG9pbnRDbGVhbnVwKCkKK3sKK30KKwordm9pZCBGdW5jdGlvbkV4ZWN1dGFibGU6OldhdGNo
cG9pbnRDbGVhbnVwOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSgpCit7CisgICAgbV9leGVjdXRh
YmxlLT5mdW5jdGlvblJlYWxsb2NhdGlvbldhdGNocG9pbnRTZXQoKS5maW5hbGl6ZVVuY29uZGl0
aW9uYWxseSgKKyAgICAgICAgU3RyaW5nRmlyZURldGFpbCgiRnVuY3Rpb25FeGVjdXRhYmxlIGNs
ZWFuLXVwIGR1cmluZyBHQyIpKTsKK30KKwogdm9pZCBFeGVjdXRhYmxlQmFzZTo6ZHVtcChQcmlu
dFN0cmVhbSYgb3V0KSBjb25zdAogewogICAgIEV4ZWN1dGFibGVCYXNlKiByZWFsVGhpcyA9IGNv
bnN0X2Nhc3Q8RXhlY3V0YWJsZUJhc2UqPih0aGlzKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgJKHJldmlzaW9uIDE4MjQ5OCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzMs
OCArMzMsNiBAQAogI2luY2x1ZGUgIkNvbXBpbGF0aW9uUmVzdWx0LmgiCiAjaW5jbHVkZSAiREZH
UGxhbi5oIgogI2luY2x1ZGUgIkhhbmRsZXJJbmZvLmgiCi0jaW5jbHVkZSAiSlNGdW5jdGlvbi5o
IgotI2luY2x1ZGUgIkludGVycHJldGVyLmgiCiAjaW5jbHVkZSAiSklUQ29kZS5oIgogI2luY2x1
ZGUgIkpTR2xvYmFsT2JqZWN0LmgiCiAjaW5jbHVkZSAiUmVnaXN0ZXJQcmVzZXJ2YXRpb25Nb2Rl
LmgiCkBAIC00Miw2ICs0MCw3IEBACiAjaW5jbHVkZSAiU291cmNlQ29kZS5oIgogI2luY2x1ZGUg
IlR5cGVTZXQuaCIKICNpbmNsdWRlICJVbmxpbmtlZENvZGVCbG9jay5oIgorI2luY2x1ZGUgIlZh
cmlhYmxlV2F0Y2hwb2ludFNldC5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtNjQ5LDYgKzY0
OCw4IEBAIHB1YmxpYzoKICAgICB2b2lkIHVubGlua0NhbGxzKCk7CiAKICAgICB2b2lkIGNsZWFy
Q29kZSgpOworICAgIAorICAgIFZhcmlhYmxlV2F0Y2hwb2ludFNldCYgZnVuY3Rpb25SZWFsbG9j
YXRpb25XYXRjaHBvaW50U2V0KCkgeyByZXR1cm4gbV9mdW5jdGlvblJlYWxsb2NhdGlvbldhdGNo
cG9pbnRTZXQ7IH0KIAogcHJpdmF0ZToKICAgICBGdW5jdGlvbkV4ZWN1dGFibGUoCkBAIC02Njcs
MTIgKzY2OCwyNiBAQCBwcml2YXRlOgogICAgIH0KIAogICAgIGZyaWVuZCBjbGFzcyBTY3JpcHRF
eGVjdXRhYmxlOworICAgIAorICAgIGNsYXNzIFdhdGNocG9pbnRDbGVhbnVwIDogcHVibGljIFVu
Y29uZGl0aW9uYWxGaW5hbGl6ZXIgeworICAgIHB1YmxpYzoKKyAgICAgICAgV2F0Y2hwb2ludENs
ZWFudXAoRnVuY3Rpb25FeGVjdXRhYmxlKik7CisgICAgICAgIHZpcnR1YWwgfldhdGNocG9pbnRD
bGVhbnVwKCk7CisgICAgICAgIAorICAgIHByb3RlY3RlZDoKKyAgICAgICAgdm9pZCBmaW5hbGl6
ZVVuY29uZGl0aW9uYWxseSgpIG92ZXJyaWRlOworICAgICAgICAKKyAgICBwcml2YXRlOgorICAg
ICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIG1fZXhlY3V0YWJsZTsKKyAgICB9OwogCiAgICAgV3Jp
dGVCYXJyaWVyPFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlPiBtX3VubGlua2VkRXhlY3V0YWJs
ZTsKICAgICBSZWZQdHI8RnVuY3Rpb25Db2RlQmxvY2s+IG1fY29kZUJsb2NrRm9yQ2FsbDsKICAg
ICBSZWZQdHI8RnVuY3Rpb25Db2RlQmxvY2s+IG1fY29kZUJsb2NrRm9yQ29uc3RydWN0OwogICAg
IFJlZlB0cjxUeXBlU2V0PiBtX3JldHVyblN0YXRlbWVudFR5cGVTZXQ7CiAgICAgdW5zaWduZWQg
bV9wYXJhbWV0ZXJzU3RhcnRPZmZzZXQ7CisgICAgVmFyaWFibGVXYXRjaHBvaW50U2V0IG1fZnVu
Y3Rpb25SZWFsbG9jYXRpb25XYXRjaHBvaW50U2V0OworICAgIHN0ZDo6dW5pcXVlX3B0cjxXYXRj
aHBvaW50Q2xlYW51cD4gbV93YXRjaHBvaW50Q2xlYW51cDsKIH07CiAKIGlubGluZSB2b2lkIEV4
ZWN1dGFibGVCYXNlOjpjbGVhckNvZGVWaXJ0dWFsKEV4ZWN1dGFibGVCYXNlKiBleGVjdXRhYmxl
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSW5saW5lcy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTQ0lubGluZXMuaAkocmV2
aXNpb24gMTgyNDk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNDSW5saW5l
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC01MSw2ICs1MSw3IEBACiAjaW5jbHVkZSAiT3BlcmF0aW9u
cy5oIgogI2luY2x1ZGUgIlNsb3RWaXNpdG9ySW5saW5lcy5oIgogI2luY2x1ZGUgIlN0cnVjdHVy
ZUlubGluZXMuaCIKKyNpbmNsdWRlICJWYXJpYWJsZVdhdGNocG9pbnRTZXRJbmxpbmVzLmgiCiAj
aW5jbHVkZSAiV2Vha0dDTWFwSW5saW5lcy5oIgogCiAjZW5kaWYgLy8gSlNDSW5saW5lc19oCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAkocmV2
aXNpb24gMTgyNDk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlv
bi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU5LDYgKzU5LDE0IEBAIGJvb2wgSlNGdW5jdGlvbjo6
aXNIb3N0RnVuY3Rpb25Ob25JbmxpbmUKICAgICByZXR1cm4gaXNIb3N0RnVuY3Rpb24oKTsKIH0K
IAorSlNGdW5jdGlvbiogSlNGdW5jdGlvbjo6Y3JlYXRlKFZNJiB2bSwgRnVuY3Rpb25FeGVjdXRh
YmxlKiBleGVjdXRhYmxlLCBKU1Njb3BlKiBzY29wZSkKK3sKKyAgICBKU0Z1bmN0aW9uKiByZXN1
bHQgPSBjcmVhdGVJbXBsKHZtLCBleGVjdXRhYmxlLCBzY29wZSk7CisgICAgZXhlY3V0YWJsZS0+
ZnVuY3Rpb25SZWFsbG9jYXRpb25XYXRjaHBvaW50U2V0KCkubm90aWZ5V3JpdGUoCisgICAgICAg
IHZtLCBleGVjdXRhYmxlLCByZXN1bHQsICJBbGxvY2F0aW5nIGEgZnVuY3Rpb24iKTsKKyAgICBy
ZXR1cm4gcmVzdWx0OworfQorCiBKU0Z1bmN0aW9uKiBKU0Z1bmN0aW9uOjpjcmVhdGUoVk0mIHZt
LCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBpbnQgbGVuZ3RoLCBjb25zdCBTdHJpbmcm
IG5hbWUsIE5hdGl2ZUZ1bmN0aW9uIG5hdGl2ZUZ1bmN0aW9uLCBJbnRyaW5zaWMgaW50cmluc2lj
LCBOYXRpdmVGdW5jdGlvbiBuYXRpdmVDb25zdHJ1Y3RvcikKIHsKICAgICBOYXRpdmVFeGVjdXRh
YmxlKiBleGVjdXRhYmxlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNG
dW5jdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
RnVuY3Rpb24uaAkocmV2aXNpb24gMTgyNDk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNGdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw2ICsyNCw3IEBACiAjaWZu
ZGVmIEpTRnVuY3Rpb25faAogI2RlZmluZSBKU0Z1bmN0aW9uX2gKIAorI2luY2x1ZGUgIkV4ZWN1
dGFibGUuaCIKICNpbmNsdWRlICJJbnRlcm5hbEZ1bmN0aW9uLmgiCiAjaW5jbHVkZSAiSlNDYWxs
ZWUuaCIKICNpbmNsdWRlICJKU1Njb3BlLmgiCkBAIC01OSwxNSArNjAsMTUgQEAgcHVibGljOgog
ICAgIHR5cGVkZWYgSlNDYWxsZWUgQmFzZTsKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRp
YyBKU0Z1bmN0aW9uKiBjcmVhdGUoVk0mLCBKU0dsb2JhbE9iamVjdCosIGludCBsZW5ndGgsIGNv
bnN0IFN0cmluZyYgbmFtZSwgTmF0aXZlRnVuY3Rpb24sIEludHJpbnNpYyA9IE5vSW50cmluc2lj
LCBOYXRpdmVGdW5jdGlvbiBuYXRpdmVDb25zdHJ1Y3RvciA9IGNhbGxIb3N0RnVuY3Rpb25Bc0Nv
bnN0cnVjdG9yKTsKLQotICAgIHN0YXRpYyBKU0Z1bmN0aW9uKiBjcmVhdGUoVk0mIHZtLCBGdW5j
dGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUsIEpTU2NvcGUqIHNjb3BlKQorICAgIAorICAgIHN0
YXRpYyBKU0Z1bmN0aW9uKiBjcmVhdGVXaXRoSW52YWxpZGF0ZWRSZWFsbG9jYXRpb25XYXRjaHBv
aW50KFZNJiB2bSwgRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlLCBKU1Njb3BlKiBzY29w
ZSkKICAgICB7Ci0gICAgICAgIEpTRnVuY3Rpb24qIGZ1bmN0aW9uID0gbmV3IChOb3ROdWxsLCBh
bGxvY2F0ZUNlbGw8SlNGdW5jdGlvbj4odm0uaGVhcCkpIEpTRnVuY3Rpb24odm0sIGV4ZWN1dGFi
bGUsIHNjb3BlKTsKLSAgICAgICAgQVNTRVJUKGZ1bmN0aW9uLT5zdHJ1Y3R1cmUoKS0+Z2xvYmFs
T2JqZWN0KCkpOwotICAgICAgICBmdW5jdGlvbi0+ZmluaXNoQ3JlYXRpb24odm0pOwotICAgICAg
ICByZXR1cm4gZnVuY3Rpb247CisgICAgICAgIEFTU0VSVChleGVjdXRhYmxlLT5mdW5jdGlvblJl
YWxsb2NhdGlvbldhdGNocG9pbnRTZXQoKS5oYXNCZWVuSW52YWxpZGF0ZWQoKSk7CisgICAgICAg
IHJldHVybiBjcmVhdGVJbXBsKHZtLCBleGVjdXRhYmxlLCBzY29wZSk7CiAgICAgfQogCisgICAg
c3RhdGljIEpTRnVuY3Rpb24qIGNyZWF0ZShWTSYsIEZ1bmN0aW9uRXhlY3V0YWJsZSosIEpTU2Nv
cGUqKTsKKwogICAgIHN0YXRpYyBKU0Z1bmN0aW9uKiBjcmVhdGVCdWlsdGluRnVuY3Rpb24oVk0m
LCBGdW5jdGlvbkV4ZWN1dGFibGUqLCBKU0dsb2JhbE9iamVjdCopOwogCiAgICAgc3RhdGljIHZv
aWQgZGVzdHJveShKU0NlbGwqKTsKQEAgLTE0OSw2ICsxNTAsMTQgQEAgcHJvdGVjdGVkOgogICAg
IHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKIAogcHJp
dmF0ZToKKyAgICBzdGF0aWMgSlNGdW5jdGlvbiogY3JlYXRlSW1wbChWTSYgdm0sIEZ1bmN0aW9u
RXhlY3V0YWJsZSogZXhlY3V0YWJsZSwgSlNTY29wZSogc2NvcGUpCisgICAgeworICAgICAgICBK
U0Z1bmN0aW9uKiBmdW5jdGlvbiA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTRnVuY3Rp
b24+KHZtLmhlYXApKSBKU0Z1bmN0aW9uKHZtLCBleGVjdXRhYmxlLCBzY29wZSk7CisgICAgICAg
IEFTU0VSVChmdW5jdGlvbi0+c3RydWN0dXJlKCktPmdsb2JhbE9iamVjdCgpKTsKKyAgICAgICAg
ZnVuY3Rpb24tPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICAgICAgcmV0dXJuIGZ1bmN0aW9uOwor
ICAgIH0KKyAgICAKICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogCiAg
ICAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIGFyZ3VtZW50c0dldHRlcihFeGVjU3RhdGUqLCBKU09i
amVjdCosIEVuY29kZWRKU1ZhbHVlLCBQcm9wZXJ0eU5hbWUpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkocmV2aXNpb24gMTgy
NDk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMjUsNiArMTI1LDcgQEAKICNpbmNsdWRlICJTeW1ib2xDb25z
dHJ1Y3Rvci5oIgogI2luY2x1ZGUgIlN5bWJvbFByb3RvdHlwZS5oIgogI2luY2x1ZGUgIlZhcmlh
YmxlV2F0Y2hwb2ludFNldElubGluZXMuaCIKKyNpbmNsdWRlICJWYXJpYWJsZVdyaXRlRmlyZURl
dGFpbC5oIgogI2luY2x1ZGUgIldlYWtHQ01hcElubGluZXMuaCIKICNpbmNsdWRlICJXZWFrTWFw
Q29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJXZWFrTWFwUHJvdG90eXBlLmgiCkBAIC00ODksNyAr
NDkwLDcgQEAgSlNHbG9iYWxPYmplY3Q6Ok5ld0dsb2JhbFZhciBKU0dsb2JhbE9iagogICAgIFNj
b3BlT2Zmc2V0IG9mZnNldCA9IHN5bWJvbFRhYmxlKCktPnRha2VOZXh0U2NvcGVPZmZzZXQobG9j
a2VyKTsKICAgICBTeW1ib2xUYWJsZUVudHJ5IG5ld0VudHJ5KFZhck9mZnNldChvZmZzZXQpLCAo
Y29uc3RhbnRNb2RlID09IElzQ29uc3RhbnQpID8gUmVhZE9ubHkgOiAwKTsKICAgICBpZiAoY29u
c3RhbnRNb2RlID09IElzVmFyaWFibGUpCi0gICAgICAgIG5ld0VudHJ5LnByZXBhcmVUb1dhdGNo
KHN5bWJvbFRhYmxlKCkpOworICAgICAgICBuZXdFbnRyeS5wcmVwYXJlVG9XYXRjaCgpOwogICAg
IGVsc2UKICAgICAgICAgbmV3RW50cnkuZGlzYWJsZVdhdGNoaW5nKCk7CiAgICAgc3ltYm9sVGFi
bGUoKS0+YWRkKGxvY2tlciwgaWRlbnQuaW1wbCgpLCBuZXdFbnRyeSk7CkBAIC01MTAsNyArNTEx
LDcgQEAgdm9pZCBKU0dsb2JhbE9iamVjdDo6YWRkRnVuY3Rpb24oRXhlY1N0YQogICAgIE5ld0ds
b2JhbFZhciB2YXIgPSBhZGRHbG9iYWxWYXIocHJvcGVydHlOYW1lLCBJc1ZhcmlhYmxlKTsKICAg
ICB2YXJpYWJsZUF0KHZhci5vZmZzZXQpLnNldChleGVjLT52bSgpLCB0aGlzLCB2YWx1ZSk7CiAg
ICAgaWYgKHZhci5zZXQpCi0gICAgICAgIHZhci5zZXQtPm5vdGlmeVdyaXRlKHZtLCB2YWx1ZSwg
VmFyaWFibGVXcml0ZUZpcmVEZXRhaWwodGhpcywgcHJvcGVydHlOYW1lKSk7CisgICAgICAgIHZh
ci5zZXQtPnRvdWNoKFZhcmlhYmxlV3JpdGVGaXJlRGV0YWlsKHRoaXMsIHByb3BlcnR5TmFtZSkp
OwogfQogCiBzdGF0aWMgaW5saW5lIEpTT2JqZWN0KiBsYXN0SW5Qcm90b3R5cGVDaGFpbihKU09i
amVjdCogb2JqZWN0KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9i
YWxPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0dsb2JhbE9iamVjdC5oCShyZXZpc2lvbiAxODI0OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMzQsNyArMzM0
LDcgQEAgcHJvdGVjdGVkOgogCiAgICAgc3RydWN0IE5ld0dsb2JhbFZhciB7CiAgICAgICAgIFNj
b3BlT2Zmc2V0IG9mZnNldDsKLSAgICAgICAgVmFyaWFibGVXYXRjaHBvaW50U2V0KiBzZXQ7Cisg
ICAgICAgIFdhdGNocG9pbnRTZXQqIHNldDsKICAgICB9OwogICAgIE5ld0dsb2JhbFZhciBhZGRH
bG9iYWxWYXIoY29uc3QgSWRlbnRpZmllciYsIENvbnN0YW50TW9kZSk7CiAKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTGV4aWNhbEVudmlyb25tZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xleGljYWxFbnZpcm9ubWVu
dC5jcHAJKHJldmlzaW9uIDE4MjQ5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTTGV4aWNhbEVudmlyb25tZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzcsNiArNzcsNyBA
QCBpbmxpbmUgYm9vbCBKU0xleGljYWxFbnZpcm9ubWVudDo6c3ltYm9sCiAgICAgQVNTRVJUKCFI
ZWFwOjpoZWFwKHZhbHVlKSB8fCBIZWFwOjpoZWFwKHZhbHVlKSA9PSBIZWFwOjpoZWFwKHRoaXMp
KTsKICAgICAKICAgICBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiByZWc7CisgICAgV2F0Y2hw
b2ludFNldCogc2V0OwogICAgIHsKICAgICAgICAgR0NTYWZlQ29uY3VycmVudEpJVExvY2tlciBs
b2NrZXIoc3ltYm9sVGFibGUoKS0+bV9sb2NrLCBleGVjLT52bSgpLmhlYXApOwogICAgICAgICBT
eW1ib2xUYWJsZTo6TWFwOjppdGVyYXRvciBpdGVyID0gc3ltYm9sVGFibGUoKS0+ZmluZChsb2Nr
ZXIsIHByb3BlcnR5TmFtZS51aWQoKSk7CkBAIC05MiwxMSArOTMsMTIgQEAgaW5saW5lIGJvb2wg
SlNMZXhpY2FsRW52aXJvbm1lbnQ6OnN5bWJvbAogICAgICAgICAvLyBEZWZlbmQgYWdhaW5zdCB0
aGUgaW5zcGVjdG9yIGFza2luZyBmb3IgYSB2YXIgYWZ0ZXIgaXQgaGFzIGJlZW4gb3B0aW1pemVk
IG91dC4KICAgICAgICAgaWYgKCFpc1ZhbGlkKG9mZnNldCkpCiAgICAgICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgICAgIGlmIChWYXJpYWJsZVdhdGNocG9pbnRTZXQqIHNldCA9IGl0ZXItPnZh
bHVlLndhdGNocG9pbnRTZXQoKSkKLSAgICAgICAgICAgIHNldC0+aW52YWxpZGF0ZShWYXJpYWJs
ZVdyaXRlRmlyZURldGFpbCh0aGlzLCBwcm9wZXJ0eU5hbWUpKTsgLy8gRG9uJ3QgbWVzcyBhcm91
bmQgLSBpZiB3ZSBoYWQgZm91bmQgdGhpcyBzdGF0aWNhbGx5LCB3ZSB3b3VsZCBoYXZlIGludmFs
aWRhdGVkIGl0LgorICAgICAgICBzZXQgPSBpdGVyLT52YWx1ZS53YXRjaHBvaW50U2V0KCk7CiAg
ICAgICAgIHJlZyA9ICZ2YXJpYWJsZUF0KG9mZnNldCk7CiAgICAgfQogICAgIHJlZy0+c2V0KHZt
LCB0aGlzLCB2YWx1ZSk7CisgICAgaWYgKHNldCkKKyAgICAgICAgc2V0LT5pbnZhbGlkYXRlKFZh
cmlhYmxlV3JpdGVGaXJlRGV0YWlsKHRoaXMsIHByb3BlcnR5TmFtZSkpOyAvLyBEb24ndCBtZXNz
IGFyb3VuZCAtIGlmIHdlIGhhZCBmb3VuZCB0aGlzIHN0YXRpY2FsbHksIHdlIHdvdWxkIGhhdmUg
aW52YWxpZGF0ZWQgaXQuCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTU2NvcGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1Njb3BlLmgJKHJldmlzaW9uIDE4MjQ5OCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2NvcGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyAr
MzEsNyBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIFNjb3BlQ2hhaW5JdGVyYXRvcjsKLWNs
YXNzIFZhcmlhYmxlV2F0Y2hwb2ludFNldDsKK2NsYXNzIFdhdGNocG9pbnRTZXQ7CiAKIGVudW0g
UmVzb2x2ZU1vZGUgewogICAgIFRocm93SWZOb3RGb3VuZCwKQEAgLTEwMiw3ICsxMDIsNyBAQCBp
bmxpbmUgYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhSZXNvCiB9CiAKIHN0cnVjdCBSZXNv
bHZlT3AgewotICAgIFJlc29sdmVPcChSZXNvbHZlVHlwZSB0eXBlLCBzaXplX3QgZGVwdGgsIFN0
cnVjdHVyZSogc3RydWN0dXJlLCBKU0xleGljYWxFbnZpcm9ubWVudCogbGV4aWNhbEVudmlyb25t
ZW50LCBWYXJpYWJsZVdhdGNocG9pbnRTZXQqIHdhdGNocG9pbnRTZXQsIHVpbnRwdHJfdCBvcGVy
YW5kKQorICAgIFJlc29sdmVPcChSZXNvbHZlVHlwZSB0eXBlLCBzaXplX3QgZGVwdGgsIFN0cnVj
dHVyZSogc3RydWN0dXJlLCBKU0xleGljYWxFbnZpcm9ubWVudCogbGV4aWNhbEVudmlyb25tZW50
LCBXYXRjaHBvaW50U2V0KiB3YXRjaHBvaW50U2V0LCB1aW50cHRyX3Qgb3BlcmFuZCkKICAgICAg
ICAgOiB0eXBlKHR5cGUpCiAgICAgICAgICwgZGVwdGgoZGVwdGgpCiAgICAgICAgICwgc3RydWN0
dXJlKHN0cnVjdHVyZSkKQEAgLTExNiw3ICsxMTYsNyBAQCBzdHJ1Y3QgUmVzb2x2ZU9wIHsKICAg
ICBzaXplX3QgZGVwdGg7CiAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmU7CiAgICAgSlNMZXhpY2Fs
RW52aXJvbm1lbnQqIGxleGljYWxFbnZpcm9ubWVudDsKLSAgICBWYXJpYWJsZVdhdGNocG9pbnRT
ZXQqIHdhdGNocG9pbnRTZXQ7CisgICAgV2F0Y2hwb2ludFNldCogd2F0Y2hwb2ludFNldDsKICAg
ICB1aW50cHRyX3Qgb3BlcmFuZDsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmgJKHJldmlzaW9uIDE4MjQ5OCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuaAko
d29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQAogI2luY2x1ZGUgIkpTU2NvcGUuaCIKICNp
bmNsdWRlICJQcm9wZXJ0eURlc2NyaXB0b3IuaCIKICNpbmNsdWRlICJTeW1ib2xUYWJsZS5oIgot
I2luY2x1ZGUgIlZhcmlhYmxlV2F0Y2hwb2ludFNldElubGluZXMuaCIKKyNpbmNsdWRlICJWYXJp
YWJsZVdyaXRlRmlyZURldGFpbC5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtMTI2LDYgKzEy
Niw3IEBAIGlubGluZSBib29sIHN5bWJvbFRhYmxlUHV0KAogICAgIEFTU0VSVCghSGVhcDo6aGVh
cCh2YWx1ZSkgfHwgSGVhcDo6aGVhcCh2YWx1ZSkgPT0gSGVhcDo6aGVhcChvYmplY3QpKTsKICAg
ICAKICAgICBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiByZWc7CisgICAgV2F0Y2hwb2ludFNl
dCogc2V0OwogICAgIHsKICAgICAgICAgU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlID0gKm9iamVj
dC0+c3ltYm9sVGFibGUoKTsKICAgICAgICAgLy8gRklYTUU6IFRoaXMgaXMgdmVyeSBzdXNwaWNp
b3VzLiBXZSBzaG91bGRuJ3QgbmVlZCBhIEdDLXNhZmUgbG9jayBoZXJlLgpAQCAtMTQyLDE3ICsx
NDMsMTUgQEAgaW5saW5lIGJvb2wgc3ltYm9sVGFibGVQdXQoCiAgICAgICAgICAgICAgICAgdGhy
b3dUeXBlRXJyb3IoZXhlYywgU3RyaWN0TW9kZVJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsK
ICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9Ci0gICAgICAgIGlmIChWYXJpYWJs
ZVdhdGNocG9pbnRTZXQqIHNldCA9IGl0ZXItPnZhbHVlLndhdGNocG9pbnRTZXQoKSkgewotICAg
ICAgICAgICAgLy8gRklYTUU6IEl0J3Mgc3RyYW5nZSB0aGF0IHdlJ3JlIGRvaW5nIHRoaXMgd2hp
bGUgaG9sZGluZyB0aGUgc3ltYm9sIHRhYmxlJ3MgbG9jay4KLSAgICAgICAgICAgIC8vIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzQ2MDEKLSAgICAgICAgICAgIHNl
dC0+bm90aWZ5V3JpdGUodm0sIHZhbHVlLCBvYmplY3QsIHByb3BlcnR5TmFtZSk7Ci0gICAgICAg
IH0KKyAgICAgICAgc2V0ID0gaXRlci0+dmFsdWUud2F0Y2hwb2ludFNldCgpOwogICAgICAgICBy
ZWcgPSAmb2JqZWN0LT52YXJpYWJsZUF0KGZhc3RFbnRyeS5zY29wZU9mZnNldCgpKTsKICAgICB9
CiAgICAgLy8gSSdkIHByZWZlciB3ZSBub3QgaG9sZCBsb2NrIHdoaWxlIGV4ZWN1dGluZyBiYXJy
aWVycywgc2luY2UgSSBwcmVmZXIgdG8gcmVzZXJ2ZQogICAgIC8vIHRoZSByaWdodCBmb3IgYmFy
cmllcnMgdG8gYmUgYWJsZSB0byB0cmlnZ2VyIEdDLiBBbmQgSSBkb24ndCB3YW50IHRvIGhvbGQg
Vk0KICAgICAvLyBsb2NrcyB3aGlsZSBHQydpbmcuCiAgICAgcmVnLT5zZXQodm0sIG9iamVjdCwg
dmFsdWUpOworICAgIGlmIChzZXQpCisgICAgICAgIFZhcmlhYmxlV3JpdGVGaXJlRGV0YWlsOjp0
b3VjaChzZXQsIG9iamVjdCwgcHJvcGVydHlOYW1lKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApA
QCAtMTY0LDYgKzE2Myw3IEBAIGlubGluZSBib29sIHN5bWJvbFRhYmxlUHV0V2l0aEF0dHJpYnV0
ZXMKICAgICBBU1NFUlQoIUhlYXA6OmhlYXAodmFsdWUpIHx8IEhlYXA6OmhlYXAodmFsdWUpID09
IEhlYXA6OmhlYXAob2JqZWN0KSk7CiAKICAgICBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiBy
ZWc7CisgICAgV2F0Y2hwb2ludFNldCogc2V0OwogICAgIHsKICAgICAgICAgU3ltYm9sVGFibGUm
IHN5bWJvbFRhYmxlID0gKm9iamVjdC0+c3ltYm9sVGFibGUoKTsKICAgICAgICAgQ29uY3VycmVu
dEpJVExvY2tlciBsb2NrZXIoc3ltYm9sVGFibGUubV9sb2NrKTsKQEAgLTE3MiwxMiArMTcyLDEz
IEBAIGlubGluZSBib29sIHN5bWJvbFRhYmxlUHV0V2l0aEF0dHJpYnV0ZXMKICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgICAgU3ltYm9sVGFibGVFbnRyeSYgZW50cnkgPSBpdGVyLT52
YWx1ZTsKICAgICAgICAgQVNTRVJUKCFlbnRyeS5pc051bGwoKSk7Ci0gICAgICAgIGlmIChWYXJp
YWJsZVdhdGNocG9pbnRTZXQqIHNldCA9IGVudHJ5LndhdGNocG9pbnRTZXQoKSkKLSAgICAgICAg
ICAgIHNldC0+bm90aWZ5V3JpdGUodm0sIHZhbHVlLCBvYmplY3QsIHByb3BlcnR5TmFtZSk7Cisg
ICAgICAgIHNldCA9IGVudHJ5LndhdGNocG9pbnRTZXQoKTsKICAgICAgICAgZW50cnkuc2V0QXR0
cmlidXRlcyhhdHRyaWJ1dGVzKTsKICAgICAgICAgcmVnID0gJm9iamVjdC0+dmFyaWFibGVBdChl
bnRyeS5zY29wZU9mZnNldCgpKTsKICAgICB9CiAgICAgcmVnLT5zZXQodm0sIG9iamVjdCwgdmFs
dWUpOworICAgIGlmIChzZXQpCisgICAgICAgIFZhcmlhYmxlV3JpdGVGaXJlRGV0YWlsOjp0b3Vj
aChzZXQsIG9iamVjdCwgcHJvcGVydHlOYW1lKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHV0UHJvcGVydHlTbG90LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHV0UHJvcGVydHlTbG90LmgJ
KHJldmlzaW9uIDE4MjQ5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1B1dFBy
b3BlcnR5U2xvdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAjZGVmaW5lIFB1
dFByb3BlcnR5U2xvdF9oCiAKICNpbmNsdWRlICJKU0NKU1ZhbHVlLmgiCisjaW5jbHVkZSAiUHJv
cGVydHlPZmZzZXQuaCIKIAogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5jcHAJKHJldmlzaW9u
IDE4MjQ5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMsNiBAQAogI2luY2x1ZGUgIkpTQ0lubGluZXMu
aCIKICNpbmNsdWRlICJTbG90VmlzaXRvcklubGluZXMuaCIKICNpbmNsdWRlICJUeXBlUHJvZmls
ZXIuaCIKLSNpbmNsdWRlICJWYXJpYWJsZVdhdGNocG9pbnRTZXRJbmxpbmVzLmgiCiAKIG5hbWVz
cGFjZSBKU0MgewogCkBAIC02MCwyMSArNTksMTQgQEAgdm9pZCBTeW1ib2xUYWJsZUVudHJ5Ojpm
cmVlRmF0RW50cnlTbG93KAogICAgIGRlbGV0ZSBmYXRFbnRyeSgpOwogfQogCi1KU1ZhbHVlIFN5
bWJvbFRhYmxlRW50cnk6OmluZmVycmVkVmFsdWUoKQotewotICAgIGlmICghaXNGYXQoKSkKLSAg
ICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKLSAgICByZXR1cm4gZmF0RW50cnkoKS0+bV93YXRjaHBv
aW50cy0+aW5mZXJyZWRWYWx1ZSgpOwotfQotCi12b2lkIFN5bWJvbFRhYmxlRW50cnk6OnByZXBh
cmVUb1dhdGNoKFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSkKK3ZvaWQgU3ltYm9sVGFibGVFbnRy
eTo6cHJlcGFyZVRvV2F0Y2goKQogewogICAgIGlmICghaXNXYXRjaGFibGUoKSkKICAgICAgICAg
cmV0dXJuOwogICAgIEZhdEVudHJ5KiBlbnRyeSA9IGluZmxhdGUoKTsKICAgICBpZiAoZW50cnkt
Pm1fd2F0Y2hwb2ludHMpCiAgICAgICAgIHJldHVybjsKLSAgICBlbnRyeS0+bV93YXRjaHBvaW50
cyA9IGFkb3B0UmVmKG5ldyBWYXJpYWJsZVdhdGNocG9pbnRTZXQoKnN5bWJvbFRhYmxlKSk7Cisg
ICAgZW50cnktPm1fd2F0Y2hwb2ludHMgPSBhZG9wdFJlZihuZXcgV2F0Y2hwb2ludFNldChDbGVh
cldhdGNocG9pbnQpKTsKIH0KIAogdm9pZCBTeW1ib2xUYWJsZUVudHJ5OjphZGRXYXRjaHBvaW50
KFdhdGNocG9pbnQqIHdhdGNocG9pbnQpCkBAIC04MiwxNSArNzQsNiBAQCB2b2lkIFN5bWJvbFRh
YmxlRW50cnk6OmFkZFdhdGNocG9pbnQoV2F0CiAgICAgZmF0RW50cnkoKS0+bV93YXRjaHBvaW50
cy0+YWRkKHdhdGNocG9pbnQpOwogfQogCi12b2lkIFN5bWJvbFRhYmxlRW50cnk6Om5vdGlmeVdy
aXRlU2xvdyhWTSYgdm0sIEpTVmFsdWUgdmFsdWUsIGNvbnN0IEZpcmVEZXRhaWwmIGRldGFpbCkK
LXsKLSAgICBWYXJpYWJsZVdhdGNocG9pbnRTZXQqIHdhdGNocG9pbnRzID0gZmF0RW50cnkoKS0+
bV93YXRjaHBvaW50cy5nZXQoKTsKLSAgICBpZiAoIXdhdGNocG9pbnRzKQotICAgICAgICByZXR1
cm47Ci0gICAgCi0gICAgd2F0Y2hwb2ludHMtPm5vdGlmeVdyaXRlKHZtLCB2YWx1ZSwgZGV0YWls
KTsKLX0KLQogU3ltYm9sVGFibGVFbnRyeTo6RmF0RW50cnkqIFN5bWJvbFRhYmxlRW50cnk6Omlu
ZmxhdGVTbG93KCkKIHsKICAgICBGYXRFbnRyeSogZW50cnkgPSBuZXcgRmF0RW50cnkobV9iaXRz
KTsKQEAgLTEwMSw3ICs4NCw2IEBAIFN5bWJvbFRhYmxlRW50cnk6OkZhdEVudHJ5KiBTeW1ib2xU
YWJsZUUKIFN5bWJvbFRhYmxlOjpTeW1ib2xUYWJsZShWTSYgdm0pCiAgICAgOiBKU0NlbGwodm0s
IHZtLnN5bWJvbFRhYmxlU3RydWN0dXJlLmdldCgpKQogICAgICwgbV91c2VzTm9uU3RyaWN0RXZh
bChmYWxzZSkKLSAgICAsIG1fZnVuY3Rpb25FbnRlcmVkT25jZShDbGVhcldhdGNocG9pbnQpCiB7
CiB9CiAKQEAgLTExMywzNiArOTUsMTEgQEAgdm9pZCBTeW1ib2xUYWJsZTo6dmlzaXRDaGlsZHJl
bihKU0NlbGwqIAogICAgIAogICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzU3ltYm9sVGFibGUtPm1f
YXJndW1lbnRzKTsKICAgICAKLSAgICBpZiAoIXRoaXNTeW1ib2xUYWJsZS0+bV93YXRjaHBvaW50
Q2xlYW51cCkgewotICAgICAgICB0aGlzU3ltYm9sVGFibGUtPm1fd2F0Y2hwb2ludENsZWFudXAg
PQotICAgICAgICAgICAgc3RkOjptYWtlX3VuaXF1ZTxXYXRjaHBvaW50Q2xlYW51cD4odGhpc1N5
bWJvbFRhYmxlKTsKLSAgICB9Ci0gICAgCi0gICAgdmlzaXRvci5hZGRVbmNvbmRpdGlvbmFsRmlu
YWxpemVyKHRoaXNTeW1ib2xUYWJsZS0+bV93YXRjaHBvaW50Q2xlYW51cC5nZXQoKSk7Ci0gICAg
CiAgICAgLy8gU2F2ZSBzb21lIG1lbW9yeS4gVGhpcyBpcyBPKG4pIHRvIHJlYnVpbGQgYW5kIHdl
IGRvIHNvIG9uIHRoZSBmbHkuCiAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIodGhpc1N5
bWJvbFRhYmxlLT5tX2xvY2spOwogICAgIHRoaXNTeW1ib2xUYWJsZS0+bV9sb2NhbFRvRW50cnkg
PSBudWxscHRyOwogfQogCi1TeW1ib2xUYWJsZTo6V2F0Y2hwb2ludENsZWFudXA6OldhdGNocG9p
bnRDbGVhbnVwKFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSkKLSAgICA6IG1fc3ltYm9sVGFibGUo
c3ltYm9sVGFibGUpCi17Ci19Ci0KLVN5bWJvbFRhYmxlOjpXYXRjaHBvaW50Q2xlYW51cDo6fldh
dGNocG9pbnRDbGVhbnVwKCkgeyB9Ci0KLXZvaWQgU3ltYm9sVGFibGU6OldhdGNocG9pbnRDbGVh
bnVwOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSgpCi17Ci0gICAgU3RyaW5nRmlyZURldGFpbCBk
ZXRhaWwoIlN5bWJvbCB0YWJsZSBjbGVhbi11cCBkdXJpbmcgR0MiKTsKLSAgICBNYXA6Oml0ZXJh
dG9yIGl0ZXIgPSBtX3N5bWJvbFRhYmxlLT5tX21hcC5iZWdpbigpOwotICAgIE1hcDo6aXRlcmF0
b3IgZW5kID0gbV9zeW1ib2xUYWJsZS0+bV9tYXAuZW5kKCk7Ci0gICAgZm9yICg7IGl0ZXIgIT0g
ZW5kOyArK2l0ZXIpIHsKLSAgICAgICAgaWYgKFZhcmlhYmxlV2F0Y2hwb2ludFNldCogc2V0ID0g
aXRlci0+dmFsdWUud2F0Y2hwb2ludFNldCgpKQotICAgICAgICAgICAgc2V0LT5maW5hbGl6ZVVu
Y29uZGl0aW9uYWxseShkZXRhaWwpOwotICAgIH0KLX0KLQogY29uc3QgU3ltYm9sVGFibGU6Okxv
Y2FsVG9FbnRyeVZlYyYgU3ltYm9sVGFibGU6OmxvY2FsVG9FbnRyeShjb25zdCBDb25jdXJyZW50
SklUTG9ja2VyJikKIHsKICAgICBpZiAoVU5MSUtFTFkoIW1fbG9jYWxUb0VudHJ5KSkgewpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5oCShyZXZpc2lv
biAxODI0OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0zNSwxMyArMzUsMTUgQEAKICNpbmNsdWRlICJTY29wZWRBcmd1
bWVudHNUYWJsZS5oIgogI2luY2x1ZGUgIlR5cGVMb2NhdGlvbi5oIgogI2luY2x1ZGUgIlZhck9m
ZnNldC5oIgotI2luY2x1ZGUgIlZhcmlhYmxlV2F0Y2hwb2ludFNldC5oIgorI2luY2x1ZGUgIldh
dGNocG9pbnQuaCIKICNpbmNsdWRlIDxtZW1vcnk+CiAjaW5jbHVkZSA8d3RmL0hhc2hUcmFpdHMu
aD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdJbXBsLmg+CiAKIG5hbWVzcGFjZSBKU0Mgewog
CitjbGFzcyBTeW1ib2xUYWJsZTsKKwogc3RhdGljIEFMV0FZU19JTkxJTkUgaW50IG1pc3NpbmdT
eW1ib2xNYXJrZXIoKSB7IHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpOyB9
CiAKIC8vIFRoZSBiaXQgdHdpZGRsaW5nIGluIHRoaXMgY2xhc3MgYXNzdW1lcyB0aGF0IGV2ZXJ5
IHJlZ2lzdGVyIGluZGV4IGlzIGEKQEAgLTYzLDExICs2NSwxMSBAQCBzdGF0aWMgQUxXQVlTX0lO
TElORSBpbnQgbWlzc2luZ1N5bWJvbE1hCiAvLyBjb3VudGVkIHBvaW50ZXIgdG8gYSBzaGFyZWQg
V2F0Y2hwb2ludFNldC4gVGh1cywgaW4tcGxhY2UgZWRpdHMgb2YgdGhlCiAvLyBXYXRjaHBvaW50
U2V0IHdpbGwgbWFuaWZlc3QgaW4gYWxsIGNvcGllcy4gSGVyZSdzIGEgcGljdHVyZToKIC8vCi0v
LyBTeW1ib2xUYWJsZUVudHJ5IC0tPiBGYXRFbnRyeSAtLT4gVmFyaWFibGVXYXRjaHBvaW50U2V0
CisvLyBTeW1ib2xUYWJsZUVudHJ5IC0tPiBGYXRFbnRyeSAtLT4gV2F0Y2hwb2ludFNldAogLy8K
IC8vIElmIHlvdSBtYWtlIGEgY29weSBvZiBhIFN5bWJvbFRhYmxlRW50cnksIHlvdSB3aWxsIGhh
dmU6CiAvLwotLy8gb3JpZ2luYWw6IFN5bWJvbFRhYmxlRW50cnkgLS0+IEZhdEVudHJ5IC0tPiBW
YXJpYWJsZVdhdGNocG9pbnRTZXQKKy8vIG9yaWdpbmFsOiBTeW1ib2xUYWJsZUVudHJ5IC0tPiBG
YXRFbnRyeSAtLT4gV2F0Y2hwb2ludFNldAogLy8gY29weTogICAgIFN5bWJvbFRhYmxlRW50cnkg
LS0+IEZhdEVudHJ5IC0tLS0tXgogCiBzdHJ1Y3QgU3ltYm9sVGFibGVFbnRyeSB7CkBAIC0yNjAs
MzIgKzI2Miw0NCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBiaXRzKCkgJiBEb250RW51bUZs
YWc7CiAgICAgfQogICAgIAotICAgIEpTVmFsdWUgaW5mZXJyZWRWYWx1ZSgpOwotCiAgICAgdm9p
ZCBkaXNhYmxlV2F0Y2hpbmcoKQogICAgIHsKKyAgICAgICAgaWYgKFdhdGNocG9pbnRTZXQqIHNl
dCA9IHdhdGNocG9pbnRTZXQoKSkKKyAgICAgICAgICAgIHNldC0+aW52YWxpZGF0ZSgiRGlzYWJs
aW5nIHdhdGNoaW5nIGluIHN5bWJvbCB0YWJsZSIpOwogICAgICAgICBpZiAodmFyT2Zmc2V0KCku
aXNTY29wZSgpKQogICAgICAgICAgICAgcGFjayh2YXJPZmZzZXQoKSwgZmFsc2UsIGlzUmVhZE9u
bHkoKSwgaXNEb250RW51bSgpKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBwcmVwYXJlVG9XYXRj
aChTeW1ib2xUYWJsZSopOworICAgIHZvaWQgcHJlcGFyZVRvV2F0Y2goKTsKICAgICAKICAgICB2
b2lkIGFkZFdhdGNocG9pbnQoV2F0Y2hwb2ludCopOwogICAgIAotICAgIFZhcmlhYmxlV2F0Y2hw
b2ludFNldCogd2F0Y2hwb2ludFNldCgpCisgICAgLy8gVGhpcyB3YXRjaHBvaW50IHNldCBpcyBp
bml0aWFsaXplZCBjbGVhciwgYW5kIGdvZXMgdGhyb3VnaCB0aGUgZm9sbG93aW5nIHN0YXRlIHRy
YW5zaXRpb25zOgorICAgIC8vIAorICAgIC8vIEZpcnN0IHdyaXRlIHRvIHRoaXMgdmFyLCBpbiBh
bnkgc2NvcGUgdGhhdCBoYXMgdGhpcyBzeW1ib2wgdGFibGU6IENsZWFyLT5Jc1dhdGNoZWQuCisg
ICAgLy8KKyAgICAvLyBTZWNvbmQgd3JpdGUgdG8gdGhpcyB2YXIsIGluIGFueSBzY29wZSB0aGF0
IGhhcyB0aGlzIHN5bWJvbCB0YWJsZTogSXNXYXRjaGVkLT5Jc0ludmFsaWRhdGVkLgorICAgIC8v
CisgICAgLy8gV2UgZW5zdXJlIHRoYXQgd2UgdG91Y2ggdGhlIHNldCAoaS5lLiB0cmlnZ2VyIGl0
cyBzdGF0ZSB0cmFuc2l0aW9uKSBhZnRlciB3ZSBkbyB0aGUgd3JpdGUuIFRoaXMKKyAgICAvLyBt
ZWFucyB0aGF0IGlmIHlvdSdyZSBpbiB0aGUgY29tcGlsZXIgdGhyZWFkLCBhbmQgeW91OgorICAg
IC8vCisgICAgLy8gMSkgT2JzZXJ2ZSB0aGF0IHRoZSBzZXQgSXNXYXRjaGVkIGFuZCBjb21taXQg
dG8gYWRkaW5nIHlvdXIgd2F0Y2hwb2ludC4KKyAgICAvLyAyKSBMb2FkIGEgdmFsdWUgZnJvbSBh
bnkgc2NvcGUgdGhhdCBoYXMgdGhpcyB3YXRjaHBvaW50IHNldC4KKyAgICAvLworICAgIC8vIFRo
ZW4geW91IGNhbiBiZSBzdXJlIHRoYXQgdGhhdCB2YWx1ZSBpcyBlaXRoZXIgZ29pbmcgdG8gYmUg
dGhlIGNvcnJlY3QgdmFsdWUgZm9yIHRoYXQgdmFyIGZvcmV2ZXIsCisgICAgLy8gb3IgdGhlIHdh
dGNocG9pbnQgc2V0IHdpbGwgaW52YWxpZGF0ZSBhbmQgeW91J2xsIGdldCBmaXJlZC4KKyAgICAv
LworICAgIC8vIEl0J3MgcG9zc2libGUgdG8gd3JpdGUgYSBwcm9ncmFtIHRoYXQgZmlyc3QgY3Jl
YXRlcyBtdWx0aXBsZSBzY29wZXMgd2l0aCB0aGUgc2FtZSB2YXIsIGFuZCB0aGVuCisgICAgLy8g
aW5pdGlhbGl6ZXMgdGhhdCB2YXIgaW4ganVzdCBvbmUgb2YgdGhlbS4gVGhpcyBtZWFucyB0aGF0
IGEgY29tcGlsYXRpb24gY291bGQgY29uc3RhbnQtZm9sZCB0byBvbmUKKyAgICAvLyBvZiB0aGUg
c2NvcGVzIHRoYXQgc3RpbGwgaGFzIGFuIHVuZGVmaW5lZCB2YWx1ZSBmb3IgdGhpcyB2YXJpYWJs
ZS4gVGhhdCdzIGZpbmUsIGJlY2F1c2UgYXQgdGhhdAorICAgIC8vIHBvaW50IGFueSB3cml0ZSB0
byBhbnkgb2YgdGhlIGluc3RhbmNlcyBvZiB0aGF0IHZhcmlhYmxlIHdvdWxkIGZpcmUgdGhlIHdh
dGNocG9pbnQuCisgICAgV2F0Y2hwb2ludFNldCogd2F0Y2hwb2ludFNldCgpCiAgICAgewogICAg
ICAgICBpZiAoIWlzRmF0KCkpCiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAgICAgcmV0dXJu
IGZhdEVudHJ5KCktPm1fd2F0Y2hwb2ludHMuZ2V0KCk7CiAgICAgfQogICAgIAotICAgIEFMV0FZ
U19JTkxJTkUgdm9pZCBub3RpZnlXcml0ZShWTSYgdm0sIEpTVmFsdWUgdmFsdWUsIGNvbnN0IEZp
cmVEZXRhaWwmIGRldGFpbCkKLSAgICB7Ci0gICAgICAgIGlmIChMSUtFTFkoIWlzRmF0KCkpKQot
ICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBub3RpZnlXcml0ZVNsb3codm0sIHZhbHVlLCBk
ZXRhaWwpOwotICAgIH0KLSAgICAKIHByaXZhdGU6CiAgICAgc3RhdGljIGNvbnN0IGludHB0cl90
IFNsaW1GbGFnID0gMHgxOwogICAgIHN0YXRpYyBjb25zdCBpbnRwdHJfdCBSZWFkT25seUZsYWcg
PSAweDI7CkBAIC0zMDgsNyArMzIyLDcgQEAgcHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIGlu
dHB0cl90IG1fYml0czsgLy8gYWx3YXlzIGhhcyBGYXRGbGFnIHNldCBhbmQgZXhhY3RseSBtYXRj
aGVzIHdoYXQgdGhlIGJpdHMgd291bGQgaGF2ZSBiZWVuIGlmIHRoaXMgd2Fzbid0IGZhdC4KICAg
ICAgICAgCi0gICAgICAgIFJlZlB0cjxWYXJpYWJsZVdhdGNocG9pbnRTZXQ+IG1fd2F0Y2hwb2lu
dHM7CisgICAgICAgIFJlZlB0cjxXYXRjaHBvaW50U2V0PiBtX3dhdGNocG9pbnRzOwogICAgIH07
CiAgICAgCiAgICAgU3ltYm9sVGFibGVFbnRyeSYgY29weVNsb3coY29uc3QgU3ltYm9sVGFibGVF
bnRyeSYpOwpAQCAtNjQ2LDE4ICs2NjAsNiBAQCBwcm90ZWN0ZWQ6CiAgICAgc3RhdGljIGNvbnN0
IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gU3RydWN0dXJlSXNJbW1vcnRhbCB8IEJhc2U6OlN0
cnVjdHVyZUZsYWdzOwogCiBwcml2YXRlOgotICAgIGNsYXNzIFdhdGNocG9pbnRDbGVhbnVwIDog
cHVibGljIFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIgewotICAgIHB1YmxpYzoKLSAgICAgICAgV2F0
Y2hwb2ludENsZWFudXAoU3ltYm9sVGFibGUqKTsKLSAgICAgICAgdmlydHVhbCB+V2F0Y2hwb2lu
dENsZWFudXAoKTsKLSAgICAgICAgCi0gICAgcHJvdGVjdGVkOgotICAgICAgICB2aXJ0dWFsIHZv
aWQgZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoKSBvdmVycmlkZTsKLQotICAgIHByaXZhdGU6Ci0g
ICAgICAgIFN5bWJvbFRhYmxlKiBtX3N5bWJvbFRhYmxlOwotICAgIH07Ci0gICAgCiAgICAgSlNf
RVhQT1JUX1BSSVZBVEUgU3ltYm9sVGFibGUoVk0mKTsKICAgICB+U3ltYm9sVGFibGUoKTsKIApA
QCAtNjc1LDEyICs2NzcsOSBAQCBwcml2YXRlOgogICAgIAogICAgIFdyaXRlQmFycmllcjxTY29w
ZWRBcmd1bWVudHNUYWJsZT4gbV9hcmd1bWVudHM7CiAgICAgCi0gICAgc3RkOjp1bmlxdWVfcHRy
PFdhdGNocG9pbnRDbGVhbnVwPiBtX3dhdGNocG9pbnRDbGVhbnVwOwogICAgIHN0ZDo6dW5pcXVl
X3B0cjxMb2NhbFRvRW50cnlWZWM+IG1fbG9jYWxUb0VudHJ5OwogCiBwdWJsaWM6Ci0gICAgSW5s
aW5lV2F0Y2hwb2ludFNldCBtX2Z1bmN0aW9uRW50ZXJlZE9uY2U7Ci0gICAgCiAgICAgbXV0YWJs
ZSBDb25jdXJyZW50SklUTG9jayBtX2xvY2s7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9UeXBlUHJvZmlsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1R5cGVQcm9maWxlci5jcHAJKHJldmlzaW9uIDE4MjQ5OCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVQcm9maWxlci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgIkluc3BlY3RvclByb3RvY29sT2Jq
ZWN0cy5oIgogI2luY2x1ZGUgIlR5cGVMb2NhdGlvbi5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0
cmluZ0J1aWxkZXIuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS90ZXN0cy9zdHJlc3MvaW5mZXItdW5pbml0aWFsaXplZC1jbG9zdXJlLXZhci5qcwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2luZmVyLXVu
aW5pdGlhbGl6ZWQtY2xvc3VyZS12YXIuanMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvdGVzdHMvc3RyZXNzL2luZmVyLXVuaW5pdGlhbGl6ZWQtY2xvc3VyZS12YXIuanMJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNiBAQAorZnVuY3Rpb24gZm9vKHApIHsKKyAgICB2
YXIgeDsKKyAgICAKKyAgICBub0lubGluZShmKTsKKyAgICAKKyAgICBpZiAocCkgeworICAgICAg
ICB2YXIgZiA9IGZ1bmN0aW9uKCkgeyByZXR1cm4geDsgfQorICAgICAgICAKKyAgICAgICAgZm9v
KGZhbHNlKTsKKyAgICAgICAgCisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7ICsr
aSkgeworICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGYoKTsKKyAgICAgICAgICAgIGlmIChyZXN1
bHQgIT09IHZvaWQgMCkKKyAgICAgICAgICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQg
KDEpOiAiICsgcmVzdWx0OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB4ID0gNDM7Cisg
ICAgICAgIAorICAgICAgICB2YXIgcmVzdWx0ID0gZigpOworICAgICAgICBpZiAocmVzdWx0ICE9
IDQzKQorICAgICAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0ICgyKTogIiArIHJlc3Vs
dDsKKyAgICB9IGVsc2UKKyAgICAgICAgeCA9IDQyOworfQorCitmb28odHJ1ZSk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3NpbmdsZXRvbi1zY29wZS10aGVuLW92
ZXJ3cml0ZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3Ry
ZXNzL3NpbmdsZXRvbi1zY29wZS10aGVuLW92ZXJ3cml0ZS5qcwkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3Mvc2luZ2xldG9uLXNjb3BlLXRoZW4tb3Zl
cndyaXRlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjAgQEAKK2Z1bmN0aW9uIGZvbyhh
KSB7CisgICAgdmFyIHggPSBhICsgMTsKKyAgICB2YXIgZiA9IGZ1bmN0aW9uKGEpIHsKKyAgICAg
ICAgcmV0dXJuIHggKyBhOworICAgIH07CisgICAgbm9JbmxpbmUoZik7CisgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCAxMDAwMDsgKytpKSB7CisgICAgICAgIHZhciByZXN1bHQgPSBmKGkpOworICAg
ICAgICBpZiAocmVzdWx0ICE9IGEgKyAxICsgaSkKKyAgICAgICAgICAgIHRocm93ICJFcnJvcjog
YmFkIHJlc3VsdDogIiArIHJlc3VsdDsKKyAgICB9CisgICAgeCA9IDk5OTsKKyAgICB2YXIgcmVz
dWx0ID0gZigxKTsKKyAgICBpZiAocmVzdWx0ICE9IDk5OSArIDEpCisgICAgICAgIHRocm93ICJF
cnJvcjogYmFkIHJlc3VsdDogIiArIHJlc3VsdDsKK30KKworbm9JbmxpbmUoZm9vKTsKK2ZvciAo
dmFyIGkgPSAwOyBpIDwgMzsgKytpKQorICAgIGZvbyg0MiArIGkpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9zaW5nbGV0b24tc2NvcGUtdGhlbi1yZWFsbG9jLWFu
ZC1vdmVyd3JpdGUuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3Rz
L3N0cmVzcy9zaW5nbGV0b24tc2NvcGUtdGhlbi1yZWFsbG9jLWFuZC1vdmVyd3JpdGUuanMJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3NpbmdsZXRv
bi1zY29wZS10aGVuLXJlYWxsb2MtYW5kLW92ZXJ3cml0ZS5qcwkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDIwIEBACitmdW5jdGlvbiBmb28oYSkgeworICAgIHZhciB4ID0gYSArIDE7CisgICAg
cmV0dXJuIGZ1bmN0aW9uKGEpIHsKKyAgICAgICAgcmV0dXJuIHggKyBhOworICAgIH07Cit9CisK
K3ZhciBmID0gZm9vKDQyKTsKK25vSW5saW5lKGYpOworCitmb3IgKHZhciBpID0gMDsgaSA8IDEw
MDAwOyArK2kpIHsKKyAgICB2YXIgcmVzdWx0ID0gZihpKTsKKyAgICBpZiAocmVzdWx0ICE9IDQy
ICsgMSArIGkpCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdDogIiArIHJlc3VsdDsK
K30KKwordmFyIGYgPSBmb28oNDMpOwordmFyIHJlc3VsdCA9IGYoMSk7CitpZiAocmVzdWx0ICE9
IDQzICsgMSArIDEpCisgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0OiAiICsgcmVzdWx0OwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9zaW5nbGV0b24tc2NvcGUt
dGhlbi1yZWFsbG9jLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0
cy9zdHJlc3Mvc2luZ2xldG9uLXNjb3BlLXRoZW4tcmVhbGxvYy5qcwkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3Mvc2luZ2xldG9uLXNjb3BlLXRoZW4t
cmVhbGxvYy5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIwIEBACitmdW5jdGlvbiBmb28o
YSkgeworICAgIHZhciB4ID0gYSArIDE7CisgICAgcmV0dXJuIGZ1bmN0aW9uKGEpIHsKKyAgICAg
ICAgcmV0dXJuIHggKz0gYTsKKyAgICB9OworfQorCit2YXIgZiA9IGZvbyg0Mik7Citub0lubGlu
ZShmKTsKKworZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsgKytpKSB7CisgICAgdmFyIHJlc3Vs
dCA9IGYoMSk7CisgICAgaWYgKHJlc3VsdCAhPSA0MiArIDEgKyBpICsgMSkKKyAgICAgICAgdGhy
b3cgIkVycm9yOiBiYWQgcmVzdWx0OiAiICsgcmVzdWx0OworfQorCit2YXIgZiA9IGZvbyg0Myk7
Cit2YXIgcmVzdWx0ID0gZigxKTsKK2lmIChyZXN1bHQgIT0gNDMgKyAxICsgMSkKKyAgICB0aHJv
dyAiRXJyb3I6IGJhZCByZXN1bHQ6ICIgKyByZXN1bHQ7CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFu
Z2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxODI0
OTgpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwy
MCBAQAorMjAxNS0wNC0wNyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAg
ICAgIEpTQyBzaG91bGQgZGV0ZWN0IHNpbmdsZXRvbiBmdW5jdGlvbnMKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MzIzMgorCisgICAgICAgIFJldmll
d2VkIGJ5IE1pY2hhZWwgU2Fib2ZmLgorCisgICAgICAgICoganMvcmVncmVzcy9jcmVhdGUtbG90
cy1vZi1mdW5jdGlvbnMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNz
L2NyZWF0ZS1sb3RzLW9mLWZ1bmN0aW9ucy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdy
ZXNzL25vLWlubGluZS1jb25zdHJ1Y3Rvci1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAq
IGpzL3JlZ3Jlc3Mvbm8taW5saW5lLWNvbnN0cnVjdG9yLmh0bWw6IEFkZGVkLgorICAgICAgICAq
IGpzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2NyZWF0ZS1sb3RzLW9mLWZ1bmN0aW9ucy5qczogQWRk
ZWQuCisgICAgICAgICoganMvcmVncmVzcy9zY3JpcHQtdGVzdHMvbm8taW5saW5lLWNvbnN0cnVj
dG9yLmpzOiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9zaW5nbGV0
b24tc2NvcGUuanM6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3Mvc2luZ2xldG9uLXNjb3Bl
LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICoganMvcmVncmVzcy9zaW5nbGV0b24tc2Nv
cGUuaHRtbDogQWRkZWQuCisKIDIwMTUtMDQtMDcgIE1hdHRoZXcgTWlybWFuICA8bW1pcm1hbkBh
cHBsZS5jb20+CiAKICAgICAgICAgU291cmNlIGFuZCBzdGFjayBpbmZvcm1hdGlvbiBzaG91bGQg
Z2V0IGFwcGVuZGVkIG9ubHkgdG8gbmF0aXZlIGVycm9ycwpJbmRleDogTGF5b3V0VGVzdHMvanMv
cmVncmVzcy9jcmVhdGUtbG90cy1vZi1mdW5jdGlvbnMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvY3JlYXRlLWxvdHMtb2YtZnVuY3Rpb25zLWV4cGVj
dGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvY3JlYXRlLWxv
dHMtb2YtZnVuY3Rpb25zLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEw
IEBACitKU1JlZ3Jlc3MvY3JlYXRlLWxvdHMtb2YtZnVuY3Rpb25zCisKK09uIHN1Y2Nlc3MsIHlv
dSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNU
IENPTVBMRVRFIi4KKworCitQQVNTIG5vIGV4Y2VwdGlvbiB0aHJvd24KK1BBU1Mgc3VjY2Vzc2Z1
bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9q
cy9yZWdyZXNzL2NyZWF0ZS1sb3RzLW9mLWZ1bmN0aW9ucy5odG1sCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2pzL3JlZ3Jlc3MvY3JlYXRlLWxvdHMtb2YtZnVuY3Rpb25zLmh0bWwJKHJldmlz
aW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2NyZWF0ZS1sb3RzLW9mLWZ1bmN0aW9u
cy5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIgQEAKKzwhRE9DVFlQRSBIVE1MIFBV
QkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNy
Yz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxi
b2R5PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNzLXByZS5qcyI+PC9zY3Jp
cHQ+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL2NyZWF0ZS1sb3RzLW9mLWZ1bmN0aW9ucy5q
cyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3JlZ3Jlc3MtcG9zdC5q
cyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5q
cyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdy
ZXNzL25vLWlubGluZS1jb25zdHJ1Y3Rvci1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvanMvcmVncmVzcy9uby1pbmxpbmUtY29uc3RydWN0b3ItZXhwZWN0ZWQudHh0CShy
ZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9uby1pbmxpbmUtY29uc3RydWN0
b3ItZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAgQEAKK0pTUmVncmVz
cy9uby1pbmxpbmUtY29uc3RydWN0b3IKKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2Vy
aWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisK
K1BBU1Mgbm8gZXhjZXB0aW9uIHRocm93bgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1
ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvbm8taW5s
aW5lLWNvbnN0cnVjdG9yLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVz
cy9uby1pbmxpbmUtY29uc3RydWN0b3IuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3Rz
L2pzL3JlZ3Jlc3Mvbm8taW5saW5lLWNvbnN0cnVjdG9yLmh0bWwJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwxMiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8v
RU4iPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVz
dC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0iLi4vLi4v
cmVzb3VyY2VzL3JlZ3Jlc3MtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJzY3JpcHQt
dGVzdHMvbm8taW5saW5lLWNvbnN0cnVjdG9yLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIu
Li8uLi9yZXNvdXJjZXMvcmVncmVzcy1wb3N0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIu
Li8uLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRt
bD4KSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2luZ2xldG9uLXNjb3BlLWV4cGVjdGVk
LnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NpbmdsZXRvbi1zY29w
ZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3Np
bmdsZXRvbi1zY29wZS1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMCBA
QAorSlNSZWdyZXNzL3NpbmdsZXRvbi1zY29wZQorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUg
YSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIu
CisKKworUEFTUyBubyBleGNlcHRpb24gdGhyb3duCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBp
cyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9z
aW5nbGV0b24tc2NvcGUuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNz
L3NpbmdsZXRvbi1zY29wZS5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVn
cmVzcy9zaW5nbGV0b24tc2NvcGUuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyIEBA
Cis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4K
KzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9z
Y3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcmVn
cmVzcy1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy9zaW5nbGV0
b24tc2NvcGUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdy
ZXNzLXBvc3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10
ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVz
dHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvY3JlYXRlLWxvdHMtb2YtZnVuY3Rpb25zLmpzCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2NyZWF0ZS1s
b3RzLW9mLWZ1bmN0aW9ucy5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jl
c3Mvc2NyaXB0LXRlc3RzL2NyZWF0ZS1sb3RzLW9mLWZ1bmN0aW9ucy5qcwkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDEyIEBACitmdW5jdGlvbiBmb28oKSB7CisgICAgdmFyIHJlc3VsdCA9IDA7
CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDA7ICsraSkKKyAgICAgICAgcmVzdWx0ICs9IChm
dW5jdGlvbigpIHsgcmV0dXJuIGkgfSkoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitmb3Ig
KHZhciBpID0gMDsgaSA8IDEwMDAwOyArK2kpIHsKKyAgICB2YXIgcmVzdWx0ID0gZm9vKCk7Cisg
ICAgaWYgKHJlc3VsdCAhPSA0OTUwKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQ6
ICIgKyByZXN1bHQ7Cit9CkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0
cy9uby1pbmxpbmUtY29uc3RydWN0b3IuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMv
cmVncmVzcy9zY3JpcHQtdGVzdHMvbm8taW5saW5lLWNvbnN0cnVjdG9yLmpzCShyZXZpc2lvbiAw
KQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvbm8taW5saW5lLWNvbnN0
cnVjdG9yLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTMgQEAKK2Z1bmN0aW9uIEZvbygp
IHsKKyAgICB2YXIgbyA9IHtmOntmOntmOntmOjQyfX19fTsKKyAgICB0aGlzLmYgPSA0MjsKK30K
Kworbm9JbmxpbmUoRm9vKTsKKworZm9yICh2YXIgaSA9IDA7IGkgPCAzMDAwMDAwOyArK2kpIHsK
KyAgICB2YXIgcmVzdWx0ID0gbmV3IEZvbygpOworICAgIGlmIChyZXN1bHQuZiAhPSA0MikKKyAg
ICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0OiAiICsgcmVzdWx0LmY7Cit9CisKSW5kZXg6
IExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL3NpbmdsZXRvbi1zY29wZS5qcwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9zaW5nbGV0
b24tc2NvcGUuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3Njcmlw
dC10ZXN0cy9zaW5nbGV0b24tc2NvcGUuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNiBA
QAorZnVuY3Rpb24gZm9vKCkgeworICAgIHZhciB4ID0gNDI7CisgICAgdmFyIHkgPSA0MzsKKyAg
ICByZXR1cm4gZnVuY3Rpb24oeikgeworICAgICAgICB2YXIgcmVzdWx0ID0geCArIHk7CisgICAg
ICAgIHggKz0gejsKKyAgICAgICAgeSArPSB6OworICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
IH0KK30KKwordmFyIGYgPSBmb28oKTsKK25vSW5saW5lKGYpOworCitmb3IgKHZhciBpID0gMDsg
aSA8IDEwMDAwMDAwOyArK2kpCisgICAgZigxKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>250327</attachid>
            <date>2015-04-07 20:16:22 -0700</date>
            <delta_ts>2015-04-07 21:34:28 -0700</delta_ts>
            <desc>even more</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>155070</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTgyNDk4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5NyBA
QAorMjAxNS0wNC0wNyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEpTQyBzaG91bGQgZGV0ZWN0IHNpbmdsZXRvbiBmdW5jdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MzIzMgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEhKS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgc3RhcnRlZCBvdXQg
YXMgYW4gYXR0ZW1wdCB0byBtYWtlIGNvbnN0cnVjdG9ycyBmYXN0ZXIgYnkgZGV0ZWN0aW5nIHdo
ZW4gYSBjb25zdHJ1Y3RvciBpcyBhCisgICAgICAgIHNpbmdsZXRvbi4gVGhlIGlkZWEgaXMgdGhh
dCBlYWNoIEZ1bmN0aW9uRXhlY3V0YWJsZSBoYXMgYSBWYXJpYWJsZVdhdGNocG9pbnRTZXQgLSBh
IHdhdGNocG9pbnQKKyAgICAgICAgYWxvbmcgd2l0aCBhbiBpbmZlcnJlZCB2YWx1ZSAtIHRoYXQg
ZGV0ZWN0cyBpZiBvbmx5IG9uZSBKU0Z1bmN0aW9uIGhhcyBiZWVuIGFsbG9jYXRlZCBmb3IgdGhh
dAorICAgICAgICBleGVjdXRhYmxlLCBhbmQgaWYgc28sIHdoYXQgdGhhdCBKU0Z1bmN0aW9uIGlz
LiBUaGVuLCBpbnNpZGUgdGhlIGNvZGUgZm9yIHRoZSBGdW5jdGlvbkV4ZWN1dGFibGUsCisgICAg
ICAgIGlmIHRoZSB3YXRjaHBvaW50IHNldCBoYXMgYW4gaW5mZXJyZWQgdmFsdWUgKGkuZS4gaXQn
cyBiZWVuIGluaXRpYWxpemVkIGFuZCBpdCBpcyBzdGlsbCB2YWxpZCksCisgICAgICAgIHdlIGNh
biBjb25zdGFudC1mb2xkIEdldENhbGxlZS4KKyAgICAgICAgCisgICAgICAgIFVuZm9ydHVuYXRl
bHksIGNvbnN0cnVjdG9ycyBkb24ndCB1c2UgR2V0Q2FsbGVlIGFueW1vcmUsIHNvIHRoYXQgZGlk
bid0IHBhbiBvdXQuIEJ1dCBpbiB0aGUKKyAgICAgICAgcHJvY2VzcyBJIHJlYWxpemVkIHRocmVl
IHRoaW5nczoKKyAgICAgICAgCisgICAgICAgIC0gVGhpcyBhbGxvd3MgdXMgdG8gY29tcGxldGVs
eSBlbGltaW5hdGUgdGhlIEdldENhbGxlZS9HZXRTY29wZSBzZXF1ZW5jZSB0aGF0IHdlIHN0aWxs
IHNvbWV0aW1lcworICAgICAgICAgIGhhZCBldmVuIGluIGNvZGUgd2hlcmUgb3VyIHNpbmdsZXRv
bi1jbG9zdXJlIGRldGVjdGlvbiB3b3JrZWQuIFRoYXQncyBiZWNhdXNlIHNpbmdsZXRvbi1jbG9z
dXJlCisgICAgICAgICAgaW5mZXJlbmNlIHdvcmtlZCBhdCB0aGUgb3BfcmVzb2x2ZV9zY29wZSwg
YW5kIHRoYXQgb3BfcmVzb2x2ZV9zY29wZSBzdGlsbCBuZWVkZWQgdG8ga2VlcCBhbGl2ZQorICAg
ICAgICAgIHRoZSBpbmNvbWluZyBzY29wZSBpbiBjYXNlIHdlIE9TUiBleGl0LiBCdXQgYnkgY29u
c3RhbnQtZm9sZGluZyBHZXRDYWxsZWUsIHRoYXQgc2VxdWVuY2UKKyAgICAgICAgICBkaXNhcHBl
YXJzLiBPU1IgZXhpdCBjYW4gcmVtYXRlcmlhbGl6ZSB0aGUgY2FsbGVlIG9yIHRoZSBzY29wZSBi
eSBqdXN0IGtub3dpbmcgdGhlaXIgY29uc3RhbnQKKyAgICAgICAgICB2YWx1ZXMuCisgICAgICAg
IAorICAgICAgICAtIFRoaXMgYWxsb3dzIHVzIHRvIGVsaW1pbmF0ZSB0aGUgZnVuY3Rpb24gcmVl
bnRyeSB3YXRjaHBvaW50LiBUaGF0IHdhdGNocG9pbnQgaW5mZXJyZWQgc2luZ2xldG9uCisgICAg
ICAgICAgY2xvc3VyZXMuIEJ1dCB3ZSBkb24ndCBuZWVkIHRvIGluZmVyIHNpbmdsZXRvbiBjbG9z
dXJlcywgaWYgd2UgYXJlIGluZmVycmluZyBzaW5nbGV0b24gY2FsbGVlcy4KKyAgICAgICAgICBT
bywgdGhhdCBraWxscyBhIGJ1bmNoIG9mIGNvZGUuCisgICAgICAgIAorICAgICAgICAtIFRoaXMg
YWxsb3dzIHVzIHRvIHVzZSBhIG5vcm1hbCBXYXRjaHBvaW50U2V0LCBpbnN0ZWFkIG9mIGEgVmFy
aWFibGVXYXRjaHBvaW50U2V0LCBmb3IgaW5mZXJyaW5nCisgICAgICAgICAgY29uc3RhbnQgdmFs
dWVzIGluIHNjb3Blcy4gUHJldmlvdXNseSB3aGVuIHRoZSBERkcgaW5mZXJyZWQgdGhhdCBhIGNs
b3N1cmUgdmFyaWFibGUgd2FzCisgICAgICAgICAgY29uc3RhbnQsIGl0IHdvdWxkbid0IGtub3cg
d2hpY2ggY2xvc3VyZSB0aGF0IHZhcmlhYmxlIHdhcyBpbiBhbmQgc28gaXQgY291bGRuJ3QganVz
dCBsb2FkIHRoYXQKKyAgICAgICAgICB2YWx1ZS4gQnV0IG5vdyB3ZSBhcmUgZmlyc3QgaW5mZXJy
aW5nIHRoYXQgdGhlIGZ1bmN0aW9uIGlzIGEgc2luZ2xldG9uLCB3aGljaCBtZWFucyB0aGF0IHdl
CisgICAgICAgICAga25vdyBleGFjdGx5IHdoYXQgc2NvcGUgaXQgcG9pbnRzIHRvLCBhbmQgd2Ug
Y2FuIGxvYWQgdGhlIHZhbHVlIGZyb20gdGhlIHNjb3BlLiBVc2luZyBhCisgICAgICAgICAgV2F0
Y2hwb2ludFNldCBpbnN0ZWFkIG9mIGEgVmFyaWFibGVXYXRjaHBvaW50U2V0IHNhdmVzIHNvbWUg
bWVtb3J5IGFuZCBzaW1wbGlmaWVzIGEgYnVuY2ggb2YKKyAgICAgICAgICBjb2RlLiBUaGlzIGFs
c28gbWVhbnMgdGhhdCBub3csIHRoZSBvbmx5IHVzZXIgb2YgVmFyaWFibGVXYXRjaHBvaW50U2V0
IGlzIEZ1bmN0aW9uRXhlY3V0YWJsZS4KKyAgICAgICAgICBJJ3ZlIHR3ZWFrZWQgdGhlIGNvZGUg
b2YgVmFyaWFibGVXYXRjaHBvaW50U2V0IHRvIHJlZHVjZSBpdHMgcG93ZXIgdG8ganVzdCBiZSB3
aGF0CisgICAgICAgICAgRnVuY3Rpb25FeGVjdXRhYmxlIHdhbnRzLgorICAgICAgICAKKyAgICAg
ICAgVGhpcyBhbHNvIGhhcyB0aGUgZWZmZWN0IG9mIHNpbXBsaWZ5aW5nIHRoZSBpbXBsZW1lbnRh
dGlvbiBvZiBibG9jayBzY29waW5nLiBQcmlvciB0byB0aGlzCisgICAgICAgIGNoYW5nZSwgYmxv
Y2sgc2NvcGluZyB3b3VsZCBoYWQgaGFkIHRvIGhhdmUgc29tZSBzdG9yeSBmb3IgdGhlIGZ1bmN0
aW9uIHJlZW50cnkgd2F0Y2hwb2ludCBvbiBhbnkKKyAgICAgICAgbmVzdGVkIHN5bWJvbCB0YWJs
ZS4gVGhhdCdzIHRvdGFsbHkgd2VpcmQgdG8gdGhpbmsgYWJvdXQ7IGl0J3Mgbm90IHJlYWxseSBh
IGZ1bmN0aW9uIHJlZW50cnkgYnV0CisgICAgICAgIGEgc2NvcGUgcmVlbnRyeS4gTm93IHdlIGRv
bid0IGhhdmUgdG8gdGhpbmsgYWJvdXQgdGhpcy4gQ29uc3RhbnQgaW5mZXJlbmNlIG9uIG5lc3Rl
ZCBzY29wZXMgd2lsbAorICAgICAgICAianVzdCB3b3JrIjogaWYgd2UgcHJvdmUgdGhhdCB3ZSBr
bm93IHRoZSBjb25zdGFudCB2YWx1ZSBvZiB0aGUgc2NvcGUgdGhlbiB0aGUgbWFjaGluZXJ5IGtp
Y2tzCisgICAgICAgIGluLCBvdGhlcndpc2UgaXQgZG9lc24ndC4KKworICAgICAgICAqIENNYWtl
TGlzdHMudHh0OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENv
cmUudmN4cHJvajoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qOgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlTGlzdC5qc29uOgorICAgICAgICAq
IGJ5dGVjb2RlL0J5dGVjb2RlVXNlRGVmLmg6CisgICAgICAgIChKU0M6OmNvbXB1dGVVc2VzRm9y
Qnl0ZWNvZGVPZmZzZXQpOgorICAgICAgICAoSlNDOjpjb21wdXRlRGVmc0ZvckJ5dGVjb2RlT2Zm
c2V0KToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpD
b2RlQmxvY2s6OmR1bXBCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Q29kZUJs
b2NrKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSk6
CisgICAgICAgICogYnl0ZWNvZGUvQ29kZU9yaWdpbi5jcHA6CisgICAgICAgIChKU0M6OklubGlu
ZUNhbGxGcmFtZTo6Y2FsbGVlQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpJbmxpbmVDYWxsRnJh
bWU6OnZpc2l0QWdncmVnYXRlKToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlT3JpZ2luLmg6Cisg
ICAgICAgIChKU0M6OklubGluZUNhbGxGcmFtZTo6Y2FsbGVlQ29uc3RhbnQpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpJbmxpbmVDYWxsRnJhbWU6OnZpc2l0QWdncmVnYXRlKTogRGVsZXRlZC4K
KyAgICAgICAgKiBieXRlY29kZS9JbnN0cnVjdGlvbi5oOgorICAgICAgICAqIGJ5dGVjb2RlL1Zh
cmlhYmxlV2F0Y2hwb2ludFNldC5jcHA6CisgICAgICAgIChKU0M6OlZhcmlhYmxlV2F0Y2hwb2lu
dFNldDo6bm90aWZ5V3JpdGUpOgorICAgICAgICAoSlNDOjpWYXJpYWJsZVdyaXRlRmlyZURldGFp
bDo6ZHVtcCk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUvVmFyaWFibGVXYXRjaHBvaW50
U2V0Lmg6CisgICAgICAgIChKU0M6OlZhcmlhYmxlV2F0Y2hwb2ludFNldDo6VmFyaWFibGVXYXRj
aHBvaW50U2V0KToKKyAgICAgICAgKEpTQzo6VmFyaWFibGVXYXRjaHBvaW50U2V0OjpuZWVkVG9G
aW5hbGl6ZSk6CisgICAgICAgIChKU0M6OlZhcmlhYmxlV2F0Y2hwb2ludFNldDo6ZmluYWxpemVV
bmNvbmRpdGlvbmFsbHkpOgorICAgICAgICAoSlNDOjpWYXJpYWJsZVdyaXRlRmlyZURldGFpbDo6
VmFyaWFibGVXcml0ZUZpcmVEZXRhaWwpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL1Zh
cmlhYmxlV2F0Y2hwb2ludFNldElubGluZXMuaDoKKyAgICAgICAgKEpTQzo6VmFyaWFibGVXYXRj
aHBvaW50U2V0Ojpub3RpZnlXcml0ZSk6CisgICAgICAgICogYnl0ZWNvZGUvVmFyaWFibGVXcml0
ZUZpcmVEZXRhaWwuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6VmFyaWFibGVXcml0ZUZpcmVE
ZXRhaWw6OmR1bXApOgorICAgICAgICAqIGJ5dGVjb2RlL1ZhcmlhYmxlV3JpdGVGaXJlRGV0YWls
Lmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpWYXJpYWJsZVdyaXRlRmlyZURldGFpbDo6VmFyaWFi
bGVXcml0ZUZpcmVEZXRhaWwpOgorICAgICAgICAqIGJ5dGVjb2RlL1dhdGNocG9pbnQuaDoKKyAg
ICAgICAgKEpTQzo6V2F0Y2hwb2ludFNldDo6c3RhcnRXYXRjaGluZyk6CisgICAgICAgIChKU0M6
OldhdGNocG9pbnRTZXQ6OmZpcmVBbGwpOgorICAgICAgICAoSlNDOjpXYXRjaHBvaW50U2V0Ojp0
b3VjaCk6CisgICAgICAgIChKU0M6OldhdGNocG9pbnRTZXQ6OmludmFsaWRhdGUpOgorICAgICAg
ICAoSlNDOjpJbmxpbmVXYXRjaHBvaW50U2V0Ojp0b3VjaCk6CisgICAgICAgICogYnl0ZWNvbXBp
bGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0
b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6
OmVtaXRSZXNvbHZlU2NvcGUpOgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdEludGVycHJldGVy
SW5saW5lcy5oOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJh
Y3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyk6CisgICAgICAgICogZGZnL0RGR0J5dGVDb2Rl
UGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Z2V0KToKKyAg
ICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Z2V0U2NvcGUpOgorICAgICAgICAoSlND
OjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKToKKyAgICAgICAgKiBkZmcvREZHQ2Fw
YWJpbGl0aWVzLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpjYXBhYmlsaXR5TGV2ZWwpOgorICAg
ICAgICAqIGRmZy9ERkdDbG9iYmVyaXplLmg6CisgICAgICAgIChKU0M6OkRGRzo6Y2xvYmJlcml6
ZSk6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFw
aDo6ZHVtcCk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OnRyeUdldENvbnN0YW50Q2xvc3Vy
ZVZhcik6CisgICAgICAgICogZGZnL0RGR05vZGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpOb2Rl
OjpoYXNXYXRjaHBvaW50U2V0KToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjp3YXRjaHBvaW50
U2V0KToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNWYXJpYWJsZVdhdGNocG9pbnRTZXQp
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OnZhcmlhYmxlV2F0Y2hwb2ludFNl
dCk6IERlbGV0ZWQuCisgICAgICAgICogZGZnL0RGR09wZXJhdGlvbnMuY3BwOgorICAgICAgICAq
IGRmZy9ERkdPcGVyYXRpb25zLmg6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU5ld0Z1bmN0aW9u
KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU5vdGlmeVdyaXRl
KToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuaDoKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6Y2FsbE9wZXJhdGlvbik6CisgICAgICAgICogZGZnL0RGR1NwZWN1
bGF0aXZlSklUMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpj
b21waWxlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdW
YXJhcmdzRm9yd2FyZGluZ1BoYXNlLmNwcDoKKyAgICAgICAgKiBmdGwvRlRMSW50cmluc2ljUmVw
b3NpdG9yeS5oOgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvTExWTS5jcHA6CisgICAgICAg
IChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVOb3RpZnlXcml0ZSk6CisgICAgICAg
ICogaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwOgorICAgICAgICAoSlNDOjpTdGFja0ZyYW1l
OjpmcmllbmRseVNvdXJjZVVSTCk6CisgICAgICAgIChKU0M6OlN0YWNrRnJhbWU6OmZyaWVuZGx5
RnVuY3Rpb25OYW1lKToKKyAgICAgICAgKiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5oOgorICAg
ICAgICAoSlNDOjpTdGFja0ZyYW1lOjpmcmllbmRseVNvdXJjZVVSTCk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OlN0YWNrRnJhbWU6OmZyaWVuZGx5RnVuY3Rpb25OYW1lKTogRGVsZXRlZC4KKyAg
ICAgICAgKiBqaXQvSklULmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0Tm90aWZ5V3JpdGUp
OgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MpOgorICAgICAgICAq
IGppdC9KSVQuaDoKKyAgICAgICAgKiBqaXQvSklUT3Bjb2Rlcy5jcHA6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdF9vcF90b3VjaF9lbnRyeSk6IERlbGV0ZWQuCisgICAgICAgICogaml0L0pJVE9w
ZXJhdGlvbnMuY3BwOgorICAgICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmg6CisgICAgICAgICog
aml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0UHV0R2xv
YmFsVmFyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0UHV0Q2xvc3VyZVZhcik6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdE5vdGlmeVdyaXRlKTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvSklU
UHJvcGVydHlBY2Nlc3MzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFB1dEdsb2Jh
bFZhcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFB1dENsb3N1cmVWYXIpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXROb3RpZnlXcml0ZSk6IERlbGV0ZWQuCisgICAgICAgICogbGxpbnQvTExJ
bnRTbG93UGF0aHMuY3BwOgorICAgICAgICAoSlNDOjpMTEludDo6TExJTlRfU0xPV19QQVRIX0RF
Q0wpOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtOgorICAgICAgICAq
IGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc206CisgICAgICAgICogbGxpbnQvTG93
TGV2ZWxJbnRlcnByZXRlcjY0LmFzbToKKyAgICAgICAgKiBydW50aW1lL0NvbW1vblNsb3dQYXRo
cy5jcHA6CisgICAgICAgIChKU0M6OlNMT1dfUEFUSF9ERUNMKTogRGVsZXRlZC4KKyAgICAgICAg
KiBydW50aW1lL0NvbW1vblNsb3dQYXRocy5oOgorICAgICAgICAqIHJ1bnRpbWUvRXhlY3V0YWJs
ZS5jcHA6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbik6
CisgICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6V2F0Y2hwb2ludENsZWFudXA6Oldh
dGNocG9pbnRDbGVhbnVwKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25FeGVjdXRhYmxlOjpXYXRj
aHBvaW50Q2xlYW51cDo6fldhdGNocG9pbnRDbGVhbnVwKToKKyAgICAgICAgKEpTQzo6RnVuY3Rp
b25FeGVjdXRhYmxlOjpXYXRjaHBvaW50Q2xlYW51cDo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkp
OgorICAgICAgICAqIHJ1bnRpbWUvRXhlY3V0YWJsZS5oOgorICAgICAgICAoSlNDOjpGdW5jdGlv
bkV4ZWN1dGFibGU6OmZ1bmN0aW9uUmVhbGxvY2F0aW9uV2F0Y2hwb2ludFNldCk6CisgICAgICAg
ICogcnVudGltZS9KU0NJbmxpbmVzLmg6CisgICAgICAgICogcnVudGltZS9KU0Z1bmN0aW9uLmNw
cDoKKyAgICAgICAgKEpTQzo6SlNGdW5jdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKiBydW50aW1l
L0pTRnVuY3Rpb24uaDoKKyAgICAgICAgKEpTQzo6SlNGdW5jdGlvbjo6Y3JlYXRlV2l0aEludmFs
aWRhdGVkUmVhbGxvY2F0aW9uV2F0Y2hwb2ludCk6CisgICAgICAgIChKU0M6OkpTRnVuY3Rpb246
OmNyZWF0ZUltcGwpOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpjcmVhdGUpOiBEZWxldGVk
LgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpK
U0dsb2JhbE9iamVjdDo6YWRkR2xvYmFsVmFyKToKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmpl
Y3Q6OmFkZEZ1bmN0aW9uKToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0Lmg6Cisg
ICAgICAgICogcnVudGltZS9KU0xleGljYWxFbnZpcm9ubWVudC5jcHA6CisgICAgICAgIChKU0M6
OkpTTGV4aWNhbEVudmlyb25tZW50OjpzeW1ib2xUYWJsZVB1dCk6CisgICAgICAgICogcnVudGlt
ZS9KU1Njb3BlLmg6CisgICAgICAgIChKU0M6OlJlc29sdmVPcDo6UmVzb2x2ZU9wKToKKyAgICAg
ICAgKiBydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6c3ltYm9s
VGFibGVQdXQpOgorICAgICAgICAoSlNDOjpzeW1ib2xUYWJsZVB1dFdpdGhBdHRyaWJ1dGVzKToK
KyAgICAgICAgKiBydW50aW1lL1B1dFByb3BlcnR5U2xvdC5oOgorICAgICAgICAqIHJ1bnRpbWUv
U3ltYm9sVGFibGUuY3BwOgorICAgICAgICAoSlNDOjpTeW1ib2xUYWJsZUVudHJ5OjpwcmVwYXJl
VG9XYXRjaCk6CisgICAgICAgIChKU0M6OlN5bWJvbFRhYmxlOjpTeW1ib2xUYWJsZSk6CisgICAg
ICAgIChKU0M6OlN5bWJvbFRhYmxlOjp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6U3lt
Ym9sVGFibGVFbnRyeTo6aW5mZXJyZWRWYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN5
bWJvbFRhYmxlRW50cnk6Om5vdGlmeVdyaXRlU2xvdyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OlN5bWJvbFRhYmxlOjpXYXRjaHBvaW50Q2xlYW51cDo6V2F0Y2hwb2ludENsZWFudXApOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpTeW1ib2xUYWJsZTo6V2F0Y2hwb2ludENsZWFudXA6On5XYXRj
aHBvaW50Q2xlYW51cCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN5bWJvbFRhYmxlOjpXYXRj
aHBvaW50Q2xlYW51cDo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkpOiBEZWxldGVkLgorICAgICAg
ICAqIHJ1bnRpbWUvU3ltYm9sVGFibGUuaDoKKyAgICAgICAgKEpTQzo6U3ltYm9sVGFibGVFbnRy
eTo6ZGlzYWJsZVdhdGNoaW5nKToKKyAgICAgICAgKEpTQzo6U3ltYm9sVGFibGVFbnRyeTo6d2F0
Y2hwb2ludFNldCk6CisgICAgICAgIChKU0M6OlN5bWJvbFRhYmxlRW50cnk6Om5vdGlmeVdyaXRl
KTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1lL1R5cGVQcm9maWxlci5jcHA6CisgICAgICAg
ICogdGVzdHMvc3RyZXNzL2luZmVyLXVuaW5pdGlhbGl6ZWQtY2xvc3VyZS12YXIuanM6IEFkZGVk
LgorICAgICAgICAqIHRlc3RzL3N0cmVzcy9zaW5nbGV0b24tc2NvcGUtdGhlbi1vdmVyd3JpdGUu
anM6IEFkZGVkLgorICAgICAgICAqIHRlc3RzL3N0cmVzcy9zaW5nbGV0b24tc2NvcGUtdGhlbi1y
ZWFsbG9jLWFuZC1vdmVyd3JpdGUuanM6IEFkZGVkLgorICAgICAgICAqIHRlc3RzL3N0cmVzcy9z
aW5nbGV0b24tc2NvcGUtdGhlbi1yZWFsbG9jLmpzOiBBZGRlZC4KKwogMjAxNS0wNC0wNyAgRmls
aXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIENvbnN0YW50IGZvbGRpbmcg
b2YgdHlwZWQgYXJyYXkgcHJvcGVydGllcyBzaG91bGQgYmUgaGFuZGxlZCBieSBBSSByYXRoZXIg
dGhhbiBzdHJlbmd0aCByZWR1Y3Rpb24KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFr
ZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0
cy50eHQJKHJldmlzaW9uIDE4MjQ5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxp
c3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMTA2LDYgKzEwNiw3IEBAIHNldChKYXZhU2NyaXB0
Q29yZV9TT1VSQ0VTCiAgICAgYnl0ZWNvZGUvVW5saW5rZWRJbnN0cnVjdGlvblN0cmVhbS5jcHAK
ICAgICBieXRlY29kZS9WYWx1ZVJlY292ZXJ5LmNwcAogICAgIGJ5dGVjb2RlL1ZhcmlhYmxlV2F0
Y2hwb2ludFNldC5jcHAKKyAgICBieXRlY29kZS9WYXJpYWJsZVdyaXRlRmlyZURldGFpbC5jcHAK
ICAgICBieXRlY29kZS9WaXJ0dWFsUmVnaXN0ZXIuY3BwCiAgICAgYnl0ZWNvZGUvV2F0Y2hwb2lu
dC5jcHAKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHBy
b2ovSmF2YVNjcmlwdENvcmUudmN4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCShyZXZp
c2lvbiAxODI0OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4
cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0zNTMsNiArMzUz
LDcgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFVubGlua2VkSW5zdHJ1
Y3Rpb25TdHJlYW0uY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVc
VmFsdWVSZWNvdmVyeS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRlY29k
ZVxWYXJpYWJsZVdhdGNocG9pbnRTZXQuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5cYnl0ZWNvZGVcVmFyaWFibGVXcml0ZUZpcmVEZXRhaWwuY3BwIiAvPgogICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcVmlydHVhbFJlZ2lzdGVyLmNwcCIgLz4KICAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFdhdGNocG9pbnQuY3BwIiAvPgogICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5cYnl0ZWNvbXBpbGVyXEJ5dGVjb2RlR2VuZXJhdG9yLmNwcCIgLz4K
QEAgLTEwMDUsNiArMTAwNiw3IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29k
ZVxWYWx1ZVByb2ZpbGUuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2Rl
XFZhbHVlUmVjb3ZlcnkuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2Rl
XFZhcmlhYmxlV2F0Y2hwb2ludFNldC5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
Ynl0ZWNvZGVcVmFyaWFibGVXcml0ZUZpcmVEZXRhaWwuaCIgLz4KICAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXGJ5dGVjb2RlXFZpcnR1YWxSZWdpc3Rlci5oIiAvPgogICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5cYnl0ZWNvZGVcV2F0Y2hwb2ludC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5cYnl0ZWNvbXBpbGVyXEJ5dGVjb2RlR2VuZXJhdG9yLmgiIC8+CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
ago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTgyNDk4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtp
bmcgY29weSkKQEAgLTM4Myw2ICszODMsOCBAQAogCQkwRjZCMUNDNjE4NjJDNDc4MDA4NDVEOTcg
LyogRlRMVW53aW5kSW5mby5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY2QjFDQzIxODYyQzQ3ODAwODQ1RDk3IC8qIEZUTFVud2luZEluZm8uaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjZCMUNDOTE4
NjQxREY4MDA4NDVEOTcgLyogQXJpdHlDaGVja0ZhaWxSZXR1cm5UaHVua3MuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2QjFDQzcxODY0MURGODAw
ODQ1RDk3IC8qIEFyaXR5Q2hlY2tGYWlsUmV0dXJuVGh1bmtzLmNwcCAqLzsgfTsKIAkJMEY2QjFD
Q0ExODY0MURGODAwODQ1RDk3IC8qIEFyaXR5Q2hlY2tGYWlsUmV0dXJuVGh1bmtzLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjZCMUNDODE4NjQxREY4
MDA4NDVEOTcgLyogQXJpdHlDaGVja0ZhaWxSZXR1cm5UaHVua3MuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjZDNzM1MDFBQzlGOTlGMDBCRTE2
ODIgLyogVmFyaWFibGVXcml0ZUZpcmVEZXRhaWwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2QzczNEUxQUM5Rjk5RjAwQkUxNjgyIC8qIFZhcmlh
YmxlV3JpdGVGaXJlRGV0YWlsLmNwcCAqLzsgfTsKKwkJMEY2QzczNTExQUM5Rjk5RjAwQkUxNjgy
IC8qIFZhcmlhYmxlV3JpdGVGaXJlRGV0YWlsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjZDNzM0RjFBQzlGOTlGMDBCRTE2ODIgLyogVmFyaWFibGVX
cml0ZUZpcmVEZXRhaWwuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkwRjZFODQ1QTE5MDMwQkVGMDA1NjI3NDEgLyogREZHVmFyaWFibGVBY2Nlc3NE
YXRhLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
NkU4NDU5MTkwMzBCRUYwMDU2Mjc0MSAvKiBERkdWYXJpYWJsZUFjY2Vzc0RhdGEuY3BwICovOyB9
OwogCQkwRjZGQzc1MDE5NjExMEE4MDBFMUQwMkQgLyogQ29tcGxleEdldFN0YXR1cy5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjZGQzc0RTE5NjEx
MEE4MDBFMUQwMkQgLyogQ29tcGxleEdldFN0YXR1cy5jcHAgKi87IH07CiAJCTBGNkZDNzUxMTk2
MTEwQTgwMEUxRDAyRCAvKiBDb21wbGV4R2V0U3RhdHVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjZGQzc0RjE5NjExMEE4MDBFMUQwMkQgLyogQ29t
cGxleEdldFN0YXR1cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CkBAIC00MjUsNyArNDI3LDYgQEAKIAkJMEY4Rjk0NDIxNjY3NjMzNTAwRDYxOTcxIC8q
IENvZGVUeXBlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGOEY5NDNGMTY2NzYzMkQwMEQ2MTk3MSAvKiBDb2RlVHlwZS5jcHAgKi87IH07CiAJCTBG
OEY5NDQ0MTY2NzYzNTQwMEQ2MTk3MSAvKiBKSVRDb2RlLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOEY5NDQzMTY2NzYzNTIwMEQ2MTk3MSAvKiBK
SVRDb2RlLmNwcCAqLzsgfTsKIAkJMEY4Rjk0NDYxNjY3NjRGMTAwRDYxOTcxIC8qIENvZGVPcmln
aW4uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY4
Rjk0NDUxNjY3NjRFRTAwRDYxOTcxIC8qIENvZGVPcmlnaW4uY3BwICovOyB9OwotCQkwRjkxODFD
NzE4NDE1Q0E1MDA1N0I2NjkgLyogVmFyaWFibGVXYXRjaHBvaW50U2V0LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjkxODFDNjE4NDE1Q0E1MDA1N0I2
NjkgLyogVmFyaWFibGVXYXRjaHBvaW50U2V0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY5MTlEMEMxNTdFRTA5RjAwNEE0RTdEIC8qIEpTU3lt
Ym9sVGFibGVPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY5MTlEMDkxNTdFRTA5RDAwNEE0RTdEIC8qIEpTU3ltYm9sVGFibGVPYmplY3Qu
Y3BwICovOyB9OwogCQkwRjkxOUQwRDE1N0VFMEEyMDA0QTRFN0QgLyogSlNTeW1ib2xUYWJsZU9i
amVjdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5
MTlEMEExNTdFRTA5RDAwNEE0RTdEIC8qIEpTU3ltYm9sVGFibGVPYmplY3QuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjkxOUQxMDE1N0YzMzI5
MDA0QTRFN0QgLyogSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjkxOUQwRTE1N0YzMzI3MDA0QTRFN0Qg
LyogSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5jcHAgKi87IH07CkBAIC01NTAsNyArNTUxLDYg
QEAKIAkJMEZDOTdGNDAxODIwMjExOTAwMkM5QjI2IC8qIERGR0p1bXBSZXBsYWNlbWVudC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDOTdGM0ExODIw
MjExOTAwMkM5QjI2IC8qIERGR0p1bXBSZXBsYWNlbWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGQzk3RjQxMTgyMDIxMTkwMDJDOUIyNiAv
KiBERkdXYXRjaHBvaW50Q29sbGVjdGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQzk3RjNCMTgyMDIxMTkwMDJDOUIyNiAvKiBERkdX
YXRjaHBvaW50Q29sbGVjdGlvblBoYXNlLmNwcCAqLzsgfTsKIAkJMEZDOTdGNDIxODIwMjExOTAw
MkM5QjI2IC8qIERGR1dhdGNocG9pbnRDb2xsZWN0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQzk3RjNDMTgyMDIxMTkwMDJDOUIyNiAv
KiBERkdXYXRjaHBvaW50Q29sbGVjdGlvblBoYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMEZDQTkxMTMxOTVFNjZBMDAwNDI2NDM4IC8qIFZh
cmlhYmxlV2F0Y2hwb2ludFNldC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkNBOTExMjE5NUU2NkEwMDA0MjY0MzggLyogVmFyaWFibGVXYXRjaHBv
aW50U2V0LmNwcCAqLzsgfTsKIAkJMEZDQ0FFNDUxNkQwQ0Y3NDAwRDBDNjVCIC8qIFBhcnNlckVy
cm9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkND
QUU0MzE2RDBDRjZFMDBEMEM2NUIgLyogUGFyc2VyRXJyb3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkNFRkFBQjE4MDRDMTNFMDA0NzJDRTQg
LyogRlRMU2F2ZVJlc3RvcmUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZDRUZBQTkxODA0QzEzRTAwNDcyQ0U0IC8qIEZUTFNhdmVSZXN0b3JlLmNw
cCAqLzsgfTsKIAkJMEZDRUZBQUMxODA0QzEzRTAwNDcyQ0U0IC8qIEZUTFNhdmVSZXN0b3JlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkNFRkFBQTE4
MDRDMTNFMDA0NzJDRTQgLyogRlRMU2F2ZVJlc3RvcmUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNzE5LDYgKzcxOSw4IEBACiAJCTBGRjcyOUJF
MTY2QUQzNjAwMDBGNUJBMyAvKiBQcm9maWxlckV4ZWN1dGlvbkNvdW50ZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRjcyOTlFMTY2QUQzNDcwMDBG
NUJBMyAvKiBQcm9maWxlckV4ZWN1dGlvbkNvdW50ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkY3MjlCRjE2NkFEMzYwMDAwRjVCQTMgLyog
UHJvZmlsZXJPcmlnaW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGRjcyOUEwMTY2QUQzNDcwMDBGNUJBMyAvKiBQcm9maWxlck9yaWdpbi5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRjcyOUMwMTY2
QUQzNjAwMDBGNUJBMyAvKiBQcm9maWxlck9yaWdpblN0YWNrLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkY3MjlBMjE2NkFEMzQ3MDAwRjVCQTMgLyog
UHJvZmlsZXJPcmlnaW5TdGFjay5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CisJCTBGRjhCREVBMUFENENGNzEwMERGRTg4NCAvKiBJbmZlcnJlZFZhbHVl
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRjhC
REU4MUFENENGNzEwMERGRTg4NCAvKiBJbmZlcnJlZFZhbHVlLmNwcCAqLzsgfTsKKwkJMEZGOEJE
RUIxQUQ0Q0Y3MTAwREZFODg0IC8qIEluZmVycmVkVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRjhCREU5MUFENENGNzEwMERGRTg4NCAvKiBJ
bmZlcnJlZFZhbHVlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMEZGOTIyRDQxNEY0NkI0MTAwNDFBMjRFIC8qIExMSW50T2Zmc2V0c0V4dHJhY3Rv
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQ2
ODBBMTE0QkE3RjgyMDBCRkUyNzIgLyogTExJbnRPZmZzZXRzRXh0cmFjdG9yLmNwcCAqLzsgfTsK
IAkJMEZGQTU0OTcxNkI4ODM1MDAwQjNBOTgyIC8qIEE2NERPcGNvZGUuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjUyQTNBMjIxNjUxQzY5NzAwQTgw
QUZFIC8qIEE2NERPcGNvZGUuY3BwICovOyB9OwogCQkwRkZBNTQ5ODE2Qjg4MzUzMDBCM0E5ODIg
LyogQTY0RE9wY29kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNjUyQTNBMjMxNjUxQzY5NzAwQTgwQUZFIC8qIEE2NERPcGNvZGUuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTY0NCw3ICsxNjQ2LDYg
QEAKIAkJRkUyMENFOUUxNUYwNEE5NTAwREYzNDMwIC8qIExMSW50Q0xvb3AuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFMjBDRTlDMTVGMDRBOTUwMERG
MzQzMCAvKiBMTEludENMb29wLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJRkU0QTMzMUYxNUJEMkUwNzAwNkY1NEYzIC8qIFZNSW5zcGVjdG9yLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFNEEzMzFE
MTVCRDJFMDcwMDZGNTRGMyAvKiBWTUluc3BlY3Rvci5jcHAgKi87IH07CiAJCUZFNEEzMzIwMTVC
RDJFMDcwMDZGNTRGMyAvKiBWTUluc3BlY3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRkU0QTMzMUUxNUJEMkUwNzAwNkY1NEYzIC8qIFZNSW5zcGVj
dG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJ
RkU1MjQ4RjkxOTE0NDJEOTAwQjdGREU0IC8qIFZhcmlhYmxlV2F0Y2hwb2ludFNldElubGluZXMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFNTI0OEY4
MTkxNDQyRDkwMEI3RkRFNCAvKiBWYXJpYWJsZVdhdGNocG9pbnRTZXRJbmxpbmVzLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRkU1OTMyQTcxODND
NUEyNjAwQTFFQ0NDIC8qIFZNRW50cnlTY29wZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTU5MzJBNTE4M0M1QTI2MDBBMUVDQ0MgLyogVk1FbnRy
eVNjb3BlLmNwcCAqLzsgfTsKIAkJRkU1OTMyQTgxODNDNUEyNjAwQTFFQ0NDIC8qIFZNRW50cnlT
Y29wZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU1
OTMyQTYxODNDNUEyNjAwQTFFQ0NDIC8qIFZNRW50cnlTY29wZS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZFN0JBNjBGMUExQTdDRUMwMEYxRjdC
NCAvKiBIZWFwVmVyaWZpZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRkU3QkE2MEQxQTFBN0NFQzAwRjFGN0I0IC8qIEhlYXBWZXJpZmllci5jcHAg
Ki87IH07CkBAIC0yMTAwLDYgKzIxMDEsOCBAQAogCQkwRjZCMUNDMjE4NjJDNDc4MDA4NDVEOTcg
LyogRlRMVW53aW5kSW5mby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExV
bndpbmRJbmZvLmg7IHBhdGggPSBmdGwvRlRMVW53aW5kSW5mby5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjZCMUNDNzE4NjQxREY4MDA4NDVEOTcgLyogQXJpdHlDaGVja0ZhaWxS
ZXR1cm5UaHVua3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQXJp
dHlDaGVja0ZhaWxSZXR1cm5UaHVua3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjZCMUNDODE4NjQxREY4MDA4NDVEOTcgLyogQXJpdHlDaGVja0ZhaWxSZXR1cm5UaHVua3Mu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXJpdHlDaGVja0ZhaWxSZXR1cm5U
aHVua3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2QzczNEUxQUM5Rjk5RjAw
QkUxNjgyIC8qIFZhcmlhYmxlV3JpdGVGaXJlRGV0YWlsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFZhcmlhYmxlV3JpdGVGaXJlRGV0YWlsLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2QzczNEYxQUM5Rjk5RjAwQkUxNjgyIC8qIFZhcmlhYmxl
V3JpdGVGaXJlRGV0YWlsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZhcmlh
YmxlV3JpdGVGaXJlRGV0YWlsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNkU4
NDU5MTkwMzBCRUYwMDU2Mjc0MSAvKiBERkdWYXJpYWJsZUFjY2Vzc0RhdGEuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHVmFyaWFibGVBY2Nlc3NEYXRhLmNwcDsg
cGF0aCA9IGRmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjZGQzc0RTE5NjExMEE4MDBFMUQwMkQgLyogQ29tcGxleEdldFN0YXR1cy5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb21wbGV4R2V0U3RhdHVz
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2RkM3NEYxOTYxMTBBODAwRTFE
MDJEIC8qIENvbXBsZXhHZXRTdGF0dXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gQ29tcGxleEdldFN0YXR1cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjE0
MCw3ICsyMTQzLDYgQEAKIAkJMEY4Rjk0M0YxNjY3NjMyRDAwRDYxOTcxIC8qIENvZGVUeXBlLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvZGVUeXBlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY4Rjk0NDMxNjY3NjM1MjAwRDYxOTcxIC8qIEpJ
VENvZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSklUQ29kZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOEY5NDQ1MTY2NzY0RUUwMEQ2MTk3
MSAvKiBDb2RlT3JpZ2luLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IENvZGVPcmlnaW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjkxODFDNjE4
NDE1Q0E1MDA1N0I2NjkgLyogVmFyaWFibGVXYXRjaHBvaW50U2V0LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFZhcmlhYmxlV2F0Y2hwb2ludFNldC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjkxOUQwOTE1N0VFMDlEMDA0QTRFN0QgLyogSlNTeW1ib2xUYWJs
ZU9iamVjdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1N5bWJv
bFRhYmxlT2JqZWN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5MTlEMEEx
NTdFRTA5RDAwNEE0RTdEIC8qIEpTU3ltYm9sVGFibGVPYmplY3QuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSlNTeW1ib2xUYWJsZU9iamVjdC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjkxOUQwRTE1N0YzMzI3MDA0QTRFN0QgLyogSlNTZWdtZW50ZWRWYXJp
YWJsZU9iamVjdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1Nl
Z21lbnRlZFZhcmlhYmxlT2JqZWN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTIyNzYsNyArMjI3OCw2IEBACiAJCTBGQzk3RjNBMTgyMDIxMTkwMDJDOUIyNiAvKiBERkdKdW1w
UmVwbGFjZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHSnVtcFJl
cGxhY2VtZW50Lmg7IHBhdGggPSBkZmcvREZHSnVtcFJlcGxhY2VtZW50Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGQzk3RjNCMTgyMDIxMTkwMDJDOUIyNiAvKiBERkdXYXRjaHBv
aW50Q29sbGVjdGlvblBoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IERGR1dhdGNocG9pbnRDb2xsZWN0aW9uUGhhc2UuY3BwOyBwYXRoID0gZGZnL0RGR1dhdGNo
cG9pbnRDb2xsZWN0aW9uUGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RkM5N0YzQzE4MjAyMTE5MDAyQzlCMjYgLyogREZHV2F0Y2hwb2ludENvbGxlY3Rpb25QaGFzZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdXYXRjaHBvaW50Q29sbGVjdGlv
blBoYXNlLmg7IHBhdGggPSBkZmcvREZHV2F0Y2hwb2ludENvbGxlY3Rpb25QaGFzZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRkNBOTExMjE5NUU2NkEwMDA0MjY0MzggLyogVmFy
aWFibGVXYXRjaHBvaW50U2V0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFZhcmlhYmxlV2F0Y2hwb2ludFNldC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGQ0I0MDg1MTVDMEEzQzMwMDQ4OTMyQiAvKiBTbG90VmlzaXRvcklubGluZXMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2xvdFZpc2l0b3JJbmxpbmVzLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQ0NBRTQzMTZEMENGNkUwMEQwQzY1QiAvKiBQYXJz
ZXJFcnJvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQYXJzZXJFcnJvci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkNFRkFBOTE4MDRDMTNFMDA0NzJDRTQg
LyogRlRMU2F2ZVJlc3RvcmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gRlRMU2F2ZVJlc3RvcmUuY3BwOyBwYXRoID0gZnRsL0ZUTFNhdmVSZXN0b3JlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI0NDEsNiArMjQ0Miw4IEBACiAJCTBGRjcyOUEw
MTY2QUQzNDcwMDBGNUJBMyAvKiBQcm9maWxlck9yaWdpbi5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBQcm9maWxlck9yaWdpbi5oOyBwYXRoID0gcHJvZmlsZXIvUHJvZmlsZXJP
cmlnaW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZGNzI5QTExNjZBRDM0NzAw
MEY1QkEzIC8qIFByb2ZpbGVyT3JpZ2luU3RhY2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gUHJvZmlsZXJPcmlnaW5TdGFjay5jcHA7IHBhdGggPSBwcm9maWxlci9Q
cm9maWxlck9yaWdpblN0YWNrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZG
NzI5QTIxNjZBRDM0NzAwMEY1QkEzIC8qIFByb2ZpbGVyT3JpZ2luU3RhY2suaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gUHJvZmlsZXJPcmlnaW5TdGFjay5oOyBwYXRoID0gcHJv
ZmlsZXIvUHJvZmlsZXJPcmlnaW5TdGFjay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRkY4QkRFODFBRDRDRjcxMDBERkU4ODQgLyogSW5mZXJyZWRWYWx1ZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbmZlcnJlZFZhbHVlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZGOEJERTkxQUQ0Q0Y3MTAwREZFODg0IC8qIEluZmVycmVk
VmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5mZXJyZWRWYWx1ZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkY5MjJDRjE0RjQ2QjEzMDA0MUEyNEUg
LyogSlNDTExJbnRPZmZzZXRzRXh0cmFjdG9yICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGV4cGxpY2l0RmlsZVR5cGUgPSAiY29tcGlsZWQubWFjaC1vLmV4ZWN1dGFibGUiOyBpbmNsdWRl
SW5JbmRleCA9IDA7IHBhdGggPSBKU0NMTEludE9mZnNldHNFeHRyYWN0b3I7IHNvdXJjZVRyZWUg
PSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CiAJCTBGRkM5OUQwMTg0RUM4QUQwMDlDMTBBQiAvKiBD
b25zdGFudE1vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29uc3RhbnRN
b2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRkM5OUQyMTg0RUUzMTgwMDlD
MTBBQiAvKiBBcnJheUJ1ZmZlck5ldXRlcmluZ1dhdGNocG9pbnQuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQXJyYXlCdWZmZXJOZXV0ZXJpbmdXYXRjaHBvaW50LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTM0MjEsNyArMzQyNCw2IEBACiAJCUZF
MjBDRTlDMTVGMDRBOTUwMERGMzQzMCAvKiBMTEludENMb29wLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IExMSW50Q0xvb3AuaDsgcGF0aCA9IGxsaW50L0xMSW50Q0xvb3AuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkU0QTMzMUQxNUJEMkUwNzAwNkY1NEYzIC8q
IFZNSW5zcGVjdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFZN
SW5zcGVjdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkU0QTMzMUUxNUJE
MkUwNzAwNkY1NEYzIC8qIFZNSW5zcGVjdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFZNSW5zcGVjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZFNTI0
OEY4MTkxNDQyRDkwMEI3RkRFNCAvKiBWYXJpYWJsZVdhdGNocG9pbnRTZXRJbmxpbmVzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZhcmlhYmxlV2F0Y2hwb2ludFNldElubGlu
ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkU1OTMyQTUxODNDNUEyNjAwQTFF
Q0NDIC8qIFZNRW50cnlTY29wZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBWTUVudHJ5U2NvcGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTU5
MzJBNjE4M0M1QTI2MDBBMUVDQ0MgLyogVk1FbnRyeVNjb3BlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFZNRW50cnlTY29wZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlGRTdCQTYwRDFBMUE3Q0VDMDBGMUY3QjQgLyogSGVhcFZlcmlmaWVyLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEhlYXBWZXJpZmllci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00NDA5LDYgKzQ0MTEsOCBAQAogCQkJCTBGQjdGMzhFMTVF
RDhFMzgwMEYxNjdCMiAvKiBJbmRleGluZ0hlYWRlcklubGluZXMuaCAqLywKIAkJCQkwRjEzRTA0
QzE2MTY0QTFCMDBEQzhERTcgLyogSW5kZXhpbmdUeXBlLmNwcCAqLywKIAkJCQkwRkI3RjM4RjE1
RUQ4RTM4MDBGMTY3QjIgLyogSW5kZXhpbmdUeXBlLmggKi8sCisJCQkJMEZGOEJERTgxQUQ0Q0Y3
MTAwREZFODg0IC8qIEluZmVycmVkVmFsdWUuY3BwICovLAorCQkJCTBGRjhCREU5MUFENENGNzEw
MERGRTg4NCAvKiBJbmZlcnJlZFZhbHVlLmggKi8sCiAJCQkJRTE3ODYzNkMwRDlCRUVDMzAwRDc0
RTc1IC8qIEluaXRpYWxpemVUaHJlYWRpbmcuY3BwICovLAogCQkJCUUxNzg2MzNGMEQ5QkVDMDAw
MEQ3NEU3NSAvKiBJbml0aWFsaXplVGhyZWFkaW5nLmggKi8sCiAJCQkJQTdBOEFGMkIxN0FEQjVG
MzAwNUFCMTc0IC8qIEludDhBcnJheS5oICovLApAQCAtNTI3Nyw5ICs1MjgxLDggQEAKIAkJCQkw
Rjk2M0IzNjEzRkM2RkRFMDAwMkQ5QjIgLyogVmFsdWVQcm9maWxlLmggKi8sCiAJCQkJMEYyNEU1
NTcxN0Y3NEVEQjAwQUJCMjE3IC8qIFZhbHVlUmVjb3ZlcnkuY3BwICovLAogCQkJCTBGNDI2QTQ1
MTQ2MENCQUIwMDEzMUY4RiAvKiBWYWx1ZVJlY292ZXJ5LmggKi8sCi0JCQkJMEZDQTkxMTIxOTVF
NjZBMDAwNDI2NDM4IC8qIFZhcmlhYmxlV2F0Y2hwb2ludFNldC5jcHAgKi8sCi0JCQkJMEY5MTgx
QzYxODQxNUNBNTAwNTdCNjY5IC8qIFZhcmlhYmxlV2F0Y2hwb2ludFNldC5oICovLAotCQkJCUZF
NTI0OEY4MTkxNDQyRDkwMEI3RkRFNCAvKiBWYXJpYWJsZVdhdGNocG9pbnRTZXRJbmxpbmVzLmgg
Ki8sCisJCQkJMEY2QzczNEUxQUM5Rjk5RjAwQkUxNjgyIC8qIFZhcmlhYmxlV3JpdGVGaXJlRGV0
YWlsLmNwcCAqLywKKwkJCQkwRjZDNzM0RjFBQzlGOTlGMDBCRTE2ODIgLyogVmFyaWFibGVXcml0
ZUZpcmVEZXRhaWwuaCAqLywKIAkJCQkwRjIwQzI1ODFBODAxM0FCMDBEQTMyMjkgLyogVmlydHVh
bFJlZ2lzdGVyLmNwcCAqLywKIAkJCQkwRjQyNkE0NjE0NjBDQkFCMDAxMzFGOEYgLyogVmlydHVh
bFJlZ2lzdGVyLmggKi8sCiAJCQkJMEY5MTlEMjIxNTg1M0NERTAwNEE0RTdEIC8qIFdhdGNocG9p
bnQuY3BwICovLApAQCAtNTU2NSw3ICs1NTY4LDYgQEAKIAkJCQlDNEY0QjZGNTFBMDVDOTg0MDA1
Q0FCNzYgLyogZ2VuZXJhdGVfb2JqY19wcm90b2NvbF90eXBlc19pbXBsZW1lbnRhdGlvbi5weSBp
biBIZWFkZXJzICovLAogCQkJCUE1ODQwMzIwMThCRkZCRTEwMDVBMDgxMSAvKiBJbnNwZWN0b3JB
Z2VudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkFBQkNERTcxOEVGMjk0MjAwMDAyMDk2IC8qIEdD
TG9nZ2luZy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJRkU1MjQ4RjkxOTE0NDJEOTAwQjdGREU0IC8q
IFZhcmlhYmxlV2F0Y2hwb2ludFNldElubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFN0JB
NjEwMUExQTdDRUMwMEYxRjdCNCAvKiBIZWFwVmVyaWZpZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE1RUY5QjE0MUExRDQzRjYwMDcwMkU5MCAvKiBnZW5lcmF0ZV9jcHBfYmFja2VuZF9kaXNwYXRj
aGVyX2hlYWRlci5weSBpbiBIZWFkZXJzICovLAogCQkJCUMyREE3NzgzMThFMjU5OTkwMDY2RkNC
NiAvKiBIZWFwSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCkBAIC02MzQ3LDYgKzYzNDksNyBAQAog
CQkJCUE3OTBERDZFMTgyRjQ5OTcwMDU4ODgwNyAvKiBTZXRJdGVyYXRvclByb3RvdHlwZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQTcyOTlEQTIxN0QxMjg0ODAwNUY1RkY5IC8qIFNldFByb3RvdHlw
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZBRTY0QUExMzVFNUUxQzAwOTYzMDEyIC8qIFNINEFz
c2VtYmxlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZGOEJERUIxQUQ0Q0Y3MTAwREZFODg0IC8q
IEluZmVycmVkVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2NzA1MTdCNkI1QUIwMEE3
QUUzRiAvKiBTaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MTRCQTc4RjExM0FBQjg4RjAwNUI3QzJDIC8qIFNsb3RWaXNpdG9yLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRkIxNzY2MTE5NkI4RjlFMDA5MTA1MkEgLyogREZHSGVhcExvY2F0aW9uLmggaW4gSGVh
ZGVycyAqLywKQEAgLTYzNTQsNiArNjM1Nyw3IEBACiAJCQkJQTcwOUYyRjAxN0EwQUMwNDAwNTEy
RTk4IC8qIFNsb3dQYXRoQ2FsbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTMzMDQwMDQwRTZBNzQ5
NDAwNzg2RTZBIC8qIFNtYWxsU3RyaW5ncy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NjQw
RTE2RjVDRDAwQjM0NDYwIC8qIFNvdXJjZUNvZGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGNkM3
MzUxMUFDOUY5OUYwMEJFMTY4MiAvKiBWYXJpYWJsZVdyaXRlRmlyZURldGFpbC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQkMxOEM0NjMwRTE2RjVDRDAwQjM0NDYwIC8qIFNvdXJjZVByb3ZpZGVyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk3MEVDMEVDMzFBQTBEN0RBMDBCNkFBRkEgLyogSlNTdHJpbmdJ
dGVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTQ5REMxNkMxMkVGMjk0RTAwMTg0QTFGIC8q
IFNvdXJjZVByb3ZpZGVyQ2FjaGUuaCBpbiBIZWFkZXJzICovLApAQCAtNjQyMSw3ICs2NDI1LDYg
QEAKIAkJCQkwRjJFODkyQzE2RDAyOEFEMDA5RTRGRDIgLyogVW51c2VkUG9pbnRlci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEY5NjNCMzgxM0ZDNkZFOTAwMDJEOUIyIC8qIFZhbHVlUHJvZmlsZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEY0MjZBNDgxNDYwQ0JCMzAwMTMxRjhGIC8qIFZhbHVlUmVj
b3ZlcnkuaCBpbiBIZWFkZXJzICovLAotCQkJCTBGOTE4MUM3MTg0MTVDQTUwMDU3QjY2OSAvKiBW
YXJpYWJsZVdhdGNocG9pbnRTZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOUM1RTVGMThFMzVG
NUUwMEQ0MzFDMyAvKiBGVExEV0FSRlJlZ2lzdGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjQy
NkE0OTE0NjBDQkI3MDAxMzFGOEYgLyogVmlydHVhbFJlZ2lzdGVyLmggaW4gSGVhZGVycyAqLywK
IAkJCQlCQzE4QzQyMDBFMTZGNUNEMDBCMzQ0NjAgLyogVk0uaCBpbiBIZWFkZXJzICovLApAQCAt
Njk2Myw2ICs2OTY2LDcgQEAKIAkJCQlBNzdGMTgyMTE2NDA4OEIyMDA2NDBBNDcgLyogQ29kZUNh
Y2hlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGOEY5NDQ2MTY2NzY0RjEwMEQ2MTk3MSAvKiBD
b2RlT3JpZ2luLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2QjU4MjY3MTREMjc5NkMwMEE5QzMw
NiAvKiBDb2RlUHJvZmlsZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjZDNzM1MDFBQzlGOTlG
MDBCRTE2ODIgLyogVmFyaWFibGVXcml0ZUZpcmVEZXRhaWwuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJODZCNTgyNjkxNEQyNzk3MDAwQTlDMzA2IC8qIENvZGVQcm9maWxpbmcuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEY4Rjk0M0MxNjY3NjMxMzAwRDYxOTcxIC8qIENvZGVTcGVjaWFsaXphdGlv
bktpbmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY4Rjk0NDIxNjY3NjMzNTAwRDYxOTcxIC8q
IENvZGVUeXBlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzAyNyw3ICs3MDMxLDYgQEAKIAkJCQlD
Mjk4MUZEODE3QkFFRTRCMDBBM0JDOTggLyogREZHRGVzaXJlZFdlYWtSZWZlcmVuY2VzLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUMyOTgxRkRDMTdCQUZGNDQwMEEzQkM5OCAvKiBERkdEZXNpcmVk
V3JpdGVCYXJyaWVycy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkY0Mjc2NDE1OTFBMUNDMDA0
Q0I5RkYgLyogREZHRGlzYXNzZW1ibGVyLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTBGQ0E5MTEz
MTk1RTY2QTAwMDQyNjQzOCAvKiBWYXJpYWJsZVdhdGNocG9pbnRTZXQuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMEZEODFBRDIxNTRGQjRFRTAwOTgzRTcyIC8qIERGR0RvbWluYXRvcnMuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEZEM0M4MjYxNDExNUQ0MDAwRkQ4MUNCIC8qIERGR0RyaXZlci5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjJCOUNFMjE5RDBCQTdEMDBCMUQxQjUgLyogREZHQXZh
aWxhYmlsaXR5TWFwLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzMzMSw2ICs3MzM0LDcgQEAKIAkJ
CQkwRjJCNjZGRTE3QjZCNUFCMDBBN0FFM0YgLyogSlNUeXBlZEFycmF5cy5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRkYwNTRGOTFBQzM1QjQ0MDBFNUJFNTcgLyogRXhlY3V0YWJsZUFsbG9jYXRp
b25GdXp6LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2RTNDNjFBMTY3QkFCRUUwMDZENzYwQSAv
KiBKU1ZhbHVlLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJMEZGOEJERUExQUQ0Q0Y3MTAwREZFODg0
IC8qIEluZmVycmVkVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTRCRDVBMzIwQTNFOTFG
NjAwQkFGNTlDIC8qIEpTVmFsdWVSZWYuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5RDcx
MDdFQzM3NjAwNDI3QTQ4IC8qIEpTRW52aXJvbm1lbnRSZWNvcmQuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJODZFM0M2MUMxNjdCQUJFRTAwNkQ3NjBBIC8qIEpTVmlydHVhbE1hY2hpbmUubW0gaW4g
U291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29k
ZUxpc3QuanNvbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Qnl0ZWNvZGVMaXN0Lmpzb24JKHJldmlzaW9uIDE4MjQ5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QuanNvbgkod29ya2luZyBjb3B5KQpAQCAtNiw3ICs2
LDYgQEAKICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX2VudGVyIiwgImxlbmd0aCIgOiAxIH0s
CiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9jcmVhdGVfbGV4aWNhbF9lbnZpcm9ubWVudCIs
ICJsZW5ndGgiIDogMyB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfZ2V0X3Njb3BlIiwg
Imxlbmd0aCIgOiAyIH0sCi0gICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF90b3VjaF9lbnRyeSIs
ICJsZW5ndGgiIDogMSB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfY3JlYXRlX2RpcmVj
dF9hcmd1bWVudHMiLCAibGVuZ3RoIiA6IDIgfSwKICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9w
X2NyZWF0ZV9zY29wZWRfYXJndW1lbnRzIiwgImxlbmd0aCIgOiAzIH0sCiAgICAgICAgICAgICB7
ICJuYW1lIiA6ICJvcF9jcmVhdGVfb3V0X29mX2JhbmRfYXJndW1lbnRzIiwgImxlbmd0aCIgOiAy
IH0sCkBAIC0xMDMsNyArMTAyLDcgQEAKICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX2NvbnN0
cnVjdF92YXJhcmdzIiwgImxlbmd0aCIgOiA5IH0sCiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJv
cF9zdHJjYXQiLCAibGVuZ3RoIiA6IDQgfSwKICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX3Rv
X3ByaW1pdGl2ZSIsICJsZW5ndGgiIDogMyB9LAotICAgICAgICAgICAgeyAibmFtZSIgOiAib3Bf
cmVzb2x2ZV9zY29wZSIsICJsZW5ndGgiIDogNyB9LAorICAgICAgICAgICAgeyAibmFtZSIgOiAi
b3BfcmVzb2x2ZV9zY29wZSIsICJsZW5ndGgiIDogNiB9LAogICAgICAgICAgICAgeyAibmFtZSIg
OiAib3BfZ2V0X2Zyb21fc2NvcGUiLCAibGVuZ3RoIiA6IDggfSwKICAgICAgICAgICAgIHsgIm5h
bWUiIDogIm9wX3B1dF90b19zY29wZSIsICJsZW5ndGgiIDogNyB9LAogICAgICAgICAgICAgeyAi
bmFtZSIgOiAib3BfZ2V0X2Zyb21fYXJndW1lbnRzIiwgImxlbmd0aCIgOiA1IH0sCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuaAkocmV2
aXNpb24gMTgyNDk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2Rl
VXNlRGVmLmgJKHdvcmtpbmcgY29weSkKQEAgLTUwLDcgKzUwLDYgQEAgdm9pZCBjb21wdXRlVXNl
c0ZvckJ5dGVjb2RlT2Zmc2V0KAogICAgIGNhc2Ugb3BfbmV3X29iamVjdDoKICAgICBjYXNlIG9w
X2VudGVyOgogICAgIGNhc2Ugb3BfY2F0Y2g6Ci0gICAgY2FzZSBvcF90b3VjaF9lbnRyeToKICAg
ICBjYXNlIG9wX3Byb2ZpbGVfY29udHJvbF9mbG93OgogICAgIGNhc2Ugb3BfY3JlYXRlX2RpcmVj
dF9hcmd1bWVudHM6CiAgICAgY2FzZSBvcF9jcmVhdGVfb3V0X29mX2JhbmRfYXJndW1lbnRzOgpA
QCAtMjc4LDcgKzI3Nyw2IEBAIHZvaWQgY29tcHV0ZURlZnNGb3JCeXRlY29kZU9mZnNldChDb2Rl
QmwKICAgICBjYXNlIG9wX3B1dF9ieV9pbmRleDoKICAgICBjYXNlIG9wX3Byb2ZpbGVfdHlwZToK
ICAgICBjYXNlIG9wX3Byb2ZpbGVfY29udHJvbF9mbG93OgotICAgIGNhc2Ugb3BfdG91Y2hfZW50
cnk6CiAgICAgY2FzZSBvcF9wdXRfdG9fYXJndW1lbnRzOgogI2RlZmluZSBMTElOVF9IRUxQRVJf
T1BDT0RFUyhvcGNvZGUsIGxlbmd0aCkgY2FzZSBvcGNvZGU6CiAgICAgICAgIEZPUl9FQUNIX0xM
SU5UX09QQ09ERV9FWFRFTlNJT04oTExJTlRfSEVMUEVSX09QQ09ERVMpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJldmlzaW9uIDE4MjQ5
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC03NTgsMTAgKzc1OCw2IEBAIHZvaWQgQ29kZUJsb2NrOjpkdW1wQnl0ZWNv
ZGUoCiAgICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwg
aXQsICJlbnRlciIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgY2Fz
ZSBvcF90b3VjaF9lbnRyeTogewotICAgICAgICAgICAgcHJpbnRMb2NhdGlvbkFuZE9wKG91dCwg
ZXhlYywgbG9jYXRpb24sIGl0LCAidG91Y2hfZW50cnkiKTsKLSAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICB9CiAgICAgICAgIGNhc2Ugb3BfY3JlYXRlX2xleGljYWxfZW52aXJvbm1lbnQ6IHsK
ICAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwogICAgICAgICAgICAgaW50
IHIxID0gKCsraXQpLT51Lm9wZXJhbmQ7CkBAIC0xNTA5LDcgKzE1MDUsNiBAQCB2b2lkIENvZGVC
bG9jazo6ZHVtcEJ5dGVjb2RlKAogICAgICAgICAgICAgb3V0LnByaW50ZigiJXMsICVzLCAlcywg
JXU8JXN8JXM+LCAlZCIsIHJlZ2lzdGVyTmFtZShyMCkuZGF0YSgpLCByZWdpc3Rlck5hbWUoc2Nv
cGUpLmRhdGEoKSwgaWROYW1lKGlkMCwgaWRlbnRpZmllcihpZDApKS5kYXRhKCksCiAgICAgICAg
ICAgICAgICAgbW9kZUFuZFR5cGUub3BlcmFuZCgpLCByZXNvbHZlTW9kZU5hbWUobW9kZUFuZFR5
cGUubW9kZSgpKSwgcmVzb2x2ZVR5cGVOYW1lKG1vZGVBbmRUeXBlLnR5cGUoKSksCiAgICAgICAg
ICAgICAgICAgZGVwdGgpOwotICAgICAgICAgICAgKytpdDsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICB9CiAgICAgICAgIGNhc2Ugb3BfZ2V0X2Zyb21fc2NvcGU6IHsKQEAgLTE5NTYsOCAr
MTk1MSw2IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUqIG8KICAgICAg
ICAgICAgIFJlc29sdmVPcCBvcCA9IEpTU2NvcGU6OmFic3RyYWN0UmVzb2x2ZShtX2dsb2JhbE9i
amVjdC0+Z2xvYmFsRXhlYygpLCBuZWVkc0FjdGl2YXRpb24oKSwgc2NvcGUsIGlkZW50LCBHZXQs
IHR5cGUpOwogICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyA0XS51Lm9wZXJhbmQgPSBvcC50
eXBlOwogICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyA1XS51Lm9wZXJhbmQgPSBvcC5kZXB0
aDsKLSAgICAgICAgICAgIGlmIChvcC5sZXhpY2FsRW52aXJvbm1lbnQpCi0gICAgICAgICAgICAg
ICAgaW5zdHJ1Y3Rpb25zW2kgKyA2XS51LmxleGljYWxFbnZpcm9ubWVudC5zZXQoKnZtKCksIG93
bmVyRXhlY3V0YWJsZSwgb3AubGV4aWNhbEVudmlyb25tZW50KTsKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAKQEAgLTIwMDEsNyArMTk5NCw3IEBAIENvZGVCbG9jazo6Q29kZUJsb2Nr
KFNjcmlwdEV4ZWN1dGFibGUqIG8KICAgICAgICAgICAgICAgICAgICAgQ29uY3VycmVudEpJVExv
Y2tlciBsb2NrZXIobV9zeW1ib2xUYWJsZS0+bV9sb2NrKTsKICAgICAgICAgICAgICAgICAgICAg
U3ltYm9sVGFibGU6Ok1hcDo6aXRlcmF0b3IgaXRlciA9IG1fc3ltYm9sVGFibGUtPmZpbmQobG9j
a2VyLCB1aWQpOwogICAgICAgICAgICAgICAgICAgICBBU1NFUlQoaXRlciAhPSBtX3N5bWJvbFRh
YmxlLT5lbmQobG9ja2VyKSk7Ci0gICAgICAgICAgICAgICAgICAgIGl0ZXItPnZhbHVlLnByZXBh
cmVUb1dhdGNoKHN5bWJvbFRhYmxlKCkpOworICAgICAgICAgICAgICAgICAgICBpdGVyLT52YWx1
ZS5wcmVwYXJlVG9XYXRjaCgpOwogICAgICAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSAr
IDVdLnUud2F0Y2hwb2ludFNldCA9IGl0ZXItPnZhbHVlLndhdGNocG9pbnRTZXQoKTsKICAgICAg
ICAgICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyA1
XS51LndhdGNocG9pbnRTZXQgPSBudWxscHRyOwpAQCAtMjU0NSwxNSArMjUzOCw2IEBAIHZvaWQg
Q29kZUJsb2NrOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSgKICAgICAgICAgICAgICAgICBjdXJJ
bnN0cnVjdGlvblszXS51LnRvVGhpc1N0YXR1cyA9IG1lcmdlKAogICAgICAgICAgICAgICAgICAg
ICBjdXJJbnN0cnVjdGlvblszXS51LnRvVGhpc1N0YXR1cywgVG9UaGlzQ2xlYXJlZEJ5R0MpOwog
ICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBvcF9yZXNvbHZlX3Njb3Bl
OiB7Ci0gICAgICAgICAgICAgICAgV3JpdGVCYXJyaWVyQmFzZTxKU0xleGljYWxFbnZpcm9ubWVu
dD4mIGxleGljYWxFbnZpcm9ubWVudCA9IGN1ckluc3RydWN0aW9uWzZdLnUubGV4aWNhbEVudmly
b25tZW50OwotICAgICAgICAgICAgICAgIGlmICghbGV4aWNhbEVudmlyb25tZW50IHx8IEhlYXA6
OmlzTWFya2VkKGxleGljYWxFbnZpcm9ubWVudC5nZXQoKSkpCi0gICAgICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgICAgIGlmIChPcHRpb25zOjp2ZXJib3NlT1NSKCkpCi0gICAg
ICAgICAgICAgICAgICAgIGRhdGFMb2dGKCJDbGVhcmluZyBkZWFkIGxleGljYWxFbnZpcm9ubWVu
dCAlcC5cbiIsIGxleGljYWxFbnZpcm9ubWVudC5nZXQoKSk7Ci0gICAgICAgICAgICAgICAgbGV4
aWNhbEVudmlyb25tZW50LmNsZWFyKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICB9CiAgICAgICAgICAgICBjYXNlIG9wX2dldF9mcm9tX3Njb3BlOgogICAgICAgICAgICAg
Y2FzZSBvcF9wdXRfdG9fc2NvcGU6IHsKICAgICAgICAgICAgICAgICBSZXNvbHZlTW9kZUFuZFR5
cGUgbW9kZUFuZFR5cGUgPQpAQCAtMzgxNSw2ICszNzk5LDE4IEBAIFN0cmluZyBDb2RlQmxvY2s6
Om5hbWVGb3JSZWdpc3RlcihWaXJ0dWEKICAgICByZXR1cm4gIiI7CiB9CiAKK1ZhbHVlUHJvZmls
ZSogQ29kZUJsb2NrOjp2YWx1ZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChpbnQgYnl0ZWNvZGVP
ZmZzZXQpCit7CisgICAgVmFsdWVQcm9maWxlKiByZXN1bHQgPSBiaW5hcnlTZWFyY2g8VmFsdWVQ
cm9maWxlLCBpbnQ+KAorICAgICAgICBtX3ZhbHVlUHJvZmlsZXMsIG1fdmFsdWVQcm9maWxlcy5z
aXplKCksIGJ5dGVjb2RlT2Zmc2V0LAorICAgICAgICBnZXRWYWx1ZVByb2ZpbGVCeXRlY29kZU9m
ZnNldDxWYWx1ZVByb2ZpbGU+KTsKKyAgICBBU1NFUlQocmVzdWx0LT5tX2J5dGVjb2RlT2Zmc2V0
ICE9IC0xKTsKKyAgICBBU1NFUlQoaW5zdHJ1Y3Rpb25zKClbYnl0ZWNvZGVPZmZzZXQgKyBvcGNv
ZGVMZW5ndGgoCisgICAgICAgIG1fdm0tPmludGVycHJldGVyLT5nZXRPcGNvZGVJRCgKKyAgICAg
ICAgICAgIGluc3RydWN0aW9ucygpW2J5dGVjb2RlT2Zmc2V0XS51Lm9wY29kZSkpIC0gMV0udS5w
cm9maWxlID09IHJlc3VsdCk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogdm9pZCBDb2RlQmxv
Y2s6OnZhbGlkYXRlKCkKIHsKICAgICBCeXRlY29kZUxpdmVuZXNzQW5hbHlzaXMgbGl2ZW5lc3Mo
dGhpcyk7IC8vIENvbXB1dGUgZGlyZWN0bHkgZnJvbSBzY3JhdGNoIHNvIGl0IGRvZXNuJ3QgZWZm
ZWN0IENvZGVCbG9jayBmb290cHJpbnQuCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NvZGVCbG9jay5oCShyZXZpc2lvbiAxODI0OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTM4NiwxNyArMzg2
LDcgQEAgcHVibGljOgogCiAgICAgdW5zaWduZWQgbnVtYmVyT2ZWYWx1ZVByb2ZpbGVzKCkgeyBy
ZXR1cm4gbV92YWx1ZVByb2ZpbGVzLnNpemUoKTsgfQogICAgIFZhbHVlUHJvZmlsZSogdmFsdWVQ
cm9maWxlKGludCBpbmRleCkgeyByZXR1cm4gJm1fdmFsdWVQcm9maWxlc1tpbmRleF07IH0KLSAg
ICBWYWx1ZVByb2ZpbGUqIHZhbHVlUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KGludCBieXRlY29k
ZU9mZnNldCkKLSAgICB7Ci0gICAgICAgIFZhbHVlUHJvZmlsZSogcmVzdWx0ID0gYmluYXJ5U2Vh
cmNoPFZhbHVlUHJvZmlsZSwgaW50PigKLSAgICAgICAgICAgIG1fdmFsdWVQcm9maWxlcywgbV92
YWx1ZVByb2ZpbGVzLnNpemUoKSwgYnl0ZWNvZGVPZmZzZXQsCi0gICAgICAgICAgICBnZXRWYWx1
ZVByb2ZpbGVCeXRlY29kZU9mZnNldDxWYWx1ZVByb2ZpbGU+KTsKLSAgICAgICAgQVNTRVJUKHJl
c3VsdC0+bV9ieXRlY29kZU9mZnNldCAhPSAtMSk7Ci0gICAgICAgIEFTU0VSVChpbnN0cnVjdGlv
bnMoKVtieXRlY29kZU9mZnNldCArIG9wY29kZUxlbmd0aCgKLSAgICAgICAgICAgIG1fdm0tPmlu
dGVycHJldGVyLT5nZXRPcGNvZGVJRCgKLSAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbnMoKVti
eXRlY29kZU9mZnNldF0udS5vcGNvZGUpKSAtIDFdLnUucHJvZmlsZSA9PSByZXN1bHQpOwotICAg
ICAgICByZXR1cm4gcmVzdWx0OwotICAgIH0KKyAgICBWYWx1ZVByb2ZpbGUqIHZhbHVlUHJvZmls
ZUZvckJ5dGVjb2RlT2Zmc2V0KGludCBieXRlY29kZU9mZnNldCk7CiAgICAgU3BlY3VsYXRlZFR5
cGUgdmFsdWVQcm9maWxlUHJlZGljdGlvbkZvckJ5dGVjb2RlT2Zmc2V0KGNvbnN0IENvbmN1cnJl
bnRKSVRMb2NrZXImIGxvY2tlciwgaW50IGJ5dGVjb2RlT2Zmc2V0KQogICAgIHsKICAgICAgICAg
cmV0dXJuIHZhbHVlUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KGJ5dGVjb2RlT2Zmc2V0KS0+Y29t
cHV0ZVVwZGF0ZWRQcmVkaWN0aW9uKGxvY2tlcik7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uY3BwCShyZXZpc2lvbiAxODI0OTgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE0MSw2ICsxNDEsMTggQEAgdm9pZCBDb2RlT3JpZ2luOjpkdW1wSW5Db250ZXh0KFByaW50
U3RyZQogICAgIGR1bXAob3V0KTsKIH0KIAorSlNGdW5jdGlvbiogSW5saW5lQ2FsbEZyYW1lOjpj
YWxsZWVDb25zdGFudCgpIGNvbnN0Cit7CisgICAgaWYgKGNhbGxlZVJlY292ZXJ5LmlzQ29uc3Rh
bnQoKSkKKyAgICAgICAgcmV0dXJuIGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY2FsbGVlUmVjb3Zlcnku
Y29uc3RhbnQoKSk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK3ZvaWQgSW5saW5lQ2FsbEZy
YW1lOjp2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICB2aXNpdG9y
LmFwcGVuZCgmZXhlY3V0YWJsZSk7Cit9CisKIEpTRnVuY3Rpb24qIElubGluZUNhbGxGcmFtZTo6
Y2FsbGVlRm9yQ2FsbEZyYW1lKEV4ZWNTdGF0ZSogZXhlYykgY29uc3QKIHsKICAgICByZXR1cm4g
anNDYXN0PEpTRnVuY3Rpb24qPihjYWxsZWVSZWNvdmVyeS5yZWNvdmVyKGV4ZWMpKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uaAkocmV2aXNpb24g
MTgyNDk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uaAko
d29ya2luZyBjb3B5KQpAQCAtMjgsNyArMjgsNiBAQAogCiAjaW5jbHVkZSAiQ29kZUJsb2NrSGFz
aC5oIgogI2luY2x1ZGUgIkNvZGVTcGVjaWFsaXphdGlvbktpbmQuaCIKLSNpbmNsdWRlICJKU0Z1
bmN0aW9uLmgiCiAjaW5jbHVkZSAiVmFsdWVSZWNvdmVyeS5oIgogI2luY2x1ZGUgIldyaXRlQmFy
cmllci5oIgogI2luY2x1ZGUgPHd0Zi9CaXRWZWN0b3IuaD4KQEAgLTIwNywxNyArMjA2LDggQEAg
c3RydWN0IElubGluZUNhbGxGcmFtZSB7CiAgICAgCiAgICAgQ29kZVNwZWNpYWxpemF0aW9uS2lu
ZCBzcGVjaWFsaXphdGlvbktpbmQoKSBjb25zdCB7IHJldHVybiBzcGVjaWFsaXphdGlvbktpbmRG
b3Ioc3RhdGljX2Nhc3Q8S2luZD4oa2luZCkpOyB9CiAKLSAgICBKU0Z1bmN0aW9uKiBjYWxsZWVD
b25zdGFudCgpIGNvbnN0Ci0gICAgewotICAgICAgICBpZiAoY2FsbGVlUmVjb3ZlcnkuaXNDb25z
dGFudCgpKQotICAgICAgICAgICAgcmV0dXJuIGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY2FsbGVlUmVj
b3ZlcnkuY29uc3RhbnQoKSk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIHZvaWQg
dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCi0gICAgewotICAgICAgICB2aXNp
dG9yLmFwcGVuZCgmZXhlY3V0YWJsZSk7Ci0gICAgfQorICAgIEpTRnVuY3Rpb24qIGNhbGxlZUNv
bnN0YW50KCkgY29uc3Q7CisgICAgdm9pZCB2aXNpdEFnZ3JlZ2F0ZShTbG90VmlzaXRvciYpOwog
ICAgIAogICAgIC8vIEdldCB0aGUgY2FsbGVlIGdpdmVuIGEgbWFjaGluZSBjYWxsIGZyYW1lIHRv
IHdoaWNoIHRoaXMgSW5saW5lQ2FsbEZyYW1lIGJlbG9uZ3MuCiAgICAgSlNGdW5jdGlvbiogY2Fs
bGVlRm9yQ2FsbEZyYW1lKEV4ZWNTdGF0ZSopIGNvbnN0OwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0luc3RydWN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0luc3RydWN0aW9uLmgJKHJldmlzaW9uIDE4MjQ5OCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0cnVjdGlvbi5oCSh3b3JraW5nIGNvcHkp
CkBAIC00Niw3ICs0Niw3IEBAIG5hbWVzcGFjZSBKU0MgewogY2xhc3MgQXJyYXlBbGxvY2F0aW9u
UHJvZmlsZTsKIGNsYXNzIEFycmF5UHJvZmlsZTsKIGNsYXNzIE9iamVjdEFsbG9jYXRpb25Qcm9m
aWxlOwotY2xhc3MgVmFyaWFibGVXYXRjaHBvaW50U2V0OworY2xhc3MgV2F0Y2hwb2ludFNldDsK
IHN0cnVjdCBMTEludENhbGxMaW5rSW5mbzsKIHN0cnVjdCBWYWx1ZVByb2ZpbGU7CiAKQEAgLTEx
Nyw4ICsxMTcsNyBAQCBzdHJ1Y3QgSW5zdHJ1Y3Rpb24gewogICAgICAgICBBcnJheVByb2ZpbGUq
IGFycmF5UHJvZmlsZTsKICAgICAgICAgQXJyYXlBbGxvY2F0aW9uUHJvZmlsZSogYXJyYXlBbGxv
Y2F0aW9uUHJvZmlsZTsKICAgICAgICAgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGUqIG9iamVjdEFs
bG9jYXRpb25Qcm9maWxlOwotICAgICAgICBWYXJpYWJsZVdhdGNocG9pbnRTZXQqIHdhdGNocG9p
bnRTZXQ7Ci0gICAgICAgIFdyaXRlQmFycmllckJhc2U8SlNMZXhpY2FsRW52aXJvbm1lbnQ+IGxl
eGljYWxFbnZpcm9ubWVudDsKKyAgICAgICAgV2F0Y2hwb2ludFNldCogd2F0Y2hwb2ludFNldDsK
ICAgICAgICAgdm9pZCogcG9pbnRlcjsKICAgICAgICAgYm9vbCogcHJlZGljYXRlUG9pbnRlcjsK
ICAgICAgICAgVG9UaGlzU3RhdHVzIHRvVGhpc1N0YXR1czsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9WYXJpYWJsZVdhdGNocG9pbnRTZXQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYXJpYWJsZVdhdGNocG9pbnRTZXQuY3Bw
CShyZXZpc2lvbiAxODI0OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFy
aWFibGVXYXRjaHBvaW50U2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw0OSArMCwwIEBACi0v
KgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
LSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpbmNsdWRlICJj
b25maWcuaCIKLSNpbmNsdWRlICJWYXJpYWJsZVdhdGNocG9pbnRTZXQuaCIKLQotI2luY2x1ZGUg
IkpTQ0lubGluZXMuaCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLXZvaWQgVmFyaWFibGVXcml0ZUZp
cmVEZXRhaWw6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKLXsKLSAgICBvdXQucHJpbnQo
IldyaXRlIHRvICIsIG1fbmFtZSwgIiBpbiAiLCBKU1ZhbHVlKG1fb2JqZWN0KSk7Ci19Ci0KLXZv
aWQgVmFyaWFibGVXYXRjaHBvaW50U2V0Ojpub3RpZnlXcml0ZShWTSYgdm0sIEpTVmFsdWUgdmFs
dWUsIEpTT2JqZWN0KiBiYXNlT2JqZWN0LCBjb25zdCBQcm9wZXJ0eU5hbWUmIHByb3BlcnR5TmFt
ZSkKLXsKLSAgICBub3RpZnlXcml0ZSh2bSwgdmFsdWUsIFZhcmlhYmxlV3JpdGVGaXJlRGV0YWls
KGJhc2VPYmplY3QsIHByb3BlcnR5TmFtZSkpOwotfQotCi12b2lkIFZhcmlhYmxlV2F0Y2hwb2lu
dFNldDo6bm90aWZ5V3JpdGUoVk0mIHZtLCBKU1ZhbHVlIHZhbHVlLCBjb25zdCBjaGFyKiByZWFz
b24pCi17Ci0gICAgbm90aWZ5V3JpdGUodm0sIHZhbHVlLCBTdHJpbmdGaXJlRGV0YWlsKHJlYXNv
bikpOwotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1ZhcmlhYmxlV2F0Y2hwb2ludFNldC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYXJpYWJsZVdhdGNocG9pbnRTZXQuaAkocmV2aXNp
b24gMTgyNDk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhcmlhYmxlV2F0
Y2hwb2ludFNldC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDExMCArMCwwIEBACi0vKgotICogQ29w
eXJpZ2h0IChDKSAyMDEyLTIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoK
LSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmli
dXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAq
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVu
dGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0
aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
LSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBWYXJpYWJs
ZVdhdGNocG9pbnRTZXRfaAotI2RlZmluZSBWYXJpYWJsZVdhdGNocG9pbnRTZXRfaAotCi0jaW5j
bHVkZSAiV2F0Y2hwb2ludC5oIgotI2luY2x1ZGUgIldyaXRlQmFycmllci5oIgotCi1uYW1lc3Bh
Y2UgSlNDIHsKLQotY2xhc3MgSlNPYmplY3Q7Ci1jbGFzcyBTeW1ib2xUYWJsZTsKLQotY2xhc3Mg
VmFyaWFibGVXcml0ZUZpcmVEZXRhaWwgOiBwdWJsaWMgRmlyZURldGFpbCB7Ci1wdWJsaWM6Ci0g
ICAgVmFyaWFibGVXcml0ZUZpcmVEZXRhaWwoSlNPYmplY3QqIG9iamVjdCwgY29uc3QgUHJvcGVy
dHlOYW1lJiBuYW1lKQotICAgICAgICA6IG1fb2JqZWN0KG9iamVjdCkKLSAgICAgICAgLCBtX25h
bWUobmFtZSkKLSAgICB7Ci0gICAgfQotICAgIAotICAgIHZpcnR1YWwgdm9pZCBkdW1wKFByaW50
U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7Ci0KLXByaXZhdGU6Ci0gICAgSlNPYmplY3QqIG1fb2Jq
ZWN0OwotICAgIGNvbnN0IFByb3BlcnR5TmFtZSYgbV9uYW1lOwotfTsKLQotY2xhc3MgVmFyaWFi
bGVXYXRjaHBvaW50U2V0IDogcHVibGljIFdhdGNocG9pbnRTZXQgewotICAgIGZyaWVuZCBjbGFz
cyBMTEludE9mZnNldHNFeHRyYWN0b3I7Ci1wdWJsaWM6Ci0gICAgVmFyaWFibGVXYXRjaHBvaW50
U2V0KFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSkKLSAgICAgICAgOiBXYXRjaHBvaW50U2V0KENs
ZWFyV2F0Y2hwb2ludCkKLSAgICAgICAgLCBtX3N5bWJvbFRhYmxlKHN5bWJvbFRhYmxlKQotICAg
IHsKLSAgICB9Ci0gICAgCi0gICAgflZhcmlhYmxlV2F0Y2hwb2ludFNldCgpIHsgfQotICAgIAot
ICAgIC8vIEZvciB0aGUgcHVycG9zZSBvZiBkZWNpZGluZyB3aGV0aGVyIG9yIG5vdCB0byB3YXRj
aCB0aGlzIHZhcmlhYmxlLCB5b3Ugb25seSBuZWVkCi0gICAgLy8gdG8gaW5zcGVjdCBpbmZlcnJl
ZFZhbHVlKCkuIElmIHRoaXMgcmV0dXJucyBzb21ldGhpbmcgb3RoZXIgdGhhbiB0aGUgZW1wdHkK
LSAgICAvLyB2YWx1ZSwgdGhlbiBpdCBtZWFucyB0aGF0IGF0IGFsbCBmdXR1cmUgc2FmZXBvaW50
cywgdGhpcyB3YXRjaHBvaW50IHNldCB3aWxsIGJlCi0gICAgLy8gaW4gb25lIG9mIHRoZXNlIHN0
YXRlczoKLSAgICAvLwotICAgIC8vICAgIElzV2F0Y2hlZDogaW4gdGhpcyBjYXNlLCB0aGUgdmFy
aWFibGUncyB2YWx1ZSBtdXN0IHN0aWxsIGJlIHRoZQotICAgIC8vICAgICAgICBpbmZlcnJlZFZh
bHVlLgotICAgIC8vCi0gICAgLy8gICAgSXNJbnZhbGlkYXRlZDogaW4gdGhpcyBjYXNlIHRoZSB2
YXJpYWJsZSdzIHZhbHVlIG1heSBiZSBhbnl0aGluZyBidXQgeW91J2xsCi0gICAgLy8gICAgICAg
IGVpdGhlciBub3RpY2UgdGhhdCBpdCdzIGludmFsaWRhdGVkIGFuZCBub3QgaW5zdGFsbCB0aGUg
d2F0Y2hwb2ludCwgb3IKLSAgICAvLyAgICAgICAgeW91IHdpbGwgaGF2ZSBiZWVuIG5vdGlmaWVk
IHRoYXQgdGhlIHdhdGNocG9pbnQgd2FzIGZpcmVkLgotICAgIEpTVmFsdWUgaW5mZXJyZWRWYWx1
ZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5mZXJyZWRWYWx1ZS5nZXQoKTsgfQotICAgIAotICAgIHZv
aWQgbm90aWZ5V3JpdGUoVk0mLCBKU1ZhbHVlLCBjb25zdCBGaXJlRGV0YWlsJik7Ci0gICAgSlNf
RVhQT1JUX1BSSVZBVEUgdm9pZCBub3RpZnlXcml0ZShWTSYsIEpTVmFsdWUsIEpTT2JqZWN0KiBi
YXNlT2JqZWN0LCBjb25zdCBQcm9wZXJ0eU5hbWUmKTsKLSAgICB2b2lkIG5vdGlmeVdyaXRlKFZN
JiwgSlNWYWx1ZSwgY29uc3QgY2hhciogcmVhc29uKTsKLSAgICAKLSAgICB2b2lkIGludmFsaWRh
dGUoY29uc3QgRmlyZURldGFpbCYgZGV0YWlsKQotICAgIHsKLSAgICAgICAgbV9pbmZlcnJlZFZh
bHVlLmNsZWFyKCk7Ci0gICAgICAgIFdhdGNocG9pbnRTZXQ6OmludmFsaWRhdGUoZGV0YWlsKTsK
LSAgICB9Ci0gICAgCi0gICAgdm9pZCBmaW5hbGl6ZVVuY29uZGl0aW9uYWxseShjb25zdCBGaXJl
RGV0YWlsJiBkZXRhaWwpCi0gICAgewotICAgICAgICBBU1NFUlQoISFtX2luZmVycmVkVmFsdWUg
PT0gKHN0YXRlKCkgPT0gSXNXYXRjaGVkKSk7Ci0gICAgICAgIGlmICghbV9pbmZlcnJlZFZhbHVl
KQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBKU1ZhbHVlIGluZmVycmVkVmFsdWUgPSBt
X2luZmVycmVkVmFsdWUuZ2V0KCk7Ci0gICAgICAgIGlmICghaW5mZXJyZWRWYWx1ZS5pc0NlbGwo
KSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgSlNDZWxsKiBjZWxsID0gaW5mZXJyZWRW
YWx1ZS5hc0NlbGwoKTsKLSAgICAgICAgaWYgKEhlYXA6OmlzTWFya2VkKGNlbGwpKQotICAgICAg
ICAgICAgcmV0dXJuOwotICAgICAgICBpbnZhbGlkYXRlKGRldGFpbCk7Ci0gICAgfQotCi0gICAg
V3JpdGVCYXJyaWVyPFVua25vd24+KiBhZGRyZXNzT2ZJbmZlcnJlZFZhbHVlKCkgeyByZXR1cm4g
Jm1faW5mZXJyZWRWYWx1ZTsgfQotICAgIAotcHJpdmF0ZToKLSAgICBTeW1ib2xUYWJsZSYgbV9z
eW1ib2xUYWJsZTsKLSAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4gbV9pbmZlcnJlZFZhbHVlOwot
fTsKLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNlbmRpZiAvLyBWYXJpYWJsZVdhdGNocG9pbnRT
ZXRfaAotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFyaWFibGVXYXRj
aHBvaW50U2V0SW5saW5lcy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9WYXJpYWJsZVdhdGNocG9pbnRTZXRJbmxpbmVzLmgJKHJldmlzaW9uIDE4MjQ5OCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYXJpYWJsZVdhdGNocG9pbnRTZXRJ
bmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNjAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIFZhcmlhYmxlV2F0Y2hwb2lu
dFNldElubGluZXNfaAotI2RlZmluZSBWYXJpYWJsZVdhdGNocG9pbnRTZXRJbmxpbmVzX2gKLQot
I2luY2x1ZGUgIlN5bWJvbFRhYmxlLmgiCi0jaW5jbHVkZSAiVmFyaWFibGVXYXRjaHBvaW50U2V0
LmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi1pbmxpbmUgdm9pZCBWYXJpYWJsZVdhdGNocG9pbnRT
ZXQ6Om5vdGlmeVdyaXRlKFZNJiB2bSwgSlNWYWx1ZSB2YWx1ZSwgY29uc3QgRmlyZURldGFpbCYg
ZGV0YWlsKQotewotICAgIEFTU0VSVCghIXZhbHVlKTsKLSAgICBzd2l0Y2ggKHN0YXRlKCkpIHsK
LSAgICBjYXNlIENsZWFyV2F0Y2hwb2ludDoKLSAgICAgICAgbV9pbmZlcnJlZFZhbHVlLnNldCh2
bSwgJm1fc3ltYm9sVGFibGUsIHZhbHVlKTsKLSAgICAgICAgc3RhcnRXYXRjaGluZygpOwotICAg
ICAgICByZXR1cm47Ci0KLSAgICBjYXNlIElzV2F0Y2hlZDoKLSAgICAgICAgQVNTRVJUKCEhbV9p
bmZlcnJlZFZhbHVlKTsKLSAgICAgICAgaWYgKHZhbHVlID09IG1faW5mZXJyZWRWYWx1ZS5nZXQo
KSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaW52YWxpZGF0ZShkZXRhaWwpOwotICAg
ICAgICByZXR1cm47Ci0gICAgICAgICAgICAKLSAgICBjYXNlIElzSW52YWxpZGF0ZWQ6Ci0gICAg
ICAgIEFTU0VSVCghbV9pbmZlcnJlZFZhbHVlKTsKLSAgICAgICAgcmV0dXJuOwotICAgIH0KLSAg
ICAgICAgCi0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci19Ci0KLX0gLy8gbmFtZXNwYWNlIEpT
QwotCi0jZW5kaWYgLy8gVmFyaWFibGVXYXRjaHBvaW50U2V0SW5saW5lc19oCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFyaWFibGVXcml0ZUZpcmVEZXRhaWwuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYXJpYWJsZVdyaXRl
RmlyZURldGFpbC5jcHAJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvVmFyaWFibGVXcml0ZUZpcmVEZXRhaWwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsNDQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlZhcmlhYmxlV3JpdGVGaXJlRGV0YWlsLmgi
CisKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeworCit2b2lkIFZh
cmlhYmxlV3JpdGVGaXJlRGV0YWlsOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7Cisg
ICAgb3V0LnByaW50KCJXcml0ZSB0byAiLCBtX25hbWUsICIgaW4gIiwgSlNWYWx1ZShtX29iamVj
dCkpOworfQorCit2b2lkIFZhcmlhYmxlV3JpdGVGaXJlRGV0YWlsOjp0b3VjaChXYXRjaHBvaW50
U2V0KiBzZXQsIEpTT2JqZWN0KiBvYmplY3QsIGNvbnN0IFByb3BlcnR5TmFtZSYgbmFtZSkKK3sK
KyAgICBzZXQtPnRvdWNoKFZhcmlhYmxlV3JpdGVGaXJlRGV0YWlsKG9iamVjdCwgbmFtZSkpOwor
fQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1ZhcmlhYmxlV3JpdGVGaXJlRGV0YWlsLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhcmlhYmxlV3JpdGVGaXJlRGV0YWlsLmgJKHJldmlzaW9u
IDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFyaWFibGVXcml0ZUZpcmVE
ZXRhaWwuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDU1IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3Ry
aWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhv
dXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xs
b3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisg
KiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQv
b3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisg
KiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBB
TlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1Qg
TElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZ
IEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQu
ICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgVmFyaWFibGVXcml0ZUZpcmVE
ZXRhaWxfaAorI2RlZmluZSBWYXJpYWJsZVdyaXRlRmlyZURldGFpbF9oCisKKyNpbmNsdWRlICJX
YXRjaHBvaW50LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBKU09iamVjdDsKK2NsYXNz
IFByb3BlcnR5TmFtZTsKKworY2xhc3MgVmFyaWFibGVXcml0ZUZpcmVEZXRhaWwgOiBwdWJsaWMg
RmlyZURldGFpbCB7CitwdWJsaWM6CisgICAgVmFyaWFibGVXcml0ZUZpcmVEZXRhaWwoSlNPYmpl
Y3QqIG9iamVjdCwgY29uc3QgUHJvcGVydHlOYW1lJiBuYW1lKQorICAgICAgICA6IG1fb2JqZWN0
KG9iamVjdCkKKyAgICAgICAgLCBtX25hbWUobmFtZSkKKyAgICB7CisgICAgfQorICAgIAorICAg
IHZpcnR1YWwgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Qgb3ZlcnJpZGU7CisgICAgCisg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgc3RhdGljIHZvaWQgdG91Y2goV2F0Y2hwb2ludFNldCosIEpT
T2JqZWN0KiwgY29uc3QgUHJvcGVydHlOYW1lJik7CisKK3ByaXZhdGU6CisgICAgSlNPYmplY3Qq
IG1fb2JqZWN0OworICAgIGNvbnN0IFByb3BlcnR5TmFtZSYgbV9uYW1lOworfTsKKworfSAvLyBu
YW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBWYXJpYWJsZVdyaXRlRmlyZURldGFpbF9oCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvV2F0Y2hwb2ludC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9XYXRjaHBvaW50LmgJKHJldmlzaW9u
IDE4MjQ5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9XYXRjaHBvaW50LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEyNSwyMCArMTI1LDI0IEBAIHB1YmxpYzoKICAgICAvLyBzZXQg
d2F0Y2hwb2ludHMgdGhhdCB3ZSBiZWxpZXZlIHdpbGwgYWN0dWFsbHkgYmUgZmlyZWQuCiAgICAg
dm9pZCBzdGFydFdhdGNoaW5nKCkKICAgICB7Ci0gICAgICAgIEFTU0VSVChzdGF0ZSgpICE9IElz
SW52YWxpZGF0ZWQpOworICAgICAgICBBU1NFUlQobV9zdGF0ZSAhPSBJc0ludmFsaWRhdGVkKTsK
KyAgICAgICAgaWYgKG1fc3RhdGUgPT0gSXNXYXRjaGVkKQorICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOwogICAgICAgICBtX3N0YXRlID0gSXNXYXRj
aGVkOworICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOwogICAgIH0KICAgICAKICAgICB2
b2lkIGZpcmVBbGwoY29uc3QgRmlyZURldGFpbCYgZGV0YWlsKQogICAgIHsKLSAgICAgICAgaWYg
KExJS0VMWShzdGF0ZSgpICE9IElzV2F0Y2hlZCkpCisgICAgICAgIGlmIChMSUtFTFkobV9zdGF0
ZSAhPSBJc1dhdGNoZWQpKQogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICBmaXJlQWxsU2xv
dyhkZXRhaWwpOwogICAgIH0KICAgICAKICAgICB2b2lkIGZpcmVBbGwoY29uc3QgY2hhciogcmVh
c29uKQogICAgIHsKLSAgICAgICAgaWYgKExJS0VMWShzdGF0ZSgpICE9IElzV2F0Y2hlZCkpCisg
ICAgICAgIGlmIChMSUtFTFkobV9zdGF0ZSAhPSBJc1dhdGNoZWQpKQogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICBmaXJlQWxsU2xvdyhyZWFzb24pOwogICAgIH0KQEAgLTE1MSwxMyArMTU1
LDIzIEBAIHB1YmxpYzoKICAgICAgICAgICAgIGZpcmVBbGwoZGV0YWlsKTsKICAgICB9CiAgICAg
CisgICAgdm9pZCB0b3VjaChjb25zdCBjaGFyKiByZWFzb24pCisgICAgeworICAgICAgICB0b3Vj
aChTdHJpbmdGaXJlRGV0YWlsKHJlYXNvbikpOworICAgIH0KKyAgICAKICAgICB2b2lkIGludmFs
aWRhdGUoY29uc3QgRmlyZURldGFpbCYgZGV0YWlsKQogICAgIHsKICAgICAgICAgaWYgKHN0YXRl
KCkgPT0gSXNXYXRjaGVkKQogICAgICAgICAgICAgZmlyZUFsbChkZXRhaWwpOwogICAgICAgICBt
X3N0YXRlID0gSXNJbnZhbGlkYXRlZDsKICAgICB9Ci0KKyAgICAKKyAgICB2b2lkIGludmFsaWRh
dGUoY29uc3QgY2hhciogcmVhc29uKQorICAgIHsKKyAgICAgICAgaW52YWxpZGF0ZShTdHJpbmdG
aXJlRGV0YWlsKHJlYXNvbikpOworICAgIH0KKyAgICAKICAgICBpbnQ4X3QqIGFkZHJlc3NPZlN0
YXRlKCkgeyByZXR1cm4gJm1fc3RhdGU7IH0KICAgICBpbnQ4X3QqIGFkZHJlc3NPZlNldElzTm90
RW1wdHkoKSB7IHJldHVybiAmbV9zZXRJc05vdEVtcHR5OyB9CiAgICAgCkBAIC0yMDgsMTkgKzIy
MiwyNiBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGZyZWVGYXQoKTsK
ICAgICB9CisKKyAgICAvLyBJdCBpcyBzYWZlIHRvIGNhbGwgdGhpcyBmcm9tIGFub3RoZXIgdGhy
ZWFkLiBJdCBtYXkgcmV0dXJuIGEgcHJpb3Igc3RhdGUsCisgICAgLy8gYnV0IHRoYXQgc2hvdWxk
IGJlIGZpbmUgc2luY2UgeW91IHNob3VsZCBvbmx5IHBlcmZvcm0gYWN0aW9ucyBiYXNlZCBvbiB0
aGUKKyAgICAvLyBzdGF0ZSBpZiB5b3UgYWxzbyBhZGQgYSB3YXRjaHBvaW50LgorICAgIFdhdGNo
cG9pbnRTdGF0ZSBzdGF0ZSgpIGNvbnN0CisgICAgeworICAgICAgICBXVEY6OmxvYWRMb2FkRmVu
Y2UoKTsKKyAgICAgICAgdWludHB0cl90IGRhdGEgPSBtX2RhdGE7CisgICAgICAgIFdURjo6bG9h
ZExvYWRGZW5jZSgpOworICAgICAgICBpZiAoaXNGYXQoZGF0YSkpCisgICAgICAgICAgICByZXR1
cm4gZmF0KGRhdGEpLT5zdGF0ZSgpOworICAgICAgICByZXR1cm4gZGVjb2RlU3RhdGUoZGF0YSk7
CisgICAgfQogICAgIAogICAgIC8vIEl0IGlzIHNhZmUgdG8gY2FsbCB0aGlzIGZyb20gYW5vdGhl
ciB0aHJlYWQuICBJdCBtYXkgcmV0dXJuIGZhbHNlCiAgICAgLy8gZXZlbiBpZiB0aGUgc2V0IGFj
dHVhbGx5IGhhZCBiZWVuIGludmFsaWRhdGVkLCBidXQgdGhhdCBvdWdodCB0byBoYXBwZW4KICAg
ICAvLyBvbmx5IGluIHRoZSBjYXNlIG9mIHJhY2VzLCBhbmQgc2hvdWxkIGJlIHJhcmUuCiAgICAg
Ym9vbCBoYXNCZWVuSW52YWxpZGF0ZWQoKSBjb25zdAogICAgIHsKLSAgICAgICAgV1RGOjpsb2Fk
TG9hZEZlbmNlKCk7Ci0gICAgICAgIHVpbnRwdHJfdCBkYXRhID0gbV9kYXRhOwotICAgICAgICBp
ZiAoaXNGYXQoZGF0YSkpIHsKLSAgICAgICAgICAgIFdURjo6bG9hZExvYWRGZW5jZSgpOwotICAg
ICAgICAgICAgcmV0dXJuIGZhdChkYXRhKS0+aGFzQmVlbkludmFsaWRhdGVkKCk7Ci0gICAgICAg
IH0KLSAgICAgICAgcmV0dXJuIGRlY29kZVN0YXRlKGRhdGEpID09IElzSW52YWxpZGF0ZWQ7Cisg
ICAgICAgIHJldHVybiBzdGF0ZSgpID09IElzSW52YWxpZGF0ZWQ7CiAgICAgfQogICAgIAogICAg
IC8vIExpa2UgaGFzQmVlbkludmFsaWRhdGVkKCksIG1heSBiZSBjYWxsZWQgZnJvbSBhbm90aGVy
IHRocmVhZC4KQEAgLTI1Myw2ICsyNzQsMTQgQEAgcHVibGljOgogICAgICAgICBXVEY6OnN0b3Jl
U3RvcmVGZW5jZSgpOwogICAgIH0KICAgICAKKyAgICB2b2lkIGludmFsaWRhdGUoY29uc3QgRmly
ZURldGFpbCYgZGV0YWlsKQorICAgIHsKKyAgICAgICAgaWYgKGlzRmF0KCkpCisgICAgICAgICAg
ICBmYXQoKS0+aW52YWxpZGF0ZShkZXRhaWwpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBt
X2RhdGEgPSBlbmNvZGVTdGF0ZShJc0ludmFsaWRhdGVkKTsKKyAgICB9CisgICAgCiAgICAgSlNf
RVhQT1JUX1BSSVZBVEUgdm9pZCBmaXJlQWxsKGNvbnN0IGNoYXIqIHJlYXNvbik7CiAgICAgCiAg
ICAgdm9pZCB0b3VjaChjb25zdCBGaXJlRGV0YWlsJiBkZXRhaWwpCkBAIC0yNjEsNyArMjkwLDEx
IEBAIHB1YmxpYzoKICAgICAgICAgICAgIGZhdCgpLT50b3VjaChkZXRhaWwpOwogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIGlmIChkZWNvZGVTdGF0ZShtX2RhdGEpID09
IENsZWFyV2F0Y2hwb2ludCkKKyAgICAgICAgdWludHB0cl90IGRhdGEgPSBtX2RhdGE7CisgICAg
ICAgIGlmIChkZWNvZGVTdGF0ZShkYXRhKSA9PSBJc0ludmFsaWRhdGVkKQorICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOworICAgICAgICBpZiAoZGVj
b2RlU3RhdGUoZGF0YSkgPT0gQ2xlYXJXYXRjaHBvaW50KQogICAgICAgICAgICAgbV9kYXRhID0g
ZW5jb2RlU3RhdGUoSXNXYXRjaGVkKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgbV9kYXRh
ID0gZW5jb2RlU3RhdGUoSXNJbnZhbGlkYXRlZCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkocmV2
aXNpb24gMTgyNDk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRl
Y29kZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2Niw5ICs0NjYsNiBAQCBCeXRl
Y29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3IoVk0mCiAgICAgICAgIH0KICAgICB9CiAg
ICAgCi0gICAgaWYgKG1fc3ltYm9sVGFibGUtPnNjb3BlU2l6ZSgpKQotICAgICAgICBlbWl0T3Bj
b2RlKG9wX3RvdWNoX2VudHJ5KTsKLQogICAgIGlmIChpc0NvbnN0cnVjdG9yKCkpIHsKICAgICAg
ICAgaWYgKGNvbnN0cnVjdG9yS2luZCgpID09IENvbnN0cnVjdG9yS2luZDo6RGVyaXZlZCkgewog
ICAgICAgICAgICAgbV9uZXdUYXJnZXRSZWdpc3RlciA9IGFkZFZhcigpOwpAQCAtMTMyNCw4ICsx
MzIxLDYgQEAgUmVnaXN0ZXJJRCogQnl0ZWNvZGVHZW5lcmF0b3I6OmVtaXRSZXNvbAogICAgICAg
ICAKICAgICAgICAgQVNTRVJUKCFtX3N5bWJvbFRhYmxlIHx8ICFtX3N5bWJvbFRhYmxlLT5jb250
YWlucyh2YXJpYWJsZS5pZGVudCgpLmltcGwoKSkgfHwgcmVzb2x2ZVR5cGUoKSA9PSBEeW5hbWlj
KTsKICAgICAgICAgCi0gICAgICAgIG1fY29kZUJsb2NrLT5hZGRQcm9wZXJ0eUFjY2Vzc0luc3Ry
dWN0aW9uKGluc3RydWN0aW9ucygpLnNpemUoKSk7Ci0gICAgICAgIAogICAgICAgICAvLyByZXNv
bHZlX3Njb3BlIGRzdCwgaWQsIFJlc29sdmVUeXBlLCBkZXB0aAogICAgICAgICBlbWl0T3Bjb2Rl
KG9wX3Jlc29sdmVfc2NvcGUpOwogICAgICAgICBkc3QgPSB0ZW1wRGVzdGluYXRpb24oZHN0KTsK
QEAgLTEzMzQsNyArMTMyOSw2IEBAIFJlZ2lzdGVySUQqIEJ5dGVjb2RlR2VuZXJhdG9yOjplbWl0
UmVzb2wKICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKGFkZENvbnN0YW50KHZhcmlhYmxl
LmlkZW50KCkpKTsKICAgICAgICAgaW5zdHJ1Y3Rpb25zKCkuYXBwZW5kKHJlc29sdmVUeXBlKCkp
OwogICAgICAgICBpbnN0cnVjdGlvbnMoKS5hcHBlbmQoMCk7Ci0gICAgICAgIGluc3RydWN0aW9u
cygpLmFwcGVuZCgwKTsKICAgICAgICAgcmV0dXJuIGRzdDsKICAgICB9CiAgICAgCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVy
cHJldGVySW5saW5lcy5oCShyZXZpc2lvbiAxODI0OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEzNDIsNiArMTM0Miw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRl
VHkKICAgICB9CiAKICAgICBjYXNlIENyZWF0ZVRoaXM6IHsKKyAgICAgICAgLy8gRklYTUU6IFdl
IGNhbiBmb2xkIHRoaXMgdG8gTmV3T2JqZWN0IGlmIHRoZSBpbmNvbWluZyBjYWxsZWUgaXMgYSBj
b25zdGFudC4KICAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNGaW5hbE9iamVjdCk7
CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTE0MDEsNiArMTQwMiwxNSBAQCBib29sIEFic3Ry
YWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIGJyZWFrOwogICAgICAgICAK
ICAgICBjYXNlIEdldENhbGxlZToKKyAgICAgICAgaWYgKEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhl
Y3V0YWJsZSA9IGpzRHluYW1pY0Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4obV9jb2RlQmxvY2st
Pm93bmVyRXhlY3V0YWJsZSgpKSkgeworICAgICAgICAgICAgSW5mZXJyZWRWYWx1ZSogc2luZ2xl
dG9uID0gZXhlY3V0YWJsZS0+c2luZ2xldG9uRnVuY3Rpb24oKTsKKyAgICAgICAgICAgIGlmIChK
U1ZhbHVlIHZhbHVlID0gc2luZ2xldG9uLT5pbmZlcnJlZFZhbHVlKCkpIHsKKyAgICAgICAgICAg
ICAgICBtX2dyYXBoLndhdGNocG9pbnRzKCkuYWRkTGF6aWx5KHNpbmdsZXRvbik7CisgICAgICAg
ICAgICAgICAgSlNGdW5jdGlvbiogZnVuY3Rpb24gPSBqc0Nhc3Q8SlNGdW5jdGlvbio+KHZhbHVl
KTsKKyAgICAgICAgICAgICAgICBzZXRDb25zdGFudChub2RlLCAqbV9ncmFwaC5mcmVlemUoZnVu
Y3Rpb24pKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQogICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0Z1bmN0aW9uKTsKICAgICAgICAg
YnJlYWs7CiAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRl
Q29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDE4MjQ5OCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNzks
OCArMjc5LDIwIEBAIHByaXZhdGU6CiAgICAgICAgICAgICAgICAgaWYgKG9wZXJhbmQub2Zmc2V0
KCkgPT0gSlNTdGFjazo6Q2FsbGVlKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gd2Vha0pT
Q29uc3RhbnQoY2FsbGVlKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChvcGVy
YW5kLm9mZnNldCgpID09IEpTU3RhY2s6OkNhbGxlZSkKKyAgICAgICAgfSBlbHNlIGlmIChvcGVy
YW5kLm9mZnNldCgpID09IEpTU3RhY2s6OkNhbGxlZSkgeworICAgICAgICAgICAgLy8gV2UgaGF2
ZSB0byBkbyBzb21lIGNvbnN0YW50LWZvbGRpbmcgaGVyZSBiZWNhdXNlIHRoaXMgZW5hYmxlcyBD
cmVhdGVUaGlzIGZvbGRpbmcuIE5vdGUKKyAgICAgICAgICAgIC8vIHRoYXQgd2UgZG9uJ3QgaGF2
ZSBzdWNoIHdhdGNocG9pbnQtYmFzZWQgZm9sZGluZyBmb3IgaW5saW5lZCB1c2VzIG9mIENhbGxl
ZSwgc2luY2UgaW4gdGhhdAorICAgICAgICAgICAgLy8gY2FzZSBpZiB0aGUgZnVuY3Rpb24gaXMg
YSBzaW5nbGV0b24gdGhlbiB3ZSBhbHJlYWR5IGtub3cgaXQuCisgICAgICAgICAgICBpZiAoRnVu
Y3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlID0ganNEeW5hbWljQ2FzdDxGdW5jdGlvbkV4ZWN1
dGFibGUqPihtX2NvZGVCbG9jay0+b3duZXJFeGVjdXRhYmxlKCkpKSB7CisgICAgICAgICAgICAg
ICAgSW5mZXJyZWRWYWx1ZSogc2luZ2xldG9uID0gZXhlY3V0YWJsZS0+c2luZ2xldG9uRnVuY3Rp
b24oKTsKKyAgICAgICAgICAgICAgICBpZiAoSlNWYWx1ZSB2YWx1ZSA9IHNpbmdsZXRvbi0+aW5m
ZXJyZWRWYWx1ZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgud2F0Y2hwb2ludHMo
KS5hZGRMYXppbHkoc2luZ2xldG9uKTsKKyAgICAgICAgICAgICAgICAgICAgSlNGdW5jdGlvbiog
ZnVuY3Rpb24gPSBqc0Nhc3Q8SlNGdW5jdGlvbio+KHZhbHVlKTsKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHdlYWtKU0NvbnN0YW50KGZ1bmN0aW9uKTsKKyAgICAgICAgICAgICAgICB9Cisg
ICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gYWRkVG9HcmFwaChHZXRDYWxsZWUpOwor
ICAgICAgICB9CiAgICAgICAgIAogICAgICAgICByZXR1cm4gZ2V0RGlyZWN0KG1faW5saW5lU3Rh
Y2tUb3AtPnJlbWFwT3BlcmFuZChvcGVyYW5kKSk7CiAgICAgfQpAQCAtMjUzMiw2ICsyNTQ0LDEy
IEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OmNsZWFyQ2FjaGVzKCkKIE5vZGUqIEJ5dGVDb2RlUGFy
c2VyOjpnZXRTY29wZShWaXJ0dWFsUmVnaXN0ZXIgc2NvcGVDaGFpbiwgdW5zaWduZWQgc2tpcENv
dW50KQogewogICAgIE5vZGUqIGxvY2FsQmFzZSA9IGdldChzY29wZUNoYWluKTsKKyAgICBhZGRU
b0dyYXBoKFBoYW50b20sIGxvY2FsQmFzZSk7IC8vIE9TUiBleGl0IGNhbm5vdCBoYW5kbGUgcmVz
b2x2ZV9zY29wZSBvbiBhIERDRSdkIHNjb3BlLgorICAgIGlmIChKU1Njb3BlKiBzY29wZSA9IGxv
Y2FsQmFzZS0+ZHluYW1pY0Nhc3RDb25zdGFudDxKU1Njb3BlKj4oKSkgeworICAgICAgICBmb3Ig
KHVuc2lnbmVkIG4gPSBza2lwQ291bnQ7IG4tLTspCisgICAgICAgICAgICBzY29wZSA9IHNjb3Bl
LT5uZXh0KCk7CisgICAgICAgIHJldHVybiB3ZWFrSlNDb25zdGFudChzY29wZSk7CisgICAgfQog
ICAgIGZvciAodW5zaWduZWQgbiA9IHNraXBDb3VudDsgbi0tOykKICAgICAgICAgbG9jYWxCYXNl
ID0gYWRkVG9HcmFwaChTa2lwU2NvcGUsIGxvY2FsQmFzZSk7CiAgICAgcmV0dXJuIGxvY2FsQmFz
ZTsKQEAgLTI2MDYsMTEgKzI2MjQsNiBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2Nr
KHVuc2lnbmVkCiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9lbnRlcik7CiAgICAgICAgIH0K
ICAgICAgICAgICAgIAotICAgICAgICBjYXNlIG9wX3RvdWNoX2VudHJ5OgotICAgICAgICAgICAg
aWYgKG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLT5zeW1ib2xUYWJsZSgpLT5tX2Z1bmN0
aW9uRW50ZXJlZE9uY2UuaXNTdGlsbFZhbGlkKCkpCi0gICAgICAgICAgICAgICAgYWRkVG9HcmFw
aChGb3JjZU9TUkV4aXQpOwotICAgICAgICAgICAgTkVYVF9PUENPREUob3BfdG91Y2hfZW50cnkp
OwotICAgICAgICAgICAgCiAgICAgICAgIGNhc2Ugb3BfdG9fdGhpczogewogICAgICAgICAgICAg
Tm9kZSogb3AxID0gZ2V0VGhpcygpOwogICAgICAgICAgICAgaWYgKG9wMS0+b3AoKSAhPSBUb1Ro
aXMpIHsKQEAgLTMzODgsMTcgKzM0MDEsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJs
b2NrKHVuc2lnbmVkCiAgICAgICAgICAgICBjYXNlIExvY2FsQ2xvc3VyZVZhcjoKICAgICAgICAg
ICAgIGNhc2UgQ2xvc3VyZVZhcjoKICAgICAgICAgICAgIGNhc2UgQ2xvc3VyZVZhcldpdGhWYXJJ
bmplY3Rpb25DaGVja3M6IHsKLSAgICAgICAgICAgICAgICBKU0xleGljYWxFbnZpcm9ubWVudCog
bGV4aWNhbEVudmlyb25tZW50ID0gY3VycmVudEluc3RydWN0aW9uWzZdLnUubGV4aWNhbEVudmly
b25tZW50LmdldCgpOwotICAgICAgICAgICAgICAgIGlmIChsZXhpY2FsRW52aXJvbm1lbnQKLSAg
ICAgICAgICAgICAgICAgICAgJiYgbGV4aWNhbEVudmlyb25tZW50LT5zeW1ib2xUYWJsZSgpLT5t
X2Z1bmN0aW9uRW50ZXJlZE9uY2UuaXNTdGlsbFZhbGlkKCkpIHsKLSAgICAgICAgICAgICAgICAg
ICAgbV9ncmFwaC53YXRjaHBvaW50cygpLmFkZExhemlseShsZXhpY2FsRW52aXJvbm1lbnQtPnN5
bWJvbFRhYmxlKCktPm1fZnVuY3Rpb25FbnRlcmVkT25jZSk7Ci0gICAgICAgICAgICAgICAgICAg
IGFkZFRvR3JhcGgoUGhhbnRvbSwgZ2V0RGlyZWN0KG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3Bl
cmFuZChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCkpKSk7
Ci0gICAgICAgICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoZHN0KSwgd2Vha0pTQ29u
c3RhbnQobGV4aWNhbEVudmlyb25tZW50KSk7Ci0gICAgICAgICAgICAgICAgICAgIGJyZWFrOwot
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGRz
dCksIGdldFNjb3BlKFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVy
YW5kKSwgZGVwdGgpKTsKLSAgICAgICAgICAgICAgICBpZiAoaW5saW5lQ2FsbEZyYW1lKCkpCi0g
ICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoUGhhbnRvbSwgZ2V0RGlyZWN0KG1faW5saW5l
U3RhY2tUb3AtPnJlbWFwT3BlcmFuZChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9u
WzJdLnUub3BlcmFuZCkpKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9
CiAgICAgICAgICAgICBjYXNlIER5bmFtaWM6CkBAIC0zNDUwLDE5ICszNDUzLDU4IEBAIGJvb2wg
Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgIGNhc2UgR2xv
YmFsVmFyOgogICAgICAgICAgICAgY2FzZSBHbG9iYWxWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
OiB7CiAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChQaGFudG9tLCBnZXQoVmlydHVhbFJlZ2lz
dGVyKHNjb3BlKSkpOwotICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2Vy
KGdsb2JhbE9iamVjdC0+c3ltYm9sVGFibGUoKS0+bV9sb2NrKTsKLSAgICAgICAgICAgICAgICBT
eW1ib2xUYWJsZUVudHJ5IGVudHJ5ID0gZ2xvYmFsT2JqZWN0LT5zeW1ib2xUYWJsZSgpLT5nZXQo
bG9ja2VyLCB1aWQpOwotICAgICAgICAgICAgICAgIFZhcmlhYmxlV2F0Y2hwb2ludFNldCogd2F0
Y2hwb2ludFNldCA9IGVudHJ5LndhdGNocG9pbnRTZXQoKTsKLSAgICAgICAgICAgICAgICBKU1Zh
bHVlIGluZmVycmVkVmFsdWUgPQotICAgICAgICAgICAgICAgICAgICB3YXRjaHBvaW50U2V0ID8g
d2F0Y2hwb2ludFNldC0+aW5mZXJyZWRWYWx1ZSgpIDogSlNWYWx1ZSgpOwotICAgICAgICAgICAg
ICAgIGlmICghaW5mZXJyZWRWYWx1ZSkgewotICAgICAgICAgICAgICAgICAgICBTcGVjdWxhdGVk
VHlwZSBwcmVkaWN0aW9uID0gZ2V0UHJlZGljdGlvbigpOwotICAgICAgICAgICAgICAgICAgICBz
ZXQoVmlydHVhbFJlZ2lzdGVyKGRzdCksIGFkZFRvR3JhcGgoR2V0R2xvYmFsVmFyLCBPcEluZm8o
b3BlcmFuZCksIE9wSW5mbyhwcmVkaWN0aW9uKSkpOwotICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICBXYXRjaHBvaW50U2V0KiB3YXRjaHBvaW50U2V0OworICAgICAg
ICAgICAgICAgIFNjb3BlT2Zmc2V0IG9mZnNldDsKKyAgICAgICAgICAgICAgICB7CisgICAgICAg
ICAgICAgICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKGdsb2JhbE9iamVjdC0+c3lt
Ym9sVGFibGUoKS0+bV9sb2NrKTsKKyAgICAgICAgICAgICAgICAgICAgU3ltYm9sVGFibGVFbnRy
eSBlbnRyeSA9IGdsb2JhbE9iamVjdC0+c3ltYm9sVGFibGUoKS0+Z2V0KGxvY2tlciwgdWlkKTsK
KyAgICAgICAgICAgICAgICAgICAgd2F0Y2hwb2ludFNldCA9IGVudHJ5LndhdGNocG9pbnRTZXQo
KTsKKyAgICAgICAgICAgICAgICAgICAgb2Zmc2V0ID0gZW50cnkuc2NvcGVPZmZzZXQoKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKHdhdGNocG9pbnRTZXQgJiYgd2F0
Y2hwb2ludFNldC0+c3RhdGUoKSA9PSBJc1dhdGNoZWQpIHsKKyAgICAgICAgICAgICAgICAgICAg
Ly8gVGhpcyBoYXMgYSBmdW4gY29uY3VycmVuY3kgc3RvcnkuIFRoZXJlIGlzIHRoZSBwb3NzaWJp
bGl0eSBvZiBhIHJhY2UgaW4gdHdvCisgICAgICAgICAgICAgICAgICAgIC8vIGRpcmVjdGlvbnM6
CisgICAgICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgICAgIC8vIFdlIHNlZSB0
aGF0IHRoZSBzZXQgSXNXYXRjaGVkLCBidXQgaW4gdGhlIG1lYW50aW1lIGl0IGdldHMgaW52YWxp
ZGF0ZWQ6IHRoaXMgaXMKKyAgICAgICAgICAgICAgICAgICAgLy8gZmluZSBiZWNhdXNlIGlmIHdl
IHNhdyB0aGF0IGl0IElzV2F0Y2hlZCB0aGVuIHdlIGFkZCBhIHdhdGNocG9pbnQuIElmIGl0IGdl
dHMKKyAgICAgICAgICAgICAgICAgICAgLy8gaW52YWxpZGF0ZWQsIHRoZW4gdGhpcyBjb21waWxh
dGlvbiBpcyBpbnZhbGlkYXRlZC4gTm90ZSB0aGF0IGluIHRoZSBtZWFudGltZSB3ZQorICAgICAg
ICAgICAgICAgICAgICAvLyBtYXkgbG9hZCBhbiBhYnN1cmQgdmFsdWUgZnJvbSB0aGUgZ2xvYmFs
IG9iamVjdC4gSXQncyBmaW5lIHRvIGxvYWQgYW4gYWJzdXJkCisgICAgICAgICAgICAgICAgICAg
IC8vIHZhbHVlIGlmIHRoZSBjb21waWxhdGlvbiBpcyBpbnZhbGlkYXRlZCBhbnl3YXkuCisgICAg
ICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgICAgIC8vIFdlIHNlZSB0aGF0IHRo
ZSBzZXQgSXNXYXRjaGVkLCBidXQgdGhlIHZhbHVlIGlzbid0IHlldCBpbml0aWFsaXplZDogdGhp
cyBpc24ndAorICAgICAgICAgICAgICAgICAgICAvLyBwb3NzaWJsZSBiZWNhdXNlIG9mIHRoZSBv
cmRlcmluZyBvZiBvcGVyYXRpb25zLgorICAgICAgICAgICAgICAgICAgICAvLworICAgICAgICAg
ICAgICAgICAgICAvLyBIZXJlJ3MgaG93IHdlIG9yZGVyIG9wZXJhdGlvbnM6CisgICAgICAgICAg
ICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgICAgIC8vIE1haW4gdGhyZWFkIHN0b3JlcyB0
byB0aGUgZ2xvYmFsIG9iamVjdDogYWx3YXlzIHN0b3JlIGEgdmFsdWUgZmlyc3QsIGFuZCBvbmx5
CisgICAgICAgICAgICAgICAgICAgIC8vIGFmdGVyIHRoYXQgZG8gd2UgdG91Y2ggdGhlIHdhdGNo
cG9pbnQgc2V0LiBUaGVyZSBpcyBhIGZlbmNlIGluIHRoZSB0b3VjaCwgdGhhdAorICAgICAgICAg
ICAgICAgICAgICAvLyBlbnN1cmVzIHRoYXQgdGhlIHN0b3JlIHRvIHRoZSBnbG9iYWwgb2JqZWN0
IGFsd2F5cyBoYXBwZW5zIGJlZm9yZSB0aGUgdG91Y2ggb24gdGhlCisgICAgICAgICAgICAgICAg
ICAgIC8vIHNldC4KKyAgICAgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAgICAg
Ly8gQ29tcGlsYXRpb24gdGhyZWFkOiBhbHdheXMgZmlyc3QgbG9hZCB0aGUgc3RhdGUgb2YgdGhl
IHdhdGNocG9pbnQgc2V0LCBhbmQgdGhlbgorICAgICAgICAgICAgICAgICAgICAvLyBsb2FkIHRo
ZSB2YWx1ZS4gVGhlIFdhdGNocG9pbnRTZXQ6OnN0YXRlKCkgbWV0aG9kIGRvZXMgZmVuY2VzIGZv
ciB1cyB0byBlbnN1cmUKKyAgICAgICAgICAgICAgICAgICAgLy8gdGhhdCB0aGUgbG9hZCBvZiB0
aGUgc3RhdGUgaGFwcGVucyBiZWZvcmUgb3VyIGxvYWQgb2YgdGhlIHZhbHVlLgorICAgICAgICAg
ICAgICAgICAgICAvLworICAgICAgICAgICAgICAgICAgICAvLyBGaW5hbGl6aW5nIGNvbXBpbGF0
aW9uOiB0aGlzIGhhcHBlbnMgb24gdGhlIG1haW4gdGhyZWFkIGFuZCBzeW5jaHJvbm91c2x5IGNo
ZWNrcworICAgICAgICAgICAgICAgICAgICAvLyB2YWxpZGl0eSBvZiBhbGwgd2F0Y2hwb2ludCBz
ZXRzLgorICAgICAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgICAgICAvLyBXZSB3
aWxsIG9ubHkgcGVyZm9ybSBvcHRpbWl6YXRpb25zIGlmIHRoZSBsb2FkIG9mIHRoZSBzdGF0ZSB5
aWVsZHMgSXNXYXRjaGVkLiBUaGF0CisgICAgICAgICAgICAgICAgICAgIC8vIG1lYW5zIHRoYXQg
YXQgbGVhc3Qgb25lIHN0b3JlIHdvdWxkIGhhdmUgaGFwcGVuZWQgdG8gaW5pdGlhbGl6ZSB0aGUg
b3JpZ2luYWwgdmFsdWUKKyAgICAgICAgICAgICAgICAgICAgLy8gb2YgdGhlIHZhcmlhYmxlICh0
aGF0IGlzLCB0aGUgdmFsdWUgd2UnZCBsaWtlIHRvIGNvbnN0YW50IGZvbGQgdG8pLiBUaGVyZSBt
YXkgYmUKKyAgICAgICAgICAgICAgICAgICAgLy8gb3RoZXIgc3RvcmVzIHRoYXQgaGFwcGVuIGFm
dGVyIHRoYXQsIGJ1dCB0aG9zZSBzdG9yZXMgd2lsbCBpbnZhbGlkYXRlIHRoZQorICAgICAgICAg
ICAgICAgICAgICAvLyB3YXRjaHBvaW50IHNldCBhbmQgYWxzbyB0aGUgY29tcGlsYXRpb24uCisg
ICAgICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgICAgICBBU1NFUlQoYml0d2lzZV9j
YXN0PHVpbnRwdHJfdD4oJmdsb2JhbE9iamVjdC0+dmFyaWFibGVBdChvZmZzZXQpKSA9PSBvcGVy
YW5kKTsKKyAgICAgICAgICAgICAgICAgICAgSlNWYWx1ZSB2YWx1ZSA9IGdsb2JhbE9iamVjdC0+
dmFyaWFibGVBdChvZmZzZXQpLmdldCgpOworICAgICAgICAgICAgICAgICAgICBpZiAodmFsdWUp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgud2F0Y2hwb2ludHMoKS5hZGRMYXpp
bHkod2F0Y2hwb2ludFNldCk7CisgICAgICAgICAgICAgICAgICAgICAgICBzZXQoVmlydHVhbFJl
Z2lzdGVyKGRzdCksIHdlYWtKU0NvbnN0YW50KHZhbHVlKSk7CisgICAgICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAg
ICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBtX2dyYXBoLndhdGNocG9pbnRzKCkuYWRk
TGF6aWx5KHdhdGNocG9pbnRTZXQpOwotICAgICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0
ZXIoZHN0KSwgd2Vha0pTQ29uc3RhbnQoaW5mZXJyZWRWYWx1ZSkpOworICAgICAgICAgICAgICAg
IFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSBnZXRQcmVkaWN0aW9uKCk7CisgICAgICAgICAg
ICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rlcihkc3QpLCBhZGRUb0dyYXBoKEdldEdsb2JhbFZhciwg
T3BJbmZvKG9wZXJhbmQpLCBPcEluZm8ocHJlZGljdGlvbikpKTsKICAgICAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNhc2UgTG9jYWxDbG9zdXJlVmFyOgpA
QCAtMzUwOSw3ICszNTUxLDcgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNp
Z25lZAogICAgICAgICAgICAgICAgIHVpZCA9IG51bGxwdHI7CiAgICAgICAgICAgICAKICAgICAg
ICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbnVsbHB0cjsKLSAgICAgICAgICAgIFZhcmlh
YmxlV2F0Y2hwb2ludFNldCogd2F0Y2hwb2ludHMgPSBudWxscHRyOworICAgICAgICAgICAgV2F0
Y2hwb2ludFNldCogd2F0Y2hwb2ludHMgPSBudWxscHRyOwogICAgICAgICAgICAgdWludHB0cl90
IG9wZXJhbmQ7CiAgICAgICAgICAgICB7CiAgICAgICAgICAgICAgICAgQ29uY3VycmVudEpJVExv
Y2tlciBsb2NrZXIobV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLT5tX2xvY2spOwpA
QCAtMzU1Miw4ICszNTk0LDEwIEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5z
aWduZWQKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgTm9kZSogdmFsdWVOb2Rl
ID0gZ2V0KFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSkpOwogICAgICAgICAgICAgICAgIGFkZFRvR3Jh
cGgoUHV0R2xvYmFsVmFyLCBPcEluZm8ob3BlcmFuZCksIHZhbHVlTm9kZSk7Ci0gICAgICAgICAg
ICAgICAgaWYgKHdhdGNocG9pbnRzICYmIHdhdGNocG9pbnRzLT5zdGF0ZSgpICE9IElzSW52YWxp
ZGF0ZWQpCi0gICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoTm90aWZ5V3JpdGUsIE9wSW5m
byh3YXRjaHBvaW50cyksIHZhbHVlTm9kZSk7CisgICAgICAgICAgICAgICAgaWYgKHdhdGNocG9p
bnRzICYmIHdhdGNocG9pbnRzLT5zdGF0ZSgpICE9IElzSW52YWxpZGF0ZWQpIHsKKyAgICAgICAg
ICAgICAgICAgICAgLy8gTXVzdCBoYXBwZW4gYWZ0ZXIgdGhlIHN0b3JlLiBTZWUgY29tbWVudCBm
b3IgR2V0R2xvYmFsVmFyLgorICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKE5vdGlmeVdy
aXRlLCBPcEluZm8od2F0Y2hwb2ludHMpKTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAg
ICAgICAgLy8gS2VlcCBzY29wZSBhbGl2ZSB1bnRpbCBhZnRlciBwdXQuCiAgICAgICAgICAgICAg
ICAgYWRkVG9HcmFwaChQaGFudG9tLCBnZXQoVmlydHVhbFJlZ2lzdGVyKHNjb3BlKSkpOwogICAg
ICAgICAgICAgICAgIGJyZWFrOwpAQCAtMzU2NCwxMCArMzYwOCwxMiBAQCBib29sIEJ5dGVDb2Rl
UGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAgICAgTm9kZSogc2NvcGVO
b2RlID0gZ2V0KFZpcnR1YWxSZWdpc3RlcihzY29wZSkpOwogICAgICAgICAgICAgICAgIE5vZGUq
IHZhbHVlTm9kZSA9IGdldChWaXJ0dWFsUmVnaXN0ZXIodmFsdWUpKTsKIAotICAgICAgICAgICAg
ICAgIGlmICh3YXRjaHBvaW50cyAmJiB3YXRjaHBvaW50cy0+c3RhdGUoKSAhPSBJc0ludmFsaWRh
dGVkKQotICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKE5vdGlmeVdyaXRlLCBPcEluZm8o
d2F0Y2hwb2ludHMpLCB2YWx1ZU5vZGUpOwotCiAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChQ
dXRDbG9zdXJlVmFyLCBPcEluZm8ob3BlcmFuZCksIHNjb3BlTm9kZSwgdmFsdWVOb2RlKTsKKwor
ICAgICAgICAgICAgICAgIGlmICh3YXRjaHBvaW50cyAmJiB3YXRjaHBvaW50cy0+c3RhdGUoKSAh
PSBJc0ludmFsaWRhdGVkKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIE11c3QgaGFwcGVuIGFm
dGVyIHRoZSBzdG9yZS4gU2VlIGNvbW1lbnQgZm9yIEdldEdsb2JhbFZhci4KKyAgICAgICAgICAg
ICAgICAgICAgYWRkVG9HcmFwaChOb3RpZnlXcml0ZSwgT3BJbmZvKHdhdGNocG9pbnRzKSk7Cisg
ICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgY2FzZSBEeW5hbWljOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDYXBhYmlsaXRpZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcAkocmV2aXNpb24gMTgyNDk4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05
Niw3ICs5Niw2IEBAIENhcGFiaWxpdHlMZXZlbCBjYXBhYmlsaXR5TGV2ZWwoT3Bjb2RlSUQKICAg
ICAKICAgICBzd2l0Y2ggKG9wY29kZUlEKSB7CiAgICAgY2FzZSBvcF9lbnRlcjoKLSAgICBjYXNl
IG9wX3RvdWNoX2VudHJ5OgogICAgIGNhc2Ugb3BfdG9fdGhpczoKICAgICBjYXNlIG9wX2NoZWNr
X3RkejoKICAgICBjYXNlIG9wX2NyZWF0ZV90aGlzOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDbG9iYmVyaXplLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHJldmlzaW9uIDE4MjQ5OCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC04NTgsMTEg
Kzg1OCwxNyBAQCB2b2lkIGNsb2JiZXJpemUoR3JhcGgmIGdyYXBoLCBOb2RlKiBub2RlCiAgICAg
Y2FzZSBOZXdTdHJpbmdPYmplY3Q6CiAgICAgY2FzZSBQaGFudG9tTmV3T2JqZWN0OgogICAgIGNh
c2UgTWF0ZXJpYWxpemVOZXdPYmplY3Q6Ci0gICAgY2FzZSBOZXdGdW5jdGlvbjoKICAgICAgICAg
cmVhZChIZWFwT2JqZWN0Q291bnQpOwogICAgICAgICB3cml0ZShIZWFwT2JqZWN0Q291bnQpOwog
ICAgICAgICByZXR1cm47CiAgICAgICAgIAorICAgIGNhc2UgTmV3RnVuY3Rpb246CisgICAgICAg
IGlmIChub2RlLT5jYXN0T3BlcmFuZDxGdW5jdGlvbkV4ZWN1dGFibGUqPigpLT5zaW5nbGV0b25G
dW5jdGlvbigpLT5pc1N0aWxsVmFsaWQoKSkKKyAgICAgICAgICAgIHdyaXRlKFdhdGNocG9pbnRf
ZmlyZSk7CisgICAgICAgIHJlYWQoSGVhcE9iamVjdENvdW50KTsKKyAgICAgICAgd3JpdGUoSGVh
cE9iamVjdENvdW50KTsKKyAgICAgICAgcmV0dXJuOworCiAgICAgY2FzZSBSZWdFeHBFeGVjOgog
ICAgIGNhc2UgUmVnRXhwVGVzdDoKICAgICAgICAgcmVhZChSZWdFeHBTdGF0ZSk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMu
Y3BwCShyZXZpc2lvbiAxODI0OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rl
c2lyZWRXYXRjaHBvaW50cy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgot
ICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtNDQsNiArNDQsMTMgQEAg
dm9pZCBBcnJheUJ1ZmZlclZpZXdXYXRjaHBvaW50QWRhcHRvcjo6YQogICAgIGNvZGVCbG9jay0+
dm0oKS0+aGVhcC5hZGRSZWZlcmVuY2UobmV1dGVyaW5nV2F0Y2hwb2ludCwgdmlldy0+YnVmZmVy
KCkpOwogfQogCit2b2lkIEluZmVycmVkVmFsdWVBZGFwdG9yOjphZGQoCisgICAgQ29kZUJsb2Nr
KiBjb2RlQmxvY2ssIEluZmVycmVkVmFsdWUqIGluZmVycmVkVmFsdWUsIFdhdGNocG9pbnQqIHdh
dGNocG9pbnQpCit7CisgICAgY29kZUJsb2NrLT5hZGRDb25zdGFudChpbmZlcnJlZFZhbHVlKTsg
Ly8gRm9yIGNvbW1vbiB1c2VycywgaXQgZG9lc24ndCByZWFsbHkgbWF0dGVyIGlmIGl0J3Mgd2Vh
ayBvciBub3QuIElmIHJlZmVyZW5jZXMgdG8gaXQgZ28gYXdheSwgd2UgZ28gYXdheSwgdG9vLgor
ICAgIGluZmVycmVkVmFsdWUtPmFkZCh3YXRjaHBvaW50KTsKK30KKwogRGVzaXJlZFdhdGNocG9p
bnRzOjpEZXNpcmVkV2F0Y2hwb2ludHMoKSB7IH0KIERlc2lyZWRXYXRjaHBvaW50czo6fkRlc2ly
ZWRXYXRjaHBvaW50cygpIHsgfQogCkBAIC01Nyw2ICs2NCwxMSBAQCB2b2lkIERlc2lyZWRXYXRj
aHBvaW50czo6YWRkTGF6aWx5KElubGluCiAgICAgbV9pbmxpbmVTZXRzLmFkZExhemlseSgmc2V0
KTsKIH0KIAordm9pZCBEZXNpcmVkV2F0Y2hwb2ludHM6OmFkZExhemlseShJbmZlcnJlZFZhbHVl
KiBpbmZlcnJlZFZhbHVlKQoreworICAgIG1faW5mZXJyZWRWYWx1ZXMuYWRkTGF6aWx5KGluZmVy
cmVkVmFsdWUpOworfQorCiB2b2lkIERlc2lyZWRXYXRjaHBvaW50czo6YWRkTGF6aWx5KEpTQXJy
YXlCdWZmZXJWaWV3KiB2aWV3KQogewogICAgIG1fYnVmZmVyVmlld3MuYWRkTGF6aWx5KHZpZXcp
OwpAQCAtNzQsNiArODYsNyBAQCB2b2lkIERlc2lyZWRXYXRjaHBvaW50czo6cmVhbGx5QWRkKENv
ZGVCCiB7CiAgICAgbV9zZXRzLnJlYWxseUFkZChjb2RlQmxvY2ssIGNvbW1vbkRhdGEpOwogICAg
IG1faW5saW5lU2V0cy5yZWFsbHlBZGQoY29kZUJsb2NrLCBjb21tb25EYXRhKTsKKyAgICBtX2lu
ZmVycmVkVmFsdWVzLnJlYWxseUFkZChjb2RlQmxvY2ssIGNvbW1vbkRhdGEpOwogICAgIG1fYnVm
ZmVyVmlld3MucmVhbGx5QWRkKGNvZGVCbG9jaywgY29tbW9uRGF0YSk7CiB9CiAKQEAgLTgxLDYg
Kzk0LDcgQEAgYm9vbCBEZXNpcmVkV2F0Y2hwb2ludHM6OmFyZVN0aWxsVmFsaWQoKQogewogICAg
IHJldHVybiBtX3NldHMuYXJlU3RpbGxWYWxpZCgpCiAgICAgICAgICYmIG1faW5saW5lU2V0cy5h
cmVTdGlsbFZhbGlkKCkKKyAgICAgICAgJiYgbV9pbmZlcnJlZFZhbHVlcy5hcmVTdGlsbFZhbGlk
KCkKICAgICAgICAgJiYgbV9idWZmZXJWaWV3cy5hcmVTdGlsbFZhbGlkKCk7CiB9CiAKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMu
aAkocmV2aXNpb24gMTgyNDk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNp
cmVkV2F0Y2hwb2ludHMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAKIC8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMCw2ICszMCw3IEBACiAKICNp
bmNsdWRlICJDb2RlT3JpZ2luLmgiCiAjaW5jbHVkZSAiREZHQ29tbW9uRGF0YS5oIgorI2luY2x1
ZGUgIkluZmVycmVkVmFsdWUuaCIKICNpbmNsdWRlICJKU0FycmF5QnVmZmVyVmlldy5oIgogI2lu
Y2x1ZGUgIldhdGNocG9pbnQuaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgpAQCAtNTAsNiAr
NTEsMTQgQEAgc3RydWN0IEdlbmVyaWNTZXRBZGFwdG9yIHsKICAgICBzdGF0aWMgYm9vbCBoYXNC
ZWVuSW52YWxpZGF0ZWQoVCogc2V0KSB7IHJldHVybiBzZXQtPmhhc0JlZW5JbnZhbGlkYXRlZCgp
OyB9CiB9OwogCitzdHJ1Y3QgSW5mZXJyZWRWYWx1ZUFkYXB0b3IgeworICAgIHN0YXRpYyB2b2lk
IGFkZChDb2RlQmxvY2sqLCBJbmZlcnJlZFZhbHVlKiwgV2F0Y2hwb2ludCopOworICAgIHN0YXRp
YyBib29sIGhhc0JlZW5JbnZhbGlkYXRlZChJbmZlcnJlZFZhbHVlKiBpbmZlcnJlZFZhbHVlKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIGluZmVycmVkVmFsdWUtPmhhc0JlZW5JbnZhbGlkYXRlZCgp
OworICAgIH0KK307CisKIHN0cnVjdCBBcnJheUJ1ZmZlclZpZXdXYXRjaHBvaW50QWRhcHRvciB7
CiAgICAgc3RhdGljIHZvaWQgYWRkKENvZGVCbG9jayosIEpTQXJyYXlCdWZmZXJWaWV3KiwgV2F0
Y2hwb2ludCopOwogICAgIHN0YXRpYyBib29sIGhhc0JlZW5JbnZhbGlkYXRlZChKU0FycmF5QnVm
ZmVyVmlldyogdmlldykKQEAgLTExOSw2ICsxMjgsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgdm9p
ZCBhZGRMYXppbHkoV2F0Y2hwb2ludFNldCopOwogICAgIHZvaWQgYWRkTGF6aWx5KElubGluZVdh
dGNocG9pbnRTZXQmKTsKKyAgICB2b2lkIGFkZExhemlseShJbmZlcnJlZFZhbHVlKik7CiAgICAg
dm9pZCBhZGRMYXppbHkoSlNBcnJheUJ1ZmZlclZpZXcqKTsKICAgICAKICAgICBib29sIGNvbnNp
ZGVyKFN0cnVjdHVyZSopOwpAQCAtMTM1LDYgKzE0NSwxMCBAQCBwdWJsaWM6CiAgICAgewogICAg
ICAgICByZXR1cm4gbV9pbmxpbmVTZXRzLmlzV2F0Y2hlZCgmc2V0KTsKICAgICB9CisgICAgYm9v
bCBpc1dhdGNoZWQoSW5mZXJyZWRWYWx1ZSogaW5mZXJyZWRWYWx1ZSkKKyAgICB7CisgICAgICAg
IHJldHVybiBtX2luZmVycmVkVmFsdWVzLmlzV2F0Y2hlZChpbmZlcnJlZFZhbHVlKTsKKyAgICB9
CiAgICAgYm9vbCBpc1dhdGNoZWQoSlNBcnJheUJ1ZmZlclZpZXcqIHZpZXcpCiAgICAgewogICAg
ICAgICByZXR1cm4gbV9idWZmZXJWaWV3cy5pc1dhdGNoZWQodmlldyk7CkBAIC0xNDMsNiArMTU3
LDcgQEAgcHVibGljOgogcHJpdmF0ZToKICAgICBHZW5lcmljRGVzaXJlZFdhdGNocG9pbnRzPFdh
dGNocG9pbnRTZXQ+IG1fc2V0czsKICAgICBHZW5lcmljRGVzaXJlZFdhdGNocG9pbnRzPElubGlu
ZVdhdGNocG9pbnRTZXQ+IG1faW5saW5lU2V0czsKKyAgICBHZW5lcmljRGVzaXJlZFdhdGNocG9p
bnRzPEluZmVycmVkVmFsdWUsIEluZmVycmVkVmFsdWVBZGFwdG9yPiBtX2luZmVycmVkVmFsdWVz
OwogICAgIEdlbmVyaWNEZXNpcmVkV2F0Y2hwb2ludHM8SlNBcnJheUJ1ZmZlclZpZXcsIEFycmF5
QnVmZmVyVmlld1dhdGNocG9pbnRBZGFwdG9yPiBtX2J1ZmZlclZpZXdzOwogfTsKIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHJldmlzaW9uIDE4MjQ5OCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zMTEsOCArMzExLDggQEAgdm9pZCBHcmFwaDo6ZHVtcChQcmludFN0cmVhbSYgb3V0LCBjb25z
dAogICAgICAgICBvdXQucHJpbnQoY29tbWEsICJeIiwgbm9kZS0+cGhpKCktPmluZGV4KCkpOwog
ICAgIGlmIChub2RlLT5oYXNFeGVjdXRpb25Db3VudGVyKCkpCiAgICAgICAgIG91dC5wcmludChj
b21tYSwgUmF3UG9pbnRlcihub2RlLT5leGVjdXRpb25Db3VudGVyKCkpKTsKLSAgICBpZiAobm9k
ZS0+aGFzVmFyaWFibGVXYXRjaHBvaW50U2V0KCkpCi0gICAgICAgIG91dC5wcmludChjb21tYSwg
UmF3UG9pbnRlcihub2RlLT52YXJpYWJsZVdhdGNocG9pbnRTZXQoKSkpOworICAgIGlmIChub2Rl
LT5oYXNXYXRjaHBvaW50U2V0KCkpCisgICAgICAgIG91dC5wcmludChjb21tYSwgUmF3UG9pbnRl
cihub2RlLT53YXRjaHBvaW50U2V0KCkpKTsKICAgICBpZiAobm9kZS0+aGFzU3RvcmFnZVBvaW50
ZXIoKSkKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCBSYXdQb2ludGVyKG5vZGUtPnN0b3JhZ2VQ
b2ludGVyKCkpKTsKICAgICBpZiAobm9kZS0+aGFzT2JqZWN0TWF0ZXJpYWxpemF0aW9uRGF0YSgp
KQpAQCAtMTAyNiw2ICsxMDI2LDggQEAgSlNWYWx1ZSBHcmFwaDo6dHJ5R2V0Q29uc3RhbnRQcm9w
ZXJ0eShjbwogCiBKU1ZhbHVlIEdyYXBoOjp0cnlHZXRDb25zdGFudENsb3N1cmVWYXIoSlNWYWx1
ZSBiYXNlLCBTY29wZU9mZnNldCBvZmZzZXQpCiB7CisgICAgLy8gVGhpcyBoYXMgYW4gYXdlc29t
ZSBjb25jdXJyZW5jeSBzdG9yeS4gU2VlIGNvbW1lbnQgZm9yIEdldEdsb2JhbFZhciBpbiBCeXRl
Q29kZVBhcnNlci4KKyAgICAKICAgICBpZiAoIWJhc2UpCiAgICAgICAgIHJldHVybiBKU1ZhbHVl
KCk7CiAgICAgCkBAIC0xMDM0LDI0ICsxMDM2LDI4IEBAIEpTVmFsdWUgR3JhcGg6OnRyeUdldENv
bnN0YW50Q2xvc3VyZVZhcigKICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKICAgICAKICAgICBT
eW1ib2xUYWJsZSogc3ltYm9sVGFibGUgPSBhY3RpdmF0aW9uLT5zeW1ib2xUYWJsZSgpOwotICAg
IENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKHN5bWJvbFRhYmxlLT5tX2xvY2spOwotICAgIAot
ICAgIGlmIChzeW1ib2xUYWJsZS0+bV9mdW5jdGlvbkVudGVyZWRPbmNlLmhhc0JlZW5JbnZhbGlk
YXRlZCgpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwotICAgIAotICAgIFN5bWJvbFRhYmxl
RW50cnkqIGVudHJ5ID0gc3ltYm9sVGFibGUtPmVudHJ5Rm9yKGxvY2tlciwgb2Zmc2V0KTsKLSAg
ICBpZiAoIWVudHJ5KQotICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwotICAgIAotICAgIFZhcmlh
YmxlV2F0Y2hwb2ludFNldCogc2V0ID0gZW50cnktPndhdGNocG9pbnRTZXQoKTsKLSAgICBpZiAo
IXNldCkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKLSAgICAKLSAgICBKU1ZhbHVlIHZhbHVl
ID0gc2V0LT5pbmZlcnJlZFZhbHVlKCk7Ci0gICAgaWYgKCF2YWx1ZSkKLSAgICAgICAgcmV0dXJu
IEpTVmFsdWUoKTsKKyAgICBKU1ZhbHVlIHZhbHVlOworICAgIFdhdGNocG9pbnRTZXQqIHNldDsK
KyAgICB7CisgICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKHN5bWJvbFRhYmxlLT5t
X2xvY2spOworICAgICAgICAKKyAgICAgICAgU3ltYm9sVGFibGVFbnRyeSogZW50cnkgPSBzeW1i
b2xUYWJsZS0+ZW50cnlGb3IobG9ja2VyLCBvZmZzZXQpOworICAgICAgICBpZiAoIWVudHJ5KQor
ICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKKyAgICAgICAgCisgICAgICAgIHNldCA9IGVu
dHJ5LT53YXRjaHBvaW50U2V0KCk7CisgICAgICAgIGlmICghc2V0KQorICAgICAgICAgICAgcmV0
dXJuIEpTVmFsdWUoKTsKKyAgICAgICAgCisgICAgICAgIGlmIChzZXQtPnN0YXRlKCkgIT0gSXNX
YXRjaGVkKQorICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKKyAgICAgICAgCisgICAgICAg
IEFTU0VSVChlbnRyeS0+c2NvcGVPZmZzZXQoKSA9PSBvZmZzZXQpOworICAgICAgICB2YWx1ZSA9
IGFjdGl2YXRpb24tPnZhcmlhYmxlQXQob2Zmc2V0KS5nZXQoKTsKKyAgICAgICAgaWYgKCF2YWx1
ZSkKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CisgICAgfQogICAgIAotICAgIHdhdGNo
cG9pbnRzKCkuYWRkTGF6aWx5KHN5bWJvbFRhYmxlLT5tX2Z1bmN0aW9uRW50ZXJlZE9uY2UpOwog
ICAgIHdhdGNocG9pbnRzKCkuYWRkTGF6aWx5KHNldCk7CiAgICAgCiAgICAgcmV0dXJuIHZhbHVl
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDE4MjQ5OCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xMjE5LDE0ICsxMjE5LDE0IEBAIHN0cnVjdCBOb2RlIHsKICAgICAgICAgbV9vcEluZm8gPSBi
aXR3aXNlX2Nhc3Q8dWludHB0cl90Pih2YWx1ZSk7CiAgICAgfQogICAgIAotICAgIGJvb2wgaGFz
VmFyaWFibGVXYXRjaHBvaW50U2V0KCkKKyAgICBib29sIGhhc1dhdGNocG9pbnRTZXQoKQogICAg
IHsKICAgICAgICAgcmV0dXJuIG9wKCkgPT0gTm90aWZ5V3JpdGU7CiAgICAgfQogICAgIAotICAg
IFZhcmlhYmxlV2F0Y2hwb2ludFNldCogdmFyaWFibGVXYXRjaHBvaW50U2V0KCkKKyAgICBXYXRj
aHBvaW50U2V0KiB3YXRjaHBvaW50U2V0KCkKICAgICB7Ci0gICAgICAgIHJldHVybiByZWludGVy
cHJldF9jYXN0PFZhcmlhYmxlV2F0Y2hwb2ludFNldCo+KG1fb3BJbmZvKTsKKyAgICAgICAgcmV0
dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8V2F0Y2hwb2ludFNldCo+KG1fb3BJbmZvKTsKICAgICB9CiAg
ICAgCiAgICAgYm9vbCBoYXNTdG9yYWdlUG9pbnRlcigpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDE4MjQ5OCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTEwNzcsMTMgKzEwNzcsMTIgQEAgY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25Td2l0Y2hT
dHJpbgogICAgIHJldHVybiBzdGF0aWNfY2FzdDxjaGFyKj4oZXhlYy0+Y29kZUJsb2NrKCktPnN0
cmluZ1N3aXRjaEp1bXBUYWJsZSh0YWJsZUluZGV4KS5jdGlGb3JWYWx1ZShzdHJpbmctPnZhbHVl
KGV4ZWMpLmltcGwoKSkuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CiB9CiAKLXZvaWQgSklUX09QRVJB
VElPTiBvcGVyYXRpb25Ob3RpZnlXcml0ZShFeGVjU3RhdGUqIGV4ZWMsIFZhcmlhYmxlV2F0Y2hw
b2ludFNldCogc2V0LCBFbmNvZGVkSlNWYWx1ZSBlbmNvZGVkVmFsdWUpCit2b2lkIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uTm90aWZ5V3JpdGUoRXhlY1N0YXRlKiBleGVjLCBXYXRjaHBvaW50U2V0
KiBzZXQpCiB7CiAgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKICAgICBOYXRpdmVDYWxsRnJhbWVU
cmFjZXIgdHJhY2VyKCZ2bSwgZXhlYyk7Ci0gICAgSlNWYWx1ZSB2YWx1ZSA9IEpTVmFsdWU6OmRl
Y29kZShlbmNvZGVkVmFsdWUpOwogCi0gICAgc2V0LT5ub3RpZnlXcml0ZSh2bSwgdmFsdWUsICJF
eGVjdXRlZCBOb3RpZnlXcml0ZSIpOworICAgIHNldC0+dG91Y2goIkV4ZWN1dGVkIE5vdGlmeVdy
aXRlIik7CiB9CiAKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25UaHJvd1N0YWNrT3ZlcmZs
b3dGb3JWYXJhcmdzKEV4ZWNTdGF0ZSogZXhlYykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHT3BlcmF0aW9ucy5oCShyZXZpc2lvbiAxODI0OTgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMTI3LDcgKzEy
Nyw3IEBAIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25NYWtlUm9wZTIKIEpTQ2VsbCog
SklUX09QRVJBVElPTiBvcGVyYXRpb25NYWtlUm9wZTMoRXhlY1N0YXRlKiwgSlNTdHJpbmcqLCBK
U1N0cmluZyosIEpTU3RyaW5nKik7CiBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkZpbmRT
d2l0Y2hJbW1UYXJnZXRGb3JEb3VibGUoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUsIHNpemVf
dCB0YWJsZUluZGV4KTsKIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uU3dpdGNoU3RyaW5n
KEV4ZWNTdGF0ZSosIHNpemVfdCB0YWJsZUluZGV4LCBKU1N0cmluZyopOwotdm9pZCBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvbk5vdGlmeVdyaXRlKEV4ZWNTdGF0ZSosIFZhcmlhYmxlV2F0Y2hwb2lu
dFNldCosIEVuY29kZWRKU1ZhbHVlKTsKK3ZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25Ob3Rp
ZnlXcml0ZShFeGVjU3RhdGUqLCBXYXRjaHBvaW50U2V0Kik7CiB2b2lkIEpJVF9PUEVSQVRJT04g
b3BlcmF0aW9uVGhyb3dTdGFja092ZXJmbG93Rm9yVmFyYXJncyhFeGVjU3RhdGUqKSBXVEZfSU5U
RVJOQUw7CiBpbnQzMl90IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uU2l6ZU9mVmFyYXJncyhFeGVj
U3RhdGUqLCBFbmNvZGVkSlNWYWx1ZSBhcmd1bWVudHMsIGludDMyX3QgZmlyc3RWYXJBcmdPZmZz
ZXQpOwogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkxvYWRWYXJhcmdzKEV4ZWNTdGF0ZSos
IGludDMyX3QgZmlyc3RFbGVtZW50RGVzdCwgRW5jb2RlZEpTVmFsdWUgYXJndW1lbnRzLCBpbnQz
Ml90IG9mZnNldCwgaW50MzJfdCBsZW5ndGgsIGludDMyX3QgbWFuZGF0b3J5TWluaW11bSk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1BsYW4uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAJKHJldmlzaW9uIDE4MjQ5OCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTI2Nyw2ICsyNjcsNyBAQCBQbGFuOjpDb21waWxhdGlvblBhdGggUGxhbjo6Y29tcGlsZUlu
VGhyCiAgICAgcGVyZm9ybUNGQShkZmcpOwogICAgIHBlcmZvcm1Db25zdGFudEZvbGRpbmcoZGZn
KTsKICAgICBib29sIGNoYW5nZWQgPSBmYWxzZTsKKyAgICBjaGFuZ2VkIHw9IHBlcmZvcm1TdHJl
bmd0aFJlZHVjdGlvbihkZmcpOwogICAgIGNoYW5nZWQgfD0gcGVyZm9ybUNGR1NpbXBsaWZpY2F0
aW9uKGRmZyk7CiAgICAgY2hhbmdlZCB8PSBwZXJmb3JtTG9jYWxDU0UoZGZnKTsKICAgICAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VDMyXzY0LmNwcAkocmV2aXNpb24gMTgyNDk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzk4NywzMiAr
Mzk4Nyw3IEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSogbm9kZSkKICAgICB9
CiAKICAgICBjYXNlIE5vdGlmeVdyaXRlOiB7Ci0gICAgICAgIFZhcmlhYmxlV2F0Y2hwb2ludFNl
dCogc2V0ID0gbm9kZS0+dmFyaWFibGVXYXRjaHBvaW50U2V0KCk7Ci0gICAgCi0gICAgICAgIEpT
VmFsdWVPcGVyYW5kIHZhbHVlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKLSAgICAgICAgR1BSUmVn
IHZhbHVlVGFnR1BSID0gdmFsdWUudGFnR1BSKCk7Ci0gICAgICAgIEdQUlJlZyB2YWx1ZVBheWxv
YWRHUFIgPSB2YWx1ZS5wYXlsb2FkR1BSKCk7Ci0gICAgCi0gICAgICAgIEdQUlRlbXBvcmFyeSB0
ZW1wKHRoaXMpOwotICAgICAgICBHUFJSZWcgdGVtcEdQUiA9IHRlbXAuZ3ByKCk7Ci0gICAgCi0g
ICAgICAgIG1faml0LmxvYWQ4KHNldC0+YWRkcmVzc09mU3RhdGUoKSwgdGVtcEdQUik7Ci0gICAg
Ci0gICAgICAgIEpJVENvbXBpbGVyOjpKdW1wIGlzRG9uZSA9IG1faml0LmJyYW5jaDMyKEpJVENv
bXBpbGVyOjpFcXVhbCwgdGVtcEdQUiwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKTsKLSAg
ICAgICAgSklUQ29tcGlsZXI6Okp1bXBMaXN0IG5vdGlmeVNsb3c7Ci0gICAgICAgIG5vdGlmeVNs
b3cuYXBwZW5kKG1faml0LmJyYW5jaDMyKAotICAgICAgICAgICAgSklUQ29tcGlsZXI6Ok5vdEVx
dWFsLAotICAgICAgICAgICAgSklUQ29tcGlsZXI6OkFic29sdXRlQWRkcmVzcyhzZXQtPmFkZHJl
c3NPZkluZmVycmVkVmFsdWUoKS0+cGF5bG9hZFBvaW50ZXIoKSksCi0gICAgICAgICAgICB2YWx1
ZVBheWxvYWRHUFIpKTsKLSAgICAgICAgbm90aWZ5U2xvdy5hcHBlbmQobV9qaXQuYnJhbmNoMzIo
Ci0gICAgICAgICAgICBKSVRDb21waWxlcjo6Tm90RXF1YWwsIAotICAgICAgICAgICAgSklUQ29t
cGlsZXI6OkFic29sdXRlQWRkcmVzcyhzZXQtPmFkZHJlc3NPZkluZmVycmVkVmFsdWUoKS0+dGFn
UG9pbnRlcigpKSwKLSAgICAgICAgICAgIHZhbHVlVGFnR1BSKSk7Ci0gICAgICAgIGFkZFNsb3dQ
YXRoR2VuZXJhdG9yKAotICAgICAgICAgICAgc2xvd1BhdGhDYWxsKG5vdGlmeVNsb3csIHRoaXMs
IG9wZXJhdGlvbk5vdGlmeVdyaXRlLCBOb1Jlc3VsdCwgc2V0LCB2YWx1ZVRhZ0dQUiwgdmFsdWVQ
YXlsb2FkR1BSKSk7Ci0gICAgICAgIGlzRG9uZS5saW5rKCZtX2ppdCk7Ci0gICAgCi0gICAgICAg
IG5vUmVzdWx0KG5vZGUpOworICAgICAgICBjb21waWxlTm90aWZ5V3JpdGUobm9kZSk7CiAgICAg
ICAgIGJyZWFrOwogICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdT
cGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAxODI0OTgpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC00MDE5LDI2ICs0MDE5LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2Rl
KiBub2RlKQogICAgIH0KIAogICAgIGNhc2UgTm90aWZ5V3JpdGU6IHsKLSAgICAgICAgVmFyaWFi
bGVXYXRjaHBvaW50U2V0KiBzZXQgPSBub2RlLT52YXJpYWJsZVdhdGNocG9pbnRTZXQoKTsKLSAg
ICAKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwot
ICAgICAgICBHUFJSZWcgdmFsdWVHUFIgPSB2YWx1ZS5ncHIoKTsKLSAgICAKLSAgICAgICAgR1BS
VGVtcG9yYXJ5IHRlbXAodGhpcyk7Ci0gICAgICAgIEdQUlJlZyB0ZW1wR1BSID0gdGVtcC5ncHIo
KTsKLSAgICAKLSAgICAgICAgbV9qaXQubG9hZDgoc2V0LT5hZGRyZXNzT2ZTdGF0ZSgpLCB0ZW1w
R1BSKTsKLSAgICAKLSAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgaXNEb25lID0KLSAgICAgICAg
ICAgIG1faml0LmJyYW5jaDMyKEpJVENvbXBpbGVyOjpFcXVhbCwgdGVtcEdQUiwgVHJ1c3RlZElt
bTMyKElzSW52YWxpZGF0ZWQpKTsKLSAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgc2xvd0Nhc2Ug
PSBtX2ppdC5icmFuY2g2NChKSVRDb21waWxlcjo6Tm90RXF1YWwsCi0gICAgICAgICAgICBKSVRD
b21waWxlcjo6QWJzb2x1dGVBZGRyZXNzKHNldC0+YWRkcmVzc09mSW5mZXJyZWRWYWx1ZSgpKSwg
dmFsdWVHUFIpOwotICAgICAgICBpc0RvbmUubGluaygmbV9qaXQpOwotICAgIAotICAgICAgICBh
ZGRTbG93UGF0aEdlbmVyYXRvcigKLSAgICAgICAgICAgIHNsb3dQYXRoQ2FsbChzbG93Q2FzZSwg
dGhpcywgb3BlcmF0aW9uTm90aWZ5V3JpdGUsIE5vUmVzdWx0LCBzZXQsIHZhbHVlR1BSKSk7Ci0K
LSAgICAgICAgbm9SZXN1bHQobm9kZSk7CisgICAgICAgIGNvbXBpbGVOb3RpZnlXcml0ZShub2Rl
KTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkocmV2aXNpb24gMTgyNDk4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQzNjcsOCArNDM2NywxMyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlTmV3
RnVuY3Rpb24oCiAgICAgU3BlY3VsYXRlQ2VsbE9wZXJhbmQgc2NvcGUodGhpcywgbm9kZS0+Y2hp
bGQxKCkpOwogICAgIEdQUlJlZyBzY29wZUdQUiA9IHNjb3BlLmdwcigpOwogICAgIGZsdXNoUmVn
aXN0ZXJzKCk7Ci0gICAgY2FsbE9wZXJhdGlvbigKLSAgICAgICAgb3BlcmF0aW9uTmV3RnVuY3Rp
b24sIHJlc3VsdEdQUiwgc2NvcGVHUFIsIG5vZGUtPmNhc3RPcGVyYW5kPEZ1bmN0aW9uRXhlY3V0
YWJsZSo+KCkpOworICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IG5vZGUtPmNh
c3RPcGVyYW5kPEZ1bmN0aW9uRXhlY3V0YWJsZSo+KCk7CisgICAgSl9KSVRPcGVyYXRpb25fRUpz
Y0MgZnVuY3Rpb247CisgICAgaWYgKGV4ZWN1dGFibGUtPmZ1bmN0aW9uUmVhbGxvY2F0aW9uV2F0
Y2hwb2ludFNldCgpLmlzU3RpbGxWYWxpZCgpKQorICAgICAgICBmdW5jdGlvbiA9IG9wZXJhdGlv
bk5ld0Z1bmN0aW9uOworICAgIGVsc2UKKyAgICAgICAgZnVuY3Rpb24gPSBvcGVyYXRpb25OZXdG
dW5jdGlvbldpdGhJbnZhbGlkYXRlZFJlYWxsb2NhdGlvbldhdGNocG9pbnQ7CisgICAgY2FsbE9w
ZXJhdGlvbihmdW5jdGlvbiwgcmVzdWx0R1BSLCBzY29wZUdQUiwgZXhlY3V0YWJsZSk7CiAgICAg
Y2VsbFJlc3VsdChyZXN1bHRHUFIsIG5vZGUpOwogfQogCkBAIC00NzE0LDYgKzQ3MTksMjEgQEAg
dm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNyZWF0ZUNsb25lZAogICAgIGNlbGxSZXN1bHQo
cmVzdWx0R1BSLCBub2RlKTsKIH0KIAordm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU5vdGlm
eVdyaXRlKE5vZGUqIG5vZGUpCit7CisgICAgV2F0Y2hwb2ludFNldCogc2V0ID0gbm9kZS0+d2F0
Y2hwb2ludFNldCgpOworICAgIAorICAgIEpJVENvbXBpbGVyOjpKdW1wIHNsb3dDYXNlID0gbV9q
aXQuYnJhbmNoOCgKKyAgICAgICAgSklUQ29tcGlsZXI6Ok5vdEVxdWFsLAorICAgICAgICBKSVRD
b21waWxlcjo6QWJzb2x1dGVBZGRyZXNzKHNldC0+YWRkcmVzc09mU3RhdGUoKSksCisgICAgICAg
IFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSk7CisgICAgCisgICAgYWRkU2xvd1BhdGhHZW5l
cmF0b3IoCisgICAgICAgIHNsb3dQYXRoQ2FsbChzbG93Q2FzZSwgdGhpcywgb3BlcmF0aW9uTm90
aWZ5V3JpdGUsIE5vUmVzdWx0LCBzZXQpKTsKKyAgICAKKyAgICBub1Jlc3VsdChub2RlKTsKK30K
KwogYm9vbCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZVJlZ0V4cEV4ZWMoTm9kZSogbm9kZSkKIHsK
ICAgICB1bnNpZ25lZCBicmFuY2hJbmRleEluQmxvY2sgPSBkZXRlY3RQZWVwSG9sZUJyYW5jaCgp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQu
aAkocmV2aXNpb24gMTgyNDk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVj
dWxhdGl2ZUpJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xNDYwLDkgKzE0NjAsOSBAQCBwdWJsaWM6
CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7
CiAgICAgfQogCi0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0pJVE9wZXJh
dGlvbl9FVndzSiBvcGVyYXRpb24sIFZhcmlhYmxlV2F0Y2hwb2ludFNldCogd2F0Y2hwb2ludFNl
dCwgR1BSUmVnIGFyZykKKyAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfSklU
T3BlcmF0aW9uX0VXcyBvcGVyYXRpb24sIFdhdGNocG9pbnRTZXQqIHdhdGNocG9pbnRTZXQpCiAg
ICAgewotICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZElt
bVB0cih3YXRjaHBvaW50U2V0KSwgYXJnKTsKKyAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNX
aXRoRXhlY1N0YXRlKFRydXN0ZWRJbW1QdHIod2F0Y2hwb2ludFNldCkpOwogICAgICAgICByZXR1
cm4gYXBwZW5kQ2FsbChvcGVyYXRpb24pOwogICAgIH0KIApAQCAtMTc3NiwxMiArMTc3Niw2IEBA
IHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3Bl
cmF0aW9uKTsKICAgICB9CiAKLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZf
SklUT3BlcmF0aW9uX0VWd3NKIG9wZXJhdGlvbiwgVmFyaWFibGVXYXRjaHBvaW50U2V0KiB3YXRj
aHBvaW50U2V0LCBHUFJSZWcgYXJnVGFnLCBHUFJSZWcgYXJnUGF5bG9hZCkKLSAgICB7Ci0gICAg
ICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRyKHdhdGNo
cG9pbnRTZXQpLCBhcmdQYXlsb2FkLCBhcmdUYWcpOwotICAgICAgICByZXR1cm4gYXBwZW5kQ2Fs
bChvcGVyYXRpb24pOwotICAgIH0KLQogICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRp
b24oRF9KSVRPcGVyYXRpb25fRUogb3BlcmF0aW9uLCBGUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJn
MVRhZywgR1BSUmVnIGFyZzFQYXlsb2FkKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1
bWVudHNXaXRoRXhlY1N0YXRlKEVBQklfMzJCSVRfRFVNTVlfQVJHIGFyZzFQYXlsb2FkLCBhcmcx
VGFnKTsKQEAgLTIyMTMsNiArMjIwNyw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGNvbXBpbGVQdXRU
b0FyZ3VtZW50cyhOb2RlKik7CiAgICAgdm9pZCBjb21waWxlQ3JlYXRlU2NvcGVkQXJndW1lbnRz
KE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVDcmVhdGVDbG9uZWRBcmd1bWVudHMoTm9kZSopOwor
ICAgIHZvaWQgY29tcGlsZU5vdGlmeVdyaXRlKE5vZGUqKTsKICAgICBib29sIGNvbXBpbGVSZWdF
eHBFeGVjKE5vZGUqKTsKICAgICAKICAgICBKSVRDb21waWxlcjo6SnVtcCBicmFuY2hJc0NlbGwo
SlNWYWx1ZVJlZ3MpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJhcmdz
Rm9yd2FyZGluZ1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2UuY3BwCShyZXZpc2lvbiAxODI0OTgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiREZHQ2xvYmJlcml6ZS5o
IgogI2luY2x1ZGUgIkRGR0dyYXBoLmgiCiAjaW5jbHVkZSAiREZHUGhhc2UuaCIKKyNpbmNsdWRl
ICJKU0NJbmxpbmVzLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbnRyaW5zaWNSZXBvc2l0b3J5LmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbnRyaW5zaWNSZXBvc2l0
b3J5LmgJKHJldmlzaW9uIDE4MjQ5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
SW50cmluc2ljUmVwb3NpdG9yeS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDYsNiArMTA2LDcgQEAg
bmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewogICAgIG1hY3JvKFZfSklUT3BlcmF0aW9u
X0VDLCBmdW5jdGlvblR5cGUodm9pZFR5cGUsIGludFB0ciwgaW50UHRyKSkgXAogICAgIG1hY3Jv
KFZfSklUT3BlcmF0aW9uX0VDYiwgZnVuY3Rpb25UeXBlKHZvaWRUeXBlLCBpbnRQdHIsIGludFB0
cikpIFwKICAgICBtYWNybyhWX0pJVE9wZXJhdGlvbl9FVndzSiwgZnVuY3Rpb25UeXBlKHZvaWRU
eXBlLCBpbnRQdHIsIGludFB0ciwgaW50NjQpKSBcCisgICAgbWFjcm8oVl9KSVRPcGVyYXRpb25f
RVdzLCBmdW5jdGlvblR5cGUodm9pZFR5cGUsIGludFB0ciwgaW50UHRyKSkgXAogICAgIG1hY3Jv
KFZfSklUT3BlcmF0aW9uX0VaSlpaWiwgZnVuY3Rpb25UeXBlKHZvaWRUeXBlLCBpbnRQdHIsIGlu
dDMyLCBpbnQ2NCwgaW50MzIsIGludDMyLCBpbnQzMikpIFwKICAgICBtYWNybyhWX0pJVE9wZXJh
dGlvbl9KLCBmdW5jdGlvblR5cGUodm9pZFR5cGUsIGludDY0KSkgXAogICAgIG1hY3JvKFZfSklU
T3BlcmF0aW9uX1osIGZ1bmN0aW9uVHlwZSh2b2lkVHlwZSwgaW50MzIpKSBcCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkocmV2aXNp
b24gMTgyNDk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExW
TS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3ODMsMjkgKzM3ODMsMTkgQEAgcHJpdmF0ZToKICAg
ICAKICAgICB2b2lkIGNvbXBpbGVOb3RpZnlXcml0ZSgpCiAgICAgewotICAgICAgICBWYXJpYWJs
ZVdhdGNocG9pbnRTZXQqIHNldCA9IG1fbm9kZS0+dmFyaWFibGVXYXRjaHBvaW50U2V0KCk7Ci0g
ICAgICAgIAotICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQx
KCkpOworICAgICAgICBXYXRjaHBvaW50U2V0KiBzZXQgPSBtX25vZGUtPndhdGNocG9pbnRTZXQo
KTsKICAgICAgICAgCiAgICAgICAgIExCYXNpY0Jsb2NrIGlzTm90SW52YWxpZGF0ZWQgPSBGVExf
TkVXX0JMT0NLKG1fb3V0LCAoIk5vdGlmeVdyaXRlIG5vdCBpbnZhbGlkYXRlZCBjYXNlIikpOwot
ICAgICAgICBMQmFzaWNCbG9jayBub3RpZnlTbG93ID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJO
b3RpZnlXcml0ZSBub3RpZnkgc2xvdyBjYXNlIikpOwogICAgICAgICBMQmFzaWNCbG9jayBjb250
aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIk5vdGlmeVdyaXRlIGNvbnRpbnVhdGlv
biIpKTsKICAgICAgICAgCiAgICAgICAgIExWYWx1ZSBzdGF0ZSA9IG1fb3V0LmxvYWQ4KG1fb3V0
LmFic29sdXRlKHNldC0+YWRkcmVzc09mU3RhdGUoKSkpOwotICAgICAgICAKICAgICAgICAgbV9v
dXQuYnJhbmNoKAogICAgICAgICAgICAgbV9vdXQuZXF1YWwoc3RhdGUsIG1fb3V0LmNvbnN0SW50
OChJc0ludmFsaWRhdGVkKSksCiAgICAgICAgICAgICB1c3VhbGx5KGNvbnRpbnVhdGlvbiksIHJh
cmVseShpc05vdEludmFsaWRhdGVkKSk7CiAgICAgICAgIAotICAgICAgICBMQmFzaWNCbG9jayBs
YXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGlzTm90SW52YWxpZGF0ZWQsIG5vdGlmeVNsb3cpOwot
Ci0gICAgICAgIG1fb3V0LmJyYW5jaCgKLSAgICAgICAgICAgIG1fb3V0LmVxdWFsKHZhbHVlLCBt
X291dC5sb2FkNjQobV9vdXQuYWJzb2x1dGUoc2V0LT5hZGRyZXNzT2ZJbmZlcnJlZFZhbHVlKCkp
KSksCi0gICAgICAgICAgICB1bnN1cmUoY29udGludWF0aW9uKSwgdW5zdXJlKG5vdGlmeVNsb3cp
KTsKLQotICAgICAgICBtX291dC5hcHBlbmRUbyhub3RpZnlTbG93LCBjb250aW51YXRpb24pOwor
ICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGlzTm90SW52YWxp
ZGF0ZWQsIGNvbnRpbnVhdGlvbik7CiAKLSAgICAgICAgdm1DYWxsKG1fb3V0Lm9wZXJhdGlvbihv
cGVyYXRpb25Ob3RpZnlXcml0ZSksIG1fY2FsbEZyYW1lLCBtX291dC5jb25zdEludFB0cihzZXQp
LCB2YWx1ZSk7CisgICAgICAgIHZtQ2FsbChtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uTm90aWZ5
V3JpdGUpLCBtX2NhbGxGcmFtZSwgbV9vdXQuY29uc3RJbnRQdHIoc2V0KSk7CiAgICAgICAgIG1f
b3V0Lmp1bXAoY29udGludWF0aW9uKTsKICAgICAgICAgCiAgICAgICAgIG1fb3V0LmFwcGVuZFRv
KGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2lu
dGVycHJldGVyL0ludGVycHJldGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCShyZXZpc2lvbiAxODI0OTgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC04OSw2ICs4OSw0NyBAQCB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1lc3Bh
Y2UgSlNDIHsKIAorU3RyaW5nIFN0YWNrRnJhbWU6OmZyaWVuZGx5U291cmNlVVJMKCkgY29uc3QK
K3sKKyAgICBTdHJpbmcgdHJhY2VMaW5lOworICAgIAorICAgIHN3aXRjaCAoY29kZVR5cGUpIHsK
KyAgICBjYXNlIFN0YWNrRnJhbWVFdmFsQ29kZToKKyAgICBjYXNlIFN0YWNrRnJhbWVGdW5jdGlv
bkNvZGU6CisgICAgY2FzZSBTdGFja0ZyYW1lR2xvYmFsQ29kZToKKyAgICAgICAgaWYgKCFzb3Vy
Y2VVUkwuaXNFbXB0eSgpKQorICAgICAgICAgICAgdHJhY2VMaW5lID0gc291cmNlVVJMLmltcGwo
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTdGFja0ZyYW1lTmF0aXZlQ29kZToKKyAgICAg
ICAgdHJhY2VMaW5lID0gIltuYXRpdmUgY29kZV0iOworICAgICAgICBicmVhazsKKyAgICB9Cisg
ICAgcmV0dXJuIHRyYWNlTGluZS5pc051bGwoKSA/IGVtcHR5U3RyaW5nKCkgOiB0cmFjZUxpbmU7
Cit9CisKK1N0cmluZyBTdGFja0ZyYW1lOjpmcmllbmRseUZ1bmN0aW9uTmFtZShDYWxsRnJhbWUq
IGNhbGxGcmFtZSkgY29uc3QKK3sKKyAgICBTdHJpbmcgdHJhY2VMaW5lOworICAgIEpTT2JqZWN0
KiBzdGFja0ZyYW1lQ2FsbGVlID0gY2FsbGVlLmdldCgpOworCisgICAgc3dpdGNoIChjb2RlVHlw
ZSkgeworICAgIGNhc2UgU3RhY2tGcmFtZUV2YWxDb2RlOgorICAgICAgICB0cmFjZUxpbmUgPSAi
ZXZhbCBjb2RlIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTdGFja0ZyYW1lTmF0aXZlQ29k
ZToKKyAgICAgICAgaWYgKGNhbGxlZSkKKyAgICAgICAgICAgIHRyYWNlTGluZSA9IGdldENhbGN1
bGF0ZWREaXNwbGF5TmFtZShjYWxsRnJhbWUsIHN0YWNrRnJhbWVDYWxsZWUpLmltcGwoKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBTdGFja0ZyYW1lRnVuY3Rpb25Db2RlOgorICAgICAgICB0
cmFjZUxpbmUgPSBnZXRDYWxjdWxhdGVkRGlzcGxheU5hbWUoY2FsbEZyYW1lLCBzdGFja0ZyYW1l
Q2FsbGVlKS5pbXBsKCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgU3RhY2tGcmFtZUdsb2Jh
bENvZGU6CisgICAgICAgIHRyYWNlTGluZSA9ICJnbG9iYWwgY29kZSI7CisgICAgICAgIGJyZWFr
OworICAgIH0KKyAgICByZXR1cm4gdHJhY2VMaW5lLmlzTnVsbCgpID8gZW1wdHlTdHJpbmcoKSA6
IHRyYWNlTGluZTsKK30KKwogSlNWYWx1ZSBldmFsKENhbGxGcmFtZSogY2FsbEZyYW1lKQogewog
ICAgIGlmICghY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkpCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaAkocmV2aXNpb24gMTgyNDk4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTkwLDQ1ICs5MCw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB1
bnNpZ25lZCBieXRlY29kZU9mZnNldDsKICAgICAgICAgU3RyaW5nIHNvdXJjZVVSTDsKICAgICAg
ICAgSlNfRVhQT1JUX1BSSVZBVEUgU3RyaW5nIHRvU3RyaW5nKENhbGxGcmFtZSopOwotICAgICAg
ICBTdHJpbmcgZnJpZW5kbHlTb3VyY2VVUkwoKSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAg
ICBTdHJpbmcgdHJhY2VMaW5lOwotCi0gICAgICAgICAgICBzd2l0Y2ggKGNvZGVUeXBlKSB7Ci0g
ICAgICAgICAgICBjYXNlIFN0YWNrRnJhbWVFdmFsQ29kZToKLSAgICAgICAgICAgIGNhc2UgU3Rh
Y2tGcmFtZUZ1bmN0aW9uQ29kZToKLSAgICAgICAgICAgIGNhc2UgU3RhY2tGcmFtZUdsb2JhbENv
ZGU6Ci0gICAgICAgICAgICAgICAgaWYgKCFzb3VyY2VVUkwuaXNFbXB0eSgpKQotICAgICAgICAg
ICAgICAgICAgICB0cmFjZUxpbmUgPSBzb3VyY2VVUkwuaW1wbCgpOwotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgY2FzZSBTdGFja0ZyYW1lTmF0aXZlQ29kZToKLSAgICAgICAg
ICAgICAgICB0cmFjZUxpbmUgPSAiW25hdGl2ZSBjb2RlXSI7Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gdHJhY2VMaW5lLmlzTnVsbCgp
ID8gZW1wdHlTdHJpbmcoKSA6IHRyYWNlTGluZTsKLSAgICAgICAgfQotICAgICAgICBTdHJpbmcg
ZnJpZW5kbHlGdW5jdGlvbk5hbWUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpIGNvbnN0Ci0gICAgICAg
IHsKLSAgICAgICAgICAgIFN0cmluZyB0cmFjZUxpbmU7Ci0gICAgICAgICAgICBKU09iamVjdCog
c3RhY2tGcmFtZUNhbGxlZSA9IGNhbGxlZS5nZXQoKTsKLQotICAgICAgICAgICAgc3dpdGNoIChj
b2RlVHlwZSkgewotICAgICAgICAgICAgY2FzZSBTdGFja0ZyYW1lRXZhbENvZGU6Ci0gICAgICAg
ICAgICAgICAgdHJhY2VMaW5lID0gImV2YWwgY29kZSI7Ci0gICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICBjYXNlIFN0YWNrRnJhbWVOYXRpdmVDb2RlOgotICAgICAgICAgICAgICAg
IGlmIChjYWxsZWUpCi0gICAgICAgICAgICAgICAgICAgIHRyYWNlTGluZSA9IGdldENhbGN1bGF0
ZWREaXNwbGF5TmFtZShjYWxsRnJhbWUsIHN0YWNrRnJhbWVDYWxsZWUpLmltcGwoKTsKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgU3RhY2tGcmFtZUZ1bmN0aW9uQ29k
ZToKLSAgICAgICAgICAgICAgICB0cmFjZUxpbmUgPSBnZXRDYWxjdWxhdGVkRGlzcGxheU5hbWUo
Y2FsbEZyYW1lLCBzdGFja0ZyYW1lQ2FsbGVlKS5pbXBsKCk7Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICBjYXNlIFN0YWNrRnJhbWVHbG9iYWxDb2RlOgotICAgICAgICAgICAg
ICAgIHRyYWNlTGluZSA9ICJnbG9iYWwgY29kZSI7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gdHJhY2VMaW5lLmlzTnVsbCgpID8gZW1w
dHlTdHJpbmcoKSA6IHRyYWNlTGluZTsKLSAgICAgICAgfQorICAgICAgICBTdHJpbmcgZnJpZW5k
bHlTb3VyY2VVUkwoKSBjb25zdDsKKyAgICAgICAgU3RyaW5nIGZyaWVuZGx5RnVuY3Rpb25OYW1l
KENhbGxGcmFtZSopIGNvbnN0OwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGNvbXB1
dGVMaW5lQW5kQ29sdW1uKHVuc2lnbmVkJiBsaW5lLCB1bnNpZ25lZCYgY29sdW1uKTsKIAogICAg
IHByaXZhdGU6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCShyZXZpc2lvbiAxODI0
OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEwNSw2ICsxMDUsMTQgQEAgdm9pZCBKSVQ6OmVtaXRFbnRlck9wdGltaXphdGlvbkNoZWNr
KCkKIH0KICNlbmRpZgogCit2b2lkIEpJVDo6ZW1pdE5vdGlmeVdyaXRlKFdhdGNocG9pbnRTZXQq
IHNldCkKK3sKKyAgICBpZiAoIXNldCB8fCBzZXQtPnN0YXRlKCkgPT0gSXNJbnZhbGlkYXRlZCkK
KyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoTm90RXF1YWws
IEFic29sdXRlQWRkcmVzcyhzZXQtPmFkZHJlc3NPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJ
bnZhbGlkYXRlZCkpKTsKK30KKwogdm9pZCBKSVQ6OmFzc2VydFN0YWNrUG9pbnRlck9mZnNldCgp
CiB7CiAgICAgaWYgKEFTU0VSVF9ESVNBQkxFRCkKQEAgLTE4OSw3ICsxOTcsNiBAQCB2b2lkIEpJ
VDo6cHJpdmF0ZUNvbXBpbGVNYWluUGFzcygpCiAgICAgICAgIERFRklORV9TTE9XX09QKGlzX29i
amVjdF9vcl9udWxsKQogICAgICAgICBERUZJTkVfU0xPV19PUCh0eXBlb2YpCiAKLSAgICAgICAg
REVGSU5FX09QKG9wX3RvdWNoX2VudHJ5KQogICAgICAgICBERUZJTkVfT1Aob3BfYWRkKQogICAg
ICAgICBERUZJTkVfT1Aob3BfYml0YW5kKQogICAgICAgICBERUZJTkVfT1Aob3BfYml0b3IpCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHJldmlzaW9uIDE4MjQ5OCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1Nyw3ICs0NTcsNiBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgCiAgICAgICAgIHZvaWQgYXNzZXJ0U3RhY2tQb2lu
dGVyT2Zmc2V0KCk7CiAKLSAgICAgICAgdm9pZCBlbWl0X29wX3RvdWNoX2VudHJ5KEluc3RydWN0
aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9hZGQoSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAg
dm9pZCBlbWl0X29wX2JpdGFuZChJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3Bf
Yml0b3IoSW5zdHJ1Y3Rpb24qKTsKQEAgLTY0MCwxMyArNjM5LDkgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIHZvaWQgZW1pdEdldEdsb2JhbFZhcih1aW50cHRyX3Qgb3BlcmFuZCk7CiAgICAg
ICAgIHZvaWQgZW1pdEdldENsb3N1cmVWYXIoaW50IHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCk7
CiAgICAgICAgIHZvaWQgZW1pdFB1dEdsb2JhbFByb3BlcnR5KHVpbnRwdHJfdCogb3BlcmFuZFNs
b3QsIGludCB2YWx1ZSk7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgdm9pZCBlbWl0Tm90
aWZ5V3JpdGUoUmVnaXN0ZXJJRCB2YWx1ZSwgUmVnaXN0ZXJJRCBzY3JhdGNoLCBWYXJpYWJsZVdh
dGNocG9pbnRTZXQqKTsKLSNlbHNlCi0gICAgICAgIHZvaWQgZW1pdE5vdGlmeVdyaXRlKFJlZ2lz
dGVySUQgdGFnLCBSZWdpc3RlcklEIHBheWxvYWQsIFJlZ2lzdGVySUQgc2NyYXRjaCwgVmFyaWFi
bGVXYXRjaHBvaW50U2V0Kik7Ci0jZW5kaWYKLSAgICAgICAgdm9pZCBlbWl0UHV0R2xvYmFsVmFy
KHVpbnRwdHJfdCBvcGVyYW5kLCBpbnQgdmFsdWUsIFZhcmlhYmxlV2F0Y2hwb2ludFNldCopOwot
ICAgICAgICB2b2lkIGVtaXRQdXRDbG9zdXJlVmFyKGludCBzY29wZSwgdWludHB0cl90IG9wZXJh
bmQsIGludCB2YWx1ZSwgVmFyaWFibGVXYXRjaHBvaW50U2V0Kik7CisgICAgICAgIHZvaWQgZW1p
dE5vdGlmeVdyaXRlKFdhdGNocG9pbnRTZXQqKTsKKyAgICAgICAgdm9pZCBlbWl0UHV0R2xvYmFs
VmFyKHVpbnRwdHJfdCBvcGVyYW5kLCBpbnQgdmFsdWUsIFdhdGNocG9pbnRTZXQqKTsKKyAgICAg
ICAgdm9pZCBlbWl0UHV0Q2xvc3VyZVZhcihpbnQgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kLCBp
bnQgdmFsdWUsIFdhdGNocG9pbnRTZXQqKTsKIAogICAgICAgICB2b2lkIGVtaXRJbml0UmVnaXN0
ZXIoaW50IGRzdCk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rl
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVz
LmNwcAkocmV2aXNpb24gMTgyNDk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRP
cGNvZGVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODc5LDE1ICs4NzksNiBAQCB2b2lkIEpJVDo6
ZW1pdFNsb3dfb3BfdG9fbnVtYmVyKEluc3RydWN0CiAKICNlbmRpZiAvLyBVU0UoSlNWQUxVRTY0
KQogCi12b2lkIEpJVDo6ZW1pdF9vcF90b3VjaF9lbnRyeShJbnN0cnVjdGlvbiogY3VycmVudElu
c3RydWN0aW9uKQotewotICAgIGlmIChtX2NvZGVCbG9jay0+c3ltYm9sVGFibGUoKS0+bV9mdW5j
dGlvbkVudGVyZWRPbmNlLmhhc0JlZW5JbnZhbGlkYXRlZCgpKQotICAgICAgICByZXR1cm47Ci0g
ICAgCi0gICAgSklUU2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1
Y3Rpb24sIHNsb3dfcGF0aF90b3VjaF9lbnRyeSk7Ci0gICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsK
LX0KLQogdm9pZCBKSVQ6OmVtaXRfb3BfbG9vcF9oaW50KEluc3RydWN0aW9uKikKIHsKICAgICAv
LyBFbWl0IHRoZSBKSVQgb3B0aW1pemF0aW9uIGNoZWNrOiAKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMTgyNDk4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtOTUyLDYgKzk1MiwxNCBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlv
bk5lCiAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU0Z1bmN0aW9uOjpjcmVhdGUodm0sIHN0
YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGZ1bmN0aW9uRXhlY3V0YWJsZSksIHNjb3Bl
KSk7CiB9CiAKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3RnVuY3Rp
b25XaXRoSW52YWxpZGF0ZWRSZWFsbG9jYXRpb25XYXRjaHBvaW50KEV4ZWNTdGF0ZSogZXhlYywg
SlNTY29wZSogc2NvcGUsIEpTQ2VsbCogZnVuY3Rpb25FeGVjdXRhYmxlKQoreworICAgIEFTU0VS
VChmdW5jdGlvbkV4ZWN1dGFibGUtPmluaGVyaXRzKEZ1bmN0aW9uRXhlY3V0YWJsZTo6aW5mbygp
KSk7CisgICAgVk0mIHZtID0gZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIg
dHJhY2VyKCZ2bSwgZXhlYyk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU0Z1bmN0aW9u
OjpjcmVhdGVXaXRoSW52YWxpZGF0ZWRSZWFsbG9jYXRpb25XYXRjaHBvaW50KHZtLCBzdGF0aWNf
Y2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihmdW5jdGlvbkV4ZWN1dGFibGUpLCBzY29wZSkpOwor
fQorCiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3T2JqZWN0KEV4ZWNTdGF0ZSog
ZXhlYywgU3RydWN0dXJlKiBzdHJ1Y3R1cmUpCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7
CkBAIC0xNzIyLDggKzE3MzAsOCBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0VG9T
Y29wZShFCiAgICAgaWYgKG1vZGVBbmRUeXBlLnR5cGUoKSA9PSBMb2NhbENsb3N1cmVWYXIpIHsK
ICAgICAgICAgSlNMZXhpY2FsRW52aXJvbm1lbnQqIGVudmlyb25tZW50ID0ganNDYXN0PEpTTGV4
aWNhbEVudmlyb25tZW50Kj4oc2NvcGUpOwogICAgICAgICBlbnZpcm9ubWVudC0+dmFyaWFibGVB
dChTY29wZU9mZnNldChwY1s2XS51Lm9wZXJhbmQpKS5zZXQodm0sIGVudmlyb25tZW50LCB2YWx1
ZSk7Ci0gICAgICAgIGlmIChWYXJpYWJsZVdhdGNocG9pbnRTZXQqIHNldCA9IHBjWzVdLnUud2F0
Y2hwb2ludFNldCkKLSAgICAgICAgICAgIHNldC0+bm90aWZ5V3JpdGUodm0sIHZhbHVlLCAiRXhl
Y3V0ZWQgb3BfcHV0X3Njb3BlPExvY2FsQ2xvc3VyZVZhcj4iKTsKKyAgICAgICAgaWYgKFdhdGNo
cG9pbnRTZXQqIHNldCA9IHBjWzVdLnUud2F0Y2hwb2ludFNldCkKKyAgICAgICAgICAgIHNldC0+
dG91Y2goIkV4ZWN1dGVkIG9wX3B1dF9zY29wZTxMb2NhbENsb3N1cmVWYXI+Iik7CiAgICAgICAg
IHJldHVybjsKICAgICB9CiAgICAgaWYgKG1vZGVBbmRUeXBlLm1vZGUoKSA9PSBUaHJvd0lmTm90
Rm91bmQgJiYgIXNjb3BlLT5oYXNQcm9wZXJ0eShleGVjLCBpZGVudCkpIHsKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCShyZXZpc2lvbiAxODI0OTgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5
KQpAQCAtMzcsNyArMzcsNiBAQAogI2luY2x1ZGUgIlB1dEtpbmQuaCIKICNpbmNsdWRlICJTcGls
bFJlZ2lzdGVyc01vZGUuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVTdHViSW5mby5oIgotI2luY2x1
ZGUgIlZhcmlhYmxlV2F0Y2hwb2ludFNldC5oIgogCiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtODUs
NyArODQsNyBAQCBleHRlcm4gIkMiIHsKICAgICBTeW10YWI6IFN5bWJvbFRhYmxlKgogICAgIFY6
IHZvaWQKICAgICBWbTogVk0qCi0gICAgVndzOiBWYXJpYWJsZVdhdGNocG9pbnRTZXQqCisgICAg
V3M6IFdhdGNocG9pbnRTZXQqCiAgICAgWjogaW50MzJfdAogKi8KIApAQCAtMTkxLDcgKzE5MCw3
IEBAIHR5cGVkZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgqVl9KSVRPcGVyYXQKIHR5cGVkZWYgdm9p
ZCBKSVRfT1BFUkFUSU9OICgqVl9KSVRPcGVyYXRpb25fRVBjKShFeGVjU3RhdGUqLCBJbnN0cnVj
dGlvbiopOwogdHlwZWRlZiB2b2lkIEpJVF9PUEVSQVRJT04gKCpWX0pJVE9wZXJhdGlvbl9FUFpK
KShFeGVjU3RhdGUqLCB2b2lkKiwgaW50MzJfdCwgRW5jb2RlZEpTVmFsdWUpOwogdHlwZWRlZiB2
b2lkIEpJVF9PUEVSQVRJT04gKCpWX0pJVE9wZXJhdGlvbl9FU3NpSkpJKShFeGVjU3RhdGUqLCBT
dHJ1Y3R1cmVTdHViSW5mbyosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgU3RyaW5n
SW1wbCopOwotdHlwZWRlZiB2b2lkIEpJVF9PUEVSQVRJT04gKCpWX0pJVE9wZXJhdGlvbl9FVndz
SikoRXhlY1N0YXRlKiwgVmFyaWFibGVXYXRjaHBvaW50U2V0KiwgRW5jb2RlZEpTVmFsdWUpOwor
dHlwZWRlZiB2b2lkIEpJVF9PUEVSQVRJT04gKCpWX0pJVE9wZXJhdGlvbl9FV3MpKEV4ZWNTdGF0
ZSosIFdhdGNocG9pbnRTZXQqKTsKIHR5cGVkZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgqVl9KSVRP
cGVyYXRpb25fRVopKEV4ZWNTdGF0ZSosIGludDMyX3QpOwogdHlwZWRlZiB2b2lkIEpJVF9PUEVS
QVRJT04gKCpWX0pJVE9wZXJhdGlvbl9FWkopKEV4ZWNTdGF0ZSosIGludDMyX3QsIEVuY29kZWRK
U1ZhbHVlKTsKIHR5cGVkZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgqVl9KSVRPcGVyYXRpb25fRVpK
WlpaKShFeGVjU3RhdGUqLCBpbnQzMl90LCBFbmNvZGVkSlNWYWx1ZSwgaW50MzJfdCwgaW50MzJf
dCwgaW50MzJfdCk7CkBAIC0yNzgsNiArMjc3LDcgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJB
VElPTiBvcGVyYXRpb25OZQogRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25O
ZXdBcnJheUJ1ZmZlcldpdGhQcm9maWxlKEV4ZWNTdGF0ZSosIEFycmF5QWxsb2NhdGlvblByb2Zp
bGUqLCBjb25zdCBKU1ZhbHVlKiB2YWx1ZXMsIGludDMyX3Qgc2l6ZSkgV1RGX0lOVEVSTkFMOwog
RW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplQW5k
UHJvZmlsZShFeGVjU3RhdGUqLCBBcnJheUFsbG9jYXRpb25Qcm9maWxlKiwgRW5jb2RlZEpTVmFs
dWUgc2l6ZSkgV1RGX0lOVEVSTkFMOwogRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVy
YXRpb25OZXdGdW5jdGlvbihFeGVjU3RhdGUqLCBKU1Njb3BlKiwgSlNDZWxsKikgV1RGX0lOVEVS
TkFMOworRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdGdW5jdGlvbldp
dGhJbnZhbGlkYXRlZFJlYWxsb2NhdGlvbldhdGNocG9pbnQoRXhlY1N0YXRlKiwgSlNTY29wZSos
IEpTQ2VsbCopIFdURl9JTlRFUk5BTDsKIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25O
ZXdPYmplY3QoRXhlY1N0YXRlKiwgU3RydWN0dXJlKikgV1RGX0lOVEVSTkFMOwogRW5jb2RlZEpT
VmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdSZWdleHAoRXhlY1N0YXRlKiwgdm9pZCop
IFdURl9JTlRFUk5BTDsKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25IYW5kbGVXYXRjaGRv
Z1RpbWVyKEV4ZWNTdGF0ZSopIFdURl9JTlRFUk5BTDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkocmV2aXNpb24g
MTgyNDk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMy
XzY0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzUwLDI3ICs3NTAsMTAgQEAgdm9pZCBKSVQ6OmVt
aXRQdXRHbG9iYWxQcm9wZXJ0eSh1aW50cHRyXwogICAgIHN0b3JlMzIocmVnVDIsIEJhc2VJbmRl
eChyZWdUMCwgcmVnVDEsIFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICog
c2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNj
cmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXROb3RpZnlXcml0
ZShSZWdpc3RlcklEIHRhZywgUmVnaXN0ZXJJRCBwYXlsb2FkLCBSZWdpc3RlcklEIHNjcmF0Y2gs
IFZhcmlhYmxlV2F0Y2hwb2ludFNldCogc2V0KQotewotICAgIGlmICghc2V0IHx8IHNldC0+c3Rh
dGUoKSA9PSBJc0ludmFsaWRhdGVkKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgbG9hZDgo
c2V0LT5hZGRyZXNzT2ZTdGF0ZSgpLCBzY3JhdGNoKTsKLSAgICBKdW1wIGlzRG9uZSA9IGJyYW5j
aDMyKEVxdWFsLCBzY3JhdGNoLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpOwotCi0gICAg
SnVtcExpc3Qgbm90aWZ5U2xvdyA9IGJyYW5jaDMyKAotICAgICAgICBOb3RFcXVhbCwgQWJzb2x1
dGVBZGRyZXNzKHNldC0+YWRkcmVzc09mSW5mZXJyZWRWYWx1ZSgpLT5wYXlsb2FkUG9pbnRlcigp
KSwgcGF5bG9hZCk7Ci0gICAgbm90aWZ5U2xvdy5hcHBlbmQoYnJhbmNoMzIoCi0gICAgICAgIE5v
dEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3Moc2V0LT5hZGRyZXNzT2ZJbmZlcnJlZFZhbHVlKCktPnRh
Z1BvaW50ZXIoKSksIHRhZykpOwotICAgIGFkZFNsb3dDYXNlKG5vdGlmeVNsb3cpOwotCi0gICAg
aXNEb25lLmxpbmsodGhpcyk7Ci19Ci0KIHZvaWQgSklUOjplbWl0UHV0R2xvYmFsVmFyKHVpbnRw
dHJfdCBvcGVyYW5kLCBpbnQgdmFsdWUsIFZhcmlhYmxlV2F0Y2hwb2ludFNldCogc2V0KQogewog
ICAgIGVtaXRMb2FkKHZhbHVlLCByZWdUMSwgcmVnVDApOwotICAgIGVtaXROb3RpZnlXcml0ZShy
ZWdUMSwgcmVnVDAsIHJlZ1QyLCBzZXQpOworICAgIGVtaXROb3RpZnlXcml0ZShzZXQpOwogICAg
IHN0b3JlMzIocmVnVDEsIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG9wZXJhbmQpICsgT0JKRUNU
X09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKTsKICAgICBzdG9y
ZTMyKHJlZ1QwLCByZWludGVycHJldF9jYXN0PGNoYXIqPihvcGVyYW5kKSArIE9CSkVDVF9PRkZT
RVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpOwogfQpAQCAtNzc5
LDcgKzc2Miw3IEBAIHZvaWQgSklUOjplbWl0UHV0Q2xvc3VyZVZhcihpbnQgc2NvcGUsIHUKIHsK
ICAgICBlbWl0TG9hZCh2YWx1ZSwgcmVnVDMsIHJlZ1QyKTsKICAgICBlbWl0TG9hZChzY29wZSwg
cmVnVDEsIHJlZ1QwKTsKLSAgICBlbWl0Tm90aWZ5V3JpdGUocmVnVDMsIHJlZ1QyLCByZWdUNCwg
c2V0KTsKKyAgICBlbWl0Tm90aWZ5V3JpdGUoc2V0KTsKICAgICBzdG9yZTMyKHJlZ1QzLCBBZGRy
ZXNzKHJlZ1QwLCBKU0Vudmlyb25tZW50UmVjb3JkOjpvZmZzZXRPZlZhcmlhYmxlcygpICsgb3Bl
cmFuZCAqIHNpemVvZihSZWdpc3RlcikgKyBUYWdPZmZzZXQpKTsKICAgICBzdG9yZTMyKHJlZ1Qy
LCBBZGRyZXNzKHJlZ1QwLCBKU0Vudmlyb25tZW50UmVjb3JkOjpvZmZzZXRPZlZhcmlhYmxlcygp
ICsgb3BlcmFuZCAqIHNpemVvZihSZWdpc3RlcikgKyBQYXlsb2FkT2Zmc2V0KSk7CiB9CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAko
cmV2aXNpb24gMTgyNDk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0
eUFjY2Vzcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcyOCwyOSArNzI4LDE4IEBAIHZvaWQgSklU
OjplbWl0UHV0R2xvYmFsUHJvcGVydHkodWludHB0cl8KICAgICBzdG9yZVB0cihyZWdUMiwgQmFz
ZUluZGV4KHJlZ1QwLCByZWdUMSwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0g
MikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpKSk7CiB9CiAKLXZvaWQgSklUOjplbWl0Tm90aWZ5
V3JpdGUoUmVnaXN0ZXJJRCB2YWx1ZSwgUmVnaXN0ZXJJRCBzY3JhdGNoLCBWYXJpYWJsZVdhdGNo
cG9pbnRTZXQqIHNldCkKLXsKLSAgICBpZiAoIXNldCB8fCBzZXQtPnN0YXRlKCkgPT0gSXNJbnZh
bGlkYXRlZCkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGxvYWQ4KHNldC0+YWRkcmVzc09m
U3RhdGUoKSwgc2NyYXRjaCk7Ci0gICAgSnVtcCBpc0RvbmUgPSBicmFuY2gzMihFcXVhbCwgc2Ny
YXRjaCwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKTsKLSAgICBhZGRTbG93Q2FzZShicmFu
Y2g2NChOb3RFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKHNldC0+YWRkcmVzc09mSW5mZXJyZWRWYWx1
ZSgpKSwgdmFsdWUpKTsKLSAgICBpc0RvbmUubGluayh0aGlzKTsKLX0KLQotdm9pZCBKSVQ6OmVt
aXRQdXRHbG9iYWxWYXIodWludHB0cl90IG9wZXJhbmQsIGludCB2YWx1ZSwgVmFyaWFibGVXYXRj
aHBvaW50U2V0KiBzZXQpCit2b2lkIEpJVDo6ZW1pdFB1dEdsb2JhbFZhcih1aW50cHRyX3Qgb3Bl
cmFuZCwgaW50IHZhbHVlLCBXYXRjaHBvaW50U2V0KiBzZXQpCiB7CiAgICAgZW1pdEdldFZpcnR1
YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDApOwotICAgIGVtaXROb3RpZnlXcml0ZShyZWdUMCwgcmVn
VDEsIHNldCk7CisgICAgZW1pdE5vdGlmeVdyaXRlKHNldCk7CiAgICAgc3RvcmVQdHIocmVnVDAs
IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KG9wZXJhbmQpKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRQ
dXRDbG9zdXJlVmFyKGludCBzY29wZSwgdWludHB0cl90IG9wZXJhbmQsIGludCB2YWx1ZSwgVmFy
aWFibGVXYXRjaHBvaW50U2V0KiBzZXQpCit2b2lkIEpJVDo6ZW1pdFB1dENsb3N1cmVWYXIoaW50
IHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCwgaW50IHZhbHVlLCBXYXRjaHBvaW50U2V0KiBzZXQp
CiB7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOwogICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUsIHJlZ1QwKTsKLSAgICBlbWl0Tm90aWZ5V3JpdGUocmVn
VDEsIHJlZ1QyLCBzZXQpOworICAgIGVtaXROb3RpZnlXcml0ZShzZXQpOwogICAgIHN0b3JlUHRy
KHJlZ1QxLCBBZGRyZXNzKHJlZ1QwLCBKU0Vudmlyb25tZW50UmVjb3JkOjpvZmZzZXRPZlZhcmlh
YmxlcygpICsgb3BlcmFuZCAqIHNpemVvZihSZWdpc3RlcikpKTsKIH0KIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCShyZXZpc2lvbiAx
ODI0OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xNDAyLDggKzE0MDIsMTIgQEAgTExJTlRfU0xPV19QQVRIX0RF
Q0woc2xvd19wYXRoX3B1dF90b19zYwogICAgIGlmIChtb2RlQW5kVHlwZS50eXBlKCkgPT0gTG9j
YWxDbG9zdXJlVmFyKSB7CiAgICAgICAgIEpTTGV4aWNhbEVudmlyb25tZW50KiBlbnZpcm9ubWVu
dCA9IGpzQ2FzdDxKU0xleGljYWxFbnZpcm9ubWVudCo+KHNjb3BlKTsKICAgICAgICAgZW52aXJv
bm1lbnQtPnZhcmlhYmxlQXQoU2NvcGVPZmZzZXQocGNbNl0udS5vcGVyYW5kKSkuc2V0KHZtLCBl
bnZpcm9ubWVudCwgdmFsdWUpOwotICAgICAgICBpZiAoVmFyaWFibGVXYXRjaHBvaW50U2V0KiBz
ZXQgPSBwY1s1XS51LndhdGNocG9pbnRTZXQpCi0gICAgICAgICAgICBzZXQtPm5vdGlmeVdyaXRl
KHZtLCB2YWx1ZSwgIkV4ZWN1dGVkIG9wX3B1dF9zY29wZTxMb2NhbENsb3N1cmVWYXI+Iik7Cisg
ICAgICAgIAorICAgICAgICAvLyBIYXZlIHRvIGRvIHRoaXMgKmFmdGVyKiB0aGUgd3JpdGUsIGJl
Y2F1c2UgaWYgdGhpcyBwdXRzIHRoZSBzZXQgaW50byBJc1dhdGNoZWQsIHRoZW4gd2UgbmVlZAor
ICAgICAgICAvLyB0byBoYXZlIGFscmVhZHkgY2hhbmdlZCB0aGUgdmFsdWUgb2YgdGhlIHZhcmlh
YmxlLiBPdGhlcndpc2Ugd2UgbWlnaHQgd2F0Y2ggYW5kIGNvbnN0YW50LWZvbGQKKyAgICAgICAg
Ly8gdG8gdGhlIFVuZGVmaW5lZCB2YWx1ZSBmcm9tIGJlZm9yZSB0aGUgYXNzaWdubWVudC4KKyAg
ICAgICAgaWYgKFdhdGNocG9pbnRTZXQqIHNldCA9IHBjWzVdLnUud2F0Y2hwb2ludFNldCkKKyAg
ICAgICAgICAgIHNldC0+dG91Y2goIkV4ZWN1dGVkIG9wX3B1dF9zY29wZTxMb2NhbENsb3N1cmVW
YXI+Iik7CiAgICAgICAgIExMSU5UX0VORCgpOwogICAgIH0KIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5h
c20JKHJldmlzaW9uIDE4MjQ5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dM
ZXZlbEludGVycHJldGVyMzJfNjQuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC04MDUsMTQgKzgwNSw2
IEBAIF9sbGludF9vcF9tb3Y6CiAgICAgZGlzcGF0Y2goMykKIAogCi1tYWNybyBub3RpZnlXcml0
ZShzZXQsIHZhbHVlVGFnLCB2YWx1ZVBheWxvYWQsIHNjcmF0Y2gsIHNsb3cpCi0gICAgbG9hZGIg
VmFyaWFibGVXYXRjaHBvaW50U2V0OjptX3N0YXRlW3NldF0sIHNjcmF0Y2gKLSAgICBiaWVxIHNj
cmF0Y2gsIElzSW52YWxpZGF0ZWQsIC5kb25lCi0gICAgYmluZXEgdmFsdWVQYXlsb2FkLCBWYXJp
YWJsZVdhdGNocG9pbnRTZXQ6Om1faW5mZXJyZWRWYWx1ZSArIFBheWxvYWRPZmZzZXRbc2V0XSwg
c2xvdwotICAgIGJpbmVxIHZhbHVlVGFnLCBWYXJpYWJsZVdhdGNocG9pbnRTZXQ6Om1faW5mZXJy
ZWRWYWx1ZSArIFRhZ09mZnNldFtzZXRdLCBzbG93Ci0uZG9uZToKLWVuZAotCiBfbGxpbnRfb3Bf
bm90OgogICAgIHRyYWNlRXhlY3V0aW9uKCkKICAgICBsb2FkaSA4W1BDXSwgdDAKQEAgLTIwNzUs
MzkgKzIwNjcsMzkgQEAgX2xsaW50X29wX3Jlc29sdmVfc2NvcGU6CiAjckdsb2JhbFByb3BlcnR5
OgogICAgIGJpbmVxIHQwLCBHbG9iYWxQcm9wZXJ0eSwgLnJHbG9iYWxWYXIKICAgICBnZXRHbG9i
YWxPYmplY3QoMSkKLSAgICBkaXNwYXRjaCg3KQorICAgIGRpc3BhdGNoKDYpCiAKIC5yR2xvYmFs
VmFyOgogICAgIGJpbmVxIHQwLCBHbG9iYWxWYXIsIC5yQ2xvc3VyZVZhcgogICAgIGdldEdsb2Jh
bE9iamVjdCgxKQotICAgIGRpc3BhdGNoKDcpCisgICAgZGlzcGF0Y2goNikKIAogLnJDbG9zdXJl
VmFyOgogICAgIGJpbmVxIHQwLCBDbG9zdXJlVmFyLCAuckdsb2JhbFByb3BlcnR5V2l0aFZhcklu
amVjdGlvbkNoZWNrcwogICAgIHJlc29sdmVTY29wZSgpCi0gICAgZGlzcGF0Y2goNykKKyAgICBk
aXNwYXRjaCg2KQogCiAuckdsb2JhbFByb3BlcnR5V2l0aFZhckluamVjdGlvbkNoZWNrczoKICAg
ICBiaW5lcSB0MCwgR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCAuckdsb2Jh
bFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MKICAgICB2YXJJbmplY3Rpb25DaGVjayguckR5bmFt
aWMpCiAgICAgZ2V0R2xvYmFsT2JqZWN0KDEpCi0gICAgZGlzcGF0Y2goNykKKyAgICBkaXNwYXRj
aCg2KQogCiAuckdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6CiAgICAgYmluZXEgdDAs
IEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MsIC5yQ2xvc3VyZVZhcldpdGhWYXJJbmpl
Y3Rpb25DaGVja3MKICAgICB2YXJJbmplY3Rpb25DaGVjayguckR5bmFtaWMpCiAgICAgZ2V0R2xv
YmFsT2JqZWN0KDEpCi0gICAgZGlzcGF0Y2goNykKKyAgICBkaXNwYXRjaCg2KQogCiAuckNsb3N1
cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOgogICAgIGJpbmVxIHQwLCBDbG9zdXJlVmFyV2l0
aFZhckluamVjdGlvbkNoZWNrcywgLnJEeW5hbWljCiAgICAgdmFySW5qZWN0aW9uQ2hlY2soLnJE
eW5hbWljKQogICAgIHJlc29sdmVTY29wZSgpCi0gICAgZGlzcGF0Y2goNykKKyAgICBkaXNwYXRj
aCg2KQogCiAuckR5bmFtaWM6CiAgICAgY2FsbFNsb3dQYXRoKF9sbGludF9zbG93X3BhdGhfcmVz
b2x2ZV9zY29wZSkKLSAgICBkaXNwYXRjaCg3KQorICAgIGRpc3BhdGNoKDYpCiAKIAogbWFjcm8g
bG9hZFdpdGhTdHJ1Y3R1cmVDaGVjayhvcGVyYW5kLCBzbG93UGF0aCkKQEAgLTIyMDQsNyArMjE5
Niw3IEBAIG1hY3JvIHB1dEdsb2JhbFZhcigpCiAgICAgbG9hZGlzRnJvbUluc3RydWN0aW9uKDMs
IHQwKQogICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUodDAsIHQxLCB0MikKICAgICBsb2FkcEZy
b21JbnN0cnVjdGlvbig1LCB0MykKLSAgICBub3RpZnlXcml0ZSh0MywgdDEsIHQyLCB0MCwgLnBE
eW5hbWljKQorICAgIG5vdGlmeVdyaXRlKHQzLCAucER5bmFtaWMpCiAgICAgbG9hZHBGcm9tSW5z
dHJ1Y3Rpb24oNiwgdDApCiAgICAgc3RvcmVpIHQxLCBUYWdPZmZzZXRbdDBdCiAgICAgc3RvcmVp
IHQyLCBQYXlsb2FkT2Zmc2V0W3QwXQpAQCAtMjIyMyw3ICsyMjE1LDcgQEAgbWFjcm8gcHV0TG9j
YWxDbG9zdXJlVmFyKCkKICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHQxLCB0MiwgdDMpCiAg
ICAgbG9hZHBGcm9tSW5zdHJ1Y3Rpb24oNSwgdDQpCiAgICAgYnRweiB0NCwgLm5vVmFyaWFibGVX
YXRjaHBvaW50U2V0Ci0gICAgbm90aWZ5V3JpdGUodDQsIHQyLCB0MywgdDEsIC5wRHluYW1pYykK
KyAgICBub3RpZnlXcml0ZSh0NCwgLnBEeW5hbWljKQogLm5vVmFyaWFibGVXYXRjaHBvaW50U2V0
OgogICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlvbig2LCB0MSkKICAgICBzdG9yZWkgdDIsIEpTRW52
aXJvbm1lbnRSZWNvcmRfdmFyaWFibGVzICsgVGFnT2Zmc2V0W3QwLCB0MSwgOF0KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVy
NjQuYXNtCShyZXZpc2lvbiAxODI0OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQv
TG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQkod29ya2luZyBjb3B5KQpAQCAtNjkwLDEzICs2OTAs
NiBAQCBfbGxpbnRfb3BfbW92OgogICAgIGRpc3BhdGNoKDMpCiAKIAotbWFjcm8gbm90aWZ5V3Jp
dGUoc2V0LCB2YWx1ZSwgc2NyYXRjaCwgc2xvdykKLSAgICBsb2FkYiBWYXJpYWJsZVdhdGNocG9p
bnRTZXQ6Om1fc3RhdGVbc2V0XSwgc2NyYXRjaAotICAgIGJpZXEgc2NyYXRjaCwgSXNJbnZhbGlk
YXRlZCwgLmRvbmUKLSAgICBicW5lcSB2YWx1ZSwgVmFyaWFibGVXYXRjaHBvaW50U2V0OjptX2lu
ZmVycmVkVmFsdWVbc2V0XSwgc2xvdwotLmRvbmU6Ci1lbmQKLQogX2xsaW50X29wX25vdDoKICAg
ICB0cmFjZUV4ZWN1dGlvbigpCiAgICAgbG9hZGlzRnJvbUluc3RydWN0aW9uKDIsIHQwKQpAQCAt
MTk0NCwzOSArMTkzNywzOSBAQCBfbGxpbnRfb3BfcmVzb2x2ZV9zY29wZToKICNyR2xvYmFsUHJv
cGVydHk6CiAgICAgYmluZXEgdDAsIEdsb2JhbFByb3BlcnR5LCAuckdsb2JhbFZhcgogICAgIGdl
dEdsb2JhbE9iamVjdCgxKQotICAgIGRpc3BhdGNoKDcpCisgICAgZGlzcGF0Y2goNikKIAogLnJH
bG9iYWxWYXI6CiAgICAgYmluZXEgdDAsIEdsb2JhbFZhciwgLnJDbG9zdXJlVmFyCiAgICAgZ2V0
R2xvYmFsT2JqZWN0KDEpCi0gICAgZGlzcGF0Y2goNykKKyAgICBkaXNwYXRjaCg2KQogCiAuckNs
b3N1cmVWYXI6CiAgICAgYmluZXEgdDAsIENsb3N1cmVWYXIsIC5yR2xvYmFsUHJvcGVydHlXaXRo
VmFySW5qZWN0aW9uQ2hlY2tzCiAgICAgcmVzb2x2ZVNjb3BlKCkKLSAgICBkaXNwYXRjaCg3KQor
ICAgIGRpc3BhdGNoKDYpCiAKIC5yR2xvYmFsUHJvcGVydHlXaXRoVmFySW5qZWN0aW9uQ2hlY2tz
OgogICAgIGJpbmVxIHQwLCBHbG9iYWxQcm9wZXJ0eVdpdGhWYXJJbmplY3Rpb25DaGVja3MsIC5y
R2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcwogICAgIHZhckluamVjdGlvbkNoZWNrKC5y
RHluYW1pYykKICAgICBnZXRHbG9iYWxPYmplY3QoMSkKLSAgICBkaXNwYXRjaCg3KQorICAgIGRp
c3BhdGNoKDYpCiAKIC5yR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczoKICAgICBiaW5l
cSB0MCwgR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrcywgLnJDbG9zdXJlVmFyV2l0aFZh
ckluamVjdGlvbkNoZWNrcwogICAgIHZhckluamVjdGlvbkNoZWNrKC5yRHluYW1pYykKICAgICBn
ZXRHbG9iYWxPYmplY3QoMSkKLSAgICBkaXNwYXRjaCg3KQorICAgIGRpc3BhdGNoKDYpCiAKIC5y
Q2xvc3VyZVZhcldpdGhWYXJJbmplY3Rpb25DaGVja3M6CiAgICAgYmluZXEgdDAsIENsb3N1cmVW
YXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzLCAuckR5bmFtaWMKICAgICB2YXJJbmplY3Rpb25DaGVj
ayguckR5bmFtaWMpCiAgICAgcmVzb2x2ZVNjb3BlKCkKLSAgICBkaXNwYXRjaCg3KQorICAgIGRp
c3BhdGNoKDYpCiAKIC5yRHluYW1pYzoKICAgICBjYWxsU2xvd1BhdGgoX2xsaW50X3Nsb3dfcGF0
aF9yZXNvbHZlX3Njb3BlKQotICAgIGRpc3BhdGNoKDcpCisgICAgZGlzcGF0Y2goNikKIAogCiBt
YWNybyBsb2FkV2l0aFN0cnVjdHVyZUNoZWNrKG9wZXJhbmQsIHNsb3dQYXRoKQpAQCAtMjA2OSw4
ICsyMDYyLDggQEAgbWFjcm8gcHV0R2xvYmFsVmFyKCkKICAgICBsb2FkaXNGcm9tSW5zdHJ1Y3Rp
b24oMywgdDApCiAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZSh0MCwgdDEpCiAgICAgbG9hZHBG
cm9tSW5zdHJ1Y3Rpb24oNSwgdDIpCi0gICAgbm90aWZ5V3JpdGUodDIsIHQxLCB0MCwgLnBEeW5h
bWljKQogICAgIGxvYWRwRnJvbUluc3RydWN0aW9uKDYsIHQwKQorICAgIG5vdGlmeVdyaXRlKHQy
LCAucER5bmFtaWMpCiAgICAgc3RvcmVxIHQxLCBbdDBdCiBlbmQKIApAQCAtMjA4Niw3ICsyMDc5
LDcgQEAgbWFjcm8gcHV0TG9jYWxDbG9zdXJlVmFyKCkKICAgICBsb2FkQ29uc3RhbnRPclZhcmlh
YmxlKHQxLCB0MikKICAgICBsb2FkcEZyb21JbnN0cnVjdGlvbig1LCB0MykKICAgICBidHB6IHQz
LCAubm9WYXJpYWJsZVdhdGNocG9pbnRTZXQKLSAgICBub3RpZnlXcml0ZSh0MywgdDIsIHQxLCAu
cER5bmFtaWMpCisgICAgbm90aWZ5V3JpdGUodDMsIC5wRHluYW1pYykKIC5ub1ZhcmlhYmxlV2F0
Y2hwb2ludFNldDoKICAgICBsb2FkaXNGcm9tSW5zdHJ1Y3Rpb24oNiwgdDEpCiAgICAgc3RvcmVx
IHQyLCBKU0Vudmlyb25tZW50UmVjb3JkX3ZhcmlhYmxlc1t0MCwgdDEsIDhdCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNt
CShyZXZpc2lvbiAxODI0OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2
ZWxJbnRlcnByZXRlci5hc20JKHdvcmtpbmcgY29weSkKQEAgLTUxOSw2ICs1MTksMTAgQEAgbWFj
cm8gc2tpcElmSXNSZW1lbWJlcmVkT3JJbkVkZW4oY2VsbCwgcwogICAgIGNvbnRpbnVhdGlvbihz
Y3JhdGNoMSkKIGVuZAogCittYWNybyBub3RpZnlXcml0ZShzZXQsIHNsb3cpCisgICAgYmJuZXEg
V2F0Y2hwb2ludFNldDo6bV9zdGF0ZVtzZXRdLCBJc0ludmFsaWRhdGVkLCBzbG93CitlbmQKKwog
bWFjcm8gY2hlY2tTd2l0Y2hUb0pJVChpbmNyZW1lbnQsIGFjdGlvbikKICAgICBsb2FkcCBDb2Rl
QmxvY2tbY2ZyXSwgdDAKICAgICBiYWRkaXMgaW5jcmVtZW50LCBDb2RlQmxvY2s6Om1fbGxpbnRF
eGVjdXRlQ291bnRlciArIEJhc2VsaW5lRXhlY3V0aW9uQ291bnRlcjo6bV9jb3VudGVyW3QwXSwg
LmNvbnRpbnVlCkBAIC05MjAsMTIgKzkyNCw2IEBAIGVuZAogCiAKICMgVmFsdWUtcmVwcmVzZW50
YXRpb24tYWdub3N0aWMgY29kZS4KLV9sbGludF9vcF90b3VjaF9lbnRyeToKLSAgICB0cmFjZUV4
ZWN1dGlvbigpCi0gICAgY2FsbFNsb3dQYXRoKF9zbG93X3BhdGhfdG91Y2hfZW50cnkpCi0gICAg
ZGlzcGF0Y2goMSkKLQotCiBfbGxpbnRfb3BfY3JlYXRlX2RpcmVjdF9hcmd1bWVudHM6CiAgICAg
dHJhY2VFeGVjdXRpb24oKQogICAgIGNhbGxTbG93UGF0aChfc2xvd19wYXRoX2NyZWF0ZV9kaXJl
Y3RfYXJndW1lbnRzKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9u
U2xvd1BhdGhzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Db21tb25TbG93UGF0aHMuY3BwCShyZXZpc2lvbiAxODI0OTgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
NSw3ICs1NSw2IEBACiAjaW5jbHVkZSAiU2NvcGVkQXJndW1lbnRzLmgiCiAjaW5jbHVkZSAiU3Ry
dWN0dXJlUmFyZURhdGFJbmxpbmVzLmgiCiAjaW5jbHVkZSAiVHlwZVByb2ZpbGVyTG9nLmgiCi0j
aW5jbHVkZSAiVmFyaWFibGVXYXRjaHBvaW50U2V0SW5saW5lcy5oIgogI2luY2x1ZGUgPHd0Zi9T
dHJpbmdQcmludFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTIwNiwxMyArMjA1LDYg
QEAgU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2NvbnN0cnVjdF9hcml0eQogICAgIFJFVFVSTl9U
V08oMCwgc2V0dXBBcml0eUNoZWNrRGF0YSh2bSwgc2xvdHNUb0FkZCkpOwogfQogCi1TTE9XX1BB
VEhfREVDTChzbG93X3BhdGhfdG91Y2hfZW50cnkpCi17Ci0gICAgQkVHSU4oKTsKLSAgICBleGVj
LT5jb2RlQmxvY2soKS0+c3ltYm9sVGFibGUoKS0+bV9mdW5jdGlvbkVudGVyZWRPbmNlLnRvdWNo
KCJGdW5jdGlvbiAocmUpZW50ZXJlZCIpOwotICAgIEVORCgpOwotfQotCiBTTE9XX1BBVEhfREVD
TChzbG93X3BhdGhfY3JlYXRlX2RpcmVjdF9hcmd1bWVudHMpCiB7CiAgICAgQkVHSU4oKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5o
CShyZXZpc2lvbiAxODI0OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21t
b25TbG93UGF0aHMuaAkod29ya2luZyBjb3B5KQpAQCAtMTgxLDcgKzE4MSw2IEBAIFNMT1dfUEFU
SF9ERUNMKG5hbWUpIFdURl9JTlRFUk5BTAogICAgIAogU0xPV19QQVRIX0hJRERFTl9ERUNMKHNs
b3dfcGF0aF9jYWxsX2FyaXR5Q2hlY2spOwogU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0
aF9jb25zdHJ1Y3RfYXJpdHlDaGVjayk7Ci1TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRo
X3RvdWNoX2VudHJ5KTsKIFNMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfY3JlYXRlX2Rp
cmVjdF9hcmd1bWVudHMpOwogU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9jcmVhdGVf
c2NvcGVkX2FyZ3VtZW50cyk7CiBTTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX2NyZWF0
ZV9vdXRfb2ZfYmFuZF9hcmd1bWVudHMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRXhlY3V0YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAJKHJldmlzaW9uIDE4MjQ5OCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MTQs
NiArNDE0LDEyIEBAIEZ1bmN0aW9uRXhlY3V0YWJsZTo6RnVuY3Rpb25FeGVjdXRhYmxlKFYKICAg
ICBtX3R5cGVQcm9maWxpbmdFbmRPZmZzZXQgPSB1bmxpbmtlZEV4ZWN1dGFibGUtPnR5cGVQcm9m
aWxpbmdFbmRPZmZzZXQoKTsKIH0KIAordm9pZCBGdW5jdGlvbkV4ZWN1dGFibGU6OmZpbmlzaENy
ZWF0aW9uKFZNJiB2bSkKK3sKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CisgICAgbV9z
aW5nbGV0b25GdW5jdGlvbi5zZXQodm0sIHRoaXMsIEluZmVycmVkVmFsdWU6OmNyZWF0ZSh2bSkp
OworfQorCiB2b2lkIEZ1bmN0aW9uRXhlY3V0YWJsZTo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCiB7
CiAgICAgc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oY2VsbCktPkZ1bmN0aW9uRXhl
Y3V0YWJsZTo6fkZ1bmN0aW9uRXhlY3V0YWJsZSgpOwpAQCAtNTY3LDYgKzU3Myw3IEBAIHZvaWQg
RnVuY3Rpb25FeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuKEoKICAgICBpZiAodGhpc09iamVjdC0+
bV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QpCiAgICAgICAgIHRoaXNPYmplY3QtPm1fY29kZUJsb2Nr
Rm9yQ29uc3RydWN0LT52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKICAgICB2aXNpdG9yLmFwcGVu
ZCgmdGhpc09iamVjdC0+bV91bmxpbmtlZEV4ZWN1dGFibGUpOworICAgIHZpc2l0b3IuYXBwZW5k
KCZ0aGlzT2JqZWN0LT5tX3NpbmdsZXRvbkZ1bmN0aW9uKTsKIH0KIAogU3ltYm9sVGFibGUqIEZ1
bmN0aW9uRXhlY3V0YWJsZTo6c3ltYm9sVGFibGUoQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5k
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAkocmV2
aXNpb24gMTgyNDk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJs
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw4ICszMyw3IEBACiAjaW5jbHVkZSAiQ29tcGlsYXRp
b25SZXN1bHQuaCIKICNpbmNsdWRlICJERkdQbGFuLmgiCiAjaW5jbHVkZSAiSGFuZGxlckluZm8u
aCIKLSNpbmNsdWRlICJKU0Z1bmN0aW9uLmgiCi0jaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKKyNp
bmNsdWRlICJJbmZlcnJlZFZhbHVlLmgiCiAjaW5jbHVkZSAiSklUQ29kZS5oIgogI2luY2x1ZGUg
IkpTR2xvYmFsT2JqZWN0LmgiCiAjaW5jbHVkZSAiUmVnaXN0ZXJQcmVzZXJ2YXRpb25Nb2RlLmgi
CkBAIC02NDksMTEgKzY0OCwxNSBAQCBwdWJsaWM6CiAgICAgdm9pZCB1bmxpbmtDYWxscygpOwog
CiAgICAgdm9pZCBjbGVhckNvZGUoKTsKKyAgICAKKyAgICBJbmZlcnJlZFZhbHVlKiBzaW5nbGV0
b25GdW5jdGlvbigpIHsgcmV0dXJuIG1fc2luZ2xldG9uRnVuY3Rpb24uZ2V0KCk7IH0KIAogcHJp
dmF0ZToKICAgICBGdW5jdGlvbkV4ZWN1dGFibGUoCiAgICAgICAgIFZNJiwgY29uc3QgU291cmNl
Q29kZSYsIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiwgdW5zaWduZWQgZmlyc3RMaW5lLCAK
ICAgICAgICAgdW5zaWduZWQgbGFzdExpbmUsIHVuc2lnbmVkIHN0YXJ0Q29sdW1uLCB1bnNpZ25l
ZCBlbmRDb2x1bW4pOworICAgIAorICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKIAogICAg
IGJvb2wgaXNDb21waWxpbmcoKQogICAgIHsKQEAgLTY2NywxMiArNjcwLDEzIEBAIHByaXZhdGU6
CiAgICAgfQogCiAgICAgZnJpZW5kIGNsYXNzIFNjcmlwdEV4ZWN1dGFibGU7Ci0KKyAgICAKICAg
ICBXcml0ZUJhcnJpZXI8VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU+IG1fdW5saW5rZWRFeGVj
dXRhYmxlOwogICAgIFJlZlB0cjxGdW5jdGlvbkNvZGVCbG9jaz4gbV9jb2RlQmxvY2tGb3JDYWxs
OwogICAgIFJlZlB0cjxGdW5jdGlvbkNvZGVCbG9jaz4gbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3Q7
CiAgICAgUmVmUHRyPFR5cGVTZXQ+IG1fcmV0dXJuU3RhdGVtZW50VHlwZVNldDsKICAgICB1bnNp
Z25lZCBtX3BhcmFtZXRlcnNTdGFydE9mZnNldDsKKyAgICBXcml0ZUJhcnJpZXI8SW5mZXJyZWRW
YWx1ZT4gbV9zaW5nbGV0b25GdW5jdGlvbjsKIH07CiAKIGlubGluZSB2b2lkIEV4ZWN1dGFibGVC
YXNlOjpjbGVhckNvZGVWaXJ0dWFsKEV4ZWN1dGFibGVCYXNlKiBleGVjdXRhYmxlKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRWYWx1ZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRWYWx1ZS5jcHAJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFZhbHVl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEzMiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiSW5mZXJyZWRWYWx1ZS5oIgorCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorCituYW1lc3Bh
Y2UgSlNDIHsKKworY29uc3QgQ2xhc3NJbmZvIEluZmVycmVkVmFsdWU6OnNfaW5mbyA9IHsgIklu
ZmVycmVkVmFsdWUiLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEluZmVycmVkVmFsdWUpIH07
CisKK0luZmVycmVkVmFsdWUqIEluZmVycmVkVmFsdWU6OmNyZWF0ZShWTSYgdm0pCit7CisgICAg
SW5mZXJyZWRWYWx1ZSogcmVzdWx0ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SW5mZXJy
ZWRWYWx1ZT4odm0uaGVhcCkpIEluZmVycmVkVmFsdWUodm0pOworICAgIHJlc3VsdC0+ZmluaXNo
Q3JlYXRpb24odm0pOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgSW5mZXJyZWRWYWx1
ZTo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCit7CisgICAgSW5mZXJyZWRWYWx1ZSogaW5mZXJyZWRW
YWx1ZSA9IHN0YXRpY19jYXN0PEluZmVycmVkVmFsdWUqPihjZWxsKTsKKyAgICBjZWxsLT5JbmZl
cnJlZFZhbHVlOjp+SW5mZXJyZWRWYWx1ZSgpOworfQorCitTdHJ1Y3R1cmUqIEluZmVycmVkVmFs
dWU6OmNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTVmFsdWUgcHJvdG90eXBlKQoreworICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNyZWF0ZSh2bSwg
Z2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKENlbGxUeXBlLCBTdHJ1Y3R1cmVGbGFn
cyksIGluZm8oKSk7Cit9CisKK3ZvaWQgSW5mZXJyZWRWYWx1ZTo6dmlzaXRDaGlsZHJlbihKU0Nl
bGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIEluZmVycmVkVmFsdWUqIGlu
ZmVycmVkVmFsdWUgPSBqc0Nhc3Q8SW5mZXJyZWRWYWx1ZSo+KGNlbGwpOworICAgIAorICAgIGlm
IChpbmZlcnJlZFZhbHVlLT5tX3NldC5oYXNCZWVuSW52YWxpZGF0ZWQoKSkgeworICAgICAgICBp
bmZlcnJlZFZhbHVlLT5tX2NsZWFudXAgPSBudWxscHRyOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIAorICAgIGlmICghaW5mZXJyZWRWYWx1ZS0+bV92YWx1ZSkKKyAgICAgICAgcmV0dXJu
OworICAgIGlmICghaW5mZXJyZWRWYWx1ZS0+bV92YWx1ZS5nZXQoKS5pc0NlbGwoKSkKKyAgICAg
ICAgcmV0dXJuOworICAgIAorICAgIGlmICghaW5mZXJyZWRWYWx1ZS0+bV9jbGVhbnVwKQorICAg
ICAgICBpbmZlcnJlZFZhbHVlLT5tX2NsZWFudXAgPSBzdGQ6Om1ha2VfdW5pcXVlPFZhbHVlQ2xl
YW51cD4oaW5mZXJyZWRWYWx1ZSk7CisgICAgdmlzaXRvci5hZGRVbmNvbmRpdGlvbmFsRmluYWxp
emVyKGluZmVycmVkVmFsdWUtPm1fY2xlYW51cC5nZXQoKSk7Cit9CisKK3ZvaWQgSW5mZXJyZWRW
YWx1ZTo6bm90aWZ5V3JpdGUoVk0mIHZtLCBKU1ZhbHVlIHZhbHVlLCBjb25zdCBGaXJlRGV0YWls
JiBkZXRhaWwpCit7CisgICAgQVNTRVJUKCEhdmFsdWUpOworICAgIHN3aXRjaCAobV9zZXQuc3Rh
dGUoKSkgeworICAgIGNhc2UgQ2xlYXJXYXRjaHBvaW50OgorICAgICAgICBtX3ZhbHVlLnNldCh2
bSwgdGhpcywgdmFsdWUpOworICAgICAgICBtX3NldC5zdGFydFdhdGNoaW5nKCk7CisgICAgICAg
IHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBJc1dhdGNoZWQ6CisgICAgICAgIEFTU0VSVCgh
IW1fdmFsdWUpOworICAgICAgICBpZiAobV92YWx1ZS5nZXQoKSA9PSB2YWx1ZSkKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgaW52YWxpZGF0ZShkZXRhaWwpOworICAgICAgICByZXR1cm47
CisgICAgICAgIAorICAgIGNhc2UgSXNJbnZhbGlkYXRlZDoKKyAgICAgICAgQVNTRVJUKCFtX3Zh
bHVlKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKK30KKwordm9pZCBJbmZlcnJlZFZhbHVlOjpub3RpZnlXcml0ZShWTSYgdm0sIEpTVmFs
dWUgdmFsdWUsIGNvbnN0IGNoYXIqIHJlYXNvbikKK3sKKyAgICBub3RpZnlXcml0ZSh2bSwgdmxh
dWUsIFN0cmluZ0ZpcmVEZXRhaWwocmVhc29uKSk7Cit9CisKK0luZmVycmVkVmFsdWU6OkluZmVy
cmVkVmFsdWUoVk0mIHZtKQorICAgIDogQmFzZSh2bSwgdm0uaW5mZXJyZWRWYWx1ZVN0cnVjdHVy
ZS5nZXQoKSkKKyAgICAsIG1fc2V0KENsZWFyV2F0Y2hwb2ludCkKK3sKK30KKworSW5mZXJyZWRW
YWx1ZTo6fkluZmVycmVkVmFsdWUoKQoreworfQorCitJbmZlcnJlZFZhbHVlOjpWYWx1ZUNsZWFu
dXA6OlZhbHVlQ2xlYW51cChJbmZlcnJlZFZhbHVlKiBvd25lcikKKyAgICA6IG1fb3duZXIob3du
ZXIpCit7Cit9CisKK0luZmVycmVkVmFsdWU6OlZhbHVlQ2xlYW51cDo6flZhbHVlQ2xlYW51cCgp
Cit7Cit9CisKK3ZvaWQgSW5mZXJyZWRWYWx1ZTo6VmFsdWVDbGVhbnVwOjpmaW5hbGl6ZVVuY29u
ZGl0aW9uYWxseSgpCit7CisgICAgQVNTRVJUKG1fb3duZXItPm1fdmFsdWUpOworICAgIEFTU0VS
VChtX293bmVyLT5tX3ZhbHVlLmlzQ2VsbCgpKTsKKyAgICAKKyAgICBpZiAoSGVhcDo6aXNNYXJr
ZWQobV9vd25lci0+bV92YWx1ZS5nZXQoKS5hc0NlbGwoKSkpCisgICAgICAgIHJldHVybjsKKyAg
ICAKKyAgICBtX293bmVyLT5pbnZhbGlkYXRlKFN0cmluZ0ZpcmVEZXRhaWwoIkluZmVycmVkVmFs
dWUgY2xlYW4tdXAgZHVyaW5nIEdDIikpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRWYWx1ZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVkVmFsdWUuaAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVkVmFsdWUu
aAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyMiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEluZmVycmVkVmFsdWVfaAorI2RlZmlu
ZSBJbmZlcnJlZFZhbHVlX2gKKworI2luY2x1ZGUgIkpTQ2VsbC5oIgorI2luY2x1ZGUgIldhdGNo
cG9pbnQuaCIKKyNpbmNsdWRlICJXcml0ZUJhcnJpZXIuaCIKKworbmFtZXNwYWNlIEpTQyB7CisK
Ky8vIEFsbG9jYXRlIG9uZSBvZiB0aGVzZSBpZiB5b3UnZCBsaWtlIHRvIGluZmVyIGEgY29uc3Rh
bnQgdmFsdWUuIFdyaXRlcyB0byB0aGUgdmFsdWUgc2hvdWxkIHVzZQorLy8gbm90aWZ5V3JpdGUo
KS4gU28gbG9uZyBhcyBleGFjdGx5IG9uZSB2YWx1ZSBoYWQgZXZlciBiZWVuIHdyaXR0ZW4gYW5k
IGludmFsaWRhdGUoKSBoYXMgbmV2ZXIgYmVlbgorLy8gY2FsbGVkLCBhbmQgeW91IHJlZ2lzdGVy
IGEgd2F0Y2hwb2ludCwgeW91IGNhbiByZWx5IG9uIHRoZSBpbmZlcnJlZFZhbHVlKCkgYmVpbmcg
dGhlIG9uZSB0cnVlCisvLyB2YWx1ZS4KKy8vCisvLyBDb21tb25seSB1c2VkIGZvciBpbmZlcnJp
bmcgc2luZ2xldG9ucyAtIGluIHRoYXQgY2FzZSBlYWNoIGFsbG9jYXRpb24gZG9lcyBub3RpZnlX
cml0ZSgpLiBCdXQgeW91CisvLyBjYW4gdXNlIGlmIGZvciBvdGhlciB0aGluZ3MgYXMgd2VsbC4K
KworY2xhc3MgSW5mZXJyZWRWYWx1ZSA6IHB1YmxpYyBKU0NlbGwgeworcHVibGljOgorICAgIHR5
cGVkZWYgSlNDZWxsIEJhc2U7CisgICAgCisgICAgc3RhdGljIEluZmVycmVkVmFsdWUqIGNyZWF0
ZShWTSYpOworICAgIAorICAgIHN0YXRpYyBjb25zdCBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0
cnVlOworICAgIHN0YXRpYyBjb25zdCBib29sIGhhc0ltbW9ydGFsU3RydWN0dXJlID0gdHJ1ZTsK
KyAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOworICAgIAorICAgIHN0YXRpYyBTdHJ1
Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3Qs
IEpTVmFsdWUgcHJvdG90eXBlKTsKKyAgICAKKyAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVu
KEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgCisgICAgREVDTEFSRV9JTkZPOworICAgIAor
ICAgIC8vIEZvciB0aGUgcHVycG9zZSBvZiBkZWNpZGluZyB3aGV0aGVyIG9yIG5vdCB0byB3YXRj
aCB0aGlzIHZhcmlhYmxlLCB5b3Ugb25seSBuZWVkCisgICAgLy8gdG8gaW5zcGVjdCBpbmZlcnJl
ZFZhbHVlKCkuIElmIHRoaXMgcmV0dXJucyBzb21ldGhpbmcgb3RoZXIgdGhhbiB0aGUgZW1wdHkK
KyAgICAvLyB2YWx1ZSwgdGhlbiBpdCBtZWFucyB0aGF0IGF0IGFsbCBmdXR1cmUgc2FmZXBvaW50
cywgdGhpcyB3YXRjaHBvaW50IHNldCB3aWxsIGJlCisgICAgLy8gaW4gb25lIG9mIHRoZXNlIHN0
YXRlczoKKyAgICAvLworICAgIC8vICAgIElzV2F0Y2hlZDogaW4gdGhpcyBjYXNlLCB0aGUgdmFy
aWFibGUncyB2YWx1ZSBtdXN0IHN0aWxsIGJlIHRoZQorICAgIC8vICAgICAgICBpbmZlcnJlZFZh
bHVlLgorICAgIC8vCisgICAgLy8gICAgSXNJbnZhbGlkYXRlZDogaW4gdGhpcyBjYXNlIHRoZSB2
YXJpYWJsZSdzIHZhbHVlIG1heSBiZSBhbnl0aGluZyBidXQgeW91J2xsCisgICAgLy8gICAgICAg
IGVpdGhlciBub3RpY2UgdGhhdCBpdCdzIGludmFsaWRhdGVkIGFuZCBub3QgaW5zdGFsbCB0aGUg
d2F0Y2hwb2ludCwgb3IKKyAgICAvLyAgICAgICAgeW91IHdpbGwgaGF2ZSBiZWVuIG5vdGlmaWVk
IHRoYXQgdGhlIHdhdGNocG9pbnQgd2FzIGZpcmVkLgorICAgIEpTVmFsdWUgaW5mZXJyZWRWYWx1
ZSgpIHsgcmV0dXJuIG1fdmFsdWUuZ2V0KCk7IH0KKworICAgIC8vIEZvcndhcmRzIHNvbWUgV2F0
Y2hwb2ludFNldCBtZXRob2RzLgorICAgIFdhdGNocG9pbnRTdGF0ZSBzdGF0ZSgpIGNvbnN0IHsg
cmV0dXJuIG1fc2V0LnN0YXRlKCk7IH0KKyAgICBib29sIGlzU3RpbGxWYWxpZCgpIGNvbnN0IHsg
cmV0dXJuIG1fc2V0LmlzU3RpbGxWYWxpZCgpOyB9CisgICAgYm9vbCBoYXNCZWVuSW52YWxpZGF0
ZWQoKSBjb25zdCB7IHJldHVybiBtX3NldC5oYXNCZWVuSW52YWxpZGF0ZWQoKTsgfQorICAgIHZv
aWQgYWRkKFdhdGNocG9pbnQqIHdhdGNocG9pbnQpIHsgbV9zZXQuYWRkKHdhdGNocG9pbnQpOyB9
CisgICAgCisgICAgdm9pZCBub3RpZnlXcml0ZShWTSYsIEpTVmFsdWUsIGNvbnN0IEZpcmVEZXRh
aWwmKTsKKyAgICB2b2lkIG5vdGlmeVdyaXRlKFZNJiwgSlNWYWx1ZSwgY29uc3QgY2hhciogcmVh
c29uKTsKKyAgICAKKyAgICB2b2lkIGludmFsaWRhdGUoY29uc3QgRmlyZURldGFpbCYgZGV0YWls
KQorICAgIHsKKyAgICAgICAgbV92YWx1ZS5jbGVhcigpOworICAgICAgICBtX3NldC5pbnZhbGlk
YXRlKGRldGFpbCk7CisgICAgfQorICAgIAorcHJvdGVjdGVkOgorICAgIHN0YXRpYyBjb25zdCB1
bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IFN0cnVjdHVyZUlzSW1tb3J0YWwgfCBCYXNlOjpTdHJ1
Y3R1cmVGbGFnczsKKyAgICAKK3ByaXZhdGU6CisgICAgSW5mZXJyZWRWYWx1ZShWTSYpOworICAg
IH5JbmZlcnJlZFZhbHVlKCk7CisgICAgCisgICAgLy8gV2UgY291bGQgaGF2ZSB1c2VkIFdlYWs8
Pi4gQnV0IHdlIHdhbnQgYXJiaXRyYXJ5IEpTVmFsdWVzLCBub3QganVzdCBjZWxscy4gSXQncyBh
bHNvIHNvbWV3aGF0CisgICAgLy8gY29udmVuaWVudCB0byBoYXZlIGVhZ2VyIG5vdGlmaWNhdGlv
biBvZiBkZWF0aC4KKyAgICBjbGFzcyBWYWx1ZUNsZWFudXAgOiBwdWJsaWMgVW5jb25kaXRpb25h
bEZpbmFsaXplciB7CisgICAgcHVibGljOgorICAgICAgICBWYWx1ZUNsZWFudXAoSW5mZXJyZWRW
YWx1ZSopOworICAgICAgICB2aXJ0dWFsIH5WYWx1ZUNsZWFudXAoKTsKKyAgICAgICAgCisgICAg
cHJvdGVjdGVkOgorICAgICAgICB2b2lkIGZpbmFsaXplVW5jb25kaXRpb25hbGx5KCkgb3ZlcnJp
ZGU7CisgICAgICAgIAorICAgIHByaXZhdGU6CisgICAgICAgIEluZmVycmVkVmFsdWUqIG1fb3du
ZXI7CisgICAgfTsKKyAgICAKKyAgICBmcmllbmQgY2xhc3MgVmFsdWVDbGVhbnVwOworICAgIAor
ICAgIElubGluZVdhdGNocG9pbnRTZXQgbV9zZXQ7CisgICAgV3JpdGVCYXJyaWVyPFVua25vd24+
IG1fdmFsdWU7CisgICAgc3RkOjp1bmlxdWVfcHRyPFZhbHVlQ2xlYW51cD4gbV9jbGVhbnVwOwor
fTsKKworLy8gRklYTUU6IFdlIGNvdWxkIGhhdmUgYW4gSW5saW5lSW5mZXJyZWRWYWx1ZSwgd2hp
Y2ggb25seSBhbGxvY2F0ZXMgdGhlIEluZmVycmVkVmFsdWUgb2JqZWN0IHdoZW4KKy8vIGEgbm90
aWZ5V3JpdGUoKSB0cmFuc2l0aW9ucyB1cyB0b3dhcmRzIHdhdGNoaW5nLCBhbmQgdGhlbiBjbGVh
cnMgdGhlIHJlZmVyZW5jZSAoYWxsb3dpbmcgdGhlIG9iamVjdAorLy8gdG8gZGllKSB3aGVuIHdl
IGdldCBpbnZhbGlkYXRlZC4KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBJbmZl
cnJlZFZhbHVlX2gKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5j
dGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNG
dW5jdGlvbi5jcHAJKHJldmlzaW9uIDE4MjQ5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTRnVuY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OSw2ICs1OSwxMyBAQCBi
b29sIEpTRnVuY3Rpb246OmlzSG9zdEZ1bmN0aW9uTm9uSW5saW5lCiAgICAgcmV0dXJuIGlzSG9z
dEZ1bmN0aW9uKCk7CiB9CiAKK0pTRnVuY3Rpb24qIEpTRnVuY3Rpb246OmNyZWF0ZShWTSYgdm0s
IEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSwgSlNTY29wZSogc2NvcGUpCit7CisgICAg
SlNGdW5jdGlvbiogcmVzdWx0ID0gY3JlYXRlSW1wbCh2bSwgZXhlY3V0YWJsZSwgc2NvcGUpOwor
ICAgIGV4ZWN1dGFibGUtPnNpbmdsZXRvbkZ1bmN0aW9uKCktPm5vdGlmeVdyaXRlKHZtLCByZXN1
bHQsICJBbGxvY2F0aW5nIGEgZnVuY3Rpb24iKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiBK
U0Z1bmN0aW9uKiBKU0Z1bmN0aW9uOjpjcmVhdGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0LCBpbnQgbGVuZ3RoLCBjb25zdCBTdHJpbmcmIG5hbWUsIE5hdGl2ZUZ1bmN0aW9u
IG5hdGl2ZUZ1bmN0aW9uLCBJbnRyaW5zaWMgaW50cmluc2ljLCBOYXRpdmVGdW5jdGlvbiBuYXRp
dmVDb25zdHJ1Y3RvcikKIHsKICAgICBOYXRpdmVFeGVjdXRhYmxlKiBleGVjdXRhYmxlOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaAkocmV2aXNpb24g
MTgyNDk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yNCw2ICsyNCw3IEBACiAjaWZuZGVmIEpTRnVuY3Rpb25faAogI2Rl
ZmluZSBKU0Z1bmN0aW9uX2gKIAorI2luY2x1ZGUgIkV4ZWN1dGFibGUuaCIKICNpbmNsdWRlICJJ
bnRlcm5hbEZ1bmN0aW9uLmgiCiAjaW5jbHVkZSAiSlNDYWxsZWUuaCIKICNpbmNsdWRlICJKU1Nj
b3BlLmgiCkBAIC01OSwxNSArNjAsMTUgQEAgcHVibGljOgogICAgIHR5cGVkZWYgSlNDYWxsZWUg
QmFzZTsKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBKU0Z1bmN0aW9uKiBjcmVhdGUo
Vk0mLCBKU0dsb2JhbE9iamVjdCosIGludCBsZW5ndGgsIGNvbnN0IFN0cmluZyYgbmFtZSwgTmF0
aXZlRnVuY3Rpb24sIEludHJpbnNpYyA9IE5vSW50cmluc2ljLCBOYXRpdmVGdW5jdGlvbiBuYXRp
dmVDb25zdHJ1Y3RvciA9IGNhbGxIb3N0RnVuY3Rpb25Bc0NvbnN0cnVjdG9yKTsKLQotICAgIHN0
YXRpYyBKU0Z1bmN0aW9uKiBjcmVhdGUoVk0mIHZtLCBGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1
dGFibGUsIEpTU2NvcGUqIHNjb3BlKQorICAgIAorICAgIHN0YXRpYyBKU0Z1bmN0aW9uKiBjcmVh
dGVXaXRoSW52YWxpZGF0ZWRSZWFsbG9jYXRpb25XYXRjaHBvaW50KFZNJiB2bSwgRnVuY3Rpb25F
eGVjdXRhYmxlKiBleGVjdXRhYmxlLCBKU1Njb3BlKiBzY29wZSkKICAgICB7Ci0gICAgICAgIEpT
RnVuY3Rpb24qIGZ1bmN0aW9uID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNGdW5jdGlv
bj4odm0uaGVhcCkpIEpTRnVuY3Rpb24odm0sIGV4ZWN1dGFibGUsIHNjb3BlKTsKLSAgICAgICAg
QVNTRVJUKGZ1bmN0aW9uLT5zdHJ1Y3R1cmUoKS0+Z2xvYmFsT2JqZWN0KCkpOwotICAgICAgICBm
dW5jdGlvbi0+ZmluaXNoQ3JlYXRpb24odm0pOwotICAgICAgICByZXR1cm4gZnVuY3Rpb247Cisg
ICAgICAgIEFTU0VSVChleGVjdXRhYmxlLT5zaW5nbGV0b25GdW5jdGlvbigpLT5oYXNCZWVuSW52
YWxpZGF0ZWQoKSk7CisgICAgICAgIHJldHVybiBjcmVhdGVJbXBsKHZtLCBleGVjdXRhYmxlLCBz
Y29wZSk7CiAgICAgfQogCisgICAgc3RhdGljIEpTRnVuY3Rpb24qIGNyZWF0ZShWTSYsIEZ1bmN0
aW9uRXhlY3V0YWJsZSosIEpTU2NvcGUqKTsKKwogICAgIHN0YXRpYyBKU0Z1bmN0aW9uKiBjcmVh
dGVCdWlsdGluRnVuY3Rpb24oVk0mLCBGdW5jdGlvbkV4ZWN1dGFibGUqLCBKU0dsb2JhbE9iamVj
dCopOwogCiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKQEAgLTE0OSw2ICsxNTAs
MTQgQEAgcHJvdGVjdGVkOgogICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwg
U2xvdFZpc2l0b3ImKTsKIAogcHJpdmF0ZToKKyAgICBzdGF0aWMgSlNGdW5jdGlvbiogY3JlYXRl
SW1wbChWTSYgdm0sIEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSwgSlNTY29wZSogc2Nv
cGUpCisgICAgeworICAgICAgICBKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9IG5ldyAoTm90TnVsbCwg
YWxsb2NhdGVDZWxsPEpTRnVuY3Rpb24+KHZtLmhlYXApKSBKU0Z1bmN0aW9uKHZtLCBleGVjdXRh
YmxlLCBzY29wZSk7CisgICAgICAgIEFTU0VSVChmdW5jdGlvbi0+c3RydWN0dXJlKCktPmdsb2Jh
bE9iamVjdCgpKTsKKyAgICAgICAgZnVuY3Rpb24tPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICAg
ICAgcmV0dXJuIGZ1bmN0aW9uOworICAgIH0KKyAgICAKICAgICBmcmllbmQgY2xhc3MgTExJbnRP
ZmZzZXRzRXh0cmFjdG9yOwogCiAgICAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIGFyZ3VtZW50c0dl
dHRlcihFeGVjU3RhdGUqLCBKU09iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBQcm9wZXJ0eU5hbWUp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2Jq
ZWN0LmNwcAkocmV2aXNpb24gMTgyNDk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNHbG9iYWxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjUsNiArMTI1LDcgQEAK
ICNpbmNsdWRlICJTeW1ib2xDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIlN5bWJvbFByb3RvdHlw
ZS5oIgogI2luY2x1ZGUgIlZhcmlhYmxlV2F0Y2hwb2ludFNldElubGluZXMuaCIKKyNpbmNsdWRl
ICJWYXJpYWJsZVdyaXRlRmlyZURldGFpbC5oIgogI2luY2x1ZGUgIldlYWtHQ01hcElubGluZXMu
aCIKICNpbmNsdWRlICJXZWFrTWFwQ29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJXZWFrTWFwUHJv
dG90eXBlLmgiCkBAIC00ODksNyArNDkwLDcgQEAgSlNHbG9iYWxPYmplY3Q6Ok5ld0dsb2JhbFZh
ciBKU0dsb2JhbE9iagogICAgIFNjb3BlT2Zmc2V0IG9mZnNldCA9IHN5bWJvbFRhYmxlKCktPnRh
a2VOZXh0U2NvcGVPZmZzZXQobG9ja2VyKTsKICAgICBTeW1ib2xUYWJsZUVudHJ5IG5ld0VudHJ5
KFZhck9mZnNldChvZmZzZXQpLCAoY29uc3RhbnRNb2RlID09IElzQ29uc3RhbnQpID8gUmVhZE9u
bHkgOiAwKTsKICAgICBpZiAoY29uc3RhbnRNb2RlID09IElzVmFyaWFibGUpCi0gICAgICAgIG5l
d0VudHJ5LnByZXBhcmVUb1dhdGNoKHN5bWJvbFRhYmxlKCkpOworICAgICAgICBuZXdFbnRyeS5w
cmVwYXJlVG9XYXRjaCgpOwogICAgIGVsc2UKICAgICAgICAgbmV3RW50cnkuZGlzYWJsZVdhdGNo
aW5nKCk7CiAgICAgc3ltYm9sVGFibGUoKS0+YWRkKGxvY2tlciwgaWRlbnQuaW1wbCgpLCBuZXdF
bnRyeSk7CkBAIC01MTAsNyArNTExLDcgQEAgdm9pZCBKU0dsb2JhbE9iamVjdDo6YWRkRnVuY3Rp
b24oRXhlY1N0YQogICAgIE5ld0dsb2JhbFZhciB2YXIgPSBhZGRHbG9iYWxWYXIocHJvcGVydHlO
YW1lLCBJc1ZhcmlhYmxlKTsKICAgICB2YXJpYWJsZUF0KHZhci5vZmZzZXQpLnNldChleGVjLT52
bSgpLCB0aGlzLCB2YWx1ZSk7CiAgICAgaWYgKHZhci5zZXQpCi0gICAgICAgIHZhci5zZXQtPm5v
dGlmeVdyaXRlKHZtLCB2YWx1ZSwgVmFyaWFibGVXcml0ZUZpcmVEZXRhaWwodGhpcywgcHJvcGVy
dHlOYW1lKSk7CisgICAgICAgIHZhci5zZXQtPnRvdWNoKFZhcmlhYmxlV3JpdGVGaXJlRGV0YWls
KHRoaXMsIHByb3BlcnR5TmFtZSkpOwogfQogCiBzdGF0aWMgaW5saW5lIEpTT2JqZWN0KiBsYXN0
SW5Qcm90b3R5cGVDaGFpbihKU09iamVjdCogb2JqZWN0KQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCShyZXZpc2lvbiAxODI0OTgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zMzQsNyArMzM0LDcgQEAgcHJvdGVjdGVkOgogCiAgICAgc3RydWN0IE5ld0ds
b2JhbFZhciB7CiAgICAgICAgIFNjb3BlT2Zmc2V0IG9mZnNldDsKLSAgICAgICAgVmFyaWFibGVX
YXRjaHBvaW50U2V0KiBzZXQ7CisgICAgICAgIFdhdGNocG9pbnRTZXQqIHNldDsKICAgICB9Owog
ICAgIE5ld0dsb2JhbFZhciBhZGRHbG9iYWxWYXIoY29uc3QgSWRlbnRpZmllciYsIENvbnN0YW50
TW9kZSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTGV4aWNhbEVu
dmlyb25tZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0xleGljYWxFbnZpcm9ubWVudC5jcHAJKHJldmlzaW9uIDE4MjQ5OCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTGV4aWNhbEVudmlyb25tZW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNzcsNiArNzcsNyBAQCBpbmxpbmUgYm9vbCBKU0xleGljYWxFbnZpcm9ubWVudDo6
c3ltYm9sCiAgICAgQVNTRVJUKCFIZWFwOjpoZWFwKHZhbHVlKSB8fCBIZWFwOjpoZWFwKHZhbHVl
KSA9PSBIZWFwOjpoZWFwKHRoaXMpKTsKICAgICAKICAgICBXcml0ZUJhcnJpZXJCYXNlPFVua25v
d24+KiByZWc7CisgICAgV2F0Y2hwb2ludFNldCogc2V0OwogICAgIHsKICAgICAgICAgR0NTYWZl
Q29uY3VycmVudEpJVExvY2tlciBsb2NrZXIoc3ltYm9sVGFibGUoKS0+bV9sb2NrLCBleGVjLT52
bSgpLmhlYXApOwogICAgICAgICBTeW1ib2xUYWJsZTo6TWFwOjppdGVyYXRvciBpdGVyID0gc3lt
Ym9sVGFibGUoKS0+ZmluZChsb2NrZXIsIHByb3BlcnR5TmFtZS51aWQoKSk7CkBAIC05MiwxMSAr
OTMsMTIgQEAgaW5saW5lIGJvb2wgSlNMZXhpY2FsRW52aXJvbm1lbnQ6OnN5bWJvbAogICAgICAg
ICAvLyBEZWZlbmQgYWdhaW5zdCB0aGUgaW5zcGVjdG9yIGFza2luZyBmb3IgYSB2YXIgYWZ0ZXIg
aXQgaGFzIGJlZW4gb3B0aW1pemVkIG91dC4KICAgICAgICAgaWYgKCFpc1ZhbGlkKG9mZnNldCkp
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmIChWYXJpYWJsZVdhdGNocG9p
bnRTZXQqIHNldCA9IGl0ZXItPnZhbHVlLndhdGNocG9pbnRTZXQoKSkKLSAgICAgICAgICAgIHNl
dC0+aW52YWxpZGF0ZShWYXJpYWJsZVdyaXRlRmlyZURldGFpbCh0aGlzLCBwcm9wZXJ0eU5hbWUp
KTsgLy8gRG9uJ3QgbWVzcyBhcm91bmQgLSBpZiB3ZSBoYWQgZm91bmQgdGhpcyBzdGF0aWNhbGx5
LCB3ZSB3b3VsZCBoYXZlIGludmFsaWRhdGVkIGl0LgorICAgICAgICBzZXQgPSBpdGVyLT52YWx1
ZS53YXRjaHBvaW50U2V0KCk7CiAgICAgICAgIHJlZyA9ICZ2YXJpYWJsZUF0KG9mZnNldCk7CiAg
ICAgfQogICAgIHJlZy0+c2V0KHZtLCB0aGlzLCB2YWx1ZSk7CisgICAgaWYgKHNldCkKKyAgICAg
ICAgc2V0LT5pbnZhbGlkYXRlKFZhcmlhYmxlV3JpdGVGaXJlRGV0YWlsKHRoaXMsIHByb3BlcnR5
TmFtZSkpOyAvLyBEb24ndCBtZXNzIGFyb3VuZCAtIGlmIHdlIGhhZCBmb3VuZCB0aGlzIHN0YXRp
Y2FsbHksIHdlIHdvdWxkIGhhdmUgaW52YWxpZGF0ZWQgaXQuCiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2NvcGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Njb3BlLmgJKHJldmlzaW9u
IDE4MjQ5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2NvcGUuaAkod29y
a2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIFNj
b3BlQ2hhaW5JdGVyYXRvcjsKLWNsYXNzIFZhcmlhYmxlV2F0Y2hwb2ludFNldDsKK2NsYXNzIFdh
dGNocG9pbnRTZXQ7CiAKIGVudW0gUmVzb2x2ZU1vZGUgewogICAgIFRocm93SWZOb3RGb3VuZCwK
QEAgLTEwMiw3ICsxMDIsNyBAQCBpbmxpbmUgYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhS
ZXNvCiB9CiAKIHN0cnVjdCBSZXNvbHZlT3AgewotICAgIFJlc29sdmVPcChSZXNvbHZlVHlwZSB0
eXBlLCBzaXplX3QgZGVwdGgsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0xleGljYWxFbnZpcm9u
bWVudCogbGV4aWNhbEVudmlyb25tZW50LCBWYXJpYWJsZVdhdGNocG9pbnRTZXQqIHdhdGNocG9p
bnRTZXQsIHVpbnRwdHJfdCBvcGVyYW5kKQorICAgIFJlc29sdmVPcChSZXNvbHZlVHlwZSB0eXBl
LCBzaXplX3QgZGVwdGgsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0xleGljYWxFbnZpcm9ubWVu
dCogbGV4aWNhbEVudmlyb25tZW50LCBXYXRjaHBvaW50U2V0KiB3YXRjaHBvaW50U2V0LCB1aW50
cHRyX3Qgb3BlcmFuZCkKICAgICAgICAgOiB0eXBlKHR5cGUpCiAgICAgICAgICwgZGVwdGgoZGVw
dGgpCiAgICAgICAgICwgc3RydWN0dXJlKHN0cnVjdHVyZSkKQEAgLTExNiw3ICsxMTYsNyBAQCBz
dHJ1Y3QgUmVzb2x2ZU9wIHsKICAgICBzaXplX3QgZGVwdGg7CiAgICAgU3RydWN0dXJlKiBzdHJ1
Y3R1cmU7CiAgICAgSlNMZXhpY2FsRW52aXJvbm1lbnQqIGxleGljYWxFbnZpcm9ubWVudDsKLSAg
ICBWYXJpYWJsZVdhdGNocG9pbnRTZXQqIHdhdGNocG9pbnRTZXQ7CisgICAgV2F0Y2hwb2ludFNl
dCogd2F0Y2hwb2ludFNldDsKICAgICB1aW50cHRyX3Qgb3BlcmFuZDsKIH07CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0
LmgJKHJldmlzaW9uIDE4MjQ5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
U3ltYm9sVGFibGVPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQAogI2lu
Y2x1ZGUgIkpTU2NvcGUuaCIKICNpbmNsdWRlICJQcm9wZXJ0eURlc2NyaXB0b3IuaCIKICNpbmNs
dWRlICJTeW1ib2xUYWJsZS5oIgotI2luY2x1ZGUgIlZhcmlhYmxlV2F0Y2hwb2ludFNldElubGlu
ZXMuaCIKKyNpbmNsdWRlICJWYXJpYWJsZVdyaXRlRmlyZURldGFpbC5oIgogCiBuYW1lc3BhY2Ug
SlNDIHsKIApAQCAtMTI2LDYgKzEyNiw3IEBAIGlubGluZSBib29sIHN5bWJvbFRhYmxlUHV0KAog
ICAgIEFTU0VSVCghSGVhcDo6aGVhcCh2YWx1ZSkgfHwgSGVhcDo6aGVhcCh2YWx1ZSkgPT0gSGVh
cDo6aGVhcChvYmplY3QpKTsKICAgICAKICAgICBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiBy
ZWc7CisgICAgV2F0Y2hwb2ludFNldCogc2V0OwogICAgIHsKICAgICAgICAgU3ltYm9sVGFibGUm
IHN5bWJvbFRhYmxlID0gKm9iamVjdC0+c3ltYm9sVGFibGUoKTsKICAgICAgICAgLy8gRklYTUU6
IFRoaXMgaXMgdmVyeSBzdXNwaWNpb3VzLiBXZSBzaG91bGRuJ3QgbmVlZCBhIEdDLXNhZmUgbG9j
ayBoZXJlLgpAQCAtMTQyLDE3ICsxNDMsMTUgQEAgaW5saW5lIGJvb2wgc3ltYm9sVGFibGVQdXQo
CiAgICAgICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhlYywgU3RyaWN0TW9kZVJlYWRvbmx5
UHJvcGVydHlXcml0ZUVycm9yKTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9
Ci0gICAgICAgIGlmIChWYXJpYWJsZVdhdGNocG9pbnRTZXQqIHNldCA9IGl0ZXItPnZhbHVlLndh
dGNocG9pbnRTZXQoKSkgewotICAgICAgICAgICAgLy8gRklYTUU6IEl0J3Mgc3RyYW5nZSB0aGF0
IHdlJ3JlIGRvaW5nIHRoaXMgd2hpbGUgaG9sZGluZyB0aGUgc3ltYm9sIHRhYmxlJ3MgbG9jay4K
LSAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0x
MzQ2MDEKLSAgICAgICAgICAgIHNldC0+bm90aWZ5V3JpdGUodm0sIHZhbHVlLCBvYmplY3QsIHBy
b3BlcnR5TmFtZSk7Ci0gICAgICAgIH0KKyAgICAgICAgc2V0ID0gaXRlci0+dmFsdWUud2F0Y2hw
b2ludFNldCgpOwogICAgICAgICByZWcgPSAmb2JqZWN0LT52YXJpYWJsZUF0KGZhc3RFbnRyeS5z
Y29wZU9mZnNldCgpKTsKICAgICB9CiAgICAgLy8gSSdkIHByZWZlciB3ZSBub3QgaG9sZCBsb2Nr
IHdoaWxlIGV4ZWN1dGluZyBiYXJyaWVycywgc2luY2UgSSBwcmVmZXIgdG8gcmVzZXJ2ZQogICAg
IC8vIHRoZSByaWdodCBmb3IgYmFycmllcnMgdG8gYmUgYWJsZSB0byB0cmlnZ2VyIEdDLiBBbmQg
SSBkb24ndCB3YW50IHRvIGhvbGQgVk0KICAgICAvLyBsb2NrcyB3aGlsZSBHQydpbmcuCiAgICAg
cmVnLT5zZXQodm0sIG9iamVjdCwgdmFsdWUpOworICAgIGlmIChzZXQpCisgICAgICAgIFZhcmlh
YmxlV3JpdGVGaXJlRGV0YWlsOjp0b3VjaChzZXQsIG9iamVjdCwgcHJvcGVydHlOYW1lKTsKICAg
ICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTY0LDYgKzE2Myw3IEBAIGlubGluZSBib29sIHN5bWJv
bFRhYmxlUHV0V2l0aEF0dHJpYnV0ZXMKICAgICBBU1NFUlQoIUhlYXA6OmhlYXAodmFsdWUpIHx8
IEhlYXA6OmhlYXAodmFsdWUpID09IEhlYXA6OmhlYXAob2JqZWN0KSk7CiAKICAgICBXcml0ZUJh
cnJpZXJCYXNlPFVua25vd24+KiByZWc7CisgICAgV2F0Y2hwb2ludFNldCogc2V0OwogICAgIHsK
ICAgICAgICAgU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlID0gKm9iamVjdC0+c3ltYm9sVGFibGUo
KTsKICAgICAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIoc3ltYm9sVGFibGUubV9sb2Nr
KTsKQEAgLTE3MiwxMiArMTcyLDEzIEBAIGlubGluZSBib29sIHN5bWJvbFRhYmxlUHV0V2l0aEF0
dHJpYnV0ZXMKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgU3ltYm9sVGFibGVF
bnRyeSYgZW50cnkgPSBpdGVyLT52YWx1ZTsKICAgICAgICAgQVNTRVJUKCFlbnRyeS5pc051bGwo
KSk7Ci0gICAgICAgIGlmIChWYXJpYWJsZVdhdGNocG9pbnRTZXQqIHNldCA9IGVudHJ5LndhdGNo
cG9pbnRTZXQoKSkKLSAgICAgICAgICAgIHNldC0+bm90aWZ5V3JpdGUodm0sIHZhbHVlLCBvYmpl
Y3QsIHByb3BlcnR5TmFtZSk7CisgICAgICAgIHNldCA9IGVudHJ5LndhdGNocG9pbnRTZXQoKTsK
ICAgICAgICAgZW50cnkuc2V0QXR0cmlidXRlcyhhdHRyaWJ1dGVzKTsKICAgICAgICAgcmVnID0g
Jm9iamVjdC0+dmFyaWFibGVBdChlbnRyeS5zY29wZU9mZnNldCgpKTsKICAgICB9CiAgICAgcmVn
LT5zZXQodm0sIG9iamVjdCwgdmFsdWUpOworICAgIGlmIChzZXQpCisgICAgICAgIFZhcmlhYmxl
V3JpdGVGaXJlRGV0YWlsOjp0b3VjaChzZXQsIG9iamVjdCwgcHJvcGVydHlOYW1lKTsKICAgICBy
ZXR1cm4gdHJ1ZTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHV0
UHJvcGVydHlTbG90LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvUHV0UHJvcGVydHlTbG90LmgJKHJldmlzaW9uIDE4MjQ5OCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL1B1dFByb3BlcnR5U2xvdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2
ICsyOCw3IEBACiAjZGVmaW5lIFB1dFByb3BlcnR5U2xvdF9oCiAKICNpbmNsdWRlICJKU0NKU1Zh
bHVlLmgiCisjaW5jbHVkZSAiUHJvcGVydHlPZmZzZXQuaCIKIAogI2luY2x1ZGUgPHd0Zi9Bc3Nl
cnRpb25zLmg+CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRh
YmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1i
b2xUYWJsZS5jcHAJKHJldmlzaW9uIDE4MjQ5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N5bWJvbFRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzMsNyArMzMsNiBAQAog
I2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJTbG90VmlzaXRvcklubGluZXMuaCIK
ICNpbmNsdWRlICJUeXBlUHJvZmlsZXIuaCIKLSNpbmNsdWRlICJWYXJpYWJsZVdhdGNocG9pbnRT
ZXRJbmxpbmVzLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCkBAIC02MCwyMSArNTksMTQgQEAgdm9p
ZCBTeW1ib2xUYWJsZUVudHJ5OjpmcmVlRmF0RW50cnlTbG93KAogICAgIGRlbGV0ZSBmYXRFbnRy
eSgpOwogfQogCi1KU1ZhbHVlIFN5bWJvbFRhYmxlRW50cnk6OmluZmVycmVkVmFsdWUoKQotewot
ICAgIGlmICghaXNGYXQoKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKLSAgICByZXR1cm4g
ZmF0RW50cnkoKS0+bV93YXRjaHBvaW50cy0+aW5mZXJyZWRWYWx1ZSgpOwotfQotCi12b2lkIFN5
bWJvbFRhYmxlRW50cnk6OnByZXBhcmVUb1dhdGNoKFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSkK
K3ZvaWQgU3ltYm9sVGFibGVFbnRyeTo6cHJlcGFyZVRvV2F0Y2goKQogewogICAgIGlmICghaXNX
YXRjaGFibGUoKSkKICAgICAgICAgcmV0dXJuOwogICAgIEZhdEVudHJ5KiBlbnRyeSA9IGluZmxh
dGUoKTsKICAgICBpZiAoZW50cnktPm1fd2F0Y2hwb2ludHMpCiAgICAgICAgIHJldHVybjsKLSAg
ICBlbnRyeS0+bV93YXRjaHBvaW50cyA9IGFkb3B0UmVmKG5ldyBWYXJpYWJsZVdhdGNocG9pbnRT
ZXQoKnN5bWJvbFRhYmxlKSk7CisgICAgZW50cnktPm1fd2F0Y2hwb2ludHMgPSBhZG9wdFJlZihu
ZXcgV2F0Y2hwb2ludFNldChDbGVhcldhdGNocG9pbnQpKTsKIH0KIAogdm9pZCBTeW1ib2xUYWJs
ZUVudHJ5OjphZGRXYXRjaHBvaW50KFdhdGNocG9pbnQqIHdhdGNocG9pbnQpCkBAIC04MiwxNSAr
NzQsNiBAQCB2b2lkIFN5bWJvbFRhYmxlRW50cnk6OmFkZFdhdGNocG9pbnQoV2F0CiAgICAgZmF0
RW50cnkoKS0+bV93YXRjaHBvaW50cy0+YWRkKHdhdGNocG9pbnQpOwogfQogCi12b2lkIFN5bWJv
bFRhYmxlRW50cnk6Om5vdGlmeVdyaXRlU2xvdyhWTSYgdm0sIEpTVmFsdWUgdmFsdWUsIGNvbnN0
IEZpcmVEZXRhaWwmIGRldGFpbCkKLXsKLSAgICBWYXJpYWJsZVdhdGNocG9pbnRTZXQqIHdhdGNo
cG9pbnRzID0gZmF0RW50cnkoKS0+bV93YXRjaHBvaW50cy5nZXQoKTsKLSAgICBpZiAoIXdhdGNo
cG9pbnRzKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgd2F0Y2hwb2ludHMtPm5vdGlmeVdy
aXRlKHZtLCB2YWx1ZSwgZGV0YWlsKTsKLX0KLQogU3ltYm9sVGFibGVFbnRyeTo6RmF0RW50cnkq
IFN5bWJvbFRhYmxlRW50cnk6OmluZmxhdGVTbG93KCkKIHsKICAgICBGYXRFbnRyeSogZW50cnkg
PSBuZXcgRmF0RW50cnkobV9iaXRzKTsKQEAgLTEwMSw3ICs4NCw2IEBAIFN5bWJvbFRhYmxlRW50
cnk6OkZhdEVudHJ5KiBTeW1ib2xUYWJsZUUKIFN5bWJvbFRhYmxlOjpTeW1ib2xUYWJsZShWTSYg
dm0pCiAgICAgOiBKU0NlbGwodm0sIHZtLnN5bWJvbFRhYmxlU3RydWN0dXJlLmdldCgpKQogICAg
ICwgbV91c2VzTm9uU3RyaWN0RXZhbChmYWxzZSkKLSAgICAsIG1fZnVuY3Rpb25FbnRlcmVkT25j
ZShDbGVhcldhdGNocG9pbnQpCiB7CiB9CiAKQEAgLTExMywzNiArOTUsMTEgQEAgdm9pZCBTeW1i
b2xUYWJsZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIAogICAgIAogICAgIHZpc2l0b3IuYXBwZW5k
KCZ0aGlzU3ltYm9sVGFibGUtPm1fYXJndW1lbnRzKTsKICAgICAKLSAgICBpZiAoIXRoaXNTeW1i
b2xUYWJsZS0+bV93YXRjaHBvaW50Q2xlYW51cCkgewotICAgICAgICB0aGlzU3ltYm9sVGFibGUt
Pm1fd2F0Y2hwb2ludENsZWFudXAgPQotICAgICAgICAgICAgc3RkOjptYWtlX3VuaXF1ZTxXYXRj
aHBvaW50Q2xlYW51cD4odGhpc1N5bWJvbFRhYmxlKTsKLSAgICB9Ci0gICAgCi0gICAgdmlzaXRv
ci5hZGRVbmNvbmRpdGlvbmFsRmluYWxpemVyKHRoaXNTeW1ib2xUYWJsZS0+bV93YXRjaHBvaW50
Q2xlYW51cC5nZXQoKSk7Ci0gICAgCiAgICAgLy8gU2F2ZSBzb21lIG1lbW9yeS4gVGhpcyBpcyBP
KG4pIHRvIHJlYnVpbGQgYW5kIHdlIGRvIHNvIG9uIHRoZSBmbHkuCiAgICAgQ29uY3VycmVudEpJ
VExvY2tlciBsb2NrZXIodGhpc1N5bWJvbFRhYmxlLT5tX2xvY2spOwogICAgIHRoaXNTeW1ib2xU
YWJsZS0+bV9sb2NhbFRvRW50cnkgPSBudWxscHRyOwogfQogCi1TeW1ib2xUYWJsZTo6V2F0Y2hw
b2ludENsZWFudXA6OldhdGNocG9pbnRDbGVhbnVwKFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSkK
LSAgICA6IG1fc3ltYm9sVGFibGUoc3ltYm9sVGFibGUpCi17Ci19Ci0KLVN5bWJvbFRhYmxlOjpX
YXRjaHBvaW50Q2xlYW51cDo6fldhdGNocG9pbnRDbGVhbnVwKCkgeyB9Ci0KLXZvaWQgU3ltYm9s
VGFibGU6OldhdGNocG9pbnRDbGVhbnVwOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSgpCi17Ci0g
ICAgU3RyaW5nRmlyZURldGFpbCBkZXRhaWwoIlN5bWJvbCB0YWJsZSBjbGVhbi11cCBkdXJpbmcg
R0MiKTsKLSAgICBNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX3N5bWJvbFRhYmxlLT5tX21hcC5iZWdp
bigpOwotICAgIE1hcDo6aXRlcmF0b3IgZW5kID0gbV9zeW1ib2xUYWJsZS0+bV9tYXAuZW5kKCk7
Ci0gICAgZm9yICg7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKLSAgICAgICAgaWYgKFZhcmlhYmxl
V2F0Y2hwb2ludFNldCogc2V0ID0gaXRlci0+dmFsdWUud2F0Y2hwb2ludFNldCgpKQotICAgICAg
ICAgICAgc2V0LT5maW5hbGl6ZVVuY29uZGl0aW9uYWxseShkZXRhaWwpOwotICAgIH0KLX0KLQog
Y29uc3QgU3ltYm9sVGFibGU6OkxvY2FsVG9FbnRyeVZlYyYgU3ltYm9sVGFibGU6OmxvY2FsVG9F
bnRyeShjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJikKIHsKICAgICBpZiAoVU5MSUtFTFkoIW1f
bG9jYWxUb0VudHJ5KSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3lt
Ym9sVGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
eW1ib2xUYWJsZS5oCShyZXZpc2lvbiAxODI0OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TeW1ib2xUYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwxMyArMzUsMTUgQEAK
ICNpbmNsdWRlICJTY29wZWRBcmd1bWVudHNUYWJsZS5oIgogI2luY2x1ZGUgIlR5cGVMb2NhdGlv
bi5oIgogI2luY2x1ZGUgIlZhck9mZnNldC5oIgotI2luY2x1ZGUgIlZhcmlhYmxlV2F0Y2hwb2lu
dFNldC5oIgorI2luY2x1ZGUgIldhdGNocG9pbnQuaCIKICNpbmNsdWRlIDxtZW1vcnk+CiAjaW5j
bHVkZSA8d3RmL0hhc2hUcmFpdHMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdJbXBsLmg+
CiAKIG5hbWVzcGFjZSBKU0MgewogCitjbGFzcyBTeW1ib2xUYWJsZTsKKwogc3RhdGljIEFMV0FZ
U19JTkxJTkUgaW50IG1pc3NpbmdTeW1ib2xNYXJrZXIoKSB7IHJldHVybiBzdGQ6Om51bWVyaWNf
bGltaXRzPGludD46Om1heCgpOyB9CiAKIC8vIFRoZSBiaXQgdHdpZGRsaW5nIGluIHRoaXMgY2xh
c3MgYXNzdW1lcyB0aGF0IGV2ZXJ5IHJlZ2lzdGVyIGluZGV4IGlzIGEKQEAgLTYzLDExICs2NSwx
MSBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSBpbnQgbWlzc2luZ1N5bWJvbE1hCiAvLyBjb3VudGVk
IHBvaW50ZXIgdG8gYSBzaGFyZWQgV2F0Y2hwb2ludFNldC4gVGh1cywgaW4tcGxhY2UgZWRpdHMg
b2YgdGhlCiAvLyBXYXRjaHBvaW50U2V0IHdpbGwgbWFuaWZlc3QgaW4gYWxsIGNvcGllcy4gSGVy
ZSdzIGEgcGljdHVyZToKIC8vCi0vLyBTeW1ib2xUYWJsZUVudHJ5IC0tPiBGYXRFbnRyeSAtLT4g
VmFyaWFibGVXYXRjaHBvaW50U2V0CisvLyBTeW1ib2xUYWJsZUVudHJ5IC0tPiBGYXRFbnRyeSAt
LT4gV2F0Y2hwb2ludFNldAogLy8KIC8vIElmIHlvdSBtYWtlIGEgY29weSBvZiBhIFN5bWJvbFRh
YmxlRW50cnksIHlvdSB3aWxsIGhhdmU6CiAvLwotLy8gb3JpZ2luYWw6IFN5bWJvbFRhYmxlRW50
cnkgLS0+IEZhdEVudHJ5IC0tPiBWYXJpYWJsZVdhdGNocG9pbnRTZXQKKy8vIG9yaWdpbmFsOiBT
eW1ib2xUYWJsZUVudHJ5IC0tPiBGYXRFbnRyeSAtLT4gV2F0Y2hwb2ludFNldAogLy8gY29weTog
ICAgIFN5bWJvbFRhYmxlRW50cnkgLS0+IEZhdEVudHJ5IC0tLS0tXgogCiBzdHJ1Y3QgU3ltYm9s
VGFibGVFbnRyeSB7CkBAIC0yNjAsMzIgKzI2Miw0NCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVy
biBiaXRzKCkgJiBEb250RW51bUZsYWc7CiAgICAgfQogICAgIAotICAgIEpTVmFsdWUgaW5mZXJy
ZWRWYWx1ZSgpOwotCiAgICAgdm9pZCBkaXNhYmxlV2F0Y2hpbmcoKQogICAgIHsKKyAgICAgICAg
aWYgKFdhdGNocG9pbnRTZXQqIHNldCA9IHdhdGNocG9pbnRTZXQoKSkKKyAgICAgICAgICAgIHNl
dC0+aW52YWxpZGF0ZSgiRGlzYWJsaW5nIHdhdGNoaW5nIGluIHN5bWJvbCB0YWJsZSIpOwogICAg
ICAgICBpZiAodmFyT2Zmc2V0KCkuaXNTY29wZSgpKQogICAgICAgICAgICAgcGFjayh2YXJPZmZz
ZXQoKSwgZmFsc2UsIGlzUmVhZE9ubHkoKSwgaXNEb250RW51bSgpKTsKICAgICB9CiAgICAgCi0g
ICAgdm9pZCBwcmVwYXJlVG9XYXRjaChTeW1ib2xUYWJsZSopOworICAgIHZvaWQgcHJlcGFyZVRv
V2F0Y2goKTsKICAgICAKICAgICB2b2lkIGFkZFdhdGNocG9pbnQoV2F0Y2hwb2ludCopOwogICAg
IAotICAgIFZhcmlhYmxlV2F0Y2hwb2ludFNldCogd2F0Y2hwb2ludFNldCgpCisgICAgLy8gVGhp
cyB3YXRjaHBvaW50IHNldCBpcyBpbml0aWFsaXplZCBjbGVhciwgYW5kIGdvZXMgdGhyb3VnaCB0
aGUgZm9sbG93aW5nIHN0YXRlIHRyYW5zaXRpb25zOgorICAgIC8vIAorICAgIC8vIEZpcnN0IHdy
aXRlIHRvIHRoaXMgdmFyLCBpbiBhbnkgc2NvcGUgdGhhdCBoYXMgdGhpcyBzeW1ib2wgdGFibGU6
IENsZWFyLT5Jc1dhdGNoZWQuCisgICAgLy8KKyAgICAvLyBTZWNvbmQgd3JpdGUgdG8gdGhpcyB2
YXIsIGluIGFueSBzY29wZSB0aGF0IGhhcyB0aGlzIHN5bWJvbCB0YWJsZTogSXNXYXRjaGVkLT5J
c0ludmFsaWRhdGVkLgorICAgIC8vCisgICAgLy8gV2UgZW5zdXJlIHRoYXQgd2UgdG91Y2ggdGhl
IHNldCAoaS5lLiB0cmlnZ2VyIGl0cyBzdGF0ZSB0cmFuc2l0aW9uKSBhZnRlciB3ZSBkbyB0aGUg
d3JpdGUuIFRoaXMKKyAgICAvLyBtZWFucyB0aGF0IGlmIHlvdSdyZSBpbiB0aGUgY29tcGlsZXIg
dGhyZWFkLCBhbmQgeW91OgorICAgIC8vCisgICAgLy8gMSkgT2JzZXJ2ZSB0aGF0IHRoZSBzZXQg
SXNXYXRjaGVkIGFuZCBjb21taXQgdG8gYWRkaW5nIHlvdXIgd2F0Y2hwb2ludC4KKyAgICAvLyAy
KSBMb2FkIGEgdmFsdWUgZnJvbSBhbnkgc2NvcGUgdGhhdCBoYXMgdGhpcyB3YXRjaHBvaW50IHNl
dC4KKyAgICAvLworICAgIC8vIFRoZW4geW91IGNhbiBiZSBzdXJlIHRoYXQgdGhhdCB2YWx1ZSBp
cyBlaXRoZXIgZ29pbmcgdG8gYmUgdGhlIGNvcnJlY3QgdmFsdWUgZm9yIHRoYXQgdmFyIGZvcmV2
ZXIsCisgICAgLy8gb3IgdGhlIHdhdGNocG9pbnQgc2V0IHdpbGwgaW52YWxpZGF0ZSBhbmQgeW91
J2xsIGdldCBmaXJlZC4KKyAgICAvLworICAgIC8vIEl0J3MgcG9zc2libGUgdG8gd3JpdGUgYSBw
cm9ncmFtIHRoYXQgZmlyc3QgY3JlYXRlcyBtdWx0aXBsZSBzY29wZXMgd2l0aCB0aGUgc2FtZSB2
YXIsIGFuZCB0aGVuCisgICAgLy8gaW5pdGlhbGl6ZXMgdGhhdCB2YXIgaW4ganVzdCBvbmUgb2Yg
dGhlbS4gVGhpcyBtZWFucyB0aGF0IGEgY29tcGlsYXRpb24gY291bGQgY29uc3RhbnQtZm9sZCB0
byBvbmUKKyAgICAvLyBvZiB0aGUgc2NvcGVzIHRoYXQgc3RpbGwgaGFzIGFuIHVuZGVmaW5lZCB2
YWx1ZSBmb3IgdGhpcyB2YXJpYWJsZS4gVGhhdCdzIGZpbmUsIGJlY2F1c2UgYXQgdGhhdAorICAg
IC8vIHBvaW50IGFueSB3cml0ZSB0byBhbnkgb2YgdGhlIGluc3RhbmNlcyBvZiB0aGF0IHZhcmlh
YmxlIHdvdWxkIGZpcmUgdGhlIHdhdGNocG9pbnQuCisgICAgV2F0Y2hwb2ludFNldCogd2F0Y2hw
b2ludFNldCgpCiAgICAgewogICAgICAgICBpZiAoIWlzRmF0KCkpCiAgICAgICAgICAgICByZXR1
cm4gMDsKICAgICAgICAgcmV0dXJuIGZhdEVudHJ5KCktPm1fd2F0Y2hwb2ludHMuZ2V0KCk7CiAg
ICAgfQogICAgIAotICAgIEFMV0FZU19JTkxJTkUgdm9pZCBub3RpZnlXcml0ZShWTSYgdm0sIEpT
VmFsdWUgdmFsdWUsIGNvbnN0IEZpcmVEZXRhaWwmIGRldGFpbCkKLSAgICB7Ci0gICAgICAgIGlm
IChMSUtFTFkoIWlzRmF0KCkpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBub3RpZnlX
cml0ZVNsb3codm0sIHZhbHVlLCBkZXRhaWwpOwotICAgIH0KLSAgICAKIHByaXZhdGU6CiAgICAg
c3RhdGljIGNvbnN0IGludHB0cl90IFNsaW1GbGFnID0gMHgxOwogICAgIHN0YXRpYyBjb25zdCBp
bnRwdHJfdCBSZWFkT25seUZsYWcgPSAweDI7CkBAIC0zMDgsNyArMzIyLDcgQEAgcHJpdmF0ZToK
ICAgICAgICAgCiAgICAgICAgIGludHB0cl90IG1fYml0czsgLy8gYWx3YXlzIGhhcyBGYXRGbGFn
IHNldCBhbmQgZXhhY3RseSBtYXRjaGVzIHdoYXQgdGhlIGJpdHMgd291bGQgaGF2ZSBiZWVuIGlm
IHRoaXMgd2Fzbid0IGZhdC4KICAgICAgICAgCi0gICAgICAgIFJlZlB0cjxWYXJpYWJsZVdhdGNo
cG9pbnRTZXQ+IG1fd2F0Y2hwb2ludHM7CisgICAgICAgIFJlZlB0cjxXYXRjaHBvaW50U2V0PiBt
X3dhdGNocG9pbnRzOwogICAgIH07CiAgICAgCiAgICAgU3ltYm9sVGFibGVFbnRyeSYgY29weVNs
b3coY29uc3QgU3ltYm9sVGFibGVFbnRyeSYpOwpAQCAtNjQ2LDE4ICs2NjAsNiBAQCBwcm90ZWN0
ZWQ6CiAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gU3RydWN0dXJl
SXNJbW1vcnRhbCB8IEJhc2U6OlN0cnVjdHVyZUZsYWdzOwogCiBwcml2YXRlOgotICAgIGNsYXNz
IFdhdGNocG9pbnRDbGVhbnVwIDogcHVibGljIFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIgewotICAg
IHB1YmxpYzoKLSAgICAgICAgV2F0Y2hwb2ludENsZWFudXAoU3ltYm9sVGFibGUqKTsKLSAgICAg
ICAgdmlydHVhbCB+V2F0Y2hwb2ludENsZWFudXAoKTsKLSAgICAgICAgCi0gICAgcHJvdGVjdGVk
OgotICAgICAgICB2aXJ0dWFsIHZvaWQgZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoKSBvdmVycmlk
ZTsKLQotICAgIHByaXZhdGU6Ci0gICAgICAgIFN5bWJvbFRhYmxlKiBtX3N5bWJvbFRhYmxlOwot
ICAgIH07Ci0gICAgCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgU3ltYm9sVGFibGUoVk0mKTsKICAg
ICB+U3ltYm9sVGFibGUoKTsKIApAQCAtNjc1LDEyICs2NzcsOSBAQCBwcml2YXRlOgogICAgIAog
ICAgIFdyaXRlQmFycmllcjxTY29wZWRBcmd1bWVudHNUYWJsZT4gbV9hcmd1bWVudHM7CiAgICAg
Ci0gICAgc3RkOjp1bmlxdWVfcHRyPFdhdGNocG9pbnRDbGVhbnVwPiBtX3dhdGNocG9pbnRDbGVh
bnVwOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxMb2NhbFRvRW50cnlWZWM+IG1fbG9jYWxUb0VudHJ5
OwogCiBwdWJsaWM6Ci0gICAgSW5saW5lV2F0Y2hwb2ludFNldCBtX2Z1bmN0aW9uRW50ZXJlZE9u
Y2U7Ci0gICAgCiAgICAgbXV0YWJsZSBDb25jdXJyZW50SklUTG9jayBtX2xvY2s7CiB9OwogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlUHJvZmlsZXIuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVQcm9maWxlci5jcHAJ
KHJldmlzaW9uIDE4MjQ5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVQ
cm9maWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUg
Ikluc3BlY3RvclByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgIlR5cGVMb2NhdGlvbi5oIgor
I2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHJldmlzaW9uIDE4MjQ5OCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjM3LDYgKzIzNyw3IEBAIFZNOjpWTShWTVR5cGUgdm1UeXBlLCBIZWFwVHlwZSBoZWFwVHlw
ZSkKICAgICB1bmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrU3RydWN0dXJlLnNldCgqdGhpcywgVW5s
aW5rZWRGdW5jdGlvbkNvZGVCbG9jazo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwo
KSkpOwogICAgIHByb3BlcnR5VGFibGVTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBQcm9wZXJ0eVRhYmxl
OjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CiAgICAgd2Vha01hcERhdGFT
dHJ1Y3R1cmUuc2V0KCp0aGlzLCBXZWFrTWFwRGF0YTo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAw
LCBqc051bGwoKSkpOworICAgIGluZmVycmVkVmFsdWVTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBJbmZl
cnJlZFZhbHVlOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CiAjaWYgRU5B
QkxFKFBST01JU0VTKQogICAgIHByb21pc2VEZWZlcnJlZFN0cnVjdHVyZS5zZXQoKnRoaXMsIEpT
UHJvbWlzZURlZmVycmVkOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CiAg
ICAgcHJvbWlzZVJlYWN0aW9uU3RydWN0dXJlLnNldCgqdGhpcywgSlNQcm9taXNlUmVhY3Rpb246
OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVk0uaAkocmV2aXNpb24gMTgyNDk4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVk0uaAkod29ya2luZyBjb3B5KQpAQCAtMjcwLDYgKzI3MCw3IEBAIHB1Ymxp
YzoKICAgICBTdHJvbmc8U3RydWN0dXJlPiB1bmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrU3RydWN0
dXJlOwogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHByb3BlcnR5VGFibGVTdHJ1Y3R1cmU7CiAgICAg
U3Ryb25nPFN0cnVjdHVyZT4gd2Vha01hcERhdGFTdHJ1Y3R1cmU7CisgICAgU3Ryb25nPFN0cnVj
dHVyZT4gaW5mZXJyZWRWYWx1ZVN0cnVjdHVyZTsKICNpZiBFTkFCTEUoUFJPTUlTRVMpCiAgICAg
U3Ryb25nPFN0cnVjdHVyZT4gcHJvbWlzZURlZmVycmVkU3RydWN0dXJlOwogICAgIFN0cm9uZzxT
dHJ1Y3R1cmU+IHByb21pc2VSZWFjdGlvblN0cnVjdHVyZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS90ZXN0cy9zdHJlc3MvaW5mZXItdW5pbml0aWFsaXplZC1jbG9zdXJlLXZhci5qcwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2luZmVyLXVu
aW5pdGlhbGl6ZWQtY2xvc3VyZS12YXIuanMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvdGVzdHMvc3RyZXNzL2luZmVyLXVuaW5pdGlhbGl6ZWQtY2xvc3VyZS12YXIuanMJ
KHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNiBAQAorZnVuY3Rpb24gZm9vKHApIHsKKyAgICB2
YXIgeDsKKyAgICAKKyAgICBub0lubGluZShmKTsKKyAgICAKKyAgICBpZiAocCkgeworICAgICAg
ICB2YXIgZiA9IGZ1bmN0aW9uKCkgeyByZXR1cm4geDsgfQorICAgICAgICAKKyAgICAgICAgZm9v
KGZhbHNlKTsKKyAgICAgICAgCisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7ICsr
aSkgeworICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGYoKTsKKyAgICAgICAgICAgIGlmIChyZXN1
bHQgIT09IHZvaWQgMCkKKyAgICAgICAgICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQg
KDEpOiAiICsgcmVzdWx0OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB4ID0gNDM7Cisg
ICAgICAgIAorICAgICAgICB2YXIgcmVzdWx0ID0gZigpOworICAgICAgICBpZiAocmVzdWx0ICE9
IDQzKQorICAgICAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0ICgyKTogIiArIHJlc3Vs
dDsKKyAgICB9IGVsc2UKKyAgICAgICAgeCA9IDQyOworfQorCitmb28odHJ1ZSk7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3NpbmdsZXRvbi1zY29wZS10aGVuLW92
ZXJ3cml0ZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3Ry
ZXNzL3NpbmdsZXRvbi1zY29wZS10aGVuLW92ZXJ3cml0ZS5qcwkocmV2aXNpb24gMCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3Mvc2luZ2xldG9uLXNjb3BlLXRoZW4tb3Zl
cndyaXRlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjAgQEAKK2Z1bmN0aW9uIGZvbyhh
KSB7CisgICAgdmFyIHggPSBhICsgMTsKKyAgICB2YXIgZiA9IGZ1bmN0aW9uKGEpIHsKKyAgICAg
ICAgcmV0dXJuIHggKyBhOworICAgIH07CisgICAgbm9JbmxpbmUoZik7CisgICAgZm9yICh2YXIg
aSA9IDA7IGkgPCAxMDAwMDsgKytpKSB7CisgICAgICAgIHZhciByZXN1bHQgPSBmKGkpOworICAg
ICAgICBpZiAocmVzdWx0ICE9IGEgKyAxICsgaSkKKyAgICAgICAgICAgIHRocm93ICJFcnJvcjog
YmFkIHJlc3VsdDogIiArIHJlc3VsdDsKKyAgICB9CisgICAgeCA9IDk5OTsKKyAgICB2YXIgcmVz
dWx0ID0gZigxKTsKKyAgICBpZiAocmVzdWx0ICE9IDk5OSArIDEpCisgICAgICAgIHRocm93ICJF
cnJvcjogYmFkIHJlc3VsdDogIiArIHJlc3VsdDsKK30KKworbm9JbmxpbmUoZm9vKTsKK2ZvciAo
dmFyIGkgPSAwOyBpIDwgMzsgKytpKQorICAgIGZvbyg0MiArIGkpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9zaW5nbGV0b24tc2NvcGUtdGhlbi1yZWFsbG9jLWFu
ZC1vdmVyd3JpdGUuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3Rz
L3N0cmVzcy9zaW5nbGV0b24tc2NvcGUtdGhlbi1yZWFsbG9jLWFuZC1vdmVyd3JpdGUuanMJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3NpbmdsZXRv
bi1zY29wZS10aGVuLXJlYWxsb2MtYW5kLW92ZXJ3cml0ZS5qcwkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDIwIEBACitmdW5jdGlvbiBmb28oYSkgeworICAgIHZhciB4ID0gYSArIDE7CisgICAg
cmV0dXJuIGZ1bmN0aW9uKGEpIHsKKyAgICAgICAgcmV0dXJuIHggKyBhOworICAgIH07Cit9CisK
K3ZhciBmID0gZm9vKDQyKTsKK25vSW5saW5lKGYpOworCitmb3IgKHZhciBpID0gMDsgaSA8IDEw
MDAwOyArK2kpIHsKKyAgICB2YXIgcmVzdWx0ID0gZihpKTsKKyAgICBpZiAocmVzdWx0ICE9IDQy
ICsgMSArIGkpCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdDogIiArIHJlc3VsdDsK
K30KKwordmFyIGYgPSBmb28oNDMpOwordmFyIHJlc3VsdCA9IGYoMSk7CitpZiAocmVzdWx0ICE9
IDQzICsgMSArIDEpCisgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0OiAiICsgcmVzdWx0OwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9zaW5nbGV0b24tc2NvcGUt
dGhlbi1yZWFsbG9jLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0
cy9zdHJlc3Mvc2luZ2xldG9uLXNjb3BlLXRoZW4tcmVhbGxvYy5qcwkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3Mvc2luZ2xldG9uLXNjb3BlLXRoZW4t
cmVhbGxvYy5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIwIEBACitmdW5jdGlvbiBmb28o
YSkgeworICAgIHZhciB4ID0gYSArIDE7CisgICAgcmV0dXJuIGZ1bmN0aW9uKGEpIHsKKyAgICAg
ICAgcmV0dXJuIHggKz0gYTsKKyAgICB9OworfQorCit2YXIgZiA9IGZvbyg0Mik7Citub0lubGlu
ZShmKTsKKworZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsgKytpKSB7CisgICAgdmFyIHJlc3Vs
dCA9IGYoMSk7CisgICAgaWYgKHJlc3VsdCAhPSA0MiArIDEgKyBpICsgMSkKKyAgICAgICAgdGhy
b3cgIkVycm9yOiBiYWQgcmVzdWx0OiAiICsgcmVzdWx0OworfQorCit2YXIgZiA9IGZvbyg0Myk7
Cit2YXIgcmVzdWx0ID0gZigxKTsKK2lmIChyZXN1bHQgIT0gNDMgKyAxICsgMSkKKyAgICB0aHJv
dyAiRXJyb3I6IGJhZCByZXN1bHQ6ICIgKyByZXN1bHQ7CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFu
Z2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxODI0
OTgpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwy
MCBAQAorMjAxNS0wNC0wNyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAg
ICAgIEpTQyBzaG91bGQgZGV0ZWN0IHNpbmdsZXRvbiBmdW5jdGlvbnMKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MzIzMgorCisgICAgICAgIFJldmll
d2VkIGJ5IE1pY2hhZWwgU2Fib2ZmLgorCisgICAgICAgICoganMvcmVncmVzcy9jcmVhdGUtbG90
cy1vZi1mdW5jdGlvbnMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNz
L2NyZWF0ZS1sb3RzLW9mLWZ1bmN0aW9ucy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdy
ZXNzL25vLWlubGluZS1jb25zdHJ1Y3Rvci1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAq
IGpzL3JlZ3Jlc3Mvbm8taW5saW5lLWNvbnN0cnVjdG9yLmh0bWw6IEFkZGVkLgorICAgICAgICAq
IGpzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2NyZWF0ZS1sb3RzLW9mLWZ1bmN0aW9ucy5qczogQWRk
ZWQuCisgICAgICAgICoganMvcmVncmVzcy9zY3JpcHQtdGVzdHMvbm8taW5saW5lLWNvbnN0cnVj
dG9yLmpzOiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9zaW5nbGV0
b24tc2NvcGUuanM6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3Mvc2luZ2xldG9uLXNjb3Bl
LWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICoganMvcmVncmVzcy9zaW5nbGV0b24tc2Nv
cGUuaHRtbDogQWRkZWQuCisKIDIwMTUtMDQtMDcgIE1hdHRoZXcgTWlybWFuICA8bW1pcm1hbkBh
cHBsZS5jb20+CiAKICAgICAgICAgU291cmNlIGFuZCBzdGFjayBpbmZvcm1hdGlvbiBzaG91bGQg
Z2V0IGFwcGVuZGVkIG9ubHkgdG8gbmF0aXZlIGVycm9ycwpJbmRleDogTGF5b3V0VGVzdHMvanMv
cmVncmVzcy9jcmVhdGUtbG90cy1vZi1mdW5jdGlvbnMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvY3JlYXRlLWxvdHMtb2YtZnVuY3Rpb25zLWV4cGVj
dGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvY3JlYXRlLWxv
dHMtb2YtZnVuY3Rpb25zLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEw
IEBACitKU1JlZ3Jlc3MvY3JlYXRlLWxvdHMtb2YtZnVuY3Rpb25zCisKK09uIHN1Y2Nlc3MsIHlv
dSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNU
IENPTVBMRVRFIi4KKworCitQQVNTIG5vIGV4Y2VwdGlvbiB0aHJvd24KK1BBU1Mgc3VjY2Vzc2Z1
bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9q
cy9yZWdyZXNzL2NyZWF0ZS1sb3RzLW9mLWZ1bmN0aW9ucy5odG1sCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2pzL3JlZ3Jlc3MvY3JlYXRlLWxvdHMtb2YtZnVuY3Rpb25zLmh0bWwJKHJldmlz
aW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2NyZWF0ZS1sb3RzLW9mLWZ1bmN0aW9u
cy5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIgQEAKKzwhRE9DVFlQRSBIVE1MIFBV
QkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNy
Yz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxi
b2R5PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNzLXByZS5qcyI+PC9zY3Jp
cHQ+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL2NyZWF0ZS1sb3RzLW9mLWZ1bmN0aW9ucy5q
cyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3JlZ3Jlc3MtcG9zdC5q
cyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5q
cyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdy
ZXNzL25vLWlubGluZS1jb25zdHJ1Y3Rvci1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvanMvcmVncmVzcy9uby1pbmxpbmUtY29uc3RydWN0b3ItZXhwZWN0ZWQudHh0CShy
ZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9uby1pbmxpbmUtY29uc3RydWN0
b3ItZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAgQEAKK0pTUmVncmVz
cy9uby1pbmxpbmUtY29uc3RydWN0b3IKKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2Vy
aWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisK
K1BBU1Mgbm8gZXhjZXB0aW9uIHRocm93bgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1
ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvbm8taW5s
aW5lLWNvbnN0cnVjdG9yLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVz
cy9uby1pbmxpbmUtY29uc3RydWN0b3IuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3Rz
L2pzL3JlZ3Jlc3Mvbm8taW5saW5lLWNvbnN0cnVjdG9yLmh0bWwJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwxMiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8v
RU4iPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVz
dC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0iLi4vLi4v
cmVzb3VyY2VzL3JlZ3Jlc3MtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJzY3JpcHQt
dGVzdHMvbm8taW5saW5lLWNvbnN0cnVjdG9yLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIu
Li8uLi9yZXNvdXJjZXMvcmVncmVzcy1wb3N0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIu
Li8uLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRt
bD4KSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2luZ2xldG9uLXNjb3BlLWV4cGVjdGVk
LnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NpbmdsZXRvbi1zY29w
ZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3Np
bmdsZXRvbi1zY29wZS1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMCBA
QAorSlNSZWdyZXNzL3NpbmdsZXRvbi1zY29wZQorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUg
YSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIu
CisKKworUEFTUyBubyBleGNlcHRpb24gdGhyb3duCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBp
cyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9z
aW5nbGV0b24tc2NvcGUuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNz
L3NpbmdsZXRvbi1zY29wZS5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVn
cmVzcy9zaW5nbGV0b24tc2NvcGUuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyIEBA
Cis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4K
KzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9z
Y3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcmVn
cmVzcy1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy9zaW5nbGV0
b24tc2NvcGUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdy
ZXNzLXBvc3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10
ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVz
dHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvY3JlYXRlLWxvdHMtb2YtZnVuY3Rpb25zLmpzCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2NyZWF0ZS1s
b3RzLW9mLWZ1bmN0aW9ucy5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jl
c3Mvc2NyaXB0LXRlc3RzL2NyZWF0ZS1sb3RzLW9mLWZ1bmN0aW9ucy5qcwkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDEyIEBACitmdW5jdGlvbiBmb28oKSB7CisgICAgdmFyIHJlc3VsdCA9IDA7
CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDA7ICsraSkKKyAgICAgICAgcmVzdWx0ICs9IChm
dW5jdGlvbigpIHsgcmV0dXJuIGkgfSkoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitmb3Ig
KHZhciBpID0gMDsgaSA8IDEwMDAwOyArK2kpIHsKKyAgICB2YXIgcmVzdWx0ID0gZm9vKCk7Cisg
ICAgaWYgKHJlc3VsdCAhPSA0OTUwKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQ6
ICIgKyByZXN1bHQ7Cit9CkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0
cy9uby1pbmxpbmUtY29uc3RydWN0b3IuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMv
cmVncmVzcy9zY3JpcHQtdGVzdHMvbm8taW5saW5lLWNvbnN0cnVjdG9yLmpzCShyZXZpc2lvbiAw
KQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvbm8taW5saW5lLWNvbnN0
cnVjdG9yLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTMgQEAKK2Z1bmN0aW9uIEZvbygp
IHsKKyAgICB2YXIgbyA9IHtmOntmOntmOntmOjQyfX19fTsKKyAgICB0aGlzLmYgPSA0MjsKK30K
Kworbm9JbmxpbmUoRm9vKTsKKworZm9yICh2YXIgaSA9IDA7IGkgPCAzMDAwMDAwOyArK2kpIHsK
KyAgICB2YXIgcmVzdWx0ID0gbmV3IEZvbygpOworICAgIGlmIChyZXN1bHQuZiAhPSA0MikKKyAg
ICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0OiAiICsgcmVzdWx0LmY7Cit9CisKSW5kZXg6
IExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL3NpbmdsZXRvbi1zY29wZS5qcwo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9zaW5nbGV0
b24tc2NvcGUuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3Njcmlw
dC10ZXN0cy9zaW5nbGV0b24tc2NvcGUuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNiBA
QAorZnVuY3Rpb24gZm9vKCkgeworICAgIHZhciB4ID0gNDI7CisgICAgdmFyIHkgPSA0MzsKKyAg
ICByZXR1cm4gZnVuY3Rpb24oeikgeworICAgICAgICB2YXIgcmVzdWx0ID0geCArIHk7CisgICAg
ICAgIHggKz0gejsKKyAgICAgICAgeSArPSB6OworICAgICAgICByZXR1cm4gcmVzdWx0OworICAg
IH0KK30KKwordmFyIGYgPSBmb28oKTsKK25vSW5saW5lKGYpOworCitmb3IgKHZhciBpID0gMDsg
aSA8IDEwMDAwMDAwOyArK2kpCisgICAgZigxKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>250331</attachid>
            <date>2015-04-07 21:34:28 -0700</date>
            <delta_ts>2015-04-08 12:35:15 -0700</delta_ts>
            <desc>this might be the one!</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>161753</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTgyNDk4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE5NyBA
QAorMjAxNS0wNC0wNyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEpTQyBzaG91bGQgZGV0ZWN0IHNpbmdsZXRvbiBmdW5jdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MzIzMgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEhKS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgc3RhcnRlZCBvdXQg
YXMgYW4gYXR0ZW1wdCB0byBtYWtlIGNvbnN0cnVjdG9ycyBmYXN0ZXIgYnkgZGV0ZWN0aW5nIHdo
ZW4gYSBjb25zdHJ1Y3RvciBpcyBhCisgICAgICAgIHNpbmdsZXRvbi4gVGhlIGlkZWEgaXMgdGhh
dCBlYWNoIEZ1bmN0aW9uRXhlY3V0YWJsZSBoYXMgYSBWYXJpYWJsZVdhdGNocG9pbnRTZXQgLSBh
IHdhdGNocG9pbnQKKyAgICAgICAgYWxvbmcgd2l0aCBhbiBpbmZlcnJlZCB2YWx1ZSAtIHRoYXQg
ZGV0ZWN0cyBpZiBvbmx5IG9uZSBKU0Z1bmN0aW9uIGhhcyBiZWVuIGFsbG9jYXRlZCBmb3IgdGhh
dAorICAgICAgICBleGVjdXRhYmxlLCBhbmQgaWYgc28sIHdoYXQgdGhhdCBKU0Z1bmN0aW9uIGlz
LiBUaGVuLCBpbnNpZGUgdGhlIGNvZGUgZm9yIHRoZSBGdW5jdGlvbkV4ZWN1dGFibGUsCisgICAg
ICAgIGlmIHRoZSB3YXRjaHBvaW50IHNldCBoYXMgYW4gaW5mZXJyZWQgdmFsdWUgKGkuZS4gaXQn
cyBiZWVuIGluaXRpYWxpemVkIGFuZCBpdCBpcyBzdGlsbCB2YWxpZCksCisgICAgICAgIHdlIGNh
biBjb25zdGFudC1mb2xkIEdldENhbGxlZS4KKyAgICAgICAgCisgICAgICAgIFVuZm9ydHVuYXRl
bHksIGNvbnN0cnVjdG9ycyBkb24ndCB1c2UgR2V0Q2FsbGVlIGFueW1vcmUsIHNvIHRoYXQgZGlk
bid0IHBhbiBvdXQuIEJ1dCBpbiB0aGUKKyAgICAgICAgcHJvY2VzcyBJIHJlYWxpemVkIHRocmVl
IHRoaW5nczoKKyAgICAgICAgCisgICAgICAgIC0gVGhpcyBhbGxvd3MgdXMgdG8gY29tcGxldGVs
eSBlbGltaW5hdGUgdGhlIEdldENhbGxlZS9HZXRTY29wZSBzZXF1ZW5jZSB0aGF0IHdlIHN0aWxs
IHNvbWV0aW1lcworICAgICAgICAgIGhhZCBldmVuIGluIGNvZGUgd2hlcmUgb3VyIHNpbmdsZXRv
bi1jbG9zdXJlIGRldGVjdGlvbiB3b3JrZWQuIFRoYXQncyBiZWNhdXNlIHNpbmdsZXRvbi1jbG9z
dXJlCisgICAgICAgICAgaW5mZXJlbmNlIHdvcmtlZCBhdCB0aGUgb3BfcmVzb2x2ZV9zY29wZSwg
YW5kIHRoYXQgb3BfcmVzb2x2ZV9zY29wZSBzdGlsbCBuZWVkZWQgdG8ga2VlcCBhbGl2ZQorICAg
ICAgICAgIHRoZSBpbmNvbWluZyBzY29wZSBpbiBjYXNlIHdlIE9TUiBleGl0LiBCdXQgYnkgY29u
c3RhbnQtZm9sZGluZyBHZXRDYWxsZWUsIHRoYXQgc2VxdWVuY2UKKyAgICAgICAgICBkaXNhcHBl
YXJzLiBPU1IgZXhpdCBjYW4gcmVtYXRlcmlhbGl6ZSB0aGUgY2FsbGVlIG9yIHRoZSBzY29wZSBi
eSBqdXN0IGtub3dpbmcgdGhlaXIgY29uc3RhbnQKKyAgICAgICAgICB2YWx1ZXMuCisgICAgICAg
IAorICAgICAgICAtIFRoaXMgYWxsb3dzIHVzIHRvIGVsaW1pbmF0ZSB0aGUgZnVuY3Rpb24gcmVl
bnRyeSB3YXRjaHBvaW50LiBUaGF0IHdhdGNocG9pbnQgaW5mZXJyZWQgc2luZ2xldG9uCisgICAg
ICAgICAgY2xvc3VyZXMuIEJ1dCB3ZSBkb24ndCBuZWVkIHRvIGluZmVyIHNpbmdsZXRvbiBjbG9z
dXJlcywgaWYgd2UgYXJlIGluZmVycmluZyBzaW5nbGV0b24gY2FsbGVlcy4KKyAgICAgICAgICBT
bywgdGhhdCBraWxscyBhIGJ1bmNoIG9mIGNvZGUuCisgICAgICAgIAorICAgICAgICAtIFRoaXMg
YWxsb3dzIHVzIHRvIHVzZSBhIG5vcm1hbCBXYXRjaHBvaW50U2V0LCBpbnN0ZWFkIG9mIGEgVmFy
aWFibGVXYXRjaHBvaW50U2V0LCBmb3IgaW5mZXJyaW5nCisgICAgICAgICAgY29uc3RhbnQgdmFs
dWVzIGluIHNjb3Blcy4gUHJldmlvdXNseSB3aGVuIHRoZSBERkcgaW5mZXJyZWQgdGhhdCBhIGNs
b3N1cmUgdmFyaWFibGUgd2FzCisgICAgICAgICAgY29uc3RhbnQsIGl0IHdvdWxkbid0IGtub3cg
d2hpY2ggY2xvc3VyZSB0aGF0IHZhcmlhYmxlIHdhcyBpbiBhbmQgc28gaXQgY291bGRuJ3QganVz
dCBsb2FkIHRoYXQKKyAgICAgICAgICB2YWx1ZS4gQnV0IG5vdyB3ZSBhcmUgZmlyc3QgaW5mZXJy
aW5nIHRoYXQgdGhlIGZ1bmN0aW9uIGlzIGEgc2luZ2xldG9uLCB3aGljaCBtZWFucyB0aGF0IHdl
CisgICAgICAgICAga25vdyBleGFjdGx5IHdoYXQgc2NvcGUgaXQgcG9pbnRzIHRvLCBhbmQgd2Ug
Y2FuIGxvYWQgdGhlIHZhbHVlIGZyb20gdGhlIHNjb3BlLiBVc2luZyBhCisgICAgICAgICAgV2F0
Y2hwb2ludFNldCBpbnN0ZWFkIG9mIGEgVmFyaWFibGVXYXRjaHBvaW50U2V0IHNhdmVzIHNvbWUg
bWVtb3J5IGFuZCBzaW1wbGlmaWVzIGEgYnVuY2ggb2YKKyAgICAgICAgICBjb2RlLiBUaGlzIGFs
c28gbWVhbnMgdGhhdCBub3csIHRoZSBvbmx5IHVzZXIgb2YgVmFyaWFibGVXYXRjaHBvaW50U2V0
IGlzIEZ1bmN0aW9uRXhlY3V0YWJsZS4KKyAgICAgICAgICBJJ3ZlIHR3ZWFrZWQgdGhlIGNvZGUg
b2YgVmFyaWFibGVXYXRjaHBvaW50U2V0IHRvIHJlZHVjZSBpdHMgcG93ZXIgdG8ganVzdCBiZSB3
aGF0CisgICAgICAgICAgRnVuY3Rpb25FeGVjdXRhYmxlIHdhbnRzLgorICAgICAgICAKKyAgICAg
ICAgVGhpcyBhbHNvIGhhcyB0aGUgZWZmZWN0IG9mIHNpbXBsaWZ5aW5nIHRoZSBpbXBsZW1lbnRh
dGlvbiBvZiBibG9jayBzY29waW5nLiBQcmlvciB0byB0aGlzCisgICAgICAgIGNoYW5nZSwgYmxv
Y2sgc2NvcGluZyB3b3VsZCBoYWQgaGFkIHRvIGhhdmUgc29tZSBzdG9yeSBmb3IgdGhlIGZ1bmN0
aW9uIHJlZW50cnkgd2F0Y2hwb2ludCBvbiBhbnkKKyAgICAgICAgbmVzdGVkIHN5bWJvbCB0YWJs
ZS4gVGhhdCdzIHRvdGFsbHkgd2VpcmQgdG8gdGhpbmsgYWJvdXQ7IGl0J3Mgbm90IHJlYWxseSBh
IGZ1bmN0aW9uIHJlZW50cnkgYnV0CisgICAgICAgIGEgc2NvcGUgcmVlbnRyeS4gTm93IHdlIGRv
bid0IGhhdmUgdG8gdGhpbmsgYWJvdXQgdGhpcy4gQ29uc3RhbnQgaW5mZXJlbmNlIG9uIG5lc3Rl
ZCBzY29wZXMgd2lsbAorICAgICAgICAianVzdCB3b3JrIjogaWYgd2UgcHJvdmUgdGhhdCB3ZSBr
bm93IHRoZSBjb25zdGFudCB2YWx1ZSBvZiB0aGUgc2NvcGUgdGhlbiB0aGUgbWFjaGluZXJ5IGtp
Y2tzCisgICAgICAgIGluLCBvdGhlcndpc2UgaXQgZG9lc24ndC4KKworICAgICAgICAqIENNYWtl
TGlzdHMudHh0OgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnZjeHByb2ovSmF2YVNjcmlwdENv
cmUudmN4cHJvajoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qOgorICAgICAgICAqIGJ5dGVjb2RlL0J5dGVjb2RlTGlzdC5qc29uOgorICAgICAgICAq
IGJ5dGVjb2RlL0J5dGVjb2RlVXNlRGVmLmg6CisgICAgICAgIChKU0M6OmNvbXB1dGVVc2VzRm9y
Qnl0ZWNvZGVPZmZzZXQpOgorICAgICAgICAoSlNDOjpjb21wdXRlRGVmc0ZvckJ5dGVjb2RlT2Zm
c2V0KToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAgICAgICAoSlNDOjpD
b2RlQmxvY2s6OmR1bXBCeXRlY29kZSk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Q29kZUJs
b2NrKToKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSk6
CisgICAgICAgICogYnl0ZWNvZGUvQ29kZU9yaWdpbi5jcHA6CisgICAgICAgIChKU0M6OklubGlu
ZUNhbGxGcmFtZTo6Y2FsbGVlQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpJbmxpbmVDYWxsRnJh
bWU6OnZpc2l0QWdncmVnYXRlKToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlT3JpZ2luLmg6Cisg
ICAgICAgIChKU0M6OklubGluZUNhbGxGcmFtZTo6Y2FsbGVlQ29uc3RhbnQpOiBEZWxldGVkLgor
ICAgICAgICAoSlNDOjpJbmxpbmVDYWxsRnJhbWU6OnZpc2l0QWdncmVnYXRlKTogRGVsZXRlZC4K
KyAgICAgICAgKiBieXRlY29kZS9JbnN0cnVjdGlvbi5oOgorICAgICAgICAqIGJ5dGVjb2RlL1Zh
cmlhYmxlV2F0Y2hwb2ludFNldC5jcHA6CisgICAgICAgIChKU0M6OlZhcmlhYmxlV2F0Y2hwb2lu
dFNldDo6bm90aWZ5V3JpdGUpOgorICAgICAgICAoSlNDOjpWYXJpYWJsZVdyaXRlRmlyZURldGFp
bDo6ZHVtcCk6IERlbGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUvVmFyaWFibGVXYXRjaHBvaW50
U2V0Lmg6CisgICAgICAgIChKU0M6OlZhcmlhYmxlV2F0Y2hwb2ludFNldDo6VmFyaWFibGVXYXRj
aHBvaW50U2V0KToKKyAgICAgICAgKEpTQzo6VmFyaWFibGVXYXRjaHBvaW50U2V0OjpuZWVkVG9G
aW5hbGl6ZSk6CisgICAgICAgIChKU0M6OlZhcmlhYmxlV2F0Y2hwb2ludFNldDo6ZmluYWxpemVV
bmNvbmRpdGlvbmFsbHkpOgorICAgICAgICAoSlNDOjpWYXJpYWJsZVdyaXRlRmlyZURldGFpbDo6
VmFyaWFibGVXcml0ZUZpcmVEZXRhaWwpOiBEZWxldGVkLgorICAgICAgICAqIGJ5dGVjb2RlL1Zh
cmlhYmxlV2F0Y2hwb2ludFNldElubGluZXMuaDoKKyAgICAgICAgKEpTQzo6VmFyaWFibGVXYXRj
aHBvaW50U2V0Ojpub3RpZnlXcml0ZSk6CisgICAgICAgICogYnl0ZWNvZGUvVmFyaWFibGVXcml0
ZUZpcmVEZXRhaWwuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6VmFyaWFibGVXcml0ZUZpcmVE
ZXRhaWw6OmR1bXApOgorICAgICAgICAqIGJ5dGVjb2RlL1ZhcmlhYmxlV3JpdGVGaXJlRGV0YWls
Lmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpWYXJpYWJsZVdyaXRlRmlyZURldGFpbDo6VmFyaWFi
bGVXcml0ZUZpcmVEZXRhaWwpOgorICAgICAgICAqIGJ5dGVjb2RlL1dhdGNocG9pbnQuaDoKKyAg
ICAgICAgKEpTQzo6V2F0Y2hwb2ludFNldDo6c3RhcnRXYXRjaGluZyk6CisgICAgICAgIChKU0M6
OldhdGNocG9pbnRTZXQ6OmZpcmVBbGwpOgorICAgICAgICAoSlNDOjpXYXRjaHBvaW50U2V0Ojp0
b3VjaCk6CisgICAgICAgIChKU0M6OldhdGNocG9pbnRTZXQ6OmludmFsaWRhdGUpOgorICAgICAg
ICAoSlNDOjpJbmxpbmVXYXRjaHBvaW50U2V0Ojp0b3VjaCk6CisgICAgICAgICogYnl0ZWNvbXBp
bGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0
b3I6OkJ5dGVjb2RlR2VuZXJhdG9yKToKKyAgICAgICAgKEpTQzo6Qnl0ZWNvZGVHZW5lcmF0b3I6
OmVtaXRSZXNvbHZlU2NvcGUpOgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdEludGVycHJldGVy
SW5saW5lcy5oOgorICAgICAgICAoSlNDOjpERkc6OkFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJh
Y3RTdGF0ZVR5cGU+OjpleGVjdXRlRWZmZWN0cyk6CisgICAgICAgICogZGZnL0RGR0J5dGVDb2Rl
UGFyc2VyLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Z2V0KToKKyAg
ICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Z2V0U2NvcGUpOgorICAgICAgICAoSlND
OjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKToKKyAgICAgICAgKiBkZmcvREZHQ2Fw
YWJpbGl0aWVzLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpjYXBhYmlsaXR5TGV2ZWwpOgorICAg
ICAgICAqIGRmZy9ERkdDbG9iYmVyaXplLmg6CisgICAgICAgIChKU0M6OkRGRzo6Y2xvYmJlcml6
ZSk6CisgICAgICAgICogZGZnL0RGR0dyYXBoLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFw
aDo6ZHVtcCk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OnRyeUdldENvbnN0YW50Q2xvc3Vy
ZVZhcik6CisgICAgICAgICogZGZnL0RGR05vZGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpOb2Rl
OjpoYXNXYXRjaHBvaW50U2V0KToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjp3YXRjaHBvaW50
U2V0KToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNWYXJpYWJsZVdhdGNocG9pbnRTZXQp
OiBEZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OnZhcmlhYmxlV2F0Y2hwb2ludFNl
dCk6IERlbGV0ZWQuCisgICAgICAgICogZGZnL0RGR09wZXJhdGlvbnMuY3BwOgorICAgICAgICAq
IGRmZy9ERkdPcGVyYXRpb25zLmg6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU5ld0Z1bmN0aW9u
KToKKyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU5vdGlmeVdyaXRl
KToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQuaDoKKyAgICAgICAgKEpTQzo6REZH
OjpTcGVjdWxhdGl2ZUpJVDo6Y2FsbE9wZXJhdGlvbik6CisgICAgICAgICogZGZnL0RGR1NwZWN1
bGF0aXZlSklUMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpj
b21waWxlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAg
IChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdW
YXJhcmdzRm9yd2FyZGluZ1BoYXNlLmNwcDoKKyAgICAgICAgKiBmdGwvRlRMSW50cmluc2ljUmVw
b3NpdG9yeS5oOgorICAgICAgICAqIGZ0bC9GVExMb3dlckRGR1RvTExWTS5jcHA6CisgICAgICAg
IChKU0M6OkZUTDo6TG93ZXJERkdUb0xMVk06OmNvbXBpbGVOb3RpZnlXcml0ZSk6CisgICAgICAg
ICogaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwOgorICAgICAgICAoSlNDOjpTdGFja0ZyYW1l
OjpmcmllbmRseVNvdXJjZVVSTCk6CisgICAgICAgIChKU0M6OlN0YWNrRnJhbWU6OmZyaWVuZGx5
RnVuY3Rpb25OYW1lKToKKyAgICAgICAgKiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5oOgorICAg
ICAgICAoSlNDOjpTdGFja0ZyYW1lOjpmcmllbmRseVNvdXJjZVVSTCk6IERlbGV0ZWQuCisgICAg
ICAgIChKU0M6OlN0YWNrRnJhbWU6OmZyaWVuZGx5RnVuY3Rpb25OYW1lKTogRGVsZXRlZC4KKyAg
ICAgICAgKiBqaXQvSklULmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0Tm90aWZ5V3JpdGUp
OgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MpOgorICAgICAgICAq
IGppdC9KSVQuaDoKKyAgICAgICAgKiBqaXQvSklUT3Bjb2Rlcy5jcHA6CisgICAgICAgIChKU0M6
OkpJVDo6ZW1pdF9vcF90b3VjaF9lbnRyeSk6IERlbGV0ZWQuCisgICAgICAgICogaml0L0pJVE9w
ZXJhdGlvbnMuY3BwOgorICAgICAgICAqIGppdC9KSVRPcGVyYXRpb25zLmg6CisgICAgICAgICog
aml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0UHV0R2xv
YmFsVmFyKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0UHV0Q2xvc3VyZVZhcik6CisgICAgICAg
IChKU0M6OkpJVDo6ZW1pdE5vdGlmeVdyaXRlKTogRGVsZXRlZC4KKyAgICAgICAgKiBqaXQvSklU
UHJvcGVydHlBY2Nlc3MzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFB1dEdsb2Jh
bFZhcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFB1dENsb3N1cmVWYXIpOgorICAgICAgICAo
SlNDOjpKSVQ6OmVtaXROb3RpZnlXcml0ZSk6IERlbGV0ZWQuCisgICAgICAgICogbGxpbnQvTExJ
bnRTbG93UGF0aHMuY3BwOgorICAgICAgICAoSlNDOjpMTEludDo6TExJTlRfU0xPV19QQVRIX0RF
Q0wpOgorICAgICAgICAqIGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtOgorICAgICAgICAq
IGxsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc206CisgICAgICAgICogbGxpbnQvTG93
TGV2ZWxJbnRlcnByZXRlcjY0LmFzbToKKyAgICAgICAgKiBydW50aW1lL0NvbW1vblNsb3dQYXRo
cy5jcHA6CisgICAgICAgIChKU0M6OlNMT1dfUEFUSF9ERUNMKTogRGVsZXRlZC4KKyAgICAgICAg
KiBydW50aW1lL0NvbW1vblNsb3dQYXRocy5oOgorICAgICAgICAqIHJ1bnRpbWUvRXhlY3V0YWJs
ZS5jcHA6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbik6
CisgICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6V2F0Y2hwb2ludENsZWFudXA6Oldh
dGNocG9pbnRDbGVhbnVwKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25FeGVjdXRhYmxlOjpXYXRj
aHBvaW50Q2xlYW51cDo6fldhdGNocG9pbnRDbGVhbnVwKToKKyAgICAgICAgKEpTQzo6RnVuY3Rp
b25FeGVjdXRhYmxlOjpXYXRjaHBvaW50Q2xlYW51cDo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkp
OgorICAgICAgICAqIHJ1bnRpbWUvRXhlY3V0YWJsZS5oOgorICAgICAgICAoSlNDOjpGdW5jdGlv
bkV4ZWN1dGFibGU6OmZ1bmN0aW9uUmVhbGxvY2F0aW9uV2F0Y2hwb2ludFNldCk6CisgICAgICAg
ICogcnVudGltZS9KU0NJbmxpbmVzLmg6CisgICAgICAgICogcnVudGltZS9KU0Z1bmN0aW9uLmNw
cDoKKyAgICAgICAgKEpTQzo6SlNGdW5jdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKiBydW50aW1l
L0pTRnVuY3Rpb24uaDoKKyAgICAgICAgKEpTQzo6SlNGdW5jdGlvbjo6Y3JlYXRlV2l0aEludmFs
aWRhdGVkUmVhbGxvY2F0aW9uV2F0Y2hwb2ludCk6CisgICAgICAgIChKU0M6OkpTRnVuY3Rpb246
OmNyZWF0ZUltcGwpOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpjcmVhdGUpOiBEZWxldGVk
LgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpK
U0dsb2JhbE9iamVjdDo6YWRkR2xvYmFsVmFyKToKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmpl
Y3Q6OmFkZEZ1bmN0aW9uKToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0Lmg6Cisg
ICAgICAgICogcnVudGltZS9KU0xleGljYWxFbnZpcm9ubWVudC5jcHA6CisgICAgICAgIChKU0M6
OkpTTGV4aWNhbEVudmlyb25tZW50OjpzeW1ib2xUYWJsZVB1dCk6CisgICAgICAgICogcnVudGlt
ZS9KU1Njb3BlLmg6CisgICAgICAgIChKU0M6OlJlc29sdmVPcDo6UmVzb2x2ZU9wKToKKyAgICAg
ICAgKiBydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6c3ltYm9s
VGFibGVQdXQpOgorICAgICAgICAoSlNDOjpzeW1ib2xUYWJsZVB1dFdpdGhBdHRyaWJ1dGVzKToK
KyAgICAgICAgKiBydW50aW1lL1B1dFByb3BlcnR5U2xvdC5oOgorICAgICAgICAqIHJ1bnRpbWUv
U3ltYm9sVGFibGUuY3BwOgorICAgICAgICAoSlNDOjpTeW1ib2xUYWJsZUVudHJ5OjpwcmVwYXJl
VG9XYXRjaCk6CisgICAgICAgIChKU0M6OlN5bWJvbFRhYmxlOjpTeW1ib2xUYWJsZSk6CisgICAg
ICAgIChKU0M6OlN5bWJvbFRhYmxlOjp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6U3lt
Ym9sVGFibGVFbnRyeTo6aW5mZXJyZWRWYWx1ZSk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN5
bWJvbFRhYmxlRW50cnk6Om5vdGlmeVdyaXRlU2xvdyk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6
OlN5bWJvbFRhYmxlOjpXYXRjaHBvaW50Q2xlYW51cDo6V2F0Y2hwb2ludENsZWFudXApOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpTeW1ib2xUYWJsZTo6V2F0Y2hwb2ludENsZWFudXA6On5XYXRj
aHBvaW50Q2xlYW51cCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN5bWJvbFRhYmxlOjpXYXRj
aHBvaW50Q2xlYW51cDo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkpOiBEZWxldGVkLgorICAgICAg
ICAqIHJ1bnRpbWUvU3ltYm9sVGFibGUuaDoKKyAgICAgICAgKEpTQzo6U3ltYm9sVGFibGVFbnRy
eTo6ZGlzYWJsZVdhdGNoaW5nKToKKyAgICAgICAgKEpTQzo6U3ltYm9sVGFibGVFbnRyeTo6d2F0
Y2hwb2ludFNldCk6CisgICAgICAgIChKU0M6OlN5bWJvbFRhYmxlRW50cnk6Om5vdGlmeVdyaXRl
KTogRGVsZXRlZC4KKyAgICAgICAgKiBydW50aW1lL1R5cGVQcm9maWxlci5jcHA6CisgICAgICAg
ICogdGVzdHMvc3RyZXNzL2luZmVyLXVuaW5pdGlhbGl6ZWQtY2xvc3VyZS12YXIuanM6IEFkZGVk
LgorICAgICAgICAqIHRlc3RzL3N0cmVzcy9zaW5nbGV0b24tc2NvcGUtdGhlbi1vdmVyd3JpdGUu
anM6IEFkZGVkLgorICAgICAgICAqIHRlc3RzL3N0cmVzcy9zaW5nbGV0b24tc2NvcGUtdGhlbi1y
ZWFsbG9jLWFuZC1vdmVyd3JpdGUuanM6IEFkZGVkLgorICAgICAgICAqIHRlc3RzL3N0cmVzcy9z
aW5nbGV0b24tc2NvcGUtdGhlbi1yZWFsbG9jLmpzOiBBZGRlZC4KKwogMjAxNS0wNC0wNyAgRmls
aXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAgICAgICAgIENvbnN0YW50IGZvbGRpbmcg
b2YgdHlwZWQgYXJyYXkgcHJvcGVydGllcyBzaG91bGQgYmUgaGFuZGxlZCBieSBBSSByYXRoZXIg
dGhhbiBzdHJlbmd0aCByZWR1Y3Rpb24KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFr
ZUxpc3RzLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQ01ha2VMaXN0
cy50eHQJKHJldmlzaW9uIDE4MjQ5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxp
c3RzLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMTA2LDYgKzEwNiw3IEBAIHNldChKYXZhU2NyaXB0
Q29yZV9TT1VSQ0VTCiAgICAgYnl0ZWNvZGUvVW5saW5rZWRJbnN0cnVjdGlvblN0cmVhbS5jcHAK
ICAgICBieXRlY29kZS9WYWx1ZVJlY292ZXJ5LmNwcAogICAgIGJ5dGVjb2RlL1ZhcmlhYmxlV2F0
Y2hwb2ludFNldC5jcHAKKyAgICBieXRlY29kZS9WYXJpYWJsZVdyaXRlRmlyZURldGFpbC5jcHAK
ICAgICBieXRlY29kZS9WaXJ0dWFsUmVnaXN0ZXIuY3BwCiAgICAgYnl0ZWNvZGUvV2F0Y2hwb2lu
dC5jcHAKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjeHBy
b2ovSmF2YVNjcmlwdENvcmUudmN4cHJvago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCShyZXZp
c2lvbiAxODI0OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4
cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC0zNTMsNiArMzUz
LDcgQEAKICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFVubGlua2VkSW5zdHJ1
Y3Rpb25TdHJlYW0uY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVc
VmFsdWVSZWNvdmVyeS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRlY29k
ZVxWYXJpYWJsZVdhdGNocG9pbnRTZXQuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5cYnl0ZWNvZGVcVmFyaWFibGVXcml0ZUZpcmVEZXRhaWwuY3BwIiAvPgogICAgIDxDbENvbXBp
bGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcVmlydHVhbFJlZ2lzdGVyLmNwcCIgLz4KICAgICA8Q2xD
b21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFdhdGNocG9pbnQuY3BwIiAvPgogICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5cYnl0ZWNvbXBpbGVyXEJ5dGVjb2RlR2VuZXJhdG9yLmNwcCIgLz4K
QEAgLTEwMDUsNiArMTAwNiw3IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29k
ZVxWYWx1ZVByb2ZpbGUuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2Rl
XFZhbHVlUmVjb3ZlcnkuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2Rl
XFZhcmlhYmxlV2F0Y2hwb2ludFNldC5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
Ynl0ZWNvZGVcVmFyaWFibGVXcml0ZUZpcmVEZXRhaWwuaCIgLz4KICAgICA8Q2xJbmNsdWRlIElu
Y2x1ZGU9Ii4uXGJ5dGVjb2RlXFZpcnR1YWxSZWdpc3Rlci5oIiAvPgogICAgIDxDbEluY2x1ZGUg
SW5jbHVkZT0iLi5cYnl0ZWNvZGVcV2F0Y2hwb2ludC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5cYnl0ZWNvbXBpbGVyXEJ5dGVjb2RlR2VuZXJhdG9yLmgiIC8+CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
ago9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNv
ZGVwcm9qL3Byb2plY3QucGJ4cHJvagkocmV2aXNpb24gMTgyNDk4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oJKHdvcmtp
bmcgY29weSkKQEAgLTM4Myw2ICszODMsOCBAQAogCQkwRjZCMUNDNjE4NjJDNDc4MDA4NDVEOTcg
LyogRlRMVW53aW5kSW5mby5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY2QjFDQzIxODYyQzQ3ODAwODQ1RDk3IC8qIEZUTFVud2luZEluZm8uaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjZCMUNDOTE4
NjQxREY4MDA4NDVEOTcgLyogQXJpdHlDaGVja0ZhaWxSZXR1cm5UaHVua3MuY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2QjFDQzcxODY0MURGODAw
ODQ1RDk3IC8qIEFyaXR5Q2hlY2tGYWlsUmV0dXJuVGh1bmtzLmNwcCAqLzsgfTsKIAkJMEY2QjFD
Q0ExODY0MURGODAwODQ1RDk3IC8qIEFyaXR5Q2hlY2tGYWlsUmV0dXJuVGh1bmtzLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjZCMUNDODE4NjQxREY4
MDA4NDVEOTcgLyogQXJpdHlDaGVja0ZhaWxSZXR1cm5UaHVua3MuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQkwRjZDNzM1MDFBQzlGOTlGMDBCRTE2
ODIgLyogVmFyaWFibGVXcml0ZUZpcmVEZXRhaWwuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2QzczNEUxQUM5Rjk5RjAwQkUxNjgyIC8qIFZhcmlh
YmxlV3JpdGVGaXJlRGV0YWlsLmNwcCAqLzsgfTsKKwkJMEY2QzczNTExQUM5Rjk5RjAwQkUxNjgy
IC8qIFZhcmlhYmxlV3JpdGVGaXJlRGV0YWlsLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRjZDNzM0RjFBQzlGOTlGMDBCRTE2ODIgLyogVmFyaWFibGVX
cml0ZUZpcmVEZXRhaWwuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkwRjZFODQ1QTE5MDMwQkVGMDA1NjI3NDEgLyogREZHVmFyaWFibGVBY2Nlc3NE
YXRhLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
NkU4NDU5MTkwMzBCRUYwMDU2Mjc0MSAvKiBERkdWYXJpYWJsZUFjY2Vzc0RhdGEuY3BwICovOyB9
OwogCQkwRjZGQzc1MDE5NjExMEE4MDBFMUQwMkQgLyogQ29tcGxleEdldFN0YXR1cy5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjZGQzc0RTE5NjEx
MEE4MDBFMUQwMkQgLyogQ29tcGxleEdldFN0YXR1cy5jcHAgKi87IH07CiAJCTBGNkZDNzUxMTk2
MTEwQTgwMEUxRDAyRCAvKiBDb21wbGV4R2V0U3RhdHVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjZGQzc0RjE5NjExMEE4MDBFMUQwMkQgLyogQ29t
cGxleEdldFN0YXR1cy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CkBAIC00MjUsNyArNDI3LDYgQEAKIAkJMEY4Rjk0NDIxNjY3NjMzNTAwRDYxOTcxIC8q
IENvZGVUeXBlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGOEY5NDNGMTY2NzYzMkQwMEQ2MTk3MSAvKiBDb2RlVHlwZS5jcHAgKi87IH07CiAJCTBG
OEY5NDQ0MTY2NzYzNTQwMEQ2MTk3MSAvKiBKSVRDb2RlLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOEY5NDQzMTY2NzYzNTIwMEQ2MTk3MSAvKiBK
SVRDb2RlLmNwcCAqLzsgfTsKIAkJMEY4Rjk0NDYxNjY3NjRGMTAwRDYxOTcxIC8qIENvZGVPcmln
aW4uY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY4
Rjk0NDUxNjY3NjRFRTAwRDYxOTcxIC8qIENvZGVPcmlnaW4uY3BwICovOyB9OwotCQkwRjkxODFD
NzE4NDE1Q0E1MDA1N0I2NjkgLyogVmFyaWFibGVXYXRjaHBvaW50U2V0LmggaW4gSGVhZGVycyAq
LyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjkxODFDNjE4NDE1Q0E1MDA1N0I2
NjkgLyogVmFyaWFibGVXYXRjaHBvaW50U2V0LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMg
PSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEY5MTlEMEMxNTdFRTA5RjAwNEE0RTdEIC8qIEpTU3lt
Ym9sVGFibGVPYmplY3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEY5MTlEMDkxNTdFRTA5RDAwNEE0RTdEIC8qIEpTU3ltYm9sVGFibGVPYmplY3Qu
Y3BwICovOyB9OwogCQkwRjkxOUQwRDE1N0VFMEEyMDA0QTRFN0QgLyogSlNTeW1ib2xUYWJsZU9i
amVjdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY5
MTlEMEExNTdFRTA5RDAwNEE0RTdEIC8qIEpTU3ltYm9sVGFibGVPYmplY3QuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjkxOUQxMDE1N0YzMzI5
MDA0QTRFN0QgLyogSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5jcHAgaW4gU291cmNlcyAqLyA9
IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjkxOUQwRTE1N0YzMzI3MDA0QTRFN0Qg
LyogSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5jcHAgKi87IH07CkBAIC01NTAsNyArNTUxLDYg
QEAKIAkJMEZDOTdGNDAxODIwMjExOTAwMkM5QjI2IC8qIERGR0p1bXBSZXBsYWNlbWVudC5oIGlu
IEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDOTdGM0ExODIw
MjExOTAwMkM5QjI2IC8qIERGR0p1bXBSZXBsYWNlbWVudC5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGQzk3RjQxMTgyMDIxMTkwMDJDOUIyNiAv
KiBERkdXYXRjaHBvaW50Q29sbGVjdGlvblBoYXNlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQzk3RjNCMTgyMDIxMTkwMDJDOUIyNiAvKiBERkdX
YXRjaHBvaW50Q29sbGVjdGlvblBoYXNlLmNwcCAqLzsgfTsKIAkJMEZDOTdGNDIxODIwMjExOTAw
MkM5QjI2IC8qIERGR1dhdGNocG9pbnRDb2xsZWN0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQzk3RjNDMTgyMDIxMTkwMDJDOUIyNiAv
KiBERkdXYXRjaHBvaW50Q29sbGVjdGlvblBoYXNlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVU
RVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJMEZDQTkxMTMxOTVFNjZBMDAwNDI2NDM4IC8qIFZh
cmlhYmxlV2F0Y2hwb2ludFNldC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkNBOTExMjE5NUU2NkEwMDA0MjY0MzggLyogVmFyaWFibGVXYXRjaHBv
aW50U2V0LmNwcCAqLzsgfTsKIAkJMEZDQ0FFNDUxNkQwQ0Y3NDAwRDBDNjVCIC8qIFBhcnNlckVy
cm9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkND
QUU0MzE2RDBDRjZFMDBEMEM2NUIgLyogUGFyc2VyRXJyb3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkNFRkFBQjE4MDRDMTNFMDA0NzJDRTQg
LyogRlRMU2F2ZVJlc3RvcmUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZDRUZBQTkxODA0QzEzRTAwNDcyQ0U0IC8qIEZUTFNhdmVSZXN0b3JlLmNw
cCAqLzsgfTsKIAkJMEZDRUZBQUMxODA0QzEzRTAwNDcyQ0U0IC8qIEZUTFNhdmVSZXN0b3JlLmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkNFRkFBQTE4
MDRDMTNFMDA0NzJDRTQgLyogRlRMU2F2ZVJlc3RvcmUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNzE5LDYgKzcxOSw4IEBACiAJCTBGRjcyOUJF
MTY2QUQzNjAwMDBGNUJBMyAvKiBQcm9maWxlckV4ZWN1dGlvbkNvdW50ZXIuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRjcyOTlFMTY2QUQzNDcwMDBG
NUJBMyAvKiBQcm9maWxlckV4ZWN1dGlvbkNvdW50ZXIuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkY3MjlCRjE2NkFEMzYwMDAwRjVCQTMgLyog
UHJvZmlsZXJPcmlnaW4uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGRjcyOUEwMTY2QUQzNDcwMDBGNUJBMyAvKiBQcm9maWxlck9yaWdpbi5oICovOyBz
ZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRjcyOUMwMTY2
QUQzNjAwMDBGNUJBMyAvKiBQcm9maWxlck9yaWdpblN0YWNrLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkY3MjlBMjE2NkFEMzQ3MDAwRjVCQTMgLyog
UHJvZmlsZXJPcmlnaW5TdGFjay5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CisJCTBGRjhCREVBMUFENENGNzEwMERGRTg4NCAvKiBJbmZlcnJlZFZhbHVl
LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRjhC
REU4MUFENENGNzEwMERGRTg4NCAvKiBJbmZlcnJlZFZhbHVlLmNwcCAqLzsgfTsKKwkJMEZGOEJE
RUIxQUQ0Q0Y3MTAwREZFODg0IC8qIEluZmVycmVkVmFsdWUuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRjhCREU5MUFENENGNzEwMERGRTg4NCAvKiBJ
bmZlcnJlZFZhbHVlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJMEZGOTIyRDQxNEY0NkI0MTAwNDFBMjRFIC8qIExMSW50T2Zmc2V0c0V4dHJhY3Rv
ci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjQ2
ODBBMTE0QkE3RjgyMDBCRkUyNzIgLyogTExJbnRPZmZzZXRzRXh0cmFjdG9yLmNwcCAqLzsgfTsK
IAkJMEZGQTU0OTcxNkI4ODM1MDAwQjNBOTgyIC8qIEE2NERPcGNvZGUuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gNjUyQTNBMjIxNjUxQzY5NzAwQTgw
QUZFIC8qIEE2NERPcGNvZGUuY3BwICovOyB9OwogCQkwRkZBNTQ5ODE2Qjg4MzUzMDBCM0E5ODIg
LyogQTY0RE9wY29kZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gNjUyQTNBMjMxNjUxQzY5NzAwQTgwQUZFIC8qIEE2NERPcGNvZGUuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtMTY0NCw3ICsxNjQ2LDYg
QEAKIAkJRkUyMENFOUUxNUYwNEE5NTAwREYzNDMwIC8qIExMSW50Q0xvb3AuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFMjBDRTlDMTVGMDRBOTUwMERG
MzQzMCAvKiBMTEludENMb29wLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0
ZSwgKTsgfTsgfTsKIAkJRkU0QTMzMUYxNUJEMkUwNzAwNkY1NEYzIC8qIFZNSW5zcGVjdG9yLmNw
cCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFNEEzMzFE
MTVCRDJFMDcwMDZGNTRGMyAvKiBWTUluc3BlY3Rvci5jcHAgKi87IH07CiAJCUZFNEEzMzIwMTVC
RDJFMDcwMDZGNTRGMyAvKiBWTUluc3BlY3Rvci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJY
QnVpbGRGaWxlOyBmaWxlUmVmID0gRkU0QTMzMUUxNUJEMkUwNzAwNkY1NEYzIC8qIFZNSW5zcGVj
dG9yLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKLQkJ
RkU1MjQ4RjkxOTE0NDJEOTAwQjdGREU0IC8qIFZhcmlhYmxlV2F0Y2hwb2ludFNldElubGluZXMu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFNTI0OEY4
MTkxNDQyRDkwMEI3RkRFNCAvKiBWYXJpYWJsZVdhdGNocG9pbnRTZXRJbmxpbmVzLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRkU1OTMyQTcxODND
NUEyNjAwQTFFQ0NDIC8qIFZNRW50cnlTY29wZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTU5MzJBNTE4M0M1QTI2MDBBMUVDQ0MgLyogVk1FbnRy
eVNjb3BlLmNwcCAqLzsgfTsKIAkJRkU1OTMyQTgxODNDNUEyNjAwQTFFQ0NDIC8qIFZNRW50cnlT
Y29wZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU1
OTMyQTYxODNDNUEyNjAwQTFFQ0NDIC8qIFZNRW50cnlTY29wZS5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUZFN0JBNjBGMUExQTdDRUMwMEYxRjdC
NCAvKiBIZWFwVmVyaWZpZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRkU3QkE2MEQxQTFBN0NFQzAwRjFGN0I0IC8qIEhlYXBWZXJpZmllci5jcHAg
Ki87IH07CkBAIC0yMTAwLDYgKzIxMDEsOCBAQAogCQkwRjZCMUNDMjE4NjJDNDc4MDA4NDVEOTcg
LyogRlRMVW53aW5kSW5mby5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBGVExV
bndpbmRJbmZvLmg7IHBhdGggPSBmdGwvRlRMVW53aW5kSW5mby5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjZCMUNDNzE4NjQxREY4MDA4NDVEOTcgLyogQXJpdHlDaGVja0ZhaWxS
ZXR1cm5UaHVua3MuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQXJp
dHlDaGVja0ZhaWxSZXR1cm5UaHVua3MuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjZCMUNDODE4NjQxREY4MDA4NDVEOTcgLyogQXJpdHlDaGVja0ZhaWxSZXR1cm5UaHVua3Mu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXJpdHlDaGVja0ZhaWxSZXR1cm5U
aHVua3MuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2QzczNEUxQUM5Rjk5RjAw
QkUxNjgyIC8qIFZhcmlhYmxlV3JpdGVGaXJlRGV0YWlsLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuY3BwLmNwcDsgcGF0aCA9IFZhcmlhYmxlV3JpdGVGaXJlRGV0YWlsLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEY2QzczNEYxQUM5Rjk5RjAwQkUxNjgyIC8qIFZhcmlhYmxl
V3JpdGVGaXJlRGV0YWlsLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZhcmlh
YmxlV3JpdGVGaXJlRGV0YWlsLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNkU4
NDU5MTkwMzBCRUYwMDU2Mjc0MSAvKiBERkdWYXJpYWJsZUFjY2Vzc0RhdGEuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHVmFyaWFibGVBY2Nlc3NEYXRhLmNwcDsg
cGF0aCA9IGRmZy9ERkdWYXJpYWJsZUFjY2Vzc0RhdGEuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjZGQzc0RTE5NjExMEE4MDBFMUQwMkQgLyogQ29tcGxleEdldFN0YXR1cy5j
cHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBDb21wbGV4R2V0U3RhdHVz
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2RkM3NEYxOTYxMTBBODAwRTFE
MDJEIC8qIENvbXBsZXhHZXRTdGF0dXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRo
ID0gQ29tcGxleEdldFN0YXR1cy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjE0
MCw3ICsyMTQzLDYgQEAKIAkJMEY4Rjk0M0YxNjY3NjMyRDAwRDYxOTcxIC8qIENvZGVUeXBlLmNw
cCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvZGVUeXBlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY4Rjk0NDMxNjY3NjM1MjAwRDYxOTcxIC8qIEpJ
VENvZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSklUQ29kZS5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOEY5NDQ1MTY2NzY0RUUwMEQ2MTk3
MSAvKiBDb2RlT3JpZ2luLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9
IENvZGVPcmlnaW4uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRjkxODFDNjE4
NDE1Q0E1MDA1N0I2NjkgLyogVmFyaWFibGVXYXRjaHBvaW50U2V0LmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFZhcmlhYmxlV2F0Y2hwb2ludFNldC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwRjkxOUQwOTE1N0VFMDlEMDA0QTRFN0QgLyogSlNTeW1ib2xUYWJs
ZU9iamVjdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1N5bWJv
bFRhYmxlT2JqZWN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY5MTlEMEEx
NTdFRTA5RDAwNEE0RTdEIC8qIEpTU3ltYm9sVGFibGVPYmplY3QuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gSlNTeW1ib2xUYWJsZU9iamVjdC5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRjkxOUQwRTE1N0YzMzI3MDA0QTRFN0QgLyogSlNTZWdtZW50ZWRWYXJp
YWJsZU9iamVjdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5n
ID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKU1Nl
Z21lbnRlZFZhcmlhYmxlT2JqZWN0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAg
LTIyNzYsNyArMjI3OCw2IEBACiAJCTBGQzk3RjNBMTgyMDIxMTkwMDJDOUIyNiAvKiBERkdKdW1w
UmVwbGFjZW1lbnQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gREZHSnVtcFJl
cGxhY2VtZW50Lmg7IHBhdGggPSBkZmcvREZHSnVtcFJlcGxhY2VtZW50Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGQzk3RjNCMTgyMDIxMTkwMDJDOUIyNiAvKiBERkdXYXRjaHBv
aW50Q29sbGVjdGlvblBoYXNlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFt
ZSA9IERGR1dhdGNocG9pbnRDb2xsZWN0aW9uUGhhc2UuY3BwOyBwYXRoID0gZGZnL0RGR1dhdGNo
cG9pbnRDb2xsZWN0aW9uUGhhc2UuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RkM5N0YzQzE4MjAyMTE5MDAyQzlCMjYgLyogREZHV2F0Y2hwb2ludENvbGxlY3Rpb25QaGFzZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdXYXRjaHBvaW50Q29sbGVjdGlv
blBoYXNlLmg7IHBhdGggPSBkZmcvREZHV2F0Y2hwb2ludENvbGxlY3Rpb25QaGFzZS5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwotCQkwRkNBOTExMjE5NUU2NkEwMDA0MjY0MzggLyogVmFy
aWFibGVXYXRjaHBvaW50U2V0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IFZhcmlhYmxlV2F0Y2hwb2ludFNldC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGQ0I0MDg1MTVDMEEzQzMwMDQ4OTMyQiAvKiBTbG90VmlzaXRvcklubGluZXMuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gU2xvdFZpc2l0b3JJbmxpbmVzLmg7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQ0NBRTQzMTZEMENGNkUwMEQwQzY1QiAvKiBQYXJz
ZXJFcnJvci5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBQYXJzZXJFcnJvci5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkNFRkFBOTE4MDRDMTNFMDA0NzJDRTQg
LyogRlRMU2F2ZVJlc3RvcmUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1l
ID0gRlRMU2F2ZVJlc3RvcmUuY3BwOyBwYXRoID0gZnRsL0ZUTFNhdmVSZXN0b3JlLmNwcDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTI0NDEsNiArMjQ0Miw4IEBACiAJCTBGRjcyOUEw
MTY2QUQzNDcwMDBGNUJBMyAvKiBQcm9maWxlck9yaWdpbi5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IG5hbWUgPSBQcm9maWxlck9yaWdpbi5oOyBwYXRoID0gcHJvZmlsZXIvUHJvZmlsZXJP
cmlnaW4uaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZGNzI5QTExNjZBRDM0NzAw
MEY1QkEzIC8qIFByb2ZpbGVyT3JpZ2luU3RhY2suY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBuYW1lID0gUHJvZmlsZXJPcmlnaW5TdGFjay5jcHA7IHBhdGggPSBwcm9maWxlci9Q
cm9maWxlck9yaWdpblN0YWNrLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZG
NzI5QTIxNjZBRDM0NzAwMEY1QkEzIC8qIFByb2ZpbGVyT3JpZ2luU3RhY2suaCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gUHJvZmlsZXJPcmlnaW5TdGFjay5oOyBwYXRoID0gcHJv
ZmlsZXIvUHJvZmlsZXJPcmlnaW5TdGFjay5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owor
CQkwRkY4QkRFODFBRDRDRjcxMDBERkU4ODQgLyogSW5mZXJyZWRWYWx1ZS5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbmZlcnJlZFZhbHVlLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKKwkJMEZGOEJERTkxQUQ0Q0Y3MTAwREZFODg0IC8qIEluZmVycmVk
VmFsdWUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gSW5mZXJyZWRWYWx1ZS5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkY5MjJDRjE0RjQ2QjEzMDA0MUEyNEUg
LyogSlNDTExJbnRPZmZzZXRzRXh0cmFjdG9yICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGV4cGxpY2l0RmlsZVR5cGUgPSAiY29tcGlsZWQubWFjaC1vLmV4ZWN1dGFibGUiOyBpbmNsdWRl
SW5JbmRleCA9IDA7IHBhdGggPSBKU0NMTEludE9mZnNldHNFeHRyYWN0b3I7IHNvdXJjZVRyZWUg
PSBCVUlMVF9QUk9EVUNUU19ESVI7IH07CiAJCTBGRkM5OUQwMTg0RUM4QUQwMDlDMTBBQiAvKiBD
b25zdGFudE1vZGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQ29uc3RhbnRN
b2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRkM5OUQyMTg0RUUzMTgwMDlD
MTBBQiAvKiBBcnJheUJ1ZmZlck5ldXRlcmluZ1dhdGNocG9pbnQuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQXJyYXlCdWZmZXJOZXV0ZXJpbmdXYXRjaHBvaW50LmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTM0MjEsNyArMzQyNCw2IEBACiAJCUZF
MjBDRTlDMTVGMDRBOTUwMERGMzQzMCAvKiBMTEludENMb29wLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IExMSW50Q0xvb3AuaDsgcGF0aCA9IGxsaW50L0xMSW50Q0xvb3AuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkU0QTMzMUQxNUJEMkUwNzAwNkY1NEYzIC8q
IFZNSW5zcGVjdG9yLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFZN
SW5zcGVjdG9yLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkU0QTMzMUUxNUJE
MkUwNzAwNkY1NEYzIC8qIFZNSW5zcGVjdG9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsg
cGF0aCA9IFZNSW5zcGVjdG9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCUZFNTI0
OEY4MTkxNDQyRDkwMEI3RkRFNCAvKiBWYXJpYWJsZVdhdGNocG9pbnRTZXRJbmxpbmVzLmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFZhcmlhYmxlV2F0Y2hwb2ludFNldElubGlu
ZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRkU1OTMyQTUxODNDNUEyNjAwQTFF
Q0NDIC8qIFZNRW50cnlTY29wZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBWTUVudHJ5U2NvcGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTU5
MzJBNjE4M0M1QTI2MDBBMUVDQ0MgLyogVk1FbnRyeVNjb3BlLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgcGF0aCA9IFZNRW50cnlTY29wZS5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlGRTdCQTYwRDFBMUE3Q0VDMDBGMUY3QjQgLyogSGVhcFZlcmlmaWVyLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEhlYXBWZXJpZmllci5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC00NDA5LDYgKzQ0MTEsOCBAQAogCQkJCTBGQjdGMzhFMTVF
RDhFMzgwMEYxNjdCMiAvKiBJbmRleGluZ0hlYWRlcklubGluZXMuaCAqLywKIAkJCQkwRjEzRTA0
QzE2MTY0QTFCMDBEQzhERTcgLyogSW5kZXhpbmdUeXBlLmNwcCAqLywKIAkJCQkwRkI3RjM4RjE1
RUQ4RTM4MDBGMTY3QjIgLyogSW5kZXhpbmdUeXBlLmggKi8sCisJCQkJMEZGOEJERTgxQUQ0Q0Y3
MTAwREZFODg0IC8qIEluZmVycmVkVmFsdWUuY3BwICovLAorCQkJCTBGRjhCREU5MUFENENGNzEw
MERGRTg4NCAvKiBJbmZlcnJlZFZhbHVlLmggKi8sCiAJCQkJRTE3ODYzNkMwRDlCRUVDMzAwRDc0
RTc1IC8qIEluaXRpYWxpemVUaHJlYWRpbmcuY3BwICovLAogCQkJCUUxNzg2MzNGMEQ5QkVDMDAw
MEQ3NEU3NSAvKiBJbml0aWFsaXplVGhyZWFkaW5nLmggKi8sCiAJCQkJQTdBOEFGMkIxN0FEQjVG
MzAwNUFCMTc0IC8qIEludDhBcnJheS5oICovLApAQCAtNTI3Nyw5ICs1MjgxLDggQEAKIAkJCQkw
Rjk2M0IzNjEzRkM2RkRFMDAwMkQ5QjIgLyogVmFsdWVQcm9maWxlLmggKi8sCiAJCQkJMEYyNEU1
NTcxN0Y3NEVEQjAwQUJCMjE3IC8qIFZhbHVlUmVjb3ZlcnkuY3BwICovLAogCQkJCTBGNDI2QTQ1
MTQ2MENCQUIwMDEzMUY4RiAvKiBWYWx1ZVJlY292ZXJ5LmggKi8sCi0JCQkJMEZDQTkxMTIxOTVF
NjZBMDAwNDI2NDM4IC8qIFZhcmlhYmxlV2F0Y2hwb2ludFNldC5jcHAgKi8sCi0JCQkJMEY5MTgx
QzYxODQxNUNBNTAwNTdCNjY5IC8qIFZhcmlhYmxlV2F0Y2hwb2ludFNldC5oICovLAotCQkJCUZF
NTI0OEY4MTkxNDQyRDkwMEI3RkRFNCAvKiBWYXJpYWJsZVdhdGNocG9pbnRTZXRJbmxpbmVzLmgg
Ki8sCisJCQkJMEY2QzczNEUxQUM5Rjk5RjAwQkUxNjgyIC8qIFZhcmlhYmxlV3JpdGVGaXJlRGV0
YWlsLmNwcCAqLywKKwkJCQkwRjZDNzM0RjFBQzlGOTlGMDBCRTE2ODIgLyogVmFyaWFibGVXcml0
ZUZpcmVEZXRhaWwuaCAqLywKIAkJCQkwRjIwQzI1ODFBODAxM0FCMDBEQTMyMjkgLyogVmlydHVh
bFJlZ2lzdGVyLmNwcCAqLywKIAkJCQkwRjQyNkE0NjE0NjBDQkFCMDAxMzFGOEYgLyogVmlydHVh
bFJlZ2lzdGVyLmggKi8sCiAJCQkJMEY5MTlEMjIxNTg1M0NERTAwNEE0RTdEIC8qIFdhdGNocG9p
bnQuY3BwICovLApAQCAtNTU2NSw3ICs1NTY4LDYgQEAKIAkJCQlDNEY0QjZGNTFBMDVDOTg0MDA1
Q0FCNzYgLyogZ2VuZXJhdGVfb2JqY19wcm90b2NvbF90eXBlc19pbXBsZW1lbnRhdGlvbi5weSBp
biBIZWFkZXJzICovLAogCQkJCUE1ODQwMzIwMThCRkZCRTEwMDVBMDgxMSAvKiBJbnNwZWN0b3JB
Z2VudC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkFBQkNERTcxOEVGMjk0MjAwMDAyMDk2IC8qIEdD
TG9nZ2luZy5oIGluIEhlYWRlcnMgKi8sCi0JCQkJRkU1MjQ4RjkxOTE0NDJEOTAwQjdGREU0IC8q
IFZhcmlhYmxlV2F0Y2hwb2ludFNldElubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFN0JB
NjEwMUExQTdDRUMwMEYxRjdCNCAvKiBIZWFwVmVyaWZpZXIuaCBpbiBIZWFkZXJzICovLAogCQkJ
CUE1RUY5QjE0MUExRDQzRjYwMDcwMkU5MCAvKiBnZW5lcmF0ZV9jcHBfYmFja2VuZF9kaXNwYXRj
aGVyX2hlYWRlci5weSBpbiBIZWFkZXJzICovLAogCQkJCUMyREE3NzgzMThFMjU5OTkwMDY2RkNC
NiAvKiBIZWFwSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCkBAIC02MzQ3LDYgKzYzNDksNyBAQAog
CQkJCUE3OTBERDZFMTgyRjQ5OTcwMDU4ODgwNyAvKiBTZXRJdGVyYXRvclByb3RvdHlwZS5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJQTcyOTlEQTIxN0QxMjg0ODAwNUY1RkY5IC8qIFNldFByb3RvdHlw
ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZBRTY0QUExMzVFNUUxQzAwOTYzMDEyIC8qIFNINEFz
c2VtYmxlci5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZGOEJERUIxQUQ0Q0Y3MTAwREZFODg0IC8q
IEluZmVycmVkVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGMkI2NzA1MTdCNkI1QUIwMEE3
QUUzRiAvKiBTaW1wbGVUeXBlZEFycmF5Q29udHJvbGxlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MTRCQTc4RjExM0FBQjg4RjAwNUI3QzJDIC8qIFNsb3RWaXNpdG9yLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRkIxNzY2MTE5NkI4RjlFMDA5MTA1MkEgLyogREZHSGVhcExvY2F0aW9uLmggaW4gSGVh
ZGVycyAqLywKQEAgLTYzNTQsNiArNjM1Nyw3IEBACiAJCQkJQTcwOUYyRjAxN0EwQUMwNDAwNTEy
RTk4IC8qIFNsb3dQYXRoQ2FsbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTMzMDQwMDQwRTZBNzQ5
NDAwNzg2RTZBIC8qIFNtYWxsU3RyaW5ncy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NjQw
RTE2RjVDRDAwQjM0NDYwIC8qIFNvdXJjZUNvZGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGNkM3
MzUxMUFDOUY5OUYwMEJFMTY4MiAvKiBWYXJpYWJsZVdyaXRlRmlyZURldGFpbC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQkMxOEM0NjMwRTE2RjVDRDAwQjM0NDYwIC8qIFNvdXJjZVByb3ZpZGVyLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk3MEVDMEVDMzFBQTBEN0RBMDBCNkFBRkEgLyogSlNTdHJpbmdJ
dGVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRTQ5REMxNkMxMkVGMjk0RTAwMTg0QTFGIC8q
IFNvdXJjZVByb3ZpZGVyQ2FjaGUuaCBpbiBIZWFkZXJzICovLApAQCAtNjQyMSw3ICs2NDI1LDYg
QEAKIAkJCQkwRjJFODkyQzE2RDAyOEFEMDA5RTRGRDIgLyogVW51c2VkUG9pbnRlci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEY5NjNCMzgxM0ZDNkZFOTAwMDJEOUIyIC8qIFZhbHVlUHJvZmlsZS5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEY0MjZBNDgxNDYwQ0JCMzAwMTMxRjhGIC8qIFZhbHVlUmVj
b3ZlcnkuaCBpbiBIZWFkZXJzICovLAotCQkJCTBGOTE4MUM3MTg0MTVDQTUwMDU3QjY2OSAvKiBW
YXJpYWJsZVdhdGNocG9pbnRTZXQuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGOUM1RTVGMThFMzVG
NUUwMEQ0MzFDMyAvKiBGVExEV0FSRlJlZ2lzdGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjQy
NkE0OTE0NjBDQkI3MDAxMzFGOEYgLyogVmlydHVhbFJlZ2lzdGVyLmggaW4gSGVhZGVycyAqLywK
IAkJCQlCQzE4QzQyMDBFMTZGNUNEMDBCMzQ0NjAgLyogVk0uaCBpbiBIZWFkZXJzICovLApAQCAt
Njk2Myw2ICs2OTY2LDcgQEAKIAkJCQlBNzdGMTgyMTE2NDA4OEIyMDA2NDBBNDcgLyogQ29kZUNh
Y2hlLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGOEY5NDQ2MTY2NzY0RjEwMEQ2MTk3MSAvKiBD
b2RlT3JpZ2luLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2QjU4MjY3MTREMjc5NkMwMEE5QzMw
NiAvKiBDb2RlUHJvZmlsZS5jcHAgaW4gU291cmNlcyAqLywKKwkJCQkwRjZDNzM1MDFBQzlGOTlG
MDBCRTE2ODIgLyogVmFyaWFibGVXcml0ZUZpcmVEZXRhaWwuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJODZCNTgyNjkxNEQyNzk3MDAwQTlDMzA2IC8qIENvZGVQcm9maWxpbmcuY3BwIGluIFNvdXJj
ZXMgKi8sCiAJCQkJMEY4Rjk0M0MxNjY3NjMxMzAwRDYxOTcxIC8qIENvZGVTcGVjaWFsaXphdGlv
bktpbmQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY4Rjk0NDIxNjY3NjMzNTAwRDYxOTcxIC8q
IENvZGVUeXBlLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzAyNyw3ICs3MDMxLDYgQEAKIAkJCQlD
Mjk4MUZEODE3QkFFRTRCMDBBM0JDOTggLyogREZHRGVzaXJlZFdlYWtSZWZlcmVuY2VzLmNwcCBp
biBTb3VyY2VzICovLAogCQkJCUMyOTgxRkRDMTdCQUZGNDQwMEEzQkM5OCAvKiBERkdEZXNpcmVk
V3JpdGVCYXJyaWVycy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkY0Mjc2NDE1OTFBMUNDMDA0
Q0I5RkYgLyogREZHRGlzYXNzZW1ibGVyLmNwcCBpbiBTb3VyY2VzICovLAotCQkJCTBGQ0E5MTEz
MTk1RTY2QTAwMDQyNjQzOCAvKiBWYXJpYWJsZVdhdGNocG9pbnRTZXQuY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJMEZEODFBRDIxNTRGQjRFRTAwOTgzRTcyIC8qIERGR0RvbWluYXRvcnMuY3BwIGlu
IFNvdXJjZXMgKi8sCiAJCQkJMEZEM0M4MjYxNDExNUQ0MDAwRkQ4MUNCIC8qIERGR0RyaXZlci5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjJCOUNFMjE5RDBCQTdEMDBCMUQxQjUgLyogREZHQXZh
aWxhYmlsaXR5TWFwLmNwcCBpbiBTb3VyY2VzICovLApAQCAtNzMzMSw2ICs3MzM0LDcgQEAKIAkJ
CQkwRjJCNjZGRTE3QjZCNUFCMDBBN0FFM0YgLyogSlNUeXBlZEFycmF5cy5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRkYwNTRGOTFBQzM1QjQ0MDBFNUJFNTcgLyogRXhlY3V0YWJsZUFsbG9jYXRp
b25GdXp6LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTg2RTNDNjFBMTY3QkFCRUUwMDZENzYwQSAv
KiBKU1ZhbHVlLm1tIGluIFNvdXJjZXMgKi8sCisJCQkJMEZGOEJERUExQUQ0Q0Y3MTAwREZFODg0
IC8qIEluZmVycmVkVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTRCRDVBMzIwQTNFOTFG
NjAwQkFGNTlDIC8qIEpTVmFsdWVSZWYuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMTQ3RjM5RDcx
MDdFQzM3NjAwNDI3QTQ4IC8qIEpTRW52aXJvbm1lbnRSZWNvcmQuY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJODZFM0M2MUMxNjdCQUJFRTAwNkQ3NjBBIC8qIEpTVmlydHVhbE1hY2hpbmUubW0gaW4g
U291cmNlcyAqLywKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29k
ZUxpc3QuanNvbgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
Qnl0ZWNvZGVMaXN0Lmpzb24JKHJldmlzaW9uIDE4MjQ5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QuanNvbgkod29ya2luZyBjb3B5KQpAQCAtNiw3ICs2
LDYgQEAKICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX2VudGVyIiwgImxlbmd0aCIgOiAxIH0s
CiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9jcmVhdGVfbGV4aWNhbF9lbnZpcm9ubWVudCIs
ICJsZW5ndGgiIDogMyB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfZ2V0X3Njb3BlIiwg
Imxlbmd0aCIgOiAyIH0sCi0gICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF90b3VjaF9lbnRyeSIs
ICJsZW5ndGgiIDogMSB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfY3JlYXRlX2RpcmVj
dF9hcmd1bWVudHMiLCAibGVuZ3RoIiA6IDIgfSwKICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9w
X2NyZWF0ZV9zY29wZWRfYXJndW1lbnRzIiwgImxlbmd0aCIgOiAzIH0sCiAgICAgICAgICAgICB7
ICJuYW1lIiA6ICJvcF9jcmVhdGVfb3V0X29mX2JhbmRfYXJndW1lbnRzIiwgImxlbmd0aCIgOiAy
IH0sCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVV
c2VEZWYuaAkocmV2aXNpb24gMTgyNDk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0J5dGVjb2RlVXNlRGVmLmgJKHdvcmtpbmcgY29weSkKQEAgLTUwLDcgKzUwLDYgQEAgdm9p
ZCBjb21wdXRlVXNlc0ZvckJ5dGVjb2RlT2Zmc2V0KAogICAgIGNhc2Ugb3BfbmV3X29iamVjdDoK
ICAgICBjYXNlIG9wX2VudGVyOgogICAgIGNhc2Ugb3BfY2F0Y2g6Ci0gICAgY2FzZSBvcF90b3Vj
aF9lbnRyeToKICAgICBjYXNlIG9wX3Byb2ZpbGVfY29udHJvbF9mbG93OgogICAgIGNhc2Ugb3Bf
Y3JlYXRlX2RpcmVjdF9hcmd1bWVudHM6CiAgICAgY2FzZSBvcF9jcmVhdGVfb3V0X29mX2JhbmRf
YXJndW1lbnRzOgpAQCAtMjc4LDcgKzI3Nyw2IEBAIHZvaWQgY29tcHV0ZURlZnNGb3JCeXRlY29k
ZU9mZnNldChDb2RlQmwKICAgICBjYXNlIG9wX3B1dF9ieV9pbmRleDoKICAgICBjYXNlIG9wX3By
b2ZpbGVfdHlwZToKICAgICBjYXNlIG9wX3Byb2ZpbGVfY29udHJvbF9mbG93OgotICAgIGNhc2Ug
b3BfdG91Y2hfZW50cnk6CiAgICAgY2FzZSBvcF9wdXRfdG9fYXJndW1lbnRzOgogI2RlZmluZSBM
TElOVF9IRUxQRVJfT1BDT0RFUyhvcGNvZGUsIGxlbmd0aCkgY2FzZSBvcGNvZGU6CiAgICAgICAg
IEZPUl9FQUNIX0xMSU5UX09QQ09ERV9FWFRFTlNJT04oTExJTlRfSEVMUEVSX09QQ09ERVMpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHJl
dmlzaW9uIDE4MjQ5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxv
Y2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NTgsMTAgKzc1OCw2IEBAIHZvaWQgQ29kZUJsb2Nr
OjpkdW1wQnl0ZWNvZGUoCiAgICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVj
LCBsb2NhdGlvbiwgaXQsICJlbnRlciIpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0K
LSAgICAgICAgY2FzZSBvcF90b3VjaF9lbnRyeTogewotICAgICAgICAgICAgcHJpbnRMb2NhdGlv
bkFuZE9wKG91dCwgZXhlYywgbG9jYXRpb24sIGl0LCAidG91Y2hfZW50cnkiKTsKLSAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICB9CiAgICAgICAgIGNhc2Ugb3BfY3JlYXRlX2xleGljYWxfZW52
aXJvbm1lbnQ6IHsKICAgICAgICAgICAgIGludCByMCA9ICgrK2l0KS0+dS5vcGVyYW5kOwogICAg
ICAgICAgICAgaW50IHIxID0gKCsraXQpLT51Lm9wZXJhbmQ7CkBAIC0xOTU3LDcgKzE5NTMsNyBA
QCBDb2RlQmxvY2s6OkNvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBvCiAgICAgICAgICAgICBp
bnN0cnVjdGlvbnNbaSArIDRdLnUub3BlcmFuZCA9IG9wLnR5cGU7CiAgICAgICAgICAgICBpbnN0
cnVjdGlvbnNbaSArIDVdLnUub3BlcmFuZCA9IG9wLmRlcHRoOwogICAgICAgICAgICAgaWYgKG9w
LmxleGljYWxFbnZpcm9ubWVudCkKLSAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIDZd
LnUubGV4aWNhbEVudmlyb25tZW50LnNldCgqdm0oKSwgb3duZXJFeGVjdXRhYmxlLCBvcC5sZXhp
Y2FsRW52aXJvbm1lbnQpOworICAgICAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgNl0udS5z
eW1ib2xUYWJsZS5zZXQoKnZtKCksIG93bmVyRXhlY3V0YWJsZSwgb3AubGV4aWNhbEVudmlyb25t
ZW50LT5zeW1ib2xUYWJsZSgpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKQEAg
LTE5ODUsNyArMTk4MSw2IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUq
IG8KICAgICAgICAgICAgIGVsc2UgaWYgKG9wLnN0cnVjdHVyZSkKICAgICAgICAgICAgICAgICBp
bnN0cnVjdGlvbnNbaSArIDVdLnUuc3RydWN0dXJlLnNldCgqdm0oKSwgb3duZXJFeGVjdXRhYmxl
LCBvcC5zdHJ1Y3R1cmUpOwogICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyA2XS51LnBvaW50
ZXIgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihvcC5vcGVyYW5kKTsKLQogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KIApAQCAtMjAwMSw3ICsxOTk2LDcgQEAgQ29kZUJsb2NrOjpDb2Rl
QmxvY2soU2NyaXB0RXhlY3V0YWJsZSogbwogICAgICAgICAgICAgICAgICAgICBDb25jdXJyZW50
SklUTG9ja2VyIGxvY2tlcihtX3N5bWJvbFRhYmxlLT5tX2xvY2spOwogICAgICAgICAgICAgICAg
ICAgICBTeW1ib2xUYWJsZTo6TWFwOjppdGVyYXRvciBpdGVyID0gbV9zeW1ib2xUYWJsZS0+Zmlu
ZChsb2NrZXIsIHVpZCk7CiAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChpdGVyICE9IG1fc3lt
Ym9sVGFibGUtPmVuZChsb2NrZXIpKTsKLSAgICAgICAgICAgICAgICAgICAgaXRlci0+dmFsdWUu
cHJlcGFyZVRvV2F0Y2goc3ltYm9sVGFibGUoKSk7CisgICAgICAgICAgICAgICAgICAgIGl0ZXIt
PnZhbHVlLnByZXBhcmVUb1dhdGNoKCk7CiAgICAgICAgICAgICAgICAgICAgIGluc3RydWN0aW9u
c1tpICsgNV0udS53YXRjaHBvaW50U2V0ID0gaXRlci0+dmFsdWUud2F0Y2hwb2ludFNldCgpOwog
ICAgICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgICAgICAgICBpbnN0cnVjdGlvbnNb
aSArIDVdLnUud2F0Y2hwb2ludFNldCA9IG51bGxwdHI7CkBAIC0yNTQ2LDEyICsyNTQxLDE1IEBA
IHZvaWQgQ29kZUJsb2NrOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSgKICAgICAgICAgICAgICAg
ICAgICAgY3VySW5zdHJ1Y3Rpb25bM10udS50b1RoaXNTdGF0dXMsIFRvVGhpc0NsZWFyZWRCeUdD
KTsKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGNhc2Ugb3BfcmVzb2x2ZV9z
Y29wZTogewotICAgICAgICAgICAgICAgIFdyaXRlQmFycmllckJhc2U8SlNMZXhpY2FsRW52aXJv
bm1lbnQ+JiBsZXhpY2FsRW52aXJvbm1lbnQgPSBjdXJJbnN0cnVjdGlvbls2XS51LmxleGljYWxF
bnZpcm9ubWVudDsKLSAgICAgICAgICAgICAgICBpZiAoIWxleGljYWxFbnZpcm9ubWVudCB8fCBI
ZWFwOjppc01hcmtlZChsZXhpY2FsRW52aXJvbm1lbnQuZ2V0KCkpKQorICAgICAgICAgICAgICAg
IC8vIFJpZ2h0IG5vdyB0aGlzIGlzbid0IHN0cmljdGx5IG5lY2Vzc2FyeS4gQW55IHN5bWJvbCB0
YWJsZXMgdGhhdCB0aGlzIHdpbGwgcmVmZXIgdG8KKyAgICAgICAgICAgICAgICAvLyBhcmUgZm9y
IG91dGVyIGZ1bmN0aW9ucywgYW5kIHdlIHJlZmVyIHRvIHRob3NlIGZ1bmN0aW9ucyBzdHJvbmds
eSwgYW5kIHRoZXkgcmVmZXIKKyAgICAgICAgICAgICAgICAvLyB0byB0aGUgc3ltYm9sIHRhYmxl
IHN0cm9uZ2x5LiBCdXQgaXQncyBuaWNlIHRvIGJlIG9uIHRoZSBzYWZlIHNpZGUuCisgICAgICAg
ICAgICAgICAgV3JpdGVCYXJyaWVyQmFzZTxTeW1ib2xUYWJsZT4mIHN5bWJvbFRhYmxlID0gY3Vy
SW5zdHJ1Y3Rpb25bNl0udS5zeW1ib2xUYWJsZTsKKyAgICAgICAgICAgICAgICBpZiAoIXN5bWJv
bFRhYmxlIHx8IEhlYXA6OmlzTWFya2VkKHN5bWJvbFRhYmxlLmdldCgpKSkKICAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgaWYgKE9wdGlvbnM6OnZlcmJvc2VPU1Io
KSkKLSAgICAgICAgICAgICAgICAgICAgZGF0YUxvZ0YoIkNsZWFyaW5nIGRlYWQgbGV4aWNhbEVu
dmlyb25tZW50ICVwLlxuIiwgbGV4aWNhbEVudmlyb25tZW50LmdldCgpKTsKLSAgICAgICAgICAg
ICAgICBsZXhpY2FsRW52aXJvbm1lbnQuY2xlYXIoKTsKKyAgICAgICAgICAgICAgICAgICAgZGF0
YUxvZ0YoIkNsZWFyaW5nIGRlYWQgc3ltYm9sVGFibGUgJXAuXG4iLCBzeW1ib2xUYWJsZS5nZXQo
KSk7CisgICAgICAgICAgICAgICAgc3ltYm9sVGFibGUuY2xlYXIoKTsKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNhc2Ugb3BfZ2V0X2Zyb21fc2Nv
cGU6CkBAIC0zODE1LDYgKzM4MTMsMTggQEAgU3RyaW5nIENvZGVCbG9jazo6bmFtZUZvclJlZ2lz
dGVyKFZpcnR1YQogICAgIHJldHVybiAiIjsKIH0KIAorVmFsdWVQcm9maWxlKiBDb2RlQmxvY2s6
OnZhbHVlUHJvZmlsZUZvckJ5dGVjb2RlT2Zmc2V0KGludCBieXRlY29kZU9mZnNldCkKK3sKKyAg
ICBWYWx1ZVByb2ZpbGUqIHJlc3VsdCA9IGJpbmFyeVNlYXJjaDxWYWx1ZVByb2ZpbGUsIGludD4o
CisgICAgICAgIG1fdmFsdWVQcm9maWxlcywgbV92YWx1ZVByb2ZpbGVzLnNpemUoKSwgYnl0ZWNv
ZGVPZmZzZXQsCisgICAgICAgIGdldFZhbHVlUHJvZmlsZUJ5dGVjb2RlT2Zmc2V0PFZhbHVlUHJv
ZmlsZT4pOworICAgIEFTU0VSVChyZXN1bHQtPm1fYnl0ZWNvZGVPZmZzZXQgIT0gLTEpOworICAg
IEFTU0VSVChpbnN0cnVjdGlvbnMoKVtieXRlY29kZU9mZnNldCArIG9wY29kZUxlbmd0aCgKKyAg
ICAgICAgbV92bS0+aW50ZXJwcmV0ZXItPmdldE9wY29kZUlEKAorICAgICAgICAgICAgaW5zdHJ1
Y3Rpb25zKClbYnl0ZWNvZGVPZmZzZXRdLnUub3Bjb2RlKSkgLSAxXS51LnByb2ZpbGUgPT0gcmVz
dWx0KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiB2b2lkIENvZGVCbG9jazo6dmFsaWRhdGUo
KQogewogICAgIEJ5dGVjb2RlTGl2ZW5lc3NBbmFseXNpcyBsaXZlbmVzcyh0aGlzKTsgLy8gQ29t
cHV0ZSBkaXJlY3RseSBmcm9tIHNjcmF0Y2ggc28gaXQgZG9lc24ndCBlZmZlY3QgQ29kZUJsb2Nr
IGZvb3RwcmludC4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxv
Y2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmgJKHJldmlzaW9uIDE4MjQ5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMzg2LDE3ICszODYsNyBAQCBwdWJsaWM6
CiAKICAgICB1bnNpZ25lZCBudW1iZXJPZlZhbHVlUHJvZmlsZXMoKSB7IHJldHVybiBtX3ZhbHVl
UHJvZmlsZXMuc2l6ZSgpOyB9CiAgICAgVmFsdWVQcm9maWxlKiB2YWx1ZVByb2ZpbGUoaW50IGlu
ZGV4KSB7IHJldHVybiAmbV92YWx1ZVByb2ZpbGVzW2luZGV4XTsgfQotICAgIFZhbHVlUHJvZmls
ZSogdmFsdWVQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQoaW50IGJ5dGVjb2RlT2Zmc2V0KQotICAg
IHsKLSAgICAgICAgVmFsdWVQcm9maWxlKiByZXN1bHQgPSBiaW5hcnlTZWFyY2g8VmFsdWVQcm9m
aWxlLCBpbnQ+KAotICAgICAgICAgICAgbV92YWx1ZVByb2ZpbGVzLCBtX3ZhbHVlUHJvZmlsZXMu
c2l6ZSgpLCBieXRlY29kZU9mZnNldCwKLSAgICAgICAgICAgIGdldFZhbHVlUHJvZmlsZUJ5dGVj
b2RlT2Zmc2V0PFZhbHVlUHJvZmlsZT4pOwotICAgICAgICBBU1NFUlQocmVzdWx0LT5tX2J5dGVj
b2RlT2Zmc2V0ICE9IC0xKTsKLSAgICAgICAgQVNTRVJUKGluc3RydWN0aW9ucygpW2J5dGVjb2Rl
T2Zmc2V0ICsgb3Bjb2RlTGVuZ3RoKAotICAgICAgICAgICAgbV92bS0+aW50ZXJwcmV0ZXItPmdl
dE9wY29kZUlEKAotICAgICAgICAgICAgICAgIGluc3RydWN0aW9ucygpW2J5dGVjb2RlT2Zmc2V0
XS51Lm9wY29kZSkpIC0gMV0udS5wcm9maWxlID09IHJlc3VsdCk7Ci0gICAgICAgIHJldHVybiBy
ZXN1bHQ7Ci0gICAgfQorICAgIFZhbHVlUHJvZmlsZSogdmFsdWVQcm9maWxlRm9yQnl0ZWNvZGVP
ZmZzZXQoaW50IGJ5dGVjb2RlT2Zmc2V0KTsKICAgICBTcGVjdWxhdGVkVHlwZSB2YWx1ZVByb2Zp
bGVQcmVkaWN0aW9uRm9yQnl0ZWNvZGVPZmZzZXQoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYg
bG9ja2VyLCBpbnQgYnl0ZWNvZGVPZmZzZXQpCiAgICAgewogICAgICAgICByZXR1cm4gdmFsdWVQ
cm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQoYnl0ZWNvZGVPZmZzZXQpLT5jb21wdXRlVXBkYXRlZFBy
ZWRpY3Rpb24obG9ja2VyKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9D
b2RlT3JpZ2luLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ29kZU9yaWdpbi5jcHAJKHJldmlzaW9uIDE4MjQ5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQxLDYgKzE0
MSwxOCBAQCB2b2lkIENvZGVPcmlnaW46OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlCiAgICAgZHVt
cChvdXQpOwogfQogCitKU0Z1bmN0aW9uKiBJbmxpbmVDYWxsRnJhbWU6OmNhbGxlZUNvbnN0YW50
KCkgY29uc3QKK3sKKyAgICBpZiAoY2FsbGVlUmVjb3ZlcnkuaXNDb25zdGFudCgpKQorICAgICAg
ICByZXR1cm4ganNDYXN0PEpTRnVuY3Rpb24qPihjYWxsZWVSZWNvdmVyeS5jb25zdGFudCgpKTsK
KyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwordm9pZCBJbmxpbmVDYWxsRnJhbWU6OnZpc2l0QWdn
cmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIHZpc2l0b3IuYXBwZW5kKCZleGVj
dXRhYmxlKTsKK30KKwogSlNGdW5jdGlvbiogSW5saW5lQ2FsbEZyYW1lOjpjYWxsZWVGb3JDYWxs
RnJhbWUoRXhlY1N0YXRlKiBleGVjKSBjb25zdAogewogICAgIHJldHVybiBqc0Nhc3Q8SlNGdW5j
dGlvbio+KGNhbGxlZVJlY292ZXJ5LnJlY292ZXIoZXhlYykpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5oCShyZXZpc2lvbiAxODI0OTgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5oCSh3b3JraW5nIGNvcHkp
CkBAIC0yOCw3ICsyOCw2IEBACiAKICNpbmNsdWRlICJDb2RlQmxvY2tIYXNoLmgiCiAjaW5jbHVk
ZSAiQ29kZVNwZWNpYWxpemF0aW9uS2luZC5oIgotI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKICNp
bmNsdWRlICJWYWx1ZVJlY292ZXJ5LmgiCiAjaW5jbHVkZSAiV3JpdGVCYXJyaWVyLmgiCiAjaW5j
bHVkZSA8d3RmL0JpdFZlY3Rvci5oPgpAQCAtMjA3LDE3ICsyMDYsOCBAQCBzdHJ1Y3QgSW5saW5l
Q2FsbEZyYW1lIHsKICAgICAKICAgICBDb2RlU3BlY2lhbGl6YXRpb25LaW5kIHNwZWNpYWxpemF0
aW9uS2luZCgpIGNvbnN0IHsgcmV0dXJuIHNwZWNpYWxpemF0aW9uS2luZEZvcihzdGF0aWNfY2Fz
dDxLaW5kPihraW5kKSk7IH0KIAotICAgIEpTRnVuY3Rpb24qIGNhbGxlZUNvbnN0YW50KCkgY29u
c3QKLSAgICB7Ci0gICAgICAgIGlmIChjYWxsZWVSZWNvdmVyeS5pc0NvbnN0YW50KCkpCi0gICAg
ICAgICAgICByZXR1cm4ganNDYXN0PEpTRnVuY3Rpb24qPihjYWxsZWVSZWNvdmVyeS5jb25zdGFu
dCgpKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgdm9pZCB2aXNpdEFnZ3JlZ2F0
ZShTbG90VmlzaXRvciYgdmlzaXRvcikKLSAgICB7Ci0gICAgICAgIHZpc2l0b3IuYXBwZW5kKCZl
eGVjdXRhYmxlKTsKLSAgICB9CisgICAgSlNGdW5jdGlvbiogY2FsbGVlQ29uc3RhbnQoKSBjb25z
dDsKKyAgICB2b2lkIHZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJik7CiAgICAgCiAgICAgLy8g
R2V0IHRoZSBjYWxsZWUgZ2l2ZW4gYSBtYWNoaW5lIGNhbGwgZnJhbWUgdG8gd2hpY2ggdGhpcyBJ
bmxpbmVDYWxsRnJhbWUgYmVsb25ncy4KICAgICBKU0Z1bmN0aW9uKiBjYWxsZWVGb3JDYWxsRnJh
bWUoRXhlY1N0YXRlKikgY29uc3Q7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvSW5zdHJ1Y3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvSW5zdHJ1Y3Rpb24uaAkocmV2aXNpb24gMTgyNDk4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0luc3RydWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ2LDcgKzQ2
LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiBjbGFzcyBBcnJheUFsbG9jYXRpb25Qcm9maWxlOwogY2xh
c3MgQXJyYXlQcm9maWxlOwogY2xhc3MgT2JqZWN0QWxsb2NhdGlvblByb2ZpbGU7Ci1jbGFzcyBW
YXJpYWJsZVdhdGNocG9pbnRTZXQ7CitjbGFzcyBXYXRjaHBvaW50U2V0Owogc3RydWN0IExMSW50
Q2FsbExpbmtJbmZvOwogc3RydWN0IFZhbHVlUHJvZmlsZTsKIApAQCAtMTA2LDYgKzEwNiw3IEBA
IHN0cnVjdCBJbnN0cnVjdGlvbiB7CiAgICAgICAgIE9wY29kZSBvcGNvZGU7CiAgICAgICAgIGlu
dCBvcGVyYW5kOwogICAgICAgICBXcml0ZUJhcnJpZXJCYXNlPFN0cnVjdHVyZT4gc3RydWN0dXJl
OworICAgICAgICBXcml0ZUJhcnJpZXJCYXNlPFN5bWJvbFRhYmxlPiBzeW1ib2xUYWJsZTsKICAg
ICAgICAgV3JpdGVCYXJyaWVyQmFzZTxTdHJ1Y3R1cmVDaGFpbj4gc3RydWN0dXJlQ2hhaW47CiAg
ICAgICAgIFdyaXRlQmFycmllckJhc2U8SlNDZWxsPiBqc0NlbGw7CiAgICAgICAgIFdyaXRlQmFy
cmllcjxVbmtub3duPiogdmFyaWFibGVQb2ludGVyOwpAQCAtMTE3LDggKzExOCw3IEBAIHN0cnVj
dCBJbnN0cnVjdGlvbiB7CiAgICAgICAgIEFycmF5UHJvZmlsZSogYXJyYXlQcm9maWxlOwogICAg
ICAgICBBcnJheUFsbG9jYXRpb25Qcm9maWxlKiBhcnJheUFsbG9jYXRpb25Qcm9maWxlOwogICAg
ICAgICBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZSogb2JqZWN0QWxsb2NhdGlvblByb2ZpbGU7Ci0g
ICAgICAgIFZhcmlhYmxlV2F0Y2hwb2ludFNldCogd2F0Y2hwb2ludFNldDsKLSAgICAgICAgV3Jp
dGVCYXJyaWVyQmFzZTxKU0xleGljYWxFbnZpcm9ubWVudD4gbGV4aWNhbEVudmlyb25tZW50Owor
ICAgICAgICBXYXRjaHBvaW50U2V0KiB3YXRjaHBvaW50U2V0OwogICAgICAgICB2b2lkKiBwb2lu
dGVyOwogICAgICAgICBib29sKiBwcmVkaWNhdGVQb2ludGVyOwogICAgICAgICBUb1RoaXNTdGF0
dXMgdG9UaGlzU3RhdHVzOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1Zh
cmlhYmxlV2F0Y2hwb2ludFNldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1ZhcmlhYmxlV2F0Y2hwb2ludFNldC5jcHAJKHJldmlzaW9uIDE4MjQ5OCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYXJpYWJsZVdhdGNocG9pbnRTZXQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDQ5ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1ZGUg
IlZhcmlhYmxlV2F0Y2hwb2ludFNldC5oIgotCi0jaW5jbHVkZSAiSlNDSW5saW5lcy5oIgotCi1u
YW1lc3BhY2UgSlNDIHsKLQotdm9pZCBWYXJpYWJsZVdyaXRlRmlyZURldGFpbDo6ZHVtcChQcmlu
dFN0cmVhbSYgb3V0KSBjb25zdAotewotICAgIG91dC5wcmludCgiV3JpdGUgdG8gIiwgbV9uYW1l
LCAiIGluICIsIEpTVmFsdWUobV9vYmplY3QpKTsKLX0KLQotdm9pZCBWYXJpYWJsZVdhdGNocG9p
bnRTZXQ6Om5vdGlmeVdyaXRlKFZNJiB2bSwgSlNWYWx1ZSB2YWx1ZSwgSlNPYmplY3QqIGJhc2VP
YmplY3QsIGNvbnN0IFByb3BlcnR5TmFtZSYgcHJvcGVydHlOYW1lKQotewotICAgIG5vdGlmeVdy
aXRlKHZtLCB2YWx1ZSwgVmFyaWFibGVXcml0ZUZpcmVEZXRhaWwoYmFzZU9iamVjdCwgcHJvcGVy
dHlOYW1lKSk7Ci19Ci0KLXZvaWQgVmFyaWFibGVXYXRjaHBvaW50U2V0Ojpub3RpZnlXcml0ZShW
TSYgdm0sIEpTVmFsdWUgdmFsdWUsIGNvbnN0IGNoYXIqIHJlYXNvbikKLXsKLSAgICBub3RpZnlX
cml0ZSh2bSwgdmFsdWUsIFN0cmluZ0ZpcmVEZXRhaWwocmVhc29uKSk7Ci19Ci0KLX0gLy8gbmFt
ZXNwYWNlIEpTQwotCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFyaWFi
bGVXYXRjaHBvaW50U2V0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1ZhcmlhYmxlV2F0Y2hwb2ludFNldC5oCShyZXZpc2lvbiAxODI0OTgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFyaWFibGVXYXRjaHBvaW50U2V0LmgJKHdvcmtp
bmcgY29weSkKQEAgLTEsMTEwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTItMjAx
NCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVy
IG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBT
T0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBF
WFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8g
RVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
Ci0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9G
IFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0g
KiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaWZuZGVmIFZhcmlhYmxlV2F0Y2hwb2ludFNldF9oCi0j
ZGVmaW5lIFZhcmlhYmxlV2F0Y2hwb2ludFNldF9oCi0KLSNpbmNsdWRlICJXYXRjaHBvaW50Lmgi
Ci0jaW5jbHVkZSAiV3JpdGVCYXJyaWVyLmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi1jbGFzcyBK
U09iamVjdDsKLWNsYXNzIFN5bWJvbFRhYmxlOwotCi1jbGFzcyBWYXJpYWJsZVdyaXRlRmlyZURl
dGFpbCA6IHB1YmxpYyBGaXJlRGV0YWlsIHsKLXB1YmxpYzoKLSAgICBWYXJpYWJsZVdyaXRlRmly
ZURldGFpbChKU09iamVjdCogb2JqZWN0LCBjb25zdCBQcm9wZXJ0eU5hbWUmIG5hbWUpCi0gICAg
ICAgIDogbV9vYmplY3Qob2JqZWN0KQotICAgICAgICAsIG1fbmFtZShuYW1lKQotICAgIHsKLSAg
ICB9Ci0gICAgCi0gICAgdmlydHVhbCB2b2lkIGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdCBvdmVy
cmlkZTsKLQotcHJpdmF0ZToKLSAgICBKU09iamVjdCogbV9vYmplY3Q7Ci0gICAgY29uc3QgUHJv
cGVydHlOYW1lJiBtX25hbWU7Ci19OwotCi1jbGFzcyBWYXJpYWJsZVdhdGNocG9pbnRTZXQgOiBw
dWJsaWMgV2F0Y2hwb2ludFNldCB7Ci0gICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJh
Y3RvcjsKLXB1YmxpYzoKLSAgICBWYXJpYWJsZVdhdGNocG9pbnRTZXQoU3ltYm9sVGFibGUmIHN5
bWJvbFRhYmxlKQotICAgICAgICA6IFdhdGNocG9pbnRTZXQoQ2xlYXJXYXRjaHBvaW50KQotICAg
ICAgICAsIG1fc3ltYm9sVGFibGUoc3ltYm9sVGFibGUpCi0gICAgewotICAgIH0KLSAgICAKLSAg
ICB+VmFyaWFibGVXYXRjaHBvaW50U2V0KCkgeyB9Ci0gICAgCi0gICAgLy8gRm9yIHRoZSBwdXJw
b3NlIG9mIGRlY2lkaW5nIHdoZXRoZXIgb3Igbm90IHRvIHdhdGNoIHRoaXMgdmFyaWFibGUsIHlv
dSBvbmx5IG5lZWQKLSAgICAvLyB0byBpbnNwZWN0IGluZmVycmVkVmFsdWUoKS4gSWYgdGhpcyBy
ZXR1cm5zIHNvbWV0aGluZyBvdGhlciB0aGFuIHRoZSBlbXB0eQotICAgIC8vIHZhbHVlLCB0aGVu
IGl0IG1lYW5zIHRoYXQgYXQgYWxsIGZ1dHVyZSBzYWZlcG9pbnRzLCB0aGlzIHdhdGNocG9pbnQg
c2V0IHdpbGwgYmUKLSAgICAvLyBpbiBvbmUgb2YgdGhlc2Ugc3RhdGVzOgotICAgIC8vCi0gICAg
Ly8gICAgSXNXYXRjaGVkOiBpbiB0aGlzIGNhc2UsIHRoZSB2YXJpYWJsZSdzIHZhbHVlIG11c3Qg
c3RpbGwgYmUgdGhlCi0gICAgLy8gICAgICAgIGluZmVycmVkVmFsdWUuCi0gICAgLy8KLSAgICAv
LyAgICBJc0ludmFsaWRhdGVkOiBpbiB0aGlzIGNhc2UgdGhlIHZhcmlhYmxlJ3MgdmFsdWUgbWF5
IGJlIGFueXRoaW5nIGJ1dCB5b3UnbGwKLSAgICAvLyAgICAgICAgZWl0aGVyIG5vdGljZSB0aGF0
IGl0J3MgaW52YWxpZGF0ZWQgYW5kIG5vdCBpbnN0YWxsIHRoZSB3YXRjaHBvaW50LCBvcgotICAg
IC8vICAgICAgICB5b3Ugd2lsbCBoYXZlIGJlZW4gbm90aWZpZWQgdGhhdCB0aGUgd2F0Y2hwb2lu
dCB3YXMgZmlyZWQuCi0gICAgSlNWYWx1ZSBpbmZlcnJlZFZhbHVlKCkgY29uc3QgeyByZXR1cm4g
bV9pbmZlcnJlZFZhbHVlLmdldCgpOyB9Ci0gICAgCi0gICAgdm9pZCBub3RpZnlXcml0ZShWTSYs
IEpTVmFsdWUsIGNvbnN0IEZpcmVEZXRhaWwmKTsKLSAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lk
IG5vdGlmeVdyaXRlKFZNJiwgSlNWYWx1ZSwgSlNPYmplY3QqIGJhc2VPYmplY3QsIGNvbnN0IFBy
b3BlcnR5TmFtZSYpOwotICAgIHZvaWQgbm90aWZ5V3JpdGUoVk0mLCBKU1ZhbHVlLCBjb25zdCBj
aGFyKiByZWFzb24pOwotICAgIAotICAgIHZvaWQgaW52YWxpZGF0ZShjb25zdCBGaXJlRGV0YWls
JiBkZXRhaWwpCi0gICAgewotICAgICAgICBtX2luZmVycmVkVmFsdWUuY2xlYXIoKTsKLSAgICAg
ICAgV2F0Y2hwb2ludFNldDo6aW52YWxpZGF0ZShkZXRhaWwpOwotICAgIH0KLSAgICAKLSAgICB2
b2lkIGZpbmFsaXplVW5jb25kaXRpb25hbGx5KGNvbnN0IEZpcmVEZXRhaWwmIGRldGFpbCkKLSAg
ICB7Ci0gICAgICAgIEFTU0VSVCghIW1faW5mZXJyZWRWYWx1ZSA9PSAoc3RhdGUoKSA9PSBJc1dh
dGNoZWQpKTsKLSAgICAgICAgaWYgKCFtX2luZmVycmVkVmFsdWUpCi0gICAgICAgICAgICByZXR1
cm47Ci0gICAgICAgIEpTVmFsdWUgaW5mZXJyZWRWYWx1ZSA9IG1faW5mZXJyZWRWYWx1ZS5nZXQo
KTsKLSAgICAgICAgaWYgKCFpbmZlcnJlZFZhbHVlLmlzQ2VsbCgpKQotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICBKU0NlbGwqIGNlbGwgPSBpbmZlcnJlZFZhbHVlLmFzQ2VsbCgpOwotICAg
ICAgICBpZiAoSGVhcDo6aXNNYXJrZWQoY2VsbCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAg
ICAgIGludmFsaWRhdGUoZGV0YWlsKTsKLSAgICB9Ci0KLSAgICBXcml0ZUJhcnJpZXI8VW5rbm93
bj4qIGFkZHJlc3NPZkluZmVycmVkVmFsdWUoKSB7IHJldHVybiAmbV9pbmZlcnJlZFZhbHVlOyB9
Ci0gICAgCi1wcml2YXRlOgotICAgIFN5bWJvbFRhYmxlJiBtX3N5bWJvbFRhYmxlOwotICAgIFdy
aXRlQmFycmllcjxVbmtub3duPiBtX2luZmVycmVkVmFsdWU7Ci19OwotCi19IC8vIG5hbWVzcGFj
ZSBKU0MKLQotI2VuZGlmIC8vIFZhcmlhYmxlV2F0Y2hwb2ludFNldF9oCi0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYXJpYWJsZVdhdGNocG9pbnRTZXRJbmxpbmVzLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhcmlhYmxlV2F0
Y2hwb2ludFNldElubGluZXMuaAkocmV2aXNpb24gMTgyNDk4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1ZhcmlhYmxlV2F0Y2hwb2ludFNldElubGluZXMuaAkod29ya2luZyBj
b3B5KQpAQCAtMSw2MCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIElu
Yy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGlu
IHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlv
biwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwot
ICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJl
dGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0g
KiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFM
TCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNU
LCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRB
LCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuIAotICovCi0KLSNpZm5kZWYgVmFyaWFibGVXYXRjaHBvaW50U2V0SW5saW5lc19oCi0jZGVm
aW5lIFZhcmlhYmxlV2F0Y2hwb2ludFNldElubGluZXNfaAotCi0jaW5jbHVkZSAiU3ltYm9sVGFi
bGUuaCIKLSNpbmNsdWRlICJWYXJpYWJsZVdhdGNocG9pbnRTZXQuaCIKLQotbmFtZXNwYWNlIEpT
QyB7Ci0KLWlubGluZSB2b2lkIFZhcmlhYmxlV2F0Y2hwb2ludFNldDo6bm90aWZ5V3JpdGUoVk0m
IHZtLCBKU1ZhbHVlIHZhbHVlLCBjb25zdCBGaXJlRGV0YWlsJiBkZXRhaWwpCi17Ci0gICAgQVNT
RVJUKCEhdmFsdWUpOwotICAgIHN3aXRjaCAoc3RhdGUoKSkgewotICAgIGNhc2UgQ2xlYXJXYXRj
aHBvaW50OgotICAgICAgICBtX2luZmVycmVkVmFsdWUuc2V0KHZtLCAmbV9zeW1ib2xUYWJsZSwg
dmFsdWUpOwotICAgICAgICBzdGFydFdhdGNoaW5nKCk7Ci0gICAgICAgIHJldHVybjsKLQotICAg
IGNhc2UgSXNXYXRjaGVkOgotICAgICAgICBBU1NFUlQoISFtX2luZmVycmVkVmFsdWUpOwotICAg
ICAgICBpZiAodmFsdWUgPT0gbV9pbmZlcnJlZFZhbHVlLmdldCgpKQotICAgICAgICAgICAgcmV0
dXJuOwotICAgICAgICBpbnZhbGlkYXRlKGRldGFpbCk7Ci0gICAgICAgIHJldHVybjsKLSAgICAg
ICAgICAgIAotICAgIGNhc2UgSXNJbnZhbGlkYXRlZDoKLSAgICAgICAgQVNTRVJUKCFtX2luZmVy
cmVkVmFsdWUpOwotICAgICAgICByZXR1cm47Ci0gICAgfQotICAgICAgICAKLSAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KLSNlbmRpZiAvLyBWYXJp
YWJsZVdhdGNocG9pbnRTZXRJbmxpbmVzX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9WYXJpYWJsZVdyaXRlRmlyZURldGFpbC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhcmlhYmxlV3JpdGVGaXJlRGV0YWlsLmNwcAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYXJpYWJsZVdyaXRl
RmlyZURldGFpbC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqIENv
cHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiVmFyaWFibGVXcml0ZUZpcmVEZXRhaWwuaCIKKworI2luY2x1ZGUgIkpTQ0lu
bGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK3ZvaWQgVmFyaWFibGVXcml0ZUZpcmVEZXRh
aWw6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoIldyaXRl
IHRvICIsIG1fbmFtZSwgIiBpbiAiLCBKU1ZhbHVlKG1fb2JqZWN0KSk7Cit9CisKK3ZvaWQgVmFy
aWFibGVXcml0ZUZpcmVEZXRhaWw6OnRvdWNoKFdhdGNocG9pbnRTZXQqIHNldCwgSlNPYmplY3Qq
IG9iamVjdCwgY29uc3QgUHJvcGVydHlOYW1lJiBuYW1lKQoreworICAgIHNldC0+dG91Y2goVmFy
aWFibGVXcml0ZUZpcmVEZXRhaWwob2JqZWN0LCBuYW1lKSk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFyaWFibGVXcml0
ZUZpcmVEZXRhaWwuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvVmFyaWFibGVXcml0ZUZpcmVEZXRhaWwuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9WYXJpYWJsZVdyaXRlRmlyZURldGFpbC5oCSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsNTUgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5j
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4gCisgKi8KKworI2lmbmRlZiBWYXJpYWJsZVdyaXRlRmlyZURldGFpbF9oCisjZGVmaW5lIFZh
cmlhYmxlV3JpdGVGaXJlRGV0YWlsX2gKKworI2luY2x1ZGUgIldhdGNocG9pbnQuaCIKKworbmFt
ZXNwYWNlIEpTQyB7CisKK2NsYXNzIEpTT2JqZWN0OworY2xhc3MgUHJvcGVydHlOYW1lOworCitj
bGFzcyBWYXJpYWJsZVdyaXRlRmlyZURldGFpbCA6IHB1YmxpYyBGaXJlRGV0YWlsIHsKK3B1Ymxp
YzoKKyAgICBWYXJpYWJsZVdyaXRlRmlyZURldGFpbChKU09iamVjdCogb2JqZWN0LCBjb25zdCBQ
cm9wZXJ0eU5hbWUmIG5hbWUpCisgICAgICAgIDogbV9vYmplY3Qob2JqZWN0KQorICAgICAgICAs
IG1fbmFtZShuYW1lKQorICAgIHsKKyAgICB9CisgICAgCisgICAgdmlydHVhbCB2b2lkIGR1bXAo
UHJpbnRTdHJlYW0mKSBjb25zdCBvdmVycmlkZTsKKyAgICAKKyAgICBKU19FWFBPUlRfUFJJVkFU
RSBzdGF0aWMgdm9pZCB0b3VjaChXYXRjaHBvaW50U2V0KiwgSlNPYmplY3QqLCBjb25zdCBQcm9w
ZXJ0eU5hbWUmKTsKKworcHJpdmF0ZToKKyAgICBKU09iamVjdCogbV9vYmplY3Q7CisgICAgY29u
c3QgUHJvcGVydHlOYW1lJiBtX25hbWU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2Vu
ZGlmIC8vIFZhcmlhYmxlV3JpdGVGaXJlRGV0YWlsX2gKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29kZS9XYXRjaHBvaW50LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1dhdGNocG9pbnQuaAkocmV2aXNpb24gMTgyNDk4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1dhdGNocG9pbnQuaAkod29ya2luZyBjb3B5KQpAQCAt
ODcsNiArODcsMTIgQEAgcHVibGljOgogICAgIEpTX0VYUE9SVF9QUklWQVRFIFdhdGNocG9pbnRT
ZXQoV2F0Y2hwb2ludFN0YXRlKTsKICAgICBKU19FWFBPUlRfUFJJVkFURSB+V2F0Y2hwb2ludFNl
dCgpOyAvLyBOb3RlIHRoYXQgdGhpcyB3aWxsIG5vdCBmaXJlIGFueSBvZiB0aGUgd2F0Y2hwb2lu
dHM7IGlmIHlvdSBuZWVkIHRvIGtub3cgd2hlbiBhIFdhdGNocG9pbnRTZXQgZGllcyB0aGVuIHlv
dSBuZWVkIGEgc2VwYXJhdGUgbWVjaGFuaXNtIGZvciB0aGlzLgogICAgIAorICAgIC8vIEZhc3Qg
d2F5IG9mIGdldHRpbmcgdGhlIHN0YXRlLCB3aGljaCBvbmx5IHdvcmtzIGZyb20gdGhlIG1haW4g
dGhyZWFkLgorICAgIFdhdGNocG9pbnRTdGF0ZSBzdGF0ZU9uTWFpblRocmVhZCgpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8V2F0Y2hwb2ludFN0YXRlPihtX3N0YXRl
KTsKKyAgICB9CisgICAgCiAgICAgLy8gSXQgaXMgc2FmZSB0byBjYWxsIHRoaXMgZnJvbSBhbm90
aGVyIHRocmVhZC4gSXQgbWF5IHJldHVybiBhbiBvbGQKICAgICAvLyBzdGF0ZS4gR3VhcmFudGVl
cyB0aGF0IGlmICpmaXJzdCogcmVhZCB0aGUgc3RhdGUoKSBvZiB0aGUgdGhpbmcgYmVpbmcKICAg
ICAvLyB3YXRjaGVkIGFuZCBpdCByZXR1cm5lZCBJc1dhdGNoZWQgYW5kICpzZWNvbmQqIHlvdSBh
Y3R1YWxseSByZWFkIGl0cwpAQCAtMTI1LDIwICsxMzEsMjQgQEAgcHVibGljOgogICAgIC8vIHNl
dCB3YXRjaHBvaW50cyB0aGF0IHdlIGJlbGlldmUgd2lsbCBhY3R1YWxseSBiZSBmaXJlZC4KICAg
ICB2b2lkIHN0YXJ0V2F0Y2hpbmcoKQogICAgIHsKLSAgICAgICAgQVNTRVJUKHN0YXRlKCkgIT0g
SXNJbnZhbGlkYXRlZCk7CisgICAgICAgIEFTU0VSVChtX3N0YXRlICE9IElzSW52YWxpZGF0ZWQp
OworICAgICAgICBpZiAobV9zdGF0ZSA9PSBJc1dhdGNoZWQpCisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CiAgICAgICAgIG1fc3RhdGUgPSBJc1dh
dGNoZWQ7CisgICAgICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CiAgICAgfQogICAgIAogICAg
IHZvaWQgZmlyZUFsbChjb25zdCBGaXJlRGV0YWlsJiBkZXRhaWwpCiAgICAgewotICAgICAgICBp
ZiAoTElLRUxZKHN0YXRlKCkgIT0gSXNXYXRjaGVkKSkKKyAgICAgICAgaWYgKExJS0VMWShtX3N0
YXRlICE9IElzV2F0Y2hlZCkpCiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIGZpcmVBbGxT
bG93KGRldGFpbCk7CiAgICAgfQogICAgIAogICAgIHZvaWQgZmlyZUFsbChjb25zdCBjaGFyKiBy
ZWFzb24pCiAgICAgewotICAgICAgICBpZiAoTElLRUxZKHN0YXRlKCkgIT0gSXNXYXRjaGVkKSkK
KyAgICAgICAgaWYgKExJS0VMWShtX3N0YXRlICE9IElzV2F0Y2hlZCkpCiAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgIGZpcmVBbGxTbG93KHJlYXNvbik7CiAgICAgfQpAQCAtMTUxLDEzICsx
NjEsMjMgQEAgcHVibGljOgogICAgICAgICAgICAgZmlyZUFsbChkZXRhaWwpOwogICAgIH0KICAg
ICAKKyAgICB2b2lkIHRvdWNoKGNvbnN0IGNoYXIqIHJlYXNvbikKKyAgICB7CisgICAgICAgIHRv
dWNoKFN0cmluZ0ZpcmVEZXRhaWwocmVhc29uKSk7CisgICAgfQorICAgIAogICAgIHZvaWQgaW52
YWxpZGF0ZShjb25zdCBGaXJlRGV0YWlsJiBkZXRhaWwpCiAgICAgewogICAgICAgICBpZiAoc3Rh
dGUoKSA9PSBJc1dhdGNoZWQpCiAgICAgICAgICAgICBmaXJlQWxsKGRldGFpbCk7CiAgICAgICAg
IG1fc3RhdGUgPSBJc0ludmFsaWRhdGVkOwogICAgIH0KLQorICAgIAorICAgIHZvaWQgaW52YWxp
ZGF0ZShjb25zdCBjaGFyKiByZWFzb24pCisgICAgeworICAgICAgICBpbnZhbGlkYXRlKFN0cmlu
Z0ZpcmVEZXRhaWwocmVhc29uKSk7CisgICAgfQorICAgIAogICAgIGludDhfdCogYWRkcmVzc09m
U3RhdGUoKSB7IHJldHVybiAmbV9zdGF0ZTsgfQogICAgIGludDhfdCogYWRkcmVzc09mU2V0SXNO
b3RFbXB0eSgpIHsgcmV0dXJuICZtX3NldElzTm90RW1wdHk7IH0KICAgICAKQEAgLTIwOSwxOCAr
MjI5LDM0IEBAIHB1YmxpYzoKICAgICAgICAgZnJlZUZhdCgpOwogICAgIH0KICAgICAKKyAgICAv
LyBGYXN0IHdheSBvZiBnZXR0aW5nIHRoZSBzdGF0ZSwgd2hpY2ggb25seSB3b3JrcyBmcm9tIHRo
ZSBtYWluIHRocmVhZC4KKyAgICBXYXRjaHBvaW50U3RhdGUgc3RhdGVPbk1haW5UaHJlYWQoKSBj
b25zdAorICAgIHsKKyAgICAgICAgdWludHB0cl90IGRhdGEgPSBtX2RhdGE7CisgICAgICAgIGlm
IChpc0ZhdChkYXRhKSkKKyAgICAgICAgICAgIHJldHVybiBmYXQoZGF0YSktPnN0YXRlT25NYWlu
VGhyZWFkKCk7CisgICAgICAgIHJldHVybiBkZWNvZGVTdGF0ZShkYXRhKTsKKyAgICB9CisKKyAg
ICAvLyBJdCBpcyBzYWZlIHRvIGNhbGwgdGhpcyBmcm9tIGFub3RoZXIgdGhyZWFkLiBJdCBtYXkg
cmV0dXJuIGEgcHJpb3Igc3RhdGUsCisgICAgLy8gYnV0IHRoYXQgc2hvdWxkIGJlIGZpbmUgc2lu
Y2UgeW91IHNob3VsZCBvbmx5IHBlcmZvcm0gYWN0aW9ucyBiYXNlZCBvbiB0aGUKKyAgICAvLyBz
dGF0ZSBpZiB5b3UgYWxzbyBhZGQgYSB3YXRjaHBvaW50LgorICAgIFdhdGNocG9pbnRTdGF0ZSBz
dGF0ZSgpIGNvbnN0CisgICAgeworICAgICAgICBXVEY6OmxvYWRMb2FkRmVuY2UoKTsKKyAgICAg
ICAgdWludHB0cl90IGRhdGEgPSBtX2RhdGE7CisgICAgICAgIFdURjo6bG9hZExvYWRGZW5jZSgp
OworICAgICAgICBpZiAoaXNGYXQoZGF0YSkpCisgICAgICAgICAgICByZXR1cm4gZmF0KGRhdGEp
LT5zdGF0ZSgpOworICAgICAgICByZXR1cm4gZGVjb2RlU3RhdGUoZGF0YSk7CisgICAgfQorICAg
IAogICAgIC8vIEl0IGlzIHNhZmUgdG8gY2FsbCB0aGlzIGZyb20gYW5vdGhlciB0aHJlYWQuICBJ
dCBtYXkgcmV0dXJuIGZhbHNlCiAgICAgLy8gZXZlbiBpZiB0aGUgc2V0IGFjdHVhbGx5IGhhZCBi
ZWVuIGludmFsaWRhdGVkLCBidXQgdGhhdCBvdWdodCB0byBoYXBwZW4KICAgICAvLyBvbmx5IGlu
IHRoZSBjYXNlIG9mIHJhY2VzLCBhbmQgc2hvdWxkIGJlIHJhcmUuCiAgICAgYm9vbCBoYXNCZWVu
SW52YWxpZGF0ZWQoKSBjb25zdAogICAgIHsKLSAgICAgICAgV1RGOjpsb2FkTG9hZEZlbmNlKCk7
Ci0gICAgICAgIHVpbnRwdHJfdCBkYXRhID0gbV9kYXRhOwotICAgICAgICBpZiAoaXNGYXQoZGF0
YSkpIHsKLSAgICAgICAgICAgIFdURjo6bG9hZExvYWRGZW5jZSgpOwotICAgICAgICAgICAgcmV0
dXJuIGZhdChkYXRhKS0+aGFzQmVlbkludmFsaWRhdGVkKCk7Ci0gICAgICAgIH0KLSAgICAgICAg
cmV0dXJuIGRlY29kZVN0YXRlKGRhdGEpID09IElzSW52YWxpZGF0ZWQ7CisgICAgICAgIHJldHVy
biBzdGF0ZSgpID09IElzSW52YWxpZGF0ZWQ7CiAgICAgfQogICAgIAogICAgIC8vIExpa2UgaGFz
QmVlbkludmFsaWRhdGVkKCksIG1heSBiZSBjYWxsZWQgZnJvbSBhbm90aGVyIHRocmVhZC4KQEAg
LTI1Myw2ICsyODksMTQgQEAgcHVibGljOgogICAgICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgp
OwogICAgIH0KICAgICAKKyAgICB2b2lkIGludmFsaWRhdGUoY29uc3QgRmlyZURldGFpbCYgZGV0
YWlsKQorICAgIHsKKyAgICAgICAgaWYgKGlzRmF0KCkpCisgICAgICAgICAgICBmYXQoKS0+aW52
YWxpZGF0ZShkZXRhaWwpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2RhdGEgPSBlbmNv
ZGVTdGF0ZShJc0ludmFsaWRhdGVkKTsKKyAgICB9CisgICAgCiAgICAgSlNfRVhQT1JUX1BSSVZB
VEUgdm9pZCBmaXJlQWxsKGNvbnN0IGNoYXIqIHJlYXNvbik7CiAgICAgCiAgICAgdm9pZCB0b3Vj
aChjb25zdCBGaXJlRGV0YWlsJiBkZXRhaWwpCkBAIC0yNjEsNyArMzA1LDExIEBAIHB1YmxpYzoK
ICAgICAgICAgICAgIGZhdCgpLT50b3VjaChkZXRhaWwpOwogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9Ci0gICAgICAgIGlmIChkZWNvZGVTdGF0ZShtX2RhdGEpID09IENsZWFyV2F0Y2hw
b2ludCkKKyAgICAgICAgdWludHB0cl90IGRhdGEgPSBtX2RhdGE7CisgICAgICAgIGlmIChkZWNv
ZGVTdGF0ZShkYXRhKSA9PSBJc0ludmFsaWRhdGVkKQorICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICBXVEY6OnN0b3JlU3RvcmVGZW5jZSgpOworICAgICAgICBpZiAoZGVjb2RlU3RhdGUoZGF0
YSkgPT0gQ2xlYXJXYXRjaHBvaW50KQogICAgICAgICAgICAgbV9kYXRhID0gZW5jb2RlU3RhdGUo
SXNXYXRjaGVkKTsKICAgICAgICAgZWxzZQogICAgICAgICAgICAgbV9kYXRhID0gZW5jb2RlU3Rh
dGUoSXNJbnZhbGlkYXRlZCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBp
bGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMTgyNDk4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9CeXRlY29kZUdlbmVyYXRv
ci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ2Niw5ICs0NjYsNiBAQCBCeXRlY29kZUdlbmVyYXRv
cjo6Qnl0ZWNvZGVHZW5lcmF0b3IoVk0mCiAgICAgICAgIH0KICAgICB9CiAgICAgCi0gICAgaWYg
KG1fc3ltYm9sVGFibGUtPnNjb3BlU2l6ZSgpKQotICAgICAgICBlbWl0T3Bjb2RlKG9wX3RvdWNo
X2VudHJ5KTsKLQogICAgIGlmIChpc0NvbnN0cnVjdG9yKCkpIHsKICAgICAgICAgaWYgKGNvbnN0
cnVjdG9yS2luZCgpID09IENvbnN0cnVjdG9yS2luZDo6RGVyaXZlZCkgewogICAgICAgICAgICAg
bV9uZXdUYXJnZXRSZWdpc3RlciA9IGFkZFZhcigpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RJbnRlcnByZXRlcklubGluZXMuaAko
cmV2aXNpb24gMTgyNDk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFj
dEludGVycHJldGVySW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMzQyLDYgKzEzNDIsNyBA
QCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgfQogCiAgICAg
Y2FzZSBDcmVhdGVUaGlzOiB7CisgICAgICAgIC8vIEZJWE1FOiBXZSBjYW4gZm9sZCB0aGlzIHRv
IE5ld09iamVjdCBpZiB0aGUgaW5jb21pbmcgY2FsbGVlIGlzIGEgY29uc3RhbnQuCiAgICAgICAg
IGZvck5vZGUobm9kZSkuc2V0VHlwZShTcGVjRmluYWxPYmplY3QpOwogICAgICAgICBicmVhazsK
ICAgICB9CkBAIC0xNDAxLDYgKzE0MDIsMTUgQEAgYm9vbCBBYnN0cmFjdEludGVycHJldGVyPEFi
c3RyYWN0U3RhdGVUeQogICAgICAgICBicmVhazsKICAgICAgICAgCiAgICAgY2FzZSBHZXRDYWxs
ZWU6CisgICAgICAgIGlmIChGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBqc0R5bmFt
aWNDYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KG1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUo
KSkpIHsKKyAgICAgICAgICAgIEluZmVycmVkVmFsdWUqIHNpbmdsZXRvbiA9IGV4ZWN1dGFibGUt
PnNpbmdsZXRvbkZ1bmN0aW9uKCk7CisgICAgICAgICAgICBpZiAoSlNWYWx1ZSB2YWx1ZSA9IHNp
bmdsZXRvbi0+aW5mZXJyZWRWYWx1ZSgpKSB7CisgICAgICAgICAgICAgICAgbV9ncmFwaC53YXRj
aHBvaW50cygpLmFkZExhemlseShzaW5nbGV0b24pOworICAgICAgICAgICAgICAgIEpTRnVuY3Rp
b24qIGZ1bmN0aW9uID0ganNDYXN0PEpTRnVuY3Rpb24qPih2YWx1ZSk7CisgICAgICAgICAgICAg
ICAgc2V0Q29uc3RhbnQobm9kZSwgKm1fZ3JhcGguZnJlZXplKGZ1bmN0aW9uKSk7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KICAgICAgICAgZm9yTm9k
ZShub2RlKS5zZXRUeXBlKFNwZWNGdW5jdGlvbik7CiAgICAgICAgIGJyZWFrOwogICAgICAgICAK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIu
Y3BwCShyZXZpc2lvbiAxODI0OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5
dGVDb2RlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjE1LDggKzIxNSw2IEBAIHByaXZh
dGU6CiAgICAgICAgIGJvb2wgaXNEaXJlY3QpOwogICAgIHZvaWQgZW1pdENoZWNrcyhjb25zdCBD
b25zdGFudFN0cnVjdHVyZUNoZWNrVmVjdG9yJik7CiAKLSAgICBOb2RlKiBnZXRTY29wZShWaXJ0
dWFsUmVnaXN0ZXIgc2NvcGVDaGFpbiwgdW5zaWduZWQgc2tpcENvdW50KTsKLSAgICAKICAgICB2
b2lkIHByZXBhcmVUb1BhcnNlQmxvY2soKTsKICAgICB2b2lkIGNsZWFyQ2FjaGVzKCk7CiAKQEAg
LTI3OSw4ICsyNzcsMjAgQEAgcHJpdmF0ZToKICAgICAgICAgICAgICAgICBpZiAob3BlcmFuZC5v
ZmZzZXQoKSA9PSBKU1N0YWNrOjpDYWxsZWUpCiAgICAgICAgICAgICAgICAgICAgIHJldHVybiB3
ZWFrSlNDb25zdGFudChjYWxsZWUpOwogICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYg
KG9wZXJhbmQub2Zmc2V0KCkgPT0gSlNTdGFjazo6Q2FsbGVlKQorICAgICAgICB9IGVsc2UgaWYg
KG9wZXJhbmQub2Zmc2V0KCkgPT0gSlNTdGFjazo6Q2FsbGVlKSB7CisgICAgICAgICAgICAvLyBX
ZSBoYXZlIHRvIGRvIHNvbWUgY29uc3RhbnQtZm9sZGluZyBoZXJlIGJlY2F1c2UgdGhpcyBlbmFi
bGVzIENyZWF0ZVRoaXMgZm9sZGluZy4gTm90ZQorICAgICAgICAgICAgLy8gdGhhdCB3ZSBkb24n
dCBoYXZlIHN1Y2ggd2F0Y2hwb2ludC1iYXNlZCBmb2xkaW5nIGZvciBpbmxpbmVkIHVzZXMgb2Yg
Q2FsbGVlLCBzaW5jZSBpbiB0aGF0CisgICAgICAgICAgICAvLyBjYXNlIGlmIHRoZSBmdW5jdGlv
biBpcyBhIHNpbmdsZXRvbiB0aGVuIHdlIGFscmVhZHkga25vdyBpdC4KKyAgICAgICAgICAgIGlm
IChGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBqc0R5bmFtaWNDYXN0PEZ1bmN0aW9u
RXhlY3V0YWJsZSo+KG1fY29kZUJsb2NrLT5vd25lckV4ZWN1dGFibGUoKSkpIHsKKyAgICAgICAg
ICAgICAgICBJbmZlcnJlZFZhbHVlKiBzaW5nbGV0b24gPSBleGVjdXRhYmxlLT5zaW5nbGV0b25G
dW5jdGlvbigpOworICAgICAgICAgICAgICAgIGlmIChKU1ZhbHVlIHZhbHVlID0gc2luZ2xldG9u
LT5pbmZlcnJlZFZhbHVlKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC53YXRjaHBv
aW50cygpLmFkZExhemlseShzaW5nbGV0b24pOworICAgICAgICAgICAgICAgICAgICBKU0Z1bmN0
aW9uKiBmdW5jdGlvbiA9IGpzQ2FzdDxKU0Z1bmN0aW9uKj4odmFsdWUpOworICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gd2Vha0pTQ29uc3RhbnQoZnVuY3Rpb24pOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KICAgICAgICAgICAgIHJldHVybiBhZGRUb0dyYXBoKEdldENhbGxl
ZSk7CisgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIHJldHVybiBnZXREaXJlY3QobV9pbmxp
bmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKG9wZXJhbmQpKTsKICAgICB9CkBAIC0yNTI5LDE0ICsy
NTM5LDYgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6Y2xlYXJDYWNoZXMoKQogICAgIG1fY29uc3Rh
bnRzLnJlc2l6ZSgwKTsKIH0KIAotTm9kZSogQnl0ZUNvZGVQYXJzZXI6OmdldFNjb3BlKFZpcnR1
YWxSZWdpc3RlciBzY29wZUNoYWluLCB1bnNpZ25lZCBza2lwQ291bnQpCi17Ci0gICAgTm9kZSog
bG9jYWxCYXNlID0gZ2V0KHNjb3BlQ2hhaW4pOwotICAgIGZvciAodW5zaWduZWQgbiA9IHNraXBD
b3VudDsgbi0tOykKLSAgICAgICAgbG9jYWxCYXNlID0gYWRkVG9HcmFwaChTa2lwU2NvcGUsIGxv
Y2FsQmFzZSk7Ci0gICAgcmV0dXJuIGxvY2FsQmFzZTsKLX0KLQogYm9vbCBCeXRlQ29kZVBhcnNl
cjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKIHsKICAgICBib29sIHNob3VsZENvbnRpbnVl
UGFyc2luZyA9IHRydWU7CkBAIC0yNjA2LDExICsyNjA4LDYgQEAgYm9vbCBCeXRlQ29kZVBhcnNl
cjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfZW50ZXIp
OwogICAgICAgICB9CiAgICAgICAgICAgICAKLSAgICAgICAgY2FzZSBvcF90b3VjaF9lbnRyeToK
LSAgICAgICAgICAgIGlmIChtX2lubGluZVN0YWNrVG9wLT5tX2NvZGVCbG9jay0+c3ltYm9sVGFi
bGUoKS0+bV9mdW5jdGlvbkVudGVyZWRPbmNlLmlzU3RpbGxWYWxpZCgpKQotICAgICAgICAgICAg
ICAgIGFkZFRvR3JhcGgoRm9yY2VPU1JFeGl0KTsKLSAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9w
X3RvdWNoX2VudHJ5KTsKLSAgICAgICAgICAgIAogICAgICAgICBjYXNlIG9wX3RvX3RoaXM6IHsK
ICAgICAgICAgICAgIE5vZGUqIG9wMSA9IGdldFRoaXMoKTsKICAgICAgICAgICAgIGlmIChvcDEt
Pm9wKCkgIT0gVG9UaGlzKSB7CkBAIC0zMzg4LDE3ICszMzg1LDI4IEBAIGJvb2wgQnl0ZUNvZGVQ
YXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgIGNhc2UgTG9jYWxDbG9zdXJl
VmFyOgogICAgICAgICAgICAgY2FzZSBDbG9zdXJlVmFyOgogICAgICAgICAgICAgY2FzZSBDbG9z
dXJlVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczogewotICAgICAgICAgICAgICAgIEpTTGV4aWNh
bEVudmlyb25tZW50KiBsZXhpY2FsRW52aXJvbm1lbnQgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bNl0u
dS5sZXhpY2FsRW52aXJvbm1lbnQuZ2V0KCk7Ci0gICAgICAgICAgICAgICAgaWYgKGxleGljYWxF
bnZpcm9ubWVudAotICAgICAgICAgICAgICAgICAgICAmJiBsZXhpY2FsRW52aXJvbm1lbnQtPnN5
bWJvbFRhYmxlKCktPm1fZnVuY3Rpb25FbnRlcmVkT25jZS5pc1N0aWxsVmFsaWQoKSkgewotICAg
ICAgICAgICAgICAgICAgICBtX2dyYXBoLndhdGNocG9pbnRzKCkuYWRkTGF6aWx5KGxleGljYWxF
bnZpcm9ubWVudC0+c3ltYm9sVGFibGUoKS0+bV9mdW5jdGlvbkVudGVyZWRPbmNlKTsKLSAgICAg
ICAgICAgICAgICAgICAgYWRkVG9HcmFwaChQaGFudG9tLCBnZXREaXJlY3QobV9pbmxpbmVTdGFj
a1RvcC0+cmVtYXBPcGVyYW5kKFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0u
dS5vcGVyYW5kKSkpKTsKLSAgICAgICAgICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rlcihk
c3QpLCB3ZWFrSlNDb25zdGFudChsZXhpY2FsRW52aXJvbm1lbnQpKTsKKyAgICAgICAgICAgICAg
ICBOb2RlKiBsb2NhbEJhc2UgPSBnZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlv
blsyXS51Lm9wZXJhbmQpKTsKKyAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKFBoYW50b20sIGxv
Y2FsQmFzZSk7IC8vIE9TUiBleGl0IGNhbm5vdCBoYW5kbGUgcmVzb2x2ZV9zY29wZSBvbiBhIERD
RSdkIHNjb3BlLgorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgICAgIC8vIFdlIGhhdmUg
dmFyaW91cyBmb3JtcyBvZiBjb25zdGFudCBmb2xkaW5nIGhlcmUuIFRoaXMgaXMgbmVjZXNzYXJ5
IHRvIGF2b2lkCisgICAgICAgICAgICAgICAgLy8gc3B1cmlvdXMgcmVjb21waWxlcyBpbiBkZWFk
LWJ1dC1mb2xkYWJsZSBjb2RlLgorICAgICAgICAgICAgICAgIGlmIChTeW1ib2xUYWJsZSogc3lt
Ym9sVGFibGUgPSBjdXJyZW50SW5zdHJ1Y3Rpb25bNl0udS5zeW1ib2xUYWJsZS5nZXQoKSkgewor
ICAgICAgICAgICAgICAgICAgICBJbmZlcnJlZFZhbHVlKiBzaW5nbGV0b24gPSBzeW1ib2xUYWJs
ZS0+c2luZ2xldG9uU2NvcGUoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKEpTVmFsdWUgdmFs
dWUgPSBzaW5nbGV0b24tPmluZmVycmVkVmFsdWUoKSkgeworICAgICAgICAgICAgICAgICAgICAg
ICAgbV9ncmFwaC53YXRjaHBvaW50cygpLmFkZExhemlseShzaW5nbGV0b24pOworICAgICAgICAg
ICAgICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rlcihkc3QpLCB3ZWFrSlNDb25zdGFudCh2
YWx1ZSkpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgaWYgKEpTU2NvcGUqIHNj
b3BlID0gbG9jYWxCYXNlLT5keW5hbWljQ2FzdENvbnN0YW50PEpTU2NvcGUqPigpKSB7CisgICAg
ICAgICAgICAgICAgICAgIGZvciAodW5zaWduZWQgbiA9IGRlcHRoOyBuLS07KQorICAgICAgICAg
ICAgICAgICAgICAgICAgc2NvcGUgPSBzY29wZS0+bmV4dCgpOworICAgICAgICAgICAgICAgICAg
ICBzZXQoVmlydHVhbFJlZ2lzdGVyKGRzdCksIHdlYWtKU0NvbnN0YW50KHNjb3BlKSk7CiAgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAg
ICBzZXQoVmlydHVhbFJlZ2lzdGVyKGRzdCksIGdldFNjb3BlKFZpcnR1YWxSZWdpc3RlcihjdXJy
ZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSwgZGVwdGgpKTsKLSAgICAgICAgICAgICAgICBp
ZiAoaW5saW5lQ2FsbEZyYW1lKCkpCi0gICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoUGhh
bnRvbSwgZ2V0RGlyZWN0KG1faW5saW5lU3RhY2tUb3AtPnJlbWFwT3BlcmFuZChWaXJ0dWFsUmVn
aXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCkpKSk7CisgICAgICAgICAgICAg
ICAgZm9yICh1bnNpZ25lZCBuID0gZGVwdGg7IG4tLTspCisgICAgICAgICAgICAgICAgICAgIGxv
Y2FsQmFzZSA9IGFkZFRvR3JhcGgoU2tpcFNjb3BlLCBsb2NhbEJhc2UpOworICAgICAgICAgICAg
ICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoZHN0KSwgbG9jYWxCYXNlKTsKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNhc2UgRHluYW1pYzoKQEAgLTM0
NTAsMTkgKzM0NTgsNTggQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25l
ZAogICAgICAgICAgICAgY2FzZSBHbG9iYWxWYXI6CiAgICAgICAgICAgICBjYXNlIEdsb2JhbFZh
cldpdGhWYXJJbmplY3Rpb25DaGVja3M6IHsKICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKFBo
YW50b20sIGdldChWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUpKSk7Ci0gICAgICAgICAgICAgICAgQ29u
Y3VycmVudEpJVExvY2tlciBsb2NrZXIoZ2xvYmFsT2JqZWN0LT5zeW1ib2xUYWJsZSgpLT5tX2xv
Y2spOwotICAgICAgICAgICAgICAgIFN5bWJvbFRhYmxlRW50cnkgZW50cnkgPSBnbG9iYWxPYmpl
Y3QtPnN5bWJvbFRhYmxlKCktPmdldChsb2NrZXIsIHVpZCk7Ci0gICAgICAgICAgICAgICAgVmFy
aWFibGVXYXRjaHBvaW50U2V0KiB3YXRjaHBvaW50U2V0ID0gZW50cnkud2F0Y2hwb2ludFNldCgp
OwotICAgICAgICAgICAgICAgIEpTVmFsdWUgaW5mZXJyZWRWYWx1ZSA9Ci0gICAgICAgICAgICAg
ICAgICAgIHdhdGNocG9pbnRTZXQgPyB3YXRjaHBvaW50U2V0LT5pbmZlcnJlZFZhbHVlKCkgOiBK
U1ZhbHVlKCk7Ci0gICAgICAgICAgICAgICAgaWYgKCFpbmZlcnJlZFZhbHVlKSB7Ci0gICAgICAg
ICAgICAgICAgICAgIFNwZWN1bGF0ZWRUeXBlIHByZWRpY3Rpb24gPSBnZXRQcmVkaWN0aW9uKCk7
Ci0gICAgICAgICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoZHN0KSwgYWRkVG9HcmFw
aChHZXRHbG9iYWxWYXIsIE9wSW5mbyhvcGVyYW5kKSwgT3BJbmZvKHByZWRpY3Rpb24pKSk7Ci0g
ICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIFdhdGNocG9pbnRTZXQq
IHdhdGNocG9pbnRTZXQ7CisgICAgICAgICAgICAgICAgU2NvcGVPZmZzZXQgb2Zmc2V0OworICAg
ICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAgICAgQ29uY3VycmVudEpJVExvY2tlciBs
b2NrZXIoZ2xvYmFsT2JqZWN0LT5zeW1ib2xUYWJsZSgpLT5tX2xvY2spOworICAgICAgICAgICAg
ICAgICAgICBTeW1ib2xUYWJsZUVudHJ5IGVudHJ5ID0gZ2xvYmFsT2JqZWN0LT5zeW1ib2xUYWJs
ZSgpLT5nZXQobG9ja2VyLCB1aWQpOworICAgICAgICAgICAgICAgICAgICB3YXRjaHBvaW50U2V0
ID0gZW50cnkud2F0Y2hwb2ludFNldCgpOworICAgICAgICAgICAgICAgICAgICBvZmZzZXQgPSBl
bnRyeS5zY29wZU9mZnNldCgpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBp
ZiAod2F0Y2hwb2ludFNldCAmJiB3YXRjaHBvaW50U2V0LT5zdGF0ZSgpID09IElzV2F0Y2hlZCkg
eworICAgICAgICAgICAgICAgICAgICAvLyBUaGlzIGhhcyBhIGZ1biBjb25jdXJyZW5jeSBzdG9y
eS4gVGhlcmUgaXMgdGhlIHBvc3NpYmlsaXR5IG9mIGEgcmFjZSBpbiB0d28KKyAgICAgICAgICAg
ICAgICAgICAgLy8gZGlyZWN0aW9uczoKKyAgICAgICAgICAgICAgICAgICAgLy8KKyAgICAgICAg
ICAgICAgICAgICAgLy8gV2Ugc2VlIHRoYXQgdGhlIHNldCBJc1dhdGNoZWQsIGJ1dCBpbiB0aGUg
bWVhbnRpbWUgaXQgZ2V0cyBpbnZhbGlkYXRlZDogdGhpcyBpcworICAgICAgICAgICAgICAgICAg
ICAvLyBmaW5lIGJlY2F1c2UgaWYgd2Ugc2F3IHRoYXQgaXQgSXNXYXRjaGVkIHRoZW4gd2UgYWRk
IGEgd2F0Y2hwb2ludC4gSWYgaXQgZ2V0cworICAgICAgICAgICAgICAgICAgICAvLyBpbnZhbGlk
YXRlZCwgdGhlbiB0aGlzIGNvbXBpbGF0aW9uIGlzIGludmFsaWRhdGVkLiBOb3RlIHRoYXQgaW4g
dGhlIG1lYW50aW1lIHdlCisgICAgICAgICAgICAgICAgICAgIC8vIG1heSBsb2FkIGFuIGFic3Vy
ZCB2YWx1ZSBmcm9tIHRoZSBnbG9iYWwgb2JqZWN0LiBJdCdzIGZpbmUgdG8gbG9hZCBhbiBhYnN1
cmQKKyAgICAgICAgICAgICAgICAgICAgLy8gdmFsdWUgaWYgdGhlIGNvbXBpbGF0aW9uIGlzIGlu
dmFsaWRhdGVkIGFueXdheS4KKyAgICAgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAg
ICAgICAgLy8gV2Ugc2VlIHRoYXQgdGhlIHNldCBJc1dhdGNoZWQsIGJ1dCB0aGUgdmFsdWUgaXNu
J3QgeWV0IGluaXRpYWxpemVkOiB0aGlzIGlzbid0CisgICAgICAgICAgICAgICAgICAgIC8vIHBv
c3NpYmxlIGJlY2F1c2Ugb2YgdGhlIG9yZGVyaW5nIG9mIG9wZXJhdGlvbnMuCisgICAgICAgICAg
ICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgICAgIC8vIEhlcmUncyBob3cgd2Ugb3JkZXIg
b3BlcmF0aW9uczoKKyAgICAgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAgICAg
Ly8gTWFpbiB0aHJlYWQgc3RvcmVzIHRvIHRoZSBnbG9iYWwgb2JqZWN0OiBhbHdheXMgc3RvcmUg
YSB2YWx1ZSBmaXJzdCwgYW5kIG9ubHkKKyAgICAgICAgICAgICAgICAgICAgLy8gYWZ0ZXIgdGhh
dCBkbyB3ZSB0b3VjaCB0aGUgd2F0Y2hwb2ludCBzZXQuIFRoZXJlIGlzIGEgZmVuY2UgaW4gdGhl
IHRvdWNoLCB0aGF0CisgICAgICAgICAgICAgICAgICAgIC8vIGVuc3VyZXMgdGhhdCB0aGUgc3Rv
cmUgdG8gdGhlIGdsb2JhbCBvYmplY3QgYWx3YXlzIGhhcHBlbnMgYmVmb3JlIHRoZSB0b3VjaCBv
biB0aGUKKyAgICAgICAgICAgICAgICAgICAgLy8gc2V0LgorICAgICAgICAgICAgICAgICAgICAv
LworICAgICAgICAgICAgICAgICAgICAvLyBDb21waWxhdGlvbiB0aHJlYWQ6IGFsd2F5cyBmaXJz
dCBsb2FkIHRoZSBzdGF0ZSBvZiB0aGUgd2F0Y2hwb2ludCBzZXQsIGFuZCB0aGVuCisgICAgICAg
ICAgICAgICAgICAgIC8vIGxvYWQgdGhlIHZhbHVlLiBUaGUgV2F0Y2hwb2ludFNldDo6c3RhdGUo
KSBtZXRob2QgZG9lcyBmZW5jZXMgZm9yIHVzIHRvIGVuc3VyZQorICAgICAgICAgICAgICAgICAg
ICAvLyB0aGF0IHRoZSBsb2FkIG9mIHRoZSBzdGF0ZSBoYXBwZW5zIGJlZm9yZSBvdXIgbG9hZCBv
ZiB0aGUgdmFsdWUuCisgICAgICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgICAg
IC8vIEZpbmFsaXppbmcgY29tcGlsYXRpb246IHRoaXMgaGFwcGVucyBvbiB0aGUgbWFpbiB0aHJl
YWQgYW5kIHN5bmNocm9ub3VzbHkgY2hlY2tzCisgICAgICAgICAgICAgICAgICAgIC8vIHZhbGlk
aXR5IG9mIGFsbCB3YXRjaHBvaW50IHNldHMuCisgICAgICAgICAgICAgICAgICAgIC8vCisgICAg
ICAgICAgICAgICAgICAgIC8vIFdlIHdpbGwgb25seSBwZXJmb3JtIG9wdGltaXphdGlvbnMgaWYg
dGhlIGxvYWQgb2YgdGhlIHN0YXRlIHlpZWxkcyBJc1dhdGNoZWQuIFRoYXQKKyAgICAgICAgICAg
ICAgICAgICAgLy8gbWVhbnMgdGhhdCBhdCBsZWFzdCBvbmUgc3RvcmUgd291bGQgaGF2ZSBoYXBw
ZW5lZCB0byBpbml0aWFsaXplIHRoZSBvcmlnaW5hbCB2YWx1ZQorICAgICAgICAgICAgICAgICAg
ICAvLyBvZiB0aGUgdmFyaWFibGUgKHRoYXQgaXMsIHRoZSB2YWx1ZSB3ZSdkIGxpa2UgdG8gY29u
c3RhbnQgZm9sZCB0bykuIFRoZXJlIG1heSBiZQorICAgICAgICAgICAgICAgICAgICAvLyBvdGhl
ciBzdG9yZXMgdGhhdCBoYXBwZW4gYWZ0ZXIgdGhhdCwgYnV0IHRob3NlIHN0b3JlcyB3aWxsIGlu
dmFsaWRhdGUgdGhlCisgICAgICAgICAgICAgICAgICAgIC8vIHdhdGNocG9pbnQgc2V0IGFuZCBh
bHNvIHRoZSBjb21waWxhdGlvbi4KKyAgICAgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgICAgIEFTU0VSVChiaXR3aXNlX2Nhc3Q8dWludHB0cl90PigmZ2xvYmFsT2JqZWN0LT52YXJp
YWJsZUF0KG9mZnNldCkpID09IG9wZXJhbmQpOworICAgICAgICAgICAgICAgICAgICBKU1ZhbHVl
IHZhbHVlID0gZ2xvYmFsT2JqZWN0LT52YXJpYWJsZUF0KG9mZnNldCkuZ2V0KCk7CisgICAgICAg
ICAgICAgICAgICAgIGlmICh2YWx1ZSkgeworICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFw
aC53YXRjaHBvaW50cygpLmFkZExhemlseSh3YXRjaHBvaW50U2V0KTsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoZHN0KSwgd2Vha0pTQ29uc3RhbnQodmFsdWUp
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgICAgICB9
CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIG1f
Z3JhcGgud2F0Y2hwb2ludHMoKS5hZGRMYXppbHkod2F0Y2hwb2ludFNldCk7Ci0gICAgICAgICAg
ICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rlcihkc3QpLCB3ZWFrSlNDb25zdGFudChpbmZlcnJlZFZh
bHVlKSk7CisgICAgICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IGdldFBy
ZWRpY3Rpb24oKTsKKyAgICAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGRzdCksIGFk
ZFRvR3JhcGgoR2V0R2xvYmFsVmFyLCBPcEluZm8ob3BlcmFuZCksIE9wSW5mbyhwcmVkaWN0aW9u
KSkpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAg
Y2FzZSBMb2NhbENsb3N1cmVWYXI6CkBAIC0zNDc5LDYgKzM1MjYsMTAgQEAgYm9vbCBCeXRlQ29k
ZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgICAgIC8vIHdvbid0IGJl
IGFibGUgdG8gaGFuZGxlIGFuIFVuZGVmaW5lZCBzY29wZS4KICAgICAgICAgICAgICAgICBhZGRU
b0dyYXBoKFBoYW50b20sIHNjb3BlTm9kZSk7CiAgICAgICAgICAgICAgICAgCisgICAgICAgICAg
ICAgICAgLy8gQ29uc3RhbnQgZm9sZGluZyBpbiB0aGUgYnl0ZWNvZGUgcGFyc2VyIGlzIGltcG9y
dGFudCBmb3IgcGVyZm9ybWFuY2UuIFRoaXMgbWF5IG5vdAorICAgICAgICAgICAgICAgIC8vIGhh
dmUgZXhlY3V0ZWQgeWV0LiBJZiBpdCBoYXNuJ3QsIHRoZW4gd2Ugd29uJ3QgaGF2ZSBhIHByZWRp
Y3Rpb24uIExhY2tpbmcgYQorICAgICAgICAgICAgICAgIC8vIHByZWRpY3Rpb24sIHdlJ2Qgb3Ro
ZXJ3aXNlIHRoaW5rIHRoYXQgaXQgaGFzIHRvIGV4aXQuIFRoZW4gd2hlbiBpdCBkaWQgZXhlY3V0
ZSwgd2UKKyAgICAgICAgICAgICAgICAvLyB3b3VsZCByZWNvbXBpbGUuIEJ1dCBpZiB3ZSBjYW4g
Zm9sZCBpdCBoZXJlLCB3ZSBhdm9pZCB0aGUgZXhpdC4KICAgICAgICAgICAgICAgICBpZiAoSlNW
YWx1ZSB2YWx1ZSA9IG1fZ3JhcGgudHJ5R2V0Q29uc3RhbnRDbG9zdXJlVmFyKHNjb3BlTm9kZSwg
U2NvcGVPZmZzZXQob3BlcmFuZCkpKSB7CiAgICAgICAgICAgICAgICAgICAgIHNldChWaXJ0dWFs
UmVnaXN0ZXIoZHN0KSwgd2Vha0pTQ29uc3RhbnQodmFsdWUpKTsKICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CkBAIC0zNTA5LDcgKzM1NjAsNyBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJz
ZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAgICAgdWlkID0gbnVsbHB0cjsKICAgICAgICAg
ICAgIAogICAgICAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBudWxscHRyOwotICAgICAg
ICAgICAgVmFyaWFibGVXYXRjaHBvaW50U2V0KiB3YXRjaHBvaW50cyA9IG51bGxwdHI7CisgICAg
ICAgICAgICBXYXRjaHBvaW50U2V0KiB3YXRjaHBvaW50cyA9IG51bGxwdHI7CiAgICAgICAgICAg
ICB1aW50cHRyX3Qgb3BlcmFuZDsKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBDb25j
dXJyZW50SklUTG9ja2VyIGxvY2tlcihtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2st
Pm1fbG9jayk7CkBAIC0zNTUyLDggKzM2MDMsMTAgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFy
c2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBOb2Rl
KiB2YWx1ZU5vZGUgPSBnZXQoVmlydHVhbFJlZ2lzdGVyKHZhbHVlKSk7CiAgICAgICAgICAgICAg
ICAgYWRkVG9HcmFwaChQdXRHbG9iYWxWYXIsIE9wSW5mbyhvcGVyYW5kKSwgdmFsdWVOb2RlKTsK
LSAgICAgICAgICAgICAgICBpZiAod2F0Y2hwb2ludHMgJiYgd2F0Y2hwb2ludHMtPnN0YXRlKCkg
IT0gSXNJbnZhbGlkYXRlZCkKLSAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChOb3RpZnlX
cml0ZSwgT3BJbmZvKHdhdGNocG9pbnRzKSwgdmFsdWVOb2RlKTsKKyAgICAgICAgICAgICAgICBp
ZiAod2F0Y2hwb2ludHMgJiYgd2F0Y2hwb2ludHMtPnN0YXRlKCkgIT0gSXNJbnZhbGlkYXRlZCkg
eworICAgICAgICAgICAgICAgICAgICAvLyBNdXN0IGhhcHBlbiBhZnRlciB0aGUgc3RvcmUuIFNl
ZSBjb21tZW50IGZvciBHZXRHbG9iYWxWYXIuCisgICAgICAgICAgICAgICAgICAgIGFkZFRvR3Jh
cGgoTm90aWZ5V3JpdGUsIE9wSW5mbyh3YXRjaHBvaW50cykpOworICAgICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgICAgICAvLyBLZWVwIHNjb3BlIGFsaXZlIHVudGlsIGFmdGVyIHB1dC4KICAg
ICAgICAgICAgICAgICBhZGRUb0dyYXBoKFBoYW50b20sIGdldChWaXJ0dWFsUmVnaXN0ZXIoc2Nv
cGUpKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CkBAIC0zNTY0LDEwICszNjE3LDEyIEBAIGJv
b2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgICAgICBO
b2RlKiBzY29wZU5vZGUgPSBnZXQoVmlydHVhbFJlZ2lzdGVyKHNjb3BlKSk7CiAgICAgICAgICAg
ICAgICAgTm9kZSogdmFsdWVOb2RlID0gZ2V0KFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSkpOwogCi0g
ICAgICAgICAgICAgICAgaWYgKHdhdGNocG9pbnRzICYmIHdhdGNocG9pbnRzLT5zdGF0ZSgpICE9
IElzSW52YWxpZGF0ZWQpCi0gICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoTm90aWZ5V3Jp
dGUsIE9wSW5mbyh3YXRjaHBvaW50cyksIHZhbHVlTm9kZSk7Ci0KICAgICAgICAgICAgICAgICBh
ZGRUb0dyYXBoKFB1dENsb3N1cmVWYXIsIE9wSW5mbyhvcGVyYW5kKSwgc2NvcGVOb2RlLCB2YWx1
ZU5vZGUpOworCisgICAgICAgICAgICAgICAgaWYgKHdhdGNocG9pbnRzICYmIHdhdGNocG9pbnRz
LT5zdGF0ZSgpICE9IElzSW52YWxpZGF0ZWQpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gTXVz
dCBoYXBwZW4gYWZ0ZXIgdGhlIHN0b3JlLiBTZWUgY29tbWVudCBmb3IgR2V0R2xvYmFsVmFyLgor
ICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKE5vdGlmeVdyaXRlLCBPcEluZm8od2F0Y2hw
b2ludHMpKTsKKyAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICBjYXNlIER5bmFtaWM6CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdDYXBhYmlsaXRpZXMuY3BwCShyZXZpc2lvbiAxODI0OTgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTk2LDcgKzk2LDYgQEAgQ2FwYWJpbGl0eUxldmVsIGNhcGFiaWxpdHlMZXZlbChP
cGNvZGVJRAogICAgIAogICAgIHN3aXRjaCAob3Bjb2RlSUQpIHsKICAgICBjYXNlIG9wX2VudGVy
OgotICAgIGNhc2Ugb3BfdG91Y2hfZW50cnk6CiAgICAgY2FzZSBvcF90b190aGlzOgogICAgIGNh
c2Ugb3BfY2hlY2tfdGR6OgogICAgIGNhc2Ugb3BfY3JlYXRlX3RoaXM6CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkocmV2aXNpb24gMTgyNDk4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDbG9iYmVyaXplLmgJKHdvcmtpbmcgY29weSkK
QEAgLTg1OCwxMSArODU4LDE3IEBAIHZvaWQgY2xvYmJlcml6ZShHcmFwaCYgZ3JhcGgsIE5vZGUq
IG5vZGUKICAgICBjYXNlIE5ld1N0cmluZ09iamVjdDoKICAgICBjYXNlIFBoYW50b21OZXdPYmpl
Y3Q6CiAgICAgY2FzZSBNYXRlcmlhbGl6ZU5ld09iamVjdDoKLSAgICBjYXNlIE5ld0Z1bmN0aW9u
OgogICAgICAgICByZWFkKEhlYXBPYmplY3RDb3VudCk7CiAgICAgICAgIHdyaXRlKEhlYXBPYmpl
Y3RDb3VudCk7CiAgICAgICAgIHJldHVybjsKICAgICAgICAgCisgICAgY2FzZSBOZXdGdW5jdGlv
bjoKKyAgICAgICAgaWYgKG5vZGUtPmNhc3RPcGVyYW5kPEZ1bmN0aW9uRXhlY3V0YWJsZSo+KCkt
PnNpbmdsZXRvbkZ1bmN0aW9uKCktPmlzU3RpbGxWYWxpZCgpKQorICAgICAgICAgICAgd3JpdGUo
V2F0Y2hwb2ludF9maXJlKTsKKyAgICAgICAgcmVhZChIZWFwT2JqZWN0Q291bnQpOworICAgICAg
ICB3cml0ZShIZWFwT2JqZWN0Q291bnQpOworICAgICAgICByZXR1cm47CisKICAgICBjYXNlIFJl
Z0V4cEV4ZWM6CiAgICAgY2FzZSBSZWdFeHBUZXN0OgogICAgICAgICByZWFkKFJlZ0V4cFN0YXRl
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdhdGNocG9pbnRz
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRX
YXRjaHBvaW50cy5jcHAJKHJldmlzaW9uIDE4MjQ5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsx
LDUgQEAKIC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMsIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzLTIwMTUgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgogICoKICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC00NCw2
ICs0NCwxMyBAQCB2b2lkIEFycmF5QnVmZmVyVmlld1dhdGNocG9pbnRBZGFwdG9yOjphCiAgICAg
Y29kZUJsb2NrLT52bSgpLT5oZWFwLmFkZFJlZmVyZW5jZShuZXV0ZXJpbmdXYXRjaHBvaW50LCB2
aWV3LT5idWZmZXIoKSk7CiB9CiAKK3ZvaWQgSW5mZXJyZWRWYWx1ZUFkYXB0b3I6OmFkZCgKKyAg
ICBDb2RlQmxvY2sqIGNvZGVCbG9jaywgSW5mZXJyZWRWYWx1ZSogaW5mZXJyZWRWYWx1ZSwgV2F0
Y2hwb2ludCogd2F0Y2hwb2ludCkKK3sKKyAgICBjb2RlQmxvY2stPmFkZENvbnN0YW50KGluZmVy
cmVkVmFsdWUpOyAvLyBGb3IgY29tbW9uIHVzZXJzLCBpdCBkb2Vzbid0IHJlYWxseSBtYXR0ZXIg
aWYgaXQncyB3ZWFrIG9yIG5vdC4gSWYgcmVmZXJlbmNlcyB0byBpdCBnbyBhd2F5LCB3ZSBnbyBh
d2F5LCB0b28uCisgICAgaW5mZXJyZWRWYWx1ZS0+YWRkKHdhdGNocG9pbnQpOworfQorCiBEZXNp
cmVkV2F0Y2hwb2ludHM6OkRlc2lyZWRXYXRjaHBvaW50cygpIHsgfQogRGVzaXJlZFdhdGNocG9p
bnRzOjp+RGVzaXJlZFdhdGNocG9pbnRzKCkgeyB9CiAKQEAgLTU3LDYgKzY0LDExIEBAIHZvaWQg
RGVzaXJlZFdhdGNocG9pbnRzOjphZGRMYXppbHkoSW5saW4KICAgICBtX2lubGluZVNldHMuYWRk
TGF6aWx5KCZzZXQpOwogfQogCit2b2lkIERlc2lyZWRXYXRjaHBvaW50czo6YWRkTGF6aWx5KElu
ZmVycmVkVmFsdWUqIGluZmVycmVkVmFsdWUpCit7CisgICAgbV9pbmZlcnJlZFZhbHVlcy5hZGRM
YXppbHkoaW5mZXJyZWRWYWx1ZSk7Cit9CisKIHZvaWQgRGVzaXJlZFdhdGNocG9pbnRzOjphZGRM
YXppbHkoSlNBcnJheUJ1ZmZlclZpZXcqIHZpZXcpCiB7CiAgICAgbV9idWZmZXJWaWV3cy5hZGRM
YXppbHkodmlldyk7CkBAIC03NCw2ICs4Niw3IEBAIHZvaWQgRGVzaXJlZFdhdGNocG9pbnRzOjpy
ZWFsbHlBZGQoQ29kZUIKIHsKICAgICBtX3NldHMucmVhbGx5QWRkKGNvZGVCbG9jaywgY29tbW9u
RGF0YSk7CiAgICAgbV9pbmxpbmVTZXRzLnJlYWxseUFkZChjb2RlQmxvY2ssIGNvbW1vbkRhdGEp
OworICAgIG1faW5mZXJyZWRWYWx1ZXMucmVhbGx5QWRkKGNvZGVCbG9jaywgY29tbW9uRGF0YSk7
CiAgICAgbV9idWZmZXJWaWV3cy5yZWFsbHlBZGQoY29kZUJsb2NrLCBjb21tb25EYXRhKTsKIH0K
IApAQCAtODEsNiArOTQsNyBAQCBib29sIERlc2lyZWRXYXRjaHBvaW50czo6YXJlU3RpbGxWYWxp
ZCgpCiB7CiAgICAgcmV0dXJuIG1fc2V0cy5hcmVTdGlsbFZhbGlkKCkKICAgICAgICAgJiYgbV9p
bmxpbmVTZXRzLmFyZVN0aWxsVmFsaWQoKQorICAgICAgICAmJiBtX2luZmVycmVkVmFsdWVzLmFy
ZVN0aWxsVmFsaWQoKQogICAgICAgICAmJiBtX2J1ZmZlclZpZXdzLmFyZVN0aWxsVmFsaWQoKTsK
IH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2F0Y2hwb2lu
dHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRX
YXRjaHBvaW50cy5oCShyZXZpc2lvbiAxODI0OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBA
QAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTMwLDYgKzMw
LDcgQEAKIAogI2luY2x1ZGUgIkNvZGVPcmlnaW4uaCIKICNpbmNsdWRlICJERkdDb21tb25EYXRh
LmgiCisjaW5jbHVkZSAiSW5mZXJyZWRWYWx1ZS5oIgogI2luY2x1ZGUgIkpTQXJyYXlCdWZmZXJW
aWV3LmgiCiAjaW5jbHVkZSAiV2F0Y2hwb2ludC5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+
CkBAIC01MCw2ICs1MSwxNCBAQCBzdHJ1Y3QgR2VuZXJpY1NldEFkYXB0b3IgewogICAgIHN0YXRp
YyBib29sIGhhc0JlZW5JbnZhbGlkYXRlZChUKiBzZXQpIHsgcmV0dXJuIHNldC0+aGFzQmVlbklu
dmFsaWRhdGVkKCk7IH0KIH07CiAKK3N0cnVjdCBJbmZlcnJlZFZhbHVlQWRhcHRvciB7CisgICAg
c3RhdGljIHZvaWQgYWRkKENvZGVCbG9jayosIEluZmVycmVkVmFsdWUqLCBXYXRjaHBvaW50Kik7
CisgICAgc3RhdGljIGJvb2wgaGFzQmVlbkludmFsaWRhdGVkKEluZmVycmVkVmFsdWUqIGluZmVy
cmVkVmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gaW5mZXJyZWRWYWx1ZS0+aGFzQmVlbklu
dmFsaWRhdGVkKCk7CisgICAgfQorfTsKKwogc3RydWN0IEFycmF5QnVmZmVyVmlld1dhdGNocG9p
bnRBZGFwdG9yIHsKICAgICBzdGF0aWMgdm9pZCBhZGQoQ29kZUJsb2NrKiwgSlNBcnJheUJ1ZmZl
clZpZXcqLCBXYXRjaHBvaW50Kik7CiAgICAgc3RhdGljIGJvb2wgaGFzQmVlbkludmFsaWRhdGVk
KEpTQXJyYXlCdWZmZXJWaWV3KiB2aWV3KQpAQCAtMTE5LDYgKzEyOCw3IEBAIHB1YmxpYzoKICAg
ICAKICAgICB2b2lkIGFkZExhemlseShXYXRjaHBvaW50U2V0Kik7CiAgICAgdm9pZCBhZGRMYXpp
bHkoSW5saW5lV2F0Y2hwb2ludFNldCYpOworICAgIHZvaWQgYWRkTGF6aWx5KEluZmVycmVkVmFs
dWUqKTsKICAgICB2b2lkIGFkZExhemlseShKU0FycmF5QnVmZmVyVmlldyopOwogICAgIAogICAg
IGJvb2wgY29uc2lkZXIoU3RydWN0dXJlKik7CkBAIC0xMzUsNiArMTQ1LDEwIEBAIHB1YmxpYzoK
ICAgICB7CiAgICAgICAgIHJldHVybiBtX2lubGluZVNldHMuaXNXYXRjaGVkKCZzZXQpOwogICAg
IH0KKyAgICBib29sIGlzV2F0Y2hlZChJbmZlcnJlZFZhbHVlKiBpbmZlcnJlZFZhbHVlKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIG1faW5mZXJyZWRWYWx1ZXMuaXNXYXRjaGVkKGluZmVycmVkVmFs
dWUpOworICAgIH0KICAgICBib29sIGlzV2F0Y2hlZChKU0FycmF5QnVmZmVyVmlldyogdmlldykK
ICAgICB7CiAgICAgICAgIHJldHVybiBtX2J1ZmZlclZpZXdzLmlzV2F0Y2hlZCh2aWV3KTsKQEAg
LTE0Myw2ICsxNTcsNyBAQCBwdWJsaWM6CiBwcml2YXRlOgogICAgIEdlbmVyaWNEZXNpcmVkV2F0
Y2hwb2ludHM8V2F0Y2hwb2ludFNldD4gbV9zZXRzOwogICAgIEdlbmVyaWNEZXNpcmVkV2F0Y2hw
b2ludHM8SW5saW5lV2F0Y2hwb2ludFNldD4gbV9pbmxpbmVTZXRzOworICAgIEdlbmVyaWNEZXNp
cmVkV2F0Y2hwb2ludHM8SW5mZXJyZWRWYWx1ZSwgSW5mZXJyZWRWYWx1ZUFkYXB0b3I+IG1faW5m
ZXJyZWRWYWx1ZXM7CiAgICAgR2VuZXJpY0Rlc2lyZWRXYXRjaHBvaW50czxKU0FycmF5QnVmZmVy
VmlldywgQXJyYXlCdWZmZXJWaWV3V2F0Y2hwb2ludEFkYXB0b3I+IG1fYnVmZmVyVmlld3M7CiB9
OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkocmV2aXNpb24g
MTgyNDk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTMxMSw4ICszMTEsOCBAQCB2b2lkIEdyYXBoOjpkdW1wKFByaW50U3RyZWFt
JiBvdXQsIGNvbnN0CiAgICAgICAgIG91dC5wcmludChjb21tYSwgIl4iLCBub2RlLT5waGkoKS0+
aW5kZXgoKSk7CiAgICAgaWYgKG5vZGUtPmhhc0V4ZWN1dGlvbkNvdW50ZXIoKSkKICAgICAgICAg
b3V0LnByaW50KGNvbW1hLCBSYXdQb2ludGVyKG5vZGUtPmV4ZWN1dGlvbkNvdW50ZXIoKSkpOwot
ICAgIGlmIChub2RlLT5oYXNWYXJpYWJsZVdhdGNocG9pbnRTZXQoKSkKLSAgICAgICAgb3V0LnBy
aW50KGNvbW1hLCBSYXdQb2ludGVyKG5vZGUtPnZhcmlhYmxlV2F0Y2hwb2ludFNldCgpKSk7Cisg
ICAgaWYgKG5vZGUtPmhhc1dhdGNocG9pbnRTZXQoKSkKKyAgICAgICAgb3V0LnByaW50KGNvbW1h
LCBSYXdQb2ludGVyKG5vZGUtPndhdGNocG9pbnRTZXQoKSkpOwogICAgIGlmIChub2RlLT5oYXNT
dG9yYWdlUG9pbnRlcigpKQogICAgICAgICBvdXQucHJpbnQoY29tbWEsIFJhd1BvaW50ZXIobm9k
ZS0+c3RvcmFnZVBvaW50ZXIoKSkpOwogICAgIGlmIChub2RlLT5oYXNPYmplY3RNYXRlcmlhbGl6
YXRpb25EYXRhKCkpCkBAIC0xMDI2LDYgKzEwMjYsOCBAQCBKU1ZhbHVlIEdyYXBoOjp0cnlHZXRD
b25zdGFudFByb3BlcnR5KGNvCiAKIEpTVmFsdWUgR3JhcGg6OnRyeUdldENvbnN0YW50Q2xvc3Vy
ZVZhcihKU1ZhbHVlIGJhc2UsIFNjb3BlT2Zmc2V0IG9mZnNldCkKIHsKKyAgICAvLyBUaGlzIGhh
cyBhbiBhd2Vzb21lIGNvbmN1cnJlbmN5IHN0b3J5LiBTZWUgY29tbWVudCBmb3IgR2V0R2xvYmFs
VmFyIGluIEJ5dGVDb2RlUGFyc2VyLgorICAgIAogICAgIGlmICghYmFzZSkKICAgICAgICAgcmV0
dXJuIEpTVmFsdWUoKTsKICAgICAKQEAgLTEwMzQsMjQgKzEwMzYsMjggQEAgSlNWYWx1ZSBHcmFw
aDo6dHJ5R2V0Q29uc3RhbnRDbG9zdXJlVmFyKAogICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwog
ICAgIAogICAgIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSA9IGFjdGl2YXRpb24tPnN5bWJvbFRh
YmxlKCk7Ci0gICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIoc3ltYm9sVGFibGUtPm1fbG9j
ayk7Ci0gICAgCi0gICAgaWYgKHN5bWJvbFRhYmxlLT5tX2Z1bmN0aW9uRW50ZXJlZE9uY2UuaGFz
QmVlbkludmFsaWRhdGVkKCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlKCk7Ci0gICAgCi0gICAg
U3ltYm9sVGFibGVFbnRyeSogZW50cnkgPSBzeW1ib2xUYWJsZS0+ZW50cnlGb3IobG9ja2VyLCBv
ZmZzZXQpOwotICAgIGlmICghZW50cnkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlKCk7Ci0gICAg
Ci0gICAgVmFyaWFibGVXYXRjaHBvaW50U2V0KiBzZXQgPSBlbnRyeS0+d2F0Y2hwb2ludFNldCgp
OwotICAgIGlmICghc2V0KQotICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwotICAgIAotICAgIEpT
VmFsdWUgdmFsdWUgPSBzZXQtPmluZmVycmVkVmFsdWUoKTsKLSAgICBpZiAoIXZhbHVlKQotICAg
ICAgICByZXR1cm4gSlNWYWx1ZSgpOworICAgIEpTVmFsdWUgdmFsdWU7CisgICAgV2F0Y2hwb2lu
dFNldCogc2V0OworICAgIHsKKyAgICAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIoc3lt
Ym9sVGFibGUtPm1fbG9jayk7CisgICAgICAgIAorICAgICAgICBTeW1ib2xUYWJsZUVudHJ5KiBl
bnRyeSA9IHN5bWJvbFRhYmxlLT5lbnRyeUZvcihsb2NrZXIsIG9mZnNldCk7CisgICAgICAgIGlm
ICghZW50cnkpCisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOworICAgICAgICAKKyAgICAg
ICAgc2V0ID0gZW50cnktPndhdGNocG9pbnRTZXQoKTsKKyAgICAgICAgaWYgKCFzZXQpCisgICAg
ICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOworICAgICAgICAKKyAgICAgICAgaWYgKHNldC0+c3Rh
dGUoKSAhPSBJc1dhdGNoZWQpCisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOworICAgICAg
ICAKKyAgICAgICAgQVNTRVJUKGVudHJ5LT5zY29wZU9mZnNldCgpID09IG9mZnNldCk7CisgICAg
ICAgIHZhbHVlID0gYWN0aXZhdGlvbi0+dmFyaWFibGVBdChvZmZzZXQpLmdldCgpOworICAgICAg
ICBpZiAoIXZhbHVlKQorICAgICAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKKyAgICB9CiAgICAg
Ci0gICAgd2F0Y2hwb2ludHMoKS5hZGRMYXppbHkoc3ltYm9sVGFibGUtPm1fZnVuY3Rpb25FbnRl
cmVkT25jZSk7CiAgICAgd2F0Y2hwb2ludHMoKS5hZGRMYXppbHkoc2V0KTsKICAgICAKICAgICBy
ZXR1cm4gdmFsdWU7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNp
b24gMTgyNDk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEyMTksMTQgKzEyMTksMTQgQEAgc3RydWN0IE5vZGUgewogICAgICAgICBt
X29wSW5mbyA9IGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KHZhbHVlKTsKICAgICB9CiAgICAgCi0g
ICAgYm9vbCBoYXNWYXJpYWJsZVdhdGNocG9pbnRTZXQoKQorICAgIGJvb2wgaGFzV2F0Y2hwb2lu
dFNldCgpCiAgICAgewogICAgICAgICByZXR1cm4gb3AoKSA9PSBOb3RpZnlXcml0ZTsKICAgICB9
CiAgICAgCi0gICAgVmFyaWFibGVXYXRjaHBvaW50U2V0KiB2YXJpYWJsZVdhdGNocG9pbnRTZXQo
KQorICAgIFdhdGNocG9pbnRTZXQqIHdhdGNocG9pbnRTZXQoKQogICAgIHsKLSAgICAgICAgcmV0
dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8VmFyaWFibGVXYXRjaHBvaW50U2V0Kj4obV9vcEluZm8pOwor
ICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxXYXRjaHBvaW50U2V0Kj4obV9vcEluZm8p
OwogICAgIH0KICAgICAKICAgICBib29sIGhhc1N0b3JhZ2VQb2ludGVyKCkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMTgyNDk4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTA3NywxMyArMTA3NywxMiBAQCBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvblN3aXRjaFN0cmluCiAgICAgcmV0dXJuIHN0YXRpY19jYXN0PGNoYXIqPihleGVjLT5jb2Rl
QmxvY2soKS0+c3RyaW5nU3dpdGNoSnVtcFRhYmxlKHRhYmxlSW5kZXgpLmN0aUZvclZhbHVlKHN0
cmluZy0+dmFsdWUoZXhlYykuaW1wbCgpKS5leGVjdXRhYmxlQWRkcmVzcygpKTsKIH0KIAotdm9p
ZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5vdGlmeVdyaXRlKEV4ZWNTdGF0ZSogZXhlYywgVmFy
aWFibGVXYXRjaHBvaW50U2V0KiBzZXQsIEVuY29kZWRKU1ZhbHVlIGVuY29kZWRWYWx1ZSkKK3Zv
aWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25Ob3RpZnlXcml0ZShFeGVjU3RhdGUqIGV4ZWMsIFdh
dGNocG9pbnRTZXQqIHNldCkKIHsKICAgICBWTSYgdm0gPSBleGVjLT52bSgpOwogICAgIE5hdGl2
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKLSAgICBKU1ZhbHVlIHZhbHVlID0g
SlNWYWx1ZTo6ZGVjb2RlKGVuY29kZWRWYWx1ZSk7CiAKLSAgICBzZXQtPm5vdGlmeVdyaXRlKHZt
LCB2YWx1ZSwgIkV4ZWN1dGVkIE5vdGlmeVdyaXRlIik7CisgICAgc2V0LT50b3VjaCgiRXhlY3V0
ZWQgTm90aWZ5V3JpdGUiKTsKIH0KIAogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRocm93
U3RhY2tPdmVyZmxvd0ZvclZhcmFyZ3MoRXhlY1N0YXRlKiBleGVjKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgJKHJldmlzaW9uIDE4MjQ5OCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHT3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBA
IC0xMjcsNyArMTI3LDcgQEAgSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk1ha2VSb3Bl
MgogSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk1ha2VSb3BlMyhFeGVjU3RhdGUqLCBK
U1N0cmluZyosIEpTU3RyaW5nKiwgSlNTdHJpbmcqKTsKIGNoYXIqIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uRmluZFN3aXRjaEltbVRhcmdldEZvckRvdWJsZShFeGVjU3RhdGUqLCBFbmNvZGVkSlNW
YWx1ZSwgc2l6ZV90IHRhYmxlSW5kZXgpOwogY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25T
d2l0Y2hTdHJpbmcoRXhlY1N0YXRlKiwgc2l6ZV90IHRhYmxlSW5kZXgsIEpTU3RyaW5nKik7Ci12
b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTm90aWZ5V3JpdGUoRXhlY1N0YXRlKiwgVmFyaWFi
bGVXYXRjaHBvaW50U2V0KiwgRW5jb2RlZEpTVmFsdWUpOwordm9pZCBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvbk5vdGlmeVdyaXRlKEV4ZWNTdGF0ZSosIFdhdGNocG9pbnRTZXQqKTsKIHZvaWQgSklU
X09QRVJBVElPTiBvcGVyYXRpb25UaHJvd1N0YWNrT3ZlcmZsb3dGb3JWYXJhcmdzKEV4ZWNTdGF0
ZSopIFdURl9JTlRFUk5BTDsKIGludDMyX3QgSklUX09QRVJBVElPTiBvcGVyYXRpb25TaXplT2ZW
YXJhcmdzKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlIGFyZ3VtZW50cywgaW50MzJfdCBmaXJz
dFZhckFyZ09mZnNldCk7CiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTG9hZFZhcmFyZ3Mo
RXhlY1N0YXRlKiwgaW50MzJfdCBmaXJzdEVsZW1lbnREZXN0LCBFbmNvZGVkSlNWYWx1ZSBhcmd1
bWVudHMsIGludDMyX3Qgb2Zmc2V0LCBpbnQzMl90IGxlbmd0aCwgaW50MzJfdCBtYW5kYXRvcnlN
aW5pbXVtKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUGxhbi5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAkocmV2aXNp
b24gMTgyNDk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQbGFuLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjY3LDYgKzI2Nyw3IEBAIFBsYW46OkNvbXBpbGF0aW9uUGF0aCBQbGFu
Ojpjb21waWxlSW5UaHIKICAgICBwZXJmb3JtQ0ZBKGRmZyk7CiAgICAgcGVyZm9ybUNvbnN0YW50
Rm9sZGluZyhkZmcpOwogICAgIGJvb2wgY2hhbmdlZCA9IGZhbHNlOworICAgIGNoYW5nZWQgfD0g
cGVyZm9ybVN0cmVuZ3RoUmVkdWN0aW9uKGRmZyk7CiAgICAgY2hhbmdlZCB8PSBwZXJmb3JtQ0ZH
U2ltcGxpZmljYXRpb24oZGZnKTsKICAgICBjaGFuZ2VkIHw9IHBlcmZvcm1Mb2NhbENTRShkZmcp
OwogICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklUMzJfNjQuY3BwCShyZXZpc2lvbiAxODI0OTgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zOTg3LDMyICszOTg3LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBu
b2RlKQogICAgIH0KIAogICAgIGNhc2UgTm90aWZ5V3JpdGU6IHsKLSAgICAgICAgVmFyaWFibGVX
YXRjaHBvaW50U2V0KiBzZXQgPSBub2RlLT52YXJpYWJsZVdhdGNocG9pbnRTZXQoKTsKLSAgICAK
LSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAg
ICAgICBHUFJSZWcgdmFsdWVUYWdHUFIgPSB2YWx1ZS50YWdHUFIoKTsKLSAgICAgICAgR1BSUmVn
IHZhbHVlUGF5bG9hZEdQUiA9IHZhbHVlLnBheWxvYWRHUFIoKTsKLSAgICAKLSAgICAgICAgR1BS
VGVtcG9yYXJ5IHRlbXAodGhpcyk7Ci0gICAgICAgIEdQUlJlZyB0ZW1wR1BSID0gdGVtcC5ncHIo
KTsKLSAgICAKLSAgICAgICAgbV9qaXQubG9hZDgoc2V0LT5hZGRyZXNzT2ZTdGF0ZSgpLCB0ZW1w
R1BSKTsKLSAgICAKLSAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgaXNEb25lID0gbV9qaXQuYnJh
bmNoMzIoSklUQ29tcGlsZXI6OkVxdWFsLCB0ZW1wR1BSLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlk
YXRlZCkpOwotICAgICAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgbm90aWZ5U2xvdzsKLSAgICAg
ICAgbm90aWZ5U2xvdy5hcHBlbmQobV9qaXQuYnJhbmNoMzIoCi0gICAgICAgICAgICBKSVRDb21w
aWxlcjo6Tm90RXF1YWwsCi0gICAgICAgICAgICBKSVRDb21waWxlcjo6QWJzb2x1dGVBZGRyZXNz
KHNldC0+YWRkcmVzc09mSW5mZXJyZWRWYWx1ZSgpLT5wYXlsb2FkUG9pbnRlcigpKSwKLSAgICAg
ICAgICAgIHZhbHVlUGF5bG9hZEdQUikpOwotICAgICAgICBub3RpZnlTbG93LmFwcGVuZChtX2pp
dC5icmFuY2gzMigKLSAgICAgICAgICAgIEpJVENvbXBpbGVyOjpOb3RFcXVhbCwgCi0gICAgICAg
ICAgICBKSVRDb21waWxlcjo6QWJzb2x1dGVBZGRyZXNzKHNldC0+YWRkcmVzc09mSW5mZXJyZWRW
YWx1ZSgpLT50YWdQb2ludGVyKCkpLAotICAgICAgICAgICAgdmFsdWVUYWdHUFIpKTsKLSAgICAg
ICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCi0gICAgICAgICAgICBzbG93UGF0aENhbGwobm90aWZ5
U2xvdywgdGhpcywgb3BlcmF0aW9uTm90aWZ5V3JpdGUsIE5vUmVzdWx0LCBzZXQsIHZhbHVlVGFn
R1BSLCB2YWx1ZVBheWxvYWRHUFIpKTsKLSAgICAgICAgaXNEb25lLmxpbmsoJm1faml0KTsKLSAg
ICAKLSAgICAgICAgbm9SZXN1bHQobm9kZSk7CisgICAgICAgIGNvbXBpbGVOb3RpZnlXcml0ZShu
b2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDE4MjQ5OCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQwMTksMjYgKzQwMTksNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlKE5vZGUqIG5vZGUpCiAgICAgfQogCiAgICAgY2FzZSBOb3RpZnlXcml0ZTogewotICAg
ICAgICBWYXJpYWJsZVdhdGNocG9pbnRTZXQqIHNldCA9IG5vZGUtPnZhcmlhYmxlV2F0Y2hwb2lu
dFNldCgpOwotICAgIAotICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLT5j
aGlsZDEoKSk7Ci0gICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOwotICAgIAot
ICAgICAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKLSAgICAgICAgR1BSUmVnIHRlbXBHUFIg
PSB0ZW1wLmdwcigpOwotICAgIAotICAgICAgICBtX2ppdC5sb2FkOChzZXQtPmFkZHJlc3NPZlN0
YXRlKCksIHRlbXBHUFIpOwotICAgIAotICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBpc0RvbmUg
PQotICAgICAgICAgICAgbV9qaXQuYnJhbmNoMzIoSklUQ29tcGlsZXI6OkVxdWFsLCB0ZW1wR1BS
LCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpOwotICAgICAgICBKSVRDb21waWxlcjo6SnVt
cCBzbG93Q2FzZSA9IG1faml0LmJyYW5jaDY0KEpJVENvbXBpbGVyOjpOb3RFcXVhbCwKLSAgICAg
ICAgICAgIEpJVENvbXBpbGVyOjpBYnNvbHV0ZUFkZHJlc3Moc2V0LT5hZGRyZXNzT2ZJbmZlcnJl
ZFZhbHVlKCkpLCB2YWx1ZUdQUik7Ci0gICAgICAgIGlzRG9uZS5saW5rKCZtX2ppdCk7Ci0gICAg
Ci0gICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAotICAgICAgICAgICAgc2xvd1BhdGhDYWxs
KHNsb3dDYXNlLCB0aGlzLCBvcGVyYXRpb25Ob3RpZnlXcml0ZSwgTm9SZXN1bHQsIHNldCwgdmFs
dWVHUFIpKTsKLQotICAgICAgICBub1Jlc3VsdChub2RlKTsKKyAgICAgICAgY29tcGlsZU5vdGlm
eVdyaXRlKG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAxODI0
OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDM2Nyw4ICs0MzY3LDEzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVOZXdGdW5jdGlvbigKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBzY29wZSh0aGlz
LCBub2RlLT5jaGlsZDEoKSk7CiAgICAgR1BSUmVnIHNjb3BlR1BSID0gc2NvcGUuZ3ByKCk7CiAg
ICAgZmx1c2hSZWdpc3RlcnMoKTsKLSAgICBjYWxsT3BlcmF0aW9uKAotICAgICAgICBvcGVyYXRp
b25OZXdGdW5jdGlvbiwgcmVzdWx0R1BSLCBzY29wZUdQUiwgbm9kZS0+Y2FzdE9wZXJhbmQ8RnVu
Y3Rpb25FeGVjdXRhYmxlKj4oKSk7CisgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxl
ID0gbm9kZS0+Y2FzdE9wZXJhbmQ8RnVuY3Rpb25FeGVjdXRhYmxlKj4oKTsKKyAgICBKX0pJVE9w
ZXJhdGlvbl9FSnNjQyBmdW5jdGlvbjsKKyAgICBpZiAoZXhlY3V0YWJsZS0+c2luZ2xldG9uRnVu
Y3Rpb24oKS0+aXNTdGlsbFZhbGlkKCkpCisgICAgICAgIGZ1bmN0aW9uID0gb3BlcmF0aW9uTmV3
RnVuY3Rpb247CisgICAgZWxzZQorICAgICAgICBmdW5jdGlvbiA9IG9wZXJhdGlvbk5ld0Z1bmN0
aW9uV2l0aEludmFsaWRhdGVkUmVhbGxvY2F0aW9uV2F0Y2hwb2ludDsKKyAgICBjYWxsT3BlcmF0
aW9uKGZ1bmN0aW9uLCByZXN1bHRHUFIsIHNjb3BlR1BSLCBleGVjdXRhYmxlKTsKICAgICBjZWxs
UmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CiB9CiAKQEAgLTQ0MzYsMTkgKzQ0NDEsMzEgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUZvcndhcmRWYXJhcgogCiB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlQ3JlYXRlQWN0aXZhdGlvbihOb2RlKiBub2RlKQogeworICAgIFN5bWJvbFRh
YmxlKiB0YWJsZSA9IG1faml0LmdyYXBoKCkuc3ltYm9sVGFibGVGb3Iobm9kZS0+b3JpZ2luLnNl
bWFudGljKTsKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1faml0LmdyYXBoKCkuZ2xvYmFs
T2JqZWN0Rm9yKAorICAgICAgICBub2RlLT5vcmlnaW4uc2VtYW50aWMpLT5hY3RpdmF0aW9uU3Ry
dWN0dXJlKCk7CisgICAgICAgIAogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIHNjb3BlKHRoaXMs
IG5vZGUtPmNoaWxkMSgpKTsKKyAgICBHUFJSZWcgc2NvcGVHUFIgPSBzY29wZS5ncHIoKTsKKyAg
ICAKKyAgICBpZiAodGFibGUtPnNpbmdsZXRvblNjb3BlKCktPmlzU3RpbGxWYWxpZCgpKSB7Cisg
ICAgICAgIEdQUkZsdXNoZWRDYWxsUmVzdWx0IHJlc3VsdCh0aGlzKTsKKyAgICAgICAgR1BSUmVn
IHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgCisgICAgICAgIGZsdXNoUmVnaXN0
ZXJzKCk7CisgICAgICAgIAorICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNyZWF0ZUFj
dGl2YXRpb25EaXJlY3QsIHJlc3VsdEdQUiwgc3RydWN0dXJlLCBzY29wZUdQUiwgdGFibGUpOwor
ICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgCiAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKICAgICBHUFJUZW1wb3Jh
cnkgc2NyYXRjaDEodGhpcyk7CiAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2gyKHRoaXMpOwotICAg
IEdQUlJlZyBzY29wZUdQUiA9IHNjb3BlLmdwcigpOwogICAgIEdQUlJlZyByZXN1bHRHUFIgPSBy
ZXN1bHQuZ3ByKCk7CiAgICAgR1BSUmVnIHNjcmF0Y2gxR1BSID0gc2NyYXRjaDEuZ3ByKCk7CiAg
ICAgR1BSUmVnIHNjcmF0Y2gyR1BSID0gc2NyYXRjaDIuZ3ByKCk7CiAgICAgICAgIAotICAgIFN5
bWJvbFRhYmxlKiB0YWJsZSA9IG1faml0LmdyYXBoKCkuc3ltYm9sVGFibGVGb3Iobm9kZS0+b3Jp
Z2luLnNlbWFudGljKTsKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1faml0LmdyYXBoKCku
Z2xvYmFsT2JqZWN0Rm9yKAotICAgICAgICBub2RlLT5vcmlnaW4uc2VtYW50aWMpLT5hY3RpdmF0
aW9uU3RydWN0dXJlKCk7Ci0gICAgICAgIAogICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBzbG93
UGF0aDsKICAgICBlbWl0QWxsb2NhdGVKU09iamVjdFdpdGhLbm93blNpemU8SlNMZXhpY2FsRW52
aXJvbm1lbnQ+KAogICAgICAgICByZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwg
VHJ1c3RlZEltbVB0cigwKSwgc2NyYXRjaDFHUFIsIHNjcmF0Y2gyR1BSLApAQCAtNDcxNCw2ICs0
NzMxLDIxIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDcmVhdGVDbG9uZWQKICAgICBj
ZWxsUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CiB9CiAKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVOb3RpZnlXcml0ZShOb2RlKiBub2RlKQoreworICAgIFdhdGNocG9pbnRTZXQqIHNldCA9
IG5vZGUtPndhdGNocG9pbnRTZXQoKTsKKyAgICAKKyAgICBKSVRDb21waWxlcjo6SnVtcCBzbG93
Q2FzZSA9IG1faml0LmJyYW5jaDgoCisgICAgICAgIEpJVENvbXBpbGVyOjpOb3RFcXVhbCwKKyAg
ICAgICAgSklUQ29tcGlsZXI6OkFic29sdXRlQWRkcmVzcyhzZXQtPmFkZHJlc3NPZlN0YXRlKCkp
LAorICAgICAgICBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpOworICAgIAorICAgIGFkZFNs
b3dQYXRoR2VuZXJhdG9yKAorICAgICAgICBzbG93UGF0aENhbGwoc2xvd0Nhc2UsIHRoaXMsIG9w
ZXJhdGlvbk5vdGlmeVdyaXRlLCBOb1Jlc3VsdCwgc2V0KSk7CisgICAgCisgICAgbm9SZXN1bHQo
bm9kZSk7Cit9CisKIGJvb2wgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVSZWdFeHBFeGVjKE5vZGUq
IG5vZGUpCiB7CiAgICAgdW5zaWduZWQgYnJhbmNoSW5kZXhJbkJsb2NrID0gZGV0ZWN0UGVlcEhv
bGVCcmFuY2goKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklULmgJKHJldmlzaW9uIDE4MjQ5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMTQ2MCw5ICsxNDYwLDkg
QEAgcHVibGljOgogICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhv
cGVyYXRpb24pOwogICAgIH0KIAotICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24o
Vl9KSVRPcGVyYXRpb25fRVZ3c0ogb3BlcmF0aW9uLCBWYXJpYWJsZVdhdGNocG9pbnRTZXQqIHdh
dGNocG9pbnRTZXQsIEdQUlJlZyBhcmcpCisgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJh
dGlvbihWX0pJVE9wZXJhdGlvbl9FV3Mgb3BlcmF0aW9uLCBXYXRjaHBvaW50U2V0KiB3YXRjaHBv
aW50U2V0KQogICAgIHsKLSAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRl
KFRydXN0ZWRJbW1QdHIod2F0Y2hwb2ludFNldCksIGFyZyk7CisgICAgICAgIG1faml0LnNldHVw
QXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRyKHdhdGNocG9pbnRTZXQpKTsKICAg
ICAgICAgcmV0dXJuIGFwcGVuZENhbGwob3BlcmF0aW9uKTsKICAgICB9CiAKQEAgLTE3NzYsMTIg
KzE3NzYsNiBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlv
bkNoZWNrKG9wZXJhdGlvbik7CiAgICAgfQogCi0gICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9w
ZXJhdGlvbihWX0pJVE9wZXJhdGlvbl9FVndzSiBvcGVyYXRpb24sIFZhcmlhYmxlV2F0Y2hwb2lu
dFNldCogd2F0Y2hwb2ludFNldCwgR1BSUmVnIGFyZ1RhZywgR1BSUmVnIGFyZ1BheWxvYWQpCi0g
ICAgewotICAgICAgICBtX2ppdC5zZXR1cEFyZ3VtZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZElt
bVB0cih3YXRjaHBvaW50U2V0KSwgYXJnUGF5bG9hZCwgYXJnVGFnKTsKLSAgICAgICAgcmV0dXJu
IGFwcGVuZENhbGwob3BlcmF0aW9uKTsKLSAgICB9Ci0KICAgICBKSVRDb21waWxlcjo6Q2FsbCBj
YWxsT3BlcmF0aW9uKERfSklUT3BlcmF0aW9uX0VKIG9wZXJhdGlvbiwgRlBSUmVnIHJlc3VsdCwg
R1BSUmVnIGFyZzFUYWcsIEdQUlJlZyBhcmcxUGF5bG9hZCkKICAgICB7CiAgICAgICAgIG1faml0
LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShFQUJJXzMyQklUX0RVTU1ZX0FSRyBhcmcxUGF5
bG9hZCwgYXJnMVRhZyk7CkBAIC0yMjEzLDYgKzIyMDcsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBj
b21waWxlUHV0VG9Bcmd1bWVudHMoTm9kZSopOwogICAgIHZvaWQgY29tcGlsZUNyZWF0ZVNjb3Bl
ZEFyZ3VtZW50cyhOb2RlKik7CiAgICAgdm9pZCBjb21waWxlQ3JlYXRlQ2xvbmVkQXJndW1lbnRz
KE5vZGUqKTsKKyAgICB2b2lkIGNvbXBpbGVOb3RpZnlXcml0ZShOb2RlKik7CiAgICAgYm9vbCBj
b21waWxlUmVnRXhwRXhlYyhOb2RlKik7CiAgICAgCiAgICAgSklUQ29tcGlsZXI6Okp1bXAgYnJh
bmNoSXNDZWxsKEpTVmFsdWVSZWdzKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlLmNwcAkocmV2aXNpb24gMTgy
NDk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJhcmdzRm9yd2FyZGluZ1Bo
YXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkRGR0Ns
b2JiZXJpemUuaCIKICNpbmNsdWRlICJERkdHcmFwaC5oIgogI2luY2x1ZGUgIkRGR1BoYXNlLmgi
CisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERG
RyB7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW50cmluc2ljUmVwb3Np
dG9yeS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW50cmlu
c2ljUmVwb3NpdG9yeS5oCShyZXZpc2lvbiAxODI0OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZnRsL0ZUTEludHJpbnNpY1JlcG9zaXRvcnkuaAkod29ya2luZyBjb3B5KQpAQCAtMTA1LDcg
KzEwNSw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgRlRMIHsKICAgICBtYWNybyhWX0pJ
VE9wZXJhdGlvbl9FT1pKLCBmdW5jdGlvblR5cGUodm9pZFR5cGUsIGludFB0ciwgaW50UHRyLCBp
bnQzMiwgaW50NjQpKSBcCiAgICAgbWFjcm8oVl9KSVRPcGVyYXRpb25fRUMsIGZ1bmN0aW9uVHlw
ZSh2b2lkVHlwZSwgaW50UHRyLCBpbnRQdHIpKSBcCiAgICAgbWFjcm8oVl9KSVRPcGVyYXRpb25f
RUNiLCBmdW5jdGlvblR5cGUodm9pZFR5cGUsIGludFB0ciwgaW50UHRyKSkgXAotICAgIG1hY3Jv
KFZfSklUT3BlcmF0aW9uX0VWd3NKLCBmdW5jdGlvblR5cGUodm9pZFR5cGUsIGludFB0ciwgaW50
UHRyLCBpbnQ2NCkpIFwKKyAgICBtYWNybyhWX0pJVE9wZXJhdGlvbl9FV3MsIGZ1bmN0aW9uVHlw
ZSh2b2lkVHlwZSwgaW50UHRyLCBpbnRQdHIpKSBcCiAgICAgbWFjcm8oVl9KSVRPcGVyYXRpb25f
RVpKWlpaLCBmdW5jdGlvblR5cGUodm9pZFR5cGUsIGludFB0ciwgaW50MzIsIGludDY0LCBpbnQz
MiwgaW50MzIsIGludDMyKSkgXAogICAgIG1hY3JvKFZfSklUT3BlcmF0aW9uX0osIGZ1bmN0aW9u
VHlwZSh2b2lkVHlwZSwgaW50NjQpKSBcCiAgICAgbWFjcm8oVl9KSVRPcGVyYXRpb25fWiwgZnVu
Y3Rpb25UeXBlKHZvaWRUeXBlLCBpbnQzMikpIFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCShyZXZpc2lvbiAxODI0OTgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjg3Nyw2ICsyODc3LDE0IEBAIHByaXZhdGU6CiAgICAgICAgIFN5bWJvbFRhYmxl
KiB0YWJsZSA9IG1fZ3JhcGguc3ltYm9sVGFibGVGb3IobV9ub2RlLT5vcmlnaW4uc2VtYW50aWMp
OwogICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9y
KG1fbm9kZS0+b3JpZ2luLnNlbWFudGljKS0+YWN0aXZhdGlvblN0cnVjdHVyZSgpOwogICAgICAg
ICAKKyAgICAgICAgaWYgKHRhYmxlLT5zaW5nbGV0b25TY29wZSgpLT5pc1N0aWxsVmFsaWQoKSkg
eworICAgICAgICAgICAgTFZhbHVlIGNhbGxSZXN1bHQgPSB2bUNhbGwoCisgICAgICAgICAgICAg
ICAgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbkNyZWF0ZUFjdGl2YXRpb25EaXJlY3QpLCBtX2Nh
bGxGcmFtZSwgd2Vha1BvaW50ZXIoc3RydWN0dXJlKSwKKyAgICAgICAgICAgICAgICBzY29wZSwg
d2Vha1BvaW50ZXIodGFibGUpKTsKKyAgICAgICAgICAgIHNldEpTVmFsdWUoY2FsbFJlc3VsdCk7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIExCYXNp
Y0Jsb2NrIHNsb3dQYXRoID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJDcmVhdGVBY3RpdmF0aW9u
IHNsb3cgcGF0aCIpKTsKICAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05F
V19CTE9DSyhtX291dCwgKCJDcmVhdGVBY3RpdmF0aW9uIGNvbnRpbnVhdGlvbiIpKTsKICAgICAg
ICAgCkBAIC0yOTEyLDkgKzI5MjAsMTYgQEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lkIGNvbXBp
bGVOZXdGdW5jdGlvbigpCiAgICAgeworICAgICAgICBGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1
dGFibGUgPSBtX25vZGUtPmNhc3RPcGVyYW5kPEZ1bmN0aW9uRXhlY3V0YWJsZSo+KCk7CisgICAg
ICAgIEpfSklUT3BlcmF0aW9uX0VKc2NDIGZ1bmN0aW9uOworICAgICAgICBpZiAoZXhlY3V0YWJs
ZS0+c2luZ2xldG9uRnVuY3Rpb24oKS0+aXNTdGlsbFZhbGlkKCkpCisgICAgICAgICAgICBmdW5j
dGlvbiA9IG9wZXJhdGlvbk5ld0Z1bmN0aW9uOworICAgICAgICBlbHNlCisgICAgICAgICAgICBm
dW5jdGlvbiA9IG9wZXJhdGlvbk5ld0Z1bmN0aW9uV2l0aEludmFsaWRhdGVkUmVhbGxvY2F0aW9u
V2F0Y2hwb2ludDsKKyAgICAgICAgCiAgICAgICAgIExWYWx1ZSByZXN1bHQgPSB2bUNhbGwoCi0g
ICAgICAgICAgICBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uTmV3RnVuY3Rpb24pLCBtX2NhbGxG
cmFtZSwKLSAgICAgICAgICAgIGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSksIHdlYWtQb2ludGVy
KG1fbm9kZS0+Y2FzdE9wZXJhbmQ8RnVuY3Rpb25FeGVjdXRhYmxlKj4oKSkpOworICAgICAgICAg
ICAgbV9vdXQub3BlcmF0aW9uKGZ1bmN0aW9uKSwgbV9jYWxsRnJhbWUsIGxvd0NlbGwobV9ub2Rl
LT5jaGlsZDEoKSksCisgICAgICAgICAgICB3ZWFrUG9pbnRlcihleGVjdXRhYmxlKSk7CiAgICAg
ICAgIHNldEpTVmFsdWUocmVzdWx0KTsKICAgICB9CiAgICAgCkBAIC0zNzgzLDI5ICszNzk4LDE5
IEBAIHByaXZhdGU6CiAgICAgCiAgICAgdm9pZCBjb21waWxlTm90aWZ5V3JpdGUoKQogICAgIHsK
LSAgICAgICAgVmFyaWFibGVXYXRjaHBvaW50U2V0KiBzZXQgPSBtX25vZGUtPnZhcmlhYmxlV2F0
Y2hwb2ludFNldCgpOwotICAgICAgICAKLSAgICAgICAgTFZhbHVlIHZhbHVlID0gbG93SlNWYWx1
ZShtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAgV2F0Y2hwb2ludFNldCogc2V0ID0gbV9ub2Rl
LT53YXRjaHBvaW50U2V0KCk7CiAgICAgICAgIAogICAgICAgICBMQmFzaWNCbG9jayBpc05vdElu
dmFsaWRhdGVkID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJOb3RpZnlXcml0ZSBub3QgaW52YWxp
ZGF0ZWQgY2FzZSIpKTsKLSAgICAgICAgTEJhc2ljQmxvY2sgbm90aWZ5U2xvdyA9IEZUTF9ORVdf
QkxPQ0sobV9vdXQsICgiTm90aWZ5V3JpdGUgbm90aWZ5IHNsb3cgY2FzZSIpKTsKICAgICAgICAg
TEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJOb3RpZnlX
cml0ZSBjb250aW51YXRpb24iKSk7CiAgICAgICAgIAogICAgICAgICBMVmFsdWUgc3RhdGUgPSBt
X291dC5sb2FkOChtX291dC5hYnNvbHV0ZShzZXQtPmFkZHJlc3NPZlN0YXRlKCkpKTsKLSAgICAg
ICAgCiAgICAgICAgIG1fb3V0LmJyYW5jaCgKICAgICAgICAgICAgIG1fb3V0LmVxdWFsKHN0YXRl
LCBtX291dC5jb25zdEludDgoSXNJbnZhbGlkYXRlZCkpLAogICAgICAgICAgICAgdXN1YWxseShj
b250aW51YXRpb24pLCByYXJlbHkoaXNOb3RJbnZhbGlkYXRlZCkpOwogICAgICAgICAKLSAgICAg
ICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhpc05vdEludmFsaWRhdGVk
LCBub3RpZnlTbG93KTsKLQotICAgICAgICBtX291dC5icmFuY2goCi0gICAgICAgICAgICBtX291
dC5lcXVhbCh2YWx1ZSwgbV9vdXQubG9hZDY0KG1fb3V0LmFic29sdXRlKHNldC0+YWRkcmVzc09m
SW5mZXJyZWRWYWx1ZSgpKSkpLAotICAgICAgICAgICAgdW5zdXJlKGNvbnRpbnVhdGlvbiksIHVu
c3VyZShub3RpZnlTbG93KSk7Ci0KLSAgICAgICAgbV9vdXQuYXBwZW5kVG8obm90aWZ5U2xvdywg
Y29udGludWF0aW9uKTsKKyAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBl
bmRUbyhpc05vdEludmFsaWRhdGVkLCBjb250aW51YXRpb24pOwogCi0gICAgICAgIHZtQ2FsbCht
X291dC5vcGVyYXRpb24ob3BlcmF0aW9uTm90aWZ5V3JpdGUpLCBtX2NhbGxGcmFtZSwgbV9vdXQu
Y29uc3RJbnRQdHIoc2V0KSwgdmFsdWUpOworICAgICAgICB2bUNhbGwobV9vdXQub3BlcmF0aW9u
KG9wZXJhdGlvbk5vdGlmeVdyaXRlKSwgbV9jYWxsRnJhbWUsIG1fb3V0LmNvbnN0SW50UHRyKHNl
dCkpOwogICAgICAgICBtX291dC5qdW1wKGNvbnRpbnVhdGlvbik7CiAgICAgICAgIAogICAgICAg
ICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24sIGxhc3ROZXh0KTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAkocmV2aXNp
b24gMTgyNDk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJl
dGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODksNiArODksNDcgQEAgdXNpbmcgbmFtZXNwYWNl
IHN0ZDsKIAogbmFtZXNwYWNlIEpTQyB7CiAKK1N0cmluZyBTdGFja0ZyYW1lOjpmcmllbmRseVNv
dXJjZVVSTCgpIGNvbnN0Cit7CisgICAgU3RyaW5nIHRyYWNlTGluZTsKKyAgICAKKyAgICBzd2l0
Y2ggKGNvZGVUeXBlKSB7CisgICAgY2FzZSBTdGFja0ZyYW1lRXZhbENvZGU6CisgICAgY2FzZSBT
dGFja0ZyYW1lRnVuY3Rpb25Db2RlOgorICAgIGNhc2UgU3RhY2tGcmFtZUdsb2JhbENvZGU6Cisg
ICAgICAgIGlmICghc291cmNlVVJMLmlzRW1wdHkoKSkKKyAgICAgICAgICAgIHRyYWNlTGluZSA9
IHNvdXJjZVVSTC5pbXBsKCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgU3RhY2tGcmFtZU5h
dGl2ZUNvZGU6CisgICAgICAgIHRyYWNlTGluZSA9ICJbbmF0aXZlIGNvZGVdIjsKKyAgICAgICAg
YnJlYWs7CisgICAgfQorICAgIHJldHVybiB0cmFjZUxpbmUuaXNOdWxsKCkgPyBlbXB0eVN0cmlu
ZygpIDogdHJhY2VMaW5lOworfQorCitTdHJpbmcgU3RhY2tGcmFtZTo6ZnJpZW5kbHlGdW5jdGlv
bk5hbWUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpIGNvbnN0Cit7CisgICAgU3RyaW5nIHRyYWNlTGlu
ZTsKKyAgICBKU09iamVjdCogc3RhY2tGcmFtZUNhbGxlZSA9IGNhbGxlZS5nZXQoKTsKKworICAg
IHN3aXRjaCAoY29kZVR5cGUpIHsKKyAgICBjYXNlIFN0YWNrRnJhbWVFdmFsQ29kZToKKyAgICAg
ICAgdHJhY2VMaW5lID0gImV2YWwgY29kZSI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgU3Rh
Y2tGcmFtZU5hdGl2ZUNvZGU6CisgICAgICAgIGlmIChjYWxsZWUpCisgICAgICAgICAgICB0cmFj
ZUxpbmUgPSBnZXRDYWxjdWxhdGVkRGlzcGxheU5hbWUoY2FsbEZyYW1lLCBzdGFja0ZyYW1lQ2Fs
bGVlKS5pbXBsKCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgU3RhY2tGcmFtZUZ1bmN0aW9u
Q29kZToKKyAgICAgICAgdHJhY2VMaW5lID0gZ2V0Q2FsY3VsYXRlZERpc3BsYXlOYW1lKGNhbGxG
cmFtZSwgc3RhY2tGcmFtZUNhbGxlZSkuaW1wbCgpOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IFN0YWNrRnJhbWVHbG9iYWxDb2RlOgorICAgICAgICB0cmFjZUxpbmUgPSAiZ2xvYmFsIGNvZGUi
OworICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIHRyYWNlTGluZS5pc051bGwoKSA/
IGVtcHR5U3RyaW5nKCkgOiB0cmFjZUxpbmU7Cit9CisKIEpTVmFsdWUgZXZhbChDYWxsRnJhbWUq
IGNhbGxGcmFtZSkKIHsKICAgICBpZiAoIWNhbGxGcmFtZS0+YXJndW1lbnRDb3VudCgpKQpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmgJ
KHJldmlzaW9uIDE4MjQ5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9J
bnRlcnByZXRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC05MCw0NSArOTAsOCBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgdW5zaWduZWQgYnl0ZWNvZGVPZmZzZXQ7CiAgICAgICAgIFN0cmluZyBz
b3VyY2VVUkw7CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIFN0cmluZyB0b1N0cmluZyhDYWxs
RnJhbWUqKTsKLSAgICAgICAgU3RyaW5nIGZyaWVuZGx5U291cmNlVVJMKCkgY29uc3QKLSAgICAg
ICAgewotICAgICAgICAgICAgU3RyaW5nIHRyYWNlTGluZTsKLQotICAgICAgICAgICAgc3dpdGNo
IChjb2RlVHlwZSkgewotICAgICAgICAgICAgY2FzZSBTdGFja0ZyYW1lRXZhbENvZGU6Ci0gICAg
ICAgICAgICBjYXNlIFN0YWNrRnJhbWVGdW5jdGlvbkNvZGU6Ci0gICAgICAgICAgICBjYXNlIFN0
YWNrRnJhbWVHbG9iYWxDb2RlOgotICAgICAgICAgICAgICAgIGlmICghc291cmNlVVJMLmlzRW1w
dHkoKSkKLSAgICAgICAgICAgICAgICAgICAgdHJhY2VMaW5lID0gc291cmNlVVJMLmltcGwoKTsK
LSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgU3RhY2tGcmFtZU5hdGl2
ZUNvZGU6Ci0gICAgICAgICAgICAgICAgdHJhY2VMaW5lID0gIltuYXRpdmUgY29kZV0iOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHRy
YWNlTGluZS5pc051bGwoKSA/IGVtcHR5U3RyaW5nKCkgOiB0cmFjZUxpbmU7Ci0gICAgICAgIH0K
LSAgICAgICAgU3RyaW5nIGZyaWVuZGx5RnVuY3Rpb25OYW1lKENhbGxGcmFtZSogY2FsbEZyYW1l
KSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICBTdHJpbmcgdHJhY2VMaW5lOwotICAgICAg
ICAgICAgSlNPYmplY3QqIHN0YWNrRnJhbWVDYWxsZWUgPSBjYWxsZWUuZ2V0KCk7Ci0KLSAgICAg
ICAgICAgIHN3aXRjaCAoY29kZVR5cGUpIHsKLSAgICAgICAgICAgIGNhc2UgU3RhY2tGcmFtZUV2
YWxDb2RlOgotICAgICAgICAgICAgICAgIHRyYWNlTGluZSA9ICJldmFsIGNvZGUiOwotICAgICAg
ICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBTdGFja0ZyYW1lTmF0aXZlQ29kZToK
LSAgICAgICAgICAgICAgICBpZiAoY2FsbGVlKQotICAgICAgICAgICAgICAgICAgICB0cmFjZUxp
bmUgPSBnZXRDYWxjdWxhdGVkRGlzcGxheU5hbWUoY2FsbEZyYW1lLCBzdGFja0ZyYW1lQ2FsbGVl
KS5pbXBsKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFN0YWNr
RnJhbWVGdW5jdGlvbkNvZGU6Ci0gICAgICAgICAgICAgICAgdHJhY2VMaW5lID0gZ2V0Q2FsY3Vs
YXRlZERpc3BsYXlOYW1lKGNhbGxGcmFtZSwgc3RhY2tGcmFtZUNhbGxlZSkuaW1wbCgpOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBTdGFja0ZyYW1lR2xvYmFsQ29k
ZToKLSAgICAgICAgICAgICAgICB0cmFjZUxpbmUgPSAiZ2xvYmFsIGNvZGUiOwotICAgICAgICAg
ICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgcmV0dXJuIHRyYWNlTGlu
ZS5pc051bGwoKSA/IGVtcHR5U3RyaW5nKCkgOiB0cmFjZUxpbmU7Ci0gICAgICAgIH0KKyAgICAg
ICAgU3RyaW5nIGZyaWVuZGx5U291cmNlVVJMKCkgY29uc3Q7CisgICAgICAgIFN0cmluZyBmcmll
bmRseUZ1bmN0aW9uTmFtZShDYWxsRnJhbWUqKSBjb25zdDsKICAgICAgICAgSlNfRVhQT1JUX1BS
SVZBVEUgdm9pZCBjb21wdXRlTGluZUFuZENvbHVtbih1bnNpZ25lZCYgbGluZSwgdW5zaWduZWQm
IGNvbHVtbik7CiAKICAgICBwcml2YXRlOgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNw
cAkocmV2aXNpb24gMTgyNDk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMDUsNiArMTA1LDE0IEBAIHZvaWQgSklUOjplbWl0RW50ZXJP
cHRpbWl6YXRpb25DaGVjaygpCiB9CiAjZW5kaWYKIAordm9pZCBKSVQ6OmVtaXROb3RpZnlXcml0
ZShXYXRjaHBvaW50U2V0KiBzZXQpCit7CisgICAgaWYgKCFzZXQgfHwgc2V0LT5zdGF0ZSgpID09
IElzSW52YWxpZGF0ZWQpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBhZGRTbG93Q2FzZShi
cmFuY2g4KE5vdEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3Moc2V0LT5hZGRyZXNzT2ZTdGF0ZSgpKSwg
VHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7Cit9CisKIHZvaWQgSklUOjphc3NlcnRTdGFj
a1BvaW50ZXJPZmZzZXQoKQogewogICAgIGlmIChBU1NFUlRfRElTQUJMRUQpCkBAIC0xODksNyAr
MTk3LDYgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlTWFpblBhc3MoKQogICAgICAgICBERUZJ
TkVfU0xPV19PUChpc19vYmplY3Rfb3JfbnVsbCkKICAgICAgICAgREVGSU5FX1NMT1dfT1AodHlw
ZW9mKQogCi0gICAgICAgIERFRklORV9PUChvcF90b3VjaF9lbnRyeSkKICAgICAgICAgREVGSU5F
X09QKG9wX2FkZCkKICAgICAgICAgREVGSU5FX09QKG9wX2JpdGFuZCkKICAgICAgICAgREVGSU5F
X09QKG9wX2JpdG9yKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCShyZXZpc2lvbiAxODI0
OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBA
IC00NTcsNyArNDU3LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIAogICAgICAgICB2b2lk
IGFzc2VydFN0YWNrUG9pbnRlck9mZnNldCgpOwogCi0gICAgICAgIHZvaWQgZW1pdF9vcF90b3Vj
aF9lbnRyeShJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfYWRkKEluc3RydWN0
aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9iaXRhbmQoSW5zdHJ1Y3Rpb24qKTsKICAgICAg
ICAgdm9pZCBlbWl0X29wX2JpdG9yKEluc3RydWN0aW9uKik7CkBAIC02NDAsMTMgKzYzOSw5IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGVtaXRHZXRHbG9iYWxWYXIodWludHB0cl90
IG9wZXJhbmQpOwogICAgICAgICB2b2lkIGVtaXRHZXRDbG9zdXJlVmFyKGludCBzY29wZSwgdWlu
dHB0cl90IG9wZXJhbmQpOwogICAgICAgICB2b2lkIGVtaXRQdXRHbG9iYWxQcm9wZXJ0eSh1aW50
cHRyX3QqIG9wZXJhbmRTbG90LCBpbnQgdmFsdWUpOwotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAg
ICAgIHZvaWQgZW1pdE5vdGlmeVdyaXRlKFJlZ2lzdGVySUQgdmFsdWUsIFJlZ2lzdGVySUQgc2Ny
YXRjaCwgVmFyaWFibGVXYXRjaHBvaW50U2V0Kik7Ci0jZWxzZQotICAgICAgICB2b2lkIGVtaXRO
b3RpZnlXcml0ZShSZWdpc3RlcklEIHRhZywgUmVnaXN0ZXJJRCBwYXlsb2FkLCBSZWdpc3RlcklE
IHNjcmF0Y2gsIFZhcmlhYmxlV2F0Y2hwb2ludFNldCopOwotI2VuZGlmCi0gICAgICAgIHZvaWQg
ZW1pdFB1dEdsb2JhbFZhcih1aW50cHRyX3Qgb3BlcmFuZCwgaW50IHZhbHVlLCBWYXJpYWJsZVdh
dGNocG9pbnRTZXQqKTsKLSAgICAgICAgdm9pZCBlbWl0UHV0Q2xvc3VyZVZhcihpbnQgc2NvcGUs
IHVpbnRwdHJfdCBvcGVyYW5kLCBpbnQgdmFsdWUsIFZhcmlhYmxlV2F0Y2hwb2ludFNldCopOwor
ICAgICAgICB2b2lkIGVtaXROb3RpZnlXcml0ZShXYXRjaHBvaW50U2V0Kik7CisgICAgICAgIHZv
aWQgZW1pdFB1dEdsb2JhbFZhcih1aW50cHRyX3Qgb3BlcmFuZCwgaW50IHZhbHVlLCBXYXRjaHBv
aW50U2V0Kik7CisgICAgICAgIHZvaWQgZW1pdFB1dENsb3N1cmVWYXIoaW50IHNjb3BlLCB1aW50
cHRyX3Qgb3BlcmFuZCwgaW50IHZhbHVlLCBXYXRjaHBvaW50U2V0Kik7CiAKICAgICAgICAgdm9p
ZCBlbWl0SW5pdFJlZ2lzdGVyKGludCBkc3QpOwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVE9wY29kZXMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHJldmlzaW9uIDE4MjQ5OCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg3OSwxNSArODc5
LDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3RvX251bWJlcihJbnN0cnVjdAogCiAjZW5kaWYg
Ly8gVVNFKEpTVkFMVUU2NCkKIAotdm9pZCBKSVQ6OmVtaXRfb3BfdG91Y2hfZW50cnkoSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsKLSAgICBpZiAobV9jb2RlQmxvY2stPnN5bWJv
bFRhYmxlKCktPm1fZnVuY3Rpb25FbnRlcmVkT25jZS5oYXNCZWVuSW52YWxpZGF0ZWQoKSkKLSAg
ICAgICAgcmV0dXJuOwotICAgIAotICAgIEpJVFNsb3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhp
cywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3BhdGhfdG91Y2hfZW50cnkpOwotICAgIHNsb3dQ
YXRoQ2FsbC5jYWxsKCk7Ci19Ci0KIHZvaWQgSklUOjplbWl0X29wX2xvb3BfaGludChJbnN0cnVj
dGlvbiopCiB7CiAgICAgLy8gRW1pdCB0aGUgSklUIG9wdGltaXphdGlvbiBjaGVjazogCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9u
IDE4MjQ5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTk1Miw2ICs5NTIsMTQgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25OZQogICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNGdW5jdGlv
bjo6Y3JlYXRlKHZtLCBzdGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihmdW5jdGlvbkV4
ZWN1dGFibGUpLCBzY29wZSkpOwogfQogCitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9w
ZXJhdGlvbk5ld0Z1bmN0aW9uV2l0aEludmFsaWRhdGVkUmVhbGxvY2F0aW9uV2F0Y2hwb2ludChF
eGVjU3RhdGUqIGV4ZWMsIEpTU2NvcGUqIHNjb3BlLCBKU0NlbGwqIGZ1bmN0aW9uRXhlY3V0YWJs
ZSkKK3sKKyAgICBBU1NFUlQoZnVuY3Rpb25FeGVjdXRhYmxlLT5pbmhlcml0cyhGdW5jdGlvbkV4
ZWN1dGFibGU6OmluZm8oKSkpOworICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CisgICAgTmF0aXZl
Q2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOworICAgIHJldHVybiBKU1ZhbHVlOjpl
bmNvZGUoSlNGdW5jdGlvbjo6Y3JlYXRlV2l0aEludmFsaWRhdGVkUmVhbGxvY2F0aW9uV2F0Y2hw
b2ludCh2bSwgc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oZnVuY3Rpb25FeGVjdXRh
YmxlKSwgc2NvcGUpKTsKK30KKwogSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld09i
amVjdChFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZSogc3RydWN0dXJlKQogewogICAgIFZNKiB2
bSA9ICZleGVjLT52bSgpOwpAQCAtMTcyMiw4ICsxNzMwLDggQEAgdm9pZCBKSVRfT1BFUkFUSU9O
IG9wZXJhdGlvblB1dFRvU2NvcGUoRQogICAgIGlmIChtb2RlQW5kVHlwZS50eXBlKCkgPT0gTG9j
YWxDbG9zdXJlVmFyKSB7CiAgICAgICAgIEpTTGV4aWNhbEVudmlyb25tZW50KiBlbnZpcm9ubWVu
dCA9IGpzQ2FzdDxKU0xleGljYWxFbnZpcm9ubWVudCo+KHNjb3BlKTsKICAgICAgICAgZW52aXJv
bm1lbnQtPnZhcmlhYmxlQXQoU2NvcGVPZmZzZXQocGNbNl0udS5vcGVyYW5kKSkuc2V0KHZtLCBl
bnZpcm9ubWVudCwgdmFsdWUpOwotICAgICAgICBpZiAoVmFyaWFibGVXYXRjaHBvaW50U2V0KiBz
ZXQgPSBwY1s1XS51LndhdGNocG9pbnRTZXQpCi0gICAgICAgICAgICBzZXQtPm5vdGlmeVdyaXRl
KHZtLCB2YWx1ZSwgIkV4ZWN1dGVkIG9wX3B1dF9zY29wZTxMb2NhbENsb3N1cmVWYXI+Iik7Cisg
ICAgICAgIGlmIChXYXRjaHBvaW50U2V0KiBzZXQgPSBwY1s1XS51LndhdGNocG9pbnRTZXQpCisg
ICAgICAgICAgICBzZXQtPnRvdWNoKCJFeGVjdXRlZCBvcF9wdXRfc2NvcGU8TG9jYWxDbG9zdXJl
VmFyPiIpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGlmIChtb2RlQW5kVHlwZS5tb2Rl
KCkgPT0gVGhyb3dJZk5vdEZvdW5kICYmICFzY29wZS0+aGFzUHJvcGVydHkoZXhlYywgaWRlbnQp
KSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAkocmV2
aXNpb24gMTgyNDk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25z
LmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3LDYgQEAKICNpbmNsdWRlICJQdXRLaW5kLmgi
CiAjaW5jbHVkZSAiU3BpbGxSZWdpc3RlcnNNb2RlLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlU3R1
YkluZm8uaCIKLSNpbmNsdWRlICJWYXJpYWJsZVdhdGNocG9pbnRTZXQuaCIKIAogCiBuYW1lc3Bh
Y2UgSlNDIHsKQEAgLTg1LDcgKzg0LDcgQEAgZXh0ZXJuICJDIiB7CiAgICAgU3ltdGFiOiBTeW1i
b2xUYWJsZSoKICAgICBWOiB2b2lkCiAgICAgVm06IFZNKgotICAgIFZ3czogVmFyaWFibGVXYXRj
aHBvaW50U2V0KgorICAgIFdzOiBXYXRjaHBvaW50U2V0KgogICAgIFo6IGludDMyX3QKICovCiAK
QEAgLTE5MSw3ICsxOTAsNyBAQCB0eXBlZGVmIHZvaWQgSklUX09QRVJBVElPTiAoKlZfSklUT3Bl
cmF0CiB0eXBlZGVmIHZvaWQgSklUX09QRVJBVElPTiAoKlZfSklUT3BlcmF0aW9uX0VQYykoRXhl
Y1N0YXRlKiwgSW5zdHJ1Y3Rpb24qKTsKIHR5cGVkZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgqVl9K
SVRPcGVyYXRpb25fRVBaSikoRXhlY1N0YXRlKiwgdm9pZCosIGludDMyX3QsIEVuY29kZWRKU1Zh
bHVlKTsKIHR5cGVkZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgqVl9KSVRPcGVyYXRpb25fRVNzaUpK
SSkoRXhlY1N0YXRlKiwgU3RydWN0dXJlU3R1YkluZm8qLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2Rl
ZEpTVmFsdWUsIFN0cmluZ0ltcGwqKTsKLXR5cGVkZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgqVl9K
SVRPcGVyYXRpb25fRVZ3c0opKEV4ZWNTdGF0ZSosIFZhcmlhYmxlV2F0Y2hwb2ludFNldCosIEVu
Y29kZWRKU1ZhbHVlKTsKK3R5cGVkZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgqVl9KSVRPcGVyYXRp
b25fRVdzKShFeGVjU3RhdGUqLCBXYXRjaHBvaW50U2V0Kik7CiB0eXBlZGVmIHZvaWQgSklUX09Q
RVJBVElPTiAoKlZfSklUT3BlcmF0aW9uX0VaKShFeGVjU3RhdGUqLCBpbnQzMl90KTsKIHR5cGVk
ZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgqVl9KSVRPcGVyYXRpb25fRVpKKShFeGVjU3RhdGUqLCBp
bnQzMl90LCBFbmNvZGVkSlNWYWx1ZSk7CiB0eXBlZGVmIHZvaWQgSklUX09QRVJBVElPTiAoKlZf
SklUT3BlcmF0aW9uX0VaSlpaWikoRXhlY1N0YXRlKiwgaW50MzJfdCwgRW5jb2RlZEpTVmFsdWUs
IGludDMyX3QsIGludDMyX3QsIGludDMyX3QpOwpAQCAtMjc4LDYgKzI3Nyw3IEBAIEVuY29kZWRK
U1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmUKIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uTmV3QXJyYXlCdWZmZXJXaXRoUHJvZmlsZShFeGVjU3RhdGUqLCBBcnJh
eUFsbG9jYXRpb25Qcm9maWxlKiwgY29uc3QgSlNWYWx1ZSogdmFsdWVzLCBpbnQzMl90IHNpemUp
IFdURl9JTlRFUk5BTDsKIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3
QXJyYXlXaXRoU2l6ZUFuZFByb2ZpbGUoRXhlY1N0YXRlKiwgQXJyYXlBbGxvY2F0aW9uUHJvZmls
ZSosIEVuY29kZWRKU1ZhbHVlIHNpemUpIFdURl9JTlRFUk5BTDsKIEVuY29kZWRKU1ZhbHVlIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3RnVuY3Rpb24oRXhlY1N0YXRlKiwgSlNTY29wZSosIEpT
Q2VsbCopIFdURl9JTlRFUk5BTDsKK0VuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uTmV3RnVuY3Rpb25XaXRoSW52YWxpZGF0ZWRSZWFsbG9jYXRpb25XYXRjaHBvaW50KEV4ZWNT
dGF0ZSosIEpTU2NvcGUqLCBKU0NlbGwqKSBXVEZfSU5URVJOQUw7CiBKU0NlbGwqIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uTmV3T2JqZWN0KEV4ZWNTdGF0ZSosIFN0cnVjdHVyZSopIFdURl9JTlRF
Uk5BTDsKIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3UmVnZXhwKEV4
ZWNTdGF0ZSosIHZvaWQqKSBXVEZfSU5URVJOQUw7CiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uSGFuZGxlV2F0Y2hkb2dUaW1lcihFeGVjU3RhdGUqKSBXVEZfSU5URVJOQUw7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82
NC5jcHAJKHJldmlzaW9uIDE4MjQ5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
UHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc1MCwyNyArNzUwLDEw
IEBAIHZvaWQgSklUOjplbWl0UHV0R2xvYmFsUHJvcGVydHkodWludHB0cl8KICAgICBzdG9yZTMy
KHJlZ1QyLCBCYXNlSW5kZXgocmVnVDAsIHJlZ1QxLCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxp
bmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkgKyBPQkpFQ1RfT0ZGU0VUT0Yo
RW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKSk7CiB9CiAKLXZvaWQgSklU
OjplbWl0Tm90aWZ5V3JpdGUoUmVnaXN0ZXJJRCB0YWcsIFJlZ2lzdGVySUQgcGF5bG9hZCwgUmVn
aXN0ZXJJRCBzY3JhdGNoLCBWYXJpYWJsZVdhdGNocG9pbnRTZXQqIHNldCkKLXsKLSAgICBpZiAo
IXNldCB8fCBzZXQtPnN0YXRlKCkgPT0gSXNJbnZhbGlkYXRlZCkKLSAgICAgICAgcmV0dXJuOwot
ICAgIAotICAgIGxvYWQ4KHNldC0+YWRkcmVzc09mU3RhdGUoKSwgc2NyYXRjaCk7Ci0gICAgSnVt
cCBpc0RvbmUgPSBicmFuY2gzMihFcXVhbCwgc2NyYXRjaCwgVHJ1c3RlZEltbTMyKElzSW52YWxp
ZGF0ZWQpKTsKLQotICAgIEp1bXBMaXN0IG5vdGlmeVNsb3cgPSBicmFuY2gzMigKLSAgICAgICAg
Tm90RXF1YWwsIEFic29sdXRlQWRkcmVzcyhzZXQtPmFkZHJlc3NPZkluZmVycmVkVmFsdWUoKS0+
cGF5bG9hZFBvaW50ZXIoKSksIHBheWxvYWQpOwotICAgIG5vdGlmeVNsb3cuYXBwZW5kKGJyYW5j
aDMyKAotICAgICAgICBOb3RFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKHNldC0+YWRkcmVzc09mSW5m
ZXJyZWRWYWx1ZSgpLT50YWdQb2ludGVyKCkpLCB0YWcpKTsKLSAgICBhZGRTbG93Q2FzZShub3Rp
ZnlTbG93KTsKLQotICAgIGlzRG9uZS5saW5rKHRoaXMpOwotfQotCiB2b2lkIEpJVDo6ZW1pdFB1
dEdsb2JhbFZhcih1aW50cHRyX3Qgb3BlcmFuZCwgaW50IHZhbHVlLCBWYXJpYWJsZVdhdGNocG9p
bnRTZXQqIHNldCkKIHsKICAgICBlbWl0TG9hZCh2YWx1ZSwgcmVnVDEsIHJlZ1QwKTsKLSAgICBl
bWl0Tm90aWZ5V3JpdGUocmVnVDEsIHJlZ1QwLCByZWdUMiwgc2V0KTsKKyAgICBlbWl0Tm90aWZ5
V3JpdGUoc2V0KTsKICAgICBzdG9yZTMyKHJlZ1QxLCByZWludGVycHJldF9jYXN0PGNoYXIqPihv
cGVyYW5kKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMu
dGFnKSk7CiAgICAgc3RvcmUzMihyZWdUMCwgcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4ob3BlcmFu
ZCkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxv
YWQpKTsKIH0KQEAgLTc3OSw3ICs3NjIsNyBAQCB2b2lkIEpJVDo6ZW1pdFB1dENsb3N1cmVWYXIo
aW50IHNjb3BlLCB1CiB7CiAgICAgZW1pdExvYWQodmFsdWUsIHJlZ1QzLCByZWdUMik7CiAgICAg
ZW1pdExvYWQoc2NvcGUsIHJlZ1QxLCByZWdUMCk7Ci0gICAgZW1pdE5vdGlmeVdyaXRlKHJlZ1Qz
LCByZWdUMiwgcmVnVDQsIHNldCk7CisgICAgZW1pdE5vdGlmeVdyaXRlKHNldCk7CiAgICAgc3Rv
cmUzMihyZWdUMywgQWRkcmVzcyhyZWdUMCwgSlNFbnZpcm9ubWVudFJlY29yZDo6b2Zmc2V0T2ZW
YXJpYWJsZXMoKSArIG9wZXJhbmQgKiBzaXplb2YoUmVnaXN0ZXIpICsgVGFnT2Zmc2V0KSk7CiAg
ICAgc3RvcmUzMihyZWdUMiwgQWRkcmVzcyhyZWdUMCwgSlNFbnZpcm9ubWVudFJlY29yZDo6b2Zm
c2V0T2ZWYXJpYWJsZXMoKSArIG9wZXJhbmQgKiBzaXplb2YoUmVnaXN0ZXIpICsgUGF5bG9hZE9m
ZnNldCkpOwogfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFj
Y2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9w
ZXJ0eUFjY2Vzcy5jcHAJKHJldmlzaW9uIDE4MjQ5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MjgsMjkgKzcy
OCwxOCBAQCB2b2lkIEpJVDo6ZW1pdFB1dEdsb2JhbFByb3BlcnR5KHVpbnRwdHJfCiAgICAgc3Rv
cmVQdHIocmVnVDIsIEJhc2VJbmRleChyZWdUMCwgcmVnVDEsIFRpbWVzRWlnaHQsIChmaXJzdE91
dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29kZWRKU1ZhbHVlKSkpOwogfQogCi12b2lk
IEpJVDo6ZW1pdE5vdGlmeVdyaXRlKFJlZ2lzdGVySUQgdmFsdWUsIFJlZ2lzdGVySUQgc2NyYXRj
aCwgVmFyaWFibGVXYXRjaHBvaW50U2V0KiBzZXQpCi17Ci0gICAgaWYgKCFzZXQgfHwgc2V0LT5z
dGF0ZSgpID09IElzSW52YWxpZGF0ZWQpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBsb2Fk
OChzZXQtPmFkZHJlc3NPZlN0YXRlKCksIHNjcmF0Y2gpOwotICAgIEp1bXAgaXNEb25lID0gYnJh
bmNoMzIoRXF1YWwsIHNjcmF0Y2gsIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSk7Ci0gICAg
YWRkU2xvd0Nhc2UoYnJhbmNoNjQoTm90RXF1YWwsIEFic29sdXRlQWRkcmVzcyhzZXQtPmFkZHJl
c3NPZkluZmVycmVkVmFsdWUoKSksIHZhbHVlKSk7Ci0gICAgaXNEb25lLmxpbmsodGhpcyk7Ci19
Ci0KLXZvaWQgSklUOjplbWl0UHV0R2xvYmFsVmFyKHVpbnRwdHJfdCBvcGVyYW5kLCBpbnQgdmFs
dWUsIFZhcmlhYmxlV2F0Y2hwb2ludFNldCogc2V0KQordm9pZCBKSVQ6OmVtaXRQdXRHbG9iYWxW
YXIodWludHB0cl90IG9wZXJhbmQsIGludCB2YWx1ZSwgV2F0Y2hwb2ludFNldCogc2V0KQogewog
ICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QwKTsKLSAgICBlbWl0Tm90aWZ5
V3JpdGUocmVnVDAsIHJlZ1QxLCBzZXQpOworICAgIGVtaXROb3RpZnlXcml0ZShzZXQpOwogICAg
IHN0b3JlUHRyKHJlZ1QwLCByZWludGVycHJldF9jYXN0PHZvaWQqPihvcGVyYW5kKSk7CiB9CiAK
LXZvaWQgSklUOjplbWl0UHV0Q2xvc3VyZVZhcihpbnQgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5k
LCBpbnQgdmFsdWUsIFZhcmlhYmxlV2F0Y2hwb2ludFNldCogc2V0KQordm9pZCBKSVQ6OmVtaXRQ
dXRDbG9zdXJlVmFyKGludCBzY29wZSwgdWludHB0cl90IG9wZXJhbmQsIGludCB2YWx1ZSwgV2F0
Y2hwb2ludFNldCogc2V0KQogewogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJl
Z1QxKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHNjb3BlLCByZWdUMCk7Ci0gICAgZW1p
dE5vdGlmeVdyaXRlKHJlZ1QxLCByZWdUMiwgc2V0KTsKKyAgICBlbWl0Tm90aWZ5V3JpdGUoc2V0
KTsKICAgICBzdG9yZVB0cihyZWdUMSwgQWRkcmVzcyhyZWdUMCwgSlNFbnZpcm9ubWVudFJlY29y
ZDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSArIG9wZXJhbmQgKiBzaXplb2YoUmVnaXN0ZXIpKSk7CiB9
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhz
LmNwcAkocmV2aXNpb24gMTgyNDk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xM
SW50U2xvd1BhdGhzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTQwMiw4ICsxNDAyLDEyIEBAIExM
SU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9wdXRfdG9fc2MKICAgICBpZiAobW9kZUFuZFR5
cGUudHlwZSgpID09IExvY2FsQ2xvc3VyZVZhcikgewogICAgICAgICBKU0xleGljYWxFbnZpcm9u
bWVudCogZW52aXJvbm1lbnQgPSBqc0Nhc3Q8SlNMZXhpY2FsRW52aXJvbm1lbnQqPihzY29wZSk7
CiAgICAgICAgIGVudmlyb25tZW50LT52YXJpYWJsZUF0KFNjb3BlT2Zmc2V0KHBjWzZdLnUub3Bl
cmFuZCkpLnNldCh2bSwgZW52aXJvbm1lbnQsIHZhbHVlKTsKLSAgICAgICAgaWYgKFZhcmlhYmxl
V2F0Y2hwb2ludFNldCogc2V0ID0gcGNbNV0udS53YXRjaHBvaW50U2V0KQotICAgICAgICAgICAg
c2V0LT5ub3RpZnlXcml0ZSh2bSwgdmFsdWUsICJFeGVjdXRlZCBvcF9wdXRfc2NvcGU8TG9jYWxD
bG9zdXJlVmFyPiIpOworICAgICAgICAKKyAgICAgICAgLy8gSGF2ZSB0byBkbyB0aGlzICphZnRl
ciogdGhlIHdyaXRlLCBiZWNhdXNlIGlmIHRoaXMgcHV0cyB0aGUgc2V0IGludG8gSXNXYXRjaGVk
LCB0aGVuIHdlIG5lZWQKKyAgICAgICAgLy8gdG8gaGF2ZSBhbHJlYWR5IGNoYW5nZWQgdGhlIHZh
bHVlIG9mIHRoZSB2YXJpYWJsZS4gT3RoZXJ3aXNlIHdlIG1pZ2h0IHdhdGNoIGFuZCBjb25zdGFu
dC1mb2xkCisgICAgICAgIC8vIHRvIHRoZSBVbmRlZmluZWQgdmFsdWUgZnJvbSBiZWZvcmUgdGhl
IGFzc2lnbm1lbnQuCisgICAgICAgIGlmIChXYXRjaHBvaW50U2V0KiBzZXQgPSBwY1s1XS51Lndh
dGNocG9pbnRTZXQpCisgICAgICAgICAgICBzZXQtPnRvdWNoKCJFeGVjdXRlZCBvcF9wdXRfc2Nv
cGU8TG9jYWxDbG9zdXJlVmFyPiIpOwogICAgICAgICBMTElOVF9FTkQoKTsKICAgICB9CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQu
YXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbElu
dGVycHJldGVyMzJfNjQuYXNtCShyZXZpc2lvbiAxODI0OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQkod29ya2luZyBjb3B5KQpA
QCAtODA1LDE0ICs4MDUsNiBAQCBfbGxpbnRfb3BfbW92OgogICAgIGRpc3BhdGNoKDMpCiAKIAot
bWFjcm8gbm90aWZ5V3JpdGUoc2V0LCB2YWx1ZVRhZywgdmFsdWVQYXlsb2FkLCBzY3JhdGNoLCBz
bG93KQotICAgIGxvYWRiIFZhcmlhYmxlV2F0Y2hwb2ludFNldDo6bV9zdGF0ZVtzZXRdLCBzY3Jh
dGNoCi0gICAgYmllcSBzY3JhdGNoLCBJc0ludmFsaWRhdGVkLCAuZG9uZQotICAgIGJpbmVxIHZh
bHVlUGF5bG9hZCwgVmFyaWFibGVXYXRjaHBvaW50U2V0OjptX2luZmVycmVkVmFsdWUgKyBQYXls
b2FkT2Zmc2V0W3NldF0sIHNsb3cKLSAgICBiaW5lcSB2YWx1ZVRhZywgVmFyaWFibGVXYXRjaHBv
aW50U2V0OjptX2luZmVycmVkVmFsdWUgKyBUYWdPZmZzZXRbc2V0XSwgc2xvdwotLmRvbmU6Ci1l
bmQKLQogX2xsaW50X29wX25vdDoKICAgICB0cmFjZUV4ZWN1dGlvbigpCiAgICAgbG9hZGkgOFtQ
Q10sIHQwCkBAIC0yMjA0LDcgKzIxOTYsNyBAQCBtYWNybyBwdXRHbG9iYWxWYXIoKQogICAgIGxv
YWRpc0Zyb21JbnN0cnVjdGlvbigzLCB0MCkKICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHQw
LCB0MSwgdDIpCiAgICAgbG9hZHBGcm9tSW5zdHJ1Y3Rpb24oNSwgdDMpCi0gICAgbm90aWZ5V3Jp
dGUodDMsIHQxLCB0MiwgdDAsIC5wRHluYW1pYykKKyAgICBub3RpZnlXcml0ZSh0MywgLnBEeW5h
bWljKQogICAgIGxvYWRwRnJvbUluc3RydWN0aW9uKDYsIHQwKQogICAgIHN0b3JlaSB0MSwgVGFn
T2Zmc2V0W3QwXQogICAgIHN0b3JlaSB0MiwgUGF5bG9hZE9mZnNldFt0MF0KQEAgLTIyMjMsNyAr
MjIxNSw3IEBAIG1hY3JvIHB1dExvY2FsQ2xvc3VyZVZhcigpCiAgICAgbG9hZENvbnN0YW50T3JW
YXJpYWJsZSh0MSwgdDIsIHQzKQogICAgIGxvYWRwRnJvbUluc3RydWN0aW9uKDUsIHQ0KQogICAg
IGJ0cHogdDQsIC5ub1ZhcmlhYmxlV2F0Y2hwb2ludFNldAotICAgIG5vdGlmeVdyaXRlKHQ0LCB0
MiwgdDMsIHQxLCAucER5bmFtaWMpCisgICAgbm90aWZ5V3JpdGUodDQsIC5wRHluYW1pYykKIC5u
b1ZhcmlhYmxlV2F0Y2hwb2ludFNldDoKICAgICBsb2FkaXNGcm9tSW5zdHJ1Y3Rpb24oNiwgdDEp
CiAgICAgc3RvcmVpIHQyLCBKU0Vudmlyb25tZW50UmVjb3JkX3ZhcmlhYmxlcyArIFRhZ09mZnNl
dFt0MCwgdDEsIDhdCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJ
bnRlcnByZXRlcjY0LmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQkocmV2aXNpb24gMTgyNDk4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHdvcmtpbmcg
Y29weSkKQEAgLTY5MCwxMyArNjkwLDYgQEAgX2xsaW50X29wX21vdjoKICAgICBkaXNwYXRjaCgz
KQogCiAKLW1hY3JvIG5vdGlmeVdyaXRlKHNldCwgdmFsdWUsIHNjcmF0Y2gsIHNsb3cpCi0gICAg
bG9hZGIgVmFyaWFibGVXYXRjaHBvaW50U2V0OjptX3N0YXRlW3NldF0sIHNjcmF0Y2gKLSAgICBi
aWVxIHNjcmF0Y2gsIElzSW52YWxpZGF0ZWQsIC5kb25lCi0gICAgYnFuZXEgdmFsdWUsIFZhcmlh
YmxlV2F0Y2hwb2ludFNldDo6bV9pbmZlcnJlZFZhbHVlW3NldF0sIHNsb3cKLS5kb25lOgotZW5k
Ci0KIF9sbGludF9vcF9ub3Q6CiAgICAgdHJhY2VFeGVjdXRpb24oKQogICAgIGxvYWRpc0Zyb21J
bnN0cnVjdGlvbigyLCB0MCkKQEAgLTIwNjksOCArMjA2Miw4IEBAIG1hY3JvIHB1dEdsb2JhbFZh
cigpCiAgICAgbG9hZGlzRnJvbUluc3RydWN0aW9uKDMsIHQwKQogICAgIGxvYWRDb25zdGFudE9y
VmFyaWFibGUodDAsIHQxKQogICAgIGxvYWRwRnJvbUluc3RydWN0aW9uKDUsIHQyKQotICAgIG5v
dGlmeVdyaXRlKHQyLCB0MSwgdDAsIC5wRHluYW1pYykKICAgICBsb2FkcEZyb21JbnN0cnVjdGlv
big2LCB0MCkKKyAgICBub3RpZnlXcml0ZSh0MiwgLnBEeW5hbWljKQogICAgIHN0b3JlcSB0MSwg
W3QwXQogZW5kCiAKQEAgLTIwODYsNyArMjA3OSw3IEBAIG1hY3JvIHB1dExvY2FsQ2xvc3VyZVZh
cigpCiAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZSh0MSwgdDIpCiAgICAgbG9hZHBGcm9tSW5z
dHJ1Y3Rpb24oNSwgdDMpCiAgICAgYnRweiB0MywgLm5vVmFyaWFibGVXYXRjaHBvaW50U2V0Ci0g
ICAgbm90aWZ5V3JpdGUodDMsIHQyLCB0MSwgLnBEeW5hbWljKQorICAgIG5vdGlmeVdyaXRlKHQz
LCAucER5bmFtaWMpCiAubm9WYXJpYWJsZVdhdGNocG9pbnRTZXQ6CiAgICAgbG9hZGlzRnJvbUlu
c3RydWN0aW9uKDYsIHQxKQogICAgIHN0b3JlcSB0MiwgSlNFbnZpcm9ubWVudFJlY29yZF92YXJp
YWJsZXNbdDAsIHQxLCA4XQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xl
dmVsSW50ZXJwcmV0ZXIuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9s
bGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQkocmV2aXNpb24gMTgyNDk4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCSh3b3JraW5nIGNv
cHkpCkBAIC01MTksNiArNTE5LDEwIEBAIG1hY3JvIHNraXBJZklzUmVtZW1iZXJlZE9ySW5FZGVu
KGNlbGwsIHMKICAgICBjb250aW51YXRpb24oc2NyYXRjaDEpCiBlbmQKIAorbWFjcm8gbm90aWZ5
V3JpdGUoc2V0LCBzbG93KQorICAgIGJibmVxIFdhdGNocG9pbnRTZXQ6Om1fc3RhdGVbc2V0XSwg
SXNJbnZhbGlkYXRlZCwgc2xvdworZW5kCisKIG1hY3JvIGNoZWNrU3dpdGNoVG9KSVQoaW5jcmVt
ZW50LCBhY3Rpb24pCiAgICAgbG9hZHAgQ29kZUJsb2NrW2Nmcl0sIHQwCiAgICAgYmFkZGlzIGlu
Y3JlbWVudCwgQ29kZUJsb2NrOjptX2xsaW50RXhlY3V0ZUNvdW50ZXIgKyBCYXNlbGluZUV4ZWN1
dGlvbkNvdW50ZXI6Om1fY291bnRlclt0MF0sIC5jb250aW51ZQpAQCAtOTIwLDEyICs5MjQsNiBA
QCBlbmQKIAogCiAjIFZhbHVlLXJlcHJlc2VudGF0aW9uLWFnbm9zdGljIGNvZGUuCi1fbGxpbnRf
b3BfdG91Y2hfZW50cnk6Ci0gICAgdHJhY2VFeGVjdXRpb24oKQotICAgIGNhbGxTbG93UGF0aChf
c2xvd19wYXRoX3RvdWNoX2VudHJ5KQotICAgIGRpc3BhdGNoKDEpCi0KLQogX2xsaW50X29wX2Ny
ZWF0ZV9kaXJlY3RfYXJndW1lbnRzOgogICAgIHRyYWNlRXhlY3V0aW9uKCkKICAgICBjYWxsU2xv
d1BhdGgoX3Nsb3dfcGF0aF9jcmVhdGVfZGlyZWN0X2FyZ3VtZW50cykKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAkocmV2aXNp
b24gMTgyNDk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1Bh
dGhzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTUsNyArNTUsNiBAQAogI2luY2x1ZGUgIlNjb3Bl
ZEFyZ3VtZW50cy5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZVJhcmVEYXRhSW5saW5lcy5oIgogI2lu
Y2x1ZGUgIlR5cGVQcm9maWxlckxvZy5oIgotI2luY2x1ZGUgIlZhcmlhYmxlV2F0Y2hwb2ludFNl
dElubGluZXMuaCIKICNpbmNsdWRlIDx3dGYvU3RyaW5nUHJpbnRTdHJlYW0uaD4KIAogbmFtZXNw
YWNlIEpTQyB7CkBAIC0yMDYsMTMgKzIwNSw2IEBAIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9j
b25zdHJ1Y3RfYXJpdHkKICAgICBSRVRVUk5fVFdPKDAsIHNldHVwQXJpdHlDaGVja0RhdGEodm0s
IHNsb3RzVG9BZGQpKTsKIH0KIAotU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX3RvdWNoX2VudHJ5
KQotewotICAgIEJFR0lOKCk7Ci0gICAgZXhlYy0+Y29kZUJsb2NrKCktPnN5bWJvbFRhYmxlKCkt
Pm1fZnVuY3Rpb25FbnRlcmVkT25jZS50b3VjaCgiRnVuY3Rpb24gKHJlKWVudGVyZWQiKTsKLSAg
ICBFTkQoKTsKLX0KLQogU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2NyZWF0ZV9kaXJlY3RfYXJn
dW1lbnRzKQogewogICAgIEJFR0lOKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9Db21tb25TbG93UGF0aHMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuaAkocmV2aXNpb24gMTgyNDk4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmgJKHdvcmtpbmcgY29weSkK
QEAgLTE4MSw3ICsxODEsNiBAQCBTTE9XX1BBVEhfREVDTChuYW1lKSBXVEZfSU5URVJOQUwKICAg
ICAKIFNMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfY2FsbF9hcml0eUNoZWNrKTsKIFNM
T1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfY29uc3RydWN0X2FyaXR5Q2hlY2spOwotU0xP
V19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF90b3VjaF9lbnRyeSk7CiBTTE9XX1BBVEhfSElE
REVOX0RFQ0woc2xvd19wYXRoX2NyZWF0ZV9kaXJlY3RfYXJndW1lbnRzKTsKIFNMT1dfUEFUSF9I
SURERU5fREVDTChzbG93X3BhdGhfY3JlYXRlX3Njb3BlZF9hcmd1bWVudHMpOwogU0xPV19QQVRI
X0hJRERFTl9ERUNMKHNsb3dfcGF0aF9jcmVhdGVfb3V0X29mX2JhbmRfYXJndW1lbnRzKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCShyZXZp
c2lvbiAxODI0OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDE0LDYgKzQxNCwxMiBAQCBGdW5jdGlvbkV4ZWN1dGFi
bGU6OkZ1bmN0aW9uRXhlY3V0YWJsZShWCiAgICAgbV90eXBlUHJvZmlsaW5nRW5kT2Zmc2V0ID0g
dW5saW5rZWRFeGVjdXRhYmxlLT50eXBlUHJvZmlsaW5nRW5kT2Zmc2V0KCk7CiB9CiAKK3ZvaWQg
RnVuY3Rpb25FeGVjdXRhYmxlOjpmaW5pc2hDcmVhdGlvbihWTSYgdm0pCit7CisgICAgQmFzZTo6
ZmluaXNoQ3JlYXRpb24odm0pOworICAgIG1fc2luZ2xldG9uRnVuY3Rpb24uc2V0KHZtLCB0aGlz
LCBJbmZlcnJlZFZhbHVlOjpjcmVhdGUodm0pKTsKK30KKwogdm9pZCBGdW5jdGlvbkV4ZWN1dGFi
bGU6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQogewogICAgIHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhl
Y3V0YWJsZSo+KGNlbGwpLT5GdW5jdGlvbkV4ZWN1dGFibGU6On5GdW5jdGlvbkV4ZWN1dGFibGUo
KTsKQEAgLTU2Nyw2ICs1NzMsNyBAQCB2b2lkIEZ1bmN0aW9uRXhlY3V0YWJsZTo6dmlzaXRDaGls
ZHJlbihKCiAgICAgaWYgKHRoaXNPYmplY3QtPm1fY29kZUJsb2NrRm9yQ29uc3RydWN0KQogICAg
ICAgICB0aGlzT2JqZWN0LT5tX2NvZGVCbG9ja0ZvckNvbnN0cnVjdC0+dmlzaXRBZ2dyZWdhdGUo
dmlzaXRvcik7CiAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fdW5saW5rZWRFeGVj
dXRhYmxlKTsKKyAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc09iamVjdC0+bV9zaW5nbGV0b25GdW5j
dGlvbik7CiB9CiAKIFN5bWJvbFRhYmxlKiBGdW5jdGlvbkV4ZWN1dGFibGU6OnN5bWJvbFRhYmxl
KENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0V4ZWN1dGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9FeGVjdXRhYmxlLmgJKHJldmlzaW9uIDE4MjQ5OCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzMsOCAr
MzMsNyBAQAogI2luY2x1ZGUgIkNvbXBpbGF0aW9uUmVzdWx0LmgiCiAjaW5jbHVkZSAiREZHUGxh
bi5oIgogI2luY2x1ZGUgIkhhbmRsZXJJbmZvLmgiCi0jaW5jbHVkZSAiSlNGdW5jdGlvbi5oIgot
I2luY2x1ZGUgIkludGVycHJldGVyLmgiCisjaW5jbHVkZSAiSW5mZXJyZWRWYWx1ZS5oIgogI2lu
Y2x1ZGUgIkpJVENvZGUuaCIKICNpbmNsdWRlICJKU0dsb2JhbE9iamVjdC5oIgogI2luY2x1ZGUg
IlJlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZS5oIgpAQCAtNjQ5LDExICs2NDgsMTUgQEAgcHVibGlj
OgogICAgIHZvaWQgdW5saW5rQ2FsbHMoKTsKIAogICAgIHZvaWQgY2xlYXJDb2RlKCk7CisgICAg
CisgICAgSW5mZXJyZWRWYWx1ZSogc2luZ2xldG9uRnVuY3Rpb24oKSB7IHJldHVybiBtX3Npbmds
ZXRvbkZ1bmN0aW9uLmdldCgpOyB9CiAKIHByaXZhdGU6CiAgICAgRnVuY3Rpb25FeGVjdXRhYmxl
KAogICAgICAgICBWTSYsIGNvbnN0IFNvdXJjZUNvZGUmLCBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0
YWJsZSosIHVuc2lnbmVkIGZpcnN0TGluZSwgCiAgICAgICAgIHVuc2lnbmVkIGxhc3RMaW5lLCB1
bnNpZ25lZCBzdGFydENvbHVtbiwgdW5zaWduZWQgZW5kQ29sdW1uKTsKKyAgICAKKyAgICB2b2lk
IGZpbmlzaENyZWF0aW9uKFZNJik7CiAKICAgICBib29sIGlzQ29tcGlsaW5nKCkKICAgICB7CkBA
IC02NjcsMTIgKzY3MCwxMyBAQCBwcml2YXRlOgogICAgIH0KIAogICAgIGZyaWVuZCBjbGFzcyBT
Y3JpcHRFeGVjdXRhYmxlOwotCisgICAgCiAgICAgV3JpdGVCYXJyaWVyPFVubGlua2VkRnVuY3Rp
b25FeGVjdXRhYmxlPiBtX3VubGlua2VkRXhlY3V0YWJsZTsKICAgICBSZWZQdHI8RnVuY3Rpb25D
b2RlQmxvY2s+IG1fY29kZUJsb2NrRm9yQ2FsbDsKICAgICBSZWZQdHI8RnVuY3Rpb25Db2RlQmxv
Y2s+IG1fY29kZUJsb2NrRm9yQ29uc3RydWN0OwogICAgIFJlZlB0cjxUeXBlU2V0PiBtX3JldHVy
blN0YXRlbWVudFR5cGVTZXQ7CiAgICAgdW5zaWduZWQgbV9wYXJhbWV0ZXJzU3RhcnRPZmZzZXQ7
CisgICAgV3JpdGVCYXJyaWVyPEluZmVycmVkVmFsdWU+IG1fc2luZ2xldG9uRnVuY3Rpb247CiB9
OwogCiBpbmxpbmUgdm9pZCBFeGVjdXRhYmxlQmFzZTo6Y2xlYXJDb2RlVmlydHVhbChFeGVjdXRh
YmxlQmFzZSogZXhlY3V0YWJsZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0luZmVycmVkVmFsdWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0luZmVycmVkVmFsdWUuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRWYWx1ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwxMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkluZmVycmVkVmFsdWUuaCIKKworI2luY2x1
ZGUgIkpTQ0lubGluZXMuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NvbnN0IENsYXNzSW5mbyBJ
bmZlcnJlZFZhbHVlOjpzX2luZm8gPSB7ICJJbmZlcnJlZFZhbHVlIiwgMCwgMCwgQ1JFQVRFX01F
VEhPRF9UQUJMRShJbmZlcnJlZFZhbHVlKSB9OworCitJbmZlcnJlZFZhbHVlKiBJbmZlcnJlZFZh
bHVlOjpjcmVhdGUoVk0mIHZtKQoreworICAgIEluZmVycmVkVmFsdWUqIHJlc3VsdCA9IG5ldyAo
Tm90TnVsbCwgYWxsb2NhdGVDZWxsPEluZmVycmVkVmFsdWU+KHZtLmhlYXApKSBJbmZlcnJlZFZh
bHVlKHZtKTsKKyAgICByZXN1bHQtPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICByZXR1cm4gcmVz
dWx0OworfQorCit2b2lkIEluZmVycmVkVmFsdWU6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQorewor
ICAgIEluZmVycmVkVmFsdWUqIGluZmVycmVkVmFsdWUgPSBzdGF0aWNfY2FzdDxJbmZlcnJlZFZh
bHVlKj4oY2VsbCk7CisgICAgaW5mZXJyZWRWYWx1ZS0+SW5mZXJyZWRWYWx1ZTo6fkluZmVycmVk
VmFsdWUoKTsKK30KKworU3RydWN0dXJlKiBJbmZlcnJlZFZhbHVlOjpjcmVhdGVTdHJ1Y3R1cmUo
Vk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkK
K3sKKyAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVhdGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90
eXBlLCBUeXBlSW5mbyhDZWxsVHlwZSwgU3RydWN0dXJlRmxhZ3MpLCBpbmZvKCkpOworfQorCit2
b2lkIEluZmVycmVkVmFsdWU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRv
ciYgdmlzaXRvcikKK3sKKyAgICBJbmZlcnJlZFZhbHVlKiBpbmZlcnJlZFZhbHVlID0ganNDYXN0
PEluZmVycmVkVmFsdWUqPihjZWxsKTsKKyAgICAKKyAgICBpZiAoaW5mZXJyZWRWYWx1ZS0+bV9z
ZXQuaGFzQmVlbkludmFsaWRhdGVkKCkpIHsKKyAgICAgICAgaW5mZXJyZWRWYWx1ZS0+bV9jbGVh
bnVwID0gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBpZiAoIWlu
ZmVycmVkVmFsdWUtPm1fdmFsdWUpCisgICAgICAgIHJldHVybjsKKyAgICBpZiAoIWluZmVycmVk
VmFsdWUtPm1fdmFsdWUuZ2V0KCkuaXNDZWxsKCkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAg
ICBpZiAoIWluZmVycmVkVmFsdWUtPm1fY2xlYW51cCkKKyAgICAgICAgaW5mZXJyZWRWYWx1ZS0+
bV9jbGVhbnVwID0gc3RkOjptYWtlX3VuaXF1ZTxWYWx1ZUNsZWFudXA+KGluZmVycmVkVmFsdWUp
OworICAgIHZpc2l0b3IuYWRkVW5jb25kaXRpb25hbEZpbmFsaXplcihpbmZlcnJlZFZhbHVlLT5t
X2NsZWFudXAuZ2V0KCkpOworfQorCitJbmZlcnJlZFZhbHVlOjpJbmZlcnJlZFZhbHVlKFZNJiB2
bSkKKyAgICA6IEJhc2Uodm0sIHZtLmluZmVycmVkVmFsdWVTdHJ1Y3R1cmUuZ2V0KCkpCisgICAg
LCBtX3NldChDbGVhcldhdGNocG9pbnQpCit7Cit9CisKK0luZmVycmVkVmFsdWU6On5JbmZlcnJl
ZFZhbHVlKCkKK3sKK30KKwordm9pZCBJbmZlcnJlZFZhbHVlOjpub3RpZnlXcml0ZVNsb3coVk0m
IHZtLCBKU1ZhbHVlIHZhbHVlLCBjb25zdCBGaXJlRGV0YWlsJiBkZXRhaWwpCit7CisgICAgQVNT
RVJUKCEhdmFsdWUpOworICAgIHN3aXRjaCAobV9zZXQuc3RhdGUoKSkgeworICAgIGNhc2UgQ2xl
YXJXYXRjaHBvaW50OgorICAgICAgICBtX3ZhbHVlLnNldCh2bSwgdGhpcywgdmFsdWUpOworICAg
ICAgICBtX3NldC5zdGFydFdhdGNoaW5nKCk7CisgICAgICAgIHJldHVybjsKKyAgICAgICAgCisg
ICAgY2FzZSBJc1dhdGNoZWQ6CisgICAgICAgIEFTU0VSVCghIW1fdmFsdWUpOworICAgICAgICBp
ZiAobV92YWx1ZS5nZXQoKSA9PSB2YWx1ZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
aW52YWxpZGF0ZShkZXRhaWwpOworICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2Ug
SXNJbnZhbGlkYXRlZDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgCisgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQg
SW5mZXJyZWRWYWx1ZTo6bm90aWZ5V3JpdGVTbG93KFZNJiB2bSwgSlNWYWx1ZSB2YWx1ZSwgY29u
c3QgY2hhciogcmVhc29uKQoreworICAgIG5vdGlmeVdyaXRlU2xvdyh2bSwgdmFsdWUsIFN0cmlu
Z0ZpcmVEZXRhaWwocmVhc29uKSk7Cit9CisKK0luZmVycmVkVmFsdWU6OlZhbHVlQ2xlYW51cDo6
VmFsdWVDbGVhbnVwKEluZmVycmVkVmFsdWUqIG93bmVyKQorICAgIDogbV9vd25lcihvd25lcikK
K3sKK30KKworSW5mZXJyZWRWYWx1ZTo6VmFsdWVDbGVhbnVwOjp+VmFsdWVDbGVhbnVwKCkKK3sK
K30KKwordm9pZCBJbmZlcnJlZFZhbHVlOjpWYWx1ZUNsZWFudXA6OmZpbmFsaXplVW5jb25kaXRp
b25hbGx5KCkKK3sKKyAgICBBU1NFUlQobV9vd25lci0+bV92YWx1ZSk7CisgICAgQVNTRVJUKG1f
b3duZXItPm1fdmFsdWUuaXNDZWxsKCkpOworICAgIAorICAgIGlmIChIZWFwOjppc01hcmtlZCht
X293bmVyLT5tX3ZhbHVlLmdldCgpLmFzQ2VsbCgpKSkKKyAgICAgICAgcmV0dXJuOworICAgIAor
ICAgIG1fb3duZXItPmludmFsaWRhdGUoU3RyaW5nRmlyZURldGFpbCgiSW5mZXJyZWRWYWx1ZSBj
bGVhbi11cCBkdXJpbmcgR0MiKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFZhbHVlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRWYWx1ZS5oCShyZXZpc2lv
biAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRWYWx1ZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTM2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYgSW5mZXJyZWRWYWx1ZV9oCisjZGVmaW5lIElu
ZmVycmVkVmFsdWVfaAorCisjaW5jbHVkZSAiSlNDZWxsLmgiCisjaW5jbHVkZSAiV2F0Y2hwb2lu
dC5oIgorI2luY2x1ZGUgIldyaXRlQmFycmllci5oIgorCituYW1lc3BhY2UgSlNDIHsKKworLy8g
QWxsb2NhdGUgb25lIG9mIHRoZXNlIGlmIHlvdSdkIGxpa2UgdG8gaW5mZXIgYSBjb25zdGFudCB2
YWx1ZS4gV3JpdGVzIHRvIHRoZSB2YWx1ZSBzaG91bGQgdXNlCisvLyBub3RpZnlXcml0ZSgpLiBT
byBsb25nIGFzIGV4YWN0bHkgb25lIHZhbHVlIGhhZCBldmVyIGJlZW4gd3JpdHRlbiBhbmQgaW52
YWxpZGF0ZSgpIGhhcyBuZXZlciBiZWVuCisvLyBjYWxsZWQsIGFuZCB5b3UgcmVnaXN0ZXIgYSB3
YXRjaHBvaW50LCB5b3UgY2FuIHJlbHkgb24gdGhlIGluZmVycmVkVmFsdWUoKSBiZWluZyB0aGUg
b25lIHRydWUKKy8vIHZhbHVlLgorLy8KKy8vIENvbW1vbmx5IHVzZWQgZm9yIGluZmVycmluZyBz
aW5nbGV0b25zIC0gaW4gdGhhdCBjYXNlIGVhY2ggYWxsb2NhdGlvbiBkb2VzIG5vdGlmeVdyaXRl
KCkuIEJ1dCB5b3UKKy8vIGNhbiB1c2UgaWYgZm9yIG90aGVyIHRoaW5ncyBhcyB3ZWxsLgorCitj
bGFzcyBJbmZlcnJlZFZhbHVlIDogcHVibGljIEpTQ2VsbCB7CitwdWJsaWM6CisgICAgdHlwZWRl
ZiBKU0NlbGwgQmFzZTsKKyAgICAKKyAgICBzdGF0aWMgSW5mZXJyZWRWYWx1ZSogY3JlYXRlKFZN
Jik7CisgICAgCisgICAgc3RhdGljIGNvbnN0IGJvb2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7
CisgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzSW1tb3J0YWxTdHJ1Y3R1cmUgPSB0cnVlOworICAg
IHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7CisgICAgCisgICAgc3RhdGljIFN0cnVjdHVy
ZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNW
YWx1ZSBwcm90b3R5cGUpOworICAgIAorICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlND
ZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICAKKyAgICBERUNMQVJFX0lORk87CisgICAgCisgICAg
Ly8gRm9yIHRoZSBwdXJwb3NlIG9mIGRlY2lkaW5nIHdoZXRoZXIgb3Igbm90IHRvIHdhdGNoIHRo
aXMgdmFyaWFibGUsIHlvdSBvbmx5IG5lZWQKKyAgICAvLyB0byBpbnNwZWN0IGluZmVycmVkVmFs
dWUoKS4gSWYgdGhpcyByZXR1cm5zIHNvbWV0aGluZyBvdGhlciB0aGFuIHRoZSBlbXB0eQorICAg
IC8vIHZhbHVlLCB0aGVuIGl0IG1lYW5zIHRoYXQgYXQgYWxsIGZ1dHVyZSBzYWZlcG9pbnRzLCB0
aGlzIHdhdGNocG9pbnQgc2V0IHdpbGwgYmUKKyAgICAvLyBpbiBvbmUgb2YgdGhlc2Ugc3RhdGVz
OgorICAgIC8vCisgICAgLy8gICAgSXNXYXRjaGVkOiBpbiB0aGlzIGNhc2UsIHRoZSB2YXJpYWJs
ZSdzIHZhbHVlIG11c3Qgc3RpbGwgYmUgdGhlCisgICAgLy8gICAgICAgIGluZmVycmVkVmFsdWUu
CisgICAgLy8KKyAgICAvLyAgICBJc0ludmFsaWRhdGVkOiBpbiB0aGlzIGNhc2UgdGhlIHZhcmlh
YmxlJ3MgdmFsdWUgbWF5IGJlIGFueXRoaW5nIGJ1dCB5b3UnbGwKKyAgICAvLyAgICAgICAgZWl0
aGVyIG5vdGljZSB0aGF0IGl0J3MgaW52YWxpZGF0ZWQgYW5kIG5vdCBpbnN0YWxsIHRoZSB3YXRj
aHBvaW50LCBvcgorICAgIC8vICAgICAgICB5b3Ugd2lsbCBoYXZlIGJlZW4gbm90aWZpZWQgdGhh
dCB0aGUgd2F0Y2hwb2ludCB3YXMgZmlyZWQuCisgICAgSlNWYWx1ZSBpbmZlcnJlZFZhbHVlKCkg
eyByZXR1cm4gbV92YWx1ZS5nZXQoKTsgfQorCisgICAgLy8gRm9yd2FyZHMgc29tZSBXYXRjaHBv
aW50U2V0IG1ldGhvZHMuCisgICAgV2F0Y2hwb2ludFN0YXRlIHN0YXRlKCkgY29uc3QgeyByZXR1
cm4gbV9zZXQuc3RhdGUoKTsgfQorICAgIGJvb2wgaXNTdGlsbFZhbGlkKCkgY29uc3QgeyByZXR1
cm4gbV9zZXQuaXNTdGlsbFZhbGlkKCk7IH0KKyAgICBib29sIGhhc0JlZW5JbnZhbGlkYXRlZCgp
IGNvbnN0IHsgcmV0dXJuIG1fc2V0Lmhhc0JlZW5JbnZhbGlkYXRlZCgpOyB9CisgICAgdm9pZCBh
ZGQoV2F0Y2hwb2ludCogd2F0Y2hwb2ludCkgeyBtX3NldC5hZGQod2F0Y2hwb2ludCk7IH0KKyAg
ICAKKyAgICB2b2lkIG5vdGlmeVdyaXRlKFZNJiB2bSwgSlNWYWx1ZSB2YWx1ZSwgY29uc3QgRmly
ZURldGFpbCYgZGV0YWlsKQorICAgIHsKKyAgICAgICAgaWYgKExJS0VMWShtX3NldC5zdGF0ZU9u
TWFpblRocmVhZCgpID09IElzSW52YWxpZGF0ZWQpKQorICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICBub3RpZnlXcml0ZVNsb3codm0sIHZhbHVlLCBkZXRhaWwpOworICAgIH0KKyAgICAKKyAg
ICB2b2lkIG5vdGlmeVdyaXRlKFZNJiB2bSwgSlNWYWx1ZSB2YWx1ZSwgY29uc3QgY2hhciogcmVh
c29uKQorICAgIHsKKyAgICAgICAgaWYgKExJS0VMWShtX3NldC5zdGF0ZU9uTWFpblRocmVhZCgp
ID09IElzSW52YWxpZGF0ZWQpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBub3RpZnlX
cml0ZVNsb3codm0sIHZhbHVlLCByZWFzb24pOworICAgIH0KKyAgICAKKyAgICB2b2lkIGludmFs
aWRhdGUoY29uc3QgRmlyZURldGFpbCYgZGV0YWlsKQorICAgIHsKKyAgICAgICAgbV92YWx1ZS5j
bGVhcigpOworICAgICAgICBtX3NldC5pbnZhbGlkYXRlKGRldGFpbCk7CisgICAgfQorICAgIAor
cHJvdGVjdGVkOgorICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IFN0
cnVjdHVyZUlzSW1tb3J0YWwgfCBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKKyAgICAKK3ByaXZhdGU6
CisgICAgSW5mZXJyZWRWYWx1ZShWTSYpOworICAgIH5JbmZlcnJlZFZhbHVlKCk7CisgICAgCisg
ICAgdm9pZCBub3RpZnlXcml0ZVNsb3coVk0mLCBKU1ZhbHVlLCBjb25zdCBGaXJlRGV0YWlsJik7
CisgICAgdm9pZCBub3RpZnlXcml0ZVNsb3coVk0mLCBKU1ZhbHVlLCBjb25zdCBjaGFyKiByZWFz
b24pOworICAgIAorICAgIC8vIFdlIGNvdWxkIGhhdmUgdXNlZCBXZWFrPD4uIEJ1dCB3ZSB3YW50
IGFyYml0cmFyeSBKU1ZhbHVlcywgbm90IGp1c3QgY2VsbHMuIEl0J3MgYWxzbyBzb21ld2hhdAor
ICAgIC8vIGNvbnZlbmllbnQgdG8gaGF2ZSBlYWdlciBub3RpZmljYXRpb24gb2YgZGVhdGguCisg
ICAgY2xhc3MgVmFsdWVDbGVhbnVwIDogcHVibGljIFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIgewor
ICAgIHB1YmxpYzoKKyAgICAgICAgVmFsdWVDbGVhbnVwKEluZmVycmVkVmFsdWUqKTsKKyAgICAg
ICAgdmlydHVhbCB+VmFsdWVDbGVhbnVwKCk7CisgICAgICAgIAorICAgIHByb3RlY3RlZDoKKyAg
ICAgICAgdm9pZCBmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSgpIG92ZXJyaWRlOworICAgICAgICAK
KyAgICBwcml2YXRlOgorICAgICAgICBJbmZlcnJlZFZhbHVlKiBtX293bmVyOworICAgIH07Cisg
ICAgCisgICAgZnJpZW5kIGNsYXNzIFZhbHVlQ2xlYW51cDsKKyAgICAKKyAgICBJbmxpbmVXYXRj
aHBvaW50U2V0IG1fc2V0OworICAgIFdyaXRlQmFycmllcjxVbmtub3duPiBtX3ZhbHVlOworICAg
IHN0ZDo6dW5pcXVlX3B0cjxWYWx1ZUNsZWFudXA+IG1fY2xlYW51cDsKK307CisKKy8vIEZJWE1F
OiBXZSBjb3VsZCBoYXZlIGFuIElubGluZUluZmVycmVkVmFsdWUsIHdoaWNoIG9ubHkgYWxsb2Nh
dGVzIHRoZSBJbmZlcnJlZFZhbHVlIG9iamVjdCB3aGVuCisvLyBhIG5vdGlmeVdyaXRlKCkgdHJh
bnNpdGlvbnMgdXMgdG93YXJkcyB3YXRjaGluZywgYW5kIHRoZW4gY2xlYXJzIHRoZSByZWZlcmVu
Y2UgKGFsbG93aW5nIHRoZSBvYmplY3QKKy8vIHRvIGRpZSkgd2hlbiB3ZSBnZXQgaW52YWxpZGF0
ZWQuCisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSW5mZXJyZWRWYWx1ZV9oCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRW52aXJvbm1lbnRSZWNvcmQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Vudmlyb25t
ZW50UmVjb3JkLmgJKHJldmlzaW9uIDE4MjQ5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTRW52aXJvbm1lbnRSZWNvcmQuaAkod29ya2luZyBjb3B5KQpAQCAtNTMsNyArNTMs
NyBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBpc1ZhbGlkKFNjb3BlT2Zmc2V0IG9mZnNldCkK
ICAgICB7Ci0gICAgICAgIHJldHVybiAhIW9mZnNldCAmJiBvZmZzZXQub2Zmc2V0KCkgPCBtX3N5
bWJvbFRhYmxlLT5zY29wZVNpemUoKTsKKyAgICAgICAgcmV0dXJuICEhb2Zmc2V0ICYmIG9mZnNl
dC5vZmZzZXQoKSA8IHN5bWJvbFRhYmxlKCktPnNjb3BlU2l6ZSgpOwogICAgIH0KICAgICAKICAg
ICBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+JiB2YXJpYWJsZUF0KFNjb3BlT2Zmc2V0IG9mZnNl
dCkKQEAgLTEwNCw3ICsxMDQsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlv
bihWTSYgdm0pCiAgICAgewogICAgICAgICBmaW5pc2hDcmVhdGlvblVuaW5pdGlhbGl6ZWQodm0p
OwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX3N5bWJvbFRhYmxlLT5zY29wZVNpemUoKTsg
aS0tOykgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBzeW1ib2xUYWJsZSgpLT5zY29wZVNp
emUoKTsgaS0tOykgewogICAgICAgICAgICAgLy8gRmlsbGluZyB0aGlzIHdpdGggdW5kZWZpbmVk
IGlzIHVzZWZ1bCBiZWNhdXNlIHRoYXQncyB3aGF0IHZhcmlhYmxlcyBzdGFydCBvdXQgYXMuCiAg
ICAgICAgICAgICB2YXJpYWJsZUF0KFNjb3BlT2Zmc2V0KGkpKS5zZXRVbmRlZmluZWQoKTsKICAg
ICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlv
bi5jcHAJKHJldmlzaW9uIDE4MjQ5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTRnVuY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OSw2ICs1OSwxMyBAQCBib29sIEpT
RnVuY3Rpb246OmlzSG9zdEZ1bmN0aW9uTm9uSW5saW5lCiAgICAgcmV0dXJuIGlzSG9zdEZ1bmN0
aW9uKCk7CiB9CiAKK0pTRnVuY3Rpb24qIEpTRnVuY3Rpb246OmNyZWF0ZShWTSYgdm0sIEZ1bmN0
aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSwgSlNTY29wZSogc2NvcGUpCit7CisgICAgSlNGdW5j
dGlvbiogcmVzdWx0ID0gY3JlYXRlSW1wbCh2bSwgZXhlY3V0YWJsZSwgc2NvcGUpOworICAgIGV4
ZWN1dGFibGUtPnNpbmdsZXRvbkZ1bmN0aW9uKCktPm5vdGlmeVdyaXRlKHZtLCByZXN1bHQsICJB
bGxvY2F0aW5nIGEgZnVuY3Rpb24iKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiBKU0Z1bmN0
aW9uKiBKU0Z1bmN0aW9uOjpjcmVhdGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2Jq
ZWN0LCBpbnQgbGVuZ3RoLCBjb25zdCBTdHJpbmcmIG5hbWUsIE5hdGl2ZUZ1bmN0aW9uIG5hdGl2
ZUZ1bmN0aW9uLCBJbnRyaW5zaWMgaW50cmluc2ljLCBOYXRpdmVGdW5jdGlvbiBuYXRpdmVDb25z
dHJ1Y3RvcikKIHsKICAgICBOYXRpdmVFeGVjdXRhYmxlKiBleGVjdXRhYmxlOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaAkocmV2aXNpb24gMTgyNDk4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yNCw2ICsyNCw3IEBACiAjaWZuZGVmIEpTRnVuY3Rpb25faAogI2RlZmluZSBK
U0Z1bmN0aW9uX2gKIAorI2luY2x1ZGUgIkV4ZWN1dGFibGUuaCIKICNpbmNsdWRlICJJbnRlcm5h
bEZ1bmN0aW9uLmgiCiAjaW5jbHVkZSAiSlNDYWxsZWUuaCIKICNpbmNsdWRlICJKU1Njb3BlLmgi
CkBAIC01OSwxNSArNjAsMTUgQEAgcHVibGljOgogICAgIHR5cGVkZWYgSlNDYWxsZWUgQmFzZTsK
IAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBKU0Z1bmN0aW9uKiBjcmVhdGUoVk0mLCBK
U0dsb2JhbE9iamVjdCosIGludCBsZW5ndGgsIGNvbnN0IFN0cmluZyYgbmFtZSwgTmF0aXZlRnVu
Y3Rpb24sIEludHJpbnNpYyA9IE5vSW50cmluc2ljLCBOYXRpdmVGdW5jdGlvbiBuYXRpdmVDb25z
dHJ1Y3RvciA9IGNhbGxIb3N0RnVuY3Rpb25Bc0NvbnN0cnVjdG9yKTsKLQotICAgIHN0YXRpYyBK
U0Z1bmN0aW9uKiBjcmVhdGUoVk0mIHZtLCBGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUs
IEpTU2NvcGUqIHNjb3BlKQorICAgIAorICAgIHN0YXRpYyBKU0Z1bmN0aW9uKiBjcmVhdGVXaXRo
SW52YWxpZGF0ZWRSZWFsbG9jYXRpb25XYXRjaHBvaW50KFZNJiB2bSwgRnVuY3Rpb25FeGVjdXRh
YmxlKiBleGVjdXRhYmxlLCBKU1Njb3BlKiBzY29wZSkKICAgICB7Ci0gICAgICAgIEpTRnVuY3Rp
b24qIGZ1bmN0aW9uID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNGdW5jdGlvbj4odm0u
aGVhcCkpIEpTRnVuY3Rpb24odm0sIGV4ZWN1dGFibGUsIHNjb3BlKTsKLSAgICAgICAgQVNTRVJU
KGZ1bmN0aW9uLT5zdHJ1Y3R1cmUoKS0+Z2xvYmFsT2JqZWN0KCkpOwotICAgICAgICBmdW5jdGlv
bi0+ZmluaXNoQ3JlYXRpb24odm0pOwotICAgICAgICByZXR1cm4gZnVuY3Rpb247CisgICAgICAg
IEFTU0VSVChleGVjdXRhYmxlLT5zaW5nbGV0b25GdW5jdGlvbigpLT5oYXNCZWVuSW52YWxpZGF0
ZWQoKSk7CisgICAgICAgIHJldHVybiBjcmVhdGVJbXBsKHZtLCBleGVjdXRhYmxlLCBzY29wZSk7
CiAgICAgfQogCisgICAgc3RhdGljIEpTRnVuY3Rpb24qIGNyZWF0ZShWTSYsIEZ1bmN0aW9uRXhl
Y3V0YWJsZSosIEpTU2NvcGUqKTsKKwogICAgIHN0YXRpYyBKU0Z1bmN0aW9uKiBjcmVhdGVCdWls
dGluRnVuY3Rpb24oVk0mLCBGdW5jdGlvbkV4ZWN1dGFibGUqLCBKU0dsb2JhbE9iamVjdCopOwog
CiAgICAgc3RhdGljIHZvaWQgZGVzdHJveShKU0NlbGwqKTsKQEAgLTE0OSw2ICsxNTAsMTQgQEAg
cHJvdGVjdGVkOgogICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZp
c2l0b3ImKTsKIAogcHJpdmF0ZToKKyAgICBzdGF0aWMgSlNGdW5jdGlvbiogY3JlYXRlSW1wbChW
TSYgdm0sIEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSwgSlNTY29wZSogc2NvcGUpCisg
ICAgeworICAgICAgICBKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9IG5ldyAoTm90TnVsbCwgYWxsb2Nh
dGVDZWxsPEpTRnVuY3Rpb24+KHZtLmhlYXApKSBKU0Z1bmN0aW9uKHZtLCBleGVjdXRhYmxlLCBz
Y29wZSk7CisgICAgICAgIEFTU0VSVChmdW5jdGlvbi0+c3RydWN0dXJlKCktPmdsb2JhbE9iamVj
dCgpKTsKKyAgICAgICAgZnVuY3Rpb24tPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICAgICAgcmV0
dXJuIGZ1bmN0aW9uOworICAgIH0KKyAgICAKICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRz
RXh0cmFjdG9yOwogCiAgICAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIGFyZ3VtZW50c0dldHRlcihF
eGVjU3RhdGUqLCBKU09iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBQcm9wZXJ0eU5hbWUpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNw
cAkocmV2aXNpb24gMTgyNDk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNH
bG9iYWxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjQsNyArMTI0LDcgQEAKICNpbmNs
dWRlICJTeW1ib2wuaCIKICNpbmNsdWRlICJTeW1ib2xDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUg
IlN5bWJvbFByb3RvdHlwZS5oIgotI2luY2x1ZGUgIlZhcmlhYmxlV2F0Y2hwb2ludFNldElubGlu
ZXMuaCIKKyNpbmNsdWRlICJWYXJpYWJsZVdyaXRlRmlyZURldGFpbC5oIgogI2luY2x1ZGUgIldl
YWtHQ01hcElubGluZXMuaCIKICNpbmNsdWRlICJXZWFrTWFwQ29uc3RydWN0b3IuaCIKICNpbmNs
dWRlICJXZWFrTWFwUHJvdG90eXBlLmgiCkBAIC00ODksNyArNDg5LDcgQEAgSlNHbG9iYWxPYmpl
Y3Q6Ok5ld0dsb2JhbFZhciBKU0dsb2JhbE9iagogICAgIFNjb3BlT2Zmc2V0IG9mZnNldCA9IHN5
bWJvbFRhYmxlKCktPnRha2VOZXh0U2NvcGVPZmZzZXQobG9ja2VyKTsKICAgICBTeW1ib2xUYWJs
ZUVudHJ5IG5ld0VudHJ5KFZhck9mZnNldChvZmZzZXQpLCAoY29uc3RhbnRNb2RlID09IElzQ29u
c3RhbnQpID8gUmVhZE9ubHkgOiAwKTsKICAgICBpZiAoY29uc3RhbnRNb2RlID09IElzVmFyaWFi
bGUpCi0gICAgICAgIG5ld0VudHJ5LnByZXBhcmVUb1dhdGNoKHN5bWJvbFRhYmxlKCkpOworICAg
ICAgICBuZXdFbnRyeS5wcmVwYXJlVG9XYXRjaCgpOwogICAgIGVsc2UKICAgICAgICAgbmV3RW50
cnkuZGlzYWJsZVdhdGNoaW5nKCk7CiAgICAgc3ltYm9sVGFibGUoKS0+YWRkKGxvY2tlciwgaWRl
bnQuaW1wbCgpLCBuZXdFbnRyeSk7CkBAIC01MTAsNyArNTEwLDcgQEAgdm9pZCBKU0dsb2JhbE9i
amVjdDo6YWRkRnVuY3Rpb24oRXhlY1N0YQogICAgIE5ld0dsb2JhbFZhciB2YXIgPSBhZGRHbG9i
YWxWYXIocHJvcGVydHlOYW1lLCBJc1ZhcmlhYmxlKTsKICAgICB2YXJpYWJsZUF0KHZhci5vZmZz
ZXQpLnNldChleGVjLT52bSgpLCB0aGlzLCB2YWx1ZSk7CiAgICAgaWYgKHZhci5zZXQpCi0gICAg
ICAgIHZhci5zZXQtPm5vdGlmeVdyaXRlKHZtLCB2YWx1ZSwgVmFyaWFibGVXcml0ZUZpcmVEZXRh
aWwodGhpcywgcHJvcGVydHlOYW1lKSk7CisgICAgICAgIHZhci5zZXQtPnRvdWNoKFZhcmlhYmxl
V3JpdGVGaXJlRGV0YWlsKHRoaXMsIHByb3BlcnR5TmFtZSkpOwogfQogCiBzdGF0aWMgaW5saW5l
IEpTT2JqZWN0KiBsYXN0SW5Qcm90b3R5cGVDaGFpbihKU09iamVjdCogb2JqZWN0KQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCShyZXZp
c2lvbiAxODI0OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9i
amVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMzQsNyArMzM0LDcgQEAgcHJvdGVjdGVkOgogCiAg
ICAgc3RydWN0IE5ld0dsb2JhbFZhciB7CiAgICAgICAgIFNjb3BlT2Zmc2V0IG9mZnNldDsKLSAg
ICAgICAgVmFyaWFibGVXYXRjaHBvaW50U2V0KiBzZXQ7CisgICAgICAgIFdhdGNocG9pbnRTZXQq
IHNldDsKICAgICB9OwogICAgIE5ld0dsb2JhbFZhciBhZGRHbG9iYWxWYXIoY29uc3QgSWRlbnRp
ZmllciYsIENvbnN0YW50TW9kZSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTTGV4aWNhbEVudmlyb25tZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0xleGljYWxFbnZpcm9ubWVudC5jcHAJKHJldmlzaW9uIDE4MjQ5
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTGV4aWNhbEVudmlyb25tZW50
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzcsNiArNzcsNyBAQCBpbmxpbmUgYm9vbCBKU0xleGlj
YWxFbnZpcm9ubWVudDo6c3ltYm9sCiAgICAgQVNTRVJUKCFIZWFwOjpoZWFwKHZhbHVlKSB8fCBI
ZWFwOjpoZWFwKHZhbHVlKSA9PSBIZWFwOjpoZWFwKHRoaXMpKTsKICAgICAKICAgICBXcml0ZUJh
cnJpZXJCYXNlPFVua25vd24+KiByZWc7CisgICAgV2F0Y2hwb2ludFNldCogc2V0OwogICAgIHsK
ICAgICAgICAgR0NTYWZlQ29uY3VycmVudEpJVExvY2tlciBsb2NrZXIoc3ltYm9sVGFibGUoKS0+
bV9sb2NrLCBleGVjLT52bSgpLmhlYXApOwogICAgICAgICBTeW1ib2xUYWJsZTo6TWFwOjppdGVy
YXRvciBpdGVyID0gc3ltYm9sVGFibGUoKS0+ZmluZChsb2NrZXIsIHByb3BlcnR5TmFtZS51aWQo
KSk7CkBAIC05MiwxMSArOTMsMTIgQEAgaW5saW5lIGJvb2wgSlNMZXhpY2FsRW52aXJvbm1lbnQ6
OnN5bWJvbAogICAgICAgICAvLyBEZWZlbmQgYWdhaW5zdCB0aGUgaW5zcGVjdG9yIGFza2luZyBm
b3IgYSB2YXIgYWZ0ZXIgaXQgaGFzIGJlZW4gb3B0aW1pemVkIG91dC4KICAgICAgICAgaWYgKCFp
c1ZhbGlkKG9mZnNldCkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmIChW
YXJpYWJsZVdhdGNocG9pbnRTZXQqIHNldCA9IGl0ZXItPnZhbHVlLndhdGNocG9pbnRTZXQoKSkK
LSAgICAgICAgICAgIHNldC0+aW52YWxpZGF0ZShWYXJpYWJsZVdyaXRlRmlyZURldGFpbCh0aGlz
LCBwcm9wZXJ0eU5hbWUpKTsgLy8gRG9uJ3QgbWVzcyBhcm91bmQgLSBpZiB3ZSBoYWQgZm91bmQg
dGhpcyBzdGF0aWNhbGx5LCB3ZSB3b3VsZCBoYXZlIGludmFsaWRhdGVkIGl0LgorICAgICAgICBz
ZXQgPSBpdGVyLT52YWx1ZS53YXRjaHBvaW50U2V0KCk7CiAgICAgICAgIHJlZyA9ICZ2YXJpYWJs
ZUF0KG9mZnNldCk7CiAgICAgfQogICAgIHJlZy0+c2V0KHZtLCB0aGlzLCB2YWx1ZSk7CisgICAg
aWYgKHNldCkKKyAgICAgICAgc2V0LT5pbnZhbGlkYXRlKFZhcmlhYmxlV3JpdGVGaXJlRGV0YWls
KHRoaXMsIHByb3BlcnR5TmFtZSkpOyAvLyBEb24ndCBtZXNzIGFyb3VuZCAtIGlmIHdlIGhhZCBm
b3VuZCB0aGlzIHN0YXRpY2FsbHksIHdlIHdvdWxkIGhhdmUgaW52YWxpZGF0ZWQgaXQuCiAgICAg
cmV0dXJuIHRydWU7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
U2NvcGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Nj
b3BlLmgJKHJldmlzaW9uIDE4MjQ5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTU2NvcGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQAogbmFtZXNwYWNlIEpT
QyB7CiAKIGNsYXNzIFNjb3BlQ2hhaW5JdGVyYXRvcjsKLWNsYXNzIFZhcmlhYmxlV2F0Y2hwb2lu
dFNldDsKK2NsYXNzIFdhdGNocG9pbnRTZXQ7CiAKIGVudW0gUmVzb2x2ZU1vZGUgewogICAgIFRo
cm93SWZOb3RGb3VuZCwKQEAgLTEwMiw3ICsxMDIsNyBAQCBpbmxpbmUgYm9vbCBuZWVkc1Zhcklu
amVjdGlvbkNoZWNrcyhSZXNvCiB9CiAKIHN0cnVjdCBSZXNvbHZlT3AgewotICAgIFJlc29sdmVP
cChSZXNvbHZlVHlwZSB0eXBlLCBzaXplX3QgZGVwdGgsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBK
U0xleGljYWxFbnZpcm9ubWVudCogbGV4aWNhbEVudmlyb25tZW50LCBWYXJpYWJsZVdhdGNocG9p
bnRTZXQqIHdhdGNocG9pbnRTZXQsIHVpbnRwdHJfdCBvcGVyYW5kKQorICAgIFJlc29sdmVPcChS
ZXNvbHZlVHlwZSB0eXBlLCBzaXplX3QgZGVwdGgsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0xl
eGljYWxFbnZpcm9ubWVudCogbGV4aWNhbEVudmlyb25tZW50LCBXYXRjaHBvaW50U2V0KiB3YXRj
aHBvaW50U2V0LCB1aW50cHRyX3Qgb3BlcmFuZCkKICAgICAgICAgOiB0eXBlKHR5cGUpCiAgICAg
ICAgICwgZGVwdGgoZGVwdGgpCiAgICAgICAgICwgc3RydWN0dXJlKHN0cnVjdHVyZSkKQEAgLTEx
Niw3ICsxMTYsNyBAQCBzdHJ1Y3QgUmVzb2x2ZU9wIHsKICAgICBzaXplX3QgZGVwdGg7CiAgICAg
U3RydWN0dXJlKiBzdHJ1Y3R1cmU7CiAgICAgSlNMZXhpY2FsRW52aXJvbm1lbnQqIGxleGljYWxF
bnZpcm9ubWVudDsKLSAgICBWYXJpYWJsZVdhdGNocG9pbnRTZXQqIHdhdGNocG9pbnRTZXQ7Cisg
ICAgV2F0Y2hwb2ludFNldCogd2F0Y2hwb2ludFNldDsKICAgICB1aW50cHRyX3Qgb3BlcmFuZDsK
IH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFy
aWFibGVPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmgJKHJldmlzaW9uIDE4MjQ5OCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuaAkod29y
a2luZyBjb3B5KQpAQCAtODYsNyArODYsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBmaW5pc2hD
cmVhdGlvbihWTSYgdm0pCiAgICAgewogICAgICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7
Ci0gICAgICAgIG1fc3ltYm9sVGFibGUuc2V0KHZtLCB0aGlzLCBTeW1ib2xUYWJsZTo6Y3JlYXRl
KHZtKSk7CisgICAgICAgIHNldFN5bWJvbFRhYmxlKHZtLCBTeW1ib2xUYWJsZTo6Y3JlYXRlKHZt
KSk7CiAgICAgfQogICAgIAogICAgIFNlZ21lbnRlZFZlY3RvcjxXcml0ZUJhcnJpZXI8VW5rbm93
bj4sIDE2PiBtX3ZhcmlhYmxlczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTU3ltYm9sVGFibGVPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmgJKHJldmlzaW9uIDE4MjQ5OCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzIsNyArMzIsNyBAQAogI2luY2x1ZGUgIkpTU2NvcGUuaCIKICNpbmNsdWRl
ICJQcm9wZXJ0eURlc2NyaXB0b3IuaCIKICNpbmNsdWRlICJTeW1ib2xUYWJsZS5oIgotI2luY2x1
ZGUgIlZhcmlhYmxlV2F0Y2hwb2ludFNldElubGluZXMuaCIKKyNpbmNsdWRlICJWYXJpYWJsZVdy
aXRlRmlyZURldGFpbC5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtNjEsMTEgKzYxLDE5IEBA
IHByb3RlY3RlZDoKICAgICAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUsIHNjb3BlKQogICAgIHsK
ICAgICAgICAgQVNTRVJUKHN5bWJvbFRhYmxlKTsKKyAgICAgICAgc2V0U3ltYm9sVGFibGUodm0s
IHN5bWJvbFRhYmxlKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBzZXRTeW1ib2xUYWJsZShWTSYg
dm0sIFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSkKKyAgICB7CisgICAgICAgIEFTU0VSVCghbV9z
eW1ib2xUYWJsZSk7CisgICAgICAgIHN5bWJvbFRhYmxlLT5zaW5nbGV0b25TY29wZSgpLT5ub3Rp
ZnlXcml0ZSh2bSwgdGhpcywgIkFsbG9jYXRlZCBhIHNjb3BlIik7CiAgICAgICAgIG1fc3ltYm9s
VGFibGUuc2V0KHZtLCB0aGlzLCBzeW1ib2xUYWJsZSk7CiAgICAgfQotCisgICAgCiAgICAgc3Rh
dGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwotCisgICAgCitw
cml2YXRlOgogICAgIFdyaXRlQmFycmllcjxTeW1ib2xUYWJsZT4gbV9zeW1ib2xUYWJsZTsKIH07
CiAKQEAgLTEyNiw2ICsxMzQsNyBAQCBpbmxpbmUgYm9vbCBzeW1ib2xUYWJsZVB1dCgKICAgICBB
U1NFUlQoIUhlYXA6OmhlYXAodmFsdWUpIHx8IEhlYXA6OmhlYXAodmFsdWUpID09IEhlYXA6Omhl
YXAob2JqZWN0KSk7CiAgICAgCiAgICAgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiogcmVnOwor
ICAgIFdhdGNocG9pbnRTZXQqIHNldDsKICAgICB7CiAgICAgICAgIFN5bWJvbFRhYmxlJiBzeW1i
b2xUYWJsZSA9ICpvYmplY3QtPnN5bWJvbFRhYmxlKCk7CiAgICAgICAgIC8vIEZJWE1FOiBUaGlz
IGlzIHZlcnkgc3VzcGljaW91cy4gV2Ugc2hvdWxkbid0IG5lZWQgYSBHQy1zYWZlIGxvY2sgaGVy
ZS4KQEAgLTE0MiwxNyArMTUxLDE1IEBAIGlubGluZSBib29sIHN5bWJvbFRhYmxlUHV0KAogICAg
ICAgICAgICAgICAgIHRocm93VHlwZUVycm9yKGV4ZWMsIFN0cmljdE1vZGVSZWFkb25seVByb3Bl
cnR5V3JpdGVFcnJvcik7CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQotICAg
ICAgICBpZiAoVmFyaWFibGVXYXRjaHBvaW50U2V0KiBzZXQgPSBpdGVyLT52YWx1ZS53YXRjaHBv
aW50U2V0KCkpIHsKLSAgICAgICAgICAgIC8vIEZJWE1FOiBJdCdzIHN0cmFuZ2UgdGhhdCB3ZSdy
ZSBkb2luZyB0aGlzIHdoaWxlIGhvbGRpbmcgdGhlIHN5bWJvbCB0YWJsZSdzIGxvY2suCi0gICAg
ICAgICAgICAvLyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM0NjAx
Ci0gICAgICAgICAgICBzZXQtPm5vdGlmeVdyaXRlKHZtLCB2YWx1ZSwgb2JqZWN0LCBwcm9wZXJ0
eU5hbWUpOwotICAgICAgICB9CisgICAgICAgIHNldCA9IGl0ZXItPnZhbHVlLndhdGNocG9pbnRT
ZXQoKTsKICAgICAgICAgcmVnID0gJm9iamVjdC0+dmFyaWFibGVBdChmYXN0RW50cnkuc2NvcGVP
ZmZzZXQoKSk7CiAgICAgfQogICAgIC8vIEknZCBwcmVmZXIgd2Ugbm90IGhvbGQgbG9jayB3aGls
ZSBleGVjdXRpbmcgYmFycmllcnMsIHNpbmNlIEkgcHJlZmVyIHRvIHJlc2VydmUKICAgICAvLyB0
aGUgcmlnaHQgZm9yIGJhcnJpZXJzIHRvIGJlIGFibGUgdG8gdHJpZ2dlciBHQy4gQW5kIEkgZG9u
J3Qgd2FudCB0byBob2xkIFZNCiAgICAgLy8gbG9ja3Mgd2hpbGUgR0MnaW5nLgogICAgIHJlZy0+
c2V0KHZtLCBvYmplY3QsIHZhbHVlKTsKKyAgICBpZiAoc2V0KQorICAgICAgICBWYXJpYWJsZVdy
aXRlRmlyZURldGFpbDo6dG91Y2goc2V0LCBvYmplY3QsIHByb3BlcnR5TmFtZSk7CiAgICAgcmV0
dXJuIHRydWU7CiB9CiAKQEAgLTE2NCw2ICsxNzEsNyBAQCBpbmxpbmUgYm9vbCBzeW1ib2xUYWJs
ZVB1dFdpdGhBdHRyaWJ1dGVzCiAgICAgQVNTRVJUKCFIZWFwOjpoZWFwKHZhbHVlKSB8fCBIZWFw
OjpoZWFwKHZhbHVlKSA9PSBIZWFwOjpoZWFwKG9iamVjdCkpOwogCiAgICAgV3JpdGVCYXJyaWVy
QmFzZTxVbmtub3duPiogcmVnOworICAgIFdhdGNocG9pbnRTZXQqIHNldDsKICAgICB7CiAgICAg
ICAgIFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSA9ICpvYmplY3QtPnN5bWJvbFRhYmxlKCk7CiAg
ICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKHN5bWJvbFRhYmxlLm1fbG9jayk7CkBA
IC0xNzIsMTIgKzE4MCwxMyBAQCBpbmxpbmUgYm9vbCBzeW1ib2xUYWJsZVB1dFdpdGhBdHRyaWJ1
dGVzCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIFN5bWJvbFRhYmxlRW50cnkm
IGVudHJ5ID0gaXRlci0+dmFsdWU7CiAgICAgICAgIEFTU0VSVCghZW50cnkuaXNOdWxsKCkpOwot
ICAgICAgICBpZiAoVmFyaWFibGVXYXRjaHBvaW50U2V0KiBzZXQgPSBlbnRyeS53YXRjaHBvaW50
U2V0KCkpCi0gICAgICAgICAgICBzZXQtPm5vdGlmeVdyaXRlKHZtLCB2YWx1ZSwgb2JqZWN0LCBw
cm9wZXJ0eU5hbWUpOworICAgICAgICBzZXQgPSBlbnRyeS53YXRjaHBvaW50U2V0KCk7CiAgICAg
ICAgIGVudHJ5LnNldEF0dHJpYnV0ZXMoYXR0cmlidXRlcyk7CiAgICAgICAgIHJlZyA9ICZvYmpl
Y3QtPnZhcmlhYmxlQXQoZW50cnkuc2NvcGVPZmZzZXQoKSk7CiAgICAgfQogICAgIHJlZy0+c2V0
KHZtLCBvYmplY3QsIHZhbHVlKTsKKyAgICBpZiAoc2V0KQorICAgICAgICBWYXJpYWJsZVdyaXRl
RmlyZURldGFpbDo6dG91Y2goc2V0LCBvYmplY3QsIHByb3BlcnR5TmFtZSk7CiAgICAgcmV0dXJu
IHRydWU7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1B1dFByb3Bl
cnR5U2xvdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1B1
dFByb3BlcnR5U2xvdC5oCShyZXZpc2lvbiAxODI0OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9QdXRQcm9wZXJ0eVNsb3QuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgs
NyBAQAogI2RlZmluZSBQdXRQcm9wZXJ0eVNsb3RfaAogCiAjaW5jbHVkZSAiSlNDSlNWYWx1ZS5o
IgorI2luY2x1ZGUgIlByb3BlcnR5T2Zmc2V0LmgiCiAKICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9u
cy5oPgogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFi
bGUuY3BwCShyZXZpc2lvbiAxODI0OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9TeW1ib2xUYWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDYgQEAKICNpbmNs
dWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiU2xvdFZpc2l0b3JJbmxpbmVzLmgiCiAjaW5j
bHVkZSAiVHlwZVByb2ZpbGVyLmgiCi0jaW5jbHVkZSAiVmFyaWFibGVXYXRjaHBvaW50U2V0SW5s
aW5lcy5oIgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtNjAsMjEgKzU5LDE0IEBAIHZvaWQgU3lt
Ym9sVGFibGVFbnRyeTo6ZnJlZUZhdEVudHJ5U2xvdygKICAgICBkZWxldGUgZmF0RW50cnkoKTsK
IH0KIAotSlNWYWx1ZSBTeW1ib2xUYWJsZUVudHJ5OjppbmZlcnJlZFZhbHVlKCkKLXsKLSAgICBp
ZiAoIWlzRmF0KCkpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlKCk7Ci0gICAgcmV0dXJuIGZhdEVu
dHJ5KCktPm1fd2F0Y2hwb2ludHMtPmluZmVycmVkVmFsdWUoKTsKLX0KLQotdm9pZCBTeW1ib2xU
YWJsZUVudHJ5OjpwcmVwYXJlVG9XYXRjaChTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUpCit2b2lk
IFN5bWJvbFRhYmxlRW50cnk6OnByZXBhcmVUb1dhdGNoKCkKIHsKICAgICBpZiAoIWlzV2F0Y2hh
YmxlKCkpCiAgICAgICAgIHJldHVybjsKICAgICBGYXRFbnRyeSogZW50cnkgPSBpbmZsYXRlKCk7
CiAgICAgaWYgKGVudHJ5LT5tX3dhdGNocG9pbnRzKQogICAgICAgICByZXR1cm47Ci0gICAgZW50
cnktPm1fd2F0Y2hwb2ludHMgPSBhZG9wdFJlZihuZXcgVmFyaWFibGVXYXRjaHBvaW50U2V0KCpz
eW1ib2xUYWJsZSkpOworICAgIGVudHJ5LT5tX3dhdGNocG9pbnRzID0gYWRvcHRSZWYobmV3IFdh
dGNocG9pbnRTZXQoQ2xlYXJXYXRjaHBvaW50KSk7CiB9CiAKIHZvaWQgU3ltYm9sVGFibGVFbnRy
eTo6YWRkV2F0Y2hwb2ludChXYXRjaHBvaW50KiB3YXRjaHBvaW50KQpAQCAtODIsMTUgKzc0LDYg
QEAgdm9pZCBTeW1ib2xUYWJsZUVudHJ5OjphZGRXYXRjaHBvaW50KFdhdAogICAgIGZhdEVudHJ5
KCktPm1fd2F0Y2hwb2ludHMtPmFkZCh3YXRjaHBvaW50KTsKIH0KIAotdm9pZCBTeW1ib2xUYWJs
ZUVudHJ5Ojpub3RpZnlXcml0ZVNsb3coVk0mIHZtLCBKU1ZhbHVlIHZhbHVlLCBjb25zdCBGaXJl
RGV0YWlsJiBkZXRhaWwpCi17Ci0gICAgVmFyaWFibGVXYXRjaHBvaW50U2V0KiB3YXRjaHBvaW50
cyA9IGZhdEVudHJ5KCktPm1fd2F0Y2hwb2ludHMuZ2V0KCk7Ci0gICAgaWYgKCF3YXRjaHBvaW50
cykKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIHdhdGNocG9pbnRzLT5ub3RpZnlXcml0ZSh2
bSwgdmFsdWUsIGRldGFpbCk7Ci19Ci0KIFN5bWJvbFRhYmxlRW50cnk6OkZhdEVudHJ5KiBTeW1i
b2xUYWJsZUVudHJ5OjppbmZsYXRlU2xvdygpCiB7CiAgICAgRmF0RW50cnkqIGVudHJ5ID0gbmV3
IEZhdEVudHJ5KG1fYml0cyk7CkBAIC0xMDEsNDggKzg0LDI5IEBAIFN5bWJvbFRhYmxlRW50cnk6
OkZhdEVudHJ5KiBTeW1ib2xUYWJsZUUKIFN5bWJvbFRhYmxlOjpTeW1ib2xUYWJsZShWTSYgdm0p
CiAgICAgOiBKU0NlbGwodm0sIHZtLnN5bWJvbFRhYmxlU3RydWN0dXJlLmdldCgpKQogICAgICwg
bV91c2VzTm9uU3RyaWN0RXZhbChmYWxzZSkKLSAgICAsIG1fZnVuY3Rpb25FbnRlcmVkT25jZShD
bGVhcldhdGNocG9pbnQpCiB7CiB9CiAKIFN5bWJvbFRhYmxlOjp+U3ltYm9sVGFibGUoKSB7IH0K
IAordm9pZCBTeW1ib2xUYWJsZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQoreworICAgIEJhc2U6
OmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICBtX3NpbmdsZXRvblNjb3BlLnNldCh2bSwgdGhpcywg
SW5mZXJyZWRWYWx1ZTo6Y3JlYXRlKHZtKSk7Cit9CisKIHZvaWQgU3ltYm9sVGFibGU6OnZpc2l0
Q2hpbGRyZW4oSlNDZWxsKiB0aGlzQ2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAg
U3ltYm9sVGFibGUqIHRoaXNTeW1ib2xUYWJsZSA9IGpzQ2FzdDxTeW1ib2xUYWJsZSo+KHRoaXND
ZWxsKTsKICAgICAKICAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc1N5bWJvbFRhYmxlLT5tX2FyZ3Vt
ZW50cyk7Ci0gICAgCi0gICAgaWYgKCF0aGlzU3ltYm9sVGFibGUtPm1fd2F0Y2hwb2ludENsZWFu
dXApIHsKLSAgICAgICAgdGhpc1N5bWJvbFRhYmxlLT5tX3dhdGNocG9pbnRDbGVhbnVwID0KLSAg
ICAgICAgICAgIHN0ZDo6bWFrZV91bmlxdWU8V2F0Y2hwb2ludENsZWFudXA+KHRoaXNTeW1ib2xU
YWJsZSk7Ci0gICAgfQotICAgIAotICAgIHZpc2l0b3IuYWRkVW5jb25kaXRpb25hbEZpbmFsaXpl
cih0aGlzU3ltYm9sVGFibGUtPm1fd2F0Y2hwb2ludENsZWFudXAuZ2V0KCkpOworICAgIHZpc2l0
b3IuYXBwZW5kKCZ0aGlzU3ltYm9sVGFibGUtPm1fc2luZ2xldG9uU2NvcGUpOwogICAgIAogICAg
IC8vIFNhdmUgc29tZSBtZW1vcnkuIFRoaXMgaXMgTyhuKSB0byByZWJ1aWxkIGFuZCB3ZSBkbyBz
byBvbiB0aGUgZmx5LgogICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKHRoaXNTeW1ib2xU
YWJsZS0+bV9sb2NrKTsKICAgICB0aGlzU3ltYm9sVGFibGUtPm1fbG9jYWxUb0VudHJ5ID0gbnVs
bHB0cjsKIH0KIAotU3ltYm9sVGFibGU6OldhdGNocG9pbnRDbGVhbnVwOjpXYXRjaHBvaW50Q2xl
YW51cChTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUpCi0gICAgOiBtX3N5bWJvbFRhYmxlKHN5bWJv
bFRhYmxlKQotewotfQotCi1TeW1ib2xUYWJsZTo6V2F0Y2hwb2ludENsZWFudXA6On5XYXRjaHBv
aW50Q2xlYW51cCgpIHsgfQotCi12b2lkIFN5bWJvbFRhYmxlOjpXYXRjaHBvaW50Q2xlYW51cDo6
ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoKQotewotICAgIFN0cmluZ0ZpcmVEZXRhaWwgZGV0YWls
KCJTeW1ib2wgdGFibGUgY2xlYW4tdXAgZHVyaW5nIEdDIik7Ci0gICAgTWFwOjppdGVyYXRvciBp
dGVyID0gbV9zeW1ib2xUYWJsZS0+bV9tYXAuYmVnaW4oKTsKLSAgICBNYXA6Oml0ZXJhdG9yIGVu
ZCA9IG1fc3ltYm9sVGFibGUtPm1fbWFwLmVuZCgpOwotICAgIGZvciAoOyBpdGVyICE9IGVuZDsg
KytpdGVyKSB7Ci0gICAgICAgIGlmIChWYXJpYWJsZVdhdGNocG9pbnRTZXQqIHNldCA9IGl0ZXIt
PnZhbHVlLndhdGNocG9pbnRTZXQoKSkKLSAgICAgICAgICAgIHNldC0+ZmluYWxpemVVbmNvbmRp
dGlvbmFsbHkoZGV0YWlsKTsKLSAgICB9Ci19Ci0KIGNvbnN0IFN5bWJvbFRhYmxlOjpMb2NhbFRv
RW50cnlWZWMmIFN5bWJvbFRhYmxlOjpsb2NhbFRvRW50cnkoY29uc3QgQ29uY3VycmVudEpJVExv
Y2tlciYpCiB7CiAgICAgaWYgKFVOTElLRUxZKCFtX2xvY2FsVG9FbnRyeSkpIHsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuaAkocmV2aXNpb24gMTgy
NDk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuaAkod29y
a2luZyBjb3B5KQpAQCAtMzEsMTcgKzMxLDIwIEBACiAKICNpbmNsdWRlICJDb25jdXJyZW50SklU
TG9jay5oIgogI2luY2x1ZGUgIkNvbnN0YW50TW9kZS5oIgorI2luY2x1ZGUgIkluZmVycmVkVmFs
dWUuaCIKICNpbmNsdWRlICJKU09iamVjdC5oIgogI2luY2x1ZGUgIlNjb3BlZEFyZ3VtZW50c1Rh
YmxlLmgiCiAjaW5jbHVkZSAiVHlwZUxvY2F0aW9uLmgiCiAjaW5jbHVkZSAiVmFyT2Zmc2V0Lmgi
Ci0jaW5jbHVkZSAiVmFyaWFibGVXYXRjaHBvaW50U2V0LmgiCisjaW5jbHVkZSAiV2F0Y2hwb2lu
dC5oIgogI2luY2x1ZGUgPG1lbW9yeT4KICNpbmNsdWRlIDx3dGYvSGFzaFRyYWl0cy5oPgogI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0ltcGwuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNz
IFN5bWJvbFRhYmxlOworCiBzdGF0aWMgQUxXQVlTX0lOTElORSBpbnQgbWlzc2luZ1N5bWJvbE1h
cmtlcigpIHsgcmV0dXJuIHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCk7IH0KIAogLy8g
VGhlIGJpdCB0d2lkZGxpbmcgaW4gdGhpcyBjbGFzcyBhc3N1bWVzIHRoYXQgZXZlcnkgcmVnaXN0
ZXIgaW5kZXggaXMgYQpAQCAtNjMsMTEgKzY2LDExIEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIGlu
dCBtaXNzaW5nU3ltYm9sTWEKIC8vIGNvdW50ZWQgcG9pbnRlciB0byBhIHNoYXJlZCBXYXRjaHBv
aW50U2V0LiBUaHVzLCBpbi1wbGFjZSBlZGl0cyBvZiB0aGUKIC8vIFdhdGNocG9pbnRTZXQgd2ls
bCBtYW5pZmVzdCBpbiBhbGwgY29waWVzLiBIZXJlJ3MgYSBwaWN0dXJlOgogLy8KLS8vIFN5bWJv
bFRhYmxlRW50cnkgLS0+IEZhdEVudHJ5IC0tPiBWYXJpYWJsZVdhdGNocG9pbnRTZXQKKy8vIFN5
bWJvbFRhYmxlRW50cnkgLS0+IEZhdEVudHJ5IC0tPiBXYXRjaHBvaW50U2V0CiAvLwogLy8gSWYg
eW91IG1ha2UgYSBjb3B5IG9mIGEgU3ltYm9sVGFibGVFbnRyeSwgeW91IHdpbGwgaGF2ZToKIC8v
Ci0vLyBvcmlnaW5hbDogU3ltYm9sVGFibGVFbnRyeSAtLT4gRmF0RW50cnkgLS0+IFZhcmlhYmxl
V2F0Y2hwb2ludFNldAorLy8gb3JpZ2luYWw6IFN5bWJvbFRhYmxlRW50cnkgLS0+IEZhdEVudHJ5
IC0tPiBXYXRjaHBvaW50U2V0CiAvLyBjb3B5OiAgICAgU3ltYm9sVGFibGVFbnRyeSAtLT4gRmF0
RW50cnkgLS0tLS1eCiAKIHN0cnVjdCBTeW1ib2xUYWJsZUVudHJ5IHsKQEAgLTI2MCwzMiArMjYz
LDQ0IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGJpdHMoKSAmIERvbnRFbnVtRmxhZzsKICAg
ICB9CiAgICAgCi0gICAgSlNWYWx1ZSBpbmZlcnJlZFZhbHVlKCk7Ci0KICAgICB2b2lkIGRpc2Fi
bGVXYXRjaGluZygpCiAgICAgeworICAgICAgICBpZiAoV2F0Y2hwb2ludFNldCogc2V0ID0gd2F0
Y2hwb2ludFNldCgpKQorICAgICAgICAgICAgc2V0LT5pbnZhbGlkYXRlKCJEaXNhYmxpbmcgd2F0
Y2hpbmcgaW4gc3ltYm9sIHRhYmxlIik7CiAgICAgICAgIGlmICh2YXJPZmZzZXQoKS5pc1Njb3Bl
KCkpCiAgICAgICAgICAgICBwYWNrKHZhck9mZnNldCgpLCBmYWxzZSwgaXNSZWFkT25seSgpLCBp
c0RvbnRFbnVtKCkpOwogICAgIH0KICAgICAKLSAgICB2b2lkIHByZXBhcmVUb1dhdGNoKFN5bWJv
bFRhYmxlKik7CisgICAgdm9pZCBwcmVwYXJlVG9XYXRjaCgpOwogICAgIAogICAgIHZvaWQgYWRk
V2F0Y2hwb2ludChXYXRjaHBvaW50Kik7CiAgICAgCi0gICAgVmFyaWFibGVXYXRjaHBvaW50U2V0
KiB3YXRjaHBvaW50U2V0KCkKKyAgICAvLyBUaGlzIHdhdGNocG9pbnQgc2V0IGlzIGluaXRpYWxp
emVkIGNsZWFyLCBhbmQgZ29lcyB0aHJvdWdoIHRoZSBmb2xsb3dpbmcgc3RhdGUgdHJhbnNpdGlv
bnM6CisgICAgLy8gCisgICAgLy8gRmlyc3Qgd3JpdGUgdG8gdGhpcyB2YXIsIGluIGFueSBzY29w
ZSB0aGF0IGhhcyB0aGlzIHN5bWJvbCB0YWJsZTogQ2xlYXItPklzV2F0Y2hlZC4KKyAgICAvLwor
ICAgIC8vIFNlY29uZCB3cml0ZSB0byB0aGlzIHZhciwgaW4gYW55IHNjb3BlIHRoYXQgaGFzIHRo
aXMgc3ltYm9sIHRhYmxlOiBJc1dhdGNoZWQtPklzSW52YWxpZGF0ZWQuCisgICAgLy8KKyAgICAv
LyBXZSBlbnN1cmUgdGhhdCB3ZSB0b3VjaCB0aGUgc2V0IChpLmUuIHRyaWdnZXIgaXRzIHN0YXRl
IHRyYW5zaXRpb24pIGFmdGVyIHdlIGRvIHRoZSB3cml0ZS4gVGhpcworICAgIC8vIG1lYW5zIHRo
YXQgaWYgeW91J3JlIGluIHRoZSBjb21waWxlciB0aHJlYWQsIGFuZCB5b3U6CisgICAgLy8KKyAg
ICAvLyAxKSBPYnNlcnZlIHRoYXQgdGhlIHNldCBJc1dhdGNoZWQgYW5kIGNvbW1pdCB0byBhZGRp
bmcgeW91ciB3YXRjaHBvaW50LgorICAgIC8vIDIpIExvYWQgYSB2YWx1ZSBmcm9tIGFueSBzY29w
ZSB0aGF0IGhhcyB0aGlzIHdhdGNocG9pbnQgc2V0LgorICAgIC8vCisgICAgLy8gVGhlbiB5b3Ug
Y2FuIGJlIHN1cmUgdGhhdCB0aGF0IHZhbHVlIGlzIGVpdGhlciBnb2luZyB0byBiZSB0aGUgY29y
cmVjdCB2YWx1ZSBmb3IgdGhhdCB2YXIgZm9yZXZlciwKKyAgICAvLyBvciB0aGUgd2F0Y2hwb2lu
dCBzZXQgd2lsbCBpbnZhbGlkYXRlIGFuZCB5b3UnbGwgZ2V0IGZpcmVkLgorICAgIC8vCisgICAg
Ly8gSXQncyBwb3NzaWJsZSB0byB3cml0ZSBhIHByb2dyYW0gdGhhdCBmaXJzdCBjcmVhdGVzIG11
bHRpcGxlIHNjb3BlcyB3aXRoIHRoZSBzYW1lIHZhciwgYW5kIHRoZW4KKyAgICAvLyBpbml0aWFs
aXplcyB0aGF0IHZhciBpbiBqdXN0IG9uZSBvZiB0aGVtLiBUaGlzIG1lYW5zIHRoYXQgYSBjb21w
aWxhdGlvbiBjb3VsZCBjb25zdGFudC1mb2xkIHRvIG9uZQorICAgIC8vIG9mIHRoZSBzY29wZXMg
dGhhdCBzdGlsbCBoYXMgYW4gdW5kZWZpbmVkIHZhbHVlIGZvciB0aGlzIHZhcmlhYmxlLiBUaGF0
J3MgZmluZSwgYmVjYXVzZSBhdCB0aGF0CisgICAgLy8gcG9pbnQgYW55IHdyaXRlIHRvIGFueSBv
ZiB0aGUgaW5zdGFuY2VzIG9mIHRoYXQgdmFyaWFibGUgd291bGQgZmlyZSB0aGUgd2F0Y2hwb2lu
dC4KKyAgICBXYXRjaHBvaW50U2V0KiB3YXRjaHBvaW50U2V0KCkKICAgICB7CiAgICAgICAgIGlm
ICghaXNGYXQoKSkKICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICByZXR1cm4gZmF0RW50
cnkoKS0+bV93YXRjaHBvaW50cy5nZXQoKTsKICAgICB9CiAgICAgCi0gICAgQUxXQVlTX0lOTElO
RSB2b2lkIG5vdGlmeVdyaXRlKFZNJiB2bSwgSlNWYWx1ZSB2YWx1ZSwgY29uc3QgRmlyZURldGFp
bCYgZGV0YWlsKQotICAgIHsKLSAgICAgICAgaWYgKExJS0VMWSghaXNGYXQoKSkpCi0gICAgICAg
ICAgICByZXR1cm47Ci0gICAgICAgIG5vdGlmeVdyaXRlU2xvdyh2bSwgdmFsdWUsIGRldGFpbCk7
Ci0gICAgfQotICAgIAogcHJpdmF0ZToKICAgICBzdGF0aWMgY29uc3QgaW50cHRyX3QgU2xpbUZs
YWcgPSAweDE7CiAgICAgc3RhdGljIGNvbnN0IGludHB0cl90IFJlYWRPbmx5RmxhZyA9IDB4MjsK
QEAgLTMwOCw3ICszMjMsNyBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgaW50cHRyX3Qg
bV9iaXRzOyAvLyBhbHdheXMgaGFzIEZhdEZsYWcgc2V0IGFuZCBleGFjdGx5IG1hdGNoZXMgd2hh
dCB0aGUgYml0cyB3b3VsZCBoYXZlIGJlZW4gaWYgdGhpcyB3YXNuJ3QgZmF0LgogICAgICAgICAK
LSAgICAgICAgUmVmUHRyPFZhcmlhYmxlV2F0Y2hwb2ludFNldD4gbV93YXRjaHBvaW50czsKKyAg
ICAgICAgUmVmUHRyPFdhdGNocG9pbnRTZXQ+IG1fd2F0Y2hwb2ludHM7CiAgICAgfTsKICAgICAK
ICAgICBTeW1ib2xUYWJsZUVudHJ5JiBjb3B5U2xvdyhjb25zdCBTeW1ib2xUYWJsZUVudHJ5Jik7
CkBAIC02MzcsNiArNjUyLDggQEAgcHVibGljOgogICAgIFN5bWJvbFRhYmxlKiBjbG9uZVNjb3Bl
UGFydChWTSYpOwogCiAgICAgdm9pZCBwcmVwYXJlRm9yVHlwZVByb2ZpbGluZyhjb25zdCBDb25j
dXJyZW50SklUTG9ja2VyJik7CisgICAgCisgICAgSW5mZXJyZWRWYWx1ZSogc2luZ2xldG9uU2Nv
cGUoKSB7IHJldHVybiBtX3NpbmdsZXRvblNjb3BlLmdldCgpOyB9CiAKICAgICBzdGF0aWMgdm9p
ZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAKQEAgLTY0NiwyMCArNjYz
LDEwIEBAIHByb3RlY3RlZDoKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxh
Z3MgPSBTdHJ1Y3R1cmVJc0ltbW9ydGFsIHwgQmFzZTo6U3RydWN0dXJlRmxhZ3M7CiAKIHByaXZh
dGU6Ci0gICAgY2xhc3MgV2F0Y2hwb2ludENsZWFudXAgOiBwdWJsaWMgVW5jb25kaXRpb25hbEZp
bmFsaXplciB7Ci0gICAgcHVibGljOgotICAgICAgICBXYXRjaHBvaW50Q2xlYW51cChTeW1ib2xU
YWJsZSopOwotICAgICAgICB2aXJ0dWFsIH5XYXRjaHBvaW50Q2xlYW51cCgpOwotICAgICAgICAK
LSAgICBwcm90ZWN0ZWQ6Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBmaW5hbGl6ZVVuY29uZGl0aW9u
YWxseSgpIG92ZXJyaWRlOwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgU3ltYm9sVGFibGUqIG1f
c3ltYm9sVGFibGU7Ci0gICAgfTsKLSAgICAKICAgICBKU19FWFBPUlRfUFJJVkFURSBTeW1ib2xU
YWJsZShWTSYpOwogICAgIH5TeW1ib2xUYWJsZSgpOworICAgIAorICAgIHZvaWQgZmluaXNoQ3Jl
YXRpb24oVk0mKTsKIAogICAgIE1hcCBtX21hcDsKICAgICBTY29wZU9mZnNldCBtX21heFNjb3Bl
T2Zmc2V0OwpAQCAtNjc0LDEzICs2ODEsMTEgQEAgcHJpdmF0ZToKICAgICBib29sIG1fdXNlc05v
blN0cmljdEV2YWw7CiAgICAgCiAgICAgV3JpdGVCYXJyaWVyPFNjb3BlZEFyZ3VtZW50c1RhYmxl
PiBtX2FyZ3VtZW50czsKKyAgICBXcml0ZUJhcnJpZXI8SW5mZXJyZWRWYWx1ZT4gbV9zaW5nbGV0
b25TY29wZTsKICAgICAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8V2F0Y2hwb2ludENsZWFudXA+IG1f
d2F0Y2hwb2ludENsZWFudXA7CiAgICAgc3RkOjp1bmlxdWVfcHRyPExvY2FsVG9FbnRyeVZlYz4g
bV9sb2NhbFRvRW50cnk7CiAKIHB1YmxpYzoKLSAgICBJbmxpbmVXYXRjaHBvaW50U2V0IG1fZnVu
Y3Rpb25FbnRlcmVkT25jZTsKLSAgICAKICAgICBtdXRhYmxlIENvbmN1cnJlbnRKSVRMb2NrIG1f
bG9jazsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVQcm9m
aWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlw
ZVByb2ZpbGVyLmNwcAkocmV2aXNpb24gMTgyNDk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvVHlwZVByb2ZpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBA
QAogCiAjaW5jbHVkZSAiSW5zcGVjdG9yUHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSAiVHlw
ZUxvY2F0aW9uLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiBuYW1l
c3BhY2UgSlNDIHsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkocmV2
aXNpb24gMTgyNDk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0yMzcsNiArMjM3LDcgQEAgVk06OlZNKFZNVHlwZSB2bVR5cGUsIEhl
YXBUeXBlIGhlYXBUeXBlKQogICAgIHVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2tTdHJ1Y3R1cmUu
c2V0KCp0aGlzLCBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrOjpjcmVhdGVTdHJ1Y3R1cmUoKnRo
aXMsIDAsIGpzTnVsbCgpKSk7CiAgICAgcHJvcGVydHlUYWJsZVN0cnVjdHVyZS5zZXQoKnRoaXMs
IFByb3BlcnR5VGFibGU6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKICAg
ICB3ZWFrTWFwRGF0YVN0cnVjdHVyZS5zZXQoKnRoaXMsIFdlYWtNYXBEYXRhOjpjcmVhdGVTdHJ1
Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CisgICAgaW5mZXJyZWRWYWx1ZVN0cnVjdHVyZS5z
ZXQoKnRoaXMsIEluZmVycmVkVmFsdWU6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxs
KCkpKTsKICNpZiBFTkFCTEUoUFJPTUlTRVMpCiAgICAgcHJvbWlzZURlZmVycmVkU3RydWN0dXJl
LnNldCgqdGhpcywgSlNQcm9taXNlRGVmZXJyZWQ6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwg
anNOdWxsKCkpKTsKICAgICBwcm9taXNlUmVhY3Rpb25TdHJ1Y3R1cmUuc2V0KCp0aGlzLCBKU1By
b21pc2VSZWFjdGlvbjo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCShyZXZpc2lvbiAxODI0OTgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNzAsNiAr
MjcwLDcgQEAgcHVibGljOgogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHVubGlua2VkRnVuY3Rpb25D
b2RlQmxvY2tTdHJ1Y3R1cmU7CiAgICAgU3Ryb25nPFN0cnVjdHVyZT4gcHJvcGVydHlUYWJsZVN0
cnVjdHVyZTsKICAgICBTdHJvbmc8U3RydWN0dXJlPiB3ZWFrTWFwRGF0YVN0cnVjdHVyZTsKKyAg
ICBTdHJvbmc8U3RydWN0dXJlPiBpbmZlcnJlZFZhbHVlU3RydWN0dXJlOwogI2lmIEVOQUJMRShQ
Uk9NSVNFUykKICAgICBTdHJvbmc8U3RydWN0dXJlPiBwcm9taXNlRGVmZXJyZWRTdHJ1Y3R1cmU7
CiAgICAgU3Ryb25nPFN0cnVjdHVyZT4gcHJvbWlzZVJlYWN0aW9uU3RydWN0dXJlOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9pbmZlci11bmluaXRpYWxpemVkLWNs
b3N1cmUtdmFyLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9z
dHJlc3MvaW5mZXItdW5pbml0aWFsaXplZC1jbG9zdXJlLXZhci5qcwkocmV2aXNpb24gMCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvaW5mZXItdW5pbml0aWFsaXplZC1j
bG9zdXJlLXZhci5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI2IEBACitmdW5jdGlvbiBm
b28ocCkgeworICAgIHZhciB4OworICAgIAorICAgIG5vSW5saW5lKGYpOworICAgIAorICAgIGlm
IChwKSB7CisgICAgICAgIHZhciBmID0gZnVuY3Rpb24oKSB7IHJldHVybiB4OyB9CisgICAgICAg
IAorICAgICAgICBmb28oZmFsc2UpOworICAgICAgICAKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCAxMDAwMDsgKytpKSB7CisgICAgICAgICAgICB2YXIgcmVzdWx0ID0gZigpOworICAgICAg
ICAgICAgaWYgKHJlc3VsdCAhPT0gdm9pZCAwKQorICAgICAgICAgICAgICAgIHRocm93ICJFcnJv
cjogYmFkIHJlc3VsdCAoMSk6ICIgKyByZXN1bHQ7CisgICAgICAgIH0KKyAgICAgICAgCisgICAg
ICAgIHggPSA0MzsKKyAgICAgICAgCisgICAgICAgIHZhciByZXN1bHQgPSBmKCk7CisgICAgICAg
IGlmIChyZXN1bHQgIT0gNDMpCisgICAgICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQg
KDIpOiAiICsgcmVzdWx0OworICAgIH0gZWxzZQorICAgICAgICB4ID0gNDI7Cit9CisKK2Zvbyh0
cnVlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3Mvc2luZ2xldG9u
LXNjb3BlLXRoZW4tb3ZlcndyaXRlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS90ZXN0cy9zdHJlc3Mvc2luZ2xldG9uLXNjb3BlLXRoZW4tb3ZlcndyaXRlLmpzCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9zaW5nbGV0b24t
c2NvcGUtdGhlbi1vdmVyd3JpdGUuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMCBAQAor
ZnVuY3Rpb24gZm9vKGEpIHsKKyAgICB2YXIgeCA9IGEgKyAxOworICAgIHZhciBmID0gZnVuY3Rp
b24oYSkgeworICAgICAgICByZXR1cm4geCArIGE7CisgICAgfTsKKyAgICBub0lubGluZShmKTsK
KyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwOyArK2kpIHsKKyAgICAgICAgdmFyIHJlc3Vs
dCA9IGYoaSk7CisgICAgICAgIGlmIChyZXN1bHQgIT0gYSArIDEgKyBpKQorICAgICAgICAgICAg
dGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0OiAiICsgcmVzdWx0OworICAgIH0KKyAgICB4ID0gOTk5
OworICAgIHZhciByZXN1bHQgPSBmKDEpOworICAgIGlmIChyZXN1bHQgIT0gOTk5ICsgMSkKKyAg
ICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0OiAiICsgcmVzdWx0OworfQorCitub0lubGlu
ZShmb28pOworZm9yICh2YXIgaSA9IDA7IGkgPCAzOyArK2kpCisgICAgZm9vKDQyICsgaSk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3NpbmdsZXRvbi1zY29wZS10
aGVuLXJlYWxsb2MtYW5kLW92ZXJ3cml0ZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvdGVzdHMvc3RyZXNzL3NpbmdsZXRvbi1zY29wZS10aGVuLXJlYWxsb2MtYW5kLW92
ZXJ3cml0ZS5qcwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9z
dHJlc3Mvc2luZ2xldG9uLXNjb3BlLXRoZW4tcmVhbGxvYy1hbmQtb3ZlcndyaXRlLmpzCSh3b3Jr
aW5nIGNvcHkpCkBAIC0wLDAgKzEsMjAgQEAKK2Z1bmN0aW9uIGZvbyhhKSB7CisgICAgdmFyIHgg
PSBhICsgMTsKKyAgICByZXR1cm4gZnVuY3Rpb24oYSkgeworICAgICAgICByZXR1cm4geCArIGE7
CisgICAgfTsKK30KKwordmFyIGYgPSBmb28oNDIpOworbm9JbmxpbmUoZik7CisKK2ZvciAodmFy
IGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgeworICAgIHZhciByZXN1bHQgPSBmKGkpOworICAgIGlm
IChyZXN1bHQgIT0gNDIgKyAxICsgaSkKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0
OiAiICsgcmVzdWx0OworfQorCit2YXIgZiA9IGZvbyg0Myk7Cit2YXIgcmVzdWx0ID0gZigxKTsK
K2lmIChyZXN1bHQgIT0gNDMgKyAxICsgMSkKKyAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQ6
ICIgKyByZXN1bHQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3Np
bmdsZXRvbi1zY29wZS10aGVuLXJlYWxsb2MuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9zaW5nbGV0b24tc2NvcGUtdGhlbi1yZWFsbG9jLmpzCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9zaW5nbGV0
b24tc2NvcGUtdGhlbi1yZWFsbG9jLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjAgQEAK
K2Z1bmN0aW9uIGZvbyhhKSB7CisgICAgdmFyIHggPSBhICsgMTsKKyAgICByZXR1cm4gZnVuY3Rp
b24oYSkgeworICAgICAgICByZXR1cm4geCArPSBhOworICAgIH07Cit9CisKK3ZhciBmID0gZm9v
KDQyKTsKK25vSW5saW5lKGYpOworCitmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwOyArK2kpIHsK
KyAgICB2YXIgcmVzdWx0ID0gZigxKTsKKyAgICBpZiAocmVzdWx0ICE9IDQyICsgMSArIGkgKyAx
KQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQ6ICIgKyByZXN1bHQ7Cit9CisKK3Zh
ciBmID0gZm9vKDQzKTsKK3ZhciByZXN1bHQgPSBmKDEpOworaWYgKHJlc3VsdCAhPSA0MyArIDEg
KyAxKQorICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdDogIiArIHJlc3VsdDsKSW5kZXg6IExh
eW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJ
KHJldmlzaW9uIDE4MjQ5OCkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5
KQpAQCAtMSwzICsxLDIwIEBACisyMDE1LTA0LTA3ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBs
ZS5jb20+CisKKyAgICAgICAgSlNDIHNob3VsZCBkZXRlY3Qgc2luZ2xldG9uIGZ1bmN0aW9ucwor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQzMjMyCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTWljaGFlbCBTYWJvZmYuCisKKyAgICAgICAgKiBqcy9yZWdy
ZXNzL2NyZWF0ZS1sb3RzLW9mLWZ1bmN0aW9ucy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAg
ICAqIGpzL3JlZ3Jlc3MvY3JlYXRlLWxvdHMtb2YtZnVuY3Rpb25zLmh0bWw6IEFkZGVkLgorICAg
ICAgICAqIGpzL3JlZ3Jlc3Mvbm8taW5saW5lLWNvbnN0cnVjdG9yLWV4cGVjdGVkLnR4dDogQWRk
ZWQuCisgICAgICAgICoganMvcmVncmVzcy9uby1pbmxpbmUtY29uc3RydWN0b3IuaHRtbDogQWRk
ZWQuCisgICAgICAgICoganMvcmVncmVzcy9zY3JpcHQtdGVzdHMvY3JlYXRlLWxvdHMtb2YtZnVu
Y3Rpb25zLmpzOiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9uby1p
bmxpbmUtY29uc3RydWN0b3IuanM6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3Mvc2NyaXB0
LXRlc3RzL3NpbmdsZXRvbi1zY29wZS5qczogQWRkZWQuCisgICAgICAgICoganMvcmVncmVzcy9z
aW5nbGV0b24tc2NvcGUtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNz
L3NpbmdsZXRvbi1zY29wZS5odG1sOiBBZGRlZC4KKwogMjAxNS0wNC0wNyAgTWF0dGhldyBNaXJt
YW4gIDxtbWlybWFuQGFwcGxlLmNvbT4KIAogICAgICAgICBTb3VyY2UgYW5kIHN0YWNrIGluZm9y
bWF0aW9uIHNob3VsZCBnZXQgYXBwZW5kZWQgb25seSB0byBuYXRpdmUgZXJyb3JzCkluZGV4OiBM
YXlvdXRUZXN0cy9qcy9yZWdyZXNzL2NyZWF0ZS1sb3RzLW9mLWZ1bmN0aW9ucy1leHBlY3RlZC50
eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9jcmVhdGUtbG90cy1vZi1m
dW5jdGlvbnMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVn
cmVzcy9jcmVhdGUtbG90cy1vZi1mdW5jdGlvbnMtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMTAgQEAKK0pTUmVncmVzcy9jcmVhdGUtbG90cy1vZi1mdW5jdGlvbnMKKwor
T24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9s
bG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1Mgbm8gZXhjZXB0aW9uIHRocm93bgor
UEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6
IExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvY3JlYXRlLWxvdHMtb2YtZnVuY3Rpb25zLmh0bWwKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9jcmVhdGUtbG90cy1vZi1mdW5jdGlv
bnMuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvY3JlYXRlLWxv
dHMtb2YtZnVuY3Rpb25zLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMiBAQAorPCFE
T0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVh
ZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0
PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3JlZ3Jlc3Mt
cHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvY3JlYXRlLWxvdHMt
b2YtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMv
cmVncmVzcy1wb3N0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMv
anMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91
dFRlc3RzL2pzL3JlZ3Jlc3Mvbm8taW5saW5lLWNvbnN0cnVjdG9yLWV4cGVjdGVkLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL25vLWlubGluZS1jb25zdHJ1Y3Rvci1l
eHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL25vLWlu
bGluZS1jb25zdHJ1Y3Rvci1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwx
MCBAQAorSlNSZWdyZXNzL25vLWlubGluZS1jb25zdHJ1Y3RvcgorCitPbiBzdWNjZXNzLCB5b3Ug
d2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBD
T01QTEVURSIuCisKKworUEFTUyBubyBleGNlcHRpb24gdGhyb3duCitQQVNTIHN1Y2Nlc3NmdWxs
eVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvanMv
cmVncmVzcy9uby1pbmxpbmUtY29uc3RydWN0b3IuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9qcy9yZWdyZXNzL25vLWlubGluZS1jb25zdHJ1Y3Rvci5odG1sCShyZXZpc2lvbiAwKQor
KysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9uby1pbmxpbmUtY29uc3RydWN0b3IuaHRtbAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDEyIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lF
VEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jl
c291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3Jp
cHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcmVncmVzcy1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlw
dCBzcmM9InNjcmlwdC10ZXN0cy9uby1pbmxpbmUtY29uc3RydWN0b3IuanMiPjwvc2NyaXB0Pgor
PHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNzLXBvc3QuanMiPjwvc2NyaXB0Pgor
PHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0Pgor
PC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zaW5nbGV0b24t
c2NvcGUtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mv
c2luZ2xldG9uLXNjb3BlLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3Rz
L2pzL3JlZ3Jlc3Mvc2luZ2xldG9uLXNjb3BlLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDEwIEBACitKU1JlZ3Jlc3Mvc2luZ2xldG9uLXNjb3BlCisKK09uIHN1Y2Nlc3Ms
IHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJU
RVNUIENPTVBMRVRFIi4KKworCitQQVNTIG5vIGV4Y2VwdGlvbiB0aHJvd24KK1BBU1Mgc3VjY2Vz
c2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0
cy9qcy9yZWdyZXNzL3NpbmdsZXRvbi1zY29wZS5odG1sCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL2pzL3JlZ3Jlc3Mvc2luZ2xldG9uLXNjb3BlLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlv
dXRUZXN0cy9qcy9yZWdyZXNzL3NpbmdsZXRvbi1zY29wZS5odG1sCSh3b3JraW5nIGNvcHkpCkBA
IC0wLDAgKzEsMTIgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwv
L0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRl
c3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdCBzcmM9Ii4uLy4u
L3Jlc291cmNlcy9yZWdyZXNzLXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ic2NyaXB0
LXRlc3RzL3NpbmdsZXRvbi1zY29wZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4v
cmVzb3VyY2VzL3JlZ3Jlc3MtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4v
cmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+Cklu
ZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9jcmVhdGUtbG90cy1vZi1m
dW5jdGlvbnMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQt
dGVzdHMvY3JlYXRlLWxvdHMtb2YtZnVuY3Rpb25zLmpzCShyZXZpc2lvbiAwKQorKysgTGF5b3V0
VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvY3JlYXRlLWxvdHMtb2YtZnVuY3Rpb25zLmpz
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIgQEAKK2Z1bmN0aW9uIGZvbygpIHsKKyAgICB2
YXIgcmVzdWx0ID0gMDsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDsgKytpKQorICAgICAg
ICByZXN1bHQgKz0gKGZ1bmN0aW9uKCkgeyByZXR1cm4gaSB9KSgpOworICAgIHJldHVybiByZXN1
bHQ7Cit9CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgeworICAgIHZhciByZXN1
bHQgPSBmb28oKTsKKyAgICBpZiAocmVzdWx0ICE9IDQ5NTApCisgICAgICAgIHRocm93ICJFcnJv
cjogYmFkIHJlc3VsdDogIiArIHJlc3VsdDsKK30KSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jl
c3Mvc2NyaXB0LXRlc3RzL25vLWlubGluZS1jb25zdHJ1Y3Rvci5qcwo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBM
YXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9uby1pbmxpbmUtY29uc3RydWN0b3Iu
anMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9u
by1pbmxpbmUtY29uc3RydWN0b3IuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMyBAQAor
ZnVuY3Rpb24gRm9vKCkgeworICAgIHZhciBvID0ge2Y6e2Y6e2Y6e2Y6NDJ9fX19OworICAgIHRo
aXMuZiA9IDQyOworfQorCitub0lubGluZShGb28pOworCitmb3IgKHZhciBpID0gMDsgaSA8IDMw
MDAwMDA7ICsraSkgeworICAgIHZhciByZXN1bHQgPSBuZXcgRm9vKCk7CisgICAgaWYgKHJlc3Vs
dC5mICE9IDQyKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQ6ICIgKyByZXN1bHQu
ZjsKK30KKwpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvc2luZ2xl
dG9uLXNjb3BlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0
LXRlc3RzL3NpbmdsZXRvbi1zY29wZS5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pz
L3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL3NpbmdsZXRvbi1zY29wZS5qcwkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDE2IEBACitmdW5jdGlvbiBmb28oKSB7CisgICAgdmFyIHggPSA0MjsKKyAgICB2
YXIgeSA9IDQzOworICAgIHJldHVybiBmdW5jdGlvbih6KSB7CisgICAgICAgIHZhciByZXN1bHQg
PSB4ICsgeTsKKyAgICAgICAgeCArPSB6OworICAgICAgICB5ICs9IHo7CisgICAgICAgIHJldHVy
biByZXN1bHQ7CisgICAgfQorfQorCit2YXIgZiA9IGZvbygpOworbm9JbmxpbmUoZik7CisKK2Zv
ciAodmFyIGkgPSAwOyBpIDwgMTAwMDAwMDA7ICsraSkKKyAgICBmKDEpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>250374</attachid>
            <date>2015-04-08 12:35:15 -0700</date>
            <delta_ts>2015-04-08 14:14:57 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>167057</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTgyNTU5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI1NyBA
QAorMjAxNS0wNC0wOCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEpTQyBzaG91bGQgZGV0ZWN0IHNpbmdsZXRvbiBmdW5jdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MzIzMgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEhKS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgc3RhcnRlZCBvdXQg
YXMgYW4gYXR0ZW1wdCB0byBtYWtlIGNvbnN0cnVjdG9ycyBmYXN0ZXIgYnkgZGV0ZWN0aW5nIHdo
ZW4gYSBjb25zdHJ1Y3RvciBpcyBhCisgICAgICAgIHNpbmdsZXRvbi4gVGhlIGlkZWEgaXMgdGhh
dCBlYWNoIEZ1bmN0aW9uRXhlY3V0YWJsZSBoYXMgYSBWYXJpYWJsZVdhdGNocG9pbnRTZXQgLSBh
IHdhdGNocG9pbnQKKyAgICAgICAgYWxvbmcgd2l0aCBhbiBpbmZlcnJlZCB2YWx1ZSAtIHRoYXQg
ZGV0ZWN0cyBpZiBvbmx5IG9uZSBKU0Z1bmN0aW9uIGhhcyBiZWVuIGFsbG9jYXRlZCBmb3IgdGhh
dAorICAgICAgICBleGVjdXRhYmxlLCBhbmQgaWYgc28sIHdoYXQgdGhhdCBKU0Z1bmN0aW9uIGlz
LiBUaGVuLCBpbnNpZGUgdGhlIGNvZGUgZm9yIHRoZSBGdW5jdGlvbkV4ZWN1dGFibGUsCisgICAg
ICAgIGlmIHRoZSB3YXRjaHBvaW50IHNldCBoYXMgYW4gaW5mZXJyZWQgdmFsdWUgKGkuZS4gaXQn
cyBiZWVuIGluaXRpYWxpemVkIGFuZCBpdCBpcyBzdGlsbCB2YWxpZCksCisgICAgICAgIHdlIGNh
biBjb25zdGFudC1mb2xkIEdldENhbGxlZS4KKyAgICAgICAgCisgICAgICAgIFVuZm9ydHVuYXRl
bHksIGNvbnN0cnVjdG9ycyBkb24ndCB1c2UgR2V0Q2FsbGVlIGFueW1vcmUsIHNvIHRoYXQgZGlk
bid0IHBhbiBvdXQuIEJ1dCBpbiB0aGUKKyAgICAgICAgcHJvY2VzcyBJIHJlYWxpemVkIGEgYnVu
Y2ggb2YgdGhpbmdzOgorICAgICAgICAKKyAgICAgICAgLSBUaGlzIGFsbG93cyB1cyB0byBjb21w
bGV0ZWx5IGVsaW1pbmF0ZSB0aGUgR2V0Q2FsbGVlL0dldFNjb3BlIHNlcXVlbmNlIHRoYXQgd2Ug
c3RpbGwgc29tZXRpbWVzCisgICAgICAgICAgaGFkIGV2ZW4gaW4gY29kZSB3aGVyZSBvdXIgc2lu
Z2xldG9uLWNsb3N1cmUgZGV0ZWN0aW9uIHdvcmtlZC4gVGhhdCdzIGJlY2F1c2Ugc2luZ2xldG9u
LWNsb3N1cmUKKyAgICAgICAgICBpbmZlcmVuY2Ugd29ya2VkIGF0IHRoZSBvcF9yZXNvbHZlX3Nj
b3BlLCBhbmQgdGhhdCBvcF9yZXNvbHZlX3Njb3BlIHN0aWxsIG5lZWRlZCB0byBrZWVwIGFsaXZl
CisgICAgICAgICAgdGhlIGluY29taW5nIHNjb3BlIGluIGNhc2Ugd2UgT1NSIGV4aXQuIEJ1dCBi
eSBjb25zdGFudC1mb2xkaW5nIEdldENhbGxlZSwgdGhhdCBzZXF1ZW5jZQorICAgICAgICAgIGRp
c2FwcGVhcnMuIE9TUiBleGl0IGNhbiByZW1hdGVyaWFsaXplIHRoZSBjYWxsZWUgb3IgdGhlIHNj
b3BlIGJ5IGp1c3Qga25vd2luZyB0aGVpciBjb25zdGFudAorICAgICAgICAgIHZhbHVlcy4KKyAg
ICAgICAgICAKKyAgICAgICAgLSBTaW5nbGV0b24gZGV0ZWN0aW9uIHNob3VsZCBiZSBhIHJldXNh
YmxlIHRoaW5nLiBTbywgSSBnb3QgcmlkIG9mIFZhcmlhYmxlV2F0Y2hwb2ludFNldCBhbmQKKyAg
ICAgICAgICBjcmVhdGVkIEluZmVycmVkVmFsdWUuIEluZmVycmVkVmFsdWUgaXMgYSBjZWxsLCBz
byBpdCBjYW4gaGFuZGxlIGl0cyBvd24gR0MgbWFnaWMuCisgICAgICAgICAgRnVuY3Rpb25FeGVj
dXRhYmxlIHVzZXMgYW4gSW5mZXJyZWRWYWx1ZSB0byB0ZWxsIHlvdSBhYm91dCBzaW5nbGV0b24g
SlNGdW5jdGlvbnMuCisgICAgICAgIAorICAgICAgICAtIFRoZSBvbGQgc2luZ2xldG9uLXNjb3Bl
IGRldGVjdGlvbiBpbiBvcF9yZXNvbHZlX3Njb3BlIGlzIGJldHRlciBhYnN0cmFjdGVkIGFzIGEg
U3ltYm9sVGFibGUKKyAgICAgICAgICBkZXRlY3RpbmcgYSBzaW5nbGV0b24gSlNTeW1ib2xUYWJs
ZU9iamVjdC4gU28sIFN5bWJvbFRhYmxlIHVzZXMgYW4gSW5mZXJyZWRWYWx1ZSB0byB0ZWxsIHlv
dQorICAgICAgICAgIGFib3V0IHNpbmdsZXRvbiBKU1N5bWJvbFRhYmxlT2JqZWN0cy4gSXQncyBj
dXJpb3VzIHRoYXQgd2Ugd2FudCB0byBoYXZlIHNpbmdsZXRvbiBkZXRlY3Rpb24gaW4KKyAgICAg
ICAgICBTeW1ib2xUYWJsZSBpZiB3ZSBhbHJlYWR5IGhhdmUgaXQgaW4gRnVuY3Rpb25FeGVjdXRh
YmxlLiBUaGlzIGNvbWVzIGludG8gcGxheSBpbiB0d28gd2F5cy4KKyAgICAgICAgICBGaXJzdCwg
aXQgbWVhbnMgdGhhdCB0aGUgREZHIGNhbiByZWFsaXplIHNvb25lciB0aGF0IGEgcmVzb2x2ZV9z
Y29wZSByZXNvbHZlcyB0byBhIGNvbnN0YW50CisgICAgICAgICAgc2NvcGUuIFRocyBzYXZlcyBj
b21waWxlIHRpbWVzIGFuZCBpdCBhbGxvd3MgcHJlZGljdGlvbiBwcm9wYWdhdGlvbiB0byBiZW5l
Zml0IGZyb20gdGhlCisgICAgICAgICAgY29uc3RhbnQgZm9sZGluZy4gU2Vjb25kLCBpdCBtZWFu
cyB0aGF0IHdlIHdpbGwgZGV0ZWN0IGEgc2luZ2x0b24gc2NvcGUgZXZlbiBpZiBpdCBpcworICAg
ICAgICAgIHJlZmVyZW5jZWQgZnJvbSBhIG5vbi1zaW5nbGV0b24gc2NvcGUgdGhhdCBpcyBuZWFy
ZXIgdG8gdXMgaW4gdGhlIHNjb3BlIGNoYWluLiBUaGlzIHJlZmFjdG9yaW5nCisgICAgICAgICAg
YWxsb3dzIHVzIHRvIGVsaW1pbmF0ZSB0aGUgZnVuY3Rpb24gcmVlbnRyeSB3YXRjaHBvaW50Lgor
ICAgICAgICAKKyAgICAgICAgLSBUaGlzIGFsbG93cyB1cyB0byB1c2UgYSBub3JtYWwgV2F0Y2hw
b2ludFNldCwgaW5zdGVhZCBvZiBhIFZhcmlhYmxlV2F0Y2hwb2ludFNldCwgZm9yIGluZmVycmlu
ZworICAgICAgICAgIGNvbnN0YW50IHZhbHVlcyBpbiBzY29wZXMuIFByZXZpb3VzbHkgd2hlbiB0
aGUgREZHIGluZmVycmVkIHRoYXQgYSBjbG9zdXJlIHZhcmlhYmxlIHdhcworICAgICAgICAgIGNv
bnN0YW50LCBpdCB3b3VsZG4ndCBrbm93IHdoaWNoIGNsb3N1cmUgdGhhdCB2YXJpYWJsZSB3YXMg
aW4gYW5kIHNvIGl0IGNvdWxkbid0IGp1c3QgbG9hZCB0aGF0CisgICAgICAgICAgdmFsdWUuIEJ1
dCBub3cgd2UgYXJlIGZpcnN0IGluZmVycmluZyB0aGF0IHRoZSBmdW5jdGlvbiBpcyBhIHNpbmds
ZXRvbiwgd2hpY2ggbWVhbnMgdGhhdCB3ZQorICAgICAgICAgIGtub3cgZXhhY3RseSB3aGF0IHNj
b3BlIGl0IHBvaW50cyB0bywgYW5kIHdlIGNhbiBsb2FkIHRoZSB2YWx1ZSBmcm9tIHRoZSBzY29w
ZS4gVXNpbmcgYQorICAgICAgICAgIFdhdGNocG9pbnRTZXQgaW5zdGVhZCBvZiBhIFZhcmlhYmxl
V2F0Y2hwb2ludFNldCBzYXZlcyBzb21lIG1lbW9yeSBhbmQgc2ltcGxpZmllcyBhIGJ1bmNoIG9m
CisgICAgICAgICAgY29kZS4gVGhpcyBhbHNvIG1lYW5zIHRoYXQgbm93LCB0aGUgb25seSB1c2Vy
IG9mIFZhcmlhYmxlV2F0Y2hwb2ludFNldCBpcyBGdW5jdGlvbkV4ZWN1dGFibGUuCisgICAgICAg
ICAgSSd2ZSB0d2Vha2VkIHRoZSBjb2RlIG9mIFZhcmlhYmxlV2F0Y2hwb2ludFNldCB0byByZWR1
Y2UgaXRzIHBvd2VyIHRvIGp1c3QgYmUgd2hhdAorICAgICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJs
ZSB3YW50cy4KKyAgICAgICAgCisgICAgICAgIFRoaXMgYWxzbyBoYXMgdGhlIGVmZmVjdCBvZiBz
aW1wbGlmeWluZyB0aGUgaW1wbGVtZW50YXRpb24gb2YgYmxvY2sgc2NvcGluZy4gUHJpb3IgdG8g
dGhpcworICAgICAgICBjaGFuZ2UsIGJsb2NrIHNjb3Bpbmcgd291bGQgaGFkIGhhZCB0byBoYXZl
IHNvbWUgc3RvcnkgZm9yIHRoZSBmdW5jdGlvbiByZWVudHJ5IHdhdGNocG9pbnQgb24gYW55Cisg
ICAgICAgIG5lc3RlZCBzeW1ib2wgdGFibGUuIFRoYXQncyB0b3RhbGx5IHdlaXJkIHRvIHRoaW5r
IGFib3V0OyBpdCdzIG5vdCByZWFsbHkgYSBmdW5jdGlvbiByZWVudHJ5IGJ1dAorICAgICAgICBh
IHNjb3BlIHJlZW50cnkuIE5vdyB3ZSBkb24ndCBoYXZlIHRvIHRoaW5rIGFib3V0IHRoaXMuIENv
bnN0YW50IGluZmVyZW5jZSBvbiBuZXN0ZWQgc2NvcGVzIHdpbGwKKyAgICAgICAgImp1c3Qgd29y
ayI6IGlmIHdlIHByb3ZlIHRoYXQgd2Uga25vdyB0aGUgY29uc3RhbnQgdmFsdWUgb2YgdGhlIHNj
b3BlIHRoZW4gdGhlIG1hY2hpbmVyeSBraWNrcworICAgICAgICBpbiwgb3RoZXJ3aXNlIGl0IGRv
ZXNuJ3QuCisgICAgICAgIAorICAgICAgICBUaGlzIGlzIGEgc21hbGwgT2N0YW5lIGFuZCBBc21C
ZW5jaCBzcGVlZC11cC4gQXNtQmVuY2ggc2VlcyAxJSB3aGlsZSBPY3RhbmUgc2VlcyBzdWItMSUu
CisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52
Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2o6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZUxp
c3QuanNvbjoKKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZVVzZURlZi5oOgorICAgICAgICAo
SlNDOjpjb21wdXRlVXNlc0ZvckJ5dGVjb2RlT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6Y29tcHV0
ZURlZnNGb3JCeXRlY29kZU9mZnNldCk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNw
cDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpkdW1wQnl0ZWNvZGUpOgorICAgICAgICAoSlND
OjpDb2RlQmxvY2s6OkNvZGVCbG9jayk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZmluYWxp
emVVbmNvbmRpdGlvbmFsbHkpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnZhbHVlUHJvZmls
ZUZvckJ5dGVjb2RlT2Zmc2V0KToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suaDoKKyAg
ICAgICAgKEpTQzo6Q29kZUJsb2NrOjp2YWx1ZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNldCk6IERl
bGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUvQ29kZU9yaWdpbi5jcHA6CisgICAgICAgIChKU0M6
OklubGluZUNhbGxGcmFtZTo6Y2FsbGVlQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpJbmxpbmVD
YWxsRnJhbWU6OnZpc2l0QWdncmVnYXRlKToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlT3JpZ2lu
Lmg6CisgICAgICAgIChKU0M6OklubGluZUNhbGxGcmFtZTo6Y2FsbGVlQ29uc3RhbnQpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpJbmxpbmVDYWxsRnJhbWU6OnZpc2l0QWdncmVnYXRlKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9JbnN0cnVjdGlvbi5oOgorICAgICAgICAqIGJ5dGVj
b2RlL1ZhcmlhYmxlV2F0Y2hwb2ludFNldC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogYnl0ZWNv
ZGUvVmFyaWFibGVXYXRjaHBvaW50U2V0Lmg6IFJlbW92ZWQuCisgICAgICAgICogYnl0ZWNvZGUv
VmFyaWFibGVXYXRjaHBvaW50U2V0SW5saW5lcy5oOiBSZW1vdmVkLgorICAgICAgICAqIGJ5dGVj
b2RlL1ZhcmlhYmxlV3JpdGVGaXJlRGV0YWlsLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OlZh
cmlhYmxlV3JpdGVGaXJlRGV0YWlsOjpkdW1wKToKKyAgICAgICAgKEpTQzo6VmFyaWFibGVXcml0
ZUZpcmVEZXRhaWw6OnRvdWNoKToKKyAgICAgICAgKiBieXRlY29kZS9WYXJpYWJsZVdyaXRlRmly
ZURldGFpbC5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6VmFyaWFibGVXcml0ZUZpcmVEZXRhaWw6
OlZhcmlhYmxlV3JpdGVGaXJlRGV0YWlsKToKKyAgICAgICAgKiBieXRlY29kZS9XYXRjaHBvaW50
Lmg6CisgICAgICAgIChKU0M6OldhdGNocG9pbnRTZXQ6OnN0YXRlT25NYWluVGhyZWFkKToKKyAg
ICAgICAgKEpTQzo6V2F0Y2hwb2ludFNldDo6c3RhcnRXYXRjaGluZyk6CisgICAgICAgIChKU0M6
OldhdGNocG9pbnRTZXQ6OmZpcmVBbGwpOgorICAgICAgICAoSlNDOjpXYXRjaHBvaW50U2V0Ojp0
b3VjaCk6CisgICAgICAgIChKU0M6OldhdGNocG9pbnRTZXQ6OmludmFsaWRhdGUpOgorICAgICAg
ICAoSlNDOjpJbmxpbmVXYXRjaHBvaW50U2V0OjpzdGF0ZU9uTWFpblRocmVhZCk6CisgICAgICAg
IChKU0M6OklubGluZVdhdGNocG9pbnRTZXQ6OnN0YXRlKToKKyAgICAgICAgKEpTQzo6SW5saW5l
V2F0Y2hwb2ludFNldDo6aGFzQmVlbkludmFsaWRhdGVkKToKKyAgICAgICAgKEpTQzo6SW5saW5l
V2F0Y2hwb2ludFNldDo6aW52YWxpZGF0ZSk6CisgICAgICAgIChKU0M6OklubGluZVdhdGNocG9p
bnRTZXQ6OnRvdWNoKToKKyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3Iu
Y3BwOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3Ip
OgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oOgorICAgICAg
ICAoSlNDOjpERkc6OkFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVj
dXRlRWZmZWN0cyk6CisgICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAg
ICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Z2V0KToKKyAgICAgICAgKEpTQzo6REZHOjpC
eXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQ
YXJzZXI6OmdldFNjb3BlKTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHQ2FwYWJpbGl0aWVz
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpjYXBhYmlsaXR5TGV2ZWwpOgorICAgICAgICAqIGRm
Zy9ERkdDbG9iYmVyaXplLmg6CisgICAgICAgIChKU0M6OkRGRzo6Y2xvYmJlcml6ZSk6CisgICAg
ICAgICogZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
SW5mZXJyZWRWYWx1ZUFkYXB0b3I6OmFkZCk6CisgICAgICAgIChKU0M6OkRGRzo6RGVzaXJlZFdh
dGNocG9pbnRzOjphZGRMYXppbHkpOgorICAgICAgICAoSlNDOjpERkc6OkRlc2lyZWRXYXRjaHBv
aW50czo6cmVhbGx5QWRkKToKKyAgICAgICAgKEpTQzo6REZHOjpEZXNpcmVkV2F0Y2hwb2ludHM6
OmFyZVN0aWxsVmFsaWQpOgorICAgICAgICAqIGRmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuaDoK
KyAgICAgICAgKEpTQzo6REZHOjpJbmZlcnJlZFZhbHVlQWRhcHRvcjo6aGFzQmVlbkludmFsaWRh
dGVkKToKKyAgICAgICAgKEpTQzo6REZHOjpEZXNpcmVkV2F0Y2hwb2ludHM6OmlzV2F0Y2hlZCk6
CisgICAgICAgICogZGZnL0RGR0dyYXBoLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6
ZHVtcCk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OnRyeUdldENvbnN0YW50Q2xvc3VyZVZh
cik6CisgICAgICAgICogZGZnL0RGR05vZGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpo
YXNXYXRjaHBvaW50U2V0KToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjp3YXRjaHBvaW50U2V0
KToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNWYXJpYWJsZVdhdGNocG9pbnRTZXQpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OnZhcmlhYmxlV2F0Y2hwb2ludFNldCk6
IERlbGV0ZWQuCisgICAgICAgICogZGZnL0RGR09wZXJhdGlvbnMuY3BwOgorICAgICAgICAqIGRm
Zy9ERkdPcGVyYXRpb25zLmg6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU5ld0Z1bmN0aW9uKToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNyZWF0ZUFjdGl2YXRp
b24pOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlTm90aWZ5V3Jp
dGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjpjYWxsT3BlcmF0aW9uKToKKyAgICAgICAgKiBkZmcvREZHU3Bl
Y3VsYXRpdmVKSVQzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RG
R1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2UuY3BwOgorICAgICAgICAqIGZ0bC9GVExJbnRyaW5zaWNS
ZXBvc2l0b3J5Lmg6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcDoKKyAgICAg
ICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUNyZWF0ZUFjdGl2YXRpb24pOgor
ICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlTmV3RnVuY3Rpb24pOgor
ICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlTm90aWZ5V3JpdGUpOgor
ICAgICAgICAqIGludGVycHJldGVyL0ludGVycHJldGVyLmNwcDoKKyAgICAgICAgKEpTQzo6U3Rh
Y2tGcmFtZTo6ZnJpZW5kbHlTb3VyY2VVUkwpOgorICAgICAgICAoSlNDOjpTdGFja0ZyYW1lOjpm
cmllbmRseUZ1bmN0aW9uTmFtZSk6CisgICAgICAgICogaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIu
aDoKKyAgICAgICAgKEpTQzo6U3RhY2tGcmFtZTo6ZnJpZW5kbHlTb3VyY2VVUkwpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpTdGFja0ZyYW1lOjpmcmllbmRseUZ1bmN0aW9uTmFtZSk6IERlbGV0
ZWQuCisgICAgICAgICogaml0L0pJVC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdE5vdGlm
eVdyaXRlKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKToKKyAg
ICAgICAgKiBqaXQvSklULmg6CisgICAgICAgICogaml0L0pJVE9wY29kZXMuY3BwOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfdG91Y2hfZW50cnkpOiBEZWxldGVkLgorICAgICAgICAqIGpp
dC9KSVRPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5oOgorICAg
ICAgICAqIGppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dFB1dEdsb2JhbFZhcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFB1dENsb3N1cmVWYXIpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXROb3RpZnlXcml0ZSk6IERlbGV0ZWQuCisgICAgICAgICog
aml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRQ
dXRHbG9iYWxWYXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRQdXRDbG9zdXJlVmFyKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0Tm90aWZ5V3JpdGUpOiBEZWxldGVkLgorICAgICAgICAqIGxs
aW50L0xMSW50U2xvd1BhdGhzLmNwcDoKKyAgICAgICAgKEpTQzo6TExJbnQ6OkxMSU5UX1NMT1df
UEFUSF9ERUNMKToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbToKKyAg
ICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtOgorICAgICAgICAqIGxs
aW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc206CisgICAgICAgICogcnVudGltZS9Db21tb25T
bG93UGF0aHMuY3BwOgorICAgICAgICAoSlNDOjpTTE9XX1BBVEhfREVDTCk6IERlbGV0ZWQuCisg
ICAgICAgICogcnVudGltZS9Db21tb25TbG93UGF0aHMuaDoKKyAgICAgICAgKiBydW50aW1lL0V4
ZWN1dGFibGUuY3BwOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFibGU6OmZpbmlzaENy
ZWF0aW9uKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25FeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVu
KToKKyAgICAgICAgKiBydW50aW1lL0V4ZWN1dGFibGUuaDoKKyAgICAgICAgKEpTQzo6RnVuY3Rp
b25FeGVjdXRhYmxlOjpzaW5nbGV0b25GdW5jdGlvbik6CisgICAgICAgICogcnVudGltZS9JbmZl
cnJlZFZhbHVlLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkluZmVycmVkVmFsdWU6OmNyZWF0
ZSk6CisgICAgICAgIChKU0M6OkluZmVycmVkVmFsdWU6OmRlc3Ryb3kpOgorICAgICAgICAoSlND
OjpJbmZlcnJlZFZhbHVlOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpJbmZlcnJl
ZFZhbHVlOjp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6SW5mZXJyZWRWYWx1ZTo6SW5m
ZXJyZWRWYWx1ZSk6CisgICAgICAgIChKU0M6OkluZmVycmVkVmFsdWU6On5JbmZlcnJlZFZhbHVl
KToKKyAgICAgICAgKEpTQzo6SW5mZXJyZWRWYWx1ZTo6bm90aWZ5V3JpdGVTbG93KToKKyAgICAg
ICAgKEpTQzo6SW5mZXJyZWRWYWx1ZTo6VmFsdWVDbGVhbnVwOjpWYWx1ZUNsZWFudXApOgorICAg
ICAgICAoSlNDOjpJbmZlcnJlZFZhbHVlOjpWYWx1ZUNsZWFudXA6On5WYWx1ZUNsZWFudXApOgor
ICAgICAgICAoSlNDOjpJbmZlcnJlZFZhbHVlOjpWYWx1ZUNsZWFudXA6OmZpbmFsaXplVW5jb25k
aXRpb25hbGx5KToKKyAgICAgICAgKiBydW50aW1lL0luZmVycmVkVmFsdWUuaDogQWRkZWQuCisg
ICAgICAgIChKU0M6OkluZmVycmVkVmFsdWU6OmluZmVycmVkVmFsdWUpOgorICAgICAgICAoSlND
OjpJbmZlcnJlZFZhbHVlOjpzdGF0ZSk6CisgICAgICAgIChKU0M6OkluZmVycmVkVmFsdWU6Omlz
U3RpbGxWYWxpZCk6CisgICAgICAgIChKU0M6OkluZmVycmVkVmFsdWU6Omhhc0JlZW5JbnZhbGlk
YXRlZCk6CisgICAgICAgIChKU0M6OkluZmVycmVkVmFsdWU6OmFkZCk6CisgICAgICAgIChKU0M6
OkluZmVycmVkVmFsdWU6Om5vdGlmeVdyaXRlKToKKyAgICAgICAgKEpTQzo6SW5mZXJyZWRWYWx1
ZTo6aW52YWxpZGF0ZSk6CisgICAgICAgICogcnVudGltZS9KU0Vudmlyb25tZW50UmVjb3JkLmNw
cDoKKyAgICAgICAgKEpTQzo6SlNFbnZpcm9ubWVudFJlY29yZDo6dmlzaXRDaGlsZHJlbik6Cisg
ICAgICAgICogcnVudGltZS9KU0Vudmlyb25tZW50UmVjb3JkLmg6CisgICAgICAgIChKU0M6OkpT
RW52aXJvbm1lbnRSZWNvcmQ6OmlzVmFsaWQpOgorICAgICAgICAoSlNDOjpKU0Vudmlyb25tZW50
UmVjb3JkOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgICogcnVudGltZS9KU0Z1bmN0aW9uLmNw
cDoKKyAgICAgICAgKEpTQzo6SlNGdW5jdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKiBydW50aW1l
L0pTRnVuY3Rpb24uaDoKKyAgICAgICAgKEpTQzo6SlNGdW5jdGlvbjo6Y3JlYXRlV2l0aEludmFs
aWRhdGVkUmVhbGxvY2F0aW9uV2F0Y2hwb2ludCk6CisgICAgICAgIChKU0M6OkpTRnVuY3Rpb246
OmNyZWF0ZUltcGwpOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpjcmVhdGUpOiBEZWxldGVk
LgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpK
U0dsb2JhbE9iamVjdDo6YWRkR2xvYmFsVmFyKToKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmpl
Y3Q6OmFkZEZ1bmN0aW9uKToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0Lmg6Cisg
ICAgICAgICogcnVudGltZS9KU0xleGljYWxFbnZpcm9ubWVudC5jcHA6CisgICAgICAgIChKU0M6
OkpTTGV4aWNhbEVudmlyb25tZW50OjpzeW1ib2xUYWJsZVB1dCk6CisgICAgICAgICogcnVudGlt
ZS9KU1Njb3BlLmg6CisgICAgICAgIChKU0M6OlJlc29sdmVPcDo6UmVzb2x2ZU9wKToKKyAgICAg
ICAgKiBydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6
SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdDo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAqIHJ1
bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5oOgorICAgICAgICAoSlNDOjpKU1N5bWJvbFRhYmxl
T2JqZWN0OjpKU1N5bWJvbFRhYmxlT2JqZWN0KToKKyAgICAgICAgKEpTQzo6SlNTeW1ib2xUYWJs
ZU9iamVjdDo6c2V0U3ltYm9sVGFibGUpOgorICAgICAgICAoSlNDOjpzeW1ib2xUYWJsZVB1dCk6
CisgICAgICAgIChKU0M6OnN5bWJvbFRhYmxlUHV0V2l0aEF0dHJpYnV0ZXMpOgorICAgICAgICAq
IHJ1bnRpbWUvUHV0UHJvcGVydHlTbG90Lmg6CisgICAgICAgICogcnVudGltZS9TeW1ib2xUYWJs
ZS5jcHA6CisgICAgICAgIChKU0M6OlN5bWJvbFRhYmxlRW50cnk6OnByZXBhcmVUb1dhdGNoKToK
KyAgICAgICAgKEpTQzo6U3ltYm9sVGFibGU6OlN5bWJvbFRhYmxlKToKKyAgICAgICAgKEpTQzo6
U3ltYm9sVGFibGU6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6U3ltYm9sVGFibGU6
OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpTeW1ib2xUYWJsZUVudHJ5OjppbmZlcnJl
ZFZhbHVlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3ltYm9sVGFibGVFbnRyeTo6bm90aWZ5
V3JpdGVTbG93KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3ltYm9sVGFibGU6OldhdGNocG9p
bnRDbGVhbnVwOjpXYXRjaHBvaW50Q2xlYW51cCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN5
bWJvbFRhYmxlOjpXYXRjaHBvaW50Q2xlYW51cDo6fldhdGNocG9pbnRDbGVhbnVwKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6U3ltYm9sVGFibGU6OldhdGNocG9pbnRDbGVhbnVwOjpmaW5hbGl6
ZVVuY29uZGl0aW9uYWxseSk6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9TeW1ib2xUYWJs
ZS5oOgorICAgICAgICAoSlNDOjpTeW1ib2xUYWJsZUVudHJ5OjpkaXNhYmxlV2F0Y2hpbmcpOgor
ICAgICAgICAoSlNDOjpTeW1ib2xUYWJsZUVudHJ5Ojp3YXRjaHBvaW50U2V0KToKKyAgICAgICAg
KEpTQzo6U3ltYm9sVGFibGU6OnNpbmdsZXRvblNjb3BlKToKKyAgICAgICAgKEpTQzo6U3ltYm9s
VGFibGVFbnRyeTo6bm90aWZ5V3JpdGUpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvVHlw
ZVByb2ZpbGVyLmNwcDoKKyAgICAgICAgKiBydW50aW1lL1ZNLmNwcDoKKyAgICAgICAgKEpTQzo6
Vk06OlZNKToKKyAgICAgICAgKiBydW50aW1lL1ZNLmg6CisgICAgICAgICogdGVzdHMvc3RyZXNz
L2luZmVyLXVuaW5pdGlhbGl6ZWQtY2xvc3VyZS12YXIuanM6IEFkZGVkLgorICAgICAgICAoZm9v
LmYpOgorICAgICAgICAoZm9vKToKKyAgICAgICAgKiB0ZXN0cy9zdHJlc3Mvc2luZ2xldG9uLXNj
b3BlLXRoZW4tb3ZlcndyaXRlLmpzOiBBZGRlZC4KKyAgICAgICAgKGZvby5mKToKKyAgICAgICAg
KGZvbyk6CisgICAgICAgICogdGVzdHMvc3RyZXNzL3NpbmdsZXRvbi1zY29wZS10aGVuLXJlYWxs
b2MtYW5kLW92ZXJ3cml0ZS5qczogQWRkZWQuCisgICAgICAgIChmb28pOgorICAgICAgICAqIHRl
c3RzL3N0cmVzcy9zaW5nbGV0b24tc2NvcGUtdGhlbi1yZWFsbG9jLmpzOiBBZGRlZC4KKyAgICAg
ICAgKGZvbyk6CisKIDIwMTUtMDQtMDcgIE1pY2hhZWwgU2Fib2ZmICA8bXNhYm9mZkBhcHBsZS5j
b20+CiAKICAgICAgICAgTGF6aWx5IGluaXRpYWxpemUgTG9nVG9TeXN0ZW1Db25zb2xlIGZsYWcg
dG8gcmVkdWNlIG1lbW9yeSB1c2FnZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtl
TGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3Rz
LnR4dAkocmV2aXNpb24gMTgyNDk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlz
dHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xMDUsNyArMTA1LDcgQEAgc2V0KEphdmFTY3JpcHRD
b3JlX1NPVVJDRVMKICAgICBieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAKICAgICBieXRl
Y29kZS9VbmxpbmtlZEluc3RydWN0aW9uU3RyZWFtLmNwcAogICAgIGJ5dGVjb2RlL1ZhbHVlUmVj
b3ZlcnkuY3BwCi0gICAgYnl0ZWNvZGUvVmFyaWFibGVXYXRjaHBvaW50U2V0LmNwcAorICAgIGJ5
dGVjb2RlL1ZhcmlhYmxlV3JpdGVGaXJlRGV0YWlsLmNwcAogICAgIGJ5dGVjb2RlL1ZpcnR1YWxS
ZWdpc3Rlci5jcHAKICAgICBieXRlY29kZS9XYXRjaHBvaW50LmNwcAogCkBAIC00NTIsNiArNDUy
LDcgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1JVTlRJTUVfU09VUkNFUwogICAgIHJ1bnRpbWUvR2V0
dGVyU2V0dGVyLmNwcAogICAgIHJ1bnRpbWUvSWRlbnRpZmllci5jcHAKICAgICBydW50aW1lL0lu
ZGV4aW5nVHlwZS5jcHAKKyAgICBydW50aW1lL0luZmVycmVkVmFsdWUuY3BwCiAgICAgcnVudGlt
ZS9Jbml0aWFsaXplVGhyZWFkaW5nLmNwcAogICAgIHJ1bnRpbWUvSW50ZW5kZWRTdHJ1Y3R1cmVD
aGFpbi5jcHAKICAgICBydW50aW1lL0ludGVybmFsRnVuY3Rpb24uY3BwCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hw
cm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52
Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oJKHJldmlzaW9uIDE4MjQ5OCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZj
eHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTM1Miw3ICszNTIsNyBAQAogICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5cYnl0ZWNvZGVcVW5saW5rZWRDb2RlQmxvY2suY3BwIiAvPgogICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcVW5saW5rZWRJbnN0cnVjdGlvblN0cmVhbS5jcHAi
IC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRlY29kZVxWYWx1ZVJlY292ZXJ5LmNw
cCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFZhcmlhYmxlV2F0Y2hw
b2ludFNldC5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRlY29kZVxWYXJp
YWJsZVdyaXRlRmlyZURldGFpbC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxi
eXRlY29kZVxWaXJ0dWFsUmVnaXN0ZXIuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5cYnl0ZWNvZGVcV2F0Y2hwb2ludC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxieXRlY29tcGlsZXJcQnl0ZWNvZGVHZW5lcmF0b3IuY3BwIiAvPgpAQCAtNzIwLDYgKzcyMCw3
IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEdldHRlclNldHRlci5jcHAi
IC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXElkZW50aWZpZXIuY3BwIiAv
PgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxJbmRleGluZ1R5cGUuY3BwIiAv
PgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxJbmZlcnJlZFZhbHVlLmNwcCIg
Lz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSW5pdGlhbGl6ZVRocmVhZGlu
Zy5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEludGVuZGVkU3Ry
dWN0dXJlQ2hhaW4uY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxJ
bnRlcm5hbEZ1bmN0aW9uLmNwcCIgLz4KQEAgLTEwMDQsNyArMTAwNSw3IEBACiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxVbmxpbmtlZEluc3RydWN0aW9uU3RyZWFtLmgiIC8+
CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxWYWx1ZVByb2ZpbGUuaCIgLz4K
ICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFZhbHVlUmVjb3ZlcnkuaCIgLz4K
LSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFZhcmlhYmxlV2F0Y2hwb2ludFNl
dC5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcVmFyaWFibGVXcml0
ZUZpcmVEZXRhaWwuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFZp
cnR1YWxSZWdpc3Rlci5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVc
V2F0Y2hwb2ludC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvbXBpbGVy
XEJ5dGVjb2RlR2VuZXJhdG9yLmgiIC8+CkBAIC0xNTA3LDYgKzE1MDgsNyBAQAogICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxJbmRleGluZ0hlYWRlci5oIiAvPgogICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxJbmRleGluZ0hlYWRlcklubGluZXMuaCIgLz4KICAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSW5kZXhpbmdUeXBlLmgiIC8+CisgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEluZmVycmVkVmFsdWUuaCIgLz4KICAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSW5pdGlhbGl6ZVRocmVhZGluZy5oIiAvPgog
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxJbnQxNkFycmF5LmgiIC8+CiAgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEludDMyQXJyYXkuaCIgLz4KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxODI0OTgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29y
a2luZyBjb3B5KQpAQCAtMzgzLDYgKzM4Myw4IEBACiAJCTBGNkIxQ0M2MTg2MkM0NzgwMDg0NUQ5
NyAvKiBGVExVbndpbmRJbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjZCMUNDMjE4NjJDNDc4MDA4NDVEOTcgLyogRlRMVW53aW5kSW5mby5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNkIxQ0M5
MTg2NDFERjgwMDg0NUQ5NyAvKiBBcml0eUNoZWNrRmFpbFJldHVyblRodW5rcy5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjZCMUNDNzE4NjQxREY4
MDA4NDVEOTcgLyogQXJpdHlDaGVja0ZhaWxSZXR1cm5UaHVua3MuY3BwICovOyB9OwogCQkwRjZC
MUNDQTE4NjQxREY4MDA4NDVEOTcgLyogQXJpdHlDaGVja0ZhaWxSZXR1cm5UaHVua3MuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNkIxQ0M4MTg2NDFE
RjgwMDg0NUQ5NyAvKiBBcml0eUNoZWNrRmFpbFJldHVyblRodW5rcy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGNkM3MzUwMUFDOUY5OUYwMEJF
MTY4MiAvKiBWYXJpYWJsZVdyaXRlRmlyZURldGFpbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjZDNzM0RTFBQzlGOTlGMDBCRTE2ODIgLyogVmFy
aWFibGVXcml0ZUZpcmVEZXRhaWwuY3BwICovOyB9OworCQkwRjZDNzM1MTFBQzlGOTlGMDBCRTE2
ODIgLyogVmFyaWFibGVXcml0ZUZpcmVEZXRhaWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNkM3MzRGMUFDOUY5OUYwMEJFMTY4MiAvKiBWYXJpYWJs
ZVdyaXRlRmlyZURldGFpbC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTBGNkU4NDVBMTkwMzBCRUYwMDU2Mjc0MSAvKiBERkdWYXJpYWJsZUFjY2Vz
c0RhdGEuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY2RTg0NTkxOTAzMEJFRjAwNTYyNzQxIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YS5jcHAgKi87
IH07CiAJCTBGNkZDNzUwMTk2MTEwQTgwMEUxRDAyRCAvKiBDb21wbGV4R2V0U3RhdHVzLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNkZDNzRFMTk2
MTEwQTgwMEUxRDAyRCAvKiBDb21wbGV4R2V0U3RhdHVzLmNwcCAqLzsgfTsKIAkJMEY2RkM3NTEx
OTYxMTBBODAwRTFEMDJEIC8qIENvbXBsZXhHZXRTdGF0dXMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNkZDNzRGMTk2MTEwQTgwMEUxRDAyRCAvKiBD
b21wbGV4R2V0U3RhdHVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKQEAgLTQyNSw3ICs0MjcsNiBAQAogCQkwRjhGOTQ0MjE2Njc2MzM1MDBENjE5NzEg
LyogQ29kZVR5cGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEY4Rjk0M0YxNjY3NjMyRDAwRDYxOTcxIC8qIENvZGVUeXBlLmNwcCAqLzsgfTsKIAkJ
MEY4Rjk0NDQxNjY3NjM1NDAwRDYxOTcxIC8qIEpJVENvZGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY4Rjk0NDMxNjY3NjM1MjAwRDYxOTcxIC8q
IEpJVENvZGUuY3BwICovOyB9OwogCQkwRjhGOTQ0NjE2Njc2NEYxMDBENjE5NzEgLyogQ29kZU9y
aWdpbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjhGOTQ0NTE2Njc2NEVFMDBENjE5NzEgLyogQ29kZU9yaWdpbi5jcHAgKi87IH07Ci0JCTBGOTE4
MUM3MTg0MTVDQTUwMDU3QjY2OSAvKiBWYXJpYWJsZVdhdGNocG9pbnRTZXQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTE4MUM2MTg0MTVDQTUwMDU3
QjY2OSAvKiBWYXJpYWJsZVdhdGNocG9pbnRTZXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjkxOUQwQzE1N0VFMDlGMDA0QTRFN0QgLyogSlNT
eW1ib2xUYWJsZU9iamVjdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjkxOUQwOTE1N0VFMDlEMDA0QTRFN0QgLyogSlNTeW1ib2xUYWJsZU9iamVj
dC5jcHAgKi87IH07CiAJCTBGOTE5RDBEMTU3RUUwQTIwMDRBNEU3RCAvKiBKU1N5bWJvbFRhYmxl
T2JqZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjkxOUQwQTE1N0VFMDlEMDA0QTRFN0QgLyogSlNTeW1ib2xUYWJsZU9iamVjdC5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGOTE5RDEwMTU3RjMz
MjkwMDRBNEU3RCAvKiBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTE5RDBFMTU3RjMzMjcwMDRBNEU3
RCAvKiBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmNwcCAqLzsgfTsKQEAgLTU1MCw3ICs1NTEs
NiBAQAogCQkwRkM5N0Y0MDE4MjAyMTE5MDAyQzlCMjYgLyogREZHSnVtcFJlcGxhY2VtZW50Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkM5N0YzQTE4
MjAyMTE5MDAyQzlCMjYgLyogREZHSnVtcFJlcGxhY2VtZW50LmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZDOTdGNDExODIwMjExOTAwMkM5QjI2
IC8qIERGR1dhdGNocG9pbnRDb2xsZWN0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDOTdGM0IxODIwMjExOTAwMkM5QjI2IC8qIERG
R1dhdGNocG9pbnRDb2xsZWN0aW9uUGhhc2UuY3BwICovOyB9OwogCQkwRkM5N0Y0MjE4MjAyMTE5
MDAyQzlCMjYgLyogREZHV2F0Y2hwb2ludENvbGxlY3Rpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDOTdGM0MxODIwMjExOTAwMkM5QjI2
IC8qIERGR1dhdGNocG9pbnRDb2xsZWN0aW9uUGhhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkwRkNBOTExMzE5NUU2NkEwMDA0MjY0MzggLyog
VmFyaWFibGVXYXRjaHBvaW50U2V0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGQ0E5MTEyMTk1RTY2QTAwMDQyNjQzOCAvKiBWYXJpYWJsZVdhdGNo
cG9pbnRTZXQuY3BwICovOyB9OwogCQkwRkNDQUU0NTE2RDBDRjc0MDBEMEM2NUIgLyogUGFyc2Vy
RXJyb3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
Q0NBRTQzMTZEMENGNkUwMEQwQzY1QiAvKiBQYXJzZXJFcnJvci5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGQ0VGQUFCMTgwNEMxM0UwMDQ3MkNF
NCAvKiBGVExTYXZlUmVzdG9yZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkNFRkFBOTE4MDRDMTNFMDA0NzJDRTQgLyogRlRMU2F2ZVJlc3RvcmUu
Y3BwICovOyB9OwogCQkwRkNFRkFBQzE4MDRDMTNFMDA0NzJDRTQgLyogRlRMU2F2ZVJlc3RvcmUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQ0VGQUFB
MTgwNEMxM0UwMDQ3MkNFNCAvKiBGVExTYXZlUmVzdG9yZS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC03MTksNiArNzE5LDggQEAKIAkJMEZGNzI5
QkUxNjZBRDM2MDAwMEY1QkEzIC8qIFByb2ZpbGVyRXhlY3V0aW9uQ291bnRlci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGNzI5OUUxNjZBRDM0NzAw
MEY1QkEzIC8qIFByb2ZpbGVyRXhlY3V0aW9uQ291bnRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRjcyOUJGMTY2QUQzNjAwMDBGNUJBMyAv
KiBQcm9maWxlck9yaWdpbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZGNzI5QTAxNjZBRDM0NzAwMEY1QkEzIC8qIFByb2ZpbGVyT3JpZ2luLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZGNzI5QzAx
NjZBRDM2MDAwMEY1QkEzIC8qIFByb2ZpbGVyT3JpZ2luU3RhY2suaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRjcyOUEyMTY2QUQzNDcwMDBGNUJBMyAv
KiBQcm9maWxlck9yaWdpblN0YWNrLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKKwkJMEZGOEJERUExQUQ0Q0Y3MTAwREZFODg0IC8qIEluZmVycmVkVmFs
dWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZG
OEJERTgxQUQ0Q0Y3MTAwREZFODg0IC8qIEluZmVycmVkVmFsdWUuY3BwICovOyB9OworCQkwRkY4
QkRFQjFBRDRDRjcxMDBERkU4ODQgLyogSW5mZXJyZWRWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGOEJERTkxQUQ0Q0Y3MTAwREZFODg0IC8q
IEluZmVycmVkVmFsdWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkwRkY5MjJENDE0RjQ2QjQxMDA0MUEyNEUgLyogTExJbnRPZmZzZXRzRXh0cmFj
dG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
NDY4MEExMTRCQTdGODIwMEJGRTI3MiAvKiBMTEludE9mZnNldHNFeHRyYWN0b3IuY3BwICovOyB9
OwogCQkwRkZBNTQ5NzE2Qjg4MzUwMDBCM0E5ODIgLyogQTY0RE9wY29kZS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NTJBM0EyMjE2NTFDNjk3MDBB
ODBBRkUgLyogQTY0RE9wY29kZS5jcHAgKi87IH07CiAJCTBGRkE1NDk4MTZCODgzNTMwMEIzQTk4
MiAvKiBBNjRET3Bjb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA2NTJBM0EyMzE2NTFDNjk3MDBBODBBRkUgLyogQTY0RE9wY29kZS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xNjQ0LDcgKzE2NDYs
NiBAQAogCQlGRTIwQ0U5RTE1RjA0QTk1MDBERjM0MzAgLyogTExJbnRDTG9vcC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUyMENFOUMxNUYwNEE5NTAw
REYzNDMwIC8qIExMSW50Q0xvb3AuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQlGRTRBMzMxRjE1QkQyRTA3MDA2RjU0RjMgLyogVk1JbnNwZWN0b3Iu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU0QTMz
MUQxNUJEMkUwNzAwNkY1NEYzIC8qIFZNSW5zcGVjdG9yLmNwcCAqLzsgfTsKIAkJRkU0QTMzMjAx
NUJEMkUwNzAwNkY1NEYzIC8qIFZNSW5zcGVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTRBMzMxRTE1QkQyRTA3MDA2RjU0RjMgLyogVk1JbnNw
ZWN0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owot
CQlGRTUyNDhGOTE5MTQ0MkQ5MDBCN0ZERTQgLyogVmFyaWFibGVXYXRjaHBvaW50U2V0SW5saW5l
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU1MjQ4
RjgxOTE0NDJEOTAwQjdGREU0IC8qIFZhcmlhYmxlV2F0Y2hwb2ludFNldElubGluZXMuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGRTU5MzJBNzE4
M0M1QTI2MDBBMUVDQ0MgLyogVk1FbnRyeVNjb3BlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFNTkzMkE1MTgzQzVBMjYwMEExRUNDQyAvKiBWTUVu
dHJ5U2NvcGUuY3BwICovOyB9OwogCQlGRTU5MzJBODE4M0M1QTI2MDBBMUVDQ0MgLyogVk1FbnRy
eVNjb3BlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
RTU5MzJBNjE4M0M1QTI2MDBBMUVDQ0MgLyogVk1FbnRyeVNjb3BlLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRkU3QkE2MEYxQTFBN0NFQzAwRjFG
N0I0IC8qIEhlYXBWZXJpZmllci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBGRTdCQTYwRDFBMUE3Q0VDMDBGMUY3QjQgLyogSGVhcFZlcmlmaWVyLmNw
cCAqLzsgfTsKQEAgLTIxMDAsNiArMjEwMSw4IEBACiAJCTBGNkIxQ0MyMTg2MkM0NzgwMDg0NUQ5
NyAvKiBGVExVbndpbmRJbmZvLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZU
TFVud2luZEluZm8uaDsgcGF0aCA9IGZ0bC9GVExVbndpbmRJbmZvLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGNkIxQ0M3MTg2NDFERjgwMDg0NUQ5NyAvKiBBcml0eUNoZWNrRmFp
bFJldHVyblRodW5rcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBB
cml0eUNoZWNrRmFpbFJldHVyblRodW5rcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGNkIxQ0M4MTg2NDFERjgwMDg0NUQ5NyAvKiBBcml0eUNoZWNrRmFpbFJldHVyblRodW5r
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBcml0eUNoZWNrRmFpbFJldHVy
blRodW5rcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjZDNzM0RTFBQzlGOTlG
MDBCRTE2ODIgLyogVmFyaWFibGVXcml0ZUZpcmVEZXRhaWwuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gVmFyaWFibGVXcml0ZUZpcmVEZXRhaWwuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRjZDNzM0RjFBQzlGOTlGMDBCRTE2ODIgLyogVmFyaWFi
bGVXcml0ZUZpcmVEZXRhaWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmFy
aWFibGVXcml0ZUZpcmVEZXRhaWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2
RTg0NTkxOTAzMEJFRjAwNTYyNzQxIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdWYXJpYWJsZUFjY2Vzc0RhdGEuY3Bw
OyBwYXRoID0gZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGNkZDNzRFMTk2MTEwQTgwMEUxRDAyRCAvKiBDb21wbGV4R2V0U3RhdHVz
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvbXBsZXhHZXRTdGF0
dXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjZGQzc0RjE5NjExMEE4MDBF
MUQwMkQgLyogQ29tcGxleEdldFN0YXR1cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBDb21wbGV4R2V0U3RhdHVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0y
MTQwLDcgKzIxNDMsNiBAQAogCQkwRjhGOTQzRjE2Njc2MzJEMDBENjE5NzEgLyogQ29kZVR5cGUu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29kZVR5cGUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjhGOTQ0MzE2Njc2MzUyMDBENjE5NzEgLyog
SklUQ29kZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKSVRDb2Rl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY4Rjk0NDUxNjY3NjRFRTAwRDYx
OTcxIC8qIENvZGVPcmlnaW4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gQ29kZU9yaWdpbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGOTE4MUM2
MTg0MTVDQTUwMDU3QjY2OSAvKiBWYXJpYWJsZVdhdGNocG9pbnRTZXQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gVmFyaWFibGVXYXRjaHBvaW50U2V0Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGOTE5RDA5MTU3RUUwOUQwMDRBNEU3RCAvKiBKU1N5bWJvbFRh
YmxlT2JqZWN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTU3lt
Ym9sVGFibGVPYmplY3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjkxOUQw
QTE1N0VFMDlEMDA0QTRFN0QgLyogSlNTeW1ib2xUYWJsZU9iamVjdC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBKU1N5bWJvbFRhYmxlT2JqZWN0Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGOTE5RDBFMTU3RjMzMjcwMDRBNEU3RCAvKiBKU1NlZ21lbnRlZFZh
cmlhYmxlT2JqZWN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpT
U2VnbWVudGVkVmFyaWFibGVPYmplY3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtMjI3Niw3ICsyMjc4LDYgQEAKIAkJMEZDOTdGM0ExODIwMjExOTAwMkM5QjI2IC8qIERGR0p1
bXBSZXBsYWNlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdKdW1w
UmVwbGFjZW1lbnQuaDsgcGF0aCA9IGRmZy9ERkdKdW1wUmVwbGFjZW1lbnQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZDOTdGM0IxODIwMjExOTAwMkM5QjI2IC8qIERGR1dhdGNo
cG9pbnRDb2xsZWN0aW9uUGhhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gREZHV2F0Y2hwb2ludENvbGxlY3Rpb25QaGFzZS5jcHA7IHBhdGggPSBkZmcvREZHV2F0
Y2hwb2ludENvbGxlY3Rpb25QaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGQzk3RjNDMTgyMDIxMTkwMDJDOUIyNiAvKiBERkdXYXRjaHBvaW50Q29sbGVjdGlvblBoYXNl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1dhdGNocG9pbnRDb2xsZWN0
aW9uUGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdXYXRjaHBvaW50Q29sbGVjdGlvblBoYXNlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGQ0E5MTEyMTk1RTY2QTAwMDQyNjQzOCAvKiBW
YXJpYWJsZVdhdGNocG9pbnRTZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gVmFyaWFibGVXYXRjaHBvaW50U2V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEZDQjQwODUxNUMwQTNDMzAwNDg5MzJCIC8qIFNsb3RWaXNpdG9ySW5saW5lcy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTbG90VmlzaXRvcklubGluZXMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZDQ0FFNDMxNkQwQ0Y2RTAwRDBDNjVCIC8qIFBh
cnNlckVycm9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhcnNlckVycm9y
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQ0VGQUE5MTgwNEMxM0UwMDQ3MkNF
NCAvKiBGVExTYXZlUmVzdG9yZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBGVExTYXZlUmVzdG9yZS5jcHA7IHBhdGggPSBmdGwvRlRMU2F2ZVJlc3RvcmUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjQ0MSw2ICsyNDQyLDggQEAKIAkJMEZGNzI5
QTAxNjZBRDM0NzAwMEY1QkEzIC8qIFByb2ZpbGVyT3JpZ2luLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IFByb2ZpbGVyT3JpZ2luLmg7IHBhdGggPSBwcm9maWxlci9Qcm9maWxl
ck9yaWdpbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkY3MjlBMTE2NkFEMzQ3
MDAwRjVCQTMgLyogUHJvZmlsZXJPcmlnaW5TdGFjay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBQcm9maWxlck9yaWdpblN0YWNrLmNwcDsgcGF0aCA9IHByb2ZpbGVy
L1Byb2ZpbGVyT3JpZ2luU3RhY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RkY3MjlBMjE2NkFEMzQ3MDAwRjVCQTMgLyogUHJvZmlsZXJPcmlnaW5TdGFjay5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBQcm9maWxlck9yaWdpblN0YWNrLmg7IHBhdGggPSBw
cm9maWxlci9Qcm9maWxlck9yaWdpblN0YWNrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGRjhCREU4MUFENENGNzEwMERGRTg4NCAvKiBJbmZlcnJlZFZhbHVlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluZmVycmVkVmFsdWUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRkY4QkRFOTFBRDRDRjcxMDBERkU4ODQgLyogSW5mZXJy
ZWRWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbmZlcnJlZFZhbHVl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRjkyMkNGMTRGNDZCMTMwMDQxQTI0
RSAvKiBKU0NMTEludE9mZnNldHNFeHRyYWN0b3IgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZXhwbGljaXRGaWxlVHlwZSA9ICJjb21waWxlZC5tYWNoLW8uZXhlY3V0YWJsZSI7IGluY2x1
ZGVJbkluZGV4ID0gMDsgcGF0aCA9IEpTQ0xMSW50T2Zmc2V0c0V4dHJhY3Rvcjsgc291cmNlVHJl
ZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKIAkJMEZGQzk5RDAxODRFQzhBRDAwOUMxMEFCIC8q
IENvbnN0YW50TW9kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb25zdGFu
dE1vZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZGQzk5RDIxODRFRTMxODAw
OUMxMEFCIC8qIEFycmF5QnVmZmVyTmV1dGVyaW5nV2F0Y2hwb2ludC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBcnJheUJ1ZmZlck5ldXRlcmluZ1dhdGNocG9pbnQu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzQyMSw3ICszNDI0LDYgQEAKIAkJ
RkUyMENFOUMxNUYwNEE5NTAwREYzNDMwIC8qIExMSW50Q0xvb3AuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gTExJbnRDTG9vcC5oOyBwYXRoID0gbGxpbnQvTExJbnRDTG9vcC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTRBMzMxRDE1QkQyRTA3MDA2RjU0RjMg
LyogVk1JbnNwZWN0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
Vk1JbnNwZWN0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTRBMzMxRTE1
QkQyRTA3MDA2RjU0RjMgLyogVk1JbnNwZWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gVk1JbnNwZWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkU1
MjQ4RjgxOTE0NDJEOTAwQjdGREU0IC8qIFZhcmlhYmxlV2F0Y2hwb2ludFNldElubGluZXMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmFyaWFibGVXYXRjaHBvaW50U2V0SW5s
aW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTU5MzJBNTE4M0M1QTI2MDBB
MUVDQ0MgLyogVk1FbnRyeVNjb3BlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFZNRW50cnlTY29wZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZF
NTkzMkE2MTgzQzVBMjYwMEExRUNDQyAvKiBWTUVudHJ5U2NvcGUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gVk1FbnRyeVNjb3BlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUZFN0JBNjBEMUExQTdDRUMwMEYxRjdCNCAvKiBIZWFwVmVyaWZpZXIuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSGVhcFZlcmlmaWVyLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQ0MDksNiArNDQxMSw4IEBACiAJCQkJMEZCN0YzOEUx
NUVEOEUzODAwRjE2N0IyIC8qIEluZGV4aW5nSGVhZGVySW5saW5lcy5oICovLAogCQkJCTBGMTNF
MDRDMTYxNjRBMUIwMERDOERFNyAvKiBJbmRleGluZ1R5cGUuY3BwICovLAogCQkJCTBGQjdGMzhG
MTVFRDhFMzgwMEYxNjdCMiAvKiBJbmRleGluZ1R5cGUuaCAqLywKKwkJCQkwRkY4QkRFODFBRDRD
RjcxMDBERkU4ODQgLyogSW5mZXJyZWRWYWx1ZS5jcHAgKi8sCisJCQkJMEZGOEJERTkxQUQ0Q0Y3
MTAwREZFODg0IC8qIEluZmVycmVkVmFsdWUuaCAqLywKIAkJCQlFMTc4NjM2QzBEOUJFRUMzMDBE
NzRFNzUgLyogSW5pdGlhbGl6ZVRocmVhZGluZy5jcHAgKi8sCiAJCQkJRTE3ODYzM0YwRDlCRUMw
MDAwRDc0RTc1IC8qIEluaXRpYWxpemVUaHJlYWRpbmcuaCAqLywKIAkJCQlBN0E4QUYyQjE3QURC
NUYzMDA1QUIxNzQgLyogSW50OEFycmF5LmggKi8sCkBAIC01Mjc3LDkgKzUyODEsOCBAQAogCQkJ
CTBGOTYzQjM2MTNGQzZGREUwMDAyRDlCMiAvKiBWYWx1ZVByb2ZpbGUuaCAqLywKIAkJCQkwRjI0
RTU1NzE3Rjc0RURCMDBBQkIyMTcgLyogVmFsdWVSZWNvdmVyeS5jcHAgKi8sCiAJCQkJMEY0MjZB
NDUxNDYwQ0JBQjAwMTMxRjhGIC8qIFZhbHVlUmVjb3ZlcnkuaCAqLywKLQkJCQkwRkNBOTExMjE5
NUU2NkEwMDA0MjY0MzggLyogVmFyaWFibGVXYXRjaHBvaW50U2V0LmNwcCAqLywKLQkJCQkwRjkx
ODFDNjE4NDE1Q0E1MDA1N0I2NjkgLyogVmFyaWFibGVXYXRjaHBvaW50U2V0LmggKi8sCi0JCQkJ
RkU1MjQ4RjgxOTE0NDJEOTAwQjdGREU0IC8qIFZhcmlhYmxlV2F0Y2hwb2ludFNldElubGluZXMu
aCAqLywKKwkJCQkwRjZDNzM0RTFBQzlGOTlGMDBCRTE2ODIgLyogVmFyaWFibGVXcml0ZUZpcmVE
ZXRhaWwuY3BwICovLAorCQkJCTBGNkM3MzRGMUFDOUY5OUYwMEJFMTY4MiAvKiBWYXJpYWJsZVdy
aXRlRmlyZURldGFpbC5oICovLAogCQkJCTBGMjBDMjU4MUE4MDEzQUIwMERBMzIyOSAvKiBWaXJ0
dWFsUmVnaXN0ZXIuY3BwICovLAogCQkJCTBGNDI2QTQ2MTQ2MENCQUIwMDEzMUY4RiAvKiBWaXJ0
dWFsUmVnaXN0ZXIuaCAqLywKIAkJCQkwRjkxOUQyMjE1ODUzQ0RFMDA0QTRFN0QgLyogV2F0Y2hw
b2ludC5jcHAgKi8sCkBAIC01NTY1LDcgKzU1NjgsNiBAQAogCQkJCUM0RjRCNkY1MUEwNUM5ODQw
MDVDQUI3NiAvKiBnZW5lcmF0ZV9vYmpjX3Byb3RvY29sX3R5cGVzX2ltcGxlbWVudGF0aW9uLnB5
IGluIEhlYWRlcnMgKi8sCiAJCQkJQTU4NDAzMjAxOEJGRkJFMTAwNUEwODExIC8qIEluc3BlY3Rv
ckFnZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkyQUFCQ0RFNzE4RUYyOTQyMDAwMDIwOTYgLyog
R0NMb2dnaW5nLmggaW4gSGVhZGVycyAqLywKLQkJCQlGRTUyNDhGOTE5MTQ0MkQ5MDBCN0ZERTQg
LyogVmFyaWFibGVXYXRjaHBvaW50U2V0SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkU3
QkE2MTAxQTFBN0NFQzAwRjFGN0I0IC8qIEhlYXBWZXJpZmllci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQTVFRjlCMTQxQTFENDNGNjAwNzAyRTkwIC8qIGdlbmVyYXRlX2NwcF9iYWNrZW5kX2Rpc3Bh
dGNoZXJfaGVhZGVyLnB5IGluIEhlYWRlcnMgKi8sCiAJCQkJQzJEQTc3ODMxOEUyNTk5OTAwNjZG
Q0I2IC8qIEhlYXBJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKQEAgLTYzNDcsNiArNjM0OSw3IEBA
CiAJCQkJQTc5MERENkUxODJGNDk5NzAwNTg4ODA3IC8qIFNldEl0ZXJhdG9yUHJvdG90eXBlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBNzI5OURBMjE3RDEyODQ4MDA1RjVGRjkgLyogU2V0UHJvdG90
eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkFFNjRBQTEzNUU1RTFDMDA5NjMwMTIgLyogU0g0
QXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkY4QkRFQjFBRDRDRjcxMDBERkU4ODQg
LyogSW5mZXJyZWRWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY3MDUxN0I2QjVBQjAw
QTdBRTNGIC8qIFNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkxNEJBNzhGMTEzQUFCODhGMDA1QjdDMkMgLyogU2xvdFZpc2l0b3IuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGQjE3NjYxMTk2QjhGOUUwMDkxMDUyQSAvKiBERkdIZWFwTG9jYXRpb24uaCBpbiBI
ZWFkZXJzICovLApAQCAtNjM1NCw2ICs2MzU3LDcgQEAKIAkJCQlBNzA5RjJGMDE3QTBBQzA0MDA1
MTJFOTggLyogU2xvd1BhdGhDYWxsLmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzMwNDAwNDBFNkE3
NDk0MDA3ODZFNkEgLyogU21hbGxTdHJpbmdzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ2
NDBFMTZGNUNEMDBCMzQ0NjAgLyogU291cmNlQ29kZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY2
QzczNTExQUM5Rjk5RjAwQkUxNjgyIC8qIFZhcmlhYmxlV3JpdGVGaXJlRGV0YWlsLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCQzE4QzQ2MzBFMTZGNUNEMDBCMzQ0NjAgLyogU291cmNlUHJvdmlkZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCTcwRUMwRUMzMUFBMEQ3REEwMEI2QUFGQSAvKiBKU1N0cmlu
Z0l0ZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlFNDlEQzE2QzEyRUYyOTRFMDAxODRBMUYg
LyogU291cmNlUHJvdmlkZXJDYWNoZS5oIGluIEhlYWRlcnMgKi8sCkBAIC02NDIxLDcgKzY0MjUs
NiBAQAogCQkJCTBGMkU4OTJDMTZEMDI4QUQwMDlFNEZEMiAvKiBVbnVzZWRQb2ludGVyLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjk2M0IzODEzRkM2RkU5MDAwMkQ5QjIgLyogVmFsdWVQcm9maWxl
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjQyNkE0ODE0NjBDQkIzMDAxMzFGOEYgLyogVmFsdWVS
ZWNvdmVyeS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMEY5MTgxQzcxODQxNUNBNTAwNTdCNjY5IC8q
IFZhcmlhYmxlV2F0Y2hwb2ludFNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5QzVFNUYxOEUz
NUY1RTAwRDQzMUMzIC8qIEZUTERXQVJGUmVnaXN0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
NDI2QTQ5MTQ2MENCQjcwMDEzMUY4RiAvKiBWaXJ0dWFsUmVnaXN0ZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCUJDMThDNDIwMEUxNkY1Q0QwMEIzNDQ2MCAvKiBWTS5oIGluIEhlYWRlcnMgKi8sCkBA
IC02OTYzLDYgKzY5NjYsNyBAQAogCQkJCUE3N0YxODIxMTY0MDg4QjIwMDY0MEE0NyAvKiBDb2Rl
Q2FjaGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY4Rjk0NDYxNjY3NjRGMTAwRDYxOTcxIC8q
IENvZGVPcmlnaW4uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODZCNTgyNjcxNEQyNzk2QzAwQTlD
MzA2IC8qIENvZGVQcm9maWxlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGNkM3MzUwMUFDOUY5
OUYwMEJFMTY4MiAvKiBWYXJpYWJsZVdyaXRlRmlyZURldGFpbC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk4NkI1ODI2OTE0RDI3OTcwMDBBOUMzMDYgLyogQ29kZVByb2ZpbGluZy5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRjhGOTQzQzE2Njc2MzEzMDBENjE5NzEgLyogQ29kZVNwZWNpYWxpemF0
aW9uS2luZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjhGOTQ0MjE2Njc2MzM1MDBENjE5NzEg
LyogQ29kZVR5cGUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03MDI3LDcgKzcwMzEsNiBAQAogCQkJ
CUMyOTgxRkQ4MTdCQUVFNEIwMEEzQkM5OCAvKiBERkdEZXNpcmVkV2Vha1JlZmVyZW5jZXMuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQzI5ODFGREMxN0JBRkY0NDAwQTNCQzk4IC8qIERGR0Rlc2ly
ZWRXcml0ZUJhcnJpZXJzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjQyNzY0MTU5MUExQ0Mw
MDRDQjlGRiAvKiBERkdEaXNhc3NlbWJsZXIuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMEZDQTkx
MTMxOTVFNjZBMDAwNDI2NDM4IC8qIFZhcmlhYmxlV2F0Y2hwb2ludFNldC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRkQ4MUFEMjE1NEZCNEVFMDA5ODNFNzIgLyogREZHRG9taW5hdG9ycy5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRkQzQzgyNjE0MTE1RDQwMDBGRDgxQ0IgLyogREZHRHJpdmVy
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkI5Q0UyMTlEMEJBN0QwMEIxRDFCNSAvKiBERkdB
dmFpbGFiaWxpdHlNYXAuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03MzMxLDYgKzczMzQsNyBAQAog
CQkJCTBGMkI2NkZFMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1R5cGVkQXJyYXlzLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTBGRjA1NEY5MUFDMzVCNDQwMEU1QkU1NyAvKiBFeGVjdXRhYmxlQWxsb2Nh
dGlvbkZ1enouY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODZFM0M2MUExNjdCQUJFRTAwNkQ3NjBB
IC8qIEpTVmFsdWUubW0gaW4gU291cmNlcyAqLywKKwkJCQkwRkY4QkRFQTFBRDRDRjcxMDBERkU4
ODQgLyogSW5mZXJyZWRWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNEJENUEzMjBBM0U5
MUY2MDBCQUY1OUMgLyogSlNWYWx1ZVJlZi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlE
NzEwN0VDMzc2MDA0MjdBNDggLyogSlNFbnZpcm9ubWVudFJlY29yZC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk4NkUzQzYxQzE2N0JBQkVFMDA2RDc2MEEgLyogSlNWaXJ0dWFsTWFjaGluZS5tbSBp
biBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVj
b2RlTGlzdC5qc29uCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9CeXRlY29kZUxpc3QuanNvbgkocmV2aXNpb24gMTgyNDk4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5qc29uCSh3b3JraW5nIGNvcHkpCkBAIC02LDcg
KzYsNiBAQAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfZW50ZXIiLCAibGVuZ3RoIiA6IDEg
fSwKICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX2NyZWF0ZV9sZXhpY2FsX2Vudmlyb25tZW50
IiwgImxlbmd0aCIgOiAzIH0sCiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9nZXRfc2NvcGUi
LCAibGVuZ3RoIiA6IDIgfSwKLSAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX3RvdWNoX2VudHJ5
IiwgImxlbmd0aCIgOiAxIH0sCiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9jcmVhdGVfZGly
ZWN0X2FyZ3VtZW50cyIsICJsZW5ndGgiIDogMiB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAi
b3BfY3JlYXRlX3Njb3BlZF9hcmd1bWVudHMiLCAibGVuZ3RoIiA6IDMgfSwKICAgICAgICAgICAg
IHsgIm5hbWUiIDogIm9wX2NyZWF0ZV9vdXRfb2ZfYmFuZF9hcmd1bWVudHMiLCAibGVuZ3RoIiA6
IDIgfSwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZVVzZURl
Zi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29k
ZVVzZURlZi5oCShyZXZpc2lvbiAxODI0OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuaAkod29ya2luZyBjb3B5KQpAQCAtNTAsNyArNTAsNiBAQCB2
b2lkIGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVPZmZzZXQoCiAgICAgY2FzZSBvcF9uZXdfb2JqZWN0
OgogICAgIGNhc2Ugb3BfZW50ZXI6CiAgICAgY2FzZSBvcF9jYXRjaDoKLSAgICBjYXNlIG9wX3Rv
dWNoX2VudHJ5OgogICAgIGNhc2Ugb3BfcHJvZmlsZV9jb250cm9sX2Zsb3c6CiAgICAgY2FzZSBv
cF9jcmVhdGVfZGlyZWN0X2FyZ3VtZW50czoKICAgICBjYXNlIG9wX2NyZWF0ZV9vdXRfb2ZfYmFu
ZF9hcmd1bWVudHM6CkBAIC0yNzgsNyArMjc3LDYgQEAgdm9pZCBjb21wdXRlRGVmc0ZvckJ5dGVj
b2RlT2Zmc2V0KENvZGVCbAogICAgIGNhc2Ugb3BfcHV0X2J5X2luZGV4OgogICAgIGNhc2Ugb3Bf
cHJvZmlsZV90eXBlOgogICAgIGNhc2Ugb3BfcHJvZmlsZV9jb250cm9sX2Zsb3c6Ci0gICAgY2Fz
ZSBvcF90b3VjaF9lbnRyeToKICAgICBjYXNlIG9wX3B1dF90b19hcmd1bWVudHM6CiAjZGVmaW5l
IExMSU5UX0hFTFBFUl9PUENPREVTKG9wY29kZSwgbGVuZ3RoKSBjYXNlIG9wY29kZToKICAgICAg
ICAgRk9SX0VBQ0hfTExJTlRfT1BDT0RFX0VYVEVOU0lPTihMTElOVF9IRUxQRVJfT1BDT0RFUyk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAko
cmV2aXNpb24gMTgyNDk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVC
bG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc1OCwxMCArNzU4LDYgQEAgdm9pZCBDb2RlQmxv
Y2s6OmR1bXBCeXRlY29kZSgKICAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4
ZWMsIGxvY2F0aW9uLCBpdCwgImVudGVyIik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQotICAgICAgICBjYXNlIG9wX3RvdWNoX2VudHJ5OiB7Ci0gICAgICAgICAgICBwcmludExvY2F0
aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJ0b3VjaF9lbnRyeSIpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KICAgICAgICAgY2FzZSBvcF9jcmVhdGVfbGV4aWNhbF9l
bnZpcm9ubWVudDogewogICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7CiAg
ICAgICAgICAgICBpbnQgcjEgPSAoKytpdCktPnUub3BlcmFuZDsKQEAgLTE5NTcsNyArMTk1Myw3
IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUqIG8KICAgICAgICAgICAg
IGluc3RydWN0aW9uc1tpICsgNF0udS5vcGVyYW5kID0gb3AudHlwZTsKICAgICAgICAgICAgIGlu
c3RydWN0aW9uc1tpICsgNV0udS5vcGVyYW5kID0gb3AuZGVwdGg7CiAgICAgICAgICAgICBpZiAo
b3AubGV4aWNhbEVudmlyb25tZW50KQotICAgICAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsg
Nl0udS5sZXhpY2FsRW52aXJvbm1lbnQuc2V0KCp2bSgpLCBvd25lckV4ZWN1dGFibGUsIG9wLmxl
eGljYWxFbnZpcm9ubWVudCk7CisgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyA2XS51
LnN5bWJvbFRhYmxlLnNldCgqdm0oKSwgb3duZXJFeGVjdXRhYmxlLCBvcC5sZXhpY2FsRW52aXJv
bm1lbnQtPnN5bWJvbFRhYmxlKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIApA
QCAtMTk4NSw3ICsxOTgxLDYgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soU2NyaXB0RXhlY3V0YWJs
ZSogbwogICAgICAgICAgICAgZWxzZSBpZiAob3Auc3RydWN0dXJlKQogICAgICAgICAgICAgICAg
IGluc3RydWN0aW9uc1tpICsgNV0udS5zdHJ1Y3R1cmUuc2V0KCp2bSgpLCBvd25lckV4ZWN1dGFi
bGUsIG9wLnN0cnVjdHVyZSk7CiAgICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIDZdLnUucG9p
bnRlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KG9wLm9wZXJhbmQpOwotCiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQogCkBAIC0yMDAxLDcgKzE5OTYsNyBAQCBDb2RlQmxvY2s6OkNv
ZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBvCiAgICAgICAgICAgICAgICAgICAgIENvbmN1cnJl
bnRKSVRMb2NrZXIgbG9ja2VyKG1fc3ltYm9sVGFibGUtPm1fbG9jayk7CiAgICAgICAgICAgICAg
ICAgICAgIFN5bWJvbFRhYmxlOjpNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX3N5bWJvbFRhYmxlLT5m
aW5kKGxvY2tlciwgdWlkKTsKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGl0ZXIgIT0gbV9z
eW1ib2xUYWJsZS0+ZW5kKGxvY2tlcikpOwotICAgICAgICAgICAgICAgICAgICBpdGVyLT52YWx1
ZS5wcmVwYXJlVG9XYXRjaChzeW1ib2xUYWJsZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgaXRl
ci0+dmFsdWUucHJlcGFyZVRvV2F0Y2goKTsKICAgICAgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rp
b25zW2kgKyA1XS51LndhdGNocG9pbnRTZXQgPSBpdGVyLT52YWx1ZS53YXRjaHBvaW50U2V0KCk7
CiAgICAgICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgICAgIGluc3RydWN0aW9u
c1tpICsgNV0udS53YXRjaHBvaW50U2V0ID0gbnVsbHB0cjsKQEAgLTI1NDYsMTIgKzI1NDEsMTUg
QEAgdm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KAogICAgICAgICAgICAg
ICAgICAgICBjdXJJbnN0cnVjdGlvblszXS51LnRvVGhpc1N0YXR1cywgVG9UaGlzQ2xlYXJlZEJ5
R0MpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBvcF9yZXNvbHZl
X3Njb3BlOiB7Ci0gICAgICAgICAgICAgICAgV3JpdGVCYXJyaWVyQmFzZTxKU0xleGljYWxFbnZp
cm9ubWVudD4mIGxleGljYWxFbnZpcm9ubWVudCA9IGN1ckluc3RydWN0aW9uWzZdLnUubGV4aWNh
bEVudmlyb25tZW50OwotICAgICAgICAgICAgICAgIGlmICghbGV4aWNhbEVudmlyb25tZW50IHx8
IEhlYXA6OmlzTWFya2VkKGxleGljYWxFbnZpcm9ubWVudC5nZXQoKSkpCisgICAgICAgICAgICAg
ICAgLy8gUmlnaHQgbm93IHRoaXMgaXNuJ3Qgc3RyaWN0bHkgbmVjZXNzYXJ5LiBBbnkgc3ltYm9s
IHRhYmxlcyB0aGF0IHRoaXMgd2lsbCByZWZlciB0bworICAgICAgICAgICAgICAgIC8vIGFyZSBm
b3Igb3V0ZXIgZnVuY3Rpb25zLCBhbmQgd2UgcmVmZXIgdG8gdGhvc2UgZnVuY3Rpb25zIHN0cm9u
Z2x5LCBhbmQgdGhleSByZWZlcgorICAgICAgICAgICAgICAgIC8vIHRvIHRoZSBzeW1ib2wgdGFi
bGUgc3Ryb25nbHkuIEJ1dCBpdCdzIG5pY2UgdG8gYmUgb24gdGhlIHNhZmUgc2lkZS4KKyAgICAg
ICAgICAgICAgICBXcml0ZUJhcnJpZXJCYXNlPFN5bWJvbFRhYmxlPiYgc3ltYm9sVGFibGUgPSBj
dXJJbnN0cnVjdGlvbls2XS51LnN5bWJvbFRhYmxlOworICAgICAgICAgICAgICAgIGlmICghc3lt
Ym9sVGFibGUgfHwgSGVhcDo6aXNNYXJrZWQoc3ltYm9sVGFibGUuZ2V0KCkpKQogICAgICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9T
UigpKQotICAgICAgICAgICAgICAgICAgICBkYXRhTG9nRigiQ2xlYXJpbmcgZGVhZCBsZXhpY2Fs
RW52aXJvbm1lbnQgJXAuXG4iLCBsZXhpY2FsRW52aXJvbm1lbnQuZ2V0KCkpOwotICAgICAgICAg
ICAgICAgIGxleGljYWxFbnZpcm9ubWVudC5jbGVhcigpOworICAgICAgICAgICAgICAgICAgICBk
YXRhTG9nRigiQ2xlYXJpbmcgZGVhZCBzeW1ib2xUYWJsZSAlcC5cbiIsIHN5bWJvbFRhYmxlLmdl
dCgpKTsKKyAgICAgICAgICAgICAgICBzeW1ib2xUYWJsZS5jbGVhcigpOwogICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgY2FzZSBvcF9nZXRfZnJvbV9z
Y29wZToKQEAgLTM4MTUsNiArMzgxMywxOCBAQCBTdHJpbmcgQ29kZUJsb2NrOjpuYW1lRm9yUmVn
aXN0ZXIoVmlydHVhCiAgICAgcmV0dXJuICIiOwogfQogCitWYWx1ZVByb2ZpbGUqIENvZGVCbG9j
azo6dmFsdWVQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQoaW50IGJ5dGVjb2RlT2Zmc2V0KQorewor
ICAgIFZhbHVlUHJvZmlsZSogcmVzdWx0ID0gYmluYXJ5U2VhcmNoPFZhbHVlUHJvZmlsZSwgaW50
PigKKyAgICAgICAgbV92YWx1ZVByb2ZpbGVzLCBtX3ZhbHVlUHJvZmlsZXMuc2l6ZSgpLCBieXRl
Y29kZU9mZnNldCwKKyAgICAgICAgZ2V0VmFsdWVQcm9maWxlQnl0ZWNvZGVPZmZzZXQ8VmFsdWVQ
cm9maWxlPik7CisgICAgQVNTRVJUKHJlc3VsdC0+bV9ieXRlY29kZU9mZnNldCAhPSAtMSk7Cisg
ICAgQVNTRVJUKGluc3RydWN0aW9ucygpW2J5dGVjb2RlT2Zmc2V0ICsgb3Bjb2RlTGVuZ3RoKAor
ICAgICAgICBtX3ZtLT5pbnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQoCisgICAgICAgICAgICBpbnN0
cnVjdGlvbnMoKVtieXRlY29kZU9mZnNldF0udS5vcGNvZGUpKSAtIDFdLnUucHJvZmlsZSA9PSBy
ZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIHZvaWQgQ29kZUJsb2NrOjp2YWxpZGF0
ZSgpCiB7CiAgICAgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzIGxpdmVuZXNzKHRoaXMpOyAvLyBD
b21wdXRlIGRpcmVjdGx5IGZyb20gc2NyYXRjaCBzbyBpdCBkb2Vzbid0IGVmZmVjdCBDb2RlQmxv
Y2sgZm9vdHByaW50LgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVC
bG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2Rl
QmxvY2suaAkocmV2aXNpb24gMTgyNDk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0zODYsMTcgKzM4Niw3IEBAIHB1Ymxp
YzoKIAogICAgIHVuc2lnbmVkIG51bWJlck9mVmFsdWVQcm9maWxlcygpIHsgcmV0dXJuIG1fdmFs
dWVQcm9maWxlcy5zaXplKCk7IH0KICAgICBWYWx1ZVByb2ZpbGUqIHZhbHVlUHJvZmlsZShpbnQg
aW5kZXgpIHsgcmV0dXJuICZtX3ZhbHVlUHJvZmlsZXNbaW5kZXhdOyB9Ci0gICAgVmFsdWVQcm9m
aWxlKiB2YWx1ZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChpbnQgYnl0ZWNvZGVPZmZzZXQpCi0g
ICAgewotICAgICAgICBWYWx1ZVByb2ZpbGUqIHJlc3VsdCA9IGJpbmFyeVNlYXJjaDxWYWx1ZVBy
b2ZpbGUsIGludD4oCi0gICAgICAgICAgICBtX3ZhbHVlUHJvZmlsZXMsIG1fdmFsdWVQcm9maWxl
cy5zaXplKCksIGJ5dGVjb2RlT2Zmc2V0LAotICAgICAgICAgICAgZ2V0VmFsdWVQcm9maWxlQnl0
ZWNvZGVPZmZzZXQ8VmFsdWVQcm9maWxlPik7Ci0gICAgICAgIEFTU0VSVChyZXN1bHQtPm1fYnl0
ZWNvZGVPZmZzZXQgIT0gLTEpOwotICAgICAgICBBU1NFUlQoaW5zdHJ1Y3Rpb25zKClbYnl0ZWNv
ZGVPZmZzZXQgKyBvcGNvZGVMZW5ndGgoCi0gICAgICAgICAgICBtX3ZtLT5pbnRlcnByZXRlci0+
Z2V0T3Bjb2RlSUQoCi0gICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKClbYnl0ZWNvZGVPZmZz
ZXRdLnUub3Bjb2RlKSkgLSAxXS51LnByb2ZpbGUgPT0gcmVzdWx0KTsKLSAgICAgICAgcmV0dXJu
IHJlc3VsdDsKLSAgICB9CisgICAgVmFsdWVQcm9maWxlKiB2YWx1ZVByb2ZpbGVGb3JCeXRlY29k
ZU9mZnNldChpbnQgYnl0ZWNvZGVPZmZzZXQpOwogICAgIFNwZWN1bGF0ZWRUeXBlIHZhbHVlUHJv
ZmlsZVByZWRpY3Rpb25Gb3JCeXRlY29kZU9mZnNldChjb25zdCBDb25jdXJyZW50SklUTG9ja2Vy
JiBsb2NrZXIsIGludCBieXRlY29kZU9mZnNldCkKICAgICB7CiAgICAgICAgIHJldHVybiB2YWx1
ZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChieXRlY29kZU9mZnNldCktPmNvbXB1dGVVcGRhdGVk
UHJlZGljdGlvbihsb2NrZXIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVPcmlnaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlT3JpZ2luLmNwcAkocmV2aXNpb24gMTgyNDk4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDEsNiAr
MTQxLDE4IEBAIHZvaWQgQ29kZU9yaWdpbjo6ZHVtcEluQ29udGV4dChQcmludFN0cmUKICAgICBk
dW1wKG91dCk7CiB9CiAKK0pTRnVuY3Rpb24qIElubGluZUNhbGxGcmFtZTo6Y2FsbGVlQ29uc3Rh
bnQoKSBjb25zdAoreworICAgIGlmIChjYWxsZWVSZWNvdmVyeS5pc0NvbnN0YW50KCkpCisgICAg
ICAgIHJldHVybiBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNhbGxlZVJlY292ZXJ5LmNvbnN0YW50KCkp
OworICAgIHJldHVybiBudWxscHRyOworfQorCit2b2lkIElubGluZUNhbGxGcmFtZTo6dmlzaXRB
Z2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgdmlzaXRvci5hcHBlbmQoJmV4
ZWN1dGFibGUpOworfQorCiBKU0Z1bmN0aW9uKiBJbmxpbmVDYWxsRnJhbWU6OmNhbGxlZUZvckNh
bGxGcmFtZShFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGpzQ2FzdDxKU0Z1
bmN0aW9uKj4oY2FsbGVlUmVjb3ZlcnkucmVjb3ZlcihleGVjKSk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmgJKHJldmlzaW9uIDE4MjQ5OCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI4LDcgKzI4LDYgQEAKIAogI2luY2x1ZGUgIkNvZGVCbG9ja0hhc2guaCIKICNpbmNs
dWRlICJDb2RlU3BlY2lhbGl6YXRpb25LaW5kLmgiCi0jaW5jbHVkZSAiSlNGdW5jdGlvbi5oIgog
I2luY2x1ZGUgIlZhbHVlUmVjb3ZlcnkuaCIKICNpbmNsdWRlICJXcml0ZUJhcnJpZXIuaCIKICNp
bmNsdWRlIDx3dGYvQml0VmVjdG9yLmg+CkBAIC0yMDcsMTcgKzIwNiw4IEBAIHN0cnVjdCBJbmxp
bmVDYWxsRnJhbWUgewogICAgIAogICAgIENvZGVTcGVjaWFsaXphdGlvbktpbmQgc3BlY2lhbGl6
YXRpb25LaW5kKCkgY29uc3QgeyByZXR1cm4gc3BlY2lhbGl6YXRpb25LaW5kRm9yKHN0YXRpY19j
YXN0PEtpbmQ+KGtpbmQpKTsgfQogCi0gICAgSlNGdW5jdGlvbiogY2FsbGVlQ29uc3RhbnQoKSBj
b25zdAotICAgIHsKLSAgICAgICAgaWYgKGNhbGxlZVJlY292ZXJ5LmlzQ29uc3RhbnQoKSkKLSAg
ICAgICAgICAgIHJldHVybiBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNhbGxlZVJlY292ZXJ5LmNvbnN0
YW50KCkpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICB2b2lkIHZpc2l0QWdncmVn
YXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQotICAgIHsKLSAgICAgICAgdmlzaXRvci5hcHBlbmQo
JmV4ZWN1dGFibGUpOwotICAgIH0KKyAgICBKU0Z1bmN0aW9uKiBjYWxsZWVDb25zdGFudCgpIGNv
bnN0OworICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKICAgICAKICAgICAv
LyBHZXQgdGhlIGNhbGxlZSBnaXZlbiBhIG1hY2hpbmUgY2FsbCBmcmFtZSB0byB3aGljaCB0aGlz
IElubGluZUNhbGxGcmFtZSBiZWxvbmdzLgogICAgIEpTRnVuY3Rpb24qIGNhbGxlZUZvckNhbGxG
cmFtZShFeGVjU3RhdGUqKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9JbnN0cnVjdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9JbnN0cnVjdGlvbi5oCShyZXZpc2lvbiAxODI0OTgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvSW5zdHJ1Y3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiAr
MzIsNyBAQAogI2luY2x1ZGUgIkJhc2ljQmxvY2tMb2NhdGlvbi5oIgogI2luY2x1ZGUgIk1hY3Jv
QXNzZW1ibGVyLmgiCiAjaW5jbHVkZSAiT3Bjb2RlLmgiCisjaW5jbHVkZSAiU3ltYm9sVGFibGUu
aCIKICNpbmNsdWRlICJUeXBlTG9jYXRpb24uaCIKICNpbmNsdWRlICJQcm9wZXJ0eVNsb3QuaCIK
ICNpbmNsdWRlICJTcGVjaWFsUG9pbnRlci5oIgpAQCAtNDYsNyArNDcsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKIGNsYXNzIEFycmF5QWxsb2NhdGlvblByb2ZpbGU7CiBjbGFzcyBBcnJheVByb2ZpbGU7
CiBjbGFzcyBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZTsKLWNsYXNzIFZhcmlhYmxlV2F0Y2hwb2lu
dFNldDsKK2NsYXNzIFdhdGNocG9pbnRTZXQ7CiBzdHJ1Y3QgTExJbnRDYWxsTGlua0luZm87CiBz
dHJ1Y3QgVmFsdWVQcm9maWxlOwogCkBAIC0xMDYsNiArMTA3LDcgQEAgc3RydWN0IEluc3RydWN0
aW9uIHsKICAgICAgICAgT3Bjb2RlIG9wY29kZTsKICAgICAgICAgaW50IG9wZXJhbmQ7CiAgICAg
ICAgIFdyaXRlQmFycmllckJhc2U8U3RydWN0dXJlPiBzdHJ1Y3R1cmU7CisgICAgICAgIFdyaXRl
QmFycmllckJhc2U8U3ltYm9sVGFibGU+IHN5bWJvbFRhYmxlOwogICAgICAgICBXcml0ZUJhcnJp
ZXJCYXNlPFN0cnVjdHVyZUNoYWluPiBzdHJ1Y3R1cmVDaGFpbjsKICAgICAgICAgV3JpdGVCYXJy
aWVyQmFzZTxKU0NlbGw+IGpzQ2VsbDsKICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiB2
YXJpYWJsZVBvaW50ZXI7CkBAIC0xMTcsOCArMTE5LDcgQEAgc3RydWN0IEluc3RydWN0aW9uIHsK
ICAgICAgICAgQXJyYXlQcm9maWxlKiBhcnJheVByb2ZpbGU7CiAgICAgICAgIEFycmF5QWxsb2Nh
dGlvblByb2ZpbGUqIGFycmF5QWxsb2NhdGlvblByb2ZpbGU7CiAgICAgICAgIE9iamVjdEFsbG9j
YXRpb25Qcm9maWxlKiBvYmplY3RBbGxvY2F0aW9uUHJvZmlsZTsKLSAgICAgICAgVmFyaWFibGVX
YXRjaHBvaW50U2V0KiB3YXRjaHBvaW50U2V0OwotICAgICAgICBXcml0ZUJhcnJpZXJCYXNlPEpT
TGV4aWNhbEVudmlyb25tZW50PiBsZXhpY2FsRW52aXJvbm1lbnQ7CisgICAgICAgIFdhdGNocG9p
bnRTZXQqIHdhdGNocG9pbnRTZXQ7CiAgICAgICAgIHZvaWQqIHBvaW50ZXI7CiAgICAgICAgIGJv
b2wqIHByZWRpY2F0ZVBvaW50ZXI7CiAgICAgICAgIFRvVGhpc1N0YXR1cyB0b1RoaXNTdGF0dXM7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFyaWFibGVXYXRjaHBvaW50
U2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFy
aWFibGVXYXRjaHBvaW50U2V0LmNwcAkocmV2aXNpb24gMTgyNDk4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1ZhcmlhYmxlV2F0Y2hwb2ludFNldC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNDkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVmFyaWFibGVXYXRjaHBv
aW50U2V0LmgiCi0KLSNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCi0KLW5hbWVzcGFjZSBKU0Mgewot
Ci12b2lkIFZhcmlhYmxlV3JpdGVGaXJlRGV0YWlsOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNv
bnN0Ci17Ci0gICAgb3V0LnByaW50KCJXcml0ZSB0byAiLCBtX25hbWUsICIgaW4gIiwgSlNWYWx1
ZShtX29iamVjdCkpOwotfQotCi12b2lkIFZhcmlhYmxlV2F0Y2hwb2ludFNldDo6bm90aWZ5V3Jp
dGUoVk0mIHZtLCBKU1ZhbHVlIHZhbHVlLCBKU09iamVjdCogYmFzZU9iamVjdCwgY29uc3QgUHJv
cGVydHlOYW1lJiBwcm9wZXJ0eU5hbWUpCi17Ci0gICAgbm90aWZ5V3JpdGUodm0sIHZhbHVlLCBW
YXJpYWJsZVdyaXRlRmlyZURldGFpbChiYXNlT2JqZWN0LCBwcm9wZXJ0eU5hbWUpKTsKLX0KLQot
dm9pZCBWYXJpYWJsZVdhdGNocG9pbnRTZXQ6Om5vdGlmeVdyaXRlKFZNJiB2bSwgSlNWYWx1ZSB2
YWx1ZSwgY29uc3QgY2hhciogcmVhc29uKQotewotICAgIG5vdGlmeVdyaXRlKHZtLCB2YWx1ZSwg
U3RyaW5nRmlyZURldGFpbChyZWFzb24pKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYXJpYWJsZVdhdGNocG9pbnRTZXQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFyaWFibGVX
YXRjaHBvaW50U2V0LmgJKHJldmlzaW9uIDE4MjQ5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9WYXJpYWJsZVdhdGNocG9pbnRTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMSwx
MTAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE0IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgot
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAot
ICovCi0KLSNpZm5kZWYgVmFyaWFibGVXYXRjaHBvaW50U2V0X2gKLSNkZWZpbmUgVmFyaWFibGVX
YXRjaHBvaW50U2V0X2gKLQotI2luY2x1ZGUgIldhdGNocG9pbnQuaCIKLSNpbmNsdWRlICJXcml0
ZUJhcnJpZXIuaCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIEpTT2JqZWN0OwotY2xhc3Mg
U3ltYm9sVGFibGU7Ci0KLWNsYXNzIFZhcmlhYmxlV3JpdGVGaXJlRGV0YWlsIDogcHVibGljIEZp
cmVEZXRhaWwgewotcHVibGljOgotICAgIFZhcmlhYmxlV3JpdGVGaXJlRGV0YWlsKEpTT2JqZWN0
KiBvYmplY3QsIGNvbnN0IFByb3BlcnR5TmFtZSYgbmFtZSkKLSAgICAgICAgOiBtX29iamVjdChv
YmplY3QpCi0gICAgICAgICwgbV9uYW1lKG5hbWUpCi0gICAgewotICAgIH0KLSAgICAKLSAgICB2
aXJ0dWFsIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOwotCi1wcml2YXRl
OgotICAgIEpTT2JqZWN0KiBtX29iamVjdDsKLSAgICBjb25zdCBQcm9wZXJ0eU5hbWUmIG1fbmFt
ZTsKLX07Ci0KLWNsYXNzIFZhcmlhYmxlV2F0Y2hwb2ludFNldCA6IHB1YmxpYyBXYXRjaHBvaW50
U2V0IHsKLSAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwotcHVibGljOgot
ICAgIFZhcmlhYmxlV2F0Y2hwb2ludFNldChTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUpCi0gICAg
ICAgIDogV2F0Y2hwb2ludFNldChDbGVhcldhdGNocG9pbnQpCi0gICAgICAgICwgbV9zeW1ib2xU
YWJsZShzeW1ib2xUYWJsZSkKLSAgICB7Ci0gICAgfQotICAgIAotICAgIH5WYXJpYWJsZVdhdGNo
cG9pbnRTZXQoKSB7IH0KLSAgICAKLSAgICAvLyBGb3IgdGhlIHB1cnBvc2Ugb2YgZGVjaWRpbmcg
d2hldGhlciBvciBub3QgdG8gd2F0Y2ggdGhpcyB2YXJpYWJsZSwgeW91IG9ubHkgbmVlZAotICAg
IC8vIHRvIGluc3BlY3QgaW5mZXJyZWRWYWx1ZSgpLiBJZiB0aGlzIHJldHVybnMgc29tZXRoaW5n
IG90aGVyIHRoYW4gdGhlIGVtcHR5Ci0gICAgLy8gdmFsdWUsIHRoZW4gaXQgbWVhbnMgdGhhdCBh
dCBhbGwgZnV0dXJlIHNhZmVwb2ludHMsIHRoaXMgd2F0Y2hwb2ludCBzZXQgd2lsbCBiZQotICAg
IC8vIGluIG9uZSBvZiB0aGVzZSBzdGF0ZXM6Ci0gICAgLy8KLSAgICAvLyAgICBJc1dhdGNoZWQ6
IGluIHRoaXMgY2FzZSwgdGhlIHZhcmlhYmxlJ3MgdmFsdWUgbXVzdCBzdGlsbCBiZSB0aGUKLSAg
ICAvLyAgICAgICAgaW5mZXJyZWRWYWx1ZS4KLSAgICAvLwotICAgIC8vICAgIElzSW52YWxpZGF0
ZWQ6IGluIHRoaXMgY2FzZSB0aGUgdmFyaWFibGUncyB2YWx1ZSBtYXkgYmUgYW55dGhpbmcgYnV0
IHlvdSdsbAotICAgIC8vICAgICAgICBlaXRoZXIgbm90aWNlIHRoYXQgaXQncyBpbnZhbGlkYXRl
ZCBhbmQgbm90IGluc3RhbGwgdGhlIHdhdGNocG9pbnQsIG9yCi0gICAgLy8gICAgICAgIHlvdSB3
aWxsIGhhdmUgYmVlbiBub3RpZmllZCB0aGF0IHRoZSB3YXRjaHBvaW50IHdhcyBmaXJlZC4KLSAg
ICBKU1ZhbHVlIGluZmVycmVkVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX2luZmVycmVkVmFsdWUu
Z2V0KCk7IH0KLSAgICAKLSAgICB2b2lkIG5vdGlmeVdyaXRlKFZNJiwgSlNWYWx1ZSwgY29uc3Qg
RmlyZURldGFpbCYpOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgbm90aWZ5V3JpdGUoVk0m
LCBKU1ZhbHVlLCBKU09iamVjdCogYmFzZU9iamVjdCwgY29uc3QgUHJvcGVydHlOYW1lJik7Ci0g
ICAgdm9pZCBub3RpZnlXcml0ZShWTSYsIEpTVmFsdWUsIGNvbnN0IGNoYXIqIHJlYXNvbik7Ci0g
ICAgCi0gICAgdm9pZCBpbnZhbGlkYXRlKGNvbnN0IEZpcmVEZXRhaWwmIGRldGFpbCkKLSAgICB7
Ci0gICAgICAgIG1faW5mZXJyZWRWYWx1ZS5jbGVhcigpOwotICAgICAgICBXYXRjaHBvaW50U2V0
OjppbnZhbGlkYXRlKGRldGFpbCk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgZmluYWxpemVVbmNv
bmRpdGlvbmFsbHkoY29uc3QgRmlyZURldGFpbCYgZGV0YWlsKQotICAgIHsKLSAgICAgICAgQVNT
RVJUKCEhbV9pbmZlcnJlZFZhbHVlID09IChzdGF0ZSgpID09IElzV2F0Y2hlZCkpOwotICAgICAg
ICBpZiAoIW1faW5mZXJyZWRWYWx1ZSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgSlNW
YWx1ZSBpbmZlcnJlZFZhbHVlID0gbV9pbmZlcnJlZFZhbHVlLmdldCgpOwotICAgICAgICBpZiAo
IWluZmVycmVkVmFsdWUuaXNDZWxsKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIEpT
Q2VsbCogY2VsbCA9IGluZmVycmVkVmFsdWUuYXNDZWxsKCk7Ci0gICAgICAgIGlmIChIZWFwOjpp
c01hcmtlZChjZWxsKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaW52YWxpZGF0ZShk
ZXRhaWwpOwotICAgIH0KLQotICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogYWRkcmVzc09mSW5m
ZXJyZWRWYWx1ZSgpIHsgcmV0dXJuICZtX2luZmVycmVkVmFsdWU7IH0KLSAgICAKLXByaXZhdGU6
Ci0gICAgU3ltYm9sVGFibGUmIG1fc3ltYm9sVGFibGU7Ci0gICAgV3JpdGVCYXJyaWVyPFVua25v
d24+IG1faW5mZXJyZWRWYWx1ZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCi0jZW5kaWYg
Ly8gVmFyaWFibGVXYXRjaHBvaW50U2V0X2gKLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1ZhcmlhYmxlV2F0Y2hwb2ludFNldElubGluZXMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFyaWFibGVXYXRjaHBvaW50U2V0SW5saW5l
cy5oCShyZXZpc2lvbiAxODI0OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
VmFyaWFibGVXYXRjaHBvaW50U2V0SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYwICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
LSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lm
bmRlZiBWYXJpYWJsZVdhdGNocG9pbnRTZXRJbmxpbmVzX2gKLSNkZWZpbmUgVmFyaWFibGVXYXRj
aHBvaW50U2V0SW5saW5lc19oCi0KLSNpbmNsdWRlICJTeW1ib2xUYWJsZS5oIgotI2luY2x1ZGUg
IlZhcmlhYmxlV2F0Y2hwb2ludFNldC5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQotaW5saW5lIHZv
aWQgVmFyaWFibGVXYXRjaHBvaW50U2V0Ojpub3RpZnlXcml0ZShWTSYgdm0sIEpTVmFsdWUgdmFs
dWUsIGNvbnN0IEZpcmVEZXRhaWwmIGRldGFpbCkKLXsKLSAgICBBU1NFUlQoISF2YWx1ZSk7Ci0g
ICAgc3dpdGNoIChzdGF0ZSgpKSB7Ci0gICAgY2FzZSBDbGVhcldhdGNocG9pbnQ6Ci0gICAgICAg
IG1faW5mZXJyZWRWYWx1ZS5zZXQodm0sICZtX3N5bWJvbFRhYmxlLCB2YWx1ZSk7Ci0gICAgICAg
IHN0YXJ0V2F0Y2hpbmcoKTsKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY2FzZSBJc1dhdGNoZWQ6
Ci0gICAgICAgIEFTU0VSVCghIW1faW5mZXJyZWRWYWx1ZSk7Ci0gICAgICAgIGlmICh2YWx1ZSA9
PSBtX2luZmVycmVkVmFsdWUuZ2V0KCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlu
dmFsaWRhdGUoZGV0YWlsKTsKLSAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgCi0gICAgY2Fz
ZSBJc0ludmFsaWRhdGVkOgotICAgICAgICBBU1NFUlQoIW1faW5mZXJyZWRWYWx1ZSk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0gICAgICAgIAotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
fQotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotI2VuZGlmIC8vIFZhcmlhYmxlV2F0Y2hwb2ludFNl
dElubGluZXNfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhcmlhYmxl
V3JpdGVGaXJlRGV0YWlsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvVmFyaWFibGVXcml0ZUZpcmVEZXRhaWwuY3BwCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhcmlhYmxlV3JpdGVGaXJlRGV0YWlsLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJWYXJp
YWJsZVdyaXRlRmlyZURldGFpbC5oIgorCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorCituYW1l
c3BhY2UgSlNDIHsKKwordm9pZCBWYXJpYWJsZVdyaXRlRmlyZURldGFpbDo6ZHVtcChQcmludFN0
cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgiV3JpdGUgdG8gIiwgbV9uYW1lLCAi
IGluICIsIEpTVmFsdWUobV9vYmplY3QpKTsKK30KKwordm9pZCBWYXJpYWJsZVdyaXRlRmlyZURl
dGFpbDo6dG91Y2goV2F0Y2hwb2ludFNldCogc2V0LCBKU09iamVjdCogb2JqZWN0LCBjb25zdCBQ
cm9wZXJ0eU5hbWUmIG5hbWUpCit7CisgICAgc2V0LT50b3VjaChWYXJpYWJsZVdyaXRlRmlyZURl
dGFpbChvYmplY3QsIG5hbWUpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYXJpYWJsZVdyaXRlRmlyZURldGFpbC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYXJpYWJsZVdyaXRl
RmlyZURldGFpbC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1ZhcmlhYmxlV3JpdGVGaXJlRGV0YWlsLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1
NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIFZhcmlhYmxlV3JpdGVGaXJlRGV0YWlsX2gKKyNkZWZpbmUgVmFyaWFibGVXcml0ZUZpcmVE
ZXRhaWxfaAorCisjaW5jbHVkZSAiV2F0Y2hwb2ludC5oIgorCituYW1lc3BhY2UgSlNDIHsKKwor
Y2xhc3MgSlNPYmplY3Q7CitjbGFzcyBQcm9wZXJ0eU5hbWU7CisKK2NsYXNzIFZhcmlhYmxlV3Jp
dGVGaXJlRGV0YWlsIDogcHVibGljIEZpcmVEZXRhaWwgeworcHVibGljOgorICAgIFZhcmlhYmxl
V3JpdGVGaXJlRGV0YWlsKEpTT2JqZWN0KiBvYmplY3QsIGNvbnN0IFByb3BlcnR5TmFtZSYgbmFt
ZSkKKyAgICAgICAgOiBtX29iamVjdChvYmplY3QpCisgICAgICAgICwgbV9uYW1lKG5hbWUpCisg
ICAgeworICAgIH0KKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNv
bnN0IG92ZXJyaWRlOworICAgIAorICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHRv
dWNoKFdhdGNocG9pbnRTZXQqLCBKU09iamVjdCosIGNvbnN0IFByb3BlcnR5TmFtZSYpOworCitw
cml2YXRlOgorICAgIEpTT2JqZWN0KiBtX29iamVjdDsKKyAgICBjb25zdCBQcm9wZXJ0eU5hbWUm
IG1fbmFtZTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gVmFyaWFibGVX
cml0ZUZpcmVEZXRhaWxfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1dh
dGNocG9pbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
V2F0Y2hwb2ludC5oCShyZXZpc2lvbiAxODI0OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvV2F0Y2hwb2ludC5oCSh3b3JraW5nIGNvcHkpCkBAIC04Nyw2ICs4NywxMiBAQCBw
dWJsaWM6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgV2F0Y2hwb2ludFNldChXYXRjaHBvaW50U3Rh
dGUpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIH5XYXRjaHBvaW50U2V0KCk7IC8vIE5vdGUgdGhh
dCB0aGlzIHdpbGwgbm90IGZpcmUgYW55IG9mIHRoZSB3YXRjaHBvaW50czsgaWYgeW91IG5lZWQg
dG8ga25vdyB3aGVuIGEgV2F0Y2hwb2ludFNldCBkaWVzIHRoZW4geW91IG5lZWQgYSBzZXBhcmF0
ZSBtZWNoYW5pc20gZm9yIHRoaXMuCiAgICAgCisgICAgLy8gRmFzdCB3YXkgb2YgZ2V0dGluZyB0
aGUgc3RhdGUsIHdoaWNoIG9ubHkgd29ya3MgZnJvbSB0aGUgbWFpbiB0aHJlYWQuCisgICAgV2F0
Y2hwb2ludFN0YXRlIHN0YXRlT25NYWluVGhyZWFkKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxXYXRjaHBvaW50U3RhdGU+KG1fc3RhdGUpOworICAgIH0KKyAgICAK
ICAgICAvLyBJdCBpcyBzYWZlIHRvIGNhbGwgdGhpcyBmcm9tIGFub3RoZXIgdGhyZWFkLiBJdCBt
YXkgcmV0dXJuIGFuIG9sZAogICAgIC8vIHN0YXRlLiBHdWFyYW50ZWVzIHRoYXQgaWYgKmZpcnN0
KiByZWFkIHRoZSBzdGF0ZSgpIG9mIHRoZSB0aGluZyBiZWluZwogICAgIC8vIHdhdGNoZWQgYW5k
IGl0IHJldHVybmVkIElzV2F0Y2hlZCBhbmQgKnNlY29uZCogeW91IGFjdHVhbGx5IHJlYWQgaXRz
CkBAIC0xMjUsMjAgKzEzMSwyNCBAQCBwdWJsaWM6CiAgICAgLy8gc2V0IHdhdGNocG9pbnRzIHRo
YXQgd2UgYmVsaWV2ZSB3aWxsIGFjdHVhbGx5IGJlIGZpcmVkLgogICAgIHZvaWQgc3RhcnRXYXRj
aGluZygpCiAgICAgewotICAgICAgICBBU1NFUlQoc3RhdGUoKSAhPSBJc0ludmFsaWRhdGVkKTsK
KyAgICAgICAgQVNTRVJUKG1fc3RhdGUgIT0gSXNJbnZhbGlkYXRlZCk7CisgICAgICAgIGlmICht
X3N0YXRlID09IElzV2F0Y2hlZCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgV1RGOjpz
dG9yZVN0b3JlRmVuY2UoKTsKICAgICAgICAgbV9zdGF0ZSA9IElzV2F0Y2hlZDsKKyAgICAgICAg
V1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBmaXJlQWxsKGNv
bnN0IEZpcmVEZXRhaWwmIGRldGFpbCkKICAgICB7Ci0gICAgICAgIGlmIChMSUtFTFkoc3RhdGUo
KSAhPSBJc1dhdGNoZWQpKQorICAgICAgICBpZiAoTElLRUxZKG1fc3RhdGUgIT0gSXNXYXRjaGVk
KSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgZmlyZUFsbFNsb3coZGV0YWlsKTsKICAg
ICB9CiAgICAgCiAgICAgdm9pZCBmaXJlQWxsKGNvbnN0IGNoYXIqIHJlYXNvbikKICAgICB7Ci0g
ICAgICAgIGlmIChMSUtFTFkoc3RhdGUoKSAhPSBJc1dhdGNoZWQpKQorICAgICAgICBpZiAoTElL
RUxZKG1fc3RhdGUgIT0gSXNXYXRjaGVkKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
ZmlyZUFsbFNsb3cocmVhc29uKTsKICAgICB9CkBAIC0xNTEsMTMgKzE2MSwyMyBAQCBwdWJsaWM6
CiAgICAgICAgICAgICBmaXJlQWxsKGRldGFpbCk7CiAgICAgfQogICAgIAorICAgIHZvaWQgdG91
Y2goY29uc3QgY2hhciogcmVhc29uKQorICAgIHsKKyAgICAgICAgdG91Y2goU3RyaW5nRmlyZURl
dGFpbChyZWFzb24pKTsKKyAgICB9CisgICAgCiAgICAgdm9pZCBpbnZhbGlkYXRlKGNvbnN0IEZp
cmVEZXRhaWwmIGRldGFpbCkKICAgICB7CiAgICAgICAgIGlmIChzdGF0ZSgpID09IElzV2F0Y2hl
ZCkKICAgICAgICAgICAgIGZpcmVBbGwoZGV0YWlsKTsKICAgICAgICAgbV9zdGF0ZSA9IElzSW52
YWxpZGF0ZWQ7CiAgICAgfQotCisgICAgCisgICAgdm9pZCBpbnZhbGlkYXRlKGNvbnN0IGNoYXIq
IHJlYXNvbikKKyAgICB7CisgICAgICAgIGludmFsaWRhdGUoU3RyaW5nRmlyZURldGFpbChyZWFz
b24pKTsKKyAgICB9CisgICAgCiAgICAgaW50OF90KiBhZGRyZXNzT2ZTdGF0ZSgpIHsgcmV0dXJu
ICZtX3N0YXRlOyB9CiAgICAgaW50OF90KiBhZGRyZXNzT2ZTZXRJc05vdEVtcHR5KCkgeyByZXR1
cm4gJm1fc2V0SXNOb3RFbXB0eTsgfQogICAgIApAQCAtMjA5LDE4ICsyMjksMzQgQEAgcHVibGlj
OgogICAgICAgICBmcmVlRmF0KCk7CiAgICAgfQogICAgIAorICAgIC8vIEZhc3Qgd2F5IG9mIGdl
dHRpbmcgdGhlIHN0YXRlLCB3aGljaCBvbmx5IHdvcmtzIGZyb20gdGhlIG1haW4gdGhyZWFkLgor
ICAgIFdhdGNocG9pbnRTdGF0ZSBzdGF0ZU9uTWFpblRocmVhZCgpIGNvbnN0CisgICAgeworICAg
ICAgICB1aW50cHRyX3QgZGF0YSA9IG1fZGF0YTsKKyAgICAgICAgaWYgKGlzRmF0KGRhdGEpKQor
ICAgICAgICAgICAgcmV0dXJuIGZhdChkYXRhKS0+c3RhdGVPbk1haW5UaHJlYWQoKTsKKyAgICAg
ICAgcmV0dXJuIGRlY29kZVN0YXRlKGRhdGEpOworICAgIH0KKworICAgIC8vIEl0IGlzIHNhZmUg
dG8gY2FsbCB0aGlzIGZyb20gYW5vdGhlciB0aHJlYWQuIEl0IG1heSByZXR1cm4gYSBwcmlvciBz
dGF0ZSwKKyAgICAvLyBidXQgdGhhdCBzaG91bGQgYmUgZmluZSBzaW5jZSB5b3Ugc2hvdWxkIG9u
bHkgcGVyZm9ybSBhY3Rpb25zIGJhc2VkIG9uIHRoZQorICAgIC8vIHN0YXRlIGlmIHlvdSBhbHNv
IGFkZCBhIHdhdGNocG9pbnQuCisgICAgV2F0Y2hwb2ludFN0YXRlIHN0YXRlKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIFdURjo6bG9hZExvYWRGZW5jZSgpOworICAgICAgICB1aW50cHRyX3QgZGF0
YSA9IG1fZGF0YTsKKyAgICAgICAgV1RGOjpsb2FkTG9hZEZlbmNlKCk7CisgICAgICAgIGlmIChp
c0ZhdChkYXRhKSkKKyAgICAgICAgICAgIHJldHVybiBmYXQoZGF0YSktPnN0YXRlKCk7CisgICAg
ICAgIHJldHVybiBkZWNvZGVTdGF0ZShkYXRhKTsKKyAgICB9CisgICAgCiAgICAgLy8gSXQgaXMg
c2FmZSB0byBjYWxsIHRoaXMgZnJvbSBhbm90aGVyIHRocmVhZC4gIEl0IG1heSByZXR1cm4gZmFs
c2UKICAgICAvLyBldmVuIGlmIHRoZSBzZXQgYWN0dWFsbHkgaGFkIGJlZW4gaW52YWxpZGF0ZWQs
IGJ1dCB0aGF0IG91Z2h0IHRvIGhhcHBlbgogICAgIC8vIG9ubHkgaW4gdGhlIGNhc2Ugb2YgcmFj
ZXMsIGFuZCBzaG91bGQgYmUgcmFyZS4KICAgICBib29sIGhhc0JlZW5JbnZhbGlkYXRlZCgpIGNv
bnN0CiAgICAgewotICAgICAgICBXVEY6OmxvYWRMb2FkRmVuY2UoKTsKLSAgICAgICAgdWludHB0
cl90IGRhdGEgPSBtX2RhdGE7Ci0gICAgICAgIGlmIChpc0ZhdChkYXRhKSkgewotICAgICAgICAg
ICAgV1RGOjpsb2FkTG9hZEZlbmNlKCk7Ci0gICAgICAgICAgICByZXR1cm4gZmF0KGRhdGEpLT5o
YXNCZWVuSW52YWxpZGF0ZWQoKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gZGVjb2RlU3Rh
dGUoZGF0YSkgPT0gSXNJbnZhbGlkYXRlZDsKKyAgICAgICAgcmV0dXJuIHN0YXRlKCkgPT0gSXNJ
bnZhbGlkYXRlZDsKICAgICB9CiAgICAgCiAgICAgLy8gTGlrZSBoYXNCZWVuSW52YWxpZGF0ZWQo
KSwgbWF5IGJlIGNhbGxlZCBmcm9tIGFub3RoZXIgdGhyZWFkLgpAQCAtMjUzLDYgKzI4OSwxNCBA
QCBwdWJsaWM6CiAgICAgICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CiAgICAgfQogICAgIAor
ICAgIHZvaWQgaW52YWxpZGF0ZShjb25zdCBGaXJlRGV0YWlsJiBkZXRhaWwpCisgICAgeworICAg
ICAgICBpZiAoaXNGYXQoKSkKKyAgICAgICAgICAgIGZhdCgpLT5pbnZhbGlkYXRlKGRldGFpbCk7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fZGF0YSA9IGVuY29kZVN0YXRlKElzSW52YWxp
ZGF0ZWQpOworICAgIH0KKyAgICAKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGZpcmVBbGwo
Y29uc3QgY2hhciogcmVhc29uKTsKICAgICAKICAgICB2b2lkIHRvdWNoKGNvbnN0IEZpcmVEZXRh
aWwmIGRldGFpbCkKQEAgLTI2MSw3ICszMDUsMTEgQEAgcHVibGljOgogICAgICAgICAgICAgZmF0
KCktPnRvdWNoKGRldGFpbCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAg
ICAgaWYgKGRlY29kZVN0YXRlKG1fZGF0YSkgPT0gQ2xlYXJXYXRjaHBvaW50KQorICAgICAgICB1
aW50cHRyX3QgZGF0YSA9IG1fZGF0YTsKKyAgICAgICAgaWYgKGRlY29kZVN0YXRlKGRhdGEpID09
IElzSW52YWxpZGF0ZWQpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIFdURjo6c3RvcmVT
dG9yZUZlbmNlKCk7CisgICAgICAgIGlmIChkZWNvZGVTdGF0ZShkYXRhKSA9PSBDbGVhcldhdGNo
cG9pbnQpCiAgICAgICAgICAgICBtX2RhdGEgPSBlbmNvZGVTdGF0ZShJc1dhdGNoZWQpOwogICAg
ICAgICBlbHNlCiAgICAgICAgICAgICBtX2RhdGEgPSBlbmNvZGVTdGF0ZShJc0ludmFsaWRhdGVk
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5l
cmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGls
ZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAxODI0OTgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDY2LDkgKzQ2Niw2IEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVy
YXRvcihWTSYKICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICBpZiAobV9zeW1ib2xUYWJsZS0+
c2NvcGVTaXplKCkpCi0gICAgICAgIGVtaXRPcGNvZGUob3BfdG91Y2hfZW50cnkpOwotCiAgICAg
aWYgKGlzQ29uc3RydWN0b3IoKSkgewogICAgICAgICBpZiAoY29uc3RydWN0b3JLaW5kKCkgPT0g
Q29uc3RydWN0b3JLaW5kOjpEZXJpdmVkKSB7CiAgICAgICAgICAgICBtX25ld1RhcmdldFJlZ2lz
dGVyID0gYWRkVmFyKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3Ry
YWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCShyZXZpc2lvbiAxODI0OTgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxp
bmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzNDIsNiArMTM0Miw3IEBAIGJvb2wgQWJzdHJhY3RJ
bnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICB9CiAKICAgICBjYXNlIENyZWF0ZVRoaXM6
IHsKKyAgICAgICAgLy8gRklYTUU6IFdlIGNhbiBmb2xkIHRoaXMgdG8gTmV3T2JqZWN0IGlmIHRo
ZSBpbmNvbWluZyBjYWxsZWUgaXMgYSBjb25zdGFudC4KICAgICAgICAgZm9yTm9kZShub2RlKS5z
ZXRUeXBlKFNwZWNGaW5hbE9iamVjdCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTE0MDEs
NiArMTQwMiwxNSBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAg
ICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBjYXNlIEdldENhbGxlZToKKyAgICAgICAgaWYg
KEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IGpzRHluYW1pY0Nhc3Q8RnVuY3Rpb25F
eGVjdXRhYmxlKj4obV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpKSkgeworICAgICAgICAg
ICAgSW5mZXJyZWRWYWx1ZSogc2luZ2xldG9uID0gZXhlY3V0YWJsZS0+c2luZ2xldG9uRnVuY3Rp
b24oKTsKKyAgICAgICAgICAgIGlmIChKU1ZhbHVlIHZhbHVlID0gc2luZ2xldG9uLT5pbmZlcnJl
ZFZhbHVlKCkpIHsKKyAgICAgICAgICAgICAgICBtX2dyYXBoLndhdGNocG9pbnRzKCkuYWRkTGF6
aWx5KHNpbmdsZXRvbik7CisgICAgICAgICAgICAgICAgSlNGdW5jdGlvbiogZnVuY3Rpb24gPSBq
c0Nhc3Q8SlNGdW5jdGlvbio+KHZhbHVlKTsKKyAgICAgICAgICAgICAgICBzZXRDb25zdGFudChu
b2RlLCAqbV9ncmFwaC5mcmVlemUoZnVuY3Rpb24pKTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUo
U3BlY0Z1bmN0aW9uKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDE4
MjQ5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yMTUsOCArMjE1LDYgQEAgcHJpdmF0ZToKICAgICAgICAgYm9v
bCBpc0RpcmVjdCk7CiAgICAgdm9pZCBlbWl0Q2hlY2tzKGNvbnN0IENvbnN0YW50U3RydWN0dXJl
Q2hlY2tWZWN0b3ImKTsKIAotICAgIE5vZGUqIGdldFNjb3BlKFZpcnR1YWxSZWdpc3RlciBzY29w
ZUNoYWluLCB1bnNpZ25lZCBza2lwQ291bnQpOwotICAgIAogICAgIHZvaWQgcHJlcGFyZVRvUGFy
c2VCbG9jaygpOwogICAgIHZvaWQgY2xlYXJDYWNoZXMoKTsKIApAQCAtMjc5LDggKzI3NywyMCBA
QCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGlmIChvcGVyYW5kLm9mZnNldCgpID09IEpTU3Rh
Y2s6OkNhbGxlZSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdlYWtKU0NvbnN0YW50KGNh
bGxlZSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAob3BlcmFuZC5vZmZzZXQo
KSA9PSBKU1N0YWNrOjpDYWxsZWUpCisgICAgICAgIH0gZWxzZSBpZiAob3BlcmFuZC5vZmZzZXQo
KSA9PSBKU1N0YWNrOjpDYWxsZWUpIHsKKyAgICAgICAgICAgIC8vIFdlIGhhdmUgdG8gZG8gc29t
ZSBjb25zdGFudC1mb2xkaW5nIGhlcmUgYmVjYXVzZSB0aGlzIGVuYWJsZXMgQ3JlYXRlVGhpcyBm
b2xkaW5nLiBOb3RlCisgICAgICAgICAgICAvLyB0aGF0IHdlIGRvbid0IGhhdmUgc3VjaCB3YXRj
aHBvaW50LWJhc2VkIGZvbGRpbmcgZm9yIGlubGluZWQgdXNlcyBvZiBDYWxsZWUsIHNpbmNlIGlu
IHRoYXQKKyAgICAgICAgICAgIC8vIGNhc2UgaWYgdGhlIGZ1bmN0aW9uIGlzIGEgc2luZ2xldG9u
IHRoZW4gd2UgYWxyZWFkeSBrbm93IGl0LgorICAgICAgICAgICAgaWYgKEZ1bmN0aW9uRXhlY3V0
YWJsZSogZXhlY3V0YWJsZSA9IGpzRHluYW1pY0Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4obV9j
b2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpKSkgeworICAgICAgICAgICAgICAgIEluZmVycmVk
VmFsdWUqIHNpbmdsZXRvbiA9IGV4ZWN1dGFibGUtPnNpbmdsZXRvbkZ1bmN0aW9uKCk7CisgICAg
ICAgICAgICAgICAgaWYgKEpTVmFsdWUgdmFsdWUgPSBzaW5nbGV0b24tPmluZmVycmVkVmFsdWUo
KSkgeworICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLndhdGNocG9pbnRzKCkuYWRkTGF6aWx5
KHNpbmdsZXRvbik7CisgICAgICAgICAgICAgICAgICAgIEpTRnVuY3Rpb24qIGZ1bmN0aW9uID0g
anNDYXN0PEpTRnVuY3Rpb24qPih2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB3
ZWFrSlNDb25zdGFudChmdW5jdGlvbik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQogICAgICAgICAgICAgcmV0dXJuIGFkZFRvR3JhcGgoR2V0Q2FsbGVlKTsKKyAgICAgICAgfQog
ICAgICAgICAKICAgICAgICAgcmV0dXJuIGdldERpcmVjdChtX2lubGluZVN0YWNrVG9wLT5yZW1h
cE9wZXJhbmQob3BlcmFuZCkpOwogICAgIH0KQEAgLTI1MjksMTQgKzI1MzksNiBAQCB2b2lkIEJ5
dGVDb2RlUGFyc2VyOjpjbGVhckNhY2hlcygpCiAgICAgbV9jb25zdGFudHMucmVzaXplKDApOwog
fQogCi1Ob2RlKiBCeXRlQ29kZVBhcnNlcjo6Z2V0U2NvcGUoVmlydHVhbFJlZ2lzdGVyIHNjb3Bl
Q2hhaW4sIHVuc2lnbmVkIHNraXBDb3VudCkKLXsKLSAgICBOb2RlKiBsb2NhbEJhc2UgPSBnZXQo
c2NvcGVDaGFpbik7Ci0gICAgZm9yICh1bnNpZ25lZCBuID0gc2tpcENvdW50OyBuLS07KQotICAg
ICAgICBsb2NhbEJhc2UgPSBhZGRUb0dyYXBoKFNraXBTY29wZSwgbG9jYWxCYXNlKTsKLSAgICBy
ZXR1cm4gbG9jYWxCYXNlOwotfQotCiBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVu
c2lnbmVkIGxpbWl0KQogewogICAgIGJvb2wgc2hvdWxkQ29udGludWVQYXJzaW5nID0gdHJ1ZTsK
QEAgLTI2MDYsMTEgKzI2MDgsNiBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVu
c2lnbmVkCiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9lbnRlcik7CiAgICAgICAgIH0KICAg
ICAgICAgICAgIAotICAgICAgICBjYXNlIG9wX3RvdWNoX2VudHJ5OgotICAgICAgICAgICAgaWYg
KG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLT5zeW1ib2xUYWJsZSgpLT5tX2Z1bmN0aW9u
RW50ZXJlZE9uY2UuaXNTdGlsbFZhbGlkKCkpCi0gICAgICAgICAgICAgICAgYWRkVG9HcmFwaChG
b3JjZU9TUkV4aXQpOwotICAgICAgICAgICAgTkVYVF9PUENPREUob3BfdG91Y2hfZW50cnkpOwot
ICAgICAgICAgICAgCiAgICAgICAgIGNhc2Ugb3BfdG9fdGhpczogewogICAgICAgICAgICAgTm9k
ZSogb3AxID0gZ2V0VGhpcygpOwogICAgICAgICAgICAgaWYgKG9wMS0+b3AoKSAhPSBUb1RoaXMp
IHsKQEAgLTMzODgsMTcgKzMzODUsMjggQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9j
ayh1bnNpZ25lZAogICAgICAgICAgICAgY2FzZSBMb2NhbENsb3N1cmVWYXI6CiAgICAgICAgICAg
ICBjYXNlIENsb3N1cmVWYXI6CiAgICAgICAgICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgICAgICAgICAgSlNMZXhpY2FsRW52aXJvbm1lbnQqIGxl
eGljYWxFbnZpcm9ubWVudCA9IGN1cnJlbnRJbnN0cnVjdGlvbls2XS51LmxleGljYWxFbnZpcm9u
bWVudC5nZXQoKTsKLSAgICAgICAgICAgICAgICBpZiAobGV4aWNhbEVudmlyb25tZW50Ci0gICAg
ICAgICAgICAgICAgICAgICYmIGxleGljYWxFbnZpcm9ubWVudC0+c3ltYm9sVGFibGUoKS0+bV9m
dW5jdGlvbkVudGVyZWRPbmNlLmlzU3RpbGxWYWxpZCgpKSB7Ci0gICAgICAgICAgICAgICAgICAg
IG1fZ3JhcGgud2F0Y2hwb2ludHMoKS5hZGRMYXppbHkobGV4aWNhbEVudmlyb25tZW50LT5zeW1i
b2xUYWJsZSgpLT5tX2Z1bmN0aW9uRW50ZXJlZE9uY2UpOwotICAgICAgICAgICAgICAgICAgICBh
ZGRUb0dyYXBoKFBoYW50b20sIGdldERpcmVjdChtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJh
bmQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpKSkpOwot
ICAgICAgICAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGRzdCksIHdlYWtKU0NvbnN0
YW50KGxleGljYWxFbnZpcm9ubWVudCkpOworICAgICAgICAgICAgICAgIE5vZGUqIGxvY2FsQmFz
ZSA9IGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCkp
OworICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoUGhhbnRvbSwgbG9jYWxCYXNlKTsgLy8gT1NS
IGV4aXQgY2Fubm90IGhhbmRsZSByZXNvbHZlX3Njb3BlIG9uIGEgRENFJ2Qgc2NvcGUuCisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSB2YXJpb3VzIGZvcm1zIG9m
IGNvbnN0YW50IGZvbGRpbmcgaGVyZS4gVGhpcyBpcyBuZWNlc3NhcnkgdG8gYXZvaWQKKyAgICAg
ICAgICAgICAgICAvLyBzcHVyaW91cyByZWNvbXBpbGVzIGluIGRlYWQtYnV0LWZvbGRhYmxlIGNv
ZGUuCisgICAgICAgICAgICAgICAgaWYgKFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbls2XS51LnN5bWJvbFRhYmxlLmdldCgpKSB7CisgICAgICAgICAgICAgICAg
ICAgIEluZmVycmVkVmFsdWUqIHNpbmdsZXRvbiA9IHN5bWJvbFRhYmxlLT5zaW5nbGV0b25TY29w
ZSgpOworICAgICAgICAgICAgICAgICAgICBpZiAoSlNWYWx1ZSB2YWx1ZSA9IHNpbmdsZXRvbi0+
aW5mZXJyZWRWYWx1ZSgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLndhdGNo
cG9pbnRzKCkuYWRkTGF6aWx5KHNpbmdsZXRvbik7CisgICAgICAgICAgICAgICAgICAgICAgICBz
ZXQoVmlydHVhbFJlZ2lzdGVyKGRzdCksIHdlYWtKU0NvbnN0YW50KHZhbHVlKSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoSlNTY29wZSogc2NvcGUgPSBsb2NhbEJhc2Ut
PmR5bmFtaWNDYXN0Q29uc3RhbnQ8SlNTY29wZSo+KCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBuID0gZGVwdGg7IG4tLTspCisgICAgICAgICAgICAgICAgICAgICAgICBz
Y29wZSA9IHNjb3BlLT5uZXh0KCk7CisgICAgICAgICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVn
aXN0ZXIoZHN0KSwgd2Vha0pTQ29uc3RhbnQoc2NvcGUpKTsKICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVn
aXN0ZXIoZHN0KSwgZ2V0U2NvcGUoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsy
XS51Lm9wZXJhbmQpLCBkZXB0aCkpOwotICAgICAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJh
bWUoKSkKLSAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChQaGFudG9tLCBnZXREaXJlY3Qo
bV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5z
dHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSkpKTsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IG4gPSBkZXB0aDsgbi0tOykKKyAgICAgICAgICAgICAgICAgICAgbG9jYWxCYXNlID0gYWRkVG9H
cmFwaChTa2lwU2NvcGUsIGxvY2FsQmFzZSk7CisgICAgICAgICAgICAgICAgc2V0KFZpcnR1YWxS
ZWdpc3Rlcihkc3QpLCBsb2NhbEJhc2UpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgY2FzZSBEeW5hbWljOgpAQCAtMzQ1MCwxOSArMzQ1OCw1OCBA
QCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICBj
YXNlIEdsb2JhbFZhcjoKICAgICAgICAgICAgIGNhc2UgR2xvYmFsVmFyV2l0aFZhckluamVjdGlv
bkNoZWNrczogewogICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoUGhhbnRvbSwgZ2V0KFZpcnR1
YWxSZWdpc3RlcihzY29wZSkpKTsKLSAgICAgICAgICAgICAgICBDb25jdXJyZW50SklUTG9ja2Vy
IGxvY2tlcihnbG9iYWxPYmplY3QtPnN5bWJvbFRhYmxlKCktPm1fbG9jayk7Ci0gICAgICAgICAg
ICAgICAgU3ltYm9sVGFibGVFbnRyeSBlbnRyeSA9IGdsb2JhbE9iamVjdC0+c3ltYm9sVGFibGUo
KS0+Z2V0KGxvY2tlciwgdWlkKTsKLSAgICAgICAgICAgICAgICBWYXJpYWJsZVdhdGNocG9pbnRT
ZXQqIHdhdGNocG9pbnRTZXQgPSBlbnRyeS53YXRjaHBvaW50U2V0KCk7Ci0gICAgICAgICAgICAg
ICAgSlNWYWx1ZSBpbmZlcnJlZFZhbHVlID0KLSAgICAgICAgICAgICAgICAgICAgd2F0Y2hwb2lu
dFNldCA/IHdhdGNocG9pbnRTZXQtPmluZmVycmVkVmFsdWUoKSA6IEpTVmFsdWUoKTsKLSAgICAg
ICAgICAgICAgICBpZiAoIWluZmVycmVkVmFsdWUpIHsKLSAgICAgICAgICAgICAgICAgICAgU3Bl
Y3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IGdldFByZWRpY3Rpb24oKTsKLSAgICAgICAgICAgICAg
ICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rlcihkc3QpLCBhZGRUb0dyYXBoKEdldEdsb2JhbFZhciwg
T3BJbmZvKG9wZXJhbmQpLCBPcEluZm8ocHJlZGljdGlvbikpKTsKLSAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgV2F0Y2hwb2ludFNldCogd2F0Y2hwb2ludFNldDsK
KyAgICAgICAgICAgICAgICBTY29wZU9mZnNldCBvZmZzZXQ7CisgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihnbG9iYWxPYmpl
Y3QtPnN5bWJvbFRhYmxlKCktPm1fbG9jayk7CisgICAgICAgICAgICAgICAgICAgIFN5bWJvbFRh
YmxlRW50cnkgZW50cnkgPSBnbG9iYWxPYmplY3QtPnN5bWJvbFRhYmxlKCktPmdldChsb2NrZXIs
IHVpZCk7CisgICAgICAgICAgICAgICAgICAgIHdhdGNocG9pbnRTZXQgPSBlbnRyeS53YXRjaHBv
aW50U2V0KCk7CisgICAgICAgICAgICAgICAgICAgIG9mZnNldCA9IGVudHJ5LnNjb3BlT2Zmc2V0
KCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICh3YXRjaHBvaW50U2V0
ICYmIHdhdGNocG9pbnRTZXQtPnN0YXRlKCkgPT0gSXNXYXRjaGVkKSB7CisgICAgICAgICAgICAg
ICAgICAgIC8vIFRoaXMgaGFzIGEgZnVuIGNvbmN1cnJlbmN5IHN0b3J5LiBUaGVyZSBpcyB0aGUg
cG9zc2liaWxpdHkgb2YgYSByYWNlIGluIHR3bworICAgICAgICAgICAgICAgICAgICAvLyBkaXJl
Y3Rpb25zOgorICAgICAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgICAgICAvLyBX
ZSBzZWUgdGhhdCB0aGUgc2V0IElzV2F0Y2hlZCwgYnV0IGluIHRoZSBtZWFudGltZSBpdCBnZXRz
IGludmFsaWRhdGVkOiB0aGlzIGlzCisgICAgICAgICAgICAgICAgICAgIC8vIGZpbmUgYmVjYXVz
ZSBpZiB3ZSBzYXcgdGhhdCBpdCBJc1dhdGNoZWQgdGhlbiB3ZSBhZGQgYSB3YXRjaHBvaW50LiBJ
ZiBpdCBnZXRzCisgICAgICAgICAgICAgICAgICAgIC8vIGludmFsaWRhdGVkLCB0aGVuIHRoaXMg
Y29tcGlsYXRpb24gaXMgaW52YWxpZGF0ZWQuIE5vdGUgdGhhdCBpbiB0aGUgbWVhbnRpbWUgd2UK
KyAgICAgICAgICAgICAgICAgICAgLy8gbWF5IGxvYWQgYW4gYWJzdXJkIHZhbHVlIGZyb20gdGhl
IGdsb2JhbCBvYmplY3QuIEl0J3MgZmluZSB0byBsb2FkIGFuIGFic3VyZAorICAgICAgICAgICAg
ICAgICAgICAvLyB2YWx1ZSBpZiB0aGUgY29tcGlsYXRpb24gaXMgaW52YWxpZGF0ZWQgYW55d2F5
LgorICAgICAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgICAgICAvLyBXZSBzZWUg
dGhhdCB0aGUgc2V0IElzV2F0Y2hlZCwgYnV0IHRoZSB2YWx1ZSBpc24ndCB5ZXQgaW5pdGlhbGl6
ZWQ6IHRoaXMgaXNuJ3QKKyAgICAgICAgICAgICAgICAgICAgLy8gcG9zc2libGUgYmVjYXVzZSBv
ZiB0aGUgb3JkZXJpbmcgb2Ygb3BlcmF0aW9ucy4KKyAgICAgICAgICAgICAgICAgICAgLy8KKyAg
ICAgICAgICAgICAgICAgICAgLy8gSGVyZSdzIGhvdyB3ZSBvcmRlciBvcGVyYXRpb25zOgorICAg
ICAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgICAgICAvLyBNYWluIHRocmVhZCBz
dG9yZXMgdG8gdGhlIGdsb2JhbCBvYmplY3Q6IGFsd2F5cyBzdG9yZSBhIHZhbHVlIGZpcnN0LCBh
bmQgb25seQorICAgICAgICAgICAgICAgICAgICAvLyBhZnRlciB0aGF0IGRvIHdlIHRvdWNoIHRo
ZSB3YXRjaHBvaW50IHNldC4gVGhlcmUgaXMgYSBmZW5jZSBpbiB0aGUgdG91Y2gsIHRoYXQKKyAg
ICAgICAgICAgICAgICAgICAgLy8gZW5zdXJlcyB0aGF0IHRoZSBzdG9yZSB0byB0aGUgZ2xvYmFs
IG9iamVjdCBhbHdheXMgaGFwcGVucyBiZWZvcmUgdGhlIHRvdWNoIG9uIHRoZQorICAgICAgICAg
ICAgICAgICAgICAvLyBzZXQuCisgICAgICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAg
ICAgICAgIC8vIENvbXBpbGF0aW9uIHRocmVhZDogYWx3YXlzIGZpcnN0IGxvYWQgdGhlIHN0YXRl
IG9mIHRoZSB3YXRjaHBvaW50IHNldCwgYW5kIHRoZW4KKyAgICAgICAgICAgICAgICAgICAgLy8g
bG9hZCB0aGUgdmFsdWUuIFRoZSBXYXRjaHBvaW50U2V0OjpzdGF0ZSgpIG1ldGhvZCBkb2VzIGZl
bmNlcyBmb3IgdXMgdG8gZW5zdXJlCisgICAgICAgICAgICAgICAgICAgIC8vIHRoYXQgdGhlIGxv
YWQgb2YgdGhlIHN0YXRlIGhhcHBlbnMgYmVmb3JlIG91ciBsb2FkIG9mIHRoZSB2YWx1ZS4KKyAg
ICAgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAgICAgLy8gRmluYWxpemluZyBj
b21waWxhdGlvbjogdGhpcyBoYXBwZW5zIG9uIHRoZSBtYWluIHRocmVhZCBhbmQgc3luY2hyb25v
dXNseSBjaGVja3MKKyAgICAgICAgICAgICAgICAgICAgLy8gdmFsaWRpdHkgb2YgYWxsIHdhdGNo
cG9pbnQgc2V0cy4KKyAgICAgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAgICAg
Ly8gV2Ugd2lsbCBvbmx5IHBlcmZvcm0gb3B0aW1pemF0aW9ucyBpZiB0aGUgbG9hZCBvZiB0aGUg
c3RhdGUgeWllbGRzIElzV2F0Y2hlZC4gVGhhdAorICAgICAgICAgICAgICAgICAgICAvLyBtZWFu
cyB0aGF0IGF0IGxlYXN0IG9uZSBzdG9yZSB3b3VsZCBoYXZlIGhhcHBlbmVkIHRvIGluaXRpYWxp
emUgdGhlIG9yaWdpbmFsIHZhbHVlCisgICAgICAgICAgICAgICAgICAgIC8vIG9mIHRoZSB2YXJp
YWJsZSAodGhhdCBpcywgdGhlIHZhbHVlIHdlJ2QgbGlrZSB0byBjb25zdGFudCBmb2xkIHRvKS4g
VGhlcmUgbWF5IGJlCisgICAgICAgICAgICAgICAgICAgIC8vIG90aGVyIHN0b3JlcyB0aGF0IGhh
cHBlbiBhZnRlciB0aGF0LCBidXQgdGhvc2Ugc3RvcmVzIHdpbGwgaW52YWxpZGF0ZSB0aGUKKyAg
ICAgICAgICAgICAgICAgICAgLy8gd2F0Y2hwb2ludCBzZXQgYW5kIGFsc28gdGhlIGNvbXBpbGF0
aW9uLgorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGJp
dHdpc2VfY2FzdDx1aW50cHRyX3Q+KCZnbG9iYWxPYmplY3QtPnZhcmlhYmxlQXQob2Zmc2V0KSkg
PT0gb3BlcmFuZCk7CisgICAgICAgICAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBnbG9iYWxP
YmplY3QtPnZhcmlhYmxlQXQob2Zmc2V0KS5nZXQoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KHZhbHVlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLndhdGNocG9pbnRzKCku
YWRkTGF6aWx5KHdhdGNocG9pbnRTZXQpOworICAgICAgICAgICAgICAgICAgICAgICAgc2V0KFZp
cnR1YWxSZWdpc3Rlcihkc3QpLCB3ZWFrSlNDb25zdGFudCh2YWx1ZSkpOworICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgbV9ncmFwaC53YXRjaHBvaW50
cygpLmFkZExhemlseSh3YXRjaHBvaW50U2V0KTsKLSAgICAgICAgICAgICAgICBzZXQoVmlydHVh
bFJlZ2lzdGVyKGRzdCksIHdlYWtKU0NvbnN0YW50KGluZmVycmVkVmFsdWUpKTsKKyAgICAgICAg
ICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0gZ2V0UHJlZGljdGlvbigpOworICAg
ICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoZHN0KSwgYWRkVG9HcmFwaChHZXRHbG9i
YWxWYXIsIE9wSW5mbyhvcGVyYW5kKSwgT3BJbmZvKHByZWRpY3Rpb24pKSk7CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBjYXNlIExvY2FsQ2xvc3Vy
ZVZhcjoKQEAgLTM0NzksNiArMzUyNiwxMCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJs
b2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAgICAgLy8gd29uJ3QgYmUgYWJsZSB0byBoYW5kbGUg
YW4gVW5kZWZpbmVkIHNjb3BlLgogICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoUGhhbnRvbSwg
c2NvcGVOb2RlKTsKICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyBDb25zdGFu
dCBmb2xkaW5nIGluIHRoZSBieXRlY29kZSBwYXJzZXIgaXMgaW1wb3J0YW50IGZvciBwZXJmb3Jt
YW5jZS4gVGhpcyBtYXkgbm90CisgICAgICAgICAgICAgICAgLy8gaGF2ZSBleGVjdXRlZCB5ZXQu
IElmIGl0IGhhc24ndCwgdGhlbiB3ZSB3b24ndCBoYXZlIGEgcHJlZGljdGlvbi4gTGFja2luZyBh
CisgICAgICAgICAgICAgICAgLy8gcHJlZGljdGlvbiwgd2UnZCBvdGhlcndpc2UgdGhpbmsgdGhh
dCBpdCBoYXMgdG8gZXhpdC4gVGhlbiB3aGVuIGl0IGRpZCBleGVjdXRlLCB3ZQorICAgICAgICAg
ICAgICAgIC8vIHdvdWxkIHJlY29tcGlsZS4gQnV0IGlmIHdlIGNhbiBmb2xkIGl0IGhlcmUsIHdl
IGF2b2lkIHRoZSBleGl0LgogICAgICAgICAgICAgICAgIGlmIChKU1ZhbHVlIHZhbHVlID0gbV9n
cmFwaC50cnlHZXRDb25zdGFudENsb3N1cmVWYXIoc2NvcGVOb2RlLCBTY29wZU9mZnNldChvcGVy
YW5kKSkpIHsKICAgICAgICAgICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rlcihkc3QpLCB3
ZWFrSlNDb25zdGFudCh2YWx1ZSkpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTM1
MDksNyArMzU2MCw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQK
ICAgICAgICAgICAgICAgICB1aWQgPSBudWxscHRyOwogICAgICAgICAgICAgCiAgICAgICAgICAg
ICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG51bGxwdHI7Ci0gICAgICAgICAgICBWYXJpYWJsZVdh
dGNocG9pbnRTZXQqIHdhdGNocG9pbnRzID0gbnVsbHB0cjsKKyAgICAgICAgICAgIFdhdGNocG9p
bnRTZXQqIHdhdGNocG9pbnRzID0gbnVsbHB0cjsKICAgICAgICAgICAgIHVpbnRwdHJfdCBvcGVy
YW5kOwogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIg
bG9ja2VyKG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+bV9sb2NrKTsKQEAgLTM1
NTIsOCArMzYwMywxMCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVk
CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIE5vZGUqIHZhbHVlTm9kZSA9IGdl
dChWaXJ0dWFsUmVnaXN0ZXIodmFsdWUpKTsKICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKFB1
dEdsb2JhbFZhciwgT3BJbmZvKG9wZXJhbmQpLCB2YWx1ZU5vZGUpOwotICAgICAgICAgICAgICAg
IGlmICh3YXRjaHBvaW50cyAmJiB3YXRjaHBvaW50cy0+c3RhdGUoKSAhPSBJc0ludmFsaWRhdGVk
KQotICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKE5vdGlmeVdyaXRlLCBPcEluZm8od2F0
Y2hwb2ludHMpLCB2YWx1ZU5vZGUpOworICAgICAgICAgICAgICAgIGlmICh3YXRjaHBvaW50cyAm
JiB3YXRjaHBvaW50cy0+c3RhdGUoKSAhPSBJc0ludmFsaWRhdGVkKSB7CisgICAgICAgICAgICAg
ICAgICAgIC8vIE11c3QgaGFwcGVuIGFmdGVyIHRoZSBzdG9yZS4gU2VlIGNvbW1lbnQgZm9yIEdl
dEdsb2JhbFZhci4KKyAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChOb3RpZnlXcml0ZSwg
T3BJbmZvKHdhdGNocG9pbnRzKSk7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
IC8vIEtlZXAgc2NvcGUgYWxpdmUgdW50aWwgYWZ0ZXIgcHV0LgogICAgICAgICAgICAgICAgIGFk
ZFRvR3JhcGgoUGhhbnRvbSwgZ2V0KFZpcnR1YWxSZWdpc3RlcihzY29wZSkpKTsKICAgICAgICAg
ICAgICAgICBicmVhazsKQEAgLTM1NjQsMTAgKzM2MTcsMTIgQEAgYm9vbCBCeXRlQ29kZVBhcnNl
cjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgICAgIE5vZGUqIHNjb3BlTm9kZSA9
IGdldChWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUpKTsKICAgICAgICAgICAgICAgICBOb2RlKiB2YWx1
ZU5vZGUgPSBnZXQoVmlydHVhbFJlZ2lzdGVyKHZhbHVlKSk7CiAKLSAgICAgICAgICAgICAgICBp
ZiAod2F0Y2hwb2ludHMgJiYgd2F0Y2hwb2ludHMtPnN0YXRlKCkgIT0gSXNJbnZhbGlkYXRlZCkK
LSAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChOb3RpZnlXcml0ZSwgT3BJbmZvKHdhdGNo
cG9pbnRzKSwgdmFsdWVOb2RlKTsKLQogICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoUHV0Q2xv
c3VyZVZhciwgT3BJbmZvKG9wZXJhbmQpLCBzY29wZU5vZGUsIHZhbHVlTm9kZSk7CisKKyAgICAg
ICAgICAgICAgICBpZiAod2F0Y2hwb2ludHMgJiYgd2F0Y2hwb2ludHMtPnN0YXRlKCkgIT0gSXNJ
bnZhbGlkYXRlZCkgeworICAgICAgICAgICAgICAgICAgICAvLyBNdXN0IGhhcHBlbiBhZnRlciB0
aGUgc3RvcmUuIFNlZSBjb21tZW50IGZvciBHZXRHbG9iYWxWYXIuCisgICAgICAgICAgICAgICAg
ICAgIGFkZFRvR3JhcGgoTm90aWZ5V3JpdGUsIE9wSW5mbyh3YXRjaHBvaW50cykpOworICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIGNhc2UgRHluYW1pYzoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q2FwYWJpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0NhcGFiaWxpdGllcy5jcHAJKHJldmlzaW9uIDE4MjQ5OCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTYsNyAr
OTYsNiBAQCBDYXBhYmlsaXR5TGV2ZWwgY2FwYWJpbGl0eUxldmVsKE9wY29kZUlECiAgICAgCiAg
ICAgc3dpdGNoIChvcGNvZGVJRCkgewogICAgIGNhc2Ugb3BfZW50ZXI6Ci0gICAgY2FzZSBvcF90
b3VjaF9lbnRyeToKICAgICBjYXNlIG9wX3RvX3RoaXM6CiAgICAgY2FzZSBvcF9jaGVja190ZHo6
CiAgICAgY2FzZSBvcF9jcmVhdGVfdGhpczoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ2xvYmJlcml6ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ2xvYmJlcml6ZS5oCShyZXZpc2lvbiAxODI0OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkod29ya2luZyBjb3B5KQpAQCAtMzExLDEwICszMTEs
MTQgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgICAgICB3
cml0ZShTaWRlU3RhdGUpOwogICAgICAgICByZXR1cm47CiAKLSAgICBjYXNlIENyZWF0ZUFjdGl2
YXRpb246CisgICAgY2FzZSBDcmVhdGVBY3RpdmF0aW9uOiB7CisgICAgICAgIFN5bWJvbFRhYmxl
KiB0YWJsZSA9IGdyYXBoLnN5bWJvbFRhYmxlRm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7Cisg
ICAgICAgIGlmICh0YWJsZS0+c2luZ2xldG9uU2NvcGUoKS0+aXNTdGlsbFZhbGlkKCkpCisgICAg
ICAgICAgICB3cml0ZShXYXRjaHBvaW50X2ZpcmUpOwogICAgICAgICByZWFkKEhlYXBPYmplY3RD
b3VudCk7CiAgICAgICAgIHdyaXRlKEhlYXBPYmplY3RDb3VudCk7CiAgICAgICAgIHJldHVybjsK
KyAgICB9CiAgICAgICAgIAogICAgIGNhc2UgQ3JlYXRlRGlyZWN0QXJndW1lbnRzOgogICAgIGNh
c2UgQ3JlYXRlU2NvcGVkQXJndW1lbnRzOgpAQCAtODU4LDExICs4NjIsMTcgQEAgdm9pZCBjbG9i
YmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgIGNhc2UgTmV3U3RyaW5nT2JqZWN0
OgogICAgIGNhc2UgUGhhbnRvbU5ld09iamVjdDoKICAgICBjYXNlIE1hdGVyaWFsaXplTmV3T2Jq
ZWN0OgotICAgIGNhc2UgTmV3RnVuY3Rpb246CiAgICAgICAgIHJlYWQoSGVhcE9iamVjdENvdW50
KTsKICAgICAgICAgd3JpdGUoSGVhcE9iamVjdENvdW50KTsKICAgICAgICAgcmV0dXJuOwogICAg
ICAgICAKKyAgICBjYXNlIE5ld0Z1bmN0aW9uOgorICAgICAgICBpZiAobm9kZS0+Y2FzdE9wZXJh
bmQ8RnVuY3Rpb25FeGVjdXRhYmxlKj4oKS0+c2luZ2xldG9uRnVuY3Rpb24oKS0+aXNTdGlsbFZh
bGlkKCkpCisgICAgICAgICAgICB3cml0ZShXYXRjaHBvaW50X2ZpcmUpOworICAgICAgICByZWFk
KEhlYXBPYmplY3RDb3VudCk7CisgICAgICAgIHdyaXRlKEhlYXBPYmplY3RDb3VudCk7CisgICAg
ICAgIHJldHVybjsKKwogICAgIGNhc2UgUmVnRXhwRXhlYzoKICAgICBjYXNlIFJlZ0V4cFRlc3Q6
CiAgICAgICAgIHJlYWQoUmVnRXhwU3RhdGUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmNwcAkocmV2aXNpb24gMTgyNDk4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ0LDYgKzQ0LDEzIEBAIHZvaWQgQXJyYXlCdWZmZXJWaWV3
V2F0Y2hwb2ludEFkYXB0b3I6OmEKICAgICBjb2RlQmxvY2stPnZtKCktPmhlYXAuYWRkUmVmZXJl
bmNlKG5ldXRlcmluZ1dhdGNocG9pbnQsIHZpZXctPmJ1ZmZlcigpKTsKIH0KIAordm9pZCBJbmZl
cnJlZFZhbHVlQWRhcHRvcjo6YWRkKAorICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBJbmZlcnJl
ZFZhbHVlKiBpbmZlcnJlZFZhbHVlLCBXYXRjaHBvaW50KiB3YXRjaHBvaW50KQoreworICAgIGNv
ZGVCbG9jay0+YWRkQ29uc3RhbnQoaW5mZXJyZWRWYWx1ZSk7IC8vIEZvciBjb21tb24gdXNlcnMs
IGl0IGRvZXNuJ3QgcmVhbGx5IG1hdHRlciBpZiBpdCdzIHdlYWsgb3Igbm90LiBJZiByZWZlcmVu
Y2VzIHRvIGl0IGdvIGF3YXksIHdlIGdvIGF3YXksIHRvby4KKyAgICBpbmZlcnJlZFZhbHVlLT5h
ZGQod2F0Y2hwb2ludCk7Cit9CisKIERlc2lyZWRXYXRjaHBvaW50czo6RGVzaXJlZFdhdGNocG9p
bnRzKCkgeyB9CiBEZXNpcmVkV2F0Y2hwb2ludHM6On5EZXNpcmVkV2F0Y2hwb2ludHMoKSB7IH0K
IApAQCAtNTcsNiArNjQsMTEgQEAgdm9pZCBEZXNpcmVkV2F0Y2hwb2ludHM6OmFkZExhemlseShJ
bmxpbgogICAgIG1faW5saW5lU2V0cy5hZGRMYXppbHkoJnNldCk7CiB9CiAKK3ZvaWQgRGVzaXJl
ZFdhdGNocG9pbnRzOjphZGRMYXppbHkoSW5mZXJyZWRWYWx1ZSogaW5mZXJyZWRWYWx1ZSkKK3sK
KyAgICBtX2luZmVycmVkVmFsdWVzLmFkZExhemlseShpbmZlcnJlZFZhbHVlKTsKK30KKwogdm9p
ZCBEZXNpcmVkV2F0Y2hwb2ludHM6OmFkZExhemlseShKU0FycmF5QnVmZmVyVmlldyogdmlldykK
IHsKICAgICBtX2J1ZmZlclZpZXdzLmFkZExhemlseSh2aWV3KTsKQEAgLTc0LDYgKzg2LDcgQEAg
dm9pZCBEZXNpcmVkV2F0Y2hwb2ludHM6OnJlYWxseUFkZChDb2RlQgogewogICAgIG1fc2V0cy5y
ZWFsbHlBZGQoY29kZUJsb2NrLCBjb21tb25EYXRhKTsKICAgICBtX2lubGluZVNldHMucmVhbGx5
QWRkKGNvZGVCbG9jaywgY29tbW9uRGF0YSk7CisgICAgbV9pbmZlcnJlZFZhbHVlcy5yZWFsbHlB
ZGQoY29kZUJsb2NrLCBjb21tb25EYXRhKTsKICAgICBtX2J1ZmZlclZpZXdzLnJlYWxseUFkZChj
b2RlQmxvY2ssIGNvbW1vbkRhdGEpOwogfQogCkBAIC04MSw2ICs5NCw3IEBAIGJvb2wgRGVzaXJl
ZFdhdGNocG9pbnRzOjphcmVTdGlsbFZhbGlkKCkKIHsKICAgICByZXR1cm4gbV9zZXRzLmFyZVN0
aWxsVmFsaWQoKQogICAgICAgICAmJiBtX2lubGluZVNldHMuYXJlU3RpbGxWYWxpZCgpCisgICAg
ICAgICYmIG1faW5mZXJyZWRWYWx1ZXMuYXJlU3RpbGxWYWxpZCgpCiAgICAgICAgICYmIG1fYnVm
ZmVyVmlld3MuYXJlU3RpbGxWYWxpZCgpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmgJKHJldmlzaW9uIDE4MjQ5OCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAy
MDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAiQ29kZU9yaWdpbi5o
IgogI2luY2x1ZGUgIkRGR0NvbW1vbkRhdGEuaCIKKyNpbmNsdWRlICJJbmZlcnJlZFZhbHVlLmgi
CiAjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlclZpZXcuaCIKICNpbmNsdWRlICJXYXRjaHBvaW50Lmgi
CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KQEAgLTUwLDYgKzUxLDE0IEBAIHN0cnVjdCBHZW5l
cmljU2V0QWRhcHRvciB7CiAgICAgc3RhdGljIGJvb2wgaGFzQmVlbkludmFsaWRhdGVkKFQqIHNl
dCkgeyByZXR1cm4gc2V0LT5oYXNCZWVuSW52YWxpZGF0ZWQoKTsgfQogfTsKIAorc3RydWN0IElu
ZmVycmVkVmFsdWVBZGFwdG9yIHsKKyAgICBzdGF0aWMgdm9pZCBhZGQoQ29kZUJsb2NrKiwgSW5m
ZXJyZWRWYWx1ZSosIFdhdGNocG9pbnQqKTsKKyAgICBzdGF0aWMgYm9vbCBoYXNCZWVuSW52YWxp
ZGF0ZWQoSW5mZXJyZWRWYWx1ZSogaW5mZXJyZWRWYWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVy
biBpbmZlcnJlZFZhbHVlLT5oYXNCZWVuSW52YWxpZGF0ZWQoKTsKKyAgICB9Cit9OworCiBzdHJ1
Y3QgQXJyYXlCdWZmZXJWaWV3V2F0Y2hwb2ludEFkYXB0b3IgewogICAgIHN0YXRpYyB2b2lkIGFk
ZChDb2RlQmxvY2sqLCBKU0FycmF5QnVmZmVyVmlldyosIFdhdGNocG9pbnQqKTsKICAgICBzdGF0
aWMgYm9vbCBoYXNCZWVuSW52YWxpZGF0ZWQoSlNBcnJheUJ1ZmZlclZpZXcqIHZpZXcpCkBAIC0x
MTksNiArMTI4LDcgQEAgcHVibGljOgogICAgIAogICAgIHZvaWQgYWRkTGF6aWx5KFdhdGNocG9p
bnRTZXQqKTsKICAgICB2b2lkIGFkZExhemlseShJbmxpbmVXYXRjaHBvaW50U2V0Jik7CisgICAg
dm9pZCBhZGRMYXppbHkoSW5mZXJyZWRWYWx1ZSopOwogICAgIHZvaWQgYWRkTGF6aWx5KEpTQXJy
YXlCdWZmZXJWaWV3Kik7CiAgICAgCiAgICAgYm9vbCBjb25zaWRlcihTdHJ1Y3R1cmUqKTsKQEAg
LTEzNSw2ICsxNDUsMTAgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIG1faW5saW5l
U2V0cy5pc1dhdGNoZWQoJnNldCk7CiAgICAgfQorICAgIGJvb2wgaXNXYXRjaGVkKEluZmVycmVk
VmFsdWUqIGluZmVycmVkVmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gbV9pbmZlcnJlZFZh
bHVlcy5pc1dhdGNoZWQoaW5mZXJyZWRWYWx1ZSk7CisgICAgfQogICAgIGJvb2wgaXNXYXRjaGVk
KEpTQXJyYXlCdWZmZXJWaWV3KiB2aWV3KQogICAgIHsKICAgICAgICAgcmV0dXJuIG1fYnVmZmVy
Vmlld3MuaXNXYXRjaGVkKHZpZXcpOwpAQCAtMTQzLDYgKzE1Nyw3IEBAIHB1YmxpYzoKIHByaXZh
dGU6CiAgICAgR2VuZXJpY0Rlc2lyZWRXYXRjaHBvaW50czxXYXRjaHBvaW50U2V0PiBtX3NldHM7
CiAgICAgR2VuZXJpY0Rlc2lyZWRXYXRjaHBvaW50czxJbmxpbmVXYXRjaHBvaW50U2V0PiBtX2lu
bGluZVNldHM7CisgICAgR2VuZXJpY0Rlc2lyZWRXYXRjaHBvaW50czxJbmZlcnJlZFZhbHVlLCBJ
bmZlcnJlZFZhbHVlQWRhcHRvcj4gbV9pbmZlcnJlZFZhbHVlczsKICAgICBHZW5lcmljRGVzaXJl
ZFdhdGNocG9pbnRzPEpTQXJyYXlCdWZmZXJWaWV3LCBBcnJheUJ1ZmZlclZpZXdXYXRjaHBvaW50
QWRhcHRvcj4gbV9idWZmZXJWaWV3czsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiAxODI0OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzExLDggKzMxMSw4IEBAIHZv
aWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwgY29uc3QKICAgICAgICAgb3V0LnByaW50
KGNvbW1hLCAiXiIsIG5vZGUtPnBoaSgpLT5pbmRleCgpKTsKICAgICBpZiAobm9kZS0+aGFzRXhl
Y3V0aW9uQ291bnRlcigpKQogICAgICAgICBvdXQucHJpbnQoY29tbWEsIFJhd1BvaW50ZXIobm9k
ZS0+ZXhlY3V0aW9uQ291bnRlcigpKSk7Ci0gICAgaWYgKG5vZGUtPmhhc1ZhcmlhYmxlV2F0Y2hw
b2ludFNldCgpKQotICAgICAgICBvdXQucHJpbnQoY29tbWEsIFJhd1BvaW50ZXIobm9kZS0+dmFy
aWFibGVXYXRjaHBvaW50U2V0KCkpKTsKKyAgICBpZiAobm9kZS0+aGFzV2F0Y2hwb2ludFNldCgp
KQorICAgICAgICBvdXQucHJpbnQoY29tbWEsIFJhd1BvaW50ZXIobm9kZS0+d2F0Y2hwb2ludFNl
dCgpKSk7CiAgICAgaWYgKG5vZGUtPmhhc1N0b3JhZ2VQb2ludGVyKCkpCiAgICAgICAgIG91dC5w
cmludChjb21tYSwgUmF3UG9pbnRlcihub2RlLT5zdG9yYWdlUG9pbnRlcigpKSk7CiAgICAgaWYg
KG5vZGUtPmhhc09iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEoKSkKQEAgLTEwMjYsNiArMTAyNiw4
IEBAIEpTVmFsdWUgR3JhcGg6OnRyeUdldENvbnN0YW50UHJvcGVydHkoY28KIAogSlNWYWx1ZSBH
cmFwaDo6dHJ5R2V0Q29uc3RhbnRDbG9zdXJlVmFyKEpTVmFsdWUgYmFzZSwgU2NvcGVPZmZzZXQg
b2Zmc2V0KQogeworICAgIC8vIFRoaXMgaGFzIGFuIGF3ZXNvbWUgY29uY3VycmVuY3kgc3Rvcnku
IFNlZSBjb21tZW50IGZvciBHZXRHbG9iYWxWYXIgaW4gQnl0ZUNvZGVQYXJzZXIuCisgICAgCiAg
ICAgaWYgKCFiYXNlKQogICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwogICAgIApAQCAtMTAzNCwy
NCArMTAzNiwyOCBAQCBKU1ZhbHVlIEdyYXBoOjp0cnlHZXRDb25zdGFudENsb3N1cmVWYXIoCiAg
ICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CiAgICAgCiAgICAgU3ltYm9sVGFibGUqIHN5bWJvbFRh
YmxlID0gYWN0aXZhdGlvbi0+c3ltYm9sVGFibGUoKTsKLSAgICBDb25jdXJyZW50SklUTG9ja2Vy
IGxvY2tlcihzeW1ib2xUYWJsZS0+bV9sb2NrKTsKLSAgICAKLSAgICBpZiAoc3ltYm9sVGFibGUt
Pm1fZnVuY3Rpb25FbnRlcmVkT25jZS5oYXNCZWVuSW52YWxpZGF0ZWQoKSkKLSAgICAgICAgcmV0
dXJuIEpTVmFsdWUoKTsKLSAgICAKLSAgICBTeW1ib2xUYWJsZUVudHJ5KiBlbnRyeSA9IHN5bWJv
bFRhYmxlLT5lbnRyeUZvcihsb2NrZXIsIG9mZnNldCk7Ci0gICAgaWYgKCFlbnRyeSkKLSAgICAg
ICAgcmV0dXJuIEpTVmFsdWUoKTsKLSAgICAKLSAgICBWYXJpYWJsZVdhdGNocG9pbnRTZXQqIHNl
dCA9IGVudHJ5LT53YXRjaHBvaW50U2V0KCk7Ci0gICAgaWYgKCFzZXQpCi0gICAgICAgIHJldHVy
biBKU1ZhbHVlKCk7Ci0gICAgCi0gICAgSlNWYWx1ZSB2YWx1ZSA9IHNldC0+aW5mZXJyZWRWYWx1
ZSgpOwotICAgIGlmICghdmFsdWUpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CisgICAgSlNW
YWx1ZSB2YWx1ZTsKKyAgICBXYXRjaHBvaW50U2V0KiBzZXQ7CisgICAgeworICAgICAgICBDb25j
dXJyZW50SklUTG9ja2VyIGxvY2tlcihzeW1ib2xUYWJsZS0+bV9sb2NrKTsKKyAgICAgICAgCisg
ICAgICAgIFN5bWJvbFRhYmxlRW50cnkqIGVudHJ5ID0gc3ltYm9sVGFibGUtPmVudHJ5Rm9yKGxv
Y2tlciwgb2Zmc2V0KTsKKyAgICAgICAgaWYgKCFlbnRyeSkKKyAgICAgICAgICAgIHJldHVybiBK
U1ZhbHVlKCk7CisgICAgICAgIAorICAgICAgICBzZXQgPSBlbnRyeS0+d2F0Y2hwb2ludFNldCgp
OworICAgICAgICBpZiAoIXNldCkKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CisgICAg
ICAgIAorICAgICAgICBpZiAoc2V0LT5zdGF0ZSgpICE9IElzV2F0Y2hlZCkKKyAgICAgICAgICAg
IHJldHVybiBKU1ZhbHVlKCk7CisgICAgICAgIAorICAgICAgICBBU1NFUlQoZW50cnktPnNjb3Bl
T2Zmc2V0KCkgPT0gb2Zmc2V0KTsKKyAgICAgICAgdmFsdWUgPSBhY3RpdmF0aW9uLT52YXJpYWJs
ZUF0KG9mZnNldCkuZ2V0KCk7CisgICAgICAgIGlmICghdmFsdWUpCisgICAgICAgICAgICByZXR1
cm4gSlNWYWx1ZSgpOworICAgIH0KICAgICAKLSAgICB3YXRjaHBvaW50cygpLmFkZExhemlseShz
eW1ib2xUYWJsZS0+bV9mdW5jdGlvbkVudGVyZWRPbmNlKTsKICAgICB3YXRjaHBvaW50cygpLmFk
ZExhemlseShzZXQpOwogICAgIAogICAgIHJldHVybiB2YWx1ZTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTm9kZS5oCShyZXZpc2lvbiAxODI0OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTIxOSwxNCArMTIxOSwxNCBA
QCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIG1fb3BJbmZvID0gYml0d2lzZV9jYXN0PHVpbnRwdHJf
dD4odmFsdWUpOwogICAgIH0KICAgICAKLSAgICBib29sIGhhc1ZhcmlhYmxlV2F0Y2hwb2ludFNl
dCgpCisgICAgYm9vbCBoYXNXYXRjaHBvaW50U2V0KCkKICAgICB7CiAgICAgICAgIHJldHVybiBv
cCgpID09IE5vdGlmeVdyaXRlOwogICAgIH0KICAgICAKLSAgICBWYXJpYWJsZVdhdGNocG9pbnRT
ZXQqIHZhcmlhYmxlV2F0Y2hwb2ludFNldCgpCisgICAgV2F0Y2hwb2ludFNldCogd2F0Y2hwb2lu
dFNldCgpCiAgICAgewotICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxWYXJpYWJsZVdh
dGNocG9pbnRTZXQqPihtX29wSW5mbyk7CisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0
PFdhdGNocG9pbnRTZXQqPihtX29wSW5mbyk7CiAgICAgfQogICAgIAogICAgIGJvb2wgaGFzU3Rv
cmFnZVBvaW50ZXIoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRp
b25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJh
dGlvbnMuY3BwCShyZXZpc2lvbiAxODI0OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDc3LDEzICsxMDc3LDEyIEBA
IGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uU3dpdGNoU3RyaW4KICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8Y2hhcio+KGV4ZWMtPmNvZGVCbG9jaygpLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUo
dGFibGVJbmRleCkuY3RpRm9yVmFsdWUoc3RyaW5nLT52YWx1ZShleGVjKS5pbXBsKCkpLmV4ZWN1
dGFibGVBZGRyZXNzKCkpOwogfQogCi12b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTm90aWZ5
V3JpdGUoRXhlY1N0YXRlKiBleGVjLCBWYXJpYWJsZVdhdGNocG9pbnRTZXQqIHNldCwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5vdGlm
eVdyaXRlKEV4ZWNTdGF0ZSogZXhlYywgV2F0Y2hwb2ludFNldCogc2V0KQogewogICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4
ZWMpOwotICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsK
IAotICAgIHNldC0+bm90aWZ5V3JpdGUodm0sIHZhbHVlLCAiRXhlY3V0ZWQgTm90aWZ5V3JpdGUi
KTsKKyAgICBzZXQtPnRvdWNoKCJFeGVjdXRlZCBOb3RpZnlXcml0ZSIpOwogfQogCiB2b2lkIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uVGhyb3dTdGFja092ZXJmbG93Rm9yVmFyYXJncyhFeGVjU3Rh
dGUqIGV4ZWMpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMu
aAkocmV2aXNpb24gMTgyNDk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVy
YXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyNyw3ICsxMjcsNyBAQCBKU0NlbGwqIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uTWFrZVJvcGUyCiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uTWFrZVJvcGUzKEV4ZWNTdGF0ZSosIEpTU3RyaW5nKiwgSlNTdHJpbmcqLCBKU1N0cmluZyop
OwogY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25GaW5kU3dpdGNoSW1tVGFyZ2V0Rm9yRG91
YmxlKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBzaXplX3QgdGFibGVJbmRleCk7CiBjaGFy
KiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblN3aXRjaFN0cmluZyhFeGVjU3RhdGUqLCBzaXplX3Qg
dGFibGVJbmRleCwgSlNTdHJpbmcqKTsKLXZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25Ob3Rp
ZnlXcml0ZShFeGVjU3RhdGUqLCBWYXJpYWJsZVdhdGNocG9pbnRTZXQqLCBFbmNvZGVkSlNWYWx1
ZSk7Cit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTm90aWZ5V3JpdGUoRXhlY1N0YXRlKiwg
V2F0Y2hwb2ludFNldCopOwogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRocm93U3RhY2tP
dmVyZmxvd0ZvclZhcmFyZ3MoRXhlY1N0YXRlKikgV1RGX0lOVEVSTkFMOwogaW50MzJfdCBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvblNpemVPZlZhcmFyZ3MoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFs
dWUgYXJndW1lbnRzLCBpbnQzMl90IGZpcnN0VmFyQXJnT2Zmc2V0KTsKIHZvaWQgSklUX09QRVJB
VElPTiBvcGVyYXRpb25Mb2FkVmFyYXJncyhFeGVjU3RhdGUqLCBpbnQzMl90IGZpcnN0RWxlbWVu
dERlc3QsIEVuY29kZWRKU1ZhbHVlIGFyZ3VtZW50cywgaW50MzJfdCBvZmZzZXQsIGludDMyX3Qg
bGVuZ3RoLCBpbnQzMl90IG1hbmRhdG9yeU1pbmltdW0pOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCShyZXZpc2lv
biAxODI0OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
MzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTg3LDMyICszOTg3LDcgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgIH0KIAogICAgIGNhc2UgTm90aWZ5
V3JpdGU6IHsKLSAgICAgICAgVmFyaWFibGVXYXRjaHBvaW50U2V0KiBzZXQgPSBub2RlLT52YXJp
YWJsZVdhdGNocG9pbnRTZXQoKTsKLSAgICAKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUo
dGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBHUFJSZWcgdmFsdWVUYWdHUFIgPSB2YWx1
ZS50YWdHUFIoKTsKLSAgICAgICAgR1BSUmVnIHZhbHVlUGF5bG9hZEdQUiA9IHZhbHVlLnBheWxv
YWRHUFIoKTsKLSAgICAKLSAgICAgICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7Ci0gICAgICAg
IEdQUlJlZyB0ZW1wR1BSID0gdGVtcC5ncHIoKTsKLSAgICAKLSAgICAgICAgbV9qaXQubG9hZDgo
c2V0LT5hZGRyZXNzT2ZTdGF0ZSgpLCB0ZW1wR1BSKTsKLSAgICAKLSAgICAgICAgSklUQ29tcGls
ZXI6Okp1bXAgaXNEb25lID0gbV9qaXQuYnJhbmNoMzIoSklUQ29tcGlsZXI6OkVxdWFsLCB0ZW1w
R1BSLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpOwotICAgICAgICBKSVRDb21waWxlcjo6
SnVtcExpc3Qgbm90aWZ5U2xvdzsKLSAgICAgICAgbm90aWZ5U2xvdy5hcHBlbmQobV9qaXQuYnJh
bmNoMzIoCi0gICAgICAgICAgICBKSVRDb21waWxlcjo6Tm90RXF1YWwsCi0gICAgICAgICAgICBK
SVRDb21waWxlcjo6QWJzb2x1dGVBZGRyZXNzKHNldC0+YWRkcmVzc09mSW5mZXJyZWRWYWx1ZSgp
LT5wYXlsb2FkUG9pbnRlcigpKSwKLSAgICAgICAgICAgIHZhbHVlUGF5bG9hZEdQUikpOwotICAg
ICAgICBub3RpZnlTbG93LmFwcGVuZChtX2ppdC5icmFuY2gzMigKLSAgICAgICAgICAgIEpJVENv
bXBpbGVyOjpOb3RFcXVhbCwgCi0gICAgICAgICAgICBKSVRDb21waWxlcjo6QWJzb2x1dGVBZGRy
ZXNzKHNldC0+YWRkcmVzc09mSW5mZXJyZWRWYWx1ZSgpLT50YWdQb2ludGVyKCkpLAotICAgICAg
ICAgICAgdmFsdWVUYWdHUFIpKTsKLSAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCi0gICAg
ICAgICAgICBzbG93UGF0aENhbGwobm90aWZ5U2xvdywgdGhpcywgb3BlcmF0aW9uTm90aWZ5V3Jp
dGUsIE5vUmVzdWx0LCBzZXQsIHZhbHVlVGFnR1BSLCB2YWx1ZVBheWxvYWRHUFIpKTsKLSAgICAg
ICAgaXNEb25lLmxpbmsoJm1faml0KTsKLSAgICAKLSAgICAgICAgbm9SZXN1bHQobm9kZSk7Cisg
ICAgICAgIGNvbXBpbGVOb3RpZnlXcml0ZShub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQ2NC5jcHAJKHJldmlzaW9uIDE4MjQ5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwMTksMjYgKzQwMTks
NyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgfQogCiAg
ICAgY2FzZSBOb3RpZnlXcml0ZTogewotICAgICAgICBWYXJpYWJsZVdhdGNocG9pbnRTZXQqIHNl
dCA9IG5vZGUtPnZhcmlhYmxlV2F0Y2hwb2ludFNldCgpOwotICAgIAotICAgICAgICBKU1ZhbHVl
T3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIEdQUlJlZyB2YWx1
ZUdQUiA9IHZhbHVlLmdwcigpOwotICAgIAotICAgICAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlz
KTsKLSAgICAgICAgR1BSUmVnIHRlbXBHUFIgPSB0ZW1wLmdwcigpOwotICAgIAotICAgICAgICBt
X2ppdC5sb2FkOChzZXQtPmFkZHJlc3NPZlN0YXRlKCksIHRlbXBHUFIpOwotICAgIAotICAgICAg
ICBKSVRDb21waWxlcjo6SnVtcCBpc0RvbmUgPQotICAgICAgICAgICAgbV9qaXQuYnJhbmNoMzIo
SklUQ29tcGlsZXI6OkVxdWFsLCB0ZW1wR1BSLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkp
OwotICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBzbG93Q2FzZSA9IG1faml0LmJyYW5jaDY0KEpJ
VENvbXBpbGVyOjpOb3RFcXVhbCwKLSAgICAgICAgICAgIEpJVENvbXBpbGVyOjpBYnNvbHV0ZUFk
ZHJlc3Moc2V0LT5hZGRyZXNzT2ZJbmZlcnJlZFZhbHVlKCkpLCB2YWx1ZUdQUik7Ci0gICAgICAg
IGlzRG9uZS5saW5rKCZtX2ppdCk7Ci0gICAgCi0gICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9y
KAotICAgICAgICAgICAgc2xvd1BhdGhDYWxsKHNsb3dDYXNlLCB0aGlzLCBvcGVyYXRpb25Ob3Rp
ZnlXcml0ZSwgTm9SZXN1bHQsIHNldCwgdmFsdWVHUFIpKTsKLQotICAgICAgICBub1Jlc3VsdChu
b2RlKTsKKyAgICAgICAgY29tcGlsZU5vdGlmeVdyaXRlKG5vZGUpOwogICAgICAgICBicmVhazsK
ICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQuY3BwCShyZXZpc2lvbiAxODI0OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDM2Nyw4ICs0MzY3
LDEzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVOZXdGdW5jdGlvbigKICAgICBTcGVj
dWxhdGVDZWxsT3BlcmFuZCBzY29wZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgR1BSUmVn
IHNjb3BlR1BSID0gc2NvcGUuZ3ByKCk7CiAgICAgZmx1c2hSZWdpc3RlcnMoKTsKLSAgICBjYWxs
T3BlcmF0aW9uKAotICAgICAgICBvcGVyYXRpb25OZXdGdW5jdGlvbiwgcmVzdWx0R1BSLCBzY29w
ZUdQUiwgbm9kZS0+Y2FzdE9wZXJhbmQ8RnVuY3Rpb25FeGVjdXRhYmxlKj4oKSk7CisgICAgRnVu
Y3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gbm9kZS0+Y2FzdE9wZXJhbmQ8RnVuY3Rpb25F
eGVjdXRhYmxlKj4oKTsKKyAgICBKX0pJVE9wZXJhdGlvbl9FSnNjQyBmdW5jdGlvbjsKKyAgICBp
ZiAoZXhlY3V0YWJsZS0+c2luZ2xldG9uRnVuY3Rpb24oKS0+aXNTdGlsbFZhbGlkKCkpCisgICAg
ICAgIGZ1bmN0aW9uID0gb3BlcmF0aW9uTmV3RnVuY3Rpb247CisgICAgZWxzZQorICAgICAgICBm
dW5jdGlvbiA9IG9wZXJhdGlvbk5ld0Z1bmN0aW9uV2l0aEludmFsaWRhdGVkUmVhbGxvY2F0aW9u
V2F0Y2hwb2ludDsKKyAgICBjYWxsT3BlcmF0aW9uKGZ1bmN0aW9uLCByZXN1bHRHUFIsIHNjb3Bl
R1BSLCBleGVjdXRhYmxlKTsKICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CiB9CiAK
QEAgLTQ0MzYsMTkgKzQ0NDEsMzEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUZvcndh
cmRWYXJhcgogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ3JlYXRlQWN0aXZhdGlvbihO
b2RlKiBub2RlKQogeworICAgIFN5bWJvbFRhYmxlKiB0YWJsZSA9IG1faml0LmdyYXBoKCkuc3lt
Ym9sVGFibGVGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsKKyAgICBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSA9IG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKAorICAgICAgICBub2RlLT5vcmln
aW4uc2VtYW50aWMpLT5hY3RpdmF0aW9uU3RydWN0dXJlKCk7CisgICAgICAgIAogICAgIFNwZWN1
bGF0ZUNlbGxPcGVyYW5kIHNjb3BlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICBHUFJSZWcg
c2NvcGVHUFIgPSBzY29wZS5ncHIoKTsKKyAgICAKKyAgICBpZiAodGFibGUtPnNpbmdsZXRvblNj
b3BlKCktPmlzU3RpbGxWYWxpZCgpKSB7CisgICAgICAgIEdQUkZsdXNoZWRDYWxsUmVzdWx0IHJl
c3VsdCh0aGlzKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAg
ICAgICAgCisgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CisgICAgICAgIAorICAgICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbkNyZWF0ZUFjdGl2YXRpb25EaXJlY3QsIHJlc3VsdEdQUiwgc3Ry
dWN0dXJlLCBzY29wZUdQUiwgdGFibGUpOworICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwg
bm9kZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCiAgICAgR1BSVGVtcG9yYXJ5IHJl
c3VsdCh0aGlzKTsKICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaDEodGhpcyk7CiAgICAgR1BSVGVt
cG9yYXJ5IHNjcmF0Y2gyKHRoaXMpOwotICAgIEdQUlJlZyBzY29wZUdQUiA9IHNjb3BlLmdwcigp
OwogICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CiAgICAgR1BSUmVnIHNjcmF0
Y2gxR1BSID0gc2NyYXRjaDEuZ3ByKCk7CiAgICAgR1BSUmVnIHNjcmF0Y2gyR1BSID0gc2NyYXRj
aDIuZ3ByKCk7CiAgICAgICAgIAotICAgIFN5bWJvbFRhYmxlKiB0YWJsZSA9IG1faml0LmdyYXBo
KCkuc3ltYm9sVGFibGVGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsKLSAgICBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSA9IG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKAotICAgICAgICBub2Rl
LT5vcmlnaW4uc2VtYW50aWMpLT5hY3RpdmF0aW9uU3RydWN0dXJlKCk7Ci0gICAgICAgIAogICAg
IEpJVENvbXBpbGVyOjpKdW1wTGlzdCBzbG93UGF0aDsKICAgICBlbWl0QWxsb2NhdGVKU09iamVj
dFdpdGhLbm93blNpemU8SlNMZXhpY2FsRW52aXJvbm1lbnQ+KAogICAgICAgICByZXN1bHRHUFIs
IFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgVHJ1c3RlZEltbVB0cigwKSwgc2NyYXRjaDFHUFIs
IHNjcmF0Y2gyR1BSLApAQCAtNDcxNCw2ICs0NzMxLDIxIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVDcmVhdGVDbG9uZWQKICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CiB9
CiAKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVOb3RpZnlXcml0ZShOb2RlKiBub2RlKQor
eworICAgIFdhdGNocG9pbnRTZXQqIHNldCA9IG5vZGUtPndhdGNocG9pbnRTZXQoKTsKKyAgICAK
KyAgICBKSVRDb21waWxlcjo6SnVtcCBzbG93Q2FzZSA9IG1faml0LmJyYW5jaDgoCisgICAgICAg
IEpJVENvbXBpbGVyOjpOb3RFcXVhbCwKKyAgICAgICAgSklUQ29tcGlsZXI6OkFic29sdXRlQWRk
cmVzcyhzZXQtPmFkZHJlc3NPZlN0YXRlKCkpLAorICAgICAgICBUcnVzdGVkSW1tMzIoSXNJbnZh
bGlkYXRlZCkpOworICAgIAorICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAorICAgICAgICBzbG93
UGF0aENhbGwoc2xvd0Nhc2UsIHRoaXMsIG9wZXJhdGlvbk5vdGlmeVdyaXRlLCBOb1Jlc3VsdCwg
c2V0KSk7CisgICAgCisgICAgbm9SZXN1bHQobm9kZSk7Cit9CisKIGJvb2wgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVSZWdFeHBFeGVjKE5vZGUqIG5vZGUpCiB7CiAgICAgdW5zaWduZWQgYnJhbmNo
SW5kZXhJbkJsb2NrID0gZGV0ZWN0UGVlcEhvbGVCcmFuY2goKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHJldmlzaW9uIDE4MjQ5OCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTQ2MCw5ICsxNDYwLDkgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYXBw
ZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb24pOwogICAgIH0KIAotICAgIEpJVENv
bXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9KSVRPcGVyYXRpb25fRVZ3c0ogb3BlcmF0aW9u
LCBWYXJpYWJsZVdhdGNocG9pbnRTZXQqIHdhdGNocG9pbnRTZXQsIEdQUlJlZyBhcmcpCisgICAg
SklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0pJVE9wZXJhdGlvbl9FV3Mgb3BlcmF0
aW9uLCBXYXRjaHBvaW50U2V0KiB3YXRjaHBvaW50U2V0KQogICAgIHsKLSAgICAgICAgbV9qaXQu
c2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW1QdHIod2F0Y2hwb2ludFNldCks
IGFyZyk7CisgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVk
SW1tUHRyKHdhdGNocG9pbnRTZXQpKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGwob3BlcmF0
aW9uKTsKICAgICB9CiAKQEAgLTE3NzYsMTIgKzE3NzYsNiBAQCBwdWJsaWM6CiAgICAgICAgIHJl
dHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7CiAgICAgfQogCi0g
ICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0pJVE9wZXJhdGlvbl9FVndzSiBv
cGVyYXRpb24sIFZhcmlhYmxlV2F0Y2hwb2ludFNldCogd2F0Y2hwb2ludFNldCwgR1BSUmVnIGFy
Z1RhZywgR1BSUmVnIGFyZ1BheWxvYWQpCi0gICAgewotICAgICAgICBtX2ppdC5zZXR1cEFyZ3Vt
ZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbVB0cih3YXRjaHBvaW50U2V0KSwgYXJnUGF5bG9h
ZCwgYXJnVGFnKTsKLSAgICAgICAgcmV0dXJuIGFwcGVuZENhbGwob3BlcmF0aW9uKTsKLSAgICB9
Ci0KICAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKERfSklUT3BlcmF0aW9uX0VK
IG9wZXJhdGlvbiwgRlBSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzFUYWcsIEdQUlJlZyBhcmcxUGF5
bG9hZCkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShF
QUJJXzMyQklUX0RVTU1ZX0FSRyBhcmcxUGF5bG9hZCwgYXJnMVRhZyk7CkBAIC0yMjEzLDYgKzIy
MDcsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBjb21waWxlUHV0VG9Bcmd1bWVudHMoTm9kZSopOwog
ICAgIHZvaWQgY29tcGlsZUNyZWF0ZVNjb3BlZEFyZ3VtZW50cyhOb2RlKik7CiAgICAgdm9pZCBj
b21waWxlQ3JlYXRlQ2xvbmVkQXJndW1lbnRzKE5vZGUqKTsKKyAgICB2b2lkIGNvbXBpbGVOb3Rp
ZnlXcml0ZShOb2RlKik7CiAgICAgYm9vbCBjb21waWxlUmVnRXhwRXhlYyhOb2RlKik7CiAgICAg
CiAgICAgSklUQ29tcGlsZXI6Okp1bXAgYnJhbmNoSXNDZWxsKEpTVmFsdWVSZWdzKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJhcmdzRm9yd2Fy
ZGluZ1BoYXNlLmNwcAkocmV2aXNpb24gMTgyNDk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIs
NiArMzIsNyBAQAogI2luY2x1ZGUgIkRGR0Nsb2JiZXJpemUuaCIKICNpbmNsdWRlICJERkdHcmFw
aC5oIgogI2luY2x1ZGUgIkRGR1BoYXNlLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogCiBu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMSW50cmluc2ljUmVwb3NpdG9yeS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMSW50cmluc2ljUmVwb3NpdG9yeS5oCShyZXZpc2lvbiAxODI0
OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEludHJpbnNpY1JlcG9zaXRvcnku
aAkod29ya2luZyBjb3B5KQpAQCAtMTA1LDcgKzEwNSw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgRlRMIHsKICAgICBtYWNybyhWX0pJVE9wZXJhdGlvbl9FT1pKLCBmdW5jdGlvblR5cGUo
dm9pZFR5cGUsIGludFB0ciwgaW50UHRyLCBpbnQzMiwgaW50NjQpKSBcCiAgICAgbWFjcm8oVl9K
SVRPcGVyYXRpb25fRUMsIGZ1bmN0aW9uVHlwZSh2b2lkVHlwZSwgaW50UHRyLCBpbnRQdHIpKSBc
CiAgICAgbWFjcm8oVl9KSVRPcGVyYXRpb25fRUNiLCBmdW5jdGlvblR5cGUodm9pZFR5cGUsIGlu
dFB0ciwgaW50UHRyKSkgXAotICAgIG1hY3JvKFZfSklUT3BlcmF0aW9uX0VWd3NKLCBmdW5jdGlv
blR5cGUodm9pZFR5cGUsIGludFB0ciwgaW50UHRyLCBpbnQ2NCkpIFwKKyAgICBtYWNybyhWX0pJ
VE9wZXJhdGlvbl9FV3MsIGZ1bmN0aW9uVHlwZSh2b2lkVHlwZSwgaW50UHRyLCBpbnRQdHIpKSBc
CiAgICAgbWFjcm8oVl9KSVRPcGVyYXRpb25fRVpKWlpaLCBmdW5jdGlvblR5cGUodm9pZFR5cGUs
IGludFB0ciwgaW50MzIsIGludDY0LCBpbnQzMiwgaW50MzIsIGludDMyKSkgXAogICAgIG1hY3Jv
KFZfSklUT3BlcmF0aW9uX0osIGZ1bmN0aW9uVHlwZSh2b2lkVHlwZSwgaW50NjQpKSBcCiAgICAg
bWFjcm8oVl9KSVRPcGVyYXRpb25fWiwgZnVuY3Rpb25UeXBlKHZvaWRUeXBlLCBpbnQzMikpIFwK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0u
Y3BwCShyZXZpc2lvbiAxODI0OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExv
d2VyREZHVG9MTFZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjg3Nyw2ICsyODc3LDE0IEBAIHBy
aXZhdGU6CiAgICAgICAgIFN5bWJvbFRhYmxlKiB0YWJsZSA9IG1fZ3JhcGguc3ltYm9sVGFibGVG
b3IobV9ub2RlLT5vcmlnaW4uc2VtYW50aWMpOwogICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSA9IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1fbm9kZS0+b3JpZ2luLnNlbWFudGljKS0+YWN0
aXZhdGlvblN0cnVjdHVyZSgpOwogICAgICAgICAKKyAgICAgICAgaWYgKHRhYmxlLT5zaW5nbGV0
b25TY29wZSgpLT5pc1N0aWxsVmFsaWQoKSkgeworICAgICAgICAgICAgTFZhbHVlIGNhbGxSZXN1
bHQgPSB2bUNhbGwoCisgICAgICAgICAgICAgICAgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbkNy
ZWF0ZUFjdGl2YXRpb25EaXJlY3QpLCBtX2NhbGxGcmFtZSwgd2Vha1BvaW50ZXIoc3RydWN0dXJl
KSwKKyAgICAgICAgICAgICAgICBzY29wZSwgd2Vha1BvaW50ZXIodGFibGUpKTsKKyAgICAgICAg
ICAgIHNldEpTVmFsdWUoY2FsbFJlc3VsdCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKyAgICAgICAgCiAgICAgICAgIExCYXNpY0Jsb2NrIHNsb3dQYXRoID0gRlRMX05FV19CTE9D
SyhtX291dCwgKCJDcmVhdGVBY3RpdmF0aW9uIHNsb3cgcGF0aCIpKTsKICAgICAgICAgTEJhc2lj
QmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJDcmVhdGVBY3RpdmF0
aW9uIGNvbnRpbnVhdGlvbiIpKTsKICAgICAgICAgCkBAIC0yOTEyLDkgKzI5MjAsMTYgQEAgcHJp
dmF0ZToKICAgICAKICAgICB2b2lkIGNvbXBpbGVOZXdGdW5jdGlvbigpCiAgICAgeworICAgICAg
ICBGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBtX25vZGUtPmNhc3RPcGVyYW5kPEZ1
bmN0aW9uRXhlY3V0YWJsZSo+KCk7CisgICAgICAgIEpfSklUT3BlcmF0aW9uX0VKc2NDIGZ1bmN0
aW9uOworICAgICAgICBpZiAoZXhlY3V0YWJsZS0+c2luZ2xldG9uRnVuY3Rpb24oKS0+aXNTdGls
bFZhbGlkKCkpCisgICAgICAgICAgICBmdW5jdGlvbiA9IG9wZXJhdGlvbk5ld0Z1bmN0aW9uOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBmdW5jdGlvbiA9IG9wZXJhdGlvbk5ld0Z1bmN0aW9u
V2l0aEludmFsaWRhdGVkUmVhbGxvY2F0aW9uV2F0Y2hwb2ludDsKKyAgICAgICAgCiAgICAgICAg
IExWYWx1ZSByZXN1bHQgPSB2bUNhbGwoCi0gICAgICAgICAgICBtX291dC5vcGVyYXRpb24ob3Bl
cmF0aW9uTmV3RnVuY3Rpb24pLCBtX2NhbGxGcmFtZSwKLSAgICAgICAgICAgIGxvd0NlbGwobV9u
b2RlLT5jaGlsZDEoKSksIHdlYWtQb2ludGVyKG1fbm9kZS0+Y2FzdE9wZXJhbmQ8RnVuY3Rpb25F
eGVjdXRhYmxlKj4oKSkpOworICAgICAgICAgICAgbV9vdXQub3BlcmF0aW9uKGZ1bmN0aW9uKSwg
bV9jYWxsRnJhbWUsIGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSksCisgICAgICAgICAgICB3ZWFr
UG9pbnRlcihleGVjdXRhYmxlKSk7CiAgICAgICAgIHNldEpTVmFsdWUocmVzdWx0KTsKICAgICB9
CiAgICAgCkBAIC0zNzgzLDI5ICszNzk4LDE5IEBAIHByaXZhdGU6CiAgICAgCiAgICAgdm9pZCBj
b21waWxlTm90aWZ5V3JpdGUoKQogICAgIHsKLSAgICAgICAgVmFyaWFibGVXYXRjaHBvaW50U2V0
KiBzZXQgPSBtX25vZGUtPnZhcmlhYmxlV2F0Y2hwb2ludFNldCgpOwotICAgICAgICAKLSAgICAg
ICAgTFZhbHVlIHZhbHVlID0gbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAg
V2F0Y2hwb2ludFNldCogc2V0ID0gbV9ub2RlLT53YXRjaHBvaW50U2V0KCk7CiAgICAgICAgIAog
ICAgICAgICBMQmFzaWNCbG9jayBpc05vdEludmFsaWRhdGVkID0gRlRMX05FV19CTE9DSyhtX291
dCwgKCJOb3RpZnlXcml0ZSBub3QgaW52YWxpZGF0ZWQgY2FzZSIpKTsKLSAgICAgICAgTEJhc2lj
QmxvY2sgbm90aWZ5U2xvdyA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiTm90aWZ5V3JpdGUgbm90
aWZ5IHNsb3cgY2FzZSIpKTsKICAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRM
X05FV19CTE9DSyhtX291dCwgKCJOb3RpZnlXcml0ZSBjb250aW51YXRpb24iKSk7CiAgICAgICAg
IAogICAgICAgICBMVmFsdWUgc3RhdGUgPSBtX291dC5sb2FkOChtX291dC5hYnNvbHV0ZShzZXQt
PmFkZHJlc3NPZlN0YXRlKCkpKTsKLSAgICAgICAgCiAgICAgICAgIG1fb3V0LmJyYW5jaCgKICAg
ICAgICAgICAgIG1fb3V0LmVxdWFsKHN0YXRlLCBtX291dC5jb25zdEludDgoSXNJbnZhbGlkYXRl
ZCkpLAogICAgICAgICAgICAgdXN1YWxseShjb250aW51YXRpb24pLCByYXJlbHkoaXNOb3RJbnZh
bGlkYXRlZCkpOwogICAgICAgICAKLSAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291
dC5hcHBlbmRUbyhpc05vdEludmFsaWRhdGVkLCBub3RpZnlTbG93KTsKLQotICAgICAgICBtX291
dC5icmFuY2goCi0gICAgICAgICAgICBtX291dC5lcXVhbCh2YWx1ZSwgbV9vdXQubG9hZDY0KG1f
b3V0LmFic29sdXRlKHNldC0+YWRkcmVzc09mSW5mZXJyZWRWYWx1ZSgpKSkpLAotICAgICAgICAg
ICAgdW5zdXJlKGNvbnRpbnVhdGlvbiksIHVuc3VyZShub3RpZnlTbG93KSk7Ci0KLSAgICAgICAg
bV9vdXQuYXBwZW5kVG8obm90aWZ5U2xvdywgY29udGludWF0aW9uKTsKKyAgICAgICAgTEJhc2lj
QmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhpc05vdEludmFsaWRhdGVkLCBjb250aW51
YXRpb24pOwogCi0gICAgICAgIHZtQ2FsbChtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uTm90aWZ5
V3JpdGUpLCBtX2NhbGxGcmFtZSwgbV9vdXQuY29uc3RJbnRQdHIoc2V0KSwgdmFsdWUpOworICAg
ICAgICB2bUNhbGwobV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbk5vdGlmeVdyaXRlKSwgbV9jYWxs
RnJhbWUsIG1fb3V0LmNvbnN0SW50UHRyKHNldCkpOwogICAgICAgICBtX291dC5qdW1wKGNvbnRp
bnVhdGlvbik7CiAgICAgICAgIAogICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24s
IGxhc3ROZXh0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRl
cnByZXRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJl
dGVyL0ludGVycHJldGVyLmNwcAkocmV2aXNpb24gMTgyNDk4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODks
NiArODksNDcgQEAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAogbmFtZXNwYWNlIEpTQyB7CiAKK1N0
cmluZyBTdGFja0ZyYW1lOjpmcmllbmRseVNvdXJjZVVSTCgpIGNvbnN0Cit7CisgICAgU3RyaW5n
IHRyYWNlTGluZTsKKyAgICAKKyAgICBzd2l0Y2ggKGNvZGVUeXBlKSB7CisgICAgY2FzZSBTdGFj
a0ZyYW1lRXZhbENvZGU6CisgICAgY2FzZSBTdGFja0ZyYW1lRnVuY3Rpb25Db2RlOgorICAgIGNh
c2UgU3RhY2tGcmFtZUdsb2JhbENvZGU6CisgICAgICAgIGlmICghc291cmNlVVJMLmlzRW1wdHko
KSkKKyAgICAgICAgICAgIHRyYWNlTGluZSA9IHNvdXJjZVVSTC5pbXBsKCk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgU3RhY2tGcmFtZU5hdGl2ZUNvZGU6CisgICAgICAgIHRyYWNlTGluZSA9
ICJbbmF0aXZlIGNvZGVdIjsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIHJldHVybiB0cmFj
ZUxpbmUuaXNOdWxsKCkgPyBlbXB0eVN0cmluZygpIDogdHJhY2VMaW5lOworfQorCitTdHJpbmcg
U3RhY2tGcmFtZTo6ZnJpZW5kbHlGdW5jdGlvbk5hbWUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpIGNv
bnN0Cit7CisgICAgU3RyaW5nIHRyYWNlTGluZTsKKyAgICBKU09iamVjdCogc3RhY2tGcmFtZUNh
bGxlZSA9IGNhbGxlZS5nZXQoKTsKKworICAgIHN3aXRjaCAoY29kZVR5cGUpIHsKKyAgICBjYXNl
IFN0YWNrRnJhbWVFdmFsQ29kZToKKyAgICAgICAgdHJhY2VMaW5lID0gImV2YWwgY29kZSI7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgU3RhY2tGcmFtZU5hdGl2ZUNvZGU6CisgICAgICAgIGlm
IChjYWxsZWUpCisgICAgICAgICAgICB0cmFjZUxpbmUgPSBnZXRDYWxjdWxhdGVkRGlzcGxheU5h
bWUoY2FsbEZyYW1lLCBzdGFja0ZyYW1lQ2FsbGVlKS5pbXBsKCk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgU3RhY2tGcmFtZUZ1bmN0aW9uQ29kZToKKyAgICAgICAgdHJhY2VMaW5lID0gZ2V0
Q2FsY3VsYXRlZERpc3BsYXlOYW1lKGNhbGxGcmFtZSwgc3RhY2tGcmFtZUNhbGxlZSkuaW1wbCgp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFN0YWNrRnJhbWVHbG9iYWxDb2RlOgorICAgICAg
ICB0cmFjZUxpbmUgPSAiZ2xvYmFsIGNvZGUiOworICAgICAgICBicmVhazsKKyAgICB9CisgICAg
cmV0dXJuIHRyYWNlTGluZS5pc051bGwoKSA/IGVtcHR5U3RyaW5nKCkgOiB0cmFjZUxpbmU7Cit9
CisKIEpTVmFsdWUgZXZhbChDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKICAgICBpZiAoIWNhbGxG
cmFtZS0+YXJndW1lbnRDb3VudCgpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVy
cHJldGVyL0ludGVycHJldGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ludGVycHJldGVyL0ludGVycHJldGVyLmgJKHJldmlzaW9uIDE4MjQ5OCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5oCSh3b3JraW5nIGNvcHkpCkBA
IC05MCw0NSArOTAsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdW5zaWduZWQgYnl0ZWNv
ZGVPZmZzZXQ7CiAgICAgICAgIFN0cmluZyBzb3VyY2VVUkw7CiAgICAgICAgIEpTX0VYUE9SVF9Q
UklWQVRFIFN0cmluZyB0b1N0cmluZyhDYWxsRnJhbWUqKTsKLSAgICAgICAgU3RyaW5nIGZyaWVu
ZGx5U291cmNlVVJMKCkgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgU3RyaW5nIHRyYWNl
TGluZTsKLQotICAgICAgICAgICAgc3dpdGNoIChjb2RlVHlwZSkgewotICAgICAgICAgICAgY2Fz
ZSBTdGFja0ZyYW1lRXZhbENvZGU6Ci0gICAgICAgICAgICBjYXNlIFN0YWNrRnJhbWVGdW5jdGlv
bkNvZGU6Ci0gICAgICAgICAgICBjYXNlIFN0YWNrRnJhbWVHbG9iYWxDb2RlOgotICAgICAgICAg
ICAgICAgIGlmICghc291cmNlVVJMLmlzRW1wdHkoKSkKLSAgICAgICAgICAgICAgICAgICAgdHJh
Y2VMaW5lID0gc291cmNlVVJMLmltcGwoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIGNhc2UgU3RhY2tGcmFtZU5hdGl2ZUNvZGU6Ci0gICAgICAgICAgICAgICAgdHJhY2VM
aW5lID0gIltuYXRpdmUgY29kZV0iOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgcmV0dXJuIHRyYWNlTGluZS5pc051bGwoKSA/IGVtcHR5U3RyaW5n
KCkgOiB0cmFjZUxpbmU7Ci0gICAgICAgIH0KLSAgICAgICAgU3RyaW5nIGZyaWVuZGx5RnVuY3Rp
b25OYW1lKENhbGxGcmFtZSogY2FsbEZyYW1lKSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAg
ICBTdHJpbmcgdHJhY2VMaW5lOwotICAgICAgICAgICAgSlNPYmplY3QqIHN0YWNrRnJhbWVDYWxs
ZWUgPSBjYWxsZWUuZ2V0KCk7Ci0KLSAgICAgICAgICAgIHN3aXRjaCAoY29kZVR5cGUpIHsKLSAg
ICAgICAgICAgIGNhc2UgU3RhY2tGcmFtZUV2YWxDb2RlOgotICAgICAgICAgICAgICAgIHRyYWNl
TGluZSA9ICJldmFsIGNvZGUiOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
Y2FzZSBTdGFja0ZyYW1lTmF0aXZlQ29kZToKLSAgICAgICAgICAgICAgICBpZiAoY2FsbGVlKQot
ICAgICAgICAgICAgICAgICAgICB0cmFjZUxpbmUgPSBnZXRDYWxjdWxhdGVkRGlzcGxheU5hbWUo
Y2FsbEZyYW1lLCBzdGFja0ZyYW1lQ2FsbGVlKS5pbXBsKCk7Ci0gICAgICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgICAgICBjYXNlIFN0YWNrRnJhbWVGdW5jdGlvbkNvZGU6Ci0gICAgICAgICAg
ICAgICAgdHJhY2VMaW5lID0gZ2V0Q2FsY3VsYXRlZERpc3BsYXlOYW1lKGNhbGxGcmFtZSwgc3Rh
Y2tGcmFtZUNhbGxlZSkuaW1wbCgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAg
ICAgY2FzZSBTdGFja0ZyYW1lR2xvYmFsQ29kZToKLSAgICAgICAgICAgICAgICB0cmFjZUxpbmUg
PSAiZ2xvYmFsIGNvZGUiOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQot
ICAgICAgICAgICAgcmV0dXJuIHRyYWNlTGluZS5pc051bGwoKSA/IGVtcHR5U3RyaW5nKCkgOiB0
cmFjZUxpbmU7Ci0gICAgICAgIH0KKyAgICAgICAgU3RyaW5nIGZyaWVuZGx5U291cmNlVVJMKCkg
Y29uc3Q7CisgICAgICAgIFN0cmluZyBmcmllbmRseUZ1bmN0aW9uTmFtZShDYWxsRnJhbWUqKSBj
b25zdDsKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBjb21wdXRlTGluZUFuZENvbHVt
bih1bnNpZ25lZCYgbGluZSwgdW5zaWduZWQmIGNvbHVtbik7CiAKICAgICBwcml2YXRlOgpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkocmV2aXNpb24gMTgyNDk4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDUsNiArMTA1
LDE0IEBAIHZvaWQgSklUOjplbWl0RW50ZXJPcHRpbWl6YXRpb25DaGVjaygpCiB9CiAjZW5kaWYK
IAordm9pZCBKSVQ6OmVtaXROb3RpZnlXcml0ZShXYXRjaHBvaW50U2V0KiBzZXQpCit7CisgICAg
aWYgKCFzZXQgfHwgc2V0LT5zdGF0ZSgpID09IElzSW52YWxpZGF0ZWQpCisgICAgICAgIHJldHVy
bjsKKyAgICAKKyAgICBhZGRTbG93Q2FzZShicmFuY2g4KE5vdEVxdWFsLCBBYnNvbHV0ZUFkZHJl
c3Moc2V0LT5hZGRyZXNzT2ZTdGF0ZSgpKSwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKSk7
Cit9CisKIHZvaWQgSklUOjphc3NlcnRTdGFja1BvaW50ZXJPZmZzZXQoKQogewogICAgIGlmIChB
U1NFUlRfRElTQUJMRUQpCkBAIC0xODksNyArMTk3LDYgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21w
aWxlTWFpblBhc3MoKQogICAgICAgICBERUZJTkVfU0xPV19PUChpc19vYmplY3Rfb3JfbnVsbCkK
ICAgICAgICAgREVGSU5FX1NMT1dfT1AodHlwZW9mKQogCi0gICAgICAgIERFRklORV9PUChvcF90
b3VjaF9lbnRyeSkKICAgICAgICAgREVGSU5FX09QKG9wX2FkZCkKICAgICAgICAgREVGSU5FX09Q
KG9wX2JpdGFuZCkKICAgICAgICAgREVGSU5FX09QKG9wX2JpdG9yKQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVC5oCShyZXZpc2lvbiAxODI0OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVC5oCSh3b3JraW5nIGNvcHkpCkBAIC00NTcsNyArNDU3LDYgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIAogICAgICAgICB2b2lkIGFzc2VydFN0YWNrUG9pbnRlck9mZnNldCgpOwog
Ci0gICAgICAgIHZvaWQgZW1pdF9vcF90b3VjaF9lbnRyeShJbnN0cnVjdGlvbiopOwogICAgICAg
ICB2b2lkIGVtaXRfb3BfYWRkKEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9i
aXRhbmQoSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2JpdG9yKEluc3RydWN0
aW9uKik7CkBAIC02NDAsMTMgKzYzOSw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lk
IGVtaXRHZXRHbG9iYWxWYXIodWludHB0cl90IG9wZXJhbmQpOwogICAgICAgICB2b2lkIGVtaXRH
ZXRDbG9zdXJlVmFyKGludCBzY29wZSwgdWludHB0cl90IG9wZXJhbmQpOwogICAgICAgICB2b2lk
IGVtaXRQdXRHbG9iYWxQcm9wZXJ0eSh1aW50cHRyX3QqIG9wZXJhbmRTbG90LCBpbnQgdmFsdWUp
OwotI2lmIFVTRShKU1ZBTFVFNjQpCi0gICAgICAgIHZvaWQgZW1pdE5vdGlmeVdyaXRlKFJlZ2lz
dGVySUQgdmFsdWUsIFJlZ2lzdGVySUQgc2NyYXRjaCwgVmFyaWFibGVXYXRjaHBvaW50U2V0Kik7
Ci0jZWxzZQotICAgICAgICB2b2lkIGVtaXROb3RpZnlXcml0ZShSZWdpc3RlcklEIHRhZywgUmVn
aXN0ZXJJRCBwYXlsb2FkLCBSZWdpc3RlcklEIHNjcmF0Y2gsIFZhcmlhYmxlV2F0Y2hwb2ludFNl
dCopOwotI2VuZGlmCi0gICAgICAgIHZvaWQgZW1pdFB1dEdsb2JhbFZhcih1aW50cHRyX3Qgb3Bl
cmFuZCwgaW50IHZhbHVlLCBWYXJpYWJsZVdhdGNocG9pbnRTZXQqKTsKLSAgICAgICAgdm9pZCBl
bWl0UHV0Q2xvc3VyZVZhcihpbnQgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kLCBpbnQgdmFsdWUs
IFZhcmlhYmxlV2F0Y2hwb2ludFNldCopOworICAgICAgICB2b2lkIGVtaXROb3RpZnlXcml0ZShX
YXRjaHBvaW50U2V0Kik7CisgICAgICAgIHZvaWQgZW1pdFB1dEdsb2JhbFZhcih1aW50cHRyX3Qg
b3BlcmFuZCwgaW50IHZhbHVlLCBXYXRjaHBvaW50U2V0Kik7CisgICAgICAgIHZvaWQgZW1pdFB1
dENsb3N1cmVWYXIoaW50IHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCwgaW50IHZhbHVlLCBXYXRj
aHBvaW50U2V0Kik7CiAKICAgICAgICAgdm9pZCBlbWl0SW5pdFJlZ2lzdGVyKGludCBkc3QpOwog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHJldmlzaW9u
IDE4MjQ5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTg3OSwxNSArODc5LDYgQEAgdm9pZCBKSVQ6OmVtaXRTbG93X29wX3Rv
X251bWJlcihJbnN0cnVjdAogCiAjZW5kaWYgLy8gVVNFKEpTVkFMVUU2NCkKIAotdm9pZCBKSVQ6
OmVtaXRfb3BfdG91Y2hfZW50cnkoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKLXsK
LSAgICBpZiAobV9jb2RlQmxvY2stPnN5bWJvbFRhYmxlKCktPm1fZnVuY3Rpb25FbnRlcmVkT25j
ZS5oYXNCZWVuSW52YWxpZGF0ZWQoKSkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIEpJVFNs
b3dQYXRoQ2FsbCBzbG93UGF0aENhbGwodGhpcywgY3VycmVudEluc3RydWN0aW9uLCBzbG93X3Bh
dGhfdG91Y2hfZW50cnkpOwotICAgIHNsb3dQYXRoQ2FsbC5jYWxsKCk7Ci19Ci0KIHZvaWQgSklU
OjplbWl0X29wX2xvb3BfaGludChJbnN0cnVjdGlvbiopCiB7CiAgICAgLy8gRW1pdCB0aGUgSklU
IG9wdGltaXphdGlvbiBjaGVjazogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VE9wZXJhdGlvbnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUT3BlcmF0aW9ucy5jcHAJKHJldmlzaW9uIDE4MjQ5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk1Miw2ICs5NTIs
MTQgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25OZQogICAgIHJldHVy
biBKU1ZhbHVlOjplbmNvZGUoSlNGdW5jdGlvbjo6Y3JlYXRlKHZtLCBzdGF0aWNfY2FzdDxGdW5j
dGlvbkV4ZWN1dGFibGUqPihmdW5jdGlvbkV4ZWN1dGFibGUpLCBzY29wZSkpOwogfQogCitFbmNv
ZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0Z1bmN0aW9uV2l0aEludmFsaWRh
dGVkUmVhbGxvY2F0aW9uV2F0Y2hwb2ludChFeGVjU3RhdGUqIGV4ZWMsIEpTU2NvcGUqIHNjb3Bl
LCBKU0NlbGwqIGZ1bmN0aW9uRXhlY3V0YWJsZSkKK3sKKyAgICBBU1NFUlQoZnVuY3Rpb25FeGVj
dXRhYmxlLT5pbmhlcml0cyhGdW5jdGlvbkV4ZWN1dGFibGU6OmluZm8oKSkpOworICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7CisgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4
ZWMpOworICAgIHJldHVybiBKU1ZhbHVlOjplbmNvZGUoSlNGdW5jdGlvbjo6Y3JlYXRlV2l0aElu
dmFsaWRhdGVkUmVhbGxvY2F0aW9uV2F0Y2hwb2ludCh2bSwgc3RhdGljX2Nhc3Q8RnVuY3Rpb25F
eGVjdXRhYmxlKj4oZnVuY3Rpb25FeGVjdXRhYmxlKSwgc2NvcGUpKTsKK30KKwogSlNDZWxsKiBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld09iamVjdChFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVy
ZSogc3RydWN0dXJlKQogewogICAgIFZNKiB2bSA9ICZleGVjLT52bSgpOwpAQCAtMTcyMiw4ICsx
NzMwLDggQEAgdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblB1dFRvU2NvcGUoRQogICAgIGlm
IChtb2RlQW5kVHlwZS50eXBlKCkgPT0gTG9jYWxDbG9zdXJlVmFyKSB7CiAgICAgICAgIEpTTGV4
aWNhbEVudmlyb25tZW50KiBlbnZpcm9ubWVudCA9IGpzQ2FzdDxKU0xleGljYWxFbnZpcm9ubWVu
dCo+KHNjb3BlKTsKICAgICAgICAgZW52aXJvbm1lbnQtPnZhcmlhYmxlQXQoU2NvcGVPZmZzZXQo
cGNbNl0udS5vcGVyYW5kKSkuc2V0KHZtLCBlbnZpcm9ubWVudCwgdmFsdWUpOwotICAgICAgICBp
ZiAoVmFyaWFibGVXYXRjaHBvaW50U2V0KiBzZXQgPSBwY1s1XS51LndhdGNocG9pbnRTZXQpCi0g
ICAgICAgICAgICBzZXQtPm5vdGlmeVdyaXRlKHZtLCB2YWx1ZSwgIkV4ZWN1dGVkIG9wX3B1dF9z
Y29wZTxMb2NhbENsb3N1cmVWYXI+Iik7CisgICAgICAgIGlmIChXYXRjaHBvaW50U2V0KiBzZXQg
PSBwY1s1XS51LndhdGNocG9pbnRTZXQpCisgICAgICAgICAgICBzZXQtPnRvdWNoKCJFeGVjdXRl
ZCBvcF9wdXRfc2NvcGU8TG9jYWxDbG9zdXJlVmFyPiIpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogICAgIGlmIChtb2RlQW5kVHlwZS5tb2RlKCkgPT0gVGhyb3dJZk5vdEZvdW5kICYmICFzY29w
ZS0+aGFzUHJvcGVydHkoZXhlYywgaWRlbnQpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVE9wZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVE9wZXJhdGlvbnMuaAkocmV2aXNpb24gMTgyNDk4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDcgKzM3
LDYgQEAKICNpbmNsdWRlICJQdXRLaW5kLmgiCiAjaW5jbHVkZSAiU3BpbGxSZWdpc3RlcnNNb2Rl
LmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlU3R1YkluZm8uaCIKLSNpbmNsdWRlICJWYXJpYWJsZVdh
dGNocG9pbnRTZXQuaCIKIAogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTg1LDcgKzg0LDcgQEAgZXh0
ZXJuICJDIiB7CiAgICAgU3ltdGFiOiBTeW1ib2xUYWJsZSoKICAgICBWOiB2b2lkCiAgICAgVm06
IFZNKgotICAgIFZ3czogVmFyaWFibGVXYXRjaHBvaW50U2V0KgorICAgIFdzOiBXYXRjaHBvaW50
U2V0KgogICAgIFo6IGludDMyX3QKICovCiAKQEAgLTE5MSw3ICsxOTAsNyBAQCB0eXBlZGVmIHZv
aWQgSklUX09QRVJBVElPTiAoKlZfSklUT3BlcmF0CiB0eXBlZGVmIHZvaWQgSklUX09QRVJBVElP
TiAoKlZfSklUT3BlcmF0aW9uX0VQYykoRXhlY1N0YXRlKiwgSW5zdHJ1Y3Rpb24qKTsKIHR5cGVk
ZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgqVl9KSVRPcGVyYXRpb25fRVBaSikoRXhlY1N0YXRlKiwg
dm9pZCosIGludDMyX3QsIEVuY29kZWRKU1ZhbHVlKTsKIHR5cGVkZWYgdm9pZCBKSVRfT1BFUkFU
SU9OICgqVl9KSVRPcGVyYXRpb25fRVNzaUpKSSkoRXhlY1N0YXRlKiwgU3RydWN0dXJlU3R1Yklu
Zm8qLCBFbmNvZGVkSlNWYWx1ZSwgRW5jb2RlZEpTVmFsdWUsIFN0cmluZ0ltcGwqKTsKLXR5cGVk
ZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgqVl9KSVRPcGVyYXRpb25fRVZ3c0opKEV4ZWNTdGF0ZSos
IFZhcmlhYmxlV2F0Y2hwb2ludFNldCosIEVuY29kZWRKU1ZhbHVlKTsKK3R5cGVkZWYgdm9pZCBK
SVRfT1BFUkFUSU9OICgqVl9KSVRPcGVyYXRpb25fRVdzKShFeGVjU3RhdGUqLCBXYXRjaHBvaW50
U2V0Kik7CiB0eXBlZGVmIHZvaWQgSklUX09QRVJBVElPTiAoKlZfSklUT3BlcmF0aW9uX0VaKShF
eGVjU3RhdGUqLCBpbnQzMl90KTsKIHR5cGVkZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgqVl9KSVRP
cGVyYXRpb25fRVpKKShFeGVjU3RhdGUqLCBpbnQzMl90LCBFbmNvZGVkSlNWYWx1ZSk7CiB0eXBl
ZGVmIHZvaWQgSklUX09QRVJBVElPTiAoKlZfSklUT3BlcmF0aW9uX0VaSlpaWikoRXhlY1N0YXRl
KiwgaW50MzJfdCwgRW5jb2RlZEpTVmFsdWUsIGludDMyX3QsIGludDMyX3QsIGludDMyX3QpOwpA
QCAtMjc4LDYgKzI3Nyw3IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9u
TmUKIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3QXJyYXlCdWZmZXJX
aXRoUHJvZmlsZShFeGVjU3RhdGUqLCBBcnJheUFsbG9jYXRpb25Qcm9maWxlKiwgY29uc3QgSlNW
YWx1ZSogdmFsdWVzLCBpbnQzMl90IHNpemUpIFdURl9JTlRFUk5BTDsKIEVuY29kZWRKU1ZhbHVl
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3QXJyYXlXaXRoU2l6ZUFuZFByb2ZpbGUoRXhlY1N0
YXRlKiwgQXJyYXlBbGxvY2F0aW9uUHJvZmlsZSosIEVuY29kZWRKU1ZhbHVlIHNpemUpIFdURl9J
TlRFUk5BTDsKIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3RnVuY3Rp
b24oRXhlY1N0YXRlKiwgSlNTY29wZSosIEpTQ2VsbCopIFdURl9JTlRFUk5BTDsKK0VuY29kZWRK
U1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3RnVuY3Rpb25XaXRoSW52YWxpZGF0ZWRS
ZWFsbG9jYXRpb25XYXRjaHBvaW50KEV4ZWNTdGF0ZSosIEpTU2NvcGUqLCBKU0NlbGwqKSBXVEZf
SU5URVJOQUw7CiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3T2JqZWN0KEV4ZWNT
dGF0ZSosIFN0cnVjdHVyZSopIFdURl9JTlRFUk5BTDsKIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVS
QVRJT04gb3BlcmF0aW9uTmV3UmVnZXhwKEV4ZWNTdGF0ZSosIHZvaWQqKSBXVEZfSU5URVJOQUw7
CiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uSGFuZGxlV2F0Y2hkb2dUaW1lcihFeGVjU3Rh
dGUqKSBXVEZfSU5URVJOQUw7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFBy
b3BlcnR5QWNjZXNzMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJKHJldmlzaW9uIDE4MjQ5OCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MzMl82NC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTc1MCwyNyArNzUwLDEwIEBAIHZvaWQgSklUOjplbWl0UHV0R2xvYmFsUHJv
cGVydHkodWludHB0cl8KICAgICBzdG9yZTMyKHJlZ1QyLCBCYXNlSW5kZXgocmVnVDAsIHJlZ1Qx
LCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVk
SlNWYWx1ZSkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRz
LnBheWxvYWQpKSk7CiB9CiAKLXZvaWQgSklUOjplbWl0Tm90aWZ5V3JpdGUoUmVnaXN0ZXJJRCB0
YWcsIFJlZ2lzdGVySUQgcGF5bG9hZCwgUmVnaXN0ZXJJRCBzY3JhdGNoLCBWYXJpYWJsZVdhdGNo
cG9pbnRTZXQqIHNldCkKLXsKLSAgICBpZiAoIXNldCB8fCBzZXQtPnN0YXRlKCkgPT0gSXNJbnZh
bGlkYXRlZCkKLSAgICAgICAgcmV0dXJuOwotICAgIAotICAgIGxvYWQ4KHNldC0+YWRkcmVzc09m
U3RhdGUoKSwgc2NyYXRjaCk7Ci0gICAgSnVtcCBpc0RvbmUgPSBicmFuY2gzMihFcXVhbCwgc2Ny
YXRjaCwgVHJ1c3RlZEltbTMyKElzSW52YWxpZGF0ZWQpKTsKLQotICAgIEp1bXBMaXN0IG5vdGlm
eVNsb3cgPSBicmFuY2gzMigKLSAgICAgICAgTm90RXF1YWwsIEFic29sdXRlQWRkcmVzcyhzZXQt
PmFkZHJlc3NPZkluZmVycmVkVmFsdWUoKS0+cGF5bG9hZFBvaW50ZXIoKSksIHBheWxvYWQpOwot
ICAgIG5vdGlmeVNsb3cuYXBwZW5kKGJyYW5jaDMyKAotICAgICAgICBOb3RFcXVhbCwgQWJzb2x1
dGVBZGRyZXNzKHNldC0+YWRkcmVzc09mSW5mZXJyZWRWYWx1ZSgpLT50YWdQb2ludGVyKCkpLCB0
YWcpKTsKLSAgICBhZGRTbG93Q2FzZShub3RpZnlTbG93KTsKLQotICAgIGlzRG9uZS5saW5rKHRo
aXMpOwotfQotCiB2b2lkIEpJVDo6ZW1pdFB1dEdsb2JhbFZhcih1aW50cHRyX3Qgb3BlcmFuZCwg
aW50IHZhbHVlLCBWYXJpYWJsZVdhdGNocG9pbnRTZXQqIHNldCkKIHsKICAgICBlbWl0TG9hZCh2
YWx1ZSwgcmVnVDEsIHJlZ1QwKTsKLSAgICBlbWl0Tm90aWZ5V3JpdGUocmVnVDEsIHJlZ1QwLCBy
ZWdUMiwgc2V0KTsKKyAgICBlbWl0Tm90aWZ5V3JpdGUoc2V0KTsKICAgICBzdG9yZTMyKHJlZ1Qx
LCByZWludGVycHJldF9jYXN0PGNoYXIqPihvcGVyYW5kKSArIE9CSkVDVF9PRkZTRVRPRihFbmNv
ZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMudGFnKSk7CiAgICAgc3RvcmUzMihyZWdUMCwgcmVp
bnRlcnByZXRfY2FzdDxjaGFyKj4ob3BlcmFuZCkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZh
bHVlRGVzY3JpcHRvciwgYXNCaXRzLnBheWxvYWQpKTsKIH0KQEAgLTc3OSw3ICs3NjIsNyBAQCB2
b2lkIEpJVDo6ZW1pdFB1dENsb3N1cmVWYXIoaW50IHNjb3BlLCB1CiB7CiAgICAgZW1pdExvYWQo
dmFsdWUsIHJlZ1QzLCByZWdUMik7CiAgICAgZW1pdExvYWQoc2NvcGUsIHJlZ1QxLCByZWdUMCk7
Ci0gICAgZW1pdE5vdGlmeVdyaXRlKHJlZ1QzLCByZWdUMiwgcmVnVDQsIHNldCk7CisgICAgZW1p
dE5vdGlmeVdyaXRlKHNldCk7CiAgICAgc3RvcmUzMihyZWdUMywgQWRkcmVzcyhyZWdUMCwgSlNF
bnZpcm9ubWVudFJlY29yZDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSArIG9wZXJhbmQgKiBzaXplb2Yo
UmVnaXN0ZXIpICsgVGFnT2Zmc2V0KSk7CiAgICAgc3RvcmUzMihyZWdUMiwgQWRkcmVzcyhyZWdU
MCwgSlNFbnZpcm9ubWVudFJlY29yZDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSArIG9wZXJhbmQgKiBz
aXplb2YoUmVnaXN0ZXIpICsgUGF5bG9hZE9mZnNldCkpOwogfQpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJKHJldmlzaW9uIDE4MjQ5
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC03MjgsMjkgKzcyOCwxOCBAQCB2b2lkIEpJVDo6ZW1pdFB1dEdsb2Jh
bFByb3BlcnR5KHVpbnRwdHJfCiAgICAgc3RvcmVQdHIocmVnVDIsIEJhc2VJbmRleChyZWdUMCwg
cmVnVDEsIFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVu
Y29kZWRKU1ZhbHVlKSkpOwogfQogCi12b2lkIEpJVDo6ZW1pdE5vdGlmeVdyaXRlKFJlZ2lzdGVy
SUQgdmFsdWUsIFJlZ2lzdGVySUQgc2NyYXRjaCwgVmFyaWFibGVXYXRjaHBvaW50U2V0KiBzZXQp
Ci17Ci0gICAgaWYgKCFzZXQgfHwgc2V0LT5zdGF0ZSgpID09IElzSW52YWxpZGF0ZWQpCi0gICAg
ICAgIHJldHVybjsKLSAgICAKLSAgICBsb2FkOChzZXQtPmFkZHJlc3NPZlN0YXRlKCksIHNjcmF0
Y2gpOwotICAgIEp1bXAgaXNEb25lID0gYnJhbmNoMzIoRXF1YWwsIHNjcmF0Y2gsIFRydXN0ZWRJ
bW0zMihJc0ludmFsaWRhdGVkKSk7Ci0gICAgYWRkU2xvd0Nhc2UoYnJhbmNoNjQoTm90RXF1YWws
IEFic29sdXRlQWRkcmVzcyhzZXQtPmFkZHJlc3NPZkluZmVycmVkVmFsdWUoKSksIHZhbHVlKSk7
Ci0gICAgaXNEb25lLmxpbmsodGhpcyk7Ci19Ci0KLXZvaWQgSklUOjplbWl0UHV0R2xvYmFsVmFy
KHVpbnRwdHJfdCBvcGVyYW5kLCBpbnQgdmFsdWUsIFZhcmlhYmxlV2F0Y2hwb2ludFNldCogc2V0
KQordm9pZCBKSVQ6OmVtaXRQdXRHbG9iYWxWYXIodWludHB0cl90IG9wZXJhbmQsIGludCB2YWx1
ZSwgV2F0Y2hwb2ludFNldCogc2V0KQogewogICAgIGVtaXRHZXRWaXJ0dWFsUmVnaXN0ZXIodmFs
dWUsIHJlZ1QwKTsKLSAgICBlbWl0Tm90aWZ5V3JpdGUocmVnVDAsIHJlZ1QxLCBzZXQpOworICAg
IGVtaXROb3RpZnlXcml0ZShzZXQpOwogICAgIHN0b3JlUHRyKHJlZ1QwLCByZWludGVycHJldF9j
YXN0PHZvaWQqPihvcGVyYW5kKSk7CiB9CiAKLXZvaWQgSklUOjplbWl0UHV0Q2xvc3VyZVZhcihp
bnQgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kLCBpbnQgdmFsdWUsIFZhcmlhYmxlV2F0Y2hwb2lu
dFNldCogc2V0KQordm9pZCBKSVQ6OmVtaXRQdXRDbG9zdXJlVmFyKGludCBzY29wZSwgdWludHB0
cl90IG9wZXJhbmQsIGludCB2YWx1ZSwgV2F0Y2hwb2ludFNldCogc2V0KQogewogICAgIGVtaXRH
ZXRWaXJ0dWFsUmVnaXN0ZXIodmFsdWUsIHJlZ1QxKTsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKHNjb3BlLCByZWdUMCk7Ci0gICAgZW1pdE5vdGlmeVdyaXRlKHJlZ1QxLCByZWdUMiwgc2V0
KTsKKyAgICBlbWl0Tm90aWZ5V3JpdGUoc2V0KTsKICAgICBzdG9yZVB0cihyZWdUMSwgQWRkcmVz
cyhyZWdUMCwgSlNFbnZpcm9ubWVudFJlY29yZDo6b2Zmc2V0T2ZWYXJpYWJsZXMoKSArIG9wZXJh
bmQgKiBzaXplb2YoUmVnaXN0ZXIpKSk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAkocmV2aXNpb24gMTgyNDk4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMTQwMiw4ICsxNDAyLDEyIEBAIExMSU5UX1NMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9w
dXRfdG9fc2MKICAgICBpZiAobW9kZUFuZFR5cGUudHlwZSgpID09IExvY2FsQ2xvc3VyZVZhcikg
ewogICAgICAgICBKU0xleGljYWxFbnZpcm9ubWVudCogZW52aXJvbm1lbnQgPSBqc0Nhc3Q8SlNM
ZXhpY2FsRW52aXJvbm1lbnQqPihzY29wZSk7CiAgICAgICAgIGVudmlyb25tZW50LT52YXJpYWJs
ZUF0KFNjb3BlT2Zmc2V0KHBjWzZdLnUub3BlcmFuZCkpLnNldCh2bSwgZW52aXJvbm1lbnQsIHZh
bHVlKTsKLSAgICAgICAgaWYgKFZhcmlhYmxlV2F0Y2hwb2ludFNldCogc2V0ID0gcGNbNV0udS53
YXRjaHBvaW50U2V0KQotICAgICAgICAgICAgc2V0LT5ub3RpZnlXcml0ZSh2bSwgdmFsdWUsICJF
eGVjdXRlZCBvcF9wdXRfc2NvcGU8TG9jYWxDbG9zdXJlVmFyPiIpOworICAgICAgICAKKyAgICAg
ICAgLy8gSGF2ZSB0byBkbyB0aGlzICphZnRlciogdGhlIHdyaXRlLCBiZWNhdXNlIGlmIHRoaXMg
cHV0cyB0aGUgc2V0IGludG8gSXNXYXRjaGVkLCB0aGVuIHdlIG5lZWQKKyAgICAgICAgLy8gdG8g
aGF2ZSBhbHJlYWR5IGNoYW5nZWQgdGhlIHZhbHVlIG9mIHRoZSB2YXJpYWJsZS4gT3RoZXJ3aXNl
IHdlIG1pZ2h0IHdhdGNoIGFuZCBjb25zdGFudC1mb2xkCisgICAgICAgIC8vIHRvIHRoZSBVbmRl
ZmluZWQgdmFsdWUgZnJvbSBiZWZvcmUgdGhlIGFzc2lnbm1lbnQuCisgICAgICAgIGlmIChXYXRj
aHBvaW50U2V0KiBzZXQgPSBwY1s1XS51LndhdGNocG9pbnRTZXQpCisgICAgICAgICAgICBzZXQt
PnRvdWNoKCJFeGVjdXRlZCBvcF9wdXRfc2NvcGU8TG9jYWxDbG9zdXJlVmFyPiIpOwogICAgICAg
ICBMTElOVF9FTkQoKTsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGlu
dC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtCShyZXZpc2lvbiAx
ODI0OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRl
cjMyXzY0LmFzbQkod29ya2luZyBjb3B5KQpAQCAtODA1LDE0ICs4MDUsNiBAQCBfbGxpbnRfb3Bf
bW92OgogICAgIGRpc3BhdGNoKDMpCiAKIAotbWFjcm8gbm90aWZ5V3JpdGUoc2V0LCB2YWx1ZVRh
ZywgdmFsdWVQYXlsb2FkLCBzY3JhdGNoLCBzbG93KQotICAgIGxvYWRiIFZhcmlhYmxlV2F0Y2hw
b2ludFNldDo6bV9zdGF0ZVtzZXRdLCBzY3JhdGNoCi0gICAgYmllcSBzY3JhdGNoLCBJc0ludmFs
aWRhdGVkLCAuZG9uZQotICAgIGJpbmVxIHZhbHVlUGF5bG9hZCwgVmFyaWFibGVXYXRjaHBvaW50
U2V0OjptX2luZmVycmVkVmFsdWUgKyBQYXlsb2FkT2Zmc2V0W3NldF0sIHNsb3cKLSAgICBiaW5l
cSB2YWx1ZVRhZywgVmFyaWFibGVXYXRjaHBvaW50U2V0OjptX2luZmVycmVkVmFsdWUgKyBUYWdP
ZmZzZXRbc2V0XSwgc2xvdwotLmRvbmU6Ci1lbmQKLQogX2xsaW50X29wX25vdDoKICAgICB0cmFj
ZUV4ZWN1dGlvbigpCiAgICAgbG9hZGkgOFtQQ10sIHQwCkBAIC0yMjA0LDcgKzIxOTYsNyBAQCBt
YWNybyBwdXRHbG9iYWxWYXIoKQogICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlvbigzLCB0MCkKICAg
ICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHQwLCB0MSwgdDIpCiAgICAgbG9hZHBGcm9tSW5zdHJ1
Y3Rpb24oNSwgdDMpCi0gICAgbm90aWZ5V3JpdGUodDMsIHQxLCB0MiwgdDAsIC5wRHluYW1pYykK
KyAgICBub3RpZnlXcml0ZSh0MywgLnBEeW5hbWljKQogICAgIGxvYWRwRnJvbUluc3RydWN0aW9u
KDYsIHQwKQogICAgIHN0b3JlaSB0MSwgVGFnT2Zmc2V0W3QwXQogICAgIHN0b3JlaSB0MiwgUGF5
bG9hZE9mZnNldFt0MF0KQEAgLTIyMjMsNyArMjIxNSw3IEBAIG1hY3JvIHB1dExvY2FsQ2xvc3Vy
ZVZhcigpCiAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZSh0MSwgdDIsIHQzKQogICAgIGxvYWRw
RnJvbUluc3RydWN0aW9uKDUsIHQ0KQogICAgIGJ0cHogdDQsIC5ub1ZhcmlhYmxlV2F0Y2hwb2lu
dFNldAotICAgIG5vdGlmeVdyaXRlKHQ0LCB0MiwgdDMsIHQxLCAucER5bmFtaWMpCisgICAgbm90
aWZ5V3JpdGUodDQsIC5wRHluYW1pYykKIC5ub1ZhcmlhYmxlV2F0Y2hwb2ludFNldDoKICAgICBs
b2FkaXNGcm9tSW5zdHJ1Y3Rpb24oNiwgdDEpCiAgICAgc3RvcmVpIHQyLCBKU0Vudmlyb25tZW50
UmVjb3JkX3ZhcmlhYmxlcyArIFRhZ09mZnNldFt0MCwgdDEsIDhdCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjY0LmFzbQko
cmV2aXNpb24gMTgyNDk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVs
SW50ZXJwcmV0ZXI2NC5hc20JKHdvcmtpbmcgY29weSkKQEAgLTY5MCwxMyArNjkwLDYgQEAgX2xs
aW50X29wX21vdjoKICAgICBkaXNwYXRjaCgzKQogCiAKLW1hY3JvIG5vdGlmeVdyaXRlKHNldCwg
dmFsdWUsIHNjcmF0Y2gsIHNsb3cpCi0gICAgbG9hZGIgVmFyaWFibGVXYXRjaHBvaW50U2V0Ojpt
X3N0YXRlW3NldF0sIHNjcmF0Y2gKLSAgICBiaWVxIHNjcmF0Y2gsIElzSW52YWxpZGF0ZWQsIC5k
b25lCi0gICAgYnFuZXEgdmFsdWUsIFZhcmlhYmxlV2F0Y2hwb2ludFNldDo6bV9pbmZlcnJlZFZh
bHVlW3NldF0sIHNsb3cKLS5kb25lOgotZW5kCi0KIF9sbGludF9vcF9ub3Q6CiAgICAgdHJhY2VF
eGVjdXRpb24oKQogICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlvbigyLCB0MCkKQEAgLTIwNjksOCAr
MjA2Miw4IEBAIG1hY3JvIHB1dEdsb2JhbFZhcigpCiAgICAgbG9hZGlzRnJvbUluc3RydWN0aW9u
KDMsIHQwKQogICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUodDAsIHQxKQogICAgIGxvYWRwRnJv
bUluc3RydWN0aW9uKDUsIHQyKQotICAgIG5vdGlmeVdyaXRlKHQyLCB0MSwgdDAsIC5wRHluYW1p
YykKICAgICBsb2FkcEZyb21JbnN0cnVjdGlvbig2LCB0MCkKKyAgICBub3RpZnlXcml0ZSh0Miwg
LnBEeW5hbWljKQogICAgIHN0b3JlcSB0MSwgW3QwXQogZW5kCiAKQEAgLTIwODYsNyArMjA3OSw3
IEBAIG1hY3JvIHB1dExvY2FsQ2xvc3VyZVZhcigpCiAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJs
ZSh0MSwgdDIpCiAgICAgbG9hZHBGcm9tSW5zdHJ1Y3Rpb24oNSwgdDMpCiAgICAgYnRweiB0Mywg
Lm5vVmFyaWFibGVXYXRjaHBvaW50U2V0Ci0gICAgbm90aWZ5V3JpdGUodDMsIHQyLCB0MSwgLnBE
eW5hbWljKQorICAgIG5vdGlmeVdyaXRlKHQzLCAucER5bmFtaWMpCiAubm9WYXJpYWJsZVdhdGNo
cG9pbnRTZXQ6CiAgICAgbG9hZGlzRnJvbUluc3RydWN0aW9uKDYsIHQxKQogICAgIHN0b3JlcSB0
MiwgSlNFbnZpcm9ubWVudFJlY29yZF92YXJpYWJsZXNbdDAsIHQxLCA4XQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNtCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQko
cmV2aXNpb24gMTgyNDk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVs
SW50ZXJwcmV0ZXIuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC01MTksNiArNTE5LDEwIEBAIG1hY3Jv
IHNraXBJZklzUmVtZW1iZXJlZE9ySW5FZGVuKGNlbGwsIHMKICAgICBjb250aW51YXRpb24oc2Ny
YXRjaDEpCiBlbmQKIAorbWFjcm8gbm90aWZ5V3JpdGUoc2V0LCBzbG93KQorICAgIGJibmVxIFdh
dGNocG9pbnRTZXQ6Om1fc3RhdGVbc2V0XSwgSXNJbnZhbGlkYXRlZCwgc2xvdworZW5kCisKIG1h
Y3JvIGNoZWNrU3dpdGNoVG9KSVQoaW5jcmVtZW50LCBhY3Rpb24pCiAgICAgbG9hZHAgQ29kZUJs
b2NrW2Nmcl0sIHQwCiAgICAgYmFkZGlzIGluY3JlbWVudCwgQ29kZUJsb2NrOjptX2xsaW50RXhl
Y3V0ZUNvdW50ZXIgKyBCYXNlbGluZUV4ZWN1dGlvbkNvdW50ZXI6Om1fY291bnRlclt0MF0sIC5j
b250aW51ZQpAQCAtOTIwLDEyICs5MjQsNiBAQCBlbmQKIAogCiAjIFZhbHVlLXJlcHJlc2VudGF0
aW9uLWFnbm9zdGljIGNvZGUuCi1fbGxpbnRfb3BfdG91Y2hfZW50cnk6Ci0gICAgdHJhY2VFeGVj
dXRpb24oKQotICAgIGNhbGxTbG93UGF0aChfc2xvd19wYXRoX3RvdWNoX2VudHJ5KQotICAgIGRp
c3BhdGNoKDEpCi0KLQogX2xsaW50X29wX2NyZWF0ZV9kaXJlY3RfYXJndW1lbnRzOgogICAgIHRy
YWNlRXhlY3V0aW9uKCkKICAgICBjYWxsU2xvd1BhdGgoX3Nsb3dfcGF0aF9jcmVhdGVfZGlyZWN0
X2FyZ3VtZW50cykKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNs
b3dQYXRocy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
Q29tbW9uU2xvd1BhdGhzLmNwcAkocmV2aXNpb24gMTgyNDk4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTUs
NyArNTUsNiBAQAogI2luY2x1ZGUgIlNjb3BlZEFyZ3VtZW50cy5oIgogI2luY2x1ZGUgIlN0cnVj
dHVyZVJhcmVEYXRhSW5saW5lcy5oIgogI2luY2x1ZGUgIlR5cGVQcm9maWxlckxvZy5oIgotI2lu
Y2x1ZGUgIlZhcmlhYmxlV2F0Y2hwb2ludFNldElubGluZXMuaCIKICNpbmNsdWRlIDx3dGYvU3Ry
aW5nUHJpbnRTdHJlYW0uaD4KIAogbmFtZXNwYWNlIEpTQyB7CkBAIC0yMDYsMTMgKzIwNSw2IEBA
IFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9jb25zdHJ1Y3RfYXJpdHkKICAgICBSRVRVUk5fVFdP
KDAsIHNldHVwQXJpdHlDaGVja0RhdGEodm0sIHNsb3RzVG9BZGQpKTsKIH0KIAotU0xPV19QQVRI
X0RFQ0woc2xvd19wYXRoX3RvdWNoX2VudHJ5KQotewotICAgIEJFR0lOKCk7Ci0gICAgZXhlYy0+
Y29kZUJsb2NrKCktPnN5bWJvbFRhYmxlKCktPm1fZnVuY3Rpb25FbnRlcmVkT25jZS50b3VjaCgi
RnVuY3Rpb24gKHJlKWVudGVyZWQiKTsKLSAgICBFTkQoKTsKLX0KLQogU0xPV19QQVRIX0RFQ0wo
c2xvd19wYXRoX2NyZWF0ZV9kaXJlY3RfYXJndW1lbnRzKQogewogICAgIEJFR0lOKCk7CkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuaAko
cmV2aXNpb24gMTgyNDk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9u
U2xvd1BhdGhzLmgJKHdvcmtpbmcgY29weSkKQEAgLTE4MSw3ICsxODEsNiBAQCBTTE9XX1BBVEhf
REVDTChuYW1lKSBXVEZfSU5URVJOQUwKICAgICAKIFNMT1dfUEFUSF9ISURERU5fREVDTChzbG93
X3BhdGhfY2FsbF9hcml0eUNoZWNrKTsKIFNMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhf
Y29uc3RydWN0X2FyaXR5Q2hlY2spOwotU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF90
b3VjaF9lbnRyeSk7CiBTTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX2NyZWF0ZV9kaXJl
Y3RfYXJndW1lbnRzKTsKIFNMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfY3JlYXRlX3Nj
b3BlZF9hcmd1bWVudHMpOwogU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9jcmVhdGVf
b3V0X29mX2JhbmRfYXJndW1lbnRzKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0V4ZWN1dGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0V4ZWN1dGFibGUuY3BwCShyZXZpc2lvbiAxODI0OTgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDE0LDYg
KzQxNCwxMiBAQCBGdW5jdGlvbkV4ZWN1dGFibGU6OkZ1bmN0aW9uRXhlY3V0YWJsZShWCiAgICAg
bV90eXBlUHJvZmlsaW5nRW5kT2Zmc2V0ID0gdW5saW5rZWRFeGVjdXRhYmxlLT50eXBlUHJvZmls
aW5nRW5kT2Zmc2V0KCk7CiB9CiAKK3ZvaWQgRnVuY3Rpb25FeGVjdXRhYmxlOjpmaW5pc2hDcmVh
dGlvbihWTSYgdm0pCit7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOworICAgIG1fc2lu
Z2xldG9uRnVuY3Rpb24uc2V0KHZtLCB0aGlzLCBJbmZlcnJlZFZhbHVlOjpjcmVhdGUodm0pKTsK
K30KKwogdm9pZCBGdW5jdGlvbkV4ZWN1dGFibGU6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQogewog
ICAgIHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGNlbGwpLT5GdW5jdGlvbkV4ZWN1
dGFibGU6On5GdW5jdGlvbkV4ZWN1dGFibGUoKTsKQEAgLTU2Nyw2ICs1NzMsNyBAQCB2b2lkIEZ1
bmN0aW9uRXhlY3V0YWJsZTo6dmlzaXRDaGlsZHJlbihKCiAgICAgaWYgKHRoaXNPYmplY3QtPm1f
Y29kZUJsb2NrRm9yQ29uc3RydWN0KQogICAgICAgICB0aGlzT2JqZWN0LT5tX2NvZGVCbG9ja0Zv
ckNvbnN0cnVjdC0+dmlzaXRBZ2dyZWdhdGUodmlzaXRvcik7CiAgICAgdmlzaXRvci5hcHBlbmQo
JnRoaXNPYmplY3QtPm1fdW5saW5rZWRFeGVjdXRhYmxlKTsKKyAgICB2aXNpdG9yLmFwcGVuZCgm
dGhpc09iamVjdC0+bV9zaW5nbGV0b25GdW5jdGlvbik7CiB9CiAKIFN5bWJvbFRhYmxlKiBGdW5j
dGlvbkV4ZWN1dGFibGU6OnN5bWJvbFRhYmxlKENvZGVTcGVjaWFsaXphdGlvbktpbmQga2luZCkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgJKHJldmlz
aW9uIDE4MjQ5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUu
aAkod29ya2luZyBjb3B5KQpAQCAtMzMsOCArMzMsNyBAQAogI2luY2x1ZGUgIkNvbXBpbGF0aW9u
UmVzdWx0LmgiCiAjaW5jbHVkZSAiREZHUGxhbi5oIgogI2luY2x1ZGUgIkhhbmRsZXJJbmZvLmgi
Ci0jaW5jbHVkZSAiSlNGdW5jdGlvbi5oIgotI2luY2x1ZGUgIkludGVycHJldGVyLmgiCisjaW5j
bHVkZSAiSW5mZXJyZWRWYWx1ZS5oIgogI2luY2x1ZGUgIkpJVENvZGUuaCIKICNpbmNsdWRlICJK
U0dsb2JhbE9iamVjdC5oIgogI2luY2x1ZGUgIlJlZ2lzdGVyUHJlc2VydmF0aW9uTW9kZS5oIgpA
QCAtNjQ5LDExICs2NDgsMTUgQEAgcHVibGljOgogICAgIHZvaWQgdW5saW5rQ2FsbHMoKTsKIAog
ICAgIHZvaWQgY2xlYXJDb2RlKCk7CisgICAgCisgICAgSW5mZXJyZWRWYWx1ZSogc2luZ2xldG9u
RnVuY3Rpb24oKSB7IHJldHVybiBtX3NpbmdsZXRvbkZ1bmN0aW9uLmdldCgpOyB9CiAKIHByaXZh
dGU6CiAgICAgRnVuY3Rpb25FeGVjdXRhYmxlKAogICAgICAgICBWTSYsIGNvbnN0IFNvdXJjZUNv
ZGUmLCBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSosIHVuc2lnbmVkIGZpcnN0TGluZSwgCiAg
ICAgICAgIHVuc2lnbmVkIGxhc3RMaW5lLCB1bnNpZ25lZCBzdGFydENvbHVtbiwgdW5zaWduZWQg
ZW5kQ29sdW1uKTsKKyAgICAKKyAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7CiAKICAgICBi
b29sIGlzQ29tcGlsaW5nKCkKICAgICB7CkBAIC02NjcsMTIgKzY3MCwxMyBAQCBwcml2YXRlOgog
ICAgIH0KIAogICAgIGZyaWVuZCBjbGFzcyBTY3JpcHRFeGVjdXRhYmxlOwotCisgICAgCiAgICAg
V3JpdGVCYXJyaWVyPFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlPiBtX3VubGlua2VkRXhlY3V0
YWJsZTsKICAgICBSZWZQdHI8RnVuY3Rpb25Db2RlQmxvY2s+IG1fY29kZUJsb2NrRm9yQ2FsbDsK
ICAgICBSZWZQdHI8RnVuY3Rpb25Db2RlQmxvY2s+IG1fY29kZUJsb2NrRm9yQ29uc3RydWN0Owog
ICAgIFJlZlB0cjxUeXBlU2V0PiBtX3JldHVyblN0YXRlbWVudFR5cGVTZXQ7CiAgICAgdW5zaWdu
ZWQgbV9wYXJhbWV0ZXJzU3RhcnRPZmZzZXQ7CisgICAgV3JpdGVCYXJyaWVyPEluZmVycmVkVmFs
dWU+IG1fc2luZ2xldG9uRnVuY3Rpb247CiB9OwogCiBpbmxpbmUgdm9pZCBFeGVjdXRhYmxlQmFz
ZTo6Y2xlYXJDb2RlVmlydHVhbChFeGVjdXRhYmxlQmFzZSogZXhlY3V0YWJsZSkKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVkVmFsdWUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVkVmFsdWUuY3BwCShyZXZp
c2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRWYWx1ZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMzIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkluZmVycmVkVmFsdWUuaCIKKworI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKworbmFtZXNwYWNl
IEpTQyB7CisKK2NvbnN0IENsYXNzSW5mbyBJbmZlcnJlZFZhbHVlOjpzX2luZm8gPSB7ICJJbmZl
cnJlZFZhbHVlIiwgMCwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShJbmZlcnJlZFZhbHVlKSB9Owor
CitJbmZlcnJlZFZhbHVlKiBJbmZlcnJlZFZhbHVlOjpjcmVhdGUoVk0mIHZtKQoreworICAgIElu
ZmVycmVkVmFsdWUqIHJlc3VsdCA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEluZmVycmVk
VmFsdWU+KHZtLmhlYXApKSBJbmZlcnJlZFZhbHVlKHZtKTsKKyAgICByZXN1bHQtPmZpbmlzaENy
ZWF0aW9uKHZtKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCit2b2lkIEluZmVycmVkVmFsdWU6
OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQoreworICAgIEluZmVycmVkVmFsdWUqIGluZmVycmVkVmFs
dWUgPSBzdGF0aWNfY2FzdDxJbmZlcnJlZFZhbHVlKj4oY2VsbCk7CisgICAgaW5mZXJyZWRWYWx1
ZS0+SW5mZXJyZWRWYWx1ZTo6fkluZmVycmVkVmFsdWUoKTsKK30KKworU3RydWN0dXJlKiBJbmZl
cnJlZFZhbHVlOjpjcmVhdGVTdHJ1Y3R1cmUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFs
T2JqZWN0LCBKU1ZhbHVlIHByb3RvdHlwZSkKK3sKKyAgICByZXR1cm4gU3RydWN0dXJlOjpjcmVh
dGUodm0sIGdsb2JhbE9iamVjdCwgcHJvdG90eXBlLCBUeXBlSW5mbyhDZWxsVHlwZSwgU3RydWN0
dXJlRmxhZ3MpLCBpbmZvKCkpOworfQorCit2b2lkIEluZmVycmVkVmFsdWU6OnZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKK3sKKyAgICBJbmZlcnJlZFZh
bHVlKiBpbmZlcnJlZFZhbHVlID0ganNDYXN0PEluZmVycmVkVmFsdWUqPihjZWxsKTsKKyAgICAK
KyAgICBpZiAoaW5mZXJyZWRWYWx1ZS0+bV9zZXQuaGFzQmVlbkludmFsaWRhdGVkKCkpIHsKKyAg
ICAgICAgaW5mZXJyZWRWYWx1ZS0+bV9jbGVhbnVwID0gbnVsbHB0cjsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICAKKyAgICBpZiAoIWluZmVycmVkVmFsdWUtPm1fdmFsdWUpCisgICAgICAg
IHJldHVybjsKKyAgICBpZiAoIWluZmVycmVkVmFsdWUtPm1fdmFsdWUuZ2V0KCkuaXNDZWxsKCkp
CisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBpZiAoIWluZmVycmVkVmFsdWUtPm1fY2xlYW51
cCkKKyAgICAgICAgaW5mZXJyZWRWYWx1ZS0+bV9jbGVhbnVwID0gc3RkOjptYWtlX3VuaXF1ZTxW
YWx1ZUNsZWFudXA+KGluZmVycmVkVmFsdWUpOworICAgIHZpc2l0b3IuYWRkVW5jb25kaXRpb25h
bEZpbmFsaXplcihpbmZlcnJlZFZhbHVlLT5tX2NsZWFudXAuZ2V0KCkpOworfQorCitJbmZlcnJl
ZFZhbHVlOjpJbmZlcnJlZFZhbHVlKFZNJiB2bSkKKyAgICA6IEJhc2Uodm0sIHZtLmluZmVycmVk
VmFsdWVTdHJ1Y3R1cmUuZ2V0KCkpCisgICAgLCBtX3NldChDbGVhcldhdGNocG9pbnQpCit7Cit9
CisKK0luZmVycmVkVmFsdWU6On5JbmZlcnJlZFZhbHVlKCkKK3sKK30KKwordm9pZCBJbmZlcnJl
ZFZhbHVlOjpub3RpZnlXcml0ZVNsb3coVk0mIHZtLCBKU1ZhbHVlIHZhbHVlLCBjb25zdCBGaXJl
RGV0YWlsJiBkZXRhaWwpCit7CisgICAgQVNTRVJUKCEhdmFsdWUpOworICAgIHN3aXRjaCAobV9z
ZXQuc3RhdGUoKSkgeworICAgIGNhc2UgQ2xlYXJXYXRjaHBvaW50OgorICAgICAgICBtX3ZhbHVl
LnNldCh2bSwgdGhpcywgdmFsdWUpOworICAgICAgICBtX3NldC5zdGFydFdhdGNoaW5nKCk7Cisg
ICAgICAgIHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBJc1dhdGNoZWQ6CisgICAgICAgIEFT
U0VSVCghIW1fdmFsdWUpOworICAgICAgICBpZiAobV92YWx1ZS5nZXQoKSA9PSB2YWx1ZSkKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgaW52YWxpZGF0ZShkZXRhaWwpOworICAgICAgICBy
ZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgSXNJbnZhbGlkYXRlZDoKKyAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7Cit9CisKK3ZvaWQgSW5mZXJyZWRWYWx1ZTo6bm90aWZ5V3JpdGVTbG93
KFZNJiB2bSwgSlNWYWx1ZSB2YWx1ZSwgY29uc3QgY2hhciogcmVhc29uKQoreworICAgIG5vdGlm
eVdyaXRlU2xvdyh2bSwgdmFsdWUsIFN0cmluZ0ZpcmVEZXRhaWwocmVhc29uKSk7Cit9CisKK0lu
ZmVycmVkVmFsdWU6OlZhbHVlQ2xlYW51cDo6VmFsdWVDbGVhbnVwKEluZmVycmVkVmFsdWUqIG93
bmVyKQorICAgIDogbV9vd25lcihvd25lcikKK3sKK30KKworSW5mZXJyZWRWYWx1ZTo6VmFsdWVD
bGVhbnVwOjp+VmFsdWVDbGVhbnVwKCkKK3sKK30KKwordm9pZCBJbmZlcnJlZFZhbHVlOjpWYWx1
ZUNsZWFudXA6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KCkKK3sKKyAgICBBU1NFUlQobV9vd25l
ci0+bV92YWx1ZSk7CisgICAgQVNTRVJUKG1fb3duZXItPm1fdmFsdWUuaXNDZWxsKCkpOworICAg
IAorICAgIGlmIChIZWFwOjppc01hcmtlZChtX293bmVyLT5tX3ZhbHVlLmdldCgpLmFzQ2VsbCgp
KSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIG1fb3duZXItPmludmFsaWRhdGUoU3RyaW5n
RmlyZURldGFpbCgiSW5mZXJyZWRWYWx1ZSBjbGVhbi11cCBkdXJpbmcgR0MiKSk7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIEpTQworCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9J
bmZlcnJlZFZhbHVlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSW5mZXJyZWRWYWx1ZS5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSW5mZXJyZWRWYWx1ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTM2IEBA
CisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZv
cm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92
aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElO
Qy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBD
T05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRB
TCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUg
R09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQor
ICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBP
UiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElO
IEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURW
SVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpZm5kZWYg
SW5mZXJyZWRWYWx1ZV9oCisjZGVmaW5lIEluZmVycmVkVmFsdWVfaAorCisjaW5jbHVkZSAiSlND
ZWxsLmgiCisjaW5jbHVkZSAiV2F0Y2hwb2ludC5oIgorI2luY2x1ZGUgIldyaXRlQmFycmllci5o
IgorCituYW1lc3BhY2UgSlNDIHsKKworLy8gQWxsb2NhdGUgb25lIG9mIHRoZXNlIGlmIHlvdSdk
IGxpa2UgdG8gaW5mZXIgYSBjb25zdGFudCB2YWx1ZS4gV3JpdGVzIHRvIHRoZSB2YWx1ZSBzaG91
bGQgdXNlCisvLyBub3RpZnlXcml0ZSgpLiBTbyBsb25nIGFzIGV4YWN0bHkgb25lIHZhbHVlIGhh
ZCBldmVyIGJlZW4gd3JpdHRlbiBhbmQgaW52YWxpZGF0ZSgpIGhhcyBuZXZlciBiZWVuCisvLyBj
YWxsZWQsIGFuZCB5b3UgcmVnaXN0ZXIgYSB3YXRjaHBvaW50LCB5b3UgY2FuIHJlbHkgb24gdGhl
IGluZmVycmVkVmFsdWUoKSBiZWluZyB0aGUgb25lIHRydWUKKy8vIHZhbHVlLgorLy8KKy8vIENv
bW1vbmx5IHVzZWQgZm9yIGluZmVycmluZyBzaW5nbGV0b25zIC0gaW4gdGhhdCBjYXNlIGVhY2gg
YWxsb2NhdGlvbiBkb2VzIG5vdGlmeVdyaXRlKCkuIEJ1dCB5b3UKKy8vIGNhbiB1c2UgaWYgZm9y
IG90aGVyIHRoaW5ncyBhcyB3ZWxsLgorCitjbGFzcyBJbmZlcnJlZFZhbHVlIDogcHVibGljIEpT
Q2VsbCB7CitwdWJsaWM6CisgICAgdHlwZWRlZiBKU0NlbGwgQmFzZTsKKyAgICAKKyAgICBzdGF0
aWMgSW5mZXJyZWRWYWx1ZSogY3JlYXRlKFZNJik7CisgICAgCisgICAgc3RhdGljIGNvbnN0IGJv
b2wgbmVlZHNEZXN0cnVjdGlvbiA9IHRydWU7CisgICAgc3RhdGljIGNvbnN0IGJvb2wgaGFzSW1t
b3J0YWxTdHJ1Y3R1cmUgPSB0cnVlOworICAgIHN0YXRpYyB2b2lkIGRlc3Ryb3koSlNDZWxsKik7
CisgICAgCisgICAgc3RhdGljIFN0cnVjdHVyZSogY3JlYXRlU3RydWN0dXJlKFZNJiwgSlNHbG9i
YWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpOworICAgIAorICAgIHN0
YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICAKKyAg
ICBERUNMQVJFX0lORk87CisgICAgCisgICAgLy8gRm9yIHRoZSBwdXJwb3NlIG9mIGRlY2lkaW5n
IHdoZXRoZXIgb3Igbm90IHRvIHdhdGNoIHRoaXMgdmFyaWFibGUsIHlvdSBvbmx5IG5lZWQKKyAg
ICAvLyB0byBpbnNwZWN0IGluZmVycmVkVmFsdWUoKS4gSWYgdGhpcyByZXR1cm5zIHNvbWV0aGlu
ZyBvdGhlciB0aGFuIHRoZSBlbXB0eQorICAgIC8vIHZhbHVlLCB0aGVuIGl0IG1lYW5zIHRoYXQg
YXQgYWxsIGZ1dHVyZSBzYWZlcG9pbnRzLCB0aGlzIHdhdGNocG9pbnQgc2V0IHdpbGwgYmUKKyAg
ICAvLyBpbiBvbmUgb2YgdGhlc2Ugc3RhdGVzOgorICAgIC8vCisgICAgLy8gICAgSXNXYXRjaGVk
OiBpbiB0aGlzIGNhc2UsIHRoZSB2YXJpYWJsZSdzIHZhbHVlIG11c3Qgc3RpbGwgYmUgdGhlCisg
ICAgLy8gICAgICAgIGluZmVycmVkVmFsdWUuCisgICAgLy8KKyAgICAvLyAgICBJc0ludmFsaWRh
dGVkOiBpbiB0aGlzIGNhc2UgdGhlIHZhcmlhYmxlJ3MgdmFsdWUgbWF5IGJlIGFueXRoaW5nIGJ1
dCB5b3UnbGwKKyAgICAvLyAgICAgICAgZWl0aGVyIG5vdGljZSB0aGF0IGl0J3MgaW52YWxpZGF0
ZWQgYW5kIG5vdCBpbnN0YWxsIHRoZSB3YXRjaHBvaW50LCBvcgorICAgIC8vICAgICAgICB5b3Ug
d2lsbCBoYXZlIGJlZW4gbm90aWZpZWQgdGhhdCB0aGUgd2F0Y2hwb2ludCB3YXMgZmlyZWQuCisg
ICAgSlNWYWx1ZSBpbmZlcnJlZFZhbHVlKCkgeyByZXR1cm4gbV92YWx1ZS5nZXQoKTsgfQorCisg
ICAgLy8gRm9yd2FyZHMgc29tZSBXYXRjaHBvaW50U2V0IG1ldGhvZHMuCisgICAgV2F0Y2hwb2lu
dFN0YXRlIHN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9zZXQuc3RhdGUoKTsgfQorICAgIGJvb2wg
aXNTdGlsbFZhbGlkKCkgY29uc3QgeyByZXR1cm4gbV9zZXQuaXNTdGlsbFZhbGlkKCk7IH0KKyAg
ICBib29sIGhhc0JlZW5JbnZhbGlkYXRlZCgpIGNvbnN0IHsgcmV0dXJuIG1fc2V0Lmhhc0JlZW5J
bnZhbGlkYXRlZCgpOyB9CisgICAgdm9pZCBhZGQoV2F0Y2hwb2ludCogd2F0Y2hwb2ludCkgeyBt
X3NldC5hZGQod2F0Y2hwb2ludCk7IH0KKyAgICAKKyAgICB2b2lkIG5vdGlmeVdyaXRlKFZNJiB2
bSwgSlNWYWx1ZSB2YWx1ZSwgY29uc3QgRmlyZURldGFpbCYgZGV0YWlsKQorICAgIHsKKyAgICAg
ICAgaWYgKExJS0VMWShtX3NldC5zdGF0ZU9uTWFpblRocmVhZCgpID09IElzSW52YWxpZGF0ZWQp
KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBub3RpZnlXcml0ZVNsb3codm0sIHZhbHVl
LCBkZXRhaWwpOworICAgIH0KKyAgICAKKyAgICB2b2lkIG5vdGlmeVdyaXRlKFZNJiB2bSwgSlNW
YWx1ZSB2YWx1ZSwgY29uc3QgY2hhciogcmVhc29uKQorICAgIHsKKyAgICAgICAgaWYgKExJS0VM
WShtX3NldC5zdGF0ZU9uTWFpblRocmVhZCgpID09IElzSW52YWxpZGF0ZWQpKQorICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICBub3RpZnlXcml0ZVNsb3codm0sIHZhbHVlLCByZWFzb24pOwor
ICAgIH0KKyAgICAKKyAgICB2b2lkIGludmFsaWRhdGUoY29uc3QgRmlyZURldGFpbCYgZGV0YWls
KQorICAgIHsKKyAgICAgICAgbV92YWx1ZS5jbGVhcigpOworICAgICAgICBtX3NldC5pbnZhbGlk
YXRlKGRldGFpbCk7CisgICAgfQorICAgIAorcHJvdGVjdGVkOgorICAgIHN0YXRpYyBjb25zdCB1
bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IFN0cnVjdHVyZUlzSW1tb3J0YWwgfCBCYXNlOjpTdHJ1
Y3R1cmVGbGFnczsKKyAgICAKK3ByaXZhdGU6CisgICAgSW5mZXJyZWRWYWx1ZShWTSYpOworICAg
IH5JbmZlcnJlZFZhbHVlKCk7CisgICAgCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBub3Rp
ZnlXcml0ZVNsb3coVk0mLCBKU1ZhbHVlLCBjb25zdCBGaXJlRGV0YWlsJik7CisgICAgSlNfRVhQ
T1JUX1BSSVZBVEUgdm9pZCBub3RpZnlXcml0ZVNsb3coVk0mLCBKU1ZhbHVlLCBjb25zdCBjaGFy
KiByZWFzb24pOworICAgIAorICAgIC8vIFdlIGNvdWxkIGhhdmUgdXNlZCBXZWFrPD4uIEJ1dCB3
ZSB3YW50IGFyYml0cmFyeSBKU1ZhbHVlcywgbm90IGp1c3QgY2VsbHMuIEl0J3MgYWxzbyBzb21l
d2hhdAorICAgIC8vIGNvbnZlbmllbnQgdG8gaGF2ZSBlYWdlciBub3RpZmljYXRpb24gb2YgZGVh
dGguCisgICAgY2xhc3MgVmFsdWVDbGVhbnVwIDogcHVibGljIFVuY29uZGl0aW9uYWxGaW5hbGl6
ZXIgeworICAgIHB1YmxpYzoKKyAgICAgICAgVmFsdWVDbGVhbnVwKEluZmVycmVkVmFsdWUqKTsK
KyAgICAgICAgdmlydHVhbCB+VmFsdWVDbGVhbnVwKCk7CisgICAgICAgIAorICAgIHByb3RlY3Rl
ZDoKKyAgICAgICAgdm9pZCBmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSgpIG92ZXJyaWRlOworICAg
ICAgICAKKyAgICBwcml2YXRlOgorICAgICAgICBJbmZlcnJlZFZhbHVlKiBtX293bmVyOworICAg
IH07CisgICAgCisgICAgZnJpZW5kIGNsYXNzIFZhbHVlQ2xlYW51cDsKKyAgICAKKyAgICBJbmxp
bmVXYXRjaHBvaW50U2V0IG1fc2V0OworICAgIFdyaXRlQmFycmllcjxVbmtub3duPiBtX3ZhbHVl
OworICAgIHN0ZDo6dW5pcXVlX3B0cjxWYWx1ZUNsZWFudXA+IG1fY2xlYW51cDsKK307CisKKy8v
IEZJWE1FOiBXZSBjb3VsZCBoYXZlIGFuIElubGluZUluZmVycmVkVmFsdWUsIHdoaWNoIG9ubHkg
YWxsb2NhdGVzIHRoZSBJbmZlcnJlZFZhbHVlIG9iamVjdCB3aGVuCisvLyBhIG5vdGlmeVdyaXRl
KCkgdHJhbnNpdGlvbnMgdXMgdG93YXJkcyB3YXRjaGluZywgYW5kIHRoZW4gY2xlYXJzIHRoZSBy
ZWZlcmVuY2UgKGFsbG93aW5nIHRoZSBvYmplY3QKKy8vIHRvIGRpZSkgd2hlbiB3ZSBnZXQgaW52
YWxpZGF0ZWQuCisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSW5mZXJyZWRWYWx1
ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRW52aXJvbm1lbnRS
ZWNvcmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pT
RW52aXJvbm1lbnRSZWNvcmQuY3BwCShyZXZpc2lvbiAxODI0OTgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0Vudmlyb25tZW50UmVjb3JkLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNDAsNyArNDAsNyBAQCB2b2lkIEpTRW52aXJvbm1lbnRSZWNvcmQ6OnZpc2l0Q2hpbGRyZW4o
CiAgICAgSlNFbnZpcm9ubWVudFJlY29yZCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0Vudmlyb25t
ZW50UmVjb3JkKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2Jq
ZWN0LCBpbmZvKCkpOwogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRv
cik7Ci0gICAgdmlzaXRvci5hcHBlbmRWYWx1ZXModGhpc09iamVjdC0+dmFyaWFibGVzKCksIHRo
aXNPYmplY3QtPm1fc3ltYm9sVGFibGUtPnNjb3BlU2l6ZSgpKTsKKyAgICB2aXNpdG9yLmFwcGVu
ZFZhbHVlcyh0aGlzT2JqZWN0LT52YXJpYWJsZXMoKSwgdGhpc09iamVjdC0+c3ltYm9sVGFibGUo
KS0+c2NvcGVTaXplKCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRW52aXJvbm1lbnRSZWNvcmQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Vudmlyb25tZW50UmVjb3JkLmgJKHJl
dmlzaW9uIDE4MjQ5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRW52aXJv
bm1lbnRSZWNvcmQuaAkod29ya2luZyBjb3B5KQpAQCAtNTMsNyArNTMsNyBAQCBwdWJsaWM6CiAg
ICAgCiAgICAgYm9vbCBpc1ZhbGlkKFNjb3BlT2Zmc2V0IG9mZnNldCkKICAgICB7Ci0gICAgICAg
IHJldHVybiAhIW9mZnNldCAmJiBvZmZzZXQub2Zmc2V0KCkgPCBtX3N5bWJvbFRhYmxlLT5zY29w
ZVNpemUoKTsKKyAgICAgICAgcmV0dXJuICEhb2Zmc2V0ICYmIG9mZnNldC5vZmZzZXQoKSA8IHN5
bWJvbFRhYmxlKCktPnNjb3BlU2l6ZSgpOwogICAgIH0KICAgICAKICAgICBXcml0ZUJhcnJpZXJC
YXNlPFVua25vd24+JiB2YXJpYWJsZUF0KFNjb3BlT2Zmc2V0IG9mZnNldCkKQEAgLTEwNCw3ICsx
MDQsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYgdm0pCiAgICAg
ewogICAgICAgICBmaW5pc2hDcmVhdGlvblVuaW5pdGlhbGl6ZWQodm0pOwotICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBtX3N5bWJvbFRhYmxlLT5zY29wZVNpemUoKTsgaS0tOykgeworICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBzeW1ib2xUYWJsZSgpLT5zY29wZVNpemUoKTsgaS0tOykgewog
ICAgICAgICAgICAgLy8gRmlsbGluZyB0aGlzIHdpdGggdW5kZWZpbmVkIGlzIHVzZWZ1bCBiZWNh
dXNlIHRoYXQncyB3aGF0IHZhcmlhYmxlcyBzdGFydCBvdXQgYXMuCiAgICAgICAgICAgICB2YXJp
YWJsZUF0KFNjb3BlT2Zmc2V0KGkpKS5zZXRVbmRlZmluZWQoKTsKICAgICAgICAgfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAJKHJldmlzaW9u
IDE4MjQ5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC01OSw2ICs1OSwxMyBAQCBib29sIEpTRnVuY3Rpb246OmlzSG9z
dEZ1bmN0aW9uTm9uSW5saW5lCiAgICAgcmV0dXJuIGlzSG9zdEZ1bmN0aW9uKCk7CiB9CiAKK0pT
RnVuY3Rpb24qIEpTRnVuY3Rpb246OmNyZWF0ZShWTSYgdm0sIEZ1bmN0aW9uRXhlY3V0YWJsZSog
ZXhlY3V0YWJsZSwgSlNTY29wZSogc2NvcGUpCit7CisgICAgSlNGdW5jdGlvbiogcmVzdWx0ID0g
Y3JlYXRlSW1wbCh2bSwgZXhlY3V0YWJsZSwgc2NvcGUpOworICAgIGV4ZWN1dGFibGUtPnNpbmds
ZXRvbkZ1bmN0aW9uKCktPm5vdGlmeVdyaXRlKHZtLCByZXN1bHQsICJBbGxvY2F0aW5nIGEgZnVu
Y3Rpb24iKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiBKU0Z1bmN0aW9uKiBKU0Z1bmN0aW9u
OjpjcmVhdGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBpbnQgbGVuZ3Ro
LCBjb25zdCBTdHJpbmcmIG5hbWUsIE5hdGl2ZUZ1bmN0aW9uIG5hdGl2ZUZ1bmN0aW9uLCBJbnRy
aW5zaWMgaW50cmluc2ljLCBOYXRpdmVGdW5jdGlvbiBuYXRpdmVDb25zdHJ1Y3RvcikKIHsKICAg
ICBOYXRpdmVFeGVjdXRhYmxlKiBleGVjdXRhYmxlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaAkocmV2aXNpb24gMTgyNDk4KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNCw2
ICsyNCw3IEBACiAjaWZuZGVmIEpTRnVuY3Rpb25faAogI2RlZmluZSBKU0Z1bmN0aW9uX2gKIAor
I2luY2x1ZGUgIkV4ZWN1dGFibGUuaCIKICNpbmNsdWRlICJJbnRlcm5hbEZ1bmN0aW9uLmgiCiAj
aW5jbHVkZSAiSlNDYWxsZWUuaCIKICNpbmNsdWRlICJKU1Njb3BlLmgiCkBAIC01OSwxNSArNjAs
MTUgQEAgcHVibGljOgogICAgIHR5cGVkZWYgSlNDYWxsZWUgQmFzZTsKIAogICAgIEpTX0VYUE9S
VF9QUklWQVRFIHN0YXRpYyBKU0Z1bmN0aW9uKiBjcmVhdGUoVk0mLCBKU0dsb2JhbE9iamVjdCos
IGludCBsZW5ndGgsIGNvbnN0IFN0cmluZyYgbmFtZSwgTmF0aXZlRnVuY3Rpb24sIEludHJpbnNp
YyA9IE5vSW50cmluc2ljLCBOYXRpdmVGdW5jdGlvbiBuYXRpdmVDb25zdHJ1Y3RvciA9IGNhbGxI
b3N0RnVuY3Rpb25Bc0NvbnN0cnVjdG9yKTsKLQotICAgIHN0YXRpYyBKU0Z1bmN0aW9uKiBjcmVh
dGUoVk0mIHZtLCBGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUsIEpTU2NvcGUqIHNjb3Bl
KQorICAgIAorICAgIHN0YXRpYyBKU0Z1bmN0aW9uKiBjcmVhdGVXaXRoSW52YWxpZGF0ZWRSZWFs
bG9jYXRpb25XYXRjaHBvaW50KFZNJiB2bSwgRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxl
LCBKU1Njb3BlKiBzY29wZSkKICAgICB7Ci0gICAgICAgIEpTRnVuY3Rpb24qIGZ1bmN0aW9uID0g
bmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SlNGdW5jdGlvbj4odm0uaGVhcCkpIEpTRnVuY3Rp
b24odm0sIGV4ZWN1dGFibGUsIHNjb3BlKTsKLSAgICAgICAgQVNTRVJUKGZ1bmN0aW9uLT5zdHJ1
Y3R1cmUoKS0+Z2xvYmFsT2JqZWN0KCkpOwotICAgICAgICBmdW5jdGlvbi0+ZmluaXNoQ3JlYXRp
b24odm0pOwotICAgICAgICByZXR1cm4gZnVuY3Rpb247CisgICAgICAgIEFTU0VSVChleGVjdXRh
YmxlLT5zaW5nbGV0b25GdW5jdGlvbigpLT5oYXNCZWVuSW52YWxpZGF0ZWQoKSk7CisgICAgICAg
IHJldHVybiBjcmVhdGVJbXBsKHZtLCBleGVjdXRhYmxlLCBzY29wZSk7CiAgICAgfQogCisgICAg
c3RhdGljIEpTRnVuY3Rpb24qIGNyZWF0ZShWTSYsIEZ1bmN0aW9uRXhlY3V0YWJsZSosIEpTU2Nv
cGUqKTsKKwogICAgIHN0YXRpYyBKU0Z1bmN0aW9uKiBjcmVhdGVCdWlsdGluRnVuY3Rpb24oVk0m
LCBGdW5jdGlvbkV4ZWN1dGFibGUqLCBKU0dsb2JhbE9iamVjdCopOwogCiAgICAgc3RhdGljIHZv
aWQgZGVzdHJveShKU0NlbGwqKTsKQEAgLTE0OSw2ICsxNTAsMTQgQEAgcHJvdGVjdGVkOgogICAg
IHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKIAogcHJp
dmF0ZToKKyAgICBzdGF0aWMgSlNGdW5jdGlvbiogY3JlYXRlSW1wbChWTSYgdm0sIEZ1bmN0aW9u
RXhlY3V0YWJsZSogZXhlY3V0YWJsZSwgSlNTY29wZSogc2NvcGUpCisgICAgeworICAgICAgICBK
U0Z1bmN0aW9uKiBmdW5jdGlvbiA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTRnVuY3Rp
b24+KHZtLmhlYXApKSBKU0Z1bmN0aW9uKHZtLCBleGVjdXRhYmxlLCBzY29wZSk7CisgICAgICAg
IEFTU0VSVChmdW5jdGlvbi0+c3RydWN0dXJlKCktPmdsb2JhbE9iamVjdCgpKTsKKyAgICAgICAg
ZnVuY3Rpb24tPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICAgICAgcmV0dXJuIGZ1bmN0aW9uOwor
ICAgIH0KKyAgICAKICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogCiAg
ICAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIGFyZ3VtZW50c0dldHRlcihFeGVjU3RhdGUqLCBKU09i
amVjdCosIEVuY29kZWRKU1ZhbHVlLCBQcm9wZXJ0eU5hbWUpOwpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkocmV2aXNpb24gMTgy
NDk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xMjQsNyArMTI0LDcgQEAKICNpbmNsdWRlICJTeW1ib2wuaCIK
ICNpbmNsdWRlICJTeW1ib2xDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIlN5bWJvbFByb3RvdHlw
ZS5oIgotI2luY2x1ZGUgIlZhcmlhYmxlV2F0Y2hwb2ludFNldElubGluZXMuaCIKKyNpbmNsdWRl
ICJWYXJpYWJsZVdyaXRlRmlyZURldGFpbC5oIgogI2luY2x1ZGUgIldlYWtHQ01hcElubGluZXMu
aCIKICNpbmNsdWRlICJXZWFrTWFwQ29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJXZWFrTWFwUHJv
dG90eXBlLmgiCkBAIC00ODksNyArNDg5LDcgQEAgSlNHbG9iYWxPYmplY3Q6Ok5ld0dsb2JhbFZh
ciBKU0dsb2JhbE9iagogICAgIFNjb3BlT2Zmc2V0IG9mZnNldCA9IHN5bWJvbFRhYmxlKCktPnRh
a2VOZXh0U2NvcGVPZmZzZXQobG9ja2VyKTsKICAgICBTeW1ib2xUYWJsZUVudHJ5IG5ld0VudHJ5
KFZhck9mZnNldChvZmZzZXQpLCAoY29uc3RhbnRNb2RlID09IElzQ29uc3RhbnQpID8gUmVhZE9u
bHkgOiAwKTsKICAgICBpZiAoY29uc3RhbnRNb2RlID09IElzVmFyaWFibGUpCi0gICAgICAgIG5l
d0VudHJ5LnByZXBhcmVUb1dhdGNoKHN5bWJvbFRhYmxlKCkpOworICAgICAgICBuZXdFbnRyeS5w
cmVwYXJlVG9XYXRjaCgpOwogICAgIGVsc2UKICAgICAgICAgbmV3RW50cnkuZGlzYWJsZVdhdGNo
aW5nKCk7CiAgICAgc3ltYm9sVGFibGUoKS0+YWRkKGxvY2tlciwgaWRlbnQuaW1wbCgpLCBuZXdF
bnRyeSk7CkBAIC01MTAsNyArNTEwLDcgQEAgdm9pZCBKU0dsb2JhbE9iamVjdDo6YWRkRnVuY3Rp
b24oRXhlY1N0YQogICAgIE5ld0dsb2JhbFZhciB2YXIgPSBhZGRHbG9iYWxWYXIocHJvcGVydHlO
YW1lLCBJc1ZhcmlhYmxlKTsKICAgICB2YXJpYWJsZUF0KHZhci5vZmZzZXQpLnNldChleGVjLT52
bSgpLCB0aGlzLCB2YWx1ZSk7CiAgICAgaWYgKHZhci5zZXQpCi0gICAgICAgIHZhci5zZXQtPm5v
dGlmeVdyaXRlKHZtLCB2YWx1ZSwgVmFyaWFibGVXcml0ZUZpcmVEZXRhaWwodGhpcywgcHJvcGVy
dHlOYW1lKSk7CisgICAgICAgIHZhci5zZXQtPnRvdWNoKFZhcmlhYmxlV3JpdGVGaXJlRGV0YWls
KHRoaXMsIHByb3BlcnR5TmFtZSkpOwogfQogCiBzdGF0aWMgaW5saW5lIEpTT2JqZWN0KiBsYXN0
SW5Qcm90b3R5cGVDaGFpbihKU09iamVjdCogb2JqZWN0KQpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCShyZXZpc2lvbiAxODI0OTgpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0zMzQsNyArMzM0LDcgQEAgcHJvdGVjdGVkOgogCiAgICAgc3RydWN0IE5ld0ds
b2JhbFZhciB7CiAgICAgICAgIFNjb3BlT2Zmc2V0IG9mZnNldDsKLSAgICAgICAgVmFyaWFibGVX
YXRjaHBvaW50U2V0KiBzZXQ7CisgICAgICAgIFdhdGNocG9pbnRTZXQqIHNldDsKICAgICB9Owog
ICAgIE5ld0dsb2JhbFZhciBhZGRHbG9iYWxWYXIoY29uc3QgSWRlbnRpZmllciYsIENvbnN0YW50
TW9kZSk7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTGV4aWNhbEVu
dmlyb25tZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0xleGljYWxFbnZpcm9ubWVudC5jcHAJKHJldmlzaW9uIDE4MjQ5OCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTGV4aWNhbEVudmlyb25tZW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNzcsNiArNzcsNyBAQCBpbmxpbmUgYm9vbCBKU0xleGljYWxFbnZpcm9ubWVudDo6
c3ltYm9sCiAgICAgQVNTRVJUKCFIZWFwOjpoZWFwKHZhbHVlKSB8fCBIZWFwOjpoZWFwKHZhbHVl
KSA9PSBIZWFwOjpoZWFwKHRoaXMpKTsKICAgICAKICAgICBXcml0ZUJhcnJpZXJCYXNlPFVua25v
d24+KiByZWc7CisgICAgV2F0Y2hwb2ludFNldCogc2V0OwogICAgIHsKICAgICAgICAgR0NTYWZl
Q29uY3VycmVudEpJVExvY2tlciBsb2NrZXIoc3ltYm9sVGFibGUoKS0+bV9sb2NrLCBleGVjLT52
bSgpLmhlYXApOwogICAgICAgICBTeW1ib2xUYWJsZTo6TWFwOjppdGVyYXRvciBpdGVyID0gc3lt
Ym9sVGFibGUoKS0+ZmluZChsb2NrZXIsIHByb3BlcnR5TmFtZS51aWQoKSk7CkBAIC05MiwxMSAr
OTMsMTIgQEAgaW5saW5lIGJvb2wgSlNMZXhpY2FsRW52aXJvbm1lbnQ6OnN5bWJvbAogICAgICAg
ICAvLyBEZWZlbmQgYWdhaW5zdCB0aGUgaW5zcGVjdG9yIGFza2luZyBmb3IgYSB2YXIgYWZ0ZXIg
aXQgaGFzIGJlZW4gb3B0aW1pemVkIG91dC4KICAgICAgICAgaWYgKCFpc1ZhbGlkKG9mZnNldCkp
CiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgIGlmIChWYXJpYWJsZVdhdGNocG9p
bnRTZXQqIHNldCA9IGl0ZXItPnZhbHVlLndhdGNocG9pbnRTZXQoKSkKLSAgICAgICAgICAgIHNl
dC0+aW52YWxpZGF0ZShWYXJpYWJsZVdyaXRlRmlyZURldGFpbCh0aGlzLCBwcm9wZXJ0eU5hbWUp
KTsgLy8gRG9uJ3QgbWVzcyBhcm91bmQgLSBpZiB3ZSBoYWQgZm91bmQgdGhpcyBzdGF0aWNhbGx5
LCB3ZSB3b3VsZCBoYXZlIGludmFsaWRhdGVkIGl0LgorICAgICAgICBzZXQgPSBpdGVyLT52YWx1
ZS53YXRjaHBvaW50U2V0KCk7CiAgICAgICAgIHJlZyA9ICZ2YXJpYWJsZUF0KG9mZnNldCk7CiAg
ICAgfQogICAgIHJlZy0+c2V0KHZtLCB0aGlzLCB2YWx1ZSk7CisgICAgaWYgKHNldCkKKyAgICAg
ICAgc2V0LT5pbnZhbGlkYXRlKFZhcmlhYmxlV3JpdGVGaXJlRGV0YWlsKHRoaXMsIHByb3BlcnR5
TmFtZSkpOyAvLyBEb24ndCBtZXNzIGFyb3VuZCAtIGlmIHdlIGhhZCBmb3VuZCB0aGlzIHN0YXRp
Y2FsbHksIHdlIHdvdWxkIGhhdmUgaW52YWxpZGF0ZWQgaXQuCiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2NvcGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Njb3BlLmgJKHJldmlzaW9u
IDE4MjQ5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2NvcGUuaAkod29y
a2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNyBAQAogbmFtZXNwYWNlIEpTQyB7CiAKIGNsYXNzIFNj
b3BlQ2hhaW5JdGVyYXRvcjsKLWNsYXNzIFZhcmlhYmxlV2F0Y2hwb2ludFNldDsKK2NsYXNzIFdh
dGNocG9pbnRTZXQ7CiAKIGVudW0gUmVzb2x2ZU1vZGUgewogICAgIFRocm93SWZOb3RGb3VuZCwK
QEAgLTEwMiw3ICsxMDIsNyBAQCBpbmxpbmUgYm9vbCBuZWVkc1ZhckluamVjdGlvbkNoZWNrcyhS
ZXNvCiB9CiAKIHN0cnVjdCBSZXNvbHZlT3AgewotICAgIFJlc29sdmVPcChSZXNvbHZlVHlwZSB0
eXBlLCBzaXplX3QgZGVwdGgsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0xleGljYWxFbnZpcm9u
bWVudCogbGV4aWNhbEVudmlyb25tZW50LCBWYXJpYWJsZVdhdGNocG9pbnRTZXQqIHdhdGNocG9p
bnRTZXQsIHVpbnRwdHJfdCBvcGVyYW5kKQorICAgIFJlc29sdmVPcChSZXNvbHZlVHlwZSB0eXBl
LCBzaXplX3QgZGVwdGgsIFN0cnVjdHVyZSogc3RydWN0dXJlLCBKU0xleGljYWxFbnZpcm9ubWVu
dCogbGV4aWNhbEVudmlyb25tZW50LCBXYXRjaHBvaW50U2V0KiB3YXRjaHBvaW50U2V0LCB1aW50
cHRyX3Qgb3BlcmFuZCkKICAgICAgICAgOiB0eXBlKHR5cGUpCiAgICAgICAgICwgZGVwdGgoZGVw
dGgpCiAgICAgICAgICwgc3RydWN0dXJlKHN0cnVjdHVyZSkKQEAgLTExNiw3ICsxMTYsNyBAQCBz
dHJ1Y3QgUmVzb2x2ZU9wIHsKICAgICBzaXplX3QgZGVwdGg7CiAgICAgU3RydWN0dXJlKiBzdHJ1
Y3R1cmU7CiAgICAgSlNMZXhpY2FsRW52aXJvbm1lbnQqIGxleGljYWxFbnZpcm9ubWVudDsKLSAg
ICBWYXJpYWJsZVdhdGNocG9pbnRTZXQqIHdhdGNocG9pbnRTZXQ7CisgICAgV2F0Y2hwb2ludFNl
dCogd2F0Y2hwb2ludFNldDsKICAgICB1aW50cHRyX3Qgb3BlcmFuZDsKIH07CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuaAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZh
cmlhYmxlT2JqZWN0LmgJKHJldmlzaW9uIDE4MjQ5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAt
ODYsNyArODYsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYgdm0p
CiAgICAgewogICAgICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7Ci0gICAgICAgIG1fc3lt
Ym9sVGFibGUuc2V0KHZtLCB0aGlzLCBTeW1ib2xUYWJsZTo6Y3JlYXRlKHZtKSk7CisgICAgICAg
IHNldFN5bWJvbFRhYmxlKHZtLCBTeW1ib2xUYWJsZTo6Y3JlYXRlKHZtKSk7CiAgICAgfQogICAg
IAogICAgIFNlZ21lbnRlZFZlY3RvcjxXcml0ZUJhcnJpZXI8VW5rbm93bj4sIDE2PiBtX3Zhcmlh
YmxlczsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVP
YmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5
bWJvbFRhYmxlT2JqZWN0LmgJKHJldmlzaW9uIDE4MjQ5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzIs
NyArMzIsNyBAQAogI2luY2x1ZGUgIkpTU2NvcGUuaCIKICNpbmNsdWRlICJQcm9wZXJ0eURlc2Ny
aXB0b3IuaCIKICNpbmNsdWRlICJTeW1ib2xUYWJsZS5oIgotI2luY2x1ZGUgIlZhcmlhYmxlV2F0
Y2hwb2ludFNldElubGluZXMuaCIKKyNpbmNsdWRlICJWYXJpYWJsZVdyaXRlRmlyZURldGFpbC5o
IgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtNjEsMTEgKzYxLDE5IEBAIHByb3RlY3RlZDoKICAg
ICAgICAgOiBCYXNlKHZtLCBzdHJ1Y3R1cmUsIHNjb3BlKQogICAgIHsKICAgICAgICAgQVNTRVJU
KHN5bWJvbFRhYmxlKTsKKyAgICAgICAgc2V0U3ltYm9sVGFibGUodm0sIHN5bWJvbFRhYmxlKTsK
KyAgICB9CisgICAgCisgICAgdm9pZCBzZXRTeW1ib2xUYWJsZShWTSYgdm0sIFN5bWJvbFRhYmxl
KiBzeW1ib2xUYWJsZSkKKyAgICB7CisgICAgICAgIEFTU0VSVCghbV9zeW1ib2xUYWJsZSk7Cisg
ICAgICAgIHN5bWJvbFRhYmxlLT5zaW5nbGV0b25TY29wZSgpLT5ub3RpZnlXcml0ZSh2bSwgdGhp
cywgIkFsbG9jYXRlZCBhIHNjb3BlIik7CiAgICAgICAgIG1fc3ltYm9sVGFibGUuc2V0KHZtLCB0
aGlzLCBzeW1ib2xUYWJsZSk7CiAgICAgfQotCisgICAgCiAgICAgc3RhdGljIHZvaWQgdmlzaXRD
aGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwotCisgICAgCitwcml2YXRlOgogICAgIFdy
aXRlQmFycmllcjxTeW1ib2xUYWJsZT4gbV9zeW1ib2xUYWJsZTsKIH07CiAKQEAgLTEyNiw2ICsx
MzQsNyBAQCBpbmxpbmUgYm9vbCBzeW1ib2xUYWJsZVB1dCgKICAgICBBU1NFUlQoIUhlYXA6Omhl
YXAodmFsdWUpIHx8IEhlYXA6OmhlYXAodmFsdWUpID09IEhlYXA6OmhlYXAob2JqZWN0KSk7CiAg
ICAgCiAgICAgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiogcmVnOworICAgIFdhdGNocG9pbnRT
ZXQqIHNldDsKICAgICB7CiAgICAgICAgIFN5bWJvbFRhYmxlJiBzeW1ib2xUYWJsZSA9ICpvYmpl
Y3QtPnN5bWJvbFRhYmxlKCk7CiAgICAgICAgIC8vIEZJWE1FOiBUaGlzIGlzIHZlcnkgc3VzcGlj
aW91cy4gV2Ugc2hvdWxkbid0IG5lZWQgYSBHQy1zYWZlIGxvY2sgaGVyZS4KQEAgLTE0MiwxNyAr
MTUxLDE1IEBAIGlubGluZSBib29sIHN5bWJvbFRhYmxlUHV0KAogICAgICAgICAgICAgICAgIHRo
cm93VHlwZUVycm9yKGV4ZWMsIFN0cmljdE1vZGVSZWFkb25seVByb3BlcnR5V3JpdGVFcnJvcik7
CiAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgfQotICAgICAgICBpZiAoVmFyaWFi
bGVXYXRjaHBvaW50U2V0KiBzZXQgPSBpdGVyLT52YWx1ZS53YXRjaHBvaW50U2V0KCkpIHsKLSAg
ICAgICAgICAgIC8vIEZJWE1FOiBJdCdzIHN0cmFuZ2UgdGhhdCB3ZSdyZSBkb2luZyB0aGlzIHdo
aWxlIGhvbGRpbmcgdGhlIHN5bWJvbCB0YWJsZSdzIGxvY2suCi0gICAgICAgICAgICAvLyBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTM0NjAxCi0gICAgICAgICAgICBz
ZXQtPm5vdGlmeVdyaXRlKHZtLCB2YWx1ZSwgb2JqZWN0LCBwcm9wZXJ0eU5hbWUpOwotICAgICAg
ICB9CisgICAgICAgIHNldCA9IGl0ZXItPnZhbHVlLndhdGNocG9pbnRTZXQoKTsKICAgICAgICAg
cmVnID0gJm9iamVjdC0+dmFyaWFibGVBdChmYXN0RW50cnkuc2NvcGVPZmZzZXQoKSk7CiAgICAg
fQogICAgIC8vIEknZCBwcmVmZXIgd2Ugbm90IGhvbGQgbG9jayB3aGlsZSBleGVjdXRpbmcgYmFy
cmllcnMsIHNpbmNlIEkgcHJlZmVyIHRvIHJlc2VydmUKICAgICAvLyB0aGUgcmlnaHQgZm9yIGJh
cnJpZXJzIHRvIGJlIGFibGUgdG8gdHJpZ2dlciBHQy4gQW5kIEkgZG9uJ3Qgd2FudCB0byBob2xk
IFZNCiAgICAgLy8gbG9ja3Mgd2hpbGUgR0MnaW5nLgogICAgIHJlZy0+c2V0KHZtLCBvYmplY3Qs
IHZhbHVlKTsKKyAgICBpZiAoc2V0KQorICAgICAgICBWYXJpYWJsZVdyaXRlRmlyZURldGFpbDo6
dG91Y2goc2V0LCBvYmplY3QsIHByb3BlcnR5TmFtZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAK
QEAgLTE2NCw2ICsxNzEsNyBAQCBpbmxpbmUgYm9vbCBzeW1ib2xUYWJsZVB1dFdpdGhBdHRyaWJ1
dGVzCiAgICAgQVNTRVJUKCFIZWFwOjpoZWFwKHZhbHVlKSB8fCBIZWFwOjpoZWFwKHZhbHVlKSA9
PSBIZWFwOjpoZWFwKG9iamVjdCkpOwogCiAgICAgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiog
cmVnOworICAgIFdhdGNocG9pbnRTZXQqIHNldDsKICAgICB7CiAgICAgICAgIFN5bWJvbFRhYmxl
JiBzeW1ib2xUYWJsZSA9ICpvYmplY3QtPnN5bWJvbFRhYmxlKCk7CiAgICAgICAgIENvbmN1cnJl
bnRKSVRMb2NrZXIgbG9ja2VyKHN5bWJvbFRhYmxlLm1fbG9jayk7CkBAIC0xNzIsMTIgKzE4MCwx
MyBAQCBpbmxpbmUgYm9vbCBzeW1ib2xUYWJsZVB1dFdpdGhBdHRyaWJ1dGVzCiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgIFN5bWJvbFRhYmxlRW50cnkmIGVudHJ5ID0gaXRlci0+
dmFsdWU7CiAgICAgICAgIEFTU0VSVCghZW50cnkuaXNOdWxsKCkpOwotICAgICAgICBpZiAoVmFy
aWFibGVXYXRjaHBvaW50U2V0KiBzZXQgPSBlbnRyeS53YXRjaHBvaW50U2V0KCkpCi0gICAgICAg
ICAgICBzZXQtPm5vdGlmeVdyaXRlKHZtLCB2YWx1ZSwgb2JqZWN0LCBwcm9wZXJ0eU5hbWUpOwor
ICAgICAgICBzZXQgPSBlbnRyeS53YXRjaHBvaW50U2V0KCk7CiAgICAgICAgIGVudHJ5LnNldEF0
dHJpYnV0ZXMoYXR0cmlidXRlcyk7CiAgICAgICAgIHJlZyA9ICZvYmplY3QtPnZhcmlhYmxlQXQo
ZW50cnkuc2NvcGVPZmZzZXQoKSk7CiAgICAgfQogICAgIHJlZy0+c2V0KHZtLCBvYmplY3QsIHZh
bHVlKTsKKyAgICBpZiAoc2V0KQorICAgICAgICBWYXJpYWJsZVdyaXRlRmlyZURldGFpbDo6dG91
Y2goc2V0LCBvYmplY3QsIHByb3BlcnR5TmFtZSk7CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1B1dFByb3BlcnR5U2xvdC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1B1dFByb3BlcnR5U2xvdC5o
CShyZXZpc2lvbiAxODI0OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9QdXRQ
cm9wZXJ0eVNsb3QuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAogI2RlZmluZSBQ
dXRQcm9wZXJ0eVNsb3RfaAogCiAjaW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgorI2luY2x1ZGUgIlBy
b3BlcnR5T2Zmc2V0LmgiCiAKICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5oPgogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuY3BwCShyZXZpc2lv
biAxODI0OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDYgQEAKICNpbmNsdWRlICJKU0NJbmxpbmVz
LmgiCiAjaW5jbHVkZSAiU2xvdFZpc2l0b3JJbmxpbmVzLmgiCiAjaW5jbHVkZSAiVHlwZVByb2Zp
bGVyLmgiCi0jaW5jbHVkZSAiVmFyaWFibGVXYXRjaHBvaW50U2V0SW5saW5lcy5oIgogCiBuYW1l
c3BhY2UgSlNDIHsKIApAQCAtNjAsMjEgKzU5LDE0IEBAIHZvaWQgU3ltYm9sVGFibGVFbnRyeTo6
ZnJlZUZhdEVudHJ5U2xvdygKICAgICBkZWxldGUgZmF0RW50cnkoKTsKIH0KIAotSlNWYWx1ZSBT
eW1ib2xUYWJsZUVudHJ5OjppbmZlcnJlZFZhbHVlKCkKLXsKLSAgICBpZiAoIWlzRmF0KCkpCi0g
ICAgICAgIHJldHVybiBKU1ZhbHVlKCk7Ci0gICAgcmV0dXJuIGZhdEVudHJ5KCktPm1fd2F0Y2hw
b2ludHMtPmluZmVycmVkVmFsdWUoKTsKLX0KLQotdm9pZCBTeW1ib2xUYWJsZUVudHJ5OjpwcmVw
YXJlVG9XYXRjaChTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUpCit2b2lkIFN5bWJvbFRhYmxlRW50
cnk6OnByZXBhcmVUb1dhdGNoKCkKIHsKICAgICBpZiAoIWlzV2F0Y2hhYmxlKCkpCiAgICAgICAg
IHJldHVybjsKICAgICBGYXRFbnRyeSogZW50cnkgPSBpbmZsYXRlKCk7CiAgICAgaWYgKGVudHJ5
LT5tX3dhdGNocG9pbnRzKQogICAgICAgICByZXR1cm47Ci0gICAgZW50cnktPm1fd2F0Y2hwb2lu
dHMgPSBhZG9wdFJlZihuZXcgVmFyaWFibGVXYXRjaHBvaW50U2V0KCpzeW1ib2xUYWJsZSkpOwor
ICAgIGVudHJ5LT5tX3dhdGNocG9pbnRzID0gYWRvcHRSZWYobmV3IFdhdGNocG9pbnRTZXQoQ2xl
YXJXYXRjaHBvaW50KSk7CiB9CiAKIHZvaWQgU3ltYm9sVGFibGVFbnRyeTo6YWRkV2F0Y2hwb2lu
dChXYXRjaHBvaW50KiB3YXRjaHBvaW50KQpAQCAtODIsMTUgKzc0LDYgQEAgdm9pZCBTeW1ib2xU
YWJsZUVudHJ5OjphZGRXYXRjaHBvaW50KFdhdAogICAgIGZhdEVudHJ5KCktPm1fd2F0Y2hwb2lu
dHMtPmFkZCh3YXRjaHBvaW50KTsKIH0KIAotdm9pZCBTeW1ib2xUYWJsZUVudHJ5Ojpub3RpZnlX
cml0ZVNsb3coVk0mIHZtLCBKU1ZhbHVlIHZhbHVlLCBjb25zdCBGaXJlRGV0YWlsJiBkZXRhaWwp
Ci17Ci0gICAgVmFyaWFibGVXYXRjaHBvaW50U2V0KiB3YXRjaHBvaW50cyA9IGZhdEVudHJ5KCkt
Pm1fd2F0Y2hwb2ludHMuZ2V0KCk7Ci0gICAgaWYgKCF3YXRjaHBvaW50cykKLSAgICAgICAgcmV0
dXJuOwotICAgIAotICAgIHdhdGNocG9pbnRzLT5ub3RpZnlXcml0ZSh2bSwgdmFsdWUsIGRldGFp
bCk7Ci19Ci0KIFN5bWJvbFRhYmxlRW50cnk6OkZhdEVudHJ5KiBTeW1ib2xUYWJsZUVudHJ5Ojpp
bmZsYXRlU2xvdygpCiB7CiAgICAgRmF0RW50cnkqIGVudHJ5ID0gbmV3IEZhdEVudHJ5KG1fYml0
cyk7CkBAIC0xMDEsNDggKzg0LDI5IEBAIFN5bWJvbFRhYmxlRW50cnk6OkZhdEVudHJ5KiBTeW1i
b2xUYWJsZUUKIFN5bWJvbFRhYmxlOjpTeW1ib2xUYWJsZShWTSYgdm0pCiAgICAgOiBKU0NlbGwo
dm0sIHZtLnN5bWJvbFRhYmxlU3RydWN0dXJlLmdldCgpKQogICAgICwgbV91c2VzTm9uU3RyaWN0
RXZhbChmYWxzZSkKLSAgICAsIG1fZnVuY3Rpb25FbnRlcmVkT25jZShDbGVhcldhdGNocG9pbnQp
CiB7CiB9CiAKIFN5bWJvbFRhYmxlOjp+U3ltYm9sVGFibGUoKSB7IH0KIAordm9pZCBTeW1ib2xU
YWJsZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQoreworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9u
KHZtKTsKKyAgICBtX3NpbmdsZXRvblNjb3BlLnNldCh2bSwgdGhpcywgSW5mZXJyZWRWYWx1ZTo6
Y3JlYXRlKHZtKSk7Cit9CisKIHZvaWQgU3ltYm9sVGFibGU6OnZpc2l0Q2hpbGRyZW4oSlNDZWxs
KiB0aGlzQ2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCiB7CiAgICAgU3ltYm9sVGFibGUqIHRo
aXNTeW1ib2xUYWJsZSA9IGpzQ2FzdDxTeW1ib2xUYWJsZSo+KHRoaXNDZWxsKTsKICAgICAKICAg
ICB2aXNpdG9yLmFwcGVuZCgmdGhpc1N5bWJvbFRhYmxlLT5tX2FyZ3VtZW50cyk7Ci0gICAgCi0g
ICAgaWYgKCF0aGlzU3ltYm9sVGFibGUtPm1fd2F0Y2hwb2ludENsZWFudXApIHsKLSAgICAgICAg
dGhpc1N5bWJvbFRhYmxlLT5tX3dhdGNocG9pbnRDbGVhbnVwID0KLSAgICAgICAgICAgIHN0ZDo6
bWFrZV91bmlxdWU8V2F0Y2hwb2ludENsZWFudXA+KHRoaXNTeW1ib2xUYWJsZSk7Ci0gICAgfQot
ICAgIAotICAgIHZpc2l0b3IuYWRkVW5jb25kaXRpb25hbEZpbmFsaXplcih0aGlzU3ltYm9sVGFi
bGUtPm1fd2F0Y2hwb2ludENsZWFudXAuZ2V0KCkpOworICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlz
U3ltYm9sVGFibGUtPm1fc2luZ2xldG9uU2NvcGUpOwogICAgIAogICAgIC8vIFNhdmUgc29tZSBt
ZW1vcnkuIFRoaXMgaXMgTyhuKSB0byByZWJ1aWxkIGFuZCB3ZSBkbyBzbyBvbiB0aGUgZmx5Lgog
ICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKHRoaXNTeW1ib2xUYWJsZS0+bV9sb2NrKTsK
ICAgICB0aGlzU3ltYm9sVGFibGUtPm1fbG9jYWxUb0VudHJ5ID0gbnVsbHB0cjsKIH0KIAotU3lt
Ym9sVGFibGU6OldhdGNocG9pbnRDbGVhbnVwOjpXYXRjaHBvaW50Q2xlYW51cChTeW1ib2xUYWJs
ZSogc3ltYm9sVGFibGUpCi0gICAgOiBtX3N5bWJvbFRhYmxlKHN5bWJvbFRhYmxlKQotewotfQot
Ci1TeW1ib2xUYWJsZTo6V2F0Y2hwb2ludENsZWFudXA6On5XYXRjaHBvaW50Q2xlYW51cCgpIHsg
fQotCi12b2lkIFN5bWJvbFRhYmxlOjpXYXRjaHBvaW50Q2xlYW51cDo6ZmluYWxpemVVbmNvbmRp
dGlvbmFsbHkoKQotewotICAgIFN0cmluZ0ZpcmVEZXRhaWwgZGV0YWlsKCJTeW1ib2wgdGFibGUg
Y2xlYW4tdXAgZHVyaW5nIEdDIik7Ci0gICAgTWFwOjppdGVyYXRvciBpdGVyID0gbV9zeW1ib2xU
YWJsZS0+bV9tYXAuYmVnaW4oKTsKLSAgICBNYXA6Oml0ZXJhdG9yIGVuZCA9IG1fc3ltYm9sVGFi
bGUtPm1fbWFwLmVuZCgpOwotICAgIGZvciAoOyBpdGVyICE9IGVuZDsgKytpdGVyKSB7Ci0gICAg
ICAgIGlmIChWYXJpYWJsZVdhdGNocG9pbnRTZXQqIHNldCA9IGl0ZXItPnZhbHVlLndhdGNocG9p
bnRTZXQoKSkKLSAgICAgICAgICAgIHNldC0+ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoZGV0YWls
KTsKLSAgICB9Ci19Ci0KIGNvbnN0IFN5bWJvbFRhYmxlOjpMb2NhbFRvRW50cnlWZWMmIFN5bWJv
bFRhYmxlOjpsb2NhbFRvRW50cnkoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYpCiB7CiAgICAg
aWYgKFVOTElLRUxZKCFtX2xvY2FsVG9FbnRyeSkpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuaAkocmV2aXNpb24gMTgyNDk4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAt
MzEsMTcgKzMxLDIwIEBACiAKICNpbmNsdWRlICJDb25jdXJyZW50SklUTG9jay5oIgogI2luY2x1
ZGUgIkNvbnN0YW50TW9kZS5oIgorI2luY2x1ZGUgIkluZmVycmVkVmFsdWUuaCIKICNpbmNsdWRl
ICJKU09iamVjdC5oIgogI2luY2x1ZGUgIlNjb3BlZEFyZ3VtZW50c1RhYmxlLmgiCiAjaW5jbHVk
ZSAiVHlwZUxvY2F0aW9uLmgiCiAjaW5jbHVkZSAiVmFyT2Zmc2V0LmgiCi0jaW5jbHVkZSAiVmFy
aWFibGVXYXRjaHBvaW50U2V0LmgiCisjaW5jbHVkZSAiV2F0Y2hwb2ludC5oIgogI2luY2x1ZGUg
PG1lbW9yeT4KICNpbmNsdWRlIDx3dGYvSGFzaFRyYWl0cy5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0
L1N0cmluZ0ltcGwuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNzIFN5bWJvbFRhYmxlOwor
CiBzdGF0aWMgQUxXQVlTX0lOTElORSBpbnQgbWlzc2luZ1N5bWJvbE1hcmtlcigpIHsgcmV0dXJu
IHN0ZDo6bnVtZXJpY19saW1pdHM8aW50Pjo6bWF4KCk7IH0KIAogLy8gVGhlIGJpdCB0d2lkZGxp
bmcgaW4gdGhpcyBjbGFzcyBhc3N1bWVzIHRoYXQgZXZlcnkgcmVnaXN0ZXIgaW5kZXggaXMgYQpA
QCAtNjMsMTEgKzY2LDExIEBAIHN0YXRpYyBBTFdBWVNfSU5MSU5FIGludCBtaXNzaW5nU3ltYm9s
TWEKIC8vIGNvdW50ZWQgcG9pbnRlciB0byBhIHNoYXJlZCBXYXRjaHBvaW50U2V0LiBUaHVzLCBp
bi1wbGFjZSBlZGl0cyBvZiB0aGUKIC8vIFdhdGNocG9pbnRTZXQgd2lsbCBtYW5pZmVzdCBpbiBh
bGwgY29waWVzLiBIZXJlJ3MgYSBwaWN0dXJlOgogLy8KLS8vIFN5bWJvbFRhYmxlRW50cnkgLS0+
IEZhdEVudHJ5IC0tPiBWYXJpYWJsZVdhdGNocG9pbnRTZXQKKy8vIFN5bWJvbFRhYmxlRW50cnkg
LS0+IEZhdEVudHJ5IC0tPiBXYXRjaHBvaW50U2V0CiAvLwogLy8gSWYgeW91IG1ha2UgYSBjb3B5
IG9mIGEgU3ltYm9sVGFibGVFbnRyeSwgeW91IHdpbGwgaGF2ZToKIC8vCi0vLyBvcmlnaW5hbDog
U3ltYm9sVGFibGVFbnRyeSAtLT4gRmF0RW50cnkgLS0+IFZhcmlhYmxlV2F0Y2hwb2ludFNldAor
Ly8gb3JpZ2luYWw6IFN5bWJvbFRhYmxlRW50cnkgLS0+IEZhdEVudHJ5IC0tPiBXYXRjaHBvaW50
U2V0CiAvLyBjb3B5OiAgICAgU3ltYm9sVGFibGVFbnRyeSAtLT4gRmF0RW50cnkgLS0tLS1eCiAK
IHN0cnVjdCBTeW1ib2xUYWJsZUVudHJ5IHsKQEAgLTI2MCwzMiArMjYzLDQ0IEBAIHB1YmxpYzoK
ICAgICAgICAgcmV0dXJuIGJpdHMoKSAmIERvbnRFbnVtRmxhZzsKICAgICB9CiAgICAgCi0gICAg
SlNWYWx1ZSBpbmZlcnJlZFZhbHVlKCk7Ci0KICAgICB2b2lkIGRpc2FibGVXYXRjaGluZygpCiAg
ICAgeworICAgICAgICBpZiAoV2F0Y2hwb2ludFNldCogc2V0ID0gd2F0Y2hwb2ludFNldCgpKQor
ICAgICAgICAgICAgc2V0LT5pbnZhbGlkYXRlKCJEaXNhYmxpbmcgd2F0Y2hpbmcgaW4gc3ltYm9s
IHRhYmxlIik7CiAgICAgICAgIGlmICh2YXJPZmZzZXQoKS5pc1Njb3BlKCkpCiAgICAgICAgICAg
ICBwYWNrKHZhck9mZnNldCgpLCBmYWxzZSwgaXNSZWFkT25seSgpLCBpc0RvbnRFbnVtKCkpOwog
ICAgIH0KICAgICAKLSAgICB2b2lkIHByZXBhcmVUb1dhdGNoKFN5bWJvbFRhYmxlKik7CisgICAg
dm9pZCBwcmVwYXJlVG9XYXRjaCgpOwogICAgIAogICAgIHZvaWQgYWRkV2F0Y2hwb2ludChXYXRj
aHBvaW50Kik7CiAgICAgCi0gICAgVmFyaWFibGVXYXRjaHBvaW50U2V0KiB3YXRjaHBvaW50U2V0
KCkKKyAgICAvLyBUaGlzIHdhdGNocG9pbnQgc2V0IGlzIGluaXRpYWxpemVkIGNsZWFyLCBhbmQg
Z29lcyB0aHJvdWdoIHRoZSBmb2xsb3dpbmcgc3RhdGUgdHJhbnNpdGlvbnM6CisgICAgLy8gCisg
ICAgLy8gRmlyc3Qgd3JpdGUgdG8gdGhpcyB2YXIsIGluIGFueSBzY29wZSB0aGF0IGhhcyB0aGlz
IHN5bWJvbCB0YWJsZTogQ2xlYXItPklzV2F0Y2hlZC4KKyAgICAvLworICAgIC8vIFNlY29uZCB3
cml0ZSB0byB0aGlzIHZhciwgaW4gYW55IHNjb3BlIHRoYXQgaGFzIHRoaXMgc3ltYm9sIHRhYmxl
OiBJc1dhdGNoZWQtPklzSW52YWxpZGF0ZWQuCisgICAgLy8KKyAgICAvLyBXZSBlbnN1cmUgdGhh
dCB3ZSB0b3VjaCB0aGUgc2V0IChpLmUuIHRyaWdnZXIgaXRzIHN0YXRlIHRyYW5zaXRpb24pIGFm
dGVyIHdlIGRvIHRoZSB3cml0ZS4gVGhpcworICAgIC8vIG1lYW5zIHRoYXQgaWYgeW91J3JlIGlu
IHRoZSBjb21waWxlciB0aHJlYWQsIGFuZCB5b3U6CisgICAgLy8KKyAgICAvLyAxKSBPYnNlcnZl
IHRoYXQgdGhlIHNldCBJc1dhdGNoZWQgYW5kIGNvbW1pdCB0byBhZGRpbmcgeW91ciB3YXRjaHBv
aW50LgorICAgIC8vIDIpIExvYWQgYSB2YWx1ZSBmcm9tIGFueSBzY29wZSB0aGF0IGhhcyB0aGlz
IHdhdGNocG9pbnQgc2V0LgorICAgIC8vCisgICAgLy8gVGhlbiB5b3UgY2FuIGJlIHN1cmUgdGhh
dCB0aGF0IHZhbHVlIGlzIGVpdGhlciBnb2luZyB0byBiZSB0aGUgY29ycmVjdCB2YWx1ZSBmb3Ig
dGhhdCB2YXIgZm9yZXZlciwKKyAgICAvLyBvciB0aGUgd2F0Y2hwb2ludCBzZXQgd2lsbCBpbnZh
bGlkYXRlIGFuZCB5b3UnbGwgZ2V0IGZpcmVkLgorICAgIC8vCisgICAgLy8gSXQncyBwb3NzaWJs
ZSB0byB3cml0ZSBhIHByb2dyYW0gdGhhdCBmaXJzdCBjcmVhdGVzIG11bHRpcGxlIHNjb3BlcyB3
aXRoIHRoZSBzYW1lIHZhciwgYW5kIHRoZW4KKyAgICAvLyBpbml0aWFsaXplcyB0aGF0IHZhciBp
biBqdXN0IG9uZSBvZiB0aGVtLiBUaGlzIG1lYW5zIHRoYXQgYSBjb21waWxhdGlvbiBjb3VsZCBj
b25zdGFudC1mb2xkIHRvIG9uZQorICAgIC8vIG9mIHRoZSBzY29wZXMgdGhhdCBzdGlsbCBoYXMg
YW4gdW5kZWZpbmVkIHZhbHVlIGZvciB0aGlzIHZhcmlhYmxlLiBUaGF0J3MgZmluZSwgYmVjYXVz
ZSBhdCB0aGF0CisgICAgLy8gcG9pbnQgYW55IHdyaXRlIHRvIGFueSBvZiB0aGUgaW5zdGFuY2Vz
IG9mIHRoYXQgdmFyaWFibGUgd291bGQgZmlyZSB0aGUgd2F0Y2hwb2ludC4KKyAgICBXYXRjaHBv
aW50U2V0KiB3YXRjaHBvaW50U2V0KCkKICAgICB7CiAgICAgICAgIGlmICghaXNGYXQoKSkKICAg
ICAgICAgICAgIHJldHVybiAwOwogICAgICAgICByZXR1cm4gZmF0RW50cnkoKS0+bV93YXRjaHBv
aW50cy5nZXQoKTsKICAgICB9CiAgICAgCi0gICAgQUxXQVlTX0lOTElORSB2b2lkIG5vdGlmeVdy
aXRlKFZNJiB2bSwgSlNWYWx1ZSB2YWx1ZSwgY29uc3QgRmlyZURldGFpbCYgZGV0YWlsKQotICAg
IHsKLSAgICAgICAgaWYgKExJS0VMWSghaXNGYXQoKSkpCi0gICAgICAgICAgICByZXR1cm47Ci0g
ICAgICAgIG5vdGlmeVdyaXRlU2xvdyh2bSwgdmFsdWUsIGRldGFpbCk7Ci0gICAgfQotICAgIAog
cHJpdmF0ZToKICAgICBzdGF0aWMgY29uc3QgaW50cHRyX3QgU2xpbUZsYWcgPSAweDE7CiAgICAg
c3RhdGljIGNvbnN0IGludHB0cl90IFJlYWRPbmx5RmxhZyA9IDB4MjsKQEAgLTMwOCw3ICszMjMs
NyBAQCBwcml2YXRlOgogICAgICAgICAKICAgICAgICAgaW50cHRyX3QgbV9iaXRzOyAvLyBhbHdh
eXMgaGFzIEZhdEZsYWcgc2V0IGFuZCBleGFjdGx5IG1hdGNoZXMgd2hhdCB0aGUgYml0cyB3b3Vs
ZCBoYXZlIGJlZW4gaWYgdGhpcyB3YXNuJ3QgZmF0LgogICAgICAgICAKLSAgICAgICAgUmVmUHRy
PFZhcmlhYmxlV2F0Y2hwb2ludFNldD4gbV93YXRjaHBvaW50czsKKyAgICAgICAgUmVmUHRyPFdh
dGNocG9pbnRTZXQ+IG1fd2F0Y2hwb2ludHM7CiAgICAgfTsKICAgICAKICAgICBTeW1ib2xUYWJs
ZUVudHJ5JiBjb3B5U2xvdyhjb25zdCBTeW1ib2xUYWJsZUVudHJ5Jik7CkBAIC02MzcsNiArNjUy
LDggQEAgcHVibGljOgogICAgIFN5bWJvbFRhYmxlKiBjbG9uZVNjb3BlUGFydChWTSYpOwogCiAg
ICAgdm9pZCBwcmVwYXJlRm9yVHlwZVByb2ZpbGluZyhjb25zdCBDb25jdXJyZW50SklUTG9ja2Vy
Jik7CisgICAgCisgICAgSW5mZXJyZWRWYWx1ZSogc2luZ2xldG9uU2NvcGUoKSB7IHJldHVybiBt
X3NpbmdsZXRvblNjb3BlLmdldCgpOyB9CiAKICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVu
KEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAKQEAgLTY0NiwyMCArNjYzLDEwIEBAIHByb3RlY3Rl
ZDoKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgU3RydWN0dXJlRmxhZ3MgPSBTdHJ1Y3R1cmVJ
c0ltbW9ydGFsIHwgQmFzZTo6U3RydWN0dXJlRmxhZ3M7CiAKIHByaXZhdGU6Ci0gICAgY2xhc3Mg
V2F0Y2hwb2ludENsZWFudXAgOiBwdWJsaWMgVW5jb25kaXRpb25hbEZpbmFsaXplciB7Ci0gICAg
cHVibGljOgotICAgICAgICBXYXRjaHBvaW50Q2xlYW51cChTeW1ib2xUYWJsZSopOwotICAgICAg
ICB2aXJ0dWFsIH5XYXRjaHBvaW50Q2xlYW51cCgpOwotICAgICAgICAKLSAgICBwcm90ZWN0ZWQ6
Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSgpIG92ZXJyaWRl
OwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgU3ltYm9sVGFibGUqIG1fc3ltYm9sVGFibGU7Ci0g
ICAgfTsKLSAgICAKICAgICBKU19FWFBPUlRfUFJJVkFURSBTeW1ib2xUYWJsZShWTSYpOwogICAg
IH5TeW1ib2xUYWJsZSgpOworICAgIAorICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgZmluaXNo
Q3JlYXRpb24oVk0mKTsKIAogICAgIE1hcCBtX21hcDsKICAgICBTY29wZU9mZnNldCBtX21heFNj
b3BlT2Zmc2V0OwpAQCAtNjc0LDEzICs2ODEsMTEgQEAgcHJpdmF0ZToKICAgICBib29sIG1fdXNl
c05vblN0cmljdEV2YWw7CiAgICAgCiAgICAgV3JpdGVCYXJyaWVyPFNjb3BlZEFyZ3VtZW50c1Rh
YmxlPiBtX2FyZ3VtZW50czsKKyAgICBXcml0ZUJhcnJpZXI8SW5mZXJyZWRWYWx1ZT4gbV9zaW5n
bGV0b25TY29wZTsKICAgICAKLSAgICBzdGQ6OnVuaXF1ZV9wdHI8V2F0Y2hwb2ludENsZWFudXA+
IG1fd2F0Y2hwb2ludENsZWFudXA7CiAgICAgc3RkOjp1bmlxdWVfcHRyPExvY2FsVG9FbnRyeVZl
Yz4gbV9sb2NhbFRvRW50cnk7CiAKIHB1YmxpYzoKLSAgICBJbmxpbmVXYXRjaHBvaW50U2V0IG1f
ZnVuY3Rpb25FbnRlcmVkT25jZTsKLSAgICAKICAgICBtdXRhYmxlIENvbmN1cnJlbnRKSVRMb2Nr
IG1fbG9jazsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVQ
cm9maWxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
VHlwZVByb2ZpbGVyLmNwcAkocmV2aXNpb24gMTgyNDk4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvVHlwZVByb2ZpbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgs
NyBAQAogCiAjaW5jbHVkZSAiSW5zcGVjdG9yUHJvdG9jb2xPYmplY3RzLmgiCiAjaW5jbHVkZSAi
VHlwZUxvY2F0aW9uLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogCiBu
YW1lc3BhY2UgSlNDIHsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0u
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAko
cmV2aXNpb24gMTgyNDk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yMzcsNiArMjM3LDcgQEAgVk06OlZNKFZNVHlwZSB2bVR5cGUs
IEhlYXBUeXBlIGhlYXBUeXBlKQogICAgIHVubGlua2VkRnVuY3Rpb25Db2RlQmxvY2tTdHJ1Y3R1
cmUuc2V0KCp0aGlzLCBVbmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrOjpjcmVhdGVTdHJ1Y3R1cmUo
KnRoaXMsIDAsIGpzTnVsbCgpKSk7CiAgICAgcHJvcGVydHlUYWJsZVN0cnVjdHVyZS5zZXQoKnRo
aXMsIFByb3BlcnR5VGFibGU6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsK
ICAgICB3ZWFrTWFwRGF0YVN0cnVjdHVyZS5zZXQoKnRoaXMsIFdlYWtNYXBEYXRhOjpjcmVhdGVT
dHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CisgICAgaW5mZXJyZWRWYWx1ZVN0cnVjdHVy
ZS5zZXQoKnRoaXMsIEluZmVycmVkVmFsdWU6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNO
dWxsKCkpKTsKICNpZiBFTkFCTEUoUFJPTUlTRVMpCiAgICAgcHJvbWlzZURlZmVycmVkU3RydWN0
dXJlLnNldCgqdGhpcywgSlNQcm9taXNlRGVmZXJyZWQ6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywg
MCwganNOdWxsKCkpKTsKICAgICBwcm9taXNlUmVhY3Rpb25TdHJ1Y3R1cmUuc2V0KCp0aGlzLCBK
U1Byb21pc2VSZWFjdGlvbjo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCShyZXZpc2lvbiAxODI0OTgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNzAs
NiArMjcwLDcgQEAgcHVibGljOgogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHVubGlua2VkRnVuY3Rp
b25Db2RlQmxvY2tTdHJ1Y3R1cmU7CiAgICAgU3Ryb25nPFN0cnVjdHVyZT4gcHJvcGVydHlUYWJs
ZVN0cnVjdHVyZTsKICAgICBTdHJvbmc8U3RydWN0dXJlPiB3ZWFrTWFwRGF0YVN0cnVjdHVyZTsK
KyAgICBTdHJvbmc8U3RydWN0dXJlPiBpbmZlcnJlZFZhbHVlU3RydWN0dXJlOwogI2lmIEVOQUJM
RShQUk9NSVNFUykKICAgICBTdHJvbmc8U3RydWN0dXJlPiBwcm9taXNlRGVmZXJyZWRTdHJ1Y3R1
cmU7CiAgICAgU3Ryb25nPFN0cnVjdHVyZT4gcHJvbWlzZVJlYWN0aW9uU3RydWN0dXJlOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9pbmZlci11bmluaXRpYWxpemVk
LWNsb3N1cmUtdmFyLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0
cy9zdHJlc3MvaW5mZXItdW5pbml0aWFsaXplZC1jbG9zdXJlLXZhci5qcwkocmV2aXNpb24gMCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvaW5mZXItdW5pbml0aWFsaXpl
ZC1jbG9zdXJlLXZhci5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDI2IEBACitmdW5jdGlv
biBmb28ocCkgeworICAgIHZhciB4OworICAgIAorICAgIG5vSW5saW5lKGYpOworICAgIAorICAg
IGlmIChwKSB7CisgICAgICAgIHZhciBmID0gZnVuY3Rpb24oKSB7IHJldHVybiB4OyB9CisgICAg
ICAgIAorICAgICAgICBmb28oZmFsc2UpOworICAgICAgICAKKyAgICAgICAgZm9yICh2YXIgaSA9
IDA7IGkgPCAxMDAwMDsgKytpKSB7CisgICAgICAgICAgICB2YXIgcmVzdWx0ID0gZigpOworICAg
ICAgICAgICAgaWYgKHJlc3VsdCAhPT0gdm9pZCAwKQorICAgICAgICAgICAgICAgIHRocm93ICJF
cnJvcjogYmFkIHJlc3VsdCAoMSk6ICIgKyByZXN1bHQ7CisgICAgICAgIH0KKyAgICAgICAgCisg
ICAgICAgIHggPSA0MzsKKyAgICAgICAgCisgICAgICAgIHZhciByZXN1bHQgPSBmKCk7CisgICAg
ICAgIGlmIChyZXN1bHQgIT0gNDMpCisgICAgICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1
bHQgKDIpOiAiICsgcmVzdWx0OworICAgIH0gZWxzZQorICAgICAgICB4ID0gNDI7Cit9CisKK2Zv
byh0cnVlKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3Mvc2luZ2xl
dG9uLXNjb3BlLXRoZW4tb3ZlcndyaXRlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS90ZXN0cy9zdHJlc3Mvc2luZ2xldG9uLXNjb3BlLXRoZW4tb3ZlcndyaXRlLmpzCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9zaW5nbGV0
b24tc2NvcGUtdGhlbi1vdmVyd3JpdGUuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMCBA
QAorZnVuY3Rpb24gZm9vKGEpIHsKKyAgICB2YXIgeCA9IGEgKyAxOworICAgIHZhciBmID0gZnVu
Y3Rpb24oYSkgeworICAgICAgICByZXR1cm4geCArIGE7CisgICAgfTsKKyAgICBub0lubGluZShm
KTsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwOyArK2kpIHsKKyAgICAgICAgdmFyIHJl
c3VsdCA9IGYoaSk7CisgICAgICAgIGlmIChyZXN1bHQgIT0gYSArIDEgKyBpKQorICAgICAgICAg
ICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0OiAiICsgcmVzdWx0OworICAgIH0KKyAgICB4ID0g
OTk5OworICAgIHZhciByZXN1bHQgPSBmKDEpOworICAgIGlmIChyZXN1bHQgIT0gOTk5ICsgMSkK
KyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0OiAiICsgcmVzdWx0OworfQorCitub0lu
bGluZShmb28pOworZm9yICh2YXIgaSA9IDA7IGkgPCAzOyArK2kpCisgICAgZm9vKDQyICsgaSk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3NpbmdsZXRvbi1zY29w
ZS10aGVuLXJlYWxsb2MtYW5kLW92ZXJ3cml0ZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3NpbmdsZXRvbi1zY29wZS10aGVuLXJlYWxsb2MtYW5k
LW92ZXJ3cml0ZS5qcwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0
cy9zdHJlc3Mvc2luZ2xldG9uLXNjb3BlLXRoZW4tcmVhbGxvYy1hbmQtb3ZlcndyaXRlLmpzCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjAgQEAKK2Z1bmN0aW9uIGZvbyhhKSB7CisgICAgdmFy
IHggPSBhICsgMTsKKyAgICByZXR1cm4gZnVuY3Rpb24oYSkgeworICAgICAgICByZXR1cm4geCAr
IGE7CisgICAgfTsKK30KKwordmFyIGYgPSBmb28oNDIpOworbm9JbmxpbmUoZik7CisKK2ZvciAo
dmFyIGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgeworICAgIHZhciByZXN1bHQgPSBmKGkpOworICAg
IGlmIChyZXN1bHQgIT0gNDIgKyAxICsgaSkKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVz
dWx0OiAiICsgcmVzdWx0OworfQorCit2YXIgZiA9IGZvbyg0Myk7Cit2YXIgcmVzdWx0ID0gZigx
KTsKK2lmIChyZXN1bHQgIT0gNDMgKyAxICsgMSkKKyAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1
bHQ6ICIgKyByZXN1bHQ7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNz
L3NpbmdsZXRvbi1zY29wZS10aGVuLXJlYWxsb2MuanMKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9zaW5nbGV0b24tc2NvcGUtdGhlbi1yZWFsbG9jLmpz
CShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9zaW5n
bGV0b24tc2NvcGUtdGhlbi1yZWFsbG9jLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjAg
QEAKK2Z1bmN0aW9uIGZvbyhhKSB7CisgICAgdmFyIHggPSBhICsgMTsKKyAgICByZXR1cm4gZnVu
Y3Rpb24oYSkgeworICAgICAgICByZXR1cm4geCArPSBhOworICAgIH07Cit9CisKK3ZhciBmID0g
Zm9vKDQyKTsKK25vSW5saW5lKGYpOworCitmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwOyArK2kp
IHsKKyAgICB2YXIgcmVzdWx0ID0gZigxKTsKKyAgICBpZiAocmVzdWx0ICE9IDQyICsgMSArIGkg
KyAxKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQ6ICIgKyByZXN1bHQ7Cit9CisK
K3ZhciBmID0gZm9vKDQzKTsKK3ZhciByZXN1bHQgPSBmKDEpOworaWYgKHJlc3VsdCAhPSA0MyAr
IDEgKyAxKQorICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdDogIiArIHJlc3VsdDsKSW5kZXg6
IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9DaGFuZ2VM
b2cJKHJldmlzaW9uIDE4MjQ5OCkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBj
b3B5KQpAQCAtMSwzICsxLDIwIEBACisyMDE1LTA0LTA3ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0Bh
cHBsZS5jb20+CisKKyAgICAgICAgSlNDIHNob3VsZCBkZXRlY3Qgc2luZ2xldG9uIGZ1bmN0aW9u
cworICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTQzMjMy
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTWljaGFlbCBTYWJvZmYuCisKKyAgICAgICAgKiBqcy9y
ZWdyZXNzL2NyZWF0ZS1sb3RzLW9mLWZ1bmN0aW9ucy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAg
ICAgICAqIGpzL3JlZ3Jlc3MvY3JlYXRlLWxvdHMtb2YtZnVuY3Rpb25zLmh0bWw6IEFkZGVkLgor
ICAgICAgICAqIGpzL3JlZ3Jlc3Mvbm8taW5saW5lLWNvbnN0cnVjdG9yLWV4cGVjdGVkLnR4dDog
QWRkZWQuCisgICAgICAgICoganMvcmVncmVzcy9uby1pbmxpbmUtY29uc3RydWN0b3IuaHRtbDog
QWRkZWQuCisgICAgICAgICoganMvcmVncmVzcy9zY3JpcHQtdGVzdHMvY3JlYXRlLWxvdHMtb2Yt
ZnVuY3Rpb25zLmpzOiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9u
by1pbmxpbmUtY29uc3RydWN0b3IuanM6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3Mvc2Ny
aXB0LXRlc3RzL3NpbmdsZXRvbi1zY29wZS5qczogQWRkZWQuCisgICAgICAgICoganMvcmVncmVz
cy9zaW5nbGV0b24tc2NvcGUtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdy
ZXNzL3NpbmdsZXRvbi1zY29wZS5odG1sOiBBZGRlZC4KKwogMjAxNS0wNC0wNyAgTWF0dGhldyBN
aXJtYW4gIDxtbWlybWFuQGFwcGxlLmNvbT4KIAogICAgICAgICBTb3VyY2UgYW5kIHN0YWNrIGlu
Zm9ybWF0aW9uIHNob3VsZCBnZXQgYXBwZW5kZWQgb25seSB0byBuYXRpdmUgZXJyb3JzCkluZGV4
OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2NyZWF0ZS1sb3RzLW9mLWZ1bmN0aW9ucy1leHBlY3Rl
ZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9jcmVhdGUtbG90cy1v
Zi1mdW5jdGlvbnMtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMv
cmVncmVzcy9jcmVhdGUtbG90cy1vZi1mdW5jdGlvbnMtZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNv
cHkpCkBAIC0wLDAgKzEsMTAgQEAKK0pTUmVncmVzcy9jcmVhdGUtbG90cy1vZi1mdW5jdGlvbnMK
KworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywg
Zm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1Mgbm8gZXhjZXB0aW9uIHRocm93
bgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5k
ZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvY3JlYXRlLWxvdHMtb2YtZnVuY3Rpb25zLmh0bWwK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9jcmVhdGUtbG90cy1vZi1mdW5j
dGlvbnMuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvY3JlYXRl
LWxvdHMtb2YtZnVuY3Rpb25zLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMiBAQAor
PCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8
aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2Ny
aXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3JlZ3Jl
c3MtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvY3JlYXRlLWxv
dHMtb2YtZnVuY3Rpb25zLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJj
ZXMvcmVncmVzcy1wb3N0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJj
ZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6IExh
eW91dFRlc3RzL2pzL3JlZ3Jlc3Mvbm8taW5saW5lLWNvbnN0cnVjdG9yLWV4cGVjdGVkLnR4dAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL25vLWlubGluZS1jb25zdHJ1Y3Rv
ci1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL25v
LWlubGluZS1jb25zdHJ1Y3Rvci1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwxMCBAQAorSlNSZWdyZXNzL25vLWlubGluZS1jb25zdHJ1Y3RvcgorCitPbiBzdWNjZXNzLCB5
b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVT
VCBDT01QTEVURSIuCisKKworUEFTUyBubyBleGNlcHRpb24gdGhyb3duCitQQVNTIHN1Y2Nlc3Nm
dWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMv
anMvcmVncmVzcy9uby1pbmxpbmUtY29uc3RydWN0b3IuaHRtbAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlv
dXRUZXN0cy9qcy9yZWdyZXNzL25vLWlubGluZS1jb25zdHJ1Y3Rvci5odG1sCShyZXZpc2lvbiAw
KQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9uby1pbmxpbmUtY29uc3RydWN0b3IuaHRtbAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0v
L0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4u
L3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxz
Y3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcmVncmVzcy1wcmUuanMiPjwvc2NyaXB0PgorPHNj
cmlwdCBzcmM9InNjcmlwdC10ZXN0cy9uby1pbmxpbmUtY29uc3RydWN0b3IuanMiPjwvc2NyaXB0
PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNzLXBvc3QuanMiPjwvc2NyaXB0
PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0
PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zaW5nbGV0
b24tc2NvcGUtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jl
c3Mvc2luZ2xldG9uLXNjb3BlLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRl
c3RzL2pzL3JlZ3Jlc3Mvc2luZ2xldG9uLXNjb3BlLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDEwIEBACitKU1JlZ3Jlc3Mvc2luZ2xldG9uLXNjb3BlCisKK09uIHN1Y2Nl
c3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5
ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIG5vIGV4Y2VwdGlvbiB0aHJvd24KK1BBU1Mgc3Vj
Y2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRU
ZXN0cy9qcy9yZWdyZXNzL3NpbmdsZXRvbi1zY29wZS5odG1sCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2pzL3JlZ3Jlc3Mvc2luZ2xldG9uLXNjb3BlLmh0bWwJKHJldmlzaW9uIDApCisrKyBM
YXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NpbmdsZXRvbi1zY29wZS5odG1sCSh3b3JraW5nIGNvcHkp
CkBAIC0wLDAgKzEsMTIgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhU
TUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pz
LXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdCBzcmM9Ii4u
Ly4uL3Jlc291cmNlcy9yZWdyZXNzLXByZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ic2Ny
aXB0LXRlc3RzL3NpbmdsZXRvbi1zY29wZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4v
Li4vcmVzb3VyY2VzL3JlZ3Jlc3MtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4v
Li4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+
CkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9jcmVhdGUtbG90cy1v
Zi1mdW5jdGlvbnMuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3Jp
cHQtdGVzdHMvY3JlYXRlLWxvdHMtb2YtZnVuY3Rpb25zLmpzCShyZXZpc2lvbiAwKQorKysgTGF5
b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvY3JlYXRlLWxvdHMtb2YtZnVuY3Rpb25z
LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIgQEAKK2Z1bmN0aW9uIGZvbygpIHsKKyAg
ICB2YXIgcmVzdWx0ID0gMDsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDsgKytpKQorICAg
ICAgICByZXN1bHQgKz0gKGZ1bmN0aW9uKCkgeyByZXR1cm4gaSB9KSgpOworICAgIHJldHVybiBy
ZXN1bHQ7Cit9CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgeworICAgIHZhciBy
ZXN1bHQgPSBmb28oKTsKKyAgICBpZiAocmVzdWx0ICE9IDQ5NTApCisgICAgICAgIHRocm93ICJF
cnJvcjogYmFkIHJlc3VsdDogIiArIHJlc3VsdDsKK30KSW5kZXg6IExheW91dFRlc3RzL2pzL3Jl
Z3Jlc3Mvc2NyaXB0LXRlc3RzL25vLWlubGluZS1jb25zdHJ1Y3Rvci5qcwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9uby1pbmxpbmUtY29uc3RydWN0
b3IuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0
cy9uby1pbmxpbmUtY29uc3RydWN0b3IuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMyBA
QAorZnVuY3Rpb24gRm9vKCkgeworICAgIHZhciBvID0ge2Y6e2Y6e2Y6e2Y6NDJ9fX19OworICAg
IHRoaXMuZiA9IDQyOworfQorCitub0lubGluZShGb28pOworCitmb3IgKHZhciBpID0gMDsgaSA8
IDMwMDAwMDA7ICsraSkgeworICAgIHZhciByZXN1bHQgPSBuZXcgRm9vKCk7CisgICAgaWYgKHJl
c3VsdC5mICE9IDQyKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQ6ICIgKyByZXN1
bHQuZjsKK30KKwpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvc2lu
Z2xldG9uLXNjb3BlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2Ny
aXB0LXRlc3RzL3NpbmdsZXRvbi1zY29wZS5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3Rz
L2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL3NpbmdsZXRvbi1zY29wZS5qcwkod29ya2luZyBjb3B5
KQpAQCAtMCwwICsxLDE2IEBACitmdW5jdGlvbiBmb28oKSB7CisgICAgdmFyIHggPSA0MjsKKyAg
ICB2YXIgeSA9IDQzOworICAgIHJldHVybiBmdW5jdGlvbih6KSB7CisgICAgICAgIHZhciByZXN1
bHQgPSB4ICsgeTsKKyAgICAgICAgeCArPSB6OworICAgICAgICB5ICs9IHo7CisgICAgICAgIHJl
dHVybiByZXN1bHQ7CisgICAgfQorfQorCit2YXIgZiA9IGZvbygpOworbm9JbmxpbmUoZik7CisK
K2ZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDAwMDA7ICsraSkKKyAgICBmKDEpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>250384</attachid>
            <date>2015-04-08 14:14:57 -0700</date>
            <delta_ts>2015-04-08 16:05:13 -0700</delta_ts>
            <desc>fix some builds</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>167451</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTgyNTU5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI1NyBA
QAorMjAxNS0wNC0wOCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEpTQyBzaG91bGQgZGV0ZWN0IHNpbmdsZXRvbiBmdW5jdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MzIzMgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEhKS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgc3RhcnRlZCBvdXQg
YXMgYW4gYXR0ZW1wdCB0byBtYWtlIGNvbnN0cnVjdG9ycyBmYXN0ZXIgYnkgZGV0ZWN0aW5nIHdo
ZW4gYSBjb25zdHJ1Y3RvciBpcyBhCisgICAgICAgIHNpbmdsZXRvbi4gVGhlIGlkZWEgaXMgdGhh
dCBlYWNoIEZ1bmN0aW9uRXhlY3V0YWJsZSBoYXMgYSBWYXJpYWJsZVdhdGNocG9pbnRTZXQgLSBh
IHdhdGNocG9pbnQKKyAgICAgICAgYWxvbmcgd2l0aCBhbiBpbmZlcnJlZCB2YWx1ZSAtIHRoYXQg
ZGV0ZWN0cyBpZiBvbmx5IG9uZSBKU0Z1bmN0aW9uIGhhcyBiZWVuIGFsbG9jYXRlZCBmb3IgdGhh
dAorICAgICAgICBleGVjdXRhYmxlLCBhbmQgaWYgc28sIHdoYXQgdGhhdCBKU0Z1bmN0aW9uIGlz
LiBUaGVuLCBpbnNpZGUgdGhlIGNvZGUgZm9yIHRoZSBGdW5jdGlvbkV4ZWN1dGFibGUsCisgICAg
ICAgIGlmIHRoZSB3YXRjaHBvaW50IHNldCBoYXMgYW4gaW5mZXJyZWQgdmFsdWUgKGkuZS4gaXQn
cyBiZWVuIGluaXRpYWxpemVkIGFuZCBpdCBpcyBzdGlsbCB2YWxpZCksCisgICAgICAgIHdlIGNh
biBjb25zdGFudC1mb2xkIEdldENhbGxlZS4KKyAgICAgICAgCisgICAgICAgIFVuZm9ydHVuYXRl
bHksIGNvbnN0cnVjdG9ycyBkb24ndCB1c2UgR2V0Q2FsbGVlIGFueW1vcmUsIHNvIHRoYXQgZGlk
bid0IHBhbiBvdXQuIEJ1dCBpbiB0aGUKKyAgICAgICAgcHJvY2VzcyBJIHJlYWxpemVkIGEgYnVu
Y2ggb2YgdGhpbmdzOgorICAgICAgICAKKyAgICAgICAgLSBUaGlzIGFsbG93cyB1cyB0byBjb21w
bGV0ZWx5IGVsaW1pbmF0ZSB0aGUgR2V0Q2FsbGVlL0dldFNjb3BlIHNlcXVlbmNlIHRoYXQgd2Ug
c3RpbGwgc29tZXRpbWVzCisgICAgICAgICAgaGFkIGV2ZW4gaW4gY29kZSB3aGVyZSBvdXIgc2lu
Z2xldG9uLWNsb3N1cmUgZGV0ZWN0aW9uIHdvcmtlZC4gVGhhdCdzIGJlY2F1c2Ugc2luZ2xldG9u
LWNsb3N1cmUKKyAgICAgICAgICBpbmZlcmVuY2Ugd29ya2VkIGF0IHRoZSBvcF9yZXNvbHZlX3Nj
b3BlLCBhbmQgdGhhdCBvcF9yZXNvbHZlX3Njb3BlIHN0aWxsIG5lZWRlZCB0byBrZWVwIGFsaXZl
CisgICAgICAgICAgdGhlIGluY29taW5nIHNjb3BlIGluIGNhc2Ugd2UgT1NSIGV4aXQuIEJ1dCBi
eSBjb25zdGFudC1mb2xkaW5nIEdldENhbGxlZSwgdGhhdCBzZXF1ZW5jZQorICAgICAgICAgIGRp
c2FwcGVhcnMuIE9TUiBleGl0IGNhbiByZW1hdGVyaWFsaXplIHRoZSBjYWxsZWUgb3IgdGhlIHNj
b3BlIGJ5IGp1c3Qga25vd2luZyB0aGVpciBjb25zdGFudAorICAgICAgICAgIHZhbHVlcy4KKyAg
ICAgICAgICAKKyAgICAgICAgLSBTaW5nbGV0b24gZGV0ZWN0aW9uIHNob3VsZCBiZSBhIHJldXNh
YmxlIHRoaW5nLiBTbywgSSBnb3QgcmlkIG9mIFZhcmlhYmxlV2F0Y2hwb2ludFNldCBhbmQKKyAg
ICAgICAgICBjcmVhdGVkIEluZmVycmVkVmFsdWUuIEluZmVycmVkVmFsdWUgaXMgYSBjZWxsLCBz
byBpdCBjYW4gaGFuZGxlIGl0cyBvd24gR0MgbWFnaWMuCisgICAgICAgICAgRnVuY3Rpb25FeGVj
dXRhYmxlIHVzZXMgYW4gSW5mZXJyZWRWYWx1ZSB0byB0ZWxsIHlvdSBhYm91dCBzaW5nbGV0b24g
SlNGdW5jdGlvbnMuCisgICAgICAgIAorICAgICAgICAtIFRoZSBvbGQgc2luZ2xldG9uLXNjb3Bl
IGRldGVjdGlvbiBpbiBvcF9yZXNvbHZlX3Njb3BlIGlzIGJldHRlciBhYnN0cmFjdGVkIGFzIGEg
U3ltYm9sVGFibGUKKyAgICAgICAgICBkZXRlY3RpbmcgYSBzaW5nbGV0b24gSlNTeW1ib2xUYWJs
ZU9iamVjdC4gU28sIFN5bWJvbFRhYmxlIHVzZXMgYW4gSW5mZXJyZWRWYWx1ZSB0byB0ZWxsIHlv
dQorICAgICAgICAgIGFib3V0IHNpbmdsZXRvbiBKU1N5bWJvbFRhYmxlT2JqZWN0cy4gSXQncyBj
dXJpb3VzIHRoYXQgd2Ugd2FudCB0byBoYXZlIHNpbmdsZXRvbiBkZXRlY3Rpb24gaW4KKyAgICAg
ICAgICBTeW1ib2xUYWJsZSBpZiB3ZSBhbHJlYWR5IGhhdmUgaXQgaW4gRnVuY3Rpb25FeGVjdXRh
YmxlLiBUaGlzIGNvbWVzIGludG8gcGxheSBpbiB0d28gd2F5cy4KKyAgICAgICAgICBGaXJzdCwg
aXQgbWVhbnMgdGhhdCB0aGUgREZHIGNhbiByZWFsaXplIHNvb25lciB0aGF0IGEgcmVzb2x2ZV9z
Y29wZSByZXNvbHZlcyB0byBhIGNvbnN0YW50CisgICAgICAgICAgc2NvcGUuIFRocyBzYXZlcyBj
b21waWxlIHRpbWVzIGFuZCBpdCBhbGxvd3MgcHJlZGljdGlvbiBwcm9wYWdhdGlvbiB0byBiZW5l
Zml0IGZyb20gdGhlCisgICAgICAgICAgY29uc3RhbnQgZm9sZGluZy4gU2Vjb25kLCBpdCBtZWFu
cyB0aGF0IHdlIHdpbGwgZGV0ZWN0IGEgc2luZ2x0b24gc2NvcGUgZXZlbiBpZiBpdCBpcworICAg
ICAgICAgIHJlZmVyZW5jZWQgZnJvbSBhIG5vbi1zaW5nbGV0b24gc2NvcGUgdGhhdCBpcyBuZWFy
ZXIgdG8gdXMgaW4gdGhlIHNjb3BlIGNoYWluLiBUaGlzIHJlZmFjdG9yaW5nCisgICAgICAgICAg
YWxsb3dzIHVzIHRvIGVsaW1pbmF0ZSB0aGUgZnVuY3Rpb24gcmVlbnRyeSB3YXRjaHBvaW50Lgor
ICAgICAgICAKKyAgICAgICAgLSBUaGlzIGFsbG93cyB1cyB0byB1c2UgYSBub3JtYWwgV2F0Y2hw
b2ludFNldCwgaW5zdGVhZCBvZiBhIFZhcmlhYmxlV2F0Y2hwb2ludFNldCwgZm9yIGluZmVycmlu
ZworICAgICAgICAgIGNvbnN0YW50IHZhbHVlcyBpbiBzY29wZXMuIFByZXZpb3VzbHkgd2hlbiB0
aGUgREZHIGluZmVycmVkIHRoYXQgYSBjbG9zdXJlIHZhcmlhYmxlIHdhcworICAgICAgICAgIGNv
bnN0YW50LCBpdCB3b3VsZG4ndCBrbm93IHdoaWNoIGNsb3N1cmUgdGhhdCB2YXJpYWJsZSB3YXMg
aW4gYW5kIHNvIGl0IGNvdWxkbid0IGp1c3QgbG9hZCB0aGF0CisgICAgICAgICAgdmFsdWUuIEJ1
dCBub3cgd2UgYXJlIGZpcnN0IGluZmVycmluZyB0aGF0IHRoZSBmdW5jdGlvbiBpcyBhIHNpbmds
ZXRvbiwgd2hpY2ggbWVhbnMgdGhhdCB3ZQorICAgICAgICAgIGtub3cgZXhhY3RseSB3aGF0IHNj
b3BlIGl0IHBvaW50cyB0bywgYW5kIHdlIGNhbiBsb2FkIHRoZSB2YWx1ZSBmcm9tIHRoZSBzY29w
ZS4gVXNpbmcgYQorICAgICAgICAgIFdhdGNocG9pbnRTZXQgaW5zdGVhZCBvZiBhIFZhcmlhYmxl
V2F0Y2hwb2ludFNldCBzYXZlcyBzb21lIG1lbW9yeSBhbmQgc2ltcGxpZmllcyBhIGJ1bmNoIG9m
CisgICAgICAgICAgY29kZS4gVGhpcyBhbHNvIG1lYW5zIHRoYXQgbm93LCB0aGUgb25seSB1c2Vy
IG9mIFZhcmlhYmxlV2F0Y2hwb2ludFNldCBpcyBGdW5jdGlvbkV4ZWN1dGFibGUuCisgICAgICAg
ICAgSSd2ZSB0d2Vha2VkIHRoZSBjb2RlIG9mIFZhcmlhYmxlV2F0Y2hwb2ludFNldCB0byByZWR1
Y2UgaXRzIHBvd2VyIHRvIGp1c3QgYmUgd2hhdAorICAgICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJs
ZSB3YW50cy4KKyAgICAgICAgCisgICAgICAgIFRoaXMgYWxzbyBoYXMgdGhlIGVmZmVjdCBvZiBz
aW1wbGlmeWluZyB0aGUgaW1wbGVtZW50YXRpb24gb2YgYmxvY2sgc2NvcGluZy4gUHJpb3IgdG8g
dGhpcworICAgICAgICBjaGFuZ2UsIGJsb2NrIHNjb3Bpbmcgd291bGQgaGFkIGhhZCB0byBoYXZl
IHNvbWUgc3RvcnkgZm9yIHRoZSBmdW5jdGlvbiByZWVudHJ5IHdhdGNocG9pbnQgb24gYW55Cisg
ICAgICAgIG5lc3RlZCBzeW1ib2wgdGFibGUuIFRoYXQncyB0b3RhbGx5IHdlaXJkIHRvIHRoaW5r
IGFib3V0OyBpdCdzIG5vdCByZWFsbHkgYSBmdW5jdGlvbiByZWVudHJ5IGJ1dAorICAgICAgICBh
IHNjb3BlIHJlZW50cnkuIE5vdyB3ZSBkb24ndCBoYXZlIHRvIHRoaW5rIGFib3V0IHRoaXMuIENv
bnN0YW50IGluZmVyZW5jZSBvbiBuZXN0ZWQgc2NvcGVzIHdpbGwKKyAgICAgICAgImp1c3Qgd29y
ayI6IGlmIHdlIHByb3ZlIHRoYXQgd2Uga25vdyB0aGUgY29uc3RhbnQgdmFsdWUgb2YgdGhlIHNj
b3BlIHRoZW4gdGhlIG1hY2hpbmVyeSBraWNrcworICAgICAgICBpbiwgb3RoZXJ3aXNlIGl0IGRv
ZXNuJ3QuCisgICAgICAgIAorICAgICAgICBUaGlzIGlzIGEgc21hbGwgT2N0YW5lIGFuZCBBc21C
ZW5jaCBzcGVlZC11cC4gQXNtQmVuY2ggc2VlcyAxJSB3aGlsZSBPY3RhbmUgc2VlcyBzdWItMSUu
CisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52
Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2o6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZUxp
c3QuanNvbjoKKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZVVzZURlZi5oOgorICAgICAgICAo
SlNDOjpjb21wdXRlVXNlc0ZvckJ5dGVjb2RlT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6Y29tcHV0
ZURlZnNGb3JCeXRlY29kZU9mZnNldCk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNw
cDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpkdW1wQnl0ZWNvZGUpOgorICAgICAgICAoSlND
OjpDb2RlQmxvY2s6OkNvZGVCbG9jayk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZmluYWxp
emVVbmNvbmRpdGlvbmFsbHkpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnZhbHVlUHJvZmls
ZUZvckJ5dGVjb2RlT2Zmc2V0KToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suaDoKKyAg
ICAgICAgKEpTQzo6Q29kZUJsb2NrOjp2YWx1ZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNldCk6IERl
bGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUvQ29kZU9yaWdpbi5jcHA6CisgICAgICAgIChKU0M6
OklubGluZUNhbGxGcmFtZTo6Y2FsbGVlQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpJbmxpbmVD
YWxsRnJhbWU6OnZpc2l0QWdncmVnYXRlKToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlT3JpZ2lu
Lmg6CisgICAgICAgIChKU0M6OklubGluZUNhbGxGcmFtZTo6Y2FsbGVlQ29uc3RhbnQpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpJbmxpbmVDYWxsRnJhbWU6OnZpc2l0QWdncmVnYXRlKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9JbnN0cnVjdGlvbi5oOgorICAgICAgICAqIGJ5dGVj
b2RlL1ZhcmlhYmxlV2F0Y2hwb2ludFNldC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogYnl0ZWNv
ZGUvVmFyaWFibGVXYXRjaHBvaW50U2V0Lmg6IFJlbW92ZWQuCisgICAgICAgICogYnl0ZWNvZGUv
VmFyaWFibGVXYXRjaHBvaW50U2V0SW5saW5lcy5oOiBSZW1vdmVkLgorICAgICAgICAqIGJ5dGVj
b2RlL1ZhcmlhYmxlV3JpdGVGaXJlRGV0YWlsLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OlZh
cmlhYmxlV3JpdGVGaXJlRGV0YWlsOjpkdW1wKToKKyAgICAgICAgKEpTQzo6VmFyaWFibGVXcml0
ZUZpcmVEZXRhaWw6OnRvdWNoKToKKyAgICAgICAgKiBieXRlY29kZS9WYXJpYWJsZVdyaXRlRmly
ZURldGFpbC5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6VmFyaWFibGVXcml0ZUZpcmVEZXRhaWw6
OlZhcmlhYmxlV3JpdGVGaXJlRGV0YWlsKToKKyAgICAgICAgKiBieXRlY29kZS9XYXRjaHBvaW50
Lmg6CisgICAgICAgIChKU0M6OldhdGNocG9pbnRTZXQ6OnN0YXRlT25NYWluVGhyZWFkKToKKyAg
ICAgICAgKEpTQzo6V2F0Y2hwb2ludFNldDo6c3RhcnRXYXRjaGluZyk6CisgICAgICAgIChKU0M6
OldhdGNocG9pbnRTZXQ6OmZpcmVBbGwpOgorICAgICAgICAoSlNDOjpXYXRjaHBvaW50U2V0Ojp0
b3VjaCk6CisgICAgICAgIChKU0M6OldhdGNocG9pbnRTZXQ6OmludmFsaWRhdGUpOgorICAgICAg
ICAoSlNDOjpJbmxpbmVXYXRjaHBvaW50U2V0OjpzdGF0ZU9uTWFpblRocmVhZCk6CisgICAgICAg
IChKU0M6OklubGluZVdhdGNocG9pbnRTZXQ6OnN0YXRlKToKKyAgICAgICAgKEpTQzo6SW5saW5l
V2F0Y2hwb2ludFNldDo6aGFzQmVlbkludmFsaWRhdGVkKToKKyAgICAgICAgKEpTQzo6SW5saW5l
V2F0Y2hwb2ludFNldDo6aW52YWxpZGF0ZSk6CisgICAgICAgIChKU0M6OklubGluZVdhdGNocG9p
bnRTZXQ6OnRvdWNoKToKKyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3Iu
Y3BwOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3Ip
OgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oOgorICAgICAg
ICAoSlNDOjpERkc6OkFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVj
dXRlRWZmZWN0cyk6CisgICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAg
ICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Z2V0KToKKyAgICAgICAgKEpTQzo6REZHOjpC
eXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQ
YXJzZXI6OmdldFNjb3BlKTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHQ2FwYWJpbGl0aWVz
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpjYXBhYmlsaXR5TGV2ZWwpOgorICAgICAgICAqIGRm
Zy9ERkdDbG9iYmVyaXplLmg6CisgICAgICAgIChKU0M6OkRGRzo6Y2xvYmJlcml6ZSk6CisgICAg
ICAgICogZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
SW5mZXJyZWRWYWx1ZUFkYXB0b3I6OmFkZCk6CisgICAgICAgIChKU0M6OkRGRzo6RGVzaXJlZFdh
dGNocG9pbnRzOjphZGRMYXppbHkpOgorICAgICAgICAoSlNDOjpERkc6OkRlc2lyZWRXYXRjaHBv
aW50czo6cmVhbGx5QWRkKToKKyAgICAgICAgKEpTQzo6REZHOjpEZXNpcmVkV2F0Y2hwb2ludHM6
OmFyZVN0aWxsVmFsaWQpOgorICAgICAgICAqIGRmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuaDoK
KyAgICAgICAgKEpTQzo6REZHOjpJbmZlcnJlZFZhbHVlQWRhcHRvcjo6aGFzQmVlbkludmFsaWRh
dGVkKToKKyAgICAgICAgKEpTQzo6REZHOjpEZXNpcmVkV2F0Y2hwb2ludHM6OmlzV2F0Y2hlZCk6
CisgICAgICAgICogZGZnL0RGR0dyYXBoLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6
ZHVtcCk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OnRyeUdldENvbnN0YW50Q2xvc3VyZVZh
cik6CisgICAgICAgICogZGZnL0RGR05vZGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpo
YXNXYXRjaHBvaW50U2V0KToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjp3YXRjaHBvaW50U2V0
KToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNWYXJpYWJsZVdhdGNocG9pbnRTZXQpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OnZhcmlhYmxlV2F0Y2hwb2ludFNldCk6
IERlbGV0ZWQuCisgICAgICAgICogZGZnL0RGR09wZXJhdGlvbnMuY3BwOgorICAgICAgICAqIGRm
Zy9ERkdPcGVyYXRpb25zLmg6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU5ld0Z1bmN0aW9uKToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNyZWF0ZUFjdGl2YXRp
b24pOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlTm90aWZ5V3Jp
dGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjpjYWxsT3BlcmF0aW9uKToKKyAgICAgICAgKiBkZmcvREZHU3Bl
Y3VsYXRpdmVKSVQzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RG
R1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2UuY3BwOgorICAgICAgICAqIGZ0bC9GVExJbnRyaW5zaWNS
ZXBvc2l0b3J5Lmg6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcDoKKyAgICAg
ICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUNyZWF0ZUFjdGl2YXRpb24pOgor
ICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlTmV3RnVuY3Rpb24pOgor
ICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlTm90aWZ5V3JpdGUpOgor
ICAgICAgICAqIGludGVycHJldGVyL0ludGVycHJldGVyLmNwcDoKKyAgICAgICAgKEpTQzo6U3Rh
Y2tGcmFtZTo6ZnJpZW5kbHlTb3VyY2VVUkwpOgorICAgICAgICAoSlNDOjpTdGFja0ZyYW1lOjpm
cmllbmRseUZ1bmN0aW9uTmFtZSk6CisgICAgICAgICogaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIu
aDoKKyAgICAgICAgKEpTQzo6U3RhY2tGcmFtZTo6ZnJpZW5kbHlTb3VyY2VVUkwpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpTdGFja0ZyYW1lOjpmcmllbmRseUZ1bmN0aW9uTmFtZSk6IERlbGV0
ZWQuCisgICAgICAgICogaml0L0pJVC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdE5vdGlm
eVdyaXRlKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKToKKyAg
ICAgICAgKiBqaXQvSklULmg6CisgICAgICAgICogaml0L0pJVE9wY29kZXMuY3BwOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfdG91Y2hfZW50cnkpOiBEZWxldGVkLgorICAgICAgICAqIGpp
dC9KSVRPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5oOgorICAg
ICAgICAqIGppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dFB1dEdsb2JhbFZhcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFB1dENsb3N1cmVWYXIpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXROb3RpZnlXcml0ZSk6IERlbGV0ZWQuCisgICAgICAgICog
aml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRQ
dXRHbG9iYWxWYXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRQdXRDbG9zdXJlVmFyKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0Tm90aWZ5V3JpdGUpOiBEZWxldGVkLgorICAgICAgICAqIGxs
aW50L0xMSW50U2xvd1BhdGhzLmNwcDoKKyAgICAgICAgKEpTQzo6TExJbnQ6OkxMSU5UX1NMT1df
UEFUSF9ERUNMKToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbToKKyAg
ICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtOgorICAgICAgICAqIGxs
aW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc206CisgICAgICAgICogcnVudGltZS9Db21tb25T
bG93UGF0aHMuY3BwOgorICAgICAgICAoSlNDOjpTTE9XX1BBVEhfREVDTCk6IERlbGV0ZWQuCisg
ICAgICAgICogcnVudGltZS9Db21tb25TbG93UGF0aHMuaDoKKyAgICAgICAgKiBydW50aW1lL0V4
ZWN1dGFibGUuY3BwOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFibGU6OmZpbmlzaENy
ZWF0aW9uKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25FeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVu
KToKKyAgICAgICAgKiBydW50aW1lL0V4ZWN1dGFibGUuaDoKKyAgICAgICAgKEpTQzo6RnVuY3Rp
b25FeGVjdXRhYmxlOjpzaW5nbGV0b25GdW5jdGlvbik6CisgICAgICAgICogcnVudGltZS9JbmZl
cnJlZFZhbHVlLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkluZmVycmVkVmFsdWU6OmNyZWF0
ZSk6CisgICAgICAgIChKU0M6OkluZmVycmVkVmFsdWU6OmRlc3Ryb3kpOgorICAgICAgICAoSlND
OjpJbmZlcnJlZFZhbHVlOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpJbmZlcnJl
ZFZhbHVlOjp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6SW5mZXJyZWRWYWx1ZTo6SW5m
ZXJyZWRWYWx1ZSk6CisgICAgICAgIChKU0M6OkluZmVycmVkVmFsdWU6On5JbmZlcnJlZFZhbHVl
KToKKyAgICAgICAgKEpTQzo6SW5mZXJyZWRWYWx1ZTo6bm90aWZ5V3JpdGVTbG93KToKKyAgICAg
ICAgKEpTQzo6SW5mZXJyZWRWYWx1ZTo6VmFsdWVDbGVhbnVwOjpWYWx1ZUNsZWFudXApOgorICAg
ICAgICAoSlNDOjpJbmZlcnJlZFZhbHVlOjpWYWx1ZUNsZWFudXA6On5WYWx1ZUNsZWFudXApOgor
ICAgICAgICAoSlNDOjpJbmZlcnJlZFZhbHVlOjpWYWx1ZUNsZWFudXA6OmZpbmFsaXplVW5jb25k
aXRpb25hbGx5KToKKyAgICAgICAgKiBydW50aW1lL0luZmVycmVkVmFsdWUuaDogQWRkZWQuCisg
ICAgICAgIChKU0M6OkluZmVycmVkVmFsdWU6OmluZmVycmVkVmFsdWUpOgorICAgICAgICAoSlND
OjpJbmZlcnJlZFZhbHVlOjpzdGF0ZSk6CisgICAgICAgIChKU0M6OkluZmVycmVkVmFsdWU6Omlz
U3RpbGxWYWxpZCk6CisgICAgICAgIChKU0M6OkluZmVycmVkVmFsdWU6Omhhc0JlZW5JbnZhbGlk
YXRlZCk6CisgICAgICAgIChKU0M6OkluZmVycmVkVmFsdWU6OmFkZCk6CisgICAgICAgIChKU0M6
OkluZmVycmVkVmFsdWU6Om5vdGlmeVdyaXRlKToKKyAgICAgICAgKEpTQzo6SW5mZXJyZWRWYWx1
ZTo6aW52YWxpZGF0ZSk6CisgICAgICAgICogcnVudGltZS9KU0Vudmlyb25tZW50UmVjb3JkLmNw
cDoKKyAgICAgICAgKEpTQzo6SlNFbnZpcm9ubWVudFJlY29yZDo6dmlzaXRDaGlsZHJlbik6Cisg
ICAgICAgICogcnVudGltZS9KU0Vudmlyb25tZW50UmVjb3JkLmg6CisgICAgICAgIChKU0M6OkpT
RW52aXJvbm1lbnRSZWNvcmQ6OmlzVmFsaWQpOgorICAgICAgICAoSlNDOjpKU0Vudmlyb25tZW50
UmVjb3JkOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgICogcnVudGltZS9KU0Z1bmN0aW9uLmNw
cDoKKyAgICAgICAgKEpTQzo6SlNGdW5jdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKiBydW50aW1l
L0pTRnVuY3Rpb24uaDoKKyAgICAgICAgKEpTQzo6SlNGdW5jdGlvbjo6Y3JlYXRlV2l0aEludmFs
aWRhdGVkUmVhbGxvY2F0aW9uV2F0Y2hwb2ludCk6CisgICAgICAgIChKU0M6OkpTRnVuY3Rpb246
OmNyZWF0ZUltcGwpOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpjcmVhdGUpOiBEZWxldGVk
LgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpK
U0dsb2JhbE9iamVjdDo6YWRkR2xvYmFsVmFyKToKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmpl
Y3Q6OmFkZEZ1bmN0aW9uKToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0Lmg6Cisg
ICAgICAgICogcnVudGltZS9KU0xleGljYWxFbnZpcm9ubWVudC5jcHA6CisgICAgICAgIChKU0M6
OkpTTGV4aWNhbEVudmlyb25tZW50OjpzeW1ib2xUYWJsZVB1dCk6CisgICAgICAgICogcnVudGlt
ZS9KU1Njb3BlLmg6CisgICAgICAgIChKU0M6OlJlc29sdmVPcDo6UmVzb2x2ZU9wKToKKyAgICAg
ICAgKiBydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6
SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdDo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAqIHJ1
bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5oOgorICAgICAgICAoSlNDOjpKU1N5bWJvbFRhYmxl
T2JqZWN0OjpKU1N5bWJvbFRhYmxlT2JqZWN0KToKKyAgICAgICAgKEpTQzo6SlNTeW1ib2xUYWJs
ZU9iamVjdDo6c2V0U3ltYm9sVGFibGUpOgorICAgICAgICAoSlNDOjpzeW1ib2xUYWJsZVB1dCk6
CisgICAgICAgIChKU0M6OnN5bWJvbFRhYmxlUHV0V2l0aEF0dHJpYnV0ZXMpOgorICAgICAgICAq
IHJ1bnRpbWUvUHV0UHJvcGVydHlTbG90Lmg6CisgICAgICAgICogcnVudGltZS9TeW1ib2xUYWJs
ZS5jcHA6CisgICAgICAgIChKU0M6OlN5bWJvbFRhYmxlRW50cnk6OnByZXBhcmVUb1dhdGNoKToK
KyAgICAgICAgKEpTQzo6U3ltYm9sVGFibGU6OlN5bWJvbFRhYmxlKToKKyAgICAgICAgKEpTQzo6
U3ltYm9sVGFibGU6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6U3ltYm9sVGFibGU6
OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpTeW1ib2xUYWJsZUVudHJ5OjppbmZlcnJl
ZFZhbHVlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3ltYm9sVGFibGVFbnRyeTo6bm90aWZ5
V3JpdGVTbG93KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3ltYm9sVGFibGU6OldhdGNocG9p
bnRDbGVhbnVwOjpXYXRjaHBvaW50Q2xlYW51cCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN5
bWJvbFRhYmxlOjpXYXRjaHBvaW50Q2xlYW51cDo6fldhdGNocG9pbnRDbGVhbnVwKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6U3ltYm9sVGFibGU6OldhdGNocG9pbnRDbGVhbnVwOjpmaW5hbGl6
ZVVuY29uZGl0aW9uYWxseSk6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9TeW1ib2xUYWJs
ZS5oOgorICAgICAgICAoSlNDOjpTeW1ib2xUYWJsZUVudHJ5OjpkaXNhYmxlV2F0Y2hpbmcpOgor
ICAgICAgICAoSlNDOjpTeW1ib2xUYWJsZUVudHJ5Ojp3YXRjaHBvaW50U2V0KToKKyAgICAgICAg
KEpTQzo6U3ltYm9sVGFibGU6OnNpbmdsZXRvblNjb3BlKToKKyAgICAgICAgKEpTQzo6U3ltYm9s
VGFibGVFbnRyeTo6bm90aWZ5V3JpdGUpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvVHlw
ZVByb2ZpbGVyLmNwcDoKKyAgICAgICAgKiBydW50aW1lL1ZNLmNwcDoKKyAgICAgICAgKEpTQzo6
Vk06OlZNKToKKyAgICAgICAgKiBydW50aW1lL1ZNLmg6CisgICAgICAgICogdGVzdHMvc3RyZXNz
L2luZmVyLXVuaW5pdGlhbGl6ZWQtY2xvc3VyZS12YXIuanM6IEFkZGVkLgorICAgICAgICAoZm9v
LmYpOgorICAgICAgICAoZm9vKToKKyAgICAgICAgKiB0ZXN0cy9zdHJlc3Mvc2luZ2xldG9uLXNj
b3BlLXRoZW4tb3ZlcndyaXRlLmpzOiBBZGRlZC4KKyAgICAgICAgKGZvby5mKToKKyAgICAgICAg
KGZvbyk6CisgICAgICAgICogdGVzdHMvc3RyZXNzL3NpbmdsZXRvbi1zY29wZS10aGVuLXJlYWxs
b2MtYW5kLW92ZXJ3cml0ZS5qczogQWRkZWQuCisgICAgICAgIChmb28pOgorICAgICAgICAqIHRl
c3RzL3N0cmVzcy9zaW5nbGV0b24tc2NvcGUtdGhlbi1yZWFsbG9jLmpzOiBBZGRlZC4KKyAgICAg
ICAgKGZvbyk6CisKIDIwMTUtMDQtMDcgIE1pY2hhZWwgU2Fib2ZmICA8bXNhYm9mZkBhcHBsZS5j
b20+CiAKICAgICAgICAgTGF6aWx5IGluaXRpYWxpemUgTG9nVG9TeXN0ZW1Db25zb2xlIGZsYWcg
dG8gcmVkdWNlIG1lbW9yeSB1c2FnZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtl
TGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3Rz
LnR4dAkocmV2aXNpb24gMTgyNDk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlz
dHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xMDUsNyArMTA1LDcgQEAgc2V0KEphdmFTY3JpcHRD
b3JlX1NPVVJDRVMKICAgICBieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAKICAgICBieXRl
Y29kZS9VbmxpbmtlZEluc3RydWN0aW9uU3RyZWFtLmNwcAogICAgIGJ5dGVjb2RlL1ZhbHVlUmVj
b3ZlcnkuY3BwCi0gICAgYnl0ZWNvZGUvVmFyaWFibGVXYXRjaHBvaW50U2V0LmNwcAorICAgIGJ5
dGVjb2RlL1ZhcmlhYmxlV3JpdGVGaXJlRGV0YWlsLmNwcAogICAgIGJ5dGVjb2RlL1ZpcnR1YWxS
ZWdpc3Rlci5jcHAKICAgICBieXRlY29kZS9XYXRjaHBvaW50LmNwcAogCkBAIC00NTIsNiArNDUy
LDcgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1JVTlRJTUVfU09VUkNFUwogICAgIHJ1bnRpbWUvR2V0
dGVyU2V0dGVyLmNwcAogICAgIHJ1bnRpbWUvSWRlbnRpZmllci5jcHAKICAgICBydW50aW1lL0lu
ZGV4aW5nVHlwZS5jcHAKKyAgICBydW50aW1lL0luZmVycmVkVmFsdWUuY3BwCiAgICAgcnVudGlt
ZS9Jbml0aWFsaXplVGhyZWFkaW5nLmNwcAogICAgIHJ1bnRpbWUvSW50ZW5kZWRTdHJ1Y3R1cmVD
aGFpbi5jcHAKICAgICBydW50aW1lL0ludGVybmFsRnVuY3Rpb24uY3BwCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hw
cm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52
Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oJKHJldmlzaW9uIDE4MjQ5OCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZj
eHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTM1Miw3ICszNTIsNyBAQAogICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5cYnl0ZWNvZGVcVW5saW5rZWRDb2RlQmxvY2suY3BwIiAvPgogICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcVW5saW5rZWRJbnN0cnVjdGlvblN0cmVhbS5jcHAi
IC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRlY29kZVxWYWx1ZVJlY292ZXJ5LmNw
cCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFZhcmlhYmxlV2F0Y2hw
b2ludFNldC5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRlY29kZVxWYXJp
YWJsZVdyaXRlRmlyZURldGFpbC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxi
eXRlY29kZVxWaXJ0dWFsUmVnaXN0ZXIuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5cYnl0ZWNvZGVcV2F0Y2hwb2ludC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxieXRlY29tcGlsZXJcQnl0ZWNvZGVHZW5lcmF0b3IuY3BwIiAvPgpAQCAtNzIwLDYgKzcyMCw3
IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEdldHRlclNldHRlci5jcHAi
IC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXElkZW50aWZpZXIuY3BwIiAv
PgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxJbmRleGluZ1R5cGUuY3BwIiAv
PgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxJbmZlcnJlZFZhbHVlLmNwcCIg
Lz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSW5pdGlhbGl6ZVRocmVhZGlu
Zy5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEludGVuZGVkU3Ry
dWN0dXJlQ2hhaW4uY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxJ
bnRlcm5hbEZ1bmN0aW9uLmNwcCIgLz4KQEAgLTEwMDQsNyArMTAwNSw3IEBACiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxVbmxpbmtlZEluc3RydWN0aW9uU3RyZWFtLmgiIC8+
CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxWYWx1ZVByb2ZpbGUuaCIgLz4K
ICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFZhbHVlUmVjb3ZlcnkuaCIgLz4K
LSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFZhcmlhYmxlV2F0Y2hwb2ludFNl
dC5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcVmFyaWFibGVXcml0
ZUZpcmVEZXRhaWwuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFZp
cnR1YWxSZWdpc3Rlci5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVc
V2F0Y2hwb2ludC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvbXBpbGVy
XEJ5dGVjb2RlR2VuZXJhdG9yLmgiIC8+CkBAIC0xNTA3LDYgKzE1MDgsNyBAQAogICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxJbmRleGluZ0hlYWRlci5oIiAvPgogICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxJbmRleGluZ0hlYWRlcklubGluZXMuaCIgLz4KICAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSW5kZXhpbmdUeXBlLmgiIC8+CisgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEluZmVycmVkVmFsdWUuaCIgLz4KICAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSW5pdGlhbGl6ZVRocmVhZGluZy5oIiAvPgog
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxJbnQxNkFycmF5LmgiIC8+CiAgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEludDMyQXJyYXkuaCIgLz4KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxODI0OTgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29y
a2luZyBjb3B5KQpAQCAtMzgzLDYgKzM4Myw4IEBACiAJCTBGNkIxQ0M2MTg2MkM0NzgwMDg0NUQ5
NyAvKiBGVExVbndpbmRJbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjZCMUNDMjE4NjJDNDc4MDA4NDVEOTcgLyogRlRMVW53aW5kSW5mby5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNkIxQ0M5
MTg2NDFERjgwMDg0NUQ5NyAvKiBBcml0eUNoZWNrRmFpbFJldHVyblRodW5rcy5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjZCMUNDNzE4NjQxREY4
MDA4NDVEOTcgLyogQXJpdHlDaGVja0ZhaWxSZXR1cm5UaHVua3MuY3BwICovOyB9OwogCQkwRjZC
MUNDQTE4NjQxREY4MDA4NDVEOTcgLyogQXJpdHlDaGVja0ZhaWxSZXR1cm5UaHVua3MuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNkIxQ0M4MTg2NDFE
RjgwMDg0NUQ5NyAvKiBBcml0eUNoZWNrRmFpbFJldHVyblRodW5rcy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGNkM3MzUwMUFDOUY5OUYwMEJF
MTY4MiAvKiBWYXJpYWJsZVdyaXRlRmlyZURldGFpbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjZDNzM0RTFBQzlGOTlGMDBCRTE2ODIgLyogVmFy
aWFibGVXcml0ZUZpcmVEZXRhaWwuY3BwICovOyB9OworCQkwRjZDNzM1MTFBQzlGOTlGMDBCRTE2
ODIgLyogVmFyaWFibGVXcml0ZUZpcmVEZXRhaWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNkM3MzRGMUFDOUY5OUYwMEJFMTY4MiAvKiBWYXJpYWJs
ZVdyaXRlRmlyZURldGFpbC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTBGNkU4NDVBMTkwMzBCRUYwMDU2Mjc0MSAvKiBERkdWYXJpYWJsZUFjY2Vz
c0RhdGEuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY2RTg0NTkxOTAzMEJFRjAwNTYyNzQxIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YS5jcHAgKi87
IH07CiAJCTBGNkZDNzUwMTk2MTEwQTgwMEUxRDAyRCAvKiBDb21wbGV4R2V0U3RhdHVzLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNkZDNzRFMTk2
MTEwQTgwMEUxRDAyRCAvKiBDb21wbGV4R2V0U3RhdHVzLmNwcCAqLzsgfTsKIAkJMEY2RkM3NTEx
OTYxMTBBODAwRTFEMDJEIC8qIENvbXBsZXhHZXRTdGF0dXMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNkZDNzRGMTk2MTEwQTgwMEUxRDAyRCAvKiBD
b21wbGV4R2V0U3RhdHVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKQEAgLTQyNSw3ICs0MjcsNiBAQAogCQkwRjhGOTQ0MjE2Njc2MzM1MDBENjE5NzEg
LyogQ29kZVR5cGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEY4Rjk0M0YxNjY3NjMyRDAwRDYxOTcxIC8qIENvZGVUeXBlLmNwcCAqLzsgfTsKIAkJ
MEY4Rjk0NDQxNjY3NjM1NDAwRDYxOTcxIC8qIEpJVENvZGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY4Rjk0NDMxNjY3NjM1MjAwRDYxOTcxIC8q
IEpJVENvZGUuY3BwICovOyB9OwogCQkwRjhGOTQ0NjE2Njc2NEYxMDBENjE5NzEgLyogQ29kZU9y
aWdpbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjhGOTQ0NTE2Njc2NEVFMDBENjE5NzEgLyogQ29kZU9yaWdpbi5jcHAgKi87IH07Ci0JCTBGOTE4
MUM3MTg0MTVDQTUwMDU3QjY2OSAvKiBWYXJpYWJsZVdhdGNocG9pbnRTZXQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTE4MUM2MTg0MTVDQTUwMDU3
QjY2OSAvKiBWYXJpYWJsZVdhdGNocG9pbnRTZXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjkxOUQwQzE1N0VFMDlGMDA0QTRFN0QgLyogSlNT
eW1ib2xUYWJsZU9iamVjdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjkxOUQwOTE1N0VFMDlEMDA0QTRFN0QgLyogSlNTeW1ib2xUYWJsZU9iamVj
dC5jcHAgKi87IH07CiAJCTBGOTE5RDBEMTU3RUUwQTIwMDRBNEU3RCAvKiBKU1N5bWJvbFRhYmxl
T2JqZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjkxOUQwQTE1N0VFMDlEMDA0QTRFN0QgLyogSlNTeW1ib2xUYWJsZU9iamVjdC5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGOTE5RDEwMTU3RjMz
MjkwMDRBNEU3RCAvKiBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTE5RDBFMTU3RjMzMjcwMDRBNEU3
RCAvKiBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmNwcCAqLzsgfTsKQEAgLTU1MCw3ICs1NTEs
NiBAQAogCQkwRkM5N0Y0MDE4MjAyMTE5MDAyQzlCMjYgLyogREZHSnVtcFJlcGxhY2VtZW50Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkM5N0YzQTE4
MjAyMTE5MDAyQzlCMjYgLyogREZHSnVtcFJlcGxhY2VtZW50LmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZDOTdGNDExODIwMjExOTAwMkM5QjI2
IC8qIERGR1dhdGNocG9pbnRDb2xsZWN0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDOTdGM0IxODIwMjExOTAwMkM5QjI2IC8qIERG
R1dhdGNocG9pbnRDb2xsZWN0aW9uUGhhc2UuY3BwICovOyB9OwogCQkwRkM5N0Y0MjE4MjAyMTE5
MDAyQzlCMjYgLyogREZHV2F0Y2hwb2ludENvbGxlY3Rpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDOTdGM0MxODIwMjExOTAwMkM5QjI2
IC8qIERGR1dhdGNocG9pbnRDb2xsZWN0aW9uUGhhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkwRkNBOTExMzE5NUU2NkEwMDA0MjY0MzggLyog
VmFyaWFibGVXYXRjaHBvaW50U2V0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGQ0E5MTEyMTk1RTY2QTAwMDQyNjQzOCAvKiBWYXJpYWJsZVdhdGNo
cG9pbnRTZXQuY3BwICovOyB9OwogCQkwRkNDQUU0NTE2RDBDRjc0MDBEMEM2NUIgLyogUGFyc2Vy
RXJyb3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
Q0NBRTQzMTZEMENGNkUwMEQwQzY1QiAvKiBQYXJzZXJFcnJvci5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGQ0VGQUFCMTgwNEMxM0UwMDQ3MkNF
NCAvKiBGVExTYXZlUmVzdG9yZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkNFRkFBOTE4MDRDMTNFMDA0NzJDRTQgLyogRlRMU2F2ZVJlc3RvcmUu
Y3BwICovOyB9OwogCQkwRkNFRkFBQzE4MDRDMTNFMDA0NzJDRTQgLyogRlRMU2F2ZVJlc3RvcmUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQ0VGQUFB
MTgwNEMxM0UwMDQ3MkNFNCAvKiBGVExTYXZlUmVzdG9yZS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC03MTksNiArNzE5LDggQEAKIAkJMEZGNzI5
QkUxNjZBRDM2MDAwMEY1QkEzIC8qIFByb2ZpbGVyRXhlY3V0aW9uQ291bnRlci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGNzI5OUUxNjZBRDM0NzAw
MEY1QkEzIC8qIFByb2ZpbGVyRXhlY3V0aW9uQ291bnRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRjcyOUJGMTY2QUQzNjAwMDBGNUJBMyAv
KiBQcm9maWxlck9yaWdpbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZGNzI5QTAxNjZBRDM0NzAwMEY1QkEzIC8qIFByb2ZpbGVyT3JpZ2luLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZGNzI5QzAx
NjZBRDM2MDAwMEY1QkEzIC8qIFByb2ZpbGVyT3JpZ2luU3RhY2suaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRjcyOUEyMTY2QUQzNDcwMDBGNUJBMyAv
KiBQcm9maWxlck9yaWdpblN0YWNrLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKKwkJMEZGOEJERUExQUQ0Q0Y3MTAwREZFODg0IC8qIEluZmVycmVkVmFs
dWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZG
OEJERTgxQUQ0Q0Y3MTAwREZFODg0IC8qIEluZmVycmVkVmFsdWUuY3BwICovOyB9OworCQkwRkY4
QkRFQjFBRDRDRjcxMDBERkU4ODQgLyogSW5mZXJyZWRWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGOEJERTkxQUQ0Q0Y3MTAwREZFODg0IC8q
IEluZmVycmVkVmFsdWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkwRkY5MjJENDE0RjQ2QjQxMDA0MUEyNEUgLyogTExJbnRPZmZzZXRzRXh0cmFj
dG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
NDY4MEExMTRCQTdGODIwMEJGRTI3MiAvKiBMTEludE9mZnNldHNFeHRyYWN0b3IuY3BwICovOyB9
OwogCQkwRkZBNTQ5NzE2Qjg4MzUwMDBCM0E5ODIgLyogQTY0RE9wY29kZS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NTJBM0EyMjE2NTFDNjk3MDBB
ODBBRkUgLyogQTY0RE9wY29kZS5jcHAgKi87IH07CiAJCTBGRkE1NDk4MTZCODgzNTMwMEIzQTk4
MiAvKiBBNjRET3Bjb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA2NTJBM0EyMzE2NTFDNjk3MDBBODBBRkUgLyogQTY0RE9wY29kZS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xNjQ0LDcgKzE2NDYs
NiBAQAogCQlGRTIwQ0U5RTE1RjA0QTk1MDBERjM0MzAgLyogTExJbnRDTG9vcC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUyMENFOUMxNUYwNEE5NTAw
REYzNDMwIC8qIExMSW50Q0xvb3AuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQlGRTRBMzMxRjE1QkQyRTA3MDA2RjU0RjMgLyogVk1JbnNwZWN0b3Iu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU0QTMz
MUQxNUJEMkUwNzAwNkY1NEYzIC8qIFZNSW5zcGVjdG9yLmNwcCAqLzsgfTsKIAkJRkU0QTMzMjAx
NUJEMkUwNzAwNkY1NEYzIC8qIFZNSW5zcGVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTRBMzMxRTE1QkQyRTA3MDA2RjU0RjMgLyogVk1JbnNw
ZWN0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owot
CQlGRTUyNDhGOTE5MTQ0MkQ5MDBCN0ZERTQgLyogVmFyaWFibGVXYXRjaHBvaW50U2V0SW5saW5l
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU1MjQ4
RjgxOTE0NDJEOTAwQjdGREU0IC8qIFZhcmlhYmxlV2F0Y2hwb2ludFNldElubGluZXMuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGRTU5MzJBNzE4
M0M1QTI2MDBBMUVDQ0MgLyogVk1FbnRyeVNjb3BlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFNTkzMkE1MTgzQzVBMjYwMEExRUNDQyAvKiBWTUVu
dHJ5U2NvcGUuY3BwICovOyB9OwogCQlGRTU5MzJBODE4M0M1QTI2MDBBMUVDQ0MgLyogVk1FbnRy
eVNjb3BlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
RTU5MzJBNjE4M0M1QTI2MDBBMUVDQ0MgLyogVk1FbnRyeVNjb3BlLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRkU3QkE2MEYxQTFBN0NFQzAwRjFG
N0I0IC8qIEhlYXBWZXJpZmllci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBGRTdCQTYwRDFBMUE3Q0VDMDBGMUY3QjQgLyogSGVhcFZlcmlmaWVyLmNw
cCAqLzsgfTsKQEAgLTIxMDAsNiArMjEwMSw4IEBACiAJCTBGNkIxQ0MyMTg2MkM0NzgwMDg0NUQ5
NyAvKiBGVExVbndpbmRJbmZvLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZU
TFVud2luZEluZm8uaDsgcGF0aCA9IGZ0bC9GVExVbndpbmRJbmZvLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGNkIxQ0M3MTg2NDFERjgwMDg0NUQ5NyAvKiBBcml0eUNoZWNrRmFp
bFJldHVyblRodW5rcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBB
cml0eUNoZWNrRmFpbFJldHVyblRodW5rcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGNkIxQ0M4MTg2NDFERjgwMDg0NUQ5NyAvKiBBcml0eUNoZWNrRmFpbFJldHVyblRodW5r
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBcml0eUNoZWNrRmFpbFJldHVy
blRodW5rcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjZDNzM0RTFBQzlGOTlG
MDBCRTE2ODIgLyogVmFyaWFibGVXcml0ZUZpcmVEZXRhaWwuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gVmFyaWFibGVXcml0ZUZpcmVEZXRhaWwuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRjZDNzM0RjFBQzlGOTlGMDBCRTE2ODIgLyogVmFyaWFi
bGVXcml0ZUZpcmVEZXRhaWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmFy
aWFibGVXcml0ZUZpcmVEZXRhaWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2
RTg0NTkxOTAzMEJFRjAwNTYyNzQxIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdWYXJpYWJsZUFjY2Vzc0RhdGEuY3Bw
OyBwYXRoID0gZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGNkZDNzRFMTk2MTEwQTgwMEUxRDAyRCAvKiBDb21wbGV4R2V0U3RhdHVz
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvbXBsZXhHZXRTdGF0
dXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjZGQzc0RjE5NjExMEE4MDBF
MUQwMkQgLyogQ29tcGxleEdldFN0YXR1cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBDb21wbGV4R2V0U3RhdHVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0y
MTQwLDcgKzIxNDMsNiBAQAogCQkwRjhGOTQzRjE2Njc2MzJEMDBENjE5NzEgLyogQ29kZVR5cGUu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29kZVR5cGUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjhGOTQ0MzE2Njc2MzUyMDBENjE5NzEgLyog
SklUQ29kZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKSVRDb2Rl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY4Rjk0NDUxNjY3NjRFRTAwRDYx
OTcxIC8qIENvZGVPcmlnaW4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gQ29kZU9yaWdpbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGOTE4MUM2
MTg0MTVDQTUwMDU3QjY2OSAvKiBWYXJpYWJsZVdhdGNocG9pbnRTZXQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gVmFyaWFibGVXYXRjaHBvaW50U2V0Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGOTE5RDA5MTU3RUUwOUQwMDRBNEU3RCAvKiBKU1N5bWJvbFRh
YmxlT2JqZWN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTU3lt
Ym9sVGFibGVPYmplY3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjkxOUQw
QTE1N0VFMDlEMDA0QTRFN0QgLyogSlNTeW1ib2xUYWJsZU9iamVjdC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBKU1N5bWJvbFRhYmxlT2JqZWN0Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGOTE5RDBFMTU3RjMzMjcwMDRBNEU3RCAvKiBKU1NlZ21lbnRlZFZh
cmlhYmxlT2JqZWN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpT
U2VnbWVudGVkVmFyaWFibGVPYmplY3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtMjI3Niw3ICsyMjc4LDYgQEAKIAkJMEZDOTdGM0ExODIwMjExOTAwMkM5QjI2IC8qIERGR0p1
bXBSZXBsYWNlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdKdW1w
UmVwbGFjZW1lbnQuaDsgcGF0aCA9IGRmZy9ERkdKdW1wUmVwbGFjZW1lbnQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZDOTdGM0IxODIwMjExOTAwMkM5QjI2IC8qIERGR1dhdGNo
cG9pbnRDb2xsZWN0aW9uUGhhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gREZHV2F0Y2hwb2ludENvbGxlY3Rpb25QaGFzZS5jcHA7IHBhdGggPSBkZmcvREZHV2F0
Y2hwb2ludENvbGxlY3Rpb25QaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGQzk3RjNDMTgyMDIxMTkwMDJDOUIyNiAvKiBERkdXYXRjaHBvaW50Q29sbGVjdGlvblBoYXNl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1dhdGNocG9pbnRDb2xsZWN0
aW9uUGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdXYXRjaHBvaW50Q29sbGVjdGlvblBoYXNlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGQ0E5MTEyMTk1RTY2QTAwMDQyNjQzOCAvKiBW
YXJpYWJsZVdhdGNocG9pbnRTZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gVmFyaWFibGVXYXRjaHBvaW50U2V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEZDQjQwODUxNUMwQTNDMzAwNDg5MzJCIC8qIFNsb3RWaXNpdG9ySW5saW5lcy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTbG90VmlzaXRvcklubGluZXMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZDQ0FFNDMxNkQwQ0Y2RTAwRDBDNjVCIC8qIFBh
cnNlckVycm9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhcnNlckVycm9y
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQ0VGQUE5MTgwNEMxM0UwMDQ3MkNF
NCAvKiBGVExTYXZlUmVzdG9yZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBGVExTYXZlUmVzdG9yZS5jcHA7IHBhdGggPSBmdGwvRlRMU2F2ZVJlc3RvcmUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjQ0MSw2ICsyNDQyLDggQEAKIAkJMEZGNzI5
QTAxNjZBRDM0NzAwMEY1QkEzIC8qIFByb2ZpbGVyT3JpZ2luLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IFByb2ZpbGVyT3JpZ2luLmg7IHBhdGggPSBwcm9maWxlci9Qcm9maWxl
ck9yaWdpbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkY3MjlBMTE2NkFEMzQ3
MDAwRjVCQTMgLyogUHJvZmlsZXJPcmlnaW5TdGFjay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBQcm9maWxlck9yaWdpblN0YWNrLmNwcDsgcGF0aCA9IHByb2ZpbGVy
L1Byb2ZpbGVyT3JpZ2luU3RhY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RkY3MjlBMjE2NkFEMzQ3MDAwRjVCQTMgLyogUHJvZmlsZXJPcmlnaW5TdGFjay5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBQcm9maWxlck9yaWdpblN0YWNrLmg7IHBhdGggPSBw
cm9maWxlci9Qcm9maWxlck9yaWdpblN0YWNrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGRjhCREU4MUFENENGNzEwMERGRTg4NCAvKiBJbmZlcnJlZFZhbHVlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluZmVycmVkVmFsdWUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRkY4QkRFOTFBRDRDRjcxMDBERkU4ODQgLyogSW5mZXJy
ZWRWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbmZlcnJlZFZhbHVl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRjkyMkNGMTRGNDZCMTMwMDQxQTI0
RSAvKiBKU0NMTEludE9mZnNldHNFeHRyYWN0b3IgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZXhwbGljaXRGaWxlVHlwZSA9ICJjb21waWxlZC5tYWNoLW8uZXhlY3V0YWJsZSI7IGluY2x1
ZGVJbkluZGV4ID0gMDsgcGF0aCA9IEpTQ0xMSW50T2Zmc2V0c0V4dHJhY3Rvcjsgc291cmNlVHJl
ZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKIAkJMEZGQzk5RDAxODRFQzhBRDAwOUMxMEFCIC8q
IENvbnN0YW50TW9kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb25zdGFu
dE1vZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZGQzk5RDIxODRFRTMxODAw
OUMxMEFCIC8qIEFycmF5QnVmZmVyTmV1dGVyaW5nV2F0Y2hwb2ludC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBcnJheUJ1ZmZlck5ldXRlcmluZ1dhdGNocG9pbnQu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzQyMSw3ICszNDI0LDYgQEAKIAkJ
RkUyMENFOUMxNUYwNEE5NTAwREYzNDMwIC8qIExMSW50Q0xvb3AuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gTExJbnRDTG9vcC5oOyBwYXRoID0gbGxpbnQvTExJbnRDTG9vcC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTRBMzMxRDE1QkQyRTA3MDA2RjU0RjMg
LyogVk1JbnNwZWN0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
Vk1JbnNwZWN0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTRBMzMxRTE1
QkQyRTA3MDA2RjU0RjMgLyogVk1JbnNwZWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gVk1JbnNwZWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkU1
MjQ4RjgxOTE0NDJEOTAwQjdGREU0IC8qIFZhcmlhYmxlV2F0Y2hwb2ludFNldElubGluZXMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmFyaWFibGVXYXRjaHBvaW50U2V0SW5s
aW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTU5MzJBNTE4M0M1QTI2MDBB
MUVDQ0MgLyogVk1FbnRyeVNjb3BlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFZNRW50cnlTY29wZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZF
NTkzMkE2MTgzQzVBMjYwMEExRUNDQyAvKiBWTUVudHJ5U2NvcGUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gVk1FbnRyeVNjb3BlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUZFN0JBNjBEMUExQTdDRUMwMEYxRjdCNCAvKiBIZWFwVmVyaWZpZXIuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSGVhcFZlcmlmaWVyLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQ0MDksNiArNDQxMSw4IEBACiAJCQkJMEZCN0YzOEUx
NUVEOEUzODAwRjE2N0IyIC8qIEluZGV4aW5nSGVhZGVySW5saW5lcy5oICovLAogCQkJCTBGMTNF
MDRDMTYxNjRBMUIwMERDOERFNyAvKiBJbmRleGluZ1R5cGUuY3BwICovLAogCQkJCTBGQjdGMzhG
MTVFRDhFMzgwMEYxNjdCMiAvKiBJbmRleGluZ1R5cGUuaCAqLywKKwkJCQkwRkY4QkRFODFBRDRD
RjcxMDBERkU4ODQgLyogSW5mZXJyZWRWYWx1ZS5jcHAgKi8sCisJCQkJMEZGOEJERTkxQUQ0Q0Y3
MTAwREZFODg0IC8qIEluZmVycmVkVmFsdWUuaCAqLywKIAkJCQlFMTc4NjM2QzBEOUJFRUMzMDBE
NzRFNzUgLyogSW5pdGlhbGl6ZVRocmVhZGluZy5jcHAgKi8sCiAJCQkJRTE3ODYzM0YwRDlCRUMw
MDAwRDc0RTc1IC8qIEluaXRpYWxpemVUaHJlYWRpbmcuaCAqLywKIAkJCQlBN0E4QUYyQjE3QURC
NUYzMDA1QUIxNzQgLyogSW50OEFycmF5LmggKi8sCkBAIC01Mjc3LDkgKzUyODEsOCBAQAogCQkJ
CTBGOTYzQjM2MTNGQzZGREUwMDAyRDlCMiAvKiBWYWx1ZVByb2ZpbGUuaCAqLywKIAkJCQkwRjI0
RTU1NzE3Rjc0RURCMDBBQkIyMTcgLyogVmFsdWVSZWNvdmVyeS5jcHAgKi8sCiAJCQkJMEY0MjZB
NDUxNDYwQ0JBQjAwMTMxRjhGIC8qIFZhbHVlUmVjb3ZlcnkuaCAqLywKLQkJCQkwRkNBOTExMjE5
NUU2NkEwMDA0MjY0MzggLyogVmFyaWFibGVXYXRjaHBvaW50U2V0LmNwcCAqLywKLQkJCQkwRjkx
ODFDNjE4NDE1Q0E1MDA1N0I2NjkgLyogVmFyaWFibGVXYXRjaHBvaW50U2V0LmggKi8sCi0JCQkJ
RkU1MjQ4RjgxOTE0NDJEOTAwQjdGREU0IC8qIFZhcmlhYmxlV2F0Y2hwb2ludFNldElubGluZXMu
aCAqLywKKwkJCQkwRjZDNzM0RTFBQzlGOTlGMDBCRTE2ODIgLyogVmFyaWFibGVXcml0ZUZpcmVE
ZXRhaWwuY3BwICovLAorCQkJCTBGNkM3MzRGMUFDOUY5OUYwMEJFMTY4MiAvKiBWYXJpYWJsZVdy
aXRlRmlyZURldGFpbC5oICovLAogCQkJCTBGMjBDMjU4MUE4MDEzQUIwMERBMzIyOSAvKiBWaXJ0
dWFsUmVnaXN0ZXIuY3BwICovLAogCQkJCTBGNDI2QTQ2MTQ2MENCQUIwMDEzMUY4RiAvKiBWaXJ0
dWFsUmVnaXN0ZXIuaCAqLywKIAkJCQkwRjkxOUQyMjE1ODUzQ0RFMDA0QTRFN0QgLyogV2F0Y2hw
b2ludC5jcHAgKi8sCkBAIC01NTY1LDcgKzU1NjgsNiBAQAogCQkJCUM0RjRCNkY1MUEwNUM5ODQw
MDVDQUI3NiAvKiBnZW5lcmF0ZV9vYmpjX3Byb3RvY29sX3R5cGVzX2ltcGxlbWVudGF0aW9uLnB5
IGluIEhlYWRlcnMgKi8sCiAJCQkJQTU4NDAzMjAxOEJGRkJFMTAwNUEwODExIC8qIEluc3BlY3Rv
ckFnZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkyQUFCQ0RFNzE4RUYyOTQyMDAwMDIwOTYgLyog
R0NMb2dnaW5nLmggaW4gSGVhZGVycyAqLywKLQkJCQlGRTUyNDhGOTE5MTQ0MkQ5MDBCN0ZERTQg
LyogVmFyaWFibGVXYXRjaHBvaW50U2V0SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkU3
QkE2MTAxQTFBN0NFQzAwRjFGN0I0IC8qIEhlYXBWZXJpZmllci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQTVFRjlCMTQxQTFENDNGNjAwNzAyRTkwIC8qIGdlbmVyYXRlX2NwcF9iYWNrZW5kX2Rpc3Bh
dGNoZXJfaGVhZGVyLnB5IGluIEhlYWRlcnMgKi8sCiAJCQkJQzJEQTc3ODMxOEUyNTk5OTAwNjZG
Q0I2IC8qIEhlYXBJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKQEAgLTYzNDcsNiArNjM0OSw3IEBA
CiAJCQkJQTc5MERENkUxODJGNDk5NzAwNTg4ODA3IC8qIFNldEl0ZXJhdG9yUHJvdG90eXBlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBNzI5OURBMjE3RDEyODQ4MDA1RjVGRjkgLyogU2V0UHJvdG90
eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkFFNjRBQTEzNUU1RTFDMDA5NjMwMTIgLyogU0g0
QXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkY4QkRFQjFBRDRDRjcxMDBERkU4ODQg
LyogSW5mZXJyZWRWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY3MDUxN0I2QjVBQjAw
QTdBRTNGIC8qIFNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkxNEJBNzhGMTEzQUFCODhGMDA1QjdDMkMgLyogU2xvdFZpc2l0b3IuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGQjE3NjYxMTk2QjhGOUUwMDkxMDUyQSAvKiBERkdIZWFwTG9jYXRpb24uaCBpbiBI
ZWFkZXJzICovLApAQCAtNjM1NCw2ICs2MzU3LDcgQEAKIAkJCQlBNzA5RjJGMDE3QTBBQzA0MDA1
MTJFOTggLyogU2xvd1BhdGhDYWxsLmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzMwNDAwNDBFNkE3
NDk0MDA3ODZFNkEgLyogU21hbGxTdHJpbmdzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ2
NDBFMTZGNUNEMDBCMzQ0NjAgLyogU291cmNlQ29kZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY2
QzczNTExQUM5Rjk5RjAwQkUxNjgyIC8qIFZhcmlhYmxlV3JpdGVGaXJlRGV0YWlsLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCQzE4QzQ2MzBFMTZGNUNEMDBCMzQ0NjAgLyogU291cmNlUHJvdmlkZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCTcwRUMwRUMzMUFBMEQ3REEwMEI2QUFGQSAvKiBKU1N0cmlu
Z0l0ZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlFNDlEQzE2QzEyRUYyOTRFMDAxODRBMUYg
LyogU291cmNlUHJvdmlkZXJDYWNoZS5oIGluIEhlYWRlcnMgKi8sCkBAIC02NDIxLDcgKzY0MjUs
NiBAQAogCQkJCTBGMkU4OTJDMTZEMDI4QUQwMDlFNEZEMiAvKiBVbnVzZWRQb2ludGVyLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjk2M0IzODEzRkM2RkU5MDAwMkQ5QjIgLyogVmFsdWVQcm9maWxl
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjQyNkE0ODE0NjBDQkIzMDAxMzFGOEYgLyogVmFsdWVS
ZWNvdmVyeS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMEY5MTgxQzcxODQxNUNBNTAwNTdCNjY5IC8q
IFZhcmlhYmxlV2F0Y2hwb2ludFNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5QzVFNUYxOEUz
NUY1RTAwRDQzMUMzIC8qIEZUTERXQVJGUmVnaXN0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
NDI2QTQ5MTQ2MENCQjcwMDEzMUY4RiAvKiBWaXJ0dWFsUmVnaXN0ZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCUJDMThDNDIwMEUxNkY1Q0QwMEIzNDQ2MCAvKiBWTS5oIGluIEhlYWRlcnMgKi8sCkBA
IC02OTYzLDYgKzY5NjYsNyBAQAogCQkJCUE3N0YxODIxMTY0MDg4QjIwMDY0MEE0NyAvKiBDb2Rl
Q2FjaGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY4Rjk0NDYxNjY3NjRGMTAwRDYxOTcxIC8q
IENvZGVPcmlnaW4uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODZCNTgyNjcxNEQyNzk2QzAwQTlD
MzA2IC8qIENvZGVQcm9maWxlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGNkM3MzUwMUFDOUY5
OUYwMEJFMTY4MiAvKiBWYXJpYWJsZVdyaXRlRmlyZURldGFpbC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk4NkI1ODI2OTE0RDI3OTcwMDBBOUMzMDYgLyogQ29kZVByb2ZpbGluZy5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRjhGOTQzQzE2Njc2MzEzMDBENjE5NzEgLyogQ29kZVNwZWNpYWxpemF0
aW9uS2luZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjhGOTQ0MjE2Njc2MzM1MDBENjE5NzEg
LyogQ29kZVR5cGUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03MDI3LDcgKzcwMzEsNiBAQAogCQkJ
CUMyOTgxRkQ4MTdCQUVFNEIwMEEzQkM5OCAvKiBERkdEZXNpcmVkV2Vha1JlZmVyZW5jZXMuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQzI5ODFGREMxN0JBRkY0NDAwQTNCQzk4IC8qIERGR0Rlc2ly
ZWRXcml0ZUJhcnJpZXJzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjQyNzY0MTU5MUExQ0Mw
MDRDQjlGRiAvKiBERkdEaXNhc3NlbWJsZXIuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMEZDQTkx
MTMxOTVFNjZBMDAwNDI2NDM4IC8qIFZhcmlhYmxlV2F0Y2hwb2ludFNldC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRkQ4MUFEMjE1NEZCNEVFMDA5ODNFNzIgLyogREZHRG9taW5hdG9ycy5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRkQzQzgyNjE0MTE1RDQwMDBGRDgxQ0IgLyogREZHRHJpdmVy
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkI5Q0UyMTlEMEJBN0QwMEIxRDFCNSAvKiBERkdB
dmFpbGFiaWxpdHlNYXAuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03MzMxLDYgKzczMzQsNyBAQAog
CQkJCTBGMkI2NkZFMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1R5cGVkQXJyYXlzLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTBGRjA1NEY5MUFDMzVCNDQwMEU1QkU1NyAvKiBFeGVjdXRhYmxlQWxsb2Nh
dGlvbkZ1enouY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODZFM0M2MUExNjdCQUJFRTAwNkQ3NjBB
IC8qIEpTVmFsdWUubW0gaW4gU291cmNlcyAqLywKKwkJCQkwRkY4QkRFQTFBRDRDRjcxMDBERkU4
ODQgLyogSW5mZXJyZWRWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNEJENUEzMjBBM0U5
MUY2MDBCQUY1OUMgLyogSlNWYWx1ZVJlZi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlE
NzEwN0VDMzc2MDA0MjdBNDggLyogSlNFbnZpcm9ubWVudFJlY29yZC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk4NkUzQzYxQzE2N0JBQkVFMDA2RDc2MEEgLyogSlNWaXJ0dWFsTWFjaGluZS5tbSBp
biBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVj
b2RlTGlzdC5qc29uCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9CeXRlY29kZUxpc3QuanNvbgkocmV2aXNpb24gMTgyNDk4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5qc29uCSh3b3JraW5nIGNvcHkpCkBAIC02LDcg
KzYsNiBAQAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfZW50ZXIiLCAibGVuZ3RoIiA6IDEg
fSwKICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX2NyZWF0ZV9sZXhpY2FsX2Vudmlyb25tZW50
IiwgImxlbmd0aCIgOiAzIH0sCiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9nZXRfc2NvcGUi
LCAibGVuZ3RoIiA6IDIgfSwKLSAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX3RvdWNoX2VudHJ5
IiwgImxlbmd0aCIgOiAxIH0sCiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9jcmVhdGVfZGly
ZWN0X2FyZ3VtZW50cyIsICJsZW5ndGgiIDogMiB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAi
b3BfY3JlYXRlX3Njb3BlZF9hcmd1bWVudHMiLCAibGVuZ3RoIiA6IDMgfSwKICAgICAgICAgICAg
IHsgIm5hbWUiIDogIm9wX2NyZWF0ZV9vdXRfb2ZfYmFuZF9hcmd1bWVudHMiLCAibGVuZ3RoIiA6
IDIgfSwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZVVzZURl
Zi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29k
ZVVzZURlZi5oCShyZXZpc2lvbiAxODI0OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuaAkod29ya2luZyBjb3B5KQpAQCAtNTAsNyArNTAsNiBAQCB2
b2lkIGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVPZmZzZXQoCiAgICAgY2FzZSBvcF9uZXdfb2JqZWN0
OgogICAgIGNhc2Ugb3BfZW50ZXI6CiAgICAgY2FzZSBvcF9jYXRjaDoKLSAgICBjYXNlIG9wX3Rv
dWNoX2VudHJ5OgogICAgIGNhc2Ugb3BfcHJvZmlsZV9jb250cm9sX2Zsb3c6CiAgICAgY2FzZSBv
cF9jcmVhdGVfZGlyZWN0X2FyZ3VtZW50czoKICAgICBjYXNlIG9wX2NyZWF0ZV9vdXRfb2ZfYmFu
ZF9hcmd1bWVudHM6CkBAIC0yNzgsNyArMjc3LDYgQEAgdm9pZCBjb21wdXRlRGVmc0ZvckJ5dGVj
b2RlT2Zmc2V0KENvZGVCbAogICAgIGNhc2Ugb3BfcHV0X2J5X2luZGV4OgogICAgIGNhc2Ugb3Bf
cHJvZmlsZV90eXBlOgogICAgIGNhc2Ugb3BfcHJvZmlsZV9jb250cm9sX2Zsb3c6Ci0gICAgY2Fz
ZSBvcF90b3VjaF9lbnRyeToKICAgICBjYXNlIG9wX3B1dF90b19hcmd1bWVudHM6CiAjZGVmaW5l
IExMSU5UX0hFTFBFUl9PUENPREVTKG9wY29kZSwgbGVuZ3RoKSBjYXNlIG9wY29kZToKICAgICAg
ICAgRk9SX0VBQ0hfTExJTlRfT1BDT0RFX0VYVEVOU0lPTihMTElOVF9IRUxQRVJfT1BDT0RFUyk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAko
cmV2aXNpb24gMTgyNDk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVC
bG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc1OCwxMCArNzU4LDYgQEAgdm9pZCBDb2RlQmxv
Y2s6OmR1bXBCeXRlY29kZSgKICAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4
ZWMsIGxvY2F0aW9uLCBpdCwgImVudGVyIik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQotICAgICAgICBjYXNlIG9wX3RvdWNoX2VudHJ5OiB7Ci0gICAgICAgICAgICBwcmludExvY2F0
aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJ0b3VjaF9lbnRyeSIpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KICAgICAgICAgY2FzZSBvcF9jcmVhdGVfbGV4aWNhbF9l
bnZpcm9ubWVudDogewogICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7CiAg
ICAgICAgICAgICBpbnQgcjEgPSAoKytpdCktPnUub3BlcmFuZDsKQEAgLTE5NTcsNyArMTk1Myw3
IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUqIG8KICAgICAgICAgICAg
IGluc3RydWN0aW9uc1tpICsgNF0udS5vcGVyYW5kID0gb3AudHlwZTsKICAgICAgICAgICAgIGlu
c3RydWN0aW9uc1tpICsgNV0udS5vcGVyYW5kID0gb3AuZGVwdGg7CiAgICAgICAgICAgICBpZiAo
b3AubGV4aWNhbEVudmlyb25tZW50KQotICAgICAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsg
Nl0udS5sZXhpY2FsRW52aXJvbm1lbnQuc2V0KCp2bSgpLCBvd25lckV4ZWN1dGFibGUsIG9wLmxl
eGljYWxFbnZpcm9ubWVudCk7CisgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyA2XS51
LnN5bWJvbFRhYmxlLnNldCgqdm0oKSwgb3duZXJFeGVjdXRhYmxlLCBvcC5sZXhpY2FsRW52aXJv
bm1lbnQtPnN5bWJvbFRhYmxlKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIApA
QCAtMTk4NSw3ICsxOTgxLDYgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soU2NyaXB0RXhlY3V0YWJs
ZSogbwogICAgICAgICAgICAgZWxzZSBpZiAob3Auc3RydWN0dXJlKQogICAgICAgICAgICAgICAg
IGluc3RydWN0aW9uc1tpICsgNV0udS5zdHJ1Y3R1cmUuc2V0KCp2bSgpLCBvd25lckV4ZWN1dGFi
bGUsIG9wLnN0cnVjdHVyZSk7CiAgICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIDZdLnUucG9p
bnRlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KG9wLm9wZXJhbmQpOwotCiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQogCkBAIC0yMDAxLDcgKzE5OTYsNyBAQCBDb2RlQmxvY2s6OkNv
ZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBvCiAgICAgICAgICAgICAgICAgICAgIENvbmN1cnJl
bnRKSVRMb2NrZXIgbG9ja2VyKG1fc3ltYm9sVGFibGUtPm1fbG9jayk7CiAgICAgICAgICAgICAg
ICAgICAgIFN5bWJvbFRhYmxlOjpNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX3N5bWJvbFRhYmxlLT5m
aW5kKGxvY2tlciwgdWlkKTsKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGl0ZXIgIT0gbV9z
eW1ib2xUYWJsZS0+ZW5kKGxvY2tlcikpOwotICAgICAgICAgICAgICAgICAgICBpdGVyLT52YWx1
ZS5wcmVwYXJlVG9XYXRjaChzeW1ib2xUYWJsZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgaXRl
ci0+dmFsdWUucHJlcGFyZVRvV2F0Y2goKTsKICAgICAgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rp
b25zW2kgKyA1XS51LndhdGNocG9pbnRTZXQgPSBpdGVyLT52YWx1ZS53YXRjaHBvaW50U2V0KCk7
CiAgICAgICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgICAgIGluc3RydWN0aW9u
c1tpICsgNV0udS53YXRjaHBvaW50U2V0ID0gbnVsbHB0cjsKQEAgLTI1NDYsMTIgKzI1NDEsMTUg
QEAgdm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KAogICAgICAgICAgICAg
ICAgICAgICBjdXJJbnN0cnVjdGlvblszXS51LnRvVGhpc1N0YXR1cywgVG9UaGlzQ2xlYXJlZEJ5
R0MpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBvcF9yZXNvbHZl
X3Njb3BlOiB7Ci0gICAgICAgICAgICAgICAgV3JpdGVCYXJyaWVyQmFzZTxKU0xleGljYWxFbnZp
cm9ubWVudD4mIGxleGljYWxFbnZpcm9ubWVudCA9IGN1ckluc3RydWN0aW9uWzZdLnUubGV4aWNh
bEVudmlyb25tZW50OwotICAgICAgICAgICAgICAgIGlmICghbGV4aWNhbEVudmlyb25tZW50IHx8
IEhlYXA6OmlzTWFya2VkKGxleGljYWxFbnZpcm9ubWVudC5nZXQoKSkpCisgICAgICAgICAgICAg
ICAgLy8gUmlnaHQgbm93IHRoaXMgaXNuJ3Qgc3RyaWN0bHkgbmVjZXNzYXJ5LiBBbnkgc3ltYm9s
IHRhYmxlcyB0aGF0IHRoaXMgd2lsbCByZWZlciB0bworICAgICAgICAgICAgICAgIC8vIGFyZSBm
b3Igb3V0ZXIgZnVuY3Rpb25zLCBhbmQgd2UgcmVmZXIgdG8gdGhvc2UgZnVuY3Rpb25zIHN0cm9u
Z2x5LCBhbmQgdGhleSByZWZlcgorICAgICAgICAgICAgICAgIC8vIHRvIHRoZSBzeW1ib2wgdGFi
bGUgc3Ryb25nbHkuIEJ1dCBpdCdzIG5pY2UgdG8gYmUgb24gdGhlIHNhZmUgc2lkZS4KKyAgICAg
ICAgICAgICAgICBXcml0ZUJhcnJpZXJCYXNlPFN5bWJvbFRhYmxlPiYgc3ltYm9sVGFibGUgPSBj
dXJJbnN0cnVjdGlvbls2XS51LnN5bWJvbFRhYmxlOworICAgICAgICAgICAgICAgIGlmICghc3lt
Ym9sVGFibGUgfHwgSGVhcDo6aXNNYXJrZWQoc3ltYm9sVGFibGUuZ2V0KCkpKQogICAgICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9T
UigpKQotICAgICAgICAgICAgICAgICAgICBkYXRhTG9nRigiQ2xlYXJpbmcgZGVhZCBsZXhpY2Fs
RW52aXJvbm1lbnQgJXAuXG4iLCBsZXhpY2FsRW52aXJvbm1lbnQuZ2V0KCkpOwotICAgICAgICAg
ICAgICAgIGxleGljYWxFbnZpcm9ubWVudC5jbGVhcigpOworICAgICAgICAgICAgICAgICAgICBk
YXRhTG9nRigiQ2xlYXJpbmcgZGVhZCBzeW1ib2xUYWJsZSAlcC5cbiIsIHN5bWJvbFRhYmxlLmdl
dCgpKTsKKyAgICAgICAgICAgICAgICBzeW1ib2xUYWJsZS5jbGVhcigpOwogICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgY2FzZSBvcF9nZXRfZnJvbV9z
Y29wZToKQEAgLTM4MTUsNiArMzgxMywxOCBAQCBTdHJpbmcgQ29kZUJsb2NrOjpuYW1lRm9yUmVn
aXN0ZXIoVmlydHVhCiAgICAgcmV0dXJuICIiOwogfQogCitWYWx1ZVByb2ZpbGUqIENvZGVCbG9j
azo6dmFsdWVQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQoaW50IGJ5dGVjb2RlT2Zmc2V0KQorewor
ICAgIFZhbHVlUHJvZmlsZSogcmVzdWx0ID0gYmluYXJ5U2VhcmNoPFZhbHVlUHJvZmlsZSwgaW50
PigKKyAgICAgICAgbV92YWx1ZVByb2ZpbGVzLCBtX3ZhbHVlUHJvZmlsZXMuc2l6ZSgpLCBieXRl
Y29kZU9mZnNldCwKKyAgICAgICAgZ2V0VmFsdWVQcm9maWxlQnl0ZWNvZGVPZmZzZXQ8VmFsdWVQ
cm9maWxlPik7CisgICAgQVNTRVJUKHJlc3VsdC0+bV9ieXRlY29kZU9mZnNldCAhPSAtMSk7Cisg
ICAgQVNTRVJUKGluc3RydWN0aW9ucygpW2J5dGVjb2RlT2Zmc2V0ICsgb3Bjb2RlTGVuZ3RoKAor
ICAgICAgICBtX3ZtLT5pbnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQoCisgICAgICAgICAgICBpbnN0
cnVjdGlvbnMoKVtieXRlY29kZU9mZnNldF0udS5vcGNvZGUpKSAtIDFdLnUucHJvZmlsZSA9PSBy
ZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIHZvaWQgQ29kZUJsb2NrOjp2YWxpZGF0
ZSgpCiB7CiAgICAgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzIGxpdmVuZXNzKHRoaXMpOyAvLyBD
b21wdXRlIGRpcmVjdGx5IGZyb20gc2NyYXRjaCBzbyBpdCBkb2Vzbid0IGVmZmVjdCBDb2RlQmxv
Y2sgZm9vdHByaW50LgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVC
bG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2Rl
QmxvY2suaAkocmV2aXNpb24gMTgyNDk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0zODYsMTcgKzM4Niw3IEBAIHB1Ymxp
YzoKIAogICAgIHVuc2lnbmVkIG51bWJlck9mVmFsdWVQcm9maWxlcygpIHsgcmV0dXJuIG1fdmFs
dWVQcm9maWxlcy5zaXplKCk7IH0KICAgICBWYWx1ZVByb2ZpbGUqIHZhbHVlUHJvZmlsZShpbnQg
aW5kZXgpIHsgcmV0dXJuICZtX3ZhbHVlUHJvZmlsZXNbaW5kZXhdOyB9Ci0gICAgVmFsdWVQcm9m
aWxlKiB2YWx1ZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChpbnQgYnl0ZWNvZGVPZmZzZXQpCi0g
ICAgewotICAgICAgICBWYWx1ZVByb2ZpbGUqIHJlc3VsdCA9IGJpbmFyeVNlYXJjaDxWYWx1ZVBy
b2ZpbGUsIGludD4oCi0gICAgICAgICAgICBtX3ZhbHVlUHJvZmlsZXMsIG1fdmFsdWVQcm9maWxl
cy5zaXplKCksIGJ5dGVjb2RlT2Zmc2V0LAotICAgICAgICAgICAgZ2V0VmFsdWVQcm9maWxlQnl0
ZWNvZGVPZmZzZXQ8VmFsdWVQcm9maWxlPik7Ci0gICAgICAgIEFTU0VSVChyZXN1bHQtPm1fYnl0
ZWNvZGVPZmZzZXQgIT0gLTEpOwotICAgICAgICBBU1NFUlQoaW5zdHJ1Y3Rpb25zKClbYnl0ZWNv
ZGVPZmZzZXQgKyBvcGNvZGVMZW5ndGgoCi0gICAgICAgICAgICBtX3ZtLT5pbnRlcnByZXRlci0+
Z2V0T3Bjb2RlSUQoCi0gICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKClbYnl0ZWNvZGVPZmZz
ZXRdLnUub3Bjb2RlKSkgLSAxXS51LnByb2ZpbGUgPT0gcmVzdWx0KTsKLSAgICAgICAgcmV0dXJu
IHJlc3VsdDsKLSAgICB9CisgICAgVmFsdWVQcm9maWxlKiB2YWx1ZVByb2ZpbGVGb3JCeXRlY29k
ZU9mZnNldChpbnQgYnl0ZWNvZGVPZmZzZXQpOwogICAgIFNwZWN1bGF0ZWRUeXBlIHZhbHVlUHJv
ZmlsZVByZWRpY3Rpb25Gb3JCeXRlY29kZU9mZnNldChjb25zdCBDb25jdXJyZW50SklUTG9ja2Vy
JiBsb2NrZXIsIGludCBieXRlY29kZU9mZnNldCkKICAgICB7CiAgICAgICAgIHJldHVybiB2YWx1
ZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChieXRlY29kZU9mZnNldCktPmNvbXB1dGVVcGRhdGVk
UHJlZGljdGlvbihsb2NrZXIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVPcmlnaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlT3JpZ2luLmNwcAkocmV2aXNpb24gMTgyNDk4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDEsNiAr
MTQxLDE4IEBAIHZvaWQgQ29kZU9yaWdpbjo6ZHVtcEluQ29udGV4dChQcmludFN0cmUKICAgICBk
dW1wKG91dCk7CiB9CiAKK0pTRnVuY3Rpb24qIElubGluZUNhbGxGcmFtZTo6Y2FsbGVlQ29uc3Rh
bnQoKSBjb25zdAoreworICAgIGlmIChjYWxsZWVSZWNvdmVyeS5pc0NvbnN0YW50KCkpCisgICAg
ICAgIHJldHVybiBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNhbGxlZVJlY292ZXJ5LmNvbnN0YW50KCkp
OworICAgIHJldHVybiBudWxscHRyOworfQorCit2b2lkIElubGluZUNhbGxGcmFtZTo6dmlzaXRB
Z2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgdmlzaXRvci5hcHBlbmQoJmV4
ZWN1dGFibGUpOworfQorCiBKU0Z1bmN0aW9uKiBJbmxpbmVDYWxsRnJhbWU6OmNhbGxlZUZvckNh
bGxGcmFtZShFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGpzQ2FzdDxKU0Z1
bmN0aW9uKj4oY2FsbGVlUmVjb3ZlcnkucmVjb3ZlcihleGVjKSk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmgJKHJldmlzaW9uIDE4MjQ5OCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI4LDcgKzI4LDYgQEAKIAogI2luY2x1ZGUgIkNvZGVCbG9ja0hhc2guaCIKICNpbmNs
dWRlICJDb2RlU3BlY2lhbGl6YXRpb25LaW5kLmgiCi0jaW5jbHVkZSAiSlNGdW5jdGlvbi5oIgog
I2luY2x1ZGUgIlZhbHVlUmVjb3ZlcnkuaCIKICNpbmNsdWRlICJXcml0ZUJhcnJpZXIuaCIKICNp
bmNsdWRlIDx3dGYvQml0VmVjdG9yLmg+CkBAIC0yMDcsMTcgKzIwNiw4IEBAIHN0cnVjdCBJbmxp
bmVDYWxsRnJhbWUgewogICAgIAogICAgIENvZGVTcGVjaWFsaXphdGlvbktpbmQgc3BlY2lhbGl6
YXRpb25LaW5kKCkgY29uc3QgeyByZXR1cm4gc3BlY2lhbGl6YXRpb25LaW5kRm9yKHN0YXRpY19j
YXN0PEtpbmQ+KGtpbmQpKTsgfQogCi0gICAgSlNGdW5jdGlvbiogY2FsbGVlQ29uc3RhbnQoKSBj
b25zdAotICAgIHsKLSAgICAgICAgaWYgKGNhbGxlZVJlY292ZXJ5LmlzQ29uc3RhbnQoKSkKLSAg
ICAgICAgICAgIHJldHVybiBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNhbGxlZVJlY292ZXJ5LmNvbnN0
YW50KCkpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICB2b2lkIHZpc2l0QWdncmVn
YXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQotICAgIHsKLSAgICAgICAgdmlzaXRvci5hcHBlbmQo
JmV4ZWN1dGFibGUpOwotICAgIH0KKyAgICBKU0Z1bmN0aW9uKiBjYWxsZWVDb25zdGFudCgpIGNv
bnN0OworICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKICAgICAKICAgICAv
LyBHZXQgdGhlIGNhbGxlZSBnaXZlbiBhIG1hY2hpbmUgY2FsbCBmcmFtZSB0byB3aGljaCB0aGlz
IElubGluZUNhbGxGcmFtZSBiZWxvbmdzLgogICAgIEpTRnVuY3Rpb24qIGNhbGxlZUZvckNhbGxG
cmFtZShFeGVjU3RhdGUqKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9JbnN0cnVjdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9JbnN0cnVjdGlvbi5oCShyZXZpc2lvbiAxODI0OTgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvSW5zdHJ1Y3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiAr
MzIsNyBAQAogI2luY2x1ZGUgIkJhc2ljQmxvY2tMb2NhdGlvbi5oIgogI2luY2x1ZGUgIk1hY3Jv
QXNzZW1ibGVyLmgiCiAjaW5jbHVkZSAiT3Bjb2RlLmgiCisjaW5jbHVkZSAiU3ltYm9sVGFibGUu
aCIKICNpbmNsdWRlICJUeXBlTG9jYXRpb24uaCIKICNpbmNsdWRlICJQcm9wZXJ0eVNsb3QuaCIK
ICNpbmNsdWRlICJTcGVjaWFsUG9pbnRlci5oIgpAQCAtNDYsNyArNDcsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKIGNsYXNzIEFycmF5QWxsb2NhdGlvblByb2ZpbGU7CiBjbGFzcyBBcnJheVByb2ZpbGU7
CiBjbGFzcyBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZTsKLWNsYXNzIFZhcmlhYmxlV2F0Y2hwb2lu
dFNldDsKK2NsYXNzIFdhdGNocG9pbnRTZXQ7CiBzdHJ1Y3QgTExJbnRDYWxsTGlua0luZm87CiBz
dHJ1Y3QgVmFsdWVQcm9maWxlOwogCkBAIC0xMDYsNiArMTA3LDcgQEAgc3RydWN0IEluc3RydWN0
aW9uIHsKICAgICAgICAgT3Bjb2RlIG9wY29kZTsKICAgICAgICAgaW50IG9wZXJhbmQ7CiAgICAg
ICAgIFdyaXRlQmFycmllckJhc2U8U3RydWN0dXJlPiBzdHJ1Y3R1cmU7CisgICAgICAgIFdyaXRl
QmFycmllckJhc2U8U3ltYm9sVGFibGU+IHN5bWJvbFRhYmxlOwogICAgICAgICBXcml0ZUJhcnJp
ZXJCYXNlPFN0cnVjdHVyZUNoYWluPiBzdHJ1Y3R1cmVDaGFpbjsKICAgICAgICAgV3JpdGVCYXJy
aWVyQmFzZTxKU0NlbGw+IGpzQ2VsbDsKICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiB2
YXJpYWJsZVBvaW50ZXI7CkBAIC0xMTcsOCArMTE5LDcgQEAgc3RydWN0IEluc3RydWN0aW9uIHsK
ICAgICAgICAgQXJyYXlQcm9maWxlKiBhcnJheVByb2ZpbGU7CiAgICAgICAgIEFycmF5QWxsb2Nh
dGlvblByb2ZpbGUqIGFycmF5QWxsb2NhdGlvblByb2ZpbGU7CiAgICAgICAgIE9iamVjdEFsbG9j
YXRpb25Qcm9maWxlKiBvYmplY3RBbGxvY2F0aW9uUHJvZmlsZTsKLSAgICAgICAgVmFyaWFibGVX
YXRjaHBvaW50U2V0KiB3YXRjaHBvaW50U2V0OwotICAgICAgICBXcml0ZUJhcnJpZXJCYXNlPEpT
TGV4aWNhbEVudmlyb25tZW50PiBsZXhpY2FsRW52aXJvbm1lbnQ7CisgICAgICAgIFdhdGNocG9p
bnRTZXQqIHdhdGNocG9pbnRTZXQ7CiAgICAgICAgIHZvaWQqIHBvaW50ZXI7CiAgICAgICAgIGJv
b2wqIHByZWRpY2F0ZVBvaW50ZXI7CiAgICAgICAgIFRvVGhpc1N0YXR1cyB0b1RoaXNTdGF0dXM7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFyaWFibGVXYXRjaHBvaW50
U2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFy
aWFibGVXYXRjaHBvaW50U2V0LmNwcAkocmV2aXNpb24gMTgyNDk4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1ZhcmlhYmxlV2F0Y2hwb2ludFNldC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNDkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVmFyaWFibGVXYXRjaHBv
aW50U2V0LmgiCi0KLSNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCi0KLW5hbWVzcGFjZSBKU0Mgewot
Ci12b2lkIFZhcmlhYmxlV3JpdGVGaXJlRGV0YWlsOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNv
bnN0Ci17Ci0gICAgb3V0LnByaW50KCJXcml0ZSB0byAiLCBtX25hbWUsICIgaW4gIiwgSlNWYWx1
ZShtX29iamVjdCkpOwotfQotCi12b2lkIFZhcmlhYmxlV2F0Y2hwb2ludFNldDo6bm90aWZ5V3Jp
dGUoVk0mIHZtLCBKU1ZhbHVlIHZhbHVlLCBKU09iamVjdCogYmFzZU9iamVjdCwgY29uc3QgUHJv
cGVydHlOYW1lJiBwcm9wZXJ0eU5hbWUpCi17Ci0gICAgbm90aWZ5V3JpdGUodm0sIHZhbHVlLCBW
YXJpYWJsZVdyaXRlRmlyZURldGFpbChiYXNlT2JqZWN0LCBwcm9wZXJ0eU5hbWUpKTsKLX0KLQot
dm9pZCBWYXJpYWJsZVdhdGNocG9pbnRTZXQ6Om5vdGlmeVdyaXRlKFZNJiB2bSwgSlNWYWx1ZSB2
YWx1ZSwgY29uc3QgY2hhciogcmVhc29uKQotewotICAgIG5vdGlmeVdyaXRlKHZtLCB2YWx1ZSwg
U3RyaW5nRmlyZURldGFpbChyZWFzb24pKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYXJpYWJsZVdhdGNocG9pbnRTZXQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFyaWFibGVX
YXRjaHBvaW50U2V0LmgJKHJldmlzaW9uIDE4MjQ5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9WYXJpYWJsZVdhdGNocG9pbnRTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMSwx
MTAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE0IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgot
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAot
ICovCi0KLSNpZm5kZWYgVmFyaWFibGVXYXRjaHBvaW50U2V0X2gKLSNkZWZpbmUgVmFyaWFibGVX
YXRjaHBvaW50U2V0X2gKLQotI2luY2x1ZGUgIldhdGNocG9pbnQuaCIKLSNpbmNsdWRlICJXcml0
ZUJhcnJpZXIuaCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIEpTT2JqZWN0OwotY2xhc3Mg
U3ltYm9sVGFibGU7Ci0KLWNsYXNzIFZhcmlhYmxlV3JpdGVGaXJlRGV0YWlsIDogcHVibGljIEZp
cmVEZXRhaWwgewotcHVibGljOgotICAgIFZhcmlhYmxlV3JpdGVGaXJlRGV0YWlsKEpTT2JqZWN0
KiBvYmplY3QsIGNvbnN0IFByb3BlcnR5TmFtZSYgbmFtZSkKLSAgICAgICAgOiBtX29iamVjdChv
YmplY3QpCi0gICAgICAgICwgbV9uYW1lKG5hbWUpCi0gICAgewotICAgIH0KLSAgICAKLSAgICB2
aXJ0dWFsIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOwotCi1wcml2YXRl
OgotICAgIEpTT2JqZWN0KiBtX29iamVjdDsKLSAgICBjb25zdCBQcm9wZXJ0eU5hbWUmIG1fbmFt
ZTsKLX07Ci0KLWNsYXNzIFZhcmlhYmxlV2F0Y2hwb2ludFNldCA6IHB1YmxpYyBXYXRjaHBvaW50
U2V0IHsKLSAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwotcHVibGljOgot
ICAgIFZhcmlhYmxlV2F0Y2hwb2ludFNldChTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUpCi0gICAg
ICAgIDogV2F0Y2hwb2ludFNldChDbGVhcldhdGNocG9pbnQpCi0gICAgICAgICwgbV9zeW1ib2xU
YWJsZShzeW1ib2xUYWJsZSkKLSAgICB7Ci0gICAgfQotICAgIAotICAgIH5WYXJpYWJsZVdhdGNo
cG9pbnRTZXQoKSB7IH0KLSAgICAKLSAgICAvLyBGb3IgdGhlIHB1cnBvc2Ugb2YgZGVjaWRpbmcg
d2hldGhlciBvciBub3QgdG8gd2F0Y2ggdGhpcyB2YXJpYWJsZSwgeW91IG9ubHkgbmVlZAotICAg
IC8vIHRvIGluc3BlY3QgaW5mZXJyZWRWYWx1ZSgpLiBJZiB0aGlzIHJldHVybnMgc29tZXRoaW5n
IG90aGVyIHRoYW4gdGhlIGVtcHR5Ci0gICAgLy8gdmFsdWUsIHRoZW4gaXQgbWVhbnMgdGhhdCBh
dCBhbGwgZnV0dXJlIHNhZmVwb2ludHMsIHRoaXMgd2F0Y2hwb2ludCBzZXQgd2lsbCBiZQotICAg
IC8vIGluIG9uZSBvZiB0aGVzZSBzdGF0ZXM6Ci0gICAgLy8KLSAgICAvLyAgICBJc1dhdGNoZWQ6
IGluIHRoaXMgY2FzZSwgdGhlIHZhcmlhYmxlJ3MgdmFsdWUgbXVzdCBzdGlsbCBiZSB0aGUKLSAg
ICAvLyAgICAgICAgaW5mZXJyZWRWYWx1ZS4KLSAgICAvLwotICAgIC8vICAgIElzSW52YWxpZGF0
ZWQ6IGluIHRoaXMgY2FzZSB0aGUgdmFyaWFibGUncyB2YWx1ZSBtYXkgYmUgYW55dGhpbmcgYnV0
IHlvdSdsbAotICAgIC8vICAgICAgICBlaXRoZXIgbm90aWNlIHRoYXQgaXQncyBpbnZhbGlkYXRl
ZCBhbmQgbm90IGluc3RhbGwgdGhlIHdhdGNocG9pbnQsIG9yCi0gICAgLy8gICAgICAgIHlvdSB3
aWxsIGhhdmUgYmVlbiBub3RpZmllZCB0aGF0IHRoZSB3YXRjaHBvaW50IHdhcyBmaXJlZC4KLSAg
ICBKU1ZhbHVlIGluZmVycmVkVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX2luZmVycmVkVmFsdWUu
Z2V0KCk7IH0KLSAgICAKLSAgICB2b2lkIG5vdGlmeVdyaXRlKFZNJiwgSlNWYWx1ZSwgY29uc3Qg
RmlyZURldGFpbCYpOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgbm90aWZ5V3JpdGUoVk0m
LCBKU1ZhbHVlLCBKU09iamVjdCogYmFzZU9iamVjdCwgY29uc3QgUHJvcGVydHlOYW1lJik7Ci0g
ICAgdm9pZCBub3RpZnlXcml0ZShWTSYsIEpTVmFsdWUsIGNvbnN0IGNoYXIqIHJlYXNvbik7Ci0g
ICAgCi0gICAgdm9pZCBpbnZhbGlkYXRlKGNvbnN0IEZpcmVEZXRhaWwmIGRldGFpbCkKLSAgICB7
Ci0gICAgICAgIG1faW5mZXJyZWRWYWx1ZS5jbGVhcigpOwotICAgICAgICBXYXRjaHBvaW50U2V0
OjppbnZhbGlkYXRlKGRldGFpbCk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgZmluYWxpemVVbmNv
bmRpdGlvbmFsbHkoY29uc3QgRmlyZURldGFpbCYgZGV0YWlsKQotICAgIHsKLSAgICAgICAgQVNT
RVJUKCEhbV9pbmZlcnJlZFZhbHVlID09IChzdGF0ZSgpID09IElzV2F0Y2hlZCkpOwotICAgICAg
ICBpZiAoIW1faW5mZXJyZWRWYWx1ZSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgSlNW
YWx1ZSBpbmZlcnJlZFZhbHVlID0gbV9pbmZlcnJlZFZhbHVlLmdldCgpOwotICAgICAgICBpZiAo
IWluZmVycmVkVmFsdWUuaXNDZWxsKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIEpT
Q2VsbCogY2VsbCA9IGluZmVycmVkVmFsdWUuYXNDZWxsKCk7Ci0gICAgICAgIGlmIChIZWFwOjpp
c01hcmtlZChjZWxsKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaW52YWxpZGF0ZShk
ZXRhaWwpOwotICAgIH0KLQotICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogYWRkcmVzc09mSW5m
ZXJyZWRWYWx1ZSgpIHsgcmV0dXJuICZtX2luZmVycmVkVmFsdWU7IH0KLSAgICAKLXByaXZhdGU6
Ci0gICAgU3ltYm9sVGFibGUmIG1fc3ltYm9sVGFibGU7Ci0gICAgV3JpdGVCYXJyaWVyPFVua25v
d24+IG1faW5mZXJyZWRWYWx1ZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCi0jZW5kaWYg
Ly8gVmFyaWFibGVXYXRjaHBvaW50U2V0X2gKLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1ZhcmlhYmxlV2F0Y2hwb2ludFNldElubGluZXMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFyaWFibGVXYXRjaHBvaW50U2V0SW5saW5l
cy5oCShyZXZpc2lvbiAxODI0OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
VmFyaWFibGVXYXRjaHBvaW50U2V0SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYwICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
LSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lm
bmRlZiBWYXJpYWJsZVdhdGNocG9pbnRTZXRJbmxpbmVzX2gKLSNkZWZpbmUgVmFyaWFibGVXYXRj
aHBvaW50U2V0SW5saW5lc19oCi0KLSNpbmNsdWRlICJTeW1ib2xUYWJsZS5oIgotI2luY2x1ZGUg
IlZhcmlhYmxlV2F0Y2hwb2ludFNldC5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQotaW5saW5lIHZv
aWQgVmFyaWFibGVXYXRjaHBvaW50U2V0Ojpub3RpZnlXcml0ZShWTSYgdm0sIEpTVmFsdWUgdmFs
dWUsIGNvbnN0IEZpcmVEZXRhaWwmIGRldGFpbCkKLXsKLSAgICBBU1NFUlQoISF2YWx1ZSk7Ci0g
ICAgc3dpdGNoIChzdGF0ZSgpKSB7Ci0gICAgY2FzZSBDbGVhcldhdGNocG9pbnQ6Ci0gICAgICAg
IG1faW5mZXJyZWRWYWx1ZS5zZXQodm0sICZtX3N5bWJvbFRhYmxlLCB2YWx1ZSk7Ci0gICAgICAg
IHN0YXJ0V2F0Y2hpbmcoKTsKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY2FzZSBJc1dhdGNoZWQ6
Ci0gICAgICAgIEFTU0VSVCghIW1faW5mZXJyZWRWYWx1ZSk7Ci0gICAgICAgIGlmICh2YWx1ZSA9
PSBtX2luZmVycmVkVmFsdWUuZ2V0KCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlu
dmFsaWRhdGUoZGV0YWlsKTsKLSAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgCi0gICAgY2Fz
ZSBJc0ludmFsaWRhdGVkOgotICAgICAgICBBU1NFUlQoIW1faW5mZXJyZWRWYWx1ZSk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0gICAgICAgIAotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
fQotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotI2VuZGlmIC8vIFZhcmlhYmxlV2F0Y2hwb2ludFNl
dElubGluZXNfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhcmlhYmxl
V3JpdGVGaXJlRGV0YWlsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvVmFyaWFibGVXcml0ZUZpcmVEZXRhaWwuY3BwCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhcmlhYmxlV3JpdGVGaXJlRGV0YWlsLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJWYXJp
YWJsZVdyaXRlRmlyZURldGFpbC5oIgorCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorCituYW1l
c3BhY2UgSlNDIHsKKwordm9pZCBWYXJpYWJsZVdyaXRlRmlyZURldGFpbDo6ZHVtcChQcmludFN0
cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgiV3JpdGUgdG8gIiwgbV9uYW1lLCAi
IGluICIsIEpTVmFsdWUobV9vYmplY3QpKTsKK30KKwordm9pZCBWYXJpYWJsZVdyaXRlRmlyZURl
dGFpbDo6dG91Y2goV2F0Y2hwb2ludFNldCogc2V0LCBKU09iamVjdCogb2JqZWN0LCBjb25zdCBQ
cm9wZXJ0eU5hbWUmIG5hbWUpCit7CisgICAgc2V0LT50b3VjaChWYXJpYWJsZVdyaXRlRmlyZURl
dGFpbChvYmplY3QsIG5hbWUpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYXJpYWJsZVdyaXRlRmlyZURldGFpbC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYXJpYWJsZVdyaXRl
RmlyZURldGFpbC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1ZhcmlhYmxlV3JpdGVGaXJlRGV0YWlsLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1
NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIFZhcmlhYmxlV3JpdGVGaXJlRGV0YWlsX2gKKyNkZWZpbmUgVmFyaWFibGVXcml0ZUZpcmVE
ZXRhaWxfaAorCisjaW5jbHVkZSAiV2F0Y2hwb2ludC5oIgorCituYW1lc3BhY2UgSlNDIHsKKwor
Y2xhc3MgSlNPYmplY3Q7CitjbGFzcyBQcm9wZXJ0eU5hbWU7CisKK2NsYXNzIFZhcmlhYmxlV3Jp
dGVGaXJlRGV0YWlsIDogcHVibGljIEZpcmVEZXRhaWwgeworcHVibGljOgorICAgIFZhcmlhYmxl
V3JpdGVGaXJlRGV0YWlsKEpTT2JqZWN0KiBvYmplY3QsIGNvbnN0IFByb3BlcnR5TmFtZSYgbmFt
ZSkKKyAgICAgICAgOiBtX29iamVjdChvYmplY3QpCisgICAgICAgICwgbV9uYW1lKG5hbWUpCisg
ICAgeworICAgIH0KKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNv
bnN0IG92ZXJyaWRlOworICAgIAorICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHRv
dWNoKFdhdGNocG9pbnRTZXQqLCBKU09iamVjdCosIGNvbnN0IFByb3BlcnR5TmFtZSYpOworCitw
cml2YXRlOgorICAgIEpTT2JqZWN0KiBtX29iamVjdDsKKyAgICBjb25zdCBQcm9wZXJ0eU5hbWUm
IG1fbmFtZTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gVmFyaWFibGVX
cml0ZUZpcmVEZXRhaWxfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1dh
dGNocG9pbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
V2F0Y2hwb2ludC5oCShyZXZpc2lvbiAxODI0OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvV2F0Y2hwb2ludC5oCSh3b3JraW5nIGNvcHkpCkBAIC04Nyw2ICs4NywxMiBAQCBw
dWJsaWM6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgV2F0Y2hwb2ludFNldChXYXRjaHBvaW50U3Rh
dGUpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIH5XYXRjaHBvaW50U2V0KCk7IC8vIE5vdGUgdGhh
dCB0aGlzIHdpbGwgbm90IGZpcmUgYW55IG9mIHRoZSB3YXRjaHBvaW50czsgaWYgeW91IG5lZWQg
dG8ga25vdyB3aGVuIGEgV2F0Y2hwb2ludFNldCBkaWVzIHRoZW4geW91IG5lZWQgYSBzZXBhcmF0
ZSBtZWNoYW5pc20gZm9yIHRoaXMuCiAgICAgCisgICAgLy8gRmFzdCB3YXkgb2YgZ2V0dGluZyB0
aGUgc3RhdGUsIHdoaWNoIG9ubHkgd29ya3MgZnJvbSB0aGUgbWFpbiB0aHJlYWQuCisgICAgV2F0
Y2hwb2ludFN0YXRlIHN0YXRlT25NYWluVGhyZWFkKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxXYXRjaHBvaW50U3RhdGU+KG1fc3RhdGUpOworICAgIH0KKyAgICAK
ICAgICAvLyBJdCBpcyBzYWZlIHRvIGNhbGwgdGhpcyBmcm9tIGFub3RoZXIgdGhyZWFkLiBJdCBt
YXkgcmV0dXJuIGFuIG9sZAogICAgIC8vIHN0YXRlLiBHdWFyYW50ZWVzIHRoYXQgaWYgKmZpcnN0
KiByZWFkIHRoZSBzdGF0ZSgpIG9mIHRoZSB0aGluZyBiZWluZwogICAgIC8vIHdhdGNoZWQgYW5k
IGl0IHJldHVybmVkIElzV2F0Y2hlZCBhbmQgKnNlY29uZCogeW91IGFjdHVhbGx5IHJlYWQgaXRz
CkBAIC0xMjUsMjAgKzEzMSwyNCBAQCBwdWJsaWM6CiAgICAgLy8gc2V0IHdhdGNocG9pbnRzIHRo
YXQgd2UgYmVsaWV2ZSB3aWxsIGFjdHVhbGx5IGJlIGZpcmVkLgogICAgIHZvaWQgc3RhcnRXYXRj
aGluZygpCiAgICAgewotICAgICAgICBBU1NFUlQoc3RhdGUoKSAhPSBJc0ludmFsaWRhdGVkKTsK
KyAgICAgICAgQVNTRVJUKG1fc3RhdGUgIT0gSXNJbnZhbGlkYXRlZCk7CisgICAgICAgIGlmICht
X3N0YXRlID09IElzV2F0Y2hlZCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgV1RGOjpz
dG9yZVN0b3JlRmVuY2UoKTsKICAgICAgICAgbV9zdGF0ZSA9IElzV2F0Y2hlZDsKKyAgICAgICAg
V1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBmaXJlQWxsKGNv
bnN0IEZpcmVEZXRhaWwmIGRldGFpbCkKICAgICB7Ci0gICAgICAgIGlmIChMSUtFTFkoc3RhdGUo
KSAhPSBJc1dhdGNoZWQpKQorICAgICAgICBpZiAoTElLRUxZKG1fc3RhdGUgIT0gSXNXYXRjaGVk
KSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgZmlyZUFsbFNsb3coZGV0YWlsKTsKICAg
ICB9CiAgICAgCiAgICAgdm9pZCBmaXJlQWxsKGNvbnN0IGNoYXIqIHJlYXNvbikKICAgICB7Ci0g
ICAgICAgIGlmIChMSUtFTFkoc3RhdGUoKSAhPSBJc1dhdGNoZWQpKQorICAgICAgICBpZiAoTElL
RUxZKG1fc3RhdGUgIT0gSXNXYXRjaGVkKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
ZmlyZUFsbFNsb3cocmVhc29uKTsKICAgICB9CkBAIC0xNTEsMTMgKzE2MSwyMyBAQCBwdWJsaWM6
CiAgICAgICAgICAgICBmaXJlQWxsKGRldGFpbCk7CiAgICAgfQogICAgIAorICAgIHZvaWQgdG91
Y2goY29uc3QgY2hhciogcmVhc29uKQorICAgIHsKKyAgICAgICAgdG91Y2goU3RyaW5nRmlyZURl
dGFpbChyZWFzb24pKTsKKyAgICB9CisgICAgCiAgICAgdm9pZCBpbnZhbGlkYXRlKGNvbnN0IEZp
cmVEZXRhaWwmIGRldGFpbCkKICAgICB7CiAgICAgICAgIGlmIChzdGF0ZSgpID09IElzV2F0Y2hl
ZCkKICAgICAgICAgICAgIGZpcmVBbGwoZGV0YWlsKTsKICAgICAgICAgbV9zdGF0ZSA9IElzSW52
YWxpZGF0ZWQ7CiAgICAgfQotCisgICAgCisgICAgdm9pZCBpbnZhbGlkYXRlKGNvbnN0IGNoYXIq
IHJlYXNvbikKKyAgICB7CisgICAgICAgIGludmFsaWRhdGUoU3RyaW5nRmlyZURldGFpbChyZWFz
b24pKTsKKyAgICB9CisgICAgCiAgICAgaW50OF90KiBhZGRyZXNzT2ZTdGF0ZSgpIHsgcmV0dXJu
ICZtX3N0YXRlOyB9CiAgICAgaW50OF90KiBhZGRyZXNzT2ZTZXRJc05vdEVtcHR5KCkgeyByZXR1
cm4gJm1fc2V0SXNOb3RFbXB0eTsgfQogICAgIApAQCAtMjA5LDE4ICsyMjksMzQgQEAgcHVibGlj
OgogICAgICAgICBmcmVlRmF0KCk7CiAgICAgfQogICAgIAorICAgIC8vIEZhc3Qgd2F5IG9mIGdl
dHRpbmcgdGhlIHN0YXRlLCB3aGljaCBvbmx5IHdvcmtzIGZyb20gdGhlIG1haW4gdGhyZWFkLgor
ICAgIFdhdGNocG9pbnRTdGF0ZSBzdGF0ZU9uTWFpblRocmVhZCgpIGNvbnN0CisgICAgeworICAg
ICAgICB1aW50cHRyX3QgZGF0YSA9IG1fZGF0YTsKKyAgICAgICAgaWYgKGlzRmF0KGRhdGEpKQor
ICAgICAgICAgICAgcmV0dXJuIGZhdChkYXRhKS0+c3RhdGVPbk1haW5UaHJlYWQoKTsKKyAgICAg
ICAgcmV0dXJuIGRlY29kZVN0YXRlKGRhdGEpOworICAgIH0KKworICAgIC8vIEl0IGlzIHNhZmUg
dG8gY2FsbCB0aGlzIGZyb20gYW5vdGhlciB0aHJlYWQuIEl0IG1heSByZXR1cm4gYSBwcmlvciBz
dGF0ZSwKKyAgICAvLyBidXQgdGhhdCBzaG91bGQgYmUgZmluZSBzaW5jZSB5b3Ugc2hvdWxkIG9u
bHkgcGVyZm9ybSBhY3Rpb25zIGJhc2VkIG9uIHRoZQorICAgIC8vIHN0YXRlIGlmIHlvdSBhbHNv
IGFkZCBhIHdhdGNocG9pbnQuCisgICAgV2F0Y2hwb2ludFN0YXRlIHN0YXRlKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIFdURjo6bG9hZExvYWRGZW5jZSgpOworICAgICAgICB1aW50cHRyX3QgZGF0
YSA9IG1fZGF0YTsKKyAgICAgICAgV1RGOjpsb2FkTG9hZEZlbmNlKCk7CisgICAgICAgIGlmIChp
c0ZhdChkYXRhKSkKKyAgICAgICAgICAgIHJldHVybiBmYXQoZGF0YSktPnN0YXRlKCk7CisgICAg
ICAgIHJldHVybiBkZWNvZGVTdGF0ZShkYXRhKTsKKyAgICB9CisgICAgCiAgICAgLy8gSXQgaXMg
c2FmZSB0byBjYWxsIHRoaXMgZnJvbSBhbm90aGVyIHRocmVhZC4gIEl0IG1heSByZXR1cm4gZmFs
c2UKICAgICAvLyBldmVuIGlmIHRoZSBzZXQgYWN0dWFsbHkgaGFkIGJlZW4gaW52YWxpZGF0ZWQs
IGJ1dCB0aGF0IG91Z2h0IHRvIGhhcHBlbgogICAgIC8vIG9ubHkgaW4gdGhlIGNhc2Ugb2YgcmFj
ZXMsIGFuZCBzaG91bGQgYmUgcmFyZS4KICAgICBib29sIGhhc0JlZW5JbnZhbGlkYXRlZCgpIGNv
bnN0CiAgICAgewotICAgICAgICBXVEY6OmxvYWRMb2FkRmVuY2UoKTsKLSAgICAgICAgdWludHB0
cl90IGRhdGEgPSBtX2RhdGE7Ci0gICAgICAgIGlmIChpc0ZhdChkYXRhKSkgewotICAgICAgICAg
ICAgV1RGOjpsb2FkTG9hZEZlbmNlKCk7Ci0gICAgICAgICAgICByZXR1cm4gZmF0KGRhdGEpLT5o
YXNCZWVuSW52YWxpZGF0ZWQoKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gZGVjb2RlU3Rh
dGUoZGF0YSkgPT0gSXNJbnZhbGlkYXRlZDsKKyAgICAgICAgcmV0dXJuIHN0YXRlKCkgPT0gSXNJ
bnZhbGlkYXRlZDsKICAgICB9CiAgICAgCiAgICAgLy8gTGlrZSBoYXNCZWVuSW52YWxpZGF0ZWQo
KSwgbWF5IGJlIGNhbGxlZCBmcm9tIGFub3RoZXIgdGhyZWFkLgpAQCAtMjUzLDYgKzI4OSwxNCBA
QCBwdWJsaWM6CiAgICAgICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CiAgICAgfQogICAgIAor
ICAgIHZvaWQgaW52YWxpZGF0ZShjb25zdCBGaXJlRGV0YWlsJiBkZXRhaWwpCisgICAgeworICAg
ICAgICBpZiAoaXNGYXQoKSkKKyAgICAgICAgICAgIGZhdCgpLT5pbnZhbGlkYXRlKGRldGFpbCk7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fZGF0YSA9IGVuY29kZVN0YXRlKElzSW52YWxp
ZGF0ZWQpOworICAgIH0KKyAgICAKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGZpcmVBbGwo
Y29uc3QgY2hhciogcmVhc29uKTsKICAgICAKICAgICB2b2lkIHRvdWNoKGNvbnN0IEZpcmVEZXRh
aWwmIGRldGFpbCkKQEAgLTI2MSw3ICszMDUsMTEgQEAgcHVibGljOgogICAgICAgICAgICAgZmF0
KCktPnRvdWNoKGRldGFpbCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAg
ICAgaWYgKGRlY29kZVN0YXRlKG1fZGF0YSkgPT0gQ2xlYXJXYXRjaHBvaW50KQorICAgICAgICB1
aW50cHRyX3QgZGF0YSA9IG1fZGF0YTsKKyAgICAgICAgaWYgKGRlY29kZVN0YXRlKGRhdGEpID09
IElzSW52YWxpZGF0ZWQpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIFdURjo6c3RvcmVT
dG9yZUZlbmNlKCk7CisgICAgICAgIGlmIChkZWNvZGVTdGF0ZShkYXRhKSA9PSBDbGVhcldhdGNo
cG9pbnQpCiAgICAgICAgICAgICBtX2RhdGEgPSBlbmNvZGVTdGF0ZShJc1dhdGNoZWQpOwogICAg
ICAgICBlbHNlCiAgICAgICAgICAgICBtX2RhdGEgPSBlbmNvZGVTdGF0ZShJc0ludmFsaWRhdGVk
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5l
cmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGls
ZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAxODI0OTgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDY2LDkgKzQ2Niw2IEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVy
YXRvcihWTSYKICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICBpZiAobV9zeW1ib2xUYWJsZS0+
c2NvcGVTaXplKCkpCi0gICAgICAgIGVtaXRPcGNvZGUob3BfdG91Y2hfZW50cnkpOwotCiAgICAg
aWYgKGlzQ29uc3RydWN0b3IoKSkgewogICAgICAgICBpZiAoY29uc3RydWN0b3JLaW5kKCkgPT0g
Q29uc3RydWN0b3JLaW5kOjpEZXJpdmVkKSB7CiAgICAgICAgICAgICBtX25ld1RhcmdldFJlZ2lz
dGVyID0gYWRkVmFyKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3Ry
YWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCShyZXZpc2lvbiAxODI0OTgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxp
bmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzNDIsNiArMTM0Miw3IEBAIGJvb2wgQWJzdHJhY3RJ
bnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICB9CiAKICAgICBjYXNlIENyZWF0ZVRoaXM6
IHsKKyAgICAgICAgLy8gRklYTUU6IFdlIGNhbiBmb2xkIHRoaXMgdG8gTmV3T2JqZWN0IGlmIHRo
ZSBpbmNvbWluZyBjYWxsZWUgaXMgYSBjb25zdGFudC4KICAgICAgICAgZm9yTm9kZShub2RlKS5z
ZXRUeXBlKFNwZWNGaW5hbE9iamVjdCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTE0MDEs
NiArMTQwMiwxNSBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAg
ICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBjYXNlIEdldENhbGxlZToKKyAgICAgICAgaWYg
KEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IGpzRHluYW1pY0Nhc3Q8RnVuY3Rpb25F
eGVjdXRhYmxlKj4obV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpKSkgeworICAgICAgICAg
ICAgSW5mZXJyZWRWYWx1ZSogc2luZ2xldG9uID0gZXhlY3V0YWJsZS0+c2luZ2xldG9uRnVuY3Rp
b24oKTsKKyAgICAgICAgICAgIGlmIChKU1ZhbHVlIHZhbHVlID0gc2luZ2xldG9uLT5pbmZlcnJl
ZFZhbHVlKCkpIHsKKyAgICAgICAgICAgICAgICBtX2dyYXBoLndhdGNocG9pbnRzKCkuYWRkTGF6
aWx5KHNpbmdsZXRvbik7CisgICAgICAgICAgICAgICAgSlNGdW5jdGlvbiogZnVuY3Rpb24gPSBq
c0Nhc3Q8SlNGdW5jdGlvbio+KHZhbHVlKTsKKyAgICAgICAgICAgICAgICBzZXRDb25zdGFudChu
b2RlLCAqbV9ncmFwaC5mcmVlemUoZnVuY3Rpb24pKTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUo
U3BlY0Z1bmN0aW9uKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDE4
MjQ5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yMTUsOCArMjE1LDYgQEAgcHJpdmF0ZToKICAgICAgICAgYm9v
bCBpc0RpcmVjdCk7CiAgICAgdm9pZCBlbWl0Q2hlY2tzKGNvbnN0IENvbnN0YW50U3RydWN0dXJl
Q2hlY2tWZWN0b3ImKTsKIAotICAgIE5vZGUqIGdldFNjb3BlKFZpcnR1YWxSZWdpc3RlciBzY29w
ZUNoYWluLCB1bnNpZ25lZCBza2lwQ291bnQpOwotICAgIAogICAgIHZvaWQgcHJlcGFyZVRvUGFy
c2VCbG9jaygpOwogICAgIHZvaWQgY2xlYXJDYWNoZXMoKTsKIApAQCAtMjc5LDggKzI3NywyMCBA
QCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGlmIChvcGVyYW5kLm9mZnNldCgpID09IEpTU3Rh
Y2s6OkNhbGxlZSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdlYWtKU0NvbnN0YW50KGNh
bGxlZSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAob3BlcmFuZC5vZmZzZXQo
KSA9PSBKU1N0YWNrOjpDYWxsZWUpCisgICAgICAgIH0gZWxzZSBpZiAob3BlcmFuZC5vZmZzZXQo
KSA9PSBKU1N0YWNrOjpDYWxsZWUpIHsKKyAgICAgICAgICAgIC8vIFdlIGhhdmUgdG8gZG8gc29t
ZSBjb25zdGFudC1mb2xkaW5nIGhlcmUgYmVjYXVzZSB0aGlzIGVuYWJsZXMgQ3JlYXRlVGhpcyBm
b2xkaW5nLiBOb3RlCisgICAgICAgICAgICAvLyB0aGF0IHdlIGRvbid0IGhhdmUgc3VjaCB3YXRj
aHBvaW50LWJhc2VkIGZvbGRpbmcgZm9yIGlubGluZWQgdXNlcyBvZiBDYWxsZWUsIHNpbmNlIGlu
IHRoYXQKKyAgICAgICAgICAgIC8vIGNhc2UgaWYgdGhlIGZ1bmN0aW9uIGlzIGEgc2luZ2xldG9u
IHRoZW4gd2UgYWxyZWFkeSBrbm93IGl0LgorICAgICAgICAgICAgaWYgKEZ1bmN0aW9uRXhlY3V0
YWJsZSogZXhlY3V0YWJsZSA9IGpzRHluYW1pY0Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4obV9j
b2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpKSkgeworICAgICAgICAgICAgICAgIEluZmVycmVk
VmFsdWUqIHNpbmdsZXRvbiA9IGV4ZWN1dGFibGUtPnNpbmdsZXRvbkZ1bmN0aW9uKCk7CisgICAg
ICAgICAgICAgICAgaWYgKEpTVmFsdWUgdmFsdWUgPSBzaW5nbGV0b24tPmluZmVycmVkVmFsdWUo
KSkgeworICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLndhdGNocG9pbnRzKCkuYWRkTGF6aWx5
KHNpbmdsZXRvbik7CisgICAgICAgICAgICAgICAgICAgIEpTRnVuY3Rpb24qIGZ1bmN0aW9uID0g
anNDYXN0PEpTRnVuY3Rpb24qPih2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB3
ZWFrSlNDb25zdGFudChmdW5jdGlvbik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQogICAgICAgICAgICAgcmV0dXJuIGFkZFRvR3JhcGgoR2V0Q2FsbGVlKTsKKyAgICAgICAgfQog
ICAgICAgICAKICAgICAgICAgcmV0dXJuIGdldERpcmVjdChtX2lubGluZVN0YWNrVG9wLT5yZW1h
cE9wZXJhbmQob3BlcmFuZCkpOwogICAgIH0KQEAgLTI1MjksMTQgKzI1MzksNiBAQCB2b2lkIEJ5
dGVDb2RlUGFyc2VyOjpjbGVhckNhY2hlcygpCiAgICAgbV9jb25zdGFudHMucmVzaXplKDApOwog
fQogCi1Ob2RlKiBCeXRlQ29kZVBhcnNlcjo6Z2V0U2NvcGUoVmlydHVhbFJlZ2lzdGVyIHNjb3Bl
Q2hhaW4sIHVuc2lnbmVkIHNraXBDb3VudCkKLXsKLSAgICBOb2RlKiBsb2NhbEJhc2UgPSBnZXQo
c2NvcGVDaGFpbik7Ci0gICAgZm9yICh1bnNpZ25lZCBuID0gc2tpcENvdW50OyBuLS07KQotICAg
ICAgICBsb2NhbEJhc2UgPSBhZGRUb0dyYXBoKFNraXBTY29wZSwgbG9jYWxCYXNlKTsKLSAgICBy
ZXR1cm4gbG9jYWxCYXNlOwotfQotCiBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVu
c2lnbmVkIGxpbWl0KQogewogICAgIGJvb2wgc2hvdWxkQ29udGludWVQYXJzaW5nID0gdHJ1ZTsK
QEAgLTI2MDYsMTEgKzI2MDgsNiBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVu
c2lnbmVkCiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9lbnRlcik7CiAgICAgICAgIH0KICAg
ICAgICAgICAgIAotICAgICAgICBjYXNlIG9wX3RvdWNoX2VudHJ5OgotICAgICAgICAgICAgaWYg
KG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLT5zeW1ib2xUYWJsZSgpLT5tX2Z1bmN0aW9u
RW50ZXJlZE9uY2UuaXNTdGlsbFZhbGlkKCkpCi0gICAgICAgICAgICAgICAgYWRkVG9HcmFwaChG
b3JjZU9TUkV4aXQpOwotICAgICAgICAgICAgTkVYVF9PUENPREUob3BfdG91Y2hfZW50cnkpOwot
ICAgICAgICAgICAgCiAgICAgICAgIGNhc2Ugb3BfdG9fdGhpczogewogICAgICAgICAgICAgTm9k
ZSogb3AxID0gZ2V0VGhpcygpOwogICAgICAgICAgICAgaWYgKG9wMS0+b3AoKSAhPSBUb1RoaXMp
IHsKQEAgLTMzODgsMTcgKzMzODUsMjggQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9j
ayh1bnNpZ25lZAogICAgICAgICAgICAgY2FzZSBMb2NhbENsb3N1cmVWYXI6CiAgICAgICAgICAg
ICBjYXNlIENsb3N1cmVWYXI6CiAgICAgICAgICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgICAgICAgICAgSlNMZXhpY2FsRW52aXJvbm1lbnQqIGxl
eGljYWxFbnZpcm9ubWVudCA9IGN1cnJlbnRJbnN0cnVjdGlvbls2XS51LmxleGljYWxFbnZpcm9u
bWVudC5nZXQoKTsKLSAgICAgICAgICAgICAgICBpZiAobGV4aWNhbEVudmlyb25tZW50Ci0gICAg
ICAgICAgICAgICAgICAgICYmIGxleGljYWxFbnZpcm9ubWVudC0+c3ltYm9sVGFibGUoKS0+bV9m
dW5jdGlvbkVudGVyZWRPbmNlLmlzU3RpbGxWYWxpZCgpKSB7Ci0gICAgICAgICAgICAgICAgICAg
IG1fZ3JhcGgud2F0Y2hwb2ludHMoKS5hZGRMYXppbHkobGV4aWNhbEVudmlyb25tZW50LT5zeW1i
b2xUYWJsZSgpLT5tX2Z1bmN0aW9uRW50ZXJlZE9uY2UpOwotICAgICAgICAgICAgICAgICAgICBh
ZGRUb0dyYXBoKFBoYW50b20sIGdldERpcmVjdChtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJh
bmQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpKSkpOwot
ICAgICAgICAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGRzdCksIHdlYWtKU0NvbnN0
YW50KGxleGljYWxFbnZpcm9ubWVudCkpOworICAgICAgICAgICAgICAgIE5vZGUqIGxvY2FsQmFz
ZSA9IGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCkp
OworICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoUGhhbnRvbSwgbG9jYWxCYXNlKTsgLy8gT1NS
IGV4aXQgY2Fubm90IGhhbmRsZSByZXNvbHZlX3Njb3BlIG9uIGEgRENFJ2Qgc2NvcGUuCisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSB2YXJpb3VzIGZvcm1zIG9m
IGNvbnN0YW50IGZvbGRpbmcgaGVyZS4gVGhpcyBpcyBuZWNlc3NhcnkgdG8gYXZvaWQKKyAgICAg
ICAgICAgICAgICAvLyBzcHVyaW91cyByZWNvbXBpbGVzIGluIGRlYWQtYnV0LWZvbGRhYmxlIGNv
ZGUuCisgICAgICAgICAgICAgICAgaWYgKFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbls2XS51LnN5bWJvbFRhYmxlLmdldCgpKSB7CisgICAgICAgICAgICAgICAg
ICAgIEluZmVycmVkVmFsdWUqIHNpbmdsZXRvbiA9IHN5bWJvbFRhYmxlLT5zaW5nbGV0b25TY29w
ZSgpOworICAgICAgICAgICAgICAgICAgICBpZiAoSlNWYWx1ZSB2YWx1ZSA9IHNpbmdsZXRvbi0+
aW5mZXJyZWRWYWx1ZSgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLndhdGNo
cG9pbnRzKCkuYWRkTGF6aWx5KHNpbmdsZXRvbik7CisgICAgICAgICAgICAgICAgICAgICAgICBz
ZXQoVmlydHVhbFJlZ2lzdGVyKGRzdCksIHdlYWtKU0NvbnN0YW50KHZhbHVlKSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoSlNTY29wZSogc2NvcGUgPSBsb2NhbEJhc2Ut
PmR5bmFtaWNDYXN0Q29uc3RhbnQ8SlNTY29wZSo+KCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBuID0gZGVwdGg7IG4tLTspCisgICAgICAgICAgICAgICAgICAgICAgICBz
Y29wZSA9IHNjb3BlLT5uZXh0KCk7CisgICAgICAgICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVn
aXN0ZXIoZHN0KSwgd2Vha0pTQ29uc3RhbnQoc2NvcGUpKTsKICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVn
aXN0ZXIoZHN0KSwgZ2V0U2NvcGUoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsy
XS51Lm9wZXJhbmQpLCBkZXB0aCkpOwotICAgICAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJh
bWUoKSkKLSAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChQaGFudG9tLCBnZXREaXJlY3Qo
bV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5z
dHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSkpKTsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IG4gPSBkZXB0aDsgbi0tOykKKyAgICAgICAgICAgICAgICAgICAgbG9jYWxCYXNlID0gYWRkVG9H
cmFwaChTa2lwU2NvcGUsIGxvY2FsQmFzZSk7CisgICAgICAgICAgICAgICAgc2V0KFZpcnR1YWxS
ZWdpc3Rlcihkc3QpLCBsb2NhbEJhc2UpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgY2FzZSBEeW5hbWljOgpAQCAtMzQ1MCwxOSArMzQ1OCw1OCBA
QCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICBj
YXNlIEdsb2JhbFZhcjoKICAgICAgICAgICAgIGNhc2UgR2xvYmFsVmFyV2l0aFZhckluamVjdGlv
bkNoZWNrczogewogICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoUGhhbnRvbSwgZ2V0KFZpcnR1
YWxSZWdpc3RlcihzY29wZSkpKTsKLSAgICAgICAgICAgICAgICBDb25jdXJyZW50SklUTG9ja2Vy
IGxvY2tlcihnbG9iYWxPYmplY3QtPnN5bWJvbFRhYmxlKCktPm1fbG9jayk7Ci0gICAgICAgICAg
ICAgICAgU3ltYm9sVGFibGVFbnRyeSBlbnRyeSA9IGdsb2JhbE9iamVjdC0+c3ltYm9sVGFibGUo
KS0+Z2V0KGxvY2tlciwgdWlkKTsKLSAgICAgICAgICAgICAgICBWYXJpYWJsZVdhdGNocG9pbnRT
ZXQqIHdhdGNocG9pbnRTZXQgPSBlbnRyeS53YXRjaHBvaW50U2V0KCk7Ci0gICAgICAgICAgICAg
ICAgSlNWYWx1ZSBpbmZlcnJlZFZhbHVlID0KLSAgICAgICAgICAgICAgICAgICAgd2F0Y2hwb2lu
dFNldCA/IHdhdGNocG9pbnRTZXQtPmluZmVycmVkVmFsdWUoKSA6IEpTVmFsdWUoKTsKLSAgICAg
ICAgICAgICAgICBpZiAoIWluZmVycmVkVmFsdWUpIHsKLSAgICAgICAgICAgICAgICAgICAgU3Bl
Y3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IGdldFByZWRpY3Rpb24oKTsKLSAgICAgICAgICAgICAg
ICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rlcihkc3QpLCBhZGRUb0dyYXBoKEdldEdsb2JhbFZhciwg
T3BJbmZvKG9wZXJhbmQpLCBPcEluZm8ocHJlZGljdGlvbikpKTsKLSAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgV2F0Y2hwb2ludFNldCogd2F0Y2hwb2ludFNldDsK
KyAgICAgICAgICAgICAgICBTY29wZU9mZnNldCBvZmZzZXQ7CisgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihnbG9iYWxPYmpl
Y3QtPnN5bWJvbFRhYmxlKCktPm1fbG9jayk7CisgICAgICAgICAgICAgICAgICAgIFN5bWJvbFRh
YmxlRW50cnkgZW50cnkgPSBnbG9iYWxPYmplY3QtPnN5bWJvbFRhYmxlKCktPmdldChsb2NrZXIs
IHVpZCk7CisgICAgICAgICAgICAgICAgICAgIHdhdGNocG9pbnRTZXQgPSBlbnRyeS53YXRjaHBv
aW50U2V0KCk7CisgICAgICAgICAgICAgICAgICAgIG9mZnNldCA9IGVudHJ5LnNjb3BlT2Zmc2V0
KCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICh3YXRjaHBvaW50U2V0
ICYmIHdhdGNocG9pbnRTZXQtPnN0YXRlKCkgPT0gSXNXYXRjaGVkKSB7CisgICAgICAgICAgICAg
ICAgICAgIC8vIFRoaXMgaGFzIGEgZnVuIGNvbmN1cnJlbmN5IHN0b3J5LiBUaGVyZSBpcyB0aGUg
cG9zc2liaWxpdHkgb2YgYSByYWNlIGluIHR3bworICAgICAgICAgICAgICAgICAgICAvLyBkaXJl
Y3Rpb25zOgorICAgICAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgICAgICAvLyBX
ZSBzZWUgdGhhdCB0aGUgc2V0IElzV2F0Y2hlZCwgYnV0IGluIHRoZSBtZWFudGltZSBpdCBnZXRz
IGludmFsaWRhdGVkOiB0aGlzIGlzCisgICAgICAgICAgICAgICAgICAgIC8vIGZpbmUgYmVjYXVz
ZSBpZiB3ZSBzYXcgdGhhdCBpdCBJc1dhdGNoZWQgdGhlbiB3ZSBhZGQgYSB3YXRjaHBvaW50LiBJ
ZiBpdCBnZXRzCisgICAgICAgICAgICAgICAgICAgIC8vIGludmFsaWRhdGVkLCB0aGVuIHRoaXMg
Y29tcGlsYXRpb24gaXMgaW52YWxpZGF0ZWQuIE5vdGUgdGhhdCBpbiB0aGUgbWVhbnRpbWUgd2UK
KyAgICAgICAgICAgICAgICAgICAgLy8gbWF5IGxvYWQgYW4gYWJzdXJkIHZhbHVlIGZyb20gdGhl
IGdsb2JhbCBvYmplY3QuIEl0J3MgZmluZSB0byBsb2FkIGFuIGFic3VyZAorICAgICAgICAgICAg
ICAgICAgICAvLyB2YWx1ZSBpZiB0aGUgY29tcGlsYXRpb24gaXMgaW52YWxpZGF0ZWQgYW55d2F5
LgorICAgICAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgICAgICAvLyBXZSBzZWUg
dGhhdCB0aGUgc2V0IElzV2F0Y2hlZCwgYnV0IHRoZSB2YWx1ZSBpc24ndCB5ZXQgaW5pdGlhbGl6
ZWQ6IHRoaXMgaXNuJ3QKKyAgICAgICAgICAgICAgICAgICAgLy8gcG9zc2libGUgYmVjYXVzZSBv
ZiB0aGUgb3JkZXJpbmcgb2Ygb3BlcmF0aW9ucy4KKyAgICAgICAgICAgICAgICAgICAgLy8KKyAg
ICAgICAgICAgICAgICAgICAgLy8gSGVyZSdzIGhvdyB3ZSBvcmRlciBvcGVyYXRpb25zOgorICAg
ICAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgICAgICAvLyBNYWluIHRocmVhZCBz
dG9yZXMgdG8gdGhlIGdsb2JhbCBvYmplY3Q6IGFsd2F5cyBzdG9yZSBhIHZhbHVlIGZpcnN0LCBh
bmQgb25seQorICAgICAgICAgICAgICAgICAgICAvLyBhZnRlciB0aGF0IGRvIHdlIHRvdWNoIHRo
ZSB3YXRjaHBvaW50IHNldC4gVGhlcmUgaXMgYSBmZW5jZSBpbiB0aGUgdG91Y2gsIHRoYXQKKyAg
ICAgICAgICAgICAgICAgICAgLy8gZW5zdXJlcyB0aGF0IHRoZSBzdG9yZSB0byB0aGUgZ2xvYmFs
IG9iamVjdCBhbHdheXMgaGFwcGVucyBiZWZvcmUgdGhlIHRvdWNoIG9uIHRoZQorICAgICAgICAg
ICAgICAgICAgICAvLyBzZXQuCisgICAgICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAg
ICAgICAgIC8vIENvbXBpbGF0aW9uIHRocmVhZDogYWx3YXlzIGZpcnN0IGxvYWQgdGhlIHN0YXRl
IG9mIHRoZSB3YXRjaHBvaW50IHNldCwgYW5kIHRoZW4KKyAgICAgICAgICAgICAgICAgICAgLy8g
bG9hZCB0aGUgdmFsdWUuIFRoZSBXYXRjaHBvaW50U2V0OjpzdGF0ZSgpIG1ldGhvZCBkb2VzIGZl
bmNlcyBmb3IgdXMgdG8gZW5zdXJlCisgICAgICAgICAgICAgICAgICAgIC8vIHRoYXQgdGhlIGxv
YWQgb2YgdGhlIHN0YXRlIGhhcHBlbnMgYmVmb3JlIG91ciBsb2FkIG9mIHRoZSB2YWx1ZS4KKyAg
ICAgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAgICAgLy8gRmluYWxpemluZyBj
b21waWxhdGlvbjogdGhpcyBoYXBwZW5zIG9uIHRoZSBtYWluIHRocmVhZCBhbmQgc3luY2hyb25v
dXNseSBjaGVja3MKKyAgICAgICAgICAgICAgICAgICAgLy8gdmFsaWRpdHkgb2YgYWxsIHdhdGNo
cG9pbnQgc2V0cy4KKyAgICAgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAgICAg
Ly8gV2Ugd2lsbCBvbmx5IHBlcmZvcm0gb3B0aW1pemF0aW9ucyBpZiB0aGUgbG9hZCBvZiB0aGUg
c3RhdGUgeWllbGRzIElzV2F0Y2hlZC4gVGhhdAorICAgICAgICAgICAgICAgICAgICAvLyBtZWFu
cyB0aGF0IGF0IGxlYXN0IG9uZSBzdG9yZSB3b3VsZCBoYXZlIGhhcHBlbmVkIHRvIGluaXRpYWxp
emUgdGhlIG9yaWdpbmFsIHZhbHVlCisgICAgICAgICAgICAgICAgICAgIC8vIG9mIHRoZSB2YXJp
YWJsZSAodGhhdCBpcywgdGhlIHZhbHVlIHdlJ2QgbGlrZSB0byBjb25zdGFudCBmb2xkIHRvKS4g
VGhlcmUgbWF5IGJlCisgICAgICAgICAgICAgICAgICAgIC8vIG90aGVyIHN0b3JlcyB0aGF0IGhh
cHBlbiBhZnRlciB0aGF0LCBidXQgdGhvc2Ugc3RvcmVzIHdpbGwgaW52YWxpZGF0ZSB0aGUKKyAg
ICAgICAgICAgICAgICAgICAgLy8gd2F0Y2hwb2ludCBzZXQgYW5kIGFsc28gdGhlIGNvbXBpbGF0
aW9uLgorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGJp
dHdpc2VfY2FzdDx1aW50cHRyX3Q+KCZnbG9iYWxPYmplY3QtPnZhcmlhYmxlQXQob2Zmc2V0KSkg
PT0gb3BlcmFuZCk7CisgICAgICAgICAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBnbG9iYWxP
YmplY3QtPnZhcmlhYmxlQXQob2Zmc2V0KS5nZXQoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KHZhbHVlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLndhdGNocG9pbnRzKCku
YWRkTGF6aWx5KHdhdGNocG9pbnRTZXQpOworICAgICAgICAgICAgICAgICAgICAgICAgc2V0KFZp
cnR1YWxSZWdpc3Rlcihkc3QpLCB3ZWFrSlNDb25zdGFudCh2YWx1ZSkpOworICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgbV9ncmFwaC53YXRjaHBvaW50
cygpLmFkZExhemlseSh3YXRjaHBvaW50U2V0KTsKLSAgICAgICAgICAgICAgICBzZXQoVmlydHVh
bFJlZ2lzdGVyKGRzdCksIHdlYWtKU0NvbnN0YW50KGluZmVycmVkVmFsdWUpKTsKKyAgICAgICAg
ICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0gZ2V0UHJlZGljdGlvbigpOworICAg
ICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoZHN0KSwgYWRkVG9HcmFwaChHZXRHbG9i
YWxWYXIsIE9wSW5mbyhvcGVyYW5kKSwgT3BJbmZvKHByZWRpY3Rpb24pKSk7CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBjYXNlIExvY2FsQ2xvc3Vy
ZVZhcjoKQEAgLTM0NzksNiArMzUyNiwxMCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJs
b2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAgICAgLy8gd29uJ3QgYmUgYWJsZSB0byBoYW5kbGUg
YW4gVW5kZWZpbmVkIHNjb3BlLgogICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoUGhhbnRvbSwg
c2NvcGVOb2RlKTsKICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyBDb25zdGFu
dCBmb2xkaW5nIGluIHRoZSBieXRlY29kZSBwYXJzZXIgaXMgaW1wb3J0YW50IGZvciBwZXJmb3Jt
YW5jZS4gVGhpcyBtYXkgbm90CisgICAgICAgICAgICAgICAgLy8gaGF2ZSBleGVjdXRlZCB5ZXQu
IElmIGl0IGhhc24ndCwgdGhlbiB3ZSB3b24ndCBoYXZlIGEgcHJlZGljdGlvbi4gTGFja2luZyBh
CisgICAgICAgICAgICAgICAgLy8gcHJlZGljdGlvbiwgd2UnZCBvdGhlcndpc2UgdGhpbmsgdGhh
dCBpdCBoYXMgdG8gZXhpdC4gVGhlbiB3aGVuIGl0IGRpZCBleGVjdXRlLCB3ZQorICAgICAgICAg
ICAgICAgIC8vIHdvdWxkIHJlY29tcGlsZS4gQnV0IGlmIHdlIGNhbiBmb2xkIGl0IGhlcmUsIHdl
IGF2b2lkIHRoZSBleGl0LgogICAgICAgICAgICAgICAgIGlmIChKU1ZhbHVlIHZhbHVlID0gbV9n
cmFwaC50cnlHZXRDb25zdGFudENsb3N1cmVWYXIoc2NvcGVOb2RlLCBTY29wZU9mZnNldChvcGVy
YW5kKSkpIHsKICAgICAgICAgICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rlcihkc3QpLCB3
ZWFrSlNDb25zdGFudCh2YWx1ZSkpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTM1
MDksNyArMzU2MCw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQK
ICAgICAgICAgICAgICAgICB1aWQgPSBudWxscHRyOwogICAgICAgICAgICAgCiAgICAgICAgICAg
ICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG51bGxwdHI7Ci0gICAgICAgICAgICBWYXJpYWJsZVdh
dGNocG9pbnRTZXQqIHdhdGNocG9pbnRzID0gbnVsbHB0cjsKKyAgICAgICAgICAgIFdhdGNocG9p
bnRTZXQqIHdhdGNocG9pbnRzID0gbnVsbHB0cjsKICAgICAgICAgICAgIHVpbnRwdHJfdCBvcGVy
YW5kOwogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIg
bG9ja2VyKG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+bV9sb2NrKTsKQEAgLTM1
NTIsOCArMzYwMywxMCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVk
CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIE5vZGUqIHZhbHVlTm9kZSA9IGdl
dChWaXJ0dWFsUmVnaXN0ZXIodmFsdWUpKTsKICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKFB1
dEdsb2JhbFZhciwgT3BJbmZvKG9wZXJhbmQpLCB2YWx1ZU5vZGUpOwotICAgICAgICAgICAgICAg
IGlmICh3YXRjaHBvaW50cyAmJiB3YXRjaHBvaW50cy0+c3RhdGUoKSAhPSBJc0ludmFsaWRhdGVk
KQotICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKE5vdGlmeVdyaXRlLCBPcEluZm8od2F0
Y2hwb2ludHMpLCB2YWx1ZU5vZGUpOworICAgICAgICAgICAgICAgIGlmICh3YXRjaHBvaW50cyAm
JiB3YXRjaHBvaW50cy0+c3RhdGUoKSAhPSBJc0ludmFsaWRhdGVkKSB7CisgICAgICAgICAgICAg
ICAgICAgIC8vIE11c3QgaGFwcGVuIGFmdGVyIHRoZSBzdG9yZS4gU2VlIGNvbW1lbnQgZm9yIEdl
dEdsb2JhbFZhci4KKyAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChOb3RpZnlXcml0ZSwg
T3BJbmZvKHdhdGNocG9pbnRzKSk7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
IC8vIEtlZXAgc2NvcGUgYWxpdmUgdW50aWwgYWZ0ZXIgcHV0LgogICAgICAgICAgICAgICAgIGFk
ZFRvR3JhcGgoUGhhbnRvbSwgZ2V0KFZpcnR1YWxSZWdpc3RlcihzY29wZSkpKTsKICAgICAgICAg
ICAgICAgICBicmVhazsKQEAgLTM1NjQsMTAgKzM2MTcsMTIgQEAgYm9vbCBCeXRlQ29kZVBhcnNl
cjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgICAgIE5vZGUqIHNjb3BlTm9kZSA9
IGdldChWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUpKTsKICAgICAgICAgICAgICAgICBOb2RlKiB2YWx1
ZU5vZGUgPSBnZXQoVmlydHVhbFJlZ2lzdGVyKHZhbHVlKSk7CiAKLSAgICAgICAgICAgICAgICBp
ZiAod2F0Y2hwb2ludHMgJiYgd2F0Y2hwb2ludHMtPnN0YXRlKCkgIT0gSXNJbnZhbGlkYXRlZCkK
LSAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChOb3RpZnlXcml0ZSwgT3BJbmZvKHdhdGNo
cG9pbnRzKSwgdmFsdWVOb2RlKTsKLQogICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoUHV0Q2xv
c3VyZVZhciwgT3BJbmZvKG9wZXJhbmQpLCBzY29wZU5vZGUsIHZhbHVlTm9kZSk7CisKKyAgICAg
ICAgICAgICAgICBpZiAod2F0Y2hwb2ludHMgJiYgd2F0Y2hwb2ludHMtPnN0YXRlKCkgIT0gSXNJ
bnZhbGlkYXRlZCkgeworICAgICAgICAgICAgICAgICAgICAvLyBNdXN0IGhhcHBlbiBhZnRlciB0
aGUgc3RvcmUuIFNlZSBjb21tZW50IGZvciBHZXRHbG9iYWxWYXIuCisgICAgICAgICAgICAgICAg
ICAgIGFkZFRvR3JhcGgoTm90aWZ5V3JpdGUsIE9wSW5mbyh3YXRjaHBvaW50cykpOworICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIGNhc2UgRHluYW1pYzoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q2FwYWJpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0NhcGFiaWxpdGllcy5jcHAJKHJldmlzaW9uIDE4MjQ5OCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTYsNyAr
OTYsNiBAQCBDYXBhYmlsaXR5TGV2ZWwgY2FwYWJpbGl0eUxldmVsKE9wY29kZUlECiAgICAgCiAg
ICAgc3dpdGNoIChvcGNvZGVJRCkgewogICAgIGNhc2Ugb3BfZW50ZXI6Ci0gICAgY2FzZSBvcF90
b3VjaF9lbnRyeToKICAgICBjYXNlIG9wX3RvX3RoaXM6CiAgICAgY2FzZSBvcF9jaGVja190ZHo6
CiAgICAgY2FzZSBvcF9jcmVhdGVfdGhpczoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ2xvYmJlcml6ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ2xvYmJlcml6ZS5oCShyZXZpc2lvbiAxODI0OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkod29ya2luZyBjb3B5KQpAQCAtMzExLDEwICszMTEs
MTQgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgICAgICB3
cml0ZShTaWRlU3RhdGUpOwogICAgICAgICByZXR1cm47CiAKLSAgICBjYXNlIENyZWF0ZUFjdGl2
YXRpb246CisgICAgY2FzZSBDcmVhdGVBY3RpdmF0aW9uOiB7CisgICAgICAgIFN5bWJvbFRhYmxl
KiB0YWJsZSA9IGdyYXBoLnN5bWJvbFRhYmxlRm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7Cisg
ICAgICAgIGlmICh0YWJsZS0+c2luZ2xldG9uU2NvcGUoKS0+aXNTdGlsbFZhbGlkKCkpCisgICAg
ICAgICAgICB3cml0ZShXYXRjaHBvaW50X2ZpcmUpOwogICAgICAgICByZWFkKEhlYXBPYmplY3RD
b3VudCk7CiAgICAgICAgIHdyaXRlKEhlYXBPYmplY3RDb3VudCk7CiAgICAgICAgIHJldHVybjsK
KyAgICB9CiAgICAgICAgIAogICAgIGNhc2UgQ3JlYXRlRGlyZWN0QXJndW1lbnRzOgogICAgIGNh
c2UgQ3JlYXRlU2NvcGVkQXJndW1lbnRzOgpAQCAtODU4LDExICs4NjIsMTcgQEAgdm9pZCBjbG9i
YmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgIGNhc2UgTmV3U3RyaW5nT2JqZWN0
OgogICAgIGNhc2UgUGhhbnRvbU5ld09iamVjdDoKICAgICBjYXNlIE1hdGVyaWFsaXplTmV3T2Jq
ZWN0OgotICAgIGNhc2UgTmV3RnVuY3Rpb246CiAgICAgICAgIHJlYWQoSGVhcE9iamVjdENvdW50
KTsKICAgICAgICAgd3JpdGUoSGVhcE9iamVjdENvdW50KTsKICAgICAgICAgcmV0dXJuOwogICAg
ICAgICAKKyAgICBjYXNlIE5ld0Z1bmN0aW9uOgorICAgICAgICBpZiAobm9kZS0+Y2FzdE9wZXJh
bmQ8RnVuY3Rpb25FeGVjdXRhYmxlKj4oKS0+c2luZ2xldG9uRnVuY3Rpb24oKS0+aXNTdGlsbFZh
bGlkKCkpCisgICAgICAgICAgICB3cml0ZShXYXRjaHBvaW50X2ZpcmUpOworICAgICAgICByZWFk
KEhlYXBPYmplY3RDb3VudCk7CisgICAgICAgIHdyaXRlKEhlYXBPYmplY3RDb3VudCk7CisgICAg
ICAgIHJldHVybjsKKwogICAgIGNhc2UgUmVnRXhwRXhlYzoKICAgICBjYXNlIFJlZ0V4cFRlc3Q6
CiAgICAgICAgIHJlYWQoUmVnRXhwU3RhdGUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmNwcAkocmV2aXNpb24gMTgyNDk4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ0LDYgKzQ0LDEzIEBAIHZvaWQgQXJyYXlCdWZmZXJWaWV3
V2F0Y2hwb2ludEFkYXB0b3I6OmEKICAgICBjb2RlQmxvY2stPnZtKCktPmhlYXAuYWRkUmVmZXJl
bmNlKG5ldXRlcmluZ1dhdGNocG9pbnQsIHZpZXctPmJ1ZmZlcigpKTsKIH0KIAordm9pZCBJbmZl
cnJlZFZhbHVlQWRhcHRvcjo6YWRkKAorICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBJbmZlcnJl
ZFZhbHVlKiBpbmZlcnJlZFZhbHVlLCBXYXRjaHBvaW50KiB3YXRjaHBvaW50KQoreworICAgIGNv
ZGVCbG9jay0+YWRkQ29uc3RhbnQoaW5mZXJyZWRWYWx1ZSk7IC8vIEZvciBjb21tb24gdXNlcnMs
IGl0IGRvZXNuJ3QgcmVhbGx5IG1hdHRlciBpZiBpdCdzIHdlYWsgb3Igbm90LiBJZiByZWZlcmVu
Y2VzIHRvIGl0IGdvIGF3YXksIHdlIGdvIGF3YXksIHRvby4KKyAgICBpbmZlcnJlZFZhbHVlLT5h
ZGQod2F0Y2hwb2ludCk7Cit9CisKIERlc2lyZWRXYXRjaHBvaW50czo6RGVzaXJlZFdhdGNocG9p
bnRzKCkgeyB9CiBEZXNpcmVkV2F0Y2hwb2ludHM6On5EZXNpcmVkV2F0Y2hwb2ludHMoKSB7IH0K
IApAQCAtNTcsNiArNjQsMTEgQEAgdm9pZCBEZXNpcmVkV2F0Y2hwb2ludHM6OmFkZExhemlseShJ
bmxpbgogICAgIG1faW5saW5lU2V0cy5hZGRMYXppbHkoJnNldCk7CiB9CiAKK3ZvaWQgRGVzaXJl
ZFdhdGNocG9pbnRzOjphZGRMYXppbHkoSW5mZXJyZWRWYWx1ZSogaW5mZXJyZWRWYWx1ZSkKK3sK
KyAgICBtX2luZmVycmVkVmFsdWVzLmFkZExhemlseShpbmZlcnJlZFZhbHVlKTsKK30KKwogdm9p
ZCBEZXNpcmVkV2F0Y2hwb2ludHM6OmFkZExhemlseShKU0FycmF5QnVmZmVyVmlldyogdmlldykK
IHsKICAgICBtX2J1ZmZlclZpZXdzLmFkZExhemlseSh2aWV3KTsKQEAgLTc0LDYgKzg2LDcgQEAg
dm9pZCBEZXNpcmVkV2F0Y2hwb2ludHM6OnJlYWxseUFkZChDb2RlQgogewogICAgIG1fc2V0cy5y
ZWFsbHlBZGQoY29kZUJsb2NrLCBjb21tb25EYXRhKTsKICAgICBtX2lubGluZVNldHMucmVhbGx5
QWRkKGNvZGVCbG9jaywgY29tbW9uRGF0YSk7CisgICAgbV9pbmZlcnJlZFZhbHVlcy5yZWFsbHlB
ZGQoY29kZUJsb2NrLCBjb21tb25EYXRhKTsKICAgICBtX2J1ZmZlclZpZXdzLnJlYWxseUFkZChj
b2RlQmxvY2ssIGNvbW1vbkRhdGEpOwogfQogCkBAIC04MSw2ICs5NCw3IEBAIGJvb2wgRGVzaXJl
ZFdhdGNocG9pbnRzOjphcmVTdGlsbFZhbGlkKCkKIHsKICAgICByZXR1cm4gbV9zZXRzLmFyZVN0
aWxsVmFsaWQoKQogICAgICAgICAmJiBtX2lubGluZVNldHMuYXJlU3RpbGxWYWxpZCgpCisgICAg
ICAgICYmIG1faW5mZXJyZWRWYWx1ZXMuYXJlU3RpbGxWYWxpZCgpCiAgICAgICAgICYmIG1fYnVm
ZmVyVmlld3MuYXJlU3RpbGxWYWxpZCgpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmgJKHJldmlzaW9uIDE4MjQ5OCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAy
MDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAiQ29kZU9yaWdpbi5o
IgogI2luY2x1ZGUgIkRGR0NvbW1vbkRhdGEuaCIKKyNpbmNsdWRlICJJbmZlcnJlZFZhbHVlLmgi
CiAjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlclZpZXcuaCIKICNpbmNsdWRlICJXYXRjaHBvaW50Lmgi
CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KQEAgLTUwLDYgKzUxLDE0IEBAIHN0cnVjdCBHZW5l
cmljU2V0QWRhcHRvciB7CiAgICAgc3RhdGljIGJvb2wgaGFzQmVlbkludmFsaWRhdGVkKFQqIHNl
dCkgeyByZXR1cm4gc2V0LT5oYXNCZWVuSW52YWxpZGF0ZWQoKTsgfQogfTsKIAorc3RydWN0IElu
ZmVycmVkVmFsdWVBZGFwdG9yIHsKKyAgICBzdGF0aWMgdm9pZCBhZGQoQ29kZUJsb2NrKiwgSW5m
ZXJyZWRWYWx1ZSosIFdhdGNocG9pbnQqKTsKKyAgICBzdGF0aWMgYm9vbCBoYXNCZWVuSW52YWxp
ZGF0ZWQoSW5mZXJyZWRWYWx1ZSogaW5mZXJyZWRWYWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVy
biBpbmZlcnJlZFZhbHVlLT5oYXNCZWVuSW52YWxpZGF0ZWQoKTsKKyAgICB9Cit9OworCiBzdHJ1
Y3QgQXJyYXlCdWZmZXJWaWV3V2F0Y2hwb2ludEFkYXB0b3IgewogICAgIHN0YXRpYyB2b2lkIGFk
ZChDb2RlQmxvY2sqLCBKU0FycmF5QnVmZmVyVmlldyosIFdhdGNocG9pbnQqKTsKICAgICBzdGF0
aWMgYm9vbCBoYXNCZWVuSW52YWxpZGF0ZWQoSlNBcnJheUJ1ZmZlclZpZXcqIHZpZXcpCkBAIC0x
MTksNiArMTI4LDcgQEAgcHVibGljOgogICAgIAogICAgIHZvaWQgYWRkTGF6aWx5KFdhdGNocG9p
bnRTZXQqKTsKICAgICB2b2lkIGFkZExhemlseShJbmxpbmVXYXRjaHBvaW50U2V0Jik7CisgICAg
dm9pZCBhZGRMYXppbHkoSW5mZXJyZWRWYWx1ZSopOwogICAgIHZvaWQgYWRkTGF6aWx5KEpTQXJy
YXlCdWZmZXJWaWV3Kik7CiAgICAgCiAgICAgYm9vbCBjb25zaWRlcihTdHJ1Y3R1cmUqKTsKQEAg
LTEzNSw2ICsxNDUsMTAgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIG1faW5saW5l
U2V0cy5pc1dhdGNoZWQoJnNldCk7CiAgICAgfQorICAgIGJvb2wgaXNXYXRjaGVkKEluZmVycmVk
VmFsdWUqIGluZmVycmVkVmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gbV9pbmZlcnJlZFZh
bHVlcy5pc1dhdGNoZWQoaW5mZXJyZWRWYWx1ZSk7CisgICAgfQogICAgIGJvb2wgaXNXYXRjaGVk
KEpTQXJyYXlCdWZmZXJWaWV3KiB2aWV3KQogICAgIHsKICAgICAgICAgcmV0dXJuIG1fYnVmZmVy
Vmlld3MuaXNXYXRjaGVkKHZpZXcpOwpAQCAtMTQzLDYgKzE1Nyw3IEBAIHB1YmxpYzoKIHByaXZh
dGU6CiAgICAgR2VuZXJpY0Rlc2lyZWRXYXRjaHBvaW50czxXYXRjaHBvaW50U2V0PiBtX3NldHM7
CiAgICAgR2VuZXJpY0Rlc2lyZWRXYXRjaHBvaW50czxJbmxpbmVXYXRjaHBvaW50U2V0PiBtX2lu
bGluZVNldHM7CisgICAgR2VuZXJpY0Rlc2lyZWRXYXRjaHBvaW50czxJbmZlcnJlZFZhbHVlLCBJ
bmZlcnJlZFZhbHVlQWRhcHRvcj4gbV9pbmZlcnJlZFZhbHVlczsKICAgICBHZW5lcmljRGVzaXJl
ZFdhdGNocG9pbnRzPEpTQXJyYXlCdWZmZXJWaWV3LCBBcnJheUJ1ZmZlclZpZXdXYXRjaHBvaW50
QWRhcHRvcj4gbV9idWZmZXJWaWV3czsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiAxODI0OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzExLDggKzMxMSw4IEBAIHZv
aWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwgY29uc3QKICAgICAgICAgb3V0LnByaW50
KGNvbW1hLCAiXiIsIG5vZGUtPnBoaSgpLT5pbmRleCgpKTsKICAgICBpZiAobm9kZS0+aGFzRXhl
Y3V0aW9uQ291bnRlcigpKQogICAgICAgICBvdXQucHJpbnQoY29tbWEsIFJhd1BvaW50ZXIobm9k
ZS0+ZXhlY3V0aW9uQ291bnRlcigpKSk7Ci0gICAgaWYgKG5vZGUtPmhhc1ZhcmlhYmxlV2F0Y2hw
b2ludFNldCgpKQotICAgICAgICBvdXQucHJpbnQoY29tbWEsIFJhd1BvaW50ZXIobm9kZS0+dmFy
aWFibGVXYXRjaHBvaW50U2V0KCkpKTsKKyAgICBpZiAobm9kZS0+aGFzV2F0Y2hwb2ludFNldCgp
KQorICAgICAgICBvdXQucHJpbnQoY29tbWEsIFJhd1BvaW50ZXIobm9kZS0+d2F0Y2hwb2ludFNl
dCgpKSk7CiAgICAgaWYgKG5vZGUtPmhhc1N0b3JhZ2VQb2ludGVyKCkpCiAgICAgICAgIG91dC5w
cmludChjb21tYSwgUmF3UG9pbnRlcihub2RlLT5zdG9yYWdlUG9pbnRlcigpKSk7CiAgICAgaWYg
KG5vZGUtPmhhc09iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEoKSkKQEAgLTEwMjYsNiArMTAyNiw4
IEBAIEpTVmFsdWUgR3JhcGg6OnRyeUdldENvbnN0YW50UHJvcGVydHkoY28KIAogSlNWYWx1ZSBH
cmFwaDo6dHJ5R2V0Q29uc3RhbnRDbG9zdXJlVmFyKEpTVmFsdWUgYmFzZSwgU2NvcGVPZmZzZXQg
b2Zmc2V0KQogeworICAgIC8vIFRoaXMgaGFzIGFuIGF3ZXNvbWUgY29uY3VycmVuY3kgc3Rvcnku
IFNlZSBjb21tZW50IGZvciBHZXRHbG9iYWxWYXIgaW4gQnl0ZUNvZGVQYXJzZXIuCisgICAgCiAg
ICAgaWYgKCFiYXNlKQogICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwogICAgIApAQCAtMTAzNCwy
NCArMTAzNiwyOCBAQCBKU1ZhbHVlIEdyYXBoOjp0cnlHZXRDb25zdGFudENsb3N1cmVWYXIoCiAg
ICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CiAgICAgCiAgICAgU3ltYm9sVGFibGUqIHN5bWJvbFRh
YmxlID0gYWN0aXZhdGlvbi0+c3ltYm9sVGFibGUoKTsKLSAgICBDb25jdXJyZW50SklUTG9ja2Vy
IGxvY2tlcihzeW1ib2xUYWJsZS0+bV9sb2NrKTsKLSAgICAKLSAgICBpZiAoc3ltYm9sVGFibGUt
Pm1fZnVuY3Rpb25FbnRlcmVkT25jZS5oYXNCZWVuSW52YWxpZGF0ZWQoKSkKLSAgICAgICAgcmV0
dXJuIEpTVmFsdWUoKTsKLSAgICAKLSAgICBTeW1ib2xUYWJsZUVudHJ5KiBlbnRyeSA9IHN5bWJv
bFRhYmxlLT5lbnRyeUZvcihsb2NrZXIsIG9mZnNldCk7Ci0gICAgaWYgKCFlbnRyeSkKLSAgICAg
ICAgcmV0dXJuIEpTVmFsdWUoKTsKLSAgICAKLSAgICBWYXJpYWJsZVdhdGNocG9pbnRTZXQqIHNl
dCA9IGVudHJ5LT53YXRjaHBvaW50U2V0KCk7Ci0gICAgaWYgKCFzZXQpCi0gICAgICAgIHJldHVy
biBKU1ZhbHVlKCk7Ci0gICAgCi0gICAgSlNWYWx1ZSB2YWx1ZSA9IHNldC0+aW5mZXJyZWRWYWx1
ZSgpOwotICAgIGlmICghdmFsdWUpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CisgICAgSlNW
YWx1ZSB2YWx1ZTsKKyAgICBXYXRjaHBvaW50U2V0KiBzZXQ7CisgICAgeworICAgICAgICBDb25j
dXJyZW50SklUTG9ja2VyIGxvY2tlcihzeW1ib2xUYWJsZS0+bV9sb2NrKTsKKyAgICAgICAgCisg
ICAgICAgIFN5bWJvbFRhYmxlRW50cnkqIGVudHJ5ID0gc3ltYm9sVGFibGUtPmVudHJ5Rm9yKGxv
Y2tlciwgb2Zmc2V0KTsKKyAgICAgICAgaWYgKCFlbnRyeSkKKyAgICAgICAgICAgIHJldHVybiBK
U1ZhbHVlKCk7CisgICAgICAgIAorICAgICAgICBzZXQgPSBlbnRyeS0+d2F0Y2hwb2ludFNldCgp
OworICAgICAgICBpZiAoIXNldCkKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CisgICAg
ICAgIAorICAgICAgICBpZiAoc2V0LT5zdGF0ZSgpICE9IElzV2F0Y2hlZCkKKyAgICAgICAgICAg
IHJldHVybiBKU1ZhbHVlKCk7CisgICAgICAgIAorICAgICAgICBBU1NFUlQoZW50cnktPnNjb3Bl
T2Zmc2V0KCkgPT0gb2Zmc2V0KTsKKyAgICAgICAgdmFsdWUgPSBhY3RpdmF0aW9uLT52YXJpYWJs
ZUF0KG9mZnNldCkuZ2V0KCk7CisgICAgICAgIGlmICghdmFsdWUpCisgICAgICAgICAgICByZXR1
cm4gSlNWYWx1ZSgpOworICAgIH0KICAgICAKLSAgICB3YXRjaHBvaW50cygpLmFkZExhemlseShz
eW1ib2xUYWJsZS0+bV9mdW5jdGlvbkVudGVyZWRPbmNlKTsKICAgICB3YXRjaHBvaW50cygpLmFk
ZExhemlseShzZXQpOwogICAgIAogICAgIHJldHVybiB2YWx1ZTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTm9kZS5oCShyZXZpc2lvbiAxODI0OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTIxOSwxNCArMTIxOSwxNCBA
QCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIG1fb3BJbmZvID0gYml0d2lzZV9jYXN0PHVpbnRwdHJf
dD4odmFsdWUpOwogICAgIH0KICAgICAKLSAgICBib29sIGhhc1ZhcmlhYmxlV2F0Y2hwb2ludFNl
dCgpCisgICAgYm9vbCBoYXNXYXRjaHBvaW50U2V0KCkKICAgICB7CiAgICAgICAgIHJldHVybiBv
cCgpID09IE5vdGlmeVdyaXRlOwogICAgIH0KICAgICAKLSAgICBWYXJpYWJsZVdhdGNocG9pbnRT
ZXQqIHZhcmlhYmxlV2F0Y2hwb2ludFNldCgpCisgICAgV2F0Y2hwb2ludFNldCogd2F0Y2hwb2lu
dFNldCgpCiAgICAgewotICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxWYXJpYWJsZVdh
dGNocG9pbnRTZXQqPihtX29wSW5mbyk7CisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0
PFdhdGNocG9pbnRTZXQqPihtX29wSW5mbyk7CiAgICAgfQogICAgIAogICAgIGJvb2wgaGFzU3Rv
cmFnZVBvaW50ZXIoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRp
b25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJh
dGlvbnMuY3BwCShyZXZpc2lvbiAxODI0OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDc3LDEzICsxMDc3LDEyIEBA
IGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uU3dpdGNoU3RyaW4KICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8Y2hhcio+KGV4ZWMtPmNvZGVCbG9jaygpLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUo
dGFibGVJbmRleCkuY3RpRm9yVmFsdWUoc3RyaW5nLT52YWx1ZShleGVjKS5pbXBsKCkpLmV4ZWN1
dGFibGVBZGRyZXNzKCkpOwogfQogCi12b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTm90aWZ5
V3JpdGUoRXhlY1N0YXRlKiBleGVjLCBWYXJpYWJsZVdhdGNocG9pbnRTZXQqIHNldCwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5vdGlm
eVdyaXRlKEV4ZWNTdGF0ZSogZXhlYywgV2F0Y2hwb2ludFNldCogc2V0KQogewogICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4
ZWMpOwotICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsK
IAotICAgIHNldC0+bm90aWZ5V3JpdGUodm0sIHZhbHVlLCAiRXhlY3V0ZWQgTm90aWZ5V3JpdGUi
KTsKKyAgICBzZXQtPnRvdWNoKCJFeGVjdXRlZCBOb3RpZnlXcml0ZSIpOwogfQogCiB2b2lkIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uVGhyb3dTdGFja092ZXJmbG93Rm9yVmFyYXJncyhFeGVjU3Rh
dGUqIGV4ZWMpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMu
aAkocmV2aXNpb24gMTgyNDk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVy
YXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyNyw3ICsxMjcsNyBAQCBKU0NlbGwqIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uTWFrZVJvcGUyCiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uTWFrZVJvcGUzKEV4ZWNTdGF0ZSosIEpTU3RyaW5nKiwgSlNTdHJpbmcqLCBKU1N0cmluZyop
OwogY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25GaW5kU3dpdGNoSW1tVGFyZ2V0Rm9yRG91
YmxlKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBzaXplX3QgdGFibGVJbmRleCk7CiBjaGFy
KiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblN3aXRjaFN0cmluZyhFeGVjU3RhdGUqLCBzaXplX3Qg
dGFibGVJbmRleCwgSlNTdHJpbmcqKTsKLXZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25Ob3Rp
ZnlXcml0ZShFeGVjU3RhdGUqLCBWYXJpYWJsZVdhdGNocG9pbnRTZXQqLCBFbmNvZGVkSlNWYWx1
ZSk7Cit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTm90aWZ5V3JpdGUoRXhlY1N0YXRlKiwg
V2F0Y2hwb2ludFNldCopOwogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRocm93U3RhY2tP
dmVyZmxvd0ZvclZhcmFyZ3MoRXhlY1N0YXRlKikgV1RGX0lOVEVSTkFMOwogaW50MzJfdCBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvblNpemVPZlZhcmFyZ3MoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFs
dWUgYXJndW1lbnRzLCBpbnQzMl90IGZpcnN0VmFyQXJnT2Zmc2V0KTsKIHZvaWQgSklUX09QRVJB
VElPTiBvcGVyYXRpb25Mb2FkVmFyYXJncyhFeGVjU3RhdGUqLCBpbnQzMl90IGZpcnN0RWxlbWVu
dERlc3QsIEVuY29kZWRKU1ZhbHVlIGFyZ3VtZW50cywgaW50MzJfdCBvZmZzZXQsIGludDMyX3Qg
bGVuZ3RoLCBpbnQzMl90IG1hbmRhdG9yeU1pbmltdW0pOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCShyZXZpc2lv
biAxODI0OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
MzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTg3LDMyICszOTg3LDcgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgIH0KIAogICAgIGNhc2UgTm90aWZ5
V3JpdGU6IHsKLSAgICAgICAgVmFyaWFibGVXYXRjaHBvaW50U2V0KiBzZXQgPSBub2RlLT52YXJp
YWJsZVdhdGNocG9pbnRTZXQoKTsKLSAgICAKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUo
dGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBHUFJSZWcgdmFsdWVUYWdHUFIgPSB2YWx1
ZS50YWdHUFIoKTsKLSAgICAgICAgR1BSUmVnIHZhbHVlUGF5bG9hZEdQUiA9IHZhbHVlLnBheWxv
YWRHUFIoKTsKLSAgICAKLSAgICAgICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7Ci0gICAgICAg
IEdQUlJlZyB0ZW1wR1BSID0gdGVtcC5ncHIoKTsKLSAgICAKLSAgICAgICAgbV9qaXQubG9hZDgo
c2V0LT5hZGRyZXNzT2ZTdGF0ZSgpLCB0ZW1wR1BSKTsKLSAgICAKLSAgICAgICAgSklUQ29tcGls
ZXI6Okp1bXAgaXNEb25lID0gbV9qaXQuYnJhbmNoMzIoSklUQ29tcGlsZXI6OkVxdWFsLCB0ZW1w
R1BSLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpOwotICAgICAgICBKSVRDb21waWxlcjo6
SnVtcExpc3Qgbm90aWZ5U2xvdzsKLSAgICAgICAgbm90aWZ5U2xvdy5hcHBlbmQobV9qaXQuYnJh
bmNoMzIoCi0gICAgICAgICAgICBKSVRDb21waWxlcjo6Tm90RXF1YWwsCi0gICAgICAgICAgICBK
SVRDb21waWxlcjo6QWJzb2x1dGVBZGRyZXNzKHNldC0+YWRkcmVzc09mSW5mZXJyZWRWYWx1ZSgp
LT5wYXlsb2FkUG9pbnRlcigpKSwKLSAgICAgICAgICAgIHZhbHVlUGF5bG9hZEdQUikpOwotICAg
ICAgICBub3RpZnlTbG93LmFwcGVuZChtX2ppdC5icmFuY2gzMigKLSAgICAgICAgICAgIEpJVENv
bXBpbGVyOjpOb3RFcXVhbCwgCi0gICAgICAgICAgICBKSVRDb21waWxlcjo6QWJzb2x1dGVBZGRy
ZXNzKHNldC0+YWRkcmVzc09mSW5mZXJyZWRWYWx1ZSgpLT50YWdQb2ludGVyKCkpLAotICAgICAg
ICAgICAgdmFsdWVUYWdHUFIpKTsKLSAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCi0gICAg
ICAgICAgICBzbG93UGF0aENhbGwobm90aWZ5U2xvdywgdGhpcywgb3BlcmF0aW9uTm90aWZ5V3Jp
dGUsIE5vUmVzdWx0LCBzZXQsIHZhbHVlVGFnR1BSLCB2YWx1ZVBheWxvYWRHUFIpKTsKLSAgICAg
ICAgaXNEb25lLmxpbmsoJm1faml0KTsKLSAgICAKLSAgICAgICAgbm9SZXN1bHQobm9kZSk7Cisg
ICAgICAgIGNvbXBpbGVOb3RpZnlXcml0ZShub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQ2NC5jcHAJKHJldmlzaW9uIDE4MjQ5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwMTksMjYgKzQwMTks
NyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgfQogCiAg
ICAgY2FzZSBOb3RpZnlXcml0ZTogewotICAgICAgICBWYXJpYWJsZVdhdGNocG9pbnRTZXQqIHNl
dCA9IG5vZGUtPnZhcmlhYmxlV2F0Y2hwb2ludFNldCgpOwotICAgIAotICAgICAgICBKU1ZhbHVl
T3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIEdQUlJlZyB2YWx1
ZUdQUiA9IHZhbHVlLmdwcigpOwotICAgIAotICAgICAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlz
KTsKLSAgICAgICAgR1BSUmVnIHRlbXBHUFIgPSB0ZW1wLmdwcigpOwotICAgIAotICAgICAgICBt
X2ppdC5sb2FkOChzZXQtPmFkZHJlc3NPZlN0YXRlKCksIHRlbXBHUFIpOwotICAgIAotICAgICAg
ICBKSVRDb21waWxlcjo6SnVtcCBpc0RvbmUgPQotICAgICAgICAgICAgbV9qaXQuYnJhbmNoMzIo
SklUQ29tcGlsZXI6OkVxdWFsLCB0ZW1wR1BSLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkp
OwotICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBzbG93Q2FzZSA9IG1faml0LmJyYW5jaDY0KEpJ
VENvbXBpbGVyOjpOb3RFcXVhbCwKLSAgICAgICAgICAgIEpJVENvbXBpbGVyOjpBYnNvbHV0ZUFk
ZHJlc3Moc2V0LT5hZGRyZXNzT2ZJbmZlcnJlZFZhbHVlKCkpLCB2YWx1ZUdQUik7Ci0gICAgICAg
IGlzRG9uZS5saW5rKCZtX2ppdCk7Ci0gICAgCi0gICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9y
KAotICAgICAgICAgICAgc2xvd1BhdGhDYWxsKHNsb3dDYXNlLCB0aGlzLCBvcGVyYXRpb25Ob3Rp
ZnlXcml0ZSwgTm9SZXN1bHQsIHNldCwgdmFsdWVHUFIpKTsKLQotICAgICAgICBub1Jlc3VsdChu
b2RlKTsKKyAgICAgICAgY29tcGlsZU5vdGlmeVdyaXRlKG5vZGUpOwogICAgICAgICBicmVhazsK
ICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQuY3BwCShyZXZpc2lvbiAxODI0OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDM2Nyw4ICs0MzY3
LDEzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVOZXdGdW5jdGlvbigKICAgICBTcGVj
dWxhdGVDZWxsT3BlcmFuZCBzY29wZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgR1BSUmVn
IHNjb3BlR1BSID0gc2NvcGUuZ3ByKCk7CiAgICAgZmx1c2hSZWdpc3RlcnMoKTsKLSAgICBjYWxs
T3BlcmF0aW9uKAotICAgICAgICBvcGVyYXRpb25OZXdGdW5jdGlvbiwgcmVzdWx0R1BSLCBzY29w
ZUdQUiwgbm9kZS0+Y2FzdE9wZXJhbmQ8RnVuY3Rpb25FeGVjdXRhYmxlKj4oKSk7CisgICAgRnVu
Y3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gbm9kZS0+Y2FzdE9wZXJhbmQ8RnVuY3Rpb25F
eGVjdXRhYmxlKj4oKTsKKyAgICBKX0pJVE9wZXJhdGlvbl9FSnNjQyBmdW5jdGlvbjsKKyAgICBp
ZiAoZXhlY3V0YWJsZS0+c2luZ2xldG9uRnVuY3Rpb24oKS0+aXNTdGlsbFZhbGlkKCkpCisgICAg
ICAgIGZ1bmN0aW9uID0gb3BlcmF0aW9uTmV3RnVuY3Rpb247CisgICAgZWxzZQorICAgICAgICBm
dW5jdGlvbiA9IG9wZXJhdGlvbk5ld0Z1bmN0aW9uV2l0aEludmFsaWRhdGVkUmVhbGxvY2F0aW9u
V2F0Y2hwb2ludDsKKyAgICBjYWxsT3BlcmF0aW9uKGZ1bmN0aW9uLCByZXN1bHRHUFIsIHNjb3Bl
R1BSLCBleGVjdXRhYmxlKTsKICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CiB9CiAK
QEAgLTQ0MzYsMTkgKzQ0NDEsMzEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUZvcndh
cmRWYXJhcgogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ3JlYXRlQWN0aXZhdGlvbihO
b2RlKiBub2RlKQogeworICAgIFN5bWJvbFRhYmxlKiB0YWJsZSA9IG1faml0LmdyYXBoKCkuc3lt
Ym9sVGFibGVGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsKKyAgICBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSA9IG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKAorICAgICAgICBub2RlLT5vcmln
aW4uc2VtYW50aWMpLT5hY3RpdmF0aW9uU3RydWN0dXJlKCk7CisgICAgICAgIAogICAgIFNwZWN1
bGF0ZUNlbGxPcGVyYW5kIHNjb3BlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICBHUFJSZWcg
c2NvcGVHUFIgPSBzY29wZS5ncHIoKTsKKyAgICAKKyAgICBpZiAodGFibGUtPnNpbmdsZXRvblNj
b3BlKCktPmlzU3RpbGxWYWxpZCgpKSB7CisgICAgICAgIEdQUkZsdXNoZWRDYWxsUmVzdWx0IHJl
c3VsdCh0aGlzKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAg
ICAgICAgCisgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CisgICAgICAgIAorICAgICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbkNyZWF0ZUFjdGl2YXRpb25EaXJlY3QsIHJlc3VsdEdQUiwgc3Ry
dWN0dXJlLCBzY29wZUdQUiwgdGFibGUpOworICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwg
bm9kZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCiAgICAgR1BSVGVtcG9yYXJ5IHJl
c3VsdCh0aGlzKTsKICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaDEodGhpcyk7CiAgICAgR1BSVGVt
cG9yYXJ5IHNjcmF0Y2gyKHRoaXMpOwotICAgIEdQUlJlZyBzY29wZUdQUiA9IHNjb3BlLmdwcigp
OwogICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CiAgICAgR1BSUmVnIHNjcmF0
Y2gxR1BSID0gc2NyYXRjaDEuZ3ByKCk7CiAgICAgR1BSUmVnIHNjcmF0Y2gyR1BSID0gc2NyYXRj
aDIuZ3ByKCk7CiAgICAgICAgIAotICAgIFN5bWJvbFRhYmxlKiB0YWJsZSA9IG1faml0LmdyYXBo
KCkuc3ltYm9sVGFibGVGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsKLSAgICBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSA9IG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKAotICAgICAgICBub2Rl
LT5vcmlnaW4uc2VtYW50aWMpLT5hY3RpdmF0aW9uU3RydWN0dXJlKCk7Ci0gICAgICAgIAogICAg
IEpJVENvbXBpbGVyOjpKdW1wTGlzdCBzbG93UGF0aDsKICAgICBlbWl0QWxsb2NhdGVKU09iamVj
dFdpdGhLbm93blNpemU8SlNMZXhpY2FsRW52aXJvbm1lbnQ+KAogICAgICAgICByZXN1bHRHUFIs
IFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgVHJ1c3RlZEltbVB0cigwKSwgc2NyYXRjaDFHUFIs
IHNjcmF0Y2gyR1BSLApAQCAtNDcxNCw2ICs0NzMxLDIxIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVDcmVhdGVDbG9uZWQKICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CiB9
CiAKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVOb3RpZnlXcml0ZShOb2RlKiBub2RlKQor
eworICAgIFdhdGNocG9pbnRTZXQqIHNldCA9IG5vZGUtPndhdGNocG9pbnRTZXQoKTsKKyAgICAK
KyAgICBKSVRDb21waWxlcjo6SnVtcCBzbG93Q2FzZSA9IG1faml0LmJyYW5jaDgoCisgICAgICAg
IEpJVENvbXBpbGVyOjpOb3RFcXVhbCwKKyAgICAgICAgSklUQ29tcGlsZXI6OkFic29sdXRlQWRk
cmVzcyhzZXQtPmFkZHJlc3NPZlN0YXRlKCkpLAorICAgICAgICBUcnVzdGVkSW1tMzIoSXNJbnZh
bGlkYXRlZCkpOworICAgIAorICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAorICAgICAgICBzbG93
UGF0aENhbGwoc2xvd0Nhc2UsIHRoaXMsIG9wZXJhdGlvbk5vdGlmeVdyaXRlLCBOb1Jlc3VsdCwg
c2V0KSk7CisgICAgCisgICAgbm9SZXN1bHQobm9kZSk7Cit9CisKIGJvb2wgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVSZWdFeHBFeGVjKE5vZGUqIG5vZGUpCiB7CiAgICAgdW5zaWduZWQgYnJhbmNo
SW5kZXhJbkJsb2NrID0gZGV0ZWN0UGVlcEhvbGVCcmFuY2goKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHJldmlzaW9uIDE4MjQ5OCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTQ2MCw5ICsxNDYwLDkgQEAgcHVibGljOgogICAgICAgICByZXR1cm4gYXBw
ZW5kQ2FsbFdpdGhFeGNlcHRpb25DaGVjayhvcGVyYXRpb24pOwogICAgIH0KIAotICAgIEpJVENv
bXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9KSVRPcGVyYXRpb25fRVZ3c0ogb3BlcmF0aW9u
LCBWYXJpYWJsZVdhdGNocG9pbnRTZXQqIHdhdGNocG9pbnRTZXQsIEdQUlJlZyBhcmcpCisgICAg
SklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0pJVE9wZXJhdGlvbl9FV3Mgb3BlcmF0
aW9uLCBXYXRjaHBvaW50U2V0KiB3YXRjaHBvaW50U2V0KQogICAgIHsKLSAgICAgICAgbV9qaXQu
c2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW1QdHIod2F0Y2hwb2ludFNldCks
IGFyZyk7CisgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVk
SW1tUHRyKHdhdGNocG9pbnRTZXQpKTsKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGwob3BlcmF0
aW9uKTsKICAgICB9CiAKQEAgLTE3NzYsMTIgKzE3NzYsNiBAQCBwdWJsaWM6CiAgICAgICAgIHJl
dHVybiBhcHBlbmRDYWxsV2l0aEV4Y2VwdGlvbkNoZWNrKG9wZXJhdGlvbik7CiAgICAgfQogCi0g
ICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihWX0pJVE9wZXJhdGlvbl9FVndzSiBv
cGVyYXRpb24sIFZhcmlhYmxlV2F0Y2hwb2ludFNldCogd2F0Y2hwb2ludFNldCwgR1BSUmVnIGFy
Z1RhZywgR1BSUmVnIGFyZ1BheWxvYWQpCi0gICAgewotICAgICAgICBtX2ppdC5zZXR1cEFyZ3Vt
ZW50c1dpdGhFeGVjU3RhdGUoVHJ1c3RlZEltbVB0cih3YXRjaHBvaW50U2V0KSwgYXJnUGF5bG9h
ZCwgYXJnVGFnKTsKLSAgICAgICAgcmV0dXJuIGFwcGVuZENhbGwob3BlcmF0aW9uKTsKLSAgICB9
Ci0KICAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKERfSklUT3BlcmF0aW9uX0VK
IG9wZXJhdGlvbiwgRlBSUmVnIHJlc3VsdCwgR1BSUmVnIGFyZzFUYWcsIEdQUlJlZyBhcmcxUGF5
bG9hZCkKICAgICB7CiAgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShF
QUJJXzMyQklUX0RVTU1ZX0FSRyBhcmcxUGF5bG9hZCwgYXJnMVRhZyk7CkBAIC0yMjEzLDYgKzIy
MDcsNyBAQCBwdWJsaWM6CiAgICAgdm9pZCBjb21waWxlUHV0VG9Bcmd1bWVudHMoTm9kZSopOwog
ICAgIHZvaWQgY29tcGlsZUNyZWF0ZVNjb3BlZEFyZ3VtZW50cyhOb2RlKik7CiAgICAgdm9pZCBj
b21waWxlQ3JlYXRlQ2xvbmVkQXJndW1lbnRzKE5vZGUqKTsKKyAgICB2b2lkIGNvbXBpbGVOb3Rp
ZnlXcml0ZShOb2RlKik7CiAgICAgYm9vbCBjb21waWxlUmVnRXhwRXhlYyhOb2RlKik7CiAgICAg
CiAgICAgSklUQ29tcGlsZXI6Okp1bXAgYnJhbmNoSXNDZWxsKEpTVmFsdWVSZWdzKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHVmFyYXJnc0ZvcndhcmRpbmdQaGFzZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJhcmdzRm9yd2Fy
ZGluZ1BoYXNlLmNwcAkocmV2aXNpb24gMTgyNDk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzIs
NiArMzIsNyBAQAogI2luY2x1ZGUgIkRGR0Nsb2JiZXJpemUuaCIKICNpbmNsdWRlICJERkdHcmFw
aC5oIgogI2luY2x1ZGUgIkRGR1BoYXNlLmgiCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogCiBu
YW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9mdGwvRlRMSW50cmluc2ljUmVwb3NpdG9yeS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9mdGwvRlRMSW50cmluc2ljUmVwb3NpdG9yeS5oCShyZXZpc2lvbiAxODI0
OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTEludHJpbnNpY1JlcG9zaXRvcnku
aAkod29ya2luZyBjb3B5KQpAQCAtMTA1LDcgKzEwNSw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1l
c3BhY2UgRlRMIHsKICAgICBtYWNybyhWX0pJVE9wZXJhdGlvbl9FT1pKLCBmdW5jdGlvblR5cGUo
dm9pZFR5cGUsIGludFB0ciwgaW50UHRyLCBpbnQzMiwgaW50NjQpKSBcCiAgICAgbWFjcm8oVl9K
SVRPcGVyYXRpb25fRUMsIGZ1bmN0aW9uVHlwZSh2b2lkVHlwZSwgaW50UHRyLCBpbnRQdHIpKSBc
CiAgICAgbWFjcm8oVl9KSVRPcGVyYXRpb25fRUNiLCBmdW5jdGlvblR5cGUodm9pZFR5cGUsIGlu
dFB0ciwgaW50UHRyKSkgXAotICAgIG1hY3JvKFZfSklUT3BlcmF0aW9uX0VWd3NKLCBmdW5jdGlv
blR5cGUodm9pZFR5cGUsIGludFB0ciwgaW50UHRyLCBpbnQ2NCkpIFwKKyAgICBtYWNybyhWX0pJ
VE9wZXJhdGlvbl9FV3MsIGZ1bmN0aW9uVHlwZSh2b2lkVHlwZSwgaW50UHRyLCBpbnRQdHIpKSBc
CiAgICAgbWFjcm8oVl9KSVRPcGVyYXRpb25fRVpKWlpaLCBmdW5jdGlvblR5cGUodm9pZFR5cGUs
IGludFB0ciwgaW50MzIsIGludDY0LCBpbnQzMiwgaW50MzIsIGludDMyKSkgXAogICAgIG1hY3Jv
KFZfSklUT3BlcmF0aW9uX0osIGZ1bmN0aW9uVHlwZSh2b2lkVHlwZSwgaW50NjQpKSBcCiAgICAg
bWFjcm8oVl9KSVRPcGVyYXRpb25fWiwgZnVuY3Rpb25UeXBlKHZvaWRUeXBlLCBpbnQzMikpIFwK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0u
Y3BwCShyZXZpc2lvbiAxODI0OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZnRsL0ZUTExv
d2VyREZHVG9MTFZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjg3Nyw2ICsyODc3LDE0IEBAIHBy
aXZhdGU6CiAgICAgICAgIFN5bWJvbFRhYmxlKiB0YWJsZSA9IG1fZ3JhcGguc3ltYm9sVGFibGVG
b3IobV9ub2RlLT5vcmlnaW4uc2VtYW50aWMpOwogICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSA9IG1fZ3JhcGguZ2xvYmFsT2JqZWN0Rm9yKG1fbm9kZS0+b3JpZ2luLnNlbWFudGljKS0+YWN0
aXZhdGlvblN0cnVjdHVyZSgpOwogICAgICAgICAKKyAgICAgICAgaWYgKHRhYmxlLT5zaW5nbGV0
b25TY29wZSgpLT5pc1N0aWxsVmFsaWQoKSkgeworICAgICAgICAgICAgTFZhbHVlIGNhbGxSZXN1
bHQgPSB2bUNhbGwoCisgICAgICAgICAgICAgICAgbV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbkNy
ZWF0ZUFjdGl2YXRpb25EaXJlY3QpLCBtX2NhbGxGcmFtZSwgd2Vha1BvaW50ZXIoc3RydWN0dXJl
KSwKKyAgICAgICAgICAgICAgICBzY29wZSwgd2Vha1BvaW50ZXIodGFibGUpKTsKKyAgICAgICAg
ICAgIHNldEpTVmFsdWUoY2FsbFJlc3VsdCk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IH0KKyAgICAgICAgCiAgICAgICAgIExCYXNpY0Jsb2NrIHNsb3dQYXRoID0gRlRMX05FV19CTE9D
SyhtX291dCwgKCJDcmVhdGVBY3RpdmF0aW9uIHNsb3cgcGF0aCIpKTsKICAgICAgICAgTEJhc2lj
QmxvY2sgY29udGludWF0aW9uID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJDcmVhdGVBY3RpdmF0
aW9uIGNvbnRpbnVhdGlvbiIpKTsKICAgICAgICAgCkBAIC0yOTEyLDkgKzI5MjAsMTYgQEAgcHJp
dmF0ZToKICAgICAKICAgICB2b2lkIGNvbXBpbGVOZXdGdW5jdGlvbigpCiAgICAgeworICAgICAg
ICBGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUgPSBtX25vZGUtPmNhc3RPcGVyYW5kPEZ1
bmN0aW9uRXhlY3V0YWJsZSo+KCk7CisgICAgICAgIEpfSklUT3BlcmF0aW9uX0VKc2NDIGZ1bmN0
aW9uOworICAgICAgICBpZiAoZXhlY3V0YWJsZS0+c2luZ2xldG9uRnVuY3Rpb24oKS0+aXNTdGls
bFZhbGlkKCkpCisgICAgICAgICAgICBmdW5jdGlvbiA9IG9wZXJhdGlvbk5ld0Z1bmN0aW9uOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBmdW5jdGlvbiA9IG9wZXJhdGlvbk5ld0Z1bmN0aW9u
V2l0aEludmFsaWRhdGVkUmVhbGxvY2F0aW9uV2F0Y2hwb2ludDsKKyAgICAgICAgCiAgICAgICAg
IExWYWx1ZSByZXN1bHQgPSB2bUNhbGwoCi0gICAgICAgICAgICBtX291dC5vcGVyYXRpb24ob3Bl
cmF0aW9uTmV3RnVuY3Rpb24pLCBtX2NhbGxGcmFtZSwKLSAgICAgICAgICAgIGxvd0NlbGwobV9u
b2RlLT5jaGlsZDEoKSksIHdlYWtQb2ludGVyKG1fbm9kZS0+Y2FzdE9wZXJhbmQ8RnVuY3Rpb25F
eGVjdXRhYmxlKj4oKSkpOworICAgICAgICAgICAgbV9vdXQub3BlcmF0aW9uKGZ1bmN0aW9uKSwg
bV9jYWxsRnJhbWUsIGxvd0NlbGwobV9ub2RlLT5jaGlsZDEoKSksCisgICAgICAgICAgICB3ZWFr
UG9pbnRlcihleGVjdXRhYmxlKSk7CiAgICAgICAgIHNldEpTVmFsdWUocmVzdWx0KTsKICAgICB9
CiAgICAgCkBAIC0zNzgzLDI5ICszNzk4LDE5IEBAIHByaXZhdGU6CiAgICAgCiAgICAgdm9pZCBj
b21waWxlTm90aWZ5V3JpdGUoKQogICAgIHsKLSAgICAgICAgVmFyaWFibGVXYXRjaHBvaW50U2V0
KiBzZXQgPSBtX25vZGUtPnZhcmlhYmxlV2F0Y2hwb2ludFNldCgpOwotICAgICAgICAKLSAgICAg
ICAgTFZhbHVlIHZhbHVlID0gbG93SlNWYWx1ZShtX25vZGUtPmNoaWxkMSgpKTsKKyAgICAgICAg
V2F0Y2hwb2ludFNldCogc2V0ID0gbV9ub2RlLT53YXRjaHBvaW50U2V0KCk7CiAgICAgICAgIAog
ICAgICAgICBMQmFzaWNCbG9jayBpc05vdEludmFsaWRhdGVkID0gRlRMX05FV19CTE9DSyhtX291
dCwgKCJOb3RpZnlXcml0ZSBub3QgaW52YWxpZGF0ZWQgY2FzZSIpKTsKLSAgICAgICAgTEJhc2lj
QmxvY2sgbm90aWZ5U2xvdyA9IEZUTF9ORVdfQkxPQ0sobV9vdXQsICgiTm90aWZ5V3JpdGUgbm90
aWZ5IHNsb3cgY2FzZSIpKTsKICAgICAgICAgTEJhc2ljQmxvY2sgY29udGludWF0aW9uID0gRlRM
X05FV19CTE9DSyhtX291dCwgKCJOb3RpZnlXcml0ZSBjb250aW51YXRpb24iKSk7CiAgICAgICAg
IAogICAgICAgICBMVmFsdWUgc3RhdGUgPSBtX291dC5sb2FkOChtX291dC5hYnNvbHV0ZShzZXQt
PmFkZHJlc3NPZlN0YXRlKCkpKTsKLSAgICAgICAgCiAgICAgICAgIG1fb3V0LmJyYW5jaCgKICAg
ICAgICAgICAgIG1fb3V0LmVxdWFsKHN0YXRlLCBtX291dC5jb25zdEludDgoSXNJbnZhbGlkYXRl
ZCkpLAogICAgICAgICAgICAgdXN1YWxseShjb250aW51YXRpb24pLCByYXJlbHkoaXNOb3RJbnZh
bGlkYXRlZCkpOwogICAgICAgICAKLSAgICAgICAgTEJhc2ljQmxvY2sgbGFzdE5leHQgPSBtX291
dC5hcHBlbmRUbyhpc05vdEludmFsaWRhdGVkLCBub3RpZnlTbG93KTsKLQotICAgICAgICBtX291
dC5icmFuY2goCi0gICAgICAgICAgICBtX291dC5lcXVhbCh2YWx1ZSwgbV9vdXQubG9hZDY0KG1f
b3V0LmFic29sdXRlKHNldC0+YWRkcmVzc09mSW5mZXJyZWRWYWx1ZSgpKSkpLAotICAgICAgICAg
ICAgdW5zdXJlKGNvbnRpbnVhdGlvbiksIHVuc3VyZShub3RpZnlTbG93KSk7Ci0KLSAgICAgICAg
bV9vdXQuYXBwZW5kVG8obm90aWZ5U2xvdywgY29udGludWF0aW9uKTsKKyAgICAgICAgTEJhc2lj
QmxvY2sgbGFzdE5leHQgPSBtX291dC5hcHBlbmRUbyhpc05vdEludmFsaWRhdGVkLCBjb250aW51
YXRpb24pOwogCi0gICAgICAgIHZtQ2FsbChtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uTm90aWZ5
V3JpdGUpLCBtX2NhbGxGcmFtZSwgbV9vdXQuY29uc3RJbnRQdHIoc2V0KSwgdmFsdWUpOworICAg
ICAgICB2bUNhbGwobV9vdXQub3BlcmF0aW9uKG9wZXJhdGlvbk5vdGlmeVdyaXRlKSwgbV9jYWxs
RnJhbWUsIG1fb3V0LmNvbnN0SW50UHRyKHNldCkpOwogICAgICAgICBtX291dC5qdW1wKGNvbnRp
bnVhdGlvbik7CiAgICAgICAgIAogICAgICAgICBtX291dC5hcHBlbmRUbyhjb250aW51YXRpb24s
IGxhc3ROZXh0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRl
cnByZXRlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJl
dGVyL0ludGVycHJldGVyLmNwcAkocmV2aXNpb24gMTgyNDk4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODks
NiArODksNDcgQEAgdXNpbmcgbmFtZXNwYWNlIHN0ZDsKIAogbmFtZXNwYWNlIEpTQyB7CiAKK1N0
cmluZyBTdGFja0ZyYW1lOjpmcmllbmRseVNvdXJjZVVSTCgpIGNvbnN0Cit7CisgICAgU3RyaW5n
IHRyYWNlTGluZTsKKyAgICAKKyAgICBzd2l0Y2ggKGNvZGVUeXBlKSB7CisgICAgY2FzZSBTdGFj
a0ZyYW1lRXZhbENvZGU6CisgICAgY2FzZSBTdGFja0ZyYW1lRnVuY3Rpb25Db2RlOgorICAgIGNh
c2UgU3RhY2tGcmFtZUdsb2JhbENvZGU6CisgICAgICAgIGlmICghc291cmNlVVJMLmlzRW1wdHko
KSkKKyAgICAgICAgICAgIHRyYWNlTGluZSA9IHNvdXJjZVVSTC5pbXBsKCk7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgU3RhY2tGcmFtZU5hdGl2ZUNvZGU6CisgICAgICAgIHRyYWNlTGluZSA9
ICJbbmF0aXZlIGNvZGVdIjsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIHJldHVybiB0cmFj
ZUxpbmUuaXNOdWxsKCkgPyBlbXB0eVN0cmluZygpIDogdHJhY2VMaW5lOworfQorCitTdHJpbmcg
U3RhY2tGcmFtZTo6ZnJpZW5kbHlGdW5jdGlvbk5hbWUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpIGNv
bnN0Cit7CisgICAgU3RyaW5nIHRyYWNlTGluZTsKKyAgICBKU09iamVjdCogc3RhY2tGcmFtZUNh
bGxlZSA9IGNhbGxlZS5nZXQoKTsKKworICAgIHN3aXRjaCAoY29kZVR5cGUpIHsKKyAgICBjYXNl
IFN0YWNrRnJhbWVFdmFsQ29kZToKKyAgICAgICAgdHJhY2VMaW5lID0gImV2YWwgY29kZSI7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgU3RhY2tGcmFtZU5hdGl2ZUNvZGU6CisgICAgICAgIGlm
IChjYWxsZWUpCisgICAgICAgICAgICB0cmFjZUxpbmUgPSBnZXRDYWxjdWxhdGVkRGlzcGxheU5h
bWUoY2FsbEZyYW1lLCBzdGFja0ZyYW1lQ2FsbGVlKS5pbXBsKCk7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgU3RhY2tGcmFtZUZ1bmN0aW9uQ29kZToKKyAgICAgICAgdHJhY2VMaW5lID0gZ2V0
Q2FsY3VsYXRlZERpc3BsYXlOYW1lKGNhbGxGcmFtZSwgc3RhY2tGcmFtZUNhbGxlZSkuaW1wbCgp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIFN0YWNrRnJhbWVHbG9iYWxDb2RlOgorICAgICAg
ICB0cmFjZUxpbmUgPSAiZ2xvYmFsIGNvZGUiOworICAgICAgICBicmVhazsKKyAgICB9CisgICAg
cmV0dXJuIHRyYWNlTGluZS5pc051bGwoKSA/IGVtcHR5U3RyaW5nKCkgOiB0cmFjZUxpbmU7Cit9
CisKIEpTVmFsdWUgZXZhbChDYWxsRnJhbWUqIGNhbGxGcmFtZSkKIHsKICAgICBpZiAoIWNhbGxG
cmFtZS0+YXJndW1lbnRDb3VudCgpKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVy
cHJldGVyL0ludGVycHJldGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ludGVycHJldGVyL0ludGVycHJldGVyLmgJKHJldmlzaW9uIDE4MjQ5OCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zMyw3ICszMyw2IEBACiAjaW5jbHVkZSAiQXJnTGlzdC5oIgogI2luY2x1ZGUgIkpTQ0pTVmFs
dWUuaCIKICNpbmNsdWRlICJKU0NlbGwuaCIKLSNpbmNsdWRlICJKU0Z1bmN0aW9uLmgiCiAjaW5j
bHVkZSAiSlNPYmplY3QuaCIKICNpbmNsdWRlICJKU1N0YWNrLmgiCiAjaW5jbHVkZSAiTExJbnRE
YXRhLmgiCkBAIC01MSw2ICs1MCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIGNsYXNzIEV4ZWN1
dGFibGVCYXNlOwogICAgIGNsYXNzIEZ1bmN0aW9uRXhlY3V0YWJsZTsKICAgICBjbGFzcyBWTTsK
KyAgICBjbGFzcyBKU0Z1bmN0aW9uOwogICAgIGNsYXNzIEpTR2xvYmFsT2JqZWN0OwogICAgIGNs
YXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKICAgICBjbGFzcyBQcm9ncmFtRXhlY3V0YWJsZTsK
QEAgLTkwLDQ1ICs5MCw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB1bnNpZ25lZCBieXRl
Y29kZU9mZnNldDsKICAgICAgICAgU3RyaW5nIHNvdXJjZVVSTDsKICAgICAgICAgSlNfRVhQT1JU
X1BSSVZBVEUgU3RyaW5nIHRvU3RyaW5nKENhbGxGcmFtZSopOwotICAgICAgICBTdHJpbmcgZnJp
ZW5kbHlTb3VyY2VVUkwoKSBjb25zdAotICAgICAgICB7Ci0gICAgICAgICAgICBTdHJpbmcgdHJh
Y2VMaW5lOwotCi0gICAgICAgICAgICBzd2l0Y2ggKGNvZGVUeXBlKSB7Ci0gICAgICAgICAgICBj
YXNlIFN0YWNrRnJhbWVFdmFsQ29kZToKLSAgICAgICAgICAgIGNhc2UgU3RhY2tGcmFtZUZ1bmN0
aW9uQ29kZToKLSAgICAgICAgICAgIGNhc2UgU3RhY2tGcmFtZUdsb2JhbENvZGU6Ci0gICAgICAg
ICAgICAgICAgaWYgKCFzb3VyY2VVUkwuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgICAgICB0
cmFjZUxpbmUgPSBzb3VyY2VVUkwuaW1wbCgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAg
ICAgICAgICAgY2FzZSBTdGFja0ZyYW1lTmF0aXZlQ29kZToKLSAgICAgICAgICAgICAgICB0cmFj
ZUxpbmUgPSAiW25hdGl2ZSBjb2RlXSI7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICB9Ci0gICAgICAgICAgICByZXR1cm4gdHJhY2VMaW5lLmlzTnVsbCgpID8gZW1wdHlTdHJp
bmcoKSA6IHRyYWNlTGluZTsKLSAgICAgICAgfQotICAgICAgICBTdHJpbmcgZnJpZW5kbHlGdW5j
dGlvbk5hbWUoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAg
ICAgIFN0cmluZyB0cmFjZUxpbmU7Ci0gICAgICAgICAgICBKU09iamVjdCogc3RhY2tGcmFtZUNh
bGxlZSA9IGNhbGxlZS5nZXQoKTsKLQotICAgICAgICAgICAgc3dpdGNoIChjb2RlVHlwZSkgewot
ICAgICAgICAgICAgY2FzZSBTdGFja0ZyYW1lRXZhbENvZGU6Ci0gICAgICAgICAgICAgICAgdHJh
Y2VMaW5lID0gImV2YWwgY29kZSI7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAg
ICBjYXNlIFN0YWNrRnJhbWVOYXRpdmVDb2RlOgotICAgICAgICAgICAgICAgIGlmIChjYWxsZWUp
Ci0gICAgICAgICAgICAgICAgICAgIHRyYWNlTGluZSA9IGdldENhbGN1bGF0ZWREaXNwbGF5TmFt
ZShjYWxsRnJhbWUsIHN0YWNrRnJhbWVDYWxsZWUpLmltcGwoKTsKLSAgICAgICAgICAgICAgICBi
cmVhazsKLSAgICAgICAgICAgIGNhc2UgU3RhY2tGcmFtZUZ1bmN0aW9uQ29kZToKLSAgICAgICAg
ICAgICAgICB0cmFjZUxpbmUgPSBnZXRDYWxjdWxhdGVkRGlzcGxheU5hbWUoY2FsbEZyYW1lLCBz
dGFja0ZyYW1lQ2FsbGVlKS5pbXBsKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAg
ICAgICBjYXNlIFN0YWNrRnJhbWVHbG9iYWxDb2RlOgotICAgICAgICAgICAgICAgIHRyYWNlTGlu
ZSA9ICJnbG9iYWwgY29kZSI7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgICAgICByZXR1cm4gdHJhY2VMaW5lLmlzTnVsbCgpID8gZW1wdHlTdHJpbmcoKSA6
IHRyYWNlTGluZTsKLSAgICAgICAgfQorICAgICAgICBTdHJpbmcgZnJpZW5kbHlTb3VyY2VVUkwo
KSBjb25zdDsKKyAgICAgICAgU3RyaW5nIGZyaWVuZGx5RnVuY3Rpb25OYW1lKENhbGxGcmFtZSop
IGNvbnN0OwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGNvbXB1dGVMaW5lQW5kQ29s
dW1uKHVuc2lnbmVkJiBsaW5lLCB1bnNpZ25lZCYgY29sdW1uKTsKIAogICAgIHByaXZhdGU6Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwCShyZXZpc2lvbiAxODI0OTgpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNSw2ICsx
MDUsMTQgQEAgdm9pZCBKSVQ6OmVtaXRFbnRlck9wdGltaXphdGlvbkNoZWNrKCkKIH0KICNlbmRp
ZgogCit2b2lkIEpJVDo6ZW1pdE5vdGlmeVdyaXRlKFdhdGNocG9pbnRTZXQqIHNldCkKK3sKKyAg
ICBpZiAoIXNldCB8fCBzZXQtPnN0YXRlKCkgPT0gSXNJbnZhbGlkYXRlZCkKKyAgICAgICAgcmV0
dXJuOworICAgIAorICAgIGFkZFNsb3dDYXNlKGJyYW5jaDgoTm90RXF1YWwsIEFic29sdXRlQWRk
cmVzcyhzZXQtPmFkZHJlc3NPZlN0YXRlKCkpLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkp
KTsKK30KKwogdm9pZCBKSVQ6OmFzc2VydFN0YWNrUG9pbnRlck9mZnNldCgpCiB7CiAgICAgaWYg
KEFTU0VSVF9ESVNBQkxFRCkKQEAgLTE4OSw3ICsxOTcsNiBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNv
bXBpbGVNYWluUGFzcygpCiAgICAgICAgIERFRklORV9TTE9XX09QKGlzX29iamVjdF9vcl9udWxs
KQogICAgICAgICBERUZJTkVfU0xPV19PUCh0eXBlb2YpCiAKLSAgICAgICAgREVGSU5FX09QKG9w
X3RvdWNoX2VudHJ5KQogICAgICAgICBERUZJTkVfT1Aob3BfYWRkKQogICAgICAgICBERUZJTkVf
T1Aob3BfYml0YW5kKQogICAgICAgICBERUZJTkVfT1Aob3BfYml0b3IpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklULmgJKHJldmlzaW9uIDE4MjQ5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklULmgJKHdvcmtpbmcgY29weSkKQEAgLTQ1Nyw3ICs0NTcsNiBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgCiAgICAgICAgIHZvaWQgYXNzZXJ0U3RhY2tQb2ludGVyT2Zmc2V0KCk7
CiAKLSAgICAgICAgdm9pZCBlbWl0X29wX3RvdWNoX2VudHJ5KEluc3RydWN0aW9uKik7CiAgICAg
ICAgIHZvaWQgZW1pdF9vcF9hZGQoSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29w
X2JpdGFuZChJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfYml0b3IoSW5zdHJ1
Y3Rpb24qKTsKQEAgLTY0MCwxMyArNjM5LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZv
aWQgZW1pdEdldEdsb2JhbFZhcih1aW50cHRyX3Qgb3BlcmFuZCk7CiAgICAgICAgIHZvaWQgZW1p
dEdldENsb3N1cmVWYXIoaW50IHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCk7CiAgICAgICAgIHZv
aWQgZW1pdFB1dEdsb2JhbFByb3BlcnR5KHVpbnRwdHJfdCogb3BlcmFuZFNsb3QsIGludCB2YWx1
ZSk7Ci0jaWYgVVNFKEpTVkFMVUU2NCkKLSAgICAgICAgdm9pZCBlbWl0Tm90aWZ5V3JpdGUoUmVn
aXN0ZXJJRCB2YWx1ZSwgUmVnaXN0ZXJJRCBzY3JhdGNoLCBWYXJpYWJsZVdhdGNocG9pbnRTZXQq
KTsKLSNlbHNlCi0gICAgICAgIHZvaWQgZW1pdE5vdGlmeVdyaXRlKFJlZ2lzdGVySUQgdGFnLCBS
ZWdpc3RlcklEIHBheWxvYWQsIFJlZ2lzdGVySUQgc2NyYXRjaCwgVmFyaWFibGVXYXRjaHBvaW50
U2V0Kik7Ci0jZW5kaWYKLSAgICAgICAgdm9pZCBlbWl0UHV0R2xvYmFsVmFyKHVpbnRwdHJfdCBv
cGVyYW5kLCBpbnQgdmFsdWUsIFZhcmlhYmxlV2F0Y2hwb2ludFNldCopOwotICAgICAgICB2b2lk
IGVtaXRQdXRDbG9zdXJlVmFyKGludCBzY29wZSwgdWludHB0cl90IG9wZXJhbmQsIGludCB2YWx1
ZSwgVmFyaWFibGVXYXRjaHBvaW50U2V0Kik7CisgICAgICAgIHZvaWQgZW1pdE5vdGlmeVdyaXRl
KFdhdGNocG9pbnRTZXQqKTsKKyAgICAgICAgdm9pZCBlbWl0UHV0R2xvYmFsVmFyKHVpbnRwdHJf
dCBvcGVyYW5kLCBpbnQgdmFsdWUsIFdhdGNocG9pbnRTZXQqKTsKKyAgICAgICAgdm9pZCBlbWl0
UHV0Q2xvc3VyZVZhcihpbnQgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kLCBpbnQgdmFsdWUsIFdh
dGNocG9pbnRTZXQqKTsKIAogICAgICAgICB2b2lkIGVtaXRJbml0UmVnaXN0ZXIoaW50IGRzdCk7
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAkocmV2aXNp
b24gMTgyNDk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtODc5LDE1ICs4NzksNiBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3Bf
dG9fbnVtYmVyKEluc3RydWN0CiAKICNlbmRpZiAvLyBVU0UoSlNWQUxVRTY0KQogCi12b2lkIEpJ
VDo6ZW1pdF9vcF90b3VjaF9lbnRyeShJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQot
ewotICAgIGlmIChtX2NvZGVCbG9jay0+c3ltYm9sVGFibGUoKS0+bV9mdW5jdGlvbkVudGVyZWRP
bmNlLmhhc0JlZW5JbnZhbGlkYXRlZCgpKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgSklU
U2xvd1BhdGhDYWxsIHNsb3dQYXRoQ2FsbCh0aGlzLCBjdXJyZW50SW5zdHJ1Y3Rpb24sIHNsb3df
cGF0aF90b3VjaF9lbnRyeSk7Ci0gICAgc2xvd1BhdGhDYWxsLmNhbGwoKTsKLX0KLQogdm9pZCBK
SVQ6OmVtaXRfb3BfbG9vcF9oaW50KEluc3RydWN0aW9uKikKIHsKICAgICAvLyBFbWl0IHRoZSBK
SVQgb3B0aW1pemF0aW9uIGNoZWNrOiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUT3BlcmF0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRPcGVyYXRpb25zLmNwcAkocmV2aXNpb24gMTgyNDk4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTUyLDYgKzk1
MiwxNCBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5lCiAgICAgcmV0
dXJuIEpTVmFsdWU6OmVuY29kZShKU0Z1bmN0aW9uOjpjcmVhdGUodm0sIHN0YXRpY19jYXN0PEZ1
bmN0aW9uRXhlY3V0YWJsZSo+KGZ1bmN0aW9uRXhlY3V0YWJsZSksIHNjb3BlKSk7CiB9CiAKK0Vu
Y29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3RnVuY3Rpb25XaXRoSW52YWxp
ZGF0ZWRSZWFsbG9jYXRpb25XYXRjaHBvaW50KEV4ZWNTdGF0ZSogZXhlYywgSlNTY29wZSogc2Nv
cGUsIEpTQ2VsbCogZnVuY3Rpb25FeGVjdXRhYmxlKQoreworICAgIEFTU0VSVChmdW5jdGlvbkV4
ZWN1dGFibGUtPmluaGVyaXRzKEZ1bmN0aW9uRXhlY3V0YWJsZTo6aW5mbygpKSk7CisgICAgVk0m
IHZtID0gZXhlYy0+dm0oKTsKKyAgICBOYXRpdmVDYWxsRnJhbWVUcmFjZXIgdHJhY2VyKCZ2bSwg
ZXhlYyk7CisgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29kZShKU0Z1bmN0aW9uOjpjcmVhdGVXaXRo
SW52YWxpZGF0ZWRSZWFsbG9jYXRpb25XYXRjaHBvaW50KHZtLCBzdGF0aWNfY2FzdDxGdW5jdGlv
bkV4ZWN1dGFibGUqPihmdW5jdGlvbkV4ZWN1dGFibGUpLCBzY29wZSkpOworfQorCiBKU0NlbGwq
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmV3T2JqZWN0KEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0
dXJlKiBzdHJ1Y3R1cmUpCiB7CiAgICAgVk0qIHZtID0gJmV4ZWMtPnZtKCk7CkBAIC0xNzIyLDgg
KzE3MzAsOCBAQCB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uUHV0VG9TY29wZShFCiAgICAg
aWYgKG1vZGVBbmRUeXBlLnR5cGUoKSA9PSBMb2NhbENsb3N1cmVWYXIpIHsKICAgICAgICAgSlNM
ZXhpY2FsRW52aXJvbm1lbnQqIGVudmlyb25tZW50ID0ganNDYXN0PEpTTGV4aWNhbEVudmlyb25t
ZW50Kj4oc2NvcGUpOwogICAgICAgICBlbnZpcm9ubWVudC0+dmFyaWFibGVBdChTY29wZU9mZnNl
dChwY1s2XS51Lm9wZXJhbmQpKS5zZXQodm0sIGVudmlyb25tZW50LCB2YWx1ZSk7Ci0gICAgICAg
IGlmIChWYXJpYWJsZVdhdGNocG9pbnRTZXQqIHNldCA9IHBjWzVdLnUud2F0Y2hwb2ludFNldCkK
LSAgICAgICAgICAgIHNldC0+bm90aWZ5V3JpdGUodm0sIHZhbHVlLCAiRXhlY3V0ZWQgb3BfcHV0
X3Njb3BlPExvY2FsQ2xvc3VyZVZhcj4iKTsKKyAgICAgICAgaWYgKFdhdGNocG9pbnRTZXQqIHNl
dCA9IHBjWzVdLnUud2F0Y2hwb2ludFNldCkKKyAgICAgICAgICAgIHNldC0+dG91Y2goIkV4ZWN1
dGVkIG9wX3B1dF9zY29wZTxMb2NhbENsb3N1cmVWYXI+Iik7CiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAgICAgaWYgKG1vZGVBbmRUeXBlLm1vZGUoKSA9PSBUaHJvd0lmTm90Rm91bmQgJiYgIXNj
b3BlLT5oYXNQcm9wZXJ0eShleGVjLCBpZGVudCkpIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCShyZXZpc2lvbiAxODI0OTgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyAr
MzcsNiBAQAogI2luY2x1ZGUgIlB1dEtpbmQuaCIKICNpbmNsdWRlICJTcGlsbFJlZ2lzdGVyc01v
ZGUuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVTdHViSW5mby5oIgotI2luY2x1ZGUgIlZhcmlhYmxl
V2F0Y2hwb2ludFNldC5oIgogCiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtODUsNyArODQsNyBAQCBl
eHRlcm4gIkMiIHsKICAgICBTeW10YWI6IFN5bWJvbFRhYmxlKgogICAgIFY6IHZvaWQKICAgICBW
bTogVk0qCi0gICAgVndzOiBWYXJpYWJsZVdhdGNocG9pbnRTZXQqCisgICAgV3M6IFdhdGNocG9p
bnRTZXQqCiAgICAgWjogaW50MzJfdAogKi8KIApAQCAtMTkxLDcgKzE5MCw3IEBAIHR5cGVkZWYg
dm9pZCBKSVRfT1BFUkFUSU9OICgqVl9KSVRPcGVyYXQKIHR5cGVkZWYgdm9pZCBKSVRfT1BFUkFU
SU9OICgqVl9KSVRPcGVyYXRpb25fRVBjKShFeGVjU3RhdGUqLCBJbnN0cnVjdGlvbiopOwogdHlw
ZWRlZiB2b2lkIEpJVF9PUEVSQVRJT04gKCpWX0pJVE9wZXJhdGlvbl9FUFpKKShFeGVjU3RhdGUq
LCB2b2lkKiwgaW50MzJfdCwgRW5jb2RlZEpTVmFsdWUpOwogdHlwZWRlZiB2b2lkIEpJVF9PUEVS
QVRJT04gKCpWX0pJVE9wZXJhdGlvbl9FU3NpSkpJKShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmVTdHVi
SW5mbyosIEVuY29kZWRKU1ZhbHVlLCBFbmNvZGVkSlNWYWx1ZSwgU3RyaW5nSW1wbCopOwotdHlw
ZWRlZiB2b2lkIEpJVF9PUEVSQVRJT04gKCpWX0pJVE9wZXJhdGlvbl9FVndzSikoRXhlY1N0YXRl
KiwgVmFyaWFibGVXYXRjaHBvaW50U2V0KiwgRW5jb2RlZEpTVmFsdWUpOwordHlwZWRlZiB2b2lk
IEpJVF9PUEVSQVRJT04gKCpWX0pJVE9wZXJhdGlvbl9FV3MpKEV4ZWNTdGF0ZSosIFdhdGNocG9p
bnRTZXQqKTsKIHR5cGVkZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgqVl9KSVRPcGVyYXRpb25fRVop
KEV4ZWNTdGF0ZSosIGludDMyX3QpOwogdHlwZWRlZiB2b2lkIEpJVF9PUEVSQVRJT04gKCpWX0pJ
VE9wZXJhdGlvbl9FWkopKEV4ZWNTdGF0ZSosIGludDMyX3QsIEVuY29kZWRKU1ZhbHVlKTsKIHR5
cGVkZWYgdm9pZCBKSVRfT1BFUkFUSU9OICgqVl9KSVRPcGVyYXRpb25fRVpKWlpaKShFeGVjU3Rh
dGUqLCBpbnQzMl90LCBFbmNvZGVkSlNWYWx1ZSwgaW50MzJfdCwgaW50MzJfdCwgaW50MzJfdCk7
CkBAIC0yNzgsNiArMjc3LDcgQEAgRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRp
b25OZQogRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdBcnJheUJ1ZmZl
cldpdGhQcm9maWxlKEV4ZWNTdGF0ZSosIEFycmF5QWxsb2NhdGlvblByb2ZpbGUqLCBjb25zdCBK
U1ZhbHVlKiB2YWx1ZXMsIGludDMyX3Qgc2l6ZSkgV1RGX0lOVEVSTkFMOwogRW5jb2RlZEpTVmFs
dWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdBcnJheVdpdGhTaXplQW5kUHJvZmlsZShFeGVj
U3RhdGUqLCBBcnJheUFsbG9jYXRpb25Qcm9maWxlKiwgRW5jb2RlZEpTVmFsdWUgc2l6ZSkgV1RG
X0lOVEVSTkFMOwogRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdGdW5j
dGlvbihFeGVjU3RhdGUqLCBKU1Njb3BlKiwgSlNDZWxsKikgV1RGX0lOVEVSTkFMOworRW5jb2Rl
ZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdGdW5jdGlvbldpdGhJbnZhbGlkYXRl
ZFJlYWxsb2NhdGlvbldhdGNocG9pbnQoRXhlY1N0YXRlKiwgSlNTY29wZSosIEpTQ2VsbCopIFdU
Rl9JTlRFUk5BTDsKIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdPYmplY3QoRXhl
Y1N0YXRlKiwgU3RydWN0dXJlKikgV1RGX0lOVEVSTkFMOwogRW5jb2RlZEpTVmFsdWUgSklUX09Q
RVJBVElPTiBvcGVyYXRpb25OZXdSZWdleHAoRXhlY1N0YXRlKiwgdm9pZCopIFdURl9JTlRFUk5B
TDsKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25IYW5kbGVXYXRjaGRvZ1RpbWVyKEV4ZWNT
dGF0ZSopIFdURl9JTlRFUk5BTDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
UHJvcGVydHlBY2Nlc3MzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkocmV2aXNpb24gMTgyNDk4KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNzUwLDI3ICs3NTAsMTAgQEAgdm9pZCBKSVQ6OmVtaXRQdXRHbG9iYWxQ
cm9wZXJ0eSh1aW50cHRyXwogICAgIHN0b3JlMzIocmVnVDIsIEJhc2VJbmRleChyZWdUMCwgcmVn
VDEsIFRpbWVzRWlnaHQsIChmaXJzdE91dE9mTGluZU9mZnNldCAtIDIpICogc2l6ZW9mKEVuY29k
ZWRKU1ZhbHVlKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVkVmFsdWVEZXNjcmlwdG9yLCBhc0Jp
dHMucGF5bG9hZCkpKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXROb3RpZnlXcml0ZShSZWdpc3RlcklE
IHRhZywgUmVnaXN0ZXJJRCBwYXlsb2FkLCBSZWdpc3RlcklEIHNjcmF0Y2gsIFZhcmlhYmxlV2F0
Y2hwb2ludFNldCogc2V0KQotewotICAgIGlmICghc2V0IHx8IHNldC0+c3RhdGUoKSA9PSBJc0lu
dmFsaWRhdGVkKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgbG9hZDgoc2V0LT5hZGRyZXNz
T2ZTdGF0ZSgpLCBzY3JhdGNoKTsKLSAgICBKdW1wIGlzRG9uZSA9IGJyYW5jaDMyKEVxdWFsLCBz
Y3JhdGNoLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpOwotCi0gICAgSnVtcExpc3Qgbm90
aWZ5U2xvdyA9IGJyYW5jaDMyKAotICAgICAgICBOb3RFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKHNl
dC0+YWRkcmVzc09mSW5mZXJyZWRWYWx1ZSgpLT5wYXlsb2FkUG9pbnRlcigpKSwgcGF5bG9hZCk7
Ci0gICAgbm90aWZ5U2xvdy5hcHBlbmQoYnJhbmNoMzIoCi0gICAgICAgIE5vdEVxdWFsLCBBYnNv
bHV0ZUFkZHJlc3Moc2V0LT5hZGRyZXNzT2ZJbmZlcnJlZFZhbHVlKCktPnRhZ1BvaW50ZXIoKSks
IHRhZykpOwotICAgIGFkZFNsb3dDYXNlKG5vdGlmeVNsb3cpOwotCi0gICAgaXNEb25lLmxpbmso
dGhpcyk7Ci19Ci0KIHZvaWQgSklUOjplbWl0UHV0R2xvYmFsVmFyKHVpbnRwdHJfdCBvcGVyYW5k
LCBpbnQgdmFsdWUsIFZhcmlhYmxlV2F0Y2hwb2ludFNldCogc2V0KQogewogICAgIGVtaXRMb2Fk
KHZhbHVlLCByZWdUMSwgcmVnVDApOwotICAgIGVtaXROb3RpZnlXcml0ZShyZWdUMSwgcmVnVDAs
IHJlZ1QyLCBzZXQpOworICAgIGVtaXROb3RpZnlXcml0ZShzZXQpOwogICAgIHN0b3JlMzIocmVn
VDEsIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG9wZXJhbmQpICsgT0JKRUNUX09GRlNFVE9GKEVu
Y29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy50YWcpKTsKICAgICBzdG9yZTMyKHJlZ1QwLCBy
ZWludGVycHJldF9jYXN0PGNoYXIqPihvcGVyYW5kKSArIE9CSkVDVF9PRkZTRVRPRihFbmNvZGVk
VmFsdWVEZXNjcmlwdG9yLCBhc0JpdHMucGF5bG9hZCkpOwogfQpAQCAtNzc5LDcgKzc2Miw3IEBA
IHZvaWQgSklUOjplbWl0UHV0Q2xvc3VyZVZhcihpbnQgc2NvcGUsIHUKIHsKICAgICBlbWl0TG9h
ZCh2YWx1ZSwgcmVnVDMsIHJlZ1QyKTsKICAgICBlbWl0TG9hZChzY29wZSwgcmVnVDEsIHJlZ1Qw
KTsKLSAgICBlbWl0Tm90aWZ5V3JpdGUocmVnVDMsIHJlZ1QyLCByZWdUNCwgc2V0KTsKKyAgICBl
bWl0Tm90aWZ5V3JpdGUoc2V0KTsKICAgICBzdG9yZTMyKHJlZ1QzLCBBZGRyZXNzKHJlZ1QwLCBK
U0Vudmlyb25tZW50UmVjb3JkOjpvZmZzZXRPZlZhcmlhYmxlcygpICsgb3BlcmFuZCAqIHNpemVv
ZihSZWdpc3RlcikgKyBUYWdPZmZzZXQpKTsKICAgICBzdG9yZTMyKHJlZ1QyLCBBZGRyZXNzKHJl
Z1QwLCBKU0Vudmlyb25tZW50UmVjb3JkOjpvZmZzZXRPZlZhcmlhYmxlcygpICsgb3BlcmFuZCAq
IHNpemVvZihSZWdpc3RlcikgKyBQYXlsb2FkT2Zmc2V0KSk7CiB9CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkocmV2aXNpb24gMTgy
NDk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTcyOCwyOSArNzI4LDE4IEBAIHZvaWQgSklUOjplbWl0UHV0R2xv
YmFsUHJvcGVydHkodWludHB0cl8KICAgICBzdG9yZVB0cihyZWdUMiwgQmFzZUluZGV4KHJlZ1Qw
LCByZWdUMSwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2Yo
RW5jb2RlZEpTVmFsdWUpKSk7CiB9CiAKLXZvaWQgSklUOjplbWl0Tm90aWZ5V3JpdGUoUmVnaXN0
ZXJJRCB2YWx1ZSwgUmVnaXN0ZXJJRCBzY3JhdGNoLCBWYXJpYWJsZVdhdGNocG9pbnRTZXQqIHNl
dCkKLXsKLSAgICBpZiAoIXNldCB8fCBzZXQtPnN0YXRlKCkgPT0gSXNJbnZhbGlkYXRlZCkKLSAg
ICAgICAgcmV0dXJuOwotICAgIAotICAgIGxvYWQ4KHNldC0+YWRkcmVzc09mU3RhdGUoKSwgc2Ny
YXRjaCk7Ci0gICAgSnVtcCBpc0RvbmUgPSBicmFuY2gzMihFcXVhbCwgc2NyYXRjaCwgVHJ1c3Rl
ZEltbTMyKElzSW52YWxpZGF0ZWQpKTsKLSAgICBhZGRTbG93Q2FzZShicmFuY2g2NChOb3RFcXVh
bCwgQWJzb2x1dGVBZGRyZXNzKHNldC0+YWRkcmVzc09mSW5mZXJyZWRWYWx1ZSgpKSwgdmFsdWUp
KTsKLSAgICBpc0RvbmUubGluayh0aGlzKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRQdXRHbG9iYWxW
YXIodWludHB0cl90IG9wZXJhbmQsIGludCB2YWx1ZSwgVmFyaWFibGVXYXRjaHBvaW50U2V0KiBz
ZXQpCit2b2lkIEpJVDo6ZW1pdFB1dEdsb2JhbFZhcih1aW50cHRyX3Qgb3BlcmFuZCwgaW50IHZh
bHVlLCBXYXRjaHBvaW50U2V0KiBzZXQpCiB7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3Rlcih2
YWx1ZSwgcmVnVDApOwotICAgIGVtaXROb3RpZnlXcml0ZShyZWdUMCwgcmVnVDEsIHNldCk7Cisg
ICAgZW1pdE5vdGlmeVdyaXRlKHNldCk7CiAgICAgc3RvcmVQdHIocmVnVDAsIHJlaW50ZXJwcmV0
X2Nhc3Q8dm9pZCo+KG9wZXJhbmQpKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXRQdXRDbG9zdXJlVmFy
KGludCBzY29wZSwgdWludHB0cl90IG9wZXJhbmQsIGludCB2YWx1ZSwgVmFyaWFibGVXYXRjaHBv
aW50U2V0KiBzZXQpCit2b2lkIEpJVDo6ZW1pdFB1dENsb3N1cmVWYXIoaW50IHNjb3BlLCB1aW50
cHRyX3Qgb3BlcmFuZCwgaW50IHZhbHVlLCBXYXRjaHBvaW50U2V0KiBzZXQpCiB7CiAgICAgZW1p
dEdldFZpcnR1YWxSZWdpc3Rlcih2YWx1ZSwgcmVnVDEpOwogICAgIGVtaXRHZXRWaXJ0dWFsUmVn
aXN0ZXIoc2NvcGUsIHJlZ1QwKTsKLSAgICBlbWl0Tm90aWZ5V3JpdGUocmVnVDEsIHJlZ1QyLCBz
ZXQpOworICAgIGVtaXROb3RpZnlXcml0ZShzZXQpOwogICAgIHN0b3JlUHRyKHJlZ1QxLCBBZGRy
ZXNzKHJlZ1QwLCBKU0Vudmlyb25tZW50UmVjb3JkOjpvZmZzZXRPZlZhcmlhYmxlcygpICsgb3Bl
cmFuZCAqIHNpemVvZihSZWdpc3RlcikpKTsKIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2xsaW50L0xMSW50U2xvd1BhdGhzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCShyZXZpc2lvbiAxODI0OTgpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xNDAyLDggKzE0MDIsMTIgQEAgTExJTlRfU0xPV19QQVRIX0RFQ0woc2xvd19wYXRo
X3B1dF90b19zYwogICAgIGlmIChtb2RlQW5kVHlwZS50eXBlKCkgPT0gTG9jYWxDbG9zdXJlVmFy
KSB7CiAgICAgICAgIEpTTGV4aWNhbEVudmlyb25tZW50KiBlbnZpcm9ubWVudCA9IGpzQ2FzdDxK
U0xleGljYWxFbnZpcm9ubWVudCo+KHNjb3BlKTsKICAgICAgICAgZW52aXJvbm1lbnQtPnZhcmlh
YmxlQXQoU2NvcGVPZmZzZXQocGNbNl0udS5vcGVyYW5kKSkuc2V0KHZtLCBlbnZpcm9ubWVudCwg
dmFsdWUpOwotICAgICAgICBpZiAoVmFyaWFibGVXYXRjaHBvaW50U2V0KiBzZXQgPSBwY1s1XS51
LndhdGNocG9pbnRTZXQpCi0gICAgICAgICAgICBzZXQtPm5vdGlmeVdyaXRlKHZtLCB2YWx1ZSwg
IkV4ZWN1dGVkIG9wX3B1dF9zY29wZTxMb2NhbENsb3N1cmVWYXI+Iik7CisgICAgICAgIAorICAg
ICAgICAvLyBIYXZlIHRvIGRvIHRoaXMgKmFmdGVyKiB0aGUgd3JpdGUsIGJlY2F1c2UgaWYgdGhp
cyBwdXRzIHRoZSBzZXQgaW50byBJc1dhdGNoZWQsIHRoZW4gd2UgbmVlZAorICAgICAgICAvLyB0
byBoYXZlIGFscmVhZHkgY2hhbmdlZCB0aGUgdmFsdWUgb2YgdGhlIHZhcmlhYmxlLiBPdGhlcndp
c2Ugd2UgbWlnaHQgd2F0Y2ggYW5kIGNvbnN0YW50LWZvbGQKKyAgICAgICAgLy8gdG8gdGhlIFVu
ZGVmaW5lZCB2YWx1ZSBmcm9tIGJlZm9yZSB0aGUgYXNzaWdubWVudC4KKyAgICAgICAgaWYgKFdh
dGNocG9pbnRTZXQqIHNldCA9IHBjWzVdLnUud2F0Y2hwb2ludFNldCkKKyAgICAgICAgICAgIHNl
dC0+dG91Y2goIkV4ZWN1dGVkIG9wX3B1dF9zY29wZTxMb2NhbENsb3N1cmVWYXI+Iik7CiAgICAg
ICAgIExMSU5UX0VORCgpOwogICAgIH0KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xs
aW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20JKHJldmlzaW9u
IDE4MjQ5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJl
dGVyMzJfNjQuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC04MDUsMTQgKzgwNSw2IEBAIF9sbGludF9v
cF9tb3Y6CiAgICAgZGlzcGF0Y2goMykKIAogCi1tYWNybyBub3RpZnlXcml0ZShzZXQsIHZhbHVl
VGFnLCB2YWx1ZVBheWxvYWQsIHNjcmF0Y2gsIHNsb3cpCi0gICAgbG9hZGIgVmFyaWFibGVXYXRj
aHBvaW50U2V0OjptX3N0YXRlW3NldF0sIHNjcmF0Y2gKLSAgICBiaWVxIHNjcmF0Y2gsIElzSW52
YWxpZGF0ZWQsIC5kb25lCi0gICAgYmluZXEgdmFsdWVQYXlsb2FkLCBWYXJpYWJsZVdhdGNocG9p
bnRTZXQ6Om1faW5mZXJyZWRWYWx1ZSArIFBheWxvYWRPZmZzZXRbc2V0XSwgc2xvdwotICAgIGJp
bmVxIHZhbHVlVGFnLCBWYXJpYWJsZVdhdGNocG9pbnRTZXQ6Om1faW5mZXJyZWRWYWx1ZSArIFRh
Z09mZnNldFtzZXRdLCBzbG93Ci0uZG9uZToKLWVuZAotCiBfbGxpbnRfb3Bfbm90OgogICAgIHRy
YWNlRXhlY3V0aW9uKCkKICAgICBsb2FkaSA4W1BDXSwgdDAKQEAgLTIyMDQsNyArMjE5Niw3IEBA
IG1hY3JvIHB1dEdsb2JhbFZhcigpCiAgICAgbG9hZGlzRnJvbUluc3RydWN0aW9uKDMsIHQwKQog
ICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUodDAsIHQxLCB0MikKICAgICBsb2FkcEZyb21JbnN0
cnVjdGlvbig1LCB0MykKLSAgICBub3RpZnlXcml0ZSh0MywgdDEsIHQyLCB0MCwgLnBEeW5hbWlj
KQorICAgIG5vdGlmeVdyaXRlKHQzLCAucER5bmFtaWMpCiAgICAgbG9hZHBGcm9tSW5zdHJ1Y3Rp
b24oNiwgdDApCiAgICAgc3RvcmVpIHQxLCBUYWdPZmZzZXRbdDBdCiAgICAgc3RvcmVpIHQyLCBQ
YXlsb2FkT2Zmc2V0W3QwXQpAQCAtMjIyMyw3ICsyMjE1LDcgQEAgbWFjcm8gcHV0TG9jYWxDbG9z
dXJlVmFyKCkKICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHQxLCB0MiwgdDMpCiAgICAgbG9h
ZHBGcm9tSW5zdHJ1Y3Rpb24oNSwgdDQpCiAgICAgYnRweiB0NCwgLm5vVmFyaWFibGVXYXRjaHBv
aW50U2V0Ci0gICAgbm90aWZ5V3JpdGUodDQsIHQyLCB0MywgdDEsIC5wRHluYW1pYykKKyAgICBu
b3RpZnlXcml0ZSh0NCwgLnBEeW5hbWljKQogLm5vVmFyaWFibGVXYXRjaHBvaW50U2V0OgogICAg
IGxvYWRpc0Zyb21JbnN0cnVjdGlvbig2LCB0MSkKICAgICBzdG9yZWkgdDIsIEpTRW52aXJvbm1l
bnRSZWNvcmRfdmFyaWFibGVzICsgVGFnT2Zmc2V0W3QwLCB0MSwgOF0KSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNt
CShyZXZpc2lvbiAxODI0OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2
ZWxJbnRlcnByZXRlcjY0LmFzbQkod29ya2luZyBjb3B5KQpAQCAtNjkwLDEzICs2OTAsNiBAQCBf
bGxpbnRfb3BfbW92OgogICAgIGRpc3BhdGNoKDMpCiAKIAotbWFjcm8gbm90aWZ5V3JpdGUoc2V0
LCB2YWx1ZSwgc2NyYXRjaCwgc2xvdykKLSAgICBsb2FkYiBWYXJpYWJsZVdhdGNocG9pbnRTZXQ6
Om1fc3RhdGVbc2V0XSwgc2NyYXRjaAotICAgIGJpZXEgc2NyYXRjaCwgSXNJbnZhbGlkYXRlZCwg
LmRvbmUKLSAgICBicW5lcSB2YWx1ZSwgVmFyaWFibGVXYXRjaHBvaW50U2V0OjptX2luZmVycmVk
VmFsdWVbc2V0XSwgc2xvdwotLmRvbmU6Ci1lbmQKLQogX2xsaW50X29wX25vdDoKICAgICB0cmFj
ZUV4ZWN1dGlvbigpCiAgICAgbG9hZGlzRnJvbUluc3RydWN0aW9uKDIsIHQwKQpAQCAtMjA2OSw4
ICsyMDYyLDggQEAgbWFjcm8gcHV0R2xvYmFsVmFyKCkKICAgICBsb2FkaXNGcm9tSW5zdHJ1Y3Rp
b24oMywgdDApCiAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZSh0MCwgdDEpCiAgICAgbG9hZHBG
cm9tSW5zdHJ1Y3Rpb24oNSwgdDIpCi0gICAgbm90aWZ5V3JpdGUodDIsIHQxLCB0MCwgLnBEeW5h
bWljKQogICAgIGxvYWRwRnJvbUluc3RydWN0aW9uKDYsIHQwKQorICAgIG5vdGlmeVdyaXRlKHQy
LCAucER5bmFtaWMpCiAgICAgc3RvcmVxIHQxLCBbdDBdCiBlbmQKIApAQCAtMjA4Niw3ICsyMDc5
LDcgQEAgbWFjcm8gcHV0TG9jYWxDbG9zdXJlVmFyKCkKICAgICBsb2FkQ29uc3RhbnRPclZhcmlh
YmxlKHQxLCB0MikKICAgICBsb2FkcEZyb21JbnN0cnVjdGlvbig1LCB0MykKICAgICBidHB6IHQz
LCAubm9WYXJpYWJsZVdhdGNocG9pbnRTZXQKLSAgICBub3RpZnlXcml0ZSh0MywgdDIsIHQxLCAu
cER5bmFtaWMpCisgICAgbm90aWZ5V3JpdGUodDMsIC5wRHluYW1pYykKIC5ub1ZhcmlhYmxlV2F0
Y2hwb2ludFNldDoKICAgICBsb2FkaXNGcm9tSW5zdHJ1Y3Rpb24oNiwgdDEpCiAgICAgc3RvcmVx
IHQyLCBKU0Vudmlyb25tZW50UmVjb3JkX3ZhcmlhYmxlc1t0MCwgdDEsIDhdCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20KPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIuYXNt
CShyZXZpc2lvbiAxODI0OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2
ZWxJbnRlcnByZXRlci5hc20JKHdvcmtpbmcgY29weSkKQEAgLTUxOSw2ICs1MTksMTAgQEAgbWFj
cm8gc2tpcElmSXNSZW1lbWJlcmVkT3JJbkVkZW4oY2VsbCwgcwogICAgIGNvbnRpbnVhdGlvbihz
Y3JhdGNoMSkKIGVuZAogCittYWNybyBub3RpZnlXcml0ZShzZXQsIHNsb3cpCisgICAgYmJuZXEg
V2F0Y2hwb2ludFNldDo6bV9zdGF0ZVtzZXRdLCBJc0ludmFsaWRhdGVkLCBzbG93CitlbmQKKwog
bWFjcm8gY2hlY2tTd2l0Y2hUb0pJVChpbmNyZW1lbnQsIGFjdGlvbikKICAgICBsb2FkcCBDb2Rl
QmxvY2tbY2ZyXSwgdDAKICAgICBiYWRkaXMgaW5jcmVtZW50LCBDb2RlQmxvY2s6Om1fbGxpbnRF
eGVjdXRlQ291bnRlciArIEJhc2VsaW5lRXhlY3V0aW9uQ291bnRlcjo6bV9jb3VudGVyW3QwXSwg
LmNvbnRpbnVlCkBAIC05MjAsMTIgKzkyNCw2IEBAIGVuZAogCiAKICMgVmFsdWUtcmVwcmVzZW50
YXRpb24tYWdub3N0aWMgY29kZS4KLV9sbGludF9vcF90b3VjaF9lbnRyeToKLSAgICB0cmFjZUV4
ZWN1dGlvbigpCi0gICAgY2FsbFNsb3dQYXRoKF9zbG93X3BhdGhfdG91Y2hfZW50cnkpCi0gICAg
ZGlzcGF0Y2goMSkKLQotCiBfbGxpbnRfb3BfY3JlYXRlX2RpcmVjdF9hcmd1bWVudHM6CiAgICAg
dHJhY2VFeGVjdXRpb24oKQogICAgIGNhbGxTbG93UGF0aChfc2xvd19wYXRoX2NyZWF0ZV9kaXJl
Y3RfYXJndW1lbnRzKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9u
U2xvd1BhdGhzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9Db21tb25TbG93UGF0aHMuY3BwCShyZXZpc2lvbiAxODI0OTgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
NSw3ICs1NSw2IEBACiAjaW5jbHVkZSAiU2NvcGVkQXJndW1lbnRzLmgiCiAjaW5jbHVkZSAiU3Ry
dWN0dXJlUmFyZURhdGFJbmxpbmVzLmgiCiAjaW5jbHVkZSAiVHlwZVByb2ZpbGVyTG9nLmgiCi0j
aW5jbHVkZSAiVmFyaWFibGVXYXRjaHBvaW50U2V0SW5saW5lcy5oIgogI2luY2x1ZGUgPHd0Zi9T
dHJpbmdQcmludFN0cmVhbS5oPgogCiBuYW1lc3BhY2UgSlNDIHsKQEAgLTIwNiwxMyArMjA1LDYg
QEAgU0xPV19QQVRIX0RFQ0woc2xvd19wYXRoX2NvbnN0cnVjdF9hcml0eQogICAgIFJFVFVSTl9U
V08oMCwgc2V0dXBBcml0eUNoZWNrRGF0YSh2bSwgc2xvdHNUb0FkZCkpOwogfQogCi1TTE9XX1BB
VEhfREVDTChzbG93X3BhdGhfdG91Y2hfZW50cnkpCi17Ci0gICAgQkVHSU4oKTsKLSAgICBleGVj
LT5jb2RlQmxvY2soKS0+c3ltYm9sVGFibGUoKS0+bV9mdW5jdGlvbkVudGVyZWRPbmNlLnRvdWNo
KCJGdW5jdGlvbiAocmUpZW50ZXJlZCIpOwotICAgIEVORCgpOwotfQotCiBTTE9XX1BBVEhfREVD
TChzbG93X3BhdGhfY3JlYXRlX2RpcmVjdF9hcmd1bWVudHMpCiB7CiAgICAgQkVHSU4oKTsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5o
CShyZXZpc2lvbiAxODI0OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21t
b25TbG93UGF0aHMuaAkod29ya2luZyBjb3B5KQpAQCAtMTgxLDcgKzE4MSw2IEBAIFNMT1dfUEFU
SF9ERUNMKG5hbWUpIFdURl9JTlRFUk5BTAogICAgIAogU0xPV19QQVRIX0hJRERFTl9ERUNMKHNs
b3dfcGF0aF9jYWxsX2FyaXR5Q2hlY2spOwogU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0
aF9jb25zdHJ1Y3RfYXJpdHlDaGVjayk7Ci1TTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRo
X3RvdWNoX2VudHJ5KTsKIFNMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfY3JlYXRlX2Rp
cmVjdF9hcmd1bWVudHMpOwogU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9jcmVhdGVf
c2NvcGVkX2FyZ3VtZW50cyk7CiBTTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX2NyZWF0
ZV9vdXRfb2ZfYmFuZF9hcmd1bWVudHMpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRXhlY3V0YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAJKHJldmlzaW9uIDE4MjQ5OCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MTQs
NiArNDE0LDEyIEBAIEZ1bmN0aW9uRXhlY3V0YWJsZTo6RnVuY3Rpb25FeGVjdXRhYmxlKFYKICAg
ICBtX3R5cGVQcm9maWxpbmdFbmRPZmZzZXQgPSB1bmxpbmtlZEV4ZWN1dGFibGUtPnR5cGVQcm9m
aWxpbmdFbmRPZmZzZXQoKTsKIH0KIAordm9pZCBGdW5jdGlvbkV4ZWN1dGFibGU6OmZpbmlzaENy
ZWF0aW9uKFZNJiB2bSkKK3sKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CisgICAgbV9z
aW5nbGV0b25GdW5jdGlvbi5zZXQodm0sIHRoaXMsIEluZmVycmVkVmFsdWU6OmNyZWF0ZSh2bSkp
OworfQorCiB2b2lkIEZ1bmN0aW9uRXhlY3V0YWJsZTo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCiB7
CiAgICAgc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oY2VsbCktPkZ1bmN0aW9uRXhl
Y3V0YWJsZTo6fkZ1bmN0aW9uRXhlY3V0YWJsZSgpOwpAQCAtNTY3LDYgKzU3Myw3IEBAIHZvaWQg
RnVuY3Rpb25FeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVuKEoKICAgICBpZiAodGhpc09iamVjdC0+
bV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QpCiAgICAgICAgIHRoaXNPYmplY3QtPm1fY29kZUJsb2Nr
Rm9yQ29uc3RydWN0LT52aXNpdEFnZ3JlZ2F0ZSh2aXNpdG9yKTsKICAgICB2aXNpdG9yLmFwcGVu
ZCgmdGhpc09iamVjdC0+bV91bmxpbmtlZEV4ZWN1dGFibGUpOworICAgIHZpc2l0b3IuYXBwZW5k
KCZ0aGlzT2JqZWN0LT5tX3NpbmdsZXRvbkZ1bmN0aW9uKTsKIH0KIAogU3ltYm9sVGFibGUqIEZ1
bmN0aW9uRXhlY3V0YWJsZTo6c3ltYm9sVGFibGUoQ29kZVNwZWNpYWxpemF0aW9uS2luZCBraW5k
KQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAkocmV2
aXNpb24gMTgyNDk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJs
ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw4ICszMyw3IEBACiAjaW5jbHVkZSAiQ29tcGlsYXRp
b25SZXN1bHQuaCIKICNpbmNsdWRlICJERkdQbGFuLmgiCiAjaW5jbHVkZSAiSGFuZGxlckluZm8u
aCIKLSNpbmNsdWRlICJKU0Z1bmN0aW9uLmgiCi0jaW5jbHVkZSAiSW50ZXJwcmV0ZXIuaCIKKyNp
bmNsdWRlICJJbmZlcnJlZFZhbHVlLmgiCiAjaW5jbHVkZSAiSklUQ29kZS5oIgogI2luY2x1ZGUg
IkpTR2xvYmFsT2JqZWN0LmgiCiAjaW5jbHVkZSAiUmVnaXN0ZXJQcmVzZXJ2YXRpb25Nb2RlLmgi
CkBAIC02NDksMTEgKzY0OCwxNSBAQCBwdWJsaWM6CiAgICAgdm9pZCB1bmxpbmtDYWxscygpOwog
CiAgICAgdm9pZCBjbGVhckNvZGUoKTsKKyAgICAKKyAgICBJbmZlcnJlZFZhbHVlKiBzaW5nbGV0
b25GdW5jdGlvbigpIHsgcmV0dXJuIG1fc2luZ2xldG9uRnVuY3Rpb24uZ2V0KCk7IH0KIAogcHJp
dmF0ZToKICAgICBGdW5jdGlvbkV4ZWN1dGFibGUoCiAgICAgICAgIFZNJiwgY29uc3QgU291cmNl
Q29kZSYsIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiwgdW5zaWduZWQgZmlyc3RMaW5lLCAK
ICAgICAgICAgdW5zaWduZWQgbGFzdExpbmUsIHVuc2lnbmVkIHN0YXJ0Q29sdW1uLCB1bnNpZ25l
ZCBlbmRDb2x1bW4pOworICAgIAorICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mKTsKIAogICAg
IGJvb2wgaXNDb21waWxpbmcoKQogICAgIHsKQEAgLTY2NywxMiArNjcwLDEzIEBAIHByaXZhdGU6
CiAgICAgfQogCiAgICAgZnJpZW5kIGNsYXNzIFNjcmlwdEV4ZWN1dGFibGU7Ci0KKyAgICAKICAg
ICBXcml0ZUJhcnJpZXI8VW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGU+IG1fdW5saW5rZWRFeGVj
dXRhYmxlOwogICAgIFJlZlB0cjxGdW5jdGlvbkNvZGVCbG9jaz4gbV9jb2RlQmxvY2tGb3JDYWxs
OwogICAgIFJlZlB0cjxGdW5jdGlvbkNvZGVCbG9jaz4gbV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3Q7
CiAgICAgUmVmUHRyPFR5cGVTZXQ+IG1fcmV0dXJuU3RhdGVtZW50VHlwZVNldDsKICAgICB1bnNp
Z25lZCBtX3BhcmFtZXRlcnNTdGFydE9mZnNldDsKKyAgICBXcml0ZUJhcnJpZXI8SW5mZXJyZWRW
YWx1ZT4gbV9zaW5nbGV0b25GdW5jdGlvbjsKIH07CiAKIGlubGluZSB2b2lkIEV4ZWN1dGFibGVC
YXNlOjpjbGVhckNvZGVWaXJ0dWFsKEV4ZWN1dGFibGVCYXNlKiBleGVjdXRhYmxlKQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRWYWx1ZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRWYWx1ZS5jcHAJKHJl
dmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFZhbHVl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEzMiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiSW5mZXJyZWRWYWx1ZS5oIgorCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorCituYW1lc3Bh
Y2UgSlNDIHsKKworY29uc3QgQ2xhc3NJbmZvIEluZmVycmVkVmFsdWU6OnNfaW5mbyA9IHsgIklu
ZmVycmVkVmFsdWUiLCAwLCAwLCBDUkVBVEVfTUVUSE9EX1RBQkxFKEluZmVycmVkVmFsdWUpIH07
CisKK0luZmVycmVkVmFsdWUqIEluZmVycmVkVmFsdWU6OmNyZWF0ZShWTSYgdm0pCit7CisgICAg
SW5mZXJyZWRWYWx1ZSogcmVzdWx0ID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8SW5mZXJy
ZWRWYWx1ZT4odm0uaGVhcCkpIEluZmVycmVkVmFsdWUodm0pOworICAgIHJlc3VsdC0+ZmluaXNo
Q3JlYXRpb24odm0pOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK3ZvaWQgSW5mZXJyZWRWYWx1
ZTo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCit7CisgICAgSW5mZXJyZWRWYWx1ZSogaW5mZXJyZWRW
YWx1ZSA9IHN0YXRpY19jYXN0PEluZmVycmVkVmFsdWUqPihjZWxsKTsKKyAgICBpbmZlcnJlZFZh
bHVlLT5JbmZlcnJlZFZhbHVlOjp+SW5mZXJyZWRWYWx1ZSgpOworfQorCitTdHJ1Y3R1cmUqIElu
ZmVycmVkVmFsdWU6OmNyZWF0ZVN0cnVjdHVyZShWTSYgdm0sIEpTR2xvYmFsT2JqZWN0KiBnbG9i
YWxPYmplY3QsIEpTVmFsdWUgcHJvdG90eXBlKQoreworICAgIHJldHVybiBTdHJ1Y3R1cmU6OmNy
ZWF0ZSh2bSwgZ2xvYmFsT2JqZWN0LCBwcm90b3R5cGUsIFR5cGVJbmZvKENlbGxUeXBlLCBTdHJ1
Y3R1cmVGbGFncyksIGluZm8oKSk7Cit9CisKK3ZvaWQgSW5mZXJyZWRWYWx1ZTo6dmlzaXRDaGls
ZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQoreworICAgIEluZmVycmVk
VmFsdWUqIGluZmVycmVkVmFsdWUgPSBqc0Nhc3Q8SW5mZXJyZWRWYWx1ZSo+KGNlbGwpOworICAg
IAorICAgIGlmIChpbmZlcnJlZFZhbHVlLT5tX3NldC5oYXNCZWVuSW52YWxpZGF0ZWQoKSkgewor
ICAgICAgICBpbmZlcnJlZFZhbHVlLT5tX2NsZWFudXAgPSBudWxscHRyOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIAorICAgIGlmICghaW5mZXJyZWRWYWx1ZS0+bV92YWx1ZSkKKyAgICAg
ICAgcmV0dXJuOworICAgIGlmICghaW5mZXJyZWRWYWx1ZS0+bV92YWx1ZS5nZXQoKS5pc0NlbGwo
KSkKKyAgICAgICAgcmV0dXJuOworICAgIAorICAgIGlmICghaW5mZXJyZWRWYWx1ZS0+bV9jbGVh
bnVwKQorICAgICAgICBpbmZlcnJlZFZhbHVlLT5tX2NsZWFudXAgPSBzdGQ6Om1ha2VfdW5pcXVl
PFZhbHVlQ2xlYW51cD4oaW5mZXJyZWRWYWx1ZSk7CisgICAgdmlzaXRvci5hZGRVbmNvbmRpdGlv
bmFsRmluYWxpemVyKGluZmVycmVkVmFsdWUtPm1fY2xlYW51cC5nZXQoKSk7Cit9CisKK0luZmVy
cmVkVmFsdWU6OkluZmVycmVkVmFsdWUoVk0mIHZtKQorICAgIDogQmFzZSh2bSwgdm0uaW5mZXJy
ZWRWYWx1ZVN0cnVjdHVyZS5nZXQoKSkKKyAgICAsIG1fc2V0KENsZWFyV2F0Y2hwb2ludCkKK3sK
K30KKworSW5mZXJyZWRWYWx1ZTo6fkluZmVycmVkVmFsdWUoKQoreworfQorCit2b2lkIEluZmVy
cmVkVmFsdWU6Om5vdGlmeVdyaXRlU2xvdyhWTSYgdm0sIEpTVmFsdWUgdmFsdWUsIGNvbnN0IEZp
cmVEZXRhaWwmIGRldGFpbCkKK3sKKyAgICBBU1NFUlQoISF2YWx1ZSk7CisgICAgc3dpdGNoICht
X3NldC5zdGF0ZSgpKSB7CisgICAgY2FzZSBDbGVhcldhdGNocG9pbnQ6CisgICAgICAgIG1fdmFs
dWUuc2V0KHZtLCB0aGlzLCB2YWx1ZSk7CisgICAgICAgIG1fc2V0LnN0YXJ0V2F0Y2hpbmcoKTsK
KyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIElzV2F0Y2hlZDoKKyAgICAgICAg
QVNTRVJUKCEhbV92YWx1ZSk7CisgICAgICAgIGlmIChtX3ZhbHVlLmdldCgpID09IHZhbHVlKQor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBpbnZhbGlkYXRlKGRldGFpbCk7CisgICAgICAg
IHJldHVybjsKKyAgICAgICAgCisgICAgY2FzZSBJc0ludmFsaWRhdGVkOgorICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICAKKyAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKK30KKwordm9pZCBJbmZlcnJlZFZhbHVlOjpub3RpZnlXcml0ZVNs
b3coVk0mIHZtLCBKU1ZhbHVlIHZhbHVlLCBjb25zdCBjaGFyKiByZWFzb24pCit7CisgICAgbm90
aWZ5V3JpdGVTbG93KHZtLCB2YWx1ZSwgU3RyaW5nRmlyZURldGFpbChyZWFzb24pKTsKK30KKwor
SW5mZXJyZWRWYWx1ZTo6VmFsdWVDbGVhbnVwOjpWYWx1ZUNsZWFudXAoSW5mZXJyZWRWYWx1ZSog
b3duZXIpCisgICAgOiBtX293bmVyKG93bmVyKQoreworfQorCitJbmZlcnJlZFZhbHVlOjpWYWx1
ZUNsZWFudXA6On5WYWx1ZUNsZWFudXAoKQoreworfQorCit2b2lkIEluZmVycmVkVmFsdWU6OlZh
bHVlQ2xlYW51cDo6ZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoKQoreworICAgIEFTU0VSVChtX293
bmVyLT5tX3ZhbHVlKTsKKyAgICBBU1NFUlQobV9vd25lci0+bV92YWx1ZS5nZXQoKS5pc0NlbGwo
KSk7CisgICAgCisgICAgaWYgKEhlYXA6OmlzTWFya2VkKG1fb3duZXItPm1fdmFsdWUuZ2V0KCku
YXNDZWxsKCkpKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgbV9vd25lci0+aW52YWxpZGF0
ZShTdHJpbmdGaXJlRGV0YWlsKCJJbmZlcnJlZFZhbHVlIGNsZWFuLXVwIGR1cmluZyBHQyIpKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0luZmVycmVkVmFsdWUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9JbmZlcnJlZFZhbHVlLmgJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFZhbHVlLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwxMzYgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBi
aW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0
dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0Ogor
ICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkg
Zm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhl
CisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0
aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkg
QVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgor
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCisgKi8KKwor
I2lmbmRlZiBJbmZlcnJlZFZhbHVlX2gKKyNkZWZpbmUgSW5mZXJyZWRWYWx1ZV9oCisKKyNpbmNs
dWRlICJKU0NlbGwuaCIKKyNpbmNsdWRlICJXYXRjaHBvaW50LmgiCisjaW5jbHVkZSAiV3JpdGVC
YXJyaWVyLmgiCisKK25hbWVzcGFjZSBKU0MgeworCisvLyBBbGxvY2F0ZSBvbmUgb2YgdGhlc2Ug
aWYgeW91J2QgbGlrZSB0byBpbmZlciBhIGNvbnN0YW50IHZhbHVlLiBXcml0ZXMgdG8gdGhlIHZh
bHVlIHNob3VsZCB1c2UKKy8vIG5vdGlmeVdyaXRlKCkuIFNvIGxvbmcgYXMgZXhhY3RseSBvbmUg
dmFsdWUgaGFkIGV2ZXIgYmVlbiB3cml0dGVuIGFuZCBpbnZhbGlkYXRlKCkgaGFzIG5ldmVyIGJl
ZW4KKy8vIGNhbGxlZCwgYW5kIHlvdSByZWdpc3RlciBhIHdhdGNocG9pbnQsIHlvdSBjYW4gcmVs
eSBvbiB0aGUgaW5mZXJyZWRWYWx1ZSgpIGJlaW5nIHRoZSBvbmUgdHJ1ZQorLy8gdmFsdWUuCisv
LworLy8gQ29tbW9ubHkgdXNlZCBmb3IgaW5mZXJyaW5nIHNpbmdsZXRvbnMgLSBpbiB0aGF0IGNh
c2UgZWFjaCBhbGxvY2F0aW9uIGRvZXMgbm90aWZ5V3JpdGUoKS4gQnV0IHlvdQorLy8gY2FuIHVz
ZSBpZiBmb3Igb3RoZXIgdGhpbmdzIGFzIHdlbGwuCisKK2NsYXNzIEluZmVycmVkVmFsdWUgOiBw
dWJsaWMgSlNDZWxsIHsKK3B1YmxpYzoKKyAgICB0eXBlZGVmIEpTQ2VsbCBCYXNlOworICAgIAor
ICAgIHN0YXRpYyBJbmZlcnJlZFZhbHVlKiBjcmVhdGUoVk0mKTsKKyAgICAKKyAgICBzdGF0aWMg
Y29uc3QgYm9vbCBuZWVkc0Rlc3RydWN0aW9uID0gdHJ1ZTsKKyAgICBzdGF0aWMgY29uc3QgYm9v
bCBoYXNJbW1vcnRhbFN0cnVjdHVyZSA9IHRydWU7CisgICAgc3RhdGljIHZvaWQgZGVzdHJveShK
U0NlbGwqKTsKKyAgICAKKyAgICBzdGF0aWMgU3RydWN0dXJlKiBjcmVhdGVTdHJ1Y3R1cmUoVk0m
LCBKU0dsb2JhbE9iamVjdCosIEpTVmFsdWUgcHJvdG90eXBlKTsKKyAgICAKKyAgICBzdGF0aWMg
dm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CisgICAgCisgICAgREVD
TEFSRV9JTkZPOworICAgIAorICAgIC8vIEZvciB0aGUgcHVycG9zZSBvZiBkZWNpZGluZyB3aGV0
aGVyIG9yIG5vdCB0byB3YXRjaCB0aGlzIHZhcmlhYmxlLCB5b3Ugb25seSBuZWVkCisgICAgLy8g
dG8gaW5zcGVjdCBpbmZlcnJlZFZhbHVlKCkuIElmIHRoaXMgcmV0dXJucyBzb21ldGhpbmcgb3Ro
ZXIgdGhhbiB0aGUgZW1wdHkKKyAgICAvLyB2YWx1ZSwgdGhlbiBpdCBtZWFucyB0aGF0IGF0IGFs
bCBmdXR1cmUgc2FmZXBvaW50cywgdGhpcyB3YXRjaHBvaW50IHNldCB3aWxsIGJlCisgICAgLy8g
aW4gb25lIG9mIHRoZXNlIHN0YXRlczoKKyAgICAvLworICAgIC8vICAgIElzV2F0Y2hlZDogaW4g
dGhpcyBjYXNlLCB0aGUgdmFyaWFibGUncyB2YWx1ZSBtdXN0IHN0aWxsIGJlIHRoZQorICAgIC8v
ICAgICAgICBpbmZlcnJlZFZhbHVlLgorICAgIC8vCisgICAgLy8gICAgSXNJbnZhbGlkYXRlZDog
aW4gdGhpcyBjYXNlIHRoZSB2YXJpYWJsZSdzIHZhbHVlIG1heSBiZSBhbnl0aGluZyBidXQgeW91
J2xsCisgICAgLy8gICAgICAgIGVpdGhlciBub3RpY2UgdGhhdCBpdCdzIGludmFsaWRhdGVkIGFu
ZCBub3QgaW5zdGFsbCB0aGUgd2F0Y2hwb2ludCwgb3IKKyAgICAvLyAgICAgICAgeW91IHdpbGwg
aGF2ZSBiZWVuIG5vdGlmaWVkIHRoYXQgdGhlIHdhdGNocG9pbnQgd2FzIGZpcmVkLgorICAgIEpT
VmFsdWUgaW5mZXJyZWRWYWx1ZSgpIHsgcmV0dXJuIG1fdmFsdWUuZ2V0KCk7IH0KKworICAgIC8v
IEZvcndhcmRzIHNvbWUgV2F0Y2hwb2ludFNldCBtZXRob2RzLgorICAgIFdhdGNocG9pbnRTdGF0
ZSBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2V0LnN0YXRlKCk7IH0KKyAgICBib29sIGlzU3Rp
bGxWYWxpZCgpIGNvbnN0IHsgcmV0dXJuIG1fc2V0LmlzU3RpbGxWYWxpZCgpOyB9CisgICAgYm9v
bCBoYXNCZWVuSW52YWxpZGF0ZWQoKSBjb25zdCB7IHJldHVybiBtX3NldC5oYXNCZWVuSW52YWxp
ZGF0ZWQoKTsgfQorICAgIHZvaWQgYWRkKFdhdGNocG9pbnQqIHdhdGNocG9pbnQpIHsgbV9zZXQu
YWRkKHdhdGNocG9pbnQpOyB9CisgICAgCisgICAgdm9pZCBub3RpZnlXcml0ZShWTSYgdm0sIEpT
VmFsdWUgdmFsdWUsIGNvbnN0IEZpcmVEZXRhaWwmIGRldGFpbCkKKyAgICB7CisgICAgICAgIGlm
IChMSUtFTFkobV9zZXQuc3RhdGVPbk1haW5UaHJlYWQoKSA9PSBJc0ludmFsaWRhdGVkKSkKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgbm90aWZ5V3JpdGVTbG93KHZtLCB2YWx1ZSwgZGV0
YWlsKTsKKyAgICB9CisgICAgCisgICAgdm9pZCBub3RpZnlXcml0ZShWTSYgdm0sIEpTVmFsdWUg
dmFsdWUsIGNvbnN0IGNoYXIqIHJlYXNvbikKKyAgICB7CisgICAgICAgIGlmIChMSUtFTFkobV9z
ZXQuc3RhdGVPbk1haW5UaHJlYWQoKSA9PSBJc0ludmFsaWRhdGVkKSkKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgbm90aWZ5V3JpdGVTbG93KHZtLCB2YWx1ZSwgcmVhc29uKTsKKyAgICB9
CisgICAgCisgICAgdm9pZCBpbnZhbGlkYXRlKGNvbnN0IEZpcmVEZXRhaWwmIGRldGFpbCkKKyAg
ICB7CisgICAgICAgIG1fdmFsdWUuY2xlYXIoKTsKKyAgICAgICAgbV9zZXQuaW52YWxpZGF0ZShk
ZXRhaWwpOworICAgIH0KKyAgICAKK3Byb3RlY3RlZDoKKyAgICBzdGF0aWMgY29uc3QgdW5zaWdu
ZWQgU3RydWN0dXJlRmxhZ3MgPSBTdHJ1Y3R1cmVJc0ltbW9ydGFsIHwgQmFzZTo6U3RydWN0dXJl
RmxhZ3M7CisgICAgCitwcml2YXRlOgorICAgIEluZmVycmVkVmFsdWUoVk0mKTsKKyAgICB+SW5m
ZXJyZWRWYWx1ZSgpOworICAgIAorICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgbm90aWZ5V3Jp
dGVTbG93KFZNJiwgSlNWYWx1ZSwgY29uc3QgRmlyZURldGFpbCYpOworICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHZvaWQgbm90aWZ5V3JpdGVTbG93KFZNJiwgSlNWYWx1ZSwgY29uc3QgY2hhciogcmVh
c29uKTsKKyAgICAKKyAgICAvLyBXZSBjb3VsZCBoYXZlIHVzZWQgV2Vhazw+LiBCdXQgd2Ugd2Fu
dCBhcmJpdHJhcnkgSlNWYWx1ZXMsIG5vdCBqdXN0IGNlbGxzLiBJdCdzIGFsc28gc29tZXdoYXQK
KyAgICAvLyBjb252ZW5pZW50IHRvIGhhdmUgZWFnZXIgbm90aWZpY2F0aW9uIG9mIGRlYXRoLgor
ICAgIGNsYXNzIFZhbHVlQ2xlYW51cCA6IHB1YmxpYyBVbmNvbmRpdGlvbmFsRmluYWxpemVyIHsK
KyAgICBwdWJsaWM6CisgICAgICAgIFZhbHVlQ2xlYW51cChJbmZlcnJlZFZhbHVlKik7CisgICAg
ICAgIHZpcnR1YWwgflZhbHVlQ2xlYW51cCgpOworICAgICAgICAKKyAgICBwcm90ZWN0ZWQ6Cisg
ICAgICAgIHZvaWQgZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoKSBvdmVycmlkZTsKKyAgICAgICAg
CisgICAgcHJpdmF0ZToKKyAgICAgICAgSW5mZXJyZWRWYWx1ZSogbV9vd25lcjsKKyAgICB9Owor
ICAgIAorICAgIGZyaWVuZCBjbGFzcyBWYWx1ZUNsZWFudXA7CisgICAgCisgICAgSW5saW5lV2F0
Y2hwb2ludFNldCBtX3NldDsKKyAgICBXcml0ZUJhcnJpZXI8VW5rbm93bj4gbV92YWx1ZTsKKyAg
ICBzdGQ6OnVuaXF1ZV9wdHI8VmFsdWVDbGVhbnVwPiBtX2NsZWFudXA7Cit9OworCisvLyBGSVhN
RTogV2UgY291bGQgaGF2ZSBhbiBJbmxpbmVJbmZlcnJlZFZhbHVlLCB3aGljaCBvbmx5IGFsbG9j
YXRlcyB0aGUgSW5mZXJyZWRWYWx1ZSBvYmplY3Qgd2hlbgorLy8gYSBub3RpZnlXcml0ZSgpIHRy
YW5zaXRpb25zIHVzIHRvd2FyZHMgd2F0Y2hpbmcsIGFuZCB0aGVuIGNsZWFycyB0aGUgcmVmZXJl
bmNlIChhbGxvd2luZyB0aGUgb2JqZWN0CisvLyB0byBkaWUpIHdoZW4gd2UgZ2V0IGludmFsaWRh
dGVkLgorCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEluZmVycmVkVmFsdWVfaAor
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Vudmlyb25tZW50UmVjb3Jk
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Vudmly
b25tZW50UmVjb3JkLmNwcAkocmV2aXNpb24gMTgyNDk4KQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNFbnZpcm9ubWVudFJlY29yZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQw
LDcgKzQwLDcgQEAgdm9pZCBKU0Vudmlyb25tZW50UmVjb3JkOjp2aXNpdENoaWxkcmVuKAogICAg
IEpTRW52aXJvbm1lbnRSZWNvcmQqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNFbnZpcm9ubWVudFJl
Y29yZCo+KGNlbGwpOwogICAgIEFTU0VSVF9HQ19PQkpFQ1RfSU5IRVJJVFModGhpc09iamVjdCwg
aW5mbygpKTsKICAgICBCYXNlOjp2aXNpdENoaWxkcmVuKHRoaXNPYmplY3QsIHZpc2l0b3IpOwot
ICAgIHZpc2l0b3IuYXBwZW5kVmFsdWVzKHRoaXNPYmplY3QtPnZhcmlhYmxlcygpLCB0aGlzT2Jq
ZWN0LT5tX3N5bWJvbFRhYmxlLT5zY29wZVNpemUoKSk7CisgICAgdmlzaXRvci5hcHBlbmRWYWx1
ZXModGhpc09iamVjdC0+dmFyaWFibGVzKCksIHRoaXNPYmplY3QtPnN5bWJvbFRhYmxlKCktPnNj
b3BlU2l6ZSgpKTsKIH0KIAogfSAvLyBuYW1lc3BhY2UgSlNDCkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0Vudmlyb25tZW50UmVjb3JkLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNFbnZpcm9ubWVudFJlY29yZC5oCShyZXZpc2lv
biAxODI0OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Vudmlyb25tZW50
UmVjb3JkLmgJKHdvcmtpbmcgY29weSkKQEAgLTUzLDcgKzUzLDcgQEAgcHVibGljOgogICAgIAog
ICAgIGJvb2wgaXNWYWxpZChTY29wZU9mZnNldCBvZmZzZXQpCiAgICAgewotICAgICAgICByZXR1
cm4gISFvZmZzZXQgJiYgb2Zmc2V0Lm9mZnNldCgpIDwgbV9zeW1ib2xUYWJsZS0+c2NvcGVTaXpl
KCk7CisgICAgICAgIHJldHVybiAhIW9mZnNldCAmJiBvZmZzZXQub2Zmc2V0KCkgPCBzeW1ib2xU
YWJsZSgpLT5zY29wZVNpemUoKTsKICAgICB9CiAgICAgCiAgICAgV3JpdGVCYXJyaWVyQmFzZTxV
bmtub3duPiYgdmFyaWFibGVBdChTY29wZU9mZnNldCBvZmZzZXQpCkBAIC0xMDQsNyArMTA0LDcg
QEAgcHJvdGVjdGVkOgogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mIHZtKQogICAgIHsKICAg
ICAgICAgZmluaXNoQ3JlYXRpb25VbmluaXRpYWxpemVkKHZtKTsKLSAgICAgICAgZm9yICh1bnNp
Z25lZCBpID0gbV9zeW1ib2xUYWJsZS0+c2NvcGVTaXplKCk7IGktLTspIHsKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gc3ltYm9sVGFibGUoKS0+c2NvcGVTaXplKCk7IGktLTspIHsKICAgICAg
ICAgICAgIC8vIEZpbGxpbmcgdGhpcyB3aXRoIHVuZGVmaW5lZCBpcyB1c2VmdWwgYmVjYXVzZSB0
aGF0J3Mgd2hhdCB2YXJpYWJsZXMgc3RhcnQgb3V0IGFzLgogICAgICAgICAgICAgdmFyaWFibGVB
dChTY29wZU9mZnNldChpKSkuc2V0VW5kZWZpbmVkKCk7CiAgICAgICAgIH0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwCShyZXZpc2lvbiAxODI0
OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNTksNiArNTksMTMgQEAgYm9vbCBKU0Z1bmN0aW9uOjppc0hvc3RGdW5j
dGlvbk5vbklubGluZQogICAgIHJldHVybiBpc0hvc3RGdW5jdGlvbigpOwogfQogCitKU0Z1bmN0
aW9uKiBKU0Z1bmN0aW9uOjpjcmVhdGUoVk0mIHZtLCBGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1
dGFibGUsIEpTU2NvcGUqIHNjb3BlKQoreworICAgIEpTRnVuY3Rpb24qIHJlc3VsdCA9IGNyZWF0
ZUltcGwodm0sIGV4ZWN1dGFibGUsIHNjb3BlKTsKKyAgICBleGVjdXRhYmxlLT5zaW5nbGV0b25G
dW5jdGlvbigpLT5ub3RpZnlXcml0ZSh2bSwgcmVzdWx0LCAiQWxsb2NhdGluZyBhIGZ1bmN0aW9u
Iik7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwogSlNGdW5jdGlvbiogSlNGdW5jdGlvbjo6Y3Jl
YXRlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgaW50IGxlbmd0aCwgY29u
c3QgU3RyaW5nJiBuYW1lLCBOYXRpdmVGdW5jdGlvbiBuYXRpdmVGdW5jdGlvbiwgSW50cmluc2lj
IGludHJpbnNpYywgTmF0aXZlRnVuY3Rpb24gbmF0aXZlQ29uc3RydWN0b3IpCiB7CiAgICAgTmF0
aXZlRXhlY3V0YWJsZSogZXhlY3V0YWJsZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTRnVuY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU0Z1bmN0aW9uLmgJKHJldmlzaW9uIDE4MjQ5OCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMjQsNiArMjQs
NyBAQAogI2lmbmRlZiBKU0Z1bmN0aW9uX2gKICNkZWZpbmUgSlNGdW5jdGlvbl9oCiAKKyNpbmNs
dWRlICJFeGVjdXRhYmxlLmgiCiAjaW5jbHVkZSAiSW50ZXJuYWxGdW5jdGlvbi5oIgogI2luY2x1
ZGUgIkpTQ2FsbGVlLmgiCiAjaW5jbHVkZSAiSlNTY29wZS5oIgpAQCAtNTksMTUgKzYwLDE1IEBA
IHB1YmxpYzoKICAgICB0eXBlZGVmIEpTQ2FsbGVlIEJhc2U7CiAKICAgICBKU19FWFBPUlRfUFJJ
VkFURSBzdGF0aWMgSlNGdW5jdGlvbiogY3JlYXRlKFZNJiwgSlNHbG9iYWxPYmplY3QqLCBpbnQg
bGVuZ3RoLCBjb25zdCBTdHJpbmcmIG5hbWUsIE5hdGl2ZUZ1bmN0aW9uLCBJbnRyaW5zaWMgPSBO
b0ludHJpbnNpYywgTmF0aXZlRnVuY3Rpb24gbmF0aXZlQ29uc3RydWN0b3IgPSBjYWxsSG9zdEZ1
bmN0aW9uQXNDb25zdHJ1Y3Rvcik7Ci0KLSAgICBzdGF0aWMgSlNGdW5jdGlvbiogY3JlYXRlKFZN
JiB2bSwgRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlLCBKU1Njb3BlKiBzY29wZSkKKyAg
ICAKKyAgICBzdGF0aWMgSlNGdW5jdGlvbiogY3JlYXRlV2l0aEludmFsaWRhdGVkUmVhbGxvY2F0
aW9uV2F0Y2hwb2ludChWTSYgdm0sIEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSwgSlNT
Y29wZSogc2NvcGUpCiAgICAgewotICAgICAgICBKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9IG5ldyAo
Tm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTRnVuY3Rpb24+KHZtLmhlYXApKSBKU0Z1bmN0aW9uKHZt
LCBleGVjdXRhYmxlLCBzY29wZSk7Ci0gICAgICAgIEFTU0VSVChmdW5jdGlvbi0+c3RydWN0dXJl
KCktPmdsb2JhbE9iamVjdCgpKTsKLSAgICAgICAgZnVuY3Rpb24tPmZpbmlzaENyZWF0aW9uKHZt
KTsKLSAgICAgICAgcmV0dXJuIGZ1bmN0aW9uOworICAgICAgICBBU1NFUlQoZXhlY3V0YWJsZS0+
c2luZ2xldG9uRnVuY3Rpb24oKS0+aGFzQmVlbkludmFsaWRhdGVkKCkpOworICAgICAgICByZXR1
cm4gY3JlYXRlSW1wbCh2bSwgZXhlY3V0YWJsZSwgc2NvcGUpOwogICAgIH0KIAorICAgIHN0YXRp
YyBKU0Z1bmN0aW9uKiBjcmVhdGUoVk0mLCBGdW5jdGlvbkV4ZWN1dGFibGUqLCBKU1Njb3BlKik7
CisKICAgICBzdGF0aWMgSlNGdW5jdGlvbiogY3JlYXRlQnVpbHRpbkZ1bmN0aW9uKFZNJiwgRnVu
Y3Rpb25FeGVjdXRhYmxlKiwgSlNHbG9iYWxPYmplY3QqKTsKIAogICAgIHN0YXRpYyB2b2lkIGRl
c3Ryb3koSlNDZWxsKik7CkBAIC0xNDksNiArMTUwLDE0IEBAIHByb3RlY3RlZDoKICAgICBzdGF0
aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAKIHByaXZhdGU6
CisgICAgc3RhdGljIEpTRnVuY3Rpb24qIGNyZWF0ZUltcGwoVk0mIHZtLCBGdW5jdGlvbkV4ZWN1
dGFibGUqIGV4ZWN1dGFibGUsIEpTU2NvcGUqIHNjb3BlKQorICAgIHsKKyAgICAgICAgSlNGdW5j
dGlvbiogZnVuY3Rpb24gPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0Z1bmN0aW9uPih2
bS5oZWFwKSkgSlNGdW5jdGlvbih2bSwgZXhlY3V0YWJsZSwgc2NvcGUpOworICAgICAgICBBU1NF
UlQoZnVuY3Rpb24tPnN0cnVjdHVyZSgpLT5nbG9iYWxPYmplY3QoKSk7CisgICAgICAgIGZ1bmN0
aW9uLT5maW5pc2hDcmVhdGlvbih2bSk7CisgICAgICAgIHJldHVybiBmdW5jdGlvbjsKKyAgICB9
CisgICAgCiAgICAgZnJpZW5kIGNsYXNzIExMSW50T2Zmc2V0c0V4dHJhY3RvcjsKIAogICAgIHN0
YXRpYyBFbmNvZGVkSlNWYWx1ZSBhcmd1bWVudHNHZXR0ZXIoRXhlY1N0YXRlKiwgSlNPYmplY3Qq
LCBFbmNvZGVkSlNWYWx1ZSwgUHJvcGVydHlOYW1lKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAJKHJldmlzaW9uIDE4MjQ5OCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTI0LDcgKzEyNCw3IEBACiAjaW5jbHVkZSAiU3ltYm9sLmgiCiAjaW5j
bHVkZSAiU3ltYm9sQ29uc3RydWN0b3IuaCIKICNpbmNsdWRlICJTeW1ib2xQcm90b3R5cGUuaCIK
LSNpbmNsdWRlICJWYXJpYWJsZVdhdGNocG9pbnRTZXRJbmxpbmVzLmgiCisjaW5jbHVkZSAiVmFy
aWFibGVXcml0ZUZpcmVEZXRhaWwuaCIKICNpbmNsdWRlICJXZWFrR0NNYXBJbmxpbmVzLmgiCiAj
aW5jbHVkZSAiV2Vha01hcENvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiV2Vha01hcFByb3RvdHlw
ZS5oIgpAQCAtNDg5LDcgKzQ4OSw3IEBAIEpTR2xvYmFsT2JqZWN0OjpOZXdHbG9iYWxWYXIgSlNH
bG9iYWxPYmoKICAgICBTY29wZU9mZnNldCBvZmZzZXQgPSBzeW1ib2xUYWJsZSgpLT50YWtlTmV4
dFNjb3BlT2Zmc2V0KGxvY2tlcik7CiAgICAgU3ltYm9sVGFibGVFbnRyeSBuZXdFbnRyeShWYXJP
ZmZzZXQob2Zmc2V0KSwgKGNvbnN0YW50TW9kZSA9PSBJc0NvbnN0YW50KSA/IFJlYWRPbmx5IDog
MCk7CiAgICAgaWYgKGNvbnN0YW50TW9kZSA9PSBJc1ZhcmlhYmxlKQotICAgICAgICBuZXdFbnRy
eS5wcmVwYXJlVG9XYXRjaChzeW1ib2xUYWJsZSgpKTsKKyAgICAgICAgbmV3RW50cnkucHJlcGFy
ZVRvV2F0Y2goKTsKICAgICBlbHNlCiAgICAgICAgIG5ld0VudHJ5LmRpc2FibGVXYXRjaGluZygp
OwogICAgIHN5bWJvbFRhYmxlKCktPmFkZChsb2NrZXIsIGlkZW50LmltcGwoKSwgbmV3RW50cnkp
OwpAQCAtNTEwLDcgKzUxMCw3IEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6OmFkZEZ1bmN0aW9uKEV4
ZWNTdGEKICAgICBOZXdHbG9iYWxWYXIgdmFyID0gYWRkR2xvYmFsVmFyKHByb3BlcnR5TmFtZSwg
SXNWYXJpYWJsZSk7CiAgICAgdmFyaWFibGVBdCh2YXIub2Zmc2V0KS5zZXQoZXhlYy0+dm0oKSwg
dGhpcywgdmFsdWUpOwogICAgIGlmICh2YXIuc2V0KQotICAgICAgICB2YXIuc2V0LT5ub3RpZnlX
cml0ZSh2bSwgdmFsdWUsIFZhcmlhYmxlV3JpdGVGaXJlRGV0YWlsKHRoaXMsIHByb3BlcnR5TmFt
ZSkpOworICAgICAgICB2YXIuc2V0LT50b3VjaChWYXJpYWJsZVdyaXRlRmlyZURldGFpbCh0aGlz
LCBwcm9wZXJ0eU5hbWUpKTsKIH0KIAogc3RhdGljIGlubGluZSBKU09iamVjdCogbGFzdEluUHJv
dG90eXBlQ2hhaW4oSlNPYmplY3QqIG9iamVjdCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAkocmV2aXNpb24gMTgyNDk4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuaAkod29ya2luZyBjb3B5
KQpAQCAtMzM0LDcgKzMzNCw3IEBAIHByb3RlY3RlZDoKIAogICAgIHN0cnVjdCBOZXdHbG9iYWxW
YXIgewogICAgICAgICBTY29wZU9mZnNldCBvZmZzZXQ7Ci0gICAgICAgIFZhcmlhYmxlV2F0Y2hw
b2ludFNldCogc2V0OworICAgICAgICBXYXRjaHBvaW50U2V0KiBzZXQ7CiAgICAgfTsKICAgICBO
ZXdHbG9iYWxWYXIgYWRkR2xvYmFsVmFyKGNvbnN0IElkZW50aWZpZXImLCBDb25zdGFudE1vZGUp
OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xleGljYWxFbnZpcm9u
bWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNM
ZXhpY2FsRW52aXJvbm1lbnQuY3BwCShyZXZpc2lvbiAxODI0OTgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0xleGljYWxFbnZpcm9ubWVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTc3LDYgKzc3LDcgQEAgaW5saW5lIGJvb2wgSlNMZXhpY2FsRW52aXJvbm1lbnQ6OnN5bWJv
bAogICAgIEFTU0VSVCghSGVhcDo6aGVhcCh2YWx1ZSkgfHwgSGVhcDo6aGVhcCh2YWx1ZSkgPT0g
SGVhcDo6aGVhcCh0aGlzKSk7CiAgICAgCiAgICAgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiog
cmVnOworICAgIFdhdGNocG9pbnRTZXQqIHNldDsKICAgICB7CiAgICAgICAgIEdDU2FmZUNvbmN1
cnJlbnRKSVRMb2NrZXIgbG9ja2VyKHN5bWJvbFRhYmxlKCktPm1fbG9jaywgZXhlYy0+dm0oKS5o
ZWFwKTsKICAgICAgICAgU3ltYm9sVGFibGU6Ok1hcDo6aXRlcmF0b3IgaXRlciA9IHN5bWJvbFRh
YmxlKCktPmZpbmQobG9ja2VyLCBwcm9wZXJ0eU5hbWUudWlkKCkpOwpAQCAtOTIsMTEgKzkzLDEy
IEBAIGlubGluZSBib29sIEpTTGV4aWNhbEVudmlyb25tZW50OjpzeW1ib2wKICAgICAgICAgLy8g
RGVmZW5kIGFnYWluc3QgdGhlIGluc3BlY3RvciBhc2tpbmcgZm9yIGEgdmFyIGFmdGVyIGl0IGhh
cyBiZWVuIG9wdGltaXplZCBvdXQuCiAgICAgICAgIGlmICghaXNWYWxpZChvZmZzZXQpKQogICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICBpZiAoVmFyaWFibGVXYXRjaHBvaW50U2V0
KiBzZXQgPSBpdGVyLT52YWx1ZS53YXRjaHBvaW50U2V0KCkpCi0gICAgICAgICAgICBzZXQtPmlu
dmFsaWRhdGUoVmFyaWFibGVXcml0ZUZpcmVEZXRhaWwodGhpcywgcHJvcGVydHlOYW1lKSk7IC8v
IERvbid0IG1lc3MgYXJvdW5kIC0gaWYgd2UgaGFkIGZvdW5kIHRoaXMgc3RhdGljYWxseSwgd2Ug
d291bGQgaGF2ZSBpbnZhbGlkYXRlZCBpdC4KKyAgICAgICAgc2V0ID0gaXRlci0+dmFsdWUud2F0
Y2hwb2ludFNldCgpOwogICAgICAgICByZWcgPSAmdmFyaWFibGVBdChvZmZzZXQpOwogICAgIH0K
ICAgICByZWctPnNldCh2bSwgdGhpcywgdmFsdWUpOworICAgIGlmIChzZXQpCisgICAgICAgIHNl
dC0+aW52YWxpZGF0ZShWYXJpYWJsZVdyaXRlRmlyZURldGFpbCh0aGlzLCBwcm9wZXJ0eU5hbWUp
KTsgLy8gRG9uJ3QgbWVzcyBhcm91bmQgLSBpZiB3ZSBoYWQgZm91bmQgdGhpcyBzdGF0aWNhbGx5
LCB3ZSB3b3VsZCBoYXZlIGludmFsaWRhdGVkIGl0LgogICAgIHJldHVybiB0cnVlOwogfQogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Njb3BlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTY29wZS5oCShyZXZpc2lvbiAxODI0
OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1Njb3BlLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTMxLDcgKzMxLDcgQEAKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBTY29wZUNo
YWluSXRlcmF0b3I7Ci1jbGFzcyBWYXJpYWJsZVdhdGNocG9pbnRTZXQ7CitjbGFzcyBXYXRjaHBv
aW50U2V0OwogCiBlbnVtIFJlc29sdmVNb2RlIHsKICAgICBUaHJvd0lmTm90Rm91bmQsCkBAIC0x
MDIsNyArMTAyLDcgQEAgaW5saW5lIGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MoUmVzbwog
fQogCiBzdHJ1Y3QgUmVzb2x2ZU9wIHsKLSAgICBSZXNvbHZlT3AoUmVzb2x2ZVR5cGUgdHlwZSwg
c2l6ZV90IGRlcHRoLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNMZXhpY2FsRW52aXJvbm1lbnQq
IGxleGljYWxFbnZpcm9ubWVudCwgVmFyaWFibGVXYXRjaHBvaW50U2V0KiB3YXRjaHBvaW50U2V0
LCB1aW50cHRyX3Qgb3BlcmFuZCkKKyAgICBSZXNvbHZlT3AoUmVzb2x2ZVR5cGUgdHlwZSwgc2l6
ZV90IGRlcHRoLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgSlNMZXhpY2FsRW52aXJvbm1lbnQqIGxl
eGljYWxFbnZpcm9ubWVudCwgV2F0Y2hwb2ludFNldCogd2F0Y2hwb2ludFNldCwgdWludHB0cl90
IG9wZXJhbmQpCiAgICAgICAgIDogdHlwZSh0eXBlKQogICAgICAgICAsIGRlcHRoKGRlcHRoKQog
ICAgICAgICAsIHN0cnVjdHVyZShzdHJ1Y3R1cmUpCkBAIC0xMTYsNyArMTE2LDcgQEAgc3RydWN0
IFJlc29sdmVPcCB7CiAgICAgc2l6ZV90IGRlcHRoOwogICAgIFN0cnVjdHVyZSogc3RydWN0dXJl
OwogICAgIEpTTGV4aWNhbEVudmlyb25tZW50KiBsZXhpY2FsRW52aXJvbm1lbnQ7Ci0gICAgVmFy
aWFibGVXYXRjaHBvaW50U2V0KiB3YXRjaHBvaW50U2V0OworICAgIFdhdGNocG9pbnRTZXQqIHdh
dGNocG9pbnRTZXQ7CiAgICAgdWludHB0cl90IG9wZXJhbmQ7CiB9OwogCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJs
ZU9iamVjdC5oCShyZXZpc2lvbiAxODI0OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTg2LDcg
Kzg2LDcgQEAgcHJvdGVjdGVkOgogICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mIHZtKQogICAg
IHsKICAgICAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOwotICAgICAgICBtX3N5bWJvbFRh
YmxlLnNldCh2bSwgdGhpcywgU3ltYm9sVGFibGU6OmNyZWF0ZSh2bSkpOworICAgICAgICBzZXRT
eW1ib2xUYWJsZSh2bSwgU3ltYm9sVGFibGU6OmNyZWF0ZSh2bSkpOwogICAgIH0KICAgICAKICAg
ICBTZWdtZW50ZWRWZWN0b3I8V3JpdGVCYXJyaWVyPFVua25vd24+LCAxNj4gbV92YXJpYWJsZXM7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xU
YWJsZU9iamVjdC5oCShyZXZpc2lvbiAxODI0OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMy
LDcgQEAKICNpbmNsdWRlICJKU1Njb3BlLmgiCiAjaW5jbHVkZSAiUHJvcGVydHlEZXNjcmlwdG9y
LmgiCiAjaW5jbHVkZSAiU3ltYm9sVGFibGUuaCIKLSNpbmNsdWRlICJWYXJpYWJsZVdhdGNocG9p
bnRTZXRJbmxpbmVzLmgiCisjaW5jbHVkZSAiVmFyaWFibGVXcml0ZUZpcmVEZXRhaWwuaCIKIAog
bmFtZXNwYWNlIEpTQyB7CiAKQEAgLTYxLDExICs2MSwxOSBAQCBwcm90ZWN0ZWQ6CiAgICAgICAg
IDogQmFzZSh2bSwgc3RydWN0dXJlLCBzY29wZSkKICAgICB7CiAgICAgICAgIEFTU0VSVChzeW1i
b2xUYWJsZSk7CisgICAgICAgIHNldFN5bWJvbFRhYmxlKHZtLCBzeW1ib2xUYWJsZSk7CisgICAg
fQorICAgIAorICAgIHZvaWQgc2V0U3ltYm9sVGFibGUoVk0mIHZtLCBTeW1ib2xUYWJsZSogc3lt
Ym9sVGFibGUpCisgICAgeworICAgICAgICBBU1NFUlQoIW1fc3ltYm9sVGFibGUpOworICAgICAg
ICBzeW1ib2xUYWJsZS0+c2luZ2xldG9uU2NvcGUoKS0+bm90aWZ5V3JpdGUodm0sIHRoaXMsICJB
bGxvY2F0ZWQgYSBzY29wZSIpOwogICAgICAgICBtX3N5bWJvbFRhYmxlLnNldCh2bSwgdGhpcywg
c3ltYm9sVGFibGUpOwogICAgIH0KLQorICAgIAogICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRy
ZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKLQorICAgIAorcHJpdmF0ZToKICAgICBXcml0ZUJh
cnJpZXI8U3ltYm9sVGFibGU+IG1fc3ltYm9sVGFibGU7CiB9OwogCkBAIC0xMjYsNiArMTM0LDcg
QEAgaW5saW5lIGJvb2wgc3ltYm9sVGFibGVQdXQoCiAgICAgQVNTRVJUKCFIZWFwOjpoZWFwKHZh
bHVlKSB8fCBIZWFwOjpoZWFwKHZhbHVlKSA9PSBIZWFwOjpoZWFwKG9iamVjdCkpOwogICAgIAog
ICAgIFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIHJlZzsKKyAgICBXYXRjaHBvaW50U2V0KiBz
ZXQ7CiAgICAgewogICAgICAgICBTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUgPSAqb2JqZWN0LT5z
eW1ib2xUYWJsZSgpOwogICAgICAgICAvLyBGSVhNRTogVGhpcyBpcyB2ZXJ5IHN1c3BpY2lvdXMu
IFdlIHNob3VsZG4ndCBuZWVkIGEgR0Mtc2FmZSBsb2NrIGhlcmUuCkBAIC0xNDIsMTcgKzE1MSwx
NSBAQCBpbmxpbmUgYm9vbCBzeW1ib2xUYWJsZVB1dCgKICAgICAgICAgICAgICAgICB0aHJvd1R5
cGVFcnJvcihleGVjLCBTdHJpY3RNb2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOwogICAg
ICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKFZhcmlhYmxlV2F0
Y2hwb2ludFNldCogc2V0ID0gaXRlci0+dmFsdWUud2F0Y2hwb2ludFNldCgpKSB7Ci0gICAgICAg
ICAgICAvLyBGSVhNRTogSXQncyBzdHJhbmdlIHRoYXQgd2UncmUgZG9pbmcgdGhpcyB3aGlsZSBo
b2xkaW5nIHRoZSBzeW1ib2wgdGFibGUncyBsb2NrLgotICAgICAgICAgICAgLy8gaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEzNDYwMQotICAgICAgICAgICAgc2V0LT5u
b3RpZnlXcml0ZSh2bSwgdmFsdWUsIG9iamVjdCwgcHJvcGVydHlOYW1lKTsKLSAgICAgICAgfQor
ICAgICAgICBzZXQgPSBpdGVyLT52YWx1ZS53YXRjaHBvaW50U2V0KCk7CiAgICAgICAgIHJlZyA9
ICZvYmplY3QtPnZhcmlhYmxlQXQoZmFzdEVudHJ5LnNjb3BlT2Zmc2V0KCkpOwogICAgIH0KICAg
ICAvLyBJJ2QgcHJlZmVyIHdlIG5vdCBob2xkIGxvY2sgd2hpbGUgZXhlY3V0aW5nIGJhcnJpZXJz
LCBzaW5jZSBJIHByZWZlciB0byByZXNlcnZlCiAgICAgLy8gdGhlIHJpZ2h0IGZvciBiYXJyaWVy
cyB0byBiZSBhYmxlIHRvIHRyaWdnZXIgR0MuIEFuZCBJIGRvbid0IHdhbnQgdG8gaG9sZCBWTQog
ICAgIC8vIGxvY2tzIHdoaWxlIEdDJ2luZy4KICAgICByZWctPnNldCh2bSwgb2JqZWN0LCB2YWx1
ZSk7CisgICAgaWYgKHNldCkKKyAgICAgICAgVmFyaWFibGVXcml0ZUZpcmVEZXRhaWw6OnRvdWNo
KHNldCwgb2JqZWN0LCBwcm9wZXJ0eU5hbWUpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0x
NjQsNiArMTcxLDcgQEAgaW5saW5lIGJvb2wgc3ltYm9sVGFibGVQdXRXaXRoQXR0cmlidXRlcwog
ICAgIEFTU0VSVCghSGVhcDo6aGVhcCh2YWx1ZSkgfHwgSGVhcDo6aGVhcCh2YWx1ZSkgPT0gSGVh
cDo6aGVhcChvYmplY3QpKTsKIAogICAgIFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIHJlZzsK
KyAgICBXYXRjaHBvaW50U2V0KiBzZXQ7CiAgICAgewogICAgICAgICBTeW1ib2xUYWJsZSYgc3lt
Ym9sVGFibGUgPSAqb2JqZWN0LT5zeW1ib2xUYWJsZSgpOwogICAgICAgICBDb25jdXJyZW50SklU
TG9ja2VyIGxvY2tlcihzeW1ib2xUYWJsZS5tX2xvY2spOwpAQCAtMTcyLDEyICsxODAsMTMgQEAg
aW5saW5lIGJvb2wgc3ltYm9sVGFibGVQdXRXaXRoQXR0cmlidXRlcwogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgICAgICBTeW1ib2xUYWJsZUVudHJ5JiBlbnRyeSA9IGl0ZXItPnZhbHVl
OwogICAgICAgICBBU1NFUlQoIWVudHJ5LmlzTnVsbCgpKTsKLSAgICAgICAgaWYgKFZhcmlhYmxl
V2F0Y2hwb2ludFNldCogc2V0ID0gZW50cnkud2F0Y2hwb2ludFNldCgpKQotICAgICAgICAgICAg
c2V0LT5ub3RpZnlXcml0ZSh2bSwgdmFsdWUsIG9iamVjdCwgcHJvcGVydHlOYW1lKTsKKyAgICAg
ICAgc2V0ID0gZW50cnkud2F0Y2hwb2ludFNldCgpOwogICAgICAgICBlbnRyeS5zZXRBdHRyaWJ1
dGVzKGF0dHJpYnV0ZXMpOwogICAgICAgICByZWcgPSAmb2JqZWN0LT52YXJpYWJsZUF0KGVudHJ5
LnNjb3BlT2Zmc2V0KCkpOwogICAgIH0KICAgICByZWctPnNldCh2bSwgb2JqZWN0LCB2YWx1ZSk7
CisgICAgaWYgKHNldCkKKyAgICAgICAgVmFyaWFibGVXcml0ZUZpcmVEZXRhaWw6OnRvdWNoKHNl
dCwgb2JqZWN0LCBwcm9wZXJ0eU5hbWUpOwogICAgIHJldHVybiB0cnVlOwogfQogCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9QdXRQcm9wZXJ0eVNsb3QuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9QdXRQcm9wZXJ0eVNsb3QuaAkocmV2
aXNpb24gMTgyNDk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHV0UHJvcGVy
dHlTbG90LmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKICNkZWZpbmUgUHV0UHJv
cGVydHlTbG90X2gKIAogI2luY2x1ZGUgIkpTQ0pTVmFsdWUuaCIKKyNpbmNsdWRlICJQcm9wZXJ0
eU9mZnNldC5oIgogCiAjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmNwcAkocmV2aXNpb24gMTgy
NDk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0zMyw3ICszMyw2IEBACiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgog
I2luY2x1ZGUgIlNsb3RWaXNpdG9ySW5saW5lcy5oIgogI2luY2x1ZGUgIlR5cGVQcm9maWxlci5o
IgotI2luY2x1ZGUgIlZhcmlhYmxlV2F0Y2hwb2ludFNldElubGluZXMuaCIKIAogbmFtZXNwYWNl
IEpTQyB7CiAKQEAgLTYwLDIxICs1OSwxNCBAQCB2b2lkIFN5bWJvbFRhYmxlRW50cnk6OmZyZWVG
YXRFbnRyeVNsb3coCiAgICAgZGVsZXRlIGZhdEVudHJ5KCk7CiB9CiAKLUpTVmFsdWUgU3ltYm9s
VGFibGVFbnRyeTo6aW5mZXJyZWRWYWx1ZSgpCi17Ci0gICAgaWYgKCFpc0ZhdCgpKQotICAgICAg
ICByZXR1cm4gSlNWYWx1ZSgpOwotICAgIHJldHVybiBmYXRFbnRyeSgpLT5tX3dhdGNocG9pbnRz
LT5pbmZlcnJlZFZhbHVlKCk7Ci19Ci0KLXZvaWQgU3ltYm9sVGFibGVFbnRyeTo6cHJlcGFyZVRv
V2F0Y2goU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlKQordm9pZCBTeW1ib2xUYWJsZUVudHJ5Ojpw
cmVwYXJlVG9XYXRjaCgpCiB7CiAgICAgaWYgKCFpc1dhdGNoYWJsZSgpKQogICAgICAgICByZXR1
cm47CiAgICAgRmF0RW50cnkqIGVudHJ5ID0gaW5mbGF0ZSgpOwogICAgIGlmIChlbnRyeS0+bV93
YXRjaHBvaW50cykKICAgICAgICAgcmV0dXJuOwotICAgIGVudHJ5LT5tX3dhdGNocG9pbnRzID0g
YWRvcHRSZWYobmV3IFZhcmlhYmxlV2F0Y2hwb2ludFNldCgqc3ltYm9sVGFibGUpKTsKKyAgICBl
bnRyeS0+bV93YXRjaHBvaW50cyA9IGFkb3B0UmVmKG5ldyBXYXRjaHBvaW50U2V0KENsZWFyV2F0
Y2hwb2ludCkpOwogfQogCiB2b2lkIFN5bWJvbFRhYmxlRW50cnk6OmFkZFdhdGNocG9pbnQoV2F0
Y2hwb2ludCogd2F0Y2hwb2ludCkKQEAgLTgyLDE1ICs3NCw2IEBAIHZvaWQgU3ltYm9sVGFibGVF
bnRyeTo6YWRkV2F0Y2hwb2ludChXYXQKICAgICBmYXRFbnRyeSgpLT5tX3dhdGNocG9pbnRzLT5h
ZGQod2F0Y2hwb2ludCk7CiB9CiAKLXZvaWQgU3ltYm9sVGFibGVFbnRyeTo6bm90aWZ5V3JpdGVT
bG93KFZNJiB2bSwgSlNWYWx1ZSB2YWx1ZSwgY29uc3QgRmlyZURldGFpbCYgZGV0YWlsKQotewot
ICAgIFZhcmlhYmxlV2F0Y2hwb2ludFNldCogd2F0Y2hwb2ludHMgPSBmYXRFbnRyeSgpLT5tX3dh
dGNocG9pbnRzLmdldCgpOwotICAgIGlmICghd2F0Y2hwb2ludHMpCi0gICAgICAgIHJldHVybjsK
LSAgICAKLSAgICB3YXRjaHBvaW50cy0+bm90aWZ5V3JpdGUodm0sIHZhbHVlLCBkZXRhaWwpOwot
fQotCiBTeW1ib2xUYWJsZUVudHJ5OjpGYXRFbnRyeSogU3ltYm9sVGFibGVFbnRyeTo6aW5mbGF0
ZVNsb3coKQogewogICAgIEZhdEVudHJ5KiBlbnRyeSA9IG5ldyBGYXRFbnRyeShtX2JpdHMpOwpA
QCAtMTAxLDQ4ICs4NCwyOSBAQCBTeW1ib2xUYWJsZUVudHJ5OjpGYXRFbnRyeSogU3ltYm9sVGFi
bGVFCiBTeW1ib2xUYWJsZTo6U3ltYm9sVGFibGUoVk0mIHZtKQogICAgIDogSlNDZWxsKHZtLCB2
bS5zeW1ib2xUYWJsZVN0cnVjdHVyZS5nZXQoKSkKICAgICAsIG1fdXNlc05vblN0cmljdEV2YWwo
ZmFsc2UpCi0gICAgLCBtX2Z1bmN0aW9uRW50ZXJlZE9uY2UoQ2xlYXJXYXRjaHBvaW50KQogewog
fQogCiBTeW1ib2xUYWJsZTo6flN5bWJvbFRhYmxlKCkgeyB9CiAKK3ZvaWQgU3ltYm9sVGFibGU6
OmZpbmlzaENyZWF0aW9uKFZNJiB2bSkKK3sKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7
CisgICAgbV9zaW5nbGV0b25TY29wZS5zZXQodm0sIHRoaXMsIEluZmVycmVkVmFsdWU6OmNyZWF0
ZSh2bSkpOworfQorCiB2b2lkIFN5bWJvbFRhYmxlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogdGhp
c0NlbGwsIFNsb3RWaXNpdG9yJiB2aXNpdG9yKQogewogICAgIFN5bWJvbFRhYmxlKiB0aGlzU3lt
Ym9sVGFibGUgPSBqc0Nhc3Q8U3ltYm9sVGFibGUqPih0aGlzQ2VsbCk7CiAgICAgCiAgICAgdmlz
aXRvci5hcHBlbmQoJnRoaXNTeW1ib2xUYWJsZS0+bV9hcmd1bWVudHMpOwotICAgIAotICAgIGlm
ICghdGhpc1N5bWJvbFRhYmxlLT5tX3dhdGNocG9pbnRDbGVhbnVwKSB7Ci0gICAgICAgIHRoaXNT
eW1ib2xUYWJsZS0+bV93YXRjaHBvaW50Q2xlYW51cCA9Ci0gICAgICAgICAgICBzdGQ6Om1ha2Vf
dW5pcXVlPFdhdGNocG9pbnRDbGVhbnVwPih0aGlzU3ltYm9sVGFibGUpOwotICAgIH0KLSAgICAK
LSAgICB2aXNpdG9yLmFkZFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIodGhpc1N5bWJvbFRhYmxlLT5t
X3dhdGNocG9pbnRDbGVhbnVwLmdldCgpKTsKKyAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc1N5bWJv
bFRhYmxlLT5tX3NpbmdsZXRvblNjb3BlKTsKICAgICAKICAgICAvLyBTYXZlIHNvbWUgbWVtb3J5
LiBUaGlzIGlzIE8obikgdG8gcmVidWlsZCBhbmQgd2UgZG8gc28gb24gdGhlIGZseS4KICAgICBD
b25jdXJyZW50SklUTG9ja2VyIGxvY2tlcih0aGlzU3ltYm9sVGFibGUtPm1fbG9jayk7CiAgICAg
dGhpc1N5bWJvbFRhYmxlLT5tX2xvY2FsVG9FbnRyeSA9IG51bGxwdHI7CiB9CiAKLVN5bWJvbFRh
YmxlOjpXYXRjaHBvaW50Q2xlYW51cDo6V2F0Y2hwb2ludENsZWFudXAoU3ltYm9sVGFibGUqIHN5
bWJvbFRhYmxlKQotICAgIDogbV9zeW1ib2xUYWJsZShzeW1ib2xUYWJsZSkKLXsKLX0KLQotU3lt
Ym9sVGFibGU6OldhdGNocG9pbnRDbGVhbnVwOjp+V2F0Y2hwb2ludENsZWFudXAoKSB7IH0KLQot
dm9pZCBTeW1ib2xUYWJsZTo6V2F0Y2hwb2ludENsZWFudXA6OmZpbmFsaXplVW5jb25kaXRpb25h
bGx5KCkKLXsKLSAgICBTdHJpbmdGaXJlRGV0YWlsIGRldGFpbCgiU3ltYm9sIHRhYmxlIGNsZWFu
LXVwIGR1cmluZyBHQyIpOwotICAgIE1hcDo6aXRlcmF0b3IgaXRlciA9IG1fc3ltYm9sVGFibGUt
Pm1fbWFwLmJlZ2luKCk7Ci0gICAgTWFwOjppdGVyYXRvciBlbmQgPSBtX3N5bWJvbFRhYmxlLT5t
X21hcC5lbmQoKTsKLSAgICBmb3IgKDsgaXRlciAhPSBlbmQ7ICsraXRlcikgewotICAgICAgICBp
ZiAoVmFyaWFibGVXYXRjaHBvaW50U2V0KiBzZXQgPSBpdGVyLT52YWx1ZS53YXRjaHBvaW50U2V0
KCkpCi0gICAgICAgICAgICBzZXQtPmZpbmFsaXplVW5jb25kaXRpb25hbGx5KGRldGFpbCk7Ci0g
ICAgfQotfQotCiBjb25zdCBTeW1ib2xUYWJsZTo6TG9jYWxUb0VudHJ5VmVjJiBTeW1ib2xUYWJs
ZTo6bG9jYWxUb0VudHJ5KGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImKQogewogICAgIGlmIChV
TkxJS0VMWSghbV9sb2NhbFRvRW50cnkpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TeW1ib2xUYWJsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1N5bWJvbFRhYmxlLmgJKHJldmlzaW9uIDE4MjQ5OCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDE3
ICszMSwyMCBAQAogCiAjaW5jbHVkZSAiQ29uY3VycmVudEpJVExvY2suaCIKICNpbmNsdWRlICJD
b25zdGFudE1vZGUuaCIKKyNpbmNsdWRlICJJbmZlcnJlZFZhbHVlLmgiCiAjaW5jbHVkZSAiSlNP
YmplY3QuaCIKICNpbmNsdWRlICJTY29wZWRBcmd1bWVudHNUYWJsZS5oIgogI2luY2x1ZGUgIlR5
cGVMb2NhdGlvbi5oIgogI2luY2x1ZGUgIlZhck9mZnNldC5oIgotI2luY2x1ZGUgIlZhcmlhYmxl
V2F0Y2hwb2ludFNldC5oIgorI2luY2x1ZGUgIldhdGNocG9pbnQuaCIKICNpbmNsdWRlIDxtZW1v
cnk+CiAjaW5jbHVkZSA8d3RmL0hhc2hUcmFpdHMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJp
bmdJbXBsLmg+CiAKIG5hbWVzcGFjZSBKU0MgewogCitjbGFzcyBTeW1ib2xUYWJsZTsKKwogc3Rh
dGljIEFMV0FZU19JTkxJTkUgaW50IG1pc3NpbmdTeW1ib2xNYXJrZXIoKSB7IHJldHVybiBzdGQ6
Om51bWVyaWNfbGltaXRzPGludD46Om1heCgpOyB9CiAKIC8vIFRoZSBiaXQgdHdpZGRsaW5nIGlu
IHRoaXMgY2xhc3MgYXNzdW1lcyB0aGF0IGV2ZXJ5IHJlZ2lzdGVyIGluZGV4IGlzIGEKQEAgLTYz
LDExICs2NiwxMSBAQCBzdGF0aWMgQUxXQVlTX0lOTElORSBpbnQgbWlzc2luZ1N5bWJvbE1hCiAv
LyBjb3VudGVkIHBvaW50ZXIgdG8gYSBzaGFyZWQgV2F0Y2hwb2ludFNldC4gVGh1cywgaW4tcGxh
Y2UgZWRpdHMgb2YgdGhlCiAvLyBXYXRjaHBvaW50U2V0IHdpbGwgbWFuaWZlc3QgaW4gYWxsIGNv
cGllcy4gSGVyZSdzIGEgcGljdHVyZToKIC8vCi0vLyBTeW1ib2xUYWJsZUVudHJ5IC0tPiBGYXRF
bnRyeSAtLT4gVmFyaWFibGVXYXRjaHBvaW50U2V0CisvLyBTeW1ib2xUYWJsZUVudHJ5IC0tPiBG
YXRFbnRyeSAtLT4gV2F0Y2hwb2ludFNldAogLy8KIC8vIElmIHlvdSBtYWtlIGEgY29weSBvZiBh
IFN5bWJvbFRhYmxlRW50cnksIHlvdSB3aWxsIGhhdmU6CiAvLwotLy8gb3JpZ2luYWw6IFN5bWJv
bFRhYmxlRW50cnkgLS0+IEZhdEVudHJ5IC0tPiBWYXJpYWJsZVdhdGNocG9pbnRTZXQKKy8vIG9y
aWdpbmFsOiBTeW1ib2xUYWJsZUVudHJ5IC0tPiBGYXRFbnRyeSAtLT4gV2F0Y2hwb2ludFNldAog
Ly8gY29weTogICAgIFN5bWJvbFRhYmxlRW50cnkgLS0+IEZhdEVudHJ5IC0tLS0tXgogCiBzdHJ1
Y3QgU3ltYm9sVGFibGVFbnRyeSB7CkBAIC0yNjAsMzIgKzI2Myw0NCBAQCBwdWJsaWM6CiAgICAg
ICAgIHJldHVybiBiaXRzKCkgJiBEb250RW51bUZsYWc7CiAgICAgfQogICAgIAotICAgIEpTVmFs
dWUgaW5mZXJyZWRWYWx1ZSgpOwotCiAgICAgdm9pZCBkaXNhYmxlV2F0Y2hpbmcoKQogICAgIHsK
KyAgICAgICAgaWYgKFdhdGNocG9pbnRTZXQqIHNldCA9IHdhdGNocG9pbnRTZXQoKSkKKyAgICAg
ICAgICAgIHNldC0+aW52YWxpZGF0ZSgiRGlzYWJsaW5nIHdhdGNoaW5nIGluIHN5bWJvbCB0YWJs
ZSIpOwogICAgICAgICBpZiAodmFyT2Zmc2V0KCkuaXNTY29wZSgpKQogICAgICAgICAgICAgcGFj
ayh2YXJPZmZzZXQoKSwgZmFsc2UsIGlzUmVhZE9ubHkoKSwgaXNEb250RW51bSgpKTsKICAgICB9
CiAgICAgCi0gICAgdm9pZCBwcmVwYXJlVG9XYXRjaChTeW1ib2xUYWJsZSopOworICAgIHZvaWQg
cHJlcGFyZVRvV2F0Y2goKTsKICAgICAKICAgICB2b2lkIGFkZFdhdGNocG9pbnQoV2F0Y2hwb2lu
dCopOwogICAgIAotICAgIFZhcmlhYmxlV2F0Y2hwb2ludFNldCogd2F0Y2hwb2ludFNldCgpCisg
ICAgLy8gVGhpcyB3YXRjaHBvaW50IHNldCBpcyBpbml0aWFsaXplZCBjbGVhciwgYW5kIGdvZXMg
dGhyb3VnaCB0aGUgZm9sbG93aW5nIHN0YXRlIHRyYW5zaXRpb25zOgorICAgIC8vIAorICAgIC8v
IEZpcnN0IHdyaXRlIHRvIHRoaXMgdmFyLCBpbiBhbnkgc2NvcGUgdGhhdCBoYXMgdGhpcyBzeW1i
b2wgdGFibGU6IENsZWFyLT5Jc1dhdGNoZWQuCisgICAgLy8KKyAgICAvLyBTZWNvbmQgd3JpdGUg
dG8gdGhpcyB2YXIsIGluIGFueSBzY29wZSB0aGF0IGhhcyB0aGlzIHN5bWJvbCB0YWJsZTogSXNX
YXRjaGVkLT5Jc0ludmFsaWRhdGVkLgorICAgIC8vCisgICAgLy8gV2UgZW5zdXJlIHRoYXQgd2Ug
dG91Y2ggdGhlIHNldCAoaS5lLiB0cmlnZ2VyIGl0cyBzdGF0ZSB0cmFuc2l0aW9uKSBhZnRlciB3
ZSBkbyB0aGUgd3JpdGUuIFRoaXMKKyAgICAvLyBtZWFucyB0aGF0IGlmIHlvdSdyZSBpbiB0aGUg
Y29tcGlsZXIgdGhyZWFkLCBhbmQgeW91OgorICAgIC8vCisgICAgLy8gMSkgT2JzZXJ2ZSB0aGF0
IHRoZSBzZXQgSXNXYXRjaGVkIGFuZCBjb21taXQgdG8gYWRkaW5nIHlvdXIgd2F0Y2hwb2ludC4K
KyAgICAvLyAyKSBMb2FkIGEgdmFsdWUgZnJvbSBhbnkgc2NvcGUgdGhhdCBoYXMgdGhpcyB3YXRj
aHBvaW50IHNldC4KKyAgICAvLworICAgIC8vIFRoZW4geW91IGNhbiBiZSBzdXJlIHRoYXQgdGhh
dCB2YWx1ZSBpcyBlaXRoZXIgZ29pbmcgdG8gYmUgdGhlIGNvcnJlY3QgdmFsdWUgZm9yIHRoYXQg
dmFyIGZvcmV2ZXIsCisgICAgLy8gb3IgdGhlIHdhdGNocG9pbnQgc2V0IHdpbGwgaW52YWxpZGF0
ZSBhbmQgeW91J2xsIGdldCBmaXJlZC4KKyAgICAvLworICAgIC8vIEl0J3MgcG9zc2libGUgdG8g
d3JpdGUgYSBwcm9ncmFtIHRoYXQgZmlyc3QgY3JlYXRlcyBtdWx0aXBsZSBzY29wZXMgd2l0aCB0
aGUgc2FtZSB2YXIsIGFuZCB0aGVuCisgICAgLy8gaW5pdGlhbGl6ZXMgdGhhdCB2YXIgaW4ganVz
dCBvbmUgb2YgdGhlbS4gVGhpcyBtZWFucyB0aGF0IGEgY29tcGlsYXRpb24gY291bGQgY29uc3Rh
bnQtZm9sZCB0byBvbmUKKyAgICAvLyBvZiB0aGUgc2NvcGVzIHRoYXQgc3RpbGwgaGFzIGFuIHVu
ZGVmaW5lZCB2YWx1ZSBmb3IgdGhpcyB2YXJpYWJsZS4gVGhhdCdzIGZpbmUsIGJlY2F1c2UgYXQg
dGhhdAorICAgIC8vIHBvaW50IGFueSB3cml0ZSB0byBhbnkgb2YgdGhlIGluc3RhbmNlcyBvZiB0
aGF0IHZhcmlhYmxlIHdvdWxkIGZpcmUgdGhlIHdhdGNocG9pbnQuCisgICAgV2F0Y2hwb2ludFNl
dCogd2F0Y2hwb2ludFNldCgpCiAgICAgewogICAgICAgICBpZiAoIWlzRmF0KCkpCiAgICAgICAg
ICAgICByZXR1cm4gMDsKICAgICAgICAgcmV0dXJuIGZhdEVudHJ5KCktPm1fd2F0Y2hwb2ludHMu
Z2V0KCk7CiAgICAgfQogICAgIAotICAgIEFMV0FZU19JTkxJTkUgdm9pZCBub3RpZnlXcml0ZShW
TSYgdm0sIEpTVmFsdWUgdmFsdWUsIGNvbnN0IEZpcmVEZXRhaWwmIGRldGFpbCkKLSAgICB7Ci0g
ICAgICAgIGlmIChMSUtFTFkoIWlzRmF0KCkpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAg
ICBub3RpZnlXcml0ZVNsb3codm0sIHZhbHVlLCBkZXRhaWwpOwotICAgIH0KLSAgICAKIHByaXZh
dGU6CiAgICAgc3RhdGljIGNvbnN0IGludHB0cl90IFNsaW1GbGFnID0gMHgxOwogICAgIHN0YXRp
YyBjb25zdCBpbnRwdHJfdCBSZWFkT25seUZsYWcgPSAweDI7CkBAIC0zMDgsNyArMzIzLDcgQEAg
cHJpdmF0ZToKICAgICAgICAgCiAgICAgICAgIGludHB0cl90IG1fYml0czsgLy8gYWx3YXlzIGhh
cyBGYXRGbGFnIHNldCBhbmQgZXhhY3RseSBtYXRjaGVzIHdoYXQgdGhlIGJpdHMgd291bGQgaGF2
ZSBiZWVuIGlmIHRoaXMgd2Fzbid0IGZhdC4KICAgICAgICAgCi0gICAgICAgIFJlZlB0cjxWYXJp
YWJsZVdhdGNocG9pbnRTZXQ+IG1fd2F0Y2hwb2ludHM7CisgICAgICAgIFJlZlB0cjxXYXRjaHBv
aW50U2V0PiBtX3dhdGNocG9pbnRzOwogICAgIH07CiAgICAgCiAgICAgU3ltYm9sVGFibGVFbnRy
eSYgY29weVNsb3coY29uc3QgU3ltYm9sVGFibGVFbnRyeSYpOwpAQCAtNjM3LDYgKzY1Miw4IEBA
IHB1YmxpYzoKICAgICBTeW1ib2xUYWJsZSogY2xvbmVTY29wZVBhcnQoVk0mKTsKIAogICAgIHZv
aWQgcHJlcGFyZUZvclR5cGVQcm9maWxpbmcoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYpOwor
ICAgIAorICAgIEluZmVycmVkVmFsdWUqIHNpbmdsZXRvblNjb3BlKCkgeyByZXR1cm4gbV9zaW5n
bGV0b25TY29wZS5nZXQoKTsgfQogCiAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0Nl
bGwqLCBTbG90VmlzaXRvciYpOwogCkBAIC02NDYsMjAgKzY2MywxMCBAQCBwcm90ZWN0ZWQ6CiAg
ICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIFN0cnVjdHVyZUZsYWdzID0gU3RydWN0dXJlSXNJbW1v
cnRhbCB8IEJhc2U6OlN0cnVjdHVyZUZsYWdzOwogCiBwcml2YXRlOgotICAgIGNsYXNzIFdhdGNo
cG9pbnRDbGVhbnVwIDogcHVibGljIFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIgewotICAgIHB1Ymxp
YzoKLSAgICAgICAgV2F0Y2hwb2ludENsZWFudXAoU3ltYm9sVGFibGUqKTsKLSAgICAgICAgdmly
dHVhbCB+V2F0Y2hwb2ludENsZWFudXAoKTsKLSAgICAgICAgCi0gICAgcHJvdGVjdGVkOgotICAg
ICAgICB2aXJ0dWFsIHZvaWQgZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoKSBvdmVycmlkZTsKLQot
ICAgIHByaXZhdGU6Ci0gICAgICAgIFN5bWJvbFRhYmxlKiBtX3N5bWJvbFRhYmxlOwotICAgIH07
Ci0gICAgCiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgU3ltYm9sVGFibGUoVk0mKTsKICAgICB+U3lt
Ym9sVGFibGUoKTsKKyAgICAKKyAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGZpbmlzaENyZWF0
aW9uKFZNJik7CiAKICAgICBNYXAgbV9tYXA7CiAgICAgU2NvcGVPZmZzZXQgbV9tYXhTY29wZU9m
ZnNldDsKQEAgLTY3NCwxMyArNjgxLDExIEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX3VzZXNOb25T
dHJpY3RFdmFsOwogICAgIAogICAgIFdyaXRlQmFycmllcjxTY29wZWRBcmd1bWVudHNUYWJsZT4g
bV9hcmd1bWVudHM7CisgICAgV3JpdGVCYXJyaWVyPEluZmVycmVkVmFsdWU+IG1fc2luZ2xldG9u
U2NvcGU7CiAgICAgCi0gICAgc3RkOjp1bmlxdWVfcHRyPFdhdGNocG9pbnRDbGVhbnVwPiBtX3dh
dGNocG9pbnRDbGVhbnVwOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxMb2NhbFRvRW50cnlWZWM+IG1f
bG9jYWxUb0VudHJ5OwogCiBwdWJsaWM6Ci0gICAgSW5saW5lV2F0Y2hwb2ludFNldCBtX2Z1bmN0
aW9uRW50ZXJlZE9uY2U7Ci0gICAgCiAgICAgbXV0YWJsZSBDb25jdXJyZW50SklUTG9jayBtX2xv
Y2s7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlUHJvZmls
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVQ
cm9maWxlci5jcHAJKHJldmlzaW9uIDE4MjQ5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1R5cGVQcm9maWxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAK
IAogI2luY2x1ZGUgIkluc3BlY3RvclByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgIlR5cGVM
b2NhdGlvbi5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAogbmFtZXNw
YWNlIEpTQyB7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHJldmlz
aW9uIDE4MjQ5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMjM3LDYgKzIzNyw3IEBAIFZNOjpWTShWTVR5cGUgdm1UeXBlLCBIZWFw
VHlwZSBoZWFwVHlwZSkKICAgICB1bmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrU3RydWN0dXJlLnNl
dCgqdGhpcywgVW5saW5rZWRGdW5jdGlvbkNvZGVCbG9jazo6Y3JlYXRlU3RydWN0dXJlKCp0aGlz
LCAwLCBqc051bGwoKSkpOwogICAgIHByb3BlcnR5VGFibGVTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBQ
cm9wZXJ0eVRhYmxlOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CiAgICAg
d2Vha01hcERhdGFTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBXZWFrTWFwRGF0YTo6Y3JlYXRlU3RydWN0
dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOworICAgIGluZmVycmVkVmFsdWVTdHJ1Y3R1cmUuc2V0
KCp0aGlzLCBJbmZlcnJlZFZhbHVlOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgp
KSk7CiAjaWYgRU5BQkxFKFBST01JU0VTKQogICAgIHByb21pc2VEZWZlcnJlZFN0cnVjdHVyZS5z
ZXQoKnRoaXMsIEpTUHJvbWlzZURlZmVycmVkOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpz
TnVsbCgpKSk7CiAgICAgcHJvbWlzZVJlYWN0aW9uU3RydWN0dXJlLnNldCgqdGhpcywgSlNQcm9t
aXNlUmVhY3Rpb246OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkocmV2aXNpb24gMTgyNDk4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uaAkod29ya2luZyBjb3B5KQpAQCAtMjcwLDYgKzI3
MCw3IEBAIHB1YmxpYzoKICAgICBTdHJvbmc8U3RydWN0dXJlPiB1bmxpbmtlZEZ1bmN0aW9uQ29k
ZUJsb2NrU3RydWN0dXJlOwogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHByb3BlcnR5VGFibGVTdHJ1
Y3R1cmU7CiAgICAgU3Ryb25nPFN0cnVjdHVyZT4gd2Vha01hcERhdGFTdHJ1Y3R1cmU7CisgICAg
U3Ryb25nPFN0cnVjdHVyZT4gaW5mZXJyZWRWYWx1ZVN0cnVjdHVyZTsKICNpZiBFTkFCTEUoUFJP
TUlTRVMpCiAgICAgU3Ryb25nPFN0cnVjdHVyZT4gcHJvbWlzZURlZmVycmVkU3RydWN0dXJlOwog
ICAgIFN0cm9uZzxTdHJ1Y3R1cmU+IHByb21pc2VSZWFjdGlvblN0cnVjdHVyZTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3MvaW5mZXItdW5pbml0aWFsaXplZC1jbG9z
dXJlLXZhci5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3Ry
ZXNzL2luZmVyLXVuaW5pdGlhbGl6ZWQtY2xvc3VyZS12YXIuanMJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2luZmVyLXVuaW5pdGlhbGl6ZWQtY2xv
c3VyZS12YXIuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyNiBAQAorZnVuY3Rpb24gZm9v
KHApIHsKKyAgICB2YXIgeDsKKyAgICAKKyAgICBub0lubGluZShmKTsKKyAgICAKKyAgICBpZiAo
cCkgeworICAgICAgICB2YXIgZiA9IGZ1bmN0aW9uKCkgeyByZXR1cm4geDsgfQorICAgICAgICAK
KyAgICAgICAgZm9vKGZhbHNlKTsKKyAgICAgICAgCisgICAgICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgMTAwMDA7ICsraSkgeworICAgICAgICAgICAgdmFyIHJlc3VsdCA9IGYoKTsKKyAgICAgICAg
ICAgIGlmIChyZXN1bHQgIT09IHZvaWQgMCkKKyAgICAgICAgICAgICAgICB0aHJvdyAiRXJyb3I6
IGJhZCByZXN1bHQgKDEpOiAiICsgcmVzdWx0OworICAgICAgICB9CisgICAgICAgIAorICAgICAg
ICB4ID0gNDM7CisgICAgICAgIAorICAgICAgICB2YXIgcmVzdWx0ID0gZigpOworICAgICAgICBp
ZiAocmVzdWx0ICE9IDQzKQorICAgICAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0ICgy
KTogIiArIHJlc3VsdDsKKyAgICB9IGVsc2UKKyAgICAgICAgeCA9IDQyOworfQorCitmb28odHJ1
ZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3NpbmdsZXRvbi1z
Y29wZS10aGVuLW92ZXJ3cml0ZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvdGVzdHMvc3RyZXNzL3NpbmdsZXRvbi1zY29wZS10aGVuLW92ZXJ3cml0ZS5qcwkocmV2aXNp
b24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3Mvc2luZ2xldG9uLXNj
b3BlLXRoZW4tb3ZlcndyaXRlLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjAgQEAKK2Z1
bmN0aW9uIGZvbyhhKSB7CisgICAgdmFyIHggPSBhICsgMTsKKyAgICB2YXIgZiA9IGZ1bmN0aW9u
KGEpIHsKKyAgICAgICAgcmV0dXJuIHggKyBhOworICAgIH07CisgICAgbm9JbmxpbmUoZik7Cisg
ICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsgKytpKSB7CisgICAgICAgIHZhciByZXN1bHQg
PSBmKGkpOworICAgICAgICBpZiAocmVzdWx0ICE9IGEgKyAxICsgaSkKKyAgICAgICAgICAgIHRo
cm93ICJFcnJvcjogYmFkIHJlc3VsdDogIiArIHJlc3VsdDsKKyAgICB9CisgICAgeCA9IDk5OTsK
KyAgICB2YXIgcmVzdWx0ID0gZigxKTsKKyAgICBpZiAocmVzdWx0ICE9IDk5OSArIDEpCisgICAg
ICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdDogIiArIHJlc3VsdDsKK30KKworbm9JbmxpbmUo
Zm9vKTsKK2ZvciAodmFyIGkgPSAwOyBpIDwgMzsgKytpKQorICAgIGZvbyg0MiArIGkpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9zaW5nbGV0b24tc2NvcGUtdGhl
bi1yZWFsbG9jLWFuZC1vdmVyd3JpdGUuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3Rlc3RzL3N0cmVzcy9zaW5nbGV0b24tc2NvcGUtdGhlbi1yZWFsbG9jLWFuZC1vdmVy
d3JpdGUuanMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3Ry
ZXNzL3NpbmdsZXRvbi1zY29wZS10aGVuLXJlYWxsb2MtYW5kLW92ZXJ3cml0ZS5qcwkod29ya2lu
ZyBjb3B5KQpAQCAtMCwwICsxLDIwIEBACitmdW5jdGlvbiBmb28oYSkgeworICAgIHZhciB4ID0g
YSArIDE7CisgICAgcmV0dXJuIGZ1bmN0aW9uKGEpIHsKKyAgICAgICAgcmV0dXJuIHggKyBhOwor
ICAgIH07Cit9CisKK3ZhciBmID0gZm9vKDQyKTsKK25vSW5saW5lKGYpOworCitmb3IgKHZhciBp
ID0gMDsgaSA8IDEwMDAwOyArK2kpIHsKKyAgICB2YXIgcmVzdWx0ID0gZihpKTsKKyAgICBpZiAo
cmVzdWx0ICE9IDQyICsgMSArIGkpCisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdDog
IiArIHJlc3VsdDsKK30KKwordmFyIGYgPSBmb28oNDMpOwordmFyIHJlc3VsdCA9IGYoMSk7Citp
ZiAocmVzdWx0ICE9IDQzICsgMSArIDEpCisgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0OiAi
ICsgcmVzdWx0OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9zaW5n
bGV0b24tc2NvcGUtdGhlbi1yZWFsbG9jLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS90ZXN0cy9zdHJlc3Mvc2luZ2xldG9uLXNjb3BlLXRoZW4tcmVhbGxvYy5qcwkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3Mvc2luZ2xldG9u
LXNjb3BlLXRoZW4tcmVhbGxvYy5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIwIEBACitm
dW5jdGlvbiBmb28oYSkgeworICAgIHZhciB4ID0gYSArIDE7CisgICAgcmV0dXJuIGZ1bmN0aW9u
KGEpIHsKKyAgICAgICAgcmV0dXJuIHggKz0gYTsKKyAgICB9OworfQorCit2YXIgZiA9IGZvbyg0
Mik7Citub0lubGluZShmKTsKKworZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsgKytpKSB7Cisg
ICAgdmFyIHJlc3VsdCA9IGYoMSk7CisgICAgaWYgKHJlc3VsdCAhPSA0MiArIDEgKyBpICsgMSkK
KyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0OiAiICsgcmVzdWx0OworfQorCit2YXIg
ZiA9IGZvbyg0Myk7Cit2YXIgcmVzdWx0ID0gZigxKTsKK2lmIChyZXN1bHQgIT0gNDMgKyAxICsg
MSkKKyAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQ6ICIgKyByZXN1bHQ7CkluZGV4OiBMYXlv
dXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShy
ZXZpc2lvbiAxODI0OTgpCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSwyMCBAQAorMjAxNS0wNC0wNyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUu
Y29tPgorCisgICAgICAgIEpTQyBzaG91bGQgZGV0ZWN0IHNpbmdsZXRvbiBmdW5jdGlvbnMKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MzIzMgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE1pY2hhZWwgU2Fib2ZmLgorCisgICAgICAgICoganMvcmVncmVz
cy9jcmVhdGUtbG90cy1vZi1mdW5jdGlvbnMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAg
KiBqcy9yZWdyZXNzL2NyZWF0ZS1sb3RzLW9mLWZ1bmN0aW9ucy5odG1sOiBBZGRlZC4KKyAgICAg
ICAgKiBqcy9yZWdyZXNzL25vLWlubGluZS1jb25zdHJ1Y3Rvci1leHBlY3RlZC50eHQ6IEFkZGVk
LgorICAgICAgICAqIGpzL3JlZ3Jlc3Mvbm8taW5saW5lLWNvbnN0cnVjdG9yLmh0bWw6IEFkZGVk
LgorICAgICAgICAqIGpzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2NyZWF0ZS1sb3RzLW9mLWZ1bmN0
aW9ucy5qczogQWRkZWQuCisgICAgICAgICoganMvcmVncmVzcy9zY3JpcHQtdGVzdHMvbm8taW5s
aW5lLWNvbnN0cnVjdG9yLmpzOiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL3NjcmlwdC10
ZXN0cy9zaW5nbGV0b24tc2NvcGUuanM6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3Mvc2lu
Z2xldG9uLXNjb3BlLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICoganMvcmVncmVzcy9z
aW5nbGV0b24tc2NvcGUuaHRtbDogQWRkZWQuCisKIDIwMTUtMDQtMDcgIE1hdHRoZXcgTWlybWFu
ICA8bW1pcm1hbkBhcHBsZS5jb20+CiAKICAgICAgICAgU291cmNlIGFuZCBzdGFjayBpbmZvcm1h
dGlvbiBzaG91bGQgZ2V0IGFwcGVuZGVkIG9ubHkgdG8gbmF0aXZlIGVycm9ycwpJbmRleDogTGF5
b3V0VGVzdHMvanMvcmVncmVzcy9jcmVhdGUtbG90cy1vZi1mdW5jdGlvbnMtZXhwZWN0ZWQudHh0
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvY3JlYXRlLWxvdHMtb2YtZnVu
Y3Rpb25zLWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jl
c3MvY3JlYXRlLWxvdHMtb2YtZnVuY3Rpb25zLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpA
QCAtMCwwICsxLDEwIEBACitKU1JlZ3Jlc3MvY3JlYXRlLWxvdHMtb2YtZnVuY3Rpb25zCisKK09u
IHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxv
d2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIG5vIGV4Y2VwdGlvbiB0aHJvd24KK1BB
U1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBM
YXlvdXRUZXN0cy9qcy9yZWdyZXNzL2NyZWF0ZS1sb3RzLW9mLWZ1bmN0aW9ucy5odG1sCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvY3JlYXRlLWxvdHMtb2YtZnVuY3Rpb25z
Lmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2NyZWF0ZS1sb3Rz
LW9mLWZ1bmN0aW9ucy5odG1sCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIgQEAKKzwhRE9D
VFlQRSBIVE1MIFBVQkxJQyAiLS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+
Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4K
KzwvaGVhZD4KKzxib2R5PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNzLXBy
ZS5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL2NyZWF0ZS1sb3RzLW9m
LWZ1bmN0aW9ucy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3Jl
Z3Jlc3MtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pz
LXRlc3QtcG9zdC5qcyI+PC9zY3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRU
ZXN0cy9qcy9yZWdyZXNzL25vLWlubGluZS1jb25zdHJ1Y3Rvci1leHBlY3RlZC50eHQKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9uby1pbmxpbmUtY29uc3RydWN0b3ItZXhw
ZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9uby1pbmxp
bmUtY29uc3RydWN0b3ItZXhwZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAg
QEAKK0pTUmVncmVzcy9uby1pbmxpbmUtY29uc3RydWN0b3IKKworT24gc3VjY2VzcywgeW91IHdp
bGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09N
UExFVEUiLgorCisKK1BBU1Mgbm8gZXhjZXB0aW9uIHRocm93bgorUEFTUyBzdWNjZXNzZnVsbHlQ
YXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2pzL3Jl
Z3Jlc3Mvbm8taW5saW5lLWNvbnN0cnVjdG9yLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvanMvcmVncmVzcy9uby1pbmxpbmUtY29uc3RydWN0b3IuaHRtbAkocmV2aXNpb24gMCkKKysr
IExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvbm8taW5saW5lLWNvbnN0cnVjdG9yLmh0bWwJKHdvcmtp
bmcgY29weSkKQEAgLTAsMCArMSwxMiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRG
Ly9EVEQgSFRNTC8vRU4iPgorPGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNv
dXJjZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0
IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3JlZ3Jlc3MtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQg
c3JjPSJzY3JpcHQtdGVzdHMvbm8taW5saW5lLWNvbnN0cnVjdG9yLmpzIj48L3NjcmlwdD4KKzxz
Y3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcmVncmVzcy1wb3N0LmpzIj48L3NjcmlwdD4KKzxz
Y3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwv
Ym9keT4KKzwvaHRtbD4KSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2luZ2xldG9uLXNj
b3BlLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3Np
bmdsZXRvbi1zY29wZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9q
cy9yZWdyZXNzL3NpbmdsZXRvbi1zY29wZS1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwxMCBAQAorSlNSZWdyZXNzL3NpbmdsZXRvbi1zY29wZQorCitPbiBzdWNjZXNzLCB5
b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVT
VCBDT01QTEVURSIuCisKKworUEFTUyBubyBleGNlcHRpb24gdGhyb3duCitQQVNTIHN1Y2Nlc3Nm
dWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMv
anMvcmVncmVzcy9zaW5nbGV0b24tc2NvcGUuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9qcy9yZWdyZXNzL3NpbmdsZXRvbi1zY29wZS5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0
VGVzdHMvanMvcmVncmVzcy9zaW5nbGV0b24tc2NvcGUuaHRtbAkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDEyIEBACis8IURPQ1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9F
TiI+Cis8aHRtbD4KKzxoZWFkPgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0
LXByZS5qcyI+PC9zY3JpcHQ+Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSIuLi8uLi9y
ZXNvdXJjZXMvcmVncmVzcy1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InNjcmlwdC10
ZXN0cy9zaW5nbGV0b24tc2NvcGUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jl
c291cmNlcy9yZWdyZXNzLXBvc3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jl
c291cmNlcy9qcy10ZXN0LXBvc3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRl
eDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvY3JlYXRlLWxvdHMtb2YtZnVu
Y3Rpb25zLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRl
c3RzL2NyZWF0ZS1sb3RzLW9mLWZ1bmN0aW9ucy5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRl
c3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2NyZWF0ZS1sb3RzLW9mLWZ1bmN0aW9ucy5qcwko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyIEBACitmdW5jdGlvbiBmb28oKSB7CisgICAgdmFy
IHJlc3VsdCA9IDA7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDA7ICsraSkKKyAgICAgICAg
cmVzdWx0ICs9IChmdW5jdGlvbigpIHsgcmV0dXJuIGkgfSkoKTsKKyAgICByZXR1cm4gcmVzdWx0
OworfQorCitmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwOyArK2kpIHsKKyAgICB2YXIgcmVzdWx0
ID0gZm9vKCk7CisgICAgaWYgKHJlc3VsdCAhPSA0OTUwKQorICAgICAgICB0aHJvdyAiRXJyb3I6
IGJhZCByZXN1bHQ6ICIgKyByZXN1bHQ7Cit9CkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNz
L3NjcmlwdC10ZXN0cy9uby1pbmxpbmUtY29uc3RydWN0b3IuanMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5
b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvbm8taW5saW5lLWNvbnN0cnVjdG9yLmpz
CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvbm8t
aW5saW5lLWNvbnN0cnVjdG9yLmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTMgQEAKK2Z1
bmN0aW9uIEZvbygpIHsKKyAgICB2YXIgbyA9IHtmOntmOntmOntmOjQyfX19fTsKKyAgICB0aGlz
LmYgPSA0MjsKK30KKworbm9JbmxpbmUoRm9vKTsKKworZm9yICh2YXIgaSA9IDA7IGkgPCAzMDAw
MDAwOyArK2kpIHsKKyAgICB2YXIgcmVzdWx0ID0gbmV3IEZvbygpOworICAgIGlmIChyZXN1bHQu
ZiAhPSA0MikKKyAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0OiAiICsgcmVzdWx0LmY7
Cit9CisKSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL3NpbmdsZXRv
bi1zY29wZS5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10
ZXN0cy9zaW5nbGV0b24tc2NvcGUuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9y
ZWdyZXNzL3NjcmlwdC10ZXN0cy9zaW5nbGV0b24tc2NvcGUuanMJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwxNiBAQAorZnVuY3Rpb24gZm9vKCkgeworICAgIHZhciB4ID0gNDI7CisgICAgdmFy
IHkgPSA0MzsKKyAgICByZXR1cm4gZnVuY3Rpb24oeikgeworICAgICAgICB2YXIgcmVzdWx0ID0g
eCArIHk7CisgICAgICAgIHggKz0gejsKKyAgICAgICAgeSArPSB6OworICAgICAgICByZXR1cm4g
cmVzdWx0OworICAgIH0KK30KKwordmFyIGYgPSBmb28oKTsKK25vSW5saW5lKGYpOworCitmb3Ig
KHZhciBpID0gMDsgaSA8IDEwMDAwMDAwOyArK2kpCisgICAgZigxKTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>250392</attachid>
            <date>2015-04-08 16:05:13 -0700</date>
            <delta_ts>2015-04-08 20:43:12 -0700</delta_ts>
            <desc>more fixes</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>169197</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTgyNTU5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI1NyBA
QAorMjAxNS0wNC0wOCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEpTQyBzaG91bGQgZGV0ZWN0IHNpbmdsZXRvbiBmdW5jdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MzIzMgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEhKS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgc3RhcnRlZCBvdXQg
YXMgYW4gYXR0ZW1wdCB0byBtYWtlIGNvbnN0cnVjdG9ycyBmYXN0ZXIgYnkgZGV0ZWN0aW5nIHdo
ZW4gYSBjb25zdHJ1Y3RvciBpcyBhCisgICAgICAgIHNpbmdsZXRvbi4gVGhlIGlkZWEgaXMgdGhh
dCBlYWNoIEZ1bmN0aW9uRXhlY3V0YWJsZSBoYXMgYSBWYXJpYWJsZVdhdGNocG9pbnRTZXQgLSBh
IHdhdGNocG9pbnQKKyAgICAgICAgYWxvbmcgd2l0aCBhbiBpbmZlcnJlZCB2YWx1ZSAtIHRoYXQg
ZGV0ZWN0cyBpZiBvbmx5IG9uZSBKU0Z1bmN0aW9uIGhhcyBiZWVuIGFsbG9jYXRlZCBmb3IgdGhh
dAorICAgICAgICBleGVjdXRhYmxlLCBhbmQgaWYgc28sIHdoYXQgdGhhdCBKU0Z1bmN0aW9uIGlz
LiBUaGVuLCBpbnNpZGUgdGhlIGNvZGUgZm9yIHRoZSBGdW5jdGlvbkV4ZWN1dGFibGUsCisgICAg
ICAgIGlmIHRoZSB3YXRjaHBvaW50IHNldCBoYXMgYW4gaW5mZXJyZWQgdmFsdWUgKGkuZS4gaXQn
cyBiZWVuIGluaXRpYWxpemVkIGFuZCBpdCBpcyBzdGlsbCB2YWxpZCksCisgICAgICAgIHdlIGNh
biBjb25zdGFudC1mb2xkIEdldENhbGxlZS4KKyAgICAgICAgCisgICAgICAgIFVuZm9ydHVuYXRl
bHksIGNvbnN0cnVjdG9ycyBkb24ndCB1c2UgR2V0Q2FsbGVlIGFueW1vcmUsIHNvIHRoYXQgZGlk
bid0IHBhbiBvdXQuIEJ1dCBpbiB0aGUKKyAgICAgICAgcHJvY2VzcyBJIHJlYWxpemVkIGEgYnVu
Y2ggb2YgdGhpbmdzOgorICAgICAgICAKKyAgICAgICAgLSBUaGlzIGFsbG93cyB1cyB0byBjb21w
bGV0ZWx5IGVsaW1pbmF0ZSB0aGUgR2V0Q2FsbGVlL0dldFNjb3BlIHNlcXVlbmNlIHRoYXQgd2Ug
c3RpbGwgc29tZXRpbWVzCisgICAgICAgICAgaGFkIGV2ZW4gaW4gY29kZSB3aGVyZSBvdXIgc2lu
Z2xldG9uLWNsb3N1cmUgZGV0ZWN0aW9uIHdvcmtlZC4gVGhhdCdzIGJlY2F1c2Ugc2luZ2xldG9u
LWNsb3N1cmUKKyAgICAgICAgICBpbmZlcmVuY2Ugd29ya2VkIGF0IHRoZSBvcF9yZXNvbHZlX3Nj
b3BlLCBhbmQgdGhhdCBvcF9yZXNvbHZlX3Njb3BlIHN0aWxsIG5lZWRlZCB0byBrZWVwIGFsaXZl
CisgICAgICAgICAgdGhlIGluY29taW5nIHNjb3BlIGluIGNhc2Ugd2UgT1NSIGV4aXQuIEJ1dCBi
eSBjb25zdGFudC1mb2xkaW5nIEdldENhbGxlZSwgdGhhdCBzZXF1ZW5jZQorICAgICAgICAgIGRp
c2FwcGVhcnMuIE9TUiBleGl0IGNhbiByZW1hdGVyaWFsaXplIHRoZSBjYWxsZWUgb3IgdGhlIHNj
b3BlIGJ5IGp1c3Qga25vd2luZyB0aGVpciBjb25zdGFudAorICAgICAgICAgIHZhbHVlcy4KKyAg
ICAgICAgICAKKyAgICAgICAgLSBTaW5nbGV0b24gZGV0ZWN0aW9uIHNob3VsZCBiZSBhIHJldXNh
YmxlIHRoaW5nLiBTbywgSSBnb3QgcmlkIG9mIFZhcmlhYmxlV2F0Y2hwb2ludFNldCBhbmQKKyAg
ICAgICAgICBjcmVhdGVkIEluZmVycmVkVmFsdWUuIEluZmVycmVkVmFsdWUgaXMgYSBjZWxsLCBz
byBpdCBjYW4gaGFuZGxlIGl0cyBvd24gR0MgbWFnaWMuCisgICAgICAgICAgRnVuY3Rpb25FeGVj
dXRhYmxlIHVzZXMgYW4gSW5mZXJyZWRWYWx1ZSB0byB0ZWxsIHlvdSBhYm91dCBzaW5nbGV0b24g
SlNGdW5jdGlvbnMuCisgICAgICAgIAorICAgICAgICAtIFRoZSBvbGQgc2luZ2xldG9uLXNjb3Bl
IGRldGVjdGlvbiBpbiBvcF9yZXNvbHZlX3Njb3BlIGlzIGJldHRlciBhYnN0cmFjdGVkIGFzIGEg
U3ltYm9sVGFibGUKKyAgICAgICAgICBkZXRlY3RpbmcgYSBzaW5nbGV0b24gSlNTeW1ib2xUYWJs
ZU9iamVjdC4gU28sIFN5bWJvbFRhYmxlIHVzZXMgYW4gSW5mZXJyZWRWYWx1ZSB0byB0ZWxsIHlv
dQorICAgICAgICAgIGFib3V0IHNpbmdsZXRvbiBKU1N5bWJvbFRhYmxlT2JqZWN0cy4gSXQncyBj
dXJpb3VzIHRoYXQgd2Ugd2FudCB0byBoYXZlIHNpbmdsZXRvbiBkZXRlY3Rpb24gaW4KKyAgICAg
ICAgICBTeW1ib2xUYWJsZSBpZiB3ZSBhbHJlYWR5IGhhdmUgaXQgaW4gRnVuY3Rpb25FeGVjdXRh
YmxlLiBUaGlzIGNvbWVzIGludG8gcGxheSBpbiB0d28gd2F5cy4KKyAgICAgICAgICBGaXJzdCwg
aXQgbWVhbnMgdGhhdCB0aGUgREZHIGNhbiByZWFsaXplIHNvb25lciB0aGF0IGEgcmVzb2x2ZV9z
Y29wZSByZXNvbHZlcyB0byBhIGNvbnN0YW50CisgICAgICAgICAgc2NvcGUuIFRocyBzYXZlcyBj
b21waWxlIHRpbWVzIGFuZCBpdCBhbGxvd3MgcHJlZGljdGlvbiBwcm9wYWdhdGlvbiB0byBiZW5l
Zml0IGZyb20gdGhlCisgICAgICAgICAgY29uc3RhbnQgZm9sZGluZy4gU2Vjb25kLCBpdCBtZWFu
cyB0aGF0IHdlIHdpbGwgZGV0ZWN0IGEgc2luZ2x0b24gc2NvcGUgZXZlbiBpZiBpdCBpcworICAg
ICAgICAgIHJlZmVyZW5jZWQgZnJvbSBhIG5vbi1zaW5nbGV0b24gc2NvcGUgdGhhdCBpcyBuZWFy
ZXIgdG8gdXMgaW4gdGhlIHNjb3BlIGNoYWluLiBUaGlzIHJlZmFjdG9yaW5nCisgICAgICAgICAg
YWxsb3dzIHVzIHRvIGVsaW1pbmF0ZSB0aGUgZnVuY3Rpb24gcmVlbnRyeSB3YXRjaHBvaW50Lgor
ICAgICAgICAKKyAgICAgICAgLSBUaGlzIGFsbG93cyB1cyB0byB1c2UgYSBub3JtYWwgV2F0Y2hw
b2ludFNldCwgaW5zdGVhZCBvZiBhIFZhcmlhYmxlV2F0Y2hwb2ludFNldCwgZm9yIGluZmVycmlu
ZworICAgICAgICAgIGNvbnN0YW50IHZhbHVlcyBpbiBzY29wZXMuIFByZXZpb3VzbHkgd2hlbiB0
aGUgREZHIGluZmVycmVkIHRoYXQgYSBjbG9zdXJlIHZhcmlhYmxlIHdhcworICAgICAgICAgIGNv
bnN0YW50LCBpdCB3b3VsZG4ndCBrbm93IHdoaWNoIGNsb3N1cmUgdGhhdCB2YXJpYWJsZSB3YXMg
aW4gYW5kIHNvIGl0IGNvdWxkbid0IGp1c3QgbG9hZCB0aGF0CisgICAgICAgICAgdmFsdWUuIEJ1
dCBub3cgd2UgYXJlIGZpcnN0IGluZmVycmluZyB0aGF0IHRoZSBmdW5jdGlvbiBpcyBhIHNpbmds
ZXRvbiwgd2hpY2ggbWVhbnMgdGhhdCB3ZQorICAgICAgICAgIGtub3cgZXhhY3RseSB3aGF0IHNj
b3BlIGl0IHBvaW50cyB0bywgYW5kIHdlIGNhbiBsb2FkIHRoZSB2YWx1ZSBmcm9tIHRoZSBzY29w
ZS4gVXNpbmcgYQorICAgICAgICAgIFdhdGNocG9pbnRTZXQgaW5zdGVhZCBvZiBhIFZhcmlhYmxl
V2F0Y2hwb2ludFNldCBzYXZlcyBzb21lIG1lbW9yeSBhbmQgc2ltcGxpZmllcyBhIGJ1bmNoIG9m
CisgICAgICAgICAgY29kZS4gVGhpcyBhbHNvIG1lYW5zIHRoYXQgbm93LCB0aGUgb25seSB1c2Vy
IG9mIFZhcmlhYmxlV2F0Y2hwb2ludFNldCBpcyBGdW5jdGlvbkV4ZWN1dGFibGUuCisgICAgICAg
ICAgSSd2ZSB0d2Vha2VkIHRoZSBjb2RlIG9mIFZhcmlhYmxlV2F0Y2hwb2ludFNldCB0byByZWR1
Y2UgaXRzIHBvd2VyIHRvIGp1c3QgYmUgd2hhdAorICAgICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJs
ZSB3YW50cy4KKyAgICAgICAgCisgICAgICAgIFRoaXMgYWxzbyBoYXMgdGhlIGVmZmVjdCBvZiBz
aW1wbGlmeWluZyB0aGUgaW1wbGVtZW50YXRpb24gb2YgYmxvY2sgc2NvcGluZy4gUHJpb3IgdG8g
dGhpcworICAgICAgICBjaGFuZ2UsIGJsb2NrIHNjb3Bpbmcgd291bGQgaGFkIGhhZCB0byBoYXZl
IHNvbWUgc3RvcnkgZm9yIHRoZSBmdW5jdGlvbiByZWVudHJ5IHdhdGNocG9pbnQgb24gYW55Cisg
ICAgICAgIG5lc3RlZCBzeW1ib2wgdGFibGUuIFRoYXQncyB0b3RhbGx5IHdlaXJkIHRvIHRoaW5r
IGFib3V0OyBpdCdzIG5vdCByZWFsbHkgYSBmdW5jdGlvbiByZWVudHJ5IGJ1dAorICAgICAgICBh
IHNjb3BlIHJlZW50cnkuIE5vdyB3ZSBkb24ndCBoYXZlIHRvIHRoaW5rIGFib3V0IHRoaXMuIENv
bnN0YW50IGluZmVyZW5jZSBvbiBuZXN0ZWQgc2NvcGVzIHdpbGwKKyAgICAgICAgImp1c3Qgd29y
ayI6IGlmIHdlIHByb3ZlIHRoYXQgd2Uga25vdyB0aGUgY29uc3RhbnQgdmFsdWUgb2YgdGhlIHNj
b3BlIHRoZW4gdGhlIG1hY2hpbmVyeSBraWNrcworICAgICAgICBpbiwgb3RoZXJ3aXNlIGl0IGRv
ZXNuJ3QuCisgICAgICAgIAorICAgICAgICBUaGlzIGlzIGEgc21hbGwgT2N0YW5lIGFuZCBBc21C
ZW5jaCBzcGVlZC11cC4gQXNtQmVuY2ggc2VlcyAxJSB3aGlsZSBPY3RhbmUgc2VlcyBzdWItMSUu
CisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52
Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2o6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZUxp
c3QuanNvbjoKKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZVVzZURlZi5oOgorICAgICAgICAo
SlNDOjpjb21wdXRlVXNlc0ZvckJ5dGVjb2RlT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6Y29tcHV0
ZURlZnNGb3JCeXRlY29kZU9mZnNldCk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNw
cDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpkdW1wQnl0ZWNvZGUpOgorICAgICAgICAoSlND
OjpDb2RlQmxvY2s6OkNvZGVCbG9jayk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZmluYWxp
emVVbmNvbmRpdGlvbmFsbHkpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnZhbHVlUHJvZmls
ZUZvckJ5dGVjb2RlT2Zmc2V0KToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suaDoKKyAg
ICAgICAgKEpTQzo6Q29kZUJsb2NrOjp2YWx1ZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNldCk6IERl
bGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUvQ29kZU9yaWdpbi5jcHA6CisgICAgICAgIChKU0M6
OklubGluZUNhbGxGcmFtZTo6Y2FsbGVlQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpJbmxpbmVD
YWxsRnJhbWU6OnZpc2l0QWdncmVnYXRlKToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlT3JpZ2lu
Lmg6CisgICAgICAgIChKU0M6OklubGluZUNhbGxGcmFtZTo6Y2FsbGVlQ29uc3RhbnQpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpJbmxpbmVDYWxsRnJhbWU6OnZpc2l0QWdncmVnYXRlKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9JbnN0cnVjdGlvbi5oOgorICAgICAgICAqIGJ5dGVj
b2RlL1ZhcmlhYmxlV2F0Y2hwb2ludFNldC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogYnl0ZWNv
ZGUvVmFyaWFibGVXYXRjaHBvaW50U2V0Lmg6IFJlbW92ZWQuCisgICAgICAgICogYnl0ZWNvZGUv
VmFyaWFibGVXYXRjaHBvaW50U2V0SW5saW5lcy5oOiBSZW1vdmVkLgorICAgICAgICAqIGJ5dGVj
b2RlL1ZhcmlhYmxlV3JpdGVGaXJlRGV0YWlsLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OlZh
cmlhYmxlV3JpdGVGaXJlRGV0YWlsOjpkdW1wKToKKyAgICAgICAgKEpTQzo6VmFyaWFibGVXcml0
ZUZpcmVEZXRhaWw6OnRvdWNoKToKKyAgICAgICAgKiBieXRlY29kZS9WYXJpYWJsZVdyaXRlRmly
ZURldGFpbC5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6VmFyaWFibGVXcml0ZUZpcmVEZXRhaWw6
OlZhcmlhYmxlV3JpdGVGaXJlRGV0YWlsKToKKyAgICAgICAgKiBieXRlY29kZS9XYXRjaHBvaW50
Lmg6CisgICAgICAgIChKU0M6OldhdGNocG9pbnRTZXQ6OnN0YXRlT25NYWluVGhyZWFkKToKKyAg
ICAgICAgKEpTQzo6V2F0Y2hwb2ludFNldDo6c3RhcnRXYXRjaGluZyk6CisgICAgICAgIChKU0M6
OldhdGNocG9pbnRTZXQ6OmZpcmVBbGwpOgorICAgICAgICAoSlNDOjpXYXRjaHBvaW50U2V0Ojp0
b3VjaCk6CisgICAgICAgIChKU0M6OldhdGNocG9pbnRTZXQ6OmludmFsaWRhdGUpOgorICAgICAg
ICAoSlNDOjpJbmxpbmVXYXRjaHBvaW50U2V0OjpzdGF0ZU9uTWFpblRocmVhZCk6CisgICAgICAg
IChKU0M6OklubGluZVdhdGNocG9pbnRTZXQ6OnN0YXRlKToKKyAgICAgICAgKEpTQzo6SW5saW5l
V2F0Y2hwb2ludFNldDo6aGFzQmVlbkludmFsaWRhdGVkKToKKyAgICAgICAgKEpTQzo6SW5saW5l
V2F0Y2hwb2ludFNldDo6aW52YWxpZGF0ZSk6CisgICAgICAgIChKU0M6OklubGluZVdhdGNocG9p
bnRTZXQ6OnRvdWNoKToKKyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3Iu
Y3BwOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3Ip
OgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oOgorICAgICAg
ICAoSlNDOjpERkc6OkFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVj
dXRlRWZmZWN0cyk6CisgICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAg
ICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Z2V0KToKKyAgICAgICAgKEpTQzo6REZHOjpC
eXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQ
YXJzZXI6OmdldFNjb3BlKTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHQ2FwYWJpbGl0aWVz
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpjYXBhYmlsaXR5TGV2ZWwpOgorICAgICAgICAqIGRm
Zy9ERkdDbG9iYmVyaXplLmg6CisgICAgICAgIChKU0M6OkRGRzo6Y2xvYmJlcml6ZSk6CisgICAg
ICAgICogZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
SW5mZXJyZWRWYWx1ZUFkYXB0b3I6OmFkZCk6CisgICAgICAgIChKU0M6OkRGRzo6RGVzaXJlZFdh
dGNocG9pbnRzOjphZGRMYXppbHkpOgorICAgICAgICAoSlNDOjpERkc6OkRlc2lyZWRXYXRjaHBv
aW50czo6cmVhbGx5QWRkKToKKyAgICAgICAgKEpTQzo6REZHOjpEZXNpcmVkV2F0Y2hwb2ludHM6
OmFyZVN0aWxsVmFsaWQpOgorICAgICAgICAqIGRmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuaDoK
KyAgICAgICAgKEpTQzo6REZHOjpJbmZlcnJlZFZhbHVlQWRhcHRvcjo6aGFzQmVlbkludmFsaWRh
dGVkKToKKyAgICAgICAgKEpTQzo6REZHOjpEZXNpcmVkV2F0Y2hwb2ludHM6OmlzV2F0Y2hlZCk6
CisgICAgICAgICogZGZnL0RGR0dyYXBoLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6
ZHVtcCk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OnRyeUdldENvbnN0YW50Q2xvc3VyZVZh
cik6CisgICAgICAgICogZGZnL0RGR05vZGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpo
YXNXYXRjaHBvaW50U2V0KToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjp3YXRjaHBvaW50U2V0
KToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNWYXJpYWJsZVdhdGNocG9pbnRTZXQpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OnZhcmlhYmxlV2F0Y2hwb2ludFNldCk6
IERlbGV0ZWQuCisgICAgICAgICogZGZnL0RGR09wZXJhdGlvbnMuY3BwOgorICAgICAgICAqIGRm
Zy9ERkdPcGVyYXRpb25zLmg6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU5ld0Z1bmN0aW9uKToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNyZWF0ZUFjdGl2YXRp
b24pOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlTm90aWZ5V3Jp
dGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjpjYWxsT3BlcmF0aW9uKToKKyAgICAgICAgKiBkZmcvREZHU3Bl
Y3VsYXRpdmVKSVQzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RG
R1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2UuY3BwOgorICAgICAgICAqIGZ0bC9GVExJbnRyaW5zaWNS
ZXBvc2l0b3J5Lmg6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcDoKKyAgICAg
ICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUNyZWF0ZUFjdGl2YXRpb24pOgor
ICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlTmV3RnVuY3Rpb24pOgor
ICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlTm90aWZ5V3JpdGUpOgor
ICAgICAgICAqIGludGVycHJldGVyL0ludGVycHJldGVyLmNwcDoKKyAgICAgICAgKEpTQzo6U3Rh
Y2tGcmFtZTo6ZnJpZW5kbHlTb3VyY2VVUkwpOgorICAgICAgICAoSlNDOjpTdGFja0ZyYW1lOjpm
cmllbmRseUZ1bmN0aW9uTmFtZSk6CisgICAgICAgICogaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIu
aDoKKyAgICAgICAgKEpTQzo6U3RhY2tGcmFtZTo6ZnJpZW5kbHlTb3VyY2VVUkwpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpTdGFja0ZyYW1lOjpmcmllbmRseUZ1bmN0aW9uTmFtZSk6IERlbGV0
ZWQuCisgICAgICAgICogaml0L0pJVC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdE5vdGlm
eVdyaXRlKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKToKKyAg
ICAgICAgKiBqaXQvSklULmg6CisgICAgICAgICogaml0L0pJVE9wY29kZXMuY3BwOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfdG91Y2hfZW50cnkpOiBEZWxldGVkLgorICAgICAgICAqIGpp
dC9KSVRPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5oOgorICAg
ICAgICAqIGppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dFB1dEdsb2JhbFZhcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFB1dENsb3N1cmVWYXIpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXROb3RpZnlXcml0ZSk6IERlbGV0ZWQuCisgICAgICAgICog
aml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRQ
dXRHbG9iYWxWYXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRQdXRDbG9zdXJlVmFyKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0Tm90aWZ5V3JpdGUpOiBEZWxldGVkLgorICAgICAgICAqIGxs
aW50L0xMSW50U2xvd1BhdGhzLmNwcDoKKyAgICAgICAgKEpTQzo6TExJbnQ6OkxMSU5UX1NMT1df
UEFUSF9ERUNMKToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbToKKyAg
ICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtOgorICAgICAgICAqIGxs
aW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc206CisgICAgICAgICogcnVudGltZS9Db21tb25T
bG93UGF0aHMuY3BwOgorICAgICAgICAoSlNDOjpTTE9XX1BBVEhfREVDTCk6IERlbGV0ZWQuCisg
ICAgICAgICogcnVudGltZS9Db21tb25TbG93UGF0aHMuaDoKKyAgICAgICAgKiBydW50aW1lL0V4
ZWN1dGFibGUuY3BwOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFibGU6OmZpbmlzaENy
ZWF0aW9uKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25FeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVu
KToKKyAgICAgICAgKiBydW50aW1lL0V4ZWN1dGFibGUuaDoKKyAgICAgICAgKEpTQzo6RnVuY3Rp
b25FeGVjdXRhYmxlOjpzaW5nbGV0b25GdW5jdGlvbik6CisgICAgICAgICogcnVudGltZS9JbmZl
cnJlZFZhbHVlLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkluZmVycmVkVmFsdWU6OmNyZWF0
ZSk6CisgICAgICAgIChKU0M6OkluZmVycmVkVmFsdWU6OmRlc3Ryb3kpOgorICAgICAgICAoSlND
OjpJbmZlcnJlZFZhbHVlOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpJbmZlcnJl
ZFZhbHVlOjp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6SW5mZXJyZWRWYWx1ZTo6SW5m
ZXJyZWRWYWx1ZSk6CisgICAgICAgIChKU0M6OkluZmVycmVkVmFsdWU6On5JbmZlcnJlZFZhbHVl
KToKKyAgICAgICAgKEpTQzo6SW5mZXJyZWRWYWx1ZTo6bm90aWZ5V3JpdGVTbG93KToKKyAgICAg
ICAgKEpTQzo6SW5mZXJyZWRWYWx1ZTo6VmFsdWVDbGVhbnVwOjpWYWx1ZUNsZWFudXApOgorICAg
ICAgICAoSlNDOjpJbmZlcnJlZFZhbHVlOjpWYWx1ZUNsZWFudXA6On5WYWx1ZUNsZWFudXApOgor
ICAgICAgICAoSlNDOjpJbmZlcnJlZFZhbHVlOjpWYWx1ZUNsZWFudXA6OmZpbmFsaXplVW5jb25k
aXRpb25hbGx5KToKKyAgICAgICAgKiBydW50aW1lL0luZmVycmVkVmFsdWUuaDogQWRkZWQuCisg
ICAgICAgIChKU0M6OkluZmVycmVkVmFsdWU6OmluZmVycmVkVmFsdWUpOgorICAgICAgICAoSlND
OjpJbmZlcnJlZFZhbHVlOjpzdGF0ZSk6CisgICAgICAgIChKU0M6OkluZmVycmVkVmFsdWU6Omlz
U3RpbGxWYWxpZCk6CisgICAgICAgIChKU0M6OkluZmVycmVkVmFsdWU6Omhhc0JlZW5JbnZhbGlk
YXRlZCk6CisgICAgICAgIChKU0M6OkluZmVycmVkVmFsdWU6OmFkZCk6CisgICAgICAgIChKU0M6
OkluZmVycmVkVmFsdWU6Om5vdGlmeVdyaXRlKToKKyAgICAgICAgKEpTQzo6SW5mZXJyZWRWYWx1
ZTo6aW52YWxpZGF0ZSk6CisgICAgICAgICogcnVudGltZS9KU0Vudmlyb25tZW50UmVjb3JkLmNw
cDoKKyAgICAgICAgKEpTQzo6SlNFbnZpcm9ubWVudFJlY29yZDo6dmlzaXRDaGlsZHJlbik6Cisg
ICAgICAgICogcnVudGltZS9KU0Vudmlyb25tZW50UmVjb3JkLmg6CisgICAgICAgIChKU0M6OkpT
RW52aXJvbm1lbnRSZWNvcmQ6OmlzVmFsaWQpOgorICAgICAgICAoSlNDOjpKU0Vudmlyb25tZW50
UmVjb3JkOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgICogcnVudGltZS9KU0Z1bmN0aW9uLmNw
cDoKKyAgICAgICAgKEpTQzo6SlNGdW5jdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKiBydW50aW1l
L0pTRnVuY3Rpb24uaDoKKyAgICAgICAgKEpTQzo6SlNGdW5jdGlvbjo6Y3JlYXRlV2l0aEludmFs
aWRhdGVkUmVhbGxvY2F0aW9uV2F0Y2hwb2ludCk6CisgICAgICAgIChKU0M6OkpTRnVuY3Rpb246
OmNyZWF0ZUltcGwpOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpjcmVhdGUpOiBEZWxldGVk
LgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpK
U0dsb2JhbE9iamVjdDo6YWRkR2xvYmFsVmFyKToKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmpl
Y3Q6OmFkZEZ1bmN0aW9uKToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0Lmg6Cisg
ICAgICAgICogcnVudGltZS9KU0xleGljYWxFbnZpcm9ubWVudC5jcHA6CisgICAgICAgIChKU0M6
OkpTTGV4aWNhbEVudmlyb25tZW50OjpzeW1ib2xUYWJsZVB1dCk6CisgICAgICAgICogcnVudGlt
ZS9KU1Njb3BlLmg6CisgICAgICAgIChKU0M6OlJlc29sdmVPcDo6UmVzb2x2ZU9wKToKKyAgICAg
ICAgKiBydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6
SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdDo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAqIHJ1
bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5oOgorICAgICAgICAoSlNDOjpKU1N5bWJvbFRhYmxl
T2JqZWN0OjpKU1N5bWJvbFRhYmxlT2JqZWN0KToKKyAgICAgICAgKEpTQzo6SlNTeW1ib2xUYWJs
ZU9iamVjdDo6c2V0U3ltYm9sVGFibGUpOgorICAgICAgICAoSlNDOjpzeW1ib2xUYWJsZVB1dCk6
CisgICAgICAgIChKU0M6OnN5bWJvbFRhYmxlUHV0V2l0aEF0dHJpYnV0ZXMpOgorICAgICAgICAq
IHJ1bnRpbWUvUHV0UHJvcGVydHlTbG90Lmg6CisgICAgICAgICogcnVudGltZS9TeW1ib2xUYWJs
ZS5jcHA6CisgICAgICAgIChKU0M6OlN5bWJvbFRhYmxlRW50cnk6OnByZXBhcmVUb1dhdGNoKToK
KyAgICAgICAgKEpTQzo6U3ltYm9sVGFibGU6OlN5bWJvbFRhYmxlKToKKyAgICAgICAgKEpTQzo6
U3ltYm9sVGFibGU6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6U3ltYm9sVGFibGU6
OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpTeW1ib2xUYWJsZUVudHJ5OjppbmZlcnJl
ZFZhbHVlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3ltYm9sVGFibGVFbnRyeTo6bm90aWZ5
V3JpdGVTbG93KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3ltYm9sVGFibGU6OldhdGNocG9p
bnRDbGVhbnVwOjpXYXRjaHBvaW50Q2xlYW51cCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN5
bWJvbFRhYmxlOjpXYXRjaHBvaW50Q2xlYW51cDo6fldhdGNocG9pbnRDbGVhbnVwKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6U3ltYm9sVGFibGU6OldhdGNocG9pbnRDbGVhbnVwOjpmaW5hbGl6
ZVVuY29uZGl0aW9uYWxseSk6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9TeW1ib2xUYWJs
ZS5oOgorICAgICAgICAoSlNDOjpTeW1ib2xUYWJsZUVudHJ5OjpkaXNhYmxlV2F0Y2hpbmcpOgor
ICAgICAgICAoSlNDOjpTeW1ib2xUYWJsZUVudHJ5Ojp3YXRjaHBvaW50U2V0KToKKyAgICAgICAg
KEpTQzo6U3ltYm9sVGFibGU6OnNpbmdsZXRvblNjb3BlKToKKyAgICAgICAgKEpTQzo6U3ltYm9s
VGFibGVFbnRyeTo6bm90aWZ5V3JpdGUpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvVHlw
ZVByb2ZpbGVyLmNwcDoKKyAgICAgICAgKiBydW50aW1lL1ZNLmNwcDoKKyAgICAgICAgKEpTQzo6
Vk06OlZNKToKKyAgICAgICAgKiBydW50aW1lL1ZNLmg6CisgICAgICAgICogdGVzdHMvc3RyZXNz
L2luZmVyLXVuaW5pdGlhbGl6ZWQtY2xvc3VyZS12YXIuanM6IEFkZGVkLgorICAgICAgICAoZm9v
LmYpOgorICAgICAgICAoZm9vKToKKyAgICAgICAgKiB0ZXN0cy9zdHJlc3Mvc2luZ2xldG9uLXNj
b3BlLXRoZW4tb3ZlcndyaXRlLmpzOiBBZGRlZC4KKyAgICAgICAgKGZvby5mKToKKyAgICAgICAg
KGZvbyk6CisgICAgICAgICogdGVzdHMvc3RyZXNzL3NpbmdsZXRvbi1zY29wZS10aGVuLXJlYWxs
b2MtYW5kLW92ZXJ3cml0ZS5qczogQWRkZWQuCisgICAgICAgIChmb28pOgorICAgICAgICAqIHRl
c3RzL3N0cmVzcy9zaW5nbGV0b24tc2NvcGUtdGhlbi1yZWFsbG9jLmpzOiBBZGRlZC4KKyAgICAg
ICAgKGZvbyk6CisKIDIwMTUtMDQtMDcgIE1pY2hhZWwgU2Fib2ZmICA8bXNhYm9mZkBhcHBsZS5j
b20+CiAKICAgICAgICAgTGF6aWx5IGluaXRpYWxpemUgTG9nVG9TeXN0ZW1Db25zb2xlIGZsYWcg
dG8gcmVkdWNlIG1lbW9yeSB1c2FnZQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtl
TGlzdHMudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3Rz
LnR4dAkocmV2aXNpb24gMTgyNDk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlz
dHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0xMDUsNyArMTA1LDcgQEAgc2V0KEphdmFTY3JpcHRD
b3JlX1NPVVJDRVMKICAgICBieXRlY29kZS9VbmxpbmtlZENvZGVCbG9jay5jcHAKICAgICBieXRl
Y29kZS9VbmxpbmtlZEluc3RydWN0aW9uU3RyZWFtLmNwcAogICAgIGJ5dGVjb2RlL1ZhbHVlUmVj
b3ZlcnkuY3BwCi0gICAgYnl0ZWNvZGUvVmFyaWFibGVXYXRjaHBvaW50U2V0LmNwcAorICAgIGJ5
dGVjb2RlL1ZhcmlhYmxlV3JpdGVGaXJlRGV0YWlsLmNwcAogICAgIGJ5dGVjb2RlL1ZpcnR1YWxS
ZWdpc3Rlci5jcHAKICAgICBieXRlY29kZS9XYXRjaHBvaW50LmNwcAogCkBAIC00NTIsNiArNDUy
LDcgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1JVTlRJTUVfU09VUkNFUwogICAgIHJ1bnRpbWUvR2V0
dGVyU2V0dGVyLmNwcAogICAgIHJ1bnRpbWUvSWRlbnRpZmllci5jcHAKICAgICBydW50aW1lL0lu
ZGV4aW5nVHlwZS5jcHAKKyAgICBydW50aW1lL0luZmVycmVkVmFsdWUuY3BwCiAgICAgcnVudGlt
ZS9Jbml0aWFsaXplVGhyZWFkaW5nLmNwcAogICAgIHJ1bnRpbWUvSW50ZW5kZWRTdHJ1Y3R1cmVD
aGFpbi5jcHAKICAgICBydW50aW1lL0ludGVybmFsRnVuY3Rpb24uY3BwCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hw
cm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52
Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oJKHJldmlzaW9uIDE4MjQ5OCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZj
eHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTM1Miw3ICszNTIsNyBAQAogICAgIDxDbENvbXBpbGUg
SW5jbHVkZT0iLi5cYnl0ZWNvZGVcVW5saW5rZWRDb2RlQmxvY2suY3BwIiAvPgogICAgIDxDbENv
bXBpbGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcVW5saW5rZWRJbnN0cnVjdGlvblN0cmVhbS5jcHAi
IC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRlY29kZVxWYWx1ZVJlY292ZXJ5LmNw
cCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFZhcmlhYmxlV2F0Y2hw
b2ludFNldC5jcHAiIC8+CisgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRlY29kZVxWYXJp
YWJsZVdyaXRlRmlyZURldGFpbC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxi
eXRlY29kZVxWaXJ0dWFsUmVnaXN0ZXIuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5cYnl0ZWNvZGVcV2F0Y2hwb2ludC5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIu
LlxieXRlY29tcGlsZXJcQnl0ZWNvZGVHZW5lcmF0b3IuY3BwIiAvPgpAQCAtNzIwLDYgKzcyMCw3
IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEdldHRlclNldHRlci5jcHAi
IC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXElkZW50aWZpZXIuY3BwIiAv
PgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxJbmRleGluZ1R5cGUuY3BwIiAv
PgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxJbmZlcnJlZFZhbHVlLmNwcCIg
Lz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSW5pdGlhbGl6ZVRocmVhZGlu
Zy5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxydW50aW1lXEludGVuZGVkU3Ry
dWN0dXJlQ2hhaW4uY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxJ
bnRlcm5hbEZ1bmN0aW9uLmNwcCIgLz4KQEAgLTEwMDQsNyArMTAwNSw3IEBACiAgICAgPENsSW5j
bHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxVbmxpbmtlZEluc3RydWN0aW9uU3RyZWFtLmgiIC8+
CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxWYWx1ZVByb2ZpbGUuaCIgLz4K
ICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFZhbHVlUmVjb3ZlcnkuaCIgLz4K
LSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFZhcmlhYmxlV2F0Y2hwb2ludFNl
dC5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcVmFyaWFibGVXcml0
ZUZpcmVEZXRhaWwuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFZp
cnR1YWxSZWdpc3Rlci5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVc
V2F0Y2hwb2ludC5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvbXBpbGVy
XEJ5dGVjb2RlR2VuZXJhdG9yLmgiIC8+CkBAIC0xNTA3LDYgKzE1MDgsNyBAQAogICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxJbmRleGluZ0hlYWRlci5oIiAvPgogICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxJbmRleGluZ0hlYWRlcklubGluZXMuaCIgLz4KICAg
ICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSW5kZXhpbmdUeXBlLmgiIC8+CisgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEluZmVycmVkVmFsdWUuaCIgLz4KICAgICA8
Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRpbWVcSW5pdGlhbGl6ZVRocmVhZGluZy5oIiAvPgog
ICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxJbnQxNkFycmF5LmgiIC8+CiAgICAg
PENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50aW1lXEludDMyQXJyYXkuaCIgLz4KSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhw
cm9qCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54
Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiAxODI0OTgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29y
a2luZyBjb3B5KQpAQCAtMzgzLDYgKzM4Myw4IEBACiAJCTBGNkIxQ0M2MTg2MkM0NzgwMDg0NUQ5
NyAvKiBGVExVbndpbmRJbmZvLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjZCMUNDMjE4NjJDNDc4MDA4NDVEOTcgLyogRlRMVW53aW5kSW5mby5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNkIxQ0M5
MTg2NDFERjgwMDg0NUQ5NyAvKiBBcml0eUNoZWNrRmFpbFJldHVyblRodW5rcy5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjZCMUNDNzE4NjQxREY4
MDA4NDVEOTcgLyogQXJpdHlDaGVja0ZhaWxSZXR1cm5UaHVua3MuY3BwICovOyB9OwogCQkwRjZC
MUNDQTE4NjQxREY4MDA4NDVEOTcgLyogQXJpdHlDaGVja0ZhaWxSZXR1cm5UaHVua3MuaCBpbiBI
ZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNkIxQ0M4MTg2NDFE
RjgwMDg0NUQ5NyAvKiBBcml0eUNoZWNrRmFpbFJldHVyblRodW5rcy5oICovOyBzZXR0aW5ncyA9
IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCTBGNkM3MzUwMUFDOUY5OUYwMEJF
MTY4MiAvKiBWYXJpYWJsZVdyaXRlRmlyZURldGFpbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2Eg
PSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjZDNzM0RTFBQzlGOTlGMDBCRTE2ODIgLyogVmFy
aWFibGVXcml0ZUZpcmVEZXRhaWwuY3BwICovOyB9OworCQkwRjZDNzM1MTFBQzlGOTlGMDBCRTE2
ODIgLyogVmFyaWFibGVXcml0ZUZpcmVEZXRhaWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNkM3MzRGMUFDOUY5OUYwMEJFMTY4MiAvKiBWYXJpYWJs
ZVdyaXRlRmlyZURldGFpbC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUs
ICk7IH07IH07CiAJCTBGNkU4NDVBMTkwMzBCRUYwMDU2Mjc0MSAvKiBERkdWYXJpYWJsZUFjY2Vz
c0RhdGEuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEY2RTg0NTkxOTAzMEJFRjAwNTYyNzQxIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YS5jcHAgKi87
IH07CiAJCTBGNkZDNzUwMTk2MTEwQTgwMEUxRDAyRCAvKiBDb21wbGV4R2V0U3RhdHVzLmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNkZDNzRFMTk2
MTEwQTgwMEUxRDAyRCAvKiBDb21wbGV4R2V0U3RhdHVzLmNwcCAqLzsgfTsKIAkJMEY2RkM3NTEx
OTYxMTBBODAwRTFEMDJEIC8qIENvbXBsZXhHZXRTdGF0dXMuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNkZDNzRGMTk2MTEwQTgwMEUxRDAyRCAvKiBD
b21wbGV4R2V0U3RhdHVzLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwg
KTsgfTsgfTsKQEAgLTQyNSw3ICs0MjcsNiBAQAogCQkwRjhGOTQ0MjE2Njc2MzM1MDBENjE5NzEg
LyogQ29kZVR5cGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEY4Rjk0M0YxNjY3NjMyRDAwRDYxOTcxIC8qIENvZGVUeXBlLmNwcCAqLzsgfTsKIAkJ
MEY4Rjk0NDQxNjY3NjM1NDAwRDYxOTcxIC8qIEpJVENvZGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY4Rjk0NDMxNjY3NjM1MjAwRDYxOTcxIC8q
IEpJVENvZGUuY3BwICovOyB9OwogCQkwRjhGOTQ0NjE2Njc2NEYxMDBENjE5NzEgLyogQ29kZU9y
aWdpbi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjhGOTQ0NTE2Njc2NEVFMDBENjE5NzEgLyogQ29kZU9yaWdpbi5jcHAgKi87IH07Ci0JCTBGOTE4
MUM3MTg0MTVDQTUwMDU3QjY2OSAvKiBWYXJpYWJsZVdhdGNocG9pbnRTZXQuaCBpbiBIZWFkZXJz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTE4MUM2MTg0MTVDQTUwMDU3
QjY2OSAvKiBWYXJpYWJsZVdhdGNocG9pbnRTZXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRF
UyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRjkxOUQwQzE1N0VFMDlGMDA0QTRFN0QgLyogSlNT
eW1ib2xUYWJsZU9iamVjdC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSAwRjkxOUQwOTE1N0VFMDlEMDA0QTRFN0QgLyogSlNTeW1ib2xUYWJsZU9iamVj
dC5jcHAgKi87IH07CiAJCTBGOTE5RDBEMTU3RUUwQTIwMDRBNEU3RCAvKiBKU1N5bWJvbFRhYmxl
T2JqZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjkxOUQwQTE1N0VFMDlEMDA0QTRFN0QgLyogSlNTeW1ib2xUYWJsZU9iamVjdC5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGOTE5RDEwMTU3RjMz
MjkwMDRBNEU3RCAvKiBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmNwcCBpbiBTb3VyY2VzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGOTE5RDBFMTU3RjMzMjcwMDRBNEU3
RCAvKiBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmNwcCAqLzsgfTsKQEAgLTU1MCw3ICs1NTEs
NiBAQAogCQkwRkM5N0Y0MDE4MjAyMTE5MDAyQzlCMjYgLyogREZHSnVtcFJlcGxhY2VtZW50Lmgg
aW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkM5N0YzQTE4
MjAyMTE5MDAyQzlCMjYgLyogREZHSnVtcFJlcGxhY2VtZW50LmggKi87IHNldHRpbmdzID0ge0FU
VFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZDOTdGNDExODIwMjExOTAwMkM5QjI2
IC8qIERGR1dhdGNocG9pbnRDb2xsZWN0aW9uUGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDOTdGM0IxODIwMjExOTAwMkM5QjI2IC8qIERG
R1dhdGNocG9pbnRDb2xsZWN0aW9uUGhhc2UuY3BwICovOyB9OwogCQkwRkM5N0Y0MjE4MjAyMTE5
MDAyQzlCMjYgLyogREZHV2F0Y2hwb2ludENvbGxlY3Rpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8g
PSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZDOTdGM0MxODIwMjExOTAwMkM5QjI2
IC8qIERGR1dhdGNocG9pbnRDb2xsZWN0aW9uUGhhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklC
VVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQkwRkNBOTExMzE5NUU2NkEwMDA0MjY0MzggLyog
VmFyaWFibGVXYXRjaHBvaW50U2V0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGQ0E5MTEyMTk1RTY2QTAwMDQyNjQzOCAvKiBWYXJpYWJsZVdhdGNo
cG9pbnRTZXQuY3BwICovOyB9OwogCQkwRkNDQUU0NTE2RDBDRjc0MDBEMEM2NUIgLyogUGFyc2Vy
RXJyb3IuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
Q0NBRTQzMTZEMENGNkUwMEQwQzY1QiAvKiBQYXJzZXJFcnJvci5oICovOyBzZXR0aW5ncyA9IHtB
VFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGQ0VGQUFCMTgwNEMxM0UwMDQ3MkNF
NCAvKiBGVExTYXZlUmVzdG9yZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRkNFRkFBOTE4MDRDMTNFMDA0NzJDRTQgLyogRlRMU2F2ZVJlc3RvcmUu
Y3BwICovOyB9OwogCQkwRkNFRkFBQzE4MDRDMTNFMDA0NzJDRTQgLyogRlRMU2F2ZVJlc3RvcmUu
aCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQ0VGQUFB
MTgwNEMxM0UwMDQ3MkNFNCAvKiBGVExTYXZlUmVzdG9yZS5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC03MTksNiArNzE5LDggQEAKIAkJMEZGNzI5
QkUxNjZBRDM2MDAwMEY1QkEzIC8qIFByb2ZpbGVyRXhlY3V0aW9uQ291bnRlci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGNzI5OUUxNjZBRDM0NzAw
MEY1QkEzIC8qIFByb2ZpbGVyRXhlY3V0aW9uQ291bnRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRS
SUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGRjcyOUJGMTY2QUQzNjAwMDBGNUJBMyAv
KiBQcm9maWxlck9yaWdpbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gMEZGNzI5QTAxNjZBRDM0NzAwMEY1QkEzIC8qIFByb2ZpbGVyT3JpZ2luLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZGNzI5QzAx
NjZBRDM2MDAwMEY1QkEzIC8qIFByb2ZpbGVyT3JpZ2luU3RhY2suaCBpbiBIZWFkZXJzICovID0g
e2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGRjcyOUEyMTY2QUQzNDcwMDBGNUJBMyAv
KiBQcm9maWxlck9yaWdpblN0YWNrLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKKwkJMEZGOEJERUExQUQ0Q0Y3MTAwREZFODg0IC8qIEluZmVycmVkVmFs
dWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZG
OEJERTgxQUQ0Q0Y3MTAwREZFODg0IC8qIEluZmVycmVkVmFsdWUuY3BwICovOyB9OworCQkwRkY4
QkRFQjFBRDRDRjcxMDBERkU4ODQgLyogSW5mZXJyZWRWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGOEJERTkxQUQ0Q0Y3MTAwREZFODg0IC8q
IEluZmVycmVkVmFsdWUuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCAp
OyB9OyB9OwogCQkwRkY5MjJENDE0RjQ2QjQxMDA0MUEyNEUgLyogTExJbnRPZmZzZXRzRXh0cmFj
dG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBG
NDY4MEExMTRCQTdGODIwMEJGRTI3MiAvKiBMTEludE9mZnNldHNFeHRyYWN0b3IuY3BwICovOyB9
OwogCQkwRkZBNTQ5NzE2Qjg4MzUwMDBCM0E5ODIgLyogQTY0RE9wY29kZS5jcHAgaW4gU291cmNl
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NTJBM0EyMjE2NTFDNjk3MDBB
ODBBRkUgLyogQTY0RE9wY29kZS5jcHAgKi87IH07CiAJCTBGRkE1NDk4MTZCODgzNTMwMEIzQTk4
MiAvKiBBNjRET3Bjb2RlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSA2NTJBM0EyMzE2NTFDNjk3MDBBODBBRkUgLyogQTY0RE9wY29kZS5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CkBAIC0xNjQ0LDcgKzE2NDYs
NiBAQAogCQlGRTIwQ0U5RTE1RjA0QTk1MDBERjM0MzAgLyogTExJbnRDTG9vcC5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkUyMENFOUMxNUYwNEE5NTAw
REYzNDMwIC8qIExMSW50Q0xvb3AuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2
YXRlLCApOyB9OyB9OwogCQlGRTRBMzMxRjE1QkQyRTA3MDA2RjU0RjMgLyogVk1JbnNwZWN0b3Iu
Y3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU0QTMz
MUQxNUJEMkUwNzAwNkY1NEYzIC8qIFZNSW5zcGVjdG9yLmNwcCAqLzsgfTsKIAkJRkU0QTMzMjAx
NUJEMkUwNzAwNkY1NEYzIC8qIFZNSW5zcGVjdG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQ
QlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTRBMzMxRTE1QkQyRTA3MDA2RjU0RjMgLyogVk1JbnNw
ZWN0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owot
CQlGRTUyNDhGOTE5MTQ0MkQ5MDBCN0ZERTQgLyogVmFyaWFibGVXYXRjaHBvaW50U2V0SW5saW5l
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU1MjQ4
RjgxOTE0NDJEOTAwQjdGREU0IC8qIFZhcmlhYmxlV2F0Y2hwb2ludFNldElubGluZXMuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGRTU5MzJBNzE4
M0M1QTI2MDBBMUVDQ0MgLyogVk1FbnRyeVNjb3BlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZFNTkzMkE1MTgzQzVBMjYwMEExRUNDQyAvKiBWTUVu
dHJ5U2NvcGUuY3BwICovOyB9OwogCQlGRTU5MzJBODE4M0M1QTI2MDBBMUVDQ0MgLyogVk1FbnRy
eVNjb3BlLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBG
RTU5MzJBNjE4M0M1QTI2MDBBMUVDQ0MgLyogVk1FbnRyeVNjb3BlLmggKi87IHNldHRpbmdzID0g
e0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRkU3QkE2MEYxQTFBN0NFQzAwRjFG
N0I0IC8qIEhlYXBWZXJpZmllci5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSBGRTdCQTYwRDFBMUE3Q0VDMDBGMUY3QjQgLyogSGVhcFZlcmlmaWVyLmNw
cCAqLzsgfTsKQEAgLTIxMDAsNiArMjEwMSw4IEBACiAJCTBGNkIxQ0MyMTg2MkM0NzgwMDg0NUQ5
NyAvKiBGVExVbndpbmRJbmZvLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZU
TFVud2luZEluZm8uaDsgcGF0aCA9IGZ0bC9GVExVbndpbmRJbmZvLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGNkIxQ0M3MTg2NDFERjgwMDg0NUQ5NyAvKiBBcml0eUNoZWNrRmFp
bFJldHVyblRodW5rcy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBB
cml0eUNoZWNrRmFpbFJldHVyblRodW5rcy5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CiAJCTBGNkIxQ0M4MTg2NDFERjgwMDg0NUQ5NyAvKiBBcml0eUNoZWNrRmFpbFJldHVyblRodW5r
cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBcml0eUNoZWNrRmFpbFJldHVy
blRodW5rcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjZDNzM0RTFBQzlGOTlG
MDBCRTE2ODIgLyogVmFyaWFibGVXcml0ZUZpcmVEZXRhaWwuY3BwICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gVmFyaWFibGVXcml0ZUZpcmVEZXRhaWwuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRjZDNzM0RjFBQzlGOTlGMDBCRTE2ODIgLyogVmFyaWFi
bGVXcml0ZUZpcmVEZXRhaWwuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5j
b2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmFy
aWFibGVXcml0ZUZpcmVEZXRhaWwuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2
RTg0NTkxOTAzMEJFRjAwNTYyNzQxIC8qIERGR1ZhcmlhYmxlQWNjZXNzRGF0YS5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBERkdWYXJpYWJsZUFjY2Vzc0RhdGEuY3Bw
OyBwYXRoID0gZGZnL0RGR1ZhcmlhYmxlQWNjZXNzRGF0YS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdy
b3VwPiI7IH07CiAJCTBGNkZDNzRFMTk2MTEwQTgwMEUxRDAyRCAvKiBDb21wbGV4R2V0U3RhdHVz
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENvbXBsZXhHZXRTdGF0
dXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjZGQzc0RjE5NjExMEE4MDBF
MUQwMkQgLyogQ29tcGxleEdldFN0YXR1cy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBDb21wbGV4R2V0U3RhdHVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0y
MTQwLDcgKzIxNDMsNiBAQAogCQkwRjhGOTQzRjE2Njc2MzJEMDBENjE5NzEgLyogQ29kZVR5cGUu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29kZVR5cGUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjhGOTQ0MzE2Njc2MzUyMDBENjE5NzEgLyog
SklUQ29kZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKSVRDb2Rl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY4Rjk0NDUxNjY3NjRFRTAwRDYx
OTcxIC8qIENvZGVPcmlnaW4uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRo
ID0gQ29kZU9yaWdpbi5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGOTE4MUM2
MTg0MTVDQTUwMDU3QjY2OSAvKiBWYXJpYWJsZVdhdGNocG9pbnRTZXQuaCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuYy5oOyBwYXRoID0gVmFyaWFibGVXYXRjaHBvaW50U2V0Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IH07CiAJCTBGOTE5RDA5MTU3RUUwOUQwMDRBNEU3RCAvKiBKU1N5bWJvbFRh
YmxlT2JqZWN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTU3lt
Ym9sVGFibGVPYmplY3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRjkxOUQw
QTE1N0VFMDlEMDA0QTRFN0QgLyogSlNTeW1ib2xUYWJsZU9iamVjdC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBKU1N5bWJvbFRhYmxlT2JqZWN0Lmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCTBGOTE5RDBFMTU3RjMzMjcwMDRBNEU3RCAvKiBKU1NlZ21lbnRlZFZh
cmlhYmxlT2JqZWN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpT
U2VnbWVudGVkVmFyaWFibGVPYmplY3QuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtMjI3Niw3ICsyMjc4LDYgQEAKIAkJMEZDOTdGM0ExODIwMjExOTAwMkM5QjI2IC8qIERGR0p1
bXBSZXBsYWNlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdKdW1w
UmVwbGFjZW1lbnQuaDsgcGF0aCA9IGRmZy9ERkdKdW1wUmVwbGFjZW1lbnQuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZDOTdGM0IxODIwMjExOTAwMkM5QjI2IC8qIERGR1dhdGNo
cG9pbnRDb2xsZWN0aW9uUGhhc2UuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBu
YW1lID0gREZHV2F0Y2hwb2ludENvbGxlY3Rpb25QaGFzZS5jcHA7IHBhdGggPSBkZmcvREZHV2F0
Y2hwb2ludENvbGxlY3Rpb25QaGFzZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTBGQzk3RjNDMTgyMDIxMTkwMDJDOUIyNiAvKiBERkdXYXRjaHBvaW50Q29sbGVjdGlvblBoYXNl
LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtu
b3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IERGR1dhdGNocG9pbnRDb2xsZWN0
aW9uUGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdXYXRjaHBvaW50Q29sbGVjdGlvblBoYXNlLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGQ0E5MTEyMTk1RTY2QTAwMDQyNjQzOCAvKiBW
YXJpYWJsZVdhdGNocG9pbnRTZXQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gVmFyaWFibGVXYXRjaHBvaW50U2V0LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKIAkJMEZDQjQwODUxNUMwQTNDMzAwNDg5MzJCIC8qIFNsb3RWaXNpdG9ySW5saW5lcy5oICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBTbG90VmlzaXRvcklubGluZXMuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZDQ0FFNDMxNkQwQ0Y2RTAwRDBDNjVCIC8qIFBh
cnNlckVycm9yLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFBhcnNlckVycm9y
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQ0VGQUE5MTgwNEMxM0UwMDQ3MkNF
NCAvKiBGVExTYXZlUmVzdG9yZS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBGVExTYXZlUmVzdG9yZS5jcHA7IHBhdGggPSBmdGwvRlRMU2F2ZVJlc3RvcmUuY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjQ0MSw2ICsyNDQyLDggQEAKIAkJMEZGNzI5
QTAxNjZBRDM0NzAwMEY1QkEzIC8qIFByb2ZpbGVyT3JpZ2luLmggKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmMuaDsgbmFtZSA9IFByb2ZpbGVyT3JpZ2luLmg7IHBhdGggPSBwcm9maWxlci9Qcm9maWxl
ck9yaWdpbi5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkY3MjlBMTE2NkFEMzQ3
MDAwRjVCQTMgLyogUHJvZmlsZXJPcmlnaW5TdGFjay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmNwcC5jcHA7IG5hbWUgPSBQcm9maWxlck9yaWdpblN0YWNrLmNwcDsgcGF0aCA9IHByb2ZpbGVy
L1Byb2ZpbGVyT3JpZ2luU3RhY2suY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkw
RkY3MjlBMjE2NkFEMzQ3MDAwRjVCQTMgLyogUHJvZmlsZXJPcmlnaW5TdGFjay5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBQcm9maWxlck9yaWdpblN0YWNrLmg7IHBhdGggPSBw
cm9maWxlci9Qcm9maWxlck9yaWdpblN0YWNrLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07
CisJCTBGRjhCREU4MUFENENGNzEwMERGRTg4NCAvKiBJbmZlcnJlZFZhbHVlLmNwcCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluZmVycmVkVmFsdWUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OworCQkwRkY4QkRFOTFBRDRDRjcxMDBERkU4ODQgLyogSW5mZXJy
ZWRWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbmZlcnJlZFZhbHVl
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGRjkyMkNGMTRGNDZCMTMwMDQxQTI0
RSAvKiBKU0NMTEludE9mZnNldHNFeHRyYWN0b3IgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5j
ZTsgZXhwbGljaXRGaWxlVHlwZSA9ICJjb21waWxlZC5tYWNoLW8uZXhlY3V0YWJsZSI7IGluY2x1
ZGVJbkluZGV4ID0gMDsgcGF0aCA9IEpTQ0xMSW50T2Zmc2V0c0V4dHJhY3Rvcjsgc291cmNlVHJl
ZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsKIAkJMEZGQzk5RDAxODRFQzhBRDAwOUMxMEFCIC8q
IENvbnN0YW50TW9kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb25zdGFu
dE1vZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZGQzk5RDIxODRFRTMxODAw
OUMxMEFCIC8qIEFycmF5QnVmZmVyTmV1dGVyaW5nV2F0Y2hwb2ludC5jcHAgKi8gPSB7aXNhID0g
UEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBcnJheUJ1ZmZlck5ldXRlcmluZ1dhdGNocG9pbnQu
Y3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMzQyMSw3ICszNDI0LDYgQEAKIAkJ
RkUyMENFOUMxNUYwNEE5NTAwREYzNDMwIC8qIExMSW50Q0xvb3AuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBuYW1lID0gTExJbnRDTG9vcC5oOyBwYXRoID0gbGxpbnQvTExJbnRDTG9vcC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTRBMzMxRDE1QkQyRTA3MDA2RjU0RjMg
LyogVk1JbnNwZWN0b3IuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
Vk1JbnNwZWN0b3IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTRBMzMxRTE1
QkQyRTA3MDA2RjU0RjMgLyogVk1JbnNwZWN0b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5o
OyBwYXRoID0gVk1JbnNwZWN0b3IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkU1
MjQ4RjgxOTE0NDJEOTAwQjdGREU0IC8qIFZhcmlhYmxlV2F0Y2hwb2ludFNldElubGluZXMuaCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmFyaWFibGVXYXRjaHBvaW50U2V0SW5s
aW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGRTU5MzJBNTE4M0M1QTI2MDBB
MUVDQ0MgLyogVk1FbnRyeVNjb3BlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBm
aWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsg
cGF0aCA9IFZNRW50cnlTY29wZS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZF
NTkzMkE2MTgzQzVBMjYwMEExRUNDQyAvKiBWTUVudHJ5U2NvcGUuaCAqLyA9IHtpc2EgPSBQQlhG
aWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJj
ZWNvZGUuYy5oOyBwYXRoID0gVk1FbnRyeVNjb3BlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUZFN0JBNjBEMUExQTdDRUMwMEYxRjdCNCAvKiBIZWFwVmVyaWZpZXIuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSGVhcFZlcmlmaWVyLmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQ0MDksNiArNDQxMSw4IEBACiAJCQkJMEZCN0YzOEUx
NUVEOEUzODAwRjE2N0IyIC8qIEluZGV4aW5nSGVhZGVySW5saW5lcy5oICovLAogCQkJCTBGMTNF
MDRDMTYxNjRBMUIwMERDOERFNyAvKiBJbmRleGluZ1R5cGUuY3BwICovLAogCQkJCTBGQjdGMzhG
MTVFRDhFMzgwMEYxNjdCMiAvKiBJbmRleGluZ1R5cGUuaCAqLywKKwkJCQkwRkY4QkRFODFBRDRD
RjcxMDBERkU4ODQgLyogSW5mZXJyZWRWYWx1ZS5jcHAgKi8sCisJCQkJMEZGOEJERTkxQUQ0Q0Y3
MTAwREZFODg0IC8qIEluZmVycmVkVmFsdWUuaCAqLywKIAkJCQlFMTc4NjM2QzBEOUJFRUMzMDBE
NzRFNzUgLyogSW5pdGlhbGl6ZVRocmVhZGluZy5jcHAgKi8sCiAJCQkJRTE3ODYzM0YwRDlCRUMw
MDAwRDc0RTc1IC8qIEluaXRpYWxpemVUaHJlYWRpbmcuaCAqLywKIAkJCQlBN0E4QUYyQjE3QURC
NUYzMDA1QUIxNzQgLyogSW50OEFycmF5LmggKi8sCkBAIC01Mjc3LDkgKzUyODEsOCBAQAogCQkJ
CTBGOTYzQjM2MTNGQzZGREUwMDAyRDlCMiAvKiBWYWx1ZVByb2ZpbGUuaCAqLywKIAkJCQkwRjI0
RTU1NzE3Rjc0RURCMDBBQkIyMTcgLyogVmFsdWVSZWNvdmVyeS5jcHAgKi8sCiAJCQkJMEY0MjZB
NDUxNDYwQ0JBQjAwMTMxRjhGIC8qIFZhbHVlUmVjb3ZlcnkuaCAqLywKLQkJCQkwRkNBOTExMjE5
NUU2NkEwMDA0MjY0MzggLyogVmFyaWFibGVXYXRjaHBvaW50U2V0LmNwcCAqLywKLQkJCQkwRjkx
ODFDNjE4NDE1Q0E1MDA1N0I2NjkgLyogVmFyaWFibGVXYXRjaHBvaW50U2V0LmggKi8sCi0JCQkJ
RkU1MjQ4RjgxOTE0NDJEOTAwQjdGREU0IC8qIFZhcmlhYmxlV2F0Y2hwb2ludFNldElubGluZXMu
aCAqLywKKwkJCQkwRjZDNzM0RTFBQzlGOTlGMDBCRTE2ODIgLyogVmFyaWFibGVXcml0ZUZpcmVE
ZXRhaWwuY3BwICovLAorCQkJCTBGNkM3MzRGMUFDOUY5OUYwMEJFMTY4MiAvKiBWYXJpYWJsZVdy
aXRlRmlyZURldGFpbC5oICovLAogCQkJCTBGMjBDMjU4MUE4MDEzQUIwMERBMzIyOSAvKiBWaXJ0
dWFsUmVnaXN0ZXIuY3BwICovLAogCQkJCTBGNDI2QTQ2MTQ2MENCQUIwMDEzMUY4RiAvKiBWaXJ0
dWFsUmVnaXN0ZXIuaCAqLywKIAkJCQkwRjkxOUQyMjE1ODUzQ0RFMDA0QTRFN0QgLyogV2F0Y2hw
b2ludC5jcHAgKi8sCkBAIC01NTY1LDcgKzU1NjgsNiBAQAogCQkJCUM0RjRCNkY1MUEwNUM5ODQw
MDVDQUI3NiAvKiBnZW5lcmF0ZV9vYmpjX3Byb3RvY29sX3R5cGVzX2ltcGxlbWVudGF0aW9uLnB5
IGluIEhlYWRlcnMgKi8sCiAJCQkJQTU4NDAzMjAxOEJGRkJFMTAwNUEwODExIC8qIEluc3BlY3Rv
ckFnZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQkyQUFCQ0RFNzE4RUYyOTQyMDAwMDIwOTYgLyog
R0NMb2dnaW5nLmggaW4gSGVhZGVycyAqLywKLQkJCQlGRTUyNDhGOTE5MTQ0MkQ5MDBCN0ZERTQg
LyogVmFyaWFibGVXYXRjaHBvaW50U2V0SW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkU3
QkE2MTAxQTFBN0NFQzAwRjFGN0I0IC8qIEhlYXBWZXJpZmllci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQTVFRjlCMTQxQTFENDNGNjAwNzAyRTkwIC8qIGdlbmVyYXRlX2NwcF9iYWNrZW5kX2Rpc3Bh
dGNoZXJfaGVhZGVyLnB5IGluIEhlYWRlcnMgKi8sCiAJCQkJQzJEQTc3ODMxOEUyNTk5OTAwNjZG
Q0I2IC8qIEhlYXBJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKQEAgLTYzNDcsNiArNjM0OSw3IEBA
CiAJCQkJQTc5MERENkUxODJGNDk5NzAwNTg4ODA3IC8qIFNldEl0ZXJhdG9yUHJvdG90eXBlLmgg
aW4gSGVhZGVycyAqLywKIAkJCQlBNzI5OURBMjE3RDEyODQ4MDA1RjVGRjkgLyogU2V0UHJvdG90
eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkFFNjRBQTEzNUU1RTFDMDA5NjMwMTIgLyogU0g0
QXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkY4QkRFQjFBRDRDRjcxMDBERkU4ODQg
LyogSW5mZXJyZWRWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEYyQjY3MDUxN0I2QjVBQjAw
QTdBRTNGIC8qIFNpbXBsZVR5cGVkQXJyYXlDb250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkxNEJBNzhGMTEzQUFCODhGMDA1QjdDMkMgLyogU2xvdFZpc2l0b3IuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGQjE3NjYxMTk2QjhGOUUwMDkxMDUyQSAvKiBERkdIZWFwTG9jYXRpb24uaCBpbiBI
ZWFkZXJzICovLApAQCAtNjM1NCw2ICs2MzU3LDcgQEAKIAkJCQlBNzA5RjJGMDE3QTBBQzA0MDA1
MTJFOTggLyogU2xvd1BhdGhDYWxsLmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzMwNDAwNDBFNkE3
NDk0MDA3ODZFNkEgLyogU21hbGxTdHJpbmdzLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ2
NDBFMTZGNUNEMDBCMzQ0NjAgLyogU291cmNlQ29kZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY2
QzczNTExQUM5Rjk5RjAwQkUxNjgyIC8qIFZhcmlhYmxlV3JpdGVGaXJlRGV0YWlsLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlCQzE4QzQ2MzBFMTZGNUNEMDBCMzQ0NjAgLyogU291cmNlUHJvdmlkZXIu
aCBpbiBIZWFkZXJzICovLAogCQkJCTcwRUMwRUMzMUFBMEQ3REEwMEI2QUFGQSAvKiBKU1N0cmlu
Z0l0ZXJhdG9yLmggaW4gSGVhZGVycyAqLywKIAkJCQlFNDlEQzE2QzEyRUYyOTRFMDAxODRBMUYg
LyogU291cmNlUHJvdmlkZXJDYWNoZS5oIGluIEhlYWRlcnMgKi8sCkBAIC02NDIxLDcgKzY0MjUs
NiBAQAogCQkJCTBGMkU4OTJDMTZEMDI4QUQwMDlFNEZEMiAvKiBVbnVzZWRQb2ludGVyLmggaW4g
SGVhZGVycyAqLywKIAkJCQkwRjk2M0IzODEzRkM2RkU5MDAwMkQ5QjIgLyogVmFsdWVQcm9maWxl
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjQyNkE0ODE0NjBDQkIzMDAxMzFGOEYgLyogVmFsdWVS
ZWNvdmVyeS5oIGluIEhlYWRlcnMgKi8sCi0JCQkJMEY5MTgxQzcxODQxNUNBNTAwNTdCNjY5IC8q
IFZhcmlhYmxlV2F0Y2hwb2ludFNldC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY5QzVFNUYxOEUz
NUY1RTAwRDQzMUMzIC8qIEZUTERXQVJGUmVnaXN0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBG
NDI2QTQ5MTQ2MENCQjcwMDEzMUY4RiAvKiBWaXJ0dWFsUmVnaXN0ZXIuaCBpbiBIZWFkZXJzICov
LAogCQkJCUJDMThDNDIwMEUxNkY1Q0QwMEIzNDQ2MCAvKiBWTS5oIGluIEhlYWRlcnMgKi8sCkBA
IC02OTYzLDYgKzY5NjYsNyBAQAogCQkJCUE3N0YxODIxMTY0MDg4QjIwMDY0MEE0NyAvKiBDb2Rl
Q2FjaGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJMEY4Rjk0NDYxNjY3NjRGMTAwRDYxOTcxIC8q
IENvZGVPcmlnaW4uY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODZCNTgyNjcxNEQyNzk2QzAwQTlD
MzA2IC8qIENvZGVQcm9maWxlLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTBGNkM3MzUwMUFDOUY5
OUYwMEJFMTY4MiAvKiBWYXJpYWJsZVdyaXRlRmlyZURldGFpbC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQk4NkI1ODI2OTE0RDI3OTcwMDBBOUMzMDYgLyogQ29kZVByb2ZpbGluZy5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQkwRjhGOTQzQzE2Njc2MzEzMDBENjE5NzEgLyogQ29kZVNwZWNpYWxpemF0
aW9uS2luZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjhGOTQ0MjE2Njc2MzM1MDBENjE5NzEg
LyogQ29kZVR5cGUuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03MDI3LDcgKzcwMzEsNiBAQAogCQkJ
CUMyOTgxRkQ4MTdCQUVFNEIwMEEzQkM5OCAvKiBERkdEZXNpcmVkV2Vha1JlZmVyZW5jZXMuY3Bw
IGluIFNvdXJjZXMgKi8sCiAJCQkJQzI5ODFGREMxN0JBRkY0NDAwQTNCQzk4IC8qIERGR0Rlc2ly
ZWRXcml0ZUJhcnJpZXJzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjQyNzY0MTU5MUExQ0Mw
MDRDQjlGRiAvKiBERkdEaXNhc3NlbWJsZXIuY3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMEZDQTkx
MTMxOTVFNjZBMDAwNDI2NDM4IC8qIFZhcmlhYmxlV2F0Y2hwb2ludFNldC5jcHAgaW4gU291cmNl
cyAqLywKIAkJCQkwRkQ4MUFEMjE1NEZCNEVFMDA5ODNFNzIgLyogREZHRG9taW5hdG9ycy5jcHAg
aW4gU291cmNlcyAqLywKIAkJCQkwRkQzQzgyNjE0MTE1RDQwMDBGRDgxQ0IgLyogREZHRHJpdmVy
LmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGMkI5Q0UyMTlEMEJBN0QwMEIxRDFCNSAvKiBERkdB
dmFpbGFiaWxpdHlNYXAuY3BwIGluIFNvdXJjZXMgKi8sCkBAIC03MzMxLDYgKzczMzQsNyBAQAog
CQkJCTBGMkI2NkZFMTdCNkI1QUIwMEE3QUUzRiAvKiBKU1R5cGVkQXJyYXlzLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTBGRjA1NEY5MUFDMzVCNDQwMEU1QkU1NyAvKiBFeGVjdXRhYmxlQWxsb2Nh
dGlvbkZ1enouY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJODZFM0M2MUExNjdCQUJFRTAwNkQ3NjBB
IC8qIEpTVmFsdWUubW0gaW4gU291cmNlcyAqLywKKwkJCQkwRkY4QkRFQTFBRDRDRjcxMDBERkU4
ODQgLyogSW5mZXJyZWRWYWx1ZS5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNEJENUEzMjBBM0U5
MUY2MDBCQUY1OUMgLyogSlNWYWx1ZVJlZi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlE
NzEwN0VDMzc2MDA0MjdBNDggLyogSlNFbnZpcm9ubWVudFJlY29yZC5jcHAgaW4gU291cmNlcyAq
LywKIAkJCQk4NkUzQzYxQzE2N0JBQkVFMDA2RDc2MEEgLyogSlNWaXJ0dWFsTWFjaGluZS5tbSBp
biBTb3VyY2VzICovLApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVj
b2RlTGlzdC5qc29uCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9CeXRlY29kZUxpc3QuanNvbgkocmV2aXNpb24gMTgyNDk4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5qc29uCSh3b3JraW5nIGNvcHkpCkBAIC02LDcg
KzYsNiBAQAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfZW50ZXIiLCAibGVuZ3RoIiA6IDEg
fSwKICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX2NyZWF0ZV9sZXhpY2FsX2Vudmlyb25tZW50
IiwgImxlbmd0aCIgOiAzIH0sCiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9nZXRfc2NvcGUi
LCAibGVuZ3RoIiA6IDIgfSwKLSAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX3RvdWNoX2VudHJ5
IiwgImxlbmd0aCIgOiAxIH0sCiAgICAgICAgICAgICB7ICJuYW1lIiA6ICJvcF9jcmVhdGVfZGly
ZWN0X2FyZ3VtZW50cyIsICJsZW5ndGgiIDogMiB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAi
b3BfY3JlYXRlX3Njb3BlZF9hcmd1bWVudHMiLCAibGVuZ3RoIiA6IDMgfSwKICAgICAgICAgICAg
IHsgIm5hbWUiIDogIm9wX2NyZWF0ZV9vdXRfb2ZfYmFuZF9hcmd1bWVudHMiLCAibGVuZ3RoIiA6
IDIgfSwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZVVzZURl
Zi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29k
ZVVzZURlZi5oCShyZXZpc2lvbiAxODI0OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuaAkod29ya2luZyBjb3B5KQpAQCAtNTAsNyArNTAsNiBAQCB2
b2lkIGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVPZmZzZXQoCiAgICAgY2FzZSBvcF9uZXdfb2JqZWN0
OgogICAgIGNhc2Ugb3BfZW50ZXI6CiAgICAgY2FzZSBvcF9jYXRjaDoKLSAgICBjYXNlIG9wX3Rv
dWNoX2VudHJ5OgogICAgIGNhc2Ugb3BfcHJvZmlsZV9jb250cm9sX2Zsb3c6CiAgICAgY2FzZSBv
cF9jcmVhdGVfZGlyZWN0X2FyZ3VtZW50czoKICAgICBjYXNlIG9wX2NyZWF0ZV9vdXRfb2ZfYmFu
ZF9hcmd1bWVudHM6CkBAIC0yNzgsNyArMjc3LDYgQEAgdm9pZCBjb21wdXRlRGVmc0ZvckJ5dGVj
b2RlT2Zmc2V0KENvZGVCbAogICAgIGNhc2Ugb3BfcHV0X2J5X2luZGV4OgogICAgIGNhc2Ugb3Bf
cHJvZmlsZV90eXBlOgogICAgIGNhc2Ugb3BfcHJvZmlsZV9jb250cm9sX2Zsb3c6Ci0gICAgY2Fz
ZSBvcF90b3VjaF9lbnRyeToKICAgICBjYXNlIG9wX3B1dF90b19hcmd1bWVudHM6CiAjZGVmaW5l
IExMSU5UX0hFTFBFUl9PUENPREVTKG9wY29kZSwgbGVuZ3RoKSBjYXNlIG9wY29kZToKICAgICAg
ICAgRk9SX0VBQ0hfTExJTlRfT1BDT0RFX0VYVEVOU0lPTihMTElOVF9IRUxQRVJfT1BDT0RFUyk7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAko
cmV2aXNpb24gMTgyNDk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVC
bG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc1OCwxMCArNzU4LDYgQEAgdm9pZCBDb2RlQmxv
Y2s6OmR1bXBCeXRlY29kZSgKICAgICAgICAgICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4
ZWMsIGxvY2F0aW9uLCBpdCwgImVudGVyIik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
fQotICAgICAgICBjYXNlIG9wX3RvdWNoX2VudHJ5OiB7Ci0gICAgICAgICAgICBwcmludExvY2F0
aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlvbiwgaXQsICJ0b3VjaF9lbnRyeSIpOwotICAgICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgIH0KICAgICAgICAgY2FzZSBvcF9jcmVhdGVfbGV4aWNhbF9l
bnZpcm9ubWVudDogewogICAgICAgICAgICAgaW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7CiAg
ICAgICAgICAgICBpbnQgcjEgPSAoKytpdCktPnUub3BlcmFuZDsKQEAgLTE5NTcsNyArMTk1Myw3
IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFNjcmlwdEV4ZWN1dGFibGUqIG8KICAgICAgICAgICAg
IGluc3RydWN0aW9uc1tpICsgNF0udS5vcGVyYW5kID0gb3AudHlwZTsKICAgICAgICAgICAgIGlu
c3RydWN0aW9uc1tpICsgNV0udS5vcGVyYW5kID0gb3AuZGVwdGg7CiAgICAgICAgICAgICBpZiAo
b3AubGV4aWNhbEVudmlyb25tZW50KQotICAgICAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsg
Nl0udS5sZXhpY2FsRW52aXJvbm1lbnQuc2V0KCp2bSgpLCBvd25lckV4ZWN1dGFibGUsIG9wLmxl
eGljYWxFbnZpcm9ubWVudCk7CisgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyA2XS51
LnN5bWJvbFRhYmxlLnNldCgqdm0oKSwgb3duZXJFeGVjdXRhYmxlLCBvcC5sZXhpY2FsRW52aXJv
bm1lbnQtPnN5bWJvbFRhYmxlKCkpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIApA
QCAtMTk4NSw3ICsxOTgxLDYgQEAgQ29kZUJsb2NrOjpDb2RlQmxvY2soU2NyaXB0RXhlY3V0YWJs
ZSogbwogICAgICAgICAgICAgZWxzZSBpZiAob3Auc3RydWN0dXJlKQogICAgICAgICAgICAgICAg
IGluc3RydWN0aW9uc1tpICsgNV0udS5zdHJ1Y3R1cmUuc2V0KCp2bSgpLCBvd25lckV4ZWN1dGFi
bGUsIG9wLnN0cnVjdHVyZSk7CiAgICAgICAgICAgICBpbnN0cnVjdGlvbnNbaSArIDZdLnUucG9p
bnRlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KG9wLm9wZXJhbmQpOwotCiAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQogCkBAIC0yMDAxLDcgKzE5OTYsNyBAQCBDb2RlQmxvY2s6OkNv
ZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBvCiAgICAgICAgICAgICAgICAgICAgIENvbmN1cnJl
bnRKSVRMb2NrZXIgbG9ja2VyKG1fc3ltYm9sVGFibGUtPm1fbG9jayk7CiAgICAgICAgICAgICAg
ICAgICAgIFN5bWJvbFRhYmxlOjpNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX3N5bWJvbFRhYmxlLT5m
aW5kKGxvY2tlciwgdWlkKTsKICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGl0ZXIgIT0gbV9z
eW1ib2xUYWJsZS0+ZW5kKGxvY2tlcikpOwotICAgICAgICAgICAgICAgICAgICBpdGVyLT52YWx1
ZS5wcmVwYXJlVG9XYXRjaChzeW1ib2xUYWJsZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgaXRl
ci0+dmFsdWUucHJlcGFyZVRvV2F0Y2goKTsKICAgICAgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rp
b25zW2kgKyA1XS51LndhdGNocG9pbnRTZXQgPSBpdGVyLT52YWx1ZS53YXRjaHBvaW50U2V0KCk7
CiAgICAgICAgICAgICAgICAgfSBlbHNlCiAgICAgICAgICAgICAgICAgICAgIGluc3RydWN0aW9u
c1tpICsgNV0udS53YXRjaHBvaW50U2V0ID0gbnVsbHB0cjsKQEAgLTI1NDYsMTIgKzI1NDEsMTUg
QEAgdm9pZCBDb2RlQmxvY2s6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KAogICAgICAgICAgICAg
ICAgICAgICBjdXJJbnN0cnVjdGlvblszXS51LnRvVGhpc1N0YXR1cywgVG9UaGlzQ2xlYXJlZEJ5
R0MpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgY2FzZSBvcF9yZXNvbHZl
X3Njb3BlOiB7Ci0gICAgICAgICAgICAgICAgV3JpdGVCYXJyaWVyQmFzZTxKU0xleGljYWxFbnZp
cm9ubWVudD4mIGxleGljYWxFbnZpcm9ubWVudCA9IGN1ckluc3RydWN0aW9uWzZdLnUubGV4aWNh
bEVudmlyb25tZW50OwotICAgICAgICAgICAgICAgIGlmICghbGV4aWNhbEVudmlyb25tZW50IHx8
IEhlYXA6OmlzTWFya2VkKGxleGljYWxFbnZpcm9ubWVudC5nZXQoKSkpCisgICAgICAgICAgICAg
ICAgLy8gUmlnaHQgbm93IHRoaXMgaXNuJ3Qgc3RyaWN0bHkgbmVjZXNzYXJ5LiBBbnkgc3ltYm9s
IHRhYmxlcyB0aGF0IHRoaXMgd2lsbCByZWZlciB0bworICAgICAgICAgICAgICAgIC8vIGFyZSBm
b3Igb3V0ZXIgZnVuY3Rpb25zLCBhbmQgd2UgcmVmZXIgdG8gdGhvc2UgZnVuY3Rpb25zIHN0cm9u
Z2x5LCBhbmQgdGhleSByZWZlcgorICAgICAgICAgICAgICAgIC8vIHRvIHRoZSBzeW1ib2wgdGFi
bGUgc3Ryb25nbHkuIEJ1dCBpdCdzIG5pY2UgdG8gYmUgb24gdGhlIHNhZmUgc2lkZS4KKyAgICAg
ICAgICAgICAgICBXcml0ZUJhcnJpZXJCYXNlPFN5bWJvbFRhYmxlPiYgc3ltYm9sVGFibGUgPSBj
dXJJbnN0cnVjdGlvbls2XS51LnN5bWJvbFRhYmxlOworICAgICAgICAgICAgICAgIGlmICghc3lt
Ym9sVGFibGUgfHwgSGVhcDo6aXNNYXJrZWQoc3ltYm9sVGFibGUuZ2V0KCkpKQogICAgICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9T
UigpKQotICAgICAgICAgICAgICAgICAgICBkYXRhTG9nRigiQ2xlYXJpbmcgZGVhZCBsZXhpY2Fs
RW52aXJvbm1lbnQgJXAuXG4iLCBsZXhpY2FsRW52aXJvbm1lbnQuZ2V0KCkpOwotICAgICAgICAg
ICAgICAgIGxleGljYWxFbnZpcm9ubWVudC5jbGVhcigpOworICAgICAgICAgICAgICAgICAgICBk
YXRhTG9nRigiQ2xlYXJpbmcgZGVhZCBzeW1ib2xUYWJsZSAlcC5cbiIsIHN5bWJvbFRhYmxlLmdl
dCgpKTsKKyAgICAgICAgICAgICAgICBzeW1ib2xUYWJsZS5jbGVhcigpOwogICAgICAgICAgICAg
ICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgY2FzZSBvcF9nZXRfZnJvbV9z
Y29wZToKQEAgLTM4MTUsNiArMzgxMywxOCBAQCBTdHJpbmcgQ29kZUJsb2NrOjpuYW1lRm9yUmVn
aXN0ZXIoVmlydHVhCiAgICAgcmV0dXJuICIiOwogfQogCitWYWx1ZVByb2ZpbGUqIENvZGVCbG9j
azo6dmFsdWVQcm9maWxlRm9yQnl0ZWNvZGVPZmZzZXQoaW50IGJ5dGVjb2RlT2Zmc2V0KQorewor
ICAgIFZhbHVlUHJvZmlsZSogcmVzdWx0ID0gYmluYXJ5U2VhcmNoPFZhbHVlUHJvZmlsZSwgaW50
PigKKyAgICAgICAgbV92YWx1ZVByb2ZpbGVzLCBtX3ZhbHVlUHJvZmlsZXMuc2l6ZSgpLCBieXRl
Y29kZU9mZnNldCwKKyAgICAgICAgZ2V0VmFsdWVQcm9maWxlQnl0ZWNvZGVPZmZzZXQ8VmFsdWVQ
cm9maWxlPik7CisgICAgQVNTRVJUKHJlc3VsdC0+bV9ieXRlY29kZU9mZnNldCAhPSAtMSk7Cisg
ICAgQVNTRVJUKGluc3RydWN0aW9ucygpW2J5dGVjb2RlT2Zmc2V0ICsgb3Bjb2RlTGVuZ3RoKAor
ICAgICAgICBtX3ZtLT5pbnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQoCisgICAgICAgICAgICBpbnN0
cnVjdGlvbnMoKVtieXRlY29kZU9mZnNldF0udS5vcGNvZGUpKSAtIDFdLnUucHJvZmlsZSA9PSBy
ZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKIHZvaWQgQ29kZUJsb2NrOjp2YWxpZGF0
ZSgpCiB7CiAgICAgQnl0ZWNvZGVMaXZlbmVzc0FuYWx5c2lzIGxpdmVuZXNzKHRoaXMpOyAvLyBD
b21wdXRlIGRpcmVjdGx5IGZyb20gc2NyYXRjaCBzbyBpdCBkb2Vzbid0IGVmZmVjdCBDb2RlQmxv
Y2sgZm9vdHByaW50LgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVC
bG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2Rl
QmxvY2suaAkocmV2aXNpb24gMTgyNDk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNvcHkpCkBAIC0zODYsMTcgKzM4Niw3IEBAIHB1Ymxp
YzoKIAogICAgIHVuc2lnbmVkIG51bWJlck9mVmFsdWVQcm9maWxlcygpIHsgcmV0dXJuIG1fdmFs
dWVQcm9maWxlcy5zaXplKCk7IH0KICAgICBWYWx1ZVByb2ZpbGUqIHZhbHVlUHJvZmlsZShpbnQg
aW5kZXgpIHsgcmV0dXJuICZtX3ZhbHVlUHJvZmlsZXNbaW5kZXhdOyB9Ci0gICAgVmFsdWVQcm9m
aWxlKiB2YWx1ZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChpbnQgYnl0ZWNvZGVPZmZzZXQpCi0g
ICAgewotICAgICAgICBWYWx1ZVByb2ZpbGUqIHJlc3VsdCA9IGJpbmFyeVNlYXJjaDxWYWx1ZVBy
b2ZpbGUsIGludD4oCi0gICAgICAgICAgICBtX3ZhbHVlUHJvZmlsZXMsIG1fdmFsdWVQcm9maWxl
cy5zaXplKCksIGJ5dGVjb2RlT2Zmc2V0LAotICAgICAgICAgICAgZ2V0VmFsdWVQcm9maWxlQnl0
ZWNvZGVPZmZzZXQ8VmFsdWVQcm9maWxlPik7Ci0gICAgICAgIEFTU0VSVChyZXN1bHQtPm1fYnl0
ZWNvZGVPZmZzZXQgIT0gLTEpOwotICAgICAgICBBU1NFUlQoaW5zdHJ1Y3Rpb25zKClbYnl0ZWNv
ZGVPZmZzZXQgKyBvcGNvZGVMZW5ndGgoCi0gICAgICAgICAgICBtX3ZtLT5pbnRlcnByZXRlci0+
Z2V0T3Bjb2RlSUQoCi0gICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zKClbYnl0ZWNvZGVPZmZz
ZXRdLnUub3Bjb2RlKSkgLSAxXS51LnByb2ZpbGUgPT0gcmVzdWx0KTsKLSAgICAgICAgcmV0dXJu
IHJlc3VsdDsKLSAgICB9CisgICAgVmFsdWVQcm9maWxlKiB2YWx1ZVByb2ZpbGVGb3JCeXRlY29k
ZU9mZnNldChpbnQgYnl0ZWNvZGVPZmZzZXQpOwogICAgIFNwZWN1bGF0ZWRUeXBlIHZhbHVlUHJv
ZmlsZVByZWRpY3Rpb25Gb3JCeXRlY29kZU9mZnNldChjb25zdCBDb25jdXJyZW50SklUTG9ja2Vy
JiBsb2NrZXIsIGludCBieXRlY29kZU9mZnNldCkKICAgICB7CiAgICAgICAgIHJldHVybiB2YWx1
ZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChieXRlY29kZU9mZnNldCktPmNvbXB1dGVVcGRhdGVk
UHJlZGljdGlvbihsb2NrZXIpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0NvZGVPcmlnaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlT3JpZ2luLmNwcAkocmV2aXNpb24gMTgyNDk4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDEsNiAr
MTQxLDE4IEBAIHZvaWQgQ29kZU9yaWdpbjo6ZHVtcEluQ29udGV4dChQcmludFN0cmUKICAgICBk
dW1wKG91dCk7CiB9CiAKK0pTRnVuY3Rpb24qIElubGluZUNhbGxGcmFtZTo6Y2FsbGVlQ29uc3Rh
bnQoKSBjb25zdAoreworICAgIGlmIChjYWxsZWVSZWNvdmVyeS5pc0NvbnN0YW50KCkpCisgICAg
ICAgIHJldHVybiBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNhbGxlZVJlY292ZXJ5LmNvbnN0YW50KCkp
OworICAgIHJldHVybiBudWxscHRyOworfQorCit2b2lkIElubGluZUNhbGxGcmFtZTo6dmlzaXRB
Z2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgdmlzaXRvci5hcHBlbmQoJmV4
ZWN1dGFibGUpOworfQorCiBKU0Z1bmN0aW9uKiBJbmxpbmVDYWxsRnJhbWU6OmNhbGxlZUZvckNh
bGxGcmFtZShFeGVjU3RhdGUqIGV4ZWMpIGNvbnN0CiB7CiAgICAgcmV0dXJuIGpzQ2FzdDxKU0Z1
bmN0aW9uKj4oY2FsbGVlUmVjb3ZlcnkucmVjb3ZlcihleGVjKSk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9yaWdpbi5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmgJKHJldmlzaW9uIDE4MjQ5OCkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI4LDcgKzI4LDYgQEAKIAogI2luY2x1ZGUgIkNvZGVCbG9ja0hhc2guaCIKICNpbmNs
dWRlICJDb2RlU3BlY2lhbGl6YXRpb25LaW5kLmgiCi0jaW5jbHVkZSAiSlNGdW5jdGlvbi5oIgog
I2luY2x1ZGUgIlZhbHVlUmVjb3ZlcnkuaCIKICNpbmNsdWRlICJXcml0ZUJhcnJpZXIuaCIKICNp
bmNsdWRlIDx3dGYvQml0VmVjdG9yLmg+CkBAIC0yMDcsMTcgKzIwNiw4IEBAIHN0cnVjdCBJbmxp
bmVDYWxsRnJhbWUgewogICAgIAogICAgIENvZGVTcGVjaWFsaXphdGlvbktpbmQgc3BlY2lhbGl6
YXRpb25LaW5kKCkgY29uc3QgeyByZXR1cm4gc3BlY2lhbGl6YXRpb25LaW5kRm9yKHN0YXRpY19j
YXN0PEtpbmQ+KGtpbmQpKTsgfQogCi0gICAgSlNGdW5jdGlvbiogY2FsbGVlQ29uc3RhbnQoKSBj
b25zdAotICAgIHsKLSAgICAgICAgaWYgKGNhbGxlZVJlY292ZXJ5LmlzQ29uc3RhbnQoKSkKLSAg
ICAgICAgICAgIHJldHVybiBqc0Nhc3Q8SlNGdW5jdGlvbio+KGNhbGxlZVJlY292ZXJ5LmNvbnN0
YW50KCkpOwotICAgICAgICByZXR1cm4gMDsKLSAgICB9Ci0KLSAgICB2b2lkIHZpc2l0QWdncmVn
YXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQotICAgIHsKLSAgICAgICAgdmlzaXRvci5hcHBlbmQo
JmV4ZWN1dGFibGUpOwotICAgIH0KKyAgICBKU0Z1bmN0aW9uKiBjYWxsZWVDb25zdGFudCgpIGNv
bnN0OworICAgIHZvaWQgdmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImKTsKICAgICAKICAgICAv
LyBHZXQgdGhlIGNhbGxlZSBnaXZlbiBhIG1hY2hpbmUgY2FsbCBmcmFtZSB0byB3aGljaCB0aGlz
IElubGluZUNhbGxGcmFtZSBiZWxvbmdzLgogICAgIEpTRnVuY3Rpb24qIGNhbGxlZUZvckNhbGxG
cmFtZShFeGVjU3RhdGUqKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9JbnN0cnVjdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9JbnN0cnVjdGlvbi5oCShyZXZpc2lvbiAxODI0OTgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvSW5zdHJ1Y3Rpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiAr
MzIsNyBAQAogI2luY2x1ZGUgIkJhc2ljQmxvY2tMb2NhdGlvbi5oIgogI2luY2x1ZGUgIk1hY3Jv
QXNzZW1ibGVyLmgiCiAjaW5jbHVkZSAiT3Bjb2RlLmgiCisjaW5jbHVkZSAiU3ltYm9sVGFibGUu
aCIKICNpbmNsdWRlICJUeXBlTG9jYXRpb24uaCIKICNpbmNsdWRlICJQcm9wZXJ0eVNsb3QuaCIK
ICNpbmNsdWRlICJTcGVjaWFsUG9pbnRlci5oIgpAQCAtNDYsNyArNDcsNyBAQCBuYW1lc3BhY2Ug
SlNDIHsKIGNsYXNzIEFycmF5QWxsb2NhdGlvblByb2ZpbGU7CiBjbGFzcyBBcnJheVByb2ZpbGU7
CiBjbGFzcyBPYmplY3RBbGxvY2F0aW9uUHJvZmlsZTsKLWNsYXNzIFZhcmlhYmxlV2F0Y2hwb2lu
dFNldDsKK2NsYXNzIFdhdGNocG9pbnRTZXQ7CiBzdHJ1Y3QgTExJbnRDYWxsTGlua0luZm87CiBz
dHJ1Y3QgVmFsdWVQcm9maWxlOwogCkBAIC0xMDYsNiArMTA3LDcgQEAgc3RydWN0IEluc3RydWN0
aW9uIHsKICAgICAgICAgT3Bjb2RlIG9wY29kZTsKICAgICAgICAgaW50IG9wZXJhbmQ7CiAgICAg
ICAgIFdyaXRlQmFycmllckJhc2U8U3RydWN0dXJlPiBzdHJ1Y3R1cmU7CisgICAgICAgIFdyaXRl
QmFycmllckJhc2U8U3ltYm9sVGFibGU+IHN5bWJvbFRhYmxlOwogICAgICAgICBXcml0ZUJhcnJp
ZXJCYXNlPFN0cnVjdHVyZUNoYWluPiBzdHJ1Y3R1cmVDaGFpbjsKICAgICAgICAgV3JpdGVCYXJy
aWVyQmFzZTxKU0NlbGw+IGpzQ2VsbDsKICAgICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiB2
YXJpYWJsZVBvaW50ZXI7CkBAIC0xMTcsOCArMTE5LDcgQEAgc3RydWN0IEluc3RydWN0aW9uIHsK
ICAgICAgICAgQXJyYXlQcm9maWxlKiBhcnJheVByb2ZpbGU7CiAgICAgICAgIEFycmF5QWxsb2Nh
dGlvblByb2ZpbGUqIGFycmF5QWxsb2NhdGlvblByb2ZpbGU7CiAgICAgICAgIE9iamVjdEFsbG9j
YXRpb25Qcm9maWxlKiBvYmplY3RBbGxvY2F0aW9uUHJvZmlsZTsKLSAgICAgICAgVmFyaWFibGVX
YXRjaHBvaW50U2V0KiB3YXRjaHBvaW50U2V0OwotICAgICAgICBXcml0ZUJhcnJpZXJCYXNlPEpT
TGV4aWNhbEVudmlyb25tZW50PiBsZXhpY2FsRW52aXJvbm1lbnQ7CisgICAgICAgIFdhdGNocG9p
bnRTZXQqIHdhdGNocG9pbnRTZXQ7CiAgICAgICAgIHZvaWQqIHBvaW50ZXI7CiAgICAgICAgIGJv
b2wqIHByZWRpY2F0ZVBvaW50ZXI7CiAgICAgICAgIFRvVGhpc1N0YXR1cyB0b1RoaXNTdGF0dXM7
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFyaWFibGVXYXRjaHBvaW50
U2V0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFy
aWFibGVXYXRjaHBvaW50U2V0LmNwcAkocmV2aXNpb24gMTgyNDk4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1ZhcmlhYmxlV2F0Y2hwb2ludFNldC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTEsNDkgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiVmFyaWFibGVXYXRjaHBv
aW50U2V0LmgiCi0KLSNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCi0KLW5hbWVzcGFjZSBKU0Mgewot
Ci12b2lkIFZhcmlhYmxlV3JpdGVGaXJlRGV0YWlsOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNv
bnN0Ci17Ci0gICAgb3V0LnByaW50KCJXcml0ZSB0byAiLCBtX25hbWUsICIgaW4gIiwgSlNWYWx1
ZShtX29iamVjdCkpOwotfQotCi12b2lkIFZhcmlhYmxlV2F0Y2hwb2ludFNldDo6bm90aWZ5V3Jp
dGUoVk0mIHZtLCBKU1ZhbHVlIHZhbHVlLCBKU09iamVjdCogYmFzZU9iamVjdCwgY29uc3QgUHJv
cGVydHlOYW1lJiBwcm9wZXJ0eU5hbWUpCi17Ci0gICAgbm90aWZ5V3JpdGUodm0sIHZhbHVlLCBW
YXJpYWJsZVdyaXRlRmlyZURldGFpbChiYXNlT2JqZWN0LCBwcm9wZXJ0eU5hbWUpKTsKLX0KLQot
dm9pZCBWYXJpYWJsZVdhdGNocG9pbnRTZXQ6Om5vdGlmeVdyaXRlKFZNJiB2bSwgSlNWYWx1ZSB2
YWx1ZSwgY29uc3QgY2hhciogcmVhc29uKQotewotICAgIG5vdGlmeVdyaXRlKHZtLCB2YWx1ZSwg
U3RyaW5nRmlyZURldGFpbChyZWFzb24pKTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYXJpYWJsZVdhdGNocG9pbnRTZXQu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFyaWFibGVX
YXRjaHBvaW50U2V0LmgJKHJldmlzaW9uIDE4MjQ5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9WYXJpYWJsZVdhdGNocG9pbnRTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMSwx
MTAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMi0yMDE0IEFwcGxlIEluYy4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJl
IG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQotICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KLSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgot
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAot
ICovCi0KLSNpZm5kZWYgVmFyaWFibGVXYXRjaHBvaW50U2V0X2gKLSNkZWZpbmUgVmFyaWFibGVX
YXRjaHBvaW50U2V0X2gKLQotI2luY2x1ZGUgIldhdGNocG9pbnQuaCIKLSNpbmNsdWRlICJXcml0
ZUJhcnJpZXIuaCIKLQotbmFtZXNwYWNlIEpTQyB7Ci0KLWNsYXNzIEpTT2JqZWN0OwotY2xhc3Mg
U3ltYm9sVGFibGU7Ci0KLWNsYXNzIFZhcmlhYmxlV3JpdGVGaXJlRGV0YWlsIDogcHVibGljIEZp
cmVEZXRhaWwgewotcHVibGljOgotICAgIFZhcmlhYmxlV3JpdGVGaXJlRGV0YWlsKEpTT2JqZWN0
KiBvYmplY3QsIGNvbnN0IFByb3BlcnR5TmFtZSYgbmFtZSkKLSAgICAgICAgOiBtX29iamVjdChv
YmplY3QpCi0gICAgICAgICwgbV9uYW1lKG5hbWUpCi0gICAgewotICAgIH0KLSAgICAKLSAgICB2
aXJ0dWFsIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOwotCi1wcml2YXRl
OgotICAgIEpTT2JqZWN0KiBtX29iamVjdDsKLSAgICBjb25zdCBQcm9wZXJ0eU5hbWUmIG1fbmFt
ZTsKLX07Ci0KLWNsYXNzIFZhcmlhYmxlV2F0Y2hwb2ludFNldCA6IHB1YmxpYyBXYXRjaHBvaW50
U2V0IHsKLSAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwotcHVibGljOgot
ICAgIFZhcmlhYmxlV2F0Y2hwb2ludFNldChTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUpCi0gICAg
ICAgIDogV2F0Y2hwb2ludFNldChDbGVhcldhdGNocG9pbnQpCi0gICAgICAgICwgbV9zeW1ib2xU
YWJsZShzeW1ib2xUYWJsZSkKLSAgICB7Ci0gICAgfQotICAgIAotICAgIH5WYXJpYWJsZVdhdGNo
cG9pbnRTZXQoKSB7IH0KLSAgICAKLSAgICAvLyBGb3IgdGhlIHB1cnBvc2Ugb2YgZGVjaWRpbmcg
d2hldGhlciBvciBub3QgdG8gd2F0Y2ggdGhpcyB2YXJpYWJsZSwgeW91IG9ubHkgbmVlZAotICAg
IC8vIHRvIGluc3BlY3QgaW5mZXJyZWRWYWx1ZSgpLiBJZiB0aGlzIHJldHVybnMgc29tZXRoaW5n
IG90aGVyIHRoYW4gdGhlIGVtcHR5Ci0gICAgLy8gdmFsdWUsIHRoZW4gaXQgbWVhbnMgdGhhdCBh
dCBhbGwgZnV0dXJlIHNhZmVwb2ludHMsIHRoaXMgd2F0Y2hwb2ludCBzZXQgd2lsbCBiZQotICAg
IC8vIGluIG9uZSBvZiB0aGVzZSBzdGF0ZXM6Ci0gICAgLy8KLSAgICAvLyAgICBJc1dhdGNoZWQ6
IGluIHRoaXMgY2FzZSwgdGhlIHZhcmlhYmxlJ3MgdmFsdWUgbXVzdCBzdGlsbCBiZSB0aGUKLSAg
ICAvLyAgICAgICAgaW5mZXJyZWRWYWx1ZS4KLSAgICAvLwotICAgIC8vICAgIElzSW52YWxpZGF0
ZWQ6IGluIHRoaXMgY2FzZSB0aGUgdmFyaWFibGUncyB2YWx1ZSBtYXkgYmUgYW55dGhpbmcgYnV0
IHlvdSdsbAotICAgIC8vICAgICAgICBlaXRoZXIgbm90aWNlIHRoYXQgaXQncyBpbnZhbGlkYXRl
ZCBhbmQgbm90IGluc3RhbGwgdGhlIHdhdGNocG9pbnQsIG9yCi0gICAgLy8gICAgICAgIHlvdSB3
aWxsIGhhdmUgYmVlbiBub3RpZmllZCB0aGF0IHRoZSB3YXRjaHBvaW50IHdhcyBmaXJlZC4KLSAg
ICBKU1ZhbHVlIGluZmVycmVkVmFsdWUoKSBjb25zdCB7IHJldHVybiBtX2luZmVycmVkVmFsdWUu
Z2V0KCk7IH0KLSAgICAKLSAgICB2b2lkIG5vdGlmeVdyaXRlKFZNJiwgSlNWYWx1ZSwgY29uc3Qg
RmlyZURldGFpbCYpOwotICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgbm90aWZ5V3JpdGUoVk0m
LCBKU1ZhbHVlLCBKU09iamVjdCogYmFzZU9iamVjdCwgY29uc3QgUHJvcGVydHlOYW1lJik7Ci0g
ICAgdm9pZCBub3RpZnlXcml0ZShWTSYsIEpTVmFsdWUsIGNvbnN0IGNoYXIqIHJlYXNvbik7Ci0g
ICAgCi0gICAgdm9pZCBpbnZhbGlkYXRlKGNvbnN0IEZpcmVEZXRhaWwmIGRldGFpbCkKLSAgICB7
Ci0gICAgICAgIG1faW5mZXJyZWRWYWx1ZS5jbGVhcigpOwotICAgICAgICBXYXRjaHBvaW50U2V0
OjppbnZhbGlkYXRlKGRldGFpbCk7Ci0gICAgfQotICAgIAotICAgIHZvaWQgZmluYWxpemVVbmNv
bmRpdGlvbmFsbHkoY29uc3QgRmlyZURldGFpbCYgZGV0YWlsKQotICAgIHsKLSAgICAgICAgQVNT
RVJUKCEhbV9pbmZlcnJlZFZhbHVlID09IChzdGF0ZSgpID09IElzV2F0Y2hlZCkpOwotICAgICAg
ICBpZiAoIW1faW5mZXJyZWRWYWx1ZSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgSlNW
YWx1ZSBpbmZlcnJlZFZhbHVlID0gbV9pbmZlcnJlZFZhbHVlLmdldCgpOwotICAgICAgICBpZiAo
IWluZmVycmVkVmFsdWUuaXNDZWxsKCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIEpT
Q2VsbCogY2VsbCA9IGluZmVycmVkVmFsdWUuYXNDZWxsKCk7Ci0gICAgICAgIGlmIChIZWFwOjpp
c01hcmtlZChjZWxsKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgaW52YWxpZGF0ZShk
ZXRhaWwpOwotICAgIH0KLQotICAgIFdyaXRlQmFycmllcjxVbmtub3duPiogYWRkcmVzc09mSW5m
ZXJyZWRWYWx1ZSgpIHsgcmV0dXJuICZtX2luZmVycmVkVmFsdWU7IH0KLSAgICAKLXByaXZhdGU6
Ci0gICAgU3ltYm9sVGFibGUmIG1fc3ltYm9sVGFibGU7Ci0gICAgV3JpdGVCYXJyaWVyPFVua25v
d24+IG1faW5mZXJyZWRWYWx1ZTsKLX07Ci0KLX0gLy8gbmFtZXNwYWNlIEpTQwotCi0jZW5kaWYg
Ly8gVmFyaWFibGVXYXRjaHBvaW50U2V0X2gKLQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL1ZhcmlhYmxlV2F0Y2hwb2ludFNldElubGluZXMuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFyaWFibGVXYXRjaHBvaW50U2V0SW5saW5l
cy5oCShyZXZpc2lvbiAxODI0OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
VmFyaWFibGVXYXRjaHBvaW50U2V0SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYwICsw
LDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5h
cnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVk
IHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICog
MS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBj
b3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9y
bSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0g
KiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0
aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQ
TEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJ
RVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFO
VElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICog
UFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IK
LSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJ
REVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMg
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJ
VFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRT
OyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhF
T1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJ
VFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJ
TkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJ
RiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lm
bmRlZiBWYXJpYWJsZVdhdGNocG9pbnRTZXRJbmxpbmVzX2gKLSNkZWZpbmUgVmFyaWFibGVXYXRj
aHBvaW50U2V0SW5saW5lc19oCi0KLSNpbmNsdWRlICJTeW1ib2xUYWJsZS5oIgotI2luY2x1ZGUg
IlZhcmlhYmxlV2F0Y2hwb2ludFNldC5oIgotCi1uYW1lc3BhY2UgSlNDIHsKLQotaW5saW5lIHZv
aWQgVmFyaWFibGVXYXRjaHBvaW50U2V0Ojpub3RpZnlXcml0ZShWTSYgdm0sIEpTVmFsdWUgdmFs
dWUsIGNvbnN0IEZpcmVEZXRhaWwmIGRldGFpbCkKLXsKLSAgICBBU1NFUlQoISF2YWx1ZSk7Ci0g
ICAgc3dpdGNoIChzdGF0ZSgpKSB7Ci0gICAgY2FzZSBDbGVhcldhdGNocG9pbnQ6Ci0gICAgICAg
IG1faW5mZXJyZWRWYWx1ZS5zZXQodm0sICZtX3N5bWJvbFRhYmxlLCB2YWx1ZSk7Ci0gICAgICAg
IHN0YXJ0V2F0Y2hpbmcoKTsKLSAgICAgICAgcmV0dXJuOwotCi0gICAgY2FzZSBJc1dhdGNoZWQ6
Ci0gICAgICAgIEFTU0VSVCghIW1faW5mZXJyZWRWYWx1ZSk7Ci0gICAgICAgIGlmICh2YWx1ZSA9
PSBtX2luZmVycmVkVmFsdWUuZ2V0KCkpCi0gICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlu
dmFsaWRhdGUoZGV0YWlsKTsKLSAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgCi0gICAgY2Fz
ZSBJc0ludmFsaWRhdGVkOgotICAgICAgICBBU1NFUlQoIW1faW5mZXJyZWRWYWx1ZSk7Ci0gICAg
ICAgIHJldHVybjsKLSAgICB9Ci0gICAgICAgIAotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwot
fQotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotI2VuZGlmIC8vIFZhcmlhYmxlV2F0Y2hwb2ludFNl
dElubGluZXNfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhcmlhYmxl
V3JpdGVGaXJlRGV0YWlsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvVmFyaWFibGVXcml0ZUZpcmVEZXRhaWwuY3BwCShyZXZpc2lvbiAwKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhcmlhYmxlV3JpdGVGaXJlRGV0YWlsLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ0IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1
IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJWYXJp
YWJsZVdyaXRlRmlyZURldGFpbC5oIgorCisjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgorCituYW1l
c3BhY2UgSlNDIHsKKwordm9pZCBWYXJpYWJsZVdyaXRlRmlyZURldGFpbDo6ZHVtcChQcmludFN0
cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgiV3JpdGUgdG8gIiwgbV9uYW1lLCAi
IGluICIsIEpTVmFsdWUobV9vYmplY3QpKTsKK30KKwordm9pZCBWYXJpYWJsZVdyaXRlRmlyZURl
dGFpbDo6dG91Y2goV2F0Y2hwb2ludFNldCogc2V0LCBKU09iamVjdCogb2JqZWN0LCBjb25zdCBQ
cm9wZXJ0eU5hbWUmIG5hbWUpCit7CisgICAgc2V0LT50b3VjaChWYXJpYWJsZVdyaXRlRmlyZURl
dGFpbChvYmplY3QsIG5hbWUpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYXJpYWJsZVdyaXRlRmlyZURldGFpbC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYXJpYWJsZVdyaXRl
RmlyZURldGFpbC5oCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1ZhcmlhYmxlV3JpdGVGaXJlRGV0YWlsLmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1
NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZu
ZGVmIFZhcmlhYmxlV3JpdGVGaXJlRGV0YWlsX2gKKyNkZWZpbmUgVmFyaWFibGVXcml0ZUZpcmVE
ZXRhaWxfaAorCisjaW5jbHVkZSAiV2F0Y2hwb2ludC5oIgorCituYW1lc3BhY2UgSlNDIHsKKwor
Y2xhc3MgSlNPYmplY3Q7CitjbGFzcyBQcm9wZXJ0eU5hbWU7CisKK2NsYXNzIFZhcmlhYmxlV3Jp
dGVGaXJlRGV0YWlsIDogcHVibGljIEZpcmVEZXRhaWwgeworcHVibGljOgorICAgIFZhcmlhYmxl
V3JpdGVGaXJlRGV0YWlsKEpTT2JqZWN0KiBvYmplY3QsIGNvbnN0IFByb3BlcnR5TmFtZSYgbmFt
ZSkKKyAgICAgICAgOiBtX29iamVjdChvYmplY3QpCisgICAgICAgICwgbV9uYW1lKG5hbWUpCisg
ICAgeworICAgIH0KKyAgICAKKyAgICB2aXJ0dWFsIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNv
bnN0IG92ZXJyaWRlOworICAgIAorICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHRv
dWNoKFdhdGNocG9pbnRTZXQqLCBKU09iamVjdCosIGNvbnN0IFByb3BlcnR5TmFtZSYpOworCitw
cml2YXRlOgorICAgIEpTT2JqZWN0KiBtX29iamVjdDsKKyAgICBjb25zdCBQcm9wZXJ0eU5hbWUm
IG1fbmFtZTsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gVmFyaWFibGVX
cml0ZUZpcmVEZXRhaWxfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1dh
dGNocG9pbnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUv
V2F0Y2hwb2ludC5oCShyZXZpc2lvbiAxODI0OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvV2F0Y2hwb2ludC5oCSh3b3JraW5nIGNvcHkpCkBAIC04Nyw2ICs4NywxMiBAQCBw
dWJsaWM6CiAgICAgSlNfRVhQT1JUX1BSSVZBVEUgV2F0Y2hwb2ludFNldChXYXRjaHBvaW50U3Rh
dGUpOwogICAgIEpTX0VYUE9SVF9QUklWQVRFIH5XYXRjaHBvaW50U2V0KCk7IC8vIE5vdGUgdGhh
dCB0aGlzIHdpbGwgbm90IGZpcmUgYW55IG9mIHRoZSB3YXRjaHBvaW50czsgaWYgeW91IG5lZWQg
dG8ga25vdyB3aGVuIGEgV2F0Y2hwb2ludFNldCBkaWVzIHRoZW4geW91IG5lZWQgYSBzZXBhcmF0
ZSBtZWNoYW5pc20gZm9yIHRoaXMuCiAgICAgCisgICAgLy8gRmFzdCB3YXkgb2YgZ2V0dGluZyB0
aGUgc3RhdGUsIHdoaWNoIG9ubHkgd29ya3MgZnJvbSB0aGUgbWFpbiB0aHJlYWQuCisgICAgV2F0
Y2hwb2ludFN0YXRlIHN0YXRlT25NYWluVGhyZWFkKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxXYXRjaHBvaW50U3RhdGU+KG1fc3RhdGUpOworICAgIH0KKyAgICAK
ICAgICAvLyBJdCBpcyBzYWZlIHRvIGNhbGwgdGhpcyBmcm9tIGFub3RoZXIgdGhyZWFkLiBJdCBt
YXkgcmV0dXJuIGFuIG9sZAogICAgIC8vIHN0YXRlLiBHdWFyYW50ZWVzIHRoYXQgaWYgKmZpcnN0
KiByZWFkIHRoZSBzdGF0ZSgpIG9mIHRoZSB0aGluZyBiZWluZwogICAgIC8vIHdhdGNoZWQgYW5k
IGl0IHJldHVybmVkIElzV2F0Y2hlZCBhbmQgKnNlY29uZCogeW91IGFjdHVhbGx5IHJlYWQgaXRz
CkBAIC0xMjUsMjAgKzEzMSwyNCBAQCBwdWJsaWM6CiAgICAgLy8gc2V0IHdhdGNocG9pbnRzIHRo
YXQgd2UgYmVsaWV2ZSB3aWxsIGFjdHVhbGx5IGJlIGZpcmVkLgogICAgIHZvaWQgc3RhcnRXYXRj
aGluZygpCiAgICAgewotICAgICAgICBBU1NFUlQoc3RhdGUoKSAhPSBJc0ludmFsaWRhdGVkKTsK
KyAgICAgICAgQVNTRVJUKG1fc3RhdGUgIT0gSXNJbnZhbGlkYXRlZCk7CisgICAgICAgIGlmICht
X3N0YXRlID09IElzV2F0Y2hlZCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgV1RGOjpz
dG9yZVN0b3JlRmVuY2UoKTsKICAgICAgICAgbV9zdGF0ZSA9IElzV2F0Y2hlZDsKKyAgICAgICAg
V1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBmaXJlQWxsKGNv
bnN0IEZpcmVEZXRhaWwmIGRldGFpbCkKICAgICB7Ci0gICAgICAgIGlmIChMSUtFTFkoc3RhdGUo
KSAhPSBJc1dhdGNoZWQpKQorICAgICAgICBpZiAoTElLRUxZKG1fc3RhdGUgIT0gSXNXYXRjaGVk
KSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgZmlyZUFsbFNsb3coZGV0YWlsKTsKICAg
ICB9CiAgICAgCiAgICAgdm9pZCBmaXJlQWxsKGNvbnN0IGNoYXIqIHJlYXNvbikKICAgICB7Ci0g
ICAgICAgIGlmIChMSUtFTFkoc3RhdGUoKSAhPSBJc1dhdGNoZWQpKQorICAgICAgICBpZiAoTElL
RUxZKG1fc3RhdGUgIT0gSXNXYXRjaGVkKSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAg
ZmlyZUFsbFNsb3cocmVhc29uKTsKICAgICB9CkBAIC0xNTEsMTMgKzE2MSwyMyBAQCBwdWJsaWM6
CiAgICAgICAgICAgICBmaXJlQWxsKGRldGFpbCk7CiAgICAgfQogICAgIAorICAgIHZvaWQgdG91
Y2goY29uc3QgY2hhciogcmVhc29uKQorICAgIHsKKyAgICAgICAgdG91Y2goU3RyaW5nRmlyZURl
dGFpbChyZWFzb24pKTsKKyAgICB9CisgICAgCiAgICAgdm9pZCBpbnZhbGlkYXRlKGNvbnN0IEZp
cmVEZXRhaWwmIGRldGFpbCkKICAgICB7CiAgICAgICAgIGlmIChzdGF0ZSgpID09IElzV2F0Y2hl
ZCkKICAgICAgICAgICAgIGZpcmVBbGwoZGV0YWlsKTsKICAgICAgICAgbV9zdGF0ZSA9IElzSW52
YWxpZGF0ZWQ7CiAgICAgfQotCisgICAgCisgICAgdm9pZCBpbnZhbGlkYXRlKGNvbnN0IGNoYXIq
IHJlYXNvbikKKyAgICB7CisgICAgICAgIGludmFsaWRhdGUoU3RyaW5nRmlyZURldGFpbChyZWFz
b24pKTsKKyAgICB9CisgICAgCiAgICAgaW50OF90KiBhZGRyZXNzT2ZTdGF0ZSgpIHsgcmV0dXJu
ICZtX3N0YXRlOyB9CiAgICAgaW50OF90KiBhZGRyZXNzT2ZTZXRJc05vdEVtcHR5KCkgeyByZXR1
cm4gJm1fc2V0SXNOb3RFbXB0eTsgfQogICAgIApAQCAtMjA5LDE4ICsyMjksMzQgQEAgcHVibGlj
OgogICAgICAgICBmcmVlRmF0KCk7CiAgICAgfQogICAgIAorICAgIC8vIEZhc3Qgd2F5IG9mIGdl
dHRpbmcgdGhlIHN0YXRlLCB3aGljaCBvbmx5IHdvcmtzIGZyb20gdGhlIG1haW4gdGhyZWFkLgor
ICAgIFdhdGNocG9pbnRTdGF0ZSBzdGF0ZU9uTWFpblRocmVhZCgpIGNvbnN0CisgICAgeworICAg
ICAgICB1aW50cHRyX3QgZGF0YSA9IG1fZGF0YTsKKyAgICAgICAgaWYgKGlzRmF0KGRhdGEpKQor
ICAgICAgICAgICAgcmV0dXJuIGZhdChkYXRhKS0+c3RhdGVPbk1haW5UaHJlYWQoKTsKKyAgICAg
ICAgcmV0dXJuIGRlY29kZVN0YXRlKGRhdGEpOworICAgIH0KKworICAgIC8vIEl0IGlzIHNhZmUg
dG8gY2FsbCB0aGlzIGZyb20gYW5vdGhlciB0aHJlYWQuIEl0IG1heSByZXR1cm4gYSBwcmlvciBz
dGF0ZSwKKyAgICAvLyBidXQgdGhhdCBzaG91bGQgYmUgZmluZSBzaW5jZSB5b3Ugc2hvdWxkIG9u
bHkgcGVyZm9ybSBhY3Rpb25zIGJhc2VkIG9uIHRoZQorICAgIC8vIHN0YXRlIGlmIHlvdSBhbHNv
IGFkZCBhIHdhdGNocG9pbnQuCisgICAgV2F0Y2hwb2ludFN0YXRlIHN0YXRlKCkgY29uc3QKKyAg
ICB7CisgICAgICAgIFdURjo6bG9hZExvYWRGZW5jZSgpOworICAgICAgICB1aW50cHRyX3QgZGF0
YSA9IG1fZGF0YTsKKyAgICAgICAgV1RGOjpsb2FkTG9hZEZlbmNlKCk7CisgICAgICAgIGlmIChp
c0ZhdChkYXRhKSkKKyAgICAgICAgICAgIHJldHVybiBmYXQoZGF0YSktPnN0YXRlKCk7CisgICAg
ICAgIHJldHVybiBkZWNvZGVTdGF0ZShkYXRhKTsKKyAgICB9CisgICAgCiAgICAgLy8gSXQgaXMg
c2FmZSB0byBjYWxsIHRoaXMgZnJvbSBhbm90aGVyIHRocmVhZC4gIEl0IG1heSByZXR1cm4gZmFs
c2UKICAgICAvLyBldmVuIGlmIHRoZSBzZXQgYWN0dWFsbHkgaGFkIGJlZW4gaW52YWxpZGF0ZWQs
IGJ1dCB0aGF0IG91Z2h0IHRvIGhhcHBlbgogICAgIC8vIG9ubHkgaW4gdGhlIGNhc2Ugb2YgcmFj
ZXMsIGFuZCBzaG91bGQgYmUgcmFyZS4KICAgICBib29sIGhhc0JlZW5JbnZhbGlkYXRlZCgpIGNv
bnN0CiAgICAgewotICAgICAgICBXVEY6OmxvYWRMb2FkRmVuY2UoKTsKLSAgICAgICAgdWludHB0
cl90IGRhdGEgPSBtX2RhdGE7Ci0gICAgICAgIGlmIChpc0ZhdChkYXRhKSkgewotICAgICAgICAg
ICAgV1RGOjpsb2FkTG9hZEZlbmNlKCk7Ci0gICAgICAgICAgICByZXR1cm4gZmF0KGRhdGEpLT5o
YXNCZWVuSW52YWxpZGF0ZWQoKTsKLSAgICAgICAgfQotICAgICAgICByZXR1cm4gZGVjb2RlU3Rh
dGUoZGF0YSkgPT0gSXNJbnZhbGlkYXRlZDsKKyAgICAgICAgcmV0dXJuIHN0YXRlKCkgPT0gSXNJ
bnZhbGlkYXRlZDsKICAgICB9CiAgICAgCiAgICAgLy8gTGlrZSBoYXNCZWVuSW52YWxpZGF0ZWQo
KSwgbWF5IGJlIGNhbGxlZCBmcm9tIGFub3RoZXIgdGhyZWFkLgpAQCAtMjUzLDYgKzI4OSwxNCBA
QCBwdWJsaWM6CiAgICAgICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CiAgICAgfQogICAgIAor
ICAgIHZvaWQgaW52YWxpZGF0ZShjb25zdCBGaXJlRGV0YWlsJiBkZXRhaWwpCisgICAgeworICAg
ICAgICBpZiAoaXNGYXQoKSkKKyAgICAgICAgICAgIGZhdCgpLT5pbnZhbGlkYXRlKGRldGFpbCk7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fZGF0YSA9IGVuY29kZVN0YXRlKElzSW52YWxp
ZGF0ZWQpOworICAgIH0KKyAgICAKICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGZpcmVBbGwo
Y29uc3QgY2hhciogcmVhc29uKTsKICAgICAKICAgICB2b2lkIHRvdWNoKGNvbnN0IEZpcmVEZXRh
aWwmIGRldGFpbCkKQEAgLTI2MSw3ICszMDUsMTEgQEAgcHVibGljOgogICAgICAgICAgICAgZmF0
KCktPnRvdWNoKGRldGFpbCk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAg
ICAgaWYgKGRlY29kZVN0YXRlKG1fZGF0YSkgPT0gQ2xlYXJXYXRjaHBvaW50KQorICAgICAgICB1
aW50cHRyX3QgZGF0YSA9IG1fZGF0YTsKKyAgICAgICAgaWYgKGRlY29kZVN0YXRlKGRhdGEpID09
IElzSW52YWxpZGF0ZWQpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIFdURjo6c3RvcmVT
dG9yZUZlbmNlKCk7CisgICAgICAgIGlmIChkZWNvZGVTdGF0ZShkYXRhKSA9PSBDbGVhcldhdGNo
cG9pbnQpCiAgICAgICAgICAgICBtX2RhdGEgPSBlbmNvZGVTdGF0ZShJc1dhdGNoZWQpOwogICAg
ICAgICBlbHNlCiAgICAgICAgICAgICBtX2RhdGEgPSBlbmNvZGVTdGF0ZShJc0ludmFsaWRhdGVk
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5l
cmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGls
ZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCShyZXZpc2lvbiAxODI0OTgpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDY2LDkgKzQ2Niw2IEBAIEJ5dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVy
YXRvcihWTSYKICAgICAgICAgfQogICAgIH0KICAgICAKLSAgICBpZiAobV9zeW1ib2xUYWJsZS0+
c2NvcGVTaXplKCkpCi0gICAgICAgIGVtaXRPcGNvZGUob3BfdG91Y2hfZW50cnkpOwotCiAgICAg
aWYgKGlzQ29uc3RydWN0b3IoKSkgewogICAgICAgICBpZiAoY29uc3RydWN0b3JLaW5kKCkgPT0g
Q29uc3RydWN0b3JLaW5kOjpEZXJpdmVkKSB7CiAgICAgICAgICAgICBtX25ld1RhcmdldFJlZ2lz
dGVyID0gYWRkVmFyKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3Ry
YWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oCShyZXZpc2lvbiAxODI0OTgp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxp
bmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEzNDIsNiArMTM0Miw3IEBAIGJvb2wgQWJzdHJhY3RJ
bnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkKICAgICB9CiAKICAgICBjYXNlIENyZWF0ZVRoaXM6
IHsKKyAgICAgICAgLy8gRklYTUU6IFdlIGNhbiBmb2xkIHRoaXMgdG8gTmV3T2JqZWN0IGlmIHRo
ZSBpbmNvbWluZyBjYWxsZWUgaXMgYSBjb25zdGFudC4KICAgICAgICAgZm9yTm9kZShub2RlKS5z
ZXRUeXBlKFNwZWNGaW5hbE9iamVjdCk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTE0MDEs
NiArMTQwMiwxNSBAQCBib29sIEFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAg
ICAgICAgIGJyZWFrOwogICAgICAgICAKICAgICBjYXNlIEdldENhbGxlZToKKyAgICAgICAgaWYg
KEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IGpzRHluYW1pY0Nhc3Q8RnVuY3Rpb25F
eGVjdXRhYmxlKj4obV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpKSkgeworICAgICAgICAg
ICAgSW5mZXJyZWRWYWx1ZSogc2luZ2xldG9uID0gZXhlY3V0YWJsZS0+c2luZ2xldG9uRnVuY3Rp
b24oKTsKKyAgICAgICAgICAgIGlmIChKU1ZhbHVlIHZhbHVlID0gc2luZ2xldG9uLT5pbmZlcnJl
ZFZhbHVlKCkpIHsKKyAgICAgICAgICAgICAgICBtX2dyYXBoLndhdGNocG9pbnRzKCkuYWRkTGF6
aWx5KHNpbmdsZXRvbik7CisgICAgICAgICAgICAgICAgSlNGdW5jdGlvbiogZnVuY3Rpb24gPSBq
c0Nhc3Q8SlNGdW5jdGlvbio+KHZhbHVlKTsKKyAgICAgICAgICAgICAgICBzZXRDb25zdGFudChu
b2RlLCAqbV9ncmFwaC5mcmVlemUoZnVuY3Rpb24pKTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUo
U3BlY0Z1bmN0aW9uKTsKICAgICAgICAgYnJlYWs7CiAgICAgICAgIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDE4
MjQ5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yMTUsOCArMjE1LDYgQEAgcHJpdmF0ZToKICAgICAgICAgYm9v
bCBpc0RpcmVjdCk7CiAgICAgdm9pZCBlbWl0Q2hlY2tzKGNvbnN0IENvbnN0YW50U3RydWN0dXJl
Q2hlY2tWZWN0b3ImKTsKIAotICAgIE5vZGUqIGdldFNjb3BlKFZpcnR1YWxSZWdpc3RlciBzY29w
ZUNoYWluLCB1bnNpZ25lZCBza2lwQ291bnQpOwotICAgIAogICAgIHZvaWQgcHJlcGFyZVRvUGFy
c2VCbG9jaygpOwogICAgIHZvaWQgY2xlYXJDYWNoZXMoKTsKIApAQCAtMjc5LDggKzI3NywyMCBA
QCBwcml2YXRlOgogICAgICAgICAgICAgICAgIGlmIChvcGVyYW5kLm9mZnNldCgpID09IEpTU3Rh
Y2s6OkNhbGxlZSkKICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHdlYWtKU0NvbnN0YW50KGNh
bGxlZSk7CiAgICAgICAgICAgICB9Ci0gICAgICAgIH0gZWxzZSBpZiAob3BlcmFuZC5vZmZzZXQo
KSA9PSBKU1N0YWNrOjpDYWxsZWUpCisgICAgICAgIH0gZWxzZSBpZiAob3BlcmFuZC5vZmZzZXQo
KSA9PSBKU1N0YWNrOjpDYWxsZWUpIHsKKyAgICAgICAgICAgIC8vIFdlIGhhdmUgdG8gZG8gc29t
ZSBjb25zdGFudC1mb2xkaW5nIGhlcmUgYmVjYXVzZSB0aGlzIGVuYWJsZXMgQ3JlYXRlVGhpcyBm
b2xkaW5nLiBOb3RlCisgICAgICAgICAgICAvLyB0aGF0IHdlIGRvbid0IGhhdmUgc3VjaCB3YXRj
aHBvaW50LWJhc2VkIGZvbGRpbmcgZm9yIGlubGluZWQgdXNlcyBvZiBDYWxsZWUsIHNpbmNlIGlu
IHRoYXQKKyAgICAgICAgICAgIC8vIGNhc2UgaWYgdGhlIGZ1bmN0aW9uIGlzIGEgc2luZ2xldG9u
IHRoZW4gd2UgYWxyZWFkeSBrbm93IGl0LgorICAgICAgICAgICAgaWYgKEZ1bmN0aW9uRXhlY3V0
YWJsZSogZXhlY3V0YWJsZSA9IGpzRHluYW1pY0Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4obV9j
b2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgpKSkgeworICAgICAgICAgICAgICAgIEluZmVycmVk
VmFsdWUqIHNpbmdsZXRvbiA9IGV4ZWN1dGFibGUtPnNpbmdsZXRvbkZ1bmN0aW9uKCk7CisgICAg
ICAgICAgICAgICAgaWYgKEpTVmFsdWUgdmFsdWUgPSBzaW5nbGV0b24tPmluZmVycmVkVmFsdWUo
KSkgeworICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLndhdGNocG9pbnRzKCkuYWRkTGF6aWx5
KHNpbmdsZXRvbik7CisgICAgICAgICAgICAgICAgICAgIEpTRnVuY3Rpb24qIGZ1bmN0aW9uID0g
anNDYXN0PEpTRnVuY3Rpb24qPih2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB3
ZWFrSlNDb25zdGFudChmdW5jdGlvbik7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
fQogICAgICAgICAgICAgcmV0dXJuIGFkZFRvR3JhcGgoR2V0Q2FsbGVlKTsKKyAgICAgICAgfQog
ICAgICAgICAKICAgICAgICAgcmV0dXJuIGdldERpcmVjdChtX2lubGluZVN0YWNrVG9wLT5yZW1h
cE9wZXJhbmQob3BlcmFuZCkpOwogICAgIH0KQEAgLTI1MjksMTQgKzI1MzksNiBAQCB2b2lkIEJ5
dGVDb2RlUGFyc2VyOjpjbGVhckNhY2hlcygpCiAgICAgbV9jb25zdGFudHMucmVzaXplKDApOwog
fQogCi1Ob2RlKiBCeXRlQ29kZVBhcnNlcjo6Z2V0U2NvcGUoVmlydHVhbFJlZ2lzdGVyIHNjb3Bl
Q2hhaW4sIHVuc2lnbmVkIHNraXBDb3VudCkKLXsKLSAgICBOb2RlKiBsb2NhbEJhc2UgPSBnZXQo
c2NvcGVDaGFpbik7Ci0gICAgZm9yICh1bnNpZ25lZCBuID0gc2tpcENvdW50OyBuLS07KQotICAg
ICAgICBsb2NhbEJhc2UgPSBhZGRUb0dyYXBoKFNraXBTY29wZSwgbG9jYWxCYXNlKTsKLSAgICBy
ZXR1cm4gbG9jYWxCYXNlOwotfQotCiBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVu
c2lnbmVkIGxpbWl0KQogewogICAgIGJvb2wgc2hvdWxkQ29udGludWVQYXJzaW5nID0gdHJ1ZTsK
QEAgLTI2MDYsMTEgKzI2MDgsNiBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVu
c2lnbmVkCiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9lbnRlcik7CiAgICAgICAgIH0KICAg
ICAgICAgICAgIAotICAgICAgICBjYXNlIG9wX3RvdWNoX2VudHJ5OgotICAgICAgICAgICAgaWYg
KG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJsb2NrLT5zeW1ib2xUYWJsZSgpLT5tX2Z1bmN0aW9u
RW50ZXJlZE9uY2UuaXNTdGlsbFZhbGlkKCkpCi0gICAgICAgICAgICAgICAgYWRkVG9HcmFwaChG
b3JjZU9TUkV4aXQpOwotICAgICAgICAgICAgTkVYVF9PUENPREUob3BfdG91Y2hfZW50cnkpOwot
ICAgICAgICAgICAgCiAgICAgICAgIGNhc2Ugb3BfdG9fdGhpczogewogICAgICAgICAgICAgTm9k
ZSogb3AxID0gZ2V0VGhpcygpOwogICAgICAgICAgICAgaWYgKG9wMS0+b3AoKSAhPSBUb1RoaXMp
IHsKQEAgLTMzODgsMTcgKzMzODUsMjggQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9j
ayh1bnNpZ25lZAogICAgICAgICAgICAgY2FzZSBMb2NhbENsb3N1cmVWYXI6CiAgICAgICAgICAg
ICBjYXNlIENsb3N1cmVWYXI6CiAgICAgICAgICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFySW5q
ZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgICAgICAgICAgSlNMZXhpY2FsRW52aXJvbm1lbnQqIGxl
eGljYWxFbnZpcm9ubWVudCA9IGN1cnJlbnRJbnN0cnVjdGlvbls2XS51LmxleGljYWxFbnZpcm9u
bWVudC5nZXQoKTsKLSAgICAgICAgICAgICAgICBpZiAobGV4aWNhbEVudmlyb25tZW50Ci0gICAg
ICAgICAgICAgICAgICAgICYmIGxleGljYWxFbnZpcm9ubWVudC0+c3ltYm9sVGFibGUoKS0+bV9m
dW5jdGlvbkVudGVyZWRPbmNlLmlzU3RpbGxWYWxpZCgpKSB7Ci0gICAgICAgICAgICAgICAgICAg
IG1fZ3JhcGgud2F0Y2hwb2ludHMoKS5hZGRMYXppbHkobGV4aWNhbEVudmlyb25tZW50LT5zeW1i
b2xUYWJsZSgpLT5tX2Z1bmN0aW9uRW50ZXJlZE9uY2UpOwotICAgICAgICAgICAgICAgICAgICBh
ZGRUb0dyYXBoKFBoYW50b20sIGdldERpcmVjdChtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJh
bmQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpKSkpOwot
ICAgICAgICAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGRzdCksIHdlYWtKU0NvbnN0
YW50KGxleGljYWxFbnZpcm9ubWVudCkpOworICAgICAgICAgICAgICAgIE5vZGUqIGxvY2FsQmFz
ZSA9IGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCkp
OworICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoUGhhbnRvbSwgbG9jYWxCYXNlKTsgLy8gT1NS
IGV4aXQgY2Fubm90IGhhbmRsZSByZXNvbHZlX3Njb3BlIG9uIGEgRENFJ2Qgc2NvcGUuCisgICAg
ICAgICAgICAgICAgCisgICAgICAgICAgICAgICAgLy8gV2UgaGF2ZSB2YXJpb3VzIGZvcm1zIG9m
IGNvbnN0YW50IGZvbGRpbmcgaGVyZS4gVGhpcyBpcyBuZWNlc3NhcnkgdG8gYXZvaWQKKyAgICAg
ICAgICAgICAgICAvLyBzcHVyaW91cyByZWNvbXBpbGVzIGluIGRlYWQtYnV0LWZvbGRhYmxlIGNv
ZGUuCisgICAgICAgICAgICAgICAgaWYgKFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSA9IGN1cnJl
bnRJbnN0cnVjdGlvbls2XS51LnN5bWJvbFRhYmxlLmdldCgpKSB7CisgICAgICAgICAgICAgICAg
ICAgIEluZmVycmVkVmFsdWUqIHNpbmdsZXRvbiA9IHN5bWJvbFRhYmxlLT5zaW5nbGV0b25TY29w
ZSgpOworICAgICAgICAgICAgICAgICAgICBpZiAoSlNWYWx1ZSB2YWx1ZSA9IHNpbmdsZXRvbi0+
aW5mZXJyZWRWYWx1ZSgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLndhdGNo
cG9pbnRzKCkuYWRkTGF6aWx5KHNpbmdsZXRvbik7CisgICAgICAgICAgICAgICAgICAgICAgICBz
ZXQoVmlydHVhbFJlZ2lzdGVyKGRzdCksIHdlYWtKU0NvbnN0YW50KHZhbHVlKSk7CisgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgICAgICBpZiAoSlNTY29wZSogc2NvcGUgPSBsb2NhbEJhc2Ut
PmR5bmFtaWNDYXN0Q29uc3RhbnQ8SlNTY29wZSo+KCkpIHsKKyAgICAgICAgICAgICAgICAgICAg
Zm9yICh1bnNpZ25lZCBuID0gZGVwdGg7IG4tLTspCisgICAgICAgICAgICAgICAgICAgICAgICBz
Y29wZSA9IHNjb3BlLT5uZXh0KCk7CisgICAgICAgICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVn
aXN0ZXIoZHN0KSwgd2Vha0pTQ29uc3RhbnQoc2NvcGUpKTsKICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVn
aXN0ZXIoZHN0KSwgZ2V0U2NvcGUoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsy
XS51Lm9wZXJhbmQpLCBkZXB0aCkpOwotICAgICAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJh
bWUoKSkKLSAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChQaGFudG9tLCBnZXREaXJlY3Qo
bV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVyYW5kKFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5z
dHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSkpKTsKKyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVk
IG4gPSBkZXB0aDsgbi0tOykKKyAgICAgICAgICAgICAgICAgICAgbG9jYWxCYXNlID0gYWRkVG9H
cmFwaChTa2lwU2NvcGUsIGxvY2FsQmFzZSk7CisgICAgICAgICAgICAgICAgc2V0KFZpcnR1YWxS
ZWdpc3Rlcihkc3QpLCBsb2NhbEJhc2UpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAg
ICAgICAgfQogICAgICAgICAgICAgY2FzZSBEeW5hbWljOgpAQCAtMzQ1MCwxOSArMzQ1OCw1OCBA
QCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICBj
YXNlIEdsb2JhbFZhcjoKICAgICAgICAgICAgIGNhc2UgR2xvYmFsVmFyV2l0aFZhckluamVjdGlv
bkNoZWNrczogewogICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoUGhhbnRvbSwgZ2V0KFZpcnR1
YWxSZWdpc3RlcihzY29wZSkpKTsKLSAgICAgICAgICAgICAgICBDb25jdXJyZW50SklUTG9ja2Vy
IGxvY2tlcihnbG9iYWxPYmplY3QtPnN5bWJvbFRhYmxlKCktPm1fbG9jayk7Ci0gICAgICAgICAg
ICAgICAgU3ltYm9sVGFibGVFbnRyeSBlbnRyeSA9IGdsb2JhbE9iamVjdC0+c3ltYm9sVGFibGUo
KS0+Z2V0KGxvY2tlciwgdWlkKTsKLSAgICAgICAgICAgICAgICBWYXJpYWJsZVdhdGNocG9pbnRT
ZXQqIHdhdGNocG9pbnRTZXQgPSBlbnRyeS53YXRjaHBvaW50U2V0KCk7Ci0gICAgICAgICAgICAg
ICAgSlNWYWx1ZSBpbmZlcnJlZFZhbHVlID0KLSAgICAgICAgICAgICAgICAgICAgd2F0Y2hwb2lu
dFNldCA/IHdhdGNocG9pbnRTZXQtPmluZmVycmVkVmFsdWUoKSA6IEpTVmFsdWUoKTsKLSAgICAg
ICAgICAgICAgICBpZiAoIWluZmVycmVkVmFsdWUpIHsKLSAgICAgICAgICAgICAgICAgICAgU3Bl
Y3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IGdldFByZWRpY3Rpb24oKTsKLSAgICAgICAgICAgICAg
ICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rlcihkc3QpLCBhZGRUb0dyYXBoKEdldEdsb2JhbFZhciwg
T3BJbmZvKG9wZXJhbmQpLCBPcEluZm8ocHJlZGljdGlvbikpKTsKLSAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgV2F0Y2hwb2ludFNldCogd2F0Y2hwb2ludFNldDsK
KyAgICAgICAgICAgICAgICBTY29wZU9mZnNldCBvZmZzZXQ7CisgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihnbG9iYWxPYmpl
Y3QtPnN5bWJvbFRhYmxlKCktPm1fbG9jayk7CisgICAgICAgICAgICAgICAgICAgIFN5bWJvbFRh
YmxlRW50cnkgZW50cnkgPSBnbG9iYWxPYmplY3QtPnN5bWJvbFRhYmxlKCktPmdldChsb2NrZXIs
IHVpZCk7CisgICAgICAgICAgICAgICAgICAgIHdhdGNocG9pbnRTZXQgPSBlbnRyeS53YXRjaHBv
aW50U2V0KCk7CisgICAgICAgICAgICAgICAgICAgIG9mZnNldCA9IGVudHJ5LnNjb3BlT2Zmc2V0
KCk7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGlmICh3YXRjaHBvaW50U2V0
ICYmIHdhdGNocG9pbnRTZXQtPnN0YXRlKCkgPT0gSXNXYXRjaGVkKSB7CisgICAgICAgICAgICAg
ICAgICAgIC8vIFRoaXMgaGFzIGEgZnVuIGNvbmN1cnJlbmN5IHN0b3J5LiBUaGVyZSBpcyB0aGUg
cG9zc2liaWxpdHkgb2YgYSByYWNlIGluIHR3bworICAgICAgICAgICAgICAgICAgICAvLyBkaXJl
Y3Rpb25zOgorICAgICAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgICAgICAvLyBX
ZSBzZWUgdGhhdCB0aGUgc2V0IElzV2F0Y2hlZCwgYnV0IGluIHRoZSBtZWFudGltZSBpdCBnZXRz
IGludmFsaWRhdGVkOiB0aGlzIGlzCisgICAgICAgICAgICAgICAgICAgIC8vIGZpbmUgYmVjYXVz
ZSBpZiB3ZSBzYXcgdGhhdCBpdCBJc1dhdGNoZWQgdGhlbiB3ZSBhZGQgYSB3YXRjaHBvaW50LiBJ
ZiBpdCBnZXRzCisgICAgICAgICAgICAgICAgICAgIC8vIGludmFsaWRhdGVkLCB0aGVuIHRoaXMg
Y29tcGlsYXRpb24gaXMgaW52YWxpZGF0ZWQuIE5vdGUgdGhhdCBpbiB0aGUgbWVhbnRpbWUgd2UK
KyAgICAgICAgICAgICAgICAgICAgLy8gbWF5IGxvYWQgYW4gYWJzdXJkIHZhbHVlIGZyb20gdGhl
IGdsb2JhbCBvYmplY3QuIEl0J3MgZmluZSB0byBsb2FkIGFuIGFic3VyZAorICAgICAgICAgICAg
ICAgICAgICAvLyB2YWx1ZSBpZiB0aGUgY29tcGlsYXRpb24gaXMgaW52YWxpZGF0ZWQgYW55d2F5
LgorICAgICAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgICAgICAvLyBXZSBzZWUg
dGhhdCB0aGUgc2V0IElzV2F0Y2hlZCwgYnV0IHRoZSB2YWx1ZSBpc24ndCB5ZXQgaW5pdGlhbGl6
ZWQ6IHRoaXMgaXNuJ3QKKyAgICAgICAgICAgICAgICAgICAgLy8gcG9zc2libGUgYmVjYXVzZSBv
ZiB0aGUgb3JkZXJpbmcgb2Ygb3BlcmF0aW9ucy4KKyAgICAgICAgICAgICAgICAgICAgLy8KKyAg
ICAgICAgICAgICAgICAgICAgLy8gSGVyZSdzIGhvdyB3ZSBvcmRlciBvcGVyYXRpb25zOgorICAg
ICAgICAgICAgICAgICAgICAvLworICAgICAgICAgICAgICAgICAgICAvLyBNYWluIHRocmVhZCBz
dG9yZXMgdG8gdGhlIGdsb2JhbCBvYmplY3Q6IGFsd2F5cyBzdG9yZSBhIHZhbHVlIGZpcnN0LCBh
bmQgb25seQorICAgICAgICAgICAgICAgICAgICAvLyBhZnRlciB0aGF0IGRvIHdlIHRvdWNoIHRo
ZSB3YXRjaHBvaW50IHNldC4gVGhlcmUgaXMgYSBmZW5jZSBpbiB0aGUgdG91Y2gsIHRoYXQKKyAg
ICAgICAgICAgICAgICAgICAgLy8gZW5zdXJlcyB0aGF0IHRoZSBzdG9yZSB0byB0aGUgZ2xvYmFs
IG9iamVjdCBhbHdheXMgaGFwcGVucyBiZWZvcmUgdGhlIHRvdWNoIG9uIHRoZQorICAgICAgICAg
ICAgICAgICAgICAvLyBzZXQuCisgICAgICAgICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAg
ICAgICAgIC8vIENvbXBpbGF0aW9uIHRocmVhZDogYWx3YXlzIGZpcnN0IGxvYWQgdGhlIHN0YXRl
IG9mIHRoZSB3YXRjaHBvaW50IHNldCwgYW5kIHRoZW4KKyAgICAgICAgICAgICAgICAgICAgLy8g
bG9hZCB0aGUgdmFsdWUuIFRoZSBXYXRjaHBvaW50U2V0OjpzdGF0ZSgpIG1ldGhvZCBkb2VzIGZl
bmNlcyBmb3IgdXMgdG8gZW5zdXJlCisgICAgICAgICAgICAgICAgICAgIC8vIHRoYXQgdGhlIGxv
YWQgb2YgdGhlIHN0YXRlIGhhcHBlbnMgYmVmb3JlIG91ciBsb2FkIG9mIHRoZSB2YWx1ZS4KKyAg
ICAgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAgICAgLy8gRmluYWxpemluZyBj
b21waWxhdGlvbjogdGhpcyBoYXBwZW5zIG9uIHRoZSBtYWluIHRocmVhZCBhbmQgc3luY2hyb25v
dXNseSBjaGVja3MKKyAgICAgICAgICAgICAgICAgICAgLy8gdmFsaWRpdHkgb2YgYWxsIHdhdGNo
cG9pbnQgc2V0cy4KKyAgICAgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAgICAg
Ly8gV2Ugd2lsbCBvbmx5IHBlcmZvcm0gb3B0aW1pemF0aW9ucyBpZiB0aGUgbG9hZCBvZiB0aGUg
c3RhdGUgeWllbGRzIElzV2F0Y2hlZC4gVGhhdAorICAgICAgICAgICAgICAgICAgICAvLyBtZWFu
cyB0aGF0IGF0IGxlYXN0IG9uZSBzdG9yZSB3b3VsZCBoYXZlIGhhcHBlbmVkIHRvIGluaXRpYWxp
emUgdGhlIG9yaWdpbmFsIHZhbHVlCisgICAgICAgICAgICAgICAgICAgIC8vIG9mIHRoZSB2YXJp
YWJsZSAodGhhdCBpcywgdGhlIHZhbHVlIHdlJ2QgbGlrZSB0byBjb25zdGFudCBmb2xkIHRvKS4g
VGhlcmUgbWF5IGJlCisgICAgICAgICAgICAgICAgICAgIC8vIG90aGVyIHN0b3JlcyB0aGF0IGhh
cHBlbiBhZnRlciB0aGF0LCBidXQgdGhvc2Ugc3RvcmVzIHdpbGwgaW52YWxpZGF0ZSB0aGUKKyAg
ICAgICAgICAgICAgICAgICAgLy8gd2F0Y2hwb2ludCBzZXQgYW5kIGFsc28gdGhlIGNvbXBpbGF0
aW9uLgorICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGJp
dHdpc2VfY2FzdDx1aW50cHRyX3Q+KCZnbG9iYWxPYmplY3QtPnZhcmlhYmxlQXQob2Zmc2V0KSkg
PT0gb3BlcmFuZCk7CisgICAgICAgICAgICAgICAgICAgIEpTVmFsdWUgdmFsdWUgPSBnbG9iYWxP
YmplY3QtPnZhcmlhYmxlQXQob2Zmc2V0KS5nZXQoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KHZhbHVlKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLndhdGNocG9pbnRzKCku
YWRkTGF6aWx5KHdhdGNocG9pbnRTZXQpOworICAgICAgICAgICAgICAgICAgICAgICAgc2V0KFZp
cnR1YWxSZWdpc3Rlcihkc3QpLCB3ZWFrSlNDb25zdGFudCh2YWx1ZSkpOworICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICB9CiAgICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgbV9ncmFwaC53YXRjaHBvaW50
cygpLmFkZExhemlseSh3YXRjaHBvaW50U2V0KTsKLSAgICAgICAgICAgICAgICBzZXQoVmlydHVh
bFJlZ2lzdGVyKGRzdCksIHdlYWtKU0NvbnN0YW50KGluZmVycmVkVmFsdWUpKTsKKyAgICAgICAg
ICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVkaWN0aW9uID0gZ2V0UHJlZGljdGlvbigpOworICAg
ICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoZHN0KSwgYWRkVG9HcmFwaChHZXRHbG9i
YWxWYXIsIE9wSW5mbyhvcGVyYW5kKSwgT3BJbmZvKHByZWRpY3Rpb24pKSk7CiAgICAgICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBjYXNlIExvY2FsQ2xvc3Vy
ZVZhcjoKQEAgLTM0NzksNiArMzUyNiwxMCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJs
b2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAgICAgLy8gd29uJ3QgYmUgYWJsZSB0byBoYW5kbGUg
YW4gVW5kZWZpbmVkIHNjb3BlLgogICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoUGhhbnRvbSwg
c2NvcGVOb2RlKTsKICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICAvLyBDb25zdGFu
dCBmb2xkaW5nIGluIHRoZSBieXRlY29kZSBwYXJzZXIgaXMgaW1wb3J0YW50IGZvciBwZXJmb3Jt
YW5jZS4gVGhpcyBtYXkgbm90CisgICAgICAgICAgICAgICAgLy8gaGF2ZSBleGVjdXRlZCB5ZXQu
IElmIGl0IGhhc24ndCwgdGhlbiB3ZSB3b24ndCBoYXZlIGEgcHJlZGljdGlvbi4gTGFja2luZyBh
CisgICAgICAgICAgICAgICAgLy8gcHJlZGljdGlvbiwgd2UnZCBvdGhlcndpc2UgdGhpbmsgdGhh
dCBpdCBoYXMgdG8gZXhpdC4gVGhlbiB3aGVuIGl0IGRpZCBleGVjdXRlLCB3ZQorICAgICAgICAg
ICAgICAgIC8vIHdvdWxkIHJlY29tcGlsZS4gQnV0IGlmIHdlIGNhbiBmb2xkIGl0IGhlcmUsIHdl
IGF2b2lkIHRoZSBleGl0LgogICAgICAgICAgICAgICAgIGlmIChKU1ZhbHVlIHZhbHVlID0gbV9n
cmFwaC50cnlHZXRDb25zdGFudENsb3N1cmVWYXIoc2NvcGVOb2RlLCBTY29wZU9mZnNldChvcGVy
YW5kKSkpIHsKICAgICAgICAgICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rlcihkc3QpLCB3
ZWFrSlNDb25zdGFudCh2YWx1ZSkpOwogICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTM1
MDksNyArMzU2MCw3IEBAIGJvb2wgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQK
ICAgICAgICAgICAgICAgICB1aWQgPSBudWxscHRyOwogICAgICAgICAgICAgCiAgICAgICAgICAg
ICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG51bGxwdHI7Ci0gICAgICAgICAgICBWYXJpYWJsZVdh
dGNocG9pbnRTZXQqIHdhdGNocG9pbnRzID0gbnVsbHB0cjsKKyAgICAgICAgICAgIFdhdGNocG9p
bnRTZXQqIHdhdGNocG9pbnRzID0gbnVsbHB0cjsKICAgICAgICAgICAgIHVpbnRwdHJfdCBvcGVy
YW5kOwogICAgICAgICAgICAgewogICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIg
bG9ja2VyKG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jay0+bV9sb2NrKTsKQEAgLTM1
NTIsOCArMzYwMywxMCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVk
CiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIE5vZGUqIHZhbHVlTm9kZSA9IGdl
dChWaXJ0dWFsUmVnaXN0ZXIodmFsdWUpKTsKICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKFB1
dEdsb2JhbFZhciwgT3BJbmZvKG9wZXJhbmQpLCB2YWx1ZU5vZGUpOwotICAgICAgICAgICAgICAg
IGlmICh3YXRjaHBvaW50cyAmJiB3YXRjaHBvaW50cy0+c3RhdGUoKSAhPSBJc0ludmFsaWRhdGVk
KQotICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKE5vdGlmeVdyaXRlLCBPcEluZm8od2F0
Y2hwb2ludHMpLCB2YWx1ZU5vZGUpOworICAgICAgICAgICAgICAgIGlmICh3YXRjaHBvaW50cyAm
JiB3YXRjaHBvaW50cy0+c3RhdGUoKSAhPSBJc0ludmFsaWRhdGVkKSB7CisgICAgICAgICAgICAg
ICAgICAgIC8vIE11c3QgaGFwcGVuIGFmdGVyIHRoZSBzdG9yZS4gU2VlIGNvbW1lbnQgZm9yIEdl
dEdsb2JhbFZhci4KKyAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChOb3RpZnlXcml0ZSwg
T3BJbmZvKHdhdGNocG9pbnRzKSk7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAg
IC8vIEtlZXAgc2NvcGUgYWxpdmUgdW50aWwgYWZ0ZXIgcHV0LgogICAgICAgICAgICAgICAgIGFk
ZFRvR3JhcGgoUGhhbnRvbSwgZ2V0KFZpcnR1YWxSZWdpc3RlcihzY29wZSkpKTsKICAgICAgICAg
ICAgICAgICBicmVhazsKQEAgLTM1NjQsMTAgKzM2MTcsMTIgQEAgYm9vbCBCeXRlQ29kZVBhcnNl
cjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgICAgIE5vZGUqIHNjb3BlTm9kZSA9
IGdldChWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUpKTsKICAgICAgICAgICAgICAgICBOb2RlKiB2YWx1
ZU5vZGUgPSBnZXQoVmlydHVhbFJlZ2lzdGVyKHZhbHVlKSk7CiAKLSAgICAgICAgICAgICAgICBp
ZiAod2F0Y2hwb2ludHMgJiYgd2F0Y2hwb2ludHMtPnN0YXRlKCkgIT0gSXNJbnZhbGlkYXRlZCkK
LSAgICAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChOb3RpZnlXcml0ZSwgT3BJbmZvKHdhdGNo
cG9pbnRzKSwgdmFsdWVOb2RlKTsKLQogICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoUHV0Q2xv
c3VyZVZhciwgT3BJbmZvKG9wZXJhbmQpLCBzY29wZU5vZGUsIHZhbHVlTm9kZSk7CisKKyAgICAg
ICAgICAgICAgICBpZiAod2F0Y2hwb2ludHMgJiYgd2F0Y2hwb2ludHMtPnN0YXRlKCkgIT0gSXNJ
bnZhbGlkYXRlZCkgeworICAgICAgICAgICAgICAgICAgICAvLyBNdXN0IGhhcHBlbiBhZnRlciB0
aGUgc3RvcmUuIFNlZSBjb21tZW50IGZvciBHZXRHbG9iYWxWYXIuCisgICAgICAgICAgICAgICAg
ICAgIGFkZFRvR3JhcGgoTm90aWZ5V3JpdGUsIE9wSW5mbyh3YXRjaHBvaW50cykpOworICAgICAg
ICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAg
ICAgICAgIGNhc2UgRHluYW1pYzoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q2FwYWJpbGl0aWVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR0NhcGFiaWxpdGllcy5jcHAJKHJldmlzaW9uIDE4MjQ5OCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTYsNyAr
OTYsNiBAQCBDYXBhYmlsaXR5TGV2ZWwgY2FwYWJpbGl0eUxldmVsKE9wY29kZUlECiAgICAgCiAg
ICAgc3dpdGNoIChvcGNvZGVJRCkgewogICAgIGNhc2Ugb3BfZW50ZXI6Ci0gICAgY2FzZSBvcF90
b3VjaF9lbnRyeToKICAgICBjYXNlIG9wX3RvX3RoaXM6CiAgICAgY2FzZSBvcF9jaGVja190ZHo6
CiAgICAgY2FzZSBvcF9jcmVhdGVfdGhpczoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ2xvYmJlcml6ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHQ2xvYmJlcml6ZS5oCShyZXZpc2lvbiAxODI0OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAkod29ya2luZyBjb3B5KQpAQCAtMzExLDEwICszMTEs
MTQgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgICAgICB3
cml0ZShTaWRlU3RhdGUpOwogICAgICAgICByZXR1cm47CiAKLSAgICBjYXNlIENyZWF0ZUFjdGl2
YXRpb246CisgICAgY2FzZSBDcmVhdGVBY3RpdmF0aW9uOiB7CisgICAgICAgIFN5bWJvbFRhYmxl
KiB0YWJsZSA9IGdyYXBoLnN5bWJvbFRhYmxlRm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7Cisg
ICAgICAgIGlmICh0YWJsZS0+c2luZ2xldG9uU2NvcGUoKS0+aXNTdGlsbFZhbGlkKCkpCisgICAg
ICAgICAgICB3cml0ZShXYXRjaHBvaW50X2ZpcmUpOwogICAgICAgICByZWFkKEhlYXBPYmplY3RD
b3VudCk7CiAgICAgICAgIHdyaXRlKEhlYXBPYmplY3RDb3VudCk7CiAgICAgICAgIHJldHVybjsK
KyAgICB9CiAgICAgICAgIAogICAgIGNhc2UgQ3JlYXRlRGlyZWN0QXJndW1lbnRzOgogICAgIGNh
c2UgQ3JlYXRlU2NvcGVkQXJndW1lbnRzOgpAQCAtODU4LDExICs4NjIsMTcgQEAgdm9pZCBjbG9i
YmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSogbm9kZQogICAgIGNhc2UgTmV3U3RyaW5nT2JqZWN0
OgogICAgIGNhc2UgUGhhbnRvbU5ld09iamVjdDoKICAgICBjYXNlIE1hdGVyaWFsaXplTmV3T2Jq
ZWN0OgotICAgIGNhc2UgTmV3RnVuY3Rpb246CiAgICAgICAgIHJlYWQoSGVhcE9iamVjdENvdW50
KTsKICAgICAgICAgd3JpdGUoSGVhcE9iamVjdENvdW50KTsKICAgICAgICAgcmV0dXJuOwogICAg
ICAgICAKKyAgICBjYXNlIE5ld0Z1bmN0aW9uOgorICAgICAgICBpZiAobm9kZS0+Y2FzdE9wZXJh
bmQ8RnVuY3Rpb25FeGVjdXRhYmxlKj4oKS0+c2luZ2xldG9uRnVuY3Rpb24oKS0+aXNTdGlsbFZh
bGlkKCkpCisgICAgICAgICAgICB3cml0ZShXYXRjaHBvaW50X2ZpcmUpOworICAgICAgICByZWFk
KEhlYXBPYmplY3RDb3VudCk7CisgICAgICAgIHdyaXRlKEhlYXBPYmplY3RDb3VudCk7CisgICAg
ICAgIHJldHVybjsKKwogICAgIGNhc2UgUmVnRXhwRXhlYzoKICAgICBjYXNlIFJlZ0V4cFRlc3Q6
CiAgICAgICAgIHJlYWQoUmVnRXhwU3RhdGUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmNwcAkocmV2aXNpb24gMTgyNDk4
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAx
MywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTMtMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ0LDYgKzQ0LDEzIEBAIHZvaWQgQXJyYXlCdWZmZXJWaWV3
V2F0Y2hwb2ludEFkYXB0b3I6OmEKICAgICBjb2RlQmxvY2stPnZtKCktPmhlYXAuYWRkUmVmZXJl
bmNlKG5ldXRlcmluZ1dhdGNocG9pbnQsIHZpZXctPmJ1ZmZlcigpKTsKIH0KIAordm9pZCBJbmZl
cnJlZFZhbHVlQWRhcHRvcjo6YWRkKAorICAgIENvZGVCbG9jayogY29kZUJsb2NrLCBJbmZlcnJl
ZFZhbHVlKiBpbmZlcnJlZFZhbHVlLCBXYXRjaHBvaW50KiB3YXRjaHBvaW50KQoreworICAgIGNv
ZGVCbG9jay0+YWRkQ29uc3RhbnQoaW5mZXJyZWRWYWx1ZSk7IC8vIEZvciBjb21tb24gdXNlcnMs
IGl0IGRvZXNuJ3QgcmVhbGx5IG1hdHRlciBpZiBpdCdzIHdlYWsgb3Igbm90LiBJZiByZWZlcmVu
Y2VzIHRvIGl0IGdvIGF3YXksIHdlIGdvIGF3YXksIHRvby4KKyAgICBpbmZlcnJlZFZhbHVlLT5h
ZGQod2F0Y2hwb2ludCk7Cit9CisKIERlc2lyZWRXYXRjaHBvaW50czo6RGVzaXJlZFdhdGNocG9p
bnRzKCkgeyB9CiBEZXNpcmVkV2F0Y2hwb2ludHM6On5EZXNpcmVkV2F0Y2hwb2ludHMoKSB7IH0K
IApAQCAtNTcsNiArNjQsMTEgQEAgdm9pZCBEZXNpcmVkV2F0Y2hwb2ludHM6OmFkZExhemlseShJ
bmxpbgogICAgIG1faW5saW5lU2V0cy5hZGRMYXppbHkoJnNldCk7CiB9CiAKK3ZvaWQgRGVzaXJl
ZFdhdGNocG9pbnRzOjphZGRMYXppbHkoSW5mZXJyZWRWYWx1ZSogaW5mZXJyZWRWYWx1ZSkKK3sK
KyAgICBtX2luZmVycmVkVmFsdWVzLmFkZExhemlseShpbmZlcnJlZFZhbHVlKTsKK30KKwogdm9p
ZCBEZXNpcmVkV2F0Y2hwb2ludHM6OmFkZExhemlseShKU0FycmF5QnVmZmVyVmlldyogdmlldykK
IHsKICAgICBtX2J1ZmZlclZpZXdzLmFkZExhemlseSh2aWV3KTsKQEAgLTc0LDYgKzg2LDcgQEAg
dm9pZCBEZXNpcmVkV2F0Y2hwb2ludHM6OnJlYWxseUFkZChDb2RlQgogewogICAgIG1fc2V0cy5y
ZWFsbHlBZGQoY29kZUJsb2NrLCBjb21tb25EYXRhKTsKICAgICBtX2lubGluZVNldHMucmVhbGx5
QWRkKGNvZGVCbG9jaywgY29tbW9uRGF0YSk7CisgICAgbV9pbmZlcnJlZFZhbHVlcy5yZWFsbHlB
ZGQoY29kZUJsb2NrLCBjb21tb25EYXRhKTsKICAgICBtX2J1ZmZlclZpZXdzLnJlYWxseUFkZChj
b2RlQmxvY2ssIGNvbW1vbkRhdGEpOwogfQogCkBAIC04MSw2ICs5NCw3IEBAIGJvb2wgRGVzaXJl
ZFdhdGNocG9pbnRzOjphcmVTdGlsbFZhbGlkKCkKIHsKICAgICByZXR1cm4gbV9zZXRzLmFyZVN0
aWxsVmFsaWQoKQogICAgICAgICAmJiBtX2lubGluZVNldHMuYXJlU3RpbGxWYWxpZCgpCisgICAg
ICAgICYmIG1faW5mZXJyZWRWYWx1ZXMuYXJlU3RpbGxWYWxpZCgpCiAgICAgICAgICYmIG1fYnVm
ZmVyVmlld3MuYXJlU3RpbGxWYWxpZCgpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmgJKHJldmlzaW9uIDE4MjQ5OCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmgJKHdv
cmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAy
MDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAx
My0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
ICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucwpAQCAtMzAsNiArMzAsNyBAQAogCiAjaW5jbHVkZSAiQ29kZU9yaWdpbi5o
IgogI2luY2x1ZGUgIkRGR0NvbW1vbkRhdGEuaCIKKyNpbmNsdWRlICJJbmZlcnJlZFZhbHVlLmgi
CiAjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlclZpZXcuaCIKICNpbmNsdWRlICJXYXRjaHBvaW50Lmgi
CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KQEAgLTUwLDYgKzUxLDE0IEBAIHN0cnVjdCBHZW5l
cmljU2V0QWRhcHRvciB7CiAgICAgc3RhdGljIGJvb2wgaGFzQmVlbkludmFsaWRhdGVkKFQqIHNl
dCkgeyByZXR1cm4gc2V0LT5oYXNCZWVuSW52YWxpZGF0ZWQoKTsgfQogfTsKIAorc3RydWN0IElu
ZmVycmVkVmFsdWVBZGFwdG9yIHsKKyAgICBzdGF0aWMgdm9pZCBhZGQoQ29kZUJsb2NrKiwgSW5m
ZXJyZWRWYWx1ZSosIFdhdGNocG9pbnQqKTsKKyAgICBzdGF0aWMgYm9vbCBoYXNCZWVuSW52YWxp
ZGF0ZWQoSW5mZXJyZWRWYWx1ZSogaW5mZXJyZWRWYWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVy
biBpbmZlcnJlZFZhbHVlLT5oYXNCZWVuSW52YWxpZGF0ZWQoKTsKKyAgICB9Cit9OworCiBzdHJ1
Y3QgQXJyYXlCdWZmZXJWaWV3V2F0Y2hwb2ludEFkYXB0b3IgewogICAgIHN0YXRpYyB2b2lkIGFk
ZChDb2RlQmxvY2sqLCBKU0FycmF5QnVmZmVyVmlldyosIFdhdGNocG9pbnQqKTsKICAgICBzdGF0
aWMgYm9vbCBoYXNCZWVuSW52YWxpZGF0ZWQoSlNBcnJheUJ1ZmZlclZpZXcqIHZpZXcpCkBAIC0x
MTksNiArMTI4LDcgQEAgcHVibGljOgogICAgIAogICAgIHZvaWQgYWRkTGF6aWx5KFdhdGNocG9p
bnRTZXQqKTsKICAgICB2b2lkIGFkZExhemlseShJbmxpbmVXYXRjaHBvaW50U2V0Jik7CisgICAg
dm9pZCBhZGRMYXppbHkoSW5mZXJyZWRWYWx1ZSopOwogICAgIHZvaWQgYWRkTGF6aWx5KEpTQXJy
YXlCdWZmZXJWaWV3Kik7CiAgICAgCiAgICAgYm9vbCBjb25zaWRlcihTdHJ1Y3R1cmUqKTsKQEAg
LTEzNSw2ICsxNDUsMTAgQEAgcHVibGljOgogICAgIHsKICAgICAgICAgcmV0dXJuIG1faW5saW5l
U2V0cy5pc1dhdGNoZWQoJnNldCk7CiAgICAgfQorICAgIGJvb2wgaXNXYXRjaGVkKEluZmVycmVk
VmFsdWUqIGluZmVycmVkVmFsdWUpCisgICAgeworICAgICAgICByZXR1cm4gbV9pbmZlcnJlZFZh
bHVlcy5pc1dhdGNoZWQoaW5mZXJyZWRWYWx1ZSk7CisgICAgfQogICAgIGJvb2wgaXNXYXRjaGVk
KEpTQXJyYXlCdWZmZXJWaWV3KiB2aWV3KQogICAgIHsKICAgICAgICAgcmV0dXJuIG1fYnVmZmVy
Vmlld3MuaXNXYXRjaGVkKHZpZXcpOwpAQCAtMTQzLDYgKzE1Nyw3IEBAIHB1YmxpYzoKIHByaXZh
dGU6CiAgICAgR2VuZXJpY0Rlc2lyZWRXYXRjaHBvaW50czxXYXRjaHBvaW50U2V0PiBtX3NldHM7
CiAgICAgR2VuZXJpY0Rlc2lyZWRXYXRjaHBvaW50czxJbmxpbmVXYXRjaHBvaW50U2V0PiBtX2lu
bGluZVNldHM7CisgICAgR2VuZXJpY0Rlc2lyZWRXYXRjaHBvaW50czxJbmZlcnJlZFZhbHVlLCBJ
bmZlcnJlZFZhbHVlQWRhcHRvcj4gbV9pbmZlcnJlZFZhbHVlczsKICAgICBHZW5lcmljRGVzaXJl
ZFdhdGNocG9pbnRzPEpTQXJyYXlCdWZmZXJWaWV3LCBBcnJheUJ1ZmZlclZpZXdXYXRjaHBvaW50
QWRhcHRvcj4gbV9idWZmZXJWaWV3czsKIH07CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiAxODI0OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzExLDggKzMxMSw4IEBAIHZv
aWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCwgY29uc3QKICAgICAgICAgb3V0LnByaW50
KGNvbW1hLCAiXiIsIG5vZGUtPnBoaSgpLT5pbmRleCgpKTsKICAgICBpZiAobm9kZS0+aGFzRXhl
Y3V0aW9uQ291bnRlcigpKQogICAgICAgICBvdXQucHJpbnQoY29tbWEsIFJhd1BvaW50ZXIobm9k
ZS0+ZXhlY3V0aW9uQ291bnRlcigpKSk7Ci0gICAgaWYgKG5vZGUtPmhhc1ZhcmlhYmxlV2F0Y2hw
b2ludFNldCgpKQotICAgICAgICBvdXQucHJpbnQoY29tbWEsIFJhd1BvaW50ZXIobm9kZS0+dmFy
aWFibGVXYXRjaHBvaW50U2V0KCkpKTsKKyAgICBpZiAobm9kZS0+aGFzV2F0Y2hwb2ludFNldCgp
KQorICAgICAgICBvdXQucHJpbnQoY29tbWEsIFJhd1BvaW50ZXIobm9kZS0+d2F0Y2hwb2ludFNl
dCgpKSk7CiAgICAgaWYgKG5vZGUtPmhhc1N0b3JhZ2VQb2ludGVyKCkpCiAgICAgICAgIG91dC5w
cmludChjb21tYSwgUmF3UG9pbnRlcihub2RlLT5zdG9yYWdlUG9pbnRlcigpKSk7CiAgICAgaWYg
KG5vZGUtPmhhc09iamVjdE1hdGVyaWFsaXphdGlvbkRhdGEoKSkKQEAgLTEwMjYsNiArMTAyNiw4
IEBAIEpTVmFsdWUgR3JhcGg6OnRyeUdldENvbnN0YW50UHJvcGVydHkoY28KIAogSlNWYWx1ZSBH
cmFwaDo6dHJ5R2V0Q29uc3RhbnRDbG9zdXJlVmFyKEpTVmFsdWUgYmFzZSwgU2NvcGVPZmZzZXQg
b2Zmc2V0KQogeworICAgIC8vIFRoaXMgaGFzIGFuIGF3ZXNvbWUgY29uY3VycmVuY3kgc3Rvcnku
IFNlZSBjb21tZW50IGZvciBHZXRHbG9iYWxWYXIgaW4gQnl0ZUNvZGVQYXJzZXIuCisgICAgCiAg
ICAgaWYgKCFiYXNlKQogICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwogICAgIApAQCAtMTAzNCwy
NCArMTAzNiwyOCBAQCBKU1ZhbHVlIEdyYXBoOjp0cnlHZXRDb25zdGFudENsb3N1cmVWYXIoCiAg
ICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CiAgICAgCiAgICAgU3ltYm9sVGFibGUqIHN5bWJvbFRh
YmxlID0gYWN0aXZhdGlvbi0+c3ltYm9sVGFibGUoKTsKLSAgICBDb25jdXJyZW50SklUTG9ja2Vy
IGxvY2tlcihzeW1ib2xUYWJsZS0+bV9sb2NrKTsKLSAgICAKLSAgICBpZiAoc3ltYm9sVGFibGUt
Pm1fZnVuY3Rpb25FbnRlcmVkT25jZS5oYXNCZWVuSW52YWxpZGF0ZWQoKSkKLSAgICAgICAgcmV0
dXJuIEpTVmFsdWUoKTsKLSAgICAKLSAgICBTeW1ib2xUYWJsZUVudHJ5KiBlbnRyeSA9IHN5bWJv
bFRhYmxlLT5lbnRyeUZvcihsb2NrZXIsIG9mZnNldCk7Ci0gICAgaWYgKCFlbnRyeSkKLSAgICAg
ICAgcmV0dXJuIEpTVmFsdWUoKTsKLSAgICAKLSAgICBWYXJpYWJsZVdhdGNocG9pbnRTZXQqIHNl
dCA9IGVudHJ5LT53YXRjaHBvaW50U2V0KCk7Ci0gICAgaWYgKCFzZXQpCi0gICAgICAgIHJldHVy
biBKU1ZhbHVlKCk7Ci0gICAgCi0gICAgSlNWYWx1ZSB2YWx1ZSA9IHNldC0+aW5mZXJyZWRWYWx1
ZSgpOwotICAgIGlmICghdmFsdWUpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CisgICAgSlNW
YWx1ZSB2YWx1ZTsKKyAgICBXYXRjaHBvaW50U2V0KiBzZXQ7CisgICAgeworICAgICAgICBDb25j
dXJyZW50SklUTG9ja2VyIGxvY2tlcihzeW1ib2xUYWJsZS0+bV9sb2NrKTsKKyAgICAgICAgCisg
ICAgICAgIFN5bWJvbFRhYmxlRW50cnkqIGVudHJ5ID0gc3ltYm9sVGFibGUtPmVudHJ5Rm9yKGxv
Y2tlciwgb2Zmc2V0KTsKKyAgICAgICAgaWYgKCFlbnRyeSkKKyAgICAgICAgICAgIHJldHVybiBK
U1ZhbHVlKCk7CisgICAgICAgIAorICAgICAgICBzZXQgPSBlbnRyeS0+d2F0Y2hwb2ludFNldCgp
OworICAgICAgICBpZiAoIXNldCkKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CisgICAg
ICAgIAorICAgICAgICBpZiAoc2V0LT5zdGF0ZSgpICE9IElzV2F0Y2hlZCkKKyAgICAgICAgICAg
IHJldHVybiBKU1ZhbHVlKCk7CisgICAgICAgIAorICAgICAgICBBU1NFUlQoZW50cnktPnNjb3Bl
T2Zmc2V0KCkgPT0gb2Zmc2V0KTsKKyAgICAgICAgdmFsdWUgPSBhY3RpdmF0aW9uLT52YXJpYWJs
ZUF0KG9mZnNldCkuZ2V0KCk7CisgICAgICAgIGlmICghdmFsdWUpCisgICAgICAgICAgICByZXR1
cm4gSlNWYWx1ZSgpOworICAgIH0KICAgICAKLSAgICB3YXRjaHBvaW50cygpLmFkZExhemlseShz
eW1ib2xUYWJsZS0+bV9mdW5jdGlvbkVudGVyZWRPbmNlKTsKICAgICB3YXRjaHBvaW50cygpLmFk
ZExhemlseShzZXQpOwogICAgIAogICAgIHJldHVybiB2YWx1ZTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHTm9kZS5oCShyZXZpc2lvbiAxODI0OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR05vZGUuaAkod29ya2luZyBjb3B5KQpAQCAtMTIxOSwxNCArMTIxOSwxNCBA
QCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIG1fb3BJbmZvID0gYml0d2lzZV9jYXN0PHVpbnRwdHJf
dD4odmFsdWUpOwogICAgIH0KICAgICAKLSAgICBib29sIGhhc1ZhcmlhYmxlV2F0Y2hwb2ludFNl
dCgpCisgICAgYm9vbCBoYXNXYXRjaHBvaW50U2V0KCkKICAgICB7CiAgICAgICAgIHJldHVybiBv
cCgpID09IE5vdGlmeVdyaXRlOwogICAgIH0KICAgICAKLSAgICBWYXJpYWJsZVdhdGNocG9pbnRT
ZXQqIHZhcmlhYmxlV2F0Y2hwb2ludFNldCgpCisgICAgV2F0Y2hwb2ludFNldCogd2F0Y2hwb2lu
dFNldCgpCiAgICAgewotICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxWYXJpYWJsZVdh
dGNocG9pbnRTZXQqPihtX29wSW5mbyk7CisgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0
PFdhdGNocG9pbnRTZXQqPihtX29wSW5mbyk7CiAgICAgfQogICAgIAogICAgIGJvb2wgaGFzU3Rv
cmFnZVBvaW50ZXIoKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRp
b25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJh
dGlvbnMuY3BwCShyZXZpc2lvbiAxODI0OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZn
L0RGR09wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDc3LDEzICsxMDc3LDEyIEBA
IGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uU3dpdGNoU3RyaW4KICAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8Y2hhcio+KGV4ZWMtPmNvZGVCbG9jaygpLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUo
dGFibGVJbmRleCkuY3RpRm9yVmFsdWUoc3RyaW5nLT52YWx1ZShleGVjKS5pbXBsKCkpLmV4ZWN1
dGFibGVBZGRyZXNzKCkpOwogfQogCi12b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTm90aWZ5
V3JpdGUoRXhlY1N0YXRlKiBleGVjLCBWYXJpYWJsZVdhdGNocG9pbnRTZXQqIHNldCwgRW5jb2Rl
ZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQordm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5vdGlm
eVdyaXRlKEV4ZWNTdGF0ZSogZXhlYywgV2F0Y2hwb2ludFNldCogc2V0KQogewogICAgIFZNJiB2
bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZlQ2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4
ZWMpOwotICAgIEpTVmFsdWUgdmFsdWUgPSBKU1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsK
IAotICAgIHNldC0+bm90aWZ5V3JpdGUodm0sIHZhbHVlLCAiRXhlY3V0ZWQgTm90aWZ5V3JpdGUi
KTsKKyAgICBzZXQtPnRvdWNoKCJFeGVjdXRlZCBOb3RpZnlXcml0ZSIpOwogfQogCiB2b2lkIEpJ
VF9PUEVSQVRJT04gb3BlcmF0aW9uVGhyb3dTdGFja092ZXJmbG93Rm9yVmFyYXJncyhFeGVjU3Rh
dGUqIGV4ZWMpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMu
aAkocmV2aXNpb24gMTgyNDk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVy
YXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAgLTEyNyw3ICsxMjcsNyBAQCBKU0NlbGwqIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uTWFrZVJvcGUyCiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uTWFrZVJvcGUzKEV4ZWNTdGF0ZSosIEpTU3RyaW5nKiwgSlNTdHJpbmcqLCBKU1N0cmluZyop
OwogY2hhciogSklUX09QRVJBVElPTiBvcGVyYXRpb25GaW5kU3dpdGNoSW1tVGFyZ2V0Rm9yRG91
YmxlKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1ZhbHVlLCBzaXplX3QgdGFibGVJbmRleCk7CiBjaGFy
KiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblN3aXRjaFN0cmluZyhFeGVjU3RhdGUqLCBzaXplX3Qg
dGFibGVJbmRleCwgSlNTdHJpbmcqKTsKLXZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25Ob3Rp
ZnlXcml0ZShFeGVjU3RhdGUqLCBWYXJpYWJsZVdhdGNocG9pbnRTZXQqLCBFbmNvZGVkSlNWYWx1
ZSk7Cit2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTm90aWZ5V3JpdGUoRXhlY1N0YXRlKiwg
V2F0Y2hwb2ludFNldCopOwogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblRocm93U3RhY2tP
dmVyZmxvd0ZvclZhcmFyZ3MoRXhlY1N0YXRlKikgV1RGX0lOVEVSTkFMOwogaW50MzJfdCBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvblNpemVPZlZhcmFyZ3MoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFs
dWUgYXJndW1lbnRzLCBpbnQzMl90IGZpcnN0VmFyQXJnT2Zmc2V0KTsKIHZvaWQgSklUX09QRVJB
VElPTiBvcGVyYXRpb25Mb2FkVmFyYXJncyhFeGVjU3RhdGUqLCBpbnQzMl90IGZpcnN0RWxlbWVu
dERlc3QsIEVuY29kZWRKU1ZhbHVlIGFyZ3VtZW50cywgaW50MzJfdCBvZmZzZXQsIGludDMyX3Qg
bGVuZ3RoLCBpbnQzMl90IG1hbmRhdG9yeU1pbmltdW0pOwpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCShyZXZpc2lv
biAxODI0OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklU
MzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOTg3LDMyICszOTg3LDcgQEAgdm9pZCBTcGVj
dWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBub2RlKQogICAgIH0KIAogICAgIGNhc2UgTm90aWZ5
V3JpdGU6IHsKLSAgICAgICAgVmFyaWFibGVXYXRjaHBvaW50U2V0KiBzZXQgPSBub2RlLT52YXJp
YWJsZVdhdGNocG9pbnRTZXQoKTsKLSAgICAKLSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUo
dGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAgICAgICBHUFJSZWcgdmFsdWVUYWdHUFIgPSB2YWx1
ZS50YWdHUFIoKTsKLSAgICAgICAgR1BSUmVnIHZhbHVlUGF5bG9hZEdQUiA9IHZhbHVlLnBheWxv
YWRHUFIoKTsKLSAgICAKLSAgICAgICAgR1BSVGVtcG9yYXJ5IHRlbXAodGhpcyk7Ci0gICAgICAg
IEdQUlJlZyB0ZW1wR1BSID0gdGVtcC5ncHIoKTsKLSAgICAKLSAgICAgICAgbV9qaXQubG9hZDgo
c2V0LT5hZGRyZXNzT2ZTdGF0ZSgpLCB0ZW1wR1BSKTsKLSAgICAKLSAgICAgICAgSklUQ29tcGls
ZXI6Okp1bXAgaXNEb25lID0gbV9qaXQuYnJhbmNoMzIoSklUQ29tcGlsZXI6OkVxdWFsLCB0ZW1w
R1BSLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpOwotICAgICAgICBKSVRDb21waWxlcjo6
SnVtcExpc3Qgbm90aWZ5U2xvdzsKLSAgICAgICAgbm90aWZ5U2xvdy5hcHBlbmQobV9qaXQuYnJh
bmNoMzIoCi0gICAgICAgICAgICBKSVRDb21waWxlcjo6Tm90RXF1YWwsCi0gICAgICAgICAgICBK
SVRDb21waWxlcjo6QWJzb2x1dGVBZGRyZXNzKHNldC0+YWRkcmVzc09mSW5mZXJyZWRWYWx1ZSgp
LT5wYXlsb2FkUG9pbnRlcigpKSwKLSAgICAgICAgICAgIHZhbHVlUGF5bG9hZEdQUikpOwotICAg
ICAgICBub3RpZnlTbG93LmFwcGVuZChtX2ppdC5icmFuY2gzMigKLSAgICAgICAgICAgIEpJVENv
bXBpbGVyOjpOb3RFcXVhbCwgCi0gICAgICAgICAgICBKSVRDb21waWxlcjo6QWJzb2x1dGVBZGRy
ZXNzKHNldC0+YWRkcmVzc09mSW5mZXJyZWRWYWx1ZSgpLT50YWdQb2ludGVyKCkpLAotICAgICAg
ICAgICAgdmFsdWVUYWdHUFIpKTsKLSAgICAgICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCi0gICAg
ICAgICAgICBzbG93UGF0aENhbGwobm90aWZ5U2xvdywgdGhpcywgb3BlcmF0aW9uTm90aWZ5V3Jp
dGUsIE5vUmVzdWx0LCBzZXQsIHZhbHVlVGFnR1BSLCB2YWx1ZVBheWxvYWRHUFIpKTsKLSAgICAg
ICAgaXNEb25lLmxpbmsoJm1faml0KTsKLSAgICAKLSAgICAgICAgbm9SZXN1bHQobm9kZSk7Cisg
ICAgICAgIGNvbXBpbGVOb3RpZnlXcml0ZShub2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQ2NC5jcHAJKHJldmlzaW9uIDE4MjQ5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcv
REZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQwMTksMjYgKzQwMTks
NyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUqIG5vZGUpCiAgICAgfQogCiAg
ICAgY2FzZSBOb3RpZnlXcml0ZTogewotICAgICAgICBWYXJpYWJsZVdhdGNocG9pbnRTZXQqIHNl
dCA9IG5vZGUtPnZhcmlhYmxlV2F0Y2hwb2ludFNldCgpOwotICAgIAotICAgICAgICBKU1ZhbHVl
T3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7Ci0gICAgICAgIEdQUlJlZyB2YWx1
ZUdQUiA9IHZhbHVlLmdwcigpOwotICAgIAotICAgICAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlz
KTsKLSAgICAgICAgR1BSUmVnIHRlbXBHUFIgPSB0ZW1wLmdwcigpOwotICAgIAotICAgICAgICBt
X2ppdC5sb2FkOChzZXQtPmFkZHJlc3NPZlN0YXRlKCksIHRlbXBHUFIpOwotICAgIAotICAgICAg
ICBKSVRDb21waWxlcjo6SnVtcCBpc0RvbmUgPQotICAgICAgICAgICAgbV9qaXQuYnJhbmNoMzIo
SklUQ29tcGlsZXI6OkVxdWFsLCB0ZW1wR1BSLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkp
OwotICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBzbG93Q2FzZSA9IG1faml0LmJyYW5jaDY0KEpJ
VENvbXBpbGVyOjpOb3RFcXVhbCwKLSAgICAgICAgICAgIEpJVENvbXBpbGVyOjpBYnNvbHV0ZUFk
ZHJlc3Moc2V0LT5hZGRyZXNzT2ZJbmZlcnJlZFZhbHVlKCkpLCB2YWx1ZUdQUik7Ci0gICAgICAg
IGlzRG9uZS5saW5rKCZtX2ppdCk7Ci0gICAgCi0gICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9y
KAotICAgICAgICAgICAgc2xvd1BhdGhDYWxsKHNsb3dDYXNlLCB0aGlzLCBvcGVyYXRpb25Ob3Rp
ZnlXcml0ZSwgTm9SZXN1bHQsIHNldCwgdmFsdWVHUFIpKTsKLQotICAgICAgICBub1Jlc3VsdChu
b2RlKTsKKyAgICAgICAgY29tcGlsZU5vdGlmeVdyaXRlKG5vZGUpOwogICAgICAgICBicmVhazsK
ICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3Vs
YXRpdmVKSVQuY3BwCShyZXZpc2lvbiAxODI0OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDM2Nyw4ICs0MzY3
LDEzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVOZXdGdW5jdGlvbigKICAgICBTcGVj
dWxhdGVDZWxsT3BlcmFuZCBzY29wZSh0aGlzLCBub2RlLT5jaGlsZDEoKSk7CiAgICAgR1BSUmVn
IHNjb3BlR1BSID0gc2NvcGUuZ3ByKCk7CiAgICAgZmx1c2hSZWdpc3RlcnMoKTsKLSAgICBjYWxs
T3BlcmF0aW9uKAotICAgICAgICBvcGVyYXRpb25OZXdGdW5jdGlvbiwgcmVzdWx0R1BSLCBzY29w
ZUdQUiwgbm9kZS0+Y2FzdE9wZXJhbmQ8RnVuY3Rpb25FeGVjdXRhYmxlKj4oKSk7CisgICAgRnVu
Y3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gbm9kZS0+Y2FzdE9wZXJhbmQ8RnVuY3Rpb25F
eGVjdXRhYmxlKj4oKTsKKyAgICBKX0pJVE9wZXJhdGlvbl9FSnNjQyBmdW5jdGlvbjsKKyAgICBp
ZiAoZXhlY3V0YWJsZS0+c2luZ2xldG9uRnVuY3Rpb24oKS0+aXNTdGlsbFZhbGlkKCkpCisgICAg
ICAgIGZ1bmN0aW9uID0gb3BlcmF0aW9uTmV3RnVuY3Rpb247CisgICAgZWxzZQorICAgICAgICBm
dW5jdGlvbiA9IG9wZXJhdGlvbk5ld0Z1bmN0aW9uV2l0aEludmFsaWRhdGVkUmVhbGxvY2F0aW9u
V2F0Y2hwb2ludDsKKyAgICBjYWxsT3BlcmF0aW9uKGZ1bmN0aW9uLCByZXN1bHRHUFIsIHNjb3Bl
R1BSLCBleGVjdXRhYmxlKTsKICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CiB9CiAK
QEAgLTQ0MzYsMTkgKzQ0NDEsMzEgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUZvcndh
cmRWYXJhcgogCiB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlQ3JlYXRlQWN0aXZhdGlvbihO
b2RlKiBub2RlKQogeworICAgIFN5bWJvbFRhYmxlKiB0YWJsZSA9IG1faml0LmdyYXBoKCkuc3lt
Ym9sVGFibGVGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsKKyAgICBTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSA9IG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKAorICAgICAgICBub2RlLT5vcmln
aW4uc2VtYW50aWMpLT5hY3RpdmF0aW9uU3RydWN0dXJlKCk7CisgICAgICAgIAogICAgIFNwZWN1
bGF0ZUNlbGxPcGVyYW5kIHNjb3BlKHRoaXMsIG5vZGUtPmNoaWxkMSgpKTsKKyAgICBHUFJSZWcg
c2NvcGVHUFIgPSBzY29wZS5ncHIoKTsKKyAgICAKKyAgICBpZiAodGFibGUtPnNpbmdsZXRvblNj
b3BlKCktPmlzU3RpbGxWYWxpZCgpKSB7CisgICAgICAgIEdQUkZsdXNoZWRDYWxsUmVzdWx0IHJl
c3VsdCh0aGlzKTsKKyAgICAgICAgR1BSUmVnIHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAg
ICAgICAgCisgICAgICAgIGZsdXNoUmVnaXN0ZXJzKCk7CisgICAgICAgIAorICAgICAgICBjYWxs
T3BlcmF0aW9uKG9wZXJhdGlvbkNyZWF0ZUFjdGl2YXRpb25EaXJlY3QsIHJlc3VsdEdQUiwgc3Ry
dWN0dXJlLCBzY29wZUdQUiwgdGFibGUpOworICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwg
bm9kZSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCiAgICAgR1BSVGVtcG9yYXJ5IHJl
c3VsdCh0aGlzKTsKICAgICBHUFJUZW1wb3Jhcnkgc2NyYXRjaDEodGhpcyk7CiAgICAgR1BSVGVt
cG9yYXJ5IHNjcmF0Y2gyKHRoaXMpOwotICAgIEdQUlJlZyBzY29wZUdQUiA9IHNjb3BlLmdwcigp
OwogICAgIEdQUlJlZyByZXN1bHRHUFIgPSByZXN1bHQuZ3ByKCk7CiAgICAgR1BSUmVnIHNjcmF0
Y2gxR1BSID0gc2NyYXRjaDEuZ3ByKCk7CiAgICAgR1BSUmVnIHNjcmF0Y2gyR1BSID0gc2NyYXRj
aDIuZ3ByKCk7CiAgICAgICAgIAotICAgIFN5bWJvbFRhYmxlKiB0YWJsZSA9IG1faml0LmdyYXBo
KCkuc3ltYm9sVGFibGVGb3Iobm9kZS0+b3JpZ2luLnNlbWFudGljKTsKLSAgICBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSA9IG1faml0LmdyYXBoKCkuZ2xvYmFsT2JqZWN0Rm9yKAotICAgICAgICBub2Rl
LT5vcmlnaW4uc2VtYW50aWMpLT5hY3RpdmF0aW9uU3RydWN0dXJlKCk7Ci0gICAgICAgIAogICAg
IEpJVENvbXBpbGVyOjpKdW1wTGlzdCBzbG93UGF0aDsKICAgICBlbWl0QWxsb2NhdGVKU09iamVj
dFdpdGhLbm93blNpemU8SlNMZXhpY2FsRW52aXJvbm1lbnQ+KAogICAgICAgICByZXN1bHRHUFIs
IFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwgVHJ1c3RlZEltbVB0cigwKSwgc2NyYXRjaDFHUFIs
IHNjcmF0Y2gyR1BSLApAQCAtNDcxNCw2ICs0NzMxLDIxIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVDcmVhdGVDbG9uZWQKICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CiB9
CiAKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVOb3RpZnlXcml0ZShOb2RlKiBub2RlKQor
eworICAgIFdhdGNocG9pbnRTZXQqIHNldCA9IG5vZGUtPndhdGNocG9pbnRTZXQoKTsKKyAgICAK
KyAgICBKSVRDb21waWxlcjo6SnVtcCBzbG93Q2FzZSA9IG1faml0LmJyYW5jaDgoCisgICAgICAg
IEpJVENvbXBpbGVyOjpOb3RFcXVhbCwKKyAgICAgICAgSklUQ29tcGlsZXI6OkFic29sdXRlQWRk
cmVzcyhzZXQtPmFkZHJlc3NPZlN0YXRlKCkpLAorICAgICAgICBUcnVzdGVkSW1tMzIoSXNJbnZh
bGlkYXRlZCkpOworICAgIAorICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAorICAgICAgICBzbG93
UGF0aENhbGwoc2xvd0Nhc2UsIHRoaXMsIG9wZXJhdGlvbk5vdGlmeVdyaXRlLCBOb1Jlc3VsdCwg
c2V0KSk7CisgICAgCisgICAgbm9SZXN1bHQobm9kZSk7Cit9CisKIGJvb2wgU3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGVSZWdFeHBFeGVjKE5vZGUqIG5vZGUpCiB7CiAgICAgdW5zaWduZWQgYnJhbmNo
SW5kZXhJbkJsb2NrID0gZGV0ZWN0UGVlcEhvbGVCcmFuY2goKTsKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmgJKHJldmlzaW9uIDE4MjQ5OCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTIwMCw2ICsxMjAwLDEyIEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGFw
cGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tTZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwog
ICAgIH0KIAorICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oVl9KSVRPcGVyYXRp
b25fRVdzIG9wZXJhdGlvbiwgV2F0Y2hwb2ludFNldCogd2F0Y2hwb2ludFNldCkKKyAgICB7Cisg
ICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRyKHdh
dGNocG9pbnRTZXQpKTsKKyAgICAgICAgcmV0dXJuIGFwcGVuZENhbGwob3BlcmF0aW9uKTsKKyAg
ICB9CisKICNpZiBVU0UoSlNWQUxVRTY0KQogICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVy
YXRpb24oSl9KSVRPcGVyYXRpb25fRSBvcGVyYXRpb24sIEdQUlJlZyByZXN1bHQpCiAgICAgewpA
QCAtMTQ2MCwxMiArMTQ2Niw2IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxX
aXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uKTsKICAgICB9CiAKLSAgICBKSVRDb21waWxlcjo6
Q2FsbCBjYWxsT3BlcmF0aW9uKFZfSklUT3BlcmF0aW9uX0VWd3NKIG9wZXJhdGlvbiwgVmFyaWFi
bGVXYXRjaHBvaW50U2V0KiB3YXRjaHBvaW50U2V0LCBHUFJSZWcgYXJnKQotICAgIHsKLSAgICAg
ICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKFRydXN0ZWRJbW1QdHIod2F0Y2hw
b2ludFNldCksIGFyZyk7Ci0gICAgICAgIHJldHVybiBhcHBlbmRDYWxsKG9wZXJhdGlvbik7Ci0g
ICAgfQotCiAgICAgSklUQ29tcGlsZXI6OkNhbGwgY2FsbE9wZXJhdGlvbihEX0pJVE9wZXJhdGlv
bl9FSiBvcGVyYXRpb24sIEZQUlJlZyByZXN1bHQsIEdQUlJlZyBhcmcxKQogICAgIHsKICAgICAg
ICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKGFyZzEpOwpAQCAtMTc3NiwxMiAr
MTc3Niw2IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9u
Q2hlY2sob3BlcmF0aW9uKTsKICAgICB9CiAKLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3Bl
cmF0aW9uKFZfSklUT3BlcmF0aW9uX0VWd3NKIG9wZXJhdGlvbiwgVmFyaWFibGVXYXRjaHBvaW50
U2V0KiB3YXRjaHBvaW50U2V0LCBHUFJSZWcgYXJnVGFnLCBHUFJSZWcgYXJnUGF5bG9hZCkKLSAg
ICB7Ci0gICAgICAgIG1faml0LnNldHVwQXJndW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1t
UHRyKHdhdGNocG9pbnRTZXQpLCBhcmdQYXlsb2FkLCBhcmdUYWcpOwotICAgICAgICByZXR1cm4g
YXBwZW5kQ2FsbChvcGVyYXRpb24pOwotICAgIH0KLQogICAgIEpJVENvbXBpbGVyOjpDYWxsIGNh
bGxPcGVyYXRpb24oRF9KSVRPcGVyYXRpb25fRUogb3BlcmF0aW9uLCBGUFJSZWcgcmVzdWx0LCBH
UFJSZWcgYXJnMVRhZywgR1BSUmVnIGFyZzFQYXlsb2FkKQogICAgIHsKICAgICAgICAgbV9qaXQu
c2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRlKEVBQklfMzJCSVRfRFVNTVlfQVJHIGFyZzFQYXls
b2FkLCBhcmcxVGFnKTsKQEAgLTIyMTMsNiArMjIwNyw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGNv
bXBpbGVQdXRUb0FyZ3VtZW50cyhOb2RlKik7CiAgICAgdm9pZCBjb21waWxlQ3JlYXRlU2NvcGVk
QXJndW1lbnRzKE5vZGUqKTsKICAgICB2b2lkIGNvbXBpbGVDcmVhdGVDbG9uZWRBcmd1bWVudHMo
Tm9kZSopOworICAgIHZvaWQgY29tcGlsZU5vdGlmeVdyaXRlKE5vZGUqKTsKICAgICBib29sIGNv
bXBpbGVSZWdFeHBFeGVjKE5vZGUqKTsKICAgICAKICAgICBKSVRDb21waWxlcjo6SnVtcCBicmFu
Y2hJc0NlbGwoSlNWYWx1ZVJlZ3MpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2UuY3BwCShyZXZpc2lvbiAxODI0
OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhh
c2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw2ICszMiw3IEBACiAjaW5jbHVkZSAiREZHQ2xv
YmJlcml6ZS5oIgogI2luY2x1ZGUgIkRGR0dyYXBoLmgiCiAjaW5jbHVkZSAiREZHUGhhc2UuaCIK
KyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAKIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZH
IHsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbnRyaW5zaWNSZXBvc2l0
b3J5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbnRyaW5z
aWNSZXBvc2l0b3J5LmgJKHJldmlzaW9uIDE4MjQ5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9mdGwvRlRMSW50cmluc2ljUmVwb3NpdG9yeS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDUsNyAr
MTA1LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBGVEwgewogICAgIG1hY3JvKFZfSklU
T3BlcmF0aW9uX0VPWkosIGZ1bmN0aW9uVHlwZSh2b2lkVHlwZSwgaW50UHRyLCBpbnRQdHIsIGlu
dDMyLCBpbnQ2NCkpIFwKICAgICBtYWNybyhWX0pJVE9wZXJhdGlvbl9FQywgZnVuY3Rpb25UeXBl
KHZvaWRUeXBlLCBpbnRQdHIsIGludFB0cikpIFwKICAgICBtYWNybyhWX0pJVE9wZXJhdGlvbl9F
Q2IsIGZ1bmN0aW9uVHlwZSh2b2lkVHlwZSwgaW50UHRyLCBpbnRQdHIpKSBcCi0gICAgbWFjcm8o
Vl9KSVRPcGVyYXRpb25fRVZ3c0osIGZ1bmN0aW9uVHlwZSh2b2lkVHlwZSwgaW50UHRyLCBpbnRQ
dHIsIGludDY0KSkgXAorICAgIG1hY3JvKFZfSklUT3BlcmF0aW9uX0VXcywgZnVuY3Rpb25UeXBl
KHZvaWRUeXBlLCBpbnRQdHIsIGludFB0cikpIFwKICAgICBtYWNybyhWX0pJVE9wZXJhdGlvbl9F
WkpaWlosIGZ1bmN0aW9uVHlwZSh2b2lkVHlwZSwgaW50UHRyLCBpbnQzMiwgaW50NjQsIGludDMy
LCBpbnQzMiwgaW50MzIpKSBcCiAgICAgbWFjcm8oVl9KSVRPcGVyYXRpb25fSiwgZnVuY3Rpb25U
eXBlKHZvaWRUeXBlLCBpbnQ2NCkpIFwKICAgICBtYWNybyhWX0pJVE9wZXJhdGlvbl9aLCBmdW5j
dGlvblR5cGUodm9pZFR5cGUsIGludDMyKSkgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAJKHJldmlzaW9uIDE4MjQ5OCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMTG93ZXJERkdUb0xMVk0uY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0yODc3LDYgKzI4NzcsMTQgQEAgcHJpdmF0ZToKICAgICAgICAgU3ltYm9sVGFibGUq
IHRhYmxlID0gbV9ncmFwaC5zeW1ib2xUYWJsZUZvcihtX25vZGUtPm9yaWdpbi5zZW1hbnRpYyk7
CiAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3Io
bV9ub2RlLT5vcmlnaW4uc2VtYW50aWMpLT5hY3RpdmF0aW9uU3RydWN0dXJlKCk7CiAgICAgICAg
IAorICAgICAgICBpZiAodGFibGUtPnNpbmdsZXRvblNjb3BlKCktPmlzU3RpbGxWYWxpZCgpKSB7
CisgICAgICAgICAgICBMVmFsdWUgY2FsbFJlc3VsdCA9IHZtQ2FsbCgKKyAgICAgICAgICAgICAg
ICBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uQ3JlYXRlQWN0aXZhdGlvbkRpcmVjdCksIG1fY2Fs
bEZyYW1lLCB3ZWFrUG9pbnRlcihzdHJ1Y3R1cmUpLAorICAgICAgICAgICAgICAgIHNjb3BlLCB3
ZWFrUG9pbnRlcih0YWJsZSkpOworICAgICAgICAgICAgc2V0SlNWYWx1ZShjYWxsUmVzdWx0KTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgTEJhc2lj
QmxvY2sgc2xvd1BhdGggPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkNyZWF0ZUFjdGl2YXRpb24g
c2xvdyBwYXRoIikpOwogICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVX
X0JMT0NLKG1fb3V0LCAoIkNyZWF0ZUFjdGl2YXRpb24gY29udGludWF0aW9uIikpOwogICAgICAg
ICAKQEAgLTI5MTIsOSArMjkyMCwxNiBAQCBwcml2YXRlOgogICAgIAogICAgIHZvaWQgY29tcGls
ZU5ld0Z1bmN0aW9uKCkKICAgICB7CisgICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0
YWJsZSA9IG1fbm9kZS0+Y2FzdE9wZXJhbmQ8RnVuY3Rpb25FeGVjdXRhYmxlKj4oKTsKKyAgICAg
ICAgSl9KSVRPcGVyYXRpb25fRUpzY0MgZnVuY3Rpb247CisgICAgICAgIGlmIChleGVjdXRhYmxl
LT5zaW5nbGV0b25GdW5jdGlvbigpLT5pc1N0aWxsVmFsaWQoKSkKKyAgICAgICAgICAgIGZ1bmN0
aW9uID0gb3BlcmF0aW9uTmV3RnVuY3Rpb247CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGZ1
bmN0aW9uID0gb3BlcmF0aW9uTmV3RnVuY3Rpb25XaXRoSW52YWxpZGF0ZWRSZWFsbG9jYXRpb25X
YXRjaHBvaW50OworICAgICAgICAKICAgICAgICAgTFZhbHVlIHJlc3VsdCA9IHZtQ2FsbCgKLSAg
ICAgICAgICAgIG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25OZXdGdW5jdGlvbiksIG1fY2FsbEZy
YW1lLAotICAgICAgICAgICAgbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKSwgd2Vha1BvaW50ZXIo
bV9ub2RlLT5jYXN0T3BlcmFuZDxGdW5jdGlvbkV4ZWN1dGFibGUqPigpKSk7CisgICAgICAgICAg
ICBtX291dC5vcGVyYXRpb24oZnVuY3Rpb24pLCBtX2NhbGxGcmFtZSwgbG93Q2VsbChtX25vZGUt
PmNoaWxkMSgpKSwKKyAgICAgICAgICAgIHdlYWtQb2ludGVyKGV4ZWN1dGFibGUpKTsKICAgICAg
ICAgc2V0SlNWYWx1ZShyZXN1bHQpOwogICAgIH0KICAgICAKQEAgLTM3ODMsMjkgKzM3OTgsMTkg
QEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lkIGNvbXBpbGVOb3RpZnlXcml0ZSgpCiAgICAgewot
ICAgICAgICBWYXJpYWJsZVdhdGNocG9pbnRTZXQqIHNldCA9IG1fbm9kZS0+dmFyaWFibGVXYXRj
aHBvaW50U2V0KCk7Ci0gICAgICAgIAotICAgICAgICBMVmFsdWUgdmFsdWUgPSBsb3dKU1ZhbHVl
KG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAgICBXYXRjaHBvaW50U2V0KiBzZXQgPSBtX25vZGUt
PndhdGNocG9pbnRTZXQoKTsKICAgICAgICAgCiAgICAgICAgIExCYXNpY0Jsb2NrIGlzTm90SW52
YWxpZGF0ZWQgPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIk5vdGlmeVdyaXRlIG5vdCBpbnZhbGlk
YXRlZCBjYXNlIikpOwotICAgICAgICBMQmFzaWNCbG9jayBub3RpZnlTbG93ID0gRlRMX05FV19C
TE9DSyhtX291dCwgKCJOb3RpZnlXcml0ZSBub3RpZnkgc2xvdyBjYXNlIikpOwogICAgICAgICBM
QmFzaWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIk5vdGlmeVdy
aXRlIGNvbnRpbnVhdGlvbiIpKTsKICAgICAgICAgCiAgICAgICAgIExWYWx1ZSBzdGF0ZSA9IG1f
b3V0LmxvYWQ4KG1fb3V0LmFic29sdXRlKHNldC0+YWRkcmVzc09mU3RhdGUoKSkpOwotICAgICAg
ICAKICAgICAgICAgbV9vdXQuYnJhbmNoKAogICAgICAgICAgICAgbV9vdXQuZXF1YWwoc3RhdGUs
IG1fb3V0LmNvbnN0SW50OChJc0ludmFsaWRhdGVkKSksCiAgICAgICAgICAgICB1c3VhbGx5KGNv
bnRpbnVhdGlvbiksIHJhcmVseShpc05vdEludmFsaWRhdGVkKSk7CiAgICAgICAgIAotICAgICAg
ICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGlzTm90SW52YWxpZGF0ZWQs
IG5vdGlmeVNsb3cpOwotCi0gICAgICAgIG1fb3V0LmJyYW5jaCgKLSAgICAgICAgICAgIG1fb3V0
LmVxdWFsKHZhbHVlLCBtX291dC5sb2FkNjQobV9vdXQuYWJzb2x1dGUoc2V0LT5hZGRyZXNzT2ZJ
bmZlcnJlZFZhbHVlKCkpKSksCi0gICAgICAgICAgICB1bnN1cmUoY29udGludWF0aW9uKSwgdW5z
dXJlKG5vdGlmeVNsb3cpKTsKLQotICAgICAgICBtX291dC5hcHBlbmRUbyhub3RpZnlTbG93LCBj
b250aW51YXRpb24pOworICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVu
ZFRvKGlzTm90SW52YWxpZGF0ZWQsIGNvbnRpbnVhdGlvbik7CiAKLSAgICAgICAgdm1DYWxsKG1f
b3V0Lm9wZXJhdGlvbihvcGVyYXRpb25Ob3RpZnlXcml0ZSksIG1fY2FsbEZyYW1lLCBtX291dC5j
b25zdEludFB0cihzZXQpLCB2YWx1ZSk7CisgICAgICAgIHZtQ2FsbChtX291dC5vcGVyYXRpb24o
b3BlcmF0aW9uTm90aWZ5V3JpdGUpLCBtX2NhbGxGcmFtZSwgbV9vdXQuY29uc3RJbnRQdHIoc2V0
KSk7CiAgICAgICAgIG1fb3V0Lmp1bXAoY29udGludWF0aW9uKTsKICAgICAgICAgCiAgICAgICAg
IG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlvbiwgbGFzdE5leHQpOwpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCShyZXZpc2lv
biAxODI0OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0
ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04OSw2ICs4OSw0NyBAQCB1c2luZyBuYW1lc3BhY2Ug
c3RkOwogCiBuYW1lc3BhY2UgSlNDIHsKIAorU3RyaW5nIFN0YWNrRnJhbWU6OmZyaWVuZGx5U291
cmNlVVJMKCkgY29uc3QKK3sKKyAgICBTdHJpbmcgdHJhY2VMaW5lOworICAgIAorICAgIHN3aXRj
aCAoY29kZVR5cGUpIHsKKyAgICBjYXNlIFN0YWNrRnJhbWVFdmFsQ29kZToKKyAgICBjYXNlIFN0
YWNrRnJhbWVGdW5jdGlvbkNvZGU6CisgICAgY2FzZSBTdGFja0ZyYW1lR2xvYmFsQ29kZToKKyAg
ICAgICAgaWYgKCFzb3VyY2VVUkwuaXNFbXB0eSgpKQorICAgICAgICAgICAgdHJhY2VMaW5lID0g
c291cmNlVVJMLmltcGwoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTdGFja0ZyYW1lTmF0
aXZlQ29kZToKKyAgICAgICAgdHJhY2VMaW5lID0gIltuYXRpdmUgY29kZV0iOworICAgICAgICBi
cmVhazsKKyAgICB9CisgICAgcmV0dXJuIHRyYWNlTGluZS5pc051bGwoKSA/IGVtcHR5U3RyaW5n
KCkgOiB0cmFjZUxpbmU7Cit9CisKK1N0cmluZyBTdGFja0ZyYW1lOjpmcmllbmRseUZ1bmN0aW9u
TmFtZShDYWxsRnJhbWUqIGNhbGxGcmFtZSkgY29uc3QKK3sKKyAgICBTdHJpbmcgdHJhY2VMaW5l
OworICAgIEpTT2JqZWN0KiBzdGFja0ZyYW1lQ2FsbGVlID0gY2FsbGVlLmdldCgpOworCisgICAg
c3dpdGNoIChjb2RlVHlwZSkgeworICAgIGNhc2UgU3RhY2tGcmFtZUV2YWxDb2RlOgorICAgICAg
ICB0cmFjZUxpbmUgPSAiZXZhbCBjb2RlIjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTdGFj
a0ZyYW1lTmF0aXZlQ29kZToKKyAgICAgICAgaWYgKGNhbGxlZSkKKyAgICAgICAgICAgIHRyYWNl
TGluZSA9IGdldENhbGN1bGF0ZWREaXNwbGF5TmFtZShjYWxsRnJhbWUsIHN0YWNrRnJhbWVDYWxs
ZWUpLmltcGwoKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTdGFja0ZyYW1lRnVuY3Rpb25D
b2RlOgorICAgICAgICB0cmFjZUxpbmUgPSBnZXRDYWxjdWxhdGVkRGlzcGxheU5hbWUoY2FsbEZy
YW1lLCBzdGFja0ZyYW1lQ2FsbGVlKS5pbXBsKCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
U3RhY2tGcmFtZUdsb2JhbENvZGU6CisgICAgICAgIHRyYWNlTGluZSA9ICJnbG9iYWwgY29kZSI7
CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gdHJhY2VMaW5lLmlzTnVsbCgpID8g
ZW1wdHlTdHJpbmcoKSA6IHRyYWNlTGluZTsKK30KKwogSlNWYWx1ZSBldmFsKENhbGxGcmFtZSog
Y2FsbEZyYW1lKQogewogICAgIGlmICghY2FsbEZyYW1lLT5hcmd1bWVudENvdW50KCkpCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaAko
cmV2aXNpb24gMTgyNDk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0lu
dGVycHJldGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDYgQEAKICNpbmNsdWRlICJB
cmdMaXN0LmgiCiAjaW5jbHVkZSAiSlNDSlNWYWx1ZS5oIgogI2luY2x1ZGUgIkpTQ2VsbC5oIgot
I2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKICNpbmNsdWRlICJKU09iamVjdC5oIgogI2luY2x1ZGUg
IkpTU3RhY2suaCIKICNpbmNsdWRlICJMTEludERhdGEuaCIKQEAgLTUxLDYgKzUwLDcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgRXhlY3V0YWJsZUJhc2U7CiAgICAgY2xhc3MgRnVuY3Rp
b25FeGVjdXRhYmxlOwogICAgIGNsYXNzIFZNOworICAgIGNsYXNzIEpTRnVuY3Rpb247CiAgICAg
Y2xhc3MgSlNHbG9iYWxPYmplY3Q7CiAgICAgY2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwog
ICAgIGNsYXNzIFByb2dyYW1FeGVjdXRhYmxlOwpAQCAtOTAsNDUgKzkwLDggQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIHVuc2lnbmVkIGJ5dGVjb2RlT2Zmc2V0OwogICAgICAgICBTdHJpbmcg
c291cmNlVVJMOwogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSBTdHJpbmcgdG9TdHJpbmcoQ2Fs
bEZyYW1lKik7Ci0gICAgICAgIFN0cmluZyBmcmllbmRseVNvdXJjZVVSTCgpIGNvbnN0Ci0gICAg
ICAgIHsKLSAgICAgICAgICAgIFN0cmluZyB0cmFjZUxpbmU7Ci0KLSAgICAgICAgICAgIHN3aXRj
aCAoY29kZVR5cGUpIHsKLSAgICAgICAgICAgIGNhc2UgU3RhY2tGcmFtZUV2YWxDb2RlOgotICAg
ICAgICAgICAgY2FzZSBTdGFja0ZyYW1lRnVuY3Rpb25Db2RlOgotICAgICAgICAgICAgY2FzZSBT
dGFja0ZyYW1lR2xvYmFsQ29kZToKLSAgICAgICAgICAgICAgICBpZiAoIXNvdXJjZVVSTC5pc0Vt
cHR5KCkpCi0gICAgICAgICAgICAgICAgICAgIHRyYWNlTGluZSA9IHNvdXJjZVVSTC5pbXBsKCk7
Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlIFN0YWNrRnJhbWVOYXRp
dmVDb2RlOgotICAgICAgICAgICAgICAgIHRyYWNlTGluZSA9ICJbbmF0aXZlIGNvZGVdIjsKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiB0
cmFjZUxpbmUuaXNOdWxsKCkgPyBlbXB0eVN0cmluZygpIDogdHJhY2VMaW5lOwotICAgICAgICB9
Ci0gICAgICAgIFN0cmluZyBmcmllbmRseUZ1bmN0aW9uTmFtZShDYWxsRnJhbWUqIGNhbGxGcmFt
ZSkgY29uc3QKLSAgICAgICAgewotICAgICAgICAgICAgU3RyaW5nIHRyYWNlTGluZTsKLSAgICAg
ICAgICAgIEpTT2JqZWN0KiBzdGFja0ZyYW1lQ2FsbGVlID0gY2FsbGVlLmdldCgpOwotCi0gICAg
ICAgICAgICBzd2l0Y2ggKGNvZGVUeXBlKSB7Ci0gICAgICAgICAgICBjYXNlIFN0YWNrRnJhbWVF
dmFsQ29kZToKLSAgICAgICAgICAgICAgICB0cmFjZUxpbmUgPSAiZXZhbCBjb2RlIjsKLSAgICAg
ICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgU3RhY2tGcmFtZU5hdGl2ZUNvZGU6
Ci0gICAgICAgICAgICAgICAgaWYgKGNhbGxlZSkKLSAgICAgICAgICAgICAgICAgICAgdHJhY2VM
aW5lID0gZ2V0Q2FsY3VsYXRlZERpc3BsYXlOYW1lKGNhbGxGcmFtZSwgc3RhY2tGcmFtZUNhbGxl
ZSkuaW1wbCgpOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSBTdGFj
a0ZyYW1lRnVuY3Rpb25Db2RlOgotICAgICAgICAgICAgICAgIHRyYWNlTGluZSA9IGdldENhbGN1
bGF0ZWREaXNwbGF5TmFtZShjYWxsRnJhbWUsIHN0YWNrRnJhbWVDYWxsZWUpLmltcGwoKTsKLSAg
ICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgIGNhc2UgU3RhY2tGcmFtZUdsb2JhbENv
ZGU6Ci0gICAgICAgICAgICAgICAgdHJhY2VMaW5lID0gImdsb2JhbCBjb2RlIjsKLSAgICAgICAg
ICAgICAgICBicmVhazsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiB0cmFjZUxp
bmUuaXNOdWxsKCkgPyBlbXB0eVN0cmluZygpIDogdHJhY2VMaW5lOwotICAgICAgICB9CisgICAg
ICAgIFN0cmluZyBmcmllbmRseVNvdXJjZVVSTCgpIGNvbnN0OworICAgICAgICBTdHJpbmcgZnJp
ZW5kbHlGdW5jdGlvbk5hbWUoQ2FsbEZyYW1lKikgY29uc3Q7CiAgICAgICAgIEpTX0VYUE9SVF9Q
UklWQVRFIHZvaWQgY29tcHV0ZUxpbmVBbmRDb2x1bW4odW5zaWduZWQmIGxpbmUsIHVuc2lnbmVk
JiBjb2x1bW4pOwogCiAgICAgcHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5j
cHAJKHJldmlzaW9uIDE4MjQ5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTA1LDYgKzEwNSwxNCBAQCB2b2lkIEpJVDo6ZW1pdEVudGVy
T3B0aW1pemF0aW9uQ2hlY2soKQogfQogI2VuZGlmCiAKK3ZvaWQgSklUOjplbWl0Tm90aWZ5V3Jp
dGUoV2F0Y2hwb2ludFNldCogc2V0KQoreworICAgIGlmICghc2V0IHx8IHNldC0+c3RhdGUoKSA9
PSBJc0ludmFsaWRhdGVkKQorICAgICAgICByZXR1cm47CisgICAgCisgICAgYWRkU2xvd0Nhc2Uo
YnJhbmNoOChOb3RFcXVhbCwgQWJzb2x1dGVBZGRyZXNzKHNldC0+YWRkcmVzc09mU3RhdGUoKSks
IFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSkpOworfQorCiB2b2lkIEpJVDo6YXNzZXJ0U3Rh
Y2tQb2ludGVyT2Zmc2V0KCkKIHsKICAgICBpZiAoQVNTRVJUX0RJU0FCTEVEKQpAQCAtMTg5LDcg
KzE5Nyw2IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKCkKICAgICAgICAgREVG
SU5FX1NMT1dfT1AoaXNfb2JqZWN0X29yX251bGwpCiAgICAgICAgIERFRklORV9TTE9XX09QKHR5
cGVvZikKIAotICAgICAgICBERUZJTkVfT1Aob3BfdG91Y2hfZW50cnkpCiAgICAgICAgIERFRklO
RV9PUChvcF9hZGQpCiAgICAgICAgIERFRklORV9PUChvcF9iaXRhbmQpCiAgICAgICAgIERFRklO
RV9PUChvcF9iaXRvcikKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkocmV2aXNpb24gMTgy
NDk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAkod29ya2luZyBjb3B5KQpA
QCAtNDU3LDcgKzQ1Nyw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAKICAgICAgICAgdm9p
ZCBhc3NlcnRTdGFja1BvaW50ZXJPZmZzZXQoKTsKIAotICAgICAgICB2b2lkIGVtaXRfb3BfdG91
Y2hfZW50cnkoSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0X29wX2FkZChJbnN0cnVj
dGlvbiopOwogICAgICAgICB2b2lkIGVtaXRfb3BfYml0YW5kKEluc3RydWN0aW9uKik7CiAgICAg
ICAgIHZvaWQgZW1pdF9vcF9iaXRvcihJbnN0cnVjdGlvbiopOwpAQCAtNjQwLDEzICs2MzksOSBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdm9pZCBlbWl0R2V0R2xvYmFsVmFyKHVpbnRwdHJf
dCBvcGVyYW5kKTsKICAgICAgICAgdm9pZCBlbWl0R2V0Q2xvc3VyZVZhcihpbnQgc2NvcGUsIHVp
bnRwdHJfdCBvcGVyYW5kKTsKICAgICAgICAgdm9pZCBlbWl0UHV0R2xvYmFsUHJvcGVydHkodWlu
dHB0cl90KiBvcGVyYW5kU2xvdCwgaW50IHZhbHVlKTsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAg
ICAgICB2b2lkIGVtaXROb3RpZnlXcml0ZShSZWdpc3RlcklEIHZhbHVlLCBSZWdpc3RlcklEIHNj
cmF0Y2gsIFZhcmlhYmxlV2F0Y2hwb2ludFNldCopOwotI2Vsc2UKLSAgICAgICAgdm9pZCBlbWl0
Tm90aWZ5V3JpdGUoUmVnaXN0ZXJJRCB0YWcsIFJlZ2lzdGVySUQgcGF5bG9hZCwgUmVnaXN0ZXJJ
RCBzY3JhdGNoLCBWYXJpYWJsZVdhdGNocG9pbnRTZXQqKTsKLSNlbmRpZgotICAgICAgICB2b2lk
IGVtaXRQdXRHbG9iYWxWYXIodWludHB0cl90IG9wZXJhbmQsIGludCB2YWx1ZSwgVmFyaWFibGVX
YXRjaHBvaW50U2V0Kik7Ci0gICAgICAgIHZvaWQgZW1pdFB1dENsb3N1cmVWYXIoaW50IHNjb3Bl
LCB1aW50cHRyX3Qgb3BlcmFuZCwgaW50IHZhbHVlLCBWYXJpYWJsZVdhdGNocG9pbnRTZXQqKTsK
KyAgICAgICAgdm9pZCBlbWl0Tm90aWZ5V3JpdGUoV2F0Y2hwb2ludFNldCopOworICAgICAgICB2
b2lkIGVtaXRQdXRHbG9iYWxWYXIodWludHB0cl90IG9wZXJhbmQsIGludCB2YWx1ZSwgV2F0Y2hw
b2ludFNldCopOworICAgICAgICB2b2lkIGVtaXRQdXRDbG9zdXJlVmFyKGludCBzY29wZSwgdWlu
dHB0cl90IG9wZXJhbmQsIGludCB2YWx1ZSwgV2F0Y2hwb2ludFNldCopOwogCiAgICAgICAgIHZv
aWQgZW1pdEluaXRSZWdpc3RlcihpbnQgZHN0KTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRPcGNvZGVzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVE9wY29kZXMuY3BwCShyZXZpc2lvbiAxODI0OTgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NzksMTUgKzg3
OSw2IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF90b19udW1iZXIoSW5zdHJ1Y3QKIAogI2VuZGlm
IC8vIFVTRShKU1ZBTFVFNjQpCiAKLXZvaWQgSklUOjplbWl0X29wX3RvdWNoX2VudHJ5KEluc3Ry
dWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCi17Ci0gICAgaWYgKG1fY29kZUJsb2NrLT5zeW1i
b2xUYWJsZSgpLT5tX2Z1bmN0aW9uRW50ZXJlZE9uY2UuaGFzQmVlbkludmFsaWRhdGVkKCkpCi0g
ICAgICAgIHJldHVybjsKLSAgICAKLSAgICBKSVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRo
aXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xvd19wYXRoX3RvdWNoX2VudHJ5KTsKLSAgICBzbG93
UGF0aENhbGwuY2FsbCgpOwotfQotCiB2b2lkIEpJVDo6ZW1pdF9vcF9sb29wX2hpbnQoSW5zdHJ1
Y3Rpb24qKQogewogICAgIC8vIEVtaXQgdGhlIEpJVCBvcHRpbWl6YXRpb24gY2hlY2s6IApJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCShyZXZpc2lv
biAxODI0OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC05NTIsNiArOTUyLDE0IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9P
UEVSQVRJT04gb3BlcmF0aW9uTmUKICAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTRnVuY3Rp
b246OmNyZWF0ZSh2bSwgc3RhdGljX2Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4oZnVuY3Rpb25F
eGVjdXRhYmxlKSwgc2NvcGUpKTsKIH0KIAorRW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBv
cGVyYXRpb25OZXdGdW5jdGlvbldpdGhJbnZhbGlkYXRlZFJlYWxsb2NhdGlvbldhdGNocG9pbnQo
RXhlY1N0YXRlKiBleGVjLCBKU1Njb3BlKiBzY29wZSwgSlNDZWxsKiBmdW5jdGlvbkV4ZWN1dGFi
bGUpCit7CisgICAgQVNTRVJUKGZ1bmN0aW9uRXhlY3V0YWJsZS0+aW5oZXJpdHMoRnVuY3Rpb25F
eGVjdXRhYmxlOjppbmZvKCkpKTsKKyAgICBWTSYgdm0gPSBleGVjLT52bSgpOworICAgIE5hdGl2
ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZtLCBleGVjKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6
ZW5jb2RlKEpTRnVuY3Rpb246OmNyZWF0ZVdpdGhJbnZhbGlkYXRlZFJlYWxsb2NhdGlvbldhdGNo
cG9pbnQodm0sIHN0YXRpY19jYXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGZ1bmN0aW9uRXhlY3V0
YWJsZSksIHNjb3BlKSk7Cit9CisKIEpTQ2VsbCogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdP
YmplY3QoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKIHsKICAgICBWTSog
dm0gPSAmZXhlYy0+dm0oKTsKQEAgLTE3MjIsOCArMTczMCw4IEBAIHZvaWQgSklUX09QRVJBVElP
TiBvcGVyYXRpb25QdXRUb1Njb3BlKEUKICAgICBpZiAobW9kZUFuZFR5cGUudHlwZSgpID09IExv
Y2FsQ2xvc3VyZVZhcikgewogICAgICAgICBKU0xleGljYWxFbnZpcm9ubWVudCogZW52aXJvbm1l
bnQgPSBqc0Nhc3Q8SlNMZXhpY2FsRW52aXJvbm1lbnQqPihzY29wZSk7CiAgICAgICAgIGVudmly
b25tZW50LT52YXJpYWJsZUF0KFNjb3BlT2Zmc2V0KHBjWzZdLnUub3BlcmFuZCkpLnNldCh2bSwg
ZW52aXJvbm1lbnQsIHZhbHVlKTsKLSAgICAgICAgaWYgKFZhcmlhYmxlV2F0Y2hwb2ludFNldCog
c2V0ID0gcGNbNV0udS53YXRjaHBvaW50U2V0KQotICAgICAgICAgICAgc2V0LT5ub3RpZnlXcml0
ZSh2bSwgdmFsdWUsICJFeGVjdXRlZCBvcF9wdXRfc2NvcGU8TG9jYWxDbG9zdXJlVmFyPiIpOwor
ICAgICAgICBpZiAoV2F0Y2hwb2ludFNldCogc2V0ID0gcGNbNV0udS53YXRjaHBvaW50U2V0KQor
ICAgICAgICAgICAgc2V0LT50b3VjaCgiRXhlY3V0ZWQgb3BfcHV0X3Njb3BlPExvY2FsQ2xvc3Vy
ZVZhcj4iKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBpZiAobW9kZUFuZFR5cGUubW9k
ZSgpID09IFRocm93SWZOb3RGb3VuZCAmJiAhc2NvcGUtPmhhc1Byb3BlcnR5KGV4ZWMsIGlkZW50
KSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgJKHJl
dmlzaW9uIDE4MjQ5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9u
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3ICszNyw2IEBACiAjaW5jbHVkZSAiUHV0S2luZC5o
IgogI2luY2x1ZGUgIlNwaWxsUmVnaXN0ZXJzTW9kZS5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZVN0
dWJJbmZvLmgiCi0jaW5jbHVkZSAiVmFyaWFibGVXYXRjaHBvaW50U2V0LmgiCiAKIAogbmFtZXNw
YWNlIEpTQyB7CkBAIC04NSw3ICs4NCw3IEBAIGV4dGVybiAiQyIgewogICAgIFN5bXRhYjogU3lt
Ym9sVGFibGUqCiAgICAgVjogdm9pZAogICAgIFZtOiBWTSoKLSAgICBWd3M6IFZhcmlhYmxlV2F0
Y2hwb2ludFNldCoKKyAgICBXczogV2F0Y2hwb2ludFNldCoKICAgICBaOiBpbnQzMl90CiAqLwog
CkBAIC0xOTEsNyArMTkwLDcgQEAgdHlwZWRlZiB2b2lkIEpJVF9PUEVSQVRJT04gKCpWX0pJVE9w
ZXJhdAogdHlwZWRlZiB2b2lkIEpJVF9PUEVSQVRJT04gKCpWX0pJVE9wZXJhdGlvbl9FUGMpKEV4
ZWNTdGF0ZSosIEluc3RydWN0aW9uKik7CiB0eXBlZGVmIHZvaWQgSklUX09QRVJBVElPTiAoKlZf
SklUT3BlcmF0aW9uX0VQWkopKEV4ZWNTdGF0ZSosIHZvaWQqLCBpbnQzMl90LCBFbmNvZGVkSlNW
YWx1ZSk7CiB0eXBlZGVmIHZvaWQgSklUX09QRVJBVElPTiAoKlZfSklUT3BlcmF0aW9uX0VTc2lK
SkkpKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZVN0dWJJbmZvKiwgRW5jb2RlZEpTVmFsdWUsIEVuY29k
ZWRKU1ZhbHVlLCBTdHJpbmdJbXBsKik7Ci10eXBlZGVmIHZvaWQgSklUX09QRVJBVElPTiAoKlZf
SklUT3BlcmF0aW9uX0VWd3NKKShFeGVjU3RhdGUqLCBWYXJpYWJsZVdhdGNocG9pbnRTZXQqLCBF
bmNvZGVkSlNWYWx1ZSk7Cit0eXBlZGVmIHZvaWQgSklUX09QRVJBVElPTiAoKlZfSklUT3BlcmF0
aW9uX0VXcykoRXhlY1N0YXRlKiwgV2F0Y2hwb2ludFNldCopOwogdHlwZWRlZiB2b2lkIEpJVF9P
UEVSQVRJT04gKCpWX0pJVE9wZXJhdGlvbl9FWikoRXhlY1N0YXRlKiwgaW50MzJfdCk7CiB0eXBl
ZGVmIHZvaWQgSklUX09QRVJBVElPTiAoKlZfSklUT3BlcmF0aW9uX0VaSikoRXhlY1N0YXRlKiwg
aW50MzJfdCwgRW5jb2RlZEpTVmFsdWUpOwogdHlwZWRlZiB2b2lkIEpJVF9PUEVSQVRJT04gKCpW
X0pJVE9wZXJhdGlvbl9FWkpaWlopKEV4ZWNTdGF0ZSosIGludDMyX3QsIEVuY29kZWRKU1ZhbHVl
LCBpbnQzMl90LCBpbnQzMl90LCBpbnQzMl90KTsKQEAgLTI3OCw2ICsyNzcsNyBAQCBFbmNvZGVk
SlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5lCiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvbk5ld0FycmF5QnVmZmVyV2l0aFByb2ZpbGUoRXhlY1N0YXRlKiwgQXJy
YXlBbGxvY2F0aW9uUHJvZmlsZSosIGNvbnN0IEpTVmFsdWUqIHZhbHVlcywgaW50MzJfdCBzaXpl
KSBXVEZfSU5URVJOQUw7CiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5l
d0FycmF5V2l0aFNpemVBbmRQcm9maWxlKEV4ZWNTdGF0ZSosIEFycmF5QWxsb2NhdGlvblByb2Zp
bGUqLCBFbmNvZGVkSlNWYWx1ZSBzaXplKSBXVEZfSU5URVJOQUw7CiBFbmNvZGVkSlNWYWx1ZSBK
SVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0Z1bmN0aW9uKEV4ZWNTdGF0ZSosIEpTU2NvcGUqLCBK
U0NlbGwqKSBXVEZfSU5URVJOQUw7CitFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbk5ld0Z1bmN0aW9uV2l0aEludmFsaWRhdGVkUmVhbGxvY2F0aW9uV2F0Y2hwb2ludChFeGVj
U3RhdGUqLCBKU1Njb3BlKiwgSlNDZWxsKikgV1RGX0lOVEVSTkFMOwogSlNDZWxsKiBKSVRfT1BF
UkFUSU9OIG9wZXJhdGlvbk5ld09iamVjdChFeGVjU3RhdGUqLCBTdHJ1Y3R1cmUqKSBXVEZfSU5U
RVJOQUw7CiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld1JlZ2V4cChF
eGVjU3RhdGUqLCB2b2lkKikgV1RGX0lOVEVSTkFMOwogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbkhhbmRsZVdhdGNoZG9nVGltZXIoRXhlY1N0YXRlKikgV1RGX0lOVEVSTkFMOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJf
NjQuY3BwCShyZXZpc2lvbiAxODI0OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NTAsMzYgKzc1MCwx
OSBAQCB2b2lkIEpJVDo6ZW1pdFB1dEdsb2JhbFByb3BlcnR5KHVpbnRwdHJfCiAgICAgc3RvcmUz
MihyZWdUMiwgQmFzZUluZGV4KHJlZ1QwLCByZWdUMSwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZM
aW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5jb2RlZEpTVmFsdWUpICsgT0JKRUNUX09GRlNFVE9G
KEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSkpOwogfQogCi12b2lkIEpJ
VDo6ZW1pdE5vdGlmeVdyaXRlKFJlZ2lzdGVySUQgdGFnLCBSZWdpc3RlcklEIHBheWxvYWQsIFJl
Z2lzdGVySUQgc2NyYXRjaCwgVmFyaWFibGVXYXRjaHBvaW50U2V0KiBzZXQpCi17Ci0gICAgaWYg
KCFzZXQgfHwgc2V0LT5zdGF0ZSgpID09IElzSW52YWxpZGF0ZWQpCi0gICAgICAgIHJldHVybjsK
LSAgICAKLSAgICBsb2FkOChzZXQtPmFkZHJlc3NPZlN0YXRlKCksIHNjcmF0Y2gpOwotICAgIEp1
bXAgaXNEb25lID0gYnJhbmNoMzIoRXF1YWwsIHNjcmF0Y2gsIFRydXN0ZWRJbW0zMihJc0ludmFs
aWRhdGVkKSk7Ci0KLSAgICBKdW1wTGlzdCBub3RpZnlTbG93ID0gYnJhbmNoMzIoCi0gICAgICAg
IE5vdEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3Moc2V0LT5hZGRyZXNzT2ZJbmZlcnJlZFZhbHVlKCkt
PnBheWxvYWRQb2ludGVyKCkpLCBwYXlsb2FkKTsKLSAgICBub3RpZnlTbG93LmFwcGVuZChicmFu
Y2gzMigKLSAgICAgICAgTm90RXF1YWwsIEFic29sdXRlQWRkcmVzcyhzZXQtPmFkZHJlc3NPZklu
ZmVycmVkVmFsdWUoKS0+dGFnUG9pbnRlcigpKSwgdGFnKSk7Ci0gICAgYWRkU2xvd0Nhc2Uobm90
aWZ5U2xvdyk7Ci0KLSAgICBpc0RvbmUubGluayh0aGlzKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRQ
dXRHbG9iYWxWYXIodWludHB0cl90IG9wZXJhbmQsIGludCB2YWx1ZSwgVmFyaWFibGVXYXRjaHBv
aW50U2V0KiBzZXQpCit2b2lkIEpJVDo6ZW1pdFB1dEdsb2JhbFZhcih1aW50cHRyX3Qgb3BlcmFu
ZCwgaW50IHZhbHVlLCBXYXRjaHBvaW50U2V0KiBzZXQpCiB7CiAgICAgZW1pdExvYWQodmFsdWUs
IHJlZ1QxLCByZWdUMCk7Ci0gICAgZW1pdE5vdGlmeVdyaXRlKHJlZ1QxLCByZWdUMCwgcmVnVDIs
IHNldCk7CisgICAgZW1pdE5vdGlmeVdyaXRlKHNldCk7CiAgICAgc3RvcmUzMihyZWdUMSwgcmVp
bnRlcnByZXRfY2FzdDxjaGFyKj4ob3BlcmFuZCkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZh
bHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykpOwogICAgIHN0b3JlMzIocmVnVDAsIHJlaW50ZXJw
cmV0X2Nhc3Q8Y2hhcio+KG9wZXJhbmQpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURl
c2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSk7CiB9CiAKLXZvaWQgSklUOjplbWl0UHV0Q2xvc3Vy
ZVZhcihpbnQgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kLCBpbnQgdmFsdWUsIFZhcmlhYmxlV2F0
Y2hwb2ludFNldCogc2V0KQordm9pZCBKSVQ6OmVtaXRQdXRDbG9zdXJlVmFyKGludCBzY29wZSwg
dWludHB0cl90IG9wZXJhbmQsIGludCB2YWx1ZSwgV2F0Y2hwb2ludFNldCogc2V0KQogewogICAg
IGVtaXRMb2FkKHZhbHVlLCByZWdUMywgcmVnVDIpOwogICAgIGVtaXRMb2FkKHNjb3BlLCByZWdU
MSwgcmVnVDApOwotICAgIGVtaXROb3RpZnlXcml0ZShyZWdUMywgcmVnVDIsIHJlZ1Q0LCBzZXQp
OworICAgIGVtaXROb3RpZnlXcml0ZShzZXQpOwogICAgIHN0b3JlMzIocmVnVDMsIEFkZHJlc3Mo
cmVnVDAsIEpTRW52aXJvbm1lbnRSZWNvcmQ6Om9mZnNldE9mVmFyaWFibGVzKCkgKyBvcGVyYW5k
ICogc2l6ZW9mKFJlZ2lzdGVyKSArIFRhZ09mZnNldCkpOwogICAgIHN0b3JlMzIocmVnVDIsIEFk
ZHJlc3MocmVnVDAsIEpTRW52aXJvbm1lbnRSZWNvcmQ6Om9mZnNldE9mVmFyaWFibGVzKCkgKyBv
cGVyYW5kICogc2l6ZW9mKFJlZ2lzdGVyKSArIFBheWxvYWRPZmZzZXQpKTsKIH0KQEAgLTgyNiw3
ICs4MDksNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X3RvX3Njb3BlKEluc3RyCiAgICAg
ICAgIGxpbmtDb3VudCsrOwogICAgIGlmICgocmVzb2x2ZVR5cGUgPT0gR2xvYmFsVmFyIHx8IHJl
c29sdmVUeXBlID09IEdsb2JhbFZhcldpdGhWYXJJbmplY3Rpb25DaGVja3MgfHwgcmVzb2x2ZVR5
cGUgPT0gTG9jYWxDbG9zdXJlVmFyKQogICAgICAgICAmJiBjdXJyZW50SW5zdHJ1Y3Rpb25bNV0u
dS53YXRjaHBvaW50U2V0LT5zdGF0ZSgpICE9IElzSW52YWxpZGF0ZWQpCi0gICAgICAgIGxpbmtD
b3VudCArPSAyOworICAgICAgICBsaW5rQ291bnQrKzsKICAgICBpZiAoIWxpbmtDb3VudCkKICAg
ICAgICAgcmV0dXJuOwogICAgIHdoaWxlIChsaW5rQ291bnQtLSkKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCShyZXZpc2lvbiAxODI0
OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNzI4LDI5ICs3MjgsMTggQEAgdm9pZCBKSVQ6OmVtaXRQdXRHbG9i
YWxQcm9wZXJ0eSh1aW50cHRyXwogICAgIHN0b3JlUHRyKHJlZ1QyLCBCYXNlSW5kZXgocmVnVDAs
IHJlZ1QxLCBUaW1lc0VpZ2h0LCAoZmlyc3RPdXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihF
bmNvZGVkSlNWYWx1ZSkpKTsKIH0KIAotdm9pZCBKSVQ6OmVtaXROb3RpZnlXcml0ZShSZWdpc3Rl
cklEIHZhbHVlLCBSZWdpc3RlcklEIHNjcmF0Y2gsIFZhcmlhYmxlV2F0Y2hwb2ludFNldCogc2V0
KQotewotICAgIGlmICghc2V0IHx8IHNldC0+c3RhdGUoKSA9PSBJc0ludmFsaWRhdGVkKQotICAg
ICAgICByZXR1cm47Ci0gICAgCi0gICAgbG9hZDgoc2V0LT5hZGRyZXNzT2ZTdGF0ZSgpLCBzY3Jh
dGNoKTsKLSAgICBKdW1wIGlzRG9uZSA9IGJyYW5jaDMyKEVxdWFsLCBzY3JhdGNoLCBUcnVzdGVk
SW1tMzIoSXNJbnZhbGlkYXRlZCkpOwotICAgIGFkZFNsb3dDYXNlKGJyYW5jaDY0KE5vdEVxdWFs
LCBBYnNvbHV0ZUFkZHJlc3Moc2V0LT5hZGRyZXNzT2ZJbmZlcnJlZFZhbHVlKCkpLCB2YWx1ZSkp
OwotICAgIGlzRG9uZS5saW5rKHRoaXMpOwotfQotCi12b2lkIEpJVDo6ZW1pdFB1dEdsb2JhbFZh
cih1aW50cHRyX3Qgb3BlcmFuZCwgaW50IHZhbHVlLCBWYXJpYWJsZVdhdGNocG9pbnRTZXQqIHNl
dCkKK3ZvaWQgSklUOjplbWl0UHV0R2xvYmFsVmFyKHVpbnRwdHJfdCBvcGVyYW5kLCBpbnQgdmFs
dWUsIFdhdGNocG9pbnRTZXQqIHNldCkKIHsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZh
bHVlLCByZWdUMCk7Ci0gICAgZW1pdE5vdGlmeVdyaXRlKHJlZ1QwLCByZWdUMSwgc2V0KTsKKyAg
ICBlbWl0Tm90aWZ5V3JpdGUoc2V0KTsKICAgICBzdG9yZVB0cihyZWdUMCwgcmVpbnRlcnByZXRf
Y2FzdDx2b2lkKj4ob3BlcmFuZCkpOwogfQogCi12b2lkIEpJVDo6ZW1pdFB1dENsb3N1cmVWYXIo
aW50IHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCwgaW50IHZhbHVlLCBWYXJpYWJsZVdhdGNocG9p
bnRTZXQqIHNldCkKK3ZvaWQgSklUOjplbWl0UHV0Q2xvc3VyZVZhcihpbnQgc2NvcGUsIHVpbnRw
dHJfdCBvcGVyYW5kLCBpbnQgdmFsdWUsIFdhdGNocG9pbnRTZXQqIHNldCkKIHsKICAgICBlbWl0
R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMSk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdp
c3RlcihzY29wZSwgcmVnVDApOwotICAgIGVtaXROb3RpZnlXcml0ZShyZWdUMSwgcmVnVDIsIHNl
dCk7CisgICAgZW1pdE5vdGlmeVdyaXRlKHNldCk7CiAgICAgc3RvcmVQdHIocmVnVDEsIEFkZHJl
c3MocmVnVDAsIEpTRW52aXJvbm1lbnRSZWNvcmQ6Om9mZnNldE9mVmFyaWFibGVzKCkgKyBvcGVy
YW5kICogc2l6ZW9mKFJlZ2lzdGVyKSkpOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJKHJldmlzaW9uIDE4MjQ5OCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE0MDIsOCArMTQwMiwxMiBAQCBMTElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhf
cHV0X3RvX3NjCiAgICAgaWYgKG1vZGVBbmRUeXBlLnR5cGUoKSA9PSBMb2NhbENsb3N1cmVWYXIp
IHsKICAgICAgICAgSlNMZXhpY2FsRW52aXJvbm1lbnQqIGVudmlyb25tZW50ID0ganNDYXN0PEpT
TGV4aWNhbEVudmlyb25tZW50Kj4oc2NvcGUpOwogICAgICAgICBlbnZpcm9ubWVudC0+dmFyaWFi
bGVBdChTY29wZU9mZnNldChwY1s2XS51Lm9wZXJhbmQpKS5zZXQodm0sIGVudmlyb25tZW50LCB2
YWx1ZSk7Ci0gICAgICAgIGlmIChWYXJpYWJsZVdhdGNocG9pbnRTZXQqIHNldCA9IHBjWzVdLnUu
d2F0Y2hwb2ludFNldCkKLSAgICAgICAgICAgIHNldC0+bm90aWZ5V3JpdGUodm0sIHZhbHVlLCAi
RXhlY3V0ZWQgb3BfcHV0X3Njb3BlPExvY2FsQ2xvc3VyZVZhcj4iKTsKKyAgICAgICAgCisgICAg
ICAgIC8vIEhhdmUgdG8gZG8gdGhpcyAqYWZ0ZXIqIHRoZSB3cml0ZSwgYmVjYXVzZSBpZiB0aGlz
IHB1dHMgdGhlIHNldCBpbnRvIElzV2F0Y2hlZCwgdGhlbiB3ZSBuZWVkCisgICAgICAgIC8vIHRv
IGhhdmUgYWxyZWFkeSBjaGFuZ2VkIHRoZSB2YWx1ZSBvZiB0aGUgdmFyaWFibGUuIE90aGVyd2lz
ZSB3ZSBtaWdodCB3YXRjaCBhbmQgY29uc3RhbnQtZm9sZAorICAgICAgICAvLyB0byB0aGUgVW5k
ZWZpbmVkIHZhbHVlIGZyb20gYmVmb3JlIHRoZSBhc3NpZ25tZW50LgorICAgICAgICBpZiAoV2F0
Y2hwb2ludFNldCogc2V0ID0gcGNbNV0udS53YXRjaHBvaW50U2V0KQorICAgICAgICAgICAgc2V0
LT50b3VjaCgiRXhlY3V0ZWQgb3BfcHV0X3Njb3BlPExvY2FsQ2xvc3VyZVZhcj4iKTsKICAgICAg
ICAgTExJTlRfRU5EKCk7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxp
bnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0LmFzbQkocmV2aXNpb24g
MTgyNDk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0
ZXIzMl82NC5hc20JKHdvcmtpbmcgY29weSkKQEAgLTgwNSwxNCArODA1LDYgQEAgX2xsaW50X29w
X21vdjoKICAgICBkaXNwYXRjaCgzKQogCiAKLW1hY3JvIG5vdGlmeVdyaXRlKHNldCwgdmFsdWVU
YWcsIHZhbHVlUGF5bG9hZCwgc2NyYXRjaCwgc2xvdykKLSAgICBsb2FkYiBWYXJpYWJsZVdhdGNo
cG9pbnRTZXQ6Om1fc3RhdGVbc2V0XSwgc2NyYXRjaAotICAgIGJpZXEgc2NyYXRjaCwgSXNJbnZh
bGlkYXRlZCwgLmRvbmUKLSAgICBiaW5lcSB2YWx1ZVBheWxvYWQsIFZhcmlhYmxlV2F0Y2hwb2lu
dFNldDo6bV9pbmZlcnJlZFZhbHVlICsgUGF5bG9hZE9mZnNldFtzZXRdLCBzbG93Ci0gICAgYmlu
ZXEgdmFsdWVUYWcsIFZhcmlhYmxlV2F0Y2hwb2ludFNldDo6bV9pbmZlcnJlZFZhbHVlICsgVGFn
T2Zmc2V0W3NldF0sIHNsb3cKLS5kb25lOgotZW5kCi0KIF9sbGludF9vcF9ub3Q6CiAgICAgdHJh
Y2VFeGVjdXRpb24oKQogICAgIGxvYWRpIDhbUENdLCB0MApAQCAtMjIwNCw3ICsyMTk2LDcgQEAg
bWFjcm8gcHV0R2xvYmFsVmFyKCkKICAgICBsb2FkaXNGcm9tSW5zdHJ1Y3Rpb24oMywgdDApCiAg
ICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZSh0MCwgdDEsIHQyKQogICAgIGxvYWRwRnJvbUluc3Ry
dWN0aW9uKDUsIHQzKQotICAgIG5vdGlmeVdyaXRlKHQzLCB0MSwgdDIsIHQwLCAucER5bmFtaWMp
CisgICAgbm90aWZ5V3JpdGUodDMsIC5wRHluYW1pYykKICAgICBsb2FkcEZyb21JbnN0cnVjdGlv
big2LCB0MCkKICAgICBzdG9yZWkgdDEsIFRhZ09mZnNldFt0MF0KICAgICBzdG9yZWkgdDIsIFBh
eWxvYWRPZmZzZXRbdDBdCkBAIC0yMjIzLDcgKzIyMTUsNyBAQCBtYWNybyBwdXRMb2NhbENsb3N1
cmVWYXIoKQogICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUodDEsIHQyLCB0MykKICAgICBsb2Fk
cEZyb21JbnN0cnVjdGlvbig1LCB0NCkKICAgICBidHB6IHQ0LCAubm9WYXJpYWJsZVdhdGNocG9p
bnRTZXQKLSAgICBub3RpZnlXcml0ZSh0NCwgdDIsIHQzLCB0MSwgLnBEeW5hbWljKQorICAgIG5v
dGlmeVdyaXRlKHQ0LCAucER5bmFtaWMpCiAubm9WYXJpYWJsZVdhdGNocG9pbnRTZXQ6CiAgICAg
bG9hZGlzRnJvbUluc3RydWN0aW9uKDYsIHQxKQogICAgIHN0b3JlaSB0MiwgSlNFbnZpcm9ubWVu
dFJlY29yZF92YXJpYWJsZXMgKyBUYWdPZmZzZXRbdDAsIHQxLCA4XQpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20J
KHJldmlzaW9uIDE4MjQ5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZl
bEludGVycHJldGVyNjQuYXNtCSh3b3JraW5nIGNvcHkpCkBAIC02OTAsMTMgKzY5MCw2IEBAIF9s
bGludF9vcF9tb3Y6CiAgICAgZGlzcGF0Y2goMykKIAogCi1tYWNybyBub3RpZnlXcml0ZShzZXQs
IHZhbHVlLCBzY3JhdGNoLCBzbG93KQotICAgIGxvYWRiIFZhcmlhYmxlV2F0Y2hwb2ludFNldDo6
bV9zdGF0ZVtzZXRdLCBzY3JhdGNoCi0gICAgYmllcSBzY3JhdGNoLCBJc0ludmFsaWRhdGVkLCAu
ZG9uZQotICAgIGJxbmVxIHZhbHVlLCBWYXJpYWJsZVdhdGNocG9pbnRTZXQ6Om1faW5mZXJyZWRW
YWx1ZVtzZXRdLCBzbG93Ci0uZG9uZToKLWVuZAotCiBfbGxpbnRfb3Bfbm90OgogICAgIHRyYWNl
RXhlY3V0aW9uKCkKICAgICBsb2FkaXNGcm9tSW5zdHJ1Y3Rpb24oMiwgdDApCkBAIC0yMDY5LDgg
KzIwNjIsOCBAQCBtYWNybyBwdXRHbG9iYWxWYXIoKQogICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlv
bigzLCB0MCkKICAgICBsb2FkQ29uc3RhbnRPclZhcmlhYmxlKHQwLCB0MSkKICAgICBsb2FkcEZy
b21JbnN0cnVjdGlvbig1LCB0MikKLSAgICBub3RpZnlXcml0ZSh0MiwgdDEsIHQwLCAucER5bmFt
aWMpCiAgICAgbG9hZHBGcm9tSW5zdHJ1Y3Rpb24oNiwgdDApCisgICAgbm90aWZ5V3JpdGUodDIs
IC5wRHluYW1pYykKICAgICBzdG9yZXEgdDEsIFt0MF0KIGVuZAogCkBAIC0yMDg2LDcgKzIwNzks
NyBAQCBtYWNybyBwdXRMb2NhbENsb3N1cmVWYXIoKQogICAgIGxvYWRDb25zdGFudE9yVmFyaWFi
bGUodDEsIHQyKQogICAgIGxvYWRwRnJvbUluc3RydWN0aW9uKDUsIHQzKQogICAgIGJ0cHogdDMs
IC5ub1ZhcmlhYmxlV2F0Y2hwb2ludFNldAotICAgIG5vdGlmeVdyaXRlKHQzLCB0MiwgdDEsIC5w
RHluYW1pYykKKyAgICBub3RpZnlXcml0ZSh0MywgLnBEeW5hbWljKQogLm5vVmFyaWFibGVXYXRj
aHBvaW50U2V0OgogICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlvbig2LCB0MSkKICAgICBzdG9yZXEg
dDIsIEpTRW52aXJvbm1lbnRSZWNvcmRfdmFyaWFibGVzW3QwLCB0MSwgOF0KSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20J
KHJldmlzaW9uIDE4MjQ5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZl
bEludGVycHJldGVyLmFzbQkod29ya2luZyBjb3B5KQpAQCAtNTE5LDYgKzUxOSwxMCBAQCBtYWNy
byBza2lwSWZJc1JlbWVtYmVyZWRPckluRWRlbihjZWxsLCBzCiAgICAgY29udGludWF0aW9uKHNj
cmF0Y2gxKQogZW5kCiAKK21hY3JvIG5vdGlmeVdyaXRlKHNldCwgc2xvdykKKyAgICBiYm5lcSBX
YXRjaHBvaW50U2V0OjptX3N0YXRlW3NldF0sIElzSW52YWxpZGF0ZWQsIHNsb3cKK2VuZAorCiBt
YWNybyBjaGVja1N3aXRjaFRvSklUKGluY3JlbWVudCwgYWN0aW9uKQogICAgIGxvYWRwIENvZGVC
bG9ja1tjZnJdLCB0MAogICAgIGJhZGRpcyBpbmNyZW1lbnQsIENvZGVCbG9jazo6bV9sbGludEV4
ZWN1dGVDb3VudGVyICsgQmFzZWxpbmVFeGVjdXRpb25Db3VudGVyOjptX2NvdW50ZXJbdDBdLCAu
Y29udGludWUKQEAgLTkyMCwxMiArOTI0LDYgQEAgZW5kCiAKIAogIyBWYWx1ZS1yZXByZXNlbnRh
dGlvbi1hZ25vc3RpYyBjb2RlLgotX2xsaW50X29wX3RvdWNoX2VudHJ5OgotICAgIHRyYWNlRXhl
Y3V0aW9uKCkKLSAgICBjYWxsU2xvd1BhdGgoX3Nsb3dfcGF0aF90b3VjaF9lbnRyeSkKLSAgICBk
aXNwYXRjaCgxKQotCi0KIF9sbGludF9vcF9jcmVhdGVfZGlyZWN0X2FyZ3VtZW50czoKICAgICB0
cmFjZUV4ZWN1dGlvbigpCiAgICAgY2FsbFNsb3dQYXRoKF9zbG93X3BhdGhfY3JlYXRlX2RpcmVj
dF9hcmd1bWVudHMpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25T
bG93UGF0aHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0NvbW1vblNsb3dQYXRocy5jcHAJKHJldmlzaW9uIDE4MjQ5OCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1
LDcgKzU1LDYgQEAKICNpbmNsdWRlICJTY29wZWRBcmd1bWVudHMuaCIKICNpbmNsdWRlICJTdHJ1
Y3R1cmVSYXJlRGF0YUlubGluZXMuaCIKICNpbmNsdWRlICJUeXBlUHJvZmlsZXJMb2cuaCIKLSNp
bmNsdWRlICJWYXJpYWJsZVdhdGNocG9pbnRTZXRJbmxpbmVzLmgiCiAjaW5jbHVkZSA8d3RmL1N0
cmluZ1ByaW50U3RyZWFtLmg+CiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtMjA2LDEzICsyMDUsNiBA
QCBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhfY29uc3RydWN0X2FyaXR5CiAgICAgUkVUVVJOX1RX
TygwLCBzZXR1cEFyaXR5Q2hlY2tEYXRhKHZtLCBzbG90c1RvQWRkKSk7CiB9CiAKLVNMT1dfUEFU
SF9ERUNMKHNsb3dfcGF0aF90b3VjaF9lbnRyeSkKLXsKLSAgICBCRUdJTigpOwotICAgIGV4ZWMt
PmNvZGVCbG9jaygpLT5zeW1ib2xUYWJsZSgpLT5tX2Z1bmN0aW9uRW50ZXJlZE9uY2UudG91Y2go
IkZ1bmN0aW9uIChyZSllbnRlcmVkIik7Ci0gICAgRU5EKCk7Ci19Ci0KIFNMT1dfUEFUSF9ERUNM
KHNsb3dfcGF0aF9jcmVhdGVfZGlyZWN0X2FyZ3VtZW50cykKIHsKICAgICBCRUdJTigpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmgJ
KHJldmlzaW9uIDE4MjQ5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1v
blNsb3dQYXRocy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xODEsNyArMTgxLDYgQEAgU0xPV19QQVRI
X0RFQ0wobmFtZSkgV1RGX0lOVEVSTkFMCiAgICAgCiBTTE9XX1BBVEhfSElEREVOX0RFQ0woc2xv
d19wYXRoX2NhbGxfYXJpdHlDaGVjayk7CiBTTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRo
X2NvbnN0cnVjdF9hcml0eUNoZWNrKTsKLVNMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhf
dG91Y2hfZW50cnkpOwogU0xPV19QQVRIX0hJRERFTl9ERUNMKHNsb3dfcGF0aF9jcmVhdGVfZGly
ZWN0X2FyZ3VtZW50cyk7CiBTTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX2NyZWF0ZV9z
Y29wZWRfYXJndW1lbnRzKTsKIFNMT1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfY3JlYXRl
X291dF9vZl9iYW5kX2FyZ3VtZW50cyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9FeGVjdXRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9FeGVjdXRhYmxlLmNwcAkocmV2aXNpb24gMTgyNDk4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxNCw2
ICs0MTQsMTIgQEAgRnVuY3Rpb25FeGVjdXRhYmxlOjpGdW5jdGlvbkV4ZWN1dGFibGUoVgogICAg
IG1fdHlwZVByb2ZpbGluZ0VuZE9mZnNldCA9IHVubGlua2VkRXhlY3V0YWJsZS0+dHlwZVByb2Zp
bGluZ0VuZE9mZnNldCgpOwogfQogCit2b2lkIEZ1bmN0aW9uRXhlY3V0YWJsZTo6ZmluaXNoQ3Jl
YXRpb24oVk0mIHZtKQoreworICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICBtX3Np
bmdsZXRvbkZ1bmN0aW9uLnNldCh2bSwgdGhpcywgSW5mZXJyZWRWYWx1ZTo6Y3JlYXRlKHZtKSk7
Cit9CisKIHZvaWQgRnVuY3Rpb25FeGVjdXRhYmxlOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKIHsK
ICAgICBzdGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihjZWxsKS0+RnVuY3Rpb25FeGVj
dXRhYmxlOjp+RnVuY3Rpb25FeGVjdXRhYmxlKCk7CkBAIC01NjcsNiArNTczLDcgQEAgdm9pZCBG
dW5jdGlvbkV4ZWN1dGFibGU6OnZpc2l0Q2hpbGRyZW4oSgogICAgIGlmICh0aGlzT2JqZWN0LT5t
X2NvZGVCbG9ja0ZvckNvbnN0cnVjdCkKICAgICAgICAgdGhpc09iamVjdC0+bV9jb2RlQmxvY2tG
b3JDb25zdHJ1Y3QtPnZpc2l0QWdncmVnYXRlKHZpc2l0b3IpOwogICAgIHZpc2l0b3IuYXBwZW5k
KCZ0aGlzT2JqZWN0LT5tX3VubGlua2VkRXhlY3V0YWJsZSk7CisgICAgdmlzaXRvci5hcHBlbmQo
JnRoaXNPYmplY3QtPm1fc2luZ2xldG9uRnVuY3Rpb24pOwogfQogCiBTeW1ib2xUYWJsZSogRnVu
Y3Rpb25FeGVjdXRhYmxlOjpzeW1ib2xUYWJsZShDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQp
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCShyZXZp
c2lvbiAxODI0OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxl
LmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDggKzMzLDcgQEAKICNpbmNsdWRlICJDb21waWxhdGlv
blJlc3VsdC5oIgogI2luY2x1ZGUgIkRGR1BsYW4uaCIKICNpbmNsdWRlICJIYW5kbGVySW5mby5o
IgotI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKLSNpbmNsdWRlICJJbnRlcnByZXRlci5oIgorI2lu
Y2x1ZGUgIkluZmVycmVkVmFsdWUuaCIKICNpbmNsdWRlICJKSVRDb2RlLmgiCiAjaW5jbHVkZSAi
SlNHbG9iYWxPYmplY3QuaCIKICNpbmNsdWRlICJSZWdpc3RlclByZXNlcnZhdGlvbk1vZGUuaCIK
QEAgLTY0OSwxMSArNjQ4LDE1IEBAIHB1YmxpYzoKICAgICB2b2lkIHVubGlua0NhbGxzKCk7CiAK
ICAgICB2b2lkIGNsZWFyQ29kZSgpOworICAgIAorICAgIEluZmVycmVkVmFsdWUqIHNpbmdsZXRv
bkZ1bmN0aW9uKCkgeyByZXR1cm4gbV9zaW5nbGV0b25GdW5jdGlvbi5nZXQoKTsgfQogCiBwcml2
YXRlOgogICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSgKICAgICAgICAgVk0mLCBjb25zdCBTb3VyY2VD
b2RlJiwgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqLCB1bnNpZ25lZCBmaXJzdExpbmUsIAog
ICAgICAgICB1bnNpZ25lZCBsYXN0TGluZSwgdW5zaWduZWQgc3RhcnRDb2x1bW4sIHVuc2lnbmVk
IGVuZENvbHVtbik7CisgICAgCisgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwogCiAgICAg
Ym9vbCBpc0NvbXBpbGluZygpCiAgICAgewpAQCAtNjY3LDEyICs2NzAsMTMgQEAgcHJpdmF0ZToK
ICAgICB9CiAKICAgICBmcmllbmQgY2xhc3MgU2NyaXB0RXhlY3V0YWJsZTsKLQorICAgIAogICAg
IFdyaXRlQmFycmllcjxVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZT4gbV91bmxpbmtlZEV4ZWN1
dGFibGU7CiAgICAgUmVmUHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiBtX2NvZGVCbG9ja0ZvckNhbGw7
CiAgICAgUmVmUHRyPEZ1bmN0aW9uQ29kZUJsb2NrPiBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdDsK
ICAgICBSZWZQdHI8VHlwZVNldD4gbV9yZXR1cm5TdGF0ZW1lbnRUeXBlU2V0OwogICAgIHVuc2ln
bmVkIG1fcGFyYW1ldGVyc1N0YXJ0T2Zmc2V0OworICAgIFdyaXRlQmFycmllcjxJbmZlcnJlZFZh
bHVlPiBtX3NpbmdsZXRvbkZ1bmN0aW9uOwogfTsKIAogaW5saW5lIHZvaWQgRXhlY3V0YWJsZUJh
c2U6OmNsZWFyQ29kZVZpcnR1YWwoRXhlY3V0YWJsZUJhc2UqIGV4ZWN1dGFibGUpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFZhbHVlLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9JbmZlcnJlZFZhbHVlLmNwcAkocmV2
aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVkVmFsdWUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTMyIEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkK
KyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFO
RCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJJbmZlcnJlZFZhbHVlLmgiCisKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisKK25hbWVzcGFj
ZSBKU0MgeworCitjb25zdCBDbGFzc0luZm8gSW5mZXJyZWRWYWx1ZTo6c19pbmZvID0geyAiSW5m
ZXJyZWRWYWx1ZSIsIDAsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoSW5mZXJyZWRWYWx1ZSkgfTsK
KworSW5mZXJyZWRWYWx1ZSogSW5mZXJyZWRWYWx1ZTo6Y3JlYXRlKFZNJiB2bSkKK3sKKyAgICBJ
bmZlcnJlZFZhbHVlKiByZXN1bHQgPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxJbmZlcnJl
ZFZhbHVlPih2bS5oZWFwKSkgSW5mZXJyZWRWYWx1ZSh2bSk7CisgICAgcmVzdWx0LT5maW5pc2hD
cmVhdGlvbih2bSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKwordm9pZCBJbmZlcnJlZFZhbHVl
OjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKK3sKKyAgICBJbmZlcnJlZFZhbHVlKiBpbmZlcnJlZFZh
bHVlID0gc3RhdGljX2Nhc3Q8SW5mZXJyZWRWYWx1ZSo+KGNlbGwpOworICAgIGluZmVycmVkVmFs
dWUtPkluZmVycmVkVmFsdWU6On5JbmZlcnJlZFZhbHVlKCk7Cit9CisKK1N0cnVjdHVyZSogSW5m
ZXJyZWRWYWx1ZTo6Y3JlYXRlU3RydWN0dXJlKFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2Jh
bE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUpCit7CisgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3Jl
YXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3RvdHlwZSwgVHlwZUluZm8oQ2VsbFR5cGUsIFN0cnVj
dHVyZUZsYWdzKSwgaW5mbygpKTsKK30KKwordm9pZCBJbmZlcnJlZFZhbHVlOjp2aXNpdENoaWxk
cmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0b3ImIHZpc2l0b3IpCit7CisgICAgSW5mZXJyZWRW
YWx1ZSogaW5mZXJyZWRWYWx1ZSA9IGpzQ2FzdDxJbmZlcnJlZFZhbHVlKj4oY2VsbCk7CisgICAg
CisgICAgaWYgKGluZmVycmVkVmFsdWUtPm1fc2V0Lmhhc0JlZW5JbnZhbGlkYXRlZCgpKSB7Cisg
ICAgICAgIGluZmVycmVkVmFsdWUtPm1fY2xlYW51cCA9IG51bGxwdHI7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisgICAgCisgICAgaWYgKCFpbmZlcnJlZFZhbHVlLT5tX3ZhbHVlKQorICAgICAg
ICByZXR1cm47CisgICAgaWYgKCFpbmZlcnJlZFZhbHVlLT5tX3ZhbHVlLmdldCgpLmlzQ2VsbCgp
KQorICAgICAgICByZXR1cm47CisgICAgCisgICAgaWYgKCFpbmZlcnJlZFZhbHVlLT5tX2NsZWFu
dXApCisgICAgICAgIGluZmVycmVkVmFsdWUtPm1fY2xlYW51cCA9IHN0ZDo6bWFrZV91bmlxdWU8
VmFsdWVDbGVhbnVwPihpbmZlcnJlZFZhbHVlKTsKKyAgICB2aXNpdG9yLmFkZFVuY29uZGl0aW9u
YWxGaW5hbGl6ZXIoaW5mZXJyZWRWYWx1ZS0+bV9jbGVhbnVwLmdldCgpKTsKK30KKworSW5mZXJy
ZWRWYWx1ZTo6SW5mZXJyZWRWYWx1ZShWTSYgdm0pCisgICAgOiBCYXNlKHZtLCB2bS5pbmZlcnJl
ZFZhbHVlU3RydWN0dXJlLmdldCgpKQorICAgICwgbV9zZXQoQ2xlYXJXYXRjaHBvaW50KQorewor
fQorCitJbmZlcnJlZFZhbHVlOjp+SW5mZXJyZWRWYWx1ZSgpCit7Cit9CisKK3ZvaWQgSW5mZXJy
ZWRWYWx1ZTo6bm90aWZ5V3JpdGVTbG93KFZNJiB2bSwgSlNWYWx1ZSB2YWx1ZSwgY29uc3QgRmly
ZURldGFpbCYgZGV0YWlsKQoreworICAgIEFTU0VSVCghIXZhbHVlKTsKKyAgICBzd2l0Y2ggKG1f
c2V0LnN0YXRlKCkpIHsKKyAgICBjYXNlIENsZWFyV2F0Y2hwb2ludDoKKyAgICAgICAgbV92YWx1
ZS5zZXQodm0sIHRoaXMsIHZhbHVlKTsKKyAgICAgICAgbV9zZXQuc3RhcnRXYXRjaGluZygpOwor
ICAgICAgICByZXR1cm47CisgICAgICAgIAorICAgIGNhc2UgSXNXYXRjaGVkOgorICAgICAgICBB
U1NFUlQoISFtX3ZhbHVlKTsKKyAgICAgICAgaWYgKG1fdmFsdWUuZ2V0KCkgPT0gdmFsdWUpCisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIGludmFsaWRhdGUoZGV0YWlsKTsKKyAgICAgICAg
cmV0dXJuOworICAgICAgICAKKyAgICBjYXNlIElzSW52YWxpZGF0ZWQ6CisgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIAorICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lkIEluZmVycmVkVmFsdWU6Om5vdGlmeVdyaXRlU2xv
dyhWTSYgdm0sIEpTVmFsdWUgdmFsdWUsIGNvbnN0IGNoYXIqIHJlYXNvbikKK3sKKyAgICBub3Rp
ZnlXcml0ZVNsb3codm0sIHZhbHVlLCBTdHJpbmdGaXJlRGV0YWlsKHJlYXNvbikpOworfQorCitJ
bmZlcnJlZFZhbHVlOjpWYWx1ZUNsZWFudXA6OlZhbHVlQ2xlYW51cChJbmZlcnJlZFZhbHVlKiBv
d25lcikKKyAgICA6IG1fb3duZXIob3duZXIpCit7Cit9CisKK0luZmVycmVkVmFsdWU6OlZhbHVl
Q2xlYW51cDo6flZhbHVlQ2xlYW51cCgpCit7Cit9CisKK3ZvaWQgSW5mZXJyZWRWYWx1ZTo6VmFs
dWVDbGVhbnVwOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSgpCit7CisgICAgQVNTRVJUKG1fb3du
ZXItPm1fdmFsdWUpOworICAgIEFTU0VSVChtX293bmVyLT5tX3ZhbHVlLmdldCgpLmlzQ2VsbCgp
KTsKKyAgICAKKyAgICBpZiAoSGVhcDo6aXNNYXJrZWQobV9vd25lci0+bV92YWx1ZS5nZXQoKS5h
c0NlbGwoKSkpCisgICAgICAgIHJldHVybjsKKyAgICAKKyAgICBtX293bmVyLT5pbnZhbGlkYXRl
KFN0cmluZ0ZpcmVEZXRhaWwoIkluZmVycmVkVmFsdWUgY2xlYW4tdXAgZHVyaW5nIEdDIikpOwor
fQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSW5mZXJyZWRWYWx1ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0luZmVycmVkVmFsdWUuaAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0luZmVycmVkVmFsdWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsx
LDEzNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJp
bmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0
ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6Cisg
KiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBm
b3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUK
KyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRo
IHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBB
UFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFO
VElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJS
QU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisg
KiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElO
Q0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBU
SEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisj
aWZuZGVmIEluZmVycmVkVmFsdWVfaAorI2RlZmluZSBJbmZlcnJlZFZhbHVlX2gKKworI2luY2x1
ZGUgIkpTQ2VsbC5oIgorI2luY2x1ZGUgIldhdGNocG9pbnQuaCIKKyNpbmNsdWRlICJXcml0ZUJh
cnJpZXIuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKKy8vIEFsbG9jYXRlIG9uZSBvZiB0aGVzZSBp
ZiB5b3UnZCBsaWtlIHRvIGluZmVyIGEgY29uc3RhbnQgdmFsdWUuIFdyaXRlcyB0byB0aGUgdmFs
dWUgc2hvdWxkIHVzZQorLy8gbm90aWZ5V3JpdGUoKS4gU28gbG9uZyBhcyBleGFjdGx5IG9uZSB2
YWx1ZSBoYWQgZXZlciBiZWVuIHdyaXR0ZW4gYW5kIGludmFsaWRhdGUoKSBoYXMgbmV2ZXIgYmVl
bgorLy8gY2FsbGVkLCBhbmQgeW91IHJlZ2lzdGVyIGEgd2F0Y2hwb2ludCwgeW91IGNhbiByZWx5
IG9uIHRoZSBpbmZlcnJlZFZhbHVlKCkgYmVpbmcgdGhlIG9uZSB0cnVlCisvLyB2YWx1ZS4KKy8v
CisvLyBDb21tb25seSB1c2VkIGZvciBpbmZlcnJpbmcgc2luZ2xldG9ucyAtIGluIHRoYXQgY2Fz
ZSBlYWNoIGFsbG9jYXRpb24gZG9lcyBub3RpZnlXcml0ZSgpLiBCdXQgeW91CisvLyBjYW4gdXNl
IGlmIGZvciBvdGhlciB0aGluZ3MgYXMgd2VsbC4KKworY2xhc3MgSW5mZXJyZWRWYWx1ZSA6IHB1
YmxpYyBKU0NlbGwgeworcHVibGljOgorICAgIHR5cGVkZWYgSlNDZWxsIEJhc2U7CisgICAgCisg
ICAgc3RhdGljIEluZmVycmVkVmFsdWUqIGNyZWF0ZShWTSYpOworICAgIAorICAgIHN0YXRpYyBj
b25zdCBib29sIG5lZWRzRGVzdHJ1Y3Rpb24gPSB0cnVlOworICAgIHN0YXRpYyBjb25zdCBib29s
IGhhc0ltbW9ydGFsU3RydWN0dXJlID0gdHJ1ZTsKKyAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpT
Q2VsbCopOworICAgIAorICAgIHN0YXRpYyBTdHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYs
IEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBwcm90b3R5cGUpOworICAgIAorICAgIHN0YXRpYyB2
b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0b3ImKTsKKyAgICAKKyAgICBERUNM
QVJFX0lORk87CisgICAgCisgICAgLy8gRm9yIHRoZSBwdXJwb3NlIG9mIGRlY2lkaW5nIHdoZXRo
ZXIgb3Igbm90IHRvIHdhdGNoIHRoaXMgdmFyaWFibGUsIHlvdSBvbmx5IG5lZWQKKyAgICAvLyB0
byBpbnNwZWN0IGluZmVycmVkVmFsdWUoKS4gSWYgdGhpcyByZXR1cm5zIHNvbWV0aGluZyBvdGhl
ciB0aGFuIHRoZSBlbXB0eQorICAgIC8vIHZhbHVlLCB0aGVuIGl0IG1lYW5zIHRoYXQgYXQgYWxs
IGZ1dHVyZSBzYWZlcG9pbnRzLCB0aGlzIHdhdGNocG9pbnQgc2V0IHdpbGwgYmUKKyAgICAvLyBp
biBvbmUgb2YgdGhlc2Ugc3RhdGVzOgorICAgIC8vCisgICAgLy8gICAgSXNXYXRjaGVkOiBpbiB0
aGlzIGNhc2UsIHRoZSB2YXJpYWJsZSdzIHZhbHVlIG11c3Qgc3RpbGwgYmUgdGhlCisgICAgLy8g
ICAgICAgIGluZmVycmVkVmFsdWUuCisgICAgLy8KKyAgICAvLyAgICBJc0ludmFsaWRhdGVkOiBp
biB0aGlzIGNhc2UgdGhlIHZhcmlhYmxlJ3MgdmFsdWUgbWF5IGJlIGFueXRoaW5nIGJ1dCB5b3Un
bGwKKyAgICAvLyAgICAgICAgZWl0aGVyIG5vdGljZSB0aGF0IGl0J3MgaW52YWxpZGF0ZWQgYW5k
IG5vdCBpbnN0YWxsIHRoZSB3YXRjaHBvaW50LCBvcgorICAgIC8vICAgICAgICB5b3Ugd2lsbCBo
YXZlIGJlZW4gbm90aWZpZWQgdGhhdCB0aGUgd2F0Y2hwb2ludCB3YXMgZmlyZWQuCisgICAgSlNW
YWx1ZSBpbmZlcnJlZFZhbHVlKCkgeyByZXR1cm4gbV92YWx1ZS5nZXQoKTsgfQorCisgICAgLy8g
Rm9yd2FyZHMgc29tZSBXYXRjaHBvaW50U2V0IG1ldGhvZHMuCisgICAgV2F0Y2hwb2ludFN0YXRl
IHN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9zZXQuc3RhdGUoKTsgfQorICAgIGJvb2wgaXNTdGls
bFZhbGlkKCkgY29uc3QgeyByZXR1cm4gbV9zZXQuaXNTdGlsbFZhbGlkKCk7IH0KKyAgICBib29s
IGhhc0JlZW5JbnZhbGlkYXRlZCgpIGNvbnN0IHsgcmV0dXJuIG1fc2V0Lmhhc0JlZW5JbnZhbGlk
YXRlZCgpOyB9CisgICAgdm9pZCBhZGQoV2F0Y2hwb2ludCogd2F0Y2hwb2ludCkgeyBtX3NldC5h
ZGQod2F0Y2hwb2ludCk7IH0KKyAgICAKKyAgICB2b2lkIG5vdGlmeVdyaXRlKFZNJiB2bSwgSlNW
YWx1ZSB2YWx1ZSwgY29uc3QgRmlyZURldGFpbCYgZGV0YWlsKQorICAgIHsKKyAgICAgICAgaWYg
KExJS0VMWShtX3NldC5zdGF0ZU9uTWFpblRocmVhZCgpID09IElzSW52YWxpZGF0ZWQpKQorICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICBub3RpZnlXcml0ZVNsb3codm0sIHZhbHVlLCBkZXRh
aWwpOworICAgIH0KKyAgICAKKyAgICB2b2lkIG5vdGlmeVdyaXRlKFZNJiB2bSwgSlNWYWx1ZSB2
YWx1ZSwgY29uc3QgY2hhciogcmVhc29uKQorICAgIHsKKyAgICAgICAgaWYgKExJS0VMWShtX3Nl
dC5zdGF0ZU9uTWFpblRocmVhZCgpID09IElzSW52YWxpZGF0ZWQpKQorICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICBub3RpZnlXcml0ZVNsb3codm0sIHZhbHVlLCByZWFzb24pOworICAgIH0K
KyAgICAKKyAgICB2b2lkIGludmFsaWRhdGUoY29uc3QgRmlyZURldGFpbCYgZGV0YWlsKQorICAg
IHsKKyAgICAgICAgbV92YWx1ZS5jbGVhcigpOworICAgICAgICBtX3NldC5pbnZhbGlkYXRlKGRl
dGFpbCk7CisgICAgfQorICAgIAorcHJvdGVjdGVkOgorICAgIHN0YXRpYyBjb25zdCB1bnNpZ25l
ZCBTdHJ1Y3R1cmVGbGFncyA9IFN0cnVjdHVyZUlzSW1tb3J0YWwgfCBCYXNlOjpTdHJ1Y3R1cmVG
bGFnczsKKyAgICAKK3ByaXZhdGU6CisgICAgSW5mZXJyZWRWYWx1ZShWTSYpOworICAgIH5JbmZl
cnJlZFZhbHVlKCk7CisgICAgCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBub3RpZnlXcml0
ZVNsb3coVk0mLCBKU1ZhbHVlLCBjb25zdCBGaXJlRGV0YWlsJik7CisgICAgSlNfRVhQT1JUX1BS
SVZBVEUgdm9pZCBub3RpZnlXcml0ZVNsb3coVk0mLCBKU1ZhbHVlLCBjb25zdCBjaGFyKiByZWFz
b24pOworICAgIAorICAgIC8vIFdlIGNvdWxkIGhhdmUgdXNlZCBXZWFrPD4uIEJ1dCB3ZSB3YW50
IGFyYml0cmFyeSBKU1ZhbHVlcywgbm90IGp1c3QgY2VsbHMuIEl0J3MgYWxzbyBzb21ld2hhdAor
ICAgIC8vIGNvbnZlbmllbnQgdG8gaGF2ZSBlYWdlciBub3RpZmljYXRpb24gb2YgZGVhdGguCisg
ICAgY2xhc3MgVmFsdWVDbGVhbnVwIDogcHVibGljIFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIgewor
ICAgIHB1YmxpYzoKKyAgICAgICAgVmFsdWVDbGVhbnVwKEluZmVycmVkVmFsdWUqKTsKKyAgICAg
ICAgdmlydHVhbCB+VmFsdWVDbGVhbnVwKCk7CisgICAgICAgIAorICAgIHByb3RlY3RlZDoKKyAg
ICAgICAgdm9pZCBmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSgpIG92ZXJyaWRlOworICAgICAgICAK
KyAgICBwcml2YXRlOgorICAgICAgICBJbmZlcnJlZFZhbHVlKiBtX293bmVyOworICAgIH07Cisg
ICAgCisgICAgZnJpZW5kIGNsYXNzIFZhbHVlQ2xlYW51cDsKKyAgICAKKyAgICBJbmxpbmVXYXRj
aHBvaW50U2V0IG1fc2V0OworICAgIFdyaXRlQmFycmllcjxVbmtub3duPiBtX3ZhbHVlOworICAg
IHN0ZDo6dW5pcXVlX3B0cjxWYWx1ZUNsZWFudXA+IG1fY2xlYW51cDsKK307CisKKy8vIEZJWE1F
OiBXZSBjb3VsZCBoYXZlIGFuIElubGluZUluZmVycmVkVmFsdWUsIHdoaWNoIG9ubHkgYWxsb2Nh
dGVzIHRoZSBJbmZlcnJlZFZhbHVlIG9iamVjdCB3aGVuCisvLyBhIG5vdGlmeVdyaXRlKCkgdHJh
bnNpdGlvbnMgdXMgdG93YXJkcyB3YXRjaGluZywgYW5kIHRoZW4gY2xlYXJzIHRoZSByZWZlcmVu
Y2UgKGFsbG93aW5nIHRoZSBvYmplY3QKKy8vIHRvIGRpZSkgd2hlbiB3ZSBnZXQgaW52YWxpZGF0
ZWQuCisKK30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gSW5mZXJyZWRWYWx1ZV9oCisK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRW52aXJvbm1lbnRSZWNvcmQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRW52aXJv
bm1lbnRSZWNvcmQuY3BwCShyZXZpc2lvbiAxODI0OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9KU0Vudmlyb25tZW50UmVjb3JkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAs
NyArNDAsNyBAQCB2b2lkIEpTRW52aXJvbm1lbnRSZWNvcmQ6OnZpc2l0Q2hpbGRyZW4oCiAgICAg
SlNFbnZpcm9ubWVudFJlY29yZCogdGhpc09iamVjdCA9IGpzQ2FzdDxKU0Vudmlyb25tZW50UmVj
b3JkKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dDX09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBp
bmZvKCkpOwogICAgIEJhc2U6OnZpc2l0Q2hpbGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7Ci0g
ICAgdmlzaXRvci5hcHBlbmRWYWx1ZXModGhpc09iamVjdC0+dmFyaWFibGVzKCksIHRoaXNPYmpl
Y3QtPm1fc3ltYm9sVGFibGUtPnNjb3BlU2l6ZSgpKTsKKyAgICB2aXNpdG9yLmFwcGVuZFZhbHVl
cyh0aGlzT2JqZWN0LT52YXJpYWJsZXMoKSwgdGhpc09iamVjdC0+c3ltYm9sVGFibGUoKS0+c2Nv
cGVTaXplKCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTRW52aXJvbm1lbnRSZWNvcmQuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Vudmlyb25tZW50UmVjb3JkLmgJKHJldmlzaW9u
IDE4MjQ5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRW52aXJvbm1lbnRS
ZWNvcmQuaAkod29ya2luZyBjb3B5KQpAQCAtNTMsNyArNTMsNyBAQCBwdWJsaWM6CiAgICAgCiAg
ICAgYm9vbCBpc1ZhbGlkKFNjb3BlT2Zmc2V0IG9mZnNldCkKICAgICB7Ci0gICAgICAgIHJldHVy
biAhIW9mZnNldCAmJiBvZmZzZXQub2Zmc2V0KCkgPCBtX3N5bWJvbFRhYmxlLT5zY29wZVNpemUo
KTsKKyAgICAgICAgcmV0dXJuICEhb2Zmc2V0ICYmIG9mZnNldC5vZmZzZXQoKSA8IHN5bWJvbFRh
YmxlKCktPnNjb3BlU2l6ZSgpOwogICAgIH0KICAgICAKICAgICBXcml0ZUJhcnJpZXJCYXNlPFVu
a25vd24+JiB2YXJpYWJsZUF0KFNjb3BlT2Zmc2V0IG9mZnNldCkKQEAgLTEwNCw3ICsxMDQsNyBA
QCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYgdm0pCiAgICAgewogICAg
ICAgICBmaW5pc2hDcmVhdGlvblVuaW5pdGlhbGl6ZWQodm0pOwotICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSBtX3N5bWJvbFRhYmxlLT5zY29wZVNpemUoKTsgaS0tOykgeworICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBzeW1ib2xUYWJsZSgpLT5zY29wZVNpemUoKTsgaS0tOykgewogICAgICAg
ICAgICAgLy8gRmlsbGluZyB0aGlzIHdpdGggdW5kZWZpbmVkIGlzIHVzZWZ1bCBiZWNhdXNlIHRo
YXQncyB3aGF0IHZhcmlhYmxlcyBzdGFydCBvdXQgYXMuCiAgICAgICAgICAgICB2YXJpYWJsZUF0
KFNjb3BlT2Zmc2V0KGkpKS5zZXRVbmRlZmluZWQoKTsKICAgICAgICAgfQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5jcHAJKHJldmlzaW9uIDE4MjQ5
OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC01OSw2ICs1OSwxMyBAQCBib29sIEpTRnVuY3Rpb246OmlzSG9zdEZ1bmN0
aW9uTm9uSW5saW5lCiAgICAgcmV0dXJuIGlzSG9zdEZ1bmN0aW9uKCk7CiB9CiAKK0pTRnVuY3Rp
b24qIEpTRnVuY3Rpb246OmNyZWF0ZShWTSYgdm0sIEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0
YWJsZSwgSlNTY29wZSogc2NvcGUpCit7CisgICAgSlNGdW5jdGlvbiogcmVzdWx0ID0gY3JlYXRl
SW1wbCh2bSwgZXhlY3V0YWJsZSwgc2NvcGUpOworICAgIGV4ZWN1dGFibGUtPnNpbmdsZXRvbkZ1
bmN0aW9uKCktPm5vdGlmeVdyaXRlKHZtLCByZXN1bHQsICJBbGxvY2F0aW5nIGEgZnVuY3Rpb24i
KTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCiBKU0Z1bmN0aW9uKiBKU0Z1bmN0aW9uOjpjcmVh
dGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0LCBpbnQgbGVuZ3RoLCBjb25z
dCBTdHJpbmcmIG5hbWUsIE5hdGl2ZUZ1bmN0aW9uIG5hdGl2ZUZ1bmN0aW9uLCBJbnRyaW5zaWMg
aW50cmluc2ljLCBOYXRpdmVGdW5jdGlvbiBuYXRpdmVDb25zdHJ1Y3RvcikKIHsKICAgICBOYXRp
dmVFeGVjdXRhYmxlKiBleGVjdXRhYmxlOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNGdW5jdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTRnVuY3Rpb24uaAkocmV2aXNpb24gMTgyNDk4KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC01OSwxNCArNTks
MTAgQEAgcHVibGljOgogICAgIHR5cGVkZWYgSlNDYWxsZWUgQmFzZTsKIAogICAgIEpTX0VYUE9S
VF9QUklWQVRFIHN0YXRpYyBKU0Z1bmN0aW9uKiBjcmVhdGUoVk0mLCBKU0dsb2JhbE9iamVjdCos
IGludCBsZW5ndGgsIGNvbnN0IFN0cmluZyYgbmFtZSwgTmF0aXZlRnVuY3Rpb24sIEludHJpbnNp
YyA9IE5vSW50cmluc2ljLCBOYXRpdmVGdW5jdGlvbiBuYXRpdmVDb25zdHJ1Y3RvciA9IGNhbGxI
b3N0RnVuY3Rpb25Bc0NvbnN0cnVjdG9yKTsKKyAgICAKKyAgICBzdGF0aWMgSlNGdW5jdGlvbiog
Y3JlYXRlV2l0aEludmFsaWRhdGVkUmVhbGxvY2F0aW9uV2F0Y2hwb2ludChWTSYgdm0sIEZ1bmN0
aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSwgSlNTY29wZSogc2NvcGUpOwogCi0gICAgc3RhdGlj
IEpTRnVuY3Rpb24qIGNyZWF0ZShWTSYgdm0sIEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJs
ZSwgSlNTY29wZSogc2NvcGUpCi0gICAgewotICAgICAgICBKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9
IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVDZWxsPEpTRnVuY3Rpb24+KHZtLmhlYXApKSBKU0Z1bmN0
aW9uKHZtLCBleGVjdXRhYmxlLCBzY29wZSk7Ci0gICAgICAgIEFTU0VSVChmdW5jdGlvbi0+c3Ry
dWN0dXJlKCktPmdsb2JhbE9iamVjdCgpKTsKLSAgICAgICAgZnVuY3Rpb24tPmZpbmlzaENyZWF0
aW9uKHZtKTsKLSAgICAgICAgcmV0dXJuIGZ1bmN0aW9uOwotICAgIH0KKyAgICBzdGF0aWMgSlNG
dW5jdGlvbiogY3JlYXRlKFZNJiwgRnVuY3Rpb25FeGVjdXRhYmxlKiwgSlNTY29wZSopOwogCiAg
ICAgc3RhdGljIEpTRnVuY3Rpb24qIGNyZWF0ZUJ1aWx0aW5GdW5jdGlvbihWTSYsIEZ1bmN0aW9u
RXhlY3V0YWJsZSosIEpTR2xvYmFsT2JqZWN0Kik7CiAKQEAgLTE0OSw2ICsxNDUsMTQgQEAgcHJv
dGVjdGVkOgogICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0
b3ImKTsKIAogcHJpdmF0ZToKKyAgICBzdGF0aWMgSlNGdW5jdGlvbiogY3JlYXRlSW1wbChWTSYg
dm0sIEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSwgSlNTY29wZSogc2NvcGUpCisgICAg
eworICAgICAgICBKU0Z1bmN0aW9uKiBmdW5jdGlvbiA9IG5ldyAoTm90TnVsbCwgYWxsb2NhdGVD
ZWxsPEpTRnVuY3Rpb24+KHZtLmhlYXApKSBKU0Z1bmN0aW9uKHZtLCBleGVjdXRhYmxlLCBzY29w
ZSk7CisgICAgICAgIEFTU0VSVChmdW5jdGlvbi0+c3RydWN0dXJlKCktPmdsb2JhbE9iamVjdCgp
KTsKKyAgICAgICAgZnVuY3Rpb24tPmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICAgICAgcmV0dXJu
IGZ1bmN0aW9uOworICAgIH0KKyAgICAKICAgICBmcmllbmQgY2xhc3MgTExJbnRPZmZzZXRzRXh0
cmFjdG9yOwogCiAgICAgc3RhdGljIEVuY29kZWRKU1ZhbHVlIGFyZ3VtZW50c0dldHRlcihFeGVj
U3RhdGUqLCBKU09iamVjdCosIEVuY29kZWRKU1ZhbHVlLCBQcm9wZXJ0eU5hbWUpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbklubGluZXMuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1bmN0aW9uSW5saW5lcy5o
CShyZXZpc2lvbiAxODI0OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Z1
bmN0aW9uSW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENv
cHlyaWdodCAoQykgMjAxMyBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTMsIDIwMTUgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICoK
ICAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdp
dGggb3Igd2l0aG91dAogICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRo
YXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCkBAIC0zMSw2ICszMSwxMyBAQAogCiBuYW1lc3Bh
Y2UgSlNDIHsKIAoraW5saW5lIEpTRnVuY3Rpb24qIEpTRnVuY3Rpb246OmNyZWF0ZVdpdGhJbnZh
bGlkYXRlZFJlYWxsb2NhdGlvbldhdGNocG9pbnQoCisgICAgVk0mIHZtLCBGdW5jdGlvbkV4ZWN1
dGFibGUqIGV4ZWN1dGFibGUsIEpTU2NvcGUqIHNjb3BlKQoreworICAgIEFTU0VSVChleGVjdXRh
YmxlLT5zaW5nbGV0b25GdW5jdGlvbigpLT5oYXNCZWVuSW52YWxpZGF0ZWQoKSk7CisgICAgcmV0
dXJuIGNyZWF0ZUltcGwodm0sIGV4ZWN1dGFibGUsIHNjb3BlKTsKK30KKwogaW5saW5lIEpTRnVu
Y3Rpb246OkpTRnVuY3Rpb24oVk0mIHZtLCBGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUs
IEpTU2NvcGUqIHNjb3BlKQogICAgIDogQmFzZSh2bSwgc2NvcGUsIHNjb3BlLT5nbG9iYWxPYmpl
Y3QoKS0+ZnVuY3Rpb25TdHJ1Y3R1cmUoKSkKICAgICAsIG1fZXhlY3V0YWJsZSh2bSwgdGhpcywg
ZXhlY3V0YWJsZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFs
T2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0dsb2JhbE9iamVjdC5jcHAJKHJldmlzaW9uIDE4MjQ5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI0LDcg
KzEyNCw3IEBACiAjaW5jbHVkZSAiU3ltYm9sLmgiCiAjaW5jbHVkZSAiU3ltYm9sQ29uc3RydWN0
b3IuaCIKICNpbmNsdWRlICJTeW1ib2xQcm90b3R5cGUuaCIKLSNpbmNsdWRlICJWYXJpYWJsZVdh
dGNocG9pbnRTZXRJbmxpbmVzLmgiCisjaW5jbHVkZSAiVmFyaWFibGVXcml0ZUZpcmVEZXRhaWwu
aCIKICNpbmNsdWRlICJXZWFrR0NNYXBJbmxpbmVzLmgiCiAjaW5jbHVkZSAiV2Vha01hcENvbnN0
cnVjdG9yLmgiCiAjaW5jbHVkZSAiV2Vha01hcFByb3RvdHlwZS5oIgpAQCAtNDg5LDcgKzQ4OSw3
IEBAIEpTR2xvYmFsT2JqZWN0OjpOZXdHbG9iYWxWYXIgSlNHbG9iYWxPYmoKICAgICBTY29wZU9m
ZnNldCBvZmZzZXQgPSBzeW1ib2xUYWJsZSgpLT50YWtlTmV4dFNjb3BlT2Zmc2V0KGxvY2tlcik7
CiAgICAgU3ltYm9sVGFibGVFbnRyeSBuZXdFbnRyeShWYXJPZmZzZXQob2Zmc2V0KSwgKGNvbnN0
YW50TW9kZSA9PSBJc0NvbnN0YW50KSA/IFJlYWRPbmx5IDogMCk7CiAgICAgaWYgKGNvbnN0YW50
TW9kZSA9PSBJc1ZhcmlhYmxlKQotICAgICAgICBuZXdFbnRyeS5wcmVwYXJlVG9XYXRjaChzeW1i
b2xUYWJsZSgpKTsKKyAgICAgICAgbmV3RW50cnkucHJlcGFyZVRvV2F0Y2goKTsKICAgICBlbHNl
CiAgICAgICAgIG5ld0VudHJ5LmRpc2FibGVXYXRjaGluZygpOwogICAgIHN5bWJvbFRhYmxlKCkt
PmFkZChsb2NrZXIsIGlkZW50LmltcGwoKSwgbmV3RW50cnkpOwpAQCAtNTEwLDcgKzUxMCw3IEBA
IHZvaWQgSlNHbG9iYWxPYmplY3Q6OmFkZEZ1bmN0aW9uKEV4ZWNTdGEKICAgICBOZXdHbG9iYWxW
YXIgdmFyID0gYWRkR2xvYmFsVmFyKHByb3BlcnR5TmFtZSwgSXNWYXJpYWJsZSk7CiAgICAgdmFy
aWFibGVBdCh2YXIub2Zmc2V0KS5zZXQoZXhlYy0+dm0oKSwgdGhpcywgdmFsdWUpOwogICAgIGlm
ICh2YXIuc2V0KQotICAgICAgICB2YXIuc2V0LT5ub3RpZnlXcml0ZSh2bSwgdmFsdWUsIFZhcmlh
YmxlV3JpdGVGaXJlRGV0YWlsKHRoaXMsIHByb3BlcnR5TmFtZSkpOworICAgICAgICB2YXIuc2V0
LT50b3VjaChWYXJpYWJsZVdyaXRlRmlyZURldGFpbCh0aGlzLCBwcm9wZXJ0eU5hbWUpKTsKIH0K
IAogc3RhdGljIGlubGluZSBKU09iamVjdCogbGFzdEluUHJvdG90eXBlQ2hhaW4oSlNPYmplY3Qq
IG9iamVjdCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2Jq
ZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9i
YWxPYmplY3QuaAkocmV2aXNpb24gMTgyNDk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNHbG9iYWxPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMzM0LDcgKzMzNCw3IEBA
IHByb3RlY3RlZDoKIAogICAgIHN0cnVjdCBOZXdHbG9iYWxWYXIgewogICAgICAgICBTY29wZU9m
ZnNldCBvZmZzZXQ7Ci0gICAgICAgIFZhcmlhYmxlV2F0Y2hwb2ludFNldCogc2V0OworICAgICAg
ICBXYXRjaHBvaW50U2V0KiBzZXQ7CiAgICAgfTsKICAgICBOZXdHbG9iYWxWYXIgYWRkR2xvYmFs
VmFyKGNvbnN0IElkZW50aWZpZXImLCBDb25zdGFudE1vZGUpOwogCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0xleGljYWxFbnZpcm9ubWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMZXhpY2FsRW52aXJvbm1lbnQuY3Bw
CShyZXZpc2lvbiAxODI0OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0xl
eGljYWxFbnZpcm9ubWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc3LDYgKzc3LDcgQEAgaW5s
aW5lIGJvb2wgSlNMZXhpY2FsRW52aXJvbm1lbnQ6OnN5bWJvbAogICAgIEFTU0VSVCghSGVhcDo6
aGVhcCh2YWx1ZSkgfHwgSGVhcDo6aGVhcCh2YWx1ZSkgPT0gSGVhcDo6aGVhcCh0aGlzKSk7CiAg
ICAgCiAgICAgV3JpdGVCYXJyaWVyQmFzZTxVbmtub3duPiogcmVnOworICAgIFdhdGNocG9pbnRT
ZXQqIHNldDsKICAgICB7CiAgICAgICAgIEdDU2FmZUNvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2Vy
KHN5bWJvbFRhYmxlKCktPm1fbG9jaywgZXhlYy0+dm0oKS5oZWFwKTsKICAgICAgICAgU3ltYm9s
VGFibGU6Ok1hcDo6aXRlcmF0b3IgaXRlciA9IHN5bWJvbFRhYmxlKCktPmZpbmQobG9ja2VyLCBw
cm9wZXJ0eU5hbWUudWlkKCkpOwpAQCAtOTIsMTEgKzkzLDEyIEBAIGlubGluZSBib29sIEpTTGV4
aWNhbEVudmlyb25tZW50OjpzeW1ib2wKICAgICAgICAgLy8gRGVmZW5kIGFnYWluc3QgdGhlIGlu
c3BlY3RvciBhc2tpbmcgZm9yIGEgdmFyIGFmdGVyIGl0IGhhcyBiZWVuIG9wdGltaXplZCBvdXQu
CiAgICAgICAgIGlmICghaXNWYWxpZChvZmZzZXQpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OwotICAgICAgICBpZiAoVmFyaWFibGVXYXRjaHBvaW50U2V0KiBzZXQgPSBpdGVyLT52YWx1ZS53
YXRjaHBvaW50U2V0KCkpCi0gICAgICAgICAgICBzZXQtPmludmFsaWRhdGUoVmFyaWFibGVXcml0
ZUZpcmVEZXRhaWwodGhpcywgcHJvcGVydHlOYW1lKSk7IC8vIERvbid0IG1lc3MgYXJvdW5kIC0g
aWYgd2UgaGFkIGZvdW5kIHRoaXMgc3RhdGljYWxseSwgd2Ugd291bGQgaGF2ZSBpbnZhbGlkYXRl
ZCBpdC4KKyAgICAgICAgc2V0ID0gaXRlci0+dmFsdWUud2F0Y2hwb2ludFNldCgpOwogICAgICAg
ICByZWcgPSAmdmFyaWFibGVBdChvZmZzZXQpOwogICAgIH0KICAgICByZWctPnNldCh2bSwgdGhp
cywgdmFsdWUpOworICAgIGlmIChzZXQpCisgICAgICAgIHNldC0+aW52YWxpZGF0ZShWYXJpYWJs
ZVdyaXRlRmlyZURldGFpbCh0aGlzLCBwcm9wZXJ0eU5hbWUpKTsgLy8gRG9uJ3QgbWVzcyBhcm91
bmQgLSBpZiB3ZSBoYWQgZm91bmQgdGhpcyBzdGF0aWNhbGx5LCB3ZSB3b3VsZCBoYXZlIGludmFs
aWRhdGVkIGl0LgogICAgIHJldHVybiB0cnVlOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU1Njb3BlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNTY29wZS5oCShyZXZpc2lvbiAxODI0OTgpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1Njb3BlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcg
QEAKIG5hbWVzcGFjZSBKU0MgewogCiBjbGFzcyBTY29wZUNoYWluSXRlcmF0b3I7Ci1jbGFzcyBW
YXJpYWJsZVdhdGNocG9pbnRTZXQ7CitjbGFzcyBXYXRjaHBvaW50U2V0OwogCiBlbnVtIFJlc29s
dmVNb2RlIHsKICAgICBUaHJvd0lmTm90Rm91bmQsCkBAIC0xMDIsNyArMTAyLDcgQEAgaW5saW5l
IGJvb2wgbmVlZHNWYXJJbmplY3Rpb25DaGVja3MoUmVzbwogfQogCiBzdHJ1Y3QgUmVzb2x2ZU9w
IHsKLSAgICBSZXNvbHZlT3AoUmVzb2x2ZVR5cGUgdHlwZSwgc2l6ZV90IGRlcHRoLCBTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSwgSlNMZXhpY2FsRW52aXJvbm1lbnQqIGxleGljYWxFbnZpcm9ubWVudCwg
VmFyaWFibGVXYXRjaHBvaW50U2V0KiB3YXRjaHBvaW50U2V0LCB1aW50cHRyX3Qgb3BlcmFuZCkK
KyAgICBSZXNvbHZlT3AoUmVzb2x2ZVR5cGUgdHlwZSwgc2l6ZV90IGRlcHRoLCBTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSwgSlNMZXhpY2FsRW52aXJvbm1lbnQqIGxleGljYWxFbnZpcm9ubWVudCwgV2F0
Y2hwb2ludFNldCogd2F0Y2hwb2ludFNldCwgdWludHB0cl90IG9wZXJhbmQpCiAgICAgICAgIDog
dHlwZSh0eXBlKQogICAgICAgICAsIGRlcHRoKGRlcHRoKQogICAgICAgICAsIHN0cnVjdHVyZShz
dHJ1Y3R1cmUpCkBAIC0xMTYsNyArMTE2LDcgQEAgc3RydWN0IFJlc29sdmVPcCB7CiAgICAgc2l6
ZV90IGRlcHRoOwogICAgIFN0cnVjdHVyZSogc3RydWN0dXJlOwogICAgIEpTTGV4aWNhbEVudmly
b25tZW50KiBsZXhpY2FsRW52aXJvbm1lbnQ7Ci0gICAgVmFyaWFibGVXYXRjaHBvaW50U2V0KiB3
YXRjaHBvaW50U2V0OworICAgIFdhdGNocG9pbnRTZXQqIHdhdGNocG9pbnRTZXQ7CiAgICAgdWlu
dHB0cl90IG9wZXJhbmQ7CiB9OwogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5oCShyZXZpc2lvbiAx
ODI0OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1NlZ21lbnRlZFZhcmlh
YmxlT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTg2LDcgKzg2LDcgQEAgcHJvdGVjdGVkOgog
ICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oVk0mIHZtKQogICAgIHsKICAgICAgICAgQmFzZTo6Zmlu
aXNoQ3JlYXRpb24odm0pOwotICAgICAgICBtX3N5bWJvbFRhYmxlLnNldCh2bSwgdGhpcywgU3lt
Ym9sVGFibGU6OmNyZWF0ZSh2bSkpOworICAgICAgICBzZXRTeW1ib2xUYWJsZSh2bSwgU3ltYm9s
VGFibGU6OmNyZWF0ZSh2bSkpOwogICAgIH0KICAgICAKICAgICBTZWdtZW50ZWRWZWN0b3I8V3Jp
dGVCYXJyaWVyPFVua25vd24+LCAxNj4gbV92YXJpYWJsZXM7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxlT2JqZWN0LmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5oCShyZXZpc2lv
biAxODI0OTgpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N5bWJvbFRhYmxl
T2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMyLDcgKzMyLDcgQEAKICNpbmNsdWRlICJKU1Nj
b3BlLmgiCiAjaW5jbHVkZSAiUHJvcGVydHlEZXNjcmlwdG9yLmgiCiAjaW5jbHVkZSAiU3ltYm9s
VGFibGUuaCIKLSNpbmNsdWRlICJWYXJpYWJsZVdhdGNocG9pbnRTZXRJbmxpbmVzLmgiCisjaW5j
bHVkZSAiVmFyaWFibGVXcml0ZUZpcmVEZXRhaWwuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAg
LTYxLDExICs2MSwxOSBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIDogQmFzZSh2bSwgc3RydWN0dXJl
LCBzY29wZSkKICAgICB7CiAgICAgICAgIEFTU0VSVChzeW1ib2xUYWJsZSk7CisgICAgICAgIHNl
dFN5bWJvbFRhYmxlKHZtLCBzeW1ib2xUYWJsZSk7CisgICAgfQorICAgIAorICAgIHZvaWQgc2V0
U3ltYm9sVGFibGUoVk0mIHZtLCBTeW1ib2xUYWJsZSogc3ltYm9sVGFibGUpCisgICAgeworICAg
ICAgICBBU1NFUlQoIW1fc3ltYm9sVGFibGUpOworICAgICAgICBzeW1ib2xUYWJsZS0+c2luZ2xl
dG9uU2NvcGUoKS0+bm90aWZ5V3JpdGUodm0sIHRoaXMsICJBbGxvY2F0ZWQgYSBzY29wZSIpOwog
ICAgICAgICBtX3N5bWJvbFRhYmxlLnNldCh2bSwgdGhpcywgc3ltYm9sVGFibGUpOwogICAgIH0K
LQorICAgIAogICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZpc2l0
b3ImKTsKLQorICAgIAorcHJpdmF0ZToKICAgICBXcml0ZUJhcnJpZXI8U3ltYm9sVGFibGU+IG1f
c3ltYm9sVGFibGU7CiB9OwogCkBAIC0xMjYsNiArMTM0LDcgQEAgaW5saW5lIGJvb2wgc3ltYm9s
VGFibGVQdXQoCiAgICAgQVNTRVJUKCFIZWFwOjpoZWFwKHZhbHVlKSB8fCBIZWFwOjpoZWFwKHZh
bHVlKSA9PSBIZWFwOjpoZWFwKG9iamVjdCkpOwogICAgIAogICAgIFdyaXRlQmFycmllckJhc2U8
VW5rbm93bj4qIHJlZzsKKyAgICBXYXRjaHBvaW50U2V0KiBzZXQ7CiAgICAgewogICAgICAgICBT
eW1ib2xUYWJsZSYgc3ltYm9sVGFibGUgPSAqb2JqZWN0LT5zeW1ib2xUYWJsZSgpOwogICAgICAg
ICAvLyBGSVhNRTogVGhpcyBpcyB2ZXJ5IHN1c3BpY2lvdXMuIFdlIHNob3VsZG4ndCBuZWVkIGEg
R0Mtc2FmZSBsb2NrIGhlcmUuCkBAIC0xNDIsMTcgKzE1MSwxNSBAQCBpbmxpbmUgYm9vbCBzeW1i
b2xUYWJsZVB1dCgKICAgICAgICAgICAgICAgICB0aHJvd1R5cGVFcnJvcihleGVjLCBTdHJpY3RN
b2RlUmVhZG9ubHlQcm9wZXJ0eVdyaXRlRXJyb3IpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7
CiAgICAgICAgIH0KLSAgICAgICAgaWYgKFZhcmlhYmxlV2F0Y2hwb2ludFNldCogc2V0ID0gaXRl
ci0+dmFsdWUud2F0Y2hwb2ludFNldCgpKSB7Ci0gICAgICAgICAgICAvLyBGSVhNRTogSXQncyBz
dHJhbmdlIHRoYXQgd2UncmUgZG9pbmcgdGhpcyB3aGlsZSBob2xkaW5nIHRoZSBzeW1ib2wgdGFi
bGUncyBsb2NrLgotICAgICAgICAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEzNDYwMQotICAgICAgICAgICAgc2V0LT5ub3RpZnlXcml0ZSh2bSwgdmFsdWUs
IG9iamVjdCwgcHJvcGVydHlOYW1lKTsKLSAgICAgICAgfQorICAgICAgICBzZXQgPSBpdGVyLT52
YWx1ZS53YXRjaHBvaW50U2V0KCk7CiAgICAgICAgIHJlZyA9ICZvYmplY3QtPnZhcmlhYmxlQXQo
ZmFzdEVudHJ5LnNjb3BlT2Zmc2V0KCkpOwogICAgIH0KICAgICAvLyBJJ2QgcHJlZmVyIHdlIG5v
dCBob2xkIGxvY2sgd2hpbGUgZXhlY3V0aW5nIGJhcnJpZXJzLCBzaW5jZSBJIHByZWZlciB0byBy
ZXNlcnZlCiAgICAgLy8gdGhlIHJpZ2h0IGZvciBiYXJyaWVycyB0byBiZSBhYmxlIHRvIHRyaWdn
ZXIgR0MuIEFuZCBJIGRvbid0IHdhbnQgdG8gaG9sZCBWTQogICAgIC8vIGxvY2tzIHdoaWxlIEdD
J2luZy4KICAgICByZWctPnNldCh2bSwgb2JqZWN0LCB2YWx1ZSk7CisgICAgaWYgKHNldCkKKyAg
ICAgICAgVmFyaWFibGVXcml0ZUZpcmVEZXRhaWw6OnRvdWNoKHNldCwgb2JqZWN0LCBwcm9wZXJ0
eU5hbWUpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0xNjQsNiArMTcxLDcgQEAgaW5saW5l
IGJvb2wgc3ltYm9sVGFibGVQdXRXaXRoQXR0cmlidXRlcwogICAgIEFTU0VSVCghSGVhcDo6aGVh
cCh2YWx1ZSkgfHwgSGVhcDo6aGVhcCh2YWx1ZSkgPT0gSGVhcDo6aGVhcChvYmplY3QpKTsKIAog
ICAgIFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIHJlZzsKKyAgICBXYXRjaHBvaW50U2V0KiBz
ZXQ7CiAgICAgewogICAgICAgICBTeW1ib2xUYWJsZSYgc3ltYm9sVGFibGUgPSAqb2JqZWN0LT5z
eW1ib2xUYWJsZSgpOwogICAgICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihzeW1ib2xU
YWJsZS5tX2xvY2spOwpAQCAtMTcyLDEyICsxODAsMTMgQEAgaW5saW5lIGJvb2wgc3ltYm9sVGFi
bGVQdXRXaXRoQXR0cmlidXRlcwogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBT
eW1ib2xUYWJsZUVudHJ5JiBlbnRyeSA9IGl0ZXItPnZhbHVlOwogICAgICAgICBBU1NFUlQoIWVu
dHJ5LmlzTnVsbCgpKTsKLSAgICAgICAgaWYgKFZhcmlhYmxlV2F0Y2hwb2ludFNldCogc2V0ID0g
ZW50cnkud2F0Y2hwb2ludFNldCgpKQotICAgICAgICAgICAgc2V0LT5ub3RpZnlXcml0ZSh2bSwg
dmFsdWUsIG9iamVjdCwgcHJvcGVydHlOYW1lKTsKKyAgICAgICAgc2V0ID0gZW50cnkud2F0Y2hw
b2ludFNldCgpOwogICAgICAgICBlbnRyeS5zZXRBdHRyaWJ1dGVzKGF0dHJpYnV0ZXMpOwogICAg
ICAgICByZWcgPSAmb2JqZWN0LT52YXJpYWJsZUF0KGVudHJ5LnNjb3BlT2Zmc2V0KCkpOwogICAg
IH0KICAgICByZWctPnNldCh2bSwgb2JqZWN0LCB2YWx1ZSk7CisgICAgaWYgKHNldCkKKyAgICAg
ICAgVmFyaWFibGVXcml0ZUZpcmVEZXRhaWw6OnRvdWNoKHNldCwgb2JqZWN0LCBwcm9wZXJ0eU5h
bWUpOwogICAgIHJldHVybiB0cnVlOwogfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9QdXRQcm9wZXJ0eVNsb3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9QdXRQcm9wZXJ0eVNsb3QuaAkocmV2aXNpb24gMTgyNDk4KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHV0UHJvcGVydHlTbG90LmgJKHdvcmtpbmcgY29w
eSkKQEAgLTI4LDYgKzI4LDcgQEAKICNkZWZpbmUgUHV0UHJvcGVydHlTbG90X2gKIAogI2luY2x1
ZGUgIkpTQ0pTVmFsdWUuaCIKKyNpbmNsdWRlICJQcm9wZXJ0eU9mZnNldC5oIgogCiAjaW5jbHVk
ZSA8d3RmL0Fzc2VydGlvbnMuaD4KIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvU3ltYm9sVGFibGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL1N5bWJvbFRhYmxlLmNwcAkocmV2aXNpb24gMTgyNDk4KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvU3ltYm9sVGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw3
ICszMyw2IEBACiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2luY2x1ZGUgIlNsb3RWaXNpdG9y
SW5saW5lcy5oIgogI2luY2x1ZGUgIlR5cGVQcm9maWxlci5oIgotI2luY2x1ZGUgIlZhcmlhYmxl
V2F0Y2hwb2ludFNldElubGluZXMuaCIKIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTYwLDIxICs1
OSwxNCBAQCB2b2lkIFN5bWJvbFRhYmxlRW50cnk6OmZyZWVGYXRFbnRyeVNsb3coCiAgICAgZGVs
ZXRlIGZhdEVudHJ5KCk7CiB9CiAKLUpTVmFsdWUgU3ltYm9sVGFibGVFbnRyeTo6aW5mZXJyZWRW
YWx1ZSgpCi17Ci0gICAgaWYgKCFpc0ZhdCgpKQotICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOwot
ICAgIHJldHVybiBmYXRFbnRyeSgpLT5tX3dhdGNocG9pbnRzLT5pbmZlcnJlZFZhbHVlKCk7Ci19
Ci0KLXZvaWQgU3ltYm9sVGFibGVFbnRyeTo6cHJlcGFyZVRvV2F0Y2goU3ltYm9sVGFibGUqIHN5
bWJvbFRhYmxlKQordm9pZCBTeW1ib2xUYWJsZUVudHJ5OjpwcmVwYXJlVG9XYXRjaCgpCiB7CiAg
ICAgaWYgKCFpc1dhdGNoYWJsZSgpKQogICAgICAgICByZXR1cm47CiAgICAgRmF0RW50cnkqIGVu
dHJ5ID0gaW5mbGF0ZSgpOwogICAgIGlmIChlbnRyeS0+bV93YXRjaHBvaW50cykKICAgICAgICAg
cmV0dXJuOwotICAgIGVudHJ5LT5tX3dhdGNocG9pbnRzID0gYWRvcHRSZWYobmV3IFZhcmlhYmxl
V2F0Y2hwb2ludFNldCgqc3ltYm9sVGFibGUpKTsKKyAgICBlbnRyeS0+bV93YXRjaHBvaW50cyA9
IGFkb3B0UmVmKG5ldyBXYXRjaHBvaW50U2V0KENsZWFyV2F0Y2hwb2ludCkpOwogfQogCiB2b2lk
IFN5bWJvbFRhYmxlRW50cnk6OmFkZFdhdGNocG9pbnQoV2F0Y2hwb2ludCogd2F0Y2hwb2ludCkK
QEAgLTgyLDE1ICs3NCw2IEBAIHZvaWQgU3ltYm9sVGFibGVFbnRyeTo6YWRkV2F0Y2hwb2ludChX
YXQKICAgICBmYXRFbnRyeSgpLT5tX3dhdGNocG9pbnRzLT5hZGQod2F0Y2hwb2ludCk7CiB9CiAK
LXZvaWQgU3ltYm9sVGFibGVFbnRyeTo6bm90aWZ5V3JpdGVTbG93KFZNJiB2bSwgSlNWYWx1ZSB2
YWx1ZSwgY29uc3QgRmlyZURldGFpbCYgZGV0YWlsKQotewotICAgIFZhcmlhYmxlV2F0Y2hwb2lu
dFNldCogd2F0Y2hwb2ludHMgPSBmYXRFbnRyeSgpLT5tX3dhdGNocG9pbnRzLmdldCgpOwotICAg
IGlmICghd2F0Y2hwb2ludHMpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICB3YXRjaHBvaW50
cy0+bm90aWZ5V3JpdGUodm0sIHZhbHVlLCBkZXRhaWwpOwotfQotCiBTeW1ib2xUYWJsZUVudHJ5
OjpGYXRFbnRyeSogU3ltYm9sVGFibGVFbnRyeTo6aW5mbGF0ZVNsb3coKQogewogICAgIEZhdEVu
dHJ5KiBlbnRyeSA9IG5ldyBGYXRFbnRyeShtX2JpdHMpOwpAQCAtMTAxLDQ4ICs4NCwyOSBAQCBT
eW1ib2xUYWJsZUVudHJ5OjpGYXRFbnRyeSogU3ltYm9sVGFibGVFCiBTeW1ib2xUYWJsZTo6U3lt
Ym9sVGFibGUoVk0mIHZtKQogICAgIDogSlNDZWxsKHZtLCB2bS5zeW1ib2xUYWJsZVN0cnVjdHVy
ZS5nZXQoKSkKICAgICAsIG1fdXNlc05vblN0cmljdEV2YWwoZmFsc2UpCi0gICAgLCBtX2Z1bmN0
aW9uRW50ZXJlZE9uY2UoQ2xlYXJXYXRjaHBvaW50KQogewogfQogCiBTeW1ib2xUYWJsZTo6flN5
bWJvbFRhYmxlKCkgeyB9CiAKK3ZvaWQgU3ltYm9sVGFibGU6OmZpbmlzaENyZWF0aW9uKFZNJiB2
bSkKK3sKKyAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbih2bSk7CisgICAgbV9zaW5nbGV0b25TY29w
ZS5zZXQodm0sIHRoaXMsIEluZmVycmVkVmFsdWU6OmNyZWF0ZSh2bSkpOworfQorCiB2b2lkIFN5
bWJvbFRhYmxlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogdGhpc0NlbGwsIFNsb3RWaXNpdG9yJiB2
aXNpdG9yKQogewogICAgIFN5bWJvbFRhYmxlKiB0aGlzU3ltYm9sVGFibGUgPSBqc0Nhc3Q8U3lt
Ym9sVGFibGUqPih0aGlzQ2VsbCk7CiAgICAgCiAgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNTeW1i
b2xUYWJsZS0+bV9hcmd1bWVudHMpOwotICAgIAotICAgIGlmICghdGhpc1N5bWJvbFRhYmxlLT5t
X3dhdGNocG9pbnRDbGVhbnVwKSB7Ci0gICAgICAgIHRoaXNTeW1ib2xUYWJsZS0+bV93YXRjaHBv
aW50Q2xlYW51cCA9Ci0gICAgICAgICAgICBzdGQ6Om1ha2VfdW5pcXVlPFdhdGNocG9pbnRDbGVh
bnVwPih0aGlzU3ltYm9sVGFibGUpOwotICAgIH0KLSAgICAKLSAgICB2aXNpdG9yLmFkZFVuY29u
ZGl0aW9uYWxGaW5hbGl6ZXIodGhpc1N5bWJvbFRhYmxlLT5tX3dhdGNocG9pbnRDbGVhbnVwLmdl
dCgpKTsKKyAgICB2aXNpdG9yLmFwcGVuZCgmdGhpc1N5bWJvbFRhYmxlLT5tX3NpbmdsZXRvblNj
b3BlKTsKICAgICAKICAgICAvLyBTYXZlIHNvbWUgbWVtb3J5LiBUaGlzIGlzIE8obikgdG8gcmVi
dWlsZCBhbmQgd2UgZG8gc28gb24gdGhlIGZseS4KICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxv
Y2tlcih0aGlzU3ltYm9sVGFibGUtPm1fbG9jayk7CiAgICAgdGhpc1N5bWJvbFRhYmxlLT5tX2xv
Y2FsVG9FbnRyeSA9IG51bGxwdHI7CiB9CiAKLVN5bWJvbFRhYmxlOjpXYXRjaHBvaW50Q2xlYW51
cDo6V2F0Y2hwb2ludENsZWFudXAoU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlKQotICAgIDogbV9z
eW1ib2xUYWJsZShzeW1ib2xUYWJsZSkKLXsKLX0KLQotU3ltYm9sVGFibGU6OldhdGNocG9pbnRD
bGVhbnVwOjp+V2F0Y2hwb2ludENsZWFudXAoKSB7IH0KLQotdm9pZCBTeW1ib2xUYWJsZTo6V2F0
Y2hwb2ludENsZWFudXA6OmZpbmFsaXplVW5jb25kaXRpb25hbGx5KCkKLXsKLSAgICBTdHJpbmdG
aXJlRGV0YWlsIGRldGFpbCgiU3ltYm9sIHRhYmxlIGNsZWFuLXVwIGR1cmluZyBHQyIpOwotICAg
IE1hcDo6aXRlcmF0b3IgaXRlciA9IG1fc3ltYm9sVGFibGUtPm1fbWFwLmJlZ2luKCk7Ci0gICAg
TWFwOjppdGVyYXRvciBlbmQgPSBtX3N5bWJvbFRhYmxlLT5tX21hcC5lbmQoKTsKLSAgICBmb3Ig
KDsgaXRlciAhPSBlbmQ7ICsraXRlcikgewotICAgICAgICBpZiAoVmFyaWFibGVXYXRjaHBvaW50
U2V0KiBzZXQgPSBpdGVyLT52YWx1ZS53YXRjaHBvaW50U2V0KCkpCi0gICAgICAgICAgICBzZXQt
PmZpbmFsaXplVW5jb25kaXRpb25hbGx5KGRldGFpbCk7Ci0gICAgfQotfQotCiBjb25zdCBTeW1i
b2xUYWJsZTo6TG9jYWxUb0VudHJ5VmVjJiBTeW1ib2xUYWJsZTo6bG9jYWxUb0VudHJ5KGNvbnN0
IENvbmN1cnJlbnRKSVRMb2NrZXImKQogewogICAgIGlmIChVTkxJS0VMWSghbV9sb2NhbFRvRW50
cnkpKSB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxl
LmgJKHJldmlzaW9uIDE4MjQ5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5
bWJvbFRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMxLDE3ICszMSwyMCBAQAogCiAjaW5jbHVk
ZSAiQ29uY3VycmVudEpJVExvY2suaCIKICNpbmNsdWRlICJDb25zdGFudE1vZGUuaCIKKyNpbmNs
dWRlICJJbmZlcnJlZFZhbHVlLmgiCiAjaW5jbHVkZSAiSlNPYmplY3QuaCIKICNpbmNsdWRlICJT
Y29wZWRBcmd1bWVudHNUYWJsZS5oIgogI2luY2x1ZGUgIlR5cGVMb2NhdGlvbi5oIgogI2luY2x1
ZGUgIlZhck9mZnNldC5oIgotI2luY2x1ZGUgIlZhcmlhYmxlV2F0Y2hwb2ludFNldC5oIgorI2lu
Y2x1ZGUgIldhdGNocG9pbnQuaCIKICNpbmNsdWRlIDxtZW1vcnk+CiAjaW5jbHVkZSA8d3RmL0hh
c2hUcmFpdHMuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdJbXBsLmg+CiAKIG5hbWVzcGFj
ZSBKU0MgewogCitjbGFzcyBTeW1ib2xUYWJsZTsKKwogc3RhdGljIEFMV0FZU19JTkxJTkUgaW50
IG1pc3NpbmdTeW1ib2xNYXJrZXIoKSB7IHJldHVybiBzdGQ6Om51bWVyaWNfbGltaXRzPGludD46
Om1heCgpOyB9CiAKIC8vIFRoZSBiaXQgdHdpZGRsaW5nIGluIHRoaXMgY2xhc3MgYXNzdW1lcyB0
aGF0IGV2ZXJ5IHJlZ2lzdGVyIGluZGV4IGlzIGEKQEAgLTYzLDExICs2NiwxMSBAQCBzdGF0aWMg
QUxXQVlTX0lOTElORSBpbnQgbWlzc2luZ1N5bWJvbE1hCiAvLyBjb3VudGVkIHBvaW50ZXIgdG8g
YSBzaGFyZWQgV2F0Y2hwb2ludFNldC4gVGh1cywgaW4tcGxhY2UgZWRpdHMgb2YgdGhlCiAvLyBX
YXRjaHBvaW50U2V0IHdpbGwgbWFuaWZlc3QgaW4gYWxsIGNvcGllcy4gSGVyZSdzIGEgcGljdHVy
ZToKIC8vCi0vLyBTeW1ib2xUYWJsZUVudHJ5IC0tPiBGYXRFbnRyeSAtLT4gVmFyaWFibGVXYXRj
aHBvaW50U2V0CisvLyBTeW1ib2xUYWJsZUVudHJ5IC0tPiBGYXRFbnRyeSAtLT4gV2F0Y2hwb2lu
dFNldAogLy8KIC8vIElmIHlvdSBtYWtlIGEgY29weSBvZiBhIFN5bWJvbFRhYmxlRW50cnksIHlv
dSB3aWxsIGhhdmU6CiAvLwotLy8gb3JpZ2luYWw6IFN5bWJvbFRhYmxlRW50cnkgLS0+IEZhdEVu
dHJ5IC0tPiBWYXJpYWJsZVdhdGNocG9pbnRTZXQKKy8vIG9yaWdpbmFsOiBTeW1ib2xUYWJsZUVu
dHJ5IC0tPiBGYXRFbnRyeSAtLT4gV2F0Y2hwb2ludFNldAogLy8gY29weTogICAgIFN5bWJvbFRh
YmxlRW50cnkgLS0+IEZhdEVudHJ5IC0tLS0tXgogCiBzdHJ1Y3QgU3ltYm9sVGFibGVFbnRyeSB7
CkBAIC0yNjAsMzIgKzI2Myw0NCBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVybiBiaXRzKCkgJiBE
b250RW51bUZsYWc7CiAgICAgfQogICAgIAotICAgIEpTVmFsdWUgaW5mZXJyZWRWYWx1ZSgpOwot
CiAgICAgdm9pZCBkaXNhYmxlV2F0Y2hpbmcoKQogICAgIHsKKyAgICAgICAgaWYgKFdhdGNocG9p
bnRTZXQqIHNldCA9IHdhdGNocG9pbnRTZXQoKSkKKyAgICAgICAgICAgIHNldC0+aW52YWxpZGF0
ZSgiRGlzYWJsaW5nIHdhdGNoaW5nIGluIHN5bWJvbCB0YWJsZSIpOwogICAgICAgICBpZiAodmFy
T2Zmc2V0KCkuaXNTY29wZSgpKQogICAgICAgICAgICAgcGFjayh2YXJPZmZzZXQoKSwgZmFsc2Us
IGlzUmVhZE9ubHkoKSwgaXNEb250RW51bSgpKTsKICAgICB9CiAgICAgCi0gICAgdm9pZCBwcmVw
YXJlVG9XYXRjaChTeW1ib2xUYWJsZSopOworICAgIHZvaWQgcHJlcGFyZVRvV2F0Y2goKTsKICAg
ICAKICAgICB2b2lkIGFkZFdhdGNocG9pbnQoV2F0Y2hwb2ludCopOwogICAgIAotICAgIFZhcmlh
YmxlV2F0Y2hwb2ludFNldCogd2F0Y2hwb2ludFNldCgpCisgICAgLy8gVGhpcyB3YXRjaHBvaW50
IHNldCBpcyBpbml0aWFsaXplZCBjbGVhciwgYW5kIGdvZXMgdGhyb3VnaCB0aGUgZm9sbG93aW5n
IHN0YXRlIHRyYW5zaXRpb25zOgorICAgIC8vIAorICAgIC8vIEZpcnN0IHdyaXRlIHRvIHRoaXMg
dmFyLCBpbiBhbnkgc2NvcGUgdGhhdCBoYXMgdGhpcyBzeW1ib2wgdGFibGU6IENsZWFyLT5Jc1dh
dGNoZWQuCisgICAgLy8KKyAgICAvLyBTZWNvbmQgd3JpdGUgdG8gdGhpcyB2YXIsIGluIGFueSBz
Y29wZSB0aGF0IGhhcyB0aGlzIHN5bWJvbCB0YWJsZTogSXNXYXRjaGVkLT5Jc0ludmFsaWRhdGVk
LgorICAgIC8vCisgICAgLy8gV2UgZW5zdXJlIHRoYXQgd2UgdG91Y2ggdGhlIHNldCAoaS5lLiB0
cmlnZ2VyIGl0cyBzdGF0ZSB0cmFuc2l0aW9uKSBhZnRlciB3ZSBkbyB0aGUgd3JpdGUuIFRoaXMK
KyAgICAvLyBtZWFucyB0aGF0IGlmIHlvdSdyZSBpbiB0aGUgY29tcGlsZXIgdGhyZWFkLCBhbmQg
eW91OgorICAgIC8vCisgICAgLy8gMSkgT2JzZXJ2ZSB0aGF0IHRoZSBzZXQgSXNXYXRjaGVkIGFu
ZCBjb21taXQgdG8gYWRkaW5nIHlvdXIgd2F0Y2hwb2ludC4KKyAgICAvLyAyKSBMb2FkIGEgdmFs
dWUgZnJvbSBhbnkgc2NvcGUgdGhhdCBoYXMgdGhpcyB3YXRjaHBvaW50IHNldC4KKyAgICAvLwor
ICAgIC8vIFRoZW4geW91IGNhbiBiZSBzdXJlIHRoYXQgdGhhdCB2YWx1ZSBpcyBlaXRoZXIgZ29p
bmcgdG8gYmUgdGhlIGNvcnJlY3QgdmFsdWUgZm9yIHRoYXQgdmFyIGZvcmV2ZXIsCisgICAgLy8g
b3IgdGhlIHdhdGNocG9pbnQgc2V0IHdpbGwgaW52YWxpZGF0ZSBhbmQgeW91J2xsIGdldCBmaXJl
ZC4KKyAgICAvLworICAgIC8vIEl0J3MgcG9zc2libGUgdG8gd3JpdGUgYSBwcm9ncmFtIHRoYXQg
Zmlyc3QgY3JlYXRlcyBtdWx0aXBsZSBzY29wZXMgd2l0aCB0aGUgc2FtZSB2YXIsIGFuZCB0aGVu
CisgICAgLy8gaW5pdGlhbGl6ZXMgdGhhdCB2YXIgaW4ganVzdCBvbmUgb2YgdGhlbS4gVGhpcyBt
ZWFucyB0aGF0IGEgY29tcGlsYXRpb24gY291bGQgY29uc3RhbnQtZm9sZCB0byBvbmUKKyAgICAv
LyBvZiB0aGUgc2NvcGVzIHRoYXQgc3RpbGwgaGFzIGFuIHVuZGVmaW5lZCB2YWx1ZSBmb3IgdGhp
cyB2YXJpYWJsZS4gVGhhdCdzIGZpbmUsIGJlY2F1c2UgYXQgdGhhdAorICAgIC8vIHBvaW50IGFu
eSB3cml0ZSB0byBhbnkgb2YgdGhlIGluc3RhbmNlcyBvZiB0aGF0IHZhcmlhYmxlIHdvdWxkIGZp
cmUgdGhlIHdhdGNocG9pbnQuCisgICAgV2F0Y2hwb2ludFNldCogd2F0Y2hwb2ludFNldCgpCiAg
ICAgewogICAgICAgICBpZiAoIWlzRmF0KCkpCiAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAg
ICAgcmV0dXJuIGZhdEVudHJ5KCktPm1fd2F0Y2hwb2ludHMuZ2V0KCk7CiAgICAgfQogICAgIAot
ICAgIEFMV0FZU19JTkxJTkUgdm9pZCBub3RpZnlXcml0ZShWTSYgdm0sIEpTVmFsdWUgdmFsdWUs
IGNvbnN0IEZpcmVEZXRhaWwmIGRldGFpbCkKLSAgICB7Ci0gICAgICAgIGlmIChMSUtFTFkoIWlz
RmF0KCkpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBub3RpZnlXcml0ZVNsb3codm0s
IHZhbHVlLCBkZXRhaWwpOwotICAgIH0KLSAgICAKIHByaXZhdGU6CiAgICAgc3RhdGljIGNvbnN0
IGludHB0cl90IFNsaW1GbGFnID0gMHgxOwogICAgIHN0YXRpYyBjb25zdCBpbnRwdHJfdCBSZWFk
T25seUZsYWcgPSAweDI7CkBAIC0zMDgsNyArMzIzLDcgQEAgcHJpdmF0ZToKICAgICAgICAgCiAg
ICAgICAgIGludHB0cl90IG1fYml0czsgLy8gYWx3YXlzIGhhcyBGYXRGbGFnIHNldCBhbmQgZXhh
Y3RseSBtYXRjaGVzIHdoYXQgdGhlIGJpdHMgd291bGQgaGF2ZSBiZWVuIGlmIHRoaXMgd2Fzbid0
IGZhdC4KICAgICAgICAgCi0gICAgICAgIFJlZlB0cjxWYXJpYWJsZVdhdGNocG9pbnRTZXQ+IG1f
d2F0Y2hwb2ludHM7CisgICAgICAgIFJlZlB0cjxXYXRjaHBvaW50U2V0PiBtX3dhdGNocG9pbnRz
OwogICAgIH07CiAgICAgCiAgICAgU3ltYm9sVGFibGVFbnRyeSYgY29weVNsb3coY29uc3QgU3lt
Ym9sVGFibGVFbnRyeSYpOwpAQCAtNjM3LDYgKzY1Miw4IEBAIHB1YmxpYzoKICAgICBTeW1ib2xU
YWJsZSogY2xvbmVTY29wZVBhcnQoVk0mKTsKIAogICAgIHZvaWQgcHJlcGFyZUZvclR5cGVQcm9m
aWxpbmcoY29uc3QgQ29uY3VycmVudEpJVExvY2tlciYpOworICAgIAorICAgIEluZmVycmVkVmFs
dWUqIHNpbmdsZXRvblNjb3BlKCkgeyByZXR1cm4gbV9zaW5nbGV0b25TY29wZS5nZXQoKTsgfQog
CiAgICAgc3RhdGljIHZvaWQgdmlzaXRDaGlsZHJlbihKU0NlbGwqLCBTbG90VmlzaXRvciYpOwog
CkBAIC02NDYsMjAgKzY2MywxMCBAQCBwcm90ZWN0ZWQ6CiAgICAgc3RhdGljIGNvbnN0IHVuc2ln
bmVkIFN0cnVjdHVyZUZsYWdzID0gU3RydWN0dXJlSXNJbW1vcnRhbCB8IEJhc2U6OlN0cnVjdHVy
ZUZsYWdzOwogCiBwcml2YXRlOgotICAgIGNsYXNzIFdhdGNocG9pbnRDbGVhbnVwIDogcHVibGlj
IFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIgewotICAgIHB1YmxpYzoKLSAgICAgICAgV2F0Y2hwb2lu
dENsZWFudXAoU3ltYm9sVGFibGUqKTsKLSAgICAgICAgdmlydHVhbCB+V2F0Y2hwb2ludENsZWFu
dXAoKTsKLSAgICAgICAgCi0gICAgcHJvdGVjdGVkOgotICAgICAgICB2aXJ0dWFsIHZvaWQgZmlu
YWxpemVVbmNvbmRpdGlvbmFsbHkoKSBvdmVycmlkZTsKLQotICAgIHByaXZhdGU6Ci0gICAgICAg
IFN5bWJvbFRhYmxlKiBtX3N5bWJvbFRhYmxlOwotICAgIH07Ci0gICAgCiAgICAgSlNfRVhQT1JU
X1BSSVZBVEUgU3ltYm9sVGFibGUoVk0mKTsKICAgICB+U3ltYm9sVGFibGUoKTsKKyAgICAKKyAg
ICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJik7CiAKICAgICBNYXAg
bV9tYXA7CiAgICAgU2NvcGVPZmZzZXQgbV9tYXhTY29wZU9mZnNldDsKQEAgLTY3NCwxMyArNjgx
LDExIEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX3VzZXNOb25TdHJpY3RFdmFsOwogICAgIAogICAg
IFdyaXRlQmFycmllcjxTY29wZWRBcmd1bWVudHNUYWJsZT4gbV9hcmd1bWVudHM7CisgICAgV3Jp
dGVCYXJyaWVyPEluZmVycmVkVmFsdWU+IG1fc2luZ2xldG9uU2NvcGU7CiAgICAgCi0gICAgc3Rk
Ojp1bmlxdWVfcHRyPFdhdGNocG9pbnRDbGVhbnVwPiBtX3dhdGNocG9pbnRDbGVhbnVwOwogICAg
IHN0ZDo6dW5pcXVlX3B0cjxMb2NhbFRvRW50cnlWZWM+IG1fbG9jYWxUb0VudHJ5OwogCiBwdWJs
aWM6Ci0gICAgSW5saW5lV2F0Y2hwb2ludFNldCBtX2Z1bmN0aW9uRW50ZXJlZE9uY2U7Ci0gICAg
CiAgICAgbXV0YWJsZSBDb25jdXJyZW50SklUTG9jayBtX2xvY2s7CiB9OwogCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlUHJvZmlsZXIuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVQcm9maWxlci5jcHAJKHJldmlzaW9u
IDE4MjQ5OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1R5cGVQcm9maWxlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgIkluc3BlY3Rv
clByb3RvY29sT2JqZWN0cy5oIgogI2luY2x1ZGUgIlR5cGVMb2NhdGlvbi5oIgorI2luY2x1ZGUg
PHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHJldmlzaW9uIDE4MjQ5OCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1ZNLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjM3LDYg
KzIzNyw3IEBAIFZNOjpWTShWTVR5cGUgdm1UeXBlLCBIZWFwVHlwZSBoZWFwVHlwZSkKICAgICB1
bmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrU3RydWN0dXJlLnNldCgqdGhpcywgVW5saW5rZWRGdW5j
dGlvbkNvZGVCbG9jazo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwogICAg
IHByb3BlcnR5VGFibGVTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBQcm9wZXJ0eVRhYmxlOjpjcmVhdGVT
dHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CiAgICAgd2Vha01hcERhdGFTdHJ1Y3R1cmUu
c2V0KCp0aGlzLCBXZWFrTWFwRGF0YTo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwo
KSkpOworICAgIGluZmVycmVkVmFsdWVTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBJbmZlcnJlZFZhbHVl
OjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CiAjaWYgRU5BQkxFKFBST01J
U0VTKQogICAgIHByb21pc2VEZWZlcnJlZFN0cnVjdHVyZS5zZXQoKnRoaXMsIEpTUHJvbWlzZURl
ZmVycmVkOjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CiAgICAgcHJvbWlz
ZVJlYWN0aW9uU3RydWN0dXJlLnNldCgqdGhpcywgSlNQcm9taXNlUmVhY3Rpb246OmNyZWF0ZVN0
cnVjdHVyZSgqdGhpcywgMCwganNOdWxsKCkpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL1ZNLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVk0uaAkocmV2aXNpb24gMTgyNDk4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvVk0uaAkod29ya2luZyBjb3B5KQpAQCAtMjcwLDYgKzI3MCw3IEBAIHB1YmxpYzoKICAgICBT
dHJvbmc8U3RydWN0dXJlPiB1bmxpbmtlZEZ1bmN0aW9uQ29kZUJsb2NrU3RydWN0dXJlOwogICAg
IFN0cm9uZzxTdHJ1Y3R1cmU+IHByb3BlcnR5VGFibGVTdHJ1Y3R1cmU7CiAgICAgU3Ryb25nPFN0
cnVjdHVyZT4gd2Vha01hcERhdGFTdHJ1Y3R1cmU7CisgICAgU3Ryb25nPFN0cnVjdHVyZT4gaW5m
ZXJyZWRWYWx1ZVN0cnVjdHVyZTsKICNpZiBFTkFCTEUoUFJPTUlTRVMpCiAgICAgU3Ryb25nPFN0
cnVjdHVyZT4gcHJvbWlzZURlZmVycmVkU3RydWN0dXJlOwogICAgIFN0cm9uZzxTdHJ1Y3R1cmU+
IHByb21pc2VSZWFjdGlvblN0cnVjdHVyZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90
ZXN0cy9zdHJlc3MvaW5mZXItdW5pbml0aWFsaXplZC1jbG9zdXJlLXZhci5qcwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2luZmVyLXVuaW5pdGlhbGl6
ZWQtY2xvc3VyZS12YXIuanMJKHJldmlzaW9uIDApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
dGVzdHMvc3RyZXNzL2luZmVyLXVuaW5pdGlhbGl6ZWQtY2xvc3VyZS12YXIuanMJKHdvcmtpbmcg
Y29weSkKQEAgLTAsMCArMSwyNiBAQAorZnVuY3Rpb24gZm9vKHApIHsKKyAgICB2YXIgeDsKKyAg
ICAKKyAgICBub0lubGluZShmKTsKKyAgICAKKyAgICBpZiAocCkgeworICAgICAgICB2YXIgZiA9
IGZ1bmN0aW9uKCkgeyByZXR1cm4geDsgfQorICAgICAgICAKKyAgICAgICAgZm9vKGZhbHNlKTsK
KyAgICAgICAgCisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgeworICAg
ICAgICAgICAgdmFyIHJlc3VsdCA9IGYoKTsKKyAgICAgICAgICAgIGlmIChyZXN1bHQgIT09IHZv
aWQgMCkKKyAgICAgICAgICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQgKDEpOiAiICsg
cmVzdWx0OworICAgICAgICB9CisgICAgICAgIAorICAgICAgICB4ID0gNDM7CisgICAgICAgIAor
ICAgICAgICB2YXIgcmVzdWx0ID0gZigpOworICAgICAgICBpZiAocmVzdWx0ICE9IDQzKQorICAg
ICAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0ICgyKTogIiArIHJlc3VsdDsKKyAgICB9
IGVsc2UKKyAgICAgICAgeCA9IDQyOworfQorCitmb28odHJ1ZSk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3NpbmdsZXRvbi1zY29wZS10aGVuLW92ZXJ3cml0ZS5q
cwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3Npbmds
ZXRvbi1zY29wZS10aGVuLW92ZXJ3cml0ZS5qcwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS90ZXN0cy9zdHJlc3Mvc2luZ2xldG9uLXNjb3BlLXRoZW4tb3ZlcndyaXRlLmpz
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjAgQEAKK2Z1bmN0aW9uIGZvbyhhKSB7CisgICAg
dmFyIHggPSBhICsgMTsKKyAgICB2YXIgZiA9IGZ1bmN0aW9uKGEpIHsKKyAgICAgICAgcmV0dXJu
IHggKyBhOworICAgIH07CisgICAgbm9JbmxpbmUoZik7CisgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCAxMDAwMDsgKytpKSB7CisgICAgICAgIHZhciByZXN1bHQgPSBmKGkpOworICAgICAgICBpZiAo
cmVzdWx0ICE9IGEgKyAxICsgaSkKKyAgICAgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3Vs
dDogIiArIHJlc3VsdDsKKyAgICB9CisgICAgeCA9IDk5OTsKKyAgICB2YXIgcmVzdWx0ID0gZigx
KTsKKyAgICBpZiAocmVzdWx0ICE9IDk5OSArIDEpCisgICAgICAgIHRocm93ICJFcnJvcjogYmFk
IHJlc3VsdDogIiArIHJlc3VsdDsKK30KKworbm9JbmxpbmUoZm9vKTsKK2ZvciAodmFyIGkgPSAw
OyBpIDwgMzsgKytpKQorICAgIGZvbyg0MiArIGkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3Rlc3RzL3N0cmVzcy9zaW5nbGV0b24tc2NvcGUtdGhlbi1yZWFsbG9jLWFuZC1vdmVyd3Jp
dGUuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9z
aW5nbGV0b24tc2NvcGUtdGhlbi1yZWFsbG9jLWFuZC1vdmVyd3JpdGUuanMJKHJldmlzaW9uIDAp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3NpbmdsZXRvbi1zY29wZS10
aGVuLXJlYWxsb2MtYW5kLW92ZXJ3cml0ZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIw
IEBACitmdW5jdGlvbiBmb28oYSkgeworICAgIHZhciB4ID0gYSArIDE7CisgICAgcmV0dXJuIGZ1
bmN0aW9uKGEpIHsKKyAgICAgICAgcmV0dXJuIHggKyBhOworICAgIH07Cit9CisKK3ZhciBmID0g
Zm9vKDQyKTsKK25vSW5saW5lKGYpOworCitmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwOyArK2kp
IHsKKyAgICB2YXIgcmVzdWx0ID0gZihpKTsKKyAgICBpZiAocmVzdWx0ICE9IDQyICsgMSArIGkp
CisgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdDogIiArIHJlc3VsdDsKK30KKwordmFy
IGYgPSBmb28oNDMpOwordmFyIHJlc3VsdCA9IGYoMSk7CitpZiAocmVzdWx0ICE9IDQzICsgMSAr
IDEpCisgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0OiAiICsgcmVzdWx0OwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9zaW5nbGV0b24tc2NvcGUtdGhlbi1yZWFs
bG9jLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3Mv
c2luZ2xldG9uLXNjb3BlLXRoZW4tcmVhbGxvYy5qcwkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3Mvc2luZ2xldG9uLXNjb3BlLXRoZW4tcmVhbGxvYy5q
cwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIwIEBACitmdW5jdGlvbiBmb28oYSkgeworICAg
IHZhciB4ID0gYSArIDE7CisgICAgcmV0dXJuIGZ1bmN0aW9uKGEpIHsKKyAgICAgICAgcmV0dXJu
IHggKz0gYTsKKyAgICB9OworfQorCit2YXIgZiA9IGZvbyg0Mik7Citub0lubGluZShmKTsKKwor
Zm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwMDsgKytpKSB7CisgICAgdmFyIHJlc3VsdCA9IGYoMSk7
CisgICAgaWYgKHJlc3VsdCAhPSA0MiArIDEgKyBpICsgMSkKKyAgICAgICAgdGhyb3cgIkVycm9y
OiBiYWQgcmVzdWx0OiAiICsgcmVzdWx0OworfQorCit2YXIgZiA9IGZvbyg0Myk7Cit2YXIgcmVz
dWx0ID0gZigxKTsKK2lmIChyZXN1bHQgIT0gNDMgKyAxICsgMSkKKyAgICB0aHJvdyAiRXJyb3I6
IGJhZCByZXN1bHQ6ICIgKyByZXN1bHQ7CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxODI0OTgpCisrKyBM
YXlvdXRUZXN0cy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyMCBAQAorMjAx
NS0wNC0wNyAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAgIEpTQyBz
aG91bGQgZGV0ZWN0IHNpbmdsZXRvbiBmdW5jdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MzIzMgorCisgICAgICAgIFJldmlld2VkIGJ5IE1p
Y2hhZWwgU2Fib2ZmLgorCisgICAgICAgICoganMvcmVncmVzcy9jcmVhdGUtbG90cy1vZi1mdW5j
dGlvbnMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL2NyZWF0ZS1s
b3RzLW9mLWZ1bmN0aW9ucy5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL25vLWlu
bGluZS1jb25zdHJ1Y3Rvci1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jl
c3Mvbm8taW5saW5lLWNvbnN0cnVjdG9yLmh0bWw6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jl
c3Mvc2NyaXB0LXRlc3RzL2NyZWF0ZS1sb3RzLW9mLWZ1bmN0aW9ucy5qczogQWRkZWQuCisgICAg
ICAgICoganMvcmVncmVzcy9zY3JpcHQtdGVzdHMvbm8taW5saW5lLWNvbnN0cnVjdG9yLmpzOiBB
ZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9zaW5nbGV0b24tc2NvcGUu
anM6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3Mvc2luZ2xldG9uLXNjb3BlLWV4cGVjdGVk
LnR4dDogQWRkZWQuCisgICAgICAgICoganMvcmVncmVzcy9zaW5nbGV0b24tc2NvcGUuaHRtbDog
QWRkZWQuCisKIDIwMTUtMDQtMDcgIE1hdHRoZXcgTWlybWFuICA8bW1pcm1hbkBhcHBsZS5jb20+
CiAKICAgICAgICAgU291cmNlIGFuZCBzdGFjayBpbmZvcm1hdGlvbiBzaG91bGQgZ2V0IGFwcGVu
ZGVkIG9ubHkgdG8gbmF0aXZlIGVycm9ycwpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9j
cmVhdGUtbG90cy1vZi1mdW5jdGlvbnMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91
dFRlc3RzL2pzL3JlZ3Jlc3MvY3JlYXRlLWxvdHMtb2YtZnVuY3Rpb25zLWV4cGVjdGVkLnR4dAko
cmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvY3JlYXRlLWxvdHMtb2YtZnVu
Y3Rpb25zLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwIEBACitKU1Jl
Z3Jlc3MvY3JlYXRlLWxvdHMtb2YtZnVuY3Rpb25zCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNl
ZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRF
Ii4KKworCitQQVNTIG5vIGV4Y2VwdGlvbiB0aHJvd24KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2Vk
IGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNz
L2NyZWF0ZS1sb3RzLW9mLWZ1bmN0aW9ucy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2pzL3JlZ3Jlc3MvY3JlYXRlLWxvdHMtb2YtZnVuY3Rpb25zLmh0bWwJKHJldmlzaW9uIDApCisr
KyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2NyZWF0ZS1sb3RzLW9mLWZ1bmN0aW9ucy5odG1sCSh3
b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAiLS8v
SUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4v
cmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5PgorPHNj
cmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNzLXByZS5qcyI+PC9zY3JpcHQ+Cis8c2Ny
aXB0IHNyYz0ic2NyaXB0LXRlc3RzL2NyZWF0ZS1sb3RzLW9mLWZ1bmN0aW9ucy5qcyI+PC9zY3Jp
cHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3JlZ3Jlc3MtcG9zdC5qcyI+PC9zY3Jp
cHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9zY3Jp
cHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL25vLWlu
bGluZS1jb25zdHJ1Y3Rvci1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMv
anMvcmVncmVzcy9uby1pbmxpbmUtY29uc3RydWN0b3ItZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAw
KQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9uby1pbmxpbmUtY29uc3RydWN0b3ItZXhwZWN0
ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAgQEAKK0pTUmVncmVzcy9uby1pbmxp
bmUtY29uc3RydWN0b3IKKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQ
QVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1Mgbm8g
ZXhjZXB0aW9uIHRocm93bgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNU
IENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvbm8taW5saW5lLWNvbnN0
cnVjdG9yLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9uby1pbmxp
bmUtY29uc3RydWN0b3IuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jl
c3Mvbm8taW5saW5lLWNvbnN0cnVjdG9yLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwx
MiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgorPGh0
bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUuanMi
Pjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2Vz
L3JlZ3Jlc3MtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMvbm8t
aW5saW5lLWNvbnN0cnVjdG9yLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNv
dXJjZXMvcmVncmVzcy1wb3N0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNv
dXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5kZXg6
IExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2luZ2xldG9uLXNjb3BlLWV4cGVjdGVkLnR4dAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NpbmdsZXRvbi1zY29wZS1leHBlY3Rl
ZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NpbmdsZXRvbi1z
Y29wZS1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMCBAQAorSlNSZWdy
ZXNzL3NpbmdsZXRvbi1zY29wZQorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMg
b2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFT
UyBubyBleGNlcHRpb24gdGhyb3duCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisK
K1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zaW5nbGV0b24t
c2NvcGUuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NpbmdsZXRv
bi1zY29wZS5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zaW5n
bGV0b24tc2NvcGUuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyIEBACis8IURPQ1RZ
UEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFkPgor
PHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+Cis8
L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcmVncmVzcy1wcmUu
anMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy9zaW5nbGV0b24tc2NvcGUu
anMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNzLXBvc3Qu
anMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBvc3Qu
anMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVn
cmVzcy9zY3JpcHQtdGVzdHMvY3JlYXRlLWxvdHMtb2YtZnVuY3Rpb25zLmpzCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2NyZWF0ZS1sb3RzLW9mLWZ1
bmN0aW9ucy5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0
LXRlc3RzL2NyZWF0ZS1sb3RzLW9mLWZ1bmN0aW9ucy5qcwkod29ya2luZyBjb3B5KQpAQCAtMCww
ICsxLDEyIEBACitmdW5jdGlvbiBmb28oKSB7CisgICAgdmFyIHJlc3VsdCA9IDA7CisgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCAxMDA7ICsraSkKKyAgICAgICAgcmVzdWx0ICs9IChmdW5jdGlvbigp
IHsgcmV0dXJuIGkgfSkoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitmb3IgKHZhciBpID0g
MDsgaSA8IDEwMDAwOyArK2kpIHsKKyAgICB2YXIgcmVzdWx0ID0gZm9vKCk7CisgICAgaWYgKHJl
c3VsdCAhPSA0OTUwKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQ6ICIgKyByZXN1
bHQ7Cit9CkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9uby1pbmxp
bmUtY29uc3RydWN0b3IuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9z
Y3JpcHQtdGVzdHMvbm8taW5saW5lLWNvbnN0cnVjdG9yLmpzCShyZXZpc2lvbiAwKQorKysgTGF5
b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvbm8taW5saW5lLWNvbnN0cnVjdG9yLmpz
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTMgQEAKK2Z1bmN0aW9uIEZvbygpIHsKKyAgICB2
YXIgbyA9IHtmOntmOntmOntmOjQyfX19fTsKKyAgICB0aGlzLmYgPSA0MjsKK30KKworbm9Jbmxp
bmUoRm9vKTsKKworZm9yICh2YXIgaSA9IDA7IGkgPCAzMDAwMDAwOyArK2kpIHsKKyAgICB2YXIg
cmVzdWx0ID0gbmV3IEZvbygpOworICAgIGlmIChyZXN1bHQuZiAhPSA0MikKKyAgICAgICAgdGhy
b3cgIkVycm9yOiBiYWQgcmVzdWx0OiAiICsgcmVzdWx0LmY7Cit9CisKSW5kZXg6IExheW91dFRl
c3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL3NpbmdsZXRvbi1zY29wZS5qcwo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9zaW5nbGV0b24tc2NvcGUu
anMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9z
aW5nbGV0b24tc2NvcGUuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNiBAQAorZnVuY3Rp
b24gZm9vKCkgeworICAgIHZhciB4ID0gNDI7CisgICAgdmFyIHkgPSA0MzsKKyAgICByZXR1cm4g
ZnVuY3Rpb24oeikgeworICAgICAgICB2YXIgcmVzdWx0ID0geCArIHk7CisgICAgICAgIHggKz0g
ejsKKyAgICAgICAgeSArPSB6OworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KK30KKwor
dmFyIGYgPSBmb28oKTsKK25vSW5saW5lKGYpOworCitmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAw
MDAwOyArK2kpCisgICAgZigxKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>250407</attachid>
            <date>2015-04-08 20:43:12 -0700</date>
            <delta_ts>2015-04-09 13:22:06 -0700</delta_ts>
            <desc>fix style</desc>
            <filename>blah.patch</filename>
            <type>text/plain</type>
            <size>169200</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTgyNTgyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI1NyBA
QAorMjAxNS0wNC0wOCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgorCisgICAgICAg
IEpTQyBzaG91bGQgZGV0ZWN0IHNpbmdsZXRvbiBmdW5jdGlvbnMKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE0MzIzMgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEhKS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgc3RhcnRlZCBvdXQg
YXMgYW4gYXR0ZW1wdCB0byBtYWtlIGNvbnN0cnVjdG9ycyBmYXN0ZXIgYnkgZGV0ZWN0aW5nIHdo
ZW4gYSBjb25zdHJ1Y3RvciBpcyBhCisgICAgICAgIHNpbmdsZXRvbi4gVGhlIGlkZWEgaXMgdGhh
dCBlYWNoIEZ1bmN0aW9uRXhlY3V0YWJsZSBoYXMgYSBWYXJpYWJsZVdhdGNocG9pbnRTZXQgLSBh
IHdhdGNocG9pbnQKKyAgICAgICAgYWxvbmcgd2l0aCBhbiBpbmZlcnJlZCB2YWx1ZSAtIHRoYXQg
ZGV0ZWN0cyBpZiBvbmx5IG9uZSBKU0Z1bmN0aW9uIGhhcyBiZWVuIGFsbG9jYXRlZCBmb3IgdGhh
dAorICAgICAgICBleGVjdXRhYmxlLCBhbmQgaWYgc28sIHdoYXQgdGhhdCBKU0Z1bmN0aW9uIGlz
LiBUaGVuLCBpbnNpZGUgdGhlIGNvZGUgZm9yIHRoZSBGdW5jdGlvbkV4ZWN1dGFibGUsCisgICAg
ICAgIGlmIHRoZSB3YXRjaHBvaW50IHNldCBoYXMgYW4gaW5mZXJyZWQgdmFsdWUgKGkuZS4gaXQn
cyBiZWVuIGluaXRpYWxpemVkIGFuZCBpdCBpcyBzdGlsbCB2YWxpZCksCisgICAgICAgIHdlIGNh
biBjb25zdGFudC1mb2xkIEdldENhbGxlZS4KKyAgICAgICAgCisgICAgICAgIFVuZm9ydHVuYXRl
bHksIGNvbnN0cnVjdG9ycyBkb24ndCB1c2UgR2V0Q2FsbGVlIGFueW1vcmUsIHNvIHRoYXQgZGlk
bid0IHBhbiBvdXQuIEJ1dCBpbiB0aGUKKyAgICAgICAgcHJvY2VzcyBJIHJlYWxpemVkIGEgYnVu
Y2ggb2YgdGhpbmdzOgorICAgICAgICAKKyAgICAgICAgLSBUaGlzIGFsbG93cyB1cyB0byBjb21w
bGV0ZWx5IGVsaW1pbmF0ZSB0aGUgR2V0Q2FsbGVlL0dldFNjb3BlIHNlcXVlbmNlIHRoYXQgd2Ug
c3RpbGwgc29tZXRpbWVzCisgICAgICAgICAgaGFkIGV2ZW4gaW4gY29kZSB3aGVyZSBvdXIgc2lu
Z2xldG9uLWNsb3N1cmUgZGV0ZWN0aW9uIHdvcmtlZC4gVGhhdCdzIGJlY2F1c2Ugc2luZ2xldG9u
LWNsb3N1cmUKKyAgICAgICAgICBpbmZlcmVuY2Ugd29ya2VkIGF0IHRoZSBvcF9yZXNvbHZlX3Nj
b3BlLCBhbmQgdGhhdCBvcF9yZXNvbHZlX3Njb3BlIHN0aWxsIG5lZWRlZCB0byBrZWVwIGFsaXZl
CisgICAgICAgICAgdGhlIGluY29taW5nIHNjb3BlIGluIGNhc2Ugd2UgT1NSIGV4aXQuIEJ1dCBi
eSBjb25zdGFudC1mb2xkaW5nIEdldENhbGxlZSwgdGhhdCBzZXF1ZW5jZQorICAgICAgICAgIGRp
c2FwcGVhcnMuIE9TUiBleGl0IGNhbiByZW1hdGVyaWFsaXplIHRoZSBjYWxsZWUgb3IgdGhlIHNj
b3BlIGJ5IGp1c3Qga25vd2luZyB0aGVpciBjb25zdGFudAorICAgICAgICAgIHZhbHVlcy4KKyAg
ICAgICAgICAKKyAgICAgICAgLSBTaW5nbGV0b24gZGV0ZWN0aW9uIHNob3VsZCBiZSBhIHJldXNh
YmxlIHRoaW5nLiBTbywgSSBnb3QgcmlkIG9mIFZhcmlhYmxlV2F0Y2hwb2ludFNldCBhbmQKKyAg
ICAgICAgICBjcmVhdGVkIEluZmVycmVkVmFsdWUuIEluZmVycmVkVmFsdWUgaXMgYSBjZWxsLCBz
byBpdCBjYW4gaGFuZGxlIGl0cyBvd24gR0MgbWFnaWMuCisgICAgICAgICAgRnVuY3Rpb25FeGVj
dXRhYmxlIHVzZXMgYW4gSW5mZXJyZWRWYWx1ZSB0byB0ZWxsIHlvdSBhYm91dCBzaW5nbGV0b24g
SlNGdW5jdGlvbnMuCisgICAgICAgIAorICAgICAgICAtIFRoZSBvbGQgc2luZ2xldG9uLXNjb3Bl
IGRldGVjdGlvbiBpbiBvcF9yZXNvbHZlX3Njb3BlIGlzIGJldHRlciBhYnN0cmFjdGVkIGFzIGEg
U3ltYm9sVGFibGUKKyAgICAgICAgICBkZXRlY3RpbmcgYSBzaW5nbGV0b24gSlNTeW1ib2xUYWJs
ZU9iamVjdC4gU28sIFN5bWJvbFRhYmxlIHVzZXMgYW4gSW5mZXJyZWRWYWx1ZSB0byB0ZWxsIHlv
dQorICAgICAgICAgIGFib3V0IHNpbmdsZXRvbiBKU1N5bWJvbFRhYmxlT2JqZWN0cy4gSXQncyBj
dXJpb3VzIHRoYXQgd2Ugd2FudCB0byBoYXZlIHNpbmdsZXRvbiBkZXRlY3Rpb24gaW4KKyAgICAg
ICAgICBTeW1ib2xUYWJsZSBpZiB3ZSBhbHJlYWR5IGhhdmUgaXQgaW4gRnVuY3Rpb25FeGVjdXRh
YmxlLiBUaGlzIGNvbWVzIGludG8gcGxheSBpbiB0d28gd2F5cy4KKyAgICAgICAgICBGaXJzdCwg
aXQgbWVhbnMgdGhhdCB0aGUgREZHIGNhbiByZWFsaXplIHNvb25lciB0aGF0IGEgcmVzb2x2ZV9z
Y29wZSByZXNvbHZlcyB0byBhIGNvbnN0YW50CisgICAgICAgICAgc2NvcGUuIFRocyBzYXZlcyBj
b21waWxlIHRpbWVzIGFuZCBpdCBhbGxvd3MgcHJlZGljdGlvbiBwcm9wYWdhdGlvbiB0byBiZW5l
Zml0IGZyb20gdGhlCisgICAgICAgICAgY29uc3RhbnQgZm9sZGluZy4gU2Vjb25kLCBpdCBtZWFu
cyB0aGF0IHdlIHdpbGwgZGV0ZWN0IGEgc2luZ2x0b24gc2NvcGUgZXZlbiBpZiBpdCBpcworICAg
ICAgICAgIHJlZmVyZW5jZWQgZnJvbSBhIG5vbi1zaW5nbGV0b24gc2NvcGUgdGhhdCBpcyBuZWFy
ZXIgdG8gdXMgaW4gdGhlIHNjb3BlIGNoYWluLiBUaGlzIHJlZmFjdG9yaW5nCisgICAgICAgICAg
YWxsb3dzIHVzIHRvIGVsaW1pbmF0ZSB0aGUgZnVuY3Rpb24gcmVlbnRyeSB3YXRjaHBvaW50Lgor
ICAgICAgICAKKyAgICAgICAgLSBUaGlzIGFsbG93cyB1cyB0byB1c2UgYSBub3JtYWwgV2F0Y2hw
b2ludFNldCwgaW5zdGVhZCBvZiBhIFZhcmlhYmxlV2F0Y2hwb2ludFNldCwgZm9yIGluZmVycmlu
ZworICAgICAgICAgIGNvbnN0YW50IHZhbHVlcyBpbiBzY29wZXMuIFByZXZpb3VzbHkgd2hlbiB0
aGUgREZHIGluZmVycmVkIHRoYXQgYSBjbG9zdXJlIHZhcmlhYmxlIHdhcworICAgICAgICAgIGNv
bnN0YW50LCBpdCB3b3VsZG4ndCBrbm93IHdoaWNoIGNsb3N1cmUgdGhhdCB2YXJpYWJsZSB3YXMg
aW4gYW5kIHNvIGl0IGNvdWxkbid0IGp1c3QgbG9hZCB0aGF0CisgICAgICAgICAgdmFsdWUuIEJ1
dCBub3cgd2UgYXJlIGZpcnN0IGluZmVycmluZyB0aGF0IHRoZSBmdW5jdGlvbiBpcyBhIHNpbmds
ZXRvbiwgd2hpY2ggbWVhbnMgdGhhdCB3ZQorICAgICAgICAgIGtub3cgZXhhY3RseSB3aGF0IHNj
b3BlIGl0IHBvaW50cyB0bywgYW5kIHdlIGNhbiBsb2FkIHRoZSB2YWx1ZSBmcm9tIHRoZSBzY29w
ZS4gVXNpbmcgYQorICAgICAgICAgIFdhdGNocG9pbnRTZXQgaW5zdGVhZCBvZiBhIFZhcmlhYmxl
V2F0Y2hwb2ludFNldCBzYXZlcyBzb21lIG1lbW9yeSBhbmQgc2ltcGxpZmllcyBhIGJ1bmNoIG9m
CisgICAgICAgICAgY29kZS4gVGhpcyBhbHNvIG1lYW5zIHRoYXQgbm93LCB0aGUgb25seSB1c2Vy
IG9mIFZhcmlhYmxlV2F0Y2hwb2ludFNldCBpcyBGdW5jdGlvbkV4ZWN1dGFibGUuCisgICAgICAg
ICAgSSd2ZSB0d2Vha2VkIHRoZSBjb2RlIG9mIFZhcmlhYmxlV2F0Y2hwb2ludFNldCB0byByZWR1
Y2UgaXRzIHBvd2VyIHRvIGp1c3QgYmUgd2hhdAorICAgICAgICAgIEZ1bmN0aW9uRXhlY3V0YWJs
ZSB3YW50cy4KKyAgICAgICAgCisgICAgICAgIFRoaXMgYWxzbyBoYXMgdGhlIGVmZmVjdCBvZiBz
aW1wbGlmeWluZyB0aGUgaW1wbGVtZW50YXRpb24gb2YgYmxvY2sgc2NvcGluZy4gUHJpb3IgdG8g
dGhpcworICAgICAgICBjaGFuZ2UsIGJsb2NrIHNjb3Bpbmcgd291bGQgaGFkIGhhZCB0byBoYXZl
IHNvbWUgc3RvcnkgZm9yIHRoZSBmdW5jdGlvbiByZWVudHJ5IHdhdGNocG9pbnQgb24gYW55Cisg
ICAgICAgIG5lc3RlZCBzeW1ib2wgdGFibGUuIFRoYXQncyB0b3RhbGx5IHdlaXJkIHRvIHRoaW5r
IGFib3V0OyBpdCdzIG5vdCByZWFsbHkgYSBmdW5jdGlvbiByZWVudHJ5IGJ1dAorICAgICAgICBh
IHNjb3BlIHJlZW50cnkuIE5vdyB3ZSBkb24ndCBoYXZlIHRvIHRoaW5rIGFib3V0IHRoaXMuIENv
bnN0YW50IGluZmVyZW5jZSBvbiBuZXN0ZWQgc2NvcGVzIHdpbGwKKyAgICAgICAgImp1c3Qgd29y
ayI6IGlmIHdlIHByb3ZlIHRoYXQgd2Uga25vdyB0aGUgY29uc3RhbnQgdmFsdWUgb2YgdGhlIHNj
b3BlIHRoZW4gdGhlIG1hY2hpbmVyeSBraWNrcworICAgICAgICBpbiwgb3RoZXJ3aXNlIGl0IGRv
ZXNuJ3QuCisgICAgICAgIAorICAgICAgICBUaGlzIGlzIGEgc21hbGwgT2N0YW5lIGFuZCBBc21C
ZW5jaCBzcGVlZC11cC4gQXNtQmVuY2ggc2VlcyAxJSB3aGlsZSBPY3RhbmUgc2VlcyBzdWItMSUu
CisKKyAgICAgICAgKiBDTWFrZUxpc3RzLnR4dDoKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS52
Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2o6CisgICAgICAgICogSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvajoKKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZUxp
c3QuanNvbjoKKyAgICAgICAgKiBieXRlY29kZS9CeXRlY29kZVVzZURlZi5oOgorICAgICAgICAo
SlNDOjpjb21wdXRlVXNlc0ZvckJ5dGVjb2RlT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6Y29tcHV0
ZURlZnNGb3JCeXRlY29kZU9mZnNldCk6CisgICAgICAgICogYnl0ZWNvZGUvQ29kZUJsb2NrLmNw
cDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpkdW1wQnl0ZWNvZGUpOgorICAgICAgICAoSlND
OjpDb2RlQmxvY2s6OkNvZGVCbG9jayk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6ZmluYWxp
emVVbmNvbmRpdGlvbmFsbHkpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnZhbHVlUHJvZmls
ZUZvckJ5dGVjb2RlT2Zmc2V0KToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suaDoKKyAg
ICAgICAgKEpTQzo6Q29kZUJsb2NrOjp2YWx1ZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNldCk6IERl
bGV0ZWQuCisgICAgICAgICogYnl0ZWNvZGUvQ29kZU9yaWdpbi5jcHA6CisgICAgICAgIChKU0M6
OklubGluZUNhbGxGcmFtZTo6Y2FsbGVlQ29uc3RhbnQpOgorICAgICAgICAoSlNDOjpJbmxpbmVD
YWxsRnJhbWU6OnZpc2l0QWdncmVnYXRlKToKKyAgICAgICAgKiBieXRlY29kZS9Db2RlT3JpZ2lu
Lmg6CisgICAgICAgIChKU0M6OklubGluZUNhbGxGcmFtZTo6Y2FsbGVlQ29uc3RhbnQpOiBEZWxl
dGVkLgorICAgICAgICAoSlNDOjpJbmxpbmVDYWxsRnJhbWU6OnZpc2l0QWdncmVnYXRlKTogRGVs
ZXRlZC4KKyAgICAgICAgKiBieXRlY29kZS9JbnN0cnVjdGlvbi5oOgorICAgICAgICAqIGJ5dGVj
b2RlL1ZhcmlhYmxlV2F0Y2hwb2ludFNldC5jcHA6IFJlbW92ZWQuCisgICAgICAgICogYnl0ZWNv
ZGUvVmFyaWFibGVXYXRjaHBvaW50U2V0Lmg6IFJlbW92ZWQuCisgICAgICAgICogYnl0ZWNvZGUv
VmFyaWFibGVXYXRjaHBvaW50U2V0SW5saW5lcy5oOiBSZW1vdmVkLgorICAgICAgICAqIGJ5dGVj
b2RlL1ZhcmlhYmxlV3JpdGVGaXJlRGV0YWlsLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OlZh
cmlhYmxlV3JpdGVGaXJlRGV0YWlsOjpkdW1wKToKKyAgICAgICAgKEpTQzo6VmFyaWFibGVXcml0
ZUZpcmVEZXRhaWw6OnRvdWNoKToKKyAgICAgICAgKiBieXRlY29kZS9WYXJpYWJsZVdyaXRlRmly
ZURldGFpbC5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6VmFyaWFibGVXcml0ZUZpcmVEZXRhaWw6
OlZhcmlhYmxlV3JpdGVGaXJlRGV0YWlsKToKKyAgICAgICAgKiBieXRlY29kZS9XYXRjaHBvaW50
Lmg6CisgICAgICAgIChKU0M6OldhdGNocG9pbnRTZXQ6OnN0YXRlT25NYWluVGhyZWFkKToKKyAg
ICAgICAgKEpTQzo6V2F0Y2hwb2ludFNldDo6c3RhcnRXYXRjaGluZyk6CisgICAgICAgIChKU0M6
OldhdGNocG9pbnRTZXQ6OmZpcmVBbGwpOgorICAgICAgICAoSlNDOjpXYXRjaHBvaW50U2V0Ojp0
b3VjaCk6CisgICAgICAgIChKU0M6OldhdGNocG9pbnRTZXQ6OmludmFsaWRhdGUpOgorICAgICAg
ICAoSlNDOjpJbmxpbmVXYXRjaHBvaW50U2V0OjpzdGF0ZU9uTWFpblRocmVhZCk6CisgICAgICAg
IChKU0M6OklubGluZVdhdGNocG9pbnRTZXQ6OnN0YXRlKToKKyAgICAgICAgKEpTQzo6SW5saW5l
V2F0Y2hwb2ludFNldDo6aGFzQmVlbkludmFsaWRhdGVkKToKKyAgICAgICAgKEpTQzo6SW5saW5l
V2F0Y2hwb2ludFNldDo6aW52YWxpZGF0ZSk6CisgICAgICAgIChKU0M6OklubGluZVdhdGNocG9p
bnRTZXQ6OnRvdWNoKToKKyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3Iu
Y3BwOgorICAgICAgICAoSlNDOjpCeXRlY29kZUdlbmVyYXRvcjo6Qnl0ZWNvZGVHZW5lcmF0b3Ip
OgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdEludGVycHJldGVySW5saW5lcy5oOgorICAgICAg
ICAoSlNDOjpERkc6OkFic3RyYWN0SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5cGU+OjpleGVj
dXRlRWZmZWN0cyk6CisgICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcDoKKyAgICAg
ICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6Z2V0KToKKyAgICAgICAgKEpTQzo6REZHOjpC
eXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayk6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQ
YXJzZXI6OmdldFNjb3BlKTogRGVsZXRlZC4KKyAgICAgICAgKiBkZmcvREZHQ2FwYWJpbGl0aWVz
LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpjYXBhYmlsaXR5TGV2ZWwpOgorICAgICAgICAqIGRm
Zy9ERkdDbG9iYmVyaXplLmg6CisgICAgICAgIChKU0M6OkRGRzo6Y2xvYmJlcml6ZSk6CisgICAg
ICAgICogZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50cy5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
SW5mZXJyZWRWYWx1ZUFkYXB0b3I6OmFkZCk6CisgICAgICAgIChKU0M6OkRGRzo6RGVzaXJlZFdh
dGNocG9pbnRzOjphZGRMYXppbHkpOgorICAgICAgICAoSlNDOjpERkc6OkRlc2lyZWRXYXRjaHBv
aW50czo6cmVhbGx5QWRkKToKKyAgICAgICAgKEpTQzo6REZHOjpEZXNpcmVkV2F0Y2hwb2ludHM6
OmFyZVN0aWxsVmFsaWQpOgorICAgICAgICAqIGRmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuaDoK
KyAgICAgICAgKEpTQzo6REZHOjpJbmZlcnJlZFZhbHVlQWRhcHRvcjo6aGFzQmVlbkludmFsaWRh
dGVkKToKKyAgICAgICAgKEpTQzo6REZHOjpEZXNpcmVkV2F0Y2hwb2ludHM6OmlzV2F0Y2hlZCk6
CisgICAgICAgICogZGZnL0RGR0dyYXBoLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFwaDo6
ZHVtcCk6CisgICAgICAgIChKU0M6OkRGRzo6R3JhcGg6OnRyeUdldENvbnN0YW50Q2xvc3VyZVZh
cik6CisgICAgICAgICogZGZnL0RGR05vZGUuaDoKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpo
YXNXYXRjaHBvaW50U2V0KToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjp3YXRjaHBvaW50U2V0
KToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpoYXNWYXJpYWJsZVdhdGNocG9pbnRTZXQpOiBE
ZWxldGVkLgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OnZhcmlhYmxlV2F0Y2hwb2ludFNldCk6
IERlbGV0ZWQuCisgICAgICAgICogZGZnL0RGR09wZXJhdGlvbnMuY3BwOgorICAgICAgICAqIGRm
Zy9ERkdPcGVyYXRpb25zLmg6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcDoK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZU5ld0Z1bmN0aW9uKToK
KyAgICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUNyZWF0ZUFjdGl2YXRp
b24pOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxlTm90aWZ5V3Jp
dGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVC5oOgorICAgICAgICAoSlNDOjpE
Rkc6OlNwZWN1bGF0aXZlSklUOjpjYWxsT3BlcmF0aW9uKToKKyAgICAgICAgKiBkZmcvREZHU3Bl
Y3VsYXRpdmVKSVQzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAg
ICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisgICAgICAgICogZGZnL0RG
R1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2UuY3BwOgorICAgICAgICAqIGZ0bC9GVExJbnRyaW5zaWNS
ZXBvc2l0b3J5Lmg6CisgICAgICAgICogZnRsL0ZUTExvd2VyREZHVG9MTFZNLmNwcDoKKyAgICAg
ICAgKEpTQzo6RlRMOjpMb3dlckRGR1RvTExWTTo6Y29tcGlsZUNyZWF0ZUFjdGl2YXRpb24pOgor
ICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlTmV3RnVuY3Rpb24pOgor
ICAgICAgICAoSlNDOjpGVEw6Okxvd2VyREZHVG9MTFZNOjpjb21waWxlTm90aWZ5V3JpdGUpOgor
ICAgICAgICAqIGludGVycHJldGVyL0ludGVycHJldGVyLmNwcDoKKyAgICAgICAgKEpTQzo6U3Rh
Y2tGcmFtZTo6ZnJpZW5kbHlTb3VyY2VVUkwpOgorICAgICAgICAoSlNDOjpTdGFja0ZyYW1lOjpm
cmllbmRseUZ1bmN0aW9uTmFtZSk6CisgICAgICAgICogaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIu
aDoKKyAgICAgICAgKEpTQzo6U3RhY2tGcmFtZTo6ZnJpZW5kbHlTb3VyY2VVUkwpOiBEZWxldGVk
LgorICAgICAgICAoSlNDOjpTdGFja0ZyYW1lOjpmcmllbmRseUZ1bmN0aW9uTmFtZSk6IERlbGV0
ZWQuCisgICAgICAgICogaml0L0pJVC5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdE5vdGlm
eVdyaXRlKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZU1haW5QYXNzKToKKyAg
ICAgICAgKiBqaXQvSklULmg6CisgICAgICAgICogaml0L0pJVE9wY29kZXMuY3BwOgorICAgICAg
ICAoSlNDOjpKSVQ6OmVtaXRfb3BfdG91Y2hfZW50cnkpOiBEZWxldGVkLgorICAgICAgICAqIGpp
dC9KSVRPcGVyYXRpb25zLmNwcDoKKyAgICAgICAgKiBqaXQvSklUT3BlcmF0aW9ucy5oOgorICAg
ICAgICAqIGppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHA6CisgICAgICAgIChKU0M6OkpJVDo6ZW1p
dFB1dEdsb2JhbFZhcik6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdFB1dENsb3N1cmVWYXIpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmVtaXROb3RpZnlXcml0ZSk6IERlbGV0ZWQuCisgICAgICAgICog
aml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRQ
dXRHbG9iYWxWYXIpOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRQdXRDbG9zdXJlVmFyKToKKyAg
ICAgICAgKEpTQzo6SklUOjplbWl0Tm90aWZ5V3JpdGUpOiBEZWxldGVkLgorICAgICAgICAqIGxs
aW50L0xMSW50U2xvd1BhdGhzLmNwcDoKKyAgICAgICAgKEpTQzo6TExJbnQ6OkxMSU5UX1NMT1df
UEFUSF9ERUNMKToKKyAgICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbToKKyAg
ICAgICAgKiBsbGludC9Mb3dMZXZlbEludGVycHJldGVyMzJfNjQuYXNtOgorICAgICAgICAqIGxs
aW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc206CisgICAgICAgICogcnVudGltZS9Db21tb25T
bG93UGF0aHMuY3BwOgorICAgICAgICAoSlNDOjpTTE9XX1BBVEhfREVDTCk6IERlbGV0ZWQuCisg
ICAgICAgICogcnVudGltZS9Db21tb25TbG93UGF0aHMuaDoKKyAgICAgICAgKiBydW50aW1lL0V4
ZWN1dGFibGUuY3BwOgorICAgICAgICAoSlNDOjpGdW5jdGlvbkV4ZWN1dGFibGU6OmZpbmlzaENy
ZWF0aW9uKToKKyAgICAgICAgKEpTQzo6RnVuY3Rpb25FeGVjdXRhYmxlOjp2aXNpdENoaWxkcmVu
KToKKyAgICAgICAgKiBydW50aW1lL0V4ZWN1dGFibGUuaDoKKyAgICAgICAgKEpTQzo6RnVuY3Rp
b25FeGVjdXRhYmxlOjpzaW5nbGV0b25GdW5jdGlvbik6CisgICAgICAgICogcnVudGltZS9JbmZl
cnJlZFZhbHVlLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkluZmVycmVkVmFsdWU6OmNyZWF0
ZSk6CisgICAgICAgIChKU0M6OkluZmVycmVkVmFsdWU6OmRlc3Ryb3kpOgorICAgICAgICAoSlND
OjpJbmZlcnJlZFZhbHVlOjpjcmVhdGVTdHJ1Y3R1cmUpOgorICAgICAgICAoSlNDOjpJbmZlcnJl
ZFZhbHVlOjp2aXNpdENoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6SW5mZXJyZWRWYWx1ZTo6SW5m
ZXJyZWRWYWx1ZSk6CisgICAgICAgIChKU0M6OkluZmVycmVkVmFsdWU6On5JbmZlcnJlZFZhbHVl
KToKKyAgICAgICAgKEpTQzo6SW5mZXJyZWRWYWx1ZTo6bm90aWZ5V3JpdGVTbG93KToKKyAgICAg
ICAgKEpTQzo6SW5mZXJyZWRWYWx1ZTo6VmFsdWVDbGVhbnVwOjpWYWx1ZUNsZWFudXApOgorICAg
ICAgICAoSlNDOjpJbmZlcnJlZFZhbHVlOjpWYWx1ZUNsZWFudXA6On5WYWx1ZUNsZWFudXApOgor
ICAgICAgICAoSlNDOjpJbmZlcnJlZFZhbHVlOjpWYWx1ZUNsZWFudXA6OmZpbmFsaXplVW5jb25k
aXRpb25hbGx5KToKKyAgICAgICAgKiBydW50aW1lL0luZmVycmVkVmFsdWUuaDogQWRkZWQuCisg
ICAgICAgIChKU0M6OkluZmVycmVkVmFsdWU6OmluZmVycmVkVmFsdWUpOgorICAgICAgICAoSlND
OjpJbmZlcnJlZFZhbHVlOjpzdGF0ZSk6CisgICAgICAgIChKU0M6OkluZmVycmVkVmFsdWU6Omlz
U3RpbGxWYWxpZCk6CisgICAgICAgIChKU0M6OkluZmVycmVkVmFsdWU6Omhhc0JlZW5JbnZhbGlk
YXRlZCk6CisgICAgICAgIChKU0M6OkluZmVycmVkVmFsdWU6OmFkZCk6CisgICAgICAgIChKU0M6
OkluZmVycmVkVmFsdWU6Om5vdGlmeVdyaXRlKToKKyAgICAgICAgKEpTQzo6SW5mZXJyZWRWYWx1
ZTo6aW52YWxpZGF0ZSk6CisgICAgICAgICogcnVudGltZS9KU0Vudmlyb25tZW50UmVjb3JkLmNw
cDoKKyAgICAgICAgKEpTQzo6SlNFbnZpcm9ubWVudFJlY29yZDo6dmlzaXRDaGlsZHJlbik6Cisg
ICAgICAgICogcnVudGltZS9KU0Vudmlyb25tZW50UmVjb3JkLmg6CisgICAgICAgIChKU0M6OkpT
RW52aXJvbm1lbnRSZWNvcmQ6OmlzVmFsaWQpOgorICAgICAgICAoSlNDOjpKU0Vudmlyb25tZW50
UmVjb3JkOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgICogcnVudGltZS9KU0Z1bmN0aW9uLmNw
cDoKKyAgICAgICAgKEpTQzo6SlNGdW5jdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKiBydW50aW1l
L0pTRnVuY3Rpb24uaDoKKyAgICAgICAgKEpTQzo6SlNGdW5jdGlvbjo6Y3JlYXRlV2l0aEludmFs
aWRhdGVkUmVhbGxvY2F0aW9uV2F0Y2hwb2ludCk6CisgICAgICAgIChKU0M6OkpTRnVuY3Rpb246
OmNyZWF0ZUltcGwpOgorICAgICAgICAoSlNDOjpKU0Z1bmN0aW9uOjpjcmVhdGUpOiBEZWxldGVk
LgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpK
U0dsb2JhbE9iamVjdDo6YWRkR2xvYmFsVmFyKToKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmpl
Y3Q6OmFkZEZ1bmN0aW9uKToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2JqZWN0Lmg6Cisg
ICAgICAgICogcnVudGltZS9KU0xleGljYWxFbnZpcm9ubWVudC5jcHA6CisgICAgICAgIChKU0M6
OkpTTGV4aWNhbEVudmlyb25tZW50OjpzeW1ib2xUYWJsZVB1dCk6CisgICAgICAgICogcnVudGlt
ZS9KU1Njb3BlLmg6CisgICAgICAgIChKU0M6OlJlc29sdmVPcDo6UmVzb2x2ZU9wKToKKyAgICAg
ICAgKiBydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6
SlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdDo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAqIHJ1
bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5oOgorICAgICAgICAoSlNDOjpKU1N5bWJvbFRhYmxl
T2JqZWN0OjpKU1N5bWJvbFRhYmxlT2JqZWN0KToKKyAgICAgICAgKEpTQzo6SlNTeW1ib2xUYWJs
ZU9iamVjdDo6c2V0U3ltYm9sVGFibGUpOgorICAgICAgICAoSlNDOjpzeW1ib2xUYWJsZVB1dCk6
CisgICAgICAgIChKU0M6OnN5bWJvbFRhYmxlUHV0V2l0aEF0dHJpYnV0ZXMpOgorICAgICAgICAq
IHJ1bnRpbWUvUHV0UHJvcGVydHlTbG90Lmg6CisgICAgICAgICogcnVudGltZS9TeW1ib2xUYWJs
ZS5jcHA6CisgICAgICAgIChKU0M6OlN5bWJvbFRhYmxlRW50cnk6OnByZXBhcmVUb1dhdGNoKToK
KyAgICAgICAgKEpTQzo6U3ltYm9sVGFibGU6OlN5bWJvbFRhYmxlKToKKyAgICAgICAgKEpTQzo6
U3ltYm9sVGFibGU6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6U3ltYm9sVGFibGU6
OnZpc2l0Q2hpbGRyZW4pOgorICAgICAgICAoSlNDOjpTeW1ib2xUYWJsZUVudHJ5OjppbmZlcnJl
ZFZhbHVlKTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3ltYm9sVGFibGVFbnRyeTo6bm90aWZ5
V3JpdGVTbG93KTogRGVsZXRlZC4KKyAgICAgICAgKEpTQzo6U3ltYm9sVGFibGU6OldhdGNocG9p
bnRDbGVhbnVwOjpXYXRjaHBvaW50Q2xlYW51cCk6IERlbGV0ZWQuCisgICAgICAgIChKU0M6OlN5
bWJvbFRhYmxlOjpXYXRjaHBvaW50Q2xlYW51cDo6fldhdGNocG9pbnRDbGVhbnVwKTogRGVsZXRl
ZC4KKyAgICAgICAgKEpTQzo6U3ltYm9sVGFibGU6OldhdGNocG9pbnRDbGVhbnVwOjpmaW5hbGl6
ZVVuY29uZGl0aW9uYWxseSk6IERlbGV0ZWQuCisgICAgICAgICogcnVudGltZS9TeW1ib2xUYWJs
ZS5oOgorICAgICAgICAoSlNDOjpTeW1ib2xUYWJsZUVudHJ5OjpkaXNhYmxlV2F0Y2hpbmcpOgor
ICAgICAgICAoSlNDOjpTeW1ib2xUYWJsZUVudHJ5Ojp3YXRjaHBvaW50U2V0KToKKyAgICAgICAg
KEpTQzo6U3ltYm9sVGFibGU6OnNpbmdsZXRvblNjb3BlKToKKyAgICAgICAgKEpTQzo6U3ltYm9s
VGFibGVFbnRyeTo6bm90aWZ5V3JpdGUpOiBEZWxldGVkLgorICAgICAgICAqIHJ1bnRpbWUvVHlw
ZVByb2ZpbGVyLmNwcDoKKyAgICAgICAgKiBydW50aW1lL1ZNLmNwcDoKKyAgICAgICAgKEpTQzo6
Vk06OlZNKToKKyAgICAgICAgKiBydW50aW1lL1ZNLmg6CisgICAgICAgICogdGVzdHMvc3RyZXNz
L2luZmVyLXVuaW5pdGlhbGl6ZWQtY2xvc3VyZS12YXIuanM6IEFkZGVkLgorICAgICAgICAoZm9v
LmYpOgorICAgICAgICAoZm9vKToKKyAgICAgICAgKiB0ZXN0cy9zdHJlc3Mvc2luZ2xldG9uLXNj
b3BlLXRoZW4tb3ZlcndyaXRlLmpzOiBBZGRlZC4KKyAgICAgICAgKGZvby5mKToKKyAgICAgICAg
KGZvbyk6CisgICAgICAgICogdGVzdHMvc3RyZXNzL3NpbmdsZXRvbi1zY29wZS10aGVuLXJlYWxs
b2MtYW5kLW92ZXJ3cml0ZS5qczogQWRkZWQuCisgICAgICAgIChmb28pOgorICAgICAgICAqIHRl
c3RzL3N0cmVzcy9zaW5nbGV0b24tc2NvcGUtdGhlbi1yZWFsbG9jLmpzOiBBZGRlZC4KKyAgICAg
ICAgKGZvbyk6CisKIDIwMTUtMDQtMDggIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxl
LmNvbT4KIAogICAgICAgICBVc2UganNOb250cml2aWFsU3RyaW5nIGluIG1vcmUgcGxhY2VzIGlm
IHRoZSBzdHJpbmcgaXMgZ3VhcmFudGVlZCB0byBiZSAyIG9yIG1vcmUgY2hhcmFjdGVycwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9DTWFrZUxpc3RzLnR4dAkocmV2aXNpb24gMTgyNTgyKQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL0NNYWtlTGlzdHMudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0x
MDUsNyArMTA1LDcgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1NPVVJDRVMKICAgICBieXRlY29kZS9V
bmxpbmtlZENvZGVCbG9jay5jcHAKICAgICBieXRlY29kZS9VbmxpbmtlZEluc3RydWN0aW9uU3Ry
ZWFtLmNwcAogICAgIGJ5dGVjb2RlL1ZhbHVlUmVjb3ZlcnkuY3BwCi0gICAgYnl0ZWNvZGUvVmFy
aWFibGVXYXRjaHBvaW50U2V0LmNwcAorICAgIGJ5dGVjb2RlL1ZhcmlhYmxlV3JpdGVGaXJlRGV0
YWlsLmNwcAogICAgIGJ5dGVjb2RlL1ZpcnR1YWxSZWdpc3Rlci5jcHAKICAgICBieXRlY29kZS9X
YXRjaHBvaW50LmNwcAogCkBAIC00NTIsNiArNDUyLDcgQEAgc2V0KEphdmFTY3JpcHRDb3JlX1JV
TlRJTUVfU09VUkNFUwogICAgIHJ1bnRpbWUvR2V0dGVyU2V0dGVyLmNwcAogICAgIHJ1bnRpbWUv
SWRlbnRpZmllci5jcHAKICAgICBydW50aW1lL0luZGV4aW5nVHlwZS5jcHAKKyAgICBydW50aW1l
L0luZmVycmVkVmFsdWUuY3BwCiAgICAgcnVudGltZS9Jbml0aWFsaXplVGhyZWFkaW5nLmNwcAog
ICAgIHJ1bnRpbWUvSW50ZW5kZWRTdHJ1Y3R1cmVDaGFpbi5jcHAKICAgICBydW50aW1lL0ludGVy
bmFsRnVuY3Rpb24uY3BwCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUudmN4cHJvai9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHBy
b2oJKHJldmlzaW9uIDE4MjU4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0
Q29yZS52Y3hwcm9qL0phdmFTY3JpcHRDb3JlLnZjeHByb2oJKHdvcmtpbmcgY29weSkKQEAgLTM1
Miw3ICszNTIsNyBAQAogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcVW5saW5r
ZWRDb2RlQmxvY2suY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVc
VW5saW5rZWRJbnN0cnVjdGlvblN0cmVhbS5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxieXRlY29kZVxWYWx1ZVJlY292ZXJ5LmNwcCIgLz4KLSAgICA8Q2xDb21waWxlIEluY2x1
ZGU9Ii4uXGJ5dGVjb2RlXFZhcmlhYmxlV2F0Y2hwb2ludFNldC5jcHAiIC8+CisgICAgPENsQ29t
cGlsZSBJbmNsdWRlPSIuLlxieXRlY29kZVxWYXJpYWJsZVdyaXRlRmlyZURldGFpbC5jcHAiIC8+
CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRlY29kZVxWaXJ0dWFsUmVnaXN0ZXIuY3Bw
IiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcV2F0Y2hwb2ludC5jcHAi
IC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRlPSIuLlxieXRlY29tcGlsZXJcQnl0ZWNvZGVHZW5l
cmF0b3IuY3BwIiAvPgpAQCAtNzIwLDYgKzcyMCw3IEBACiAgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxydW50aW1lXEdldHRlclNldHRlci5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJbmNsdWRl
PSIuLlxydW50aW1lXElkZW50aWZpZXIuY3BwIiAvPgogICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5ccnVudGltZVxJbmRleGluZ1R5cGUuY3BwIiAvPgorICAgIDxDbENvbXBpbGUgSW5jbHVkZT0i
Li5ccnVudGltZVxJbmZlcnJlZFZhbHVlLmNwcCIgLz4KICAgICA8Q2xDb21waWxlIEluY2x1ZGU9
Ii4uXHJ1bnRpbWVcSW5pdGlhbGl6ZVRocmVhZGluZy5jcHAiIC8+CiAgICAgPENsQ29tcGlsZSBJ
bmNsdWRlPSIuLlxydW50aW1lXEludGVuZGVkU3RydWN0dXJlQ2hhaW4uY3BwIiAvPgogICAgIDxD
bENvbXBpbGUgSW5jbHVkZT0iLi5ccnVudGltZVxJbnRlcm5hbEZ1bmN0aW9uLmNwcCIgLz4KQEAg
LTEwMDQsNyArMTAwNSw3IEBACiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxieXRlY29kZVxV
bmxpbmtlZEluc3RydWN0aW9uU3RyZWFtLmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIu
LlxieXRlY29kZVxWYWx1ZVByb2ZpbGUuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XGJ5dGVjb2RlXFZhbHVlUmVjb3ZlcnkuaCIgLz4KLSAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4u
XGJ5dGVjb2RlXFZhcmlhYmxlV2F0Y2hwb2ludFNldC5oIiAvPgorICAgIDxDbEluY2x1ZGUgSW5j
bHVkZT0iLi5cYnl0ZWNvZGVcVmFyaWFibGVXcml0ZUZpcmVEZXRhaWwuaCIgLz4KICAgICA8Q2xJ
bmNsdWRlIEluY2x1ZGU9Ii4uXGJ5dGVjb2RlXFZpcnR1YWxSZWdpc3Rlci5oIiAvPgogICAgIDxD
bEluY2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvZGVcV2F0Y2hwb2ludC5oIiAvPgogICAgIDxDbElu
Y2x1ZGUgSW5jbHVkZT0iLi5cYnl0ZWNvbXBpbGVyXEJ5dGVjb2RlR2VuZXJhdG9yLmgiIC8+CkBA
IC0xNTA3LDYgKzE1MDgsNyBAQAogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxJ
bmRleGluZ0hlYWRlci5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5ccnVudGltZVxJ
bmRleGluZ0hlYWRlcklubGluZXMuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1
bnRpbWVcSW5kZXhpbmdUeXBlLmgiIC8+CisgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50
aW1lXEluZmVycmVkVmFsdWUuaCIgLz4KICAgICA8Q2xJbmNsdWRlIEluY2x1ZGU9Ii4uXHJ1bnRp
bWVcSW5pdGlhbGl6ZVRocmVhZGluZy5oIiAvPgogICAgIDxDbEluY2x1ZGUgSW5jbHVkZT0iLi5c
cnVudGltZVxJbnQxNkFycmF5LmgiIC8+CiAgICAgPENsSW5jbHVkZSBJbmNsdWRlPSIuLlxydW50
aW1lXEludDMyQXJyYXkuaCIgLz4KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9KYXZhU2Ny
aXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShy
ZXZpc2lvbiAxODI1ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
eGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagkod29ya2luZyBjb3B5KQpAQCAtMzgzLDYgKzM4Myw4
IEBACiAJCTBGNkIxQ0M2MTg2MkM0NzgwMDg0NUQ5NyAvKiBGVExVbndpbmRJbmZvLmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjZCMUNDMjE4NjJDNDc4
MDA4NDVEOTcgLyogRlRMVW53aW5kSW5mby5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0g
KFByaXZhdGUsICk7IH07IH07CiAJCTBGNkIxQ0M5MTg2NDFERjgwMDg0NUQ5NyAvKiBBcml0eUNo
ZWNrRmFpbFJldHVyblRodW5rcy5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSAwRjZCMUNDNzE4NjQxREY4MDA4NDVEOTcgLyogQXJpdHlDaGVja0ZhaWxS
ZXR1cm5UaHVua3MuY3BwICovOyB9OwogCQkwRjZCMUNDQTE4NjQxREY4MDA4NDVEOTcgLyogQXJp
dHlDaGVja0ZhaWxSZXR1cm5UaHVua3MuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IDBGNkIxQ0M4MTg2NDFERjgwMDg0NUQ5NyAvKiBBcml0eUNoZWNrRmFp
bFJldHVyblRodW5rcy5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CisJCTBGNkM3MzUwMUFDOUY5OUYwMEJFMTY4MiAvKiBWYXJpYWJsZVdyaXRlRmlyZURl
dGFpbC5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
RjZDNzM0RTFBQzlGOTlGMDBCRTE2ODIgLyogVmFyaWFibGVXcml0ZUZpcmVEZXRhaWwuY3BwICov
OyB9OworCQkwRjZDNzM1MTFBQzlGOTlGMDBCRTE2ODIgLyogVmFyaWFibGVXcml0ZUZpcmVEZXRh
aWwuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNkM3
MzRGMUFDOUY5OUYwMEJFMTY4MiAvKiBWYXJpYWJsZVdyaXRlRmlyZURldGFpbC5oICovOyBzZXR0
aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTBGNkU4NDVBMTkwMzBC
RUYwMDU2Mjc0MSAvKiBERkdWYXJpYWJsZUFjY2Vzc0RhdGEuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY2RTg0NTkxOTAzMEJFRjAwNTYyNzQxIC8q
IERGR1ZhcmlhYmxlQWNjZXNzRGF0YS5jcHAgKi87IH07CiAJCTBGNkZDNzUwMTk2MTEwQTgwMEUx
RDAyRCAvKiBDb21wbGV4R2V0U3RhdHVzLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1
aWxkRmlsZTsgZmlsZVJlZiA9IDBGNkZDNzRFMTk2MTEwQTgwMEUxRDAyRCAvKiBDb21wbGV4R2V0
U3RhdHVzLmNwcCAqLzsgfTsKIAkJMEY2RkM3NTExOTYxMTBBODAwRTFEMDJEIC8qIENvbXBsZXhH
ZXRTdGF0dXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9
IDBGNkZDNzRGMTk2MTEwQTgwMEUxRDAyRCAvKiBDb21wbGV4R2V0U3RhdHVzLmggKi87IHNldHRp
bmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTQyNSw3ICs0MjcsNiBA
QAogCQkwRjhGOTQ0MjE2Njc2MzM1MDBENjE5NzEgLyogQ29kZVR5cGUuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEY4Rjk0M0YxNjY3NjMyRDAwRDYx
OTcxIC8qIENvZGVUeXBlLmNwcCAqLzsgfTsKIAkJMEY4Rjk0NDQxNjY3NjM1NDAwRDYxOTcxIC8q
IEpJVENvZGUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEY4Rjk0NDMxNjY3NjM1MjAwRDYxOTcxIC8qIEpJVENvZGUuY3BwICovOyB9OwogCQkwRjhG
OTQ0NjE2Njc2NEYxMDBENjE5NzEgLyogQ29kZU9yaWdpbi5jcHAgaW4gU291cmNlcyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjhGOTQ0NTE2Njc2NEVFMDBENjE5NzEgLyog
Q29kZU9yaWdpbi5jcHAgKi87IH07Ci0JCTBGOTE4MUM3MTg0MTVDQTUwMDU3QjY2OSAvKiBWYXJp
YWJsZVdhdGNocG9pbnRTZXQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDBGOTE4MUM2MTg0MTVDQTUwMDU3QjY2OSAvKiBWYXJpYWJsZVdhdGNocG9pbnRT
ZXQuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkw
RjkxOUQwQzE1N0VFMDlGMDA0QTRFN0QgLyogSlNTeW1ib2xUYWJsZU9iamVjdC5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjkxOUQwOTE1N0VFMDlE
MDA0QTRFN0QgLyogSlNTeW1ib2xUYWJsZU9iamVjdC5jcHAgKi87IH07CiAJCTBGOTE5RDBEMTU3
RUUwQTIwMDRBNEU3RCAvKiBKU1N5bWJvbFRhYmxlT2JqZWN0LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRjkxOUQwQTE1N0VFMDlEMDA0QTRFN0QgLyog
SlNTeW1ib2xUYWJsZU9iamVjdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CiAJCTBGOTE5RDEwMTU3RjMzMjkwMDRBNEU3RCAvKiBKU1NlZ21lbnRlZFZh
cmlhYmxlT2JqZWN0LmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IDBGOTE5RDBFMTU3RjMzMjcwMDRBNEU3RCAvKiBKU1NlZ21lbnRlZFZhcmlhYmxlT2Jq
ZWN0LmNwcCAqLzsgfTsKQEAgLTU1MCw3ICs1NTEsNiBAQAogCQkwRkM5N0Y0MDE4MjAyMTE5MDAy
QzlCMjYgLyogREZHSnVtcFJlcGxhY2VtZW50LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSAwRkM5N0YzQTE4MjAyMTE5MDAyQzlCMjYgLyogREZHSnVtcFJl
cGxhY2VtZW50LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsg
fTsKIAkJMEZDOTdGNDExODIwMjExOTAwMkM5QjI2IC8qIERGR1dhdGNocG9pbnRDb2xsZWN0aW9u
UGhhc2UuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
MEZDOTdGM0IxODIwMjExOTAwMkM5QjI2IC8qIERGR1dhdGNocG9pbnRDb2xsZWN0aW9uUGhhc2Uu
Y3BwICovOyB9OwogCQkwRkM5N0Y0MjE4MjAyMTE5MDAyQzlCMjYgLyogREZHV2F0Y2hwb2ludENv
bGxlY3Rpb25QaGFzZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxl
UmVmID0gMEZDOTdGM0MxODIwMjExOTAwMkM5QjI2IC8qIERGR1dhdGNocG9pbnRDb2xsZWN0aW9u
UGhhc2UuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9Owot
CQkwRkNBOTExMzE5NUU2NkEwMDA0MjY0MzggLyogVmFyaWFibGVXYXRjaHBvaW50U2V0LmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQ0E5MTEyMTk1
RTY2QTAwMDQyNjQzOCAvKiBWYXJpYWJsZVdhdGNocG9pbnRTZXQuY3BwICovOyB9OwogCQkwRkND
QUU0NTE2RDBDRjc0MDBEMEM2NUIgLyogUGFyc2VyRXJyb3IuaCBpbiBIZWFkZXJzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQ0NBRTQzMTZEMENGNkUwMEQwQzY1QiAvKiBQ
YXJzZXJFcnJvci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07
IH07CiAJCTBGQ0VGQUFCMTgwNEMxM0UwMDQ3MkNFNCAvKiBGVExTYXZlUmVzdG9yZS5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwRkNFRkFBOTE4MDRD
MTNFMDA0NzJDRTQgLyogRlRMU2F2ZVJlc3RvcmUuY3BwICovOyB9OwogCQkwRkNFRkFBQzE4MDRD
MTNFMDA0NzJDRTQgLyogRlRMU2F2ZVJlc3RvcmUuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBC
WEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGQ0VGQUFBMTgwNEMxM0UwMDQ3MkNFNCAvKiBGVExTYXZl
UmVzdG9yZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CkBAIC03MTksNiArNzE5LDggQEAKIAkJMEZGNzI5QkUxNjZBRDM2MDAwMEY1QkEzIC8qIFByb2Zp
bGVyRXhlY3V0aW9uQ291bnRlci5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gMEZGNzI5OUUxNjZBRDM0NzAwMEY1QkEzIC8qIFByb2ZpbGVyRXhlY3V0aW9u
Q291bnRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCTBGRjcyOUJGMTY2QUQzNjAwMDBGNUJBMyAvKiBQcm9maWxlck9yaWdpbi5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGNzI5QTAxNjZBRDM0NzAw
MEY1QkEzIC8qIFByb2ZpbGVyT3JpZ2luLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAo
UHJpdmF0ZSwgKTsgfTsgfTsKIAkJMEZGNzI5QzAxNjZBRDM2MDAwMEY1QkEzIC8qIFByb2ZpbGVy
T3JpZ2luU3RhY2suaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJl
ZiA9IDBGRjcyOUEyMTY2QUQzNDcwMDBGNUJBMyAvKiBQcm9maWxlck9yaWdpblN0YWNrLmggKi87
IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKKwkJMEZGOEJERUEx
QUQ0Q0Y3MTAwREZFODg0IC8qIEluZmVycmVkVmFsdWUuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNh
ID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMEZGOEJERTgxQUQ0Q0Y3MTAwREZFODg0IC8qIElu
ZmVycmVkVmFsdWUuY3BwICovOyB9OworCQkwRkY4QkRFQjFBRDRDRjcxMDBERkU4ODQgLyogSW5m
ZXJyZWRWYWx1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gMEZGOEJERTkxQUQ0Q0Y3MTAwREZFODg0IC8qIEluZmVycmVkVmFsdWUuaCAqLzsgc2V0dGlu
Z3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQkwRkY5MjJENDE0RjQ2QjQx
MDA0MUEyNEUgLyogTExJbnRPZmZzZXRzRXh0cmFjdG9yLmNwcCBpbiBTb3VyY2VzICovID0ge2lz
YSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDBGNDY4MEExMTRCQTdGODIwMEJGRTI3MiAvKiBM
TEludE9mZnNldHNFeHRyYWN0b3IuY3BwICovOyB9OwogCQkwRkZBNTQ5NzE2Qjg4MzUwMDBCM0E5
ODIgLyogQTY0RE9wY29kZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSA2NTJBM0EyMjE2NTFDNjk3MDBBODBBRkUgLyogQTY0RE9wY29kZS5jcHAgKi87
IH07CiAJCTBGRkE1NDk4MTZCODgzNTMwMEIzQTk4MiAvKiBBNjRET3Bjb2RlLmggaW4gSGVhZGVy
cyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA2NTJBM0EyMzE2NTFDNjk3MDBB
ODBBRkUgLyogQTY0RE9wY29kZS5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZh
dGUsICk7IH07IH07CkBAIC0xNjQ0LDcgKzE2NDYsNiBAQAogCQlGRTIwQ0U5RTE1RjA0QTk1MDBE
RjM0MzAgLyogTExJbnRDTG9vcC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxl
OyBmaWxlUmVmID0gRkUyMENFOUMxNUYwNEE5NTAwREYzNDMwIC8qIExMSW50Q0xvb3AuaCAqLzsg
c2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlGRTRBMzMxRjE1
QkQyRTA3MDA2RjU0RjMgLyogVk1JbnNwZWN0b3IuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU0QTMzMUQxNUJEMkUwNzAwNkY1NEYzIC8qIFZNSW5z
cGVjdG9yLmNwcCAqLzsgfTsKIAkJRkU0QTMzMjAxNUJEMkUwNzAwNkY1NEYzIC8qIFZNSW5zcGVj
dG9yLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTRB
MzMxRTE1QkQyRTA3MDA2RjU0RjMgLyogVk1JbnNwZWN0b3IuaCAqLzsgc2V0dGluZ3MgPSB7QVRU
UklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwotCQlGRTUyNDhGOTE5MTQ0MkQ5MDBCN0ZERTQg
LyogVmFyaWFibGVXYXRjaHBvaW50U2V0SW5saW5lcy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0g
UEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRkU1MjQ4RjgxOTE0NDJEOTAwQjdGREU0IC8qIFZhcmlh
YmxlV2F0Y2hwb2ludFNldElubGluZXMuaCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQ
cml2YXRlLCApOyB9OyB9OwogCQlGRTU5MzJBNzE4M0M1QTI2MDBBMUVDQ0MgLyogVk1FbnRyeVNj
b3BlLmNwcCBpbiBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEZF
NTkzMkE1MTgzQzVBMjYwMEExRUNDQyAvKiBWTUVudHJ5U2NvcGUuY3BwICovOyB9OwogCQlGRTU5
MzJBODE4M0M1QTI2MDBBMUVDQ0MgLyogVk1FbnRyeVNjb3BlLmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTU5MzJBNjE4M0M1QTI2MDBBMUVDQ0MgLyog
Vk1FbnRyeVNjb3BlLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJRkU3QkE2MEYxQTFBN0NFQzAwRjFGN0I0IC8qIEhlYXBWZXJpZmllci5jcHAgaW4g
U291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBGRTdCQTYwRDFBMUE3
Q0VDMDBGMUY3QjQgLyogSGVhcFZlcmlmaWVyLmNwcCAqLzsgfTsKQEAgLTIxMDAsNiArMjEwMSw4
IEBACiAJCTBGNkIxQ0MyMTg2MkM0NzgwMDg0NUQ5NyAvKiBGVExVbndpbmRJbmZvLmggKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IEZUTFVud2luZEluZm8uaDsgcGF0aCA9IGZ0bC9G
VExVbndpbmRJbmZvLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNkIxQ0M3MTg2
NDFERjgwMDg0NUQ5NyAvKiBBcml0eUNoZWNrRmFpbFJldHVyblRodW5rcy5jcHAgKi8gPSB7aXNh
ID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUg
PSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBcml0eUNoZWNrRmFpbFJldHVyblRodW5rcy5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNkIxQ0M4MTg2NDFERjgwMDg0NUQ5
NyAvKiBBcml0eUNoZWNrRmFpbFJldHVyblRodW5rcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBBcml0eUNoZWNrRmFpbFJldHVyblRodW5rcy5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OworCQkwRjZDNzM0RTFBQzlGOTlGMDBCRTE2ODIgLyogVmFyaWFibGVXcml0ZUZp
cmVEZXRhaWwuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9
IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVmFyaWFi
bGVXcml0ZUZpcmVEZXRhaWwuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRjZD
NzM0RjFBQzlGOTlGMDBCRTE2ODIgLyogVmFyaWFibGVXcml0ZUZpcmVEZXRhaWwuaCAqLyA9IHtp
c2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlw
ZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmFyaWFibGVXcml0ZUZpcmVEZXRhaWwuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEY2RTg0NTkxOTAzMEJFRjAwNTYyNzQxIC8qIERG
R1ZhcmlhYmxlQWNjZXNzRGF0YS5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5h
bWUgPSBERkdWYXJpYWJsZUFjY2Vzc0RhdGEuY3BwOyBwYXRoID0gZGZnL0RGR1ZhcmlhYmxlQWNj
ZXNzRGF0YS5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGNkZDNzRFMTk2MTEw
QTgwMEUxRDAyRCAvKiBDb21wbGV4R2V0U3RhdHVzLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Y3BwLmNwcDsgcGF0aCA9IENvbXBsZXhHZXRTdGF0dXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQkwRjZGQzc0RjE5NjExMEE4MDBFMUQwMkQgLyogQ29tcGxleEdldFN0YXR1cy5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb21wbGV4R2V0U3RhdHVzLmg7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0yMTQwLDcgKzIxNDMsNiBAQAogCQkwRjhGOTQz
RjE2Njc2MzJEMDBENjE5NzEgLyogQ29kZVR5cGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gQ29kZVR5cGUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9Owog
CQkwRjhGOTQ0MzE2Njc2MzUyMDBENjE5NzEgLyogSklUQ29kZS5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBKSVRDb2RlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJMEY4Rjk0NDUxNjY3NjRFRTAwRDYxOTcxIC8qIENvZGVPcmlnaW4uY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ29kZU9yaWdpbi5jcHA7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07Ci0JCTBGOTE4MUM2MTg0MTVDQTUwMDU3QjY2OSAvKiBWYXJpYWJs
ZVdhdGNocG9pbnRTZXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVmFyaWFi
bGVXYXRjaHBvaW50U2V0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOTE5RDA5
MTU3RUUwOUQwMDRBNEU3RCAvKiBKU1N5bWJvbFRhYmxlT2JqZWN0LmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNv
dXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTU3ltYm9sVGFibGVPYmplY3QuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQkwRjkxOUQwQTE1N0VFMDlEMDA0QTRFN0QgLyogSlNTeW1i
b2xUYWJsZU9iamVjdC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBKU1N5bWJv
bFRhYmxlT2JqZWN0Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGOTE5RDBFMTU3
RjMzMjcwMDRBNEU3RCAvKiBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0LmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuY3Bw
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMjI3Niw3ICsyMjc4LDYgQEAKIAkJMEZD
OTdGM0ExODIwMjExOTAwMkM5QjI2IC8qIERGR0p1bXBSZXBsYWNlbWVudC5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IG5hbWUgPSBERkdKdW1wUmVwbGFjZW1lbnQuaDsgcGF0aCA9IGRmZy9E
RkdKdW1wUmVwbGFjZW1lbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZDOTdG
M0IxODIwMjExOTAwMkM5QjI2IC8qIERGR1dhdGNocG9pbnRDb2xsZWN0aW9uUGhhc2UuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gREZHV2F0Y2hwb2ludENvbGxlY3Rp
b25QaGFzZS5jcHA7IHBhdGggPSBkZmcvREZHV2F0Y2hwb2ludENvbGxlY3Rpb25QaGFzZS5jcHA7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTBGQzk3RjNDMTgyMDIxMTkwMDJDOUIyNiAv
KiBERkdXYXRjaHBvaW50Q29sbGVjdGlvblBoYXNlLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgbmFtZSA9IERGR1dhdGNocG9pbnRDb2xsZWN0aW9uUGhhc2UuaDsgcGF0aCA9IGRmZy9ERkdX
YXRjaHBvaW50Q29sbGVjdGlvblBoYXNlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07Ci0J
CTBGQ0E5MTEyMTk1RTY2QTAwMDQyNjQzOCAvKiBWYXJpYWJsZVdhdGNocG9pbnRTZXQuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVmFyaWFibGVXYXRjaHBvaW50U2V0
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMEZDQjQwODUxNUMwQTNDMzAwNDg5
MzJCIC8qIFNsb3RWaXNpdG9ySW5saW5lcy5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7
IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBh
dGggPSBTbG90VmlzaXRvcklubGluZXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJ
MEZDQ0FFNDMxNkQwQ0Y2RTAwRDBDNjVCIC8qIFBhcnNlckVycm9yLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IFBhcnNlckVycm9yLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGQ0VGQUE5MTgwNEMxM0UwMDQ3MkNFNCAvKiBGVExTYXZlUmVzdG9yZS5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBGVExTYXZlUmVzdG9yZS5jcHA7IHBh
dGggPSBmdGwvRlRMU2F2ZVJlc3RvcmUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpA
QCAtMjQ0MSw2ICsyNDQyLDggQEAKIAkJMEZGNzI5QTAxNjZBRDM0NzAwMEY1QkEzIC8qIFByb2Zp
bGVyT3JpZ2luLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgbmFtZSA9IFByb2ZpbGVyT3Jp
Z2luLmg7IHBhdGggPSBwcm9maWxlci9Qcm9maWxlck9yaWdpbi5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQkwRkY3MjlBMTE2NkFEMzQ3MDAwRjVCQTMgLyogUHJvZmlsZXJPcmlnaW5T
dGFjay5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IG5hbWUgPSBQcm9maWxlck9y
aWdpblN0YWNrLmNwcDsgcGF0aCA9IHByb2ZpbGVyL1Byb2ZpbGVyT3JpZ2luU3RhY2suY3BwOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwRkY3MjlBMjE2NkFEMzQ3MDAwRjVCQTMgLyog
UHJvZmlsZXJPcmlnaW5TdGFjay5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVF
bmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBQ
cm9maWxlck9yaWdpblN0YWNrLmg7IHBhdGggPSBwcm9maWxlci9Qcm9maWxlck9yaWdpblN0YWNr
Lmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCTBGRjhCREU4MUFENENGNzEwMERGRTg4
NCAvKiBJbmZlcnJlZFZhbHVlLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0
aCA9IEluZmVycmVkVmFsdWUuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQkwRkY4
QkRFOTFBRDRDRjcxMDBERkU4ODQgLyogSW5mZXJyZWRWYWx1ZS5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBJbmZlcnJlZFZhbHVlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCTBGRjkyMkNGMTRGNDZCMTMwMDQxQTI0RSAvKiBKU0NMTEludE9mZnNldHNFeHRyYWN0
b3IgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZXhwbGljaXRGaWxlVHlwZSA9ICJjb21w
aWxlZC5tYWNoLW8uZXhlY3V0YWJsZSI7IGluY2x1ZGVJbkluZGV4ID0gMDsgcGF0aCA9IEpTQ0xM
SW50T2Zmc2V0c0V4dHJhY3Rvcjsgc291cmNlVHJlZSA9IEJVSUxUX1BST0RVQ1RTX0RJUjsgfTsK
IAkJMEZGQzk5RDAxODRFQzhBRDAwOUMxMEFCIC8qIENvbnN0YW50TW9kZS5oICovID0ge2lzYSA9
IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0g
c291cmNlY29kZS5jLmg7IHBhdGggPSBDb25zdGFudE1vZGUuaDsgc291cmNlVHJlZSA9ICI8Z3Jv
dXA+IjsgfTsKIAkJMEZGQzk5RDIxODRFRTMxODAwOUMxMEFCIC8qIEFycmF5QnVmZmVyTmV1dGVy
aW5nV2F0Y2hwb2ludC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBB
cnJheUJ1ZmZlck5ldXRlcmluZ1dhdGNocG9pbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4i
OyB9OwpAQCAtMzQyMSw3ICszNDI0LDYgQEAKIAkJRkUyMENFOUMxNUYwNEE5NTAwREYzNDMwIC8q
IExMSW50Q0xvb3AuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gTExJbnRDTG9v
cC5oOyBwYXRoID0gbGxpbnQvTExJbnRDTG9vcC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlGRTRBMzMxRDE1QkQyRTA3MDA2RjU0RjMgLyogVk1JbnNwZWN0b3IuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gVk1JbnNwZWN0b3IuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQlGRTRBMzMxRTE1QkQyRTA3MDA2RjU0RjMgLyogVk1JbnNwZWN0
b3IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVk1JbnNwZWN0b3IuaDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKLQkJRkU1MjQ4RjgxOTE0NDJEOTAwQjdGREU0IC8qIFZh
cmlhYmxlV2F0Y2hwb2ludFNldElubGluZXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gVmFyaWFibGVXYXRjaHBvaW50U2V0SW5saW5lcy5oOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlGRTU5MzJBNTE4M0M1QTI2MDBBMUVDQ0MgLyogVk1FbnRyeVNjb3BlLmNwcCAq
LyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFZNRW50cnlTY29wZS5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFNTkzMkE2MTgzQzVBMjYwMEExRUNDQyAvKiBW
TUVudHJ5U2NvcGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gVk1FbnRyeVNj
b3BlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUZFN0JBNjBEMUExQTdDRUMwMEYx
RjdCNCAvKiBIZWFwVmVyaWZpZXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZp
bGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBw
YXRoID0gSGVhcFZlcmlmaWVyLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTQ0
MDksNiArNDQxMSw4IEBACiAJCQkJMEZCN0YzOEUxNUVEOEUzODAwRjE2N0IyIC8qIEluZGV4aW5n
SGVhZGVySW5saW5lcy5oICovLAogCQkJCTBGMTNFMDRDMTYxNjRBMUIwMERDOERFNyAvKiBJbmRl
eGluZ1R5cGUuY3BwICovLAogCQkJCTBGQjdGMzhGMTVFRDhFMzgwMEYxNjdCMiAvKiBJbmRleGlu
Z1R5cGUuaCAqLywKKwkJCQkwRkY4QkRFODFBRDRDRjcxMDBERkU4ODQgLyogSW5mZXJyZWRWYWx1
ZS5jcHAgKi8sCisJCQkJMEZGOEJERTkxQUQ0Q0Y3MTAwREZFODg0IC8qIEluZmVycmVkVmFsdWUu
aCAqLywKIAkJCQlFMTc4NjM2QzBEOUJFRUMzMDBENzRFNzUgLyogSW5pdGlhbGl6ZVRocmVhZGlu
Zy5jcHAgKi8sCiAJCQkJRTE3ODYzM0YwRDlCRUMwMDAwRDc0RTc1IC8qIEluaXRpYWxpemVUaHJl
YWRpbmcuaCAqLywKIAkJCQlBN0E4QUYyQjE3QURCNUYzMDA1QUIxNzQgLyogSW50OEFycmF5Lmgg
Ki8sCkBAIC01Mjc3LDkgKzUyODEsOCBAQAogCQkJCTBGOTYzQjM2MTNGQzZGREUwMDAyRDlCMiAv
KiBWYWx1ZVByb2ZpbGUuaCAqLywKIAkJCQkwRjI0RTU1NzE3Rjc0RURCMDBBQkIyMTcgLyogVmFs
dWVSZWNvdmVyeS5jcHAgKi8sCiAJCQkJMEY0MjZBNDUxNDYwQ0JBQjAwMTMxRjhGIC8qIFZhbHVl
UmVjb3ZlcnkuaCAqLywKLQkJCQkwRkNBOTExMjE5NUU2NkEwMDA0MjY0MzggLyogVmFyaWFibGVX
YXRjaHBvaW50U2V0LmNwcCAqLywKLQkJCQkwRjkxODFDNjE4NDE1Q0E1MDA1N0I2NjkgLyogVmFy
aWFibGVXYXRjaHBvaW50U2V0LmggKi8sCi0JCQkJRkU1MjQ4RjgxOTE0NDJEOTAwQjdGREU0IC8q
IFZhcmlhYmxlV2F0Y2hwb2ludFNldElubGluZXMuaCAqLywKKwkJCQkwRjZDNzM0RTFBQzlGOTlG
MDBCRTE2ODIgLyogVmFyaWFibGVXcml0ZUZpcmVEZXRhaWwuY3BwICovLAorCQkJCTBGNkM3MzRG
MUFDOUY5OUYwMEJFMTY4MiAvKiBWYXJpYWJsZVdyaXRlRmlyZURldGFpbC5oICovLAogCQkJCTBG
MjBDMjU4MUE4MDEzQUIwMERBMzIyOSAvKiBWaXJ0dWFsUmVnaXN0ZXIuY3BwICovLAogCQkJCTBG
NDI2QTQ2MTQ2MENCQUIwMDEzMUY4RiAvKiBWaXJ0dWFsUmVnaXN0ZXIuaCAqLywKIAkJCQkwRjkx
OUQyMjE1ODUzQ0RFMDA0QTRFN0QgLyogV2F0Y2hwb2ludC5jcHAgKi8sCkBAIC01NTY1LDcgKzU1
NjgsNiBAQAogCQkJCUM0RjRCNkY1MUEwNUM5ODQwMDVDQUI3NiAvKiBnZW5lcmF0ZV9vYmpjX3By
b3RvY29sX3R5cGVzX2ltcGxlbWVudGF0aW9uLnB5IGluIEhlYWRlcnMgKi8sCiAJCQkJQTU4NDAz
MjAxOEJGRkJFMTAwNUEwODExIC8qIEluc3BlY3RvckFnZW50LmggaW4gSGVhZGVycyAqLywKIAkJ
CQkyQUFCQ0RFNzE4RUYyOTQyMDAwMDIwOTYgLyogR0NMb2dnaW5nLmggaW4gSGVhZGVycyAqLywK
LQkJCQlGRTUyNDhGOTE5MTQ0MkQ5MDBCN0ZERTQgLyogVmFyaWFibGVXYXRjaHBvaW50U2V0SW5s
aW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkU3QkE2MTAxQTFBN0NFQzAwRjFGN0I0IC8qIEhl
YXBWZXJpZmllci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTVFRjlCMTQxQTFENDNGNjAwNzAyRTkw
IC8qIGdlbmVyYXRlX2NwcF9iYWNrZW5kX2Rpc3BhdGNoZXJfaGVhZGVyLnB5IGluIEhlYWRlcnMg
Ki8sCiAJCQkJQzJEQTc3ODMxOEUyNTk5OTAwNjZGQ0I2IC8qIEhlYXBJbmxpbmVzLmggaW4gSGVh
ZGVycyAqLywKQEAgLTYzNDcsNiArNjM0OSw3IEBACiAJCQkJQTc5MERENkUxODJGNDk5NzAwNTg4
ODA3IC8qIFNldEl0ZXJhdG9yUHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNzI5OURB
MjE3RDEyODQ4MDA1RjVGRjkgLyogU2V0UHJvdG90eXBlLmggaW4gSGVhZGVycyAqLywKIAkJCQk4
NkFFNjRBQTEzNUU1RTFDMDA5NjMwMTIgLyogU0g0QXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLywK
KwkJCQkwRkY4QkRFQjFBRDRDRjcxMDBERkU4ODQgLyogSW5mZXJyZWRWYWx1ZS5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJMEYyQjY3MDUxN0I2QjVBQjAwQTdBRTNGIC8qIFNpbXBsZVR5cGVkQXJyYXlD
b250cm9sbGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkxNEJBNzhGMTEzQUFCODhGMDA1QjdDMkMg
LyogU2xvdFZpc2l0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQjE3NjYxMTk2QjhGOUUwMDkx
MDUyQSAvKiBERkdIZWFwTG9jYXRpb24uaCBpbiBIZWFkZXJzICovLApAQCAtNjM1NCw2ICs2MzU3
LDcgQEAKIAkJCQlBNzA5RjJGMDE3QTBBQzA0MDA1MTJFOTggLyogU2xvd1BhdGhDYWxsLmggaW4g
SGVhZGVycyAqLywKIAkJCQk5MzMwNDAwNDBFNkE3NDk0MDA3ODZFNkEgLyogU21hbGxTdHJpbmdz
LmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ2NDBFMTZGNUNEMDBCMzQ0NjAgLyogU291cmNl
Q29kZS5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY2QzczNTExQUM5Rjk5RjAwQkUxNjgyIC8qIFZh
cmlhYmxlV3JpdGVGaXJlRGV0YWlsLmggaW4gSGVhZGVycyAqLywKIAkJCQlCQzE4QzQ2MzBFMTZG
NUNEMDBCMzQ0NjAgLyogU291cmNlUHJvdmlkZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTcwRUMw
RUMzMUFBMEQ3REEwMEI2QUFGQSAvKiBKU1N0cmluZ0l0ZXJhdG9yLmggaW4gSGVhZGVycyAqLywK
IAkJCQlFNDlEQzE2QzEyRUYyOTRFMDAxODRBMUYgLyogU291cmNlUHJvdmlkZXJDYWNoZS5oIGlu
IEhlYWRlcnMgKi8sCkBAIC02NDIxLDcgKzY0MjUsNiBAQAogCQkJCTBGMkU4OTJDMTZEMDI4QUQw
MDlFNEZEMiAvKiBVbnVzZWRQb2ludGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjk2M0IzODEz
RkM2RkU5MDAwMkQ5QjIgLyogVmFsdWVQcm9maWxlLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjQy
NkE0ODE0NjBDQkIzMDAxMzFGOEYgLyogVmFsdWVSZWNvdmVyeS5oIGluIEhlYWRlcnMgKi8sCi0J
CQkJMEY5MTgxQzcxODQxNUNBNTAwNTdCNjY5IC8qIFZhcmlhYmxlV2F0Y2hwb2ludFNldC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMEY5QzVFNUYxOEUzNUY1RTAwRDQzMUMzIC8qIEZUTERXQVJGUmVn
aXN0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNDI2QTQ5MTQ2MENCQjcwMDEzMUY4RiAvKiBW
aXJ0dWFsUmVnaXN0ZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDIwMEUxNkY1Q0QwMEIz
NDQ2MCAvKiBWTS5oIGluIEhlYWRlcnMgKi8sCkBAIC02OTYzLDYgKzY5NjYsNyBAQAogCQkJCUE3
N0YxODIxMTY0MDg4QjIwMDY0MEE0NyAvKiBDb2RlQ2FjaGUuY3BwIGluIFNvdXJjZXMgKi8sCiAJ
CQkJMEY4Rjk0NDYxNjY3NjRGMTAwRDYxOTcxIC8qIENvZGVPcmlnaW4uY3BwIGluIFNvdXJjZXMg
Ki8sCiAJCQkJODZCNTgyNjcxNEQyNzk2QzAwQTlDMzA2IC8qIENvZGVQcm9maWxlLmNwcCBpbiBT
b3VyY2VzICovLAorCQkJCTBGNkM3MzUwMUFDOUY5OUYwMEJFMTY4MiAvKiBWYXJpYWJsZVdyaXRl
RmlyZURldGFpbC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NkI1ODI2OTE0RDI3OTcwMDBBOUMz
MDYgLyogQ29kZVByb2ZpbGluZy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRjhGOTQzQzE2Njc2
MzEzMDBENjE5NzEgLyogQ29kZVNwZWNpYWxpemF0aW9uS2luZC5jcHAgaW4gU291cmNlcyAqLywK
IAkJCQkwRjhGOTQ0MjE2Njc2MzM1MDBENjE5NzEgLyogQ29kZVR5cGUuY3BwIGluIFNvdXJjZXMg
Ki8sCkBAIC03MDI3LDcgKzcwMzEsNiBAQAogCQkJCUMyOTgxRkQ4MTdCQUVFNEIwMEEzQkM5OCAv
KiBERkdEZXNpcmVkV2Vha1JlZmVyZW5jZXMuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQzI5ODFG
REMxN0JBRkY0NDAwQTNCQzk4IC8qIERGR0Rlc2lyZWRXcml0ZUJhcnJpZXJzLmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTBGRjQyNzY0MTU5MUExQ0MwMDRDQjlGRiAvKiBERkdEaXNhc3NlbWJsZXIu
Y3BwIGluIFNvdXJjZXMgKi8sCi0JCQkJMEZDQTkxMTMxOTVFNjZBMDAwNDI2NDM4IC8qIFZhcmlh
YmxlV2F0Y2hwb2ludFNldC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkQ4MUFEMjE1NEZCNEVF
MDA5ODNFNzIgLyogREZHRG9taW5hdG9ycy5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkwRkQzQzgy
NjE0MTE1RDQwMDBGRDgxQ0IgLyogREZHRHJpdmVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBG
MkI5Q0UyMTlEMEJBN0QwMEIxRDFCNSAvKiBERkdBdmFpbGFiaWxpdHlNYXAuY3BwIGluIFNvdXJj
ZXMgKi8sCkBAIC03MzMxLDYgKzczMzQsNyBAQAogCQkJCTBGMkI2NkZFMTdCNkI1QUIwMEE3QUUz
RiAvKiBKU1R5cGVkQXJyYXlzLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCTBGRjA1NEY5MUFDMzVC
NDQwMEU1QkU1NyAvKiBFeGVjdXRhYmxlQWxsb2NhdGlvbkZ1enouY3BwIGluIFNvdXJjZXMgKi8s
CiAJCQkJODZFM0M2MUExNjdCQUJFRTAwNkQ3NjBBIC8qIEpTVmFsdWUubW0gaW4gU291cmNlcyAq
LywKKwkJCQkwRkY4QkRFQTFBRDRDRjcxMDBERkU4ODQgLyogSW5mZXJyZWRWYWx1ZS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQkxNEJENUEzMjBBM0U5MUY2MDBCQUY1OUMgLyogSlNWYWx1ZVJlZi5j
cHAgaW4gU291cmNlcyAqLywKIAkJCQkxNDdGMzlENzEwN0VDMzc2MDA0MjdBNDggLyogSlNFbnZp
cm9ubWVudFJlY29yZC5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk4NkUzQzYxQzE2N0JBQkVFMDA2
RDc2MEEgLyogSlNWaXJ0dWFsTWFjaGluZS5tbSBpbiBTb3VyY2VzICovLApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlzdC5qc29uCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZUxpc3QuanNvbgkocmV2aXNp
b24gMTgyNTgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0J5dGVjb2RlTGlz
dC5qc29uCSh3b3JraW5nIGNvcHkpCkBAIC02LDcgKzYsNiBAQAogICAgICAgICAgICAgeyAibmFt
ZSIgOiAib3BfZW50ZXIiLCAibGVuZ3RoIiA6IDEgfSwKICAgICAgICAgICAgIHsgIm5hbWUiIDog
Im9wX2NyZWF0ZV9sZXhpY2FsX2Vudmlyb25tZW50IiwgImxlbmd0aCIgOiAzIH0sCiAgICAgICAg
ICAgICB7ICJuYW1lIiA6ICJvcF9nZXRfc2NvcGUiLCAibGVuZ3RoIiA6IDIgfSwKLSAgICAgICAg
ICAgIHsgIm5hbWUiIDogIm9wX3RvdWNoX2VudHJ5IiwgImxlbmd0aCIgOiAxIH0sCiAgICAgICAg
ICAgICB7ICJuYW1lIiA6ICJvcF9jcmVhdGVfZGlyZWN0X2FyZ3VtZW50cyIsICJsZW5ndGgiIDog
MiB9LAogICAgICAgICAgICAgeyAibmFtZSIgOiAib3BfY3JlYXRlX3Njb3BlZF9hcmd1bWVudHMi
LCAibGVuZ3RoIiA6IDMgfSwKICAgICAgICAgICAgIHsgIm5hbWUiIDogIm9wX2NyZWF0ZV9vdXRf
b2ZfYmFuZF9hcmd1bWVudHMiLCAibGVuZ3RoIiA6IDIgfSwKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZVVzZURlZi5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9CeXRlY29kZVVzZURlZi5oCShyZXZpc2lvbiAxODI1ODIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQnl0ZWNvZGVVc2VEZWYuaAkod29y
a2luZyBjb3B5KQpAQCAtNTAsNyArNTAsNiBAQCB2b2lkIGNvbXB1dGVVc2VzRm9yQnl0ZWNvZGVP
ZmZzZXQoCiAgICAgY2FzZSBvcF9uZXdfb2JqZWN0OgogICAgIGNhc2Ugb3BfZW50ZXI6CiAgICAg
Y2FzZSBvcF9jYXRjaDoKLSAgICBjYXNlIG9wX3RvdWNoX2VudHJ5OgogICAgIGNhc2Ugb3BfcHJv
ZmlsZV9jb250cm9sX2Zsb3c6CiAgICAgY2FzZSBvcF9jcmVhdGVfZGlyZWN0X2FyZ3VtZW50czoK
ICAgICBjYXNlIG9wX2NyZWF0ZV9vdXRfb2ZfYmFuZF9hcmd1bWVudHM6CkBAIC0yNzgsNyArMjc3
LDYgQEAgdm9pZCBjb21wdXRlRGVmc0ZvckJ5dGVjb2RlT2Zmc2V0KENvZGVCbAogICAgIGNhc2Ug
b3BfcHV0X2J5X2luZGV4OgogICAgIGNhc2Ugb3BfcHJvZmlsZV90eXBlOgogICAgIGNhc2Ugb3Bf
cHJvZmlsZV9jb250cm9sX2Zsb3c6Ci0gICAgY2FzZSBvcF90b3VjaF9lbnRyeToKICAgICBjYXNl
IG9wX3B1dF90b19hcmd1bWVudHM6CiAjZGVmaW5lIExMSU5UX0hFTFBFUl9PUENPREVTKG9wY29k
ZSwgbGVuZ3RoKSBjYXNlIG9wY29kZToKICAgICAgICAgRk9SX0VBQ0hfTExJTlRfT1BDT0RFX0VY
VEVOU0lPTihMTElOVF9IRUxQRVJfT1BDT0RFUyk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAkocmV2aXNpb24gMTgyNTgyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTc1OCwxMCArNzU4LDYgQEAgdm9pZCBDb2RlQmxvY2s6OmR1bXBCeXRlY29kZSgKICAgICAgICAg
ICAgIHByaW50TG9jYXRpb25BbmRPcChvdXQsIGV4ZWMsIGxvY2F0aW9uLCBpdCwgImVudGVyIik7
CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICBjYXNlIG9wX3RvdWNoX2Vu
dHJ5OiB7Ci0gICAgICAgICAgICBwcmludExvY2F0aW9uQW5kT3Aob3V0LCBleGVjLCBsb2NhdGlv
biwgaXQsICJ0b3VjaF9lbnRyeSIpOwotICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgIH0KICAg
ICAgICAgY2FzZSBvcF9jcmVhdGVfbGV4aWNhbF9lbnZpcm9ubWVudDogewogICAgICAgICAgICAg
aW50IHIwID0gKCsraXQpLT51Lm9wZXJhbmQ7CiAgICAgICAgICAgICBpbnQgcjEgPSAoKytpdCkt
PnUub3BlcmFuZDsKQEAgLTE5NTcsNyArMTk1Myw3IEBAIENvZGVCbG9jazo6Q29kZUJsb2NrKFNj
cmlwdEV4ZWN1dGFibGUqIG8KICAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgNF0udS5vcGVy
YW5kID0gb3AudHlwZTsKICAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgNV0udS5vcGVyYW5k
ID0gb3AuZGVwdGg7CiAgICAgICAgICAgICBpZiAob3AubGV4aWNhbEVudmlyb25tZW50KQotICAg
ICAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgNl0udS5sZXhpY2FsRW52aXJvbm1lbnQuc2V0
KCp2bSgpLCBvd25lckV4ZWN1dGFibGUsIG9wLmxleGljYWxFbnZpcm9ubWVudCk7CisgICAgICAg
ICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyA2XS51LnN5bWJvbFRhYmxlLnNldCgqdm0oKSwgb3du
ZXJFeGVjdXRhYmxlLCBvcC5sZXhpY2FsRW52aXJvbm1lbnQtPnN5bWJvbFRhYmxlKCkpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KIApAQCAtMTk4NSw3ICsxOTgxLDYgQEAgQ29kZUJs
b2NrOjpDb2RlQmxvY2soU2NyaXB0RXhlY3V0YWJsZSogbwogICAgICAgICAgICAgZWxzZSBpZiAo
b3Auc3RydWN0dXJlKQogICAgICAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgNV0udS5zdHJ1
Y3R1cmUuc2V0KCp2bSgpLCBvd25lckV4ZWN1dGFibGUsIG9wLnN0cnVjdHVyZSk7CiAgICAgICAg
ICAgICBpbnN0cnVjdGlvbnNbaSArIDZdLnUucG9pbnRlciA9IHJlaW50ZXJwcmV0X2Nhc3Q8dm9p
ZCo+KG9wLm9wZXJhbmQpOwotCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQogCkBAIC0y
MDAxLDcgKzE5OTYsNyBAQCBDb2RlQmxvY2s6OkNvZGVCbG9jayhTY3JpcHRFeGVjdXRhYmxlKiBv
CiAgICAgICAgICAgICAgICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1fc3ltYm9s
VGFibGUtPm1fbG9jayk7CiAgICAgICAgICAgICAgICAgICAgIFN5bWJvbFRhYmxlOjpNYXA6Oml0
ZXJhdG9yIGl0ZXIgPSBtX3N5bWJvbFRhYmxlLT5maW5kKGxvY2tlciwgdWlkKTsKICAgICAgICAg
ICAgICAgICAgICAgQVNTRVJUKGl0ZXIgIT0gbV9zeW1ib2xUYWJsZS0+ZW5kKGxvY2tlcikpOwot
ICAgICAgICAgICAgICAgICAgICBpdGVyLT52YWx1ZS5wcmVwYXJlVG9XYXRjaChzeW1ib2xUYWJs
ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgaXRlci0+dmFsdWUucHJlcGFyZVRvV2F0Y2goKTsK
ICAgICAgICAgICAgICAgICAgICAgaW5zdHJ1Y3Rpb25zW2kgKyA1XS51LndhdGNocG9pbnRTZXQg
PSBpdGVyLT52YWx1ZS53YXRjaHBvaW50U2V0KCk7CiAgICAgICAgICAgICAgICAgfSBlbHNlCiAg
ICAgICAgICAgICAgICAgICAgIGluc3RydWN0aW9uc1tpICsgNV0udS53YXRjaHBvaW50U2V0ID0g
bnVsbHB0cjsKQEAgLTI1NDYsMTIgKzI1NDEsMTUgQEAgdm9pZCBDb2RlQmxvY2s6OmZpbmFsaXpl
VW5jb25kaXRpb25hbGx5KAogICAgICAgICAgICAgICAgICAgICBjdXJJbnN0cnVjdGlvblszXS51
LnRvVGhpc1N0YXR1cywgVG9UaGlzQ2xlYXJlZEJ5R0MpOwogICAgICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICAgICAgY2FzZSBvcF9yZXNvbHZlX3Njb3BlOiB7Ci0gICAgICAgICAgICAgICAg
V3JpdGVCYXJyaWVyQmFzZTxKU0xleGljYWxFbnZpcm9ubWVudD4mIGxleGljYWxFbnZpcm9ubWVu
dCA9IGN1ckluc3RydWN0aW9uWzZdLnUubGV4aWNhbEVudmlyb25tZW50OwotICAgICAgICAgICAg
ICAgIGlmICghbGV4aWNhbEVudmlyb25tZW50IHx8IEhlYXA6OmlzTWFya2VkKGxleGljYWxFbnZp
cm9ubWVudC5nZXQoKSkpCisgICAgICAgICAgICAgICAgLy8gUmlnaHQgbm93IHRoaXMgaXNuJ3Qg
c3RyaWN0bHkgbmVjZXNzYXJ5LiBBbnkgc3ltYm9sIHRhYmxlcyB0aGF0IHRoaXMgd2lsbCByZWZl
ciB0bworICAgICAgICAgICAgICAgIC8vIGFyZSBmb3Igb3V0ZXIgZnVuY3Rpb25zLCBhbmQgd2Ug
cmVmZXIgdG8gdGhvc2UgZnVuY3Rpb25zIHN0cm9uZ2x5LCBhbmQgdGhleSByZWZlcgorICAgICAg
ICAgICAgICAgIC8vIHRvIHRoZSBzeW1ib2wgdGFibGUgc3Ryb25nbHkuIEJ1dCBpdCdzIG5pY2Ug
dG8gYmUgb24gdGhlIHNhZmUgc2lkZS4KKyAgICAgICAgICAgICAgICBXcml0ZUJhcnJpZXJCYXNl
PFN5bWJvbFRhYmxlPiYgc3ltYm9sVGFibGUgPSBjdXJJbnN0cnVjdGlvbls2XS51LnN5bWJvbFRh
YmxlOworICAgICAgICAgICAgICAgIGlmICghc3ltYm9sVGFibGUgfHwgSGVhcDo6aXNNYXJrZWQo
c3ltYm9sVGFibGUuZ2V0KCkpKQogICAgICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAg
ICAgICAgICBpZiAoT3B0aW9uczo6dmVyYm9zZU9TUigpKQotICAgICAgICAgICAgICAgICAgICBk
YXRhTG9nRigiQ2xlYXJpbmcgZGVhZCBsZXhpY2FsRW52aXJvbm1lbnQgJXAuXG4iLCBsZXhpY2Fs
RW52aXJvbm1lbnQuZ2V0KCkpOwotICAgICAgICAgICAgICAgIGxleGljYWxFbnZpcm9ubWVudC5j
bGVhcigpOworICAgICAgICAgICAgICAgICAgICBkYXRhTG9nRigiQ2xlYXJpbmcgZGVhZCBzeW1i
b2xUYWJsZSAlcC5cbiIsIHN5bWJvbFRhYmxlLmdldCgpKTsKKyAgICAgICAgICAgICAgICBzeW1i
b2xUYWJsZS5jbGVhcigpOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQog
ICAgICAgICAgICAgY2FzZSBvcF9nZXRfZnJvbV9zY29wZToKQEAgLTM4MTUsNiArMzgxMywxOCBA
QCBTdHJpbmcgQ29kZUJsb2NrOjpuYW1lRm9yUmVnaXN0ZXIoVmlydHVhCiAgICAgcmV0dXJuICIi
OwogfQogCitWYWx1ZVByb2ZpbGUqIENvZGVCbG9jazo6dmFsdWVQcm9maWxlRm9yQnl0ZWNvZGVP
ZmZzZXQoaW50IGJ5dGVjb2RlT2Zmc2V0KQoreworICAgIFZhbHVlUHJvZmlsZSogcmVzdWx0ID0g
YmluYXJ5U2VhcmNoPFZhbHVlUHJvZmlsZSwgaW50PigKKyAgICAgICAgbV92YWx1ZVByb2ZpbGVz
LCBtX3ZhbHVlUHJvZmlsZXMuc2l6ZSgpLCBieXRlY29kZU9mZnNldCwKKyAgICAgICAgZ2V0VmFs
dWVQcm9maWxlQnl0ZWNvZGVPZmZzZXQ8VmFsdWVQcm9maWxlPik7CisgICAgQVNTRVJUKHJlc3Vs
dC0+bV9ieXRlY29kZU9mZnNldCAhPSAtMSk7CisgICAgQVNTRVJUKGluc3RydWN0aW9ucygpW2J5
dGVjb2RlT2Zmc2V0ICsgb3Bjb2RlTGVuZ3RoKAorICAgICAgICBtX3ZtLT5pbnRlcnByZXRlci0+
Z2V0T3Bjb2RlSUQoCisgICAgICAgICAgICBpbnN0cnVjdGlvbnMoKVtieXRlY29kZU9mZnNldF0u
dS5vcGNvZGUpKSAtIDFdLnUucHJvZmlsZSA9PSByZXN1bHQpOworICAgIHJldHVybiByZXN1bHQ7
Cit9CisKIHZvaWQgQ29kZUJsb2NrOjp2YWxpZGF0ZSgpCiB7CiAgICAgQnl0ZWNvZGVMaXZlbmVz
c0FuYWx5c2lzIGxpdmVuZXNzKHRoaXMpOyAvLyBDb21wdXRlIGRpcmVjdGx5IGZyb20gc2NyYXRj
aCBzbyBpdCBkb2Vzbid0IGVmZmVjdCBDb2RlQmxvY2sgZm9vdHByaW50LgpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkocmV2aXNpb24gMTgyNTgyKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zODYsMTcgKzM4Niw3IEBAIHB1YmxpYzoKIAogICAgIHVuc2lnbmVkIG51bWJlck9m
VmFsdWVQcm9maWxlcygpIHsgcmV0dXJuIG1fdmFsdWVQcm9maWxlcy5zaXplKCk7IH0KICAgICBW
YWx1ZVByb2ZpbGUqIHZhbHVlUHJvZmlsZShpbnQgaW5kZXgpIHsgcmV0dXJuICZtX3ZhbHVlUHJv
ZmlsZXNbaW5kZXhdOyB9Ci0gICAgVmFsdWVQcm9maWxlKiB2YWx1ZVByb2ZpbGVGb3JCeXRlY29k
ZU9mZnNldChpbnQgYnl0ZWNvZGVPZmZzZXQpCi0gICAgewotICAgICAgICBWYWx1ZVByb2ZpbGUq
IHJlc3VsdCA9IGJpbmFyeVNlYXJjaDxWYWx1ZVByb2ZpbGUsIGludD4oCi0gICAgICAgICAgICBt
X3ZhbHVlUHJvZmlsZXMsIG1fdmFsdWVQcm9maWxlcy5zaXplKCksIGJ5dGVjb2RlT2Zmc2V0LAot
ICAgICAgICAgICAgZ2V0VmFsdWVQcm9maWxlQnl0ZWNvZGVPZmZzZXQ8VmFsdWVQcm9maWxlPik7
Ci0gICAgICAgIEFTU0VSVChyZXN1bHQtPm1fYnl0ZWNvZGVPZmZzZXQgIT0gLTEpOwotICAgICAg
ICBBU1NFUlQoaW5zdHJ1Y3Rpb25zKClbYnl0ZWNvZGVPZmZzZXQgKyBvcGNvZGVMZW5ndGgoCi0g
ICAgICAgICAgICBtX3ZtLT5pbnRlcnByZXRlci0+Z2V0T3Bjb2RlSUQoCi0gICAgICAgICAgICAg
ICAgaW5zdHJ1Y3Rpb25zKClbYnl0ZWNvZGVPZmZzZXRdLnUub3Bjb2RlKSkgLSAxXS51LnByb2Zp
bGUgPT0gcmVzdWx0KTsKLSAgICAgICAgcmV0dXJuIHJlc3VsdDsKLSAgICB9CisgICAgVmFsdWVQ
cm9maWxlKiB2YWx1ZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChpbnQgYnl0ZWNvZGVPZmZzZXQp
OwogICAgIFNwZWN1bGF0ZWRUeXBlIHZhbHVlUHJvZmlsZVByZWRpY3Rpb25Gb3JCeXRlY29kZU9m
ZnNldChjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJiBsb2NrZXIsIGludCBieXRlY29kZU9mZnNl
dCkKICAgICB7CiAgICAgICAgIHJldHVybiB2YWx1ZVByb2ZpbGVGb3JCeXRlY29kZU9mZnNldChi
eXRlY29kZU9mZnNldCktPmNvbXB1dGVVcGRhdGVkUHJlZGljdGlvbihsb2NrZXIpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4uY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlT3JpZ2luLmNwcAkocmV2aXNp
b24gMTgyNTgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVPcmlnaW4u
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDEsNiArMTQxLDE4IEBAIHZvaWQgQ29kZU9yaWdpbjo6
ZHVtcEluQ29udGV4dChQcmludFN0cmUKICAgICBkdW1wKG91dCk7CiB9CiAKK0pTRnVuY3Rpb24q
IElubGluZUNhbGxGcmFtZTo6Y2FsbGVlQ29uc3RhbnQoKSBjb25zdAoreworICAgIGlmIChjYWxs
ZWVSZWNvdmVyeS5pc0NvbnN0YW50KCkpCisgICAgICAgIHJldHVybiBqc0Nhc3Q8SlNGdW5jdGlv
bio+KGNhbGxlZVJlY292ZXJ5LmNvbnN0YW50KCkpOworICAgIHJldHVybiBudWxscHRyOworfQor
Cit2b2lkIElubGluZUNhbGxGcmFtZTo6dmlzaXRBZ2dyZWdhdGUoU2xvdFZpc2l0b3ImIHZpc2l0
b3IpCit7CisgICAgdmlzaXRvci5hcHBlbmQoJmV4ZWN1dGFibGUpOworfQorCiBKU0Z1bmN0aW9u
KiBJbmxpbmVDYWxsRnJhbWU6OmNhbGxlZUZvckNhbGxGcmFtZShFeGVjU3RhdGUqIGV4ZWMpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIGpzQ2FzdDxKU0Z1bmN0aW9uKj4oY2FsbGVlUmVjb3ZlcnkucmVj
b3ZlcihleGVjKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZU9y
aWdpbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2Rl
T3JpZ2luLmgJKHJldmlzaW9uIDE4MjU4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9Db2RlT3JpZ2luLmgJKHdvcmtpbmcgY29weSkKQEAgLTI4LDcgKzI4LDYgQEAKIAogI2lu
Y2x1ZGUgIkNvZGVCbG9ja0hhc2guaCIKICNpbmNsdWRlICJDb2RlU3BlY2lhbGl6YXRpb25LaW5k
LmgiCi0jaW5jbHVkZSAiSlNGdW5jdGlvbi5oIgogI2luY2x1ZGUgIlZhbHVlUmVjb3ZlcnkuaCIK
ICNpbmNsdWRlICJXcml0ZUJhcnJpZXIuaCIKICNpbmNsdWRlIDx3dGYvQml0VmVjdG9yLmg+CkBA
IC0yMDcsMTcgKzIwNiw4IEBAIHN0cnVjdCBJbmxpbmVDYWxsRnJhbWUgewogICAgIAogICAgIENv
ZGVTcGVjaWFsaXphdGlvbktpbmQgc3BlY2lhbGl6YXRpb25LaW5kKCkgY29uc3QgeyByZXR1cm4g
c3BlY2lhbGl6YXRpb25LaW5kRm9yKHN0YXRpY19jYXN0PEtpbmQ+KGtpbmQpKTsgfQogCi0gICAg
SlNGdW5jdGlvbiogY2FsbGVlQ29uc3RhbnQoKSBjb25zdAotICAgIHsKLSAgICAgICAgaWYgKGNh
bGxlZVJlY292ZXJ5LmlzQ29uc3RhbnQoKSkKLSAgICAgICAgICAgIHJldHVybiBqc0Nhc3Q8SlNG
dW5jdGlvbio+KGNhbGxlZVJlY292ZXJ5LmNvbnN0YW50KCkpOwotICAgICAgICByZXR1cm4gMDsK
LSAgICB9Ci0KLSAgICB2b2lkIHZpc2l0QWdncmVnYXRlKFNsb3RWaXNpdG9yJiB2aXNpdG9yKQot
ICAgIHsKLSAgICAgICAgdmlzaXRvci5hcHBlbmQoJmV4ZWN1dGFibGUpOwotICAgIH0KKyAgICBK
U0Z1bmN0aW9uKiBjYWxsZWVDb25zdGFudCgpIGNvbnN0OworICAgIHZvaWQgdmlzaXRBZ2dyZWdh
dGUoU2xvdFZpc2l0b3ImKTsKICAgICAKICAgICAvLyBHZXQgdGhlIGNhbGxlZSBnaXZlbiBhIG1h
Y2hpbmUgY2FsbCBmcmFtZSB0byB3aGljaCB0aGlzIElubGluZUNhbGxGcmFtZSBiZWxvbmdzLgog
ICAgIEpTRnVuY3Rpb24qIGNhbGxlZUZvckNhbGxGcmFtZShFeGVjU3RhdGUqKSBjb25zdDsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0cnVjdGlvbi5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbnN0cnVjdGlvbi5oCShyZXZp
c2lvbiAxODI1ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5zdHJ1Y3Rp
b24uaAkod29ya2luZyBjb3B5KQpAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkJhc2ljQmxv
Y2tMb2NhdGlvbi5oIgogI2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyLmgiCiAjaW5jbHVkZSAiT3Bj
b2RlLmgiCisjaW5jbHVkZSAiU3ltYm9sVGFibGUuaCIKICNpbmNsdWRlICJUeXBlTG9jYXRpb24u
aCIKICNpbmNsdWRlICJQcm9wZXJ0eVNsb3QuaCIKICNpbmNsdWRlICJTcGVjaWFsUG9pbnRlci5o
IgpAQCAtNDYsNyArNDcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIGNsYXNzIEFycmF5QWxsb2NhdGlv
blByb2ZpbGU7CiBjbGFzcyBBcnJheVByb2ZpbGU7CiBjbGFzcyBPYmplY3RBbGxvY2F0aW9uUHJv
ZmlsZTsKLWNsYXNzIFZhcmlhYmxlV2F0Y2hwb2ludFNldDsKK2NsYXNzIFdhdGNocG9pbnRTZXQ7
CiBzdHJ1Y3QgTExJbnRDYWxsTGlua0luZm87CiBzdHJ1Y3QgVmFsdWVQcm9maWxlOwogCkBAIC0x
MDYsNiArMTA3LDcgQEAgc3RydWN0IEluc3RydWN0aW9uIHsKICAgICAgICAgT3Bjb2RlIG9wY29k
ZTsKICAgICAgICAgaW50IG9wZXJhbmQ7CiAgICAgICAgIFdyaXRlQmFycmllckJhc2U8U3RydWN0
dXJlPiBzdHJ1Y3R1cmU7CisgICAgICAgIFdyaXRlQmFycmllckJhc2U8U3ltYm9sVGFibGU+IHN5
bWJvbFRhYmxlOwogICAgICAgICBXcml0ZUJhcnJpZXJCYXNlPFN0cnVjdHVyZUNoYWluPiBzdHJ1
Y3R1cmVDaGFpbjsKICAgICAgICAgV3JpdGVCYXJyaWVyQmFzZTxKU0NlbGw+IGpzQ2VsbDsKICAg
ICAgICAgV3JpdGVCYXJyaWVyPFVua25vd24+KiB2YXJpYWJsZVBvaW50ZXI7CkBAIC0xMTcsOCAr
MTE5LDcgQEAgc3RydWN0IEluc3RydWN0aW9uIHsKICAgICAgICAgQXJyYXlQcm9maWxlKiBhcnJh
eVByb2ZpbGU7CiAgICAgICAgIEFycmF5QWxsb2NhdGlvblByb2ZpbGUqIGFycmF5QWxsb2NhdGlv
blByb2ZpbGU7CiAgICAgICAgIE9iamVjdEFsbG9jYXRpb25Qcm9maWxlKiBvYmplY3RBbGxvY2F0
aW9uUHJvZmlsZTsKLSAgICAgICAgVmFyaWFibGVXYXRjaHBvaW50U2V0KiB3YXRjaHBvaW50U2V0
OwotICAgICAgICBXcml0ZUJhcnJpZXJCYXNlPEpTTGV4aWNhbEVudmlyb25tZW50PiBsZXhpY2Fs
RW52aXJvbm1lbnQ7CisgICAgICAgIFdhdGNocG9pbnRTZXQqIHdhdGNocG9pbnRTZXQ7CiAgICAg
ICAgIHZvaWQqIHBvaW50ZXI7CiAgICAgICAgIGJvb2wqIHByZWRpY2F0ZVBvaW50ZXI7CiAgICAg
ICAgIFRvVGhpc1N0YXR1cyB0b1RoaXNTdGF0dXM7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvYnl0ZWNvZGUvVmFyaWFibGVXYXRjaHBvaW50U2V0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFyaWFibGVXYXRjaHBvaW50U2V0LmNwcAkocmV2
aXNpb24gMTgyNTgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhcmlhYmxl
V2F0Y2hwb2ludFNldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEsNDkgKzAsMCBAQAotLyoKLSAq
IENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgot
ICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0
aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhh
dCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9k
dWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50
YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRp
b24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMg
SVMnJyBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQotICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBE
SVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgotICogQ09OVFJJQlVU
T1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9S
IFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lORVNT
IElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJ
QUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAot
ICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZ
IE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0Yg
VEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKLSAqLwotCi0jaW5jbHVkZSAiY29uZmln
LmgiCi0jaW5jbHVkZSAiVmFyaWFibGVXYXRjaHBvaW50U2V0LmgiCi0KLSNpbmNsdWRlICJKU0NJ
bmxpbmVzLmgiCi0KLW5hbWVzcGFjZSBKU0MgewotCi12b2lkIFZhcmlhYmxlV3JpdGVGaXJlRGV0
YWlsOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Ci17Ci0gICAgb3V0LnByaW50KCJXcml0
ZSB0byAiLCBtX25hbWUsICIgaW4gIiwgSlNWYWx1ZShtX29iamVjdCkpOwotfQotCi12b2lkIFZh
cmlhYmxlV2F0Y2hwb2ludFNldDo6bm90aWZ5V3JpdGUoVk0mIHZtLCBKU1ZhbHVlIHZhbHVlLCBK
U09iamVjdCogYmFzZU9iamVjdCwgY29uc3QgUHJvcGVydHlOYW1lJiBwcm9wZXJ0eU5hbWUpCi17
Ci0gICAgbm90aWZ5V3JpdGUodm0sIHZhbHVlLCBWYXJpYWJsZVdyaXRlRmlyZURldGFpbChiYXNl
T2JqZWN0LCBwcm9wZXJ0eU5hbWUpKTsKLX0KLQotdm9pZCBWYXJpYWJsZVdhdGNocG9pbnRTZXQ6
Om5vdGlmeVdyaXRlKFZNJiB2bSwgSlNWYWx1ZSB2YWx1ZSwgY29uc3QgY2hhciogcmVhc29uKQot
ewotICAgIG5vdGlmeVdyaXRlKHZtLCB2YWx1ZSwgU3RyaW5nRmlyZURldGFpbChyZWFzb24pKTsK
LX0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCi0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9WYXJpYWJsZVdhdGNocG9pbnRTZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFyaWFibGVXYXRjaHBvaW50U2V0LmgJKHJldmlzaW9uIDE4
MjU4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9WYXJpYWJsZVdhdGNocG9p
bnRTZXQuaAkod29ya2luZyBjb3B5KQpAQCAtMSwxMTAgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAxMi0yMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLSAqCi0gKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKLSAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucwotICogYXJlIG1ldDoKLSAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCi0gKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQotICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
LSAqCi0gKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
LSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5kZWYgVmFyaWFibGVXYXRj
aHBvaW50U2V0X2gKLSNkZWZpbmUgVmFyaWFibGVXYXRjaHBvaW50U2V0X2gKLQotI2luY2x1ZGUg
IldhdGNocG9pbnQuaCIKLSNpbmNsdWRlICJXcml0ZUJhcnJpZXIuaCIKLQotbmFtZXNwYWNlIEpT
QyB7Ci0KLWNsYXNzIEpTT2JqZWN0OwotY2xhc3MgU3ltYm9sVGFibGU7Ci0KLWNsYXNzIFZhcmlh
YmxlV3JpdGVGaXJlRGV0YWlsIDogcHVibGljIEZpcmVEZXRhaWwgewotcHVibGljOgotICAgIFZh
cmlhYmxlV3JpdGVGaXJlRGV0YWlsKEpTT2JqZWN0KiBvYmplY3QsIGNvbnN0IFByb3BlcnR5TmFt
ZSYgbmFtZSkKLSAgICAgICAgOiBtX29iamVjdChvYmplY3QpCi0gICAgICAgICwgbV9uYW1lKG5h
bWUpCi0gICAgewotICAgIH0KLSAgICAKLSAgICB2aXJ0dWFsIHZvaWQgZHVtcChQcmludFN0cmVh
bSYpIGNvbnN0IG92ZXJyaWRlOwotCi1wcml2YXRlOgotICAgIEpTT2JqZWN0KiBtX29iamVjdDsK
LSAgICBjb25zdCBQcm9wZXJ0eU5hbWUmIG1fbmFtZTsKLX07Ci0KLWNsYXNzIFZhcmlhYmxlV2F0
Y2hwb2ludFNldCA6IHB1YmxpYyBXYXRjaHBvaW50U2V0IHsKLSAgICBmcmllbmQgY2xhc3MgTExJ
bnRPZmZzZXRzRXh0cmFjdG9yOwotcHVibGljOgotICAgIFZhcmlhYmxlV2F0Y2hwb2ludFNldChT
eW1ib2xUYWJsZSYgc3ltYm9sVGFibGUpCi0gICAgICAgIDogV2F0Y2hwb2ludFNldChDbGVhcldh
dGNocG9pbnQpCi0gICAgICAgICwgbV9zeW1ib2xUYWJsZShzeW1ib2xUYWJsZSkKLSAgICB7Ci0g
ICAgfQotICAgIAotICAgIH5WYXJpYWJsZVdhdGNocG9pbnRTZXQoKSB7IH0KLSAgICAKLSAgICAv
LyBGb3IgdGhlIHB1cnBvc2Ugb2YgZGVjaWRpbmcgd2hldGhlciBvciBub3QgdG8gd2F0Y2ggdGhp
cyB2YXJpYWJsZSwgeW91IG9ubHkgbmVlZAotICAgIC8vIHRvIGluc3BlY3QgaW5mZXJyZWRWYWx1
ZSgpLiBJZiB0aGlzIHJldHVybnMgc29tZXRoaW5nIG90aGVyIHRoYW4gdGhlIGVtcHR5Ci0gICAg
Ly8gdmFsdWUsIHRoZW4gaXQgbWVhbnMgdGhhdCBhdCBhbGwgZnV0dXJlIHNhZmVwb2ludHMsIHRo
aXMgd2F0Y2hwb2ludCBzZXQgd2lsbCBiZQotICAgIC8vIGluIG9uZSBvZiB0aGVzZSBzdGF0ZXM6
Ci0gICAgLy8KLSAgICAvLyAgICBJc1dhdGNoZWQ6IGluIHRoaXMgY2FzZSwgdGhlIHZhcmlhYmxl
J3MgdmFsdWUgbXVzdCBzdGlsbCBiZSB0aGUKLSAgICAvLyAgICAgICAgaW5mZXJyZWRWYWx1ZS4K
LSAgICAvLwotICAgIC8vICAgIElzSW52YWxpZGF0ZWQ6IGluIHRoaXMgY2FzZSB0aGUgdmFyaWFi
bGUncyB2YWx1ZSBtYXkgYmUgYW55dGhpbmcgYnV0IHlvdSdsbAotICAgIC8vICAgICAgICBlaXRo
ZXIgbm90aWNlIHRoYXQgaXQncyBpbnZhbGlkYXRlZCBhbmQgbm90IGluc3RhbGwgdGhlIHdhdGNo
cG9pbnQsIG9yCi0gICAgLy8gICAgICAgIHlvdSB3aWxsIGhhdmUgYmVlbiBub3RpZmllZCB0aGF0
IHRoZSB3YXRjaHBvaW50IHdhcyBmaXJlZC4KLSAgICBKU1ZhbHVlIGluZmVycmVkVmFsdWUoKSBj
b25zdCB7IHJldHVybiBtX2luZmVycmVkVmFsdWUuZ2V0KCk7IH0KLSAgICAKLSAgICB2b2lkIG5v
dGlmeVdyaXRlKFZNJiwgSlNWYWx1ZSwgY29uc3QgRmlyZURldGFpbCYpOwotICAgIEpTX0VYUE9S
VF9QUklWQVRFIHZvaWQgbm90aWZ5V3JpdGUoVk0mLCBKU1ZhbHVlLCBKU09iamVjdCogYmFzZU9i
amVjdCwgY29uc3QgUHJvcGVydHlOYW1lJik7Ci0gICAgdm9pZCBub3RpZnlXcml0ZShWTSYsIEpT
VmFsdWUsIGNvbnN0IGNoYXIqIHJlYXNvbik7Ci0gICAgCi0gICAgdm9pZCBpbnZhbGlkYXRlKGNv
bnN0IEZpcmVEZXRhaWwmIGRldGFpbCkKLSAgICB7Ci0gICAgICAgIG1faW5mZXJyZWRWYWx1ZS5j
bGVhcigpOwotICAgICAgICBXYXRjaHBvaW50U2V0OjppbnZhbGlkYXRlKGRldGFpbCk7Ci0gICAg
fQotICAgIAotICAgIHZvaWQgZmluYWxpemVVbmNvbmRpdGlvbmFsbHkoY29uc3QgRmlyZURldGFp
bCYgZGV0YWlsKQotICAgIHsKLSAgICAgICAgQVNTRVJUKCEhbV9pbmZlcnJlZFZhbHVlID09IChz
dGF0ZSgpID09IElzV2F0Y2hlZCkpOwotICAgICAgICBpZiAoIW1faW5mZXJyZWRWYWx1ZSkKLSAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgSlNWYWx1ZSBpbmZlcnJlZFZhbHVlID0gbV9pbmZl
cnJlZFZhbHVlLmdldCgpOwotICAgICAgICBpZiAoIWluZmVycmVkVmFsdWUuaXNDZWxsKCkpCi0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIEpTQ2VsbCogY2VsbCA9IGluZmVycmVkVmFsdWUu
YXNDZWxsKCk7Ci0gICAgICAgIGlmIChIZWFwOjppc01hcmtlZChjZWxsKSkKLSAgICAgICAgICAg
IHJldHVybjsKLSAgICAgICAgaW52YWxpZGF0ZShkZXRhaWwpOwotICAgIH0KLQotICAgIFdyaXRl
QmFycmllcjxVbmtub3duPiogYWRkcmVzc09mSW5mZXJyZWRWYWx1ZSgpIHsgcmV0dXJuICZtX2lu
ZmVycmVkVmFsdWU7IH0KLSAgICAKLXByaXZhdGU6Ci0gICAgU3ltYm9sVGFibGUmIG1fc3ltYm9s
VGFibGU7Ci0gICAgV3JpdGVCYXJyaWVyPFVua25vd24+IG1faW5mZXJyZWRWYWx1ZTsKLX07Ci0K
LX0gLy8gbmFtZXNwYWNlIEpTQwotCi0jZW5kaWYgLy8gVmFyaWFibGVXYXRjaHBvaW50U2V0X2gK
LQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhcmlhYmxlV2F0Y2hwb2lu
dFNldElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvVmFyaWFibGVXYXRjaHBvaW50U2V0SW5saW5lcy5oCShyZXZpc2lvbiAxODI1ODIpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFyaWFibGVXYXRjaHBvaW50U2V0SW5saW5l
cy5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDYwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMp
IDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAot
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQot
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKLSAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAotICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAotICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCi0gKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCi0gKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKLSAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQotICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4gCi0gKi8KLQotI2lmbmRlZiBWYXJpYWJsZVdhdGNocG9pbnRTZXRJ
bmxpbmVzX2gKLSNkZWZpbmUgVmFyaWFibGVXYXRjaHBvaW50U2V0SW5saW5lc19oCi0KLSNpbmNs
dWRlICJTeW1ib2xUYWJsZS5oIgotI2luY2x1ZGUgIlZhcmlhYmxlV2F0Y2hwb2ludFNldC5oIgot
Ci1uYW1lc3BhY2UgSlNDIHsKLQotaW5saW5lIHZvaWQgVmFyaWFibGVXYXRjaHBvaW50U2V0Ojpu
b3RpZnlXcml0ZShWTSYgdm0sIEpTVmFsdWUgdmFsdWUsIGNvbnN0IEZpcmVEZXRhaWwmIGRldGFp
bCkKLXsKLSAgICBBU1NFUlQoISF2YWx1ZSk7Ci0gICAgc3dpdGNoIChzdGF0ZSgpKSB7Ci0gICAg
Y2FzZSBDbGVhcldhdGNocG9pbnQ6Ci0gICAgICAgIG1faW5mZXJyZWRWYWx1ZS5zZXQodm0sICZt
X3N5bWJvbFRhYmxlLCB2YWx1ZSk7Ci0gICAgICAgIHN0YXJ0V2F0Y2hpbmcoKTsKLSAgICAgICAg
cmV0dXJuOwotCi0gICAgY2FzZSBJc1dhdGNoZWQ6Ci0gICAgICAgIEFTU0VSVCghIW1faW5mZXJy
ZWRWYWx1ZSk7Ci0gICAgICAgIGlmICh2YWx1ZSA9PSBtX2luZmVycmVkVmFsdWUuZ2V0KCkpCi0g
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGludmFsaWRhdGUoZGV0YWlsKTsKLSAgICAgICAg
cmV0dXJuOwotICAgICAgICAgICAgCi0gICAgY2FzZSBJc0ludmFsaWRhdGVkOgotICAgICAgICBB
U1NFUlQoIW1faW5mZXJyZWRWYWx1ZSk7Ci0gICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgICAg
IAotICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotfQotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQot
I2VuZGlmIC8vIFZhcmlhYmxlV2F0Y2hwb2ludFNldElubGluZXNfaApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhcmlhYmxlV3JpdGVGaXJlRGV0YWlsLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvVmFyaWFibGVXcml0ZUZpcmVE
ZXRhaWwuY3BwCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L1ZhcmlhYmxlV3JpdGVGaXJlRGV0YWlsLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDQ0
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEu
IFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0g
bXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxp
c3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICog
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExF
IElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJ
RVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBV
UlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisg
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJWYXJpYWJsZVdyaXRlRmlyZURldGFpbC5oIgorCisj
aW5jbHVkZSAiSlNDSW5saW5lcy5oIgorCituYW1lc3BhY2UgSlNDIHsKKwordm9pZCBWYXJpYWJs
ZVdyaXRlRmlyZURldGFpbDo6ZHVtcChQcmludFN0cmVhbSYgb3V0KSBjb25zdAoreworICAgIG91
dC5wcmludCgiV3JpdGUgdG8gIiwgbV9uYW1lLCAiIGluICIsIEpTVmFsdWUobV9vYmplY3QpKTsK
K30KKwordm9pZCBWYXJpYWJsZVdyaXRlRmlyZURldGFpbDo6dG91Y2goV2F0Y2hwb2ludFNldCog
c2V0LCBKU09iamVjdCogb2JqZWN0LCBjb25zdCBQcm9wZXJ0eU5hbWUmIG5hbWUpCit7CisgICAg
c2V0LT50b3VjaChWYXJpYWJsZVdyaXRlRmlyZURldGFpbChvYmplY3QsIG5hbWUpKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgSlNDCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9WYXJpYWJsZVdyaXRlRmlyZURldGFpbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9WYXJpYWJsZVdyaXRlRmlyZURldGFpbC5oCShyZXZpc2lvbiAwKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1ZhcmlhYmxlV3JpdGVGaXJlRGV0YWls
LmgJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4g
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIFZhcmlhYmxlV3JpdGVGaXJlRGV0YWls
X2gKKyNkZWZpbmUgVmFyaWFibGVXcml0ZUZpcmVEZXRhaWxfaAorCisjaW5jbHVkZSAiV2F0Y2hw
b2ludC5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgSlNPYmplY3Q7CitjbGFzcyBQcm9w
ZXJ0eU5hbWU7CisKK2NsYXNzIFZhcmlhYmxlV3JpdGVGaXJlRGV0YWlsIDogcHVibGljIEZpcmVE
ZXRhaWwgeworcHVibGljOgorICAgIFZhcmlhYmxlV3JpdGVGaXJlRGV0YWlsKEpTT2JqZWN0KiBv
YmplY3QsIGNvbnN0IFByb3BlcnR5TmFtZSYgbmFtZSkKKyAgICAgICAgOiBtX29iamVjdChvYmpl
Y3QpCisgICAgICAgICwgbV9uYW1lKG5hbWUpCisgICAgeworICAgIH0KKyAgICAKKyAgICB2aXJ0
dWFsIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0IG92ZXJyaWRlOworICAgIAorICAgIEpT
X0VYUE9SVF9QUklWQVRFIHN0YXRpYyB2b2lkIHRvdWNoKFdhdGNocG9pbnRTZXQqLCBKU09iamVj
dCosIGNvbnN0IFByb3BlcnR5TmFtZSYpOworCitwcml2YXRlOgorICAgIEpTT2JqZWN0KiBtX29i
amVjdDsKKyAgICBjb25zdCBQcm9wZXJ0eU5hbWUmIG1fbmFtZTsKK307CisKK30gLy8gbmFtZXNw
YWNlIEpTQworCisjZW5kaWYgLy8gVmFyaWFibGVXcml0ZUZpcmVEZXRhaWxfaApJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1dhdGNocG9pbnQuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvV2F0Y2hwb2ludC5oCShyZXZpc2lvbiAxODI1
ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvV2F0Y2hwb2ludC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC04Nyw2ICs4NywxMiBAQCBwdWJsaWM6CiAgICAgSlNfRVhQT1JUX1BSSVZB
VEUgV2F0Y2hwb2ludFNldChXYXRjaHBvaW50U3RhdGUpOwogICAgIEpTX0VYUE9SVF9QUklWQVRF
IH5XYXRjaHBvaW50U2V0KCk7IC8vIE5vdGUgdGhhdCB0aGlzIHdpbGwgbm90IGZpcmUgYW55IG9m
IHRoZSB3YXRjaHBvaW50czsgaWYgeW91IG5lZWQgdG8ga25vdyB3aGVuIGEgV2F0Y2hwb2ludFNl
dCBkaWVzIHRoZW4geW91IG5lZWQgYSBzZXBhcmF0ZSBtZWNoYW5pc20gZm9yIHRoaXMuCiAgICAg
CisgICAgLy8gRmFzdCB3YXkgb2YgZ2V0dGluZyB0aGUgc3RhdGUsIHdoaWNoIG9ubHkgd29ya3Mg
ZnJvbSB0aGUgbWFpbiB0aHJlYWQuCisgICAgV2F0Y2hwb2ludFN0YXRlIHN0YXRlT25NYWluVGhy
ZWFkKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxXYXRjaHBvaW50
U3RhdGU+KG1fc3RhdGUpOworICAgIH0KKyAgICAKICAgICAvLyBJdCBpcyBzYWZlIHRvIGNhbGwg
dGhpcyBmcm9tIGFub3RoZXIgdGhyZWFkLiBJdCBtYXkgcmV0dXJuIGFuIG9sZAogICAgIC8vIHN0
YXRlLiBHdWFyYW50ZWVzIHRoYXQgaWYgKmZpcnN0KiByZWFkIHRoZSBzdGF0ZSgpIG9mIHRoZSB0
aGluZyBiZWluZwogICAgIC8vIHdhdGNoZWQgYW5kIGl0IHJldHVybmVkIElzV2F0Y2hlZCBhbmQg
KnNlY29uZCogeW91IGFjdHVhbGx5IHJlYWQgaXRzCkBAIC0xMjUsMjAgKzEzMSwyNCBAQCBwdWJs
aWM6CiAgICAgLy8gc2V0IHdhdGNocG9pbnRzIHRoYXQgd2UgYmVsaWV2ZSB3aWxsIGFjdHVhbGx5
IGJlIGZpcmVkLgogICAgIHZvaWQgc3RhcnRXYXRjaGluZygpCiAgICAgewotICAgICAgICBBU1NF
UlQoc3RhdGUoKSAhPSBJc0ludmFsaWRhdGVkKTsKKyAgICAgICAgQVNTRVJUKG1fc3RhdGUgIT0g
SXNJbnZhbGlkYXRlZCk7CisgICAgICAgIGlmIChtX3N0YXRlID09IElzV2F0Y2hlZCkKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKICAgICAgICAg
bV9zdGF0ZSA9IElzV2F0Y2hlZDsKKyAgICAgICAgV1RGOjpzdG9yZVN0b3JlRmVuY2UoKTsKICAg
ICB9CiAgICAgCiAgICAgdm9pZCBmaXJlQWxsKGNvbnN0IEZpcmVEZXRhaWwmIGRldGFpbCkKICAg
ICB7Ci0gICAgICAgIGlmIChMSUtFTFkoc3RhdGUoKSAhPSBJc1dhdGNoZWQpKQorICAgICAgICBp
ZiAoTElLRUxZKG1fc3RhdGUgIT0gSXNXYXRjaGVkKSkKICAgICAgICAgICAgIHJldHVybjsKICAg
ICAgICAgZmlyZUFsbFNsb3coZGV0YWlsKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBmaXJlQWxs
KGNvbnN0IGNoYXIqIHJlYXNvbikKICAgICB7Ci0gICAgICAgIGlmIChMSUtFTFkoc3RhdGUoKSAh
PSBJc1dhdGNoZWQpKQorICAgICAgICBpZiAoTElLRUxZKG1fc3RhdGUgIT0gSXNXYXRjaGVkKSkK
ICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgZmlyZUFsbFNsb3cocmVhc29uKTsKICAgICB9
CkBAIC0xNTEsMTMgKzE2MSwyMyBAQCBwdWJsaWM6CiAgICAgICAgICAgICBmaXJlQWxsKGRldGFp
bCk7CiAgICAgfQogICAgIAorICAgIHZvaWQgdG91Y2goY29uc3QgY2hhciogcmVhc29uKQorICAg
IHsKKyAgICAgICAgdG91Y2goU3RyaW5nRmlyZURldGFpbChyZWFzb24pKTsKKyAgICB9CisgICAg
CiAgICAgdm9pZCBpbnZhbGlkYXRlKGNvbnN0IEZpcmVEZXRhaWwmIGRldGFpbCkKICAgICB7CiAg
ICAgICAgIGlmIChzdGF0ZSgpID09IElzV2F0Y2hlZCkKICAgICAgICAgICAgIGZpcmVBbGwoZGV0
YWlsKTsKICAgICAgICAgbV9zdGF0ZSA9IElzSW52YWxpZGF0ZWQ7CiAgICAgfQotCisgICAgCisg
ICAgdm9pZCBpbnZhbGlkYXRlKGNvbnN0IGNoYXIqIHJlYXNvbikKKyAgICB7CisgICAgICAgIGlu
dmFsaWRhdGUoU3RyaW5nRmlyZURldGFpbChyZWFzb24pKTsKKyAgICB9CisgICAgCiAgICAgaW50
OF90KiBhZGRyZXNzT2ZTdGF0ZSgpIHsgcmV0dXJuICZtX3N0YXRlOyB9CiAgICAgaW50OF90KiBh
ZGRyZXNzT2ZTZXRJc05vdEVtcHR5KCkgeyByZXR1cm4gJm1fc2V0SXNOb3RFbXB0eTsgfQogICAg
IApAQCAtMjA5LDE4ICsyMjksMzQgQEAgcHVibGljOgogICAgICAgICBmcmVlRmF0KCk7CiAgICAg
fQogICAgIAorICAgIC8vIEZhc3Qgd2F5IG9mIGdldHRpbmcgdGhlIHN0YXRlLCB3aGljaCBvbmx5
IHdvcmtzIGZyb20gdGhlIG1haW4gdGhyZWFkLgorICAgIFdhdGNocG9pbnRTdGF0ZSBzdGF0ZU9u
TWFpblRocmVhZCgpIGNvbnN0CisgICAgeworICAgICAgICB1aW50cHRyX3QgZGF0YSA9IG1fZGF0
YTsKKyAgICAgICAgaWYgKGlzRmF0KGRhdGEpKQorICAgICAgICAgICAgcmV0dXJuIGZhdChkYXRh
KS0+c3RhdGVPbk1haW5UaHJlYWQoKTsKKyAgICAgICAgcmV0dXJuIGRlY29kZVN0YXRlKGRhdGEp
OworICAgIH0KKworICAgIC8vIEl0IGlzIHNhZmUgdG8gY2FsbCB0aGlzIGZyb20gYW5vdGhlciB0
aHJlYWQuIEl0IG1heSByZXR1cm4gYSBwcmlvciBzdGF0ZSwKKyAgICAvLyBidXQgdGhhdCBzaG91
bGQgYmUgZmluZSBzaW5jZSB5b3Ugc2hvdWxkIG9ubHkgcGVyZm9ybSBhY3Rpb25zIGJhc2VkIG9u
IHRoZQorICAgIC8vIHN0YXRlIGlmIHlvdSBhbHNvIGFkZCBhIHdhdGNocG9pbnQuCisgICAgV2F0
Y2hwb2ludFN0YXRlIHN0YXRlKCkgY29uc3QKKyAgICB7CisgICAgICAgIFdURjo6bG9hZExvYWRG
ZW5jZSgpOworICAgICAgICB1aW50cHRyX3QgZGF0YSA9IG1fZGF0YTsKKyAgICAgICAgV1RGOjps
b2FkTG9hZEZlbmNlKCk7CisgICAgICAgIGlmIChpc0ZhdChkYXRhKSkKKyAgICAgICAgICAgIHJl
dHVybiBmYXQoZGF0YSktPnN0YXRlKCk7CisgICAgICAgIHJldHVybiBkZWNvZGVTdGF0ZShkYXRh
KTsKKyAgICB9CisgICAgCiAgICAgLy8gSXQgaXMgc2FmZSB0byBjYWxsIHRoaXMgZnJvbSBhbm90
aGVyIHRocmVhZC4gIEl0IG1heSByZXR1cm4gZmFsc2UKICAgICAvLyBldmVuIGlmIHRoZSBzZXQg
YWN0dWFsbHkgaGFkIGJlZW4gaW52YWxpZGF0ZWQsIGJ1dCB0aGF0IG91Z2h0IHRvIGhhcHBlbgog
ICAgIC8vIG9ubHkgaW4gdGhlIGNhc2Ugb2YgcmFjZXMsIGFuZCBzaG91bGQgYmUgcmFyZS4KICAg
ICBib29sIGhhc0JlZW5JbnZhbGlkYXRlZCgpIGNvbnN0CiAgICAgewotICAgICAgICBXVEY6Omxv
YWRMb2FkRmVuY2UoKTsKLSAgICAgICAgdWludHB0cl90IGRhdGEgPSBtX2RhdGE7Ci0gICAgICAg
IGlmIChpc0ZhdChkYXRhKSkgewotICAgICAgICAgICAgV1RGOjpsb2FkTG9hZEZlbmNlKCk7Ci0g
ICAgICAgICAgICByZXR1cm4gZmF0KGRhdGEpLT5oYXNCZWVuSW52YWxpZGF0ZWQoKTsKLSAgICAg
ICAgfQotICAgICAgICByZXR1cm4gZGVjb2RlU3RhdGUoZGF0YSkgPT0gSXNJbnZhbGlkYXRlZDsK
KyAgICAgICAgcmV0dXJuIHN0YXRlKCkgPT0gSXNJbnZhbGlkYXRlZDsKICAgICB9CiAgICAgCiAg
ICAgLy8gTGlrZSBoYXNCZWVuSW52YWxpZGF0ZWQoKSwgbWF5IGJlIGNhbGxlZCBmcm9tIGFub3Ro
ZXIgdGhyZWFkLgpAQCAtMjUzLDYgKzI4OSwxNCBAQCBwdWJsaWM6CiAgICAgICAgIFdURjo6c3Rv
cmVTdG9yZUZlbmNlKCk7CiAgICAgfQogICAgIAorICAgIHZvaWQgaW52YWxpZGF0ZShjb25zdCBG
aXJlRGV0YWlsJiBkZXRhaWwpCisgICAgeworICAgICAgICBpZiAoaXNGYXQoKSkKKyAgICAgICAg
ICAgIGZhdCgpLT5pbnZhbGlkYXRlKGRldGFpbCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IG1fZGF0YSA9IGVuY29kZVN0YXRlKElzSW52YWxpZGF0ZWQpOworICAgIH0KKyAgICAKICAgICBK
U19FWFBPUlRfUFJJVkFURSB2b2lkIGZpcmVBbGwoY29uc3QgY2hhciogcmVhc29uKTsKICAgICAK
ICAgICB2b2lkIHRvdWNoKGNvbnN0IEZpcmVEZXRhaWwmIGRldGFpbCkKQEAgLTI2MSw3ICszMDUs
MTEgQEAgcHVibGljOgogICAgICAgICAgICAgZmF0KCktPnRvdWNoKGRldGFpbCk7CiAgICAgICAg
ICAgICByZXR1cm47CiAgICAgICAgIH0KLSAgICAgICAgaWYgKGRlY29kZVN0YXRlKG1fZGF0YSkg
PT0gQ2xlYXJXYXRjaHBvaW50KQorICAgICAgICB1aW50cHRyX3QgZGF0YSA9IG1fZGF0YTsKKyAg
ICAgICAgaWYgKGRlY29kZVN0YXRlKGRhdGEpID09IElzSW52YWxpZGF0ZWQpCisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIFdURjo6c3RvcmVTdG9yZUZlbmNlKCk7CisgICAgICAgIGlmIChk
ZWNvZGVTdGF0ZShkYXRhKSA9PSBDbGVhcldhdGNocG9pbnQpCiAgICAgICAgICAgICBtX2RhdGEg
PSBlbmNvZGVTdGF0ZShJc1dhdGNoZWQpOwogICAgICAgICBlbHNlCiAgICAgICAgICAgICBtX2Rh
dGEgPSBlbmNvZGVTdGF0ZShJc0ludmFsaWRhdGVkKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuY3BwCShy
ZXZpc2lvbiAxODI1ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5
dGVjb2RlR2VuZXJhdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDY2LDkgKzQ2Niw2IEBAIEJ5
dGVjb2RlR2VuZXJhdG9yOjpCeXRlY29kZUdlbmVyYXRvcihWTSYKICAgICAgICAgfQogICAgIH0K
ICAgICAKLSAgICBpZiAobV9zeW1ib2xUYWJsZS0+c2NvcGVTaXplKCkpCi0gICAgICAgIGVtaXRP
cGNvZGUob3BfdG91Y2hfZW50cnkpOwotCiAgICAgaWYgKGlzQ29uc3RydWN0b3IoKSkgewogICAg
ICAgICBpZiAoY29uc3RydWN0b3JLaW5kKCkgPT0gQ29uc3RydWN0b3JLaW5kOjpEZXJpdmVkKSB7
CiAgICAgICAgICAgICBtX25ld1RhcmdldFJlZ2lzdGVyID0gYWRkVmFyKCk7CkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBYnN0cmFjdEludGVycHJl
dGVySW5saW5lcy5oCShyZXZpc2lvbiAxODI1ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
ZGZnL0RGR0Fic3RyYWN0SW50ZXJwcmV0ZXJJbmxpbmVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEz
NDIsNiArMTM0Miw3IEBAIGJvb2wgQWJzdHJhY3RJbnRlcnByZXRlcjxBYnN0cmFjdFN0YXRlVHkK
ICAgICB9CiAKICAgICBjYXNlIENyZWF0ZVRoaXM6IHsKKyAgICAgICAgLy8gRklYTUU6IFdlIGNh
biBmb2xkIHRoaXMgdG8gTmV3T2JqZWN0IGlmIHRoZSBpbmNvbWluZyBjYWxsZWUgaXMgYSBjb25z
dGFudC4KICAgICAgICAgZm9yTm9kZShub2RlKS5zZXRUeXBlKFNwZWNGaW5hbE9iamVjdCk7CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KQEAgLTE0MDEsNiArMTQwMiwxNSBAQCBib29sIEFic3RyYWN0
SW50ZXJwcmV0ZXI8QWJzdHJhY3RTdGF0ZVR5CiAgICAgICAgIGJyZWFrOwogICAgICAgICAKICAg
ICBjYXNlIEdldENhbGxlZToKKyAgICAgICAgaWYgKEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0
YWJsZSA9IGpzRHluYW1pY0Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4obV9jb2RlQmxvY2stPm93
bmVyRXhlY3V0YWJsZSgpKSkgeworICAgICAgICAgICAgSW5mZXJyZWRWYWx1ZSogc2luZ2xldG9u
ID0gZXhlY3V0YWJsZS0+c2luZ2xldG9uRnVuY3Rpb24oKTsKKyAgICAgICAgICAgIGlmIChKU1Zh
bHVlIHZhbHVlID0gc2luZ2xldG9uLT5pbmZlcnJlZFZhbHVlKCkpIHsKKyAgICAgICAgICAgICAg
ICBtX2dyYXBoLndhdGNocG9pbnRzKCkuYWRkTGF6aWx5KHNpbmdsZXRvbik7CisgICAgICAgICAg
ICAgICAgSlNGdW5jdGlvbiogZnVuY3Rpb24gPSBqc0Nhc3Q8SlNGdW5jdGlvbio+KHZhbHVlKTsK
KyAgICAgICAgICAgICAgICBzZXRDb25zdGFudChub2RlLCAqbV9ncmFwaC5mcmVlemUoZnVuY3Rp
b24pKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQog
ICAgICAgICBmb3JOb2RlKG5vZGUpLnNldFR5cGUoU3BlY0Z1bmN0aW9uKTsKICAgICAgICAgYnJl
YWs7CiAgICAgICAgIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29k
ZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdC
eXRlQ29kZVBhcnNlci5jcHAJKHJldmlzaW9uIDE4MjU4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTUsOCAr
MjE1LDYgQEAgcHJpdmF0ZToKICAgICAgICAgYm9vbCBpc0RpcmVjdCk7CiAgICAgdm9pZCBlbWl0
Q2hlY2tzKGNvbnN0IENvbnN0YW50U3RydWN0dXJlQ2hlY2tWZWN0b3ImKTsKIAotICAgIE5vZGUq
IGdldFNjb3BlKFZpcnR1YWxSZWdpc3RlciBzY29wZUNoYWluLCB1bnNpZ25lZCBza2lwQ291bnQp
OwotICAgIAogICAgIHZvaWQgcHJlcGFyZVRvUGFyc2VCbG9jaygpOwogICAgIHZvaWQgY2xlYXJD
YWNoZXMoKTsKIApAQCAtMjc5LDggKzI3NywyMCBAQCBwcml2YXRlOgogICAgICAgICAgICAgICAg
IGlmIChvcGVyYW5kLm9mZnNldCgpID09IEpTU3RhY2s6OkNhbGxlZSkKICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIHdlYWtKU0NvbnN0YW50KGNhbGxlZSk7CiAgICAgICAgICAgICB9Ci0gICAg
ICAgIH0gZWxzZSBpZiAob3BlcmFuZC5vZmZzZXQoKSA9PSBKU1N0YWNrOjpDYWxsZWUpCisgICAg
ICAgIH0gZWxzZSBpZiAob3BlcmFuZC5vZmZzZXQoKSA9PSBKU1N0YWNrOjpDYWxsZWUpIHsKKyAg
ICAgICAgICAgIC8vIFdlIGhhdmUgdG8gZG8gc29tZSBjb25zdGFudC1mb2xkaW5nIGhlcmUgYmVj
YXVzZSB0aGlzIGVuYWJsZXMgQ3JlYXRlVGhpcyBmb2xkaW5nLiBOb3RlCisgICAgICAgICAgICAv
LyB0aGF0IHdlIGRvbid0IGhhdmUgc3VjaCB3YXRjaHBvaW50LWJhc2VkIGZvbGRpbmcgZm9yIGlu
bGluZWQgdXNlcyBvZiBDYWxsZWUsIHNpbmNlIGluIHRoYXQKKyAgICAgICAgICAgIC8vIGNhc2Ug
aWYgdGhlIGZ1bmN0aW9uIGlzIGEgc2luZ2xldG9uIHRoZW4gd2UgYWxyZWFkeSBrbm93IGl0Lgor
ICAgICAgICAgICAgaWYgKEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IGpzRHluYW1p
Y0Nhc3Q8RnVuY3Rpb25FeGVjdXRhYmxlKj4obV9jb2RlQmxvY2stPm93bmVyRXhlY3V0YWJsZSgp
KSkgeworICAgICAgICAgICAgICAgIEluZmVycmVkVmFsdWUqIHNpbmdsZXRvbiA9IGV4ZWN1dGFi
bGUtPnNpbmdsZXRvbkZ1bmN0aW9uKCk7CisgICAgICAgICAgICAgICAgaWYgKEpTVmFsdWUgdmFs
dWUgPSBzaW5nbGV0b24tPmluZmVycmVkVmFsdWUoKSkgeworICAgICAgICAgICAgICAgICAgICBt
X2dyYXBoLndhdGNocG9pbnRzKCkuYWRkTGF6aWx5KHNpbmdsZXRvbik7CisgICAgICAgICAgICAg
ICAgICAgIEpTRnVuY3Rpb24qIGZ1bmN0aW9uID0ganNDYXN0PEpTRnVuY3Rpb24qPih2YWx1ZSk7
CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB3ZWFrSlNDb25zdGFudChmdW5jdGlvbik7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQogICAgICAgICAgICAgcmV0dXJuIGFkZFRv
R3JhcGgoR2V0Q2FsbGVlKTsKKyAgICAgICAgfQogICAgICAgICAKICAgICAgICAgcmV0dXJuIGdl
dERpcmVjdChtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQob3BlcmFuZCkpOwogICAgIH0K
QEAgLTI1MjksMTQgKzI1MzksNiBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpjbGVhckNhY2hlcygp
CiAgICAgbV9jb25zdGFudHMucmVzaXplKDApOwogfQogCi1Ob2RlKiBCeXRlQ29kZVBhcnNlcjo6
Z2V0U2NvcGUoVmlydHVhbFJlZ2lzdGVyIHNjb3BlQ2hhaW4sIHVuc2lnbmVkIHNraXBDb3VudCkK
LXsKLSAgICBOb2RlKiBsb2NhbEJhc2UgPSBnZXQoc2NvcGVDaGFpbik7Ci0gICAgZm9yICh1bnNp
Z25lZCBuID0gc2tpcENvdW50OyBuLS07KQotICAgICAgICBsb2NhbEJhc2UgPSBhZGRUb0dyYXBo
KFNraXBTY29wZSwgbG9jYWxCYXNlKTsKLSAgICByZXR1cm4gbG9jYWxCYXNlOwotfQotCiBib29s
IEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogewogICAgIGJvb2wg
c2hvdWxkQ29udGludWVQYXJzaW5nID0gdHJ1ZTsKQEAgLTI2MDYsMTEgKzI2MDgsNiBAQCBib29s
IEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICBORVhUX09Q
Q09ERShvcF9lbnRlcik7CiAgICAgICAgIH0KICAgICAgICAgICAgIAotICAgICAgICBjYXNlIG9w
X3RvdWNoX2VudHJ5OgotICAgICAgICAgICAgaWYgKG1faW5saW5lU3RhY2tUb3AtPm1fY29kZUJs
b2NrLT5zeW1ib2xUYWJsZSgpLT5tX2Z1bmN0aW9uRW50ZXJlZE9uY2UuaXNTdGlsbFZhbGlkKCkp
Ci0gICAgICAgICAgICAgICAgYWRkVG9HcmFwaChGb3JjZU9TUkV4aXQpOwotICAgICAgICAgICAg
TkVYVF9PUENPREUob3BfdG91Y2hfZW50cnkpOwotICAgICAgICAgICAgCiAgICAgICAgIGNhc2Ug
b3BfdG9fdGhpczogewogICAgICAgICAgICAgTm9kZSogb3AxID0gZ2V0VGhpcygpOwogICAgICAg
ICAgICAgaWYgKG9wMS0+b3AoKSAhPSBUb1RoaXMpIHsKQEAgLTMzODgsMTcgKzMzODUsMjggQEAg
Ym9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAgICAgICAgICAgY2Fz
ZSBMb2NhbENsb3N1cmVWYXI6CiAgICAgICAgICAgICBjYXNlIENsb3N1cmVWYXI6CiAgICAgICAg
ICAgICBjYXNlIENsb3N1cmVWYXJXaXRoVmFySW5qZWN0aW9uQ2hlY2tzOiB7Ci0gICAgICAgICAg
ICAgICAgSlNMZXhpY2FsRW52aXJvbm1lbnQqIGxleGljYWxFbnZpcm9ubWVudCA9IGN1cnJlbnRJ
bnN0cnVjdGlvbls2XS51LmxleGljYWxFbnZpcm9ubWVudC5nZXQoKTsKLSAgICAgICAgICAgICAg
ICBpZiAobGV4aWNhbEVudmlyb25tZW50Ci0gICAgICAgICAgICAgICAgICAgICYmIGxleGljYWxF
bnZpcm9ubWVudC0+c3ltYm9sVGFibGUoKS0+bV9mdW5jdGlvbkVudGVyZWRPbmNlLmlzU3RpbGxW
YWxpZCgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgud2F0Y2hwb2ludHMoKS5hZGRM
YXppbHkobGV4aWNhbEVudmlyb25tZW50LT5zeW1ib2xUYWJsZSgpLT5tX2Z1bmN0aW9uRW50ZXJl
ZE9uY2UpOwotICAgICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKFBoYW50b20sIGdldERpcmVj
dChtX2lubGluZVN0YWNrVG9wLT5yZW1hcE9wZXJhbmQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJ
bnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpKSkpOwotICAgICAgICAgICAgICAgICAgICBzZXQoVmly
dHVhbFJlZ2lzdGVyKGRzdCksIHdlYWtKU0NvbnN0YW50KGxleGljYWxFbnZpcm9ubWVudCkpOwor
ICAgICAgICAgICAgICAgIE5vZGUqIGxvY2FsQmFzZSA9IGdldChWaXJ0dWFsUmVnaXN0ZXIoY3Vy
cmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCkpOworICAgICAgICAgICAgICAgIGFkZFRvR3Jh
cGgoUGhhbnRvbSwgbG9jYWxCYXNlKTsgLy8gT1NSIGV4aXQgY2Fubm90IGhhbmRsZSByZXNvbHZl
X3Njb3BlIG9uIGEgRENFJ2Qgc2NvcGUuCisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICAg
ICAgLy8gV2UgaGF2ZSB2YXJpb3VzIGZvcm1zIG9mIGNvbnN0YW50IGZvbGRpbmcgaGVyZS4gVGhp
cyBpcyBuZWNlc3NhcnkgdG8gYXZvaWQKKyAgICAgICAgICAgICAgICAvLyBzcHVyaW91cyByZWNv
bXBpbGVzIGluIGRlYWQtYnV0LWZvbGRhYmxlIGNvZGUuCisgICAgICAgICAgICAgICAgaWYgKFN5
bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSA9IGN1cnJlbnRJbnN0cnVjdGlvbls2XS51LnN5bWJvbFRh
YmxlLmdldCgpKSB7CisgICAgICAgICAgICAgICAgICAgIEluZmVycmVkVmFsdWUqIHNpbmdsZXRv
biA9IHN5bWJvbFRhYmxlLT5zaW5nbGV0b25TY29wZSgpOworICAgICAgICAgICAgICAgICAgICBp
ZiAoSlNWYWx1ZSB2YWx1ZSA9IHNpbmdsZXRvbi0+aW5mZXJyZWRWYWx1ZSgpKSB7CisgICAgICAg
ICAgICAgICAgICAgICAgICBtX2dyYXBoLndhdGNocG9pbnRzKCkuYWRkTGF6aWx5KHNpbmdsZXRv
bik7CisgICAgICAgICAgICAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGRzdCksIHdl
YWtKU0NvbnN0YW50KHZhbHVlKSk7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBp
ZiAoSlNTY29wZSogc2NvcGUgPSBsb2NhbEJhc2UtPmR5bmFtaWNDYXN0Q29uc3RhbnQ8SlNTY29w
ZSo+KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBuID0gZGVwdGg7IG4t
LTspCisgICAgICAgICAgICAgICAgICAgICAgICBzY29wZSA9IHNjb3BlLT5uZXh0KCk7CisgICAg
ICAgICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoZHN0KSwgd2Vha0pTQ29uc3RhbnQo
c2NvcGUpKTsKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgfQot
ICAgICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoZHN0KSwgZ2V0U2NvcGUoVmlydHVh
bFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpLCBkZXB0aCkpOwotICAg
ICAgICAgICAgICAgIGlmIChpbmxpbmVDYWxsRnJhbWUoKSkKLSAgICAgICAgICAgICAgICAgICAg
YWRkVG9HcmFwaChQaGFudG9tLCBnZXREaXJlY3QobV9pbmxpbmVTdGFja1RvcC0+cmVtYXBPcGVy
YW5kKFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5kKSkpKTsK
KyAgICAgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIG4gPSBkZXB0aDsgbi0tOykKKyAgICAgICAg
ICAgICAgICAgICAgbG9jYWxCYXNlID0gYWRkVG9HcmFwaChTa2lwU2NvcGUsIGxvY2FsQmFzZSk7
CisgICAgICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rlcihkc3QpLCBsb2NhbEJhc2UpOwog
ICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgY2FzZSBE
eW5hbWljOgpAQCAtMzQ1MCwxOSArMzQ1OCw1OCBAQCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJz
ZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICBjYXNlIEdsb2JhbFZhcjoKICAgICAgICAgICAg
IGNhc2UgR2xvYmFsVmFyV2l0aFZhckluamVjdGlvbkNoZWNrczogewogICAgICAgICAgICAgICAg
IGFkZFRvR3JhcGgoUGhhbnRvbSwgZ2V0KFZpcnR1YWxSZWdpc3RlcihzY29wZSkpKTsKLSAgICAg
ICAgICAgICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihnbG9iYWxPYmplY3QtPnN5bWJv
bFRhYmxlKCktPm1fbG9jayk7Ci0gICAgICAgICAgICAgICAgU3ltYm9sVGFibGVFbnRyeSBlbnRy
eSA9IGdsb2JhbE9iamVjdC0+c3ltYm9sVGFibGUoKS0+Z2V0KGxvY2tlciwgdWlkKTsKLSAgICAg
ICAgICAgICAgICBWYXJpYWJsZVdhdGNocG9pbnRTZXQqIHdhdGNocG9pbnRTZXQgPSBlbnRyeS53
YXRjaHBvaW50U2V0KCk7Ci0gICAgICAgICAgICAgICAgSlNWYWx1ZSBpbmZlcnJlZFZhbHVlID0K
LSAgICAgICAgICAgICAgICAgICAgd2F0Y2hwb2ludFNldCA/IHdhdGNocG9pbnRTZXQtPmluZmVy
cmVkVmFsdWUoKSA6IEpTVmFsdWUoKTsKLSAgICAgICAgICAgICAgICBpZiAoIWluZmVycmVkVmFs
dWUpIHsKLSAgICAgICAgICAgICAgICAgICAgU3BlY3VsYXRlZFR5cGUgcHJlZGljdGlvbiA9IGdl
dFByZWRpY3Rpb24oKTsKLSAgICAgICAgICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rlcihk
c3QpLCBhZGRUb0dyYXBoKEdldEdsb2JhbFZhciwgT3BJbmZvKG9wZXJhbmQpLCBPcEluZm8ocHJl
ZGljdGlvbikpKTsKLSAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAg
V2F0Y2hwb2ludFNldCogd2F0Y2hwb2ludFNldDsKKyAgICAgICAgICAgICAgICBTY29wZU9mZnNl
dCBvZmZzZXQ7CisgICAgICAgICAgICAgICAgeworICAgICAgICAgICAgICAgICAgICBDb25jdXJy
ZW50SklUTG9ja2VyIGxvY2tlcihnbG9iYWxPYmplY3QtPnN5bWJvbFRhYmxlKCktPm1fbG9jayk7
CisgICAgICAgICAgICAgICAgICAgIFN5bWJvbFRhYmxlRW50cnkgZW50cnkgPSBnbG9iYWxPYmpl
Y3QtPnN5bWJvbFRhYmxlKCktPmdldChsb2NrZXIsIHVpZCk7CisgICAgICAgICAgICAgICAgICAg
IHdhdGNocG9pbnRTZXQgPSBlbnRyeS53YXRjaHBvaW50U2V0KCk7CisgICAgICAgICAgICAgICAg
ICAgIG9mZnNldCA9IGVudHJ5LnNjb3BlT2Zmc2V0KCk7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIGlmICh3YXRjaHBvaW50U2V0ICYmIHdhdGNocG9pbnRTZXQtPnN0YXRlKCkg
PT0gSXNXYXRjaGVkKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFRoaXMgaGFzIGEgZnVuIGNv
bmN1cnJlbmN5IHN0b3J5LiBUaGVyZSBpcyB0aGUgcG9zc2liaWxpdHkgb2YgYSByYWNlIGluIHR3
bworICAgICAgICAgICAgICAgICAgICAvLyBkaXJlY3Rpb25zOgorICAgICAgICAgICAgICAgICAg
ICAvLworICAgICAgICAgICAgICAgICAgICAvLyBXZSBzZWUgdGhhdCB0aGUgc2V0IElzV2F0Y2hl
ZCwgYnV0IGluIHRoZSBtZWFudGltZSBpdCBnZXRzIGludmFsaWRhdGVkOiB0aGlzIGlzCisgICAg
ICAgICAgICAgICAgICAgIC8vIGZpbmUgYmVjYXVzZSBpZiB3ZSBzYXcgdGhhdCBpdCBJc1dhdGNo
ZWQgdGhlbiB3ZSBhZGQgYSB3YXRjaHBvaW50LiBJZiBpdCBnZXRzCisgICAgICAgICAgICAgICAg
ICAgIC8vIGludmFsaWRhdGVkLCB0aGVuIHRoaXMgY29tcGlsYXRpb24gaXMgaW52YWxpZGF0ZWQu
IE5vdGUgdGhhdCBpbiB0aGUgbWVhbnRpbWUgd2UKKyAgICAgICAgICAgICAgICAgICAgLy8gbWF5
IGxvYWQgYW4gYWJzdXJkIHZhbHVlIGZyb20gdGhlIGdsb2JhbCBvYmplY3QuIEl0J3MgZmluZSB0
byBsb2FkIGFuIGFic3VyZAorICAgICAgICAgICAgICAgICAgICAvLyB2YWx1ZSBpZiB0aGUgY29t
cGlsYXRpb24gaXMgaW52YWxpZGF0ZWQgYW55d2F5LgorICAgICAgICAgICAgICAgICAgICAvLwor
ICAgICAgICAgICAgICAgICAgICAvLyBXZSBzZWUgdGhhdCB0aGUgc2V0IElzV2F0Y2hlZCwgYnV0
IHRoZSB2YWx1ZSBpc24ndCB5ZXQgaW5pdGlhbGl6ZWQ6IHRoaXMgaXNuJ3QKKyAgICAgICAgICAg
ICAgICAgICAgLy8gcG9zc2libGUgYmVjYXVzZSBvZiB0aGUgb3JkZXJpbmcgb2Ygb3BlcmF0aW9u
cy4KKyAgICAgICAgICAgICAgICAgICAgLy8KKyAgICAgICAgICAgICAgICAgICAgLy8gSGVyZSdz
IGhvdyB3ZSBvcmRlciBvcGVyYXRpb25zOgorICAgICAgICAgICAgICAgICAgICAvLworICAgICAg
ICAgICAgICAgICAgICAvLyBNYWluIHRocmVhZCBzdG9yZXMgdG8gdGhlIGdsb2JhbCBvYmplY3Q6
IGFsd2F5cyBzdG9yZSBhIHZhbHVlIGZpcnN0LCBhbmQgb25seQorICAgICAgICAgICAgICAgICAg
ICAvLyBhZnRlciB0aGF0IGRvIHdlIHRvdWNoIHRoZSB3YXRjaHBvaW50IHNldC4gVGhlcmUgaXMg
YSBmZW5jZSBpbiB0aGUgdG91Y2gsIHRoYXQKKyAgICAgICAgICAgICAgICAgICAgLy8gZW5zdXJl
cyB0aGF0IHRoZSBzdG9yZSB0byB0aGUgZ2xvYmFsIG9iamVjdCBhbHdheXMgaGFwcGVucyBiZWZv
cmUgdGhlIHRvdWNoIG9uIHRoZQorICAgICAgICAgICAgICAgICAgICAvLyBzZXQuCisgICAgICAg
ICAgICAgICAgICAgIC8vCisgICAgICAgICAgICAgICAgICAgIC8vIENvbXBpbGF0aW9uIHRocmVh
ZDogYWx3YXlzIGZpcnN0IGxvYWQgdGhlIHN0YXRlIG9mIHRoZSB3YXRjaHBvaW50IHNldCwgYW5k
IHRoZW4KKyAgICAgICAgICAgICAgICAgICAgLy8gbG9hZCB0aGUgdmFsdWUuIFRoZSBXYXRjaHBv
aW50U2V0OjpzdGF0ZSgpIG1ldGhvZCBkb2VzIGZlbmNlcyBmb3IgdXMgdG8gZW5zdXJlCisgICAg
ICAgICAgICAgICAgICAgIC8vIHRoYXQgdGhlIGxvYWQgb2YgdGhlIHN0YXRlIGhhcHBlbnMgYmVm
b3JlIG91ciBsb2FkIG9mIHRoZSB2YWx1ZS4KKyAgICAgICAgICAgICAgICAgICAgLy8KKyAgICAg
ICAgICAgICAgICAgICAgLy8gRmluYWxpemluZyBjb21waWxhdGlvbjogdGhpcyBoYXBwZW5zIG9u
IHRoZSBtYWluIHRocmVhZCBhbmQgc3luY2hyb25vdXNseSBjaGVja3MKKyAgICAgICAgICAgICAg
ICAgICAgLy8gdmFsaWRpdHkgb2YgYWxsIHdhdGNocG9pbnQgc2V0cy4KKyAgICAgICAgICAgICAg
ICAgICAgLy8KKyAgICAgICAgICAgICAgICAgICAgLy8gV2Ugd2lsbCBvbmx5IHBlcmZvcm0gb3B0
aW1pemF0aW9ucyBpZiB0aGUgbG9hZCBvZiB0aGUgc3RhdGUgeWllbGRzIElzV2F0Y2hlZC4gVGhh
dAorICAgICAgICAgICAgICAgICAgICAvLyBtZWFucyB0aGF0IGF0IGxlYXN0IG9uZSBzdG9yZSB3
b3VsZCBoYXZlIGhhcHBlbmVkIHRvIGluaXRpYWxpemUgdGhlIG9yaWdpbmFsIHZhbHVlCisgICAg
ICAgICAgICAgICAgICAgIC8vIG9mIHRoZSB2YXJpYWJsZSAodGhhdCBpcywgdGhlIHZhbHVlIHdl
J2QgbGlrZSB0byBjb25zdGFudCBmb2xkIHRvKS4gVGhlcmUgbWF5IGJlCisgICAgICAgICAgICAg
ICAgICAgIC8vIG90aGVyIHN0b3JlcyB0aGF0IGhhcHBlbiBhZnRlciB0aGF0LCBidXQgdGhvc2Ug
c3RvcmVzIHdpbGwgaW52YWxpZGF0ZSB0aGUKKyAgICAgICAgICAgICAgICAgICAgLy8gd2F0Y2hw
b2ludCBzZXQgYW5kIGFsc28gdGhlIGNvbXBpbGF0aW9uLgorICAgICAgICAgICAgICAgICAgICAK
KyAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGJpdHdpc2VfY2FzdDx1aW50cHRyX3Q+KCZnbG9i
YWxPYmplY3QtPnZhcmlhYmxlQXQob2Zmc2V0KSkgPT0gb3BlcmFuZCk7CisgICAgICAgICAgICAg
ICAgICAgIEpTVmFsdWUgdmFsdWUgPSBnbG9iYWxPYmplY3QtPnZhcmlhYmxlQXQob2Zmc2V0KS5n
ZXQoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKHZhbHVlKSB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBtX2dyYXBoLndhdGNocG9pbnRzKCkuYWRkTGF6aWx5KHdhdGNocG9pbnRTZXQpOwor
ICAgICAgICAgICAgICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3Rlcihkc3QpLCB3ZWFrSlND
b25zdGFudCh2YWx1ZSkpOworICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
ICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgCi0gICAg
ICAgICAgICAgICAgbV9ncmFwaC53YXRjaHBvaW50cygpLmFkZExhemlseSh3YXRjaHBvaW50U2V0
KTsKLSAgICAgICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGRzdCksIHdlYWtKU0NvbnN0
YW50KGluZmVycmVkVmFsdWUpKTsKKyAgICAgICAgICAgICAgICBTcGVjdWxhdGVkVHlwZSBwcmVk
aWN0aW9uID0gZ2V0UHJlZGljdGlvbigpOworICAgICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVn
aXN0ZXIoZHN0KSwgYWRkVG9HcmFwaChHZXRHbG9iYWxWYXIsIE9wSW5mbyhvcGVyYW5kKSwgT3BJ
bmZvKHByZWRpY3Rpb24pKSk7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICB9
CiAgICAgICAgICAgICBjYXNlIExvY2FsQ2xvc3VyZVZhcjoKQEAgLTM0NzksNiArMzUyNiwxMCBA
QCBib29sIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAg
ICAgLy8gd29uJ3QgYmUgYWJsZSB0byBoYW5kbGUgYW4gVW5kZWZpbmVkIHNjb3BlLgogICAgICAg
ICAgICAgICAgIGFkZFRvR3JhcGgoUGhhbnRvbSwgc2NvcGVOb2RlKTsKICAgICAgICAgICAgICAg
ICAKKyAgICAgICAgICAgICAgICAvLyBDb25zdGFudCBmb2xkaW5nIGluIHRoZSBieXRlY29kZSBw
YXJzZXIgaXMgaW1wb3J0YW50IGZvciBwZXJmb3JtYW5jZS4gVGhpcyBtYXkgbm90CisgICAgICAg
ICAgICAgICAgLy8gaGF2ZSBleGVjdXRlZCB5ZXQuIElmIGl0IGhhc24ndCwgdGhlbiB3ZSB3b24n
dCBoYXZlIGEgcHJlZGljdGlvbi4gTGFja2luZyBhCisgICAgICAgICAgICAgICAgLy8gcHJlZGlj
dGlvbiwgd2UnZCBvdGhlcndpc2UgdGhpbmsgdGhhdCBpdCBoYXMgdG8gZXhpdC4gVGhlbiB3aGVu
IGl0IGRpZCBleGVjdXRlLCB3ZQorICAgICAgICAgICAgICAgIC8vIHdvdWxkIHJlY29tcGlsZS4g
QnV0IGlmIHdlIGNhbiBmb2xkIGl0IGhlcmUsIHdlIGF2b2lkIHRoZSBleGl0LgogICAgICAgICAg
ICAgICAgIGlmIChKU1ZhbHVlIHZhbHVlID0gbV9ncmFwaC50cnlHZXRDb25zdGFudENsb3N1cmVW
YXIoc2NvcGVOb2RlLCBTY29wZU9mZnNldChvcGVyYW5kKSkpIHsKICAgICAgICAgICAgICAgICAg
ICAgc2V0KFZpcnR1YWxSZWdpc3Rlcihkc3QpLCB3ZWFrSlNDb25zdGFudCh2YWx1ZSkpOwogICAg
ICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTM1MDksNyArMzU2MCw3IEBAIGJvb2wgQnl0ZUNv
ZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQKICAgICAgICAgICAgICAgICB1aWQgPSBudWxs
cHRyOwogICAgICAgICAgICAgCiAgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG51
bGxwdHI7Ci0gICAgICAgICAgICBWYXJpYWJsZVdhdGNocG9pbnRTZXQqIHdhdGNocG9pbnRzID0g
bnVsbHB0cjsKKyAgICAgICAgICAgIFdhdGNocG9pbnRTZXQqIHdhdGNocG9pbnRzID0gbnVsbHB0
cjsKICAgICAgICAgICAgIHVpbnRwdHJfdCBvcGVyYW5kOwogICAgICAgICAgICAgewogICAgICAg
ICAgICAgICAgIENvbmN1cnJlbnRKSVRMb2NrZXIgbG9ja2VyKG1faW5saW5lU3RhY2tUb3AtPm1f
cHJvZmlsZWRCbG9jay0+bV9sb2NrKTsKQEAgLTM1NTIsOCArMzYwMywxMCBAQCBib29sIEJ5dGVD
b2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVkCiAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgIE5vZGUqIHZhbHVlTm9kZSA9IGdldChWaXJ0dWFsUmVnaXN0ZXIodmFsdWUpKTsK
ICAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKFB1dEdsb2JhbFZhciwgT3BJbmZvKG9wZXJhbmQp
LCB2YWx1ZU5vZGUpOwotICAgICAgICAgICAgICAgIGlmICh3YXRjaHBvaW50cyAmJiB3YXRjaHBv
aW50cy0+c3RhdGUoKSAhPSBJc0ludmFsaWRhdGVkKQotICAgICAgICAgICAgICAgICAgICBhZGRU
b0dyYXBoKE5vdGlmeVdyaXRlLCBPcEluZm8od2F0Y2hwb2ludHMpLCB2YWx1ZU5vZGUpOworICAg
ICAgICAgICAgICAgIGlmICh3YXRjaHBvaW50cyAmJiB3YXRjaHBvaW50cy0+c3RhdGUoKSAhPSBJ
c0ludmFsaWRhdGVkKSB7CisgICAgICAgICAgICAgICAgICAgIC8vIE11c3QgaGFwcGVuIGFmdGVy
IHRoZSBzdG9yZS4gU2VlIGNvbW1lbnQgZm9yIEdldEdsb2JhbFZhci4KKyAgICAgICAgICAgICAg
ICAgICAgYWRkVG9HcmFwaChOb3RpZnlXcml0ZSwgT3BJbmZvKHdhdGNocG9pbnRzKSk7CisgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIC8vIEtlZXAgc2NvcGUgYWxpdmUgdW50aWwg
YWZ0ZXIgcHV0LgogICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoUGhhbnRvbSwgZ2V0KFZpcnR1
YWxSZWdpc3RlcihzY29wZSkpKTsKICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTM1NjQsMTAg
KzM2MTcsMTIgQEAgYm9vbCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZAogICAg
ICAgICAgICAgICAgIE5vZGUqIHNjb3BlTm9kZSA9IGdldChWaXJ0dWFsUmVnaXN0ZXIoc2NvcGUp
KTsKICAgICAgICAgICAgICAgICBOb2RlKiB2YWx1ZU5vZGUgPSBnZXQoVmlydHVhbFJlZ2lzdGVy
KHZhbHVlKSk7CiAKLSAgICAgICAgICAgICAgICBpZiAod2F0Y2hwb2ludHMgJiYgd2F0Y2hwb2lu
dHMtPnN0YXRlKCkgIT0gSXNJbnZhbGlkYXRlZCkKLSAgICAgICAgICAgICAgICAgICAgYWRkVG9H
cmFwaChOb3RpZnlXcml0ZSwgT3BJbmZvKHdhdGNocG9pbnRzKSwgdmFsdWVOb2RlKTsKLQogICAg
ICAgICAgICAgICAgIGFkZFRvR3JhcGgoUHV0Q2xvc3VyZVZhciwgT3BJbmZvKG9wZXJhbmQpLCBz
Y29wZU5vZGUsIHZhbHVlTm9kZSk7CisKKyAgICAgICAgICAgICAgICBpZiAod2F0Y2hwb2ludHMg
JiYgd2F0Y2hwb2ludHMtPnN0YXRlKCkgIT0gSXNJbnZhbGlkYXRlZCkgeworICAgICAgICAgICAg
ICAgICAgICAvLyBNdXN0IGhhcHBlbiBhZnRlciB0aGUgc3RvcmUuIFNlZSBjb21tZW50IGZvciBH
ZXRHbG9iYWxWYXIuCisgICAgICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoTm90aWZ5V3JpdGUs
IE9wSW5mbyh3YXRjaHBvaW50cykpOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNhc2UgRHluYW1pYzoKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVzLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NhcGFiaWxpdGllcy5jcHAJKHJldmlz
aW9uIDE4MjU4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2FwYWJpbGl0aWVz
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTYsNyArOTYsNiBAQCBDYXBhYmlsaXR5TGV2ZWwgY2Fw
YWJpbGl0eUxldmVsKE9wY29kZUlECiAgICAgCiAgICAgc3dpdGNoIChvcGNvZGVJRCkgewogICAg
IGNhc2Ugb3BfZW50ZXI6Ci0gICAgY2FzZSBvcF90b3VjaF9lbnRyeToKICAgICBjYXNlIG9wX3Rv
X3RoaXM6CiAgICAgY2FzZSBvcF9jaGVja190ZHo6CiAgICAgY2FzZSBvcF9jcmVhdGVfdGhpczoK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ2xvYmJlcml6ZS5oCShyZXZpc2lv
biAxODI1ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Nsb2JiZXJpemUuaAko
d29ya2luZyBjb3B5KQpAQCAtMzExLDEwICszMTEsMTQgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBo
JiBncmFwaCwgTm9kZSogbm9kZQogICAgICAgICB3cml0ZShTaWRlU3RhdGUpOwogICAgICAgICBy
ZXR1cm47CiAKLSAgICBjYXNlIENyZWF0ZUFjdGl2YXRpb246CisgICAgY2FzZSBDcmVhdGVBY3Rp
dmF0aW9uOiB7CisgICAgICAgIFN5bWJvbFRhYmxlKiB0YWJsZSA9IGdyYXBoLnN5bWJvbFRhYmxl
Rm9yKG5vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CisgICAgICAgIGlmICh0YWJsZS0+c2luZ2xldG9u
U2NvcGUoKS0+aXNTdGlsbFZhbGlkKCkpCisgICAgICAgICAgICB3cml0ZShXYXRjaHBvaW50X2Zp
cmUpOwogICAgICAgICByZWFkKEhlYXBPYmplY3RDb3VudCk7CiAgICAgICAgIHdyaXRlKEhlYXBP
YmplY3RDb3VudCk7CiAgICAgICAgIHJldHVybjsKKyAgICB9CiAgICAgICAgIAogICAgIGNhc2Ug
Q3JlYXRlRGlyZWN0QXJndW1lbnRzOgogICAgIGNhc2UgQ3JlYXRlU2NvcGVkQXJndW1lbnRzOgpA
QCAtODU4LDExICs4NjIsMTcgQEAgdm9pZCBjbG9iYmVyaXplKEdyYXBoJiBncmFwaCwgTm9kZSog
bm9kZQogICAgIGNhc2UgTmV3U3RyaW5nT2JqZWN0OgogICAgIGNhc2UgUGhhbnRvbU5ld09iamVj
dDoKICAgICBjYXNlIE1hdGVyaWFsaXplTmV3T2JqZWN0OgotICAgIGNhc2UgTmV3RnVuY3Rpb246
CiAgICAgICAgIHJlYWQoSGVhcE9iamVjdENvdW50KTsKICAgICAgICAgd3JpdGUoSGVhcE9iamVj
dENvdW50KTsKICAgICAgICAgcmV0dXJuOwogICAgICAgICAKKyAgICBjYXNlIE5ld0Z1bmN0aW9u
OgorICAgICAgICBpZiAobm9kZS0+Y2FzdE9wZXJhbmQ8RnVuY3Rpb25FeGVjdXRhYmxlKj4oKS0+
c2luZ2xldG9uRnVuY3Rpb24oKS0+aXNTdGlsbFZhbGlkKCkpCisgICAgICAgICAgICB3cml0ZShX
YXRjaHBvaW50X2ZpcmUpOworICAgICAgICByZWFkKEhlYXBPYmplY3RDb3VudCk7CisgICAgICAg
IHdyaXRlKEhlYXBPYmplY3RDb3VudCk7CisgICAgICAgIHJldHVybjsKKwogICAgIGNhc2UgUmVn
RXhwRXhlYzoKICAgICBjYXNlIFJlZ0V4cFRlc3Q6CiAgICAgICAgIHJlYWQoUmVnRXhwU3RhdGUp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdh
dGNocG9pbnRzLmNwcAkocmV2aXNpb24gMTgyNTgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdEZXNpcmVkV2F0Y2hwb2ludHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEs
NSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAxMywgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMtMjAxNSBBcHBsZSBJbmMuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTQ0LDYg
KzQ0LDEzIEBAIHZvaWQgQXJyYXlCdWZmZXJWaWV3V2F0Y2hwb2ludEFkYXB0b3I6OmEKICAgICBj
b2RlQmxvY2stPnZtKCktPmhlYXAuYWRkUmVmZXJlbmNlKG5ldXRlcmluZ1dhdGNocG9pbnQsIHZp
ZXctPmJ1ZmZlcigpKTsKIH0KIAordm9pZCBJbmZlcnJlZFZhbHVlQWRhcHRvcjo6YWRkKAorICAg
IENvZGVCbG9jayogY29kZUJsb2NrLCBJbmZlcnJlZFZhbHVlKiBpbmZlcnJlZFZhbHVlLCBXYXRj
aHBvaW50KiB3YXRjaHBvaW50KQoreworICAgIGNvZGVCbG9jay0+YWRkQ29uc3RhbnQoaW5mZXJy
ZWRWYWx1ZSk7IC8vIEZvciBjb21tb24gdXNlcnMsIGl0IGRvZXNuJ3QgcmVhbGx5IG1hdHRlciBp
ZiBpdCdzIHdlYWsgb3Igbm90LiBJZiByZWZlcmVuY2VzIHRvIGl0IGdvIGF3YXksIHdlIGdvIGF3
YXksIHRvby4KKyAgICBpbmZlcnJlZFZhbHVlLT5hZGQod2F0Y2hwb2ludCk7Cit9CisKIERlc2ly
ZWRXYXRjaHBvaW50czo6RGVzaXJlZFdhdGNocG9pbnRzKCkgeyB9CiBEZXNpcmVkV2F0Y2hwb2lu
dHM6On5EZXNpcmVkV2F0Y2hwb2ludHMoKSB7IH0KIApAQCAtNTcsNiArNjQsMTEgQEAgdm9pZCBE
ZXNpcmVkV2F0Y2hwb2ludHM6OmFkZExhemlseShJbmxpbgogICAgIG1faW5saW5lU2V0cy5hZGRM
YXppbHkoJnNldCk7CiB9CiAKK3ZvaWQgRGVzaXJlZFdhdGNocG9pbnRzOjphZGRMYXppbHkoSW5m
ZXJyZWRWYWx1ZSogaW5mZXJyZWRWYWx1ZSkKK3sKKyAgICBtX2luZmVycmVkVmFsdWVzLmFkZExh
emlseShpbmZlcnJlZFZhbHVlKTsKK30KKwogdm9pZCBEZXNpcmVkV2F0Y2hwb2ludHM6OmFkZExh
emlseShKU0FycmF5QnVmZmVyVmlldyogdmlldykKIHsKICAgICBtX2J1ZmZlclZpZXdzLmFkZExh
emlseSh2aWV3KTsKQEAgLTc0LDYgKzg2LDcgQEAgdm9pZCBEZXNpcmVkV2F0Y2hwb2ludHM6OnJl
YWxseUFkZChDb2RlQgogewogICAgIG1fc2V0cy5yZWFsbHlBZGQoY29kZUJsb2NrLCBjb21tb25E
YXRhKTsKICAgICBtX2lubGluZVNldHMucmVhbGx5QWRkKGNvZGVCbG9jaywgY29tbW9uRGF0YSk7
CisgICAgbV9pbmZlcnJlZFZhbHVlcy5yZWFsbHlBZGQoY29kZUJsb2NrLCBjb21tb25EYXRhKTsK
ICAgICBtX2J1ZmZlclZpZXdzLnJlYWxseUFkZChjb2RlQmxvY2ssIGNvbW1vbkRhdGEpOwogfQog
CkBAIC04MSw2ICs5NCw3IEBAIGJvb2wgRGVzaXJlZFdhdGNocG9pbnRzOjphcmVTdGlsbFZhbGlk
KCkKIHsKICAgICByZXR1cm4gbV9zZXRzLmFyZVN0aWxsVmFsaWQoKQogICAgICAgICAmJiBtX2lu
bGluZVNldHMuYXJlU3RpbGxWYWxpZCgpCisgICAgICAgICYmIG1faW5mZXJyZWRWYWx1ZXMuYXJl
U3RpbGxWYWxpZCgpCiAgICAgICAgICYmIG1fYnVmZmVyVmlld3MuYXJlU3RpbGxWYWxpZCgpOwog
fQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Rlc2lyZWRXYXRjaHBvaW50
cy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHRGVzaXJlZFdh
dGNocG9pbnRzLmgJKHJldmlzaW9uIDE4MjU4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHRGVzaXJlZFdhdGNocG9pbnRzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEsNSArMSw1IEBA
CiAvKgotICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE0IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMy0yMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzAsNiArMzAs
NyBAQAogCiAjaW5jbHVkZSAiQ29kZU9yaWdpbi5oIgogI2luY2x1ZGUgIkRGR0NvbW1vbkRhdGEu
aCIKKyNpbmNsdWRlICJJbmZlcnJlZFZhbHVlLmgiCiAjaW5jbHVkZSAiSlNBcnJheUJ1ZmZlclZp
ZXcuaCIKICNpbmNsdWRlICJXYXRjaHBvaW50LmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4K
QEAgLTUwLDYgKzUxLDE0IEBAIHN0cnVjdCBHZW5lcmljU2V0QWRhcHRvciB7CiAgICAgc3RhdGlj
IGJvb2wgaGFzQmVlbkludmFsaWRhdGVkKFQqIHNldCkgeyByZXR1cm4gc2V0LT5oYXNCZWVuSW52
YWxpZGF0ZWQoKTsgfQogfTsKIAorc3RydWN0IEluZmVycmVkVmFsdWVBZGFwdG9yIHsKKyAgICBz
dGF0aWMgdm9pZCBhZGQoQ29kZUJsb2NrKiwgSW5mZXJyZWRWYWx1ZSosIFdhdGNocG9pbnQqKTsK
KyAgICBzdGF0aWMgYm9vbCBoYXNCZWVuSW52YWxpZGF0ZWQoSW5mZXJyZWRWYWx1ZSogaW5mZXJy
ZWRWYWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBpbmZlcnJlZFZhbHVlLT5oYXNCZWVuSW52
YWxpZGF0ZWQoKTsKKyAgICB9Cit9OworCiBzdHJ1Y3QgQXJyYXlCdWZmZXJWaWV3V2F0Y2hwb2lu
dEFkYXB0b3IgewogICAgIHN0YXRpYyB2b2lkIGFkZChDb2RlQmxvY2sqLCBKU0FycmF5QnVmZmVy
VmlldyosIFdhdGNocG9pbnQqKTsKICAgICBzdGF0aWMgYm9vbCBoYXNCZWVuSW52YWxpZGF0ZWQo
SlNBcnJheUJ1ZmZlclZpZXcqIHZpZXcpCkBAIC0xMTksNiArMTI4LDcgQEAgcHVibGljOgogICAg
IAogICAgIHZvaWQgYWRkTGF6aWx5KFdhdGNocG9pbnRTZXQqKTsKICAgICB2b2lkIGFkZExhemls
eShJbmxpbmVXYXRjaHBvaW50U2V0Jik7CisgICAgdm9pZCBhZGRMYXppbHkoSW5mZXJyZWRWYWx1
ZSopOwogICAgIHZvaWQgYWRkTGF6aWx5KEpTQXJyYXlCdWZmZXJWaWV3Kik7CiAgICAgCiAgICAg
Ym9vbCBjb25zaWRlcihTdHJ1Y3R1cmUqKTsKQEAgLTEzNSw2ICsxNDUsMTAgQEAgcHVibGljOgog
ICAgIHsKICAgICAgICAgcmV0dXJuIG1faW5saW5lU2V0cy5pc1dhdGNoZWQoJnNldCk7CiAgICAg
fQorICAgIGJvb2wgaXNXYXRjaGVkKEluZmVycmVkVmFsdWUqIGluZmVycmVkVmFsdWUpCisgICAg
eworICAgICAgICByZXR1cm4gbV9pbmZlcnJlZFZhbHVlcy5pc1dhdGNoZWQoaW5mZXJyZWRWYWx1
ZSk7CisgICAgfQogICAgIGJvb2wgaXNXYXRjaGVkKEpTQXJyYXlCdWZmZXJWaWV3KiB2aWV3KQog
ICAgIHsKICAgICAgICAgcmV0dXJuIG1fYnVmZmVyVmlld3MuaXNXYXRjaGVkKHZpZXcpOwpAQCAt
MTQzLDYgKzE1Nyw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgR2VuZXJpY0Rlc2lyZWRXYXRj
aHBvaW50czxXYXRjaHBvaW50U2V0PiBtX3NldHM7CiAgICAgR2VuZXJpY0Rlc2lyZWRXYXRjaHBv
aW50czxJbmxpbmVXYXRjaHBvaW50U2V0PiBtX2lubGluZVNldHM7CisgICAgR2VuZXJpY0Rlc2ly
ZWRXYXRjaHBvaW50czxJbmZlcnJlZFZhbHVlLCBJbmZlcnJlZFZhbHVlQWRhcHRvcj4gbV9pbmZl
cnJlZFZhbHVlczsKICAgICBHZW5lcmljRGVzaXJlZFdhdGNocG9pbnRzPEpTQXJyYXlCdWZmZXJW
aWV3LCBBcnJheUJ1ZmZlclZpZXdXYXRjaHBvaW50QWRhcHRvcj4gbV9idWZmZXJWaWV3czsKIH07
CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguY3BwCShyZXZpc2lvbiAx
ODI1ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0dyYXBoLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzExLDggKzMxMSw4IEBAIHZvaWQgR3JhcGg6OmR1bXAoUHJpbnRTdHJlYW0m
IG91dCwgY29uc3QKICAgICAgICAgb3V0LnByaW50KGNvbW1hLCAiXiIsIG5vZGUtPnBoaSgpLT5p
bmRleCgpKTsKICAgICBpZiAobm9kZS0+aGFzRXhlY3V0aW9uQ291bnRlcigpKQogICAgICAgICBv
dXQucHJpbnQoY29tbWEsIFJhd1BvaW50ZXIobm9kZS0+ZXhlY3V0aW9uQ291bnRlcigpKSk7Ci0g
ICAgaWYgKG5vZGUtPmhhc1ZhcmlhYmxlV2F0Y2hwb2ludFNldCgpKQotICAgICAgICBvdXQucHJp
bnQoY29tbWEsIFJhd1BvaW50ZXIobm9kZS0+dmFyaWFibGVXYXRjaHBvaW50U2V0KCkpKTsKKyAg
ICBpZiAobm9kZS0+aGFzV2F0Y2hwb2ludFNldCgpKQorICAgICAgICBvdXQucHJpbnQoY29tbWEs
IFJhd1BvaW50ZXIobm9kZS0+d2F0Y2hwb2ludFNldCgpKSk7CiAgICAgaWYgKG5vZGUtPmhhc1N0
b3JhZ2VQb2ludGVyKCkpCiAgICAgICAgIG91dC5wcmludChjb21tYSwgUmF3UG9pbnRlcihub2Rl
LT5zdG9yYWdlUG9pbnRlcigpKSk7CiAgICAgaWYgKG5vZGUtPmhhc09iamVjdE1hdGVyaWFsaXph
dGlvbkRhdGEoKSkKQEAgLTEwMjYsNiArMTAyNiw4IEBAIEpTVmFsdWUgR3JhcGg6OnRyeUdldENv
bnN0YW50UHJvcGVydHkoY28KIAogSlNWYWx1ZSBHcmFwaDo6dHJ5R2V0Q29uc3RhbnRDbG9zdXJl
VmFyKEpTVmFsdWUgYmFzZSwgU2NvcGVPZmZzZXQgb2Zmc2V0KQogeworICAgIC8vIFRoaXMgaGFz
IGFuIGF3ZXNvbWUgY29uY3VycmVuY3kgc3RvcnkuIFNlZSBjb21tZW50IGZvciBHZXRHbG9iYWxW
YXIgaW4gQnl0ZUNvZGVQYXJzZXIuCisgICAgCiAgICAgaWYgKCFiYXNlKQogICAgICAgICByZXR1
cm4gSlNWYWx1ZSgpOwogICAgIApAQCAtMTAzNCwyNCArMTAzNiwyOCBAQCBKU1ZhbHVlIEdyYXBo
Ojp0cnlHZXRDb25zdGFudENsb3N1cmVWYXIoCiAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CiAg
ICAgCiAgICAgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlID0gYWN0aXZhdGlvbi0+c3ltYm9sVGFi
bGUoKTsKLSAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihzeW1ib2xUYWJsZS0+bV9sb2Nr
KTsKLSAgICAKLSAgICBpZiAoc3ltYm9sVGFibGUtPm1fZnVuY3Rpb25FbnRlcmVkT25jZS5oYXNC
ZWVuSW52YWxpZGF0ZWQoKSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKLSAgICAKLSAgICBT
eW1ib2xUYWJsZUVudHJ5KiBlbnRyeSA9IHN5bWJvbFRhYmxlLT5lbnRyeUZvcihsb2NrZXIsIG9m
ZnNldCk7Ci0gICAgaWYgKCFlbnRyeSkKLSAgICAgICAgcmV0dXJuIEpTVmFsdWUoKTsKLSAgICAK
LSAgICBWYXJpYWJsZVdhdGNocG9pbnRTZXQqIHNldCA9IGVudHJ5LT53YXRjaHBvaW50U2V0KCk7
Ci0gICAgaWYgKCFzZXQpCi0gICAgICAgIHJldHVybiBKU1ZhbHVlKCk7Ci0gICAgCi0gICAgSlNW
YWx1ZSB2YWx1ZSA9IHNldC0+aW5mZXJyZWRWYWx1ZSgpOwotICAgIGlmICghdmFsdWUpCi0gICAg
ICAgIHJldHVybiBKU1ZhbHVlKCk7CisgICAgSlNWYWx1ZSB2YWx1ZTsKKyAgICBXYXRjaHBvaW50
U2V0KiBzZXQ7CisgICAgeworICAgICAgICBDb25jdXJyZW50SklUTG9ja2VyIGxvY2tlcihzeW1i
b2xUYWJsZS0+bV9sb2NrKTsKKyAgICAgICAgCisgICAgICAgIFN5bWJvbFRhYmxlRW50cnkqIGVu
dHJ5ID0gc3ltYm9sVGFibGUtPmVudHJ5Rm9yKGxvY2tlciwgb2Zmc2V0KTsKKyAgICAgICAgaWYg
KCFlbnRyeSkKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CisgICAgICAgIAorICAgICAg
ICBzZXQgPSBlbnRyeS0+d2F0Y2hwb2ludFNldCgpOworICAgICAgICBpZiAoIXNldCkKKyAgICAg
ICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CisgICAgICAgIAorICAgICAgICBpZiAoc2V0LT5zdGF0
ZSgpICE9IElzV2F0Y2hlZCkKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7CisgICAgICAg
IAorICAgICAgICBBU1NFUlQoZW50cnktPnNjb3BlT2Zmc2V0KCkgPT0gb2Zmc2V0KTsKKyAgICAg
ICAgdmFsdWUgPSBhY3RpdmF0aW9uLT52YXJpYWJsZUF0KG9mZnNldCkuZ2V0KCk7CisgICAgICAg
IGlmICghdmFsdWUpCisgICAgICAgICAgICByZXR1cm4gSlNWYWx1ZSgpOworICAgIH0KICAgICAK
LSAgICB3YXRjaHBvaW50cygpLmFkZExhemlseShzeW1ib2xUYWJsZS0+bV9mdW5jdGlvbkVudGVy
ZWRPbmNlKTsKICAgICB3YXRjaHBvaW50cygpLmFkZExhemlseShzZXQpOwogICAgIAogICAgIHJl
dHVybiB2YWx1ZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCShyZXZpc2lv
biAxODI1ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTIxOSwxNCArMTIxOSwxNCBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgICAgIG1f
b3BJbmZvID0gYml0d2lzZV9jYXN0PHVpbnRwdHJfdD4odmFsdWUpOwogICAgIH0KICAgICAKLSAg
ICBib29sIGhhc1ZhcmlhYmxlV2F0Y2hwb2ludFNldCgpCisgICAgYm9vbCBoYXNXYXRjaHBvaW50
U2V0KCkKICAgICB7CiAgICAgICAgIHJldHVybiBvcCgpID09IE5vdGlmeVdyaXRlOwogICAgIH0K
ICAgICAKLSAgICBWYXJpYWJsZVdhdGNocG9pbnRTZXQqIHZhcmlhYmxlV2F0Y2hwb2ludFNldCgp
CisgICAgV2F0Y2hwb2ludFNldCogd2F0Y2hwb2ludFNldCgpCiAgICAgewotICAgICAgICByZXR1
cm4gcmVpbnRlcnByZXRfY2FzdDxWYXJpYWJsZVdhdGNocG9pbnRTZXQqPihtX29wSW5mbyk7Cisg
ICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PFdhdGNocG9pbnRTZXQqPihtX29wSW5mbyk7
CiAgICAgfQogICAgIAogICAgIGJvb2wgaGFzU3RvcmFnZVBvaW50ZXIoKQpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAxODI1ODIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xMDc3LDEzICsxMDc3LDEyIEBAIGNoYXIqIEpJVF9PUEVSQVRJT04gb3BlcmF0
aW9uU3dpdGNoU3RyaW4KICAgICByZXR1cm4gc3RhdGljX2Nhc3Q8Y2hhcio+KGV4ZWMtPmNvZGVC
bG9jaygpLT5zdHJpbmdTd2l0Y2hKdW1wVGFibGUodGFibGVJbmRleCkuY3RpRm9yVmFsdWUoc3Ry
aW5nLT52YWx1ZShleGVjKS5pbXBsKCkpLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwogfQogCi12b2lk
IEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTm90aWZ5V3JpdGUoRXhlY1N0YXRlKiBleGVjLCBWYXJp
YWJsZVdhdGNocG9pbnRTZXQqIHNldCwgRW5jb2RlZEpTVmFsdWUgZW5jb2RlZFZhbHVlKQordm9p
ZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5vdGlmeVdyaXRlKEV4ZWNTdGF0ZSogZXhlYywgV2F0
Y2hwb2ludFNldCogc2V0KQogewogICAgIFZNJiB2bSA9IGV4ZWMtPnZtKCk7CiAgICAgTmF0aXZl
Q2FsbEZyYW1lVHJhY2VyIHRyYWNlcigmdm0sIGV4ZWMpOwotICAgIEpTVmFsdWUgdmFsdWUgPSBK
U1ZhbHVlOjpkZWNvZGUoZW5jb2RlZFZhbHVlKTsKIAotICAgIHNldC0+bm90aWZ5V3JpdGUodm0s
IHZhbHVlLCAiRXhlY3V0ZWQgTm90aWZ5V3JpdGUiKTsKKyAgICBzZXQtPnRvdWNoKCJFeGVjdXRl
ZCBOb3RpZnlXcml0ZSIpOwogfQogCiB2b2lkIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uVGhyb3dT
dGFja092ZXJmbG93Rm9yVmFyYXJncyhFeGVjU3RhdGUqIGV4ZWMpCkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR09wZXJhdGlvbnMuaAkocmV2aXNpb24gMTgyNTgyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdPcGVyYXRpb25zLmgJKHdvcmtpbmcgY29weSkKQEAg
LTEyNyw3ICsxMjcsNyBAQCBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTWFrZVJvcGUy
CiBKU0NlbGwqIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTWFrZVJvcGUzKEV4ZWNTdGF0ZSosIEpT
U3RyaW5nKiwgSlNTdHJpbmcqLCBKU1N0cmluZyopOwogY2hhciogSklUX09QRVJBVElPTiBvcGVy
YXRpb25GaW5kU3dpdGNoSW1tVGFyZ2V0Rm9yRG91YmxlKEV4ZWNTdGF0ZSosIEVuY29kZWRKU1Zh
bHVlLCBzaXplX3QgdGFibGVJbmRleCk7CiBjaGFyKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblN3
aXRjaFN0cmluZyhFeGVjU3RhdGUqLCBzaXplX3QgdGFibGVJbmRleCwgSlNTdHJpbmcqKTsKLXZv
aWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25Ob3RpZnlXcml0ZShFeGVjU3RhdGUqLCBWYXJpYWJs
ZVdhdGNocG9pbnRTZXQqLCBFbmNvZGVkSlNWYWx1ZSk7Cit2b2lkIEpJVF9PUEVSQVRJT04gb3Bl
cmF0aW9uTm90aWZ5V3JpdGUoRXhlY1N0YXRlKiwgV2F0Y2hwb2ludFNldCopOwogdm9pZCBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvblRocm93U3RhY2tPdmVyZmxvd0ZvclZhcmFyZ3MoRXhlY1N0YXRl
KikgV1RGX0lOVEVSTkFMOwogaW50MzJfdCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvblNpemVPZlZh
cmFyZ3MoRXhlY1N0YXRlKiwgRW5jb2RlZEpTVmFsdWUgYXJndW1lbnRzLCBpbnQzMl90IGZpcnN0
VmFyQXJnT2Zmc2V0KTsKIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25Mb2FkVmFyYXJncyhF
eGVjU3RhdGUqLCBpbnQzMl90IGZpcnN0RWxlbWVudERlc3QsIEVuY29kZWRKU1ZhbHVlIGFyZ3Vt
ZW50cywgaW50MzJfdCBvZmZzZXQsIGludDMyX3QgbGVuZ3RoLCBpbnQzMl90IG1hbmRhdG9yeU1p
bmltdW0pOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJ
VDMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1Nw
ZWN1bGF0aXZlSklUMzJfNjQuY3BwCShyZXZpc2lvbiAxODI1ODIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zOTg3LDMyICszOTg3LDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShOb2RlKiBu
b2RlKQogICAgIH0KIAogICAgIGNhc2UgTm90aWZ5V3JpdGU6IHsKLSAgICAgICAgVmFyaWFibGVX
YXRjaHBvaW50U2V0KiBzZXQgPSBub2RlLT52YXJpYWJsZVdhdGNocG9pbnRTZXQoKTsKLSAgICAK
LSAgICAgICAgSlNWYWx1ZU9wZXJhbmQgdmFsdWUodGhpcywgbm9kZS0+Y2hpbGQxKCkpOwotICAg
ICAgICBHUFJSZWcgdmFsdWVUYWdHUFIgPSB2YWx1ZS50YWdHUFIoKTsKLSAgICAgICAgR1BSUmVn
IHZhbHVlUGF5bG9hZEdQUiA9IHZhbHVlLnBheWxvYWRHUFIoKTsKLSAgICAKLSAgICAgICAgR1BS
VGVtcG9yYXJ5IHRlbXAodGhpcyk7Ci0gICAgICAgIEdQUlJlZyB0ZW1wR1BSID0gdGVtcC5ncHIo
KTsKLSAgICAKLSAgICAgICAgbV9qaXQubG9hZDgoc2V0LT5hZGRyZXNzT2ZTdGF0ZSgpLCB0ZW1w
R1BSKTsKLSAgICAKLSAgICAgICAgSklUQ29tcGlsZXI6Okp1bXAgaXNEb25lID0gbV9qaXQuYnJh
bmNoMzIoSklUQ29tcGlsZXI6OkVxdWFsLCB0ZW1wR1BSLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlk
YXRlZCkpOwotICAgICAgICBKSVRDb21waWxlcjo6SnVtcExpc3Qgbm90aWZ5U2xvdzsKLSAgICAg
ICAgbm90aWZ5U2xvdy5hcHBlbmQobV9qaXQuYnJhbmNoMzIoCi0gICAgICAgICAgICBKSVRDb21w
aWxlcjo6Tm90RXF1YWwsCi0gICAgICAgICAgICBKSVRDb21waWxlcjo6QWJzb2x1dGVBZGRyZXNz
KHNldC0+YWRkcmVzc09mSW5mZXJyZWRWYWx1ZSgpLT5wYXlsb2FkUG9pbnRlcigpKSwKLSAgICAg
ICAgICAgIHZhbHVlUGF5bG9hZEdQUikpOwotICAgICAgICBub3RpZnlTbG93LmFwcGVuZChtX2pp
dC5icmFuY2gzMigKLSAgICAgICAgICAgIEpJVENvbXBpbGVyOjpOb3RFcXVhbCwgCi0gICAgICAg
ICAgICBKSVRDb21waWxlcjo6QWJzb2x1dGVBZGRyZXNzKHNldC0+YWRkcmVzc09mSW5mZXJyZWRW
YWx1ZSgpLT50YWdQb2ludGVyKCkpLAotICAgICAgICAgICAgdmFsdWVUYWdHUFIpKTsKLSAgICAg
ICAgYWRkU2xvd1BhdGhHZW5lcmF0b3IoCi0gICAgICAgICAgICBzbG93UGF0aENhbGwobm90aWZ5
U2xvdywgdGhpcywgb3BlcmF0aW9uTm90aWZ5V3JpdGUsIE5vUmVzdWx0LCBzZXQsIHZhbHVlVGFn
R1BSLCB2YWx1ZVBheWxvYWRHUFIpKTsKLSAgICAgICAgaXNEb25lLmxpbmsoJm1faml0KTsKLSAg
ICAKLSAgICAgICAgbm9SZXN1bHQobm9kZSk7CisgICAgICAgIGNvbXBpbGVOb3RpZnlXcml0ZShu
b2RlKTsKICAgICAgICAgYnJlYWs7CiAgICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDE4MjU4MikK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTQwMTksMjYgKzQwMTksNyBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlKE5vZGUqIG5vZGUpCiAgICAgfQogCiAgICAgY2FzZSBOb3RpZnlXcml0ZTogewotICAg
ICAgICBWYXJpYWJsZVdhdGNocG9pbnRTZXQqIHNldCA9IG5vZGUtPnZhcmlhYmxlV2F0Y2hwb2lu
dFNldCgpOwotICAgIAotICAgICAgICBKU1ZhbHVlT3BlcmFuZCB2YWx1ZSh0aGlzLCBub2RlLT5j
aGlsZDEoKSk7Ci0gICAgICAgIEdQUlJlZyB2YWx1ZUdQUiA9IHZhbHVlLmdwcigpOwotICAgIAot
ICAgICAgICBHUFJUZW1wb3JhcnkgdGVtcCh0aGlzKTsKLSAgICAgICAgR1BSUmVnIHRlbXBHUFIg
PSB0ZW1wLmdwcigpOwotICAgIAotICAgICAgICBtX2ppdC5sb2FkOChzZXQtPmFkZHJlc3NPZlN0
YXRlKCksIHRlbXBHUFIpOwotICAgIAotICAgICAgICBKSVRDb21waWxlcjo6SnVtcCBpc0RvbmUg
PQotICAgICAgICAgICAgbV9qaXQuYnJhbmNoMzIoSklUQ29tcGlsZXI6OkVxdWFsLCB0ZW1wR1BS
LCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpOwotICAgICAgICBKSVRDb21waWxlcjo6SnVt
cCBzbG93Q2FzZSA9IG1faml0LmJyYW5jaDY0KEpJVENvbXBpbGVyOjpOb3RFcXVhbCwKLSAgICAg
ICAgICAgIEpJVENvbXBpbGVyOjpBYnNvbHV0ZUFkZHJlc3Moc2V0LT5hZGRyZXNzT2ZJbmZlcnJl
ZFZhbHVlKCkpLCB2YWx1ZUdQUik7Ci0gICAgICAgIGlzRG9uZS5saW5rKCZtX2ppdCk7Ci0gICAg
Ci0gICAgICAgIGFkZFNsb3dQYXRoR2VuZXJhdG9yKAotICAgICAgICAgICAgc2xvd1BhdGhDYWxs
KHNsb3dDYXNlLCB0aGlzLCBvcGVyYXRpb25Ob3RpZnlXcml0ZSwgTm9SZXN1bHQsIHNldCwgdmFs
dWVHUFIpKTsKLQotICAgICAgICBub1Jlc3VsdChub2RlKTsKKyAgICAgICAgY29tcGlsZU5vdGlm
eVdyaXRlKG5vZGUpOwogICAgICAgICBicmVhazsKICAgICB9CiAKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQuY3BwCShyZXZpc2lvbiAxODI1
ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklULmNwcAko
d29ya2luZyBjb3B5KQpAQCAtNDM2Nyw4ICs0MzY3LDEzIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6
OmNvbXBpbGVOZXdGdW5jdGlvbigKICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBzY29wZSh0aGlz
LCBub2RlLT5jaGlsZDEoKSk7CiAgICAgR1BSUmVnIHNjb3BlR1BSID0gc2NvcGUuZ3ByKCk7CiAg
ICAgZmx1c2hSZWdpc3RlcnMoKTsKLSAgICBjYWxsT3BlcmF0aW9uKAotICAgICAgICBvcGVyYXRp
b25OZXdGdW5jdGlvbiwgcmVzdWx0R1BSLCBzY29wZUdQUiwgbm9kZS0+Y2FzdE9wZXJhbmQ8RnVu
Y3Rpb25FeGVjdXRhYmxlKj4oKSk7CisgICAgRnVuY3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxl
ID0gbm9kZS0+Y2FzdE9wZXJhbmQ8RnVuY3Rpb25FeGVjdXRhYmxlKj4oKTsKKyAgICBKX0pJVE9w
ZXJhdGlvbl9FSnNjQyBmdW5jdGlvbjsKKyAgICBpZiAoZXhlY3V0YWJsZS0+c2luZ2xldG9uRnVu
Y3Rpb24oKS0+aXNTdGlsbFZhbGlkKCkpCisgICAgICAgIGZ1bmN0aW9uID0gb3BlcmF0aW9uTmV3
RnVuY3Rpb247CisgICAgZWxzZQorICAgICAgICBmdW5jdGlvbiA9IG9wZXJhdGlvbk5ld0Z1bmN0
aW9uV2l0aEludmFsaWRhdGVkUmVhbGxvY2F0aW9uV2F0Y2hwb2ludDsKKyAgICBjYWxsT3BlcmF0
aW9uKGZ1bmN0aW9uLCByZXN1bHRHUFIsIHNjb3BlR1BSLCBleGVjdXRhYmxlKTsKICAgICBjZWxs
UmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CiB9CiAKQEAgLTQ0MzYsMTkgKzQ0NDEsMzEgQEAgdm9p
ZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZUZvcndhcmRWYXJhcgogCiB2b2lkIFNwZWN1bGF0aXZl
SklUOjpjb21waWxlQ3JlYXRlQWN0aXZhdGlvbihOb2RlKiBub2RlKQogeworICAgIFN5bWJvbFRh
YmxlKiB0YWJsZSA9IG1faml0LmdyYXBoKCkuc3ltYm9sVGFibGVGb3Iobm9kZS0+b3JpZ2luLnNl
bWFudGljKTsKKyAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1faml0LmdyYXBoKCkuZ2xvYmFs
T2JqZWN0Rm9yKAorICAgICAgICBub2RlLT5vcmlnaW4uc2VtYW50aWMpLT5hY3RpdmF0aW9uU3Ry
dWN0dXJlKCk7CisgICAgICAgIAogICAgIFNwZWN1bGF0ZUNlbGxPcGVyYW5kIHNjb3BlKHRoaXMs
IG5vZGUtPmNoaWxkMSgpKTsKKyAgICBHUFJSZWcgc2NvcGVHUFIgPSBzY29wZS5ncHIoKTsKKyAg
ICAKKyAgICBpZiAodGFibGUtPnNpbmdsZXRvblNjb3BlKCktPmlzU3RpbGxWYWxpZCgpKSB7Cisg
ICAgICAgIEdQUkZsdXNoZWRDYWxsUmVzdWx0IHJlc3VsdCh0aGlzKTsKKyAgICAgICAgR1BSUmVn
IHJlc3VsdEdQUiA9IHJlc3VsdC5ncHIoKTsKKyAgICAgICAgCisgICAgICAgIGZsdXNoUmVnaXN0
ZXJzKCk7CisgICAgICAgIAorICAgICAgICBjYWxsT3BlcmF0aW9uKG9wZXJhdGlvbkNyZWF0ZUFj
dGl2YXRpb25EaXJlY3QsIHJlc3VsdEdQUiwgc3RydWN0dXJlLCBzY29wZUdQUiwgdGFibGUpOwor
ICAgICAgICBjZWxsUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisgICAgCiAgICAgR1BSVGVtcG9yYXJ5IHJlc3VsdCh0aGlzKTsKICAgICBHUFJUZW1wb3Jh
cnkgc2NyYXRjaDEodGhpcyk7CiAgICAgR1BSVGVtcG9yYXJ5IHNjcmF0Y2gyKHRoaXMpOwotICAg
IEdQUlJlZyBzY29wZUdQUiA9IHNjb3BlLmdwcigpOwogICAgIEdQUlJlZyByZXN1bHRHUFIgPSBy
ZXN1bHQuZ3ByKCk7CiAgICAgR1BSUmVnIHNjcmF0Y2gxR1BSID0gc2NyYXRjaDEuZ3ByKCk7CiAg
ICAgR1BSUmVnIHNjcmF0Y2gyR1BSID0gc2NyYXRjaDIuZ3ByKCk7CiAgICAgICAgIAotICAgIFN5
bWJvbFRhYmxlKiB0YWJsZSA9IG1faml0LmdyYXBoKCkuc3ltYm9sVGFibGVGb3Iobm9kZS0+b3Jp
Z2luLnNlbWFudGljKTsKLSAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IG1faml0LmdyYXBoKCku
Z2xvYmFsT2JqZWN0Rm9yKAotICAgICAgICBub2RlLT5vcmlnaW4uc2VtYW50aWMpLT5hY3RpdmF0
aW9uU3RydWN0dXJlKCk7Ci0gICAgICAgIAogICAgIEpJVENvbXBpbGVyOjpKdW1wTGlzdCBzbG93
UGF0aDsKICAgICBlbWl0QWxsb2NhdGVKU09iamVjdFdpdGhLbm93blNpemU8SlNMZXhpY2FsRW52
aXJvbm1lbnQ+KAogICAgICAgICByZXN1bHRHUFIsIFRydXN0ZWRJbW1QdHIoc3RydWN0dXJlKSwg
VHJ1c3RlZEltbVB0cigwKSwgc2NyYXRjaDFHUFIsIHNjcmF0Y2gyR1BSLApAQCAtNDcxNCw2ICs0
NzMxLDIxIEBAIHZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVDcmVhdGVDbG9uZWQKICAgICBj
ZWxsUmVzdWx0KHJlc3VsdEdQUiwgbm9kZSk7CiB9CiAKK3ZvaWQgU3BlY3VsYXRpdmVKSVQ6OmNv
bXBpbGVOb3RpZnlXcml0ZShOb2RlKiBub2RlKQoreworICAgIFdhdGNocG9pbnRTZXQqIHNldCA9
IG5vZGUtPndhdGNocG9pbnRTZXQoKTsKKyAgICAKKyAgICBKSVRDb21waWxlcjo6SnVtcCBzbG93
Q2FzZSA9IG1faml0LmJyYW5jaDgoCisgICAgICAgIEpJVENvbXBpbGVyOjpOb3RFcXVhbCwKKyAg
ICAgICAgSklUQ29tcGlsZXI6OkFic29sdXRlQWRkcmVzcyhzZXQtPmFkZHJlc3NPZlN0YXRlKCkp
LAorICAgICAgICBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpOworICAgIAorICAgIGFkZFNs
b3dQYXRoR2VuZXJhdG9yKAorICAgICAgICBzbG93UGF0aENhbGwoc2xvd0Nhc2UsIHRoaXMsIG9w
ZXJhdGlvbk5vdGlmeVdyaXRlLCBOb1Jlc3VsdCwgc2V0KSk7CisgICAgCisgICAgbm9SZXN1bHQo
bm9kZSk7Cit9CisKIGJvb2wgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGVSZWdFeHBFeGVjKE5vZGUq
IG5vZGUpCiB7CiAgICAgdW5zaWduZWQgYnJhbmNoSW5kZXhJbkJsb2NrID0gZGV0ZWN0UGVlcEhv
bGVCcmFuY2goKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRp
dmVKSVQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklULmgJKHJldmlzaW9uIDE4MjU4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9k
ZmcvREZHU3BlY3VsYXRpdmVKSVQuaAkod29ya2luZyBjb3B5KQpAQCAtMTIwMCw2ICsxMjAwLDEy
IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2tT
ZXRSZXN1bHQob3BlcmF0aW9uLCByZXN1bHQpOwogICAgIH0KIAorICAgIEpJVENvbXBpbGVyOjpD
YWxsIGNhbGxPcGVyYXRpb24oVl9KSVRPcGVyYXRpb25fRVdzIG9wZXJhdGlvbiwgV2F0Y2hwb2lu
dFNldCogd2F0Y2hwb2ludFNldCkKKyAgICB7CisgICAgICAgIG1faml0LnNldHVwQXJndW1lbnRz
V2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRyKHdhdGNocG9pbnRTZXQpKTsKKyAgICAgICAgcmV0
dXJuIGFwcGVuZENhbGwob3BlcmF0aW9uKTsKKyAgICB9CisKICNpZiBVU0UoSlNWQUxVRTY0KQog
ICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oSl9KSVRPcGVyYXRpb25fRSBvcGVy
YXRpb24sIEdQUlJlZyByZXN1bHQpCiAgICAgewpAQCAtMTQ2MCwxMiArMTQ2Niw2IEBAIHB1Ymxp
YzoKICAgICAgICAgcmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9u
KTsKICAgICB9CiAKLSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfSklUT3Bl
cmF0aW9uX0VWd3NKIG9wZXJhdGlvbiwgVmFyaWFibGVXYXRjaHBvaW50U2V0KiB3YXRjaHBvaW50
U2V0LCBHUFJSZWcgYXJnKQotICAgIHsKLSAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRo
RXhlY1N0YXRlKFRydXN0ZWRJbW1QdHIod2F0Y2hwb2ludFNldCksIGFyZyk7Ci0gICAgICAgIHJl
dHVybiBhcHBlbmRDYWxsKG9wZXJhdGlvbik7Ci0gICAgfQotCiAgICAgSklUQ29tcGlsZXI6OkNh
bGwgY2FsbE9wZXJhdGlvbihEX0pJVE9wZXJhdGlvbl9FSiBvcGVyYXRpb24sIEZQUlJlZyByZXN1
bHQsIEdQUlJlZyBhcmcxKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRo
RXhlY1N0YXRlKGFyZzEpOwpAQCAtMTc3NiwxMiArMTc3Niw2IEBAIHB1YmxpYzoKICAgICAgICAg
cmV0dXJuIGFwcGVuZENhbGxXaXRoRXhjZXB0aW9uQ2hlY2sob3BlcmF0aW9uKTsKICAgICB9CiAK
LSAgICBKSVRDb21waWxlcjo6Q2FsbCBjYWxsT3BlcmF0aW9uKFZfSklUT3BlcmF0aW9uX0VWd3NK
IG9wZXJhdGlvbiwgVmFyaWFibGVXYXRjaHBvaW50U2V0KiB3YXRjaHBvaW50U2V0LCBHUFJSZWcg
YXJnVGFnLCBHUFJSZWcgYXJnUGF5bG9hZCkKLSAgICB7Ci0gICAgICAgIG1faml0LnNldHVwQXJn
dW1lbnRzV2l0aEV4ZWNTdGF0ZShUcnVzdGVkSW1tUHRyKHdhdGNocG9pbnRTZXQpLCBhcmdQYXls
b2FkLCBhcmdUYWcpOwotICAgICAgICByZXR1cm4gYXBwZW5kQ2FsbChvcGVyYXRpb24pOwotICAg
IH0KLQogICAgIEpJVENvbXBpbGVyOjpDYWxsIGNhbGxPcGVyYXRpb24oRF9KSVRPcGVyYXRpb25f
RUogb3BlcmF0aW9uLCBGUFJSZWcgcmVzdWx0LCBHUFJSZWcgYXJnMVRhZywgR1BSUmVnIGFyZzFQ
YXlsb2FkKQogICAgIHsKICAgICAgICAgbV9qaXQuc2V0dXBBcmd1bWVudHNXaXRoRXhlY1N0YXRl
KEVBQklfMzJCSVRfRFVNTVlfQVJHIGFyZzFQYXlsb2FkLCBhcmcxVGFnKTsKQEAgLTIyMTMsNiAr
MjIwNyw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGNvbXBpbGVQdXRUb0FyZ3VtZW50cyhOb2RlKik7
CiAgICAgdm9pZCBjb21waWxlQ3JlYXRlU2NvcGVkQXJndW1lbnRzKE5vZGUqKTsKICAgICB2b2lk
IGNvbXBpbGVDcmVhdGVDbG9uZWRBcmd1bWVudHMoTm9kZSopOworICAgIHZvaWQgY29tcGlsZU5v
dGlmeVdyaXRlKE5vZGUqKTsKICAgICBib29sIGNvbXBpbGVSZWdFeHBFeGVjKE5vZGUqKTsKICAg
ICAKICAgICBKSVRDb21waWxlcjo6SnVtcCBicmFuY2hJc0NlbGwoSlNWYWx1ZVJlZ3MpOwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdWYXJhcmdzRm9yd2FyZGluZ1BoYXNlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ZhcmFyZ3NGb3J3
YXJkaW5nUGhhc2UuY3BwCShyZXZpc2lvbiAxODI1ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1ZhcmFyZ3NGb3J3YXJkaW5nUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
Miw2ICszMiw3IEBACiAjaW5jbHVkZSAiREZHQ2xvYmJlcml6ZS5oIgogI2luY2x1ZGUgIkRGR0dy
YXBoLmgiCiAjaW5jbHVkZSAiREZHUGhhc2UuaCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCiAK
IG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIApJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2Z0bC9GVExJbnRyaW5zaWNSZXBvc2l0b3J5LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2Z0bC9GVExJbnRyaW5zaWNSZXBvc2l0b3J5LmgJKHJldmlzaW9uIDE4
MjU4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRMSW50cmluc2ljUmVwb3NpdG9y
eS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDUsNyArMTA1LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5h
bWVzcGFjZSBGVEwgewogICAgIG1hY3JvKFZfSklUT3BlcmF0aW9uX0VPWkosIGZ1bmN0aW9uVHlw
ZSh2b2lkVHlwZSwgaW50UHRyLCBpbnRQdHIsIGludDMyLCBpbnQ2NCkpIFwKICAgICBtYWNybyhW
X0pJVE9wZXJhdGlvbl9FQywgZnVuY3Rpb25UeXBlKHZvaWRUeXBlLCBpbnRQdHIsIGludFB0cikp
IFwKICAgICBtYWNybyhWX0pJVE9wZXJhdGlvbl9FQ2IsIGZ1bmN0aW9uVHlwZSh2b2lkVHlwZSwg
aW50UHRyLCBpbnRQdHIpKSBcCi0gICAgbWFjcm8oVl9KSVRPcGVyYXRpb25fRVZ3c0osIGZ1bmN0
aW9uVHlwZSh2b2lkVHlwZSwgaW50UHRyLCBpbnRQdHIsIGludDY0KSkgXAorICAgIG1hY3JvKFZf
SklUT3BlcmF0aW9uX0VXcywgZnVuY3Rpb25UeXBlKHZvaWRUeXBlLCBpbnRQdHIsIGludFB0cikp
IFwKICAgICBtYWNybyhWX0pJVE9wZXJhdGlvbl9FWkpaWlosIGZ1bmN0aW9uVHlwZSh2b2lkVHlw
ZSwgaW50UHRyLCBpbnQzMiwgaW50NjQsIGludDMyLCBpbnQzMiwgaW50MzIpKSBcCiAgICAgbWFj
cm8oVl9KSVRPcGVyYXRpb25fSiwgZnVuY3Rpb25UeXBlKHZvaWRUeXBlLCBpbnQ2NCkpIFwKICAg
ICBtYWNybyhWX0pJVE9wZXJhdGlvbl9aLCBmdW5jdGlvblR5cGUodm9pZFR5cGUsIGludDMyKSkg
XApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExWTS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Z0bC9GVExMb3dlckRGR1RvTExW
TS5jcHAJKHJldmlzaW9uIDE4MjU4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9mdGwvRlRM
TG93ZXJERkdUb0xMVk0uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yODc3LDYgKzI4NzcsMTQgQEAg
cHJpdmF0ZToKICAgICAgICAgU3ltYm9sVGFibGUqIHRhYmxlID0gbV9ncmFwaC5zeW1ib2xUYWJs
ZUZvcihtX25vZGUtPm9yaWdpbi5zZW1hbnRpYyk7CiAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0
dXJlID0gbV9ncmFwaC5nbG9iYWxPYmplY3RGb3IobV9ub2RlLT5vcmlnaW4uc2VtYW50aWMpLT5h
Y3RpdmF0aW9uU3RydWN0dXJlKCk7CiAgICAgICAgIAorICAgICAgICBpZiAodGFibGUtPnNpbmds
ZXRvblNjb3BlKCktPmlzU3RpbGxWYWxpZCgpKSB7CisgICAgICAgICAgICBMVmFsdWUgY2FsbFJl
c3VsdCA9IHZtQ2FsbCgKKyAgICAgICAgICAgICAgICBtX291dC5vcGVyYXRpb24ob3BlcmF0aW9u
Q3JlYXRlQWN0aXZhdGlvbkRpcmVjdCksIG1fY2FsbEZyYW1lLCB3ZWFrUG9pbnRlcihzdHJ1Y3R1
cmUpLAorICAgICAgICAgICAgICAgIHNjb3BlLCB3ZWFrUG9pbnRlcih0YWJsZSkpOworICAgICAg
ICAgICAgc2V0SlNWYWx1ZShjYWxsUmVzdWx0KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorICAgICAgICAKICAgICAgICAgTEJhc2ljQmxvY2sgc2xvd1BhdGggPSBGVExfTkVXX0JM
T0NLKG1fb3V0LCAoIkNyZWF0ZUFjdGl2YXRpb24gc2xvdyBwYXRoIikpOwogICAgICAgICBMQmFz
aWNCbG9jayBjb250aW51YXRpb24gPSBGVExfTkVXX0JMT0NLKG1fb3V0LCAoIkNyZWF0ZUFjdGl2
YXRpb24gY29udGludWF0aW9uIikpOwogICAgICAgICAKQEAgLTI5MTIsOSArMjkyMCwxNiBAQCBw
cml2YXRlOgogICAgIAogICAgIHZvaWQgY29tcGlsZU5ld0Z1bmN0aW9uKCkKICAgICB7CisgICAg
ICAgIEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9IG1fbm9kZS0+Y2FzdE9wZXJhbmQ8
RnVuY3Rpb25FeGVjdXRhYmxlKj4oKTsKKyAgICAgICAgSl9KSVRPcGVyYXRpb25fRUpzY0MgZnVu
Y3Rpb247CisgICAgICAgIGlmIChleGVjdXRhYmxlLT5zaW5nbGV0b25GdW5jdGlvbigpLT5pc1N0
aWxsVmFsaWQoKSkKKyAgICAgICAgICAgIGZ1bmN0aW9uID0gb3BlcmF0aW9uTmV3RnVuY3Rpb247
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGZ1bmN0aW9uID0gb3BlcmF0aW9uTmV3RnVuY3Rp
b25XaXRoSW52YWxpZGF0ZWRSZWFsbG9jYXRpb25XYXRjaHBvaW50OworICAgICAgICAKICAgICAg
ICAgTFZhbHVlIHJlc3VsdCA9IHZtQ2FsbCgKLSAgICAgICAgICAgIG1fb3V0Lm9wZXJhdGlvbihv
cGVyYXRpb25OZXdGdW5jdGlvbiksIG1fY2FsbEZyYW1lLAotICAgICAgICAgICAgbG93Q2VsbCht
X25vZGUtPmNoaWxkMSgpKSwgd2Vha1BvaW50ZXIobV9ub2RlLT5jYXN0T3BlcmFuZDxGdW5jdGlv
bkV4ZWN1dGFibGUqPigpKSk7CisgICAgICAgICAgICBtX291dC5vcGVyYXRpb24oZnVuY3Rpb24p
LCBtX2NhbGxGcmFtZSwgbG93Q2VsbChtX25vZGUtPmNoaWxkMSgpKSwKKyAgICAgICAgICAgIHdl
YWtQb2ludGVyKGV4ZWN1dGFibGUpKTsKICAgICAgICAgc2V0SlNWYWx1ZShyZXN1bHQpOwogICAg
IH0KICAgICAKQEAgLTM3ODMsMjkgKzM3OTgsMTkgQEAgcHJpdmF0ZToKICAgICAKICAgICB2b2lk
IGNvbXBpbGVOb3RpZnlXcml0ZSgpCiAgICAgewotICAgICAgICBWYXJpYWJsZVdhdGNocG9pbnRT
ZXQqIHNldCA9IG1fbm9kZS0+dmFyaWFibGVXYXRjaHBvaW50U2V0KCk7Ci0gICAgICAgIAotICAg
ICAgICBMVmFsdWUgdmFsdWUgPSBsb3dKU1ZhbHVlKG1fbm9kZS0+Y2hpbGQxKCkpOworICAgICAg
ICBXYXRjaHBvaW50U2V0KiBzZXQgPSBtX25vZGUtPndhdGNocG9pbnRTZXQoKTsKICAgICAgICAg
CiAgICAgICAgIExCYXNpY0Jsb2NrIGlzTm90SW52YWxpZGF0ZWQgPSBGVExfTkVXX0JMT0NLKG1f
b3V0LCAoIk5vdGlmeVdyaXRlIG5vdCBpbnZhbGlkYXRlZCBjYXNlIikpOwotICAgICAgICBMQmFz
aWNCbG9jayBub3RpZnlTbG93ID0gRlRMX05FV19CTE9DSyhtX291dCwgKCJOb3RpZnlXcml0ZSBu
b3RpZnkgc2xvdyBjYXNlIikpOwogICAgICAgICBMQmFzaWNCbG9jayBjb250aW51YXRpb24gPSBG
VExfTkVXX0JMT0NLKG1fb3V0LCAoIk5vdGlmeVdyaXRlIGNvbnRpbnVhdGlvbiIpKTsKICAgICAg
ICAgCiAgICAgICAgIExWYWx1ZSBzdGF0ZSA9IG1fb3V0LmxvYWQ4KG1fb3V0LmFic29sdXRlKHNl
dC0+YWRkcmVzc09mU3RhdGUoKSkpOwotICAgICAgICAKICAgICAgICAgbV9vdXQuYnJhbmNoKAog
ICAgICAgICAgICAgbV9vdXQuZXF1YWwoc3RhdGUsIG1fb3V0LmNvbnN0SW50OChJc0ludmFsaWRh
dGVkKSksCiAgICAgICAgICAgICB1c3VhbGx5KGNvbnRpbnVhdGlvbiksIHJhcmVseShpc05vdElu
dmFsaWRhdGVkKSk7CiAgICAgICAgIAotICAgICAgICBMQmFzaWNCbG9jayBsYXN0TmV4dCA9IG1f
b3V0LmFwcGVuZFRvKGlzTm90SW52YWxpZGF0ZWQsIG5vdGlmeVNsb3cpOwotCi0gICAgICAgIG1f
b3V0LmJyYW5jaCgKLSAgICAgICAgICAgIG1fb3V0LmVxdWFsKHZhbHVlLCBtX291dC5sb2FkNjQo
bV9vdXQuYWJzb2x1dGUoc2V0LT5hZGRyZXNzT2ZJbmZlcnJlZFZhbHVlKCkpKSksCi0gICAgICAg
ICAgICB1bnN1cmUoY29udGludWF0aW9uKSwgdW5zdXJlKG5vdGlmeVNsb3cpKTsKLQotICAgICAg
ICBtX291dC5hcHBlbmRUbyhub3RpZnlTbG93LCBjb250aW51YXRpb24pOworICAgICAgICBMQmFz
aWNCbG9jayBsYXN0TmV4dCA9IG1fb3V0LmFwcGVuZFRvKGlzTm90SW52YWxpZGF0ZWQsIGNvbnRp
bnVhdGlvbik7CiAKLSAgICAgICAgdm1DYWxsKG1fb3V0Lm9wZXJhdGlvbihvcGVyYXRpb25Ob3Rp
ZnlXcml0ZSksIG1fY2FsbEZyYW1lLCBtX291dC5jb25zdEludFB0cihzZXQpLCB2YWx1ZSk7Cisg
ICAgICAgIHZtQ2FsbChtX291dC5vcGVyYXRpb24ob3BlcmF0aW9uTm90aWZ5V3JpdGUpLCBtX2Nh
bGxGcmFtZSwgbV9vdXQuY29uc3RJbnRQdHIoc2V0KSk7CiAgICAgICAgIG1fb3V0Lmp1bXAoY29u
dGludWF0aW9uKTsKICAgICAgICAgCiAgICAgICAgIG1fb3V0LmFwcGVuZFRvKGNvbnRpbnVhdGlv
biwgbGFzdE5leHQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0lu
dGVycHJldGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJw
cmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCShyZXZpc2lvbiAxODI1ODIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04
OSw2ICs4OSw0NyBAQCB1c2luZyBuYW1lc3BhY2Ugc3RkOwogCiBuYW1lc3BhY2UgSlNDIHsKIAor
U3RyaW5nIFN0YWNrRnJhbWU6OmZyaWVuZGx5U291cmNlVVJMKCkgY29uc3QKK3sKKyAgICBTdHJp
bmcgdHJhY2VMaW5lOworICAgIAorICAgIHN3aXRjaCAoY29kZVR5cGUpIHsKKyAgICBjYXNlIFN0
YWNrRnJhbWVFdmFsQ29kZToKKyAgICBjYXNlIFN0YWNrRnJhbWVGdW5jdGlvbkNvZGU6CisgICAg
Y2FzZSBTdGFja0ZyYW1lR2xvYmFsQ29kZToKKyAgICAgICAgaWYgKCFzb3VyY2VVUkwuaXNFbXB0
eSgpKQorICAgICAgICAgICAgdHJhY2VMaW5lID0gc291cmNlVVJMLmltcGwoKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBTdGFja0ZyYW1lTmF0aXZlQ29kZToKKyAgICAgICAgdHJhY2VMaW5l
ID0gIltuYXRpdmUgY29kZV0iOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIHRy
YWNlTGluZS5pc051bGwoKSA/IGVtcHR5U3RyaW5nKCkgOiB0cmFjZUxpbmU7Cit9CisKK1N0cmlu
ZyBTdGFja0ZyYW1lOjpmcmllbmRseUZ1bmN0aW9uTmFtZShDYWxsRnJhbWUqIGNhbGxGcmFtZSkg
Y29uc3QKK3sKKyAgICBTdHJpbmcgdHJhY2VMaW5lOworICAgIEpTT2JqZWN0KiBzdGFja0ZyYW1l
Q2FsbGVlID0gY2FsbGVlLmdldCgpOworCisgICAgc3dpdGNoIChjb2RlVHlwZSkgeworICAgIGNh
c2UgU3RhY2tGcmFtZUV2YWxDb2RlOgorICAgICAgICB0cmFjZUxpbmUgPSAiZXZhbCBjb2RlIjsK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTdGFja0ZyYW1lTmF0aXZlQ29kZToKKyAgICAgICAg
aWYgKGNhbGxlZSkKKyAgICAgICAgICAgIHRyYWNlTGluZSA9IGdldENhbGN1bGF0ZWREaXNwbGF5
TmFtZShjYWxsRnJhbWUsIHN0YWNrRnJhbWVDYWxsZWUpLmltcGwoKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBTdGFja0ZyYW1lRnVuY3Rpb25Db2RlOgorICAgICAgICB0cmFjZUxpbmUgPSBn
ZXRDYWxjdWxhdGVkRGlzcGxheU5hbWUoY2FsbEZyYW1lLCBzdGFja0ZyYW1lQ2FsbGVlKS5pbXBs
KCk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgU3RhY2tGcmFtZUdsb2JhbENvZGU6CisgICAg
ICAgIHRyYWNlTGluZSA9ICJnbG9iYWwgY29kZSI7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAg
ICByZXR1cm4gdHJhY2VMaW5lLmlzTnVsbCgpID8gZW1wdHlTdHJpbmcoKSA6IHRyYWNlTGluZTsK
K30KKwogSlNWYWx1ZSBldmFsKENhbGxGcmFtZSogY2FsbEZyYW1lKQogewogICAgIGlmICghY2Fs
bEZyYW1lLT5hcmd1bWVudENvdW50KCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50
ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaAkocmV2aXNpb24gMTgyNTgyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmgJKHdvcmtpbmcgY29weSkK
QEAgLTMzLDcgKzMzLDYgQEAKICNpbmNsdWRlICJBcmdMaXN0LmgiCiAjaW5jbHVkZSAiSlNDSlNW
YWx1ZS5oIgogI2luY2x1ZGUgIkpTQ2VsbC5oIgotI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIKICNp
bmNsdWRlICJKU09iamVjdC5oIgogI2luY2x1ZGUgIkpTU3RhY2suaCIKICNpbmNsdWRlICJMTElu
dERhdGEuaCIKQEAgLTUxLDYgKzUwLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgRXhl
Y3V0YWJsZUJhc2U7CiAgICAgY2xhc3MgRnVuY3Rpb25FeGVjdXRhYmxlOwogICAgIGNsYXNzIFZN
OworICAgIGNsYXNzIEpTRnVuY3Rpb247CiAgICAgY2xhc3MgSlNHbG9iYWxPYmplY3Q7CiAgICAg
Y2xhc3MgTExJbnRPZmZzZXRzRXh0cmFjdG9yOwogICAgIGNsYXNzIFByb2dyYW1FeGVjdXRhYmxl
OwpAQCAtOTAsNDUgKzkwLDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHVuc2lnbmVkIGJ5
dGVjb2RlT2Zmc2V0OwogICAgICAgICBTdHJpbmcgc291cmNlVVJMOwogICAgICAgICBKU19FWFBP
UlRfUFJJVkFURSBTdHJpbmcgdG9TdHJpbmcoQ2FsbEZyYW1lKik7Ci0gICAgICAgIFN0cmluZyBm
cmllbmRseVNvdXJjZVVSTCgpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAgIFN0cmluZyB0
cmFjZUxpbmU7Ci0KLSAgICAgICAgICAgIHN3aXRjaCAoY29kZVR5cGUpIHsKLSAgICAgICAgICAg
IGNhc2UgU3RhY2tGcmFtZUV2YWxDb2RlOgotICAgICAgICAgICAgY2FzZSBTdGFja0ZyYW1lRnVu
Y3Rpb25Db2RlOgotICAgICAgICAgICAgY2FzZSBTdGFja0ZyYW1lR2xvYmFsQ29kZToKLSAgICAg
ICAgICAgICAgICBpZiAoIXNvdXJjZVVSTC5pc0VtcHR5KCkpCi0gICAgICAgICAgICAgICAgICAg
IHRyYWNlTGluZSA9IHNvdXJjZVVSTC5pbXBsKCk7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICBjYXNlIFN0YWNrRnJhbWVOYXRpdmVDb2RlOgotICAgICAgICAgICAgICAgIHRy
YWNlTGluZSA9ICJbbmF0aXZlIGNvZGVdIjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIH0KLSAgICAgICAgICAgIHJldHVybiB0cmFjZUxpbmUuaXNOdWxsKCkgPyBlbXB0eVN0
cmluZygpIDogdHJhY2VMaW5lOwotICAgICAgICB9Ci0gICAgICAgIFN0cmluZyBmcmllbmRseUZ1
bmN0aW9uTmFtZShDYWxsRnJhbWUqIGNhbGxGcmFtZSkgY29uc3QKLSAgICAgICAgewotICAgICAg
ICAgICAgU3RyaW5nIHRyYWNlTGluZTsKLSAgICAgICAgICAgIEpTT2JqZWN0KiBzdGFja0ZyYW1l
Q2FsbGVlID0gY2FsbGVlLmdldCgpOwotCi0gICAgICAgICAgICBzd2l0Y2ggKGNvZGVUeXBlKSB7
Ci0gICAgICAgICAgICBjYXNlIFN0YWNrRnJhbWVFdmFsQ29kZToKLSAgICAgICAgICAgICAgICB0
cmFjZUxpbmUgPSAiZXZhbCBjb2RlIjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAg
ICAgIGNhc2UgU3RhY2tGcmFtZU5hdGl2ZUNvZGU6Ci0gICAgICAgICAgICAgICAgaWYgKGNhbGxl
ZSkKLSAgICAgICAgICAgICAgICAgICAgdHJhY2VMaW5lID0gZ2V0Q2FsY3VsYXRlZERpc3BsYXlO
YW1lKGNhbGxGcmFtZSwgc3RhY2tGcmFtZUNhbGxlZSkuaW1wbCgpOwotICAgICAgICAgICAgICAg
IGJyZWFrOwotICAgICAgICAgICAgY2FzZSBTdGFja0ZyYW1lRnVuY3Rpb25Db2RlOgotICAgICAg
ICAgICAgICAgIHRyYWNlTGluZSA9IGdldENhbGN1bGF0ZWREaXNwbGF5TmFtZShjYWxsRnJhbWUs
IHN0YWNrRnJhbWVDYWxsZWUpLmltcGwoKTsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIGNhc2UgU3RhY2tGcmFtZUdsb2JhbENvZGU6Ci0gICAgICAgICAgICAgICAgdHJhY2VM
aW5lID0gImdsb2JhbCBjb2RlIjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIHJldHVybiB0cmFjZUxpbmUuaXNOdWxsKCkgPyBlbXB0eVN0cmluZygp
IDogdHJhY2VMaW5lOwotICAgICAgICB9CisgICAgICAgIFN0cmluZyBmcmllbmRseVNvdXJjZVVS
TCgpIGNvbnN0OworICAgICAgICBTdHJpbmcgZnJpZW5kbHlGdW5jdGlvbk5hbWUoQ2FsbEZyYW1l
KikgY29uc3Q7CiAgICAgICAgIEpTX0VYUE9SVF9QUklWQVRFIHZvaWQgY29tcHV0ZUxpbmVBbmRD
b2x1bW4odW5zaWduZWQmIGxpbmUsIHVuc2lnbmVkJiBjb2x1bW4pOwogCiAgICAgcHJpdmF0ZToK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAJKHJldmlzaW9uIDE4MjU4MikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA1LDYg
KzEwNSwxNCBAQCB2b2lkIEpJVDo6ZW1pdEVudGVyT3B0aW1pemF0aW9uQ2hlY2soKQogfQogI2Vu
ZGlmCiAKK3ZvaWQgSklUOjplbWl0Tm90aWZ5V3JpdGUoV2F0Y2hwb2ludFNldCogc2V0KQorewor
ICAgIGlmICghc2V0IHx8IHNldC0+c3RhdGUoKSA9PSBJc0ludmFsaWRhdGVkKQorICAgICAgICBy
ZXR1cm47CisgICAgCisgICAgYWRkU2xvd0Nhc2UoYnJhbmNoOChOb3RFcXVhbCwgQWJzb2x1dGVB
ZGRyZXNzKHNldC0+YWRkcmVzc09mU3RhdGUoKSksIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVk
KSkpOworfQorCiB2b2lkIEpJVDo6YXNzZXJ0U3RhY2tQb2ludGVyT2Zmc2V0KCkKIHsKICAgICBp
ZiAoQVNTRVJUX0RJU0FCTEVEKQpAQCAtMTg5LDcgKzE5Nyw2IEBAIHZvaWQgSklUOjpwcml2YXRl
Q29tcGlsZU1haW5QYXNzKCkKICAgICAgICAgREVGSU5FX1NMT1dfT1AoaXNfb2JqZWN0X29yX251
bGwpCiAgICAgICAgIERFRklORV9TTE9XX09QKHR5cGVvZikKIAotICAgICAgICBERUZJTkVfT1Ao
b3BfdG91Y2hfZW50cnkpCiAgICAgICAgIERFRklORV9PUChvcF9hZGQpCiAgICAgICAgIERFRklO
RV9PUChvcF9iaXRhbmQpCiAgICAgICAgIERFRklORV9PUChvcF9iaXRvcikKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVQuaAkocmV2aXNpb24gMTgyNTgyKQorKysgU291cmNlL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVQuaAkod29ya2luZyBjb3B5KQpAQCAtNDU3LDcgKzQ1Nyw2IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICAKICAgICAgICAgdm9pZCBhc3NlcnRTdGFja1BvaW50ZXJPZmZzZXQo
KTsKIAotICAgICAgICB2b2lkIGVtaXRfb3BfdG91Y2hfZW50cnkoSW5zdHJ1Y3Rpb24qKTsKICAg
ICAgICAgdm9pZCBlbWl0X29wX2FkZChJbnN0cnVjdGlvbiopOwogICAgICAgICB2b2lkIGVtaXRf
b3BfYml0YW5kKEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9vcF9iaXRvcihJbnN0
cnVjdGlvbiopOwpAQCAtNjQwLDEzICs2MzksOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
dm9pZCBlbWl0R2V0R2xvYmFsVmFyKHVpbnRwdHJfdCBvcGVyYW5kKTsKICAgICAgICAgdm9pZCBl
bWl0R2V0Q2xvc3VyZVZhcihpbnQgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kKTsKICAgICAgICAg
dm9pZCBlbWl0UHV0R2xvYmFsUHJvcGVydHkodWludHB0cl90KiBvcGVyYW5kU2xvdCwgaW50IHZh
bHVlKTsKLSNpZiBVU0UoSlNWQUxVRTY0KQotICAgICAgICB2b2lkIGVtaXROb3RpZnlXcml0ZShS
ZWdpc3RlcklEIHZhbHVlLCBSZWdpc3RlcklEIHNjcmF0Y2gsIFZhcmlhYmxlV2F0Y2hwb2ludFNl
dCopOwotI2Vsc2UKLSAgICAgICAgdm9pZCBlbWl0Tm90aWZ5V3JpdGUoUmVnaXN0ZXJJRCB0YWcs
IFJlZ2lzdGVySUQgcGF5bG9hZCwgUmVnaXN0ZXJJRCBzY3JhdGNoLCBWYXJpYWJsZVdhdGNocG9p
bnRTZXQqKTsKLSNlbmRpZgotICAgICAgICB2b2lkIGVtaXRQdXRHbG9iYWxWYXIodWludHB0cl90
IG9wZXJhbmQsIGludCB2YWx1ZSwgVmFyaWFibGVXYXRjaHBvaW50U2V0Kik7Ci0gICAgICAgIHZv
aWQgZW1pdFB1dENsb3N1cmVWYXIoaW50IHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFuZCwgaW50IHZh
bHVlLCBWYXJpYWJsZVdhdGNocG9pbnRTZXQqKTsKKyAgICAgICAgdm9pZCBlbWl0Tm90aWZ5V3Jp
dGUoV2F0Y2hwb2ludFNldCopOworICAgICAgICB2b2lkIGVtaXRQdXRHbG9iYWxWYXIodWludHB0
cl90IG9wZXJhbmQsIGludCB2YWx1ZSwgV2F0Y2hwb2ludFNldCopOworICAgICAgICB2b2lkIGVt
aXRQdXRDbG9zdXJlVmFyKGludCBzY29wZSwgdWludHB0cl90IG9wZXJhbmQsIGludCB2YWx1ZSwg
V2F0Y2hwb2ludFNldCopOwogCiAgICAgICAgIHZvaWQgZW1pdEluaXRSZWdpc3RlcihpbnQgZHN0
KTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCShyZXZp
c2lvbiAxODI1ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC04NzksMTUgKzg3OSw2IEBAIHZvaWQgSklUOjplbWl0U2xvd19v
cF90b19udW1iZXIoSW5zdHJ1Y3QKIAogI2VuZGlmIC8vIFVTRShKU1ZBTFVFNjQpCiAKLXZvaWQg
SklUOjplbWl0X29wX3RvdWNoX2VudHJ5KEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24p
Ci17Ci0gICAgaWYgKG1fY29kZUJsb2NrLT5zeW1ib2xUYWJsZSgpLT5tX2Z1bmN0aW9uRW50ZXJl
ZE9uY2UuaGFzQmVlbkludmFsaWRhdGVkKCkpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBK
SVRTbG93UGF0aENhbGwgc2xvd1BhdGhDYWxsKHRoaXMsIGN1cnJlbnRJbnN0cnVjdGlvbiwgc2xv
d19wYXRoX3RvdWNoX2VudHJ5KTsKLSAgICBzbG93UGF0aENhbGwuY2FsbCgpOwotfQotCiB2b2lk
IEpJVDo6ZW1pdF9vcF9sb29wX2hpbnQoSW5zdHJ1Y3Rpb24qKQogewogICAgIC8vIEVtaXQgdGhl
IEpJVCBvcHRpbWl6YXRpb24gY2hlY2s6IApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRPcGVyYXRpb25zLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aml0L0pJVE9wZXJhdGlvbnMuY3BwCShyZXZpc2lvbiAxODI1ODIpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaml0L0pJVE9wZXJhdGlvbnMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05NTIsNiAr
OTUyLDE0IEBAIEVuY29kZWRKU1ZhbHVlIEpJVF9PUEVSQVRJT04gb3BlcmF0aW9uTmUKICAgICBy
ZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTRnVuY3Rpb246OmNyZWF0ZSh2bSwgc3RhdGljX2Nhc3Q8
RnVuY3Rpb25FeGVjdXRhYmxlKj4oZnVuY3Rpb25FeGVjdXRhYmxlKSwgc2NvcGUpKTsKIH0KIAor
RW5jb2RlZEpTVmFsdWUgSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdGdW5jdGlvbldpdGhJbnZh
bGlkYXRlZFJlYWxsb2NhdGlvbldhdGNocG9pbnQoRXhlY1N0YXRlKiBleGVjLCBKU1Njb3BlKiBz
Y29wZSwgSlNDZWxsKiBmdW5jdGlvbkV4ZWN1dGFibGUpCit7CisgICAgQVNTRVJUKGZ1bmN0aW9u
RXhlY3V0YWJsZS0+aW5oZXJpdHMoRnVuY3Rpb25FeGVjdXRhYmxlOjppbmZvKCkpKTsKKyAgICBW
TSYgdm0gPSBleGVjLT52bSgpOworICAgIE5hdGl2ZUNhbGxGcmFtZVRyYWNlciB0cmFjZXIoJnZt
LCBleGVjKTsKKyAgICByZXR1cm4gSlNWYWx1ZTo6ZW5jb2RlKEpTRnVuY3Rpb246OmNyZWF0ZVdp
dGhJbnZhbGlkYXRlZFJlYWxsb2NhdGlvbldhdGNocG9pbnQodm0sIHN0YXRpY19jYXN0PEZ1bmN0
aW9uRXhlY3V0YWJsZSo+KGZ1bmN0aW9uRXhlY3V0YWJsZSksIHNjb3BlKSk7Cit9CisKIEpTQ2Vs
bCogSklUX09QRVJBVElPTiBvcGVyYXRpb25OZXdPYmplY3QoRXhlY1N0YXRlKiBleGVjLCBTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSkKIHsKICAgICBWTSogdm0gPSAmZXhlYy0+dm0oKTsKQEAgLTE3MjIs
OCArMTczMCw4IEBAIHZvaWQgSklUX09QRVJBVElPTiBvcGVyYXRpb25QdXRUb1Njb3BlKEUKICAg
ICBpZiAobW9kZUFuZFR5cGUudHlwZSgpID09IExvY2FsQ2xvc3VyZVZhcikgewogICAgICAgICBK
U0xleGljYWxFbnZpcm9ubWVudCogZW52aXJvbm1lbnQgPSBqc0Nhc3Q8SlNMZXhpY2FsRW52aXJv
bm1lbnQqPihzY29wZSk7CiAgICAgICAgIGVudmlyb25tZW50LT52YXJpYWJsZUF0KFNjb3BlT2Zm
c2V0KHBjWzZdLnUub3BlcmFuZCkpLnNldCh2bSwgZW52aXJvbm1lbnQsIHZhbHVlKTsKLSAgICAg
ICAgaWYgKFZhcmlhYmxlV2F0Y2hwb2ludFNldCogc2V0ID0gcGNbNV0udS53YXRjaHBvaW50U2V0
KQotICAgICAgICAgICAgc2V0LT5ub3RpZnlXcml0ZSh2bSwgdmFsdWUsICJFeGVjdXRlZCBvcF9w
dXRfc2NvcGU8TG9jYWxDbG9zdXJlVmFyPiIpOworICAgICAgICBpZiAoV2F0Y2hwb2ludFNldCog
c2V0ID0gcGNbNV0udS53YXRjaHBvaW50U2V0KQorICAgICAgICAgICAgc2V0LT50b3VjaCgiRXhl
Y3V0ZWQgb3BfcHV0X3Njb3BlPExvY2FsQ2xvc3VyZVZhcj4iKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KICAgICBpZiAobW9kZUFuZFR5cGUubW9kZSgpID09IFRocm93SWZOb3RGb3VuZCAmJiAh
c2NvcGUtPmhhc1Byb3BlcnR5KGV4ZWMsIGlkZW50KSkgewpJbmRleDogU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL2ppdC9KSVRPcGVyYXRpb25zLmgJKHJldmlzaW9uIDE4MjU4MikKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUT3BlcmF0aW9ucy5oCSh3b3JraW5nIGNvcHkpCkBAIC0zNyw3
ICszNyw2IEBACiAjaW5jbHVkZSAiUHV0S2luZC5oIgogI2luY2x1ZGUgIlNwaWxsUmVnaXN0ZXJz
TW9kZS5oIgogI2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgiCi0jaW5jbHVkZSAiVmFyaWFi
bGVXYXRjaHBvaW50U2V0LmgiCiAKIAogbmFtZXNwYWNlIEpTQyB7CkBAIC04NSw3ICs4NCw3IEBA
IGV4dGVybiAiQyIgewogICAgIFN5bXRhYjogU3ltYm9sVGFibGUqCiAgICAgVjogdm9pZAogICAg
IFZtOiBWTSoKLSAgICBWd3M6IFZhcmlhYmxlV2F0Y2hwb2ludFNldCoKKyAgICBXczogV2F0Y2hw
b2ludFNldCoKICAgICBaOiBpbnQzMl90CiAqLwogCkBAIC0xOTEsNyArMTkwLDcgQEAgdHlwZWRl
ZiB2b2lkIEpJVF9PUEVSQVRJT04gKCpWX0pJVE9wZXJhdAogdHlwZWRlZiB2b2lkIEpJVF9PUEVS
QVRJT04gKCpWX0pJVE9wZXJhdGlvbl9FUGMpKEV4ZWNTdGF0ZSosIEluc3RydWN0aW9uKik7CiB0
eXBlZGVmIHZvaWQgSklUX09QRVJBVElPTiAoKlZfSklUT3BlcmF0aW9uX0VQWkopKEV4ZWNTdGF0
ZSosIHZvaWQqLCBpbnQzMl90LCBFbmNvZGVkSlNWYWx1ZSk7CiB0eXBlZGVmIHZvaWQgSklUX09Q
RVJBVElPTiAoKlZfSklUT3BlcmF0aW9uX0VTc2lKSkkpKEV4ZWNTdGF0ZSosIFN0cnVjdHVyZVN0
dWJJbmZvKiwgRW5jb2RlZEpTVmFsdWUsIEVuY29kZWRKU1ZhbHVlLCBTdHJpbmdJbXBsKik7Ci10
eXBlZGVmIHZvaWQgSklUX09QRVJBVElPTiAoKlZfSklUT3BlcmF0aW9uX0VWd3NKKShFeGVjU3Rh
dGUqLCBWYXJpYWJsZVdhdGNocG9pbnRTZXQqLCBFbmNvZGVkSlNWYWx1ZSk7Cit0eXBlZGVmIHZv
aWQgSklUX09QRVJBVElPTiAoKlZfSklUT3BlcmF0aW9uX0VXcykoRXhlY1N0YXRlKiwgV2F0Y2hw
b2ludFNldCopOwogdHlwZWRlZiB2b2lkIEpJVF9PUEVSQVRJT04gKCpWX0pJVE9wZXJhdGlvbl9F
WikoRXhlY1N0YXRlKiwgaW50MzJfdCk7CiB0eXBlZGVmIHZvaWQgSklUX09QRVJBVElPTiAoKlZf
SklUT3BlcmF0aW9uX0VaSikoRXhlY1N0YXRlKiwgaW50MzJfdCwgRW5jb2RlZEpTVmFsdWUpOwog
dHlwZWRlZiB2b2lkIEpJVF9PUEVSQVRJT04gKCpWX0pJVE9wZXJhdGlvbl9FWkpaWlopKEV4ZWNT
dGF0ZSosIGludDMyX3QsIEVuY29kZWRKU1ZhbHVlLCBpbnQzMl90LCBpbnQzMl90LCBpbnQzMl90
KTsKQEAgLTI3OCw2ICsyNzcsNyBAQCBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJh
dGlvbk5lCiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0FycmF5QnVm
ZmVyV2l0aFByb2ZpbGUoRXhlY1N0YXRlKiwgQXJyYXlBbGxvY2F0aW9uUHJvZmlsZSosIGNvbnN0
IEpTVmFsdWUqIHZhbHVlcywgaW50MzJfdCBzaXplKSBXVEZfSU5URVJOQUw7CiBFbmNvZGVkSlNW
YWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0FycmF5V2l0aFNpemVBbmRQcm9maWxlKEV4
ZWNTdGF0ZSosIEFycmF5QWxsb2NhdGlvblByb2ZpbGUqLCBFbmNvZGVkSlNWYWx1ZSBzaXplKSBX
VEZfSU5URVJOQUw7CiBFbmNvZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0Z1
bmN0aW9uKEV4ZWNTdGF0ZSosIEpTU2NvcGUqLCBKU0NlbGwqKSBXVEZfSU5URVJOQUw7CitFbmNv
ZGVkSlNWYWx1ZSBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld0Z1bmN0aW9uV2l0aEludmFsaWRh
dGVkUmVhbGxvY2F0aW9uV2F0Y2hwb2ludChFeGVjU3RhdGUqLCBKU1Njb3BlKiwgSlNDZWxsKikg
V1RGX0lOVEVSTkFMOwogSlNDZWxsKiBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbk5ld09iamVjdChF
eGVjU3RhdGUqLCBTdHJ1Y3R1cmUqKSBXVEZfSU5URVJOQUw7CiBFbmNvZGVkSlNWYWx1ZSBKSVRf
T1BFUkFUSU9OIG9wZXJhdGlvbk5ld1JlZ2V4cChFeGVjU3RhdGUqLCB2b2lkKikgV1RGX0lOVEVS
TkFMOwogdm9pZCBKSVRfT1BFUkFUSU9OIG9wZXJhdGlvbkhhbmRsZVdhdGNoZG9nVGltZXIoRXhl
Y1N0YXRlKikgV1RGX0lOVEVSTkFMOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRQcm9wZXJ0eUFjY2VzczMyXzY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCShyZXZpc2lvbiAxODI1ODIpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzMzJfNjQuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC03NTAsMzYgKzc1MCwxOSBAQCB2b2lkIEpJVDo6ZW1pdFB1dEdsb2Jh
bFByb3BlcnR5KHVpbnRwdHJfCiAgICAgc3RvcmUzMihyZWdUMiwgQmFzZUluZGV4KHJlZ1QwLCBy
ZWdUMSwgVGltZXNFaWdodCwgKGZpcnN0T3V0T2ZMaW5lT2Zmc2V0IC0gMikgKiBzaXplb2YoRW5j
b2RlZEpTVmFsdWUpICsgT0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFz
Qml0cy5wYXlsb2FkKSkpOwogfQogCi12b2lkIEpJVDo6ZW1pdE5vdGlmeVdyaXRlKFJlZ2lzdGVy
SUQgdGFnLCBSZWdpc3RlcklEIHBheWxvYWQsIFJlZ2lzdGVySUQgc2NyYXRjaCwgVmFyaWFibGVX
YXRjaHBvaW50U2V0KiBzZXQpCi17Ci0gICAgaWYgKCFzZXQgfHwgc2V0LT5zdGF0ZSgpID09IElz
SW52YWxpZGF0ZWQpCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBsb2FkOChzZXQtPmFkZHJl
c3NPZlN0YXRlKCksIHNjcmF0Y2gpOwotICAgIEp1bXAgaXNEb25lID0gYnJhbmNoMzIoRXF1YWws
IHNjcmF0Y2gsIFRydXN0ZWRJbW0zMihJc0ludmFsaWRhdGVkKSk7Ci0KLSAgICBKdW1wTGlzdCBu
b3RpZnlTbG93ID0gYnJhbmNoMzIoCi0gICAgICAgIE5vdEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3Mo
c2V0LT5hZGRyZXNzT2ZJbmZlcnJlZFZhbHVlKCktPnBheWxvYWRQb2ludGVyKCkpLCBwYXlsb2Fk
KTsKLSAgICBub3RpZnlTbG93LmFwcGVuZChicmFuY2gzMigKLSAgICAgICAgTm90RXF1YWwsIEFi
c29sdXRlQWRkcmVzcyhzZXQtPmFkZHJlc3NPZkluZmVycmVkVmFsdWUoKS0+dGFnUG9pbnRlcigp
KSwgdGFnKSk7Ci0gICAgYWRkU2xvd0Nhc2Uobm90aWZ5U2xvdyk7Ci0KLSAgICBpc0RvbmUubGlu
ayh0aGlzKTsKLX0KLQotdm9pZCBKSVQ6OmVtaXRQdXRHbG9iYWxWYXIodWludHB0cl90IG9wZXJh
bmQsIGludCB2YWx1ZSwgVmFyaWFibGVXYXRjaHBvaW50U2V0KiBzZXQpCit2b2lkIEpJVDo6ZW1p
dFB1dEdsb2JhbFZhcih1aW50cHRyX3Qgb3BlcmFuZCwgaW50IHZhbHVlLCBXYXRjaHBvaW50U2V0
KiBzZXQpCiB7CiAgICAgZW1pdExvYWQodmFsdWUsIHJlZ1QxLCByZWdUMCk7Ci0gICAgZW1pdE5v
dGlmeVdyaXRlKHJlZ1QxLCByZWdUMCwgcmVnVDIsIHNldCk7CisgICAgZW1pdE5vdGlmeVdyaXRl
KHNldCk7CiAgICAgc3RvcmUzMihyZWdUMSwgcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4ob3BlcmFu
ZCkgKyBPQkpFQ1RfT0ZGU0VUT0YoRW5jb2RlZFZhbHVlRGVzY3JpcHRvciwgYXNCaXRzLnRhZykp
OwogICAgIHN0b3JlMzIocmVnVDAsIHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG9wZXJhbmQpICsg
T0JKRUNUX09GRlNFVE9GKEVuY29kZWRWYWx1ZURlc2NyaXB0b3IsIGFzQml0cy5wYXlsb2FkKSk7
CiB9CiAKLXZvaWQgSklUOjplbWl0UHV0Q2xvc3VyZVZhcihpbnQgc2NvcGUsIHVpbnRwdHJfdCBv
cGVyYW5kLCBpbnQgdmFsdWUsIFZhcmlhYmxlV2F0Y2hwb2ludFNldCogc2V0KQordm9pZCBKSVQ6
OmVtaXRQdXRDbG9zdXJlVmFyKGludCBzY29wZSwgdWludHB0cl90IG9wZXJhbmQsIGludCB2YWx1
ZSwgV2F0Y2hwb2ludFNldCogc2V0KQogewogICAgIGVtaXRMb2FkKHZhbHVlLCByZWdUMywgcmVn
VDIpOwogICAgIGVtaXRMb2FkKHNjb3BlLCByZWdUMSwgcmVnVDApOwotICAgIGVtaXROb3RpZnlX
cml0ZShyZWdUMywgcmVnVDIsIHJlZ1Q0LCBzZXQpOworICAgIGVtaXROb3RpZnlXcml0ZShzZXQp
OwogICAgIHN0b3JlMzIocmVnVDMsIEFkZHJlc3MocmVnVDAsIEpTRW52aXJvbm1lbnRSZWNvcmQ6
Om9mZnNldE9mVmFyaWFibGVzKCkgKyBvcGVyYW5kICogc2l6ZW9mKFJlZ2lzdGVyKSArIFRhZ09m
ZnNldCkpOwogICAgIHN0b3JlMzIocmVnVDIsIEFkZHJlc3MocmVnVDAsIEpTRW52aXJvbm1lbnRS
ZWNvcmQ6Om9mZnNldE9mVmFyaWFibGVzKCkgKyBvcGVyYW5kICogc2l6ZW9mKFJlZ2lzdGVyKSAr
IFBheWxvYWRPZmZzZXQpKTsKIH0KQEAgLTgyNiw3ICs4MDksNyBAQCB2b2lkIEpJVDo6ZW1pdFNs
b3dfb3BfcHV0X3RvX3Njb3BlKEluc3RyCiAgICAgICAgIGxpbmtDb3VudCsrOwogICAgIGlmICgo
cmVzb2x2ZVR5cGUgPT0gR2xvYmFsVmFyIHx8IHJlc29sdmVUeXBlID09IEdsb2JhbFZhcldpdGhW
YXJJbmplY3Rpb25DaGVja3MgfHwgcmVzb2x2ZVR5cGUgPT0gTG9jYWxDbG9zdXJlVmFyKQogICAg
ICAgICAmJiBjdXJyZW50SW5zdHJ1Y3Rpb25bNV0udS53YXRjaHBvaW50U2V0LT5zdGF0ZSgpICE9
IElzSW52YWxpZGF0ZWQpCi0gICAgICAgIGxpbmtDb3VudCArPSAyOworICAgICAgICBsaW5rQ291
bnQrKzsKICAgICBpZiAoIWxpbmtDb3VudCkKICAgICAgICAgcmV0dXJuOwogICAgIHdoaWxlIChs
aW5rQ291bnQtLSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlB
Y2Nlc3MuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJv
cGVydHlBY2Nlc3MuY3BwCShyZXZpc2lvbiAxODI1ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzI4LDI5ICs3
MjgsMTggQEAgdm9pZCBKSVQ6OmVtaXRQdXRHbG9iYWxQcm9wZXJ0eSh1aW50cHRyXwogICAgIHN0
b3JlUHRyKHJlZ1QyLCBCYXNlSW5kZXgocmVnVDAsIHJlZ1QxLCBUaW1lc0VpZ2h0LCAoZmlyc3RP
dXRPZkxpbmVPZmZzZXQgLSAyKSAqIHNpemVvZihFbmNvZGVkSlNWYWx1ZSkpKTsKIH0KIAotdm9p
ZCBKSVQ6OmVtaXROb3RpZnlXcml0ZShSZWdpc3RlcklEIHZhbHVlLCBSZWdpc3RlcklEIHNjcmF0
Y2gsIFZhcmlhYmxlV2F0Y2hwb2ludFNldCogc2V0KQotewotICAgIGlmICghc2V0IHx8IHNldC0+
c3RhdGUoKSA9PSBJc0ludmFsaWRhdGVkKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgbG9h
ZDgoc2V0LT5hZGRyZXNzT2ZTdGF0ZSgpLCBzY3JhdGNoKTsKLSAgICBKdW1wIGlzRG9uZSA9IGJy
YW5jaDMyKEVxdWFsLCBzY3JhdGNoLCBUcnVzdGVkSW1tMzIoSXNJbnZhbGlkYXRlZCkpOwotICAg
IGFkZFNsb3dDYXNlKGJyYW5jaDY0KE5vdEVxdWFsLCBBYnNvbHV0ZUFkZHJlc3Moc2V0LT5hZGRy
ZXNzT2ZJbmZlcnJlZFZhbHVlKCkpLCB2YWx1ZSkpOwotICAgIGlzRG9uZS5saW5rKHRoaXMpOwot
fQotCi12b2lkIEpJVDo6ZW1pdFB1dEdsb2JhbFZhcih1aW50cHRyX3Qgb3BlcmFuZCwgaW50IHZh
bHVlLCBWYXJpYWJsZVdhdGNocG9pbnRTZXQqIHNldCkKK3ZvaWQgSklUOjplbWl0UHV0R2xvYmFs
VmFyKHVpbnRwdHJfdCBvcGVyYW5kLCBpbnQgdmFsdWUsIFdhdGNocG9pbnRTZXQqIHNldCkKIHsK
ICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCByZWdUMCk7Ci0gICAgZW1pdE5vdGlm
eVdyaXRlKHJlZ1QwLCByZWdUMSwgc2V0KTsKKyAgICBlbWl0Tm90aWZ5V3JpdGUoc2V0KTsKICAg
ICBzdG9yZVB0cihyZWdUMCwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ob3BlcmFuZCkpOwogfQog
Ci12b2lkIEpJVDo6ZW1pdFB1dENsb3N1cmVWYXIoaW50IHNjb3BlLCB1aW50cHRyX3Qgb3BlcmFu
ZCwgaW50IHZhbHVlLCBWYXJpYWJsZVdhdGNocG9pbnRTZXQqIHNldCkKK3ZvaWQgSklUOjplbWl0
UHV0Q2xvc3VyZVZhcihpbnQgc2NvcGUsIHVpbnRwdHJfdCBvcGVyYW5kLCBpbnQgdmFsdWUsIFdh
dGNocG9pbnRTZXQqIHNldCkKIHsKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKHZhbHVlLCBy
ZWdUMSk7CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihzY29wZSwgcmVnVDApOwotICAgIGVt
aXROb3RpZnlXcml0ZShyZWdUMSwgcmVnVDIsIHNldCk7CisgICAgZW1pdE5vdGlmeVdyaXRlKHNl
dCk7CiAgICAgc3RvcmVQdHIocmVnVDEsIEFkZHJlc3MocmVnVDAsIEpTRW52aXJvbm1lbnRSZWNv
cmQ6Om9mZnNldE9mVmFyaWFibGVzKCkgKyBvcGVyYW5kICogc2l6ZW9mKFJlZ2lzdGVyKSkpOwog
fQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTExJbnRTbG93UGF0aHMuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9MTEludFNsb3dQYXRo
cy5jcHAJKHJldmlzaW9uIDE4MjU4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9M
TEludFNsb3dQYXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0MDIsOCArMTQwMiwxMiBAQCBM
TElOVF9TTE9XX1BBVEhfREVDTChzbG93X3BhdGhfcHV0X3RvX3NjCiAgICAgaWYgKG1vZGVBbmRU
eXBlLnR5cGUoKSA9PSBMb2NhbENsb3N1cmVWYXIpIHsKICAgICAgICAgSlNMZXhpY2FsRW52aXJv
bm1lbnQqIGVudmlyb25tZW50ID0ganNDYXN0PEpTTGV4aWNhbEVudmlyb25tZW50Kj4oc2NvcGUp
OwogICAgICAgICBlbnZpcm9ubWVudC0+dmFyaWFibGVBdChTY29wZU9mZnNldChwY1s2XS51Lm9w
ZXJhbmQpKS5zZXQodm0sIGVudmlyb25tZW50LCB2YWx1ZSk7Ci0gICAgICAgIGlmIChWYXJpYWJs
ZVdhdGNocG9pbnRTZXQqIHNldCA9IHBjWzVdLnUud2F0Y2hwb2ludFNldCkKLSAgICAgICAgICAg
IHNldC0+bm90aWZ5V3JpdGUodm0sIHZhbHVlLCAiRXhlY3V0ZWQgb3BfcHV0X3Njb3BlPExvY2Fs
Q2xvc3VyZVZhcj4iKTsKKyAgICAgICAgCisgICAgICAgIC8vIEhhdmUgdG8gZG8gdGhpcyAqYWZ0
ZXIqIHRoZSB3cml0ZSwgYmVjYXVzZSBpZiB0aGlzIHB1dHMgdGhlIHNldCBpbnRvIElzV2F0Y2hl
ZCwgdGhlbiB3ZSBuZWVkCisgICAgICAgIC8vIHRvIGhhdmUgYWxyZWFkeSBjaGFuZ2VkIHRoZSB2
YWx1ZSBvZiB0aGUgdmFyaWFibGUuIE90aGVyd2lzZSB3ZSBtaWdodCB3YXRjaCBhbmQgY29uc3Rh
bnQtZm9sZAorICAgICAgICAvLyB0byB0aGUgVW5kZWZpbmVkIHZhbHVlIGZyb20gYmVmb3JlIHRo
ZSBhc3NpZ25tZW50LgorICAgICAgICBpZiAoV2F0Y2hwb2ludFNldCogc2V0ID0gcGNbNV0udS53
YXRjaHBvaW50U2V0KQorICAgICAgICAgICAgc2V0LT50b3VjaCgiRXhlY3V0ZWQgb3BfcHV0X3Nj
b3BlPExvY2FsQ2xvc3VyZVZhcj4iKTsKICAgICAgICAgTExJTlRfRU5EKCk7CiAgICAgfQogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlcjMyXzY0
LmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvbGxpbnQvTG93TGV2ZWxJ
bnRlcnByZXRlcjMyXzY0LmFzbQkocmV2aXNpb24gMTgyNTgyKQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL2xsaW50L0xvd0xldmVsSW50ZXJwcmV0ZXIzMl82NC5hc20JKHdvcmtpbmcgY29weSkK
QEAgLTgwNSwxNCArODA1LDYgQEAgX2xsaW50X29wX21vdjoKICAgICBkaXNwYXRjaCgzKQogCiAK
LW1hY3JvIG5vdGlmeVdyaXRlKHNldCwgdmFsdWVUYWcsIHZhbHVlUGF5bG9hZCwgc2NyYXRjaCwg
c2xvdykKLSAgICBsb2FkYiBWYXJpYWJsZVdhdGNocG9pbnRTZXQ6Om1fc3RhdGVbc2V0XSwgc2Ny
YXRjaAotICAgIGJpZXEgc2NyYXRjaCwgSXNJbnZhbGlkYXRlZCwgLmRvbmUKLSAgICBiaW5lcSB2
YWx1ZVBheWxvYWQsIFZhcmlhYmxlV2F0Y2hwb2ludFNldDo6bV9pbmZlcnJlZFZhbHVlICsgUGF5
bG9hZE9mZnNldFtzZXRdLCBzbG93Ci0gICAgYmluZXEgdmFsdWVUYWcsIFZhcmlhYmxlV2F0Y2hw
b2ludFNldDo6bV9pbmZlcnJlZFZhbHVlICsgVGFnT2Zmc2V0W3NldF0sIHNsb3cKLS5kb25lOgot
ZW5kCi0KIF9sbGludF9vcF9ub3Q6CiAgICAgdHJhY2VFeGVjdXRpb24oKQogICAgIGxvYWRpIDhb
UENdLCB0MApAQCAtMjIwNCw3ICsyMTk2LDcgQEAgbWFjcm8gcHV0R2xvYmFsVmFyKCkKICAgICBs
b2FkaXNGcm9tSW5zdHJ1Y3Rpb24oMywgdDApCiAgICAgbG9hZENvbnN0YW50T3JWYXJpYWJsZSh0
MCwgdDEsIHQyKQogICAgIGxvYWRwRnJvbUluc3RydWN0aW9uKDUsIHQzKQotICAgIG5vdGlmeVdy
aXRlKHQzLCB0MSwgdDIsIHQwLCAucER5bmFtaWMpCisgICAgbm90aWZ5V3JpdGUodDMsIC5wRHlu
YW1pYykKICAgICBsb2FkcEZyb21JbnN0cnVjdGlvbig2LCB0MCkKICAgICBzdG9yZWkgdDEsIFRh
Z09mZnNldFt0MF0KICAgICBzdG9yZWkgdDIsIFBheWxvYWRPZmZzZXRbdDBdCkBAIC0yMjIzLDcg
KzIyMTUsNyBAQCBtYWNybyBwdXRMb2NhbENsb3N1cmVWYXIoKQogICAgIGxvYWRDb25zdGFudE9y
VmFyaWFibGUodDEsIHQyLCB0MykKICAgICBsb2FkcEZyb21JbnN0cnVjdGlvbig1LCB0NCkKICAg
ICBidHB6IHQ0LCAubm9WYXJpYWJsZVdhdGNocG9pbnRTZXQKLSAgICBub3RpZnlXcml0ZSh0NCwg
dDIsIHQzLCB0MSwgLnBEeW5hbWljKQorICAgIG5vdGlmeVdyaXRlKHQ0LCAucER5bmFtaWMpCiAu
bm9WYXJpYWJsZVdhdGNocG9pbnRTZXQ6CiAgICAgbG9hZGlzRnJvbUluc3RydWN0aW9uKDYsIHQx
KQogICAgIHN0b3JlaSB0MiwgSlNFbnZpcm9ubWVudFJlY29yZF92YXJpYWJsZXMgKyBUYWdPZmZz
ZXRbdDAsIHQxLCA4XQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2xsaW50L0xvd0xldmVs
SW50ZXJwcmV0ZXI2NC5hc20KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2xs
aW50L0xvd0xldmVsSW50ZXJwcmV0ZXI2NC5hc20JKHJldmlzaW9uIDE4MjU4MikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyNjQuYXNtCSh3b3JraW5n
IGNvcHkpCkBAIC02OTAsMTMgKzY5MCw2IEBAIF9sbGludF9vcF9tb3Y6CiAgICAgZGlzcGF0Y2go
MykKIAogCi1tYWNybyBub3RpZnlXcml0ZShzZXQsIHZhbHVlLCBzY3JhdGNoLCBzbG93KQotICAg
IGxvYWRiIFZhcmlhYmxlV2F0Y2hwb2ludFNldDo6bV9zdGF0ZVtzZXRdLCBzY3JhdGNoCi0gICAg
YmllcSBzY3JhdGNoLCBJc0ludmFsaWRhdGVkLCAuZG9uZQotICAgIGJxbmVxIHZhbHVlLCBWYXJp
YWJsZVdhdGNocG9pbnRTZXQ6Om1faW5mZXJyZWRWYWx1ZVtzZXRdLCBzbG93Ci0uZG9uZToKLWVu
ZAotCiBfbGxpbnRfb3Bfbm90OgogICAgIHRyYWNlRXhlY3V0aW9uKCkKICAgICBsb2FkaXNGcm9t
SW5zdHJ1Y3Rpb24oMiwgdDApCkBAIC0yMDY5LDggKzIwNjIsOCBAQCBtYWNybyBwdXRHbG9iYWxW
YXIoKQogICAgIGxvYWRpc0Zyb21JbnN0cnVjdGlvbigzLCB0MCkKICAgICBsb2FkQ29uc3RhbnRP
clZhcmlhYmxlKHQwLCB0MSkKICAgICBsb2FkcEZyb21JbnN0cnVjdGlvbig1LCB0MikKLSAgICBu
b3RpZnlXcml0ZSh0MiwgdDEsIHQwLCAucER5bmFtaWMpCiAgICAgbG9hZHBGcm9tSW5zdHJ1Y3Rp
b24oNiwgdDApCisgICAgbm90aWZ5V3JpdGUodDIsIC5wRHluYW1pYykKICAgICBzdG9yZXEgdDEs
IFt0MF0KIGVuZAogCkBAIC0yMDg2LDcgKzIwNzksNyBAQCBtYWNybyBwdXRMb2NhbENsb3N1cmVW
YXIoKQogICAgIGxvYWRDb25zdGFudE9yVmFyaWFibGUodDEsIHQyKQogICAgIGxvYWRwRnJvbUlu
c3RydWN0aW9uKDUsIHQzKQogICAgIGJ0cHogdDMsIC5ub1ZhcmlhYmxlV2F0Y2hwb2ludFNldAot
ICAgIG5vdGlmeVdyaXRlKHQzLCB0MiwgdDEsIC5wRHluYW1pYykKKyAgICBub3RpZnlXcml0ZSh0
MywgLnBEeW5hbWljKQogLm5vVmFyaWFibGVXYXRjaHBvaW50U2V0OgogICAgIGxvYWRpc0Zyb21J
bnN0cnVjdGlvbig2LCB0MSkKICAgICBzdG9yZXEgdDIsIEpTRW52aXJvbm1lbnRSZWNvcmRfdmFy
aWFibGVzW3QwLCB0MSwgOF0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dM
ZXZlbEludGVycHJldGVyLmFzbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
bGxpbnQvTG93TGV2ZWxJbnRlcnByZXRlci5hc20JKHJldmlzaW9uIDE4MjU4MikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9sbGludC9Mb3dMZXZlbEludGVycHJldGVyLmFzbQkod29ya2luZyBj
b3B5KQpAQCAtNTE5LDYgKzUxOSwxMCBAQCBtYWNybyBza2lwSWZJc1JlbWVtYmVyZWRPckluRWRl
bihjZWxsLCBzCiAgICAgY29udGludWF0aW9uKHNjcmF0Y2gxKQogZW5kCiAKK21hY3JvIG5vdGlm
eVdyaXRlKHNldCwgc2xvdykKKyAgICBiYm5lcSBXYXRjaHBvaW50U2V0OjptX3N0YXRlW3NldF0s
IElzSW52YWxpZGF0ZWQsIHNsb3cKK2VuZAorCiBtYWNybyBjaGVja1N3aXRjaFRvSklUKGluY3Jl
bWVudCwgYWN0aW9uKQogICAgIGxvYWRwIENvZGVCbG9ja1tjZnJdLCB0MAogICAgIGJhZGRpcyBp
bmNyZW1lbnQsIENvZGVCbG9jazo6bV9sbGludEV4ZWN1dGVDb3VudGVyICsgQmFzZWxpbmVFeGVj
dXRpb25Db3VudGVyOjptX2NvdW50ZXJbdDBdLCAuY29udGludWUKQEAgLTkyMCwxMiArOTI0LDYg
QEAgZW5kCiAKIAogIyBWYWx1ZS1yZXByZXNlbnRhdGlvbi1hZ25vc3RpYyBjb2RlLgotX2xsaW50
X29wX3RvdWNoX2VudHJ5OgotICAgIHRyYWNlRXhlY3V0aW9uKCkKLSAgICBjYWxsU2xvd1BhdGgo
X3Nsb3dfcGF0aF90b3VjaF9lbnRyeSkKLSAgICBkaXNwYXRjaCgxKQotCi0KIF9sbGludF9vcF9j
cmVhdGVfZGlyZWN0X2FyZ3VtZW50czoKICAgICB0cmFjZUV4ZWN1dGlvbigpCiAgICAgY2FsbFNs
b3dQYXRoKF9zbG93X3BhdGhfY3JlYXRlX2RpcmVjdF9hcmd1bWVudHMpCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9Db21tb25TbG93UGF0aHMuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5jcHAJKHJldmlz
aW9uIDE4MjU4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQ
YXRocy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU1LDcgKzU1LDYgQEAKICNpbmNsdWRlICJTY29w
ZWRBcmd1bWVudHMuaCIKICNpbmNsdWRlICJTdHJ1Y3R1cmVSYXJlRGF0YUlubGluZXMuaCIKICNp
bmNsdWRlICJUeXBlUHJvZmlsZXJMb2cuaCIKLSNpbmNsdWRlICJWYXJpYWJsZVdhdGNocG9pbnRT
ZXRJbmxpbmVzLmgiCiAjaW5jbHVkZSA8d3RmL1N0cmluZ1ByaW50U3RyZWFtLmg+CiAKIG5hbWVz
cGFjZSBKU0MgewpAQCAtMjA2LDEzICsyMDUsNiBAQCBTTE9XX1BBVEhfREVDTChzbG93X3BhdGhf
Y29uc3RydWN0X2FyaXR5CiAgICAgUkVUVVJOX1RXTygwLCBzZXR1cEFyaXR5Q2hlY2tEYXRhKHZt
LCBzbG90c1RvQWRkKSk7CiB9CiAKLVNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF90b3VjaF9lbnRy
eSkKLXsKLSAgICBCRUdJTigpOwotICAgIGV4ZWMtPmNvZGVCbG9jaygpLT5zeW1ib2xUYWJsZSgp
LT5tX2Z1bmN0aW9uRW50ZXJlZE9uY2UudG91Y2goIkZ1bmN0aW9uIChyZSllbnRlcmVkIik7Ci0g
ICAgRU5EKCk7Ci19Ci0KIFNMT1dfUEFUSF9ERUNMKHNsb3dfcGF0aF9jcmVhdGVfZGlyZWN0X2Fy
Z3VtZW50cykKIHsKICAgICBCRUdJTigpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvQ29tbW9uU2xvd1BhdGhzLmgJKHJldmlzaW9uIDE4MjU4MikKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvbW1vblNsb3dQYXRocy5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xODEsNyArMTgxLDYgQEAgU0xPV19QQVRIX0RFQ0wobmFtZSkgV1RGX0lOVEVSTkFMCiAg
ICAgCiBTTE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX2NhbGxfYXJpdHlDaGVjayk7CiBT
TE9XX1BBVEhfSElEREVOX0RFQ0woc2xvd19wYXRoX2NvbnN0cnVjdF9hcml0eUNoZWNrKTsKLVNM
T1dfUEFUSF9ISURERU5fREVDTChzbG93X3BhdGhfdG91Y2hfZW50cnkpOwogU0xPV19QQVRIX0hJ
RERFTl9ERUNMKHNsb3dfcGF0aF9jcmVhdGVfZGlyZWN0X2FyZ3VtZW50cyk7CiBTTE9XX1BBVEhf
SElEREVOX0RFQ0woc2xvd19wYXRoX2NyZWF0ZV9zY29wZWRfYXJndW1lbnRzKTsKIFNMT1dfUEFU
SF9ISURERU5fREVDTChzbG93X3BhdGhfY3JlYXRlX291dF9vZl9iYW5kX2FyZ3VtZW50cyk7Cklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAkocmV2
aXNpb24gMTgyNTgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJs
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQxNCw2ICs0MTQsMTIgQEAgRnVuY3Rpb25FeGVjdXRh
YmxlOjpGdW5jdGlvbkV4ZWN1dGFibGUoVgogICAgIG1fdHlwZVByb2ZpbGluZ0VuZE9mZnNldCA9
IHVubGlua2VkRXhlY3V0YWJsZS0+dHlwZVByb2ZpbGluZ0VuZE9mZnNldCgpOwogfQogCit2b2lk
IEZ1bmN0aW9uRXhlY3V0YWJsZTo6ZmluaXNoQ3JlYXRpb24oVk0mIHZtKQoreworICAgIEJhc2U6
OmZpbmlzaENyZWF0aW9uKHZtKTsKKyAgICBtX3NpbmdsZXRvbkZ1bmN0aW9uLnNldCh2bSwgdGhp
cywgSW5mZXJyZWRWYWx1ZTo6Y3JlYXRlKHZtKSk7Cit9CisKIHZvaWQgRnVuY3Rpb25FeGVjdXRh
YmxlOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKIHsKICAgICBzdGF0aWNfY2FzdDxGdW5jdGlvbkV4
ZWN1dGFibGUqPihjZWxsKS0+RnVuY3Rpb25FeGVjdXRhYmxlOjp+RnVuY3Rpb25FeGVjdXRhYmxl
KCk7CkBAIC01NjcsNiArNTczLDcgQEAgdm9pZCBGdW5jdGlvbkV4ZWN1dGFibGU6OnZpc2l0Q2hp
bGRyZW4oSgogICAgIGlmICh0aGlzT2JqZWN0LT5tX2NvZGVCbG9ja0ZvckNvbnN0cnVjdCkKICAg
ICAgICAgdGhpc09iamVjdC0+bV9jb2RlQmxvY2tGb3JDb25zdHJ1Y3QtPnZpc2l0QWdncmVnYXRl
KHZpc2l0b3IpOwogICAgIHZpc2l0b3IuYXBwZW5kKCZ0aGlzT2JqZWN0LT5tX3VubGlua2VkRXhl
Y3V0YWJsZSk7CisgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNPYmplY3QtPm1fc2luZ2xldG9uRnVu
Y3Rpb24pOwogfQogCiBTeW1ib2xUYWJsZSogRnVuY3Rpb25FeGVjdXRhYmxlOjpzeW1ib2xUYWJs
ZShDb2RlU3BlY2lhbGl6YXRpb25LaW5kIGtpbmQpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcnVudGltZS9FeGVjdXRhYmxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5oCShyZXZpc2lvbiAxODI1ODIpCisrKyBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDgg
KzMzLDcgQEAKICNpbmNsdWRlICJDb21waWxhdGlvblJlc3VsdC5oIgogI2luY2x1ZGUgIkRGR1Bs
YW4uaCIKICNpbmNsdWRlICJIYW5kbGVySW5mby5oIgotI2luY2x1ZGUgIkpTRnVuY3Rpb24uaCIK
LSNpbmNsdWRlICJJbnRlcnByZXRlci5oIgorI2luY2x1ZGUgIkluZmVycmVkVmFsdWUuaCIKICNp
bmNsdWRlICJKSVRDb2RlLmgiCiAjaW5jbHVkZSAiSlNHbG9iYWxPYmplY3QuaCIKICNpbmNsdWRl
ICJSZWdpc3RlclByZXNlcnZhdGlvbk1vZGUuaCIKQEAgLTY0OSwxMSArNjQ4LDE1IEBAIHB1Ymxp
YzoKICAgICB2b2lkIHVubGlua0NhbGxzKCk7CiAKICAgICB2b2lkIGNsZWFyQ29kZSgpOworICAg
IAorICAgIEluZmVycmVkVmFsdWUqIHNpbmdsZXRvbkZ1bmN0aW9uKCkgeyByZXR1cm4gbV9zaW5n
bGV0b25GdW5jdGlvbi5nZXQoKTsgfQogCiBwcml2YXRlOgogICAgIEZ1bmN0aW9uRXhlY3V0YWJs
ZSgKICAgICAgICAgVk0mLCBjb25zdCBTb3VyY2VDb2RlJiwgVW5saW5rZWRGdW5jdGlvbkV4ZWN1
dGFibGUqLCB1bnNpZ25lZCBmaXJzdExpbmUsIAogICAgICAgICB1bnNpZ25lZCBsYXN0TGluZSwg
dW5zaWduZWQgc3RhcnRDb2x1bW4sIHVuc2lnbmVkIGVuZENvbHVtbik7CisgICAgCisgICAgdm9p
ZCBmaW5pc2hDcmVhdGlvbihWTSYpOwogCiAgICAgYm9vbCBpc0NvbXBpbGluZygpCiAgICAgewpA
QCAtNjY3LDEyICs2NzAsMTMgQEAgcHJpdmF0ZToKICAgICB9CiAKICAgICBmcmllbmQgY2xhc3Mg
U2NyaXB0RXhlY3V0YWJsZTsKLQorICAgIAogICAgIFdyaXRlQmFycmllcjxVbmxpbmtlZEZ1bmN0
aW9uRXhlY3V0YWJsZT4gbV91bmxpbmtlZEV4ZWN1dGFibGU7CiAgICAgUmVmUHRyPEZ1bmN0aW9u
Q29kZUJsb2NrPiBtX2NvZGVCbG9ja0ZvckNhbGw7CiAgICAgUmVmUHRyPEZ1bmN0aW9uQ29kZUJs
b2NrPiBtX2NvZGVCbG9ja0ZvckNvbnN0cnVjdDsKICAgICBSZWZQdHI8VHlwZVNldD4gbV9yZXR1
cm5TdGF0ZW1lbnRUeXBlU2V0OwogICAgIHVuc2lnbmVkIG1fcGFyYW1ldGVyc1N0YXJ0T2Zmc2V0
OworICAgIFdyaXRlQmFycmllcjxJbmZlcnJlZFZhbHVlPiBtX3NpbmdsZXRvbkZ1bmN0aW9uOwog
fTsKIAogaW5saW5lIHZvaWQgRXhlY3V0YWJsZUJhc2U6OmNsZWFyQ29kZVZpcnR1YWwoRXhlY3V0
YWJsZUJhc2UqIGV4ZWN1dGFibGUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9JbmZlcnJlZFZhbHVlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9JbmZlcnJlZFZhbHVlLmNwcAkocmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0luZmVycmVkVmFsdWUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsMTMyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQg
YmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1p
dHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoK
KyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5
IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRo
ZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdp
dGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZ
IEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIK
KyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMu
IE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwg
SU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1B
R0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNV
QlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbmZlcnJlZFZhbHVlLmgiCisKKyNpbmNs
dWRlICJKU0NJbmxpbmVzLmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjb25zdCBDbGFzc0luZm8g
SW5mZXJyZWRWYWx1ZTo6c19pbmZvID0geyAiSW5mZXJyZWRWYWx1ZSIsIDAsIDAsIENSRUFURV9N
RVRIT0RfVEFCTEUoSW5mZXJyZWRWYWx1ZSkgfTsKKworSW5mZXJyZWRWYWx1ZSogSW5mZXJyZWRW
YWx1ZTo6Y3JlYXRlKFZNJiB2bSkKK3sKKyAgICBJbmZlcnJlZFZhbHVlKiByZXN1bHQgPSBuZXcg
KE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxJbmZlcnJlZFZhbHVlPih2bS5oZWFwKSkgSW5mZXJyZWRW
YWx1ZSh2bSk7CisgICAgcmVzdWx0LT5maW5pc2hDcmVhdGlvbih2bSk7CisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKwordm9pZCBJbmZlcnJlZFZhbHVlOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKK3sK
KyAgICBJbmZlcnJlZFZhbHVlKiBpbmZlcnJlZFZhbHVlID0gc3RhdGljX2Nhc3Q8SW5mZXJyZWRW
YWx1ZSo+KGNlbGwpOworICAgIGluZmVycmVkVmFsdWUtPkluZmVycmVkVmFsdWU6On5JbmZlcnJl
ZFZhbHVlKCk7Cit9CisKK1N0cnVjdHVyZSogSW5mZXJyZWRWYWx1ZTo6Y3JlYXRlU3RydWN0dXJl
KFZNJiB2bSwgSlNHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCwgSlNWYWx1ZSBwcm90b3R5cGUp
Cit7CisgICAgcmV0dXJuIFN0cnVjdHVyZTo6Y3JlYXRlKHZtLCBnbG9iYWxPYmplY3QsIHByb3Rv
dHlwZSwgVHlwZUluZm8oQ2VsbFR5cGUsIFN0cnVjdHVyZUZsYWdzKSwgaW5mbygpKTsKK30KKwor
dm9pZCBJbmZlcnJlZFZhbHVlOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCit7CisgICAgSW5mZXJyZWRWYWx1ZSogaW5mZXJyZWRWYWx1ZSA9IGpzQ2Fz
dDxJbmZlcnJlZFZhbHVlKj4oY2VsbCk7CisgICAgCisgICAgaWYgKGluZmVycmVkVmFsdWUtPm1f
c2V0Lmhhc0JlZW5JbnZhbGlkYXRlZCgpKSB7CisgICAgICAgIGluZmVycmVkVmFsdWUtPm1fY2xl
YW51cCA9IG51bGxwdHI7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgCisgICAgaWYgKCFp
bmZlcnJlZFZhbHVlLT5tX3ZhbHVlKQorICAgICAgICByZXR1cm47CisgICAgaWYgKCFpbmZlcnJl
ZFZhbHVlLT5tX3ZhbHVlLmdldCgpLmlzQ2VsbCgpKQorICAgICAgICByZXR1cm47CisgICAgCisg
ICAgaWYgKCFpbmZlcnJlZFZhbHVlLT5tX2NsZWFudXApCisgICAgICAgIGluZmVycmVkVmFsdWUt
Pm1fY2xlYW51cCA9IHN0ZDo6bWFrZV91bmlxdWU8VmFsdWVDbGVhbnVwPihpbmZlcnJlZFZhbHVl
KTsKKyAgICB2aXNpdG9yLmFkZFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIoaW5mZXJyZWRWYWx1ZS0+
bV9jbGVhbnVwLmdldCgpKTsKK30KKworSW5mZXJyZWRWYWx1ZTo6SW5mZXJyZWRWYWx1ZShWTSYg
dm0pCisgICAgOiBCYXNlKHZtLCB2bS5pbmZlcnJlZFZhbHVlU3RydWN0dXJlLmdldCgpKQorICAg
ICwgbV9zZXQoQ2xlYXJXYXRjaHBvaW50KQoreworfQorCitJbmZlcnJlZFZhbHVlOjp+SW5mZXJy
ZWRWYWx1ZSgpCit7Cit9CisKK3ZvaWQgSW5mZXJyZWRWYWx1ZTo6bm90aWZ5V3JpdGVTbG93KFZN
JiB2bSwgSlNWYWx1ZSB2YWx1ZSwgY29uc3QgRmlyZURldGFpbCYgZGV0YWlsKQoreworICAgIEFT
U0VSVCghIXZhbHVlKTsKKyAgICBzd2l0Y2ggKG1fc2V0LnN0YXRlKCkpIHsKKyAgICBjYXNlIENs
ZWFyV2F0Y2hwb2ludDoKKyAgICAgICAgbV92YWx1ZS5zZXQodm0sIHRoaXMsIHZhbHVlKTsKKyAg
ICAgICAgbV9zZXQuc3RhcnRXYXRjaGluZygpOworICAgICAgICByZXR1cm47CisgICAgICAgIAor
ICAgIGNhc2UgSXNXYXRjaGVkOgorICAgICAgICBBU1NFUlQoISFtX3ZhbHVlKTsKKyAgICAgICAg
aWYgKG1fdmFsdWUuZ2V0KCkgPT0gdmFsdWUpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IGludmFsaWRhdGUoZGV0YWlsKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgICAKKyAgICBjYXNl
IElzSW52YWxpZGF0ZWQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorICAgIAorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lk
IEluZmVycmVkVmFsdWU6Om5vdGlmeVdyaXRlU2xvdyhWTSYgdm0sIEpTVmFsdWUgdmFsdWUsIGNv
bnN0IGNoYXIqIHJlYXNvbikKK3sKKyAgICBub3RpZnlXcml0ZVNsb3codm0sIHZhbHVlLCBTdHJp
bmdGaXJlRGV0YWlsKHJlYXNvbikpOworfQorCitJbmZlcnJlZFZhbHVlOjpWYWx1ZUNsZWFudXA6
OlZhbHVlQ2xlYW51cChJbmZlcnJlZFZhbHVlKiBvd25lcikKKyAgICA6IG1fb3duZXIob3duZXIp
Cit7Cit9CisKK0luZmVycmVkVmFsdWU6OlZhbHVlQ2xlYW51cDo6flZhbHVlQ2xlYW51cCgpCit7
Cit9CisKK3ZvaWQgSW5mZXJyZWRWYWx1ZTo6VmFsdWVDbGVhbnVwOjpmaW5hbGl6ZVVuY29uZGl0
aW9uYWxseSgpCit7CisgICAgQVNTRVJUKG1fb3duZXItPm1fdmFsdWUpOworICAgIEFTU0VSVCht
X293bmVyLT5tX3ZhbHVlLmdldCgpLmlzQ2VsbCgpKTsKKyAgICAKKyAgICBpZiAoSGVhcDo6aXNN
YXJrZWQobV9vd25lci0+bV92YWx1ZS5nZXQoKS5hc0NlbGwoKSkpCisgICAgICAgIHJldHVybjsK
KyAgICAKKyAgICBtX293bmVyLT5pbnZhbGlkYXRlKFN0cmluZ0ZpcmVEZXRhaWwoIkluZmVycmVk
VmFsdWUgY2xlYW4tdXAgZHVyaW5nIEdDIikpOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSW5mZXJyZWRWYWx1ZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVkVmFsdWUuaAko
cmV2aXNpb24gMCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0luZmVycmVkVmFs
dWUuaAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEzNiBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNSBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmli
dXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0
CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93
aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291
cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92
ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRo
ZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29y
IG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqLworCisjaWZuZGVmIEluZmVycmVkVmFsdWVfaAorI2Rl
ZmluZSBJbmZlcnJlZFZhbHVlX2gKKworI2luY2x1ZGUgIkpTQ2VsbC5oIgorI2luY2x1ZGUgIldh
dGNocG9pbnQuaCIKKyNpbmNsdWRlICJXcml0ZUJhcnJpZXIuaCIKKworbmFtZXNwYWNlIEpTQyB7
CisKKy8vIEFsbG9jYXRlIG9uZSBvZiB0aGVzZSBpZiB5b3UnZCBsaWtlIHRvIGluZmVyIGEgY29u
c3RhbnQgdmFsdWUuIFdyaXRlcyB0byB0aGUgdmFsdWUgc2hvdWxkIHVzZQorLy8gbm90aWZ5V3Jp
dGUoKS4gU28gbG9uZyBhcyBleGFjdGx5IG9uZSB2YWx1ZSBoYWQgZXZlciBiZWVuIHdyaXR0ZW4g
YW5kIGludmFsaWRhdGUoKSBoYXMgbmV2ZXIgYmVlbgorLy8gY2FsbGVkLCBhbmQgeW91IHJlZ2lz
dGVyIGEgd2F0Y2hwb2ludCwgeW91IGNhbiByZWx5IG9uIHRoZSBpbmZlcnJlZFZhbHVlKCkgYmVp
bmcgdGhlIG9uZSB0cnVlCisvLyB2YWx1ZS4KKy8vCisvLyBDb21tb25seSB1c2VkIGZvciBpbmZl
cnJpbmcgc2luZ2xldG9ucyAtIGluIHRoYXQgY2FzZSBlYWNoIGFsbG9jYXRpb24gZG9lcyBub3Rp
ZnlXcml0ZSgpLiBCdXQgeW91CisvLyBjYW4gdXNlIGlmIGZvciBvdGhlciB0aGluZ3MgYXMgd2Vs
bC4KKworY2xhc3MgSW5mZXJyZWRWYWx1ZSA6IHB1YmxpYyBKU0NlbGwgeworcHVibGljOgorICAg
IHR5cGVkZWYgSlNDZWxsIEJhc2U7CisgICAgCisgICAgc3RhdGljIEluZmVycmVkVmFsdWUqIGNy
ZWF0ZShWTSYpOworICAgIAorICAgIHN0YXRpYyBjb25zdCBib29sIG5lZWRzRGVzdHJ1Y3Rpb24g
PSB0cnVlOworICAgIHN0YXRpYyBjb25zdCBib29sIGhhc0ltbW9ydGFsU3RydWN0dXJlID0gdHJ1
ZTsKKyAgICBzdGF0aWMgdm9pZCBkZXN0cm95KEpTQ2VsbCopOworICAgIAorICAgIHN0YXRpYyBT
dHJ1Y3R1cmUqIGNyZWF0ZVN0cnVjdHVyZShWTSYsIEpTR2xvYmFsT2JqZWN0KiwgSlNWYWx1ZSBw
cm90b3R5cGUpOworICAgIAorICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwg
U2xvdFZpc2l0b3ImKTsKKyAgICAKKyAgICBERUNMQVJFX0lORk87CisgICAgCisgICAgLy8gRm9y
IHRoZSBwdXJwb3NlIG9mIGRlY2lkaW5nIHdoZXRoZXIgb3Igbm90IHRvIHdhdGNoIHRoaXMgdmFy
aWFibGUsIHlvdSBvbmx5IG5lZWQKKyAgICAvLyB0byBpbnNwZWN0IGluZmVycmVkVmFsdWUoKS4g
SWYgdGhpcyByZXR1cm5zIHNvbWV0aGluZyBvdGhlciB0aGFuIHRoZSBlbXB0eQorICAgIC8vIHZh
bHVlLCB0aGVuIGl0IG1lYW5zIHRoYXQgYXQgYWxsIGZ1dHVyZSBzYWZlcG9pbnRzLCB0aGlzIHdh
dGNocG9pbnQgc2V0IHdpbGwgYmUKKyAgICAvLyBpbiBvbmUgb2YgdGhlc2Ugc3RhdGVzOgorICAg
IC8vCisgICAgLy8gICAgSXNXYXRjaGVkOiBpbiB0aGlzIGNhc2UsIHRoZSB2YXJpYWJsZSdzIHZh
bHVlIG11c3Qgc3RpbGwgYmUgdGhlCisgICAgLy8gICAgICAgIGluZmVycmVkVmFsdWUuCisgICAg
Ly8KKyAgICAvLyAgICBJc0ludmFsaWRhdGVkOiBpbiB0aGlzIGNhc2UgdGhlIHZhcmlhYmxlJ3Mg
dmFsdWUgbWF5IGJlIGFueXRoaW5nIGJ1dCB5b3UnbGwKKyAgICAvLyAgICAgICAgZWl0aGVyIG5v
dGljZSB0aGF0IGl0J3MgaW52YWxpZGF0ZWQgYW5kIG5vdCBpbnN0YWxsIHRoZSB3YXRjaHBvaW50
LCBvcgorICAgIC8vICAgICAgICB5b3Ugd2lsbCBoYXZlIGJlZW4gbm90aWZpZWQgdGhhdCB0aGUg
d2F0Y2hwb2ludCB3YXMgZmlyZWQuCisgICAgSlNWYWx1ZSBpbmZlcnJlZFZhbHVlKCkgeyByZXR1
cm4gbV92YWx1ZS5nZXQoKTsgfQorCisgICAgLy8gRm9yd2FyZHMgc29tZSBXYXRjaHBvaW50U2V0
IG1ldGhvZHMuCisgICAgV2F0Y2hwb2ludFN0YXRlIHN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9z
ZXQuc3RhdGUoKTsgfQorICAgIGJvb2wgaXNTdGlsbFZhbGlkKCkgY29uc3QgeyByZXR1cm4gbV9z
ZXQuaXNTdGlsbFZhbGlkKCk7IH0KKyAgICBib29sIGhhc0JlZW5JbnZhbGlkYXRlZCgpIGNvbnN0
IHsgcmV0dXJuIG1fc2V0Lmhhc0JlZW5JbnZhbGlkYXRlZCgpOyB9CisgICAgdm9pZCBhZGQoV2F0
Y2hwb2ludCogd2F0Y2hwb2ludCkgeyBtX3NldC5hZGQod2F0Y2hwb2ludCk7IH0KKyAgICAKKyAg
ICB2b2lkIG5vdGlmeVdyaXRlKFZNJiB2bSwgSlNWYWx1ZSB2YWx1ZSwgY29uc3QgRmlyZURldGFp
bCYgZGV0YWlsKQorICAgIHsKKyAgICAgICAgaWYgKExJS0VMWShtX3NldC5zdGF0ZU9uTWFpblRo
cmVhZCgpID09IElzSW52YWxpZGF0ZWQpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBu
b3RpZnlXcml0ZVNsb3codm0sIHZhbHVlLCBkZXRhaWwpOworICAgIH0KKyAgICAKKyAgICB2b2lk
IG5vdGlmeVdyaXRlKFZNJiB2bSwgSlNWYWx1ZSB2YWx1ZSwgY29uc3QgY2hhciogcmVhc29uKQor
ICAgIHsKKyAgICAgICAgaWYgKExJS0VMWShtX3NldC5zdGF0ZU9uTWFpblRocmVhZCgpID09IElz
SW52YWxpZGF0ZWQpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBub3RpZnlXcml0ZVNs
b3codm0sIHZhbHVlLCByZWFzb24pOworICAgIH0KKyAgICAKKyAgICB2b2lkIGludmFsaWRhdGUo
Y29uc3QgRmlyZURldGFpbCYgZGV0YWlsKQorICAgIHsKKyAgICAgICAgbV92YWx1ZS5jbGVhcigp
OworICAgICAgICBtX3NldC5pbnZhbGlkYXRlKGRldGFpbCk7CisgICAgfQorICAgIAorcHJvdGVj
dGVkOgorICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IFN0cnVjdHVy
ZUlzSW1tb3J0YWwgfCBCYXNlOjpTdHJ1Y3R1cmVGbGFnczsKKyAgICAKK3ByaXZhdGU6CisgICAg
SW5mZXJyZWRWYWx1ZShWTSYpOworICAgIH5JbmZlcnJlZFZhbHVlKCk7CisgICAgCisgICAgSlNf
RVhQT1JUX1BSSVZBVEUgdm9pZCBub3RpZnlXcml0ZVNsb3coVk0mLCBKU1ZhbHVlLCBjb25zdCBG
aXJlRGV0YWlsJik7CisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBub3RpZnlXcml0ZVNsb3co
Vk0mLCBKU1ZhbHVlLCBjb25zdCBjaGFyKiByZWFzb24pOworICAgIAorICAgIC8vIFdlIGNvdWxk
IGhhdmUgdXNlZCBXZWFrPD4uIEJ1dCB3ZSB3YW50IGFyYml0cmFyeSBKU1ZhbHVlcywgbm90IGp1
c3QgY2VsbHMuIEl0J3MgYWxzbyBzb21ld2hhdAorICAgIC8vIGNvbnZlbmllbnQgdG8gaGF2ZSBl
YWdlciBub3RpZmljYXRpb24gb2YgZGVhdGguCisgICAgY2xhc3MgVmFsdWVDbGVhbnVwIDogcHVi
bGljIFVuY29uZGl0aW9uYWxGaW5hbGl6ZXIgeworICAgIHB1YmxpYzoKKyAgICAgICAgVmFsdWVD
bGVhbnVwKEluZmVycmVkVmFsdWUqKTsKKyAgICAgICAgdmlydHVhbCB+VmFsdWVDbGVhbnVwKCk7
CisgICAgICAgIAorICAgIHByb3RlY3RlZDoKKyAgICAgICAgdm9pZCBmaW5hbGl6ZVVuY29uZGl0
aW9uYWxseSgpIG92ZXJyaWRlOworICAgICAgICAKKyAgICBwcml2YXRlOgorICAgICAgICBJbmZl
cnJlZFZhbHVlKiBtX293bmVyOworICAgIH07CisgICAgCisgICAgZnJpZW5kIGNsYXNzIFZhbHVl
Q2xlYW51cDsKKyAgICAKKyAgICBJbmxpbmVXYXRjaHBvaW50U2V0IG1fc2V0OworICAgIFdyaXRl
QmFycmllcjxVbmtub3duPiBtX3ZhbHVlOworICAgIHN0ZDo6dW5pcXVlX3B0cjxWYWx1ZUNsZWFu
dXA+IG1fY2xlYW51cDsKK307CisKKy8vIEZJWE1FOiBXZSBjb3VsZCBoYXZlIGFuIElubGluZUlu
ZmVycmVkVmFsdWUsIHdoaWNoIG9ubHkgYWxsb2NhdGVzIHRoZSBJbmZlcnJlZFZhbHVlIG9iamVj
dCB3aGVuCisvLyBhIG5vdGlmeVdyaXRlKCkgdHJhbnNpdGlvbnMgdXMgdG93YXJkcyB3YXRjaGlu
ZywgYW5kIHRoZW4gY2xlYXJzIHRoZSByZWZlcmVuY2UgKGFsbG93aW5nIHRoZSBvYmplY3QKKy8v
IHRvIGRpZSkgd2hlbiB3ZSBnZXQgaW52YWxpZGF0ZWQuCisKK30gLy8gbmFtZXNwYWNlIEpTQwor
CisjZW5kaWYgLy8gSW5mZXJyZWRWYWx1ZV9oCisKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTRW52aXJvbm1lbnRSZWNvcmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRW52aXJvbm1lbnRSZWNvcmQuY3BwCShyZXZpc2lvbiAx
ODI1ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0Vudmlyb25tZW50UmVj
b3JkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDAsNyArNDAsNyBAQCB2b2lkIEpTRW52aXJvbm1l
bnRSZWNvcmQ6OnZpc2l0Q2hpbGRyZW4oCiAgICAgSlNFbnZpcm9ubWVudFJlY29yZCogdGhpc09i
amVjdCA9IGpzQ2FzdDxKU0Vudmlyb25tZW50UmVjb3JkKj4oY2VsbCk7CiAgICAgQVNTRVJUX0dD
X09CSkVDVF9JTkhFUklUUyh0aGlzT2JqZWN0LCBpbmZvKCkpOwogICAgIEJhc2U6OnZpc2l0Q2hp
bGRyZW4odGhpc09iamVjdCwgdmlzaXRvcik7Ci0gICAgdmlzaXRvci5hcHBlbmRWYWx1ZXModGhp
c09iamVjdC0+dmFyaWFibGVzKCksIHRoaXNPYmplY3QtPm1fc3ltYm9sVGFibGUtPnNjb3BlU2l6
ZSgpKTsKKyAgICB2aXNpdG9yLmFwcGVuZFZhbHVlcyh0aGlzT2JqZWN0LT52YXJpYWJsZXMoKSwg
dGhpc09iamVjdC0+c3ltYm9sVGFibGUoKS0+c2NvcGVTaXplKCkpOwogfQogCiB9IC8vIG5hbWVz
cGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRW52aXJvbm1l
bnRSZWNvcmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0Vudmlyb25tZW50UmVjb3JkLmgJKHJldmlzaW9uIDE4MjU4MikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTRW52aXJvbm1lbnRSZWNvcmQuaAkod29ya2luZyBjb3B5KQpAQCAt
NTMsNyArNTMsNyBAQCBwdWJsaWM6CiAgICAgCiAgICAgYm9vbCBpc1ZhbGlkKFNjb3BlT2Zmc2V0
IG9mZnNldCkKICAgICB7Ci0gICAgICAgIHJldHVybiAhIW9mZnNldCAmJiBvZmZzZXQub2Zmc2V0
KCkgPCBtX3N5bWJvbFRhYmxlLT5zY29wZVNpemUoKTsKKyAgICAgICAgcmV0dXJuICEhb2Zmc2V0
ICYmIG9mZnNldC5vZmZzZXQoKSA8IHN5bWJvbFRhYmxlKCktPnNjb3BlU2l6ZSgpOwogICAgIH0K
ICAgICAKICAgICBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+JiB2YXJpYWJsZUF0KFNjb3BlT2Zm
c2V0IG9mZnNldCkKQEAgLTEwNCw3ICsxMDQsNyBAQCBwcm90ZWN0ZWQ6CiAgICAgdm9pZCBmaW5p
c2hDcmVhdGlvbihWTSYgdm0pCiAgICAgewogICAgICAgICBmaW5pc2hDcmVhdGlvblVuaW5pdGlh
bGl6ZWQodm0pOwotICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX3N5bWJvbFRhYmxlLT5zY29w
ZVNpemUoKTsgaS0tOykgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBzeW1ib2xUYWJsZSgp
LT5zY29wZVNpemUoKTsgaS0tOykgewogICAgICAgICAgICAgLy8gRmlsbGluZyB0aGlzIHdpdGgg
dW5kZWZpbmVkIGlzIHVzZWZ1bCBiZWNhdXNlIHRoYXQncyB3aGF0IHZhcmlhYmxlcyBzdGFydCBv
dXQgYXMuCiAgICAgICAgICAgICB2YXJpYWJsZUF0KFNjb3BlT2Zmc2V0KGkpKS5zZXRVbmRlZmlu
ZWQoKTsKICAgICAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNG
dW5jdGlvbi5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNGdW5jdGlvbi5jcHAJKHJldmlzaW9uIDE4MjU4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTRnVuY3Rpb24uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OSw2ICs1OSwxMyBA
QCBib29sIEpTRnVuY3Rpb246OmlzSG9zdEZ1bmN0aW9uTm9uSW5saW5lCiAgICAgcmV0dXJuIGlz
SG9zdEZ1bmN0aW9uKCk7CiB9CiAKK0pTRnVuY3Rpb24qIEpTRnVuY3Rpb246OmNyZWF0ZShWTSYg
dm0sIEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSwgSlNTY29wZSogc2NvcGUpCit7Cisg
ICAgSlNGdW5jdGlvbiogcmVzdWx0ID0gY3JlYXRlSW1wbCh2bSwgZXhlY3V0YWJsZSwgc2NvcGUp
OworICAgIGV4ZWN1dGFibGUtPnNpbmdsZXRvbkZ1bmN0aW9uKCktPm5vdGlmeVdyaXRlKHZtLCBy
ZXN1bHQsICJBbGxvY2F0aW5nIGEgZnVuY3Rpb24iKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQor
CiBKU0Z1bmN0aW9uKiBKU0Z1bmN0aW9uOjpjcmVhdGUoVk0mIHZtLCBKU0dsb2JhbE9iamVjdCog
Z2xvYmFsT2JqZWN0LCBpbnQgbGVuZ3RoLCBjb25zdCBTdHJpbmcmIG5hbWUsIE5hdGl2ZUZ1bmN0
aW9uIG5hdGl2ZUZ1bmN0aW9uLCBJbnRyaW5zaWMgaW50cmluc2ljLCBOYXRpdmVGdW5jdGlvbiBu
YXRpdmVDb25zdHJ1Y3RvcikKIHsKICAgICBOYXRpdmVFeGVjdXRhYmxlKiBleGVjdXRhYmxlOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb24uaAkocmV2aXNp
b24gMTgyNTgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlvbi5o
CSh3b3JraW5nIGNvcHkpCkBAIC01OSwxNCArNTksMTAgQEAgcHVibGljOgogICAgIHR5cGVkZWYg
SlNDYWxsZWUgQmFzZTsKIAogICAgIEpTX0VYUE9SVF9QUklWQVRFIHN0YXRpYyBKU0Z1bmN0aW9u
KiBjcmVhdGUoVk0mLCBKU0dsb2JhbE9iamVjdCosIGludCBsZW5ndGgsIGNvbnN0IFN0cmluZyYg
bmFtZSwgTmF0aXZlRnVuY3Rpb24sIEludHJpbnNpYyA9IE5vSW50cmluc2ljLCBOYXRpdmVGdW5j
dGlvbiBuYXRpdmVDb25zdHJ1Y3RvciA9IGNhbGxIb3N0RnVuY3Rpb25Bc0NvbnN0cnVjdG9yKTsK
KyAgICAKKyAgICBzdGF0aWMgSlNGdW5jdGlvbiogY3JlYXRlV2l0aEludmFsaWRhdGVkUmVhbGxv
Y2F0aW9uV2F0Y2hwb2ludChWTSYsIEZ1bmN0aW9uRXhlY3V0YWJsZSosIEpTU2NvcGUqKTsKIAot
ICAgIHN0YXRpYyBKU0Z1bmN0aW9uKiBjcmVhdGUoVk0mIHZtLCBGdW5jdGlvbkV4ZWN1dGFibGUq
IGV4ZWN1dGFibGUsIEpTU2NvcGUqIHNjb3BlKQotICAgIHsKLSAgICAgICAgSlNGdW5jdGlvbiog
ZnVuY3Rpb24gPSBuZXcgKE5vdE51bGwsIGFsbG9jYXRlQ2VsbDxKU0Z1bmN0aW9uPih2bS5oZWFw
KSkgSlNGdW5jdGlvbih2bSwgZXhlY3V0YWJsZSwgc2NvcGUpOwotICAgICAgICBBU1NFUlQoZnVu
Y3Rpb24tPnN0cnVjdHVyZSgpLT5nbG9iYWxPYmplY3QoKSk7Ci0gICAgICAgIGZ1bmN0aW9uLT5m
aW5pc2hDcmVhdGlvbih2bSk7Ci0gICAgICAgIHJldHVybiBmdW5jdGlvbjsKLSAgICB9CisgICAg
c3RhdGljIEpTRnVuY3Rpb24qIGNyZWF0ZShWTSYsIEZ1bmN0aW9uRXhlY3V0YWJsZSosIEpTU2Nv
cGUqKTsKIAogICAgIHN0YXRpYyBKU0Z1bmN0aW9uKiBjcmVhdGVCdWlsdGluRnVuY3Rpb24oVk0m
LCBGdW5jdGlvbkV4ZWN1dGFibGUqLCBKU0dsb2JhbE9iamVjdCopOwogCkBAIC0xNDksNiArMTQ1
LDE0IEBAIHByb3RlY3RlZDoKICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCos
IFNsb3RWaXNpdG9yJik7CiAKIHByaXZhdGU6CisgICAgc3RhdGljIEpTRnVuY3Rpb24qIGNyZWF0
ZUltcGwoVk0mIHZtLCBGdW5jdGlvbkV4ZWN1dGFibGUqIGV4ZWN1dGFibGUsIEpTU2NvcGUqIHNj
b3BlKQorICAgIHsKKyAgICAgICAgSlNGdW5jdGlvbiogZnVuY3Rpb24gPSBuZXcgKE5vdE51bGws
IGFsbG9jYXRlQ2VsbDxKU0Z1bmN0aW9uPih2bS5oZWFwKSkgSlNGdW5jdGlvbih2bSwgZXhlY3V0
YWJsZSwgc2NvcGUpOworICAgICAgICBBU1NFUlQoZnVuY3Rpb24tPnN0cnVjdHVyZSgpLT5nbG9i
YWxPYmplY3QoKSk7CisgICAgICAgIGZ1bmN0aW9uLT5maW5pc2hDcmVhdGlvbih2bSk7CisgICAg
ICAgIHJldHVybiBmdW5jdGlvbjsKKyAgICB9CisgICAgCiAgICAgZnJpZW5kIGNsYXNzIExMSW50
T2Zmc2V0c0V4dHJhY3RvcjsKIAogICAgIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBhcmd1bWVudHNH
ZXR0ZXIoRXhlY1N0YXRlKiwgSlNPYmplY3QqLCBFbmNvZGVkSlNWYWx1ZSwgUHJvcGVydHlOYW1l
KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTRnVuY3Rpb25JbmxpbmVz
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNGdW5jdGlv
bklubGluZXMuaAkocmV2aXNpb24gMTgyNTgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNGdW5jdGlvbklubGluZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMSw1ICsxLDUgQEAK
IC8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogQ29weXJpZ2h0IChDKSAyMDEzLCAyMDE1IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5
IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBw
cm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMzEsNiArMzEsMTMgQEAK
IAogbmFtZXNwYWNlIEpTQyB7CiAKK2lubGluZSBKU0Z1bmN0aW9uKiBKU0Z1bmN0aW9uOjpjcmVh
dGVXaXRoSW52YWxpZGF0ZWRSZWFsbG9jYXRpb25XYXRjaHBvaW50KAorICAgIFZNJiB2bSwgRnVu
Y3Rpb25FeGVjdXRhYmxlKiBleGVjdXRhYmxlLCBKU1Njb3BlKiBzY29wZSkKK3sKKyAgICBBU1NF
UlQoZXhlY3V0YWJsZS0+c2luZ2xldG9uRnVuY3Rpb24oKS0+aGFzQmVlbkludmFsaWRhdGVkKCkp
OworICAgIHJldHVybiBjcmVhdGVJbXBsKHZtLCBleGVjdXRhYmxlLCBzY29wZSk7Cit9CisKIGlu
bGluZSBKU0Z1bmN0aW9uOjpKU0Z1bmN0aW9uKFZNJiB2bSwgRnVuY3Rpb25FeGVjdXRhYmxlKiBl
eGVjdXRhYmxlLCBKU1Njb3BlKiBzY29wZSkKICAgICA6IEJhc2Uodm0sIHNjb3BlLCBzY29wZS0+
Z2xvYmFsT2JqZWN0KCktPmZ1bmN0aW9uU3RydWN0dXJlKCkpCiAgICAgLCBtX2V4ZWN1dGFibGUo
dm0sIHRoaXMsIGV4ZWN1dGFibGUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0dsb2JhbE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCShyZXZpc2lvbiAxODI1ODIpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTEyNCw3ICsxMjQsNyBAQAogI2luY2x1ZGUgIlN5bWJvbC5oIgogI2luY2x1ZGUgIlN5bWJv
bENvbnN0cnVjdG9yLmgiCiAjaW5jbHVkZSAiU3ltYm9sUHJvdG90eXBlLmgiCi0jaW5jbHVkZSAi
VmFyaWFibGVXYXRjaHBvaW50U2V0SW5saW5lcy5oIgorI2luY2x1ZGUgIlZhcmlhYmxlV3JpdGVG
aXJlRGV0YWlsLmgiCiAjaW5jbHVkZSAiV2Vha0dDTWFwSW5saW5lcy5oIgogI2luY2x1ZGUgIldl
YWtNYXBDb25zdHJ1Y3Rvci5oIgogI2luY2x1ZGUgIldlYWtNYXBQcm90b3R5cGUuaCIKQEAgLTQ4
OSw3ICs0ODksNyBAQCBKU0dsb2JhbE9iamVjdDo6TmV3R2xvYmFsVmFyIEpTR2xvYmFsT2JqCiAg
ICAgU2NvcGVPZmZzZXQgb2Zmc2V0ID0gc3ltYm9sVGFibGUoKS0+dGFrZU5leHRTY29wZU9mZnNl
dChsb2NrZXIpOwogICAgIFN5bWJvbFRhYmxlRW50cnkgbmV3RW50cnkoVmFyT2Zmc2V0KG9mZnNl
dCksIChjb25zdGFudE1vZGUgPT0gSXNDb25zdGFudCkgPyBSZWFkT25seSA6IDApOwogICAgIGlm
IChjb25zdGFudE1vZGUgPT0gSXNWYXJpYWJsZSkKLSAgICAgICAgbmV3RW50cnkucHJlcGFyZVRv
V2F0Y2goc3ltYm9sVGFibGUoKSk7CisgICAgICAgIG5ld0VudHJ5LnByZXBhcmVUb1dhdGNoKCk7
CiAgICAgZWxzZQogICAgICAgICBuZXdFbnRyeS5kaXNhYmxlV2F0Y2hpbmcoKTsKICAgICBzeW1i
b2xUYWJsZSgpLT5hZGQobG9ja2VyLCBpZGVudC5pbXBsKCksIG5ld0VudHJ5KTsKQEAgLTUxMCw3
ICs1MTAsNyBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0OjphZGRGdW5jdGlvbihFeGVjU3RhCiAgICAg
TmV3R2xvYmFsVmFyIHZhciA9IGFkZEdsb2JhbFZhcihwcm9wZXJ0eU5hbWUsIElzVmFyaWFibGUp
OwogICAgIHZhcmlhYmxlQXQodmFyLm9mZnNldCkuc2V0KGV4ZWMtPnZtKCksIHRoaXMsIHZhbHVl
KTsKICAgICBpZiAodmFyLnNldCkKLSAgICAgICAgdmFyLnNldC0+bm90aWZ5V3JpdGUodm0sIHZh
bHVlLCBWYXJpYWJsZVdyaXRlRmlyZURldGFpbCh0aGlzLCBwcm9wZXJ0eU5hbWUpKTsKKyAgICAg
ICAgdmFyLnNldC0+dG91Y2goVmFyaWFibGVXcml0ZUZpcmVEZXRhaWwodGhpcywgcHJvcGVydHlO
YW1lKSk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgSlNPYmplY3QqIGxhc3RJblByb3RvdHlwZUNoYWlu
KEpTT2JqZWN0KiBvYmplY3QpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9K
U0dsb2JhbE9iamVjdC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTR2xvYmFsT2JqZWN0LmgJKHJldmlzaW9uIDE4MjU4MikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmgJKHdvcmtpbmcgY29weSkKQEAgLTMzNCw3
ICszMzQsNyBAQCBwcm90ZWN0ZWQ6CiAKICAgICBzdHJ1Y3QgTmV3R2xvYmFsVmFyIHsKICAgICAg
ICAgU2NvcGVPZmZzZXQgb2Zmc2V0OwotICAgICAgICBWYXJpYWJsZVdhdGNocG9pbnRTZXQqIHNl
dDsKKyAgICAgICAgV2F0Y2hwb2ludFNldCogc2V0OwogICAgIH07CiAgICAgTmV3R2xvYmFsVmFy
IGFkZEdsb2JhbFZhcihjb25zdCBJZGVudGlmaWVyJiwgQ29uc3RhbnRNb2RlKTsKIApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNMZXhpY2FsRW52aXJvbm1lbnQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTTGV4aWNhbEVudmly
b25tZW50LmNwcAkocmV2aXNpb24gMTgyNTgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvSlNMZXhpY2FsRW52aXJvbm1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03Nyw2ICs3
Nyw3IEBAIGlubGluZSBib29sIEpTTGV4aWNhbEVudmlyb25tZW50OjpzeW1ib2wKICAgICBBU1NF
UlQoIUhlYXA6OmhlYXAodmFsdWUpIHx8IEhlYXA6OmhlYXAodmFsdWUpID09IEhlYXA6OmhlYXAo
dGhpcykpOwogICAgIAogICAgIFdyaXRlQmFycmllckJhc2U8VW5rbm93bj4qIHJlZzsKKyAgICBX
YXRjaHBvaW50U2V0KiBzZXQ7CiAgICAgewogICAgICAgICBHQ1NhZmVDb25jdXJyZW50SklUTG9j
a2VyIGxvY2tlcihzeW1ib2xUYWJsZSgpLT5tX2xvY2ssIGV4ZWMtPnZtKCkuaGVhcCk7CiAgICAg
ICAgIFN5bWJvbFRhYmxlOjpNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBzeW1ib2xUYWJsZSgpLT5maW5k
KGxvY2tlciwgcHJvcGVydHlOYW1lLnVpZCgpKTsKQEAgLTkyLDExICs5MywxMiBAQCBpbmxpbmUg
Ym9vbCBKU0xleGljYWxFbnZpcm9ubWVudDo6c3ltYm9sCiAgICAgICAgIC8vIERlZmVuZCBhZ2Fp
bnN0IHRoZSBpbnNwZWN0b3IgYXNraW5nIGZvciBhIHZhciBhZnRlciBpdCBoYXMgYmVlbiBvcHRp
bWl6ZWQgb3V0LgogICAgICAgICBpZiAoIWlzVmFsaWQob2Zmc2V0KSkKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgaWYgKFZhcmlhYmxlV2F0Y2hwb2ludFNldCogc2V0ID0gaXRl
ci0+dmFsdWUud2F0Y2hwb2ludFNldCgpKQotICAgICAgICAgICAgc2V0LT5pbnZhbGlkYXRlKFZh
cmlhYmxlV3JpdGVGaXJlRGV0YWlsKHRoaXMsIHByb3BlcnR5TmFtZSkpOyAvLyBEb24ndCBtZXNz
IGFyb3VuZCAtIGlmIHdlIGhhZCBmb3VuZCB0aGlzIHN0YXRpY2FsbHksIHdlIHdvdWxkIGhhdmUg
aW52YWxpZGF0ZWQgaXQuCisgICAgICAgIHNldCA9IGl0ZXItPnZhbHVlLndhdGNocG9pbnRTZXQo
KTsKICAgICAgICAgcmVnID0gJnZhcmlhYmxlQXQob2Zmc2V0KTsKICAgICB9CiAgICAgcmVnLT5z
ZXQodm0sIHRoaXMsIHZhbHVlKTsKKyAgICBpZiAoc2V0KQorICAgICAgICBzZXQtPmludmFsaWRh
dGUoVmFyaWFibGVXcml0ZUZpcmVEZXRhaWwodGhpcywgcHJvcGVydHlOYW1lKSk7IC8vIERvbid0
IG1lc3MgYXJvdW5kIC0gaWYgd2UgaGFkIGZvdW5kIHRoaXMgc3RhdGljYWxseSwgd2Ugd291bGQg
aGF2ZSBpbnZhbGlkYXRlZCBpdC4KICAgICByZXR1cm4gdHJ1ZTsKIH0KIApJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTY29wZS5oCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2NvcGUuaAkocmV2aXNpb24gMTgyNTgyKQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTY29wZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0z
MSw3ICszMSw3IEBACiBuYW1lc3BhY2UgSlNDIHsKIAogY2xhc3MgU2NvcGVDaGFpbkl0ZXJhdG9y
OwotY2xhc3MgVmFyaWFibGVXYXRjaHBvaW50U2V0OworY2xhc3MgV2F0Y2hwb2ludFNldDsKIAog
ZW51bSBSZXNvbHZlTW9kZSB7CiAgICAgVGhyb3dJZk5vdEZvdW5kLApAQCAtMTAyLDcgKzEwMiw3
IEBAIGlubGluZSBib29sIG5lZWRzVmFySW5qZWN0aW9uQ2hlY2tzKFJlc28KIH0KIAogc3RydWN0
IFJlc29sdmVPcCB7Ci0gICAgUmVzb2x2ZU9wKFJlc29sdmVUeXBlIHR5cGUsIHNpemVfdCBkZXB0
aCwgU3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTTGV4aWNhbEVudmlyb25tZW50KiBsZXhpY2FsRW52
aXJvbm1lbnQsIFZhcmlhYmxlV2F0Y2hwb2ludFNldCogd2F0Y2hwb2ludFNldCwgdWludHB0cl90
IG9wZXJhbmQpCisgICAgUmVzb2x2ZU9wKFJlc29sdmVUeXBlIHR5cGUsIHNpemVfdCBkZXB0aCwg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIEpTTGV4aWNhbEVudmlyb25tZW50KiBsZXhpY2FsRW52aXJv
bm1lbnQsIFdhdGNocG9pbnRTZXQqIHdhdGNocG9pbnRTZXQsIHVpbnRwdHJfdCBvcGVyYW5kKQog
ICAgICAgICA6IHR5cGUodHlwZSkKICAgICAgICAgLCBkZXB0aChkZXB0aCkKICAgICAgICAgLCBz
dHJ1Y3R1cmUoc3RydWN0dXJlKQpAQCAtMTE2LDcgKzExNiw3IEBAIHN0cnVjdCBSZXNvbHZlT3Ag
ewogICAgIHNpemVfdCBkZXB0aDsKICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZTsKICAgICBKU0xl
eGljYWxFbnZpcm9ubWVudCogbGV4aWNhbEVudmlyb25tZW50OwotICAgIFZhcmlhYmxlV2F0Y2hw
b2ludFNldCogd2F0Y2hwb2ludFNldDsKKyAgICBXYXRjaHBvaW50U2V0KiB3YXRjaHBvaW50U2V0
OwogICAgIHVpbnRwdHJfdCBvcGVyYW5kOwogfTsKIApJbmRleDogU291cmNlL0phdmFTY3JpcHRD
b3JlL3J1bnRpbWUvSlNTZWdtZW50ZWRWYXJpYWJsZU9iamVjdC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU2VnbWVudGVkVmFyaWFibGVPYmplY3QuaAko
cmV2aXNpb24gMTgyNTgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTZWdt
ZW50ZWRWYXJpYWJsZU9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC04Niw3ICs4Niw3IEBAIHBy
b3RlY3RlZDoKICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKFZNJiB2bSkKICAgICB7CiAgICAgICAg
IEJhc2U6OmZpbmlzaENyZWF0aW9uKHZtKTsKLSAgICAgICAgbV9zeW1ib2xUYWJsZS5zZXQodm0s
IHRoaXMsIFN5bWJvbFRhYmxlOjpjcmVhdGUodm0pKTsKKyAgICAgICAgc2V0U3ltYm9sVGFibGUo
dm0sIFN5bWJvbFRhYmxlOjpjcmVhdGUodm0pKTsKICAgICB9CiAgICAgCiAgICAgU2VnbWVudGVk
VmVjdG9yPFdyaXRlQmFycmllcjxVbmtub3duPiwgMTY+IG1fdmFyaWFibGVzOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTeW1ib2xUYWJsZU9iamVjdC5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3ltYm9sVGFibGVPYmplY3Qu
aAkocmV2aXNpb24gMTgyNTgyKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNT
eW1ib2xUYWJsZU9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMiw3ICszMiw3IEBACiAjaW5j
bHVkZSAiSlNTY29wZS5oIgogI2luY2x1ZGUgIlByb3BlcnR5RGVzY3JpcHRvci5oIgogI2luY2x1
ZGUgIlN5bWJvbFRhYmxlLmgiCi0jaW5jbHVkZSAiVmFyaWFibGVXYXRjaHBvaW50U2V0SW5saW5l
cy5oIgorI2luY2x1ZGUgIlZhcmlhYmxlV3JpdGVGaXJlRGV0YWlsLmgiCiAKIG5hbWVzcGFjZSBK
U0MgewogCkBAIC02MSwxMSArNjEsMTkgQEAgcHJvdGVjdGVkOgogICAgICAgICA6IEJhc2Uodm0s
IHN0cnVjdHVyZSwgc2NvcGUpCiAgICAgewogICAgICAgICBBU1NFUlQoc3ltYm9sVGFibGUpOwor
ICAgICAgICBzZXRTeW1ib2xUYWJsZSh2bSwgc3ltYm9sVGFibGUpOworICAgIH0KKyAgICAKKyAg
ICB2b2lkIHNldFN5bWJvbFRhYmxlKFZNJiB2bSwgU3ltYm9sVGFibGUqIHN5bWJvbFRhYmxlKQor
ICAgIHsKKyAgICAgICAgQVNTRVJUKCFtX3N5bWJvbFRhYmxlKTsKKyAgICAgICAgc3ltYm9sVGFi
bGUtPnNpbmdsZXRvblNjb3BlKCktPm5vdGlmeVdyaXRlKHZtLCB0aGlzLCAiQWxsb2NhdGVkIGEg
c2NvcGUiKTsKICAgICAgICAgbV9zeW1ib2xUYWJsZS5zZXQodm0sIHRoaXMsIHN5bWJvbFRhYmxl
KTsKICAgICB9Ci0KKyAgICAKICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCos
IFNsb3RWaXNpdG9yJik7Ci0KKyAgICAKK3ByaXZhdGU6CiAgICAgV3JpdGVCYXJyaWVyPFN5bWJv
bFRhYmxlPiBtX3N5bWJvbFRhYmxlOwogfTsKIApAQCAtMTI2LDYgKzEzNCw3IEBAIGlubGluZSBi
b29sIHN5bWJvbFRhYmxlUHV0KAogICAgIEFTU0VSVCghSGVhcDo6aGVhcCh2YWx1ZSkgfHwgSGVh
cDo6aGVhcCh2YWx1ZSkgPT0gSGVhcDo6aGVhcChvYmplY3QpKTsKICAgICAKICAgICBXcml0ZUJh
cnJpZXJCYXNlPFVua25vd24+KiByZWc7CisgICAgV2F0Y2hwb2ludFNldCogc2V0OwogICAgIHsK
ICAgICAgICAgU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlID0gKm9iamVjdC0+c3ltYm9sVGFibGUo
KTsKICAgICAgICAgLy8gRklYTUU6IFRoaXMgaXMgdmVyeSBzdXNwaWNpb3VzLiBXZSBzaG91bGRu
J3QgbmVlZCBhIEdDLXNhZmUgbG9jayBoZXJlLgpAQCAtMTQyLDE3ICsxNTEsMTUgQEAgaW5saW5l
IGJvb2wgc3ltYm9sVGFibGVQdXQoCiAgICAgICAgICAgICAgICAgdGhyb3dUeXBlRXJyb3IoZXhl
YywgU3RyaWN0TW9kZVJlYWRvbmx5UHJvcGVydHlXcml0ZUVycm9yKTsKICAgICAgICAgICAgIHJl
dHVybiB0cnVlOwogICAgICAgICB9Ci0gICAgICAgIGlmIChWYXJpYWJsZVdhdGNocG9pbnRTZXQq
IHNldCA9IGl0ZXItPnZhbHVlLndhdGNocG9pbnRTZXQoKSkgewotICAgICAgICAgICAgLy8gRklY
TUU6IEl0J3Mgc3RyYW5nZSB0aGF0IHdlJ3JlIGRvaW5nIHRoaXMgd2hpbGUgaG9sZGluZyB0aGUg
c3ltYm9sIHRhYmxlJ3MgbG9jay4KLSAgICAgICAgICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xMzQ2MDEKLSAgICAgICAgICAgIHNldC0+bm90aWZ5V3JpdGUo
dm0sIHZhbHVlLCBvYmplY3QsIHByb3BlcnR5TmFtZSk7Ci0gICAgICAgIH0KKyAgICAgICAgc2V0
ID0gaXRlci0+dmFsdWUud2F0Y2hwb2ludFNldCgpOwogICAgICAgICByZWcgPSAmb2JqZWN0LT52
YXJpYWJsZUF0KGZhc3RFbnRyeS5zY29wZU9mZnNldCgpKTsKICAgICB9CiAgICAgLy8gSSdkIHBy
ZWZlciB3ZSBub3QgaG9sZCBsb2NrIHdoaWxlIGV4ZWN1dGluZyBiYXJyaWVycywgc2luY2UgSSBw
cmVmZXIgdG8gcmVzZXJ2ZQogICAgIC8vIHRoZSByaWdodCBmb3IgYmFycmllcnMgdG8gYmUgYWJs
ZSB0byB0cmlnZ2VyIEdDLiBBbmQgSSBkb24ndCB3YW50IHRvIGhvbGQgVk0KICAgICAvLyBsb2Nr
cyB3aGlsZSBHQydpbmcuCiAgICAgcmVnLT5zZXQodm0sIG9iamVjdCwgdmFsdWUpOworICAgIGlm
IChzZXQpCisgICAgICAgIFZhcmlhYmxlV3JpdGVGaXJlRGV0YWlsOjp0b3VjaChzZXQsIG9iamVj
dCwgcHJvcGVydHlOYW1lKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTY0LDYgKzE3MSw3
IEBAIGlubGluZSBib29sIHN5bWJvbFRhYmxlUHV0V2l0aEF0dHJpYnV0ZXMKICAgICBBU1NFUlQo
IUhlYXA6OmhlYXAodmFsdWUpIHx8IEhlYXA6OmhlYXAodmFsdWUpID09IEhlYXA6OmhlYXAob2Jq
ZWN0KSk7CiAKICAgICBXcml0ZUJhcnJpZXJCYXNlPFVua25vd24+KiByZWc7CisgICAgV2F0Y2hw
b2ludFNldCogc2V0OwogICAgIHsKICAgICAgICAgU3ltYm9sVGFibGUmIHN5bWJvbFRhYmxlID0g
Km9iamVjdC0+c3ltYm9sVGFibGUoKTsKICAgICAgICAgQ29uY3VycmVudEpJVExvY2tlciBsb2Nr
ZXIoc3ltYm9sVGFibGUubV9sb2NrKTsKQEAgLTE3MiwxMiArMTgwLDEzIEBAIGlubGluZSBib29s
IHN5bWJvbFRhYmxlUHV0V2l0aEF0dHJpYnV0ZXMKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICAgICAgU3ltYm9sVGFibGVFbnRyeSYgZW50cnkgPSBpdGVyLT52YWx1ZTsKICAgICAgICAg
QVNTRVJUKCFlbnRyeS5pc051bGwoKSk7Ci0gICAgICAgIGlmIChWYXJpYWJsZVdhdGNocG9pbnRT
ZXQqIHNldCA9IGVudHJ5LndhdGNocG9pbnRTZXQoKSkKLSAgICAgICAgICAgIHNldC0+bm90aWZ5
V3JpdGUodm0sIHZhbHVlLCBvYmplY3QsIHByb3BlcnR5TmFtZSk7CisgICAgICAgIHNldCA9IGVu
dHJ5LndhdGNocG9pbnRTZXQoKTsKICAgICAgICAgZW50cnkuc2V0QXR0cmlidXRlcyhhdHRyaWJ1
dGVzKTsKICAgICAgICAgcmVnID0gJm9iamVjdC0+dmFyaWFibGVBdChlbnRyeS5zY29wZU9mZnNl
dCgpKTsKICAgICB9CiAgICAgcmVnLT5zZXQodm0sIG9iamVjdCwgdmFsdWUpOworICAgIGlmIChz
ZXQpCisgICAgICAgIFZhcmlhYmxlV3JpdGVGaXJlRGV0YWlsOjp0b3VjaChzZXQsIG9iamVjdCwg
cHJvcGVydHlOYW1lKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUHV0UHJvcGVydHlTbG90LmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUHV0UHJvcGVydHlTbG90LmgJKHJldmlzaW9uIDE4MjU4
MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1B1dFByb3BlcnR5U2xvdC5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAjZGVmaW5lIFB1dFByb3BlcnR5U2xvdF9o
CiAKICNpbmNsdWRlICJKU0NKU1ZhbHVlLmgiCisjaW5jbHVkZSAiUHJvcGVydHlPZmZzZXQuaCIK
IAogI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9TeW1ib2xUYWJsZS5jcHAJKHJldmlzaW9uIDE4MjU4MikKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N5bWJvbFRhYmxlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzMsNyArMzMsNiBAQAogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJT
bG90VmlzaXRvcklubGluZXMuaCIKICNpbmNsdWRlICJUeXBlUHJvZmlsZXIuaCIKLSNpbmNsdWRl
ICJWYXJpYWJsZVdhdGNocG9pbnRTZXRJbmxpbmVzLmgiCiAKIG5hbWVzcGFjZSBKU0MgewogCkBA
IC02MCwyMSArNTksMTQgQEAgdm9pZCBTeW1ib2xUYWJsZUVudHJ5OjpmcmVlRmF0RW50cnlTbG93
KAogICAgIGRlbGV0ZSBmYXRFbnRyeSgpOwogfQogCi1KU1ZhbHVlIFN5bWJvbFRhYmxlRW50cnk6
OmluZmVycmVkVmFsdWUoKQotewotICAgIGlmICghaXNGYXQoKSkKLSAgICAgICAgcmV0dXJuIEpT
VmFsdWUoKTsKLSAgICByZXR1cm4gZmF0RW50cnkoKS0+bV93YXRjaHBvaW50cy0+aW5mZXJyZWRW
YWx1ZSgpOwotfQotCi12b2lkIFN5bWJvbFRhYmxlRW50cnk6OnByZXBhcmVUb1dhdGNoKFN5bWJv
bFRhYmxlKiBzeW1ib2xUYWJsZSkKK3ZvaWQgU3ltYm9sVGFibGVFbnRyeTo6cHJlcGFyZVRvV2F0
Y2goKQogewogICAgIGlmICghaXNXYXRjaGFibGUoKSkKICAgICAgICAgcmV0dXJuOwogICAgIEZh
dEVudHJ5KiBlbnRyeSA9IGluZmxhdGUoKTsKICAgICBpZiAoZW50cnktPm1fd2F0Y2hwb2ludHMp
CiAgICAgICAgIHJldHVybjsKLSAgICBlbnRyeS0+bV93YXRjaHBvaW50cyA9IGFkb3B0UmVmKG5l
dyBWYXJpYWJsZVdhdGNocG9pbnRTZXQoKnN5bWJvbFRhYmxlKSk7CisgICAgZW50cnktPm1fd2F0
Y2hwb2ludHMgPSBhZG9wdFJlZihuZXcgV2F0Y2hwb2ludFNldChDbGVhcldhdGNocG9pbnQpKTsK
IH0KIAogdm9pZCBTeW1ib2xUYWJsZUVudHJ5OjphZGRXYXRjaHBvaW50KFdhdGNocG9pbnQqIHdh
dGNocG9pbnQpCkBAIC04MiwxNSArNzQsNiBAQCB2b2lkIFN5bWJvbFRhYmxlRW50cnk6OmFkZFdh
dGNocG9pbnQoV2F0CiAgICAgZmF0RW50cnkoKS0+bV93YXRjaHBvaW50cy0+YWRkKHdhdGNocG9p
bnQpOwogfQogCi12b2lkIFN5bWJvbFRhYmxlRW50cnk6Om5vdGlmeVdyaXRlU2xvdyhWTSYgdm0s
IEpTVmFsdWUgdmFsdWUsIGNvbnN0IEZpcmVEZXRhaWwmIGRldGFpbCkKLXsKLSAgICBWYXJpYWJs
ZVdhdGNocG9pbnRTZXQqIHdhdGNocG9pbnRzID0gZmF0RW50cnkoKS0+bV93YXRjaHBvaW50cy5n
ZXQoKTsKLSAgICBpZiAoIXdhdGNocG9pbnRzKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAg
d2F0Y2hwb2ludHMtPm5vdGlmeVdyaXRlKHZtLCB2YWx1ZSwgZGV0YWlsKTsKLX0KLQogU3ltYm9s
VGFibGVFbnRyeTo6RmF0RW50cnkqIFN5bWJvbFRhYmxlRW50cnk6OmluZmxhdGVTbG93KCkKIHsK
ICAgICBGYXRFbnRyeSogZW50cnkgPSBuZXcgRmF0RW50cnkobV9iaXRzKTsKQEAgLTEwMSw0OCAr
ODQsMjkgQEAgU3ltYm9sVGFibGVFbnRyeTo6RmF0RW50cnkqIFN5bWJvbFRhYmxlRQogU3ltYm9s
VGFibGU6OlN5bWJvbFRhYmxlKFZNJiB2bSkKICAgICA6IEpTQ2VsbCh2bSwgdm0uc3ltYm9sVGFi
bGVTdHJ1Y3R1cmUuZ2V0KCkpCiAgICAgLCBtX3VzZXNOb25TdHJpY3RFdmFsKGZhbHNlKQotICAg
ICwgbV9mdW5jdGlvbkVudGVyZWRPbmNlKENsZWFyV2F0Y2hwb2ludCkKIHsKIH0KIAogU3ltYm9s
VGFibGU6On5TeW1ib2xUYWJsZSgpIHsgfQogCit2b2lkIFN5bWJvbFRhYmxlOjpmaW5pc2hDcmVh
dGlvbihWTSYgdm0pCit7CisgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24odm0pOworICAgIG1fc2lu
Z2xldG9uU2NvcGUuc2V0KHZtLCB0aGlzLCBJbmZlcnJlZFZhbHVlOjpjcmVhdGUodm0pKTsKK30K
Kwogdm9pZCBTeW1ib2xUYWJsZTo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIHRoaXNDZWxsLCBTbG90
VmlzaXRvciYgdmlzaXRvcikKIHsKICAgICBTeW1ib2xUYWJsZSogdGhpc1N5bWJvbFRhYmxlID0g
anNDYXN0PFN5bWJvbFRhYmxlKj4odGhpc0NlbGwpOwogICAgIAogICAgIHZpc2l0b3IuYXBwZW5k
KCZ0aGlzU3ltYm9sVGFibGUtPm1fYXJndW1lbnRzKTsKLSAgICAKLSAgICBpZiAoIXRoaXNTeW1i
b2xUYWJsZS0+bV93YXRjaHBvaW50Q2xlYW51cCkgewotICAgICAgICB0aGlzU3ltYm9sVGFibGUt
Pm1fd2F0Y2hwb2ludENsZWFudXAgPQotICAgICAgICAgICAgc3RkOjptYWtlX3VuaXF1ZTxXYXRj
aHBvaW50Q2xlYW51cD4odGhpc1N5bWJvbFRhYmxlKTsKLSAgICB9Ci0gICAgCi0gICAgdmlzaXRv
ci5hZGRVbmNvbmRpdGlvbmFsRmluYWxpemVyKHRoaXNTeW1ib2xUYWJsZS0+bV93YXRjaHBvaW50
Q2xlYW51cC5nZXQoKSk7CisgICAgdmlzaXRvci5hcHBlbmQoJnRoaXNTeW1ib2xUYWJsZS0+bV9z
aW5nbGV0b25TY29wZSk7CiAgICAgCiAgICAgLy8gU2F2ZSBzb21lIG1lbW9yeS4gVGhpcyBpcyBP
KG4pIHRvIHJlYnVpbGQgYW5kIHdlIGRvIHNvIG9uIHRoZSBmbHkuCiAgICAgQ29uY3VycmVudEpJ
VExvY2tlciBsb2NrZXIodGhpc1N5bWJvbFRhYmxlLT5tX2xvY2spOwogICAgIHRoaXNTeW1ib2xU
YWJsZS0+bV9sb2NhbFRvRW50cnkgPSBudWxscHRyOwogfQogCi1TeW1ib2xUYWJsZTo6V2F0Y2hw
b2ludENsZWFudXA6OldhdGNocG9pbnRDbGVhbnVwKFN5bWJvbFRhYmxlKiBzeW1ib2xUYWJsZSkK
LSAgICA6IG1fc3ltYm9sVGFibGUoc3ltYm9sVGFibGUpCi17Ci19Ci0KLVN5bWJvbFRhYmxlOjpX
YXRjaHBvaW50Q2xlYW51cDo6fldhdGNocG9pbnRDbGVhbnVwKCkgeyB9Ci0KLXZvaWQgU3ltYm9s
VGFibGU6OldhdGNocG9pbnRDbGVhbnVwOjpmaW5hbGl6ZVVuY29uZGl0aW9uYWxseSgpCi17Ci0g
ICAgU3RyaW5nRmlyZURldGFpbCBkZXRhaWwoIlN5bWJvbCB0YWJsZSBjbGVhbi11cCBkdXJpbmcg
R0MiKTsKLSAgICBNYXA6Oml0ZXJhdG9yIGl0ZXIgPSBtX3N5bWJvbFRhYmxlLT5tX21hcC5iZWdp
bigpOwotICAgIE1hcDo6aXRlcmF0b3IgZW5kID0gbV9zeW1ib2xUYWJsZS0+bV9tYXAuZW5kKCk7
Ci0gICAgZm9yICg7IGl0ZXIgIT0gZW5kOyArK2l0ZXIpIHsKLSAgICAgICAgaWYgKFZhcmlhYmxl
V2F0Y2hwb2ludFNldCogc2V0ID0gaXRlci0+dmFsdWUud2F0Y2hwb2ludFNldCgpKQotICAgICAg
ICAgICAgc2V0LT5maW5hbGl6ZVVuY29uZGl0aW9uYWxseShkZXRhaWwpOwotICAgIH0KLX0KLQog
Y29uc3QgU3ltYm9sVGFibGU6OkxvY2FsVG9FbnRyeVZlYyYgU3ltYm9sVGFibGU6OmxvY2FsVG9F
bnRyeShjb25zdCBDb25jdXJyZW50SklUTG9ja2VyJikKIHsKICAgICBpZiAoVU5MSUtFTFkoIW1f
bG9jYWxUb0VudHJ5KSkgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3lt
Ym9sVGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
eW1ib2xUYWJsZS5oCShyZXZpc2lvbiAxODI1ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TeW1ib2xUYWJsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwxNyArMzEsMjAgQEAK
IAogI2luY2x1ZGUgIkNvbmN1cnJlbnRKSVRMb2NrLmgiCiAjaW5jbHVkZSAiQ29uc3RhbnRNb2Rl
LmgiCisjaW5jbHVkZSAiSW5mZXJyZWRWYWx1ZS5oIgogI2luY2x1ZGUgIkpTT2JqZWN0LmgiCiAj
aW5jbHVkZSAiU2NvcGVkQXJndW1lbnRzVGFibGUuaCIKICNpbmNsdWRlICJUeXBlTG9jYXRpb24u
aCIKICNpbmNsdWRlICJWYXJPZmZzZXQuaCIKLSNpbmNsdWRlICJWYXJpYWJsZVdhdGNocG9pbnRT
ZXQuaCIKKyNpbmNsdWRlICJXYXRjaHBvaW50LmgiCiAjaW5jbHVkZSA8bWVtb3J5PgogI2luY2x1
ZGUgPHd0Zi9IYXNoVHJhaXRzLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSW1wbC5oPgog
CiBuYW1lc3BhY2UgSlNDIHsKIAorY2xhc3MgU3ltYm9sVGFibGU7CisKIHN0YXRpYyBBTFdBWVNf
SU5MSU5FIGludCBtaXNzaW5nU3ltYm9sTWFya2VyKCkgeyByZXR1cm4gc3RkOjpudW1lcmljX2xp
bWl0czxpbnQ+OjptYXgoKTsgfQogCiAvLyBUaGUgYml0IHR3aWRkbGluZyBpbiB0aGlzIGNsYXNz
IGFzc3VtZXMgdGhhdCBldmVyeSByZWdpc3RlciBpbmRleCBpcyBhCkBAIC02MywxMSArNjYsMTEg
QEAgc3RhdGljIEFMV0FZU19JTkxJTkUgaW50IG1pc3NpbmdTeW1ib2xNYQogLy8gY291bnRlZCBw
b2ludGVyIHRvIGEgc2hhcmVkIFdhdGNocG9pbnRTZXQuIFRodXMsIGluLXBsYWNlIGVkaXRzIG9m
IHRoZQogLy8gV2F0Y2hwb2ludFNldCB3aWxsIG1hbmlmZXN0IGluIGFsbCBjb3BpZXMuIEhlcmUn
cyBhIHBpY3R1cmU6CiAvLwotLy8gU3ltYm9sVGFibGVFbnRyeSAtLT4gRmF0RW50cnkgLS0+IFZh
cmlhYmxlV2F0Y2hwb2ludFNldAorLy8gU3ltYm9sVGFibGVFbnRyeSAtLT4gRmF0RW50cnkgLS0+
IFdhdGNocG9pbnRTZXQKIC8vCiAvLyBJZiB5b3UgbWFrZSBhIGNvcHkgb2YgYSBTeW1ib2xUYWJs
ZUVudHJ5LCB5b3Ugd2lsbCBoYXZlOgogLy8KLS8vIG9yaWdpbmFsOiBTeW1ib2xUYWJsZUVudHJ5
IC0tPiBGYXRFbnRyeSAtLT4gVmFyaWFibGVXYXRjaHBvaW50U2V0CisvLyBvcmlnaW5hbDogU3lt
Ym9sVGFibGVFbnRyeSAtLT4gRmF0RW50cnkgLS0+IFdhdGNocG9pbnRTZXQKIC8vIGNvcHk6ICAg
ICBTeW1ib2xUYWJsZUVudHJ5IC0tPiBGYXRFbnRyeSAtLS0tLV4KIAogc3RydWN0IFN5bWJvbFRh
YmxlRW50cnkgewpAQCAtMjYwLDMyICsyNjMsNDQgQEAgcHVibGljOgogICAgICAgICByZXR1cm4g
Yml0cygpICYgRG9udEVudW1GbGFnOwogICAgIH0KICAgICAKLSAgICBKU1ZhbHVlIGluZmVycmVk
VmFsdWUoKTsKLQogICAgIHZvaWQgZGlzYWJsZVdhdGNoaW5nKCkKICAgICB7CisgICAgICAgIGlm
IChXYXRjaHBvaW50U2V0KiBzZXQgPSB3YXRjaHBvaW50U2V0KCkpCisgICAgICAgICAgICBzZXQt
PmludmFsaWRhdGUoIkRpc2FibGluZyB3YXRjaGluZyBpbiBzeW1ib2wgdGFibGUiKTsKICAgICAg
ICAgaWYgKHZhck9mZnNldCgpLmlzU2NvcGUoKSkKICAgICAgICAgICAgIHBhY2sodmFyT2Zmc2V0
KCksIGZhbHNlLCBpc1JlYWRPbmx5KCksIGlzRG9udEVudW0oKSk7CiAgICAgfQogICAgIAotICAg
IHZvaWQgcHJlcGFyZVRvV2F0Y2goU3ltYm9sVGFibGUqKTsKKyAgICB2b2lkIHByZXBhcmVUb1dh
dGNoKCk7CiAgICAgCiAgICAgdm9pZCBhZGRXYXRjaHBvaW50KFdhdGNocG9pbnQqKTsKICAgICAK
LSAgICBWYXJpYWJsZVdhdGNocG9pbnRTZXQqIHdhdGNocG9pbnRTZXQoKQorICAgIC8vIFRoaXMg
d2F0Y2hwb2ludCBzZXQgaXMgaW5pdGlhbGl6ZWQgY2xlYXIsIGFuZCBnb2VzIHRocm91Z2ggdGhl
IGZvbGxvd2luZyBzdGF0ZSB0cmFuc2l0aW9uczoKKyAgICAvLyAKKyAgICAvLyBGaXJzdCB3cml0
ZSB0byB0aGlzIHZhciwgaW4gYW55IHNjb3BlIHRoYXQgaGFzIHRoaXMgc3ltYm9sIHRhYmxlOiBD
bGVhci0+SXNXYXRjaGVkLgorICAgIC8vCisgICAgLy8gU2Vjb25kIHdyaXRlIHRvIHRoaXMgdmFy
LCBpbiBhbnkgc2NvcGUgdGhhdCBoYXMgdGhpcyBzeW1ib2wgdGFibGU6IElzV2F0Y2hlZC0+SXNJ
bnZhbGlkYXRlZC4KKyAgICAvLworICAgIC8vIFdlIGVuc3VyZSB0aGF0IHdlIHRvdWNoIHRoZSBz
ZXQgKGkuZS4gdHJpZ2dlciBpdHMgc3RhdGUgdHJhbnNpdGlvbikgYWZ0ZXIgd2UgZG8gdGhlIHdy
aXRlLiBUaGlzCisgICAgLy8gbWVhbnMgdGhhdCBpZiB5b3UncmUgaW4gdGhlIGNvbXBpbGVyIHRo
cmVhZCwgYW5kIHlvdToKKyAgICAvLworICAgIC8vIDEpIE9ic2VydmUgdGhhdCB0aGUgc2V0IElz
V2F0Y2hlZCBhbmQgY29tbWl0IHRvIGFkZGluZyB5b3VyIHdhdGNocG9pbnQuCisgICAgLy8gMikg
TG9hZCBhIHZhbHVlIGZyb20gYW55IHNjb3BlIHRoYXQgaGFzIHRoaXMgd2F0Y2hwb2ludCBzZXQu
CisgICAgLy8KKyAgICAvLyBUaGVuIHlvdSBjYW4gYmUgc3VyZSB0aGF0IHRoYXQgdmFsdWUgaXMg
ZWl0aGVyIGdvaW5nIHRvIGJlIHRoZSBjb3JyZWN0IHZhbHVlIGZvciB0aGF0IHZhciBmb3JldmVy
LAorICAgIC8vIG9yIHRoZSB3YXRjaHBvaW50IHNldCB3aWxsIGludmFsaWRhdGUgYW5kIHlvdSds
bCBnZXQgZmlyZWQuCisgICAgLy8KKyAgICAvLyBJdCdzIHBvc3NpYmxlIHRvIHdyaXRlIGEgcHJv
Z3JhbSB0aGF0IGZpcnN0IGNyZWF0ZXMgbXVsdGlwbGUgc2NvcGVzIHdpdGggdGhlIHNhbWUgdmFy
LCBhbmQgdGhlbgorICAgIC8vIGluaXRpYWxpemVzIHRoYXQgdmFyIGluIGp1c3Qgb25lIG9mIHRo
ZW0uIFRoaXMgbWVhbnMgdGhhdCBhIGNvbXBpbGF0aW9uIGNvdWxkIGNvbnN0YW50LWZvbGQgdG8g
b25lCisgICAgLy8gb2YgdGhlIHNjb3BlcyB0aGF0IHN0aWxsIGhhcyBhbiB1bmRlZmluZWQgdmFs
dWUgZm9yIHRoaXMgdmFyaWFibGUuIFRoYXQncyBmaW5lLCBiZWNhdXNlIGF0IHRoYXQKKyAgICAv
LyBwb2ludCBhbnkgd3JpdGUgdG8gYW55IG9mIHRoZSBpbnN0YW5jZXMgb2YgdGhhdCB2YXJpYWJs
ZSB3b3VsZCBmaXJlIHRoZSB3YXRjaHBvaW50LgorICAgIFdhdGNocG9pbnRTZXQqIHdhdGNocG9p
bnRTZXQoKQogICAgIHsKICAgICAgICAgaWYgKCFpc0ZhdCgpKQogICAgICAgICAgICAgcmV0dXJu
IDA7CiAgICAgICAgIHJldHVybiBmYXRFbnRyeSgpLT5tX3dhdGNocG9pbnRzLmdldCgpOwogICAg
IH0KICAgICAKLSAgICBBTFdBWVNfSU5MSU5FIHZvaWQgbm90aWZ5V3JpdGUoVk0mIHZtLCBKU1Zh
bHVlIHZhbHVlLCBjb25zdCBGaXJlRGV0YWlsJiBkZXRhaWwpCi0gICAgewotICAgICAgICBpZiAo
TElLRUxZKCFpc0ZhdCgpKSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgbm90aWZ5V3Jp
dGVTbG93KHZtLCB2YWx1ZSwgZGV0YWlsKTsKLSAgICB9Ci0gICAgCiBwcml2YXRlOgogICAgIHN0
YXRpYyBjb25zdCBpbnRwdHJfdCBTbGltRmxhZyA9IDB4MTsKICAgICBzdGF0aWMgY29uc3QgaW50
cHRyX3QgUmVhZE9ubHlGbGFnID0gMHgyOwpAQCAtMzA4LDcgKzMyMyw3IEBAIHByaXZhdGU6CiAg
ICAgICAgIAogICAgICAgICBpbnRwdHJfdCBtX2JpdHM7IC8vIGFsd2F5cyBoYXMgRmF0RmxhZyBz
ZXQgYW5kIGV4YWN0bHkgbWF0Y2hlcyB3aGF0IHRoZSBiaXRzIHdvdWxkIGhhdmUgYmVlbiBpZiB0
aGlzIHdhc24ndCBmYXQuCiAgICAgICAgIAotICAgICAgICBSZWZQdHI8VmFyaWFibGVXYXRjaHBv
aW50U2V0PiBtX3dhdGNocG9pbnRzOworICAgICAgICBSZWZQdHI8V2F0Y2hwb2ludFNldD4gbV93
YXRjaHBvaW50czsKICAgICB9OwogICAgIAogICAgIFN5bWJvbFRhYmxlRW50cnkmIGNvcHlTbG93
KGNvbnN0IFN5bWJvbFRhYmxlRW50cnkmKTsKQEAgLTYzNyw2ICs2NTIsOCBAQCBwdWJsaWM6CiAg
ICAgU3ltYm9sVGFibGUqIGNsb25lU2NvcGVQYXJ0KFZNJik7CiAKICAgICB2b2lkIHByZXBhcmVG
b3JUeXBlUHJvZmlsaW5nKGNvbnN0IENvbmN1cnJlbnRKSVRMb2NrZXImKTsKKyAgICAKKyAgICBJ
bmZlcnJlZFZhbHVlKiBzaW5nbGV0b25TY29wZSgpIHsgcmV0dXJuIG1fc2luZ2xldG9uU2NvcGUu
Z2V0KCk7IH0KIAogICAgIHN0YXRpYyB2b2lkIHZpc2l0Q2hpbGRyZW4oSlNDZWxsKiwgU2xvdFZp
c2l0b3ImKTsKIApAQCAtNjQ2LDIwICs2NjMsMTAgQEAgcHJvdGVjdGVkOgogICAgIHN0YXRpYyBj
b25zdCB1bnNpZ25lZCBTdHJ1Y3R1cmVGbGFncyA9IFN0cnVjdHVyZUlzSW1tb3J0YWwgfCBCYXNl
OjpTdHJ1Y3R1cmVGbGFnczsKIAogcHJpdmF0ZToKLSAgICBjbGFzcyBXYXRjaHBvaW50Q2xlYW51
cCA6IHB1YmxpYyBVbmNvbmRpdGlvbmFsRmluYWxpemVyIHsKLSAgICBwdWJsaWM6Ci0gICAgICAg
IFdhdGNocG9pbnRDbGVhbnVwKFN5bWJvbFRhYmxlKik7Ci0gICAgICAgIHZpcnR1YWwgfldhdGNo
cG9pbnRDbGVhbnVwKCk7Ci0gICAgICAgIAotICAgIHByb3RlY3RlZDoKLSAgICAgICAgdmlydHVh
bCB2b2lkIGZpbmFsaXplVW5jb25kaXRpb25hbGx5KCkgb3ZlcnJpZGU7Ci0KLSAgICBwcml2YXRl
OgotICAgICAgICBTeW1ib2xUYWJsZSogbV9zeW1ib2xUYWJsZTsKLSAgICB9OwotICAgIAogICAg
IEpTX0VYUE9SVF9QUklWQVRFIFN5bWJvbFRhYmxlKFZNJik7CiAgICAgflN5bWJvbFRhYmxlKCk7
CisgICAgCisgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBmaW5pc2hDcmVhdGlvbihWTSYpOwog
CiAgICAgTWFwIG1fbWFwOwogICAgIFNjb3BlT2Zmc2V0IG1fbWF4U2NvcGVPZmZzZXQ7CkBAIC02
NzQsMTMgKzY4MSwxMSBAQCBwcml2YXRlOgogICAgIGJvb2wgbV91c2VzTm9uU3RyaWN0RXZhbDsK
ICAgICAKICAgICBXcml0ZUJhcnJpZXI8U2NvcGVkQXJndW1lbnRzVGFibGU+IG1fYXJndW1lbnRz
OworICAgIFdyaXRlQmFycmllcjxJbmZlcnJlZFZhbHVlPiBtX3NpbmdsZXRvblNjb3BlOwogICAg
IAotICAgIHN0ZDo6dW5pcXVlX3B0cjxXYXRjaHBvaW50Q2xlYW51cD4gbV93YXRjaHBvaW50Q2xl
YW51cDsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8TG9jYWxUb0VudHJ5VmVjPiBtX2xvY2FsVG9FbnRy
eTsKIAogcHVibGljOgotICAgIElubGluZVdhdGNocG9pbnRTZXQgbV9mdW5jdGlvbkVudGVyZWRP
bmNlOwotICAgIAogICAgIG11dGFibGUgQ29uY3VycmVudEpJVExvY2sgbV9sb2NrOwogfTsKIApJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVHlwZVByb2ZpbGVyLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBlUHJvZmlsZXIuY3Bw
CShyZXZpc2lvbiAxODI1ODIpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9UeXBl
UHJvZmlsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbmNsdWRl
ICJJbnNwZWN0b3JQcm90b2NvbE9iamVjdHMuaCIKICNpbmNsdWRlICJUeXBlTG9jYXRpb24uaCIK
KyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAKIG5hbWVzcGFjZSBKU0Mgewog
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvVk0uY3BwCShyZXZpc2lvbiAxODI1ODIp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9WTS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIzNyw2ICsyMzcsNyBAQCBWTTo6Vk0oVk1UeXBlIHZtVHlwZSwgSGVhcFR5cGUgaGVhcFR5
cGUpCiAgICAgdW5saW5rZWRGdW5jdGlvbkNvZGVCbG9ja1N0cnVjdHVyZS5zZXQoKnRoaXMsIFVu
bGlua2VkRnVuY3Rpb25Db2RlQmxvY2s6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywgMCwganNOdWxs
KCkpKTsKICAgICBwcm9wZXJ0eVRhYmxlU3RydWN0dXJlLnNldCgqdGhpcywgUHJvcGVydHlUYWJs
ZTo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwogICAgIHdlYWtNYXBEYXRh
U3RydWN0dXJlLnNldCgqdGhpcywgV2Vha01hcERhdGE6OmNyZWF0ZVN0cnVjdHVyZSgqdGhpcywg
MCwganNOdWxsKCkpKTsKKyAgICBpbmZlcnJlZFZhbHVlU3RydWN0dXJlLnNldCgqdGhpcywgSW5m
ZXJyZWRWYWx1ZTo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwogI2lmIEVO
QUJMRShQUk9NSVNFUykKICAgICBwcm9taXNlRGVmZXJyZWRTdHJ1Y3R1cmUuc2V0KCp0aGlzLCBK
U1Byb21pc2VEZWZlcnJlZDo6Y3JlYXRlU3RydWN0dXJlKCp0aGlzLCAwLCBqc051bGwoKSkpOwog
ICAgIHByb21pc2VSZWFjdGlvblN0cnVjdHVyZS5zZXQoKnRoaXMsIEpTUHJvbWlzZVJlYWN0aW9u
OjpjcmVhdGVTdHJ1Y3R1cmUoKnRoaXMsIDAsIGpzTnVsbCgpKSk7CkluZGV4OiBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9WTS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1ZNLmgJKHJldmlzaW9uIDE4MjU4MikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL1ZNLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3MCw2ICsyNzAsNyBAQCBwdWJs
aWM6CiAgICAgU3Ryb25nPFN0cnVjdHVyZT4gdW5saW5rZWRGdW5jdGlvbkNvZGVCbG9ja1N0cnVj
dHVyZTsKICAgICBTdHJvbmc8U3RydWN0dXJlPiBwcm9wZXJ0eVRhYmxlU3RydWN0dXJlOwogICAg
IFN0cm9uZzxTdHJ1Y3R1cmU+IHdlYWtNYXBEYXRhU3RydWN0dXJlOworICAgIFN0cm9uZzxTdHJ1
Y3R1cmU+IGluZmVycmVkVmFsdWVTdHJ1Y3R1cmU7CiAjaWYgRU5BQkxFKFBST01JU0VTKQogICAg
IFN0cm9uZzxTdHJ1Y3R1cmU+IHByb21pc2VEZWZlcnJlZFN0cnVjdHVyZTsKICAgICBTdHJvbmc8
U3RydWN0dXJlPiBwcm9taXNlUmVhY3Rpb25TdHJ1Y3R1cmU7CkluZGV4OiBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvdGVzdHMvc3RyZXNzL2luZmVyLXVuaW5pdGlhbGl6ZWQtY2xvc3VyZS12YXIuanMK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9pbmZlci11
bmluaXRpYWxpemVkLWNsb3N1cmUtdmFyLmpzCShyZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9pbmZlci11bmluaXRpYWxpemVkLWNsb3N1cmUtdmFyLmpz
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMjYgQEAKK2Z1bmN0aW9uIGZvbyhwKSB7CisgICAg
dmFyIHg7CisgICAgCisgICAgbm9JbmxpbmUoZik7CisgICAgCisgICAgaWYgKHApIHsKKyAgICAg
ICAgdmFyIGYgPSBmdW5jdGlvbigpIHsgcmV0dXJuIHg7IH0KKyAgICAgICAgCisgICAgICAgIGZv
byhmYWxzZSk7CisgICAgICAgIAorICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDEwMDAwOyAr
K2kpIHsKKyAgICAgICAgICAgIHZhciByZXN1bHQgPSBmKCk7CisgICAgICAgICAgICBpZiAocmVz
dWx0ICE9PSB2b2lkIDApCisgICAgICAgICAgICAgICAgdGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0
ICgxKTogIiArIHJlc3VsdDsKKyAgICAgICAgfQorICAgICAgICAKKyAgICAgICAgeCA9IDQzOwor
ICAgICAgICAKKyAgICAgICAgdmFyIHJlc3VsdCA9IGYoKTsKKyAgICAgICAgaWYgKHJlc3VsdCAh
PSA0MykKKyAgICAgICAgICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdCAoMik6ICIgKyByZXN1
bHQ7CisgICAgfSBlbHNlCisgICAgICAgIHggPSA0MjsKK30KKworZm9vKHRydWUpOwpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9zaW5nbGV0b24tc2NvcGUtdGhlbi1v
dmVyd3JpdGUuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0
cmVzcy9zaW5nbGV0b24tc2NvcGUtdGhlbi1vdmVyd3JpdGUuanMJKHJldmlzaW9uIDApCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3NpbmdsZXRvbi1zY29wZS10aGVuLW92
ZXJ3cml0ZS5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDIwIEBACitmdW5jdGlvbiBmb28o
YSkgeworICAgIHZhciB4ID0gYSArIDE7CisgICAgdmFyIGYgPSBmdW5jdGlvbihhKSB7CisgICAg
ICAgIHJldHVybiB4ICsgYTsKKyAgICB9OworICAgIG5vSW5saW5lKGYpOworICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgeworICAgICAgICB2YXIgcmVzdWx0ID0gZihpKTsKKyAg
ICAgICAgaWYgKHJlc3VsdCAhPSBhICsgMSArIGkpCisgICAgICAgICAgICB0aHJvdyAiRXJyb3I6
IGJhZCByZXN1bHQ6ICIgKyByZXN1bHQ7CisgICAgfQorICAgIHggPSA5OTk7CisgICAgdmFyIHJl
c3VsdCA9IGYoMSk7CisgICAgaWYgKHJlc3VsdCAhPSA5OTkgKyAxKQorICAgICAgICB0aHJvdyAi
RXJyb3I6IGJhZCByZXN1bHQ6ICIgKyByZXN1bHQ7Cit9CisKK25vSW5saW5lKGZvbyk7Citmb3Ig
KHZhciBpID0gMDsgaSA8IDM7ICsraSkKKyAgICBmb28oNDIgKyBpKTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3Mvc2luZ2xldG9uLXNjb3BlLXRoZW4tcmVhbGxvYy1h
bmQtb3ZlcndyaXRlLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0
cy9zdHJlc3Mvc2luZ2xldG9uLXNjb3BlLXRoZW4tcmVhbGxvYy1hbmQtb3ZlcndyaXRlLmpzCShy
ZXZpc2lvbiAwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9zaW5nbGV0
b24tc2NvcGUtdGhlbi1yZWFsbG9jLWFuZC1vdmVyd3JpdGUuanMJKHdvcmtpbmcgY29weSkKQEAg
LTAsMCArMSwyMCBAQAorZnVuY3Rpb24gZm9vKGEpIHsKKyAgICB2YXIgeCA9IGEgKyAxOworICAg
IHJldHVybiBmdW5jdGlvbihhKSB7CisgICAgICAgIHJldHVybiB4ICsgYTsKKyAgICB9OworfQor
Cit2YXIgZiA9IGZvbyg0Mik7Citub0lubGluZShmKTsKKworZm9yICh2YXIgaSA9IDA7IGkgPCAx
MDAwMDsgKytpKSB7CisgICAgdmFyIHJlc3VsdCA9IGYoaSk7CisgICAgaWYgKHJlc3VsdCAhPSA0
MiArIDEgKyBpKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQ6ICIgKyByZXN1bHQ7
Cit9CisKK3ZhciBmID0gZm9vKDQzKTsKK3ZhciByZXN1bHQgPSBmKDEpOworaWYgKHJlc3VsdCAh
PSA0MyArIDEgKyAxKQorICAgIHRocm93ICJFcnJvcjogYmFkIHJlc3VsdDogIiArIHJlc3VsdDsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS90ZXN0cy9zdHJlc3Mvc2luZ2xldG9uLXNjb3Bl
LXRoZW4tcmVhbGxvYy5qcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVz
dHMvc3RyZXNzL3NpbmdsZXRvbi1zY29wZS10aGVuLXJlYWxsb2MuanMJKHJldmlzaW9uIDApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL3NpbmdsZXRvbi1zY29wZS10aGVu
LXJlYWxsb2MuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwyMCBAQAorZnVuY3Rpb24gZm9v
KGEpIHsKKyAgICB2YXIgeCA9IGEgKyAxOworICAgIHJldHVybiBmdW5jdGlvbihhKSB7CisgICAg
ICAgIHJldHVybiB4ICs9IGE7CisgICAgfTsKK30KKwordmFyIGYgPSBmb28oNDIpOworbm9Jbmxp
bmUoZik7CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDA7ICsraSkgeworICAgIHZhciByZXN1
bHQgPSBmKDEpOworICAgIGlmIChyZXN1bHQgIT0gNDIgKyAxICsgaSArIDEpCisgICAgICAgIHRo
cm93ICJFcnJvcjogYmFkIHJlc3VsdDogIiArIHJlc3VsdDsKK30KKwordmFyIGYgPSBmb28oNDMp
OwordmFyIHJlc3VsdCA9IGYoMSk7CitpZiAocmVzdWx0ICE9IDQzICsgMSArIDEpCisgICAgdGhy
b3cgIkVycm9yOiBiYWQgcmVzdWx0OiAiICsgcmVzdWx0OwpJbmRleDogTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL0NoYW5nZUxvZwkocmV2aXNpb24gMTgy
NTgyKQorKysgTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEs
MjAgQEAKKzIwMTUtMDQtMDggIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KKworICAg
ICAgICBKU0Mgc2hvdWxkIGRldGVjdCBzaW5nbGV0b24gZnVuY3Rpb25zCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNDMyMzIKKworICAgICAgICBSZXZp
ZXdlZCBieSBNaWNoYWVsIFNhYm9mZi4KKworICAgICAgICAqIGpzL3JlZ3Jlc3MvY3JlYXRlLWxv
dHMtb2YtZnVuY3Rpb25zLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICoganMvcmVncmVz
cy9jcmVhdGUtbG90cy1vZi1mdW5jdGlvbnMuaHRtbDogQWRkZWQuCisgICAgICAgICoganMvcmVn
cmVzcy9uby1pbmxpbmUtY29uc3RydWN0b3ItZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAg
KiBqcy9yZWdyZXNzL25vLWlubGluZS1jb25zdHJ1Y3Rvci5odG1sOiBBZGRlZC4KKyAgICAgICAg
KiBqcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9jcmVhdGUtbG90cy1vZi1mdW5jdGlvbnMuanM6IEFk
ZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL25vLWlubGluZS1jb25zdHJ1
Y3Rvci5qczogQWRkZWQuCisgICAgICAgICoganMvcmVncmVzcy9zY3JpcHQtdGVzdHMvc2luZ2xl
dG9uLXNjb3BlLmpzOiBBZGRlZC4KKyAgICAgICAgKiBqcy9yZWdyZXNzL3NpbmdsZXRvbi1zY29w
ZS1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGpzL3JlZ3Jlc3Mvc2luZ2xldG9uLXNj
b3BlLmh0bWw6IEFkZGVkLgorCiAyMDE1LTA0LTA4ICBCcmVudCBGdWxnaGFtICA8YmZ1bGdoYW1A
YXBwbGUuY29tPgogCiAgICAgICAgIFtXaW5dIExheW91dCBUZXN0IGluc3BlY3Rvci9jb25zb2xl
L2NvbnNvbGUtYXBpLmh0bWwgaXMgZmFpbGluZwpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVz
cy9jcmVhdGUtbG90cy1vZi1mdW5jdGlvbnMtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2pzL3JlZ3Jlc3MvY3JlYXRlLWxvdHMtb2YtZnVuY3Rpb25zLWV4cGVjdGVkLnR4
dAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3MvY3JlYXRlLWxvdHMtb2Yt
ZnVuY3Rpb25zLWV4cGVjdGVkLnR4dAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEwIEBACitK
U1JlZ3Jlc3MvY3JlYXRlLWxvdHMtb2YtZnVuY3Rpb25zCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxs
IHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBM
RVRFIi4KKworCitQQVNTIG5vIGV4Y2VwdGlvbiB0aHJvd24KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFy
c2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdy
ZXNzL2NyZWF0ZS1sb3RzLW9mLWZ1bmN0aW9ucy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRl
c3RzL2pzL3JlZ3Jlc3MvY3JlYXRlLWxvdHMtb2YtZnVuY3Rpb25zLmh0bWwJKHJldmlzaW9uIDAp
CisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL2NyZWF0ZS1sb3RzLW9mLWZ1bmN0aW9ucy5odG1s
CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTIgQEAKKzwhRE9DVFlQRSBIVE1MIFBVQkxJQyAi
LS8vSUVURi8vRFREIEhUTUwvL0VOIj4KKzxodG1sPgorPGhlYWQ+Cis8c2NyaXB0IHNyYz0iLi4v
Li4vcmVzb3VyY2VzL2pzLXRlc3QtcHJlLmpzIj48L3NjcmlwdD4KKzwvaGVhZD4KKzxib2R5Pgor
PHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNzLXByZS5qcyI+PC9zY3JpcHQ+Cis8
c2NyaXB0IHNyYz0ic2NyaXB0LXRlc3RzL2NyZWF0ZS1sb3RzLW9mLWZ1bmN0aW9ucy5qcyI+PC9z
Y3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL3JlZ3Jlc3MtcG9zdC5qcyI+PC9z
Y3JpcHQ+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3VyY2VzL2pzLXRlc3QtcG9zdC5qcyI+PC9z
Y3JpcHQ+Cis8L2JvZHk+Cis8L2h0bWw+CkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL25v
LWlubGluZS1jb25zdHJ1Y3Rvci1leHBlY3RlZC50eHQKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVz
dHMvanMvcmVncmVzcy9uby1pbmxpbmUtY29uc3RydWN0b3ItZXhwZWN0ZWQudHh0CShyZXZpc2lv
biAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9uby1pbmxpbmUtY29uc3RydWN0b3ItZXhw
ZWN0ZWQudHh0CSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTAgQEAKK0pTUmVncmVzcy9uby1p
bmxpbmUtY29uc3RydWN0b3IKKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9m
ICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1Mg
bm8gZXhjZXB0aW9uIHRocm93bgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitU
RVNUIENPTVBMRVRFCisKSW5kZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvbm8taW5saW5lLWNv
bnN0cnVjdG9yLmh0bWwKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVzcy9uby1p
bmxpbmUtY29uc3RydWN0b3IuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3Jl
Z3Jlc3Mvbm8taW5saW5lLWNvbnN0cnVjdG9yLmh0bWwJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwxMiBAQAorPCFET0NUWVBFIEhUTUwgUFVCTElDICItLy9JRVRGLy9EVEQgSFRNTC8vRU4iPgor
PGh0bWw+Cis8aGVhZD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1wcmUu
anMiPjwvc2NyaXB0PgorPC9oZWFkPgorPGJvZHk+Cis8c2NyaXB0IHNyYz0iLi4vLi4vcmVzb3Vy
Y2VzL3JlZ3Jlc3MtcHJlLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJzY3JpcHQtdGVzdHMv
bm8taW5saW5lLWNvbnN0cnVjdG9yLmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9y
ZXNvdXJjZXMvcmVncmVzcy1wb3N0LmpzIj48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIuLi8uLi9y
ZXNvdXJjZXMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4KKzwvYm9keT4KKzwvaHRtbD4KSW5k
ZXg6IExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2luZ2xldG9uLXNjb3BlLWV4cGVjdGVkLnR4dAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NpbmdsZXRvbi1zY29wZS1leHBl
Y3RlZC50eHQJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NpbmdsZXRv
bi1zY29wZS1leHBlY3RlZC50eHQJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxMCBAQAorSlNS
ZWdyZXNzL3NpbmdsZXRvbi1zY29wZQorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJp
ZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKwor
UEFTUyBubyBleGNlcHRpb24gdGhyb3duCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVl
CisKK1RFU1QgQ09NUExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvanMvcmVncmVzcy9zaW5nbGV0
b24tc2NvcGUuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3Npbmds
ZXRvbi1zY29wZS5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvanMvcmVncmVzcy9z
aW5nbGV0b24tc2NvcGUuaHRtbAkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDEyIEBACis8IURP
Q1RZUEUgSFRNTCBQVUJMSUMgIi0vL0lFVEYvL0RURCBIVE1MLy9FTiI+Cis8aHRtbD4KKzxoZWFk
PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXByZS5qcyI+PC9zY3JpcHQ+
Cis8L2hlYWQ+Cis8Ym9keT4KKzxzY3JpcHQgc3JjPSIuLi8uLi9yZXNvdXJjZXMvcmVncmVzcy1w
cmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9InNjcmlwdC10ZXN0cy9zaW5nbGV0b24tc2Nv
cGUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9yZWdyZXNzLXBv
c3QuanMiPjwvc2NyaXB0PgorPHNjcmlwdCBzcmM9Ii4uLy4uL3Jlc291cmNlcy9qcy10ZXN0LXBv
c3QuanMiPjwvc2NyaXB0PgorPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvanMv
cmVncmVzcy9zY3JpcHQtdGVzdHMvY3JlYXRlLWxvdHMtb2YtZnVuY3Rpb25zLmpzCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL2NyZWF0ZS1sb3RzLW9m
LWZ1bmN0aW9ucy5qcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2pzL3JlZ3Jlc3Mvc2Ny
aXB0LXRlc3RzL2NyZWF0ZS1sb3RzLW9mLWZ1bmN0aW9ucy5qcwkod29ya2luZyBjb3B5KQpAQCAt
MCwwICsxLDEyIEBACitmdW5jdGlvbiBmb28oKSB7CisgICAgdmFyIHJlc3VsdCA9IDA7CisgICAg
Zm9yICh2YXIgaSA9IDA7IGkgPCAxMDA7ICsraSkKKyAgICAgICAgcmVzdWx0ICs9IChmdW5jdGlv
bigpIHsgcmV0dXJuIGkgfSkoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitmb3IgKHZhciBp
ID0gMDsgaSA8IDEwMDAwOyArK2kpIHsKKyAgICB2YXIgcmVzdWx0ID0gZm9vKCk7CisgICAgaWYg
KHJlc3VsdCAhPSA0OTUwKQorICAgICAgICB0aHJvdyAiRXJyb3I6IGJhZCByZXN1bHQ6ICIgKyBy
ZXN1bHQ7Cit9CkluZGV4OiBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9uby1p
bmxpbmUtY29uc3RydWN0b3IuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0VGVzdHMvanMvcmVncmVz
cy9zY3JpcHQtdGVzdHMvbm8taW5saW5lLWNvbnN0cnVjdG9yLmpzCShyZXZpc2lvbiAwKQorKysg
TGF5b3V0VGVzdHMvanMvcmVncmVzcy9zY3JpcHQtdGVzdHMvbm8taW5saW5lLWNvbnN0cnVjdG9y
LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTMgQEAKK2Z1bmN0aW9uIEZvbygpIHsKKyAg
ICB2YXIgbyA9IHtmOntmOntmOntmOjQyfX19fTsKKyAgICB0aGlzLmYgPSA0MjsKK30KKworbm9J
bmxpbmUoRm9vKTsKKworZm9yICh2YXIgaSA9IDA7IGkgPCAzMDAwMDAwOyArK2kpIHsKKyAgICB2
YXIgcmVzdWx0ID0gbmV3IEZvbygpOworICAgIGlmIChyZXN1bHQuZiAhPSA0MikKKyAgICAgICAg
dGhyb3cgIkVycm9yOiBiYWQgcmVzdWx0OiAiICsgcmVzdWx0LmY7Cit9CisKSW5kZXg6IExheW91
dFRlc3RzL2pzL3JlZ3Jlc3Mvc2NyaXB0LXRlc3RzL3NpbmdsZXRvbi1zY29wZS5qcwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0cy9zaW5nbGV0b24tc2Nv
cGUuanMJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9qcy9yZWdyZXNzL3NjcmlwdC10ZXN0
cy9zaW5nbGV0b24tc2NvcGUuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCArMSwxNiBAQAorZnVu
Y3Rpb24gZm9vKCkgeworICAgIHZhciB4ID0gNDI7CisgICAgdmFyIHkgPSA0MzsKKyAgICByZXR1
cm4gZnVuY3Rpb24oeikgeworICAgICAgICB2YXIgcmVzdWx0ID0geCArIHk7CisgICAgICAgIHgg
Kz0gejsKKyAgICAgICAgeSArPSB6OworICAgICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KK30K
KwordmFyIGYgPSBmb28oKTsKK25vSW5saW5lKGYpOworCitmb3IgKHZhciBpID0gMDsgaSA8IDEw
MDAwMDAwOyArK2kpCisgICAgZigxKTsK
</data>
<flag name="review"
          id="275199"
          type_id="1"
          status="+"
          setter="ggaren"
    />
          </attachment>
      

    </bug>

</bugzilla>