<?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>66286</bug_id>
          
          <creation_ts>2011-08-16 03:05:57 -0700</creation_ts>
          <short_desc>Use String [] operator instead of indexing into String::characters() directly</short_desc>
          <delta_ts>2011-08-31 09:14:17 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Web Template Framework</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>UNCONFIRMED</bug_status>
          <resolution></resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>66706</dependson>
          <blocked>66161</blocked>
          <everconfirmed>0</everconfirmed>
          <reporter name="Xianzhu Wang">wangxianzhu</reporter>
          <assigned_to name="Annie Sullivan">sullivan</assigned_to>
          <cc>andersca</cc>
    
    <cc>ap</cc>
    
    <cc>barraclough</cc>
    
    <cc>benjamin</cc>
    
    <cc>darin</cc>
    
    <cc>dglazkov</cc>
    
    <cc>ggaren</cc>
    
    <cc>gustavo.noronha</cc>
    
    <cc>gustavo</cc>
    
    <cc>jamescook</cc>
    
    <cc>kling</cc>
    
    <cc>msaboff</cc>
    
    <cc>rniwa</cc>
    
    <cc>sullivan</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>451534</commentid>
    <comment_count>0</comment_count>
    <who name="Xianzhu Wang">wangxianzhu</who>
    <bug_when>2011-08-16 03:05:57 -0700</bug_when>
    <thetext>This is part of removing references to String::characters() which depends on the internal data format of String.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>452156</commentid>
    <comment_count>1</comment_count>
      <attachid>104155</attachid>
    <who name="Xianzhu Wang">wangxianzhu</who>
    <bug_when>2011-08-17 00:13:49 -0700</bug_when>
    <thetext>Created attachment 104155
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>452161</commentid>
    <comment_count>2</comment_count>
      <attachid>104155</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2011-08-17 00:27:03 -0700</bug_when>
    <thetext>Comment on attachment 104155
patch

Attachment 104155 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/9408587</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>452163</commentid>
    <comment_count>3</comment_count>
      <attachid>104155</attachid>
    <who name="Collabora GTK+ EWS bot">gustavo.noronha</who>
    <bug_when>2011-08-17 00:30:13 -0700</bug_when>
    <thetext>Comment on attachment 104155
patch

Attachment 104155 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/9405667</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>452165</commentid>
    <comment_count>4</comment_count>
      <attachid>104155</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-08-17 00:39:59 -0700</bug_when>
    <thetext>Comment on attachment 104155
patch

Attachment 104155 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/9404723</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>452167</commentid>
    <comment_count>5</comment_count>
      <attachid>104155</attachid>
    <who name="Xianzhu Wang">wangxianzhu</who>
    <bug_when>2011-08-17 00:46:18 -0700</bug_when>
    <thetext>Comment on attachment 104155
patch

Please ignore this corrupted patch. I&apos;m making a new new.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>452183</commentid>
    <comment_count>6</comment_count>
      <attachid>104162</attachid>
    <who name="Xianzhu Wang">wangxianzhu</who>
    <bug_when>2011-08-17 02:48:41 -0700</bug_when>
    <thetext>Created attachment 104162
updated patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>452198</commentid>
    <comment_count>7</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2011-08-17 03:56:09 -0700</bug_when>
    <thetext>This seems very likely to regress performance, since String::operator[] does additional bounds checking.

Have you done any perf testing of this change? And is the effort to remove characters() usage tracked somewhere?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>452203</commentid>
    <comment_count>8</comment_count>
    <who name="Andreas Kling">kling</who>
    <bug_when>2011-08-17 04:42:41 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; And is the effort to remove characters() usage tracked somewhere?

D&apos;oh, this is blocking bug 66161. Never mind :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>452334</commentid>
    <comment_count>9</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-08-17 10:25:07 -0700</bug_when>
    <thetext>Most places that use characters() do so because of performance optimization.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>452362</commentid>
    <comment_count>10</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2011-08-17 10:57:56 -0700</bug_when>
    <thetext>Looks good, I think this change should be performance tested before landed (per Darin&apos;s comment above).  I&apos;m not sure what a good test would be, that might hit any of this code.  Dromaeo? peacemaker? - I&apos;ll comment again this afternoon when a few more people are around who might have good suggestions on the coverage.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>452463</commentid>
    <comment_count>11</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2011-08-17 12:14:04 -0700</bug_when>
    <thetext>In the future, String::operator[] will do even more checking, to support 8bit vs 16bit representation, right? If so, the performance impact of repeated String::operator[] will be even greater.

If we need direct access to a character buffer for performance, maybe we should still allow it, but guard it with an ASSERT, e.g.:

if (string.is16Bit()) { // currently always true
    UChar* buffer = string.characters16(); // guarded by ASSERT
    ...
}</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>452845</commentid>
    <comment_count>12</comment_count>
      <attachid>104303</attachid>
    <who name="Xianzhu Wang">wangxianzhu</who>
    <bug_when>2011-08-17 21:28:01 -0700</bug_when>
    <thetext>Created attachment 104303
performance test

I tested the performance with the attached program. To run it, you should have a chromium port of WebKit, put it under Source/WebKit/chromium/tests, and add it into Source/WebKit/chromium/WebKit.gypi, update and build webkit, then run &apos;out/Release/webkit_unit_tests --gtest_filter=StringTest.*&apos;.

My results are:
accessStringPtr: 0.660000
accessStringPtrNoPostPlusPlus: 0.660000
accessCharacters: 0.650000
accessImpl: 0.650000
accessImplCacheLength: 0.660000
accessArray: 1.000000
accessArrayCacheLength: 1.000000

Description of the test:
Run 100000 times sequentially accessing each character of a string containing 10000 characters.
accessStringPtr: use a StringPtr class to simulate characters() and UChar*
accessStringPtrNoPostPlusPlus: same as above, but avoid using ptr++
accessCharacters: use characters()
accessImpl: use StringImpl instead of characters(); use length() in loop
accessImplCacheLength: same as above, but save length() to a local variable before loop
accessArray: use String::operator[]; use length() in loop
accessArrayCacheLength: same as above, but save length() to a local variable before loop

The timings show that the only performance difference is about the range checking in String::operator[]. If eliminating it, there would be no performance difference.

I think we could have two choices:
1. Add String::ptr() to return StringPtr class instead of UChar*, and replace some characters() references with it.
2. Replace the range checking in String::operator[] to an ASSERT. 

I have no preference and would like to hear your opinions.

About the performance cost of checking 8-bit or 16-bit, I will investigate it. However, it seems not in scope of this bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>452852</commentid>
    <comment_count>13</comment_count>
    <who name="Xianzhu Wang">wangxianzhu</who>
    <bug_when>2011-08-17 21:57:30 -0700</bug_when>
    <thetext>Now I prefer the StringPtr class method, because it can hide and optimize checking of 8/16 bit like what Geoffrey suggested. The issue does related to this bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>452935</commentid>
    <comment_count>14</comment_count>
      <attachid>104318</attachid>
    <who name="Xianzhu Wang">wangxianzhu</who>
    <bug_when>2011-08-18 03:40:02 -0700</bug_when>
    <thetext>Created attachment 104318
StringIterator as the returning type of characters()

For now StringIterator is just typedefed to const UChar*. In the future it will be defined as a class that can handle 8 and 16-bit buffers.
The subject of this bug should be updated, but I&apos;d like to hear your opinions about the patch and will update the subject if the patch looks good to you.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>452936</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-18 03:41:56 -0700</bug_when>
    <thetext>Attachment 104318 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1

Source/WebCore/css/CSSParser.h:296:  The parameter name &quot;str&quot; adds no information, so it should be removed.  [readability/parameter_name] [5]
Total errors found: 1 in 22 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>452937</commentid>
    <comment_count>16</comment_count>
      <attachid>104318</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2011-08-18 03:49:41 -0700</bug_when>
    <thetext>Comment on attachment 104318
StringIterator as the returning type of characters()

Attachment 104318 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/9419559</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>452938</commentid>
    <comment_count>17</comment_count>
      <attachid>104318</attachid>
    <who name="Early Warning System Bot">webkit-ews</who>
    <bug_when>2011-08-18 03:50:52 -0700</bug_when>
    <thetext>Comment on attachment 104318
StringIterator as the returning type of characters()

Attachment 104318 did not pass qt-ews (qt):
Output: http://queues.webkit.org/results/9422575</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>452939</commentid>
    <comment_count>18</comment_count>
      <attachid>104318</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2011-08-18 03:51:04 -0700</bug_when>
    <thetext>Comment on attachment 104318
StringIterator as the returning type of characters()

Attachment 104318 did not pass chromium-ews (chromium-xvfb):
Output: http://queues.webkit.org/results/9426277</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>452979</commentid>
    <comment_count>19</comment_count>
      <attachid>104318</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2011-08-18 06:01:15 -0700</bug_when>
    <thetext>Comment on attachment 104318
StringIterator as the returning type of characters()

Attachment 104318 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/9425364</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>453286</commentid>
    <comment_count>20</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2011-08-18 13:03:35 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; Now I prefer the StringPtr class method, because it can hide and optimize checking of 8/16 bit like what Geoffrey suggested. The issue does related to this bug.

Actually, what I suggested was that StringPtr *can&apos;t* optimize checking the 8 vs 16 bit flag, because it must do the check on every access.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>453626</commentid>
    <comment_count>21</comment_count>
    <who name="Xianzhu Wang">wangxianzhu</who>
    <bug_when>2011-08-18 21:46:08 -0700</bug_when>
    <thetext>(In reply to comment #20)
&gt; (In reply to comment #13)
&gt; &gt; Now I prefer the StringPtr class method, because it can hide and optimize checking of 8/16 bit like what Geoffrey suggested. The issue does related to this bug.
&gt; 
&gt; Actually, what I suggested was that StringPtr *can&apos;t* optimize checking the 8 vs 16 bit flag, because it must do the check on every access.

You are right that there must be some extra cost, but I think with the encapsulation, we could potentially have some optimizations during the life of a StringPtr to keep the extra cost as small as possible.

I&apos;m trying to measure the impact of performance in real applications.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>453731</commentid>
    <comment_count>22</comment_count>
    <who name="Xianzhu Wang">wangxianzhu</who>
    <bug_when>2011-08-19 04:00:59 -0700</bug_when>
    <thetext>I tried to create a big change which replaces most &apos;const UChar*&apos; to StringIterator in WebKit to test the performance impact of additional condition check on each access, but gave up because of some bug introduced which is hard to find out from the hundreds of changed files.

I did a simpler test with my first patch that changes some characters() access to []. The results are as below:

                  patched           original
               avg    medium      avg    medium
url-parser   2339.35  2340.5    2270.75  2249.5
xml-parser   1417.4   1417.5    1429.75  1415
html-parser  1459.15  1457      1455.15  1454.5

Though my StringTest shows 1/2 cost increase for [] accesses, the impact seems not actually visible in real applications. I guess the impact of 8/16-bits implementation of String and StringIterator should be also like this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>453736</commentid>
    <comment_count>23</comment_count>
      <attachid>104488</attachid>
    <who name="Xianzhu Wang">wangxianzhu</who>
    <bug_when>2011-08-19 04:19:13 -0700</bug_when>
    <thetext>Created attachment 104488
patch. The last one had a style issue and missed some JavaScriptCore files</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>454184</commentid>
    <comment_count>24</comment_count>
      <attachid>104588</attachid>
    <who name="Annie Sullivan">sullivan</who>
    <bug_when>2011-08-19 16:28:57 -0700</bug_when>
    <thetext>Created attachment 104588
Example of replacing checks in operator[] with ASSERTS</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>454196</commentid>
    <comment_count>25</comment_count>
    <who name="Annie Sullivan">sullivan</who>
    <bug_when>2011-08-19 16:42:00 -0700</bug_when>
    <thetext>(In reply to comment #24)
&gt; Created an attachment (id=104588) [details]
&gt; Example of replacing checks in operator[] with ASSERTS

I looked into how much work it would be to change String operator [] to ASSERT instead of do range checks. This patch passes all layout tests. If it seems reasonable to people to use ASSERT instead of range checks, we can do the following:

1. Clean up this patch and put it up for review on a dependent bug.
2. Write a benchmark that checks the performance of additional code that would need to be added to operator[] to work with 8-bit strings. The code would probably look something like:

if (m_refCountAndFlags &amp; s_is8bit)
  return static_cast&lt;UChar&gt;(m_data8[i]);
else
  return m_data16[i];

3. If that goes well, continue with the original patch on this bug.

Or we could go with the StringIterator approach. Would be great to hear what some more experienced WebKit developers think.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>454210</commentid>
    <comment_count>26</comment_count>
      <attachid>104588</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-08-19 16:57:32 -0700</bug_when>
    <thetext>Comment on attachment 104588
Example of replacing checks in operator[] with ASSERTS

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

This patch appears to degrade the readability of call sites of operator[].  Can we instead add charAtWithoutBoundsCheck(unsigned) const, which doesn&apos;t do any bounds checks, and use that in places where we currently call characters()?

&gt; Source/WebCore/css/CSSComputedStyleDeclaration.cpp:590
&gt; +    if (!pseudoElementName.isEmpty())
&gt; +        nameWithoutColonsStart = pseudoElementName[0] == &apos;:&apos; ? (pseudoElementName[1] == &apos;:&apos; ? 2 : 1) : 0;

Shouldn&apos;t we check that pseudoElementName&apos;s length is at least 2 if pseudoElementName[0] == &apos;:&apos;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>454212</commentid>
    <comment_count>27</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-08-19 17:00:55 -0700</bug_when>
    <thetext>(In reply to comment #26)
&gt; Can we instead add charAtWithoutBoundsCheck(unsigned) const

I was going to suggest something similar. But I’m not sure it has to have such a long name.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>454215</commentid>
    <comment_count>28</comment_count>
    <who name="Annie Sullivan">sullivan</who>
    <bug_when>2011-08-19 17:04:14 -0700</bug_when>
    <thetext>(In reply to comment #27)
&gt; (In reply to comment #26)
&gt; &gt; Can we instead add charAtWithoutBoundsCheck(unsigned) const
&gt; 
&gt; I was going to suggest something similar. But I’m not sure it has to have such a long name.

So this would change my plan in comment 25 to:

1. Implement charAtWithoutBoundsCheck (with a shorter name)
2. Rewrite the first patch on this bug to call that instead of operator[]
3. Write a benchmark that checks the performance of additional code that would need to be added to charAtWithoutBoundsCheck and operator[] to work with 8-bit strings. The code would probably look something like:

if (m_refCountAndFlags &amp; s_is8bit)
  return static_cast&lt;UChar&gt;(m_data8[i]);
else
  return m_data16[i];

Do people like that better than the StringIterator approach?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>454217</commentid>
    <comment_count>29</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-08-19 17:04:43 -0700</bug_when>
    <thetext>(In reply to comment #27)
&gt; (In reply to comment #26)
&gt; &gt; Can we instead add charAtWithoutBoundsCheck(unsigned) const
&gt; 
&gt; I was going to suggest something similar. But I’m not sure it has to have such a long name.

fastCharAt?  But I personally think that renaming the existing operator[] to charAt and then eliminating the bounds check from operator[] will be better since operator[] on an array doesn&apos;t do bounds check.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>454221</commentid>
    <comment_count>30</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2011-08-19 17:18:36 -0700</bug_when>
    <thetext>(In reply to comment #29)
&gt; fastCharAt?  But I personally think that renaming the existing operator[] to charAt and then eliminating the bounds check from operator[] will be better since operator[] on an array doesn&apos;t do bounds check.

Sure, later we can do that, but the point is to avoid making global risky changes that could even introduce buffer overrun for little benefit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>454226</commentid>
    <comment_count>31</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2011-08-19 17:25:01 -0700</bug_when>
    <thetext>(In reply to comment #30)
&gt; Sure, later we can do that, but the point is to avoid making global risky changes that could even introduce buffer overrun for little benefit.

I think we can do it safely if we first renamed operator[] to charAt in one patch, and then re-introduced operator[] in another patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>454315</commentid>
    <comment_count>32</comment_count>
    <who name="Xianzhu Wang">wangxianzhu</who>
    <bug_when>2011-08-19 22:43:09 -0700</bug_when>
    <thetext>About the plan in comment 28, I have two points:

1. About the final usages of const UChar*: Extending from the cases in &apos;Passed to functions as UChar*&apos;, &apos;Passed as substring as UChar*&apos;, &apos;Classes with UChar* members&apos;, &apos;Return characters()&apos; in Annie&apos;s spreadsheet, the final usages would fall into the other categories. This could also increase the cases of &apos;Use [] operator&apos; category, and the performance measured after code change could be more accurate. We could also know the potential problems using 8-bit buffers in strings, especially with the third-party libraries (e.g. ICU). I can work on this.

2. To also change the final usages of &apos;Use [] operator&apos; category, we should first determine how to pass const UChar* through parameters, class members and returned values: StringIterator, or &apos;const String&amp;&apos;/String?

I think one benefit of StringIterator is its partly compatibility with const UChar*. Using StringIterator we can replace const UChar*s with small code change, until the final usages of them. If the final usage is just iterating through the characters (i.e. this bug), the iteration code can remain unchanged. All intermediate steps that just pass const UChar* to the next step (with or without an offset) can just change the type name.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>454789</commentid>
    <comment_count>33</comment_count>
    <who name="Annie Sullivan">sullivan</who>
    <bug_when>2011-08-22 12:14:43 -0700</bug_when>
    <thetext>(In reply to comment #32)
&gt; About the plan in comment 28, I have two points:
&gt; 
&gt; 1. About the final usages of const UChar*: Extending from the cases in &apos;Passed to functions as UChar*&apos;, &apos;Passed as substring as UChar*&apos;, &apos;Classes with UChar* members&apos;, &apos;Return characters()&apos; in Annie&apos;s spreadsheet, the final usages would fall into the other categories. This could also increase the cases of &apos;Use [] operator&apos; category, and the performance measured after code change could be more accurate. We could also know the potential problems using 8-bit buffers in strings, especially with the third-party libraries (e.g. ICU). I can work on this.

That would be great!

&gt; 2. To also change the final usages of &apos;Use [] operator&apos; category, we should first determine how to pass const UChar* through parameters, class members and returned values: StringIterator, or &apos;const String&amp;&apos;/String?

A lot of these usages pass in something like (characters() + offset, length) to create a substring quickly.

As I think about it more, it should be possible to make StringIterator::substring() method which does this internally but returns a StringIterator so it doesn&apos;t need to expose the internal format of the character buffer.

&gt; I think one benefit of StringIterator is its partly compatibility with const UChar*. Using StringIterator we can replace const UChar*s with small code change, until the final usages of them. If the final usage is just iterating through the characters (i.e. this bug), the iteration code can remain unchanged. All intermediate steps that just pass const UChar* to the next step (with or without an offset) can just change the type name.

The more I dig through the code that calls characters(), the more I agree with this. I think StringIterator is the right approach. I set the review flag to r? on your StringIterator patch. Can someone review?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>454853</commentid>
    <comment_count>34</comment_count>
    <who name="Annie Sullivan">sullivan</who>
    <bug_when>2011-08-22 13:29:05 -0700</bug_when>
    <thetext>On second thought, I created bug 66706 for just the StringIterator part of the patch, since there is a lot of discussion on this bug and I hoped it would be clearer what StringIterator is for if we put it on a separate bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>104155</attachid>
            <date>2011-08-17 00:13:49 -0700</date>
            <delta_ts>2011-08-17 00:46:18 -0700</delta_ts>
            <desc>patch</desc>
            <filename>patch66286</filename>
            <type>text/plain</type>
            <size>31950</size>
            <attacher name="Xianzhu Wang">wangxianzhu</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDkzMTk1KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjIgQEAKKzIwMTEtMDgtMTYgIFhpYW56aHUg
V2FuZyAgPHdhbmd4aWFuemh1QGdvb2dsZS5jb20+CisKKyAgICAgICAgVXNlIFN0cmluZyBbXSBv
cGVyYXRvciBpbnN0ZWFkIG9mIGluZGV4aW5nIGludG8gU3RyaW5nOjpjaGFyYWN0ZXJzKCkgZGly
ZWN0bHkuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02
NjI4NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5v
IG5ldyB0ZXN0cy4gQWxsIG1vZGlmaWNhdGlvbnMgc2hvdWxkIHByZXNlcnZlIGV4YWN0bHkgdGhl
IG9yaWdpbmFsIGJlaGF2aW9yLgorICAgICAgICBBbGwgbGF5b3V0IHRlc3RzIGFuZCB1bml0IHRl
c3RzIHNob3VsZCByZXN1bHQgYXMgYmVmb3JlLgorCisgICAgICAgICogY3NzL0NTU1BhcnNlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjppc0NTU1Rva2VuaXplcklkZW50aWZpZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6aXNDU1NUb2tlbml6ZXJVUkwpOgorICAgICAgICAqIGRvbS9EYXRhc2V0RE9N
U3RyaW5nTWFwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmlzVmFsaWRBdHRyaWJ1dGVOYW1lKToK
KyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnRBdHRyaWJ1dGVOYW1lVG9Qcm9wZXJ0eU5hbWUpOgor
ICAgICAgICAoV2ViQ29yZTo6cHJvcGVydHlOYW1lTWF0Y2hlc0F0dHJpYnV0ZU5hbWUpOgorICAg
ICAgICAoV2ViQ29yZTo6aXNWYWxpZFByb3BlcnR5TmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpj
b252ZXJ0UHJvcGVydHlOYW1lVG9BdHRyaWJ1dGVOYW1lKToKKyAgICAgICAgKiBkb20vRG9jdW1l
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y2Fub25pY2FsaXplZFRpdGxlKToKKyAgICAgICAg
KFdlYkNvcmU6OkRvY3VtZW50OjpwYXJzZVF1YWxpZmllZE5hbWUpOgorICAgICAgICAqIGRvbS9T
cGFjZVNwbGl0U3RyaW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Omhhc05vbkFTQ0lJT3JVcHBl
cik6CisgICAgICAgICogZG9tL1N0eWxlZEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U3R5bGVkRWxlbWVudDo6Y2xhc3NBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKiBlZGl0aW5n
L0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbnRhaW5zT25s
eVdoaXRlc3BhY2UpOgorICAgICAgICAqIGVkaXRpbmcvU21hcnRSZXBsYWNlSUNVLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OmFkZEFsbENvZGVQb2ludHMpOgorICAgICAgICAqIGVkaXRpbmcvVGV4
dEl0ZXJhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbGxhcHNlZFNwYWNlTGVuZ3RoKToK
KyAgICAgICAgKFdlYkNvcmU6OmNvbnRhaW5zS2FuYUxldHRlcnMpOgorICAgICAgICAqIGVkaXRp
bmcvVHlwaW5nQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUeXBpbmdDb21tYW5kOjpp
bnNlcnRUZXh0KToKKyAgICAgICAgKiBodG1sL0hUTUxGb250RWxlbWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpwYXJzZUZvbnRTaXplKToKKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MUGFy
c2VySWRpb21zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnN0cmlwTGVhZGluZ0FuZFRyYWlsaW5n
SFRNTFNwYWNlcyk6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZUhUTUxJbnRlZ2VyKToKKyAgICAg
ICAgKFdlYkNvcmU6OnBhcnNlSFRNTE5vbk5lZ2F0aXZlSW50ZWdlcik6CisgICAgICAgICogaW5z
cGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVT
ZWFyY2hSZWdleFNvdXJjZSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hl
ZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3R5bGU6Om5ld0xpbmVBbmRXaGl0
ZXNwYWNlRGVsaW1pdGVycyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdHlsZVNoZWV0
OjpmaXhVbnBhcnNlZFByb3BlcnR5UmFuZ2VzKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVj
dG9yU3R5bGVUZXh0RWRpdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0eWxl
VGV4dEVkaXRvcjo6aW5zZXJ0UHJvcGVydHkpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
U3R5bGVUZXh0RWRpdG9yOjppbnRlcm5hbFJlcGxhY2VQcm9wZXJ0eSk6CisgICAgICAgICogcGxh
dGZvcm0vRmlsZVN5c3RlbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjplbmNvZGVGb3JGaWxlTmFt
ZSk6CisgICAgICAgICogcGxhdGZvcm0vS1VSTC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpLVVJM
Ojpjb3B5UGFyc2VkUXVlcnlUbyk6CisgICAgICAgIChXZWJDb3JlOjpwcm90b2NvbElzSW5IVFRQ
RmFtaWx5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9MZW5ndGguY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6bmV3Q29vcmRzQXJyYXkpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6Om1ha2VDYXBpdGFsaXplZCk6CisKIDIwMTEtMDgtMTYgIEx1a2Ug
TWFjcGhlcnNvbiAgIDxtYWNwaGVyc29uQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXByZXNl
bnQgUmVuZGVyU3R5bGU6OnRleHRPdmVyZmxvdyBwcm9wZXJ0eSB1c2luZyBhbiBlbnVtIGluc3Rl
YWQgb2YgYSBib29sLgpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAJKHJldmlzaW9uIDkz
MTk1KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTcxMzIsMjEgKzcxMzIsMjUgQEAgaW50IGNzc1ZhbHVlS2V5d29yZElEKGNvbnN0IENTU1Bh
cnNlclN0cgogLy8gImlkZW50IiBmcm9tIHRoZSBDU1MgdG9rZW5pemVyLCBtaW51cyBiYWNrc2xh
c2gtZXNjYXBlIHNlcXVlbmNlcwogc3RhdGljIGJvb2wgaXNDU1NUb2tlbml6ZXJJZGVudGlmaWVy
KGNvbnN0IFN0cmluZyYgc3RyaW5nKQogewotICAgIGNvbnN0IFVDaGFyKiBwID0gc3RyaW5nLmNo
YXJhY3RlcnMoKTsKLSAgICBjb25zdCBVQ2hhciogZW5kID0gcCArIHN0cmluZy5sZW5ndGgoKTsK
KyAgICB1bnNpZ25lZCBsZW5ndGggPSBzdHJpbmcubGVuZ3RoKCk7CisgICAgdW5zaWduZWQgaSA9
IDA7CiAKICAgICAvLyAtPwotICAgIGlmIChwICE9IGVuZCAmJiBwWzBdID09ICctJykKLSAgICAg
ICAgKytwOworICAgIGlmIChsZW5ndGggJiYgc3RyaW5nWzBdID09ICctJykKKyAgICAgICAgKytp
OwogCiAgICAgLy8ge25tc3RhcnR9Ci0gICAgaWYgKHAgPT0gZW5kIHx8ICEocFswXSA9PSAnXycg
fHwgcFswXSA+PSAxMjggfHwgaXNBU0NJSUFscGhhKHBbMF0pKSkKKyAgICBpZiAoaSA9PSBsZW5n
dGgpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICArK3A7CisgICAgVUNoYXIgYyA9IHN0cmlu
Z1tpXTsKKyAgICBpZiAoIShjID09ICdfJyB8fCBjID49IDEyOCB8fCBpc0FTQ0lJQWxwaGEoYykp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgKytpOwogCiAgICAgLy8ge25tY2hhcn0qCi0g
ICAgZm9yICg7IHAgIT0gZW5kOyArK3ApIHsKLSAgICAgICAgaWYgKCEocFswXSA9PSAnXycgfHwg
cFswXSA9PSAnLScgfHwgcFswXSA+PSAxMjggfHwgaXNBU0NJSUFscGhhbnVtZXJpYyhwWzBdKSkp
CisgICAgZm9yICg7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAgICBjID0gc3RyaW5nW2ldOwor
ICAgICAgICBpZiAoIShjID09ICdfJyB8fCBjID09ICctJyB8fCBjID49IDEyOCB8fCBpc0FTQ0lJ
QWxwaGFudW1lcmljKGMpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKQEAg
LTcxNTYsMTEgKzcxNjAsOCBAQCBzdGF0aWMgYm9vbCBpc0NTU1Rva2VuaXplcklkZW50aWZpZXIo
Y29uCiAvLyAidXJsIiBmcm9tIHRoZSBDU1MgdG9rZW5pemVyLCBtaW51cyBiYWNrc2xhc2gtZXNj
YXBlIHNlcXVlbmNlcwogc3RhdGljIGJvb2wgaXNDU1NUb2tlbml6ZXJVUkwoY29uc3QgU3RyaW5n
JiBzdHJpbmcpCiB7Ci0gICAgY29uc3QgVUNoYXIqIHAgPSBzdHJpbmcuY2hhcmFjdGVycygpOwot
ICAgIGNvbnN0IFVDaGFyKiBlbmQgPSBwICsgc3RyaW5nLmxlbmd0aCgpOwotCi0gICAgZm9yICg7
IHAgIT0gZW5kOyArK3ApIHsKLSAgICAgICAgVUNoYXIgYyA9IHBbMF07CisgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHN0cmluZy5sZW5ndGgoKTsgKytpKSB7CisgICAgICAgIFVDaGFyIGMg
PSBzdHJpbmdbaV07CiAgICAgICAgIHN3aXRjaCAoYykgewogICAgICAgICAgICAgY2FzZSAnISc6
CiAgICAgICAgICAgICBjYXNlICcjJzoKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9EYXRhc2V0
RE9NU3RyaW5nTWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRGF0YXNl
dERPTVN0cmluZ01hcC5jcHAJKHJldmlzaW9uIDkzMTk1KQorKysgU291cmNlL1dlYkNvcmUvZG9t
L0RhdGFzZXRET01TdHJpbmdNYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCwxMCArNDAsOSBA
QCBzdGF0aWMgYm9vbCBpc1ZhbGlkQXR0cmlidXRlTmFtZShjb25zdCBTCiAgICAgaWYgKCFuYW1l
LnN0YXJ0c1dpdGgoImRhdGEtIikpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGNvbnN0
IFVDaGFyKiBjaGFyYWN0ZXJzID0gbmFtZS5jaGFyYWN0ZXJzKCk7CiAgICAgdW5zaWduZWQgbGVu
Z3RoID0gbmFtZS5sZW5ndGgoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSA1OyBpIDwgbGVuZ3Ro
OyArK2kpIHsKLSAgICAgICAgaWYgKGlzQVNDSUlVcHBlcihjaGFyYWN0ZXJzW2ldKSkKKyAgICAg
ICAgaWYgKGlzQVNDSUlVcHBlcihuYW1lW2ldKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICB9CiAKQEAgLTU0LDE1ICs1MywxNCBAQCBzdGF0aWMgU3RyaW5nIGNvbnZlcnRBdHRyaWJ1
dGVOYW1lVG9Qcm9wCiB7CiAgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwogCi0gICAg
Y29uc3QgVUNoYXIqIGNoYXJhY3RlcnMgPSBuYW1lLmNoYXJhY3RlcnMoKTsKICAgICB1bnNpZ25l
ZCBsZW5ndGggPSBuYW1lLmxlbmd0aCgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDU7IGkgPCBs
ZW5ndGg7ICsraSkgewotICAgICAgICBVQ2hhciBjaGFyYWN0ZXIgPSBjaGFyYWN0ZXJzW2ldOwor
ICAgICAgICBVQ2hhciBjaGFyYWN0ZXIgPSBuYW1lW2ldOwogICAgICAgICBpZiAoY2hhcmFjdGVy
ICE9ICctJykKICAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGNoYXJhY3Rlcik7CiAg
ICAgICAgIGVsc2UgewotICAgICAgICAgICAgaWYgKChpICsgMSA8IGxlbmd0aCkgJiYgaXNBU0NJ
SUxvd2VyKGNoYXJhY3RlcnNbaSArIDFdKSkgewotICAgICAgICAgICAgICAgIHN0cmluZ0J1aWxk
ZXIuYXBwZW5kKHRvQVNDSUlVcHBlcihjaGFyYWN0ZXJzW2kgKyAxXSkpOworICAgICAgICAgICAg
aWYgKChpICsgMSA8IGxlbmd0aCkgJiYgaXNBU0NJSUxvd2VyKG5hbWVbaSArIDFdKSkgeworICAg
ICAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRvQVNDSUlVcHBlcihuYW1lW2kgKyAx
XSkpOwogICAgICAgICAgICAgICAgICsraTsKICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAg
ICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGNoYXJhY3Rlcik7CkBAIC03Nyw4ICs3NSw2IEBA
IHN0YXRpYyBib29sIHByb3BlcnR5TmFtZU1hdGNoZXNBdHRyaWJ1dGUKICAgICBpZiAoIWF0dHJp
YnV0ZU5hbWUuc3RhcnRzV2l0aCgiZGF0YS0iKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgY29uc3QgVUNoYXIqIHByb3BlcnR5ID0gcHJvcGVydHlOYW1lLmNoYXJhY3RlcnMoKTsKLSAg
ICBjb25zdCBVQ2hhciogYXR0cmlidXRlID0gYXR0cmlidXRlTmFtZS5jaGFyYWN0ZXJzKCk7CiAg
ICAgdW5zaWduZWQgcHJvcGVydHlMZW5ndGggPSBwcm9wZXJ0eU5hbWUubGVuZ3RoKCk7CiAgICAg
dW5zaWduZWQgYXR0cmlidXRlTGVuZ3RoID0gYXR0cmlidXRlTmFtZS5sZW5ndGgoKTsKICAgIApA
QCAtODYsMTAgKzgyLDEwIEBAIHN0YXRpYyBib29sIHByb3BlcnR5TmFtZU1hdGNoZXNBdHRyaWJ1
dGUKICAgICB1bnNpZ25lZCBwID0gMDsKICAgICBib29sIHdvcmRCb3VuZGFyeSA9IGZhbHNlOwog
ICAgIHdoaWxlIChhIDwgYXR0cmlidXRlTGVuZ3RoICYmIHAgPCBwcm9wZXJ0eUxlbmd0aCkgewot
ICAgICAgICBpZiAoYXR0cmlidXRlW2FdID09ICctJyAmJiBhICsgMSA8IGF0dHJpYnV0ZUxlbmd0
aCAmJiBhdHRyaWJ1dGVbYSArIDFdICE9ICctJykKKyAgICAgICAgaWYgKGF0dHJpYnV0ZU5hbWVb
YV0gPT0gJy0nICYmIGEgKyAxIDwgYXR0cmlidXRlTGVuZ3RoICYmIGF0dHJpYnV0ZU5hbWVbYSAr
IDFdICE9ICctJykKICAgICAgICAgICAgIHdvcmRCb3VuZGFyeSA9IHRydWU7CiAgICAgICAgIGVs
c2UgewotICAgICAgICAgICAgaWYgKCh3b3JkQm91bmRhcnkgPyB0b0FTQ0lJVXBwZXIoYXR0cmli
dXRlW2FdKSA6IGF0dHJpYnV0ZVthXSkgIT0gcHJvcGVydHlbcF0pCisgICAgICAgICAgICBpZiAo
KHdvcmRCb3VuZGFyeSA/IHRvQVNDSUlVcHBlcihhdHRyaWJ1dGVOYW1lW2FdKSA6IGF0dHJpYnV0
ZU5hbWVbYV0pICE9IHByb3BlcnR5TmFtZVtwXSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgICAgICBwKys7CiAgICAgICAgICAgICB3b3JkQm91bmRhcnkgPSBmYWxzZTsK
QEAgLTEwMiwxMCArOTgsOSBAQCBzdGF0aWMgYm9vbCBwcm9wZXJ0eU5hbWVNYXRjaGVzQXR0cmli
dXRlCiAKIHN0YXRpYyBib29sIGlzVmFsaWRQcm9wZXJ0eU5hbWUoY29uc3QgU3RyaW5nJiBuYW1l
KQogewotICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzID0gbmFtZS5jaGFyYWN0ZXJzKCk7CiAg
ICAgdW5zaWduZWQgbGVuZ3RoID0gbmFtZS5sZW5ndGgoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgaWYgKGNoYXJhY3RlcnNbaV0gPT0gJy0n
ICYmIChpICsgMSA8IGxlbmd0aCkgJiYgaXNBU0NJSUxvd2VyKGNoYXJhY3RlcnNbaSArIDFdKSkK
KyAgICAgICAgaWYgKG5hbWVbaV0gPT0gJy0nICYmIChpICsgMSA8IGxlbmd0aCkgJiYgaXNBU0NJ
SUxvd2VyKG5hbWVbaSArIDFdKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAg
ICAgcmV0dXJuIHRydWU7CkBAIC0xMTYsMTAgKzExMSw5IEBAIHN0YXRpYyBTdHJpbmcgY29udmVy
dFByb3BlcnR5TmFtZVRvQXR0cmkKICAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CiAgICAgYnVp
bGRlci5hcHBlbmQoImRhdGEtIik7CiAKLSAgICBjb25zdCBVQ2hhciogY2hhcmFjdGVycyA9IG5h
bWUuY2hhcmFjdGVycygpOwogICAgIHVuc2lnbmVkIGxlbmd0aCA9IG5hbWUubGVuZ3RoKCk7CiAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgIFVDaGFy
IGNoYXJhY3RlciA9IGNoYXJhY3RlcnNbaV07CisgICAgICAgIFVDaGFyIGNoYXJhY3RlciA9IG5h
bWVbaV07CiAgICAgICAgIGlmIChpc0FTQ0lJVXBwZXIoY2hhcmFjdGVyKSkgewogICAgICAgICAg
ICAgYnVpbGRlci5hcHBlbmQoJy0nKTsKICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKHRvQVND
SUlMb3dlcihjaGFyYWN0ZXIpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkocmV2aXNp
b24gOTMxOTUpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMjM4LDcgKzEyMzgsNiBAQCBQYXNzUmVmUHRyPFJhbmdlPiBEb2N1bWVudDo6Y2Fy
ZXRSYW5nZUZyCiBzdGF0aWMgaW5saW5lIFN0cmluZ1dpdGhEaXJlY3Rpb24gY2Fub25pY2FsaXpl
ZFRpdGxlKERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgU3RyaW5nV2l0aERpcmVjdGlvbiYgdGl0
bGVXaXRoRGlyZWN0aW9uKQogewogICAgIGNvbnN0IFN0cmluZyYgdGl0bGUgPSB0aXRsZVdpdGhE
aXJlY3Rpb24uc3RyaW5nKCk7Ci0gICAgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMgPSB0aXRsZS5j
aGFyYWN0ZXJzKCk7CiAgICAgdW5zaWduZWQgbGVuZ3RoID0gdGl0bGUubGVuZ3RoKCk7CiAgICAg
dW5zaWduZWQgaTsKIApAQCAtMTI0Nyw3ICsxMjQ2LDcgQEAgc3RhdGljIGlubGluZSBTdHJpbmdX
aXRoRGlyZWN0aW9uIGNhbm9uaQogCiAgICAgLy8gU2tpcCBsZWFkaW5nIHNwYWNlcyBhbmQgbGVh
ZGluZyBjaGFyYWN0ZXJzIHRoYXQgd291bGQgY29udmVydCB0byBzcGFjZXMKICAgICBmb3IgKGkg
PSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgVUNoYXIgYyA9IGNoYXJhY3RlcnNbaV07
CisgICAgICAgIFVDaGFyIGMgPSB0aXRsZVtpXTsKICAgICAgICAgaWYgKCEoYyA8PSAweDIwIHx8
IGMgPT0gMHg3RikpCiAgICAgICAgICAgICBicmVhazsKICAgICB9CkBAIC0xMjU4LDcgKzEyNTcs
NyBAQCBzdGF0aWMgaW5saW5lIFN0cmluZ1dpdGhEaXJlY3Rpb24gY2Fub25pCiAgICAgLy8gUmVw
bGFjZSBjb250cm9sIGNoYXJhY3RlcnMgd2l0aCBzcGFjZXMsIGFuZCBiYWNrc2xhc2hlcyB3aXRo
IGN1cnJlbmN5IHN5bWJvbHMsIGFuZCBjb2xsYXBzZSB3aGl0ZXNwYWNlLgogICAgIGJvb2wgcHJl
dmlvdXNDaGFyV2FzV1MgPSBmYWxzZTsKICAgICBmb3IgKDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0g
ICAgICAgIFVDaGFyIGMgPSBjaGFyYWN0ZXJzW2ldOworICAgICAgICBVQ2hhciBjID0gdGl0bGVb
aV07CiAgICAgICAgIGlmIChjIDw9IDB4MjAgfHwgYyA9PSAweDdGIHx8IChXVEY6OlVuaWNvZGU6
OmNhdGVnb3J5KGMpICYgKFdURjo6VW5pY29kZTo6U2VwYXJhdG9yX0xpbmUgfCBXVEY6OlVuaWNv
ZGU6OlNlcGFyYXRvcl9QYXJhZ3JhcGgpKSkgewogICAgICAgICAgICAgaWYgKHByZXZpb3VzQ2hh
cldhc1dTKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMzc0NCwxMCArMzc0Myw5IEBA
IGJvb2wgRG9jdW1lbnQ6OnBhcnNlUXVhbGlmaWVkTmFtZShjb25zdCAKICAgICBib29sIHNhd0Nv
bG9uID0gZmFsc2U7CiAgICAgaW50IGNvbG9uUG9zID0gMDsKIAotICAgIGNvbnN0IFVDaGFyKiBz
ID0gcXVhbGlmaWVkTmFtZS5jaGFyYWN0ZXJzKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGxlbmd0aDspIHsKICAgICAgICAgVUNoYXIzMiBjOwotICAgICAgICBVMTZfTkVYVChzLCBp
LCBsZW5ndGgsIGMpCisgICAgICAgIFUxNl9ORVhUKHF1YWxpZmllZE5hbWUsIGksIGxlbmd0aCwg
YykKICAgICAgICAgaWYgKGMgPT0gJzonKSB7CiAgICAgICAgICAgICBpZiAoc2F3Q29sb24pIHsK
ICAgICAgICAgICAgICAgICBlYyA9IE5BTUVTUEFDRV9FUlI7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9kb20vU3BhY2VTcGxpdFN0cmluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
ZG9tL1NwYWNlU3BsaXRTdHJpbmcuY3BwCShyZXZpc2lvbiA5MzE5NSkKKysrIFNvdXJjZS9XZWJD
b3JlL2RvbS9TcGFjZVNwbGl0U3RyaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsMTIgKzMx
LDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RhdGljIGJvb2wgaGFzTm9uQVNDSUlPclVw
cGVyKGNvbnN0IFN0cmluZyYgc3RyaW5nKQogewotICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJz
ID0gc3RyaW5nLmNoYXJhY3RlcnMoKTsKICAgICB1bnNpZ25lZCBsZW5ndGggPSBzdHJpbmcubGVu
Z3RoKCk7CiAgICAgYm9vbCBoYXNVcHBlciA9IGZhbHNlOwogICAgIFVDaGFyIG9yZWQgPSAwOwog
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICBVQ2hh
ciBjID0gY2hhcmFjdGVyc1tpXTsKKyAgICAgICAgVUNoYXIgYyA9IHN0cmluZ1tpXTsKICAgICAg
ICAgaGFzVXBwZXIgfD0gaXNBU0NJSVVwcGVyKGMpOwogICAgICAgICBvcmVkIHw9IGM7CiAgICAg
fQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1N0eWxlZEVsZW1lbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9TdHlsZWRFbGVtZW50LmNwcAkocmV2aXNpb24gOTMxOTUp
CisrKyBTb3VyY2UvV2ViQ29yZS9kb20vU3R5bGVkRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIxNCwxMSArMjE0LDEwIEBAIGJvb2wgU3R5bGVkRWxlbWVudDo6bWFwVG9FbnRyeShjb25z
dCBRdWEKIAogdm9pZCBTdHlsZWRFbGVtZW50OjpjbGFzc0F0dHJpYnV0ZUNoYW5nZWQoY29uc3Qg
QXRvbWljU3RyaW5nJiBuZXdDbGFzc1N0cmluZykKIHsKLSAgICBjb25zdCBVQ2hhciogY2hhcmFj
dGVycyA9IG5ld0NsYXNzU3RyaW5nLmNoYXJhY3RlcnMoKTsKICAgICB1bnNpZ25lZCBsZW5ndGgg
PSBuZXdDbGFzc1N0cmluZy5sZW5ndGgoKTsKICAgICB1bnNpZ25lZCBpOwogICAgIGZvciAoaSA9
IDA7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICBpZiAoaXNOb3RIVE1MU3BhY2UoY2hhcmFj
dGVyc1tpXSkpCisgICAgICAgIGlmIChpc05vdEhUTUxTcGFjZShuZXdDbGFzc1N0cmluZ1tpXSkp
CiAgICAgICAgICAgICBicmVhazsKICAgICB9CiAgICAgYm9vbCBoYXNDbGFzcyA9IGkgPCBsZW5n
dGg7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21t
YW5kLmNwcAkocmV2aXNpb24gOTMxOTUpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBv
c2l0ZUVkaXRDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIzLDcgKzQyMyw3IEBAIHZv
aWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnNldE5vZGVBdHRyaWIKIHN0YXRpYyBpbmxpbmUgYm9v
bCBjb250YWluc09ubHlXaGl0ZXNwYWNlKGNvbnN0IFN0cmluZyYgdGV4dCkKIHsKICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgdGV4dC5sZW5ndGgoKTsgKytpKSB7Ci0gICAgICAgIGlmICgh
aXNXaGl0ZXNwYWNlKHRleHQuY2hhcmFjdGVycygpW2ldKSkKKyAgICAgICAgaWYgKCFpc1doaXRl
c3BhY2UodGV4dFtpXSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIApJ
bmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9TbWFydFJlcGxhY2VJQ1UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU21hcnRSZXBsYWNlSUNVLmNwcAkocmV2aXNp
b24gOTMxOTUpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NtYXJ0UmVwbGFjZUlDVS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM5LDkgKzM5LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBz
dGF0aWMgdm9pZCBhZGRBbGxDb2RlUG9pbnRzKFVTZXQqIHNtYXJ0U2V0LCBjb25zdCBTdHJpbmcm
IHN0cmluZykKIHsKLSAgICBjb25zdCBVQ2hhciogY2hhcmFjdGVycyA9IHN0cmluZy5jaGFyYWN0
ZXJzKCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzdHJpbmcubGVuZ3RoKCk7IGkrKykK
LSAgICAgICAgdXNldF9hZGQoc21hcnRTZXQsIGNoYXJhY3RlcnNbaV0pOworICAgICAgICB1c2V0
X2FkZChzbWFydFNldCwgc3RyaW5nW2ldKTsKIH0KIAogLy8gVGhpcyBpcyBtb3N0bHkgYSBwb3J0
IG9mIHRoZSBjb2RlIGluIFdlYkNvcmUvZWRpdGluZy9TbWFydFJlcGxhY2VDRi5jcHAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5jcHAJKHJldmlzaW9uIDkzMTk1KQor
KysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC04MDQsMTAgKzgwNCwxMCBAQCBzdGF0aWMgYm9vbCBzaG91bGRFbWl0RXh0cmFOZXdsaW5l
Rm9yTm9kCiAKIHN0YXRpYyBpbnQgY29sbGFwc2VkU3BhY2VMZW5ndGgoUmVuZGVyVGV4dCogcmVu
ZGVyZXIsIGludCB0ZXh0RW5kKQogewotICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzID0gcmVu
ZGVyZXItPnRleHQoKS0+Y2hhcmFjdGVycygpOwotICAgIGludCBsZW5ndGggPSByZW5kZXJlci0+
dGV4dCgpLT5sZW5ndGgoKTsKKyAgICBTdHJpbmdJbXBsKiB0ZXh0ID0gcmVuZGVyZXItPnRleHQo
KTsKKyAgICBpbnQgbGVuZ3RoID0gdGV4dC0+bGVuZ3RoKCk7CiAgICAgZm9yIChpbnQgaSA9IHRl
eHRFbmQ7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICBpZiAoIXJlbmRlcmVyLT5zdHlsZSgp
LT5pc0NvbGxhcHNpYmxlV2hpdGVTcGFjZShjaGFyYWN0ZXJzW2ldKSkKKyAgICAgICAgaWYgKCFy
ZW5kZXJlci0+c3R5bGUoKS0+aXNDb2xsYXBzaWJsZVdoaXRlU3BhY2UoKCp0ZXh0KVtpXSkpCiAg
ICAgICAgICAgICByZXR1cm4gaSAtIHRleHRFbmQ7CiAgICAgfQogCkBAIC0xNzk2LDEwICsxNzk2
LDkgQEAgc3RhdGljIGlubGluZSBib29sIGlzQ29tYmluaW5nVm9pY2VkU291bgogCiBzdGF0aWMg
aW5saW5lIGJvb2wgY29udGFpbnNLYW5hTGV0dGVycyhjb25zdCBTdHJpbmcmIHBhdHRlcm4pCiB7
Ci0gICAgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMgPSBwYXR0ZXJuLmNoYXJhY3RlcnMoKTsKICAg
ICB1bnNpZ25lZCBsZW5ndGggPSBwYXR0ZXJuLmxlbmd0aCgpOwogICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICBpZiAoaXNLYW5hTGV0dGVyKGNoYXJh
Y3RlcnNbaV0pKQorICAgICAgICBpZiAoaXNLYW5hTGV0dGVyKHBhdHRlcm5baV0pKQogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcAkocmV2aXNpb24gOTMxOTUpCisrKyBT
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xNTYsNyArMTU2LDcgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjppbnNlcnRUZXh0KERvY3VtZW50
KgogICAgIEFTU0VSVChmcmFtZSk7CiAKICAgICBpZiAoIXRleHQuaXNFbXB0eSgpKQotICAgICAg
ICBkb2N1bWVudC0+ZnJhbWUoKS0+ZWRpdG9yKCktPnVwZGF0ZU1hcmtlcnNGb3JXb3Jkc0FmZmVj
dGVkQnlFZGl0aW5nKGlzU3BhY2VPck5ld2xpbmUodGV4dC5jaGFyYWN0ZXJzKClbMF0pKTsKKyAg
ICAgICAgZG9jdW1lbnQtPmZyYW1lKCktPmVkaXRvcigpLT51cGRhdGVNYXJrZXJzRm9yV29yZHNB
ZmZlY3RlZEJ5RWRpdGluZyhpc1NwYWNlT3JOZXdsaW5lKHRleHRbMF0pKTsKICAgICAKICAgICBp
bnNlcnRUZXh0KGRvY3VtZW50LCB0ZXh0LCBmcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigp
LCBvcHRpb25zLCBjb21wb3NpdGlvbik7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxGb250RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
Rm9udEVsZW1lbnQuY3BwCShyZXZpc2lvbiA5MzE5NSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTEZvbnRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIsMTIgKzUyLDEyIEBAIHN0
YXRpYyBib29sIHBhcnNlRm9udFNpemUoY29uc3QgU3RyaW5nJiAKIAogICAgIC8vIFN0ZXAgMQog
ICAgIC8vIFN0ZXAgMgotICAgIGNvbnN0IFVDaGFyKiBwb3NpdGlvbiA9IGlucHV0LmNoYXJhY3Rl
cnMoKTsKLSAgICBjb25zdCBVQ2hhciogZW5kID0gcG9zaXRpb24gKyBpbnB1dC5sZW5ndGgoKTsK
KyAgICB1bnNpZ25lZCBwb3NpdGlvbiA9IDA7CisgICAgdW5zaWduZWQgZW5kID0gaW5wdXQubGVu
Z3RoKCk7CiAKICAgICAvLyBTdGVwIDMKICAgICB3aGlsZSAocG9zaXRpb24gPCBlbmQpIHsKLSAg
ICAgICAgaWYgKCFpc0hUTUxTcGFjZSgqcG9zaXRpb24pKQorICAgICAgICBpZiAoIWlzSFRNTFNw
YWNlKGlucHV0W3Bvc2l0aW9uXSkpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgKytwb3Np
dGlvbjsKICAgICB9CkBAIC03NCw3ICs3NCw3IEBAIHN0YXRpYyBib29sIHBhcnNlRm9udFNpemUo
Y29uc3QgU3RyaW5nJiAKICAgICAgICAgQWJzb2x1dGUKICAgICB9IG1vZGU7CiAKLSAgICBzd2l0
Y2ggKCpwb3NpdGlvbikgeworICAgIHN3aXRjaCAoaW5wdXRbcG9zaXRpb25dKSB7CiAgICAgY2Fz
ZSAnKyc6CiAgICAgICAgIG1vZGUgPSBSZWxhdGl2ZVBsdXM7CiAgICAgICAgICsrcG9zaXRpb247
CkBAIC05MSw5ICs5MSw5IEBAIHN0YXRpYyBib29sIHBhcnNlRm9udFNpemUoY29uc3QgU3RyaW5n
JiAKICAgICAvLyBTdGVwIDYKICAgICBWZWN0b3I8VUNoYXIsIDE2PiBkaWdpdHM7CiAgICAgd2hp
bGUgKHBvc2l0aW9uIDwgZW5kKSB7Ci0gICAgICAgIGlmICghaXNBU0NJSURpZ2l0KCpwb3NpdGlv
bikpCisgICAgICAgIGlmICghaXNBU0NJSURpZ2l0KGlucHV0W3Bvc2l0aW9uXSkpCiAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgZGlnaXRzLmFwcGVuZCgqcG9zaXRpb24rKyk7CisgICAgICAg
IGRpZ2l0cy5hcHBlbmQoaW5wdXRbcG9zaXRpb24rK10pOwogICAgIH0KIAogICAgIC8vIFN0ZXAg
NwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFBhcnNlcklkaW9tcy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFBhcnNlcklkaW9t
cy5jcHAJKHJldmlzaW9uIDkzMTk1KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRN
TFBhcnNlcklkaW9tcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDEyICszNSwxMSBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIFN0cmluZyBzdHJpcExlYWRpbmdBbmRUcmFpbGluZ0hUTUxTcGFj
ZXMoY29uc3QgU3RyaW5nJiBzdHJpbmcpCiB7Ci0gICAgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMg
PSBzdHJpbmcuY2hhcmFjdGVycygpOwogICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0cmluZy5sZW5n
dGgoKTsKIAogICAgIHVuc2lnbmVkIG51bUxlYWRpbmdTcGFjZXM7CiAgICAgZm9yIChudW1MZWFk
aW5nU3BhY2VzID0gMDsgbnVtTGVhZGluZ1NwYWNlcyA8IGxlbmd0aDsgKytudW1MZWFkaW5nU3Bh
Y2VzKSB7Ci0gICAgICAgIGlmIChpc05vdEhUTUxTcGFjZShjaGFyYWN0ZXJzW251bUxlYWRpbmdT
cGFjZXNdKSkKKyAgICAgICAgaWYgKGlzTm90SFRNTFNwYWNlKHN0cmluZ1tudW1MZWFkaW5nU3Bh
Y2VzXSkpCiAgICAgICAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTQ5LDcgKzQ4LDcgQEAgU3Ry
aW5nIHN0cmlwTGVhZGluZ0FuZFRyYWlsaW5nSFRNTFNwYWNlcwogCiAgICAgdW5zaWduZWQgbnVt
VHJhaWxpbmdTcGFjZXM7CiAgICAgZm9yIChudW1UcmFpbGluZ1NwYWNlcyA9IDA7IG51bVRyYWls
aW5nU3BhY2VzIDwgbGVuZ3RoOyArK251bVRyYWlsaW5nU3BhY2VzKSB7Ci0gICAgICAgIGlmIChp
c05vdEhUTUxTcGFjZShjaGFyYWN0ZXJzW2xlbmd0aCAtIG51bVRyYWlsaW5nU3BhY2VzIC0gMV0p
KQorICAgICAgICBpZiAoaXNOb3RIVE1MU3BhY2Uoc3RyaW5nW2xlbmd0aCAtIG51bVRyYWlsaW5n
U3BhY2VzIC0gMV0pKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC0xNzUsMTUgKzE3
NCwxNSBAQCBib29sIHBhcnNlSFRNTEludGVnZXIoY29uc3QgU3RyaW5nJiBpbnB1CiB7CiAgICAg
Ly8gU3RlcCAxCiAgICAgLy8gU3RlcCAyCi0gICAgY29uc3QgVUNoYXIqIHBvc2l0aW9uID0gaW5w
dXQuY2hhcmFjdGVycygpOwotICAgIGNvbnN0IFVDaGFyKiBlbmQgPSBwb3NpdGlvbiArIGlucHV0
Lmxlbmd0aCgpOworICAgIHVuc2lnbmVkIHBvc2l0aW9uID0gMDsKKyAgICB1bnNpZ25lZCBlbmQg
PSBpbnB1dC5sZW5ndGgoKTsKIAogICAgIC8vIFN0ZXAgMwogICAgIGludCBzaWduID0gMTsKIAog
ICAgIC8vIFN0ZXAgNAogICAgIHdoaWxlIChwb3NpdGlvbiA8IGVuZCkgewotICAgICAgICBpZiAo
IWlzSFRNTFNwYWNlKCpwb3NpdGlvbikpCisgICAgICAgIGlmICghaXNIVE1MU3BhY2UoaW5wdXRb
cG9zaXRpb25dKSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICArK3Bvc2l0aW9uOwogICAg
IH0KQEAgLTE5NCwyNSArMTkzLDI1IEBAIGJvb2wgcGFyc2VIVE1MSW50ZWdlcihjb25zdCBTdHJp
bmcmIGlucHUKICAgICBBU1NFUlQocG9zaXRpb24gPCBlbmQpOwogCiAgICAgLy8gU3RlcCA2Ci0g
ICAgaWYgKCpwb3NpdGlvbiA9PSAnLScpIHsKKyAgICBpZiAoaW5wdXRbcG9zaXRpb25dID09ICct
JykgewogICAgICAgICBzaWduID0gLTE7CiAgICAgICAgICsrcG9zaXRpb247Ci0gICAgfSBlbHNl
IGlmICgqcG9zaXRpb24gPT0gJysnKQorICAgIH0gZWxzZSBpZiAoaW5wdXRbcG9zaXRpb25dID09
ICcrJykKICAgICAgICAgKytwb3NpdGlvbjsKICAgICBpZiAocG9zaXRpb24gPT0gZW5kKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgQVNTRVJUKHBvc2l0aW9uIDwgZW5kKTsKIAogICAgIC8v
IFN0ZXAgNwotICAgIGlmICghaXNBU0NJSURpZ2l0KCpwb3NpdGlvbikpCisgICAgaWYgKCFpc0FT
Q0lJRGlnaXQoaW5wdXRbcG9zaXRpb25dKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAg
Ly8gU3RlcCA4CiAgICAgVmVjdG9yPFVDaGFyLCAxNj4gZGlnaXRzOwogICAgIHdoaWxlIChwb3Np
dGlvbiA8IGVuZCkgewotICAgICAgICBpZiAoIWlzQVNDSUlEaWdpdCgqcG9zaXRpb24pKQorICAg
ICAgICBpZiAoIWlzQVNDSUlEaWdpdChpbnB1dFtwb3NpdGlvbl0pKQogICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGRpZ2l0cy5hcHBlbmQoKnBvc2l0aW9uKyspOworICAgICAgICBkaWdpdHMu
YXBwZW5kKGlucHV0W3Bvc2l0aW9uKytdKTsKICAgICB9CiAKICAgICAvLyBTdGVwIDkKQEAgLTIy
NSwxMiArMjI0LDEyIEBAIGJvb2wgcGFyc2VIVE1MTm9uTmVnYXRpdmVJbnRlZ2VyKGNvbnN0IFMK
IHsKICAgICAvLyBTdGVwIDEKICAgICAvLyBTdGVwIDIKLSAgICBjb25zdCBVQ2hhciogcG9zaXRp
b24gPSBpbnB1dC5jaGFyYWN0ZXJzKCk7Ci0gICAgY29uc3QgVUNoYXIqIGVuZCA9IHBvc2l0aW9u
ICsgaW5wdXQubGVuZ3RoKCk7CisgICAgdW5zaWduZWQgcG9zaXRpb24gPSAwOworICAgIHVuc2ln
bmVkIGVuZCA9IGlucHV0Lmxlbmd0aCgpOwogCiAgICAgLy8gU3RlcCAzCiAgICAgd2hpbGUgKHBv
c2l0aW9uIDwgZW5kKSB7Ci0gICAgICAgIGlmICghaXNIVE1MU3BhY2UoKnBvc2l0aW9uKSkKKyAg
ICAgICAgaWYgKCFpc0hUTUxTcGFjZShpbnB1dFtwb3NpdGlvbl0pKQogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICsrcG9zaXRpb247CiAgICAgfQpAQCAtMjQxLDcgKzI0MCw3IEBAIGJvb2wg
cGFyc2VIVE1MTm9uTmVnYXRpdmVJbnRlZ2VyKGNvbnN0IFMKICAgICBBU1NFUlQocG9zaXRpb24g
PCBlbmQpOwogCiAgICAgLy8gU3RlcCA1Ci0gICAgaWYgKCpwb3NpdGlvbiA9PSAnKycpCisgICAg
aWYgKGlucHV0W3Bvc2l0aW9uXSA9PSAnKycpCiAgICAgICAgICsrcG9zaXRpb247CiAKICAgICAv
LyBTdGVwIDYKQEAgLTI1MCwxNSArMjQ5LDE1IEBAIGJvb2wgcGFyc2VIVE1MTm9uTmVnYXRpdmVJ
bnRlZ2VyKGNvbnN0IFMKICAgICBBU1NFUlQocG9zaXRpb24gPCBlbmQpOwogCiAgICAgLy8gU3Rl
cCA3Ci0gICAgaWYgKCFpc0FTQ0lJRGlnaXQoKnBvc2l0aW9uKSkKKyAgICBpZiAoIWlzQVNDSUlE
aWdpdChpbnB1dFtwb3NpdGlvbl0pKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBT
dGVwIDgKICAgICBWZWN0b3I8VUNoYXIsIDE2PiBkaWdpdHM7CiAgICAgd2hpbGUgKHBvc2l0aW9u
IDwgZW5kKSB7Ci0gICAgICAgIGlmICghaXNBU0NJSURpZ2l0KCpwb3NpdGlvbikpCisgICAgICAg
IGlmICghaXNBU0NJSURpZ2l0KGlucHV0W3Bvc2l0aW9uXSkpCiAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgZGlnaXRzLmFwcGVuZCgqcG9zaXRpb24rKyk7CisgICAgICAgIGRpZ2l0cy5hcHBl
bmQoaW5wdXRbcG9zaXRpb24rK10pOwogICAgIH0KIAogICAgIC8vIFN0ZXAgOQpJbmRleDogU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAJKHJldmlz
aW9uIDkzMTk1KQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2Vu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0NiwxMyArNDQ2LDEyIEBAIHZvaWQgSW5zcGVjdG9y
UGFnZUFnZW50OjpnZXRSZXNvdXJjZUNvbnQKIHN0YXRpYyBTdHJpbmcgY3JlYXRlU2VhcmNoUmVn
ZXhTb3VyY2UoY29uc3QgU3RyaW5nJiB0ZXh0KQogewogICAgIFN0cmluZyByZXN1bHQ7Ci0gICAg
Y29uc3QgVUNoYXIqIGNoYXJhY3RlcnMgPSB0ZXh0LmNoYXJhY3RlcnMoKTsKICAgICBTdHJpbmcg
c3BlY2lhbHMocmVnZXhTcGVjaWFsQ2hhcmFjdGVycyk7CiAKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgdGV4dC5sZW5ndGgoKTsgaSsrKSB7Ci0gICAgICAgIGlmIChzcGVjaWFscy5maW5k
KGNoYXJhY3RlcnNbaV0pKQorICAgICAgICBpZiAoc3BlY2lhbHMuZmluZCh0ZXh0W2ldKSkKICAg
ICAgICAgICAgIHJlc3VsdC5hcHBlbmQoIlxcIik7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoY2hh
cmFjdGVyc1tpXSk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQodGV4dFtpXSk7CiAgICAgfQogCiAg
ICAgcmV0dXJuIHJlc3VsdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JTdHlsZVNoZWV0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yU3R5bGVTaGVldC5jcHAJKHJldmlzaW9uIDkzMTk1KQorKysgU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
MTcsMTQgKzUxNywxMyBAQCBOZXdMaW5lQW5kV2hpdGVzcGFjZSYgSW5zcGVjdG9yU3R5bGU6Om5l
CiAgICAgaW50IHByb3BlcnR5SW5kZXggPSAwOwogICAgIGJvb2wgaXNGdWxsUHJlZml4U2Nhbm5l
ZCA9IGZhbHNlOwogICAgIGJvb2wgbGluZUZlZWRUZXJtaW5hdGVkID0gZmFsc2U7Ci0gICAgY29u
c3QgVUNoYXIqIGNoYXJhY3RlcnMgPSB0ZXh0LmNoYXJhY3RlcnMoKTsKICAgICB3aGlsZSAocHJv
cGVydHlJbmRleCA8IHByb3BlcnR5Q291bnQpIHsKICAgICAgICAgY29uc3QgV2ViQ29yZTo6Q1NT
UHJvcGVydHlTb3VyY2VEYXRhJiBjdXJyZW50UHJvcGVydHkgPSBzb3VyY2VQcm9wZXJ0eURhdGEt
PmF0KHByb3BlcnR5SW5kZXgrKyk7CiAKICAgICAgICAgYm9vbCBwcm9jZXNzTmV4dFByb3BlcnR5
ID0gZmFsc2U7CiAgICAgICAgIGludCBzY2FuRW5kID0gY3VycmVudFByb3BlcnR5LnJhbmdlLnN0
YXJ0OwogICAgICAgICBmb3IgKGludCBpID0gc2NhblN0YXJ0OyBpIDwgc2NhbkVuZDsgKytpKSB7
Ci0gICAgICAgICAgICBVQ2hhciBjaCA9IGNoYXJhY3RlcnNbaV07CisgICAgICAgICAgICBVQ2hh
ciBjaCA9IHRleHRbaV07CiAgICAgICAgICAgICBib29sIGlzTGluZUZlZWQgPSBpc0hUTUxMaW5l
QnJlYWsoY2gpOwogICAgICAgICAgICAgaWYgKGlzTGluZUZlZWQpIHsKICAgICAgICAgICAgICAg
ICBpZiAoIWxpbmVGZWVkVGVybWluYXRlZCkKQEAgLTEwNDYsNyArMTA0NSw2IEBAIHZvaWQgSW5z
cGVjdG9yU3R5bGVTaGVldDo6Zml4VW5wYXJzZWRQcm8KICAgICAgICAgcmV0dXJuOwogCiAgICAg
dW5zaWduZWQgc3R5bGVTdGFydCA9IHJ1bGVEYXRhLT5zdHlsZVNvdXJjZURhdGEtPnN0eWxlQm9k
eVJhbmdlLnN0YXJ0OwotICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzID0gc3R5bGVTaGVldFRl
eHQuY2hhcmFjdGVycygpOwogICAgIENTU1Byb3BlcnR5U291cmNlRGF0YSogbmV4dERhdGEgPSAm
KHByb3BlcnR5RGF0YS5hdCgwKSk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7
ICsraSkgewogICAgICAgICBDU1NQcm9wZXJ0eVNvdXJjZURhdGEqIGN1cnJlbnREYXRhID0gbmV4
dERhdGE7CkBAIC0xMDU0LDcgKzEwNTIsNyBAQCB2b2lkIEluc3BlY3RvclN0eWxlU2hlZXQ6OmZp
eFVucGFyc2VkUHJvCiAKICAgICAgICAgaWYgKGN1cnJlbnREYXRhLT5wYXJzZWRPaykKICAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoY3VycmVudERhdGEtPnJhbmdlLmVuZCA+IDAg
JiYgY2hhcmFjdGVyc1tzdHlsZVN0YXJ0ICsgY3VycmVudERhdGEtPnJhbmdlLmVuZCAtIDFdID09
ICc7JykKKyAgICAgICAgaWYgKGN1cnJlbnREYXRhLT5yYW5nZS5lbmQgPiAwICYmIHN0eWxlU2hl
ZXRUZXh0W3N0eWxlU3RhcnQgKyBjdXJyZW50RGF0YS0+cmFuZ2UuZW5kIC0gMV0gPT0gJzsnKQog
ICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgdW5zaWduZWQgcHJvcGVydHlFbmRJblN0
eWxlU2hlZXQ7CkBAIC0xMDYzLDcgKzEwNjEsNyBAQCB2b2lkIEluc3BlY3RvclN0eWxlU2hlZXQ6
OmZpeFVucGFyc2VkUHJvCiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHByb3BlcnR5RW5kSW5T
dHlsZVNoZWV0ID0gc3R5bGVTdGFydCArIG5leHREYXRhLT5yYW5nZS5zdGFydCAtIDE7CiAKLSAg
ICAgICAgd2hpbGUgKGlzSFRNTFNwYWNlKGNoYXJhY3RlcnNbcHJvcGVydHlFbmRJblN0eWxlU2hl
ZXRdKSkKKyAgICAgICAgd2hpbGUgKGlzSFRNTFNwYWNlKHN0eWxlU2hlZXRUZXh0W3Byb3BlcnR5
RW5kSW5TdHlsZVNoZWV0XSkpCiAgICAgICAgICAgICAtLXByb3BlcnR5RW5kSW5TdHlsZVNoZWV0
OwogCiAgICAgICAgIC8vIHByb3BlcnR5RW5kSW5TdHlsZVNoZWV0IHBvaW50cyBhdCB0aGUgbGFz
dCBwcm9wZXJ0eSB0ZXh0IGNoYXJhY3Rlci4KQEAgLTEwNzEsMTQgKzEwNjksMTQgQEAgdm9pZCBJ
bnNwZWN0b3JTdHlsZVNoZWV0OjpmaXhVbnBhcnNlZFBybwogICAgICAgICBpZiAoY3VycmVudERh
dGEtPnJhbmdlLmVuZCAhPSBuZXdQcm9wZXJ0eUVuZCkgewogICAgICAgICAgICAgY3VycmVudERh
dGEtPnJhbmdlLmVuZCA9IG5ld1Byb3BlcnR5RW5kOwogICAgICAgICAgICAgdW5zaWduZWQgdmFs
dWVTdGFydEluU3R5bGVTaGVldCA9IHN0eWxlU3RhcnQgKyBjdXJyZW50RGF0YS0+cmFuZ2Uuc3Rh
cnQgKyBjdXJyZW50RGF0YS0+bmFtZS5sZW5ndGgoKTsKLSAgICAgICAgICAgIHdoaWxlICh2YWx1
ZVN0YXJ0SW5TdHlsZVNoZWV0IDwgcHJvcGVydHlFbmRJblN0eWxlU2hlZXQgJiYgY2hhcmFjdGVy
c1t2YWx1ZVN0YXJ0SW5TdHlsZVNoZWV0XSAhPSAnOicpCisgICAgICAgICAgICB3aGlsZSAodmFs
dWVTdGFydEluU3R5bGVTaGVldCA8IHByb3BlcnR5RW5kSW5TdHlsZVNoZWV0ICYmIHN0eWxlU2hl
ZXRUZXh0W3ZhbHVlU3RhcnRJblN0eWxlU2hlZXRdICE9ICc6JykKICAgICAgICAgICAgICAgICAr
K3ZhbHVlU3RhcnRJblN0eWxlU2hlZXQ7CiAgICAgICAgICAgICBpZiAodmFsdWVTdGFydEluU3R5
bGVTaGVldCA8IHByb3BlcnR5RW5kSW5TdHlsZVNoZWV0KQogICAgICAgICAgICAgICAgICsrdmFs
dWVTdGFydEluU3R5bGVTaGVldDsgLy8gU2hpZnQgcGFzdCB0aGUgJzonLgotICAgICAgICAgICAg
d2hpbGUgKHZhbHVlU3RhcnRJblN0eWxlU2hlZXQgPCBwcm9wZXJ0eUVuZEluU3R5bGVTaGVldCAm
JiBpc0hUTUxTcGFjZShjaGFyYWN0ZXJzW3ZhbHVlU3RhcnRJblN0eWxlU2hlZXRdKSkKKyAgICAg
ICAgICAgIHdoaWxlICh2YWx1ZVN0YXJ0SW5TdHlsZVNoZWV0IDwgcHJvcGVydHlFbmRJblN0eWxl
U2hlZXQgJiYgaXNIVE1MU3BhY2Uoc3R5bGVTaGVldFRleHRbdmFsdWVTdGFydEluU3R5bGVTaGVl
dF0pKQogICAgICAgICAgICAgICAgICsrdmFsdWVTdGFydEluU3R5bGVTaGVldDsKICAgICAgICAg
ICAgIC8vIE5lZWQgdG8gZXhjbHVkZSB0aGUgdHJhaWxpbmcgJzsnIGZyb20gdGhlIHByb3BlcnR5
IHZhbHVlLgotICAgICAgICAgICAgY3VycmVudERhdGEtPnZhbHVlID0gc3R5bGVTaGVldFRleHQu
c3Vic3RyaW5nKHZhbHVlU3RhcnRJblN0eWxlU2hlZXQsIHByb3BlcnR5RW5kSW5TdHlsZVNoZWV0
IC0gdmFsdWVTdGFydEluU3R5bGVTaGVldCArIChjaGFyYWN0ZXJzW3Byb3BlcnR5RW5kSW5TdHls
ZVNoZWV0XSA9PSAnOycgPyAwIDogMSkpOworICAgICAgICAgICAgY3VycmVudERhdGEtPnZhbHVl
ID0gc3R5bGVTaGVldFRleHQuc3Vic3RyaW5nKHZhbHVlU3RhcnRJblN0eWxlU2hlZXQsIHByb3Bl
cnR5RW5kSW5TdHlsZVNoZWV0IC0gdmFsdWVTdGFydEluU3R5bGVTaGVldCArIChzdHlsZVNoZWV0
VGV4dFtwcm9wZXJ0eUVuZEluU3R5bGVTaGVldF0gPT0gJzsnID8gMCA6IDEpKTsKICAgICAgICAg
fQogICAgIH0KIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHls
ZVRleHRFZGl0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JTdHlsZVRleHRFZGl0b3IuY3BwCShyZXZpc2lvbiA5MzE5NSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVRleHRFZGl0b3IuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC03OSwxMiArNzksMTEgQEAgdm9pZCBJbnNwZWN0b3JTdHlsZVRleHRFZGl0b3I6Omlu
c2VydFBybwogICAgIGlmIChpbnNlcnRMYXN0ICYmICFpbnNlcnRGaXJzdEluU291cmNlKSB7CiAg
ICAgICAgIHByb3BlcnR5U3RhcnQgPSBzdHlsZUJvZHlMZW5ndGg7CiAgICAgICAgIGlmIChwcm9w
ZXJ0eVN0YXJ0ICYmIHRleHRUb1NldC5sZW5ndGgoKSkgewotICAgICAgICAgICAgY29uc3QgVUNo
YXIqIGNoYXJhY3RlcnMgPSBtX3N0eWxlVGV4dC5jaGFyYWN0ZXJzKCk7CiAKICAgICAgICAgICAg
IGxvbmcgY3VyUG9zID0gcHJvcGVydHlTdGFydCAtIDE7IC8vIFRoZSBsYXN0IHBvc2l0aW9uIG9m
IHN0eWxlIGRlY2xhcmF0aW9uLCBzaW5jZSBwcm9wZXJ0eVN0YXJ0IHBvaW50cyBwYXN0IG9uZS4K
LSAgICAgICAgICAgIHdoaWxlIChjdXJQb3MgJiYgaXNIVE1MU3BhY2UoY2hhcmFjdGVyc1tjdXJQ
b3NdKSkKKyAgICAgICAgICAgIHdoaWxlIChjdXJQb3MgJiYgaXNIVE1MU3BhY2UobV9zdHlsZVRl
eHRbY3VyUG9zXSkpCiAgICAgICAgICAgICAgICAgLS1jdXJQb3M7Ci0gICAgICAgICAgICBpZiAo
Y3VyUG9zICYmIGNoYXJhY3RlcnNbY3VyUG9zXSAhPSAnOycpIHsKKyAgICAgICAgICAgIGlmIChj
dXJQb3MgJiYgbV9zdHlsZVRleHRbY3VyUG9zXSAhPSAnOycpIHsKICAgICAgICAgICAgICAgICAv
LyBQcmVwZW5kIGEgIjsiIHRvIHRoZSBwcm9wZXJ0eSB0ZXh0IGlmIGFwcGVuZGluZyB0byBhIHN0
eWxlIGRlY2xhcmF0aW9uIHdoZXJlCiAgICAgICAgICAgICAgICAgLy8gdGhlIGxhc3QgcHJvcGVy
dHkgaGFzIG5vIHRyYWlsaW5nICI7Ii4KICAgICAgICAgICAgICAgICB0ZXh0VG9TZXQuaW5zZXJ0
KCI7IiwgMCk7CkBAIC0yMjcsNyArMjI2LDYgQEAgdm9pZCBJbnNwZWN0b3JTdHlsZVRleHRFZGl0
b3I6OmludGVybmFsUgogICAgIGNvbnN0IFNvdXJjZVJhbmdlJiByYW5nZSA9IHByb3BlcnR5LnNv
dXJjZURhdGEucmFuZ2U7CiAgICAgbG9uZyByZXBsYWNlUmFuZ2VTdGFydCA9IHJhbmdlLnN0YXJ0
OwogICAgIGxvbmcgcmVwbGFjZVJhbmdlRW5kID0gcmFuZ2UuZW5kOwotICAgIGNvbnN0IFVDaGFy
KiBjaGFyYWN0ZXJzID0gbV9zdHlsZVRleHQuY2hhcmFjdGVycygpOwogICAgIGxvbmcgbmV3VGV4
dExlbmd0aCA9IG5ld1RleHQubGVuZ3RoKCk7CiAgICAgU3RyaW5nIGZpbmFsTmV3VGV4dCA9IG5l
d1RleHQ7CiAKQEAgLTIzOCwxNCArMjM2LDE0IEBAIHZvaWQgSW5zcGVjdG9yU3R5bGVUZXh0RWRp
dG9yOjppbnRlcm5hbFIKICAgICAgICAgaWYgKHJlcGxhY2VSYW5nZVN0YXJ0ID49IGZ1bGxQcmVm
aXhMZW5ndGggJiYgbV9zdHlsZVRleHQuc3Vic3RyaW5nKHJlcGxhY2VSYW5nZVN0YXJ0IC0gZnVs
bFByZWZpeExlbmd0aCwgZnVsbFByZWZpeExlbmd0aCkgPT0gZnVsbFByZWZpeCkKICAgICAgICAg
ICAgIHJlcGxhY2VSYW5nZVN0YXJ0IC09IGZ1bGxQcmVmaXhMZW5ndGg7CiAgICAgfSBlbHNlIGlm
IChuZXdUZXh0TGVuZ3RoKSB7Ci0gICAgICAgIGlmIChpc0hUTUxMaW5lQnJlYWsobmV3VGV4dC5j
aGFyYWN0ZXJzKClbbmV3VGV4dExlbmd0aCAtIDFdKSkgeworICAgICAgICBpZiAoaXNIVE1MTGlu
ZUJyZWFrKG5ld1RleHRbbmV3VGV4dExlbmd0aCAtIDFdKSkgewogICAgICAgICAgICAgLy8gQ29h
bGVzY2UgbmV3bGluZXMgb2YgdGhlIG9yaWdpbmFsIGFuZCBuZXcgcHJvcGVydHkgdmFsdWVzICh0
byBhdm9pZCBhIGxvdCBvZiBibGFuayBsaW5lcyB3aGlsZSBpbmNyZW1lbnRhbGx5IGFwcGx5aW5n
IHByb3BlcnR5IHZhbHVlcykuCiAgICAgICAgICAgICBib29sIGZvdW5kTmV3bGluZSA9IGZhbHNl
OwogICAgICAgICAgICAgYm9vbCBpc0xhc3ROZXdsaW5lID0gZmFsc2U7CiAgICAgICAgICAgICBp
bnQgaTsKICAgICAgICAgICAgIGludCB0ZXh0TGVuZ3RoID0gbV9zdHlsZVRleHQubGVuZ3RoKCk7
Ci0gICAgICAgICAgICBmb3IgKGkgPSByZXBsYWNlUmFuZ2VFbmQ7IGkgPCB0ZXh0TGVuZ3RoICYm
IGlzU3BhY2VPck5ld2xpbmUoY2hhcmFjdGVyc1tpXSk7ICsraSkgewotICAgICAgICAgICAgICAg
IGlzTGFzdE5ld2xpbmUgPSBpc0hUTUxMaW5lQnJlYWsoY2hhcmFjdGVyc1tpXSk7CisgICAgICAg
ICAgICBmb3IgKGkgPSByZXBsYWNlUmFuZ2VFbmQ7IGkgPCB0ZXh0TGVuZ3RoICYmIGlzU3BhY2VP
ck5ld2xpbmUobV9zdHlsZVRleHRbaV0pOyArK2kpIHsKKyAgICAgICAgICAgICAgICBpc0xhc3RO
ZXdsaW5lID0gaXNIVE1MTGluZUJyZWFrKG1fc3R5bGVUZXh0W2ldKTsKICAgICAgICAgICAgICAg
ICBpZiAoaXNMYXN0TmV3bGluZSkKICAgICAgICAgICAgICAgICAgICAgZm91bmROZXdsaW5lID0g
dHJ1ZTsKICAgICAgICAgICAgICAgICBlbHNlIGlmIChmb3VuZE5ld2xpbmUgJiYgIWlzTGFzdE5l
d2xpbmUpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0ZpbGVTeXN0ZW0uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0ZpbGVTeXN0ZW0uY3BwCShyZXZp
c2lvbiA5MzE5NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0ZpbGVTeXN0ZW0uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC04MywxMSArODMsOCBAQCBTdHJpbmcgZW5jb2RlRm9yRmlsZU5hbWUo
Y29uc3QgU3RyaW5nJiBpCiAgICAgVmVjdG9yPFVDaGFyLCA1MTI+IGJ1ZmZlcihsZW5ndGggKiAz
ICsgMSk7CiAgICAgVUNoYXIqIHAgPSBidWZmZXIuZGF0YSgpOwogCi0gICAgY29uc3QgVUNoYXIq
IHN0ciA9IGlucHV0U3RyLmNoYXJhY3RlcnMoKTsKLSAgICBjb25zdCBVQ2hhciogc3RyRW5kID0g
c3RyICsgbGVuZ3RoOwotCi0gICAgd2hpbGUgKHN0ciA8IHN0ckVuZCkgewotICAgICAgICBVQ2hh
ciBjID0gKnN0cisrOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkg
eworICAgICAgICBVQ2hhciBjID0gaW5wdXRTdHJbaV07CiAgICAgICAgIGlmIChzaG91bGRFc2Nh
cGVVQ2hhcihjKSkgewogICAgICAgICAgICAgKnArKyA9ICclJzsKICAgICAgICAgICAgIHBsYWNl
Qnl0ZUFzSGV4KGMsIHApOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vS1VSTC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vS1VSTC5jcHAJKHJldmlzaW9u
IDkzMTk1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vS1VSTC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTY1MCwyNSArNjUwLDI2IEBAIHZvaWQgS1VSTDo6Y29weVBhcnNlZFF1ZXJ5VG8oUGFy
c2VkVVJMUGEKIHsKICAgICBjb25zdCBVQ2hhciogcG9zID0gbV9zdHJpbmcuY2hhcmFjdGVycygp
ICsgbV9wYXRoRW5kICsgMTsKICAgICBjb25zdCBVQ2hhciogZW5kID0gbV9zdHJpbmcuY2hhcmFj
dGVycygpICsgbV9xdWVyeUVuZDsKLSAgICB3aGlsZSAocG9zIDwgZW5kKSB7Ci0gICAgICAgIGNv
bnN0IFVDaGFyKiBwYXJhbWV0ZXJTdGFydCA9IHBvczsKLSAgICAgICAgd2hpbGUgKHBvcyA8IGVu
ZCAmJiAqcG9zICE9ICcmJykKKyAgICB1bnNpZ25lZCBwb3MgPSBtX3BhdGhFbmQgKyAxOworICAg
IHdoaWxlIChwb3MgPCBtX3F1ZXJ5RW5kKSB7CisgICAgICAgIHVuc2lnbmVkIHBhcmFtZXRlclN0
YXJ0ID0gcG9zOworICAgICAgICB3aGlsZSAocG9zIDwgbV9xdWVyeUVuZCAmJiBtX3N0cmluZ1tw
b3NdICE9ICcmJykKICAgICAgICAgICAgICsrcG9zOwotICAgICAgICBjb25zdCBVQ2hhciogcGFy
YW1ldGVyRW5kID0gcG9zOworICAgICAgICB1bnNpZ25lZCBwYXJhbWV0ZXJFbmQgPSBwb3M7CiAg
ICAgICAgIGlmIChwb3MgPCBlbmQpIHsKLSAgICAgICAgICAgIEFTU0VSVCgqcG9zID09ICcmJyk7
CisgICAgICAgICAgICBBU1NFUlQobV9zdHJpbmdbcG9zXSA9PSAnJicpOwogICAgICAgICAgICAg
Kytwb3M7CiAgICAgICAgIH0KICAgICAgICAgaWYgKHBhcmFtZXRlclN0YXJ0ID09IHBhcmFtZXRl
ckVuZCkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBjb25zdCBVQ2hhciogbmFtZVN0
YXJ0ID0gcGFyYW1ldGVyU3RhcnQ7Ci0gICAgICAgIGNvbnN0IFVDaGFyKiBlcXVhbFNpZ24gPSBw
YXJhbWV0ZXJTdGFydDsKLSAgICAgICAgd2hpbGUgKGVxdWFsU2lnbiA8IHBhcmFtZXRlckVuZCAm
JiAqZXF1YWxTaWduICE9ICc9JykKKyAgICAgICAgdW5zaWduZWQgbmFtZVN0YXJ0ID0gcGFyYW1l
dGVyU3RhcnQ7CisgICAgICAgIHVuc2lnbmVkIGVxdWFsU2lnbiA9IHBhcmFtZXRlclN0YXJ0Owor
ICAgICAgICB3aGlsZSAoZXF1YWxTaWduIDwgcGFyYW1ldGVyRW5kICYmIG1fc3RyaW5nW2VxdWFs
U2lnbl0gIT0gJz0nKQogICAgICAgICAgICAgKytlcXVhbFNpZ247CiAgICAgICAgIGlmIChlcXVh
bFNpZ24gPT0gbmFtZVN0YXJ0KQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIFN0cmlu
ZyBuYW1lKG5hbWVTdGFydCwgZXF1YWxTaWduIC0gbmFtZVN0YXJ0KTsKLSAgICAgICAgU3RyaW5n
IHZhbHVlID0gZXF1YWxTaWduID09IHBhcmFtZXRlckVuZCA/IFN0cmluZygpIDogU3RyaW5nKGVx
dWFsU2lnbiArIDEsIHBhcmFtZXRlckVuZCAtIGVxdWFsU2lnbiAtIDEpOworICAgICAgICBTdHJp
bmcgbmFtZShtX3N0cmluZywgbmFtZVN0YXJ0LCBlcXVhbFNpZ24gLSBuYW1lU3RhcnQpOworICAg
ICAgICBTdHJpbmcgdmFsdWUgPSBlcXVhbFNpZ24gPT0gcGFyYW1ldGVyRW5kID8gU3RyaW5nKCkg
OiBTdHJpbmcobV9zdHJpbmcsIGVxdWFsU2lnbiArIDEsIHBhcmFtZXRlckVuZCAtIGVxdWFsU2ln
biAtIDEpOwogICAgICAgICBwYXJhbWV0ZXJzLnNldChuYW1lLCB2YWx1ZSk7CiAgICAgfQogfQpA
QCAtMTk4MSwxNCArMTk4MiwxMyBAQCBTdHJpbmcgbWltZVR5cGVGcm9tRGF0YVVSTChjb25zdCBT
dHJpbmcmCiBib29sIHByb3RvY29sSXNJbkhUVFBGYW1pbHkoY29uc3QgU3RyaW5nJiB1cmwpCiB7
CiAgICAgdW5zaWduZWQgbGVuZ3RoID0gdXJsLmxlbmd0aCgpOwotICAgIGNvbnN0IFVDaGFyKiBj
aGFyYWN0ZXJzID0gdXJsLmNoYXJhY3RlcnMoKTsKICAgICByZXR1cm4gbGVuZ3RoID4gNAotICAg
ICAgICAmJiBpc0xldHRlck1hdGNoSWdub3JpbmdDYXNlKGNoYXJhY3RlcnNbMF0sICdoJykKLSAg
ICAgICAgJiYgaXNMZXR0ZXJNYXRjaElnbm9yaW5nQ2FzZShjaGFyYWN0ZXJzWzFdLCAndCcpCi0g
ICAgICAgICYmIGlzTGV0dGVyTWF0Y2hJZ25vcmluZ0Nhc2UoY2hhcmFjdGVyc1syXSwgJ3QnKQot
ICAgICAgICAmJiBpc0xldHRlck1hdGNoSWdub3JpbmdDYXNlKGNoYXJhY3RlcnNbM10sICdwJykK
LSAgICAgICAgJiYgKGNoYXJhY3RlcnNbNF0gPT0gJzonCi0gICAgICAgICAgICB8fCAoaXNMZXR0
ZXJNYXRjaElnbm9yaW5nQ2FzZShjaGFyYWN0ZXJzWzRdLCAncycpICYmIGxlbmd0aCA+IDUgJiYg
Y2hhcmFjdGVyc1s1XSA9PSAnOicpKTsKKyAgICAgICAgJiYgaXNMZXR0ZXJNYXRjaElnbm9yaW5n
Q2FzZSh1cmxbMF0sICdoJykKKyAgICAgICAgJiYgaXNMZXR0ZXJNYXRjaElnbm9yaW5nQ2FzZSh1
cmxbMV0sICd0JykKKyAgICAgICAgJiYgaXNMZXR0ZXJNYXRjaElnbm9yaW5nQ2FzZSh1cmxbMl0s
ICd0JykKKyAgICAgICAgJiYgaXNMZXR0ZXJNYXRjaElnbm9yaW5nQ2FzZSh1cmxbM10sICdwJykK
KyAgICAgICAgJiYgKHVybFs0XSA9PSAnOicKKyAgICAgICAgICAgIHx8IChpc0xldHRlck1hdGNo
SWdub3JpbmdDYXNlKHVybFs0XSwgJ3MnKSAmJiBsZW5ndGggPiA1ICYmIHVybFs1XSA9PSAnOicp
KTsKIH0KIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTGVuZ3RoLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9MZW5ndGguY3BwCShyZXZpc2lvbiA5
MzE5NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xlbmd0aC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTg3LDEwICs4Nyw5IEBAIHN0YXRpYyBpbnQgY291bnRDaGFyYWN0ZXIoY29uc3QgVUNo
YXIqIGQKIFBhc3NPd25BcnJheVB0cjxMZW5ndGg+IG5ld0Nvb3Jkc0FycmF5KGNvbnN0IFN0cmlu
ZyYgc3RyaW5nLCBpbnQmIGxlbikKIHsKICAgICB1bnNpZ25lZCBsZW5ndGggPSBzdHJpbmcubGVu
Z3RoKCk7Ci0gICAgY29uc3QgVUNoYXIqIGRhdGEgPSBzdHJpbmcuY2hhcmFjdGVycygpOwogICAg
IFN0cmluZ0J1ZmZlciBzcGFjaWZpZWQobGVuZ3RoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbGVuZ3RoOyBpKyspIHsKLSAgICAgICAgVUNoYXIgY2MgPSBkYXRhW2ldOworICAgICAg
ICBVQ2hhciBjYyA9IHN0cmluZ1tpXTsKICAgICAgICAgaWYgKGNjID4gJzknIHx8IChjYyA8ICcw
JyAmJiBjYyAhPSAnLScgJiYgY2MgIT0gJyonICYmIGNjICE9ICcuJykpCiAgICAgICAgICAgICBz
cGFjaWZpZWRbaV0gPSAnICc7CiAgICAgICAgIGVsc2UKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Jl
bmRlcmluZy9SZW5kZXJUZXh0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyVGV4dC5jcHAJKHJldmlzaW9uIDkzMTk1KQorKysgU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01OCw4ICs1OCw2IEBA
IHN0YXRpYyB2b2lkIG1ha2VDYXBpdGFsaXplZChTdHJpbmcqIHN0cmkKICAgICAgICAgcmV0dXJu
OwogCiAgICAgdW5zaWduZWQgbGVuZ3RoID0gc3RyaW5nLT5sZW5ndGgoKTsKLSAgICBjb25zdCBV
Q2hhciogY2hhcmFjdGVycyA9IHN0cmluZy0+Y2hhcmFjdGVycygpOwotCiAgICAgaWYgKGxlbmd0
aCA+PSBudW1lcmljX2xpbWl0czx1bnNpZ25lZD46Om1heCgpKQogICAgICAgICBDUkFTSCgpOwog
CkBAIC02NywxMCArNjUsMTAgQEAgc3RhdGljIHZvaWQgbWFrZUNhcGl0YWxpemVkKFN0cmluZyog
c3RyaQogICAgIHN0cmluZ1dpdGhQcmV2aW91c1swXSA9IHByZXZpb3VzID09IG5vQnJlYWtTcGFj
ZSA/ICcgJyA6IHByZXZpb3VzOwogICAgIGZvciAodW5zaWduZWQgaSA9IDE7IGkgPCBsZW5ndGgg
KyAxOyBpKyspIHsKICAgICAgICAgLy8gUmVwbGFjZSAmbmJzcCB3aXRoIGEgcmVhbCBzcGFjZSBz
aW5jZSBJQ1Ugbm8gbG9uZ2VyIHRyZWF0cyAmbmJzcCBhcyBhIHdvcmQgc2VwYXJhdG9yLgotICAg
ICAgICBpZiAoY2hhcmFjdGVyc1tpIC0gMV0gPT0gbm9CcmVha1NwYWNlKQorICAgICAgICBpZiAo
KCpzdHJpbmcpW2kgLSAxXSA9PSBub0JyZWFrU3BhY2UpCiAgICAgICAgICAgICBzdHJpbmdXaXRo
UHJldmlvdXNbaV0gPSAnICc7CiAgICAgICAgIGVsc2UKLSAgICAgICAgICAgIHN0cmluZ1dpdGhQ
cmV2aW91c1tpXSA9IGNoYXJhY3RlcnNbaSAtIDFdOworICAgICAgICAgICAgc3RyaW5nV2l0aFBy
ZXZpb3VzW2ldID0gKCpzdHJpbmcpW2kgLSAxXTsKICAgICB9CiAKICAgICBUZXh0QnJlYWtJdGVy
YXRvciogYm91bmRhcnkgPSB3b3JkQnJlYWtJdGVyYXRvcihzdHJpbmdXaXRoUHJldmlvdXMuY2hh
cmFjdGVycygpLCBsZW5ndGggKyAxKTsKQEAgLTgzLDkgKzgxLDkgQEAgc3RhdGljIHZvaWQgbWFr
ZUNhcGl0YWxpemVkKFN0cmluZyogc3RyaQogICAgIGludDMyX3Qgc3RhcnRPZldvcmQgPSB0ZXh0
QnJlYWtGaXJzdChib3VuZGFyeSk7CiAgICAgZm9yIChlbmRPZldvcmQgPSB0ZXh0QnJlYWtOZXh0
KGJvdW5kYXJ5KTsgZW5kT2ZXb3JkICE9IFRleHRCcmVha0RvbmU7IHN0YXJ0T2ZXb3JkID0gZW5k
T2ZXb3JkLCBlbmRPZldvcmQgPSB0ZXh0QnJlYWtOZXh0KGJvdW5kYXJ5KSkgewogICAgICAgICBp
ZiAoc3RhcnRPZldvcmQgIT0gMCkgLy8gSWdub3JlIGZpcnN0IGNoYXIgb2YgcHJldmlvdXMgc3Ry
aW5nCi0gICAgICAgICAgICBkYXRhW3N0YXJ0T2ZXb3JkIC0gMV0gPSBjaGFyYWN0ZXJzW3N0YXJ0
T2ZXb3JkIC0gMV0gPT0gbm9CcmVha1NwYWNlID8gbm9CcmVha1NwYWNlIDogdG9UaXRsZUNhc2Uo
c3RyaW5nV2l0aFByZXZpb3VzW3N0YXJ0T2ZXb3JkXSk7CisgICAgICAgICAgICBkYXRhW3N0YXJ0
T2ZXb3JkIC0gMV0gPSAoKnN0cmluZylbc3RhcnRPZldvcmQgLSAxXSA9PSBub0JyZWFrU3BhY2Ug
PyBub0JyZWFrU3BhY2UgOiB0b1RpdGxlQ2FzZShzdHJpbmdXaXRoUHJldmlvdXNbc3RhcnRPZldv
cmRdKTsKICAgICAgICAgZm9yIChpbnQgaSA9IHN0YXJ0T2ZXb3JkICsgMTsgaSA8IGVuZE9mV29y
ZDsgaSsrKQotICAgICAgICAgICAgZGF0YVtpIC0gMV0gPSBjaGFyYWN0ZXJzW2kgLSAxXTsKKyAg
ICAgICAgICAgIGRhdGFbaSAtIDFdID0gKCpzdHJpbmcpW2kgLSAxXTsKICAgICB9CiAKICAgICAq
c3RyaW5nID0gU3RyaW5nOjphZG9wdChkYXRhKTsK
</data>
<flag name="commit-queue"
          id="99907"
          type_id="3"
          status="-"
          setter="gyuyoung.kim"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>104162</attachid>
            <date>2011-08-17 02:48:41 -0700</date>
            <delta_ts>2011-08-18 03:40:02 -0700</delta_ts>
            <desc>updated patch</desc>
            <filename>patch66286a</filename>
            <type>text/plain</type>
            <size>32042</size>
            <attacher name="Xianzhu Wang">wangxianzhu</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDkzMTk1KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjIgQEAKKzIwMTEtMDgtMTcgIFhpYW56aHUg
V2FuZyAgPHdhbmd4aWFuemh1QGdvb2dsZS5jb20+CisKKyAgICAgICAgVXNlIFN0cmluZyBbXSBv
cGVyYXRvciBpbnN0ZWFkIG9mIGluZGV4aW5nIGludG8gU3RyaW5nOjpjaGFyYWN0ZXJzKCkgZGly
ZWN0bHkuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02
NjI4NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5v
IG5ldyB0ZXN0cy4gQWxsIG1vZGlmaWNhdGlvbnMgc2hvdWxkIHByZXNlcnZlIGV4YWN0bHkgdGhl
IG9yaWdpbmFsIGJlaGF2aW9yLgorICAgICAgICBBbGwgbGF5b3V0IHRlc3RzIGFuZCB1bml0IHRl
c3RzIHNob3VsZCByZXN1bHQgYXMgYmVmb3JlLgorCisgICAgICAgICogY3NzL0NTU1BhcnNlci5j
cHA6CisgICAgICAgIChXZWJDb3JlOjppc0NTU1Rva2VuaXplcklkZW50aWZpZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6aXNDU1NUb2tlbml6ZXJVUkwpOgorICAgICAgICAqIGRvbS9EYXRhc2V0RE9N
U3RyaW5nTWFwLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmlzVmFsaWRBdHRyaWJ1dGVOYW1lKToK
KyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnRBdHRyaWJ1dGVOYW1lVG9Qcm9wZXJ0eU5hbWUpOgor
ICAgICAgICAoV2ViQ29yZTo6cHJvcGVydHlOYW1lTWF0Y2hlc0F0dHJpYnV0ZU5hbWUpOgorICAg
ICAgICAoV2ViQ29yZTo6aXNWYWxpZFByb3BlcnR5TmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpj
b252ZXJ0UHJvcGVydHlOYW1lVG9BdHRyaWJ1dGVOYW1lKToKKyAgICAgICAgKiBkb20vRG9jdW1l
bnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y2Fub25pY2FsaXplZFRpdGxlKToKKyAgICAgICAg
KFdlYkNvcmU6OkRvY3VtZW50OjpwYXJzZVF1YWxpZmllZE5hbWUpOgorICAgICAgICAqIGRvbS9T
cGFjZVNwbGl0U3RyaW5nLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Omhhc05vbkFTQ0lJT3JVcHBl
cik6CisgICAgICAgICogZG9tL1N0eWxlZEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
U3R5bGVkRWxlbWVudDo6Y2xhc3NBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKiBlZGl0aW5n
L0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbnRhaW5zT25s
eVdoaXRlc3BhY2UpOgorICAgICAgICAqIGVkaXRpbmcvU21hcnRSZXBsYWNlSUNVLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OmFkZEFsbENvZGVQb2ludHMpOgorICAgICAgICAqIGVkaXRpbmcvVGV4
dEl0ZXJhdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbGxhcHNlZFNwYWNlTGVuZ3RoKToK
KyAgICAgICAgKFdlYkNvcmU6OmNvbnRhaW5zS2FuYUxldHRlcnMpOgorICAgICAgICAqIGVkaXRp
bmcvVHlwaW5nQ29tbWFuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpUeXBpbmdDb21tYW5kOjpp
bnNlcnRUZXh0KToKKyAgICAgICAgKiBodG1sL0hUTUxGb250RWxlbWVudC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpwYXJzZUZvbnRTaXplKToKKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MUGFy
c2VySWRpb21zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnN0cmlwTGVhZGluZ0FuZFRyYWlsaW5n
SFRNTFNwYWNlcyk6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZUhUTUxJbnRlZ2VyKToKKyAgICAg
ICAgKFdlYkNvcmU6OnBhcnNlSFRNTE5vbk5lZ2F0aXZlSW50ZWdlcik6CisgICAgICAgICogaW5z
cGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVT
ZWFyY2hSZWdleFNvdXJjZSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hl
ZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3R5bGU6Om5ld0xpbmVBbmRXaGl0
ZXNwYWNlRGVsaW1pdGVycyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdHlsZVNoZWV0
OjpmaXhVbnBhcnNlZFByb3BlcnR5UmFuZ2VzKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVj
dG9yU3R5bGVUZXh0RWRpdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0eWxl
VGV4dEVkaXRvcjo6aW5zZXJ0UHJvcGVydHkpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
U3R5bGVUZXh0RWRpdG9yOjppbnRlcm5hbFJlcGxhY2VQcm9wZXJ0eSk6CisgICAgICAgICogcGxh
dGZvcm0vRmlsZVN5c3RlbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjplbmNvZGVGb3JGaWxlTmFt
ZSk6CisgICAgICAgICogcGxhdGZvcm0vS1VSTC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpLVVJM
Ojpjb3B5UGFyc2VkUXVlcnlUbyk6CisgICAgICAgIChXZWJDb3JlOjpwcm90b2NvbElzSW5IVFRQ
RmFtaWx5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9MZW5ndGguY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6bmV3Q29vcmRzQXJyYXkpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJUZXh0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6Om1ha2VDYXBpdGFsaXplZCk6CisKIDIwMTEtMDgtMTYgIEx1a2Ug
TWFjcGhlcnNvbiAgIDxtYWNwaGVyc29uQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXByZXNl
bnQgUmVuZGVyU3R5bGU6OnRleHRPdmVyZmxvdyBwcm9wZXJ0eSB1c2luZyBhbiBlbnVtIGluc3Rl
YWQgb2YgYSBib29sLgpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAJKHJldmlzaW9uIDkz
MTk1KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTcxMzIsMjEgKzcxMzIsMjUgQEAgaW50IGNzc1ZhbHVlS2V5d29yZElEKGNvbnN0IENTU1Bh
cnNlclN0cgogLy8gImlkZW50IiBmcm9tIHRoZSBDU1MgdG9rZW5pemVyLCBtaW51cyBiYWNrc2xh
c2gtZXNjYXBlIHNlcXVlbmNlcwogc3RhdGljIGJvb2wgaXNDU1NUb2tlbml6ZXJJZGVudGlmaWVy
KGNvbnN0IFN0cmluZyYgc3RyaW5nKQogewotICAgIGNvbnN0IFVDaGFyKiBwID0gc3RyaW5nLmNo
YXJhY3RlcnMoKTsKLSAgICBjb25zdCBVQ2hhciogZW5kID0gcCArIHN0cmluZy5sZW5ndGgoKTsK
KyAgICB1bnNpZ25lZCBsZW5ndGggPSBzdHJpbmcubGVuZ3RoKCk7CisgICAgdW5zaWduZWQgaSA9
IDA7CiAKICAgICAvLyAtPwotICAgIGlmIChwICE9IGVuZCAmJiBwWzBdID09ICctJykKLSAgICAg
ICAgKytwOworICAgIGlmIChsZW5ndGggJiYgc3RyaW5nWzBdID09ICctJykKKyAgICAgICAgKytp
OwogCiAgICAgLy8ge25tc3RhcnR9Ci0gICAgaWYgKHAgPT0gZW5kIHx8ICEocFswXSA9PSAnXycg
fHwgcFswXSA+PSAxMjggfHwgaXNBU0NJSUFscGhhKHBbMF0pKSkKKyAgICBpZiAoaSA9PSBsZW5n
dGgpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICArK3A7CisgICAgVUNoYXIgYyA9IHN0cmlu
Z1tpXTsKKyAgICBpZiAoIShjID09ICdfJyB8fCBjID49IDEyOCB8fCBpc0FTQ0lJQWxwaGEoYykp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgKytpOwogCiAgICAgLy8ge25tY2hhcn0qCi0g
ICAgZm9yICg7IHAgIT0gZW5kOyArK3ApIHsKLSAgICAgICAgaWYgKCEocFswXSA9PSAnXycgfHwg
cFswXSA9PSAnLScgfHwgcFswXSA+PSAxMjggfHwgaXNBU0NJSUFscGhhbnVtZXJpYyhwWzBdKSkp
CisgICAgZm9yICg7IGkgPCBsZW5ndGg7ICsraSkgeworICAgICAgICBjID0gc3RyaW5nW2ldOwor
ICAgICAgICBpZiAoIShjID09ICdfJyB8fCBjID09ICctJyB8fCBjID49IDEyOCB8fCBpc0FTQ0lJ
QWxwaGFudW1lcmljKGMpKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKQEAg
LTcxNTYsMTEgKzcxNjAsOCBAQCBzdGF0aWMgYm9vbCBpc0NTU1Rva2VuaXplcklkZW50aWZpZXIo
Y29uCiAvLyAidXJsIiBmcm9tIHRoZSBDU1MgdG9rZW5pemVyLCBtaW51cyBiYWNrc2xhc2gtZXNj
YXBlIHNlcXVlbmNlcwogc3RhdGljIGJvb2wgaXNDU1NUb2tlbml6ZXJVUkwoY29uc3QgU3RyaW5n
JiBzdHJpbmcpCiB7Ci0gICAgY29uc3QgVUNoYXIqIHAgPSBzdHJpbmcuY2hhcmFjdGVycygpOwot
ICAgIGNvbnN0IFVDaGFyKiBlbmQgPSBwICsgc3RyaW5nLmxlbmd0aCgpOwotCi0gICAgZm9yICg7
IHAgIT0gZW5kOyArK3ApIHsKLSAgICAgICAgVUNoYXIgYyA9IHBbMF07CisgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHN0cmluZy5sZW5ndGgoKTsgKytpKSB7CisgICAgICAgIFVDaGFyIGMg
PSBzdHJpbmdbaV07CiAgICAgICAgIHN3aXRjaCAoYykgewogICAgICAgICAgICAgY2FzZSAnISc6
CiAgICAgICAgICAgICBjYXNlICcjJzoKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9EYXRhc2V0
RE9NU3RyaW5nTWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRGF0YXNl
dERPTVN0cmluZ01hcC5jcHAJKHJldmlzaW9uIDkzMTk1KQorKysgU291cmNlL1dlYkNvcmUvZG9t
L0RhdGFzZXRET01TdHJpbmdNYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCwxMCArNDAsOSBA
QCBzdGF0aWMgYm9vbCBpc1ZhbGlkQXR0cmlidXRlTmFtZShjb25zdCBTCiAgICAgaWYgKCFuYW1l
LnN0YXJ0c1dpdGgoImRhdGEtIikpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGNvbnN0
IFVDaGFyKiBjaGFyYWN0ZXJzID0gbmFtZS5jaGFyYWN0ZXJzKCk7CiAgICAgdW5zaWduZWQgbGVu
Z3RoID0gbmFtZS5sZW5ndGgoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSA1OyBpIDwgbGVuZ3Ro
OyArK2kpIHsKLSAgICAgICAgaWYgKGlzQVNDSUlVcHBlcihjaGFyYWN0ZXJzW2ldKSkKKyAgICAg
ICAgaWYgKGlzQVNDSUlVcHBlcihuYW1lW2ldKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsK
ICAgICB9CiAKQEAgLTU0LDE1ICs1MywxNCBAQCBzdGF0aWMgU3RyaW5nIGNvbnZlcnRBdHRyaWJ1
dGVOYW1lVG9Qcm9wCiB7CiAgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwogCi0gICAg
Y29uc3QgVUNoYXIqIGNoYXJhY3RlcnMgPSBuYW1lLmNoYXJhY3RlcnMoKTsKICAgICB1bnNpZ25l
ZCBsZW5ndGggPSBuYW1lLmxlbmd0aCgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDU7IGkgPCBs
ZW5ndGg7ICsraSkgewotICAgICAgICBVQ2hhciBjaGFyYWN0ZXIgPSBjaGFyYWN0ZXJzW2ldOwor
ICAgICAgICBVQ2hhciBjaGFyYWN0ZXIgPSBuYW1lW2ldOwogICAgICAgICBpZiAoY2hhcmFjdGVy
ICE9ICctJykKICAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGNoYXJhY3Rlcik7CiAg
ICAgICAgIGVsc2UgewotICAgICAgICAgICAgaWYgKChpICsgMSA8IGxlbmd0aCkgJiYgaXNBU0NJ
SUxvd2VyKGNoYXJhY3RlcnNbaSArIDFdKSkgewotICAgICAgICAgICAgICAgIHN0cmluZ0J1aWxk
ZXIuYXBwZW5kKHRvQVNDSUlVcHBlcihjaGFyYWN0ZXJzW2kgKyAxXSkpOworICAgICAgICAgICAg
aWYgKChpICsgMSA8IGxlbmd0aCkgJiYgaXNBU0NJSUxvd2VyKG5hbWVbaSArIDFdKSkgeworICAg
ICAgICAgICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKHRvQVNDSUlVcHBlcihuYW1lW2kgKyAx
XSkpOwogICAgICAgICAgICAgICAgICsraTsKICAgICAgICAgICAgIH0gZWxzZQogICAgICAgICAg
ICAgICAgIHN0cmluZ0J1aWxkZXIuYXBwZW5kKGNoYXJhY3Rlcik7CkBAIC03Nyw4ICs3NSw2IEBA
IHN0YXRpYyBib29sIHByb3BlcnR5TmFtZU1hdGNoZXNBdHRyaWJ1dGUKICAgICBpZiAoIWF0dHJp
YnV0ZU5hbWUuc3RhcnRzV2l0aCgiZGF0YS0iKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0g
ICAgY29uc3QgVUNoYXIqIHByb3BlcnR5ID0gcHJvcGVydHlOYW1lLmNoYXJhY3RlcnMoKTsKLSAg
ICBjb25zdCBVQ2hhciogYXR0cmlidXRlID0gYXR0cmlidXRlTmFtZS5jaGFyYWN0ZXJzKCk7CiAg
ICAgdW5zaWduZWQgcHJvcGVydHlMZW5ndGggPSBwcm9wZXJ0eU5hbWUubGVuZ3RoKCk7CiAgICAg
dW5zaWduZWQgYXR0cmlidXRlTGVuZ3RoID0gYXR0cmlidXRlTmFtZS5sZW5ndGgoKTsKICAgIApA
QCAtODYsMTAgKzgyLDEwIEBAIHN0YXRpYyBib29sIHByb3BlcnR5TmFtZU1hdGNoZXNBdHRyaWJ1
dGUKICAgICB1bnNpZ25lZCBwID0gMDsKICAgICBib29sIHdvcmRCb3VuZGFyeSA9IGZhbHNlOwog
ICAgIHdoaWxlIChhIDwgYXR0cmlidXRlTGVuZ3RoICYmIHAgPCBwcm9wZXJ0eUxlbmd0aCkgewot
ICAgICAgICBpZiAoYXR0cmlidXRlW2FdID09ICctJyAmJiBhICsgMSA8IGF0dHJpYnV0ZUxlbmd0
aCAmJiBhdHRyaWJ1dGVbYSArIDFdICE9ICctJykKKyAgICAgICAgaWYgKGF0dHJpYnV0ZU5hbWVb
YV0gPT0gJy0nICYmIGEgKyAxIDwgYXR0cmlidXRlTGVuZ3RoICYmIGF0dHJpYnV0ZU5hbWVbYSAr
IDFdICE9ICctJykKICAgICAgICAgICAgIHdvcmRCb3VuZGFyeSA9IHRydWU7CiAgICAgICAgIGVs
c2UgewotICAgICAgICAgICAgaWYgKCh3b3JkQm91bmRhcnkgPyB0b0FTQ0lJVXBwZXIoYXR0cmli
dXRlW2FdKSA6IGF0dHJpYnV0ZVthXSkgIT0gcHJvcGVydHlbcF0pCisgICAgICAgICAgICBpZiAo
KHdvcmRCb3VuZGFyeSA/IHRvQVNDSUlVcHBlcihhdHRyaWJ1dGVOYW1lW2FdKSA6IGF0dHJpYnV0
ZU5hbWVbYV0pICE9IHByb3BlcnR5TmFtZVtwXSkKICAgICAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgICAgICBwKys7CiAgICAgICAgICAgICB3b3JkQm91bmRhcnkgPSBmYWxzZTsK
QEAgLTEwMiwxMCArOTgsOSBAQCBzdGF0aWMgYm9vbCBwcm9wZXJ0eU5hbWVNYXRjaGVzQXR0cmli
dXRlCiAKIHN0YXRpYyBib29sIGlzVmFsaWRQcm9wZXJ0eU5hbWUoY29uc3QgU3RyaW5nJiBuYW1l
KQogewotICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzID0gbmFtZS5jaGFyYWN0ZXJzKCk7CiAg
ICAgdW5zaWduZWQgbGVuZ3RoID0gbmFtZS5sZW5ndGgoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgaWYgKGNoYXJhY3RlcnNbaV0gPT0gJy0n
ICYmIChpICsgMSA8IGxlbmd0aCkgJiYgaXNBU0NJSUxvd2VyKGNoYXJhY3RlcnNbaSArIDFdKSkK
KyAgICAgICAgaWYgKG5hbWVbaV0gPT0gJy0nICYmIChpICsgMSA8IGxlbmd0aCkgJiYgaXNBU0NJ
SUxvd2VyKG5hbWVbaSArIDFdKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAg
ICAgcmV0dXJuIHRydWU7CkBAIC0xMTYsMTAgKzExMSw5IEBAIHN0YXRpYyBTdHJpbmcgY29udmVy
dFByb3BlcnR5TmFtZVRvQXR0cmkKICAgICBTdHJpbmdCdWlsZGVyIGJ1aWxkZXI7CiAgICAgYnVp
bGRlci5hcHBlbmQoImRhdGEtIik7CiAKLSAgICBjb25zdCBVQ2hhciogY2hhcmFjdGVycyA9IG5h
bWUuY2hhcmFjdGVycygpOwogICAgIHVuc2lnbmVkIGxlbmd0aCA9IG5hbWUubGVuZ3RoKCk7CiAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0gICAgICAgIFVDaGFy
IGNoYXJhY3RlciA9IGNoYXJhY3RlcnNbaV07CisgICAgICAgIFVDaGFyIGNoYXJhY3RlciA9IG5h
bWVbaV07CiAgICAgICAgIGlmIChpc0FTQ0lJVXBwZXIoY2hhcmFjdGVyKSkgewogICAgICAgICAg
ICAgYnVpbGRlci5hcHBlbmQoJy0nKTsKICAgICAgICAgICAgIGJ1aWxkZXIuYXBwZW5kKHRvQVND
SUlMb3dlcihjaGFyYWN0ZXIpKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkocmV2aXNp
b24gOTMxOTUpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xMjM4LDcgKzEyMzgsNiBAQCBQYXNzUmVmUHRyPFJhbmdlPiBEb2N1bWVudDo6Y2Fy
ZXRSYW5nZUZyCiBzdGF0aWMgaW5saW5lIFN0cmluZ1dpdGhEaXJlY3Rpb24gY2Fub25pY2FsaXpl
ZFRpdGxlKERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgU3RyaW5nV2l0aERpcmVjdGlvbiYgdGl0
bGVXaXRoRGlyZWN0aW9uKQogewogICAgIGNvbnN0IFN0cmluZyYgdGl0bGUgPSB0aXRsZVdpdGhE
aXJlY3Rpb24uc3RyaW5nKCk7Ci0gICAgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMgPSB0aXRsZS5j
aGFyYWN0ZXJzKCk7CiAgICAgdW5zaWduZWQgbGVuZ3RoID0gdGl0bGUubGVuZ3RoKCk7CiAgICAg
dW5zaWduZWQgaTsKIApAQCAtMTI0Nyw3ICsxMjQ2LDcgQEAgc3RhdGljIGlubGluZSBTdHJpbmdX
aXRoRGlyZWN0aW9uIGNhbm9uaQogCiAgICAgLy8gU2tpcCBsZWFkaW5nIHNwYWNlcyBhbmQgbGVh
ZGluZyBjaGFyYWN0ZXJzIHRoYXQgd291bGQgY29udmVydCB0byBzcGFjZXMKICAgICBmb3IgKGkg
PSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKLSAgICAgICAgVUNoYXIgYyA9IGNoYXJhY3RlcnNbaV07
CisgICAgICAgIFVDaGFyIGMgPSB0aXRsZVtpXTsKICAgICAgICAgaWYgKCEoYyA8PSAweDIwIHx8
IGMgPT0gMHg3RikpCiAgICAgICAgICAgICBicmVhazsKICAgICB9CkBAIC0xMjU4LDcgKzEyNTcs
NyBAQCBzdGF0aWMgaW5saW5lIFN0cmluZ1dpdGhEaXJlY3Rpb24gY2Fub25pCiAgICAgLy8gUmVw
bGFjZSBjb250cm9sIGNoYXJhY3RlcnMgd2l0aCBzcGFjZXMsIGFuZCBiYWNrc2xhc2hlcyB3aXRo
IGN1cnJlbmN5IHN5bWJvbHMsIGFuZCBjb2xsYXBzZSB3aGl0ZXNwYWNlLgogICAgIGJvb2wgcHJl
dmlvdXNDaGFyV2FzV1MgPSBmYWxzZTsKICAgICBmb3IgKDsgaSA8IGxlbmd0aDsgKytpKSB7Ci0g
ICAgICAgIFVDaGFyIGMgPSBjaGFyYWN0ZXJzW2ldOworICAgICAgICBVQ2hhciBjID0gdGl0bGVb
aV07CiAgICAgICAgIGlmIChjIDw9IDB4MjAgfHwgYyA9PSAweDdGIHx8IChXVEY6OlVuaWNvZGU6
OmNhdGVnb3J5KGMpICYgKFdURjo6VW5pY29kZTo6U2VwYXJhdG9yX0xpbmUgfCBXVEY6OlVuaWNv
ZGU6OlNlcGFyYXRvcl9QYXJhZ3JhcGgpKSkgewogICAgICAgICAgICAgaWYgKHByZXZpb3VzQ2hh
cldhc1dTKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwpAQCAtMzc0NCwxMCArMzc0Myw5IEBA
IGJvb2wgRG9jdW1lbnQ6OnBhcnNlUXVhbGlmaWVkTmFtZShjb25zdCAKICAgICBib29sIHNhd0Nv
bG9uID0gZmFsc2U7CiAgICAgaW50IGNvbG9uUG9zID0gMDsKIAotICAgIGNvbnN0IFVDaGFyKiBz
ID0gcXVhbGlmaWVkTmFtZS5jaGFyYWN0ZXJzKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGxlbmd0aDspIHsKICAgICAgICAgVUNoYXIzMiBjOwotICAgICAgICBVMTZfTkVYVChzLCBp
LCBsZW5ndGgsIGMpCisgICAgICAgIFUxNl9ORVhUKHF1YWxpZmllZE5hbWUsIGksIGxlbmd0aCwg
YykKICAgICAgICAgaWYgKGMgPT0gJzonKSB7CiAgICAgICAgICAgICBpZiAoc2F3Q29sb24pIHsK
ICAgICAgICAgICAgICAgICBlYyA9IE5BTUVTUEFDRV9FUlI7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9kb20vU3BhY2VTcGxpdFN0cmluZy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
ZG9tL1NwYWNlU3BsaXRTdHJpbmcuY3BwCShyZXZpc2lvbiA5MzE5NSkKKysrIFNvdXJjZS9XZWJD
b3JlL2RvbS9TcGFjZVNwbGl0U3RyaW5nLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzEsMTIgKzMx
LDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RhdGljIGJvb2wgaGFzTm9uQVNDSUlPclVw
cGVyKGNvbnN0IFN0cmluZyYgc3RyaW5nKQogewotICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJz
ID0gc3RyaW5nLmNoYXJhY3RlcnMoKTsKICAgICB1bnNpZ25lZCBsZW5ndGggPSBzdHJpbmcubGVu
Z3RoKCk7CiAgICAgYm9vbCBoYXNVcHBlciA9IGZhbHNlOwogICAgIFVDaGFyIG9yZWQgPSAwOwog
ICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewotICAgICAgICBVQ2hh
ciBjID0gY2hhcmFjdGVyc1tpXTsKKyAgICAgICAgVUNoYXIgYyA9IHN0cmluZ1tpXTsKICAgICAg
ICAgaGFzVXBwZXIgfD0gaXNBU0NJSVVwcGVyKGMpOwogICAgICAgICBvcmVkIHw9IGM7CiAgICAg
fQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1N0eWxlZEVsZW1lbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9TdHlsZWRFbGVtZW50LmNwcAkocmV2aXNpb24gOTMxOTUp
CisrKyBTb3VyY2UvV2ViQ29yZS9kb20vU3R5bGVkRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTIxNCwxMSArMjE0LDEwIEBAIGJvb2wgU3R5bGVkRWxlbWVudDo6bWFwVG9FbnRyeShjb25z
dCBRdWEKIAogdm9pZCBTdHlsZWRFbGVtZW50OjpjbGFzc0F0dHJpYnV0ZUNoYW5nZWQoY29uc3Qg
QXRvbWljU3RyaW5nJiBuZXdDbGFzc1N0cmluZykKIHsKLSAgICBjb25zdCBVQ2hhciogY2hhcmFj
dGVycyA9IG5ld0NsYXNzU3RyaW5nLmNoYXJhY3RlcnMoKTsKICAgICB1bnNpZ25lZCBsZW5ndGgg
PSBuZXdDbGFzc1N0cmluZy5sZW5ndGgoKTsKICAgICB1bnNpZ25lZCBpOwogICAgIGZvciAoaSA9
IDA7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICBpZiAoaXNOb3RIVE1MU3BhY2UoY2hhcmFj
dGVyc1tpXSkpCisgICAgICAgIGlmIChpc05vdEhUTUxTcGFjZShuZXdDbGFzc1N0cmluZ1tpXSkp
CiAgICAgICAgICAgICBicmVhazsKICAgICB9CiAgICAgYm9vbCBoYXNDbGFzcyA9IGkgPCBsZW5n
dGg7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21t
YW5kLmNwcAkocmV2aXNpb24gOTMxOTUpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBv
c2l0ZUVkaXRDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDIzLDcgKzQyMyw3IEBAIHZv
aWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OnNldE5vZGVBdHRyaWIKIHN0YXRpYyBpbmxpbmUgYm9v
bCBjb250YWluc09ubHlXaGl0ZXNwYWNlKGNvbnN0IFN0cmluZyYgdGV4dCkKIHsKICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgdGV4dC5sZW5ndGgoKTsgKytpKSB7Ci0gICAgICAgIGlmICgh
aXNXaGl0ZXNwYWNlKHRleHQuY2hhcmFjdGVycygpW2ldKSkKKyAgICAgICAgaWYgKCFpc1doaXRl
c3BhY2UodGV4dFtpXSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIApJ
bmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9TbWFydFJlcGxhY2VJQ1UuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU21hcnRSZXBsYWNlSUNVLmNwcAkocmV2aXNp
b24gOTMxOTUpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NtYXJ0UmVwbGFjZUlDVS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTM5LDkgKzM5LDggQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBz
dGF0aWMgdm9pZCBhZGRBbGxDb2RlUG9pbnRzKFVTZXQqIHNtYXJ0U2V0LCBjb25zdCBTdHJpbmcm
IHN0cmluZykKIHsKLSAgICBjb25zdCBVQ2hhciogY2hhcmFjdGVycyA9IHN0cmluZy5jaGFyYWN0
ZXJzKCk7CiAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzdHJpbmcubGVuZ3RoKCk7IGkrKykK
LSAgICAgICAgdXNldF9hZGQoc21hcnRTZXQsIGNoYXJhY3RlcnNbaV0pOworICAgICAgICB1c2V0
X2FkZChzbWFydFNldCwgc3RyaW5nW2ldKTsKIH0KIAogLy8gVGhpcyBpcyBtb3N0bHkgYSBwb3J0
IG9mIHRoZSBjb2RlIGluIFdlYkNvcmUvZWRpdGluZy9TbWFydFJlcGxhY2VDRi5jcHAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5jcHAJKHJldmlzaW9uIDkzMTk1KQor
KysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC04MDQsMTAgKzgwNCwxMCBAQCBzdGF0aWMgYm9vbCBzaG91bGRFbWl0RXh0cmFOZXdsaW5l
Rm9yTm9kCiAKIHN0YXRpYyBpbnQgY29sbGFwc2VkU3BhY2VMZW5ndGgoUmVuZGVyVGV4dCogcmVu
ZGVyZXIsIGludCB0ZXh0RW5kKQogewotICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzID0gcmVu
ZGVyZXItPnRleHQoKS0+Y2hhcmFjdGVycygpOwotICAgIGludCBsZW5ndGggPSByZW5kZXJlci0+
dGV4dCgpLT5sZW5ndGgoKTsKKyAgICBTdHJpbmdJbXBsKiB0ZXh0ID0gcmVuZGVyZXItPnRleHQo
KTsKKyAgICBpbnQgbGVuZ3RoID0gdGV4dC0+bGVuZ3RoKCk7CiAgICAgZm9yIChpbnQgaSA9IHRl
eHRFbmQ7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICBpZiAoIXJlbmRlcmVyLT5zdHlsZSgp
LT5pc0NvbGxhcHNpYmxlV2hpdGVTcGFjZShjaGFyYWN0ZXJzW2ldKSkKKyAgICAgICAgaWYgKCFy
ZW5kZXJlci0+c3R5bGUoKS0+aXNDb2xsYXBzaWJsZVdoaXRlU3BhY2UoKCp0ZXh0KVtpXSkpCiAg
ICAgICAgICAgICByZXR1cm4gaSAtIHRleHRFbmQ7CiAgICAgfQogCkBAIC0xNzk2LDEwICsxNzk2
LDkgQEAgc3RhdGljIGlubGluZSBib29sIGlzQ29tYmluaW5nVm9pY2VkU291bgogCiBzdGF0aWMg
aW5saW5lIGJvb2wgY29udGFpbnNLYW5hTGV0dGVycyhjb25zdCBTdHJpbmcmIHBhdHRlcm4pCiB7
Ci0gICAgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMgPSBwYXR0ZXJuLmNoYXJhY3RlcnMoKTsKICAg
ICB1bnNpZ25lZCBsZW5ndGggPSBwYXR0ZXJuLmxlbmd0aCgpOwogICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewotICAgICAgICBpZiAoaXNLYW5hTGV0dGVyKGNoYXJh
Y3RlcnNbaV0pKQorICAgICAgICBpZiAoaXNLYW5hTGV0dGVyKHBhdHRlcm5baV0pKQogICAgICAg
ICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIHJldHVybiBmYWxzZTsKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcAkocmV2aXNpb24gOTMxOTUpCisrKyBT
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0xNTYsNyArMTU2LDcgQEAgdm9pZCBUeXBpbmdDb21tYW5kOjppbnNlcnRUZXh0KERvY3VtZW50
KgogICAgIEFTU0VSVChmcmFtZSk7CiAKICAgICBpZiAoIXRleHQuaXNFbXB0eSgpKQotICAgICAg
ICBkb2N1bWVudC0+ZnJhbWUoKS0+ZWRpdG9yKCktPnVwZGF0ZU1hcmtlcnNGb3JXb3Jkc0FmZmVj
dGVkQnlFZGl0aW5nKGlzU3BhY2VPck5ld2xpbmUodGV4dC5jaGFyYWN0ZXJzKClbMF0pKTsKKyAg
ICAgICAgZG9jdW1lbnQtPmZyYW1lKCktPmVkaXRvcigpLT51cGRhdGVNYXJrZXJzRm9yV29yZHNB
ZmZlY3RlZEJ5RWRpdGluZyhpc1NwYWNlT3JOZXdsaW5lKHRleHRbMF0pKTsKICAgICAKICAgICBp
bnNlcnRUZXh0KGRvY3VtZW50LCB0ZXh0LCBmcmFtZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigp
LCBvcHRpb25zLCBjb21wb3NpdGlvbik7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxGb250RWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1M
Rm9udEVsZW1lbnQuY3BwCShyZXZpc2lvbiA5MzE5NSkKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTEZvbnRFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIsMTIgKzUyLDEyIEBAIHN0
YXRpYyBib29sIHBhcnNlRm9udFNpemUoY29uc3QgU3RyaW5nJiAKIAogICAgIC8vIFN0ZXAgMQog
ICAgIC8vIFN0ZXAgMgotICAgIGNvbnN0IFVDaGFyKiBwb3NpdGlvbiA9IGlucHV0LmNoYXJhY3Rl
cnMoKTsKLSAgICBjb25zdCBVQ2hhciogZW5kID0gcG9zaXRpb24gKyBpbnB1dC5sZW5ndGgoKTsK
KyAgICB1bnNpZ25lZCBwb3NpdGlvbiA9IDA7CisgICAgdW5zaWduZWQgZW5kID0gaW5wdXQubGVu
Z3RoKCk7CiAKICAgICAvLyBTdGVwIDMKICAgICB3aGlsZSAocG9zaXRpb24gPCBlbmQpIHsKLSAg
ICAgICAgaWYgKCFpc0hUTUxTcGFjZSgqcG9zaXRpb24pKQorICAgICAgICBpZiAoIWlzSFRNTFNw
YWNlKGlucHV0W3Bvc2l0aW9uXSkpCiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgKytwb3Np
dGlvbjsKICAgICB9CkBAIC03NCw3ICs3NCw3IEBAIHN0YXRpYyBib29sIHBhcnNlRm9udFNpemUo
Y29uc3QgU3RyaW5nJiAKICAgICAgICAgQWJzb2x1dGUKICAgICB9IG1vZGU7CiAKLSAgICBzd2l0
Y2ggKCpwb3NpdGlvbikgeworICAgIHN3aXRjaCAoaW5wdXRbcG9zaXRpb25dKSB7CiAgICAgY2Fz
ZSAnKyc6CiAgICAgICAgIG1vZGUgPSBSZWxhdGl2ZVBsdXM7CiAgICAgICAgICsrcG9zaXRpb247
CkBAIC05MSw5ICs5MSw5IEBAIHN0YXRpYyBib29sIHBhcnNlRm9udFNpemUoY29uc3QgU3RyaW5n
JiAKICAgICAvLyBTdGVwIDYKICAgICBWZWN0b3I8VUNoYXIsIDE2PiBkaWdpdHM7CiAgICAgd2hp
bGUgKHBvc2l0aW9uIDwgZW5kKSB7Ci0gICAgICAgIGlmICghaXNBU0NJSURpZ2l0KCpwb3NpdGlv
bikpCisgICAgICAgIGlmICghaXNBU0NJSURpZ2l0KGlucHV0W3Bvc2l0aW9uXSkpCiAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgZGlnaXRzLmFwcGVuZCgqcG9zaXRpb24rKyk7CisgICAgICAg
IGRpZ2l0cy5hcHBlbmQoaW5wdXRbcG9zaXRpb24rK10pOwogICAgIH0KIAogICAgIC8vIFN0ZXAg
NwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFBhcnNlcklkaW9tcy5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFBhcnNlcklkaW9t
cy5jcHAJKHJldmlzaW9uIDkzMTk1KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRN
TFBhcnNlcklkaW9tcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDEyICszNSwxMSBAQCBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKIFN0cmluZyBzdHJpcExlYWRpbmdBbmRUcmFpbGluZ0hUTUxTcGFj
ZXMoY29uc3QgU3RyaW5nJiBzdHJpbmcpCiB7Ci0gICAgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMg
PSBzdHJpbmcuY2hhcmFjdGVycygpOwogICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0cmluZy5sZW5n
dGgoKTsKIAogICAgIHVuc2lnbmVkIG51bUxlYWRpbmdTcGFjZXM7CiAgICAgZm9yIChudW1MZWFk
aW5nU3BhY2VzID0gMDsgbnVtTGVhZGluZ1NwYWNlcyA8IGxlbmd0aDsgKytudW1MZWFkaW5nU3Bh
Y2VzKSB7Ci0gICAgICAgIGlmIChpc05vdEhUTUxTcGFjZShjaGFyYWN0ZXJzW251bUxlYWRpbmdT
cGFjZXNdKSkKKyAgICAgICAgaWYgKGlzTm90SFRNTFNwYWNlKHN0cmluZ1tudW1MZWFkaW5nU3Bh
Y2VzXSkpCiAgICAgICAgICAgICBicmVhazsKICAgICB9CiAKQEAgLTQ5LDcgKzQ4LDcgQEAgU3Ry
aW5nIHN0cmlwTGVhZGluZ0FuZFRyYWlsaW5nSFRNTFNwYWNlcwogCiAgICAgdW5zaWduZWQgbnVt
VHJhaWxpbmdTcGFjZXM7CiAgICAgZm9yIChudW1UcmFpbGluZ1NwYWNlcyA9IDA7IG51bVRyYWls
aW5nU3BhY2VzIDwgbGVuZ3RoOyArK251bVRyYWlsaW5nU3BhY2VzKSB7Ci0gICAgICAgIGlmIChp
c05vdEhUTUxTcGFjZShjaGFyYWN0ZXJzW2xlbmd0aCAtIG51bVRyYWlsaW5nU3BhY2VzIC0gMV0p
KQorICAgICAgICBpZiAoaXNOb3RIVE1MU3BhY2Uoc3RyaW5nW2xlbmd0aCAtIG51bVRyYWlsaW5n
U3BhY2VzIC0gMV0pKQogICAgICAgICAgICAgYnJlYWs7CiAgICAgfQogCkBAIC0xNzUsMTUgKzE3
NCwxNSBAQCBib29sIHBhcnNlSFRNTEludGVnZXIoY29uc3QgU3RyaW5nJiBpbnB1CiB7CiAgICAg
Ly8gU3RlcCAxCiAgICAgLy8gU3RlcCAyCi0gICAgY29uc3QgVUNoYXIqIHBvc2l0aW9uID0gaW5w
dXQuY2hhcmFjdGVycygpOwotICAgIGNvbnN0IFVDaGFyKiBlbmQgPSBwb3NpdGlvbiArIGlucHV0
Lmxlbmd0aCgpOworICAgIHVuc2lnbmVkIHBvc2l0aW9uID0gMDsKKyAgICB1bnNpZ25lZCBlbmQg
PSBpbnB1dC5sZW5ndGgoKTsKIAogICAgIC8vIFN0ZXAgMwogICAgIGludCBzaWduID0gMTsKIAog
ICAgIC8vIFN0ZXAgNAogICAgIHdoaWxlIChwb3NpdGlvbiA8IGVuZCkgewotICAgICAgICBpZiAo
IWlzSFRNTFNwYWNlKCpwb3NpdGlvbikpCisgICAgICAgIGlmICghaXNIVE1MU3BhY2UoaW5wdXRb
cG9zaXRpb25dKSkKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICArK3Bvc2l0aW9uOwogICAg
IH0KQEAgLTE5NCwyNSArMTkzLDI1IEBAIGJvb2wgcGFyc2VIVE1MSW50ZWdlcihjb25zdCBTdHJp
bmcmIGlucHUKICAgICBBU1NFUlQocG9zaXRpb24gPCBlbmQpOwogCiAgICAgLy8gU3RlcCA2Ci0g
ICAgaWYgKCpwb3NpdGlvbiA9PSAnLScpIHsKKyAgICBpZiAoaW5wdXRbcG9zaXRpb25dID09ICct
JykgewogICAgICAgICBzaWduID0gLTE7CiAgICAgICAgICsrcG9zaXRpb247Ci0gICAgfSBlbHNl
IGlmICgqcG9zaXRpb24gPT0gJysnKQorICAgIH0gZWxzZSBpZiAoaW5wdXRbcG9zaXRpb25dID09
ICcrJykKICAgICAgICAgKytwb3NpdGlvbjsKICAgICBpZiAocG9zaXRpb24gPT0gZW5kKQogICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgQVNTRVJUKHBvc2l0aW9uIDwgZW5kKTsKIAogICAgIC8v
IFN0ZXAgNwotICAgIGlmICghaXNBU0NJSURpZ2l0KCpwb3NpdGlvbikpCisgICAgaWYgKCFpc0FT
Q0lJRGlnaXQoaW5wdXRbcG9zaXRpb25dKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAg
Ly8gU3RlcCA4CiAgICAgVmVjdG9yPFVDaGFyLCAxNj4gZGlnaXRzOwogICAgIHdoaWxlIChwb3Np
dGlvbiA8IGVuZCkgewotICAgICAgICBpZiAoIWlzQVNDSUlEaWdpdCgqcG9zaXRpb24pKQorICAg
ICAgICBpZiAoIWlzQVNDSUlEaWdpdChpbnB1dFtwb3NpdGlvbl0pKQogICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIGRpZ2l0cy5hcHBlbmQoKnBvc2l0aW9uKyspOworICAgICAgICBkaWdpdHMu
YXBwZW5kKGlucHV0W3Bvc2l0aW9uKytdKTsKICAgICB9CiAKICAgICAvLyBTdGVwIDkKQEAgLTIy
NSwxMiArMjI0LDEyIEBAIGJvb2wgcGFyc2VIVE1MTm9uTmVnYXRpdmVJbnRlZ2VyKGNvbnN0IFMK
IHsKICAgICAvLyBTdGVwIDEKICAgICAvLyBTdGVwIDIKLSAgICBjb25zdCBVQ2hhciogcG9zaXRp
b24gPSBpbnB1dC5jaGFyYWN0ZXJzKCk7Ci0gICAgY29uc3QgVUNoYXIqIGVuZCA9IHBvc2l0aW9u
ICsgaW5wdXQubGVuZ3RoKCk7CisgICAgdW5zaWduZWQgcG9zaXRpb24gPSAwOworICAgIHVuc2ln
bmVkIGVuZCA9IGlucHV0Lmxlbmd0aCgpOwogCiAgICAgLy8gU3RlcCAzCiAgICAgd2hpbGUgKHBv
c2l0aW9uIDwgZW5kKSB7Ci0gICAgICAgIGlmICghaXNIVE1MU3BhY2UoKnBvc2l0aW9uKSkKKyAg
ICAgICAgaWYgKCFpc0hUTUxTcGFjZShpbnB1dFtwb3NpdGlvbl0pKQogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgICsrcG9zaXRpb247CiAgICAgfQpAQCAtMjQxLDcgKzI0MCw3IEBAIGJvb2wg
cGFyc2VIVE1MTm9uTmVnYXRpdmVJbnRlZ2VyKGNvbnN0IFMKICAgICBBU1NFUlQocG9zaXRpb24g
PCBlbmQpOwogCiAgICAgLy8gU3RlcCA1Ci0gICAgaWYgKCpwb3NpdGlvbiA9PSAnKycpCisgICAg
aWYgKGlucHV0W3Bvc2l0aW9uXSA9PSAnKycpCiAgICAgICAgICsrcG9zaXRpb247CiAKICAgICAv
LyBTdGVwIDYKQEAgLTI1MCwxNSArMjQ5LDE1IEBAIGJvb2wgcGFyc2VIVE1MTm9uTmVnYXRpdmVJ
bnRlZ2VyKGNvbnN0IFMKICAgICBBU1NFUlQocG9zaXRpb24gPCBlbmQpOwogCiAgICAgLy8gU3Rl
cCA3Ci0gICAgaWYgKCFpc0FTQ0lJRGlnaXQoKnBvc2l0aW9uKSkKKyAgICBpZiAoIWlzQVNDSUlE
aWdpdChpbnB1dFtwb3NpdGlvbl0pKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICAvLyBT
dGVwIDgKICAgICBWZWN0b3I8VUNoYXIsIDE2PiBkaWdpdHM7CiAgICAgd2hpbGUgKHBvc2l0aW9u
IDwgZW5kKSB7Ci0gICAgICAgIGlmICghaXNBU0NJSURpZ2l0KCpwb3NpdGlvbikpCisgICAgICAg
IGlmICghaXNBU0NJSURpZ2l0KGlucHV0W3Bvc2l0aW9uXSkpCiAgICAgICAgICAgICBicmVhazsK
LSAgICAgICAgZGlnaXRzLmFwcGVuZCgqcG9zaXRpb24rKyk7CisgICAgICAgIGRpZ2l0cy5hcHBl
bmQoaW5wdXRbcG9zaXRpb24rK10pOwogICAgIH0KIAogICAgIC8vIFN0ZXAgOQpJbmRleDogU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2VudC5jcHAJKHJldmlz
aW9uIDkzMTk1KQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclBhZ2VBZ2Vu
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0NiwxMyArNDQ2LDEyIEBAIHZvaWQgSW5zcGVjdG9y
UGFnZUFnZW50OjpnZXRSZXNvdXJjZUNvbnQKIHN0YXRpYyBTdHJpbmcgY3JlYXRlU2VhcmNoUmVn
ZXhTb3VyY2UoY29uc3QgU3RyaW5nJiB0ZXh0KQogewogICAgIFN0cmluZyByZXN1bHQ7Ci0gICAg
Y29uc3QgVUNoYXIqIGNoYXJhY3RlcnMgPSB0ZXh0LmNoYXJhY3RlcnMoKTsKICAgICBTdHJpbmcg
c3BlY2lhbHMocmVnZXhTcGVjaWFsQ2hhcmFjdGVycyk7CiAKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgdGV4dC5sZW5ndGgoKTsgaSsrKSB7Ci0gICAgICAgIGlmIChzcGVjaWFscy5maW5k
KGNoYXJhY3RlcnNbaV0pKQorICAgICAgICBpZiAoc3BlY2lhbHMuZmluZCh0ZXh0W2ldKSkKICAg
ICAgICAgICAgIHJlc3VsdC5hcHBlbmQoIlxcIik7Ci0gICAgICAgIHJlc3VsdC5hcHBlbmQoY2hh
cmFjdGVyc1tpXSk7CisgICAgICAgIHJlc3VsdC5hcHBlbmQodGV4dFtpXSk7CiAgICAgfQogCiAg
ICAgcmV0dXJuIHJlc3VsdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JTdHlsZVNoZWV0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yU3R5bGVTaGVldC5jcHAJKHJldmlzaW9uIDkzMTk1KQorKysgU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
MTcsMTQgKzUxNywxMyBAQCBOZXdMaW5lQW5kV2hpdGVzcGFjZSYgSW5zcGVjdG9yU3R5bGU6Om5l
CiAgICAgaW50IHByb3BlcnR5SW5kZXggPSAwOwogICAgIGJvb2wgaXNGdWxsUHJlZml4U2Nhbm5l
ZCA9IGZhbHNlOwogICAgIGJvb2wgbGluZUZlZWRUZXJtaW5hdGVkID0gZmFsc2U7Ci0gICAgY29u
c3QgVUNoYXIqIGNoYXJhY3RlcnMgPSB0ZXh0LmNoYXJhY3RlcnMoKTsKICAgICB3aGlsZSAocHJv
cGVydHlJbmRleCA8IHByb3BlcnR5Q291bnQpIHsKICAgICAgICAgY29uc3QgV2ViQ29yZTo6Q1NT
UHJvcGVydHlTb3VyY2VEYXRhJiBjdXJyZW50UHJvcGVydHkgPSBzb3VyY2VQcm9wZXJ0eURhdGEt
PmF0KHByb3BlcnR5SW5kZXgrKyk7CiAKICAgICAgICAgYm9vbCBwcm9jZXNzTmV4dFByb3BlcnR5
ID0gZmFsc2U7CiAgICAgICAgIGludCBzY2FuRW5kID0gY3VycmVudFByb3BlcnR5LnJhbmdlLnN0
YXJ0OwogICAgICAgICBmb3IgKGludCBpID0gc2NhblN0YXJ0OyBpIDwgc2NhbkVuZDsgKytpKSB7
Ci0gICAgICAgICAgICBVQ2hhciBjaCA9IGNoYXJhY3RlcnNbaV07CisgICAgICAgICAgICBVQ2hh
ciBjaCA9IHRleHRbaV07CiAgICAgICAgICAgICBib29sIGlzTGluZUZlZWQgPSBpc0hUTUxMaW5l
QnJlYWsoY2gpOwogICAgICAgICAgICAgaWYgKGlzTGluZUZlZWQpIHsKICAgICAgICAgICAgICAg
ICBpZiAoIWxpbmVGZWVkVGVybWluYXRlZCkKQEAgLTEwNDYsNyArMTA0NSw2IEBAIHZvaWQgSW5z
cGVjdG9yU3R5bGVTaGVldDo6Zml4VW5wYXJzZWRQcm8KICAgICAgICAgcmV0dXJuOwogCiAgICAg
dW5zaWduZWQgc3R5bGVTdGFydCA9IHJ1bGVEYXRhLT5zdHlsZVNvdXJjZURhdGEtPnN0eWxlQm9k
eVJhbmdlLnN0YXJ0OwotICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzID0gc3R5bGVTaGVldFRl
eHQuY2hhcmFjdGVycygpOwogICAgIENTU1Byb3BlcnR5U291cmNlRGF0YSogbmV4dERhdGEgPSAm
KHByb3BlcnR5RGF0YS5hdCgwKSk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7
ICsraSkgewogICAgICAgICBDU1NQcm9wZXJ0eVNvdXJjZURhdGEqIGN1cnJlbnREYXRhID0gbmV4
dERhdGE7CkBAIC0xMDU0LDcgKzEwNTIsNyBAQCB2b2lkIEluc3BlY3RvclN0eWxlU2hlZXQ6OmZp
eFVucGFyc2VkUHJvCiAKICAgICAgICAgaWYgKGN1cnJlbnREYXRhLT5wYXJzZWRPaykKICAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoY3VycmVudERhdGEtPnJhbmdlLmVuZCA+IDAg
JiYgY2hhcmFjdGVyc1tzdHlsZVN0YXJ0ICsgY3VycmVudERhdGEtPnJhbmdlLmVuZCAtIDFdID09
ICc7JykKKyAgICAgICAgaWYgKGN1cnJlbnREYXRhLT5yYW5nZS5lbmQgPiAwICYmIHN0eWxlU2hl
ZXRUZXh0W3N0eWxlU3RhcnQgKyBjdXJyZW50RGF0YS0+cmFuZ2UuZW5kIC0gMV0gPT0gJzsnKQog
ICAgICAgICAgICAgY29udGludWU7CiAKICAgICAgICAgdW5zaWduZWQgcHJvcGVydHlFbmRJblN0
eWxlU2hlZXQ7CkBAIC0xMDYzLDcgKzEwNjEsNyBAQCB2b2lkIEluc3BlY3RvclN0eWxlU2hlZXQ6
OmZpeFVucGFyc2VkUHJvCiAgICAgICAgIGVsc2UKICAgICAgICAgICAgIHByb3BlcnR5RW5kSW5T
dHlsZVNoZWV0ID0gc3R5bGVTdGFydCArIG5leHREYXRhLT5yYW5nZS5zdGFydCAtIDE7CiAKLSAg
ICAgICAgd2hpbGUgKGlzSFRNTFNwYWNlKGNoYXJhY3RlcnNbcHJvcGVydHlFbmRJblN0eWxlU2hl
ZXRdKSkKKyAgICAgICAgd2hpbGUgKGlzSFRNTFNwYWNlKHN0eWxlU2hlZXRUZXh0W3Byb3BlcnR5
RW5kSW5TdHlsZVNoZWV0XSkpCiAgICAgICAgICAgICAtLXByb3BlcnR5RW5kSW5TdHlsZVNoZWV0
OwogCiAgICAgICAgIC8vIHByb3BlcnR5RW5kSW5TdHlsZVNoZWV0IHBvaW50cyBhdCB0aGUgbGFz
dCBwcm9wZXJ0eSB0ZXh0IGNoYXJhY3Rlci4KQEAgLTEwNzEsMTQgKzEwNjksMTQgQEAgdm9pZCBJ
bnNwZWN0b3JTdHlsZVNoZWV0OjpmaXhVbnBhcnNlZFBybwogICAgICAgICBpZiAoY3VycmVudERh
dGEtPnJhbmdlLmVuZCAhPSBuZXdQcm9wZXJ0eUVuZCkgewogICAgICAgICAgICAgY3VycmVudERh
dGEtPnJhbmdlLmVuZCA9IG5ld1Byb3BlcnR5RW5kOwogICAgICAgICAgICAgdW5zaWduZWQgdmFs
dWVTdGFydEluU3R5bGVTaGVldCA9IHN0eWxlU3RhcnQgKyBjdXJyZW50RGF0YS0+cmFuZ2Uuc3Rh
cnQgKyBjdXJyZW50RGF0YS0+bmFtZS5sZW5ndGgoKTsKLSAgICAgICAgICAgIHdoaWxlICh2YWx1
ZVN0YXJ0SW5TdHlsZVNoZWV0IDwgcHJvcGVydHlFbmRJblN0eWxlU2hlZXQgJiYgY2hhcmFjdGVy
c1t2YWx1ZVN0YXJ0SW5TdHlsZVNoZWV0XSAhPSAnOicpCisgICAgICAgICAgICB3aGlsZSAodmFs
dWVTdGFydEluU3R5bGVTaGVldCA8IHByb3BlcnR5RW5kSW5TdHlsZVNoZWV0ICYmIHN0eWxlU2hl
ZXRUZXh0W3ZhbHVlU3RhcnRJblN0eWxlU2hlZXRdICE9ICc6JykKICAgICAgICAgICAgICAgICAr
K3ZhbHVlU3RhcnRJblN0eWxlU2hlZXQ7CiAgICAgICAgICAgICBpZiAodmFsdWVTdGFydEluU3R5
bGVTaGVldCA8IHByb3BlcnR5RW5kSW5TdHlsZVNoZWV0KQogICAgICAgICAgICAgICAgICsrdmFs
dWVTdGFydEluU3R5bGVTaGVldDsgLy8gU2hpZnQgcGFzdCB0aGUgJzonLgotICAgICAgICAgICAg
d2hpbGUgKHZhbHVlU3RhcnRJblN0eWxlU2hlZXQgPCBwcm9wZXJ0eUVuZEluU3R5bGVTaGVldCAm
JiBpc0hUTUxTcGFjZShjaGFyYWN0ZXJzW3ZhbHVlU3RhcnRJblN0eWxlU2hlZXRdKSkKKyAgICAg
ICAgICAgIHdoaWxlICh2YWx1ZVN0YXJ0SW5TdHlsZVNoZWV0IDwgcHJvcGVydHlFbmRJblN0eWxl
U2hlZXQgJiYgaXNIVE1MU3BhY2Uoc3R5bGVTaGVldFRleHRbdmFsdWVTdGFydEluU3R5bGVTaGVl
dF0pKQogICAgICAgICAgICAgICAgICsrdmFsdWVTdGFydEluU3R5bGVTaGVldDsKICAgICAgICAg
ICAgIC8vIE5lZWQgdG8gZXhjbHVkZSB0aGUgdHJhaWxpbmcgJzsnIGZyb20gdGhlIHByb3BlcnR5
IHZhbHVlLgotICAgICAgICAgICAgY3VycmVudERhdGEtPnZhbHVlID0gc3R5bGVTaGVldFRleHQu
c3Vic3RyaW5nKHZhbHVlU3RhcnRJblN0eWxlU2hlZXQsIHByb3BlcnR5RW5kSW5TdHlsZVNoZWV0
IC0gdmFsdWVTdGFydEluU3R5bGVTaGVldCArIChjaGFyYWN0ZXJzW3Byb3BlcnR5RW5kSW5TdHls
ZVNoZWV0XSA9PSAnOycgPyAwIDogMSkpOworICAgICAgICAgICAgY3VycmVudERhdGEtPnZhbHVl
ID0gc3R5bGVTaGVldFRleHQuc3Vic3RyaW5nKHZhbHVlU3RhcnRJblN0eWxlU2hlZXQsIHByb3Bl
cnR5RW5kSW5TdHlsZVNoZWV0IC0gdmFsdWVTdGFydEluU3R5bGVTaGVldCArIChzdHlsZVNoZWV0
VGV4dFtwcm9wZXJ0eUVuZEluU3R5bGVTaGVldF0gPT0gJzsnID8gMCA6IDEpKTsKICAgICAgICAg
fQogICAgIH0KIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHls
ZVRleHRFZGl0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JTdHlsZVRleHRFZGl0b3IuY3BwCShyZXZpc2lvbiA5MzE5NSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVRleHRFZGl0b3IuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC03OSwxMiArNzksMTEgQEAgdm9pZCBJbnNwZWN0b3JTdHlsZVRleHRFZGl0b3I6Omlu
c2VydFBybwogICAgIGlmIChpbnNlcnRMYXN0ICYmICFpbnNlcnRGaXJzdEluU291cmNlKSB7CiAg
ICAgICAgIHByb3BlcnR5U3RhcnQgPSBzdHlsZUJvZHlMZW5ndGg7CiAgICAgICAgIGlmIChwcm9w
ZXJ0eVN0YXJ0ICYmIHRleHRUb1NldC5sZW5ndGgoKSkgewotICAgICAgICAgICAgY29uc3QgVUNo
YXIqIGNoYXJhY3RlcnMgPSBtX3N0eWxlVGV4dC5jaGFyYWN0ZXJzKCk7CiAKICAgICAgICAgICAg
IGxvbmcgY3VyUG9zID0gcHJvcGVydHlTdGFydCAtIDE7IC8vIFRoZSBsYXN0IHBvc2l0aW9uIG9m
IHN0eWxlIGRlY2xhcmF0aW9uLCBzaW5jZSBwcm9wZXJ0eVN0YXJ0IHBvaW50cyBwYXN0IG9uZS4K
LSAgICAgICAgICAgIHdoaWxlIChjdXJQb3MgJiYgaXNIVE1MU3BhY2UoY2hhcmFjdGVyc1tjdXJQ
b3NdKSkKKyAgICAgICAgICAgIHdoaWxlIChjdXJQb3MgJiYgaXNIVE1MU3BhY2UobV9zdHlsZVRl
eHRbY3VyUG9zXSkpCiAgICAgICAgICAgICAgICAgLS1jdXJQb3M7Ci0gICAgICAgICAgICBpZiAo
Y3VyUG9zICYmIGNoYXJhY3RlcnNbY3VyUG9zXSAhPSAnOycpIHsKKyAgICAgICAgICAgIGlmIChj
dXJQb3MgJiYgbV9zdHlsZVRleHRbY3VyUG9zXSAhPSAnOycpIHsKICAgICAgICAgICAgICAgICAv
LyBQcmVwZW5kIGEgIjsiIHRvIHRoZSBwcm9wZXJ0eSB0ZXh0IGlmIGFwcGVuZGluZyB0byBhIHN0
eWxlIGRlY2xhcmF0aW9uIHdoZXJlCiAgICAgICAgICAgICAgICAgLy8gdGhlIGxhc3QgcHJvcGVy
dHkgaGFzIG5vIHRyYWlsaW5nICI7Ii4KICAgICAgICAgICAgICAgICB0ZXh0VG9TZXQuaW5zZXJ0
KCI7IiwgMCk7CkBAIC0yMjcsNyArMjI2LDYgQEAgdm9pZCBJbnNwZWN0b3JTdHlsZVRleHRFZGl0
b3I6OmludGVybmFsUgogICAgIGNvbnN0IFNvdXJjZVJhbmdlJiByYW5nZSA9IHByb3BlcnR5LnNv
dXJjZURhdGEucmFuZ2U7CiAgICAgbG9uZyByZXBsYWNlUmFuZ2VTdGFydCA9IHJhbmdlLnN0YXJ0
OwogICAgIGxvbmcgcmVwbGFjZVJhbmdlRW5kID0gcmFuZ2UuZW5kOwotICAgIGNvbnN0IFVDaGFy
KiBjaGFyYWN0ZXJzID0gbV9zdHlsZVRleHQuY2hhcmFjdGVycygpOwogICAgIGxvbmcgbmV3VGV4
dExlbmd0aCA9IG5ld1RleHQubGVuZ3RoKCk7CiAgICAgU3RyaW5nIGZpbmFsTmV3VGV4dCA9IG5l
d1RleHQ7CiAKQEAgLTIzOCwxNCArMjM2LDE0IEBAIHZvaWQgSW5zcGVjdG9yU3R5bGVUZXh0RWRp
dG9yOjppbnRlcm5hbFIKICAgICAgICAgaWYgKHJlcGxhY2VSYW5nZVN0YXJ0ID49IGZ1bGxQcmVm
aXhMZW5ndGggJiYgbV9zdHlsZVRleHQuc3Vic3RyaW5nKHJlcGxhY2VSYW5nZVN0YXJ0IC0gZnVs
bFByZWZpeExlbmd0aCwgZnVsbFByZWZpeExlbmd0aCkgPT0gZnVsbFByZWZpeCkKICAgICAgICAg
ICAgIHJlcGxhY2VSYW5nZVN0YXJ0IC09IGZ1bGxQcmVmaXhMZW5ndGg7CiAgICAgfSBlbHNlIGlm
IChuZXdUZXh0TGVuZ3RoKSB7Ci0gICAgICAgIGlmIChpc0hUTUxMaW5lQnJlYWsobmV3VGV4dC5j
aGFyYWN0ZXJzKClbbmV3VGV4dExlbmd0aCAtIDFdKSkgeworICAgICAgICBpZiAoaXNIVE1MTGlu
ZUJyZWFrKG5ld1RleHRbbmV3VGV4dExlbmd0aCAtIDFdKSkgewogICAgICAgICAgICAgLy8gQ29h
bGVzY2UgbmV3bGluZXMgb2YgdGhlIG9yaWdpbmFsIGFuZCBuZXcgcHJvcGVydHkgdmFsdWVzICh0
byBhdm9pZCBhIGxvdCBvZiBibGFuayBsaW5lcyB3aGlsZSBpbmNyZW1lbnRhbGx5IGFwcGx5aW5n
IHByb3BlcnR5IHZhbHVlcykuCiAgICAgICAgICAgICBib29sIGZvdW5kTmV3bGluZSA9IGZhbHNl
OwogICAgICAgICAgICAgYm9vbCBpc0xhc3ROZXdsaW5lID0gZmFsc2U7CiAgICAgICAgICAgICBp
bnQgaTsKICAgICAgICAgICAgIGludCB0ZXh0TGVuZ3RoID0gbV9zdHlsZVRleHQubGVuZ3RoKCk7
Ci0gICAgICAgICAgICBmb3IgKGkgPSByZXBsYWNlUmFuZ2VFbmQ7IGkgPCB0ZXh0TGVuZ3RoICYm
IGlzU3BhY2VPck5ld2xpbmUoY2hhcmFjdGVyc1tpXSk7ICsraSkgewotICAgICAgICAgICAgICAg
IGlzTGFzdE5ld2xpbmUgPSBpc0hUTUxMaW5lQnJlYWsoY2hhcmFjdGVyc1tpXSk7CisgICAgICAg
ICAgICBmb3IgKGkgPSByZXBsYWNlUmFuZ2VFbmQ7IGkgPCB0ZXh0TGVuZ3RoICYmIGlzU3BhY2VP
ck5ld2xpbmUobV9zdHlsZVRleHRbaV0pOyArK2kpIHsKKyAgICAgICAgICAgICAgICBpc0xhc3RO
ZXdsaW5lID0gaXNIVE1MTGluZUJyZWFrKG1fc3R5bGVUZXh0W2ldKTsKICAgICAgICAgICAgICAg
ICBpZiAoaXNMYXN0TmV3bGluZSkKICAgICAgICAgICAgICAgICAgICAgZm91bmROZXdsaW5lID0g
dHJ1ZTsKICAgICAgICAgICAgICAgICBlbHNlIGlmIChmb3VuZE5ld2xpbmUgJiYgIWlzTGFzdE5l
d2xpbmUpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0ZpbGVTeXN0ZW0uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0ZpbGVTeXN0ZW0uY3BwCShyZXZp
c2lvbiA5MzE5NSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0ZpbGVTeXN0ZW0uY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC04MywxMSArODMsOCBAQCBTdHJpbmcgZW5jb2RlRm9yRmlsZU5hbWUo
Y29uc3QgU3RyaW5nJiBpCiAgICAgVmVjdG9yPFVDaGFyLCA1MTI+IGJ1ZmZlcihsZW5ndGggKiAz
ICsgMSk7CiAgICAgVUNoYXIqIHAgPSBidWZmZXIuZGF0YSgpOwogCi0gICAgY29uc3QgVUNoYXIq
IHN0ciA9IGlucHV0U3RyLmNoYXJhY3RlcnMoKTsKLSAgICBjb25zdCBVQ2hhciogc3RyRW5kID0g
c3RyICsgbGVuZ3RoOwotCi0gICAgd2hpbGUgKHN0ciA8IHN0ckVuZCkgewotICAgICAgICBVQ2hh
ciBjID0gKnN0cisrOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkg
eworICAgICAgICBVQ2hhciBjID0gaW5wdXRTdHJbaV07CiAgICAgICAgIGlmIChzaG91bGRFc2Nh
cGVVQ2hhcihjKSkgewogICAgICAgICAgICAgKnArKyA9ICclJzsKICAgICAgICAgICAgIHBsYWNl
Qnl0ZUFzSGV4KGMsIHApOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vS1VSTC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vS1VSTC5jcHAJKHJldmlzaW9u
IDkzMTk1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vS1VSTC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTY0OCwyNyArNjQ4LDI2IEBAIGJvb2wgS1VSTDo6aGFzRnJhZ21lbnRJZGVudGlmaWVy
KCkgY29uc3QKIAogdm9pZCBLVVJMOjpjb3B5UGFyc2VkUXVlcnlUbyhQYXJzZWRVUkxQYXJhbWV0
ZXJzJiBwYXJhbWV0ZXJzKSBjb25zdAogewotICAgIGNvbnN0IFVDaGFyKiBwb3MgPSBtX3N0cmlu
Zy5jaGFyYWN0ZXJzKCkgKyBtX3BhdGhFbmQgKyAxOwotICAgIGNvbnN0IFVDaGFyKiBlbmQgPSBt
X3N0cmluZy5jaGFyYWN0ZXJzKCkgKyBtX3F1ZXJ5RW5kOwotICAgIHdoaWxlIChwb3MgPCBlbmQp
IHsKLSAgICAgICAgY29uc3QgVUNoYXIqIHBhcmFtZXRlclN0YXJ0ID0gcG9zOwotICAgICAgICB3
aGlsZSAocG9zIDwgZW5kICYmICpwb3MgIT0gJyYnKQorICAgIGludCBwb3MgPSBtX3BhdGhFbmQg
KyAxOworICAgIHdoaWxlIChwb3MgPCBtX3F1ZXJ5RW5kKSB7CisgICAgICAgIGludCBwYXJhbWV0
ZXJTdGFydCA9IHBvczsKKyAgICAgICAgd2hpbGUgKHBvcyA8IG1fcXVlcnlFbmQgJiYgbV9zdHJp
bmdbcG9zXSAhPSAnJicpCiAgICAgICAgICAgICArK3BvczsKLSAgICAgICAgY29uc3QgVUNoYXIq
IHBhcmFtZXRlckVuZCA9IHBvczsKLSAgICAgICAgaWYgKHBvcyA8IGVuZCkgewotICAgICAgICAg
ICAgQVNTRVJUKCpwb3MgPT0gJyYnKTsKKyAgICAgICAgaW50IHBhcmFtZXRlckVuZCA9IHBvczsK
KyAgICAgICAgaWYgKHBvcyA8IG1fcXVlcnlFbmQpIHsKKyAgICAgICAgICAgIEFTU0VSVChtX3N0
cmluZ1twb3NdID09ICcmJyk7CiAgICAgICAgICAgICArK3BvczsKICAgICAgICAgfQogICAgICAg
ICBpZiAocGFyYW1ldGVyU3RhcnQgPT0gcGFyYW1ldGVyRW5kKQogICAgICAgICAgICAgY29udGlu
dWU7Ci0gICAgICAgIGNvbnN0IFVDaGFyKiBuYW1lU3RhcnQgPSBwYXJhbWV0ZXJTdGFydDsKLSAg
ICAgICAgY29uc3QgVUNoYXIqIGVxdWFsU2lnbiA9IHBhcmFtZXRlclN0YXJ0OwotICAgICAgICB3
aGlsZSAoZXF1YWxTaWduIDwgcGFyYW1ldGVyRW5kICYmICplcXVhbFNpZ24gIT0gJz0nKQorICAg
ICAgICBpbnQgbmFtZVN0YXJ0ID0gcGFyYW1ldGVyU3RhcnQ7CisgICAgICAgIGludCBlcXVhbFNp
Z24gPSBwYXJhbWV0ZXJTdGFydDsKKyAgICAgICAgd2hpbGUgKGVxdWFsU2lnbiA8IHBhcmFtZXRl
ckVuZCAmJiBtX3N0cmluZ1tlcXVhbFNpZ25dICE9ICc9JykKICAgICAgICAgICAgICsrZXF1YWxT
aWduOwogICAgICAgICBpZiAoZXF1YWxTaWduID09IG5hbWVTdGFydCkKICAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICBTdHJpbmcgbmFtZShuYW1lU3RhcnQsIGVxdWFsU2lnbiAtIG5hbWVT
dGFydCk7Ci0gICAgICAgIFN0cmluZyB2YWx1ZSA9IGVxdWFsU2lnbiA9PSBwYXJhbWV0ZXJFbmQg
PyBTdHJpbmcoKSA6IFN0cmluZyhlcXVhbFNpZ24gKyAxLCBwYXJhbWV0ZXJFbmQgLSBlcXVhbFNp
Z24gLSAxKTsKKyAgICAgICAgU3RyaW5nIG5hbWUgPSBtX3N0cmluZy5zdWJzdHJpbmcobmFtZVN0
YXJ0LCBlcXVhbFNpZ24gLSBuYW1lU3RhcnQpOworICAgICAgICBTdHJpbmcgdmFsdWUgPSBlcXVh
bFNpZ24gPT0gcGFyYW1ldGVyRW5kID8gU3RyaW5nKCkgOiBtX3N0cmluZy5zdWJzdHJpbmcoZXF1
YWxTaWduICsgMSwgcGFyYW1ldGVyRW5kIC0gZXF1YWxTaWduIC0gMSk7CiAgICAgICAgIHBhcmFt
ZXRlcnMuc2V0KG5hbWUsIHZhbHVlKTsKICAgICB9CiB9CkBAIC0xOTgxLDE0ICsxOTgwLDEzIEBA
IFN0cmluZyBtaW1lVHlwZUZyb21EYXRhVVJMKGNvbnN0IFN0cmluZyYKIGJvb2wgcHJvdG9jb2xJ
c0luSFRUUEZhbWlseShjb25zdCBTdHJpbmcmIHVybCkKIHsKICAgICB1bnNpZ25lZCBsZW5ndGgg
PSB1cmwubGVuZ3RoKCk7Ci0gICAgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMgPSB1cmwuY2hhcmFj
dGVycygpOwogICAgIHJldHVybiBsZW5ndGggPiA0Ci0gICAgICAgICYmIGlzTGV0dGVyTWF0Y2hJ
Z25vcmluZ0Nhc2UoY2hhcmFjdGVyc1swXSwgJ2gnKQotICAgICAgICAmJiBpc0xldHRlck1hdGNo
SWdub3JpbmdDYXNlKGNoYXJhY3RlcnNbMV0sICd0JykKLSAgICAgICAgJiYgaXNMZXR0ZXJNYXRj
aElnbm9yaW5nQ2FzZShjaGFyYWN0ZXJzWzJdLCAndCcpCi0gICAgICAgICYmIGlzTGV0dGVyTWF0
Y2hJZ25vcmluZ0Nhc2UoY2hhcmFjdGVyc1szXSwgJ3AnKQotICAgICAgICAmJiAoY2hhcmFjdGVy
c1s0XSA9PSAnOicKLSAgICAgICAgICAgIHx8IChpc0xldHRlck1hdGNoSWdub3JpbmdDYXNlKGNo
YXJhY3RlcnNbNF0sICdzJykgJiYgbGVuZ3RoID4gNSAmJiBjaGFyYWN0ZXJzWzVdID09ICc6Jykp
OworICAgICAgICAmJiBpc0xldHRlck1hdGNoSWdub3JpbmdDYXNlKHVybFswXSwgJ2gnKQorICAg
ICAgICAmJiBpc0xldHRlck1hdGNoSWdub3JpbmdDYXNlKHVybFsxXSwgJ3QnKQorICAgICAgICAm
JiBpc0xldHRlck1hdGNoSWdub3JpbmdDYXNlKHVybFsyXSwgJ3QnKQorICAgICAgICAmJiBpc0xl
dHRlck1hdGNoSWdub3JpbmdDYXNlKHVybFszXSwgJ3AnKQorICAgICAgICAmJiAodXJsWzRdID09
ICc6JworICAgICAgICAgICAgfHwgKGlzTGV0dGVyTWF0Y2hJZ25vcmluZ0Nhc2UodXJsWzRdLCAn
cycpICYmIGxlbmd0aCA+IDUgJiYgdXJsWzVdID09ICc6JykpOwogfQogCiB9CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9MZW5ndGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL0xlbmd0aC5jcHAJKHJldmlzaW9uIDkzMTk1KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vTGVuZ3RoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODcsMTAgKzg3LDkgQEAg
c3RhdGljIGludCBjb3VudENoYXJhY3Rlcihjb25zdCBVQ2hhciogZAogUGFzc093bkFycmF5UHRy
PExlbmd0aD4gbmV3Q29vcmRzQXJyYXkoY29uc3QgU3RyaW5nJiBzdHJpbmcsIGludCYgbGVuKQog
ewogICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0cmluZy5sZW5ndGgoKTsKLSAgICBjb25zdCBVQ2hh
ciogZGF0YSA9IHN0cmluZy5jaGFyYWN0ZXJzKCk7CiAgICAgU3RyaW5nQnVmZmVyIHNwYWNpZmll
ZChsZW5ndGgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykgewot
ICAgICAgICBVQ2hhciBjYyA9IGRhdGFbaV07CisgICAgICAgIFVDaGFyIGNjID0gc3RyaW5nW2ld
OwogICAgICAgICBpZiAoY2MgPiAnOScgfHwgKGNjIDwgJzAnICYmIGNjICE9ICctJyAmJiBjYyAh
PSAnKicgJiYgY2MgIT0gJy4nKSkKICAgICAgICAgICAgIHNwYWNpZmllZFtpXSA9ICcgJzsKICAg
ICAgICAgZWxzZQpJbmRleDogU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAko
cmV2aXNpb24gOTMxOTUpCisrKyBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTU4LDggKzU4LDYgQEAgc3RhdGljIHZvaWQgbWFrZUNhcGl0
YWxpemVkKFN0cmluZyogc3RyaQogICAgICAgICByZXR1cm47CiAKICAgICB1bnNpZ25lZCBsZW5n
dGggPSBzdHJpbmctPmxlbmd0aCgpOwotICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzID0gc3Ry
aW5nLT5jaGFyYWN0ZXJzKCk7Ci0KICAgICBpZiAobGVuZ3RoID49IG51bWVyaWNfbGltaXRzPHVu
c2lnbmVkPjo6bWF4KCkpCiAgICAgICAgIENSQVNIKCk7CiAKQEAgLTY3LDEwICs2NSwxMCBAQCBz
dGF0aWMgdm9pZCBtYWtlQ2FwaXRhbGl6ZWQoU3RyaW5nKiBzdHJpCiAgICAgc3RyaW5nV2l0aFBy
ZXZpb3VzWzBdID0gcHJldmlvdXMgPT0gbm9CcmVha1NwYWNlID8gJyAnIDogcHJldmlvdXM7CiAg
ICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IGxlbmd0aCArIDE7IGkrKykgewogICAgICAgICAv
LyBSZXBsYWNlICZuYnNwIHdpdGggYSByZWFsIHNwYWNlIHNpbmNlIElDVSBubyBsb25nZXIgdHJl
YXRzICZuYnNwIGFzIGEgd29yZCBzZXBhcmF0b3IuCi0gICAgICAgIGlmIChjaGFyYWN0ZXJzW2kg
LSAxXSA9PSBub0JyZWFrU3BhY2UpCisgICAgICAgIGlmICgoKnN0cmluZylbaSAtIDFdID09IG5v
QnJlYWtTcGFjZSkKICAgICAgICAgICAgIHN0cmluZ1dpdGhQcmV2aW91c1tpXSA9ICcgJzsKICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgc3RyaW5nV2l0aFByZXZpb3VzW2ldID0gY2hhcmFjdGVy
c1tpIC0gMV07CisgICAgICAgICAgICBzdHJpbmdXaXRoUHJldmlvdXNbaV0gPSAoKnN0cmluZylb
aSAtIDFdOwogICAgIH0KIAogICAgIFRleHRCcmVha0l0ZXJhdG9yKiBib3VuZGFyeSA9IHdvcmRC
cmVha0l0ZXJhdG9yKHN0cmluZ1dpdGhQcmV2aW91cy5jaGFyYWN0ZXJzKCksIGxlbmd0aCArIDEp
OwpAQCAtODMsOSArODEsOSBAQCBzdGF0aWMgdm9pZCBtYWtlQ2FwaXRhbGl6ZWQoU3RyaW5nKiBz
dHJpCiAgICAgaW50MzJfdCBzdGFydE9mV29yZCA9IHRleHRCcmVha0ZpcnN0KGJvdW5kYXJ5KTsK
ICAgICBmb3IgKGVuZE9mV29yZCA9IHRleHRCcmVha05leHQoYm91bmRhcnkpOyBlbmRPZldvcmQg
IT0gVGV4dEJyZWFrRG9uZTsgc3RhcnRPZldvcmQgPSBlbmRPZldvcmQsIGVuZE9mV29yZCA9IHRl
eHRCcmVha05leHQoYm91bmRhcnkpKSB7CiAgICAgICAgIGlmIChzdGFydE9mV29yZCAhPSAwKSAv
LyBJZ25vcmUgZmlyc3QgY2hhciBvZiBwcmV2aW91cyBzdHJpbmcKLSAgICAgICAgICAgIGRhdGFb
c3RhcnRPZldvcmQgLSAxXSA9IGNoYXJhY3RlcnNbc3RhcnRPZldvcmQgLSAxXSA9PSBub0JyZWFr
U3BhY2UgPyBub0JyZWFrU3BhY2UgOiB0b1RpdGxlQ2FzZShzdHJpbmdXaXRoUHJldmlvdXNbc3Rh
cnRPZldvcmRdKTsKKyAgICAgICAgICAgIGRhdGFbc3RhcnRPZldvcmQgLSAxXSA9ICgqc3RyaW5n
KVtzdGFydE9mV29yZCAtIDFdID09IG5vQnJlYWtTcGFjZSA/IG5vQnJlYWtTcGFjZSA6IHRvVGl0
bGVDYXNlKHN0cmluZ1dpdGhQcmV2aW91c1tzdGFydE9mV29yZF0pOwogICAgICAgICBmb3IgKGlu
dCBpID0gc3RhcnRPZldvcmQgKyAxOyBpIDwgZW5kT2ZXb3JkOyBpKyspCi0gICAgICAgICAgICBk
YXRhW2kgLSAxXSA9IGNoYXJhY3RlcnNbaSAtIDFdOworICAgICAgICAgICAgZGF0YVtpIC0gMV0g
PSAoKnN0cmluZylbaSAtIDFdOwogICAgIH0KIAogICAgICpzdHJpbmcgPSBTdHJpbmc6OmFkb3B0
KGRhdGEpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>104303</attachid>
            <date>2011-08-17 21:28:01 -0700</date>
            <delta_ts>2011-08-17 21:28:01 -0700</delta_ts>
            <desc>performance test</desc>
            <filename>StringTest.cpp</filename>
            <type>text/x-c++src</type>
            <size>5273</size>
            <attacher name="Xianzhu Wang">wangxianzhu</attacher>
            
              <data encoding="base64">LyoKICogQ29weXJpZ2h0IChDKSAyMDEwIEdvb2dsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CiAqCiAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAogKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlCiAqIG1ldDoKICoKICogICAgICogUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKICogbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgogKiAgICAgKiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlCiAqIGNvcHlyaWdodCBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25k
aXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIKICogaW4gdGhlIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZQogKiBkaXN0cmlidXRp
b24uCiAqICAgICAqIE5laXRoZXIgdGhlIG5hbWUgb2YgR29vZ2xlIEluYy4gbm9yIHRoZSBuYW1l
cyBvZiBpdHMKICogY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90
ZSBwcm9kdWN0cyBkZXJpdmVkIGZyb20KICogdGhpcyBzb2Z0d2FyZSB3aXRob3V0IHNwZWNpZmlj
IHByaW9yIHdyaXR0ZW4gcGVybWlzc2lvbi4KICoKICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUwogKiAiQVMgSVMiIEFO
RCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAog
KiBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IKICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElO
IE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklHSFQKICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCiAqIFNQRUNJQUws
IEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QK
ICogTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsCiAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQogKiBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCiAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQogKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgogKi8KCi8vIEJhc2ljIHRlc3RzIHRoYXQgdmVyaWZ5IG91ciBL
VVJMJ3MgaW50ZXJmYWNlIGJlaGF2ZXMgdGhlIHNhbWUgYXMgdGhlCi8vIG9yaWdpbmFsIEtVUkwn
cy4KCiNpbmNsdWRlICJjb25maWcuaCIKCiNpbmNsdWRlIDx0aW1lLmg+CiNpbmNsdWRlIDxndGVz
dC9ndGVzdC5oPgojaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CgpuYW1lc3BhY2UgewoK
Y2xhc3MgU3RyaW5nUHRyIHsKcHVibGljOgogICAgU3RyaW5nUHRyKGNvbnN0IFdURjo6U3RyaW5n
JiBzdHJpbmcsIHVuc2lnbmVkIG9mZnNldCA9IDApCiAgICAgICAgOiBtX3N0cmluZ0ltcGwoc3Ry
aW5nLmltcGwoKSkKICAgICAgICAsIG1fb2Zmc2V0KG9mZnNldCkKICAgIHt9CiAgICBVQ2hhciBv
cGVyYXRvcltdKHVuc2lnbmVkIGluZGV4KSBjb25zdAogICAgewogICAgICAgIHJldHVybiAoKm1f
c3RyaW5nSW1wbClbaW5kZXggKyBtX29mZnNldF07CiAgICB9CiAgICBVQ2hhciBvcGVyYXRvcioo
KSBjb25zdAogICAgewogICAgICAgIHJldHVybiAoKm1fc3RyaW5nSW1wbClbbV9vZmZzZXRdOwog
ICAgfQogICAgU3RyaW5nUHRyJiBvcGVyYXRvcisrKCkKICAgIHsKICAgICAgICBtX29mZnNldCsr
OwogICAgICAgIHJldHVybiAqdGhpczsKICAgIH0KICAgIFN0cmluZ1B0ciBvcGVyYXRvcisrKGlu
dCkKICAgIHsKICAgICAgICBTdHJpbmdQdHIgdGVtcCA9ICp0aGlzOwogICAgICAgIG1fb2Zmc2V0
Kys7CiAgICAgICAgcmV0dXJuIHRlbXA7CiAgICB9CiAgICBTdHJpbmdQdHImIG9wZXJhdG9yLS0o
KQogICAgewogICAgICAgIG1fb2Zmc2V0LS07CiAgICAgICAgcmV0dXJuICp0aGlzOwogICAgfQog
ICAgU3RyaW5nUHRyIG9wZXJhdG9yLS0oaW50KQogICAgewogICAgICAgIFN0cmluZ1B0ciB0ZW1w
ID0gKnRoaXM7CiAgICAgICAgbV9vZmZzZXQtLTsKICAgICAgICByZXR1cm4gdGVtcDsKICAgIH0K
ICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBTdHJpbmdQdHImIHgpIGNvbnN0CiAgICB7CiAgICAg
ICAgcmV0dXJuIHgubV9zdHJpbmdJbXBsID09IG1fc3RyaW5nSW1wbCAmJiB4Lm1fb2Zmc2V0ID09
IG1fb2Zmc2V0OwogICAgfQogICAgYm9vbCBvcGVyYXRvcjwoY29uc3QgU3RyaW5nUHRyJiB4KSBj
b25zdAogICAgewogICAgICAgIEFTU0VSVCh4Lm1fc3RyaW5nSW1wbCA9PSBtX3N0cmluZ0ltcGwp
OwogICAgICAgIHJldHVybiBtX29mZnNldCA8IHgubV9vZmZzZXQ7CiAgICB9CnByaXZhdGU6CiAg
ICBXVEY6OlN0cmluZ0ltcGwqIG1fc3RyaW5nSW1wbDsKICAgIHVuc2lnbmVkIG1fb2Zmc2V0Owp9
OwoKaW50IGFjY2Vzc1N0cmluZ1B0cihjb25zdCBXVEY6OlN0cmluZyYgc3RyaW5nKSB7CiAgICBp
bnQgciA9IDA7CiAgICBTdHJpbmdQdHIgY2hhcmFjdGVycyhzdHJpbmcpOwogICAgY29uc3QgU3Ry
aW5nUHRyIGVuZChzdHJpbmcsIHN0cmluZy5sZW5ndGgoKSk7CiAgICB3aGlsZSAoY2hhcmFjdGVy
cyA8IGVuZCkKICAgICAgICByICs9ICpjaGFyYWN0ZXJzKys7CiAgICByZXR1cm4gcjsKfQoKaW50
IGFjY2Vzc1N0cmluZ1B0ck5vUG9zdFBsdXNQbHVzKGNvbnN0IFdURjo6U3RyaW5nJiBzdHJpbmcp
IHsKICAgIGludCByID0gMDsKICAgIFN0cmluZ1B0ciBjaGFyYWN0ZXJzKHN0cmluZyk7CiAgICBj
b25zdCBTdHJpbmdQdHIgZW5kKHN0cmluZywgc3RyaW5nLmxlbmd0aCgpKTsKICAgIHdoaWxlIChj
aGFyYWN0ZXJzIDwgZW5kKSB7CiAgICAgICAgciArPSAqY2hhcmFjdGVyczsKICAgICAgICArK2No
YXJhY3RlcnM7CiAgICB9CiAgICByZXR1cm4gcjsKfQoKaW50IGFjY2Vzc0NoYXJhY3RlcnMoY29u
c3QgV1RGOjpTdHJpbmcmIHN0cmluZykgewogICAgaW50IHIgPSAwOwogICAgY29uc3QgVUNoYXIq
IGNoYXJhY3RlcnMgPSBzdHJpbmcuY2hhcmFjdGVycygpOwogICAgY29uc3QgVUNoYXIqIGVuZCA9
IGNoYXJhY3RlcnMgKyBzdHJpbmcubGVuZ3RoKCk7CiAgICB3aGlsZSAoY2hhcmFjdGVycyA8IGVu
ZCkKICAgICAgICByICs9ICpjaGFyYWN0ZXJzKys7CiAgICByZXR1cm4gcjsKfQoKaW50IGFjY2Vz
c0ltcGwoY29uc3QgV1RGOjpTdHJpbmcmIHN0cmluZykgewogICAgaW50IHIgPSAwOwogICAgV1RG
OjpTdHJpbmdJbXBsKiBpbXBsID0gc3RyaW5nLmltcGwoKTsKICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBpbXBsLT5sZW5ndGgoKTsgKytpKQogICAgICAgIHIgKz0gKCppbXBsKVtpXTsKICAg
IHJldHVybiByOwp9CgppbnQgYWNjZXNzSW1wbENhY2hlTGVuZ3RoKGNvbnN0IFdURjo6U3RyaW5n
JiBzdHJpbmcpIHsKICAgIGludCByID0gMDsKICAgIFdURjo6U3RyaW5nSW1wbCogaW1wbCA9IHN0
cmluZy5pbXBsKCk7CiAgICB1bnNpZ25lZCBsZW5ndGggPSBpbXBsLT5sZW5ndGgoKTsKICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkKICAgICAgICByICs9ICgqaW1wbClb
aV07CiAgICByZXR1cm4gcjsKfQoKaW50IGFjY2Vzc0FycmF5KGNvbnN0IFdURjo6U3RyaW5nJiBz
dHJpbmcpIHsKICAgIGludCByID0gMDsKICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzdHJp
bmcubGVuZ3RoKCk7ICsraSkKICAgICAgICByICs9IHN0cmluZ1tpXTsKICAgIHJldHVybiByOwp9
CgppbnQgYWNjZXNzQXJyYXlDYWNoZUxlbmd0aChjb25zdCBXVEY6OlN0cmluZyYgc3RyaW5nKSB7
CiAgICBpbnQgciA9IDA7CiAgICB1bnNpZ25lZCBsZW5ndGggPSBzdHJpbmcubGVuZ3RoKCk7CiAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpCiAgICAgICAgciArPSBzdHJp
bmdbaV07CiAgICByZXR1cm4gcjsKfQoKdm9pZCB0aW1pbmcoY29uc3QgV1RGOjpTdHJpbmcmIHN0
cmluZywgaW50ICgqZnVuYykoY29uc3QgV1RGOjpTdHJpbmcmKSwgY29uc3QgY2hhciogbmFtZSkg
ewogICAgY29uc3QgaW50IGxvb3BzID0gMTAwMDAwOwogICAgZm9yIChpbnQgaSA9IDA7IGkgPCAx
MDA7ICsraSkKICAgICAgICBmdW5jKHN0cmluZyk7CiAgICBjbG9ja190IHN0YXJ0ID0gY2xvY2so
KTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbG9vcHM7ICsraSkKICAgICAgICBmdW5jKHN0cmlu
Zyk7CiAgICBjbG9ja190IGVuZCA9IGNsb2NrKCk7CiAgICBwcmludGYoIiVzOiAlZlxuIiwgbmFt
ZSwgKGVuZCAtIHN0YXJ0KSAvIHN0YXRpY19jYXN0PGZsb2F0PihDTE9DS1NfUEVSX1NFQykpOwp9
CgojZGVmaW5lIFRJTUlORyhzdHJpbmcsIGZ1bmMpIHRpbWluZyhzdHJpbmcsIGZ1bmMsICNmdW5j
KQoKVEVTVChTdHJpbmdUZXN0LCBQZXJmb3JtYW5jZSkKewogICAgY29uc3QgaW50IHNpemUgPSAx
MDAwMDsKICAgIFVDaGFyIGJ1ZmZlcltzaXplXTsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6
ZTsgKytpKQogICAgICAgIGJ1ZmZlcltpXSA9IGk7CiAgICBXVEY6OlN0cmluZyBzdHJpbmcoYnVm
ZmVyLCBzaXplKTsKICAgIFRJTUlORyhzdHJpbmcsIGFjY2Vzc1N0cmluZ1B0cik7CiAgICBUSU1J
Tkcoc3RyaW5nLCBhY2Nlc3NTdHJpbmdQdHJOb1Bvc3RQbHVzUGx1cyk7CiAgICBUSU1JTkcoc3Ry
aW5nLCBhY2Nlc3NDaGFyYWN0ZXJzKTsgCiAgICBUSU1JTkcoc3RyaW5nLCBhY2Nlc3NJbXBsKTsg
CiAgICBUSU1JTkcoc3RyaW5nLCBhY2Nlc3NJbXBsQ2FjaGVMZW5ndGgpOyAKICAgIFRJTUlORyhz
dHJpbmcsIGFjY2Vzc0FycmF5KTsgCiAgICBUSU1JTkcoc3RyaW5nLCBhY2Nlc3NBcnJheUNhY2hl
TGVuZ3RoKTsgCn0KCn0gLy8gbmFtZXNwYWNlCgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>104318</attachid>
            <date>2011-08-18 03:40:02 -0700</date>
            <delta_ts>2011-08-19 04:19:13 -0700</delta_ts>
            <desc>StringIterator as the returning type of characters()</desc>
            <filename>patch66286b</filename>
            <type>text/plain</type>
            <size>33773</size>
            <attacher name="Xianzhu Wang">wangxianzhu</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDkzMjkyKQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTAxIEBACisyMDExLTA4LTE4ICBYaWFuemh1
IFdhbmcgIDx3YW5neGlhbnpodUBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgQ2hhbmdlIHJldHVy
biB0eXBlIG9mIFN0cmluZ0ltcGw6OmNoYXJhY3RlcnMoKSB0byBTdHJpbmdJdGVyYXRvcgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjYyODYKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlzIGlzIHBhcnQg
b2Ygd29yayBsZXR0aW5nIFN0cmluZyBjYW4gY29udGFpbiA4LWJpdCBidWZmZXIuCisKKyAgICAg
ICAgQWxzbyBjaGFuZ2VkIGRpcmVjdCBhbmQgc2ltcGxlIGluZGlyZWN0IHJlZmVyZW5jZXMgb2Yg
U3RyaW5nSW1wbDo6Y2hhcmFjdGVycygpLAorICAgICAgICBsaWtlCisgICAgICAgICAgICBjb25z
dCBVQ2hhciogY2hhcmFjdGVycyA9IHN0cmluZy5jaGFyYWN0ZXJzKCk7CisgICAgICAgIHRvCisg
ICAgICAgICAgICBTdHJpbmdJdGVyYXRvciBjaGFyYWN0ZXJzID0gc3RyaW5nLmNoYXJhY3RlcnMo
KTsKKworICAgICAgICBObyBuZXcgdGVzdHMuIEFsbCBtb2RpZmljYXRpb25zIHNob3VsZCBwcmVz
ZXJ2ZSBleGFjdGx5IHRoZSBvcmlnaW5hbCBiZWhhdmlvci4KKyAgICAgICAgQWxsIGxheW91dCB0
ZXN0cyBhbmQgdW5pdCB0ZXN0cyBzaG91bGQgcmVzdWx0IGFzIGJlZm9yZS4KKworICAgICAgICAq
IGNzcy9DU1NQYXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VTaW1wbGVMZW5ndGhW
YWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjpjaGVja0ZvclZhbGlkRG91YmxlKToKKyAgICAgICAg
KFdlYkNvcmU6OnBhcnNlRG91YmxlKToKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlQ29sb3JJbnRP
clBlcmNlbnRhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6aXNUZW50aEFscGhhKToKKyAgICAgICAg
KFdlYkNvcmU6OnBhcnNlQWxwaGFWYWx1ZSk6CisgICAgICAgIChXZWJDb3JlOjptaWdodEJlUkdC
QSk6CisgICAgICAgIChXZWJDb3JlOjptaWdodEJlUkdCKToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U1BhcnNlcjo6cGFyc2VDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnJlY2hl
Y2tBdEtleXdvcmQpOgorICAgICAgICAoV2ViQ29yZTo6Y3NzUHJvcGVydHlJRCk6CisgICAgICAg
IChXZWJDb3JlOjppc0NTU1Rva2VuaXplcklkZW50aWZpZXIpOgorICAgICAgICAoV2ViQ29yZTo6
aXNDU1NUb2tlbml6ZXJVUkwpOgorICAgICAgICAqIGNzcy9DU1NQYXJzZXIuaDoKKyAgICAgICAg
KiBkb20vRGF0YXNldERPTVN0cmluZ01hcC5jcHA6CisgICAgICAgIChXZWJDb3JlOjppc1ZhbGlk
QXR0cmlidXRlTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpjb252ZXJ0QXR0cmlidXRlTmFtZVRv
UHJvcGVydHlOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OnByb3BlcnR5TmFtZU1hdGNoZXNBdHRy
aWJ1dGVOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OmlzVmFsaWRQcm9wZXJ0eU5hbWUpOgorICAg
ICAgICAoV2ViQ29yZTo6Y29udmVydFByb3BlcnR5TmFtZVRvQXR0cmlidXRlTmFtZSk6CisgICAg
ICAgICogZG9tL0RvY3VtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNhbm9uaWNhbGl6ZWRU
aXRsZSk6CisgICAgICAgIChXZWJDb3JlOjppc1ZhbGlkTmFtZUFTQ0lJKToKKyAgICAgICAgKFdl
YkNvcmU6OkRvY3VtZW50Ojppc1ZhbGlkTmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVu
dDo6cGFyc2VRdWFsaWZpZWROYW1lKToKKyAgICAgICAgKiBkb20vU3BhY2VTcGxpdFN0cmluZy5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpoYXNOb25BU0NJSU9yVXBwZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6U3BhY2VTcGxpdFN0cmluZ0RhdGE6OmNyZWF0ZVZlY3Rvcik6CisgICAgICAgICogZG9t
L1N0eWxlZEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVkRWxlbWVudDo6Y2xh
c3NBdHRyaWJ1dGVDaGFuZ2VkKToKKyAgICAgICAgKiBlZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21t
YW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbnRhaW5zT25seVdoaXRlc3BhY2UpOgorICAg
ICAgICAqIGVkaXRpbmcvU21hcnRSZXBsYWNlSUNVLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmFk
ZEFsbENvZGVQb2ludHMpOgorICAgICAgICAqIGVkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OmNvbGxhcHNlZFNwYWNlTGVuZ3RoKToKKyAgICAgICAgKFdlYkNvcmU6
OmNvbnRhaW5zS2FuYUxldHRlcnMpOgorICAgICAgICAqIGVkaXRpbmcvVHlwaW5nQ29tbWFuZC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpUeXBpbmdDb21tYW5kOjppbnNlcnRUZXh0KToKKyAgICAg
ICAgKiBodG1sL0hUTUxGb250RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZUZv
bnRTaXplKToKKyAgICAgICAgKiBodG1sL3BhcnNlci9IVE1MUGFyc2VySWRpb21zLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OnN0cmlwTGVhZGluZ0FuZFRyYWlsaW5nSFRNTFNwYWNlcyk6CisgICAg
ICAgIChXZWJDb3JlOjpwYXJzZUhUTUxJbnRlZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNl
SFRNTE5vbk5lZ2F0aXZlSW50ZWdlcik6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclBh
Z2VBZ2VudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVTZWFyY2hSZWdleFNvdXJjZSk6
CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yU3R5bGU6Om5ld0xpbmVBbmRXaGl0ZXNwYWNlRGVsaW1pdGVycyk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JTdHlsZVNoZWV0OjpmaXhVbnBhcnNlZFByb3Bl
cnR5UmFuZ2VzKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVUZXh0RWRpdG9y
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0eWxlVGV4dEVkaXRvcjo6aW5zZXJ0
UHJvcGVydHkpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3R5bGVUZXh0RWRpdG9yOjpp
bnRlcm5hbFJlcGxhY2VQcm9wZXJ0eSk6CisgICAgICAgICogcGxhdGZvcm0vRmlsZVN5c3RlbS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjplbmNvZGVGb3JGaWxlTmFtZSk6CisgICAgICAgICogcGxh
dGZvcm0vS1VSTC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjb3B5QVNDSUkpOgorICAgICAgICAo
V2ViQ29yZTo6ZmluZEZpcnN0T2YpOgorICAgICAgICAoV2ViQ29yZTo6S1VSTDo6aW5pdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpLVVJMOjpwb3J0KToKKyAgICAgICAgKFdlYkNvcmU6OktVUkw6OmNv
cHlQYXJzZWRRdWVyeVRvKToKKyAgICAgICAgKFdlYkNvcmU6OmRlY29kZVVSTEVzY2FwZVNlcXVl
bmNlcyk6CisgICAgICAgIChXZWJDb3JlOjphcHBlbmRFbmNvZGVkSG9zdG5hbWUpOgorICAgICAg
ICAoV2ViQ29yZTo6ZmluZEhvc3RuYW1lc0luTWFpbFRvVVJMKToKKyAgICAgICAgKFdlYkNvcmU6
OmZpbmRIb3N0bmFtZUluSGllcmFyY2hpY2FsVVJMKToKKyAgICAgICAgKFdlYkNvcmU6OnByb3Rv
Y29sSXNJbkhUVFBGYW1pbHkpOgorICAgICAgICAqIHBsYXRmb3JtL0xlbmd0aC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpwYXJzZUxlbmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpjb3VudENoYXJh
Y3Rlcik6CisgICAgICAgIChXZWJDb3JlOjpuZXdDb29yZHNBcnJheSk6CisgICAgICAgICogcmVu
ZGVyaW5nL1JlbmRlclRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bWFrZUNhcGl0YWxpemVk
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6OmNvbXB1dGVQcmVmZXJyZWRMb2dpY2Fs
V2lkdGhzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRleHQ6OmlzQWxsQ29sbGFwc2libGVX
aGl0ZXNwYWNlKToKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyVGV4dC5oOgorICAgICAgICAo
V2ViQ29yZTo6UmVuZGVyVGV4dDo6Y2hhcmFjdGVycyk6CisgICAgICAgICogd2Vic29ja2V0cy9X
ZWJTb2NrZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aXNWYWxpZFByb3RvY29sU3RyaW5nSGl4
aWU3Nik6CisKIDIwMTEtMDgtMTggIEFkYW0gS2xlaW4gIDxhZGFta0BjaHJvbWl1bS5vcmc+CiAK
ICAgICAgICAgSGFuZGxlICJmb3JtIiBhdHRyaWJ1dGUgdXBkYXRlcyBpbiBwYXJzZU1hcHBlZEF0
dHJpYnV0ZSgpIGluc3RlYWQgb2YgYXR0cmlidXRlQ2hhbmdlZCgpIHRvIGJldHRlciBtYXRjaCBI
VE1MRWxlbWVudCBwcmFjdGljZXMKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwCShyZXZp
c2lvbiA5MzEwNikKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zOTYsNyArMzk2LDcgQEAgc3RhdGljIGlubGluZSBib29sIGlzU2ltcGxlTGVu
Z3RoUHJvcGVydAogCiBzdGF0aWMgYm9vbCBwYXJzZVNpbXBsZUxlbmd0aFZhbHVlKENTU011dGFi
bGVTdHlsZURlY2xhcmF0aW9uKiBkZWNsYXJhdGlvbiwgaW50IHByb3BlcnR5SWQsIGNvbnN0IFN0
cmluZyYgc3RyaW5nLCBib29sIGltcG9ydGFudCwgYm9vbCBzdHJpY3QpCiB7Ci0gICAgY29uc3Qg
VUNoYXIqIGNoYXJhY3RlcnMgPSBzdHJpbmcuY2hhcmFjdGVycygpOworICAgIFN0cmluZ0l0ZXJh
dG9yIGNoYXJhY3RlcnMgPSBzdHJpbmcuY2hhcmFjdGVycygpOwogICAgIHVuc2lnbmVkIGxlbmd0
aCA9IHN0cmluZy5sZW5ndGgoKTsKICAgICBpZiAoIWNoYXJhY3RlcnMgfHwgIWxlbmd0aCkKICAg
ICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNDM3NCw3ICs0Mzc0LDcgQEAgYm9vbCBDU1NQYXJzZXI6
OnBhcnNlRm9udEZhY2VVbmljb2RlUmFuZwogCiAvLyBSZXR1cm5zIHRoZSBudW1iZXIgb2YgY2hh
cmFjdGVycyB3aGljaCBmb3JtIGEgdmFsaWQgZG91YmxlCiAvLyBhbmQgYXJlIHRlcm1pbmF0ZWQg
YnkgdGhlIGdpdmVuIHRlcm1pbmF0b3IgY2hhcmFjdGVyCi1zdGF0aWMgaW50IGNoZWNrRm9yVmFs
aWREb3VibGUoY29uc3QgVUNoYXIqIHN0cmluZywgY29uc3QgVUNoYXIqIGVuZCwgY29uc3QgY2hh
ciB0ZXJtaW5hdG9yKQorc3RhdGljIGludCBjaGVja0ZvclZhbGlkRG91YmxlKFN0cmluZ0l0ZXJh
dG9yIHN0cmluZywgU3RyaW5nSXRlcmF0b3IgZW5kLCBjb25zdCBjaGFyIHRlcm1pbmF0b3IpCiB7
CiAgICAgaW50IGxlbmd0aCA9IGVuZCAtIHN0cmluZzsKICAgICBpZiAobGVuZ3RoIDwgMSkKQEAg
LTQ0MDQsNyArNDQwNCw3IEBAIHN0YXRpYyBpbnQgY2hlY2tGb3JWYWxpZERvdWJsZShjb25zdCBV
Q2gKIAogLy8gUmV0dXJucyB0aGUgbnVtYmVyIG9mIGNoYXJhY3RlcnMgY29uc3VtZWQgZm9yIHBh
cnNpbmcgYSB2YWxpZCBkb3VibGUKIC8vIHRlcm1pbmF0ZWQgYnkgdGhlIGdpdmVuIHRlcm1pbmF0
b3IgY2hhcmFjdGVyCi1zdGF0aWMgaW50IHBhcnNlRG91YmxlKGNvbnN0IFVDaGFyKiBzdHJpbmcs
IGNvbnN0IFVDaGFyKiBlbmQsIGNvbnN0IGNoYXIgdGVybWluYXRvciwgZG91YmxlJiB2YWx1ZSkK
K3N0YXRpYyBpbnQgcGFyc2VEb3VibGUoU3RyaW5nSXRlcmF0b3Igc3RyaW5nLCBTdHJpbmdJdGVy
YXRvciBlbmQsIGNvbnN0IGNoYXIgdGVybWluYXRvciwgZG91YmxlJiB2YWx1ZSkKIHsKICAgICBp
bnQgbGVuZ3RoID0gY2hlY2tGb3JWYWxpZERvdWJsZShzdHJpbmcsIGVuZCwgdGVybWluYXRvcik7
CiAgICAgaWYgKCFsZW5ndGgpCkBAIC00NDM4LDkgKzQ0MzgsOSBAQCBzdGF0aWMgaW50IHBhcnNl
RG91YmxlKGNvbnN0IFVDaGFyKiBzdHJpCiAgICAgcmV0dXJuIGxlbmd0aDsKIH0KIAotc3RhdGlj
IGJvb2wgcGFyc2VDb2xvckludE9yUGVyY2VudGFnZShjb25zdCBVQ2hhciomIHN0cmluZywgY29u
c3QgVUNoYXIqIGVuZCwgY29uc3QgY2hhciB0ZXJtaW5hdG9yLCBDU1NQcmltaXRpdmVWYWx1ZTo6
VW5pdFR5cGVzJiBleHBlY3QsIGludCYgdmFsdWUpCitzdGF0aWMgYm9vbCBwYXJzZUNvbG9ySW50
T3JQZXJjZW50YWdlKFN0cmluZ0l0ZXJhdG9yJiBzdHJpbmcsIFN0cmluZ0l0ZXJhdG9yIGVuZCwg
Y29uc3QgY2hhciB0ZXJtaW5hdG9yLCBDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVzJiBleHBl
Y3QsIGludCYgdmFsdWUpCiB7Ci0gICAgY29uc3QgVUNoYXIqIGN1cnJlbnQgPSBzdHJpbmc7Cisg
ICAgU3RyaW5nSXRlcmF0b3IgY3VycmVudCA9IHN0cmluZzsKICAgICBkb3VibGUgbG9jYWxWYWx1
ZSA9IDA7CiAgICAgYm9vbCBuZWdhdGl2ZSA9IGZhbHNlOwogICAgIHdoaWxlIChjdXJyZW50ICE9
IGVuZCAmJiBpc0hUTUxTcGFjZSgqY3VycmVudCkpCkBAIC00NTA1LDcgKzQ1MDUsNyBAQCBzdGF0
aWMgYm9vbCBwYXJzZUNvbG9ySW50T3JQZXJjZW50YWdlKGNvCiAgICAgcmV0dXJuIHRydWU7CiB9
CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBpc1RlbnRoQWxwaGEoY29uc3QgVUNoYXIqIHN0cmluZywg
Y29uc3QgaW50IGxlbmd0aCkKK3N0YXRpYyBpbmxpbmUgYm9vbCBpc1RlbnRoQWxwaGEoU3RyaW5n
SXRlcmF0b3Igc3RyaW5nLCBjb25zdCBpbnQgbGVuZ3RoKQogewogICAgIC8vICIwLlgiCiAgICAg
aWYgKGxlbmd0aCA9PSAzICYmIHN0cmluZ1swXSA9PSAnMCcgJiYgc3RyaW5nWzFdID09ICcuJyAm
JiBpc0FTQ0lJRGlnaXQoc3RyaW5nWzJdKSkKQEAgLTQ1MTgsNyArNDUxOCw3IEBAIHN0YXRpYyBp
bmxpbmUgYm9vbCBpc1RlbnRoQWxwaGEoY29uc3QgVUMKICAgICByZXR1cm4gZmFsc2U7CiB9CiAK
LXN0YXRpYyBpbmxpbmUgYm9vbCBwYXJzZUFscGhhVmFsdWUoY29uc3QgVUNoYXIqJiBzdHJpbmcs
IGNvbnN0IFVDaGFyKiBlbmQsIGNvbnN0IGNoYXIgdGVybWluYXRvciwgaW50JiB2YWx1ZSkKK3N0
YXRpYyBpbmxpbmUgYm9vbCBwYXJzZUFscGhhVmFsdWUoU3RyaW5nSXRlcmF0b3ImIHN0cmluZywg
U3RyaW5nSXRlcmF0b3IgZW5kLCBjb25zdCBjaGFyIHRlcm1pbmF0b3IsIGludCYgdmFsdWUpCiB7
CiAgICAgd2hpbGUgKHN0cmluZyAhPSBlbmQgJiYgaXNIVE1MU3BhY2UoKnN0cmluZykpCiAgICAg
ICAgIHN0cmluZysrOwpAQCAtNDU2OSw3ICs0NTY5LDcgQEAgc3RhdGljIGlubGluZSBib29sIHBh
cnNlQWxwaGFWYWx1ZShjb25zdAogICAgIHJldHVybiB0cnVlOwogfQogCi1zdGF0aWMgaW5saW5l
IGJvb2wgbWlnaHRCZVJHQkEoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0
aCkKK3N0YXRpYyBpbmxpbmUgYm9vbCBtaWdodEJlUkdCQShTdHJpbmdJdGVyYXRvciBjaGFyYWN0
ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCiB7CiAgICAgaWYgKGxlbmd0aCA8IDUpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKQEAgLTQ1ODAsNyArNDU4MCw3IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBtaWdo
dEJlUkdCQShjb25zdCBVQ2gKICAgICAgICAgJiYgKGNoYXJhY3RlcnNbM10gfCAweDIwKSA9PSAn
YSc7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBtaWdodEJlUkdCKGNvbnN0IFVDaGFyKiBjaGFy
YWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCitzdGF0aWMgaW5saW5lIGJvb2wgbWlnaHRCZVJHQihT
dHJpbmdJdGVyYXRvciBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCiB7CiAgICAgaWYgKGxl
bmd0aCA8IDQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKQEAgLTQ1OTIsNyArNDU5Miw3IEBAIHN0
YXRpYyBpbmxpbmUgYm9vbCBtaWdodEJlUkdCKGNvbnN0IFVDaGEKIAogYm9vbCBDU1NQYXJzZXI6
OnBhcnNlQ29sb3IoY29uc3QgU3RyaW5nICZuYW1lLCBSR0JBMzImIHJnYiwgYm9vbCBzdHJpY3Qp
CiB7Ci0gICAgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMgPSBuYW1lLmNoYXJhY3RlcnMoKTsKKyAg
ICBTdHJpbmdJdGVyYXRvciBjaGFyYWN0ZXJzID0gbmFtZS5jaGFyYWN0ZXJzKCk7CiAgICAgdW5z
aWduZWQgbGVuZ3RoID0gbmFtZS5sZW5ndGgoKTsKICAgICBDU1NQcmltaXRpdmVWYWx1ZTo6VW5p
dFR5cGVzIGV4cGVjdCA9IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVU5LTk9XTjsKIApAQCAtNDYw
OCw4ICs0NjA4LDggQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlQ29sb3IoY29uc3QgU3RyaW5nIAog
CiAgICAgLy8gVHJ5IHJnYmEoKSBzeW50YXguCiAgICAgaWYgKG1pZ2h0QmVSR0JBKGNoYXJhY3Rl
cnMsIGxlbmd0aCkpIHsKLSAgICAgICAgY29uc3QgVUNoYXIqIGN1cnJlbnQgPSBjaGFyYWN0ZXJz
ICsgNTsKLSAgICAgICAgY29uc3QgVUNoYXIqIGVuZCA9IGNoYXJhY3RlcnMgKyBsZW5ndGg7Cisg
ICAgICAgIFN0cmluZ0l0ZXJhdG9yIGN1cnJlbnQgPSBjaGFyYWN0ZXJzICsgNTsKKyAgICAgICAg
U3RyaW5nSXRlcmF0b3IgZW5kID0gY2hhcmFjdGVycyArIGxlbmd0aDsKICAgICAgICAgaW50IHJl
ZDsKICAgICAgICAgaW50IGdyZWVuOwogICAgICAgICBpbnQgYmx1ZTsKQEAgLTQ2MzEsOCArNDYz
MSw4IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUNvbG9yKGNvbnN0IFN0cmluZyAKIAogICAgIC8v
IFRyeSByZ2IoKSBzeW50YXguCiAgICAgaWYgKG1pZ2h0QmVSR0IoY2hhcmFjdGVycywgbGVuZ3Ro
KSkgewotICAgICAgICBjb25zdCBVQ2hhciogY3VycmVudCA9IGNoYXJhY3RlcnMgKyA0OwotICAg
ICAgICBjb25zdCBVQ2hhciogZW5kID0gY2hhcmFjdGVycyArIGxlbmd0aDsKKyAgICAgICAgU3Ry
aW5nSXRlcmF0b3IgY3VycmVudCA9IGNoYXJhY3RlcnMgKyA0OworICAgICAgICBTdHJpbmdJdGVy
YXRvciBlbmQgPSBjaGFyYWN0ZXJzICsgbGVuZ3RoOwogICAgICAgICBpbnQgcmVkOwogICAgICAg
ICBpbnQgZ3JlZW47CiAgICAgICAgIGludCBibHVlOwpAQCAtNjQ1MSw3ICs2NDUxLDcgQEAgaW50
IENTU1BhcnNlcjo6bGV4KHZvaWQqIHl5bHZhbFdpdGhvdXRUeQogICAgIHJldHVybiB0b2tlbigp
OwogfQogCi12b2lkIENTU1BhcnNlcjo6cmVjaGVja0F0S2V5d29yZChjb25zdCBVQ2hhciogc3Ry
LCBpbnQgbGVuKQordm9pZCBDU1NQYXJzZXI6OnJlY2hlY2tBdEtleXdvcmQoU3RyaW5nSXRlcmF0
b3Igc3RyLCBpbnQgbGVuKQogewogICAgIFN0cmluZyBydWxlTmFtZShzdHIsIGxlbik7CiAgICAg
aWYgKGVxdWFsSWdub3JpbmdDYXNlKHJ1bGVOYW1lLCAiQGltcG9ydCIpKQpAQCAtNzA0Niw3ICs3
MDQ2LDcgQEAgdm9pZCBDU1NQYXJzZXI6Om1hcmtQcm9wZXJ0eUVuZChib29sIGlzSQogICAgIHJl
c2V0UHJvcGVydHlNYXJrcygpOwogfQogCi1zdGF0aWMgaW50IGNzc1Byb3BlcnR5SUQoY29uc3Qg
VUNoYXIqIHByb3BlcnR5TmFtZSwgdW5zaWduZWQgbGVuZ3RoKQorc3RhdGljIGludCBjc3NQcm9w
ZXJ0eUlEKFN0cmluZ0l0ZXJhdG9yIHByb3BlcnR5TmFtZSwgdW5zaWduZWQgbGVuZ3RoKQogewog
ICAgIGlmICghbGVuZ3RoKQogICAgICAgICByZXR1cm4gMDsKQEAgLTcxMzIsOCArNzEzMiw4IEBA
IGludCBjc3NWYWx1ZUtleXdvcmRJRChjb25zdCBDU1NQYXJzZXJTdHIKIC8vICJpZGVudCIgZnJv
bSB0aGUgQ1NTIHRva2VuaXplciwgbWludXMgYmFja3NsYXNoLWVzY2FwZSBzZXF1ZW5jZXMKIHN0
YXRpYyBib29sIGlzQ1NTVG9rZW5pemVySWRlbnRpZmllcihjb25zdCBTdHJpbmcmIHN0cmluZykK
IHsKLSAgICBjb25zdCBVQ2hhciogcCA9IHN0cmluZy5jaGFyYWN0ZXJzKCk7Ci0gICAgY29uc3Qg
VUNoYXIqIGVuZCA9IHAgKyBzdHJpbmcubGVuZ3RoKCk7CisgICAgU3RyaW5nSXRlcmF0b3IgcCA9
IHN0cmluZy5jaGFyYWN0ZXJzKCk7CisgICAgU3RyaW5nSXRlcmF0b3IgZW5kID0gcCArIHN0cmlu
Zy5sZW5ndGgoKTsKIAogICAgIC8vIC0/CiAgICAgaWYgKHAgIT0gZW5kICYmIHBbMF0gPT0gJy0n
KQpAQCAtNzE1Niw4ICs3MTU2LDggQEAgc3RhdGljIGJvb2wgaXNDU1NUb2tlbml6ZXJJZGVudGlm
aWVyKGNvbgogLy8gInVybCIgZnJvbSB0aGUgQ1NTIHRva2VuaXplciwgbWludXMgYmFja3NsYXNo
LWVzY2FwZSBzZXF1ZW5jZXMKIHN0YXRpYyBib29sIGlzQ1NTVG9rZW5pemVyVVJMKGNvbnN0IFN0
cmluZyYgc3RyaW5nKQogewotICAgIGNvbnN0IFVDaGFyKiBwID0gc3RyaW5nLmNoYXJhY3RlcnMo
KTsKLSAgICBjb25zdCBVQ2hhciogZW5kID0gcCArIHN0cmluZy5sZW5ndGgoKTsKKyAgICBTdHJp
bmdJdGVyYXRvciBwID0gc3RyaW5nLmNoYXJhY3RlcnMoKTsKKyAgICBTdHJpbmdJdGVyYXRvciBl
bmQgPSBwICsgc3RyaW5nLmxlbmd0aCgpOwogCiAgICAgZm9yICg7IHAgIT0gZW5kOyArK3ApIHsK
ICAgICAgICAgVUNoYXIgYyA9IHBbMF07CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFy
c2VyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5oCShyZXZp
c2lvbiA5MzEwNikKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtMjkzLDcgKzI5Myw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICBwcml2YXRl
OgogICAgICAgICB2b2lkIHNldFN0eWxlU2hlZXQoQ1NTU3R5bGVTaGVldCopOwogICAgICAgICAK
LSAgICAgICAgdm9pZCByZWNoZWNrQXRLZXl3b3JkKGNvbnN0IFVDaGFyKiBzdHIsIGludCBsZW4p
OworICAgICAgICB2b2lkIHJlY2hlY2tBdEtleXdvcmQoU3RyaW5nSXRlcmF0b3Igc3RyLCBpbnQg
bGVuKTsKIAogICAgICAgICB2b2lkIHNldHVwUGFyc2VyKGNvbnN0IGNoYXIqIHByZWZpeCwgY29u
c3QgU3RyaW5nJiwgY29uc3QgY2hhciogc3VmZml4KTsKIApJbmRleDogU291cmNlL1dlYkNvcmUv
ZG9tL0RhdGFzZXRET01TdHJpbmdNYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2RvbS9EYXRhc2V0RE9NU3RyaW5nTWFwLmNwcAkocmV2aXNpb24gOTMxMDYpCisrKyBTb3VyY2Uv
V2ViQ29yZS9kb20vRGF0YXNldERPTVN0cmluZ01hcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQw
LDcgKzQwLDcgQEAgc3RhdGljIGJvb2wgaXNWYWxpZEF0dHJpYnV0ZU5hbWUoY29uc3QgUwogICAg
IGlmICghbmFtZS5zdGFydHNXaXRoKCJkYXRhLSIpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
LSAgICBjb25zdCBVQ2hhciogY2hhcmFjdGVycyA9IG5hbWUuY2hhcmFjdGVycygpOworICAgIFN0
cmluZ0l0ZXJhdG9yIGNoYXJhY3RlcnMgPSBuYW1lLmNoYXJhY3RlcnMoKTsKICAgICB1bnNpZ25l
ZCBsZW5ndGggPSBuYW1lLmxlbmd0aCgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDU7IGkgPCBs
ZW5ndGg7ICsraSkgewogICAgICAgICBpZiAoaXNBU0NJSVVwcGVyKGNoYXJhY3RlcnNbaV0pKQpA
QCAtNTQsNyArNTQsNyBAQCBzdGF0aWMgU3RyaW5nIGNvbnZlcnRBdHRyaWJ1dGVOYW1lVG9Qcm9w
CiB7CiAgICAgU3RyaW5nQnVpbGRlciBzdHJpbmdCdWlsZGVyOwogCi0gICAgY29uc3QgVUNoYXIq
IGNoYXJhY3RlcnMgPSBuYW1lLmNoYXJhY3RlcnMoKTsKKyAgICBTdHJpbmdJdGVyYXRvciBjaGFy
YWN0ZXJzID0gbmFtZS5jaGFyYWN0ZXJzKCk7CiAgICAgdW5zaWduZWQgbGVuZ3RoID0gbmFtZS5s
ZW5ndGgoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSA1OyBpIDwgbGVuZ3RoOyArK2kpIHsKICAg
ICAgICAgVUNoYXIgY2hhcmFjdGVyID0gY2hhcmFjdGVyc1tpXTsKQEAgLTc3LDggKzc3LDggQEAg
c3RhdGljIGJvb2wgcHJvcGVydHlOYW1lTWF0Y2hlc0F0dHJpYnV0ZQogICAgIGlmICghYXR0cmli
dXRlTmFtZS5zdGFydHNXaXRoKCJkYXRhLSIpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAg
ICBjb25zdCBVQ2hhciogcHJvcGVydHkgPSBwcm9wZXJ0eU5hbWUuY2hhcmFjdGVycygpOwotICAg
IGNvbnN0IFVDaGFyKiBhdHRyaWJ1dGUgPSBhdHRyaWJ1dGVOYW1lLmNoYXJhY3RlcnMoKTsKKyAg
ICBTdHJpbmdJdGVyYXRvciBwcm9wZXJ0eSA9IHByb3BlcnR5TmFtZS5jaGFyYWN0ZXJzKCk7Cisg
ICAgU3RyaW5nSXRlcmF0b3IgYXR0cmlidXRlID0gYXR0cmlidXRlTmFtZS5jaGFyYWN0ZXJzKCk7
CiAgICAgdW5zaWduZWQgcHJvcGVydHlMZW5ndGggPSBwcm9wZXJ0eU5hbWUubGVuZ3RoKCk7CiAg
ICAgdW5zaWduZWQgYXR0cmlidXRlTGVuZ3RoID0gYXR0cmlidXRlTmFtZS5sZW5ndGgoKTsKICAg
IApAQCAtMTAyLDcgKzEwMiw3IEBAIHN0YXRpYyBib29sIHByb3BlcnR5TmFtZU1hdGNoZXNBdHRy
aWJ1dGUKIAogc3RhdGljIGJvb2wgaXNWYWxpZFByb3BlcnR5TmFtZShjb25zdCBTdHJpbmcmIG5h
bWUpCiB7Ci0gICAgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMgPSBuYW1lLmNoYXJhY3RlcnMoKTsK
KyAgICBTdHJpbmdJdGVyYXRvciBjaGFyYWN0ZXJzID0gbmFtZS5jaGFyYWN0ZXJzKCk7CiAgICAg
dW5zaWduZWQgbGVuZ3RoID0gbmFtZS5sZW5ndGgoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgbGVuZ3RoOyArK2kpIHsKICAgICAgICAgaWYgKGNoYXJhY3RlcnNbaV0gPT0gJy0nICYm
IChpICsgMSA8IGxlbmd0aCkgJiYgaXNBU0NJSUxvd2VyKGNoYXJhY3RlcnNbaSArIDFdKSkKQEAg
LTExNiw3ICsxMTYsNyBAQCBzdGF0aWMgU3RyaW5nIGNvbnZlcnRQcm9wZXJ0eU5hbWVUb0F0dHJp
CiAgICAgU3RyaW5nQnVpbGRlciBidWlsZGVyOwogICAgIGJ1aWxkZXIuYXBwZW5kKCJkYXRhLSIp
OwogCi0gICAgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMgPSBuYW1lLmNoYXJhY3RlcnMoKTsKKyAg
ICBTdHJpbmdJdGVyYXRvciBjaGFyYWN0ZXJzID0gbmFtZS5jaGFyYWN0ZXJzKCk7CiAgICAgdW5z
aWduZWQgbGVuZ3RoID0gbmFtZS5sZW5ndGgoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgbGVuZ3RoOyArK2kpIHsKICAgICAgICAgVUNoYXIgY2hhcmFjdGVyID0gY2hhcmFjdGVyc1tp
XTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAkocmV2aXNpb24gOTMxMDYpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjM4LDcgKzEy
MzgsNyBAQCBQYXNzUmVmUHRyPFJhbmdlPiBEb2N1bWVudDo6Y2FyZXRSYW5nZUZyCiBzdGF0aWMg
aW5saW5lIFN0cmluZ1dpdGhEaXJlY3Rpb24gY2Fub25pY2FsaXplZFRpdGxlKERvY3VtZW50KiBk
b2N1bWVudCwgY29uc3QgU3RyaW5nV2l0aERpcmVjdGlvbiYgdGl0bGVXaXRoRGlyZWN0aW9uKQog
ewogICAgIGNvbnN0IFN0cmluZyYgdGl0bGUgPSB0aXRsZVdpdGhEaXJlY3Rpb24uc3RyaW5nKCk7
Ci0gICAgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMgPSB0aXRsZS5jaGFyYWN0ZXJzKCk7CisgICAg
U3RyaW5nSXRlcmF0b3IgY2hhcmFjdGVycyA9IHRpdGxlLmNoYXJhY3RlcnMoKTsKICAgICB1bnNp
Z25lZCBsZW5ndGggPSB0aXRsZS5sZW5ndGgoKTsKICAgICB1bnNpZ25lZCBpOwogCkBAIC0zNzA2
LDcgKzM3MDYsNyBAQCBzdGF0aWMgYm9vbCBpc1ZhbGlkTmFtZU5vbkFTQ0lJKGNvbnN0IFVDCiAg
ICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBpc1ZhbGlkTmFtZUFTQ0lJ
KGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNpZ25lZCBsZW5ndGgpCitzdGF0aWMgaW5saW5l
IGJvb2wgaXNWYWxpZE5hbWVBU0NJSShTdHJpbmdJdGVyYXRvciBjaGFyYWN0ZXJzLCB1bnNpZ25l
ZCBsZW5ndGgpCiB7CiAgICAgVUNoYXIgYyA9IGNoYXJhY3RlcnNbMF07CiAgICAgaWYgKCEoaXNB
U0NJSUFscGhhKGMpIHx8IGMgPT0gJzonIHx8IGMgPT0gJ18nKSkKQEAgLTM3MjcsNyArMzcyNyw3
IEBAIGJvb2wgRG9jdW1lbnQ6OmlzVmFsaWROYW1lKGNvbnN0IFN0cmluZyYKICAgICBpZiAoIWxl
bmd0aCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgY29uc3QgVUNoYXIqIGNoYXJhY3Rl
cnMgPSBuYW1lLmNoYXJhY3RlcnMoKTsKKyAgICBTdHJpbmdJdGVyYXRvciBjaGFyYWN0ZXJzID0g
bmFtZS5jaGFyYWN0ZXJzKCk7CiAgICAgcmV0dXJuIGlzVmFsaWROYW1lQVNDSUkoY2hhcmFjdGVy
cywgbGVuZ3RoKSB8fCBpc1ZhbGlkTmFtZU5vbkFTQ0lJKGNoYXJhY3RlcnMsIGxlbmd0aCk7CiB9
CiAKQEAgLTM3NDQsNyArMzc0NCw3IEBAIGJvb2wgRG9jdW1lbnQ6OnBhcnNlUXVhbGlmaWVkTmFt
ZShjb25zdCAKICAgICBib29sIHNhd0NvbG9uID0gZmFsc2U7CiAgICAgaW50IGNvbG9uUG9zID0g
MDsKIAotICAgIGNvbnN0IFVDaGFyKiBzID0gcXVhbGlmaWVkTmFtZS5jaGFyYWN0ZXJzKCk7Cisg
ICAgU3RyaW5nSXRlcmF0b3IgcyA9IHF1YWxpZmllZE5hbWUuY2hhcmFjdGVycygpOwogICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5ndGg7KSB7CiAgICAgICAgIFVDaGFyMzIgYzsKICAg
ICAgICAgVTE2X05FWFQocywgaSwgbGVuZ3RoLCBjKQpJbmRleDogU291cmNlL1dlYkNvcmUvZG9t
L1NwYWNlU3BsaXRTdHJpbmcuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9T
cGFjZVNwbGl0U3RyaW5nLmNwcAkocmV2aXNpb24gOTMxMDYpCisrKyBTb3VyY2UvV2ViQ29yZS9k
b20vU3BhY2VTcGxpdFN0cmluZy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTMxLDcgKzMxLDcgQEAg
bmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdGF0aWMgYm9vbCBoYXNOb25BU0NJSU9yVXBwZXIoY29u
c3QgU3RyaW5nJiBzdHJpbmcpCiB7Ci0gICAgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMgPSBzdHJp
bmcuY2hhcmFjdGVycygpOworICAgIFN0cmluZ0l0ZXJhdG9yIGNoYXJhY3RlcnMgPSBzdHJpbmcu
Y2hhcmFjdGVycygpOwogICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0cmluZy5sZW5ndGgoKTsKICAg
ICBib29sIGhhc1VwcGVyID0gZmFsc2U7CiAgICAgVUNoYXIgb3JlZCA9IDA7CkBAIC01MSw3ICs1
MSw3IEBAIHZvaWQgU3BhY2VTcGxpdFN0cmluZ0RhdGE6OmNyZWF0ZVZlY3RvcigKICAgICBpZiAo
bV9zaG91bGRGb2xkQ2FzZSAmJiBoYXNOb25BU0NJSU9yVXBwZXIobV9zdHJpbmcpKQogICAgICAg
ICBtX3N0cmluZyA9IG1fc3RyaW5nLmZvbGRDYXNlKCk7CiAKLSAgICBjb25zdCBVQ2hhciogY2hh
cmFjdGVycyA9IG1fc3RyaW5nLmNoYXJhY3RlcnMoKTsKKyAgICBTdHJpbmdJdGVyYXRvciBjaGFy
YWN0ZXJzID0gbV9zdHJpbmcuY2hhcmFjdGVycygpOwogICAgIHVuc2lnbmVkIGxlbmd0aCA9IG1f
c3RyaW5nLmxlbmd0aCgpOwogICAgIHVuc2lnbmVkIHN0YXJ0ID0gMDsKICAgICB3aGlsZSAodHJ1
ZSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvZG9tL1N0eWxlZEVsZW1lbnQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2RvbS9TdHlsZWRFbGVtZW50LmNwcAkocmV2aXNpb24gOTMx
MDYpCisrKyBTb3VyY2UvV2ViQ29yZS9kb20vU3R5bGVkRWxlbWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTIxNCw3ICsyMTQsNyBAQCBib29sIFN0eWxlZEVsZW1lbnQ6Om1hcFRvRW50cnkoY29u
c3QgUXVhCiAKIHZvaWQgU3R5bGVkRWxlbWVudDo6Y2xhc3NBdHRyaWJ1dGVDaGFuZ2VkKGNvbnN0
IEF0b21pY1N0cmluZyYgbmV3Q2xhc3NTdHJpbmcpCiB7Ci0gICAgY29uc3QgVUNoYXIqIGNoYXJh
Y3RlcnMgPSBuZXdDbGFzc1N0cmluZy5jaGFyYWN0ZXJzKCk7CisgICAgU3RyaW5nSXRlcmF0b3Ig
Y2hhcmFjdGVycyA9IG5ld0NsYXNzU3RyaW5nLmNoYXJhY3RlcnMoKTsKICAgICB1bnNpZ25lZCBs
ZW5ndGggPSBuZXdDbGFzc1N0cmluZy5sZW5ndGgoKTsKICAgICB1bnNpZ25lZCBpOwogICAgIGZv
ciAoaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkgewpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAJKHJldmlzaW9uIDkzMTA2KQorKysgU291
cmNlL1dlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQyMyw3ICs0MjMsNyBAQCB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpzZXROb2Rl
QXR0cmliCiBzdGF0aWMgaW5saW5lIGJvb2wgY29udGFpbnNPbmx5V2hpdGVzcGFjZShjb25zdCBT
dHJpbmcmIHRleHQpCiB7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRleHQubGVuZ3Ro
KCk7ICsraSkgewotICAgICAgICBpZiAoIWlzV2hpdGVzcGFjZSh0ZXh0LmNoYXJhY3RlcnMoKVtp
XSkpCisgICAgICAgIGlmICghaXNXaGl0ZXNwYWNlKHRleHRbaV0pKQogICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOwogICAgIH0KICAgICAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU21h
cnRSZXBsYWNlSUNVLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Nt
YXJ0UmVwbGFjZUlDVS5jcHAJKHJldmlzaW9uIDkzMTA2KQorKysgU291cmNlL1dlYkNvcmUvZWRp
dGluZy9TbWFydFJlcGxhY2VJQ1UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw3IEBA
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogc3RhdGljIHZvaWQgYWRkQWxsQ29kZVBvaW50cyhVU2V0
KiBzbWFydFNldCwgY29uc3QgU3RyaW5nJiBzdHJpbmcpCiB7Ci0gICAgY29uc3QgVUNoYXIqIGNo
YXJhY3RlcnMgPSBzdHJpbmcuY2hhcmFjdGVycygpOworICAgIFN0cmluZ0l0ZXJhdG9yIGNoYXJh
Y3RlcnMgPSBzdHJpbmcuY2hhcmFjdGVycygpOwogICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwg
c3RyaW5nLmxlbmd0aCgpOyBpKyspCiAgICAgICAgIHVzZXRfYWRkKHNtYXJ0U2V0LCBjaGFyYWN0
ZXJzW2ldKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5jcHAJ
KHJldmlzaW9uIDkzMTA2KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3Iu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC04MDQsNyArODA0LDcgQEAgc3RhdGljIGJvb2wgc2hvdWxk
RW1pdEV4dHJhTmV3bGluZUZvck5vZAogCiBzdGF0aWMgaW50IGNvbGxhcHNlZFNwYWNlTGVuZ3Ro
KFJlbmRlclRleHQqIHJlbmRlcmVyLCBpbnQgdGV4dEVuZCkKIHsKLSAgICBjb25zdCBVQ2hhciog
Y2hhcmFjdGVycyA9IHJlbmRlcmVyLT50ZXh0KCktPmNoYXJhY3RlcnMoKTsKKyAgICBTdHJpbmdJ
dGVyYXRvciBjaGFyYWN0ZXJzID0gcmVuZGVyZXItPnRleHQoKS0+Y2hhcmFjdGVycygpOwogICAg
IGludCBsZW5ndGggPSByZW5kZXJlci0+dGV4dCgpLT5sZW5ndGgoKTsKICAgICBmb3IgKGludCBp
ID0gdGV4dEVuZDsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAgICAgIGlmICghcmVuZGVyZXItPnN0
eWxlKCktPmlzQ29sbGFwc2libGVXaGl0ZVNwYWNlKGNoYXJhY3RlcnNbaV0pKQpAQCAtMTc5Niw3
ICsxNzk2LDcgQEAgc3RhdGljIGlubGluZSBib29sIGlzQ29tYmluaW5nVm9pY2VkU291bgogCiBz
dGF0aWMgaW5saW5lIGJvb2wgY29udGFpbnNLYW5hTGV0dGVycyhjb25zdCBTdHJpbmcmIHBhdHRl
cm4pCiB7Ci0gICAgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMgPSBwYXR0ZXJuLmNoYXJhY3RlcnMo
KTsKKyAgICBTdHJpbmdJdGVyYXRvciBjaGFyYWN0ZXJzID0gcGF0dGVybi5jaGFyYWN0ZXJzKCk7
CiAgICAgdW5zaWduZWQgbGVuZ3RoID0gcGF0dGVybi5sZW5ndGgoKTsKICAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHsKICAgICAgICAgaWYgKGlzS2FuYUxldHRlcihj
aGFyYWN0ZXJzW2ldKSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFu
ZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5k
LmNwcAkocmV2aXNpb24gOTMxMDYpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0Nv
bW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTYsNyArMTU2LDcgQEAgdm9pZCBUeXBpbmdD
b21tYW5kOjppbnNlcnRUZXh0KERvY3VtZW50KgogICAgIEFTU0VSVChmcmFtZSk7CiAKICAgICBp
ZiAoIXRleHQuaXNFbXB0eSgpKQotICAgICAgICBkb2N1bWVudC0+ZnJhbWUoKS0+ZWRpdG9yKCkt
PnVwZGF0ZU1hcmtlcnNGb3JXb3Jkc0FmZmVjdGVkQnlFZGl0aW5nKGlzU3BhY2VPck5ld2xpbmUo
dGV4dC5jaGFyYWN0ZXJzKClbMF0pKTsKKyAgICAgICAgZG9jdW1lbnQtPmZyYW1lKCktPmVkaXRv
cigpLT51cGRhdGVNYXJrZXJzRm9yV29yZHNBZmZlY3RlZEJ5RWRpdGluZyhpc1NwYWNlT3JOZXds
aW5lKHRleHRbMF0pKTsKICAgICAKICAgICBpbnNlcnRUZXh0KGRvY3VtZW50LCB0ZXh0LCBmcmFt
ZS0+c2VsZWN0aW9uKCktPnNlbGVjdGlvbigpLCBvcHRpb25zLCBjb21wb3NpdGlvbik7CiB9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxGb250RWxlbWVudC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MRm9udEVsZW1lbnQuY3BwCShyZXZpc2lvbiA5MzEw
NikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEZvbnRFbGVtZW50LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNTIsOCArNTIsOCBAQCBzdGF0aWMgYm9vbCBwYXJzZUZvbnRTaXplKGNvbnN0IFN0
cmluZyYgCiAKICAgICAvLyBTdGVwIDEKICAgICAvLyBTdGVwIDIKLSAgICBjb25zdCBVQ2hhciog
cG9zaXRpb24gPSBpbnB1dC5jaGFyYWN0ZXJzKCk7Ci0gICAgY29uc3QgVUNoYXIqIGVuZCA9IHBv
c2l0aW9uICsgaW5wdXQubGVuZ3RoKCk7CisgICAgU3RyaW5nSXRlcmF0b3IgcG9zaXRpb24gPSBp
bnB1dC5jaGFyYWN0ZXJzKCk7CisgICAgU3RyaW5nSXRlcmF0b3IgZW5kID0gcG9zaXRpb24gKyBp
bnB1dC5sZW5ndGgoKTsKIAogICAgIC8vIFN0ZXAgMwogICAgIHdoaWxlIChwb3NpdGlvbiA8IGVu
ZCkgewpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFBhcnNlcklkaW9tcy5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTFBhcnNlcklk
aW9tcy5jcHAJKHJldmlzaW9uIDkzMTA2KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIv
SFRNTFBhcnNlcklkaW9tcy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDcgKzM1LDcgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogCiBTdHJpbmcgc3RyaXBMZWFkaW5nQW5kVHJhaWxpbmdIVE1MU3Bh
Y2VzKGNvbnN0IFN0cmluZyYgc3RyaW5nKQogewotICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJz
ID0gc3RyaW5nLmNoYXJhY3RlcnMoKTsKKyAgICBTdHJpbmdJdGVyYXRvciBjaGFyYWN0ZXJzID0g
c3RyaW5nLmNoYXJhY3RlcnMoKTsKICAgICB1bnNpZ25lZCBsZW5ndGggPSBzdHJpbmcubGVuZ3Ro
KCk7CiAKICAgICB1bnNpZ25lZCBudW1MZWFkaW5nU3BhY2VzOwpAQCAtMTc1LDggKzE3NSw4IEBA
IGJvb2wgcGFyc2VIVE1MSW50ZWdlcihjb25zdCBTdHJpbmcmIGlucHUKIHsKICAgICAvLyBTdGVw
IDEKICAgICAvLyBTdGVwIDIKLSAgICBjb25zdCBVQ2hhciogcG9zaXRpb24gPSBpbnB1dC5jaGFy
YWN0ZXJzKCk7Ci0gICAgY29uc3QgVUNoYXIqIGVuZCA9IHBvc2l0aW9uICsgaW5wdXQubGVuZ3Ro
KCk7CisgICAgU3RyaW5nSXRlcmF0b3IgcG9zaXRpb24gPSBpbnB1dC5jaGFyYWN0ZXJzKCk7Cisg
ICAgU3RyaW5nSXRlcmF0b3IgZW5kID0gcG9zaXRpb24gKyBpbnB1dC5sZW5ndGgoKTsKIAogICAg
IC8vIFN0ZXAgMwogICAgIGludCBzaWduID0gMTsKQEAgLTIyNSw4ICsyMjUsOCBAQCBib29sIHBh
cnNlSFRNTE5vbk5lZ2F0aXZlSW50ZWdlcihjb25zdCBTCiB7CiAgICAgLy8gU3RlcCAxCiAgICAg
Ly8gU3RlcCAyCi0gICAgY29uc3QgVUNoYXIqIHBvc2l0aW9uID0gaW5wdXQuY2hhcmFjdGVycygp
OwotICAgIGNvbnN0IFVDaGFyKiBlbmQgPSBwb3NpdGlvbiArIGlucHV0Lmxlbmd0aCgpOworICAg
IFN0cmluZ0l0ZXJhdG9yIHBvc2l0aW9uID0gaW5wdXQuY2hhcmFjdGVycygpOworICAgIFN0cmlu
Z0l0ZXJhdG9yIGVuZCA9IHBvc2l0aW9uICsgaW5wdXQubGVuZ3RoKCk7CiAKICAgICAvLyBTdGVw
IDMKICAgICB3aGlsZSAocG9zaXRpb24gPCBlbmQpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwCShyZXZpc2lvbiA5MzEwNikKKysr
IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC00NDYsNyArNDQ2LDcgQEAgdm9pZCBJbnNwZWN0b3JQYWdlQWdlbnQ6OmdldFJl
c291cmNlQ29udAogc3RhdGljIFN0cmluZyBjcmVhdGVTZWFyY2hSZWdleFNvdXJjZShjb25zdCBT
dHJpbmcmIHRleHQpCiB7CiAgICAgU3RyaW5nIHJlc3VsdDsKLSAgICBjb25zdCBVQ2hhciogY2hh
cmFjdGVycyA9IHRleHQuY2hhcmFjdGVycygpOworICAgIFN0cmluZ0l0ZXJhdG9yIGNoYXJhY3Rl
cnMgPSB0ZXh0LmNoYXJhY3RlcnMoKTsKICAgICBTdHJpbmcgc3BlY2lhbHMocmVnZXhTcGVjaWFs
Q2hhcmFjdGVycyk7CiAKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdGV4dC5sZW5ndGgo
KTsgaSsrKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVT
aGVldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
clN0eWxlU2hlZXQuY3BwCShyZXZpc2lvbiA5MzEwNikKKysrIFNvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTE3LDcgKzUx
Nyw3IEBAIE5ld0xpbmVBbmRXaGl0ZXNwYWNlJiBJbnNwZWN0b3JTdHlsZTo6bmUKICAgICBpbnQg
cHJvcGVydHlJbmRleCA9IDA7CiAgICAgYm9vbCBpc0Z1bGxQcmVmaXhTY2FubmVkID0gZmFsc2U7
CiAgICAgYm9vbCBsaW5lRmVlZFRlcm1pbmF0ZWQgPSBmYWxzZTsKLSAgICBjb25zdCBVQ2hhciog
Y2hhcmFjdGVycyA9IHRleHQuY2hhcmFjdGVycygpOworICAgIFN0cmluZ0l0ZXJhdG9yIGNoYXJh
Y3RlcnMgPSB0ZXh0LmNoYXJhY3RlcnMoKTsKICAgICB3aGlsZSAocHJvcGVydHlJbmRleCA8IHBy
b3BlcnR5Q291bnQpIHsKICAgICAgICAgY29uc3QgV2ViQ29yZTo6Q1NTUHJvcGVydHlTb3VyY2VE
YXRhJiBjdXJyZW50UHJvcGVydHkgPSBzb3VyY2VQcm9wZXJ0eURhdGEtPmF0KHByb3BlcnR5SW5k
ZXgrKyk7CiAKQEAgLTEwNDYsNyArMTA0Niw3IEBAIHZvaWQgSW5zcGVjdG9yU3R5bGVTaGVldDo6
Zml4VW5wYXJzZWRQcm8KICAgICAgICAgcmV0dXJuOwogCiAgICAgdW5zaWduZWQgc3R5bGVTdGFy
dCA9IHJ1bGVEYXRhLT5zdHlsZVNvdXJjZURhdGEtPnN0eWxlQm9keVJhbmdlLnN0YXJ0OwotICAg
IGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzID0gc3R5bGVTaGVldFRleHQuY2hhcmFjdGVycygpOwor
ICAgIFN0cmluZ0l0ZXJhdG9yIGNoYXJhY3RlcnMgPSBzdHlsZVNoZWV0VGV4dC5jaGFyYWN0ZXJz
KCk7CiAgICAgQ1NTUHJvcGVydHlTb3VyY2VEYXRhKiBuZXh0RGF0YSA9ICYocHJvcGVydHlEYXRh
LmF0KDApKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7CiAgICAg
ICAgIENTU1Byb3BlcnR5U291cmNlRGF0YSogY3VycmVudERhdGEgPSBuZXh0RGF0YTsKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVRleHRFZGl0b3IuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVRleHRF
ZGl0b3IuY3BwCShyZXZpc2lvbiA5MzEwNikKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JTdHlsZVRleHRFZGl0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03OSw3ICs3OSw3
IEBAIHZvaWQgSW5zcGVjdG9yU3R5bGVUZXh0RWRpdG9yOjppbnNlcnRQcm8KICAgICBpZiAoaW5z
ZXJ0TGFzdCAmJiAhaW5zZXJ0Rmlyc3RJblNvdXJjZSkgewogICAgICAgICBwcm9wZXJ0eVN0YXJ0
ID0gc3R5bGVCb2R5TGVuZ3RoOwogICAgICAgICBpZiAocHJvcGVydHlTdGFydCAmJiB0ZXh0VG9T
ZXQubGVuZ3RoKCkpIHsKLSAgICAgICAgICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzID0gbV9z
dHlsZVRleHQuY2hhcmFjdGVycygpOworICAgICAgICAgICAgU3RyaW5nSXRlcmF0b3IgY2hhcmFj
dGVycyA9IG1fc3R5bGVUZXh0LmNoYXJhY3RlcnMoKTsKIAogICAgICAgICAgICAgbG9uZyBjdXJQ
b3MgPSBwcm9wZXJ0eVN0YXJ0IC0gMTsgLy8gVGhlIGxhc3QgcG9zaXRpb24gb2Ygc3R5bGUgZGVj
bGFyYXRpb24sIHNpbmNlIHByb3BlcnR5U3RhcnQgcG9pbnRzIHBhc3Qgb25lLgogICAgICAgICAg
ICAgd2hpbGUgKGN1clBvcyAmJiBpc0hUTUxTcGFjZShjaGFyYWN0ZXJzW2N1clBvc10pKQpAQCAt
MjI3LDcgKzIyNyw3IEBAIHZvaWQgSW5zcGVjdG9yU3R5bGVUZXh0RWRpdG9yOjppbnRlcm5hbFIK
ICAgICBjb25zdCBTb3VyY2VSYW5nZSYgcmFuZ2UgPSBwcm9wZXJ0eS5zb3VyY2VEYXRhLnJhbmdl
OwogICAgIGxvbmcgcmVwbGFjZVJhbmdlU3RhcnQgPSByYW5nZS5zdGFydDsKICAgICBsb25nIHJl
cGxhY2VSYW5nZUVuZCA9IHJhbmdlLmVuZDsKLSAgICBjb25zdCBVQ2hhciogY2hhcmFjdGVycyA9
IG1fc3R5bGVUZXh0LmNoYXJhY3RlcnMoKTsKKyAgICBTdHJpbmdJdGVyYXRvciBjaGFyYWN0ZXJz
ID0gbV9zdHlsZVRleHQuY2hhcmFjdGVycygpOwogICAgIGxvbmcgbmV3VGV4dExlbmd0aCA9IG5l
d1RleHQubGVuZ3RoKCk7CiAgICAgU3RyaW5nIGZpbmFsTmV3VGV4dCA9IG5ld1RleHQ7CiAKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0ZpbGVTeXN0ZW0uY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0ZpbGVTeXN0ZW0uY3BwCShyZXZpc2lvbiA5MzEwNikK
KysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0ZpbGVTeXN0ZW0uY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC04Myw4ICs4Myw4IEBAIFN0cmluZyBlbmNvZGVGb3JGaWxlTmFtZShjb25zdCBTdHJpbmcm
IGkKICAgICBWZWN0b3I8VUNoYXIsIDUxMj4gYnVmZmVyKGxlbmd0aCAqIDMgKyAxKTsKICAgICBV
Q2hhciogcCA9IGJ1ZmZlci5kYXRhKCk7CiAKLSAgICBjb25zdCBVQ2hhciogc3RyID0gaW5wdXRT
dHIuY2hhcmFjdGVycygpOwotICAgIGNvbnN0IFVDaGFyKiBzdHJFbmQgPSBzdHIgKyBsZW5ndGg7
CisgICAgU3RyaW5nSXRlcmF0b3Igc3RyID0gaW5wdXRTdHIuY2hhcmFjdGVycygpOworICAgIFN0
cmluZ0l0ZXJhdG9yIHN0ckVuZCA9IHN0ciArIGxlbmd0aDsKIAogICAgIHdoaWxlIChzdHIgPCBz
dHJFbmQpIHsKICAgICAgICAgVUNoYXIgYyA9ICpzdHIrKzsKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL0tVUkwuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L0tVUkwuY3BwCShyZXZpc2lvbiA5MzEwNikKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0tV
UkwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNjEsNyArMjYxLDcgQEAgc3RhdGljIGlubGluZSBp
bnQgaGV4RGlnaXRWYWx1ZShVQ2hhciBjKQogLy8gQ29waWVzIHRoZSBzb3VyY2UgdG8gdGhlIGRl
c3RpbmF0aW9uLCBhc3N1bWluZyBhbGwgdGhlIHNvdXJjZSBjaGFyYWN0ZXJzIGFyZQogLy8gQVND
SUkuIFRoZSBkZXN0aW5hdGlvbiBidWZmZXIgbXVzdCBiZSBsYXJnZSBlbm91Z2guIE51bGwgY2hh
cmFjdGVycyBhcmUgYWxsb3dlZAogLy8gaW4gdGhlIHNvdXJjZSBzdHJpbmcsIGFuZCBubyBhdHRl
bXB0IGlzIG1hZGUgdG8gbnVsbC10ZXJtaW5hdGUgdGhlIHJlc3VsdC4KLXN0YXRpYyB2b2lkIGNv
cHlBU0NJSShjb25zdCBVQ2hhciogc3JjLCBpbnQgbGVuZ3RoLCBjaGFyKiBkZXN0KQorc3RhdGlj
IHZvaWQgY29weUFTQ0lJKFN0cmluZ0l0ZXJhdG9yIHNyYywgaW50IGxlbmd0aCwgY2hhciogZGVz
dCkKIHsKICAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKQogICAgICAgICBkZXN0
W2ldID0gc3RhdGljX2Nhc3Q8Y2hhcj4oc3JjW2ldKTsKQEAgLTI3OSw3ICsyNzksNyBAQCBzdGF0
aWMgdm9pZCBhcHBlbmRBU0NJSShjb25zdCBTdHJpbmcmIGJhCiAvLyBSZXR1cm5zIHRoZSBpbmRl
eCBvZiB0aGUgZmlyc3QgaW5kZXggaW4gc3RyaW5nIHxzfCBvZiBhbnkgb2YgdGhlIGNoYXJhY3Rl
cnMKIC8vIGluIHx0b0ZpbmR8LiB8dG9GaW5kfCBzaG91bGQgYmUgYSBudWxsLXRlcm1pbmF0ZWQg
c3RyaW5nLCBhbGwgY2hhcmFjdGVycyB1cAogLy8gdG8gdGhlIG51bGwgd2lsbCBiZSBzZWFyY2hl
ZC4gUmV0dXJucyBpbnQgaWYgbm90IGZvdW5kLgotc3RhdGljIGludCBmaW5kRmlyc3RPZihjb25z
dCBVQ2hhciogcywgaW50IHNMZW4sIGludCBzdGFydFBvcywgY29uc3QgY2hhciogdG9GaW5kKQor
c3RhdGljIGludCBmaW5kRmlyc3RPZihTdHJpbmdJdGVyYXRvciBzLCBpbnQgc0xlbiwgaW50IHN0
YXJ0UG9zLCBjb25zdCBjaGFyKiB0b0ZpbmQpCiB7CiAgICAgZm9yIChpbnQgaSA9IHN0YXJ0UG9z
OyBpIDwgc0xlbjsgaSsrKSB7CiAgICAgICAgIGNvbnN0IGNoYXIqIGN1ciA9IHRvRmluZDsKQEAg
LTQ5NCw3ICs0OTQsNyBAQCB2b2lkIEtVUkw6OmluaXQoY29uc3QgS1VSTCYgYmFzZSwgY29uc3Qg
CiAKICAgICAgICAgICAgICAgICAvLyBmaXJzdCBjb3B5IGV2ZXJ5dGhpbmcgYmVmb3JlIHRoZSBw
YXRoIGZyb20gdGhlIGJhc2UKICAgICAgICAgICAgICAgICB1bnNpZ25lZCBiYXNlTGVuZ3RoID0g
YmFzZS5tX3N0cmluZy5sZW5ndGgoKTsKLSAgICAgICAgICAgICAgICBjb25zdCBVQ2hhciogYmFz
ZUNoYXJhY3RlcnMgPSBiYXNlLm1fc3RyaW5nLmNoYXJhY3RlcnMoKTsKKyAgICAgICAgICAgICAg
ICBTdHJpbmdJdGVyYXRvciBiYXNlQ2hhcmFjdGVycyA9IGJhc2UubV9zdHJpbmcuY2hhcmFjdGVy
cygpOwogICAgICAgICAgICAgICAgIENoYXJCdWZmZXIgYmFzZVN0cmluZ0J1ZmZlcihiYXNlTGVu
Z3RoKTsKICAgICAgICAgICAgICAgICBjb3B5QVNDSUkoYmFzZUNoYXJhY3RlcnMsIGJhc2VMZW5n
dGgsIGJhc2VTdHJpbmdCdWZmZXIuZGF0YSgpKTsKICAgICAgICAgICAgICAgICBjb25zdCBjaGFy
KiBiYXNlU3RyaW5nID0gYmFzZVN0cmluZ0J1ZmZlci5kYXRhKCk7CkBAIC02MTIsNyArNjEyLDcg
QEAgdW5zaWduZWQgc2hvcnQgS1VSTDo6cG9ydCgpIGNvbnN0CiAgICAgaWYgKG1faG9zdEVuZCA9
PSBtX3BvcnRFbmQgfHwgbV9ob3N0RW5kID09IG1fcG9ydEVuZCAtIDEpCiAgICAgICAgIHJldHVy
biAwOwogCi0gICAgY29uc3QgVUNoYXIqIHN0cmluZ0RhdGEgPSBtX3N0cmluZy5jaGFyYWN0ZXJz
KCk7CisgICAgU3RyaW5nSXRlcmF0b3Igc3RyaW5nRGF0YSA9IG1fc3RyaW5nLmNoYXJhY3RlcnMo
KTsKICAgICBib29sIG9rID0gZmFsc2U7CiAgICAgdW5zaWduZWQgbnVtYmVyID0gY2hhcmFjdGVy
c1RvVUludFN0cmljdChzdHJpbmdEYXRhICsgbV9ob3N0RW5kICsgMSwgbV9wb3J0RW5kIC0gbV9o
b3N0RW5kIC0gMSwgJm9rKTsKICAgICBpZiAoIW9rIHx8IG51bWJlciA+IG1heGltdW1WYWxpZFBv
cnROdW1iZXIpCkBAIC02NDgsMjEgKzY0OCwyMSBAQCBib29sIEtVUkw6Omhhc0ZyYWdtZW50SWRl
bnRpZmllcigpIGNvbnN0CiAKIHZvaWQgS1VSTDo6Y29weVBhcnNlZFF1ZXJ5VG8oUGFyc2VkVVJM
UGFyYW1ldGVycyYgcGFyYW1ldGVycykgY29uc3QKIHsKLSAgICBjb25zdCBVQ2hhciogcG9zID0g
bV9zdHJpbmcuY2hhcmFjdGVycygpICsgbV9wYXRoRW5kICsgMTsKLSAgICBjb25zdCBVQ2hhciog
ZW5kID0gbV9zdHJpbmcuY2hhcmFjdGVycygpICsgbV9xdWVyeUVuZDsKKyAgICBTdHJpbmdJdGVy
YXRvciBwb3MgPSBtX3N0cmluZy5jaGFyYWN0ZXJzKCkgKyBtX3BhdGhFbmQgKyAxOworICAgIFN0
cmluZ0l0ZXJhdG9yIGVuZCA9IG1fc3RyaW5nLmNoYXJhY3RlcnMoKSArIG1fcXVlcnlFbmQ7CiAg
ICAgd2hpbGUgKHBvcyA8IGVuZCkgewotICAgICAgICBjb25zdCBVQ2hhciogcGFyYW1ldGVyU3Rh
cnQgPSBwb3M7CisgICAgICAgIFN0cmluZ0l0ZXJhdG9yIHBhcmFtZXRlclN0YXJ0ID0gcG9zOwog
ICAgICAgICB3aGlsZSAocG9zIDwgZW5kICYmICpwb3MgIT0gJyYnKQogICAgICAgICAgICAgKytw
b3M7Ci0gICAgICAgIGNvbnN0IFVDaGFyKiBwYXJhbWV0ZXJFbmQgPSBwb3M7CisgICAgICAgIFN0
cmluZ0l0ZXJhdG9yIHBhcmFtZXRlckVuZCA9IHBvczsKICAgICAgICAgaWYgKHBvcyA8IGVuZCkg
ewogICAgICAgICAgICAgQVNTRVJUKCpwb3MgPT0gJyYnKTsKICAgICAgICAgICAgICsrcG9zOwog
ICAgICAgICB9CiAgICAgICAgIGlmIChwYXJhbWV0ZXJTdGFydCA9PSBwYXJhbWV0ZXJFbmQpCiAg
ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgY29uc3QgVUNoYXIqIG5hbWVTdGFydCA9IHBh
cmFtZXRlclN0YXJ0OwotICAgICAgICBjb25zdCBVQ2hhciogZXF1YWxTaWduID0gcGFyYW1ldGVy
U3RhcnQ7CisgICAgICAgIFN0cmluZ0l0ZXJhdG9yIG5hbWVTdGFydCA9IHBhcmFtZXRlclN0YXJ0
OworICAgICAgICBTdHJpbmdJdGVyYXRvciBlcXVhbFNpZ24gPSBwYXJhbWV0ZXJTdGFydDsKICAg
ICAgICAgd2hpbGUgKGVxdWFsU2lnbiA8IHBhcmFtZXRlckVuZCAmJiAqZXF1YWxTaWduICE9ICc9
JykKICAgICAgICAgICAgICsrZXF1YWxTaWduOwogICAgICAgICBpZiAoZXF1YWxTaWduID09IG5h
bWVTdGFydCkKQEAgLTk2NSw3ICs5NjUsNyBAQCBTdHJpbmcgZGVjb2RlVVJMRXNjYXBlU2VxdWVu
Y2VzKGNvbnN0IFN0CiAgICAgICAgIHVuc2lnbmVkIHJ1bkxlbmd0aCA9IChlbmNvZGVkUnVuRW5k
IC0gZW5jb2RlZFJ1blBvc2l0aW9uKSAvIDM7CiAgICAgICAgIGJ1ZmZlci5yZXNpemUocnVuTGVu
Z3RoKTsKICAgICAgICAgY2hhciogcCA9IGJ1ZmZlci5kYXRhKCk7Ci0gICAgICAgIGNvbnN0IFVD
aGFyKiBxID0gc3RyLmNoYXJhY3RlcnMoKSArIGVuY29kZWRSdW5Qb3NpdGlvbjsKKyAgICAgICAg
U3RyaW5nSXRlcmF0b3IgcSA9IHN0ci5jaGFyYWN0ZXJzKCkgKyBlbmNvZGVkUnVuUG9zaXRpb247
CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBydW5MZW5ndGg7ICsraSkgewogICAg
ICAgICAgICAgKnArKyA9IChoZXhEaWdpdFZhbHVlKHFbMV0pIDw8IDQpIHwgaGV4RGlnaXRWYWx1
ZShxWzJdKTsKICAgICAgICAgICAgIHEgKz0gMzsKQEAgLTE1MzgsNyArMTUzOCw3IEBAIFN0cmlu
ZyBlbmNvZGVXaXRoVVJMRXNjYXBlU2VxdWVuY2VzKGNvbnMKIAogLy8gQXBwZW5kcyB0aGUgcHVu
eWNvZGVkIGhvc3RuYW1lIGlkZW50aWZpZWQgYnkgdGhlIGdpdmVuIHN0cmluZyBhbmQgbGVuZ3Ro
IHRvCiAvLyB0aGUgb3V0cHV0IGJ1ZmZlci4gVGhlIHJlc3VsdCB3aWxsIG5vdCBiZSBudWxsIHRl
cm1pbmF0ZWQuCi1zdGF0aWMgdm9pZCBhcHBlbmRFbmNvZGVkSG9zdG5hbWUoVUNoYXJCdWZmZXIm
IGJ1ZmZlciwgY29uc3QgVUNoYXIqIHN0ciwgdW5zaWduZWQgc3RyTGVuKQorc3RhdGljIHZvaWQg
YXBwZW5kRW5jb2RlZEhvc3RuYW1lKFVDaGFyQnVmZmVyJiBidWZmZXIsIFN0cmluZ0l0ZXJhdG9y
IHN0ciwgdW5zaWduZWQgc3RyTGVuKQogewogICAgIC8vIE5lZWRzIHRvIGJlIGJpZyBlbm91Z2gg
dG8gaG9sZCBhbiBJRE4tZW5jb2RlZCBuYW1lLgogICAgIC8vIEZvciBob3N0IG5hbWVzIGJpZ2dl
ciB0aGFuIHRoaXMsIHdlIHdvbid0IGRvIElETiBlbmNvZGluZywgd2hpY2ggaXMgYWxtb3N0IGNl
cnRhaW5seSBPSy4KQEAgLTE1NzUsNyArMTU3NSw3IEBAIHN0YXRpYyB2b2lkIGFwcGVuZEVuY29k
ZWRIb3N0bmFtZShVQ2hhckIKICNlbmRpZgogfQogCi1zdGF0aWMgdm9pZCBmaW5kSG9zdG5hbWVz
SW5NYWlsVG9VUkwoY29uc3QgVUNoYXIqIHN0ciwgaW50IHN0ckxlbiwgVmVjdG9yPHBhaXI8aW50
LCBpbnQ+ID4mIG5hbWVSYW5nZXMpCitzdGF0aWMgdm9pZCBmaW5kSG9zdG5hbWVzSW5NYWlsVG9V
UkwoU3RyaW5nSXRlcmF0b3Igc3RyLCBpbnQgc3RyTGVuLCBWZWN0b3I8cGFpcjxpbnQsIGludD4g
PiYgbmFtZVJhbmdlcykKIHsKICAgICAvLyBJbiBhIG1haWx0bzogVVJMLCBob3N0IG5hbWVzIGNv
bWUgYWZ0ZXIgYSAnQCcgY2hhcmFjdGVyIGFuZCBlbmQgd2l0aCBhICc+JyBvciAnLCcgb3IgJz8n
IG9yIGVuZCBvZiBzdHJpbmcgY2hhcmFjdGVyLgogICAgIC8vIFNraXAgcXVvdGVkIHN0cmluZ3Mg
c28gdGhhdCBjaGFyYWN0ZXJzIGluIHRoZW0gZG9uJ3QgY29uZnVzZSB1cy4KQEAgLTE2MzgsNyAr
MTYzOCw3IEBAIHN0YXRpYyB2b2lkIGZpbmRIb3N0bmFtZXNJbk1haWxUb1VSTChjb24KICAgICB9
CiB9CiAKLXN0YXRpYyBib29sIGZpbmRIb3N0bmFtZUluSGllcmFyY2hpY2FsVVJMKGNvbnN0IFVD
aGFyKiBzdHIsIGludCBzdHJMZW4sIGludCYgc3RhcnRPZmZzZXQsIGludCYgZW5kT2Zmc2V0KQor
c3RhdGljIGJvb2wgZmluZEhvc3RuYW1lSW5IaWVyYXJjaGljYWxVUkwoU3RyaW5nSXRlcmF0b3Ig
c3RyLCBpbnQgc3RyTGVuLCBpbnQmIHN0YXJ0T2Zmc2V0LCBpbnQmIGVuZE9mZnNldCkKIHsKICAg
ICAvLyBGaW5kIHRoZSBob3N0IG5hbWUgaW4gYSBoaWVyYXJjaGljYWwgVVJMLgogICAgIC8vIEl0
IGNvbWVzIGFmdGVyIGEgIjovLyIgc2VxdWVuY2UsIHdpdGggc2NoZW1lIGNoYXJhY3RlcnMgcHJl
Y2VkaW5nLCBhbmQKQEAgLTE5ODEsNyArMTk4MSw3IEBAIFN0cmluZyBtaW1lVHlwZUZyb21EYXRh
VVJMKGNvbnN0IFN0cmluZyYKIGJvb2wgcHJvdG9jb2xJc0luSFRUUEZhbWlseShjb25zdCBTdHJp
bmcmIHVybCkKIHsKICAgICB1bnNpZ25lZCBsZW5ndGggPSB1cmwubGVuZ3RoKCk7Ci0gICAgY29u
c3QgVUNoYXIqIGNoYXJhY3RlcnMgPSB1cmwuY2hhcmFjdGVycygpOworICAgIFN0cmluZ0l0ZXJh
dG9yIGNoYXJhY3RlcnMgPSB1cmwuY2hhcmFjdGVycygpOwogICAgIHJldHVybiBsZW5ndGggPiA0
CiAgICAgICAgICYmIGlzTGV0dGVyTWF0Y2hJZ25vcmluZ0Nhc2UoY2hhcmFjdGVyc1swXSwgJ2gn
KQogICAgICAgICAmJiBpc0xldHRlck1hdGNoSWdub3JpbmdDYXNlKGNoYXJhY3RlcnNbMV0sICd0
JykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xlbmd0aC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTGVuZ3RoLmNwcAkocmV2aXNpb24gOTMxMDYpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9MZW5ndGguY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
NSw3ICszNSw3IEBAIHVzaW5nIG5hbWVzcGFjZSBXVEY7CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAotc3RhdGljIExlbmd0aCBwYXJzZUxlbmd0aChjb25zdCBVQ2hhciogZGF0YSwgdW5zaWduZWQg
bGVuZ3RoKQorc3RhdGljIExlbmd0aCBwYXJzZUxlbmd0aChTdHJpbmdJdGVyYXRvciBkYXRhLCB1
bnNpZ25lZCBsZW5ndGgpCiB7CiAgICAgaWYgKGxlbmd0aCA9PSAwKQogICAgICAgICByZXR1cm4g
TGVuZ3RoKDEsIFJlbGF0aXZlKTsKQEAgLTc2LDcgKzc2LDcgQEAgc3RhdGljIExlbmd0aCBwYXJz
ZUxlbmd0aChjb25zdCBVQ2hhciogZAogICAgIHJldHVybiBMZW5ndGgoMCwgUmVsYXRpdmUpOwog
fQogCi1zdGF0aWMgaW50IGNvdW50Q2hhcmFjdGVyKGNvbnN0IFVDaGFyKiBkYXRhLCB1bnNpZ25l
ZCBsZW5ndGgsIFVDaGFyIGNoYXJhY3RlcikKK3N0YXRpYyBpbnQgY291bnRDaGFyYWN0ZXIoU3Ry
aW5nSXRlcmF0b3IgZGF0YSwgdW5zaWduZWQgbGVuZ3RoLCBVQ2hhciBjaGFyYWN0ZXIpCiB7CiAg
ICAgaW50IGNvdW50ID0gMDsKICAgICBmb3IgKGludCBpID0gMDsgaSA8IHN0YXRpY19jYXN0PGlu
dD4obGVuZ3RoKTsgKytpKQpAQCAtODcsNyArODcsNyBAQCBzdGF0aWMgaW50IGNvdW50Q2hhcmFj
dGVyKGNvbnN0IFVDaGFyKiBkCiBQYXNzT3duQXJyYXlQdHI8TGVuZ3RoPiBuZXdDb29yZHNBcnJh
eShjb25zdCBTdHJpbmcmIHN0cmluZywgaW50JiBsZW4pCiB7CiAgICAgdW5zaWduZWQgbGVuZ3Ro
ID0gc3RyaW5nLmxlbmd0aCgpOwotICAgIGNvbnN0IFVDaGFyKiBkYXRhID0gc3RyaW5nLmNoYXJh
Y3RlcnMoKTsKKyAgICBTdHJpbmdJdGVyYXRvciBkYXRhID0gc3RyaW5nLmNoYXJhY3RlcnMoKTsK
ICAgICBTdHJpbmdCdWZmZXIgc3BhY2lmaWVkKGxlbmd0aCk7CiAgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgICAgIFVDaGFyIGNjID0gZGF0YVtpXTsKSW5k
ZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAJKHJldmlzaW9uIDkzMTA2
KQorKysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01OCw3ICs1OCw3IEBAIHN0YXRpYyB2b2lkIG1ha2VDYXBpdGFsaXplZChTdHJpbmcq
IHN0cmkKICAgICAgICAgcmV0dXJuOwogCiAgICAgdW5zaWduZWQgbGVuZ3RoID0gc3RyaW5nLT5s
ZW5ndGgoKTsKLSAgICBjb25zdCBVQ2hhciogY2hhcmFjdGVycyA9IHN0cmluZy0+Y2hhcmFjdGVy
cygpOworICAgIFN0cmluZ0l0ZXJhdG9yIGNoYXJhY3RlcnMgPSBzdHJpbmctPmNoYXJhY3RlcnMo
KTsKIAogICAgIGlmIChsZW5ndGggPj0gbnVtZXJpY19saW1pdHM8dW5zaWduZWQ+OjptYXgoKSkK
ICAgICAgICAgQ1JBU0goKTsKQEAgLTc3Niw3ICs3NzYsNyBAQCB2b2lkIFJlbmRlclRleHQ6OmNv
bXB1dGVQcmVmZXJyZWRMb2dpY2FsCiAgICAgY29uc3QgRm9udCYgZiA9IHN0eWxlKCktPmZvbnQo
KTsgLy8gRklYTUU6IFRoaXMgaWdub3JlcyBmaXJzdC1saW5lLgogICAgIGZsb2F0IHdvcmRTcGFj
aW5nID0gc3R5bGUoKS0+d29yZFNwYWNpbmcoKTsKICAgICBpbnQgbGVuID0gdGV4dExlbmd0aCgp
OwotICAgIGNvbnN0IFVDaGFyKiB0eHQgPSBjaGFyYWN0ZXJzKCk7CisgICAgU3RyaW5nSXRlcmF0
b3IgdHh0ID0gY2hhcmFjdGVycygpOwogICAgIExhenlMaW5lQnJlYWtJdGVyYXRvciBicmVha0l0
ZXJhdG9yKHR4dCwgbGVuLCBzdHlsZSgpLT5sb2NhbGUoKSk7CiAgICAgYm9vbCBuZWVkc1dvcmRT
cGFjaW5nID0gZmFsc2U7CiAgICAgYm9vbCBpZ25vcmluZ1NwYWNlcyA9IGZhbHNlOwpAQCAtOTU1
LDcgKzk1NSw3IEBAIHZvaWQgUmVuZGVyVGV4dDo6Y29tcHV0ZVByZWZlcnJlZExvZ2ljYWwKIGJv
b2wgUmVuZGVyVGV4dDo6aXNBbGxDb2xsYXBzaWJsZVdoaXRlc3BhY2UoKQogewogICAgIGludCBs
ZW5ndGggPSB0ZXh0TGVuZ3RoKCk7Ci0gICAgY29uc3QgVUNoYXIqIHRleHQgPSBjaGFyYWN0ZXJz
KCk7CisgICAgU3RyaW5nSXRlcmF0b3IgdGV4dCA9IGNoYXJhY3RlcnMoKTsKICAgICBmb3IgKGlu
dCBpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgICAgIGlmICghc3R5bGUoKS0+aXNDb2xs
YXBzaWJsZVdoaXRlU3BhY2UodGV4dFtpXSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmgJKHJldmlzaW9uIDkzMTA2KQor
KysgU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuaAkod29ya2luZyBjb3B5KQpA
QCAtNjUsNyArNjUsNyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIFZpc2libGVQb3NpdGlvbiBw
b3NpdGlvbkZvclBvaW50KGNvbnN0IExheW91dFBvaW50Jik7CiAKLSAgICBjb25zdCBVQ2hhciog
Y2hhcmFjdGVycygpIGNvbnN0IHsgcmV0dXJuIG1fdGV4dC5jaGFyYWN0ZXJzKCk7IH0KKyAgICBT
dHJpbmdJdGVyYXRvciBjaGFyYWN0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV90ZXh0LmNoYXJhY3Rl
cnMoKTsgfQogICAgIHVuc2lnbmVkIHRleHRMZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX3RleHQu
bGVuZ3RoKCk7IH0gLy8gbm9uIHZpcnR1YWwgaW1wbGVtZW50YXRpb24gb2YgbGVuZ3RoKCkKICAg
ICB2b2lkIHBvc2l0aW9uTGluZUJveChJbmxpbmVCb3gqKTsKIApJbmRleDogU291cmNlL1dlYkNv
cmUvd2Vic29ja2V0cy9XZWJTb2NrZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3dlYnNvY2tldHMvV2ViU29ja2V0LmNwcAkocmV2aXNpb24gOTMxMDYpCisrKyBTb3VyY2UvV2Vi
Q29yZS93ZWJzb2NrZXRzL1dlYlNvY2tldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg2LDcgKzg2
LDcgQEAgc3RhdGljIGJvb2wgaXNWYWxpZFByb3RvY29sU3RyaW5nSGl4aWU3NgogICAgICAgICBy
ZXR1cm4gdHJ1ZTsKICAgICBpZiAocHJvdG9jb2wuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4g
ZmFsc2U7Ci0gICAgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMgPSBwcm90b2NvbC5jaGFyYWN0ZXJz
KCk7CisgICAgU3RyaW5nSXRlcmF0b3IgY2hhcmFjdGVycyA9IHByb3RvY29sLmNoYXJhY3RlcnMo
KTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHByb3RvY29sLmxlbmd0aCgpOyBpKyspIHsK
ICAgICAgICAgaWYgKGNoYXJhY3RlcnNbaV0gPCAweDIwIHx8IGNoYXJhY3RlcnNbaV0gPiAweDdF
KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwo=
</data>
<flag name="commit-queue"
          id="100097"
          type_id="3"
          status="-"
          setter="gyuyoung.kim"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>104488</attachid>
            <date>2011-08-19 04:19:13 -0700</date>
            <delta_ts>2011-08-22 13:27:28 -0700</delta_ts>
            <desc>patch. The last one had a style issue and missed some JavaScriptCore files</desc>
            <filename>patch66286c</filename>
            <type>text/plain</type>
            <size>36326</size>
            <attacher name="Xianzhu Wang">wangxianzhu</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gOTMzOTMpCisrKyBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjAgQEAK
KzIwMTEtMDgtMTkgIFhpYW56aHUgV2FuZyAgPHdhbmd4aWFuemh1QGNocm9taXVtLm9yZz4KKwor
ICAgICAgICBDaGFuZ2UgcmV0dXJuIHR5cGUgb2YgU3RyaW5nSW1wbDo6Y2hhcmFjdGVycygpIHRv
IFN0cmluZ0l0ZXJhdG9yCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD02NjI4NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIFRoaXMgaXMgcGFydCBvZiB3b3JrIGxldHRpbmcgU3RyaW5nIGNhbiBjb250YWluIDgt
Yml0IGJ1ZmZlci4KKworICAgICAgICBObyBuZXcgdGVzdHMuIEFsbCBtb2RpZmljYXRpb25zIHNo
b3VsZCBwcmVzZXJ2ZSBleGFjdGx5IHRoZSBvcmlnaW5hbCBiZWhhdmlvci4KKyAgICAgICAgQWxs
IGxheW91dCB0ZXN0cyBhbmQgdW5pdCB0ZXN0cyBzaG91bGQgcmVzdWx0IGFzIGJlZm9yZS4KKwor
ICAgICAgICAqIHd0Zi90ZXh0L1N0cmluZ0ltcGwuaDoKKyAgICAgICAgKFdURjo6U3RyaW5nSW1w
bDo6Y2hhcmFjdGVycyk6CisgICAgICAgICogd3RmL3RleHQvV1RGU3RyaW5nLmg6CisgICAgICAg
IChXVEY6OlN0cmluZzo6Y2hhcmFjdGVycyk6CisKIDIwMTEtMDgtMTggIE1hcmsgSGFobmVuYmVy
ZyAgPG1oYWhuZW5iZXJnQGFwcGxlLmNvbT4KIAogICAgICAgICBNb3ZlIGFsbG9jYXRpb24gaW4g
Y29uc3RydWN0b3JzIGludG8gc2VwYXJhdGUgY29uc3RydWN0b3JCb2R5KCkgbWV0aG9kcwpJbmRl
eDogU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi90ZXh0L1N0cmluZ0ltcGwuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL3RleHQvU3RyaW5nSW1wbC5oCShyZXZpc2lv
biA5MzM4NykKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvdGV4dC9TdHJpbmdJbXBsLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTYzLDYgKzYzLDEwIEBAIHR5cGVkZWYgQ3Jvc3NUaHJlYWRSZWZD
b3VudGVkPFNoYXJhYmxlVUMKIHR5cGVkZWYgYm9vbCAoKkNoYXJhY3Rlck1hdGNoRnVuY3Rpb25Q
dHIpKFVDaGFyKTsKIHR5cGVkZWYgYm9vbCAoKklzV2hpdGVTcGFjZUZ1bmN0aW9uUHRyKShVQ2hh
cik7CiAKKy8vIEZJWE1FOiBUaGlzIHR5cGVkZWYgaXMgYSB0ZW1wb3Jhcnkgc3RlcCB0byBTdHJp
bmdJbXBsJ3MgOC1iaXQgYnVmZmVyIHN1cHBvcnQuCisvLyBFdmVudHVhbGx5IGl0IHdpbGwgYmUg
YSBjbGFzcyB0byByZXBsYWNlIGFsbW9zdCBhbGwgJ2NvbnN0IFVDaGFyKicgdXNhZ2VzLgordHlw
ZWRlZiBjb25zdCBVQ2hhciogU3RyaW5nSXRlcmF0b3I7CisKIGNsYXNzIFN0cmluZ0ltcGwgOiBw
dWJsaWMgU3RyaW5nSW1wbEJhc2UgewogICAgIGZyaWVuZCBzdHJ1Y3QgSlNDOjpJZGVudGlmaWVy
Q1N0cmluZ1RyYW5zbGF0b3I7CiAgICAgZnJpZW5kIHN0cnVjdCBKU0M6OklkZW50aWZpZXJVQ2hh
ckJ1ZmZlclRyYW5zbGF0b3I7CkBAIC0xOTksNyArMjAzLDcgQEAgcHVibGljOgogICAgIHN0YXRp
YyBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IGFkb3B0KFN0cmluZ0J1ZmZlciYpOwogCiAgICAgU2hh
cmVkVUNoYXIqIHNoYXJlZEJ1ZmZlcigpOwotICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzKCkg
Y29uc3QgeyByZXR1cm4gbV9kYXRhOyB9CisgICAgU3RyaW5nSXRlcmF0b3IgY2hhcmFjdGVycygp
IGNvbnN0IHsgcmV0dXJuIG1fZGF0YTsgfQogCiAgICAgc2l6ZV90IGNvc3QoKQogICAgIHsKQEAg
LTQxNiw1ICs0MjAsNiBAQCB1c2luZyBXVEY6OmVxdWFsOwogdXNpbmcgV1RGOjpUZXh0Q2FzZVNl
bnNpdGl2aXR5OwogdXNpbmcgV1RGOjpUZXh0Q2FzZVNlbnNpdGl2ZTsKIHVzaW5nIFdURjo6VGV4
dENhc2VJbnNlbnNpdGl2ZTsKK3VzaW5nIFdURjo6U3RyaW5nSXRlcmF0b3I7CiAKICNlbmRpZgpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi90ZXh0L1dURlN0cmluZy5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYvdGV4dC9XVEZTdHJpbmcuaAkocmV2aXNp
b24gOTMzODcpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL3RleHQvV1RGU3RyaW5nLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTEzMiw3ICsxMzIsNyBAQCBwdWJsaWM6CiAgICAgICAgIHJldHVy
biBtX2ltcGwtPmxlbmd0aCgpOwogICAgIH0KIAotICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJz
KCkgY29uc3QKKyAgICBTdHJpbmdJdGVyYXRvciBjaGFyYWN0ZXJzKCkgY29uc3QKICAgICB7CiAg
ICAgICAgIGlmICghbV9pbXBsKQogICAgICAgICAgICAgcmV0dXJuIDA7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA5MzM4NykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwkod29ya2luZyBj
b3B5KQpAQCAtMSwzICsxLDEwMSBAQAorMjAxMS0wOC0xOSAgWGlhbnpodSBXYW5nICA8d2FuZ3hp
YW56aHVAY2hyb21pdW0ub3JnPgorCisgICAgICAgIENoYW5nZSByZXR1cm4gdHlwZSBvZiBTdHJp
bmdJbXBsOjpjaGFyYWN0ZXJzKCkgdG8gU3RyaW5nSXRlcmF0b3IKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY2Mjg2CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVGhpcyBpcyBwYXJ0IG9mIHdvcmsgbGV0dGlu
ZyBTdHJpbmcgY2FuIGNvbnRhaW4gOC1iaXQgYnVmZmVyLgorCisgICAgICAgIEFsc28gY2hhbmdl
ZCBkaXJlY3QgYW5kIHNpbXBsZSBpbmRpcmVjdCByZWZlcmVuY2VzIG9mIFN0cmluZ0ltcGw6OmNo
YXJhY3RlcnMoKSwKKyAgICAgICAgbGlrZQorICAgICAgICAgICAgY29uc3QgVUNoYXIqIGNoYXJh
Y3RlcnMgPSBzdHJpbmcuY2hhcmFjdGVycygpOworICAgICAgICB0bworICAgICAgICAgICAgU3Ry
aW5nSXRlcmF0b3IgY2hhcmFjdGVycyA9IHN0cmluZy5jaGFyYWN0ZXJzKCk7CisKKyAgICAgICAg
Tm8gbmV3IHRlc3RzLiBBbGwgbW9kaWZpY2F0aW9ucyBzaG91bGQgcHJlc2VydmUgZXhhY3RseSB0
aGUgb3JpZ2luYWwgYmVoYXZpb3IuCisgICAgICAgIEFsbCBsYXlvdXQgdGVzdHMgYW5kIHVuaXQg
dGVzdHMgc2hvdWxkIHJlc3VsdCBhcyBiZWZvcmUuCisKKyAgICAgICAgKiBjc3MvQ1NTUGFyc2Vy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlU2ltcGxlTGVuZ3RoVmFsdWUpOgorICAgICAg
ICAoV2ViQ29yZTo6Y2hlY2tGb3JWYWxpZERvdWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpwYXJz
ZURvdWJsZSk6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZUNvbG9ySW50T3JQZXJjZW50YWdlKToK
KyAgICAgICAgKFdlYkNvcmU6OmlzVGVudGhBbHBoYSk6CisgICAgICAgIChXZWJDb3JlOjpwYXJz
ZUFscGhhVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6bWlnaHRCZVJHQkEpOgorICAgICAgICAo
V2ViQ29yZTo6bWlnaHRCZVJHQik6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNl
Q29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpyZWNoZWNrQXRLZXl3b3JkKToK
KyAgICAgICAgKFdlYkNvcmU6OmNzc1Byb3BlcnR5SUQpOgorICAgICAgICAoV2ViQ29yZTo6aXND
U1NUb2tlbml6ZXJJZGVudGlmaWVyKToKKyAgICAgICAgKFdlYkNvcmU6OmlzQ1NTVG9rZW5pemVy
VVJMKToKKyAgICAgICAgKiBjc3MvQ1NTUGFyc2VyLmg6CisgICAgICAgICogZG9tL0RhdGFzZXRE
T01TdHJpbmdNYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6aXNWYWxpZEF0dHJpYnV0ZU5hbWUp
OgorICAgICAgICAoV2ViQ29yZTo6Y29udmVydEF0dHJpYnV0ZU5hbWVUb1Byb3BlcnR5TmFtZSk6
CisgICAgICAgIChXZWJDb3JlOjpwcm9wZXJ0eU5hbWVNYXRjaGVzQXR0cmlidXRlTmFtZSk6Cisg
ICAgICAgIChXZWJDb3JlOjppc1ZhbGlkUHJvcGVydHlOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6
OmNvbnZlcnRQcm9wZXJ0eU5hbWVUb0F0dHJpYnV0ZU5hbWUpOgorICAgICAgICAqIGRvbS9Eb2N1
bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjYW5vbmljYWxpemVkVGl0bGUpOgorICAgICAg
ICAoV2ViQ29yZTo6aXNWYWxpZE5hbWVBU0NJSSk6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVu
dDo6aXNWYWxpZE5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6RG9jdW1lbnQ6OnBhcnNlUXVhbGlm
aWVkTmFtZSk6CisgICAgICAgICogZG9tL1NwYWNlU3BsaXRTdHJpbmcuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6aGFzTm9uQVNDSUlPclVwcGVyKToKKyAgICAgICAgKFdlYkNvcmU6OlNwYWNlU3Bs
aXRTdHJpbmdEYXRhOjpjcmVhdGVWZWN0b3IpOgorICAgICAgICAqIGRvbS9TdHlsZWRFbGVtZW50
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlZEVsZW1lbnQ6OmNsYXNzQXR0cmlidXRlQ2hh
bmdlZCk6CisgICAgICAgICogZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpjb250YWluc09ubHlXaGl0ZXNwYWNlKToKKyAgICAgICAgKiBlZGl0aW5n
L1NtYXJ0UmVwbGFjZUlDVS5jcHA6CisgICAgICAgIChXZWJDb3JlOjphZGRBbGxDb2RlUG9pbnRz
KToKKyAgICAgICAgKiBlZGl0aW5nL1RleHRJdGVyYXRvci5jcHA6CisgICAgICAgIChXZWJDb3Jl
Ojpjb2xsYXBzZWRTcGFjZUxlbmd0aCk6CisgICAgICAgIChXZWJDb3JlOjpjb250YWluc0thbmFM
ZXR0ZXJzKToKKyAgICAgICAgKiBlZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6VHlwaW5nQ29tbWFuZDo6aW5zZXJ0VGV4dCk6CisgICAgICAgICogaHRtbC9IVE1M
Rm9udEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VGb250U2l6ZSk6CisgICAg
ICAgICogaHRtbC9wYXJzZXIvSFRNTFBhcnNlcklkaW9tcy5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpzdHJpcExlYWRpbmdBbmRUcmFpbGluZ0hUTUxTcGFjZXMpOgorICAgICAgICAoV2ViQ29yZTo6
cGFyc2VIVE1MSW50ZWdlcik6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZUhUTUxOb25OZWdhdGl2
ZUludGVnZXIpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JQYWdlQWdlbnQuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlU2VhcmNoUmVnZXhTb3VyY2UpOgorICAgICAgICAqIGlu
c3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvclN0eWxlOjpuZXdMaW5lQW5kV2hpdGVzcGFjZURlbGltaXRlcnMpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yU3R5bGVTaGVldDo6Zml4VW5wYXJzZWRQcm9wZXJ0eVJhbmdlcyk6Cisg
ICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlVGV4dEVkaXRvci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JTdHlsZVRleHRFZGl0b3I6Omluc2VydFByb3BlcnR5KToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvclN0eWxlVGV4dEVkaXRvcjo6aW50ZXJuYWxSZXBsYWNl
UHJvcGVydHkpOgorICAgICAgICAqIHBsYXRmb3JtL0ZpbGVTeXN0ZW0uY3BwOgorICAgICAgICAo
V2ViQ29yZTo6ZW5jb2RlRm9yRmlsZU5hbWUpOgorICAgICAgICAqIHBsYXRmb3JtL0tVUkwuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Y29weUFTQ0lJKToKKyAgICAgICAgKFdlYkNvcmU6OmZpbmRG
aXJzdE9mKToKKyAgICAgICAgKFdlYkNvcmU6OktVUkw6OmluaXQpOgorICAgICAgICAoV2ViQ29y
ZTo6S1VSTDo6cG9ydCk6CisgICAgICAgIChXZWJDb3JlOjpLVVJMOjpjb3B5UGFyc2VkUXVlcnlU
byk6CisgICAgICAgIChXZWJDb3JlOjpkZWNvZGVVUkxFc2NhcGVTZXF1ZW5jZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6YXBwZW5kRW5jb2RlZEhvc3RuYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OmZp
bmRIb3N0bmFtZXNJbk1haWxUb1VSTCk6CisgICAgICAgIChXZWJDb3JlOjpmaW5kSG9zdG5hbWVJ
bkhpZXJhcmNoaWNhbFVSTCk6CisgICAgICAgIChXZWJDb3JlOjpwcm90b2NvbElzSW5IVFRQRmFt
aWx5KToKKyAgICAgICAgKiBwbGF0Zm9ybS9MZW5ndGguY3BwOgorICAgICAgICAoV2ViQ29yZTo6
cGFyc2VMZW5ndGgpOgorICAgICAgICAoV2ViQ29yZTo6Y291bnRDaGFyYWN0ZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6bmV3Q29vcmRzQXJyYXkpOgorICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJU
ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Om1ha2VDYXBpdGFsaXplZCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZW5kZXJUZXh0Ojpjb21wdXRlUHJlZmVycmVkTG9naWNhbFdpZHRocyk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUZXh0Ojppc0FsbENvbGxhcHNpYmxlV2hpdGVzcGFjZSk6Cisg
ICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRleHQuaDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRl
clRleHQ6OmNoYXJhY3RlcnMpOgorICAgICAgICAqIHdlYnNvY2tldHMvV2ViU29ja2V0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OmlzVmFsaWRQcm90b2NvbFN0cmluZ0hpeGllNzYpOgorCiAyMDEx
LTA4LTE4ICBTaGF3biBTaW5naCAgPHNoYXduc2luZ2hAY2hyb21pdW0ub3JnPgogCiAgICAgICAg
IENvbXB1dGluZyBzY3JlZW4tc3BhY2UgdHJhbnNmb3JtIGZvciBMYXllckNocm9taXVtIGFuZCBD
Q0xheWVySW1wbApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAJKHJldmlzaW9uIDkzMzg3
KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTM5Niw3ICszOTYsNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgaXNTaW1wbGVMZW5ndGhQcm9wZXJ0
CiAKIHN0YXRpYyBib29sIHBhcnNlU2ltcGxlTGVuZ3RoVmFsdWUoQ1NTTXV0YWJsZVN0eWxlRGVj
bGFyYXRpb24qIGRlY2xhcmF0aW9uLCBpbnQgcHJvcGVydHlJZCwgY29uc3QgU3RyaW5nJiBzdHJp
bmcsIGJvb2wgaW1wb3J0YW50LCBib29sIHN0cmljdCkKIHsKLSAgICBjb25zdCBVQ2hhciogY2hh
cmFjdGVycyA9IHN0cmluZy5jaGFyYWN0ZXJzKCk7CisgICAgU3RyaW5nSXRlcmF0b3IgY2hhcmFj
dGVycyA9IHN0cmluZy5jaGFyYWN0ZXJzKCk7CiAgICAgdW5zaWduZWQgbGVuZ3RoID0gc3RyaW5n
Lmxlbmd0aCgpOwogICAgIGlmICghY2hhcmFjdGVycyB8fCAhbGVuZ3RoKQogICAgICAgICByZXR1
cm4gZmFsc2U7CkBAIC00Mzc0LDcgKzQzNzQsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VGb250
RmFjZVVuaWNvZGVSYW5nCiAKIC8vIFJldHVybnMgdGhlIG51bWJlciBvZiBjaGFyYWN0ZXJzIHdo
aWNoIGZvcm0gYSB2YWxpZCBkb3VibGUKIC8vIGFuZCBhcmUgdGVybWluYXRlZCBieSB0aGUgZ2l2
ZW4gdGVybWluYXRvciBjaGFyYWN0ZXIKLXN0YXRpYyBpbnQgY2hlY2tGb3JWYWxpZERvdWJsZShj
b25zdCBVQ2hhciogc3RyaW5nLCBjb25zdCBVQ2hhciogZW5kLCBjb25zdCBjaGFyIHRlcm1pbmF0
b3IpCitzdGF0aWMgaW50IGNoZWNrRm9yVmFsaWREb3VibGUoU3RyaW5nSXRlcmF0b3Igc3RyaW5n
LCBTdHJpbmdJdGVyYXRvciBlbmQsIGNvbnN0IGNoYXIgdGVybWluYXRvcikKIHsKICAgICBpbnQg
bGVuZ3RoID0gZW5kIC0gc3RyaW5nOwogICAgIGlmIChsZW5ndGggPCAxKQpAQCAtNDQwNCw3ICs0
NDA0LDcgQEAgc3RhdGljIGludCBjaGVja0ZvclZhbGlkRG91YmxlKGNvbnN0IFVDaAogCiAvLyBS
ZXR1cm5zIHRoZSBudW1iZXIgb2YgY2hhcmFjdGVycyBjb25zdW1lZCBmb3IgcGFyc2luZyBhIHZh
bGlkIGRvdWJsZQogLy8gdGVybWluYXRlZCBieSB0aGUgZ2l2ZW4gdGVybWluYXRvciBjaGFyYWN0
ZXIKLXN0YXRpYyBpbnQgcGFyc2VEb3VibGUoY29uc3QgVUNoYXIqIHN0cmluZywgY29uc3QgVUNo
YXIqIGVuZCwgY29uc3QgY2hhciB0ZXJtaW5hdG9yLCBkb3VibGUmIHZhbHVlKQorc3RhdGljIGlu
dCBwYXJzZURvdWJsZShTdHJpbmdJdGVyYXRvciBzdHJpbmcsIFN0cmluZ0l0ZXJhdG9yIGVuZCwg
Y29uc3QgY2hhciB0ZXJtaW5hdG9yLCBkb3VibGUmIHZhbHVlKQogewogICAgIGludCBsZW5ndGgg
PSBjaGVja0ZvclZhbGlkRG91YmxlKHN0cmluZywgZW5kLCB0ZXJtaW5hdG9yKTsKICAgICBpZiAo
IWxlbmd0aCkKQEAgLTQ0MzgsOSArNDQzOCw5IEBAIHN0YXRpYyBpbnQgcGFyc2VEb3VibGUoY29u
c3QgVUNoYXIqIHN0cmkKICAgICByZXR1cm4gbGVuZ3RoOwogfQogCi1zdGF0aWMgYm9vbCBwYXJz
ZUNvbG9ySW50T3JQZXJjZW50YWdlKGNvbnN0IFVDaGFyKiYgc3RyaW5nLCBjb25zdCBVQ2hhciog
ZW5kLCBjb25zdCBjaGFyIHRlcm1pbmF0b3IsIENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXMm
IGV4cGVjdCwgaW50JiB2YWx1ZSkKK3N0YXRpYyBib29sIHBhcnNlQ29sb3JJbnRPclBlcmNlbnRh
Z2UoU3RyaW5nSXRlcmF0b3ImIHN0cmluZywgU3RyaW5nSXRlcmF0b3IgZW5kLCBjb25zdCBjaGFy
IHRlcm1pbmF0b3IsIENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXMmIGV4cGVjdCwgaW50JiB2
YWx1ZSkKIHsKLSAgICBjb25zdCBVQ2hhciogY3VycmVudCA9IHN0cmluZzsKKyAgICBTdHJpbmdJ
dGVyYXRvciBjdXJyZW50ID0gc3RyaW5nOwogICAgIGRvdWJsZSBsb2NhbFZhbHVlID0gMDsKICAg
ICBib29sIG5lZ2F0aXZlID0gZmFsc2U7CiAgICAgd2hpbGUgKGN1cnJlbnQgIT0gZW5kICYmIGlz
SFRNTFNwYWNlKCpjdXJyZW50KSkKQEAgLTQ1MDUsNyArNDUwNSw3IEBAIHN0YXRpYyBib29sIHBh
cnNlQ29sb3JJbnRPclBlcmNlbnRhZ2UoY28KICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotc3RhdGlj
IGlubGluZSBib29sIGlzVGVudGhBbHBoYShjb25zdCBVQ2hhciogc3RyaW5nLCBjb25zdCBpbnQg
bGVuZ3RoKQorc3RhdGljIGlubGluZSBib29sIGlzVGVudGhBbHBoYShTdHJpbmdJdGVyYXRvciBz
dHJpbmcsIGNvbnN0IGludCBsZW5ndGgpCiB7CiAgICAgLy8gIjAuWCIKICAgICBpZiAobGVuZ3Ro
ID09IDMgJiYgc3RyaW5nWzBdID09ICcwJyAmJiBzdHJpbmdbMV0gPT0gJy4nICYmIGlzQVNDSUlE
aWdpdChzdHJpbmdbMl0pKQpAQCAtNDUxOCw3ICs0NTE4LDcgQEAgc3RhdGljIGlubGluZSBib29s
IGlzVGVudGhBbHBoYShjb25zdCBVQwogICAgIHJldHVybiBmYWxzZTsKIH0KIAotc3RhdGljIGlu
bGluZSBib29sIHBhcnNlQWxwaGFWYWx1ZShjb25zdCBVQ2hhciomIHN0cmluZywgY29uc3QgVUNo
YXIqIGVuZCwgY29uc3QgY2hhciB0ZXJtaW5hdG9yLCBpbnQmIHZhbHVlKQorc3RhdGljIGlubGlu
ZSBib29sIHBhcnNlQWxwaGFWYWx1ZShTdHJpbmdJdGVyYXRvciYgc3RyaW5nLCBTdHJpbmdJdGVy
YXRvciBlbmQsIGNvbnN0IGNoYXIgdGVybWluYXRvciwgaW50JiB2YWx1ZSkKIHsKICAgICB3aGls
ZSAoc3RyaW5nICE9IGVuZCAmJiBpc0hUTUxTcGFjZSgqc3RyaW5nKSkKICAgICAgICAgc3RyaW5n
Kys7CkBAIC00NTY5LDcgKzQ1NjksNyBAQCBzdGF0aWMgaW5saW5lIGJvb2wgcGFyc2VBbHBoYVZh
bHVlKGNvbnN0CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLXN0YXRpYyBpbmxpbmUgYm9vbCBtaWdo
dEJlUkdCQShjb25zdCBVQ2hhciogY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQorc3RhdGlj
IGlubGluZSBib29sIG1pZ2h0QmVSR0JBKFN0cmluZ0l0ZXJhdG9yIGNoYXJhY3RlcnMsIHVuc2ln
bmVkIGxlbmd0aCkKIHsKICAgICBpZiAobGVuZ3RoIDwgNSkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwpAQCAtNDU4MCw3ICs0NTgwLDcgQEAgc3RhdGljIGlubGluZSBib29sIG1pZ2h0QmVSR0JBKGNv
bnN0IFVDaAogICAgICAgICAmJiAoY2hhcmFjdGVyc1szXSB8IDB4MjApID09ICdhJzsKIH0KIAot
c3RhdGljIGlubGluZSBib29sIG1pZ2h0QmVSR0IoY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMsIHVu
c2lnbmVkIGxlbmd0aCkKK3N0YXRpYyBpbmxpbmUgYm9vbCBtaWdodEJlUkdCKFN0cmluZ0l0ZXJh
dG9yIGNoYXJhY3RlcnMsIHVuc2lnbmVkIGxlbmd0aCkKIHsKICAgICBpZiAobGVuZ3RoIDwgNCkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNDU5Miw3ICs0NTkyLDcgQEAgc3RhdGljIGlubGlu
ZSBib29sIG1pZ2h0QmVSR0IoY29uc3QgVUNoYQogCiBib29sIENTU1BhcnNlcjo6cGFyc2VDb2xv
cihjb25zdCBTdHJpbmcgJm5hbWUsIFJHQkEzMiYgcmdiLCBib29sIHN0cmljdCkKIHsKLSAgICBj
b25zdCBVQ2hhciogY2hhcmFjdGVycyA9IG5hbWUuY2hhcmFjdGVycygpOworICAgIFN0cmluZ0l0
ZXJhdG9yIGNoYXJhY3RlcnMgPSBuYW1lLmNoYXJhY3RlcnMoKTsKICAgICB1bnNpZ25lZCBsZW5n
dGggPSBuYW1lLmxlbmd0aCgpOwogICAgIENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXMgZXhw
ZWN0ID0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19VTktOT1dOOwogCkBAIC00NjA4LDggKzQ2MDgs
OCBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VDb2xvcihjb25zdCBTdHJpbmcgCiAKICAgICAvLyBU
cnkgcmdiYSgpIHN5bnRheC4KICAgICBpZiAobWlnaHRCZVJHQkEoY2hhcmFjdGVycywgbGVuZ3Ro
KSkgewotICAgICAgICBjb25zdCBVQ2hhciogY3VycmVudCA9IGNoYXJhY3RlcnMgKyA1OwotICAg
ICAgICBjb25zdCBVQ2hhciogZW5kID0gY2hhcmFjdGVycyArIGxlbmd0aDsKKyAgICAgICAgU3Ry
aW5nSXRlcmF0b3IgY3VycmVudCA9IGNoYXJhY3RlcnMgKyA1OworICAgICAgICBTdHJpbmdJdGVy
YXRvciBlbmQgPSBjaGFyYWN0ZXJzICsgbGVuZ3RoOwogICAgICAgICBpbnQgcmVkOwogICAgICAg
ICBpbnQgZ3JlZW47CiAgICAgICAgIGludCBibHVlOwpAQCAtNDYzMSw4ICs0NjMxLDggQEAgYm9v
bCBDU1NQYXJzZXI6OnBhcnNlQ29sb3IoY29uc3QgU3RyaW5nIAogCiAgICAgLy8gVHJ5IHJnYigp
IHN5bnRheC4KICAgICBpZiAobWlnaHRCZVJHQihjaGFyYWN0ZXJzLCBsZW5ndGgpKSB7Ci0gICAg
ICAgIGNvbnN0IFVDaGFyKiBjdXJyZW50ID0gY2hhcmFjdGVycyArIDQ7Ci0gICAgICAgIGNvbnN0
IFVDaGFyKiBlbmQgPSBjaGFyYWN0ZXJzICsgbGVuZ3RoOworICAgICAgICBTdHJpbmdJdGVyYXRv
ciBjdXJyZW50ID0gY2hhcmFjdGVycyArIDQ7CisgICAgICAgIFN0cmluZ0l0ZXJhdG9yIGVuZCA9
IGNoYXJhY3RlcnMgKyBsZW5ndGg7CiAgICAgICAgIGludCByZWQ7CiAgICAgICAgIGludCBncmVl
bjsKICAgICAgICAgaW50IGJsdWU7CkBAIC02NDUxLDcgKzY0NTEsNyBAQCBpbnQgQ1NTUGFyc2Vy
OjpsZXgodm9pZCogeXlsdmFsV2l0aG91dFR5CiAgICAgcmV0dXJuIHRva2VuKCk7CiB9CiAKLXZv
aWQgQ1NTUGFyc2VyOjpyZWNoZWNrQXRLZXl3b3JkKGNvbnN0IFVDaGFyKiBzdHIsIGludCBsZW4p
Cit2b2lkIENTU1BhcnNlcjo6cmVjaGVja0F0S2V5d29yZChTdHJpbmdJdGVyYXRvciBzdHIsIGlu
dCBsZW4pCiB7CiAgICAgU3RyaW5nIHJ1bGVOYW1lKHN0ciwgbGVuKTsKICAgICBpZiAoZXF1YWxJ
Z25vcmluZ0Nhc2UocnVsZU5hbWUsICJAaW1wb3J0IikpCkBAIC03MDQ2LDcgKzcwNDYsNyBAQCB2
b2lkIENTU1BhcnNlcjo6bWFya1Byb3BlcnR5RW5kKGJvb2wgaXNJCiAgICAgcmVzZXRQcm9wZXJ0
eU1hcmtzKCk7CiB9CiAKLXN0YXRpYyBpbnQgY3NzUHJvcGVydHlJRChjb25zdCBVQ2hhciogcHJv
cGVydHlOYW1lLCB1bnNpZ25lZCBsZW5ndGgpCitzdGF0aWMgaW50IGNzc1Byb3BlcnR5SUQoU3Ry
aW5nSXRlcmF0b3IgcHJvcGVydHlOYW1lLCB1bnNpZ25lZCBsZW5ndGgpCiB7CiAgICAgaWYgKCFs
ZW5ndGgpCiAgICAgICAgIHJldHVybiAwOwpAQCAtNzEzMiw4ICs3MTMyLDggQEAgaW50IGNzc1Zh
bHVlS2V5d29yZElEKGNvbnN0IENTU1BhcnNlclN0cgogLy8gImlkZW50IiBmcm9tIHRoZSBDU1Mg
dG9rZW5pemVyLCBtaW51cyBiYWNrc2xhc2gtZXNjYXBlIHNlcXVlbmNlcwogc3RhdGljIGJvb2wg
aXNDU1NUb2tlbml6ZXJJZGVudGlmaWVyKGNvbnN0IFN0cmluZyYgc3RyaW5nKQogewotICAgIGNv
bnN0IFVDaGFyKiBwID0gc3RyaW5nLmNoYXJhY3RlcnMoKTsKLSAgICBjb25zdCBVQ2hhciogZW5k
ID0gcCArIHN0cmluZy5sZW5ndGgoKTsKKyAgICBTdHJpbmdJdGVyYXRvciBwID0gc3RyaW5nLmNo
YXJhY3RlcnMoKTsKKyAgICBTdHJpbmdJdGVyYXRvciBlbmQgPSBwICsgc3RyaW5nLmxlbmd0aCgp
OwogCiAgICAgLy8gLT8KICAgICBpZiAocCAhPSBlbmQgJiYgcFswXSA9PSAnLScpCkBAIC03MTU2
LDggKzcxNTYsOCBAQCBzdGF0aWMgYm9vbCBpc0NTU1Rva2VuaXplcklkZW50aWZpZXIoY29uCiAv
LyAidXJsIiBmcm9tIHRoZSBDU1MgdG9rZW5pemVyLCBtaW51cyBiYWNrc2xhc2gtZXNjYXBlIHNl
cXVlbmNlcwogc3RhdGljIGJvb2wgaXNDU1NUb2tlbml6ZXJVUkwoY29uc3QgU3RyaW5nJiBzdHJp
bmcpCiB7Ci0gICAgY29uc3QgVUNoYXIqIHAgPSBzdHJpbmcuY2hhcmFjdGVycygpOwotICAgIGNv
bnN0IFVDaGFyKiBlbmQgPSBwICsgc3RyaW5nLmxlbmd0aCgpOworICAgIFN0cmluZ0l0ZXJhdG9y
IHAgPSBzdHJpbmcuY2hhcmFjdGVycygpOworICAgIFN0cmluZ0l0ZXJhdG9yIGVuZCA9IHAgKyBz
dHJpbmcubGVuZ3RoKCk7CiAKICAgICBmb3IgKDsgcCAhPSBlbmQ7ICsrcCkgewogICAgICAgICBV
Q2hhciBjID0gcFswXTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmgJKHJldmlzaW9uIDkzMzg3
KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0y
OTMsNyArMjkzLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgIHByaXZhdGU6CiAgICAgICAg
IHZvaWQgc2V0U3R5bGVTaGVldChDU1NTdHlsZVNoZWV0Kik7CiAgICAgICAgIAotICAgICAgICB2
b2lkIHJlY2hlY2tBdEtleXdvcmQoY29uc3QgVUNoYXIqIHN0ciwgaW50IGxlbik7CisgICAgICAg
IHZvaWQgcmVjaGVja0F0S2V5d29yZChTdHJpbmdJdGVyYXRvciwgaW50IGxlbik7CiAKICAgICAg
ICAgdm9pZCBzZXR1cFBhcnNlcihjb25zdCBjaGFyKiBwcmVmaXgsIGNvbnN0IFN0cmluZyYsIGNv
bnN0IGNoYXIqIHN1ZmZpeCk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9EYXRhc2V0RE9N
U3RyaW5nTWFwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRGF0YXNldERP
TVN0cmluZ01hcC5jcHAJKHJldmlzaW9uIDkzMzg3KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0Rh
dGFzZXRET01TdHJpbmdNYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MCw3ICs0MCw3IEBAIHN0
YXRpYyBib29sIGlzVmFsaWRBdHRyaWJ1dGVOYW1lKGNvbnN0IFMKICAgICBpZiAoIW5hbWUuc3Rh
cnRzV2l0aCgiZGF0YS0iKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgY29uc3QgVUNo
YXIqIGNoYXJhY3RlcnMgPSBuYW1lLmNoYXJhY3RlcnMoKTsKKyAgICBTdHJpbmdJdGVyYXRvciBj
aGFyYWN0ZXJzID0gbmFtZS5jaGFyYWN0ZXJzKCk7CiAgICAgdW5zaWduZWQgbGVuZ3RoID0gbmFt
ZS5sZW5ndGgoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSA1OyBpIDwgbGVuZ3RoOyArK2kpIHsK
ICAgICAgICAgaWYgKGlzQVNDSUlVcHBlcihjaGFyYWN0ZXJzW2ldKSkKQEAgLTU0LDcgKzU0LDcg
QEAgc3RhdGljIFN0cmluZyBjb252ZXJ0QXR0cmlidXRlTmFtZVRvUHJvcAogewogICAgIFN0cmlu
Z0J1aWxkZXIgc3RyaW5nQnVpbGRlcjsKIAotICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzID0g
bmFtZS5jaGFyYWN0ZXJzKCk7CisgICAgU3RyaW5nSXRlcmF0b3IgY2hhcmFjdGVycyA9IG5hbWUu
Y2hhcmFjdGVycygpOwogICAgIHVuc2lnbmVkIGxlbmd0aCA9IG5hbWUubGVuZ3RoKCk7CiAgICAg
Zm9yICh1bnNpZ25lZCBpID0gNTsgaSA8IGxlbmd0aDsgKytpKSB7CiAgICAgICAgIFVDaGFyIGNo
YXJhY3RlciA9IGNoYXJhY3RlcnNbaV07CkBAIC03Nyw4ICs3Nyw4IEBAIHN0YXRpYyBib29sIHBy
b3BlcnR5TmFtZU1hdGNoZXNBdHRyaWJ1dGUKICAgICBpZiAoIWF0dHJpYnV0ZU5hbWUuc3RhcnRz
V2l0aCgiZGF0YS0iKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgY29uc3QgVUNoYXIq
IHByb3BlcnR5ID0gcHJvcGVydHlOYW1lLmNoYXJhY3RlcnMoKTsKLSAgICBjb25zdCBVQ2hhciog
YXR0cmlidXRlID0gYXR0cmlidXRlTmFtZS5jaGFyYWN0ZXJzKCk7CisgICAgU3RyaW5nSXRlcmF0
b3IgcHJvcGVydHkgPSBwcm9wZXJ0eU5hbWUuY2hhcmFjdGVycygpOworICAgIFN0cmluZ0l0ZXJh
dG9yIGF0dHJpYnV0ZSA9IGF0dHJpYnV0ZU5hbWUuY2hhcmFjdGVycygpOwogICAgIHVuc2lnbmVk
IHByb3BlcnR5TGVuZ3RoID0gcHJvcGVydHlOYW1lLmxlbmd0aCgpOwogICAgIHVuc2lnbmVkIGF0
dHJpYnV0ZUxlbmd0aCA9IGF0dHJpYnV0ZU5hbWUubGVuZ3RoKCk7CiAgICAKQEAgLTEwMiw3ICsx
MDIsNyBAQCBzdGF0aWMgYm9vbCBwcm9wZXJ0eU5hbWVNYXRjaGVzQXR0cmlidXRlCiAKIHN0YXRp
YyBib29sIGlzVmFsaWRQcm9wZXJ0eU5hbWUoY29uc3QgU3RyaW5nJiBuYW1lKQogewotICAgIGNv
bnN0IFVDaGFyKiBjaGFyYWN0ZXJzID0gbmFtZS5jaGFyYWN0ZXJzKCk7CisgICAgU3RyaW5nSXRl
cmF0b3IgY2hhcmFjdGVycyA9IG5hbWUuY2hhcmFjdGVycygpOwogICAgIHVuc2lnbmVkIGxlbmd0
aCA9IG5hbWUubGVuZ3RoKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsg
KytpKSB7CiAgICAgICAgIGlmIChjaGFyYWN0ZXJzW2ldID09ICctJyAmJiAoaSArIDEgPCBsZW5n
dGgpICYmIGlzQVNDSUlMb3dlcihjaGFyYWN0ZXJzW2kgKyAxXSkpCkBAIC0xMTYsNyArMTE2LDcg
QEAgc3RhdGljIFN0cmluZyBjb252ZXJ0UHJvcGVydHlOYW1lVG9BdHRyaQogICAgIFN0cmluZ0J1
aWxkZXIgYnVpbGRlcjsKICAgICBidWlsZGVyLmFwcGVuZCgiZGF0YS0iKTsKIAotICAgIGNvbnN0
IFVDaGFyKiBjaGFyYWN0ZXJzID0gbmFtZS5jaGFyYWN0ZXJzKCk7CisgICAgU3RyaW5nSXRlcmF0
b3IgY2hhcmFjdGVycyA9IG5hbWUuY2hhcmFjdGVycygpOwogICAgIHVuc2lnbmVkIGxlbmd0aCA9
IG5hbWUubGVuZ3RoKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbmd0aDsgKytp
KSB7CiAgICAgICAgIFVDaGFyIGNoYXJhY3RlciA9IGNoYXJhY3RlcnNbaV07CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2RvbS9Eb2N1bWVudC5jcHAJKHJldmlzaW9uIDkzMzg3KQorKysgU291cmNlL1dlYkNvcmUvZG9t
L0RvY3VtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIzOCw3ICsxMjM4LDcgQEAgUGFzc1Jl
ZlB0cjxSYW5nZT4gRG9jdW1lbnQ6OmNhcmV0UmFuZ2VGcgogc3RhdGljIGlubGluZSBTdHJpbmdX
aXRoRGlyZWN0aW9uIGNhbm9uaWNhbGl6ZWRUaXRsZShEb2N1bWVudCogZG9jdW1lbnQsIGNvbnN0
IFN0cmluZ1dpdGhEaXJlY3Rpb24mIHRpdGxlV2l0aERpcmVjdGlvbikKIHsKICAgICBjb25zdCBT
dHJpbmcmIHRpdGxlID0gdGl0bGVXaXRoRGlyZWN0aW9uLnN0cmluZygpOwotICAgIGNvbnN0IFVD
aGFyKiBjaGFyYWN0ZXJzID0gdGl0bGUuY2hhcmFjdGVycygpOworICAgIFN0cmluZ0l0ZXJhdG9y
IGNoYXJhY3RlcnMgPSB0aXRsZS5jaGFyYWN0ZXJzKCk7CiAgICAgdW5zaWduZWQgbGVuZ3RoID0g
dGl0bGUubGVuZ3RoKCk7CiAgICAgdW5zaWduZWQgaTsKIApAQCAtMzcwNiw3ICszNzA2LDcgQEAg
c3RhdGljIGJvb2wgaXNWYWxpZE5hbWVOb25BU0NJSShjb25zdCBVQwogICAgIHJldHVybiB0cnVl
OwogfQogCi1zdGF0aWMgaW5saW5lIGJvb2wgaXNWYWxpZE5hbWVBU0NJSShjb25zdCBVQ2hhciog
Y2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQorc3RhdGljIGlubGluZSBib29sIGlzVmFsaWRO
YW1lQVNDSUkoU3RyaW5nSXRlcmF0b3IgY2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQogewog
ICAgIFVDaGFyIGMgPSBjaGFyYWN0ZXJzWzBdOwogICAgIGlmICghKGlzQVNDSUlBbHBoYShjKSB8
fCBjID09ICc6JyB8fCBjID09ICdfJykpCkBAIC0zNzI3LDcgKzM3MjcsNyBAQCBib29sIERvY3Vt
ZW50Ojppc1ZhbGlkTmFtZShjb25zdCBTdHJpbmcmCiAgICAgaWYgKCFsZW5ndGgpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzID0gbmFtZS5jaGFy
YWN0ZXJzKCk7CisgICAgU3RyaW5nSXRlcmF0b3IgY2hhcmFjdGVycyA9IG5hbWUuY2hhcmFjdGVy
cygpOwogICAgIHJldHVybiBpc1ZhbGlkTmFtZUFTQ0lJKGNoYXJhY3RlcnMsIGxlbmd0aCkgfHwg
aXNWYWxpZE5hbWVOb25BU0NJSShjaGFyYWN0ZXJzLCBsZW5ndGgpOwogfQogCkBAIC0zNzQ0LDcg
KzM3NDQsNyBAQCBib29sIERvY3VtZW50OjpwYXJzZVF1YWxpZmllZE5hbWUoY29uc3QgCiAgICAg
Ym9vbCBzYXdDb2xvbiA9IGZhbHNlOwogICAgIGludCBjb2xvblBvcyA9IDA7CiAKLSAgICBjb25z
dCBVQ2hhciogcyA9IHF1YWxpZmllZE5hbWUuY2hhcmFjdGVycygpOworICAgIFN0cmluZ0l0ZXJh
dG9yIHMgPSBxdWFsaWZpZWROYW1lLmNoYXJhY3RlcnMoKTsKICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgbGVuZ3RoOykgewogICAgICAgICBVQ2hhcjMyIGM7CiAgICAgICAgIFUxNl9ORVhU
KHMsIGksIGxlbmd0aCwgYykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2RvbS9TcGFjZVNwbGl0U3Ry
aW5nLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vU3BhY2VTcGxpdFN0cmlu
Zy5jcHAJKHJldmlzaW9uIDkzMzg3KQorKysgU291cmNlL1dlYkNvcmUvZG9tL1NwYWNlU3BsaXRT
dHJpbmcuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSw3ICszMSw3IEBAIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAogc3RhdGljIGJvb2wgaGFzTm9uQVNDSUlPclVwcGVyKGNvbnN0IFN0cmluZyYgc3Ry
aW5nKQogewotICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzID0gc3RyaW5nLmNoYXJhY3RlcnMo
KTsKKyAgICBTdHJpbmdJdGVyYXRvciBjaGFyYWN0ZXJzID0gc3RyaW5nLmNoYXJhY3RlcnMoKTsK
ICAgICB1bnNpZ25lZCBsZW5ndGggPSBzdHJpbmcubGVuZ3RoKCk7CiAgICAgYm9vbCBoYXNVcHBl
ciA9IGZhbHNlOwogICAgIFVDaGFyIG9yZWQgPSAwOwpAQCAtNTEsNyArNTEsNyBAQCB2b2lkIFNw
YWNlU3BsaXRTdHJpbmdEYXRhOjpjcmVhdGVWZWN0b3IoCiAgICAgaWYgKG1fc2hvdWxkRm9sZENh
c2UgJiYgaGFzTm9uQVNDSUlPclVwcGVyKG1fc3RyaW5nKSkKICAgICAgICAgbV9zdHJpbmcgPSBt
X3N0cmluZy5mb2xkQ2FzZSgpOwogCi0gICAgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMgPSBtX3N0
cmluZy5jaGFyYWN0ZXJzKCk7CisgICAgU3RyaW5nSXRlcmF0b3IgY2hhcmFjdGVycyA9IG1fc3Ry
aW5nLmNoYXJhY3RlcnMoKTsKICAgICB1bnNpZ25lZCBsZW5ndGggPSBtX3N0cmluZy5sZW5ndGgo
KTsKICAgICB1bnNpZ25lZCBzdGFydCA9IDA7CiAgICAgd2hpbGUgKHRydWUpIHsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2RvbS9TdHlsZWRFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9kb20vU3R5bGVkRWxlbWVudC5jcHAJKHJldmlzaW9uIDkzMzg3KQorKysgU291cmNl
L1dlYkNvcmUvZG9tL1N0eWxlZEVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTQsNyAr
MjE0LDcgQEAgYm9vbCBTdHlsZWRFbGVtZW50OjptYXBUb0VudHJ5KGNvbnN0IFF1YQogCiB2b2lk
IFN0eWxlZEVsZW1lbnQ6OmNsYXNzQXR0cmlidXRlQ2hhbmdlZChjb25zdCBBdG9taWNTdHJpbmcm
IG5ld0NsYXNzU3RyaW5nKQogewotICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzID0gbmV3Q2xh
c3NTdHJpbmcuY2hhcmFjdGVycygpOworICAgIFN0cmluZ0l0ZXJhdG9yIGNoYXJhY3RlcnMgPSBu
ZXdDbGFzc1N0cmluZy5jaGFyYWN0ZXJzKCk7CiAgICAgdW5zaWduZWQgbGVuZ3RoID0gbmV3Q2xh
c3NTdHJpbmcubGVuZ3RoKCk7CiAgICAgdW5zaWduZWQgaTsKICAgICBmb3IgKGkgPSAwOyBpIDwg
bGVuZ3RoOyArK2kpIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRp
dENvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9z
aXRlRWRpdENvbW1hbmQuY3BwCShyZXZpc2lvbiA5MzM4NykKKysrIFNvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MjMsNyAr
NDIzLDcgQEAgdm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6c2V0Tm9kZUF0dHJpYgogc3RhdGlj
IGlubGluZSBib29sIGNvbnRhaW5zT25seVdoaXRlc3BhY2UoY29uc3QgU3RyaW5nJiB0ZXh0KQog
ewogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0ZXh0Lmxlbmd0aCgpOyArK2kpIHsKLSAg
ICAgICAgaWYgKCFpc1doaXRlc3BhY2UodGV4dC5jaGFyYWN0ZXJzKClbaV0pKQorICAgICAgICBp
ZiAoIWlzV2hpdGVzcGFjZSh0ZXh0W2ldKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICB9CiAgICAgCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1NtYXJ0UmVwbGFjZUlDVS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9TbWFydFJlcGxhY2VJQ1Uu
Y3BwCShyZXZpc2lvbiA5MzM4NykKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvU21hcnRSZXBs
YWNlSUNVLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzksNyArMzksNyBAQCBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKIHN0YXRpYyB2b2lkIGFkZEFsbENvZGVQb2ludHMoVVNldCogc21hcnRTZXQsIGNv
bnN0IFN0cmluZyYgc3RyaW5nKQogewotICAgIGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzID0gc3Ry
aW5nLmNoYXJhY3RlcnMoKTsKKyAgICBTdHJpbmdJdGVyYXRvciBjaGFyYWN0ZXJzID0gc3RyaW5n
LmNoYXJhY3RlcnMoKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHN0cmluZy5sZW5ndGgo
KTsgaSsrKQogICAgICAgICB1c2V0X2FkZChzbWFydFNldCwgY2hhcmFjdGVyc1tpXSk7CiB9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1RleHRJdGVyYXRvci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9UZXh0SXRlcmF0b3IuY3BwCShyZXZpc2lvbiA5MzM4
NykKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVGV4dEl0ZXJhdG9yLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtODEzLDcgKzgxMyw3IEBAIHN0YXRpYyBib29sIHNob3VsZEVtaXRFeHRyYU5ld2xp
bmVGb3JOb2QKIAogc3RhdGljIGludCBjb2xsYXBzZWRTcGFjZUxlbmd0aChSZW5kZXJUZXh0KiBy
ZW5kZXJlciwgaW50IHRleHRFbmQpCiB7Ci0gICAgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMgPSBy
ZW5kZXJlci0+dGV4dCgpLT5jaGFyYWN0ZXJzKCk7CisgICAgU3RyaW5nSXRlcmF0b3IgY2hhcmFj
dGVycyA9IHJlbmRlcmVyLT50ZXh0KCktPmNoYXJhY3RlcnMoKTsKICAgICBpbnQgbGVuZ3RoID0g
cmVuZGVyZXItPnRleHQoKS0+bGVuZ3RoKCk7CiAgICAgZm9yIChpbnQgaSA9IHRleHRFbmQ7IGkg
PCBsZW5ndGg7ICsraSkgewogICAgICAgICBpZiAoIXJlbmRlcmVyLT5zdHlsZSgpLT5pc0NvbGxh
cHNpYmxlV2hpdGVTcGFjZShjaGFyYWN0ZXJzW2ldKSkKQEAgLTE4NzYsNyArMTg3Niw3IEBAIHN0
YXRpYyBpbmxpbmUgYm9vbCBpc0NvbWJpbmluZ1ZvaWNlZFNvdW4KIAogc3RhdGljIGlubGluZSBi
b29sIGNvbnRhaW5zS2FuYUxldHRlcnMoY29uc3QgU3RyaW5nJiBwYXR0ZXJuKQogewotICAgIGNv
bnN0IFVDaGFyKiBjaGFyYWN0ZXJzID0gcGF0dGVybi5jaGFyYWN0ZXJzKCk7CisgICAgU3RyaW5n
SXRlcmF0b3IgY2hhcmFjdGVycyA9IHBhdHRlcm4uY2hhcmFjdGVycygpOwogICAgIHVuc2lnbmVk
IGxlbmd0aCA9IHBhdHRlcm4ubGVuZ3RoKCk7CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8
IGxlbmd0aDsgKytpKSB7CiAgICAgICAgIGlmIChpc0thbmFMZXR0ZXIoY2hhcmFjdGVyc1tpXSkp
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1R5cGluZ0NvbW1hbmQuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVHlwaW5nQ29tbWFuZC5jcHAJKHJldmlzaW9u
IDkzMzg3KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9UeXBpbmdDb21tYW5kLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTU2LDcgKzE1Niw3IEBAIHZvaWQgVHlwaW5nQ29tbWFuZDo6aW5zZXJ0
VGV4dChEb2N1bWVudCoKICAgICBBU1NFUlQoZnJhbWUpOwogCiAgICAgaWYgKCF0ZXh0LmlzRW1w
dHkoKSkKLSAgICAgICAgZG9jdW1lbnQtPmZyYW1lKCktPmVkaXRvcigpLT51cGRhdGVNYXJrZXJz
Rm9yV29yZHNBZmZlY3RlZEJ5RWRpdGluZyhpc1NwYWNlT3JOZXdsaW5lKHRleHQuY2hhcmFjdGVy
cygpWzBdKSk7CisgICAgICAgIGRvY3VtZW50LT5mcmFtZSgpLT5lZGl0b3IoKS0+dXBkYXRlTWFy
a2Vyc0ZvcldvcmRzQWZmZWN0ZWRCeUVkaXRpbmcoaXNTcGFjZU9yTmV3bGluZSh0ZXh0WzBdKSk7
CiAgICAgCiAgICAgaW5zZXJ0VGV4dChkb2N1bWVudCwgdGV4dCwgZnJhbWUtPnNlbGVjdGlvbigp
LT5zZWxlY3Rpb24oKSwgb3B0aW9ucywgY29tcG9zaXRpb24pOwogfQpJbmRleDogU291cmNlL1dl
YkNvcmUvaHRtbC9IVE1MRm9udEVsZW1lbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTEZvbnRFbGVtZW50LmNwcAkocmV2aXNpb24gOTMzODcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxGb250RWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUyLDgg
KzUyLDggQEAgc3RhdGljIGJvb2wgcGFyc2VGb250U2l6ZShjb25zdCBTdHJpbmcmIAogCiAgICAg
Ly8gU3RlcCAxCiAgICAgLy8gU3RlcCAyCi0gICAgY29uc3QgVUNoYXIqIHBvc2l0aW9uID0gaW5w
dXQuY2hhcmFjdGVycygpOwotICAgIGNvbnN0IFVDaGFyKiBlbmQgPSBwb3NpdGlvbiArIGlucHV0
Lmxlbmd0aCgpOworICAgIFN0cmluZ0l0ZXJhdG9yIHBvc2l0aW9uID0gaW5wdXQuY2hhcmFjdGVy
cygpOworICAgIFN0cmluZ0l0ZXJhdG9yIGVuZCA9IHBvc2l0aW9uICsgaW5wdXQubGVuZ3RoKCk7
CiAKICAgICAvLyBTdGVwIDMKICAgICB3aGlsZSAocG9zaXRpb24gPCBlbmQpIHsKSW5kZXg6IFNv
dXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxQYXJzZXJJZGlvbXMuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxQYXJzZXJJZGlvbXMuY3BwCShyZXZp
c2lvbiA5MzM4NykKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxQYXJzZXJJZGlv
bXMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSw3ICszNSw3IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogU3RyaW5nIHN0cmlwTGVhZGluZ0FuZFRyYWlsaW5nSFRNTFNwYWNlcyhjb25zdCBTdHJp
bmcmIHN0cmluZykKIHsKLSAgICBjb25zdCBVQ2hhciogY2hhcmFjdGVycyA9IHN0cmluZy5jaGFy
YWN0ZXJzKCk7CisgICAgU3RyaW5nSXRlcmF0b3IgY2hhcmFjdGVycyA9IHN0cmluZy5jaGFyYWN0
ZXJzKCk7CiAgICAgdW5zaWduZWQgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aCgpOwogCiAgICAgdW5z
aWduZWQgbnVtTGVhZGluZ1NwYWNlczsKQEAgLTE3NSw4ICsxNzUsOCBAQCBib29sIHBhcnNlSFRN
TEludGVnZXIoY29uc3QgU3RyaW5nJiBpbnB1CiB7CiAgICAgLy8gU3RlcCAxCiAgICAgLy8gU3Rl
cCAyCi0gICAgY29uc3QgVUNoYXIqIHBvc2l0aW9uID0gaW5wdXQuY2hhcmFjdGVycygpOwotICAg
IGNvbnN0IFVDaGFyKiBlbmQgPSBwb3NpdGlvbiArIGlucHV0Lmxlbmd0aCgpOworICAgIFN0cmlu
Z0l0ZXJhdG9yIHBvc2l0aW9uID0gaW5wdXQuY2hhcmFjdGVycygpOworICAgIFN0cmluZ0l0ZXJh
dG9yIGVuZCA9IHBvc2l0aW9uICsgaW5wdXQubGVuZ3RoKCk7CiAKICAgICAvLyBTdGVwIDMKICAg
ICBpbnQgc2lnbiA9IDE7CkBAIC0yMjUsOCArMjI1LDggQEAgYm9vbCBwYXJzZUhUTUxOb25OZWdh
dGl2ZUludGVnZXIoY29uc3QgUwogewogICAgIC8vIFN0ZXAgMQogICAgIC8vIFN0ZXAgMgotICAg
IGNvbnN0IFVDaGFyKiBwb3NpdGlvbiA9IGlucHV0LmNoYXJhY3RlcnMoKTsKLSAgICBjb25zdCBV
Q2hhciogZW5kID0gcG9zaXRpb24gKyBpbnB1dC5sZW5ndGgoKTsKKyAgICBTdHJpbmdJdGVyYXRv
ciBwb3NpdGlvbiA9IGlucHV0LmNoYXJhY3RlcnMoKTsKKyAgICBTdHJpbmdJdGVyYXRvciBlbmQg
PSBwb3NpdGlvbiArIGlucHV0Lmxlbmd0aCgpOwogCiAgICAgLy8gU3RlcCAzCiAgICAgd2hpbGUg
KHBvc2l0aW9uIDwgZW5kKSB7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yUGFnZUFnZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yUGFnZUFnZW50LmNwcAkocmV2aXNpb24gOTMzODcpCisrKyBTb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yUGFnZUFnZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQ2
LDcgKzQ0Niw3IEBAIHZvaWQgSW5zcGVjdG9yUGFnZUFnZW50OjpnZXRSZXNvdXJjZUNvbnQKIHN0
YXRpYyBTdHJpbmcgY3JlYXRlU2VhcmNoUmVnZXhTb3VyY2UoY29uc3QgU3RyaW5nJiB0ZXh0KQog
ewogICAgIFN0cmluZyByZXN1bHQ7Ci0gICAgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMgPSB0ZXh0
LmNoYXJhY3RlcnMoKTsKKyAgICBTdHJpbmdJdGVyYXRvciBjaGFyYWN0ZXJzID0gdGV4dC5jaGFy
YWN0ZXJzKCk7CiAgICAgU3RyaW5nIHNwZWNpYWxzKHJlZ2V4U3BlY2lhbENoYXJhY3RlcnMpOwog
CiAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRleHQubGVuZ3RoKCk7IGkrKykgewpJbmRl
eDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNw
cAkocmV2aXNpb24gOTMzODcpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9y
U3R5bGVTaGVldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxNyw3ICs1MTcsNyBAQCBOZXdMaW5l
QW5kV2hpdGVzcGFjZSYgSW5zcGVjdG9yU3R5bGU6Om5lCiAgICAgaW50IHByb3BlcnR5SW5kZXgg
PSAwOwogICAgIGJvb2wgaXNGdWxsUHJlZml4U2Nhbm5lZCA9IGZhbHNlOwogICAgIGJvb2wgbGlu
ZUZlZWRUZXJtaW5hdGVkID0gZmFsc2U7Ci0gICAgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMgPSB0
ZXh0LmNoYXJhY3RlcnMoKTsKKyAgICBTdHJpbmdJdGVyYXRvciBjaGFyYWN0ZXJzID0gdGV4dC5j
aGFyYWN0ZXJzKCk7CiAgICAgd2hpbGUgKHByb3BlcnR5SW5kZXggPCBwcm9wZXJ0eUNvdW50KSB7
CiAgICAgICAgIGNvbnN0IFdlYkNvcmU6OkNTU1Byb3BlcnR5U291cmNlRGF0YSYgY3VycmVudFBy
b3BlcnR5ID0gc291cmNlUHJvcGVydHlEYXRhLT5hdChwcm9wZXJ0eUluZGV4KyspOwogCkBAIC0x
MDQ2LDcgKzEwNDYsNyBAQCB2b2lkIEluc3BlY3RvclN0eWxlU2hlZXQ6OmZpeFVucGFyc2VkUHJv
CiAgICAgICAgIHJldHVybjsKIAogICAgIHVuc2lnbmVkIHN0eWxlU3RhcnQgPSBydWxlRGF0YS0+
c3R5bGVTb3VyY2VEYXRhLT5zdHlsZUJvZHlSYW5nZS5zdGFydDsKLSAgICBjb25zdCBVQ2hhciog
Y2hhcmFjdGVycyA9IHN0eWxlU2hlZXRUZXh0LmNoYXJhY3RlcnMoKTsKKyAgICBTdHJpbmdJdGVy
YXRvciBjaGFyYWN0ZXJzID0gc3R5bGVTaGVldFRleHQuY2hhcmFjdGVycygpOwogICAgIENTU1By
b3BlcnR5U291cmNlRGF0YSogbmV4dERhdGEgPSAmKHByb3BlcnR5RGF0YS5hdCgwKSk7CiAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7ICsraSkgewogICAgICAgICBDU1NQcm9wZXJ0
eVNvdXJjZURhdGEqIGN1cnJlbnREYXRhID0gbmV4dERhdGE7CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVUZXh0RWRpdG9yLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVUZXh0RWRpdG9yLmNwcAkocmV2
aXNpb24gOTMzODcpCisrKyBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVU
ZXh0RWRpdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzksNyArNzksNyBAQCB2b2lkIEluc3Bl
Y3RvclN0eWxlVGV4dEVkaXRvcjo6aW5zZXJ0UHJvCiAgICAgaWYgKGluc2VydExhc3QgJiYgIWlu
c2VydEZpcnN0SW5Tb3VyY2UpIHsKICAgICAgICAgcHJvcGVydHlTdGFydCA9IHN0eWxlQm9keUxl
bmd0aDsKICAgICAgICAgaWYgKHByb3BlcnR5U3RhcnQgJiYgdGV4dFRvU2V0Lmxlbmd0aCgpKSB7
Ci0gICAgICAgICAgICBjb25zdCBVQ2hhciogY2hhcmFjdGVycyA9IG1fc3R5bGVUZXh0LmNoYXJh
Y3RlcnMoKTsKKyAgICAgICAgICAgIFN0cmluZ0l0ZXJhdG9yIGNoYXJhY3RlcnMgPSBtX3N0eWxl
VGV4dC5jaGFyYWN0ZXJzKCk7CiAKICAgICAgICAgICAgIGxvbmcgY3VyUG9zID0gcHJvcGVydHlT
dGFydCAtIDE7IC8vIFRoZSBsYXN0IHBvc2l0aW9uIG9mIHN0eWxlIGRlY2xhcmF0aW9uLCBzaW5j
ZSBwcm9wZXJ0eVN0YXJ0IHBvaW50cyBwYXN0IG9uZS4KICAgICAgICAgICAgIHdoaWxlIChjdXJQ
b3MgJiYgaXNIVE1MU3BhY2UoY2hhcmFjdGVyc1tjdXJQb3NdKSkKQEAgLTIyNyw3ICsyMjcsNyBA
QCB2b2lkIEluc3BlY3RvclN0eWxlVGV4dEVkaXRvcjo6aW50ZXJuYWxSCiAgICAgY29uc3QgU291
cmNlUmFuZ2UmIHJhbmdlID0gcHJvcGVydHkuc291cmNlRGF0YS5yYW5nZTsKICAgICBsb25nIHJl
cGxhY2VSYW5nZVN0YXJ0ID0gcmFuZ2Uuc3RhcnQ7CiAgICAgbG9uZyByZXBsYWNlUmFuZ2VFbmQg
PSByYW5nZS5lbmQ7Ci0gICAgY29uc3QgVUNoYXIqIGNoYXJhY3RlcnMgPSBtX3N0eWxlVGV4dC5j
aGFyYWN0ZXJzKCk7CisgICAgU3RyaW5nSXRlcmF0b3IgY2hhcmFjdGVycyA9IG1fc3R5bGVUZXh0
LmNoYXJhY3RlcnMoKTsKICAgICBsb25nIG5ld1RleHRMZW5ndGggPSBuZXdUZXh0Lmxlbmd0aCgp
OwogICAgIFN0cmluZyBmaW5hbE5ld1RleHQgPSBuZXdUZXh0OwogCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9GaWxlU3lzdGVtLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9GaWxlU3lzdGVtLmNwcAkocmV2aXNpb24gOTMzODcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9GaWxlU3lzdGVtLmNwcAkod29ya2luZyBjb3B5KQpAQCAtODMsOCArODMs
OCBAQCBTdHJpbmcgZW5jb2RlRm9yRmlsZU5hbWUoY29uc3QgU3RyaW5nJiBpCiAgICAgVmVjdG9y
PFVDaGFyLCA1MTI+IGJ1ZmZlcihsZW5ndGggKiAzICsgMSk7CiAgICAgVUNoYXIqIHAgPSBidWZm
ZXIuZGF0YSgpOwogCi0gICAgY29uc3QgVUNoYXIqIHN0ciA9IGlucHV0U3RyLmNoYXJhY3RlcnMo
KTsKLSAgICBjb25zdCBVQ2hhciogc3RyRW5kID0gc3RyICsgbGVuZ3RoOworICAgIFN0cmluZ0l0
ZXJhdG9yIHN0ciA9IGlucHV0U3RyLmNoYXJhY3RlcnMoKTsKKyAgICBTdHJpbmdJdGVyYXRvciBz
dHJFbmQgPSBzdHIgKyBsZW5ndGg7CiAKICAgICB3aGlsZSAoc3RyIDwgc3RyRW5kKSB7CiAgICAg
ICAgIFVDaGFyIGMgPSAqc3RyKys7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9LVVJM
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9LVVJMLmNwcAkocmV2
aXNpb24gOTMzODcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9LVVJMLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMjYxLDcgKzI2MSw3IEBAIHN0YXRpYyBpbmxpbmUgaW50IGhleERpZ2l0VmFs
dWUoVUNoYXIgYykKIC8vIENvcGllcyB0aGUgc291cmNlIHRvIHRoZSBkZXN0aW5hdGlvbiwgYXNz
dW1pbmcgYWxsIHRoZSBzb3VyY2UgY2hhcmFjdGVycyBhcmUKIC8vIEFTQ0lJLiBUaGUgZGVzdGlu
YXRpb24gYnVmZmVyIG11c3QgYmUgbGFyZ2UgZW5vdWdoLiBOdWxsIGNoYXJhY3RlcnMgYXJlIGFs
bG93ZWQKIC8vIGluIHRoZSBzb3VyY2Ugc3RyaW5nLCBhbmQgbm8gYXR0ZW1wdCBpcyBtYWRlIHRv
IG51bGwtdGVybWluYXRlIHRoZSByZXN1bHQuCi1zdGF0aWMgdm9pZCBjb3B5QVNDSUkoY29uc3Qg
VUNoYXIqIHNyYywgaW50IGxlbmd0aCwgY2hhciogZGVzdCkKK3N0YXRpYyB2b2lkIGNvcHlBU0NJ
SShTdHJpbmdJdGVyYXRvciBzcmMsIGludCBsZW5ndGgsIGNoYXIqIGRlc3QpCiB7CiAgICAgZm9y
IChpbnQgaSA9IDA7IGkgPCBsZW5ndGg7IGkrKykKICAgICAgICAgZGVzdFtpXSA9IHN0YXRpY19j
YXN0PGNoYXI+KHNyY1tpXSk7CkBAIC0yNzksNyArMjc5LDcgQEAgc3RhdGljIHZvaWQgYXBwZW5k
QVNDSUkoY29uc3QgU3RyaW5nJiBiYQogLy8gUmV0dXJucyB0aGUgaW5kZXggb2YgdGhlIGZpcnN0
IGluZGV4IGluIHN0cmluZyB8c3wgb2YgYW55IG9mIHRoZSBjaGFyYWN0ZXJzCiAvLyBpbiB8dG9G
aW5kfC4gfHRvRmluZHwgc2hvdWxkIGJlIGEgbnVsbC10ZXJtaW5hdGVkIHN0cmluZywgYWxsIGNo
YXJhY3RlcnMgdXAKIC8vIHRvIHRoZSBudWxsIHdpbGwgYmUgc2VhcmNoZWQuIFJldHVybnMgaW50
IGlmIG5vdCBmb3VuZC4KLXN0YXRpYyBpbnQgZmluZEZpcnN0T2YoY29uc3QgVUNoYXIqIHMsIGlu
dCBzTGVuLCBpbnQgc3RhcnRQb3MsIGNvbnN0IGNoYXIqIHRvRmluZCkKK3N0YXRpYyBpbnQgZmlu
ZEZpcnN0T2YoU3RyaW5nSXRlcmF0b3IgcywgaW50IHNMZW4sIGludCBzdGFydFBvcywgY29uc3Qg
Y2hhciogdG9GaW5kKQogewogICAgIGZvciAoaW50IGkgPSBzdGFydFBvczsgaSA8IHNMZW47IGkr
KykgewogICAgICAgICBjb25zdCBjaGFyKiBjdXIgPSB0b0ZpbmQ7CkBAIC00OTQsNyArNDk0LDcg
QEAgdm9pZCBLVVJMOjppbml0KGNvbnN0IEtVUkwmIGJhc2UsIGNvbnN0IAogCiAgICAgICAgICAg
ICAgICAgLy8gZmlyc3QgY29weSBldmVyeXRoaW5nIGJlZm9yZSB0aGUgcGF0aCBmcm9tIHRoZSBi
YXNlCiAgICAgICAgICAgICAgICAgdW5zaWduZWQgYmFzZUxlbmd0aCA9IGJhc2UubV9zdHJpbmcu
bGVuZ3RoKCk7Ci0gICAgICAgICAgICAgICAgY29uc3QgVUNoYXIqIGJhc2VDaGFyYWN0ZXJzID0g
YmFzZS5tX3N0cmluZy5jaGFyYWN0ZXJzKCk7CisgICAgICAgICAgICAgICAgU3RyaW5nSXRlcmF0
b3IgYmFzZUNoYXJhY3RlcnMgPSBiYXNlLm1fc3RyaW5nLmNoYXJhY3RlcnMoKTsKICAgICAgICAg
ICAgICAgICBDaGFyQnVmZmVyIGJhc2VTdHJpbmdCdWZmZXIoYmFzZUxlbmd0aCk7CiAgICAgICAg
ICAgICAgICAgY29weUFTQ0lJKGJhc2VDaGFyYWN0ZXJzLCBiYXNlTGVuZ3RoLCBiYXNlU3RyaW5n
QnVmZmVyLmRhdGEoKSk7CiAgICAgICAgICAgICAgICAgY29uc3QgY2hhciogYmFzZVN0cmluZyA9
IGJhc2VTdHJpbmdCdWZmZXIuZGF0YSgpOwpAQCAtNjEyLDcgKzYxMiw3IEBAIHVuc2lnbmVkIHNo
b3J0IEtVUkw6OnBvcnQoKSBjb25zdAogICAgIGlmIChtX2hvc3RFbmQgPT0gbV9wb3J0RW5kIHx8
IG1faG9zdEVuZCA9PSBtX3BvcnRFbmQgLSAxKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIGNv
bnN0IFVDaGFyKiBzdHJpbmdEYXRhID0gbV9zdHJpbmcuY2hhcmFjdGVycygpOworICAgIFN0cmlu
Z0l0ZXJhdG9yIHN0cmluZ0RhdGEgPSBtX3N0cmluZy5jaGFyYWN0ZXJzKCk7CiAgICAgYm9vbCBv
ayA9IGZhbHNlOwogICAgIHVuc2lnbmVkIG51bWJlciA9IGNoYXJhY3RlcnNUb1VJbnRTdHJpY3Qo
c3RyaW5nRGF0YSArIG1faG9zdEVuZCArIDEsIG1fcG9ydEVuZCAtIG1faG9zdEVuZCAtIDEsICZv
ayk7CiAgICAgaWYgKCFvayB8fCBudW1iZXIgPiBtYXhpbXVtVmFsaWRQb3J0TnVtYmVyKQpAQCAt
NjQ4LDIxICs2NDgsMjEgQEAgYm9vbCBLVVJMOjpoYXNGcmFnbWVudElkZW50aWZpZXIoKSBjb25z
dAogCiB2b2lkIEtVUkw6OmNvcHlQYXJzZWRRdWVyeVRvKFBhcnNlZFVSTFBhcmFtZXRlcnMmIHBh
cmFtZXRlcnMpIGNvbnN0CiB7Ci0gICAgY29uc3QgVUNoYXIqIHBvcyA9IG1fc3RyaW5nLmNoYXJh
Y3RlcnMoKSArIG1fcGF0aEVuZCArIDE7Ci0gICAgY29uc3QgVUNoYXIqIGVuZCA9IG1fc3RyaW5n
LmNoYXJhY3RlcnMoKSArIG1fcXVlcnlFbmQ7CisgICAgU3RyaW5nSXRlcmF0b3IgcG9zID0gbV9z
dHJpbmcuY2hhcmFjdGVycygpICsgbV9wYXRoRW5kICsgMTsKKyAgICBTdHJpbmdJdGVyYXRvciBl
bmQgPSBtX3N0cmluZy5jaGFyYWN0ZXJzKCkgKyBtX3F1ZXJ5RW5kOwogICAgIHdoaWxlIChwb3Mg
PCBlbmQpIHsKLSAgICAgICAgY29uc3QgVUNoYXIqIHBhcmFtZXRlclN0YXJ0ID0gcG9zOworICAg
ICAgICBTdHJpbmdJdGVyYXRvciBwYXJhbWV0ZXJTdGFydCA9IHBvczsKICAgICAgICAgd2hpbGUg
KHBvcyA8IGVuZCAmJiAqcG9zICE9ICcmJykKICAgICAgICAgICAgICsrcG9zOwotICAgICAgICBj
b25zdCBVQ2hhciogcGFyYW1ldGVyRW5kID0gcG9zOworICAgICAgICBTdHJpbmdJdGVyYXRvciBw
YXJhbWV0ZXJFbmQgPSBwb3M7CiAgICAgICAgIGlmIChwb3MgPCBlbmQpIHsKICAgICAgICAgICAg
IEFTU0VSVCgqcG9zID09ICcmJyk7CiAgICAgICAgICAgICArK3BvczsKICAgICAgICAgfQogICAg
ICAgICBpZiAocGFyYW1ldGVyU3RhcnQgPT0gcGFyYW1ldGVyRW5kKQogICAgICAgICAgICAgY29u
dGludWU7Ci0gICAgICAgIGNvbnN0IFVDaGFyKiBuYW1lU3RhcnQgPSBwYXJhbWV0ZXJTdGFydDsK
LSAgICAgICAgY29uc3QgVUNoYXIqIGVxdWFsU2lnbiA9IHBhcmFtZXRlclN0YXJ0OworICAgICAg
ICBTdHJpbmdJdGVyYXRvciBuYW1lU3RhcnQgPSBwYXJhbWV0ZXJTdGFydDsKKyAgICAgICAgU3Ry
aW5nSXRlcmF0b3IgZXF1YWxTaWduID0gcGFyYW1ldGVyU3RhcnQ7CiAgICAgICAgIHdoaWxlIChl
cXVhbFNpZ24gPCBwYXJhbWV0ZXJFbmQgJiYgKmVxdWFsU2lnbiAhPSAnPScpCiAgICAgICAgICAg
ICArK2VxdWFsU2lnbjsKICAgICAgICAgaWYgKGVxdWFsU2lnbiA9PSBuYW1lU3RhcnQpCkBAIC05
NjUsNyArOTY1LDcgQEAgU3RyaW5nIGRlY29kZVVSTEVzY2FwZVNlcXVlbmNlcyhjb25zdCBTdAog
ICAgICAgICB1bnNpZ25lZCBydW5MZW5ndGggPSAoZW5jb2RlZFJ1bkVuZCAtIGVuY29kZWRSdW5Q
b3NpdGlvbikgLyAzOwogICAgICAgICBidWZmZXIucmVzaXplKHJ1bkxlbmd0aCk7CiAgICAgICAg
IGNoYXIqIHAgPSBidWZmZXIuZGF0YSgpOwotICAgICAgICBjb25zdCBVQ2hhciogcSA9IHN0ci5j
aGFyYWN0ZXJzKCkgKyBlbmNvZGVkUnVuUG9zaXRpb247CisgICAgICAgIFN0cmluZ0l0ZXJhdG9y
IHEgPSBzdHIuY2hhcmFjdGVycygpICsgZW5jb2RlZFJ1blBvc2l0aW9uOwogICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgcnVuTGVuZ3RoOyArK2kpIHsKICAgICAgICAgICAgICpwKysg
PSAoaGV4RGlnaXRWYWx1ZShxWzFdKSA8PCA0KSB8IGhleERpZ2l0VmFsdWUocVsyXSk7CiAgICAg
ICAgICAgICBxICs9IDM7CkBAIC0xNTM4LDcgKzE1MzgsNyBAQCBTdHJpbmcgZW5jb2RlV2l0aFVS
TEVzY2FwZVNlcXVlbmNlcyhjb25zCiAKIC8vIEFwcGVuZHMgdGhlIHB1bnljb2RlZCBob3N0bmFt
ZSBpZGVudGlmaWVkIGJ5IHRoZSBnaXZlbiBzdHJpbmcgYW5kIGxlbmd0aCB0bwogLy8gdGhlIG91
dHB1dCBidWZmZXIuIFRoZSByZXN1bHQgd2lsbCBub3QgYmUgbnVsbCB0ZXJtaW5hdGVkLgotc3Rh
dGljIHZvaWQgYXBwZW5kRW5jb2RlZEhvc3RuYW1lKFVDaGFyQnVmZmVyJiBidWZmZXIsIGNvbnN0
IFVDaGFyKiBzdHIsIHVuc2lnbmVkIHN0ckxlbikKK3N0YXRpYyB2b2lkIGFwcGVuZEVuY29kZWRI
b3N0bmFtZShVQ2hhckJ1ZmZlciYgYnVmZmVyLCBTdHJpbmdJdGVyYXRvciBzdHIsIHVuc2lnbmVk
IHN0ckxlbikKIHsKICAgICAvLyBOZWVkcyB0byBiZSBiaWcgZW5vdWdoIHRvIGhvbGQgYW4gSURO
LWVuY29kZWQgbmFtZS4KICAgICAvLyBGb3IgaG9zdCBuYW1lcyBiaWdnZXIgdGhhbiB0aGlzLCB3
ZSB3b24ndCBkbyBJRE4gZW5jb2RpbmcsIHdoaWNoIGlzIGFsbW9zdCBjZXJ0YWlubHkgT0suCkBA
IC0xNTc1LDcgKzE1NzUsNyBAQCBzdGF0aWMgdm9pZCBhcHBlbmRFbmNvZGVkSG9zdG5hbWUoVUNo
YXJCCiAjZW5kaWYKIH0KIAotc3RhdGljIHZvaWQgZmluZEhvc3RuYW1lc0luTWFpbFRvVVJMKGNv
bnN0IFVDaGFyKiBzdHIsIGludCBzdHJMZW4sIFZlY3RvcjxwYWlyPGludCwgaW50PiA+JiBuYW1l
UmFuZ2VzKQorc3RhdGljIHZvaWQgZmluZEhvc3RuYW1lc0luTWFpbFRvVVJMKFN0cmluZ0l0ZXJh
dG9yIHN0ciwgaW50IHN0ckxlbiwgVmVjdG9yPHBhaXI8aW50LCBpbnQ+ID4mIG5hbWVSYW5nZXMp
CiB7CiAgICAgLy8gSW4gYSBtYWlsdG86IFVSTCwgaG9zdCBuYW1lcyBjb21lIGFmdGVyIGEgJ0An
IGNoYXJhY3RlciBhbmQgZW5kIHdpdGggYSAnPicgb3IgJywnIG9yICc/JyBvciBlbmQgb2Ygc3Ry
aW5nIGNoYXJhY3Rlci4KICAgICAvLyBTa2lwIHF1b3RlZCBzdHJpbmdzIHNvIHRoYXQgY2hhcmFj
dGVycyBpbiB0aGVtIGRvbid0IGNvbmZ1c2UgdXMuCkBAIC0xNjM4LDcgKzE2MzgsNyBAQCBzdGF0
aWMgdm9pZCBmaW5kSG9zdG5hbWVzSW5NYWlsVG9VUkwoY29uCiAgICAgfQogfQogCi1zdGF0aWMg
Ym9vbCBmaW5kSG9zdG5hbWVJbkhpZXJhcmNoaWNhbFVSTChjb25zdCBVQ2hhciogc3RyLCBpbnQg
c3RyTGVuLCBpbnQmIHN0YXJ0T2Zmc2V0LCBpbnQmIGVuZE9mZnNldCkKK3N0YXRpYyBib29sIGZp
bmRIb3N0bmFtZUluSGllcmFyY2hpY2FsVVJMKFN0cmluZ0l0ZXJhdG9yIHN0ciwgaW50IHN0ckxl
biwgaW50JiBzdGFydE9mZnNldCwgaW50JiBlbmRPZmZzZXQpCiB7CiAgICAgLy8gRmluZCB0aGUg
aG9zdCBuYW1lIGluIGEgaGllcmFyY2hpY2FsIFVSTC4KICAgICAvLyBJdCBjb21lcyBhZnRlciBh
ICI6Ly8iIHNlcXVlbmNlLCB3aXRoIHNjaGVtZSBjaGFyYWN0ZXJzIHByZWNlZGluZywgYW5kCkBA
IC0xOTgxLDcgKzE5ODEsNyBAQCBTdHJpbmcgbWltZVR5cGVGcm9tRGF0YVVSTChjb25zdCBTdHJp
bmcmCiBib29sIHByb3RvY29sSXNJbkhUVFBGYW1pbHkoY29uc3QgU3RyaW5nJiB1cmwpCiB7CiAg
ICAgdW5zaWduZWQgbGVuZ3RoID0gdXJsLmxlbmd0aCgpOwotICAgIGNvbnN0IFVDaGFyKiBjaGFy
YWN0ZXJzID0gdXJsLmNoYXJhY3RlcnMoKTsKKyAgICBTdHJpbmdJdGVyYXRvciBjaGFyYWN0ZXJz
ID0gdXJsLmNoYXJhY3RlcnMoKTsKICAgICByZXR1cm4gbGVuZ3RoID4gNAogICAgICAgICAmJiBp
c0xldHRlck1hdGNoSWdub3JpbmdDYXNlKGNoYXJhY3RlcnNbMF0sICdoJykKICAgICAgICAgJiYg
aXNMZXR0ZXJNYXRjaElnbm9yaW5nQ2FzZShjaGFyYWN0ZXJzWzFdLCAndCcpCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9MZW5ndGguY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL0xlbmd0aC5jcHAJKHJldmlzaW9uIDkzMzg3KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vTGVuZ3RoLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsNyArMzUsNyBAQCB1
c2luZyBuYW1lc3BhY2UgV1RGOwogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBMZW5n
dGggcGFyc2VMZW5ndGgoY29uc3QgVUNoYXIqIGRhdGEsIHVuc2lnbmVkIGxlbmd0aCkKK3N0YXRp
YyBMZW5ndGggcGFyc2VMZW5ndGgoU3RyaW5nSXRlcmF0b3IgZGF0YSwgdW5zaWduZWQgbGVuZ3Ro
KQogewogICAgIGlmIChsZW5ndGggPT0gMCkKICAgICAgICAgcmV0dXJuIExlbmd0aCgxLCBSZWxh
dGl2ZSk7CkBAIC03Niw3ICs3Niw3IEBAIHN0YXRpYyBMZW5ndGggcGFyc2VMZW5ndGgoY29uc3Qg
VUNoYXIqIGQKICAgICByZXR1cm4gTGVuZ3RoKDAsIFJlbGF0aXZlKTsKIH0KIAotc3RhdGljIGlu
dCBjb3VudENoYXJhY3Rlcihjb25zdCBVQ2hhciogZGF0YSwgdW5zaWduZWQgbGVuZ3RoLCBVQ2hh
ciBjaGFyYWN0ZXIpCitzdGF0aWMgaW50IGNvdW50Q2hhcmFjdGVyKFN0cmluZ0l0ZXJhdG9yIGRh
dGEsIHVuc2lnbmVkIGxlbmd0aCwgVUNoYXIgY2hhcmFjdGVyKQogewogICAgIGludCBjb3VudCA9
IDA7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzdGF0aWNfY2FzdDxpbnQ+KGxlbmd0aCk7ICsr
aSkKQEAgLTg3LDcgKzg3LDcgQEAgc3RhdGljIGludCBjb3VudENoYXJhY3Rlcihjb25zdCBVQ2hh
ciogZAogUGFzc093bkFycmF5UHRyPExlbmd0aD4gbmV3Q29vcmRzQXJyYXkoY29uc3QgU3RyaW5n
JiBzdHJpbmcsIGludCYgbGVuKQogewogICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0cmluZy5sZW5n
dGgoKTsKLSAgICBjb25zdCBVQ2hhciogZGF0YSA9IHN0cmluZy5jaGFyYWN0ZXJzKCk7CisgICAg
U3RyaW5nSXRlcmF0b3IgZGF0YSA9IHN0cmluZy5jaGFyYWN0ZXJzKCk7CiAgICAgU3RyaW5nQnVm
ZmVyIHNwYWNpZmllZChsZW5ndGgpOwogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBsZW5n
dGg7IGkrKykgewogICAgICAgICBVQ2hhciBjYyA9IGRhdGFbaV07CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcmVuZGVyaW5nL1JlbmRlclRleHQuY3BwCShyZXZpc2lvbiA5MzM4NykKKysrIFNvdXJjZS9X
ZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTgsNyAr
NTgsNyBAQCBzdGF0aWMgdm9pZCBtYWtlQ2FwaXRhbGl6ZWQoU3RyaW5nKiBzdHJpCiAgICAgICAg
IHJldHVybjsKIAogICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0cmluZy0+bGVuZ3RoKCk7Ci0gICAg
Y29uc3QgVUNoYXIqIGNoYXJhY3RlcnMgPSBzdHJpbmctPmNoYXJhY3RlcnMoKTsKKyAgICBTdHJp
bmdJdGVyYXRvciBjaGFyYWN0ZXJzID0gc3RyaW5nLT5jaGFyYWN0ZXJzKCk7CiAKICAgICBpZiAo
bGVuZ3RoID49IG51bWVyaWNfbGltaXRzPHVuc2lnbmVkPjo6bWF4KCkpCiAgICAgICAgIENSQVNI
KCk7CkBAIC04NjksNyArODY5LDcgQEAgdm9pZCBSZW5kZXJUZXh0Ojpjb21wdXRlUHJlZmVycmVk
TG9naWNhbAogICAgIGNvbnN0IEZvbnQmIGYgPSBzdHlsZSgpLT5mb250KCk7IC8vIEZJWE1FOiBU
aGlzIGlnbm9yZXMgZmlyc3QtbGluZS4KICAgICBmbG9hdCB3b3JkU3BhY2luZyA9IHN0eWxlKCkt
PndvcmRTcGFjaW5nKCk7CiAgICAgaW50IGxlbiA9IHRleHRMZW5ndGgoKTsKLSAgICBjb25zdCBV
Q2hhciogdHh0ID0gY2hhcmFjdGVycygpOworICAgIFN0cmluZ0l0ZXJhdG9yIHR4dCA9IGNoYXJh
Y3RlcnMoKTsKICAgICBMYXp5TGluZUJyZWFrSXRlcmF0b3IgYnJlYWtJdGVyYXRvcih0eHQsIGxl
biwgc3R5bGUoKS0+bG9jYWxlKCkpOwogICAgIGJvb2wgbmVlZHNXb3JkU3BhY2luZyA9IGZhbHNl
OwogICAgIGJvb2wgaWdub3JpbmdTcGFjZXMgPSBmYWxzZTsKQEAgLTEwNDgsNyArMTA0OCw3IEBA
IHZvaWQgUmVuZGVyVGV4dDo6Y29tcHV0ZVByZWZlcnJlZExvZ2ljYWwKIGJvb2wgUmVuZGVyVGV4
dDo6aXNBbGxDb2xsYXBzaWJsZVdoaXRlc3BhY2UoKQogewogICAgIGludCBsZW5ndGggPSB0ZXh0
TGVuZ3RoKCk7Ci0gICAgY29uc3QgVUNoYXIqIHRleHQgPSBjaGFyYWN0ZXJzKCk7CisgICAgU3Ry
aW5nSXRlcmF0b3IgdGV4dCA9IGNoYXJhY3RlcnMoKTsKICAgICBmb3IgKGludCBpID0gMDsgaSA8
IGxlbmd0aDsgaSsrKSB7CiAgICAgICAgIGlmICghc3R5bGUoKS0+aXNDb2xsYXBzaWJsZVdoaXRl
U3BhY2UodGV4dFtpXSkpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGV4dC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3JlbmRlcmluZy9SZW5kZXJUZXh0LmgJKHJldmlzaW9uIDkzMzg3KQorKysgU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlclRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtNjUsNyArNjUs
NyBAQCBwdWJsaWM6CiAKICAgICB2aXJ0dWFsIFZpc2libGVQb3NpdGlvbiBwb3NpdGlvbkZvclBv
aW50KGNvbnN0IExheW91dFBvaW50Jik7CiAKLSAgICBjb25zdCBVQ2hhciogY2hhcmFjdGVycygp
IGNvbnN0IHsgcmV0dXJuIG1fdGV4dC5jaGFyYWN0ZXJzKCk7IH0KKyAgICBTdHJpbmdJdGVyYXRv
ciBjaGFyYWN0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV90ZXh0LmNoYXJhY3RlcnMoKTsgfQogICAg
IHVuc2lnbmVkIHRleHRMZW5ndGgoKSBjb25zdCB7IHJldHVybiBtX3RleHQubGVuZ3RoKCk7IH0g
Ly8gbm9uIHZpcnR1YWwgaW1wbGVtZW50YXRpb24gb2YgbGVuZ3RoKCkKICAgICB2b2lkIHBvc2l0
aW9uTGluZUJveChJbmxpbmVCb3gqKTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvd2Vic29ja2V0
cy9XZWJTb2NrZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3dlYnNvY2tldHMv
V2ViU29ja2V0LmNwcAkocmV2aXNpb24gOTMzODcpCisrKyBTb3VyY2UvV2ViQ29yZS93ZWJzb2Nr
ZXRzL1dlYlNvY2tldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg2LDcgKzg2LDcgQEAgc3RhdGlj
IGJvb2wgaXNWYWxpZFByb3RvY29sU3RyaW5nSGl4aWU3NgogICAgICAgICByZXR1cm4gdHJ1ZTsK
ICAgICBpZiAocHJvdG9jb2wuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAg
Y29uc3QgVUNoYXIqIGNoYXJhY3RlcnMgPSBwcm90b2NvbC5jaGFyYWN0ZXJzKCk7CisgICAgU3Ry
aW5nSXRlcmF0b3IgY2hhcmFjdGVycyA9IHByb3RvY29sLmNoYXJhY3RlcnMoKTsKICAgICBmb3Ig
KHNpemVfdCBpID0gMDsgaSA8IHByb3RvY29sLmxlbmd0aCgpOyBpKyspIHsKICAgICAgICAgaWYg
KGNoYXJhY3RlcnNbaV0gPCAweDIwIHx8IGNoYXJhY3RlcnNbaV0gPiAweDdFKQogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>104588</attachid>
            <date>2011-08-19 16:28:57 -0700</date>
            <delta_ts>2011-08-19 16:57:31 -0700</delta_ts>
            <desc>Example of replacing checks in operator[] with ASSERTS</desc>
            <filename>bug-66286-20110819192855.patch</filename>
            <type>text/plain</type>
            <size>22581</size>
            <attacher name="Annie Sullivan">sullivan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogOTMzMTkKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IDk0
YzI1MzhjNWEzOTc2NmY3Y2JmNzRmMDhjMDY4ZTIxNThkMzJjNzIuLmUzNDBkMTAzMTc1MmNhNjZm
NDE0NDNmZTNkZTM2YmI1YzYxMDVmMjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDE1IEBACisyMDExLTA4LTE5ICBBbm5pZSBTdWxsaXZhbiAgPHN1bGxpdmFuQGNocm9taXVt
Lm9yZz4KKworICAgICAgICBVc2UgU3RyaW5nIFtdIG9wZXJhdG9yIGluc3RlYWQgb2YgaW5kZXhp
bmcgaW50byBTdHJpbmc6OmNoYXJhY3RlcnMoKSBkaXJlY3RseQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjYyODYKKworICAgICAgICBDaGFuZ2VzIHJh
bmdlIGNoZWNrcyBpbiBTdHJpbmcgW10gb3BlcmF0b3IgdG8gQVNTRVJUcy4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHd0Zi90ZXh0L1dURlN0cmlu
Zy5oOgorICAgICAgICAoV1RGOjpTdHJpbmc6Om9wZXJhdG9yW10pOgorCiAyMDExLTA4LTE4ICBG
aWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgW2pzZnVuZnV6el0gREZH
IHNwZWN1bGF0aXZlIEpJVCBkb2VzIGRpdmlkZS1ieS16ZXJvIGNoZWNrcyBpbmNvcnJlY3RseQpk
aWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi90ZXh0L1dURlN0cmluZy5oIGIv
U291cmNlL0phdmFTY3JpcHRDb3JlL3d0Zi90ZXh0L1dURlN0cmluZy5oCmluZGV4IGZhOGNkY2Qy
YmI0MmQ3OGU5M2RiZWM2ZWQ5ZDg5Mjk2NTMzMTExMGUuLmMzZDI4NmZkOGVjNmI3ZDEzNTFjZjQ2
MzBmMTg4MjZhYzdjZTg1MDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS93dGYv
dGV4dC9XVEZTdHJpbmcuaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvd3RmL3RleHQvV1RG
U3RyaW5nLmgKQEAgLTE0NSw4ICsxNDUsOCBAQCBwdWJsaWM6CiAKICAgICBVQ2hhciBvcGVyYXRv
cltdKHVuc2lnbmVkIGluZGV4KSBjb25zdAogICAgIHsKLSAgICAgICAgaWYgKCFtX2ltcGwgfHwg
aW5kZXggPj0gbV9pbXBsLT5sZW5ndGgoKSkKLSAgICAgICAgICAgIHJldHVybiAwOworICAgICAg
ICBBU1NFUlQobV9pbXBsKTsKKyAgICAgICAgQVNTRVJUKGluZGV4IDwgbV9pbXBsLT5sZW5ndGgo
KSk7CiAgICAgICAgIHJldHVybiBtX2ltcGwtPmNoYXJhY3RlcnMoKVtpbmRleF07CiAgICAgfQog
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cKaW5kZXggZjlmMTUyNzFhNWE2YjMyOWExNjk4ZDBmMDViOTk0ODg1NzZhOGU3NC4u
ZGQ4YjU5OWRjNDY1ZTdiZDY5M2E3ZjhhODVmMTkzZjZmMWVjYjBlOCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDUyIEBACisyMDExLTA4LTE5ICBBbm5pZSBTdWxsaXZhbiAgPHN1bGxpdmFuQGNocm9t
aXVtLm9yZz4KKworICAgICAgICBVc2UgU3RyaW5nIFtdIG9wZXJhdG9yIGluc3RlYWQgb2YgaW5k
ZXhpbmcgaW50byBTdHJpbmc6OmNoYXJhY3RlcnMoKSBkaXJlY3RseQorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjYyODYKKworICAgICAgICBSZW1vdmVz
IG91dC1vZi1yYW5nZSB1c2FnZXMgb2YgU3RyaW5nIFtdIG9wZXJhdG9yLgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0czsgYmVoYXZp
b3Igc2hvdWxkIGJlIHRoZSBzYW1lIGFzIGJlZm9yZS4KKworICAgICAgICAqIGNzcy9DU1NDb21w
dXRlZFN0eWxlRGVjbGFyYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTQ29tcHV0ZWRT
dHlsZURlY2xhcmF0aW9uOjpDU1NDb21wdXRlZFN0eWxlRGVjbGFyYXRpb24pOgorICAgICAgICAq
IGRvbS9Eb2N1bWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEb2N1bWVudDo6cHJvY2Vzc0Fy
Z3VtZW50cyk6CisgICAgICAgICogZG9tL1Bvc2l0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlBvc2l0aW9uOjpsZWFkaW5nV2hpdGVzcGFjZVBvc2l0aW9uKToKKyAgICAgICAgKiBkb20vU3R5
bGVkRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZUNvbG9yU3RyaW5nV2l0aENy
YXp5TGVnYWN5UnVsZXMpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVkRWxlbWVudDo6YWRkQ1NT
Q29sb3IpOgorICAgICAgICAqIGVkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQ6OnJlYmFsYW5jZVdoaXRlc3BhY2VB
dCk6CisgICAgICAgICogZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OmV4ZWN1dGVGb3JtYXRCbG9jayk6CisgICAgICAgICogaHRtbC9IVE1MQW5jaG9yRWxlbWVu
dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZVBvcnRGcm9tU3RyaW5nUG9zaXRpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTEFuY2hvckVsZW1lbnQ6OnNldEhhc2gpOgorICAgICAgICAo
V2ViQ29yZTo6SFRNTEFuY2hvckVsZW1lbnQ6OnNldEhvc3RuYW1lKToKKyAgICAgICAgKFdlYkNv
cmU6OkhUTUxBbmNob3JFbGVtZW50OjpzZXRQYXRobmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpI
VE1MQW5jaG9yRWxlbWVudDo6c2V0U2VhcmNoKToKKyAgICAgICAgKiBodG1sL0hUTUxJbWFnZUVs
ZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRNTEltYWdlRWxlbWVudDo6cGFyc2VNYXBw
ZWRBdHRyaWJ1dGUpOgorICAgICAgICAqIGh0bWwvSFRNTE1hcEVsZW1lbnQuY3BwOgorICAgICAg
ICAoV2ViQ29yZTo6SFRNTE1hcEVsZW1lbnQ6OnBhcnNlTWFwcGVkQXR0cmlidXRlKToKKyAgICAg
ICAgKiBodG1sL3BhcnNlci9IVE1MUGFyc2VySWRpb21zLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OnBhcnNlVG9Eb3VibGVGb3JOdW1iZXJUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlVG9E
b3VibGVGb3JOdW1iZXJUeXBlV2l0aERlY2ltYWxQbGFjZXMpOgorICAgICAgICAqIGluc3BlY3Rv
ci9JbnNwZWN0b3JTdHlsZVRleHRFZGl0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yU3R5bGVUZXh0RWRpdG9yOjppbnNlcnRQcm9wZXJ0eSk6CisgICAgICAgICogcGFnZS9Mb2Nh
dGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpMb2NhdGlvbjo6c2V0SGFzaCk6CisgICAgICAg
ICogcGFnZS9XaW5kb3dGZWF0dXJlcy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXaW5kb3dGZWF0
dXJlczo6V2luZG93RmVhdHVyZXMpOgorICAgICAgICAqIHBsYXRmb3JtL0tVUkwuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6cHJvdG9jb2xJcyk6CisgICAgICAgICogcGxhdGZvcm0vbmV0d29yay9I
VFRQUGFyc2Vycy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZUhUVFBSZWZyZXNoKToKKyAg
ICAgICAgKFdlYkNvcmU6OmZpbmRDaGFyc2V0SW5NZWRpYVR5cGUpOgorCiAyMDExLTA4LTE4ICBB
bmRlcnMgQ2FybHNzb24gIDxhbmRlcnNjYUBhcHBsZS5jb20+CiAKICAgICAgICAgRml4IGNsYW5n
IGxpYmMrKyBDKysweCBidWlsZApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvY3NzL0NTU0Nv
bXB1dGVkU3R5bGVEZWNsYXJhdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ29tcHV0
ZWRTdHlsZURlY2xhcmF0aW9uLmNwcAppbmRleCA5NzFlNTk3YTMwMGVkMzFhMzAyNmMxZTc3ZjNi
MDMyMDZmYjg0OWE2Li5mZDhiOGJlZTU5ODJkNWVmMTdlNzljY2ZjODU5NTI4OTdjZTg1YWI2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9u
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9jc3MvQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9u
LmNwcApAQCAtNTg1LDcgKzU4NSw5IEBAIENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbjo6Q1NT
Q29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uKFBhc3NSZWZQdHI8Tm9kZT4gbiwgYm9vCiAgICAgOiBt
X25vZGUobikKICAgICAsIG1fYWxsb3dWaXNpdGVkU3R5bGUoYWxsb3dWaXNpdGVkU3R5bGUpCiB7
Ci0gICAgdW5zaWduZWQgbmFtZVdpdGhvdXRDb2xvbnNTdGFydCA9IHBzZXVkb0VsZW1lbnROYW1l
WzBdID09ICc6JyA/IChwc2V1ZG9FbGVtZW50TmFtZVsxXSA9PSAnOicgPyAyIDogMSkgOiAwOwor
ICAgIHVuc2lnbmVkIG5hbWVXaXRob3V0Q29sb25zU3RhcnQgPSAwOworICAgIGlmICghcHNldWRv
RWxlbWVudE5hbWUuaXNFbXB0eSgpKQorICAgICAgICBuYW1lV2l0aG91dENvbG9uc1N0YXJ0ID0g
cHNldWRvRWxlbWVudE5hbWVbMF0gPT0gJzonID8gKHBzZXVkb0VsZW1lbnROYW1lWzFdID09ICc6
JyA/IDIgOiAxKSA6IDA7CiAgICAgbV9wc2V1ZG9FbGVtZW50U3BlY2lmaWVyID0gQ1NTU2VsZWN0
b3I6OnBzZXVkb0lkKENTU1NlbGVjdG9yOjpwYXJzZVBzZXVkb1R5cGUoCiAgICAgICAgIEF0b21p
Y1N0cmluZyhwc2V1ZG9FbGVtZW50TmFtZS5zdWJzdHJpbmcobmFtZVdpdGhvdXRDb2xvbnNTdGFy
dCkpKSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwIGIv
U291cmNlL1dlYkNvcmUvZG9tL0RvY3VtZW50LmNwcAppbmRleCAxNTBjMGZjZWM0ZDdiMTUyM2Y0
YWVmZDdmYWY5N2Y5ZjVjNWI5NzIzLi40NWJlOTcwYWMwMDFkODYzMzIyMTE2YmVhMmY0NzZmZjZi
M2I4YzhhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vRG9jdW1lbnQuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL2RvbS9Eb2N1bWVudC5jcHAKQEAgLTI1OTAsMjcgKzI1OTAsMjcgQEAg
dm9pZCBEb2N1bWVudDo6cHJvY2Vzc0FyZ3VtZW50cyhjb25zdCBTdHJpbmcmIGZlYXR1cmVzLCB2
b2lkKiBkYXRhLCBBcmd1bWVudHNDYWwKICAgICAgICAga2V5QmVnaW4gPSBpOwogCiAgICAgICAg
IC8vIHNraXAgdG8gZmlyc3Qgc2VwYXJhdG9yCi0gICAgICAgIHdoaWxlICghaXNTZXBhcmF0b3Io
YnVmZmVyW2ldKSkKKyAgICAgICAgd2hpbGUgKGkgPCBsZW5ndGggJiYgIWlzU2VwYXJhdG9yKGJ1
ZmZlcltpXSkpCiAgICAgICAgICAgICBpKys7CiAgICAgICAgIGtleUVuZCA9IGk7CiAKICAgICAg
ICAgLy8gc2tpcCB0byBmaXJzdCAnPScsIGJ1dCBkb24ndCBza2lwIHBhc3QgYSAnLCcgb3IgdGhl
IGVuZCBvZiB0aGUgc3RyaW5nCi0gICAgICAgIHdoaWxlIChidWZmZXJbaV0gIT0gJz0nKSB7Ci0g
ICAgICAgICAgICBpZiAoYnVmZmVyW2ldID09ICcsJyB8fCBpID49IGxlbmd0aCkKKyAgICAgICAg
d2hpbGUgKGkgPCBsZW5ndGggJiYgYnVmZmVyW2ldICE9ICc9JykgeworICAgICAgICAgICAgaWYg
KGJ1ZmZlcltpXSA9PSAnLCcpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBp
Kys7CiAgICAgICAgIH0KIAogICAgICAgICAvLyBza2lwIHRvIGZpcnN0IG5vbi1zZXBhcmF0b3Is
IGJ1dCBkb24ndCBza2lwIHBhc3QgYSAnLCcgb3IgdGhlIGVuZCBvZiB0aGUgc3RyaW5nCi0gICAg
ICAgIHdoaWxlIChpc1NlcGFyYXRvcihidWZmZXJbaV0pKSB7Ci0gICAgICAgICAgICBpZiAoYnVm
ZmVyW2ldID09ICcsJyB8fCBpID49IGxlbmd0aCkKKyAgICAgICAgd2hpbGUgKGkgPCBsZW5ndGgg
JiYgaXNTZXBhcmF0b3IoYnVmZmVyW2ldKSkgeworICAgICAgICAgICAgaWYgKGJ1ZmZlcltpXSA9
PSAnLCcpCiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICBpKys7CiAgICAgICAg
IH0KICAgICAgICAgdmFsdWVCZWdpbiA9IGk7CiAKICAgICAgICAgLy8gc2tpcCB0byBmaXJzdCBz
ZXBhcmF0b3IKLSAgICAgICAgd2hpbGUgKCFpc1NlcGFyYXRvcihidWZmZXJbaV0pKQorICAgICAg
ICB3aGlsZSAoaSA8IGxlbmd0aCAmJiAhaXNTZXBhcmF0b3IoYnVmZmVyW2ldKSkKICAgICAgICAg
ICAgIGkrKzsKICAgICAgICAgdmFsdWVFbmQgPSBpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9kb20vUG9zaXRpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1Bvc2l0aW9uLmNwcApp
bmRleCA2ZDNkMTU1N2I5YTljMzMwMDA4Yzc1Yjk1YmI5Nzc0ZDJmMDM0ZTk0Li5mMzIzMjVlNzA1
NDgzZTk5OGJlOGQ5Zjk0NmVlZWVmZmQwMDI1YjdlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vUG9zaXRpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9Qb3NpdGlvbi5jcHAK
QEAgLTEwMzAsNyArMTAzMCw3IEBAIFBvc2l0aW9uIFBvc2l0aW9uOjpsZWFkaW5nV2hpdGVzcGFj
ZVBvc2l0aW9uKEVBZmZpbml0eSBhZmZpbml0eSwgYm9vbCBjb25zaWRlck5vCiAgICAgUG9zaXRp
b24gcHJldiA9IHByZXZpb3VzQ2hhcmFjdGVyUG9zaXRpb24oYWZmaW5pdHkpOwogICAgIGlmIChw
cmV2ICE9ICp0aGlzICYmIHByZXYuZGVwcmVjYXRlZE5vZGUoKS0+aW5TYW1lQ29udGFpbmluZ0Js
b2NrRmxvd0VsZW1lbnQoZGVwcmVjYXRlZE5vZGUoKSkgJiYgcHJldi5kZXByZWNhdGVkTm9kZSgp
LT5pc1RleHROb2RlKCkpIHsKICAgICAgICAgU3RyaW5nIHN0cmluZyA9IHN0YXRpY19jYXN0PFRl
eHQgKj4ocHJldi5kZXByZWNhdGVkTm9kZSgpKS0+ZGF0YSgpOwotICAgICAgICBVQ2hhciBjID0g
c3RyaW5nW3ByZXYuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKV07CisgICAgICAgIFVDaGFyIGMg
PSBzdGF0aWNfY2FzdDx1bnNpZ25lZD4ocHJldi5kZXByZWNhdGVkRWRpdGluZ09mZnNldCgpKSA8
IHN0cmluZy5sZW5ndGgoKSA/IHN0cmluZ1twcmV2LmRlcHJlY2F0ZWRFZGl0aW5nT2Zmc2V0KCld
IDogMDsKICAgICAgICAgaWYgKGNvbnNpZGVyTm9uQ29sbGFwc2libGVXaGl0ZXNwYWNlID8gKGlz
U3BhY2VPck5ld2xpbmUoYykgfHwgYyA9PSBub0JyZWFrU3BhY2UpIDogaXNDb2xsYXBzaWJsZVdo
aXRlc3BhY2UoYykpCiAgICAgICAgICAgICBpZiAoaXNFZGl0YWJsZVBvc2l0aW9uKHByZXYpKQog
ICAgICAgICAgICAgICAgIHJldHVybiBwcmV2OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
ZG9tL1N0eWxlZEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvZG9tL1N0eWxlZEVsZW1lbnQu
Y3BwCmluZGV4IDA4MDI4YWJmOGIxMDAxMDYwZTkzMTJhOTZmOWRjNTdiODI0NTAzODguLjYxZGU5
MDc3MmZlNTllMDA0YzEzNzU2NjdlNWQxNjZiODBkZmIxMzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2RvbS9TdHlsZWRFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vU3R5
bGVkRWxlbWVudC5jcHAKQEAgLTMyNyw3ICszMjcsNyBAQCBzdGF0aWMgU3RyaW5nIHBhcnNlQ29s
b3JTdHJpbmdXaXRoQ3JhenlMZWdhY3lSdWxlcyhjb25zdCBTdHJpbmcmIGNvbG9yU3RyaW5nKQog
ICAgIAogICAgIHNpemVfdCBpID0gMDsKICAgICAvLyBTa2lwIGEgbGVhZGluZyAjLgotICAgIGlm
IChjb2xvclN0cmluZ1swXSA9PSAnIycpCisgICAgaWYgKCFjb2xvclN0cmluZy5pc0VtcHR5KCkg
JiYgY29sb3JTdHJpbmdbMF0gPT0gJyMnKQogICAgICAgICBpID0gMTsKICAgICAKICAgICAvLyBH
cmFiIHRoZSBmaXJzdCAxMjggY2hhcmFjdGVycywgcmVwbGFjaW5nIG5vbi1oZXggY2hhcmFjdGVy
cyB3aXRoIDAuCkBAIC0zOTUsNyArMzk1LDcgQEAgdm9pZCBTdHlsZWRFbGVtZW50OjphZGRDU1ND
b2xvcihBdHRyaWJ1dGUqIGF0dHJpYnV0ZSwgaW50IGlkLCBjb25zdCBTdHJpbmcmIGF0dHIKICAg
ICB9CiAKICAgICAvLyBJZiB0aGUgc3RyaW5nIGlzIGEgMyBvciA2LWRpZ2l0IGhleCBjb2xvciwg
dXNlIHRoYXQgY29sb3IuCi0gICAgaWYgKGNvbG9yWzBdID09ICcjJyAmJiAoY29sb3IubGVuZ3Ro
KCkgPT0gNCB8fCBjb2xvci5sZW5ndGgoKSA9PSA3KSAmJiBhdHRyaWJ1dGUtPmRlY2woKS0+c2V0
UHJvcGVydHkoaWQsIGNvbG9yLCBmYWxzZSkpCisgICAgaWYgKCFjb2xvci5pc0VtcHR5KCkgJiYg
Y29sb3JbMF0gPT0gJyMnICYmIChjb2xvci5sZW5ndGgoKSA9PSA0IHx8IGNvbG9yLmxlbmd0aCgp
ID09IDcpICYmIGF0dHJpYnV0ZS0+ZGVjbCgpLT5zZXRQcm9wZXJ0eShpZCwgY29sb3IsIGZhbHNl
KSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgYXR0cmlidXRlLT5kZWNsKCktPnNldFByb3BlcnR5
KGlkLCBwYXJzZUNvbG9yU3RyaW5nV2l0aENyYXp5TGVnYWN5UnVsZXMoY29sb3IpLCBmYWxzZSk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5k
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCmlu
ZGV4IDhiMDM5YWQyZGY4MDU2YzlhODU3YzhlNmJjYTcwYWVmZjk2MjhjM2UuLmFkN2RkN2IwNGZi
Zjk3NTQ5MjlhZTE2N2MwMWM5MGVmYTE4M2Y3MDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3BwCkBAIC00NjIsNyArNDYyLDcgQEAgdm9pZCBD
b21wb3NpdGVFZGl0Q29tbWFuZDo6cmViYWxhbmNlV2hpdGVzcGFjZUF0KGNvbnN0IFBvc2l0aW9u
JiBwb3NpdGlvbikKICAgICAvLyBJZiB0aGUgcmViYWxhbmNlIGlzIGZvciB0aGUgc2luZ2xlIG9m
ZnNldCwgYW5kIG5laXRoZXIgdGV4dFtvZmZzZXRdIG5vciB0ZXh0W29mZnNldCAtIDFdIGFyZSBz
b21lIGZvcm0gb2Ygd2hpdGVzcGFjZSwgZG8gbm90aGluZy4KICAgICBpbnQgb2Zmc2V0ID0gcG9z
aXRpb24uZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKTsKICAgICBTdHJpbmcgdGV4dCA9IHN0YXRp
Y19jYXN0PFRleHQqPihub2RlKS0+ZGF0YSgpOwotICAgIGlmICghaXNXaGl0ZXNwYWNlKHRleHRb
b2Zmc2V0XSkpIHsKKyAgICBpZiAoc3RhdGljX2Nhc3Q8dW5zaWduZWQ+KG9mZnNldCkgPj0gdGV4
dC5sZW5ndGgoKSB8fCAhaXNXaGl0ZXNwYWNlKHRleHRbb2Zmc2V0XSkpIHsKICAgICAgICAgb2Zm
c2V0LS07CiAgICAgICAgIGlmIChvZmZzZXQgPCAwIHx8ICFpc1doaXRlc3BhY2UodGV4dFtvZmZz
ZXRdKSkKICAgICAgICAgICAgIHJldHVybjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNv
bW1hbmQuY3BwCmluZGV4IGQ5NTc0MTM4NDJiNTk0YWZmYzJkNjY3YzhmNThlZjlkNTBkMzJiZjQu
LjJlYzRkMjlhZTRmNmRiNmM0YWZjZWE3MmJlMjVkNTA2YTdjM2M2Y2YgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9FZGl0b3JDb21tYW5kLmNwcApAQCAtNDMwLDcgKzQzMCw3IEBAIHN0YXRpYyBi
b29sIGV4ZWN1dGVGb3JlQ29sb3IoRnJhbWUqIGZyYW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRT
b3VyY2Ugc291cmNlLCBjCiBzdGF0aWMgYm9vbCBleGVjdXRlRm9ybWF0QmxvY2soRnJhbWUqIGZy
YW1lLCBFdmVudCosIEVkaXRvckNvbW1hbmRTb3VyY2UsIGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7
CiAgICAgU3RyaW5nIHRhZ05hbWUgPSB2YWx1ZS5sb3dlcigpOwotICAgIGlmICh0YWdOYW1lWzBd
ID09ICc8JyAmJiB0YWdOYW1lW3RhZ05hbWUubGVuZ3RoKCkgLSAxXSA9PSAnPicpCisgICAgaWYg
KCF0YWdOYW1lLmlzRW1wdHkoKSAmJiB0YWdOYW1lWzBdID09ICc8JyAmJiB0YWdOYW1lW3RhZ05h
bWUubGVuZ3RoKCkgLSAxXSA9PSAnPicpCiAgICAgICAgIHRhZ05hbWUgPSB0YWdOYW1lLnN1YnN0
cmluZygxLCB0YWdOYW1lLmxlbmd0aCgpIC0gMik7CiAKICAgICBFeGNlcHRpb25Db2RlIGVjOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQW5jaG9yRWxlbWVudC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBbmNob3JFbGVtZW50LmNwcAppbmRleCBlMGMyNDQ5ZjBm
ZjBhMjhkMzBiNmM2MmYwYmRiM2I4MDk0YTIzZTJiLi4xZmVlZDlkYmU2MGIzOGY2ZWQ0ZTE0YjA0
ODlkNzAyNDc0NmYyYTlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBbmNo
b3JFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBbmNob3JFbGVtZW50
LmNwcApAQCAtNjYsNyArNjYsNyBAQCBQYXNzUmVmUHRyPEhUTUxBbmNob3JFbGVtZW50PiBIVE1M
QW5jaG9yRWxlbWVudDo6Y3JlYXRlKGNvbnN0IFF1YWxpZmllZE5hbWUmIHRhZwogc3RhdGljIHVu
c2lnbmVkIHBhcnNlUG9ydEZyb21TdHJpbmdQb3NpdGlvbihjb25zdCBTdHJpbmcmIHZhbHVlLCB1
bnNpZ25lZCBwb3J0U3RhcnQsIHVuc2lnbmVkJiBwb3J0RW5kKQogewogICAgIHBvcnRFbmQgPSBw
b3J0U3RhcnQ7Ci0gICAgd2hpbGUgKGlzQVNDSUlEaWdpdCh2YWx1ZVtwb3J0RW5kXSkpCisgICAg
d2hpbGUgKHBvcnRFbmQgPCB2YWx1ZS5sZW5ndGgoKSAmJiBpc0FTQ0lJRGlnaXQodmFsdWVbcG9y
dEVuZF0pKQogICAgICAgICArK3BvcnRFbmQ7CiAgICAgcmV0dXJuIHZhbHVlLnN1YnN0cmluZyhw
b3J0U3RhcnQsIHBvcnRFbmQgLSBwb3J0U3RhcnQpLnRvVUludCgpOwogfQpAQCAtMzA4LDcgKzMw
OCw3IEBAIFN0cmluZyBIVE1MQW5jaG9yRWxlbWVudDo6aGFzaCgpIGNvbnN0CiB2b2lkIEhUTUxB
bmNob3JFbGVtZW50OjpzZXRIYXNoKGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7CiAgICAgS1VSTCB1
cmwgPSBocmVmKCk7Ci0gICAgaWYgKHZhbHVlWzBdID09ICcjJykKKyAgICBpZiAoIXZhbHVlLmlz
RW1wdHkoKSAmJiB2YWx1ZVswXSA9PSAnIycpCiAgICAgICAgIHVybC5zZXRGcmFnbWVudElkZW50
aWZpZXIodmFsdWUuc3Vic3RyaW5nKDEpKTsKICAgICBlbHNlCiAgICAgICAgIHVybC5zZXRGcmFn
bWVudElkZW50aWZpZXIodmFsdWUpOwpAQCAtMzY4LDcgKzM2OCw3IEBAIHZvaWQgSFRNTEFuY2hv
ckVsZW1lbnQ6OnNldEhvc3RuYW1lKGNvbnN0IFN0cmluZyYgdmFsdWUpCiAgICAgLy8gUmVtb3Zl
IGFsbCBsZWFkaW5nIFUrMDAyRiBTT0xJRFVTICgiLyIpIGNoYXJhY3RlcnMuCiAgICAgdW5zaWdu
ZWQgaSA9IDA7CiAgICAgdW5zaWduZWQgaG9zdExlbmd0aCA9IHZhbHVlLmxlbmd0aCgpOwotICAg
IHdoaWxlICh2YWx1ZVtpXSA9PSAnLycpCisgICAgd2hpbGUgKGkgPCBob3N0TGVuZ3RoICYmIHZh
bHVlW2ldID09ICcvJykKICAgICAgICAgaSsrOwogCiAgICAgaWYgKGkgPT0gaG9zdExlbmd0aCkK
QEAgLTM5Myw3ICszOTMsNyBAQCB2b2lkIEhUTUxBbmNob3JFbGVtZW50OjpzZXRQYXRobmFtZShj
b25zdCBTdHJpbmcmIHZhbHVlKQogICAgIGlmICghdXJsLmNhblNldFBhdGhuYW1lKCkpCiAgICAg
ICAgIHJldHVybjsKIAotICAgIGlmICh2YWx1ZVswXSA9PSAnLycpCisgICAgaWYgKCF2YWx1ZS5p
c0VtcHR5KCkgJiYgdmFsdWVbMF0gPT0gJy8nKQogICAgICAgICB1cmwuc2V0UGF0aCh2YWx1ZSk7
CiAgICAgZWxzZQogICAgICAgICB1cmwuc2V0UGF0aCgiLyIgKyB2YWx1ZSk7CkBAIC00NTgsNyAr
NDU4LDcgQEAgU3RyaW5nIEhUTUxBbmNob3JFbGVtZW50OjpnZXRQYXJhbWV0ZXIoY29uc3QgU3Ry
aW5nJiBuYW1lKSBjb25zdAogdm9pZCBIVE1MQW5jaG9yRWxlbWVudDo6c2V0U2VhcmNoKGNvbnN0
IFN0cmluZyYgdmFsdWUpCiB7CiAgICAgS1VSTCB1cmwgPSBocmVmKCk7Ci0gICAgU3RyaW5nIG5l
d1NlYXJjaCA9ICh2YWx1ZVswXSA9PSAnPycpID8gdmFsdWUuc3Vic3RyaW5nKDEpIDogdmFsdWU7
CisgICAgU3RyaW5nIG5ld1NlYXJjaCA9ICghdmFsdWUuaXNFbXB0eSgpICYmIHZhbHVlWzBdID09
ICc/JykgPyB2YWx1ZS5zdWJzdHJpbmcoMSkgOiB2YWx1ZTsKICAgICAvLyBNYWtlIHN1cmUgdGhh
dCAnIycgaW4gdGhlIHF1ZXJ5IGRvZXMgbm90IGxlYWsgdG8gdGhlIGhhc2guCiAgICAgdXJsLnNl
dFF1ZXJ5KG5ld1NlYXJjaC5yZXBsYWNlKCcjJywgIiUyMyIpKTsKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTEltYWdlRWxlbWVudC5jcHAKaW5kZXggYTkxN2VjMDBiOWFhYTVhZGM0NmJiNTAxYjVm
MmJmZjI4ODFmZTg0My4uNTBhNzA4N2I5Mjg5YmJiZWJjMTFiZjdmYzc2ZTdiM2ZiN2Y0MDdmNiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MSW1hZ2VFbGVtZW50LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxJbWFnZUVsZW1lbnQuY3BwCkBAIC0xMjgsNyArMTI4
LDcgQEAgdm9pZCBIVE1MSW1hZ2VFbGVtZW50OjpwYXJzZU1hcHBlZEF0dHJpYnV0ZShBdHRyaWJ1
dGUqIGF0dHIpCiAgICAgZWxzZSBpZiAoYXR0ck5hbWUgPT0gdmFsaWduQXR0cikKICAgICAgICAg
YWRkQ1NTUHJvcGVydHkoYXR0ciwgQ1NTUHJvcGVydHlWZXJ0aWNhbEFsaWduLCBhdHRyLT52YWx1
ZSgpKTsKICAgICBlbHNlIGlmIChhdHRyTmFtZSA9PSB1c2VtYXBBdHRyKSB7Ci0gICAgICAgIGlm
IChhdHRyLT52YWx1ZSgpLnN0cmluZygpWzBdID09ICcjJykKKyAgICAgICAgaWYgKCFhdHRyLT52
YWx1ZSgpLnN0cmluZygpLmlzRW1wdHkoKSAmJiBhdHRyLT52YWx1ZSgpLnN0cmluZygpWzBdID09
ICcjJykKICAgICAgICAgICAgIHVzZW1hcCA9IGF0dHItPnZhbHVlKCk7CiAgICAgICAgIGVsc2UK
ICAgICAgICAgICAgIHVzZW1hcCA9IGRvY3VtZW50KCktPmNvbXBsZXRlVVJMKHN0cmlwTGVhZGlu
Z0FuZFRyYWlsaW5nSFRNTFNwYWNlcyhhdHRyLT52YWx1ZSgpKSkuc3RyaW5nKCk7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNYXBFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTE1hcEVsZW1lbnQuY3BwCmluZGV4IGU5NDRkYWRkNDYyNjUyY2U2NzgwYjAw
MTY1MmZhZWQ4NTA5NDUwNmMuLjU5NmI3N2JiYTk0NTc0OWYwNDNmYTAxMGYwMTIzMTZkNGY0OTE2
Y2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1hcEVsZW1lbnQuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTE1hcEVsZW1lbnQuY3BwCkBAIC0xMTQsNyArMTE0
LDcgQEAgdm9pZCBIVE1MTWFwRWxlbWVudDo6cGFyc2VNYXBwZWRBdHRyaWJ1dGUoQXR0cmlidXRl
KiBhdHRyaWJ1dGUpCiAgICAgICAgIGlmIChpbkRvY3VtZW50KCkpCiAgICAgICAgICAgICB0cmVl
U2NvcGUoKS0+cmVtb3ZlSW1hZ2VNYXAodGhpcyk7CiAgICAgICAgIFN0cmluZyBtYXBOYW1lID0g
YXR0cmlidXRlLT52YWx1ZSgpOwotICAgICAgICBpZiAobWFwTmFtZVswXSA9PSAnIycpCisgICAg
ICAgIGlmICghbWFwTmFtZS5pc0VtcHR5KCkgJiYgbWFwTmFtZVswXSA9PSAnIycpCiAgICAgICAg
ICAgICBtYXBOYW1lID0gbWFwTmFtZS5zdWJzdHJpbmcoMSk7CiAgICAgICAgIG1fbmFtZSA9IGRv
Y3VtZW50KCktPmlzSFRNTERvY3VtZW50KCkgPyBtYXBOYW1lLmxvd2VyKCkgOiBtYXBOYW1lOwog
ICAgICAgICBpZiAoaW5Eb2N1bWVudCgpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRt
bC9wYXJzZXIvSFRNTFBhcnNlcklkaW9tcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNl
ci9IVE1MUGFyc2VySWRpb21zLmNwcAppbmRleCAwNThiYjkzMzljZmZmNWQxODNlNDlmN2QyNTg4
MjU4NzMwMjBjYTEyLi4wN2I2NDFmNjVhMDc0ZmJlYWQ2NWU4YTdlNzRiYjYzZDNiOGE1NjVjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MUGFyc2VySWRpb21zLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MUGFyc2VySWRpb21zLmNwcApA
QCAtNzEsNiArNzEsOSBAQCBib29sIHBhcnNlVG9Eb3VibGVGb3JOdW1iZXJUeXBlKGNvbnN0IFN0
cmluZyYgc3RyaW5nLCBkb3VibGUqIHJlc3VsdCkKIHsKICAgICAvLyBTZWUgSFRNTDUgMi40LjQu
MyBgUmVhbCBudW1iZXJzLicKIAorICAgIGlmIChzdHJpbmcuaXNFbXB0eSgpKQorICAgICAgcmV0
dXJuIGZhbHNlOworCiAgICAgLy8gU3RyaW5nOjp0b0RvdWJsZSgpIGFjY2VwdHMgbGVhZGluZyAr
IGFuZCB3aGl0ZXNwYWNlIGNoYXJhY3RlcnMsIHdoaWNoIGFyZSBub3QgdmFsaWQgaGVyZS4KICAg
ICBVQ2hhciBmaXJzdENoYXJhY3RlciA9IHN0cmluZ1swXTsKICAgICBpZiAoZmlyc3RDaGFyYWN0
ZXIgIT0gJy0nICYmICFpc0FTQ0lJRGlnaXQoZmlyc3RDaGFyYWN0ZXIpKQpAQCAtMTMxLDE5ICsx
MzQsMTkgQEAgYm9vbCBwYXJzZVRvRG91YmxlRm9yTnVtYmVyVHlwZVdpdGhEZWNpbWFsUGxhY2Vz
KGNvbnN0IFN0cmluZyYgc3RyaW5nLCBkb3VibGUgKnIKIAogICAgICAgICAvLyBOb3QgdXNpbmcg
U3RyaW5nLnRvSW50KCkgaW4gb3JkZXIgdG8gcGVyZm9ybSB0aGUgc2FtZSBjb21wdXRhdGlvbiBh
cyBkdG9hKCkgZG9lcy4KICAgICAgICAgZXhwb25lbnRTaWduID0gMDsKLSAgICAgICAgc3dpdGNo
IChkaWdpdCA9IHN0cmluZ1tjdXJzb3JdKSB7CisgICAgICAgIHN3aXRjaCAoZGlnaXQgPSAoY3Vy
c29yID49IGxlbmd0aCA/IDAgOiBzdHJpbmdbY3Vyc29yXSkpIHsKICAgICAgICAgY2FzZSAnLSc6
CiAgICAgICAgICAgICBleHBvbmVudFNpZ24gPSAxOwogICAgICAgICBjYXNlICcrJzoKLSAgICAg
ICAgICAgIGRpZ2l0ID0gc3RyaW5nWysrY3Vyc29yXTsKKyAgICAgICAgICAgIGRpZ2l0ID0gKGN1
cnNvciA+PSBsZW5ndGggLSAxID8gMCA6IHN0cmluZ1srK2N1cnNvcl0pOwogICAgICAgICB9CiAg
ICAgICAgIGlmIChkaWdpdCA+PSAnMCcgJiYgZGlnaXQgPD0gJzknKSB7Ci0gICAgICAgICAgICB3
aGlsZSAoY3Vyc29yIDwgbGVuZ3RoICYmIGRpZ2l0ID09ICcwJykKKyAgICAgICAgICAgIHdoaWxl
IChjdXJzb3IgPCBsZW5ndGggLSAxICYmIGRpZ2l0ID09ICcwJykKICAgICAgICAgICAgICAgICBk
aWdpdCA9IHN0cmluZ1srK2N1cnNvcl07CiAgICAgICAgICAgICBpZiAoZGlnaXQgPiAnMCcgJiYg
ZGlnaXQgPD0gJzknKSB7CiAgICAgICAgICAgICAgICAgZXhwb25lbnQzMiA9IGRpZ2l0IC0gJzAn
OwogICAgICAgICAgICAgICAgIGN1cnNvclNhdmVkID0gY3Vyc29yOwotICAgICAgICAgICAgICAg
IHdoaWxlIChjdXJzb3IgPCBsZW5ndGggJiYgKGRpZ2l0ID0gc3RyaW5nWysrY3Vyc29yXSkgPj0g
JzAnICYmIGRpZ2l0IDw9ICc5JykKKyAgICAgICAgICAgICAgICB3aGlsZSAoY3Vyc29yIDwgbGVu
Z3RoIC0gMSAmJiAoZGlnaXQgPSBzdHJpbmdbKytjdXJzb3JdKSA+PSAnMCcgJiYgZGlnaXQgPD0g
JzknKQogICAgICAgICAgICAgICAgICAgICBleHBvbmVudDMyID0gKDEwICogZXhwb25lbnQzMikg
KyBkaWdpdCAtICcwJzsKICAgICAgICAgICAgICAgICBpZiAoY3Vyc29yIC0gY3Vyc29yU2F2ZWQg
PiA4IHx8IGV4cG9uZW50MzIgPiAxOTk5OSkKICAgICAgICAgICAgICAgICAgICAgLyogQXZvaWQg
Y29uZnVzaW9uIGZyb20gZXhwb25lbnRzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yU3R5bGVUZXh0RWRpdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JTdHlsZVRleHRFZGl0b3IuY3BwCmluZGV4IDBkMzllZDk5ZDU2YjhkMGUx
NGI4MWM3MzAxNDAxMjM3YmEwYzFkZDUuLmZmYTlhNzhhZmE2YzZiYzEyODQ2Mjk4MTQ1ZGRiYjQx
ZGU5ZTU3YmUgMTAwNzU1Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JT
dHlsZVRleHRFZGl0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JTdHlsZVRleHRFZGl0b3IuY3BwCkBAIC0xMDIsNyArMTAyLDcgQEAgdm9pZCBJbnNwZWN0b3JT
dHlsZVRleHRFZGl0b3I6Omluc2VydFByb3BlcnR5KHVuc2lnbmVkIGluZGV4LCBjb25zdCBTdHJp
bmcmIHByb3AKICAgICAgICAgICAgIGlmICghcHJvcGVydHlTdGFydCB8fCAhaXNIVE1MTGluZUJy
ZWFrKG1fc3R5bGVUZXh0W3Byb3BlcnR5U3RhcnQgLSAxXSkpCiAgICAgICAgICAgICAgICAgdGV4
dFRvU2V0Lmluc2VydChmb3JtYXRMaW5lRmVlZCwgZm9ybWF0dGluZ1ByZXBlbmRPZmZzZXQpOwog
ICAgICAgICB9Ci0gICAgICAgIGlmICghaXNIVE1MTGluZUJyZWFrKG1fc3R5bGVUZXh0W3Byb3Bl
cnR5U3RhcnRdKSkKKyAgICAgICAgaWYgKG1fc3R5bGVUZXh0Lmxlbmd0aCgpIDw9IHByb3BlcnR5
U3RhcnQgfHwgIWlzSFRNTExpbmVCcmVhayhtX3N0eWxlVGV4dFtwcm9wZXJ0eVN0YXJ0XSkpCiAg
ICAgICAgICAgICB0ZXh0VG9TZXQgKz0gZm9ybWF0TGluZUZlZWQ7CiAgICAgfSBlbHNlIHsKICAg
ICAgICAgU3RyaW5nIGZ1bGxQcmVmaXggPSBmb3JtYXRMaW5lRmVlZCArIGZvcm1hdFByb3BlcnR5
UHJlZml4OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGFnZS9Mb2NhdGlvbi5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wYWdlL0xvY2F0aW9uLmNwcAppbmRleCAwZmI4MDJmZGM3MjQ1OWFmNWEy
MmU4ZjQ2NGY5OWI5NDg5ZDg5YWQ0Li42Y2YwODFmNzU2ODdmZWVhNDNmZjgyMDcwNDAzODk3YjBj
NWJmYWE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL0xvY2F0aW9uLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wYWdlL0xvY2F0aW9uLmNwcApAQCAtMjM1LDcgKzIzNSw3IEBAIHZv
aWQgTG9jYXRpb246OnNldEhhc2goY29uc3QgU3RyaW5nJiBoYXNoLCBET01XaW5kb3cqIGFjdGl2
ZVdpbmRvdywgRE9NV2luZG93KiBmCiAgICAgS1VSTCB1cmwgPSBtX2ZyYW1lLT5kb2N1bWVudCgp
LT51cmwoKTsKICAgICBTdHJpbmcgb2xkRnJhZ21lbnRJZGVudGlmaWVyID0gdXJsLmZyYWdtZW50
SWRlbnRpZmllcigpOwogICAgIFN0cmluZyBuZXdGcmFnbWVudElkZW50aWZpZXIgPSBoYXNoOwot
ICAgIGlmIChoYXNoWzBdID09ICcjJykKKyAgICBpZiAoIWhhc2guaXNFbXB0eSgpICYmIGhhc2hb
MF0gPT0gJyMnKQogICAgICAgICBuZXdGcmFnbWVudElkZW50aWZpZXIgPSBoYXNoLnN1YnN0cmlu
ZygxKTsKICAgICB1cmwuc2V0RnJhZ21lbnRJZGVudGlmaWVyKG5ld0ZyYWdtZW50SWRlbnRpZmll
cik7CiAgICAgLy8gTm90ZSB0aGF0IGJ5IHBhcnNpbmcgdGhlIFVSTCBhbmQgKnRoZW4qIGNvbXBh
cmluZyBmcmFnbWVudHMsIHdlIGFyZSAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
V2luZG93RmVhdHVyZXMuY3BwIGIvU291cmNlL1dlYkNvcmUvcGFnZS9XaW5kb3dGZWF0dXJlcy5j
cHAKaW5kZXggNzU2NDE1MjhkZmVjMmY0YmVjN2VlYTMzZDA3NDBhMGRjN2Q3YmFjNC4uODdhMzFi
MmZjYTY0ZmY0MWY3ZDQ0MDc0NGUyMzMyOGUzZGQ1YTkwMyAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGFnZS9XaW5kb3dGZWF0dXJlcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGFnZS9X
aW5kb3dGZWF0dXJlcy5jcHAKQEAgLTg4LDI3ICs4OCwyNyBAQCBXaW5kb3dGZWF0dXJlczo6V2lu
ZG93RmVhdHVyZXMoY29uc3QgU3RyaW5nJiBmZWF0dXJlcykKICAgICAgICAga2V5QmVnaW4gPSBp
OwogCiAgICAgICAgIC8vIHNraXAgdG8gZmlyc3Qgc2VwYXJhdG9yCi0gICAgICAgIHdoaWxlICgh
aXNXaW5kb3dGZWF0dXJlc1NlcGFyYXRvcihidWZmZXJbaV0pKQorICAgICAgICB3aGlsZSAoaSA8
IGxlbmd0aCAmJiAhaXNXaW5kb3dGZWF0dXJlc1NlcGFyYXRvcihidWZmZXJbaV0pKQogICAgICAg
ICAgICAgaSsrOwogICAgICAgICBrZXlFbmQgPSBpOwogCiAgICAgICAgIC8vIHNraXAgdG8gZmly
c3QgJz0nLCBidXQgZG9uJ3Qgc2tpcCBwYXN0IGEgJywnIG9yIHRoZSBlbmQgb2YgdGhlIHN0cmlu
ZwotICAgICAgICB3aGlsZSAoYnVmZmVyW2ldICE9ICc9JykgewotICAgICAgICAgICAgaWYgKGJ1
ZmZlcltpXSA9PSAnLCcgfHwgaSA+PSBsZW5ndGgpCisgICAgICAgIHdoaWxlIChpIDwgbGVuZ3Ro
ICYmIGJ1ZmZlcltpXSAhPSAnPScpIHsKKyAgICAgICAgICAgIGlmIChidWZmZXJbaV0gPT0gJywn
KQogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgaSsrOwogICAgICAgICB9CiAK
ICAgICAgICAgLy8gc2tpcCB0byBmaXJzdCBub24tc2VwYXJhdG9yLCBidXQgZG9uJ3Qgc2tpcCBw
YXN0IGEgJywnIG9yIHRoZSBlbmQgb2YgdGhlIHN0cmluZwotICAgICAgICB3aGlsZSAoaXNXaW5k
b3dGZWF0dXJlc1NlcGFyYXRvcihidWZmZXJbaV0pKSB7Ci0gICAgICAgICAgICBpZiAoYnVmZmVy
W2ldID09ICcsJyB8fCBpID49IGxlbmd0aCkKKyAgICAgICAgd2hpbGUgKGkgPCBsZW5ndGggJiYg
aXNXaW5kb3dGZWF0dXJlc1NlcGFyYXRvcihidWZmZXJbaV0pKSB7CisgICAgICAgICAgICBpZiAo
YnVmZmVyW2ldID09ICcsJykKICAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIGkr
KzsKICAgICAgICAgfQogICAgICAgICB2YWx1ZUJlZ2luID0gaTsKIAogICAgICAgICAvLyBza2lw
IHRvIGZpcnN0IHNlcGFyYXRvcgotICAgICAgICB3aGlsZSAoIWlzV2luZG93RmVhdHVyZXNTZXBh
cmF0b3IoYnVmZmVyW2ldKSkKKyAgICAgICAgd2hpbGUgKGkgPCBsZW5ndGggJiYgIWlzV2luZG93
RmVhdHVyZXNTZXBhcmF0b3IoYnVmZmVyW2ldKSkKICAgICAgICAgICAgIGkrKzsKICAgICAgICAg
dmFsdWVFbmQgPSBpOwogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9LVVJM
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0tVUkwuY3BwCmluZGV4IGQ1YmJlMTc2Mjg0
Y2ViYzNhNGM0Nzk0MjI4MDZmMGFhMzZkZjYxMDYuLmZiYmZjOTBkZTlkNDhmYjA0MjAwNzE3NGE2
YjIwZDA3ZDcxNmRkZTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0tVUkwu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0tVUkwuY3BwCkBAIC0xNzgzLDEyICsx
NzgzLDEzIEBAIGJvb2wgcHJvdG9jb2xJcyhjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgY2hhciog
cHJvdG9jb2wpCiB7CiAgICAgLy8gRG8gdGhlIGNvbXBhcmlzb24gd2l0aG91dCBtYWtpbmcgYSBu
ZXcgc3RyaW5nIG9iamVjdC4KICAgICBhc3NlcnRQcm90b2NvbElzR29vZChwcm90b2NvbCk7Ci0g
ICAgZm9yIChpbnQgaSA9IDA7IDsgKytpKSB7CisgICAgZm9yIChpbnQgaSA9IDA7IHN0YXRpY19j
YXN0PHVuc2lnbmVkPihpKSA8IHVybC5sZW5ndGgoKTsgaSsrKSB7CiAgICAgICAgIGlmICghcHJv
dG9jb2xbaV0pCiAgICAgICAgICAgICByZXR1cm4gdXJsW2ldID09ICc6JzsKICAgICAgICAgaWYg
KCFpc0xldHRlck1hdGNoSWdub3JpbmdDYXNlKHVybFtpXSwgcHJvdG9jb2xbaV0pKQogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKIGJvb2wg
aXNWYWxpZFByb3RvY29sKGNvbnN0IFN0cmluZyYgcHJvdG9jb2wpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9uZXR3b3JrL0hUVFBQYXJzZXJzLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL25ldHdvcmsvSFRUUFBhcnNlcnMuY3BwCmluZGV4IGExYmE5ZDNhOGZkMDI4
Mjc0OWE5ZTM0MTg2MmEzNjE4YWEzYzg2MzYuLjVjODYwYTI2NDgwMGUzYWU0ZjlkODk5NTA1MzMw
NGNjMjg0NGE5OGEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsv
SFRUUFBhcnNlcnMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL25ldHdvcmsvSFRU
UFBhcnNlcnMuY3BwCkBAIC0xMTAsNyArMTEwLDcgQEAgYm9vbCBwYXJzZUhUVFBSZWZyZXNoKGNv
bnN0IFN0cmluZyYgcmVmcmVzaCwgYm9vbCBmcm9tSHR0cEVxdWl2TWV0YSwgZG91YmxlJiBkZWwK
ICAgICBpZiAoIXNraXBXaGl0ZVNwYWNlKHJlZnJlc2gsIHBvcywgZnJvbUh0dHBFcXVpdk1ldGEp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgCi0gICAgd2hpbGUgKHBvcyAhPSBsZW4gJiYg
cmVmcmVzaFtwb3NdICE9ICcsJyAmJiByZWZyZXNoW3Bvc10gIT0gJzsnKQorICAgIHdoaWxlIChw
b3MgPCBsZW4gJiYgcmVmcmVzaFtwb3NdICE9ICcsJyAmJiByZWZyZXNoW3Bvc10gIT0gJzsnKQog
ICAgICAgICArK3BvczsKICAgICAKICAgICBpZiAocG9zID09IGxlbikgeyAvLyBubyBVUkwKQEAg
LTEzMCw3ICsxMzAsNyBAQCBib29sIHBhcnNlSFRUUFJlZnJlc2goY29uc3QgU3RyaW5nJiByZWZy
ZXNoLCBib29sIGZyb21IdHRwRXF1aXZNZXRhLCBkb3VibGUmIGRlbAogICAgICAgICBpZiAocmVm
cmVzaC5maW5kKCJ1cmwiLCB1cmxTdGFydFBvcywgZmFsc2UpID09IHVybFN0YXJ0UG9zKSB7CiAg
ICAgICAgICAgICB1cmxTdGFydFBvcyArPSAzOwogICAgICAgICAgICAgc2tpcFdoaXRlU3BhY2Uo
cmVmcmVzaCwgdXJsU3RhcnRQb3MsIGZyb21IdHRwRXF1aXZNZXRhKTsKLSAgICAgICAgICAgIGlm
IChyZWZyZXNoW3VybFN0YXJ0UG9zXSA9PSAnPScpIHsKKyAgICAgICAgICAgIGlmICh1cmxTdGFy
dFBvcyA8IGxlbiAmJiByZWZyZXNoW3VybFN0YXJ0UG9zXSA9PSAnPScpIHsKICAgICAgICAgICAg
ICAgICArK3VybFN0YXJ0UG9zOwogICAgICAgICAgICAgICAgIHNraXBXaGl0ZVNwYWNlKHJlZnJl
c2gsIHVybFN0YXJ0UG9zLCBmcm9tSHR0cEVxdWl2TWV0YSk7CiAgICAgICAgICAgICB9IGVsc2UK
QEAgLTEzOSwxMiArMTM5LDEyIEBAIGJvb2wgcGFyc2VIVFRQUmVmcmVzaChjb25zdCBTdHJpbmcm
IHJlZnJlc2gsIGJvb2wgZnJvbUh0dHBFcXVpdk1ldGEsIGRvdWJsZSYgZGVsCiAKICAgICAgICAg
dW5zaWduZWQgdXJsRW5kUG9zID0gbGVuOwogCi0gICAgICAgIGlmIChyZWZyZXNoW3VybFN0YXJ0
UG9zXSA9PSAnIicgfHwgcmVmcmVzaFt1cmxTdGFydFBvc10gPT0gJ1wnJykgeworICAgICAgICBp
ZiAodXJsU3RhcnRQb3MgPCBsZW4gJiYgKHJlZnJlc2hbdXJsU3RhcnRQb3NdID09ICciJyB8fCBy
ZWZyZXNoW3VybFN0YXJ0UG9zXSA9PSAnXCcnKSkgewogICAgICAgICAgICAgVUNoYXIgcXVvdGF0
aW9uTWFyayA9IHJlZnJlc2hbdXJsU3RhcnRQb3NdOwogICAgICAgICAgICAgdXJsU3RhcnRQb3Mr
KzsKICAgICAgICAgICAgIHdoaWxlICh1cmxFbmRQb3MgPiB1cmxTdGFydFBvcykgewogICAgICAg
ICAgICAgICAgIHVybEVuZFBvcy0tOwotICAgICAgICAgICAgICAgIGlmIChyZWZyZXNoW3VybEVu
ZFBvc10gPT0gcXVvdGF0aW9uTWFyaykKKyAgICAgICAgICAgICAgICBpZiAodXJsRW5kUG9zIDwg
bGVuICYmIHJlZnJlc2hbdXJsRW5kUG9zXSA9PSBxdW90YXRpb25NYXJrKQogICAgICAgICAgICAg
ICAgICAgICBicmVhazsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIApAQCAtMjYwLDE4ICsy
NjAsMTggQEAgdm9pZCBmaW5kQ2hhcnNldEluTWVkaWFUeXBlKGNvbnN0IFN0cmluZyYgbWVkaWFU
eXBlLCB1bnNpZ25lZCBpbnQmIGNoYXJzZXRQb3MsIHUKICAgICAgICAgcG9zICs9IDc7CiAKICAg
ICAgICAgLy8gc2tpcCB3aGl0ZXNwYWNlCi0gICAgICAgIHdoaWxlIChwb3MgIT0gbGVuZ3RoICYm
IG1lZGlhVHlwZVtwb3NdIDw9ICcgJykKKyAgICAgICAgd2hpbGUgKHBvcyA8IGxlbmd0aCAmJiBt
ZWRpYVR5cGVbcG9zXSA8PSAnICcpCiAgICAgICAgICAgICArK3BvczsKICAgICAKLSAgICAgICAg
aWYgKG1lZGlhVHlwZVtwb3MrK10gIT0gJz0nKSAvLyB0aGlzICJjaGFyc2V0IiBzdWJzdHJpbmcg
d2Fzbid0IGEgcGFyYW1ldGVyIG5hbWUsIGJ1dCB0aGVyZSBtYXkgYmUgb3RoZXJzCisgICAgICAg
IGlmIChwb3MgPCBsZW5ndGggJiYgbWVkaWFUeXBlW3BvcysrXSAhPSAnPScpIC8vIHRoaXMgImNo
YXJzZXQiIHN1YnN0cmluZyB3YXNuJ3QgYSBwYXJhbWV0ZXIgbmFtZSwgYnV0IHRoZXJlIG1heSBi
ZSBvdGhlcnMKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIHdoaWxlIChwb3MgIT0g
bGVuZ3RoICYmIChtZWRpYVR5cGVbcG9zXSA8PSAnICcgfHwgbWVkaWFUeXBlW3Bvc10gPT0gJyIn
IHx8IG1lZGlhVHlwZVtwb3NdID09ICdcJycpKQorICAgICAgICB3aGlsZSAocG9zIDwgbGVuZ3Ro
ICYmIChtZWRpYVR5cGVbcG9zXSA8PSAnICcgfHwgbWVkaWFUeXBlW3Bvc10gPT0gJyInIHx8IG1l
ZGlhVHlwZVtwb3NdID09ICdcJycpKQogICAgICAgICAgICAgKytwb3M7CiAKICAgICAgICAgLy8g
d2UgZG9uJ3QgaGFuZGxlIHNwYWNlcyB3aXRoaW4gcXVvdGVkIHBhcmFtZXRlciB2YWx1ZXMsIGJl
Y2F1c2UgY2hhcnNldCBuYW1lcyBjYW5ub3QgaGF2ZSBhbnkKICAgICAgICAgdW5zaWduZWQgZW5k
cG9zID0gcG9zOwotICAgICAgICB3aGlsZSAocG9zICE9IGxlbmd0aCAmJiBtZWRpYVR5cGVbZW5k
cG9zXSA+ICcgJyAmJiBtZWRpYVR5cGVbZW5kcG9zXSAhPSAnIicgJiYgbWVkaWFUeXBlW2VuZHBv
c10gIT0gJ1wnJyAmJiBtZWRpYVR5cGVbZW5kcG9zXSAhPSAnOycpCisgICAgICAgIHdoaWxlIChl
bmRwb3MgPCBsZW5ndGggJiYgbWVkaWFUeXBlW2VuZHBvc10gPiAnICcgJiYgbWVkaWFUeXBlW2Vu
ZHBvc10gIT0gJyInICYmIG1lZGlhVHlwZVtlbmRwb3NdICE9ICdcJycgJiYgbWVkaWFUeXBlW2Vu
ZHBvc10gIT0gJzsnKQogICAgICAgICAgICAgKytlbmRwb3M7CiAKICAgICAgICAgY2hhcnNldFBv
cyA9IHBvczsK
</data>

          </attachment>
      

    </bug>

</bugzilla>