<?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>38906</bug_id>
          
          <creation_ts>2010-05-11 07:07:28 -0700</creation_ts>
          <short_desc>Expose CSS rule body start/end offsets in the parent stylesheet</short_desc>
          <delta_ts>2010-05-26 03:35:32 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>CSS</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>39351</dependson>
          <blocked>38578</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Alexander Pavlov (apavlov)">apavlov</reporter>
          <assigned_to name="Alexander Pavlov (apavlov)">apavlov</assigned_to>
          <cc>ap</cc>
    
    <cc>bweinstein</cc>
    
    <cc>darin</cc>
    
    <cc>hyatt</cc>
    
    <cc>joepeck</cc>
    
    <cc>keishi</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>rik</cc>
    
    <cc>timothy</cc>
    
    <cc>webkit.review.bot</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>223906</commentid>
    <comment_count>0</comment_count>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2010-05-11 07:07:28 -0700</bug_when>
    <thetext>Web Inspector requires start/end offsets of CSS rule bodies in order to implement bug https://bugs.webkit.org/show_bug.cgi?id=38578.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>223932</commentid>
    <comment_count>1</comment_count>
      <attachid>55703</attachid>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2010-05-11 08:28:52 -0700</bug_when>
    <thetext>Created attachment 55703
[PATCH] Suggested solution</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>224492</commentid>
    <comment_count>2</comment_count>
      <attachid>55703</attachid>
    <who name="Yury Semikhatsky">yurys</who>
    <bug_when>2010-05-12 02:45:36 -0700</bug_when>
    <thetext>Comment on attachment 55703
[PATCH] Suggested solution

WebCore/css/CSSParser.cpp:5482
 +  void CSSParser::markStart()
I think you should pick a more specific name for these methods, something like markCurrentRuleStart</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>224915</commentid>
    <comment_count>3</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-05-12 14:47:40 -0700</bug_when>
    <thetext>Are these visible to web pages, or only to the web inspector? If we change the web platform we need to evaluate the impact of adding this, but the bar is much lower if it’s just web inspector.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>224929</commentid>
    <comment_count>4</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2010-05-12 15:01:53 -0700</bug_when>
    <thetext>What&apos;s the impact on memory use?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>225003</commentid>
    <comment_count>5</comment_count>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2010-05-12 17:30:24 -0700</bug_when>
    <thetext>Eight bytes added to every style rule? Really?  I think we need to discuss this a bit.

Also, Yury, please don&apos;t review core CSS changes like this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>225004</commentid>
    <comment_count>6</comment_count>
      <attachid>55703</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2010-05-12 17:30:45 -0700</bug_when>
    <thetext>Comment on attachment 55703
[PATCH] Suggested solution

Clearing review flag.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>225134</commentid>
    <comment_count>7</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-05-12 22:39:16 -0700</bug_when>
    <thetext>I did not have a chance to look at this change yet, but my plan was to make a sanity check and then ask Dave to take a look at it in case it was Ok. Please consider Yury&apos;s change an unfortunate accident.

The idea behind the change is that we not only store line numbers for rules, but store their offsets as well. We need it for a new web inspector feature. Here is the user story for it:
- User modifies CSS using elements panel sidebar in inspector
- We show a &apos;Local changes&apos; tab next to the &apos;Content&apos; tab in the resources panel of inspector
- This tab contains all the changes user has applied merged into the original source
- User has ability to copy new content to the clipboard and apply it to real source

Implementing a parallel full-blown CSS parser did not seem a good idea, storing token positions for property tokens in the original one also seemed like a bad idea (memory). So we decided to use a hybrid approach where we rely on original CSS parser to do the rules markup, then we parse individual properties on the inspector side. Alexander has the proof of concept change with this running already, so he started splitting it into patches.

Talking about the ways to test this one. When I was adding rule&apos;s line numbers I&apos;ve done following to make sure we did not regress performance / memory:

- I was running chromium page cycler and was making sure there was no memory regressions (or at least they were not visible given the measurement accuracy)
- I had a giant (4Mb) CSS file that I created via concatenating all the page cycler CSS files (real world ones) and was measuring the regression in speed. Latest version of the code was not regressing at all (fraction of a percent I guess).

So I think we should do this again with this change. We&apos;ll be more accurate on the heap numbers and present them here before going forward.

If we see it regressing, we could hide the changes behind a constructor parameter flag and manually re-parse with this flag enabled from within inspector backend should we need it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>225138</commentid>
    <comment_count>8</comment_count>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2010-05-12 22:47:09 -0700</bug_when>
    <thetext>(In reply to comment #7)
&gt; If we see it regressing, we could hide the changes behind a constructor parameter flag and manually re-parse with this flag enabled from within inspector backend should we need it.

I think memory is the main concern, so this approch would not help with that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>225148</commentid>
    <comment_count>9</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-05-12 23:12:16 -0700</bug_when>
    <thetext>(In reply to comment #8)
&gt; (In reply to comment #7)
&gt; &gt; If we see it regressing, we could hide the changes behind a constructor parameter flag and manually re-parse with this flag enabled from within inspector backend should we need it.
&gt; 
&gt; I think memory is the main concern, so this approch would not help with that.

We could use external storage for that, passing reference in the constructor in place of the flag. It&apos;ll be tricky to make parsing conditional, but we can at least take a look at it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>225251</commentid>
    <comment_count>10</comment_count>
      <attachid>55703</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-05-13 06:17:17 -0700</bug_when>
    <thetext>Comment on attachment 55703
[PATCH] Suggested solution

WebCore/css/tokenizer.flex:125
 +  &quot;{&quot;                     {markStart(); yyTok = *yytext; return yyTok;}
You don&apos;t need markStart since we already have a good way of capturing the &apos;{&apos; location (see updateLastSelectorLine, it is being called while on &apos;{&apos;, so just take yytext there).

WebCore/css/tokenizer.flex:126
 +  &quot;}&quot;                     {markEnd(); yyTok = *yytext; return yyTok;}
Two options here:
- You could get rid of this tokenizer change as well if you consider the end of your rule to be an offset of the token following the &apos;}&apos;
- Leave this code here and get the mark in the ruleset action (where you currently call reset).

WebCore/css/CSSStyleRule.cpp:32
 +      , m_sourceLine(sourceLine)
I wonder if we could move to 16 bit for the line number + use 32 bit per offset start and 16 bit per rule length. I don&apos;t think we handle rules with more than 65K anyways. This gives a 32 bit regression per rule wrt present state. On my test with 4Mb CSS taken from all page cycle test pages, it would consume additional 160K. I wonder what is it comparing to the present struct size. I know you are measuring it right now, would be interesting to know what is the source code / runtime representation ratio for WebKit&apos;s CSS.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>225871</commentid>
    <comment_count>11</comment_count>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2010-05-14 09:12:25 -0700</bug_when>
    <thetext>Experiment: time+space-wise comparison of current vs. [rule body start/end offset]-tracking CSSStyleRule implementation.

Changes for offset tracking:
- CSSStyleRule:
  * m_sourceLine (int -&gt; unsigned short)
  * Added two fields (unsigned int and unsigned short for rule start offset + rule length)
- CSSParser:
  * Added tracking of opening and closing braces for style rules (see the patch)

Input:
- Test stylesheet: all Chromium pagecycler CSS files concatenated (2746 kB, 3235 rules)

Results:
- Parse time (5 samples):
  * HEAD: Average = 45.677ms, StDev(sigma) = 0.305ms
  * With positions tracked: Average = 45.947ms, StDev(sigma) = 0.325ms
- Memory implications:
Space measured: SUM(sizeof(CSSStyleRule) + sizeof(CSSMutableStyleDeclaration) + SelectorLength) for each rule.
  * HEAD: Size = 456520 bytes (Windows, Debug), 353448 bytes (Mac, Release)
  * With positions tracked: Size = 482288 bytes (Windows, Debug), 379216 bytes (Mac, Release)
  Delta = 25768 bytes (5.6% for Windows, 7.3% for Mac)

Conclusions:
- Time delta (0.27ms) is within one sigma, which implies that the parse time is not affected.
- Space delta is 8 bytes per CSSStyleRule (rather than the expected 4 bytes), presumably due to the data alignment (the m_sourceLine type change does not decrease CSSStyleRule size, leaving it at 120 bytes (Win)).

Any comments from the pros&apos; side?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>227369</commentid>
    <comment_count>12</comment_count>
      <attachid>56388</attachid>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2010-05-18 10:24:15 -0700</bug_when>
    <thetext>Created attachment 56388
[PATCH] External storage approach

This patch implements an alternative approach: rule body start/end offsets are extracted into an external Vector (inside InspectorCSSStore) only when the Web Inspector side has requested to do so.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>227372</commentid>
    <comment_count>13</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2010-05-18 10:26:26 -0700</bug_when>
    <thetext>Attachment 56388 did not pass style-queue:

Failed to run &quot;[&apos;WebKitTools/Scripts/check-webkit-style&apos;, &apos;--no-squash&apos;]&quot; exit_code: 1
WebCore/css/CSSParser.h:210:  More than one command on the same line  [whitespace/newline] [4]
WebCore/inspector/InspectorCSSStore.cpp:34:  Alphabetical sorting problem.  [build/include_order] [4]
WebCore/inspector/InspectorCSSStore.cpp:48:  Tab found; better to use spaces  [whitespace/tab] [1]
WebCore/css/CSSParser.cpp:1565:  One space before end of line comments  [whitespace/comments] [5]
WebCore/css/CSSParser.cpp:4379:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
WebCore/css/CSSParser.cpp:4406:  Boolean expressions that span multiple lines should have their operators on the left side of the line instead of the right side.  [whitespace/operators] [4]
Total errors found: 6 in 13 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>227377</commentid>
    <comment_count>14</comment_count>
      <attachid>56388</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2010-05-18 10:32:32 -0700</bug_when>
    <thetext>Comment on attachment 56388
[PATCH] External storage approach

I suggest you make all the whitespace changes in an initial patch with no other source changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>227803</commentid>
    <comment_count>15</comment_count>
      <attachid>56484</attachid>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2010-05-19 06:51:48 -0700</bug_when>
    <thetext>Created attachment 56484
[PATCH] External storage: merged with a whitespace cleanup (39351), style fixed</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>227824</commentid>
    <comment_count>16</comment_count>
      <attachid>56490</attachid>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2010-05-19 07:59:03 -0700</bug_when>
    <thetext>Created attachment 56490
[PATCH] Added missing maps to reset()</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>228393</commentid>
    <comment_count>17</comment_count>
      <attachid>56598</attachid>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2010-05-20 08:44:57 -0700</bug_when>
    <thetext>Created attachment 56598
[PATCH] Minor cleanup</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>229648</commentid>
    <comment_count>18</comment_count>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2010-05-24 01:21:20 -0700</bug_when>
    <thetext>Reviewers, any input on this one?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>230198</commentid>
    <comment_count>19</comment_count>
      <attachid>56598</attachid>
    <who name="Dave Hyatt">hyatt</who>
    <bug_when>2010-05-25 03:08:25 -0700</bug_when>
    <thetext>Comment on attachment 56598
[PATCH] Minor cleanup

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>230222</commentid>
    <comment_count>20</comment_count>
      <attachid>57009</attachid>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2010-05-25 05:01:49 -0700</bug_when>
    <thetext>Created attachment 57009
[PATCH] InspectorCSSStore: struct -&gt; class</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>230277</commentid>
    <comment_count>21</comment_count>
      <attachid>57009</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-05-25 08:11:02 -0700</bug_when>
    <thetext>Comment on attachment 57009
[PATCH] InspectorCSSStore: struct -&gt; class

Provided Dave&apos;s Ok with previous version, I am r+ing this. Please see notes and fix things prior to landing though. Thanks!

=======

Now that the CSSStore is getting a solid API, it looks more like InspectorCSSAgent. We should rename it in one of subsequent changes.

WebCore/inspector/InspectorCSSStore.cpp:83
 +      while (i &lt; originalRuleListLength) {
Please consider extracting this into a method.



WebCore/inspector/InspectorCSSStore.cpp:95
 +          for (InspectorController::ResourcesMap::const_iterator resIt = m_inspectorController-&gt;resources().begin(); resIt != m_inspectorController-&gt;resources().end(); ++resIt) {
I would introduce public InspectorController::resourceForURL(const String&amp;) and use it here. One thing that bothers me is whether we can rely upon url matching here. CSS is often static though, so we should be Ok for now.

WebCore/inspector/InspectorCSSStore.cpp:100
 +                  p.parseSheet(newStyleSheet.get(), resIt-&gt;second-&gt;sourceString(), offsetVector);
This might be blank in some cases. Will your code handle it well?

WebCore/inspector/InspectorDOMAgent.cpp:1082
 +      CSSStyleSheet* inspectorStyleSheet = cssStore()-&gt;inspectorStyleSheet();
This whole logic can be incapsulated given that you pass node into the inspectorStyleSheet getter, right? Also note, that for different iframes we will use different inspector stylesheets, so you can&apos;t store single reference in CSS store. Please either fix here or file a bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>230362</commentid>
    <comment_count>22</comment_count>
      <attachid>57031</attachid>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2010-05-25 11:04:54 -0700</bug_when>
    <thetext>Created attachment 57031
[PATCH] pfeldman&apos;s comments addressed, inspectorStyleSheet bug fixed</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>230460</commentid>
    <comment_count>23</comment_count>
      <attachid>57031</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2010-05-25 14:27:08 -0700</bug_when>
    <thetext>Comment on attachment 57031
[PATCH] pfeldman&apos;s comments addressed, inspectorStyleSheet bug fixed

WebCore/css/CSSGrammar.y:893
 +          p-&gt;markEnd();
Nit: I would call markEnd and reset Marks from within createStyleRule just to minimize the coupling here (just as you do call markStart from within updateLastSelector*).

WebCore/css/CSSParser.cpp:5500
 +  void CSSParser::markStart()
nit: markRuleBodyStart?

WebCore/css/CSSParser.cpp:5507
 +  void CSSParser::markEnd()
markRuleBodyEnd

WebCore/css/CSSParser.h:246
 +          void resetMarks() { m_startOffset = m_endOffset = 0; }
resetRuleBodyMarks ?

WebCore/css/CSSParser.h:241
 +          unsigned m_startOffset;
m_ruleBodyStartOffset

WebCore/css/CSSParser.h:242
 +          unsigned m_endOffset;
m_ruleBodyEndOffset


Please land it with comments addressed. There is no need to ask for another review. Reviewing same changes over and over after you&apos;ve got r+ is painful. It is better to land as is and get a follow-up change reviewed in these cases.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>230644</commentid>
    <comment_count>24</comment_count>
    <who name="Alexander Pavlov (apavlov)">apavlov</who>
    <bug_when>2010-05-26 03:35:32 -0700</bug_when>
    <thetext>Committing to http://svn.webkit.org/repository/webkit/trunk ...
        M       LayoutTests/ChangeLog
        A       LayoutTests/inspector/resources/styles-source-offsets.css
        A       LayoutTests/inspector/styles-source-offsets-expected.txt
        A       LayoutTests/inspector/styles-source-offsets.html
        M       WebCore/ChangeLog
        M       WebCore/css/CSSGrammar.y
        M       WebCore/css/CSSParser.cpp
        M       WebCore/css/CSSParser.h
        M       WebCore/inspector/InspectorCSSStore.cpp
        M       WebCore/inspector/InspectorCSSStore.h
        M       WebCore/inspector/InspectorController.cpp
        M       WebCore/inspector/InspectorController.h
        M       WebCore/inspector/InspectorDOMAgent.cpp
        M       WebCore/inspector/InspectorDOMAgent.h
        M       WebCore/inspector/front-end/DOMAgent.js
Committed r60227</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>55703</attachid>
            <date>2010-05-11 08:28:52 -0700</date>
            <delta_ts>2010-05-25 05:01:49 -0700</delta_ts>
            <desc>[PATCH] Suggested solution</desc>
            <filename>ruleoffsets.patch</filename>
            <type>text/plain</type>
            <size>13897</size>
            <attacher name="Alexander Pavlov (apavlov)">apavlov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA1NWI4ZjM0Li5hYTNlODMwIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTAtMDUt
MTEgIEFsZXhhbmRlciBQYXZsb3YgIDxhcGF2bG92QGNocm9taXVtLm9yZz4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBFeHBvc2UgQ1NTIHJ1bGUgYm9k
eSBzdGFydC9lbmQgb2Zmc2V0cyBpbiB0aGUgcGFyZW50IHN0eWxlc2hlZXQKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM4OTA2CisKKyAgICAgICAgKiBp
bnNwZWN0b3IvcmVzb3VyY2VzL3N0eWxlcy1zb3VyY2Utb2Zmc2V0cy5jc3M6IEFkZGVkLgorICAg
ICAgICAoYm9keSk6CisgICAgICAgICgvKiBjb21tZW50IGJlZm9yZSBzZWxlY3RvciAqL2JvZHku
bWFpbjEvKiBjb21tZW50IGFmdGVyIHNlbGVjdG9yICovKToKKyAgICAgICAgKGJvZHkubWFpbjIp
OgorICAgICAgICAqIGluc3BlY3Rvci9zdHlsZXMtc291cmNlLW9mZnNldHMtZXhwZWN0ZWQudHh0
OiBBZGRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc3R5bGVzLXNvdXJjZS1vZmZzZXRzLmh0bWw6
IEFkZGVkLgorCiAyMDEwLTA1LTExICBab2x0YW4gSGVyY3plZyAgPHpoZXJjemVnQHdlYmtpdC5v
cmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGlyayBTY2h1bHplLgpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvaW5zcGVjdG9yL3Jlc291cmNlcy9zdHlsZXMtc291cmNlLW9mZnNldHMuY3NzIGIv
TGF5b3V0VGVzdHMvaW5zcGVjdG9yL3Jlc291cmNlcy9zdHlsZXMtc291cmNlLW9mZnNldHMuY3Nz
Cm5ldyBmaWxlIG1vZGUgMTAwNzU1CmluZGV4IDAwMDAwMDAuLmI4MzAyYmMKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvcmVzb3VyY2VzL3N0eWxlcy1zb3VyY2Utb2Zm
c2V0cy5jc3MKQEAgLTAsMCArMSw3IEBACitib2R5IHsKKyAgICBmb250LXNpemU6IDEycHg7Cit9
CisKKy8qIGNvbW1lbnQgYmVmb3JlIHNlbGVjdG9yICovYm9keS5tYWluMS8qIGNvbW1lbnQgYWZ0
ZXIgc2VsZWN0b3IgKi97LyogY29tbWVudCAqL2NvbG9yOiAjMDAwO30vKiBjb21tZW50ICovCisK
K2JvZHkubWFpbjJ7YmFja2dyb3VuZDogZ3JlZW47fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZp
bGUKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9zdHlsZXMtc291cmNlLW9mZnNl
dHMtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3N0eWxlcy1zb3VyY2Utb2Zm
c2V0cy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjUw
MzVkZAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9zdHlsZXMtc291
cmNlLW9mZnNldHMtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsNiBAQAorVGVzdHMgdGhhdCBwcm9w
ZXIgc3RhcnQvZW5kIG9mZnNldCBwb3NpdGlvbnMgYXJlIHJlcG9ydGVkIGZvciBDU1MgcnVsZSBi
b2RpZXMuCisKK2JvZHk6IFs1LTI4XQorYm9keS5tYWluMTogWzk4LTEyNF0KK2JvZHkubWFpbjI6
IFsxNTAtMTY5XQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3Ivc3R5bGVzLXNv
dXJjZS1vZmZzZXRzLmh0bWwgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3Ivc3R5bGVzLXNvdXJjZS1v
ZmZzZXRzLmh0bWwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNmQ3NDkzZAot
LS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9zdHlsZXMtc291cmNlLW9m
ZnNldHMuaHRtbApAQCAtMCwwICsxLDQ4IEBACis8aHRtbD4KKzxoZWFkPgorCis8bGluayByZWw9
InN0eWxlc2hlZXQiIGhyZWY9InJlc291cmNlcy9zdHlsZXMtc291cmNlLW9mZnNldHMuY3NzIj4K
KworPHNjcmlwdCBzcmM9Ii4uL2h0dHAvdGVzdHMvaW5zcGVjdG9yL2luc3BlY3Rvci10ZXN0Lmpz
Ij48L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSJlbGVtZW50cy10ZXN0cy5qcyI+PC9zY3JpcHQ+Cis8
c2NyaXB0PgorCitmdW5jdGlvbiBkb2l0KCkKK3sKKyAgICBmdW5jdGlvbiBjYWxsYmFjayhzdHls
ZXMpCisgICAgeworICAgICAgICB2YXIgbWF0Y2hlZENTU1J1bGVzID0gc3R5bGVzLm1hdGNoZWRD
U1NSdWxlczsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtYXRjaGVkQ1NTUnVsZXMubGVu
Z3RoOyArK2kpCisgICAgICAgICAgICBvdXRwdXQobWF0Y2hlZENTU1J1bGVzW2ldLnNlbGVjdG9y
VGV4dCArICI6IFsiICsgbWF0Y2hlZENTU1J1bGVzW2ldLmJvZHlTdGFydE9mZnNldCArICItIiAr
IG1hdGNoZWRDU1NSdWxlc1tpXS5ib2R5RW5kT2Zmc2V0ICsgIl0iKTsKKworICAgICAgICBub3Rp
ZnlEb25lKCk7CisgICAgfQorICAgIGV2YWx1YXRlSW5XZWJJbnNwZWN0b3IoImZyb250ZW5kX2R1
bXBCb2R5T2Zmc2V0cyIsIGNhbGxiYWNrKTsKK30KKworCisvLyBGcm9udGVuZCBmdW5jdGlvbnMu
CisKK2Z1bmN0aW9uIGZyb250ZW5kX2R1bXBCb2R5T2Zmc2V0cyh0ZXN0Q29udHJvbGxlcikKK3sK
KyAgICB0ZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisgICAgZnJvbnRlbmRfZXhwYW5k
RE9NU3VidHJlZShXZWJJbnNwZWN0b3IuZG9tQWdlbnQuZG9jdW1lbnQpOworICAgIHRlc3RDb250
cm9sbGVyLnJ1bkFmdGVyUGVuZGluZ0Rpc3BhdGNoZXMoZnVuY3Rpb24oKSB7CisgICAgICAgIGZ1
bmN0aW9uIGNhbGxiYWNrKHN0eWxlcykKKyAgICAgICAgeworICAgICAgICAgICAgdGVzdENvbnRy
b2xsZXIubm90aWZ5RG9uZShzdHlsZXMpOworICAgICAgICB9CisgICAgICAgIEluc3BlY3RvckJh
Y2tlbmQuZ2V0U3R5bGVzKFdlYkluc3BlY3Rvci5DYWxsYmFjay53cmFwKGNhbGxiYWNrKSwgV2Vi
SW5zcGVjdG9yLmRvbUFnZW50LmRvY3VtZW50LmJvZHkuaWQsIHRydWUpOworICAgIH0pOworfQor
Cis8L3NjcmlwdD4KKzwvaGVhZD4KKworPGJvZHkgY2xhc3M9Im1haW4xIG1haW4yIiBvbmxvYWQ9
Im9ubG9hZCgpIj4KKzxwPgorVGVzdHMgdGhhdCBwcm9wZXIgc3RhcnQvZW5kIG9mZnNldCBwb3Np
dGlvbnMgYXJlIHJlcG9ydGVkIGZvciBDU1MgcnVsZSBib2RpZXMuCis8L3A+CisKKzwvYm9keT4K
KzwvaHRtbD4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VM
b2cKaW5kZXggZjMzNTcxZC4uMjAyNmY1NSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cK
KysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0MSBAQAorMjAxMC0wNS0xMSAgQWxl
eGFuZGVyIFBhdmxvdiAgPGFwYXZsb3ZAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEV4cG9zZSBDU1MgcnVsZSBib2R5IHN0YXJ0
L2VuZCBvZmZzZXRzIGluIHRoZSBwYXJlbnQgc3R5bGVzaGVldAorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9Mzg5MDYKKworICAgICAgICBUaGlzIGNoYW5n
ZSBhZGRzIGJvZHlTdGFydE9mZnNldCBhbmQgYm9keUVuZE9mZnNldCBmaWVsZHMgaW50byBDU1NT
dHlsZVJ1bGUuCisgICAgICAgIFRoZSBmaWVsZHMgYXJlIHBvcHVsYXRlZCBieSBDU1NQYXJzZXIg
d2hpY2ggbm93IGtlZXBzIHRyYWNrIG9mIHRoZSBsYXRlc3QKKyAgICAgICAgb3BlbmluZyBhbmQg
Y2xvc2luZyBicmFjZSBwb3NpdGlvbnMgZW5jb3VudGVyZWQsIHdoaWxlIGNyZWF0aW5nIENTU1N0
eWxlUnVsZXMuCisKKyAgICAgICAgVGVzdDogaW5zcGVjdG9yL3N0eWxlcy1zb3VyY2Utb2Zmc2V0
cy5odG1sCisKKyAgICAgICAgKiBjc3MvQ1NTR3JhbW1hci55OgorICAgICAgICAqIGNzcy9DU1NQ
YWdlUnVsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYWdlUnVsZTo6Q1NTUGFnZVJ1bGUp
OgorICAgICAgICAqIGNzcy9DU1NQYXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFy
c2VyOjpzZXR1cFBhcnNlcik6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OmNyZWF0ZVN0
eWxlUnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6Om1hcmtTdGFydCk6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6Om1hcmtFbmQpOgorICAgICAgICAqIGNzcy9DU1NQYXJz
ZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cmVzZXRNYXJrcyk6CisgICAgICAg
ICogY3NzL0NTU1N0eWxlUnVsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVJ1bGU6
OkNTU1N0eWxlUnVsZSk6CisgICAgICAgICogY3NzL0NTU1N0eWxlUnVsZS5oOgorICAgICAgICAo
V2ViQ29yZTo6Q1NTU3R5bGVSdWxlOjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5
bGVSdWxlOjpib2R5U3RhcnRPZmZzZXQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVSdWxl
Ojpib2R5RW5kT2Zmc2V0KToKKyAgICAgICAgKiBjc3MvdG9rZW5pemVyLmZsZXg6CisgICAgICAg
ICogaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvckRPTUFnZW50OjpkaWRSZW1vdmVET01Ob2RlKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvckRPTUFnZW50OjpnZXRTdHlsZXMpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
RE9NQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yRE9NQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yUnVsZSk6CisgICAgICAgICogaW5zcGVjdG9yL2Zy
b250LWVuZC9ET01BZ2VudC5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xh
cmF0aW9uKToKKwogMjAxMC0wNS0xMSAgWm9sdGFuIEhlcmN6ZWcgIDx6aGVyY3plZ0B3ZWJraXQu
b3JnPgogCiAgICAgICAgIFJldmlld2VkIGJ5IERpcmsgU2NodWx6ZS4KZGlmZiAtLWdpdCBhL1dl
YkNvcmUvY3NzL0NTU0dyYW1tYXIueSBiL1dlYkNvcmUvY3NzL0NTU0dyYW1tYXIueQppbmRleCA3
Nzk4MjY0Li4wNjI3NDViIDEwMDY0NAotLS0gYS9XZWJDb3JlL2Nzcy9DU1NHcmFtbWFyLnkKKysr
IGIvV2ViQ29yZS9jc3MvQ1NTR3JhbW1hci55CkBAIC04ODEsNyArODgxLDkgQEAgdW5hcnlfb3Bl
cmF0b3I6CiAKIHJ1bGVzZXQ6CiAgICAgc2VsZWN0b3JfbGlzdCAneycgbWF5YmVfc3BhY2UgZGVj
bGFyYXRpb25fbGlzdCBjbG9zaW5nX2JyYWNlIHsKLSAgICAgICAgJCQgPSBzdGF0aWNfY2FzdDxD
U1NQYXJzZXIqPihwYXJzZXIpLT5jcmVhdGVTdHlsZVJ1bGUoJDEpOworICAgICAgICBDU1NQYXJz
ZXIqIHAgPSBzdGF0aWNfY2FzdDxDU1NQYXJzZXIqPihwYXJzZXIpOworICAgICAgICAkJCA9IHAt
PmNyZWF0ZVN0eWxlUnVsZSgkMSk7CisgICAgICAgIHAtPnJlc2V0TWFya3MoKTsKICAgICB9CiAg
IDsKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9jc3MvQ1NTUGFnZVJ1bGUuY3BwIGIvV2ViQ29yZS9j
c3MvQ1NTUGFnZVJ1bGUuY3BwCmluZGV4IGM4NWMxYWEuLjU4MzNiY2MgMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvY3NzL0NTU1BhZ2VSdWxlLmNwcAorKysgYi9XZWJDb3JlL2Nzcy9DU1NQYWdlUnVsZS5j
cHAKQEAgLTI4LDcgKzI4LDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogQ1NTUGFnZVJ1bGU6
OkNTU1BhZ2VSdWxlKENTU1N0eWxlU2hlZXQqIHBhcmVudCwgQ1NTU2VsZWN0b3IqIHNlbGVjdG9y
LCBpbnQgc291cmNlTGluZSkKLSAgICA6IENTU1N0eWxlUnVsZShwYXJlbnQsIHNvdXJjZUxpbmUp
CisgICAgOiBDU1NTdHlsZVJ1bGUocGFyZW50LCBzb3VyY2VMaW5lLCAwLCAwKQogewogICAgIFZl
Y3RvcjxDU1NTZWxlY3Rvcio+IHNlbGVjdG9yczsKICAgICBzZWxlY3RvcnMuYXBwZW5kKHNlbGVj
dG9yKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAgYi9XZWJDb3JlL2Nz
cy9DU1NQYXJzZXIuY3BwCmluZGV4IDZmN2NmMTIuLjM0NWFhZmEgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvY3NzL0NTU1BhcnNlci5jcHAKKysrIGIvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcApAQCAt
MjI1LDYgKzIyNSw3IEBAIHZvaWQgQ1NTUGFyc2VyOjpzZXR1cFBhcnNlcihjb25zdCBjaGFyKiBw
cmVmaXgsIGNvbnN0IFN0cmluZyYgc3RyaW5nLCBjb25zdCBjaGFyCiAgICAgeXlsZW5nID0gMDsK
ICAgICB5eXRleHQgPSB5eV9jX2J1Zl9wID0gbV9kYXRhOwogICAgIHl5X2hvbGRfY2hhciA9ICp5
eV9jX2J1Zl9wOworICAgIHJlc2V0TWFya3MoKTsKIH0KIAogdm9pZCBDU1NQYXJzZXI6OnBhcnNl
U2hlZXQoQ1NTU3R5bGVTaGVldCogc2hlZXQsIGNvbnN0IFN0cmluZyYgc3RyaW5nKQpAQCAtNTIz
MCw3ICs1MjMxLDcgQEAgQ1NTUnVsZSogQ1NTUGFyc2VyOjpjcmVhdGVTdHlsZVJ1bGUoVmVjdG9y
PENTU1NlbGVjdG9yKj4qIHNlbGVjdG9ycykKICAgICBtX2FsbG93SW1wb3J0UnVsZXMgPSBtX2Fs
bG93TmFtZXNwYWNlRGVjbGFyYXRpb25zID0gbV9hbGxvd1ZhcmlhYmxlc1J1bGVzID0gZmFsc2U7
CiAgICAgQ1NTU3R5bGVSdWxlKiByZXN1bHQgPSAwOwogICAgIGlmIChzZWxlY3RvcnMpIHsKLSAg
ICAgICAgUmVmUHRyPENTU1N0eWxlUnVsZT4gcnVsZSA9IENTU1N0eWxlUnVsZTo6Y3JlYXRlKG1f
c3R5bGVTaGVldCwgbV9sYXN0U2VsZWN0b3JMaW5lKTsKKyAgICAgICAgUmVmUHRyPENTU1N0eWxl
UnVsZT4gcnVsZSA9IENTU1N0eWxlUnVsZTo6Y3JlYXRlKG1fc3R5bGVTaGVldCwgbV9sYXN0U2Vs
ZWN0b3JMaW5lLCBtX3N0YXJ0T2Zmc2V0LCBtX2VuZE9mZnNldCk7CiAgICAgICAgIHJ1bGUtPmFk
b3B0U2VsZWN0b3JWZWN0b3IoKnNlbGVjdG9ycyk7CiAgICAgICAgIGlmIChtX2hhc0ZvbnRGYWNl
T25seVZhbHVlcykKICAgICAgICAgICAgIGRlbGV0ZUZvbnRGYWNlT25seVZhbHVlcygpOwpAQCAt
NTQ3OCw2ICs1NDc5LDIwIEBAIHZvaWQgQ1NTUGFyc2VyOjppbnZhbGlkQmxvY2tIaXQoKQogICAg
ICAgICBtX3N0eWxlU2hlZXQtPnNldEhhc1N5bnRhY3RpY2FsbHlWYWxpZENTU0hlYWRlcihmYWxz
ZSk7CiB9CiAKK3ZvaWQgQ1NTUGFyc2VyOjptYXJrU3RhcnQoKQoreworICAgIHVuc2lnbmVkIG9m
ZnNldCA9IHl5dGV4dCAtIG1fZGF0YTsKKyAgICBpZiAoIW1fc3RhcnRPZmZzZXQgfHwgb2Zmc2V0
IDwgbV9zdGFydE9mZnNldCkKKyAgICAgICAgbV9zdGFydE9mZnNldCA9IG9mZnNldDsKK30KKwor
dm9pZCBDU1NQYXJzZXI6Om1hcmtFbmQoKQoreworICAgIHVuc2lnbmVkIG9mZnNldCA9IHl5dGV4
dCAtIG1fZGF0YTsKKyAgICBpZiAob2Zmc2V0ID4gbV9lbmRPZmZzZXQpCisgICAgICAgIG1fZW5k
T2Zmc2V0ID0gb2Zmc2V0OworfQorCiBzdGF0aWMgaW50IGNzc1Byb3BlcnR5SUQoY29uc3QgVUNo
YXIqIHByb3BlcnR5TmFtZSwgdW5zaWduZWQgbGVuZ3RoKQogewogICAgIGlmICghbGVuZ3RoKQpk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmggYi9XZWJDb3JlL2Nzcy9DU1NQYXJz
ZXIuaAppbmRleCA2ZTAzNTRlLi4yZTMwZjE1IDEwMDY0NAotLS0gYS9XZWJDb3JlL2Nzcy9DU1NQ
YXJzZXIuaAorKysgYi9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuaApAQCAtMjM2LDYgKzIzNiwxMSBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIEF0b21pY1N0cmluZyBtX2RlZmF1bHROYW1l
c3BhY2U7CiAKICAgICAgICAgLy8gdG9rZW5pemVyIG1ldGhvZHMgYW5kIGRhdGEKKyAgICAgICAg
dW5zaWduZWQgbV9zdGFydE9mZnNldDsKKyAgICAgICAgdW5zaWduZWQgbV9lbmRPZmZzZXQ7Cisg
ICAgICAgIHZvaWQgbWFya1N0YXJ0KCk7CisgICAgICAgIHZvaWQgbWFya0VuZCgpOworICAgICAg
ICB2b2lkIHJlc2V0TWFya3MoKSB7IG1fc3RhcnRPZmZzZXQgPSBtX2VuZE9mZnNldCA9IDA7IH0K
ICAgICAgICAgaW50IGxleCh2b2lkKiB5eWx2YWwpOwogICAgICAgICBpbnQgdG9rZW4oKSB7IHJl
dHVybiB5eVRvazsgfQogICAgICAgICBVQ2hhciogdGV4dChpbnQqIGxlbmd0aCk7CmRpZmYgLS1n
aXQgYS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVJ1bGUuY3BwIGIvV2ViQ29yZS9jc3MvQ1NTU3R5bGVS
dWxlLmNwcAppbmRleCAxMDM2ZThmLi5mOGUyNTIyIDEwMDY0NAotLS0gYS9XZWJDb3JlL2Nzcy9D
U1NTdHlsZVJ1bGUuY3BwCisrKyBiL1dlYkNvcmUvY3NzL0NTU1N0eWxlUnVsZS5jcHAKQEAgLTI3
LDkgKzI3LDExIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotQ1NTU3R5bGVSdWxlOjpDU1NT
dHlsZVJ1bGUoQ1NTU3R5bGVTaGVldCogcGFyZW50LCBpbnQgc291cmNlTGluZSkKK0NTU1N0eWxl
UnVsZTo6Q1NTU3R5bGVSdWxlKENTU1N0eWxlU2hlZXQqIHBhcmVudCwgaW50IHNvdXJjZUxpbmUs
IHVuc2lnbmVkIHN0YXJ0T2Zmc2V0LCB1bnNpZ25lZCBlbmRPZmZzZXQpCiAgICAgOiBDU1NSdWxl
KHBhcmVudCkKICAgICAsIG1fc291cmNlTGluZShzb3VyY2VMaW5lKQorICAgICwgbV9zdGFydE9m
ZnNldChzdGFydE9mZnNldCkKKyAgICAsIG1fZW5kT2Zmc2V0KGVuZE9mZnNldCkKIHsKIH0KIApk
aWZmIC0tZ2l0IGEvV2ViQ29yZS9jc3MvQ1NTU3R5bGVSdWxlLmggYi9XZWJDb3JlL2Nzcy9DU1NT
dHlsZVJ1bGUuaAppbmRleCBkNzk3YzczLi40YWIzMmViIDEwMDY0NAotLS0gYS9XZWJDb3JlL2Nz
cy9DU1NTdHlsZVJ1bGUuaAorKysgYi9XZWJDb3JlL2Nzcy9DU1NTdHlsZVJ1bGUuaApAQCAtMzQs
OSArMzQsOSBAQCBjbGFzcyBDU1NTZWxlY3RvcjsKIAogY2xhc3MgQ1NTU3R5bGVSdWxlIDogcHVi
bGljIENTU1J1bGUgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPENTU1N0eWxlUnVs
ZT4gY3JlYXRlKENTU1N0eWxlU2hlZXQqIHBhcmVudCwgaW50IHNvdXJjZUxpbmUpCisgICAgc3Rh
dGljIFBhc3NSZWZQdHI8Q1NTU3R5bGVSdWxlPiBjcmVhdGUoQ1NTU3R5bGVTaGVldCogcGFyZW50
LCBpbnQgc291cmNlTGluZSwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNl
dCkKICAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ1NTU3R5bGVSdWxlKHBhcmVu
dCwgc291cmNlTGluZSkpOworICAgICAgICByZXR1cm4gYWRvcHRSZWYobmV3IENTU1N0eWxlUnVs
ZShwYXJlbnQsIHNvdXJjZUxpbmUsIHN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQpKTsKICAgICB9CiAg
ICAgdmlydHVhbCB+Q1NTU3R5bGVSdWxlKCk7CiAKQEAgLTYwLDggKzYwLDEyIEBAIHB1YmxpYzoK
IAogICAgIGludCBzb3VyY2VMaW5lKCkgeyByZXR1cm4gbV9zb3VyY2VMaW5lOyB9CiAKKyAgICB1
bnNpZ25lZCBib2R5U3RhcnRPZmZzZXQoKSB7IHJldHVybiBtX3N0YXJ0T2Zmc2V0OyB9CisKKyAg
ICB1bnNpZ25lZCBib2R5RW5kT2Zmc2V0KCkgeyByZXR1cm4gbV9lbmRPZmZzZXQ7IH0KKwogcHJv
dGVjdGVkOgotICAgIENTU1N0eWxlUnVsZShDU1NTdHlsZVNoZWV0KiBwYXJlbnQsIGludCBzb3Vy
Y2VMaW5lKTsKKyAgICBDU1NTdHlsZVJ1bGUoQ1NTU3R5bGVTaGVldCogcGFyZW50LCBpbnQgc291
cmNlTGluZSwgdW5zaWduZWQgc3RhcnRPZmZzZXQsIHVuc2lnbmVkIGVuZE9mZnNldCk7CiAKIHBy
aXZhdGU6CiAgICAgdmlydHVhbCBib29sIGlzU3R5bGVSdWxlKCkgeyByZXR1cm4gdHJ1ZTsgfQpA
QCAtNzIsNiArNzYsOCBAQCBwcml2YXRlOgogICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNs
YXJhdGlvbj4gbV9zdHlsZTsKICAgICBDU1NTZWxlY3Rvckxpc3QgbV9zZWxlY3Rvckxpc3Q7CiAg
ICAgaW50IG1fc291cmNlTGluZTsKKyAgICB1bnNpZ25lZCBtX3N0YXJ0T2Zmc2V0OworICAgIHVu
c2lnbmVkIG1fZW5kT2Zmc2V0OwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0t
Z2l0IGEvV2ViQ29yZS9jc3MvdG9rZW5pemVyLmZsZXggYi9XZWJDb3JlL2Nzcy90b2tlbml6ZXIu
ZmxleAppbmRleCAyOTBjNTkwLi5jZmFhMTdiIDEwMDY0NAotLS0gYS9XZWJDb3JlL2Nzcy90b2tl
bml6ZXIuZmxleAorKysgYi9XZWJDb3JlL2Nzcy90b2tlbml6ZXIuZmxleApAQCAtMTIyLDYgKzEy
Miw4IEBAIFVcK3tofXsxLDZ9LXtofXsxLDZ9ICAgIHt5eVRvayA9IFVOSUNPREVSQU5HRTsgcmV0
dXJuIHl5VG9rO30KIAogPG1lZGlhcXVlcnk+InsiICAgICAgICAgfAogPG1lZGlhcXVlcnk+Ijsi
ICAgICAgICAge0JFR0lOKElOSVRJQUwpOyB5eVRvayA9ICp5eXRleHQ7IHJldHVybiB5eVRvazsg
fQorInsiICAgICAgICAgICAgICAgICAgICAge21hcmtTdGFydCgpOyB5eVRvayA9ICp5eXRleHQ7
IHJldHVybiB5eVRvazt9CisifSIgICAgICAgICAgICAgICAgICAgICB7bWFya0VuZCgpOyB5eVRv
ayA9ICp5eXRleHQ7IHJldHVybiB5eVRvazt9CiAuICAgICAgICAgICAgICAgICAgICAgICB7eXlU
b2sgPSAqeXl0ZXh0OyByZXR1cm4geXlUb2s7fQogCiAlJQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yRE9NQWdlbnQuY3BwCmluZGV4IGQxMmE2ZDcuLmEzZjA5ZDQgMTAwNjQ0Ci0tLSBhL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcAorKysgYi9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JET01BZ2VudC5jcHAKQEAgLTc0OCw3ICs3NDgsNyBAQCB2b2lkIEluc3BlY3Rv
ckRPTUFnZW50OjpkaWRSZW1vdmVET01Ob2RlKE5vZGUqIG5vZGUpCiAgICAgICAgICAgICBtX2Zy
b250ZW5kLT5jaGlsZE5vZGVDb3VudFVwZGF0ZWQocGFyZW50SWQsIDApOwogICAgIH0gZWxzZQog
ICAgICAgICBtX2Zyb250ZW5kLT5jaGlsZE5vZGVSZW1vdmVkKHBhcmVudElkLCBtX2RvY3VtZW50
Tm9kZVRvSWRNYXAuZ2V0KG5vZGUpKTsKLSAgICB1bmJpbmQobm9kZSwgJm1fZG9jdW1lbnROb2Rl
VG9JZE1hcCk7ICAgIAorICAgIHVuYmluZChub2RlLCAmbV9kb2N1bWVudE5vZGVUb0lkTWFwKTsK
IH0KIAogdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6ZGlkTW9kaWZ5RE9NQXR0cihFbGVtZW50KiBl
bGVtZW50KQpAQCAtNzYxLDE0ICs3NjEsMTQgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6ZGlk
TW9kaWZ5RE9NQXR0cihFbGVtZW50KiBlbGVtZW50KQogICAgIG1fZnJvbnRlbmQtPmF0dHJpYnV0
ZXNVcGRhdGVkKGlkLCBidWlsZEFycmF5Rm9yRWxlbWVudEF0dHJpYnV0ZXMoZWxlbWVudCkpOwog
fQogCi12b2lkIEluc3BlY3RvckRPTUFnZW50OjpnZXRTdHlsZXMobG9uZyBjYWxsSWQsIGxvbmcg
bm9kZUlkLCBib29sIGF1dGhvck9ubHkpICAgIAordm9pZCBJbnNwZWN0b3JET01BZ2VudDo6Z2V0
U3R5bGVzKGxvbmcgY2FsbElkLCBsb25nIG5vZGVJZCwgYm9vbCBhdXRob3JPbmx5KQogewogICAg
IE5vZGUqIG5vZGUgPSBub2RlRm9ySWQobm9kZUlkKTsKICAgICBpZiAoIW5vZGUgfHwgbm9kZS0+
bm9kZVR5cGUoKSAhPSBOb2RlOjpFTEVNRU5UX05PREUpIHsKICAgICAgICAgbV9mcm9udGVuZC0+
ZGlkR2V0U3R5bGVzKGNhbGxJZCwgU2NyaXB0VmFsdWU6OnVuZGVmaW5lZCgpKTsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KLSAgICAKKwogICAgIERPTVdpbmRvdyogZGVmYXVsdFZpZXcgPSBub2Rl
LT5vd25lckRvY3VtZW50KCktPmRlZmF1bHRWaWV3KCk7CiAgICAgaWYgKCFkZWZhdWx0Vmlldykg
ewogICAgICAgICBtX2Zyb250ZW5kLT5kaWRHZXRTdHlsZXMoY2FsbElkLCBTY3JpcHRWYWx1ZTo6
dW5kZWZpbmVkKCkpOwpAQCAtNzg5LDcgKzc4OSw3IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6
OmdldFN0eWxlcyhsb25nIGNhbGxJZCwgbG9uZyBub2RlSWQsIGJvb2wgYXV0aG9yT25seSkKIAog
ICAgIHJlc3VsdC5zZXQoInN0eWxlQXR0cmlidXRlcyIsIGJ1aWxkT2JqZWN0Rm9yQXR0cmlidXRl
U3R5bGVzKGVsZW1lbnQpKTsKICAgICByZXN1bHQuc2V0KCJwc2V1ZG9FbGVtZW50cyIsIGJ1aWxk
QXJyYXlGb3JQc2V1ZG9FbGVtZW50cyhlbGVtZW50LCBhdXRob3JPbmx5KSk7Ci0gICAgCisKICAg
ICBTY3JpcHRPYmplY3QgY3VycmVudFN0eWxlID0gcmVzdWx0OwogICAgIEVsZW1lbnQqIHBhcmVu
dEVsZW1lbnQgPSBlbGVtZW50LT5wYXJlbnRFbGVtZW50KCk7CiAgICAgd2hpbGUgKHBhcmVudEVs
ZW1lbnQpIHsKQEAgLTExNDQsNiArMTE0NCwxMiBAQCBTY3JpcHRPYmplY3QgSW5zcGVjdG9yRE9N
QWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yU3R5bGUoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUsCiAg
ICAgfQogICAgIHJlc3VsdC5zZXQoIndpZHRoIiwgc3R5bGUtPmdldFByb3BlcnR5VmFsdWUoIndp
ZHRoIikpOwogICAgIHJlc3VsdC5zZXQoImhlaWdodCIsIHN0eWxlLT5nZXRQcm9wZXJ0eVZhbHVl
KCJoZWlnaHQiKSk7CisgICAgQ1NTUnVsZSogcGFyZW50UnVsZSA9IHN0eWxlLT5wYXJlbnRSdWxl
KCk7CisgICAgaWYgKHBhcmVudFJ1bGUgJiYgcGFyZW50UnVsZS0+dHlwZSgpID09IENTU1J1bGU6
OlNUWUxFX1JVTEUpIHsKKyAgICAgICAgQ1NTU3R5bGVSdWxlKiBwYXJlbnRTdHlsZVJ1bGUgPSBz
dGF0aWNfY2FzdDxDU1NTdHlsZVJ1bGUqPihwYXJlbnRSdWxlKTsKKyAgICAgICAgcmVzdWx0LnNl
dCgiYm9keVN0YXJ0T2Zmc2V0IiwgcGFyZW50U3R5bGVSdWxlLT5ib2R5U3RhcnRPZmZzZXQoKSk7
CisgICAgICAgIHJlc3VsdC5zZXQoImJvZHlFbmRPZmZzZXQiLCBwYXJlbnRTdHlsZVJ1bGUtPmJv
ZHlFbmRPZmZzZXQoKSk7CisgICAgfQogICAgIHBvcHVsYXRlT2JqZWN0V2l0aFN0eWxlUHJvcGVy
dGllcyhzdHlsZSwgcmVzdWx0KTsKICAgICByZXR1cm4gcmVzdWx0OwogfQpAQCAtMTIxNiw2ICsx
MjIyLDggQEAgU2NyaXB0T2JqZWN0IEluc3BlY3RvckRPTUFnZW50OjpidWlsZE9iamVjdEZvclJ1
bGUoQ1NTU3R5bGVSdWxlKiBydWxlKQogICAgIHJlc3VsdC5zZXQoInNlbGVjdG9yVGV4dCIsIHJ1
bGUtPnNlbGVjdG9yVGV4dCgpKTsKICAgICByZXN1bHQuc2V0KCJjc3NUZXh0IiwgcnVsZS0+Y3Nz
VGV4dCgpKTsKICAgICByZXN1bHQuc2V0KCJzb3VyY2VMaW5lIiwgcnVsZS0+c291cmNlTGluZSgp
KTsKKyAgICByZXN1bHQuc2V0KCJib2R5U3RhcnRPZmZzZXQiLCBydWxlLT5ib2R5U3RhcnRPZmZz
ZXQoKSk7CisgICAgcmVzdWx0LnNldCgiYm9keUVuZE9mZnNldCIsIHJ1bGUtPmJvZHlFbmRPZmZz
ZXQoKSk7CiAgICAgaWYgKHBhcmVudFN0eWxlU2hlZXQpIHsKICAgICAgICAgU2NyaXB0T2JqZWN0
IHBhcmVudFN0eWxlU2hlZXRWYWx1ZSA9IG1fZnJvbnRlbmQtPm5ld1NjcmlwdE9iamVjdCgpOwog
ICAgICAgICByZXN1bHQuc2V0KCJwYXJlbnRTdHlsZVNoZWV0IiwgcGFyZW50U3R5bGVTaGVldFZh
bHVlKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9ET01BZ2VudC5q
cyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9ET01BZ2VudC5qcwppbmRleCA0NmZmMGJm
Li5lNjE0MGQ1IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRE9NQWdl
bnQuanMKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RPTUFnZW50LmpzCkBAIC00
OTEsNiArNDkxLDggQEAgV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb24gPSBmdW5jdGlv
bihwYXlsb2FkKQogICAgIHRoaXMuaWQgPSBwYXlsb2FkLmlkOwogICAgIHRoaXMud2lkdGggPSBw
YXlsb2FkLndpZHRoOwogICAgIHRoaXMuaGVpZ2h0ID0gcGF5bG9hZC5oZWlnaHQ7CisgICAgdGhp
cy5ib2R5U3RhcnRPZmZzZXQgPSBwYXlsb2FkLmJvZHlTdGFydE9mZnNldDsKKyAgICB0aGlzLmJv
ZHlFbmRPZmZzZXQgPSBwYXlsb2FkLmJvZHlFbmRPZmZzZXQ7CiAgICAgdGhpcy5fX2Rpc2FibGVk
UHJvcGVydGllcyA9IHt9OwogICAgIHRoaXMuX19kaXNhYmxlZFByb3BlcnR5VmFsdWVzID0ge307
CiAgICAgdGhpcy5fX2Rpc2FibGVkUHJvcGVydHlQcmlvcml0aWVzID0ge307Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>56388</attachid>
            <date>2010-05-18 10:24:15 -0700</date>
            <delta_ts>2010-05-19 06:51:48 -0700</delta_ts>
            <desc>[PATCH] External storage approach</desc>
            <filename>ruleoffsets.patch</filename>
            <type>text/plain</type>
            <size>82540</size>
            <attacher name="Alexander Pavlov (apavlov)">apavlov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBhODljNTQ4Li45Y2ZkYzI1IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTkgQEAKKzIwMTAtMDUt
MTggIEFsZXhhbmRlciBQYXZsb3YgIDxhcGF2bG92QGNocm9taXVtLm9yZz4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUcmFjayBDU1MgcnVsZSBib2R5
IG9mZnNldHMKKworICAgICAgICBFeHBvc2UgQ1NTIHJ1bGUgYm9keSBzdGFydC9lbmQgb2Zmc2V0
cyBpbiB0aGUgcGFyZW50IHN0eWxlc2hlZXQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTM4OTA2CisKKyAgICAgICAgKiBpbnNwZWN0b3IvcmVzb3VyY2Vz
L3N0eWxlcy1zb3VyY2Utb2Zmc2V0cy5jc3M6IEFkZGVkLgorICAgICAgICAoYm9keSk6CisgICAg
ICAgICgvKiBjb21tZW50IGJlZm9yZSBzZWxlY3RvciAqL2JvZHkubWFpbjEvKiBjb21tZW50IGFm
dGVyIHNlbGVjdG9yICovKToKKyAgICAgICAgKGJvZHkubWFpbjIpOgorICAgICAgICAqIGluc3Bl
Y3Rvci9zdHlsZXMtc291cmNlLW9mZnNldHMtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAg
KiBpbnNwZWN0b3Ivc3R5bGVzLXNvdXJjZS1vZmZzZXRzLmh0bWw6IEFkZGVkLgorCiAyMDEwLTA1
LTE0ICBKZXJlbXkgT3Jsb3cgIDxqb3Jsb3dAY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IE5hdGUgQ2hhcGluLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3Jl
c291cmNlcy9zdHlsZXMtc291cmNlLW9mZnNldHMuY3NzIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9y
L3Jlc291cmNlcy9zdHlsZXMtc291cmNlLW9mZnNldHMuY3NzCm5ldyBmaWxlIG1vZGUgMTAwNzU1
CmluZGV4IDAwMDAwMDAuLmI4MzAyYmMKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9p
bnNwZWN0b3IvcmVzb3VyY2VzL3N0eWxlcy1zb3VyY2Utb2Zmc2V0cy5jc3MKQEAgLTAsMCArMSw3
IEBACitib2R5IHsKKyAgICBmb250LXNpemU6IDEycHg7Cit9CisKKy8qIGNvbW1lbnQgYmVmb3Jl
IHNlbGVjdG9yICovYm9keS5tYWluMS8qIGNvbW1lbnQgYWZ0ZXIgc2VsZWN0b3IgKi97LyogY29t
bWVudCAqL2NvbG9yOiAjMDAwO30vKiBjb21tZW50ICovCisKK2JvZHkubWFpbjJ7YmFja2dyb3Vu
ZDogZ3JlZW47fQpcIE5vIG5ld2xpbmUgYXQgZW5kIG9mIGZpbGUKZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2luc3BlY3Rvci9zdHlsZXMtc291cmNlLW9mZnNldHMtZXhwZWN0ZWQudHh0IGIvTGF5
b3V0VGVzdHMvaW5zcGVjdG9yL3N0eWxlcy1zb3VyY2Utb2Zmc2V0cy1leHBlY3RlZC50eHQKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjUwMzVkZAotLS0gL2Rldi9udWxsCisr
KyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9zdHlsZXMtc291cmNlLW9mZnNldHMtZXhwZWN0ZWQu
dHh0CkBAIC0wLDAgKzEsNiBAQAorVGVzdHMgdGhhdCBwcm9wZXIgc3RhcnQvZW5kIG9mZnNldCBw
b3NpdGlvbnMgYXJlIHJlcG9ydGVkIGZvciBDU1MgcnVsZSBib2RpZXMuCisKK2JvZHk6IFs1LTI4
XQorYm9keS5tYWluMTogWzk4LTEyNF0KK2JvZHkubWFpbjI6IFsxNTAtMTY5XQorCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3Ivc3R5bGVzLXNvdXJjZS1vZmZzZXRzLmh0bWwgYi9M
YXlvdXRUZXN0cy9pbnNwZWN0b3Ivc3R5bGVzLXNvdXJjZS1vZmZzZXRzLmh0bWwKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQ4YjhjNQotLS0gL2Rldi9udWxsCisrKyBiL0xh
eW91dFRlc3RzL2luc3BlY3Rvci9zdHlsZXMtc291cmNlLW9mZnNldHMuaHRtbApAQCAtMCwwICsx
LDU1IEBACis8aHRtbD4KKzxoZWFkPgorCis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9InJl
c291cmNlcy9zdHlsZXMtc291cmNlLW9mZnNldHMuY3NzIiAtLT4KKworPHNjcmlwdCBzcmM9Ii4u
L2h0dHAvdGVzdHMvaW5zcGVjdG9yL2luc3BlY3Rvci10ZXN0LmpzIj48L3NjcmlwdD4KKzxzY3Jp
cHQgc3JjPSJlbGVtZW50cy10ZXN0cy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorCitmdW5jdGlv
biBkb2l0KCkKK3sKKyAgICBmdW5jdGlvbiBjYWxsYmFjayhzdHlsZXMpCisgICAgeworICAgICAg
ICBpZiAoc3R5bGVzID09PSAicmVmcmVzaGluZyIpCisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIHZhciBtYXRjaGVkQ1NTUnVsZXMgPSBzdHlsZXMubWF0Y2hlZENTU1J1bGVzOworICAgICAg
ICBmb3IgKHZhciBpID0gMDsgaSA8IG1hdGNoZWRDU1NSdWxlcy5sZW5ndGg7ICsraSkKKyAgICAg
ICAgICAgIG91dHB1dChtYXRjaGVkQ1NTUnVsZXNbaV0uc2VsZWN0b3JUZXh0ICsgIjogWyIgKyBt
YXRjaGVkQ1NTUnVsZXNbaV0uYm9keVN0YXJ0T2Zmc2V0ICsgIi0iICsgbWF0Y2hlZENTU1J1bGVz
W2ldLmJvZHlFbmRPZmZzZXQgKyAiXSIpOworCisgICAgICAgIG5vdGlmeURvbmUoKTsKKyAgICB9
CisgICAgZXZhbHVhdGVJbldlYkluc3BlY3RvcigiZnJvbnRlbmRfZHVtcEJvZHlPZmZzZXRzIiwg
Y2FsbGJhY2spOworfQorCisKKy8vIEZyb250ZW5kIGZ1bmN0aW9ucy4KKworZnVuY3Rpb24gZnJv
bnRlbmRfZHVtcEJvZHlPZmZzZXRzKHRlc3RDb250cm9sbGVyKQoreworICAgIGlmICghV2ViSW5z
cGVjdG9yLnBhbmVscy5yZXNvdXJjZXMucmVzb3VyY2VUcmFja2luZ0VuYWJsZWQpIHsKKyAgICAg
ICAgSW5zcGVjdG9yQmFja2VuZC5lbmFibGVSZXNvdXJjZVRyYWNraW5nKGZhbHNlKTsKKyAgICAg
ICAgcmV0dXJuICJyZWZyZXNoaW5nIjsKKyAgICB9CisKKyAgICB0ZXN0Q29udHJvbGxlci53YWl0
VW50aWxEb25lKCk7CisgICAgZnJvbnRlbmRfZXhwYW5kRE9NU3VidHJlZShXZWJJbnNwZWN0b3Iu
ZG9tQWdlbnQuZG9jdW1lbnQpOworICAgIHRlc3RDb250cm9sbGVyLnJ1bkFmdGVyUGVuZGluZ0Rp
c3BhdGNoZXMoZnVuY3Rpb24oKSB7CisgICAgICAgIGZ1bmN0aW9uIGNhbGxiYWNrKHN0eWxlcykK
KyAgICAgICAgeworICAgICAgICAgICAgdGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZShzdHlsZXMp
OworICAgICAgICB9CisgICAgICAgIEluc3BlY3RvckJhY2tlbmQuZ2V0U3R5bGVzKFdlYkluc3Bl
Y3Rvci5DYWxsYmFjay53cmFwKGNhbGxiYWNrKSwgV2ViSW5zcGVjdG9yLmRvbUFnZW50LmRvY3Vt
ZW50LmJvZHkuaWQsIHRydWUpOworICAgIH0pOworfQorCis8L3NjcmlwdD4KKzwvaGVhZD4KKwor
PGJvZHkgY2xhc3M9Im1haW4xIG1haW4yIiBvbmxvYWQ9Im9ubG9hZCgpIj4KKzxwPgorVGVzdHMg
dGhhdCBwcm9wZXIgc3RhcnQvZW5kIG9mZnNldCBwb3NpdGlvbnMgYXJlIHJlcG9ydGVkIGZvciBD
U1MgcnVsZSBib2RpZXMuCis8L3A+CisKKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBhL1dl
YkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMmVhMDIxZC4uMWFiZDQ1
YiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwxMTEgQEAKKzIwMTAtMDUtMTggIEFsZXhhbmRlciBQYXZsb3YgIDxhcGF2bG92
QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICBFeHBvc2UgQ1NTIHJ1bGUgYm9keSBzdGFydC9lbmQgb2Zmc2V0cyBpbiB0aGUgcGFy
ZW50IHN0eWxlc2hlZXQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTM4OTA2CisKKyAgICAgICAgQ1NTUGFyc2VyOjpwYXJzZVNoZWV0KCkgYWNjZXB0cyBh
biBvcHRpb25hbCBwb2ludGVyIHRvIFZlY3RvciB0aGF0IHdpbGwgYmUgZmlsbGVkIHdpdGggc3Rk
OjpwYWlyJ3MKKyAgICAgICAgY29udGFpbmluZyBzdGFydC9lbmQgb2Zmc2V0cyBvZiBydWxlIGJv
ZGllcywgaW4gdGhlIG9yZGVyIGNvcnJlc3BvbmRpbmcgdG8gdGhlIG9yZGVyIG9mIHJ1bGVzCisg
ICAgICAgIGluIHRoZSBwYXJlbnQgc3R5bGVzaGVldC4KKworICAgICAgICBUZXN0OiBpbnNwZWN0
b3Ivc3R5bGVzLXNvdXJjZS1vZmZzZXRzLmh0bWwKKworICAgICAgICAqIGNzcy9DU1NHcmFtbWFy
Lnk6CisgICAgICAgICogY3NzL0NTU1BhcnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NQ
YXJzZXI6On5DU1NQYXJzZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpzZXR1cFBh
cnNlcik6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlU2hlZXQpOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZVZhbHVlKToKKyAgICAgICAgKFdlYkNvcmU6OkNT
U1BhcnNlcjo6cGFyc2VTZWxlY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjp1bml0RnJvbVN0cmlu
Zyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OmNoZWNrRm9yT3JwaGFuZWRVbml0cyk6
CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlV0NTU0lucHV0UHJvcGVydHkpOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZUZpbGxTaG9ydGhhbmQpOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZUFuaW1hdGlvblNob3J0aGFuZCk6CisgICAgICAg
IChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlVHJhbnNpdGlvblNob3J0aGFuZCk6CisgICAgICAg
IChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlU2hvcnRoYW5kKToKKyAgICAgICAgKFdlYkNvcmU6
OkNTU1BhcnNlcjo6cGFyc2U0VmFsdWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6
cGFyc2VBdHRyKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VGaWxsUG9zaXRp
b25YWSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlRmlsbFBvc2l0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VGaWxsUmVwZWF0KToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VGaWxsUHJvcGVydHkpOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTUGFyc2VyOjpwYXJzZUFuaW1hdGlvblRpbWluZ0Z1bmN0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VBbmltYXRpb25Qcm9wZXJ0eSk6CisgICAgICAgIChXZWJD
b3JlOjpDU1NQYXJzZXI6OnBhcnNlRGFzaGJvYXJkUmVnaW9ucyk6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NQYXJzZXI6OnBhcnNlQ291bnRlckNvbnRlbnQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
UGFyc2VyOjpwYXJzZVNoYXBlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VG
b250KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VGb250RmFtaWx5KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VGb250RmFjZVNyYyk6CisgICAgICAgIChX
ZWJDb3JlOjpwYXJzZUludCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlQ29s
b3IpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZVNoYWRvdyk6CisgICAgICAg
IChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlUmVmbGVjdCk6CisgICAgICAgIChXZWJDb3JlOjpC
b3JkZXJJbWFnZVBhcnNlQ29udGV4dDo6Y29tbWl0TnVtYmVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkJvcmRlckltYWdlUGFyc2VDb250ZXh0Ojpjb21taXRCb3JkZXJJbWFnZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlQm9yZGVySW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTUGFyc2VyOjpwYXJzZUNvdW50ZXIpOgorICAgICAgICAoV2ViQ29yZTo6cGFyc2VHcmFkaWVu
dFBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlR3JhZGllbnRDb2xvclN0b3ApOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZUdyYWRpZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkNTU1BhcnNlcjo6cGFyc2VDYW52YXMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2Vy
OjpwYXJzZVRyYW5zZm9ybSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlVHJh
bnNmb3JtT3JpZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VQZXJzcGVj
dGl2ZU9yaWdpbik6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnRleHQpOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpjcmVhdGVSdWxlTGlzdCk6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NQYXJzZXI6OmNyZWF0ZVN0eWxlUnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJz
ZXI6OmNyZWF0ZVZhcmlhYmxlc1J1bGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpw
YXJzZVZhcmlhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6cGFyc2VQcm9wZXJ0
eVdpdGhSZXNvbHZlZFZhcmlhYmxlcyk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OmNo
ZWNrRm9yVmFyaWFibGVzKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6Y3JlYXRlS2V5
ZnJhbWVSdWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6bWFya1N0YXJ0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6bWFya0VuZCk6CisgICAgICAgICogY3NzL0NTU1Bh
cnNlci5oOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjp1cGRhdGVMYXN0U2VsZWN0b3JM
aW5lQW5kUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpyZXNldE1hcmtz
KToKKyAgICAgICAgKiBjc3MvQ1NTU3R5bGVTaGVldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
U1NTdHlsZVNoZWV0OjppbnNlcnRSdWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2hl
ZXQ6OmFkZE5hbWVzcGFjZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNoZWV0OjpzdHls
ZVNoZWV0Q2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNoZWV0OjphZGRTdWJy
ZXNvdXJjZVN0eWxlVVJMcyk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNTU1N0b3Jl
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU1N0b3JlOjpJbnNwZWN0b3JDU1NT
dG9yZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NTdG9yZTo6cmVzZXQpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTU3RvcmU6OmdldFN0YXJ0RW5kT2Zmc2V0cyk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NTdG9yZTo6c3R5bGVGb3JJZCk6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JDU1NTdG9yZTo6YmluZFN0eWxlKToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvckNTU1N0b3JlOjpiaW5kU3R5bGVTaGVldCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JDU1NTdG9yZTo6YmluZFJ1bGUpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNw
ZWN0b3JDU1NTdG9yZS5oOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVy
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xsZXI6Okluc3BlY3RvckNv
bnRyb2xsZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6c2V0RnJv
bnRlbmQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6c2hvdyk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjp1bmJpbmRBbGxSZXNvdXJjZXMp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6ZGlkQ29tbWl0TG9hZCk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpzY3JpcHRJbXBvcnRlZCk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpnZXRDdXJyZW50VXNlcklu
aXRpYXRlZFByb2ZpbGVOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNvbnRyb2xs
ZXI6OnJlbW92ZUJyZWFrcG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6ZHJhd091dGxpbmVkUXVh
ZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9sbGVyOjpzdG9wVGltaW5nKToK
KyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6Okluc3BlY3RvckRPTUFnZW50KToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvckRPTUFnZW50OjpkaWRSZW1vdmVET01Ob2RlKToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvckRPTUFnZW50OjpnZXRTdHlsZXMpOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yRE9NQWdlbnQ6OmFwcGx5U3R5bGVUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvckRPTUFnZW50OjpzZXRTdHlsZVRleHQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yRE9NQWdlbnQ6OnNldFN0eWxlUHJvcGVydHkpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yRE9NQWdlbnQ6OnRvZ2dsZVN0eWxlRW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JET01BZ2VudDo6YnVpbGRPYmplY3RGb3JTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JET01BZ2VudDo6YnVpbGRPYmplY3RGb3JSdWxlKToKKyAgICAgICAgKiBpbnNwZWN0
b3IvSW5zcGVjdG9yRE9NQWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0RP
TUFnZW50LmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb24pOgor
CiAyMDEwLTA1LTE3ICBYYW4gTG9wZXogIDx4bG9wZXpAaWdhbGlhLmNvbT4KIAogICAgICAgICBU
cnkgdG8gZml4IEdUSysgYnVpbGQuCmRpZmYgLS1naXQgYS9XZWJDb3JlL2Nzcy9DU1NHcmFtbWFy
LnkgYi9XZWJDb3JlL2Nzcy9DU1NHcmFtbWFyLnkKaW5kZXggNzc5ODI2NC4uNTc2MzA3NSAxMDA2
NDQKLS0tIGEvV2ViQ29yZS9jc3MvQ1NTR3JhbW1hci55CisrKyBiL1dlYkNvcmUvY3NzL0NTU0dy
YW1tYXIueQpAQCAtODgxLDcgKzg4MSwxMCBAQCB1bmFyeV9vcGVyYXRvcjoKIAogcnVsZXNldDoK
ICAgICBzZWxlY3Rvcl9saXN0ICd7JyBtYXliZV9zcGFjZSBkZWNsYXJhdGlvbl9saXN0IGNsb3Np
bmdfYnJhY2UgewotICAgICAgICAkJCA9IHN0YXRpY19jYXN0PENTU1BhcnNlcio+KHBhcnNlcikt
PmNyZWF0ZVN0eWxlUnVsZSgkMSk7CisgICAgICAgIENTU1BhcnNlciogcCA9IHN0YXRpY19jYXN0
PENTU1BhcnNlcio+KHBhcnNlcik7CisgICAgICAgIHAtPm1hcmtFbmQoKTsKKyAgICAgICAgJCQg
PSBwLT5jcmVhdGVTdHlsZVJ1bGUoJDEpOworICAgICAgICBwLT5yZXNldE1hcmtzKCk7CiAgICAg
fQogICA7CiAKQEAgLTg5Myw3ICs4OTYsNyBAQCBzZWxlY3Rvcl9saXN0OgogICAgICAgICAgICAg
ZGVsZXRlQWxsVmFsdWVzKCokJCk7CiAgICAgICAgICAgICAkJC0+c2hyaW5rKDApOwogICAgICAg
ICAgICAgJCQtPmFwcGVuZChwLT5zaW5rRmxvYXRpbmdTZWxlY3RvcigkMSkpOwotICAgICAgICAg
ICAgcC0+dXBkYXRlTGFzdFNlbGVjdG9yTGluZSgpOworICAgICAgICAgICAgcC0+dXBkYXRlTGFz
dFNlbGVjdG9yTGluZUFuZFBvc2l0aW9uKCk7CiAgICAgICAgIH0KICAgICB9CiAgICAgfCBzZWxl
Y3Rvcl9saXN0ICcsJyBtYXliZV9zcGFjZSBzZWxlY3RvciAlcHJlYyBVTklNUE9SVEFOVF9UT0sg
ewpAQCAtOTAxLDcgKzkwNCw3IEBAIHNlbGVjdG9yX2xpc3Q6CiAgICAgICAgICAgICBDU1NQYXJz
ZXIqIHAgPSBzdGF0aWNfY2FzdDxDU1NQYXJzZXIqPihwYXJzZXIpOwogICAgICAgICAgICAgJCQg
PSAkMTsKICAgICAgICAgICAgICQkLT5hcHBlbmQocC0+c2lua0Zsb2F0aW5nU2VsZWN0b3IoJDQp
KTsKLSAgICAgICAgICAgIHAtPnVwZGF0ZUxhc3RTZWxlY3RvckxpbmUoKTsKKyAgICAgICAgICAg
IHAtPnVwZGF0ZUxhc3RTZWxlY3RvckxpbmVBbmRQb3NpdGlvbigpOwogICAgICAgICB9IGVsc2UK
ICAgICAgICAgICAgICQkID0gMDsKICAgICB9CmRpZmYgLS1naXQgYS9XZWJDb3JlL2Nzcy9DU1NQ
YXJzZXIuY3BwIGIvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcAppbmRleCBhYzE2OGRjLi44YTE3
ZjBjIDEwMDY0NAotLS0gYS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwCisrKyBiL1dlYkNvcmUv
Y3NzL0NTU1BhcnNlci5jcHAKQEAgLTcxLDYgKzcxLDcgQEAKICNpbmNsdWRlICJXZWJLaXRDU1NL
ZXlmcmFtZXNSdWxlLmgiCiAjaW5jbHVkZSAiV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWUuaCIKICNp
bmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlIDx3dGYvQ3VycmVudFRpbWUuaD4KICNpbmNsdWRl
IDx3dGYvZHRvYS5oPgogCiAjaWYgRU5BQkxFKERBU0hCT0FSRF9TVVBQT1JUKQpAQCAtMTY4LDcg
KzE2OSw3IEBAIENTU1BhcnNlcjo6fkNTU1BhcnNlcigpCiAgICAgZmFzdEZyZWUobV9wYXJzZWRQ
cm9wZXJ0aWVzKTsKIAogICAgIGNsZWFyVmFyaWFibGVzKCk7Ci0gICAgCisKICAgICBkZWxldGUg
bV92YWx1ZUxpc3Q7CiAKICAgICBmYXN0RnJlZShtX2RhdGEpOwpAQCAtMjEwLDcgKzIxMSw3IEBA
IHZvaWQgQ1NTUGFyc2VyOjpzZXR1cFBhcnNlcihjb25zdCBjaGFyKiBwcmVmaXgsIGNvbnN0IFN0
cmluZyYgc3RyaW5nLCBjb25zdCBjaGFyCiAgICAgbV9kYXRhID0gc3RhdGljX2Nhc3Q8VUNoYXIq
PihmYXN0TWFsbG9jKGxlbmd0aCAqIHNpemVvZihVQ2hhcikpKTsKICAgICBmb3IgKHVuc2lnbmVk
IGkgPSAwOyBpIDwgc3RybGVuKHByZWZpeCk7IGkrKykKICAgICAgICAgbV9kYXRhW2ldID0gcHJl
Zml4W2ldOwotICAgIAorCiAgICAgbWVtY3B5KG1fZGF0YSArIHN0cmxlbihwcmVmaXgpLCBzdHJp
bmcuY2hhcmFjdGVycygpLCBzdHJpbmcubGVuZ3RoKCkgKiBzaXplb2YoVUNoYXIpKTsKIAogICAg
IHVuc2lnbmVkIHN0YXJ0ID0gc3RybGVuKHByZWZpeCkgKyBzdHJpbmcubGVuZ3RoKCk7CkBAIC0y
MjUsMTMgKzIyNiwxNCBAQCB2b2lkIENTU1BhcnNlcjo6c2V0dXBQYXJzZXIoY29uc3QgY2hhciog
cHJlZml4LCBjb25zdCBTdHJpbmcmIHN0cmluZywgY29uc3QgY2hhcgogICAgIHl5bGVuZyA9IDA7
CiAgICAgeXl0ZXh0ID0geXlfY19idWZfcCA9IG1fZGF0YTsKICAgICB5eV9ob2xkX2NoYXIgPSAq
eXlfY19idWZfcDsKKyAgICByZXNldE1hcmtzKCk7CiB9CiAKLXZvaWQgQ1NTUGFyc2VyOjpwYXJz
ZVNoZWV0KENTU1N0eWxlU2hlZXQqIHNoZWV0LCBjb25zdCBTdHJpbmcmIHN0cmluZykKK3ZvaWQg
Q1NTUGFyc2VyOjpwYXJzZVNoZWV0KENTU1N0eWxlU2hlZXQqIHNoZWV0LCBjb25zdCBTdHJpbmcm
IHN0cmluZywgVmVjdG9yPHN0ZDo6cGFpcjx1bnNpZ25lZCwgdW5zaWduZWQ+ID4qIHJ1bGVTdGFy
dEVuZE9mZnNldHMpCiB7CiAgICAgbV9zdHlsZVNoZWV0ID0gc2hlZXQ7CiAgICAgbV9kZWZhdWx0
TmFtZXNwYWNlID0gc3RhckF0b207IC8vIFJlc2V0IHRoZSBkZWZhdWx0IG5hbWVzcGFjZS4KLSAg
ICAKKyAgICBtX3J1bGVTdGFydEVuZE9mZnNldHMgPSBydWxlU3RhcnRFbmRPZmZzZXRzOwogICAg
IHNldHVwUGFyc2VyKCIiLCBzdHJpbmcsICIiKTsKICAgICBjc3N5eXBhcnNlKHRoaXMpOwogICAg
IG1fcnVsZSA9IDA7CkBAIC0yNjMsOSArMjY1LDkgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlVmFs
dWUoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIGRlY2xhcmF0aW9uLCBpbnQgaWQsIGNvbnMK
IAogICAgIG1faWQgPSBpZDsKICAgICBtX2ltcG9ydGFudCA9IGltcG9ydGFudDsKLSAgICAKKwog
ICAgIGNzc3l5cGFyc2UodGhpcyk7Ci0gICAgCisKICAgICBtX3J1bGUgPSAwOwogCiAgICAgYm9v
bCBvayA9IGZhbHNlOwpAQCAtMzE3LDcgKzMxOSw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUNv
bG9yKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBkZWNsYXJhdGlvbiwgY29uc3QgU3RyaW5n
CiB9CiAKIHZvaWQgQ1NTUGFyc2VyOjpwYXJzZVNlbGVjdG9yKGNvbnN0IFN0cmluZyYgc3RyaW5n
LCBEb2N1bWVudCogZG9jLCBDU1NTZWxlY3Rvckxpc3QmIHNlbGVjdG9yTGlzdCkKLXsgICAgCit7
CiAgICAgUmVmUHRyPENTU1N0eWxlU2hlZXQ+IGR1bW15U3R5bGVTaGVldCA9IENTU1N0eWxlU2hl
ZXQ6OmNyZWF0ZShkb2MpOwogCiAgICAgbV9zdHlsZVNoZWV0ID0gZHVtbXlTdHlsZVNoZWV0Lmdl
dCgpOwpAQCAtNTA0LDcgKzUwNiw3IEBAIHN0YXRpYyBpbnQgdW5pdEZyb21TdHJpbmcoQ1NTUGFy
c2VyVmFsdWUqIHZhbHVlKQogICAgICAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19I
WjsKICAgICBpZiAoZXF1YWwodmFsdWUtPnN0cmluZywgImtIeiIpKQogICAgICAgICByZXR1cm4g
Q1NTUHJpbWl0aXZlVmFsdWU6OkNTU19LSFo7Ci0gICAgCisKICAgICByZXR1cm4gMDsKIH0KIApA
QCAtNTEyLDcgKzUxNCw3IEBAIHZvaWQgQ1NTUGFyc2VyOjpjaGVja0Zvck9ycGhhbmVkVW5pdHMo
KQogewogICAgIGlmIChtX3N0cmljdCB8fCBpblNob3J0aGFuZCgpKQogICAgICAgICByZXR1cm47
Ci0gICAgICAgIAorCiAgICAgLy8gVGhlIHB1cnBvc2Ugb2YgdGhpcyBjb2RlIGlzIHRvIGltcGxl
bWVudCB0aGUgV2luSUUgcXVpcmsgdGhhdCBhbGxvd3MgdW5pdCB0eXBlcyB0byBiZSBzZXBhcmF0
ZWQgZnJvbSB0aGVpciBudW1lcmljIHZhbHVlcwogICAgIC8vIGJ5IHdoaXRlc3BhY2UsIHNvIGUu
Zy4sIHdpZHRoOiAyMCBweCBpbnN0ZWFkIG9mIHdpZHRoOjIwcHguICBUaGlzIGlzIGludmFsaWQg
Q1NTLCBzbyB3ZSBkb24ndCBkbyB0aGlzIGluIHN0cmljdCBtb2RlLgogICAgIENTU1BhcnNlclZh
bHVlKiBudW1lcmljVmFsID0gMDsKQEAgLTUzNCw3ICs1MzYsNyBAQCB2b2lkIENTU1BhcnNlcjo6
Y2hlY2tGb3JPcnBoYW5lZFVuaXRzKCkKICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgICAgIH0KICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBudW1lcmljVmFsID0gKHZh
bHVlLT51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKSA/IHZhbHVlIDogMDsK
ICAgICB9CiB9CkBAIC01NTQsNyArNTU2LDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlVmFsdWUo
aW50IHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgLy8gSW4gcXVpcmtzIG1vZGUsIHdlIHdp
bGwgbG9vayBmb3IgdW5pdHMgdGhhdCBoYXZlIGJlZW4gaW5jb3JyZWN0bHkgc2VwYXJhdGVkIGZy
b20gdGhlIG51bWJlciB0aGV5IGJlbG9uZyB0bwogICAgIC8vIGJ5IGEgc3BhY2UuICBXZSBnbyBh
aGVhZCBhbmQgYXNzb2NpYXRlIHRoZSB1bml0IHdpdGggdGhlIG51bWJlciBldmVuIHRob3VnaCBp
dCBpcyBpbnZhbGlkIENTUy4KICAgICBjaGVja0Zvck9ycGhhbmVkVW5pdHMoKTsKLSAgICAKKwog
ICAgIGludCBudW0gPSBpblNob3J0aGFuZCgpID8gMSA6IG1fdmFsdWVMaXN0LT5zaXplKCk7CiAK
ICAgICBpZiAoaWQgPT0gQ1NTVmFsdWVJbmhlcml0KSB7CkBAIC03NDcsOCArNzQ5LDggQEAgYm9v
bCBDU1NQYXJzZXI6OnBhcnNlVmFsdWUoaW50IHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAg
Y2FzZSBDU1NQcm9wZXJ0eU91dGxpbmVTdHlsZTogICAgICAgIC8vICg8Ym9yZGVyLXN0eWxlPiBl
eGNlcHQgaGlkZGVuKSB8IGF1dG8gfCBpbmhlcml0CiAgICAgICAgIGlmIChpZCA9PSBDU1NWYWx1
ZUF1dG8gfHwgaWQgPT0gQ1NTVmFsdWVOb25lIHx8IChpZCA+PSBDU1NWYWx1ZUluc2V0ICYmIGlk
IDw9IENTU1ZhbHVlRG91YmxlKSkKICAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsK
LSAgICAgICAgYnJlYWs7IAotICAgICAgICAKKyAgICAgICAgYnJlYWs7CisKICAgICBjYXNlIENT
U1Byb3BlcnR5Qm9yZGVyVG9wU3R5bGU6ICAgICAvLy8vIDxib3JkZXItc3R5bGU+IHwgaW5oZXJp
dAogICAgIGNhc2UgQ1NTUHJvcGVydHlCb3JkZXJSaWdodFN0eWxlOiAgIC8vICAgRGVmaW5lZCBh
czogICAgbm9uZSB8IGhpZGRlbiB8IGRvdHRlZCB8IGRhc2hlZCB8CiAgICAgY2FzZSBDU1NQcm9w
ZXJ0eUJvcmRlckJvdHRvbVN0eWxlOiAgLy8gICBzb2xpZCB8IGRvdWJsZSB8IGdyb292ZSB8IHJp
ZGdlIHwgaW5zZXQgfCBvdXRzZXQKQEAgLTgyMSwxNCArODIzLDE0IEBAIGJvb2wgQ1NTUGFyc2Vy
OjpwYXJzZVZhbHVlKGludCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQogCiAgICAgY2FzZSBDU1NQ
cm9wZXJ0eUN1cnNvcjogewogICAgICAgICAvLyBbPHVyaT4sXSogIFsgYXV0byB8IGNyb3NzaGFp
ciB8IGRlZmF1bHQgfCBwb2ludGVyIHwgcHJvZ3Jlc3MgfCBtb3ZlIHwgZS1yZXNpemUgfCBuZS1y
ZXNpemUgfAotICAgICAgICAvLyBudy1yZXNpemUgfCBuLXJlc2l6ZSB8IHNlLXJlc2l6ZSB8IHN3
LXJlc2l6ZSB8IHMtcmVzaXplIHwgdy1yZXNpemUgfCBldy1yZXNpemUgfCAKKyAgICAgICAgLy8g
bnctcmVzaXplIHwgbi1yZXNpemUgfCBzZS1yZXNpemUgfCBzdy1yZXNpemUgfCBzLXJlc2l6ZSB8
IHctcmVzaXplIHwgZXctcmVzaXplIHwKICAgICAgICAgLy8gbnMtcmVzaXplIHwgbmVzdy1yZXNp
emUgfCBud3NlLXJlc2l6ZSB8IGNvbC1yZXNpemUgfCByb3ctcmVzaXplIHwgdGV4dCB8IHdhaXQg
fCBoZWxwIHwKICAgICAgICAgLy8gdmVydGljYWwtdGV4dCB8IGNlbGwgfCBjb250ZXh0LW1lbnUg
fCBhbGlhcyB8IGNvcHkgfCBuby1kcm9wIHwgbm90LWFsbG93ZWQgfCAtd2Via2l0LXpvb20taW4K
ICAgICAgICAgLy8gLXdlYmtpdC16b29tLWluIHwgLXdlYmtpdC16b29tLW91dCB8IGFsbC1zY3Jv
bGwgfCAtd2Via2l0LWdyYWIgfCAtd2Via2l0LWdyYWJiaW5nIF0gXSB8IGluaGVyaXQKICAgICAg
ICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gbGlzdDsKICAgICAgICAgd2hpbGUgKHZhbHVlICYmIHZh
bHVlLT51bml0ID09IENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfVVJJKSB7CiAgICAgICAgICAgICBp
ZiAoIWxpc3QpCi0gICAgICAgICAgICAgICAgbGlzdCA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlQ29t
bWFTZXBhcmF0ZWQoKTsgCisgICAgICAgICAgICAgICAgbGlzdCA9IENTU1ZhbHVlTGlzdDo6Y3Jl
YXRlQ29tbWFTZXBhcmF0ZWQoKTsKICAgICAgICAgICAgIFN0cmluZyB1cmkgPSB2YWx1ZS0+c3Ry
aW5nOwogICAgICAgICAgICAgVmVjdG9yPGludD4gY29vcmRzOwogICAgICAgICAgICAgdmFsdWUg
PSBtX3ZhbHVlTGlzdC0+bmV4dCgpOwpAQCAtODQyLDcgKzg0NCw3IEBAIGJvb2wgQ1NTUGFyc2Vy
OjpwYXJzZVZhbHVlKGludCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQogICAgICAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIGlmIChucmNvb3JkcyA9PSAyKQogICAgICAgICAg
ICAgICAgIGhvdHNwb3QgPSBJbnRQb2ludChjb29yZHNbMF0sIGNvb3Jkc1sxXSk7Ci0gICAgICAg
ICAgCisKICAgICAgICAgICAgIGlmICghdXJpLmlzTnVsbCgpICYmIG1fc3R5bGVTaGVldCkgewog
ICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBUaGUgY29tcGxldGVVUkwgY2FsbCBzaG91bGQgYmUg
ZG9uZSB3aGVuIHVzaW5nIHRoZSBDU1NDdXJzb3JJbWFnZVZhbHVlLAogICAgICAgICAgICAgICAg
IC8vIG5vdCB3aGVuIGNyZWF0aW5nIGl0LgpAQCAtMTExMyw3ICsxMTE1LDcgQEAgYm9vbCBDU1NQ
YXJzZXI6OnBhcnNlVmFsdWUoaW50IHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgICAgIGVs
c2UKICAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gKCFpZCAmJiB2YWxpZFVuaXQodmFsdWUs
IEZOdW1iZXIgfCBGUGVyY2VudCB8IEZOb25OZWcsIHRydWUpKTsKICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgIAorCiAgICAgY2FzZSBDU1NQcm9wZXJ0eVRhYmxlTGF5b3V0OiAgICAgICAgIC8vIGF1
dG8gfCBmaXhlZCB8IGluaGVyaXQKICAgICAgICAgaWYgKGlkID09IENTU1ZhbHVlQXV0byB8fCBp
ZCA9PSBDU1NWYWx1ZUZpeGVkKQogICAgICAgICAgICAgdmFsaWRQcmltaXRpdmUgPSB0cnVlOwpA
QCAtMTE0Nyw3ICsxMTQ5LDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlVmFsdWUoaW50IHByb3BJ
ZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIGlm
ICghcGFyc2VkVmFsdWUpCiAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
ICAgIAorCiAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFdlIGNhbid0IHVzZSByZWxlYXNlKCkg
aGVyZSBzaW5jZSB3ZSBtaWdodCBoaXQgdGhpcyBwYXRoIHR3aWNlCiAgICAgICAgICAgICAgICAg
Ly8gYnV0IHRoYXQgbG9naWMgc2VlbXMgd3JvbmcgdG8gbWUgdG8gYmVnaW4gd2l0aCwgd2UgY29u
dmVydCBhbGwgbm9uLXVyaSB2YWx1ZXMKICAgICAgICAgICAgICAgICAvLyBpbnRvIHRoZSBsYXN0
IHNlZW4gVVJJIHZhbHVlIT8KQEAgLTExNTgsNyArMTE2MCw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpw
YXJzZVZhbHVlKGludCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQogICAgICAgICAgICAgfQogICAg
ICAgICAgICAgaWYgKCF2YWx1ZXMtPmxlbmd0aCgpKQogICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBhZGRQcm9wZXJ0eShwcm9wSWQsIHZh
bHVlcy5yZWxlYXNlKCksIGltcG9ydGFudCk7CiAgICAgICAgICAgICBtX3ZhbHVlTGlzdC0+bmV4
dCgpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CkBAIC0xNDk5LDcgKzE1MDEsNyBAQCBib29s
IENTU1BhcnNlcjo6cGFyc2VWYWx1ZShpbnQgcHJvcElkLCBib29sIGltcG9ydGFudCkKICAgICAg
ICAgICAgIChpZCA+PSBDU1NWYWx1ZVZpc2libGVwYWludGVkICYmIGlkIDw9IENTU1ZhbHVlU3Ry
b2tlKSkKICAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAKKwogICAgIC8vIEVuZCBvZiBDU1MzIHByb3BlcnRpZXMKIAogICAgIC8v
IEFwcGxlIHNwZWNpZmljIHByb3BlcnRpZXMuICBUaGVzZSB3aWxsIG5ldmVyIGJlIHN0YW5kYXJk
aXplZCBhbmQgYXJlIHB1cmVseSB0bwpAQCAtMTUxNyw3ICsxNTE5LDcgQEAgYm9vbCBDU1NQYXJz
ZXI6OnBhcnNlVmFsdWUoaW50IHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgICAgIGlmIChp
ZCA9PSBDU1NWYWx1ZUxvZ2ljYWwgfHwgaWQgPT0gQ1NTVmFsdWVWaXN1YWwpCiAgICAgICAgICAg
ICB2YWxpZFByaW1pdGl2ZSA9IHRydWU7CiAgICAgICAgIGJyZWFrOwotICAgIAorCiAgICAgY2Fz
ZSBDU1NQcm9wZXJ0eVdlYmtpdEZvbnRTaXplRGVsdGE6ICAgICAgICAgICAvLyA8bGVuZ3RoPgog
ICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHZhbGlkVW5pdCh2YWx1ZSwgRkxlbmd0aCwgbV9zdHJp
Y3QpOwogICAgICAgICBicmVhazsKQEAgLTE1NDEsMTIgKzE1NDMsMTIgQEAgYm9vbCBDU1NQYXJz
ZXI6OnBhcnNlVmFsdWUoaW50IHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgICAgIGlmIChp
ZCA9PSBDU1NWYWx1ZU5vbmUgfHwgdmFsdWUtPnVuaXQgPT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNT
U19TVFJJTkcpCiAgICAgICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHRydWU7CiAgICAgICAgIGJy
ZWFrOwotICAgIAorCiAgICAgY2FzZSBDU1NQcm9wZXJ0eVdlYmtpdEJvcmRlckZpdDoKICAgICAg
ICAgaWYgKGlkID09IENTU1ZhbHVlQm9yZGVyIHx8IGlkID09IENTU1ZhbHVlTGluZXMpCiAgICAg
ICAgICAgICB2YWxpZFByaW1pdGl2ZSA9IHRydWU7CiAgICAgICAgIGJyZWFrOwotICAgICAgICAK
KwogICAgIGNhc2UgQ1NTUHJvcGVydHlXZWJraXRUZXh0U2VjdXJpdHk6CiAgICAgICAgIC8vIGRp
c2MgfCBjaXJjbGUgfCBzcXVhcmUgfCBub25lIHwgaW5oZXJpdAogICAgICAgICBpZiAoaWQgPT0g
Q1NTVmFsdWVEaXNjIHx8IGlkID09IENTU1ZhbHVlQ2lyY2xlIHx8IGlkID09IENTU1ZhbHVlU3F1
YXJlfHwgaWQgPT0gQ1NTVmFsdWVOb25lKQpAQCAtMTU1NCwxMyArMTU1NiwxMyBAQCBib29sIENT
U1BhcnNlcjo6cGFyc2VWYWx1ZShpbnQgcHJvcElkLCBib29sIGltcG9ydGFudCkKICAgICAgICAg
YnJlYWs7CiAKICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0Rm9udFNtb290aGluZzoKLSAgICAg
ICAgaWYgKGlkID09IENTU1ZhbHVlQXV0byB8fCBpZCA9PSBDU1NWYWx1ZU5vbmUgCisgICAgICAg
IGlmIChpZCA9PSBDU1NWYWx1ZUF1dG8gfHwgaWQgPT0gQ1NTVmFsdWVOb25lCiAgICAgICAgICAg
ICB8fCBpZCA9PSBDU1NWYWx1ZUFudGlhbGlhc2VkIHx8IGlkID09IENTU1ZhbHVlU3VicGl4ZWxB
bnRpYWxpYXNlZCkKICAgICAgICAgICAgIHZhbGlkUHJpbWl0aXZlID0gdHJ1ZTsKICAgICAgICAg
YnJlYWs7CiAKICNpZiBFTkFCTEUoREFTSEJPQVJEX1NVUFBPUlQpCi0gICAgY2FzZSBDU1NQcm9w
ZXJ0eVdlYmtpdERhc2hib2FyZFJlZ2lvbjogICAgICAgICAgICAgICAgIC8vIDxkYXNoYm9hcmQt
cmVnaW9uPiB8IDxkYXNoYm9hcmQtcmVnaW9uPiAKKyAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0
RGFzaGJvYXJkUmVnaW9uOiAgICAgICAgICAgICAgICAgLy8gPGRhc2hib2FyZC1yZWdpb24+IHwg
PGRhc2hib2FyZC1yZWdpb24+CiAgICAgICAgIGlmICh2YWx1ZS0+dW5pdCA9PSBDU1NQYXJzZXJW
YWx1ZTo6RnVuY3Rpb24gfHwgaWQgPT0gQ1NTVmFsdWVOb25lKQogICAgICAgICAgICAgcmV0dXJu
IHBhcnNlRGFzaGJvYXJkUmVnaW9ucyhwcm9wSWQsIGltcG9ydGFudCk7CiAgICAgICAgIGJyZWFr
OwpAQCAtMTU3MiwxMyArMTU3NCwxMyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VWYWx1ZShpbnQg
cHJvcElkLCBib29sIGltcG9ydGFudCkKICAgICAgICAgLy8gUG9zaXRpb24gbXVzdCBjb21lIGJl
Zm9yZSBjb2xvciBpbiB0aGlzIGFycmF5IGJlY2F1c2UgYSBwbGFpbiBvbGQgIjAiIGlzIGEgbGVn
YWwgY29sb3IKICAgICAgICAgLy8gaW4gcXVpcmtzIG1vZGUgYnV0IGl0J3MgdXN1YWxseSB0aGUg
WCBjb29yZGluYXRlIG9mIGEgcG9zaXRpb24uCiAgICAgICAgIC8vIEZJWE1FOiBBZGQgQ1NTUHJv
cGVydHlCYWNrZ3JvdW5kU2l6ZSB0byB0aGUgc2hvcnRoYW5kLgotICAgICAgICBjb25zdCBpbnQg
cHJvcGVydGllc1tdID0geyBDU1NQcm9wZXJ0eUJhY2tncm91bmRJbWFnZSwgQ1NTUHJvcGVydHlC
YWNrZ3JvdW5kUmVwZWF0LCAKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NT
UHJvcGVydHlCYWNrZ3JvdW5kQXR0YWNobWVudCwgQ1NTUHJvcGVydHlCYWNrZ3JvdW5kUG9zaXRp
b24sIENTU1Byb3BlcnR5QmFja2dyb3VuZE9yaWdpbiwgCisgICAgICAgIGNvbnN0IGludCBwcm9w
ZXJ0aWVzW10gPSB7IENTU1Byb3BlcnR5QmFja2dyb3VuZEltYWdlLCBDU1NQcm9wZXJ0eUJhY2tn
cm91bmRSZXBlYXQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTU1Byb3Bl
cnR5QmFja2dyb3VuZEF0dGFjaG1lbnQsIENTU1Byb3BlcnR5QmFja2dyb3VuZFBvc2l0aW9uLCBD
U1NQcm9wZXJ0eUJhY2tncm91bmRPcmlnaW4sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIENTU1Byb3BlcnR5QmFja2dyb3VuZENvbG9yIH07CiAgICAgICAgIHJldHVybiBwYXJz
ZUZpbGxTaG9ydGhhbmQocHJvcElkLCBwcm9wZXJ0aWVzLCA2LCBpbXBvcnRhbnQpOwogICAgIH0K
ICAgICBjYXNlIENTU1Byb3BlcnR5V2Via2l0TWFzazogewotICAgICAgICBjb25zdCBpbnQgcHJv
cGVydGllc1tdID0geyBDU1NQcm9wZXJ0eVdlYmtpdE1hc2tJbWFnZSwgQ1NTUHJvcGVydHlXZWJr
aXRNYXNrUmVwZWF0LCAKKyAgICAgICAgY29uc3QgaW50IHByb3BlcnRpZXNbXSA9IHsgQ1NTUHJv
cGVydHlXZWJraXRNYXNrSW1hZ2UsIENTU1Byb3BlcnR5V2Via2l0TWFza1JlcGVhdCwKICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTUHJvcGVydHlXZWJraXRNYXNrQXR0YWNo
bWVudCwgQ1NTUHJvcGVydHlXZWJraXRNYXNrUG9zaXRpb24sCiAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIENTU1Byb3BlcnR5V2Via2l0TWFza09yaWdpbiB9OwogICAgICAgICBy
ZXR1cm4gcGFyc2VGaWxsU2hvcnRoYW5kKHByb3BJZCwgcHJvcGVydGllcywgNSwgaW1wb3J0YW50
KTsKQEAgLTE3NTEsOCArMTc1Myw4IEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IENTU1BhcnNlcjo6
cGFyc2VXQ1NTSW5wdXRQcm9wZXJ0eSgpCiAgICAgICAgcGFyc2VkVmFsdWUgPSBDU1NQcmltaXRp
dmVWYWx1ZTo6Y3JlYXRlKGlucHV0UHJvcGVydHksIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfU1RS
SU5HKTsKIAogICAgIHdoaWxlIChtX3ZhbHVlTGlzdC0+bmV4dCgpKSB7Ci0gICAgLy8gcGFzcyBh
bGwgb3RoZXIgdmFsdWVzLCBpZiBhbnkuIElmIHdlIGRvbid0IGRvIHRoaXMsIAotICAgIC8vIHRo
ZSBwYXJzZXIgd2lsbCB0aGluayB0aGF0IGl0J3Mgbm90IGRvbmUgYW5kIHdvbid0IHByb2Nlc3Mg
dGhpcyBwcm9wZXJ0eSAgCisgICAgLy8gcGFzcyBhbGwgb3RoZXIgdmFsdWVzLCBpZiBhbnkuIElm
IHdlIGRvbid0IGRvIHRoaXMsCisgICAgLy8gdGhlIHBhcnNlciB3aWxsIHRoaW5rIHRoYXQgaXQn
cyBub3QgZG9uZSBhbmQgd29uJ3QgcHJvY2VzcyB0aGlzIHByb3BlcnR5CiAgICAgfQogCiAgICAg
cmV0dXJuIHBhcnNlZFZhbHVlOwpAQCAtMTgyOSw3ICsxODMxLDcgQEAgYm9vbCBDU1NQYXJzZXI6
OnBhcnNlRmlsbFNob3J0aGFuZChpbnQgcHJvcElkLCBjb25zdCBpbnQqIHByb3BlcnRpZXMsIGlu
dCBudW1Qcm8KICAgICAgICAgICAgIGlmICghbV92YWx1ZUxpc3QtPmN1cnJlbnQoKSkKICAgICAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBib29sIGZv
dW5kID0gZmFsc2U7CiAgICAgICAgIGZvciAoaSA9IDA7ICFmb3VuZCAmJiBpIDwgbnVtUHJvcGVy
dGllczsgKytpKSB7CiAgICAgICAgICAgICBpZiAoIXBhcnNlZFByb3BlcnR5W2ldKSB7CkBAIC0x
ODYwLDcgKzE4NjIsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VGaWxsU2hvcnRoYW5kKGludCBw
cm9wSWQsIGNvbnN0IGludCogcHJvcGVydGllcywgaW50IG51bVBybwogICAgICAgICBpZiAoIWZv
dW5kKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICAKKwogICAgIC8vIEZp
bGwgaW4gYW55IHJlbWFpbmluZyBwcm9wZXJ0aWVzIHdpdGggdGhlIGluaXRpYWwgdmFsdWUuCiAg
ICAgZm9yIChpID0gMDsgaSA8IG51bVByb3BlcnRpZXM7ICsraSkgewogICAgICAgICBpZiAoIXBh
cnNlZFByb3BlcnR5W2ldKSB7CkBAIC0xODc1LDcgKzE4NzcsNyBAQCBib29sIENTU1BhcnNlcjo6
cGFyc2VGaWxsU2hvcnRoYW5kKGludCBwcm9wSWQsIGNvbnN0IGludCogcHJvcGVydGllcywgaW50
IG51bVBybwogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgLy8g
Tm93IGFkZCBhbGwgb2YgdGhlIHByb3BlcnRpZXMgd2UgZm91bmQuCiAgICAgZm9yIChpID0gMDsg
aSA8IG51bVByb3BlcnRpZXM7IGkrKykgewogICAgICAgICBpZiAocHJvcGVydGllc1tpXSA9PSBD
U1NQcm9wZXJ0eUJhY2tncm91bmRQb3NpdGlvbikgewpAQCAtMTg5Niw3ICsxODk4LDcgQEAgYm9v
bCBDU1NQYXJzZXI6OnBhcnNlRmlsbFNob3J0aGFuZChpbnQgcHJvcElkLCBjb25zdCBpbnQqIHBy
b3BlcnRpZXMsIGludCBudW1Qcm8KICAgICAgICAgICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5
V2Via2l0TWFza1JlcGVhdFksIHJlcGVhdFlWYWx1ZS5yZWxlYXNlKCksIGltcG9ydGFudCk7CiAg
ICAgICAgIH0gZWxzZQogICAgICAgICAgICAgYWRkUHJvcGVydHkocHJvcGVydGllc1tpXSwgdmFs
dWVzW2ldLnJlbGVhc2UoKSwgaW1wb3J0YW50KTsKLSAgICAgICAgICAgIAorCiAgICAgICAgIC8v
IEFkZCBpbiBjbGlwIHZhbHVlcyB3aGVuIHdlIGhpdCB0aGUgY29ycmVzcG9uZGluZyBvcmlnaW4g
cHJvcGVydHkuCiAgICAgICAgIGlmIChwcm9wZXJ0aWVzW2ldID09IENTU1Byb3BlcnR5QmFja2dy
b3VuZE9yaWdpbikKICAgICAgICAgICAgIGFkZFByb3BlcnR5KENTU1Byb3BlcnR5QmFja2dyb3Vu
ZENsaXAsIGNsaXBWYWx1ZS5yZWxlYXNlKCksIGltcG9ydGFudCk7CkBAIC0xOTM0LDEyICsxOTM2
LDEyIEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUFuaW1hdGlvblNob3J0aGFuZChib29sIGltcG9y
dGFudCkKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTUHJvcGVydHlXZWJraXRB
bmltYXRpb25EaXJlY3Rpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENTU1By
b3BlcnR5V2Via2l0QW5pbWF0aW9uRmlsbE1vZGUgfTsKICAgICBjb25zdCBpbnQgbnVtUHJvcGVy
dGllcyA9IHNpemVvZihwcm9wZXJ0aWVzKSAvIHNpemVvZihwcm9wZXJ0aWVzWzBdKTsKLSAgICAK
KwogICAgIFNob3J0aGFuZFNjb3BlIHNjb3BlKHRoaXMsIENTU1Byb3BlcnR5V2Via2l0QW5pbWF0
aW9uKTsKIAogICAgIGJvb2wgcGFyc2VkUHJvcGVydHlbbnVtUHJvcGVydGllc10gPSB7IGZhbHNl
IH07IC8vIGNvbXBpbGVyIHdpbGwgcmVwZWF0IGZhbHNlIGFzIG5lY2Vzc2FyeQogICAgIFJlZlB0
cjxDU1NWYWx1ZT4gdmFsdWVzW251bVByb3BlcnRpZXNdOwotICAgIAorCiAgICAgaW50IGk7CiAg
ICAgd2hpbGUgKG1fdmFsdWVMaXN0LT5jdXJyZW50KCkpIHsKICAgICAgICAgQ1NTUGFyc2VyVmFs
dWUqIHZhbCA9IG1fdmFsdWVMaXN0LT5jdXJyZW50KCk7CkBAIC0xOTU0LDcgKzE5NTYsNyBAQCBi
b29sIENTU1BhcnNlcjo6cGFyc2VBbmltYXRpb25TaG9ydGhhbmQoYm9vbCBpbXBvcnRhbnQpCiAg
ICAgICAgICAgICBpZiAoIW1fdmFsdWVMaXN0LT5jdXJyZW50KCkpCiAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgYm9vbCBmb3VuZCA9IGZhbHNl
OwogICAgICAgICBmb3IgKGkgPSAwOyAhZm91bmQgJiYgaSA8IG51bVByb3BlcnRpZXM7ICsraSkg
ewogICAgICAgICAgICAgaWYgKCFwYXJzZWRQcm9wZXJ0eVtpXSkgewpAQCAtMTk3MSwxNyArMTk3
MywxNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VBbmltYXRpb25TaG9ydGhhbmQoYm9vbCBpbXBv
cnRhbnQpCiAgICAgICAgIGlmICghZm91bmQpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgfQotICAgIAorCiAgICAgLy8gRmlsbCBpbiBhbnkgcmVtYWluaW5nIHByb3BlcnRpZXMgd2l0
aCB0aGUgaW5pdGlhbCB2YWx1ZS4KICAgICBmb3IgKGkgPSAwOyBpIDwgbnVtUHJvcGVydGllczsg
KytpKSB7CiAgICAgICAgIGlmICghcGFyc2VkUHJvcGVydHlbaV0pCiAgICAgICAgICAgICBhZGRB
bmltYXRpb25WYWx1ZSh2YWx1ZXNbaV0sIENTU0luaXRpYWxWYWx1ZTo6Y3JlYXRlSW1wbGljaXQo
KSk7CiAgICAgfQotICAgIAorCiAgICAgLy8gTm93IGFkZCBhbGwgb2YgdGhlIHByb3BlcnRpZXMg
d2UgZm91bmQuCiAgICAgZm9yIChpID0gMDsgaSA8IG51bVByb3BlcnRpZXM7IGkrKykKICAgICAg
ICAgYWRkUHJvcGVydHkocHJvcGVydGllc1tpXSwgdmFsdWVzW2ldLnJlbGVhc2UoKSwgaW1wb3J0
YW50KTsKLSAgICAKKwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0xOTkyLDEyICsxOTk0LDEy
IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVRyYW5zaXRpb25TaG9ydGhhbmQoYm9vbCBpbXBvcnRh
bnQpCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NTUHJvcGVydHlXZWJraXRUcmFu
c2l0aW9uVGltaW5nRnVuY3Rpb24sCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ1NT
UHJvcGVydHlXZWJraXRUcmFuc2l0aW9uRGVsYXkgfTsKICAgICBjb25zdCBpbnQgbnVtUHJvcGVy
dGllcyA9IHNpemVvZihwcm9wZXJ0aWVzKSAvIHNpemVvZihwcm9wZXJ0aWVzWzBdKTsKLSAgICAK
KwogICAgIFNob3J0aGFuZFNjb3BlIHNjb3BlKHRoaXMsIENTU1Byb3BlcnR5V2Via2l0VHJhbnNp
dGlvbik7CiAKICAgICBib29sIHBhcnNlZFByb3BlcnR5W251bVByb3BlcnRpZXNdID0geyBmYWxz
ZSB9OyAvLyBjb21waWxlciB3aWxsIHJlcGVhdCBmYWxzZSBhcyBuZWNlc3NhcnkKICAgICBSZWZQ
dHI8Q1NTVmFsdWU+IHZhbHVlc1tudW1Qcm9wZXJ0aWVzXTsKLSAgICAKKwogICAgIGludCBpOwog
ICAgIHdoaWxlIChtX3ZhbHVlTGlzdC0+Y3VycmVudCgpKSB7CiAgICAgICAgIENTU1BhcnNlclZh
bHVlKiB2YWwgPSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpOwpAQCAtMjAxMiw3ICsyMDE0LDcgQEAg
Ym9vbCBDU1NQYXJzZXI6OnBhcnNlVHJhbnNpdGlvblNob3J0aGFuZChib29sIGltcG9ydGFudCkK
ICAgICAgICAgICAgIGlmICghbV92YWx1ZUxpc3QtPmN1cnJlbnQoKSkKICAgICAgICAgICAgICAg
ICBicmVhazsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBib29sIGZvdW5kID0gZmFs
c2U7CiAgICAgICAgIGZvciAoaSA9IDA7ICFmb3VuZCAmJiBpIDwgbnVtUHJvcGVydGllczsgKytp
KSB7CiAgICAgICAgICAgICBpZiAoIXBhcnNlZFByb3BlcnR5W2ldKSB7CkBAIC0yMDI5LDE3ICsy
MDMxLDE3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVRyYW5zaXRpb25TaG9ydGhhbmQoYm9vbCBp
bXBvcnRhbnQpCiAgICAgICAgIGlmICghZm91bmQpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CiAgICAgfQotICAgIAorCiAgICAgLy8gRmlsbCBpbiBhbnkgcmVtYWluaW5nIHByb3BlcnRpZXMg
d2l0aCB0aGUgaW5pdGlhbCB2YWx1ZS4KICAgICBmb3IgKGkgPSAwOyBpIDwgbnVtUHJvcGVydGll
czsgKytpKSB7CiAgICAgICAgIGlmICghcGFyc2VkUHJvcGVydHlbaV0pCiAgICAgICAgICAgICBh
ZGRBbmltYXRpb25WYWx1ZSh2YWx1ZXNbaV0sIENTU0luaXRpYWxWYWx1ZTo6Y3JlYXRlSW1wbGlj
aXQoKSk7CiAgICAgfQotICAgIAorCiAgICAgLy8gTm93IGFkZCBhbGwgb2YgdGhlIHByb3BlcnRp
ZXMgd2UgZm91bmQuCiAgICAgZm9yIChpID0gMDsgaSA8IG51bVByb3BlcnRpZXM7IGkrKykKICAg
ICAgICAgYWRkUHJvcGVydHkocHJvcGVydGllc1tpXSwgdmFsdWVzW2ldLnJlbGVhc2UoKSwgaW1w
b3J0YW50KTsKLSAgICAKKwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0yMDY5LDcgKzIwNzEs
NyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VTaG9ydGhhbmQoaW50IHByb3BJZCwgY29uc3QgaW50
ICpwcm9wZXJ0aWVzLCBpbnQgbnVtUHJvcGVydAogICAgICAgICBpZiAoIWZvdW5kKQogICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICAKKwogICAgIC8vIEZpbGwgaW4gYW55IHJl
bWFpbmluZyBwcm9wZXJ0aWVzIHdpdGggdGhlIGluaXRpYWwgdmFsdWUuCiAgICAgbV9pbXBsaWNp
dFNob3J0aGFuZCA9IHRydWU7CiAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBudW1Qcm9wZXJ0aWVz
OyArK2kpIHsKQEAgLTIwOTAsOSArMjA5Miw5IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZTRWYWx1
ZXMoaW50IHByb3BJZCwgY29uc3QgaW50ICpwcm9wZXJ0aWVzLCAgYm9vbCBpbXBvcnRhbnQpCiAg
ICAgICogc2Vjb25kLCBhbmQgdGhlIGJvdHRvbSBpcyBzZXQgdG8gdGhlIHRoaXJkLiBJZiB0aGVy
ZSBhcmUgZm91ciB2YWx1ZXMsIHRoZXkgYXBwbHkgdG8gdGhlIHRvcCwKICAgICAgKiByaWdodCwg
Ym90dG9tLCBhbmQgbGVmdCwgcmVzcGVjdGl2ZWx5LgogICAgICAqLwotICAgIAorCiAgICAgaW50
IG51bSA9IGluU2hvcnRoYW5kKCkgPyAxIDogbV92YWx1ZUxpc3QtPnNpemUoKTsKLSAgICAKKwog
ICAgIFNob3J0aGFuZFNjb3BlIHNjb3BlKHRoaXMsIHByb3BJZCk7CiAKICAgICAvLyB0aGUgb3Jk
ZXIgaXMgdG9wLCByaWdodCwgYm90dG9tLCBsZWZ0CkBAIC0yMTM4LDcgKzIxNDAsNyBAQCBib29s
IENTU1BhcnNlcjo6cGFyc2U0VmFsdWVzKGludCBwcm9wSWQsIGNvbnN0IGludCAqcHJvcGVydGll
cywgIGJvb2wgaW1wb3J0YW50KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICB9
CiAgICAgfQotICAgIAorCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKQEAgLTIzMTksNyArMjMyMSw3
IEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VBdHRyKENTU1BhcnNlclZh
bHVlTGlzdCogYXJncykKIAogICAgIGlmIChkb2N1bWVudCgpICYmIGRvY3VtZW50KCktPmlzSFRN
TERvY3VtZW50KCkpCiAgICAgICAgIGF0dHJOYW1lID0gYXR0ck5hbWUubG93ZXIoKTsKLSAgICAK
KwogICAgIHJldHVybiBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKGF0dHJOYW1lLCBDU1NQcmlt
aXRpdmVWYWx1ZTo6Q1NTX0FUVFIpOwogfQogCkBAIC0yMzgzLDI5ICsyMzg1LDI5IEBAIFBhc3NS
ZWZQdHI8Q1NTVmFsdWU+IENTU1BhcnNlcjo6cGFyc2VGaWxsUG9zaXRpb25YWShib29sJiB4Rm91
bmQsIGJvb2wmIHlGb3VuZCkKICAgICBpZiAodmFsaWRVbml0KG1fdmFsdWVMaXN0LT5jdXJyZW50
KCksIEZQZXJjZW50IHwgRkxlbmd0aCwgbV9zdHJpY3QpKQogICAgICAgICByZXR1cm4gQ1NTUHJp
bWl0aXZlVmFsdWU6OmNyZWF0ZShtX3ZhbHVlTGlzdC0+Y3VycmVudCgpLT5mVmFsdWUsCiAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChDU1NQcmltaXRpdmVWYWx1ZTo6
VW5pdFR5cGVzKW1fdmFsdWVMaXN0LT5jdXJyZW50KCktPnVuaXQpOwotICAgICAgICAgICAgICAg
IAorCiAgICAgcmV0dXJuIDA7CiB9CiAKIHZvaWQgQ1NTUGFyc2VyOjpwYXJzZUZpbGxQb3NpdGlv
bihSZWZQdHI8Q1NTVmFsdWU+JiB2YWx1ZTEsIFJlZlB0cjxDU1NWYWx1ZT4mIHZhbHVlMikKIHsK
ICAgICBDU1NQYXJzZXJWYWx1ZSogdmFsdWUgPSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpOwotICAg
IAorCiAgICAgLy8gUGFyc2UgdGhlIGZpcnN0IHZhbHVlLiAgV2UncmUganVzdCBtYWtpbmcgc3Vy
ZSB0aGF0IGl0IGlzIG9uZSBvZiB0aGUgdmFsaWQga2V5d29yZHMgb3IgYSBwZXJjZW50YWdlL2xl
bmd0aC4KICAgICBib29sIHZhbHVlMUlzWCA9IGZhbHNlLCB2YWx1ZTFJc1kgPSBmYWxzZTsKICAg
ICB2YWx1ZTEgPSBwYXJzZUZpbGxQb3NpdGlvblhZKHZhbHVlMUlzWCwgdmFsdWUxSXNZKTsKICAg
ICBpZiAoIXZhbHVlMSkKICAgICAgICAgcmV0dXJuOwotICAgIAorCiAgICAgLy8gSXQgb25seSB0
YWtlcyBvbmUgdmFsdWUgZm9yIGJhY2tncm91bmQtcG9zaXRpb24gdG8gYmUgY29ycmVjdGx5IHBh
cnNlZCBpZiBpdCB3YXMgc3BlY2lmaWVkIGluIGEgc2hvcnRoYW5kIChzaW5jZSB3ZQogICAgIC8v
IGNhbiBhc3N1bWUgdGhhdCBhbnkgb3RoZXIgdmFsdWVzIGJlbG9uZyB0byB0aGUgcmVzdCBvZiB0
aGUgc2hvcnRoYW5kKS4gIElmIHdlJ3JlIG5vdCBwYXJzaW5nIGEgc2hvcnRoYW5kLCB0aG91Z2gs
IHRoZQogICAgIC8vIHZhbHVlIHdhcyBleHBsaWNpdGx5IHNwZWNpZmllZCBmb3Igb3VyIHByb3Bl
cnR5LgogICAgIHZhbHVlID0gbV92YWx1ZUxpc3QtPm5leHQoKTsKLSAgICAKKwogICAgIC8vIEZp
cnN0IGNoZWNrIGZvciB0aGUgY29tbWEuICBJZiBzbywgd2UgYXJlIGZpbmlzaGVkIHBhcnNpbmcg
dGhpcyB2YWx1ZSBvciB2YWx1ZSBwYWlyLgogICAgIGlmICh2YWx1ZSAmJiB2YWx1ZS0+dW5pdCA9
PSBDU1NQYXJzZXJWYWx1ZTo6T3BlcmF0b3IgJiYgdmFsdWUtPmlWYWx1ZSA9PSAnLCcpCiAgICAg
ICAgIHZhbHVlID0gMDsKLSAgICAKKwogICAgIGJvb2wgdmFsdWUySXNYID0gZmFsc2UsIHZhbHVl
MklzWSA9IGZhbHNlOwogICAgIGlmICh2YWx1ZSkgewogICAgICAgICB2YWx1ZTIgPSBwYXJzZUZp
bGxQb3NpdGlvblhZKHZhbHVlMklzWCwgdmFsdWUySXNZKTsKQEAgLTI0MTgsNyArMjQyMCw3IEBA
IHZvaWQgQ1NTUGFyc2VyOjpwYXJzZUZpbGxQb3NpdGlvbihSZWZQdHI8Q1NTVmFsdWU+JiB2YWx1
ZTEsIFJlZlB0cjxDU1NWYWx1ZT4mIHZhCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICB9
Ci0gICAgCisKICAgICBpZiAoIXZhbHVlMikKICAgICAgICAgLy8gT25seSBvbmUgdmFsdWUgd2Fz
IHNwZWNpZmllZC4gIElmIHRoYXQgdmFsdWUgd2FzIG5vdCBhIGtleXdvcmQsIHRoZW4gaXQgc2V0
cyB0aGUgeCBwb3NpdGlvbiwgYW5kIHRoZSB5IHBvc2l0aW9uCiAgICAgICAgIC8vIGlzIHNpbXBs
eSA1MCUuICBUaGlzIGlzIG91ciBkZWZhdWx0LgpAQCAtMjQ0MSwxMyArMjQ0MywxMyBAQCB2b2lk
IENTU1BhcnNlcjo6cGFyc2VGaWxsUmVwZWF0KFJlZlB0cjxDU1NWYWx1ZT4mIHZhbHVlMSwgUmVm
UHRyPENTU1ZhbHVlPiYgdmFsdQogICAgICAgICB2YWx1ZTIgPSBDU1NQcmltaXRpdmVWYWx1ZTo6
Y3JlYXRlSWRlbnRpZmllcihDU1NWYWx1ZU5vUmVwZWF0KTsKICAgICAgICAgbV92YWx1ZUxpc3Qt
Pm5leHQoKTsKICAgICAgICAgcmV0dXJuOwotICAgIH0gCisgICAgfQogICAgIGlmIChpZCA9PSBD
U1NWYWx1ZVJlcGVhdFkpIHsKICAgICAgICAgbV9pbXBsaWNpdFNob3J0aGFuZCA9IHRydWU7CiAg
ICAgICAgIHZhbHVlMSA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGVJZGVudGlmaWVyKENTU1Zh
bHVlTm9SZXBlYXQpOwogICAgICAgICB2YWx1ZTIgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRl
SWRlbnRpZmllcihDU1NWYWx1ZVJlcGVhdCk7CiAgICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7
Ci0gICAgICAgIHJldHVybjsgICAgCisgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgaWYgKGlk
ID09IENTU1ZhbHVlUmVwZWF0IHx8IGlkID09IENTU1ZhbHVlTm9SZXBlYXQgfHwgaWQgPT0gQ1NT
VmFsdWVSb3VuZCB8fCBpZCA9PSBDU1NWYWx1ZVNwYWNlKQogICAgICAgICB2YWx1ZTEgPSBDU1NQ
cmltaXRpdmVWYWx1ZTo6Y3JlYXRlSWRlbnRpZmllcihpZCk7CkBAIC0yNDY0LDExICsyNDY2LDEx
IEBAIHZvaWQgQ1NTUGFyc2VyOjpwYXJzZUZpbGxSZXBlYXQoUmVmUHRyPENTU1ZhbHVlPiYgdmFs
dWUxLCBSZWZQdHI8Q1NTVmFsdWU+JiB2YWx1CiAKICAgICBpZiAodmFsdWUpCiAgICAgICAgIGlk
ID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKS0+aWQ7Ci0gICAgCisKICAgICBpZiAodmFsdWUgJiYg
KGlkID09IENTU1ZhbHVlUmVwZWF0IHx8IGlkID09IENTU1ZhbHVlTm9SZXBlYXQgfHwgaWQgPT0g
Q1NTVmFsdWVSb3VuZCB8fCBpZCA9PSBDU1NWYWx1ZVNwYWNlKSkgewogICAgICAgICB2YWx1ZTIg
PSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlSWRlbnRpZmllcihpZCk7CiAgICAgICAgIG1fdmFs
dWVMaXN0LT5uZXh0KCk7Ci0gICAgfSBlbHNlIHsgCisgICAgfSBlbHNlIHsKICAgICAgICAgLy8g
SWYgb25seSBvbmUgdmFsdWUgd2FzIHNwZWNpZmllZCwgdmFsdWUyIGlzIHRoZSBzYW1lIGFzIHZh
bHVlMS4KICAgICAgICAgbV9pbXBsaWNpdFNob3J0aGFuZCA9IHRydWU7CiAgICAgICAgIHZhbHVl
MiA9IENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGVJZGVudGlmaWVyKHN0YXRpY19jYXN0PENTU1By
aW1pdGl2ZVZhbHVlKj4odmFsdWUxLmdldCgpKS0+Z2V0SWRlbnQoKSk7CkBAIC0yNTE2LDcgKzI1
MTgsNyBAQCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlRmlsbFNpemUoaW50
IHByb3BJZCwgYm9vbCYgYWxsb3dDb21tYSkKICAgICByZXR1cm4gQ1NTUHJpbWl0aXZlVmFsdWU6
OmNyZWF0ZShQYWlyOjpjcmVhdGUocGFyc2VkVmFsdWUxLnJlbGVhc2UoKSwgcGFyc2VkVmFsdWUy
LnJlbGVhc2UoKSkpOwogfQogCi1ib29sIENTU1BhcnNlcjo6cGFyc2VGaWxsUHJvcGVydHkoaW50
IHByb3BJZCwgaW50JiBwcm9wSWQxLCBpbnQmIHByb3BJZDIsIAorYm9vbCBDU1NQYXJzZXI6OnBh
cnNlRmlsbFByb3BlcnR5KGludCBwcm9wSWQsIGludCYgcHJvcElkMSwgaW50JiBwcm9wSWQyLAog
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlZlB0cjxDU1NWYWx1ZT4mIHJldFZh
bHVlMSwgUmVmUHRyPENTU1ZhbHVlPiYgcmV0VmFsdWUyKQogewogICAgIFJlZlB0cjxDU1NWYWx1
ZUxpc3Q+IHZhbHVlczsKQEAgLTI1MjQsOSArMjUyNiw5IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJz
ZUZpbGxQcm9wZXJ0eShpbnQgcHJvcElkLCBpbnQmIHByb3BJZDEsIGludCYgcHJvcElkMiwKICAg
ICBDU1NQYXJzZXJWYWx1ZSogdmFsOwogICAgIFJlZlB0cjxDU1NWYWx1ZT4gdmFsdWU7CiAgICAg
UmVmUHRyPENTU1ZhbHVlPiB2YWx1ZTI7Ci0gICAgCisKICAgICBib29sIGFsbG93Q29tbWEgPSBm
YWxzZTsKLSAgICAKKwogICAgIHJldFZhbHVlMSA9IHJldFZhbHVlMiA9IDA7CiAgICAgcHJvcElk
MSA9IHByb3BJZDsKICAgICBwcm9wSWQyID0gcHJvcElkOwpAQCAtMjU0Nyw3ICsyNTQ5LDcgQEAg
Ym9vbCBDU1NQYXJzZXI6OnBhcnNlRmlsbFByb3BlcnR5KGludCBwcm9wSWQsIGludCYgcHJvcElk
MSwgaW50JiBwcm9wSWQyLAogICAgIHdoaWxlICgodmFsID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQo
KSkpIHsKICAgICAgICAgUmVmUHRyPENTU1ZhbHVlPiBjdXJyVmFsdWU7CiAgICAgICAgIFJlZlB0
cjxDU1NWYWx1ZT4gY3VyclZhbHVlMjsKLSAgICAgICAgCisKICAgICAgICAgaWYgKGFsbG93Q29t
bWEpIHsKICAgICAgICAgICAgIGlmICh2YWwtPnVuaXQgIT0gQ1NTUGFyc2VyVmFsdWU6Ok9wZXJh
dG9yIHx8IHZhbC0+aVZhbHVlICE9ICcsJykKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7
CkBAIC0yNjQxLDE3ICsyNjQzLDE3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUZpbGxQcm9wZXJ0
eShpbnQgcHJvcElkLCBpbnQmIHByb3BJZDEsIGludCYgcHJvcElkMiwKICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIGlmICghY3VyclZhbHVlKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBpZiAodmFsdWUgJiYgIXZhbHVlcykgewog
ICAgICAgICAgICAgICAgIHZhbHVlcyA9IENTU1ZhbHVlTGlzdDo6Y3JlYXRlQ29tbWFTZXBhcmF0
ZWQoKTsKICAgICAgICAgICAgICAgICB2YWx1ZXMtPmFwcGVuZCh2YWx1ZS5yZWxlYXNlKCkpOwog
ICAgICAgICAgICAgfQotICAgICAgICAgICAgCisKICAgICAgICAgICAgIGlmICh2YWx1ZTIgJiYg
IXZhbHVlczIpIHsKICAgICAgICAgICAgICAgICB2YWx1ZXMyID0gQ1NTVmFsdWVMaXN0OjpjcmVh
dGVDb21tYVNlcGFyYXRlZCgpOwogICAgICAgICAgICAgICAgIHZhbHVlczItPmFwcGVuZCh2YWx1
ZTIucmVsZWFzZSgpKTsKICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIAorCiAgICAgICAgICAg
ICBpZiAodmFsdWVzKQogICAgICAgICAgICAgICAgIHZhbHVlcy0+YXBwZW5kKGN1cnJWYWx1ZS5y
ZWxlYXNlKCkpOwogICAgICAgICAgICAgZWxzZQpAQCAtMjY2Myw3ICsyNjY1LDcgQEAgYm9vbCBD
U1NQYXJzZXI6OnBhcnNlRmlsbFByb3BlcnR5KGludCBwcm9wSWQsIGludCYgcHJvcElkMSwgaW50
JiBwcm9wSWQyLAogICAgICAgICAgICAgICAgICAgICB2YWx1ZTIgPSBjdXJyVmFsdWUyLnJlbGVh
c2UoKTsKICAgICAgICAgICAgIH0KICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICAvLyBX
aGVuIHBhcnNpbmcgYW55IGZpbGwgc2hvcnRoYW5kIHByb3BlcnR5LCB3ZSBsZXQgaXQgaGFuZGxl
IGJ1aWxkaW5nIHVwIHRoZSBsaXN0cyBmb3IgYWxsCiAgICAgICAgIC8vIHByb3BlcnRpZXMuCiAg
ICAgICAgIGlmIChpblNob3J0aGFuZCgpKQpAQCAtMjc5NywxMSArMjc5OSwxMSBAQCBQYXNzUmVm
UHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlQW5pbWF0aW9uVGltaW5nRnVuY3Rpb24oKQog
ICAgIENTU1BhcnNlclZhbHVlKiB2YWx1ZSA9IG1fdmFsdWVMaXN0LT5jdXJyZW50KCk7CiAgICAg
aWYgKHZhbHVlLT5pZCA9PSBDU1NWYWx1ZUVhc2UgfHwgdmFsdWUtPmlkID09IENTU1ZhbHVlTGlu
ZWFyIHx8IHZhbHVlLT5pZCA9PSBDU1NWYWx1ZUVhc2VJbiB8fCB2YWx1ZS0+aWQgPT0gQ1NTVmFs
dWVFYXNlT3V0IHx8IHZhbHVlLT5pZCA9PSBDU1NWYWx1ZUVhc2VJbk91dCkKICAgICAgICAgcmV0
dXJuIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGVJZGVudGlmaWVyKHZhbHVlLT5pZCk7Ci0gICAg
CisKICAgICAvLyBXZSBtdXN0IGJlIGEgZnVuY3Rpb24uCiAgICAgaWYgKHZhbHVlLT51bml0ICE9
IENTU1BhcnNlclZhbHVlOjpGdW5jdGlvbikKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgCisKICAg
ICAvLyBUaGUgb25seSB0aW1pbmcgZnVuY3Rpb24gd2UgYWNjZXB0IGZvciBub3cgaXMgYSBjdWJp
YyBiZXppZXIgZnVuY3Rpb24uICA0IHBvaW50cyBtdXN0IGJlIHNwZWNpZmllZC4KICAgICBDU1NQ
YXJzZXJWYWx1ZUxpc3QqIGFyZ3MgPSB2YWx1ZS0+ZnVuY3Rpb24tPmFyZ3M7CiAgICAgaWYgKCFl
cXVhbElnbm9yaW5nQ2FzZSh2YWx1ZS0+ZnVuY3Rpb24tPm5hbWUsICJjdWJpYy1iZXppZXIoIikg
fHwgIWFyZ3MgfHwgYXJncy0+c2l6ZSgpICE9IDcpCkBAIC0yODI4LDcgKzI4MzAsNyBAQCBib29s
IENTU1BhcnNlcjo6cGFyc2VBbmltYXRpb25Qcm9wZXJ0eShpbnQgcHJvcElkLCBSZWZQdHI8Q1NT
VmFsdWU+JiByZXN1bHQpCiAgICAgQ1NTUGFyc2VyVmFsdWUqIHZhbDsKICAgICBSZWZQdHI8Q1NT
VmFsdWU+IHZhbHVlOwogICAgIGJvb2wgYWxsb3dDb21tYSA9IGZhbHNlOwotICAgIAorCiAgICAg
cmVzdWx0ID0gMDsKIAogICAgIHdoaWxlICgodmFsID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKSkp
IHsKQEAgLTI4OTAsMjkgKzI4OTIsMjkgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlQW5pbWF0aW9u
UHJvcGVydHkoaW50IHByb3BJZCwgUmVmUHRyPENTU1ZhbHVlPiYgcmVzdWx0KQogICAgICAgICAg
ICAgICAgICAgICAgICAgbV92YWx1ZUxpc3QtPm5leHQoKTsKICAgICAgICAgICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgaWYgKCFj
dXJyVmFsdWUpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgCisK
ICAgICAgICAgICAgIGlmICh2YWx1ZSAmJiAhdmFsdWVzKSB7CiAgICAgICAgICAgICAgICAgdmFs
dWVzID0gQ1NTVmFsdWVMaXN0OjpjcmVhdGVDb21tYVNlcGFyYXRlZCgpOwogICAgICAgICAgICAg
ICAgIHZhbHVlcy0+YXBwZW5kKHZhbHVlLnJlbGVhc2UoKSk7CiAgICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAKKwogICAgICAgICAgICAgaWYgKHZhbHVlcykKICAgICAgICAgICAgICAgICB2YWx1
ZXMtPmFwcGVuZChjdXJyVmFsdWUucmVsZWFzZSgpKTsKICAgICAgICAgICAgIGVsc2UKICAgICAg
ICAgICAgICAgICB2YWx1ZSA9IGN1cnJWYWx1ZS5yZWxlYXNlKCk7Ci0gICAgICAgICAgICAKKwog
ICAgICAgICAgICAgYWxsb3dDb21tYSA9IHRydWU7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAg
ICAgICAgLy8gV2hlbiBwYXJzaW5nIHRoZSAndHJhbnNpdGlvbicgc2hvcnRoYW5kIHByb3BlcnR5
LCB3ZSBsZXQgaXQgaGFuZGxlIGJ1aWxkaW5nIHVwIHRoZSBsaXN0cyBmb3IgYWxsCiAgICAgICAg
IC8vIHByb3BlcnRpZXMuCiAgICAgICAgIGlmIChpblNob3J0aGFuZCgpKQogICAgICAgICAgICAg
YnJlYWs7CiAgICAgfQotICAgIAorCiAgICAgaWYgKHZhbHVlcyAmJiB2YWx1ZXMtPmxlbmd0aCgp
KSB7CiAgICAgICAgIHJlc3VsdCA9IHZhbHVlcy5yZWxlYXNlKCk7CiAgICAgICAgIHJldHVybiB0
cnVlOwpAQCAtMjk0NSw3ICsyOTQ3LDcgQEAgc3RhdGljIENTU1BhcnNlclZhbHVlKiBza2lwQ29t
bWFJbkRhc2hib2FyZFJlZ2lvbihDU1NQYXJzZXJWYWx1ZUxpc3QgKmFyZ3MpCiBib29sIENTU1Bh
cnNlcjo6cGFyc2VEYXNoYm9hcmRSZWdpb25zKGludCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQog
ewogICAgIGJvb2wgdmFsaWQgPSB0cnVlOwotICAgIAorCiAgICAgQ1NTUGFyc2VyVmFsdWUqIHZh
bHVlID0gbV92YWx1ZUxpc3QtPmN1cnJlbnQoKTsKIAogICAgIGlmICh2YWx1ZS0+aWQgPT0gQ1NT
VmFsdWVOb25lKSB7CkBAIC0yOTU0LDcgKzI5NTYsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VE
YXNoYm9hcmRSZWdpb25zKGludCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQogICAgICAgICBhZGRQ
cm9wZXJ0eShwcm9wSWQsIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGVJZGVudGlmaWVyKHZhbHVl
LT5pZCksIGltcG9ydGFudCk7CiAgICAgICAgIHJldHVybiB2YWxpZDsKICAgICB9Ci0gICAgICAg
IAorCiAgICAgUmVmUHRyPERhc2hib2FyZFJlZ2lvbj4gZmlyc3RSZWdpb24gPSBEYXNoYm9hcmRS
ZWdpb246OmNyZWF0ZSgpOwogICAgIERhc2hib2FyZFJlZ2lvbiogcmVnaW9uID0gMDsKIApAQCAt
Mjk2NiwxMiArMjk2OCwxMiBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VEYXNoYm9hcmRSZWdpb25z
KGludCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KQogICAgICAgICAgICAgcmVnaW9uLT5tX25leHQg
PSBuZXh0UmVnaW9uOwogICAgICAgICAgICAgcmVnaW9uID0gbmV4dFJlZ2lvbi5nZXQoKTsKICAg
ICAgICAgfQotICAgICAgICAKKwogICAgICAgICBpZiAodmFsdWUtPnVuaXQgIT0gQ1NTUGFyc2Vy
VmFsdWU6OkZ1bmN0aW9uKSB7CiAgICAgICAgICAgICB2YWxpZCA9IGZhbHNlOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgICAgIAorCiAgICAgICAgIC8vIENvbW1hcyBj
b3VudCBhcyB2YWx1ZXMsIHNvIGFsbG93OgogICAgICAgICAvLyBkYXNoYm9hcmQtcmVnaW9uKGxh
YmVsLCB0eXBlLCB0LCByLCBiLCBsKSBvciBkYXNoYm9hcmQtcmVnaW9uKGxhYmVsIHR5cGUgdCBy
IGIgbCkKICAgICAgICAgLy8gZGFzaGJvYXJkLXJlZ2lvbihsYWJlbCwgdHlwZSwgdCwgciwgYiwg
bCkgb3IgZGFzaGJvYXJkLXJlZ2lvbihsYWJlbCB0eXBlIHQgciBiIGwpCkBAIC0yOTgzLDIxICsy
OTg1LDIxIEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZURhc2hib2FyZFJlZ2lvbnMoaW50IHByb3BJ
ZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgICAgICAgICB2YWxpZCA9IGZhbHNlOwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgaW50IG51bUFyZ3MgPSBh
cmdzLT5zaXplKCk7CiAgICAgICAgIGlmICgobnVtQXJncyAhPSBEQVNIQk9BUkRfUkVHSU9OX05V
TV9QQVJBTUVURVJTICYmIG51bUFyZ3MgIT0gKERBU0hCT0FSRF9SRUdJT05fTlVNX1BBUkFNRVRF
UlMqMi0xKSkgJiYKICAgICAgICAgICAgIChudW1BcmdzICE9IERBU0hCT0FSRF9SRUdJT05fU0hP
UlRfTlVNX1BBUkFNRVRFUlMgJiYgbnVtQXJncyAhPSAoREFTSEJPQVJEX1JFR0lPTl9TSE9SVF9O
VU1fUEFSQU1FVEVSUyoyLTEpKSkgewogICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICAvLyBGaXJz
dCBhcmcgaXMgYSBsYWJlbC4KICAgICAgICAgQ1NTUGFyc2VyVmFsdWUqIGFyZyA9IGFyZ3MtPmN1
cnJlbnQoKTsKICAgICAgICAgaWYgKGFyZy0+dW5pdCAhPSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NT
X0lERU5UKSB7CiAgICAgICAgICAgICB2YWxpZCA9IGZhbHNlOwogICAgICAgICAgICAgYnJlYWs7
CiAgICAgICAgIH0KLSAgICAgICAgICAgIAorCiAgICAgICAgIHJlZ2lvbi0+bV9sYWJlbCA9IGFy
Zy0+c3RyaW5nOwogCiAgICAgICAgIC8vIFNlY29uZCBhcmcgaXMgYSB0eXBlLgpAQCAtMzAxNiwx
MyArMzAxOCwxMyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VEYXNoYm9hcmRSZWdpb25zKGludCBw
cm9wSWQsIGJvb2wgaW1wb3J0YW50KQogICAgICAgICAgICAgdmFsaWQgPSBmYWxzZTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICByZWdpb24t
Pm1fZ2VvbWV0cnlUeXBlID0gYXJnLT5zdHJpbmc7CiAKICAgICAgICAgaWYgKG51bUFyZ3MgPT0g
REFTSEJPQVJEX1JFR0lPTl9TSE9SVF9OVU1fUEFSQU1FVEVSUyB8fCBudW1BcmdzID09IChEQVNI
Qk9BUkRfUkVHSU9OX1NIT1JUX05VTV9QQVJBTUVURVJTKjItMSkpIHsKICAgICAgICAgICAgIC8v
IFRoaXMgb3JpZ2luYWxseSB1c2VkIENTU1ZhbHVlSW52YWxpZCBieSBhY2NpZGVudC4gSXQgbWln
aHQgYmUgbW9yZSBsb2dpY2FsIHRvIHVzZSBzb21ldGhpbmcgZWxzZS4KICAgICAgICAgICAgIFJl
ZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gYW1vdW50ID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0
ZUlkZW50aWZpZXIoQ1NTVmFsdWVJbnZhbGlkKTsKLSAgICAgICAgICAgICAgICAKKwogICAgICAg
ICAgICAgcmVnaW9uLT5zZXRUb3AoYW1vdW50KTsKICAgICAgICAgICAgIHJlZ2lvbi0+c2V0Umln
aHQoYW1vdW50KTsKICAgICAgICAgICAgIHJlZ2lvbi0+c2V0Qm90dG9tKGFtb3VudCk7CkBAIC0z
MDM3LDExICszMDM5LDExIEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZURhc2hib2FyZFJlZ2lvbnMo
aW50IHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgICAgICAgICAgICAgdmFsaWQgPSBhcmct
PmlkID09IENTU1ZhbHVlQXV0byB8fCB2YWxpZFVuaXQoYXJnLCBGTGVuZ3RoLCBtX3N0cmljdCk7
CiAgICAgICAgICAgICAgICAgaWYgKCF2YWxpZCkKICAgICAgICAgICAgICAgICAgICAgYnJlYWs7
Ci0gICAgICAgICAgICAgICAgICAgIAorCiAgICAgICAgICAgICAgICAgUmVmUHRyPENTU1ByaW1p
dGl2ZVZhbHVlPiBhbW91bnQgPSBhcmctPmlkID09IENTU1ZhbHVlQXV0byA/CiAgICAgICAgICAg
ICAgICAgICAgIENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGVJZGVudGlmaWVyKENTU1ZhbHVlQXV0
bykgOgogICAgICAgICAgICAgICAgICAgICBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKGFyZy0+
ZlZhbHVlLCAoQ1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRUeXBlcykgYXJnLT51bml0KTsKLSAgICAg
ICAgICAgICAgICAgICAgCisKICAgICAgICAgICAgICAgICBpZiAoaSA9PSAwKQogICAgICAgICAg
ICAgICAgICAgICByZWdpb24tPnNldFRvcChhbW91bnQpOwogICAgICAgICAgICAgICAgIGVsc2Ug
aWYgKGkgPT0gMSkKQEAgLTMwNjEsNyArMzA2Myw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZURh
c2hib2FyZFJlZ2lvbnMoaW50IHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAKICAgICBpZiAodmFs
aWQpCiAgICAgICAgIGFkZFByb3BlcnR5KHByb3BJZCwgQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0
ZShmaXJzdFJlZ2lvbi5yZWxlYXNlKCkpLCBpbXBvcnRhbnQpOwotICAgICAgICAKKwogICAgIHJl
dHVybiB2YWxpZDsKIH0KIApAQCAtMzA3NCw3ICszMDc2LDcgQEAgUGFzc1JlZlB0cjxDU1NWYWx1
ZT4gQ1NTUGFyc2VyOjpwYXJzZUNvdW50ZXJDb250ZW50KENTU1BhcnNlclZhbHVlTGlzdCogYXJn
cywgYm8KICAgICAgICAgcmV0dXJuIDA7CiAgICAgaWYgKCFjb3VudGVycyAmJiBudW1BcmdzICE9
IDEgJiYgbnVtQXJncyAhPSAzKQogICAgICAgICByZXR1cm4gMDsKLSAgICAKKwogICAgIENTU1Bh
cnNlclZhbHVlKiBpID0gYXJncy0+Y3VycmVudCgpOwogICAgIGlmIChpLT51bml0ICE9IENTU1By
aW1pdGl2ZVZhbHVlOjpDU1NfSURFTlQpCiAgICAgICAgIHJldHVybiAwOwpAQCAtMzA4NywxMSAr
MzA4OSwxMSBAQCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlQ291bnRlckNv
bnRlbnQoQ1NTUGFyc2VyVmFsdWVMaXN0KiBhcmdzLCBibwogICAgICAgICBpID0gYXJncy0+bmV4
dCgpOwogICAgICAgICBpZiAoaS0+dW5pdCAhPSBDU1NQYXJzZXJWYWx1ZTo6T3BlcmF0b3IgfHwg
aS0+aVZhbHVlICE9ICcsJykKICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAKKwogICAg
ICAgICBpID0gYXJncy0+bmV4dCgpOwogICAgICAgICBpZiAoaS0+dW5pdCAhPSBDU1NQcmltaXRp
dmVWYWx1ZTo6Q1NTX1NUUklORykKICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAKKwog
ICAgICAgICBzZXBhcmF0b3IgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKGktPnN0cmluZywg
KENTU1ByaW1pdGl2ZVZhbHVlOjpVbml0VHlwZXMpIGktPnVuaXQpOwogICAgIH0KIApAQCAtMzEw
MiwxMSArMzEwNCwxMSBAQCBQYXNzUmVmUHRyPENTU1ZhbHVlPiBDU1NQYXJzZXI6OnBhcnNlQ291
bnRlckNvbnRlbnQoQ1NTUGFyc2VyVmFsdWVMaXN0KiBhcmdzLCBibwogICAgIGVsc2UgewogICAg
ICAgICBpZiAoaS0+dW5pdCAhPSBDU1NQYXJzZXJWYWx1ZTo6T3BlcmF0b3IgfHwgaS0+aVZhbHVl
ICE9ICcsJykKICAgICAgICAgICAgIHJldHVybiAwOwotICAgICAgICAKKwogICAgICAgICBpID0g
YXJncy0+bmV4dCgpOwogICAgICAgICBpZiAoaS0+dW5pdCAhPSBDU1NQcmltaXRpdmVWYWx1ZTo6
Q1NTX0lERU5UKQogICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIAorCiAgICAgICAgIHNo
b3J0IGxzID0gMDsKICAgICAgICAgaWYgKGktPmlkID09IENTU1ZhbHVlTm9uZSkKICAgICAgICAg
ICAgIGxzID0gQ1NTVmFsdWVLYXRha2FuYUlyb2hhIC0gQ1NTVmFsdWVEaXNjICsgMTsKQEAgLTMx
MjUsNyArMzEyNyw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZVNoYXBlKGludCBwcm9wSWQsIGJv
b2wgaW1wb3J0YW50KQogewogICAgIENTU1BhcnNlclZhbHVlKiB2YWx1ZSA9IG1fdmFsdWVMaXN0
LT5jdXJyZW50KCk7CiAgICAgQ1NTUGFyc2VyVmFsdWVMaXN0KiBhcmdzID0gdmFsdWUtPmZ1bmN0
aW9uLT5hcmdzOwotICAgIAorCiAgICAgaWYgKCFlcXVhbElnbm9yaW5nQ2FzZSh2YWx1ZS0+ZnVu
Y3Rpb24tPm5hbWUsICJyZWN0KCIpIHx8ICFhcmdzKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAK
QEAgLTMyNjYsNyArMzI2OCw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUZvbnQoYm9vbCBpbXBv
cnRhbnQpCiAgICAgICAgIGlmICghdmFsdWUpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgfQotICAgIAorCiAgICAgaWYgKCFmb250LT5saW5lSGVpZ2h0KQogICAgICAgICBmb250LT5s
aW5lSGVpZ2h0ID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZUlkZW50aWZpZXIoQ1NTVmFsdWVO
b3JtYWwpOwogCkBAIC0zMzIxLDcgKzMzMjMsNyBAQCBQYXNzUmVmUHRyPENTU1ZhbHVlTGlzdD4g
Q1NTUGFyc2VyOjpwYXJzZUZvbnRGYW1pbHkoKQogICAgICAgICB9IGVsc2UgewogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgCisKICAgICAgICAgaWYgKCFuZXh0VmFsdWUp
CiAgICAgICAgICAgICBicmVhazsKIApAQCAtMzUxMCw3ICszNTEyLDcgQEAgYm9vbCBDU1NQYXJz
ZXI6OnBhcnNlRm9udEZhY2VTcmMoKQogICAgICAgICAgICAgYWxsb3dGb3JtYXQgPSB0cnVlOwog
ICAgICAgICAgICAgZXhwZWN0Q29tbWEgPSB0cnVlOwogICAgICAgICB9IGVsc2UgaWYgKHZhbC0+
dW5pdCA9PSBDU1NQYXJzZXJWYWx1ZTo6RnVuY3Rpb24pIHsKLSAgICAgICAgICAgIC8vIFRoZXJl
IGFyZSB0d28gYWxsb3dlZCBmdW5jdGlvbnM6IGxvY2FsKCkgYW5kIGZvcm1hdCgpLiAgICAgICAg
ICAgICAKKyAgICAgICAgICAgIC8vIFRoZXJlIGFyZSB0d28gYWxsb3dlZCBmdW5jdGlvbnM6IGxv
Y2FsKCkgYW5kIGZvcm1hdCgpLgogICAgICAgICAgICAgQ1NTUGFyc2VyVmFsdWVMaXN0KiBhcmdz
ID0gdmFsLT5mdW5jdGlvbi0+YXJnczsKICAgICAgICAgICAgIGlmIChhcmdzICYmIGFyZ3MtPnNp
emUoKSA9PSAxKSB7CiAgICAgICAgICAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKHZhbC0+
ZnVuY3Rpb24tPm5hbWUsICJsb2NhbCgiKSAmJiAhZXhwZWN0Q29tbWEpIHsKQEAgLTM1MzUsNyAr
MzUzNyw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUZvbnRGYWNlU3JjKCkKICAgICAgICAgICAg
IG1fdmFsdWVMaXN0LT5uZXh0KCk7CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQot
ICAgIAorCiAgICAgICAgIGlmIChwYXJzZWRWYWx1ZSkKICAgICAgICAgICAgIHZhbHVlcy0+YXBw
ZW5kKHBhcnNlZFZhbHVlLnJlbGVhc2UoKSk7CiAgICAgICAgIGVsc2UgewpAQCAtMzU0NCw3ICsz
NTQ2LDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlRm9udEZhY2VTcmMoKQogICAgICAgICB9CiAg
ICAgICAgIG1fdmFsdWVMaXN0LT5uZXh0KCk7CiAgICAgfQotICAgIAorCiAgICAgaWYgKHZhbHVl
cy0+bGVuZ3RoKCkgJiYgIWZhaWxlZCkgewogICAgICAgICBhZGRQcm9wZXJ0eShDU1NQcm9wZXJ0
eVNyYywgdmFsdWVzLnJlbGVhc2UoKSwgbV9pbXBvcnRhbnQpOwogICAgICAgICBtX3ZhbHVlTGlz
dC0+bmV4dCgpOwpAQCAtMzY1MSw3ICszNjUzLDcgQEAgc3RhdGljIGlubGluZSBib29sIHBhcnNl
SW50KGNvbnN0IFVDaGFyKiYgc3RyaW5nLCBjb25zdCBVQ2hhciogZW5kLCBVQ2hhciB0ZXJtaW4K
ICAgICBjb25zdCBVQ2hhciogY3VycmVudCA9IHN0cmluZzsKICAgICBpbnQgbG9jYWxWYWx1ZSA9
IDA7CiAgICAgYm9vbCBuZWdhdGl2ZSA9IGZhbHNlOwotICAgIHdoaWxlIChjdXJyZW50ICE9IGVu
ZCAmJiBpc0NTU1doaXRlc3BhY2UoKmN1cnJlbnQpKSAKKyAgICB3aGlsZSAoY3VycmVudCAhPSBl
bmQgJiYgaXNDU1NXaGl0ZXNwYWNlKCpjdXJyZW50KSkKICAgICAgICAgY3VycmVudCsrOwogICAg
IGlmIChjdXJyZW50ICE9IGVuZCAmJiAqY3VycmVudCA9PSAnLScpIHsKICAgICAgICAgbmVnYXRp
dmUgPSB0cnVlOwpAQCAtMzY5Myw3ICszNjk1LDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlQ29s
b3IoY29uc3QgU3RyaW5nICZuYW1lLCBSR0JBMzImIHJnYiwgYm9vbCBzdHJpY3QpCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIHJnYiA9IG1ha2VSR0IocmVkLCBncmVlbiwgYmx1
ZSk7CiAgICAgICAgIHJldHVybiB0cnVlOwotICAgIH0gICAgICAgIAorICAgIH0KICAgICAvLyBU
cnkgbmFtZWQgY29sb3JzLgogICAgIENvbG9yIHRjOwogICAgIHRjLnNldE5hbWVkQ29sb3IobmFt
ZSk7CkBAIC0zOTcwLDcgKzM5NzIsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VTaGFkb3coaW50
IHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiAgICAgICAgICAgICAvLyAtd2Via2l0LXN2Zy1zaGFk
b3cgZG9lcyBub3Qgc3VwcG9ydCBtdWx0aXBsZSB2YWx1ZXMuCiAgICAgICAgICAgICBpZiAoc3Rh
dGljX2Nhc3Q8Q1NTUHJvcGVydHlJRD4ocHJvcElkKSA9PSBDU1NQcm9wZXJ0eVdlYmtpdFN2Z1No
YWRvdykKICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0jZW5kaWYgICAgICAgICAgICAK
KyNlbmRpZgogICAgICAgICAgICAgLy8gVGhlIHZhbHVlIGlzIGdvb2QuICBDb21taXQgaXQuCiAg
ICAgICAgICAgICBjb250ZXh0LmNvbW1pdFZhbHVlKCk7CiAgICAgICAgIH0gZWxzZSBpZiAodmFs
aWRVbml0KHZhbCwgRkxlbmd0aCwgdHJ1ZSkpIHsKQEAgLTQwMDMsNyArNDAwNSw3IEBAIGJvb2wg
Q1NTUGFyc2VyOjpwYXJzZVNoYWRvdyhpbnQgcHJvcElkLCBib29sIGltcG9ydGFudCkKICAgICAg
ICAgICAgIGlmICghcGFyc2VkQ29sb3IgfHwgIWNvbnRleHQuYWxsb3dDb2xvcikKICAgICAgICAg
ICAgICAgICByZXR1cm4gZmFsc2U7IC8vIFRoaXMgdmFsdWUgaXMgbm90IGEgY29sb3Igb3IgbGVu
Z3RoIGFuZCBpcyBpbnZhbGlkIG9yCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyBp
dCBpcyBhIGNvbG9yLCBidXQgYSBjb2xvciBpc24ndCBhbGxvd2VkIGF0IHRoaXMgcG9pbnQuCi0g
ICAgICAgICAgICAKKwogICAgICAgICAgICAgY29udGV4dC5jb21taXRDb2xvcihwYXJzZWRDb2xv
ci5yZWxlYXNlKCkpOwogICAgICAgICB9CiAKQEAgLTQwMjUsNyArNDAyNyw3IEBAIGJvb2wgQ1NT
UGFyc2VyOjpwYXJzZVNoYWRvdyhpbnQgcHJvcElkLCBib29sIGltcG9ydGFudCkKIGJvb2wgQ1NT
UGFyc2VyOjpwYXJzZVJlZmxlY3QoaW50IHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpCiB7CiAgICAg
Ly8gYm94LXJlZmxlY3Q6IDxkaXJlY3Rpb24+IDxvZmZzZXQ+IDxtYXNrPgotICAgIAorCiAgICAg
Ly8gRGlyZWN0aW9uIGNvbWVzIGZpcnN0LgogICAgIENTU1BhcnNlclZhbHVlKiB2YWwgPSBtX3Zh
bHVlTGlzdC0+Y3VycmVudCgpOwogICAgIENTU1JlZmxlY3Rpb25EaXJlY3Rpb24gZGlyZWN0aW9u
OwpAQCAtNDA4NSw3ICs0MDg3LDcgQEAgc3RydWN0IEJvcmRlckltYWdlUGFyc2VDb250ZXh0IHsK
ICAgICAsIG1faG9yaXpvbnRhbFJ1bGUoMCkKICAgICAsIG1fdmVydGljYWxSdWxlKDApCiAgICAg
e30KLSAgICAKKwogICAgIGJvb2wgYWxsb3dCcmVhaygpIGNvbnN0IHsgcmV0dXJuIG1fYWxsb3dC
cmVhazsgfQogICAgIGJvb2wgYWxsb3dOdW1iZXIoKSBjb25zdCB7IHJldHVybiBtX2FsbG93TnVt
YmVyOyB9CiAgICAgYm9vbCBhbGxvd1NsYXNoKCkgY29uc3QgeyByZXR1cm4gbV9hbGxvd1NsYXNo
OyB9CkBAIC00MTA2LDcgKzQxMDgsNyBAQCBzdHJ1Y3QgQm9yZGVySW1hZ2VQYXJzZUNvbnRleHQg
ewogICAgICAgICAgICAgQVNTRVJUKCFtX2xlZnQpOwogICAgICAgICAgICAgbV9sZWZ0ID0gdmFs
OwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIG1fYWxsb3dCcmVhayA9IG1fYWxsb3dT
bGFzaCA9IG1fYWxsb3dSdWxlID0gdHJ1ZTsKICAgICAgICAgbV9hbGxvd051bWJlciA9ICFtX2xl
ZnQ7CiAgICAgfQpAQCAtNDE0OSw3ICs0MTUxLDcgQEAgc3RydWN0IEJvcmRlckltYWdlUGFyc2VD
b250ZXh0IHsKICAgICAgICAgfQogICAgICAgICBpZiAoIW1fbGVmdCkKICAgICAgICAgICAgICBt
X2xlZnQgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKG1fcmlnaHQtPmdldERvdWJsZVZhbHVl
KCksIChDU1NQcmltaXRpdmVWYWx1ZTo6VW5pdFR5cGVzKW1fcmlnaHQtPnByaW1pdGl2ZVR5cGUo
KSk7Ci0gICAgICAgICAgICAgCisKICAgICAgICAgLy8gTm93IGJ1aWxkIGEgcmVjdCB2YWx1ZSB0
byBob2xkIGFsbCBmb3VyIG9mIG91ciBwcmltaXRpdmUgdmFsdWVzLgogICAgICAgICBSZWZQdHI8
UmVjdD4gcmVjdCA9IFJlY3Q6OmNyZWF0ZSgpOwogICAgICAgICByZWN0LT5zZXRUb3AobV90b3Ap
OwpAQCAtNDE2MCw3ICs0MTYyLDcgQEAgc3RydWN0IEJvcmRlckltYWdlUGFyc2VDb250ZXh0IHsK
ICAgICAgICAgLy8gRmlsbCBpbiBTVFJFVENIIGFzIHRoZSBkZWZhdWx0IGlmIGl0IHdhc24ndCBz
cGVjaWZpZWQuCiAgICAgICAgIGlmICghbV9ob3Jpem9udGFsUnVsZSkKICAgICAgICAgICAgIG1f
aG9yaXpvbnRhbFJ1bGUgPSBDU1NWYWx1ZVN0cmV0Y2g7Ci0gICAgICAgICAgICAKKwogICAgICAg
ICAvLyBUaGUgdmVydGljYWwgcnVsZSBzaG91bGQgbWF0Y2ggdGhlIGhvcml6b250YWwgcnVsZSBp
ZiB1bnNwZWNpZmllZC4KICAgICAgICAgaWYgKCFtX3ZlcnRpY2FsUnVsZSkKICAgICAgICAgICAg
IG1fdmVydGljYWxSdWxlID0gbV9ob3Jpem9udGFsUnVsZTsKQEAgLTQxODUsMjUgKzQxODcsMjUg
QEAgc3RydWN0IEJvcmRlckltYWdlUGFyc2VDb250ZXh0IHsKICAgICAgICAgLy8gTWFrZSBvdXIg
bmV3IGJvcmRlciBpbWFnZSB2YWx1ZSBub3cuCiAgICAgICAgIHJldHVybiBDU1NCb3JkZXJJbWFn
ZVZhbHVlOjpjcmVhdGUobV9pbWFnZSwgcmVjdC5yZWxlYXNlKCksIG1faG9yaXpvbnRhbFJ1bGUs
IG1fdmVydGljYWxSdWxlKTsKICAgICB9Ci0gICAgCisKICAgICBib29sIG1fYWxsb3dCcmVhazsK
ICAgICBib29sIG1fYWxsb3dOdW1iZXI7CiAgICAgYm9vbCBtX2FsbG93U2xhc2g7CiAgICAgYm9v
bCBtX2FsbG93V2lkdGg7CiAgICAgYm9vbCBtX2FsbG93UnVsZTsKLSAgICAKKwogICAgIFJlZlB0
cjxDU1NWYWx1ZT4gbV9pbWFnZTsKIAogICAgIFJlZlB0cjxDU1NQcmltaXRpdmVWYWx1ZT4gbV90
b3A7CiAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBtX3JpZ2h0OwogICAgIFJlZlB0cjxD
U1NQcmltaXRpdmVWYWx1ZT4gbV9ib3R0b207CiAgICAgUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVl
PiBtX2xlZnQ7Ci0gICAgCisKICAgICBDU1NQYXJzZXJWYWx1ZSogbV9ib3JkZXJUb3A7CiAgICAg
Q1NTUGFyc2VyVmFsdWUqIG1fYm9yZGVyUmlnaHQ7CiAgICAgQ1NTUGFyc2VyVmFsdWUqIG1fYm9y
ZGVyQm90dG9tOwogICAgIENTU1BhcnNlclZhbHVlKiBtX2JvcmRlckxlZnQ7Ci0gICAgCisKICAg
ICBpbnQgbV9ob3Jpem9udGFsUnVsZTsKICAgICBpbnQgbV92ZXJ0aWNhbFJ1bGU7CiB9OwpAQCAt
NDI0Myw3ICs0MjQ1LDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlQm9yZGVySW1hZ2UoaW50IHBy
b3BJZCwgYm9vbCBpbXBvcnRhbnQsIFJlZlB0cjxDU1NWYWx1ZT4mIHIKICAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIGlmIChjb250ZXh0LmFs
bG93TnVtYmVyKCkgJiYgcHJvcElkICE9IENTU1Byb3BlcnR5V2Via2l0Qm9yZGVySW1hZ2UpIHsK
ICAgICAgICAgLy8gQWxsb3cgdGhlIHNsaWNlcyB0byBiZSBvbWl0dGVkIGZvciBpbWFnZXMgdGhh
dCBkb24ndCBmaXQgdG8gYSBib3JkZXIuICBXZSBqdXN0IHNldCB0aGUgc2xpY2VzIHRvIGJlIDAu
CiAgICAgICAgIGNvbnRleHQubV90b3AgPSBDU1NQcmltaXRpdmVWYWx1ZTo6Y3JlYXRlKDAsIENT
U1ByaW1pdGl2ZVZhbHVlOjpDU1NfTlVNQkVSKTsKQEAgLTQyNTUsNyArNDI1Nyw3IEBAIGJvb2wg
Q1NTUGFyc2VyOjpwYXJzZUJvcmRlckltYWdlKGludCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50LCBS
ZWZQdHI8Q1NTVmFsdWU+JiByCiAgICAgICAgIHJlc3VsdCA9IGNvbnRleHQuY29tbWl0Qm9yZGVy
SW1hZ2UodGhpcywgaW1wb3J0YW50KTsKICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQotICAg
IAorCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCkBAIC00MzM0LDcgKzQzMzYsNyBAQCBib29sIENT
U1BhcnNlcjo6cGFyc2VDb3VudGVyKGludCBwcm9wSWQsIGludCBkZWZhdWx0VmFsdWUsIGJvb2wg
aW1wb3J0YW50KQogCiAgICAgUmVmUHRyPENTU1ZhbHVlTGlzdD4gbGlzdCA9IENTU1ZhbHVlTGlz
dDo6Y3JlYXRlQ29tbWFTZXBhcmF0ZWQoKTsKICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+
IGNvdW50ZXJOYW1lOwotICAgIAorCiAgICAgd2hpbGUgKHRydWUpIHsKICAgICAgICAgQ1NTUGFy
c2VyVmFsdWUqIHZhbCA9IG1fdmFsdWVMaXN0LT5jdXJyZW50KCk7CiAgICAgICAgIHN3aXRjaCAo
c3RhdGUpIHsKQEAgLTQzNjEsNyArNDM2Myw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUNvdW50
ZXIoaW50IHByb3BJZCwgaW50IGRlZmF1bHRWYWx1ZSwgYm9vbCBpbXBvcnRhbnQpCiAgICAgICAg
IH0KICAgICAgICAgYnJlYWs7CiAgICAgfQotICAgIAorCiAgICAgaWYgKGxpc3QtPmxlbmd0aCgp
ID4gMCkgewogICAgICAgICBhZGRQcm9wZXJ0eShwcm9wSWQsIGxpc3QucmVsZWFzZSgpLCBpbXBv
cnRhbnQpOwogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTQzNzQsNyArNDM3Niw3IEBAIHN0YXRp
YyBQYXNzUmVmUHRyPENTU1ByaW1pdGl2ZVZhbHVlPiBwYXJzZUdyYWRpZW50UG9pbnQoQ1NTUGFy
c2VyVmFsdWUqIGEsIGJvb2wKIHsKICAgICBSZWZQdHI8Q1NTUHJpbWl0aXZlVmFsdWU+IHJlc3Vs
dDsKICAgICBpZiAoYS0+dW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1ZTo6Q1NTX0lERU5UKSB7Ci0g
ICAgICAgIGlmICgoZXF1YWxJZ25vcmluZ0Nhc2UoYS0+c3RyaW5nLCAibGVmdCIpICYmIGhvcml6
b250YWwpIHx8IAorICAgICAgICBpZiAoKGVxdWFsSWdub3JpbmdDYXNlKGEtPnN0cmluZywgImxl
ZnQiKSAmJiBob3Jpem9udGFsKSB8fAogICAgICAgICAgICAgKGVxdWFsSWdub3JpbmdDYXNlKGEt
PnN0cmluZywgInRvcCIpICYmICFob3Jpem9udGFsKSkKICAgICAgICAgICAgIHJlc3VsdCA9IENT
U1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUoMC4sIENTU1ByaW1pdGl2ZVZhbHVlOjpDU1NfUEVSQ0VO
VEFHRSk7CiAgICAgICAgIGVsc2UgaWYgKChlcXVhbElnbm9yaW5nQ2FzZShhLT5zdHJpbmcsICJy
aWdodCIpICYmIGhvcml6b250YWwpIHx8CkBAIC00MzkxLDI3ICs0MzkzLDI3IEBAIHN0YXRpYyBi
b29sIHBhcnNlR3JhZGllbnRDb2xvclN0b3AoQ1NTUGFyc2VyKiBwLCBDU1NQYXJzZXJWYWx1ZSog
YSwgQ1NTR3JhZGllbnRDCiB7CiAgICAgaWYgKGEtPnVuaXQgIT0gQ1NTUGFyc2VyVmFsdWU6OkZ1
bmN0aW9uKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCisKICAgICBpZiAoIWVxdWFsSWdu
b3JpbmdDYXNlKGEtPmZ1bmN0aW9uLT5uYW1lLCAiZnJvbSgiKSAmJgogICAgICAgICAhZXF1YWxJ
Z25vcmluZ0Nhc2UoYS0+ZnVuY3Rpb24tPm5hbWUsICJ0bygiKSAmJgogICAgICAgICAhZXF1YWxJ
Z25vcmluZ0Nhc2UoYS0+ZnVuY3Rpb24tPm5hbWUsICJjb2xvci1zdG9wKCIpKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7Ci0gICAgCisKICAgICBDU1NQYXJzZXJWYWx1ZUxpc3QqIGFyZ3MgPSBhLT5m
dW5jdGlvbi0+YXJnczsKICAgICBpZiAoIWFyZ3MpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAKLSAgICBpZiAoZXF1YWxJZ25vcmluZ0Nhc2UoYS0+ZnVuY3Rpb24tPm5hbWUsICJmcm9tKCIp
IHx8IAorCisgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGEtPmZ1bmN0aW9uLT5uYW1lLCAiZnJv
bSgiKSB8fAogICAgICAgICBlcXVhbElnbm9yaW5nQ2FzZShhLT5mdW5jdGlvbi0+bmFtZSwgInRv
KCIpKSB7CiAgICAgICAgIC8vIFRoZSAiZnJvbSIgYW5kICJ0byIgc3RvcHMgZXhwZWN0IDEgYXJn
dW1lbnQuCiAgICAgICAgIGlmIChhcmdzLT5zaXplKCkgIT0gMSkKICAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICAgICAgCisKICAgICAgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGEtPmZ1
bmN0aW9uLT5uYW1lLCAiZnJvbSgiKSkKICAgICAgICAgICAgIHN0b3AubV9zdG9wID0gMC5mOwog
ICAgICAgICBlbHNlCiAgICAgICAgICAgICBzdG9wLm1fc3RvcCA9IDEuZjsKLSAgICAgICAgCisK
ICAgICAgICAgaW50IGlkID0gYXJncy0+Y3VycmVudCgpLT5pZDsKICAgICAgICAgaWYgKGlkID09
IENTU1ZhbHVlV2Via2l0VGV4dCB8fCAoaWQgPj0gQ1NTVmFsdWVBcXVhICYmIGlkIDw9IENTU1Zh
bHVlV2luZG93dGV4dCkgfHwgaWQgPT0gQ1NTVmFsdWVNZW51KQogICAgICAgICAgICAgc3RvcC5t
X2NvbG9yID0gQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZUlkZW50aWZpZXIoaWQpOwpAQCAtNDQy
MCwxMiArNDQyMiwxMiBAQCBzdGF0aWMgYm9vbCBwYXJzZUdyYWRpZW50Q29sb3JTdG9wKENTU1Bh
cnNlciogcCwgQ1NTUGFyc2VyVmFsdWUqIGEsIENTU0dyYWRpZW50QwogICAgICAgICBpZiAoIXN0
b3AubV9jb2xvcikKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9Ci0gICAgCisKICAg
ICAvLyBUaGUgImNvbG9yLXN0b3AiIGZ1bmN0aW9uIGV4cGVjdHMgMyBhcmd1bWVudHMuCiAgICAg
aWYgKGVxdWFsSWdub3JpbmdDYXNlKGEtPmZ1bmN0aW9uLT5uYW1lLCAiY29sb3Itc3RvcCgiKSkg
ewogICAgICAgICBpZiAoYXJncy0+c2l6ZSgpICE9IDMpCiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7Ci0gICAgICAgIAorCiAgICAgICAgIENTU1BhcnNlclZhbHVlKiBzdG9wQXJnID0gYXJncy0+
Y3VycmVudCgpOwogICAgICAgICBpZiAoc3RvcEFyZy0+dW5pdCA9PSBDU1NQcmltaXRpdmVWYWx1
ZTo6Q1NTX1BFUkNFTlRBR0UpCiAgICAgICAgICAgICBzdG9wLm1fc3RvcCA9IChmbG9hdClzdG9w
QXJnLT5mVmFsdWUgLyAxMDAuZjsKQEAgLTQ0MzcsNyArNDQzOSw3IEBAIHN0YXRpYyBib29sIHBh
cnNlR3JhZGllbnRDb2xvclN0b3AoQ1NTUGFyc2VyKiBwLCBDU1NQYXJzZXJWYWx1ZSogYSwgQ1NT
R3JhZGllbnRDCiAgICAgICAgIHN0b3BBcmcgPSBhcmdzLT5uZXh0KCk7CiAgICAgICAgIGlmIChz
dG9wQXJnLT51bml0ICE9IENTU1BhcnNlclZhbHVlOjpPcGVyYXRvciB8fCBzdG9wQXJnLT5pVmFs
dWUgIT0gJywnKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgCisKICAg
ICAgICAgc3RvcEFyZyA9IGFyZ3MtPm5leHQoKTsKICAgICAgICAgaW50IGlkID0gc3RvcEFyZy0+
aWQ7CiAgICAgICAgIGlmIChpZCA9PSBDU1NWYWx1ZVdlYmtpdFRleHQgfHwgKGlkID49IENTU1Zh
bHVlQXF1YSAmJiBpZCA8PSBDU1NWYWx1ZVdpbmRvd3RleHQpIHx8IGlkID09IENTU1ZhbHVlTWVu
dSkKQEAgLTQ0NTQsMTIgKzQ0NTYsMTIgQEAgc3RhdGljIGJvb2wgcGFyc2VHcmFkaWVudENvbG9y
U3RvcChDU1NQYXJzZXIqIHAsIENTU1BhcnNlclZhbHVlKiBhLCBDU1NHcmFkaWVudEMKIGJvb2wg
Q1NTUGFyc2VyOjpwYXJzZUdyYWRpZW50KFJlZlB0cjxDU1NWYWx1ZT4mIGdyYWRpZW50KQogewog
ICAgIFJlZlB0cjxDU1NHcmFkaWVudFZhbHVlPiByZXN1bHQgPSBDU1NHcmFkaWVudFZhbHVlOjpj
cmVhdGUoKTsKLSAgICAKKwogICAgIC8vIFdhbGsgdGhlIGFyZ3VtZW50cy4KICAgICBDU1NQYXJz
ZXJWYWx1ZUxpc3QqIGFyZ3MgPSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpLT5mdW5jdGlvbi0+YXJn
czsKICAgICBpZiAoIWFyZ3MgfHwgYXJncy0+c2l6ZSgpID09IDApCiAgICAgICAgIHJldHVybiBm
YWxzZTsKLSAgICAKKwogICAgIC8vIFRoZSBmaXJzdCBhcmd1bWVudCBpcyB0aGUgZ3JhZGllbnQg
dHlwZS4gIEl0IGlzIGFuIGlkZW50aWZpZXIuCiAgICAgQ1NTUGFyc2VyVmFsdWUqIGEgPSBhcmdz
LT5jdXJyZW50KCk7CiAgICAgaWYgKCFhIHx8IGEtPnVuaXQgIT0gQ1NTUHJpbWl0aXZlVmFsdWU6
OkNTU19JREVOVCkKQEAgLTQ0NzAsMTIgKzQ0NzIsMTIgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNl
R3JhZGllbnQoUmVmUHRyPENTU1ZhbHVlPiYgZ3JhZGllbnQpCiAgICAgICAgIHJlc3VsdC0+c2V0
VHlwZShDU1NSYWRpYWxHcmFkaWVudCk7CiAgICAgZWxzZQogICAgICAgICByZXR1cm4gZmFsc2U7
Ci0gICAgCisKICAgICAvLyBDb21tYS4KICAgICBhID0gYXJncy0+bmV4dCgpOwogICAgIGlmICgh
YSB8fCBhLT51bml0ICE9IENTU1BhcnNlclZhbHVlOjpPcGVyYXRvciB8fCBhLT5pVmFsdWUgIT0g
JywnKQogICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCisKICAgICAvLyBOZXh0IGNvbWVzIHRo
ZSBzdGFydGluZyBwb2ludCBmb3IgdGhlIGdyYWRpZW50IGFzIGFuIHggeSBwYWlyLiAgVGhlcmUg
aXMgbm8KICAgICAvLyBjb21tYSBiZXR3ZWVuIHRoZSB4IGFuZCB0aGUgeSB2YWx1ZXMuCiAgICAg
Ly8gRmlyc3QgWC4gIEl0IGNhbiBiZSBsZWZ0LCByaWdodCwgbnVtYmVyIG9yIHBlcmNlbnQuCkBA
IC00NDg2LDcgKzQ0ODgsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VHcmFkaWVudChSZWZQdHI8
Q1NTVmFsdWU+JiBncmFkaWVudCkKICAgICBpZiAoIXBvaW50KQogICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgcmVzdWx0LT5zZXRGaXJzdFgocG9pbnQucmVsZWFzZSgpKTsKLSAgICAKKwogICAg
IC8vIEZpcnN0IFkuICBJdCBjYW4gYmUgdG9wLCBib3R0b20sIG51bWJlciBvciBwZXJjZW50Lgog
ICAgIGEgPSBhcmdzLT5uZXh0KCk7CiAgICAgaWYgKCFhKQpAQCAtNDQ5NSwyNSArNDQ5NywyNSBA
QCBib29sIENTU1BhcnNlcjo6cGFyc2VHcmFkaWVudChSZWZQdHI8Q1NTVmFsdWU+JiBncmFkaWVu
dCkKICAgICBpZiAoIXBvaW50KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgcmVzdWx0LT5z
ZXRGaXJzdFkocG9pbnQucmVsZWFzZSgpKTsKLSAgICAKKwogICAgIC8vIENvbW1hIGFmdGVyIHRo
ZSBmaXJzdCBwb2ludC4KICAgICBhID0gYXJncy0+bmV4dCgpOwogICAgIGlmICghYSB8fCBhLT51
bml0ICE9IENTU1BhcnNlclZhbHVlOjpPcGVyYXRvciB8fCBhLT5pVmFsdWUgIT0gJywnKQogICAg
ICAgICByZXR1cm4gZmFsc2U7Ci0gICAgICAgICAgICAKKwogICAgIC8vIEZvciByYWRpYWwgZ3Jh
ZGllbnRzIG9ubHksIHdlIG5vdyBleHBlY3QgYSBudW1lcmljIHJhZGl1cy4KICAgICBpZiAocmVz
dWx0LT50eXBlKCkgPT0gQ1NTUmFkaWFsR3JhZGllbnQpIHsKICAgICAgICAgYSA9IGFyZ3MtPm5l
eHQoKTsKICAgICAgICAgaWYgKCFhIHx8IGEtPnVuaXQgIT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNT
U19OVU1CRVIpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgIHJlc3VsdC0+c2V0
Rmlyc3RSYWRpdXMoQ1NTUHJpbWl0aXZlVmFsdWU6OmNyZWF0ZShhLT5mVmFsdWUsIENTU1ByaW1p
dGl2ZVZhbHVlOjpDU1NfTlVNQkVSKSk7Ci0gICAgICAgIAorCiAgICAgICAgIC8vIENvbW1hIGFm
dGVyIHRoZSBmaXJzdCByYWRpdXMuCiAgICAgICAgIGEgPSBhcmdzLT5uZXh0KCk7CiAgICAgICAg
IGlmICghYSB8fCBhLT51bml0ICE9IENTU1BhcnNlclZhbHVlOjpPcGVyYXRvciB8fCBhLT5pVmFs
dWUgIT0gJywnKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KLSAgICAKKwogICAg
IC8vIE5leHQgaXMgdGhlIGVuZGluZyBwb2ludCBmb3IgdGhlIGdyYWRpZW50IGFzIGFuIHgsIHkg
cGFpci4KICAgICAvLyBTZWNvbmQgWC4gIEl0IGNhbiBiZSBsZWZ0LCByaWdodCwgbnVtYmVyIG9y
IHBlcmNlbnQuCiAgICAgYSA9IGFyZ3MtPm5leHQoKTsKQEAgLTQ1MjMsNyArNDUyNSw3IEBAIGJv
b2wgQ1NTUGFyc2VyOjpwYXJzZUdyYWRpZW50KFJlZlB0cjxDU1NWYWx1ZT4mIGdyYWRpZW50KQog
ICAgIGlmICghcG9pbnQpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXN1bHQtPnNldFNl
Y29uZFgocG9pbnQucmVsZWFzZSgpKTsKLSAgICAKKwogICAgIC8vIFNlY29uZCBZLiAgSXQgY2Fu
IGJlIHRvcCwgYm90dG9tLCBudW1iZXIgb3IgcGVyY2VudC4KICAgICBhID0gYXJncy0+bmV4dCgp
OwogICAgIGlmICghYSkKQEAgLTQ1MzksNyArNDU0MSw3IEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJz
ZUdyYWRpZW50KFJlZlB0cjxDU1NWYWx1ZT4mIGdyYWRpZW50KQogICAgICAgICBhID0gYXJncy0+
bmV4dCgpOwogICAgICAgICBpZiAoIWEgfHwgYS0+dW5pdCAhPSBDU1NQYXJzZXJWYWx1ZTo6T3Bl
cmF0b3IgfHwgYS0+aVZhbHVlICE9ICcsJykKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgCisKICAgICAgICAgYSA9IGFyZ3MtPm5leHQoKTsKICAgICAgICAgaWYgKCFhIHx8IGEt
PnVuaXQgIT0gQ1NTUHJpbWl0aXZlVmFsdWU6OkNTU19OVU1CRVIpCiAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CkBAIC00NTUyLDIyICs0NTU0LDIyIEBAIGJvb2wgQ1NTUGFyc2VyOjpwYXJzZUdy
YWRpZW50KFJlZlB0cjxDU1NWYWx1ZT4mIGdyYWRpZW50KQogICAgICAgICAvLyBMb29rIGZvciB0
aGUgY29tbWEgYmVmb3JlIHRoZSBuZXh0IHN0b3AuCiAgICAgICAgIGlmIChhLT51bml0ICE9IENT
U1BhcnNlclZhbHVlOjpPcGVyYXRvciB8fCBhLT5pVmFsdWUgIT0gJywnKQogICAgICAgICAgICAg
cmV0dXJuIGZhbHNlOwotICAgICAgICAKKwogICAgICAgICAvLyBOb3cgZXhhbWluZSB0aGUgc3Rv
cCBpdHNlbGYuCiAgICAgICAgIGEgPSBhcmdzLT5uZXh0KCk7CiAgICAgICAgIGlmICghYSkKICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAgICAgICAgCisKICAgICAgICAgLy8gVGhlIGZ1bmN0
aW9uIG5hbWUgbmVlZHMgdG8gYmUgb25lIG9mICJmcm9tIiwgInRvIiwgb3IgImNvbG9yLXN0b3Au
IgogICAgICAgICBDU1NHcmFkaWVudENvbG9yU3RvcCBzdG9wOwogICAgICAgICBpZiAoIXBhcnNl
R3JhZGllbnRDb2xvclN0b3AodGhpcywgYSwgc3RvcCkpCiAgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgICAgIHJlc3VsdC0+YWRkU3RvcChzdG9wKTsKLSAgICAgICAgCisKICAgICAgICAg
Ly8gQWR2YW5jZQogICAgICAgICBhID0gYXJncy0+bmV4dCgpOwogICAgIH0KLSAgICAKKwogICAg
IGdyYWRpZW50ID0gcmVzdWx0LnJlbGVhc2UoKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KQEAgLTQ1
NzUsMTIgKzQ1NzcsMTIgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlR3JhZGllbnQoUmVmUHRyPENT
U1ZhbHVlPiYgZ3JhZGllbnQpCiBib29sIENTU1BhcnNlcjo6cGFyc2VDYW52YXMoUmVmUHRyPENT
U1ZhbHVlPiYgY2FudmFzKQogewogICAgIFJlZlB0cjxDU1NDYW52YXNWYWx1ZT4gcmVzdWx0ID0g
Q1NTQ2FudmFzVmFsdWU6OmNyZWF0ZSgpOwotICAgIAorCiAgICAgLy8gV2FsayB0aGUgYXJndW1l
bnRzLgogICAgIENTU1BhcnNlclZhbHVlTGlzdCogYXJncyA9IG1fdmFsdWVMaXN0LT5jdXJyZW50
KCktPmZ1bmN0aW9uLT5hcmdzOwogICAgIGlmICghYXJncyB8fCBhcmdzLT5zaXplKCkgIT0gMSkK
ICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIAorCiAgICAgLy8gVGhlIGZpcnN0IGFyZ3VtZW50
IGlzIHRoZSBjYW52YXMgbmFtZS4gIEl0IGlzIGFuIGlkZW50aWZpZXIuCiAgICAgQ1NTUGFyc2Vy
VmFsdWUqIGEgPSBhcmdzLT5jdXJyZW50KCk7CiAgICAgaWYgKCFhIHx8IGEtPnVuaXQgIT0gQ1NT
UHJpbWl0aXZlVmFsdWU6OkNTU19JREVOVCkKQEAgLTQ2NjksNyArNDY3MSw3IEBAIHB1YmxpYzoK
ICAgICAgICAgICAgIG1fYXJnQ291bnQgPSAzOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAg
ICAgV2ViS2l0Q1NTVHJhbnNmb3JtVmFsdWU6OlRyYW5zZm9ybU9wZXJhdGlvblR5cGUgdHlwZSgp
IGNvbnN0IHsgcmV0dXJuIG1fdHlwZTsgfQogICAgIHVuc2lnbmVkIGFyZ0NvdW50KCkgY29uc3Qg
eyByZXR1cm4gbV9hcmdDb3VudDsgfQogICAgIENTU1BhcnNlcjo6VW5pdHMgdW5pdCgpIGNvbnN0
IHsgcmV0dXJuIG1fdW5pdDsgfQpAQCAtNDY5NSwxNyArNDY5NywxNyBAQCBQYXNzUmVmUHRyPENT
U1ZhbHVlTGlzdD4gQ1NTUGFyc2VyOjpwYXJzZVRyYW5zZm9ybSgpCiAgICAgZm9yIChDU1NQYXJz
ZXJWYWx1ZSogdmFsdWUgPSBtX3ZhbHVlTGlzdC0+Y3VycmVudCgpOyB2YWx1ZTsgdmFsdWUgPSBt
X3ZhbHVlTGlzdC0+bmV4dCgpKSB7CiAgICAgICAgIGlmICh2YWx1ZS0+dW5pdCAhPSBDU1NQYXJz
ZXJWYWx1ZTo6RnVuY3Rpb24gfHwgIXZhbHVlLT5mdW5jdGlvbikKICAgICAgICAgICAgIHJldHVy
biAwOwotICAgICAgICAKKwogICAgICAgICAvLyBFdmVyeSBwcmltaXRpdmUgcmVxdWlyZXMgYXQg
bGVhc3Qgb25lIGFyZ3VtZW50LgogICAgICAgICBDU1NQYXJzZXJWYWx1ZUxpc3QqIGFyZ3MgPSB2
YWx1ZS0+ZnVuY3Rpb24tPmFyZ3M7CiAgICAgICAgIGlmICghYXJncykKICAgICAgICAgICAgIHJl
dHVybiAwOwotICAgICAgICAKKwogICAgICAgICAvLyBTZWUgaWYgdGhlIHNwZWNpZmllZCBwcmlt
aXRpdmUgaXMgb25lIHdlIHVuZGVyc3RhbmQuCiAgICAgICAgIFRyYW5zZm9ybU9wZXJhdGlvbklu
Zm8gaW5mbyh2YWx1ZS0+ZnVuY3Rpb24tPm5hbWUpOwogICAgICAgICBpZiAoaW5mby51bmtub3du
KCkpCiAgICAgICAgICAgICByZXR1cm4gMDsKLSAgICAgICAKKwogICAgICAgICBpZiAoIWluZm8u
aGFzQ29ycmVjdEFyZ0NvdW50KGFyZ3MtPnNpemUoKSkpCiAgICAgICAgICAgICByZXR1cm4gMDsK
IApAQCAtNDcyNSw3ICs0NzI3LDcgQEAgUGFzc1JlZlB0cjxDU1NWYWx1ZUxpc3Q+IENTU1BhcnNl
cjo6cGFyc2VUcmFuc2Zvcm0oKQogICAgICAgICAgICAgICAgICAgICByZXR1cm4gMDsKICAgICAg
ICAgICAgIH0gZWxzZSBpZiAoIXZhbGlkVW5pdChhLCB1bml0LCB0cnVlKSkKICAgICAgICAgICAg
ICAgICByZXR1cm4gMDsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICAvLyBBZGQgdGhlIHZh
bHVlIHRvIHRoZSBjdXJyZW50IHRyYW5zZm9ybSBvcGVyYXRpb24uCiAgICAgICAgICAgICB0cmFu
c2Zvcm1WYWx1ZS0+YXBwZW5kKENTU1ByaW1pdGl2ZVZhbHVlOjpjcmVhdGUoYS0+ZlZhbHVlLCAo
Q1NTUHJpbWl0aXZlVmFsdWU6OlVuaXRUeXBlcykgYS0+dW5pdCkpOwogCkBAIC00NzM1LDExICs0
NzM3LDExIEBAIFBhc3NSZWZQdHI8Q1NTVmFsdWVMaXN0PiBDU1NQYXJzZXI6OnBhcnNlVHJhbnNm
b3JtKCkKICAgICAgICAgICAgIGlmIChhLT51bml0ICE9IENTU1BhcnNlclZhbHVlOjpPcGVyYXRv
ciB8fCBhLT5pVmFsdWUgIT0gJywnKQogICAgICAgICAgICAgICAgIHJldHVybiAwOwogICAgICAg
ICAgICAgYSA9IGFyZ3MtPm5leHQoKTsKLSAgICAgICAgICAgIAorCiAgICAgICAgICAgICBhcmdO
dW1iZXIrKzsKICAgICAgICAgfQogICAgIH0KLSAgICAKKwogICAgIHJldHVybiBsaXN0LnJlbGVh
c2UoKTsKIH0KIApAQCAtNDc4MSw3ICs0NzgzLDcgQEAgYm9vbCBDU1NQYXJzZXI6OnBhcnNlVHJh
bnNmb3JtT3JpZ2luKGludCBwcm9wSWQsIGludCYgcHJvcElkMSwgaW50JiBwcm9wSWQyLCBpbnQK
ICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAgICAgfQotICAgIAorCiAgICAgcmV0dXJu
IHZhbHVlOwogfQogCkBAIC00ODEzLDcgKzQ4MTUsNyBAQCBib29sIENTU1BhcnNlcjo6cGFyc2VQ
ZXJzcGVjdGl2ZU9yaWdpbihpbnQgcHJvcElkLCBpbnQmIHByb3BJZDEsIGludCYgcHJvcElkMiwg
UgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICB9Ci0gICAgCisKICAgICByZXR1
cm4gdmFsdWU7CiB9CiAKQEAgLTUwNDEsOSArNTA0Myw5IEBAIFVDaGFyKiBDU1NQYXJzZXI6OnRl
eHQoaW50ICpsZW5ndGgpCiAgICAgICAgICAgICB1YyA9IDB4ZmZmZDsKICAgICAgICAgKm91dCsr
ID0gdWM7CiAgICAgfQotICAgIAorCiAgICAgKmxlbmd0aCA9IG91dCAtIHN0YXJ0OwotICAgIAor
CiAgICAgLy8gSWYgd2UgaGF2ZSBhbiB1bnJlY29nbml6ZWQgQC1rZXl3b3JkLCBhbmQgaWYgd2Ug
aGFuZGxlZCBhbnkgZXNjYXBlcyBhdCBhbGwsIHRoZW4KICAgICAvLyB3ZSBzaG91bGQgYXR0ZW1w
dCB0byBhZGp1c3QgeXlUb2sgdG8gdGhlIGNvcnJlY3QgdHlwZS4KICAgICBpZiAoeXlUb2sgPT0g
QVRLRVlXT1JEICYmIHNhd0VzY2FwZSkKQEAgLTUyMTAsNyArNTIxMiw3IEBAIENTU1J1bGVMaXN0
KiBDU1NQYXJzZXI6OmNyZWF0ZVJ1bGVMaXN0KCkKIHsKICAgICBSZWZQdHI8Q1NTUnVsZUxpc3Q+
IGxpc3QgPSBDU1NSdWxlTGlzdDo6Y3JlYXRlKCk7CiAgICAgQ1NTUnVsZUxpc3QqIGxpc3RQdHIg
PSBsaXN0LmdldCgpOwotICAgIAorCiAgICAgbV9wYXJzZWRSdWxlTGlzdHMuYXBwZW5kKGxpc3Qu
cmVsZWFzZSgpKTsKICAgICByZXR1cm4gbGlzdFB0cjsKIH0KQEAgLTUyMzAsNiArNTIzMiw4IEBA
IENTU1J1bGUqIENTU1BhcnNlcjo6Y3JlYXRlU3R5bGVSdWxlKFZlY3RvcjxDU1NTZWxlY3Rvcio+
KiBzZWxlY3RvcnMpCiAgICAgQ1NTU3R5bGVSdWxlKiByZXN1bHQgPSAwOwogICAgIGlmIChzZWxl
Y3RvcnMpIHsKICAgICAgICAgUmVmUHRyPENTU1N0eWxlUnVsZT4gcnVsZSA9IENTU1N0eWxlUnVs
ZTo6Y3JlYXRlKG1fc3R5bGVTaGVldCwgbV9sYXN0U2VsZWN0b3JMaW5lKTsKKyAgICAgICAgaWYg
KG1fcnVsZVN0YXJ0RW5kT2Zmc2V0cykKKyAgICAgICAgICAgIG1fcnVsZVN0YXJ0RW5kT2Zmc2V0
cy0+YXBwZW5kKHN0ZDo6cGFpcjx1bnNpZ25lZCwgdW5zaWduZWQ+KG1fc3RhcnRPZmZzZXQsIG1f
ZW5kT2Zmc2V0KSk7CiAgICAgICAgIHJ1bGUtPmFkb3B0U2VsZWN0b3JWZWN0b3IoKnNlbGVjdG9y
cyk7CiAgICAgICAgIGlmIChtX2hhc0ZvbnRGYWNlT25seVZhbHVlcykKICAgICAgICAgICAgIGRl
bGV0ZUZvbnRGYWNlT25seVZhbHVlcygpOwpAQCAtNTI5Niw3ICs1MzAwLDcgQEAgQ1NTUnVsZSog
Q1NTUGFyc2VyOjpjcmVhdGVWYXJpYWJsZXNSdWxlKE1lZGlhTGlzdCogbWVkaWFMaXN0LCBib29s
IHZhcmlhYmxlc0tleXcKICAgICBtX2FsbG93SW1wb3J0UnVsZXMgPSBmYWxzZTsKICAgICBSZWZQ
dHI8Q1NTVmFyaWFibGVzUnVsZT4gcnVsZSA9IENTU1ZhcmlhYmxlc1J1bGU6OmNyZWF0ZShtX3N0
eWxlU2hlZXQsIG1lZGlhTGlzdCwgdmFyaWFibGVzS2V5d29yZCk7CiAgICAgcnVsZS0+c2V0RGVj
bGFyYXRpb24oQ1NTVmFyaWFibGVzRGVjbGFyYXRpb246OmNyZWF0ZShydWxlLmdldCgpLCBtX3Zh
cmlhYmxlTmFtZXMsIG1fdmFyaWFibGVWYWx1ZXMpKTsKLSAgICBjbGVhclZhcmlhYmxlcygpOyAg
ICAKKyAgICBjbGVhclZhcmlhYmxlcygpOwogICAgIENTU1J1bGUqIHJlc3VsdCA9IHJ1bGUuZ2V0
KCk7CiAgICAgbV9wYXJzZWRTdHlsZU9iamVjdHMuYXBwZW5kKHJ1bGUucmVsZWFzZSgpKTsKICAg
ICByZXR1cm4gcmVzdWx0OwpAQCAtNTM4NCw4ICs1Mzg4LDggQEAgYm9vbCBDU1NQYXJzZXI6OnBh
cnNlVmFyaWFibGUoQ1NTVmFyaWFibGVzRGVjbGFyYXRpb24qIGRlY2xhcmF0aW9uLCBjb25zdCBT
dHJpbmcKICAgICBpZiAobV92YXJpYWJsZU5hbWVzLnNpemUoKSkgewogICAgICAgICBvayA9IHRy
dWU7CiAgICAgICAgIGRlY2xhcmF0aW9uLT5hZGRQYXJzZWRWYXJpYWJsZSh2YXJpYWJsZU5hbWUs
IG1fdmFyaWFibGVWYWx1ZXNbMF0pOwotICAgIH0gCi0gICAgCisgICAgfQorCiAgICAgY2xlYXJW
YXJpYWJsZXMoKTsKIAogICAgIHJldHVybiBvazsKQEAgLTUzOTgsNyArNTQwMiw3IEBAIHZvaWQg
Q1NTUGFyc2VyOjpwYXJzZVByb3BlcnR5V2l0aFJlc29sdmVkVmFyaWFibGVzKGludCBwcm9wSWQs
IGJvb2wgaXNJbXBvcnRhbnQsCiAKICAgICBpZiAocGFyc2VWYWx1ZShwcm9wSWQsIGlzSW1wb3J0
YW50KSkKICAgICAgICAgZGVjbGFyYXRpb24tPmFkZFBhcnNlZFByb3BlcnRpZXMobV9wYXJzZWRQ
cm9wZXJ0aWVzLCBtX251bVBhcnNlZFByb3BlcnRpZXMpOwotICAgICAgICAKKwogICAgIGNsZWFy
UHJvcGVydGllcygpOwogICAgIG1fdmFsdWVMaXN0ID0gMDsKIH0KQEAgLTU0MTMsOCArNTQxNyw4
IEBAIGJvb2wgQ1NTUGFyc2VyOjpjaGVja0ZvclZhcmlhYmxlcyhDU1NQYXJzZXJWYWx1ZUxpc3Qq
IHZhbHVlTGlzdCkKICAgICAgICAgaWYgKHZhbHVlTGlzdC0+dmFsdWVBdChpKS0+aXNWYXJpYWJs
ZSgpKSB7CiAgICAgICAgICAgICBoYXNWYXJpYWJsZXMgPSB0cnVlOwogICAgICAgICAgICAgYnJl
YWs7Ci0gICAgICAgIH0gCi0gICAgICAgIAorICAgICAgICB9CisKICAgICAgICAgaWYgKHZhbHVl
TGlzdC0+dmFsdWVBdChpKS0+dW5pdCA9PSBDU1NQYXJzZXJWYWx1ZTo6RnVuY3Rpb24gJiYgY2hl
Y2tGb3JWYXJpYWJsZXModmFsdWVMaXN0LT52YWx1ZUF0KGkpLT5mdW5jdGlvbi0+YXJncykpIHsK
ICAgICAgICAgICAgIGhhc1ZhcmlhYmxlcyA9IHRydWU7CiAgICAgICAgICAgICBicmVhazsKQEAg
LTU0NTksMTEgKzU0NjMsMTEgQEAgV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlKiBDU1NQYXJzZXI6OmNy
ZWF0ZUtleWZyYW1lUnVsZShDU1NQYXJzZXJWYWx1ZUxpc3QqIGtleXMpCiAgICAgICAgIGtleVN0
cmluZyArPSBTdHJpbmc6Om51bWJlcihrZXkpOwogICAgICAgICBrZXlTdHJpbmcgKz0gIiUiOwog
ICAgIH0KLSAgICAKKwogICAgIFJlZlB0cjxXZWJLaXRDU1NLZXlmcmFtZVJ1bGU+IGtleWZyYW1l
ID0gV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlOjpjcmVhdGUobV9zdHlsZVNoZWV0KTsKICAgICBrZXlm
cmFtZS0+c2V0S2V5VGV4dChrZXlTdHJpbmcpOwogICAgIGtleWZyYW1lLT5zZXREZWNsYXJhdGlv
bihDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Y3JlYXRlKDAsIG1fcGFyc2VkUHJvcGVydGll
cywgbV9udW1QYXJzZWRQcm9wZXJ0aWVzKSk7Ci0gICAgCisKICAgICBjbGVhclByb3BlcnRpZXMo
KTsKIAogICAgIFdlYktpdENTU0tleWZyYW1lUnVsZSoga2V5ZnJhbWVQdHIgPSBrZXlmcmFtZS5n
ZXQoKTsKQEAgLTU0NzcsNiArNTQ4MSwyMCBAQCB2b2lkIENTU1BhcnNlcjo6aW52YWxpZEJsb2Nr
SGl0KCkKICAgICAgICAgbV9zdHlsZVNoZWV0LT5zZXRIYXNTeW50YWN0aWNhbGx5VmFsaWRDU1NI
ZWFkZXIoZmFsc2UpOwogfQogCit2b2lkIENTU1BhcnNlcjo6bWFya1N0YXJ0KCkKK3sKKyAgICB1
bnNpZ25lZCBvZmZzZXQgPSB5eXRleHQgLSBtX2RhdGE7CisgICAgaWYgKCFtX3N0YXJ0T2Zmc2V0
IHx8IG9mZnNldCA8IG1fc3RhcnRPZmZzZXQpCisgICAgICAgIG1fc3RhcnRPZmZzZXQgPSBvZmZz
ZXQ7Cit9CisKK3ZvaWQgQ1NTUGFyc2VyOjptYXJrRW5kKCkKK3sKKyAgICB1bnNpZ25lZCBvZmZz
ZXQgPSB5eXRleHQgLSBtX2RhdGE7CisgICAgaWYgKG9mZnNldCA+IG1fZW5kT2Zmc2V0KQorICAg
ICAgICBtX2VuZE9mZnNldCA9IG9mZnNldDsKK30KKwogc3RhdGljIGludCBjc3NQcm9wZXJ0eUlE
KGNvbnN0IFVDaGFyKiBwcm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGxlbmd0aCkKIHsKICAgICBpZiAo
IWxlbmd0aCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5oIGIvV2ViQ29yZS9j
c3MvQ1NTUGFyc2VyLmgKaW5kZXggNmUwMzU0ZS4uMjQ5ODY4NyAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9jc3MvQ1NTUGFyc2VyLmgKKysrIGIvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmgKQEAgLTU2LDcg
KzU2LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBDU1NQYXJzZXIoYm9vbCBzdHJp
Y3RQYXJzaW5nID0gdHJ1ZSk7CiAgICAgICAgIH5DU1NQYXJzZXIoKTsKIAotICAgICAgICB2b2lk
IHBhcnNlU2hlZXQoQ1NTU3R5bGVTaGVldCosIGNvbnN0IFN0cmluZyYpOworICAgICAgICB2b2lk
IHBhcnNlU2hlZXQoQ1NTU3R5bGVTaGVldCosIGNvbnN0IFN0cmluZyYsIFZlY3RvcjxzdGQ6OnBh
aXI8dW5zaWduZWQsIHVuc2lnbmVkPiA+KiBydWxlU3RhcnRFbmRQb3NpdGlvbnMgPSAwKTsKICAg
ICAgICAgUGFzc1JlZlB0cjxDU1NSdWxlPiBwYXJzZVJ1bGUoQ1NTU3R5bGVTaGVldCosIGNvbnN0
IFN0cmluZyYpOwogICAgICAgICBQYXNzUmVmUHRyPENTU1J1bGU+IHBhcnNlS2V5ZnJhbWVSdWxl
KENTU1N0eWxlU2hlZXQqLCBjb25zdCBTdHJpbmcmKTsKICAgICAgICAgYm9vbCBwYXJzZVZhbHVl
KENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiwgaW50IHByb3BJZCwgY29uc3QgU3RyaW5nJiwg
Ym9vbCBpbXBvcnRhbnQpOwpAQCAtODUsNyArODUsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAg
ICAgICAgIHZvaWQgcGFyc2VGaWxsUG9zaXRpb24oUmVmUHRyPENTU1ZhbHVlPiYsIFJlZlB0cjxD
U1NWYWx1ZT4mKTsKICAgICAgICAgdm9pZCBwYXJzZUZpbGxSZXBlYXQoUmVmUHRyPENTU1ZhbHVl
PiYsIFJlZlB0cjxDU1NWYWx1ZT4mKTsKICAgICAgICAgUGFzc1JlZlB0cjxDU1NWYWx1ZT4gcGFy
c2VGaWxsU2l6ZShpbnQgcHJvcElkLCBib29sICZhbGxvd0NvbW1hKTsKLSAgICAgICAgCisKICAg
ICAgICAgYm9vbCBwYXJzZUZpbGxQcm9wZXJ0eShpbnQgcHJvcElkLCBpbnQmIHByb3BJZDEsIGlu
dCYgcHJvcElkMiwgUmVmUHRyPENTU1ZhbHVlPiYsIFJlZlB0cjxDU1NWYWx1ZT4mKTsKICAgICAg
ICAgYm9vbCBwYXJzZUZpbGxTaG9ydGhhbmQoaW50IHByb3BJZCwgY29uc3QgaW50KiBwcm9wZXJ0
aWVzLCBpbnQgbnVtUHJvcGVydGllcywgYm9vbCBpbXBvcnRhbnQpOwogCkBAIC0xMDgsNyArMTA4
LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBib29sIHBhcnNlQW5pbWF0aW9uUHJv
cGVydHkoaW50IHByb3BJZCwgUmVmUHRyPENTU1ZhbHVlPiYpOwogICAgICAgICBib29sIHBhcnNl
VHJhbnNpdGlvblNob3J0aGFuZChib29sIGltcG9ydGFudCk7CiAgICAgICAgIGJvb2wgcGFyc2VB
bmltYXRpb25TaG9ydGhhbmQoYm9vbCBpbXBvcnRhbnQpOwotICAgICAgICAKKwogICAgICAgICBi
b29sIHBhcnNlRGFzaGJvYXJkUmVnaW9ucyhpbnQgcHJvcElkLCBib29sIGltcG9ydGFudCk7CiAK
ICAgICAgICAgYm9vbCBwYXJzZVNoYXBlKGludCBwcm9wSWQsIGJvb2wgaW1wb3J0YW50KTsKQEAg
LTE0OCw3ICsxNDgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGJvb2wgcGFyc2VT
aGFkb3coaW50IHByb3BJZCwgYm9vbCBpbXBvcnRhbnQpOwogICAgICAgICBib29sIHBhcnNlQm9y
ZGVySW1hZ2UoaW50IHByb3BJZCwgYm9vbCBpbXBvcnRhbnQsIFJlZlB0cjxDU1NWYWx1ZT4mKTsK
ICAgICAgICAgYm9vbCBwYXJzZUJvcmRlclJhZGl1cyhpbnQgcHJvcElkLCBib29sIGltcG9ydGFu
dCk7Ci0gICAgICAgIAorCiAgICAgICAgIGJvb2wgcGFyc2VSZWZsZWN0KGludCBwcm9wSWQsIGJv
b2wgaW1wb3J0YW50KTsKIAogICAgICAgICAvLyBJbWFnZSBnZW5lcmF0b3JzCkBAIC0yMDcsNyAr
MjA3LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiAgICAgICAgIFZlY3RvcjxDU1NTZWxlY3Rv
cio+KiByZXVzYWJsZVNlbGVjdG9yVmVjdG9yKCkgeyByZXR1cm4gJm1fcmV1c2FibGVTZWxlY3Rv
clZlY3RvcjsgfQogCi0gICAgICAgIHZvaWQgdXBkYXRlTGFzdFNlbGVjdG9yTGluZSgpIHsgbV9s
YXN0U2VsZWN0b3JMaW5lID0gbV9saW5lOyB9CisgICAgICAgIHZvaWQgdXBkYXRlTGFzdFNlbGVj
dG9yTGluZUFuZFBvc2l0aW9uKCkgeyBtX2xhc3RTZWxlY3RvckxpbmUgPSBtX2xpbmU7IG1hcmtT
dGFydCgpOyB9CiAKICAgICAgICAgYm9vbCBtX3N0cmljdDsKICAgICAgICAgYm9vbCBtX2ltcG9y
dGFudDsKQEAgLTIzNiwxNSArMjM2LDIxIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAg
QXRvbWljU3RyaW5nIG1fZGVmYXVsdE5hbWVzcGFjZTsKIAogICAgICAgICAvLyB0b2tlbml6ZXIg
bWV0aG9kcyBhbmQgZGF0YQorICAgICAgICB1bnNpZ25lZCBtX3N0YXJ0T2Zmc2V0OworICAgICAg
ICB1bnNpZ25lZCBtX2VuZE9mZnNldDsKKyAgICAgICAgVmVjdG9yPHN0ZDo6cGFpcjx1bnNpZ25l
ZCwgdW5zaWduZWQ+ID4qIG1fcnVsZVN0YXJ0RW5kT2Zmc2V0czsKKyAgICAgICAgdm9pZCBtYXJr
U3RhcnQoKTsKKyAgICAgICAgdm9pZCBtYXJrRW5kKCk7CisgICAgICAgIHZvaWQgcmVzZXRNYXJr
cygpIHsgbV9zdGFydE9mZnNldCA9IG1fZW5kT2Zmc2V0ID0gMDsgfQogICAgICAgICBpbnQgbGV4
KHZvaWQqIHl5bHZhbCk7CiAgICAgICAgIGludCB0b2tlbigpIHsgcmV0dXJuIHl5VG9rOyB9CiAg
ICAgICAgIFVDaGFyKiB0ZXh0KGludCogbGVuZ3RoKTsKICAgICAgICAgdm9pZCBjb3VudExpbmVz
KCk7CiAgICAgICAgIGludCBsZXgoKTsKLSAgICAgICAgCisKICAgICBwcml2YXRlOgogICAgICAg
ICB2b2lkIHJlY2hlY2tBdEtleXdvcmQoY29uc3QgVUNoYXIqIHN0ciwgaW50IGxlbik7Ci0gICAg
CisKICAgICAgICAgdm9pZCBjbGVhclByb3BlcnRpZXMoKTsKIAogICAgICAgICB2b2lkIHNldHVw
UGFyc2VyKGNvbnN0IGNoYXIqIHByZWZpeCwgY29uc3QgU3RyaW5nJiwgY29uc3QgY2hhciogc3Vm
Zml4KTsKQEAgLTI1Miw3ICsyNTgsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIGJv
b2wgaW5TaG9ydGhhbmQoKSBjb25zdCB7IHJldHVybiBtX2luUGFyc2VTaG9ydGhhbmQ7IH0KIAog
ICAgICAgICB2b2lkIGNoZWNrRm9yT3JwaGFuZWRVbml0cygpOwotICAgICAgICAKKwogICAgICAg
ICB2b2lkIGNsZWFyVmFyaWFibGVzKCk7CiAKICAgICAgICAgdm9pZCBkZWxldGVGb250RmFjZU9u
bHlWYWx1ZXMoKTsKQEAgLTI5NCw3ICszMDAsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAg
ICAgIE1lZGlhUXVlcnkqIG1fZmxvYXRpbmdNZWRpYVF1ZXJ5OwogICAgICAgICBNZWRpYVF1ZXJ5
RXhwKiBtX2Zsb2F0aW5nTWVkaWFRdWVyeUV4cDsKICAgICAgICAgVmVjdG9yPE1lZGlhUXVlcnlF
eHAqPiogbV9mbG9hdGluZ01lZGlhUXVlcnlFeHBMaXN0OwotICAgICAgICAKKwogICAgICAgICBW
ZWN0b3I8Q1NTU2VsZWN0b3IqPiBtX3JldXNhYmxlU2VsZWN0b3JWZWN0b3I7CiAKICAgICAgICAg
Ly8gZGVmaW5lcyB1bml0cyBhbGxvd2VkIGZvciBhIGNlcnRhaW4gcHJvcGVydHksIHVzZWQgaW4g
cGFyc2VVbml0CkBAIC0zMTcsNyArMzIzLDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAg
ICB9CiAKICAgICAgICAgc3RhdGljIGJvb2wgdmFsaWRVbml0KENTU1BhcnNlclZhbHVlKiwgVW5p
dHMsIGJvb2wgc3RyaWN0KTsKLSAgICAgICAgCisKICAgICAgICAgZnJpZW5kIGNsYXNzIFRyYW5z
Zm9ybU9wZXJhdGlvbkluZm87CiAgICAgfTsKIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yQ1NTU3RvcmUuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NT
U3RvcmUuY3BwCmluZGV4IGU1MzY4OGIuLjM4ODQ5NDQgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckNTU1N0b3JlLmNwcAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JDU1NTdG9yZS5jcHAKQEAgLTI5LDE0ICsyOSwyMyBAQAogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIkluc3BlY3RvckNTU1N0b3JlLmgiCiAKKyNpbmNsdWRlICJJbnNwZWN0b3JD
b250cm9sbGVyLmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yUmVzb3VyY2UuaCIKKyNpbmNsdWRlICJD
U1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbi5oIgorI2luY2x1ZGUgIkNTU1BhcnNlci5oIgogI2lu
Y2x1ZGUgIkNTU1N0eWxlRGVjbGFyYXRpb24uaCIKICNpbmNsdWRlICJDU1NTdHlsZVJ1bGUuaCIK
ICNpbmNsdWRlICJDU1NTdHlsZVNoZWV0LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIK
KyNpbmNsdWRlICJTY3JpcHRPYmplY3QuaCIKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi1JbnNw
ZWN0b3JDU1NTdG9yZTo6SW5zcGVjdG9yQ1NTU3RvcmUoKQorSW5zcGVjdG9yQ1NTU3RvcmU6Oklu
c3BlY3RvckNTU1N0b3JlKEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckNvbnRyb2xsZXIp
CisgICAgOiBpbnNwZWN0b3JDb250cm9sbGVyKGluc3BlY3RvckNvbnRyb2xsZXIpCisgICAgLCBs
YXN0U3R5bGVJZCgxKQorICAgICwgbGFzdFN0eWxlU2hlZXRJZCgxKQorCSAgICwgbGFzdFJ1bGVJ
ZCgxKQogewogfQogCkBAIC01MCw4ICs1OSw5MiBAQCB2b2lkIEluc3BlY3RvckNTU1N0b3JlOjpy
ZXNldCgpCiAgICAgaWRUb1N0eWxlLmNsZWFyKCk7CiAgICAgcnVsZVRvSWQuY2xlYXIoKTsKICAg
ICBpZFRvUnVsZS5jbGVhcigpOworICAgIGRlbGV0ZUFsbFZhbHVlcyhzdHlsZVNoZWV0VG9PZmZz
ZXRzKTsKKyAgICBzdHlsZVNoZWV0VG9PZmZzZXRzLmNsZWFyKCk7CiAgICAgaWRUb0Rpc2FibGVk
U3R5bGUuY2xlYXIoKTsKICAgICBpbnNwZWN0b3JTdHlsZVNoZWV0ID0gMDsKKworICAgIGxhc3RT
dHlsZUlkID0gMTsKKyAgICBsYXN0U3R5bGVTaGVldElkID0gMTsKKyAgICBsYXN0UnVsZUlkID0g
MTsKK30KKworQm9keVN0YXJ0RW5kT2Zmc2V0cyBJbnNwZWN0b3JDU1NTdG9yZTo6Z2V0U3RhcnRF
bmRPZmZzZXRzKENTU1N0eWxlUnVsZSogcnVsZSkKK3sKKyAgICBDU1NTdHlsZVNoZWV0KiBwYXJl
bnRTdHlsZVNoZWV0ID0gcnVsZS0+cGFyZW50U3R5bGVTaGVldCgpOworICAgIGlmICghcGFyZW50
U3R5bGVTaGVldCkKKyAgICAgICAgcmV0dXJuIHN0ZDo6cGFpcjx1bnNpZ25lZCwgdW5zaWduZWQ+
KDAsIDApOworICAgIFJlZlB0cjxDU1NSdWxlTGlzdD4gb3JpZ2luYWxSdWxlTGlzdCA9IHBhcmVu
dFN0eWxlU2hlZXQtPmNzc1J1bGVzKCk7CisgICAgdW5zaWduZWQgcnVsZUluZGV4ID0gMDsKKyAg
ICB1bnNpZ25lZCBpID0gMDsKKyAgICB1bnNpZ25lZCBvcmlnaW5hbFJ1bGVMaXN0TGVuZ3RoID0g
b3JpZ2luYWxSdWxlTGlzdC0+bGVuZ3RoKCk7CisgICAgd2hpbGUgKGkgPCBvcmlnaW5hbFJ1bGVM
aXN0TGVuZ3RoKSB7CisgICAgICAgIGlmIChvcmlnaW5hbFJ1bGVMaXN0LT5pdGVtKGkpID09IHJ1
bGUpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgaWYgKG9yaWdpbmFsUnVsZUxpc3QtPml0
ZW0oaSktPnR5cGUoKSA9PSBDU1NSdWxlOjpTVFlMRV9SVUxFKQorICAgICAgICAgICAgKytydWxl
SW5kZXg7CisgICAgICAgICsraTsKKyAgICB9CisgICAgaWYgKGkgPT0gb3JpZ2luYWxSdWxlTGlz
dExlbmd0aCkKKyAgICAgICAgcmV0dXJuIHN0ZDo6cGFpcjx1bnNpZ25lZCwgdW5zaWduZWQ+KDAs
IDApOworICAgIFN0eWxlU2hlZXRUb09mZnNldHNNYXA6Oml0ZXJhdG9yIGl0ID0gc3R5bGVTaGVl
dFRvT2Zmc2V0cy5maW5kKHBhcmVudFN0eWxlU2hlZXQpOworICAgIFZlY3RvcjxCb2R5U3RhcnRF
bmRPZmZzZXRzPiogb2Zmc2V0VmVjdG9yID0gMDsKKyAgICBpZiAoaXQgPT0gc3R5bGVTaGVldFRv
T2Zmc2V0cy5lbmQoKSkgeworICAgICAgICBmb3IgKEluc3BlY3RvckNvbnRyb2xsZXI6OlJlc291
cmNlc01hcDo6Y29uc3RfaXRlcmF0b3IgcmVzSXQgPSBpbnNwZWN0b3JDb250cm9sbGVyLT5yZXNv
dXJjZXMoKS5iZWdpbigpOyByZXNJdCAhPSBpbnNwZWN0b3JDb250cm9sbGVyLT5yZXNvdXJjZXMo
KS5lbmQoKTsgKytyZXNJdCkgeworICAgICAgICAgICAgaWYgKHJlc0l0LT5zZWNvbmQtPnJlcXVl
c3RVUkwoKS5zdHJpbmcoKSA9PSBwYXJlbnRTdHlsZVNoZWV0LT5maW5hbFVSTCgpLnN0cmluZygp
KSB7CisgICAgICAgICAgICAgICAgb2Zmc2V0VmVjdG9yID0gbmV3IFZlY3RvcjxCb2R5U3RhcnRF
bmRPZmZzZXRzPjsKKyAgICAgICAgICAgICAgICBSZWZQdHI8Q1NTU3R5bGVTaGVldD4gbmV3U3R5
bGVTaGVldCA9IENTU1N0eWxlU2hlZXQ6OmNyZWF0ZSgpOworICAgICAgICAgICAgICAgIENTU1Bh
cnNlciBwOworICAgICAgICAgICAgICAgIHAucGFyc2VTaGVldChuZXdTdHlsZVNoZWV0LmdldCgp
LCByZXNJdC0+c2Vjb25kLT5zb3VyY2VTdHJpbmcoKSwgb2Zmc2V0VmVjdG9yKTsKKyAgICAgICAg
ICAgICAgICBpdCA9IHN0eWxlU2hlZXRUb09mZnNldHMuc2V0KHBhcmVudFN0eWxlU2hlZXQsIG9m
ZnNldFZlY3RvcikuZmlyc3Q7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9
CisgICAgICAgIH0KKyAgICB9IGVsc2UKKyAgICAgICAgb2Zmc2V0VmVjdG9yID0gaXQtPnNlY29u
ZDsKKyAgICBpZiAoIW9mZnNldFZlY3RvcikKKyAgICAgICAgcmV0dXJuIHN0ZDo6cGFpcjx1bnNp
Z25lZCwgdW5zaWduZWQ+KDAsIDApOworICAgIEFTU0VSVChvZmZzZXRWZWN0b3ItPnNpemUoKSA+
IHJ1bGVJbmRleCk7CisgICAgcmV0dXJuIG9mZnNldFZlY3Rvci0+YXQocnVsZUluZGV4KTsKK30K
KworQ1NTU3R5bGVEZWNsYXJhdGlvbiogSW5zcGVjdG9yQ1NTU3RvcmU6OnN0eWxlRm9ySWQobG9u
ZyBzdHlsZUlkKQoreworICAgIElkVG9TdHlsZU1hcDo6aXRlcmF0b3IgaXQgPSBpZFRvU3R5bGUu
ZmluZChzdHlsZUlkKTsKKyAgICByZXR1cm4gaXQgPT0gaWRUb1N0eWxlLmVuZCgpID8gMCA6IGl0
LT5zZWNvbmQuZ2V0KCk7Cit9CisKK2xvbmcgSW5zcGVjdG9yQ1NTU3RvcmU6OmJpbmRTdHlsZShD
U1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSkKK3sKKyAgICBsb25nIGlkID0gc3R5bGVUb0lkLmdl
dChzdHlsZSk7CisgICAgaWYgKCFpZCkgeworICAgICAgICBpZCA9IGxhc3RTdHlsZUlkKys7Cisg
ICAgICAgIGlkVG9TdHlsZS5zZXQoaWQsIHN0eWxlKTsKKyAgICAgICAgc3R5bGVUb0lkLnNldChz
dHlsZSwgaWQpOworICAgIH0KKyAgICByZXR1cm4gaWQ7Cit9CisKK2xvbmcgSW5zcGVjdG9yQ1NT
U3RvcmU6OmJpbmRTdHlsZVNoZWV0KENTU1N0eWxlU2hlZXQqIHN0eWxlU2hlZXQpCit7CisgICAg
bG9uZyBpZCA9IHN0eWxlU2hlZXRUb0lkLmdldChzdHlsZVNoZWV0KTsKKyAgICBpZiAoIWlkKSB7
CisgICAgICAgIGlkID0gbGFzdFN0eWxlU2hlZXRJZCsrOworICAgICAgICBpZFRvU3R5bGVTaGVl
dC5zZXQoaWQsIHN0eWxlU2hlZXQpOworICAgICAgICBzdHlsZVNoZWV0VG9JZC5zZXQoc3R5bGVT
aGVldCwgaWQpOworICAgIH0KKyAgICByZXR1cm4gaWQ7Cit9CisKK2xvbmcgSW5zcGVjdG9yQ1NT
U3RvcmU6OmJpbmRSdWxlKENTU1N0eWxlUnVsZSogcnVsZSkKK3sKKyAgICBsb25nIGlkID0gcnVs
ZVRvSWQuZ2V0KHJ1bGUpOworICAgIGlmICghaWQpIHsKKyAgICAgICAgaWQgPSBsYXN0UnVsZUlk
Kys7CisgICAgICAgIGlkVG9SdWxlLnNldChpZCwgcnVsZSk7CisgICAgICAgIHJ1bGVUb0lkLnNl
dChydWxlLCBpZCk7CisgICAgfQorICAgIHJldHVybiBpZDsKIH0KIAogfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTU3RvcmUu
aCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU1N0b3JlLmgKaW5kZXggZDI5MGZhZC4u
YWYxNmMyMyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTU3RvcmUu
aAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NTdG9yZS5oCkBAIC0zMiwzNCAr
MzIsNTQgQEAKICNpbmNsdWRlICJTdHJpbmdIYXNoLmgiCiAKICNpbmNsdWRlIDx3dGYvSGFzaE1h
cC5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5o
PgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIEluc3BlY3RvckNvbnRyb2xsZXI7Citj
bGFzcyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjsKIGNsYXNzIENTU1N0eWxlRGVjbGFyYXRp
b247CiBjbGFzcyBDU1NTdHlsZVJ1bGU7CiBjbGFzcyBDU1NTdHlsZVNoZWV0OwogY2xhc3MgU3Ry
aW5nOwogCiB0eXBlZGVmIHN0ZDo6cGFpcjxTdHJpbmcsIFN0cmluZz4gUHJvcGVydHlWYWx1ZUFu
ZFByaW9yaXR5OwordHlwZWRlZiBzdGQ6OnBhaXI8dW5zaWduZWQsIHVuc2lnbmVkPiBCb2R5U3Rh
cnRFbmRPZmZzZXRzOwogdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgUHJvcGVydHlWYWx1ZUFuZFBy
aW9yaXR5PiBEaXNhYmxlZFN0eWxlRGVjbGFyYXRpb247CiB0eXBlZGVmIEhhc2hNYXA8Q1NTU3R5
bGVEZWNsYXJhdGlvbiosIGxvbmc+IFN0eWxlVG9JZE1hcDsKIHR5cGVkZWYgSGFzaE1hcDxsb25n
LCBSZWZQdHI8Q1NTU3R5bGVEZWNsYXJhdGlvbj4gPiBJZFRvU3R5bGVNYXA7CiB0eXBlZGVmIEhh
c2hNYXA8Q1NTU3R5bGVSdWxlKiwgbG9uZz4gUnVsZVRvSWRNYXA7CiB0eXBlZGVmIEhhc2hNYXA8
bG9uZywgUmVmUHRyPENTU1N0eWxlUnVsZT4gPiBJZFRvUnVsZU1hcDsKK3R5cGVkZWYgSGFzaE1h
cDxDU1NTdHlsZVNoZWV0KiwgVmVjdG9yPEJvZHlTdGFydEVuZE9mZnNldHM+KiA+IFN0eWxlU2hl
ZXRUb09mZnNldHNNYXA7Cit0eXBlZGVmIEhhc2hNYXA8Q1NTU3R5bGVTaGVldCosIGxvbmc+IFN0
eWxlU2hlZXRUb0lkTWFwOwordHlwZWRlZiBIYXNoTWFwPGxvbmcsIFJlZlB0cjxDU1NTdHlsZVNo
ZWV0PiA+IElkVG9TdHlsZVNoZWV0TWFwOwogdHlwZWRlZiBIYXNoTWFwPGxvbmcsIERpc2FibGVk
U3R5bGVEZWNsYXJhdGlvbj4gSWRUb0Rpc2FibGVkU3R5bGVNYXA7CiAKIHN0cnVjdCBJbnNwZWN0
b3JDU1NTdG9yZSB7Ci0gICAgSW5zcGVjdG9yQ1NTU3RvcmUoKTsKKyAgICBJbnNwZWN0b3JDU1NT
dG9yZShJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3JDb250cm9sbGVyKTsKICAgICB+SW5z
cGVjdG9yQ1NTU3RvcmUoKTsKICAgICB2b2lkIHJlc2V0KCk7CisgICAgQm9keVN0YXJ0RW5kT2Zm
c2V0cyBnZXRTdGFydEVuZE9mZnNldHMoQ1NTU3R5bGVSdWxlKiBydWxlKTsKKyAgICBDU1NTdHls
ZURlY2xhcmF0aW9uKiBzdHlsZUZvcklkKGxvbmcgc3R5bGVJZCk7CisgICAgbG9uZyBiaW5kUnVs
ZShDU1NTdHlsZVJ1bGUqIHJ1bGUpOworICAgIGxvbmcgYmluZFN0eWxlKENTU1N0eWxlRGVjbGFy
YXRpb24qIHN0eWxlKTsKKyAgICBsb25nIGJpbmRTdHlsZVNoZWV0KENTU1N0eWxlU2hlZXQqIHN0
eWxlU2hlZXQpOwogCiAgICAgU3R5bGVUb0lkTWFwIHN0eWxlVG9JZDsKICAgICBJZFRvU3R5bGVN
YXAgaWRUb1N0eWxlOwogICAgIFJ1bGVUb0lkTWFwIHJ1bGVUb0lkOwogICAgIElkVG9SdWxlTWFw
IGlkVG9SdWxlOworICAgIFN0eWxlU2hlZXRUb09mZnNldHNNYXAgc3R5bGVTaGVldFRvT2Zmc2V0
czsKKyAgICBTdHlsZVNoZWV0VG9JZE1hcCBzdHlsZVNoZWV0VG9JZDsKKyAgICBJZFRvU3R5bGVT
aGVldE1hcCBpZFRvU3R5bGVTaGVldDsKICAgICBJZFRvRGlzYWJsZWRTdHlsZU1hcCBpZFRvRGlz
YWJsZWRTdHlsZTsKICAgICBSZWZQdHI8Q1NTU3R5bGVTaGVldD4gaW5zcGVjdG9yU3R5bGVTaGVl
dDsKKworICAgIEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckNvbnRyb2xsZXI7CisgICAg
bG9uZyBsYXN0U3R5bGVJZDsKKyAgICBsb25nIGxhc3RTdHlsZVNoZWV0SWQ7CisgICAgbG9uZyBs
YXN0UnVsZUlkOwogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAgYi9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAppbmRleCAyM2E5OTFlLi45Zjk4YWIyIDEwMDY0NAot
LS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcAorKysgYi9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcApAQCAtMjQsNyArMjQsNyBAQAog
ICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5ECiAgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAogICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAogI2luY2x1ZGUgImNvbmZp
Zy5oIgpAQCAtMTQ1LDcgKzE0NSw3IEBAIEluc3BlY3RvckNvbnRyb2xsZXI6Okluc3BlY3RvckNv
bnRyb2xsZXIoUGFnZSogcGFnZSwgSW5zcGVjdG9yQ2xpZW50KiBjbGllbnQpCiAgICAgOiBtX2lu
c3BlY3RlZFBhZ2UocGFnZSkKICAgICAsIG1fY2xpZW50KGNsaWVudCkKICAgICAsIG1fb3Blbmlu
Z0Zyb250ZW5kKGZhbHNlKQotICAgICwgbV9jc3NTdG9yZShuZXcgSW5zcGVjdG9yQ1NTU3RvcmUo
KSkKKyAgICAsIG1fY3NzU3RvcmUobmV3IEluc3BlY3RvckNTU1N0b3JlKHRoaXMpKQogICAgICwg
bV9leHBpcmVkQ29uc29sZU1lc3NhZ2VDb3VudCgwKQogICAgICwgbV9zaG93QWZ0ZXJWaXNpYmxl
KEN1cnJlbnRQYW5lbCkKICAgICAsIG1fZ3JvdXBMZXZlbCgwKQpAQCAtNDQ1LDEyICs0NDUsMTIg
QEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzZXRGcm9udGVuZChQYXNzT3duUHRyPEluc3Bl
Y3RvckZyb250ZW5kPiBmcm9udGVuZCkKICAgICBtX2Zyb250ZW5kLT5pbnNwZWN0ZWRVUkxDaGFu
Z2VkKG1faW5zcGVjdGVkUGFnZS0+bWFpbkZyYW1lKCktPmxvYWRlcigpLT51cmwoKS5zdHJpbmco
KSk7CiAKICAgICBwb3B1bGF0ZVNjcmlwdE9iamVjdHMoKTsKLSAgICAKKwogICAgIGlmIChtX3No
b3dBZnRlclZpc2libGUgPT0gQ3VycmVudFBhbmVsKSB7CiAgICAgICAgIFN0cmluZyBsYXN0QWN0
aXZlUGFuZWxTZXR0aW5nID0gc2V0dGluZyhsYXN0QWN0aXZlUGFuZWxTZXR0aW5nTmFtZSk7CiAg
ICAgICAgIG1fc2hvd0FmdGVyVmlzaWJsZSA9IHNwZWNpYWxQYW5lbEZvckpTTmFtZShsYXN0QWN0
aXZlUGFuZWxTZXR0aW5nKTsKICAgICB9Ci0gICAgCisKICAgICBpZiAobV9ub2RlVG9Gb2N1cykK
ICAgICAgICAgZm9jdXNOb2RlKCk7CiAjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCkBA
IC00NjcsNyArNDY3LDcgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzaG93KCkKIAogICAg
IGlmIChtX29wZW5pbmdGcm9udGVuZCkKICAgICAgICAgcmV0dXJuOwotICAgIAorCiAgICAgaWYg
KG1fZnJvbnRlbmQpCiAgICAgICAgIG1fZnJvbnRlbmQtPmJyaW5nVG9Gcm9udCgpOwogICAgIGVs
c2UgewpAQCAtNjA0LDEwICs2MDQsMTAgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpwb3B1
bGF0ZVNjcmlwdE9iamVjdHMoKQogCiB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OnVuYmluZEFs
bFJlc291cmNlcygpCiB7Ci0gICAgUmVzb3VyY2VzTWFwOjppdGVyYXRvciByZXNvdXJjZXNFbmQg
PSBtX3Jlc291cmNlcy5lbmQoKTsgCi0gICAgZm9yIChSZXNvdXJjZXNNYXA6Oml0ZXJhdG9yIGl0
ID0gbV9yZXNvdXJjZXMuYmVnaW4oKTsgaXQgIT0gcmVzb3VyY2VzRW5kOyArK2l0KSAKLSAgICAg
ICAgaXQtPnNlY29uZC0+cmVsZWFzZVNjcmlwdE9iamVjdCgwKTsgCi0gICAgCisgICAgUmVzb3Vy
Y2VzTWFwOjppdGVyYXRvciByZXNvdXJjZXNFbmQgPSBtX3Jlc291cmNlcy5lbmQoKTsKKyAgICBm
b3IgKFJlc291cmNlc01hcDo6aXRlcmF0b3IgaXQgPSBtX3Jlc291cmNlcy5iZWdpbigpOyBpdCAh
PSByZXNvdXJjZXNFbmQ7ICsraXQpCisgICAgICAgIGl0LT5zZWNvbmQtPnJlbGVhc2VTY3JpcHRP
YmplY3QoMCk7CisKICNpZiBFTkFCTEUoREFUQUJBU0UpCiAgICAgRGF0YWJhc2VSZXNvdXJjZXNN
YXA6Oml0ZXJhdG9yIGRhdGFiYXNlc0VuZCA9IG1fZGF0YWJhc2VSZXNvdXJjZXMuZW5kKCk7CiAg
ICAgZm9yIChEYXRhYmFzZVJlc291cmNlc01hcDo6aXRlcmF0b3IgaXQgPSBtX2RhdGFiYXNlUmVz
b3VyY2VzLmJlZ2luKCk7IGl0ICE9IGRhdGFiYXNlc0VuZDsgKytpdCkKQEAgLTY2OCw3ICs2Njgs
NyBAQCB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmRpZENvbW1pdExvYWQoRG9jdW1lbnRMb2Fk
ZXIqIGxvYWRlcikKICAgICAgICAgLy8gdW5iaW5kQWxsUmVzb3VyY2VzIHNob3VsZCBiZSBjYWxs
ZWQgYmVmb3JlIGRhdGFiYXNlIGFuZCBET00gc3RvcmFnZQogICAgICAgICAvLyByZXNvdXJjZXMg
YXJlIGNsZWFyZWQgc28gdGhhdCBpdCBoYXMgYSBjaGFuY2UgdG8gdW5iaW5kIHRoZW0uCiAgICAg
ICAgIHVuYmluZEFsbFJlc291cmNlcygpOwotICAgICAgICAKKwogICAgICAgICBtX2Nzc1N0b3Jl
LT5yZXNldCgpOwogICAgICAgICBpZiAobV9mcm9udGVuZCkgewogICAgICAgICAgICAgbV9mcm9u
dGVuZC0+cmVzZXQoKTsKQEAgLTk4MSwxMSArOTgxLDExIEBAIHZvaWQgSW5zcGVjdG9yQ29udHJv
bGxlcjo6c2NyaXB0SW1wb3J0ZWQodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBTdHJp
bmcmCiB7CiAgICAgaWYgKCFlbmFibGVkKCkgfHwgIW1fcmVzb3VyY2VUcmFja2luZ0VuYWJsZWQp
CiAgICAgICAgIHJldHVybjsKLSAgICAKKwogICAgIEluc3BlY3RvclJlc291cmNlKiByZXNvdXJj
ZSA9IG1fcmVzb3VyY2VzLmdldChpZGVudGlmaWVyKS5nZXQoKTsKICAgICBpZiAoIXJlc291cmNl
KQogICAgICAgICByZXR1cm47Ci0gICAgCisKICAgICByZXNvdXJjZS0+c2V0T3ZlcnJpZGVDb250
ZW50KFNjcmlwdFN0cmluZyhzb3VyY2VTdHJpbmcpLCBJbnNwZWN0b3JSZXNvdXJjZTo6U2NyaXB0
KTsKIAogICAgIGlmIChtX2Zyb250ZW5kKQpAQCAtMTIwOCw3ICsxMjA4LDcgQEAgdm9pZCBJbnNw
ZWN0b3JDb250cm9sbGVyOjpnZXRDb29raWVzKGxvbmcgY2FsbElkKQogICAgIGVsc2UKICAgICAg
ICAgbV9mcm9udGVuZC0+ZGlkR2V0Q29va2llcyhjYWxsSWQsIGJ1aWxkQXJyYXlGb3JDb29raWVz
KHJhd0Nvb2tpZXNMaXN0KSwgU3RyaW5nKCkpOwogfQotICAgIAorCiBTY3JpcHRBcnJheSBJbnNw
ZWN0b3JDb250cm9sbGVyOjpidWlsZEFycmF5Rm9yQ29va2llcyhMaXN0SGFzaFNldDxDb29raWU+
JiBjb29raWVzTGlzdCkKIHsKICAgICBTY3JpcHRBcnJheSBjb29raWVzID0gbV9mcm9udGVuZC0+
bmV3U2NyaXB0QXJyYXkoKTsKQEAgLTEyMzUsNyArMTIzNSw3IEBAIFNjcmlwdE9iamVjdCBJbnNw
ZWN0b3JDb250cm9sbGVyOjpidWlsZE9iamVjdEZvckNvb2tpZShjb25zdCBDb29raWUmIGNvb2tp
ZSkKICAgICB2YWx1ZS5zZXQoInNlc3Npb24iLCBjb29raWUuc2Vzc2lvbik7CiAgICAgcmV0dXJu
IHZhbHVlOwogfQotICAgIAorCiAjaWYgRU5BQkxFKERPTV9TVE9SQUdFKQogdm9pZCBJbnNwZWN0
b3JDb250cm9sbGVyOjpkaWRVc2VET01TdG9yYWdlKFN0b3JhZ2VBcmVhKiBzdG9yYWdlQXJlYSwg
Ym9vbCBpc0xvY2FsU3RvcmFnZSwgRnJhbWUqIGZyYW1lKQogewpAQCAtMTQxOSw3ICsxNDE5LDcg
QEAgU2NyaXB0T2JqZWN0IEluc3BlY3RvckNvbnRyb2xsZXI6OmNyZWF0ZVByb2ZpbGVIZWFkZXIo
Y29uc3QgU2NyaXB0UHJvZmlsZSYgcHJvZmkKIFN0cmluZyBJbnNwZWN0b3JDb250cm9sbGVyOjpn
ZXRDdXJyZW50VXNlckluaXRpYXRlZFByb2ZpbGVOYW1lKGJvb2wgaW5jcmVtZW50UHJvZmlsZU51
bWJlciA9IGZhbHNlKQogewogICAgIGlmIChpbmNyZW1lbnRQcm9maWxlTnVtYmVyKQotICAgICAg
ICBtX2N1cnJlbnRVc2VySW5pdGlhdGVkUHJvZmlsZU51bWJlciA9IG1fbmV4dFVzZXJJbml0aWF0
ZWRQcm9maWxlTnVtYmVyKys7ICAgICAgICAKKyAgICAgICAgbV9jdXJyZW50VXNlckluaXRpYXRl
ZFByb2ZpbGVOdW1iZXIgPSBtX25leHRVc2VySW5pdGlhdGVkUHJvZmlsZU51bWJlcisrOwogCiAg
ICAgcmV0dXJuIFN0cmluZzo6Zm9ybWF0KCIlcy4lZCIsIFVzZXJJbml0aWF0ZWRQcm9maWxlTmFt
ZSwgbV9jdXJyZW50VXNlckluaXRpYXRlZFByb2ZpbGVOdW1iZXIpOwogfQpAQCAtMTU5MSw3ICsx
NTkxLDcgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpzZXRCcmVha3BvaW50KGNvbnN0IFN0
cmluZyYgc291cmNlSUQsIHVuc2lnbmVkIGxpbmVOdW0KIHZvaWQgSW5zcGVjdG9yQ29udHJvbGxl
cjo6cmVtb3ZlQnJlYWtwb2ludChjb25zdCBTdHJpbmcmIHNvdXJjZUlELCB1bnNpZ25lZCBsaW5l
TnVtYmVyKQogewogICAgIFNjcmlwdERlYnVnU2VydmVyOjpzaGFyZWQoKS5yZW1vdmVCcmVha3Bv
aW50KHNvdXJjZUlELCBsaW5lTnVtYmVyKTsKLSAKKwogICAgIFN0cmluZyB1cmwgPSBtX3NvdXJj
ZUlEVG9VUkwuZ2V0KHNvdXJjZUlEKTsKICAgICBpZiAodXJsLmlzRW1wdHkoKSkKICAgICAgICAg
cmV0dXJuOwpAQCAtMTY5NSw3ICsxNjk1LDcgQEAgc3RhdGljIHZvaWQgZHJhd091dGxpbmVkUXVh
ZChHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIGNvbnN0IEZsb2F0UXVhZCYgcXVhZCwgY28KIAog
ICAgICAgICBjb250ZXh0LnJlc3RvcmUoKTsKICAgICB9Ci0gICAgCisKICAgICAvLyBOb3cgZG8g
dGhlIGZpbGwKICAgICBjb250ZXh0LmFkZFBhdGgocXVhZFBhdGgpOwogICAgIGNvbnRleHQuc2V0
RmlsbENvbG9yKGZpbGxDb2xvciwgRGV2aWNlQ29sb3JTcGFjZSk7CkBAIC0xODM2LDcgKzE4MzYs
NyBAQCBib29sIEluc3BlY3RvckNvbnRyb2xsZXI6OnN0b3BUaW1pbmcoY29uc3QgU3RyaW5nJiB0
aXRsZSwgZG91YmxlJiBlbGFwc2VkKQogCiAgICAgZG91YmxlIHN0YXJ0VGltZSA9IGl0LT5zZWNv
bmQ7CiAgICAgbV90aW1lcy5yZW1vdmUoaXQpOwotICAgIAorCiAgICAgZWxhcHNlZCA9IGN1cnJl
bnRUaW1lKCkgKiAxMDAwIC0gc3RhcnRUaW1lOwogICAgIHJldHVybiB0cnVlOwogfQpAQCAtMTkw
NCw1ICsxOTA0LDUgQEAgdm9pZCBJbnNwZWN0b3JDb250cm9sbGVyOjpyZW1vdmVBbGxTY3JpcHRz
VG9FdmFsdWF0ZU9uTG9hZCgpCiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKLSAgICAKKwog
I2VuZGlmIC8vIEVOQUJMRShJTlNQRUNUT1IpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JET01BZ2VudC5jcHAgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01B
Z2VudC5jcHAKaW5kZXggMTE2NDczNi4uOTMyZDk0MSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckRPTUFnZW50LmNwcApAQCAtNzgsOCArNzgsNiBAQCBJbnNwZWN0b3JET01BZ2VudDo6SW5z
cGVjdG9yRE9NQWdlbnQoSW5zcGVjdG9yQ1NTU3RvcmUqIGNzc1N0b3JlLCBJbnNwZWN0b3JGcm9u
dAogICAgICwgbV9jc3NTdG9yZShjc3NTdG9yZSkKICAgICAsIG1fZnJvbnRlbmQoZnJvbnRlbmQp
CiAgICAgLCBtX2xhc3ROb2RlSWQoMSkKLSAgICAsIG1fbGFzdFN0eWxlSWQoMSkKLSAgICAsIG1f
bGFzdFJ1bGVJZCgxKQogewogfQogCkBAIC03NDgsNyArNzQ2LDcgQEAgdm9pZCBJbnNwZWN0b3JE
T01BZ2VudDo6ZGlkUmVtb3ZlRE9NTm9kZShOb2RlKiBub2RlKQogICAgICAgICAgICAgbV9mcm9u
dGVuZC0+Y2hpbGROb2RlQ291bnRVcGRhdGVkKHBhcmVudElkLCAwKTsKICAgICB9IGVsc2UKICAg
ICAgICAgbV9mcm9udGVuZC0+Y2hpbGROb2RlUmVtb3ZlZChwYXJlbnRJZCwgbV9kb2N1bWVudE5v
ZGVUb0lkTWFwLmdldChub2RlKSk7Ci0gICAgdW5iaW5kKG5vZGUsICZtX2RvY3VtZW50Tm9kZVRv
SWRNYXApOyAgICAKKyAgICB1bmJpbmQobm9kZSwgJm1fZG9jdW1lbnROb2RlVG9JZE1hcCk7CiB9
CiAKIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmRpZE1vZGlmeURPTUF0dHIoRWxlbWVudCogZWxl
bWVudCkKQEAgLTc2MSwxNCArNzU5LDE0IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmRpZE1v
ZGlmeURPTUF0dHIoRWxlbWVudCogZWxlbWVudCkKICAgICBtX2Zyb250ZW5kLT5hdHRyaWJ1dGVz
VXBkYXRlZChpZCwgYnVpbGRBcnJheUZvckVsZW1lbnRBdHRyaWJ1dGVzKGVsZW1lbnQpKTsKIH0K
IAotdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6Z2V0U3R5bGVzKGxvbmcgY2FsbElkLCBsb25nIG5v
ZGVJZCwgYm9vbCBhdXRob3JPbmx5KSAgICAKK3ZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmdldFN0
eWxlcyhsb25nIGNhbGxJZCwgbG9uZyBub2RlSWQsIGJvb2wgYXV0aG9yT25seSkKIHsKICAgICBO
b2RlKiBub2RlID0gbm9kZUZvcklkKG5vZGVJZCk7CiAgICAgaWYgKCFub2RlIHx8IG5vZGUtPm5v
ZGVUeXBlKCkgIT0gTm9kZTo6RUxFTUVOVF9OT0RFKSB7CiAgICAgICAgIG1fZnJvbnRlbmQtPmRp
ZEdldFN0eWxlcyhjYWxsSWQsIFNjcmlwdFZhbHVlOjp1bmRlZmluZWQoKSk7CiAgICAgICAgIHJl
dHVybjsKICAgICB9Ci0gICAgCisKICAgICBET01XaW5kb3cqIGRlZmF1bHRWaWV3ID0gbm9kZS0+
b3duZXJEb2N1bWVudCgpLT5kZWZhdWx0VmlldygpOwogICAgIGlmICghZGVmYXVsdFZpZXcpIHsK
ICAgICAgICAgbV9mcm9udGVuZC0+ZGlkR2V0U3R5bGVzKGNhbGxJZCwgU2NyaXB0VmFsdWU6OnVu
ZGVmaW5lZCgpKTsKQEAgLTc4OSw3ICs3ODcsNyBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50Ojpn
ZXRTdHlsZXMobG9uZyBjYWxsSWQsIGxvbmcgbm9kZUlkLCBib29sIGF1dGhvck9ubHkpCiAKICAg
ICByZXN1bHQuc2V0KCJzdHlsZUF0dHJpYnV0ZXMiLCBidWlsZE9iamVjdEZvckF0dHJpYnV0ZVN0
eWxlcyhlbGVtZW50KSk7CiAgICAgcmVzdWx0LnNldCgicHNldWRvRWxlbWVudHMiLCBidWlsZEFy
cmF5Rm9yUHNldWRvRWxlbWVudHMoZWxlbWVudCwgYXV0aG9yT25seSkpOwotICAgIAorCiAgICAg
U2NyaXB0T2JqZWN0IGN1cnJlbnRTdHlsZSA9IHJlc3VsdDsKICAgICBFbGVtZW50KiBwYXJlbnRF
bGVtZW50ID0gZWxlbWVudC0+cGFyZW50RWxlbWVudCgpOwogICAgIHdoaWxlIChwYXJlbnRFbGVt
ZW50KSB7CkBAIC05MDAsMTggKzg5OCwxNyBAQCBTY3JpcHRBcnJheSBJbnNwZWN0b3JET01BZ2Vu
dDo6YnVpbGRBcnJheUZvclBzZXVkb0VsZW1lbnRzKEVsZW1lbnQqIGVsZW1lbnQsIGJvbwogCiB2
b2lkIEluc3BlY3RvckRPTUFnZW50OjphcHBseVN0eWxlVGV4dChsb25nIGNhbGxJZCwgbG9uZyBz
dHlsZUlkLCBjb25zdCBTdHJpbmcmIHN0eWxlVGV4dCwgY29uc3QgU3RyaW5nJiBwcm9wZXJ0eU5h
bWUpCiB7Ci0gICAgSWRUb1N0eWxlTWFwOjppdGVyYXRvciBpdCA9IGNzc1N0b3JlKCktPmlkVG9T
dHlsZS5maW5kKHN0eWxlSWQpOwotICAgIGlmIChpdCA9PSBjc3NTdG9yZSgpLT5pZFRvU3R5bGUu
ZW5kKCkpIHsKKyAgICBDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSA9IGNzc1N0b3JlKCktPnN0
eWxlRm9ySWQoc3R5bGVJZCk7CisgICAgaWYgKCFzdHlsZSkgewogICAgICAgICBtX2Zyb250ZW5k
LT5kaWRBcHBseVN0eWxlVGV4dChjYWxsSWQsIGZhbHNlLCBTY3JpcHRWYWx1ZTo6dW5kZWZpbmVk
KCksIG1fZnJvbnRlbmQtPm5ld1NjcmlwdEFycmF5KCkpOwogICAgICAgICByZXR1cm47CiAgICAg
fQogCi0gICAgLy8gUmVtb3ZlIGRpc2FibGVkIHByb3BlcnR5IGVudHJ5IGZvciBwcm9wZXJ0eSB3
aXRoIGdpdmVuIG5hbWUuIAorICAgIC8vIFJlbW92ZSBkaXNhYmxlZCBwcm9wZXJ0eSBlbnRyeSBm
b3IgcHJvcGVydHkgd2l0aCBnaXZlbiBuYW1lLgogICAgIElkVG9EaXNhYmxlZFN0eWxlTWFwOjpp
dGVyYXRvciBkaXNhYmxlZEl0ID0gY3NzU3RvcmUoKS0+aWRUb0Rpc2FibGVkU3R5bGUuZmluZChz
dHlsZUlkKTsKICAgICBpZiAoZGlzYWJsZWRJdCAhPSBjc3NTdG9yZSgpLT5pZFRvRGlzYWJsZWRT
dHlsZS5lbmQoKSkKICAgICAgICAgZGlzYWJsZWRJdC0+c2Vjb25kLnJlbW92ZShwcm9wZXJ0eU5h
bWUpOwogCi0gICAgQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUgPSBpdC0+c2Vjb25kLmdldCgp
OwogICAgIGludCBzdHlsZVRleHRMZW5ndGggPSBzdHlsZVRleHQubGVuZ3RoKCk7CiAKICAgICBS
ZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IHRlbXBNdXRhYmxlU3R5bGUgPSBDU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Y3JlYXRlKCk7CkBAIC05NzgsNyArOTc1LDcgQEAgdm9p
ZCBJbnNwZWN0b3JET01BZ2VudDo6YXBwbHlTdHlsZVRleHQobG9uZyBjYWxsSWQsIGxvbmcgc3R5
bGVJZCwgY29uc3QgU3RyaW5nJgogICAgICAgICAvLyBTZXQgdGhlIHByb3BlcnR5IG9uIHRoZSBy
ZWFsIHN0eWxlIGRlY2xhcmF0aW9uLgogICAgICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAg
ICAgICAgc3R5bGUtPnNldFByb3BlcnR5KG5hbWUsIHZhbHVlLCBwcmlvcml0eSwgZWMpOwotICAg
ICAgICAvLyBSZW1vdmUgZGlzYWJsZWQgcHJvcGVydHkgZW50cnkgZm9yIHByb3BlcnR5IHdpdGgg
dGhpcyBuYW1lLiAKKyAgICAgICAgLy8gUmVtb3ZlIGRpc2FibGVkIHByb3BlcnR5IGVudHJ5IGZv
ciBwcm9wZXJ0eSB3aXRoIHRoaXMgbmFtZS4KICAgICAgICAgaWYgKGRpc2FibGVkSXQgIT0gY3Nz
U3RvcmUoKS0+aWRUb0Rpc2FibGVkU3R5bGUuZW5kKCkpCiAgICAgICAgICAgICBkaXNhYmxlZEl0
LT5zZWNvbmQucmVtb3ZlKG5hbWUpOwogICAgICAgICBjaGFuZ2VkUHJvcGVydGllcy5hcHBlbmQo
bmFtZSk7CkBAIC05ODgsMTIgKzk4NSwxMSBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjphcHBs
eVN0eWxlVGV4dChsb25nIGNhbGxJZCwgbG9uZyBzdHlsZUlkLCBjb25zdCBTdHJpbmcmCiAKIHZv
aWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnNldFN0eWxlVGV4dChsb25nIGNhbGxJZCwgbG9uZyBzdHls
ZUlkLCBjb25zdCBTdHJpbmcmIGNzc1RleHQpCiB7Ci0gICAgSWRUb1N0eWxlTWFwOjppdGVyYXRv
ciBpdCA9IGNzc1N0b3JlKCktPmlkVG9TdHlsZS5maW5kKHN0eWxlSWQpOwotICAgIGlmIChpdCA9
PSBjc3NTdG9yZSgpLT5pZFRvU3R5bGUuZW5kKCkpIHsKKyAgICBDU1NTdHlsZURlY2xhcmF0aW9u
KiBzdHlsZSA9IGNzc1N0b3JlKCktPnN0eWxlRm9ySWQoc3R5bGVJZCk7CisgICAgaWYgKCFzdHls
ZSkgewogICAgICAgICBtX2Zyb250ZW5kLT5kaWRTZXRTdHlsZVRleHQoY2FsbElkLCBmYWxzZSk7
CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUg
PSBpdC0+c2Vjb25kLmdldCgpOwogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIHN0eWxl
LT5zZXRDc3NUZXh0KGNzc1RleHQsIGVjKTsKICAgICBtX2Zyb250ZW5kLT5kaWRTZXRTdHlsZVRl
eHQoY2FsbElkLCAhZWMpOwpAQCAtMTAwMSwxMyArOTk3LDEyIEBAIHZvaWQgSW5zcGVjdG9yRE9N
QWdlbnQ6OnNldFN0eWxlVGV4dChsb25nIGNhbGxJZCwgbG9uZyBzdHlsZUlkLCBjb25zdCBTdHJp
bmcmIGNzCiAKIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnNldFN0eWxlUHJvcGVydHkobG9uZyBj
YWxsSWQsIGxvbmcgc3R5bGVJZCwgY29uc3QgU3RyaW5nJiBuYW1lLCBjb25zdCBTdHJpbmcmIHZh
bHVlKQogewotICAgIElkVG9TdHlsZU1hcDo6aXRlcmF0b3IgaXQgPSBjc3NTdG9yZSgpLT5pZFRv
U3R5bGUuZmluZChzdHlsZUlkKTsKLSAgICBpZiAoaXQgPT0gY3NzU3RvcmUoKS0+aWRUb1N0eWxl
LmVuZCgpKSB7CisgICAgQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUgPSBjc3NTdG9yZSgpLT5z
dHlsZUZvcklkKHN0eWxlSWQpOworICAgIGlmICghc3R5bGUpIHsKICAgICAgICAgbV9mcm9udGVu
ZC0+ZGlkU2V0U3R5bGVQcm9wZXJ0eShjYWxsSWQsIGZhbHNlKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KIAotICAgIENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlID0gaXQtPnNlY29uZC5nZXQo
KTsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBzdHlsZS0+c2V0UHJvcGVydHkobmFt
ZSwgdmFsdWUsIGVjKTsKICAgICBtX2Zyb250ZW5kLT5kaWRTZXRTdHlsZVByb3BlcnR5KGNhbGxJ
ZCwgIWVjKTsKQEAgLTEwMTUsMTIgKzEwMTAsMTEgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6
c2V0U3R5bGVQcm9wZXJ0eShsb25nIGNhbGxJZCwgbG9uZyBzdHlsZUlkLCBjb25zdCBTdHJpbmcK
IAogdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6dG9nZ2xlU3R5bGVFbmFibGVkKGxvbmcgY2FsbElk
LCBsb25nIHN0eWxlSWQsIGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lLCBib29sIGRpc2FibGVk
KQogewotICAgIElkVG9TdHlsZU1hcDo6aXRlcmF0b3IgaXQgPSBjc3NTdG9yZSgpLT5pZFRvU3R5
bGUuZmluZChzdHlsZUlkKTsKLSAgICBpZiAoaXQgPT0gY3NzU3RvcmUoKS0+aWRUb1N0eWxlLmVu
ZCgpKSB7CisgICAgQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUgPSBjc3NTdG9yZSgpLT5zdHls
ZUZvcklkKHN0eWxlSWQpOworICAgIGlmICghc3R5bGUpIHsKICAgICAgICAgbV9mcm9udGVuZC0+
ZGlkVG9nZ2xlU3R5bGVFbmFibGVkKGNhbGxJZCwgU2NyaXB0VmFsdWU6OnVuZGVmaW5lZCgpKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSA9
IGl0LT5zZWNvbmQuZ2V0KCk7CiAKICAgICBJZFRvRGlzYWJsZWRTdHlsZU1hcDo6aXRlcmF0b3Ig
ZGlzYWJsZWRJdCA9IGNzc1N0b3JlKCktPmlkVG9EaXNhYmxlZFN0eWxlLmZpbmQoc3R5bGVJZCk7
CiAgICAgaWYgKGRpc2FibGVkSXQgPT0gY3NzU3RvcmUoKS0+aWRUb0Rpc2FibGVkU3R5bGUuZW5k
KCkpCkBAIC0xMTIwLDMzICsxMTE0LDExIEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmFkZFJ1
bGUobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgc2VsZWN0b3IsIGxvbmcgc2VsZWN0CiAgICAg
bV9mcm9udGVuZC0+ZGlkQWRkUnVsZShjYWxsSWQsIGJ1aWxkT2JqZWN0Rm9yUnVsZShuZXdSdWxl
KSwgcnVsZUFmZmVjdHNOb2RlKG5ld1J1bGUsIG5vZGUpKTsKIH0KIAotbG9uZyBJbnNwZWN0b3JE
T01BZ2VudDo6YmluZFN0eWxlKENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlKQotewotICAgIGxv
bmcgaWQgPSBjc3NTdG9yZSgpLT5zdHlsZVRvSWQuZ2V0KHN0eWxlKTsKLSAgICBpZiAoIWlkKSB7
Ci0gICAgICAgIGlkID0gbV9sYXN0U3R5bGVJZCsrOwotICAgICAgICBjc3NTdG9yZSgpLT5pZFRv
U3R5bGUuc2V0KGlkLCBzdHlsZSk7Ci0gICAgICAgIGNzc1N0b3JlKCktPnN0eWxlVG9JZC5zZXQo
c3R5bGUsIGlkKTsKLSAgICB9Ci0gICAgcmV0dXJuIGlkOwotfQotCi1sb25nIEluc3BlY3RvckRP
TUFnZW50OjpiaW5kUnVsZShDU1NTdHlsZVJ1bGUqIHJ1bGUpCi17Ci0gICAgbG9uZyBpZCA9IGNz
c1N0b3JlKCktPnJ1bGVUb0lkLmdldChydWxlKTsKLSAgICBpZiAoIWlkKSB7Ci0gICAgICAgIGlk
ID0gbV9sYXN0UnVsZUlkKys7Ci0gICAgICAgIGNzc1N0b3JlKCktPmlkVG9SdWxlLnNldChpZCwg
cnVsZSk7Ci0gICAgICAgIGNzc1N0b3JlKCktPnJ1bGVUb0lkLnNldChydWxlLCBpZCk7Ci0gICAg
fQotICAgIHJldHVybiBpZDsKLX0KLQogU2NyaXB0T2JqZWN0IEluc3BlY3RvckRPTUFnZW50Ojpi
dWlsZE9iamVjdEZvclN0eWxlKENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlLCBib29sIGJpbmQp
CiB7CiAgICAgU2NyaXB0T2JqZWN0IHJlc3VsdCA9IG1fZnJvbnRlbmQtPm5ld1NjcmlwdE9iamVj
dCgpOwogICAgIGlmIChiaW5kKSB7Ci0gICAgICAgIGxvbmcgc3R5bGVJZCA9IGJpbmRTdHlsZShz
dHlsZSk7CisgICAgICAgIGxvbmcgc3R5bGVJZCA9IGNzc1N0b3JlKCktPmJpbmRTdHlsZShzdHls
ZSk7CiAgICAgICAgIHJlc3VsdC5zZXQoImlkIiwgc3R5bGVJZCk7CiAKICAgICAgICAgSWRUb0Rp
c2FibGVkU3R5bGVNYXA6Oml0ZXJhdG9yIGRpc2FibGVkSXQgPSBjc3NTdG9yZSgpLT5pZFRvRGlz
YWJsZWRTdHlsZS5maW5kKHN0eWxlSWQpOwpAQCAtMTE1NSw2ICsxMTI3LDE3IEBAIFNjcmlwdE9i
amVjdCBJbnNwZWN0b3JET01BZ2VudDo6YnVpbGRPYmplY3RGb3JTdHlsZShDU1NTdHlsZURlY2xh
cmF0aW9uKiBzdHlsZSwKICAgICB9CiAgICAgcmVzdWx0LnNldCgid2lkdGgiLCBzdHlsZS0+Z2V0
UHJvcGVydHlWYWx1ZSgid2lkdGgiKSk7CiAgICAgcmVzdWx0LnNldCgiaGVpZ2h0Iiwgc3R5bGUt
PmdldFByb3BlcnR5VmFsdWUoImhlaWdodCIpKTsKKyAgICBpZiAoYmluZCkgeworICAgICAgICBD
U1NSdWxlKiBwYXJlbnRSdWxlID0gc3R5bGUtPnBhcmVudFJ1bGUoKTsKKyAgICAgICAgaWYgKHBh
cmVudFJ1bGUgJiYgcGFyZW50UnVsZS0+dHlwZSgpID09IENTU1J1bGU6OlNUWUxFX1JVTEUpIHsK
KyAgICAgICAgICAgIENTU1N0eWxlUnVsZSogcGFyZW50U3R5bGVSdWxlID0gc3RhdGljX2Nhc3Q8
Q1NTU3R5bGVSdWxlKj4ocGFyZW50UnVsZSk7CisgICAgICAgICAgICBzdGQ6OnBhaXI8dW5zaWdu
ZWQsIHVuc2lnbmVkPiBzdGFydEVuZCA9IGNzc1N0b3JlKCktPmdldFN0YXJ0RW5kT2Zmc2V0cyhw
YXJlbnRTdHlsZVJ1bGUpOworICAgICAgICAgICAgaWYgKHN0YXJ0RW5kLnNlY29uZCkgeworICAg
ICAgICAgICAgICAgIHJlc3VsdC5zZXQoImJvZHlTdGFydE9mZnNldCIsIHN0YXJ0RW5kLmZpcnN0
KTsKKyAgICAgICAgICAgICAgICByZXN1bHQuc2V0KCJib2R5RW5kT2Zmc2V0Iiwgc3RhcnRFbmQu
c2Vjb25kKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KICAgICBwb3B1bGF0ZU9i
amVjdFdpdGhTdHlsZVByb3BlcnRpZXMoc3R5bGUsIHJlc3VsdCk7CiAgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KQEAgLTEyMjcsNiArMTIxMCwxMSBAQCBTY3JpcHRPYmplY3QgSW5zcGVjdG9yRE9NQWdl
bnQ6OmJ1aWxkT2JqZWN0Rm9yUnVsZShDU1NTdHlsZVJ1bGUqIHJ1bGUpCiAgICAgcmVzdWx0LnNl
dCgic2VsZWN0b3JUZXh0IiwgcnVsZS0+c2VsZWN0b3JUZXh0KCkpOwogICAgIHJlc3VsdC5zZXQo
ImNzc1RleHQiLCBydWxlLT5jc3NUZXh0KCkpOwogICAgIHJlc3VsdC5zZXQoInNvdXJjZUxpbmUi
LCBydWxlLT5zb3VyY2VMaW5lKCkpOworICAgIHN0ZDo6cGFpcjx1bnNpZ25lZCwgdW5zaWduZWQ+
IHN0YXJ0RW5kID0gY3NzU3RvcmUoKS0+Z2V0U3RhcnRFbmRPZmZzZXRzKHJ1bGUpOworICAgIGlm
IChzdGFydEVuZC5zZWNvbmQpIHsKKyAgICAgICAgcmVzdWx0LnNldCgiYm9keVN0YXJ0T2Zmc2V0
Iiwgc3RhcnRFbmQuZmlyc3QpOworICAgICAgICByZXN1bHQuc2V0KCJib2R5RW5kT2Zmc2V0Iiwg
c3RhcnRFbmQuc2Vjb25kKTsKKyAgICB9CiAgICAgaWYgKHBhcmVudFN0eWxlU2hlZXQpIHsKICAg
ICAgICAgU2NyaXB0T2JqZWN0IHBhcmVudFN0eWxlU2hlZXRWYWx1ZSA9IG1fZnJvbnRlbmQtPm5l
d1NjcmlwdE9iamVjdCgpOwogICAgICAgICByZXN1bHQuc2V0KCJwYXJlbnRTdHlsZVNoZWV0Iiwg
cGFyZW50U3R5bGVTaGVldFZhbHVlKTsKQEAgLTEyNDMsNyArMTIzMSw3IEBAIFNjcmlwdE9iamVj
dCBJbnNwZWN0b3JET01BZ2VudDo6YnVpbGRPYmplY3RGb3JSdWxlKENTU1N0eWxlUnVsZSogcnVs
ZSkKICAgICByZXN1bHQuc2V0KCJzdHlsZSIsIGJ1aWxkT2JqZWN0Rm9yU3R5bGUocnVsZS0+c3R5
bGUoKSwgYmluZCkpOwogCiAgICAgaWYgKGJpbmQpCi0gICAgICAgIHJlc3VsdC5zZXQoImlkIiwg
YmluZFJ1bGUocnVsZSkpOworICAgICAgICByZXN1bHQuc2V0KCJpZCIsIGNzc1N0b3JlKCktPmJp
bmRSdWxlKHJ1bGUpKTsKICAgICByZXR1cm4gcmVzdWx0OwogfQogCmRpZmYgLS1naXQgYS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5oIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yRE9NQWdlbnQuaAppbmRleCBjOGE0ZTFhLi45MTZlOTk0IDEwMDY0NAotLS0gYS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5oCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckRPTUFnZW50LmgKQEAgLTE4Niw4ICsxODYsNiBAQCBuYW1lc3BhY2UgV2ViQ29y
ZSB7CiAgICAgICAgIEhhc2hNYXA8bG9uZywgTm9kZVRvSWRNYXAqPiBtX2lkVG9Ob2Rlc01hcDsK
ICAgICAgICAgSGFzaFNldDxsb25nPiBtX2NoaWxkcmVuUmVxdWVzdGVkOwogICAgICAgICBsb25n
IG1fbGFzdE5vZGVJZDsKLSAgICAgICAgbG9uZyBtX2xhc3RTdHlsZUlkOwotICAgICAgICBsb25n
IG1fbGFzdFJ1bGVJZDsKICAgICAgICAgTGlzdEhhc2hTZXQ8UmVmUHRyPERvY3VtZW50PiA+IG1f
ZG9jdW1lbnRzOwogICAgIH07CiAKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9ET01BZ2VudC5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9ET01BZ2VudC5q
cwppbmRleCAzMzczYzA0Li4wY2Q5ZmU3IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvRE9NQWdlbnQuanMKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RP
TUFnZW50LmpzCkBAIC00OTEsNiArNDkxLDggQEAgV2ViSW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFy
YXRpb24gPSBmdW5jdGlvbihwYXlsb2FkKQogICAgIHRoaXMuaWQgPSBwYXlsb2FkLmlkOwogICAg
IHRoaXMud2lkdGggPSBwYXlsb2FkLndpZHRoOwogICAgIHRoaXMuaGVpZ2h0ID0gcGF5bG9hZC5o
ZWlnaHQ7CisgICAgdGhpcy5ib2R5U3RhcnRPZmZzZXQgPSBwYXlsb2FkLmJvZHlTdGFydE9mZnNl
dDsKKyAgICB0aGlzLmJvZHlFbmRPZmZzZXQgPSBwYXlsb2FkLmJvZHlFbmRPZmZzZXQ7CiAgICAg
dGhpcy5fX2Rpc2FibGVkUHJvcGVydGllcyA9IHt9OwogICAgIHRoaXMuX19kaXNhYmxlZFByb3Bl
cnR5VmFsdWVzID0ge307CiAgICAgdGhpcy5fX2Rpc2FibGVkUHJvcGVydHlQcmlvcml0aWVzID0g
e307Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>56484</attachid>
            <date>2010-05-19 06:51:48 -0700</date>
            <delta_ts>2010-05-19 07:59:03 -0700</delta_ts>
            <desc>[PATCH] External storage: merged with a whitespace cleanup (39351), style fixed</desc>
            <filename>ruleoffsets.patch</filename>
            <type>text/plain</type>
            <size>24538</size>
            <attacher name="Alexander Pavlov (apavlov)">apavlov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAyNjk0ODQ2Li5iZTc2NjlkIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTAtMDUt
MTkgIEFsZXhhbmRlciBQYXZsb3YgIDxhcGF2bG92QGNocm9taXVtLm9yZz4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBFeHBvc2UgQ1NTIHJ1bGUgYm9k
eSBzdGFydC9lbmQgb2Zmc2V0cyBpbiB0aGUgcGFyZW50IHN0eWxlc2hlZXQKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM4OTA2CisKKyAgICAgICAgKiBp
bnNwZWN0b3IvcmVzb3VyY2VzL3N0eWxlcy1zb3VyY2Utb2Zmc2V0cy5jc3M6IEFkZGVkLgorICAg
ICAgICAoYm9keSk6CisgICAgICAgICgvKiBjb21tZW50IGJlZm9yZSBzZWxlY3RvciAqL2JvZHku
bWFpbjEvKiBjb21tZW50IGFmdGVyIHNlbGVjdG9yICovKToKKyAgICAgICAgKGJvZHkubWFpbjIp
OgorICAgICAgICAqIGluc3BlY3Rvci9zdHlsZXMtc291cmNlLW9mZnNldHMtZXhwZWN0ZWQudHh0
OiBBZGRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc3R5bGVzLXNvdXJjZS1vZmZzZXRzLmh0bWw6
IEFkZGVkLgorCiAyMDEwLTA1LTE5ICBaaGVueWFvIE1vICA8em1vQGdvb2dsZS5jb20+CiAKICAg
ICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9p
bnNwZWN0b3IvcmVzb3VyY2VzL3N0eWxlcy1zb3VyY2Utb2Zmc2V0cy5jc3MgYi9MYXlvdXRUZXN0
cy9pbnNwZWN0b3IvcmVzb3VyY2VzL3N0eWxlcy1zb3VyY2Utb2Zmc2V0cy5jc3MKbmV3IGZpbGUg
bW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZWY2OWVlNgotLS0gL2Rldi9udWxsCisrKyBiL0xh
eW91dFRlc3RzL2luc3BlY3Rvci9yZXNvdXJjZXMvc3R5bGVzLXNvdXJjZS1vZmZzZXRzLmNzcwpA
QCAtMCwwICsxLDcgQEAKK2JvZHkgeworICAgIGZvbnQtc2l6ZTogMTJweDsKK30KKworLyogY29t
bWVudCBiZWZvcmUgc2VsZWN0b3IgKi9ib2R5Lm1haW4xLyogY29tbWVudCBhZnRlciBzZWxlY3Rv
ciAqL3svKiBjb21tZW50ICovY29sb3I6ICMwMDA7fS8qIGNvbW1lbnQgKi8KKworYm9keS5tYWlu
MntiYWNrZ3JvdW5kOiBncmVlbjt9CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3Iv
c3R5bGVzLXNvdXJjZS1vZmZzZXRzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2luc3BlY3Rv
ci9zdHlsZXMtc291cmNlLW9mZnNldHMtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLmY1MDM1ZGQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9p
bnNwZWN0b3Ivc3R5bGVzLXNvdXJjZS1vZmZzZXRzLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDYg
QEAKK1Rlc3RzIHRoYXQgcHJvcGVyIHN0YXJ0L2VuZCBvZmZzZXQgcG9zaXRpb25zIGFyZSByZXBv
cnRlZCBmb3IgQ1NTIHJ1bGUgYm9kaWVzLgorCitib2R5OiBbNS0yOF0KK2JvZHkubWFpbjE6IFs5
OC0xMjRdCitib2R5Lm1haW4yOiBbMTUwLTE2OV0KKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
aW5zcGVjdG9yL3N0eWxlcy1zb3VyY2Utb2Zmc2V0cy5odG1sIGIvTGF5b3V0VGVzdHMvaW5zcGVj
dG9yL3N0eWxlcy1zb3VyY2Utb2Zmc2V0cy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjY0OGI4YzUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0
b3Ivc3R5bGVzLXNvdXJjZS1vZmZzZXRzLmh0bWwKQEAgLTAsMCArMSw1NSBAQAorPGh0bWw+Cis8
aGVhZD4KKworPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJyZXNvdXJjZXMvc3R5bGVzLXNv
dXJjZS1vZmZzZXRzLmNzcyIgLS0+CisKKzxzY3JpcHQgc3JjPSIuLi9odHRwL3Rlc3RzL2luc3Bl
Y3Rvci9pbnNwZWN0b3ItdGVzdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iZWxlbWVudHMt
dGVzdHMuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KKworZnVuY3Rpb24gZG9pdCgpCit7CisgICAg
ZnVuY3Rpb24gY2FsbGJhY2soc3R5bGVzKQorICAgIHsKKyAgICAgICAgaWYgKHN0eWxlcyA9PT0g
InJlZnJlc2hpbmciKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB2YXIgbWF0Y2hlZENT
U1J1bGVzID0gc3R5bGVzLm1hdGNoZWRDU1NSdWxlczsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCBtYXRjaGVkQ1NTUnVsZXMubGVuZ3RoOyArK2kpCisgICAgICAgICAgICBvdXRwdXQobWF0
Y2hlZENTU1J1bGVzW2ldLnNlbGVjdG9yVGV4dCArICI6IFsiICsgbWF0Y2hlZENTU1J1bGVzW2ld
LmJvZHlTdGFydE9mZnNldCArICItIiArIG1hdGNoZWRDU1NSdWxlc1tpXS5ib2R5RW5kT2Zmc2V0
ICsgIl0iKTsKKworICAgICAgICBub3RpZnlEb25lKCk7CisgICAgfQorICAgIGV2YWx1YXRlSW5X
ZWJJbnNwZWN0b3IoImZyb250ZW5kX2R1bXBCb2R5T2Zmc2V0cyIsIGNhbGxiYWNrKTsKK30KKwor
CisvLyBGcm9udGVuZCBmdW5jdGlvbnMuCisKK2Z1bmN0aW9uIGZyb250ZW5kX2R1bXBCb2R5T2Zm
c2V0cyh0ZXN0Q29udHJvbGxlcikKK3sKKyAgICBpZiAoIVdlYkluc3BlY3Rvci5wYW5lbHMucmVz
b3VyY2VzLnJlc291cmNlVHJhY2tpbmdFbmFibGVkKSB7CisgICAgICAgIEluc3BlY3RvckJhY2tl
bmQuZW5hYmxlUmVzb3VyY2VUcmFja2luZyhmYWxzZSk7CisgICAgICAgIHJldHVybiAicmVmcmVz
aGluZyI7CisgICAgfQorCisgICAgdGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworICAg
IGZyb250ZW5kX2V4cGFuZERPTVN1YnRyZWUoV2ViSW5zcGVjdG9yLmRvbUFnZW50LmRvY3VtZW50
KTsKKyAgICB0ZXN0Q29udHJvbGxlci5ydW5BZnRlclBlbmRpbmdEaXNwYXRjaGVzKGZ1bmN0aW9u
KCkgeworICAgICAgICBmdW5jdGlvbiBjYWxsYmFjayhzdHlsZXMpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoc3R5bGVzKTsKKyAgICAgICAgfQorICAg
ICAgICBJbnNwZWN0b3JCYWNrZW5kLmdldFN0eWxlcyhXZWJJbnNwZWN0b3IuQ2FsbGJhY2sud3Jh
cChjYWxsYmFjayksIFdlYkluc3BlY3Rvci5kb21BZ2VudC5kb2N1bWVudC5ib2R5LmlkLCB0cnVl
KTsKKyAgICB9KTsKK30KKworPC9zY3JpcHQ+Cis8L2hlYWQ+CisKKzxib2R5IGNsYXNzPSJtYWlu
MSBtYWluMiIgb25sb2FkPSJvbmxvYWQoKSI+Cis8cD4KK1Rlc3RzIHRoYXQgcHJvcGVyIHN0YXJ0
L2VuZCBvZmZzZXQgcG9zaXRpb25zIGFyZSByZXBvcnRlZCBmb3IgQ1NTIHJ1bGUgYm9kaWVzLgor
PC9wPgorCis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBi
L1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDQ5MGRiNjMuLjc4NTJiNDggMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsNTIgQEAK
IDIwMTAtMDUtMTkgIEFsZXhhbmRlciBQYXZsb3YgIDxhcGF2bG92QGNocm9taXVtLm9yZz4KIAor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBFeHBvc2UgQ1NT
IHJ1bGUgYm9keSBzdGFydC9lbmQgb2Zmc2V0cyBpbiB0aGUgcGFyZW50IHN0eWxlc2hlZXQKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM4OTA2CisKKyAg
ICAgICAgQ1NTUGFyc2VyOjpwYXJzZVNoZWV0KCkgYWNjZXB0cyBhbiBvcHRpb25hbCBleHRlcm5h
bCBWZWN0b3Igd2hlcmUgdGhlIHN0YXJ0L2VuZCBvZmZzZXRzCisgICAgICAgIG9mIHRoZSBDU1NT
dHlsZVJ1bGUgYm9kaWVzLCByZWxhdGl2ZSB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzdHlsZXNo
ZWV0LCB3aWxsIGJlIHN0b3JlZC4KKyAgICAgICAgVGhpcyBWZWN0b3IgaXMgb25seSB1c2VkIHdo
ZW4gdGhlIFdlYiBJbnNwZWN0b3IgbmVlZHMgdGhlIGJvZHkgcmFuZ2VzLCB0aHVzIHRoZXJlIGlz
IG5vCisgICAgICAgIG1lbW9yeSBvdmVyaGVhZCB1bnRpbCB0aGUgdXNlciBzdGFydHMgZWRpdGlu
ZyBzdHlsZXMgdmlhIHRoZSBXZWIgSW5zcGVjdG9yLgorCisgICAgICAgIFRlc3Q6IGluc3BlY3Rv
ci9zdHlsZXMtc291cmNlLW9mZnNldHMuaHRtbAorCisgICAgICAgICogY3NzL0NTU0dyYW1tYXIu
eToKKyAgICAgICAgKiBjc3MvQ1NTUGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Bh
cnNlcjo6c2V0dXBQYXJzZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZVNo
ZWV0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6Y3JlYXRlU3R5bGVSdWxlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6dXBkYXRlTGFzdFNlbGVjdG9yTGluZUFuZFBvc2l0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6bWFya1N0YXJ0KToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU1BhcnNlcjo6bWFya0VuZCk6CisgICAgICAgICogY3NzL0NTU1BhcnNlci5o
OgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpyZXNldE1hcmtzKToKKyAgICAgICAgKiBp
bnNwZWN0b3IvSW5zcGVjdG9yQ1NTU3RvcmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yQ1NTU3RvcmU6Okluc3BlY3RvckNTU1N0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvckNTU1N0b3JlOjpyZXNldCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NTdG9y
ZTo6Z2V0U3RhcnRFbmRPZmZzZXRzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU1N0
b3JlOjpzdHlsZUZvcklkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU1N0b3JlOjpi
aW5kU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTU3RvcmU6OmJpbmRTdHls
ZVNoZWV0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU1N0b3JlOjpiaW5kUnVsZSk6
CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNTU1N0b3JlLmg6CisgICAgICAgICogaW5z
cGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yQ29udHJvbGxlcjo6SW5zcGVjdG9yQ29udHJvbGxlcik6CisgICAgICAgICogaW5zcGVjdG9y
L0luc3BlY3RvckRPTUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFn
ZW50OjpJbnNwZWN0b3JET01BZ2VudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01B
Z2VudDo6YXBwbHlTdHlsZVRleHQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdl
bnQ6OnNldFN0eWxlVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6
c2V0U3R5bGVQcm9wZXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6
dG9nZ2xlU3R5bGVFbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50
OjpidWlsZE9iamVjdEZvclN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFn
ZW50OjpidWlsZE9iamVjdEZvclJ1bGUpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JE
T01BZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvRE9NQWdlbnQuanM6Cisg
ICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvbik6CisKKzIwMTAtMDUtMTkg
IEFsZXhhbmRlciBQYXZsb3YgIDxhcGF2bG92QGNocm9taXVtLm9yZz4KKwogICAgICAgICBSZXZp
ZXdlZCBieSBKZXJlbXkgT3Jsb3cuCiAKICAgICAgICAgRml4IHdoaXRlc3BhY2UgZm9yIHRoZSBi
dWcgMzg5MDYKZGlmZiAtLWdpdCBhL1dlYkNvcmUvY3NzL0NTU0dyYW1tYXIueSBiL1dlYkNvcmUv
Y3NzL0NTU0dyYW1tYXIueQppbmRleCAzN2M1Mzg1Li5iMWEyYmQ5IDEwMDY0NAotLS0gYS9XZWJD
b3JlL2Nzcy9DU1NHcmFtbWFyLnkKKysrIGIvV2ViQ29yZS9jc3MvQ1NTR3JhbW1hci55CkBAIC04
ODksNyArODg5LDEwIEBAIHVuYXJ5X29wZXJhdG9yOgogCiBydWxlc2V0OgogICAgIHNlbGVjdG9y
X2xpc3QgJ3snIG1heWJlX3NwYWNlIGRlY2xhcmF0aW9uX2xpc3QgY2xvc2luZ19icmFjZSB7Ci0g
ICAgICAgICQkID0gc3RhdGljX2Nhc3Q8Q1NTUGFyc2VyKj4ocGFyc2VyKS0+Y3JlYXRlU3R5bGVS
dWxlKCQxKTsKKyAgICAgICAgQ1NTUGFyc2VyKiBwID0gc3RhdGljX2Nhc3Q8Q1NTUGFyc2VyKj4o
cGFyc2VyKTsKKyAgICAgICAgcC0+bWFya0VuZCgpOworICAgICAgICAkJCA9IHAtPmNyZWF0ZVN0
eWxlUnVsZSgkMSk7CisgICAgICAgIHAtPnJlc2V0TWFya3MoKTsKICAgICB9CiAgIDsKIApAQCAt
OTAxLDcgKzkwNCw3IEBAIHNlbGVjdG9yX2xpc3Q6CiAgICAgICAgICAgICBkZWxldGVBbGxWYWx1
ZXMoKiQkKTsKICAgICAgICAgICAgICQkLT5zaHJpbmsoMCk7CiAgICAgICAgICAgICAkJC0+YXBw
ZW5kKHAtPnNpbmtGbG9hdGluZ1NlbGVjdG9yKCQxKSk7Ci0gICAgICAgICAgICBwLT51cGRhdGVM
YXN0U2VsZWN0b3JMaW5lKCk7CisgICAgICAgICAgICBwLT51cGRhdGVMYXN0U2VsZWN0b3JMaW5l
QW5kUG9zaXRpb24oKTsKICAgICAgICAgfQogICAgIH0KICAgICB8IHNlbGVjdG9yX2xpc3QgJywn
IG1heWJlX3NwYWNlIHNlbGVjdG9yICVwcmVjIFVOSU1QT1JUQU5UX1RPSyB7CkBAIC05MDksNyAr
OTEyLDcgQEAgc2VsZWN0b3JfbGlzdDoKICAgICAgICAgICAgIENTU1BhcnNlciogcCA9IHN0YXRp
Y19jYXN0PENTU1BhcnNlcio+KHBhcnNlcik7CiAgICAgICAgICAgICAkJCA9ICQxOwogICAgICAg
ICAgICAgJCQtPmFwcGVuZChwLT5zaW5rRmxvYXRpbmdTZWxlY3RvcigkNCkpOwotICAgICAgICAg
ICAgcC0+dXBkYXRlTGFzdFNlbGVjdG9yTGluZSgpOworICAgICAgICAgICAgcC0+dXBkYXRlTGFz
dFNlbGVjdG9yTGluZUFuZFBvc2l0aW9uKCk7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAg
JCQgPSAwOwogICAgIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAgYi9X
ZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwCmluZGV4IDE4MjZkNDIuLmU2ZDE1MTEgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAKKysrIGIvV2ViQ29yZS9jc3MvQ1NTUGFyc2Vy
LmNwcApAQCAtMjI1LDEyICsyMjUsMTQgQEAgdm9pZCBDU1NQYXJzZXI6OnNldHVwUGFyc2VyKGNv
bnN0IGNoYXIqIHByZWZpeCwgY29uc3QgU3RyaW5nJiBzdHJpbmcsIGNvbnN0IGNoYXIKICAgICB5
eWxlbmcgPSAwOwogICAgIHl5dGV4dCA9IHl5X2NfYnVmX3AgPSBtX2RhdGE7CiAgICAgeXlfaG9s
ZF9jaGFyID0gKnl5X2NfYnVmX3A7CisgICAgcmVzZXRNYXJrcygpOwogfQogCi12b2lkIENTU1Bh
cnNlcjo6cGFyc2VTaGVldChDU1NTdHlsZVNoZWV0KiBzaGVldCwgY29uc3QgU3RyaW5nJiBzdHJp
bmcpCit2b2lkIENTU1BhcnNlcjo6cGFyc2VTaGVldChDU1NTdHlsZVNoZWV0KiBzaGVldCwgY29u
c3QgU3RyaW5nJiBzdHJpbmcsIFZlY3RvcjxzdGQ6OnBhaXI8dW5zaWduZWQsIHVuc2lnbmVkPiA+
KiBydWxlU3RhcnRFbmRPZmZzZXRzKQogewogICAgIG1fc3R5bGVTaGVldCA9IHNoZWV0OwogICAg
IG1fZGVmYXVsdE5hbWVzcGFjZSA9IHN0YXJBdG9tOyAvLyBSZXNldCB0aGUgZGVmYXVsdCBuYW1l
c3BhY2UuCisgICAgbV9ydWxlU3RhcnRFbmRPZmZzZXRzID0gcnVsZVN0YXJ0RW5kT2Zmc2V0czsK
IAogICAgIHNldHVwUGFyc2VyKCIiLCBzdHJpbmcsICIiKTsKICAgICBjc3N5eXBhcnNlKHRoaXMp
OwpAQCAtNTIzMCw2ICs1MjMyLDggQEAgQ1NTUnVsZSogQ1NTUGFyc2VyOjpjcmVhdGVTdHlsZVJ1
bGUoVmVjdG9yPENTU1NlbGVjdG9yKj4qIHNlbGVjdG9ycykKICAgICBDU1NTdHlsZVJ1bGUqIHJl
c3VsdCA9IDA7CiAgICAgaWYgKHNlbGVjdG9ycykgewogICAgICAgICBSZWZQdHI8Q1NTU3R5bGVS
dWxlPiBydWxlID0gQ1NTU3R5bGVSdWxlOjpjcmVhdGUobV9zdHlsZVNoZWV0LCBtX2xhc3RTZWxl
Y3RvckxpbmUpOworICAgICAgICBpZiAobV9ydWxlU3RhcnRFbmRPZmZzZXRzKQorICAgICAgICAg
ICAgbV9ydWxlU3RhcnRFbmRPZmZzZXRzLT5hcHBlbmQoc3RkOjpwYWlyPHVuc2lnbmVkLCB1bnNp
Z25lZD4obV9zdGFydE9mZnNldCwgbV9lbmRPZmZzZXQpKTsKICAgICAgICAgcnVsZS0+YWRvcHRT
ZWxlY3RvclZlY3Rvcigqc2VsZWN0b3JzKTsKICAgICAgICAgaWYgKG1faGFzRm9udEZhY2VPbmx5
VmFsdWVzKQogICAgICAgICAgICAgZGVsZXRlRm9udEZhY2VPbmx5VmFsdWVzKCk7CkBAIC01NDc4
LDYgKzU0ODIsMjYgQEAgdm9pZCBDU1NQYXJzZXI6OmludmFsaWRCbG9ja0hpdCgpCiAgICAgICAg
IG1fc3R5bGVTaGVldC0+c2V0SGFzU3ludGFjdGljYWxseVZhbGlkQ1NTSGVhZGVyKGZhbHNlKTsK
IH0KIAordm9pZCBDU1NQYXJzZXI6OnVwZGF0ZUxhc3RTZWxlY3RvckxpbmVBbmRQb3NpdGlvbigp
Cit7CisgICAgbV9sYXN0U2VsZWN0b3JMaW5lID0gbV9saW5lOworICAgIG1hcmtTdGFydCgpOwor
fQorCit2b2lkIENTU1BhcnNlcjo6bWFya1N0YXJ0KCkKK3sKKyAgICB1bnNpZ25lZCBvZmZzZXQg
PSB5eXRleHQgLSBtX2RhdGE7CisgICAgaWYgKCFtX3N0YXJ0T2Zmc2V0IHx8IG9mZnNldCA8IG1f
c3RhcnRPZmZzZXQpCisgICAgICAgIG1fc3RhcnRPZmZzZXQgPSBvZmZzZXQ7Cit9CisKK3ZvaWQg
Q1NTUGFyc2VyOjptYXJrRW5kKCkKK3sKKyAgICB1bnNpZ25lZCBvZmZzZXQgPSB5eXRleHQgLSBt
X2RhdGE7CisgICAgaWYgKG9mZnNldCA+IG1fZW5kT2Zmc2V0KQorICAgICAgICBtX2VuZE9mZnNl
dCA9IG9mZnNldDsKK30KKwogc3RhdGljIGludCBjc3NQcm9wZXJ0eUlEKGNvbnN0IFVDaGFyKiBw
cm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGxlbmd0aCkKIHsKICAgICBpZiAoIWxlbmd0aCkKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5oIGIvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmgK
aW5kZXggZDFhNWE0My4uOTMwNTEyMyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9jc3MvQ1NTUGFyc2Vy
LmgKKysrIGIvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmgKQEAgLTU2LDcgKzU2LDcgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgICAgICBDU1NQYXJzZXIoYm9vbCBzdHJpY3RQYXJzaW5nID0gdHJ1
ZSk7CiAgICAgICAgIH5DU1NQYXJzZXIoKTsKIAotICAgICAgICB2b2lkIHBhcnNlU2hlZXQoQ1NT
U3R5bGVTaGVldCosIGNvbnN0IFN0cmluZyYpOworICAgICAgICB2b2lkIHBhcnNlU2hlZXQoQ1NT
U3R5bGVTaGVldCosIGNvbnN0IFN0cmluZyYsIFZlY3RvcjxzdGQ6OnBhaXI8dW5zaWduZWQsIHVu
c2lnbmVkPiA+KiBydWxlU3RhcnRFbmRQb3NpdGlvbnMgPSAwKTsKICAgICAgICAgUGFzc1JlZlB0
cjxDU1NSdWxlPiBwYXJzZVJ1bGUoQ1NTU3R5bGVTaGVldCosIGNvbnN0IFN0cmluZyYpOwogICAg
ICAgICBQYXNzUmVmUHRyPENTU1J1bGU+IHBhcnNlS2V5ZnJhbWVSdWxlKENTU1N0eWxlU2hlZXQq
LCBjb25zdCBTdHJpbmcmKTsKICAgICAgICAgYm9vbCBwYXJzZVZhbHVlKENTU011dGFibGVTdHls
ZURlY2xhcmF0aW9uKiwgaW50IHByb3BJZCwgY29uc3QgU3RyaW5nJiwgYm9vbCBpbXBvcnRhbnQp
OwpAQCAtMjA3LDcgKzIwNyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICBWZWN0
b3I8Q1NTU2VsZWN0b3IqPiogcmV1c2FibGVTZWxlY3RvclZlY3RvcigpIHsgcmV0dXJuICZtX3Jl
dXNhYmxlU2VsZWN0b3JWZWN0b3I7IH0KIAotICAgICAgICB2b2lkIHVwZGF0ZUxhc3RTZWxlY3Rv
ckxpbmUoKSB7IG1fbGFzdFNlbGVjdG9yTGluZSA9IG1fbGluZTsgfQorICAgICAgICB2b2lkIHVw
ZGF0ZUxhc3RTZWxlY3RvckxpbmVBbmRQb3NpdGlvbigpOwogCiAgICAgICAgIHZvaWQgY2xlYXJQ
cm9wZXJ0aWVzKCk7CiAKQEAgLTIzOCw2ICsyMzgsMTIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgICAgICBBdG9taWNTdHJpbmcgbV9kZWZhdWx0TmFtZXNwYWNlOwogCiAgICAgICAgIC8vIHRv
a2VuaXplciBtZXRob2RzIGFuZCBkYXRhCisgICAgICAgIHVuc2lnbmVkIG1fc3RhcnRPZmZzZXQ7
CisgICAgICAgIHVuc2lnbmVkIG1fZW5kT2Zmc2V0OworICAgICAgICBWZWN0b3I8c3RkOjpwYWly
PHVuc2lnbmVkLCB1bnNpZ25lZD4gPiogbV9ydWxlU3RhcnRFbmRPZmZzZXRzOworICAgICAgICB2
b2lkIG1hcmtTdGFydCgpOworICAgICAgICB2b2lkIG1hcmtFbmQoKTsKKyAgICAgICAgdm9pZCBy
ZXNldE1hcmtzKCkgeyBtX3N0YXJ0T2Zmc2V0ID0gbV9lbmRPZmZzZXQgPSAwOyB9CiAgICAgICAg
IGludCBsZXgodm9pZCogeXlsdmFsKTsKICAgICAgICAgaW50IHRva2VuKCkgeyByZXR1cm4geXlU
b2s7IH0KICAgICAgICAgVUNoYXIqIHRleHQoaW50KiBsZW5ndGgpOwpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTU3RvcmUuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yQ1NTU3RvcmUuY3BwCmluZGV4IGU1MzY4OGIuLjNjYjcxNzggMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU1N0b3JlLmNwcAorKysgYi9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JDU1NTdG9yZS5jcHAKQEAgLTI5LDE0ICsyOSwyMyBAQAogI2luY2x1
ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkluc3BlY3RvckNTU1N0b3JlLmgiCiAKKyNpbmNsdWRl
ICJDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbi5oIgorI2luY2x1ZGUgIkNTU1BhcnNlci5oIgog
I2luY2x1ZGUgIkNTU1N0eWxlRGVjbGFyYXRpb24uaCIKICNpbmNsdWRlICJDU1NTdHlsZVJ1bGUu
aCIKICNpbmNsdWRlICJDU1NTdHlsZVNoZWV0LmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yQ29udHJv
bGxlci5oIgorI2luY2x1ZGUgIkluc3BlY3RvclJlc291cmNlLmgiCiAjaW5jbHVkZSAiUGxhdGZv
cm1TdHJpbmcuaCIKKyNpbmNsdWRlICJTY3JpcHRPYmplY3QuaCIKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1JbnNwZWN0b3JDU1NTdG9yZTo6SW5zcGVjdG9yQ1NTU3RvcmUoKQorSW5zcGVjdG9y
Q1NTU3RvcmU6Okluc3BlY3RvckNTU1N0b3JlKEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3Rv
ckNvbnRyb2xsZXIpCisgICAgOiBpbnNwZWN0b3JDb250cm9sbGVyKGluc3BlY3RvckNvbnRyb2xs
ZXIpCisgICAgLCBsYXN0U3R5bGVJZCgxKQorICAgICwgbGFzdFN0eWxlU2hlZXRJZCgxKQorICAg
ICwgbGFzdFJ1bGVJZCgxKQogewogfQogCkBAIC01MCw4ICs1OSw5MiBAQCB2b2lkIEluc3BlY3Rv
ckNTU1N0b3JlOjpyZXNldCgpCiAgICAgaWRUb1N0eWxlLmNsZWFyKCk7CiAgICAgcnVsZVRvSWQu
Y2xlYXIoKTsKICAgICBpZFRvUnVsZS5jbGVhcigpOworICAgIGRlbGV0ZUFsbFZhbHVlcyhzdHls
ZVNoZWV0VG9PZmZzZXRzKTsKKyAgICBzdHlsZVNoZWV0VG9PZmZzZXRzLmNsZWFyKCk7CiAgICAg
aWRUb0Rpc2FibGVkU3R5bGUuY2xlYXIoKTsKICAgICBpbnNwZWN0b3JTdHlsZVNoZWV0ID0gMDsK
KworICAgIGxhc3RTdHlsZUlkID0gMTsKKyAgICBsYXN0U3R5bGVTaGVldElkID0gMTsKKyAgICBs
YXN0UnVsZUlkID0gMTsKK30KKworQm9keVN0YXJ0RW5kT2Zmc2V0cyBJbnNwZWN0b3JDU1NTdG9y
ZTo6Z2V0U3RhcnRFbmRPZmZzZXRzKENTU1N0eWxlUnVsZSogcnVsZSkKK3sKKyAgICBDU1NTdHls
ZVNoZWV0KiBwYXJlbnRTdHlsZVNoZWV0ID0gcnVsZS0+cGFyZW50U3R5bGVTaGVldCgpOworICAg
IGlmICghcGFyZW50U3R5bGVTaGVldCkKKyAgICAgICAgcmV0dXJuIHN0ZDo6cGFpcjx1bnNpZ25l
ZCwgdW5zaWduZWQ+KDAsIDApOworICAgIFJlZlB0cjxDU1NSdWxlTGlzdD4gb3JpZ2luYWxSdWxl
TGlzdCA9IHBhcmVudFN0eWxlU2hlZXQtPmNzc1J1bGVzKCk7CisgICAgdW5zaWduZWQgcnVsZUlu
ZGV4ID0gMDsKKyAgICB1bnNpZ25lZCBpID0gMDsKKyAgICB1bnNpZ25lZCBvcmlnaW5hbFJ1bGVM
aXN0TGVuZ3RoID0gb3JpZ2luYWxSdWxlTGlzdC0+bGVuZ3RoKCk7CisgICAgd2hpbGUgKGkgPCBv
cmlnaW5hbFJ1bGVMaXN0TGVuZ3RoKSB7CisgICAgICAgIGlmIChvcmlnaW5hbFJ1bGVMaXN0LT5p
dGVtKGkpID09IHJ1bGUpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgaWYgKG9yaWdpbmFs
UnVsZUxpc3QtPml0ZW0oaSktPnR5cGUoKSA9PSBDU1NSdWxlOjpTVFlMRV9SVUxFKQorICAgICAg
ICAgICAgKytydWxlSW5kZXg7CisgICAgICAgICsraTsKKyAgICB9CisgICAgaWYgKGkgPT0gb3Jp
Z2luYWxSdWxlTGlzdExlbmd0aCkKKyAgICAgICAgcmV0dXJuIHN0ZDo6cGFpcjx1bnNpZ25lZCwg
dW5zaWduZWQ+KDAsIDApOworICAgIFN0eWxlU2hlZXRUb09mZnNldHNNYXA6Oml0ZXJhdG9yIGl0
ID0gc3R5bGVTaGVldFRvT2Zmc2V0cy5maW5kKHBhcmVudFN0eWxlU2hlZXQpOworICAgIFZlY3Rv
cjxCb2R5U3RhcnRFbmRPZmZzZXRzPiogb2Zmc2V0VmVjdG9yID0gMDsKKyAgICBpZiAoaXQgPT0g
c3R5bGVTaGVldFRvT2Zmc2V0cy5lbmQoKSkgeworICAgICAgICBmb3IgKEluc3BlY3RvckNvbnRy
b2xsZXI6OlJlc291cmNlc01hcDo6Y29uc3RfaXRlcmF0b3IgcmVzSXQgPSBpbnNwZWN0b3JDb250
cm9sbGVyLT5yZXNvdXJjZXMoKS5iZWdpbigpOyByZXNJdCAhPSBpbnNwZWN0b3JDb250cm9sbGVy
LT5yZXNvdXJjZXMoKS5lbmQoKTsgKytyZXNJdCkgeworICAgICAgICAgICAgaWYgKHJlc0l0LT5z
ZWNvbmQtPnJlcXVlc3RVUkwoKS5zdHJpbmcoKSA9PSBwYXJlbnRTdHlsZVNoZWV0LT5maW5hbFVS
TCgpLnN0cmluZygpKSB7CisgICAgICAgICAgICAgICAgb2Zmc2V0VmVjdG9yID0gbmV3IFZlY3Rv
cjxCb2R5U3RhcnRFbmRPZmZzZXRzPjsKKyAgICAgICAgICAgICAgICBSZWZQdHI8Q1NTU3R5bGVT
aGVldD4gbmV3U3R5bGVTaGVldCA9IENTU1N0eWxlU2hlZXQ6OmNyZWF0ZSgpOworICAgICAgICAg
ICAgICAgIENTU1BhcnNlciBwOworICAgICAgICAgICAgICAgIHAucGFyc2VTaGVldChuZXdTdHls
ZVNoZWV0LmdldCgpLCByZXNJdC0+c2Vjb25kLT5zb3VyY2VTdHJpbmcoKSwgb2Zmc2V0VmVjdG9y
KTsKKyAgICAgICAgICAgICAgICBpdCA9IHN0eWxlU2hlZXRUb09mZnNldHMuc2V0KHBhcmVudFN0
eWxlU2hlZXQsIG9mZnNldFZlY3RvcikuZmlyc3Q7CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9IGVsc2UKKyAgICAgICAgb2Zmc2V0VmVjdG9y
ID0gaXQtPnNlY29uZDsKKyAgICBpZiAoIW9mZnNldFZlY3RvcikKKyAgICAgICAgcmV0dXJuIHN0
ZDo6cGFpcjx1bnNpZ25lZCwgdW5zaWduZWQ+KDAsIDApOworICAgIEFTU0VSVChvZmZzZXRWZWN0
b3ItPnNpemUoKSA+IHJ1bGVJbmRleCk7CisgICAgcmV0dXJuIG9mZnNldFZlY3Rvci0+YXQocnVs
ZUluZGV4KTsKK30KKworQ1NTU3R5bGVEZWNsYXJhdGlvbiogSW5zcGVjdG9yQ1NTU3RvcmU6OnN0
eWxlRm9ySWQobG9uZyBzdHlsZUlkKQoreworICAgIElkVG9TdHlsZU1hcDo6aXRlcmF0b3IgaXQg
PSBpZFRvU3R5bGUuZmluZChzdHlsZUlkKTsKKyAgICByZXR1cm4gaXQgPT0gaWRUb1N0eWxlLmVu
ZCgpID8gMCA6IGl0LT5zZWNvbmQuZ2V0KCk7Cit9CisKK2xvbmcgSW5zcGVjdG9yQ1NTU3RvcmU6
OmJpbmRTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSkKK3sKKyAgICBsb25nIGlkID0g
c3R5bGVUb0lkLmdldChzdHlsZSk7CisgICAgaWYgKCFpZCkgeworICAgICAgICBpZCA9IGxhc3RT
dHlsZUlkKys7CisgICAgICAgIGlkVG9TdHlsZS5zZXQoaWQsIHN0eWxlKTsKKyAgICAgICAgc3R5
bGVUb0lkLnNldChzdHlsZSwgaWQpOworICAgIH0KKyAgICByZXR1cm4gaWQ7Cit9CisKK2xvbmcg
SW5zcGVjdG9yQ1NTU3RvcmU6OmJpbmRTdHlsZVNoZWV0KENTU1N0eWxlU2hlZXQqIHN0eWxlU2hl
ZXQpCit7CisgICAgbG9uZyBpZCA9IHN0eWxlU2hlZXRUb0lkLmdldChzdHlsZVNoZWV0KTsKKyAg
ICBpZiAoIWlkKSB7CisgICAgICAgIGlkID0gbGFzdFN0eWxlU2hlZXRJZCsrOworICAgICAgICBp
ZFRvU3R5bGVTaGVldC5zZXQoaWQsIHN0eWxlU2hlZXQpOworICAgICAgICBzdHlsZVNoZWV0VG9J
ZC5zZXQoc3R5bGVTaGVldCwgaWQpOworICAgIH0KKyAgICByZXR1cm4gaWQ7Cit9CisKK2xvbmcg
SW5zcGVjdG9yQ1NTU3RvcmU6OmJpbmRSdWxlKENTU1N0eWxlUnVsZSogcnVsZSkKK3sKKyAgICBs
b25nIGlkID0gcnVsZVRvSWQuZ2V0KHJ1bGUpOworICAgIGlmICghaWQpIHsKKyAgICAgICAgaWQg
PSBsYXN0UnVsZUlkKys7CisgICAgICAgIGlkVG9SdWxlLnNldChpZCwgcnVsZSk7CisgICAgICAg
IHJ1bGVUb0lkLnNldChydWxlLCBpZCk7CisgICAgfQorICAgIHJldHVybiBpZDsKIH0KIAogfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yQ1NTU3RvcmUuaCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU1N0b3JlLmgKaW5k
ZXggZDI5MGZhZC4uZmY4YzcyZiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yQ1NTU3RvcmUuaAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NTdG9yZS5o
CkBAIC0zNiwzMCArMzYsNDkgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCitjbGFzcyBJbnNw
ZWN0b3JDb250cm9sbGVyOworY2xhc3MgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb247CiBjbGFz
cyBDU1NTdHlsZURlY2xhcmF0aW9uOwogY2xhc3MgQ1NTU3R5bGVSdWxlOwogY2xhc3MgQ1NTU3R5
bGVTaGVldDsKIGNsYXNzIFN0cmluZzsKIAogdHlwZWRlZiBzdGQ6OnBhaXI8U3RyaW5nLCBTdHJp
bmc+IFByb3BlcnR5VmFsdWVBbmRQcmlvcml0eTsKK3R5cGVkZWYgc3RkOjpwYWlyPHVuc2lnbmVk
LCB1bnNpZ25lZD4gQm9keVN0YXJ0RW5kT2Zmc2V0czsKIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcs
IFByb3BlcnR5VmFsdWVBbmRQcmlvcml0eT4gRGlzYWJsZWRTdHlsZURlY2xhcmF0aW9uOwogdHlw
ZWRlZiBIYXNoTWFwPENTU1N0eWxlRGVjbGFyYXRpb24qLCBsb25nPiBTdHlsZVRvSWRNYXA7CiB0
eXBlZGVmIEhhc2hNYXA8bG9uZywgUmVmUHRyPENTU1N0eWxlRGVjbGFyYXRpb24+ID4gSWRUb1N0
eWxlTWFwOwogdHlwZWRlZiBIYXNoTWFwPENTU1N0eWxlUnVsZSosIGxvbmc+IFJ1bGVUb0lkTWFw
OwogdHlwZWRlZiBIYXNoTWFwPGxvbmcsIFJlZlB0cjxDU1NTdHlsZVJ1bGU+ID4gSWRUb1J1bGVN
YXA7Cit0eXBlZGVmIEhhc2hNYXA8Q1NTU3R5bGVTaGVldCosIFZlY3RvcjxCb2R5U3RhcnRFbmRP
ZmZzZXRzPiogPiBTdHlsZVNoZWV0VG9PZmZzZXRzTWFwOwordHlwZWRlZiBIYXNoTWFwPENTU1N0
eWxlU2hlZXQqLCBsb25nPiBTdHlsZVNoZWV0VG9JZE1hcDsKK3R5cGVkZWYgSGFzaE1hcDxsb25n
LCBSZWZQdHI8Q1NTU3R5bGVTaGVldD4gPiBJZFRvU3R5bGVTaGVldE1hcDsKIHR5cGVkZWYgSGFz
aE1hcDxsb25nLCBEaXNhYmxlZFN0eWxlRGVjbGFyYXRpb24+IElkVG9EaXNhYmxlZFN0eWxlTWFw
OwogCiBzdHJ1Y3QgSW5zcGVjdG9yQ1NTU3RvcmUgewotICAgIEluc3BlY3RvckNTU1N0b3JlKCk7
CisgICAgSW5zcGVjdG9yQ1NTU3RvcmUoSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29u
dHJvbGxlcik7CiAgICAgfkluc3BlY3RvckNTU1N0b3JlKCk7CiAgICAgdm9pZCByZXNldCgpOwor
ICAgIEJvZHlTdGFydEVuZE9mZnNldHMgZ2V0U3RhcnRFbmRPZmZzZXRzKENTU1N0eWxlUnVsZSog
cnVsZSk7CisgICAgQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGVGb3JJZChsb25nIHN0eWxlSWQp
OworICAgIGxvbmcgYmluZFJ1bGUoQ1NTU3R5bGVSdWxlKiBydWxlKTsKKyAgICBsb25nIGJpbmRT
dHlsZShDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSk7CisgICAgbG9uZyBiaW5kU3R5bGVTaGVl
dChDU1NTdHlsZVNoZWV0KiBzdHlsZVNoZWV0KTsKIAogICAgIFN0eWxlVG9JZE1hcCBzdHlsZVRv
SWQ7CiAgICAgSWRUb1N0eWxlTWFwIGlkVG9TdHlsZTsKICAgICBSdWxlVG9JZE1hcCBydWxlVG9J
ZDsKICAgICBJZFRvUnVsZU1hcCBpZFRvUnVsZTsKKyAgICBTdHlsZVNoZWV0VG9PZmZzZXRzTWFw
IHN0eWxlU2hlZXRUb09mZnNldHM7CisgICAgU3R5bGVTaGVldFRvSWRNYXAgc3R5bGVTaGVldFRv
SWQ7CisgICAgSWRUb1N0eWxlU2hlZXRNYXAgaWRUb1N0eWxlU2hlZXQ7CiAgICAgSWRUb0Rpc2Fi
bGVkU3R5bGVNYXAgaWRUb0Rpc2FibGVkU3R5bGU7CiAgICAgUmVmUHRyPENTU1N0eWxlU2hlZXQ+
IGluc3BlY3RvclN0eWxlU2hlZXQ7CisKKyAgICBJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0
b3JDb250cm9sbGVyOworICAgIGxvbmcgbGFzdFN0eWxlSWQ7CisgICAgbG9uZyBsYXN0U3R5bGVT
aGVldElkOworICAgIGxvbmcgbGFzdFJ1bGVJZDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3Bw
IGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKaW5kZXggM2IzNmE0
YS4uOWY5OGFiMiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJv
bGxlci5jcHAKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAK
QEAgLTE0NSw3ICsxNDUsNyBAQCBJbnNwZWN0b3JDb250cm9sbGVyOjpJbnNwZWN0b3JDb250cm9s
bGVyKFBhZ2UqIHBhZ2UsIEluc3BlY3RvckNsaWVudCogY2xpZW50KQogICAgIDogbV9pbnNwZWN0
ZWRQYWdlKHBhZ2UpCiAgICAgLCBtX2NsaWVudChjbGllbnQpCiAgICAgLCBtX29wZW5pbmdGcm9u
dGVuZChmYWxzZSkKLSAgICAsIG1fY3NzU3RvcmUobmV3IEluc3BlY3RvckNTU1N0b3JlKCkpCisg
ICAgLCBtX2Nzc1N0b3JlKG5ldyBJbnNwZWN0b3JDU1NTdG9yZSh0aGlzKSkKICAgICAsIG1fZXhw
aXJlZENvbnNvbGVNZXNzYWdlQ291bnQoMCkKICAgICAsIG1fc2hvd0FmdGVyVmlzaWJsZShDdXJy
ZW50UGFuZWwpCiAgICAgLCBtX2dyb3VwTGV2ZWwoMCkKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckRPTUFnZW50LmNwcAppbmRleCAwODMzZTE1Li45MzJkOTQxIDEwMDY0NAotLS0gYS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yRE9NQWdlbnQuY3BwCkBAIC03OCw4ICs3OCw2IEBAIEluc3BlY3RvckRPTUFnZW50
OjpJbnNwZWN0b3JET01BZ2VudChJbnNwZWN0b3JDU1NTdG9yZSogY3NzU3RvcmUsIEluc3BlY3Rv
ckZyb250CiAgICAgLCBtX2Nzc1N0b3JlKGNzc1N0b3JlKQogICAgICwgbV9mcm9udGVuZChmcm9u
dGVuZCkKICAgICAsIG1fbGFzdE5vZGVJZCgxKQotICAgICwgbV9sYXN0U3R5bGVJZCgxKQotICAg
ICwgbV9sYXN0UnVsZUlkKDEpCiB7CiB9CiAKQEAgLTkwMCw4ICs4OTgsOCBAQCBTY3JpcHRBcnJh
eSBJbnNwZWN0b3JET01BZ2VudDo6YnVpbGRBcnJheUZvclBzZXVkb0VsZW1lbnRzKEVsZW1lbnQq
IGVsZW1lbnQsIGJvbwogCiB2b2lkIEluc3BlY3RvckRPTUFnZW50OjphcHBseVN0eWxlVGV4dChs
b25nIGNhbGxJZCwgbG9uZyBzdHlsZUlkLCBjb25zdCBTdHJpbmcmIHN0eWxlVGV4dCwgY29uc3Qg
U3RyaW5nJiBwcm9wZXJ0eU5hbWUpCiB7Ci0gICAgSWRUb1N0eWxlTWFwOjppdGVyYXRvciBpdCA9
IGNzc1N0b3JlKCktPmlkVG9TdHlsZS5maW5kKHN0eWxlSWQpOwotICAgIGlmIChpdCA9PSBjc3NT
dG9yZSgpLT5pZFRvU3R5bGUuZW5kKCkpIHsKKyAgICBDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHls
ZSA9IGNzc1N0b3JlKCktPnN0eWxlRm9ySWQoc3R5bGVJZCk7CisgICAgaWYgKCFzdHlsZSkgewog
ICAgICAgICBtX2Zyb250ZW5kLT5kaWRBcHBseVN0eWxlVGV4dChjYWxsSWQsIGZhbHNlLCBTY3Jp
cHRWYWx1ZTo6dW5kZWZpbmVkKCksIG1fZnJvbnRlbmQtPm5ld1NjcmlwdEFycmF5KCkpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQpAQCAtOTExLDcgKzkwOSw2IEBAIHZvaWQgSW5zcGVjdG9yRE9N
QWdlbnQ6OmFwcGx5U3R5bGVUZXh0KGxvbmcgY2FsbElkLCBsb25nIHN0eWxlSWQsIGNvbnN0IFN0
cmluZyYKICAgICBpZiAoZGlzYWJsZWRJdCAhPSBjc3NTdG9yZSgpLT5pZFRvRGlzYWJsZWRTdHls
ZS5lbmQoKSkKICAgICAgICAgZGlzYWJsZWRJdC0+c2Vjb25kLnJlbW92ZShwcm9wZXJ0eU5hbWUp
OwogCi0gICAgQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUgPSBpdC0+c2Vjb25kLmdldCgpOwog
ICAgIGludCBzdHlsZVRleHRMZW5ndGggPSBzdHlsZVRleHQubGVuZ3RoKCk7CiAKICAgICBSZWZQ
dHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IHRlbXBNdXRhYmxlU3R5bGUgPSBDU1NNdXRh
YmxlU3R5bGVEZWNsYXJhdGlvbjo6Y3JlYXRlKCk7CkBAIC05ODgsMTIgKzk4NSwxMSBAQCB2b2lk
IEluc3BlY3RvckRPTUFnZW50OjphcHBseVN0eWxlVGV4dChsb25nIGNhbGxJZCwgbG9uZyBzdHls
ZUlkLCBjb25zdCBTdHJpbmcmCiAKIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnNldFN0eWxlVGV4
dChsb25nIGNhbGxJZCwgbG9uZyBzdHlsZUlkLCBjb25zdCBTdHJpbmcmIGNzc1RleHQpCiB7Ci0g
ICAgSWRUb1N0eWxlTWFwOjppdGVyYXRvciBpdCA9IGNzc1N0b3JlKCktPmlkVG9TdHlsZS5maW5k
KHN0eWxlSWQpOwotICAgIGlmIChpdCA9PSBjc3NTdG9yZSgpLT5pZFRvU3R5bGUuZW5kKCkpIHsK
KyAgICBDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSA9IGNzc1N0b3JlKCktPnN0eWxlRm9ySWQo
c3R5bGVJZCk7CisgICAgaWYgKCFzdHlsZSkgewogICAgICAgICBtX2Zyb250ZW5kLT5kaWRTZXRT
dHlsZVRleHQoY2FsbElkLCBmYWxzZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgQ1NT
U3R5bGVEZWNsYXJhdGlvbiogc3R5bGUgPSBpdC0+c2Vjb25kLmdldCgpOwogICAgIEV4Y2VwdGlv
bkNvZGUgZWMgPSAwOwogICAgIHN0eWxlLT5zZXRDc3NUZXh0KGNzc1RleHQsIGVjKTsKICAgICBt
X2Zyb250ZW5kLT5kaWRTZXRTdHlsZVRleHQoY2FsbElkLCAhZWMpOwpAQCAtMTAwMSwxMyArOTk3
LDEyIEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnNldFN0eWxlVGV4dChsb25nIGNhbGxJZCwg
bG9uZyBzdHlsZUlkLCBjb25zdCBTdHJpbmcmIGNzCiAKIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6
OnNldFN0eWxlUHJvcGVydHkobG9uZyBjYWxsSWQsIGxvbmcgc3R5bGVJZCwgY29uc3QgU3RyaW5n
JiBuYW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKQogewotICAgIElkVG9TdHlsZU1hcDo6aXRlcmF0
b3IgaXQgPSBjc3NTdG9yZSgpLT5pZFRvU3R5bGUuZmluZChzdHlsZUlkKTsKLSAgICBpZiAoaXQg
PT0gY3NzU3RvcmUoKS0+aWRUb1N0eWxlLmVuZCgpKSB7CisgICAgQ1NTU3R5bGVEZWNsYXJhdGlv
biogc3R5bGUgPSBjc3NTdG9yZSgpLT5zdHlsZUZvcklkKHN0eWxlSWQpOworICAgIGlmICghc3R5
bGUpIHsKICAgICAgICAgbV9mcm9udGVuZC0+ZGlkU2V0U3R5bGVQcm9wZXJ0eShjYWxsSWQsIGZh
bHNlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIENTU1N0eWxlRGVjbGFyYXRpb24q
IHN0eWxlID0gaXQtPnNlY29uZC5nZXQoKTsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAg
ICBzdHlsZS0+c2V0UHJvcGVydHkobmFtZSwgdmFsdWUsIGVjKTsKICAgICBtX2Zyb250ZW5kLT5k
aWRTZXRTdHlsZVByb3BlcnR5KGNhbGxJZCwgIWVjKTsKQEAgLTEwMTUsMTIgKzEwMTAsMTEgQEAg
dm9pZCBJbnNwZWN0b3JET01BZ2VudDo6c2V0U3R5bGVQcm9wZXJ0eShsb25nIGNhbGxJZCwgbG9u
ZyBzdHlsZUlkLCBjb25zdCBTdHJpbmcKIAogdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6dG9nZ2xl
U3R5bGVFbmFibGVkKGxvbmcgY2FsbElkLCBsb25nIHN0eWxlSWQsIGNvbnN0IFN0cmluZyYgcHJv
cGVydHlOYW1lLCBib29sIGRpc2FibGVkKQogewotICAgIElkVG9TdHlsZU1hcDo6aXRlcmF0b3Ig
aXQgPSBjc3NTdG9yZSgpLT5pZFRvU3R5bGUuZmluZChzdHlsZUlkKTsKLSAgICBpZiAoaXQgPT0g
Y3NzU3RvcmUoKS0+aWRUb1N0eWxlLmVuZCgpKSB7CisgICAgQ1NTU3R5bGVEZWNsYXJhdGlvbiog
c3R5bGUgPSBjc3NTdG9yZSgpLT5zdHlsZUZvcklkKHN0eWxlSWQpOworICAgIGlmICghc3R5bGUp
IHsKICAgICAgICAgbV9mcm9udGVuZC0+ZGlkVG9nZ2xlU3R5bGVFbmFibGVkKGNhbGxJZCwgU2Ny
aXB0VmFsdWU6OnVuZGVmaW5lZCgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBDU1NT
dHlsZURlY2xhcmF0aW9uKiBzdHlsZSA9IGl0LT5zZWNvbmQuZ2V0KCk7CiAKICAgICBJZFRvRGlz
YWJsZWRTdHlsZU1hcDo6aXRlcmF0b3IgZGlzYWJsZWRJdCA9IGNzc1N0b3JlKCktPmlkVG9EaXNh
YmxlZFN0eWxlLmZpbmQoc3R5bGVJZCk7CiAgICAgaWYgKGRpc2FibGVkSXQgPT0gY3NzU3RvcmUo
KS0+aWRUb0Rpc2FibGVkU3R5bGUuZW5kKCkpCkBAIC0xMTIwLDMzICsxMTE0LDExIEBAIHZvaWQg
SW5zcGVjdG9yRE9NQWdlbnQ6OmFkZFJ1bGUobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYgc2Vs
ZWN0b3IsIGxvbmcgc2VsZWN0CiAgICAgbV9mcm9udGVuZC0+ZGlkQWRkUnVsZShjYWxsSWQsIGJ1
aWxkT2JqZWN0Rm9yUnVsZShuZXdSdWxlKSwgcnVsZUFmZmVjdHNOb2RlKG5ld1J1bGUsIG5vZGUp
KTsKIH0KIAotbG9uZyBJbnNwZWN0b3JET01BZ2VudDo6YmluZFN0eWxlKENTU1N0eWxlRGVjbGFy
YXRpb24qIHN0eWxlKQotewotICAgIGxvbmcgaWQgPSBjc3NTdG9yZSgpLT5zdHlsZVRvSWQuZ2V0
KHN0eWxlKTsKLSAgICBpZiAoIWlkKSB7Ci0gICAgICAgIGlkID0gbV9sYXN0U3R5bGVJZCsrOwot
ICAgICAgICBjc3NTdG9yZSgpLT5pZFRvU3R5bGUuc2V0KGlkLCBzdHlsZSk7Ci0gICAgICAgIGNz
c1N0b3JlKCktPnN0eWxlVG9JZC5zZXQoc3R5bGUsIGlkKTsKLSAgICB9Ci0gICAgcmV0dXJuIGlk
OwotfQotCi1sb25nIEluc3BlY3RvckRPTUFnZW50OjpiaW5kUnVsZShDU1NTdHlsZVJ1bGUqIHJ1
bGUpCi17Ci0gICAgbG9uZyBpZCA9IGNzc1N0b3JlKCktPnJ1bGVUb0lkLmdldChydWxlKTsKLSAg
ICBpZiAoIWlkKSB7Ci0gICAgICAgIGlkID0gbV9sYXN0UnVsZUlkKys7Ci0gICAgICAgIGNzc1N0
b3JlKCktPmlkVG9SdWxlLnNldChpZCwgcnVsZSk7Ci0gICAgICAgIGNzc1N0b3JlKCktPnJ1bGVU
b0lkLnNldChydWxlLCBpZCk7Ci0gICAgfQotICAgIHJldHVybiBpZDsKLX0KLQogU2NyaXB0T2Jq
ZWN0IEluc3BlY3RvckRPTUFnZW50OjpidWlsZE9iamVjdEZvclN0eWxlKENTU1N0eWxlRGVjbGFy
YXRpb24qIHN0eWxlLCBib29sIGJpbmQpCiB7CiAgICAgU2NyaXB0T2JqZWN0IHJlc3VsdCA9IG1f
ZnJvbnRlbmQtPm5ld1NjcmlwdE9iamVjdCgpOwogICAgIGlmIChiaW5kKSB7Ci0gICAgICAgIGxv
bmcgc3R5bGVJZCA9IGJpbmRTdHlsZShzdHlsZSk7CisgICAgICAgIGxvbmcgc3R5bGVJZCA9IGNz
c1N0b3JlKCktPmJpbmRTdHlsZShzdHlsZSk7CiAgICAgICAgIHJlc3VsdC5zZXQoImlkIiwgc3R5
bGVJZCk7CiAKICAgICAgICAgSWRUb0Rpc2FibGVkU3R5bGVNYXA6Oml0ZXJhdG9yIGRpc2FibGVk
SXQgPSBjc3NTdG9yZSgpLT5pZFRvRGlzYWJsZWRTdHlsZS5maW5kKHN0eWxlSWQpOwpAQCAtMTE1
NSw2ICsxMTI3LDE3IEBAIFNjcmlwdE9iamVjdCBJbnNwZWN0b3JET01BZ2VudDo6YnVpbGRPYmpl
Y3RGb3JTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSwKICAgICB9CiAgICAgcmVzdWx0
LnNldCgid2lkdGgiLCBzdHlsZS0+Z2V0UHJvcGVydHlWYWx1ZSgid2lkdGgiKSk7CiAgICAgcmVz
dWx0LnNldCgiaGVpZ2h0Iiwgc3R5bGUtPmdldFByb3BlcnR5VmFsdWUoImhlaWdodCIpKTsKKyAg
ICBpZiAoYmluZCkgeworICAgICAgICBDU1NSdWxlKiBwYXJlbnRSdWxlID0gc3R5bGUtPnBhcmVu
dFJ1bGUoKTsKKyAgICAgICAgaWYgKHBhcmVudFJ1bGUgJiYgcGFyZW50UnVsZS0+dHlwZSgpID09
IENTU1J1bGU6OlNUWUxFX1JVTEUpIHsKKyAgICAgICAgICAgIENTU1N0eWxlUnVsZSogcGFyZW50
U3R5bGVSdWxlID0gc3RhdGljX2Nhc3Q8Q1NTU3R5bGVSdWxlKj4ocGFyZW50UnVsZSk7CisgICAg
ICAgICAgICBzdGQ6OnBhaXI8dW5zaWduZWQsIHVuc2lnbmVkPiBzdGFydEVuZCA9IGNzc1N0b3Jl
KCktPmdldFN0YXJ0RW5kT2Zmc2V0cyhwYXJlbnRTdHlsZVJ1bGUpOworICAgICAgICAgICAgaWYg
KHN0YXJ0RW5kLnNlY29uZCkgeworICAgICAgICAgICAgICAgIHJlc3VsdC5zZXQoImJvZHlTdGFy
dE9mZnNldCIsIHN0YXJ0RW5kLmZpcnN0KTsKKyAgICAgICAgICAgICAgICByZXN1bHQuc2V0KCJi
b2R5RW5kT2Zmc2V0Iiwgc3RhcnRFbmQuc2Vjb25kKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0KICAgICBwb3B1bGF0ZU9iamVjdFdpdGhTdHlsZVByb3BlcnRpZXMoc3R5bGUsIHJl
c3VsdCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTEyMjcsNiArMTIxMCwxMSBAQCBTY3Jp
cHRPYmplY3QgSW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yUnVsZShDU1NTdHlsZVJ1
bGUqIHJ1bGUpCiAgICAgcmVzdWx0LnNldCgic2VsZWN0b3JUZXh0IiwgcnVsZS0+c2VsZWN0b3JU
ZXh0KCkpOwogICAgIHJlc3VsdC5zZXQoImNzc1RleHQiLCBydWxlLT5jc3NUZXh0KCkpOwogICAg
IHJlc3VsdC5zZXQoInNvdXJjZUxpbmUiLCBydWxlLT5zb3VyY2VMaW5lKCkpOworICAgIHN0ZDo6
cGFpcjx1bnNpZ25lZCwgdW5zaWduZWQ+IHN0YXJ0RW5kID0gY3NzU3RvcmUoKS0+Z2V0U3RhcnRF
bmRPZmZzZXRzKHJ1bGUpOworICAgIGlmIChzdGFydEVuZC5zZWNvbmQpIHsKKyAgICAgICAgcmVz
dWx0LnNldCgiYm9keVN0YXJ0T2Zmc2V0Iiwgc3RhcnRFbmQuZmlyc3QpOworICAgICAgICByZXN1
bHQuc2V0KCJib2R5RW5kT2Zmc2V0Iiwgc3RhcnRFbmQuc2Vjb25kKTsKKyAgICB9CiAgICAgaWYg
KHBhcmVudFN0eWxlU2hlZXQpIHsKICAgICAgICAgU2NyaXB0T2JqZWN0IHBhcmVudFN0eWxlU2hl
ZXRWYWx1ZSA9IG1fZnJvbnRlbmQtPm5ld1NjcmlwdE9iamVjdCgpOwogICAgICAgICByZXN1bHQu
c2V0KCJwYXJlbnRTdHlsZVNoZWV0IiwgcGFyZW50U3R5bGVTaGVldFZhbHVlKTsKQEAgLTEyNDMs
NyArMTIzMSw3IEBAIFNjcmlwdE9iamVjdCBJbnNwZWN0b3JET01BZ2VudDo6YnVpbGRPYmplY3RG
b3JSdWxlKENTU1N0eWxlUnVsZSogcnVsZSkKICAgICByZXN1bHQuc2V0KCJzdHlsZSIsIGJ1aWxk
T2JqZWN0Rm9yU3R5bGUocnVsZS0+c3R5bGUoKSwgYmluZCkpOwogCiAgICAgaWYgKGJpbmQpCi0g
ICAgICAgIHJlc3VsdC5zZXQoImlkIiwgYmluZFJ1bGUocnVsZSkpOworICAgICAgICByZXN1bHQu
c2V0KCJpZCIsIGNzc1N0b3JlKCktPmJpbmRSdWxlKHJ1bGUpKTsKICAgICByZXR1cm4gcmVzdWx0
OwogfQogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5o
IGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuaAppbmRleCBjOGE0ZTFhLi45
MTZlOTk0IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5o
CisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmgKQEAgLTE4Niw4ICsx
ODYsNiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIEhhc2hNYXA8bG9uZywgTm9kZVRv
SWRNYXAqPiBtX2lkVG9Ob2Rlc01hcDsKICAgICAgICAgSGFzaFNldDxsb25nPiBtX2NoaWxkcmVu
UmVxdWVzdGVkOwogICAgICAgICBsb25nIG1fbGFzdE5vZGVJZDsKLSAgICAgICAgbG9uZyBtX2xh
c3RTdHlsZUlkOwotICAgICAgICBsb25nIG1fbGFzdFJ1bGVJZDsKICAgICAgICAgTGlzdEhhc2hT
ZXQ8UmVmUHRyPERvY3VtZW50PiA+IG1fZG9jdW1lbnRzOwogICAgIH07CiAKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9ET01BZ2VudC5qcyBiL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9ET01BZ2VudC5qcwppbmRleCAzMzczYzA0Li4wY2Q5ZmU3IDEwMDY0NAot
LS0gYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRE9NQWdlbnQuanMKKysrIGIvV2ViQ29y
ZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RPTUFnZW50LmpzCkBAIC00OTEsNiArNDkxLDggQEAgV2Vi
SW5zcGVjdG9yLkNTU1N0eWxlRGVjbGFyYXRpb24gPSBmdW5jdGlvbihwYXlsb2FkKQogICAgIHRo
aXMuaWQgPSBwYXlsb2FkLmlkOwogICAgIHRoaXMud2lkdGggPSBwYXlsb2FkLndpZHRoOwogICAg
IHRoaXMuaGVpZ2h0ID0gcGF5bG9hZC5oZWlnaHQ7CisgICAgdGhpcy5ib2R5U3RhcnRPZmZzZXQg
PSBwYXlsb2FkLmJvZHlTdGFydE9mZnNldDsKKyAgICB0aGlzLmJvZHlFbmRPZmZzZXQgPSBwYXls
b2FkLmJvZHlFbmRPZmZzZXQ7CiAgICAgdGhpcy5fX2Rpc2FibGVkUHJvcGVydGllcyA9IHt9Owog
ICAgIHRoaXMuX19kaXNhYmxlZFByb3BlcnR5VmFsdWVzID0ge307CiAgICAgdGhpcy5fX2Rpc2Fi
bGVkUHJvcGVydHlQcmlvcml0aWVzID0ge307Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>56490</attachid>
            <date>2010-05-19 07:59:03 -0700</date>
            <delta_ts>2010-05-20 08:44:57 -0700</delta_ts>
            <desc>[PATCH] Added missing maps to reset()</desc>
            <filename>ruleoffsets.patch</filename>
            <type>text/plain</type>
            <size>24596</size>
            <attacher name="Alexander Pavlov (apavlov)">apavlov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAyNjk0ODQ2Li5iZTc2NjlkIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTAtMDUt
MTkgIEFsZXhhbmRlciBQYXZsb3YgIDxhcGF2bG92QGNocm9taXVtLm9yZz4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBFeHBvc2UgQ1NTIHJ1bGUgYm9k
eSBzdGFydC9lbmQgb2Zmc2V0cyBpbiB0aGUgcGFyZW50IHN0eWxlc2hlZXQKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM4OTA2CisKKyAgICAgICAgKiBp
bnNwZWN0b3IvcmVzb3VyY2VzL3N0eWxlcy1zb3VyY2Utb2Zmc2V0cy5jc3M6IEFkZGVkLgorICAg
ICAgICAoYm9keSk6CisgICAgICAgICgvKiBjb21tZW50IGJlZm9yZSBzZWxlY3RvciAqL2JvZHku
bWFpbjEvKiBjb21tZW50IGFmdGVyIHNlbGVjdG9yICovKToKKyAgICAgICAgKGJvZHkubWFpbjIp
OgorICAgICAgICAqIGluc3BlY3Rvci9zdHlsZXMtc291cmNlLW9mZnNldHMtZXhwZWN0ZWQudHh0
OiBBZGRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc3R5bGVzLXNvdXJjZS1vZmZzZXRzLmh0bWw6
IEFkZGVkLgorCiAyMDEwLTA1LTE5ICBaaGVueWFvIE1vICA8em1vQGdvb2dsZS5jb20+CiAKICAg
ICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9p
bnNwZWN0b3IvcmVzb3VyY2VzL3N0eWxlcy1zb3VyY2Utb2Zmc2V0cy5jc3MgYi9MYXlvdXRUZXN0
cy9pbnNwZWN0b3IvcmVzb3VyY2VzL3N0eWxlcy1zb3VyY2Utb2Zmc2V0cy5jc3MKbmV3IGZpbGUg
bW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZWY2OWVlNgotLS0gL2Rldi9udWxsCisrKyBiL0xh
eW91dFRlc3RzL2luc3BlY3Rvci9yZXNvdXJjZXMvc3R5bGVzLXNvdXJjZS1vZmZzZXRzLmNzcwpA
QCAtMCwwICsxLDcgQEAKK2JvZHkgeworICAgIGZvbnQtc2l6ZTogMTJweDsKK30KKworLyogY29t
bWVudCBiZWZvcmUgc2VsZWN0b3IgKi9ib2R5Lm1haW4xLyogY29tbWVudCBhZnRlciBzZWxlY3Rv
ciAqL3svKiBjb21tZW50ICovY29sb3I6ICMwMDA7fS8qIGNvbW1lbnQgKi8KKworYm9keS5tYWlu
MntiYWNrZ3JvdW5kOiBncmVlbjt9CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3Iv
c3R5bGVzLXNvdXJjZS1vZmZzZXRzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2luc3BlY3Rv
ci9zdHlsZXMtc291cmNlLW9mZnNldHMtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLmY1MDM1ZGQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9p
bnNwZWN0b3Ivc3R5bGVzLXNvdXJjZS1vZmZzZXRzLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDYg
QEAKK1Rlc3RzIHRoYXQgcHJvcGVyIHN0YXJ0L2VuZCBvZmZzZXQgcG9zaXRpb25zIGFyZSByZXBv
cnRlZCBmb3IgQ1NTIHJ1bGUgYm9kaWVzLgorCitib2R5OiBbNS0yOF0KK2JvZHkubWFpbjE6IFs5
OC0xMjRdCitib2R5Lm1haW4yOiBbMTUwLTE2OV0KKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
aW5zcGVjdG9yL3N0eWxlcy1zb3VyY2Utb2Zmc2V0cy5odG1sIGIvTGF5b3V0VGVzdHMvaW5zcGVj
dG9yL3N0eWxlcy1zb3VyY2Utb2Zmc2V0cy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjY0OGI4YzUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0
b3Ivc3R5bGVzLXNvdXJjZS1vZmZzZXRzLmh0bWwKQEAgLTAsMCArMSw1NSBAQAorPGh0bWw+Cis8
aGVhZD4KKworPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJyZXNvdXJjZXMvc3R5bGVzLXNv
dXJjZS1vZmZzZXRzLmNzcyIgLS0+CisKKzxzY3JpcHQgc3JjPSIuLi9odHRwL3Rlc3RzL2luc3Bl
Y3Rvci9pbnNwZWN0b3ItdGVzdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iZWxlbWVudHMt
dGVzdHMuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KKworZnVuY3Rpb24gZG9pdCgpCit7CisgICAg
ZnVuY3Rpb24gY2FsbGJhY2soc3R5bGVzKQorICAgIHsKKyAgICAgICAgaWYgKHN0eWxlcyA9PT0g
InJlZnJlc2hpbmciKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB2YXIgbWF0Y2hlZENT
U1J1bGVzID0gc3R5bGVzLm1hdGNoZWRDU1NSdWxlczsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCBtYXRjaGVkQ1NTUnVsZXMubGVuZ3RoOyArK2kpCisgICAgICAgICAgICBvdXRwdXQobWF0
Y2hlZENTU1J1bGVzW2ldLnNlbGVjdG9yVGV4dCArICI6IFsiICsgbWF0Y2hlZENTU1J1bGVzW2ld
LmJvZHlTdGFydE9mZnNldCArICItIiArIG1hdGNoZWRDU1NSdWxlc1tpXS5ib2R5RW5kT2Zmc2V0
ICsgIl0iKTsKKworICAgICAgICBub3RpZnlEb25lKCk7CisgICAgfQorICAgIGV2YWx1YXRlSW5X
ZWJJbnNwZWN0b3IoImZyb250ZW5kX2R1bXBCb2R5T2Zmc2V0cyIsIGNhbGxiYWNrKTsKK30KKwor
CisvLyBGcm9udGVuZCBmdW5jdGlvbnMuCisKK2Z1bmN0aW9uIGZyb250ZW5kX2R1bXBCb2R5T2Zm
c2V0cyh0ZXN0Q29udHJvbGxlcikKK3sKKyAgICBpZiAoIVdlYkluc3BlY3Rvci5wYW5lbHMucmVz
b3VyY2VzLnJlc291cmNlVHJhY2tpbmdFbmFibGVkKSB7CisgICAgICAgIEluc3BlY3RvckJhY2tl
bmQuZW5hYmxlUmVzb3VyY2VUcmFja2luZyhmYWxzZSk7CisgICAgICAgIHJldHVybiAicmVmcmVz
aGluZyI7CisgICAgfQorCisgICAgdGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworICAg
IGZyb250ZW5kX2V4cGFuZERPTVN1YnRyZWUoV2ViSW5zcGVjdG9yLmRvbUFnZW50LmRvY3VtZW50
KTsKKyAgICB0ZXN0Q29udHJvbGxlci5ydW5BZnRlclBlbmRpbmdEaXNwYXRjaGVzKGZ1bmN0aW9u
KCkgeworICAgICAgICBmdW5jdGlvbiBjYWxsYmFjayhzdHlsZXMpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoc3R5bGVzKTsKKyAgICAgICAgfQorICAg
ICAgICBJbnNwZWN0b3JCYWNrZW5kLmdldFN0eWxlcyhXZWJJbnNwZWN0b3IuQ2FsbGJhY2sud3Jh
cChjYWxsYmFjayksIFdlYkluc3BlY3Rvci5kb21BZ2VudC5kb2N1bWVudC5ib2R5LmlkLCB0cnVl
KTsKKyAgICB9KTsKK30KKworPC9zY3JpcHQ+Cis8L2hlYWQ+CisKKzxib2R5IGNsYXNzPSJtYWlu
MSBtYWluMiIgb25sb2FkPSJvbmxvYWQoKSI+Cis8cD4KK1Rlc3RzIHRoYXQgcHJvcGVyIHN0YXJ0
L2VuZCBvZmZzZXQgcG9zaXRpb25zIGFyZSByZXBvcnRlZCBmb3IgQ1NTIHJ1bGUgYm9kaWVzLgor
PC9wPgorCis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBi
L1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDQ5MGRiNjMuLjc4NTJiNDggMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsNTIgQEAK
IDIwMTAtMDUtMTkgIEFsZXhhbmRlciBQYXZsb3YgIDxhcGF2bG92QGNocm9taXVtLm9yZz4KIAor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBFeHBvc2UgQ1NT
IHJ1bGUgYm9keSBzdGFydC9lbmQgb2Zmc2V0cyBpbiB0aGUgcGFyZW50IHN0eWxlc2hlZXQKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM4OTA2CisKKyAg
ICAgICAgQ1NTUGFyc2VyOjpwYXJzZVNoZWV0KCkgYWNjZXB0cyBhbiBvcHRpb25hbCBleHRlcm5h
bCBWZWN0b3Igd2hlcmUgdGhlIHN0YXJ0L2VuZCBvZmZzZXRzCisgICAgICAgIG9mIHRoZSBDU1NT
dHlsZVJ1bGUgYm9kaWVzLCByZWxhdGl2ZSB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzdHlsZXNo
ZWV0LCB3aWxsIGJlIHN0b3JlZC4KKyAgICAgICAgVGhpcyBWZWN0b3IgaXMgb25seSB1c2VkIHdo
ZW4gdGhlIFdlYiBJbnNwZWN0b3IgbmVlZHMgdGhlIGJvZHkgcmFuZ2VzLCB0aHVzIHRoZXJlIGlz
IG5vCisgICAgICAgIG1lbW9yeSBvdmVyaGVhZCB1bnRpbCB0aGUgdXNlciBzdGFydHMgZWRpdGlu
ZyBzdHlsZXMgdmlhIHRoZSBXZWIgSW5zcGVjdG9yLgorCisgICAgICAgIFRlc3Q6IGluc3BlY3Rv
ci9zdHlsZXMtc291cmNlLW9mZnNldHMuaHRtbAorCisgICAgICAgICogY3NzL0NTU0dyYW1tYXIu
eToKKyAgICAgICAgKiBjc3MvQ1NTUGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Bh
cnNlcjo6c2V0dXBQYXJzZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZVNo
ZWV0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6Y3JlYXRlU3R5bGVSdWxlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6dXBkYXRlTGFzdFNlbGVjdG9yTGluZUFuZFBvc2l0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6bWFya1N0YXJ0KToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU1BhcnNlcjo6bWFya0VuZCk6CisgICAgICAgICogY3NzL0NTU1BhcnNlci5o
OgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpyZXNldE1hcmtzKToKKyAgICAgICAgKiBp
bnNwZWN0b3IvSW5zcGVjdG9yQ1NTU3RvcmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yQ1NTU3RvcmU6Okluc3BlY3RvckNTU1N0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvckNTU1N0b3JlOjpyZXNldCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NTdG9y
ZTo6Z2V0U3RhcnRFbmRPZmZzZXRzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU1N0
b3JlOjpzdHlsZUZvcklkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU1N0b3JlOjpi
aW5kU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTU3RvcmU6OmJpbmRTdHls
ZVNoZWV0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU1N0b3JlOjpiaW5kUnVsZSk6
CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNTU1N0b3JlLmg6CisgICAgICAgICogaW5z
cGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yQ29udHJvbGxlcjo6SW5zcGVjdG9yQ29udHJvbGxlcik6CisgICAgICAgICogaW5zcGVjdG9y
L0luc3BlY3RvckRPTUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFn
ZW50OjpJbnNwZWN0b3JET01BZ2VudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01B
Z2VudDo6YXBwbHlTdHlsZVRleHQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdl
bnQ6OnNldFN0eWxlVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6
c2V0U3R5bGVQcm9wZXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6
dG9nZ2xlU3R5bGVFbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50
OjpidWlsZE9iamVjdEZvclN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFn
ZW50OjpidWlsZE9iamVjdEZvclJ1bGUpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JE
T01BZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvRE9NQWdlbnQuanM6Cisg
ICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvbik6CisKKzIwMTAtMDUtMTkg
IEFsZXhhbmRlciBQYXZsb3YgIDxhcGF2bG92QGNocm9taXVtLm9yZz4KKwogICAgICAgICBSZXZp
ZXdlZCBieSBKZXJlbXkgT3Jsb3cuCiAKICAgICAgICAgRml4IHdoaXRlc3BhY2UgZm9yIHRoZSBi
dWcgMzg5MDYKZGlmZiAtLWdpdCBhL1dlYkNvcmUvY3NzL0NTU0dyYW1tYXIueSBiL1dlYkNvcmUv
Y3NzL0NTU0dyYW1tYXIueQppbmRleCAzN2M1Mzg1Li5iMWEyYmQ5IDEwMDY0NAotLS0gYS9XZWJD
b3JlL2Nzcy9DU1NHcmFtbWFyLnkKKysrIGIvV2ViQ29yZS9jc3MvQ1NTR3JhbW1hci55CkBAIC04
ODksNyArODg5LDEwIEBAIHVuYXJ5X29wZXJhdG9yOgogCiBydWxlc2V0OgogICAgIHNlbGVjdG9y
X2xpc3QgJ3snIG1heWJlX3NwYWNlIGRlY2xhcmF0aW9uX2xpc3QgY2xvc2luZ19icmFjZSB7Ci0g
ICAgICAgICQkID0gc3RhdGljX2Nhc3Q8Q1NTUGFyc2VyKj4ocGFyc2VyKS0+Y3JlYXRlU3R5bGVS
dWxlKCQxKTsKKyAgICAgICAgQ1NTUGFyc2VyKiBwID0gc3RhdGljX2Nhc3Q8Q1NTUGFyc2VyKj4o
cGFyc2VyKTsKKyAgICAgICAgcC0+bWFya0VuZCgpOworICAgICAgICAkJCA9IHAtPmNyZWF0ZVN0
eWxlUnVsZSgkMSk7CisgICAgICAgIHAtPnJlc2V0TWFya3MoKTsKICAgICB9CiAgIDsKIApAQCAt
OTAxLDcgKzkwNCw3IEBAIHNlbGVjdG9yX2xpc3Q6CiAgICAgICAgICAgICBkZWxldGVBbGxWYWx1
ZXMoKiQkKTsKICAgICAgICAgICAgICQkLT5zaHJpbmsoMCk7CiAgICAgICAgICAgICAkJC0+YXBw
ZW5kKHAtPnNpbmtGbG9hdGluZ1NlbGVjdG9yKCQxKSk7Ci0gICAgICAgICAgICBwLT51cGRhdGVM
YXN0U2VsZWN0b3JMaW5lKCk7CisgICAgICAgICAgICBwLT51cGRhdGVMYXN0U2VsZWN0b3JMaW5l
QW5kUG9zaXRpb24oKTsKICAgICAgICAgfQogICAgIH0KICAgICB8IHNlbGVjdG9yX2xpc3QgJywn
IG1heWJlX3NwYWNlIHNlbGVjdG9yICVwcmVjIFVOSU1QT1JUQU5UX1RPSyB7CkBAIC05MDksNyAr
OTEyLDcgQEAgc2VsZWN0b3JfbGlzdDoKICAgICAgICAgICAgIENTU1BhcnNlciogcCA9IHN0YXRp
Y19jYXN0PENTU1BhcnNlcio+KHBhcnNlcik7CiAgICAgICAgICAgICAkJCA9ICQxOwogICAgICAg
ICAgICAgJCQtPmFwcGVuZChwLT5zaW5rRmxvYXRpbmdTZWxlY3RvcigkNCkpOwotICAgICAgICAg
ICAgcC0+dXBkYXRlTGFzdFNlbGVjdG9yTGluZSgpOworICAgICAgICAgICAgcC0+dXBkYXRlTGFz
dFNlbGVjdG9yTGluZUFuZFBvc2l0aW9uKCk7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAg
JCQgPSAwOwogICAgIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAgYi9X
ZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwCmluZGV4IDE4MjZkNDIuLmU2ZDE1MTEgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAKKysrIGIvV2ViQ29yZS9jc3MvQ1NTUGFyc2Vy
LmNwcApAQCAtMjI1LDEyICsyMjUsMTQgQEAgdm9pZCBDU1NQYXJzZXI6OnNldHVwUGFyc2VyKGNv
bnN0IGNoYXIqIHByZWZpeCwgY29uc3QgU3RyaW5nJiBzdHJpbmcsIGNvbnN0IGNoYXIKICAgICB5
eWxlbmcgPSAwOwogICAgIHl5dGV4dCA9IHl5X2NfYnVmX3AgPSBtX2RhdGE7CiAgICAgeXlfaG9s
ZF9jaGFyID0gKnl5X2NfYnVmX3A7CisgICAgcmVzZXRNYXJrcygpOwogfQogCi12b2lkIENTU1Bh
cnNlcjo6cGFyc2VTaGVldChDU1NTdHlsZVNoZWV0KiBzaGVldCwgY29uc3QgU3RyaW5nJiBzdHJp
bmcpCit2b2lkIENTU1BhcnNlcjo6cGFyc2VTaGVldChDU1NTdHlsZVNoZWV0KiBzaGVldCwgY29u
c3QgU3RyaW5nJiBzdHJpbmcsIFZlY3RvcjxzdGQ6OnBhaXI8dW5zaWduZWQsIHVuc2lnbmVkPiA+
KiBydWxlU3RhcnRFbmRPZmZzZXRzKQogewogICAgIG1fc3R5bGVTaGVldCA9IHNoZWV0OwogICAg
IG1fZGVmYXVsdE5hbWVzcGFjZSA9IHN0YXJBdG9tOyAvLyBSZXNldCB0aGUgZGVmYXVsdCBuYW1l
c3BhY2UuCisgICAgbV9ydWxlU3RhcnRFbmRPZmZzZXRzID0gcnVsZVN0YXJ0RW5kT2Zmc2V0czsK
IAogICAgIHNldHVwUGFyc2VyKCIiLCBzdHJpbmcsICIiKTsKICAgICBjc3N5eXBhcnNlKHRoaXMp
OwpAQCAtNTIzMCw2ICs1MjMyLDggQEAgQ1NTUnVsZSogQ1NTUGFyc2VyOjpjcmVhdGVTdHlsZVJ1
bGUoVmVjdG9yPENTU1NlbGVjdG9yKj4qIHNlbGVjdG9ycykKICAgICBDU1NTdHlsZVJ1bGUqIHJl
c3VsdCA9IDA7CiAgICAgaWYgKHNlbGVjdG9ycykgewogICAgICAgICBSZWZQdHI8Q1NTU3R5bGVS
dWxlPiBydWxlID0gQ1NTU3R5bGVSdWxlOjpjcmVhdGUobV9zdHlsZVNoZWV0LCBtX2xhc3RTZWxl
Y3RvckxpbmUpOworICAgICAgICBpZiAobV9ydWxlU3RhcnRFbmRPZmZzZXRzKQorICAgICAgICAg
ICAgbV9ydWxlU3RhcnRFbmRPZmZzZXRzLT5hcHBlbmQoc3RkOjpwYWlyPHVuc2lnbmVkLCB1bnNp
Z25lZD4obV9zdGFydE9mZnNldCwgbV9lbmRPZmZzZXQpKTsKICAgICAgICAgcnVsZS0+YWRvcHRT
ZWxlY3RvclZlY3Rvcigqc2VsZWN0b3JzKTsKICAgICAgICAgaWYgKG1faGFzRm9udEZhY2VPbmx5
VmFsdWVzKQogICAgICAgICAgICAgZGVsZXRlRm9udEZhY2VPbmx5VmFsdWVzKCk7CkBAIC01NDc4
LDYgKzU0ODIsMjYgQEAgdm9pZCBDU1NQYXJzZXI6OmludmFsaWRCbG9ja0hpdCgpCiAgICAgICAg
IG1fc3R5bGVTaGVldC0+c2V0SGFzU3ludGFjdGljYWxseVZhbGlkQ1NTSGVhZGVyKGZhbHNlKTsK
IH0KIAordm9pZCBDU1NQYXJzZXI6OnVwZGF0ZUxhc3RTZWxlY3RvckxpbmVBbmRQb3NpdGlvbigp
Cit7CisgICAgbV9sYXN0U2VsZWN0b3JMaW5lID0gbV9saW5lOworICAgIG1hcmtTdGFydCgpOwor
fQorCit2b2lkIENTU1BhcnNlcjo6bWFya1N0YXJ0KCkKK3sKKyAgICB1bnNpZ25lZCBvZmZzZXQg
PSB5eXRleHQgLSBtX2RhdGE7CisgICAgaWYgKCFtX3N0YXJ0T2Zmc2V0IHx8IG9mZnNldCA8IG1f
c3RhcnRPZmZzZXQpCisgICAgICAgIG1fc3RhcnRPZmZzZXQgPSBvZmZzZXQ7Cit9CisKK3ZvaWQg
Q1NTUGFyc2VyOjptYXJrRW5kKCkKK3sKKyAgICB1bnNpZ25lZCBvZmZzZXQgPSB5eXRleHQgLSBt
X2RhdGE7CisgICAgaWYgKG9mZnNldCA+IG1fZW5kT2Zmc2V0KQorICAgICAgICBtX2VuZE9mZnNl
dCA9IG9mZnNldDsKK30KKwogc3RhdGljIGludCBjc3NQcm9wZXJ0eUlEKGNvbnN0IFVDaGFyKiBw
cm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGxlbmd0aCkKIHsKICAgICBpZiAoIWxlbmd0aCkKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5oIGIvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmgK
aW5kZXggZDFhNWE0My4uOTMwNTEyMyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9jc3MvQ1NTUGFyc2Vy
LmgKKysrIGIvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmgKQEAgLTU2LDcgKzU2LDcgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgICAgICBDU1NQYXJzZXIoYm9vbCBzdHJpY3RQYXJzaW5nID0gdHJ1
ZSk7CiAgICAgICAgIH5DU1NQYXJzZXIoKTsKIAotICAgICAgICB2b2lkIHBhcnNlU2hlZXQoQ1NT
U3R5bGVTaGVldCosIGNvbnN0IFN0cmluZyYpOworICAgICAgICB2b2lkIHBhcnNlU2hlZXQoQ1NT
U3R5bGVTaGVldCosIGNvbnN0IFN0cmluZyYsIFZlY3RvcjxzdGQ6OnBhaXI8dW5zaWduZWQsIHVu
c2lnbmVkPiA+KiBydWxlU3RhcnRFbmRQb3NpdGlvbnMgPSAwKTsKICAgICAgICAgUGFzc1JlZlB0
cjxDU1NSdWxlPiBwYXJzZVJ1bGUoQ1NTU3R5bGVTaGVldCosIGNvbnN0IFN0cmluZyYpOwogICAg
ICAgICBQYXNzUmVmUHRyPENTU1J1bGU+IHBhcnNlS2V5ZnJhbWVSdWxlKENTU1N0eWxlU2hlZXQq
LCBjb25zdCBTdHJpbmcmKTsKICAgICAgICAgYm9vbCBwYXJzZVZhbHVlKENTU011dGFibGVTdHls
ZURlY2xhcmF0aW9uKiwgaW50IHByb3BJZCwgY29uc3QgU3RyaW5nJiwgYm9vbCBpbXBvcnRhbnQp
OwpAQCAtMjA3LDcgKzIwNyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICBWZWN0
b3I8Q1NTU2VsZWN0b3IqPiogcmV1c2FibGVTZWxlY3RvclZlY3RvcigpIHsgcmV0dXJuICZtX3Jl
dXNhYmxlU2VsZWN0b3JWZWN0b3I7IH0KIAotICAgICAgICB2b2lkIHVwZGF0ZUxhc3RTZWxlY3Rv
ckxpbmUoKSB7IG1fbGFzdFNlbGVjdG9yTGluZSA9IG1fbGluZTsgfQorICAgICAgICB2b2lkIHVw
ZGF0ZUxhc3RTZWxlY3RvckxpbmVBbmRQb3NpdGlvbigpOwogCiAgICAgICAgIHZvaWQgY2xlYXJQ
cm9wZXJ0aWVzKCk7CiAKQEAgLTIzOCw2ICsyMzgsMTIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgICAgICBBdG9taWNTdHJpbmcgbV9kZWZhdWx0TmFtZXNwYWNlOwogCiAgICAgICAgIC8vIHRv
a2VuaXplciBtZXRob2RzIGFuZCBkYXRhCisgICAgICAgIHVuc2lnbmVkIG1fc3RhcnRPZmZzZXQ7
CisgICAgICAgIHVuc2lnbmVkIG1fZW5kT2Zmc2V0OworICAgICAgICBWZWN0b3I8c3RkOjpwYWly
PHVuc2lnbmVkLCB1bnNpZ25lZD4gPiogbV9ydWxlU3RhcnRFbmRPZmZzZXRzOworICAgICAgICB2
b2lkIG1hcmtTdGFydCgpOworICAgICAgICB2b2lkIG1hcmtFbmQoKTsKKyAgICAgICAgdm9pZCBy
ZXNldE1hcmtzKCkgeyBtX3N0YXJ0T2Zmc2V0ID0gbV9lbmRPZmZzZXQgPSAwOyB9CiAgICAgICAg
IGludCBsZXgodm9pZCogeXlsdmFsKTsKICAgICAgICAgaW50IHRva2VuKCkgeyByZXR1cm4geXlU
b2s7IH0KICAgICAgICAgVUNoYXIqIHRleHQoaW50KiBsZW5ndGgpOwpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTU3RvcmUuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yQ1NTU3RvcmUuY3BwCmluZGV4IGU1MzY4OGIuLjVkMTUyYTAgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU1N0b3JlLmNwcAorKysgYi9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JDU1NTdG9yZS5jcHAKQEAgLTI5LDE0ICsyOSwyMyBAQAogI2luY2x1
ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkluc3BlY3RvckNTU1N0b3JlLmgiCiAKKyNpbmNsdWRl
ICJDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbi5oIgorI2luY2x1ZGUgIkNTU1BhcnNlci5oIgog
I2luY2x1ZGUgIkNTU1N0eWxlRGVjbGFyYXRpb24uaCIKICNpbmNsdWRlICJDU1NTdHlsZVJ1bGUu
aCIKICNpbmNsdWRlICJDU1NTdHlsZVNoZWV0LmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yQ29udHJv
bGxlci5oIgorI2luY2x1ZGUgIkluc3BlY3RvclJlc291cmNlLmgiCiAjaW5jbHVkZSAiUGxhdGZv
cm1TdHJpbmcuaCIKKyNpbmNsdWRlICJTY3JpcHRPYmplY3QuaCIKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1JbnNwZWN0b3JDU1NTdG9yZTo6SW5zcGVjdG9yQ1NTU3RvcmUoKQorSW5zcGVjdG9y
Q1NTU3RvcmU6Okluc3BlY3RvckNTU1N0b3JlKEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3Rv
ckNvbnRyb2xsZXIpCisgICAgOiBpbnNwZWN0b3JDb250cm9sbGVyKGluc3BlY3RvckNvbnRyb2xs
ZXIpCisgICAgLCBsYXN0U3R5bGVJZCgxKQorICAgICwgbGFzdFN0eWxlU2hlZXRJZCgxKQorICAg
ICwgbGFzdFJ1bGVJZCgxKQogewogfQogCkBAIC01MCw4ICs1OSw5NCBAQCB2b2lkIEluc3BlY3Rv
ckNTU1N0b3JlOjpyZXNldCgpCiAgICAgaWRUb1N0eWxlLmNsZWFyKCk7CiAgICAgcnVsZVRvSWQu
Y2xlYXIoKTsKICAgICBpZFRvUnVsZS5jbGVhcigpOworICAgIGRlbGV0ZUFsbFZhbHVlcyhzdHls
ZVNoZWV0VG9PZmZzZXRzKTsKKyAgICBzdHlsZVNoZWV0VG9PZmZzZXRzLmNsZWFyKCk7CisgICAg
c3R5bGVTaGVldFRvSWQuY2xlYXIoKTsKKyAgICBpZFRvU3R5bGVTaGVldC5jbGVhcigpOwogICAg
IGlkVG9EaXNhYmxlZFN0eWxlLmNsZWFyKCk7CiAgICAgaW5zcGVjdG9yU3R5bGVTaGVldCA9IDA7
CisKKyAgICBsYXN0U3R5bGVJZCA9IDE7CisgICAgbGFzdFN0eWxlU2hlZXRJZCA9IDE7CisgICAg
bGFzdFJ1bGVJZCA9IDE7Cit9CisKK0JvZHlTdGFydEVuZE9mZnNldHMgSW5zcGVjdG9yQ1NTU3Rv
cmU6OmdldFN0YXJ0RW5kT2Zmc2V0cyhDU1NTdHlsZVJ1bGUqIHJ1bGUpCit7CisgICAgQ1NTU3R5
bGVTaGVldCogcGFyZW50U3R5bGVTaGVldCA9IHJ1bGUtPnBhcmVudFN0eWxlU2hlZXQoKTsKKyAg
ICBpZiAoIXBhcmVudFN0eWxlU2hlZXQpCisgICAgICAgIHJldHVybiBzdGQ6OnBhaXI8dW5zaWdu
ZWQsIHVuc2lnbmVkPigwLCAwKTsKKyAgICBSZWZQdHI8Q1NTUnVsZUxpc3Q+IG9yaWdpbmFsUnVs
ZUxpc3QgPSBwYXJlbnRTdHlsZVNoZWV0LT5jc3NSdWxlcygpOworICAgIHVuc2lnbmVkIHJ1bGVJ
bmRleCA9IDA7CisgICAgdW5zaWduZWQgaSA9IDA7CisgICAgdW5zaWduZWQgb3JpZ2luYWxSdWxl
TGlzdExlbmd0aCA9IG9yaWdpbmFsUnVsZUxpc3QtPmxlbmd0aCgpOworICAgIHdoaWxlIChpIDwg
b3JpZ2luYWxSdWxlTGlzdExlbmd0aCkgeworICAgICAgICBpZiAob3JpZ2luYWxSdWxlTGlzdC0+
aXRlbShpKSA9PSBydWxlKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmIChvcmlnaW5h
bFJ1bGVMaXN0LT5pdGVtKGkpLT50eXBlKCkgPT0gQ1NTUnVsZTo6U1RZTEVfUlVMRSkKKyAgICAg
ICAgICAgICsrcnVsZUluZGV4OworICAgICAgICArK2k7CisgICAgfQorICAgIGlmIChpID09IG9y
aWdpbmFsUnVsZUxpc3RMZW5ndGgpCisgICAgICAgIHJldHVybiBzdGQ6OnBhaXI8dW5zaWduZWQs
IHVuc2lnbmVkPigwLCAwKTsKKyAgICBTdHlsZVNoZWV0VG9PZmZzZXRzTWFwOjppdGVyYXRvciBp
dCA9IHN0eWxlU2hlZXRUb09mZnNldHMuZmluZChwYXJlbnRTdHlsZVNoZWV0KTsKKyAgICBWZWN0
b3I8Qm9keVN0YXJ0RW5kT2Zmc2V0cz4qIG9mZnNldFZlY3RvciA9IDA7CisgICAgaWYgKGl0ID09
IHN0eWxlU2hlZXRUb09mZnNldHMuZW5kKCkpIHsKKyAgICAgICAgZm9yIChJbnNwZWN0b3JDb250
cm9sbGVyOjpSZXNvdXJjZXNNYXA6OmNvbnN0X2l0ZXJhdG9yIHJlc0l0ID0gaW5zcGVjdG9yQ29u
dHJvbGxlci0+cmVzb3VyY2VzKCkuYmVnaW4oKTsgcmVzSXQgIT0gaW5zcGVjdG9yQ29udHJvbGxl
ci0+cmVzb3VyY2VzKCkuZW5kKCk7ICsrcmVzSXQpIHsKKyAgICAgICAgICAgIGlmIChyZXNJdC0+
c2Vjb25kLT5yZXF1ZXN0VVJMKCkuc3RyaW5nKCkgPT0gcGFyZW50U3R5bGVTaGVldC0+ZmluYWxV
UkwoKS5zdHJpbmcoKSkgeworICAgICAgICAgICAgICAgIG9mZnNldFZlY3RvciA9IG5ldyBWZWN0
b3I8Qm9keVN0YXJ0RW5kT2Zmc2V0cz47CisgICAgICAgICAgICAgICAgUmVmUHRyPENTU1N0eWxl
U2hlZXQ+IG5ld1N0eWxlU2hlZXQgPSBDU1NTdHlsZVNoZWV0OjpjcmVhdGUoKTsKKyAgICAgICAg
ICAgICAgICBDU1NQYXJzZXIgcDsKKyAgICAgICAgICAgICAgICBwLnBhcnNlU2hlZXQobmV3U3R5
bGVTaGVldC5nZXQoKSwgcmVzSXQtPnNlY29uZC0+c291cmNlU3RyaW5nKCksIG9mZnNldFZlY3Rv
cik7CisgICAgICAgICAgICAgICAgaXQgPSBzdHlsZVNoZWV0VG9PZmZzZXRzLnNldChwYXJlbnRT
dHlsZVNoZWV0LCBvZmZzZXRWZWN0b3IpLmZpcnN0OworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSBlbHNlCisgICAgICAgIG9mZnNldFZlY3Rv
ciA9IGl0LT5zZWNvbmQ7CisgICAgaWYgKCFvZmZzZXRWZWN0b3IpCisgICAgICAgIHJldHVybiBz
dGQ6OnBhaXI8dW5zaWduZWQsIHVuc2lnbmVkPigwLCAwKTsKKyAgICBBU1NFUlQob2Zmc2V0VmVj
dG9yLT5zaXplKCkgPiBydWxlSW5kZXgpOworICAgIHJldHVybiBvZmZzZXRWZWN0b3ItPmF0KHJ1
bGVJbmRleCk7Cit9CisKK0NTU1N0eWxlRGVjbGFyYXRpb24qIEluc3BlY3RvckNTU1N0b3JlOjpz
dHlsZUZvcklkKGxvbmcgc3R5bGVJZCkKK3sKKyAgICBJZFRvU3R5bGVNYXA6Oml0ZXJhdG9yIGl0
ID0gaWRUb1N0eWxlLmZpbmQoc3R5bGVJZCk7CisgICAgcmV0dXJuIGl0ID09IGlkVG9TdHlsZS5l
bmQoKSA/IDAgOiBpdC0+c2Vjb25kLmdldCgpOworfQorCitsb25nIEluc3BlY3RvckNTU1N0b3Jl
OjpiaW5kU3R5bGUoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUpCit7CisgICAgbG9uZyBpZCA9
IHN0eWxlVG9JZC5nZXQoc3R5bGUpOworICAgIGlmICghaWQpIHsKKyAgICAgICAgaWQgPSBsYXN0
U3R5bGVJZCsrOworICAgICAgICBpZFRvU3R5bGUuc2V0KGlkLCBzdHlsZSk7CisgICAgICAgIHN0
eWxlVG9JZC5zZXQoc3R5bGUsIGlkKTsKKyAgICB9CisgICAgcmV0dXJuIGlkOworfQorCitsb25n
IEluc3BlY3RvckNTU1N0b3JlOjpiaW5kU3R5bGVTaGVldChDU1NTdHlsZVNoZWV0KiBzdHlsZVNo
ZWV0KQoreworICAgIGxvbmcgaWQgPSBzdHlsZVNoZWV0VG9JZC5nZXQoc3R5bGVTaGVldCk7Cisg
ICAgaWYgKCFpZCkgeworICAgICAgICBpZCA9IGxhc3RTdHlsZVNoZWV0SWQrKzsKKyAgICAgICAg
aWRUb1N0eWxlU2hlZXQuc2V0KGlkLCBzdHlsZVNoZWV0KTsKKyAgICAgICAgc3R5bGVTaGVldFRv
SWQuc2V0KHN0eWxlU2hlZXQsIGlkKTsKKyAgICB9CisgICAgcmV0dXJuIGlkOworfQorCitsb25n
IEluc3BlY3RvckNTU1N0b3JlOjpiaW5kUnVsZShDU1NTdHlsZVJ1bGUqIHJ1bGUpCit7CisgICAg
bG9uZyBpZCA9IHJ1bGVUb0lkLmdldChydWxlKTsKKyAgICBpZiAoIWlkKSB7CisgICAgICAgIGlk
ID0gbGFzdFJ1bGVJZCsrOworICAgICAgICBpZFRvUnVsZS5zZXQoaWQsIHJ1bGUpOworICAgICAg
ICBydWxlVG9JZC5zZXQocnVsZSwgaWQpOworICAgIH0KKyAgICByZXR1cm4gaWQ7CiB9CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckNTU1N0b3JlLmggYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NTdG9yZS5oCmlu
ZGV4IGQyOTBmYWQuLmZmOGM3MmYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckNTU1N0b3JlLmgKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTU3RvcmUu
aApAQCAtMzYsMzAgKzM2LDQ5IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgSW5z
cGVjdG9yQ29udHJvbGxlcjsKK2NsYXNzIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOwogY2xh
c3MgQ1NTU3R5bGVEZWNsYXJhdGlvbjsKIGNsYXNzIENTU1N0eWxlUnVsZTsKIGNsYXNzIENTU1N0
eWxlU2hlZXQ7CiBjbGFzcyBTdHJpbmc7CiAKIHR5cGVkZWYgc3RkOjpwYWlyPFN0cmluZywgU3Ry
aW5nPiBQcm9wZXJ0eVZhbHVlQW5kUHJpb3JpdHk7Cit0eXBlZGVmIHN0ZDo6cGFpcjx1bnNpZ25l
ZCwgdW5zaWduZWQ+IEJvZHlTdGFydEVuZE9mZnNldHM7CiB0eXBlZGVmIEhhc2hNYXA8U3RyaW5n
LCBQcm9wZXJ0eVZhbHVlQW5kUHJpb3JpdHk+IERpc2FibGVkU3R5bGVEZWNsYXJhdGlvbjsKIHR5
cGVkZWYgSGFzaE1hcDxDU1NTdHlsZURlY2xhcmF0aW9uKiwgbG9uZz4gU3R5bGVUb0lkTWFwOwog
dHlwZWRlZiBIYXNoTWFwPGxvbmcsIFJlZlB0cjxDU1NTdHlsZURlY2xhcmF0aW9uPiA+IElkVG9T
dHlsZU1hcDsKIHR5cGVkZWYgSGFzaE1hcDxDU1NTdHlsZVJ1bGUqLCBsb25nPiBSdWxlVG9JZE1h
cDsKIHR5cGVkZWYgSGFzaE1hcDxsb25nLCBSZWZQdHI8Q1NTU3R5bGVSdWxlPiA+IElkVG9SdWxl
TWFwOwordHlwZWRlZiBIYXNoTWFwPENTU1N0eWxlU2hlZXQqLCBWZWN0b3I8Qm9keVN0YXJ0RW5k
T2Zmc2V0cz4qID4gU3R5bGVTaGVldFRvT2Zmc2V0c01hcDsKK3R5cGVkZWYgSGFzaE1hcDxDU1NT
dHlsZVNoZWV0KiwgbG9uZz4gU3R5bGVTaGVldFRvSWRNYXA7Cit0eXBlZGVmIEhhc2hNYXA8bG9u
ZywgUmVmUHRyPENTU1N0eWxlU2hlZXQ+ID4gSWRUb1N0eWxlU2hlZXRNYXA7CiB0eXBlZGVmIEhh
c2hNYXA8bG9uZywgRGlzYWJsZWRTdHlsZURlY2xhcmF0aW9uPiBJZFRvRGlzYWJsZWRTdHlsZU1h
cDsKIAogc3RydWN0IEluc3BlY3RvckNTU1N0b3JlIHsKLSAgICBJbnNwZWN0b3JDU1NTdG9yZSgp
OworICAgIEluc3BlY3RvckNTU1N0b3JlKEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckNv
bnRyb2xsZXIpOwogICAgIH5JbnNwZWN0b3JDU1NTdG9yZSgpOwogICAgIHZvaWQgcmVzZXQoKTsK
KyAgICBCb2R5U3RhcnRFbmRPZmZzZXRzIGdldFN0YXJ0RW5kT2Zmc2V0cyhDU1NTdHlsZVJ1bGUq
IHJ1bGUpOworICAgIENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlRm9ySWQobG9uZyBzdHlsZUlk
KTsKKyAgICBsb25nIGJpbmRSdWxlKENTU1N0eWxlUnVsZSogcnVsZSk7CisgICAgbG9uZyBiaW5k
U3R5bGUoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUpOworICAgIGxvbmcgYmluZFN0eWxlU2hl
ZXQoQ1NTU3R5bGVTaGVldCogc3R5bGVTaGVldCk7CiAKICAgICBTdHlsZVRvSWRNYXAgc3R5bGVU
b0lkOwogICAgIElkVG9TdHlsZU1hcCBpZFRvU3R5bGU7CiAgICAgUnVsZVRvSWRNYXAgcnVsZVRv
SWQ7CiAgICAgSWRUb1J1bGVNYXAgaWRUb1J1bGU7CisgICAgU3R5bGVTaGVldFRvT2Zmc2V0c01h
cCBzdHlsZVNoZWV0VG9PZmZzZXRzOworICAgIFN0eWxlU2hlZXRUb0lkTWFwIHN0eWxlU2hlZXRU
b0lkOworICAgIElkVG9TdHlsZVNoZWV0TWFwIGlkVG9TdHlsZVNoZWV0OwogICAgIElkVG9EaXNh
YmxlZFN0eWxlTWFwIGlkVG9EaXNhYmxlZFN0eWxlOwogICAgIFJlZlB0cjxDU1NTdHlsZVNoZWV0
PiBpbnNwZWN0b3JTdHlsZVNoZWV0OworCisgICAgSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVj
dG9yQ29udHJvbGxlcjsKKyAgICBsb25nIGxhc3RTdHlsZUlkOworICAgIGxvbmcgbGFzdFN0eWxl
U2hlZXRJZDsKKyAgICBsb25nIGxhc3RSdWxlSWQ7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNw
cCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCmluZGV4IDNiMzZh
NGEuLjlmOThhYjIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRy
b2xsZXIuY3BwCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3Bw
CkBAIC0xNDUsNyArMTQ1LDcgQEAgSW5zcGVjdG9yQ29udHJvbGxlcjo6SW5zcGVjdG9yQ29udHJv
bGxlcihQYWdlKiBwYWdlLCBJbnNwZWN0b3JDbGllbnQqIGNsaWVudCkKICAgICA6IG1faW5zcGVj
dGVkUGFnZShwYWdlKQogICAgICwgbV9jbGllbnQoY2xpZW50KQogICAgICwgbV9vcGVuaW5nRnJv
bnRlbmQoZmFsc2UpCi0gICAgLCBtX2Nzc1N0b3JlKG5ldyBJbnNwZWN0b3JDU1NTdG9yZSgpKQor
ICAgICwgbV9jc3NTdG9yZShuZXcgSW5zcGVjdG9yQ1NTU3RvcmUodGhpcykpCiAgICAgLCBtX2V4
cGlyZWRDb25zb2xlTWVzc2FnZUNvdW50KDApCiAgICAgLCBtX3Nob3dBZnRlclZpc2libGUoQ3Vy
cmVudFBhbmVsKQogICAgICwgbV9ncm91cExldmVsKDApCmRpZmYgLS1naXQgYS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JET01BZ2VudC5jcHAKaW5kZXggMDgzM2UxNS4uOTMyZDk0MSAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckRPTUFnZW50LmNwcApAQCAtNzgsOCArNzgsNiBAQCBJbnNwZWN0b3JET01BZ2Vu
dDo6SW5zcGVjdG9yRE9NQWdlbnQoSW5zcGVjdG9yQ1NTU3RvcmUqIGNzc1N0b3JlLCBJbnNwZWN0
b3JGcm9udAogICAgICwgbV9jc3NTdG9yZShjc3NTdG9yZSkKICAgICAsIG1fZnJvbnRlbmQoZnJv
bnRlbmQpCiAgICAgLCBtX2xhc3ROb2RlSWQoMSkKLSAgICAsIG1fbGFzdFN0eWxlSWQoMSkKLSAg
ICAsIG1fbGFzdFJ1bGVJZCgxKQogewogfQogCkBAIC05MDAsOCArODk4LDggQEAgU2NyaXB0QXJy
YXkgSW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aWxkQXJyYXlGb3JQc2V1ZG9FbGVtZW50cyhFbGVtZW50
KiBlbGVtZW50LCBib28KIAogdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6YXBwbHlTdHlsZVRleHQo
bG9uZyBjYWxsSWQsIGxvbmcgc3R5bGVJZCwgY29uc3QgU3RyaW5nJiBzdHlsZVRleHQsIGNvbnN0
IFN0cmluZyYgcHJvcGVydHlOYW1lKQogewotICAgIElkVG9TdHlsZU1hcDo6aXRlcmF0b3IgaXQg
PSBjc3NTdG9yZSgpLT5pZFRvU3R5bGUuZmluZChzdHlsZUlkKTsKLSAgICBpZiAoaXQgPT0gY3Nz
U3RvcmUoKS0+aWRUb1N0eWxlLmVuZCgpKSB7CisgICAgQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5
bGUgPSBjc3NTdG9yZSgpLT5zdHlsZUZvcklkKHN0eWxlSWQpOworICAgIGlmICghc3R5bGUpIHsK
ICAgICAgICAgbV9mcm9udGVuZC0+ZGlkQXBwbHlTdHlsZVRleHQoY2FsbElkLCBmYWxzZSwgU2Ny
aXB0VmFsdWU6OnVuZGVmaW5lZCgpLCBtX2Zyb250ZW5kLT5uZXdTY3JpcHRBcnJheSgpKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTkxMSw3ICs5MDksNiBAQCB2b2lkIEluc3BlY3RvckRP
TUFnZW50OjphcHBseVN0eWxlVGV4dChsb25nIGNhbGxJZCwgbG9uZyBzdHlsZUlkLCBjb25zdCBT
dHJpbmcmCiAgICAgaWYgKGRpc2FibGVkSXQgIT0gY3NzU3RvcmUoKS0+aWRUb0Rpc2FibGVkU3R5
bGUuZW5kKCkpCiAgICAgICAgIGRpc2FibGVkSXQtPnNlY29uZC5yZW1vdmUocHJvcGVydHlOYW1l
KTsKIAotICAgIENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlID0gaXQtPnNlY29uZC5nZXQoKTsK
ICAgICBpbnQgc3R5bGVUZXh0TGVuZ3RoID0gc3R5bGVUZXh0Lmxlbmd0aCgpOwogCiAgICAgUmVm
UHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiB0ZW1wTXV0YWJsZVN0eWxlID0gQ1NTTXV0
YWJsZVN0eWxlRGVjbGFyYXRpb246OmNyZWF0ZSgpOwpAQCAtOTg4LDEyICs5ODUsMTEgQEAgdm9p
ZCBJbnNwZWN0b3JET01BZ2VudDo6YXBwbHlTdHlsZVRleHQobG9uZyBjYWxsSWQsIGxvbmcgc3R5
bGVJZCwgY29uc3QgU3RyaW5nJgogCiB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpzZXRTdHlsZVRl
eHQobG9uZyBjYWxsSWQsIGxvbmcgc3R5bGVJZCwgY29uc3QgU3RyaW5nJiBjc3NUZXh0KQogewot
ICAgIElkVG9TdHlsZU1hcDo6aXRlcmF0b3IgaXQgPSBjc3NTdG9yZSgpLT5pZFRvU3R5bGUuZmlu
ZChzdHlsZUlkKTsKLSAgICBpZiAoaXQgPT0gY3NzU3RvcmUoKS0+aWRUb1N0eWxlLmVuZCgpKSB7
CisgICAgQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUgPSBjc3NTdG9yZSgpLT5zdHlsZUZvcklk
KHN0eWxlSWQpOworICAgIGlmICghc3R5bGUpIHsKICAgICAgICAgbV9mcm9udGVuZC0+ZGlkU2V0
U3R5bGVUZXh0KGNhbGxJZCwgZmFsc2UpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIENT
U1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlID0gaXQtPnNlY29uZC5nZXQoKTsKICAgICBFeGNlcHRp
b25Db2RlIGVjID0gMDsKICAgICBzdHlsZS0+c2V0Q3NzVGV4dChjc3NUZXh0LCBlYyk7CiAgICAg
bV9mcm9udGVuZC0+ZGlkU2V0U3R5bGVUZXh0KGNhbGxJZCwgIWVjKTsKQEAgLTEwMDEsMTMgKzk5
NywxMiBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpzZXRTdHlsZVRleHQobG9uZyBjYWxsSWQs
IGxvbmcgc3R5bGVJZCwgY29uc3QgU3RyaW5nJiBjcwogCiB2b2lkIEluc3BlY3RvckRPTUFnZW50
OjpzZXRTdHlsZVByb3BlcnR5KGxvbmcgY2FsbElkLCBsb25nIHN0eWxlSWQsIGNvbnN0IFN0cmlu
ZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKIHsKLSAgICBJZFRvU3R5bGVNYXA6Oml0ZXJh
dG9yIGl0ID0gY3NzU3RvcmUoKS0+aWRUb1N0eWxlLmZpbmQoc3R5bGVJZCk7Ci0gICAgaWYgKGl0
ID09IGNzc1N0b3JlKCktPmlkVG9TdHlsZS5lbmQoKSkgeworICAgIENTU1N0eWxlRGVjbGFyYXRp
b24qIHN0eWxlID0gY3NzU3RvcmUoKS0+c3R5bGVGb3JJZChzdHlsZUlkKTsKKyAgICBpZiAoIXN0
eWxlKSB7CiAgICAgICAgIG1fZnJvbnRlbmQtPmRpZFNldFN0eWxlUHJvcGVydHkoY2FsbElkLCBm
YWxzZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBDU1NTdHlsZURlY2xhcmF0aW9u
KiBzdHlsZSA9IGl0LT5zZWNvbmQuZ2V0KCk7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAg
ICAgc3R5bGUtPnNldFByb3BlcnR5KG5hbWUsIHZhbHVlLCBlYyk7CiAgICAgbV9mcm9udGVuZC0+
ZGlkU2V0U3R5bGVQcm9wZXJ0eShjYWxsSWQsICFlYyk7CkBAIC0xMDE1LDEyICsxMDEwLDExIEBA
IHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnNldFN0eWxlUHJvcGVydHkobG9uZyBjYWxsSWQsIGxv
bmcgc3R5bGVJZCwgY29uc3QgU3RyaW5nCiAKIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnRvZ2ds
ZVN0eWxlRW5hYmxlZChsb25nIGNhbGxJZCwgbG9uZyBzdHlsZUlkLCBjb25zdCBTdHJpbmcmIHBy
b3BlcnR5TmFtZSwgYm9vbCBkaXNhYmxlZCkKIHsKLSAgICBJZFRvU3R5bGVNYXA6Oml0ZXJhdG9y
IGl0ID0gY3NzU3RvcmUoKS0+aWRUb1N0eWxlLmZpbmQoc3R5bGVJZCk7Ci0gICAgaWYgKGl0ID09
IGNzc1N0b3JlKCktPmlkVG9TdHlsZS5lbmQoKSkgeworICAgIENTU1N0eWxlRGVjbGFyYXRpb24q
IHN0eWxlID0gY3NzU3RvcmUoKS0+c3R5bGVGb3JJZChzdHlsZUlkKTsKKyAgICBpZiAoIXN0eWxl
KSB7CiAgICAgICAgIG1fZnJvbnRlbmQtPmRpZFRvZ2dsZVN0eWxlRW5hYmxlZChjYWxsSWQsIFNj
cmlwdFZhbHVlOjp1bmRlZmluZWQoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgQ1NT
U3R5bGVEZWNsYXJhdGlvbiogc3R5bGUgPSBpdC0+c2Vjb25kLmdldCgpOwogCiAgICAgSWRUb0Rp
c2FibGVkU3R5bGVNYXA6Oml0ZXJhdG9yIGRpc2FibGVkSXQgPSBjc3NTdG9yZSgpLT5pZFRvRGlz
YWJsZWRTdHlsZS5maW5kKHN0eWxlSWQpOwogICAgIGlmIChkaXNhYmxlZEl0ID09IGNzc1N0b3Jl
KCktPmlkVG9EaXNhYmxlZFN0eWxlLmVuZCgpKQpAQCAtMTEyMCwzMyArMTExNCwxMSBAQCB2b2lk
IEluc3BlY3RvckRPTUFnZW50OjphZGRSdWxlKGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIHNl
bGVjdG9yLCBsb25nIHNlbGVjdAogICAgIG1fZnJvbnRlbmQtPmRpZEFkZFJ1bGUoY2FsbElkLCBi
dWlsZE9iamVjdEZvclJ1bGUobmV3UnVsZSksIHJ1bGVBZmZlY3RzTm9kZShuZXdSdWxlLCBub2Rl
KSk7CiB9CiAKLWxvbmcgSW5zcGVjdG9yRE9NQWdlbnQ6OmJpbmRTdHlsZShDU1NTdHlsZURlY2xh
cmF0aW9uKiBzdHlsZSkKLXsKLSAgICBsb25nIGlkID0gY3NzU3RvcmUoKS0+c3R5bGVUb0lkLmdl
dChzdHlsZSk7Ci0gICAgaWYgKCFpZCkgewotICAgICAgICBpZCA9IG1fbGFzdFN0eWxlSWQrKzsK
LSAgICAgICAgY3NzU3RvcmUoKS0+aWRUb1N0eWxlLnNldChpZCwgc3R5bGUpOwotICAgICAgICBj
c3NTdG9yZSgpLT5zdHlsZVRvSWQuc2V0KHN0eWxlLCBpZCk7Ci0gICAgfQotICAgIHJldHVybiBp
ZDsKLX0KLQotbG9uZyBJbnNwZWN0b3JET01BZ2VudDo6YmluZFJ1bGUoQ1NTU3R5bGVSdWxlKiBy
dWxlKQotewotICAgIGxvbmcgaWQgPSBjc3NTdG9yZSgpLT5ydWxlVG9JZC5nZXQocnVsZSk7Ci0g
ICAgaWYgKCFpZCkgewotICAgICAgICBpZCA9IG1fbGFzdFJ1bGVJZCsrOwotICAgICAgICBjc3NT
dG9yZSgpLT5pZFRvUnVsZS5zZXQoaWQsIHJ1bGUpOwotICAgICAgICBjc3NTdG9yZSgpLT5ydWxl
VG9JZC5zZXQocnVsZSwgaWQpOwotICAgIH0KLSAgICByZXR1cm4gaWQ7Ci19Ci0KIFNjcmlwdE9i
amVjdCBJbnNwZWN0b3JET01BZ2VudDo6YnVpbGRPYmplY3RGb3JTdHlsZShDU1NTdHlsZURlY2xh
cmF0aW9uKiBzdHlsZSwgYm9vbCBiaW5kKQogewogICAgIFNjcmlwdE9iamVjdCByZXN1bHQgPSBt
X2Zyb250ZW5kLT5uZXdTY3JpcHRPYmplY3QoKTsKICAgICBpZiAoYmluZCkgewotICAgICAgICBs
b25nIHN0eWxlSWQgPSBiaW5kU3R5bGUoc3R5bGUpOworICAgICAgICBsb25nIHN0eWxlSWQgPSBj
c3NTdG9yZSgpLT5iaW5kU3R5bGUoc3R5bGUpOwogICAgICAgICByZXN1bHQuc2V0KCJpZCIsIHN0
eWxlSWQpOwogCiAgICAgICAgIElkVG9EaXNhYmxlZFN0eWxlTWFwOjppdGVyYXRvciBkaXNhYmxl
ZEl0ID0gY3NzU3RvcmUoKS0+aWRUb0Rpc2FibGVkU3R5bGUuZmluZChzdHlsZUlkKTsKQEAgLTEx
NTUsNiArMTEyNywxNyBAQCBTY3JpcHRPYmplY3QgSW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aWxkT2Jq
ZWN0Rm9yU3R5bGUoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUsCiAgICAgfQogICAgIHJlc3Vs
dC5zZXQoIndpZHRoIiwgc3R5bGUtPmdldFByb3BlcnR5VmFsdWUoIndpZHRoIikpOwogICAgIHJl
c3VsdC5zZXQoImhlaWdodCIsIHN0eWxlLT5nZXRQcm9wZXJ0eVZhbHVlKCJoZWlnaHQiKSk7Cisg
ICAgaWYgKGJpbmQpIHsKKyAgICAgICAgQ1NTUnVsZSogcGFyZW50UnVsZSA9IHN0eWxlLT5wYXJl
bnRSdWxlKCk7CisgICAgICAgIGlmIChwYXJlbnRSdWxlICYmIHBhcmVudFJ1bGUtPnR5cGUoKSA9
PSBDU1NSdWxlOjpTVFlMRV9SVUxFKSB7CisgICAgICAgICAgICBDU1NTdHlsZVJ1bGUqIHBhcmVu
dFN0eWxlUnVsZSA9IHN0YXRpY19jYXN0PENTU1N0eWxlUnVsZSo+KHBhcmVudFJ1bGUpOworICAg
ICAgICAgICAgc3RkOjpwYWlyPHVuc2lnbmVkLCB1bnNpZ25lZD4gc3RhcnRFbmQgPSBjc3NTdG9y
ZSgpLT5nZXRTdGFydEVuZE9mZnNldHMocGFyZW50U3R5bGVSdWxlKTsKKyAgICAgICAgICAgIGlm
IChzdGFydEVuZC5zZWNvbmQpIHsKKyAgICAgICAgICAgICAgICByZXN1bHQuc2V0KCJib2R5U3Rh
cnRPZmZzZXQiLCBzdGFydEVuZC5maXJzdCk7CisgICAgICAgICAgICAgICAgcmVzdWx0LnNldCgi
Ym9keUVuZE9mZnNldCIsIHN0YXJ0RW5kLnNlY29uZCk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9CiAgICAgcG9wdWxhdGVPYmplY3RXaXRoU3R5bGVQcm9wZXJ0aWVzKHN0eWxlLCBy
ZXN1bHQpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC0xMjI3LDYgKzEyMTAsMTEgQEAgU2Ny
aXB0T2JqZWN0IEluc3BlY3RvckRPTUFnZW50OjpidWlsZE9iamVjdEZvclJ1bGUoQ1NTU3R5bGVS
dWxlKiBydWxlKQogICAgIHJlc3VsdC5zZXQoInNlbGVjdG9yVGV4dCIsIHJ1bGUtPnNlbGVjdG9y
VGV4dCgpKTsKICAgICByZXN1bHQuc2V0KCJjc3NUZXh0IiwgcnVsZS0+Y3NzVGV4dCgpKTsKICAg
ICByZXN1bHQuc2V0KCJzb3VyY2VMaW5lIiwgcnVsZS0+c291cmNlTGluZSgpKTsKKyAgICBzdGQ6
OnBhaXI8dW5zaWduZWQsIHVuc2lnbmVkPiBzdGFydEVuZCA9IGNzc1N0b3JlKCktPmdldFN0YXJ0
RW5kT2Zmc2V0cyhydWxlKTsKKyAgICBpZiAoc3RhcnRFbmQuc2Vjb25kKSB7CisgICAgICAgIHJl
c3VsdC5zZXQoImJvZHlTdGFydE9mZnNldCIsIHN0YXJ0RW5kLmZpcnN0KTsKKyAgICAgICAgcmVz
dWx0LnNldCgiYm9keUVuZE9mZnNldCIsIHN0YXJ0RW5kLnNlY29uZCk7CisgICAgfQogICAgIGlm
IChwYXJlbnRTdHlsZVNoZWV0KSB7CiAgICAgICAgIFNjcmlwdE9iamVjdCBwYXJlbnRTdHlsZVNo
ZWV0VmFsdWUgPSBtX2Zyb250ZW5kLT5uZXdTY3JpcHRPYmplY3QoKTsKICAgICAgICAgcmVzdWx0
LnNldCgicGFyZW50U3R5bGVTaGVldCIsIHBhcmVudFN0eWxlU2hlZXRWYWx1ZSk7CkBAIC0xMjQz
LDcgKzEyMzEsNyBAQCBTY3JpcHRPYmplY3QgSW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aWxkT2JqZWN0
Rm9yUnVsZShDU1NTdHlsZVJ1bGUqIHJ1bGUpCiAgICAgcmVzdWx0LnNldCgic3R5bGUiLCBidWls
ZE9iamVjdEZvclN0eWxlKHJ1bGUtPnN0eWxlKCksIGJpbmQpKTsKIAogICAgIGlmIChiaW5kKQot
ICAgICAgICByZXN1bHQuc2V0KCJpZCIsIGJpbmRSdWxlKHJ1bGUpKTsKKyAgICAgICAgcmVzdWx0
LnNldCgiaWQiLCBjc3NTdG9yZSgpLT5iaW5kUnVsZShydWxlKSk7CiAgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQu
aCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmgKaW5kZXggYzhhNGUxYS4u
OTE2ZTk5NCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQu
aAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5oCkBAIC0xODYsOCAr
MTg2LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBIYXNoTWFwPGxvbmcsIE5vZGVU
b0lkTWFwKj4gbV9pZFRvTm9kZXNNYXA7CiAgICAgICAgIEhhc2hTZXQ8bG9uZz4gbV9jaGlsZHJl
blJlcXVlc3RlZDsKICAgICAgICAgbG9uZyBtX2xhc3ROb2RlSWQ7Ci0gICAgICAgIGxvbmcgbV9s
YXN0U3R5bGVJZDsKLSAgICAgICAgbG9uZyBtX2xhc3RSdWxlSWQ7CiAgICAgICAgIExpc3RIYXNo
U2V0PFJlZlB0cjxEb2N1bWVudD4gPiBtX2RvY3VtZW50czsKICAgICB9OwogCmRpZmYgLS1naXQg
YS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRE9NQWdlbnQuanMgYi9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvRE9NQWdlbnQuanMKaW5kZXggMzM3M2MwNC4uMGNkOWZlNyAxMDA2NDQK
LS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RPTUFnZW50LmpzCisrKyBiL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9ET01BZ2VudC5qcwpAQCAtNDkxLDYgKzQ5MSw4IEBAIFdl
Ykluc3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0aW9uID0gZnVuY3Rpb24ocGF5bG9hZCkKICAgICB0
aGlzLmlkID0gcGF5bG9hZC5pZDsKICAgICB0aGlzLndpZHRoID0gcGF5bG9hZC53aWR0aDsKICAg
ICB0aGlzLmhlaWdodCA9IHBheWxvYWQuaGVpZ2h0OworICAgIHRoaXMuYm9keVN0YXJ0T2Zmc2V0
ID0gcGF5bG9hZC5ib2R5U3RhcnRPZmZzZXQ7CisgICAgdGhpcy5ib2R5RW5kT2Zmc2V0ID0gcGF5
bG9hZC5ib2R5RW5kT2Zmc2V0OwogICAgIHRoaXMuX19kaXNhYmxlZFByb3BlcnRpZXMgPSB7fTsK
ICAgICB0aGlzLl9fZGlzYWJsZWRQcm9wZXJ0eVZhbHVlcyA9IHt9OwogICAgIHRoaXMuX19kaXNh
YmxlZFByb3BlcnR5UHJpb3JpdGllcyA9IHt9Owo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>56598</attachid>
            <date>2010-05-20 08:44:57 -0700</date>
            <delta_ts>2010-05-25 05:01:49 -0700</delta_ts>
            <desc>[PATCH] Minor cleanup</desc>
            <filename>ruleoffsets.patch</filename>
            <type>text/plain</type>
            <size>25102</size>
            <attacher name="Alexander Pavlov (apavlov)">apavlov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCAyNjk0ODQ2Li5iZTc2NjlkIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTAtMDUt
MTkgIEFsZXhhbmRlciBQYXZsb3YgIDxhcGF2bG92QGNocm9taXVtLm9yZz4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBFeHBvc2UgQ1NTIHJ1bGUgYm9k
eSBzdGFydC9lbmQgb2Zmc2V0cyBpbiB0aGUgcGFyZW50IHN0eWxlc2hlZXQKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM4OTA2CisKKyAgICAgICAgKiBp
bnNwZWN0b3IvcmVzb3VyY2VzL3N0eWxlcy1zb3VyY2Utb2Zmc2V0cy5jc3M6IEFkZGVkLgorICAg
ICAgICAoYm9keSk6CisgICAgICAgICgvKiBjb21tZW50IGJlZm9yZSBzZWxlY3RvciAqL2JvZHku
bWFpbjEvKiBjb21tZW50IGFmdGVyIHNlbGVjdG9yICovKToKKyAgICAgICAgKGJvZHkubWFpbjIp
OgorICAgICAgICAqIGluc3BlY3Rvci9zdHlsZXMtc291cmNlLW9mZnNldHMtZXhwZWN0ZWQudHh0
OiBBZGRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc3R5bGVzLXNvdXJjZS1vZmZzZXRzLmh0bWw6
IEFkZGVkLgorCiAyMDEwLTA1LTE5ICBaaGVueWFvIE1vICA8em1vQGdvb2dsZS5jb20+CiAKICAg
ICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9p
bnNwZWN0b3IvcmVzb3VyY2VzL3N0eWxlcy1zb3VyY2Utb2Zmc2V0cy5jc3MgYi9MYXlvdXRUZXN0
cy9pbnNwZWN0b3IvcmVzb3VyY2VzL3N0eWxlcy1zb3VyY2Utb2Zmc2V0cy5jc3MKbmV3IGZpbGUg
bW9kZSAxMDA3NTUKaW5kZXggMDAwMDAwMC4uZWY2OWVlNgotLS0gL2Rldi9udWxsCisrKyBiL0xh
eW91dFRlc3RzL2luc3BlY3Rvci9yZXNvdXJjZXMvc3R5bGVzLXNvdXJjZS1vZmZzZXRzLmNzcwpA
QCAtMCwwICsxLDcgQEAKK2JvZHkgeworICAgIGZvbnQtc2l6ZTogMTJweDsKK30KKworLyogY29t
bWVudCBiZWZvcmUgc2VsZWN0b3IgKi9ib2R5Lm1haW4xLyogY29tbWVudCBhZnRlciBzZWxlY3Rv
ciAqL3svKiBjb21tZW50ICovY29sb3I6ICMwMDA7fS8qIGNvbW1lbnQgKi8KKworYm9keS5tYWlu
MntiYWNrZ3JvdW5kOiBncmVlbjt9CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3Iv
c3R5bGVzLXNvdXJjZS1vZmZzZXRzLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL2luc3BlY3Rv
ci9zdHlsZXMtc291cmNlLW9mZnNldHMtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAuLmY1MDM1ZGQKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9p
bnNwZWN0b3Ivc3R5bGVzLXNvdXJjZS1vZmZzZXRzLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDYg
QEAKK1Rlc3RzIHRoYXQgcHJvcGVyIHN0YXJ0L2VuZCBvZmZzZXQgcG9zaXRpb25zIGFyZSByZXBv
cnRlZCBmb3IgQ1NTIHJ1bGUgYm9kaWVzLgorCitib2R5OiBbNS0yOF0KK2JvZHkubWFpbjE6IFs5
OC0xMjRdCitib2R5Lm1haW4yOiBbMTUwLTE2OV0KKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
aW5zcGVjdG9yL3N0eWxlcy1zb3VyY2Utb2Zmc2V0cy5odG1sIGIvTGF5b3V0VGVzdHMvaW5zcGVj
dG9yL3N0eWxlcy1zb3VyY2Utb2Zmc2V0cy5odG1sCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAuLjY0OGI4YzUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0
b3Ivc3R5bGVzLXNvdXJjZS1vZmZzZXRzLmh0bWwKQEAgLTAsMCArMSw1NSBAQAorPGh0bWw+Cis8
aGVhZD4KKworPGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSJyZXNvdXJjZXMvc3R5bGVzLXNv
dXJjZS1vZmZzZXRzLmNzcyIgLS0+CisKKzxzY3JpcHQgc3JjPSIuLi9odHRwL3Rlc3RzL2luc3Bl
Y3Rvci9pbnNwZWN0b3ItdGVzdC5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iZWxlbWVudHMt
dGVzdHMuanMiPjwvc2NyaXB0PgorPHNjcmlwdD4KKworZnVuY3Rpb24gZG9pdCgpCit7CisgICAg
ZnVuY3Rpb24gY2FsbGJhY2soc3R5bGVzKQorICAgIHsKKyAgICAgICAgaWYgKHN0eWxlcyA9PT0g
InJlZnJlc2hpbmciKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB2YXIgbWF0Y2hlZENT
U1J1bGVzID0gc3R5bGVzLm1hdGNoZWRDU1NSdWxlczsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7
IGkgPCBtYXRjaGVkQ1NTUnVsZXMubGVuZ3RoOyArK2kpCisgICAgICAgICAgICBvdXRwdXQobWF0
Y2hlZENTU1J1bGVzW2ldLnNlbGVjdG9yVGV4dCArICI6IFsiICsgbWF0Y2hlZENTU1J1bGVzW2ld
LmJvZHlTdGFydE9mZnNldCArICItIiArIG1hdGNoZWRDU1NSdWxlc1tpXS5ib2R5RW5kT2Zmc2V0
ICsgIl0iKTsKKworICAgICAgICBub3RpZnlEb25lKCk7CisgICAgfQorICAgIGV2YWx1YXRlSW5X
ZWJJbnNwZWN0b3IoImZyb250ZW5kX2R1bXBCb2R5T2Zmc2V0cyIsIGNhbGxiYWNrKTsKK30KKwor
CisvLyBGcm9udGVuZCBmdW5jdGlvbnMuCisKK2Z1bmN0aW9uIGZyb250ZW5kX2R1bXBCb2R5T2Zm
c2V0cyh0ZXN0Q29udHJvbGxlcikKK3sKKyAgICBpZiAoIVdlYkluc3BlY3Rvci5wYW5lbHMucmVz
b3VyY2VzLnJlc291cmNlVHJhY2tpbmdFbmFibGVkKSB7CisgICAgICAgIEluc3BlY3RvckJhY2tl
bmQuZW5hYmxlUmVzb3VyY2VUcmFja2luZyhmYWxzZSk7CisgICAgICAgIHJldHVybiAicmVmcmVz
aGluZyI7CisgICAgfQorCisgICAgdGVzdENvbnRyb2xsZXIud2FpdFVudGlsRG9uZSgpOworICAg
IGZyb250ZW5kX2V4cGFuZERPTVN1YnRyZWUoV2ViSW5zcGVjdG9yLmRvbUFnZW50LmRvY3VtZW50
KTsKKyAgICB0ZXN0Q29udHJvbGxlci5ydW5BZnRlclBlbmRpbmdEaXNwYXRjaGVzKGZ1bmN0aW9u
KCkgeworICAgICAgICBmdW5jdGlvbiBjYWxsYmFjayhzdHlsZXMpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoc3R5bGVzKTsKKyAgICAgICAgfQorICAg
ICAgICBJbnNwZWN0b3JCYWNrZW5kLmdldFN0eWxlcyhXZWJJbnNwZWN0b3IuQ2FsbGJhY2sud3Jh
cChjYWxsYmFjayksIFdlYkluc3BlY3Rvci5kb21BZ2VudC5kb2N1bWVudC5ib2R5LmlkLCB0cnVl
KTsKKyAgICB9KTsKK30KKworPC9zY3JpcHQ+Cis8L2hlYWQ+CisKKzxib2R5IGNsYXNzPSJtYWlu
MSBtYWluMiIgb25sb2FkPSJvbmxvYWQoKSI+Cis8cD4KK1Rlc3RzIHRoYXQgcHJvcGVyIHN0YXJ0
L2VuZCBvZmZzZXQgcG9zaXRpb25zIGFyZSByZXBvcnRlZCBmb3IgQ1NTIHJ1bGUgYm9kaWVzLgor
PC9wPgorCis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9XZWJDb3JlL0NoYW5nZUxvZyBi
L1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDQ5MGRiNjMuLjc4NTJiNDggMTAwNjQ0Ci0tLSBhL1dl
YkNvcmUvQ2hhbmdlTG9nCisrKyBiL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsNTIgQEAK
IDIwMTAtMDUtMTkgIEFsZXhhbmRlciBQYXZsb3YgIDxhcGF2bG92QGNocm9taXVtLm9yZz4KIAor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBFeHBvc2UgQ1NT
IHJ1bGUgYm9keSBzdGFydC9lbmQgb2Zmc2V0cyBpbiB0aGUgcGFyZW50IHN0eWxlc2hlZXQKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM4OTA2CisKKyAg
ICAgICAgQ1NTUGFyc2VyOjpwYXJzZVNoZWV0KCkgYWNjZXB0cyBhbiBvcHRpb25hbCBleHRlcm5h
bCBWZWN0b3Igd2hlcmUgdGhlIHN0YXJ0L2VuZCBvZmZzZXRzCisgICAgICAgIG9mIHRoZSBDU1NT
dHlsZVJ1bGUgYm9kaWVzLCByZWxhdGl2ZSB0byB0aGUgYmVnaW5uaW5nIG9mIHRoZSBzdHlsZXNo
ZWV0LCB3aWxsIGJlIHN0b3JlZC4KKyAgICAgICAgVGhpcyBWZWN0b3IgaXMgb25seSB1c2VkIHdo
ZW4gdGhlIFdlYiBJbnNwZWN0b3IgbmVlZHMgdGhlIGJvZHkgcmFuZ2VzLCB0aHVzIHRoZXJlIGlz
IG5vCisgICAgICAgIG1lbW9yeSBvdmVyaGVhZCB1bnRpbCB0aGUgdXNlciBzdGFydHMgZWRpdGlu
ZyBzdHlsZXMgdmlhIHRoZSBXZWIgSW5zcGVjdG9yLgorCisgICAgICAgIFRlc3Q6IGluc3BlY3Rv
ci9zdHlsZXMtc291cmNlLW9mZnNldHMuaHRtbAorCisgICAgICAgICogY3NzL0NTU0dyYW1tYXIu
eToKKyAgICAgICAgKiBjc3MvQ1NTUGFyc2VyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1Bh
cnNlcjo6c2V0dXBQYXJzZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpwYXJzZVNo
ZWV0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6Y3JlYXRlU3R5bGVSdWxlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6dXBkYXRlTGFzdFNlbGVjdG9yTGluZUFuZFBvc2l0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1BhcnNlcjo6bWFya1N0YXJ0KToKKyAgICAgICAg
KFdlYkNvcmU6OkNTU1BhcnNlcjo6bWFya0VuZCk6CisgICAgICAgICogY3NzL0NTU1BhcnNlci5o
OgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpyZXNldE1hcmtzKToKKyAgICAgICAgKiBp
bnNwZWN0b3IvSW5zcGVjdG9yQ1NTU3RvcmUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yQ1NTU3RvcmU6Okluc3BlY3RvckNTU1N0b3JlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvckNTU1N0b3JlOjpyZXNldCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NTdG9y
ZTo6Z2V0U3RhcnRFbmRPZmZzZXRzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU1N0
b3JlOjpzdHlsZUZvcklkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU1N0b3JlOjpi
aW5kU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTU3RvcmU6OmJpbmRTdHls
ZVNoZWV0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU1N0b3JlOjpiaW5kUnVsZSk6
CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNTU1N0b3JlLmg6CisgICAgICAgICogaW5z
cGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yQ29udHJvbGxlcjo6SW5zcGVjdG9yQ29udHJvbGxlcik6CisgICAgICAgICogaW5zcGVjdG9y
L0luc3BlY3RvckRPTUFnZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFn
ZW50OjpJbnNwZWN0b3JET01BZ2VudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01B
Z2VudDo6YXBwbHlTdHlsZVRleHQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdl
bnQ6OnNldFN0eWxlVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6
c2V0U3R5bGVQcm9wZXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6
dG9nZ2xlU3R5bGVFbmFibGVkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50
OjpidWlsZE9iamVjdEZvclN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFn
ZW50OjpidWlsZE9iamVjdEZvclJ1bGUpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JE
T01BZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvRE9NQWdlbnQuanM6Cisg
ICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJhdGlvbik6CisKKzIwMTAtMDUtMTkg
IEFsZXhhbmRlciBQYXZsb3YgIDxhcGF2bG92QGNocm9taXVtLm9yZz4KKwogICAgICAgICBSZXZp
ZXdlZCBieSBKZXJlbXkgT3Jsb3cuCiAKICAgICAgICAgRml4IHdoaXRlc3BhY2UgZm9yIHRoZSBi
dWcgMzg5MDYKZGlmZiAtLWdpdCBhL1dlYkNvcmUvY3NzL0NTU0dyYW1tYXIueSBiL1dlYkNvcmUv
Y3NzL0NTU0dyYW1tYXIueQppbmRleCAzN2M1Mzg1Li5iMWEyYmQ5IDEwMDY0NAotLS0gYS9XZWJD
b3JlL2Nzcy9DU1NHcmFtbWFyLnkKKysrIGIvV2ViQ29yZS9jc3MvQ1NTR3JhbW1hci55CkBAIC04
ODksNyArODg5LDEwIEBAIHVuYXJ5X29wZXJhdG9yOgogCiBydWxlc2V0OgogICAgIHNlbGVjdG9y
X2xpc3QgJ3snIG1heWJlX3NwYWNlIGRlY2xhcmF0aW9uX2xpc3QgY2xvc2luZ19icmFjZSB7Ci0g
ICAgICAgICQkID0gc3RhdGljX2Nhc3Q8Q1NTUGFyc2VyKj4ocGFyc2VyKS0+Y3JlYXRlU3R5bGVS
dWxlKCQxKTsKKyAgICAgICAgQ1NTUGFyc2VyKiBwID0gc3RhdGljX2Nhc3Q8Q1NTUGFyc2VyKj4o
cGFyc2VyKTsKKyAgICAgICAgcC0+bWFya0VuZCgpOworICAgICAgICAkJCA9IHAtPmNyZWF0ZVN0
eWxlUnVsZSgkMSk7CisgICAgICAgIHAtPnJlc2V0TWFya3MoKTsKICAgICB9CiAgIDsKIApAQCAt
OTAxLDcgKzkwNCw3IEBAIHNlbGVjdG9yX2xpc3Q6CiAgICAgICAgICAgICBkZWxldGVBbGxWYWx1
ZXMoKiQkKTsKICAgICAgICAgICAgICQkLT5zaHJpbmsoMCk7CiAgICAgICAgICAgICAkJC0+YXBw
ZW5kKHAtPnNpbmtGbG9hdGluZ1NlbGVjdG9yKCQxKSk7Ci0gICAgICAgICAgICBwLT51cGRhdGVM
YXN0U2VsZWN0b3JMaW5lKCk7CisgICAgICAgICAgICBwLT51cGRhdGVMYXN0U2VsZWN0b3JMaW5l
QW5kUG9zaXRpb24oKTsKICAgICAgICAgfQogICAgIH0KICAgICB8IHNlbGVjdG9yX2xpc3QgJywn
IG1heWJlX3NwYWNlIHNlbGVjdG9yICVwcmVjIFVOSU1QT1JUQU5UX1RPSyB7CkBAIC05MDksNyAr
OTEyLDcgQEAgc2VsZWN0b3JfbGlzdDoKICAgICAgICAgICAgIENTU1BhcnNlciogcCA9IHN0YXRp
Y19jYXN0PENTU1BhcnNlcio+KHBhcnNlcik7CiAgICAgICAgICAgICAkJCA9ICQxOwogICAgICAg
ICAgICAgJCQtPmFwcGVuZChwLT5zaW5rRmxvYXRpbmdTZWxlY3RvcigkNCkpOwotICAgICAgICAg
ICAgcC0+dXBkYXRlTGFzdFNlbGVjdG9yTGluZSgpOworICAgICAgICAgICAgcC0+dXBkYXRlTGFz
dFNlbGVjdG9yTGluZUFuZFBvc2l0aW9uKCk7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAg
JCQgPSAwOwogICAgIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAgYi9X
ZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwCmluZGV4IDE4MjZkNDIuLmU2ZDE1MTEgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAKKysrIGIvV2ViQ29yZS9jc3MvQ1NTUGFyc2Vy
LmNwcApAQCAtMjI1LDEyICsyMjUsMTQgQEAgdm9pZCBDU1NQYXJzZXI6OnNldHVwUGFyc2VyKGNv
bnN0IGNoYXIqIHByZWZpeCwgY29uc3QgU3RyaW5nJiBzdHJpbmcsIGNvbnN0IGNoYXIKICAgICB5
eWxlbmcgPSAwOwogICAgIHl5dGV4dCA9IHl5X2NfYnVmX3AgPSBtX2RhdGE7CiAgICAgeXlfaG9s
ZF9jaGFyID0gKnl5X2NfYnVmX3A7CisgICAgcmVzZXRNYXJrcygpOwogfQogCi12b2lkIENTU1Bh
cnNlcjo6cGFyc2VTaGVldChDU1NTdHlsZVNoZWV0KiBzaGVldCwgY29uc3QgU3RyaW5nJiBzdHJp
bmcpCit2b2lkIENTU1BhcnNlcjo6cGFyc2VTaGVldChDU1NTdHlsZVNoZWV0KiBzaGVldCwgY29u
c3QgU3RyaW5nJiBzdHJpbmcsIFZlY3RvcjxzdGQ6OnBhaXI8dW5zaWduZWQsIHVuc2lnbmVkPiA+
KiBydWxlU3RhcnRFbmRPZmZzZXRzKQogewogICAgIG1fc3R5bGVTaGVldCA9IHNoZWV0OwogICAg
IG1fZGVmYXVsdE5hbWVzcGFjZSA9IHN0YXJBdG9tOyAvLyBSZXNldCB0aGUgZGVmYXVsdCBuYW1l
c3BhY2UuCisgICAgbV9ydWxlU3RhcnRFbmRPZmZzZXRzID0gcnVsZVN0YXJ0RW5kT2Zmc2V0czsK
IAogICAgIHNldHVwUGFyc2VyKCIiLCBzdHJpbmcsICIiKTsKICAgICBjc3N5eXBhcnNlKHRoaXMp
OwpAQCAtNTIzMCw2ICs1MjMyLDggQEAgQ1NTUnVsZSogQ1NTUGFyc2VyOjpjcmVhdGVTdHlsZVJ1
bGUoVmVjdG9yPENTU1NlbGVjdG9yKj4qIHNlbGVjdG9ycykKICAgICBDU1NTdHlsZVJ1bGUqIHJl
c3VsdCA9IDA7CiAgICAgaWYgKHNlbGVjdG9ycykgewogICAgICAgICBSZWZQdHI8Q1NTU3R5bGVS
dWxlPiBydWxlID0gQ1NTU3R5bGVSdWxlOjpjcmVhdGUobV9zdHlsZVNoZWV0LCBtX2xhc3RTZWxl
Y3RvckxpbmUpOworICAgICAgICBpZiAobV9ydWxlU3RhcnRFbmRPZmZzZXRzKQorICAgICAgICAg
ICAgbV9ydWxlU3RhcnRFbmRPZmZzZXRzLT5hcHBlbmQoc3RkOjpwYWlyPHVuc2lnbmVkLCB1bnNp
Z25lZD4obV9zdGFydE9mZnNldCwgbV9lbmRPZmZzZXQpKTsKICAgICAgICAgcnVsZS0+YWRvcHRT
ZWxlY3RvclZlY3Rvcigqc2VsZWN0b3JzKTsKICAgICAgICAgaWYgKG1faGFzRm9udEZhY2VPbmx5
VmFsdWVzKQogICAgICAgICAgICAgZGVsZXRlRm9udEZhY2VPbmx5VmFsdWVzKCk7CkBAIC01NDc4
LDYgKzU0ODIsMjYgQEAgdm9pZCBDU1NQYXJzZXI6OmludmFsaWRCbG9ja0hpdCgpCiAgICAgICAg
IG1fc3R5bGVTaGVldC0+c2V0SGFzU3ludGFjdGljYWxseVZhbGlkQ1NTSGVhZGVyKGZhbHNlKTsK
IH0KIAordm9pZCBDU1NQYXJzZXI6OnVwZGF0ZUxhc3RTZWxlY3RvckxpbmVBbmRQb3NpdGlvbigp
Cit7CisgICAgbV9sYXN0U2VsZWN0b3JMaW5lID0gbV9saW5lOworICAgIG1hcmtTdGFydCgpOwor
fQorCit2b2lkIENTU1BhcnNlcjo6bWFya1N0YXJ0KCkKK3sKKyAgICB1bnNpZ25lZCBvZmZzZXQg
PSB5eXRleHQgLSBtX2RhdGE7CisgICAgaWYgKCFtX3N0YXJ0T2Zmc2V0IHx8IG9mZnNldCA8IG1f
c3RhcnRPZmZzZXQpCisgICAgICAgIG1fc3RhcnRPZmZzZXQgPSBvZmZzZXQ7Cit9CisKK3ZvaWQg
Q1NTUGFyc2VyOjptYXJrRW5kKCkKK3sKKyAgICB1bnNpZ25lZCBvZmZzZXQgPSB5eXRleHQgLSBt
X2RhdGE7CisgICAgaWYgKG9mZnNldCA+IG1fZW5kT2Zmc2V0KQorICAgICAgICBtX2VuZE9mZnNl
dCA9IG9mZnNldDsKK30KKwogc3RhdGljIGludCBjc3NQcm9wZXJ0eUlEKGNvbnN0IFVDaGFyKiBw
cm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGxlbmd0aCkKIHsKICAgICBpZiAoIWxlbmd0aCkKZGlmZiAt
LWdpdCBhL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5oIGIvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmgK
aW5kZXggZDFhNWE0My4uOTMwNTEyMyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9jc3MvQ1NTUGFyc2Vy
LmgKKysrIGIvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmgKQEAgLTU2LDcgKzU2LDcgQEAgbmFtZXNw
YWNlIFdlYkNvcmUgewogICAgICAgICBDU1NQYXJzZXIoYm9vbCBzdHJpY3RQYXJzaW5nID0gdHJ1
ZSk7CiAgICAgICAgIH5DU1NQYXJzZXIoKTsKIAotICAgICAgICB2b2lkIHBhcnNlU2hlZXQoQ1NT
U3R5bGVTaGVldCosIGNvbnN0IFN0cmluZyYpOworICAgICAgICB2b2lkIHBhcnNlU2hlZXQoQ1NT
U3R5bGVTaGVldCosIGNvbnN0IFN0cmluZyYsIFZlY3RvcjxzdGQ6OnBhaXI8dW5zaWduZWQsIHVu
c2lnbmVkPiA+KiBydWxlU3RhcnRFbmRQb3NpdGlvbnMgPSAwKTsKICAgICAgICAgUGFzc1JlZlB0
cjxDU1NSdWxlPiBwYXJzZVJ1bGUoQ1NTU3R5bGVTaGVldCosIGNvbnN0IFN0cmluZyYpOwogICAg
ICAgICBQYXNzUmVmUHRyPENTU1J1bGU+IHBhcnNlS2V5ZnJhbWVSdWxlKENTU1N0eWxlU2hlZXQq
LCBjb25zdCBTdHJpbmcmKTsKICAgICAgICAgYm9vbCBwYXJzZVZhbHVlKENTU011dGFibGVTdHls
ZURlY2xhcmF0aW9uKiwgaW50IHByb3BJZCwgY29uc3QgU3RyaW5nJiwgYm9vbCBpbXBvcnRhbnQp
OwpAQCAtMjA3LDcgKzIwNyw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogICAgICAgICBWZWN0
b3I8Q1NTU2VsZWN0b3IqPiogcmV1c2FibGVTZWxlY3RvclZlY3RvcigpIHsgcmV0dXJuICZtX3Jl
dXNhYmxlU2VsZWN0b3JWZWN0b3I7IH0KIAotICAgICAgICB2b2lkIHVwZGF0ZUxhc3RTZWxlY3Rv
ckxpbmUoKSB7IG1fbGFzdFNlbGVjdG9yTGluZSA9IG1fbGluZTsgfQorICAgICAgICB2b2lkIHVw
ZGF0ZUxhc3RTZWxlY3RvckxpbmVBbmRQb3NpdGlvbigpOwogCiAgICAgICAgIHZvaWQgY2xlYXJQ
cm9wZXJ0aWVzKCk7CiAKQEAgLTIzOCw2ICsyMzgsMTIgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewog
ICAgICAgICBBdG9taWNTdHJpbmcgbV9kZWZhdWx0TmFtZXNwYWNlOwogCiAgICAgICAgIC8vIHRv
a2VuaXplciBtZXRob2RzIGFuZCBkYXRhCisgICAgICAgIHVuc2lnbmVkIG1fc3RhcnRPZmZzZXQ7
CisgICAgICAgIHVuc2lnbmVkIG1fZW5kT2Zmc2V0OworICAgICAgICBWZWN0b3I8c3RkOjpwYWly
PHVuc2lnbmVkLCB1bnNpZ25lZD4gPiogbV9ydWxlU3RhcnRFbmRPZmZzZXRzOworICAgICAgICB2
b2lkIG1hcmtTdGFydCgpOworICAgICAgICB2b2lkIG1hcmtFbmQoKTsKKyAgICAgICAgdm9pZCBy
ZXNldE1hcmtzKCkgeyBtX3N0YXJ0T2Zmc2V0ID0gbV9lbmRPZmZzZXQgPSAwOyB9CiAgICAgICAg
IGludCBsZXgodm9pZCogeXlsdmFsKTsKICAgICAgICAgaW50IHRva2VuKCkgeyByZXR1cm4geXlU
b2s7IH0KICAgICAgICAgVUNoYXIqIHRleHQoaW50KiBsZW5ndGgpOwpkaWZmIC0tZ2l0IGEvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTU3RvcmUuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yQ1NTU3RvcmUuY3BwCmluZGV4IGU1MzY4OGIuLjVkMTUyYTAgMTAwNjQ0Ci0tLSBh
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU1N0b3JlLmNwcAorKysgYi9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JDU1NTdG9yZS5jcHAKQEAgLTI5LDE0ICsyOSwyMyBAQAogI2luY2x1
ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkluc3BlY3RvckNTU1N0b3JlLmgiCiAKKyNpbmNsdWRl
ICJDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbi5oIgorI2luY2x1ZGUgIkNTU1BhcnNlci5oIgog
I2luY2x1ZGUgIkNTU1N0eWxlRGVjbGFyYXRpb24uaCIKICNpbmNsdWRlICJDU1NTdHlsZVJ1bGUu
aCIKICNpbmNsdWRlICJDU1NTdHlsZVNoZWV0LmgiCisjaW5jbHVkZSAiSW5zcGVjdG9yQ29udHJv
bGxlci5oIgorI2luY2x1ZGUgIkluc3BlY3RvclJlc291cmNlLmgiCiAjaW5jbHVkZSAiUGxhdGZv
cm1TdHJpbmcuaCIKKyNpbmNsdWRlICJTY3JpcHRPYmplY3QuaCIKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1JbnNwZWN0b3JDU1NTdG9yZTo6SW5zcGVjdG9yQ1NTU3RvcmUoKQorSW5zcGVjdG9y
Q1NTU3RvcmU6Okluc3BlY3RvckNTU1N0b3JlKEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3Rv
ckNvbnRyb2xsZXIpCisgICAgOiBpbnNwZWN0b3JDb250cm9sbGVyKGluc3BlY3RvckNvbnRyb2xs
ZXIpCisgICAgLCBsYXN0U3R5bGVJZCgxKQorICAgICwgbGFzdFN0eWxlU2hlZXRJZCgxKQorICAg
ICwgbGFzdFJ1bGVJZCgxKQogewogfQogCkBAIC01MCw4ICs1OSw5NCBAQCB2b2lkIEluc3BlY3Rv
ckNTU1N0b3JlOjpyZXNldCgpCiAgICAgaWRUb1N0eWxlLmNsZWFyKCk7CiAgICAgcnVsZVRvSWQu
Y2xlYXIoKTsKICAgICBpZFRvUnVsZS5jbGVhcigpOworICAgIGRlbGV0ZUFsbFZhbHVlcyhzdHls
ZVNoZWV0VG9PZmZzZXRzKTsKKyAgICBzdHlsZVNoZWV0VG9PZmZzZXRzLmNsZWFyKCk7CisgICAg
c3R5bGVTaGVldFRvSWQuY2xlYXIoKTsKKyAgICBpZFRvU3R5bGVTaGVldC5jbGVhcigpOwogICAg
IGlkVG9EaXNhYmxlZFN0eWxlLmNsZWFyKCk7CiAgICAgaW5zcGVjdG9yU3R5bGVTaGVldCA9IDA7
CisKKyAgICBsYXN0U3R5bGVJZCA9IDE7CisgICAgbGFzdFN0eWxlU2hlZXRJZCA9IDE7CisgICAg
bGFzdFJ1bGVJZCA9IDE7Cit9CisKK0JvZHlTdGFydEVuZE9mZnNldHMgSW5zcGVjdG9yQ1NTU3Rv
cmU6OmdldFN0YXJ0RW5kT2Zmc2V0cyhDU1NTdHlsZVJ1bGUqIHJ1bGUpCit7CisgICAgQ1NTU3R5
bGVTaGVldCogcGFyZW50U3R5bGVTaGVldCA9IHJ1bGUtPnBhcmVudFN0eWxlU2hlZXQoKTsKKyAg
ICBpZiAoIXBhcmVudFN0eWxlU2hlZXQpCisgICAgICAgIHJldHVybiBzdGQ6OnBhaXI8dW5zaWdu
ZWQsIHVuc2lnbmVkPigwLCAwKTsKKyAgICBSZWZQdHI8Q1NTUnVsZUxpc3Q+IG9yaWdpbmFsUnVs
ZUxpc3QgPSBwYXJlbnRTdHlsZVNoZWV0LT5jc3NSdWxlcygpOworICAgIHVuc2lnbmVkIHJ1bGVJ
bmRleCA9IDA7CisgICAgdW5zaWduZWQgaSA9IDA7CisgICAgdW5zaWduZWQgb3JpZ2luYWxSdWxl
TGlzdExlbmd0aCA9IG9yaWdpbmFsUnVsZUxpc3QtPmxlbmd0aCgpOworICAgIHdoaWxlIChpIDwg
b3JpZ2luYWxSdWxlTGlzdExlbmd0aCkgeworICAgICAgICBpZiAob3JpZ2luYWxSdWxlTGlzdC0+
aXRlbShpKSA9PSBydWxlKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGlmIChvcmlnaW5h
bFJ1bGVMaXN0LT5pdGVtKGkpLT50eXBlKCkgPT0gQ1NTUnVsZTo6U1RZTEVfUlVMRSkKKyAgICAg
ICAgICAgICsrcnVsZUluZGV4OworICAgICAgICArK2k7CisgICAgfQorICAgIGlmIChpID09IG9y
aWdpbmFsUnVsZUxpc3RMZW5ndGgpCisgICAgICAgIHJldHVybiBzdGQ6OnBhaXI8dW5zaWduZWQs
IHVuc2lnbmVkPigwLCAwKTsKKyAgICBTdHlsZVNoZWV0VG9PZmZzZXRzTWFwOjppdGVyYXRvciBp
dCA9IHN0eWxlU2hlZXRUb09mZnNldHMuZmluZChwYXJlbnRTdHlsZVNoZWV0KTsKKyAgICBWZWN0
b3I8Qm9keVN0YXJ0RW5kT2Zmc2V0cz4qIG9mZnNldFZlY3RvciA9IDA7CisgICAgaWYgKGl0ID09
IHN0eWxlU2hlZXRUb09mZnNldHMuZW5kKCkpIHsKKyAgICAgICAgZm9yIChJbnNwZWN0b3JDb250
cm9sbGVyOjpSZXNvdXJjZXNNYXA6OmNvbnN0X2l0ZXJhdG9yIHJlc0l0ID0gaW5zcGVjdG9yQ29u
dHJvbGxlci0+cmVzb3VyY2VzKCkuYmVnaW4oKTsgcmVzSXQgIT0gaW5zcGVjdG9yQ29udHJvbGxl
ci0+cmVzb3VyY2VzKCkuZW5kKCk7ICsrcmVzSXQpIHsKKyAgICAgICAgICAgIGlmIChyZXNJdC0+
c2Vjb25kLT5yZXF1ZXN0VVJMKCkuc3RyaW5nKCkgPT0gcGFyZW50U3R5bGVTaGVldC0+ZmluYWxV
UkwoKS5zdHJpbmcoKSkgeworICAgICAgICAgICAgICAgIG9mZnNldFZlY3RvciA9IG5ldyBWZWN0
b3I8Qm9keVN0YXJ0RW5kT2Zmc2V0cz47CisgICAgICAgICAgICAgICAgUmVmUHRyPENTU1N0eWxl
U2hlZXQ+IG5ld1N0eWxlU2hlZXQgPSBDU1NTdHlsZVNoZWV0OjpjcmVhdGUoKTsKKyAgICAgICAg
ICAgICAgICBDU1NQYXJzZXIgcDsKKyAgICAgICAgICAgICAgICBwLnBhcnNlU2hlZXQobmV3U3R5
bGVTaGVldC5nZXQoKSwgcmVzSXQtPnNlY29uZC0+c291cmNlU3RyaW5nKCksIG9mZnNldFZlY3Rv
cik7CisgICAgICAgICAgICAgICAgaXQgPSBzdHlsZVNoZWV0VG9PZmZzZXRzLnNldChwYXJlbnRT
dHlsZVNoZWV0LCBvZmZzZXRWZWN0b3IpLmZpcnN0OworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSBlbHNlCisgICAgICAgIG9mZnNldFZlY3Rv
ciA9IGl0LT5zZWNvbmQ7CisgICAgaWYgKCFvZmZzZXRWZWN0b3IpCisgICAgICAgIHJldHVybiBz
dGQ6OnBhaXI8dW5zaWduZWQsIHVuc2lnbmVkPigwLCAwKTsKKyAgICBBU1NFUlQob2Zmc2V0VmVj
dG9yLT5zaXplKCkgPiBydWxlSW5kZXgpOworICAgIHJldHVybiBvZmZzZXRWZWN0b3ItPmF0KHJ1
bGVJbmRleCk7Cit9CisKK0NTU1N0eWxlRGVjbGFyYXRpb24qIEluc3BlY3RvckNTU1N0b3JlOjpz
dHlsZUZvcklkKGxvbmcgc3R5bGVJZCkKK3sKKyAgICBJZFRvU3R5bGVNYXA6Oml0ZXJhdG9yIGl0
ID0gaWRUb1N0eWxlLmZpbmQoc3R5bGVJZCk7CisgICAgcmV0dXJuIGl0ID09IGlkVG9TdHlsZS5l
bmQoKSA/IDAgOiBpdC0+c2Vjb25kLmdldCgpOworfQorCitsb25nIEluc3BlY3RvckNTU1N0b3Jl
OjpiaW5kU3R5bGUoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUpCit7CisgICAgbG9uZyBpZCA9
IHN0eWxlVG9JZC5nZXQoc3R5bGUpOworICAgIGlmICghaWQpIHsKKyAgICAgICAgaWQgPSBsYXN0
U3R5bGVJZCsrOworICAgICAgICBpZFRvU3R5bGUuc2V0KGlkLCBzdHlsZSk7CisgICAgICAgIHN0
eWxlVG9JZC5zZXQoc3R5bGUsIGlkKTsKKyAgICB9CisgICAgcmV0dXJuIGlkOworfQorCitsb25n
IEluc3BlY3RvckNTU1N0b3JlOjpiaW5kU3R5bGVTaGVldChDU1NTdHlsZVNoZWV0KiBzdHlsZVNo
ZWV0KQoreworICAgIGxvbmcgaWQgPSBzdHlsZVNoZWV0VG9JZC5nZXQoc3R5bGVTaGVldCk7Cisg
ICAgaWYgKCFpZCkgeworICAgICAgICBpZCA9IGxhc3RTdHlsZVNoZWV0SWQrKzsKKyAgICAgICAg
aWRUb1N0eWxlU2hlZXQuc2V0KGlkLCBzdHlsZVNoZWV0KTsKKyAgICAgICAgc3R5bGVTaGVldFRv
SWQuc2V0KHN0eWxlU2hlZXQsIGlkKTsKKyAgICB9CisgICAgcmV0dXJuIGlkOworfQorCitsb25n
IEluc3BlY3RvckNTU1N0b3JlOjpiaW5kUnVsZShDU1NTdHlsZVJ1bGUqIHJ1bGUpCit7CisgICAg
bG9uZyBpZCA9IHJ1bGVUb0lkLmdldChydWxlKTsKKyAgICBpZiAoIWlkKSB7CisgICAgICAgIGlk
ID0gbGFzdFJ1bGVJZCsrOworICAgICAgICBpZFRvUnVsZS5zZXQoaWQsIHJ1bGUpOworICAgICAg
ICBydWxlVG9JZC5zZXQocnVsZSwgaWQpOworICAgIH0KKyAgICByZXR1cm4gaWQ7CiB9CiAKIH0g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckNTU1N0b3JlLmggYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NTdG9yZS5oCmlu
ZGV4IGQyOTBmYWQuLmZmOGM3MmYgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckNTU1N0b3JlLmgKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTU3RvcmUu
aApAQCAtMzYsMzAgKzM2LDQ5IEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgSW5z
cGVjdG9yQ29udHJvbGxlcjsKK2NsYXNzIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOwogY2xh
c3MgQ1NTU3R5bGVEZWNsYXJhdGlvbjsKIGNsYXNzIENTU1N0eWxlUnVsZTsKIGNsYXNzIENTU1N0
eWxlU2hlZXQ7CiBjbGFzcyBTdHJpbmc7CiAKIHR5cGVkZWYgc3RkOjpwYWlyPFN0cmluZywgU3Ry
aW5nPiBQcm9wZXJ0eVZhbHVlQW5kUHJpb3JpdHk7Cit0eXBlZGVmIHN0ZDo6cGFpcjx1bnNpZ25l
ZCwgdW5zaWduZWQ+IEJvZHlTdGFydEVuZE9mZnNldHM7CiB0eXBlZGVmIEhhc2hNYXA8U3RyaW5n
LCBQcm9wZXJ0eVZhbHVlQW5kUHJpb3JpdHk+IERpc2FibGVkU3R5bGVEZWNsYXJhdGlvbjsKIHR5
cGVkZWYgSGFzaE1hcDxDU1NTdHlsZURlY2xhcmF0aW9uKiwgbG9uZz4gU3R5bGVUb0lkTWFwOwog
dHlwZWRlZiBIYXNoTWFwPGxvbmcsIFJlZlB0cjxDU1NTdHlsZURlY2xhcmF0aW9uPiA+IElkVG9T
dHlsZU1hcDsKIHR5cGVkZWYgSGFzaE1hcDxDU1NTdHlsZVJ1bGUqLCBsb25nPiBSdWxlVG9JZE1h
cDsKIHR5cGVkZWYgSGFzaE1hcDxsb25nLCBSZWZQdHI8Q1NTU3R5bGVSdWxlPiA+IElkVG9SdWxl
TWFwOwordHlwZWRlZiBIYXNoTWFwPENTU1N0eWxlU2hlZXQqLCBWZWN0b3I8Qm9keVN0YXJ0RW5k
T2Zmc2V0cz4qID4gU3R5bGVTaGVldFRvT2Zmc2V0c01hcDsKK3R5cGVkZWYgSGFzaE1hcDxDU1NT
dHlsZVNoZWV0KiwgbG9uZz4gU3R5bGVTaGVldFRvSWRNYXA7Cit0eXBlZGVmIEhhc2hNYXA8bG9u
ZywgUmVmUHRyPENTU1N0eWxlU2hlZXQ+ID4gSWRUb1N0eWxlU2hlZXRNYXA7CiB0eXBlZGVmIEhh
c2hNYXA8bG9uZywgRGlzYWJsZWRTdHlsZURlY2xhcmF0aW9uPiBJZFRvRGlzYWJsZWRTdHlsZU1h
cDsKIAogc3RydWN0IEluc3BlY3RvckNTU1N0b3JlIHsKLSAgICBJbnNwZWN0b3JDU1NTdG9yZSgp
OworICAgIEluc3BlY3RvckNTU1N0b3JlKEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckNv
bnRyb2xsZXIpOwogICAgIH5JbnNwZWN0b3JDU1NTdG9yZSgpOwogICAgIHZvaWQgcmVzZXQoKTsK
KyAgICBCb2R5U3RhcnRFbmRPZmZzZXRzIGdldFN0YXJ0RW5kT2Zmc2V0cyhDU1NTdHlsZVJ1bGUq
IHJ1bGUpOworICAgIENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlRm9ySWQobG9uZyBzdHlsZUlk
KTsKKyAgICBsb25nIGJpbmRSdWxlKENTU1N0eWxlUnVsZSogcnVsZSk7CisgICAgbG9uZyBiaW5k
U3R5bGUoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUpOworICAgIGxvbmcgYmluZFN0eWxlU2hl
ZXQoQ1NTU3R5bGVTaGVldCogc3R5bGVTaGVldCk7CiAKICAgICBTdHlsZVRvSWRNYXAgc3R5bGVU
b0lkOwogICAgIElkVG9TdHlsZU1hcCBpZFRvU3R5bGU7CiAgICAgUnVsZVRvSWRNYXAgcnVsZVRv
SWQ7CiAgICAgSWRUb1J1bGVNYXAgaWRUb1J1bGU7CisgICAgU3R5bGVTaGVldFRvT2Zmc2V0c01h
cCBzdHlsZVNoZWV0VG9PZmZzZXRzOworICAgIFN0eWxlU2hlZXRUb0lkTWFwIHN0eWxlU2hlZXRU
b0lkOworICAgIElkVG9TdHlsZVNoZWV0TWFwIGlkVG9TdHlsZVNoZWV0OwogICAgIElkVG9EaXNh
YmxlZFN0eWxlTWFwIGlkVG9EaXNhYmxlZFN0eWxlOwogICAgIFJlZlB0cjxDU1NTdHlsZVNoZWV0
PiBpbnNwZWN0b3JTdHlsZVNoZWV0OworCisgICAgSW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVj
dG9yQ29udHJvbGxlcjsKKyAgICBsb25nIGxhc3RTdHlsZUlkOworICAgIGxvbmcgbGFzdFN0eWxl
U2hlZXRJZDsKKyAgICBsb25nIGxhc3RSdWxlSWQ7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNw
cCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCmluZGV4IDNiMzZh
NGEuLjlmOThhYjIgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRy
b2xsZXIuY3BwCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3Bw
CkBAIC0xNDUsNyArMTQ1LDcgQEAgSW5zcGVjdG9yQ29udHJvbGxlcjo6SW5zcGVjdG9yQ29udHJv
bGxlcihQYWdlKiBwYWdlLCBJbnNwZWN0b3JDbGllbnQqIGNsaWVudCkKICAgICA6IG1faW5zcGVj
dGVkUGFnZShwYWdlKQogICAgICwgbV9jbGllbnQoY2xpZW50KQogICAgICwgbV9vcGVuaW5nRnJv
bnRlbmQoZmFsc2UpCi0gICAgLCBtX2Nzc1N0b3JlKG5ldyBJbnNwZWN0b3JDU1NTdG9yZSgpKQor
ICAgICwgbV9jc3NTdG9yZShuZXcgSW5zcGVjdG9yQ1NTU3RvcmUodGhpcykpCiAgICAgLCBtX2V4
cGlyZWRDb25zb2xlTWVzc2FnZUNvdW50KDApCiAgICAgLCBtX3Nob3dBZnRlclZpc2libGUoQ3Vy
cmVudFBhbmVsKQogICAgICwgbV9ncm91cExldmVsKDApCmRpZmYgLS1naXQgYS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JET01BZ2VudC5jcHAKaW5kZXggMDgzM2UxNS4uOTMyZDk0MSAxMDA2NDQKLS0tIGEvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckRPTUFnZW50LmNwcApAQCAtNzgsOCArNzgsNiBAQCBJbnNwZWN0b3JET01BZ2Vu
dDo6SW5zcGVjdG9yRE9NQWdlbnQoSW5zcGVjdG9yQ1NTU3RvcmUqIGNzc1N0b3JlLCBJbnNwZWN0
b3JGcm9udAogICAgICwgbV9jc3NTdG9yZShjc3NTdG9yZSkKICAgICAsIG1fZnJvbnRlbmQoZnJv
bnRlbmQpCiAgICAgLCBtX2xhc3ROb2RlSWQoMSkKLSAgICAsIG1fbGFzdFN0eWxlSWQoMSkKLSAg
ICAsIG1fbGFzdFJ1bGVJZCgxKQogewogfQogCkBAIC05MDAsOCArODk4LDggQEAgU2NyaXB0QXJy
YXkgSW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aWxkQXJyYXlGb3JQc2V1ZG9FbGVtZW50cyhFbGVtZW50
KiBlbGVtZW50LCBib28KIAogdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6YXBwbHlTdHlsZVRleHQo
bG9uZyBjYWxsSWQsIGxvbmcgc3R5bGVJZCwgY29uc3QgU3RyaW5nJiBzdHlsZVRleHQsIGNvbnN0
IFN0cmluZyYgcHJvcGVydHlOYW1lKQogewotICAgIElkVG9TdHlsZU1hcDo6aXRlcmF0b3IgaXQg
PSBjc3NTdG9yZSgpLT5pZFRvU3R5bGUuZmluZChzdHlsZUlkKTsKLSAgICBpZiAoaXQgPT0gY3Nz
U3RvcmUoKS0+aWRUb1N0eWxlLmVuZCgpKSB7CisgICAgQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5
bGUgPSBjc3NTdG9yZSgpLT5zdHlsZUZvcklkKHN0eWxlSWQpOworICAgIGlmICghc3R5bGUpIHsK
ICAgICAgICAgbV9mcm9udGVuZC0+ZGlkQXBwbHlTdHlsZVRleHQoY2FsbElkLCBmYWxzZSwgU2Ny
aXB0VmFsdWU6OnVuZGVmaW5lZCgpLCBtX2Zyb250ZW5kLT5uZXdTY3JpcHRBcnJheSgpKTsKICAg
ICAgICAgcmV0dXJuOwogICAgIH0KQEAgLTkxMSw3ICs5MDksNiBAQCB2b2lkIEluc3BlY3RvckRP
TUFnZW50OjphcHBseVN0eWxlVGV4dChsb25nIGNhbGxJZCwgbG9uZyBzdHlsZUlkLCBjb25zdCBT
dHJpbmcmCiAgICAgaWYgKGRpc2FibGVkSXQgIT0gY3NzU3RvcmUoKS0+aWRUb0Rpc2FibGVkU3R5
bGUuZW5kKCkpCiAgICAgICAgIGRpc2FibGVkSXQtPnNlY29uZC5yZW1vdmUocHJvcGVydHlOYW1l
KTsKIAotICAgIENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlID0gaXQtPnNlY29uZC5nZXQoKTsK
ICAgICBpbnQgc3R5bGVUZXh0TGVuZ3RoID0gc3R5bGVUZXh0Lmxlbmd0aCgpOwogCiAgICAgUmVm
UHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiB0ZW1wTXV0YWJsZVN0eWxlID0gQ1NTTXV0
YWJsZVN0eWxlRGVjbGFyYXRpb246OmNyZWF0ZSgpOwpAQCAtOTg4LDEyICs5ODUsMTEgQEAgdm9p
ZCBJbnNwZWN0b3JET01BZ2VudDo6YXBwbHlTdHlsZVRleHQobG9uZyBjYWxsSWQsIGxvbmcgc3R5
bGVJZCwgY29uc3QgU3RyaW5nJgogCiB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpzZXRTdHlsZVRl
eHQobG9uZyBjYWxsSWQsIGxvbmcgc3R5bGVJZCwgY29uc3QgU3RyaW5nJiBjc3NUZXh0KQogewot
ICAgIElkVG9TdHlsZU1hcDo6aXRlcmF0b3IgaXQgPSBjc3NTdG9yZSgpLT5pZFRvU3R5bGUuZmlu
ZChzdHlsZUlkKTsKLSAgICBpZiAoaXQgPT0gY3NzU3RvcmUoKS0+aWRUb1N0eWxlLmVuZCgpKSB7
CisgICAgQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUgPSBjc3NTdG9yZSgpLT5zdHlsZUZvcklk
KHN0eWxlSWQpOworICAgIGlmICghc3R5bGUpIHsKICAgICAgICAgbV9mcm9udGVuZC0+ZGlkU2V0
U3R5bGVUZXh0KGNhbGxJZCwgZmFsc2UpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIENT
U1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlID0gaXQtPnNlY29uZC5nZXQoKTsKICAgICBFeGNlcHRp
b25Db2RlIGVjID0gMDsKICAgICBzdHlsZS0+c2V0Q3NzVGV4dChjc3NUZXh0LCBlYyk7CiAgICAg
bV9mcm9udGVuZC0+ZGlkU2V0U3R5bGVUZXh0KGNhbGxJZCwgIWVjKTsKQEAgLTEwMDEsMTMgKzk5
NywxMiBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50OjpzZXRTdHlsZVRleHQobG9uZyBjYWxsSWQs
IGxvbmcgc3R5bGVJZCwgY29uc3QgU3RyaW5nJiBjcwogCiB2b2lkIEluc3BlY3RvckRPTUFnZW50
OjpzZXRTdHlsZVByb3BlcnR5KGxvbmcgY2FsbElkLCBsb25nIHN0eWxlSWQsIGNvbnN0IFN0cmlu
ZyYgbmFtZSwgY29uc3QgU3RyaW5nJiB2YWx1ZSkKIHsKLSAgICBJZFRvU3R5bGVNYXA6Oml0ZXJh
dG9yIGl0ID0gY3NzU3RvcmUoKS0+aWRUb1N0eWxlLmZpbmQoc3R5bGVJZCk7Ci0gICAgaWYgKGl0
ID09IGNzc1N0b3JlKCktPmlkVG9TdHlsZS5lbmQoKSkgeworICAgIENTU1N0eWxlRGVjbGFyYXRp
b24qIHN0eWxlID0gY3NzU3RvcmUoKS0+c3R5bGVGb3JJZChzdHlsZUlkKTsKKyAgICBpZiAoIXN0
eWxlKSB7CiAgICAgICAgIG1fZnJvbnRlbmQtPmRpZFNldFN0eWxlUHJvcGVydHkoY2FsbElkLCBm
YWxzZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBDU1NTdHlsZURlY2xhcmF0aW9u
KiBzdHlsZSA9IGl0LT5zZWNvbmQuZ2V0KCk7CiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CiAg
ICAgc3R5bGUtPnNldFByb3BlcnR5KG5hbWUsIHZhbHVlLCBlYyk7CiAgICAgbV9mcm9udGVuZC0+
ZGlkU2V0U3R5bGVQcm9wZXJ0eShjYWxsSWQsICFlYyk7CkBAIC0xMDE1LDEyICsxMDEwLDExIEBA
IHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnNldFN0eWxlUHJvcGVydHkobG9uZyBjYWxsSWQsIGxv
bmcgc3R5bGVJZCwgY29uc3QgU3RyaW5nCiAKIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnRvZ2ds
ZVN0eWxlRW5hYmxlZChsb25nIGNhbGxJZCwgbG9uZyBzdHlsZUlkLCBjb25zdCBTdHJpbmcmIHBy
b3BlcnR5TmFtZSwgYm9vbCBkaXNhYmxlZCkKIHsKLSAgICBJZFRvU3R5bGVNYXA6Oml0ZXJhdG9y
IGl0ID0gY3NzU3RvcmUoKS0+aWRUb1N0eWxlLmZpbmQoc3R5bGVJZCk7Ci0gICAgaWYgKGl0ID09
IGNzc1N0b3JlKCktPmlkVG9TdHlsZS5lbmQoKSkgeworICAgIENTU1N0eWxlRGVjbGFyYXRpb24q
IHN0eWxlID0gY3NzU3RvcmUoKS0+c3R5bGVGb3JJZChzdHlsZUlkKTsKKyAgICBpZiAoIXN0eWxl
KSB7CiAgICAgICAgIG1fZnJvbnRlbmQtPmRpZFRvZ2dsZVN0eWxlRW5hYmxlZChjYWxsSWQsIFNj
cmlwdFZhbHVlOjp1bmRlZmluZWQoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgQ1NT
U3R5bGVEZWNsYXJhdGlvbiogc3R5bGUgPSBpdC0+c2Vjb25kLmdldCgpOwogCiAgICAgSWRUb0Rp
c2FibGVkU3R5bGVNYXA6Oml0ZXJhdG9yIGRpc2FibGVkSXQgPSBjc3NTdG9yZSgpLT5pZFRvRGlz
YWJsZWRTdHlsZS5maW5kKHN0eWxlSWQpOwogICAgIGlmIChkaXNhYmxlZEl0ID09IGNzc1N0b3Jl
KCktPmlkVG9EaXNhYmxlZFN0eWxlLmVuZCgpKQpAQCAtMTEyMCwzMyArMTExNCwxMSBAQCB2b2lk
IEluc3BlY3RvckRPTUFnZW50OjphZGRSdWxlKGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcmIHNl
bGVjdG9yLCBsb25nIHNlbGVjdAogICAgIG1fZnJvbnRlbmQtPmRpZEFkZFJ1bGUoY2FsbElkLCBi
dWlsZE9iamVjdEZvclJ1bGUobmV3UnVsZSksIHJ1bGVBZmZlY3RzTm9kZShuZXdSdWxlLCBub2Rl
KSk7CiB9CiAKLWxvbmcgSW5zcGVjdG9yRE9NQWdlbnQ6OmJpbmRTdHlsZShDU1NTdHlsZURlY2xh
cmF0aW9uKiBzdHlsZSkKLXsKLSAgICBsb25nIGlkID0gY3NzU3RvcmUoKS0+c3R5bGVUb0lkLmdl
dChzdHlsZSk7Ci0gICAgaWYgKCFpZCkgewotICAgICAgICBpZCA9IG1fbGFzdFN0eWxlSWQrKzsK
LSAgICAgICAgY3NzU3RvcmUoKS0+aWRUb1N0eWxlLnNldChpZCwgc3R5bGUpOwotICAgICAgICBj
c3NTdG9yZSgpLT5zdHlsZVRvSWQuc2V0KHN0eWxlLCBpZCk7Ci0gICAgfQotICAgIHJldHVybiBp
ZDsKLX0KLQotbG9uZyBJbnNwZWN0b3JET01BZ2VudDo6YmluZFJ1bGUoQ1NTU3R5bGVSdWxlKiBy
dWxlKQotewotICAgIGxvbmcgaWQgPSBjc3NTdG9yZSgpLT5ydWxlVG9JZC5nZXQocnVsZSk7Ci0g
ICAgaWYgKCFpZCkgewotICAgICAgICBpZCA9IG1fbGFzdFJ1bGVJZCsrOwotICAgICAgICBjc3NT
dG9yZSgpLT5pZFRvUnVsZS5zZXQoaWQsIHJ1bGUpOwotICAgICAgICBjc3NTdG9yZSgpLT5ydWxl
VG9JZC5zZXQocnVsZSwgaWQpOwotICAgIH0KLSAgICByZXR1cm4gaWQ7Ci19Ci0KIFNjcmlwdE9i
amVjdCBJbnNwZWN0b3JET01BZ2VudDo6YnVpbGRPYmplY3RGb3JTdHlsZShDU1NTdHlsZURlY2xh
cmF0aW9uKiBzdHlsZSwgYm9vbCBiaW5kKQogewogICAgIFNjcmlwdE9iamVjdCByZXN1bHQgPSBt
X2Zyb250ZW5kLT5uZXdTY3JpcHRPYmplY3QoKTsKICAgICBpZiAoYmluZCkgewotICAgICAgICBs
b25nIHN0eWxlSWQgPSBiaW5kU3R5bGUoc3R5bGUpOworICAgICAgICBsb25nIHN0eWxlSWQgPSBj
c3NTdG9yZSgpLT5iaW5kU3R5bGUoc3R5bGUpOwogICAgICAgICByZXN1bHQuc2V0KCJpZCIsIHN0
eWxlSWQpOwogCiAgICAgICAgIElkVG9EaXNhYmxlZFN0eWxlTWFwOjppdGVyYXRvciBkaXNhYmxl
ZEl0ID0gY3NzU3RvcmUoKS0+aWRUb0Rpc2FibGVkU3R5bGUuZmluZChzdHlsZUlkKTsKQEAgLTEx
NTUsNiArMTEyNywxNyBAQCBTY3JpcHRPYmplY3QgSW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aWxkT2Jq
ZWN0Rm9yU3R5bGUoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUsCiAgICAgfQogICAgIHJlc3Vs
dC5zZXQoIndpZHRoIiwgc3R5bGUtPmdldFByb3BlcnR5VmFsdWUoIndpZHRoIikpOwogICAgIHJl
c3VsdC5zZXQoImhlaWdodCIsIHN0eWxlLT5nZXRQcm9wZXJ0eVZhbHVlKCJoZWlnaHQiKSk7Cisg
ICAgaWYgKGJpbmQpIHsKKyAgICAgICAgQ1NTUnVsZSogcGFyZW50UnVsZSA9IHN0eWxlLT5wYXJl
bnRSdWxlKCk7CisgICAgICAgIGlmIChwYXJlbnRSdWxlICYmIHBhcmVudFJ1bGUtPnR5cGUoKSA9
PSBDU1NSdWxlOjpTVFlMRV9SVUxFKSB7CisgICAgICAgICAgICBDU1NTdHlsZVJ1bGUqIHBhcmVu
dFN0eWxlUnVsZSA9IHN0YXRpY19jYXN0PENTU1N0eWxlUnVsZSo+KHBhcmVudFJ1bGUpOworICAg
ICAgICAgICAgc3RkOjpwYWlyPHVuc2lnbmVkLCB1bnNpZ25lZD4gc3RhcnRFbmQgPSBjc3NTdG9y
ZSgpLT5nZXRTdGFydEVuZE9mZnNldHMocGFyZW50U3R5bGVSdWxlKTsKKyAgICAgICAgICAgIGlm
IChzdGFydEVuZC5zZWNvbmQpIHsKKyAgICAgICAgICAgICAgICByZXN1bHQuc2V0KCJib2R5U3Rh
cnRPZmZzZXQiLCBzdGFydEVuZC5maXJzdCk7CisgICAgICAgICAgICAgICAgcmVzdWx0LnNldCgi
Ym9keUVuZE9mZnNldCIsIHN0YXJ0RW5kLnNlY29uZCk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9CiAgICAgcG9wdWxhdGVPYmplY3RXaXRoU3R5bGVQcm9wZXJ0aWVzKHN0eWxlLCBy
ZXN1bHQpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CkBAIC0xMjI3LDYgKzEyMTAsMTEgQEAgU2Ny
aXB0T2JqZWN0IEluc3BlY3RvckRPTUFnZW50OjpidWlsZE9iamVjdEZvclJ1bGUoQ1NTU3R5bGVS
dWxlKiBydWxlKQogICAgIHJlc3VsdC5zZXQoInNlbGVjdG9yVGV4dCIsIHJ1bGUtPnNlbGVjdG9y
VGV4dCgpKTsKICAgICByZXN1bHQuc2V0KCJjc3NUZXh0IiwgcnVsZS0+Y3NzVGV4dCgpKTsKICAg
ICByZXN1bHQuc2V0KCJzb3VyY2VMaW5lIiwgcnVsZS0+c291cmNlTGluZSgpKTsKKyAgICBzdGQ6
OnBhaXI8dW5zaWduZWQsIHVuc2lnbmVkPiBzdGFydEVuZCA9IGNzc1N0b3JlKCktPmdldFN0YXJ0
RW5kT2Zmc2V0cyhydWxlKTsKKyAgICBpZiAoc3RhcnRFbmQuc2Vjb25kKSB7CisgICAgICAgIHJl
c3VsdC5zZXQoImJvZHlTdGFydE9mZnNldCIsIHN0YXJ0RW5kLmZpcnN0KTsKKyAgICAgICAgcmVz
dWx0LnNldCgiYm9keUVuZE9mZnNldCIsIHN0YXJ0RW5kLnNlY29uZCk7CisgICAgfQogICAgIGlm
IChwYXJlbnRTdHlsZVNoZWV0KSB7CiAgICAgICAgIFNjcmlwdE9iamVjdCBwYXJlbnRTdHlsZVNo
ZWV0VmFsdWUgPSBtX2Zyb250ZW5kLT5uZXdTY3JpcHRPYmplY3QoKTsKICAgICAgICAgcmVzdWx0
LnNldCgicGFyZW50U3R5bGVTaGVldCIsIHBhcmVudFN0eWxlU2hlZXRWYWx1ZSk7CkBAIC0xMjQz
LDcgKzEyMzEsNyBAQCBTY3JpcHRPYmplY3QgSW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aWxkT2JqZWN0
Rm9yUnVsZShDU1NTdHlsZVJ1bGUqIHJ1bGUpCiAgICAgcmVzdWx0LnNldCgic3R5bGUiLCBidWls
ZE9iamVjdEZvclN0eWxlKHJ1bGUtPnN0eWxlKCksIGJpbmQpKTsKIAogICAgIGlmIChiaW5kKQot
ICAgICAgICByZXN1bHQuc2V0KCJpZCIsIGJpbmRSdWxlKHJ1bGUpKTsKKyAgICAgICAgcmVzdWx0
LnNldCgiaWQiLCBjc3NTdG9yZSgpLT5iaW5kUnVsZShydWxlKSk7CiAgICAgcmV0dXJuIHJlc3Vs
dDsKIH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQu
aCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmgKaW5kZXggYzhhNGUxYS4u
N2VjOGNmNSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQu
aAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5oCkBAIC0xNjIsOCAr
MTYyLDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBTdHJpbmcgZG9jdW1lbnRVUkxT
dHJpbmcoRG9jdW1lbnQqIGRvY3VtZW50KSBjb25zdDsKICAgICAgICAgSW5zcGVjdG9yQ1NTU3Rv
cmUqIGNzc1N0b3JlKCkgeyByZXR1cm4gbV9jc3NTdG9yZTsgfQogCi0gICAgICAgIGxvbmcgYmlu
ZFN0eWxlKENTU1N0eWxlRGVjbGFyYXRpb24qKTsKLSAgICAgICAgbG9uZyBiaW5kUnVsZShDU1NT
dHlsZVJ1bGUqKTsKICAgICAgICAgU2NyaXB0T2JqZWN0IGJ1aWxkT2JqZWN0Rm9yU3R5bGUoQ1NT
U3R5bGVEZWNsYXJhdGlvbiosIGJvb2wgYmluZCk7CiAgICAgICAgIHZvaWQgcG9wdWxhdGVPYmpl
Y3RXaXRoU3R5bGVQcm9wZXJ0aWVzKENTU1N0eWxlRGVjbGFyYXRpb24qLCBTY3JpcHRPYmplY3Qm
IHJlc3VsdCk7CiAgICAgICAgIFNjcmlwdEFycmF5IGJ1aWxkQXJyYXlGb3JEaXNhYmxlZFN0eWxl
UHJvcGVydGllcyhEaXNhYmxlZFN0eWxlRGVjbGFyYXRpb24mKTsKQEAgLTE4Niw4ICsxODQsNiBA
QCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIEhhc2hNYXA8bG9uZywgTm9kZVRvSWRNYXAq
PiBtX2lkVG9Ob2Rlc01hcDsKICAgICAgICAgSGFzaFNldDxsb25nPiBtX2NoaWxkcmVuUmVxdWVz
dGVkOwogICAgICAgICBsb25nIG1fbGFzdE5vZGVJZDsKLSAgICAgICAgbG9uZyBtX2xhc3RTdHls
ZUlkOwotICAgICAgICBsb25nIG1fbGFzdFJ1bGVJZDsKICAgICAgICAgTGlzdEhhc2hTZXQ8UmVm
UHRyPERvY3VtZW50PiA+IG1fZG9jdW1lbnRzOwogICAgIH07CiAKZGlmZiAtLWdpdCBhL1dlYkNv
cmUvaW5zcGVjdG9yL2Zyb250LWVuZC9ET01BZ2VudC5qcyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9ET01BZ2VudC5qcwppbmRleCAzMzczYzA0Li4wY2Q5ZmU3IDEwMDY0NAotLS0gYS9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRE9NQWdlbnQuanMKKysrIGIvV2ViQ29yZS9pbnNw
ZWN0b3IvZnJvbnQtZW5kL0RPTUFnZW50LmpzCkBAIC00OTEsNiArNDkxLDggQEAgV2ViSW5zcGVj
dG9yLkNTU1N0eWxlRGVjbGFyYXRpb24gPSBmdW5jdGlvbihwYXlsb2FkKQogICAgIHRoaXMuaWQg
PSBwYXlsb2FkLmlkOwogICAgIHRoaXMud2lkdGggPSBwYXlsb2FkLndpZHRoOwogICAgIHRoaXMu
aGVpZ2h0ID0gcGF5bG9hZC5oZWlnaHQ7CisgICAgdGhpcy5ib2R5U3RhcnRPZmZzZXQgPSBwYXls
b2FkLmJvZHlTdGFydE9mZnNldDsKKyAgICB0aGlzLmJvZHlFbmRPZmZzZXQgPSBwYXlsb2FkLmJv
ZHlFbmRPZmZzZXQ7CiAgICAgdGhpcy5fX2Rpc2FibGVkUHJvcGVydGllcyA9IHt9OwogICAgIHRo
aXMuX19kaXNhYmxlZFByb3BlcnR5VmFsdWVzID0ge307CiAgICAgdGhpcy5fX2Rpc2FibGVkUHJv
cGVydHlQcmlvcml0aWVzID0ge307Cg==
</data>
<flag name="review"
          id="41055"
          type_id="1"
          status="+"
          setter="hyatt"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>57009</attachid>
            <date>2010-05-25 05:01:49 -0700</date>
            <delta_ts>2010-05-25 11:04:54 -0700</delta_ts>
            <desc>[PATCH] InspectorCSSStore: struct -&gt; class</desc>
            <filename>ruleoffsets_new.patch</filename>
            <type>text/plain</type>
            <size>35576</size>
            <attacher name="Alexander Pavlov (apavlov)">apavlov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBlZWEyYWI1Li5mNGE2YjVkIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTAtMDUt
MjUgIEFsZXhhbmRlciBQYXZsb3YgIDxhcGF2bG92QGNocm9taXVtLm9yZz4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBFeHBvc2UgQ1NTIHJ1bGUgYm9k
eSBzdGFydC9lbmQgb2Zmc2V0cyBpbiB0aGUgcGFyZW50IHN0eWxlc2hlZXQKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM4OTA2CisKKyAgICAgICAgKiBp
bnNwZWN0b3IvcmVzb3VyY2VzL3N0eWxlcy1zb3VyY2Utb2Zmc2V0cy5jc3M6IEFkZGVkLgorICAg
ICAgICAoYm9keSk6CisgICAgICAgICgvKiBjb21tZW50IGJlZm9yZSBzZWxlY3RvciAqL2JvZHku
bWFpbjEvKiBjb21tZW50IGFmdGVyIHNlbGVjdG9yICovKToKKyAgICAgICAgKGJvZHkubWFpbjIp
OgorICAgICAgICAqIGluc3BlY3Rvci9zdHlsZXMtc291cmNlLW9mZnNldHMtZXhwZWN0ZWQudHh0
OiBBZGRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc3R5bGVzLXNvdXJjZS1vZmZzZXRzLmh0bWw6
IEFkZGVkLgorCiAyMDEwLTA1LTI1ICBUb255IENoYW5nICA8dG9ueUBjaHJvbWl1bS5vcmc+CiAK
ICAgICAgICAgTm90IHJldmlld2VkLCBmaXhpbmcgdGhlIGV4cGVjdGVkIHJlc3VsdC4KZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9yZXNvdXJjZXMvc3R5bGVzLXNvdXJjZS1vZmZz
ZXRzLmNzcyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9yZXNvdXJjZXMvc3R5bGVzLXNvdXJjZS1v
ZmZzZXRzLmNzcwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lZjY5ZWU2Ci0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3Jlc291cmNlcy9zdHlsZXMt
c291cmNlLW9mZnNldHMuY3NzCkBAIC0wLDAgKzEsNyBAQAorYm9keSB7CisgICAgZm9udC1zaXpl
OiAxMnB4OworfQorCisvKiBjb21tZW50IGJlZm9yZSBzZWxlY3RvciAqL2JvZHkubWFpbjEvKiBj
b21tZW50IGFmdGVyIHNlbGVjdG9yICovey8qIGNvbW1lbnQgKi9jb2xvcjogIzAwMDt9LyogY29t
bWVudCAqLworCitib2R5Lm1haW4ye2JhY2tncm91bmQ6IGdyZWVuO30KZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL2luc3BlY3Rvci9zdHlsZXMtc291cmNlLW9mZnNldHMtZXhwZWN0ZWQudHh0IGIv
TGF5b3V0VGVzdHMvaW5zcGVjdG9yL3N0eWxlcy1zb3VyY2Utb2Zmc2V0cy1leHBlY3RlZC50eHQK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjUwMzVkZAotLS0gL2Rldi9udWxs
CisrKyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9zdHlsZXMtc291cmNlLW9mZnNldHMtZXhwZWN0
ZWQudHh0CkBAIC0wLDAgKzEsNiBAQAorVGVzdHMgdGhhdCBwcm9wZXIgc3RhcnQvZW5kIG9mZnNl
dCBwb3NpdGlvbnMgYXJlIHJlcG9ydGVkIGZvciBDU1MgcnVsZSBib2RpZXMuCisKK2JvZHk6IFs1
LTI4XQorYm9keS5tYWluMTogWzk4LTEyNF0KK2JvZHkubWFpbjI6IFsxNTAtMTY5XQorCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3Ivc3R5bGVzLXNvdXJjZS1vZmZzZXRzLmh0bWwg
Yi9MYXlvdXRUZXN0cy9pbnNwZWN0b3Ivc3R5bGVzLXNvdXJjZS1vZmZzZXRzLmh0bWwKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQ4YjhjNQotLS0gL2Rldi9udWxsCisrKyBi
L0xheW91dFRlc3RzL2luc3BlY3Rvci9zdHlsZXMtc291cmNlLW9mZnNldHMuaHRtbApAQCAtMCww
ICsxLDU1IEBACis8aHRtbD4KKzxoZWFkPgorCis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9
InJlc291cmNlcy9zdHlsZXMtc291cmNlLW9mZnNldHMuY3NzIiAtLT4KKworPHNjcmlwdCBzcmM9
Ii4uL2h0dHAvdGVzdHMvaW5zcGVjdG9yL2luc3BlY3Rvci10ZXN0LmpzIj48L3NjcmlwdD4KKzxz
Y3JpcHQgc3JjPSJlbGVtZW50cy10ZXN0cy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorCitmdW5j
dGlvbiBkb2l0KCkKK3sKKyAgICBmdW5jdGlvbiBjYWxsYmFjayhzdHlsZXMpCisgICAgeworICAg
ICAgICBpZiAoc3R5bGVzID09PSAicmVmcmVzaGluZyIpCisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIHZhciBtYXRjaGVkQ1NTUnVsZXMgPSBzdHlsZXMubWF0Y2hlZENTU1J1bGVzOworICAg
ICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1hdGNoZWRDU1NSdWxlcy5sZW5ndGg7ICsraSkKKyAg
ICAgICAgICAgIG91dHB1dChtYXRjaGVkQ1NTUnVsZXNbaV0uc2VsZWN0b3JUZXh0ICsgIjogWyIg
KyBtYXRjaGVkQ1NTUnVsZXNbaV0uYm9keVN0YXJ0T2Zmc2V0ICsgIi0iICsgbWF0Y2hlZENTU1J1
bGVzW2ldLmJvZHlFbmRPZmZzZXQgKyAiXSIpOworCisgICAgICAgIG5vdGlmeURvbmUoKTsKKyAg
ICB9CisgICAgZXZhbHVhdGVJbldlYkluc3BlY3RvcigiZnJvbnRlbmRfZHVtcEJvZHlPZmZzZXRz
IiwgY2FsbGJhY2spOworfQorCisKKy8vIEZyb250ZW5kIGZ1bmN0aW9ucy4KKworZnVuY3Rpb24g
ZnJvbnRlbmRfZHVtcEJvZHlPZmZzZXRzKHRlc3RDb250cm9sbGVyKQoreworICAgIGlmICghV2Vi
SW5zcGVjdG9yLnBhbmVscy5yZXNvdXJjZXMucmVzb3VyY2VUcmFja2luZ0VuYWJsZWQpIHsKKyAg
ICAgICAgSW5zcGVjdG9yQmFja2VuZC5lbmFibGVSZXNvdXJjZVRyYWNraW5nKGZhbHNlKTsKKyAg
ICAgICAgcmV0dXJuICJyZWZyZXNoaW5nIjsKKyAgICB9CisKKyAgICB0ZXN0Q29udHJvbGxlci53
YWl0VW50aWxEb25lKCk7CisgICAgZnJvbnRlbmRfZXhwYW5kRE9NU3VidHJlZShXZWJJbnNwZWN0
b3IuZG9tQWdlbnQuZG9jdW1lbnQpOworICAgIHRlc3RDb250cm9sbGVyLnJ1bkFmdGVyUGVuZGlu
Z0Rpc3BhdGNoZXMoZnVuY3Rpb24oKSB7CisgICAgICAgIGZ1bmN0aW9uIGNhbGxiYWNrKHN0eWxl
cykKKyAgICAgICAgeworICAgICAgICAgICAgdGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZShzdHls
ZXMpOworICAgICAgICB9CisgICAgICAgIEluc3BlY3RvckJhY2tlbmQuZ2V0U3R5bGVzKFdlYklu
c3BlY3Rvci5DYWxsYmFjay53cmFwKGNhbGxiYWNrKSwgV2ViSW5zcGVjdG9yLmRvbUFnZW50LmRv
Y3VtZW50LmJvZHkuaWQsIHRydWUpOworICAgIH0pOworfQorCis8L3NjcmlwdD4KKzwvaGVhZD4K
KworPGJvZHkgY2xhc3M9Im1haW4xIG1haW4yIiBvbmxvYWQ9Im9ubG9hZCgpIj4KKzxwPgorVGVz
dHMgdGhhdCBwcm9wZXIgc3RhcnQvZW5kIG9mZnNldCBwb3NpdGlvbnMgYXJlIHJlcG9ydGVkIGZv
ciBDU1MgcnVsZSBib2RpZXMuCis8L3A+CisKKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBh
L1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzdjYzViYS4uYTI5
ZTFjYyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VM
b2cKQEAgLTEsMyArMSw1OCBAQAorMjAxMC0wNS0yNSAgQWxleGFuZGVyIFBhdmxvdiAgPGFwYXZs
b3ZAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIEV4cG9zZSBDU1MgcnVsZSBib2R5IHN0YXJ0L2VuZCBvZmZzZXRzIGluIHRoZSBw
YXJlbnQgc3R5bGVzaGVldAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9Mzg5MDYKKworICAgICAgICBDU1NQYXJzZXI6OnBhcnNlU2hlZXQoKSBhY2NlcHRz
IGFuIG9wdGlvbmFsIGV4dGVybmFsIFZlY3RvciB3aGVyZSB0aGUgc3RhcnQvZW5kIG9mZnNldHMK
KyAgICAgICAgb2YgdGhlIENTU1N0eWxlUnVsZSBib2RpZXMsIHJlbGF0aXZlIHRvIHRoZSBiZWdp
bm5pbmcgb2YgdGhlIHN0eWxlc2hlZXQsIHdpbGwgYmUgc3RvcmVkLgorICAgICAgICBUaGlzIFZl
Y3RvciBpcyBvbmx5IHVzZWQgd2hlbiB0aGUgV2ViIEluc3BlY3RvciBuZWVkcyB0aGUgYm9keSBy
YW5nZXMsIHRodXMgdGhlcmUgaXMgbm8KKyAgICAgICAgbWVtb3J5IG92ZXJoZWFkIHVudGlsIHRo
ZSB1c2VyIHN0YXJ0cyBlZGl0aW5nIHN0eWxlcyB2aWEgdGhlIFdlYiBJbnNwZWN0b3IuCisKKyAg
ICAgICAgVGVzdDogaW5zcGVjdG9yL3N0eWxlcy1zb3VyY2Utb2Zmc2V0cy5odG1sCisKKyAgICAg
ICAgKiBjc3MvQ1NTR3JhbW1hci55OgorICAgICAgICAqIGNzcy9DU1NQYXJzZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpzZXR1cFBhcnNlcik6CisgICAgICAgIChXZWJDb3Jl
OjpDU1NQYXJzZXI6OnBhcnNlU2hlZXQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpj
cmVhdGVTdHlsZVJ1bGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjp1cGRhdGVMYXN0
U2VsZWN0b3JMaW5lQW5kUG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpt
YXJrU3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjptYXJrRW5kKToKKyAgICAg
ICAgKiBjc3MvQ1NTUGFyc2VyLmg6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnJlc2V0
TWFya3MpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JDU1NTdG9yZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NTdG9yZTo6SW5zcGVjdG9yQ1NTU3RvcmUpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTU3RvcmU6OnJlc2V0KToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvckNTU1N0b3JlOjpnZXRTdGFydEVuZE9mZnNldHMpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yQ1NTU3RvcmU6OmRpc2FibGVkU3R5bGVGb3JJZCk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JDU1NTdG9yZTo6c3R5bGVGb3JJZCk6CisgICAgICAgIChXZWJDb3Jl
OjpJbnNwZWN0b3JDU1NTdG9yZTo6cnVsZUZvcklkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvckNTU1N0b3JlOjpiaW5kU3R5bGUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NT
U3RvcmU6OmJpbmRTdHlsZVNoZWV0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU1N0
b3JlOjpiaW5kUnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NTdG9yZTo6c2V0
SW5zcGVjdG9yU3R5bGVTaGVldCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNTU1N0
b3JlLmg6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NTdG9yZTo6aW5zcGVjdG9yU3R5
bGVTaGVldCk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6SW5zcGVjdG9yQ29udHJvbGxl
cik6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuaDoKKyAgICAgICAg
KiBpbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5z
cGVjdG9yRE9NQWdlbnQ6Okluc3BlY3RvckRPTUFnZW50KToKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvckRPTUFnZW50OjphcHBseVN0eWxlVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JET01BZ2VudDo6c2V0U3R5bGVUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckRPTUFnZW50OjpzZXRTdHlsZVByb3BlcnR5KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rv
ckRPTUFnZW50Ojp0b2dnbGVTdHlsZUVuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVj
dG9yRE9NQWdlbnQ6OnNldFJ1bGVTZWxlY3Rvcik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JET01BZ2VudDo6YWRkUnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2Vu
dDo6YnVpbGRPYmplY3RGb3JTdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01B
Z2VudDo6YnVpbGRBcnJheUZvckRpc2FibGVkU3R5bGVQcm9wZXJ0aWVzKToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvckRPTUFnZW50OjpidWlsZE9iamVjdEZvclJ1bGUpOgorICAgICAgICAq
IGluc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9u
dC1lbmQvRE9NQWdlbnQuanM6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQ1NTU3R5bGVEZWNsYXJh
dGlvbik6CisKIDIwMTAtMDUtMjUgIEFuZGVycyBCYWtrZW4gIDxhZ2Jha2tlbkBnbWFpbC5jb20+
CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFyaW4gQWRsZXIuCmRpZmYgLS1naXQgYS9XZWJDb3Jl
L2Nzcy9DU1NHcmFtbWFyLnkgYi9XZWJDb3JlL2Nzcy9DU1NHcmFtbWFyLnkKaW5kZXggMzdjNTM4
NS4uYjFhMmJkOSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9jc3MvQ1NTR3JhbW1hci55CisrKyBiL1dl
YkNvcmUvY3NzL0NTU0dyYW1tYXIueQpAQCAtODg5LDcgKzg4OSwxMCBAQCB1bmFyeV9vcGVyYXRv
cjoKIAogcnVsZXNldDoKICAgICBzZWxlY3Rvcl9saXN0ICd7JyBtYXliZV9zcGFjZSBkZWNsYXJh
dGlvbl9saXN0IGNsb3NpbmdfYnJhY2UgewotICAgICAgICAkJCA9IHN0YXRpY19jYXN0PENTU1Bh
cnNlcio+KHBhcnNlciktPmNyZWF0ZVN0eWxlUnVsZSgkMSk7CisgICAgICAgIENTU1BhcnNlciog
cCA9IHN0YXRpY19jYXN0PENTU1BhcnNlcio+KHBhcnNlcik7CisgICAgICAgIHAtPm1hcmtFbmQo
KTsKKyAgICAgICAgJCQgPSBwLT5jcmVhdGVTdHlsZVJ1bGUoJDEpOworICAgICAgICBwLT5yZXNl
dE1hcmtzKCk7CiAgICAgfQogICA7CiAKQEAgLTkwMSw3ICs5MDQsNyBAQCBzZWxlY3Rvcl9saXN0
OgogICAgICAgICAgICAgZGVsZXRlQWxsVmFsdWVzKCokJCk7CiAgICAgICAgICAgICAkJC0+c2hy
aW5rKDApOwogICAgICAgICAgICAgJCQtPmFwcGVuZChwLT5zaW5rRmxvYXRpbmdTZWxlY3Rvcigk
MSkpOwotICAgICAgICAgICAgcC0+dXBkYXRlTGFzdFNlbGVjdG9yTGluZSgpOworICAgICAgICAg
ICAgcC0+dXBkYXRlTGFzdFNlbGVjdG9yTGluZUFuZFBvc2l0aW9uKCk7CiAgICAgICAgIH0KICAg
ICB9CiAgICAgfCBzZWxlY3Rvcl9saXN0ICcsJyBtYXliZV9zcGFjZSBzZWxlY3RvciAlcHJlYyBV
TklNUE9SVEFOVF9UT0sgewpAQCAtOTA5LDcgKzkxMiw3IEBAIHNlbGVjdG9yX2xpc3Q6CiAgICAg
ICAgICAgICBDU1NQYXJzZXIqIHAgPSBzdGF0aWNfY2FzdDxDU1NQYXJzZXIqPihwYXJzZXIpOwog
ICAgICAgICAgICAgJCQgPSAkMTsKICAgICAgICAgICAgICQkLT5hcHBlbmQocC0+c2lua0Zsb2F0
aW5nU2VsZWN0b3IoJDQpKTsKLSAgICAgICAgICAgIHAtPnVwZGF0ZUxhc3RTZWxlY3RvckxpbmUo
KTsKKyAgICAgICAgICAgIHAtPnVwZGF0ZUxhc3RTZWxlY3RvckxpbmVBbmRQb3NpdGlvbigpOwog
ICAgICAgICB9IGVsc2UKICAgICAgICAgICAgICQkID0gMDsKICAgICB9CmRpZmYgLS1naXQgYS9X
ZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwIGIvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmNwcAppbmRl
eCBjOTNkODNkLi44MDNmMDdiIDEwMDY0NAotLS0gYS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3Bw
CisrKyBiL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAKQEAgLTIyNSwxMiArMjI1LDE0IEBAIHZv
aWQgQ1NTUGFyc2VyOjpzZXR1cFBhcnNlcihjb25zdCBjaGFyKiBwcmVmaXgsIGNvbnN0IFN0cmlu
ZyYgc3RyaW5nLCBjb25zdCBjaGFyCiAgICAgeXlsZW5nID0gMDsKICAgICB5eXRleHQgPSB5eV9j
X2J1Zl9wID0gbV9kYXRhOwogICAgIHl5X2hvbGRfY2hhciA9ICp5eV9jX2J1Zl9wOworICAgIHJl
c2V0TWFya3MoKTsKIH0KIAotdm9pZCBDU1NQYXJzZXI6OnBhcnNlU2hlZXQoQ1NTU3R5bGVTaGVl
dCogc2hlZXQsIGNvbnN0IFN0cmluZyYgc3RyaW5nKQordm9pZCBDU1NQYXJzZXI6OnBhcnNlU2hl
ZXQoQ1NTU3R5bGVTaGVldCogc2hlZXQsIGNvbnN0IFN0cmluZyYgc3RyaW5nLCBWZWN0b3I8c3Rk
OjpwYWlyPHVuc2lnbmVkLCB1bnNpZ25lZD4gPiogcnVsZVN0YXJ0RW5kT2Zmc2V0cykKIHsKICAg
ICBtX3N0eWxlU2hlZXQgPSBzaGVldDsKICAgICBtX2RlZmF1bHROYW1lc3BhY2UgPSBzdGFyQXRv
bTsgLy8gUmVzZXQgdGhlIGRlZmF1bHQgbmFtZXNwYWNlLgorICAgIG1fcnVsZVN0YXJ0RW5kT2Zm
c2V0cyA9IHJ1bGVTdGFydEVuZE9mZnNldHM7CiAKICAgICBzZXR1cFBhcnNlcigiIiwgc3RyaW5n
LCAiIik7CiAgICAgY3NzeXlwYXJzZSh0aGlzKTsKQEAgLTUyMzYsNiArNTIzOCw4IEBAIENTU1J1
bGUqIENTU1BhcnNlcjo6Y3JlYXRlU3R5bGVSdWxlKFZlY3RvcjxDU1NTZWxlY3Rvcio+KiBzZWxl
Y3RvcnMpCiAgICAgQ1NTU3R5bGVSdWxlKiByZXN1bHQgPSAwOwogICAgIGlmIChzZWxlY3RvcnMp
IHsKICAgICAgICAgUmVmUHRyPENTU1N0eWxlUnVsZT4gcnVsZSA9IENTU1N0eWxlUnVsZTo6Y3Jl
YXRlKG1fc3R5bGVTaGVldCwgbV9sYXN0U2VsZWN0b3JMaW5lKTsKKyAgICAgICAgaWYgKG1fcnVs
ZVN0YXJ0RW5kT2Zmc2V0cykKKyAgICAgICAgICAgIG1fcnVsZVN0YXJ0RW5kT2Zmc2V0cy0+YXBw
ZW5kKHN0ZDo6cGFpcjx1bnNpZ25lZCwgdW5zaWduZWQ+KG1fc3RhcnRPZmZzZXQsIG1fZW5kT2Zm
c2V0KSk7CiAgICAgICAgIHJ1bGUtPmFkb3B0U2VsZWN0b3JWZWN0b3IoKnNlbGVjdG9ycyk7CiAg
ICAgICAgIGlmIChtX2hhc0ZvbnRGYWNlT25seVZhbHVlcykKICAgICAgICAgICAgIGRlbGV0ZUZv
bnRGYWNlT25seVZhbHVlcygpOwpAQCAtNTQ4NCw2ICs1NDg4LDI2IEBAIHZvaWQgQ1NTUGFyc2Vy
OjppbnZhbGlkQmxvY2tIaXQoKQogICAgICAgICBtX3N0eWxlU2hlZXQtPnNldEhhc1N5bnRhY3Rp
Y2FsbHlWYWxpZENTU0hlYWRlcihmYWxzZSk7CiB9CiAKK3ZvaWQgQ1NTUGFyc2VyOjp1cGRhdGVM
YXN0U2VsZWN0b3JMaW5lQW5kUG9zaXRpb24oKQoreworICAgIG1fbGFzdFNlbGVjdG9yTGluZSA9
IG1fbGluZTsKKyAgICBtYXJrU3RhcnQoKTsKK30KKwordm9pZCBDU1NQYXJzZXI6Om1hcmtTdGFy
dCgpCit7CisgICAgdW5zaWduZWQgb2Zmc2V0ID0geXl0ZXh0IC0gbV9kYXRhOworICAgIGlmICgh
bV9zdGFydE9mZnNldCB8fCBvZmZzZXQgPCBtX3N0YXJ0T2Zmc2V0KQorICAgICAgICBtX3N0YXJ0
T2Zmc2V0ID0gb2Zmc2V0OworfQorCit2b2lkIENTU1BhcnNlcjo6bWFya0VuZCgpCit7CisgICAg
dW5zaWduZWQgb2Zmc2V0ID0geXl0ZXh0IC0gbV9kYXRhOworICAgIGlmIChvZmZzZXQgPiBtX2Vu
ZE9mZnNldCkKKyAgICAgICAgbV9lbmRPZmZzZXQgPSBvZmZzZXQ7Cit9CisKIHN0YXRpYyBpbnQg
Y3NzUHJvcGVydHlJRChjb25zdCBVQ2hhciogcHJvcGVydHlOYW1lLCB1bnNpZ25lZCBsZW5ndGgp
CiB7CiAgICAgaWYgKCFsZW5ndGgpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIu
aCBiL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5oCmluZGV4IGQxYTVhNDMuLjkzMDUxMjMgMTAwNjQ0
Ci0tLSBhL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5oCisrKyBiL1dlYkNvcmUvY3NzL0NTU1BhcnNl
ci5oCkBAIC01Niw3ICs1Niw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgQ1NTUGFy
c2VyKGJvb2wgc3RyaWN0UGFyc2luZyA9IHRydWUpOwogICAgICAgICB+Q1NTUGFyc2VyKCk7CiAK
LSAgICAgICAgdm9pZCBwYXJzZVNoZWV0KENTU1N0eWxlU2hlZXQqLCBjb25zdCBTdHJpbmcmKTsK
KyAgICAgICAgdm9pZCBwYXJzZVNoZWV0KENTU1N0eWxlU2hlZXQqLCBjb25zdCBTdHJpbmcmLCBW
ZWN0b3I8c3RkOjpwYWlyPHVuc2lnbmVkLCB1bnNpZ25lZD4gPiogcnVsZVN0YXJ0RW5kUG9zaXRp
b25zID0gMCk7CiAgICAgICAgIFBhc3NSZWZQdHI8Q1NTUnVsZT4gcGFyc2VSdWxlKENTU1N0eWxl
U2hlZXQqLCBjb25zdCBTdHJpbmcmKTsKICAgICAgICAgUGFzc1JlZlB0cjxDU1NSdWxlPiBwYXJz
ZUtleWZyYW1lUnVsZShDU1NTdHlsZVNoZWV0KiwgY29uc3QgU3RyaW5nJik7CiAgICAgICAgIGJv
b2wgcGFyc2VWYWx1ZShDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiosIGludCBwcm9wSWQsIGNv
bnN0IFN0cmluZyYsIGJvb2wgaW1wb3J0YW50KTsKQEAgLTIwNyw3ICsyMDcsNyBAQCBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKICAgICAgICAgVmVjdG9yPENTU1NlbGVjdG9yKj4qIHJldXNhYmxlU2Vs
ZWN0b3JWZWN0b3IoKSB7IHJldHVybiAmbV9yZXVzYWJsZVNlbGVjdG9yVmVjdG9yOyB9CiAKLSAg
ICAgICAgdm9pZCB1cGRhdGVMYXN0U2VsZWN0b3JMaW5lKCkgeyBtX2xhc3RTZWxlY3RvckxpbmUg
PSBtX2xpbmU7IH0KKyAgICAgICAgdm9pZCB1cGRhdGVMYXN0U2VsZWN0b3JMaW5lQW5kUG9zaXRp
b24oKTsKIAogICAgICAgICB2b2lkIGNsZWFyUHJvcGVydGllcygpOwogCkBAIC0yMzgsNiArMjM4
LDEyIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgQXRvbWljU3RyaW5nIG1fZGVmYXVs
dE5hbWVzcGFjZTsKIAogICAgICAgICAvLyB0b2tlbml6ZXIgbWV0aG9kcyBhbmQgZGF0YQorICAg
ICAgICB1bnNpZ25lZCBtX3N0YXJ0T2Zmc2V0OworICAgICAgICB1bnNpZ25lZCBtX2VuZE9mZnNl
dDsKKyAgICAgICAgVmVjdG9yPHN0ZDo6cGFpcjx1bnNpZ25lZCwgdW5zaWduZWQ+ID4qIG1fcnVs
ZVN0YXJ0RW5kT2Zmc2V0czsKKyAgICAgICAgdm9pZCBtYXJrU3RhcnQoKTsKKyAgICAgICAgdm9p
ZCBtYXJrRW5kKCk7CisgICAgICAgIHZvaWQgcmVzZXRNYXJrcygpIHsgbV9zdGFydE9mZnNldCA9
IG1fZW5kT2Zmc2V0ID0gMDsgfQogICAgICAgICBpbnQgbGV4KHZvaWQqIHl5bHZhbCk7CiAgICAg
ICAgIGludCB0b2tlbigpIHsgcmV0dXJuIHl5VG9rOyB9CiAgICAgICAgIFVDaGFyKiB0ZXh0KGlu
dCogbGVuZ3RoKTsKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU1N0
b3JlLmNwcCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU1N0b3JlLmNwcAppbmRleCBl
NTM2ODhiLi43YWI2MTUyIDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JD
U1NTdG9yZS5jcHAKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTU3RvcmUuY3Bw
CkBAIC0yOSwxNCArMjksMjMgQEAKICNpbmNsdWRlICJjb25maWcuaCIKICNpbmNsdWRlICJJbnNw
ZWN0b3JDU1NTdG9yZS5oIgogCisjaW5jbHVkZSAiQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24u
aCIKKyNpbmNsdWRlICJDU1NQYXJzZXIuaCIKICNpbmNsdWRlICJDU1NTdHlsZURlY2xhcmF0aW9u
LmgiCiAjaW5jbHVkZSAiQ1NTU3R5bGVSdWxlLmgiCiAjaW5jbHVkZSAiQ1NTU3R5bGVTaGVldC5o
IgorI2luY2x1ZGUgIkluc3BlY3RvckNvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JS
ZXNvdXJjZS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCisjaW5jbHVkZSAiU2NyaXB0
T2JqZWN0LmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotSW5zcGVjdG9yQ1NTU3RvcmU6Oklu
c3BlY3RvckNTU1N0b3JlKCkKK0luc3BlY3RvckNTU1N0b3JlOjpJbnNwZWN0b3JDU1NTdG9yZShJ
bnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3JDb250cm9sbGVyKQorICAgIDogbV9pbnNwZWN0
b3JDb250cm9sbGVyKGluc3BlY3RvckNvbnRyb2xsZXIpCisgICAgLCBtX2xhc3RTdHlsZUlkKDEp
CisgICAgLCBtX2xhc3RTdHlsZVNoZWV0SWQoMSkKKyAgICAsIG1fbGFzdFJ1bGVJZCgxKQogewog
fQogCkBAIC00NiwxMiArNTUsMTE3IEBAIEluc3BlY3RvckNTU1N0b3JlOjp+SW5zcGVjdG9yQ1NT
U3RvcmUoKQogCiB2b2lkIEluc3BlY3RvckNTU1N0b3JlOjpyZXNldCgpCiB7Ci0gICAgc3R5bGVU
b0lkLmNsZWFyKCk7Ci0gICAgaWRUb1N0eWxlLmNsZWFyKCk7Ci0gICAgcnVsZVRvSWQuY2xlYXIo
KTsKLSAgICBpZFRvUnVsZS5jbGVhcigpOwotICAgIGlkVG9EaXNhYmxlZFN0eWxlLmNsZWFyKCk7
Ci0gICAgaW5zcGVjdG9yU3R5bGVTaGVldCA9IDA7CisgICAgbV9zdHlsZVRvSWQuY2xlYXIoKTsK
KyAgICBtX2lkVG9TdHlsZS5jbGVhcigpOworICAgIG1fcnVsZVRvSWQuY2xlYXIoKTsKKyAgICBt
X2lkVG9SdWxlLmNsZWFyKCk7CisgICAgZGVsZXRlQWxsVmFsdWVzKG1fc3R5bGVTaGVldFRvT2Zm
c2V0cyk7CisgICAgbV9zdHlsZVNoZWV0VG9PZmZzZXRzLmNsZWFyKCk7CisgICAgbV9zdHlsZVNo
ZWV0VG9JZC5jbGVhcigpOworICAgIG1faWRUb1N0eWxlU2hlZXQuY2xlYXIoKTsKKyAgICBtX2lk
VG9EaXNhYmxlZFN0eWxlLmNsZWFyKCk7CisgICAgbV9pbnNwZWN0b3JTdHlsZVNoZWV0ID0gMDsK
KworICAgIG1fbGFzdFN0eWxlSWQgPSAxOworICAgIG1fbGFzdFN0eWxlU2hlZXRJZCA9IDE7Cisg
ICAgbV9sYXN0UnVsZUlkID0gMTsKK30KKworQm9keVN0YXJ0RW5kT2Zmc2V0cyBJbnNwZWN0b3JD
U1NTdG9yZTo6Z2V0U3RhcnRFbmRPZmZzZXRzKENTU1N0eWxlUnVsZSogcnVsZSkKK3sKKyAgICBD
U1NTdHlsZVNoZWV0KiBwYXJlbnRTdHlsZVNoZWV0ID0gcnVsZS0+cGFyZW50U3R5bGVTaGVldCgp
OworICAgIGlmICghcGFyZW50U3R5bGVTaGVldCkKKyAgICAgICAgcmV0dXJuIHN0ZDo6cGFpcjx1
bnNpZ25lZCwgdW5zaWduZWQ+KDAsIDApOworICAgIFJlZlB0cjxDU1NSdWxlTGlzdD4gb3JpZ2lu
YWxSdWxlTGlzdCA9IHBhcmVudFN0eWxlU2hlZXQtPmNzc1J1bGVzKCk7CisgICAgdW5zaWduZWQg
cnVsZUluZGV4ID0gMDsKKyAgICB1bnNpZ25lZCBpID0gMDsKKyAgICB1bnNpZ25lZCBvcmlnaW5h
bFJ1bGVMaXN0TGVuZ3RoID0gb3JpZ2luYWxSdWxlTGlzdC0+bGVuZ3RoKCk7CisgICAgd2hpbGUg
KGkgPCBvcmlnaW5hbFJ1bGVMaXN0TGVuZ3RoKSB7CisgICAgICAgIGlmIChvcmlnaW5hbFJ1bGVM
aXN0LT5pdGVtKGkpID09IHJ1bGUpCisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgaWYgKG9y
aWdpbmFsUnVsZUxpc3QtPml0ZW0oaSktPnR5cGUoKSA9PSBDU1NSdWxlOjpTVFlMRV9SVUxFKQor
ICAgICAgICAgICAgKytydWxlSW5kZXg7CisgICAgICAgICsraTsKKyAgICB9CisgICAgaWYgKGkg
PT0gb3JpZ2luYWxSdWxlTGlzdExlbmd0aCkKKyAgICAgICAgcmV0dXJuIHN0ZDo6cGFpcjx1bnNp
Z25lZCwgdW5zaWduZWQ+KDAsIDApOworICAgIFN0eWxlU2hlZXRUb09mZnNldHNNYXA6Oml0ZXJh
dG9yIGl0ID0gbV9zdHlsZVNoZWV0VG9PZmZzZXRzLmZpbmQocGFyZW50U3R5bGVTaGVldCk7Cisg
ICAgVmVjdG9yPEJvZHlTdGFydEVuZE9mZnNldHM+KiBvZmZzZXRWZWN0b3IgPSAwOworICAgIGlm
IChpdCA9PSBtX3N0eWxlU2hlZXRUb09mZnNldHMuZW5kKCkpIHsKKyAgICAgICAgZm9yIChJbnNw
ZWN0b3JDb250cm9sbGVyOjpSZXNvdXJjZXNNYXA6OmNvbnN0X2l0ZXJhdG9yIHJlc0l0ID0gbV9p
bnNwZWN0b3JDb250cm9sbGVyLT5yZXNvdXJjZXMoKS5iZWdpbigpOyByZXNJdCAhPSBtX2luc3Bl
Y3RvckNvbnRyb2xsZXItPnJlc291cmNlcygpLmVuZCgpOyArK3Jlc0l0KSB7CisgICAgICAgICAg
ICBpZiAocmVzSXQtPnNlY29uZC0+cmVxdWVzdFVSTCgpLnN0cmluZygpID09IHBhcmVudFN0eWxl
U2hlZXQtPmZpbmFsVVJMKCkuc3RyaW5nKCkpIHsKKyAgICAgICAgICAgICAgICBvZmZzZXRWZWN0
b3IgPSBuZXcgVmVjdG9yPEJvZHlTdGFydEVuZE9mZnNldHM+OworICAgICAgICAgICAgICAgIFJl
ZlB0cjxDU1NTdHlsZVNoZWV0PiBuZXdTdHlsZVNoZWV0ID0gQ1NTU3R5bGVTaGVldDo6Y3JlYXRl
KCk7CisgICAgICAgICAgICAgICAgQ1NTUGFyc2VyIHA7CisgICAgICAgICAgICAgICAgcC5wYXJz
ZVNoZWV0KG5ld1N0eWxlU2hlZXQuZ2V0KCksIHJlc0l0LT5zZWNvbmQtPnNvdXJjZVN0cmluZygp
LCBvZmZzZXRWZWN0b3IpOworICAgICAgICAgICAgICAgIGl0ID0gbV9zdHlsZVNoZWV0VG9PZmZz
ZXRzLnNldChwYXJlbnRTdHlsZVNoZWV0LCBvZmZzZXRWZWN0b3IpLmZpcnN0OworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfSBlbHNlCisgICAg
ICAgIG9mZnNldFZlY3RvciA9IGl0LT5zZWNvbmQ7CisgICAgaWYgKCFvZmZzZXRWZWN0b3IpCisg
ICAgICAgIHJldHVybiBzdGQ6OnBhaXI8dW5zaWduZWQsIHVuc2lnbmVkPigwLCAwKTsKKyAgICBB
U1NFUlQob2Zmc2V0VmVjdG9yLT5zaXplKCkgPiBydWxlSW5kZXgpOworICAgIHJldHVybiBvZmZz
ZXRWZWN0b3ItPmF0KHJ1bGVJbmRleCk7Cit9CisKK0Rpc2FibGVkU3R5bGVEZWNsYXJhdGlvbiog
SW5zcGVjdG9yQ1NTU3RvcmU6OmRpc2FibGVkU3R5bGVGb3JJZChsb25nIHN0eWxlSWQsIGJvb2wg
Y3JlYXRlSWZBYnNlbnQpCit7CisgICAgSWRUb0Rpc2FibGVkU3R5bGVNYXA6Oml0ZXJhdG9yIGl0
ID0gbV9pZFRvRGlzYWJsZWRTdHlsZS5maW5kKHN0eWxlSWQpOworICAgIGlmIChpdCA9PSBtX2lk
VG9EaXNhYmxlZFN0eWxlLmVuZCgpICYmIGNyZWF0ZUlmQWJzZW50KQorICAgICAgICBpdCA9IG1f
aWRUb0Rpc2FibGVkU3R5bGUuc2V0KHN0eWxlSWQsIERpc2FibGVkU3R5bGVEZWNsYXJhdGlvbigp
KS5maXJzdDsKKyAgICByZXR1cm4gaXQgPT0gbV9pZFRvRGlzYWJsZWRTdHlsZS5lbmQoKSA/IDAg
OiAmKGl0LT5zZWNvbmQpOworfQorCitDU1NTdHlsZURlY2xhcmF0aW9uKiBJbnNwZWN0b3JDU1NT
dG9yZTo6c3R5bGVGb3JJZChsb25nIHN0eWxlSWQpCit7CisgICAgSWRUb1N0eWxlTWFwOjppdGVy
YXRvciBpdCA9IG1faWRUb1N0eWxlLmZpbmQoc3R5bGVJZCk7CisgICAgcmV0dXJuIGl0ID09IG1f
aWRUb1N0eWxlLmVuZCgpID8gMCA6IGl0LT5zZWNvbmQuZ2V0KCk7Cit9CisKK0NTU1N0eWxlUnVs
ZSogSW5zcGVjdG9yQ1NTU3RvcmU6OnJ1bGVGb3JJZChsb25nIHJ1bGVJZCkKK3sKKyAgICBJZFRv
UnVsZU1hcDo6aXRlcmF0b3IgaXQgPSBtX2lkVG9SdWxlLmZpbmQocnVsZUlkKTsKKyAgICByZXR1
cm4gaXQgPT0gbV9pZFRvUnVsZS5lbmQoKSA/IDAgOiBpdC0+c2Vjb25kLmdldCgpOworfQorCits
b25nIEluc3BlY3RvckNTU1N0b3JlOjpiaW5kU3R5bGUoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5
bGUpCit7CisgICAgbG9uZyBpZCA9IG1fc3R5bGVUb0lkLmdldChzdHlsZSk7CisgICAgaWYgKCFp
ZCkgeworICAgICAgICBpZCA9IG1fbGFzdFN0eWxlSWQrKzsKKyAgICAgICAgbV9pZFRvU3R5bGUu
c2V0KGlkLCBzdHlsZSk7CisgICAgICAgIG1fc3R5bGVUb0lkLnNldChzdHlsZSwgaWQpOworICAg
IH0KKyAgICByZXR1cm4gaWQ7Cit9CisKK2xvbmcgSW5zcGVjdG9yQ1NTU3RvcmU6OmJpbmRTdHls
ZVNoZWV0KENTU1N0eWxlU2hlZXQqIHN0eWxlU2hlZXQpCit7CisgICAgbG9uZyBpZCA9IG1fc3R5
bGVTaGVldFRvSWQuZ2V0KHN0eWxlU2hlZXQpOworICAgIGlmICghaWQpIHsKKyAgICAgICAgaWQg
PSBtX2xhc3RTdHlsZVNoZWV0SWQrKzsKKyAgICAgICAgbV9pZFRvU3R5bGVTaGVldC5zZXQoaWQs
IHN0eWxlU2hlZXQpOworICAgICAgICBtX3N0eWxlU2hlZXRUb0lkLnNldChzdHlsZVNoZWV0LCBp
ZCk7CisgICAgfQorICAgIHJldHVybiBpZDsKK30KKworbG9uZyBJbnNwZWN0b3JDU1NTdG9yZTo6
YmluZFJ1bGUoQ1NTU3R5bGVSdWxlKiBydWxlKQoreworICAgIGxvbmcgaWQgPSBtX3J1bGVUb0lk
LmdldChydWxlKTsKKyAgICBpZiAoIWlkKSB7CisgICAgICAgIGlkID0gbV9sYXN0UnVsZUlkKys7
CisgICAgICAgIG1faWRUb1J1bGUuc2V0KGlkLCBydWxlKTsKKyAgICAgICAgbV9ydWxlVG9JZC5z
ZXQocnVsZSwgaWQpOworICAgIH0KKyAgICByZXR1cm4gaWQ7Cit9CisKK3ZvaWQgSW5zcGVjdG9y
Q1NTU3RvcmU6OnNldEluc3BlY3RvclN0eWxlU2hlZXQoQ1NTU3R5bGVTaGVldCogc3R5bGVTaGVl
dCkKK3sKKyAgICBtX2luc3BlY3RvclN0eWxlU2hlZXQgPSBzdHlsZVNoZWV0OwogfQogCiB9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JDU1NTdG9yZS5oIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTU3RvcmUuaAppbmRl
eCBkMjkwZmFkLi40ZTFiNDI3IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JDU1NTdG9yZS5oCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU1N0b3JlLmgK
QEAgLTM2LDMwICszNiw1OCBAQAogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKK2NsYXNzIEluc3Bl
Y3RvckNvbnRyb2xsZXI7CitjbGFzcyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjsKIGNsYXNz
IENTU1N0eWxlRGVjbGFyYXRpb247CiBjbGFzcyBDU1NTdHlsZVJ1bGU7CiBjbGFzcyBDU1NTdHls
ZVNoZWV0OwogY2xhc3MgU3RyaW5nOwogCiB0eXBlZGVmIHN0ZDo6cGFpcjxTdHJpbmcsIFN0cmlu
Zz4gUHJvcGVydHlWYWx1ZUFuZFByaW9yaXR5OwordHlwZWRlZiBzdGQ6OnBhaXI8dW5zaWduZWQs
IHVuc2lnbmVkPiBCb2R5U3RhcnRFbmRPZmZzZXRzOwogdHlwZWRlZiBIYXNoTWFwPFN0cmluZywg
UHJvcGVydHlWYWx1ZUFuZFByaW9yaXR5PiBEaXNhYmxlZFN0eWxlRGVjbGFyYXRpb247CiB0eXBl
ZGVmIEhhc2hNYXA8Q1NTU3R5bGVEZWNsYXJhdGlvbiosIGxvbmc+IFN0eWxlVG9JZE1hcDsKIHR5
cGVkZWYgSGFzaE1hcDxsb25nLCBSZWZQdHI8Q1NTU3R5bGVEZWNsYXJhdGlvbj4gPiBJZFRvU3R5
bGVNYXA7CiB0eXBlZGVmIEhhc2hNYXA8Q1NTU3R5bGVSdWxlKiwgbG9uZz4gUnVsZVRvSWRNYXA7
CiB0eXBlZGVmIEhhc2hNYXA8bG9uZywgUmVmUHRyPENTU1N0eWxlUnVsZT4gPiBJZFRvUnVsZU1h
cDsKK3R5cGVkZWYgSGFzaE1hcDxDU1NTdHlsZVNoZWV0KiwgVmVjdG9yPEJvZHlTdGFydEVuZE9m
ZnNldHM+KiA+IFN0eWxlU2hlZXRUb09mZnNldHNNYXA7Cit0eXBlZGVmIEhhc2hNYXA8Q1NTU3R5
bGVTaGVldCosIGxvbmc+IFN0eWxlU2hlZXRUb0lkTWFwOwordHlwZWRlZiBIYXNoTWFwPGxvbmcs
IFJlZlB0cjxDU1NTdHlsZVNoZWV0PiA+IElkVG9TdHlsZVNoZWV0TWFwOwogdHlwZWRlZiBIYXNo
TWFwPGxvbmcsIERpc2FibGVkU3R5bGVEZWNsYXJhdGlvbj4gSWRUb0Rpc2FibGVkU3R5bGVNYXA7
CiAKLXN0cnVjdCBJbnNwZWN0b3JDU1NTdG9yZSB7Ci0gICAgSW5zcGVjdG9yQ1NTU3RvcmUoKTsK
K2NsYXNzIEluc3BlY3RvckNTU1N0b3JlIHsKKworcHVibGljOgorICAgIEluc3BlY3RvckNTU1N0
b3JlKEluc3BlY3RvckNvbnRyb2xsZXIqIGluc3BlY3RvckNvbnRyb2xsZXIpOwogICAgIH5JbnNw
ZWN0b3JDU1NTdG9yZSgpOwogICAgIHZvaWQgcmVzZXQoKTsKKyAgICBCb2R5U3RhcnRFbmRPZmZz
ZXRzIGdldFN0YXJ0RW5kT2Zmc2V0cyhDU1NTdHlsZVJ1bGUqIHJ1bGUpOworICAgIENTU1N0eWxl
RGVjbGFyYXRpb24qIHN0eWxlRm9ySWQobG9uZyBzdHlsZUlkKTsKKyAgICBDU1NTdHlsZVJ1bGUq
IHJ1bGVGb3JJZChsb25nIHN0eWxlUnVsZUlkKTsKKyAgICBEaXNhYmxlZFN0eWxlRGVjbGFyYXRp
b24qIGRpc2FibGVkU3R5bGVGb3JJZChsb25nIHN0eWxlSWQsIGJvb2wgY3JlYXRlSWZBYnNlbnQp
OworCisgICAgbG9uZyBiaW5kUnVsZShDU1NTdHlsZVJ1bGUqIHJ1bGUpOworICAgIGxvbmcgYmlu
ZFN0eWxlKENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlKTsKKyAgICBsb25nIGJpbmRTdHlsZVNo
ZWV0KENTU1N0eWxlU2hlZXQqIHN0eWxlU2hlZXQpOworCisgICAgQ1NTU3R5bGVTaGVldCogaW5z
cGVjdG9yU3R5bGVTaGVldCgpIHsgcmV0dXJuIG1faW5zcGVjdG9yU3R5bGVTaGVldC5nZXQoKTsg
fQorICAgIHZvaWQgc2V0SW5zcGVjdG9yU3R5bGVTaGVldChDU1NTdHlsZVNoZWV0KiBzdHlsZVNo
ZWV0KTsKKworcHJpdmF0ZToKKyAgICBTdHlsZVRvSWRNYXAgbV9zdHlsZVRvSWQ7CisgICAgSWRU
b1N0eWxlTWFwIG1faWRUb1N0eWxlOworICAgIFJ1bGVUb0lkTWFwIG1fcnVsZVRvSWQ7CisgICAg
SWRUb1J1bGVNYXAgbV9pZFRvUnVsZTsKKyAgICBTdHlsZVNoZWV0VG9PZmZzZXRzTWFwIG1fc3R5
bGVTaGVldFRvT2Zmc2V0czsKKyAgICBTdHlsZVNoZWV0VG9JZE1hcCBtX3N0eWxlU2hlZXRUb0lk
OworICAgIElkVG9TdHlsZVNoZWV0TWFwIG1faWRUb1N0eWxlU2hlZXQ7CisgICAgSWRUb0Rpc2Fi
bGVkU3R5bGVNYXAgbV9pZFRvRGlzYWJsZWRTdHlsZTsKKyAgICBSZWZQdHI8Q1NTU3R5bGVTaGVl
dD4gbV9pbnNwZWN0b3JTdHlsZVNoZWV0OwogCi0gICAgU3R5bGVUb0lkTWFwIHN0eWxlVG9JZDsK
LSAgICBJZFRvU3R5bGVNYXAgaWRUb1N0eWxlOwotICAgIFJ1bGVUb0lkTWFwIHJ1bGVUb0lkOwot
ICAgIElkVG9SdWxlTWFwIGlkVG9SdWxlOwotICAgIElkVG9EaXNhYmxlZFN0eWxlTWFwIGlkVG9E
aXNhYmxlZFN0eWxlOwotICAgIFJlZlB0cjxDU1NTdHlsZVNoZWV0PiBpbnNwZWN0b3JTdHlsZVNo
ZWV0OworICAgIEluc3BlY3RvckNvbnRyb2xsZXIqIG1faW5zcGVjdG9yQ29udHJvbGxlcjsKKyAg
ICBsb25nIG1fbGFzdFN0eWxlSWQ7CisgICAgbG9uZyBtX2xhc3RTdHlsZVNoZWV0SWQ7CisgICAg
bG9uZyBtX2xhc3RSdWxlSWQ7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1n
aXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmNwcCBiL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCmluZGV4IDNiMzZhNGEuLjlmOThhYjIg
MTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCisr
KyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwCkBAIC0xNDUsNyAr
MTQ1LDcgQEAgSW5zcGVjdG9yQ29udHJvbGxlcjo6SW5zcGVjdG9yQ29udHJvbGxlcihQYWdlKiBw
YWdlLCBJbnNwZWN0b3JDbGllbnQqIGNsaWVudCkKICAgICA6IG1faW5zcGVjdGVkUGFnZShwYWdl
KQogICAgICwgbV9jbGllbnQoY2xpZW50KQogICAgICwgbV9vcGVuaW5nRnJvbnRlbmQoZmFsc2Up
Ci0gICAgLCBtX2Nzc1N0b3JlKG5ldyBJbnNwZWN0b3JDU1NTdG9yZSgpKQorICAgICwgbV9jc3NT
dG9yZShuZXcgSW5zcGVjdG9yQ1NTU3RvcmUodGhpcykpCiAgICAgLCBtX2V4cGlyZWRDb25zb2xl
TWVzc2FnZUNvdW50KDApCiAgICAgLCBtX3Nob3dBZnRlclZpc2libGUoQ3VycmVudFBhbmVsKQog
ICAgICwgbV9ncm91cExldmVsKDApCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JDb250cm9sbGVyLmggYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDb250cm9sbGVy
LmgKaW5kZXggYTkwYjI5OS4uYTkyMTk1ZSAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yQ29udHJvbGxlci5oCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNv
bnRyb2xsZXIuaApAQCAtNiwxMyArNiwxMyBAQAogICogYXJlIG1ldDoKICAqCiAgKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuIAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KICAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAogICogICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9v
ciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgogICogMy4g
IE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0
aGUgbmFtZXMgb2YKICAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9y
c2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJl
IHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKKyAqICAgICBmcm9t
IHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24u
CiAgKgogICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRS
SUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKICAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVT
LCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKQEAgLTY1LDcgKzY1
LDcgQEAgY2xhc3MgSW5qZWN0ZWRTY3JpcHQ7CiBjbGFzcyBJbmplY3RlZFNjcmlwdEhvc3Q7CiBj
bGFzcyBJbnNwZWN0b3JCYWNrZW5kOwogY2xhc3MgSW5zcGVjdG9yQ2xpZW50Owotc3RydWN0IElu
c3BlY3RvckNTU1N0b3JlOworY2xhc3MgSW5zcGVjdG9yQ1NTU3RvcmU7CiBjbGFzcyBJbnNwZWN0
b3JGcm9udGVuZDsKIGNsYXNzIEluc3BlY3RvckZyb250ZW5kQ2xpZW50OwogY2xhc3MgSW5zcGVj
dG9yVGltZWxpbmVBZ2VudDsKQEAgLTE0Nyw3ICsxNDcsNyBAQCBwdWJsaWM6CiAKICAgICB2b2lk
IHNldEluc3BlY3RvckZyb250ZW5kQ2xpZW50KFBhc3NPd25QdHI8SW5zcGVjdG9yRnJvbnRlbmRD
bGllbnQ+IGNsaWVudCk7CiAgICAgYm9vbCBoYXNJbnNwZWN0b3JGcm9udGVuZENsaWVudCgpIGNv
bnN0IHsgcmV0dXJuIG1faW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ7IH0KLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAgICB2b2lkIGlu
c3BlY3RlZFdpbmRvd1NjcmlwdE9iamVjdENsZWFyZWQoRnJhbWUqKTsKIAogICAgIGJvb2wgd2lu
ZG93VmlzaWJsZSgpOwpAQCAtMjU4LDEwICsyNTgsMTAgQEAgcHJpdmF0ZToKIAogICAgIGZyaWVu
ZCBjbGFzcyBJbnNwZWN0b3JCYWNrZW5kOwogICAgIGZyaWVuZCBjbGFzcyBJbmplY3RlZFNjcmlw
dEhvc3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIAorCiAgICAgdm9pZCBwb3B1bGF0ZVNjcmlwdE9iamVjdHMoKTsKICAgICB2b2lkIHVu
YmluZEFsbFJlc291cmNlcygpOwotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAKKwogICAgIC8vIEZvbGxvd2luZyBhcmUgdXNlZCBmcm9tIElu
c3BlY3RvckJhY2tlbmQgYW5kIGludGVybmFsbHkuCiAgICAgdm9pZCBzZXRTZWFyY2hpbmdGb3JO
b2RlKGJvb2wgZW5hYmxlZCk7CiAKQEAgLTI5Miw3ICsyOTIsNyBAQCBwcml2YXRlOgogI2lmIEVO
QUJMRShET01fU1RPUkFHRSkKICAgICBJbnNwZWN0b3JET01TdG9yYWdlUmVzb3VyY2UqIGdldERP
TVN0b3JhZ2VSZXNvdXJjZUZvcklkKGxvbmcgc3RvcmFnZUlkKTsKICNlbmRpZgotICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgIFNj
cmlwdE9iamVjdCBidWlsZE9iamVjdEZvckNvb2tpZShjb25zdCBDb29raWUmKTsKICAgICBTY3Jp
cHRBcnJheSBidWlsZEFycmF5Rm9yQ29va2llcyhMaXN0SGFzaFNldDxDb29raWU+Jik7CiAKZGlm
ZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcCBiL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcAppbmRleCAwODMzZTE1Li5lMTEzNmRj
IDEwMDY0NAotLS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAKKysr
IGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCkBAIC03OCw4ICs3OCw2
IEBAIEluc3BlY3RvckRPTUFnZW50OjpJbnNwZWN0b3JET01BZ2VudChJbnNwZWN0b3JDU1NTdG9y
ZSogY3NzU3RvcmUsIEluc3BlY3RvckZyb250CiAgICAgLCBtX2Nzc1N0b3JlKGNzc1N0b3JlKQog
ICAgICwgbV9mcm9udGVuZChmcm9udGVuZCkKICAgICAsIG1fbGFzdE5vZGVJZCgxKQotICAgICwg
bV9sYXN0U3R5bGVJZCgxKQotICAgICwgbV9sYXN0UnVsZUlkKDEpCiB7CiB9CiAKQEAgLTkwMCwx
OCArODk4LDE3IEBAIFNjcmlwdEFycmF5IEluc3BlY3RvckRPTUFnZW50OjpidWlsZEFycmF5Rm9y
UHNldWRvRWxlbWVudHMoRWxlbWVudCogZWxlbWVudCwgYm9vCiAKIHZvaWQgSW5zcGVjdG9yRE9N
QWdlbnQ6OmFwcGx5U3R5bGVUZXh0KGxvbmcgY2FsbElkLCBsb25nIHN0eWxlSWQsIGNvbnN0IFN0
cmluZyYgc3R5bGVUZXh0LCBjb25zdCBTdHJpbmcmIHByb3BlcnR5TmFtZSkKIHsKLSAgICBJZFRv
U3R5bGVNYXA6Oml0ZXJhdG9yIGl0ID0gY3NzU3RvcmUoKS0+aWRUb1N0eWxlLmZpbmQoc3R5bGVJ
ZCk7Ci0gICAgaWYgKGl0ID09IGNzc1N0b3JlKCktPmlkVG9TdHlsZS5lbmQoKSkgeworICAgIENT
U1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlID0gY3NzU3RvcmUoKS0+c3R5bGVGb3JJZChzdHlsZUlk
KTsKKyAgICBpZiAoIXN0eWxlKSB7CiAgICAgICAgIG1fZnJvbnRlbmQtPmRpZEFwcGx5U3R5bGVU
ZXh0KGNhbGxJZCwgZmFsc2UsIFNjcmlwdFZhbHVlOjp1bmRlZmluZWQoKSwgbV9mcm9udGVuZC0+
bmV3U2NyaXB0QXJyYXkoKSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKICAgICAvLyBSZW1v
dmUgZGlzYWJsZWQgcHJvcGVydHkgZW50cnkgZm9yIHByb3BlcnR5IHdpdGggZ2l2ZW4gbmFtZS4K
LSAgICBJZFRvRGlzYWJsZWRTdHlsZU1hcDo6aXRlcmF0b3IgZGlzYWJsZWRJdCA9IGNzc1N0b3Jl
KCktPmlkVG9EaXNhYmxlZFN0eWxlLmZpbmQoc3R5bGVJZCk7Ci0gICAgaWYgKGRpc2FibGVkSXQg
IT0gY3NzU3RvcmUoKS0+aWRUb0Rpc2FibGVkU3R5bGUuZW5kKCkpCi0gICAgICAgIGRpc2FibGVk
SXQtPnNlY29uZC5yZW1vdmUocHJvcGVydHlOYW1lKTsKKyAgICBEaXNhYmxlZFN0eWxlRGVjbGFy
YXRpb24qIGRpc2FibGVkU3R5bGUgPSBjc3NTdG9yZSgpLT5kaXNhYmxlZFN0eWxlRm9ySWQoc3R5
bGVJZCwgZmFsc2UpOworICAgIGlmIChkaXNhYmxlZFN0eWxlKQorICAgICAgICBkaXNhYmxlZFN0
eWxlLT5yZW1vdmUocHJvcGVydHlOYW1lKTsKIAotICAgIENTU1N0eWxlRGVjbGFyYXRpb24qIHN0
eWxlID0gaXQtPnNlY29uZC5nZXQoKTsKICAgICBpbnQgc3R5bGVUZXh0TGVuZ3RoID0gc3R5bGVU
ZXh0Lmxlbmd0aCgpOwogCiAgICAgUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiB0
ZW1wTXV0YWJsZVN0eWxlID0gQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmNyZWF0ZSgpOwpA
QCAtOTc5LDggKzk3Niw4IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmFwcGx5U3R5bGVUZXh0
KGxvbmcgY2FsbElkLCBsb25nIHN0eWxlSWQsIGNvbnN0IFN0cmluZyYKICAgICAgICAgRXhjZXB0
aW9uQ29kZSBlYyA9IDA7CiAgICAgICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShuYW1lLCB2YWx1ZSwg
cHJpb3JpdHksIGVjKTsKICAgICAgICAgLy8gUmVtb3ZlIGRpc2FibGVkIHByb3BlcnR5IGVudHJ5
IGZvciBwcm9wZXJ0eSB3aXRoIHRoaXMgbmFtZS4KLSAgICAgICAgaWYgKGRpc2FibGVkSXQgIT0g
Y3NzU3RvcmUoKS0+aWRUb0Rpc2FibGVkU3R5bGUuZW5kKCkpCi0gICAgICAgICAgICBkaXNhYmxl
ZEl0LT5zZWNvbmQucmVtb3ZlKG5hbWUpOworICAgICAgICBpZiAoZGlzYWJsZWRTdHlsZSkKKyAg
ICAgICAgICAgIGRpc2FibGVkU3R5bGUtPnJlbW92ZShuYW1lKTsKICAgICAgICAgY2hhbmdlZFBy
b3BlcnRpZXMuYXBwZW5kKG5hbWUpOwogICAgIH0KICAgICBtX2Zyb250ZW5kLT5kaWRBcHBseVN0
eWxlVGV4dChjYWxsSWQsIHRydWUsIGJ1aWxkT2JqZWN0Rm9yU3R5bGUoc3R5bGUsIHRydWUpLCB0
b0FycmF5KGNoYW5nZWRQcm9wZXJ0aWVzKSk7CkBAIC05ODgsMTIgKzk4NSwxMSBAQCB2b2lkIElu
c3BlY3RvckRPTUFnZW50OjphcHBseVN0eWxlVGV4dChsb25nIGNhbGxJZCwgbG9uZyBzdHlsZUlk
LCBjb25zdCBTdHJpbmcmCiAKIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnNldFN0eWxlVGV4dChs
b25nIGNhbGxJZCwgbG9uZyBzdHlsZUlkLCBjb25zdCBTdHJpbmcmIGNzc1RleHQpCiB7Ci0gICAg
SWRUb1N0eWxlTWFwOjppdGVyYXRvciBpdCA9IGNzc1N0b3JlKCktPmlkVG9TdHlsZS5maW5kKHN0
eWxlSWQpOwotICAgIGlmIChpdCA9PSBjc3NTdG9yZSgpLT5pZFRvU3R5bGUuZW5kKCkpIHsKKyAg
ICBDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSA9IGNzc1N0b3JlKCktPnN0eWxlRm9ySWQoc3R5
bGVJZCk7CisgICAgaWYgKCFzdHlsZSkgewogICAgICAgICBtX2Zyb250ZW5kLT5kaWRTZXRTdHls
ZVRleHQoY2FsbElkLCBmYWxzZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgQ1NTU3R5
bGVEZWNsYXJhdGlvbiogc3R5bGUgPSBpdC0+c2Vjb25kLmdldCgpOwogICAgIEV4Y2VwdGlvbkNv
ZGUgZWMgPSAwOwogICAgIHN0eWxlLT5zZXRDc3NUZXh0KGNzc1RleHQsIGVjKTsKICAgICBtX2Zy
b250ZW5kLT5kaWRTZXRTdHlsZVRleHQoY2FsbElkLCAhZWMpOwpAQCAtMTAwMSwxMyArOTk3LDEy
IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnNldFN0eWxlVGV4dChsb25nIGNhbGxJZCwgbG9u
ZyBzdHlsZUlkLCBjb25zdCBTdHJpbmcmIGNzCiAKIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnNl
dFN0eWxlUHJvcGVydHkobG9uZyBjYWxsSWQsIGxvbmcgc3R5bGVJZCwgY29uc3QgU3RyaW5nJiBu
YW1lLCBjb25zdCBTdHJpbmcmIHZhbHVlKQogewotICAgIElkVG9TdHlsZU1hcDo6aXRlcmF0b3Ig
aXQgPSBjc3NTdG9yZSgpLT5pZFRvU3R5bGUuZmluZChzdHlsZUlkKTsKLSAgICBpZiAoaXQgPT0g
Y3NzU3RvcmUoKS0+aWRUb1N0eWxlLmVuZCgpKSB7CisgICAgQ1NTU3R5bGVEZWNsYXJhdGlvbiog
c3R5bGUgPSBjc3NTdG9yZSgpLT5zdHlsZUZvcklkKHN0eWxlSWQpOworICAgIGlmICghc3R5bGUp
IHsKICAgICAgICAgbV9mcm9udGVuZC0+ZGlkU2V0U3R5bGVQcm9wZXJ0eShjYWxsSWQsIGZhbHNl
KTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIENTU1N0eWxlRGVjbGFyYXRpb24qIHN0
eWxlID0gaXQtPnNlY29uZC5nZXQoKTsKICAgICBFeGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBz
dHlsZS0+c2V0UHJvcGVydHkobmFtZSwgdmFsdWUsIGVjKTsKICAgICBtX2Zyb250ZW5kLT5kaWRT
ZXRTdHlsZVByb3BlcnR5KGNhbGxJZCwgIWVjKTsKQEAgLTEwMTUsMjggKzEwMTAsMjUgQEAgdm9p
ZCBJbnNwZWN0b3JET01BZ2VudDo6c2V0U3R5bGVQcm9wZXJ0eShsb25nIGNhbGxJZCwgbG9uZyBz
dHlsZUlkLCBjb25zdCBTdHJpbmcKIAogdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6dG9nZ2xlU3R5
bGVFbmFibGVkKGxvbmcgY2FsbElkLCBsb25nIHN0eWxlSWQsIGNvbnN0IFN0cmluZyYgcHJvcGVy
dHlOYW1lLCBib29sIGRpc2FibGVkKQogewotICAgIElkVG9TdHlsZU1hcDo6aXRlcmF0b3IgaXQg
PSBjc3NTdG9yZSgpLT5pZFRvU3R5bGUuZmluZChzdHlsZUlkKTsKLSAgICBpZiAoaXQgPT0gY3Nz
U3RvcmUoKS0+aWRUb1N0eWxlLmVuZCgpKSB7CisgICAgQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5
bGUgPSBjc3NTdG9yZSgpLT5zdHlsZUZvcklkKHN0eWxlSWQpOworICAgIGlmICghc3R5bGUpIHsK
ICAgICAgICAgbV9mcm9udGVuZC0+ZGlkVG9nZ2xlU3R5bGVFbmFibGVkKGNhbGxJZCwgU2NyaXB0
VmFsdWU6OnVuZGVmaW5lZCgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBDU1NTdHls
ZURlY2xhcmF0aW9uKiBzdHlsZSA9IGl0LT5zZWNvbmQuZ2V0KCk7CiAKLSAgICBJZFRvRGlzYWJs
ZWRTdHlsZU1hcDo6aXRlcmF0b3IgZGlzYWJsZWRJdCA9IGNzc1N0b3JlKCktPmlkVG9EaXNhYmxl
ZFN0eWxlLmZpbmQoc3R5bGVJZCk7Ci0gICAgaWYgKGRpc2FibGVkSXQgPT0gY3NzU3RvcmUoKS0+
aWRUb0Rpc2FibGVkU3R5bGUuZW5kKCkpCi0gICAgICAgIGRpc2FibGVkSXQgPSBjc3NTdG9yZSgp
LT5pZFRvRGlzYWJsZWRTdHlsZS5zZXQoc3R5bGVJZCwgRGlzYWJsZWRTdHlsZURlY2xhcmF0aW9u
KCkpLmZpcnN0OworICAgIERpc2FibGVkU3R5bGVEZWNsYXJhdGlvbiogZGlzYWJsZWRTdHlsZSA9
IGNzc1N0b3JlKCktPmRpc2FibGVkU3R5bGVGb3JJZChzdHlsZUlkLCB0cnVlKTsKIAogICAgIC8v
IFRPRE86IG1ha2Ugc3VyZSB0aGlzIHdvcmtzIHdpdGggc2hvcnRoYW5kcyByaWdodC4KICAgICBF
eGNlcHRpb25Db2RlIGVjID0gMDsKICAgICBpZiAoZGlzYWJsZWQpIHsKLSAgICAgICAgZGlzYWJs
ZWRJdC0+c2Vjb25kLnNldChwcm9wZXJ0eU5hbWUsIHN0ZDo6bWFrZV9wYWlyKHN0eWxlLT5nZXRQ
cm9wZXJ0eVZhbHVlKHByb3BlcnR5TmFtZSksIHN0eWxlLT5nZXRQcm9wZXJ0eVByaW9yaXR5KHBy
b3BlcnR5TmFtZSkpKTsKKyAgICAgICAgZGlzYWJsZWRTdHlsZS0+c2V0KHByb3BlcnR5TmFtZSwg
c3RkOjptYWtlX3BhaXIoc3R5bGUtPmdldFByb3BlcnR5VmFsdWUocHJvcGVydHlOYW1lKSwgc3R5
bGUtPmdldFByb3BlcnR5UHJpb3JpdHkocHJvcGVydHlOYW1lKSkpOwogICAgICAgICBpZiAoIWVj
KQogICAgICAgICAgICAgc3R5bGUtPnJlbW92ZVByb3BlcnR5KHByb3BlcnR5TmFtZSwgZWMpOwot
ICAgIH0gZWxzZSBpZiAoZGlzYWJsZWRJdC0+c2Vjb25kLmNvbnRhaW5zKHByb3BlcnR5TmFtZSkp
IHsKLSAgICAgICAgUHJvcGVydHlWYWx1ZUFuZFByaW9yaXR5IHZhbHVlQW5kUHJpb3JpdHkgPSBk
aXNhYmxlZEl0LT5zZWNvbmQuZ2V0KHByb3BlcnR5TmFtZSk7CisgICAgfSBlbHNlIGlmIChkaXNh
YmxlZFN0eWxlLT5jb250YWlucyhwcm9wZXJ0eU5hbWUpKSB7CisgICAgICAgIFByb3BlcnR5VmFs
dWVBbmRQcmlvcml0eSB2YWx1ZUFuZFByaW9yaXR5ID0gZGlzYWJsZWRTdHlsZS0+Z2V0KHByb3Bl
cnR5TmFtZSk7CiAgICAgICAgIHN0eWxlLT5zZXRQcm9wZXJ0eShwcm9wZXJ0eU5hbWUsIHZhbHVl
QW5kUHJpb3JpdHkuZmlyc3QsIHZhbHVlQW5kUHJpb3JpdHkuc2Vjb25kLCBlYyk7CiAgICAgICAg
IGlmICghZWMpCi0gICAgICAgICAgICBkaXNhYmxlZEl0LT5zZWNvbmQucmVtb3ZlKHByb3BlcnR5
TmFtZSk7CisgICAgICAgICAgICBkaXNhYmxlZFN0eWxlLT5yZW1vdmUocHJvcGVydHlOYW1lKTsK
ICAgICB9CiAgICAgaWYgKGVjKSB7CiAgICAgICAgIG1fZnJvbnRlbmQtPmRpZFRvZ2dsZVN0eWxl
RW5hYmxlZChjYWxsSWQsIFNjcmlwdFZhbHVlOjp1bmRlZmluZWQoKSk7CkBAIC0xMDQ3LDEzICsx
MDM5LDEyIEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OnRvZ2dsZVN0eWxlRW5hYmxlZChsb25n
IGNhbGxJZCwgbG9uZyBzdHlsZUlkLCBjb25zdCBTdHJpCiAKIHZvaWQgSW5zcGVjdG9yRE9NQWdl
bnQ6OnNldFJ1bGVTZWxlY3Rvcihsb25nIGNhbGxJZCwgbG9uZyBydWxlSWQsIGNvbnN0IFN0cmlu
ZyYgc2VsZWN0b3IsIGxvbmcgc2VsZWN0ZWROb2RlSWQpCiB7Ci0gICAgSWRUb1J1bGVNYXA6Oml0
ZXJhdG9yIGl0ID0gY3NzU3RvcmUoKS0+aWRUb1J1bGUuZmluZChydWxlSWQpOwotICAgIGlmIChp
dCA9PSBjc3NTdG9yZSgpLT5pZFRvUnVsZS5lbmQoKSkgeworICAgIENTU1N0eWxlUnVsZSogcnVs
ZSA9IGNzc1N0b3JlKCktPnJ1bGVGb3JJZChydWxlSWQpOworICAgIGlmICghcnVsZSkgewogICAg
ICAgICBtX2Zyb250ZW5kLT5kaWRTZXRSdWxlU2VsZWN0b3IoY2FsbElkLCBTY3JpcHRWYWx1ZTo6
dW5kZWZpbmVkKCksIGZhbHNlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIENTU1N0
eWxlUnVsZSogcnVsZSA9IGl0LT5zZWNvbmQuZ2V0KCk7CiAgICAgTm9kZSogbm9kZSA9IG5vZGVG
b3JJZChzZWxlY3RlZE5vZGVJZCk7CiAKICAgICBDU1NTdHlsZVNoZWV0KiBzdHlsZVNoZWV0ID0g
cnVsZS0+cGFyZW50U3R5bGVTaGVldCgpOwpAQCAtMTA4OCw3ICsxMDc5LDggQEAgdm9pZCBJbnNw
ZWN0b3JET01BZ2VudDo6YWRkUnVsZShsb25nIGNhbGxJZCwgY29uc3QgU3RyaW5nJiBzZWxlY3Rv
ciwgbG9uZyBzZWxlY3QKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmICghY3NzU3Rv
cmUoKS0+aW5zcGVjdG9yU3R5bGVTaGVldC5nZXQoKSkgeworICAgIENTU1N0eWxlU2hlZXQqIGlu
c3BlY3RvclN0eWxlU2hlZXQgPSBjc3NTdG9yZSgpLT5pbnNwZWN0b3JTdHlsZVNoZWV0KCk7Cisg
ICAgaWYgKCFpbnNwZWN0b3JTdHlsZVNoZWV0KSB7CiAgICAgICAgIERvY3VtZW50KiBvd25lckRv
Y3VtZW50ID0gbm9kZS0+b3duZXJEb2N1bWVudCgpOwogICAgICAgICBFeGNlcHRpb25Db2RlIGVj
ID0gMDsKICAgICAgICAgUmVmUHRyPEVsZW1lbnQ+IHN0eWxlRWxlbWVudCA9IG93bmVyRG9jdW1l
bnQtPmNyZWF0ZUVsZW1lbnQoInN0eWxlIiwgZWMpOwpAQCAtMTEwNiw1NSArMTA5OCw0NSBAQCB2
b2lkIEluc3BlY3RvckRPTUFnZW50OjphZGRSdWxlKGxvbmcgY2FsbElkLCBjb25zdCBTdHJpbmcm
IHNlbGVjdG9yLCBsb25nIHNlbGVjdAogICAgICAgICAgICAgbV9mcm9udGVuZC0+ZGlkQWRkUnVs
ZShjYWxsSWQsIFNjcmlwdFZhbHVlOjp1bmRlZmluZWQoKSwgZmFsc2UpOwogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9Ci0gICAgICAgIGNzc1N0b3JlKCktPmluc3BlY3RvclN0eWxlU2hl
ZXQgPSBzdGF0aWNfY2FzdDxDU1NTdHlsZVNoZWV0Kj4oc3R5bGVTaGVldCk7CisgICAgICAgIGlu
c3BlY3RvclN0eWxlU2hlZXQgPSBzdGF0aWNfY2FzdDxDU1NTdHlsZVNoZWV0Kj4oc3R5bGVTaGVl
dCk7CisgICAgICAgIGNzc1N0b3JlKCktPnNldEluc3BlY3RvclN0eWxlU2hlZXQoaW5zcGVjdG9y
U3R5bGVTaGVldCk7CiAgICAgfQogCiAgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7Ci0gICAgY3Nz
U3RvcmUoKS0+aW5zcGVjdG9yU3R5bGVTaGVldC0+YWRkUnVsZShzZWxlY3RvciwgIiIsIGVjKTsK
KyAgICBpbnNwZWN0b3JTdHlsZVNoZWV0LT5hZGRSdWxlKHNlbGVjdG9yLCAiIiwgZWMpOwogICAg
IGlmIChlYykgewogICAgICAgICBtX2Zyb250ZW5kLT5kaWRBZGRSdWxlKGNhbGxJZCwgU2NyaXB0
VmFsdWU6OnVuZGVmaW5lZCgpLCBmYWxzZSk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAg
ICBDU1NTdHlsZVJ1bGUqIG5ld1J1bGUgPSBzdGF0aWNfY2FzdDxDU1NTdHlsZVJ1bGUqPihjc3NT
dG9yZSgpLT5pbnNwZWN0b3JTdHlsZVNoZWV0LT5pdGVtKGNzc1N0b3JlKCktPmluc3BlY3RvclN0
eWxlU2hlZXQtPmxlbmd0aCgpIC0gMSkpOworICAgIENTU1N0eWxlUnVsZSogbmV3UnVsZSA9IHN0
YXRpY19jYXN0PENTU1N0eWxlUnVsZSo+KGluc3BlY3RvclN0eWxlU2hlZXQtPml0ZW0oaW5zcGVj
dG9yU3R5bGVTaGVldC0+bGVuZ3RoKCkgLSAxKSk7CiAgICAgbV9mcm9udGVuZC0+ZGlkQWRkUnVs
ZShjYWxsSWQsIGJ1aWxkT2JqZWN0Rm9yUnVsZShuZXdSdWxlKSwgcnVsZUFmZmVjdHNOb2RlKG5l
d1J1bGUsIG5vZGUpKTsKIH0KIAotbG9uZyBJbnNwZWN0b3JET01BZ2VudDo6YmluZFN0eWxlKENT
U1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlKQotewotICAgIGxvbmcgaWQgPSBjc3NTdG9yZSgpLT5z
dHlsZVRvSWQuZ2V0KHN0eWxlKTsKLSAgICBpZiAoIWlkKSB7Ci0gICAgICAgIGlkID0gbV9sYXN0
U3R5bGVJZCsrOwotICAgICAgICBjc3NTdG9yZSgpLT5pZFRvU3R5bGUuc2V0KGlkLCBzdHlsZSk7
Ci0gICAgICAgIGNzc1N0b3JlKCktPnN0eWxlVG9JZC5zZXQoc3R5bGUsIGlkKTsKLSAgICB9Ci0g
ICAgcmV0dXJuIGlkOwotfQotCi1sb25nIEluc3BlY3RvckRPTUFnZW50OjpiaW5kUnVsZShDU1NT
dHlsZVJ1bGUqIHJ1bGUpCi17Ci0gICAgbG9uZyBpZCA9IGNzc1N0b3JlKCktPnJ1bGVUb0lkLmdl
dChydWxlKTsKLSAgICBpZiAoIWlkKSB7Ci0gICAgICAgIGlkID0gbV9sYXN0UnVsZUlkKys7Ci0g
ICAgICAgIGNzc1N0b3JlKCktPmlkVG9SdWxlLnNldChpZCwgcnVsZSk7Ci0gICAgICAgIGNzc1N0
b3JlKCktPnJ1bGVUb0lkLnNldChydWxlLCBpZCk7Ci0gICAgfQotICAgIHJldHVybiBpZDsKLX0K
LQogU2NyaXB0T2JqZWN0IEluc3BlY3RvckRPTUFnZW50OjpidWlsZE9iamVjdEZvclN0eWxlKENT
U1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlLCBib29sIGJpbmQpCiB7CiAgICAgU2NyaXB0T2JqZWN0
IHJlc3VsdCA9IG1fZnJvbnRlbmQtPm5ld1NjcmlwdE9iamVjdCgpOwogICAgIGlmIChiaW5kKSB7
Ci0gICAgICAgIGxvbmcgc3R5bGVJZCA9IGJpbmRTdHlsZShzdHlsZSk7CisgICAgICAgIGxvbmcg
c3R5bGVJZCA9IGNzc1N0b3JlKCktPmJpbmRTdHlsZShzdHlsZSk7CiAgICAgICAgIHJlc3VsdC5z
ZXQoImlkIiwgc3R5bGVJZCk7CiAKLSAgICAgICAgSWRUb0Rpc2FibGVkU3R5bGVNYXA6Oml0ZXJh
dG9yIGRpc2FibGVkSXQgPSBjc3NTdG9yZSgpLT5pZFRvRGlzYWJsZWRTdHlsZS5maW5kKHN0eWxl
SWQpOwotICAgICAgICBpZiAoZGlzYWJsZWRJdCAhPSBjc3NTdG9yZSgpLT5pZFRvRGlzYWJsZWRT
dHlsZS5lbmQoKSkKLSAgICAgICAgICAgIHJlc3VsdC5zZXQoImRpc2FibGVkIiwgYnVpbGRBcnJh
eUZvckRpc2FibGVkU3R5bGVQcm9wZXJ0aWVzKGRpc2FibGVkSXQtPnNlY29uZCkpOworICAgICAg
ICBEaXNhYmxlZFN0eWxlRGVjbGFyYXRpb24qIGRpc2FibGVkU3R5bGUgPSBjc3NTdG9yZSgpLT5k
aXNhYmxlZFN0eWxlRm9ySWQoc3R5bGVJZCwgZmFsc2UpOworICAgICAgICBpZiAoZGlzYWJsZWRT
dHlsZSkKKyAgICAgICAgICAgIHJlc3VsdC5zZXQoImRpc2FibGVkIiwgYnVpbGRBcnJheUZvckRp
c2FibGVkU3R5bGVQcm9wZXJ0aWVzKGRpc2FibGVkU3R5bGUpKTsKICAgICB9CiAgICAgcmVzdWx0
LnNldCgid2lkdGgiLCBzdHlsZS0+Z2V0UHJvcGVydHlWYWx1ZSgid2lkdGgiKSk7CiAgICAgcmVz
dWx0LnNldCgiaGVpZ2h0Iiwgc3R5bGUtPmdldFByb3BlcnR5VmFsdWUoImhlaWdodCIpKTsKKyAg
ICBpZiAoYmluZCkgeworICAgICAgICBDU1NSdWxlKiBwYXJlbnRSdWxlID0gc3R5bGUtPnBhcmVu
dFJ1bGUoKTsKKyAgICAgICAgaWYgKHBhcmVudFJ1bGUgJiYgcGFyZW50UnVsZS0+dHlwZSgpID09
IENTU1J1bGU6OlNUWUxFX1JVTEUpIHsKKyAgICAgICAgICAgIENTU1N0eWxlUnVsZSogcGFyZW50
U3R5bGVSdWxlID0gc3RhdGljX2Nhc3Q8Q1NTU3R5bGVSdWxlKj4ocGFyZW50UnVsZSk7CisgICAg
ICAgICAgICBzdGQ6OnBhaXI8dW5zaWduZWQsIHVuc2lnbmVkPiBzdGFydEVuZCA9IGNzc1N0b3Jl
KCktPmdldFN0YXJ0RW5kT2Zmc2V0cyhwYXJlbnRTdHlsZVJ1bGUpOworICAgICAgICAgICAgaWYg
KHN0YXJ0RW5kLnNlY29uZCkgeworICAgICAgICAgICAgICAgIHJlc3VsdC5zZXQoImJvZHlTdGFy
dE9mZnNldCIsIHN0YXJ0RW5kLmZpcnN0KTsKKyAgICAgICAgICAgICAgICByZXN1bHQuc2V0KCJi
b2R5RW5kT2Zmc2V0Iiwgc3RhcnRFbmQuc2Vjb25kKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0KICAgICBwb3B1bGF0ZU9iamVjdFdpdGhTdHlsZVByb3BlcnRpZXMoc3R5bGUsIHJl
c3VsdCk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KQEAgLTExODQsMTEgKzExNjYsMTEgQEAgdm9p
ZCBJbnNwZWN0b3JET01BZ2VudDo6cG9wdWxhdGVPYmplY3RXaXRoU3R5bGVQcm9wZXJ0aWVzKENT
U1N0eWxlRGVjbGFyYXRpb24qIHMKICAgICB9CiB9CiAKLVNjcmlwdEFycmF5IEluc3BlY3RvckRP
TUFnZW50OjpidWlsZEFycmF5Rm9yRGlzYWJsZWRTdHlsZVByb3BlcnRpZXMoRGlzYWJsZWRTdHls
ZURlY2xhcmF0aW9uJiBkZWNsYXJhdGlvbikKK1NjcmlwdEFycmF5IEluc3BlY3RvckRPTUFnZW50
OjpidWlsZEFycmF5Rm9yRGlzYWJsZWRTdHlsZVByb3BlcnRpZXMoRGlzYWJsZWRTdHlsZURlY2xh
cmF0aW9uKiBkZWNsYXJhdGlvbikKIHsKICAgICBpbnQgY291bnRlciA9IDA7CiAgICAgU2NyaXB0
QXJyYXkgcHJvcGVydGllcyA9IG1fZnJvbnRlbmQtPm5ld1NjcmlwdEFycmF5KCk7Ci0gICAgZm9y
IChEaXNhYmxlZFN0eWxlRGVjbGFyYXRpb246Oml0ZXJhdG9yIGl0ID0gZGVjbGFyYXRpb24uYmVn
aW4oKTsgaXQgIT0gZGVjbGFyYXRpb24uZW5kKCk7ICsraXQpIHsKKyAgICBmb3IgKERpc2FibGVk
U3R5bGVEZWNsYXJhdGlvbjo6aXRlcmF0b3IgaXQgPSBkZWNsYXJhdGlvbi0+YmVnaW4oKTsgaXQg
IT0gZGVjbGFyYXRpb24tPmVuZCgpOyArK2l0KSB7CiAgICAgICAgIFNjcmlwdE9iamVjdCBwcm9w
ZXJ0eSA9IG1fZnJvbnRlbmQtPm5ld1NjcmlwdE9iamVjdCgpOwogICAgICAgICBwcm9wZXJ0eS5z
ZXQoIm5hbWUiLCBpdC0+Zmlyc3QpOwogICAgICAgICBwcm9wZXJ0eS5zZXQoInZhbHVlIiwgaXQt
PnNlY29uZC5maXJzdCk7CkBAIC0xMjI3LDYgKzEyMDksMTEgQEAgU2NyaXB0T2JqZWN0IEluc3Bl
Y3RvckRPTUFnZW50OjpidWlsZE9iamVjdEZvclJ1bGUoQ1NTU3R5bGVSdWxlKiBydWxlKQogICAg
IHJlc3VsdC5zZXQoInNlbGVjdG9yVGV4dCIsIHJ1bGUtPnNlbGVjdG9yVGV4dCgpKTsKICAgICBy
ZXN1bHQuc2V0KCJjc3NUZXh0IiwgcnVsZS0+Y3NzVGV4dCgpKTsKICAgICByZXN1bHQuc2V0KCJz
b3VyY2VMaW5lIiwgcnVsZS0+c291cmNlTGluZSgpKTsKKyAgICBzdGQ6OnBhaXI8dW5zaWduZWQs
IHVuc2lnbmVkPiBzdGFydEVuZCA9IGNzc1N0b3JlKCktPmdldFN0YXJ0RW5kT2Zmc2V0cyhydWxl
KTsKKyAgICBpZiAoc3RhcnRFbmQuc2Vjb25kKSB7CisgICAgICAgIHJlc3VsdC5zZXQoImJvZHlT
dGFydE9mZnNldCIsIHN0YXJ0RW5kLmZpcnN0KTsKKyAgICAgICAgcmVzdWx0LnNldCgiYm9keUVu
ZE9mZnNldCIsIHN0YXJ0RW5kLnNlY29uZCk7CisgICAgfQogICAgIGlmIChwYXJlbnRTdHlsZVNo
ZWV0KSB7CiAgICAgICAgIFNjcmlwdE9iamVjdCBwYXJlbnRTdHlsZVNoZWV0VmFsdWUgPSBtX2Zy
b250ZW5kLT5uZXdTY3JpcHRPYmplY3QoKTsKICAgICAgICAgcmVzdWx0LnNldCgicGFyZW50U3R5
bGVTaGVldCIsIHBhcmVudFN0eWxlU2hlZXRWYWx1ZSk7CkBAIC0xMjM2LDE0ICsxMjIzLDE0IEBA
IFNjcmlwdE9iamVjdCBJbnNwZWN0b3JET01BZ2VudDo6YnVpbGRPYmplY3RGb3JSdWxlKENTU1N0
eWxlUnVsZSogcnVsZSkKICAgICBib29sIGlzVXNlciA9IHBhcmVudFN0eWxlU2hlZXQgJiYgcGFy
ZW50U3R5bGVTaGVldC0+b3duZXJOb2RlKCkgJiYgcGFyZW50U3R5bGVTaGVldC0+b3duZXJOb2Rl
KCktPm5vZGVOYW1lKCkgPT0gIiNkb2N1bWVudCI7CiAgICAgcmVzdWx0LnNldCgiaXNVc2VyQWdl
bnQiLCBpc1VzZXJBZ2VudCk7CiAgICAgcmVzdWx0LnNldCgiaXNVc2VyIiwgaXNVc2VyKTsKLSAg
ICByZXN1bHQuc2V0KCJpc1ZpYUluc3BlY3RvciIsIHJ1bGUtPnBhcmVudFN0eWxlU2hlZXQoKSA9
PSBjc3NTdG9yZSgpLT5pbnNwZWN0b3JTdHlsZVNoZWV0LmdldCgpKTsKKyAgICByZXN1bHQuc2V0
KCJpc1ZpYUluc3BlY3RvciIsIHJ1bGUtPnBhcmVudFN0eWxlU2hlZXQoKSA9PSBjc3NTdG9yZSgp
LT5pbnNwZWN0b3JTdHlsZVNoZWV0KCkpOwogCiAgICAgLy8gQmluZCBlZGl0YWJsZSBzY3JpcHRz
IG9ubHkuCiAgICAgYm9vbCBiaW5kID0gIWlzVXNlckFnZW50ICYmICFpc1VzZXI7CiAgICAgcmVz
dWx0LnNldCgic3R5bGUiLCBidWlsZE9iamVjdEZvclN0eWxlKHJ1bGUtPnN0eWxlKCksIGJpbmQp
KTsKIAogICAgIGlmIChiaW5kKQotICAgICAgICByZXN1bHQuc2V0KCJpZCIsIGJpbmRSdWxlKHJ1
bGUpKTsKKyAgICAgICAgcmVzdWx0LnNldCgiaWQiLCBjc3NTdG9yZSgpLT5iaW5kUnVsZShydWxl
KSk7CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIApkaWZmIC0tZ2l0IGEvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yRE9NQWdlbnQuaCBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFn
ZW50LmgKaW5kZXggYzhhNGUxYS4uM2VkYjVlNyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0
b3IvSW5zcGVjdG9yRE9NQWdlbnQuaAorKysgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JE
T01BZ2VudC5oCkBAIC0xNjIsMTEgKzE2Miw5IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAg
ICAgU3RyaW5nIGRvY3VtZW50VVJMU3RyaW5nKERvY3VtZW50KiBkb2N1bWVudCkgY29uc3Q7CiAg
ICAgICAgIEluc3BlY3RvckNTU1N0b3JlKiBjc3NTdG9yZSgpIHsgcmV0dXJuIG1fY3NzU3RvcmU7
IH0KIAotICAgICAgICBsb25nIGJpbmRTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9uKik7Ci0gICAg
ICAgIGxvbmcgYmluZFJ1bGUoQ1NTU3R5bGVSdWxlKik7CiAgICAgICAgIFNjcmlwdE9iamVjdCBi
dWlsZE9iamVjdEZvclN0eWxlKENTU1N0eWxlRGVjbGFyYXRpb24qLCBib29sIGJpbmQpOwogICAg
ICAgICB2b2lkIHBvcHVsYXRlT2JqZWN0V2l0aFN0eWxlUHJvcGVydGllcyhDU1NTdHlsZURlY2xh
cmF0aW9uKiwgU2NyaXB0T2JqZWN0JiByZXN1bHQpOwotICAgICAgICBTY3JpcHRBcnJheSBidWls
ZEFycmF5Rm9yRGlzYWJsZWRTdHlsZVByb3BlcnRpZXMoRGlzYWJsZWRTdHlsZURlY2xhcmF0aW9u
Jik7CisgICAgICAgIFNjcmlwdEFycmF5IGJ1aWxkQXJyYXlGb3JEaXNhYmxlZFN0eWxlUHJvcGVy
dGllcyhEaXNhYmxlZFN0eWxlRGVjbGFyYXRpb24qKTsKICAgICAgICAgU2NyaXB0T2JqZWN0IGJ1
aWxkT2JqZWN0Rm9yUnVsZShDU1NTdHlsZVJ1bGUqKTsKICAgICAgICAgU2NyaXB0T2JqZWN0IGJ1
aWxkT2JqZWN0Rm9yU3R5bGVTaGVldChDU1NTdHlsZVNoZWV0Kik7CiAgICAgICAgIFZlY3RvcjxT
dHJpbmc+IGxvbmdoYW5kUHJvcGVydGllcyhDU1NTdHlsZURlY2xhcmF0aW9uKiwgY29uc3QgU3Ry
aW5nJiBzaG9ydGhhbmRQcm9wZXJ0eSk7CkBAIC0xODYsOCArMTg0LDYgQEAgbmFtZXNwYWNlIFdl
YkNvcmUgewogICAgICAgICBIYXNoTWFwPGxvbmcsIE5vZGVUb0lkTWFwKj4gbV9pZFRvTm9kZXNN
YXA7CiAgICAgICAgIEhhc2hTZXQ8bG9uZz4gbV9jaGlsZHJlblJlcXVlc3RlZDsKICAgICAgICAg
bG9uZyBtX2xhc3ROb2RlSWQ7Ci0gICAgICAgIGxvbmcgbV9sYXN0U3R5bGVJZDsKLSAgICAgICAg
bG9uZyBtX2xhc3RSdWxlSWQ7CiAgICAgICAgIExpc3RIYXNoU2V0PFJlZlB0cjxEb2N1bWVudD4g
PiBtX2RvY3VtZW50czsKICAgICB9OwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvRE9NQWdlbnQuanMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRE9NQWdl
bnQuanMKaW5kZXggMzM3M2MwNC4uMGNkOWZlNyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL0RPTUFnZW50LmpzCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVu
ZC9ET01BZ2VudC5qcwpAQCAtNDkxLDYgKzQ5MSw4IEBAIFdlYkluc3BlY3Rvci5DU1NTdHlsZURl
Y2xhcmF0aW9uID0gZnVuY3Rpb24ocGF5bG9hZCkKICAgICB0aGlzLmlkID0gcGF5bG9hZC5pZDsK
ICAgICB0aGlzLndpZHRoID0gcGF5bG9hZC53aWR0aDsKICAgICB0aGlzLmhlaWdodCA9IHBheWxv
YWQuaGVpZ2h0OworICAgIHRoaXMuYm9keVN0YXJ0T2Zmc2V0ID0gcGF5bG9hZC5ib2R5U3RhcnRP
ZmZzZXQ7CisgICAgdGhpcy5ib2R5RW5kT2Zmc2V0ID0gcGF5bG9hZC5ib2R5RW5kT2Zmc2V0Owog
ICAgIHRoaXMuX19kaXNhYmxlZFByb3BlcnRpZXMgPSB7fTsKICAgICB0aGlzLl9fZGlzYWJsZWRQ
cm9wZXJ0eVZhbHVlcyA9IHt9OwogICAgIHRoaXMuX19kaXNhYmxlZFByb3BlcnR5UHJpb3JpdGll
cyA9IHt9Owo=
</data>
<flag name="review"
          id="41507"
          type_id="1"
          status="+"
          setter="pfeldman"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>57031</attachid>
            <date>2010-05-25 11:04:54 -0700</date>
            <delta_ts>2010-05-25 14:27:08 -0700</delta_ts>
            <desc>[PATCH] pfeldman&apos;s comments addressed, inspectorStyleSheet bug fixed</desc>
            <filename>ruleoffsets_new.patch</filename>
            <type>text/plain</type>
            <size>45989</size>
            <attacher name="Alexander Pavlov (apavlov)">apavlov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCBlZWEyYWI1Li5mNGE2YjVkIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMTAtMDUt
MjUgIEFsZXhhbmRlciBQYXZsb3YgIDxhcGF2bG92QGNocm9taXVtLm9yZz4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBFeHBvc2UgQ1NTIHJ1bGUgYm9k
eSBzdGFydC9lbmQgb2Zmc2V0cyBpbiB0aGUgcGFyZW50IHN0eWxlc2hlZXQKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTM4OTA2CisKKyAgICAgICAgKiBp
bnNwZWN0b3IvcmVzb3VyY2VzL3N0eWxlcy1zb3VyY2Utb2Zmc2V0cy5jc3M6IEFkZGVkLgorICAg
ICAgICAoYm9keSk6CisgICAgICAgICgvKiBjb21tZW50IGJlZm9yZSBzZWxlY3RvciAqL2JvZHku
bWFpbjEvKiBjb21tZW50IGFmdGVyIHNlbGVjdG9yICovKToKKyAgICAgICAgKGJvZHkubWFpbjIp
OgorICAgICAgICAqIGluc3BlY3Rvci9zdHlsZXMtc291cmNlLW9mZnNldHMtZXhwZWN0ZWQudHh0
OiBBZGRlZC4KKyAgICAgICAgKiBpbnNwZWN0b3Ivc3R5bGVzLXNvdXJjZS1vZmZzZXRzLmh0bWw6
IEFkZGVkLgorCiAyMDEwLTA1LTI1ICBUb255IENoYW5nICA8dG9ueUBjaHJvbWl1bS5vcmc+CiAK
ICAgICAgICAgTm90IHJldmlld2VkLCBmaXhpbmcgdGhlIGV4cGVjdGVkIHJlc3VsdC4KZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9yZXNvdXJjZXMvc3R5bGVzLXNvdXJjZS1vZmZz
ZXRzLmNzcyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9yZXNvdXJjZXMvc3R5bGVzLXNvdXJjZS1v
ZmZzZXRzLmNzcwpuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi5lZjY5ZWU2Ci0t
LSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3Jlc291cmNlcy9zdHlsZXMt
c291cmNlLW9mZnNldHMuY3NzCkBAIC0wLDAgKzEsNyBAQAorYm9keSB7CisgICAgZm9udC1zaXpl
OiAxMnB4OworfQorCisvKiBjb21tZW50IGJlZm9yZSBzZWxlY3RvciAqL2JvZHkubWFpbjEvKiBj
b21tZW50IGFmdGVyIHNlbGVjdG9yICovey8qIGNvbW1lbnQgKi9jb2xvcjogIzAwMDt9LyogY29t
bWVudCAqLworCitib2R5Lm1haW4ye2JhY2tncm91bmQ6IGdyZWVuO30KZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL2luc3BlY3Rvci9zdHlsZXMtc291cmNlLW9mZnNldHMtZXhwZWN0ZWQudHh0IGIv
TGF5b3V0VGVzdHMvaW5zcGVjdG9yL3N0eWxlcy1zb3VyY2Utb2Zmc2V0cy1leHBlY3RlZC50eHQK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjUwMzVkZAotLS0gL2Rldi9udWxs
CisrKyBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9zdHlsZXMtc291cmNlLW9mZnNldHMtZXhwZWN0
ZWQudHh0CkBAIC0wLDAgKzEsNiBAQAorVGVzdHMgdGhhdCBwcm9wZXIgc3RhcnQvZW5kIG9mZnNl
dCBwb3NpdGlvbnMgYXJlIHJlcG9ydGVkIGZvciBDU1MgcnVsZSBib2RpZXMuCisKK2JvZHk6IFs1
LTI4XQorYm9keS5tYWluMTogWzk4LTEyNF0KK2JvZHkubWFpbjI6IFsxNTAtMTY5XQorCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9pbnNwZWN0b3Ivc3R5bGVzLXNvdXJjZS1vZmZzZXRzLmh0bWwg
Yi9MYXlvdXRUZXN0cy9pbnNwZWN0b3Ivc3R5bGVzLXNvdXJjZS1vZmZzZXRzLmh0bWwKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNjQ4YjhjNQotLS0gL2Rldi9udWxsCisrKyBi
L0xheW91dFRlc3RzL2luc3BlY3Rvci9zdHlsZXMtc291cmNlLW9mZnNldHMuaHRtbApAQCAtMCww
ICsxLDU1IEBACis8aHRtbD4KKzxoZWFkPgorCis8bGluayByZWw9InN0eWxlc2hlZXQiIGhyZWY9
InJlc291cmNlcy9zdHlsZXMtc291cmNlLW9mZnNldHMuY3NzIiAtLT4KKworPHNjcmlwdCBzcmM9
Ii4uL2h0dHAvdGVzdHMvaW5zcGVjdG9yL2luc3BlY3Rvci10ZXN0LmpzIj48L3NjcmlwdD4KKzxz
Y3JpcHQgc3JjPSJlbGVtZW50cy10ZXN0cy5qcyI+PC9zY3JpcHQ+Cis8c2NyaXB0PgorCitmdW5j
dGlvbiBkb2l0KCkKK3sKKyAgICBmdW5jdGlvbiBjYWxsYmFjayhzdHlsZXMpCisgICAgeworICAg
ICAgICBpZiAoc3R5bGVzID09PSAicmVmcmVzaGluZyIpCisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIHZhciBtYXRjaGVkQ1NTUnVsZXMgPSBzdHlsZXMubWF0Y2hlZENTU1J1bGVzOworICAg
ICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1hdGNoZWRDU1NSdWxlcy5sZW5ndGg7ICsraSkKKyAg
ICAgICAgICAgIG91dHB1dChtYXRjaGVkQ1NTUnVsZXNbaV0uc2VsZWN0b3JUZXh0ICsgIjogWyIg
KyBtYXRjaGVkQ1NTUnVsZXNbaV0uYm9keVN0YXJ0T2Zmc2V0ICsgIi0iICsgbWF0Y2hlZENTU1J1
bGVzW2ldLmJvZHlFbmRPZmZzZXQgKyAiXSIpOworCisgICAgICAgIG5vdGlmeURvbmUoKTsKKyAg
ICB9CisgICAgZXZhbHVhdGVJbldlYkluc3BlY3RvcigiZnJvbnRlbmRfZHVtcEJvZHlPZmZzZXRz
IiwgY2FsbGJhY2spOworfQorCisKKy8vIEZyb250ZW5kIGZ1bmN0aW9ucy4KKworZnVuY3Rpb24g
ZnJvbnRlbmRfZHVtcEJvZHlPZmZzZXRzKHRlc3RDb250cm9sbGVyKQoreworICAgIGlmICghV2Vi
SW5zcGVjdG9yLnBhbmVscy5yZXNvdXJjZXMucmVzb3VyY2VUcmFja2luZ0VuYWJsZWQpIHsKKyAg
ICAgICAgSW5zcGVjdG9yQmFja2VuZC5lbmFibGVSZXNvdXJjZVRyYWNraW5nKGZhbHNlKTsKKyAg
ICAgICAgcmV0dXJuICJyZWZyZXNoaW5nIjsKKyAgICB9CisKKyAgICB0ZXN0Q29udHJvbGxlci53
YWl0VW50aWxEb25lKCk7CisgICAgZnJvbnRlbmRfZXhwYW5kRE9NU3VidHJlZShXZWJJbnNwZWN0
b3IuZG9tQWdlbnQuZG9jdW1lbnQpOworICAgIHRlc3RDb250cm9sbGVyLnJ1bkFmdGVyUGVuZGlu
Z0Rpc3BhdGNoZXMoZnVuY3Rpb24oKSB7CisgICAgICAgIGZ1bmN0aW9uIGNhbGxiYWNrKHN0eWxl
cykKKyAgICAgICAgeworICAgICAgICAgICAgdGVzdENvbnRyb2xsZXIubm90aWZ5RG9uZShzdHls
ZXMpOworICAgICAgICB9CisgICAgICAgIEluc3BlY3RvckJhY2tlbmQuZ2V0U3R5bGVzKFdlYklu
c3BlY3Rvci5DYWxsYmFjay53cmFwKGNhbGxiYWNrKSwgV2ViSW5zcGVjdG9yLmRvbUFnZW50LmRv
Y3VtZW50LmJvZHkuaWQsIHRydWUpOworICAgIH0pOworfQorCis8L3NjcmlwdD4KKzwvaGVhZD4K
KworPGJvZHkgY2xhc3M9Im1haW4xIG1haW4yIiBvbmxvYWQ9Im9ubG9hZCgpIj4KKzxwPgorVGVz
dHMgdGhhdCBwcm9wZXIgc3RhcnQvZW5kIG9mZnNldCBwb3NpdGlvbnMgYXJlIHJlcG9ydGVkIGZv
ciBDU1MgcnVsZSBib2RpZXMuCis8L3A+CisKKzwvYm9keT4KKzwvaHRtbD4KZGlmZiAtLWdpdCBh
L1dlYkNvcmUvQ2hhbmdlTG9nIGIvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMzdjYzViYS4uZDA5
OTc1MCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvV2ViQ29yZS9DaGFuZ2VM
b2cKQEAgLTEsMyArMSw2OSBAQAorMjAxMC0wNS0yNSAgQWxleGFuZGVyIFBhdmxvdiAgPGFwYXZs
b3ZAY2hyb21pdW0ub3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgIEV4cG9zZSBDU1MgcnVsZSBib2R5IHN0YXJ0L2VuZCBvZmZzZXRzIGluIHRoZSBw
YXJlbnQgc3R5bGVzaGVldAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9Mzg5MDYKKworICAgICAgICBDU1NQYXJzZXI6OnBhcnNlU2hlZXQoKSBhY2NlcHRz
IGFuIG9wdGlvbmFsIGV4dGVybmFsIFZlY3RvciB3aGVyZSB0aGUgc3RhcnQvZW5kIG9mZnNldHMK
KyAgICAgICAgb2YgdGhlIENTU1N0eWxlUnVsZSBib2RpZXMsIHJlbGF0aXZlIHRvIHRoZSBiZWdp
bm5pbmcgb2YgdGhlIHN0eWxlc2hlZXQsIHdpbGwgYmUgc3RvcmVkLgorICAgICAgICBUaGlzIFZl
Y3RvciBpcyBvbmx5IHVzZWQgd2hlbiB0aGUgV2ViIEluc3BlY3RvciBuZWVkcyB0aGUgYm9keSBy
YW5nZXMsIHRodXMgdGhlcmUgaXMgbm8KKyAgICAgICAgbWVtb3J5IG92ZXJoZWFkIHVudGlsIHRo
ZSB1c2VyIHN0YXJ0cyBlZGl0aW5nIHN0eWxlcyB2aWEgdGhlIFdlYiBJbnNwZWN0b3IuCisgICAg
ICAgIEFkZGl0aW9uYWxseSBmaXhlZCBhbiBpc3N1ZSB3aXRoIGEgc2luZ2xlIGluc3BlY3RvclN0
eWxlU2hlZXQgZm9yIGFsbCBmcmFtZXMgaW4gdGhlIHBhZ2UuCisKKyAgICAgICAgVGVzdDogaW5z
cGVjdG9yL3N0eWxlcy1zb3VyY2Utb2Zmc2V0cy5odG1sCisKKyAgICAgICAgKiBjc3MvQ1NTR3Jh
bW1hci55OgorICAgICAgICAqIGNzcy9DU1NQYXJzZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTUGFyc2VyOjpDU1NQYXJzZXIpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpzZXR1
cFBhcnNlcik6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYXJzZXI6OnBhcnNlU2hlZXQpOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjpjcmVhdGVTdHlsZVJ1bGUpOgorICAgICAgICAoV2Vi
Q29yZTo6Q1NTUGFyc2VyOjp1cGRhdGVMYXN0U2VsZWN0b3JMaW5lQW5kUG9zaXRpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTUGFyc2VyOjptYXJrU3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6
Q1NTUGFyc2VyOjptYXJrRW5kKToKKyAgICAgICAgKiBjc3MvQ1NTUGFyc2VyLmg6CisgICAgICAg
IChXZWJDb3JlOjpDU1NQYXJzZXI6OnJlc2V0TWFya3MpOgorICAgICAgICAqIGluc3BlY3Rvci9J
bnNwZWN0b3JDU1NTdG9yZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NTdG9y
ZTo6SW5zcGVjdG9yQ1NTU3RvcmUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTU3Rv
cmU6OnJlc2V0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU1N0b3JlOjpyZW1vdmVE
b2N1bWVudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NTdG9yZTo6aW5zcGVjdG9y
U3R5bGVTaGVldCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NTdG9yZTo6Z2V0U3Rh
cnRFbmRPZmZzZXRzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU1N0b3JlOjpnZXRJ
bmRleEluU3R5bGVSdWxlcyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NTdG9yZTo6
ZGlzYWJsZWRTdHlsZUZvcklkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU1N0b3Jl
OjpzdHlsZUZvcklkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNTU1N0b3JlOjpydWxl
Rm9ySWQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTU3RvcmU6OmJpbmRTdHlsZSk6
CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDU1NTdG9yZTo6YmluZFN0eWxlU2hlZXQpOgor
ICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ1NTU3RvcmU6OmJpbmRSdWxlKToKKyAgICAgICAg
KiBpbnNwZWN0b3IvSW5zcGVjdG9yQ1NTU3RvcmUuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5z
cGVjdG9yQ29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JDb250cm9s
bGVyOjpJbnNwZWN0b3JDb250cm9sbGVyKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckNv
bnRyb2xsZXI6OnJlc291cmNlRm9yVVJMKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9y
Q29udHJvbGxlci5oOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQ29udHJvbGxlcjo6aW5z
cGVjdG9yRnJvbnRlbmQpOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6SW5zcGVjdG9yRE9NQWdl
bnQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OnVuYmluZCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6Z2V0U3R5bGVzKToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvckRPTUFnZW50OjpnZXRBbGxTdHlsZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aWxkQXJyYXlGb3JDU1NSdWxlcyk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6YnVpbGRBcnJheUZvclBzZXVkb0VsZW1lbnRzKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50OjphcHBseVN0eWxlVGV4dCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6c2V0U3R5bGVUZXh0KToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50OjpzZXRTdHlsZVByb3BlcnR5KToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50Ojp0b2dnbGVTdHlsZUVuYWJsZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OnNldFJ1bGVTZWxlY3Rvcik6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6YWRkUnVsZSk6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JET01BZ2VudDo6YnVpbGRPYmplY3RGb3JTdHlsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JET01BZ2VudDo6YnVpbGRBcnJheUZvckRpc2FibGVkU3R5bGVQcm9w
ZXJ0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRPTUFnZW50OjpidWlsZE9iamVj
dEZvclN0eWxlU2hlZXQpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRE9NQWdlbnQ6OmJ1
aWxkT2JqZWN0Rm9yUnVsZSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50
Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9ET01BZ2VudC5qczoKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0aW9uKToKKwogMjAxMC0wNS0yNSAgQW5kZXJz
IEJha2tlbiAgPGFnYmFra2VuQGdtYWlsLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBEYXJp
biBBZGxlci4KZGlmZiAtLWdpdCBhL1dlYkNvcmUvY3NzL0NTU0dyYW1tYXIueSBiL1dlYkNvcmUv
Y3NzL0NTU0dyYW1tYXIueQppbmRleCAzN2M1Mzg1Li5iMWEyYmQ5IDEwMDY0NAotLS0gYS9XZWJD
b3JlL2Nzcy9DU1NHcmFtbWFyLnkKKysrIGIvV2ViQ29yZS9jc3MvQ1NTR3JhbW1hci55CkBAIC04
ODksNyArODg5LDEwIEBAIHVuYXJ5X29wZXJhdG9yOgogCiBydWxlc2V0OgogICAgIHNlbGVjdG9y
X2xpc3QgJ3snIG1heWJlX3NwYWNlIGRlY2xhcmF0aW9uX2xpc3QgY2xvc2luZ19icmFjZSB7Ci0g
ICAgICAgICQkID0gc3RhdGljX2Nhc3Q8Q1NTUGFyc2VyKj4ocGFyc2VyKS0+Y3JlYXRlU3R5bGVS
dWxlKCQxKTsKKyAgICAgICAgQ1NTUGFyc2VyKiBwID0gc3RhdGljX2Nhc3Q8Q1NTUGFyc2VyKj4o
cGFyc2VyKTsKKyAgICAgICAgcC0+bWFya0VuZCgpOworICAgICAgICAkJCA9IHAtPmNyZWF0ZVN0
eWxlUnVsZSgkMSk7CisgICAgICAgIHAtPnJlc2V0TWFya3MoKTsKICAgICB9CiAgIDsKIApAQCAt
OTAxLDcgKzkwNCw3IEBAIHNlbGVjdG9yX2xpc3Q6CiAgICAgICAgICAgICBkZWxldGVBbGxWYWx1
ZXMoKiQkKTsKICAgICAgICAgICAgICQkLT5zaHJpbmsoMCk7CiAgICAgICAgICAgICAkJC0+YXBw
ZW5kKHAtPnNpbmtGbG9hdGluZ1NlbGVjdG9yKCQxKSk7Ci0gICAgICAgICAgICBwLT51cGRhdGVM
YXN0U2VsZWN0b3JMaW5lKCk7CisgICAgICAgICAgICBwLT51cGRhdGVMYXN0U2VsZWN0b3JMaW5l
QW5kUG9zaXRpb24oKTsKICAgICAgICAgfQogICAgIH0KICAgICB8IHNlbGVjdG9yX2xpc3QgJywn
IG1heWJlX3NwYWNlIHNlbGVjdG9yICVwcmVjIFVOSU1QT1JUQU5UX1RPSyB7CkBAIC05MDksNyAr
OTEyLDcgQEAgc2VsZWN0b3JfbGlzdDoKICAgICAgICAgICAgIENTU1BhcnNlciogcCA9IHN0YXRp
Y19jYXN0PENTU1BhcnNlcio+KHBhcnNlcik7CiAgICAgICAgICAgICAkJCA9ICQxOwogICAgICAg
ICAgICAgJCQtPmFwcGVuZChwLT5zaW5rRmxvYXRpbmdTZWxlY3RvcigkNCkpOwotICAgICAgICAg
ICAgcC0+dXBkYXRlTGFzdFNlbGVjdG9yTGluZSgpOworICAgICAgICAgICAgcC0+dXBkYXRlTGFz
dFNlbGVjdG9yTGluZUFuZFBvc2l0aW9uKCk7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAg
JCQgPSAwOwogICAgIH0KZGlmZiAtLWdpdCBhL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAgYi9X
ZWJDb3JlL2Nzcy9DU1NQYXJzZXIuY3BwCmluZGV4IGM5M2Q4M2QuLmYxYWExZDkgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvY3NzL0NTU1BhcnNlci5jcHAKKysrIGIvV2ViQ29yZS9jc3MvQ1NTUGFyc2Vy
LmNwcApAQCAtMTQ2LDYgKzE0Niw5IEBAIENTU1BhcnNlcjo6Q1NTUGFyc2VyKGJvb2wgc3RyaWN0
UGFyc2luZykKICAgICAsIG1faGFzRm9udEZhY2VPbmx5VmFsdWVzKGZhbHNlKQogICAgICwgbV9o
YWRTeW50YWN0aWNhbGx5VmFsaWRDU1NSdWxlKGZhbHNlKQogICAgICwgbV9kZWZhdWx0TmFtZXNw
YWNlKHN0YXJBdG9tKQorICAgICwgbV9zdGFydE9mZnNldCgwKQorICAgICwgbV9lbmRPZmZzZXQo
MCkKKyAgICAsIG1fcnVsZVN0YXJ0RW5kT2Zmc2V0cygwKQogICAgICwgbV9kYXRhKDApCiAgICAg
LCB5eV9zdGFydCgxKQogICAgICwgbV9saW5lKDApCkBAIC0yMjUsMTIgKzIyOCwxNCBAQCB2b2lk
IENTU1BhcnNlcjo6c2V0dXBQYXJzZXIoY29uc3QgY2hhciogcHJlZml4LCBjb25zdCBTdHJpbmcm
IHN0cmluZywgY29uc3QgY2hhcgogICAgIHl5bGVuZyA9IDA7CiAgICAgeXl0ZXh0ID0geXlfY19i
dWZfcCA9IG1fZGF0YTsKICAgICB5eV9ob2xkX2NoYXIgPSAqeXlfY19idWZfcDsKKyAgICByZXNl
dE1hcmtzKCk7CiB9CiAKLXZvaWQgQ1NTUGFyc2VyOjpwYXJzZVNoZWV0KENTU1N0eWxlU2hlZXQq
IHNoZWV0LCBjb25zdCBTdHJpbmcmIHN0cmluZykKK3ZvaWQgQ1NTUGFyc2VyOjpwYXJzZVNoZWV0
KENTU1N0eWxlU2hlZXQqIHNoZWV0LCBjb25zdCBTdHJpbmcmIHN0cmluZywgVmVjdG9yPHN0ZDo6
cGFpcjx1bnNpZ25lZCwgdW5zaWduZWQ+ID4qIHJ1bGVTdGFydEVuZE9mZnNldHMpCiB7CiAgICAg
bV9zdHlsZVNoZWV0ID0gc2hlZXQ7CiAgICAgbV9kZWZhdWx0TmFtZXNwYWNlID0gc3RhckF0b207
IC8vIFJlc2V0IHRoZSBkZWZhdWx0IG5hbWVzcGFjZS4KKyAgICBtX3J1bGVTdGFydEVuZE9mZnNl
dHMgPSBydWxlU3RhcnRFbmRPZmZzZXRzOwogCiAgICAgc2V0dXBQYXJzZXIoIiIsIHN0cmluZywg
IiIpOwogICAgIGNzc3l5cGFyc2UodGhpcyk7CkBAIC01MjM2LDYgKzUyNDEsOCBAQCBDU1NSdWxl
KiBDU1NQYXJzZXI6OmNyZWF0ZVN0eWxlUnVsZShWZWN0b3I8Q1NTU2VsZWN0b3IqPiogc2VsZWN0
b3JzKQogICAgIENTU1N0eWxlUnVsZSogcmVzdWx0ID0gMDsKICAgICBpZiAoc2VsZWN0b3JzKSB7
CiAgICAgICAgIFJlZlB0cjxDU1NTdHlsZVJ1bGU+IHJ1bGUgPSBDU1NTdHlsZVJ1bGU6OmNyZWF0
ZShtX3N0eWxlU2hlZXQsIG1fbGFzdFNlbGVjdG9yTGluZSk7CisgICAgICAgIGlmIChtX3J1bGVT
dGFydEVuZE9mZnNldHMpCisgICAgICAgICAgICBtX3J1bGVTdGFydEVuZE9mZnNldHMtPmFwcGVu
ZChzdGQ6OnBhaXI8dW5zaWduZWQsIHVuc2lnbmVkPihtX3N0YXJ0T2Zmc2V0LCBtX2VuZE9mZnNl
dCkpOwogICAgICAgICBydWxlLT5hZG9wdFNlbGVjdG9yVmVjdG9yKCpzZWxlY3RvcnMpOwogICAg
ICAgICBpZiAobV9oYXNGb250RmFjZU9ubHlWYWx1ZXMpCiAgICAgICAgICAgICBkZWxldGVGb250
RmFjZU9ubHlWYWx1ZXMoKTsKQEAgLTU0ODQsNiArNTQ5MSwyNiBAQCB2b2lkIENTU1BhcnNlcjo6
aW52YWxpZEJsb2NrSGl0KCkKICAgICAgICAgbV9zdHlsZVNoZWV0LT5zZXRIYXNTeW50YWN0aWNh
bGx5VmFsaWRDU1NIZWFkZXIoZmFsc2UpOwogfQogCit2b2lkIENTU1BhcnNlcjo6dXBkYXRlTGFz
dFNlbGVjdG9yTGluZUFuZFBvc2l0aW9uKCkKK3sKKyAgICBtX2xhc3RTZWxlY3RvckxpbmUgPSBt
X2xpbmU7CisgICAgbWFya1N0YXJ0KCk7Cit9CisKK3ZvaWQgQ1NTUGFyc2VyOjptYXJrU3RhcnQo
KQoreworICAgIHVuc2lnbmVkIG9mZnNldCA9IHl5dGV4dCAtIG1fZGF0YTsKKyAgICBpZiAoIW1f
c3RhcnRPZmZzZXQgfHwgb2Zmc2V0IDwgbV9zdGFydE9mZnNldCkKKyAgICAgICAgbV9zdGFydE9m
ZnNldCA9IG9mZnNldDsKK30KKwordm9pZCBDU1NQYXJzZXI6Om1hcmtFbmQoKQoreworICAgIHVu
c2lnbmVkIG9mZnNldCA9IHl5dGV4dCAtIG1fZGF0YTsKKyAgICBpZiAob2Zmc2V0ID4gbV9lbmRP
ZmZzZXQpCisgICAgICAgIG1fZW5kT2Zmc2V0ID0gb2Zmc2V0OworfQorCiBzdGF0aWMgaW50IGNz
c1Byb3BlcnR5SUQoY29uc3QgVUNoYXIqIHByb3BlcnR5TmFtZSwgdW5zaWduZWQgbGVuZ3RoKQog
ewogICAgIGlmICghbGVuZ3RoKQpkaWZmIC0tZ2l0IGEvV2ViQ29yZS9jc3MvQ1NTUGFyc2VyLmgg
Yi9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuaAppbmRleCBkMWE1YTQzLi45MzA1MTIzIDEwMDY0NAot
LS0gYS9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIuaAorKysgYi9XZWJDb3JlL2Nzcy9DU1NQYXJzZXIu
aApAQCAtNTYsNyArNTYsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIENTU1BhcnNl
cihib29sIHN0cmljdFBhcnNpbmcgPSB0cnVlKTsKICAgICAgICAgfkNTU1BhcnNlcigpOwogCi0g
ICAgICAgIHZvaWQgcGFyc2VTaGVldChDU1NTdHlsZVNoZWV0KiwgY29uc3QgU3RyaW5nJik7Cisg
ICAgICAgIHZvaWQgcGFyc2VTaGVldChDU1NTdHlsZVNoZWV0KiwgY29uc3QgU3RyaW5nJiwgVmVj
dG9yPHN0ZDo6cGFpcjx1bnNpZ25lZCwgdW5zaWduZWQ+ID4qIHJ1bGVTdGFydEVuZFBvc2l0aW9u
cyA9IDApOwogICAgICAgICBQYXNzUmVmUHRyPENTU1J1bGU+IHBhcnNlUnVsZShDU1NTdHlsZVNo
ZWV0KiwgY29uc3QgU3RyaW5nJik7CiAgICAgICAgIFBhc3NSZWZQdHI8Q1NTUnVsZT4gcGFyc2VL
ZXlmcmFtZVJ1bGUoQ1NTU3R5bGVTaGVldCosIGNvbnN0IFN0cmluZyYpOwogICAgICAgICBib29s
IHBhcnNlVmFsdWUoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qLCBpbnQgcHJvcElkLCBjb25z
dCBTdHJpbmcmLCBib29sIGltcG9ydGFudCk7CkBAIC0yMDcsNyArMjA3LDcgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogCiAgICAgICAgIFZlY3RvcjxDU1NTZWxlY3Rvcio+KiByZXVzYWJsZVNlbGVj
dG9yVmVjdG9yKCkgeyByZXR1cm4gJm1fcmV1c2FibGVTZWxlY3RvclZlY3RvcjsgfQogCi0gICAg
ICAgIHZvaWQgdXBkYXRlTGFzdFNlbGVjdG9yTGluZSgpIHsgbV9sYXN0U2VsZWN0b3JMaW5lID0g
bV9saW5lOyB9CisgICAgICAgIHZvaWQgdXBkYXRlTGFzdFNlbGVjdG9yTGluZUFuZFBvc2l0aW9u
KCk7CiAKICAgICAgICAgdm9pZCBjbGVhclByb3BlcnRpZXMoKTsKIApAQCAtMjM4LDYgKzIzOCwx
MiBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAgICAgICAgIEF0b21pY1N0cmluZyBtX2RlZmF1bHRO
YW1lc3BhY2U7CiAKICAgICAgICAgLy8gdG9rZW5pemVyIG1ldGhvZHMgYW5kIGRhdGEKKyAgICAg
ICAgdW5zaWduZWQgbV9zdGFydE9mZnNldDsKKyAgICAgICAgdW5zaWduZWQgbV9lbmRPZmZzZXQ7
CisgICAgICAgIFZlY3RvcjxzdGQ6OnBhaXI8dW5zaWduZWQsIHVuc2lnbmVkPiA+KiBtX3J1bGVT
dGFydEVuZE9mZnNldHM7CisgICAgICAgIHZvaWQgbWFya1N0YXJ0KCk7CisgICAgICAgIHZvaWQg
bWFya0VuZCgpOworICAgICAgICB2b2lkIHJlc2V0TWFya3MoKSB7IG1fc3RhcnRPZmZzZXQgPSBt
X2VuZE9mZnNldCA9IDA7IH0KICAgICAgICAgaW50IGxleCh2b2lkKiB5eWx2YWwpOwogICAgICAg
ICBpbnQgdG9rZW4oKSB7IHJldHVybiB5eVRvazsgfQogICAgICAgICBVQ2hhciogdGV4dChpbnQq
IGxlbmd0aCk7CmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NTdG9y
ZS5jcHAgYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NTdG9yZS5jcHAKaW5kZXggZTUz
Njg4Yi4uZmMwYmJmNiAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NT
U3RvcmUuY3BwCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU1N0b3JlLmNwcApA
QCAtMjksMTQgKzI5LDI3IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiSW5zcGVj
dG9yQ1NTU3RvcmUuaCIKIAorI2luY2x1ZGUgIkNTU011dGFibGVTdHlsZURlY2xhcmF0aW9uLmgi
CisjaW5jbHVkZSAiQ1NTUGFyc2VyLmgiCisjaW5jbHVkZSAiQ1NTUnVsZUxpc3QuaCIKICNpbmNs
dWRlICJDU1NTdHlsZURlY2xhcmF0aW9uLmgiCiAjaW5jbHVkZSAiQ1NTU3R5bGVSdWxlLmgiCiAj
aW5jbHVkZSAiQ1NTU3R5bGVTaGVldC5oIgorI2luY2x1ZGUgIkhUTUxIZWFkRWxlbWVudC5oIgor
I2luY2x1ZGUgIkluc3BlY3RvckNvbnRyb2xsZXIuaCIKKyNpbmNsdWRlICJJbnNwZWN0b3JGcm9u
dGVuZC5oIgorI2luY2x1ZGUgIkluc3BlY3RvclJlc291cmNlLmgiCiAjaW5jbHVkZSAiUGxhdGZv
cm1TdHJpbmcuaCIKKyNpbmNsdWRlICJTY3JpcHRPYmplY3QuaCIKKyNpbmNsdWRlICJTdHlsZVNo
ZWV0TGlzdC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLUluc3BlY3RvckNTU1N0b3JlOjpJ
bnNwZWN0b3JDU1NTdG9yZSgpCitJbnNwZWN0b3JDU1NTdG9yZTo6SW5zcGVjdG9yQ1NTU3RvcmUo
SW5zcGVjdG9yQ29udHJvbGxlciogaW5zcGVjdG9yQ29udHJvbGxlcikKKyAgICA6IG1faW5zcGVj
dG9yQ29udHJvbGxlcihpbnNwZWN0b3JDb250cm9sbGVyKQorICAgICwgbV9sYXN0U3R5bGVJZCgx
KQorICAgICwgbV9sYXN0U3R5bGVTaGVldElkKDEpCisgICAgLCBtX2xhc3RSdWxlSWQoMSkKIHsK
IH0KIApAQCAtNDYsMTIgKzU5LDE0OSBAQCBJbnNwZWN0b3JDU1NTdG9yZTo6fkluc3BlY3RvckNT
U1N0b3JlKCkKIAogdm9pZCBJbnNwZWN0b3JDU1NTdG9yZTo6cmVzZXQoKQogewotICAgIHN0eWxl
VG9JZC5jbGVhcigpOwotICAgIGlkVG9TdHlsZS5jbGVhcigpOwotICAgIHJ1bGVUb0lkLmNsZWFy
KCk7Ci0gICAgaWRUb1J1bGUuY2xlYXIoKTsKLSAgICBpZFRvRGlzYWJsZWRTdHlsZS5jbGVhcigp
OwotICAgIGluc3BlY3RvclN0eWxlU2hlZXQgPSAwOworICAgIG1fc3R5bGVUb0lkLmNsZWFyKCk7
CisgICAgbV9pZFRvU3R5bGUuY2xlYXIoKTsKKyAgICBtX3J1bGVUb0lkLmNsZWFyKCk7CisgICAg
bV9pZFRvUnVsZS5jbGVhcigpOworICAgIGRlbGV0ZUFsbFZhbHVlcyhtX3N0eWxlU2hlZXRUb09m
ZnNldHMpOworICAgIG1fc3R5bGVTaGVldFRvT2Zmc2V0cy5jbGVhcigpOworICAgIG1fc3R5bGVT
aGVldFRvSWQuY2xlYXIoKTsKKyAgICBtX2lkVG9TdHlsZVNoZWV0LmNsZWFyKCk7CisgICAgbV9p
ZFRvRGlzYWJsZWRTdHlsZS5jbGVhcigpOworICAgIG1fZG9jdW1lbnROb2RlVG9JbnNwZWN0b3JT
dHlsZVNoZWV0TWFwLmNsZWFyKCk7CisKKyAgICBtX2xhc3RTdHlsZUlkID0gMTsKKyAgICBtX2xh
c3RTdHlsZVNoZWV0SWQgPSAxOworICAgIG1fbGFzdFJ1bGVJZCA9IDE7Cit9CisKK3ZvaWQgSW5z
cGVjdG9yQ1NTU3RvcmU6OnJlbW92ZURvY3VtZW50KERvY3VtZW50KiBkb2MpCit7CisgICAgbV9k
b2N1bWVudE5vZGVUb0luc3BlY3RvclN0eWxlU2hlZXRNYXAucmVtb3ZlKGRvYyk7Cit9CisKK0NT
U1N0eWxlU2hlZXQqIEluc3BlY3RvckNTU1N0b3JlOjppbnNwZWN0b3JTdHlsZVNoZWV0KERvY3Vt
ZW50KiBvd25lckRvY3VtZW50LCBib29sIGNyZWF0ZUlmQWJzZW50LCBsb25nIGNhbGxJZCkKK3sK
KyAgICBEb2N1bWVudFRvU3R5bGVTaGVldE1hcDo6aXRlcmF0b3IgaXQgPSBtX2RvY3VtZW50Tm9k
ZVRvSW5zcGVjdG9yU3R5bGVTaGVldE1hcC5maW5kKG93bmVyRG9jdW1lbnQpOworICAgIGlmIChp
dCAhPSBtX2RvY3VtZW50Tm9kZVRvSW5zcGVjdG9yU3R5bGVTaGVldE1hcC5lbmQoKSkKKyAgICAg
ICAgcmV0dXJuIGl0LT5zZWNvbmQuZ2V0KCk7CisgICAgaWYgKCFjcmVhdGVJZkFic2VudCkKKyAg
ICAgICAgcmV0dXJuIDA7CisgICAgRXhjZXB0aW9uQ29kZSBlYyA9IDA7CisgICAgUmVmUHRyPEVs
ZW1lbnQ+IHN0eWxlRWxlbWVudCA9IG93bmVyRG9jdW1lbnQtPmNyZWF0ZUVsZW1lbnQoInN0eWxl
IiwgZWMpOworICAgIGlmICghZWMpCisgICAgICAgIHN0eWxlRWxlbWVudC0+c2V0QXR0cmlidXRl
KCJ0eXBlIiwgInRleHQvY3NzIiwgZWMpOworICAgIGlmICghZWMpCisgICAgICAgIG93bmVyRG9j
dW1lbnQtPmhlYWQoKS0+YXBwZW5kQ2hpbGQoc3R5bGVFbGVtZW50LCBlYyk7CisgICAgaWYgKGVj
KSB7CisgICAgICAgIG1faW5zcGVjdG9yQ29udHJvbGxlci0+aW5zcGVjdG9yRnJvbnRlbmQoKS0+
ZGlkQWRkUnVsZShjYWxsSWQsIFNjcmlwdFZhbHVlOjp1bmRlZmluZWQoKSwgZmFsc2UpOworICAg
ICAgICByZXR1cm4gMDsKKyAgICB9CisgICAgU3R5bGVTaGVldExpc3QqIHN0eWxlU2hlZXRzID0g
b3duZXJEb2N1bWVudC0+c3R5bGVTaGVldHMoKTsKKyAgICBTdHlsZVNoZWV0KiBzdHlsZVNoZWV0
ID0gc3R5bGVTaGVldHMtPml0ZW0oc3R5bGVTaGVldHMtPmxlbmd0aCgpIC0gMSk7CisgICAgaWYg
KCFzdHlsZVNoZWV0LT5pc0NTU1N0eWxlU2hlZXQoKSkgeworICAgICAgICBtX2luc3BlY3RvckNv
bnRyb2xsZXItPmluc3BlY3RvckZyb250ZW5kKCktPmRpZEFkZFJ1bGUoY2FsbElkLCBTY3JpcHRW
YWx1ZTo6dW5kZWZpbmVkKCksIGZhbHNlKTsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorICAg
IENTU1N0eWxlU2hlZXQqIGluc3BlY3RvclN0eWxlU2hlZXQgPSBzdGF0aWNfY2FzdDxDU1NTdHls
ZVNoZWV0Kj4oc3R5bGVTaGVldCk7CisgICAgbV9kb2N1bWVudE5vZGVUb0luc3BlY3RvclN0eWxl
U2hlZXRNYXAuc2V0KG93bmVyRG9jdW1lbnQsIGluc3BlY3RvclN0eWxlU2hlZXQpOworICAgIHJl
dHVybiBpbnNwZWN0b3JTdHlsZVNoZWV0OworfQorCitTb3VyY2VSYW5nZSBJbnNwZWN0b3JDU1NT
dG9yZTo6Z2V0U3RhcnRFbmRPZmZzZXRzKENTU1N0eWxlUnVsZSogcnVsZSkKK3sKKyAgICBDU1NT
dHlsZVNoZWV0KiBwYXJlbnRTdHlsZVNoZWV0ID0gcnVsZS0+cGFyZW50U3R5bGVTaGVldCgpOwor
ICAgIGlmICghcGFyZW50U3R5bGVTaGVldCkKKyAgICAgICAgcmV0dXJuIHN0ZDo6cGFpcjx1bnNp
Z25lZCwgdW5zaWduZWQ+KDAsIDApOworICAgIFJlZlB0cjxDU1NSdWxlTGlzdD4gb3JpZ2luYWxS
dWxlTGlzdCA9IENTU1J1bGVMaXN0OjpjcmVhdGUocGFyZW50U3R5bGVTaGVldCwgZmFsc2UpOwor
ICAgIHVuc2lnbmVkIHJ1bGVJbmRleCA9IGdldEluZGV4SW5TdHlsZVJ1bGVzKHJ1bGUsIG9yaWdp
bmFsUnVsZUxpc3QuZ2V0KCkpOworICAgIGlmIChydWxlSW5kZXggPT0gVUlOVF9NQVgpCisgICAg
ICAgIHJldHVybiBzdGQ6OnBhaXI8dW5zaWduZWQsIHVuc2lnbmVkPigwLCAwKTsKKyAgICBTdHls
ZVNoZWV0VG9PZmZzZXRzTWFwOjppdGVyYXRvciBpdCA9IG1fc3R5bGVTaGVldFRvT2Zmc2V0cy5m
aW5kKHBhcmVudFN0eWxlU2hlZXQpOworICAgIFZlY3RvcjxTb3VyY2VSYW5nZT4qIG9mZnNldFZl
Y3RvciA9IDA7CisgICAgaWYgKGl0ID09IG1fc3R5bGVTaGVldFRvT2Zmc2V0cy5lbmQoKSkgewor
ICAgICAgICBJbnNwZWN0b3JSZXNvdXJjZSogcmVzb3VyY2UgPSBtX2luc3BlY3RvckNvbnRyb2xs
ZXItPnJlc291cmNlRm9yVVJMKHBhcmVudFN0eWxlU2hlZXQtPmZpbmFsVVJMKCkuc3RyaW5nKCkp
OworICAgICAgICBpZiAocmVzb3VyY2UpIHsKKyAgICAgICAgICAgIG9mZnNldFZlY3RvciA9IG5l
dyBWZWN0b3I8U291cmNlUmFuZ2U+OworICAgICAgICAgICAgUmVmUHRyPENTU1N0eWxlU2hlZXQ+
IG5ld1N0eWxlU2hlZXQgPSBDU1NTdHlsZVNoZWV0OjpjcmVhdGUoKTsKKyAgICAgICAgICAgIENT
U1BhcnNlciBwOworICAgICAgICAgICAgcC5wYXJzZVNoZWV0KG5ld1N0eWxlU2hlZXQuZ2V0KCks
IHJlc291cmNlLT5zb3VyY2VTdHJpbmcoKSwgb2Zmc2V0VmVjdG9yKTsKKyAgICAgICAgICAgIG1f
c3R5bGVTaGVldFRvT2Zmc2V0cy5zZXQocGFyZW50U3R5bGVTaGVldCwgb2Zmc2V0VmVjdG9yKTsK
KyAgICAgICAgfQorICAgIH0gZWxzZQorICAgICAgICBvZmZzZXRWZWN0b3IgPSBpdC0+c2Vjb25k
OworICAgIGlmICghb2Zmc2V0VmVjdG9yKQorICAgICAgICByZXR1cm4gc3RkOjpwYWlyPHVuc2ln
bmVkLCB1bnNpZ25lZD4oMCwgMCk7CisgICAgQVNTRVJUKG9mZnNldFZlY3Rvci0+c2l6ZSgpID4g
cnVsZUluZGV4KTsKKyAgICByZXR1cm4gb2Zmc2V0VmVjdG9yLT5hdChydWxlSW5kZXgpOworfQor
Cit1bnNpZ25lZCBJbnNwZWN0b3JDU1NTdG9yZTo6Z2V0SW5kZXhJblN0eWxlUnVsZXMoQ1NTU3R5
bGVSdWxlKiBydWxlLCBDU1NSdWxlTGlzdCogcnVsZUxpc3QpCit7CisgICAgdW5zaWduZWQgaSA9
IDA7CisgICAgdW5zaWduZWQgcnVsZUluZGV4ID0gMDsKKyAgICB1bnNpZ25lZCBvcmlnaW5hbFJ1
bGVMaXN0TGVuZ3RoID0gcnVsZUxpc3QtPmxlbmd0aCgpOworICAgIHdoaWxlIChpIDwgb3JpZ2lu
YWxSdWxlTGlzdExlbmd0aCkgeworICAgICAgICBpZiAocnVsZUxpc3QtPml0ZW0oaSkgPT0gcnVs
ZSkKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBpZiAocnVsZUxpc3QtPml0ZW0oaSktPnR5
cGUoKSA9PSBDU1NSdWxlOjpTVFlMRV9SVUxFKQorICAgICAgICAgICAgKytydWxlSW5kZXg7Cisg
ICAgICAgICsraTsKKyAgICB9CisgICAgcmV0dXJuIChpID09IG9yaWdpbmFsUnVsZUxpc3RMZW5n
dGgpID8gVUlOVF9NQVggOiBydWxlSW5kZXg7Cit9CisKK0Rpc2FibGVkU3R5bGVEZWNsYXJhdGlv
biogSW5zcGVjdG9yQ1NTU3RvcmU6OmRpc2FibGVkU3R5bGVGb3JJZChsb25nIHN0eWxlSWQsIGJv
b2wgY3JlYXRlSWZBYnNlbnQpCit7CisgICAgSWRUb0Rpc2FibGVkU3R5bGVNYXA6Oml0ZXJhdG9y
IGl0ID0gbV9pZFRvRGlzYWJsZWRTdHlsZS5maW5kKHN0eWxlSWQpOworICAgIGlmIChpdCA9PSBt
X2lkVG9EaXNhYmxlZFN0eWxlLmVuZCgpICYmIGNyZWF0ZUlmQWJzZW50KQorICAgICAgICBpdCA9
IG1faWRUb0Rpc2FibGVkU3R5bGUuc2V0KHN0eWxlSWQsIERpc2FibGVkU3R5bGVEZWNsYXJhdGlv
bigpKS5maXJzdDsKKyAgICByZXR1cm4gaXQgPT0gbV9pZFRvRGlzYWJsZWRTdHlsZS5lbmQoKSA/
IDAgOiAmKGl0LT5zZWNvbmQpOworfQorCitDU1NTdHlsZURlY2xhcmF0aW9uKiBJbnNwZWN0b3JD
U1NTdG9yZTo6c3R5bGVGb3JJZChsb25nIHN0eWxlSWQpCit7CisgICAgSWRUb1N0eWxlTWFwOjpp
dGVyYXRvciBpdCA9IG1faWRUb1N0eWxlLmZpbmQoc3R5bGVJZCk7CisgICAgcmV0dXJuIGl0ID09
IG1faWRUb1N0eWxlLmVuZCgpID8gMCA6IGl0LT5zZWNvbmQuZ2V0KCk7Cit9CisKK0NTU1N0eWxl
UnVsZSogSW5zcGVjdG9yQ1NTU3RvcmU6OnJ1bGVGb3JJZChsb25nIHJ1bGVJZCkKK3sKKyAgICBJ
ZFRvUnVsZU1hcDo6aXRlcmF0b3IgaXQgPSBtX2lkVG9SdWxlLmZpbmQocnVsZUlkKTsKKyAgICBy
ZXR1cm4gaXQgPT0gbV9pZFRvUnVsZS5lbmQoKSA/IDAgOiBpdC0+c2Vjb25kLmdldCgpOworfQor
Citsb25nIEluc3BlY3RvckNTU1N0b3JlOjpiaW5kU3R5bGUoQ1NTU3R5bGVEZWNsYXJhdGlvbiog
c3R5bGUpCit7CisgICAgbG9uZyBpZCA9IG1fc3R5bGVUb0lkLmdldChzdHlsZSk7CisgICAgaWYg
KCFpZCkgeworICAgICAgICBpZCA9IG1fbGFzdFN0eWxlSWQrKzsKKyAgICAgICAgbV9pZFRvU3R5
bGUuc2V0KGlkLCBzdHlsZSk7CisgICAgICAgIG1fc3R5bGVUb0lkLnNldChzdHlsZSwgaWQpOwor
ICAgIH0KKyAgICByZXR1cm4gaWQ7Cit9CisKK2xvbmcgSW5zcGVjdG9yQ1NTU3RvcmU6OmJpbmRT
dHlsZVNoZWV0KENTU1N0eWxlU2hlZXQqIHN0eWxlU2hlZXQpCit7CisgICAgbG9uZyBpZCA9IG1f
c3R5bGVTaGVldFRvSWQuZ2V0KHN0eWxlU2hlZXQpOworICAgIGlmICghaWQpIHsKKyAgICAgICAg
aWQgPSBtX2xhc3RTdHlsZVNoZWV0SWQrKzsKKyAgICAgICAgbV9pZFRvU3R5bGVTaGVldC5zZXQo
aWQsIHN0eWxlU2hlZXQpOworICAgICAgICBtX3N0eWxlU2hlZXRUb0lkLnNldChzdHlsZVNoZWV0
LCBpZCk7CisgICAgfQorICAgIHJldHVybiBpZDsKK30KKworbG9uZyBJbnNwZWN0b3JDU1NTdG9y
ZTo6YmluZFJ1bGUoQ1NTU3R5bGVSdWxlKiBydWxlKQoreworICAgIGxvbmcgaWQgPSBtX3J1bGVU
b0lkLmdldChydWxlKTsKKyAgICBpZiAoIWlkKSB7CisgICAgICAgIGlkID0gbV9sYXN0UnVsZUlk
Kys7CisgICAgICAgIG1faWRUb1J1bGUuc2V0KGlkLCBydWxlKTsKKyAgICAgICAgbV9ydWxlVG9J
ZC5zZXQocnVsZSwgaWQpOworICAgIH0KKyAgICByZXR1cm4gaWQ7CiB9CiAKIH0gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU1N0
b3JlLmggYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JDU1NTdG9yZS5oCmluZGV4IGQyOTBm
YWQuLjYxYzlkOGEgMTAwNjQ0Ci0tLSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckNTU1N0
b3JlLmgKKysrIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ1NTU3RvcmUuaApAQCAtMzYs
MzAgKzM2LDYzIEBACiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAorY2xhc3MgRG9jdW1lbnQ7Citj
bGFzcyBJbnNwZWN0b3JDb250cm9sbGVyOworY2xhc3MgSW5zcGVjdG9yRnJvbnRlbmQ7CitjbGFz
cyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjsKIGNsYXNzIENTU1N0eWxlRGVjbGFyYXRpb247
CitjbGFzcyBDU1NSdWxlTGlzdDsKIGNsYXNzIENTU1N0eWxlUnVsZTsKIGNsYXNzIENTU1N0eWxl
U2hlZXQ7CiBjbGFzcyBTdHJpbmc7CiAKIHR5cGVkZWYgc3RkOjpwYWlyPFN0cmluZywgU3RyaW5n
PiBQcm9wZXJ0eVZhbHVlQW5kUHJpb3JpdHk7Cit0eXBlZGVmIHN0ZDo6cGFpcjx1bnNpZ25lZCwg
dW5zaWduZWQ+IFNvdXJjZVJhbmdlOwogdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgUHJvcGVydHlW
YWx1ZUFuZFByaW9yaXR5PiBEaXNhYmxlZFN0eWxlRGVjbGFyYXRpb247CiB0eXBlZGVmIEhhc2hN
YXA8Q1NTU3R5bGVEZWNsYXJhdGlvbiosIGxvbmc+IFN0eWxlVG9JZE1hcDsKIHR5cGVkZWYgSGFz
aE1hcDxsb25nLCBSZWZQdHI8Q1NTU3R5bGVEZWNsYXJhdGlvbj4gPiBJZFRvU3R5bGVNYXA7CiB0
eXBlZGVmIEhhc2hNYXA8Q1NTU3R5bGVSdWxlKiwgbG9uZz4gUnVsZVRvSWRNYXA7CiB0eXBlZGVm
IEhhc2hNYXA8bG9uZywgUmVmUHRyPENTU1N0eWxlUnVsZT4gPiBJZFRvUnVsZU1hcDsKK3R5cGVk
ZWYgSGFzaE1hcDxDU1NTdHlsZVNoZWV0KiwgVmVjdG9yPFNvdXJjZVJhbmdlPiogPiBTdHlsZVNo
ZWV0VG9PZmZzZXRzTWFwOwordHlwZWRlZiBIYXNoTWFwPENTU1N0eWxlU2hlZXQqLCBsb25nPiBT
dHlsZVNoZWV0VG9JZE1hcDsKK3R5cGVkZWYgSGFzaE1hcDxsb25nLCBSZWZQdHI8Q1NTU3R5bGVT
aGVldD4gPiBJZFRvU3R5bGVTaGVldE1hcDsKIHR5cGVkZWYgSGFzaE1hcDxsb25nLCBEaXNhYmxl
ZFN0eWxlRGVjbGFyYXRpb24+IElkVG9EaXNhYmxlZFN0eWxlTWFwOwordHlwZWRlZiBIYXNoTWFw
PFJlZlB0cjxEb2N1bWVudD4sIFJlZlB0cjxDU1NTdHlsZVNoZWV0PiA+IERvY3VtZW50VG9TdHls
ZVNoZWV0TWFwOwogCi1zdHJ1Y3QgSW5zcGVjdG9yQ1NTU3RvcmUgewotICAgIEluc3BlY3RvckNT
U1N0b3JlKCk7CitjbGFzcyBJbnNwZWN0b3JDU1NTdG9yZSB7CisKK3B1YmxpYzoKKyAgICBJbnNw
ZWN0b3JDU1NTdG9yZShJbnNwZWN0b3JDb250cm9sbGVyKiBpbnNwZWN0b3JDb250cm9sbGVyKTsK
ICAgICB+SW5zcGVjdG9yQ1NTU3RvcmUoKTsKICAgICB2b2lkIHJlc2V0KCk7CisgICAgU291cmNl
UmFuZ2UgZ2V0U3RhcnRFbmRPZmZzZXRzKENTU1N0eWxlUnVsZSogcnVsZSk7CisgICAgQ1NTU3R5
bGVEZWNsYXJhdGlvbiogc3R5bGVGb3JJZChsb25nIHN0eWxlSWQpOworICAgIENTU1N0eWxlUnVs
ZSogcnVsZUZvcklkKGxvbmcgc3R5bGVSdWxlSWQpOworICAgIERpc2FibGVkU3R5bGVEZWNsYXJh
dGlvbiogZGlzYWJsZWRTdHlsZUZvcklkKGxvbmcgc3R5bGVJZCwgYm9vbCBjcmVhdGVJZkFic2Vu
dCk7CisgICAgQ1NTU3R5bGVTaGVldCogaW5zcGVjdG9yU3R5bGVTaGVldChEb2N1bWVudCogb3du
ZXJEb2N1bWVudCwgYm9vbCBjcmVhdGVJZkFic2VudCwgbG9uZyBjYWxsSWQpOworICAgIHZvaWQg
cmVtb3ZlRG9jdW1lbnQoRG9jdW1lbnQqKTsKKworICAgIGxvbmcgYmluZFJ1bGUoQ1NTU3R5bGVS
dWxlKiBydWxlKTsKKyAgICBsb25nIGJpbmRTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHls
ZSk7CisgICAgbG9uZyBiaW5kU3R5bGVTaGVldChDU1NTdHlsZVNoZWV0KiBzdHlsZVNoZWV0KTsK
KworcHJpdmF0ZToKKyAgICBzdGF0aWMgdW5zaWduZWQgZ2V0SW5kZXhJblN0eWxlUnVsZXMoQ1NT
U3R5bGVSdWxlKiBydWxlLCBDU1NSdWxlTGlzdCogcnVsZUxpc3QpOworCisgICAgU3R5bGVUb0lk
TWFwIG1fc3R5bGVUb0lkOworICAgIElkVG9TdHlsZU1hcCBtX2lkVG9TdHlsZTsKKyAgICBSdWxl
VG9JZE1hcCBtX3J1bGVUb0lkOworICAgIElkVG9SdWxlTWFwIG1faWRUb1J1bGU7CisgICAgU3R5
bGVTaGVldFRvT2Zmc2V0c01hcCBtX3N0eWxlU2hlZXRUb09mZnNldHM7CisgICAgU3R5bGVTaGVl
dFRvSWRNYXAgbV9zdHlsZVNoZWV0VG9JZDsKKyAgICBJZFRvU3R5bGVTaGVldE1hcCBtX2lkVG9T
dHlsZVNoZWV0OworICAgIElkVG9EaXNhYmxlZFN0eWxlTWFwIG1faWRUb0Rpc2FibGVkU3R5bGU7
CisgICAgRG9jdW1lbnRUb1N0eWxlU2hlZXRNYXAgbV9kb2N1bWVudE5vZGVUb0luc3BlY3RvclN0
eWxlU2hlZXRNYXA7CiAKLSAgICBTdHlsZVRvSWRNYXAgc3R5bGVUb0lkOwotICAgIElkVG9TdHls
ZU1hcCBpZFRvU3R5bGU7Ci0gICAgUnVsZVRvSWRNYXAgcnVsZVRvSWQ7Ci0gICAgSWRUb1J1bGVN
YXAgaWRUb1J1bGU7Ci0gICAgSWRUb0Rpc2FibGVkU3R5bGVNYXAgaWRUb0Rpc2FibGVkU3R5bGU7
Ci0gICAgUmVmUHRyPENTU1N0eWxlU2hlZXQ+IGluc3BlY3RvclN0eWxlU2hlZXQ7CisgICAgSW5z
cGVjdG9yQ29udHJvbGxlciogbV9pbnNwZWN0b3JDb250cm9sbGVyOworICAgIGxvbmcgbV9sYXN0
U3R5bGVJZDsKKyAgICBsb25nIG1fbGFzdFN0eWxlU2hlZXRJZDsKKyAgICBsb25nIG1fbGFzdFJ1
bGVJZDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckNvbnRyb2xsZXIuY3BwIGIvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yQ29udHJvbGxlci5jcHAKaW5kZXggM2IzNmE0YS4uZDJiYjZiYSAxMDA2NDQKLS0tIGEv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKKysrIGIvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5jcHAKQEAgLTE0NSw3ICsxNDUsNyBAQCBJbnNw
ZWN0b3JDb250cm9sbGVyOjpJbnNwZWN0b3JDb250cm9sbGVyKFBhZ2UqIHBhZ2UsIEluc3BlY3Rv
ckNsaWVudCogY2xpZW50KQogICAgIDogbV9pbnNwZWN0ZWRQYWdlKHBhZ2UpCiAgICAgLCBtX2Ns
aWVudChjbGllbnQpCiAgICAgLCBtX29wZW5pbmdGcm9udGVuZChmYWxzZSkKLSAgICAsIG1fY3Nz
U3RvcmUobmV3IEluc3BlY3RvckNTU1N0b3JlKCkpCisgICAgLCBtX2Nzc1N0b3JlKG5ldyBJbnNw
ZWN0b3JDU1NTdG9yZSh0aGlzKSkKICAgICAsIG1fZXhwaXJlZENvbnNvbGVNZXNzYWdlQ291bnQo
MCkKICAgICAsIG1fc2hvd0FmdGVyVmlzaWJsZShDdXJyZW50UGFuZWwpCiAgICAgLCBtX2dyb3Vw
TGV2ZWwoMCkKQEAgLTc3Niw2ICs3NzYsMTUgQEAgSW5zcGVjdG9yUmVzb3VyY2UqIEluc3BlY3Rv
ckNvbnRyb2xsZXI6OmdldFRyYWNrZWRSZXNvdXJjZSh1bnNpZ25lZCBsb25nIGlkZW50aWYKICAg
ICByZXR1cm4gMDsKIH0KIAorSW5zcGVjdG9yUmVzb3VyY2UqIEluc3BlY3RvckNvbnRyb2xsZXI6
OnJlc291cmNlRm9yVVJMKGNvbnN0IFN0cmluZyYgdXJsKQoreworICAgIGZvciAoSW5zcGVjdG9y
Q29udHJvbGxlcjo6UmVzb3VyY2VzTWFwOjppdGVyYXRvciByZXNJdCA9IG1fcmVzb3VyY2VzLmJl
Z2luKCk7IHJlc0l0ICE9IG1fcmVzb3VyY2VzLmVuZCgpOyArK3Jlc0l0KSB7CisgICAgICAgIGlm
IChyZXNJdC0+c2Vjb25kLT5yZXF1ZXN0VVJMKCkuc3RyaW5nKCkgPT0gdXJsKQorICAgICAgICAg
ICAgcmV0dXJuIHJlc0l0LT5zZWNvbmQuZ2V0KCk7CisgICAgfQorICAgIHJldHVybiAwOworfQor
CiB2b2lkIEluc3BlY3RvckNvbnRyb2xsZXI6OmRpZExvYWRSZXNvdXJjZUZyb21NZW1vcnlDYWNo
ZShEb2N1bWVudExvYWRlciogbG9hZGVyLCBjb25zdCBDYWNoZWRSZXNvdXJjZSogY2FjaGVkUmVz
b3VyY2UpCiB7CiAgICAgaWYgKCFlbmFibGVkKCkpCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JDb250cm9sbGVyLmggYi9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JD
b250cm9sbGVyLmgKaW5kZXggYTkwYjI5OS4uMDg5MmUyOCAxMDA2NDQKLS0tIGEvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yQ29udHJvbGxlci5oCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL0lu
c3BlY3RvckNvbnRyb2xsZXIuaApAQCAtNiwxMyArNiwxMyBAQAogICogYXJlIG1ldDoKICAqCiAg
KiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92
ZSBjb3B5cmlnaHQKLSAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0
aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuIAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KICAqIDIuICBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAog
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLiAKKyAqICAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgogICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBs
ZSIpIG5vciB0aGUgbmFtZXMgb2YKICAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2Vk
IHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlz
IHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLiAKKyAq
ICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBl
cm1pc3Npb24uCiAgKgogICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQg
SVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKICAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKQEAg
LTY1LDcgKzY1LDcgQEAgY2xhc3MgSW5qZWN0ZWRTY3JpcHQ7CiBjbGFzcyBJbmplY3RlZFNjcmlw
dEhvc3Q7CiBjbGFzcyBJbnNwZWN0b3JCYWNrZW5kOwogY2xhc3MgSW5zcGVjdG9yQ2xpZW50Owot
c3RydWN0IEluc3BlY3RvckNTU1N0b3JlOworY2xhc3MgSW5zcGVjdG9yQ1NTU3RvcmU7CiBjbGFz
cyBJbnNwZWN0b3JGcm9udGVuZDsKIGNsYXNzIEluc3BlY3RvckZyb250ZW5kQ2xpZW50OwogY2xh
c3MgSW5zcGVjdG9yVGltZWxpbmVBZ2VudDsKQEAgLTE0Nyw3ICsxNDcsNyBAQCBwdWJsaWM6CiAK
ICAgICB2b2lkIHNldEluc3BlY3RvckZyb250ZW5kQ2xpZW50KFBhc3NPd25QdHI8SW5zcGVjdG9y
RnJvbnRlbmRDbGllbnQ+IGNsaWVudCk7CiAgICAgYm9vbCBoYXNJbnNwZWN0b3JGcm9udGVuZENs
aWVudCgpIGNvbnN0IHsgcmV0dXJuIG1faW5zcGVjdG9yRnJvbnRlbmRDbGllbnQ7IH0KLSAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgCisKICAg
ICB2b2lkIGluc3BlY3RlZFdpbmRvd1NjcmlwdE9iamVjdENsZWFyZWQoRnJhbWUqKTsKIAogICAg
IGJvb2wgd2luZG93VmlzaWJsZSgpOwpAQCAtMjAzLDYgKzIwMyw4IEBAIHB1YmxpYzoKICNlbmRp
ZgogCiAgICAgY29uc3QgUmVzb3VyY2VzTWFwJiByZXNvdXJjZXMoKSBjb25zdCB7IHJldHVybiBt
X3Jlc291cmNlczsgfQorICAgIEluc3BlY3RvclJlc291cmNlKiByZXNvdXJjZUZvclVSTChjb25z
dCBTdHJpbmcmIHVybCk7CisgICAgSW5zcGVjdG9yRnJvbnRlbmQqIGluc3BlY3RvckZyb250ZW5k
KCkgeyByZXR1cm4gbV9mcm9udGVuZC5nZXQoKTsgfQogCiAgICAgdm9pZCBkcmF3Tm9kZUhpZ2hs
aWdodChHcmFwaGljc0NvbnRleHQmKSBjb25zdDsKIApAQCAtMjU4LDE0ICsyNjAsMTIgQEAgcHJp
dmF0ZToKIAogICAgIGZyaWVuZCBjbGFzcyBJbnNwZWN0b3JCYWNrZW5kOwogICAgIGZyaWVuZCBj
bGFzcyBJbmplY3RlZFNjcmlwdEhvc3Q7Ci0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIAorCiAgICAgdm9pZCBwb3B1bGF0ZVNjcmlwdE9iamVj
dHMoKTsKICAgICB2b2lkIHVuYmluZEFsbFJlc291cmNlcygpOwotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKLSAgICAvLyBGb2xsb3dpbmcg
YXJlIHVzZWQgZnJvbSBJbnNwZWN0b3JCYWNrZW5kIGFuZCBpbnRlcm5hbGx5LgotICAgIHZvaWQg
c2V0U2VhcmNoaW5nRm9yTm9kZShib29sIGVuYWJsZWQpOwogCiAgICAgLy8gRm9sbG93aW5nIGFy
ZSB1c2VkIGZyb20gSW5zcGVjdG9yQmFja2VuZCBhbmQgaW50ZXJuYWxseS4KKyAgICB2b2lkIHNl
dFNlYXJjaGluZ0Zvck5vZGUoYm9vbCBlbmFibGVkKTsKICAgICB2b2lkIHN0b3JlTGFzdEFjdGl2
ZVBhbmVsKGNvbnN0IFN0cmluZyYgcGFuZWxOYW1lKTsKICAgICBJbnNwZWN0b3JET01BZ2VudCog
ZG9tQWdlbnQoKSB7IHJldHVybiBtX2RvbUFnZW50LmdldCgpOyB9CiAgICAgdm9pZCByZWxlYXNl
RE9NQWdlbnQoKTsKQEAgLTI5Miw3ICsyOTIsNyBAQCBwcml2YXRlOgogI2lmIEVOQUJMRShET01f
U1RPUkFHRSkKICAgICBJbnNwZWN0b3JET01TdG9yYWdlUmVzb3VyY2UqIGdldERPTVN0b3JhZ2VS
ZXNvdXJjZUZvcklkKGxvbmcgc3RvcmFnZUlkKTsKICNlbmRpZgotICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAKKwogICAgIFNjcmlwdE9iamVj
dCBidWlsZE9iamVjdEZvckNvb2tpZShjb25zdCBDb29raWUmKTsKICAgICBTY3JpcHRBcnJheSBi
dWlsZEFycmF5Rm9yQ29va2llcyhMaXN0SGFzaFNldDxDb29raWU+Jik7CiAKZGlmZiAtLWdpdCBh
L1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmNwcCBiL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvckRPTUFnZW50LmNwcAppbmRleCAwODMzZTE1Li5hMTY4YzYyIDEwMDY0NAot
LS0gYS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JET01BZ2VudC5jcHAKKysrIGIvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuY3BwCkBAIC01Miw3ICs1Miw2IEBACiAjaW5j
bHVkZSAiRXZlbnROYW1lcy5oIgogI2luY2x1ZGUgIkV2ZW50VGFyZ2V0LmgiCiAjaW5jbHVkZSAi
SFRNTEZyYW1lT3duZXJFbGVtZW50LmgiCi0jaW5jbHVkZSAiSFRNTEhlYWRFbGVtZW50LmgiCiAj
aW5jbHVkZSAiSW5zcGVjdG9yRnJvbnRlbmQuaCIKICNpbmNsdWRlICJtYXJrdXAuaCIKICNpbmNs
dWRlICJNdXRhdGlvbkV2ZW50LmgiCkBAIC03OCw4ICs3Nyw2IEBAIEluc3BlY3RvckRPTUFnZW50
OjpJbnNwZWN0b3JET01BZ2VudChJbnNwZWN0b3JDU1NTdG9yZSogY3NzU3RvcmUsIEluc3BlY3Rv
ckZyb250CiAgICAgLCBtX2Nzc1N0b3JlKGNzc1N0b3JlKQogICAgICwgbV9mcm9udGVuZChmcm9u
dGVuZCkKICAgICAsIG1fbGFzdE5vZGVJZCgxKQotICAgICwgbV9sYXN0U3R5bGVJZCgxKQotICAg
ICwgbV9sYXN0UnVsZUlkKDEpCiB7CiB9CiAKQEAgLTE4OCw2ICsxODUsNyBAQCB2b2lkIEluc3Bl
Y3RvckRPTUFnZW50Ojp1bmJpbmQoTm9kZSogbm9kZSwgTm9kZVRvSWRNYXAqIG5vZGVzTWFwKQog
ICAgIGlmIChub2RlLT5pc0ZyYW1lT3duZXJFbGVtZW50KCkpIHsKICAgICAgICAgY29uc3QgSFRN
TEZyYW1lT3duZXJFbGVtZW50KiBmcmFtZU93bmVyID0gc3RhdGljX2Nhc3Q8Y29uc3QgSFRNTEZy
YW1lT3duZXJFbGVtZW50Kj4obm9kZSk7CiAgICAgICAgIHN0b3BMaXN0ZW5pbmcoZnJhbWVPd25l
ci0+Y29udGVudERvY3VtZW50KCkpOworICAgICAgICBjc3NTdG9yZSgpLT5yZW1vdmVEb2N1bWVu
dChmcmFtZU93bmVyLT5jb250ZW50RG9jdW1lbnQoKSk7CiAgICAgfQogCiAgICAgbG9uZyBpZCA9
IG5vZGVzTWFwLT5nZXQobm9kZSk7CkBAIC03ODUsNyArNzgzLDcgQEAgdm9pZCBJbnNwZWN0b3JE
T01BZ2VudDo6Z2V0U3R5bGVzKGxvbmcgY2FsbElkLCBsb25nIG5vZGVJZCwgYm9vbCBhdXRob3JP
bmx5KQogCiAgICAgQ1NTU3R5bGVTZWxlY3Rvciogc2VsZWN0b3IgPSBlbGVtZW50LT5vd25lckRv
Y3VtZW50KCktPnN0eWxlU2VsZWN0b3IoKTsKICAgICBSZWZQdHI8Q1NTUnVsZUxpc3Q+IG1hdGNo
ZWRSdWxlcyA9IHNlbGVjdG9yLT5zdHlsZVJ1bGVzRm9yRWxlbWVudChlbGVtZW50LCBhdXRob3JP
bmx5KTsKLSAgICByZXN1bHQuc2V0KCJtYXRjaGVkQ1NTUnVsZXMiLCBidWlsZEFycmF5Rm9yQ1NT
UnVsZXMobWF0Y2hlZFJ1bGVzLmdldCgpKSk7CisgICAgcmVzdWx0LnNldCgibWF0Y2hlZENTU1J1
bGVzIiwgYnVpbGRBcnJheUZvckNTU1J1bGVzKG5vZGUtPm93bmVyRG9jdW1lbnQoKSwgbWF0Y2hl
ZFJ1bGVzLmdldCgpKSk7CiAKICAgICByZXN1bHQuc2V0KCJzdHlsZUF0dHJpYnV0ZXMiLCBidWls
ZE9iamVjdEZvckF0dHJpYnV0ZVN0eWxlcyhlbGVtZW50KSk7CiAgICAgcmVzdWx0LnNldCgicHNl
dWRvRWxlbWVudHMiLCBidWlsZEFycmF5Rm9yUHNldWRvRWxlbWVudHMoZWxlbWVudCwgYXV0aG9y
T25seSkpOwpAQCAtODAwLDcgKzc5OCw3IEBAIHZvaWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmdldFN0
eWxlcyhsb25nIGNhbGxJZCwgbG9uZyBub2RlSWQsIGJvb2wgYXV0aG9yT25seSkKIAogICAgICAg
ICBDU1NTdHlsZVNlbGVjdG9yKiBwYXJlbnRTZWxlY3RvciA9IHBhcmVudEVsZW1lbnQtPm93bmVy
RG9jdW1lbnQoKS0+c3R5bGVTZWxlY3RvcigpOwogICAgICAgICBSZWZQdHI8Q1NTUnVsZUxpc3Q+
IHBhcmVudE1hdGNoZWRSdWxlcyA9IHBhcmVudFNlbGVjdG9yLT5zdHlsZVJ1bGVzRm9yRWxlbWVu
dChwYXJlbnRFbGVtZW50LCBhdXRob3JPbmx5KTsKLSAgICAgICAgcGFyZW50U3R5bGUuc2V0KCJt
YXRjaGVkQ1NTUnVsZXMiLCBidWlsZEFycmF5Rm9yQ1NTUnVsZXMocGFyZW50TWF0Y2hlZFJ1bGVz
LmdldCgpKSk7CisgICAgICAgIHBhcmVudFN0eWxlLnNldCgibWF0Y2hlZENTU1J1bGVzIiwgYnVp
bGRBcnJheUZvckNTU1J1bGVzKHBhcmVudEVsZW1lbnQtPm93bmVyRG9jdW1lbnQoKSwgcGFyZW50
TWF0Y2hlZFJ1bGVzLmdldCgpKSk7CiAKICAgICAgICAgcGFyZW50RWxlbWVudCA9IHBhcmVudEVs
ZW1lbnQtPnBhcmVudEVsZW1lbnQoKTsKICAgICAgICAgY3VycmVudFN0eWxlID0gcGFyZW50U3R5
bGU7CkBAIC04MTcsNyArODE1LDcgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6Z2V0QWxsU3R5
bGVzKGxvbmcgY2FsbElkKQogICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGlzdC0+
bGVuZ3RoKCk7ICsraSkgewogICAgICAgICAgICAgU3R5bGVTaGVldCogc3R5bGVTaGVldCA9IGxp
c3QtPml0ZW0oaSk7CiAgICAgICAgICAgICBpZiAoc3R5bGVTaGVldC0+aXNDU1NTdHlsZVNoZWV0
KCkpCi0gICAgICAgICAgICAgICAgcmVzdWx0LnNldChjb3VudGVyKyssIGJ1aWxkT2JqZWN0Rm9y
U3R5bGVTaGVldChzdGF0aWNfY2FzdDxDU1NTdHlsZVNoZWV0Kj4oc3R5bGVTaGVldCkpKTsKKyAg
ICAgICAgICAgICAgICByZXN1bHQuc2V0KGNvdW50ZXIrKywgYnVpbGRPYmplY3RGb3JTdHlsZVNo
ZWV0KCgqaXQpLmdldCgpLCBzdGF0aWNfY2FzdDxDU1NTdHlsZVNoZWV0Kj4oc3R5bGVTaGVldCkp
KTsKICAgICAgICAgfQogICAgIH0KICAgICBtX2Zyb250ZW5kLT5kaWRHZXRBbGxTdHlsZXMoY2Fs
bElkLCByZXN1bHQpOwpAQCAtODY3LDE0ICs4NjUsMTQgQEAgU2NyaXB0T2JqZWN0IEluc3BlY3Rv
ckRPTUFnZW50OjpidWlsZE9iamVjdEZvckF0dHJpYnV0ZVN0eWxlcyhFbGVtZW50KiBlbGVtZW50
KQogICAgIHJldHVybiBzdHlsZUF0dHJpYnV0ZXM7CiB9CiAKLVNjcmlwdEFycmF5IEluc3BlY3Rv
ckRPTUFnZW50OjpidWlsZEFycmF5Rm9yQ1NTUnVsZXMoQ1NTUnVsZUxpc3QqIG1hdGNoZWRSdWxl
cykKK1NjcmlwdEFycmF5IEluc3BlY3RvckRPTUFnZW50OjpidWlsZEFycmF5Rm9yQ1NTUnVsZXMo
RG9jdW1lbnQqIG93bmVyRG9jdW1lbnQsIENTU1J1bGVMaXN0KiBtYXRjaGVkUnVsZXMpCiB7CiAg
ICAgU2NyaXB0QXJyYXkgbWF0Y2hlZENTU1J1bGVzID0gbV9mcm9udGVuZC0+bmV3U2NyaXB0QXJy
YXkoKTsKICAgICB1bnNpZ25lZCBjb3VudGVyID0gMDsKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBtYXRjaGVkUnVsZXMgJiYgaSA8IG1hdGNoZWRSdWxlcy0+bGVuZ3RoKCk7ICsraSkgewogICAg
ICAgICBDU1NSdWxlKiBydWxlID0gbWF0Y2hlZFJ1bGVzLT5pdGVtKGkpOwogICAgICAgICBpZiAo
cnVsZS0+dHlwZSgpID09IENTU1J1bGU6OlNUWUxFX1JVTEUpCi0gICAgICAgICAgICBtYXRjaGVk
Q1NTUnVsZXMuc2V0KGNvdW50ZXIrKywgYnVpbGRPYmplY3RGb3JSdWxlKHN0YXRpY19jYXN0PENT
U1N0eWxlUnVsZSo+KHJ1bGUpKSk7CisgICAgICAgICAgICBtYXRjaGVkQ1NTUnVsZXMuc2V0KGNv
dW50ZXIrKywgYnVpbGRPYmplY3RGb3JSdWxlKG93bmVyRG9jdW1lbnQsIHN0YXRpY19jYXN0PENT
U1N0eWxlUnVsZSo+KHJ1bGUpKSk7CiAgICAgfQogICAgIHJldHVybiBtYXRjaGVkQ1NTUnVsZXM7
CiB9CkBAIC04OTEsNyArODg5LDcgQEAgU2NyaXB0QXJyYXkgSW5zcGVjdG9yRE9NQWdlbnQ6OmJ1
aWxkQXJyYXlGb3JQc2V1ZG9FbGVtZW50cyhFbGVtZW50KiBlbGVtZW50LCBib28KICAgICAgICAg
aWYgKG1hdGNoZWRSdWxlcyAmJiBtYXRjaGVkUnVsZXMtPmxlbmd0aCgpKSB7CiAgICAgICAgICAg
ICBTY3JpcHRPYmplY3QgcHNldWRvU3R5bGVzID0gbV9mcm9udGVuZC0+bmV3U2NyaXB0T2JqZWN0
KCk7CiAgICAgICAgICAgICBwc2V1ZG9TdHlsZXMuc2V0KCJwc2V1ZG9JZCIsIHN0YXRpY19jYXN0
PGludD4ocHNldWRvSWQpKTsKLSAgICAgICAgICAgIHBzZXVkb1N0eWxlcy5zZXQoInJ1bGVzIiwg
YnVpbGRBcnJheUZvckNTU1J1bGVzKG1hdGNoZWRSdWxlcy5nZXQoKSkpOworICAgICAgICAgICAg
cHNldWRvU3R5bGVzLnNldCgicnVsZXMiLCBidWlsZEFycmF5Rm9yQ1NTUnVsZXMoZWxlbWVudC0+
b3duZXJEb2N1bWVudCgpLCBtYXRjaGVkUnVsZXMuZ2V0KCkpKTsKICAgICAgICAgICAgIHJlc3Vs
dC5zZXQoY291bnRlcisrLCBwc2V1ZG9TdHlsZXMpOwogICAgICAgICB9CiAgICAgfQpAQCAtOTAw
LDE4ICs4OTgsMTcgQEAgU2NyaXB0QXJyYXkgSW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aWxkQXJyYXlG
b3JQc2V1ZG9FbGVtZW50cyhFbGVtZW50KiBlbGVtZW50LCBib28KIAogdm9pZCBJbnNwZWN0b3JE
T01BZ2VudDo6YXBwbHlTdHlsZVRleHQobG9uZyBjYWxsSWQsIGxvbmcgc3R5bGVJZCwgY29uc3Qg
U3RyaW5nJiBzdHlsZVRleHQsIGNvbnN0IFN0cmluZyYgcHJvcGVydHlOYW1lKQogewotICAgIElk
VG9TdHlsZU1hcDo6aXRlcmF0b3IgaXQgPSBjc3NTdG9yZSgpLT5pZFRvU3R5bGUuZmluZChzdHls
ZUlkKTsKLSAgICBpZiAoaXQgPT0gY3NzU3RvcmUoKS0+aWRUb1N0eWxlLmVuZCgpKSB7CisgICAg
Q1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUgPSBjc3NTdG9yZSgpLT5zdHlsZUZvcklkKHN0eWxl
SWQpOworICAgIGlmICghc3R5bGUpIHsKICAgICAgICAgbV9mcm9udGVuZC0+ZGlkQXBwbHlTdHls
ZVRleHQoY2FsbElkLCBmYWxzZSwgU2NyaXB0VmFsdWU6OnVuZGVmaW5lZCgpLCBtX2Zyb250ZW5k
LT5uZXdTY3JpcHRBcnJheSgpKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAogICAgIC8vIFJl
bW92ZSBkaXNhYmxlZCBwcm9wZXJ0eSBlbnRyeSBmb3IgcHJvcGVydHkgd2l0aCBnaXZlbiBuYW1l
LgotICAgIElkVG9EaXNhYmxlZFN0eWxlTWFwOjppdGVyYXRvciBkaXNhYmxlZEl0ID0gY3NzU3Rv
cmUoKS0+aWRUb0Rpc2FibGVkU3R5bGUuZmluZChzdHlsZUlkKTsKLSAgICBpZiAoZGlzYWJsZWRJ
dCAhPSBjc3NTdG9yZSgpLT5pZFRvRGlzYWJsZWRTdHlsZS5lbmQoKSkKLSAgICAgICAgZGlzYWJs
ZWRJdC0+c2Vjb25kLnJlbW92ZShwcm9wZXJ0eU5hbWUpOworICAgIERpc2FibGVkU3R5bGVEZWNs
YXJhdGlvbiogZGlzYWJsZWRTdHlsZSA9IGNzc1N0b3JlKCktPmRpc2FibGVkU3R5bGVGb3JJZChz
dHlsZUlkLCBmYWxzZSk7CisgICAgaWYgKGRpc2FibGVkU3R5bGUpCisgICAgICAgIGRpc2FibGVk
U3R5bGUtPnJlbW92ZShwcm9wZXJ0eU5hbWUpOwogCi0gICAgQ1NTU3R5bGVEZWNsYXJhdGlvbiog
c3R5bGUgPSBpdC0+c2Vjb25kLmdldCgpOwogICAgIGludCBzdHlsZVRleHRMZW5ndGggPSBzdHls
ZVRleHQubGVuZ3RoKCk7CiAKICAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+
IHRlbXBNdXRhYmxlU3R5bGUgPSBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Y3JlYXRlKCk7
CkBAIC05NzksOCArOTc2LDggQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6YXBwbHlTdHlsZVRl
eHQobG9uZyBjYWxsSWQsIGxvbmcgc3R5bGVJZCwgY29uc3QgU3RyaW5nJgogICAgICAgICBFeGNl
cHRpb25Db2RlIGVjID0gMDsKICAgICAgICAgc3R5bGUtPnNldFByb3BlcnR5KG5hbWUsIHZhbHVl
LCBwcmlvcml0eSwgZWMpOwogICAgICAgICAvLyBSZW1vdmUgZGlzYWJsZWQgcHJvcGVydHkgZW50
cnkgZm9yIHByb3BlcnR5IHdpdGggdGhpcyBuYW1lLgotICAgICAgICBpZiAoZGlzYWJsZWRJdCAh
PSBjc3NTdG9yZSgpLT5pZFRvRGlzYWJsZWRTdHlsZS5lbmQoKSkKLSAgICAgICAgICAgIGRpc2Fi
bGVkSXQtPnNlY29uZC5yZW1vdmUobmFtZSk7CisgICAgICAgIGlmIChkaXNhYmxlZFN0eWxlKQor
ICAgICAgICAgICAgZGlzYWJsZWRTdHlsZS0+cmVtb3ZlKG5hbWUpOwogICAgICAgICBjaGFuZ2Vk
UHJvcGVydGllcy5hcHBlbmQobmFtZSk7CiAgICAgfQogICAgIG1fZnJvbnRlbmQtPmRpZEFwcGx5
U3R5bGVUZXh0KGNhbGxJZCwgdHJ1ZSwgYnVpbGRPYmplY3RGb3JTdHlsZShzdHlsZSwgdHJ1ZSks
IHRvQXJyYXkoY2hhbmdlZFByb3BlcnRpZXMpKTsKQEAgLTk4OCwxMiArOTg1LDExIEBAIHZvaWQg
SW5zcGVjdG9yRE9NQWdlbnQ6OmFwcGx5U3R5bGVUZXh0KGxvbmcgY2FsbElkLCBsb25nIHN0eWxl
SWQsIGNvbnN0IFN0cmluZyYKIAogdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6c2V0U3R5bGVUZXh0
KGxvbmcgY2FsbElkLCBsb25nIHN0eWxlSWQsIGNvbnN0IFN0cmluZyYgY3NzVGV4dCkKIHsKLSAg
ICBJZFRvU3R5bGVNYXA6Oml0ZXJhdG9yIGl0ID0gY3NzU3RvcmUoKS0+aWRUb1N0eWxlLmZpbmQo
c3R5bGVJZCk7Ci0gICAgaWYgKGl0ID09IGNzc1N0b3JlKCktPmlkVG9TdHlsZS5lbmQoKSkgewor
ICAgIENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlID0gY3NzU3RvcmUoKS0+c3R5bGVGb3JJZChz
dHlsZUlkKTsKKyAgICBpZiAoIXN0eWxlKSB7CiAgICAgICAgIG1fZnJvbnRlbmQtPmRpZFNldFN0
eWxlVGV4dChjYWxsSWQsIGZhbHNlKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBDU1NT
dHlsZURlY2xhcmF0aW9uKiBzdHlsZSA9IGl0LT5zZWNvbmQuZ2V0KCk7CiAgICAgRXhjZXB0aW9u
Q29kZSBlYyA9IDA7CiAgICAgc3R5bGUtPnNldENzc1RleHQoY3NzVGV4dCwgZWMpOwogICAgIG1f
ZnJvbnRlbmQtPmRpZFNldFN0eWxlVGV4dChjYWxsSWQsICFlYyk7CkBAIC0xMDAxLDEzICs5OTcs
MTIgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6c2V0U3R5bGVUZXh0KGxvbmcgY2FsbElkLCBs
b25nIHN0eWxlSWQsIGNvbnN0IFN0cmluZyYgY3MKIAogdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6
c2V0U3R5bGVQcm9wZXJ0eShsb25nIGNhbGxJZCwgbG9uZyBzdHlsZUlkLCBjb25zdCBTdHJpbmcm
IG5hbWUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7Ci0gICAgSWRUb1N0eWxlTWFwOjppdGVyYXRv
ciBpdCA9IGNzc1N0b3JlKCktPmlkVG9TdHlsZS5maW5kKHN0eWxlSWQpOwotICAgIGlmIChpdCA9
PSBjc3NTdG9yZSgpLT5pZFRvU3R5bGUuZW5kKCkpIHsKKyAgICBDU1NTdHlsZURlY2xhcmF0aW9u
KiBzdHlsZSA9IGNzc1N0b3JlKCktPnN0eWxlRm9ySWQoc3R5bGVJZCk7CisgICAgaWYgKCFzdHls
ZSkgewogICAgICAgICBtX2Zyb250ZW5kLT5kaWRTZXRTdHlsZVByb3BlcnR5KGNhbGxJZCwgZmFs
c2UpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgQ1NTU3R5bGVEZWNsYXJhdGlvbiog
c3R5bGUgPSBpdC0+c2Vjb25kLmdldCgpOwogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAg
IHN0eWxlLT5zZXRQcm9wZXJ0eShuYW1lLCB2YWx1ZSwgZWMpOwogICAgIG1fZnJvbnRlbmQtPmRp
ZFNldFN0eWxlUHJvcGVydHkoY2FsbElkLCAhZWMpOwpAQCAtMTAxNSwyOCArMTAxMCwyNSBAQCB2
b2lkIEluc3BlY3RvckRPTUFnZW50OjpzZXRTdHlsZVByb3BlcnR5KGxvbmcgY2FsbElkLCBsb25n
IHN0eWxlSWQsIGNvbnN0IFN0cmluZwogCiB2b2lkIEluc3BlY3RvckRPTUFnZW50Ojp0b2dnbGVT
dHlsZUVuYWJsZWQobG9uZyBjYWxsSWQsIGxvbmcgc3R5bGVJZCwgY29uc3QgU3RyaW5nJiBwcm9w
ZXJ0eU5hbWUsIGJvb2wgZGlzYWJsZWQpCiB7Ci0gICAgSWRUb1N0eWxlTWFwOjppdGVyYXRvciBp
dCA9IGNzc1N0b3JlKCktPmlkVG9TdHlsZS5maW5kKHN0eWxlSWQpOwotICAgIGlmIChpdCA9PSBj
c3NTdG9yZSgpLT5pZFRvU3R5bGUuZW5kKCkpIHsKKyAgICBDU1NTdHlsZURlY2xhcmF0aW9uKiBz
dHlsZSA9IGNzc1N0b3JlKCktPnN0eWxlRm9ySWQoc3R5bGVJZCk7CisgICAgaWYgKCFzdHlsZSkg
ewogICAgICAgICBtX2Zyb250ZW5kLT5kaWRUb2dnbGVTdHlsZUVuYWJsZWQoY2FsbElkLCBTY3Jp
cHRWYWx1ZTo6dW5kZWZpbmVkKCkpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIENTU1N0
eWxlRGVjbGFyYXRpb24qIHN0eWxlID0gaXQtPnNlY29uZC5nZXQoKTsKIAotICAgIElkVG9EaXNh
YmxlZFN0eWxlTWFwOjppdGVyYXRvciBkaXNhYmxlZEl0ID0gY3NzU3RvcmUoKS0+aWRUb0Rpc2Fi
bGVkU3R5bGUuZmluZChzdHlsZUlkKTsKLSAgICBpZiAoZGlzYWJsZWRJdCA9PSBjc3NTdG9yZSgp
LT5pZFRvRGlzYWJsZWRTdHlsZS5lbmQoKSkKLSAgICAgICAgZGlzYWJsZWRJdCA9IGNzc1N0b3Jl
KCktPmlkVG9EaXNhYmxlZFN0eWxlLnNldChzdHlsZUlkLCBEaXNhYmxlZFN0eWxlRGVjbGFyYXRp
b24oKSkuZmlyc3Q7CisgICAgRGlzYWJsZWRTdHlsZURlY2xhcmF0aW9uKiBkaXNhYmxlZFN0eWxl
ID0gY3NzU3RvcmUoKS0+ZGlzYWJsZWRTdHlsZUZvcklkKHN0eWxlSWQsIHRydWUpOwogCiAgICAg
Ly8gVE9ETzogbWFrZSBzdXJlIHRoaXMgd29ya3Mgd2l0aCBzaG9ydGhhbmRzIHJpZ2h0LgogICAg
IEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwogICAgIGlmIChkaXNhYmxlZCkgewotICAgICAgICBkaXNh
YmxlZEl0LT5zZWNvbmQuc2V0KHByb3BlcnR5TmFtZSwgc3RkOjptYWtlX3BhaXIoc3R5bGUtPmdl
dFByb3BlcnR5VmFsdWUocHJvcGVydHlOYW1lKSwgc3R5bGUtPmdldFByb3BlcnR5UHJpb3JpdHko
cHJvcGVydHlOYW1lKSkpOworICAgICAgICBkaXNhYmxlZFN0eWxlLT5zZXQocHJvcGVydHlOYW1l
LCBzdGQ6Om1ha2VfcGFpcihzdHlsZS0+Z2V0UHJvcGVydHlWYWx1ZShwcm9wZXJ0eU5hbWUpLCBz
dHlsZS0+Z2V0UHJvcGVydHlQcmlvcml0eShwcm9wZXJ0eU5hbWUpKSk7CiAgICAgICAgIGlmICgh
ZWMpCiAgICAgICAgICAgICBzdHlsZS0+cmVtb3ZlUHJvcGVydHkocHJvcGVydHlOYW1lLCBlYyk7
Ci0gICAgfSBlbHNlIGlmIChkaXNhYmxlZEl0LT5zZWNvbmQuY29udGFpbnMocHJvcGVydHlOYW1l
KSkgewotICAgICAgICBQcm9wZXJ0eVZhbHVlQW5kUHJpb3JpdHkgdmFsdWVBbmRQcmlvcml0eSA9
IGRpc2FibGVkSXQtPnNlY29uZC5nZXQocHJvcGVydHlOYW1lKTsKKyAgICB9IGVsc2UgaWYgKGRp
c2FibGVkU3R5bGUtPmNvbnRhaW5zKHByb3BlcnR5TmFtZSkpIHsKKyAgICAgICAgUHJvcGVydHlW
YWx1ZUFuZFByaW9yaXR5IHZhbHVlQW5kUHJpb3JpdHkgPSBkaXNhYmxlZFN0eWxlLT5nZXQocHJv
cGVydHlOYW1lKTsKICAgICAgICAgc3R5bGUtPnNldFByb3BlcnR5KHByb3BlcnR5TmFtZSwgdmFs
dWVBbmRQcmlvcml0eS5maXJzdCwgdmFsdWVBbmRQcmlvcml0eS5zZWNvbmQsIGVjKTsKICAgICAg
ICAgaWYgKCFlYykKLSAgICAgICAgICAgIGRpc2FibGVkSXQtPnNlY29uZC5yZW1vdmUocHJvcGVy
dHlOYW1lKTsKKyAgICAgICAgICAgIGRpc2FibGVkU3R5bGUtPnJlbW92ZShwcm9wZXJ0eU5hbWUp
OwogICAgIH0KICAgICBpZiAoZWMpIHsKICAgICAgICAgbV9mcm9udGVuZC0+ZGlkVG9nZ2xlU3R5
bGVFbmFibGVkKGNhbGxJZCwgU2NyaXB0VmFsdWU6OnVuZGVmaW5lZCgpKTsKQEAgLTEwNDcsMTMg
KzEwMzksMTIgQEAgdm9pZCBJbnNwZWN0b3JET01BZ2VudDo6dG9nZ2xlU3R5bGVFbmFibGVkKGxv
bmcgY2FsbElkLCBsb25nIHN0eWxlSWQsIGNvbnN0IFN0cmkKIAogdm9pZCBJbnNwZWN0b3JET01B
Z2VudDo6c2V0UnVsZVNlbGVjdG9yKGxvbmcgY2FsbElkLCBsb25nIHJ1bGVJZCwgY29uc3QgU3Ry
aW5nJiBzZWxlY3RvciwgbG9uZyBzZWxlY3RlZE5vZGVJZCkKIHsKLSAgICBJZFRvUnVsZU1hcDo6
aXRlcmF0b3IgaXQgPSBjc3NTdG9yZSgpLT5pZFRvUnVsZS5maW5kKHJ1bGVJZCk7Ci0gICAgaWYg
KGl0ID09IGNzc1N0b3JlKCktPmlkVG9SdWxlLmVuZCgpKSB7CisgICAgQ1NTU3R5bGVSdWxlKiBy
dWxlID0gY3NzU3RvcmUoKS0+cnVsZUZvcklkKHJ1bGVJZCk7CisgICAgaWYgKCFydWxlKSB7CiAg
ICAgICAgIG1fZnJvbnRlbmQtPmRpZFNldFJ1bGVTZWxlY3RvcihjYWxsSWQsIFNjcmlwdFZhbHVl
Ojp1bmRlZmluZWQoKSwgZmFsc2UpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgQ1NT
U3R5bGVSdWxlKiBydWxlID0gaXQtPnNlY29uZC5nZXQoKTsKICAgICBOb2RlKiBub2RlID0gbm9k
ZUZvcklkKHNlbGVjdGVkTm9kZUlkKTsKIAogICAgIENTU1N0eWxlU2hlZXQqIHN0eWxlU2hlZXQg
PSBydWxlLT5wYXJlbnRTdHlsZVNoZWV0KCk7CkBAIC0xMDc3LDcgKzEwNjgsNyBAQCB2b2lkIElu
c3BlY3RvckRPTUFnZW50OjpzZXRSdWxlU2VsZWN0b3IobG9uZyBjYWxsSWQsIGxvbmcgcnVsZUlk
LCBjb25zdCBTdHJpbmcmCiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBtX2Zyb250ZW5k
LT5kaWRTZXRSdWxlU2VsZWN0b3IoY2FsbElkLCBidWlsZE9iamVjdEZvclJ1bGUobmV3UnVsZSks
IHJ1bGVBZmZlY3RzTm9kZShuZXdSdWxlLCBub2RlKSk7CisgICAgbV9mcm9udGVuZC0+ZGlkU2V0
UnVsZVNlbGVjdG9yKGNhbGxJZCwgYnVpbGRPYmplY3RGb3JSdWxlKG5vZGUtPm93bmVyRG9jdW1l
bnQoKSwgbmV3UnVsZSksIHJ1bGVBZmZlY3RzTm9kZShuZXdSdWxlLCBub2RlKSk7CiB9CiAKIHZv
aWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmFkZFJ1bGUobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYg
c2VsZWN0b3IsIGxvbmcgc2VsZWN0ZWROb2RlSWQpCkBAIC0xMDg4LDczICsxMDc5LDQ1IEBAIHZv
aWQgSW5zcGVjdG9yRE9NQWdlbnQ6OmFkZFJ1bGUobG9uZyBjYWxsSWQsIGNvbnN0IFN0cmluZyYg
c2VsZWN0b3IsIGxvbmcgc2VsZWN0CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAgICBpZiAo
IWNzc1N0b3JlKCktPmluc3BlY3RvclN0eWxlU2hlZXQuZ2V0KCkpIHsKLSAgICAgICAgRG9jdW1l
bnQqIG93bmVyRG9jdW1lbnQgPSBub2RlLT5vd25lckRvY3VtZW50KCk7Ci0gICAgICAgIEV4Y2Vw
dGlvbkNvZGUgZWMgPSAwOwotICAgICAgICBSZWZQdHI8RWxlbWVudD4gc3R5bGVFbGVtZW50ID0g
b3duZXJEb2N1bWVudC0+Y3JlYXRlRWxlbWVudCgic3R5bGUiLCBlYyk7Ci0gICAgICAgIGlmICgh
ZWMpCi0gICAgICAgICAgICBzdHlsZUVsZW1lbnQtPnNldEF0dHJpYnV0ZSgidHlwZSIsICJ0ZXh0
L2NzcyIsIGVjKTsKLSAgICAgICAgaWYgKCFlYykKLSAgICAgICAgICAgIG93bmVyRG9jdW1lbnQt
PmhlYWQoKS0+YXBwZW5kQ2hpbGQoc3R5bGVFbGVtZW50LCBlYyk7Ci0gICAgICAgIGlmIChlYykg
ewotICAgICAgICAgICAgbV9mcm9udGVuZC0+ZGlkQWRkUnVsZShjYWxsSWQsIFNjcmlwdFZhbHVl
Ojp1bmRlZmluZWQoKSwgZmFsc2UpOwotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB9Ci0g
ICAgICAgIFN0eWxlU2hlZXRMaXN0KiBzdHlsZVNoZWV0cyA9IG93bmVyRG9jdW1lbnQtPnN0eWxl
U2hlZXRzKCk7Ci0gICAgICAgIFN0eWxlU2hlZXQqIHN0eWxlU2hlZXQgPSBzdHlsZVNoZWV0cy0+
aXRlbShzdHlsZVNoZWV0cy0+bGVuZ3RoKCkgLSAxKTsKLSAgICAgICAgaWYgKCFzdHlsZVNoZWV0
LT5pc0NTU1N0eWxlU2hlZXQoKSkgewotICAgICAgICAgICAgbV9mcm9udGVuZC0+ZGlkQWRkUnVs
ZShjYWxsSWQsIFNjcmlwdFZhbHVlOjp1bmRlZmluZWQoKSwgZmFsc2UpOwotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIGNzc1N0b3JlKCktPmluc3BlY3RvclN0eWxlU2hl
ZXQgPSBzdGF0aWNfY2FzdDxDU1NTdHlsZVNoZWV0Kj4oc3R5bGVTaGVldCk7Ci0gICAgfQorICAg
IENTU1N0eWxlU2hlZXQqIHN0eWxlU2hlZXQgPSBjc3NTdG9yZSgpLT5pbnNwZWN0b3JTdHlsZVNo
ZWV0KG5vZGUtPm93bmVyRG9jdW1lbnQoKSwgdHJ1ZSwgY2FsbElkKTsKKyAgICBpZiAoIXN0eWxl
U2hlZXQpCisgICAgICAgIHJldHVybjsgLy8gY291bGQgbm90IGFkZCBhIHN0eWxlc2hlZXQgdG8g
dGhlIG93bmVyRG9jdW1lbnQKIAogICAgIEV4Y2VwdGlvbkNvZGUgZWMgPSAwOwotICAgIGNzc1N0
b3JlKCktPmluc3BlY3RvclN0eWxlU2hlZXQtPmFkZFJ1bGUoc2VsZWN0b3IsICIiLCBlYyk7Cisg
ICAgc3R5bGVTaGVldC0+YWRkUnVsZShzZWxlY3RvciwgIiIsIGVjKTsKICAgICBpZiAoZWMpIHsK
ICAgICAgICAgbV9mcm9udGVuZC0+ZGlkQWRkUnVsZShjYWxsSWQsIFNjcmlwdFZhbHVlOjp1bmRl
ZmluZWQoKSwgZmFsc2UpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgQ1NTU3R5bGVS
dWxlKiBuZXdSdWxlID0gc3RhdGljX2Nhc3Q8Q1NTU3R5bGVSdWxlKj4oY3NzU3RvcmUoKS0+aW5z
cGVjdG9yU3R5bGVTaGVldC0+aXRlbShjc3NTdG9yZSgpLT5pbnNwZWN0b3JTdHlsZVNoZWV0LT5s
ZW5ndGgoKSAtIDEpKTsKLSAgICBtX2Zyb250ZW5kLT5kaWRBZGRSdWxlKGNhbGxJZCwgYnVpbGRP
YmplY3RGb3JSdWxlKG5ld1J1bGUpLCBydWxlQWZmZWN0c05vZGUobmV3UnVsZSwgbm9kZSkpOwot
fQotCi1sb25nIEluc3BlY3RvckRPTUFnZW50OjpiaW5kU3R5bGUoQ1NTU3R5bGVEZWNsYXJhdGlv
biogc3R5bGUpCi17Ci0gICAgbG9uZyBpZCA9IGNzc1N0b3JlKCktPnN0eWxlVG9JZC5nZXQoc3R5
bGUpOwotICAgIGlmICghaWQpIHsKLSAgICAgICAgaWQgPSBtX2xhc3RTdHlsZUlkKys7Ci0gICAg
ICAgIGNzc1N0b3JlKCktPmlkVG9TdHlsZS5zZXQoaWQsIHN0eWxlKTsKLSAgICAgICAgY3NzU3Rv
cmUoKS0+c3R5bGVUb0lkLnNldChzdHlsZSwgaWQpOwotICAgIH0KLSAgICByZXR1cm4gaWQ7Ci19
Ci0KLWxvbmcgSW5zcGVjdG9yRE9NQWdlbnQ6OmJpbmRSdWxlKENTU1N0eWxlUnVsZSogcnVsZSkK
LXsKLSAgICBsb25nIGlkID0gY3NzU3RvcmUoKS0+cnVsZVRvSWQuZ2V0KHJ1bGUpOwotICAgIGlm
ICghaWQpIHsKLSAgICAgICAgaWQgPSBtX2xhc3RSdWxlSWQrKzsKLSAgICAgICAgY3NzU3RvcmUo
KS0+aWRUb1J1bGUuc2V0KGlkLCBydWxlKTsKLSAgICAgICAgY3NzU3RvcmUoKS0+cnVsZVRvSWQu
c2V0KHJ1bGUsIGlkKTsKLSAgICB9Ci0gICAgcmV0dXJuIGlkOworICAgIENTU1N0eWxlUnVsZSog
bmV3UnVsZSA9IHN0YXRpY19jYXN0PENTU1N0eWxlUnVsZSo+KHN0eWxlU2hlZXQtPml0ZW0oc3R5
bGVTaGVldC0+bGVuZ3RoKCkgLSAxKSk7CisgICAgbV9mcm9udGVuZC0+ZGlkQWRkUnVsZShjYWxs
SWQsIGJ1aWxkT2JqZWN0Rm9yUnVsZShub2RlLT5vd25lckRvY3VtZW50KCksIG5ld1J1bGUpLCBy
dWxlQWZmZWN0c05vZGUobmV3UnVsZSwgbm9kZSkpOwogfQogCiBTY3JpcHRPYmplY3QgSW5zcGVj
dG9yRE9NQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yU3R5bGUoQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5
bGUsIGJvb2wgYmluZCkKIHsKICAgICBTY3JpcHRPYmplY3QgcmVzdWx0ID0gbV9mcm9udGVuZC0+
bmV3U2NyaXB0T2JqZWN0KCk7CiAgICAgaWYgKGJpbmQpIHsKLSAgICAgICAgbG9uZyBzdHlsZUlk
ID0gYmluZFN0eWxlKHN0eWxlKTsKKyAgICAgICAgbG9uZyBzdHlsZUlkID0gY3NzU3RvcmUoKS0+
YmluZFN0eWxlKHN0eWxlKTsKICAgICAgICAgcmVzdWx0LnNldCgiaWQiLCBzdHlsZUlkKTsKIAot
ICAgICAgICBJZFRvRGlzYWJsZWRTdHlsZU1hcDo6aXRlcmF0b3IgZGlzYWJsZWRJdCA9IGNzc1N0
b3JlKCktPmlkVG9EaXNhYmxlZFN0eWxlLmZpbmQoc3R5bGVJZCk7Ci0gICAgICAgIGlmIChkaXNh
YmxlZEl0ICE9IGNzc1N0b3JlKCktPmlkVG9EaXNhYmxlZFN0eWxlLmVuZCgpKQotICAgICAgICAg
ICAgcmVzdWx0LnNldCgiZGlzYWJsZWQiLCBidWlsZEFycmF5Rm9yRGlzYWJsZWRTdHlsZVByb3Bl
cnRpZXMoZGlzYWJsZWRJdC0+c2Vjb25kKSk7CisgICAgICAgIERpc2FibGVkU3R5bGVEZWNsYXJh
dGlvbiogZGlzYWJsZWRTdHlsZSA9IGNzc1N0b3JlKCktPmRpc2FibGVkU3R5bGVGb3JJZChzdHls
ZUlkLCBmYWxzZSk7CisgICAgICAgIGlmIChkaXNhYmxlZFN0eWxlKQorICAgICAgICAgICAgcmVz
dWx0LnNldCgiZGlzYWJsZWQiLCBidWlsZEFycmF5Rm9yRGlzYWJsZWRTdHlsZVByb3BlcnRpZXMo
ZGlzYWJsZWRTdHlsZSkpOwogICAgIH0KICAgICByZXN1bHQuc2V0KCJ3aWR0aCIsIHN0eWxlLT5n
ZXRQcm9wZXJ0eVZhbHVlKCJ3aWR0aCIpKTsKICAgICByZXN1bHQuc2V0KCJoZWlnaHQiLCBzdHls
ZS0+Z2V0UHJvcGVydHlWYWx1ZSgiaGVpZ2h0IikpOworICAgIGlmIChiaW5kKSB7CisgICAgICAg
IENTU1J1bGUqIHBhcmVudFJ1bGUgPSBzdHlsZS0+cGFyZW50UnVsZSgpOworICAgICAgICBpZiAo
cGFyZW50UnVsZSAmJiBwYXJlbnRSdWxlLT50eXBlKCkgPT0gQ1NTUnVsZTo6U1RZTEVfUlVMRSkg
eworICAgICAgICAgICAgQ1NTU3R5bGVSdWxlKiBwYXJlbnRTdHlsZVJ1bGUgPSBzdGF0aWNfY2Fz
dDxDU1NTdHlsZVJ1bGUqPihwYXJlbnRSdWxlKTsKKyAgICAgICAgICAgIHN0ZDo6cGFpcjx1bnNp
Z25lZCwgdW5zaWduZWQ+IHN0YXJ0RW5kID0gY3NzU3RvcmUoKS0+Z2V0U3RhcnRFbmRPZmZzZXRz
KHBhcmVudFN0eWxlUnVsZSk7CisgICAgICAgICAgICBpZiAoc3RhcnRFbmQuc2Vjb25kKSB7Cisg
ICAgICAgICAgICAgICAgcmVzdWx0LnNldCgiYm9keVN0YXJ0T2Zmc2V0Iiwgc3RhcnRFbmQuZmly
c3QpOworICAgICAgICAgICAgICAgIHJlc3VsdC5zZXQoImJvZHlFbmRPZmZzZXQiLCBzdGFydEVu
ZC5zZWNvbmQpOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQogICAgIHBvcHVsYXRl
T2JqZWN0V2l0aFN0eWxlUHJvcGVydGllcyhzdHlsZSwgcmVzdWx0KTsKICAgICByZXR1cm4gcmVz
dWx0OwogfQpAQCAtMTE4NCwxMSArMTE0NywxMSBAQCB2b2lkIEluc3BlY3RvckRPTUFnZW50Ojpw
b3B1bGF0ZU9iamVjdFdpdGhTdHlsZVByb3BlcnRpZXMoQ1NTU3R5bGVEZWNsYXJhdGlvbiogcwog
ICAgIH0KIH0KIAotU2NyaXB0QXJyYXkgSW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aWxkQXJyYXlGb3JE
aXNhYmxlZFN0eWxlUHJvcGVydGllcyhEaXNhYmxlZFN0eWxlRGVjbGFyYXRpb24mIGRlY2xhcmF0
aW9uKQorU2NyaXB0QXJyYXkgSW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aWxkQXJyYXlGb3JEaXNhYmxl
ZFN0eWxlUHJvcGVydGllcyhEaXNhYmxlZFN0eWxlRGVjbGFyYXRpb24qIGRlY2xhcmF0aW9uKQog
ewogICAgIGludCBjb3VudGVyID0gMDsKICAgICBTY3JpcHRBcnJheSBwcm9wZXJ0aWVzID0gbV9m
cm9udGVuZC0+bmV3U2NyaXB0QXJyYXkoKTsKLSAgICBmb3IgKERpc2FibGVkU3R5bGVEZWNsYXJh
dGlvbjo6aXRlcmF0b3IgaXQgPSBkZWNsYXJhdGlvbi5iZWdpbigpOyBpdCAhPSBkZWNsYXJhdGlv
bi5lbmQoKTsgKytpdCkgeworICAgIGZvciAoRGlzYWJsZWRTdHlsZURlY2xhcmF0aW9uOjppdGVy
YXRvciBpdCA9IGRlY2xhcmF0aW9uLT5iZWdpbigpOyBpdCAhPSBkZWNsYXJhdGlvbi0+ZW5kKCk7
ICsraXQpIHsKICAgICAgICAgU2NyaXB0T2JqZWN0IHByb3BlcnR5ID0gbV9mcm9udGVuZC0+bmV3
U2NyaXB0T2JqZWN0KCk7CiAgICAgICAgIHByb3BlcnR5LnNldCgibmFtZSIsIGl0LT5maXJzdCk7
CiAgICAgICAgIHByb3BlcnR5LnNldCgidmFsdWUiLCBpdC0+c2Vjb25kLmZpcnN0KTsKQEAgLTEx
OTgsNyArMTE2MSw3IEBAIFNjcmlwdEFycmF5IEluc3BlY3RvckRPTUFnZW50OjpidWlsZEFycmF5
Rm9yRGlzYWJsZWRTdHlsZVByb3BlcnRpZXMoRGlzYWJsZWRTdHlsCiAgICAgcmV0dXJuIHByb3Bl
cnRpZXM7CiB9CiAKLVNjcmlwdE9iamVjdCBJbnNwZWN0b3JET01BZ2VudDo6YnVpbGRPYmplY3RG
b3JTdHlsZVNoZWV0KENTU1N0eWxlU2hlZXQqIHN0eWxlU2hlZXQpCitTY3JpcHRPYmplY3QgSW5z
cGVjdG9yRE9NQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yU3R5bGVTaGVldChEb2N1bWVudCogb3duZXJE
b2N1bWVudCwgQ1NTU3R5bGVTaGVldCogc3R5bGVTaGVldCkKIHsKICAgICBTY3JpcHRPYmplY3Qg
cmVzdWx0ID0gbV9mcm9udGVuZC0+bmV3U2NyaXB0T2JqZWN0KCk7CiAgICAgcmVzdWx0LnNldCgi
ZGlzYWJsZWQiLCBzdHlsZVNoZWV0LT5kaXNhYmxlZCgpKTsKQEAgLTEyMTQsMTIgKzExNzcsMTIg
QEAgU2NyaXB0T2JqZWN0IEluc3BlY3RvckRPTUFnZW50OjpidWlsZE9iamVjdEZvclN0eWxlU2hl
ZXQoQ1NTU3R5bGVTaGVldCogc3R5bGVTaGUKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
Y3NzUnVsZUxpc3QtPmxlbmd0aCgpOyArK2kpIHsKICAgICAgICAgQ1NTUnVsZSogcnVsZSA9IGNz
c1J1bGVMaXN0LT5pdGVtKGkpOwogICAgICAgICBpZiAocnVsZS0+aXNTdHlsZVJ1bGUoKSkKLSAg
ICAgICAgICAgIGNzc1J1bGVzLnNldChjb3VudGVyKyssIGJ1aWxkT2JqZWN0Rm9yUnVsZShzdGF0
aWNfY2FzdDxDU1NTdHlsZVJ1bGUqPihydWxlKSkpOworICAgICAgICAgICAgY3NzUnVsZXMuc2V0
KGNvdW50ZXIrKywgYnVpbGRPYmplY3RGb3JSdWxlKG93bmVyRG9jdW1lbnQsIHN0YXRpY19jYXN0
PENTU1N0eWxlUnVsZSo+KHJ1bGUpKSk7CiAgICAgfQogICAgIHJldHVybiByZXN1bHQ7CiB9CiAK
LVNjcmlwdE9iamVjdCBJbnNwZWN0b3JET01BZ2VudDo6YnVpbGRPYmplY3RGb3JSdWxlKENTU1N0
eWxlUnVsZSogcnVsZSkKK1NjcmlwdE9iamVjdCBJbnNwZWN0b3JET01BZ2VudDo6YnVpbGRPYmpl
Y3RGb3JSdWxlKERvY3VtZW50KiBvd25lckRvY3VtZW50LCBDU1NTdHlsZVJ1bGUqIHJ1bGUpCiB7
CiAgICAgQ1NTU3R5bGVTaGVldCogcGFyZW50U3R5bGVTaGVldCA9IHJ1bGUtPnBhcmVudFN0eWxl
U2hlZXQoKTsKIApAQCAtMTIyNyw2ICsxMTkwLDExIEBAIFNjcmlwdE9iamVjdCBJbnNwZWN0b3JE
T01BZ2VudDo6YnVpbGRPYmplY3RGb3JSdWxlKENTU1N0eWxlUnVsZSogcnVsZSkKICAgICByZXN1
bHQuc2V0KCJzZWxlY3RvclRleHQiLCBydWxlLT5zZWxlY3RvclRleHQoKSk7CiAgICAgcmVzdWx0
LnNldCgiY3NzVGV4dCIsIHJ1bGUtPmNzc1RleHQoKSk7CiAgICAgcmVzdWx0LnNldCgic291cmNl
TGluZSIsIHJ1bGUtPnNvdXJjZUxpbmUoKSk7CisgICAgc3RkOjpwYWlyPHVuc2lnbmVkLCB1bnNp
Z25lZD4gc3RhcnRFbmQgPSBjc3NTdG9yZSgpLT5nZXRTdGFydEVuZE9mZnNldHMocnVsZSk7Cisg
ICAgaWYgKHN0YXJ0RW5kLnNlY29uZCkgeworICAgICAgICByZXN1bHQuc2V0KCJib2R5U3RhcnRP
ZmZzZXQiLCBzdGFydEVuZC5maXJzdCk7CisgICAgICAgIHJlc3VsdC5zZXQoImJvZHlFbmRPZmZz
ZXQiLCBzdGFydEVuZC5zZWNvbmQpOworICAgIH0KICAgICBpZiAocGFyZW50U3R5bGVTaGVldCkg
ewogICAgICAgICBTY3JpcHRPYmplY3QgcGFyZW50U3R5bGVTaGVldFZhbHVlID0gbV9mcm9udGVu
ZC0+bmV3U2NyaXB0T2JqZWN0KCk7CiAgICAgICAgIHJlc3VsdC5zZXQoInBhcmVudFN0eWxlU2hl
ZXQiLCBwYXJlbnRTdHlsZVNoZWV0VmFsdWUpOwpAQCAtMTIzNiwxNCArMTIwNCwxNCBAQCBTY3Jp
cHRPYmplY3QgSW5zcGVjdG9yRE9NQWdlbnQ6OmJ1aWxkT2JqZWN0Rm9yUnVsZShDU1NTdHlsZVJ1
bGUqIHJ1bGUpCiAgICAgYm9vbCBpc1VzZXIgPSBwYXJlbnRTdHlsZVNoZWV0ICYmIHBhcmVudFN0
eWxlU2hlZXQtPm93bmVyTm9kZSgpICYmIHBhcmVudFN0eWxlU2hlZXQtPm93bmVyTm9kZSgpLT5u
b2RlTmFtZSgpID09ICIjZG9jdW1lbnQiOwogICAgIHJlc3VsdC5zZXQoImlzVXNlckFnZW50Iiwg
aXNVc2VyQWdlbnQpOwogICAgIHJlc3VsdC5zZXQoImlzVXNlciIsIGlzVXNlcik7Ci0gICAgcmVz
dWx0LnNldCgiaXNWaWFJbnNwZWN0b3IiLCBydWxlLT5wYXJlbnRTdHlsZVNoZWV0KCkgPT0gY3Nz
U3RvcmUoKS0+aW5zcGVjdG9yU3R5bGVTaGVldC5nZXQoKSk7CisgICAgcmVzdWx0LnNldCgiaXNW
aWFJbnNwZWN0b3IiLCBydWxlLT5wYXJlbnRTdHlsZVNoZWV0KCkgPT0gY3NzU3RvcmUoKS0+aW5z
cGVjdG9yU3R5bGVTaGVldChvd25lckRvY3VtZW50LCBmYWxzZSwgLTEpKTsKIAogICAgIC8vIEJp
bmQgZWRpdGFibGUgc2NyaXB0cyBvbmx5LgogICAgIGJvb2wgYmluZCA9ICFpc1VzZXJBZ2VudCAm
JiAhaXNVc2VyOwogICAgIHJlc3VsdC5zZXQoInN0eWxlIiwgYnVpbGRPYmplY3RGb3JTdHlsZShy
dWxlLT5zdHlsZSgpLCBiaW5kKSk7CiAKICAgICBpZiAoYmluZCkKLSAgICAgICAgcmVzdWx0LnNl
dCgiaWQiLCBiaW5kUnVsZShydWxlKSk7CisgICAgICAgIHJlc3VsdC5zZXQoImlkIiwgY3NzU3Rv
cmUoKS0+YmluZFJ1bGUocnVsZSkpOwogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKZGlmZiAtLWdp
dCBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmggYi9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JET01BZ2VudC5oCmluZGV4IGM4YTRlMWEuLjIyYjNmMDEgMTAwNjQ0Ci0t
LSBhL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRPTUFnZW50LmgKKysrIGIvV2ViQ29yZS9p
bnNwZWN0b3IvSW5zcGVjdG9yRE9NQWdlbnQuaApAQCAtMTQxLDcgKzE0MSw3IEBAIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKICAgICAgICAgYm9vbCBwdXNoRG9jdW1lbnRUb0Zyb250ZW5kKCk7CiAKICAg
ICAgICAgU2NyaXB0T2JqZWN0IGJ1aWxkT2JqZWN0Rm9yQXR0cmlidXRlU3R5bGVzKEVsZW1lbnQq
IGVsZW1lbnQpOwotICAgICAgICBTY3JpcHRBcnJheSBidWlsZEFycmF5Rm9yQ1NTUnVsZXMoQ1NT
UnVsZUxpc3QqKTsKKyAgICAgICAgU2NyaXB0QXJyYXkgYnVpbGRBcnJheUZvckNTU1J1bGVzKERv
Y3VtZW50KiBvd25lckRvY3VtZW50LCBDU1NSdWxlTGlzdCopOwogICAgICAgICBTY3JpcHRBcnJh
eSBidWlsZEFycmF5Rm9yUHNldWRvRWxlbWVudHMoRWxlbWVudCogZWxlbWVudCwgYm9vbCBhdXRo
b3JPbmx5KTsKIAogICAgICAgICBTY3JpcHRPYmplY3QgYnVpbGRPYmplY3RGb3JOb2RlKE5vZGUq
IG5vZGUsIGludCBkZXB0aCwgTm9kZVRvSWRNYXAqIG5vZGVzTWFwKTsKQEAgLTE2MiwxMyArMTYy
LDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKICAgICAgICAgU3RyaW5nIGRvY3VtZW50VVJMU3Ry
aW5nKERvY3VtZW50KiBkb2N1bWVudCkgY29uc3Q7CiAgICAgICAgIEluc3BlY3RvckNTU1N0b3Jl
KiBjc3NTdG9yZSgpIHsgcmV0dXJuIG1fY3NzU3RvcmU7IH0KIAotICAgICAgICBsb25nIGJpbmRT
dHlsZShDU1NTdHlsZURlY2xhcmF0aW9uKik7Ci0gICAgICAgIGxvbmcgYmluZFJ1bGUoQ1NTU3R5
bGVSdWxlKik7CiAgICAgICAgIFNjcmlwdE9iamVjdCBidWlsZE9iamVjdEZvclN0eWxlKENTU1N0
eWxlRGVjbGFyYXRpb24qLCBib29sIGJpbmQpOwogICAgICAgICB2b2lkIHBvcHVsYXRlT2JqZWN0
V2l0aFN0eWxlUHJvcGVydGllcyhDU1NTdHlsZURlY2xhcmF0aW9uKiwgU2NyaXB0T2JqZWN0JiBy
ZXN1bHQpOwotICAgICAgICBTY3JpcHRBcnJheSBidWlsZEFycmF5Rm9yRGlzYWJsZWRTdHlsZVBy
b3BlcnRpZXMoRGlzYWJsZWRTdHlsZURlY2xhcmF0aW9uJik7Ci0gICAgICAgIFNjcmlwdE9iamVj
dCBidWlsZE9iamVjdEZvclJ1bGUoQ1NTU3R5bGVSdWxlKik7Ci0gICAgICAgIFNjcmlwdE9iamVj
dCBidWlsZE9iamVjdEZvclN0eWxlU2hlZXQoQ1NTU3R5bGVTaGVldCopOworICAgICAgICBTY3Jp
cHRBcnJheSBidWlsZEFycmF5Rm9yRGlzYWJsZWRTdHlsZVByb3BlcnRpZXMoRGlzYWJsZWRTdHls
ZURlY2xhcmF0aW9uKik7CisgICAgICAgIFNjcmlwdE9iamVjdCBidWlsZE9iamVjdEZvclJ1bGUo
RG9jdW1lbnQqIG93bmVyRG9jdW1lbnQsIENTU1N0eWxlUnVsZSopOworICAgICAgICBTY3JpcHRP
YmplY3QgYnVpbGRPYmplY3RGb3JTdHlsZVNoZWV0KERvY3VtZW50KiBvd25lckRvY3VtZW50LCBD
U1NTdHlsZVNoZWV0Kik7CiAgICAgICAgIFZlY3RvcjxTdHJpbmc+IGxvbmdoYW5kUHJvcGVydGll
cyhDU1NTdHlsZURlY2xhcmF0aW9uKiwgY29uc3QgU3RyaW5nJiBzaG9ydGhhbmRQcm9wZXJ0eSk7
CiAgICAgICAgIFN0cmluZyBzaG9ydGhhbmRWYWx1ZShDU1NTdHlsZURlY2xhcmF0aW9uKiwgY29u
c3QgU3RyaW5nJiBzaG9ydGhhbmRQcm9wZXJ0eSk7CiAgICAgICAgIFN0cmluZyBzaG9ydGhhbmRQ
cmlvcml0eShDU1NTdHlsZURlY2xhcmF0aW9uKiwgY29uc3QgU3RyaW5nJiBzaG9ydGhhbmRQcm9w
ZXJ0eSk7CkBAIC0xODYsOCArMTg0LDYgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogICAgICAgICBI
YXNoTWFwPGxvbmcsIE5vZGVUb0lkTWFwKj4gbV9pZFRvTm9kZXNNYXA7CiAgICAgICAgIEhhc2hT
ZXQ8bG9uZz4gbV9jaGlsZHJlblJlcXVlc3RlZDsKICAgICAgICAgbG9uZyBtX2xhc3ROb2RlSWQ7
Ci0gICAgICAgIGxvbmcgbV9sYXN0U3R5bGVJZDsKLSAgICAgICAgbG9uZyBtX2xhc3RSdWxlSWQ7
CiAgICAgICAgIExpc3RIYXNoU2V0PFJlZlB0cjxEb2N1bWVudD4gPiBtX2RvY3VtZW50czsKICAg
ICB9OwogCmRpZmYgLS1naXQgYS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRE9NQWdlbnQu
anMgYi9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRE9NQWdlbnQuanMKaW5kZXggMzM3M2Mw
NC4uMGNkOWZlNyAxMDA2NDQKLS0tIGEvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RPTUFn
ZW50LmpzCisrKyBiL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9ET01BZ2VudC5qcwpAQCAt
NDkxLDYgKzQ5MSw4IEBAIFdlYkluc3BlY3Rvci5DU1NTdHlsZURlY2xhcmF0aW9uID0gZnVuY3Rp
b24ocGF5bG9hZCkKICAgICB0aGlzLmlkID0gcGF5bG9hZC5pZDsKICAgICB0aGlzLndpZHRoID0g
cGF5bG9hZC53aWR0aDsKICAgICB0aGlzLmhlaWdodCA9IHBheWxvYWQuaGVpZ2h0OworICAgIHRo
aXMuYm9keVN0YXJ0T2Zmc2V0ID0gcGF5bG9hZC5ib2R5U3RhcnRPZmZzZXQ7CisgICAgdGhpcy5i
b2R5RW5kT2Zmc2V0ID0gcGF5bG9hZC5ib2R5RW5kT2Zmc2V0OwogICAgIHRoaXMuX19kaXNhYmxl
ZFByb3BlcnRpZXMgPSB7fTsKICAgICB0aGlzLl9fZGlzYWJsZWRQcm9wZXJ0eVZhbHVlcyA9IHt9
OwogICAgIHRoaXMuX19kaXNhYmxlZFByb3BlcnR5UHJpb3JpdGllcyA9IHt9Owo=
</data>
<flag name="review"
          id="41542"
          type_id="1"
          status="+"
          setter="pfeldman"
    />
          </attachment>
      

    </bug>

</bugzilla>