<?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>157209</bug_id>
          
          <creation_ts>2016-04-29 15:45:40 -0700</creation_ts>
          <short_desc>ThisTDZMode is no longer needed</short_desc>
          <delta_ts>2016-05-24 05:03:32 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Saam Barati">saam</reporter>
          <assigned_to name="Yusuke Suzuki">ysuzuki</assigned_to>
          <cc>benjamin</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>gskachkov</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>sukolsak</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1188822</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-04-29 15:45:40 -0700</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1188826</commentid>
    <comment_count>1</comment_count>
      <attachid>277743</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-04-29 15:49:59 -0700</bug_when>
    <thetext>Created attachment 277743
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1188837</commentid>
    <comment_count>2</comment_count>
      <attachid>277743</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2016-04-29 16:01:56 -0700</bug_when>
    <thetext>Comment on attachment 277743
patch

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

r=me

&gt; Source/JavaScriptCore/ChangeLog:11
&gt; +        The field was true only when ThisTDZMode was set to AlwaysCheck.
&gt; +        ThisTDZMode was AlwaysCheck when we were a derived constructor.
&gt; +        We already emit TDZ checks for &apos;this&apos; when we&apos;re in a derived 
&gt; +        constructor context. This field was doing nothing.

In Parser&lt;LexerType&gt;::Parser(), can you ASSERT(m_thisTDZMode == AlwaysCheck) when (derivedContextType == DerivedContextType::DerivedConstructorContext) to enforce this invariant?  Is that assert right?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1188854</commentid>
    <comment_count>3</comment_count>
      <attachid>277743</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-04-29 16:21:10 -0700</bug_when>
    <thetext>Comment on attachment 277743
patch

I&apos;m redoing this patch to remove ThisTDZMode since it isn&apos;t needed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1188891</commentid>
    <comment_count>4</comment_count>
      <attachid>277760</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-04-29 17:07:09 -0700</bug_when>
    <thetext>Created attachment 277760
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1188907</commentid>
    <comment_count>5</comment_count>
      <attachid>277760</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2016-04-29 17:28:35 -0700</bug_when>
    <thetext>Comment on attachment 277760
patch

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

&gt; Source/JavaScriptCore/ChangeLog:12
&gt; +        my removing ThisTDZMode.

typo: /my/by/.

&gt; Source/JavaScriptCore/parser/SourceCodeKey.h:47
&gt; -    SourceCodeKey(const SourceCode&amp; sourceCode, const String&amp; name, CodeType codeType, JSParserBuiltinMode builtinMode, JSParserStrictMode strictMode, ThisTDZMode thisTDZMode = ThisTDZMode::CheckIfNeeded)
&gt; +    SourceCodeKey(const SourceCode&amp; sourceCode, const String&amp; name, CodeType codeType, JSParserBuiltinMode builtinMode, JSParserStrictMode strictMode)
&gt;          : m_sourceCode(sourceCode)
&gt;          , m_name(name)
&gt; -        , m_flags((static_cast&lt;unsigned&gt;(codeType) &lt;&lt; 3) | (static_cast&lt;unsigned&gt;(builtinMode) &lt;&lt; 2) | (static_cast&lt;unsigned&gt;(strictMode) &lt;&lt; 1) | static_cast&lt;unsigned&gt;(thisTDZMode))
&gt; +        , m_flags((static_cast&lt;unsigned&gt;(codeType) &lt;&lt; 2) | (static_cast&lt;unsigned&gt;(builtinMode) &lt;&lt; 1) | static_cast&lt;unsigned&gt;(strictMode))

Are you sure that we no longer need thisTDZMode (or some equivalent) in the SourceCodeKey?  This elision of thisTDZMode here is a change of behavior because SourceCodeKey does not know about ConstructorKind and DerivedContextType.  From what I can tell, JSGlobalObject::createEvalCodeBlock() eventually calls CodeCache::getGlobalCodeBlock(), and will have different behavior depending on whether thisTDZMode.

So, is this actually correct?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1188912</commentid>
    <comment_count>6</comment_count>
      <attachid>277760</attachid>
    <who name="Mark Lam">mark.lam</who>
    <bug_when>2016-04-29 17:42:55 -0700</bug_when>
    <thetext>Comment on attachment 277760
patch

r- for to take this out of the review queue, until the SourceCodeKey issue is addressed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1189033</commentid>
    <comment_count>7</comment_count>
      <attachid>277760</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-04-30 00:36:24 -0700</bug_when>
    <thetext>Comment on attachment 277760
patch

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

&gt;&gt; Source/JavaScriptCore/parser/SourceCodeKey.h:47
&gt;&gt; +        , m_flags((static_cast&lt;unsigned&gt;(codeType) &lt;&lt; 2) | (static_cast&lt;unsigned&gt;(builtinMode) &lt;&lt; 1) | static_cast&lt;unsigned&gt;(strictMode))
&gt; 
&gt; Are you sure that we no longer need thisTDZMode (or some equivalent) in the SourceCodeKey?  This elision of thisTDZMode here is a change of behavior because SourceCodeKey does not know about ConstructorKind and DerivedContextType.  From what I can tell, JSGlobalObject::createEvalCodeBlock() eventually calls CodeCache::getGlobalCodeBlock(), and will have different behavior depending on whether thisTDZMode.
&gt; 
&gt; So, is this actually correct?

I think the correct solution here is to take into account DerivedContextType and EvalContextType in SourceCodeKey.
I can see how this might cause us to do bad things by not taking this into account. It&apos;s not super obvious which situations bad
things would happen in by not taking these fields into account. I think we would probably cache an eval inside a function
and outside a function to each other even though they have different context types. (This effects new.target, but I&apos;m not sure
what else).

It&apos;s obvious that we should just take into account those fields here. If they&apos;re the same, then obviously they can safely cache.

I&apos;ll make this change and re-upload.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1193280</commentid>
    <comment_count>8</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-05-15 16:51:02 -0700</bug_when>
    <thetext>Discussed with Saam. We should fix the same issue for EvalCodeCache.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1195417</commentid>
    <comment_count>9</comment_count>
      <attachid>279549</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-05-22 07:30:51 -0700</bug_when>
    <thetext>Created attachment 279549
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1195418</commentid>
    <comment_count>10</comment_count>
      <attachid>279549</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-05-22 07:38:57 -0700</bug_when>
    <thetext>Comment on attachment 279549
Patch

Hm, we can see date-format-xparb regression...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1195420</commentid>
    <comment_count>11</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-05-22 09:26:51 -0700</bug_when>
    <thetext>Ah, it seems that was noise.

Benchmark report for SunSpider on hanayamata.

VMs tested:
&quot;baseline&quot; at /home/yusukesuzuki/dev/WebKit/WebKitBuild/unify-master/Release/bin/jsc
&quot;patched&quot; at /home/yusukesuzuki/dev/WebKit/WebKitBuild/unify/Release/bin/jsc

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

                                   baseline                  patched                                      

3d-cube                         6.0384+-0.0133     ?      6.0613+-0.0152        ?
3d-morph                       25.8352+-0.0615     ?     25.8728+-0.1559        ?
3d-raytrace                     7.0023+-0.2495     ?      7.0058+-0.2359        ?
access-binary-trees             2.3516+-0.0751     ?      2.3631+-0.0731        ?
access-fannkuch                 6.9495+-0.2242     ?      7.0143+-0.2411        ?
access-nbody                    2.8772+-0.0113            2.8732+-0.0093        
access-nsieve                   3.1959+-0.0329            3.1883+-0.0315        
bitops-3bit-bits-in-byte        1.2477+-0.0387            1.2139+-0.0305          might be 1.0278x faster
bitops-bits-in-byte             2.8216+-0.0782            2.7863+-0.0768          might be 1.0127x faster
bitops-bitwise-and              1.9834+-0.0072     ?      1.9881+-0.0082        ?
bitops-nsieve-bits              3.2078+-0.0803            3.1746+-0.0716          might be 1.0105x faster
controlflow-recursive           2.8659+-0.0805            2.7317+-0.0754          might be 1.0491x faster
crypto-aes                      5.2269+-0.0184     ?      5.2497+-0.0179        ?
crypto-md5                      2.8358+-0.1051     ?      2.9040+-0.1196        ? might be 1.0240x slower
crypto-sha1                     2.6197+-0.0551     ?      2.6537+-0.0593        ? might be 1.0130x slower
date-format-tofte              11.1936+-0.1342           11.1609+-0.1325        
date-format-xparb               6.1710+-0.0790     ?      6.2312+-0.0625        ?
math-cordic                     3.0773+-0.0579     ?      3.1374+-0.0923        ? might be 1.0195x slower
math-partial-sums              10.4776+-0.0119     ?     10.4992+-0.0159        ?
math-spectral-norm              2.1895+-0.0359     ?      2.1961+-0.0391        ?
regexp-dna                      7.3546+-0.0206            7.3518+-0.0206        
string-base64                   4.1672+-0.0236            4.1476+-0.0271        
string-fasta                    6.3762+-0.1015     ?      6.5688+-0.1775        ? might be 1.0302x slower
string-tagcloud                 9.6605+-0.0378     ?      9.6630+-0.0848        ?
string-unpack-code             20.1848+-0.2130           19.9696+-0.1192          might be 1.0108x faster
string-validate-input           4.3347+-0.0585            4.3259+-0.0656        

&lt;arithmetic&gt;                    6.2402+-0.0188     ?      6.2436+-0.0206        ? might be 1.0005x slower</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1195723</commentid>
    <comment_count>12</comment_count>
      <attachid>279549</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-05-23 21:54:48 -0700</bug_when>
    <thetext>Comment on attachment 279549
Patch

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

r=me
Make sure to run JSBench and see that there aren&apos;t regressions there because it&apos;s a good benchmark for code caching.

&gt; Source/JavaScriptCore/runtime/CodeCache.h:71
&gt; +    typedef SourceCodeKey Key;

I don&apos;t think we really need this typedef it seems to only

&gt; Source/JavaScriptCore/runtime/CodeCache.h:72
&gt; +    typedef HashMap&lt;Key, SourceCodeValue, Key::Hash, Key::HashTraits&gt; MapType;

result in a loss of information. 
(Sorry for weird editing I&apos;m on an iPhone).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1195798</commentid>
    <comment_count>13</comment_count>
      <attachid>279549</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-05-24 03:29:03 -0700</bug_when>
    <thetext>Comment on attachment 279549
Patch

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

Thanks!

&gt;&gt; Source/JavaScriptCore/runtime/CodeCache.h:71
&gt;&gt; +    typedef SourceCodeKey Key;
&gt; 
&gt; I don&apos;t think we really need this typedef it seems to only

Ah, this is the change caused when I used SourceCodeKey&lt;Owner&gt; in some revisions. (And share SourceCodeKey&lt;...&gt; impl in EvalCodeCache / CodeCache. But it causes 1 % regression in date-format-tofte due to String for name etc.)
Dropped. Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1195799</commentid>
    <comment_count>14</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-05-24 03:30:49 -0700</bug_when>
    <thetext>I&apos;ve just taken the JSBench results in GTK port.
With https://bugs.webkit.org/show_bug.cgi?id=157952 patch and some modification in run-jsc-benchmark.
But I&apos;ll take the results in OS X soon.

Seeing the JSBench, since it uses (new Date()).getTime(), the result becomes milliseconds. I think it&apos;s worth fixing in the other bugs.


Generating benchmark report at /home/yusukesuzuki/dev/WebKit/baseline_patched_JSBench_hanayamata_20160524_1902_report.txt
And raw data at /home/yusukesuzuki/dev/WebKit/baseline_patched_JSBench_hanayamata_20160524_1902.json

Benchmark report for JSBench on hanayamata.

VMs tested:
&quot;baseline&quot; at /home/yusukesuzuki/dev/WebKit/WebKitBuild/unify-master/Release/bin/WebKitTestRunner
&quot;patched&quot; at /home/yusukesuzuki/dev/WebKit/WebKitBuild/unify/Release/bin/WebKitTestRunner

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

                               baseline                  patched                                      

amazon-chrome               4.7000+-0.3456            4.7000+-0.3456        
amazon-chrome-win           5.0000+-0.0000     ?      5.1000+-0.2262        ? might be 1.0200x slower
amazon-firefox              4.3000+-0.3456            4.1000+-0.2262          might be 1.0488x faster
amazon-firefox-win          4.1000+-0.2262            4.1000+-0.2262        
amazon-safari               5.3000+-0.3456            5.2000+-0.3016          might be 1.0192x faster
facebook-chrome            60.6000+-1.7261     ?     60.7000+-2.1073        ?
facebook-chrome-win       110.0000+-4.9100          108.0000+-3.6163          might be 1.0185x faster
facebook-firefox           32.4000+-0.3694           32.4000+-0.3694        
facebook-firefox-win       21.2000+-0.3016           21.0000+-0.0000        
facebook-safari           108.4000+-0.7690     ?    108.5000+-1.9151        ?
google-chrome              54.7000+-2.8425           54.0000+-2.1060          might be 1.0130x faster
google-chrome-win          43.1000+-1.5250     ?     43.5000+-1.9151        ?
google-firefox             22.4000+-0.9049           21.9000+-0.2262          might be 1.0228x faster
google-firefox-win         25.9000+-0.2262           25.7000+-0.3456        
google-safari              45.9000+-0.2262     ?     46.3000+-0.8954        ?
twitter-chrome              8.0000+-0.3372            7.8000+-0.3016          might be 1.0256x faster
twitter-chrome-win          7.7000+-0.3456     ?      7.9000+-0.4061        ? might be 1.0260x slower
twitter-firefox             0.9000+-0.2262            0.9000+-0.2262        
twitter-firefox-win         0.9000+-0.2262     ?      1.0000+-0.0000        ? might be 1.1111x slower
twitter-safari              7.4000+-0.3694            7.4000+-0.3694        
yahoo-chrome               46.6000+-2.4130           45.4000+-0.3694          might be 1.0264x faster
yahoo-chrome-win           42.6000+-2.1645           41.7000+-0.3456          might be 1.0216x faster
yahoo-firefox              45.6000+-0.3694           45.4000+-0.3694        
yahoo-firefox-win          32.4000+-1.2708     ?     32.5000+-1.4406        ?
yahoo-safari               45.7000+-0.4828           45.5000+-0.3770        

&lt;arithmetic&gt;               31.4320+-0.3642           31.2280+-0.1754          might be 1.0065x faster</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1195807</commentid>
    <comment_count>15</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-05-24 04:17:22 -0700</bug_when>
    <thetext>precise time version is pasted (GTK port). The performance result seems neutral.

Benchmark report for JSBench on hanayamata.

VMs tested:
&quot;baseline&quot; at /home/yusukesuzuki/dev/WebKit/WebKitBuild/unify-master/Release/bin/WebKitTestRunner
&quot;patched&quot; at /home/yusukesuzuki/dev/WebKit/WebKitBuild/unify/Release/bin/WebKitTestRunner

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

                               baseline                  patched                                      

amazon-chrome               4.9325+-0.0708            4.9228+-0.0323        
amazon-chrome-win           5.0518+-0.1095            4.9932+-0.0535          might be 1.0117x faster
amazon-firefox              4.2443+-0.0146     ?      4.2961+-0.0512        ? might be 1.0122x slower
amazon-firefox-win          4.0796+-0.0437            4.0083+-0.0349          might be 1.0178x faster
amazon-safari               5.2075+-0.0351     ?      5.2125+-0.0294        ?
facebook-chrome            61.8494+-2.3841           59.6961+-0.2352          might be 1.0361x faster
facebook-chrome-win       106.6280+-0.3246          106.1090+-0.3561        
facebook-firefox           32.4750+-0.1524           32.2546+-0.1619        
facebook-firefox-win       21.0284+-0.1064           20.9625+-0.0801        
facebook-safari           108.6636+-0.5265     ?    109.4860+-3.7007        ?
google-chrome              52.5803+-0.1479     ?     52.7782+-0.3385        ?
google-chrome-win          42.4969+-0.2176           42.3505+-0.1212        
google-firefox             21.9108+-0.0751           21.8922+-0.0805        
google-firefox-win         25.8621+-0.1576           25.7858+-0.1219        
google-safari              46.3099+-0.6741     ?     46.9237+-1.9326        ? might be 1.0133x slower
twitter-chrome              7.7145+-0.0452            7.6757+-0.0439        
twitter-chrome-win          7.7968+-0.0401            7.7501+-0.0354        
twitter-firefox             0.9288+-0.0111     ?      0.9358+-0.0115        ?
twitter-firefox-win         0.9150+-0.0109            0.9062+-0.0152        
twitter-safari              7.3029+-0.2249            7.1729+-0.0285          might be 1.0181x faster
yahoo-chrome               45.7975+-0.2063           45.3870+-0.3167        
yahoo-chrome-win           41.9409+-0.2908           41.9063+-0.8450        
yahoo-firefox              45.6259+-0.2709     ?     46.2049+-1.7923        ? might be 1.0127x slower
yahoo-firefox-win          31.9043+-0.2250     ?     32.2298+-1.5957        ? might be 1.0102x slower
yahoo-safari               45.7692+-0.2300           45.3233+-0.2835        

&lt;arithmetic&gt;               31.1606+-0.0879           31.0865+-0.1758          might be 1.0024x faster</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1195817</commentid>
    <comment_count>16</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-05-24 04:56:56 -0700</bug_when>
    <thetext>Seems OK in OS X port. (https://bugs.webkit.org/show_bug.cgi?id=157952 with precision time change)

Benchmark report for JSBench on dandelion (MacBookPro10,1).

VMs tested:
&quot;baseline&quot; at /Users/yusukesuzuki/dev/WebKit/WebKitBuild/unify-master/Release/WebKitTestRunner
&quot;patched&quot; at /Users/yusukesuzuki/dev/WebKit/WebKitBuild/unify/Release/WebKitTestRunner

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

                               baseline                  patched                                      

amazon-chrome               5.4971+-0.3937            5.2101+-0.1327          might be 1.0551x faster
amazon-chrome-win           5.4426+-0.3389            5.2734+-0.0883          might be 1.0321x faster
amazon-firefox              4.6832+-0.1219     ?      4.9417+-0.3392        ? might be 1.0552x slower
amazon-firefox-win          4.6663+-0.3976            4.6185+-0.3174          might be 1.0104x faster
amazon-safari               5.5309+-0.3497     ?      5.6208+-0.3330        ? might be 1.0163x slower
facebook-chrome            58.9424+-0.7148           58.0706+-1.3325          might be 1.0150x faster
facebook-chrome-win       102.3439+-0.9822     ?    102.6129+-1.6261        ?
facebook-firefox           30.5548+-0.8753     ?     30.5930+-0.6956        ?
facebook-firefox-win       21.4658+-0.4832           21.4091+-0.7342        
facebook-safari           106.0003+-1.4233          104.8750+-1.4268          might be 1.0107x faster
google-chrome              50.7902+-0.9567     ?     50.9775+-1.0482        ?
google-chrome-win          42.7208+-0.9818           41.7203+-1.0045          might be 1.0240x faster
google-firefox             22.1858+-0.6207     ?     22.8521+-0.6021        ? might be 1.0300x slower
google-firefox-win         26.6523+-0.8937     ?     27.1894+-0.9687        ? might be 1.0202x slower
google-safari              45.4453+-1.5787     ?     45.7893+-1.6880        ?
twitter-chrome              7.5743+-0.4902     ?      7.5935+-0.4605        ?
twitter-chrome-win          8.0579+-0.6966     ?      8.2815+-0.7664        ? might be 1.0278x slower
twitter-firefox             1.0250+-0.0669     ?      1.0379+-0.0566        ? might be 1.0126x slower
twitter-firefox-win         0.9414+-0.0501     ?      0.9707+-0.0614        ? might be 1.0311x slower
twitter-safari              7.7673+-0.7064            7.5038+-0.6054          might be 1.0351x faster
yahoo-chrome               43.2073+-0.8112     ?     44.2817+-1.8422        ? might be 1.0249x slower
yahoo-chrome-win           39.5138+-0.8290           39.2345+-0.8166        
yahoo-firefox              44.4406+-1.3704           43.8516+-1.2818          might be 1.0134x faster
yahoo-firefox-win          30.7475+-0.6733           30.7448+-0.9187        
yahoo-safari               44.1054+-1.3421     ?     44.3163+-1.5547        ?

&lt;arithmetic&gt;               30.4121+-0.2557           30.3828+-0.2540          might be 1.0010x faster</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1195818</commentid>
    <comment_count>17</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2016-05-24 05:03:32 -0700</bug_when>
    <thetext>Committed r201328: &lt;http://trac.webkit.org/changeset/201328&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>277743</attachid>
            <date>2016-04-29 15:49:59 -0700</date>
            <delta_ts>2016-04-29 17:07:09 -0700</delta_ts>
            <desc>patch</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>6216</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjAwMjY2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDM2IEBA
CisyMDE2LTA0LTI5ICBTYWFtIGJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IFRoaXNOb2RlcycgbV9zaG91bGRBbHdheXNFbWl0VERaQ2hlY2sgZmllbGQgaXMgbm90IG5lZWRl
ZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU3MjA5
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhlIGZp
ZWxkIHdhcyB0cnVlIG9ubHkgd2hlbiBUaGlzVERaTW9kZSB3YXMgc2V0IHRvIEFsd2F5c0NoZWNr
LgorICAgICAgICBUaGlzVERaTW9kZSB3YXMgQWx3YXlzQ2hlY2sgd2hlbiB3ZSB3ZXJlIGEgZGVy
aXZlZCBjb25zdHJ1Y3Rvci4KKyAgICAgICAgV2UgYWxyZWFkeSBlbWl0IFREWiBjaGVja3MgZm9y
ICd0aGlzJyB3aGVuIHdlJ3JlIGluIGEgZGVyaXZlZCAKKyAgICAgICAgY29uc3RydWN0b3IgY29u
dGV4dC4gVGhpcyBmaWVsZCB3YXMgZG9pbmcgbm90aGluZy4KKworICAgICAgICAqIGJ5dGVjb21w
aWxlci9Ob2Rlc0NvZGVnZW4uY3BwOgorICAgICAgICAoSlNDOjpUaGlzTm9kZTo6ZW1pdEJ5dGVj
b2RlKToKKyAgICAgICAgKiBwYXJzZXIvQVNUQnVpbGRlci5oOgorICAgICAgICAoSlNDOjpBU1RC
dWlsZGVyOjpjcmVhdGVWb2lkKToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRlVGhp
c0V4cHIpOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVTdXBlckV4cHIpOgorICAg
ICAgICAqIHBhcnNlci9Ob2RlQ29uc3RydWN0b3JzLmg6CisgICAgICAgIChKU0M6OlJlZ0V4cE5v
ZGU6OlJlZ0V4cE5vZGUpOgorICAgICAgICAoSlNDOjpUaGlzTm9kZTo6VGhpc05vZGUpOgorICAg
ICAgICAqIHBhcnNlci9Ob2Rlcy5oOgorICAgICAgICAqIHBhcnNlci9QYXJzZXIuY3BwOgorICAg
ICAgICAoSlNDOjpQYXJzZXI8TGV4ZXJUeXBlPjo6cGFyc2VQcmltYXJ5RXhwcmVzc2lvbik6Cisg
ICAgICAgICogcGFyc2VyL1N5bnRheENoZWNrZXIuaDoKKyAgICAgICAgKEpTQzo6U3ludGF4Q2hl
Y2tlcjo6Y3JlYXRlTG9naWNhbE5vdCk6CisgICAgICAgIChKU0M6OlN5bnRheENoZWNrZXI6OmNy
ZWF0ZVVuYXJ5UGx1cyk6CisgICAgICAgIChKU0M6OlN5bnRheENoZWNrZXI6OmNyZWF0ZVZvaWQp
OgorICAgICAgICAoSlNDOjpTeW50YXhDaGVja2VyOjpjcmVhdGVUaGlzRXhwcik6CisgICAgICAg
IChKU0M6OlN5bnRheENoZWNrZXI6OmNyZWF0ZVN1cGVyRXhwcik6CisgICAgICAgIChKU0M6OlN5
bnRheENoZWNrZXI6OmNyZWF0ZU5ld1RhcmdldEV4cHIpOgorICAgICAgICAoSlNDOjpTeW50YXhD
aGVja2VyOjppc05ld1RhcmdldCk6CisKIDIwMTYtMDQtMjkgIEJlbmphbWluIFBvdWxhaW4gIDxi
ZW5qYW1pbkB3ZWJraXQub3JnPgogCiAgICAgICAgIEV4dGVuZCBtYXRoLXBvdy1zdGFibGUtcmVz
dWx0cy5qcyB0byBnZXQgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgZmFpbHVyZQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2Vu
LmNwcAkocmV2aXNpb24gMjAwMjY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21w
aWxlci9Ob2Rlc0NvZGVnZW4uY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNDgsNyArMTQ4LDcgQEAg
UmVnaXN0ZXJJRCogVGhpc05vZGU6OmVtaXRCeXRlY29kZShCeXRlYwogICAgIGlmIChnZW5lcmF0
b3IuY29uc3RydWN0b3JLaW5kKCkgPT0gQ29uc3RydWN0b3JLaW5kOjpEZXJpdmVkICYmIGdlbmVy
YXRvci5uZWVkc1RvVXBkYXRlQXJyb3dGdW5jdGlvbkNvbnRleHQoKSAmJiBnZW5lcmF0b3IuaXNT
dXBlckNhbGxVc2VkSW5Jbm5lckFycm93RnVuY3Rpb24oKSkKICAgICAgICAgZ2VuZXJhdG9yLmVt
aXRMb2FkVGhpc0Zyb21BcnJvd0Z1bmN0aW9uTGV4aWNhbEVudmlyb25tZW50KCk7CiAKLSAgICBp
ZiAobV9zaG91bGRBbHdheXNFbWl0VERaQ2hlY2sgfHwgZ2VuZXJhdG9yLmNvbnN0cnVjdG9yS2lu
ZCgpID09IENvbnN0cnVjdG9yS2luZDo6RGVyaXZlZCB8fCBnZW5lcmF0b3IuaXNEZXJpdmVkQ29u
c3RydWN0b3JDb250ZXh0KCkpCisgICAgaWYgKGdlbmVyYXRvci5jb25zdHJ1Y3RvcktpbmQoKSA9
PSBDb25zdHJ1Y3RvcktpbmQ6OkRlcml2ZWQgfHwgZ2VuZXJhdG9yLmlzRGVyaXZlZENvbnN0cnVj
dG9yQ29udGV4dCgpKQogICAgICAgICBnZW5lcmF0b3IuZW1pdFREWkNoZWNrKGdlbmVyYXRvci50
aGlzUmVnaXN0ZXIoKSk7CiAKICAgICBpZiAoZHN0ID09IGdlbmVyYXRvci5pZ25vcmVkUmVzdWx0
KCkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0FTVEJ1aWxkZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0FTVEJ1aWxkZXIuaAkocmV2
aXNpb24gMjAwMjY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9BU1RCdWlsZGVy
LmgJKHdvcmtpbmcgY29weSkKQEAgLTE2OCwxMCArMTY4LDEwIEBAIHB1YmxpYzoKICAgICAgICAg
aW5jQ29uc3RhbnRzKCk7CiAgICAgICAgIHJldHVybiBuZXcgKG1fcGFyc2VyQXJlbmEpIFZvaWRO
b2RlKGxvY2F0aW9uLCBleHByKTsKICAgICB9Ci0gICAgRXhwcmVzc2lvbk5vZGUqIGNyZWF0ZVRo
aXNFeHByKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIFRoaXNURFpNb2RlIHRoaXNU
RFpNb2RlKQorICAgIEV4cHJlc3Npb25Ob2RlKiBjcmVhdGVUaGlzRXhwcihjb25zdCBKU1Rva2Vu
TG9jYXRpb24mIGxvY2F0aW9uKQogICAgIHsKICAgICAgICAgdXNlc1RoaXMoKTsKLSAgICAgICAg
cmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkgVGhpc05vZGUobG9jYXRpb24sIHRoaXNURFpNb2Rl
KTsKKyAgICAgICAgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkgVGhpc05vZGUobG9jYXRpb24p
OwogICAgIH0KICAgICBFeHByZXNzaW9uTm9kZSogY3JlYXRlU3VwZXJFeHByKGNvbnN0IEpTVG9r
ZW5Mb2NhdGlvbiYgbG9jYXRpb24pCiAgICAgewpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3BhcnNlci9Ob2RlQ29uc3RydWN0b3JzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3Jp
cHRDb3JlL3BhcnNlci9Ob2RlQ29uc3RydWN0b3JzLmgJKHJldmlzaW9uIDIwMDI2NCkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZUNvbnN0cnVjdG9ycy5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xNTcsOSArMTU3LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgewogICAgIH0KIAot
ICAgIGlubGluZSBUaGlzTm9kZTo6VGhpc05vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2Nh
dGlvbiwgVGhpc1REWk1vZGUgdGhpc1REWk1vZGUpCisgICAgaW5saW5lIFRoaXNOb2RlOjpUaGlz
Tm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uKQogICAgICAgICA6IEV4cHJlc3Np
b25Ob2RlKGxvY2F0aW9uKQotICAgICAgICAsIG1fc2hvdWxkQWx3YXlzRW1pdFREWkNoZWNrKHRo
aXNURFpNb2RlID09IFRoaXNURFpNb2RlOjpBbHdheXNDaGVjaykKICAgICB7CiAgICAgfQogCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5oCShyZXZpc2lvbiAyMDAyNjQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmgJKHdvcmtpbmcgY29weSkKQEAg
LTU0MiwxMiArNTQyLDEwIEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3MgVGhpc05vZGUg
OiBwdWJsaWMgRXhwcmVzc2lvbk5vZGUgewogICAgIHB1YmxpYzoKLSAgICAgICAgVGhpc05vZGUo
Y29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgVGhpc1REWk1vZGUpOworICAgICAgICBUaGlzTm9kZShj
b25zdCBKU1Rva2VuTG9jYXRpb24mKTsKIAogICAgIHByaXZhdGU6CiAgICAgICAgIFJlZ2lzdGVy
SUQqIGVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgb3Zl
cnJpZGU7Ci0KLSAgICAgICAgYm9vbCBtX3Nob3VsZEFsd2F5c0VtaXRURFpDaGVjazsKICAgICB9
OwogCiAgICAgY2xhc3MgU3VwZXJOb2RlIGZpbmFsIDogcHVibGljIEV4cHJlc3Npb25Ob2RlIHsK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5jcHAJKHJldmlzaW9uIDIw
MDI2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMzc1Niw3ICszNzU2LDcgQEAgdGVtcGxhdGUgPGNsYXNzIFRyZWVCdWlsZGVy
PiBUcmVlRXhwcmVzcwogICAgICAgICBuZXh0KCk7CiAgICAgICAgIGlmIChjdXJyZW50U2NvcGUo
KS0+aXNBcnJvd0Z1bmN0aW9uKCkpCiAgICAgICAgICAgICBjdXJyZW50U2NvcGUoKS0+c2V0SW5u
ZXJBcnJvd0Z1bmN0aW9uVXNlc1RoaXMoKTsKLSAgICAgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRl
VGhpc0V4cHIobG9jYXRpb24sIG1fdGhpc1REWk1vZGUpOworICAgICAgICByZXR1cm4gY29udGV4
dC5jcmVhdGVUaGlzRXhwcihsb2NhdGlvbik7CiAgICAgfQogICAgIGNhc2UgSURFTlQ6IHsKICAg
ICBpZGVudGlmaWVyRXhwcmVzc2lvbjoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJz
ZXIvU3ludGF4Q2hlY2tlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9w
YXJzZXIvU3ludGF4Q2hlY2tlci5oCShyZXZpc2lvbiAyMDAyNjQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcGFyc2VyL1N5bnRheENoZWNrZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTU3LDcg
KzE1Nyw3IEBAIHB1YmxpYzoKICAgICBFeHByZXNzaW9uVHlwZSBjcmVhdGVMb2dpY2FsTm90KGNv
bnN0IEpTVG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25UeXBlKSB7IHJldHVybiBVbmFyeUV4cHI7
IH0KICAgICBFeHByZXNzaW9uVHlwZSBjcmVhdGVVbmFyeVBsdXMoY29uc3QgSlNUb2tlbkxvY2F0
aW9uJiwgRXhwcmVzc2lvblR5cGUpIHsgcmV0dXJuIFVuYXJ5RXhwcjsgfQogICAgIEV4cHJlc3Np
b25UeXBlIGNyZWF0ZVZvaWQoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvblR5cGUp
IHsgcmV0dXJuIFVuYXJ5RXhwcjsgfQotICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0ZVRoaXNFeHBy
KGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYsIFRoaXNURFpNb2RlKSB7IHJldHVybiBUaGlzRXhwcjsg
fQorICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0ZVRoaXNFeHByKGNvbnN0IEpTVG9rZW5Mb2NhdGlv
biYpIHsgcmV0dXJuIFRoaXNFeHByOyB9CiAgICAgRXhwcmVzc2lvblR5cGUgY3JlYXRlU3VwZXJF
eHByKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYpIHsgcmV0dXJuIFN1cGVyRXhwcjsgfQogICAgIEV4
cHJlc3Npb25UeXBlIGNyZWF0ZU5ld1RhcmdldEV4cHIoY29uc3QgSlNUb2tlbkxvY2F0aW9uJikg
eyByZXR1cm4gTmV3VGFyZ2V0RXhwcjsgfQogICAgIEFMV0FZU19JTkxJTkUgYm9vbCBpc05ld1Rh
cmdldChFeHByZXNzaW9uVHlwZSB0eXBlKSB7IHJldHVybiB0eXBlID09IE5ld1RhcmdldEV4cHI7
IH0K
</data>
<flag name="review"
          id="301891"
          type_id="1"
          status="-"
          setter="saam"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>277760</attachid>
            <date>2016-04-29 17:07:09 -0700</date>
            <delta_ts>2016-05-22 07:30:45 -0700</delta_ts>
            <desc>patch</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>31724</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMjAwMjY5KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY3IEBA
CisyMDE2LTA0LTI5ICBTYWFtIGJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgorCisgICAgICAg
IFRoaXNURFpNb2RlIGlzIG5vIGxvbmdlciBuZWVkZWQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NzIwOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFRoaXNURFpNb2RlIGlzIG5vIGxvbmdlciBuZWVkZWQg
YmVjYXVzZSB3ZSBoYXZlIENvbnN0cnVjdG9yS2luZAorICAgICAgICBhbmQgRGVyaXZlZENvbnRl
eHRUeXBlLiBUaGUgdmFsdWUgb2YgVGhpc1REWk1vZGUgaXMgc3RyaWN0bHkgbGVzcworICAgICAg
ICBleHByZXNzaXZlIHRoYW4gdGhlIGNvbWJpbmF0aW9uIG9mIHRob3NlIHR3byB2YWx1ZXMuIFdl
IHdlcmUKKyAgICAgICAgdXNpbmcgdGhvc2UgdmFsdWVzIGFueXdheXMsIGFuZCB0aGlzIHBhdGNo
IGp1c3QgbWFrZXMgaXQgb2ZmaWNpYWwKKyAgICAgICAgbXkgcmVtb3ZpbmcgVGhpc1REWk1vZGUu
CisKKyAgICAgICAgKiBieXRlY29kZS9FdmFsQ29kZUNhY2hlLmg6CisgICAgICAgIChKU0M6OkV2
YWxDb2RlQ2FjaGU6OnRyeUdldCk6CisgICAgICAgIChKU0M6OkV2YWxDb2RlQ2FjaGU6OmdldFNs
b3cpOgorICAgICAgICAqIGJ5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwOgorICAgICAgICAo
SlNDOjpUaGlzTm9kZTo6ZW1pdEJ5dGVjb2RlKToKKyAgICAgICAgKiBkZWJ1Z2dlci9EZWJ1Z2dl
ckNhbGxGcmFtZS5jcHA6CisgICAgICAgIChKU0M6OkRlYnVnZ2VyQ2FsbEZyYW1lOjpldmFsdWF0
ZSk6CisgICAgICAgICogaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwOgorICAgICAgICAoSlND
OjpldmFsKToKKyAgICAgICAgKiBwYXJzZXIvQVNUQnVpbGRlci5oOgorICAgICAgICAoSlNDOjpB
U1RCdWlsZGVyOjpjcmVhdGVWb2lkKToKKyAgICAgICAgKEpTQzo6QVNUQnVpbGRlcjo6Y3JlYXRl
VGhpc0V4cHIpOgorICAgICAgICAoSlNDOjpBU1RCdWlsZGVyOjpjcmVhdGVTdXBlckV4cHIpOgor
ICAgICAgICAqIHBhcnNlci9Ob2RlQ29uc3RydWN0b3JzLmg6CisgICAgICAgIChKU0M6OlJlZ0V4
cE5vZGU6OlJlZ0V4cE5vZGUpOgorICAgICAgICAoSlNDOjpUaGlzTm9kZTo6VGhpc05vZGUpOgor
ICAgICAgICAqIHBhcnNlci9Ob2Rlcy5oOgorICAgICAgICAqIHBhcnNlci9QYXJzZXIuY3BwOgor
ICAgICAgICAoSlNDOjpQYXJzZXI8TGV4ZXJUeXBlPjo6bG9nRXJyb3IpOgorICAgICAgICAoSlND
OjpQYXJzZXI8TGV4ZXJUeXBlPjo6UGFyc2VyKToKKyAgICAgICAgKEpTQzo6UGFyc2VyPExleGVy
VHlwZT46OnBhcnNlUHJpbWFyeUV4cHJlc3Npb24pOgorICAgICAgICAqIHBhcnNlci9QYXJzZXIu
aDoKKyAgICAgICAgKEpTQzo6cGFyc2UpOgorICAgICAgICAqIHBhcnNlci9QYXJzZXJNb2Rlcy5o
OgorICAgICAgICAqIHBhcnNlci9Tb3VyY2VDb2RlS2V5Lmg6CisgICAgICAgIChKU0M6OlNvdXJj
ZUNvZGVLZXk6OlNvdXJjZUNvZGVLZXkpOgorICAgICAgICAqIHBhcnNlci9TeW50YXhDaGVja2Vy
Lmg6CisgICAgICAgIChKU0M6OlN5bnRheENoZWNrZXI6OmNyZWF0ZUxvZ2ljYWxOb3QpOgorICAg
ICAgICAoSlNDOjpTeW50YXhDaGVja2VyOjpjcmVhdGVVbmFyeVBsdXMpOgorICAgICAgICAoSlND
OjpTeW50YXhDaGVja2VyOjpjcmVhdGVWb2lkKToKKyAgICAgICAgKEpTQzo6U3ludGF4Q2hlY2tl
cjo6Y3JlYXRlVGhpc0V4cHIpOgorICAgICAgICAoSlNDOjpTeW50YXhDaGVja2VyOjpjcmVhdGVT
dXBlckV4cHIpOgorICAgICAgICAoSlNDOjpTeW50YXhDaGVja2VyOjpjcmVhdGVOZXdUYXJnZXRF
eHByKToKKyAgICAgICAgKEpTQzo6U3ludGF4Q2hlY2tlcjo6aXNOZXdUYXJnZXQpOgorICAgICAg
ICAqIHJ1bnRpbWUvQ29kZUNhY2hlLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUNhY2hlOjpnZXRH
bG9iYWxDb2RlQmxvY2spOgorICAgICAgICAoSlNDOjpDb2RlQ2FjaGU6OmdldFByb2dyYW1Db2Rl
QmxvY2spOgorICAgICAgICAoSlNDOjpDb2RlQ2FjaGU6OmdldEV2YWxDb2RlQmxvY2spOgorICAg
ICAgICAoSlNDOjpDb2RlQ2FjaGU6OmdldE1vZHVsZVByb2dyYW1Db2RlQmxvY2spOgorICAgICAg
ICAqIHJ1bnRpbWUvQ29kZUNhY2hlLmg6CisgICAgICAgICogcnVudGltZS9FeGVjdXRhYmxlLmNw
cDoKKyAgICAgICAgKEpTQzo6RXZhbEV4ZWN1dGFibGU6OmNyZWF0ZSk6CisgICAgICAgICogcnVu
dGltZS9FeGVjdXRhYmxlLmg6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHA6
CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0OjpjcmVhdGVQcm9ncmFtQ29kZUJsb2NrKToK
KyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OmNyZWF0ZUV2YWxDb2RlQmxvY2spOgorICAg
ICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxP
YmplY3Q6OndlYWtSYW5kb21JbnRlZ2VyKToKKyAgICAgICAgKiBydW50aW1lL0pTR2xvYmFsT2Jq
ZWN0RnVuY3Rpb25zLmNwcDoKKyAgICAgICAgKEpTQzo6Z2xvYmFsRnVuY0V2YWwpOgorCiAyMDE2
LTA0LTI5ICBCZW5qYW1pbiBQb3VsYWluICA8YmVuamFtaW5Ad2Via2l0Lm9yZz4KIAogICAgICAg
ICBFeHRlbmQgbWF0aC1wb3ctc3RhYmxlLXJlc3VsdHMuanMgdG8gZ2V0IG1vcmUgaW5mb3JtYXRp
b24gYWJvdXQgdGhlIGZhaWx1cmUKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9FdmFsQ29kZUNhY2hlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0V2YWxDb2RlQ2FjaGUuaAkocmV2aXNpb24gMjAwMjY0KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0V2YWxDb2RlQ2FjaGUuaAkod29ya2luZyBjb3B5KQpAQCAtOTgs
MTcgKzk4LDE2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7
CiAgICAgICAgIH0KICAgICAgICAgCi0gICAgICAgIEV2YWxFeGVjdXRhYmxlKiBnZXRTbG93KEV4
ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBvd25lciwgYm9vbCBpblN0cmljdENvbnRleHQsIFRoaXNU
RFpNb2RlIHRoaXNURFpNb2RlLCBEZXJpdmVkQ29udGV4dFR5cGUgZGVyaXZlZENvbnRleHRUeXBl
LCBib29sIGlzQXJyb3dGdW5jdGlvbkNvbnRleHQsIEV2YWxDb250ZXh0VHlwZSBldmFsQ29udGV4
dFR5cGUsIGNvbnN0IFN0cmluZyYgZXZhbFNvdXJjZSwgSlNTY29wZSogc2NvcGUpCisgICAgICAg
IEV2YWxFeGVjdXRhYmxlKiBnZXRTbG93KEV4ZWNTdGF0ZSogZXhlYywgSlNDZWxsKiBvd25lciwg
Ym9vbCBpblN0cmljdENvbnRleHQsIERlcml2ZWRDb250ZXh0VHlwZSBkZXJpdmVkQ29udGV4dFR5
cGUsIGJvb2wgaXNBcnJvd0Z1bmN0aW9uQ29udGV4dCwgRXZhbENvbnRleHRUeXBlIGV2YWxDb250
ZXh0VHlwZSwgY29uc3QgU3RyaW5nJiBldmFsU291cmNlLCBKU1Njb3BlKiBzY29wZSkKICAgICAg
ICAgewogICAgICAgICAgICAgVmFyaWFibGVFbnZpcm9ubWVudCB2YXJpYWJsZXNVbmRlclREWjsK
ICAgICAgICAgICAgIEpTU2NvcGU6OmNvbGxlY3RWYXJpYWJsZXNVbmRlclREWihzY29wZSwgdmFy
aWFibGVzVW5kZXJURFopOwotICAgICAgICAgICAgRXZhbEV4ZWN1dGFibGUqIGV2YWxFeGVjdXRh
YmxlID0gRXZhbEV4ZWN1dGFibGU6OmNyZWF0ZShleGVjLCBtYWtlU291cmNlKGV2YWxTb3VyY2Up
LCBpblN0cmljdENvbnRleHQsIHRoaXNURFpNb2RlLCBkZXJpdmVkQ29udGV4dFR5cGUsIGlzQXJy
b3dGdW5jdGlvbkNvbnRleHQsIGV2YWxDb250ZXh0VHlwZSwgJnZhcmlhYmxlc1VuZGVyVERaKTsK
KyAgICAgICAgICAgIEV2YWxFeGVjdXRhYmxlKiBldmFsRXhlY3V0YWJsZSA9IEV2YWxFeGVjdXRh
YmxlOjpjcmVhdGUoZXhlYywgbWFrZVNvdXJjZShldmFsU291cmNlKSwgaW5TdHJpY3RDb250ZXh0
LCBkZXJpdmVkQ29udGV4dFR5cGUsIGlzQXJyb3dGdW5jdGlvbkNvbnRleHQsIGV2YWxDb250ZXh0
VHlwZSwgJnZhcmlhYmxlc1VuZGVyVERaKTsKICAgICAgICAgICAgIGlmICghZXZhbEV4ZWN1dGFi
bGUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAKICAgICAgICAgICAgIGlmIChp
c0NhY2hlYWJsZShpblN0cmljdENvbnRleHQsIGV2YWxTb3VyY2UsIHNjb3BlKSAmJiBtX2NhY2hl
TWFwLnNpemUoKSA8IG1heENhY2hlRW50cmllcykgewogICAgICAgICAgICAgICAgIEFTU0VSVCgh
aW5TdHJpY3RDb250ZXh0KTsKLSAgICAgICAgICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKHRo
aXNURFpNb2RlID09IFRoaXNURFpNb2RlOjpDaGVja0lmTmVlZGVkLCAiQWx3YXlzIENoZWNrSWZO
ZWVkZWQgYmVjYXVzZSB0aGUgY2FjaGluZyBpcyBlbmFibGVkIG9ubHkgaW4gdGhlIHNsb3BweSBt
b2RlLiIpOwogICAgICAgICAgICAgICAgIEFTU0VSVF9XSVRIX01FU1NBR0UoZGVyaXZlZENvbnRl
eHRUeXBlID09IERlcml2ZWRDb250ZXh0VHlwZTo6Tm9uZSwgImRlcml2ZWRDb250ZXh0VHlwZSBp
cyBhbHdheXMgTm9uZSBiZWNhdXNlIGNsYXNzIG1ldGhvZHMgYW5kIGNsYXNzIGNvbnN0cnVjdG9y
cyBhcmUgYWx3YXlzIGV2YWx1YXRlZCBhcyB0aGUgc3RyaWN0IGNvZGUuIik7CiAgICAgICAgICAg
ICAgICAgbV9jYWNoZU1hcC5zZXQoQ2FjaGVLZXkoZXZhbFNvdXJjZSwgaXNBcnJvd0Z1bmN0aW9u
Q29udGV4dCksIFdyaXRlQmFycmllcjxFdmFsRXhlY3V0YWJsZT4oZXhlYy0+dm0oKSwgb3duZXIs
IGV2YWxFeGVjdXRhYmxlKSk7CiAgICAgICAgICAgICB9CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rlc0NvZGVnZW4uY3BwCShyZXZpc2lvbiAy
MDAyNjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdl
bi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0OCw3ICsxNDgsNyBAQCBSZWdpc3RlcklEKiBUaGlz
Tm9kZTo6ZW1pdEJ5dGVjb2RlKEJ5dGVjCiAgICAgaWYgKGdlbmVyYXRvci5jb25zdHJ1Y3Rvcktp
bmQoKSA9PSBDb25zdHJ1Y3RvcktpbmQ6OkRlcml2ZWQgJiYgZ2VuZXJhdG9yLm5lZWRzVG9VcGRh
dGVBcnJvd0Z1bmN0aW9uQ29udGV4dCgpICYmIGdlbmVyYXRvci5pc1N1cGVyQ2FsbFVzZWRJbklu
bmVyQXJyb3dGdW5jdGlvbigpKQogICAgICAgICBnZW5lcmF0b3IuZW1pdExvYWRUaGlzRnJvbUFy
cm93RnVuY3Rpb25MZXhpY2FsRW52aXJvbm1lbnQoKTsKIAotICAgIGlmIChtX3Nob3VsZEFsd2F5
c0VtaXRURFpDaGVjayB8fCBnZW5lcmF0b3IuY29uc3RydWN0b3JLaW5kKCkgPT0gQ29uc3RydWN0
b3JLaW5kOjpEZXJpdmVkIHx8IGdlbmVyYXRvci5pc0Rlcml2ZWRDb25zdHJ1Y3RvckNvbnRleHQo
KSkKKyAgICBpZiAoZ2VuZXJhdG9yLmNvbnN0cnVjdG9yS2luZCgpID09IENvbnN0cnVjdG9yS2lu
ZDo6RGVyaXZlZCB8fCBnZW5lcmF0b3IuaXNEZXJpdmVkQ29uc3RydWN0b3JDb250ZXh0KCkpCiAg
ICAgICAgIGdlbmVyYXRvci5lbWl0VERaQ2hlY2soZ2VuZXJhdG9yLnRoaXNSZWdpc3RlcigpKTsK
IAogICAgIGlmIChkc3QgPT0gZ2VuZXJhdG9yLmlnbm9yZWRSZXN1bHQoKSkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlckNhbGxGcmFtZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyQ2FsbEZyYW1lLmNw
cAkocmV2aXNpb24gMjAwMjY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0Rl
YnVnZ2VyQ2FsbEZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTkwLDcgKzE5MCw2IEBAIEpT
VmFsdWUgRGVidWdnZXJDYWxsRnJhbWU6OmV2YWx1YXRlKGNvbnMKICAgICBEZWJ1Z2dlckV2YWxF
bmFibGVyIGV2YWxFbmFibGVyKGNhbGxGcmFtZSk7CiAgICAgVk0mIHZtID0gY2FsbEZyYW1lLT52
bSgpOwogICAgIGF1dG8mIGNvZGVCbG9jayA9ICpjYWxsRnJhbWUtPmNvZGVCbG9jaygpOwotICAg
IFRoaXNURFpNb2RlIHRoaXNURFpNb2RlID0gY29kZUJsb2NrLnVubGlua2VkQ29kZUJsb2NrKCkt
PmNvbnN0cnVjdG9yS2luZCgpID09IENvbnN0cnVjdG9yS2luZDo6RGVyaXZlZCA/IFRoaXNURFpN
b2RlOjpBbHdheXNDaGVjayA6IFRoaXNURFpNb2RlOjpDaGVja0lmTmVlZGVkOwogCiAgICAgRXZh
bENvbnRleHRUeXBlIGV2YWxDb250ZXh0VHlwZTsKICAgICAKQEAgLTIwNCw3ICsyMDMsNyBAQCBK
U1ZhbHVlIERlYnVnZ2VyQ2FsbEZyYW1lOjpldmFsdWF0ZShjb25zCiAgICAgVmFyaWFibGVFbnZp
cm9ubWVudCB2YXJpYWJsZXNVbmRlclREWjsKICAgICBKU1Njb3BlOjpjb2xsZWN0VmFyaWFibGVz
VW5kZXJURFooc2NvcGUoKS0+anNTY29wZSgpLCB2YXJpYWJsZXNVbmRlclREWik7CiAKLSAgICBF
dmFsRXhlY3V0YWJsZSogZXZhbCA9IEV2YWxFeGVjdXRhYmxlOjpjcmVhdGUoY2FsbEZyYW1lLCBt
YWtlU291cmNlKHNjcmlwdCksIGNvZGVCbG9jay5pc1N0cmljdE1vZGUoKSwgdGhpc1REWk1vZGUs
IGNvZGVCbG9jay51bmxpbmtlZENvZGVCbG9jaygpLT5kZXJpdmVkQ29udGV4dFR5cGUoKSwgY29k
ZUJsb2NrLnVubGlua2VkQ29kZUJsb2NrKCktPmlzQXJyb3dGdW5jdGlvbigpLCBldmFsQ29udGV4
dFR5cGUsICZ2YXJpYWJsZXNVbmRlclREWik7CisgICAgRXZhbEV4ZWN1dGFibGUqIGV2YWwgPSBF
dmFsRXhlY3V0YWJsZTo6Y3JlYXRlKGNhbGxGcmFtZSwgbWFrZVNvdXJjZShzY3JpcHQpLCBjb2Rl
QmxvY2suaXNTdHJpY3RNb2RlKCksIGNvZGVCbG9jay51bmxpbmtlZENvZGVCbG9jaygpLT5kZXJp
dmVkQ29udGV4dFR5cGUoKSwgY29kZUJsb2NrLnVubGlua2VkQ29kZUJsb2NrKCktPmlzQXJyb3dG
dW5jdGlvbigpLCBldmFsQ29udGV4dFR5cGUsICZ2YXJpYWJsZXNVbmRlclREWik7CiAgICAgaWYg
KHZtLmV4Y2VwdGlvbigpKSB7CiAgICAgICAgIGV4Y2VwdGlvbiA9IHZtLmV4Y2VwdGlvbigpOwog
ICAgICAgICB2bS5jbGVhckV4Y2VwdGlvbigpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCShyZXZpc2lvbiAyMDAyNjQpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xNzYsMTAgKzE3Niw2IEBAIEpTVmFsdWUgZXZhbChDYWxsRnJhbWUqIGNh
bGxGcmFtZSkKICAgICAgICAgLy8gSWYgdGhlIGxpdGVyYWwgcGFyc2VyIGJhaWxlZCwgaXQgc2hv
dWxkIG5vdCBoYXZlIHRocm93biBleGNlcHRpb25zLgogICAgICAgICBBU1NFUlQoIWNhbGxGcmFt
ZS0+dm0oKS5leGNlcHRpb24oKSk7CiAKLSAgICAgICAgVGhpc1REWk1vZGUgdGhpc1REWk1vZGUg
PSBUaGlzVERaTW9kZTo6Q2hlY2tJZk5lZWRlZDsKLSAgICAgICAgaWYgKGNhbGxlclVubGlua2Vk
Q29kZUJsb2NrLT5jb25zdHJ1Y3RvcktpbmQoKSA9PSBDb25zdHJ1Y3RvcktpbmQ6OkRlcml2ZWQp
Ci0gICAgICAgICAgICB0aGlzVERaTW9kZSA9IFRoaXNURFpNb2RlOjpBbHdheXNDaGVjazsKLQog
ICAgICAgICBEZXJpdmVkQ29udGV4dFR5cGUgZGVyaXZlZENvbnRleHRUeXBlID0gY2FsbGVyVW5s
aW5rZWRDb2RlQmxvY2stPmRlcml2ZWRDb250ZXh0VHlwZSgpOwogICAgICAgICAKICAgICAgICAg
aWYgKCFpc0Fycm93RnVuY3Rpb25Db250ZXh0ICYmIGNhbGxlclVubGlua2VkQ29kZUJsb2NrLT5p
c0NsYXNzQ29udGV4dCgpKSB7CkBAIC0xOTcsNyArMTkzLDcgQEAgSlNWYWx1ZSBldmFsKENhbGxG
cmFtZSogY2FsbEZyYW1lKQogICAgICAgICBlbHNlCiAgICAgICAgICAgICBldmFsQ29udGV4dFR5
cGUgPSBFdmFsQ29udGV4dFR5cGU6Ok5vbmU7CiAKLSAgICAgICAgZXZhbCA9IGNhbGxlckNvZGVC
bG9jay0+ZXZhbENvZGVDYWNoZSgpLmdldFNsb3coY2FsbEZyYW1lLCBjYWxsZXJDb2RlQmxvY2ss
IGNhbGxlckNvZGVCbG9jay0+aXNTdHJpY3RNb2RlKCksIHRoaXNURFpNb2RlLCBkZXJpdmVkQ29u
dGV4dFR5cGUsIGlzQXJyb3dGdW5jdGlvbkNvbnRleHQsIGV2YWxDb250ZXh0VHlwZSwgcHJvZ3Jh
bVNvdXJjZSwgY2FsbGVyU2NvcGVDaGFpbik7CisgICAgICAgIGV2YWwgPSBjYWxsZXJDb2RlQmxv
Y2stPmV2YWxDb2RlQ2FjaGUoKS5nZXRTbG93KGNhbGxGcmFtZSwgY2FsbGVyQ29kZUJsb2NrLCBj
YWxsZXJDb2RlQmxvY2stPmlzU3RyaWN0TW9kZSgpLCBkZXJpdmVkQ29udGV4dFR5cGUsIGlzQXJy
b3dGdW5jdGlvbkNvbnRleHQsIGV2YWxDb250ZXh0VHlwZSwgcHJvZ3JhbVNvdXJjZSwgY2FsbGVy
U2NvcGVDaGFpbik7CiAKICAgICAgICAgaWYgKCFldmFsKQogICAgICAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0FTVEJ1aWxk
ZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL0FTVEJ1aWxk
ZXIuaAkocmV2aXNpb24gMjAwMjY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9B
U1RCdWlsZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTE2OCwxMCArMTY4LDEwIEBAIHB1YmxpYzoK
ICAgICAgICAgaW5jQ29uc3RhbnRzKCk7CiAgICAgICAgIHJldHVybiBuZXcgKG1fcGFyc2VyQXJl
bmEpIFZvaWROb2RlKGxvY2F0aW9uLCBleHByKTsKICAgICB9Ci0gICAgRXhwcmVzc2lvbk5vZGUq
IGNyZWF0ZVRoaXNFeHByKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24sIFRoaXNURFpN
b2RlIHRoaXNURFpNb2RlKQorICAgIEV4cHJlc3Npb25Ob2RlKiBjcmVhdGVUaGlzRXhwcihjb25z
dCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uKQogICAgIHsKICAgICAgICAgdXNlc1RoaXMoKTsK
LSAgICAgICAgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkgVGhpc05vZGUobG9jYXRpb24sIHRo
aXNURFpNb2RlKTsKKyAgICAgICAgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkgVGhpc05vZGUo
bG9jYXRpb24pOwogICAgIH0KICAgICBFeHByZXNzaW9uTm9kZSogY3JlYXRlU3VwZXJFeHByKGNv
bnN0IEpTVG9rZW5Mb2NhdGlvbiYgbG9jYXRpb24pCiAgICAgewpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3BhcnNlci9Ob2RlQ29uc3RydWN0b3JzLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2RlQ29uc3RydWN0b3JzLmgJKHJldmlzaW9uIDIwMDI2
NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZUNvbnN0cnVjdG9ycy5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xNTcsOSArMTU3LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgewog
ICAgIH0KIAotICAgIGlubGluZSBUaGlzTm9kZTo6VGhpc05vZGUoY29uc3QgSlNUb2tlbkxvY2F0
aW9uJiBsb2NhdGlvbiwgVGhpc1REWk1vZGUgdGhpc1REWk1vZGUpCisgICAgaW5saW5lIFRoaXNO
b2RlOjpUaGlzTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uKQogICAgICAgICA6
IEV4cHJlc3Npb25Ob2RlKGxvY2F0aW9uKQotICAgICAgICAsIG1fc2hvdWxkQWx3YXlzRW1pdFRE
WkNoZWNrKHRoaXNURFpNb2RlID09IFRoaXNURFpNb2RlOjpBbHdheXNDaGVjaykKICAgICB7CiAg
ICAgfQogCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5oCShyZXZpc2lvbiAy
MDAyNjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTU0MiwxMiArNTQyLDEwIEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3Mg
VGhpc05vZGUgOiBwdWJsaWMgRXhwcmVzc2lvbk5vZGUgewogICAgIHB1YmxpYzoKLSAgICAgICAg
VGhpc05vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgVGhpc1REWk1vZGUpOworICAgICAgICBU
aGlzTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24mKTsKIAogICAgIHByaXZhdGU6CiAgICAgICAg
IFJlZ2lzdGVySUQqIGVtaXRCeXRlY29kZShCeXRlY29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQq
ID0gMCkgb3ZlcnJpZGU7Ci0KLSAgICAgICAgYm9vbCBtX3Nob3VsZEFsd2F5c0VtaXRURFpDaGVj
azsKICAgICB9OwogCiAgICAgY2xhc3MgU3VwZXJOb2RlIGZpbmFsIDogcHVibGljIEV4cHJlc3Np
b25Ob2RlIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5jcHAJKHJl
dmlzaW9uIDIwMDI2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTkxLDcgKzE5MSw3IEBAIHZvaWQgUGFyc2VyPExleGVyVHlw
ZT46OmxvZ0Vycm9yKGJvb2wgc2gKIH0KIAogdGVtcGxhdGUgPHR5cGVuYW1lIExleGVyVHlwZT4K
LVBhcnNlcjxMZXhlclR5cGU+OjpQYXJzZXIoVk0qIHZtLCBjb25zdCBTb3VyY2VDb2RlJiBzb3Vy
Y2UsIEpTUGFyc2VyQnVpbHRpbk1vZGUgYnVpbHRpbk1vZGUsIEpTUGFyc2VyU3RyaWN0TW9kZSBz
dHJpY3RNb2RlLCBTb3VyY2VQYXJzZU1vZGUgcGFyc2VNb2RlLCBTdXBlckJpbmRpbmcgc3VwZXJC
aW5kaW5nLCBDb25zdHJ1Y3RvcktpbmQgZGVmYXVsdENvbnN0cnVjdG9yS2luZCwgVGhpc1REWk1v
ZGUgdGhpc1REWk1vZGUsIERlcml2ZWRDb250ZXh0VHlwZSBkZXJpdmVkQ29udGV4dFR5cGUsIGJv
b2wgaXNFdmFsQ29udGV4dCwgRXZhbENvbnRleHRUeXBlIGV2YWxDb250ZXh0VHlwZSkKK1BhcnNl
cjxMZXhlclR5cGU+OjpQYXJzZXIoVk0qIHZtLCBjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2UsIEpT
UGFyc2VyQnVpbHRpbk1vZGUgYnVpbHRpbk1vZGUsIEpTUGFyc2VyU3RyaWN0TW9kZSBzdHJpY3RN
b2RlLCBTb3VyY2VQYXJzZU1vZGUgcGFyc2VNb2RlLCBTdXBlckJpbmRpbmcgc3VwZXJCaW5kaW5n
LCBDb25zdHJ1Y3RvcktpbmQgZGVmYXVsdENvbnN0cnVjdG9yS2luZCwgRGVyaXZlZENvbnRleHRU
eXBlIGRlcml2ZWRDb250ZXh0VHlwZSwgYm9vbCBpc0V2YWxDb250ZXh0LCBFdmFsQ29udGV4dFR5
cGUgZXZhbENvbnRleHRUeXBlKQogICAgIDogbV92bSh2bSkKICAgICAsIG1fc291cmNlKCZzb3Vy
Y2UpCiAgICAgLCBtX2hhc1N0YWNrT3ZlcmZsb3coZmFsc2UpCkBAIC0yMDIsNyArMjAyLDYgQEAg
UGFyc2VyPExleGVyVHlwZT46OlBhcnNlcihWTSogdm0sIGNvbnN0IAogICAgICwgbV9wYXJzaW5n
QnVpbHRpbihidWlsdGluTW9kZSA9PSBKU1BhcnNlckJ1aWx0aW5Nb2RlOjpCdWlsdGluKQogICAg
ICwgbV9zdXBlckJpbmRpbmcoc3VwZXJCaW5kaW5nKQogICAgICwgbV9kZWZhdWx0Q29uc3RydWN0
b3JLaW5kKGRlZmF1bHRDb25zdHJ1Y3RvcktpbmQpCi0gICAgLCBtX3RoaXNURFpNb2RlKHRoaXNU
RFpNb2RlKQogICAgICwgbV9pbW1lZGlhdGVQYXJlbnRBbGxvd3NGdW5jdGlvbkRlY2xhcmF0aW9u
SW5TdGF0ZW1lbnQoZmFsc2UpCiB7CiAgICAgbV9sZXhlciA9IHN0ZDo6bWFrZV91bmlxdWU8TGV4
ZXJUeXBlPih2bSwgYnVpbHRpbk1vZGUpOwpAQCAtMzc1Niw3ICszNzU1LDcgQEAgdGVtcGxhdGUg
PGNsYXNzIFRyZWVCdWlsZGVyPiBUcmVlRXhwcmVzcwogICAgICAgICBuZXh0KCk7CiAgICAgICAg
IGlmIChjdXJyZW50U2NvcGUoKS0+aXNBcnJvd0Z1bmN0aW9uKCkpCiAgICAgICAgICAgICBjdXJy
ZW50U2NvcGUoKS0+c2V0SW5uZXJBcnJvd0Z1bmN0aW9uVXNlc1RoaXMoKTsKLSAgICAgICAgcmV0
dXJuIGNvbnRleHQuY3JlYXRlVGhpc0V4cHIobG9jYXRpb24sIG1fdGhpc1REWk1vZGUpOworICAg
ICAgICByZXR1cm4gY29udGV4dC5jcmVhdGVUaGlzRXhwcihsb2NhdGlvbik7CiAgICAgfQogICAg
IGNhc2UgSURFTlQ6IHsKICAgICBpZGVudGlmaWVyRXhwcmVzc2lvbjoKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuaAkocmV2aXNpb24gMjAwMjY0KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuaAkod29ya2luZyBjb3B5KQpAQCAtODE0LDcgKzgx
NCw3IEBAIGNsYXNzIFBhcnNlciB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiAKIHB1
YmxpYzoKLSAgICBQYXJzZXIoVk0qLCBjb25zdCBTb3VyY2VDb2RlJiwgSlNQYXJzZXJCdWlsdGlu
TW9kZSwgSlNQYXJzZXJTdHJpY3RNb2RlLCBTb3VyY2VQYXJzZU1vZGUsIFN1cGVyQmluZGluZywg
Q29uc3RydWN0b3JLaW5kIGRlZmF1bHRDb25zdHJ1Y3RvcktpbmQgPSBDb25zdHJ1Y3RvcktpbmQ6
Ok5vbmUsIFRoaXNURFpNb2RlID0gVGhpc1REWk1vZGU6OkNoZWNrSWZOZWVkZWQsIERlcml2ZWRD
b250ZXh0VHlwZSA9IERlcml2ZWRDb250ZXh0VHlwZTo6Tm9uZSwgYm9vbCBpc0V2YWxDb250ZXh0
ID0gZmFsc2UsIEV2YWxDb250ZXh0VHlwZSA9IEV2YWxDb250ZXh0VHlwZTo6Tm9uZSk7CisgICAg
UGFyc2VyKFZNKiwgY29uc3QgU291cmNlQ29kZSYsIEpTUGFyc2VyQnVpbHRpbk1vZGUsIEpTUGFy
c2VyU3RyaWN0TW9kZSwgU291cmNlUGFyc2VNb2RlLCBTdXBlckJpbmRpbmcsIENvbnN0cnVjdG9y
S2luZCBkZWZhdWx0Q29uc3RydWN0b3JLaW5kID0gQ29uc3RydWN0b3JLaW5kOjpOb25lLCBEZXJp
dmVkQ29udGV4dFR5cGUgPSBEZXJpdmVkQ29udGV4dFR5cGU6Ok5vbmUsIGJvb2wgaXNFdmFsQ29u
dGV4dCA9IGZhbHNlLCBFdmFsQ29udGV4dFR5cGUgPSBFdmFsQ29udGV4dFR5cGU6Ok5vbmUpOwog
ICAgIH5QYXJzZXIoKTsKIAogICAgIHRlbXBsYXRlIDxjbGFzcyBQYXJzZWROb2RlPgpAQCAtMTU3
NSw3ICsxNTc1LDYgQEAgcHJpdmF0ZToKICAgICBib29sIG1fcGFyc2luZ0J1aWx0aW47CiAgICAg
U3VwZXJCaW5kaW5nIG1fc3VwZXJCaW5kaW5nOwogICAgIENvbnN0cnVjdG9yS2luZCBtX2RlZmF1
bHRDb25zdHJ1Y3RvcktpbmQ7Ci0gICAgVGhpc1REWk1vZGUgbV90aGlzVERaTW9kZTsKICAgICBW
YXJpYWJsZUVudmlyb25tZW50IG1fdmFyRGVjbGFyYXRpb25zOwogICAgIERlY2xhcmF0aW9uU3Rh
Y2tzOjpGdW5jdGlvblN0YWNrIG1fZnVuY0RlY2xhcmF0aW9uczsKICAgICBVbmlxdWVkU3RyaW5n
SW1wbFB0clNldCBtX3Nsb3BweU1vZGVIb2lzdGVkRnVuY3Rpb25zOwpAQCAtMTcwMywxMiArMTcw
MiwxMSBAQCBzdGQ6OnVuaXF1ZV9wdHI8UGFyc2VkTm9kZT4gcGFyc2UoCiAgICAgY29uc3QgSWRl
bnRpZmllciYgbmFtZSwgSlNQYXJzZXJCdWlsdGluTW9kZSBidWlsdGluTW9kZSwKICAgICBKU1Bh
cnNlclN0cmljdE1vZGUgc3RyaWN0TW9kZSwgU291cmNlUGFyc2VNb2RlIHBhcnNlTW9kZSwgU3Vw
ZXJCaW5kaW5nIHN1cGVyQmluZGluZywKICAgICBQYXJzZXJFcnJvciYgZXJyb3IsIEpTVGV4dFBv
c2l0aW9uKiBwb3NpdGlvbkJlZm9yZUxhc3ROZXdsaW5lID0gbnVsbHB0ciwKLSAgICBDb25zdHJ1
Y3RvcktpbmQgZGVmYXVsdENvbnN0cnVjdG9yS2luZCA9IENvbnN0cnVjdG9yS2luZDo6Tm9uZSwg
VGhpc1REWk1vZGUgdGhpc1REWk1vZGUgPSBUaGlzVERaTW9kZTo6Q2hlY2tJZk5lZWRlZCwgCi0g
ICAgRGVyaXZlZENvbnRleHRUeXBlIGRlcml2ZWRDb250ZXh0VHlwZSA9IERlcml2ZWRDb250ZXh0
VHlwZTo6Tm9uZSwgRXZhbENvbnRleHRUeXBlIGV2YWxDb250ZXh0VHlwZSA9IEV2YWxDb250ZXh0
VHlwZTo6Tm9uZSkKKyAgICBDb25zdHJ1Y3RvcktpbmQgZGVmYXVsdENvbnN0cnVjdG9yS2luZCA9
IENvbnN0cnVjdG9yS2luZDo6Tm9uZSwgRGVyaXZlZENvbnRleHRUeXBlIGRlcml2ZWRDb250ZXh0
VHlwZSA9IERlcml2ZWRDb250ZXh0VHlwZTo6Tm9uZSwgRXZhbENvbnRleHRUeXBlIGV2YWxDb250
ZXh0VHlwZSA9IEV2YWxDb250ZXh0VHlwZTo6Tm9uZSkKIHsKICAgICBBU1NFUlQoIXNvdXJjZS5w
cm92aWRlcigpLT5zb3VyY2UoKS5pc051bGwoKSk7CiAgICAgaWYgKHNvdXJjZS5wcm92aWRlcigp
LT5zb3VyY2UoKS5pczhCaXQoKSkgewotICAgICAgICBQYXJzZXI8TGV4ZXI8TENoYXI+PiBwYXJz
ZXIodm0sIHNvdXJjZSwgYnVpbHRpbk1vZGUsIHN0cmljdE1vZGUsIHBhcnNlTW9kZSwgc3VwZXJC
aW5kaW5nLCBkZWZhdWx0Q29uc3RydWN0b3JLaW5kLCB0aGlzVERaTW9kZSwgZGVyaXZlZENvbnRl
eHRUeXBlLCBpc0V2YWxOb2RlPFBhcnNlZE5vZGU+KCksIGV2YWxDb250ZXh0VHlwZSk7CisgICAg
ICAgIFBhcnNlcjxMZXhlcjxMQ2hhcj4+IHBhcnNlcih2bSwgc291cmNlLCBidWlsdGluTW9kZSwg
c3RyaWN0TW9kZSwgcGFyc2VNb2RlLCBzdXBlckJpbmRpbmcsIGRlZmF1bHRDb25zdHJ1Y3Rvcktp
bmQsIGRlcml2ZWRDb250ZXh0VHlwZSwgaXNFdmFsTm9kZTxQYXJzZWROb2RlPigpLCBldmFsQ29u
dGV4dFR5cGUpOwogICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8UGFyc2VkTm9kZT4gcmVzdWx0ID0g
cGFyc2VyLnBhcnNlPFBhcnNlZE5vZGU+KGVycm9yLCBuYW1lLCBwYXJzZU1vZGUpOwogICAgICAg
ICBpZiAocG9zaXRpb25CZWZvcmVMYXN0TmV3bGluZSkKICAgICAgICAgICAgICpwb3NpdGlvbkJl
Zm9yZUxhc3ROZXdsaW5lID0gcGFyc2VyLnBvc2l0aW9uQmVmb3JlTGFzdE5ld2xpbmUoKTsKQEAg
LTE3MTksNyArMTcxNyw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxQYXJzZWROb2RlPiBwYXJzZSgKICAg
ICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgQVNTRVJUX1dJVEhfTUVTU0FHRShkZWZh
dWx0Q29uc3RydWN0b3JLaW5kID09IENvbnN0cnVjdG9yS2luZDo6Tm9uZSwgIkJ1aWx0aW5FeGVj
dXRhYmxlczo6Y3JlYXRlRGVmYXVsdENvbnN0cnVjdG9yIHNob3VsZCBhbHdheXMgdXNlIGEgOC1i
aXQgc3RyaW5nIik7Ci0gICAgUGFyc2VyPExleGVyPFVDaGFyPj4gcGFyc2VyKHZtLCBzb3VyY2Us
IGJ1aWx0aW5Nb2RlLCBzdHJpY3RNb2RlLCBwYXJzZU1vZGUsIHN1cGVyQmluZGluZywgZGVmYXVs
dENvbnN0cnVjdG9yS2luZCwgdGhpc1REWk1vZGUsIGRlcml2ZWRDb250ZXh0VHlwZSwgaXNFdmFs
Tm9kZTxQYXJzZWROb2RlPigpLCBldmFsQ29udGV4dFR5cGUpOworICAgIFBhcnNlcjxMZXhlcjxV
Q2hhcj4+IHBhcnNlcih2bSwgc291cmNlLCBidWlsdGluTW9kZSwgc3RyaWN0TW9kZSwgcGFyc2VN
b2RlLCBzdXBlckJpbmRpbmcsIGRlZmF1bHRDb25zdHJ1Y3RvcktpbmQsIGRlcml2ZWRDb250ZXh0
VHlwZSwgaXNFdmFsTm9kZTxQYXJzZWROb2RlPigpLCBldmFsQ29udGV4dFR5cGUpOwogICAgIHN0
ZDo6dW5pcXVlX3B0cjxQYXJzZWROb2RlPiByZXN1bHQgPSBwYXJzZXIucGFyc2U8UGFyc2VkTm9k
ZT4oZXJyb3IsIG5hbWUsIHBhcnNlTW9kZSk7CiAgICAgaWYgKHBvc2l0aW9uQmVmb3JlTGFzdE5l
d2xpbmUpCiAgICAgICAgICpwb3NpdGlvbkJlZm9yZUxhc3ROZXdsaW5lID0gcGFyc2VyLnBvc2l0
aW9uQmVmb3JlTGFzdE5ld2xpbmUoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJz
ZXIvUGFyc2VyTW9kZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFy
c2VyL1BhcnNlck1vZGVzLmgJKHJldmlzaW9uIDIwMDI2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9wYXJzZXIvUGFyc2VyTW9kZXMuaAkod29ya2luZyBjb3B5KQpAQCAtMzcsNyArMzcsNiBA
QCBlbnVtIGNsYXNzIEpTUGFyc2VyQ29kZVR5cGUgeyBQcm9ncmFtLCBGCiAKIGVudW0gY2xhc3Mg
Q29uc3RydWN0b3JLaW5kIHsgTm9uZSwgQmFzZSwgRGVyaXZlZCB9OwogZW51bSBjbGFzcyBTdXBl
ckJpbmRpbmcgeyBOZWVkZWQsIE5vdE5lZWRlZCB9OwotZW51bSBjbGFzcyBUaGlzVERaTW9kZSB7
IEFsd2F5c0NoZWNrLCBDaGVja0lmTmVlZGVkIH07CiAKIGVudW0gUHJvZmlsZXJNb2RlIHsgUHJv
ZmlsZXJPZmYsIFByb2ZpbGVyT24gfTsKIGVudW0gRGVidWdnZXJNb2RlIHsgRGVidWdnZXJPZmYs
IERlYnVnZ2VyT24gfTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU291cmNl
Q29kZUtleS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU291
cmNlQ29kZUtleS5oCShyZXZpc2lvbiAyMDAyNjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cGFyc2VyL1NvdXJjZUNvZGVLZXkuaAkod29ya2luZyBjb3B5KQpAQCAtNDEsMTAgKzQxLDEwIEBA
IHB1YmxpYzoKICAgICB7CiAgICAgfQogCi0gICAgU291cmNlQ29kZUtleShjb25zdCBTb3VyY2VD
b2RlJiBzb3VyY2VDb2RlLCBjb25zdCBTdHJpbmcmIG5hbWUsIENvZGVUeXBlIGNvZGVUeXBlLCBK
U1BhcnNlckJ1aWx0aW5Nb2RlIGJ1aWx0aW5Nb2RlLCBKU1BhcnNlclN0cmljdE1vZGUgc3RyaWN0
TW9kZSwgVGhpc1REWk1vZGUgdGhpc1REWk1vZGUgPSBUaGlzVERaTW9kZTo6Q2hlY2tJZk5lZWRl
ZCkKKyAgICBTb3VyY2VDb2RlS2V5KGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZUNvZGUsIGNvbnN0
IFN0cmluZyYgbmFtZSwgQ29kZVR5cGUgY29kZVR5cGUsIEpTUGFyc2VyQnVpbHRpbk1vZGUgYnVp
bHRpbk1vZGUsIEpTUGFyc2VyU3RyaWN0TW9kZSBzdHJpY3RNb2RlKQogICAgICAgICA6IG1fc291
cmNlQ29kZShzb3VyY2VDb2RlKQogICAgICAgICAsIG1fbmFtZShuYW1lKQotICAgICAgICAsIG1f
ZmxhZ3MoKHN0YXRpY19jYXN0PHVuc2lnbmVkPihjb2RlVHlwZSkgPDwgMykgfCAoc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KGJ1aWx0aW5Nb2RlKSA8PCAyKSB8IChzdGF0aWNfY2FzdDx1bnNpZ25lZD4o
c3RyaWN0TW9kZSkgPDwgMSkgfCBzdGF0aWNfY2FzdDx1bnNpZ25lZD4odGhpc1REWk1vZGUpKQor
ICAgICAgICAsIG1fZmxhZ3MoKHN0YXRpY19jYXN0PHVuc2lnbmVkPihjb2RlVHlwZSkgPDwgMikg
fCAoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGJ1aWx0aW5Nb2RlKSA8PCAxKSB8IHN0YXRpY19jYXN0
PHVuc2lnbmVkPihzdHJpY3RNb2RlKSkKICAgICAgICAgLCBtX2hhc2goc291cmNlQ29kZS5oYXNo
KCkpCiAgICAgewogICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU3lu
dGF4Q2hlY2tlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIv
U3ludGF4Q2hlY2tlci5oCShyZXZpc2lvbiAyMDAyNjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvcGFyc2VyL1N5bnRheENoZWNrZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMTU3LDcgKzE1Nyw3
IEBAIHB1YmxpYzoKICAgICBFeHByZXNzaW9uVHlwZSBjcmVhdGVMb2dpY2FsTm90KGNvbnN0IEpT
VG9rZW5Mb2NhdGlvbiYsIEV4cHJlc3Npb25UeXBlKSB7IHJldHVybiBVbmFyeUV4cHI7IH0KICAg
ICBFeHByZXNzaW9uVHlwZSBjcmVhdGVVbmFyeVBsdXMoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwg
RXhwcmVzc2lvblR5cGUpIHsgcmV0dXJuIFVuYXJ5RXhwcjsgfQogICAgIEV4cHJlc3Npb25UeXBl
IGNyZWF0ZVZvaWQoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvblR5cGUpIHsgcmV0
dXJuIFVuYXJ5RXhwcjsgfQotICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0ZVRoaXNFeHByKGNvbnN0
IEpTVG9rZW5Mb2NhdGlvbiYsIFRoaXNURFpNb2RlKSB7IHJldHVybiBUaGlzRXhwcjsgfQorICAg
IEV4cHJlc3Npb25UeXBlIGNyZWF0ZVRoaXNFeHByKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYpIHsg
cmV0dXJuIFRoaXNFeHByOyB9CiAgICAgRXhwcmVzc2lvblR5cGUgY3JlYXRlU3VwZXJFeHByKGNv
bnN0IEpTVG9rZW5Mb2NhdGlvbiYpIHsgcmV0dXJuIFN1cGVyRXhwcjsgfQogICAgIEV4cHJlc3Np
b25UeXBlIGNyZWF0ZU5ld1RhcmdldEV4cHIoY29uc3QgSlNUb2tlbkxvY2F0aW9uJikgeyByZXR1
cm4gTmV3VGFyZ2V0RXhwcjsgfQogICAgIEFMV0FZU19JTkxJTkUgYm9vbCBpc05ld1RhcmdldChF
eHByZXNzaW9uVHlwZSB0eXBlKSB7IHJldHVybiB0eXBlID09IE5ld1RhcmdldEV4cHI7IH0KSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvZGVDYWNoZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29kZUNhY2hlLmNwcAkocmV2aXNp
b24gMjAwMjY0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29kZUNhY2hlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtODEsOSArODEsOSBAQCB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgQ2Fj
aGVUeXBlczxVbmxpbmtlZE1vCiB9OwogCiB0ZW1wbGF0ZSA8Y2xhc3MgVW5saW5rZWRDb2RlQmxv
Y2tUeXBlLCBjbGFzcyBFeGVjdXRhYmxlVHlwZT4KLVVubGlua2VkQ29kZUJsb2NrVHlwZSogQ29k
ZUNhY2hlOjpnZXRHbG9iYWxDb2RlQmxvY2soVk0mIHZtLCBFeGVjdXRhYmxlVHlwZSogZXhlY3V0
YWJsZSwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBKU1BhcnNlckJ1aWx0aW5Nb2RlIGJ1aWx0
aW5Nb2RlLCBKU1BhcnNlclN0cmljdE1vZGUgc3RyaWN0TW9kZSwgVGhpc1REWk1vZGUgdGhpc1RE
Wk1vZGUsIERlYnVnZ2VyTW9kZSBkZWJ1Z2dlck1vZGUsIFByb2ZpbGVyTW9kZSBwcm9maWxlck1v
ZGUsIFBhcnNlckVycm9yJiBlcnJvciwgRXZhbENvbnRleHRUeXBlIGV2YWxDb250ZXh0VHlwZSwg
Y29uc3QgVmFyaWFibGVFbnZpcm9ubWVudCogdmFyaWFibGVzVW5kZXJURFopCitVbmxpbmtlZENv
ZGVCbG9ja1R5cGUqIENvZGVDYWNoZTo6Z2V0R2xvYmFsQ29kZUJsb2NrKFZNJiB2bSwgRXhlY3V0
YWJsZVR5cGUqIGV4ZWN1dGFibGUsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgSlNQYXJzZXJC
dWlsdGluTW9kZSBidWlsdGluTW9kZSwgSlNQYXJzZXJTdHJpY3RNb2RlIHN0cmljdE1vZGUsIERl
YnVnZ2VyTW9kZSBkZWJ1Z2dlck1vZGUsIFByb2ZpbGVyTW9kZSBwcm9maWxlck1vZGUsIFBhcnNl
ckVycm9yJiBlcnJvciwgRXZhbENvbnRleHRUeXBlIGV2YWxDb250ZXh0VHlwZSwgY29uc3QgVmFy
aWFibGVFbnZpcm9ubWVudCogdmFyaWFibGVzVW5kZXJURFopCiB7Ci0gICAgU291cmNlQ29kZUtl
eSBrZXkgPSBTb3VyY2VDb2RlS2V5KHNvdXJjZSwgU3RyaW5nKCksIENhY2hlVHlwZXM8VW5saW5r
ZWRDb2RlQmxvY2tUeXBlPjo6Y29kZVR5cGUsIGJ1aWx0aW5Nb2RlLCBzdHJpY3RNb2RlLCB0aGlz
VERaTW9kZSk7CisgICAgU291cmNlQ29kZUtleSBrZXkgPSBTb3VyY2VDb2RlS2V5KHNvdXJjZSwg
U3RyaW5nKCksIENhY2hlVHlwZXM8VW5saW5rZWRDb2RlQmxvY2tUeXBlPjo6Y29kZVR5cGUsIGJ1
aWx0aW5Nb2RlLCBzdHJpY3RNb2RlKTsKICAgICBTb3VyY2VDb2RlVmFsdWUqIGNhY2hlID0gbV9z
b3VyY2VDb2RlLmZpbmRDYWNoZUFuZFVwZGF0ZUFnZShrZXkpOwogICAgIC8vIEZJWE1FOiBXZSBz
aG91bGQgZG8gc29tZXRoaW5nIHNtYXJ0IGZvciBURFogaW5zdGVhZCBvZiBqdXN0IGRpc2FibGlu
ZyBjYWNoaW5nLgogICAgIC8vIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xNTQwMTAKQEAgLTEwMyw3ICsxMDMsNyBAQCBVbmxpbmtlZENvZGVCbG9ja1R5cGUqIENvZGVD
YWNoZTo6Z2V0R2xvCiAgICAgdHlwZWRlZiB0eXBlbmFtZSBDYWNoZVR5cGVzPFVubGlua2VkQ29k
ZUJsb2NrVHlwZT46OlJvb3ROb2RlIFJvb3ROb2RlOwogICAgIERlcml2ZWRDb250ZXh0VHlwZSBk
ZXJpdmVkQ29udGV4dFR5cGUgPSBleGVjdXRhYmxlLT5kZXJpdmVkQ29udGV4dFR5cGUoKTsKICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8Um9vdE5vZGU+IHJvb3ROb2RlID0gcGFyc2U8Um9vdE5vZGU+KAot
ICAgICAgICAmdm0sIHNvdXJjZSwgSWRlbnRpZmllcigpLCBidWlsdGluTW9kZSwgc3RyaWN0TW9k
ZSwgQ2FjaGVUeXBlczxVbmxpbmtlZENvZGVCbG9ja1R5cGU+OjpwYXJzZU1vZGUsIFN1cGVyQmlu
ZGluZzo6Tm90TmVlZGVkLCBlcnJvciwgbnVsbHB0ciwgQ29uc3RydWN0b3JLaW5kOjpOb25lLCB0
aGlzVERaTW9kZSwgZGVyaXZlZENvbnRleHRUeXBlLCBldmFsQ29udGV4dFR5cGUpOworICAgICAg
ICAmdm0sIHNvdXJjZSwgSWRlbnRpZmllcigpLCBidWlsdGluTW9kZSwgc3RyaWN0TW9kZSwgQ2Fj
aGVUeXBlczxVbmxpbmtlZENvZGVCbG9ja1R5cGU+OjpwYXJzZU1vZGUsIFN1cGVyQmluZGluZzo6
Tm90TmVlZGVkLCBlcnJvciwgbnVsbHB0ciwgQ29uc3RydWN0b3JLaW5kOjpOb25lLCBkZXJpdmVk
Q29udGV4dFR5cGUsIGV2YWxDb250ZXh0VHlwZSk7CiAgICAgaWYgKCFyb290Tm9kZSkKICAgICAg
ICAgcmV0dXJuIG51bGxwdHI7CiAKQEAgLTEzNSwxOCArMTM1LDE4IEBAIFVubGlua2VkQ29kZUJs
b2NrVHlwZSogQ29kZUNhY2hlOjpnZXRHbG8KIFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jayogQ29k
ZUNhY2hlOjpnZXRQcm9ncmFtQ29kZUJsb2NrKFZNJiB2bSwgUHJvZ3JhbUV4ZWN1dGFibGUqIGV4
ZWN1dGFibGUsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgSlNQYXJzZXJCdWlsdGluTW9kZSBi
dWlsdGluTW9kZSwgSlNQYXJzZXJTdHJpY3RNb2RlIHN0cmljdE1vZGUsIERlYnVnZ2VyTW9kZSBk
ZWJ1Z2dlck1vZGUsIFByb2ZpbGVyTW9kZSBwcm9maWxlck1vZGUsIFBhcnNlckVycm9yJiBlcnJv
cikKIHsKICAgICBWYXJpYWJsZUVudmlyb25tZW50IGVtcHR5UGFyZW50VERaVmFyaWFibGVzOwot
ICAgIHJldHVybiBnZXRHbG9iYWxDb2RlQmxvY2s8VW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrPih2
bSwgZXhlY3V0YWJsZSwgc291cmNlLCBidWlsdGluTW9kZSwgc3RyaWN0TW9kZSwgVGhpc1REWk1v
ZGU6OkNoZWNrSWZOZWVkZWQsIGRlYnVnZ2VyTW9kZSwgcHJvZmlsZXJNb2RlLCBlcnJvciwgRXZh
bENvbnRleHRUeXBlOjpOb25lLCAmZW1wdHlQYXJlbnRURFpWYXJpYWJsZXMpOworICAgIHJldHVy
biBnZXRHbG9iYWxDb2RlQmxvY2s8VW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrPih2bSwgZXhlY3V0
YWJsZSwgc291cmNlLCBidWlsdGluTW9kZSwgc3RyaWN0TW9kZSwgZGVidWdnZXJNb2RlLCBwcm9m
aWxlck1vZGUsIGVycm9yLCBFdmFsQ29udGV4dFR5cGU6Ok5vbmUsICZlbXB0eVBhcmVudFREWlZh
cmlhYmxlcyk7CiB9CiAKLVVubGlua2VkRXZhbENvZGVCbG9jayogQ29kZUNhY2hlOjpnZXRFdmFs
Q29kZUJsb2NrKFZNJiB2bSwgRXZhbEV4ZWN1dGFibGUqIGV4ZWN1dGFibGUsIGNvbnN0IFNvdXJj
ZUNvZGUmIHNvdXJjZSwgSlNQYXJzZXJCdWlsdGluTW9kZSBidWlsdGluTW9kZSwgSlNQYXJzZXJT
dHJpY3RNb2RlIHN0cmljdE1vZGUsIFRoaXNURFpNb2RlIHRoaXNURFpNb2RlLCBEZWJ1Z2dlck1v
ZGUgZGVidWdnZXJNb2RlLCBQcm9maWxlck1vZGUgcHJvZmlsZXJNb2RlLCBQYXJzZXJFcnJvciYg
ZXJyb3IsIEV2YWxDb250ZXh0VHlwZSBldmFsQ29udGV4dFR5cGUsIGNvbnN0IFZhcmlhYmxlRW52
aXJvbm1lbnQqIHZhcmlhYmxlc1VuZGVyVERaKQorVW5saW5rZWRFdmFsQ29kZUJsb2NrKiBDb2Rl
Q2FjaGU6OmdldEV2YWxDb2RlQmxvY2soVk0mIHZtLCBFdmFsRXhlY3V0YWJsZSogZXhlY3V0YWJs
ZSwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBKU1BhcnNlckJ1aWx0aW5Nb2RlIGJ1aWx0aW5N
b2RlLCBKU1BhcnNlclN0cmljdE1vZGUgc3RyaWN0TW9kZSwgRGVidWdnZXJNb2RlIGRlYnVnZ2Vy
TW9kZSwgUHJvZmlsZXJNb2RlIHByb2ZpbGVyTW9kZSwgUGFyc2VyRXJyb3ImIGVycm9yLCBFdmFs
Q29udGV4dFR5cGUgZXZhbENvbnRleHRUeXBlLCBjb25zdCBWYXJpYWJsZUVudmlyb25tZW50KiB2
YXJpYWJsZXNVbmRlclREWikKIHsKLSAgICByZXR1cm4gZ2V0R2xvYmFsQ29kZUJsb2NrPFVubGlu
a2VkRXZhbENvZGVCbG9jaz4odm0sIGV4ZWN1dGFibGUsIHNvdXJjZSwgYnVpbHRpbk1vZGUsIHN0
cmljdE1vZGUsIHRoaXNURFpNb2RlLCBkZWJ1Z2dlck1vZGUsIHByb2ZpbGVyTW9kZSwgZXJyb3Is
IGV2YWxDb250ZXh0VHlwZSwgdmFyaWFibGVzVW5kZXJURFopOworICAgIHJldHVybiBnZXRHbG9i
YWxDb2RlQmxvY2s8VW5saW5rZWRFdmFsQ29kZUJsb2NrPih2bSwgZXhlY3V0YWJsZSwgc291cmNl
LCBidWlsdGluTW9kZSwgc3RyaWN0TW9kZSwgZGVidWdnZXJNb2RlLCBwcm9maWxlck1vZGUsIGVy
cm9yLCBldmFsQ29udGV4dFR5cGUsIHZhcmlhYmxlc1VuZGVyVERaKTsKIH0KIAogVW5saW5rZWRN
b2R1bGVQcm9ncmFtQ29kZUJsb2NrKiBDb2RlQ2FjaGU6OmdldE1vZHVsZVByb2dyYW1Db2RlQmxv
Y2soVk0mIHZtLCBNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZSogZXhlY3V0YWJsZSwgY29uc3QgU291
cmNlQ29kZSYgc291cmNlLCBKU1BhcnNlckJ1aWx0aW5Nb2RlIGJ1aWx0aW5Nb2RlLCBEZWJ1Z2dl
ck1vZGUgZGVidWdnZXJNb2RlLCBQcm9maWxlck1vZGUgcHJvZmlsZXJNb2RlLCBQYXJzZXJFcnJv
ciYgZXJyb3IpCiB7CiAgICAgVmFyaWFibGVFbnZpcm9ubWVudCBlbXB0eVBhcmVudFREWlZhcmlh
YmxlczsKLSAgICByZXR1cm4gZ2V0R2xvYmFsQ29kZUJsb2NrPFVubGlua2VkTW9kdWxlUHJvZ3Jh
bUNvZGVCbG9jaz4odm0sIGV4ZWN1dGFibGUsIHNvdXJjZSwgYnVpbHRpbk1vZGUsIEpTUGFyc2Vy
U3RyaWN0TW9kZTo6U3RyaWN0LCBUaGlzVERaTW9kZTo6Q2hlY2tJZk5lZWRlZCwgZGVidWdnZXJN
b2RlLCBwcm9maWxlck1vZGUsIGVycm9yLCBFdmFsQ29udGV4dFR5cGU6Ok5vbmUsICZlbXB0eVBh
cmVudFREWlZhcmlhYmxlcyk7CisgICAgcmV0dXJuIGdldEdsb2JhbENvZGVCbG9jazxVbmxpbmtl
ZE1vZHVsZVByb2dyYW1Db2RlQmxvY2s+KHZtLCBleGVjdXRhYmxlLCBzb3VyY2UsIGJ1aWx0aW5N
b2RlLCBKU1BhcnNlclN0cmljdE1vZGU6OlN0cmljdCwgZGVidWdnZXJNb2RlLCBwcm9maWxlck1v
ZGUsIGVycm9yLCBFdmFsQ29udGV4dFR5cGU6Ok5vbmUsICZlbXB0eVBhcmVudFREWlZhcmlhYmxl
cyk7CiB9CiAKIC8vIEZJWE1FOiBUaGVyZSdzIG5vIG5lZWQgdG8gYWRkIHRoZSBmdW5jdGlvbidz
IG5hbWUgdG8gdGhlIGtleSBoZXJlLiBJdCdzIGFscmVhZHkgaW4gdGhlIHNvdXJjZSBjb2RlLgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29kZUNhY2hlLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29kZUNhY2hlLmgJKHJldmlzaW9u
IDIwMDI2NCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvZGVDYWNoZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0xODgsNyArMTg4LDcgQEAgcHVibGljOgogICAgIH5Db2RlQ2FjaGUo
KTsKIAogICAgIFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jayogZ2V0UHJvZ3JhbUNvZGVCbG9jayhW
TSYsIFByb2dyYW1FeGVjdXRhYmxlKiwgY29uc3QgU291cmNlQ29kZSYsIEpTUGFyc2VyQnVpbHRp
bk1vZGUsIEpTUGFyc2VyU3RyaWN0TW9kZSwgRGVidWdnZXJNb2RlLCBQcm9maWxlck1vZGUsIFBh
cnNlckVycm9yJik7Ci0gICAgVW5saW5rZWRFdmFsQ29kZUJsb2NrKiBnZXRFdmFsQ29kZUJsb2Nr
KFZNJiwgRXZhbEV4ZWN1dGFibGUqLCBjb25zdCBTb3VyY2VDb2RlJiwgSlNQYXJzZXJCdWlsdGlu
TW9kZSwgSlNQYXJzZXJTdHJpY3RNb2RlLCBUaGlzVERaTW9kZSwgRGVidWdnZXJNb2RlLCBQcm9m
aWxlck1vZGUsIFBhcnNlckVycm9yJiwgRXZhbENvbnRleHRUeXBlLCBjb25zdCBWYXJpYWJsZUVu
dmlyb25tZW50Kik7CisgICAgVW5saW5rZWRFdmFsQ29kZUJsb2NrKiBnZXRFdmFsQ29kZUJsb2Nr
KFZNJiwgRXZhbEV4ZWN1dGFibGUqLCBjb25zdCBTb3VyY2VDb2RlJiwgSlNQYXJzZXJCdWlsdGlu
TW9kZSwgSlNQYXJzZXJTdHJpY3RNb2RlLCBEZWJ1Z2dlck1vZGUsIFByb2ZpbGVyTW9kZSwgUGFy
c2VyRXJyb3ImLCBFdmFsQ29udGV4dFR5cGUsIGNvbnN0IFZhcmlhYmxlRW52aXJvbm1lbnQqKTsK
ICAgICBVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2sqIGdldE1vZHVsZVByb2dyYW1Db2Rl
QmxvY2soVk0mLCBNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZSosIGNvbnN0IFNvdXJjZUNvZGUmLCBK
U1BhcnNlckJ1aWx0aW5Nb2RlLCBEZWJ1Z2dlck1vZGUsIFByb2ZpbGVyTW9kZSwgUGFyc2VyRXJy
b3ImKTsKICAgICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogZ2V0RnVuY3Rpb25FeGVjdXRh
YmxlRnJvbUdsb2JhbENvZGUoVk0mLCBjb25zdCBJZGVudGlmaWVyJiwgY29uc3QgU291cmNlQ29k
ZSYsIFBhcnNlckVycm9yJik7CiAKQEAgLTE5OSw3ICsxOTksNyBAQCBwdWJsaWM6CiAKIHByaXZh
dGU6CiAgICAgdGVtcGxhdGUgPGNsYXNzIFVubGlua2VkQ29kZUJsb2NrVHlwZSwgY2xhc3MgRXhl
Y3V0YWJsZVR5cGU+IAotICAgIFVubGlua2VkQ29kZUJsb2NrVHlwZSogZ2V0R2xvYmFsQ29kZUJs
b2NrKFZNJiwgRXhlY3V0YWJsZVR5cGUqLCBjb25zdCBTb3VyY2VDb2RlJiwgSlNQYXJzZXJCdWls
dGluTW9kZSwgSlNQYXJzZXJTdHJpY3RNb2RlLCBUaGlzVERaTW9kZSwgRGVidWdnZXJNb2RlLCBQ
cm9maWxlck1vZGUsIFBhcnNlckVycm9yJiwgRXZhbENvbnRleHRUeXBlLCBjb25zdCBWYXJpYWJs
ZUVudmlyb25tZW50Kik7CisgICAgVW5saW5rZWRDb2RlQmxvY2tUeXBlKiBnZXRHbG9iYWxDb2Rl
QmxvY2soVk0mLCBFeGVjdXRhYmxlVHlwZSosIGNvbnN0IFNvdXJjZUNvZGUmLCBKU1BhcnNlckJ1
aWx0aW5Nb2RlLCBKU1BhcnNlclN0cmljdE1vZGUsIERlYnVnZ2VyTW9kZSwgUHJvZmlsZXJNb2Rl
LCBQYXJzZXJFcnJvciYsIEV2YWxDb250ZXh0VHlwZSwgY29uc3QgVmFyaWFibGVFbnZpcm9ubWVu
dCopOwogCiAgICAgQ29kZUNhY2hlTWFwIG1fc291cmNlQ29kZTsKIH07CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAkocmV2aXNpb24gMjAwMjY0
KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTQyNiw3ICs0MjYsNyBAQCBKU09iamVjdCogU2NyaXB0RXhlY3V0YWJsZTo6
cHJlcGFyZUZvckV4CiAKIGNvbnN0IENsYXNzSW5mbyBFdmFsRXhlY3V0YWJsZTo6c19pbmZvID0g
eyAiRXZhbEV4ZWN1dGFibGUiLCAmU2NyaXB0RXhlY3V0YWJsZTo6c19pbmZvLCAwLCBDUkVBVEVf
TUVUSE9EX1RBQkxFKEV2YWxFeGVjdXRhYmxlKSB9OwogCi1FdmFsRXhlY3V0YWJsZSogRXZhbEV4
ZWN1dGFibGU6OmNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJj
ZSwgYm9vbCBpc0luU3RyaWN0Q29udGV4dCwgVGhpc1REWk1vZGUgdGhpc1REWk1vZGUsIERlcml2
ZWRDb250ZXh0VHlwZSBkZXJpdmVkQ29udGV4dFR5cGUsIGJvb2wgaXNBcnJvd0Z1bmN0aW9uQ29u
dGV4dCwgRXZhbENvbnRleHRUeXBlIGV2YWxDb250ZXh0VHlwZSwgY29uc3QgVmFyaWFibGVFbnZp
cm9ubWVudCogdmFyaWFibGVzVW5kZXJURFopCitFdmFsRXhlY3V0YWJsZSogRXZhbEV4ZWN1dGFi
bGU6OmNyZWF0ZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgYm9v
bCBpc0luU3RyaWN0Q29udGV4dCwgRGVyaXZlZENvbnRleHRUeXBlIGRlcml2ZWRDb250ZXh0VHlw
ZSwgYm9vbCBpc0Fycm93RnVuY3Rpb25Db250ZXh0LCBFdmFsQ29udGV4dFR5cGUgZXZhbENvbnRl
eHRUeXBlLCBjb25zdCBWYXJpYWJsZUVudmlyb25tZW50KiB2YXJpYWJsZXNVbmRlclREWikKIHsK
ICAgICBKU0dsb2JhbE9iamVjdCogZ2xvYmFsT2JqZWN0ID0gZXhlYy0+bGV4aWNhbEdsb2JhbE9i
amVjdCgpOwogICAgIGlmICghZ2xvYmFsT2JqZWN0LT5ldmFsRW5hYmxlZCgpKSB7CkBAIC00Mzcs
NyArNDM3LDcgQEAgRXZhbEV4ZWN1dGFibGUqIEV2YWxFeGVjdXRhYmxlOjpjcmVhdGUoRQogICAg
IEV2YWxFeGVjdXRhYmxlKiBleGVjdXRhYmxlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8
RXZhbEV4ZWN1dGFibGU+KCpleGVjLT5oZWFwKCkpKSBFdmFsRXhlY3V0YWJsZShleGVjLCBzb3Vy
Y2UsIGlzSW5TdHJpY3RDb250ZXh0LCBkZXJpdmVkQ29udGV4dFR5cGUsIGlzQXJyb3dGdW5jdGlv
bkNvbnRleHQsIGV2YWxDb250ZXh0VHlwZSk7CiAgICAgZXhlY3V0YWJsZS0+ZmluaXNoQ3JlYXRp
b24oZXhlYy0+dm0oKSk7CiAKLSAgICBVbmxpbmtlZEV2YWxDb2RlQmxvY2sqIHVubGlua2VkRXZh
bENvZGUgPSBnbG9iYWxPYmplY3QtPmNyZWF0ZUV2YWxDb2RlQmxvY2soZXhlYywgZXhlY3V0YWJs
ZSwgdGhpc1REWk1vZGUsIHZhcmlhYmxlc1VuZGVyVERaKTsKKyAgICBVbmxpbmtlZEV2YWxDb2Rl
QmxvY2sqIHVubGlua2VkRXZhbENvZGUgPSBnbG9iYWxPYmplY3QtPmNyZWF0ZUV2YWxDb2RlQmxv
Y2soZXhlYywgZXhlY3V0YWJsZSwgdmFyaWFibGVzVW5kZXJURFopOwogICAgIGlmICghdW5saW5r
ZWRFdmFsQ29kZSkKICAgICAgICAgcmV0dXJuIDA7CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgJKHJldmlzaW9uIDIwMDI2NCkKKysrIFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAkod29ya2luZyBjb3B5KQpAQCAtNDMy
LDcgKzQzMiw3IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIG1fZXZhbENvZGVCbG9jay5nZXQo
KTsKICAgICB9CiAKLSAgICBzdGF0aWMgRXZhbEV4ZWN1dGFibGUqIGNyZWF0ZShFeGVjU3RhdGUq
LCBjb25zdCBTb3VyY2VDb2RlJiwgYm9vbCBpc0luU3RyaWN0Q29udGV4dCwgVGhpc1REWk1vZGUs
IERlcml2ZWRDb250ZXh0VHlwZSwgYm9vbCBpc0Fycm93RnVuY3Rpb25Db250ZXh0LCBFdmFsQ29u
dGV4dFR5cGUsIGNvbnN0IFZhcmlhYmxlRW52aXJvbm1lbnQqKTsKKyAgICBzdGF0aWMgRXZhbEV4
ZWN1dGFibGUqIGNyZWF0ZShFeGVjU3RhdGUqLCBjb25zdCBTb3VyY2VDb2RlJiwgYm9vbCBpc0lu
U3RyaWN0Q29udGV4dCwgRGVyaXZlZENvbnRleHRUeXBlLCBib29sIGlzQXJyb3dGdW5jdGlvbkNv
bnRleHQsIEV2YWxDb250ZXh0VHlwZSwgY29uc3QgVmFyaWFibGVFbnZpcm9ubWVudCopOwogCiAg
ICAgUGFzc1JlZlB0cjxKSVRDb2RlPiBnZW5lcmF0ZWRKSVRDb2RlKCkKICAgICB7CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwCShy
ZXZpc2lvbiAyMDAyNjQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2Jh
bE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwOTEsNyArMTA5MSw3IEBAIFVubGlua2Vk
UHJvZ3JhbUNvZGVCbG9jayogSlNHbG9iYWxPYmplY3QKICAgICByZXR1cm4gdW5saW5rZWRDb2Rl
QmxvY2s7CiB9CiAKLVVubGlua2VkRXZhbENvZGVCbG9jayogSlNHbG9iYWxPYmplY3Q6OmNyZWF0
ZUV2YWxDb2RlQmxvY2soQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIEV2YWxFeGVjdXRhYmxlKiBleGVj
dXRhYmxlLCBUaGlzVERaTW9kZSB0aGlzVERaTW9kZSwgY29uc3QgVmFyaWFibGVFbnZpcm9ubWVu
dCogdmFyaWFibGVzVW5kZXJURFopCitVbmxpbmtlZEV2YWxDb2RlQmxvY2sqIEpTR2xvYmFsT2Jq
ZWN0OjpjcmVhdGVFdmFsQ29kZUJsb2NrKENhbGxGcmFtZSogY2FsbEZyYW1lLCBFdmFsRXhlY3V0
YWJsZSogZXhlY3V0YWJsZSwgY29uc3QgVmFyaWFibGVFbnZpcm9ubWVudCogdmFyaWFibGVzVW5k
ZXJURFopCiB7CiAgICAgUGFyc2VyRXJyb3IgZXJyb3I7CiAgICAgSlNQYXJzZXJTdHJpY3RNb2Rl
IHN0cmljdE1vZGUgPSBleGVjdXRhYmxlLT5pc1N0cmljdE1vZGUoKSA/IEpTUGFyc2VyU3RyaWN0
TW9kZTo6U3RyaWN0IDogSlNQYXJzZXJTdHJpY3RNb2RlOjpOb3RTdHJpY3Q7CkBAIC0xMTAwLDcg
KzExMDAsNyBAQCBVbmxpbmtlZEV2YWxDb2RlQmxvY2sqIEpTR2xvYmFsT2JqZWN0OjpjCiAgICAg
CiAgICAgUHJvZmlsZXJNb2RlIHByb2ZpbGVyTW9kZSA9IGhhc0xlZ2FjeVByb2ZpbGVyKCkgPyBQ
cm9maWxlck9uIDogUHJvZmlsZXJPZmY7CiAgICAgVW5saW5rZWRFdmFsQ29kZUJsb2NrKiB1bmxp
bmtlZENvZGVCbG9jayA9IHZtKCkuY29kZUNhY2hlKCktPmdldEV2YWxDb2RlQmxvY2soCi0gICAg
ICAgIHZtKCksIGV4ZWN1dGFibGUsIGV4ZWN1dGFibGUtPnNvdXJjZSgpLCBKU1BhcnNlckJ1aWx0
aW5Nb2RlOjpOb3RCdWlsdGluLCBzdHJpY3RNb2RlLCB0aGlzVERaTW9kZSwgZGVidWdnZXJNb2Rl
LCBwcm9maWxlck1vZGUsIGVycm9yLCBldmFsQ29udGV4dFR5cGUsIHZhcmlhYmxlc1VuZGVyVERa
KTsKKyAgICAgICAgdm0oKSwgZXhlY3V0YWJsZSwgZXhlY3V0YWJsZS0+c291cmNlKCksIEpTUGFy
c2VyQnVpbHRpbk1vZGU6Ok5vdEJ1aWx0aW4sIHN0cmljdE1vZGUsIGRlYnVnZ2VyTW9kZSwgcHJv
ZmlsZXJNb2RlLCBlcnJvciwgZXZhbENvbnRleHRUeXBlLCB2YXJpYWJsZXNVbmRlclREWik7CiAK
ICAgICBpZiAoaGFzRGVidWdnZXIoKSkKICAgICAgICAgZGVidWdnZXIoKS0+c291cmNlUGFyc2Vk
KGNhbGxGcmFtZSwgZXhlY3V0YWJsZS0+c291cmNlKCkucHJvdmlkZXIoKSwgZXJyb3IubGluZSgp
LCBlcnJvci5tZXNzYWdlKCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNHbG9iYWxPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9KU0dsb2JhbE9iamVjdC5oCShyZXZpc2lvbiAyMDAyNjQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCSh3b3JraW5nIGNvcHkpCkBAIC05MCw3
ICs5MCw2IEBAIGNsYXNzIFJlZ0V4cFByb3RvdHlwZTsKIGNsYXNzIFNvdXJjZUNvZGU7CiBjbGFz
cyBVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2s7CiBjbGFzcyBWYXJpYWJsZUVudmlyb25t
ZW50OwotZW51bSBjbGFzcyBUaGlzVERaTW9kZTsKIHN0cnVjdCBBY3RpdmF0aW9uU3RhY2tOb2Rl
Owogc3RydWN0IEhhc2hUYWJsZTsKIApAQCAtNzA1LDcgKzcwNCw3IEBAIHB1YmxpYzoKICAgICB1
bnNpZ25lZCB3ZWFrUmFuZG9tSW50ZWdlcigpIHsgcmV0dXJuIG1fd2Vha1JhbmRvbS5nZXRVaW50
MzIoKTsgfQogCiAgICAgVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrKiBjcmVhdGVQcm9ncmFtQ29k
ZUJsb2NrKENhbGxGcmFtZSosIFByb2dyYW1FeGVjdXRhYmxlKiwgSlNPYmplY3QqKiBleGNlcHRp
b24pOwotICAgIFVubGlua2VkRXZhbENvZGVCbG9jayogY3JlYXRlRXZhbENvZGVCbG9jayhDYWxs
RnJhbWUqLCBFdmFsRXhlY3V0YWJsZSosIFRoaXNURFpNb2RlLCBjb25zdCBWYXJpYWJsZUVudmly
b25tZW50Kik7CisgICAgVW5saW5rZWRFdmFsQ29kZUJsb2NrKiBjcmVhdGVFdmFsQ29kZUJsb2Nr
KENhbGxGcmFtZSosIEV2YWxFeGVjdXRhYmxlKiwgY29uc3QgVmFyaWFibGVFbnZpcm9ubWVudCop
OwogICAgIFVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayogY3JlYXRlTW9kdWxlUHJvZ3Jh
bUNvZGVCbG9jayhDYWxsRnJhbWUqLCBNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZSopOwogCiBwcm90
ZWN0ZWQ6CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVj
dEZ1bmN0aW9ucy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwCShyZXZpc2lvbiAyMDAyNjQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTU4OSw3ICs1ODksNyBAQCBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9D
QUxMIGdsb2JhbEZ1bmNFCiAKICAgICBKU0dsb2JhbE9iamVjdCogY2FsbGVlR2xvYmFsT2JqZWN0
ID0gZXhlYy0+Y2FsbGVlKCktPmdsb2JhbE9iamVjdCgpOwogICAgIFZhcmlhYmxlRW52aXJvbm1l
bnQgZW1wdHlURFpWYXJpYWJsZXM7IC8vIEluZGlyZWN0IGV2YWwgZG9lcyBub3QgaGF2ZSBhY2Nl
c3MgdG8gdGhlIGxleGljYWwgc2NvcGUuCi0gICAgRXZhbEV4ZWN1dGFibGUqIGV2YWwgPSBFdmFs
RXhlY3V0YWJsZTo6Y3JlYXRlKGV4ZWMsIG1ha2VTb3VyY2UocyksIGZhbHNlLCBUaGlzVERaTW9k
ZTo6Q2hlY2tJZk5lZWRlZCwgRGVyaXZlZENvbnRleHRUeXBlOjpOb25lLCBmYWxzZSwgRXZhbENv
bnRleHRUeXBlOjpOb25lLCAmZW1wdHlURFpWYXJpYWJsZXMpOworICAgIEV2YWxFeGVjdXRhYmxl
KiBldmFsID0gRXZhbEV4ZWN1dGFibGU6OmNyZWF0ZShleGVjLCBtYWtlU291cmNlKHMpLCBmYWxz
ZSwgRGVyaXZlZENvbnRleHRUeXBlOjpOb25lLCBmYWxzZSwgRXZhbENvbnRleHRUeXBlOjpOb25l
LCAmZW1wdHlURFpWYXJpYWJsZXMpOwogICAgIGlmICghZXZhbCkKICAgICAgICAgcmV0dXJuIEpT
VmFsdWU6OmVuY29kZShqc1VuZGVmaW5lZCgpKTsKIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>279549</attachid>
            <date>2016-05-22 07:30:51 -0700</date>
            <delta_ts>2016-05-23 21:54:48 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-157209-20160522233154.patch</filename>
            <type>text/plain</type>
            <size>45477</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjAxMjQ2CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBi
ZDU1OTRkYTY3MDFjZTY3YTM1ZGVkMjY5MzY1N2ViY2UzYTRjMjY0Li4zOWFlODNiYzQ0YTYwM2M2
OGZiMTRhODM4MjNmMzBmNTU3Zjc1OTYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw4MyBAQAorMjAxNi0wNS0yMiAgU2FhbSBiYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4g
YW5kIFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4KKworICAgICAgICBUaGlz
VERaTW9kZSBpcyBubyBsb25nZXIgbmVlZGVkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNTcyMDkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkg
KE9PUFMhKS4KKworICAgICAgICBUaGlzVERaTW9kZSBpcyBubyBsb25nZXIgbmVlZGVkIGJlY2F1
c2Ugd2UgaGF2ZSBDb25zdHJ1Y3RvcktpbmQKKyAgICAgICAgYW5kIERlcml2ZWRDb250ZXh0VHlw
ZS4gVGhlIHZhbHVlIG9mIFRoaXNURFpNb2RlIGlzIHN0cmljdGx5IGxlc3MKKyAgICAgICAgZXhw
cmVzc2l2ZSB0aGFuIHRoZSBjb21iaW5hdGlvbiBvZiB0aG9zZSB0d28gdmFsdWVzLiBXZSB3ZXJl
CisgICAgICAgIHVzaW5nIHRob3NlIHZhbHVlcyBhbnl3YXlzLCBhbmQgdGhpcyBwYXRjaCBqdXN0
IG1ha2VzIGl0IG9mZmljaWFsCisgICAgICAgIGJ5IHJlbW92aW5nIFRoaXNURFpNb2RlLgorCisg
ICAgICAgIFRoaXMgcGF0Y2ggYWxzbyBjbGVhbnMgdXAgY2FjaGluZyBrZXlzLiBXZSBleHRyYWN0
IFNvdXJjZUNvZGVGbGFncworICAgICAgICBmcm9tIFNvdXJjZUNvZGVLZXkgYW5kIHVzZSBpdCBp
biBFdmFsQ29kZUNhY2hlLiBJdCBjb3JyZWN0bHkKKyAgICAgICAgY29udGFpbnMgbmVlZGVkIGNh
Y2hlIGF0dHJpYnV0ZXM6IEV2YWxDb250ZXh0VHlwZSwgRGVyaXZlZENvbnRleHRUeXBlLAorICAg
ICAgICBldGMuIEhlcmUsIHdlIHN0aWxsIHVzZSBzcGVjaWFsaXplZCBrZXlzIGZvciBFdmFsQ29k
ZUNhY2hlIGluc3RlYWQKKyAgICAgICAgb2YgU291cmNlQ29kZUtleSBmb3IgcGVyZm9ybWFuY2U7
IGl0IGRvZXMgbm90IGluY2x1ZGUgbmFtZSBTdHJpbmcgYW5kCisgICAgICAgIGRvZXMgbm90IGFs
bG9jYXRlIFNvdXJjZUNvZGUuCisKKyAgICAgICAgKiBieXRlY29kZS9FdmFsQ29kZUNhY2hlLmg6
CisgICAgICAgIChKU0M6OkV2YWxDb2RlQ2FjaGU6OkNhY2hlS2V5OjpDYWNoZUtleSk6CisgICAg
ICAgIChKU0M6OkV2YWxDb2RlQ2FjaGU6OkNhY2hlS2V5OjpvcGVyYXRvcj09KToKKyAgICAgICAg
KEpTQzo6RXZhbENvZGVDYWNoZTo6Q2FjaGVLZXk6Okhhc2g6OmVxdWFsKToKKyAgICAgICAgKEpT
Qzo6RXZhbENvZGVDYWNoZTo6dHJ5R2V0KToKKyAgICAgICAgKEpTQzo6RXZhbENvZGVDYWNoZTo6
Z2V0U2xvdyk6CisgICAgICAgICogYnl0ZWNvbXBpbGVyL05vZGVzQ29kZWdlbi5jcHA6CisgICAg
ICAgIChKU0M6OlRoaXNOb2RlOjplbWl0Qnl0ZWNvZGUpOiBEZWxldGVkLgorICAgICAgICAqIGRl
YnVnZ2VyL0RlYnVnZ2VyQ2FsbEZyYW1lLmNwcDoKKyAgICAgICAgKEpTQzo6RGVidWdnZXJDYWxs
RnJhbWU6OmV2YWx1YXRlV2l0aFNjb3BlRXh0ZW5zaW9uKToKKyAgICAgICAgKiBpbnRlcnByZXRl
ci9JbnRlcnByZXRlci5jcHA6CisgICAgICAgIChKU0M6OmV2YWwpOgorICAgICAgICAqIHBhcnNl
ci9BU1RCdWlsZGVyLmg6CisgICAgICAgIChKU0M6OkFTVEJ1aWxkZXI6OmNyZWF0ZVRoaXNFeHBy
KToKKyAgICAgICAgKiBwYXJzZXIvTm9kZUNvbnN0cnVjdG9ycy5oOgorICAgICAgICAoSlNDOjpU
aGlzTm9kZTo6VGhpc05vZGUpOgorICAgICAgICAqIHBhcnNlci9Ob2Rlcy5oOgorICAgICAgICAq
IHBhcnNlci9QYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpQYXJzZXI8TGV4ZXJUeXBlPjo6UGFy
c2VyKToKKyAgICAgICAgKEpTQzo6UGFyc2VyPExleGVyVHlwZT46OnBhcnNlUHJpbWFyeUV4cHJl
c3Npb24pOgorICAgICAgICAqIHBhcnNlci9QYXJzZXIuaDoKKyAgICAgICAgKEpTQzo6cGFyc2Up
OgorICAgICAgICAqIHBhcnNlci9QYXJzZXJNb2Rlcy5oOgorICAgICAgICAqIHBhcnNlci9Tb3Vy
Y2VDb2RlS2V5Lmg6CisgICAgICAgIChKU0M6OlNvdXJjZUNvZGVGbGFnczo6U291cmNlQ29kZUZs
YWdzKToKKyAgICAgICAgKEpTQzo6U291cmNlQ29kZUZsYWdzOjpvcGVyYXRvcj09KToKKyAgICAg
ICAgKEpTQzo6U291cmNlQ29kZUtleTo6U291cmNlQ29kZUtleSk6CisgICAgICAgIChKU0M6OlNv
dXJjZUNvZGVLZXk6Okhhc2g6Omhhc2gpOgorICAgICAgICAoSlNDOjpTb3VyY2VDb2RlS2V5OjpI
YXNoOjplcXVhbCk6CisgICAgICAgIChKU0M6OlNvdXJjZUNvZGVLZXk6Okhhc2hUcmFpdHM6Omlz
RW1wdHlWYWx1ZSk6CisgICAgICAgIChKU0M6OlNvdXJjZUNvZGVLZXlIYXNoOjpoYXNoKTogRGVs
ZXRlZC4KKyAgICAgICAgKEpTQzo6U291cmNlQ29kZUtleUhhc2g6OmVxdWFsKTogRGVsZXRlZC4K
KyAgICAgICAgKEpTQzo6U291cmNlQ29kZUtleUhhc2hUcmFpdHM6OmlzRW1wdHlWYWx1ZSk6IERl
bGV0ZWQuCisgICAgICAgICogcGFyc2VyL1N5bnRheENoZWNrZXIuaDoKKyAgICAgICAgKEpTQzo6
U3ludGF4Q2hlY2tlcjo6Y3JlYXRlVGhpc0V4cHIpOgorICAgICAgICAqIHJ1bnRpbWUvQ29kZUNh
Y2hlLmNwcDoKKyAgICAgICAgKEpTQzo6Q29kZUNhY2hlOjpnZXRHbG9iYWxDb2RlQmxvY2spOgor
ICAgICAgICAoSlNDOjpDb2RlQ2FjaGU6OmdldFByb2dyYW1Db2RlQmxvY2spOgorICAgICAgICAo
SlNDOjpDb2RlQ2FjaGU6OmdldEV2YWxDb2RlQmxvY2spOgorICAgICAgICAoSlNDOjpDb2RlQ2Fj
aGU6OmdldE1vZHVsZVByb2dyYW1Db2RlQmxvY2spOgorICAgICAgICAoSlNDOjpDb2RlQ2FjaGU6
OmdldEZ1bmN0aW9uRXhlY3V0YWJsZUZyb21HbG9iYWxDb2RlKToKKyAgICAgICAgKiBydW50aW1l
L0NvZGVDYWNoZS5oOgorICAgICAgICAoSlNDOjpDb2RlQ2FjaGVNYXA6OmZpbmRDYWNoZUFuZFVw
ZGF0ZUFnZSk6CisgICAgICAgIChKU0M6OkNvZGVDYWNoZU1hcDo6YWRkQ2FjaGUpOgorICAgICAg
ICAqIHJ1bnRpbWUvRXhlY3V0YWJsZS5jcHA6CisgICAgICAgIChKU0M6OkV2YWxFeGVjdXRhYmxl
OjpjcmVhdGUpOgorICAgICAgICAqIHJ1bnRpbWUvRXhlY3V0YWJsZS5oOgorICAgICAgICAqIHJ1
bnRpbWUvSlNHbG9iYWxPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9iamVjdDo6
Y3JlYXRlRXZhbENvZGVCbG9jayk6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5o
OgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwOgorICAgICAg
ICAoSlNDOjpnbG9iYWxGdW5jRXZhbCk6CisgICAgICAgICogdGVzdHMvc3RyZXNzL2NvZGUtY2Fj
aGUtaW5jb3JyZWN0LWNhY2hpbmcuanM6IEFkZGVkLgorICAgICAgICAoc2hvdWxkQmUpOgorICAg
ICAgICAoaGVsbG8pOgorICAgICAgICAoY2F0Y2gpOgorICAgICAgICAoc2hvdWxkQmUudGVzdC5o
ZWxsbyk6CisgICAgICAgIChnbG9iYWxFdmFsLm9rKToKKyAgICAgICAgKGdsb2JhbC5oZWxsby5o
ZWxsbyk6CisKIDIwMTYtMDUtMjAgIEpvc2VwaCBQZWNvcmFybyAgPHBlY29yYXJvQGFwcGxlLmNv
bT4KIAogICAgICAgICBSZW1vdmUgTGVnYWN5UHJvZmlsZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FdmFsQ29kZUNhY2hlLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvRXZhbENvZGVDYWNoZS5oCmluZGV4IGM0NjEyNTczNjQ2M2ZkYzQwYTM1
Mzg0NzM3MjFiZjRmMTk0MTdiMTYuLjU1ZjExMGY1YjE5ZDc3YzI1ZjJlYzAyZmQyNzFlYjU1ZGNh
OGVjZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9FdmFsQ29k
ZUNhY2hlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0V2YWxDb2RlQ2Fj
aGUuaApAQCAtMzQsNiArMzQsNyBAQAogI2luY2x1ZGUgIkpTU2NvcGUuaCIKICNpbmNsdWRlICJP
cHRpb25zLmgiCiAjaW5jbHVkZSAiU291cmNlQ29kZS5oIgorI2luY2x1ZGUgIlNvdXJjZUNvZGVL
ZXkuaCIKICNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4K
ICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdIYXNoLmg+CkBAIC00NCwxMiArNDUsMTIgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBFdmFsQ29kZUNhY2hlIHsKICAgICBwdWJsaWM6Cisg
ICAgICAgIC8vIFNwZWNpYWxpemVkIGNhY2hlIGtleSAoY29tcGFyZWQgd2l0aCBTb3VyY2VDb2Rl
S2V5KSBmb3IgZXZhbCBjb2RlIGNhY2hlLgogICAgICAgICBjbGFzcyBDYWNoZUtleSB7CiAgICAg
ICAgIHB1YmxpYzoKLSAgICAgICAgICAgIENhY2hlS2V5KGNvbnN0IFN0cmluZyYgc291cmNlLCBi
b29sIGlzQXJyb3dGdW5jdGlvbkNvbnRleHQsIERlcml2ZWRDb250ZXh0VHlwZSBkZXJpdmVkQ29u
dGV4dFR5cGUpCisgICAgICAgICAgICBDYWNoZUtleShjb25zdCBTdHJpbmcmIHNvdXJjZSwgRGVy
aXZlZENvbnRleHRUeXBlIGRlcml2ZWRDb250ZXh0VHlwZSwgRXZhbENvbnRleHRUeXBlIGV2YWxD
b250ZXh0VHlwZSwgYm9vbCBpc0Fycm93RnVuY3Rpb25Db250ZXh0KQogICAgICAgICAgICAgICAg
IDogbV9zb3VyY2Uoc291cmNlLmltcGwoKSkKLSAgICAgICAgICAgICAgICAsIG1faXNBcnJvd0Z1
bmN0aW9uQ29udGV4dChpc0Fycm93RnVuY3Rpb25Db250ZXh0KQotICAgICAgICAgICAgICAgICwg
bV9kZXJpdmVkQ29udGV4dFR5cGUoZGVyaXZlZENvbnRleHRUeXBlKQorICAgICAgICAgICAgICAg
ICwgbV9mbGFncyhTb3VyY2VDb2RlVHlwZTo6RXZhbFR5cGUsIEpTUGFyc2VyQnVpbHRpbk1vZGU6
Ok5vdEJ1aWx0aW4sIEpTUGFyc2VyU3RyaWN0TW9kZTo6Tm90U3RyaWN0LCBkZXJpdmVkQ29udGV4
dFR5cGUsIGV2YWxDb250ZXh0VHlwZSwgaXNBcnJvd0Z1bmN0aW9uQ29udGV4dCkKICAgICAgICAg
ICAgIHsKICAgICAgICAgICAgIH0KIApAQCAtNjYsNyArNjcsNyBAQCBuYW1lc3BhY2UgSlNDIHsK
IAogICAgICAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IENhY2hlS2V5JiBvdGhlcikgY29u
c3QKICAgICAgICAgICAgIHsKLSAgICAgICAgICAgICAgICByZXR1cm4gbV9zb3VyY2UgPT0gb3Ro
ZXIubV9zb3VyY2UgJiYgbV9pc0Fycm93RnVuY3Rpb25Db250ZXh0ID09IG90aGVyLm1faXNBcnJv
d0Z1bmN0aW9uQ29udGV4dCAmJiBtX2Rlcml2ZWRDb250ZXh0VHlwZSA9PSBvdGhlci5tX2Rlcml2
ZWRDb250ZXh0VHlwZTsKKyAgICAgICAgICAgICAgICByZXR1cm4gbV9zb3VyY2UgPT0gb3RoZXIu
bV9zb3VyY2UgJiYgbV9mbGFncyA9PSBvdGhlci5tX2ZsYWdzOwogICAgICAgICAgICAgfQogCiAg
ICAgICAgICAgICBib29sIGlzSGFzaFRhYmxlRGVsZXRlZFZhbHVlKCkgY29uc3QgeyByZXR1cm4g
bV9zb3VyY2UuaXNIYXNoVGFibGVEZWxldGVkVmFsdWUoKTsgfQpAQCAtNzgsNyArNzksNyBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgc3RhdGlj
IGJvb2wgZXF1YWwoY29uc3QgQ2FjaGVLZXkmIGxocywgY29uc3QgQ2FjaGVLZXkmIHJocykKICAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIHJldHVybiBTdHJpbmdIYXNoOjpl
cXVhbChsaHMubV9zb3VyY2UsIHJocy5tX3NvdXJjZSkgJiYgbGhzLm1faXNBcnJvd0Z1bmN0aW9u
Q29udGV4dCA9PSByaHMubV9pc0Fycm93RnVuY3Rpb25Db250ZXh0ICYmIGxocy5tX2Rlcml2ZWRD
b250ZXh0VHlwZSA9PSByaHMubV9kZXJpdmVkQ29udGV4dFR5cGU7CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiBTdHJpbmdIYXNoOjplcXVhbChsaHMubV9zb3VyY2UsIHJocy5tX3NvdXJjZSkg
JiYgbGhzLm1fZmxhZ3MgPT0gcmhzLm1fZmxhZ3M7CiAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgIHN0YXRpYyBjb25zdCBib29sIHNhZmVUb0NvbXBhcmVUb0VtcHR5T3JEZWxldGVk
ID0gZmFsc2U7CiAgICAgICAgICAgICB9OwpAQCAtODcsMzEgKzg4LDI5IEBAIG5hbWVzcGFjZSBK
U0MgewogCiAgICAgICAgIHByaXZhdGU6CiAgICAgICAgICAgICBSZWZQdHI8U3RyaW5nSW1wbD4g
bV9zb3VyY2U7Ci0gICAgICAgICAgICBib29sIG1faXNBcnJvd0Z1bmN0aW9uQ29udGV4dCB7IGZh
bHNlIH07Ci0gICAgICAgICAgICBEZXJpdmVkQ29udGV4dFR5cGUgbV9kZXJpdmVkQ29udGV4dFR5
cGUgeyBEZXJpdmVkQ29udGV4dFR5cGU6Ok5vbmUgfTsKKyAgICAgICAgICAgIFNvdXJjZUNvZGVG
bGFncyBtX2ZsYWdzOwogICAgICAgICB9OwogCi0gICAgICAgIEV2YWxFeGVjdXRhYmxlKiB0cnlH
ZXQoYm9vbCBpblN0cmljdENvbnRleHQsIGNvbnN0IFN0cmluZyYgZXZhbFNvdXJjZSwgYm9vbCBp
c0Fycm93RnVuY3Rpb25Db250ZXh0LCBEZXJpdmVkQ29udGV4dFR5cGUgZGVyaXZlZENvbnRleHRU
eXBlLCBKU1Njb3BlKiBzY29wZSkKKyAgICAgICAgRXZhbEV4ZWN1dGFibGUqIHRyeUdldChib29s
IGluU3RyaWN0Q29udGV4dCwgY29uc3QgU3RyaW5nJiBldmFsU291cmNlLCBEZXJpdmVkQ29udGV4
dFR5cGUgZGVyaXZlZENvbnRleHRUeXBlLCBFdmFsQ29udGV4dFR5cGUgZXZhbENvbnRleHRUeXBl
LCBib29sIGlzQXJyb3dGdW5jdGlvbkNvbnRleHQsIEpTU2NvcGUqIHNjb3BlKQogICAgICAgICB7
CiAgICAgICAgICAgICBpZiAoaXNDYWNoZWFibGUoaW5TdHJpY3RDb250ZXh0LCBldmFsU291cmNl
LCBzY29wZSkpIHsKICAgICAgICAgICAgICAgICBBU1NFUlQoIWluU3RyaWN0Q29udGV4dCk7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuIG1fY2FjaGVNYXAuZmFzdEdldChDYWNoZUtleShldmFsU291
cmNlLCBpc0Fycm93RnVuY3Rpb25Db250ZXh0LCBkZXJpdmVkQ29udGV4dFR5cGUpKS5nZXQoKTsK
KyAgICAgICAgICAgICAgICByZXR1cm4gbV9jYWNoZU1hcC5mYXN0R2V0KENhY2hlS2V5KGV2YWxT
b3VyY2UsIGRlcml2ZWRDb250ZXh0VHlwZSwgZXZhbENvbnRleHRUeXBlLCBpc0Fycm93RnVuY3Rp
b25Db250ZXh0KSkuZ2V0KCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICByZXR1cm4gbnVs
bHB0cjsKICAgICAgICAgfQogICAgICAgICAKLSAgICAgICAgRXZhbEV4ZWN1dGFibGUqIGdldFNs
b3coRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIG93bmVyLCBib29sIGluU3RyaWN0Q29udGV4dCwg
VGhpc1REWk1vZGUgdGhpc1REWk1vZGUsIERlcml2ZWRDb250ZXh0VHlwZSBkZXJpdmVkQ29udGV4
dFR5cGUsIGJvb2wgaXNBcnJvd0Z1bmN0aW9uQ29udGV4dCwgRXZhbENvbnRleHRUeXBlIGV2YWxD
b250ZXh0VHlwZSwgY29uc3QgU3RyaW5nJiBldmFsU291cmNlLCBKU1Njb3BlKiBzY29wZSkKKyAg
ICAgICAgRXZhbEV4ZWN1dGFibGUqIGdldFNsb3coRXhlY1N0YXRlKiBleGVjLCBKU0NlbGwqIG93
bmVyLCBib29sIGluU3RyaWN0Q29udGV4dCwgRGVyaXZlZENvbnRleHRUeXBlIGRlcml2ZWRDb250
ZXh0VHlwZSwgRXZhbENvbnRleHRUeXBlIGV2YWxDb250ZXh0VHlwZSwgYm9vbCBpc0Fycm93RnVu
Y3Rpb25Db250ZXh0LCBjb25zdCBTdHJpbmcmIGV2YWxTb3VyY2UsIEpTU2NvcGUqIHNjb3BlKQog
ICAgICAgICB7CiAgICAgICAgICAgICBWYXJpYWJsZUVudmlyb25tZW50IHZhcmlhYmxlc1VuZGVy
VERaOwogICAgICAgICAgICAgSlNTY29wZTo6Y29sbGVjdFZhcmlhYmxlc1VuZGVyVERaKHNjb3Bl
LCB2YXJpYWJsZXNVbmRlclREWik7Ci0gICAgICAgICAgICBFdmFsRXhlY3V0YWJsZSogZXZhbEV4
ZWN1dGFibGUgPSBFdmFsRXhlY3V0YWJsZTo6Y3JlYXRlKGV4ZWMsIG1ha2VTb3VyY2UoZXZhbFNv
dXJjZSksIGluU3RyaWN0Q29udGV4dCwgdGhpc1REWk1vZGUsIGRlcml2ZWRDb250ZXh0VHlwZSwg
aXNBcnJvd0Z1bmN0aW9uQ29udGV4dCwgZXZhbENvbnRleHRUeXBlLCAmdmFyaWFibGVzVW5kZXJU
RFopOworICAgICAgICAgICAgRXZhbEV4ZWN1dGFibGUqIGV2YWxFeGVjdXRhYmxlID0gRXZhbEV4
ZWN1dGFibGU6OmNyZWF0ZShleGVjLCBtYWtlU291cmNlKGV2YWxTb3VyY2UpLCBpblN0cmljdENv
bnRleHQsIGRlcml2ZWRDb250ZXh0VHlwZSwgaXNBcnJvd0Z1bmN0aW9uQ29udGV4dCwgZXZhbENv
bnRleHRUeXBlLCAmdmFyaWFibGVzVW5kZXJURFopOwogICAgICAgICAgICAgaWYgKCFldmFsRXhl
Y3V0YWJsZSkKICAgICAgICAgICAgICAgICByZXR1cm4gbnVsbHB0cjsKIAogICAgICAgICAgICAg
aWYgKGlzQ2FjaGVhYmxlKGluU3RyaWN0Q29udGV4dCwgZXZhbFNvdXJjZSwgc2NvcGUpICYmIG1f
Y2FjaGVNYXAuc2l6ZSgpIDwgbWF4Q2FjaGVFbnRyaWVzKSB7CiAgICAgICAgICAgICAgICAgQVNT
RVJUKCFpblN0cmljdENvbnRleHQpOwotICAgICAgICAgICAgICAgIEFTU0VSVF9XSVRIX01FU1NB
R0UodGhpc1REWk1vZGUgPT0gVGhpc1REWk1vZGU6OkNoZWNrSWZOZWVkZWQsICJBbHdheXMgQ2hl
Y2tJZk5lZWRlZCBiZWNhdXNlIHRoZSBjYWNoaW5nIGlzIGVuYWJsZWQgb25seSBpbiB0aGUgc2xv
cHB5IG1vZGUuIik7Ci0gICAgICAgICAgICAgICAgbV9jYWNoZU1hcC5zZXQoQ2FjaGVLZXkoZXZh
bFNvdXJjZSwgaXNBcnJvd0Z1bmN0aW9uQ29udGV4dCwgZGVyaXZlZENvbnRleHRUeXBlKSwgV3Jp
dGVCYXJyaWVyPEV2YWxFeGVjdXRhYmxlPihleGVjLT52bSgpLCBvd25lciwgZXZhbEV4ZWN1dGFi
bGUpKTsKKyAgICAgICAgICAgICAgICBtX2NhY2hlTWFwLnNldChDYWNoZUtleShldmFsU291cmNl
LCBkZXJpdmVkQ29udGV4dFR5cGUsIGV2YWxDb250ZXh0VHlwZSwgaXNBcnJvd0Z1bmN0aW9uQ29u
dGV4dCksIFdyaXRlQmFycmllcjxFdmFsRXhlY3V0YWJsZT4oZXhlYy0+dm0oKSwgb3duZXIsIGV2
YWxFeGVjdXRhYmxlKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICAKICAgICAgICAgICAg
IHJldHVybiBldmFsRXhlY3V0YWJsZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29tcGlsZXIvTm9kZXNDb2RlZ2VuLmNwcAppbmRleCAzYmJkMmYxN2ViYzNmZWJiMjFhNWIy
ZmU3OTAwMGIzNmQ4OTg4MjUwLi4wYmQ2MjQ1NDU1NmE1OTcxYWQ4YjdlNzM4ZjczNWIzMGEzYjlh
NTE2IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL05vZGVz
Q29kZWdlbi5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb21waWxlci9Ob2Rl
c0NvZGVnZW4uY3BwCkBAIC0xNDYsNyArMTQ2LDYgQEAgUmVnaXN0ZXJJRCogUmVnRXhwTm9kZTo6
ZW1pdEJ5dGVjb2RlKEJ5dGVjb2RlR2VuZXJhdG9yJiBnZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGQK
IFJlZ2lzdGVySUQqIFRoaXNOb2RlOjplbWl0Qnl0ZWNvZGUoQnl0ZWNvZGVHZW5lcmF0b3ImIGdl
bmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogewogICAgIGdlbmVyYXRvci5lbnN1cmVUaGlzKCk7
Ci0gICAgVU5VU0VEX1BBUkFNKG1fc2hvdWxkQWx3YXlzRW1pdFREWkNoZWNrKTsKICAgICBpZiAo
ZHN0ID09IGdlbmVyYXRvci5pZ25vcmVkUmVzdWx0KCkpCiAgICAgICAgIHJldHVybiAwOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJDYWxsRnJh
bWUuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RlYnVnZ2VyL0RlYnVnZ2VyQ2FsbEZyYW1l
LmNwcAppbmRleCA4ZGM3ZThmMGUxMDUwZTAzN2UxODUxYzYwY2U1ZjA5MWM2YzlkZmQ4Li45NTI0
YmM1NWM1YmViYTM4ZDhiOTE3NmQyYmIxMzI2MWI1MzM1YWM4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGVidWdnZXIvRGVidWdnZXJDYWxsRnJhbWUuY3BwCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZWJ1Z2dlci9EZWJ1Z2dlckNhbGxGcmFtZS5jcHAKQEAgLTIyNCw3
ICsyMjQsNiBAQCBKU1ZhbHVlIERlYnVnZ2VyQ2FsbEZyYW1lOjpldmFsdWF0ZVdpdGhTY29wZUV4
dGVuc2lvbihjb25zdCBTdHJpbmcmIHNjcmlwdCwgSlNPYgogICAgIAogICAgIERlYnVnZ2VyRXZh
bEVuYWJsZXIgZXZhbEVuYWJsZXIoY2FsbEZyYW1lKTsKICAgICBWTSYgdm0gPSBjYWxsRnJhbWUt
PnZtKCk7Ci0gICAgVGhpc1REWk1vZGUgdGhpc1REWk1vZGUgPSBjb2RlQmxvY2stPnVubGlua2Vk
Q29kZUJsb2NrKCktPmNvbnN0cnVjdG9yS2luZCgpID09IENvbnN0cnVjdG9yS2luZDo6RGVyaXZl
ZCA/IFRoaXNURFpNb2RlOjpBbHdheXNDaGVjayA6IFRoaXNURFpNb2RlOjpDaGVja0lmTmVlZGVk
OwogCiAgICAgRXZhbENvbnRleHRUeXBlIGV2YWxDb250ZXh0VHlwZTsKICAgICAKQEAgLTIzOCw3
ICsyMzcsNyBAQCBKU1ZhbHVlIERlYnVnZ2VyQ2FsbEZyYW1lOjpldmFsdWF0ZVdpdGhTY29wZUV4
dGVuc2lvbihjb25zdCBTdHJpbmcmIHNjcmlwdCwgSlNPYgogICAgIFZhcmlhYmxlRW52aXJvbm1l
bnQgdmFyaWFibGVzVW5kZXJURFo7CiAgICAgSlNTY29wZTo6Y29sbGVjdFZhcmlhYmxlc1VuZGVy
VERaKHNjb3BlKCktPmpzU2NvcGUoKSwgdmFyaWFibGVzVW5kZXJURFopOwogCi0gICAgRXZhbEV4
ZWN1dGFibGUqIGV2YWwgPSBFdmFsRXhlY3V0YWJsZTo6Y3JlYXRlKGNhbGxGcmFtZSwgbWFrZVNv
dXJjZShzY3JpcHQpLCBjb2RlQmxvY2stPmlzU3RyaWN0TW9kZSgpLCB0aGlzVERaTW9kZSwgY29k
ZUJsb2NrLT51bmxpbmtlZENvZGVCbG9jaygpLT5kZXJpdmVkQ29udGV4dFR5cGUoKSwgY29kZUJs
b2NrLT51bmxpbmtlZENvZGVCbG9jaygpLT5pc0Fycm93RnVuY3Rpb24oKSwgZXZhbENvbnRleHRU
eXBlLCAmdmFyaWFibGVzVW5kZXJURFopOworICAgIEV2YWxFeGVjdXRhYmxlKiBldmFsID0gRXZh
bEV4ZWN1dGFibGU6OmNyZWF0ZShjYWxsRnJhbWUsIG1ha2VTb3VyY2Uoc2NyaXB0KSwgY29kZUJs
b2NrLT5pc1N0cmljdE1vZGUoKSwgY29kZUJsb2NrLT51bmxpbmtlZENvZGVCbG9jaygpLT5kZXJp
dmVkQ29udGV4dFR5cGUoKSwgY29kZUJsb2NrLT51bmxpbmtlZENvZGVCbG9jaygpLT5pc0Fycm93
RnVuY3Rpb24oKSwgZXZhbENvbnRleHRUeXBlLCAmdmFyaWFibGVzVW5kZXJURFopOwogICAgIGlm
ICh2bS5leGNlcHRpb24oKSkgewogICAgICAgICBleGNlcHRpb24gPSB2bS5leGNlcHRpb24oKTsK
ICAgICAgICAgdm0uY2xlYXJFeGNlcHRpb24oKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3BwCmluZGV4IGJmNjJlZDA0YzQ4NTM5ZGViNjQw
MmY4MjVjZmIzNTA2OTZkZTY3NmMuLjg0YjEyMTAzODJhYTVlN2JiODFhOTk1OWQ0ZTRjZmE2ZmQx
YjY5NDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRl
cnByZXRlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVy
cHJldGVyLmNwcApAQCAtMTY1LDggKzE2NSwxNSBAQCBKU1ZhbHVlIGV2YWwoQ2FsbEZyYW1lKiBj
YWxsRnJhbWUpCiAgICAgICAgICAgICA6IERlcml2ZWRDb250ZXh0VHlwZTo6RGVyaXZlZE1ldGhv
ZENvbnRleHQ7CiAgICAgfQogCi0gICAgRXZhbEV4ZWN1dGFibGUqIGV2YWwgPSBjYWxsZXJDb2Rl
QmxvY2stPmV2YWxDb2RlQ2FjaGUoKS50cnlHZXQoY2FsbGVyQ29kZUJsb2NrLT5pc1N0cmljdE1v
ZGUoKSwgcHJvZ3JhbVNvdXJjZSwgaXNBcnJvd0Z1bmN0aW9uQ29udGV4dCwgZGVyaXZlZENvbnRl
eHRUeXBlLCBjYWxsZXJTY29wZUNoYWluKTsKKyAgICBFdmFsQ29udGV4dFR5cGUgZXZhbENvbnRl
eHRUeXBlOworICAgIGlmIChpc0Z1bmN0aW9uUGFyc2VNb2RlKGNhbGxlclVubGlua2VkQ29kZUJs
b2NrLT5wYXJzZU1vZGUoKSkpCisgICAgICAgIGV2YWxDb250ZXh0VHlwZSA9IEV2YWxDb250ZXh0
VHlwZTo6RnVuY3Rpb25FdmFsQ29udGV4dDsKKyAgICBlbHNlIGlmIChjYWxsZXJVbmxpbmtlZENv
ZGVCbG9jay0+Y29kZVR5cGUoKSA9PSBFdmFsQ29kZSkKKyAgICAgICAgZXZhbENvbnRleHRUeXBl
ID0gY2FsbGVyVW5saW5rZWRDb2RlQmxvY2stPmV2YWxDb250ZXh0VHlwZSgpOworICAgIGVsc2UK
KyAgICAgICAgZXZhbENvbnRleHRUeXBlID0gRXZhbENvbnRleHRUeXBlOjpOb25lOwogCisgICAg
RXZhbEV4ZWN1dGFibGUqIGV2YWwgPSBjYWxsZXJDb2RlQmxvY2stPmV2YWxDb2RlQ2FjaGUoKS50
cnlHZXQoY2FsbGVyQ29kZUJsb2NrLT5pc1N0cmljdE1vZGUoKSwgcHJvZ3JhbVNvdXJjZSwgZGVy
aXZlZENvbnRleHRUeXBlLCBldmFsQ29udGV4dFR5cGUsIGlzQXJyb3dGdW5jdGlvbkNvbnRleHQs
IGNhbGxlclNjb3BlQ2hhaW4pOwogICAgIGlmICghZXZhbCkgewogICAgICAgICBpZiAoIWNhbGxl
ckNvZGVCbG9jay0+aXNTdHJpY3RNb2RlKCkpIHsKICAgICAgICAgICAgIGlmIChwcm9ncmFtU291
cmNlLmlzOEJpdCgpKSB7CkBAIC0xODMsMjAgKzE5MCw3IEBAIEpTVmFsdWUgZXZhbChDYWxsRnJh
bWUqIGNhbGxGcmFtZSkKICAgICAgICAgLy8gSWYgdGhlIGxpdGVyYWwgcGFyc2VyIGJhaWxlZCwg
aXQgc2hvdWxkIG5vdCBoYXZlIHRocm93biBleGNlcHRpb25zLgogICAgICAgICBBU1NFUlQoIWNh
bGxGcmFtZS0+dm0oKS5leGNlcHRpb24oKSk7CiAKLSAgICAgICAgVGhpc1REWk1vZGUgdGhpc1RE
Wk1vZGUgPSBUaGlzVERaTW9kZTo6Q2hlY2tJZk5lZWRlZDsKLSAgICAgICAgaWYgKGNhbGxlclVu
bGlua2VkQ29kZUJsb2NrLT5jb25zdHJ1Y3RvcktpbmQoKSA9PSBDb25zdHJ1Y3RvcktpbmQ6OkRl
cml2ZWQpCi0gICAgICAgICAgICB0aGlzVERaTW9kZSA9IFRoaXNURFpNb2RlOjpBbHdheXNDaGVj
azsKLQotICAgICAgICBFdmFsQ29udGV4dFR5cGUgZXZhbENvbnRleHRUeXBlOwotICAgICAgICAK
LSAgICAgICAgaWYgKGlzRnVuY3Rpb25QYXJzZU1vZGUoY2FsbGVyVW5saW5rZWRDb2RlQmxvY2st
PnBhcnNlTW9kZSgpKSkKLSAgICAgICAgICAgIGV2YWxDb250ZXh0VHlwZSA9IEV2YWxDb250ZXh0
VHlwZTo6RnVuY3Rpb25FdmFsQ29udGV4dDsKLSAgICAgICAgZWxzZSBpZiAoY2FsbGVyVW5saW5r
ZWRDb2RlQmxvY2stPmNvZGVUeXBlKCkgPT0gRXZhbENvZGUpCi0gICAgICAgICAgICBldmFsQ29u
dGV4dFR5cGUgPSBjYWxsZXJVbmxpbmtlZENvZGVCbG9jay0+ZXZhbENvbnRleHRUeXBlKCk7Ci0g
ICAgICAgIGVsc2UKLSAgICAgICAgICAgIGV2YWxDb250ZXh0VHlwZSA9IEV2YWxDb250ZXh0VHlw
ZTo6Tm9uZTsKLQotICAgICAgICBldmFsID0gY2FsbGVyQ29kZUJsb2NrLT5ldmFsQ29kZUNhY2hl
KCkuZ2V0U2xvdyhjYWxsRnJhbWUsIGNhbGxlckNvZGVCbG9jaywgY2FsbGVyQ29kZUJsb2NrLT5p
c1N0cmljdE1vZGUoKSwgdGhpc1REWk1vZGUsIGRlcml2ZWRDb250ZXh0VHlwZSwgaXNBcnJvd0Z1
bmN0aW9uQ29udGV4dCwgZXZhbENvbnRleHRUeXBlLCBwcm9ncmFtU291cmNlLCBjYWxsZXJTY29w
ZUNoYWluKTsKKyAgICAgICAgZXZhbCA9IGNhbGxlckNvZGVCbG9jay0+ZXZhbENvZGVDYWNoZSgp
LmdldFNsb3coY2FsbEZyYW1lLCBjYWxsZXJDb2RlQmxvY2ssIGNhbGxlckNvZGVCbG9jay0+aXNT
dHJpY3RNb2RlKCksIGRlcml2ZWRDb250ZXh0VHlwZSwgZXZhbENvbnRleHRUeXBlLCBpc0Fycm93
RnVuY3Rpb25Db250ZXh0LCBwcm9ncmFtU291cmNlLCBjYWxsZXJTY29wZUNoYWluKTsKIAogICAg
ICAgICBpZiAoIWV2YWwpCiAgICAgICAgICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvQVNUQnVpbGRlci5oIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL3BhcnNlci9BU1RCdWlsZGVyLmgKaW5kZXggNDcxODdlMmRiODkyYTM5
NmIzNDA0NGEyODg2MmZlY2IwNDhjYjdmMC4uOWFjOTA0YWRlMzc0NThkNjgzMWUzYjk1ZTU0YjQ2
MDQ1NmVhNmQ1NCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9BU1RC
dWlsZGVyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9BU1RCdWlsZGVyLmgK
QEAgLTE2OCwxMCArMTY4LDEwIEBAIGNsYXNzIEFTVEJ1aWxkZXIgewogICAgICAgICBpbmNDb25z
dGFudHMoKTsKICAgICAgICAgcmV0dXJuIG5ldyAobV9wYXJzZXJBcmVuYSkgVm9pZE5vZGUobG9j
YXRpb24sIGV4cHIpOwogICAgIH0KLSAgICBFeHByZXNzaW9uTm9kZSogY3JlYXRlVGhpc0V4cHIo
Y29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgVGhpc1REWk1vZGUgdGhpc1REWk1vZGUp
CisgICAgRXhwcmVzc2lvbk5vZGUqIGNyZWF0ZVRoaXNFeHByKGNvbnN0IEpTVG9rZW5Mb2NhdGlv
biYgbG9jYXRpb24pCiAgICAgewogICAgICAgICB1c2VzVGhpcygpOwotICAgICAgICByZXR1cm4g
bmV3IChtX3BhcnNlckFyZW5hKSBUaGlzTm9kZShsb2NhdGlvbiwgdGhpc1REWk1vZGUpOworICAg
ICAgICByZXR1cm4gbmV3IChtX3BhcnNlckFyZW5hKSBUaGlzTm9kZShsb2NhdGlvbik7CiAgICAg
fQogICAgIEV4cHJlc3Npb25Ob2RlKiBjcmVhdGVTdXBlckV4cHIoY29uc3QgSlNUb2tlbkxvY2F0
aW9uJiBsb2NhdGlvbikKICAgICB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cGFyc2VyL05vZGVDb25zdHJ1Y3RvcnMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIv
Tm9kZUNvbnN0cnVjdG9ycy5oCmluZGV4IDQwOGE2ZGJhYWZhYTkwNjc2NDllOGU0OTZmOTcyNDVj
ZTliNTc3MDkuLjdmNTQ2YWIwYjAxNzc1ZTA0Y2UyM2NjOGY1OGQ4NjgyMTRlYjU0MGEgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZUNvbnN0cnVjdG9ycy5oCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZUNvbnN0cnVjdG9ycy5oCkBAIC0x
NTcsOSArMTU3LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgewogICAgIH0KIAotICAgIGlubGlu
ZSBUaGlzTm9kZTo6VGhpc05vZGUoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiBsb2NhdGlvbiwgVGhp
c1REWk1vZGUgdGhpc1REWk1vZGUpCisgICAgaW5saW5lIFRoaXNOb2RlOjpUaGlzTm9kZShjb25z
dCBKU1Rva2VuTG9jYXRpb24mIGxvY2F0aW9uKQogICAgICAgICA6IEV4cHJlc3Npb25Ob2RlKGxv
Y2F0aW9uKQotICAgICAgICAsIG1fc2hvdWxkQWx3YXlzRW1pdFREWkNoZWNrKHRoaXNURFpNb2Rl
ID09IFRoaXNURFpNb2RlOjpBbHdheXNDaGVjaykKICAgICB7CiAgICAgfQogCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcGFyc2VyL05vZGVzLmgKaW5kZXggYWU3NTQxMmE3YjBjYzRmNzE2MjlkYzcwMWI3NDE5
MjQwYTljNDFhOC4uN2Q4NTFjZWFjYTJlYWFkOTdkYzY0MWMyNDFmNGI1YTBjNzIzYWI4NCAxMDA2
NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rlcy5oCisrKyBiL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuaApAQCAtNTQyLDEyICs1NDIsMTAgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAKICAgICBjbGFzcyBUaGlzTm9kZSA6IHB1YmxpYyBFeHByZXNzaW9uTm9k
ZSB7CiAgICAgcHVibGljOgotICAgICAgICBUaGlzTm9kZShjb25zdCBKU1Rva2VuTG9jYXRpb24m
LCBUaGlzVERaTW9kZSk7CisgICAgICAgIFRoaXNOb2RlKGNvbnN0IEpTVG9rZW5Mb2NhdGlvbiYp
OwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgUmVnaXN0ZXJJRCogZW1pdEJ5dGVjb2RlKEJ5dGVj
b2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBvdmVycmlkZTsKLQotICAgICAgICBib29s
IG1fc2hvdWxkQWx3YXlzRW1pdFREWkNoZWNrOwogICAgIH07CiAKICAgICBjbGFzcyBTdXBlck5v
ZGUgZmluYWwgOiBwdWJsaWMgRXhwcmVzc2lvbk5vZGUgewpkaWZmIC0tZ2l0IGEvU291cmNlL0ph
dmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3Bh
cnNlci9QYXJzZXIuY3BwCmluZGV4IGNmYTNlNTJiOWM3M2ZiNGY4N2ZkYTE2ZTM3NWE5YWRkYWYz
NmZlNGIuLjMwYmRlNTQ3ODY3M2NmNTZmOTlkMTk3ZWIxZDI3MzY5MjRhYzVmYWQgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5jcHAKQEAgLTE5NSw3ICsxOTUsNyBAQCB2b2lk
IFBhcnNlcjxMZXhlclR5cGU+Ojpsb2dFcnJvcihib29sIHNob3VsZFByaW50VG9rZW4sIGNvbnN0
IEEmIHZhbHVlMSwgY29uc3QgQgogfQogCiB0ZW1wbGF0ZSA8dHlwZW5hbWUgTGV4ZXJUeXBlPgot
UGFyc2VyPExleGVyVHlwZT46OlBhcnNlcihWTSogdm0sIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJj
ZSwgSlNQYXJzZXJCdWlsdGluTW9kZSBidWlsdGluTW9kZSwgSlNQYXJzZXJTdHJpY3RNb2RlIHN0
cmljdE1vZGUsIFNvdXJjZVBhcnNlTW9kZSBwYXJzZU1vZGUsIFN1cGVyQmluZGluZyBzdXBlckJp
bmRpbmcsIENvbnN0cnVjdG9yS2luZCBkZWZhdWx0Q29uc3RydWN0b3JLaW5kLCBUaGlzVERaTW9k
ZSB0aGlzVERaTW9kZSwgRGVyaXZlZENvbnRleHRUeXBlIGRlcml2ZWRDb250ZXh0VHlwZSwgYm9v
bCBpc0V2YWxDb250ZXh0LCBFdmFsQ29udGV4dFR5cGUgZXZhbENvbnRleHRUeXBlKQorUGFyc2Vy
PExleGVyVHlwZT46OlBhcnNlcihWTSogdm0sIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgSlNQ
YXJzZXJCdWlsdGluTW9kZSBidWlsdGluTW9kZSwgSlNQYXJzZXJTdHJpY3RNb2RlIHN0cmljdE1v
ZGUsIFNvdXJjZVBhcnNlTW9kZSBwYXJzZU1vZGUsIFN1cGVyQmluZGluZyBzdXBlckJpbmRpbmcs
IENvbnN0cnVjdG9yS2luZCBkZWZhdWx0Q29uc3RydWN0b3JLaW5kLCBEZXJpdmVkQ29udGV4dFR5
cGUgZGVyaXZlZENvbnRleHRUeXBlLCBib29sIGlzRXZhbENvbnRleHQsIEV2YWxDb250ZXh0VHlw
ZSBldmFsQ29udGV4dFR5cGUpCiAgICAgOiBtX3ZtKHZtKQogICAgICwgbV9zb3VyY2UoJnNvdXJj
ZSkKICAgICAsIG1faGFzU3RhY2tPdmVyZmxvdyhmYWxzZSkKQEAgLTIwNiw3ICsyMDYsNiBAQCBQ
YXJzZXI8TGV4ZXJUeXBlPjo6UGFyc2VyKFZNKiB2bSwgY29uc3QgU291cmNlQ29kZSYgc291cmNl
LCBKU1BhcnNlckJ1aWx0aW5Nb2RlCiAgICAgLCBtX3BhcnNpbmdCdWlsdGluKGJ1aWx0aW5Nb2Rl
ID09IEpTUGFyc2VyQnVpbHRpbk1vZGU6OkJ1aWx0aW4pCiAgICAgLCBtX3N1cGVyQmluZGluZyhz
dXBlckJpbmRpbmcpCiAgICAgLCBtX2RlZmF1bHRDb25zdHJ1Y3RvcktpbmQoZGVmYXVsdENvbnN0
cnVjdG9yS2luZCkKLSAgICAsIG1fdGhpc1REWk1vZGUodGhpc1REWk1vZGUpCiAgICAgLCBtX2lt
bWVkaWF0ZVBhcmVudEFsbG93c0Z1bmN0aW9uRGVjbGFyYXRpb25JblN0YXRlbWVudChmYWxzZSkK
IHsKICAgICBtX2xleGVyID0gc3RkOjptYWtlX3VuaXF1ZTxMZXhlclR5cGU+KHZtLCBidWlsdGlu
TW9kZSk7CkBAIC0zNzE4LDcgKzM3MTcsNyBAQCB0ZW1wbGF0ZSA8Y2xhc3MgVHJlZUJ1aWxkZXI+
IFRyZWVFeHByZXNzaW9uIFBhcnNlcjxMZXhlclR5cGU+OjpwYXJzZVByaW1hcnlFeHByZQogICAg
ICAgICBuZXh0KCk7CiAgICAgICAgIGlmIChjdXJyZW50U2NvcGUoKS0+aXNBcnJvd0Z1bmN0aW9u
KCkpCiAgICAgICAgICAgICBjdXJyZW50U2NvcGUoKS0+c2V0SW5uZXJBcnJvd0Z1bmN0aW9uVXNl
c1RoaXMoKTsKLSAgICAgICAgcmV0dXJuIGNvbnRleHQuY3JlYXRlVGhpc0V4cHIobG9jYXRpb24s
IG1fdGhpc1REWk1vZGUpOworICAgICAgICByZXR1cm4gY29udGV4dC5jcmVhdGVUaGlzRXhwcihs
b2NhdGlvbik7CiAgICAgfQogICAgIGNhc2UgSURFTlQ6IHsKICAgICBpZGVudGlmaWVyRXhwcmVz
c2lvbjoKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyLmgg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlci5oCmluZGV4IGQ1YWEwY2NiMzY3
MDgwYmY4MTFhZjlkNWVkYjA1N2YxZGQ2YjY1ZTQuLmM3MDBmMDc2NzAxN2I1ZjUxM2JkOTc5ZjI0
ZjEwMTNiMDU5MjhmMmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIv
UGFyc2VyLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXIuaApAQCAt
ODE0LDcgKzgxNCw3IEBAIGNsYXNzIFBhcnNlciB7CiAgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CiAKIHB1YmxpYzoKLSAgICBQYXJzZXIoVk0qLCBjb25zdCBTb3VyY2VDb2RlJiwgSlNQYXJz
ZXJCdWlsdGluTW9kZSwgSlNQYXJzZXJTdHJpY3RNb2RlLCBTb3VyY2VQYXJzZU1vZGUsIFN1cGVy
QmluZGluZywgQ29uc3RydWN0b3JLaW5kIGRlZmF1bHRDb25zdHJ1Y3RvcktpbmQgPSBDb25zdHJ1
Y3RvcktpbmQ6Ok5vbmUsIFRoaXNURFpNb2RlID0gVGhpc1REWk1vZGU6OkNoZWNrSWZOZWVkZWQs
IERlcml2ZWRDb250ZXh0VHlwZSA9IERlcml2ZWRDb250ZXh0VHlwZTo6Tm9uZSwgYm9vbCBpc0V2
YWxDb250ZXh0ID0gZmFsc2UsIEV2YWxDb250ZXh0VHlwZSA9IEV2YWxDb250ZXh0VHlwZTo6Tm9u
ZSk7CisgICAgUGFyc2VyKFZNKiwgY29uc3QgU291cmNlQ29kZSYsIEpTUGFyc2VyQnVpbHRpbk1v
ZGUsIEpTUGFyc2VyU3RyaWN0TW9kZSwgU291cmNlUGFyc2VNb2RlLCBTdXBlckJpbmRpbmcsIENv
bnN0cnVjdG9yS2luZCBkZWZhdWx0Q29uc3RydWN0b3JLaW5kID0gQ29uc3RydWN0b3JLaW5kOjpO
b25lLCBEZXJpdmVkQ29udGV4dFR5cGUgPSBEZXJpdmVkQ29udGV4dFR5cGU6Ok5vbmUsIGJvb2wg
aXNFdmFsQ29udGV4dCA9IGZhbHNlLCBFdmFsQ29udGV4dFR5cGUgPSBFdmFsQ29udGV4dFR5cGU6
Ok5vbmUpOwogICAgIH5QYXJzZXIoKTsKIAogICAgIHRlbXBsYXRlIDxjbGFzcyBQYXJzZWROb2Rl
PgpAQCAtMTYwMSw3ICsxNjAxLDYgQEAgY2xhc3MgUGFyc2VyIHsKICAgICBib29sIG1fcGFyc2lu
Z0J1aWx0aW47CiAgICAgU3VwZXJCaW5kaW5nIG1fc3VwZXJCaW5kaW5nOwogICAgIENvbnN0cnVj
dG9yS2luZCBtX2RlZmF1bHRDb25zdHJ1Y3RvcktpbmQ7Ci0gICAgVGhpc1REWk1vZGUgbV90aGlz
VERaTW9kZTsKICAgICBWYXJpYWJsZUVudmlyb25tZW50IG1fdmFyRGVjbGFyYXRpb25zOwogICAg
IERlY2xhcmF0aW9uU3RhY2tzOjpGdW5jdGlvblN0YWNrIG1fZnVuY0RlY2xhcmF0aW9uczsKICAg
ICBVbmlxdWVkU3RyaW5nSW1wbFB0clNldCBtX3Nsb3BweU1vZGVIb2lzdGVkRnVuY3Rpb25zOwpA
QCAtMTcyOSwxMiArMTcyOCwxMSBAQCBzdGQ6OnVuaXF1ZV9wdHI8UGFyc2VkTm9kZT4gcGFyc2Uo
CiAgICAgY29uc3QgSWRlbnRpZmllciYgbmFtZSwgSlNQYXJzZXJCdWlsdGluTW9kZSBidWlsdGlu
TW9kZSwKICAgICBKU1BhcnNlclN0cmljdE1vZGUgc3RyaWN0TW9kZSwgU291cmNlUGFyc2VNb2Rl
IHBhcnNlTW9kZSwgU3VwZXJCaW5kaW5nIHN1cGVyQmluZGluZywKICAgICBQYXJzZXJFcnJvciYg
ZXJyb3IsIEpTVGV4dFBvc2l0aW9uKiBwb3NpdGlvbkJlZm9yZUxhc3ROZXdsaW5lID0gbnVsbHB0
ciwKLSAgICBDb25zdHJ1Y3RvcktpbmQgZGVmYXVsdENvbnN0cnVjdG9yS2luZCA9IENvbnN0cnVj
dG9yS2luZDo6Tm9uZSwgVGhpc1REWk1vZGUgdGhpc1REWk1vZGUgPSBUaGlzVERaTW9kZTo6Q2hl
Y2tJZk5lZWRlZCwgCi0gICAgRGVyaXZlZENvbnRleHRUeXBlIGRlcml2ZWRDb250ZXh0VHlwZSA9
IERlcml2ZWRDb250ZXh0VHlwZTo6Tm9uZSwgRXZhbENvbnRleHRUeXBlIGV2YWxDb250ZXh0VHlw
ZSA9IEV2YWxDb250ZXh0VHlwZTo6Tm9uZSkKKyAgICBDb25zdHJ1Y3RvcktpbmQgZGVmYXVsdENv
bnN0cnVjdG9yS2luZCA9IENvbnN0cnVjdG9yS2luZDo6Tm9uZSwgRGVyaXZlZENvbnRleHRUeXBl
IGRlcml2ZWRDb250ZXh0VHlwZSA9IERlcml2ZWRDb250ZXh0VHlwZTo6Tm9uZSwgRXZhbENvbnRl
eHRUeXBlIGV2YWxDb250ZXh0VHlwZSA9IEV2YWxDb250ZXh0VHlwZTo6Tm9uZSkKIHsKICAgICBB
U1NFUlQoIXNvdXJjZS5wcm92aWRlcigpLT5zb3VyY2UoKS5pc051bGwoKSk7CiAgICAgaWYgKHNv
dXJjZS5wcm92aWRlcigpLT5zb3VyY2UoKS5pczhCaXQoKSkgewotICAgICAgICBQYXJzZXI8TGV4
ZXI8TENoYXI+PiBwYXJzZXIodm0sIHNvdXJjZSwgYnVpbHRpbk1vZGUsIHN0cmljdE1vZGUsIHBh
cnNlTW9kZSwgc3VwZXJCaW5kaW5nLCBkZWZhdWx0Q29uc3RydWN0b3JLaW5kLCB0aGlzVERaTW9k
ZSwgZGVyaXZlZENvbnRleHRUeXBlLCBpc0V2YWxOb2RlPFBhcnNlZE5vZGU+KCksIGV2YWxDb250
ZXh0VHlwZSk7CisgICAgICAgIFBhcnNlcjxMZXhlcjxMQ2hhcj4+IHBhcnNlcih2bSwgc291cmNl
LCBidWlsdGluTW9kZSwgc3RyaWN0TW9kZSwgcGFyc2VNb2RlLCBzdXBlckJpbmRpbmcsIGRlZmF1
bHRDb25zdHJ1Y3RvcktpbmQsIGRlcml2ZWRDb250ZXh0VHlwZSwgaXNFdmFsTm9kZTxQYXJzZWRO
b2RlPigpLCBldmFsQ29udGV4dFR5cGUpOwogICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8UGFyc2Vk
Tm9kZT4gcmVzdWx0ID0gcGFyc2VyLnBhcnNlPFBhcnNlZE5vZGU+KGVycm9yLCBuYW1lLCBwYXJz
ZU1vZGUpOwogICAgICAgICBpZiAocG9zaXRpb25CZWZvcmVMYXN0TmV3bGluZSkKICAgICAgICAg
ICAgICpwb3NpdGlvbkJlZm9yZUxhc3ROZXdsaW5lID0gcGFyc2VyLnBvc2l0aW9uQmVmb3JlTGFz
dE5ld2xpbmUoKTsKQEAgLTE3NDUsNyArMTc0Myw3IEBAIHN0ZDo6dW5pcXVlX3B0cjxQYXJzZWRO
b2RlPiBwYXJzZSgKICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICB9CiAgICAgQVNTRVJUX1dJ
VEhfTUVTU0FHRShkZWZhdWx0Q29uc3RydWN0b3JLaW5kID09IENvbnN0cnVjdG9yS2luZDo6Tm9u
ZSwgIkJ1aWx0aW5FeGVjdXRhYmxlczo6Y3JlYXRlRGVmYXVsdENvbnN0cnVjdG9yIHNob3VsZCBh
bHdheXMgdXNlIGEgOC1iaXQgc3RyaW5nIik7Ci0gICAgUGFyc2VyPExleGVyPFVDaGFyPj4gcGFy
c2VyKHZtLCBzb3VyY2UsIGJ1aWx0aW5Nb2RlLCBzdHJpY3RNb2RlLCBwYXJzZU1vZGUsIHN1cGVy
QmluZGluZywgZGVmYXVsdENvbnN0cnVjdG9yS2luZCwgdGhpc1REWk1vZGUsIGRlcml2ZWRDb250
ZXh0VHlwZSwgaXNFdmFsTm9kZTxQYXJzZWROb2RlPigpLCBldmFsQ29udGV4dFR5cGUpOworICAg
IFBhcnNlcjxMZXhlcjxVQ2hhcj4+IHBhcnNlcih2bSwgc291cmNlLCBidWlsdGluTW9kZSwgc3Ry
aWN0TW9kZSwgcGFyc2VNb2RlLCBzdXBlckJpbmRpbmcsIGRlZmF1bHRDb25zdHJ1Y3RvcktpbmQs
IGRlcml2ZWRDb250ZXh0VHlwZSwgaXNFdmFsTm9kZTxQYXJzZWROb2RlPigpLCBldmFsQ29udGV4
dFR5cGUpOwogICAgIHN0ZDo6dW5pcXVlX3B0cjxQYXJzZWROb2RlPiByZXN1bHQgPSBwYXJzZXIu
cGFyc2U8UGFyc2VkTm9kZT4oZXJyb3IsIG5hbWUsIHBhcnNlTW9kZSk7CiAgICAgaWYgKHBvc2l0
aW9uQmVmb3JlTGFzdE5ld2xpbmUpCiAgICAgICAgICpwb3NpdGlvbkJlZm9yZUxhc3ROZXdsaW5l
ID0gcGFyc2VyLnBvc2l0aW9uQmVmb3JlTGFzdE5ld2xpbmUoKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvUGFyc2VyTW9kZXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9wYXJzZXIvUGFyc2VyTW9kZXMuaAppbmRleCAyYjc5NTNhM2Q2NjgxMzFkYzczNzZjOWM3
Y2Q4NmUxMmQ3NzA5ZjhkLi5kMjU3MWU1ODI4ODcyMGM3NjNiZmZlNzZjMzI5NDMzNWUxYTAyMjZh
IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1BhcnNlck1vZGVzLmgK
KysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3BhcnNlci9QYXJzZXJNb2Rlcy5oCkBAIC0zNyw3
ICszNyw2IEBAIGVudW0gY2xhc3MgSlNQYXJzZXJDb2RlVHlwZSB7IFByb2dyYW0sIEZ1bmN0aW9u
LCBNb2R1bGUgfTsKIAogZW51bSBjbGFzcyBDb25zdHJ1Y3RvcktpbmQgeyBOb25lLCBCYXNlLCBE
ZXJpdmVkIH07CiBlbnVtIGNsYXNzIFN1cGVyQmluZGluZyB7IE5lZWRlZCwgTm90TmVlZGVkIH07
Ci1lbnVtIGNsYXNzIFRoaXNURFpNb2RlIHsgQWx3YXlzQ2hlY2ssIENoZWNrSWZOZWVkZWQgfTsK
IAogZW51bSBEZWJ1Z2dlck1vZGUgeyBEZWJ1Z2dlck9mZiwgRGVidWdnZXJPbiB9OwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1NvdXJjZUNvZGVLZXkuaCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU291cmNlQ29kZUtleS5oCmluZGV4IDA5ZjhmOTFl
MjBmNzBhNGJkYmU2ZmFkMDY4ZjUxNGJiOTJlNTc5ZjQuLmVlOGE1MGYyZDhmMDQyY2FlOTVhMjg0
ZDk3YWVhMmRjODQzYWUyMzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJz
ZXIvU291cmNlQ29kZUtleS5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvU291
cmNlQ29kZUtleS5oCkBAIC0zMywxOCArMzMsNDMgQEAKIAogbmFtZXNwYWNlIEpTQyB7CiAKLWNs
YXNzIFNvdXJjZUNvZGVLZXkgeworZW51bSBjbGFzcyBTb3VyY2VDb2RlVHlwZSB7IEV2YWxUeXBl
LCBQcm9ncmFtVHlwZSwgRnVuY3Rpb25UeXBlLCBNb2R1bGVUeXBlIH07CisKK2NsYXNzIFNvdXJj
ZUNvZGVGbGFncyB7CiBwdWJsaWM6Ci0gICAgZW51bSBDb2RlVHlwZSB7IEV2YWxUeXBlLCBQcm9n
cmFtVHlwZSwgRnVuY3Rpb25UeXBlLCBNb2R1bGVUeXBlIH07CisgICAgU291cmNlQ29kZUZsYWdz
KCkgPSBkZWZhdWx0OworCisgICAgU291cmNlQ29kZUZsYWdzKFNvdXJjZUNvZGVUeXBlIGNvZGVU
eXBlLCBKU1BhcnNlckJ1aWx0aW5Nb2RlIGJ1aWx0aW5Nb2RlLCBKU1BhcnNlclN0cmljdE1vZGUg
c3RyaWN0TW9kZSwgRGVyaXZlZENvbnRleHRUeXBlIGRlcml2ZWRDb250ZXh0VHlwZSwgRXZhbENv
bnRleHRUeXBlIGV2YWxDb250ZXh0VHlwZSwgYm9vbCBpc0Fycm93RnVuY3Rpb25Db250ZXh0KQor
ICAgICAgICA6IG1fZmxhZ3MoCisgICAgICAgICAgICAoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KGlz
QXJyb3dGdW5jdGlvbkNvbnRleHQpIDw8IDcpIHwKKyAgICAgICAgICAgIChzdGF0aWNfY2FzdDx1
bnNpZ25lZD4oZXZhbENvbnRleHRUeXBlKSA8PCA2KSB8CisgICAgICAgICAgICAoc3RhdGljX2Nh
c3Q8dW5zaWduZWQ+KGRlcml2ZWRDb250ZXh0VHlwZSkgPDwgNCkgfAorICAgICAgICAgICAgKHN0
YXRpY19jYXN0PHVuc2lnbmVkPihjb2RlVHlwZSkgPDwgMikgfAorICAgICAgICAgICAgKHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihidWlsdGluTW9kZSkgPDwgMSkgfAorICAgICAgICAgICAgKHN0YXRp
Y19jYXN0PHVuc2lnbmVkPihzdHJpY3RNb2RlKSkKKyAgICAgICAgKQorICAgIHsKKyAgICB9CisK
KyAgICBpbmxpbmUgYm9vbCBvcGVyYXRvcj09KGNvbnN0IFNvdXJjZUNvZGVGbGFncyYgcmhzKSBj
b25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fZmxhZ3MgPT0gcmhzLm1fZmxhZ3M7CisgICAg
fQorCitwcml2YXRlOgorICAgIHVuc2lnbmVkIG1fZmxhZ3MgeyAwIH07Cit9OwogCitjbGFzcyBT
b3VyY2VDb2RlS2V5IHsKK3B1YmxpYzoKICAgICBTb3VyY2VDb2RlS2V5KCkKICAgICB7CiAgICAg
fQogCi0gICAgU291cmNlQ29kZUtleShjb25zdCBTb3VyY2VDb2RlJiBzb3VyY2VDb2RlLCBjb25z
dCBTdHJpbmcmIG5hbWUsIENvZGVUeXBlIGNvZGVUeXBlLCBKU1BhcnNlckJ1aWx0aW5Nb2RlIGJ1
aWx0aW5Nb2RlLCBKU1BhcnNlclN0cmljdE1vZGUgc3RyaWN0TW9kZSwgVGhpc1REWk1vZGUgdGhp
c1REWk1vZGUgPSBUaGlzVERaTW9kZTo6Q2hlY2tJZk5lZWRlZCkKKyAgICBTb3VyY2VDb2RlS2V5
KGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZUNvZGUsIGNvbnN0IFN0cmluZyYgbmFtZSwgU291cmNl
Q29kZVR5cGUgY29kZVR5cGUsIEpTUGFyc2VyQnVpbHRpbk1vZGUgYnVpbHRpbk1vZGUsIEpTUGFy
c2VyU3RyaWN0TW9kZSBzdHJpY3RNb2RlLCBEZXJpdmVkQ29udGV4dFR5cGUgZGVyaXZlZENvbnRl
eHRUeXBlLCBFdmFsQ29udGV4dFR5cGUgZXZhbENvbnRleHRUeXBlLCBib29sIGlzQXJyb3dGdW5j
dGlvbkNvbnRleHQpCiAgICAgICAgIDogbV9zb3VyY2VDb2RlKHNvdXJjZUNvZGUpCiAgICAgICAg
ICwgbV9uYW1lKG5hbWUpCi0gICAgICAgICwgbV9mbGFncygoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+
KGNvZGVUeXBlKSA8PCAzKSB8IChzdGF0aWNfY2FzdDx1bnNpZ25lZD4oYnVpbHRpbk1vZGUpIDw8
IDIpIHwgKHN0YXRpY19jYXN0PHVuc2lnbmVkPihzdHJpY3RNb2RlKSA8PCAxKSB8IHN0YXRpY19j
YXN0PHVuc2lnbmVkPih0aGlzVERaTW9kZSkpCisgICAgICAgICwgbV9mbGFncyhjb2RlVHlwZSwg
YnVpbHRpbk1vZGUsIHN0cmljdE1vZGUsIGRlcml2ZWRDb250ZXh0VHlwZSwgZXZhbENvbnRleHRU
eXBlLCBpc0Fycm93RnVuY3Rpb25Db250ZXh0KQogICAgICAgICAsIG1faGFzaChzb3VyY2VDb2Rl
Lmhhc2goKSkKICAgICB7CiAgICAgfQpAQCAtNzUsMjQgKzEwMCwyNCBAQCBjbGFzcyBTb3VyY2VD
b2RlS2V5IHsKICAgICAgICAgICAgICYmIHN0cmluZygpID09IG90aGVyLnN0cmluZygpOwogICAg
IH0KIAorICAgIHN0cnVjdCBIYXNoIHsKKyAgICAgICAgc3RhdGljIHVuc2lnbmVkIGhhc2goY29u
c3QgU291cmNlQ29kZUtleSYga2V5KSB7IHJldHVybiBrZXkuaGFzaCgpOyB9CisgICAgICAgIHN0
YXRpYyBib29sIGVxdWFsKGNvbnN0IFNvdXJjZUNvZGVLZXkmIGEsIGNvbnN0IFNvdXJjZUNvZGVL
ZXkmIGIpIHsgcmV0dXJuIGEgPT0gYjsgfQorICAgICAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZl
VG9Db21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IGZhbHNlOworICAgIH07CisKKyAgICBzdHJ1Y3Qg
SGFzaFRyYWl0cyA6IFNpbXBsZUNsYXNzSGFzaFRyYWl0czxTb3VyY2VDb2RlS2V5PiB7CisgICAg
ICAgIHN0YXRpYyBjb25zdCBib29sIGhhc0lzRW1wdHlWYWx1ZUZ1bmN0aW9uID0gdHJ1ZTsKKyAg
ICAgICAgc3RhdGljIGJvb2wgaXNFbXB0eVZhbHVlKGNvbnN0IFNvdXJjZUNvZGVLZXkmIGtleSkg
eyByZXR1cm4ga2V5LmlzTnVsbCgpOyB9CisgICAgfTsKKwogcHJpdmF0ZToKICAgICBTb3VyY2VD
b2RlIG1fc291cmNlQ29kZTsKICAgICBTdHJpbmcgbV9uYW1lOwotICAgIHVuc2lnbmVkIG1fZmxh
Z3M7CisgICAgU291cmNlQ29kZUZsYWdzIG1fZmxhZ3M7CiAgICAgdW5zaWduZWQgbV9oYXNoOwog
fTsKIAotc3RydWN0IFNvdXJjZUNvZGVLZXlIYXNoIHsKLSAgICBzdGF0aWMgdW5zaWduZWQgaGFz
aChjb25zdCBTb3VyY2VDb2RlS2V5JiBrZXkpIHsgcmV0dXJuIGtleS5oYXNoKCk7IH0KLSAgICBz
dGF0aWMgYm9vbCBlcXVhbChjb25zdCBTb3VyY2VDb2RlS2V5JiBhLCBjb25zdCBTb3VyY2VDb2Rl
S2V5JiBiKSB7IHJldHVybiBhID09IGI7IH0KLSAgICBzdGF0aWMgY29uc3QgYm9vbCBzYWZlVG9D
b21wYXJlVG9FbXB0eU9yRGVsZXRlZCA9IGZhbHNlOwotfTsKLQotc3RydWN0IFNvdXJjZUNvZGVL
ZXlIYXNoVHJhaXRzIDogU2ltcGxlQ2xhc3NIYXNoVHJhaXRzPFNvdXJjZUNvZGVLZXk+IHsKLSAg
ICBzdGF0aWMgY29uc3QgYm9vbCBoYXNJc0VtcHR5VmFsdWVGdW5jdGlvbiA9IHRydWU7Ci0gICAg
c3RhdGljIGJvb2wgaXNFbXB0eVZhbHVlKGNvbnN0IFNvdXJjZUNvZGVLZXkmIHNvdXJjZUNvZGVL
ZXkpIHsgcmV0dXJuIHNvdXJjZUNvZGVLZXkuaXNOdWxsKCk7IH0KLX07Ci0KIH0KIAogI2VuZGlm
IC8vIFNvdXJjZUNvZGVLZXlfaApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Bh
cnNlci9TeW50YXhDaGVja2VyLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1N5bnRh
eENoZWNrZXIuaAppbmRleCA2ZDYwM2IwZjM3ZGYyYWUxNmRmYWUzNTU0ZmU0ZDI5NzQ4ZDkwN2M1
Li5iZjBkOGZmZjcyYjNiZTYyZmUyM2VlM2ExMmU0N2Y5YjhjNDllMjUwIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvcGFyc2VyL1N5bnRheENoZWNrZXIuaAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcGFyc2VyL1N5bnRheENoZWNrZXIuaApAQCAtMTU3LDcgKzE1Nyw3IEBA
IGNsYXNzIFN5bnRheENoZWNrZXIgewogICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0ZUxvZ2ljYWxO
b3QoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgRXhwcmVzc2lvblR5cGUpIHsgcmV0dXJuIFVuYXJ5
RXhwcjsgfQogICAgIEV4cHJlc3Npb25UeXBlIGNyZWF0ZVVuYXJ5UGx1cyhjb25zdCBKU1Rva2Vu
TG9jYXRpb24mLCBFeHByZXNzaW9uVHlwZSkgeyByZXR1cm4gVW5hcnlFeHByOyB9CiAgICAgRXhw
cmVzc2lvblR5cGUgY3JlYXRlVm9pZChjb25zdCBKU1Rva2VuTG9jYXRpb24mLCBFeHByZXNzaW9u
VHlwZSkgeyByZXR1cm4gVW5hcnlFeHByOyB9Ci0gICAgRXhwcmVzc2lvblR5cGUgY3JlYXRlVGhp
c0V4cHIoY29uc3QgSlNUb2tlbkxvY2F0aW9uJiwgVGhpc1REWk1vZGUpIHsgcmV0dXJuIFRoaXNF
eHByOyB9CisgICAgRXhwcmVzc2lvblR5cGUgY3JlYXRlVGhpc0V4cHIoY29uc3QgSlNUb2tlbkxv
Y2F0aW9uJikgeyByZXR1cm4gVGhpc0V4cHI7IH0KICAgICBFeHByZXNzaW9uVHlwZSBjcmVhdGVT
dXBlckV4cHIoY29uc3QgSlNUb2tlbkxvY2F0aW9uJikgeyByZXR1cm4gU3VwZXJFeHByOyB9CiAg
ICAgRXhwcmVzc2lvblR5cGUgY3JlYXRlTmV3VGFyZ2V0RXhwcihjb25zdCBKU1Rva2VuTG9jYXRp
b24mKSB7IHJldHVybiBOZXdUYXJnZXRFeHByOyB9CiAgICAgQUxXQVlTX0lOTElORSBib29sIGlz
TmV3VGFyZ2V0KEV4cHJlc3Npb25UeXBlIHR5cGUpIHsgcmV0dXJuIHR5cGUgPT0gTmV3VGFyZ2V0
RXhwcjsgfQpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29kZUNh
Y2hlLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvZGVDYWNoZS5jcHAKaW5k
ZXggZDAwNGYzNzE1MzZlMTAzOGE1MGVkMjMzODFjYmVmZjU0ZmQxZDU5MS4uOTZiYmQxNzFhZTMw
MTg5ZmQwN2ZlMTBlN2Q4MjVlZGI1YTMxMjhhMSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvQ29kZUNhY2hlLmNwcAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Db2RlQ2FjaGUuY3BwCkBAIC02NCwyNiArNjQsMjggQEAgdGVtcGxhdGUgPHR5cGVu
YW1lIFQ+IHN0cnVjdCBDYWNoZVR5cGVzIHsgfTsKIAogdGVtcGxhdGUgPD4gc3RydWN0IENhY2hl
VHlwZXM8VW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrPiB7CiAgICAgdHlwZWRlZiBKU0M6OlByb2dy
YW1Ob2RlIFJvb3ROb2RlOwotICAgIHN0YXRpYyBjb25zdCBTb3VyY2VDb2RlS2V5OjpDb2RlVHlw
ZSBjb2RlVHlwZSA9IFNvdXJjZUNvZGVLZXk6OlByb2dyYW1UeXBlOworICAgIHN0YXRpYyBjb25z
dCBTb3VyY2VDb2RlVHlwZSBjb2RlVHlwZSA9IFNvdXJjZUNvZGVUeXBlOjpQcm9ncmFtVHlwZTsK
ICAgICBzdGF0aWMgY29uc3QgU291cmNlUGFyc2VNb2RlIHBhcnNlTW9kZSA9IFNvdXJjZVBhcnNl
TW9kZTo6UHJvZ3JhbU1vZGU7CiB9OwogCiB0ZW1wbGF0ZSA8PiBzdHJ1Y3QgQ2FjaGVUeXBlczxV
bmxpbmtlZEV2YWxDb2RlQmxvY2s+IHsKICAgICB0eXBlZGVmIEpTQzo6RXZhbE5vZGUgUm9vdE5v
ZGU7Ci0gICAgc3RhdGljIGNvbnN0IFNvdXJjZUNvZGVLZXk6OkNvZGVUeXBlIGNvZGVUeXBlID0g
U291cmNlQ29kZUtleTo6RXZhbFR5cGU7CisgICAgc3RhdGljIGNvbnN0IFNvdXJjZUNvZGVUeXBl
IGNvZGVUeXBlID0gU291cmNlQ29kZVR5cGU6OkV2YWxUeXBlOwogICAgIHN0YXRpYyBjb25zdCBT
b3VyY2VQYXJzZU1vZGUgcGFyc2VNb2RlID0gU291cmNlUGFyc2VNb2RlOjpQcm9ncmFtTW9kZTsK
IH07CiAKIHRlbXBsYXRlIDw+IHN0cnVjdCBDYWNoZVR5cGVzPFVubGlua2VkTW9kdWxlUHJvZ3Jh
bUNvZGVCbG9jaz4gewogICAgIHR5cGVkZWYgSlNDOjpNb2R1bGVQcm9ncmFtTm9kZSBSb290Tm9k
ZTsKLSAgICBzdGF0aWMgY29uc3QgU291cmNlQ29kZUtleTo6Q29kZVR5cGUgY29kZVR5cGUgPSBT
b3VyY2VDb2RlS2V5OjpNb2R1bGVUeXBlOworICAgIHN0YXRpYyBjb25zdCBTb3VyY2VDb2RlVHlw
ZSBjb2RlVHlwZSA9IFNvdXJjZUNvZGVUeXBlOjpNb2R1bGVUeXBlOwogICAgIHN0YXRpYyBjb25z
dCBTb3VyY2VQYXJzZU1vZGUgcGFyc2VNb2RlID0gU291cmNlUGFyc2VNb2RlOjpNb2R1bGVFdmFs
dWF0ZU1vZGU7CiB9OwogCiB0ZW1wbGF0ZSA8Y2xhc3MgVW5saW5rZWRDb2RlQmxvY2tUeXBlLCBj
bGFzcyBFeGVjdXRhYmxlVHlwZT4KLVVubGlua2VkQ29kZUJsb2NrVHlwZSogQ29kZUNhY2hlOjpn
ZXRHbG9iYWxDb2RlQmxvY2soVk0mIHZtLCBFeGVjdXRhYmxlVHlwZSogZXhlY3V0YWJsZSwgY29u
c3QgU291cmNlQ29kZSYgc291cmNlLCBKU1BhcnNlckJ1aWx0aW5Nb2RlIGJ1aWx0aW5Nb2RlLCBK
U1BhcnNlclN0cmljdE1vZGUgc3RyaWN0TW9kZSwgVGhpc1REWk1vZGUgdGhpc1REWk1vZGUsIERl
YnVnZ2VyTW9kZSBkZWJ1Z2dlck1vZGUsIFBhcnNlckVycm9yJiBlcnJvciwgRXZhbENvbnRleHRU
eXBlIGV2YWxDb250ZXh0VHlwZSwgY29uc3QgVmFyaWFibGVFbnZpcm9ubWVudCogdmFyaWFibGVz
VW5kZXJURFopCitVbmxpbmtlZENvZGVCbG9ja1R5cGUqIENvZGVDYWNoZTo6Z2V0R2xvYmFsQ29k
ZUJsb2NrKFZNJiB2bSwgRXhlY3V0YWJsZVR5cGUqIGV4ZWN1dGFibGUsIGNvbnN0IFNvdXJjZUNv
ZGUmIHNvdXJjZSwgSlNQYXJzZXJCdWlsdGluTW9kZSBidWlsdGluTW9kZSwgSlNQYXJzZXJTdHJp
Y3RNb2RlIHN0cmljdE1vZGUsIERlYnVnZ2VyTW9kZSBkZWJ1Z2dlck1vZGUsIFBhcnNlckVycm9y
JiBlcnJvciwgRXZhbENvbnRleHRUeXBlIGV2YWxDb250ZXh0VHlwZSwgY29uc3QgVmFyaWFibGVF
bnZpcm9ubWVudCogdmFyaWFibGVzVW5kZXJURFopCiB7Ci0gICAgU291cmNlQ29kZUtleSBrZXkg
PSBTb3VyY2VDb2RlS2V5KHNvdXJjZSwgU3RyaW5nKCksIENhY2hlVHlwZXM8VW5saW5rZWRDb2Rl
QmxvY2tUeXBlPjo6Y29kZVR5cGUsIGJ1aWx0aW5Nb2RlLCBzdHJpY3RNb2RlLCB0aGlzVERaTW9k
ZSk7CisgICAgRGVyaXZlZENvbnRleHRUeXBlIGRlcml2ZWRDb250ZXh0VHlwZSA9IGV4ZWN1dGFi
bGUtPmRlcml2ZWRDb250ZXh0VHlwZSgpOworICAgIGJvb2wgaXNBcnJvd0Z1bmN0aW9uQ29udGV4
dCA9IGV4ZWN1dGFibGUtPmlzQXJyb3dGdW5jdGlvbkNvbnRleHQoKTsKKyAgICBTb3VyY2VDb2Rl
S2V5IGtleShzb3VyY2UsIFN0cmluZygpLCBDYWNoZVR5cGVzPFVubGlua2VkQ29kZUJsb2NrVHlw
ZT46OmNvZGVUeXBlLCBidWlsdGluTW9kZSwgc3RyaWN0TW9kZSwgZGVyaXZlZENvbnRleHRUeXBl
LCBldmFsQ29udGV4dFR5cGUsIGlzQXJyb3dGdW5jdGlvbkNvbnRleHQpOwogICAgIFNvdXJjZUNv
ZGVWYWx1ZSogY2FjaGUgPSBtX3NvdXJjZUNvZGUuZmluZENhY2hlQW5kVXBkYXRlQWdlKGtleSk7
CiAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBkbyBzb21ldGhpbmcgc21hcnQgZm9yIFREWiBpbnN0
ZWFkIG9mIGp1c3QgZGlzYWJsaW5nIGNhY2hpbmcuCiAgICAgLy8gaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTE1NDAxMApAQCAtMTAxLDkgKzEwMyw4IEBAIFVubGlua2Vk
Q29kZUJsb2NrVHlwZSogQ29kZUNhY2hlOjpnZXRHbG9iYWxDb2RlQmxvY2soVk0mIHZtLCBFeGVj
dXRhYmxlVHlwZSogZXhlCiAgICAgICAgIHJldHVybiB1bmxpbmtlZENvZGVCbG9jazsKICAgICB9
CiAgICAgdHlwZWRlZiB0eXBlbmFtZSBDYWNoZVR5cGVzPFVubGlua2VkQ29kZUJsb2NrVHlwZT46
OlJvb3ROb2RlIFJvb3ROb2RlOwotICAgIERlcml2ZWRDb250ZXh0VHlwZSBkZXJpdmVkQ29udGV4
dFR5cGUgPSBleGVjdXRhYmxlLT5kZXJpdmVkQ29udGV4dFR5cGUoKTsKICAgICBzdGQ6OnVuaXF1
ZV9wdHI8Um9vdE5vZGU+IHJvb3ROb2RlID0gcGFyc2U8Um9vdE5vZGU+KAotICAgICAgICAmdm0s
IHNvdXJjZSwgSWRlbnRpZmllcigpLCBidWlsdGluTW9kZSwgc3RyaWN0TW9kZSwgQ2FjaGVUeXBl
czxVbmxpbmtlZENvZGVCbG9ja1R5cGU+OjpwYXJzZU1vZGUsIFN1cGVyQmluZGluZzo6Tm90TmVl
ZGVkLCBlcnJvciwgbnVsbHB0ciwgQ29uc3RydWN0b3JLaW5kOjpOb25lLCB0aGlzVERaTW9kZSwg
ZGVyaXZlZENvbnRleHRUeXBlLCBldmFsQ29udGV4dFR5cGUpOworICAgICAgICAmdm0sIHNvdXJj
ZSwgSWRlbnRpZmllcigpLCBidWlsdGluTW9kZSwgc3RyaWN0TW9kZSwgQ2FjaGVUeXBlczxVbmxp
bmtlZENvZGVCbG9ja1R5cGU+OjpwYXJzZU1vZGUsIFN1cGVyQmluZGluZzo6Tm90TmVlZGVkLCBl
cnJvciwgbnVsbHB0ciwgQ29uc3RydWN0b3JLaW5kOjpOb25lLCBkZXJpdmVkQ29udGV4dFR5cGUs
IGV2YWxDb250ZXh0VHlwZSk7CiAgICAgaWYgKCFyb290Tm9kZSkKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAKQEAgLTEzNSwyNyArMTM2LDMxIEBAIFVubGlua2VkQ29kZUJsb2NrVHlwZSogQ29k
ZUNhY2hlOjpnZXRHbG9iYWxDb2RlQmxvY2soVk0mIHZtLCBFeGVjdXRhYmxlVHlwZSogZXhlCiBV
bmxpbmtlZFByb2dyYW1Db2RlQmxvY2sqIENvZGVDYWNoZTo6Z2V0UHJvZ3JhbUNvZGVCbG9jayhW
TSYgdm0sIFByb2dyYW1FeGVjdXRhYmxlKiBleGVjdXRhYmxlLCBjb25zdCBTb3VyY2VDb2RlJiBz
b3VyY2UsIEpTUGFyc2VyQnVpbHRpbk1vZGUgYnVpbHRpbk1vZGUsIEpTUGFyc2VyU3RyaWN0TW9k
ZSBzdHJpY3RNb2RlLCBEZWJ1Z2dlck1vZGUgZGVidWdnZXJNb2RlLCBQYXJzZXJFcnJvciYgZXJy
b3IpCiB7CiAgICAgVmFyaWFibGVFbnZpcm9ubWVudCBlbXB0eVBhcmVudFREWlZhcmlhYmxlczsK
LSAgICByZXR1cm4gZ2V0R2xvYmFsQ29kZUJsb2NrPFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jaz4o
dm0sIGV4ZWN1dGFibGUsIHNvdXJjZSwgYnVpbHRpbk1vZGUsIHN0cmljdE1vZGUsIFRoaXNURFpN
b2RlOjpDaGVja0lmTmVlZGVkLCBkZWJ1Z2dlck1vZGUsIGVycm9yLCBFdmFsQ29udGV4dFR5cGU6
Ok5vbmUsICZlbXB0eVBhcmVudFREWlZhcmlhYmxlcyk7CisgICAgcmV0dXJuIGdldEdsb2JhbENv
ZGVCbG9jazxVbmxpbmtlZFByb2dyYW1Db2RlQmxvY2s+KHZtLCBleGVjdXRhYmxlLCBzb3VyY2Us
IGJ1aWx0aW5Nb2RlLCBzdHJpY3RNb2RlLCBkZWJ1Z2dlck1vZGUsIGVycm9yLCBFdmFsQ29udGV4
dFR5cGU6Ok5vbmUsICZlbXB0eVBhcmVudFREWlZhcmlhYmxlcyk7CiB9CiAKLVVubGlua2VkRXZh
bENvZGVCbG9jayogQ29kZUNhY2hlOjpnZXRFdmFsQ29kZUJsb2NrKFZNJiB2bSwgRXZhbEV4ZWN1
dGFibGUqIGV4ZWN1dGFibGUsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZSwgSlNQYXJzZXJCdWls
dGluTW9kZSBidWlsdGluTW9kZSwgSlNQYXJzZXJTdHJpY3RNb2RlIHN0cmljdE1vZGUsIFRoaXNU
RFpNb2RlIHRoaXNURFpNb2RlLCBEZWJ1Z2dlck1vZGUgZGVidWdnZXJNb2RlLCBQYXJzZXJFcnJv
ciYgZXJyb3IsIEV2YWxDb250ZXh0VHlwZSBldmFsQ29udGV4dFR5cGUsIGNvbnN0IFZhcmlhYmxl
RW52aXJvbm1lbnQqIHZhcmlhYmxlc1VuZGVyVERaKQorVW5saW5rZWRFdmFsQ29kZUJsb2NrKiBD
b2RlQ2FjaGU6OmdldEV2YWxDb2RlQmxvY2soVk0mIHZtLCBFdmFsRXhlY3V0YWJsZSogZXhlY3V0
YWJsZSwgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBKU1BhcnNlckJ1aWx0aW5Nb2RlIGJ1aWx0
aW5Nb2RlLCBKU1BhcnNlclN0cmljdE1vZGUgc3RyaWN0TW9kZSwgRGVidWdnZXJNb2RlIGRlYnVn
Z2VyTW9kZSwgUGFyc2VyRXJyb3ImIGVycm9yLCBFdmFsQ29udGV4dFR5cGUgZXZhbENvbnRleHRU
eXBlLCBjb25zdCBWYXJpYWJsZUVudmlyb25tZW50KiB2YXJpYWJsZXNVbmRlclREWikKIHsKLSAg
ICByZXR1cm4gZ2V0R2xvYmFsQ29kZUJsb2NrPFVubGlua2VkRXZhbENvZGVCbG9jaz4odm0sIGV4
ZWN1dGFibGUsIHNvdXJjZSwgYnVpbHRpbk1vZGUsIHN0cmljdE1vZGUsIHRoaXNURFpNb2RlLCBk
ZWJ1Z2dlck1vZGUsIGVycm9yLCBldmFsQ29udGV4dFR5cGUsIHZhcmlhYmxlc1VuZGVyVERaKTsK
KyAgICByZXR1cm4gZ2V0R2xvYmFsQ29kZUJsb2NrPFVubGlua2VkRXZhbENvZGVCbG9jaz4odm0s
IGV4ZWN1dGFibGUsIHNvdXJjZSwgYnVpbHRpbk1vZGUsIHN0cmljdE1vZGUsIGRlYnVnZ2VyTW9k
ZSwgZXJyb3IsIGV2YWxDb250ZXh0VHlwZSwgdmFyaWFibGVzVW5kZXJURFopOwogfQogCiBVbmxp
bmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2sqIENvZGVDYWNoZTo6Z2V0TW9kdWxlUHJvZ3JhbUNv
ZGVCbG9jayhWTSYgdm0sIE1vZHVsZVByb2dyYW1FeGVjdXRhYmxlKiBleGVjdXRhYmxlLCBjb25z
dCBTb3VyY2VDb2RlJiBzb3VyY2UsIEpTUGFyc2VyQnVpbHRpbk1vZGUgYnVpbHRpbk1vZGUsIERl
YnVnZ2VyTW9kZSBkZWJ1Z2dlck1vZGUsIFBhcnNlckVycm9yJiBlcnJvcikKIHsKICAgICBWYXJp
YWJsZUVudmlyb25tZW50IGVtcHR5UGFyZW50VERaVmFyaWFibGVzOwotICAgIHJldHVybiBnZXRH
bG9iYWxDb2RlQmxvY2s8VW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrPih2bSwgZXhlY3V0
YWJsZSwgc291cmNlLCBidWlsdGluTW9kZSwgSlNQYXJzZXJTdHJpY3RNb2RlOjpTdHJpY3QsIFRo
aXNURFpNb2RlOjpDaGVja0lmTmVlZGVkLCBkZWJ1Z2dlck1vZGUsIGVycm9yLCBFdmFsQ29udGV4
dFR5cGU6Ok5vbmUsICZlbXB0eVBhcmVudFREWlZhcmlhYmxlcyk7CisgICAgcmV0dXJuIGdldEds
b2JhbENvZGVCbG9jazxVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2s+KHZtLCBleGVjdXRh
YmxlLCBzb3VyY2UsIGJ1aWx0aW5Nb2RlLCBKU1BhcnNlclN0cmljdE1vZGU6OlN0cmljdCwgZGVi
dWdnZXJNb2RlLCBlcnJvciwgRXZhbENvbnRleHRUeXBlOjpOb25lLCAmZW1wdHlQYXJlbnRURFpW
YXJpYWJsZXMpOwogfQogCiAvLyBGSVhNRTogVGhlcmUncyBubyBuZWVkIHRvIGFkZCB0aGUgZnVu
Y3Rpb24ncyBuYW1lIHRvIHRoZSBrZXkgaGVyZS4gSXQncyBhbHJlYWR5IGluIHRoZSBzb3VyY2Ug
Y29kZS4KIFVubGlua2VkRnVuY3Rpb25FeGVjdXRhYmxlKiBDb2RlQ2FjaGU6OmdldEZ1bmN0aW9u
RXhlY3V0YWJsZUZyb21HbG9iYWxDb2RlKFZNJiB2bSwgY29uc3QgSWRlbnRpZmllciYgbmFtZSwg
Y29uc3QgU291cmNlQ29kZSYgc291cmNlLCBQYXJzZXJFcnJvciYgZXJyb3IpCiB7Ci0gICAgU291
cmNlQ29kZUtleSBrZXkgPSBTb3VyY2VDb2RlS2V5KAotICAgICAgICBzb3VyY2UsIG5hbWUuc3Ry
aW5nKCksIFNvdXJjZUNvZGVLZXk6OkZ1bmN0aW9uVHlwZSwgCi0gICAgICAgIEpTUGFyc2VyQnVp
bHRpbk1vZGU6Ok5vdEJ1aWx0aW4sIAotICAgICAgICBKU1BhcnNlclN0cmljdE1vZGU6Ok5vdFN0
cmljdCk7CisgICAgYm9vbCBpc0Fycm93RnVuY3Rpb25Db250ZXh0ID0gZmFsc2U7CisgICAgU291
cmNlQ29kZUtleSBrZXkoCisgICAgICAgIHNvdXJjZSwgbmFtZS5zdHJpbmcoKSwgU291cmNlQ29k
ZVR5cGU6OkZ1bmN0aW9uVHlwZSwKKyAgICAgICAgSlNQYXJzZXJCdWlsdGluTW9kZTo6Tm90QnVp
bHRpbiwKKyAgICAgICAgSlNQYXJzZXJTdHJpY3RNb2RlOjpOb3RTdHJpY3QsCisgICAgICAgIERl
cml2ZWRDb250ZXh0VHlwZTo6Tm9uZSwKKyAgICAgICAgRXZhbENvbnRleHRUeXBlOjpOb25lLAor
ICAgICAgICBpc0Fycm93RnVuY3Rpb25Db250ZXh0KTsKICAgICBTb3VyY2VDb2RlVmFsdWUqIGNh
Y2hlID0gbV9zb3VyY2VDb2RlLmZpbmRDYWNoZUFuZFVwZGF0ZUFnZShrZXkpOwogICAgIGlmIChj
YWNoZSkgewogICAgICAgICBVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSogZXhlY3V0YWJsZSA9
IGpzQ2FzdDxVbmxpbmtlZEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGNhY2hlLT5jZWxsLmdldCgpKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0NvZGVDYWNoZS5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29kZUNhY2hlLmgKaW5kZXggMDA3MGQ5MDJm
OWM3MmNhZWEwNjQ4Nzg1NzRiZTY4ODBjOTBlODJhNC4uNGQ0Y2Y5ZjA0NTNmNmQyMGIxZDY2Yzdh
M2JmOWQyZjIxNzYxMTc3ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvQ29kZUNhY2hlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvQ29kZUNh
Y2hlLmgKQEAgLTY4LDcgKzY4LDggQEAgc3RydWN0IFNvdXJjZUNvZGVWYWx1ZSB7CiAKIGNsYXNz
IENvZGVDYWNoZU1hcCB7CiBwdWJsaWM6Ci0gICAgdHlwZWRlZiBIYXNoTWFwPFNvdXJjZUNvZGVL
ZXksIFNvdXJjZUNvZGVWYWx1ZSwgU291cmNlQ29kZUtleUhhc2gsIFNvdXJjZUNvZGVLZXlIYXNo
VHJhaXRzPiBNYXBUeXBlOworICAgIHR5cGVkZWYgU291cmNlQ29kZUtleSBLZXk7CisgICAgdHlw
ZWRlZiBIYXNoTWFwPEtleSwgU291cmNlQ29kZVZhbHVlLCBLZXk6Okhhc2gsIEtleTo6SGFzaFRy
YWl0cz4gTWFwVHlwZTsKICAgICB0eXBlZGVmIE1hcFR5cGU6Oml0ZXJhdG9yIGl0ZXJhdG9yOwog
ICAgIHR5cGVkZWYgTWFwVHlwZTo6QWRkUmVzdWx0IEFkZFJlc3VsdDsKIApAQCAtODIsNyArODMs
NyBAQCBjbGFzcyBDb2RlQ2FjaGVNYXAgewogICAgIHsKICAgICB9CiAKLSAgICBTb3VyY2VDb2Rl
VmFsdWUqIGZpbmRDYWNoZUFuZFVwZGF0ZUFnZShjb25zdCBTb3VyY2VDb2RlS2V5JiBrZXkpCisg
ICAgU291cmNlQ29kZVZhbHVlKiBmaW5kQ2FjaGVBbmRVcGRhdGVBZ2UoY29uc3QgS2V5JiBrZXkp
CiAgICAgewogICAgICAgICBwcnVuZSgpOwogCkBAIC0xMTEsNyArMTEyLDcgQEAgY2xhc3MgQ29k
ZUNhY2hlTWFwIHsKICAgICAgICAgcmV0dXJuICZmaW5kUmVzdWx0LT52YWx1ZTsKICAgICB9CiAK
LSAgICBBZGRSZXN1bHQgYWRkQ2FjaGUoY29uc3QgU291cmNlQ29kZUtleSYga2V5LCBjb25zdCBT
b3VyY2VDb2RlVmFsdWUmIHZhbHVlKQorICAgIEFkZFJlc3VsdCBhZGRDYWNoZShjb25zdCBLZXkm
IGtleSwgY29uc3QgU291cmNlQ29kZVZhbHVlJiB2YWx1ZSkKICAgICB7CiAgICAgICAgIHBydW5l
KCk7CiAKQEAgLTE4OCw3ICsxODksNyBAQCBjbGFzcyBDb2RlQ2FjaGUgewogICAgIH5Db2RlQ2Fj
aGUoKTsKIAogICAgIFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jayogZ2V0UHJvZ3JhbUNvZGVCbG9j
ayhWTSYsIFByb2dyYW1FeGVjdXRhYmxlKiwgY29uc3QgU291cmNlQ29kZSYsIEpTUGFyc2VyQnVp
bHRpbk1vZGUsIEpTUGFyc2VyU3RyaWN0TW9kZSwgRGVidWdnZXJNb2RlLCBQYXJzZXJFcnJvciYp
OwotICAgIFVubGlua2VkRXZhbENvZGVCbG9jayogZ2V0RXZhbENvZGVCbG9jayhWTSYsIEV2YWxF
eGVjdXRhYmxlKiwgY29uc3QgU291cmNlQ29kZSYsIEpTUGFyc2VyQnVpbHRpbk1vZGUsIEpTUGFy
c2VyU3RyaWN0TW9kZSwgVGhpc1REWk1vZGUsIERlYnVnZ2VyTW9kZSwgUGFyc2VyRXJyb3ImLCBF
dmFsQ29udGV4dFR5cGUsIGNvbnN0IFZhcmlhYmxlRW52aXJvbm1lbnQqKTsKKyAgICBVbmxpbmtl
ZEV2YWxDb2RlQmxvY2sqIGdldEV2YWxDb2RlQmxvY2soVk0mLCBFdmFsRXhlY3V0YWJsZSosIGNv
bnN0IFNvdXJjZUNvZGUmLCBKU1BhcnNlckJ1aWx0aW5Nb2RlLCBKU1BhcnNlclN0cmljdE1vZGUs
IERlYnVnZ2VyTW9kZSwgUGFyc2VyRXJyb3ImLCBFdmFsQ29udGV4dFR5cGUsIGNvbnN0IFZhcmlh
YmxlRW52aXJvbm1lbnQqKTsKICAgICBVbmxpbmtlZE1vZHVsZVByb2dyYW1Db2RlQmxvY2sqIGdl
dE1vZHVsZVByb2dyYW1Db2RlQmxvY2soVk0mLCBNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZSosIGNv
bnN0IFNvdXJjZUNvZGUmLCBKU1BhcnNlckJ1aWx0aW5Nb2RlLCBEZWJ1Z2dlck1vZGUsIFBhcnNl
ckVycm9yJik7CiAgICAgVW5saW5rZWRGdW5jdGlvbkV4ZWN1dGFibGUqIGdldEZ1bmN0aW9uRXhl
Y3V0YWJsZUZyb21HbG9iYWxDb2RlKFZNJiwgY29uc3QgSWRlbnRpZmllciYsIGNvbnN0IFNvdXJj
ZUNvZGUmLCBQYXJzZXJFcnJvciYpOwogCkBAIC0xOTksNyArMjAwLDcgQEAgY2xhc3MgQ29kZUNh
Y2hlIHsKIAogcHJpdmF0ZToKICAgICB0ZW1wbGF0ZSA8Y2xhc3MgVW5saW5rZWRDb2RlQmxvY2tU
eXBlLCBjbGFzcyBFeGVjdXRhYmxlVHlwZT4gCi0gICAgVW5saW5rZWRDb2RlQmxvY2tUeXBlKiBn
ZXRHbG9iYWxDb2RlQmxvY2soVk0mLCBFeGVjdXRhYmxlVHlwZSosIGNvbnN0IFNvdXJjZUNvZGUm
LCBKU1BhcnNlckJ1aWx0aW5Nb2RlLCBKU1BhcnNlclN0cmljdE1vZGUsIFRoaXNURFpNb2RlLCBE
ZWJ1Z2dlck1vZGUsIFBhcnNlckVycm9yJiwgRXZhbENvbnRleHRUeXBlLCBjb25zdCBWYXJpYWJs
ZUVudmlyb25tZW50Kik7CisgICAgVW5saW5rZWRDb2RlQmxvY2tUeXBlKiBnZXRHbG9iYWxDb2Rl
QmxvY2soVk0mLCBFeGVjdXRhYmxlVHlwZSosIGNvbnN0IFNvdXJjZUNvZGUmLCBKU1BhcnNlckJ1
aWx0aW5Nb2RlLCBKU1BhcnNlclN0cmljdE1vZGUsIERlYnVnZ2VyTW9kZSwgUGFyc2VyRXJyb3Im
LCBFdmFsQ29udGV4dFR5cGUsIGNvbnN0IFZhcmlhYmxlRW52aXJvbm1lbnQqKTsKIAogICAgIENv
ZGVDYWNoZU1hcCBtX3NvdXJjZUNvZGU7CiB9OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRXhlY3V0YWJsZS5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVu
dGltZS9FeGVjdXRhYmxlLmNwcAppbmRleCA5ZmNkZGY0YWRiZDIwMTcwZmFkMjBlMmUwY2JiZDkw
NTA5NzhkOGI1Li40OWQ5Zjk4NTYwOTdjNGNlM2U3ZGQwZWFjNjg2NzgwYWE0MzkzNzRjIDEwMDY0
NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmNwcApAQCAtNDI4LDcg
KzQyOCw3IEBAIEpTT2JqZWN0KiBTY3JpcHRFeGVjdXRhYmxlOjpwcmVwYXJlRm9yRXhlY3V0aW9u
SW1wbCgKIAogY29uc3QgQ2xhc3NJbmZvIEV2YWxFeGVjdXRhYmxlOjpzX2luZm8gPSB7ICJFdmFs
RXhlY3V0YWJsZSIsICZTY3JpcHRFeGVjdXRhYmxlOjpzX2luZm8sIDAsIENSRUFURV9NRVRIT0Rf
VEFCTEUoRXZhbEV4ZWN1dGFibGUpIH07CiAKLUV2YWxFeGVjdXRhYmxlKiBFdmFsRXhlY3V0YWJs
ZTo6Y3JlYXRlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBib29s
IGlzSW5TdHJpY3RDb250ZXh0LCBUaGlzVERaTW9kZSB0aGlzVERaTW9kZSwgRGVyaXZlZENvbnRl
eHRUeXBlIGRlcml2ZWRDb250ZXh0VHlwZSwgYm9vbCBpc0Fycm93RnVuY3Rpb25Db250ZXh0LCBF
dmFsQ29udGV4dFR5cGUgZXZhbENvbnRleHRUeXBlLCBjb25zdCBWYXJpYWJsZUVudmlyb25tZW50
KiB2YXJpYWJsZXNVbmRlclREWikKK0V2YWxFeGVjdXRhYmxlKiBFdmFsRXhlY3V0YWJsZTo6Y3Jl
YXRlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgU291cmNlQ29kZSYgc291cmNlLCBib29sIGlzSW5T
dHJpY3RDb250ZXh0LCBEZXJpdmVkQ29udGV4dFR5cGUgZGVyaXZlZENvbnRleHRUeXBlLCBib29s
IGlzQXJyb3dGdW5jdGlvbkNvbnRleHQsIEV2YWxDb250ZXh0VHlwZSBldmFsQ29udGV4dFR5cGUs
IGNvbnN0IFZhcmlhYmxlRW52aXJvbm1lbnQqIHZhcmlhYmxlc1VuZGVyVERaKQogewogICAgIEpT
R2xvYmFsT2JqZWN0KiBnbG9iYWxPYmplY3QgPSBleGVjLT5sZXhpY2FsR2xvYmFsT2JqZWN0KCk7
CiAgICAgaWYgKCFnbG9iYWxPYmplY3QtPmV2YWxFbmFibGVkKCkpIHsKQEAgLTQzOSw3ICs0Mzks
NyBAQCBFdmFsRXhlY3V0YWJsZSogRXZhbEV4ZWN1dGFibGU6OmNyZWF0ZShFeGVjU3RhdGUqIGV4
ZWMsIGNvbnN0IFNvdXJjZUNvZGUmIHNvdXJjZQogICAgIEV2YWxFeGVjdXRhYmxlKiBleGVjdXRh
YmxlID0gbmV3IChOb3ROdWxsLCBhbGxvY2F0ZUNlbGw8RXZhbEV4ZWN1dGFibGU+KCpleGVjLT5o
ZWFwKCkpKSBFdmFsRXhlY3V0YWJsZShleGVjLCBzb3VyY2UsIGlzSW5TdHJpY3RDb250ZXh0LCBk
ZXJpdmVkQ29udGV4dFR5cGUsIGlzQXJyb3dGdW5jdGlvbkNvbnRleHQsIGV2YWxDb250ZXh0VHlw
ZSk7CiAgICAgZXhlY3V0YWJsZS0+ZmluaXNoQ3JlYXRpb24oZXhlYy0+dm0oKSk7CiAKLSAgICBV
bmxpbmtlZEV2YWxDb2RlQmxvY2sqIHVubGlua2VkRXZhbENvZGUgPSBnbG9iYWxPYmplY3QtPmNy
ZWF0ZUV2YWxDb2RlQmxvY2soZXhlYywgZXhlY3V0YWJsZSwgdGhpc1REWk1vZGUsIHZhcmlhYmxl
c1VuZGVyVERaKTsKKyAgICBVbmxpbmtlZEV2YWxDb2RlQmxvY2sqIHVubGlua2VkRXZhbENvZGUg
PSBnbG9iYWxPYmplY3QtPmNyZWF0ZUV2YWxDb2RlQmxvY2soZXhlYywgZXhlY3V0YWJsZSwgdmFy
aWFibGVzVW5kZXJURFopOwogICAgIGlmICghdW5saW5rZWRFdmFsQ29kZSkKICAgICAgICAgcmV0
dXJuIDA7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1
dGFibGUuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuaAppbmRl
eCAwMTZmNzJhMDI3OGU0Y2ExYTcwMmQzN2FjMzQyMzc4YjdmNGU5MzhmLi5iNzlhNTliZThiMmQ4
NTQ5NmZmNzI3YWY2YzI4NzczYzU4YzMwYjdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9FeGVjdXRhYmxlLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRXhlY3V0YWJsZS5oCkBAIC00MzIsNyArNDMyLDcgQEAgY2xhc3MgRXZhbEV4ZWN1dGFi
bGUgZmluYWwgOiBwdWJsaWMgU2NyaXB0RXhlY3V0YWJsZSB7CiAgICAgICAgIHJldHVybiBtX2V2
YWxDb2RlQmxvY2suZ2V0KCk7CiAgICAgfQogCi0gICAgc3RhdGljIEV2YWxFeGVjdXRhYmxlKiBj
cmVhdGUoRXhlY1N0YXRlKiwgY29uc3QgU291cmNlQ29kZSYsIGJvb2wgaXNJblN0cmljdENvbnRl
eHQsIFRoaXNURFpNb2RlLCBEZXJpdmVkQ29udGV4dFR5cGUsIGJvb2wgaXNBcnJvd0Z1bmN0aW9u
Q29udGV4dCwgRXZhbENvbnRleHRUeXBlLCBjb25zdCBWYXJpYWJsZUVudmlyb25tZW50Kik7Cisg
ICAgc3RhdGljIEV2YWxFeGVjdXRhYmxlKiBjcmVhdGUoRXhlY1N0YXRlKiwgY29uc3QgU291cmNl
Q29kZSYsIGJvb2wgaXNJblN0cmljdENvbnRleHQsIERlcml2ZWRDb250ZXh0VHlwZSwgYm9vbCBp
c0Fycm93RnVuY3Rpb25Db250ZXh0LCBFdmFsQ29udGV4dFR5cGUsIGNvbnN0IFZhcmlhYmxlRW52
aXJvbm1lbnQqKTsKIAogICAgIFBhc3NSZWZQdHI8SklUQ29kZT4gZ2VuZXJhdGVkSklUQ29kZSgp
CiAgICAgewpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9i
YWxPYmplY3QuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmpl
Y3QuY3BwCmluZGV4IDBkMzcxNWU0OWMwMjQxZmY0YzA0MDAwOWZlZjdiNjI1NDAxMjYzNGIuLjQ0
NjM0NjZhNjQ3ODRiNjIxM2Y5NzQ5Mzg2YTJhZmZjZWU5M2RlMjkgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAKQEAgLTEyMzEsNyArMTIz
MSw3IEBAIFVubGlua2VkUHJvZ3JhbUNvZGVCbG9jayogSlNHbG9iYWxPYmplY3Q6OmNyZWF0ZVBy
b2dyYW1Db2RlQmxvY2soQ2FsbEZyYW1lKiBjYWxsCiAgICAgcmV0dXJuIHVubGlua2VkQ29kZUJs
b2NrOwogfQogCi1VbmxpbmtlZEV2YWxDb2RlQmxvY2sqIEpTR2xvYmFsT2JqZWN0OjpjcmVhdGVF
dmFsQ29kZUJsb2NrKENhbGxGcmFtZSogY2FsbEZyYW1lLCBFdmFsRXhlY3V0YWJsZSogZXhlY3V0
YWJsZSwgVGhpc1REWk1vZGUgdGhpc1REWk1vZGUsIGNvbnN0IFZhcmlhYmxlRW52aXJvbm1lbnQq
IHZhcmlhYmxlc1VuZGVyVERaKQorVW5saW5rZWRFdmFsQ29kZUJsb2NrKiBKU0dsb2JhbE9iamVj
dDo6Y3JlYXRlRXZhbENvZGVCbG9jayhDYWxsRnJhbWUqIGNhbGxGcmFtZSwgRXZhbEV4ZWN1dGFi
bGUqIGV4ZWN1dGFibGUsIGNvbnN0IFZhcmlhYmxlRW52aXJvbm1lbnQqIHZhcmlhYmxlc1VuZGVy
VERaKQogewogICAgIFBhcnNlckVycm9yIGVycm9yOwogICAgIEpTUGFyc2VyU3RyaWN0TW9kZSBz
dHJpY3RNb2RlID0gZXhlY3V0YWJsZS0+aXNTdHJpY3RNb2RlKCkgPyBKU1BhcnNlclN0cmljdE1v
ZGU6OlN0cmljdCA6IEpTUGFyc2VyU3RyaWN0TW9kZTo6Tm90U3RyaWN0OwpAQCAtMTIzOSw3ICsx
MjM5LDcgQEAgVW5saW5rZWRFdmFsQ29kZUJsb2NrKiBKU0dsb2JhbE9iamVjdDo6Y3JlYXRlRXZh
bENvZGVCbG9jayhDYWxsRnJhbWUqIGNhbGxGcmFtZSwKICAgICBFdmFsQ29udGV4dFR5cGUgZXZh
bENvbnRleHRUeXBlID0gZXhlY3V0YWJsZS0+ZXhlY3V0YWJsZUluZm8oKS5ldmFsQ29udGV4dFR5
cGUoKTsKICAgICAKICAgICBVbmxpbmtlZEV2YWxDb2RlQmxvY2sqIHVubGlua2VkQ29kZUJsb2Nr
ID0gdm0oKS5jb2RlQ2FjaGUoKS0+Z2V0RXZhbENvZGVCbG9jaygKLSAgICAgICAgdm0oKSwgZXhl
Y3V0YWJsZSwgZXhlY3V0YWJsZS0+c291cmNlKCksIEpTUGFyc2VyQnVpbHRpbk1vZGU6Ok5vdEJ1
aWx0aW4sIHN0cmljdE1vZGUsIHRoaXNURFpNb2RlLCBkZWJ1Z2dlck1vZGUsIGVycm9yLCBldmFs
Q29udGV4dFR5cGUsIHZhcmlhYmxlc1VuZGVyVERaKTsKKyAgICAgICAgdm0oKSwgZXhlY3V0YWJs
ZSwgZXhlY3V0YWJsZS0+c291cmNlKCksIEpTUGFyc2VyQnVpbHRpbk1vZGU6Ok5vdEJ1aWx0aW4s
IHN0cmljdE1vZGUsIGRlYnVnZ2VyTW9kZSwgZXJyb3IsIGV2YWxDb250ZXh0VHlwZSwgdmFyaWFi
bGVzVW5kZXJURFopOwogCiAgICAgaWYgKGhhc0RlYnVnZ2VyKCkpCiAgICAgICAgIGRlYnVnZ2Vy
KCktPnNvdXJjZVBhcnNlZChjYWxsRnJhbWUsIGV4ZWN1dGFibGUtPnNvdXJjZSgpLnByb3ZpZGVy
KCksIGVycm9yLmxpbmUoKSwgZXJyb3IubWVzc2FnZSgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9K
YXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5oCmluZGV4IDk2YWVjZWM1MGZiNGEyNzNhNTA1
YzZkYTA4NmNiNmY1NjZmMTFmYTAuLjJlNTIzNDRkY2YyOWMzYzc5YmQ3OWM2ZGQ4ODJjZTE3ZjVk
NzdlMTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFs
T2JqZWN0LmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxPYmpl
Y3QuaApAQCAtOTQsNyArOTQsNiBAQCBjbGFzcyBSZWdFeHBQcm90b3R5cGU7CiBjbGFzcyBTb3Vy
Y2VDb2RlOwogY2xhc3MgVW5saW5rZWRNb2R1bGVQcm9ncmFtQ29kZUJsb2NrOwogY2xhc3MgVmFy
aWFibGVFbnZpcm9ubWVudDsKLWVudW0gY2xhc3MgVGhpc1REWk1vZGU7CiBzdHJ1Y3QgQWN0aXZh
dGlvblN0YWNrTm9kZTsKIHN0cnVjdCBIYXNoVGFibGU7CiAKQEAgLTc2OCw3ICs3NjcsNyBAQCBj
bGFzcyBKU0dsb2JhbE9iamVjdCA6IHB1YmxpYyBKU1NlZ21lbnRlZFZhcmlhYmxlT2JqZWN0IHsK
ICAgICB1bnNpZ25lZCB3ZWFrUmFuZG9tSW50ZWdlcigpIHsgcmV0dXJuIG1fd2Vha1JhbmRvbS5n
ZXRVaW50MzIoKTsgfQogCiAgICAgVW5saW5rZWRQcm9ncmFtQ29kZUJsb2NrKiBjcmVhdGVQcm9n
cmFtQ29kZUJsb2NrKENhbGxGcmFtZSosIFByb2dyYW1FeGVjdXRhYmxlKiwgSlNPYmplY3QqKiBl
eGNlcHRpb24pOwotICAgIFVubGlua2VkRXZhbENvZGVCbG9jayogY3JlYXRlRXZhbENvZGVCbG9j
ayhDYWxsRnJhbWUqLCBFdmFsRXhlY3V0YWJsZSosIFRoaXNURFpNb2RlLCBjb25zdCBWYXJpYWJs
ZUVudmlyb25tZW50Kik7CisgICAgVW5saW5rZWRFdmFsQ29kZUJsb2NrKiBjcmVhdGVFdmFsQ29k
ZUJsb2NrKENhbGxGcmFtZSosIEV2YWxFeGVjdXRhYmxlKiwgY29uc3QgVmFyaWFibGVFbnZpcm9u
bWVudCopOwogICAgIFVubGlua2VkTW9kdWxlUHJvZ3JhbUNvZGVCbG9jayogY3JlYXRlTW9kdWxl
UHJvZ3JhbUNvZGVCbG9jayhDYWxsRnJhbWUqLCBNb2R1bGVQcm9ncmFtRXhlY3V0YWJsZSopOwog
CiAgICAgYm9vbCBuZWVkc1NpdGVTcGVjaWZpY1F1aXJrcygpIGNvbnN0IHsgcmV0dXJuIG1fbmVl
ZHNTaXRlU3BlY2lmaWNRdWlya3M7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0RnVuY3Rpb25zLmNwcAppbmRleCA0Yjc3OGFjNmYy
MzMzOGQ5ZjE1Y2U5YmIzZWIxZjRiNGZjZTAzZjcwLi42NzMxODhiYzk2YzVlYmY5YjBkZGE0ZjAz
ZDE2YzVkNTFjYTgzOWEyIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU0dsb2JhbE9iamVjdEZ1bmN0aW9ucy5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNHbG9iYWxPYmplY3RGdW5jdGlvbnMuY3BwCkBAIC01ODksNyArNTg5LDcgQEAg
RW5jb2RlZEpTVmFsdWUgSlNDX0hPU1RfQ0FMTCBnbG9iYWxGdW5jRXZhbChFeGVjU3RhdGUqIGV4
ZWMpCiAKICAgICBKU0dsb2JhbE9iamVjdCogY2FsbGVlR2xvYmFsT2JqZWN0ID0gZXhlYy0+Y2Fs
bGVlKCktPmdsb2JhbE9iamVjdCgpOwogICAgIFZhcmlhYmxlRW52aXJvbm1lbnQgZW1wdHlURFpW
YXJpYWJsZXM7IC8vIEluZGlyZWN0IGV2YWwgZG9lcyBub3QgaGF2ZSBhY2Nlc3MgdG8gdGhlIGxl
eGljYWwgc2NvcGUuCi0gICAgRXZhbEV4ZWN1dGFibGUqIGV2YWwgPSBFdmFsRXhlY3V0YWJsZTo6
Y3JlYXRlKGV4ZWMsIG1ha2VTb3VyY2UocyksIGZhbHNlLCBUaGlzVERaTW9kZTo6Q2hlY2tJZk5l
ZWRlZCwgRGVyaXZlZENvbnRleHRUeXBlOjpOb25lLCBmYWxzZSwgRXZhbENvbnRleHRUeXBlOjpO
b25lLCAmZW1wdHlURFpWYXJpYWJsZXMpOworICAgIEV2YWxFeGVjdXRhYmxlKiBldmFsID0gRXZh
bEV4ZWN1dGFibGU6OmNyZWF0ZShleGVjLCBtYWtlU291cmNlKHMpLCBmYWxzZSwgRGVyaXZlZENv
bnRleHRUeXBlOjpOb25lLCBmYWxzZSwgRXZhbENvbnRleHRUeXBlOjpOb25lLCAmZW1wdHlURFpW
YXJpYWJsZXMpOwogICAgIGlmICghZXZhbCkKICAgICAgICAgcmV0dXJuIEpTVmFsdWU6OmVuY29k
ZShqc1VuZGVmaW5lZCgpKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3Rl
c3RzL3N0cmVzcy9jb2RlLWNhY2hlLWluY29ycmVjdC1jYWNoaW5nLmpzIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL3Rlc3RzL3N0cmVzcy9jb2RlLWNhY2hlLWluY29ycmVjdC1jYWNoaW5nLmpzCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjllNTFhZjc4Y2M5YzU0MWVlM2I1NTZmZmRiNWYyZDkyZWI0ZGUwZWQKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvdGVzdHMvc3RyZXNzL2NvZGUtY2Fj
aGUtaW5jb3JyZWN0LWNhY2hpbmcuanMKQEAgLTAsMCArMSw5MiBAQAorZnVuY3Rpb24gc2hvdWxk
QmUoYWN0dWFsLCBleHBlY3RlZCkgeworICAgIGlmIChhY3R1YWwgIT09IGV4cGVjdGVkKQorICAg
ICAgICB0aHJvdyBuZXcgRXJyb3IoYGJhZCB2YWx1ZTogJHtTdHJpbmcoYWN0dWFsKX1gKTsKK30K
KworZnVuY3Rpb24gc2hvdWxkVGhyb3coZnVuYywgZXJyb3JNZXNzYWdlKSB7CisgICAgdmFyIGVy
cm9yVGhyb3duID0gZmFsc2U7CisgICAgdmFyIGVycm9yID0gbnVsbDsKKyAgICB0cnkgeworICAg
ICAgICBmdW5jKCk7CisgICAgfSBjYXRjaCAoZSkgeworICAgICAgICBlcnJvclRocm93biA9IHRy
dWU7CisgICAgICAgIGVycm9yID0gZTsKKyAgICB9CisgICAgaWYgKCFlcnJvclRocm93bikKKyAg
ICAgICAgdGhyb3cgbmV3IEVycm9yKCdub3QgdGhyb3duJyk7CisgICAgaWYgKFN0cmluZyhlcnJv
cikgIT09IGVycm9yTWVzc2FnZSkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBiYWQgZXJyb3I6
ICR7U3RyaW5nKGVycm9yKX1gKTsKK30KK3ZhciBnbG9iYWxFdmFsID0gZXZhbDsKK3ZhciBnbG9i
YWwgPSB0aGlzOworCisvLyBFdmFsQ29udGV4dFR5cGUuCit7CisgICAgZnVuY3Rpb24gaGVsbG8o
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIGV2YWwoJ25ldy50YXJnZXQnKTsKKyAgICB9CisgICAg
c2hvdWxkQmUoaGVsbG8oKSwgdW5kZWZpbmVkKTsKKyAgICBzaG91bGRCZShoZWxsbygpLCB1bmRl
ZmluZWQpOworICAgIHNob3VsZEJlKGhlbGxvKCksIHVuZGVmaW5lZCk7CisgICAgZ2xvYmFsRXZh
bChgCisgICAgICAgIHZhciB0aHJvd24gPSBmYWxzZTsKKyAgICAgICAgdHJ5IHsKKyAgICAgICAg
ICAgIGV2YWwoJ25ldy50YXJnZXQnKTsKKyAgICAgICAgfSBjYXRjaCAoZSkgeworICAgICAgICAg
ICAgdGhyb3duID0gdHJ1ZTsKKyAgICAgICAgICAgIHNob3VsZEJlKFN0cmluZyhlKSwgIlN5bnRh
eEVycm9yOiBuZXcudGFyZ2V0IGlzIG9ubHkgdmFsaWQgaW5zaWRlIGZ1bmN0aW9ucy4iKTsKKyAg
ICAgICAgfQorICAgICAgICBzaG91bGRCZSh0aHJvd24sIHRydWUpOworICAgIGApOworCisgICAg
dmFyIHRocm93biA9IGZhbHNlOworICAgIHRyeSB7CisgICAgICAgIGdsb2JhbEV2YWwoJ25ldy50
YXJnZXQnKTsKKyAgICB9IGNhdGNoIChlKSB7CisgICAgICAgIHRocm93biA9IHRydWU7CisgICAg
ICAgIHNob3VsZEJlKFN0cmluZyhlKSwgIlN5bnRheEVycm9yOiBuZXcudGFyZ2V0IGlzIG9ubHkg
dmFsaWQgaW5zaWRlIGZ1bmN0aW9ucy4iKTsKKyAgICB9CisgICAgc2hvdWxkQmUodGhyb3duLCB0
cnVlKTsKK30KKworLy8gRGVyaXZlZENvbnRleHRUeXBlLgoreworICAgIHZhciBvYmplY3QgPSB7
CisgICAgICAgIGhlbGxvKCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGV2YWwoJ3N1
cGVyLm9rJyk7CisgICAgICAgIH0KKyAgICB9OworICAgIG9iamVjdC5fX3Byb3RvX18gPSB7IG9r
OiA0MiB9OworICAgIHNob3VsZEJlKG9iamVjdC5oZWxsbygpLCA0Mik7CisKKyAgICB2YXIgdGVz
dCA9IHsKKyAgICAgICAgaGVsbG86IGZ1bmN0aW9uICgpIHsKKyAgICAgICAgICAgIHJldHVybiBl
dmFsKCdzdXBlci5vaycpOworICAgICAgICB9CisgICAgfTsKKyAgICB0ZXN0Ll9fcHJvdG9fXyA9
IHsgb2s6IDQyIH07CisgICAgc2hvdWxkVGhyb3coZnVuY3Rpb24gKCkgeworICAgICAgICB0ZXN0
LmhlbGxvKCk7CisgICAgfSwgYFN5bnRheEVycm9yOiBzdXBlciBpcyBub3QgdmFsaWQgaW4gdGhp
cyBjb250ZXh0LmApOworfQorCisvLyBpc0Fycm93RnVuY3Rpb25Db250ZXh0LgoreworZ2xvYmFs
RXZhbChgCisgICAgZnVuY3Rpb24gb2soKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGV2YWwoJ3Ro
aXMnKTsKKyAgICB9CisgICAgc2hvdWxkQmUob2soKSwgZ2xvYmFsKQorICAgIHZhciBoZWxsbyA9
IHsKKyAgICAgICAgaGVsbG8oKQorICAgICAgICB7CisgICAgICAgICAgICB2YXIgYXJyb3cgPSAo
KSA9PiBldmFsKCd0aGlzJyk7CisgICAgICAgICAgICBzaG91bGRCZShhcnJvdygpLCBoZWxsbyk7
CisgICAgICAgIH0KKyAgICB9OworICAgIGhlbGxvLmhlbGxvKCk7CitgKTsKK30K
</data>
<flag name="review"
          id="303596"
          type_id="1"
          status="+"
          setter="saam"
    />
          </attachment>
      

    </bug>

</bugzilla>