<?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>85598</bug_id>
          
          <creation_ts>2012-05-04 03:49:26 -0700</creation_ts>
          <short_desc>Share stylesheet data structures between documents</short_desc>
          <delta_ts>2012-05-07 02:56:21 -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>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>85773</dependson>
          <blocked>77745</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Antti Koivisto">koivisto</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>caseq</cc>
    
    <cc>dacarson</cc>
    
    <cc>darin</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>feature-media-reviews</cc>
    
    <cc>japhet</cc>
    
    <cc>kling</cc>
    
    <cc>macpherson</cc>
    
    <cc>menard</cc>
    
    <cc>mjs</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>616067</commentid>
    <comment_count>0</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-05-04 03:49:26 -0700</bug_when>
    <thetext>We currently make a copy of the data structures when restoring a cached stylesheet. We could share the data until someone uses CSSOM to modify to sheet.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>616107</commentid>
    <comment_count>1</comment_count>
      <attachid>140198</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-05-04 05:42:54 -0700</bug_when>
    <thetext>Created attachment 140198
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>616110</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-05-04 05:46:42 -0700</bug_when>
    <thetext>Attachment 140198 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1
Source/WebCore/css/CSSStyleSheet.cpp:183:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Total errors found: 1 in 23 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>616136</commentid>
    <comment_count>3</comment_count>
      <attachid>140198</attachid>
    <who name="Andreas Kling">kling</who>
    <bug_when>2012-05-04 06:17:54 -0700</bug_when>
    <thetext>Comment on attachment 140198
patch

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

Attack angle looks sane. As you said yourself on IRC, this needs better test coverage though.

&gt; Source/WebCore/css/CSSStyleSheet.cpp:177
&gt; +StyleRuleBase* StyleSheetInternal::ruleAt(unsigned index) const

Perhaps this function could share some code with StyleSheetInternal::createChildRuleCSSOMWrapper().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>616253</commentid>
    <comment_count>4</comment_count>
      <attachid>140241</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-05-04 08:28:24 -0700</bug_when>
    <thetext>Created attachment 140241
updated patch

- Use RAII instead of explicit willMutate/didMutate pairs
- Remove StyleSheetInternal::createChildRuleCSSOMWrapper in favor of just using ruleAt()

Some tests coming up.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>616255</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-05-04 08:32:56 -0700</bug_when>
    <thetext>Attachment 140241 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1
Source/WebCore/css/CSSStyleSheet.cpp:597:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Total errors found: 1 in 23 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>616256</commentid>
    <comment_count>6</comment_count>
      <attachid>140242</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-05-04 08:36:21 -0700</bug_when>
    <thetext>Created attachment 140242
updated patch2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>616258</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-05-04 08:38:44 -0700</bug_when>
    <thetext>Attachment 140242 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;Source/WebCore/ChangeLog&apos;, u&apos;Source/WebCor...&quot; exit_code: 1
Source/WebCore/css/CSSStyleSheet.cpp:597:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Total errors found: 1 in 23 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>616957</commentid>
    <comment_count>8</comment_count>
      <attachid>140396</attachid>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-05-05 06:07:51 -0700</bug_when>
    <thetext>Created attachment 140396
now with tests</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>616958</commentid>
    <comment_count>9</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-05-05 06:09:54 -0700</bug_when>
    <thetext>Attachment 140396 did not pass style-queue:

Failed to run &quot;[&apos;Tools/Scripts/check-webkit-style&apos;, &apos;--diff-files&apos;, u&apos;LayoutTests/ChangeLog&apos;, u&apos;LayoutTests/http...&quot; exit_code: 1
Source/WebCore/css/CSSStyleSheet.cpp:599:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Total errors found: 1 in 27 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>617060</commentid>
    <comment_count>10</comment_count>
      <attachid>140396</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2012-05-05 17:20:05 -0700</bug_when>
    <thetext>Comment on attachment 140396
now with tests

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

It seems really easy to forget to do one of these “will mutate” or “did mutate” calls. Is there some way to make it easy to catch that kind of mistake when people change this code in the future?

&gt; Source/WebCore/css/CSSPageRule.cpp:68
&gt; -    Document* doc = 0;
&gt; -    if (CSSStyleSheet* styleSheet = parentStyleSheet())
&gt; -        doc = styleSheet-&gt;ownerDocument();
&gt; -    if (!doc)
&gt; -        return;
&gt;      

Left a stray blank line here.

&gt; Source/WebCore/css/CSSRule.h:27
&gt; +#include &quot;ExceptionCode.h&quot;

Why change to this instead of the forward-declaration typedef? It seems the code was already doing things the conventional way.

&gt; Source/WebCore/css/CSSStyleSheet.h:222
&gt; +    class RuleMutation {

This object itself is not “a mutation” so I think we need a different name. Maybe RuleMutationGuard or RuleMutationScope.

Also should use WTF_NONCOPYABLE on this class.

Should the constructor and destructor be inlined? I wouldn’t want to without evidence that the code was performance critical, but the functions are short and just turn around and call one other function, which is what makes me think about that.

What will happen if we forget to use one of these? Is there something we can do to make it assert if we forget to set up one of these guards around mutation?

&gt; Source/WebCore/css/PropertySetCSSStyleDeclaration.cpp:160
&gt; +    didMutate(true);

The “true” here is confusing. We normally avoid boolean constants in places like this in new code.

&gt; Source/WebCore/css/PropertySetCSSStyleDeclaration.cpp:379
&gt; +    m_propertySet-&gt;deref();
&gt; +    m_propertySet = propertySet;
&gt; +    m_propertySet-&gt;ref();

Why isn’t m_propertySet a RefPtr?

&gt; Source/WebCore/css/PropertySetCSSStyleDeclaration.h:105
&gt; +    virtual void didMutate(bool changes) OVERRIDE;

I don’t understand what “changes” means here as the name of a boolean argument. It sounds like the name of an array, not a boolean. Maybe if it’s false it means there was actually no change?

&gt; LayoutTests/http/tests/css/shared-stylesheet-mutation.html:55
&gt; +    shouldBe(&quot;window.getComputedStyle(testElement, null).getPropertyValue(&apos;background-color&apos;)&quot;,

No need for the “window.” here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>617096</commentid>
    <comment_count>11</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-05-06 03:29:29 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/116235

with the requested fixes and improved test coverage.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>617097</commentid>
    <comment_count>12</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-05-06 05:54:52 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; (From update of attachment 140396 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=140396&amp;action=review
&gt; 
&gt; It seems really easy to forget to do one of these “will mutate” or “did mutate” calls. Is there some way to make it easy to catch that kind of mistake when people change this code in the future?

If you don&apos;t invoke didMutateRules then the mutation will not be reflected in rendering. Basic testing should pick this up. In didMutateRules we ASSERT(m_internal-&gt;isMutable()) and mutable bit is only set by willMutateRules. This should help some.

Generally we should avoid adding new mutating CSSOM APIs (by not having them into standards in the first place).


&gt; &gt; Source/WebCore/css/CSSRule.h:27
&gt; &gt; +#include &quot;ExceptionCode.h&quot;
&gt; 
&gt; Why change to this instead of the forward-declaration typedef? It seems the code was already doing things the conventional way.

I had impression ExceptionCode.h was trivial (but it seems to be including some other header with a FIXME) and I didn&apos;t like having the type defined in multiple places (typedef is not exactly forward-declaration).

If the idea is to always redefine ExceptionCode in the header, why is it defined in ExceptionCode.h at all?

&gt; &gt; Source/WebCore/css/PropertySetCSSStyleDeclaration.cpp:379
&gt; &gt; +    m_propertySet-&gt;deref();
&gt; &gt; +    m_propertySet = propertySet;
&gt; &gt; +    m_propertySet-&gt;ref();
&gt; 
&gt; Why isn’t m_propertySet a RefPtr?

PropertySetCSSStyleDeclaration has two subclasses, one of which uses forwarding refcounting scheme. This can be fixed when InlineCSSStyleDeclaration is switched to conventional refcounting.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>617228</commentid>
    <comment_count>13</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2012-05-06 16:53:37 -0700</bug_when>
    <thetext>(In reply to comment #12)
&gt; If the idea is to always redefine ExceptionCode in the header, why is it defined in ExceptionCode.h at all?

The design has been to use typedef int ExceptionCode in files that need only the type, and ExceptionCode.h in files that need constants for DOM exception codes. Analogous to using class Node when we need only the class, and Node.h when we need to call functions on an object. We have about a hundred different headers that do the &quot;typedef int ExceptionCode&quot; thing and about two hundred more that use ExceptionCode.h.

I’m not married to it. We could change the design. But that’s how it’s been for a long time, and I don’t think we should start moving away from the typedef as we are making other changes to a header unless we make a conscious decision to do so across the project.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>617377</commentid>
    <comment_count>14</comment_count>
    <who name="Andrey Kosyakov">caseq</who>
    <bug_when>2012-05-06 22:07:31 -0700</bug_when>
    <thetext>This causes a large number of tests crash on chromium debug bots due to an assertion.
Sample flakiness dashboard: http://test-results.appspot.com/dashboards/flakiness_dashboard.html#showExpectations=true&amp;tests=fast%2Fjs%2Fmozilla%2Feval%2Fexhaustive-fun-normalcaller-direct-strictcode.html%2Cfast%2Fjs%2Fmozilla%2Feval%2Fexhaustive-fun-normalcaller-indirect-strictcode.html%2Cfast%2Fjs%2Fmozilla%2Feval%2Fexhaustive-fun-strictcaller-direct-strictcode.html%2Cfast%2Fjs%2Fmozilla%2Feval%2Fexhaustive-fun-strictcaller-indirect-strictcode.html%2Cfast%2Fjs%2Fmozilla%2Feval%2Fexhaustive-global-normalcaller-direct-strictcode.html%2Cfast%2Fjs%2Fmozilla%2Feval%2Fexhaustive-global-normalcaller-indirect-strictcode.html%2Cfast%2Fjs%2Fmozilla%2Feval%2Fexhaustive-global-strictcaller-direct-strictcode.html%2Cfast%2Fjs%2Fmozilla%2Feval%2Fexhaustive-global-strictcaller-indirect-strictcode.html%2Cfast%2Fjs%2Fmozilla%2Fstrict%2F10.4.3.html%2Cfast%2Fjs%2Fmozilla%2Fstrict%2F11.1.5.html%2Cfast%2Fjs%2Fmozilla%2Fstrict%2F11.13.1.html%2Cfast%2Fjs%2Fmozilla%2Fstrict%2F11.3.2.html%2Cfast%2Fjs%2Fmozilla%2Fstrict%2F11.4.4.html%2Cfast%2Fjs%2Fmozilla%2Fstrict%2F12.14.1.html%2Cfast%2Fjs%2Fmozilla%2Fstrict%2F12.2.1.html%2Cfast%2Fjs%2Fmozilla%2Fstrict%2F15.3.4.5.html%2Cfast%2Fjs%2Fmozilla%2Fstrict%2F15.3.5.2.html%2Cfast%2Fjs%2Fmozilla%2Fstrict%2F15.4.4.8.html%2Cfast%2Fjs%2Fmozilla%2Fstrict%2F8.12.7.html%2Cfast%2Fjs%2Fmozilla%2Fstrict%2F8.7.2.html

Assertion:
STDERR: ASSERTION FAILED: root-&gt;m_clients.size() == 1
STDERR: /Volumes/data/b/build/slave/webkit-mac-latest-dbg/build/src/third_party/WebKit/Source/WebCore/WebCore.gyp/../css/CSSStyleSheet.cpp(409) : WebCore::Node *WebCore::StyleSheetInternal::singleOwnerNode() const</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>617394</commentid>
    <comment_count>15</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-05-06 22:39:42 -0700</bug_when>
    <thetext>Re-opened since this is blocked by 85773</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>617446</commentid>
    <comment_count>16</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-05-07 01:14:48 -0700</bug_when>
    <thetext>http://trac.webkit.org/changeset/116281 should fix the assert when scoped stylesheets are enabled.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>617461</commentid>
    <comment_count>17</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-05-07 01:47:30 -0700</bug_when>
    <thetext>Apparently the rollout already silently landed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>617477</commentid>
    <comment_count>18</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-05-07 02:56:21 -0700</bug_when>
    <thetext>Re-landed in http://trac.webkit.org/changeset/116291.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>140198</attachid>
            <date>2012-05-04 05:42:54 -0700</date>
            <delta_ts>2012-05-04 08:28:24 -0700</delta_ts>
            <desc>patch</desc>
            <filename>stylesheet-sharing-8.patch</filename>
            <type>text/plain</type>
            <size>39687</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExNjA4MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0NSBAQAorMjAxMi0wNS0wNCAgQW50dGkg
S29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CisKKyAgICAgICAgU2hhcmUgc3R5bGVzaGVldCBk
YXRhIHN0cnVjdHVyZXMgYmV0d2VlbiBkb2N1bWVudHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg1NTk4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgV2UgY3VycmVudGx5IG1ha2UgYSBjb3B5IG9mIHRoZSBk
YXRhIHN0cnVjdHVyZXMgd2hlbiByZXN0b3JpbmcgYSBjYWNoZWQgc3R5bGVzaGVldC4gVGhpcyBw
YXRjaCBsZXRzIHVzIHNoYXJlCisgICAgICAgIHRoZSBkYXRhIHVudGlsIHNvbWVvbmUgdXNlcyBD
U1NPTSB0byBtb2RpZnkgdGhlIHNoZWV0LgorICAgICAgICAKKyAgICAgICAgVGhlIHBhdGNoIGlt
cGxlbWVudHMgY29weS1vbi13cml0ZSBmb3IgdGhlIGludGVybmFsIHN0eWxlIHNoZWV0IGRhdGEg
c3RydWN0dXJlcy4gSWYgYW55IG11dGF0aW9uIENTU09NIEFQSSBpcworICAgICAgICBpbnZva2Vk
LCB3ZSBjaGVjayBpZiB0aGUgc3R5bGVzaGVldCBjYW4gYmUgc2FmZWx5IG11dGF0ZWQgKHdlIGFy
ZSB0aGUgb25seSBjbGllbnQsIGl0IGlzIG5vdCBjYWNoZWQpLiBJZiBub3QKKyAgICAgICAgdGhl
biB0aGUgaW50ZXJuYWwgc3RydWN0dXJlcyBhcmUgY29waWVkIGFuZCBhbnkgZXhpc3RpbmcgQ1NT
T00gb2JqZWN0cyBhcmUgcmUtYXR0YWNoZWQgdG8gdGhlIG5ldyB0cmVlLgorICAgICAgICAKKyAg
ICAgICAgU2hhcmluZyBjYW4gc2F2ZSBzaWduaWZpY2FudCBhbW91bnQgb2YgbWVtb3J5IG9uIHNp
dGVzIHdpdGggbGFyZ2Ugc3R5bGVzaGVldHMuIEZvciBleGFtcGxlIGlmIHlvdSBoYXZlCisgICAg
ICAgIG11bHRpcGxlIGFydGljbGVzIG9wZW4gb24gd3NqLmNvbSB0aGlzIHNhdmVzIH4yLjZNQiBw
ZXIgdGFiLgorCisgICAgICAgICogY3NzL0NTU0ZvbnRGYWNlUnVsZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NGb250RmFjZVJ1bGU6OnJlYXR0YWNoKToKKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAqIGNzcy9DU1NGb250RmFjZVJ1bGUuaDoKKyAgICAgICAgKENTU0ZvbnRGYWNlUnVs
ZSk6CisgICAgICAgICogY3NzL0NTU01lZGlhUnVsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
U1NNZWRpYVJ1bGU6Omluc2VydFJ1bGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTTWVkaWFSdWxl
OjpkZWxldGVSdWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU01lZGlhUnVsZTo6cmVhdHRhY2gp
OgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogY3NzL0NTU01lZGlhUnVsZS5oOgorICAg
ICAgICAoQ1NTTWVkaWFSdWxlKToKKyAgICAgICAgKiBjc3MvQ1NTUGFnZVJ1bGUuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTUGFnZVJ1bGU6OnNldFNlbGVjdG9yVGV4dCk6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NQYWdlUnVsZTo6cmVhdHRhY2gpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAg
ICAgICogY3NzL0NTU1BhZ2VSdWxlLmg6CisgICAgICAgIChDU1NQYWdlUnVsZSk6CisgICAgICAg
ICogY3NzL0NTU1J1bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUnVsZTo6cmVhdHRhY2gp
OgorICAgICAgICAKKyAgICAgICAgICAgIEFmdGVyIHRoZSBpbnRlcm5hbCBzdHlsZXJ1bGUgdHJl
ZSBoYXMgYmVlbiBjb3BpZWQsIHRoZSBleGlzdGluZyB3cmFwcGVycyBhcmUgcmUtYXR0YWNoZWQg
dXNpbmcgcmVjdXJzaXZlIHJlYXR0YWNoKCkgZnVuY3Rpb24uCisKKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAoV2ViQ29yZTo6Q1NTUnVsZTo6d2lsbE11dGF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpDU1NSdWxlOjpkaWRNdXRhdGUpOgorICAgICAgICAKKyAgICAgICAgICAgIEFkZCB3aWxs
TXV0YXRlL2RpZE11dGF0ZSBhbmQgdXNlIHRoZW0gY29uc2lzdGVudGx5IHRvIGJyYWNrZXQgbXV0
YXRpbmcgQ1NTT00gZnVuY3Rpb25zLgorICAgICAgICAgICAgZGlkTXV0YXRlKCkgcmVwbGFjZWQg
c3R5bGVTaGVldENoYW5nZWQoKSBhbmQgZGlyZWN0IGNhbGxzIHRvIERvY3VtZW50OjpzdHlsZVJl
c29sdmVkQ2hhbmdlZCgpIGV2ZXJ5d2hlcmUuCisKKyAgICAgICAgKiBjc3MvQ1NTUnVsZS5oOgor
ICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChDU1NSdWxlKToKKyAgICAgICAgKiBjc3MvQ1NT
U3R5bGVSdWxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlUnVsZTo6c2V0U2VsZWN0
b3JUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlUnVsZTo6cmVhdHRhY2gpOgorICAg
ICAgICAoV2ViQ29yZSk6CisgICAgICAgICogY3NzL0NTU1N0eWxlUnVsZS5oOgorICAgICAgICAo
Q1NTU3R5bGVSdWxlKToKKyAgICAgICAgKiBjc3MvQ1NTU3R5bGVTaGVldC5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpTdHlsZVNoZWV0SW50ZXJuYWw6OlN0eWxlU2hlZXRJbnRlcm5hbCk6CisgICAg
ICAgIChXZWJDb3JlOjpTdHlsZVNoZWV0SW50ZXJuYWw6OmlzQ2FjaGVhYmxlKToKKyAgICAgICAg
KFdlYkNvcmU6OlN0eWxlU2hlZXRJbnRlcm5hbDo6cnVsZUF0KToKKyAgICAgICAgKFdlYkNvcmUp
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVTaGVldEludGVybmFsOjp3cmFwcGVySW5zZXJ0UnVs
ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVNoZWV0SW50ZXJuYWw6OndyYXBwZXJEZWxldGVS
dWxlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2hlZXRJbnRlcm5hbDo6YWRkZWRUb01lbW9y
eUNhY2hlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2hlZXRJbnRlcm5hbDo6cmVtb3ZlZEZy
b21NZW1vcnlDYWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNoZWV0Ojp3aWxsTXV0
YXRlUnVsZXMpOgorICAgICAgICAKKyAgICAgICAgICAgIFRoaXMgaXMgY2FsbGVkIHdoZW5ldmVy
IFN0eWxlU2hlZXRJbnRlcm5hbCBpcyBnb2luZyB0byBiZSBtdXRhdGVkLiBJdCB3aWxsIGRvIGNv
cHktb24td3JpdGUgaWYgbmVlZGVkLgorCisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNoZWV0
OjpkaWRNdXRhdGVSdWxlcyk6CisgICAgICAgIAorICAgICAgICAgICAgVGhpcyBpcyBjYWxsZWQg
YWZ0ZXIgdGhlIG11dGF0aW9uIGlzIGNvbXBsZXRlIGFuZCB3aWxsIHRyaWdnZXIgdGhlIHN0eWxl
IHJlY2FsYyBpbiB0aGUgZG9jdW1lbnQuCisKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2hl
ZXQ6OmRpZE11dGF0ZSk6CisgICAgICAgIAorICAgICAgICAgICAgVGhpcyBpcyBjYWxsZWQgZGly
ZWN0bHkgYWZ0ZXIgbXV0YXRpb25zIHRoYXQgZG9uJ3QgY2hhbmdlIFN0eWxlU2hlZXRJbnRlcm5h
bCBzbyBkb24ndCByZXF1aXJlIGNvcHktb24td3JpdGUuCisKKyAgICAgICAgKFdlYkNvcmU6OkNT
U1N0eWxlU2hlZXQ6OnJlYXR0YWNoQ2hpbGRSdWxlQ1NTT01XcmFwcGVycyk6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NTdHlsZVNoZWV0OjpzZXREaXNhYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpD
U1NTdHlsZVNoZWV0OjppbnNlcnRSdWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlU2hl
ZXQ6OmRlbGV0ZVJ1bGUpOgorICAgICAgICAqIGNzcy9DU1NTdHlsZVNoZWV0Lmg6CisgICAgICAg
IChTdHlsZVNoZWV0SW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVTaGVldEludGVy
bmFsOjpoYXNPbmVDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVTaGVldEludGVybmFs
Ojppc011dGFibGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVTaGVldEludGVybmFsOjpzZXRN
dXRhYmxlKToKKyAgICAgICAgCisgICAgICAgICAgICBUcmFjayBtdXRhYmlsaXR5LiBNdXRhdGlv
biBpcyBhbGxvd2VkIG9ubHkgYWZ0ZXIgd2lsbE11dGF0ZSBjYWxsLgorCisgICAgICAgIChXZWJD
b3JlOjpTdHlsZVNoZWV0SW50ZXJuYWw6OmlzSW5NZW1vcnlDYWNoZSk6CisgICAgICAgIAorICAg
ICAgICAgICAgVHJhY2sgaWYgdGhlIG9iamVjdCBpcyBpbiBtZW1vcnkgY2FjaGUuCisKKyAgICAg
ICAgKFdlYkNvcmU6OkNTU1N0eWxlU2hlZXQ6OmNsZWFyT3duZXJSdWxlKToKKyAgICAgICAgKENT
U1N0eWxlU2hlZXQpOgorICAgICAgICAqIGNzcy9NZWRpYUxpc3QuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6TWVkaWFMaXN0OjpzZXRNZWRpYVRleHQpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFM
aXN0OjpkZWxldGVNZWRpdW0pOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFMaXN0OjphcHBlbmRN
ZWRpdW0pOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFMaXN0OjpkaWRNdXRhdGUpOgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYUxpc3Q6OnJlYXR0YWNoKToKKyAg
ICAgICAgKiBjc3MvTWVkaWFMaXN0Lmg6CisgICAgICAgIChNZWRpYUxpc3QpOgorICAgICAgICAq
IGNzcy9Qcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uOjpzZXRDc3NUZXh0KToKKyAgICAgICAg
KFdlYkNvcmU6OlByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbjo6c2V0UHJvcGVydHkpOgor
ICAgICAgICAoV2ViQ29yZTo6UHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uOjpyZW1vdmVQ
cm9wZXJ0eSk6CisgICAgICAgIChXZWJDb3JlOjpQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRp
b246OnNldFByb3BlcnR5SW50ZXJuYWwpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHlsZVJ1bGVDU1NTdHlsZURlY2xhcmF0aW9uOjp3aWxsTXV0YXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OlN0eWxlUnVsZUNTU1N0eWxlRGVjbGFyYXRpb246OmRpZE11dGF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZVJ1bGVDU1NTdHlsZURlY2xhcmF0aW9uOjpyZWF0dGFjaCk6
CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVDU1NTdHlsZURlY2xhcmF0aW9uOjpkaWRNdXRhdGUp
OgorICAgICAgICAqIGNzcy9Qcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb24uaDoKKyAgICAg
ICAgKFdlYkNvcmU6OlByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbjo6d2lsbE11dGF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb246OmRpZE11
dGF0ZSk6CisgICAgICAgIChTdHlsZVJ1bGVDU1NTdHlsZURlY2xhcmF0aW9uKToKKyAgICAgICAg
KiBjc3MvV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJL
aXRDU1NLZXlmcmFtZXNSdWxlOjpzZXROYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OldlYktpdENT
U0tleWZyYW1lc1J1bGU6Omluc2VydFJ1bGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViS2l0Q1NT
S2V5ZnJhbWVzUnVsZTo6ZGVsZXRlUnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJLaXRDU1NL
ZXlmcmFtZXNSdWxlOjpyZWF0dGFjaCk6CisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKiBj
c3MvV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZS5oOgorICAgICAgICAoV2ViS2l0Q1NTS2V5ZnJhbWVz
UnVsZSk6CisgICAgICAgICogY3NzL1dlYktpdENTU1JlZ2lvblJ1bGUuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6V2ViS2l0Q1NTUmVnaW9uUnVsZTo6cmVhdHRhY2gpOgorICAgICAgICAqIGNzcy9X
ZWJLaXRDU1NSZWdpb25SdWxlLmg6CisgICAgICAgIChXZWJLaXRDU1NSZWdpb25SdWxlKToKKyAg
ICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JTdHlsZVNoZWV0OjpyZXBhcnNlU3R5bGVTaGVldCk6CisgICAgICAgICog
bG9hZGVyL2NhY2hlL0NhY2hlZENTU1N0eWxlU2hlZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Q2FjaGVkQ1NTU3R5bGVTaGVldDo6fkNhY2hlZENTU1N0eWxlU2hlZXQpOgorICAgICAgICAoV2Vi
Q29yZTo6Q2FjaGVkQ1NTU3R5bGVTaGVldDo6ZGVzdHJveURlY29kZWREYXRhKToKKyAgICAgICAg
KFdlYkNvcmU6OkNhY2hlZENTU1N0eWxlU2hlZXQ6OnJlc3RvcmVQYXJzZWRTdHlsZVNoZWV0KToK
KyAgICAgICAgCisgICAgICAgICAgICBEb24ndCBjb3B5IHdoZW4gcmVzdG9yaW5nLiBJdCBpcyBu
byBsb25nZXIgbmVjZXNzYXJ5LgorICAgICAgICAgICAgU2V0IHRoZSBjYWNoZSBiaXQgb24gdGhl
IHN0eWxlc2hlZXQuCisKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZENTU1N0eWxlU2hlZXQ6OnNh
dmVQYXJzZWRTdHlsZVNoZWV0KToKKwogMjAxMi0wNS0wMyAgSWx5YSBUaWtob25vdnNreSAgPGxv
aXNsb0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgV2ViIEluc3BlY3RvcjogY3JlYXRlUmF3TG9j
YXRpb25CeVVSTCBpcyB0b28gc2xvdyBpZiBhIGJpZyBudW1iZXIgb2YgZXZhbHMgaGFwcGVuLgpJ
bmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlUnVsZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlUnVsZS5jcHAJKHJldmlzaW9uIDExNTk1
OSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVJ1bGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC01NSw0ICs1NSwxMiBAQCBTdHJpbmcgQ1NTRm9udEZhY2VSdWxlOjpjc3NUZXh0KCkg
Y29uc3QKICAgICByZXR1cm4gcmVzdWx0OwogfQogCit2b2lkIENTU0ZvbnRGYWNlUnVsZTo6cmVh
dHRhY2goU3R5bGVSdWxlRm9udEZhY2UqIHJ1bGUpCit7CisgICAgQVNTRVJUKHJ1bGUpOworICAg
IG1fZm9udEZhY2VSdWxlID0gcnVsZTsKKyAgICBpZiAobV9wcm9wZXJ0aWVzQ1NTT01XcmFwcGVy
KQorICAgICAgICBtX3Byb3BlcnRpZXNDU1NPTVdyYXBwZXItPnJlYXR0YWNoKG1fZm9udEZhY2VS
dWxlLT5wcm9wZXJ0aWVzKCkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VSdWxlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlUnVsZS5oCShyZXZpc2lvbiAxMTU5NTkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VSdWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQzLDYg
KzQzLDggQEAgcHVibGljOgogCiAgICAgU3RyaW5nIGNzc1RleHQoKSBjb25zdDsKIAorICAgIHZv
aWQgcmVhdHRhY2goU3R5bGVSdWxlRm9udEZhY2UqKTsKKwogcHJpdmF0ZToKICAgICBDU1NGb250
RmFjZVJ1bGUoU3R5bGVSdWxlRm9udEZhY2UqLCBDU1NTdHlsZVNoZWV0KiBwYXJlbnQpOwogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTTWVkaWFSdWxlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTTWVkaWFSdWxlLmNwcAkocmV2aXNpb24gMTE1OTU5KQorKysg
U291cmNlL1dlYkNvcmUvY3NzL0NTU01lZGlhUnVsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTgw
LDEyICs4MCwxMyBAQCB1bnNpZ25lZCBDU1NNZWRpYVJ1bGU6Omluc2VydFJ1bGUoY29uc3QgCiAg
ICAgICAgIGVjID0gSElFUkFSQ0hZX1JFUVVFU1RfRVJSOwogICAgICAgICByZXR1cm4gMDsKICAg
ICB9CisgICAgd2lsbE11dGF0ZSgpOworCiAgICAgbV9tZWRpYVJ1bGUtPndyYXBwZXJJbnNlcnRS
dWxlKGluZGV4LCBuZXdSdWxlKTsKIAogICAgIG1fY2hpbGRSdWxlQ1NTT01XcmFwcGVycy5pbnNl
cnQoaW5kZXgsIFJlZlB0cjxDU1NSdWxlPigpKTsKIAotICAgIGlmIChDU1NTdHlsZVNoZWV0KiBz
dHlsZVNoZWV0ID0gcGFyZW50U3R5bGVTaGVldCgpKQotICAgICAgICBzdHlsZVNoZWV0LT5zdHls
ZVNoZWV0Q2hhbmdlZCgpOworICAgIGRpZE11dGF0ZSgpOwogCiAgICAgcmV0dXJuIGluZGV4Owog
fQpAQCAtMTAwLDE0ICsxMDEsMTYgQEAgdm9pZCBDU1NNZWRpYVJ1bGU6OmRlbGV0ZVJ1bGUodW5z
aWduZWQgaQogICAgICAgICBlYyA9IElOREVYX1NJWkVfRVJSOwogICAgICAgICByZXR1cm47CiAg
ICAgfQorCisgICAgd2lsbE11dGF0ZSgpOworCiAgICAgbV9tZWRpYVJ1bGUtPndyYXBwZXJSZW1v
dmVSdWxlKGluZGV4KTsKIAogICAgIGlmIChtX2NoaWxkUnVsZUNTU09NV3JhcHBlcnNbaW5kZXhd
KQogICAgICAgICBtX2NoaWxkUnVsZUNTU09NV3JhcHBlcnNbaW5kZXhdLT5zZXRQYXJlbnRSdWxl
KDApOwogICAgIG1fY2hpbGRSdWxlQ1NTT01XcmFwcGVycy5yZW1vdmUoaW5kZXgpOwogCi0gICAg
aWYgKENTU1N0eWxlU2hlZXQqIHN0eWxlU2hlZXQgPSBwYXJlbnRTdHlsZVNoZWV0KCkpCi0gICAg
ICAgIHN0eWxlU2hlZXQtPnN0eWxlU2hlZXRDaGFuZ2VkKCk7CisgICAgZGlkTXV0YXRlKCk7CiB9
CiAKIFN0cmluZyBDU1NNZWRpYVJ1bGU6OmNzc1RleHQoKSBjb25zdApAQCAtMTYzLDQgKzE2Niwx
NiBAQCBDU1NSdWxlTGlzdCogQ1NTTWVkaWFSdWxlOjpjc3NSdWxlcygpIGNvCiAgICAgcmV0dXJu
IG1fcnVsZUxpc3RDU1NPTVdyYXBwZXIuZ2V0KCk7CiB9CiAKK3ZvaWQgQ1NTTWVkaWFSdWxlOjpy
ZWF0dGFjaChTdHlsZVJ1bGVNZWRpYSogcnVsZSkKK3sKKyAgICBBU1NFUlQocnVsZSk7CisgICAg
bV9tZWRpYVJ1bGUgPSBydWxlOworICAgIGlmIChtX21lZGlhQ1NTT01XcmFwcGVyKQorICAgICAg
ICBtX21lZGlhQ1NTT01XcmFwcGVyLT5yZWF0dGFjaChtX21lZGlhUnVsZS0+bWVkaWFRdWVyaWVz
KCkpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2NoaWxkUnVsZUNTU09NV3JhcHBl
cnMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKG1fY2hpbGRSdWxlQ1NTT01XcmFwcGVyc1tp
XSkKKyAgICAgICAgICAgIG1fY2hpbGRSdWxlQ1NTT01XcmFwcGVyc1tpXS0+cmVhdHRhY2gobV9t
ZWRpYVJ1bGUtPmNoaWxkUnVsZXMoKVtpXS5nZXQoKSk7CisgICAgfQorfQorCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTTWVkaWFSdWxlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU01lZGlhUnVsZS5oCShyZXZpc2lvbiAx
MTU5NTkpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTTWVkaWFSdWxlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTUwLDYgKzUwLDggQEAgcHVibGljOgogICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0
OwogICAgIENTU1J1bGUqIGl0ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0OwogCisgICAgdm9pZCBy
ZWF0dGFjaChTdHlsZVJ1bGVNZWRpYSopOworCiBwcml2YXRlOgogICAgIENTU01lZGlhUnVsZShT
dHlsZVJ1bGVNZWRpYSosIENTU1N0eWxlU2hlZXQqKTsKICAgICAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NQYWdlUnVsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3Nz
L0NTU1BhZ2VSdWxlLmNwcAkocmV2aXNpb24gMTE1OTU5KQorKysgU291cmNlL1dlYkNvcmUvY3Nz
L0NTU1BhZ2VSdWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNjUsMjQgKzY1LDE5IEBAIFN0cmlu
ZyBDU1NQYWdlUnVsZTo6c2VsZWN0b3JUZXh0KCkgY29uc3QKIAogdm9pZCBDU1NQYWdlUnVsZTo6
c2V0U2VsZWN0b3JUZXh0KGNvbnN0IFN0cmluZyYgc2VsZWN0b3JUZXh0KQogewotICAgIERvY3Vt
ZW50KiBkb2MgPSAwOwotICAgIGlmIChDU1NTdHlsZVNoZWV0KiBzdHlsZVNoZWV0ID0gcGFyZW50
U3R5bGVTaGVldCgpKQotICAgICAgICBkb2MgPSBzdHlsZVNoZWV0LT5vd25lckRvY3VtZW50KCk7
Ci0gICAgaWYgKCFkb2MpCi0gICAgICAgIHJldHVybjsKICAgICAKICAgICBDU1NQYXJzZXIgcGFy
c2VyKHBhcnNlckNvbnRleHQoKSk7CiAgICAgQ1NTU2VsZWN0b3JMaXN0IHNlbGVjdG9yTGlzdDsK
ICAgICBwYXJzZXIucGFyc2VTZWxlY3RvcihzZWxlY3RvclRleHQsIHNlbGVjdG9yTGlzdCk7CiAg
ICAgaWYgKCFzZWxlY3Rvckxpc3QuZmlyc3QoKSkKICAgICAgICAgcmV0dXJuOwotICAgIAorCisg
ICAgd2lsbE11dGF0ZSgpOworCiAgICAgU3RyaW5nIG9sZFNlbGVjdG9yVGV4dCA9IHRoaXMtPnNl
bGVjdG9yVGV4dCgpOwogICAgIG1fcGFnZVJ1bGUtPndyYXBwZXJBZG9wdFNlbGVjdG9yTGlzdChz
ZWxlY3Rvckxpc3QpOwotICAgIAotICAgIGlmICh0aGlzLT5zZWxlY3RvclRleHQoKSA9PSBvbGRT
ZWxlY3RvclRleHQpCi0gICAgICAgIHJldHVybjsKLSAgICBkb2MtPnN0eWxlUmVzb2x2ZXJDaGFu
Z2VkKERlZmVyUmVjYWxjU3R5bGUpOworCisgICAgZGlkTXV0YXRlKCk7CiB9CiAKIFN0cmluZyBD
U1NQYWdlUnVsZTo6Y3NzVGV4dCgpIGNvbnN0CkBAIC05NCw0ICs4OSwxMiBAQCBTdHJpbmcgQ1NT
UGFnZVJ1bGU6OmNzc1RleHQoKSBjb25zdAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKK3ZvaWQg
Q1NTUGFnZVJ1bGU6OnJlYXR0YWNoKFN0eWxlUnVsZVBhZ2UqIHJ1bGUpCit7CisgICAgQVNTRVJU
KHJ1bGUpOworICAgIG1fcGFnZVJ1bGUgPSBydWxlOworICAgIGlmIChtX3Byb3BlcnRpZXNDU1NP
TVdyYXBwZXIpCisgICAgICAgIG1fcHJvcGVydGllc0NTU09NV3JhcHBlci0+cmVhdHRhY2gobV9w
YWdlUnVsZS0+cHJvcGVydGllcygpKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRl
eDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhZ2VSdWxlLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvY3NzL0NTU1BhZ2VSdWxlLmgJKHJldmlzaW9uIDExNTk1OSkKKysrIFNvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NQYWdlUnVsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw5IEBA
IHB1YmxpYzoKICAgICB2b2lkIHNldFNlbGVjdG9yVGV4dChjb25zdCBTdHJpbmcmKTsKIAogICAg
IFN0cmluZyBjc3NUZXh0KCkgY29uc3Q7Ci0gICAgCisKKyAgICB2b2lkIHJlYXR0YWNoKFN0eWxl
UnVsZVBhZ2UqKTsKKwogcHJpdmF0ZToKICAgICBDU1NQYWdlUnVsZShTdHlsZVJ1bGVQYWdlKiwg
Q1NTU3R5bGVTaGVldCopOwogICAgIApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1J1bGUu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NSdWxlLmNwcAkocmV2aXNp
b24gMTE1OTU5KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1J1bGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZS5o
IgogI2luY2x1ZGUgIldlYktpdENTU1JlZ2lvblJ1bGUuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1l
bnRlZC5oIgorI2luY2x1ZGUgIlN0eWxlUnVsZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAK
QEAgLTExMyw0ICsxMTQsNTggQEAgdm9pZCBDU1NSdWxlOjpkZXN0cm95KCkKICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKIH0KIAordm9pZCBDU1NSdWxlOjpyZWF0dGFjaChTdHlsZVJ1bGVCYXNl
KiBydWxlKQoreworICAgIHN3aXRjaCAodHlwZSgpKSB7CisgICAgY2FzZSBVTktOT1dOX1JVTEU6
CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFNUWUxFX1JVTEU6CisgICAgICAgIHN0YXRpY19j
YXN0PENTU1N0eWxlUnVsZSo+KHRoaXMpLT5yZWF0dGFjaChzdGF0aWNfY2FzdDxTdHlsZVJ1bGUq
PihydWxlKSk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFBBR0VfUlVMRToKKyAgICAgICAg
c3RhdGljX2Nhc3Q8Q1NTUGFnZVJ1bGUqPih0aGlzKS0+cmVhdHRhY2goc3RhdGljX2Nhc3Q8U3R5
bGVSdWxlUGFnZSo+KHJ1bGUpKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ0hBUlNFVF9S
VUxFOgorICAgICAgICBBU1NFUlQoIXJ1bGUpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJ
TVBPUlRfUlVMRToKKyAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB3aGVuIGVuYWJsaW5nIGNh
Y2hpbmcgZm9yIHN0eWxlc2hlZXRzIHdpdGggaW1wb3J0IHJ1bGVzLgorICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgTUVESUFfUlVMRToKKyAg
ICAgICAgc3RhdGljX2Nhc3Q8Q1NTTWVkaWFSdWxlKj4odGhpcyktPnJlYXR0YWNoKHN0YXRpY19j
YXN0PFN0eWxlUnVsZU1lZGlhKj4ocnVsZSkpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBG
T05UX0ZBQ0VfUlVMRToKKyAgICAgICAgc3RhdGljX2Nhc3Q8Q1NTRm9udEZhY2VSdWxlKj4odGhp
cyktPnJlYXR0YWNoKHN0YXRpY19jYXN0PFN0eWxlUnVsZUZvbnRGYWNlKj4ocnVsZSkpOworICAg
ICAgICByZXR1cm47CisgICAgY2FzZSBXRUJLSVRfS0VZRlJBTUVTX1JVTEU6CisgICAgICAgIHN0
YXRpY19jYXN0PFdlYktpdENTU0tleWZyYW1lc1J1bGUqPih0aGlzKS0+cmVhdHRhY2goc3RhdGlj
X2Nhc3Q8U3R5bGVSdWxlS2V5ZnJhbWVzKj4ocnVsZSkpOworICAgICAgICByZXR1cm47CisgICAg
Y2FzZSBXRUJLSVRfS0VZRlJBTUVfUlVMRToKKyAgICAgICAgLy8gTm8gbmVlZCB0byByZWF0dGFj
aCwgdGhlIHVuZGVybHlpbmcgZGF0YSBpcyBzaGFyZWFibGUgb24gbXV0YXRpb24uCisgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBXRUJLSVRf
UkVHSU9OX1JVTEU6CisgICAgICAgIHN0YXRpY19jYXN0PFdlYktpdENTU1JlZ2lvblJ1bGUqPih0
aGlzKS0+cmVhdHRhY2goc3RhdGljX2Nhc3Q8U3R5bGVSdWxlUmVnaW9uKj4ocnVsZSkpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCit2b2lk
IENTU1J1bGU6OndpbGxNdXRhdGUoKQoreworICAgIENTU1N0eWxlU2hlZXQqIHN0eWxlU2hlZXQg
PSBwYXJlbnRTdHlsZVNoZWV0KCk7CisgICAgaWYgKCFzdHlsZVNoZWV0KQorICAgICAgICByZXR1
cm47CisgICAgc3R5bGVTaGVldC0+d2lsbE11dGF0ZVJ1bGVzKCk7Cit9CisKK3ZvaWQgQ1NTUnVs
ZTo6ZGlkTXV0YXRlKCkKK3sKKyAgICBDU1NTdHlsZVNoZWV0KiBzdHlsZVNoZWV0ID0gcGFyZW50
U3R5bGVTaGVldCgpOworICAgIGlmICghc3R5bGVTaGVldCkKKyAgICAgICAgcmV0dXJuOworICAg
IHN0eWxlU2hlZXQtPmRpZE11dGF0ZVJ1bGVzKCk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NSdWxlLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvY3NzL0NTU1J1bGUuaAkocmV2aXNpb24gMTE1OTU5KQorKysgU291cmNlL1dl
YkNvcmUvY3NzL0NTU1J1bGUuaAkod29ya2luZyBjb3B5KQpAQCAtMjQsMTIgKzI0LDEzIEBACiAj
ZGVmaW5lIENTU1J1bGVfaAogCiAjaW5jbHVkZSAiQ1NTU3R5bGVTaGVldC5oIgorI2luY2x1ZGUg
IkV4Y2VwdGlvbkNvZGUuaCIKICNpbmNsdWRlICJLVVJMSGFzaC5oIgogI2luY2x1ZGUgPHd0Zi9M
aXN0SGFzaFNldC5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXR5cGVkZWYgaW50IEV4Y2Vw
dGlvbkNvZGU7CitjbGFzcyBTdHlsZVJ1bGVCYXNlOwogCiBjbGFzcyBDU1NSdWxlIDogcHVibGlj
IFJlZkNvdW50ZWQ8Q1NTUnVsZT4gewogcHVibGljOgpAQCAtOTMsNiArOTQsMTAgQEAgcHVibGlj
OgogICAgIFN0cmluZyBjc3NUZXh0KCkgY29uc3Q7CiAgICAgdm9pZCBzZXRDc3NUZXh0KGNvbnN0
IFN0cmluZyYsIEV4Y2VwdGlvbkNvZGUmKTsKIAorICAgIHZvaWQgcmVhdHRhY2goU3R5bGVSdWxl
QmFzZSopOworICAgIHZvaWQgd2lsbE11dGF0ZSgpOworICAgIHZvaWQgZGlkTXV0YXRlKCk7CisK
IHByb3RlY3RlZDoKICAgICBDU1NSdWxlKENTU1N0eWxlU2hlZXQqIHBhcmVudCwgVHlwZSB0eXBl
KQogICAgICAgICA6IG1faGFzQ2FjaGVkU2VsZWN0b3JUZXh0KGZhbHNlKQpJbmRleDogU291cmNl
L1dlYkNvcmUvY3NzL0NTU1N0eWxlUnVsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvY3NzL0NTU1N0eWxlUnVsZS5jcHAJKHJldmlzaW9uIDExNTk1OSkKKysrIFNvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NTdHlsZVJ1bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MSwxOCArOTEsMTQg
QEAgU3RyaW5nIENTU1N0eWxlUnVsZTo6c2VsZWN0b3JUZXh0KCkgY29ucwogCiB2b2lkIENTU1N0
eWxlUnVsZTo6c2V0U2VsZWN0b3JUZXh0KGNvbnN0IFN0cmluZyYgc2VsZWN0b3JUZXh0KQogewot
ICAgIERvY3VtZW50KiBkb2MgPSAwOwotICAgIGlmIChDU1NTdHlsZVNoZWV0KiBzdHlsZVNoZWV0
ID0gcGFyZW50U3R5bGVTaGVldCgpKQotICAgICAgICBkb2MgPSBzdHlsZVNoZWV0LT5vd25lckRv
Y3VtZW50KCk7Ci0gICAgaWYgKCFkb2MpCi0gICAgICAgIHJldHVybjsKLQogICAgIENTU1BhcnNl
ciBwKHBhcnNlckNvbnRleHQoKSk7CiAgICAgQ1NTU2VsZWN0b3JMaXN0IHNlbGVjdG9yTGlzdDsK
ICAgICBwLnBhcnNlU2VsZWN0b3Ioc2VsZWN0b3JUZXh0LCBzZWxlY3Rvckxpc3QpOwogICAgIGlm
ICghc2VsZWN0b3JMaXN0LmZpcnN0KCkpCiAgICAgICAgIHJldHVybjsKIAorICAgIHdpbGxNdXRh
dGUoKTsKKwogICAgIFN0cmluZyBvbGRTZWxlY3RvclRleHQgPSB0aGlzLT5zZWxlY3RvclRleHQo
KTsKICAgICBtX3N0eWxlUnVsZS0+d3JhcHBlckFkb3B0U2VsZWN0b3JMaXN0KHNlbGVjdG9yTGlz
dCk7CiAKQEAgLTExMSw3ICsxMDcsNyBAQCB2b2lkIENTU1N0eWxlUnVsZTo6c2V0U2VsZWN0b3JU
ZXh0KGNvbnN0CiAgICAgICAgIHNlbGVjdG9yVGV4dENhY2hlKCkuc2V0KHRoaXMsIGdlbmVyYXRl
U2VsZWN0b3JUZXh0KCkpOwogICAgIH0KIAotICAgIGRvYy0+c3R5bGVSZXNvbHZlckNoYW5nZWQo
RGVmZXJSZWNhbGNTdHlsZSk7CisgICAgZGlkTXV0YXRlKCk7CiB9CiAKIFN0cmluZyBDU1NTdHls
ZVJ1bGU6OmNzc1RleHQoKSBjb25zdApAQCAtMTI1LDQgKzEyMSwxMSBAQCBTdHJpbmcgQ1NTU3R5
bGVSdWxlOjpjc3NUZXh0KCkgY29uc3QKICAgICByZXR1cm4gcmVzdWx0OwogfQogCit2b2lkIENT
U1N0eWxlUnVsZTo6cmVhdHRhY2goU3R5bGVSdWxlKiBydWxlKQoreworICAgIG1fc3R5bGVSdWxl
ID0gcnVsZTsKKyAgICBpZiAobV9wcm9wZXJ0aWVzQ1NTT01XcmFwcGVyKQorICAgICAgICBtX3By
b3BlcnRpZXNDU1NPTVdyYXBwZXItPnJlYXR0YWNoKG1fc3R5bGVSdWxlLT5wcm9wZXJ0aWVzKCkp
OworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTU3R5bGVSdWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxl
UnVsZS5oCShyZXZpc2lvbiAxMTU5NTkpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVS
dWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDggQEAgcHVibGljOgogICAgIC8vIEZJ
WE1FOiBOb3QgQ1NTT00uIFJlbW92ZS4KICAgICBTdHlsZVJ1bGUqIHN0eWxlUnVsZSgpIGNvbnN0
IHsgcmV0dXJuIG1fc3R5bGVSdWxlLmdldCgpOyB9CiAKKyAgICB2b2lkIHJlYXR0YWNoKFN0eWxl
UnVsZSopOworCiBwcml2YXRlOgogICAgIENTU1N0eWxlUnVsZShTdHlsZVJ1bGUqLCBDU1NTdHls
ZVNoZWV0Kik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNoZWV0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTaGVldC5jcHAJKHJldmlz
aW9uIDExNTk1OSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNoZWV0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtOTksNyArOTksOCBAQCBTdHlsZVNoZWV0SW50ZXJuYWw6OlN0eWxlU2hl
ZXRJbnRlcm5hbChTCiAgICAgLCBtX2hhc1N5bnRhY3RpY2FsbHlWYWxpZENTU0hlYWRlcih0cnVl
KQogICAgICwgbV9kaWRMb2FkRXJyb3JPY2N1cihmYWxzZSkKICAgICAsIG1fdXNlc1JlbVVuaXRz
KGZhbHNlKQotICAgICwgbV9oYXNNdXRhdGVkKGZhbHNlKQorICAgICwgbV9pc011dGFibGUoZmFs
c2UpCisgICAgLCBtX2lzSW5NZW1vcnlDYWNoZShmYWxzZSkKICAgICAsIG1fcGFyc2VyQ29udGV4
dChjb250ZXh0KQogewogfQpAQCAtMTE4LDcgKzExOSw4IEBAIFN0eWxlU2hlZXRJbnRlcm5hbDo6
U3R5bGVTaGVldEludGVybmFsKGMKICAgICAsIG1faGFzU3ludGFjdGljYWxseVZhbGlkQ1NTSGVh
ZGVyKG8ubV9oYXNTeW50YWN0aWNhbGx5VmFsaWRDU1NIZWFkZXIpCiAgICAgLCBtX2RpZExvYWRF
cnJvck9jY3VyKGZhbHNlKQogICAgICwgbV91c2VzUmVtVW5pdHMoby5tX3VzZXNSZW1Vbml0cykK
LSAgICAsIG1faGFzTXV0YXRlZChmYWxzZSkKKyAgICAsIG1faXNNdXRhYmxlKGZhbHNlKQorICAg
ICwgbV9pc0luTWVtb3J5Q2FjaGUoZmFsc2UpCiAgICAgLCBtX3BhcnNlckNvbnRleHQoby5tX3Bh
cnNlckNvbnRleHQpCiB7CiAgICAgQVNTRVJUKG8uaXNDYWNoZWFibGUoKSk7CkBAIC0xNDAsMTMg
KzE0MiwxNiBAQCBib29sIFN0eWxlU2hlZXRJbnRlcm5hbDo6aXNDYWNoZWFibGUoKSBjCiAgICAg
Ly8gRklYTUU6IFN1cHBvcnQgY29weWluZyBpbXBvcnQgcnVsZXMuCiAgICAgaWYgKCFtX2ltcG9y
dFJ1bGVzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIC8vIEZJWE1FOiBT
dXBwb3J0IGNhY2hlZCBzdHlsZXNoZWV0cyBpbiBpbXBvcnQgcnVsZXMuCisgICAgaWYgKG1fb3du
ZXJSdWxlKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgLy8gVGhpcyB3b3VsZCByZXF1aXJl
IGRlYWxpbmcgd2l0aCBtdWx0aXBsZSBjbGllbnRzIGZvciBsb2FkIGNhbGxiYWNrcy4KICAgICBp
ZiAoIW1fbG9hZENvbXBsZXRlZCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIGlmIChtX2Rp
ZExvYWRFcnJvck9jY3VyKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgLy8gSXQgaXMgbm90
IHRoZSBvcmlnaW5hbCBzaGVldCBhbnltb3JlLgotICAgIGlmIChtX2hhc011dGF0ZWQpCisgICAg
aWYgKG1faXNNdXRhYmxlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgLy8gSWYgdGhlIGhl
YWRlciBpcyB2YWxpZCB3ZSBhcmUgbm90IGdvaW5nIHRvIG5lZWQgdG8gY2hlY2sgdGhlIFNlY3Vy
aXR5T3JpZ2luLgogICAgIC8vIEZJWE1FOiBWYWxpZCBtaW1lIHR5cGUgYXZvaWRzIHRoZSBjaGVj
ayB0b28uCkBAIC0xNjksNiArMTc0LDIzIEBAIHZvaWQgU3R5bGVTaGVldEludGVybmFsOjpwYXJz
ZXJBcHBlbmRSdWwKICAgICBtX2NoaWxkUnVsZXMuYXBwZW5kKHJ1bGUpOwogfQogCitTdHlsZVJ1
bGVCYXNlKiBTdHlsZVNoZWV0SW50ZXJuYWw6OnJ1bGVBdCh1bnNpZ25lZCBpbmRleCkgY29uc3QK
K3sKKyAgICBBU1NFUlQoaW5kZXggPCBydWxlQ291bnQoKSk7CisgICAgCisgICAgdW5zaWduZWQg
Y2hpbGRWZWN0b3JJbmRleCA9IGluZGV4OworICAgIGlmIChoYXNDaGFyc2V0UnVsZSgpKSB7Cisg
ICAgICAgIGlmIChpbmRleCA9PSAwKQorICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIC0t
Y2hpbGRWZWN0b3JJbmRleDsKKyAgICB9CisgICAgaWYgKGNoaWxkVmVjdG9ySW5kZXggPCBtX2lt
cG9ydFJ1bGVzLnNpemUoKSkKKyAgICAgICAgcmV0dXJuIG1faW1wb3J0UnVsZXNbY2hpbGRWZWN0
b3JJbmRleF0uZ2V0KCk7CisKKyAgICBjaGlsZFZlY3RvckluZGV4IC09IG1faW1wb3J0UnVsZXMu
c2l6ZSgpOworICAgIHJldHVybiBtX2NoaWxkUnVsZXNbY2hpbGRWZWN0b3JJbmRleF0uZ2V0KCk7
Cit9CisKIFBhc3NSZWZQdHI8Q1NTUnVsZT4gU3R5bGVTaGVldEludGVybmFsOjpjcmVhdGVDaGls
ZFJ1bGVDU1NPTVdyYXBwZXIodW5zaWduZWQgaW5kZXgsIENTU1N0eWxlU2hlZXQqIHBhcmVudFdy
YXBwZXIpCiB7CiAgICAgQVNTRVJUKGluZGV4IDwgcnVsZUNvdW50KCkpOwpAQCAtMjQyLDcgKzI2
NCw2IEBAIGJvb2wgU3R5bGVTaGVldEludGVybmFsOjp3cmFwcGVySW5zZXJ0UnUKICAgICAgICAg
bV9pbXBvcnRSdWxlc1tjaGlsZFZlY3RvckluZGV4XS0+c2V0UGFyZW50U3R5bGVTaGVldCh0aGlz
KTsKICAgICAgICAgbV9pbXBvcnRSdWxlc1tjaGlsZFZlY3RvckluZGV4XS0+cmVxdWVzdFN0eWxl
U2hlZXQoKTsKICAgICAgICAgLy8gRklYTUU6IFN0eWxlc2hlZXQgZG9lc24ndCBhY3R1YWxseSBj
aGFuZ2UgbWVhbmluZ2Z1bGx5IGJlZm9yZSB0aGUgaW1wb3J0ZWQgc2hlZXRzIGFyZSBsb2FkZWQu
Ci0gICAgICAgIHN0eWxlU2hlZXRDaGFuZ2VkKCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAg
IH0KICAgICAvLyBJbnNlcnRpbmcgQGltcG9ydCBydWxlIGFmdGVyIGEgbm9uLWltcG9ydCBydWxl
IGlzIG5vdCBhbGxvd2VkLgpAQCAtMjUxLDggKzI3Miw2IEBAIGJvb2wgU3R5bGVTaGVldEludGVy
bmFsOjp3cmFwcGVySW5zZXJ0UnUKICAgICBjaGlsZFZlY3RvckluZGV4IC09IG1faW1wb3J0UnVs
ZXMuc2l6ZSgpOwogIAogICAgIG1fY2hpbGRSdWxlcy5pbnNlcnQoY2hpbGRWZWN0b3JJbmRleCwg
cnVsZSk7Ci0gICAgCi0gICAgc3R5bGVTaGVldENoYW5nZWQoKTsKICAgICByZXR1cm4gdHJ1ZTsK
IH0KIApAQCAtMjY0LDcgKzI4Myw2IEBAIHZvaWQgU3R5bGVTaGVldEludGVybmFsOjp3cmFwcGVy
RGVsZXRlUnUKICAgICBpZiAoaGFzQ2hhcnNldFJ1bGUoKSkgewogICAgICAgICBpZiAoY2hpbGRW
ZWN0b3JJbmRleCA9PSAwKSB7CiAgICAgICAgICAgICBjbGVhckNoYXJzZXRSdWxlKCk7Ci0gICAg
ICAgICAgICBzdHlsZVNoZWV0Q2hhbmdlZCgpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAg
ICB9CiAgICAgICAgIC0tY2hpbGRWZWN0b3JJbmRleDsKQEAgLTI3MiwxMyArMjkwLDExIEBAIHZv
aWQgU3R5bGVTaGVldEludGVybmFsOjp3cmFwcGVyRGVsZXRlUnUKICAgICBpZiAoY2hpbGRWZWN0
b3JJbmRleCA8IG1faW1wb3J0UnVsZXMuc2l6ZSgpKSB7CiAgICAgICAgIG1faW1wb3J0UnVsZXNb
Y2hpbGRWZWN0b3JJbmRleF0tPmNsZWFyUGFyZW50U3R5bGVTaGVldCgpOwogICAgICAgICBtX2lt
cG9ydFJ1bGVzLnJlbW92ZShjaGlsZFZlY3RvckluZGV4KTsKLSAgICAgICAgc3R5bGVTaGVldENo
YW5nZWQoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBjaGlsZFZlY3RvckluZGV4IC09
IG1faW1wb3J0UnVsZXMuc2l6ZSgpOwogCiAgICAgbV9jaGlsZFJ1bGVzLnJlbW92ZShjaGlsZFZl
Y3RvckluZGV4KTsKLSAgICBzdHlsZVNoZWV0Q2hhbmdlZCgpOwogfQogCiB2b2lkIFN0eWxlU2hl
ZXRJbnRlcm5hbDo6cGFyc2VyQWRkTmFtZXNwYWNlKGNvbnN0IEF0b21pY1N0cmluZyYgcHJlZml4
LCBjb25zdCBBdG9taWNTdHJpbmcmIHVyaSkKQEAgLTQxNSwxNiArNDMxLDYgQEAgRG9jdW1lbnQq
IFN0eWxlU2hlZXRJbnRlcm5hbDo6c2luZ2xlT3duZQogICAgIHJldHVybiBvd25lck5vZGUgPyBv
d25lck5vZGUtPmRvY3VtZW50KCkgOiAwOwogfQogCi12b2lkIFN0eWxlU2hlZXRJbnRlcm5hbDo6
c3R5bGVTaGVldENoYW5nZWQoKQotewotICAgIG1faGFzTXV0YXRlZCA9IHRydWU7Ci0KLSAgICBE
b2N1bWVudCogb3duZXJEb2N1bWVudCA9IHNpbmdsZU93bmVyRG9jdW1lbnQoKTsKLSAgICBpZiAo
IW93bmVyRG9jdW1lbnQpCi0gICAgICAgIHJldHVybjsKLSAgICBvd25lckRvY3VtZW50LT5zdHls
ZVJlc29sdmVyQ2hhbmdlZChEZWZlclJlY2FsY1N0eWxlKTsKLX0KLQogS1VSTCBTdHlsZVNoZWV0
SW50ZXJuYWw6OmNvbXBsZXRlVVJMKGNvbnN0IFN0cmluZyYgdXJsKSBjb25zdAogewogICAgIHJl
dHVybiBDU1NQYXJzZXI6OmNvbXBsZXRlVVJMKG1fcGFyc2VyQ29udGV4dCwgdXJsKTsKQEAgLTQ3
Myw2ICs0NzksMjAgQEAgdm9pZCBTdHlsZVNoZWV0SW50ZXJuYWw6OnVucmVnaXN0ZXJDbGllbgog
ICAgIG1fY2xpZW50cy5yZW1vdmUocG9zaXRpb24pOwogfQogCit2b2lkIFN0eWxlU2hlZXRJbnRl
cm5hbDo6YWRkZWRUb01lbW9yeUNhY2hlKCkKK3sKKyAgICBBU1NFUlQoIW1faXNJbk1lbW9yeUNh
Y2hlKTsKKyAgICBBU1NFUlQoaXNDYWNoZWFibGUoKSk7CisgICAgbV9pc0luTWVtb3J5Q2FjaGUg
PSB0cnVlOworfQorCit2b2lkIFN0eWxlU2hlZXRJbnRlcm5hbDo6cmVtb3ZlZEZyb21NZW1vcnlD
YWNoZSgpCit7CisgICAgQVNTRVJUKG1faXNJbk1lbW9yeUNhY2hlKTsKKyAgICBBU1NFUlQoaXND
YWNoZWFibGUoKSk7CisgICAgbV9pc0luTWVtb3J5Q2FjaGUgPSBmYWxzZTsKK30KKwogUGFzc1Jl
ZlB0cjxDU1NTdHlsZVNoZWV0PiBDU1NTdHlsZVNoZWV0OjpjcmVhdGVJbmxpbmUoTm9kZSogb3du
ZXJOb2RlLCBjb25zdCBLVVJMJiBiYXNlVVJMLCBjb25zdCBTdHJpbmcmIGVuY29kaW5nKQogewog
ICAgIENTU1BhcnNlckNvbnRleHQgcGFyc2VyQ29udGV4dChvd25lck5vZGUtPmRvY3VtZW50KCks
IGJhc2VVUkwsIGVuY29kaW5nKTsKQEAgLTUxNCwxNCArNTM0LDU5IEBAIENTU1N0eWxlU2hlZXQ6
On5DU1NTdHlsZVNoZWV0KCkKICAgICBtX2ludGVybmFsLT51bnJlZ2lzdGVyQ2xpZW50KHRoaXMp
OwogfQogCit2b2lkIENTU1N0eWxlU2hlZXQ6OndpbGxNdXRhdGVSdWxlcygpCit7CisgICAgLy8g
SWYgd2UgYXJlIHRoZSBvbmx5IGNsaWVudCBpdCBpcyBzYWZlIHRvIG11dGF0ZS4KKyAgICBpZiAo
bV9pbnRlcm5hbC0+aGFzT25lQ2xpZW50KCkgJiYgIW1faW50ZXJuYWwtPmlzSW5NZW1vcnlDYWNo
ZSgpKSB7CisgICAgICAgIG1faW50ZXJuYWwtPnNldE11dGFibGUoKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKyAgICAvLyBPbmx5IGNhY2hlYWJsZSBzdHlsZXNoZWV0cyBzaG91bGQgaGF2ZSBt
dWx0aXBsZSBjbGllbnRzLgorICAgIEFTU0VSVChtX2ludGVybmFsLT5pc0NhY2hlYWJsZSgpKTsK
KworICAgIC8vIENvcHktb24td3JpdGUuCisgICAgbV9pbnRlcm5hbC0+dW5yZWdpc3RlckNsaWVu
dCh0aGlzKTsKKyAgICBtX2ludGVybmFsID0gbV9pbnRlcm5hbC0+Y29weSgpOworICAgIG1faW50
ZXJuYWwtPnJlZ2lzdGVyQ2xpZW50KHRoaXMpOworCisgICAgbV9pbnRlcm5hbC0+c2V0TXV0YWJs
ZSgpOworCisgICAgLy8gQW55IGV4aXN0aW5nIENTU09NIHdyYXBwZXJzIG5lZWQgdG8gYmUgY29u
bmVjdGVkIHRvIHRoZSBjb3BpZWQgY2hpbGQgcnVsZXMuCisgICAgcmVhdHRhY2hDaGlsZFJ1bGVD
U1NPTVdyYXBwZXJzKCk7Cit9CisKK3ZvaWQgQ1NTU3R5bGVTaGVldDo6ZGlkTXV0YXRlUnVsZXMo
KQoreworICAgIEFTU0VSVChtX2ludGVybmFsLT5pc011dGFibGUoKSk7CisgICAgQVNTRVJUKG1f
aW50ZXJuYWwtPmhhc09uZUNsaWVudCgpKTsKKworICAgIGRpZE11dGF0ZSgpOworfQorCit2b2lk
IENTU1N0eWxlU2hlZXQ6OmRpZE11dGF0ZSgpCit7CisgICAgRG9jdW1lbnQqIG93bmVyID0gb3du
ZXJEb2N1bWVudCgpOworICAgIGlmICghb3duZXIpCisgICAgICAgIHJldHVybjsKKyAgICBvd25l
ci0+c3R5bGVSZXNvbHZlckNoYW5nZWQoRGVmZXJSZWNhbGNTdHlsZSk7Cit9CisKK3ZvaWQgQ1NT
U3R5bGVTaGVldDo6cmVhdHRhY2hDaGlsZFJ1bGVDU1NPTVdyYXBwZXJzKCkKK3sKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9jaGlsZFJ1bGVDU1NPTVdyYXBwZXJzLnNpemUoKTsgKytp
KSB7CisgICAgICAgIGlmICghbV9jaGlsZFJ1bGVDU1NPTVdyYXBwZXJzW2ldKQorICAgICAgICAg
ICAgY29udGludWU7CisgICAgICAgIG1fY2hpbGRSdWxlQ1NTT01XcmFwcGVyc1tpXS0+cmVhdHRh
Y2gobV9pbnRlcm5hbC0+cnVsZUF0KGkpKTsKKyAgICB9Cit9CisKIHZvaWQgQ1NTU3R5bGVTaGVl
dDo6c2V0RGlzYWJsZWQoYm9vbCBkaXNhYmxlZCkKIHsgCiAgICAgaWYgKGRpc2FibGVkID09IG1f
aXNEaXNhYmxlZCkKICAgICAgICAgcmV0dXJuOwogICAgIG1faXNEaXNhYmxlZCA9IGRpc2FibGVk
OwotICAgIERvY3VtZW50KiBvd25lciA9IG93bmVyRG9jdW1lbnQoKTsKLSAgICBpZiAob3duZXIp
Ci0gICAgICAgIG93bmVyLT5zdHlsZVJlc29sdmVyQ2hhbmdlZChEZWZlclJlY2FsY1N0eWxlKTsK
KworICAgIGRpZE11dGF0ZSgpOwogfQogCiB2b2lkIENTU1N0eWxlU2hlZXQ6OnNldE1lZGlhUXVl
cmllcyhQYXNzUmVmUHRyPE1lZGlhUXVlcnlTZXQ+IG1lZGlhUXVlcmllcykKQEAgLTU4NCw2ICs2
NDksOCBAQCB1bnNpZ25lZCBDU1NTdHlsZVNoZWV0OjppbnNlcnRSdWxlKGNvbnN0CiAgICAgICAg
IGVjID0gU1lOVEFYX0VSUjsKICAgICAgICAgcmV0dXJuIDA7CiAgICAgfQorICAgIHdpbGxNdXRh
dGVSdWxlcygpOworCiAgICAgYm9vbCBzdWNjZXNzID0gbV9pbnRlcm5hbC0+d3JhcHBlckluc2Vy
dFJ1bGUocnVsZSwgaW5kZXgpOwogICAgIGlmICghc3VjY2VzcykgewogICAgICAgICBlYyA9IEhJ
RVJBUkNIWV9SRVFVRVNUX0VSUjsKQEAgLTU5MSw2ICs2NTgsOSBAQCB1bnNpZ25lZCBDU1NTdHls
ZVNoZWV0OjppbnNlcnRSdWxlKGNvbnN0CiAgICAgfSAgICAgICAgCiAgICAgaWYgKCFtX2NoaWxk
UnVsZUNTU09NV3JhcHBlcnMuaXNFbXB0eSgpKQogICAgICAgICBtX2NoaWxkUnVsZUNTU09NV3Jh
cHBlcnMuaW5zZXJ0KGluZGV4LCBSZWZQdHI8Q1NTUnVsZT4oKSk7CisKKyAgICBkaWRNdXRhdGVS
dWxlcygpOworCiAgICAgcmV0dXJuIGluZGV4OwogfQogCkBAIC02MDMsNiArNjczLDggQEAgdm9p
ZCBDU1NTdHlsZVNoZWV0OjpkZWxldGVSdWxlKHVuc2lnbmVkIAogICAgICAgICBlYyA9IElOREVY
X1NJWkVfRVJSOwogICAgICAgICByZXR1cm47CiAgICAgfQorICAgIHdpbGxNdXRhdGVSdWxlcygp
OworCiAgICAgbV9pbnRlcm5hbC0+d3JhcHBlckRlbGV0ZVJ1bGUoaW5kZXgpOwogCiAgICAgaWYg
KCFtX2NoaWxkUnVsZUNTU09NV3JhcHBlcnMuaXNFbXB0eSgpKSB7CkBAIC02MTAsNiArNjgyLDgg
QEAgdm9pZCBDU1NTdHlsZVNoZWV0OjpkZWxldGVSdWxlKHVuc2lnbmVkIAogICAgICAgICAgICAg
bV9jaGlsZFJ1bGVDU1NPTVdyYXBwZXJzW2luZGV4XS0+c2V0UGFyZW50U3R5bGVTaGVldCgwKTsK
ICAgICAgICAgbV9jaGlsZFJ1bGVDU1NPTVdyYXBwZXJzLnJlbW92ZShpbmRleCk7CiAgICAgfQor
CisgICAgZGlkTXV0YXRlUnVsZXMoKTsKIH0KIAogaW50IENTU1N0eWxlU2hlZXQ6OmFkZFJ1bGUo
Y29uc3QgU3RyaW5nJiBzZWxlY3RvciwgY29uc3QgU3RyaW5nJiBzdHlsZSwgaW50IGluZGV4LCBF
eGNlcHRpb25Db2RlJiBlYykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNoZWV0
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2hlZXQuaAkocmV2
aXNpb24gMTE1OTU5KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2hlZXQuaAkod29y
a2luZyBjb3B5KQpAQCAtNjUsOCArNjUsNiBAQCBwdWJsaWM6CiAKICAgICBjb25zdCBBdG9taWNT
dHJpbmcmIGRldGVybWluZU5hbWVzcGFjZShjb25zdCBBdG9taWNTdHJpbmcmIHByZWZpeCk7CiAK
LSAgICB2b2lkIHN0eWxlU2hlZXRDaGFuZ2VkKCk7Ci0KICAgICB2b2lkIHBhcnNlQXV0aG9yU3R5
bGVTaGVldChjb25zdCBDYWNoZWRDU1NTdHlsZVNoZWV0KiwgY29uc3QgU2VjdXJpdHlPcmlnaW4q
KTsKICAgICBib29sIHBhcnNlU3RyaW5nKGNvbnN0IFN0cmluZyYpOwogICAgIGJvb2wgcGFyc2VT
dHJpbmdBdExpbmUoY29uc3QgU3RyaW5nJiwgaW50IHN0YXJ0TGluZU51bWJlcik7CkBAIC0xMjAs
NyArMTE4LDggQEAgcHVibGljOgogICAgIGNvbnN0IEtVUkwmIGJhc2VVUkwoKSBjb25zdCB7IHJl
dHVybiBtX3BhcnNlckNvbnRleHQuYmFzZVVSTDsgfQogCiAgICAgdW5zaWduZWQgcnVsZUNvdW50
KCkgY29uc3Q7Ci0gICAgCisgICAgU3R5bGVSdWxlQmFzZSogcnVsZUF0KHVuc2lnbmVkIGluZGV4
KSBjb25zdDsKKwogICAgIGJvb2wgdXNlc1JlbVVuaXRzKCkgY29uc3QgeyByZXR1cm4gbV91c2Vz
UmVtVW5pdHM7IH0KIAogICAgIHVuc2lnbmVkIGVzdGltYXRlZFNpemVJbkJ5dGVzKCkgY29uc3Q7
CkBAIC0xMzQsNiArMTMzLDE0IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgcmVnaXN0ZXJDbGllbnQo
Q1NTU3R5bGVTaGVldCopOwogICAgIHZvaWQgdW5yZWdpc3RlckNsaWVudChDU1NTdHlsZVNoZWV0
Kik7CisgICAgYm9vbCBoYXNPbmVDbGllbnQoKSB7IHJldHVybiBtX2NsaWVudHMuc2l6ZSgpID09
IDE7IH0KKworICAgIGJvb2wgaXNNdXRhYmxlKCkgY29uc3QgeyByZXR1cm4gbV9pc011dGFibGU7
IH0KKyAgICB2b2lkIHNldE11dGFibGUoKSB7IG1faXNNdXRhYmxlID0gdHJ1ZTsgfQorCisgICAg
Ym9vbCBpc0luTWVtb3J5Q2FjaGUoKSBjb25zdCB7IHJldHVybiBtX2lzSW5NZW1vcnlDYWNoZTsg
fQorICAgIHZvaWQgYWRkZWRUb01lbW9yeUNhY2hlKCk7CisgICAgdm9pZCByZW1vdmVkRnJvbU1l
bW9yeUNhY2hlKCk7CiAKIHByaXZhdGU6CiAgICAgU3R5bGVTaGVldEludGVybmFsKFN0eWxlUnVs
ZUltcG9ydCogb3duZXJSdWxlLCBjb25zdCBTdHJpbmcmIG9yaWdpbmFsVVJMLCBjb25zdCBLVVJM
JiBiYXNlVVJMLCBjb25zdCBDU1NQYXJzZXJDb250ZXh0Jik7CkBAIC0xNTgsNyArMTY1LDggQEAg
cHJpdmF0ZToKICAgICBib29sIG1faGFzU3ludGFjdGljYWxseVZhbGlkQ1NTSGVhZGVyIDogMTsK
ICAgICBib29sIG1fZGlkTG9hZEVycm9yT2NjdXIgOiAxOwogICAgIGJvb2wgbV91c2VzUmVtVW5p
dHMgOiAxOwotICAgIGJvb2wgbV9oYXNNdXRhdGVkIDogMTsKKyAgICBib29sIG1faXNNdXRhYmxl
IDogMTsKKyAgICBib29sIG1faXNJbk1lbW9yeUNhY2hlIDogMTsKICAgICAKICAgICBDU1NQYXJz
ZXJDb250ZXh0IG1fcGFyc2VyQ29udGV4dDsKIApAQCAtMjA3LDEzICsyMTUsMTcgQEAgcHVibGlj
OgogICAgIHZpcnR1YWwgYm9vbCBpc0xvYWRpbmcoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBt
X2ludGVybmFsLT5pc0xvYWRpbmcoKTsgfQogICAgIAogICAgIHZvaWQgY2xlYXJPd25lclJ1bGUo
KSB7IG1fb3duZXJSdWxlID0gMDsgfQotICAgIHZvaWQgc3R5bGVTaGVldENoYW5nZWQoKSB7IG1f
aW50ZXJuYWwtPnN0eWxlU2hlZXRDaGFuZ2VkKCk7IH0KICAgICBEb2N1bWVudCogb3duZXJEb2N1
bWVudCgpIGNvbnN0OwogICAgIE1lZGlhUXVlcnlTZXQqIG1lZGlhUXVlcmllcygpIGNvbnN0IHsg
cmV0dXJuIG1fbWVkaWFRdWVyaWVzLmdldCgpOyB9CiAgICAgdm9pZCBzZXRNZWRpYVF1ZXJpZXMo
UGFzc1JlZlB0cjxNZWRpYVF1ZXJ5U2V0Pik7CiAgICAgdm9pZCBzZXRUaXRsZShjb25zdCBTdHJp
bmcmIHRpdGxlKSB7IG1fdGl0bGUgPSB0aXRsZTsgfQorCisgICAgdm9pZCB3aWxsTXV0YXRlUnVs
ZXMoKTsKKyAgICB2b2lkIGRpZE11dGF0ZVJ1bGVzKCk7CisgICAgdm9pZCBkaWRNdXRhdGUoKTsK
ICAgICAKICAgICB2b2lkIGNsZWFyQ2hpbGRSdWxlQ1NTT01XcmFwcGVycygpOworICAgIHZvaWQg
cmVhdHRhY2hDaGlsZFJ1bGVDU1NPTVdyYXBwZXJzKCk7CiAKICAgICBTdHlsZVNoZWV0SW50ZXJu
YWwqIGludGVybmFsKCkgY29uc3QgeyByZXR1cm4gbV9pbnRlcm5hbC5nZXQoKTsgfQogCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9jc3MvTWVkaWFMaXN0LmNwcAkocmV2aXNpb24gMTE1OTU5KQorKysgU291cmNlL1dl
YkNvcmUvY3NzL01lZGlhTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzMCwxMiArMjMwLDE1
IEBAIE1lZGlhTGlzdDo6fk1lZGlhTGlzdCgpCiAKIHZvaWQgTWVkaWFMaXN0OjpzZXRNZWRpYVRl
eHQoY29uc3QgU3RyaW5nJiB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CisgICAgaWYgKG1f
cGFyZW50UnVsZSkKKyAgICAgICAgbV9wYXJlbnRSdWxlLT53aWxsTXV0YXRlKCk7CisKICAgICBi
b29sIHN1Y2Nlc3MgPSBtX21lZGlhUXVlcmllcy0+cGFyc2UodmFsdWUpOwogICAgIGlmICghc3Vj
Y2VzcykgewogICAgICAgICBlYyA9IFNZTlRBWF9FUlI7CiAgICAgICAgIHJldHVybjsKICAgICB9
Ci0gICAgbm90aWZ5Q2hhbmdlZCgpOworICAgIGRpZE11dGF0ZSgpOwogfQogCiBTdHJpbmcgTWVk
aWFMaXN0OjppdGVtKHVuc2lnbmVkIGluZGV4KSBjb25zdApAQCAtMjQ4LDMxICsyNTEsNDUgQEAg
U3RyaW5nIE1lZGlhTGlzdDo6aXRlbSh1bnNpZ25lZCBpbmRleCkgYwogCiB2b2lkIE1lZGlhTGlz
dDo6ZGVsZXRlTWVkaXVtKGNvbnN0IFN0cmluZyYgbWVkaXVtLCBFeGNlcHRpb25Db2RlJiBlYykK
IHsKKyAgICBpZiAobV9wYXJlbnRSdWxlKQorICAgICAgICBtX3BhcmVudFJ1bGUtPndpbGxNdXRh
dGUoKTsKKwogICAgIGJvb2wgc3VjY2VzcyA9IG1fbWVkaWFRdWVyaWVzLT5yZW1vdmUobWVkaXVt
KTsKICAgICBpZiAoIXN1Y2Nlc3MpIHsKICAgICAgICAgZWMgPSBOT1RfRk9VTkRfRVJSOwogICAg
ICAgICByZXR1cm47CiAgICAgfQotICAgIG5vdGlmeUNoYW5nZWQoKTsKKyAgICBkaWRNdXRhdGUo
KTsKIH0KIAogdm9pZCBNZWRpYUxpc3Q6OmFwcGVuZE1lZGl1bShjb25zdCBTdHJpbmcmIG1lZGl1
bSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CisgICAgaWYgKG1fcGFyZW50UnVsZSkKKyAgICAgICAg
bV9wYXJlbnRSdWxlLT53aWxsTXV0YXRlKCk7CisKICAgICBib29sIHN1Y2Nlc3MgPSBtX21lZGlh
UXVlcmllcy0+YWRkKG1lZGl1bSk7CiAgICAgaWYgKCFzdWNjZXNzKSB7CiAgICAgICAgIC8vIEZJ
WE1FOiBTaG91bGQgdGhpcyByZWFsbHkgYmUgSU5WQUxJRF9DSEFSQUNURVJfRVJSPwogICAgICAg
ICBlYyA9IElOVkFMSURfQ0hBUkFDVEVSX0VSUjsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAg
ICBub3RpZnlDaGFuZ2VkKCk7CisgICAgZGlkTXV0YXRlKCk7CiB9CiAKLXZvaWQgTWVkaWFMaXN0
Ojpub3RpZnlDaGFuZ2VkKCkKK3ZvaWQgTWVkaWFMaXN0OjpkaWRNdXRhdGUoKQogewotICAgIENT
U1N0eWxlU2hlZXQqIHBhcmVudFN0eWxlU2hlZXQgPSBtX3BhcmVudFJ1bGUgPyBtX3BhcmVudFJ1
bGUtPnBhcmVudFN0eWxlU2hlZXQoKSA6IG1fcGFyZW50U3R5bGVTaGVldDsKLSAgICBpZiAoIXBh
cmVudFN0eWxlU2hlZXQpCisgICAgaWYgKG1fcGFyZW50UnVsZSkgeworICAgICAgICBtX3BhcmVu
dFJ1bGUtPmRpZE11dGF0ZSgpOwogICAgICAgICByZXR1cm47Ci0gICAgcGFyZW50U3R5bGVTaGVl
dC0+c3R5bGVTaGVldENoYW5nZWQoKTsKKyAgICB9CisgICAgaWYgKG1fcGFyZW50U3R5bGVTaGVl
dCkKKyAgICAgICAgbV9wYXJlbnRTdHlsZVNoZWV0LT5kaWRNdXRhdGUoKTsKK30KKwordm9pZCBN
ZWRpYUxpc3Q6OnJlYXR0YWNoKE1lZGlhUXVlcnlTZXQqIG1lZGlhUXVlcmllcykKK3sKKyAgICBB
U1NFUlQobWVkaWFRdWVyaWVzKTsKKyAgICBtX21lZGlhUXVlcmllcyA9IG1lZGlhUXVlcmllczsK
IH0KIAogfQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL01lZGlhTGlzdC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYUxpc3QuaAkocmV2aXNpb24gMTE1OTU5KQorKysg
U291cmNlL1dlYkNvcmUvY3NzL01lZGlhTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQsMTIg
KzEwNCwxNCBAQCBwdWJsaWM6CiAgICAgdm9pZCBjbGVhclBhcmVudFJ1bGUoKSB7IEFTU0VSVCht
X3BhcmVudFJ1bGUpOyBtX3BhcmVudFJ1bGUgPSAwOyB9CiAgICAgY29uc3QgTWVkaWFRdWVyeVNl
dCogcXVlcmllcygpIGNvbnN0IHsgcmV0dXJuIG1fbWVkaWFRdWVyaWVzLmdldCgpOyB9CiAKKyAg
ICB2b2lkIHJlYXR0YWNoKE1lZGlhUXVlcnlTZXQqKTsKKwogcHJpdmF0ZToKICAgICBNZWRpYUxp
c3QoKTsKICAgICBNZWRpYUxpc3QoTWVkaWFRdWVyeVNldCosIENTU1N0eWxlU2hlZXQqIHBhcmVu
dFNoZWV0KTsKICAgICBNZWRpYUxpc3QoTWVkaWFRdWVyeVNldCosIENTU1J1bGUqIHBhcmVudFJ1
bGUpOwogCi0gICAgdm9pZCBub3RpZnlDaGFuZ2VkKCk7CisgICAgdm9pZCBkaWRNdXRhdGUoKTsK
IAogICAgIFJlZlB0cjxNZWRpYVF1ZXJ5U2V0PiBtX21lZGlhUXVlcmllczsKICAgICBDU1NTdHls
ZVNoZWV0KiBtX3BhcmVudFN0eWxlU2hlZXQ7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvUHJv
cGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9jc3MvUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uLmNwcAkocmV2aXNpb24gMTE1
OTU5KQorKysgU291cmNlL1dlYkNvcmUvY3NzL1Byb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlv
bi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1MSw2ICsxNTEsOCBAQCB2b2lkIFByb3BlcnR5U2V0
Q1NTU3R5bGVEZWNsYXJhdGlvbjo6c2V0CiAjaWYgRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykK
ICAgICBTdHlsZUF0dHJpYnV0ZU11dGF0aW9uU2NvcGUgbXV0YXRpb25TY29wZSh0aGlzKTsKICNl
bmRpZgorICAgIHdpbGxNdXRhdGUoKTsKKwogICAgIGVjID0gMDsKICAgICAvLyBGSVhNRTogRGV0
ZWN0IHN5bnRheCBlcnJvcnMgYW5kIHNldCBlYy4KICAgICBtX3Byb3BlcnR5U2V0LT5wYXJzZURl
Y2xhcmF0aW9uKHRleHQsIGNvbnRleHRTdHlsZVNoZWV0KCkpOwpAQCAtMjEyLDYgKzIxNCw4IEBA
IHZvaWQgUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uOjpzZXQKICAgICBDU1NQcm9wZXJ0
eUlEIHByb3BlcnR5SUQgPSBjc3NQcm9wZXJ0eUlEKHByb3BlcnR5TmFtZSk7CiAgICAgaWYgKCFw
cm9wZXJ0eUlEKQogICAgICAgICByZXR1cm47CisgICAgd2lsbE11dGF0ZSgpOworCiAgICAgYm9v
bCBpbXBvcnRhbnQgPSBwcmlvcml0eS5maW5kKCJpbXBvcnRhbnQiLCAwLCBmYWxzZSkgIT0gbm90
Rm91bmQ7CiAgICAgZWMgPSAwOwogICAgIGJvb2wgY2hhbmdlZCA9IG1fcHJvcGVydHlTZXQtPnNl
dFByb3BlcnR5KHByb3BlcnR5SUQsIHZhbHVlLCBpbXBvcnRhbnQsIGNvbnRleHRTdHlsZVNoZWV0
KCkpOwpAQCAtMjMzLDYgKzIzNyw4IEBAIFN0cmluZyBQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFy
YXRpb246OnIKICAgICBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQgPSBjc3NQcm9wZXJ0eUlEKHBy
b3BlcnR5TmFtZSk7CiAgICAgaWYgKCFwcm9wZXJ0eUlEKQogICAgICAgICByZXR1cm4gU3RyaW5n
KCk7CisgICAgd2lsbE11dGF0ZSgpOworCiAgICAgZWMgPSAwOwogICAgIFN0cmluZyByZXN1bHQ7
CiAgICAgYm9vbCBjaGFuZ2VzID0gbV9wcm9wZXJ0eVNldC0+cmVtb3ZlUHJvcGVydHkocHJvcGVy
dHlJRCwgJnJlc3VsdCk7CkBAIC0yNjAsNiArMjY2LDggQEAgdm9pZCBQcm9wZXJ0eVNldENTU1N0
eWxlRGVjbGFyYXRpb246OnNldAogI2lmIEVOQUJMRShNVVRBVElPTl9PQlNFUlZFUlMpCiAgICAg
U3R5bGVBdHRyaWJ1dGVNdXRhdGlvblNjb3BlIG11dGF0aW9uU2NvcGUodGhpcyk7CiAjZW5kaWYK
KyAgICB3aWxsTXV0YXRlKCk7CisKICAgICBlYyA9IDA7CiAgICAgYm9vbCBjaGFuZ2VkID0gbV9w
cm9wZXJ0eVNldC0+c2V0UHJvcGVydHkocHJvcGVydHlJRCwgdmFsdWUsIGltcG9ydGFudCwgY29u
dGV4dFN0eWxlU2hlZXQoKSk7CiAgICAgaWYgKGNoYW5nZWQpIHsKQEAgLTI3MCwxMiArMjc4LDYg
QEAgdm9pZCBQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb246OnNldAogICAgIH0KIH0KIAot
dm9pZCBQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb246OmRpZE11dGF0ZSgpCi17Ci0gICAg
bV9jc3NvbUNTU1ZhbHVlQ2xvbmVzLmNsZWFyKCk7Ci0gICAgc2V0TmVlZHNTdHlsZVJlY2FsYygp
OwotfQotCiBDU1NWYWx1ZSogUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uOjpjbG9uZUFu
ZENhY2hlRm9yQ1NTT00oQ1NTVmFsdWUqIGludGVybmFsVmFsdWUpCiB7CiAgICAgaWYgKCFpbnRl
cm5hbFZhbHVlKQpAQCAtMzM4LDEyICszNDAsMTggQEAgdm9pZCBTdHlsZVJ1bGVDU1NTdHlsZURl
Y2xhcmF0aW9uOjpkZXJlZgogICAgICAgICBkZWxldGUgdGhpczsKIH0KIAotdm9pZCBTdHlsZVJ1
bGVDU1NTdHlsZURlY2xhcmF0aW9uOjpzZXROZWVkc1N0eWxlUmVjYWxjKCkKK3ZvaWQgU3R5bGVS
dWxlQ1NTU3R5bGVEZWNsYXJhdGlvbjo6d2lsbE11dGF0ZSgpCiB7Ci0gICAgaWYgKENTU1N0eWxl
U2hlZXQqIHN0eWxlU2hlZXQgPSBwYXJlbnRTdHlsZVNoZWV0KCkpIHsKLSAgICAgICAgaWYgKERv
Y3VtZW50KiBkb2N1bWVudCA9IHN0eWxlU2hlZXQtPm93bmVyRG9jdW1lbnQoKSkKLSAgICAgICAg
ICAgIGRvY3VtZW50LT5zdHlsZVJlc29sdmVyQ2hhbmdlZChEZWZlclJlY2FsY1N0eWxlKTsKLSAg
ICB9CisgICAgaWYgKG1fcGFyZW50UnVsZSkKKyAgICAgICAgbV9wYXJlbnRSdWxlLT53aWxsTXV0
YXRlKCk7Cit9CisKK3ZvaWQgU3R5bGVSdWxlQ1NTU3R5bGVEZWNsYXJhdGlvbjo6ZGlkTXV0YXRl
KCkKK3sKKyAgICBtX2Nzc29tQ1NTVmFsdWVDbG9uZXMuY2xlYXIoKTsKKworICAgIGlmIChtX3Bh
cmVudFJ1bGUpCisgICAgICAgIG1fcGFyZW50UnVsZS0+ZGlkTXV0YXRlKCk7CiB9CiAKIENTU1N0
eWxlU2hlZXQqIFN0eWxlUnVsZUNTU1N0eWxlRGVjbGFyYXRpb246OnBhcmVudFN0eWxlU2hlZXQo
KSBjb25zdApAQCAtMzUxLDggKzM1OSwxOCBAQCBDU1NTdHlsZVNoZWV0KiBTdHlsZVJ1bGVDU1NT
dHlsZURlY2xhcmF0CiAgICAgcmV0dXJuIG1fcGFyZW50UnVsZSA/IG1fcGFyZW50UnVsZS0+cGFy
ZW50U3R5bGVTaGVldCgpIDogMDsKIH0KIAotdm9pZCBJbmxpbmVDU1NTdHlsZURlY2xhcmF0aW9u
OjpzZXROZWVkc1N0eWxlUmVjYWxjKCkKK3ZvaWQgU3R5bGVSdWxlQ1NTU3R5bGVEZWNsYXJhdGlv
bjo6cmVhdHRhY2goU3R5bGVQcm9wZXJ0eVNldCogcHJvcGVydHlTZXQpCit7CisgICAgQVNTRVJU
KHByb3BlcnR5U2V0KTsKKyAgICBtX3Byb3BlcnR5U2V0LT5kZXJlZigpOworICAgIG1fcHJvcGVy
dHlTZXQgPSBwcm9wZXJ0eVNldDsKKyAgICBtX3Byb3BlcnR5U2V0LT5yZWYoKTsKK30KKwordm9p
ZCBJbmxpbmVDU1NTdHlsZURlY2xhcmF0aW9uOjpkaWRNdXRhdGUoKQogeworICAgIG1fY3Nzb21D
U1NWYWx1ZUNsb25lcy5jbGVhcigpOworCiAgICAgaWYgKCFtX3BhcmVudEVsZW1lbnQpCiAgICAg
ICAgIHJldHVybjsKICAgICBtX3BhcmVudEVsZW1lbnQtPnNldE5lZWRzU3R5bGVSZWNhbGMoSW5s
aW5lU3R5bGVDaGFuZ2UpOwpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL1Byb3BlcnR5U2V0Q1NT
U3R5bGVEZWNsYXJhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9Qcm9w
ZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb24uaAkocmV2aXNpb24gMTE1OTU5KQorKysgU291cmNl
L1dlYkNvcmUvY3NzL1Byb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbi5oCSh3b3JraW5nIGNv
cHkpCkBAIC02OCw5ICs2OCw5IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIGNzc1Byb3Bl
cnR5TWF0Y2hlcyhjb25zdCBDU1NQcm9wZXJ0eSopIGNvbnN0IE9WRVJSSURFOwogICAgIHZpcnR1
YWwgUGFzc1JlZlB0cjxTdHlsZVByb3BlcnR5U2V0PiBjb3B5KCkgY29uc3QgT1ZFUlJJREU7CiAg
ICAgdmlydHVhbCBQYXNzUmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+IG1ha2VNdXRhYmxlKCkgT1ZF
UlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIHNldE5lZWRzU3R5bGVSZWNhbGMoKSB7IH0KLSAgICAK
LSAgICB2b2lkIGRpZE11dGF0ZSgpOworCisgICAgdmlydHVhbCB2b2lkIHdpbGxNdXRhdGUoKSB7
IH0KKyAgICB2aXJ0dWFsIHZvaWQgZGlkTXV0YXRlKCkgeyB9CiAgICAgQ1NTVmFsdWUqIGNsb25l
QW5kQ2FjaGVGb3JDU1NPTShDU1NWYWx1ZSopOwogICAgIAogcHJvdGVjdGVkOgpAQCAtOTEsNiAr
OTEsOCBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCB2b2lkIHJlZigpIE9WRVJSSURFOwogICAgIHZp
cnR1YWwgdm9pZCBkZXJlZigpIE9WRVJSSURFOwogCisgICAgdm9pZCByZWF0dGFjaChTdHlsZVBy
b3BlcnR5U2V0Kik7CisKIHByaXZhdGU6CiAgICAgU3R5bGVSdWxlQ1NTU3R5bGVEZWNsYXJhdGlv
bihTdHlsZVByb3BlcnR5U2V0KiwgQ1NTUnVsZSopOwogICAgIHZpcnR1YWwgflN0eWxlUnVsZUNT
U1N0eWxlRGVjbGFyYXRpb24oKTsKQEAgLTk4LDggKzEwMCwxMCBAQCBwcml2YXRlOgogICAgIHZp
cnR1YWwgQ1NTU3R5bGVTaGVldCogcGFyZW50U3R5bGVTaGVldCgpIGNvbnN0IE9WRVJSSURFOwog
CiAgICAgdmlydHVhbCBDU1NSdWxlKiBwYXJlbnRSdWxlKCkgY29uc3QgT1ZFUlJJREUgeyByZXR1
cm4gbV9wYXJlbnRSdWxlOyAgfQotICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc1N0eWxlUmVjYWxj
KCkgT1ZFUlJJREU7Ci0gICAgCisKKyAgICB2aXJ0dWFsIHZvaWQgd2lsbE11dGF0ZSgpIE9WRVJS
SURFOworICAgIHZpcnR1YWwgdm9pZCBkaWRNdXRhdGUoKSBPVkVSUklERTsKKwogICAgIHVuc2ln
bmVkIG1fcmVmQ291bnQ7CiAgICAgQ1NTUnVsZSogbV9wYXJlbnRSdWxlOwogfTsKQEAgLTExNyw3
ICsxMjEsOCBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgQ1NTU3R5bGVTaGVldCogcGFyZW50U3R5
bGVTaGVldCgpIGNvbnN0IE9WRVJSSURFOwogICAgIHZpcnR1YWwgU3R5bGVkRWxlbWVudCogcGFy
ZW50RWxlbWVudCgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1fcGFyZW50RWxlbWVudDsgfQog
ICAgIHZpcnR1YWwgdm9pZCBjbGVhclBhcmVudEVsZW1lbnQoKSBPVkVSUklERSB7IG1fcGFyZW50
RWxlbWVudCA9IDA7IH0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNTdHlsZVJlY2FsYygpIE9W
RVJSSURFOworCisgICAgdmlydHVhbCB2b2lkIGRpZE11dGF0ZSgpIE9WRVJSSURFOwogICAgIAog
ICAgIFN0eWxlZEVsZW1lbnQqIG1fcGFyZW50RWxlbWVudDsKIH07CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9jc3MvV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvY3NzL1dlYktpdENTU0tleWZyYW1lc1J1bGUuY3BwCShyZXZpc2lvbiAxMTU5NTkp
CisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTEwNCwxMiArMTA0LDExIEBAIFdlYktpdENTU0tleWZyYW1lc1J1bGU6On5X
ZWJLaXRDU1NLZXlmcmEKIAogdm9pZCBXZWJLaXRDU1NLZXlmcmFtZXNSdWxlOjpzZXROYW1lKGNv
bnN0IFN0cmluZyYgbmFtZSkKIHsKKyAgICB3aWxsTXV0YXRlKCk7CisKICAgICBtX2tleWZyYW1l
c1J1bGUtPnNldE5hbWUobmFtZSk7CiAKLSAgICAvLyBTaW5jZSB0aGUgbmFtZSBpcyB1c2VkIGlu
IHRoZSBrZXlmcmFtZSBtYXAgbGlzdCBpbiBTdHlsZVJlc29sdmVyLCB3ZSBuZWVkCi0gICAgLy8g
dG8gcmVjb21wdXRlIHRoZSBzdHlsZSBzaGVldCB0byBnZXQgdGhlIHVwZGF0ZWQgbmFtZS4KLSAg
ICBpZiAoQ1NTU3R5bGVTaGVldCogc3R5bGVTaGVldCA9IHBhcmVudFN0eWxlU2hlZXQoKSkKLSAg
ICAgICAgc3R5bGVTaGVldC0+c3R5bGVTaGVldENoYW5nZWQoKTsKKyAgICBkaWRNdXRhdGUoKTsK
IH0KIAogdm9pZCBXZWJLaXRDU1NLZXlmcmFtZXNSdWxlOjppbnNlcnRSdWxlKGNvbnN0IFN0cmlu
ZyYgcnVsZVRleHQpCkBAIC0xMjIsOSArMTIxLDEzIEBAIHZvaWQgV2ViS2l0Q1NTS2V5ZnJhbWVz
UnVsZTo6aW5zZXJ0UnVsZSgKICAgICBpZiAoIWtleWZyYW1lKQogICAgICAgICByZXR1cm47CiAK
KyAgICB3aWxsTXV0YXRlKCk7CisKICAgICBtX2tleWZyYW1lc1J1bGUtPndyYXBwZXJBcHBlbmRL
ZXlmcmFtZShrZXlmcmFtZSk7CiAKICAgICBtX2NoaWxkUnVsZUNTU09NV3JhcHBlcnMuZ3Jvdyhs
ZW5ndGgoKSk7CisKKyAgICBkaWRNdXRhdGUoKTsKIH0KIAogdm9pZCBXZWJLaXRDU1NLZXlmcmFt
ZXNSdWxlOjpkZWxldGVSdWxlKGNvbnN0IFN0cmluZyYgcykKQEAgLTEzNSwxMSArMTM4LDE1IEBA
IHZvaWQgV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZTo6ZGVsZXRlUnVsZSgKICAgICBpZiAoaSA8IDAp
CiAgICAgICAgIHJldHVybjsKIAorICAgIHdpbGxNdXRhdGUoKTsKKwogICAgIG1fa2V5ZnJhbWVz
UnVsZS0+d3JhcHBlclJlbW92ZUtleWZyYW1lKGkpOwogCiAgICAgaWYgKG1fY2hpbGRSdWxlQ1NT
T01XcmFwcGVyc1tpXSkKICAgICAgICAgbV9jaGlsZFJ1bGVDU1NPTVdyYXBwZXJzW2ldLT5zZXRQ
YXJlbnRSdWxlKDApOwogICAgIG1fY2hpbGRSdWxlQ1NTT01XcmFwcGVycy5yZW1vdmUoaSk7CisK
KyAgICBkaWRNdXRhdGUoKTsKIH0KIAogV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlKiBXZWJLaXRDU1NL
ZXlmcmFtZXNSdWxlOjpmaW5kUnVsZShjb25zdCBTdHJpbmcmIHMpCkBAIC0xOTAsNCArMTk3LDEw
IEBAIENTU1J1bGVMaXN0KiBXZWJLaXRDU1NLZXlmcmFtZXNSdWxlOjpjc3MKICAgICByZXR1cm4g
bV9ydWxlTGlzdENTU09NV3JhcHBlci5nZXQoKTsKIH0KIAordm9pZCBXZWJLaXRDU1NLZXlmcmFt
ZXNSdWxlOjpyZWF0dGFjaChTdHlsZVJ1bGVLZXlmcmFtZXMqIHJ1bGUpCit7CisgICAgQVNTRVJU
KHJ1bGUpOworICAgIG1fa2V5ZnJhbWVzUnVsZSA9IHJ1bGU7Cit9CisKIH0gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NLZXlmcmFtZXNSdWxl
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL1dlYktpdENTU0tleWZyYW1lc1J1
bGUuaAkocmV2aXNpb24gMTE1OTU5KQorKysgU291cmNlL1dlYkNvcmUvY3NzL1dlYktpdENTU0tl
eWZyYW1lc1J1bGUuaAkod29ya2luZyBjb3B5KQpAQCAtODcsNiArODcsOCBAQCBwdWJsaWM6CiAg
ICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3Q7CiAgICAgV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlKiBp
dGVtKHVuc2lnbmVkIGluZGV4KSBjb25zdDsKIAorICAgIHZvaWQgcmVhdHRhY2goU3R5bGVSdWxl
S2V5ZnJhbWVzKik7CisKIHByaXZhdGU6CiAgICAgV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZShTdHls
ZVJ1bGVLZXlmcmFtZXMqLCBDU1NTdHlsZVNoZWV0KiBwYXJlbnQpOwogCkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9jc3MvV2ViS2l0Q1NTUmVnaW9uUnVsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvY3NzL1dlYktpdENTU1JlZ2lvblJ1bGUuY3BwCShyZXZpc2lvbiAxMTU5NTkpCisr
KyBTb3VyY2UvV2ViQ29yZS9jc3MvV2ViS2l0Q1NTUmVnaW9uUnVsZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTk2LDUgKzk2LDE0IEBAIENTU1J1bGVMaXN0KiBXZWJLaXRDU1NSZWdpb25SdWxlOjpj
c3NSdWwKICAgICByZXR1cm4gbV9ydWxlTGlzdENTU09NV3JhcHBlci5nZXQoKTsKIH0KIAordm9p
ZCBXZWJLaXRDU1NSZWdpb25SdWxlOjpyZWF0dGFjaChTdHlsZVJ1bGVSZWdpb24qIHJ1bGUpCit7
CisgICAgQVNTRVJUKHJ1bGUpOworICAgIG1fcmVnaW9uUnVsZSA9IHJ1bGU7CisgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IG1fY2hpbGRSdWxlQ1NTT01XcmFwcGVycy5zaXplKCk7ICsraSkg
eworICAgICAgICBpZiAobV9jaGlsZFJ1bGVDU1NPTVdyYXBwZXJzW2ldKQorICAgICAgICAgICAg
bV9jaGlsZFJ1bGVDU1NPTVdyYXBwZXJzW2ldLT5yZWF0dGFjaChtX3JlZ2lvblJ1bGUtPmNoaWxk
UnVsZXMoKVtpXS5nZXQoKSk7CisgICAgfQorfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvV2ViS2l0Q1NTUmVnaW9uUnVsZS5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NSZWdpb25SdWxlLmgJKHJldmlzaW9uIDEx
NTk1OSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NSZWdpb25SdWxlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTUzLDYgKzUzLDggQEAgcHVibGljOgogICAgIHVuc2lnbmVkIGxlbmd0aCgp
IGNvbnN0OwogICAgIENTU1J1bGUqIGl0ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0OwogCisgICAg
dm9pZCByZWF0dGFjaChTdHlsZVJ1bGVSZWdpb24qKTsKKwogcHJpdmF0ZToKICAgICBXZWJLaXRD
U1NSZWdpb25SdWxlKFN0eWxlUnVsZVJlZ2lvbiosIENTU1N0eWxlU2hlZXQqIHBhcmVudCk7CiAK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVl
dC5jcHAJKHJldmlzaW9uIDExNTk1OSkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3JTdHlsZVNoZWV0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzE4LDEwICs3MTgsMTEgQEAg
U3RyaW5nIEluc3BlY3RvclN0eWxlU2hlZXQ6OmZpbmFsVVJMKCkgYwogCiB2b2lkIEluc3BlY3Rv
clN0eWxlU2hlZXQ6OnJlcGFyc2VTdHlsZVNoZWV0KGNvbnN0IFN0cmluZyYgdGV4dCkKIHsKKyAg
ICBtX3BhZ2VTdHlsZVNoZWV0LT53aWxsTXV0YXRlUnVsZXMoKTsKICAgICBtX3BhZ2VTdHlsZVNo
ZWV0LT5pbnRlcm5hbCgpLT5jbGVhclJ1bGVzKCk7CiAgICAgbV9wYWdlU3R5bGVTaGVldC0+aW50
ZXJuYWwoKS0+cGFyc2VTdHJpbmcodGV4dCk7CiAgICAgbV9wYWdlU3R5bGVTaGVldC0+Y2xlYXJD
aGlsZFJ1bGVDU1NPTVdyYXBwZXJzKCk7Ci0gICAgbV9wYWdlU3R5bGVTaGVldC0+c3R5bGVTaGVl
dENoYW5nZWQoKTsKKyAgICBtX3BhZ2VTdHlsZVNoZWV0LT5kaWRNdXRhdGVSdWxlcygpOwogICAg
IG1faW5zcGVjdG9yU3R5bGVzLmNsZWFyKCk7CiAgICAgZmlyZVN0eWxlU2hlZXRDaGFuZ2VkKCk7
CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkQ1NTU3R5bGVTaGVl
dC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZENT
U1N0eWxlU2hlZXQuY3BwCShyZXZpc2lvbiAxMTU5NTkpCisrKyBTb3VyY2UvV2ViQ29yZS9sb2Fk
ZXIvY2FjaGUvQ2FjaGVkQ1NTU3R5bGVTaGVldC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUwLDYg
KzUwLDggQEAgQ2FjaGVkQ1NTU3R5bGVTaGVldDo6Q2FjaGVkQ1NTU3R5bGVTaGVldAogCiBDYWNo
ZWRDU1NTdHlsZVNoZWV0Ojp+Q2FjaGVkQ1NTU3R5bGVTaGVldCgpCiB7CisgICAgaWYgKG1fcGFy
c2VkU3R5bGVTaGVldENhY2hlKQorICAgICAgICBtX3BhcnNlZFN0eWxlU2hlZXRDYWNoZS0+cmVt
b3ZlZEZyb21NZW1vcnlDYWNoZSgpOwogfQogCiB2b2lkIENhY2hlZENTU1N0eWxlU2hlZXQ6OmRp
ZEFkZENsaWVudChDYWNoZWRSZXNvdXJjZUNsaWVudCogYykKQEAgLTE1Myw3ICsxNTUsMTIgQEAg
Ym9vbCBDYWNoZWRDU1NTdHlsZVNoZWV0OjpjYW5Vc2VTaGVldChibwogCiB2b2lkIENhY2hlZENT
U1N0eWxlU2hlZXQ6OmRlc3Ryb3lEZWNvZGVkRGF0YSgpCiB7CisgICAgaWYgKCFtX3BhcnNlZFN0
eWxlU2hlZXRDYWNoZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9wYXJzZWRTdHlsZVNoZWV0
Q2FjaGUtPnJlbW92ZWRGcm9tTWVtb3J5Q2FjaGUoKTsKICAgICBtX3BhcnNlZFN0eWxlU2hlZXRD
YWNoZS5jbGVhcigpOworCiAgICAgc2V0RGVjb2RlZFNpemUoMCk7CiB9CiAKQEAgLTE2MSwyNSAr
MTY4LDI2IEBAIFBhc3NSZWZQdHI8U3R5bGVTaGVldEludGVybmFsPiBDYWNoZWRDU1MKIHsKICAg
ICBpZiAoIW1fcGFyc2VkU3R5bGVTaGVldENhY2hlKQogICAgICAgICByZXR1cm4gMDsKLSAgICAv
LyBDYWNoZWQgcGFyc2VkIHN0eWxlc2hlZXQgaGFzIG11dGF0ZWQsIGtpY2sgaXQgb3V0LgotICAg
IGlmICghbV9wYXJzZWRTdHlsZVNoZWV0Q2FjaGUtPmlzQ2FjaGVhYmxlKCkpIHsKLSAgICAgICAg
bV9wYXJzZWRTdHlsZVNoZWV0Q2FjaGUuY2xlYXIoKTsKLSAgICAgICAgc2V0RGVjb2RlZFNpemUo
MCk7Ci0gICAgICAgIHJldHVybiAwOwotICAgIH0KKyAgICBBU1NFUlQobV9wYXJzZWRTdHlsZVNo
ZWV0Q2FjaGUtPmlzQ2FjaGVhYmxlKCkpOworICAgIEFTU0VSVChtX3BhcnNlZFN0eWxlU2hlZXRD
YWNoZS0+aXNJbk1lbW9yeUNhY2hlKCkpOworCiAgICAgLy8gQ29udGV4dHMgbXVzdCBiZSBpZGVu
dGljYWwgc28gd2Uga25vdyB3ZSB3b3VsZCBnZXQgdGhlIHNhbWUgZXhhY3QgcmVzdWx0IGlmIHdl
IHBhcnNlZCBhZ2Fpbi4KICAgICBpZiAobV9wYXJzZWRTdHlsZVNoZWV0Q2FjaGUtPnBhcnNlckNv
bnRleHQoKSAhPSBjb250ZXh0KQogICAgICAgICByZXR1cm4gMDsKIAogICAgIGRpZEFjY2Vzc0Rl
Y29kZWREYXRhKGN1cnJlbnRUaW1lKCkpOwotICAgIC8vIEZJWE1FOiBJbXBsZW1lbnQgY29weS1v
bi13cml0ZSB0byBhdm9pZCBjb3B5aW5nIHdoZW4gbm90IG5lY2Vzc2FyeS4KLSAgICByZXR1cm4g
bV9wYXJzZWRTdHlsZVNoZWV0Q2FjaGUtPmNvcHkoKTsKKworICAgIHJldHVybiBtX3BhcnNlZFN0
eWxlU2hlZXRDYWNoZTsKIH0KIAogdm9pZCBDYWNoZWRDU1NTdHlsZVNoZWV0OjpzYXZlUGFyc2Vk
U3R5bGVTaGVldChQYXNzUmVmUHRyPFN0eWxlU2hlZXRJbnRlcm5hbD4gc2hlZXQpCiB7CiAgICAg
QVNTRVJUKHNoZWV0ICYmIHNoZWV0LT5pc0NhY2hlYWJsZSgpKTsKKworICAgIGlmIChtX3BhcnNl
ZFN0eWxlU2hlZXRDYWNoZSkKKyAgICAgICAgbV9wYXJzZWRTdHlsZVNoZWV0Q2FjaGUtPnJlbW92
ZWRGcm9tTWVtb3J5Q2FjaGUoKTsKICAgICBtX3BhcnNlZFN0eWxlU2hlZXRDYWNoZSA9IHNoZWV0
OworICAgIG1fcGFyc2VkU3R5bGVTaGVldENhY2hlLT5hZGRlZFRvTWVtb3J5Q2FjaGUoKTsKIAog
ICAgIHNldERlY29kZWRTaXplKG1fcGFyc2VkU3R5bGVTaGVldENhY2hlLT5lc3RpbWF0ZWRTaXpl
SW5CeXRlcygpKTsKIH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>140241</attachid>
            <date>2012-05-04 08:28:24 -0700</date>
            <delta_ts>2012-05-04 08:36:21 -0700</delta_ts>
            <desc>updated patch</desc>
            <filename>stylesheet-sharing-9.patch</filename>
            <type>text/plain</type>
            <size>42734</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExNjA4MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0NiBAQAorMjAxMi0wNS0wNCAgQW50dGkg
S29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CisKKyAgICAgICAgU2hhcmUgc3R5bGVzaGVldCBk
YXRhIHN0cnVjdHVyZXMgYmV0d2VlbiBkb2N1bWVudHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg1NTk4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgV2UgY3VycmVudGx5IG1ha2UgYSBjb3B5IG9mIHRoZSBk
YXRhIHN0cnVjdHVyZXMgd2hlbiByZXN0b3JpbmcgYSBjYWNoZWQgc3R5bGVzaGVldC4gVGhpcyBw
YXRjaCBsZXRzIHVzIHNoYXJlCisgICAgICAgIHRoZSBkYXRhIHVudGlsIHNvbWVvbmUgdXNlcyBD
U1NPTSB0byBtb2RpZnkgdGhlIHNoZWV0LgorICAgICAgICAKKyAgICAgICAgVGhlIHBhdGNoIGlt
cGxlbWVudHMgY29weS1vbi13cml0ZSBmb3IgdGhlIGludGVybmFsIHN0eWxlIHNoZWV0IGRhdGEg
c3RydWN0dXJlcy4gSWYgYW55IG11dGF0aW9uIENTU09NIEFQSSBpcworICAgICAgICBpbnZva2Vk
LCB3ZSBjaGVjayBpZiB0aGUgc3R5bGVzaGVldCBjYW4gYmUgc2FmZWx5IG11dGF0ZWQgKHdlIGFy
ZSB0aGUgb25seSBjbGllbnQsIGl0IGlzIG5vdCBjYWNoZWQpLiBJZiBub3QKKyAgICAgICAgdGhl
biB0aGUgaW50ZXJuYWwgc3RydWN0dXJlcyBhcmUgY29waWVkIGFuZCBhbnkgZXhpc3RpbmcgQ1NT
T00gb2JqZWN0cyBhcmUgcmUtYXR0YWNoZWQgdG8gdGhlIG5ldyB0cmVlLgorICAgICAgICAKKyAg
ICAgICAgU2hhcmluZyBjYW4gc2F2ZSBzaWduaWZpY2FudCBhbW91bnQgb2YgbWVtb3J5IG9uIHNp
dGVzIHdpdGggbGFyZ2Ugc3R5bGVzaGVldHMuIEZvciBleGFtcGxlIGlmIHlvdSBoYXZlCisgICAg
ICAgIG11bHRpcGxlIGFydGljbGVzIG9wZW4gb24gd3NqLmNvbSB0aGlzIHNhdmVzIH4yLjZNQiBw
ZXIgdGFiLgorCisgICAgICAgICogY3NzL0NTU0ZvbnRGYWNlUnVsZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NGb250RmFjZVJ1bGU6OnJlYXR0YWNoKToKKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAqIGNzcy9DU1NGb250RmFjZVJ1bGUuaDoKKyAgICAgICAgKENTU0ZvbnRGYWNlUnVs
ZSk6CisgICAgICAgICogY3NzL0NTU01lZGlhUnVsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
U1NNZWRpYVJ1bGU6Omluc2VydFJ1bGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTTWVkaWFSdWxl
OjpkZWxldGVSdWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU01lZGlhUnVsZTo6cmVhdHRhY2gp
OgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogY3NzL0NTU01lZGlhUnVsZS5oOgorICAg
ICAgICAoQ1NTTWVkaWFSdWxlKToKKyAgICAgICAgKiBjc3MvQ1NTUGFnZVJ1bGUuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTUGFnZVJ1bGU6OnNldFNlbGVjdG9yVGV4dCk6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NQYWdlUnVsZTo6cmVhdHRhY2gpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAg
ICAgICogY3NzL0NTU1BhZ2VSdWxlLmg6CisgICAgICAgIChDU1NQYWdlUnVsZSk6CisgICAgICAg
ICogY3NzL0NTU1J1bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUnVsZTo6cmVhdHRhY2gp
OgorICAgICAgICAKKyAgICAgICAgICAgIEFmdGVyIHRoZSBpbnRlcm5hbCBzdHlsZXJ1bGUgdHJl
ZSBoYXMgYmVlbiBjb3BpZWQsIHRoZSBleGlzdGluZyB3cmFwcGVycyBhcmUgcmUtYXR0YWNoZWQg
dXNpbmcgcmVjdXJzaXZlIHJlYXR0YWNoKCkgZnVuY3Rpb24uCisKKyAgICAgICAgKiBjc3MvQ1NT
UnVsZS5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChDU1NSdWxlKToKKyAgICAgICAg
KiBjc3MvQ1NTU3R5bGVSdWxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlUnVsZTo6
c2V0U2VsZWN0b3JUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlUnVsZTo6cmVhdHRh
Y2gpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogY3NzL0NTU1N0eWxlUnVsZS5oOgor
ICAgICAgICAoQ1NTU3R5bGVSdWxlKToKKyAgICAgICAgKiBjc3MvQ1NTU3R5bGVTaGVldC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVNoZWV0SW50ZXJuYWw6OlN0eWxlU2hlZXRJbnRlcm5h
bCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVNoZWV0SW50ZXJuYWw6OmlzQ2FjaGVhYmxlKToK
KyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2hlZXRJbnRlcm5hbDo6cnVsZUF0KToKKyAgICAgICAg
CisgICAgICAgICAgICBBZGQgcnVsZUF0KCksIHVzZSBpdCBmb3IgYm90aCB3cmFwcGVyIGNyZWF0
aW9uIGFuZCByZWF0dGFjaGluZy4gIFJlbW92ZSBjcmVhdGVDaGlsZFJ1bGVDU1NPTVdyYXBwZXIg
LgorCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2hlZXRJbnRl
cm5hbDo6d3JhcHBlckluc2VydFJ1bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVTaGVldElu
dGVybmFsOjp3cmFwcGVyRGVsZXRlUnVsZSk6CisgICAgICAgIAorICAgICAgICAgICAgSW52YWxp
ZGF0aW9uIG1vdmVzIHRvIHRoZSBjYWxsaW5nIHdyYXBwZXIuCisKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlU2hlZXRJbnRlcm5hbDo6YWRkZWRUb01lbW9yeUNhY2hlKToKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlU2hlZXRJbnRlcm5hbDo6cmVtb3ZlZEZyb21NZW1vcnlDYWNoZSk6CisgICAgICAg
IChXZWJDb3JlOjpDU1NTdHlsZVNoZWV0Ojp3aWxsTXV0YXRlUnVsZXMpOgorICAgICAgICAKKyAg
ICAgICAgICAgIFRoaXMgaXMgY2FsbGVkIHdoZW5ldmVyIFN0eWxlU2hlZXRJbnRlcm5hbCBpcyBn
b2luZyB0byBiZSBtdXRhdGVkLiBJdCB3aWxsIGRvIGNvcHktb24td3JpdGUgaWYgbmVlZGVkLgor
ICAgICAgICAgICAgCisgICAgICAgICAgICBVc3VhbGx5IGludm9rZWQgYnkgQ1NTU3R5bGVTaGVl
dDo6UnVsZU11dGF0aW9uIFJBSUkgdHlwZS4KKworICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVT
aGVldDo6ZGlkTXV0YXRlUnVsZXMpOgorICAgICAgICAKKyAgICAgICAgICAgIFRoaXMgaXMgY2Fs
bGVkIGFmdGVyIHRoZSBtdXRhdGlvbiBpcyBjb21wbGV0ZSBhbmQgd2lsbCB0cmlnZ2VyIHRoZSBz
dHlsZSByZWNhbGMgaW4gdGhlIGRvY3VtZW50LgorCisgICAgICAgIChXZWJDb3JlOjpDU1NTdHls
ZVNoZWV0OjpkaWRNdXRhdGUpOgorICAgICAgICAKKyAgICAgICAgICAgIFRoaXMgaXMgY2FsbGVk
IGRpcmVjdGx5IGFmdGVyIG11dGF0aW9ucyB0aGF0IGRvbid0IGNoYW5nZSBTdHlsZVNoZWV0SW50
ZXJuYWwgc28gZG9uJ3QgcmVxdWlyZSBjb3B5LW9uLXdyaXRlLgorCisgICAgICAgIChXZWJDb3Jl
OjpDU1NTdHlsZVNoZWV0OjpyZWF0dGFjaENoaWxkUnVsZUNTU09NV3JhcHBlcnMpOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTU3R5bGVTaGVldDo6c2V0RGlzYWJsZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTU3R5bGVTaGVldDo6aW5zZXJ0UnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHls
ZVNoZWV0OjpkZWxldGVSdWxlKToKKyAgICAgICAgKiBjc3MvQ1NTU3R5bGVTaGVldC5oOgorICAg
ICAgICAoU3R5bGVTaGVldEludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2hlZXRJ
bnRlcm5hbDo6aGFzT25lQ2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2hlZXRJbnRl
cm5hbDo6aXNNdXRhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2hlZXRJbnRlcm5hbDo6
c2V0TXV0YWJsZSk6CisgICAgICAgIAorICAgICAgICAgICAgVHJhY2sgbXV0YWJpbGl0eS4gTXV0
YXRpb24gaXMgYWxsb3dlZCBvbmx5IGFmdGVyIHdpbGxNdXRhdGUgY2FsbC4KKworICAgICAgICAo
V2ViQ29yZTo6U3R5bGVTaGVldEludGVybmFsOjppc0luTWVtb3J5Q2FjaGUpOgorICAgICAgICAK
KyAgICAgICAgICAgIFRyYWNrIGlmIHRoZSBvYmplY3QgaXMgaW4gbWVtb3J5IGNhY2hlLgorCisg
ICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNoZWV0OjpjbGVhck93bmVyUnVsZSk6CisgICAgICAg
IChDU1NTdHlsZVNoZWV0KToKKyAgICAgICAgKiBjc3MvTWVkaWFMaXN0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhTGlzdDo6c2V0TWVkaWFUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhTGlzdDo6ZGVsZXRlTWVkaXVtKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhTGlzdDo6YXBw
ZW5kTWVkaXVtKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhTGlzdDo6ZGlkTXV0YXRlKToKKyAg
ICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFMaXN0OjpyZWF0dGFjaCk6
CisgICAgICAgICogY3NzL01lZGlhTGlzdC5oOgorICAgICAgICAoTWVkaWFMaXN0KToKKyAgICAg
ICAgKiBjc3MvUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbjo6c2V0Q3NzVGV4dCk6CisgICAg
ICAgIChXZWJDb3JlOjpQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb246OnNldFByb3BlcnR5
KToKKyAgICAgICAgKFdlYkNvcmU6OlByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbjo6cmVt
b3ZlUHJvcGVydHkpOgorICAgICAgICAoV2ViQ29yZTo6UHJvcGVydHlTZXRDU1NTdHlsZURlY2xh
cmF0aW9uOjpzZXRQcm9wZXJ0eUludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGVSdWxlQ1NTU3R5bGVEZWNsYXJhdGlvbjo6d2lsbE11dGF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZVJ1bGVDU1NTdHlsZURlY2xhcmF0aW9uOjpkaWRNdXRhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSdWxlQ1NTU3R5bGVEZWNsYXJhdGlvbjo6cmVhdHRh
Y2gpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lQ1NTU3R5bGVEZWNsYXJhdGlvbjo6ZGlkTXV0
YXRlKToKKyAgICAgICAgKiBjc3MvUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb246OndpbGxNdXRh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6UHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uOjpk
aWRNdXRhdGUpOgorICAgICAgICAoU3R5bGVSdWxlQ1NTU3R5bGVEZWNsYXJhdGlvbik6CisgICAg
ICAgICogY3NzL1dlYktpdENTU0tleWZyYW1lc1J1bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
V2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZTo6c2V0TmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJL
aXRDU1NLZXlmcmFtZXNSdWxlOjppbnNlcnRSdWxlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYktp
dENTU0tleWZyYW1lc1J1bGU6OmRlbGV0ZVJ1bGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViS2l0
Q1NTS2V5ZnJhbWVzUnVsZTo6cmVhdHRhY2gpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
ICogY3NzL1dlYktpdENTU0tleWZyYW1lc1J1bGUuaDoKKyAgICAgICAgKFdlYktpdENTU0tleWZy
YW1lc1J1bGUpOgorICAgICAgICAqIGNzcy9XZWJLaXRDU1NSZWdpb25SdWxlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OldlYktpdENTU1JlZ2lvblJ1bGU6OnJlYXR0YWNoKToKKyAgICAgICAgKiBj
c3MvV2ViS2l0Q1NTUmVnaW9uUnVsZS5oOgorICAgICAgICAoV2ViS2l0Q1NTUmVnaW9uUnVsZSk6
CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yU3R5bGVTaGVldDo6cmVwYXJzZVN0eWxlU2hlZXQpOgorICAgICAg
ICAqIGxvYWRlci9jYWNoZS9DYWNoZWRDU1NTdHlsZVNoZWV0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNhY2hlZENTU1N0eWxlU2hlZXQ6On5DYWNoZWRDU1NTdHlsZVNoZWV0KToKKyAgICAgICAg
KFdlYkNvcmU6OkNhY2hlZENTU1N0eWxlU2hlZXQ6OmRlc3Ryb3lEZWNvZGVkRGF0YSk6CisgICAg
ICAgIChXZWJDb3JlOjpDYWNoZWRDU1NTdHlsZVNoZWV0OjpyZXN0b3JlUGFyc2VkU3R5bGVTaGVl
dCk6CisgICAgICAgIAorICAgICAgICAgICAgRG9uJ3QgY29weSB3aGVuIHJlc3RvcmluZy4gSXQg
aXMgbm8gbG9uZ2VyIG5lY2Vzc2FyeS4KKyAgICAgICAgICAgIFNldCB0aGUgY2FjaGUgYml0IG9u
IHRoZSBzdHlsZXNoZWV0LgorCisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRDU1NTdHlsZVNoZWV0
OjpzYXZlUGFyc2VkU3R5bGVTaGVldCk6CisKIDIwMTItMDUtMDMgIElseWEgVGlraG9ub3Zza3kg
IDxsb2lzbG9AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IGNyZWF0ZVJh
d0xvY2F0aW9uQnlVUkwgaXMgdG9vIHNsb3cgaWYgYSBiaWcgbnVtYmVyIG9mIGV2YWxzIGhhcHBl
bi4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVJ1bGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVJ1bGUuY3BwCShyZXZpc2lvbiAx
MTU5NTkpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VSdWxlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTUsNCArNTUsMTIgQEAgU3RyaW5nIENTU0ZvbnRGYWNlUnVsZTo6Y3NzVGV4
dCgpIGNvbnN0CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAordm9pZCBDU1NGb250RmFjZVJ1bGU6
OnJlYXR0YWNoKFN0eWxlUnVsZUZvbnRGYWNlKiBydWxlKQoreworICAgIEFTU0VSVChydWxlKTsK
KyAgICBtX2ZvbnRGYWNlUnVsZSA9IHJ1bGU7CisgICAgaWYgKG1fcHJvcGVydGllc0NTU09NV3Jh
cHBlcikKKyAgICAgICAgbV9wcm9wZXJ0aWVzQ1NTT01XcmFwcGVyLT5yZWF0dGFjaChtX2ZvbnRG
YWNlUnVsZS0+cHJvcGVydGllcygpKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRl
eDogU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlUnVsZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVJ1bGUuaAkocmV2aXNpb24gMTE1OTU5KQorKysg
U291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlUnVsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00
Myw2ICs0Myw4IEBAIHB1YmxpYzoKIAogICAgIFN0cmluZyBjc3NUZXh0KCkgY29uc3Q7CiAKKyAg
ICB2b2lkIHJlYXR0YWNoKFN0eWxlUnVsZUZvbnRGYWNlKik7CisKIHByaXZhdGU6CiAgICAgQ1NT
Rm9udEZhY2VSdWxlKFN0eWxlUnVsZUZvbnRGYWNlKiwgQ1NTU3R5bGVTaGVldCogcGFyZW50KTsK
IApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU01lZGlhUnVsZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU01lZGlhUnVsZS5jcHAJKHJldmlzaW9uIDExNTk1OSkK
KysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NNZWRpYVJ1bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC04MCwxMyArODAsMTEgQEAgdW5zaWduZWQgQ1NTTWVkaWFSdWxlOjppbnNlcnRSdWxlKGNvbnN0
IAogICAgICAgICBlYyA9IEhJRVJBUkNIWV9SRVFVRVNUX0VSUjsKICAgICAgICAgcmV0dXJuIDA7
CiAgICAgfQorICAgIENTU1N0eWxlU2hlZXQ6OlJ1bGVNdXRhdGlvbiBtdXRhdGlvbih0aGlzKTsK
KwogICAgIG1fbWVkaWFSdWxlLT53cmFwcGVySW5zZXJ0UnVsZShpbmRleCwgbmV3UnVsZSk7CiAK
ICAgICBtX2NoaWxkUnVsZUNTU09NV3JhcHBlcnMuaW5zZXJ0KGluZGV4LCBSZWZQdHI8Q1NTUnVs
ZT4oKSk7Ci0KLSAgICBpZiAoQ1NTU3R5bGVTaGVldCogc3R5bGVTaGVldCA9IHBhcmVudFN0eWxl
U2hlZXQoKSkKLSAgICAgICAgc3R5bGVTaGVldC0+c3R5bGVTaGVldENoYW5nZWQoKTsKLQogICAg
IHJldHVybiBpbmRleDsKIH0KIApAQCAtMTAwLDE0ICs5OCwxNCBAQCB2b2lkIENTU01lZGlhUnVs
ZTo6ZGVsZXRlUnVsZSh1bnNpZ25lZCBpCiAgICAgICAgIGVjID0gSU5ERVhfU0laRV9FUlI7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CisKKyAgICBDU1NTdHlsZVNoZWV0OjpSdWxlTXV0YXRpb24g
bXV0YXRpb24odGhpcyk7CisKICAgICBtX21lZGlhUnVsZS0+d3JhcHBlclJlbW92ZVJ1bGUoaW5k
ZXgpOwogCiAgICAgaWYgKG1fY2hpbGRSdWxlQ1NTT01XcmFwcGVyc1tpbmRleF0pCiAgICAgICAg
IG1fY2hpbGRSdWxlQ1NTT01XcmFwcGVyc1tpbmRleF0tPnNldFBhcmVudFJ1bGUoMCk7CiAgICAg
bV9jaGlsZFJ1bGVDU1NPTVdyYXBwZXJzLnJlbW92ZShpbmRleCk7Ci0KLSAgICBpZiAoQ1NTU3R5
bGVTaGVldCogc3R5bGVTaGVldCA9IHBhcmVudFN0eWxlU2hlZXQoKSkKLSAgICAgICAgc3R5bGVT
aGVldC0+c3R5bGVTaGVldENoYW5nZWQoKTsKIH0KIAogU3RyaW5nIENTU01lZGlhUnVsZTo6Y3Nz
VGV4dCgpIGNvbnN0CkBAIC0xNjMsNCArMTYxLDE2IEBAIENTU1J1bGVMaXN0KiBDU1NNZWRpYVJ1
bGU6OmNzc1J1bGVzKCkgY28KICAgICByZXR1cm4gbV9ydWxlTGlzdENTU09NV3JhcHBlci5nZXQo
KTsKIH0KIAordm9pZCBDU1NNZWRpYVJ1bGU6OnJlYXR0YWNoKFN0eWxlUnVsZU1lZGlhKiBydWxl
KQoreworICAgIEFTU0VSVChydWxlKTsKKyAgICBtX21lZGlhUnVsZSA9IHJ1bGU7CisgICAgaWYg
KG1fbWVkaWFDU1NPTVdyYXBwZXIpCisgICAgICAgIG1fbWVkaWFDU1NPTVdyYXBwZXItPnJlYXR0
YWNoKG1fbWVkaWFSdWxlLT5tZWRpYVF1ZXJpZXMoKSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IG1fY2hpbGRSdWxlQ1NTT01XcmFwcGVycy5zaXplKCk7ICsraSkgeworICAgICAgICBp
ZiAobV9jaGlsZFJ1bGVDU1NPTVdyYXBwZXJzW2ldKQorICAgICAgICAgICAgbV9jaGlsZFJ1bGVD
U1NPTVdyYXBwZXJzW2ldLT5yZWF0dGFjaChtX21lZGlhUnVsZS0+Y2hpbGRSdWxlcygpW2ldLmdl
dCgpKTsKKyAgICB9Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NNZWRpYVJ1bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTTWVkaWFSdWxlLmgJKHJldmlzaW9uIDExNTk1OSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NNZWRpYVJ1bGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTAsNiArNTAsOCBAQCBwdWJsaWM6
CiAgICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3Q7CiAgICAgQ1NTUnVsZSogaXRlbSh1bnNpZ25l
ZCBpbmRleCkgY29uc3Q7CiAKKyAgICB2b2lkIHJlYXR0YWNoKFN0eWxlUnVsZU1lZGlhKik7CisK
IHByaXZhdGU6CiAgICAgQ1NTTWVkaWFSdWxlKFN0eWxlUnVsZU1lZGlhKiwgQ1NTU3R5bGVTaGVl
dCopOwogICAgIApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhZ2VSdWxlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFnZVJ1bGUuY3BwCShyZXZpc2lvbiAx
MTU5NTkpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFnZVJ1bGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02NSwyNCArNjUsMTcgQEAgU3RyaW5nIENTU1BhZ2VSdWxlOjpzZWxlY3RvclRleHQo
KSBjb25zdAogCiB2b2lkIENTU1BhZ2VSdWxlOjpzZXRTZWxlY3RvclRleHQoY29uc3QgU3RyaW5n
JiBzZWxlY3RvclRleHQpCiB7Ci0gICAgRG9jdW1lbnQqIGRvYyA9IDA7Ci0gICAgaWYgKENTU1N0
eWxlU2hlZXQqIHN0eWxlU2hlZXQgPSBwYXJlbnRTdHlsZVNoZWV0KCkpCi0gICAgICAgIGRvYyA9
IHN0eWxlU2hlZXQtPm93bmVyRG9jdW1lbnQoKTsKLSAgICBpZiAoIWRvYykKLSAgICAgICAgcmV0
dXJuOwogICAgIAogICAgIENTU1BhcnNlciBwYXJzZXIocGFyc2VyQ29udGV4dCgpKTsKICAgICBD
U1NTZWxlY3Rvckxpc3Qgc2VsZWN0b3JMaXN0OwogICAgIHBhcnNlci5wYXJzZVNlbGVjdG9yKHNl
bGVjdG9yVGV4dCwgc2VsZWN0b3JMaXN0KTsKICAgICBpZiAoIXNlbGVjdG9yTGlzdC5maXJzdCgp
KQogICAgICAgICByZXR1cm47Ci0gICAgCisKKyAgICBDU1NTdHlsZVNoZWV0OjpSdWxlTXV0YXRp
b24gbXV0YXRpb24odGhpcyk7CisKICAgICBTdHJpbmcgb2xkU2VsZWN0b3JUZXh0ID0gdGhpcy0+
c2VsZWN0b3JUZXh0KCk7CiAgICAgbV9wYWdlUnVsZS0+d3JhcHBlckFkb3B0U2VsZWN0b3JMaXN0
KHNlbGVjdG9yTGlzdCk7Ci0gICAgCi0gICAgaWYgKHRoaXMtPnNlbGVjdG9yVGV4dCgpID09IG9s
ZFNlbGVjdG9yVGV4dCkKLSAgICAgICAgcmV0dXJuOwotICAgIGRvYy0+c3R5bGVSZXNvbHZlckNo
YW5nZWQoRGVmZXJSZWNhbGNTdHlsZSk7CiB9CiAKIFN0cmluZyBDU1NQYWdlUnVsZTo6Y3NzVGV4
dCgpIGNvbnN0CkBAIC05NCw0ICs4NywxMiBAQCBTdHJpbmcgQ1NTUGFnZVJ1bGU6OmNzc1RleHQo
KSBjb25zdAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKK3ZvaWQgQ1NTUGFnZVJ1bGU6OnJlYXR0
YWNoKFN0eWxlUnVsZVBhZ2UqIHJ1bGUpCit7CisgICAgQVNTRVJUKHJ1bGUpOworICAgIG1fcGFn
ZVJ1bGUgPSBydWxlOworICAgIGlmIChtX3Byb3BlcnRpZXNDU1NPTVdyYXBwZXIpCisgICAgICAg
IG1fcHJvcGVydGllc0NTU09NV3JhcHBlci0+cmVhdHRhY2gobV9wYWdlUnVsZS0+cHJvcGVydGll
cygpKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUv
Y3NzL0NTU1BhZ2VSdWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1Bh
Z2VSdWxlLmgJKHJldmlzaW9uIDExNTk1OSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYWdl
UnVsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw5IEBAIHB1YmxpYzoKICAgICB2b2lk
IHNldFNlbGVjdG9yVGV4dChjb25zdCBTdHJpbmcmKTsKIAogICAgIFN0cmluZyBjc3NUZXh0KCkg
Y29uc3Q7Ci0gICAgCisKKyAgICB2b2lkIHJlYXR0YWNoKFN0eWxlUnVsZVBhZ2UqKTsKKwogcHJp
dmF0ZToKICAgICBDU1NQYWdlUnVsZShTdHlsZVJ1bGVQYWdlKiwgQ1NTU3R5bGVTaGVldCopOwog
ICAgIApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1J1bGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NSdWxlLmNwcAkocmV2aXNpb24gMTE1OTU5KQorKysgU291
cmNlL1dlYkNvcmUvY3NzL0NTU1J1bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3
IEBACiAjaW5jbHVkZSAiV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZS5oIgogI2luY2x1ZGUgIldlYktp
dENTU1JlZ2lvblJ1bGUuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUg
IlN0eWxlUnVsZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTExMyw0ICsxMTQsNDIg
QEAgdm9pZCBDU1NSdWxlOjpkZXN0cm95KCkKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0K
IAordm9pZCBDU1NSdWxlOjpyZWF0dGFjaChTdHlsZVJ1bGVCYXNlKiBydWxlKQoreworICAgIHN3
aXRjaCAodHlwZSgpKSB7CisgICAgY2FzZSBVTktOT1dOX1JVTEU6CisgICAgICAgIHJldHVybjsK
KyAgICBjYXNlIFNUWUxFX1JVTEU6CisgICAgICAgIHN0YXRpY19jYXN0PENTU1N0eWxlUnVsZSo+
KHRoaXMpLT5yZWF0dGFjaChzdGF0aWNfY2FzdDxTdHlsZVJ1bGUqPihydWxlKSk7CisgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIFBBR0VfUlVMRToKKyAgICAgICAgc3RhdGljX2Nhc3Q8Q1NTUGFn
ZVJ1bGUqPih0aGlzKS0+cmVhdHRhY2goc3RhdGljX2Nhc3Q8U3R5bGVSdWxlUGFnZSo+KHJ1bGUp
KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ0hBUlNFVF9SVUxFOgorICAgICAgICBBU1NF
UlQoIXJ1bGUpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJTVBPUlRfUlVMRToKKyAgICAg
ICAgLy8gRklYTUU6IEltcGxlbWVudCB3aGVuIGVuYWJsaW5nIGNhY2hpbmcgZm9yIHN0eWxlc2hl
ZXRzIHdpdGggaW1wb3J0IHJ1bGVzLgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIGNhc2UgTUVESUFfUlVMRToKKyAgICAgICAgc3RhdGljX2Nhc3Q8
Q1NTTWVkaWFSdWxlKj4odGhpcyktPnJlYXR0YWNoKHN0YXRpY19jYXN0PFN0eWxlUnVsZU1lZGlh
Kj4ocnVsZSkpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBGT05UX0ZBQ0VfUlVMRToKKyAg
ICAgICAgc3RhdGljX2Nhc3Q8Q1NTRm9udEZhY2VSdWxlKj4odGhpcyktPnJlYXR0YWNoKHN0YXRp
Y19jYXN0PFN0eWxlUnVsZUZvbnRGYWNlKj4ocnVsZSkpOworICAgICAgICByZXR1cm47CisgICAg
Y2FzZSBXRUJLSVRfS0VZRlJBTUVTX1JVTEU6CisgICAgICAgIHN0YXRpY19jYXN0PFdlYktpdENT
U0tleWZyYW1lc1J1bGUqPih0aGlzKS0+cmVhdHRhY2goc3RhdGljX2Nhc3Q8U3R5bGVSdWxlS2V5
ZnJhbWVzKj4ocnVsZSkpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBXRUJLSVRfS0VZRlJB
TUVfUlVMRToKKyAgICAgICAgLy8gTm8gbmVlZCB0byByZWF0dGFjaCwgdGhlIHVuZGVybHlpbmcg
ZGF0YSBpcyBzaGFyZWFibGUgb24gbXV0YXRpb24uCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBXRUJLSVRfUkVHSU9OX1JVTEU6CisgICAg
ICAgIHN0YXRpY19jYXN0PFdlYktpdENTU1JlZ2lvblJ1bGUqPih0aGlzKS0+cmVhdHRhY2goc3Rh
dGljX2Nhc3Q8U3R5bGVSdWxlUmVnaW9uKj4ocnVsZSkpOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUnVsZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NSdWxlLmgJKHJldmlzaW9uIDExNTk1OSkKKysrIFNvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NSdWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI0LDEyICsyNCwxMyBAQAogI2Rl
ZmluZSBDU1NSdWxlX2gKIAogI2luY2x1ZGUgIkNTU1N0eWxlU2hlZXQuaCIKKyNpbmNsdWRlICJF
eGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiS1VSTEhhc2guaCIKICNpbmNsdWRlIDx3dGYvTGlz
dEhhc2hTZXQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi10eXBlZGVmIGludCBFeGNlcHRp
b25Db2RlOworY2xhc3MgU3R5bGVSdWxlQmFzZTsKIAogY2xhc3MgQ1NTUnVsZSA6IHB1YmxpYyBS
ZWZDb3VudGVkPENTU1J1bGU+IHsKIHB1YmxpYzoKQEAgLTkzLDYgKzk0LDggQEAgcHVibGljOgog
ICAgIFN0cmluZyBjc3NUZXh0KCkgY29uc3Q7CiAgICAgdm9pZCBzZXRDc3NUZXh0KGNvbnN0IFN0
cmluZyYsIEV4Y2VwdGlvbkNvZGUmKTsKIAorICAgIHZvaWQgcmVhdHRhY2goU3R5bGVSdWxlQmFz
ZSopOworCiBwcm90ZWN0ZWQ6CiAgICAgQ1NTUnVsZShDU1NTdHlsZVNoZWV0KiBwYXJlbnQsIFR5
cGUgdHlwZSkKICAgICAgICAgOiBtX2hhc0NhY2hlZFNlbGVjdG9yVGV4dChmYWxzZSkKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVJ1bGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVJ1bGUuY3BwCShyZXZpc2lvbiAxMTU5NTkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVSdWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTEsMTgg
KzkxLDE0IEBAIFN0cmluZyBDU1NTdHlsZVJ1bGU6OnNlbGVjdG9yVGV4dCgpIGNvbnMKIAogdm9p
ZCBDU1NTdHlsZVJ1bGU6OnNldFNlbGVjdG9yVGV4dChjb25zdCBTdHJpbmcmIHNlbGVjdG9yVGV4
dCkKIHsKLSAgICBEb2N1bWVudCogZG9jID0gMDsKLSAgICBpZiAoQ1NTU3R5bGVTaGVldCogc3R5
bGVTaGVldCA9IHBhcmVudFN0eWxlU2hlZXQoKSkKLSAgICAgICAgZG9jID0gc3R5bGVTaGVldC0+
b3duZXJEb2N1bWVudCgpOwotICAgIGlmICghZG9jKQotICAgICAgICByZXR1cm47Ci0KICAgICBD
U1NQYXJzZXIgcChwYXJzZXJDb250ZXh0KCkpOwogICAgIENTU1NlbGVjdG9yTGlzdCBzZWxlY3Rv
ckxpc3Q7CiAgICAgcC5wYXJzZVNlbGVjdG9yKHNlbGVjdG9yVGV4dCwgc2VsZWN0b3JMaXN0KTsK
ICAgICBpZiAoIXNlbGVjdG9yTGlzdC5maXJzdCgpKQogICAgICAgICByZXR1cm47CiAKKyAgICBD
U1NTdHlsZVNoZWV0OjpSdWxlTXV0YXRpb24gbXV0YXRpb24odGhpcyk7CisKICAgICBTdHJpbmcg
b2xkU2VsZWN0b3JUZXh0ID0gdGhpcy0+c2VsZWN0b3JUZXh0KCk7CiAgICAgbV9zdHlsZVJ1bGUt
PndyYXBwZXJBZG9wdFNlbGVjdG9yTGlzdChzZWxlY3Rvckxpc3QpOwogCkBAIC0xMTAsOCArMTA2
LDYgQEAgdm9pZCBDU1NTdHlsZVJ1bGU6OnNldFNlbGVjdG9yVGV4dChjb25zdAogICAgICAgICBB
U1NFUlQoc2VsZWN0b3JUZXh0Q2FjaGUoKS5jb250YWlucyh0aGlzKSk7CiAgICAgICAgIHNlbGVj
dG9yVGV4dENhY2hlKCkuc2V0KHRoaXMsIGdlbmVyYXRlU2VsZWN0b3JUZXh0KCkpOwogICAgIH0K
LQotICAgIGRvYy0+c3R5bGVSZXNvbHZlckNoYW5nZWQoRGVmZXJSZWNhbGNTdHlsZSk7CiB9CiAK
IFN0cmluZyBDU1NTdHlsZVJ1bGU6OmNzc1RleHQoKSBjb25zdApAQCAtMTI1LDQgKzExOSwxMSBA
QCBTdHJpbmcgQ1NTU3R5bGVSdWxlOjpjc3NUZXh0KCkgY29uc3QKICAgICByZXR1cm4gcmVzdWx0
OwogfQogCit2b2lkIENTU1N0eWxlUnVsZTo6cmVhdHRhY2goU3R5bGVSdWxlKiBydWxlKQorewor
ICAgIG1fc3R5bGVSdWxlID0gcnVsZTsKKyAgICBpZiAobV9wcm9wZXJ0aWVzQ1NTT01XcmFwcGVy
KQorICAgICAgICBtX3Byb3BlcnRpZXNDU1NPTVdyYXBwZXItPnJlYXR0YWNoKG1fc3R5bGVSdWxl
LT5wcm9wZXJ0aWVzKCkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVSdWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvY3NzL0NTU1N0eWxlUnVsZS5oCShyZXZpc2lvbiAxMTU5NTkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTU3R5bGVSdWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDggQEAgcHVi
bGljOgogICAgIC8vIEZJWE1FOiBOb3QgQ1NTT00uIFJlbW92ZS4KICAgICBTdHlsZVJ1bGUqIHN0
eWxlUnVsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3R5bGVSdWxlLmdldCgpOyB9CiAKKyAgICB2b2lk
IHJlYXR0YWNoKFN0eWxlUnVsZSopOworCiBwcml2YXRlOgogICAgIENTU1N0eWxlUnVsZShTdHls
ZVJ1bGUqLCBDU1NTdHlsZVNoZWV0Kik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NT
dHlsZVNoZWV0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVT
aGVldC5jcHAJKHJldmlzaW9uIDExNTk1OSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHls
ZVNoZWV0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTksNyArOTksOCBAQCBTdHlsZVNoZWV0SW50
ZXJuYWw6OlN0eWxlU2hlZXRJbnRlcm5hbChTCiAgICAgLCBtX2hhc1N5bnRhY3RpY2FsbHlWYWxp
ZENTU0hlYWRlcih0cnVlKQogICAgICwgbV9kaWRMb2FkRXJyb3JPY2N1cihmYWxzZSkKICAgICAs
IG1fdXNlc1JlbVVuaXRzKGZhbHNlKQotICAgICwgbV9oYXNNdXRhdGVkKGZhbHNlKQorICAgICwg
bV9pc011dGFibGUoZmFsc2UpCisgICAgLCBtX2lzSW5NZW1vcnlDYWNoZShmYWxzZSkKICAgICAs
IG1fcGFyc2VyQ29udGV4dChjb250ZXh0KQogewogfQpAQCAtMTE4LDcgKzExOSw4IEBAIFN0eWxl
U2hlZXRJbnRlcm5hbDo6U3R5bGVTaGVldEludGVybmFsKGMKICAgICAsIG1faGFzU3ludGFjdGlj
YWxseVZhbGlkQ1NTSGVhZGVyKG8ubV9oYXNTeW50YWN0aWNhbGx5VmFsaWRDU1NIZWFkZXIpCiAg
ICAgLCBtX2RpZExvYWRFcnJvck9jY3VyKGZhbHNlKQogICAgICwgbV91c2VzUmVtVW5pdHMoby5t
X3VzZXNSZW1Vbml0cykKLSAgICAsIG1faGFzTXV0YXRlZChmYWxzZSkKKyAgICAsIG1faXNNdXRh
YmxlKGZhbHNlKQorICAgICwgbV9pc0luTWVtb3J5Q2FjaGUoZmFsc2UpCiAgICAgLCBtX3BhcnNl
ckNvbnRleHQoby5tX3BhcnNlckNvbnRleHQpCiB7CiAgICAgQVNTRVJUKG8uaXNDYWNoZWFibGUo
KSk7CkBAIC0xNDAsMTMgKzE0MiwxNiBAQCBib29sIFN0eWxlU2hlZXRJbnRlcm5hbDo6aXNDYWNo
ZWFibGUoKSBjCiAgICAgLy8gRklYTUU6IFN1cHBvcnQgY29weWluZyBpbXBvcnQgcnVsZXMuCiAg
ICAgaWYgKCFtX2ltcG9ydFJ1bGVzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIC8vIEZJWE1FOiBTdXBwb3J0IGNhY2hlZCBzdHlsZXNoZWV0cyBpbiBpbXBvcnQgcnVsZXMu
CisgICAgaWYgKG1fb3duZXJSdWxlKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgLy8gVGhp
cyB3b3VsZCByZXF1aXJlIGRlYWxpbmcgd2l0aCBtdWx0aXBsZSBjbGllbnRzIGZvciBsb2FkIGNh
bGxiYWNrcy4KICAgICBpZiAoIW1fbG9hZENvbXBsZXRlZCkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIGlmIChtX2RpZExvYWRFcnJvck9jY3VyKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgLy8gSXQgaXMgbm90IHRoZSBvcmlnaW5hbCBzaGVldCBhbnltb3JlLgotICAgIGlmIChtX2hh
c011dGF0ZWQpCisgICAgaWYgKG1faXNNdXRhYmxlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgLy8gSWYgdGhlIGhlYWRlciBpcyB2YWxpZCB3ZSBhcmUgbm90IGdvaW5nIHRvIG5lZWQgdG8g
Y2hlY2sgdGhlIFNlY3VyaXR5T3JpZ2luLgogICAgIC8vIEZJWE1FOiBWYWxpZCBtaW1lIHR5cGUg
YXZvaWRzIHRoZSBjaGVjayB0b28uCkBAIC0xNjksMjEgKzE3NCwyMSBAQCB2b2lkIFN0eWxlU2hl
ZXRJbnRlcm5hbDo6cGFyc2VyQXBwZW5kUnVsCiAgICAgbV9jaGlsZFJ1bGVzLmFwcGVuZChydWxl
KTsKIH0KIAotUGFzc1JlZlB0cjxDU1NSdWxlPiBTdHlsZVNoZWV0SW50ZXJuYWw6OmNyZWF0ZUNo
aWxkUnVsZUNTU09NV3JhcHBlcih1bnNpZ25lZCBpbmRleCwgQ1NTU3R5bGVTaGVldCogcGFyZW50
V3JhcHBlcikKK1N0eWxlUnVsZUJhc2UqIFN0eWxlU2hlZXRJbnRlcm5hbDo6cnVsZUF0KHVuc2ln
bmVkIGluZGV4KSBjb25zdAogewogICAgIEFTU0VSVChpbmRleCA8IHJ1bGVDb3VudCgpKTsKICAg
ICAKICAgICB1bnNpZ25lZCBjaGlsZFZlY3RvckluZGV4ID0gaW5kZXg7CiAgICAgaWYgKGhhc0No
YXJzZXRSdWxlKCkpIHsKICAgICAgICAgaWYgKGluZGV4ID09IDApCi0gICAgICAgICAgICByZXR1
cm4gQ1NTQ2hhcnNldFJ1bGU6OmNyZWF0ZShwYXJlbnRXcmFwcGVyLCBtX2VuY29kaW5nRnJvbUNo
YXJzZXRSdWxlKTsKKyAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAtLWNoaWxkVmVjdG9y
SW5kZXg7CiAgICAgfQogICAgIGlmIChjaGlsZFZlY3RvckluZGV4IDwgbV9pbXBvcnRSdWxlcy5z
aXplKCkpCi0gICAgICAgIHJldHVybiBtX2ltcG9ydFJ1bGVzW2NoaWxkVmVjdG9ySW5kZXhdLT5j
cmVhdGVDU1NPTVdyYXBwZXIocGFyZW50V3JhcHBlcik7Ci0gICAgCisgICAgICAgIHJldHVybiBt
X2ltcG9ydFJ1bGVzW2NoaWxkVmVjdG9ySW5kZXhdLmdldCgpOworCiAgICAgY2hpbGRWZWN0b3JJ
bmRleCAtPSBtX2ltcG9ydFJ1bGVzLnNpemUoKTsKLSAgICByZXR1cm4gbV9jaGlsZFJ1bGVzW2No
aWxkVmVjdG9ySW5kZXhdLT5jcmVhdGVDU1NPTVdyYXBwZXIocGFyZW50V3JhcHBlcik7CisgICAg
cmV0dXJuIG1fY2hpbGRSdWxlc1tjaGlsZFZlY3RvckluZGV4XS5nZXQoKTsKIH0KIAogdW5zaWdu
ZWQgU3R5bGVTaGVldEludGVybmFsOjpydWxlQ291bnQoKSBjb25zdApAQCAtMjQyLDcgKzI0Nyw2
IEBAIGJvb2wgU3R5bGVTaGVldEludGVybmFsOjp3cmFwcGVySW5zZXJ0UnUKICAgICAgICAgbV9p
bXBvcnRSdWxlc1tjaGlsZFZlY3RvckluZGV4XS0+c2V0UGFyZW50U3R5bGVTaGVldCh0aGlzKTsK
ICAgICAgICAgbV9pbXBvcnRSdWxlc1tjaGlsZFZlY3RvckluZGV4XS0+cmVxdWVzdFN0eWxlU2hl
ZXQoKTsKICAgICAgICAgLy8gRklYTUU6IFN0eWxlc2hlZXQgZG9lc24ndCBhY3R1YWxseSBjaGFu
Z2UgbWVhbmluZ2Z1bGx5IGJlZm9yZSB0aGUgaW1wb3J0ZWQgc2hlZXRzIGFyZSBsb2FkZWQuCi0g
ICAgICAgIHN0eWxlU2hlZXRDaGFuZ2VkKCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
ICAgICAvLyBJbnNlcnRpbmcgQGltcG9ydCBydWxlIGFmdGVyIGEgbm9uLWltcG9ydCBydWxlIGlz
IG5vdCBhbGxvd2VkLgpAQCAtMjUxLDggKzI1NSw2IEBAIGJvb2wgU3R5bGVTaGVldEludGVybmFs
Ojp3cmFwcGVySW5zZXJ0UnUKICAgICBjaGlsZFZlY3RvckluZGV4IC09IG1faW1wb3J0UnVsZXMu
c2l6ZSgpOwogIAogICAgIG1fY2hpbGRSdWxlcy5pbnNlcnQoY2hpbGRWZWN0b3JJbmRleCwgcnVs
ZSk7Ci0gICAgCi0gICAgc3R5bGVTaGVldENoYW5nZWQoKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IApAQCAtMjY0LDcgKzI2Niw2IEBAIHZvaWQgU3R5bGVTaGVldEludGVybmFsOjp3cmFwcGVyRGVs
ZXRlUnUKICAgICBpZiAoaGFzQ2hhcnNldFJ1bGUoKSkgewogICAgICAgICBpZiAoY2hpbGRWZWN0
b3JJbmRleCA9PSAwKSB7CiAgICAgICAgICAgICBjbGVhckNoYXJzZXRSdWxlKCk7Ci0gICAgICAg
ICAgICBzdHlsZVNoZWV0Q2hhbmdlZCgpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
CiAgICAgICAgIC0tY2hpbGRWZWN0b3JJbmRleDsKQEAgLTI3MiwxMyArMjczLDExIEBAIHZvaWQg
U3R5bGVTaGVldEludGVybmFsOjp3cmFwcGVyRGVsZXRlUnUKICAgICBpZiAoY2hpbGRWZWN0b3JJ
bmRleCA8IG1faW1wb3J0UnVsZXMuc2l6ZSgpKSB7CiAgICAgICAgIG1faW1wb3J0UnVsZXNbY2hp
bGRWZWN0b3JJbmRleF0tPmNsZWFyUGFyZW50U3R5bGVTaGVldCgpOwogICAgICAgICBtX2ltcG9y
dFJ1bGVzLnJlbW92ZShjaGlsZFZlY3RvckluZGV4KTsKLSAgICAgICAgc3R5bGVTaGVldENoYW5n
ZWQoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBjaGlsZFZlY3RvckluZGV4IC09IG1f
aW1wb3J0UnVsZXMuc2l6ZSgpOwogCiAgICAgbV9jaGlsZFJ1bGVzLnJlbW92ZShjaGlsZFZlY3Rv
ckluZGV4KTsKLSAgICBzdHlsZVNoZWV0Q2hhbmdlZCgpOwogfQogCiB2b2lkIFN0eWxlU2hlZXRJ
bnRlcm5hbDo6cGFyc2VyQWRkTmFtZXNwYWNlKGNvbnN0IEF0b21pY1N0cmluZyYgcHJlZml4LCBj
b25zdCBBdG9taWNTdHJpbmcmIHVyaSkKQEAgLTQxNSwxNiArNDE0LDYgQEAgRG9jdW1lbnQqIFN0
eWxlU2hlZXRJbnRlcm5hbDo6c2luZ2xlT3duZQogICAgIHJldHVybiBvd25lck5vZGUgPyBvd25l
ck5vZGUtPmRvY3VtZW50KCkgOiAwOwogfQogCi12b2lkIFN0eWxlU2hlZXRJbnRlcm5hbDo6c3R5
bGVTaGVldENoYW5nZWQoKQotewotICAgIG1faGFzTXV0YXRlZCA9IHRydWU7Ci0KLSAgICBEb2N1
bWVudCogb3duZXJEb2N1bWVudCA9IHNpbmdsZU93bmVyRG9jdW1lbnQoKTsKLSAgICBpZiAoIW93
bmVyRG9jdW1lbnQpCi0gICAgICAgIHJldHVybjsKLSAgICBvd25lckRvY3VtZW50LT5zdHlsZVJl
c29sdmVyQ2hhbmdlZChEZWZlclJlY2FsY1N0eWxlKTsKLX0KLQogS1VSTCBTdHlsZVNoZWV0SW50
ZXJuYWw6OmNvbXBsZXRlVVJMKGNvbnN0IFN0cmluZyYgdXJsKSBjb25zdAogewogICAgIHJldHVy
biBDU1NQYXJzZXI6OmNvbXBsZXRlVVJMKG1fcGFyc2VyQ29udGV4dCwgdXJsKTsKQEAgLTQ3Myw2
ICs0NjIsMjAgQEAgdm9pZCBTdHlsZVNoZWV0SW50ZXJuYWw6OnVucmVnaXN0ZXJDbGllbgogICAg
IG1fY2xpZW50cy5yZW1vdmUocG9zaXRpb24pOwogfQogCit2b2lkIFN0eWxlU2hlZXRJbnRlcm5h
bDo6YWRkZWRUb01lbW9yeUNhY2hlKCkKK3sKKyAgICBBU1NFUlQoIW1faXNJbk1lbW9yeUNhY2hl
KTsKKyAgICBBU1NFUlQoaXNDYWNoZWFibGUoKSk7CisgICAgbV9pc0luTWVtb3J5Q2FjaGUgPSB0
cnVlOworfQorCit2b2lkIFN0eWxlU2hlZXRJbnRlcm5hbDo6cmVtb3ZlZEZyb21NZW1vcnlDYWNo
ZSgpCit7CisgICAgQVNTRVJUKG1faXNJbk1lbW9yeUNhY2hlKTsKKyAgICBBU1NFUlQoaXNDYWNo
ZWFibGUoKSk7CisgICAgbV9pc0luTWVtb3J5Q2FjaGUgPSBmYWxzZTsKK30KKwogUGFzc1JlZlB0
cjxDU1NTdHlsZVNoZWV0PiBDU1NTdHlsZVNoZWV0OjpjcmVhdGVJbmxpbmUoTm9kZSogb3duZXJO
b2RlLCBjb25zdCBLVVJMJiBiYXNlVVJMLCBjb25zdCBTdHJpbmcmIGVuY29kaW5nKQogewogICAg
IENTU1BhcnNlckNvbnRleHQgcGFyc2VyQ29udGV4dChvd25lck5vZGUtPmRvY3VtZW50KCksIGJh
c2VVUkwsIGVuY29kaW5nKTsKQEAgLTUxNCwxNCArNTE3LDU5IEBAIENTU1N0eWxlU2hlZXQ6On5D
U1NTdHlsZVNoZWV0KCkKICAgICBtX2ludGVybmFsLT51bnJlZ2lzdGVyQ2xpZW50KHRoaXMpOwog
fQogCit2b2lkIENTU1N0eWxlU2hlZXQ6OndpbGxNdXRhdGVSdWxlcygpCit7CisgICAgLy8gSWYg
d2UgYXJlIHRoZSBvbmx5IGNsaWVudCBpdCBpcyBzYWZlIHRvIG11dGF0ZS4KKyAgICBpZiAobV9p
bnRlcm5hbC0+aGFzT25lQ2xpZW50KCkgJiYgIW1faW50ZXJuYWwtPmlzSW5NZW1vcnlDYWNoZSgp
KSB7CisgICAgICAgIG1faW50ZXJuYWwtPnNldE11dGFibGUoKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICAvLyBPbmx5IGNhY2hlYWJsZSBzdHlsZXNoZWV0cyBzaG91bGQgaGF2ZSBtdWx0
aXBsZSBjbGllbnRzLgorICAgIEFTU0VSVChtX2ludGVybmFsLT5pc0NhY2hlYWJsZSgpKTsKKwor
ICAgIC8vIENvcHktb24td3JpdGUuCisgICAgbV9pbnRlcm5hbC0+dW5yZWdpc3RlckNsaWVudCh0
aGlzKTsKKyAgICBtX2ludGVybmFsID0gbV9pbnRlcm5hbC0+Y29weSgpOworICAgIG1faW50ZXJu
YWwtPnJlZ2lzdGVyQ2xpZW50KHRoaXMpOworCisgICAgbV9pbnRlcm5hbC0+c2V0TXV0YWJsZSgp
OworCisgICAgLy8gQW55IGV4aXN0aW5nIENTU09NIHdyYXBwZXJzIG5lZWQgdG8gYmUgY29ubmVj
dGVkIHRvIHRoZSBjb3BpZWQgY2hpbGQgcnVsZXMuCisgICAgcmVhdHRhY2hDaGlsZFJ1bGVDU1NP
TVdyYXBwZXJzKCk7Cit9CisKK3ZvaWQgQ1NTU3R5bGVTaGVldDo6ZGlkTXV0YXRlUnVsZXMoKQor
eworICAgIEFTU0VSVChtX2ludGVybmFsLT5pc011dGFibGUoKSk7CisgICAgQVNTRVJUKG1faW50
ZXJuYWwtPmhhc09uZUNsaWVudCgpKTsKKworICAgIGRpZE11dGF0ZSgpOworfQorCit2b2lkIENT
U1N0eWxlU2hlZXQ6OmRpZE11dGF0ZSgpCit7CisgICAgRG9jdW1lbnQqIG93bmVyID0gb3duZXJE
b2N1bWVudCgpOworICAgIGlmICghb3duZXIpCisgICAgICAgIHJldHVybjsKKyAgICBvd25lci0+
c3R5bGVSZXNvbHZlckNoYW5nZWQoRGVmZXJSZWNhbGNTdHlsZSk7Cit9CisKK3ZvaWQgQ1NTU3R5
bGVTaGVldDo6cmVhdHRhY2hDaGlsZFJ1bGVDU1NPTVdyYXBwZXJzKCkKK3sKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbV9jaGlsZFJ1bGVDU1NPTVdyYXBwZXJzLnNpemUoKTsgKytpKSB7
CisgICAgICAgIGlmICghbV9jaGlsZFJ1bGVDU1NPTVdyYXBwZXJzW2ldKQorICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgIG1fY2hpbGRSdWxlQ1NTT01XcmFwcGVyc1tpXS0+cmVhdHRhY2go
bV9pbnRlcm5hbC0+cnVsZUF0KGkpKTsKKyAgICB9Cit9CisKIHZvaWQgQ1NTU3R5bGVTaGVldDo6
c2V0RGlzYWJsZWQoYm9vbCBkaXNhYmxlZCkKIHsgCiAgICAgaWYgKGRpc2FibGVkID09IG1faXNE
aXNhYmxlZCkKICAgICAgICAgcmV0dXJuOwogICAgIG1faXNEaXNhYmxlZCA9IGRpc2FibGVkOwot
ICAgIERvY3VtZW50KiBvd25lciA9IG93bmVyRG9jdW1lbnQoKTsKLSAgICBpZiAob3duZXIpCi0g
ICAgICAgIG93bmVyLT5zdHlsZVJlc29sdmVyQ2hhbmdlZChEZWZlclJlY2FsY1N0eWxlKTsKKwor
ICAgIGRpZE11dGF0ZSgpOwogfQogCiB2b2lkIENTU1N0eWxlU2hlZXQ6OnNldE1lZGlhUXVlcmll
cyhQYXNzUmVmUHRyPE1lZGlhUXVlcnlTZXQ+IG1lZGlhUXVlcmllcykKQEAgLTU0NSw4ICs1OTMs
MTMgQEAgQ1NTUnVsZSogQ1NTU3R5bGVTaGVldDo6aXRlbSh1bnNpZ25lZCBpbgogICAgIEFTU0VS
VChtX2NoaWxkUnVsZUNTU09NV3JhcHBlcnMuc2l6ZSgpID09IHJ1bGVDb3VudCk7CiAgICAgCiAg
ICAgUmVmUHRyPENTU1J1bGU+JiBjc3NSdWxlID0gbV9jaGlsZFJ1bGVDU1NPTVdyYXBwZXJzW2lu
ZGV4XTsKLSAgICBpZiAoIWNzc1J1bGUpCi0gICAgICAgIGNzc1J1bGUgPSBtX2ludGVybmFsLT5j
cmVhdGVDaGlsZFJ1bGVDU1NPTVdyYXBwZXIoaW5kZXgsIHRoaXMpOworICAgIGlmICghY3NzUnVs
ZSkgeworICAgICAgICBpZiAoaW5kZXggPT0gMCAmJiBtX2ludGVybmFsLT5oYXNDaGFyc2V0UnVs
ZSgpKSB7CisgICAgICAgICAgICBBU1NFUlQoIW1faW50ZXJuYWwtPnJ1bGVBdCgwKSk7CisgICAg
ICAgICAgICBjc3NSdWxlID0gQ1NTQ2hhcnNldFJ1bGU6OmNyZWF0ZSh0aGlzLCBtX2ludGVybmFs
LT5lbmNvZGluZ0Zyb21DaGFyc2V0UnVsZSgpKTsKKyAgICAgICAgfQorICAgICAgICBjc3NSdWxl
ID0gbV9pbnRlcm5hbC0+cnVsZUF0KGluZGV4KS0+Y3JlYXRlQ1NTT01XcmFwcGVyKHRoaXMpOwor
ICAgIH0KICAgICByZXR1cm4gY3NzUnVsZS5nZXQoKTsKIH0KIApAQCAtNTg0LDYgKzYzNyw4IEBA
IHVuc2lnbmVkIENTU1N0eWxlU2hlZXQ6Omluc2VydFJ1bGUoY29uc3QKICAgICAgICAgZWMgPSBT
WU5UQVhfRVJSOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CisgICAgUnVsZU11dGF0aW9uIG11
dGF0aW9uKHRoaXMpOworCiAgICAgYm9vbCBzdWNjZXNzID0gbV9pbnRlcm5hbC0+d3JhcHBlcklu
c2VydFJ1bGUocnVsZSwgaW5kZXgpOwogICAgIGlmICghc3VjY2VzcykgewogICAgICAgICBlYyA9
IEhJRVJBUkNIWV9SRVFVRVNUX0VSUjsKQEAgLTU5MSw2ICs2NDYsNyBAQCB1bnNpZ25lZCBDU1NT
dHlsZVNoZWV0OjppbnNlcnRSdWxlKGNvbnN0CiAgICAgfSAgICAgICAgCiAgICAgaWYgKCFtX2No
aWxkUnVsZUNTU09NV3JhcHBlcnMuaXNFbXB0eSgpKQogICAgICAgICBtX2NoaWxkUnVsZUNTU09N
V3JhcHBlcnMuaW5zZXJ0KGluZGV4LCBSZWZQdHI8Q1NTUnVsZT4oKSk7CisKICAgICByZXR1cm4g
aW5kZXg7CiB9CiAKQEAgLTYwMyw2ICs2NTksOCBAQCB2b2lkIENTU1N0eWxlU2hlZXQ6OmRlbGV0
ZVJ1bGUodW5zaWduZWQgCiAgICAgICAgIGVjID0gSU5ERVhfU0laRV9FUlI7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CisgICAgUnVsZU11dGF0aW9uIG11dGF0aW9uKHRoaXMpOworCiAgICAgbV9p
bnRlcm5hbC0+d3JhcHBlckRlbGV0ZVJ1bGUoaW5kZXgpOwogCiAgICAgaWYgKCFtX2NoaWxkUnVs
ZUNTU09NV3JhcHBlcnMuaXNFbXB0eSgpKSB7CkBAIC02NjUsNCArNzIzLDI0IEBAIHZvaWQgQ1NT
U3R5bGVTaGVldDo6Y2xlYXJDaGlsZFJ1bGVDU1NPTVcKICAgICBtX2NoaWxkUnVsZUNTU09NV3Jh
cHBlcnMuY2xlYXIoKTsKIH0KIAorQ1NTU3R5bGVTaGVldDo6UnVsZU11dGF0aW9uOjpSdWxlTXV0
YXRpb24oQ1NTU3R5bGVTaGVldCogc2hlZXQpCisgICAgOiBtX3N0eWxlU2hlZXQoc2hlZXQpCit7
CisgICAgaWYgKG1fc3R5bGVTaGVldCkKKyAgICAgICAgbV9zdHlsZVNoZWV0LT53aWxsTXV0YXRl
UnVsZXMoKTsKK30KKworQ1NTU3R5bGVTaGVldDo6UnVsZU11dGF0aW9uOjpSdWxlTXV0YXRpb24o
Q1NTUnVsZSogcnVsZSkKKyAgICA6IG1fc3R5bGVTaGVldChydWxlID8gcnVsZS0+cGFyZW50U3R5
bGVTaGVldCgpIDogMCkKK3sKKyAgICBpZiAobV9zdHlsZVNoZWV0KQorICAgICAgICBtX3N0eWxl
U2hlZXQtPndpbGxNdXRhdGVSdWxlcygpOworfQorCitDU1NTdHlsZVNoZWV0OjpSdWxlTXV0YXRp
b246On5SdWxlTXV0YXRpb24oKQoreworICAgIGlmIChtX3N0eWxlU2hlZXQpCisgICAgICAgIG1f
c3R5bGVTaGVldC0+ZGlkTXV0YXRlUnVsZXMoKTsKK30KKwogfQpJbmRleDogU291cmNlL1dlYkNv
cmUvY3NzL0NTU1N0eWxlU2hlZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTU3R5bGVTaGVldC5oCShyZXZpc2lvbiAxMTU5NTkpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3Mv
Q1NTU3R5bGVTaGVldC5oCSh3b3JraW5nIGNvcHkpCkBAIC02NSw4ICs2NSw2IEBAIHB1YmxpYzoK
IAogICAgIGNvbnN0IEF0b21pY1N0cmluZyYgZGV0ZXJtaW5lTmFtZXNwYWNlKGNvbnN0IEF0b21p
Y1N0cmluZyYgcHJlZml4KTsKIAotICAgIHZvaWQgc3R5bGVTaGVldENoYW5nZWQoKTsKLQogICAg
IHZvaWQgcGFyc2VBdXRob3JTdHlsZVNoZWV0KGNvbnN0IENhY2hlZENTU1N0eWxlU2hlZXQqLCBj
b25zdCBTZWN1cml0eU9yaWdpbiopOwogICAgIGJvb2wgcGFyc2VTdHJpbmcoY29uc3QgU3RyaW5n
Jik7CiAgICAgYm9vbCBwYXJzZVN0cmluZ0F0TGluZShjb25zdCBTdHJpbmcmLCBpbnQgc3RhcnRM
aW5lTnVtYmVyKTsKQEAgLTEwMSw2ICs5OSw4IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgY2xlYXJS
dWxlcygpOwogCisgICAgYm9vbCBoYXNDaGFyc2V0UnVsZSgpIGNvbnN0IHsgcmV0dXJuICFtX2Vu
Y29kaW5nRnJvbUNoYXJzZXRSdWxlLmlzTnVsbCgpOyB9CisgICAgU3RyaW5nIGVuY29kaW5nRnJv
bUNoYXJzZXRSdWxlKCkgY29uc3QgeyByZXR1cm4gbV9lbmNvZGluZ0Zyb21DaGFyc2V0UnVsZTsg
fQogICAgIC8vIFJ1bGVzIG90aGVyIHRoYW4gQGNoYXJzZXQgYW5kIEBpbXBvcnQuCiAgICAgY29u
c3QgVmVjdG9yPFJlZlB0cjxTdHlsZVJ1bGVCYXNlPiA+JiBjaGlsZFJ1bGVzKCkgY29uc3QgeyBy
ZXR1cm4gbV9jaGlsZFJ1bGVzOyB9CiAgICAgY29uc3QgVmVjdG9yPFJlZlB0cjxTdHlsZVJ1bGVJ
bXBvcnQ+ID4mIGltcG9ydFJ1bGVzKCkgY29uc3QgeyByZXR1cm4gbV9pbXBvcnRSdWxlczsgfQpA
QCAtMTIwLDcgKzEyMCw4IEBAIHB1YmxpYzoKICAgICBjb25zdCBLVVJMJiBiYXNlVVJMKCkgY29u
c3QgeyByZXR1cm4gbV9wYXJzZXJDb250ZXh0LmJhc2VVUkw7IH0KIAogICAgIHVuc2lnbmVkIHJ1
bGVDb3VudCgpIGNvbnN0OwotICAgIAorICAgIFN0eWxlUnVsZUJhc2UqIHJ1bGVBdCh1bnNpZ25l
ZCBpbmRleCkgY29uc3Q7CisKICAgICBib29sIHVzZXNSZW1Vbml0cygpIGNvbnN0IHsgcmV0dXJu
IG1fdXNlc1JlbVVuaXRzOyB9CiAKICAgICB1bnNpZ25lZCBlc3RpbWF0ZWRTaXplSW5CeXRlcygp
IGNvbnN0OwpAQCAtMTI4LDE5ICsxMjksMjQgQEAgcHVibGljOgogICAgIGJvb2wgd3JhcHBlcklu
c2VydFJ1bGUoUGFzc1JlZlB0cjxTdHlsZVJ1bGVCYXNlPiwgdW5zaWduZWQgaW5kZXgpOwogICAg
IHZvaWQgd3JhcHBlckRlbGV0ZVJ1bGUodW5zaWduZWQgaW5kZXgpOwogCi0gICAgUGFzc1JlZlB0
cjxDU1NSdWxlPiBjcmVhdGVDaGlsZFJ1bGVDU1NPTVdyYXBwZXIodW5zaWduZWQgaW5kZXgsIENT
U1N0eWxlU2hlZXQqIHBhcmVudFdyYXBwZXIpOwotCiAgICAgUGFzc1JlZlB0cjxTdHlsZVNoZWV0
SW50ZXJuYWw+IGNvcHkoKSBjb25zdCB7IHJldHVybiBhZG9wdFJlZihuZXcgU3R5bGVTaGVldElu
dGVybmFsKCp0aGlzKSk7IH0KIAogICAgIHZvaWQgcmVnaXN0ZXJDbGllbnQoQ1NTU3R5bGVTaGVl
dCopOwogICAgIHZvaWQgdW5yZWdpc3RlckNsaWVudChDU1NTdHlsZVNoZWV0Kik7CisgICAgYm9v
bCBoYXNPbmVDbGllbnQoKSB7IHJldHVybiBtX2NsaWVudHMuc2l6ZSgpID09IDE7IH0KKworICAg
IGJvb2wgaXNNdXRhYmxlKCkgY29uc3QgeyByZXR1cm4gbV9pc011dGFibGU7IH0KKyAgICB2b2lk
IHNldE11dGFibGUoKSB7IG1faXNNdXRhYmxlID0gdHJ1ZTsgfQorCisgICAgYm9vbCBpc0luTWVt
b3J5Q2FjaGUoKSBjb25zdCB7IHJldHVybiBtX2lzSW5NZW1vcnlDYWNoZTsgfQorICAgIHZvaWQg
YWRkZWRUb01lbW9yeUNhY2hlKCk7CisgICAgdm9pZCByZW1vdmVkRnJvbU1lbW9yeUNhY2hlKCk7
CiAKIHByaXZhdGU6CiAgICAgU3R5bGVTaGVldEludGVybmFsKFN0eWxlUnVsZUltcG9ydCogb3du
ZXJSdWxlLCBjb25zdCBTdHJpbmcmIG9yaWdpbmFsVVJMLCBjb25zdCBLVVJMJiBiYXNlVVJMLCBj
b25zdCBDU1NQYXJzZXJDb250ZXh0Jik7CiAgICAgU3R5bGVTaGVldEludGVybmFsKGNvbnN0IFN0
eWxlU2hlZXRJbnRlcm5hbCYpOwogCiAgICAgdm9pZCBjbGVhckNoYXJzZXRSdWxlKCk7Ci0gICAg
Ym9vbCBoYXNDaGFyc2V0UnVsZSgpIGNvbnN0IHsgcmV0dXJuICFtX2VuY29kaW5nRnJvbUNoYXJz
ZXRSdWxlLmlzTnVsbCgpOyB9CiAKICAgICBTdHlsZVJ1bGVJbXBvcnQqIG1fb3duZXJSdWxlOwog
CkBAIC0xNTgsNyArMTY0LDggQEAgcHJpdmF0ZToKICAgICBib29sIG1faGFzU3ludGFjdGljYWxs
eVZhbGlkQ1NTSGVhZGVyIDogMTsKICAgICBib29sIG1fZGlkTG9hZEVycm9yT2NjdXIgOiAxOwog
ICAgIGJvb2wgbV91c2VzUmVtVW5pdHMgOiAxOwotICAgIGJvb2wgbV9oYXNNdXRhdGVkIDogMTsK
KyAgICBib29sIG1faXNNdXRhYmxlIDogMTsKKyAgICBib29sIG1faXNJbk1lbW9yeUNhY2hlIDog
MTsKICAgICAKICAgICBDU1NQYXJzZXJDb250ZXh0IG1fcGFyc2VyQ29udGV4dDsKIApAQCAtMjA3
LDEzICsyMTQsMjcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBpc0xvYWRpbmcoKSBjb25z
dCBPVkVSUklERSB7IHJldHVybiBtX2ludGVybmFsLT5pc0xvYWRpbmcoKTsgfQogICAgIAogICAg
IHZvaWQgY2xlYXJPd25lclJ1bGUoKSB7IG1fb3duZXJSdWxlID0gMDsgfQotICAgIHZvaWQgc3R5
bGVTaGVldENoYW5nZWQoKSB7IG1faW50ZXJuYWwtPnN0eWxlU2hlZXRDaGFuZ2VkKCk7IH0KICAg
ICBEb2N1bWVudCogb3duZXJEb2N1bWVudCgpIGNvbnN0OwogICAgIE1lZGlhUXVlcnlTZXQqIG1l
ZGlhUXVlcmllcygpIGNvbnN0IHsgcmV0dXJuIG1fbWVkaWFRdWVyaWVzLmdldCgpOyB9CiAgICAg
dm9pZCBzZXRNZWRpYVF1ZXJpZXMoUGFzc1JlZlB0cjxNZWRpYVF1ZXJ5U2V0Pik7CiAgICAgdm9p
ZCBzZXRUaXRsZShjb25zdCBTdHJpbmcmIHRpdGxlKSB7IG1fdGl0bGUgPSB0aXRsZTsgfQorCisg
ICAgY2xhc3MgUnVsZU11dGF0aW9uIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFJ1bGVNdXRhdGlv
bihDU1NTdHlsZVNoZWV0Kik7CisgICAgICAgIFJ1bGVNdXRhdGlvbihDU1NSdWxlKik7CisgICAg
ICAgIH5SdWxlTXV0YXRpb24oKTsKKworICAgIHByaXZhdGU6CisgICAgICAgIENTU1N0eWxlU2hl
ZXQqIG1fc3R5bGVTaGVldDsKKyAgICB9OworCisgICAgdm9pZCB3aWxsTXV0YXRlUnVsZXMoKTsK
KyAgICB2b2lkIGRpZE11dGF0ZVJ1bGVzKCk7CisgICAgdm9pZCBkaWRNdXRhdGUoKTsKICAgICAK
ICAgICB2b2lkIGNsZWFyQ2hpbGRSdWxlQ1NTT01XcmFwcGVycygpOworICAgIHZvaWQgcmVhdHRh
Y2hDaGlsZFJ1bGVDU1NPTVdyYXBwZXJzKCk7CiAKICAgICBTdHlsZVNoZWV0SW50ZXJuYWwqIGlu
dGVybmFsKCkgY29uc3QgeyByZXR1cm4gbV9pbnRlcm5hbC5nZXQoKTsgfQogCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9jc3MvTWVkaWFMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9jc3MvTWVkaWFMaXN0LmNwcAkocmV2aXNpb24gMTE1OTU5KQorKysgU291cmNlL1dlYkNvcmUv
Y3NzL01lZGlhTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzMCwxMiArMjMwLDE1IEBAIE1l
ZGlhTGlzdDo6fk1lZGlhTGlzdCgpCiAKIHZvaWQgTWVkaWFMaXN0OjpzZXRNZWRpYVRleHQoY29u
c3QgU3RyaW5nJiB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CisgICAgQ1NTU3R5bGVTaGVl
dDo6UnVsZU11dGF0aW9uIG11dGF0aW9uKG1fcGFyZW50UnVsZSk7CisKICAgICBib29sIHN1Y2Nl
c3MgPSBtX21lZGlhUXVlcmllcy0+cGFyc2UodmFsdWUpOwogICAgIGlmICghc3VjY2Vzcykgewog
ICAgICAgICBlYyA9IFNZTlRBWF9FUlI7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgbm90
aWZ5Q2hhbmdlZCgpOworICAgIGlmIChtX3BhcmVudFN0eWxlU2hlZXQpCisgICAgICAgIG1fcGFy
ZW50U3R5bGVTaGVldC0+ZGlkTXV0YXRlKCk7CiB9CiAKIFN0cmluZyBNZWRpYUxpc3Q6Oml0ZW0o
dW5zaWduZWQgaW5kZXgpIGNvbnN0CkBAIC0yNDgsMzEgKzI1MSwzNSBAQCBTdHJpbmcgTWVkaWFM
aXN0OjppdGVtKHVuc2lnbmVkIGluZGV4KSBjCiAKIHZvaWQgTWVkaWFMaXN0OjpkZWxldGVNZWRp
dW0oY29uc3QgU3RyaW5nJiBtZWRpdW0sIEV4Y2VwdGlvbkNvZGUmIGVjKQogeworICAgIENTU1N0
eWxlU2hlZXQ6OlJ1bGVNdXRhdGlvbiBtdXRhdGlvbihtX3BhcmVudFJ1bGUpOworCiAgICAgYm9v
bCBzdWNjZXNzID0gbV9tZWRpYVF1ZXJpZXMtPnJlbW92ZShtZWRpdW0pOwogICAgIGlmICghc3Vj
Y2VzcykgewogICAgICAgICBlYyA9IE5PVF9GT1VORF9FUlI7CiAgICAgICAgIHJldHVybjsKICAg
ICB9Ci0gICAgbm90aWZ5Q2hhbmdlZCgpOworICAgIGlmIChtX3BhcmVudFN0eWxlU2hlZXQpCisg
ICAgICAgIG1fcGFyZW50U3R5bGVTaGVldC0+ZGlkTXV0YXRlKCk7CiB9CiAKIHZvaWQgTWVkaWFM
aXN0OjphcHBlbmRNZWRpdW0oY29uc3QgU3RyaW5nJiBtZWRpdW0sIEV4Y2VwdGlvbkNvZGUmIGVj
KQogeworICAgIENTU1N0eWxlU2hlZXQ6OlJ1bGVNdXRhdGlvbiBtdXRhdGlvbihtX3BhcmVudFJ1
bGUpOworCiAgICAgYm9vbCBzdWNjZXNzID0gbV9tZWRpYVF1ZXJpZXMtPmFkZChtZWRpdW0pOwog
ICAgIGlmICghc3VjY2VzcykgewogICAgICAgICAvLyBGSVhNRTogU2hvdWxkIHRoaXMgcmVhbGx5
IGJlIElOVkFMSURfQ0hBUkFDVEVSX0VSUj8KICAgICAgICAgZWMgPSBJTlZBTElEX0NIQVJBQ1RF
Ul9FUlI7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgbm90aWZ5Q2hhbmdlZCgpOworICAg
IGlmIChtX3BhcmVudFN0eWxlU2hlZXQpCisgICAgICAgIG1fcGFyZW50U3R5bGVTaGVldC0+ZGlk
TXV0YXRlKCk7CiB9CiAKLXZvaWQgTWVkaWFMaXN0Ojpub3RpZnlDaGFuZ2VkKCkKK3ZvaWQgTWVk
aWFMaXN0OjpyZWF0dGFjaChNZWRpYVF1ZXJ5U2V0KiBtZWRpYVF1ZXJpZXMpCiB7Ci0gICAgQ1NT
U3R5bGVTaGVldCogcGFyZW50U3R5bGVTaGVldCA9IG1fcGFyZW50UnVsZSA/IG1fcGFyZW50UnVs
ZS0+cGFyZW50U3R5bGVTaGVldCgpIDogbV9wYXJlbnRTdHlsZVNoZWV0OwotICAgIGlmICghcGFy
ZW50U3R5bGVTaGVldCkKLSAgICAgICAgcmV0dXJuOwotICAgIHBhcmVudFN0eWxlU2hlZXQtPnN0
eWxlU2hlZXRDaGFuZ2VkKCk7CisgICAgQVNTRVJUKG1lZGlhUXVlcmllcyk7CisgICAgbV9tZWRp
YVF1ZXJpZXMgPSBtZWRpYVF1ZXJpZXM7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nz
cy9NZWRpYUxpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFMaXN0
LmgJKHJldmlzaW9uIDExNTk1OSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYUxpc3QuaAko
d29ya2luZyBjb3B5KQpAQCAtMTA0LDEzICsxMDQsMTMgQEAgcHVibGljOgogICAgIHZvaWQgY2xl
YXJQYXJlbnRSdWxlKCkgeyBBU1NFUlQobV9wYXJlbnRSdWxlKTsgbV9wYXJlbnRSdWxlID0gMDsg
fQogICAgIGNvbnN0IE1lZGlhUXVlcnlTZXQqIHF1ZXJpZXMoKSBjb25zdCB7IHJldHVybiBtX21l
ZGlhUXVlcmllcy5nZXQoKTsgfQogCisgICAgdm9pZCByZWF0dGFjaChNZWRpYVF1ZXJ5U2V0Kik7
CisKIHByaXZhdGU6CiAgICAgTWVkaWFMaXN0KCk7CiAgICAgTWVkaWFMaXN0KE1lZGlhUXVlcnlT
ZXQqLCBDU1NTdHlsZVNoZWV0KiBwYXJlbnRTaGVldCk7CiAgICAgTWVkaWFMaXN0KE1lZGlhUXVl
cnlTZXQqLCBDU1NSdWxlKiBwYXJlbnRSdWxlKTsKIAotICAgIHZvaWQgbm90aWZ5Q2hhbmdlZCgp
OwotCiAgICAgUmVmUHRyPE1lZGlhUXVlcnlTZXQ+IG1fbWVkaWFRdWVyaWVzOwogICAgIENTU1N0
eWxlU2hlZXQqIG1fcGFyZW50U3R5bGVTaGVldDsKICAgICBDU1NSdWxlKiBtX3BhcmVudFJ1bGU7
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9u
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvUHJvcGVydHlTZXRDU1NTdHls
ZURlY2xhcmF0aW9uLmNwcAkocmV2aXNpb24gMTE1OTU5KQorKysgU291cmNlL1dlYkNvcmUvY3Nz
L1Byb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1
MSwxMSArMTUxLDE0IEBAIHZvaWQgUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uOjpzZXQK
ICNpZiBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQogICAgIFN0eWxlQXR0cmlidXRlTXV0YXRp
b25TY29wZSBtdXRhdGlvblNjb3BlKHRoaXMpOwogI2VuZGlmCisgICAgd2lsbE11dGF0ZSgpOwor
CiAgICAgZWMgPSAwOwogICAgIC8vIEZJWE1FOiBEZXRlY3Qgc3ludGF4IGVycm9ycyBhbmQgc2V0
IGVjLgogICAgIG1fcHJvcGVydHlTZXQtPnBhcnNlRGVjbGFyYXRpb24odGV4dCwgY29udGV4dFN0
eWxlU2hlZXQoKSk7CiAKLSAgICBkaWRNdXRhdGUoKTsKKyAgICBkaWRNdXRhdGUodHJ1ZSk7CisK
ICNpZiBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQogICAgIG11dGF0aW9uU2NvcGUuZW5xdWV1
ZU11dGF0aW9uUmVjb3JkKCk7ICAgIAogI2VuZGlmCkBAIC0yMTIsMTMgKzIxNSwxOSBAQCB2b2lk
IFByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbjo6c2V0CiAgICAgQ1NTUHJvcGVydHlJRCBw
cm9wZXJ0eUlEID0gY3NzUHJvcGVydHlJRChwcm9wZXJ0eU5hbWUpOwogICAgIGlmICghcHJvcGVy
dHlJRCkKICAgICAgICAgcmV0dXJuOworCiAgICAgYm9vbCBpbXBvcnRhbnQgPSBwcmlvcml0eS5m
aW5kKCJpbXBvcnRhbnQiLCAwLCBmYWxzZSkgIT0gbm90Rm91bmQ7CisKKyAgICB3aWxsTXV0YXRl
KCk7CisKICAgICBlYyA9IDA7CiAgICAgYm9vbCBjaGFuZ2VkID0gbV9wcm9wZXJ0eVNldC0+c2V0
UHJvcGVydHkocHJvcGVydHlJRCwgdmFsdWUsIGltcG9ydGFudCwgY29udGV4dFN0eWxlU2hlZXQo
KSk7CisKKyAgICBkaWRNdXRhdGUoY2hhbmdlZCk7CisKICAgICBpZiAoY2hhbmdlZCkgewogICAg
ICAgICAvLyBDU1MgRE9NIHJlcXVpcmVzIHJhaXNpbmcgU1lOVEFYX0VSUiBvZiBwYXJzaW5nIGZh
aWxlZCwgYnV0IHRoaXMgaXMgdG9vIGRhbmdlcm91cyBmb3IgY29tcGF0aWJpbGl0eSwKICAgICAg
ICAgLy8gc2VlIDxodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD03Mjk2Pi4K
LSAgICAgICAgZGlkTXV0YXRlKCk7CiAjaWYgRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykKICAg
ICAgICAgbXV0YXRpb25TY29wZS5lbnF1ZXVlTXV0YXRpb25SZWNvcmQoKTsKICNlbmRpZgpAQCAt
MjMzLDExICsyNDIsMTYgQEAgU3RyaW5nIFByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbjo6
cgogICAgIENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCA9IGNzc1Byb3BlcnR5SUQocHJvcGVydHlO
YW1lKTsKICAgICBpZiAoIXByb3BlcnR5SUQpCiAgICAgICAgIHJldHVybiBTdHJpbmcoKTsKKwor
ICAgIHdpbGxNdXRhdGUoKTsKKwogICAgIGVjID0gMDsKICAgICBTdHJpbmcgcmVzdWx0OwogICAg
IGJvb2wgY2hhbmdlcyA9IG1fcHJvcGVydHlTZXQtPnJlbW92ZVByb3BlcnR5KHByb3BlcnR5SUQs
ICZyZXN1bHQpOworCisgICAgZGlkTXV0YXRlKGNoYW5nZXMpOworCiAgICAgaWYgKGNoYW5nZXMp
IHsKLSAgICAgICAgZGlkTXV0YXRlKCk7CiAjaWYgRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVSUykK
ICAgICAgICAgbXV0YXRpb25TY29wZS5lbnF1ZXVlTXV0YXRpb25SZWNvcmQoKTsKICNlbmRpZgpA
QCAtMjYwLDIyICsyNzQsMjAgQEAgdm9pZCBQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb246
OnNldAogI2lmIEVOQUJMRShNVVRBVElPTl9PQlNFUlZFUlMpCiAgICAgU3R5bGVBdHRyaWJ1dGVN
dXRhdGlvblNjb3BlIG11dGF0aW9uU2NvcGUodGhpcyk7CiAjZW5kaWYKKyAgICB3aWxsTXV0YXRl
KCk7CisKICAgICBlYyA9IDA7CiAgICAgYm9vbCBjaGFuZ2VkID0gbV9wcm9wZXJ0eVNldC0+c2V0
UHJvcGVydHkocHJvcGVydHlJRCwgdmFsdWUsIGltcG9ydGFudCwgY29udGV4dFN0eWxlU2hlZXQo
KSk7CisKKyAgICBkaWRNdXRhdGUoY2hhbmdlZCk7CisKICAgICBpZiAoY2hhbmdlZCkgewotICAg
ICAgICBkaWRNdXRhdGUoKTsKICNpZiBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQogICAgICAg
ICBtdXRhdGlvblNjb3BlLmVucXVldWVNdXRhdGlvblJlY29yZCgpOwogI2VuZGlmCiAgICAgfQog
fQogCi12b2lkIFByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbjo6ZGlkTXV0YXRlKCkKLXsK
LSAgICBtX2Nzc29tQ1NTVmFsdWVDbG9uZXMuY2xlYXIoKTsKLSAgICBzZXROZWVkc1N0eWxlUmVj
YWxjKCk7Ci19Ci0KIENTU1ZhbHVlKiBQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb246OmNs
b25lQW5kQ2FjaGVGb3JDU1NPTShDU1NWYWx1ZSogaW50ZXJuYWxWYWx1ZSkKIHsKICAgICBpZiAo
IWludGVybmFsVmFsdWUpCkBAIC0zMzgsMTIgKzM1MCwyMCBAQCB2b2lkIFN0eWxlUnVsZUNTU1N0
eWxlRGVjbGFyYXRpb246OmRlcmVmCiAgICAgICAgIGRlbGV0ZSB0aGlzOwogfQogCi12b2lkIFN0
eWxlUnVsZUNTU1N0eWxlRGVjbGFyYXRpb246OnNldE5lZWRzU3R5bGVSZWNhbGMoKQordm9pZCBT
dHlsZVJ1bGVDU1NTdHlsZURlY2xhcmF0aW9uOjp3aWxsTXV0YXRlKCkKIHsKLSAgICBpZiAoQ1NT
U3R5bGVTaGVldCogc3R5bGVTaGVldCA9IHBhcmVudFN0eWxlU2hlZXQoKSkgewotICAgICAgICBp
ZiAoRG9jdW1lbnQqIGRvY3VtZW50ID0gc3R5bGVTaGVldC0+b3duZXJEb2N1bWVudCgpKQotICAg
ICAgICAgICAgZG9jdW1lbnQtPnN0eWxlUmVzb2x2ZXJDaGFuZ2VkKERlZmVyUmVjYWxjU3R5bGUp
OwotICAgIH0KKyAgICBpZiAobV9wYXJlbnRSdWxlICYmIG1fcGFyZW50UnVsZS0+cGFyZW50U3R5
bGVTaGVldCgpKQorICAgICAgICBtX3BhcmVudFJ1bGUtPnBhcmVudFN0eWxlU2hlZXQoKS0+d2ls
bE11dGF0ZVJ1bGVzKCk7Cit9CisKK3ZvaWQgU3R5bGVSdWxlQ1NTU3R5bGVEZWNsYXJhdGlvbjo6
ZGlkTXV0YXRlKGJvb2wgY2hhbmdlcykKK3sKKyAgICBpZiAoY2hhbmdlcykKKyAgICAgICAgbV9j
c3NvbUNTU1ZhbHVlQ2xvbmVzLmNsZWFyKCk7CisKKyAgICAvLyBTdHlsZSBzaGVldCBtdXRhdGlv
biBuZWVkcyB0byBiZSBzaWduYWxlZCBldmVuIGlmIHRoZSBjaGFuZ2UgZmFpbGVkLiB3aWxsTXV0
YXRlUnVsZXMvZGlkTXV0YXRlUnVsZXMgbXVzdCBwYWlyLgorICAgIGlmIChtX3BhcmVudFJ1bGUg
JiYgbV9wYXJlbnRSdWxlLT5wYXJlbnRTdHlsZVNoZWV0KCkpCisgICAgICAgIG1fcGFyZW50UnVs
ZS0+cGFyZW50U3R5bGVTaGVldCgpLT5kaWRNdXRhdGVSdWxlcygpOwogfQogCiBDU1NTdHlsZVNo
ZWV0KiBTdHlsZVJ1bGVDU1NTdHlsZURlY2xhcmF0aW9uOjpwYXJlbnRTdHlsZVNoZWV0KCkgY29u
c3QKQEAgLTM1MSwxNCArMzcxLDI2IEBAIENTU1N0eWxlU2hlZXQqIFN0eWxlUnVsZUNTU1N0eWxl
RGVjbGFyYXQKICAgICByZXR1cm4gbV9wYXJlbnRSdWxlID8gbV9wYXJlbnRSdWxlLT5wYXJlbnRT
dHlsZVNoZWV0KCkgOiAwOwogfQogCi12b2lkIElubGluZUNTU1N0eWxlRGVjbGFyYXRpb246OnNl
dE5lZWRzU3R5bGVSZWNhbGMoKQordm9pZCBTdHlsZVJ1bGVDU1NTdHlsZURlY2xhcmF0aW9uOjpy
ZWF0dGFjaChTdHlsZVByb3BlcnR5U2V0KiBwcm9wZXJ0eVNldCkKK3sKKyAgICBBU1NFUlQocHJv
cGVydHlTZXQpOworICAgIG1fcHJvcGVydHlTZXQtPmRlcmVmKCk7CisgICAgbV9wcm9wZXJ0eVNl
dCA9IHByb3BlcnR5U2V0OworICAgIG1fcHJvcGVydHlTZXQtPnJlZigpOworfQorCit2b2lkIElu
bGluZUNTU1N0eWxlRGVjbGFyYXRpb246OmRpZE11dGF0ZShib29sIGNoYW5nZXMpCiB7CisgICAg
aWYgKCFjaGFuZ2VzKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2Nzc29tQ1NTVmFsdWVDbG9u
ZXMuY2xlYXIoKTsKKwogICAgIGlmICghbV9wYXJlbnRFbGVtZW50KQogICAgICAgICByZXR1cm47
CiAgICAgbV9wYXJlbnRFbGVtZW50LT5zZXROZWVkc1N0eWxlUmVjYWxjKElubGluZVN0eWxlQ2hh
bmdlKTsKICAgICBtX3BhcmVudEVsZW1lbnQtPmludmFsaWRhdGVTdHlsZUF0dHJpYnV0ZSgpOwog
ICAgIFN0eWxlQXR0cmlidXRlTXV0YXRpb25TY29wZSh0aGlzKS5kaWRJbnZhbGlkYXRlU3R5bGVB
dHRyKCk7Ci0gICAgcmV0dXJuOwogfQogCiBDU1NTdHlsZVNoZWV0KiBJbmxpbmVDU1NTdHlsZURl
Y2xhcmF0aW9uOjpwYXJlbnRTdHlsZVNoZWV0KCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3Jl
L2Nzcy9Qcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb24uaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9jc3MvUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uLmgJKHJldmlzaW9u
IDExNTk1OSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9Qcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFy
YXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNjgsOSArNjgsOSBAQCBwcml2YXRlOgogICAgIHZp
cnR1YWwgYm9vbCBjc3NQcm9wZXJ0eU1hdGNoZXMoY29uc3QgQ1NTUHJvcGVydHkqKSBjb25zdCBP
VkVSUklERTsKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8U3R5bGVQcm9wZXJ0eVNldD4gY29weSgp
IGNvbnN0IE9WRVJSSURFOwogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxTdHlsZVByb3BlcnR5U2V0
PiBtYWtlTXV0YWJsZSgpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc1N0eWxl
UmVjYWxjKCkgeyB9Ci0gICAgCi0gICAgdm9pZCBkaWRNdXRhdGUoKTsKKworICAgIHZpcnR1YWwg
dm9pZCB3aWxsTXV0YXRlKCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGRpZE11dGF0ZShib29sKSB7
IH0KICAgICBDU1NWYWx1ZSogY2xvbmVBbmRDYWNoZUZvckNTU09NKENTU1ZhbHVlKik7CiAgICAg
CiBwcm90ZWN0ZWQ6CkBAIC05MSw2ICs5MSw4IEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQg
cmVmKCkgT1ZFUlJJREU7CiAgICAgdmlydHVhbCB2b2lkIGRlcmVmKCkgT1ZFUlJJREU7CiAKKyAg
ICB2b2lkIHJlYXR0YWNoKFN0eWxlUHJvcGVydHlTZXQqKTsKKwogcHJpdmF0ZToKICAgICBTdHls
ZVJ1bGVDU1NTdHlsZURlY2xhcmF0aW9uKFN0eWxlUHJvcGVydHlTZXQqLCBDU1NSdWxlKik7CiAg
ICAgdmlydHVhbCB+U3R5bGVSdWxlQ1NTU3R5bGVEZWNsYXJhdGlvbigpOwpAQCAtOTgsOCArMTAw
LDEwIEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBDU1NTdHlsZVNoZWV0KiBwYXJlbnRTdHlsZVNo
ZWV0KCkgY29uc3QgT1ZFUlJJREU7CiAKICAgICB2aXJ0dWFsIENTU1J1bGUqIHBhcmVudFJ1bGUo
KSBjb25zdCBPVkVSUklERSB7IHJldHVybiBtX3BhcmVudFJ1bGU7ICB9Ci0gICAgdmlydHVhbCB2
b2lkIHNldE5lZWRzU3R5bGVSZWNhbGMoKSBPVkVSUklERTsKLSAgICAKKworICAgIHZpcnR1YWwg
dm9pZCB3aWxsTXV0YXRlKCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGRpZE11dGF0ZShi
b29sIGNoYW5nZXMpIE9WRVJSSURFOworCiAgICAgdW5zaWduZWQgbV9yZWZDb3VudDsKICAgICBD
U1NSdWxlKiBtX3BhcmVudFJ1bGU7CiB9OwpAQCAtMTE3LDcgKzEyMSw4IEBAIHByaXZhdGU6CiAg
ICAgdmlydHVhbCBDU1NTdHlsZVNoZWV0KiBwYXJlbnRTdHlsZVNoZWV0KCkgY29uc3QgT1ZFUlJJ
REU7CiAgICAgdmlydHVhbCBTdHlsZWRFbGVtZW50KiBwYXJlbnRFbGVtZW50KCkgY29uc3QgT1ZF
UlJJREUgeyByZXR1cm4gbV9wYXJlbnRFbGVtZW50OyB9CiAgICAgdmlydHVhbCB2b2lkIGNsZWFy
UGFyZW50RWxlbWVudCgpIE9WRVJSSURFIHsgbV9wYXJlbnRFbGVtZW50ID0gMDsgfQotICAgIHZp
cnR1YWwgdm9pZCBzZXROZWVkc1N0eWxlUmVjYWxjKCkgT1ZFUlJJREU7CisKKyAgICB2aXJ0dWFs
IHZvaWQgZGlkTXV0YXRlKGJvb2wgY2hhbmdlcykgT1ZFUlJJREU7CiAgICAgCiAgICAgU3R5bGVk
RWxlbWVudCogbV9wYXJlbnRFbGVtZW50OwogfTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9X
ZWJLaXRDU1NLZXlmcmFtZXNSdWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9j
c3MvV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZS5jcHAJKHJldmlzaW9uIDExNTk1OSkKKysrIFNvdXJj
ZS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NLZXlmcmFtZXNSdWxlLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMTA0LDEyICsxMDQsOSBAQCBXZWJLaXRDU1NLZXlmcmFtZXNSdWxlOjp+V2ViS2l0Q1NTS2V5
ZnJhCiAKIHZvaWQgV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZTo6c2V0TmFtZShjb25zdCBTdHJpbmcm
IG5hbWUpCiB7Ci0gICAgbV9rZXlmcmFtZXNSdWxlLT5zZXROYW1lKG5hbWUpOworICAgIENTU1N0
eWxlU2hlZXQ6OlJ1bGVNdXRhdGlvbiBtdXRhdGlvbih0aGlzKTsKIAotICAgIC8vIFNpbmNlIHRo
ZSBuYW1lIGlzIHVzZWQgaW4gdGhlIGtleWZyYW1lIG1hcCBsaXN0IGluIFN0eWxlUmVzb2x2ZXIs
IHdlIG5lZWQKLSAgICAvLyB0byByZWNvbXB1dGUgdGhlIHN0eWxlIHNoZWV0IHRvIGdldCB0aGUg
dXBkYXRlZCBuYW1lLgotICAgIGlmIChDU1NTdHlsZVNoZWV0KiBzdHlsZVNoZWV0ID0gcGFyZW50
U3R5bGVTaGVldCgpKQotICAgICAgICBzdHlsZVNoZWV0LT5zdHlsZVNoZWV0Q2hhbmdlZCgpOwor
ICAgIG1fa2V5ZnJhbWVzUnVsZS0+c2V0TmFtZShuYW1lKTsKIH0KIAogdm9pZCBXZWJLaXRDU1NL
ZXlmcmFtZXNSdWxlOjppbnNlcnRSdWxlKGNvbnN0IFN0cmluZyYgcnVsZVRleHQpCkBAIC0xMjIs
NiArMTE5LDggQEAgdm9pZCBXZWJLaXRDU1NLZXlmcmFtZXNSdWxlOjppbnNlcnRSdWxlKAogICAg
IGlmICgha2V5ZnJhbWUpCiAgICAgICAgIHJldHVybjsKIAorICAgIENTU1N0eWxlU2hlZXQ6OlJ1
bGVNdXRhdGlvbiBtdXRhdGlvbih0aGlzKTsKKwogICAgIG1fa2V5ZnJhbWVzUnVsZS0+d3JhcHBl
ckFwcGVuZEtleWZyYW1lKGtleWZyYW1lKTsKIAogICAgIG1fY2hpbGRSdWxlQ1NTT01XcmFwcGVy
cy5ncm93KGxlbmd0aCgpKTsKQEAgLTEzNSw2ICsxMzQsOCBAQCB2b2lkIFdlYktpdENTU0tleWZy
YW1lc1J1bGU6OmRlbGV0ZVJ1bGUoCiAgICAgaWYgKGkgPCAwKQogICAgICAgICByZXR1cm47CiAK
KyAgICBDU1NTdHlsZVNoZWV0OjpSdWxlTXV0YXRpb24gbXV0YXRpb24odGhpcyk7CisKICAgICBt
X2tleWZyYW1lc1J1bGUtPndyYXBwZXJSZW1vdmVLZXlmcmFtZShpKTsKIAogICAgIGlmIChtX2No
aWxkUnVsZUNTU09NV3JhcHBlcnNbaV0pCkBAIC0xOTAsNCArMTkxLDEwIEBAIENTU1J1bGVMaXN0
KiBXZWJLaXRDU1NLZXlmcmFtZXNSdWxlOjpjc3MKICAgICByZXR1cm4gbV9ydWxlTGlzdENTU09N
V3JhcHBlci5nZXQoKTsKIH0KIAordm9pZCBXZWJLaXRDU1NLZXlmcmFtZXNSdWxlOjpyZWF0dGFj
aChTdHlsZVJ1bGVLZXlmcmFtZXMqIHJ1bGUpCit7CisgICAgQVNTRVJUKHJ1bGUpOworICAgIG1f
a2V5ZnJhbWVzUnVsZSA9IHJ1bGU7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NLZXlmcmFtZXNSdWxlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvY3NzL1dlYktpdENTU0tleWZyYW1lc1J1bGUuaAkocmV2aXNpb24g
MTE1OTU5KQorKysgU291cmNlL1dlYkNvcmUvY3NzL1dlYktpdENTU0tleWZyYW1lc1J1bGUuaAko
d29ya2luZyBjb3B5KQpAQCAtODcsNiArODcsOCBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgbGVu
Z3RoKCkgY29uc3Q7CiAgICAgV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlKiBpdGVtKHVuc2lnbmVkIGlu
ZGV4KSBjb25zdDsKIAorICAgIHZvaWQgcmVhdHRhY2goU3R5bGVSdWxlS2V5ZnJhbWVzKik7CisK
IHByaXZhdGU6CiAgICAgV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZShTdHlsZVJ1bGVLZXlmcmFtZXMq
LCBDU1NTdHlsZVNoZWV0KiBwYXJlbnQpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvV2Vi
S2l0Q1NTUmVnaW9uUnVsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL1dl
YktpdENTU1JlZ2lvblJ1bGUuY3BwCShyZXZpc2lvbiAxMTU5NTkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9jc3MvV2ViS2l0Q1NTUmVnaW9uUnVsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk2LDUgKzk2
LDE0IEBAIENTU1J1bGVMaXN0KiBXZWJLaXRDU1NSZWdpb25SdWxlOjpjc3NSdWwKICAgICByZXR1
cm4gbV9ydWxlTGlzdENTU09NV3JhcHBlci5nZXQoKTsKIH0KIAordm9pZCBXZWJLaXRDU1NSZWdp
b25SdWxlOjpyZWF0dGFjaChTdHlsZVJ1bGVSZWdpb24qIHJ1bGUpCit7CisgICAgQVNTRVJUKHJ1
bGUpOworICAgIG1fcmVnaW9uUnVsZSA9IHJ1bGU7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IG1fY2hpbGRSdWxlQ1NTT01XcmFwcGVycy5zaXplKCk7ICsraSkgeworICAgICAgICBpZiAo
bV9jaGlsZFJ1bGVDU1NPTVdyYXBwZXJzW2ldKQorICAgICAgICAgICAgbV9jaGlsZFJ1bGVDU1NP
TVdyYXBwZXJzW2ldLT5yZWF0dGFjaChtX3JlZ2lvblJ1bGUtPmNoaWxkUnVsZXMoKVtpXS5nZXQo
KSk7CisgICAgfQorfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9jc3MvV2ViS2l0Q1NTUmVnaW9uUnVsZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL2Nzcy9XZWJLaXRDU1NSZWdpb25SdWxlLmgJKHJldmlzaW9uIDExNTk1OSkKKysrIFNvdXJj
ZS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NSZWdpb25SdWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTUz
LDYgKzUzLDggQEAgcHVibGljOgogICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0OwogICAgIENT
U1J1bGUqIGl0ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0OwogCisgICAgdm9pZCByZWF0dGFjaChT
dHlsZVJ1bGVSZWdpb24qKTsKKwogcHJpdmF0ZToKICAgICBXZWJLaXRDU1NSZWdpb25SdWxlKFN0
eWxlUnVsZVJlZ2lvbiosIENTU1N0eWxlU2hlZXQqIHBhcmVudCk7CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHAJKHJldmlzaW9u
IDExNTk1OSkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzE4LDEwICs3MTgsMTAgQEAgU3RyaW5nIEluc3BlY3Rv
clN0eWxlU2hlZXQ6OmZpbmFsVVJMKCkgYwogCiB2b2lkIEluc3BlY3RvclN0eWxlU2hlZXQ6OnJl
cGFyc2VTdHlsZVNoZWV0KGNvbnN0IFN0cmluZyYgdGV4dCkKIHsKKyAgICBDU1NTdHlsZVNoZWV0
OjpSdWxlTXV0YXRpb24gbXV0YXRpb24obV9wYWdlU3R5bGVTaGVldC5nZXQoKSk7CiAgICAgbV9w
YWdlU3R5bGVTaGVldC0+aW50ZXJuYWwoKS0+Y2xlYXJSdWxlcygpOwogICAgIG1fcGFnZVN0eWxl
U2hlZXQtPmludGVybmFsKCktPnBhcnNlU3RyaW5nKHRleHQpOwogICAgIG1fcGFnZVN0eWxlU2hl
ZXQtPmNsZWFyQ2hpbGRSdWxlQ1NTT01XcmFwcGVycygpOwotICAgIG1fcGFnZVN0eWxlU2hlZXQt
PnN0eWxlU2hlZXRDaGFuZ2VkKCk7CiAgICAgbV9pbnNwZWN0b3JTdHlsZXMuY2xlYXIoKTsKICAg
ICBmaXJlU3R5bGVTaGVldENoYW5nZWQoKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2xvYWRl
ci9jYWNoZS9DYWNoZWRDU1NTdHlsZVNoZWV0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkQ1NTU3R5bGVTaGVldC5jcHAJKHJldmlzaW9uIDExNTk1
OSkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRDU1NTdHlsZVNoZWV0LmNw
cAkod29ya2luZyBjb3B5KQpAQCAtNTAsNiArNTAsOCBAQCBDYWNoZWRDU1NTdHlsZVNoZWV0OjpD
YWNoZWRDU1NTdHlsZVNoZWV0CiAKIENhY2hlZENTU1N0eWxlU2hlZXQ6On5DYWNoZWRDU1NTdHls
ZVNoZWV0KCkKIHsKKyAgICBpZiAobV9wYXJzZWRTdHlsZVNoZWV0Q2FjaGUpCisgICAgICAgIG1f
cGFyc2VkU3R5bGVTaGVldENhY2hlLT5yZW1vdmVkRnJvbU1lbW9yeUNhY2hlKCk7CiB9CiAKIHZv
aWQgQ2FjaGVkQ1NTU3R5bGVTaGVldDo6ZGlkQWRkQ2xpZW50KENhY2hlZFJlc291cmNlQ2xpZW50
KiBjKQpAQCAtMTUzLDcgKzE1NSwxMiBAQCBib29sIENhY2hlZENTU1N0eWxlU2hlZXQ6OmNhblVz
ZVNoZWV0KGJvCiAKIHZvaWQgQ2FjaGVkQ1NTU3R5bGVTaGVldDo6ZGVzdHJveURlY29kZWREYXRh
KCkKIHsKKyAgICBpZiAoIW1fcGFyc2VkU3R5bGVTaGVldENhY2hlKQorICAgICAgICByZXR1cm47
CisKKyAgICBtX3BhcnNlZFN0eWxlU2hlZXRDYWNoZS0+cmVtb3ZlZEZyb21NZW1vcnlDYWNoZSgp
OwogICAgIG1fcGFyc2VkU3R5bGVTaGVldENhY2hlLmNsZWFyKCk7CisKICAgICBzZXREZWNvZGVk
U2l6ZSgwKTsKIH0KIApAQCAtMTYxLDI1ICsxNjgsMjYgQEAgUGFzc1JlZlB0cjxTdHlsZVNoZWV0
SW50ZXJuYWw+IENhY2hlZENTUwogewogICAgIGlmICghbV9wYXJzZWRTdHlsZVNoZWV0Q2FjaGUp
CiAgICAgICAgIHJldHVybiAwOwotICAgIC8vIENhY2hlZCBwYXJzZWQgc3R5bGVzaGVldCBoYXMg
bXV0YXRlZCwga2ljayBpdCBvdXQuCi0gICAgaWYgKCFtX3BhcnNlZFN0eWxlU2hlZXRDYWNoZS0+
aXNDYWNoZWFibGUoKSkgewotICAgICAgICBtX3BhcnNlZFN0eWxlU2hlZXRDYWNoZS5jbGVhcigp
OwotICAgICAgICBzZXREZWNvZGVkU2l6ZSgwKTsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQor
ICAgIEFTU0VSVChtX3BhcnNlZFN0eWxlU2hlZXRDYWNoZS0+aXNDYWNoZWFibGUoKSk7CisgICAg
QVNTRVJUKG1fcGFyc2VkU3R5bGVTaGVldENhY2hlLT5pc0luTWVtb3J5Q2FjaGUoKSk7CisKICAg
ICAvLyBDb250ZXh0cyBtdXN0IGJlIGlkZW50aWNhbCBzbyB3ZSBrbm93IHdlIHdvdWxkIGdldCB0
aGUgc2FtZSBleGFjdCByZXN1bHQgaWYgd2UgcGFyc2VkIGFnYWluLgogICAgIGlmIChtX3BhcnNl
ZFN0eWxlU2hlZXRDYWNoZS0+cGFyc2VyQ29udGV4dCgpICE9IGNvbnRleHQpCiAgICAgICAgIHJl
dHVybiAwOwogCiAgICAgZGlkQWNjZXNzRGVjb2RlZERhdGEoY3VycmVudFRpbWUoKSk7Ci0gICAg
Ly8gRklYTUU6IEltcGxlbWVudCBjb3B5LW9uLXdyaXRlIHRvIGF2b2lkIGNvcHlpbmcgd2hlbiBu
b3QgbmVjZXNzYXJ5LgotICAgIHJldHVybiBtX3BhcnNlZFN0eWxlU2hlZXRDYWNoZS0+Y29weSgp
OworCisgICAgcmV0dXJuIG1fcGFyc2VkU3R5bGVTaGVldENhY2hlOwogfQogCiB2b2lkIENhY2hl
ZENTU1N0eWxlU2hlZXQ6OnNhdmVQYXJzZWRTdHlsZVNoZWV0KFBhc3NSZWZQdHI8U3R5bGVTaGVl
dEludGVybmFsPiBzaGVldCkKIHsKICAgICBBU1NFUlQoc2hlZXQgJiYgc2hlZXQtPmlzQ2FjaGVh
YmxlKCkpOworCisgICAgaWYgKG1fcGFyc2VkU3R5bGVTaGVldENhY2hlKQorICAgICAgICBtX3Bh
cnNlZFN0eWxlU2hlZXRDYWNoZS0+cmVtb3ZlZEZyb21NZW1vcnlDYWNoZSgpOwogICAgIG1fcGFy
c2VkU3R5bGVTaGVldENhY2hlID0gc2hlZXQ7CisgICAgbV9wYXJzZWRTdHlsZVNoZWV0Q2FjaGUt
PmFkZGVkVG9NZW1vcnlDYWNoZSgpOwogCiAgICAgc2V0RGVjb2RlZFNpemUobV9wYXJzZWRTdHls
ZVNoZWV0Q2FjaGUtPmVzdGltYXRlZFNpemVJbkJ5dGVzKCkpOwogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>140242</attachid>
            <date>2012-05-04 08:36:21 -0700</date>
            <delta_ts>2012-05-05 06:07:51 -0700</delta_ts>
            <desc>updated patch2</desc>
            <filename>stylesheet-sharing-10.patch</filename>
            <type>text/plain</type>
            <size>42743</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExNjA4MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0NiBAQAorMjAxMi0wNS0wNCAgQW50dGkg
S29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CisKKyAgICAgICAgU2hhcmUgc3R5bGVzaGVldCBk
YXRhIHN0cnVjdHVyZXMgYmV0d2VlbiBkb2N1bWVudHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg1NTk4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgV2UgY3VycmVudGx5IG1ha2UgYSBjb3B5IG9mIHRoZSBk
YXRhIHN0cnVjdHVyZXMgd2hlbiByZXN0b3JpbmcgYSBjYWNoZWQgc3R5bGVzaGVldC4gVGhpcyBw
YXRjaCBsZXRzIHVzIHNoYXJlCisgICAgICAgIHRoZSBkYXRhIHVudGlsIHNvbWVvbmUgdXNlcyBD
U1NPTSB0byBtb2RpZnkgdGhlIHNoZWV0LgorICAgICAgICAKKyAgICAgICAgVGhlIHBhdGNoIGlt
cGxlbWVudHMgY29weS1vbi13cml0ZSBmb3IgdGhlIGludGVybmFsIHN0eWxlIHNoZWV0IGRhdGEg
c3RydWN0dXJlcy4gSWYgYW55IG11dGF0aW9uIENTU09NIEFQSSBpcworICAgICAgICBpbnZva2Vk
LCB3ZSBjaGVjayBpZiB0aGUgc3R5bGVzaGVldCBjYW4gYmUgc2FmZWx5IG11dGF0ZWQgKHdlIGFy
ZSB0aGUgb25seSBjbGllbnQsIGl0IGlzIG5vdCBjYWNoZWQpLiBJZiBub3QKKyAgICAgICAgdGhl
biB0aGUgaW50ZXJuYWwgc3RydWN0dXJlcyBhcmUgY29waWVkIGFuZCBhbnkgZXhpc3RpbmcgQ1NT
T00gb2JqZWN0cyBhcmUgcmUtYXR0YWNoZWQgdG8gdGhlIG5ldyB0cmVlLgorICAgICAgICAKKyAg
ICAgICAgU2hhcmluZyBjYW4gc2F2ZSBzaWduaWZpY2FudCBhbW91bnQgb2YgbWVtb3J5IG9uIHNp
dGVzIHdpdGggbGFyZ2Ugc3R5bGVzaGVldHMuIEZvciBleGFtcGxlIGlmIHlvdSBoYXZlCisgICAg
ICAgIG11bHRpcGxlIGFydGljbGVzIG9wZW4gb24gd3NqLmNvbSB0aGlzIHNhdmVzIH4yLjZNQiBw
ZXIgdGFiLgorCisgICAgICAgICogY3NzL0NTU0ZvbnRGYWNlUnVsZS5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NGb250RmFjZVJ1bGU6OnJlYXR0YWNoKToKKyAgICAgICAgKFdlYkNvcmUpOgor
ICAgICAgICAqIGNzcy9DU1NGb250RmFjZVJ1bGUuaDoKKyAgICAgICAgKENTU0ZvbnRGYWNlUnVs
ZSk6CisgICAgICAgICogY3NzL0NTU01lZGlhUnVsZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
U1NNZWRpYVJ1bGU6Omluc2VydFJ1bGUpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTTWVkaWFSdWxl
OjpkZWxldGVSdWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU01lZGlhUnVsZTo6cmVhdHRhY2gp
OgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogY3NzL0NTU01lZGlhUnVsZS5oOgorICAg
ICAgICAoQ1NTTWVkaWFSdWxlKToKKyAgICAgICAgKiBjc3MvQ1NTUGFnZVJ1bGUuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Q1NTUGFnZVJ1bGU6OnNldFNlbGVjdG9yVGV4dCk6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NQYWdlUnVsZTo6cmVhdHRhY2gpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAg
ICAgICogY3NzL0NTU1BhZ2VSdWxlLmg6CisgICAgICAgIChDU1NQYWdlUnVsZSk6CisgICAgICAg
ICogY3NzL0NTU1J1bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUnVsZTo6cmVhdHRhY2gp
OgorICAgICAgICAKKyAgICAgICAgICAgIEFmdGVyIHRoZSBpbnRlcm5hbCBzdHlsZXJ1bGUgdHJl
ZSBoYXMgYmVlbiBjb3BpZWQsIHRoZSBleGlzdGluZyB3cmFwcGVycyBhcmUgcmUtYXR0YWNoZWQg
dXNpbmcgcmVjdXJzaXZlIHJlYXR0YWNoKCkgZnVuY3Rpb24uCisKKyAgICAgICAgKiBjc3MvQ1NT
UnVsZS5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChDU1NSdWxlKToKKyAgICAgICAg
KiBjc3MvQ1NTU3R5bGVSdWxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlUnVsZTo6
c2V0U2VsZWN0b3JUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0eWxlUnVsZTo6cmVhdHRh
Y2gpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogY3NzL0NTU1N0eWxlUnVsZS5oOgor
ICAgICAgICAoQ1NTU3R5bGVSdWxlKToKKyAgICAgICAgKiBjc3MvQ1NTU3R5bGVTaGVldC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVNoZWV0SW50ZXJuYWw6OlN0eWxlU2hlZXRJbnRlcm5h
bCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVNoZWV0SW50ZXJuYWw6OmlzQ2FjaGVhYmxlKToK
KyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2hlZXRJbnRlcm5hbDo6cnVsZUF0KToKKyAgICAgICAg
CisgICAgICAgICAgICBBZGQgcnVsZUF0KCksIHVzZSBpdCBmb3IgYm90aCB3cmFwcGVyIGNyZWF0
aW9uIGFuZCByZWF0dGFjaGluZy4gIFJlbW92ZSBjcmVhdGVDaGlsZFJ1bGVDU1NPTVdyYXBwZXIg
LgorCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2hlZXRJbnRl
cm5hbDo6d3JhcHBlckluc2VydFJ1bGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVTaGVldElu
dGVybmFsOjp3cmFwcGVyRGVsZXRlUnVsZSk6CisgICAgICAgIAorICAgICAgICAgICAgSW52YWxp
ZGF0aW9uIG1vdmVzIHRvIHRoZSBjYWxsaW5nIHdyYXBwZXIuCisKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlU2hlZXRJbnRlcm5hbDo6YWRkZWRUb01lbW9yeUNhY2hlKToKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlU2hlZXRJbnRlcm5hbDo6cmVtb3ZlZEZyb21NZW1vcnlDYWNoZSk6CisgICAgICAg
IChXZWJDb3JlOjpDU1NTdHlsZVNoZWV0Ojp3aWxsTXV0YXRlUnVsZXMpOgorICAgICAgICAKKyAg
ICAgICAgICAgIFRoaXMgaXMgY2FsbGVkIHdoZW5ldmVyIFN0eWxlU2hlZXRJbnRlcm5hbCBpcyBn
b2luZyB0byBiZSBtdXRhdGVkLiBJdCB3aWxsIGRvIGNvcHktb24td3JpdGUgaWYgbmVlZGVkLgor
ICAgICAgICAgICAgCisgICAgICAgICAgICBVc3VhbGx5IGludm9rZWQgYnkgQ1NTU3R5bGVTaGVl
dDo6UnVsZU11dGF0aW9uIFJBSUkgdHlwZS4KKworICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVT
aGVldDo6ZGlkTXV0YXRlUnVsZXMpOgorICAgICAgICAKKyAgICAgICAgICAgIFRoaXMgaXMgY2Fs
bGVkIGFmdGVyIHRoZSBtdXRhdGlvbiBpcyBjb21wbGV0ZSBhbmQgd2lsbCB0cmlnZ2VyIHRoZSBz
dHlsZSByZWNhbGMgaW4gdGhlIGRvY3VtZW50LgorCisgICAgICAgIChXZWJDb3JlOjpDU1NTdHls
ZVNoZWV0OjpkaWRNdXRhdGUpOgorICAgICAgICAKKyAgICAgICAgICAgIFRoaXMgaXMgY2FsbGVk
IGRpcmVjdGx5IGFmdGVyIG11dGF0aW9ucyB0aGF0IGRvbid0IGNoYW5nZSBTdHlsZVNoZWV0SW50
ZXJuYWwgc28gZG9uJ3QgcmVxdWlyZSBjb3B5LW9uLXdyaXRlLgorCisgICAgICAgIChXZWJDb3Jl
OjpDU1NTdHlsZVNoZWV0OjpyZWF0dGFjaENoaWxkUnVsZUNTU09NV3JhcHBlcnMpOgorICAgICAg
ICAoV2ViQ29yZTo6Q1NTU3R5bGVTaGVldDo6c2V0RGlzYWJsZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTU3R5bGVTaGVldDo6aW5zZXJ0UnVsZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHls
ZVNoZWV0OjpkZWxldGVSdWxlKToKKyAgICAgICAgKiBjc3MvQ1NTU3R5bGVTaGVldC5oOgorICAg
ICAgICAoU3R5bGVTaGVldEludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2hlZXRJ
bnRlcm5hbDo6aGFzT25lQ2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2hlZXRJbnRl
cm5hbDo6aXNNdXRhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2hlZXRJbnRlcm5hbDo6
c2V0TXV0YWJsZSk6CisgICAgICAgIAorICAgICAgICAgICAgVHJhY2sgbXV0YWJpbGl0eS4gTXV0
YXRpb24gaXMgYWxsb3dlZCBvbmx5IGFmdGVyIHdpbGxNdXRhdGUgY2FsbC4KKworICAgICAgICAo
V2ViQ29yZTo6U3R5bGVTaGVldEludGVybmFsOjppc0luTWVtb3J5Q2FjaGUpOgorICAgICAgICAK
KyAgICAgICAgICAgIFRyYWNrIGlmIHRoZSBvYmplY3QgaXMgaW4gbWVtb3J5IGNhY2hlLgorCisg
ICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNoZWV0OjpjbGVhck93bmVyUnVsZSk6CisgICAgICAg
IChDU1NTdHlsZVNoZWV0KToKKyAgICAgICAgKiBjc3MvTWVkaWFMaXN0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhTGlzdDo6c2V0TWVkaWFUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6Ok1l
ZGlhTGlzdDo6ZGVsZXRlTWVkaXVtKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhTGlzdDo6YXBw
ZW5kTWVkaXVtKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhTGlzdDo6ZGlkTXV0YXRlKToKKyAg
ICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFMaXN0OjpyZWF0dGFjaCk6
CisgICAgICAgICogY3NzL01lZGlhTGlzdC5oOgorICAgICAgICAoTWVkaWFMaXN0KToKKyAgICAg
ICAgKiBjc3MvUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbjo6c2V0Q3NzVGV4dCk6CisgICAg
ICAgIChXZWJDb3JlOjpQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb246OnNldFByb3BlcnR5
KToKKyAgICAgICAgKFdlYkNvcmU6OlByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbjo6cmVt
b3ZlUHJvcGVydHkpOgorICAgICAgICAoV2ViQ29yZTo6UHJvcGVydHlTZXRDU1NTdHlsZURlY2xh
cmF0aW9uOjpzZXRQcm9wZXJ0eUludGVybmFsKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAg
ICAoV2ViQ29yZTo6U3R5bGVSdWxlQ1NTU3R5bGVEZWNsYXJhdGlvbjo6d2lsbE11dGF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpTdHlsZVJ1bGVDU1NTdHlsZURlY2xhcmF0aW9uOjpkaWRNdXRhdGUp
OgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSdWxlQ1NTU3R5bGVEZWNsYXJhdGlvbjo6cmVhdHRh
Y2gpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lQ1NTU3R5bGVEZWNsYXJhdGlvbjo6ZGlkTXV0
YXRlKToKKyAgICAgICAgKiBjc3MvUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uLmg6Cisg
ICAgICAgIChXZWJDb3JlOjpQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb246OndpbGxNdXRh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6UHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uOjpk
aWRNdXRhdGUpOgorICAgICAgICAoU3R5bGVSdWxlQ1NTU3R5bGVEZWNsYXJhdGlvbik6CisgICAg
ICAgICogY3NzL1dlYktpdENTU0tleWZyYW1lc1J1bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
V2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZTo6c2V0TmFtZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJL
aXRDU1NLZXlmcmFtZXNSdWxlOjppbnNlcnRSdWxlKToKKyAgICAgICAgKFdlYkNvcmU6OldlYktp
dENTU0tleWZyYW1lc1J1bGU6OmRlbGV0ZVJ1bGUpOgorICAgICAgICAoV2ViQ29yZTo6V2ViS2l0
Q1NTS2V5ZnJhbWVzUnVsZTo6cmVhdHRhY2gpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAg
ICogY3NzL1dlYktpdENTU0tleWZyYW1lc1J1bGUuaDoKKyAgICAgICAgKFdlYktpdENTU0tleWZy
YW1lc1J1bGUpOgorICAgICAgICAqIGNzcy9XZWJLaXRDU1NSZWdpb25SdWxlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OldlYktpdENTU1JlZ2lvblJ1bGU6OnJlYXR0YWNoKToKKyAgICAgICAgKiBj
c3MvV2ViS2l0Q1NTUmVnaW9uUnVsZS5oOgorICAgICAgICAoV2ViS2l0Q1NTUmVnaW9uUnVsZSk6
CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yU3R5bGVTaGVldDo6cmVwYXJzZVN0eWxlU2hlZXQpOgorICAgICAg
ICAqIGxvYWRlci9jYWNoZS9DYWNoZWRDU1NTdHlsZVNoZWV0LmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkNhY2hlZENTU1N0eWxlU2hlZXQ6On5DYWNoZWRDU1NTdHlsZVNoZWV0KToKKyAgICAgICAg
KFdlYkNvcmU6OkNhY2hlZENTU1N0eWxlU2hlZXQ6OmRlc3Ryb3lEZWNvZGVkRGF0YSk6CisgICAg
ICAgIChXZWJDb3JlOjpDYWNoZWRDU1NTdHlsZVNoZWV0OjpyZXN0b3JlUGFyc2VkU3R5bGVTaGVl
dCk6CisgICAgICAgIAorICAgICAgICAgICAgRG9uJ3QgY29weSB3aGVuIHJlc3RvcmluZy4gSXQg
aXMgbm8gbG9uZ2VyIG5lY2Vzc2FyeS4KKyAgICAgICAgICAgIFNldCB0aGUgY2FjaGUgYml0IG9u
IHRoZSBzdHlsZXNoZWV0LgorCisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRDU1NTdHlsZVNoZWV0
OjpzYXZlUGFyc2VkU3R5bGVTaGVldCk6CisKIDIwMTItMDUtMDMgIElseWEgVGlraG9ub3Zza3kg
IDxsb2lzbG9AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IGNyZWF0ZVJh
d0xvY2F0aW9uQnlVUkwgaXMgdG9vIHNsb3cgaWYgYSBiaWcgbnVtYmVyIG9mIGV2YWxzIGhhcHBl
bi4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVJ1bGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVJ1bGUuY3BwCShyZXZpc2lvbiAx
MTU5NTkpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VSdWxlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtNTUsNCArNTUsMTIgQEAgU3RyaW5nIENTU0ZvbnRGYWNlUnVsZTo6Y3NzVGV4
dCgpIGNvbnN0CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAordm9pZCBDU1NGb250RmFjZVJ1bGU6
OnJlYXR0YWNoKFN0eWxlUnVsZUZvbnRGYWNlKiBydWxlKQoreworICAgIEFTU0VSVChydWxlKTsK
KyAgICBtX2ZvbnRGYWNlUnVsZSA9IHJ1bGU7CisgICAgaWYgKG1fcHJvcGVydGllc0NTU09NV3Jh
cHBlcikKKyAgICAgICAgbV9wcm9wZXJ0aWVzQ1NTT01XcmFwcGVyLT5yZWF0dGFjaChtX2ZvbnRG
YWNlUnVsZS0+cHJvcGVydGllcygpKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRl
eDogU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlUnVsZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVJ1bGUuaAkocmV2aXNpb24gMTE1OTU5KQorKysg
U291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlUnVsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00
Myw2ICs0Myw4IEBAIHB1YmxpYzoKIAogICAgIFN0cmluZyBjc3NUZXh0KCkgY29uc3Q7CiAKKyAg
ICB2b2lkIHJlYXR0YWNoKFN0eWxlUnVsZUZvbnRGYWNlKik7CisKIHByaXZhdGU6CiAgICAgQ1NT
Rm9udEZhY2VSdWxlKFN0eWxlUnVsZUZvbnRGYWNlKiwgQ1NTU3R5bGVTaGVldCogcGFyZW50KTsK
IApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU01lZGlhUnVsZS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU01lZGlhUnVsZS5jcHAJKHJldmlzaW9uIDExNTk1OSkK
KysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NNZWRpYVJ1bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC04MCwxMyArODAsMTEgQEAgdW5zaWduZWQgQ1NTTWVkaWFSdWxlOjppbnNlcnRSdWxlKGNvbnN0
IAogICAgICAgICBlYyA9IEhJRVJBUkNIWV9SRVFVRVNUX0VSUjsKICAgICAgICAgcmV0dXJuIDA7
CiAgICAgfQorICAgIENTU1N0eWxlU2hlZXQ6OlJ1bGVNdXRhdGlvbiBtdXRhdGlvbih0aGlzKTsK
KwogICAgIG1fbWVkaWFSdWxlLT53cmFwcGVySW5zZXJ0UnVsZShpbmRleCwgbmV3UnVsZSk7CiAK
ICAgICBtX2NoaWxkUnVsZUNTU09NV3JhcHBlcnMuaW5zZXJ0KGluZGV4LCBSZWZQdHI8Q1NTUnVs
ZT4oKSk7Ci0KLSAgICBpZiAoQ1NTU3R5bGVTaGVldCogc3R5bGVTaGVldCA9IHBhcmVudFN0eWxl
U2hlZXQoKSkKLSAgICAgICAgc3R5bGVTaGVldC0+c3R5bGVTaGVldENoYW5nZWQoKTsKLQogICAg
IHJldHVybiBpbmRleDsKIH0KIApAQCAtMTAwLDE0ICs5OCwxNCBAQCB2b2lkIENTU01lZGlhUnVs
ZTo6ZGVsZXRlUnVsZSh1bnNpZ25lZCBpCiAgICAgICAgIGVjID0gSU5ERVhfU0laRV9FUlI7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CisKKyAgICBDU1NTdHlsZVNoZWV0OjpSdWxlTXV0YXRpb24g
bXV0YXRpb24odGhpcyk7CisKICAgICBtX21lZGlhUnVsZS0+d3JhcHBlclJlbW92ZVJ1bGUoaW5k
ZXgpOwogCiAgICAgaWYgKG1fY2hpbGRSdWxlQ1NTT01XcmFwcGVyc1tpbmRleF0pCiAgICAgICAg
IG1fY2hpbGRSdWxlQ1NTT01XcmFwcGVyc1tpbmRleF0tPnNldFBhcmVudFJ1bGUoMCk7CiAgICAg
bV9jaGlsZFJ1bGVDU1NPTVdyYXBwZXJzLnJlbW92ZShpbmRleCk7Ci0KLSAgICBpZiAoQ1NTU3R5
bGVTaGVldCogc3R5bGVTaGVldCA9IHBhcmVudFN0eWxlU2hlZXQoKSkKLSAgICAgICAgc3R5bGVT
aGVldC0+c3R5bGVTaGVldENoYW5nZWQoKTsKIH0KIAogU3RyaW5nIENTU01lZGlhUnVsZTo6Y3Nz
VGV4dCgpIGNvbnN0CkBAIC0xNjMsNCArMTYxLDE2IEBAIENTU1J1bGVMaXN0KiBDU1NNZWRpYVJ1
bGU6OmNzc1J1bGVzKCkgY28KICAgICByZXR1cm4gbV9ydWxlTGlzdENTU09NV3JhcHBlci5nZXQo
KTsKIH0KIAordm9pZCBDU1NNZWRpYVJ1bGU6OnJlYXR0YWNoKFN0eWxlUnVsZU1lZGlhKiBydWxl
KQoreworICAgIEFTU0VSVChydWxlKTsKKyAgICBtX21lZGlhUnVsZSA9IHJ1bGU7CisgICAgaWYg
KG1fbWVkaWFDU1NPTVdyYXBwZXIpCisgICAgICAgIG1fbWVkaWFDU1NPTVdyYXBwZXItPnJlYXR0
YWNoKG1fbWVkaWFSdWxlLT5tZWRpYVF1ZXJpZXMoKSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IG1fY2hpbGRSdWxlQ1NTT01XcmFwcGVycy5zaXplKCk7ICsraSkgeworICAgICAgICBp
ZiAobV9jaGlsZFJ1bGVDU1NPTVdyYXBwZXJzW2ldKQorICAgICAgICAgICAgbV9jaGlsZFJ1bGVD
U1NPTVdyYXBwZXJzW2ldLT5yZWF0dGFjaChtX21lZGlhUnVsZS0+Y2hpbGRSdWxlcygpW2ldLmdl
dCgpKTsKKyAgICB9Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NNZWRpYVJ1bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9j
c3MvQ1NTTWVkaWFSdWxlLmgJKHJldmlzaW9uIDExNTk1OSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nz
cy9DU1NNZWRpYVJ1bGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTAsNiArNTAsOCBAQCBwdWJsaWM6
CiAgICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3Q7CiAgICAgQ1NTUnVsZSogaXRlbSh1bnNpZ25l
ZCBpbmRleCkgY29uc3Q7CiAKKyAgICB2b2lkIHJlYXR0YWNoKFN0eWxlUnVsZU1lZGlhKik7CisK
IHByaXZhdGU6CiAgICAgQ1NTTWVkaWFSdWxlKFN0eWxlUnVsZU1lZGlhKiwgQ1NTU3R5bGVTaGVl
dCopOwogICAgIApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1BhZ2VSdWxlLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFnZVJ1bGUuY3BwCShyZXZpc2lvbiAx
MTU5NTkpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFnZVJ1bGUuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02NSwyNCArNjUsMTcgQEAgU3RyaW5nIENTU1BhZ2VSdWxlOjpzZWxlY3RvclRleHQo
KSBjb25zdAogCiB2b2lkIENTU1BhZ2VSdWxlOjpzZXRTZWxlY3RvclRleHQoY29uc3QgU3RyaW5n
JiBzZWxlY3RvclRleHQpCiB7Ci0gICAgRG9jdW1lbnQqIGRvYyA9IDA7Ci0gICAgaWYgKENTU1N0
eWxlU2hlZXQqIHN0eWxlU2hlZXQgPSBwYXJlbnRTdHlsZVNoZWV0KCkpCi0gICAgICAgIGRvYyA9
IHN0eWxlU2hlZXQtPm93bmVyRG9jdW1lbnQoKTsKLSAgICBpZiAoIWRvYykKLSAgICAgICAgcmV0
dXJuOwogICAgIAogICAgIENTU1BhcnNlciBwYXJzZXIocGFyc2VyQ29udGV4dCgpKTsKICAgICBD
U1NTZWxlY3Rvckxpc3Qgc2VsZWN0b3JMaXN0OwogICAgIHBhcnNlci5wYXJzZVNlbGVjdG9yKHNl
bGVjdG9yVGV4dCwgc2VsZWN0b3JMaXN0KTsKICAgICBpZiAoIXNlbGVjdG9yTGlzdC5maXJzdCgp
KQogICAgICAgICByZXR1cm47Ci0gICAgCisKKyAgICBDU1NTdHlsZVNoZWV0OjpSdWxlTXV0YXRp
b24gbXV0YXRpb24odGhpcyk7CisKICAgICBTdHJpbmcgb2xkU2VsZWN0b3JUZXh0ID0gdGhpcy0+
c2VsZWN0b3JUZXh0KCk7CiAgICAgbV9wYWdlUnVsZS0+d3JhcHBlckFkb3B0U2VsZWN0b3JMaXN0
KHNlbGVjdG9yTGlzdCk7Ci0gICAgCi0gICAgaWYgKHRoaXMtPnNlbGVjdG9yVGV4dCgpID09IG9s
ZFNlbGVjdG9yVGV4dCkKLSAgICAgICAgcmV0dXJuOwotICAgIGRvYy0+c3R5bGVSZXNvbHZlckNo
YW5nZWQoRGVmZXJSZWNhbGNTdHlsZSk7CiB9CiAKIFN0cmluZyBDU1NQYWdlUnVsZTo6Y3NzVGV4
dCgpIGNvbnN0CkBAIC05NCw0ICs4NywxMiBAQCBTdHJpbmcgQ1NTUGFnZVJ1bGU6OmNzc1RleHQo
KSBjb25zdAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKK3ZvaWQgQ1NTUGFnZVJ1bGU6OnJlYXR0
YWNoKFN0eWxlUnVsZVBhZ2UqIHJ1bGUpCit7CisgICAgQVNTRVJUKHJ1bGUpOworICAgIG1fcGFn
ZVJ1bGUgPSBydWxlOworICAgIGlmIChtX3Byb3BlcnRpZXNDU1NPTVdyYXBwZXIpCisgICAgICAg
IG1fcHJvcGVydGllc0NTU09NV3JhcHBlci0+cmVhdHRhY2gobV9wYWdlUnVsZS0+cHJvcGVydGll
cygpKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUv
Y3NzL0NTU1BhZ2VSdWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1Bh
Z2VSdWxlLmgJKHJldmlzaW9uIDExNTk1OSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NQYWdl
UnVsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw5IEBAIHB1YmxpYzoKICAgICB2b2lk
IHNldFNlbGVjdG9yVGV4dChjb25zdCBTdHJpbmcmKTsKIAogICAgIFN0cmluZyBjc3NUZXh0KCkg
Y29uc3Q7Ci0gICAgCisKKyAgICB2b2lkIHJlYXR0YWNoKFN0eWxlUnVsZVBhZ2UqKTsKKwogcHJp
dmF0ZToKICAgICBDU1NQYWdlUnVsZShTdHlsZVJ1bGVQYWdlKiwgQ1NTU3R5bGVTaGVldCopOwog
ICAgIApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1J1bGUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NSdWxlLmNwcAkocmV2aXNpb24gMTE1OTU5KQorKysgU291
cmNlL1dlYkNvcmUvY3NzL0NTU1J1bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMyw2ICszMyw3
IEBACiAjaW5jbHVkZSAiV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZS5oIgogI2luY2x1ZGUgIldlYktp
dENTU1JlZ2lvblJ1bGUuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUg
IlN0eWxlUnVsZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTExMyw0ICsxMTQsNDIg
QEAgdm9pZCBDU1NSdWxlOjpkZXN0cm95KCkKICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKIH0K
IAordm9pZCBDU1NSdWxlOjpyZWF0dGFjaChTdHlsZVJ1bGVCYXNlKiBydWxlKQoreworICAgIHN3
aXRjaCAodHlwZSgpKSB7CisgICAgY2FzZSBVTktOT1dOX1JVTEU6CisgICAgICAgIHJldHVybjsK
KyAgICBjYXNlIFNUWUxFX1JVTEU6CisgICAgICAgIHN0YXRpY19jYXN0PENTU1N0eWxlUnVsZSo+
KHRoaXMpLT5yZWF0dGFjaChzdGF0aWNfY2FzdDxTdHlsZVJ1bGUqPihydWxlKSk7CisgICAgICAg
IHJldHVybjsKKyAgICBjYXNlIFBBR0VfUlVMRToKKyAgICAgICAgc3RhdGljX2Nhc3Q8Q1NTUGFn
ZVJ1bGUqPih0aGlzKS0+cmVhdHRhY2goc3RhdGljX2Nhc3Q8U3R5bGVSdWxlUGFnZSo+KHJ1bGUp
KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ0hBUlNFVF9SVUxFOgorICAgICAgICBBU1NF
UlQoIXJ1bGUpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJTVBPUlRfUlVMRToKKyAgICAg
ICAgLy8gRklYTUU6IEltcGxlbWVudCB3aGVuIGVuYWJsaW5nIGNhY2hpbmcgZm9yIHN0eWxlc2hl
ZXRzIHdpdGggaW1wb3J0IHJ1bGVzLgorICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgcmV0dXJuOworICAgIGNhc2UgTUVESUFfUlVMRToKKyAgICAgICAgc3RhdGljX2Nhc3Q8
Q1NTTWVkaWFSdWxlKj4odGhpcyktPnJlYXR0YWNoKHN0YXRpY19jYXN0PFN0eWxlUnVsZU1lZGlh
Kj4ocnVsZSkpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBGT05UX0ZBQ0VfUlVMRToKKyAg
ICAgICAgc3RhdGljX2Nhc3Q8Q1NTRm9udEZhY2VSdWxlKj4odGhpcyktPnJlYXR0YWNoKHN0YXRp
Y19jYXN0PFN0eWxlUnVsZUZvbnRGYWNlKj4ocnVsZSkpOworICAgICAgICByZXR1cm47CisgICAg
Y2FzZSBXRUJLSVRfS0VZRlJBTUVTX1JVTEU6CisgICAgICAgIHN0YXRpY19jYXN0PFdlYktpdENT
U0tleWZyYW1lc1J1bGUqPih0aGlzKS0+cmVhdHRhY2goc3RhdGljX2Nhc3Q8U3R5bGVSdWxlS2V5
ZnJhbWVzKj4ocnVsZSkpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBXRUJLSVRfS0VZRlJB
TUVfUlVMRToKKyAgICAgICAgLy8gTm8gbmVlZCB0byByZWF0dGFjaCwgdGhlIHVuZGVybHlpbmcg
ZGF0YSBpcyBzaGFyZWFibGUgb24gbXV0YXRpb24uCisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBXRUJLSVRfUkVHSU9OX1JVTEU6CisgICAg
ICAgIHN0YXRpY19jYXN0PFdlYktpdENTU1JlZ2lvblJ1bGUqPih0aGlzKS0+cmVhdHRhY2goc3Rh
dGljX2Nhc3Q8U3R5bGVSdWxlUmVnaW9uKj4ocnVsZSkpOworICAgICAgICByZXR1cm47CisgICAg
fQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUnVsZS5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NSdWxlLmgJKHJldmlzaW9uIDExNTk1OSkKKysrIFNvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NSdWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI0LDEyICsyNCwxMyBAQAogI2Rl
ZmluZSBDU1NSdWxlX2gKIAogI2luY2x1ZGUgIkNTU1N0eWxlU2hlZXQuaCIKKyNpbmNsdWRlICJF
eGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiS1VSTEhhc2guaCIKICNpbmNsdWRlIDx3dGYvTGlz
dEhhc2hTZXQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi10eXBlZGVmIGludCBFeGNlcHRp
b25Db2RlOworY2xhc3MgU3R5bGVSdWxlQmFzZTsKIAogY2xhc3MgQ1NTUnVsZSA6IHB1YmxpYyBS
ZWZDb3VudGVkPENTU1J1bGU+IHsKIHB1YmxpYzoKQEAgLTkzLDYgKzk0LDggQEAgcHVibGljOgog
ICAgIFN0cmluZyBjc3NUZXh0KCkgY29uc3Q7CiAgICAgdm9pZCBzZXRDc3NUZXh0KGNvbnN0IFN0
cmluZyYsIEV4Y2VwdGlvbkNvZGUmKTsKIAorICAgIHZvaWQgcmVhdHRhY2goU3R5bGVSdWxlQmFz
ZSopOworCiBwcm90ZWN0ZWQ6CiAgICAgQ1NTUnVsZShDU1NTdHlsZVNoZWV0KiBwYXJlbnQsIFR5
cGUgdHlwZSkKICAgICAgICAgOiBtX2hhc0NhY2hlZFNlbGVjdG9yVGV4dChmYWxzZSkKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVJ1bGUuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVJ1bGUuY3BwCShyZXZpc2lvbiAxMTU5NTkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVSdWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTEsMTgg
KzkxLDE0IEBAIFN0cmluZyBDU1NTdHlsZVJ1bGU6OnNlbGVjdG9yVGV4dCgpIGNvbnMKIAogdm9p
ZCBDU1NTdHlsZVJ1bGU6OnNldFNlbGVjdG9yVGV4dChjb25zdCBTdHJpbmcmIHNlbGVjdG9yVGV4
dCkKIHsKLSAgICBEb2N1bWVudCogZG9jID0gMDsKLSAgICBpZiAoQ1NTU3R5bGVTaGVldCogc3R5
bGVTaGVldCA9IHBhcmVudFN0eWxlU2hlZXQoKSkKLSAgICAgICAgZG9jID0gc3R5bGVTaGVldC0+
b3duZXJEb2N1bWVudCgpOwotICAgIGlmICghZG9jKQotICAgICAgICByZXR1cm47Ci0KICAgICBD
U1NQYXJzZXIgcChwYXJzZXJDb250ZXh0KCkpOwogICAgIENTU1NlbGVjdG9yTGlzdCBzZWxlY3Rv
ckxpc3Q7CiAgICAgcC5wYXJzZVNlbGVjdG9yKHNlbGVjdG9yVGV4dCwgc2VsZWN0b3JMaXN0KTsK
ICAgICBpZiAoIXNlbGVjdG9yTGlzdC5maXJzdCgpKQogICAgICAgICByZXR1cm47CiAKKyAgICBD
U1NTdHlsZVNoZWV0OjpSdWxlTXV0YXRpb24gbXV0YXRpb24odGhpcyk7CisKICAgICBTdHJpbmcg
b2xkU2VsZWN0b3JUZXh0ID0gdGhpcy0+c2VsZWN0b3JUZXh0KCk7CiAgICAgbV9zdHlsZVJ1bGUt
PndyYXBwZXJBZG9wdFNlbGVjdG9yTGlzdChzZWxlY3Rvckxpc3QpOwogCkBAIC0xMTAsOCArMTA2
LDYgQEAgdm9pZCBDU1NTdHlsZVJ1bGU6OnNldFNlbGVjdG9yVGV4dChjb25zdAogICAgICAgICBB
U1NFUlQoc2VsZWN0b3JUZXh0Q2FjaGUoKS5jb250YWlucyh0aGlzKSk7CiAgICAgICAgIHNlbGVj
dG9yVGV4dENhY2hlKCkuc2V0KHRoaXMsIGdlbmVyYXRlU2VsZWN0b3JUZXh0KCkpOwogICAgIH0K
LQotICAgIGRvYy0+c3R5bGVSZXNvbHZlckNoYW5nZWQoRGVmZXJSZWNhbGNTdHlsZSk7CiB9CiAK
IFN0cmluZyBDU1NTdHlsZVJ1bGU6OmNzc1RleHQoKSBjb25zdApAQCAtMTI1LDQgKzExOSwxMSBA
QCBTdHJpbmcgQ1NTU3R5bGVSdWxlOjpjc3NUZXh0KCkgY29uc3QKICAgICByZXR1cm4gcmVzdWx0
OwogfQogCit2b2lkIENTU1N0eWxlUnVsZTo6cmVhdHRhY2goU3R5bGVSdWxlKiBydWxlKQorewor
ICAgIG1fc3R5bGVSdWxlID0gcnVsZTsKKyAgICBpZiAobV9wcm9wZXJ0aWVzQ1NTT01XcmFwcGVy
KQorICAgICAgICBtX3Byb3BlcnRpZXNDU1NPTVdyYXBwZXItPnJlYXR0YWNoKG1fc3R5bGVSdWxl
LT5wcm9wZXJ0aWVzKCkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVSdWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvY3NzL0NTU1N0eWxlUnVsZS5oCShyZXZpc2lvbiAxMTU5NTkpCisrKyBTb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTU3R5bGVSdWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4LDYgKzQ4LDggQEAgcHVi
bGljOgogICAgIC8vIEZJWE1FOiBOb3QgQ1NTT00uIFJlbW92ZS4KICAgICBTdHlsZVJ1bGUqIHN0
eWxlUnVsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3R5bGVSdWxlLmdldCgpOyB9CiAKKyAgICB2b2lk
IHJlYXR0YWNoKFN0eWxlUnVsZSopOworCiBwcml2YXRlOgogICAgIENTU1N0eWxlUnVsZShTdHls
ZVJ1bGUqLCBDU1NTdHlsZVNoZWV0Kik7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NT
dHlsZVNoZWV0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVT
aGVldC5jcHAJKHJldmlzaW9uIDExNTk1OSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHls
ZVNoZWV0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTksNyArOTksOCBAQCBTdHlsZVNoZWV0SW50
ZXJuYWw6OlN0eWxlU2hlZXRJbnRlcm5hbChTCiAgICAgLCBtX2hhc1N5bnRhY3RpY2FsbHlWYWxp
ZENTU0hlYWRlcih0cnVlKQogICAgICwgbV9kaWRMb2FkRXJyb3JPY2N1cihmYWxzZSkKICAgICAs
IG1fdXNlc1JlbVVuaXRzKGZhbHNlKQotICAgICwgbV9oYXNNdXRhdGVkKGZhbHNlKQorICAgICwg
bV9pc011dGFibGUoZmFsc2UpCisgICAgLCBtX2lzSW5NZW1vcnlDYWNoZShmYWxzZSkKICAgICAs
IG1fcGFyc2VyQ29udGV4dChjb250ZXh0KQogewogfQpAQCAtMTE4LDcgKzExOSw4IEBAIFN0eWxl
U2hlZXRJbnRlcm5hbDo6U3R5bGVTaGVldEludGVybmFsKGMKICAgICAsIG1faGFzU3ludGFjdGlj
YWxseVZhbGlkQ1NTSGVhZGVyKG8ubV9oYXNTeW50YWN0aWNhbGx5VmFsaWRDU1NIZWFkZXIpCiAg
ICAgLCBtX2RpZExvYWRFcnJvck9jY3VyKGZhbHNlKQogICAgICwgbV91c2VzUmVtVW5pdHMoby5t
X3VzZXNSZW1Vbml0cykKLSAgICAsIG1faGFzTXV0YXRlZChmYWxzZSkKKyAgICAsIG1faXNNdXRh
YmxlKGZhbHNlKQorICAgICwgbV9pc0luTWVtb3J5Q2FjaGUoZmFsc2UpCiAgICAgLCBtX3BhcnNl
ckNvbnRleHQoby5tX3BhcnNlckNvbnRleHQpCiB7CiAgICAgQVNTRVJUKG8uaXNDYWNoZWFibGUo
KSk7CkBAIC0xNDAsMTMgKzE0MiwxNiBAQCBib29sIFN0eWxlU2hlZXRJbnRlcm5hbDo6aXNDYWNo
ZWFibGUoKSBjCiAgICAgLy8gRklYTUU6IFN1cHBvcnQgY29weWluZyBpbXBvcnQgcnVsZXMuCiAg
ICAgaWYgKCFtX2ltcG9ydFJ1bGVzLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIC8vIEZJWE1FOiBTdXBwb3J0IGNhY2hlZCBzdHlsZXNoZWV0cyBpbiBpbXBvcnQgcnVsZXMu
CisgICAgaWYgKG1fb3duZXJSdWxlKQorICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgLy8gVGhp
cyB3b3VsZCByZXF1aXJlIGRlYWxpbmcgd2l0aCBtdWx0aXBsZSBjbGllbnRzIGZvciBsb2FkIGNh
bGxiYWNrcy4KICAgICBpZiAoIW1fbG9hZENvbXBsZXRlZCkKICAgICAgICAgcmV0dXJuIGZhbHNl
OwogICAgIGlmIChtX2RpZExvYWRFcnJvck9jY3VyKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgLy8gSXQgaXMgbm90IHRoZSBvcmlnaW5hbCBzaGVldCBhbnltb3JlLgotICAgIGlmIChtX2hh
c011dGF0ZWQpCisgICAgaWYgKG1faXNNdXRhYmxlKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAg
ICAgLy8gSWYgdGhlIGhlYWRlciBpcyB2YWxpZCB3ZSBhcmUgbm90IGdvaW5nIHRvIG5lZWQgdG8g
Y2hlY2sgdGhlIFNlY3VyaXR5T3JpZ2luLgogICAgIC8vIEZJWE1FOiBWYWxpZCBtaW1lIHR5cGUg
YXZvaWRzIHRoZSBjaGVjayB0b28uCkBAIC0xNjksMjEgKzE3NCwyMSBAQCB2b2lkIFN0eWxlU2hl
ZXRJbnRlcm5hbDo6cGFyc2VyQXBwZW5kUnVsCiAgICAgbV9jaGlsZFJ1bGVzLmFwcGVuZChydWxl
KTsKIH0KIAotUGFzc1JlZlB0cjxDU1NSdWxlPiBTdHlsZVNoZWV0SW50ZXJuYWw6OmNyZWF0ZUNo
aWxkUnVsZUNTU09NV3JhcHBlcih1bnNpZ25lZCBpbmRleCwgQ1NTU3R5bGVTaGVldCogcGFyZW50
V3JhcHBlcikKK1N0eWxlUnVsZUJhc2UqIFN0eWxlU2hlZXRJbnRlcm5hbDo6cnVsZUF0KHVuc2ln
bmVkIGluZGV4KSBjb25zdAogewogICAgIEFTU0VSVChpbmRleCA8IHJ1bGVDb3VudCgpKTsKICAg
ICAKICAgICB1bnNpZ25lZCBjaGlsZFZlY3RvckluZGV4ID0gaW5kZXg7CiAgICAgaWYgKGhhc0No
YXJzZXRSdWxlKCkpIHsKICAgICAgICAgaWYgKGluZGV4ID09IDApCi0gICAgICAgICAgICByZXR1
cm4gQ1NTQ2hhcnNldFJ1bGU6OmNyZWF0ZShwYXJlbnRXcmFwcGVyLCBtX2VuY29kaW5nRnJvbUNo
YXJzZXRSdWxlKTsKKyAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAtLWNoaWxkVmVjdG9y
SW5kZXg7CiAgICAgfQogICAgIGlmIChjaGlsZFZlY3RvckluZGV4IDwgbV9pbXBvcnRSdWxlcy5z
aXplKCkpCi0gICAgICAgIHJldHVybiBtX2ltcG9ydFJ1bGVzW2NoaWxkVmVjdG9ySW5kZXhdLT5j
cmVhdGVDU1NPTVdyYXBwZXIocGFyZW50V3JhcHBlcik7Ci0gICAgCisgICAgICAgIHJldHVybiBt
X2ltcG9ydFJ1bGVzW2NoaWxkVmVjdG9ySW5kZXhdLmdldCgpOworCiAgICAgY2hpbGRWZWN0b3JJ
bmRleCAtPSBtX2ltcG9ydFJ1bGVzLnNpemUoKTsKLSAgICByZXR1cm4gbV9jaGlsZFJ1bGVzW2No
aWxkVmVjdG9ySW5kZXhdLT5jcmVhdGVDU1NPTVdyYXBwZXIocGFyZW50V3JhcHBlcik7CisgICAg
cmV0dXJuIG1fY2hpbGRSdWxlc1tjaGlsZFZlY3RvckluZGV4XS5nZXQoKTsKIH0KIAogdW5zaWdu
ZWQgU3R5bGVTaGVldEludGVybmFsOjpydWxlQ291bnQoKSBjb25zdApAQCAtMjQyLDcgKzI0Nyw2
IEBAIGJvb2wgU3R5bGVTaGVldEludGVybmFsOjp3cmFwcGVySW5zZXJ0UnUKICAgICAgICAgbV9p
bXBvcnRSdWxlc1tjaGlsZFZlY3RvckluZGV4XS0+c2V0UGFyZW50U3R5bGVTaGVldCh0aGlzKTsK
ICAgICAgICAgbV9pbXBvcnRSdWxlc1tjaGlsZFZlY3RvckluZGV4XS0+cmVxdWVzdFN0eWxlU2hl
ZXQoKTsKICAgICAgICAgLy8gRklYTUU6IFN0eWxlc2hlZXQgZG9lc24ndCBhY3R1YWxseSBjaGFu
Z2UgbWVhbmluZ2Z1bGx5IGJlZm9yZSB0aGUgaW1wb3J0ZWQgc2hlZXRzIGFyZSBsb2FkZWQuCi0g
ICAgICAgIHN0eWxlU2hlZXRDaGFuZ2VkKCk7CiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0K
ICAgICAvLyBJbnNlcnRpbmcgQGltcG9ydCBydWxlIGFmdGVyIGEgbm9uLWltcG9ydCBydWxlIGlz
IG5vdCBhbGxvd2VkLgpAQCAtMjUxLDggKzI1NSw2IEBAIGJvb2wgU3R5bGVTaGVldEludGVybmFs
Ojp3cmFwcGVySW5zZXJ0UnUKICAgICBjaGlsZFZlY3RvckluZGV4IC09IG1faW1wb3J0UnVsZXMu
c2l6ZSgpOwogIAogICAgIG1fY2hpbGRSdWxlcy5pbnNlcnQoY2hpbGRWZWN0b3JJbmRleCwgcnVs
ZSk7Ci0gICAgCi0gICAgc3R5bGVTaGVldENoYW5nZWQoKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0K
IApAQCAtMjY0LDcgKzI2Niw2IEBAIHZvaWQgU3R5bGVTaGVldEludGVybmFsOjp3cmFwcGVyRGVs
ZXRlUnUKICAgICBpZiAoaGFzQ2hhcnNldFJ1bGUoKSkgewogICAgICAgICBpZiAoY2hpbGRWZWN0
b3JJbmRleCA9PSAwKSB7CiAgICAgICAgICAgICBjbGVhckNoYXJzZXRSdWxlKCk7Ci0gICAgICAg
ICAgICBzdHlsZVNoZWV0Q2hhbmdlZCgpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9
CiAgICAgICAgIC0tY2hpbGRWZWN0b3JJbmRleDsKQEAgLTI3MiwxMyArMjczLDExIEBAIHZvaWQg
U3R5bGVTaGVldEludGVybmFsOjp3cmFwcGVyRGVsZXRlUnUKICAgICBpZiAoY2hpbGRWZWN0b3JJ
bmRleCA8IG1faW1wb3J0UnVsZXMuc2l6ZSgpKSB7CiAgICAgICAgIG1faW1wb3J0UnVsZXNbY2hp
bGRWZWN0b3JJbmRleF0tPmNsZWFyUGFyZW50U3R5bGVTaGVldCgpOwogICAgICAgICBtX2ltcG9y
dFJ1bGVzLnJlbW92ZShjaGlsZFZlY3RvckluZGV4KTsKLSAgICAgICAgc3R5bGVTaGVldENoYW5n
ZWQoKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICBjaGlsZFZlY3RvckluZGV4IC09IG1f
aW1wb3J0UnVsZXMuc2l6ZSgpOwogCiAgICAgbV9jaGlsZFJ1bGVzLnJlbW92ZShjaGlsZFZlY3Rv
ckluZGV4KTsKLSAgICBzdHlsZVNoZWV0Q2hhbmdlZCgpOwogfQogCiB2b2lkIFN0eWxlU2hlZXRJ
bnRlcm5hbDo6cGFyc2VyQWRkTmFtZXNwYWNlKGNvbnN0IEF0b21pY1N0cmluZyYgcHJlZml4LCBj
b25zdCBBdG9taWNTdHJpbmcmIHVyaSkKQEAgLTQxNSwxNiArNDE0LDYgQEAgRG9jdW1lbnQqIFN0
eWxlU2hlZXRJbnRlcm5hbDo6c2luZ2xlT3duZQogICAgIHJldHVybiBvd25lck5vZGUgPyBvd25l
ck5vZGUtPmRvY3VtZW50KCkgOiAwOwogfQogCi12b2lkIFN0eWxlU2hlZXRJbnRlcm5hbDo6c3R5
bGVTaGVldENoYW5nZWQoKQotewotICAgIG1faGFzTXV0YXRlZCA9IHRydWU7Ci0KLSAgICBEb2N1
bWVudCogb3duZXJEb2N1bWVudCA9IHNpbmdsZU93bmVyRG9jdW1lbnQoKTsKLSAgICBpZiAoIW93
bmVyRG9jdW1lbnQpCi0gICAgICAgIHJldHVybjsKLSAgICBvd25lckRvY3VtZW50LT5zdHlsZVJl
c29sdmVyQ2hhbmdlZChEZWZlclJlY2FsY1N0eWxlKTsKLX0KLQogS1VSTCBTdHlsZVNoZWV0SW50
ZXJuYWw6OmNvbXBsZXRlVVJMKGNvbnN0IFN0cmluZyYgdXJsKSBjb25zdAogewogICAgIHJldHVy
biBDU1NQYXJzZXI6OmNvbXBsZXRlVVJMKG1fcGFyc2VyQ29udGV4dCwgdXJsKTsKQEAgLTQ3Myw2
ICs0NjIsMjAgQEAgdm9pZCBTdHlsZVNoZWV0SW50ZXJuYWw6OnVucmVnaXN0ZXJDbGllbgogICAg
IG1fY2xpZW50cy5yZW1vdmUocG9zaXRpb24pOwogfQogCit2b2lkIFN0eWxlU2hlZXRJbnRlcm5h
bDo6YWRkZWRUb01lbW9yeUNhY2hlKCkKK3sKKyAgICBBU1NFUlQoIW1faXNJbk1lbW9yeUNhY2hl
KTsKKyAgICBBU1NFUlQoaXNDYWNoZWFibGUoKSk7CisgICAgbV9pc0luTWVtb3J5Q2FjaGUgPSB0
cnVlOworfQorCit2b2lkIFN0eWxlU2hlZXRJbnRlcm5hbDo6cmVtb3ZlZEZyb21NZW1vcnlDYWNo
ZSgpCit7CisgICAgQVNTRVJUKG1faXNJbk1lbW9yeUNhY2hlKTsKKyAgICBBU1NFUlQoaXNDYWNo
ZWFibGUoKSk7CisgICAgbV9pc0luTWVtb3J5Q2FjaGUgPSBmYWxzZTsKK30KKwogUGFzc1JlZlB0
cjxDU1NTdHlsZVNoZWV0PiBDU1NTdHlsZVNoZWV0OjpjcmVhdGVJbmxpbmUoTm9kZSogb3duZXJO
b2RlLCBjb25zdCBLVVJMJiBiYXNlVVJMLCBjb25zdCBTdHJpbmcmIGVuY29kaW5nKQogewogICAg
IENTU1BhcnNlckNvbnRleHQgcGFyc2VyQ29udGV4dChvd25lck5vZGUtPmRvY3VtZW50KCksIGJh
c2VVUkwsIGVuY29kaW5nKTsKQEAgLTUxNCwxNCArNTE3LDU5IEBAIENTU1N0eWxlU2hlZXQ6On5D
U1NTdHlsZVNoZWV0KCkKICAgICBtX2ludGVybmFsLT51bnJlZ2lzdGVyQ2xpZW50KHRoaXMpOwog
fQogCit2b2lkIENTU1N0eWxlU2hlZXQ6OndpbGxNdXRhdGVSdWxlcygpCit7CisgICAgLy8gSWYg
d2UgYXJlIHRoZSBvbmx5IGNsaWVudCBpdCBpcyBzYWZlIHRvIG11dGF0ZS4KKyAgICBpZiAobV9p
bnRlcm5hbC0+aGFzT25lQ2xpZW50KCkgJiYgIW1faW50ZXJuYWwtPmlzSW5NZW1vcnlDYWNoZSgp
KSB7CisgICAgICAgIG1faW50ZXJuYWwtPnNldE11dGFibGUoKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICAvLyBPbmx5IGNhY2hlYWJsZSBzdHlsZXNoZWV0cyBzaG91bGQgaGF2ZSBtdWx0
aXBsZSBjbGllbnRzLgorICAgIEFTU0VSVChtX2ludGVybmFsLT5pc0NhY2hlYWJsZSgpKTsKKwor
ICAgIC8vIENvcHktb24td3JpdGUuCisgICAgbV9pbnRlcm5hbC0+dW5yZWdpc3RlckNsaWVudCh0
aGlzKTsKKyAgICBtX2ludGVybmFsID0gbV9pbnRlcm5hbC0+Y29weSgpOworICAgIG1faW50ZXJu
YWwtPnJlZ2lzdGVyQ2xpZW50KHRoaXMpOworCisgICAgbV9pbnRlcm5hbC0+c2V0TXV0YWJsZSgp
OworCisgICAgLy8gQW55IGV4aXN0aW5nIENTU09NIHdyYXBwZXJzIG5lZWQgdG8gYmUgY29ubmVj
dGVkIHRvIHRoZSBjb3BpZWQgY2hpbGQgcnVsZXMuCisgICAgcmVhdHRhY2hDaGlsZFJ1bGVDU1NP
TVdyYXBwZXJzKCk7Cit9CisKK3ZvaWQgQ1NTU3R5bGVTaGVldDo6ZGlkTXV0YXRlUnVsZXMoKQor
eworICAgIEFTU0VSVChtX2ludGVybmFsLT5pc011dGFibGUoKSk7CisgICAgQVNTRVJUKG1faW50
ZXJuYWwtPmhhc09uZUNsaWVudCgpKTsKKworICAgIGRpZE11dGF0ZSgpOworfQorCit2b2lkIENT
U1N0eWxlU2hlZXQ6OmRpZE11dGF0ZSgpCit7CisgICAgRG9jdW1lbnQqIG93bmVyID0gb3duZXJE
b2N1bWVudCgpOworICAgIGlmICghb3duZXIpCisgICAgICAgIHJldHVybjsKKyAgICBvd25lci0+
c3R5bGVSZXNvbHZlckNoYW5nZWQoRGVmZXJSZWNhbGNTdHlsZSk7Cit9CisKK3ZvaWQgQ1NTU3R5
bGVTaGVldDo6cmVhdHRhY2hDaGlsZFJ1bGVDU1NPTVdyYXBwZXJzKCkKK3sKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgbV9jaGlsZFJ1bGVDU1NPTVdyYXBwZXJzLnNpemUoKTsgKytpKSB7
CisgICAgICAgIGlmICghbV9jaGlsZFJ1bGVDU1NPTVdyYXBwZXJzW2ldKQorICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgIG1fY2hpbGRSdWxlQ1NTT01XcmFwcGVyc1tpXS0+cmVhdHRhY2go
bV9pbnRlcm5hbC0+cnVsZUF0KGkpKTsKKyAgICB9Cit9CisKIHZvaWQgQ1NTU3R5bGVTaGVldDo6
c2V0RGlzYWJsZWQoYm9vbCBkaXNhYmxlZCkKIHsgCiAgICAgaWYgKGRpc2FibGVkID09IG1faXNE
aXNhYmxlZCkKICAgICAgICAgcmV0dXJuOwogICAgIG1faXNEaXNhYmxlZCA9IGRpc2FibGVkOwot
ICAgIERvY3VtZW50KiBvd25lciA9IG93bmVyRG9jdW1lbnQoKTsKLSAgICBpZiAob3duZXIpCi0g
ICAgICAgIG93bmVyLT5zdHlsZVJlc29sdmVyQ2hhbmdlZChEZWZlclJlY2FsY1N0eWxlKTsKKwor
ICAgIGRpZE11dGF0ZSgpOwogfQogCiB2b2lkIENTU1N0eWxlU2hlZXQ6OnNldE1lZGlhUXVlcmll
cyhQYXNzUmVmUHRyPE1lZGlhUXVlcnlTZXQ+IG1lZGlhUXVlcmllcykKQEAgLTU0NSw4ICs1OTMs
MTMgQEAgQ1NTUnVsZSogQ1NTU3R5bGVTaGVldDo6aXRlbSh1bnNpZ25lZCBpbgogICAgIEFTU0VS
VChtX2NoaWxkUnVsZUNTU09NV3JhcHBlcnMuc2l6ZSgpID09IHJ1bGVDb3VudCk7CiAgICAgCiAg
ICAgUmVmUHRyPENTU1J1bGU+JiBjc3NSdWxlID0gbV9jaGlsZFJ1bGVDU1NPTVdyYXBwZXJzW2lu
ZGV4XTsKLSAgICBpZiAoIWNzc1J1bGUpCi0gICAgICAgIGNzc1J1bGUgPSBtX2ludGVybmFsLT5j
cmVhdGVDaGlsZFJ1bGVDU1NPTVdyYXBwZXIoaW5kZXgsIHRoaXMpOworICAgIGlmICghY3NzUnVs
ZSkgeworICAgICAgICBpZiAoaW5kZXggPT0gMCAmJiBtX2ludGVybmFsLT5oYXNDaGFyc2V0UnVs
ZSgpKSB7CisgICAgICAgICAgICBBU1NFUlQoIW1faW50ZXJuYWwtPnJ1bGVBdCgwKSk7CisgICAg
ICAgICAgICBjc3NSdWxlID0gQ1NTQ2hhcnNldFJ1bGU6OmNyZWF0ZSh0aGlzLCBtX2ludGVybmFs
LT5lbmNvZGluZ0Zyb21DaGFyc2V0UnVsZSgpKTsKKyAgICAgICAgfSBlbHNlCisgICAgICAgICAg
ICBjc3NSdWxlID0gbV9pbnRlcm5hbC0+cnVsZUF0KGluZGV4KS0+Y3JlYXRlQ1NTT01XcmFwcGVy
KHRoaXMpOworICAgIH0KICAgICByZXR1cm4gY3NzUnVsZS5nZXQoKTsKIH0KIApAQCAtNTg0LDYg
KzYzNyw4IEBAIHVuc2lnbmVkIENTU1N0eWxlU2hlZXQ6Omluc2VydFJ1bGUoY29uc3QKICAgICAg
ICAgZWMgPSBTWU5UQVhfRVJSOwogICAgICAgICByZXR1cm4gMDsKICAgICB9CisgICAgUnVsZU11
dGF0aW9uIG11dGF0aW9uKHRoaXMpOworCiAgICAgYm9vbCBzdWNjZXNzID0gbV9pbnRlcm5hbC0+
d3JhcHBlckluc2VydFJ1bGUocnVsZSwgaW5kZXgpOwogICAgIGlmICghc3VjY2VzcykgewogICAg
ICAgICBlYyA9IEhJRVJBUkNIWV9SRVFVRVNUX0VSUjsKQEAgLTU5MSw2ICs2NDYsNyBAQCB1bnNp
Z25lZCBDU1NTdHlsZVNoZWV0OjppbnNlcnRSdWxlKGNvbnN0CiAgICAgfSAgICAgICAgCiAgICAg
aWYgKCFtX2NoaWxkUnVsZUNTU09NV3JhcHBlcnMuaXNFbXB0eSgpKQogICAgICAgICBtX2NoaWxk
UnVsZUNTU09NV3JhcHBlcnMuaW5zZXJ0KGluZGV4LCBSZWZQdHI8Q1NTUnVsZT4oKSk7CisKICAg
ICByZXR1cm4gaW5kZXg7CiB9CiAKQEAgLTYwMyw2ICs2NTksOCBAQCB2b2lkIENTU1N0eWxlU2hl
ZXQ6OmRlbGV0ZVJ1bGUodW5zaWduZWQgCiAgICAgICAgIGVjID0gSU5ERVhfU0laRV9FUlI7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CisgICAgUnVsZU11dGF0aW9uIG11dGF0aW9uKHRoaXMpOwor
CiAgICAgbV9pbnRlcm5hbC0+d3JhcHBlckRlbGV0ZVJ1bGUoaW5kZXgpOwogCiAgICAgaWYgKCFt
X2NoaWxkUnVsZUNTU09NV3JhcHBlcnMuaXNFbXB0eSgpKSB7CkBAIC02NjUsNCArNzIzLDI0IEBA
IHZvaWQgQ1NTU3R5bGVTaGVldDo6Y2xlYXJDaGlsZFJ1bGVDU1NPTVcKICAgICBtX2NoaWxkUnVs
ZUNTU09NV3JhcHBlcnMuY2xlYXIoKTsKIH0KIAorQ1NTU3R5bGVTaGVldDo6UnVsZU11dGF0aW9u
OjpSdWxlTXV0YXRpb24oQ1NTU3R5bGVTaGVldCogc2hlZXQpCisgICAgOiBtX3N0eWxlU2hlZXQo
c2hlZXQpCit7CisgICAgaWYgKG1fc3R5bGVTaGVldCkKKyAgICAgICAgbV9zdHlsZVNoZWV0LT53
aWxsTXV0YXRlUnVsZXMoKTsKK30KKworQ1NTU3R5bGVTaGVldDo6UnVsZU11dGF0aW9uOjpSdWxl
TXV0YXRpb24oQ1NTUnVsZSogcnVsZSkKKyAgICA6IG1fc3R5bGVTaGVldChydWxlID8gcnVsZS0+
cGFyZW50U3R5bGVTaGVldCgpIDogMCkKK3sKKyAgICBpZiAobV9zdHlsZVNoZWV0KQorICAgICAg
ICBtX3N0eWxlU2hlZXQtPndpbGxNdXRhdGVSdWxlcygpOworfQorCitDU1NTdHlsZVNoZWV0OjpS
dWxlTXV0YXRpb246On5SdWxlTXV0YXRpb24oKQoreworICAgIGlmIChtX3N0eWxlU2hlZXQpCisg
ICAgICAgIG1fc3R5bGVTaGVldC0+ZGlkTXV0YXRlUnVsZXMoKTsKK30KKwogfQpJbmRleDogU291
cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlU2hlZXQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTU3R5bGVTaGVldC5oCShyZXZpc2lvbiAxMTU5NTkpCisrKyBTb3VyY2UvV2Vi
Q29yZS9jc3MvQ1NTU3R5bGVTaGVldC5oCSh3b3JraW5nIGNvcHkpCkBAIC02NSw4ICs2NSw2IEBA
IHB1YmxpYzoKIAogICAgIGNvbnN0IEF0b21pY1N0cmluZyYgZGV0ZXJtaW5lTmFtZXNwYWNlKGNv
bnN0IEF0b21pY1N0cmluZyYgcHJlZml4KTsKIAotICAgIHZvaWQgc3R5bGVTaGVldENoYW5nZWQo
KTsKLQogICAgIHZvaWQgcGFyc2VBdXRob3JTdHlsZVNoZWV0KGNvbnN0IENhY2hlZENTU1N0eWxl
U2hlZXQqLCBjb25zdCBTZWN1cml0eU9yaWdpbiopOwogICAgIGJvb2wgcGFyc2VTdHJpbmcoY29u
c3QgU3RyaW5nJik7CiAgICAgYm9vbCBwYXJzZVN0cmluZ0F0TGluZShjb25zdCBTdHJpbmcmLCBp
bnQgc3RhcnRMaW5lTnVtYmVyKTsKQEAgLTEwMSw2ICs5OSw4IEBAIHB1YmxpYzoKIAogICAgIHZv
aWQgY2xlYXJSdWxlcygpOwogCisgICAgYm9vbCBoYXNDaGFyc2V0UnVsZSgpIGNvbnN0IHsgcmV0
dXJuICFtX2VuY29kaW5nRnJvbUNoYXJzZXRSdWxlLmlzTnVsbCgpOyB9CisgICAgU3RyaW5nIGVu
Y29kaW5nRnJvbUNoYXJzZXRSdWxlKCkgY29uc3QgeyByZXR1cm4gbV9lbmNvZGluZ0Zyb21DaGFy
c2V0UnVsZTsgfQogICAgIC8vIFJ1bGVzIG90aGVyIHRoYW4gQGNoYXJzZXQgYW5kIEBpbXBvcnQu
CiAgICAgY29uc3QgVmVjdG9yPFJlZlB0cjxTdHlsZVJ1bGVCYXNlPiA+JiBjaGlsZFJ1bGVzKCkg
Y29uc3QgeyByZXR1cm4gbV9jaGlsZFJ1bGVzOyB9CiAgICAgY29uc3QgVmVjdG9yPFJlZlB0cjxT
dHlsZVJ1bGVJbXBvcnQ+ID4mIGltcG9ydFJ1bGVzKCkgY29uc3QgeyByZXR1cm4gbV9pbXBvcnRS
dWxlczsgfQpAQCAtMTIwLDcgKzEyMCw4IEBAIHB1YmxpYzoKICAgICBjb25zdCBLVVJMJiBiYXNl
VVJMKCkgY29uc3QgeyByZXR1cm4gbV9wYXJzZXJDb250ZXh0LmJhc2VVUkw7IH0KIAogICAgIHVu
c2lnbmVkIHJ1bGVDb3VudCgpIGNvbnN0OwotICAgIAorICAgIFN0eWxlUnVsZUJhc2UqIHJ1bGVB
dCh1bnNpZ25lZCBpbmRleCkgY29uc3Q7CisKICAgICBib29sIHVzZXNSZW1Vbml0cygpIGNvbnN0
IHsgcmV0dXJuIG1fdXNlc1JlbVVuaXRzOyB9CiAKICAgICB1bnNpZ25lZCBlc3RpbWF0ZWRTaXpl
SW5CeXRlcygpIGNvbnN0OwpAQCAtMTI4LDE5ICsxMjksMjQgQEAgcHVibGljOgogICAgIGJvb2wg
d3JhcHBlckluc2VydFJ1bGUoUGFzc1JlZlB0cjxTdHlsZVJ1bGVCYXNlPiwgdW5zaWduZWQgaW5k
ZXgpOwogICAgIHZvaWQgd3JhcHBlckRlbGV0ZVJ1bGUodW5zaWduZWQgaW5kZXgpOwogCi0gICAg
UGFzc1JlZlB0cjxDU1NSdWxlPiBjcmVhdGVDaGlsZFJ1bGVDU1NPTVdyYXBwZXIodW5zaWduZWQg
aW5kZXgsIENTU1N0eWxlU2hlZXQqIHBhcmVudFdyYXBwZXIpOwotCiAgICAgUGFzc1JlZlB0cjxT
dHlsZVNoZWV0SW50ZXJuYWw+IGNvcHkoKSBjb25zdCB7IHJldHVybiBhZG9wdFJlZihuZXcgU3R5
bGVTaGVldEludGVybmFsKCp0aGlzKSk7IH0KIAogICAgIHZvaWQgcmVnaXN0ZXJDbGllbnQoQ1NT
U3R5bGVTaGVldCopOwogICAgIHZvaWQgdW5yZWdpc3RlckNsaWVudChDU1NTdHlsZVNoZWV0Kik7
CisgICAgYm9vbCBoYXNPbmVDbGllbnQoKSB7IHJldHVybiBtX2NsaWVudHMuc2l6ZSgpID09IDE7
IH0KKworICAgIGJvb2wgaXNNdXRhYmxlKCkgY29uc3QgeyByZXR1cm4gbV9pc011dGFibGU7IH0K
KyAgICB2b2lkIHNldE11dGFibGUoKSB7IG1faXNNdXRhYmxlID0gdHJ1ZTsgfQorCisgICAgYm9v
bCBpc0luTWVtb3J5Q2FjaGUoKSBjb25zdCB7IHJldHVybiBtX2lzSW5NZW1vcnlDYWNoZTsgfQor
ICAgIHZvaWQgYWRkZWRUb01lbW9yeUNhY2hlKCk7CisgICAgdm9pZCByZW1vdmVkRnJvbU1lbW9y
eUNhY2hlKCk7CiAKIHByaXZhdGU6CiAgICAgU3R5bGVTaGVldEludGVybmFsKFN0eWxlUnVsZUlt
cG9ydCogb3duZXJSdWxlLCBjb25zdCBTdHJpbmcmIG9yaWdpbmFsVVJMLCBjb25zdCBLVVJMJiBi
YXNlVVJMLCBjb25zdCBDU1NQYXJzZXJDb250ZXh0Jik7CiAgICAgU3R5bGVTaGVldEludGVybmFs
KGNvbnN0IFN0eWxlU2hlZXRJbnRlcm5hbCYpOwogCiAgICAgdm9pZCBjbGVhckNoYXJzZXRSdWxl
KCk7Ci0gICAgYm9vbCBoYXNDaGFyc2V0UnVsZSgpIGNvbnN0IHsgcmV0dXJuICFtX2VuY29kaW5n
RnJvbUNoYXJzZXRSdWxlLmlzTnVsbCgpOyB9CiAKICAgICBTdHlsZVJ1bGVJbXBvcnQqIG1fb3du
ZXJSdWxlOwogCkBAIC0xNTgsNyArMTY0LDggQEAgcHJpdmF0ZToKICAgICBib29sIG1faGFzU3lu
dGFjdGljYWxseVZhbGlkQ1NTSGVhZGVyIDogMTsKICAgICBib29sIG1fZGlkTG9hZEVycm9yT2Nj
dXIgOiAxOwogICAgIGJvb2wgbV91c2VzUmVtVW5pdHMgOiAxOwotICAgIGJvb2wgbV9oYXNNdXRh
dGVkIDogMTsKKyAgICBib29sIG1faXNNdXRhYmxlIDogMTsKKyAgICBib29sIG1faXNJbk1lbW9y
eUNhY2hlIDogMTsKICAgICAKICAgICBDU1NQYXJzZXJDb250ZXh0IG1fcGFyc2VyQ29udGV4dDsK
IApAQCAtMjA3LDEzICsyMTQsMjcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBpc0xvYWRp
bmcoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBtX2ludGVybmFsLT5pc0xvYWRpbmcoKTsgfQog
ICAgIAogICAgIHZvaWQgY2xlYXJPd25lclJ1bGUoKSB7IG1fb3duZXJSdWxlID0gMDsgfQotICAg
IHZvaWQgc3R5bGVTaGVldENoYW5nZWQoKSB7IG1faW50ZXJuYWwtPnN0eWxlU2hlZXRDaGFuZ2Vk
KCk7IH0KICAgICBEb2N1bWVudCogb3duZXJEb2N1bWVudCgpIGNvbnN0OwogICAgIE1lZGlhUXVl
cnlTZXQqIG1lZGlhUXVlcmllcygpIGNvbnN0IHsgcmV0dXJuIG1fbWVkaWFRdWVyaWVzLmdldCgp
OyB9CiAgICAgdm9pZCBzZXRNZWRpYVF1ZXJpZXMoUGFzc1JlZlB0cjxNZWRpYVF1ZXJ5U2V0Pik7
CiAgICAgdm9pZCBzZXRUaXRsZShjb25zdCBTdHJpbmcmIHRpdGxlKSB7IG1fdGl0bGUgPSB0aXRs
ZTsgfQorCisgICAgY2xhc3MgUnVsZU11dGF0aW9uIHsKKyAgICBwdWJsaWM6CisgICAgICAgIFJ1
bGVNdXRhdGlvbihDU1NTdHlsZVNoZWV0Kik7CisgICAgICAgIFJ1bGVNdXRhdGlvbihDU1NSdWxl
Kik7CisgICAgICAgIH5SdWxlTXV0YXRpb24oKTsKKworICAgIHByaXZhdGU6CisgICAgICAgIENT
U1N0eWxlU2hlZXQqIG1fc3R5bGVTaGVldDsKKyAgICB9OworCisgICAgdm9pZCB3aWxsTXV0YXRl
UnVsZXMoKTsKKyAgICB2b2lkIGRpZE11dGF0ZVJ1bGVzKCk7CisgICAgdm9pZCBkaWRNdXRhdGUo
KTsKICAgICAKICAgICB2b2lkIGNsZWFyQ2hpbGRSdWxlQ1NTT01XcmFwcGVycygpOworICAgIHZv
aWQgcmVhdHRhY2hDaGlsZFJ1bGVDU1NPTVdyYXBwZXJzKCk7CiAKICAgICBTdHlsZVNoZWV0SW50
ZXJuYWwqIGludGVybmFsKCkgY29uc3QgeyByZXR1cm4gbV9pbnRlcm5hbC5nZXQoKTsgfQogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFMaXN0LmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9jc3MvTWVkaWFMaXN0LmNwcAkocmV2aXNpb24gMTE1OTU5KQorKysgU291cmNl
L1dlYkNvcmUvY3NzL01lZGlhTGlzdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIzMCwxMiArMjMw
LDE1IEBAIE1lZGlhTGlzdDo6fk1lZGlhTGlzdCgpCiAKIHZvaWQgTWVkaWFMaXN0OjpzZXRNZWRp
YVRleHQoY29uc3QgU3RyaW5nJiB2YWx1ZSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CisgICAgQ1NT
U3R5bGVTaGVldDo6UnVsZU11dGF0aW9uIG11dGF0aW9uKG1fcGFyZW50UnVsZSk7CisKICAgICBi
b29sIHN1Y2Nlc3MgPSBtX21lZGlhUXVlcmllcy0+cGFyc2UodmFsdWUpOwogICAgIGlmICghc3Vj
Y2VzcykgewogICAgICAgICBlYyA9IFNZTlRBWF9FUlI7CiAgICAgICAgIHJldHVybjsKICAgICB9
Ci0gICAgbm90aWZ5Q2hhbmdlZCgpOworICAgIGlmIChtX3BhcmVudFN0eWxlU2hlZXQpCisgICAg
ICAgIG1fcGFyZW50U3R5bGVTaGVldC0+ZGlkTXV0YXRlKCk7CiB9CiAKIFN0cmluZyBNZWRpYUxp
c3Q6Oml0ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0CkBAIC0yNDgsMzEgKzI1MSwzNSBAQCBTdHJp
bmcgTWVkaWFMaXN0OjppdGVtKHVuc2lnbmVkIGluZGV4KSBjCiAKIHZvaWQgTWVkaWFMaXN0Ojpk
ZWxldGVNZWRpdW0oY29uc3QgU3RyaW5nJiBtZWRpdW0sIEV4Y2VwdGlvbkNvZGUmIGVjKQogewor
ICAgIENTU1N0eWxlU2hlZXQ6OlJ1bGVNdXRhdGlvbiBtdXRhdGlvbihtX3BhcmVudFJ1bGUpOwor
CiAgICAgYm9vbCBzdWNjZXNzID0gbV9tZWRpYVF1ZXJpZXMtPnJlbW92ZShtZWRpdW0pOwogICAg
IGlmICghc3VjY2VzcykgewogICAgICAgICBlYyA9IE5PVF9GT1VORF9FUlI7CiAgICAgICAgIHJl
dHVybjsKICAgICB9Ci0gICAgbm90aWZ5Q2hhbmdlZCgpOworICAgIGlmIChtX3BhcmVudFN0eWxl
U2hlZXQpCisgICAgICAgIG1fcGFyZW50U3R5bGVTaGVldC0+ZGlkTXV0YXRlKCk7CiB9CiAKIHZv
aWQgTWVkaWFMaXN0OjphcHBlbmRNZWRpdW0oY29uc3QgU3RyaW5nJiBtZWRpdW0sIEV4Y2VwdGlv
bkNvZGUmIGVjKQogeworICAgIENTU1N0eWxlU2hlZXQ6OlJ1bGVNdXRhdGlvbiBtdXRhdGlvbiht
X3BhcmVudFJ1bGUpOworCiAgICAgYm9vbCBzdWNjZXNzID0gbV9tZWRpYVF1ZXJpZXMtPmFkZCht
ZWRpdW0pOwogICAgIGlmICghc3VjY2VzcykgewogICAgICAgICAvLyBGSVhNRTogU2hvdWxkIHRo
aXMgcmVhbGx5IGJlIElOVkFMSURfQ0hBUkFDVEVSX0VSUj8KICAgICAgICAgZWMgPSBJTlZBTElE
X0NIQVJBQ1RFUl9FUlI7CiAgICAgICAgIHJldHVybjsKICAgICB9Ci0gICAgbm90aWZ5Q2hhbmdl
ZCgpOworICAgIGlmIChtX3BhcmVudFN0eWxlU2hlZXQpCisgICAgICAgIG1fcGFyZW50U3R5bGVT
aGVldC0+ZGlkTXV0YXRlKCk7CiB9CiAKLXZvaWQgTWVkaWFMaXN0Ojpub3RpZnlDaGFuZ2VkKCkK
K3ZvaWQgTWVkaWFMaXN0OjpyZWF0dGFjaChNZWRpYVF1ZXJ5U2V0KiBtZWRpYVF1ZXJpZXMpCiB7
Ci0gICAgQ1NTU3R5bGVTaGVldCogcGFyZW50U3R5bGVTaGVldCA9IG1fcGFyZW50UnVsZSA/IG1f
cGFyZW50UnVsZS0+cGFyZW50U3R5bGVTaGVldCgpIDogbV9wYXJlbnRTdHlsZVNoZWV0OwotICAg
IGlmICghcGFyZW50U3R5bGVTaGVldCkKLSAgICAgICAgcmV0dXJuOwotICAgIHBhcmVudFN0eWxl
U2hlZXQtPnN0eWxlU2hlZXRDaGFuZ2VkKCk7CisgICAgQVNTRVJUKG1lZGlhUXVlcmllcyk7Cisg
ICAgbV9tZWRpYVF1ZXJpZXMgPSBtZWRpYVF1ZXJpZXM7CiB9CiAKIH0KSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2Nzcy9NZWRpYUxpc3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3Mv
TWVkaWFMaXN0LmgJKHJldmlzaW9uIDExNTk1OSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9NZWRp
YUxpc3QuaAkod29ya2luZyBjb3B5KQpAQCAtMTA0LDEzICsxMDQsMTMgQEAgcHVibGljOgogICAg
IHZvaWQgY2xlYXJQYXJlbnRSdWxlKCkgeyBBU1NFUlQobV9wYXJlbnRSdWxlKTsgbV9wYXJlbnRS
dWxlID0gMDsgfQogICAgIGNvbnN0IE1lZGlhUXVlcnlTZXQqIHF1ZXJpZXMoKSBjb25zdCB7IHJl
dHVybiBtX21lZGlhUXVlcmllcy5nZXQoKTsgfQogCisgICAgdm9pZCByZWF0dGFjaChNZWRpYVF1
ZXJ5U2V0Kik7CisKIHByaXZhdGU6CiAgICAgTWVkaWFMaXN0KCk7CiAgICAgTWVkaWFMaXN0KE1l
ZGlhUXVlcnlTZXQqLCBDU1NTdHlsZVNoZWV0KiBwYXJlbnRTaGVldCk7CiAgICAgTWVkaWFMaXN0
KE1lZGlhUXVlcnlTZXQqLCBDU1NSdWxlKiBwYXJlbnRSdWxlKTsKIAotICAgIHZvaWQgbm90aWZ5
Q2hhbmdlZCgpOwotCiAgICAgUmVmUHRyPE1lZGlhUXVlcnlTZXQ+IG1fbWVkaWFRdWVyaWVzOwog
ICAgIENTU1N0eWxlU2hlZXQqIG1fcGFyZW50U3R5bGVTaGVldDsKICAgICBDU1NSdWxlKiBtX3Bh
cmVudFJ1bGU7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvUHJvcGVydHlTZXRDU1NTdHlsZURl
Y2xhcmF0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvUHJvcGVydHlT
ZXRDU1NTdHlsZURlY2xhcmF0aW9uLmNwcAkocmV2aXNpb24gMTE1OTU5KQorKysgU291cmNlL1dl
YkNvcmUvY3NzL1Byb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbi5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTE1MSwxMSArMTUxLDE0IEBAIHZvaWQgUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0
aW9uOjpzZXQKICNpZiBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQogICAgIFN0eWxlQXR0cmli
dXRlTXV0YXRpb25TY29wZSBtdXRhdGlvblNjb3BlKHRoaXMpOwogI2VuZGlmCisgICAgd2lsbE11
dGF0ZSgpOworCiAgICAgZWMgPSAwOwogICAgIC8vIEZJWE1FOiBEZXRlY3Qgc3ludGF4IGVycm9y
cyBhbmQgc2V0IGVjLgogICAgIG1fcHJvcGVydHlTZXQtPnBhcnNlRGVjbGFyYXRpb24odGV4dCwg
Y29udGV4dFN0eWxlU2hlZXQoKSk7CiAKLSAgICBkaWRNdXRhdGUoKTsKKyAgICBkaWRNdXRhdGUo
dHJ1ZSk7CisKICNpZiBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJTKQogICAgIG11dGF0aW9uU2Nv
cGUuZW5xdWV1ZU11dGF0aW9uUmVjb3JkKCk7ICAgIAogI2VuZGlmCkBAIC0yMTIsMTMgKzIxNSwx
OSBAQCB2b2lkIFByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbjo6c2V0CiAgICAgQ1NTUHJv
cGVydHlJRCBwcm9wZXJ0eUlEID0gY3NzUHJvcGVydHlJRChwcm9wZXJ0eU5hbWUpOwogICAgIGlm
ICghcHJvcGVydHlJRCkKICAgICAgICAgcmV0dXJuOworCiAgICAgYm9vbCBpbXBvcnRhbnQgPSBw
cmlvcml0eS5maW5kKCJpbXBvcnRhbnQiLCAwLCBmYWxzZSkgIT0gbm90Rm91bmQ7CisKKyAgICB3
aWxsTXV0YXRlKCk7CisKICAgICBlYyA9IDA7CiAgICAgYm9vbCBjaGFuZ2VkID0gbV9wcm9wZXJ0
eVNldC0+c2V0UHJvcGVydHkocHJvcGVydHlJRCwgdmFsdWUsIGltcG9ydGFudCwgY29udGV4dFN0
eWxlU2hlZXQoKSk7CisKKyAgICBkaWRNdXRhdGUoY2hhbmdlZCk7CisKICAgICBpZiAoY2hhbmdl
ZCkgewogICAgICAgICAvLyBDU1MgRE9NIHJlcXVpcmVzIHJhaXNpbmcgU1lOVEFYX0VSUiBvZiBw
YXJzaW5nIGZhaWxlZCwgYnV0IHRoaXMgaXMgdG9vIGRhbmdlcm91cyBmb3IgY29tcGF0aWJpbGl0
eSwKICAgICAgICAgLy8gc2VlIDxodHRwOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD03Mjk2Pi4KLSAgICAgICAgZGlkTXV0YXRlKCk7CiAjaWYgRU5BQkxFKE1VVEFUSU9OX09CU0VS
VkVSUykKICAgICAgICAgbXV0YXRpb25TY29wZS5lbnF1ZXVlTXV0YXRpb25SZWNvcmQoKTsKICNl
bmRpZgpAQCAtMjMzLDExICsyNDIsMTYgQEAgU3RyaW5nIFByb3BlcnR5U2V0Q1NTU3R5bGVEZWNs
YXJhdGlvbjo6cgogICAgIENTU1Byb3BlcnR5SUQgcHJvcGVydHlJRCA9IGNzc1Byb3BlcnR5SUQo
cHJvcGVydHlOYW1lKTsKICAgICBpZiAoIXByb3BlcnR5SUQpCiAgICAgICAgIHJldHVybiBTdHJp
bmcoKTsKKworICAgIHdpbGxNdXRhdGUoKTsKKwogICAgIGVjID0gMDsKICAgICBTdHJpbmcgcmVz
dWx0OwogICAgIGJvb2wgY2hhbmdlcyA9IG1fcHJvcGVydHlTZXQtPnJlbW92ZVByb3BlcnR5KHBy
b3BlcnR5SUQsICZyZXN1bHQpOworCisgICAgZGlkTXV0YXRlKGNoYW5nZXMpOworCiAgICAgaWYg
KGNoYW5nZXMpIHsKLSAgICAgICAgZGlkTXV0YXRlKCk7CiAjaWYgRU5BQkxFKE1VVEFUSU9OX09C
U0VSVkVSUykKICAgICAgICAgbXV0YXRpb25TY29wZS5lbnF1ZXVlTXV0YXRpb25SZWNvcmQoKTsK
ICNlbmRpZgpAQCAtMjYwLDIyICsyNzQsMjAgQEAgdm9pZCBQcm9wZXJ0eVNldENTU1N0eWxlRGVj
bGFyYXRpb246OnNldAogI2lmIEVOQUJMRShNVVRBVElPTl9PQlNFUlZFUlMpCiAgICAgU3R5bGVB
dHRyaWJ1dGVNdXRhdGlvblNjb3BlIG11dGF0aW9uU2NvcGUodGhpcyk7CiAjZW5kaWYKKyAgICB3
aWxsTXV0YXRlKCk7CisKICAgICBlYyA9IDA7CiAgICAgYm9vbCBjaGFuZ2VkID0gbV9wcm9wZXJ0
eVNldC0+c2V0UHJvcGVydHkocHJvcGVydHlJRCwgdmFsdWUsIGltcG9ydGFudCwgY29udGV4dFN0
eWxlU2hlZXQoKSk7CisKKyAgICBkaWRNdXRhdGUoY2hhbmdlZCk7CisKICAgICBpZiAoY2hhbmdl
ZCkgewotICAgICAgICBkaWRNdXRhdGUoKTsKICNpZiBFTkFCTEUoTVVUQVRJT05fT0JTRVJWRVJT
KQogICAgICAgICBtdXRhdGlvblNjb3BlLmVucXVldWVNdXRhdGlvblJlY29yZCgpOwogI2VuZGlm
CiAgICAgfQogfQogCi12b2lkIFByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbjo6ZGlkTXV0
YXRlKCkKLXsKLSAgICBtX2Nzc29tQ1NTVmFsdWVDbG9uZXMuY2xlYXIoKTsKLSAgICBzZXROZWVk
c1N0eWxlUmVjYWxjKCk7Ci19Ci0KIENTU1ZhbHVlKiBQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFy
YXRpb246OmNsb25lQW5kQ2FjaGVGb3JDU1NPTShDU1NWYWx1ZSogaW50ZXJuYWxWYWx1ZSkKIHsK
ICAgICBpZiAoIWludGVybmFsVmFsdWUpCkBAIC0zMzgsMTIgKzM1MCwyMCBAQCB2b2lkIFN0eWxl
UnVsZUNTU1N0eWxlRGVjbGFyYXRpb246OmRlcmVmCiAgICAgICAgIGRlbGV0ZSB0aGlzOwogfQog
Ci12b2lkIFN0eWxlUnVsZUNTU1N0eWxlRGVjbGFyYXRpb246OnNldE5lZWRzU3R5bGVSZWNhbGMo
KQordm9pZCBTdHlsZVJ1bGVDU1NTdHlsZURlY2xhcmF0aW9uOjp3aWxsTXV0YXRlKCkKIHsKLSAg
ICBpZiAoQ1NTU3R5bGVTaGVldCogc3R5bGVTaGVldCA9IHBhcmVudFN0eWxlU2hlZXQoKSkgewot
ICAgICAgICBpZiAoRG9jdW1lbnQqIGRvY3VtZW50ID0gc3R5bGVTaGVldC0+b3duZXJEb2N1bWVu
dCgpKQotICAgICAgICAgICAgZG9jdW1lbnQtPnN0eWxlUmVzb2x2ZXJDaGFuZ2VkKERlZmVyUmVj
YWxjU3R5bGUpOwotICAgIH0KKyAgICBpZiAobV9wYXJlbnRSdWxlICYmIG1fcGFyZW50UnVsZS0+
cGFyZW50U3R5bGVTaGVldCgpKQorICAgICAgICBtX3BhcmVudFJ1bGUtPnBhcmVudFN0eWxlU2hl
ZXQoKS0+d2lsbE11dGF0ZVJ1bGVzKCk7Cit9CisKK3ZvaWQgU3R5bGVSdWxlQ1NTU3R5bGVEZWNs
YXJhdGlvbjo6ZGlkTXV0YXRlKGJvb2wgY2hhbmdlcykKK3sKKyAgICBpZiAoY2hhbmdlcykKKyAg
ICAgICAgbV9jc3NvbUNTU1ZhbHVlQ2xvbmVzLmNsZWFyKCk7CisKKyAgICAvLyBTdHlsZSBzaGVl
dCBtdXRhdGlvbiBuZWVkcyB0byBiZSBzaWduYWxlZCBldmVuIGlmIHRoZSBjaGFuZ2UgZmFpbGVk
LiB3aWxsTXV0YXRlUnVsZXMvZGlkTXV0YXRlUnVsZXMgbXVzdCBwYWlyLgorICAgIGlmIChtX3Bh
cmVudFJ1bGUgJiYgbV9wYXJlbnRSdWxlLT5wYXJlbnRTdHlsZVNoZWV0KCkpCisgICAgICAgIG1f
cGFyZW50UnVsZS0+cGFyZW50U3R5bGVTaGVldCgpLT5kaWRNdXRhdGVSdWxlcygpOwogfQogCiBD
U1NTdHlsZVNoZWV0KiBTdHlsZVJ1bGVDU1NTdHlsZURlY2xhcmF0aW9uOjpwYXJlbnRTdHlsZVNo
ZWV0KCkgY29uc3QKQEAgLTM1MSwxNCArMzcxLDI2IEBAIENTU1N0eWxlU2hlZXQqIFN0eWxlUnVs
ZUNTU1N0eWxlRGVjbGFyYXQKICAgICByZXR1cm4gbV9wYXJlbnRSdWxlID8gbV9wYXJlbnRSdWxl
LT5wYXJlbnRTdHlsZVNoZWV0KCkgOiAwOwogfQogCi12b2lkIElubGluZUNTU1N0eWxlRGVjbGFy
YXRpb246OnNldE5lZWRzU3R5bGVSZWNhbGMoKQordm9pZCBTdHlsZVJ1bGVDU1NTdHlsZURlY2xh
cmF0aW9uOjpyZWF0dGFjaChTdHlsZVByb3BlcnR5U2V0KiBwcm9wZXJ0eVNldCkKK3sKKyAgICBB
U1NFUlQocHJvcGVydHlTZXQpOworICAgIG1fcHJvcGVydHlTZXQtPmRlcmVmKCk7CisgICAgbV9w
cm9wZXJ0eVNldCA9IHByb3BlcnR5U2V0OworICAgIG1fcHJvcGVydHlTZXQtPnJlZigpOworfQor
Cit2b2lkIElubGluZUNTU1N0eWxlRGVjbGFyYXRpb246OmRpZE11dGF0ZShib29sIGNoYW5nZXMp
CiB7CisgICAgaWYgKCFjaGFuZ2VzKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2Nzc29tQ1NT
VmFsdWVDbG9uZXMuY2xlYXIoKTsKKwogICAgIGlmICghbV9wYXJlbnRFbGVtZW50KQogICAgICAg
ICByZXR1cm47CiAgICAgbV9wYXJlbnRFbGVtZW50LT5zZXROZWVkc1N0eWxlUmVjYWxjKElubGlu
ZVN0eWxlQ2hhbmdlKTsKICAgICBtX3BhcmVudEVsZW1lbnQtPmludmFsaWRhdGVTdHlsZUF0dHJp
YnV0ZSgpOwogICAgIFN0eWxlQXR0cmlidXRlTXV0YXRpb25TY29wZSh0aGlzKS5kaWRJbnZhbGlk
YXRlU3R5bGVBdHRyKCk7Ci0gICAgcmV0dXJuOwogfQogCiBDU1NTdHlsZVNoZWV0KiBJbmxpbmVD
U1NTdHlsZURlY2xhcmF0aW9uOjpwYXJlbnRTdHlsZVNoZWV0KCkgY29uc3QKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2Nzcy9Qcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb24uaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uLmgJ
KHJldmlzaW9uIDExNTk1OSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9Qcm9wZXJ0eVNldENTU1N0
eWxlRGVjbGFyYXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtNjgsOSArNjgsOSBAQCBwcml2YXRl
OgogICAgIHZpcnR1YWwgYm9vbCBjc3NQcm9wZXJ0eU1hdGNoZXMoY29uc3QgQ1NTUHJvcGVydHkq
KSBjb25zdCBPVkVSUklERTsKICAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8U3R5bGVQcm9wZXJ0eVNl
dD4gY29weSgpIGNvbnN0IE9WRVJSSURFOwogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxTdHlsZVBy
b3BlcnR5U2V0PiBtYWtlTXV0YWJsZSgpIE9WRVJSSURFOwotICAgIHZpcnR1YWwgdm9pZCBzZXRO
ZWVkc1N0eWxlUmVjYWxjKCkgeyB9Ci0gICAgCi0gICAgdm9pZCBkaWRNdXRhdGUoKTsKKworICAg
IHZpcnR1YWwgdm9pZCB3aWxsTXV0YXRlKCkgeyB9CisgICAgdmlydHVhbCB2b2lkIGRpZE11dGF0
ZShib29sKSB7IH0KICAgICBDU1NWYWx1ZSogY2xvbmVBbmRDYWNoZUZvckNTU09NKENTU1ZhbHVl
Kik7CiAgICAgCiBwcm90ZWN0ZWQ6CkBAIC05MSw2ICs5MSw4IEBAIHB1YmxpYzoKICAgICB2aXJ0
dWFsIHZvaWQgcmVmKCkgT1ZFUlJJREU7CiAgICAgdmlydHVhbCB2b2lkIGRlcmVmKCkgT1ZFUlJJ
REU7CiAKKyAgICB2b2lkIHJlYXR0YWNoKFN0eWxlUHJvcGVydHlTZXQqKTsKKwogcHJpdmF0ZToK
ICAgICBTdHlsZVJ1bGVDU1NTdHlsZURlY2xhcmF0aW9uKFN0eWxlUHJvcGVydHlTZXQqLCBDU1NS
dWxlKik7CiAgICAgdmlydHVhbCB+U3R5bGVSdWxlQ1NTU3R5bGVEZWNsYXJhdGlvbigpOwpAQCAt
OTgsOCArMTAwLDEwIEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBDU1NTdHlsZVNoZWV0KiBwYXJl
bnRTdHlsZVNoZWV0KCkgY29uc3QgT1ZFUlJJREU7CiAKICAgICB2aXJ0dWFsIENTU1J1bGUqIHBh
cmVudFJ1bGUoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBtX3BhcmVudFJ1bGU7ICB9Ci0gICAg
dmlydHVhbCB2b2lkIHNldE5lZWRzU3R5bGVSZWNhbGMoKSBPVkVSUklERTsKLSAgICAKKworICAg
IHZpcnR1YWwgdm9pZCB3aWxsTXV0YXRlKCkgT1ZFUlJJREU7CisgICAgdmlydHVhbCB2b2lkIGRp
ZE11dGF0ZShib29sIGNoYW5nZXMpIE9WRVJSSURFOworCiAgICAgdW5zaWduZWQgbV9yZWZDb3Vu
dDsKICAgICBDU1NSdWxlKiBtX3BhcmVudFJ1bGU7CiB9OwpAQCAtMTE3LDcgKzEyMSw4IEBAIHBy
aXZhdGU6CiAgICAgdmlydHVhbCBDU1NTdHlsZVNoZWV0KiBwYXJlbnRTdHlsZVNoZWV0KCkgY29u
c3QgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBTdHlsZWRFbGVtZW50KiBwYXJlbnRFbGVtZW50KCkg
Y29uc3QgT1ZFUlJJREUgeyByZXR1cm4gbV9wYXJlbnRFbGVtZW50OyB9CiAgICAgdmlydHVhbCB2
b2lkIGNsZWFyUGFyZW50RWxlbWVudCgpIE9WRVJSSURFIHsgbV9wYXJlbnRFbGVtZW50ID0gMDsg
fQotICAgIHZpcnR1YWwgdm9pZCBzZXROZWVkc1N0eWxlUmVjYWxjKCkgT1ZFUlJJREU7CisKKyAg
ICB2aXJ0dWFsIHZvaWQgZGlkTXV0YXRlKGJvb2wgY2hhbmdlcykgT1ZFUlJJREU7CiAgICAgCiAg
ICAgU3R5bGVkRWxlbWVudCogbV9wYXJlbnRFbGVtZW50OwogfTsKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2Nzcy9XZWJLaXRDU1NLZXlmcmFtZXNSdWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViQ29yZS9jc3MvV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZS5jcHAJKHJldmlzaW9uIDExNTk1OSkK
KysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NLZXlmcmFtZXNSdWxlLmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTA0LDEyICsxMDQsOSBAQCBXZWJLaXRDU1NLZXlmcmFtZXNSdWxlOjp+V2Vi
S2l0Q1NTS2V5ZnJhCiAKIHZvaWQgV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZTo6c2V0TmFtZShjb25z
dCBTdHJpbmcmIG5hbWUpCiB7Ci0gICAgbV9rZXlmcmFtZXNSdWxlLT5zZXROYW1lKG5hbWUpOwor
ICAgIENTU1N0eWxlU2hlZXQ6OlJ1bGVNdXRhdGlvbiBtdXRhdGlvbih0aGlzKTsKIAotICAgIC8v
IFNpbmNlIHRoZSBuYW1lIGlzIHVzZWQgaW4gdGhlIGtleWZyYW1lIG1hcCBsaXN0IGluIFN0eWxl
UmVzb2x2ZXIsIHdlIG5lZWQKLSAgICAvLyB0byByZWNvbXB1dGUgdGhlIHN0eWxlIHNoZWV0IHRv
IGdldCB0aGUgdXBkYXRlZCBuYW1lLgotICAgIGlmIChDU1NTdHlsZVNoZWV0KiBzdHlsZVNoZWV0
ID0gcGFyZW50U3R5bGVTaGVldCgpKQotICAgICAgICBzdHlsZVNoZWV0LT5zdHlsZVNoZWV0Q2hh
bmdlZCgpOworICAgIG1fa2V5ZnJhbWVzUnVsZS0+c2V0TmFtZShuYW1lKTsKIH0KIAogdm9pZCBX
ZWJLaXRDU1NLZXlmcmFtZXNSdWxlOjppbnNlcnRSdWxlKGNvbnN0IFN0cmluZyYgcnVsZVRleHQp
CkBAIC0xMjIsNiArMTE5LDggQEAgdm9pZCBXZWJLaXRDU1NLZXlmcmFtZXNSdWxlOjppbnNlcnRS
dWxlKAogICAgIGlmICgha2V5ZnJhbWUpCiAgICAgICAgIHJldHVybjsKIAorICAgIENTU1N0eWxl
U2hlZXQ6OlJ1bGVNdXRhdGlvbiBtdXRhdGlvbih0aGlzKTsKKwogICAgIG1fa2V5ZnJhbWVzUnVs
ZS0+d3JhcHBlckFwcGVuZEtleWZyYW1lKGtleWZyYW1lKTsKIAogICAgIG1fY2hpbGRSdWxlQ1NT
T01XcmFwcGVycy5ncm93KGxlbmd0aCgpKTsKQEAgLTEzNSw2ICsxMzQsOCBAQCB2b2lkIFdlYktp
dENTU0tleWZyYW1lc1J1bGU6OmRlbGV0ZVJ1bGUoCiAgICAgaWYgKGkgPCAwKQogICAgICAgICBy
ZXR1cm47CiAKKyAgICBDU1NTdHlsZVNoZWV0OjpSdWxlTXV0YXRpb24gbXV0YXRpb24odGhpcyk7
CisKICAgICBtX2tleWZyYW1lc1J1bGUtPndyYXBwZXJSZW1vdmVLZXlmcmFtZShpKTsKIAogICAg
IGlmIChtX2NoaWxkUnVsZUNTU09NV3JhcHBlcnNbaV0pCkBAIC0xOTAsNCArMTkxLDEwIEBAIENT
U1J1bGVMaXN0KiBXZWJLaXRDU1NLZXlmcmFtZXNSdWxlOjpjc3MKICAgICByZXR1cm4gbV9ydWxl
TGlzdENTU09NV3JhcHBlci5nZXQoKTsKIH0KIAordm9pZCBXZWJLaXRDU1NLZXlmcmFtZXNSdWxl
OjpyZWF0dGFjaChTdHlsZVJ1bGVLZXlmcmFtZXMqIHJ1bGUpCit7CisgICAgQVNTRVJUKHJ1bGUp
OworICAgIG1fa2V5ZnJhbWVzUnVsZSA9IHJ1bGU7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NLZXlmcmFtZXNSdWxlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL1dlYktpdENTU0tleWZyYW1lc1J1bGUuaAko
cmV2aXNpb24gMTE1OTU5KQorKysgU291cmNlL1dlYkNvcmUvY3NzL1dlYktpdENTU0tleWZyYW1l
c1J1bGUuaAkod29ya2luZyBjb3B5KQpAQCAtODcsNiArODcsOCBAQCBwdWJsaWM6CiAgICAgdW5z
aWduZWQgbGVuZ3RoKCkgY29uc3Q7CiAgICAgV2ViS2l0Q1NTS2V5ZnJhbWVSdWxlKiBpdGVtKHVu
c2lnbmVkIGluZGV4KSBjb25zdDsKIAorICAgIHZvaWQgcmVhdHRhY2goU3R5bGVSdWxlS2V5ZnJh
bWVzKik7CisKIHByaXZhdGU6CiAgICAgV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZShTdHlsZVJ1bGVL
ZXlmcmFtZXMqLCBDU1NTdHlsZVNoZWV0KiBwYXJlbnQpOwogCkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9jc3MvV2ViS2l0Q1NTUmVnaW9uUnVsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvY3NzL1dlYktpdENTU1JlZ2lvblJ1bGUuY3BwCShyZXZpc2lvbiAxMTU5NTkpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9jc3MvV2ViS2l0Q1NTUmVnaW9uUnVsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTk2LDUgKzk2LDE0IEBAIENTU1J1bGVMaXN0KiBXZWJLaXRDU1NSZWdpb25SdWxlOjpjc3NSdWwK
ICAgICByZXR1cm4gbV9ydWxlTGlzdENTU09NV3JhcHBlci5nZXQoKTsKIH0KIAordm9pZCBXZWJL
aXRDU1NSZWdpb25SdWxlOjpyZWF0dGFjaChTdHlsZVJ1bGVSZWdpb24qIHJ1bGUpCit7CisgICAg
QVNTRVJUKHJ1bGUpOworICAgIG1fcmVnaW9uUnVsZSA9IHJ1bGU7CisgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IG1fY2hpbGRSdWxlQ1NTT01XcmFwcGVycy5zaXplKCk7ICsraSkgeworICAg
ICAgICBpZiAobV9jaGlsZFJ1bGVDU1NPTVdyYXBwZXJzW2ldKQorICAgICAgICAgICAgbV9jaGls
ZFJ1bGVDU1NPTVdyYXBwZXJzW2ldLT5yZWF0dGFjaChtX3JlZ2lvblJ1bGUtPmNoaWxkUnVsZXMo
KVtpXS5nZXQoKSk7CisgICAgfQorfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9jc3MvV2ViS2l0Q1NTUmVnaW9uUnVsZS5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NSZWdpb25SdWxlLmgJKHJldmlzaW9uIDExNTk1OSkK
KysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NSZWdpb25SdWxlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTUzLDYgKzUzLDggQEAgcHVibGljOgogICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0
OwogICAgIENTU1J1bGUqIGl0ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0OwogCisgICAgdm9pZCBy
ZWF0dGFjaChTdHlsZVJ1bGVSZWdpb24qKTsKKwogcHJpdmF0ZToKICAgICBXZWJLaXRDU1NSZWdp
b25SdWxlKFN0eWxlUnVsZVJlZ2lvbiosIENTU1N0eWxlU2hlZXQqIHBhcmVudCk7CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JTdHlsZVNoZWV0LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yU3R5bGVTaGVldC5jcHAJ
KHJldmlzaW9uIDExNTk1OSkKKysrIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JT
dHlsZVNoZWV0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzE4LDEwICs3MTgsMTAgQEAgU3RyaW5n
IEluc3BlY3RvclN0eWxlU2hlZXQ6OmZpbmFsVVJMKCkgYwogCiB2b2lkIEluc3BlY3RvclN0eWxl
U2hlZXQ6OnJlcGFyc2VTdHlsZVNoZWV0KGNvbnN0IFN0cmluZyYgdGV4dCkKIHsKKyAgICBDU1NT
dHlsZVNoZWV0OjpSdWxlTXV0YXRpb24gbXV0YXRpb24obV9wYWdlU3R5bGVTaGVldC5nZXQoKSk7
CiAgICAgbV9wYWdlU3R5bGVTaGVldC0+aW50ZXJuYWwoKS0+Y2xlYXJSdWxlcygpOwogICAgIG1f
cGFnZVN0eWxlU2hlZXQtPmludGVybmFsKCktPnBhcnNlU3RyaW5nKHRleHQpOwogICAgIG1fcGFn
ZVN0eWxlU2hlZXQtPmNsZWFyQ2hpbGRSdWxlQ1NTT01XcmFwcGVycygpOwotICAgIG1fcGFnZVN0
eWxlU2hlZXQtPnN0eWxlU2hlZXRDaGFuZ2VkKCk7CiAgICAgbV9pbnNwZWN0b3JTdHlsZXMuY2xl
YXIoKTsKICAgICBmaXJlU3R5bGVTaGVldENoYW5nZWQoKTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2xvYWRlci9jYWNoZS9DYWNoZWRDU1NTdHlsZVNoZWV0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9sb2FkZXIvY2FjaGUvQ2FjaGVkQ1NTU3R5bGVTaGVldC5jcHAJKHJldmlz
aW9uIDExNTk1OSkKKysrIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRDU1NTdHls
ZVNoZWV0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTAsNiArNTAsOCBAQCBDYWNoZWRDU1NTdHls
ZVNoZWV0OjpDYWNoZWRDU1NTdHlsZVNoZWV0CiAKIENhY2hlZENTU1N0eWxlU2hlZXQ6On5DYWNo
ZWRDU1NTdHlsZVNoZWV0KCkKIHsKKyAgICBpZiAobV9wYXJzZWRTdHlsZVNoZWV0Q2FjaGUpCisg
ICAgICAgIG1fcGFyc2VkU3R5bGVTaGVldENhY2hlLT5yZW1vdmVkRnJvbU1lbW9yeUNhY2hlKCk7
CiB9CiAKIHZvaWQgQ2FjaGVkQ1NTU3R5bGVTaGVldDo6ZGlkQWRkQ2xpZW50KENhY2hlZFJlc291
cmNlQ2xpZW50KiBjKQpAQCAtMTUzLDcgKzE1NSwxMiBAQCBib29sIENhY2hlZENTU1N0eWxlU2hl
ZXQ6OmNhblVzZVNoZWV0KGJvCiAKIHZvaWQgQ2FjaGVkQ1NTU3R5bGVTaGVldDo6ZGVzdHJveURl
Y29kZWREYXRhKCkKIHsKKyAgICBpZiAoIW1fcGFyc2VkU3R5bGVTaGVldENhY2hlKQorICAgICAg
ICByZXR1cm47CisKKyAgICBtX3BhcnNlZFN0eWxlU2hlZXRDYWNoZS0+cmVtb3ZlZEZyb21NZW1v
cnlDYWNoZSgpOwogICAgIG1fcGFyc2VkU3R5bGVTaGVldENhY2hlLmNsZWFyKCk7CisKICAgICBz
ZXREZWNvZGVkU2l6ZSgwKTsKIH0KIApAQCAtMTYxLDI1ICsxNjgsMjYgQEAgUGFzc1JlZlB0cjxT
dHlsZVNoZWV0SW50ZXJuYWw+IENhY2hlZENTUwogewogICAgIGlmICghbV9wYXJzZWRTdHlsZVNo
ZWV0Q2FjaGUpCiAgICAgICAgIHJldHVybiAwOwotICAgIC8vIENhY2hlZCBwYXJzZWQgc3R5bGVz
aGVldCBoYXMgbXV0YXRlZCwga2ljayBpdCBvdXQuCi0gICAgaWYgKCFtX3BhcnNlZFN0eWxlU2hl
ZXRDYWNoZS0+aXNDYWNoZWFibGUoKSkgewotICAgICAgICBtX3BhcnNlZFN0eWxlU2hlZXRDYWNo
ZS5jbGVhcigpOwotICAgICAgICBzZXREZWNvZGVkU2l6ZSgwKTsKLSAgICAgICAgcmV0dXJuIDA7
Ci0gICAgfQorICAgIEFTU0VSVChtX3BhcnNlZFN0eWxlU2hlZXRDYWNoZS0+aXNDYWNoZWFibGUo
KSk7CisgICAgQVNTRVJUKG1fcGFyc2VkU3R5bGVTaGVldENhY2hlLT5pc0luTWVtb3J5Q2FjaGUo
KSk7CisKICAgICAvLyBDb250ZXh0cyBtdXN0IGJlIGlkZW50aWNhbCBzbyB3ZSBrbm93IHdlIHdv
dWxkIGdldCB0aGUgc2FtZSBleGFjdCByZXN1bHQgaWYgd2UgcGFyc2VkIGFnYWluLgogICAgIGlm
IChtX3BhcnNlZFN0eWxlU2hlZXRDYWNoZS0+cGFyc2VyQ29udGV4dCgpICE9IGNvbnRleHQpCiAg
ICAgICAgIHJldHVybiAwOwogCiAgICAgZGlkQWNjZXNzRGVjb2RlZERhdGEoY3VycmVudFRpbWUo
KSk7Ci0gICAgLy8gRklYTUU6IEltcGxlbWVudCBjb3B5LW9uLXdyaXRlIHRvIGF2b2lkIGNvcHlp
bmcgd2hlbiBub3QgbmVjZXNzYXJ5LgotICAgIHJldHVybiBtX3BhcnNlZFN0eWxlU2hlZXRDYWNo
ZS0+Y29weSgpOworCisgICAgcmV0dXJuIG1fcGFyc2VkU3R5bGVTaGVldENhY2hlOwogfQogCiB2
b2lkIENhY2hlZENTU1N0eWxlU2hlZXQ6OnNhdmVQYXJzZWRTdHlsZVNoZWV0KFBhc3NSZWZQdHI8
U3R5bGVTaGVldEludGVybmFsPiBzaGVldCkKIHsKICAgICBBU1NFUlQoc2hlZXQgJiYgc2hlZXQt
PmlzQ2FjaGVhYmxlKCkpOworCisgICAgaWYgKG1fcGFyc2VkU3R5bGVTaGVldENhY2hlKQorICAg
ICAgICBtX3BhcnNlZFN0eWxlU2hlZXRDYWNoZS0+cmVtb3ZlZEZyb21NZW1vcnlDYWNoZSgpOwog
ICAgIG1fcGFyc2VkU3R5bGVTaGVldENhY2hlID0gc2hlZXQ7CisgICAgbV9wYXJzZWRTdHlsZVNo
ZWV0Q2FjaGUtPmFkZGVkVG9NZW1vcnlDYWNoZSgpOwogCiAgICAgc2V0RGVjb2RlZFNpemUobV9w
YXJzZWRTdHlsZVNoZWV0Q2FjaGUtPmVzdGltYXRlZFNpemVJbkJ5dGVzKCkpOwogfQo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>140396</attachid>
            <date>2012-05-05 06:07:51 -0700</date>
            <delta_ts>2012-05-05 17:20:05 -0700</delta_ts>
            <desc>now with tests</desc>
            <filename>stylesheet-sharing-11.patch</filename>
            <type>text/plain</type>
            <size>56764</size>
            <attacher name="Antti Koivisto">koivisto</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDExNjA4MikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE0OCBAQAorMjAxMi0wNS0wNCAgQW50dGkg
S29pdmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CisKKyAgICAgICAgU2hhcmUgc3R5bGVzaGVldCBk
YXRhIHN0cnVjdHVyZXMgYmV0d2VlbiBkb2N1bWVudHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg1NTk4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgV2UgY3VycmVudGx5IG1ha2UgYSBjb3B5IG9mIHRoZSBk
YXRhIHN0cnVjdHVyZXMgd2hlbiByZXN0b3JpbmcgYSBjYWNoZWQgc3R5bGVzaGVldC4gVGhpcyBw
YXRjaCBsZXRzIHVzIHNoYXJlCisgICAgICAgIHRoZSBkYXRhIHVudGlsIHNvbWVvbmUgdXNlcyBD
U1NPTSB0byBtb2RpZnkgdGhlIHNoZWV0LgorICAgICAgICAKKyAgICAgICAgVGhlIHBhdGNoIGlt
cGxlbWVudHMgY29weS1vbi13cml0ZSBmb3IgdGhlIGludGVybmFsIHN0eWxlIHNoZWV0IGRhdGEg
c3RydWN0dXJlcy4gSWYgYW55IG11dGF0aW9uIENTU09NIEFQSSBpcworICAgICAgICBpbnZva2Vk
LCB3ZSBjaGVjayBpZiB0aGUgc3R5bGVzaGVldCBjYW4gYmUgc2FmZWx5IG11dGF0ZWQgKHdlIGFy
ZSB0aGUgb25seSBjbGllbnQsIGl0IGlzIG5vdCBjYWNoZWQpLiBJZiBub3QKKyAgICAgICAgdGhl
biB0aGUgaW50ZXJuYWwgc3RydWN0dXJlcyBhcmUgY29waWVkIGFuZCBhbnkgZXhpc3RpbmcgQ1NT
T00gb2JqZWN0cyBhcmUgcmUtYXR0YWNoZWQgdG8gdGhlIG5ldyB0cmVlLgorICAgICAgICAKKyAg
ICAgICAgU2hhcmluZyBjYW4gc2F2ZSBzaWduaWZpY2FudCBhbW91bnQgb2YgbWVtb3J5IG9uIHNp
dGVzIHdpdGggbGFyZ2Ugc3R5bGVzaGVldHMuIEZvciBleGFtcGxlIGlmIHlvdSBoYXZlCisgICAg
ICAgIG11bHRpcGxlIGFydGljbGVzIG9wZW4gb24gd3NqLmNvbSB0aGlzIHNhdmVzIH4yLjZNQiBw
ZXIgdGFiLgorICAgICAgICAKKyAgICAgICAgVGVzdDogaHR0cC90ZXN0cy9jc3Mvc2hhcmVkLXN0
eWxlc2hlZXQtbXV0YXRpb24uaHRtbAorCisgICAgICAgICogY3NzL0NTU0ZvbnRGYWNlUnVsZS5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpDU1NGb250RmFjZVJ1bGU6OnJlYXR0YWNoKToKKyAgICAg
ICAgKFdlYkNvcmUpOgorICAgICAgICAqIGNzcy9DU1NGb250RmFjZVJ1bGUuaDoKKyAgICAgICAg
KENTU0ZvbnRGYWNlUnVsZSk6CisgICAgICAgICogY3NzL0NTU01lZGlhUnVsZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpDU1NNZWRpYVJ1bGU6Omluc2VydFJ1bGUpOgorICAgICAgICAoV2ViQ29y
ZTo6Q1NTTWVkaWFSdWxlOjpkZWxldGVSdWxlKToKKyAgICAgICAgKFdlYkNvcmU6OkNTU01lZGlh
UnVsZTo6cmVhdHRhY2gpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogY3NzL0NTU01l
ZGlhUnVsZS5oOgorICAgICAgICAoQ1NTTWVkaWFSdWxlKToKKyAgICAgICAgKiBjc3MvQ1NTUGFn
ZVJ1bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NTUGFnZVJ1bGU6OnNldFNlbGVjdG9yVGV4
dCk6CisgICAgICAgIChXZWJDb3JlOjpDU1NQYWdlUnVsZTo6cmVhdHRhY2gpOgorICAgICAgICAo
V2ViQ29yZSk6CisgICAgICAgICogY3NzL0NTU1BhZ2VSdWxlLmg6CisgICAgICAgIChDU1NQYWdl
UnVsZSk6CisgICAgICAgICogY3NzL0NTU1J1bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Q1NT
UnVsZTo6cmVhdHRhY2gpOgorICAgICAgICAKKyAgICAgICAgICAgIEFmdGVyIHRoZSBpbnRlcm5h
bCBzdHlsZXJ1bGUgdHJlZSBoYXMgYmVlbiBjb3BpZWQsIHRoZSBleGlzdGluZyB3cmFwcGVycyBh
cmUgcmUtYXR0YWNoZWQgdXNpbmcgcmVjdXJzaXZlIHJlYXR0YWNoKCkgZnVuY3Rpb24uCisKKyAg
ICAgICAgKiBjc3MvQ1NTUnVsZS5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChDU1NS
dWxlKToKKyAgICAgICAgKiBjc3MvQ1NTU3R5bGVSdWxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OkNTU1N0eWxlUnVsZTo6c2V0U2VsZWN0b3JUZXh0KToKKyAgICAgICAgKFdlYkNvcmU6OkNTU1N0
eWxlUnVsZTo6cmVhdHRhY2gpOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgICogY3NzL0NT
U1N0eWxlUnVsZS5oOgorICAgICAgICAoQ1NTU3R5bGVSdWxlKToKKyAgICAgICAgKiBjc3MvQ1NT
U3R5bGVTaGVldC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVNoZWV0SW50ZXJuYWw6OlN0
eWxlU2hlZXRJbnRlcm5hbCk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVNoZWV0SW50ZXJuYWw6
OmlzQ2FjaGVhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2hlZXRJbnRlcm5hbDo6cnVs
ZUF0KToKKyAgICAgICAgCisgICAgICAgICAgICBBZGQgcnVsZUF0KCksIHVzZSBpdCBmb3IgYm90
aCB3cmFwcGVyIGNyZWF0aW9uIGFuZCByZWF0dGFjaGluZy4gIFJlbW92ZSBjcmVhdGVDaGlsZFJ1
bGVDU1NPTVdyYXBwZXIgLgorCisgICAgICAgIChXZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlU2hlZXRJbnRlcm5hbDo6d3JhcHBlckluc2VydFJ1bGUpOgorICAgICAgICAoV2ViQ29y
ZTo6U3R5bGVTaGVldEludGVybmFsOjp3cmFwcGVyRGVsZXRlUnVsZSk6CisgICAgICAgIAorICAg
ICAgICAgICAgSW52YWxpZGF0aW9uIG1vdmVzIHRvIHRoZSBjYWxsaW5nIHdyYXBwZXIuCisKKyAg
ICAgICAgKFdlYkNvcmU6OlN0eWxlU2hlZXRJbnRlcm5hbDo6YWRkZWRUb01lbW9yeUNhY2hlKToK
KyAgICAgICAgKFdlYkNvcmU6OlN0eWxlU2hlZXRJbnRlcm5hbDo6cmVtb3ZlZEZyb21NZW1vcnlD
YWNoZSk6CisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNoZWV0Ojp3aWxsTXV0YXRlUnVsZXMp
OgorICAgICAgICAKKyAgICAgICAgICAgIFRoaXMgaXMgY2FsbGVkIHdoZW5ldmVyIFN0eWxlU2hl
ZXRJbnRlcm5hbCBpcyBnb2luZyB0byBiZSBtdXRhdGVkLiBJdCB3aWxsIGRvIGNvcHktb24td3Jp
dGUgaWYgbmVlZGVkLgorICAgICAgICAgICAgCisgICAgICAgICAgICBVc3VhbGx5IGludm9rZWQg
YnkgQ1NTU3R5bGVTaGVldDo6UnVsZU11dGF0aW9uIFJBSUkgdHlwZS4KKworICAgICAgICAoV2Vi
Q29yZTo6Q1NTU3R5bGVTaGVldDo6ZGlkTXV0YXRlUnVsZXMpOgorICAgICAgICAKKyAgICAgICAg
ICAgIFRoaXMgaXMgY2FsbGVkIGFmdGVyIHRoZSBtdXRhdGlvbiBpcyBjb21wbGV0ZSBhbmQgd2ls
bCB0cmlnZ2VyIHRoZSBzdHlsZSByZWNhbGMgaW4gdGhlIGRvY3VtZW50LgorCisgICAgICAgIChX
ZWJDb3JlOjpDU1NTdHlsZVNoZWV0OjpkaWRNdXRhdGUpOgorICAgICAgICAKKyAgICAgICAgICAg
IFRoaXMgaXMgY2FsbGVkIGRpcmVjdGx5IGFmdGVyIG11dGF0aW9ucyB0aGF0IGRvbid0IGNoYW5n
ZSBTdHlsZVNoZWV0SW50ZXJuYWwgc28gZG9uJ3QgcmVxdWlyZSBjb3B5LW9uLXdyaXRlLgorCisg
ICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNoZWV0OjpyZWF0dGFjaENoaWxkUnVsZUNTU09NV3Jh
cHBlcnMpOgorICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTaGVldDo6c2V0RGlzYWJsZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6Q1NTU3R5bGVTaGVldDo6aW5zZXJ0UnVsZSk6CisgICAgICAgIChX
ZWJDb3JlOjpDU1NTdHlsZVNoZWV0OjpkZWxldGVSdWxlKToKKyAgICAgICAgKiBjc3MvQ1NTU3R5
bGVTaGVldC5oOgorICAgICAgICAoU3R5bGVTaGVldEludGVybmFsKToKKyAgICAgICAgKFdlYkNv
cmU6OlN0eWxlU2hlZXRJbnRlcm5hbDo6aGFzT25lQ2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OlN0eWxlU2hlZXRJbnRlcm5hbDo6aXNNdXRhYmxlKToKKyAgICAgICAgKFdlYkNvcmU6OlN0eWxl
U2hlZXRJbnRlcm5hbDo6c2V0TXV0YWJsZSk6CisgICAgICAgIAorICAgICAgICAgICAgVHJhY2sg
bXV0YWJpbGl0eS4gTXV0YXRpb24gaXMgYWxsb3dlZCBvbmx5IGFmdGVyIHdpbGxNdXRhdGUgY2Fs
bC4KKworICAgICAgICAoV2ViQ29yZTo6U3R5bGVTaGVldEludGVybmFsOjppc0luTWVtb3J5Q2Fj
aGUpOgorICAgICAgICAKKyAgICAgICAgICAgIFRyYWNrIGlmIHRoZSBvYmplY3QgaXMgaW4gbWVt
b3J5IGNhY2hlLgorCisgICAgICAgIChXZWJDb3JlOjpDU1NTdHlsZVNoZWV0OjpjbGVhck93bmVy
UnVsZSk6CisgICAgICAgIChDU1NTdHlsZVNoZWV0KToKKyAgICAgICAgKiBjc3MvTWVkaWFMaXN0
LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhTGlzdDo6c2V0TWVkaWFUZXh0KToKKyAgICAg
ICAgKFdlYkNvcmU6Ok1lZGlhTGlzdDo6ZGVsZXRlTWVkaXVtKToKKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhTGlzdDo6YXBwZW5kTWVkaXVtKToKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhTGlzdDo6
ZGlkTXV0YXRlKToKKyAgICAgICAgKFdlYkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFM
aXN0OjpyZWF0dGFjaCk6CisgICAgICAgICogY3NzL01lZGlhTGlzdC5oOgorICAgICAgICAoTWVk
aWFMaXN0KToKKyAgICAgICAgKiBjc3MvUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uLmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OlByb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbjo6c2V0
Q3NzVGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRp
b246OnNldFByb3BlcnR5KToKKyAgICAgICAgKFdlYkNvcmU6OlByb3BlcnR5U2V0Q1NTU3R5bGVE
ZWNsYXJhdGlvbjo6cmVtb3ZlUHJvcGVydHkpOgorICAgICAgICAoV2ViQ29yZTo6UHJvcGVydHlT
ZXRDU1NTdHlsZURlY2xhcmF0aW9uOjpzZXRQcm9wZXJ0eUludGVybmFsKToKKyAgICAgICAgKFdl
YkNvcmUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSdWxlQ1NTU3R5bGVEZWNsYXJhdGlvbjo6
d2lsbE11dGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpTdHlsZVJ1bGVDU1NTdHlsZURlY2xhcmF0
aW9uOjpkaWRNdXRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6U3R5bGVSdWxlQ1NTU3R5bGVEZWNs
YXJhdGlvbjo6cmVhdHRhY2gpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lQ1NTU3R5bGVEZWNs
YXJhdGlvbjo6ZGlkTXV0YXRlKToKKyAgICAgICAgKiBjc3MvUHJvcGVydHlTZXRDU1NTdHlsZURl
Y2xhcmF0aW9uLmg6CisgICAgICAgIChXZWJDb3JlOjpQcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFy
YXRpb246OndpbGxNdXRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UHJvcGVydHlTZXRDU1NTdHls
ZURlY2xhcmF0aW9uOjpkaWRNdXRhdGUpOgorICAgICAgICAoU3R5bGVSdWxlQ1NTU3R5bGVEZWNs
YXJhdGlvbik6CisgICAgICAgICogY3NzL1dlYktpdENTU0tleWZyYW1lc1J1bGUuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6V2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZTo6c2V0TmFtZSk6CisgICAgICAg
IChXZWJDb3JlOjpXZWJLaXRDU1NLZXlmcmFtZXNSdWxlOjppbnNlcnRSdWxlKToKKyAgICAgICAg
KFdlYkNvcmU6OldlYktpdENTU0tleWZyYW1lc1J1bGU6OmRlbGV0ZVJ1bGUpOgorICAgICAgICAo
V2ViQ29yZTo6V2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZTo6cmVhdHRhY2gpOgorICAgICAgICAoV2Vi
Q29yZSk6CisgICAgICAgICogY3NzL1dlYktpdENTU0tleWZyYW1lc1J1bGUuaDoKKyAgICAgICAg
KFdlYktpdENTU0tleWZyYW1lc1J1bGUpOgorICAgICAgICAqIGNzcy9XZWJLaXRDU1NSZWdpb25S
dWxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYktpdENTU1JlZ2lvblJ1bGU6OnJlYXR0YWNo
KToKKyAgICAgICAgKiBjc3MvV2ViS2l0Q1NTUmVnaW9uUnVsZS5oOgorICAgICAgICAoV2ViS2l0
Q1NTUmVnaW9uUnVsZSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hlZXQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yU3R5bGVTaGVldDo6cmVwYXJzZVN0eWxl
U2hlZXQpOgorICAgICAgICAqIGxvYWRlci9jYWNoZS9DYWNoZWRDU1NTdHlsZVNoZWV0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZENTU1N0eWxlU2hlZXQ6On5DYWNoZWRDU1NTdHlsZVNo
ZWV0KToKKyAgICAgICAgKFdlYkNvcmU6OkNhY2hlZENTU1N0eWxlU2hlZXQ6OmRlc3Ryb3lEZWNv
ZGVkRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpDYWNoZWRDU1NTdHlsZVNoZWV0OjpyZXN0b3Jl
UGFyc2VkU3R5bGVTaGVldCk6CisgICAgICAgIAorICAgICAgICAgICAgRG9uJ3QgY29weSB3aGVu
IHJlc3RvcmluZy4gSXQgaXMgbm8gbG9uZ2VyIG5lY2Vzc2FyeS4KKyAgICAgICAgICAgIFNldCB0
aGUgY2FjaGUgYml0IG9uIHRoZSBzdHlsZXNoZWV0LgorCisgICAgICAgIChXZWJDb3JlOjpDYWNo
ZWRDU1NTdHlsZVNoZWV0OjpzYXZlUGFyc2VkU3R5bGVTaGVldCk6CisKIDIwMTItMDUtMDMgIEls
eWEgVGlraG9ub3Zza3kgIDxsb2lzbG9AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFdlYiBJbnNw
ZWN0b3I6IGNyZWF0ZVJhd0xvY2F0aW9uQnlVUkwgaXMgdG9vIHNsb3cgaWYgYSBiaWcgbnVtYmVy
IG9mIGV2YWxzIGhhcHBlbi4KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVJ1
bGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVJ1bGUu
Y3BwCShyZXZpc2lvbiAxMTU5NTkpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTRm9udEZhY2VS
dWxlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTUsNCArNTUsMTIgQEAgU3RyaW5nIENTU0ZvbnRG
YWNlUnVsZTo6Y3NzVGV4dCgpIGNvbnN0CiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAordm9pZCBD
U1NGb250RmFjZVJ1bGU6OnJlYXR0YWNoKFN0eWxlUnVsZUZvbnRGYWNlKiBydWxlKQoreworICAg
IEFTU0VSVChydWxlKTsKKyAgICBtX2ZvbnRGYWNlUnVsZSA9IHJ1bGU7CisgICAgaWYgKG1fcHJv
cGVydGllc0NTU09NV3JhcHBlcikKKyAgICAgICAgbV9wcm9wZXJ0aWVzQ1NTT01XcmFwcGVyLT5y
ZWF0dGFjaChtX2ZvbnRGYWNlUnVsZS0+cHJvcGVydGllcygpKTsKK30KKwogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlUnVsZS5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NGb250RmFjZVJ1bGUuaAkocmV2aXNp
b24gMTE1OTU5KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU0ZvbnRGYWNlUnVsZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC00Myw2ICs0Myw4IEBAIHB1YmxpYzoKIAogICAgIFN0cmluZyBjc3NUZXh0
KCkgY29uc3Q7CiAKKyAgICB2b2lkIHJlYXR0YWNoKFN0eWxlUnVsZUZvbnRGYWNlKik7CisKIHBy
aXZhdGU6CiAgICAgQ1NTRm9udEZhY2VSdWxlKFN0eWxlUnVsZUZvbnRGYWNlKiwgQ1NTU3R5bGVT
aGVldCogcGFyZW50KTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU01lZGlhUnVsZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU01lZGlhUnVsZS5jcHAJKHJl
dmlzaW9uIDExNTk1OSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NNZWRpYVJ1bGUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC04MCwxMyArODAsMTEgQEAgdW5zaWduZWQgQ1NTTWVkaWFSdWxlOjpp
bnNlcnRSdWxlKGNvbnN0IAogICAgICAgICBlYyA9IEhJRVJBUkNIWV9SRVFVRVNUX0VSUjsKICAg
ICAgICAgcmV0dXJuIDA7CiAgICAgfQorICAgIENTU1N0eWxlU2hlZXQ6OlJ1bGVNdXRhdGlvbiBt
dXRhdGlvbih0aGlzKTsKKwogICAgIG1fbWVkaWFSdWxlLT53cmFwcGVySW5zZXJ0UnVsZShpbmRl
eCwgbmV3UnVsZSk7CiAKICAgICBtX2NoaWxkUnVsZUNTU09NV3JhcHBlcnMuaW5zZXJ0KGluZGV4
LCBSZWZQdHI8Q1NTUnVsZT4oKSk7Ci0KLSAgICBpZiAoQ1NTU3R5bGVTaGVldCogc3R5bGVTaGVl
dCA9IHBhcmVudFN0eWxlU2hlZXQoKSkKLSAgICAgICAgc3R5bGVTaGVldC0+c3R5bGVTaGVldENo
YW5nZWQoKTsKLQogICAgIHJldHVybiBpbmRleDsKIH0KIApAQCAtMTAwLDE0ICs5OCwxNCBAQCB2
b2lkIENTU01lZGlhUnVsZTo6ZGVsZXRlUnVsZSh1bnNpZ25lZCBpCiAgICAgICAgIGVjID0gSU5E
RVhfU0laRV9FUlI7CiAgICAgICAgIHJldHVybjsKICAgICB9CisKKyAgICBDU1NTdHlsZVNoZWV0
OjpSdWxlTXV0YXRpb24gbXV0YXRpb24odGhpcyk7CisKICAgICBtX21lZGlhUnVsZS0+d3JhcHBl
clJlbW92ZVJ1bGUoaW5kZXgpOwogCiAgICAgaWYgKG1fY2hpbGRSdWxlQ1NTT01XcmFwcGVyc1tp
bmRleF0pCiAgICAgICAgIG1fY2hpbGRSdWxlQ1NTT01XcmFwcGVyc1tpbmRleF0tPnNldFBhcmVu
dFJ1bGUoMCk7CiAgICAgbV9jaGlsZFJ1bGVDU1NPTVdyYXBwZXJzLnJlbW92ZShpbmRleCk7Ci0K
LSAgICBpZiAoQ1NTU3R5bGVTaGVldCogc3R5bGVTaGVldCA9IHBhcmVudFN0eWxlU2hlZXQoKSkK
LSAgICAgICAgc3R5bGVTaGVldC0+c3R5bGVTaGVldENoYW5nZWQoKTsKIH0KIAogU3RyaW5nIENT
U01lZGlhUnVsZTo6Y3NzVGV4dCgpIGNvbnN0CkBAIC0xNjMsNCArMTYxLDE2IEBAIENTU1J1bGVM
aXN0KiBDU1NNZWRpYVJ1bGU6OmNzc1J1bGVzKCkgY28KICAgICByZXR1cm4gbV9ydWxlTGlzdENT
U09NV3JhcHBlci5nZXQoKTsKIH0KIAordm9pZCBDU1NNZWRpYVJ1bGU6OnJlYXR0YWNoKFN0eWxl
UnVsZU1lZGlhKiBydWxlKQoreworICAgIEFTU0VSVChydWxlKTsKKyAgICBtX21lZGlhUnVsZSA9
IHJ1bGU7CisgICAgaWYgKG1fbWVkaWFDU1NPTVdyYXBwZXIpCisgICAgICAgIG1fbWVkaWFDU1NP
TVdyYXBwZXItPnJlYXR0YWNoKG1fbWVkaWFSdWxlLT5tZWRpYVF1ZXJpZXMoKSk7CisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IG1fY2hpbGRSdWxlQ1NTT01XcmFwcGVycy5zaXplKCk7ICsr
aSkgeworICAgICAgICBpZiAobV9jaGlsZFJ1bGVDU1NPTVdyYXBwZXJzW2ldKQorICAgICAgICAg
ICAgbV9jaGlsZFJ1bGVDU1NPTVdyYXBwZXJzW2ldLT5yZWF0dGFjaChtX21lZGlhUnVsZS0+Y2hp
bGRSdWxlcygpW2ldLmdldCgpKTsKKyAgICB9Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NNZWRpYVJ1bGUuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9jc3MvQ1NTTWVkaWFSdWxlLmgJKHJldmlzaW9uIDExNTk1OSkKKysrIFNv
dXJjZS9XZWJDb3JlL2Nzcy9DU1NNZWRpYVJ1bGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTAsNiAr
NTAsOCBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQgbGVuZ3RoKCkgY29uc3Q7CiAgICAgQ1NTUnVs
ZSogaXRlbSh1bnNpZ25lZCBpbmRleCkgY29uc3Q7CiAKKyAgICB2b2lkIHJlYXR0YWNoKFN0eWxl
UnVsZU1lZGlhKik7CisKIHByaXZhdGU6CiAgICAgQ1NTTWVkaWFSdWxlKFN0eWxlUnVsZU1lZGlh
KiwgQ1NTU3R5bGVTaGVldCopOwogICAgIApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1Bh
Z2VSdWxlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFnZVJ1bGUu
Y3BwCShyZXZpc2lvbiAxMTU5NTkpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUGFnZVJ1bGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NSwyNCArNjUsMTcgQEAgU3RyaW5nIENTU1BhZ2VSdWxl
OjpzZWxlY3RvclRleHQoKSBjb25zdAogCiB2b2lkIENTU1BhZ2VSdWxlOjpzZXRTZWxlY3RvclRl
eHQoY29uc3QgU3RyaW5nJiBzZWxlY3RvclRleHQpCiB7Ci0gICAgRG9jdW1lbnQqIGRvYyA9IDA7
Ci0gICAgaWYgKENTU1N0eWxlU2hlZXQqIHN0eWxlU2hlZXQgPSBwYXJlbnRTdHlsZVNoZWV0KCkp
Ci0gICAgICAgIGRvYyA9IHN0eWxlU2hlZXQtPm93bmVyRG9jdW1lbnQoKTsKLSAgICBpZiAoIWRv
YykKLSAgICAgICAgcmV0dXJuOwogICAgIAogICAgIENTU1BhcnNlciBwYXJzZXIocGFyc2VyQ29u
dGV4dCgpKTsKICAgICBDU1NTZWxlY3Rvckxpc3Qgc2VsZWN0b3JMaXN0OwogICAgIHBhcnNlci5w
YXJzZVNlbGVjdG9yKHNlbGVjdG9yVGV4dCwgc2VsZWN0b3JMaXN0KTsKICAgICBpZiAoIXNlbGVj
dG9yTGlzdC5maXJzdCgpKQogICAgICAgICByZXR1cm47Ci0gICAgCisKKyAgICBDU1NTdHlsZVNo
ZWV0OjpSdWxlTXV0YXRpb24gbXV0YXRpb24odGhpcyk7CisKICAgICBTdHJpbmcgb2xkU2VsZWN0
b3JUZXh0ID0gdGhpcy0+c2VsZWN0b3JUZXh0KCk7CiAgICAgbV9wYWdlUnVsZS0+d3JhcHBlckFk
b3B0U2VsZWN0b3JMaXN0KHNlbGVjdG9yTGlzdCk7Ci0gICAgCi0gICAgaWYgKHRoaXMtPnNlbGVj
dG9yVGV4dCgpID09IG9sZFNlbGVjdG9yVGV4dCkKLSAgICAgICAgcmV0dXJuOwotICAgIGRvYy0+
c3R5bGVSZXNvbHZlckNoYW5nZWQoRGVmZXJSZWNhbGNTdHlsZSk7CiB9CiAKIFN0cmluZyBDU1NQ
YWdlUnVsZTo6Y3NzVGV4dCgpIGNvbnN0CkBAIC05NCw0ICs4NywxMiBAQCBTdHJpbmcgQ1NTUGFn
ZVJ1bGU6OmNzc1RleHQoKSBjb25zdAogICAgIHJldHVybiByZXN1bHQ7CiB9CiAKK3ZvaWQgQ1NT
UGFnZVJ1bGU6OnJlYXR0YWNoKFN0eWxlUnVsZVBhZ2UqIHJ1bGUpCit7CisgICAgQVNTRVJUKHJ1
bGUpOworICAgIG1fcGFnZVJ1bGUgPSBydWxlOworICAgIGlmIChtX3Byb3BlcnRpZXNDU1NPTVdy
YXBwZXIpCisgICAgICAgIG1fcHJvcGVydGllc0NTU09NV3JhcHBlci0+cmVhdHRhY2gobV9wYWdl
UnVsZS0+cHJvcGVydGllcygpKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpJbmRleDog
U291cmNlL1dlYkNvcmUvY3NzL0NTU1BhZ2VSdWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YkNvcmUvY3NzL0NTU1BhZ2VSdWxlLmgJKHJldmlzaW9uIDExNTk1OSkKKysrIFNvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NQYWdlUnVsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw5IEBAIHB1
YmxpYzoKICAgICB2b2lkIHNldFNlbGVjdG9yVGV4dChjb25zdCBTdHJpbmcmKTsKIAogICAgIFN0
cmluZyBjc3NUZXh0KCkgY29uc3Q7Ci0gICAgCisKKyAgICB2b2lkIHJlYXR0YWNoKFN0eWxlUnVs
ZVBhZ2UqKTsKKwogcHJpdmF0ZToKICAgICBDU1NQYWdlUnVsZShTdHlsZVJ1bGVQYWdlKiwgQ1NT
U3R5bGVTaGVldCopOwogICAgIApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL0NTU1J1bGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NSdWxlLmNwcAkocmV2aXNpb24g
MTE1OTU5KQorKysgU291cmNlL1dlYkNvcmUvY3NzL0NTU1J1bGUuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zMyw2ICszMyw3IEBACiAjaW5jbHVkZSAiV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZS5oIgog
I2luY2x1ZGUgIldlYktpdENTU1JlZ2lvblJ1bGUuaCIKICNpbmNsdWRlICJOb3RJbXBsZW1lbnRl
ZC5oIgorI2luY2x1ZGUgIlN0eWxlUnVsZS5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAg
LTExMyw0ICsxMTQsNDIgQEAgdm9pZCBDU1NSdWxlOjpkZXN0cm95KCkKICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKIH0KIAordm9pZCBDU1NSdWxlOjpyZWF0dGFjaChTdHlsZVJ1bGVCYXNlKiBy
dWxlKQoreworICAgIHN3aXRjaCAodHlwZSgpKSB7CisgICAgY2FzZSBVTktOT1dOX1JVTEU6Cisg
ICAgICAgIHJldHVybjsKKyAgICBjYXNlIFNUWUxFX1JVTEU6CisgICAgICAgIHN0YXRpY19jYXN0
PENTU1N0eWxlUnVsZSo+KHRoaXMpLT5yZWF0dGFjaChzdGF0aWNfY2FzdDxTdHlsZVJ1bGUqPihy
dWxlKSk7CisgICAgICAgIHJldHVybjsKKyAgICBjYXNlIFBBR0VfUlVMRToKKyAgICAgICAgc3Rh
dGljX2Nhc3Q8Q1NTUGFnZVJ1bGUqPih0aGlzKS0+cmVhdHRhY2goc3RhdGljX2Nhc3Q8U3R5bGVS
dWxlUGFnZSo+KHJ1bGUpKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgQ0hBUlNFVF9SVUxF
OgorICAgICAgICBBU1NFUlQoIXJ1bGUpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBJTVBP
UlRfUlVMRToKKyAgICAgICAgLy8gRklYTUU6IEltcGxlbWVudCB3aGVuIGVuYWJsaW5nIGNhY2hp
bmcgZm9yIHN0eWxlc2hlZXRzIHdpdGggaW1wb3J0IHJ1bGVzLgorICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2UgTUVESUFfUlVMRToKKyAgICAg
ICAgc3RhdGljX2Nhc3Q8Q1NTTWVkaWFSdWxlKj4odGhpcyktPnJlYXR0YWNoKHN0YXRpY19jYXN0
PFN0eWxlUnVsZU1lZGlhKj4ocnVsZSkpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBGT05U
X0ZBQ0VfUlVMRToKKyAgICAgICAgc3RhdGljX2Nhc3Q8Q1NTRm9udEZhY2VSdWxlKj4odGhpcykt
PnJlYXR0YWNoKHN0YXRpY19jYXN0PFN0eWxlUnVsZUZvbnRGYWNlKj4ocnVsZSkpOworICAgICAg
ICByZXR1cm47CisgICAgY2FzZSBXRUJLSVRfS0VZRlJBTUVTX1JVTEU6CisgICAgICAgIHN0YXRp
Y19jYXN0PFdlYktpdENTU0tleWZyYW1lc1J1bGUqPih0aGlzKS0+cmVhdHRhY2goc3RhdGljX2Nh
c3Q8U3R5bGVSdWxlS2V5ZnJhbWVzKj4ocnVsZSkpOworICAgICAgICByZXR1cm47CisgICAgY2Fz
ZSBXRUJLSVRfS0VZRlJBTUVfUlVMRToKKyAgICAgICAgLy8gTm8gbmVlZCB0byByZWF0dGFjaCwg
dGhlIHVuZGVybHlpbmcgZGF0YSBpcyBzaGFyZWFibGUgb24gbXV0YXRpb24uCisgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm47CisgICAgY2FzZSBXRUJLSVRfUkVH
SU9OX1JVTEU6CisgICAgICAgIHN0YXRpY19jYXN0PFdlYktpdENTU1JlZ2lvblJ1bGUqPih0aGlz
KS0+cmVhdHRhY2goc3RhdGljX2Nhc3Q8U3R5bGVSdWxlUmVnaW9uKj4ocnVsZSkpOworICAgICAg
ICByZXR1cm47CisgICAgfQorICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCiB9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTUnVsZS5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NSdWxlLmgJKHJldmlzaW9uIDExNTk1OSkK
KysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NSdWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTI0LDEy
ICsyNCwxMyBAQAogI2RlZmluZSBDU1NSdWxlX2gKIAogI2luY2x1ZGUgIkNTU1N0eWxlU2hlZXQu
aCIKKyNpbmNsdWRlICJFeGNlcHRpb25Db2RlLmgiCiAjaW5jbHVkZSAiS1VSTEhhc2guaCIKICNp
bmNsdWRlIDx3dGYvTGlzdEhhc2hTZXQuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi10eXBl
ZGVmIGludCBFeGNlcHRpb25Db2RlOworY2xhc3MgU3R5bGVSdWxlQmFzZTsKIAogY2xhc3MgQ1NT
UnVsZSA6IHB1YmxpYyBSZWZDb3VudGVkPENTU1J1bGU+IHsKIHB1YmxpYzoKQEAgLTkzLDYgKzk0
LDggQEAgcHVibGljOgogICAgIFN0cmluZyBjc3NUZXh0KCkgY29uc3Q7CiAgICAgdm9pZCBzZXRD
c3NUZXh0KGNvbnN0IFN0cmluZyYsIEV4Y2VwdGlvbkNvZGUmKTsKIAorICAgIHZvaWQgcmVhdHRh
Y2goU3R5bGVSdWxlQmFzZSopOworCiBwcm90ZWN0ZWQ6CiAgICAgQ1NTUnVsZShDU1NTdHlsZVNo
ZWV0KiBwYXJlbnQsIFR5cGUgdHlwZSkKICAgICAgICAgOiBtX2hhc0NhY2hlZFNlbGVjdG9yVGV4
dChmYWxzZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVJ1bGUuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVJ1bGUuY3BwCShyZXZpc2lvbiAx
MTU5NTkpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVSdWxlLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtOTEsMTggKzkxLDE0IEBAIFN0cmluZyBDU1NTdHlsZVJ1bGU6OnNlbGVjdG9yVGV4
dCgpIGNvbnMKIAogdm9pZCBDU1NTdHlsZVJ1bGU6OnNldFNlbGVjdG9yVGV4dChjb25zdCBTdHJp
bmcmIHNlbGVjdG9yVGV4dCkKIHsKLSAgICBEb2N1bWVudCogZG9jID0gMDsKLSAgICBpZiAoQ1NT
U3R5bGVTaGVldCogc3R5bGVTaGVldCA9IHBhcmVudFN0eWxlU2hlZXQoKSkKLSAgICAgICAgZG9j
ID0gc3R5bGVTaGVldC0+b3duZXJEb2N1bWVudCgpOwotICAgIGlmICghZG9jKQotICAgICAgICBy
ZXR1cm47Ci0KICAgICBDU1NQYXJzZXIgcChwYXJzZXJDb250ZXh0KCkpOwogICAgIENTU1NlbGVj
dG9yTGlzdCBzZWxlY3Rvckxpc3Q7CiAgICAgcC5wYXJzZVNlbGVjdG9yKHNlbGVjdG9yVGV4dCwg
c2VsZWN0b3JMaXN0KTsKICAgICBpZiAoIXNlbGVjdG9yTGlzdC5maXJzdCgpKQogICAgICAgICBy
ZXR1cm47CiAKKyAgICBDU1NTdHlsZVNoZWV0OjpSdWxlTXV0YXRpb24gbXV0YXRpb24odGhpcyk7
CisKICAgICBTdHJpbmcgb2xkU2VsZWN0b3JUZXh0ID0gdGhpcy0+c2VsZWN0b3JUZXh0KCk7CiAg
ICAgbV9zdHlsZVJ1bGUtPndyYXBwZXJBZG9wdFNlbGVjdG9yTGlzdChzZWxlY3Rvckxpc3QpOwog
CkBAIC0xMTAsOCArMTA2LDYgQEAgdm9pZCBDU1NTdHlsZVJ1bGU6OnNldFNlbGVjdG9yVGV4dChj
b25zdAogICAgICAgICBBU1NFUlQoc2VsZWN0b3JUZXh0Q2FjaGUoKS5jb250YWlucyh0aGlzKSk7
CiAgICAgICAgIHNlbGVjdG9yVGV4dENhY2hlKCkuc2V0KHRoaXMsIGdlbmVyYXRlU2VsZWN0b3JU
ZXh0KCkpOwogICAgIH0KLQotICAgIGRvYy0+c3R5bGVSZXNvbHZlckNoYW5nZWQoRGVmZXJSZWNh
bGNTdHlsZSk7CiB9CiAKIFN0cmluZyBDU1NTdHlsZVJ1bGU6OmNzc1RleHQoKSBjb25zdApAQCAt
MTI1LDQgKzExOSwxMSBAQCBTdHJpbmcgQ1NTU3R5bGVSdWxlOjpjc3NUZXh0KCkgY29uc3QKICAg
ICByZXR1cm4gcmVzdWx0OwogfQogCit2b2lkIENTU1N0eWxlUnVsZTo6cmVhdHRhY2goU3R5bGVS
dWxlKiBydWxlKQoreworICAgIG1fc3R5bGVSdWxlID0gcnVsZTsKKyAgICBpZiAobV9wcm9wZXJ0
aWVzQ1NTT01XcmFwcGVyKQorICAgICAgICBtX3Byb3BlcnRpZXNDU1NPTVdyYXBwZXItPnJlYXR0
YWNoKG1fc3R5bGVSdWxlLT5wcm9wZXJ0aWVzKCkpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVSdWxlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvY3NzL0NTU1N0eWxlUnVsZS5oCShyZXZpc2lvbiAxMTU5NTkpCisr
KyBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVSdWxlLmgJKHdvcmtpbmcgY29weSkKQEAgLTQ4
LDYgKzQ4LDggQEAgcHVibGljOgogICAgIC8vIEZJWE1FOiBOb3QgQ1NTT00uIFJlbW92ZS4KICAg
ICBTdHlsZVJ1bGUqIHN0eWxlUnVsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3R5bGVSdWxlLmdldCgp
OyB9CiAKKyAgICB2b2lkIHJlYXR0YWNoKFN0eWxlUnVsZSopOworCiBwcml2YXRlOgogICAgIENT
U1N0eWxlUnVsZShTdHlsZVJ1bGUqLCBDU1NTdHlsZVNoZWV0Kik7CiAKSW5kZXg6IFNvdXJjZS9X
ZWJDb3JlL2Nzcy9DU1NTdHlsZVNoZWV0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9jc3MvQ1NTU3R5bGVTaGVldC5jcHAJKHJldmlzaW9uIDExNTk1OSkKKysrIFNvdXJjZS9XZWJD
b3JlL2Nzcy9DU1NTdHlsZVNoZWV0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTksNyArOTksOCBA
QCBTdHlsZVNoZWV0SW50ZXJuYWw6OlN0eWxlU2hlZXRJbnRlcm5hbChTCiAgICAgLCBtX2hhc1N5
bnRhY3RpY2FsbHlWYWxpZENTU0hlYWRlcih0cnVlKQogICAgICwgbV9kaWRMb2FkRXJyb3JPY2N1
cihmYWxzZSkKICAgICAsIG1fdXNlc1JlbVVuaXRzKGZhbHNlKQotICAgICwgbV9oYXNNdXRhdGVk
KGZhbHNlKQorICAgICwgbV9pc011dGFibGUoZmFsc2UpCisgICAgLCBtX2lzSW5NZW1vcnlDYWNo
ZShmYWxzZSkKICAgICAsIG1fcGFyc2VyQ29udGV4dChjb250ZXh0KQogewogfQpAQCAtMTE4LDcg
KzExOSw4IEBAIFN0eWxlU2hlZXRJbnRlcm5hbDo6U3R5bGVTaGVldEludGVybmFsKGMKICAgICAs
IG1faGFzU3ludGFjdGljYWxseVZhbGlkQ1NTSGVhZGVyKG8ubV9oYXNTeW50YWN0aWNhbGx5VmFs
aWRDU1NIZWFkZXIpCiAgICAgLCBtX2RpZExvYWRFcnJvck9jY3VyKGZhbHNlKQogICAgICwgbV91
c2VzUmVtVW5pdHMoby5tX3VzZXNSZW1Vbml0cykKLSAgICAsIG1faGFzTXV0YXRlZChmYWxzZSkK
KyAgICAsIG1faXNNdXRhYmxlKGZhbHNlKQorICAgICwgbV9pc0luTWVtb3J5Q2FjaGUoZmFsc2Up
CiAgICAgLCBtX3BhcnNlckNvbnRleHQoby5tX3BhcnNlckNvbnRleHQpCiB7CiAgICAgQVNTRVJU
KG8uaXNDYWNoZWFibGUoKSk7CkBAIC0xNDAsMTMgKzE0MiwxNiBAQCBib29sIFN0eWxlU2hlZXRJ
bnRlcm5hbDo6aXNDYWNoZWFibGUoKSBjCiAgICAgLy8gRklYTUU6IFN1cHBvcnQgY29weWluZyBp
bXBvcnQgcnVsZXMuCiAgICAgaWYgKCFtX2ltcG9ydFJ1bGVzLmlzRW1wdHkoKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIC8vIEZJWE1FOiBTdXBwb3J0IGNhY2hlZCBzdHlsZXNoZWV0cyBp
biBpbXBvcnQgcnVsZXMuCisgICAgaWYgKG1fb3duZXJSdWxlKQorICAgICAgICByZXR1cm4gZmFs
c2U7CiAgICAgLy8gVGhpcyB3b3VsZCByZXF1aXJlIGRlYWxpbmcgd2l0aCBtdWx0aXBsZSBjbGll
bnRzIGZvciBsb2FkIGNhbGxiYWNrcy4KICAgICBpZiAoIW1fbG9hZENvbXBsZXRlZCkKICAgICAg
ICAgcmV0dXJuIGZhbHNlOwogICAgIGlmIChtX2RpZExvYWRFcnJvck9jY3VyKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgLy8gSXQgaXMgbm90IHRoZSBvcmlnaW5hbCBzaGVldCBhbnltb3Jl
LgotICAgIGlmIChtX2hhc011dGF0ZWQpCisgICAgaWYgKG1faXNNdXRhYmxlKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAgICAgLy8gSWYgdGhlIGhlYWRlciBpcyB2YWxpZCB3ZSBhcmUgbm90IGdv
aW5nIHRvIG5lZWQgdG8gY2hlY2sgdGhlIFNlY3VyaXR5T3JpZ2luLgogICAgIC8vIEZJWE1FOiBW
YWxpZCBtaW1lIHR5cGUgYXZvaWRzIHRoZSBjaGVjayB0b28uCkBAIC0xNjksMjEgKzE3NCwyMSBA
QCB2b2lkIFN0eWxlU2hlZXRJbnRlcm5hbDo6cGFyc2VyQXBwZW5kUnVsCiAgICAgbV9jaGlsZFJ1
bGVzLmFwcGVuZChydWxlKTsKIH0KIAotUGFzc1JlZlB0cjxDU1NSdWxlPiBTdHlsZVNoZWV0SW50
ZXJuYWw6OmNyZWF0ZUNoaWxkUnVsZUNTU09NV3JhcHBlcih1bnNpZ25lZCBpbmRleCwgQ1NTU3R5
bGVTaGVldCogcGFyZW50V3JhcHBlcikKK1N0eWxlUnVsZUJhc2UqIFN0eWxlU2hlZXRJbnRlcm5h
bDo6cnVsZUF0KHVuc2lnbmVkIGluZGV4KSBjb25zdAogewogICAgIEFTU0VSVChpbmRleCA8IHJ1
bGVDb3VudCgpKTsKICAgICAKICAgICB1bnNpZ25lZCBjaGlsZFZlY3RvckluZGV4ID0gaW5kZXg7
CiAgICAgaWYgKGhhc0NoYXJzZXRSdWxlKCkpIHsKICAgICAgICAgaWYgKGluZGV4ID09IDApCi0g
ICAgICAgICAgICByZXR1cm4gQ1NTQ2hhcnNldFJ1bGU6OmNyZWF0ZShwYXJlbnRXcmFwcGVyLCBt
X2VuY29kaW5nRnJvbUNoYXJzZXRSdWxlKTsKKyAgICAgICAgICAgIHJldHVybiAwOwogICAgICAg
ICAtLWNoaWxkVmVjdG9ySW5kZXg7CiAgICAgfQogICAgIGlmIChjaGlsZFZlY3RvckluZGV4IDwg
bV9pbXBvcnRSdWxlcy5zaXplKCkpCi0gICAgICAgIHJldHVybiBtX2ltcG9ydFJ1bGVzW2NoaWxk
VmVjdG9ySW5kZXhdLT5jcmVhdGVDU1NPTVdyYXBwZXIocGFyZW50V3JhcHBlcik7Ci0gICAgCisg
ICAgICAgIHJldHVybiBtX2ltcG9ydFJ1bGVzW2NoaWxkVmVjdG9ySW5kZXhdLmdldCgpOworCiAg
ICAgY2hpbGRWZWN0b3JJbmRleCAtPSBtX2ltcG9ydFJ1bGVzLnNpemUoKTsKLSAgICByZXR1cm4g
bV9jaGlsZFJ1bGVzW2NoaWxkVmVjdG9ySW5kZXhdLT5jcmVhdGVDU1NPTVdyYXBwZXIocGFyZW50
V3JhcHBlcik7CisgICAgcmV0dXJuIG1fY2hpbGRSdWxlc1tjaGlsZFZlY3RvckluZGV4XS5nZXQo
KTsKIH0KIAogdW5zaWduZWQgU3R5bGVTaGVldEludGVybmFsOjpydWxlQ291bnQoKSBjb25zdApA
QCAtMjIwLDYgKzIyNSw3IEBAIHZvaWQgU3R5bGVTaGVldEludGVybmFsOjpwYXJzZXJTZXRFbmNv
ZGkKIAogYm9vbCBTdHlsZVNoZWV0SW50ZXJuYWw6OndyYXBwZXJJbnNlcnRSdWxlKFBhc3NSZWZQ
dHI8U3R5bGVSdWxlQmFzZT4gcnVsZSwgdW5zaWduZWQgaW5kZXgpCiB7CisgICAgQVNTRVJUKG1f
aXNNdXRhYmxlKTsKICAgICBBU1NFUlQoaW5kZXggPD0gcnVsZUNvdW50KCkpOwogICAgIC8vIFBh
cnNlcjo6cGFyc2VSdWxlIGRvZXNuJ3QgY3VycmVudGx5IGFsbG93IEBjaGFyc2V0IHNvIHdlIGRv
bid0IG5lZWQgdG8gZGVhbCB3aXRoIGl0LgogICAgIEFTU0VSVCghcnVsZS0+aXNDaGFyc2V0UnVs
ZSgpKTsKQEAgLTI0Miw3ICsyNDgsNiBAQCBib29sIFN0eWxlU2hlZXRJbnRlcm5hbDo6d3JhcHBl
ckluc2VydFJ1CiAgICAgICAgIG1faW1wb3J0UnVsZXNbY2hpbGRWZWN0b3JJbmRleF0tPnNldFBh
cmVudFN0eWxlU2hlZXQodGhpcyk7CiAgICAgICAgIG1faW1wb3J0UnVsZXNbY2hpbGRWZWN0b3JJ
bmRleF0tPnJlcXVlc3RTdHlsZVNoZWV0KCk7CiAgICAgICAgIC8vIEZJWE1FOiBTdHlsZXNoZWV0
IGRvZXNuJ3QgYWN0dWFsbHkgY2hhbmdlIG1lYW5pbmdmdWxseSBiZWZvcmUgdGhlIGltcG9ydGVk
IHNoZWV0cyBhcmUgbG9hZGVkLgotICAgICAgICBzdHlsZVNoZWV0Q2hhbmdlZCgpOwogICAgICAg
ICByZXR1cm4gdHJ1ZTsKICAgICB9CiAgICAgLy8gSW5zZXJ0aW5nIEBpbXBvcnQgcnVsZSBhZnRl
ciBhIG5vbi1pbXBvcnQgcnVsZSBpcyBub3QgYWxsb3dlZC4KQEAgLTI1MSwyMCArMjU2LDE4IEBA
IGJvb2wgU3R5bGVTaGVldEludGVybmFsOjp3cmFwcGVySW5zZXJ0UnUKICAgICBjaGlsZFZlY3Rv
ckluZGV4IC09IG1faW1wb3J0UnVsZXMuc2l6ZSgpOwogIAogICAgIG1fY2hpbGRSdWxlcy5pbnNl
cnQoY2hpbGRWZWN0b3JJbmRleCwgcnVsZSk7Ci0gICAgCi0gICAgc3R5bGVTaGVldENoYW5nZWQo
KTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAogdm9pZCBTdHlsZVNoZWV0SW50ZXJuYWw6OndyYXBw
ZXJEZWxldGVSdWxlKHVuc2lnbmVkIGluZGV4KQogeworICAgIEFTU0VSVChtX2lzTXV0YWJsZSk7
CiAgICAgQVNTRVJUKGluZGV4IDwgcnVsZUNvdW50KCkpOwogCiAgICAgdW5zaWduZWQgY2hpbGRW
ZWN0b3JJbmRleCA9IGluZGV4OwogICAgIGlmIChoYXNDaGFyc2V0UnVsZSgpKSB7CiAgICAgICAg
IGlmIChjaGlsZFZlY3RvckluZGV4ID09IDApIHsKICAgICAgICAgICAgIGNsZWFyQ2hhcnNldFJ1
bGUoKTsKLSAgICAgICAgICAgIHN0eWxlU2hlZXRDaGFuZ2VkKCk7CiAgICAgICAgICAgICByZXR1
cm47CiAgICAgICAgIH0KICAgICAgICAgLS1jaGlsZFZlY3RvckluZGV4OwpAQCAtMjcyLDEzICsy
NzUsMTEgQEAgdm9pZCBTdHlsZVNoZWV0SW50ZXJuYWw6OndyYXBwZXJEZWxldGVSdQogICAgIGlm
IChjaGlsZFZlY3RvckluZGV4IDwgbV9pbXBvcnRSdWxlcy5zaXplKCkpIHsKICAgICAgICAgbV9p
bXBvcnRSdWxlc1tjaGlsZFZlY3RvckluZGV4XS0+Y2xlYXJQYXJlbnRTdHlsZVNoZWV0KCk7CiAg
ICAgICAgIG1faW1wb3J0UnVsZXMucmVtb3ZlKGNoaWxkVmVjdG9ySW5kZXgpOwotICAgICAgICBz
dHlsZVNoZWV0Q2hhbmdlZCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAgIGNoaWxkVmVj
dG9ySW5kZXggLT0gbV9pbXBvcnRSdWxlcy5zaXplKCk7CiAKICAgICBtX2NoaWxkUnVsZXMucmVt
b3ZlKGNoaWxkVmVjdG9ySW5kZXgpOwotICAgIHN0eWxlU2hlZXRDaGFuZ2VkKCk7CiB9CiAKIHZv
aWQgU3R5bGVTaGVldEludGVybmFsOjpwYXJzZXJBZGROYW1lc3BhY2UoY29uc3QgQXRvbWljU3Ry
aW5nJiBwcmVmaXgsIGNvbnN0IEF0b21pY1N0cmluZyYgdXJpKQpAQCAtNDE1LDE2ICs0MTYsNiBA
QCBEb2N1bWVudCogU3R5bGVTaGVldEludGVybmFsOjpzaW5nbGVPd25lCiAgICAgcmV0dXJuIG93
bmVyTm9kZSA/IG93bmVyTm9kZS0+ZG9jdW1lbnQoKSA6IDA7CiB9CiAKLXZvaWQgU3R5bGVTaGVl
dEludGVybmFsOjpzdHlsZVNoZWV0Q2hhbmdlZCgpCi17Ci0gICAgbV9oYXNNdXRhdGVkID0gdHJ1
ZTsKLQotICAgIERvY3VtZW50KiBvd25lckRvY3VtZW50ID0gc2luZ2xlT3duZXJEb2N1bWVudCgp
OwotICAgIGlmICghb3duZXJEb2N1bWVudCkKLSAgICAgICAgcmV0dXJuOwotICAgIG93bmVyRG9j
dW1lbnQtPnN0eWxlUmVzb2x2ZXJDaGFuZ2VkKERlZmVyUmVjYWxjU3R5bGUpOwotfQotCiBLVVJM
IFN0eWxlU2hlZXRJbnRlcm5hbDo6Y29tcGxldGVVUkwoY29uc3QgU3RyaW5nJiB1cmwpIGNvbnN0
CiB7CiAgICAgcmV0dXJuIENTU1BhcnNlcjo6Y29tcGxldGVVUkwobV9wYXJzZXJDb250ZXh0LCB1
cmwpOwpAQCAtNDczLDYgKzQ2NCwyMCBAQCB2b2lkIFN0eWxlU2hlZXRJbnRlcm5hbDo6dW5yZWdp
c3RlckNsaWVuCiAgICAgbV9jbGllbnRzLnJlbW92ZShwb3NpdGlvbik7CiB9CiAKK3ZvaWQgU3R5
bGVTaGVldEludGVybmFsOjphZGRlZFRvTWVtb3J5Q2FjaGUoKQoreworICAgIEFTU0VSVCghbV9p
c0luTWVtb3J5Q2FjaGUpOworICAgIEFTU0VSVChpc0NhY2hlYWJsZSgpKTsKKyAgICBtX2lzSW5N
ZW1vcnlDYWNoZSA9IHRydWU7Cit9CisKK3ZvaWQgU3R5bGVTaGVldEludGVybmFsOjpyZW1vdmVk
RnJvbU1lbW9yeUNhY2hlKCkKK3sKKyAgICBBU1NFUlQobV9pc0luTWVtb3J5Q2FjaGUpOworICAg
IEFTU0VSVChpc0NhY2hlYWJsZSgpKTsKKyAgICBtX2lzSW5NZW1vcnlDYWNoZSA9IGZhbHNlOwor
fQorCiBQYXNzUmVmUHRyPENTU1N0eWxlU2hlZXQ+IENTU1N0eWxlU2hlZXQ6OmNyZWF0ZUlubGlu
ZShOb2RlKiBvd25lck5vZGUsIGNvbnN0IEtVUkwmIGJhc2VVUkwsIGNvbnN0IFN0cmluZyYgZW5j
b2RpbmcpCiB7CiAgICAgQ1NTUGFyc2VyQ29udGV4dCBwYXJzZXJDb250ZXh0KG93bmVyTm9kZS0+
ZG9jdW1lbnQoKSwgYmFzZVVSTCwgZW5jb2RpbmcpOwpAQCAtNTE0LDE0ICs1MTksNTkgQEAgQ1NT
U3R5bGVTaGVldDo6fkNTU1N0eWxlU2hlZXQoKQogICAgIG1faW50ZXJuYWwtPnVucmVnaXN0ZXJD
bGllbnQodGhpcyk7CiB9CiAKK3ZvaWQgQ1NTU3R5bGVTaGVldDo6d2lsbE11dGF0ZVJ1bGVzKCkK
K3sKKyAgICAvLyBJZiB3ZSBhcmUgdGhlIG9ubHkgY2xpZW50IGl0IGlzIHNhZmUgdG8gbXV0YXRl
LgorICAgIGlmIChtX2ludGVybmFsLT5oYXNPbmVDbGllbnQoKSAmJiAhbV9pbnRlcm5hbC0+aXNJ
bk1lbW9yeUNhY2hlKCkpIHsKKyAgICAgICAgbV9pbnRlcm5hbC0+c2V0TXV0YWJsZSgpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIC8vIE9ubHkgY2FjaGVhYmxlIHN0eWxlc2hlZXRzIHNo
b3VsZCBoYXZlIG11bHRpcGxlIGNsaWVudHMuCisgICAgQVNTRVJUKG1faW50ZXJuYWwtPmlzQ2Fj
aGVhYmxlKCkpOworCisgICAgLy8gQ29weS1vbi13cml0ZS4KKyAgICBtX2ludGVybmFsLT51bnJl
Z2lzdGVyQ2xpZW50KHRoaXMpOworICAgIG1faW50ZXJuYWwgPSBtX2ludGVybmFsLT5jb3B5KCk7
CisgICAgbV9pbnRlcm5hbC0+cmVnaXN0ZXJDbGllbnQodGhpcyk7CisKKyAgICBtX2ludGVybmFs
LT5zZXRNdXRhYmxlKCk7CisKKyAgICAvLyBBbnkgZXhpc3RpbmcgQ1NTT00gd3JhcHBlcnMgbmVl
ZCB0byBiZSBjb25uZWN0ZWQgdG8gdGhlIGNvcGllZCBjaGlsZCBydWxlcy4KKyAgICByZWF0dGFj
aENoaWxkUnVsZUNTU09NV3JhcHBlcnMoKTsKK30KKwordm9pZCBDU1NTdHlsZVNoZWV0OjpkaWRN
dXRhdGVSdWxlcygpCit7CisgICAgQVNTRVJUKG1faW50ZXJuYWwtPmlzTXV0YWJsZSgpKTsKKyAg
ICBBU1NFUlQobV9pbnRlcm5hbC0+aGFzT25lQ2xpZW50KCkpOworCisgICAgZGlkTXV0YXRlKCk7
Cit9CisKK3ZvaWQgQ1NTU3R5bGVTaGVldDo6ZGlkTXV0YXRlKCkKK3sKKyAgICBEb2N1bWVudCog
b3duZXIgPSBvd25lckRvY3VtZW50KCk7CisgICAgaWYgKCFvd25lcikKKyAgICAgICAgcmV0dXJu
OworICAgIG93bmVyLT5zdHlsZVJlc29sdmVyQ2hhbmdlZChEZWZlclJlY2FsY1N0eWxlKTsKK30K
Kwordm9pZCBDU1NTdHlsZVNoZWV0OjpyZWF0dGFjaENoaWxkUnVsZUNTU09NV3JhcHBlcnMoKQor
eworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX2NoaWxkUnVsZUNTU09NV3JhcHBlcnMu
c2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKCFtX2NoaWxkUnVsZUNTU09NV3JhcHBlcnNbaV0p
CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgbV9jaGlsZFJ1bGVDU1NPTVdyYXBwZXJz
W2ldLT5yZWF0dGFjaChtX2ludGVybmFsLT5ydWxlQXQoaSkpOworICAgIH0KK30KKwogdm9pZCBD
U1NTdHlsZVNoZWV0OjpzZXREaXNhYmxlZChib29sIGRpc2FibGVkKQogeyAKICAgICBpZiAoZGlz
YWJsZWQgPT0gbV9pc0Rpc2FibGVkKQogICAgICAgICByZXR1cm47CiAgICAgbV9pc0Rpc2FibGVk
ID0gZGlzYWJsZWQ7Ci0gICAgRG9jdW1lbnQqIG93bmVyID0gb3duZXJEb2N1bWVudCgpOwotICAg
IGlmIChvd25lcikKLSAgICAgICAgb3duZXItPnN0eWxlUmVzb2x2ZXJDaGFuZ2VkKERlZmVyUmVj
YWxjU3R5bGUpOworCisgICAgZGlkTXV0YXRlKCk7CiB9CiAKIHZvaWQgQ1NTU3R5bGVTaGVldDo6
c2V0TWVkaWFRdWVyaWVzKFBhc3NSZWZQdHI8TWVkaWFRdWVyeVNldD4gbWVkaWFRdWVyaWVzKQpA
QCAtNTQ1LDggKzU5NSwxMyBAQCBDU1NSdWxlKiBDU1NTdHlsZVNoZWV0OjppdGVtKHVuc2lnbmVk
IGluCiAgICAgQVNTRVJUKG1fY2hpbGRSdWxlQ1NTT01XcmFwcGVycy5zaXplKCkgPT0gcnVsZUNv
dW50KTsKICAgICAKICAgICBSZWZQdHI8Q1NTUnVsZT4mIGNzc1J1bGUgPSBtX2NoaWxkUnVsZUNT
U09NV3JhcHBlcnNbaW5kZXhdOwotICAgIGlmICghY3NzUnVsZSkKLSAgICAgICAgY3NzUnVsZSA9
IG1faW50ZXJuYWwtPmNyZWF0ZUNoaWxkUnVsZUNTU09NV3JhcHBlcihpbmRleCwgdGhpcyk7Cisg
ICAgaWYgKCFjc3NSdWxlKSB7CisgICAgICAgIGlmIChpbmRleCA9PSAwICYmIG1faW50ZXJuYWwt
Pmhhc0NoYXJzZXRSdWxlKCkpIHsKKyAgICAgICAgICAgIEFTU0VSVCghbV9pbnRlcm5hbC0+cnVs
ZUF0KDApKTsKKyAgICAgICAgICAgIGNzc1J1bGUgPSBDU1NDaGFyc2V0UnVsZTo6Y3JlYXRlKHRo
aXMsIG1faW50ZXJuYWwtPmVuY29kaW5nRnJvbUNoYXJzZXRSdWxlKCkpOworICAgICAgICB9IGVs
c2UKKyAgICAgICAgICAgIGNzc1J1bGUgPSBtX2ludGVybmFsLT5ydWxlQXQoaW5kZXgpLT5jcmVh
dGVDU1NPTVdyYXBwZXIodGhpcyk7CisgICAgfQogICAgIHJldHVybiBjc3NSdWxlLmdldCgpOwog
fQogCkBAIC01ODQsNiArNjM5LDggQEAgdW5zaWduZWQgQ1NTU3R5bGVTaGVldDo6aW5zZXJ0UnVs
ZShjb25zdAogICAgICAgICBlYyA9IFNZTlRBWF9FUlI7CiAgICAgICAgIHJldHVybiAwOwogICAg
IH0KKyAgICBSdWxlTXV0YXRpb24gbXV0YXRpb24odGhpcyk7CisKICAgICBib29sIHN1Y2Nlc3Mg
PSBtX2ludGVybmFsLT53cmFwcGVySW5zZXJ0UnVsZShydWxlLCBpbmRleCk7CiAgICAgaWYgKCFz
dWNjZXNzKSB7CiAgICAgICAgIGVjID0gSElFUkFSQ0hZX1JFUVVFU1RfRVJSOwpAQCAtNTkxLDYg
KzY0OCw3IEBAIHVuc2lnbmVkIENTU1N0eWxlU2hlZXQ6Omluc2VydFJ1bGUoY29uc3QKICAgICB9
ICAgICAgICAKICAgICBpZiAoIW1fY2hpbGRSdWxlQ1NTT01XcmFwcGVycy5pc0VtcHR5KCkpCiAg
ICAgICAgIG1fY2hpbGRSdWxlQ1NTT01XcmFwcGVycy5pbnNlcnQoaW5kZXgsIFJlZlB0cjxDU1NS
dWxlPigpKTsKKwogICAgIHJldHVybiBpbmRleDsKIH0KIApAQCAtNjAzLDYgKzY2MSw4IEBAIHZv
aWQgQ1NTU3R5bGVTaGVldDo6ZGVsZXRlUnVsZSh1bnNpZ25lZCAKICAgICAgICAgZWMgPSBJTkRF
WF9TSVpFX0VSUjsKICAgICAgICAgcmV0dXJuOwogICAgIH0KKyAgICBSdWxlTXV0YXRpb24gbXV0
YXRpb24odGhpcyk7CisKICAgICBtX2ludGVybmFsLT53cmFwcGVyRGVsZXRlUnVsZShpbmRleCk7
CiAKICAgICBpZiAoIW1fY2hpbGRSdWxlQ1NTT01XcmFwcGVycy5pc0VtcHR5KCkpIHsKQEAgLTY2
NSw0ICs3MjUsMjQgQEAgdm9pZCBDU1NTdHlsZVNoZWV0OjpjbGVhckNoaWxkUnVsZUNTU09NVwog
ICAgIG1fY2hpbGRSdWxlQ1NTT01XcmFwcGVycy5jbGVhcigpOwogfQogCitDU1NTdHlsZVNoZWV0
OjpSdWxlTXV0YXRpb246OlJ1bGVNdXRhdGlvbihDU1NTdHlsZVNoZWV0KiBzaGVldCkKKyAgICA6
IG1fc3R5bGVTaGVldChzaGVldCkKK3sKKyAgICBpZiAobV9zdHlsZVNoZWV0KQorICAgICAgICBt
X3N0eWxlU2hlZXQtPndpbGxNdXRhdGVSdWxlcygpOworfQorCitDU1NTdHlsZVNoZWV0OjpSdWxl
TXV0YXRpb246OlJ1bGVNdXRhdGlvbihDU1NSdWxlKiBydWxlKQorICAgIDogbV9zdHlsZVNoZWV0
KHJ1bGUgPyBydWxlLT5wYXJlbnRTdHlsZVNoZWV0KCkgOiAwKQoreworICAgIGlmIChtX3N0eWxl
U2hlZXQpCisgICAgICAgIG1fc3R5bGVTaGVldC0+d2lsbE11dGF0ZVJ1bGVzKCk7Cit9CisKK0NT
U1N0eWxlU2hlZXQ6OlJ1bGVNdXRhdGlvbjo6flJ1bGVNdXRhdGlvbigpCit7CisgICAgaWYgKG1f
c3R5bGVTaGVldCkKKyAgICAgICAgbV9zdHlsZVNoZWV0LT5kaWRNdXRhdGVSdWxlcygpOworfQor
CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9jc3MvQ1NTU3R5bGVTaGVldC5oCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNoZWV0LmgJKHJldmlzaW9uIDExNTk1OSkK
KysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9DU1NTdHlsZVNoZWV0LmgJKHdvcmtpbmcgY29weSkKQEAg
LTY1LDggKzY1LDYgQEAgcHVibGljOgogCiAgICAgY29uc3QgQXRvbWljU3RyaW5nJiBkZXRlcm1p
bmVOYW1lc3BhY2UoY29uc3QgQXRvbWljU3RyaW5nJiBwcmVmaXgpOwogCi0gICAgdm9pZCBzdHls
ZVNoZWV0Q2hhbmdlZCgpOwotCiAgICAgdm9pZCBwYXJzZUF1dGhvclN0eWxlU2hlZXQoY29uc3Qg
Q2FjaGVkQ1NTU3R5bGVTaGVldCosIGNvbnN0IFNlY3VyaXR5T3JpZ2luKik7CiAgICAgYm9vbCBw
YXJzZVN0cmluZyhjb25zdCBTdHJpbmcmKTsKICAgICBib29sIHBhcnNlU3RyaW5nQXRMaW5lKGNv
bnN0IFN0cmluZyYsIGludCBzdGFydExpbmVOdW1iZXIpOwpAQCAtMTAxLDYgKzk5LDggQEAgcHVi
bGljOgogCiAgICAgdm9pZCBjbGVhclJ1bGVzKCk7CiAKKyAgICBib29sIGhhc0NoYXJzZXRSdWxl
KCkgY29uc3QgeyByZXR1cm4gIW1fZW5jb2RpbmdGcm9tQ2hhcnNldFJ1bGUuaXNOdWxsKCk7IH0K
KyAgICBTdHJpbmcgZW5jb2RpbmdGcm9tQ2hhcnNldFJ1bGUoKSBjb25zdCB7IHJldHVybiBtX2Vu
Y29kaW5nRnJvbUNoYXJzZXRSdWxlOyB9CiAgICAgLy8gUnVsZXMgb3RoZXIgdGhhbiBAY2hhcnNl
dCBhbmQgQGltcG9ydC4KICAgICBjb25zdCBWZWN0b3I8UmVmUHRyPFN0eWxlUnVsZUJhc2U+ID4m
IGNoaWxkUnVsZXMoKSBjb25zdCB7IHJldHVybiBtX2NoaWxkUnVsZXM7IH0KICAgICBjb25zdCBW
ZWN0b3I8UmVmUHRyPFN0eWxlUnVsZUltcG9ydD4gPiYgaW1wb3J0UnVsZXMoKSBjb25zdCB7IHJl
dHVybiBtX2ltcG9ydFJ1bGVzOyB9CkBAIC0xMjAsNyArMTIwLDggQEAgcHVibGljOgogICAgIGNv
bnN0IEtVUkwmIGJhc2VVUkwoKSBjb25zdCB7IHJldHVybiBtX3BhcnNlckNvbnRleHQuYmFzZVVS
TDsgfQogCiAgICAgdW5zaWduZWQgcnVsZUNvdW50KCkgY29uc3Q7Ci0gICAgCisgICAgU3R5bGVS
dWxlQmFzZSogcnVsZUF0KHVuc2lnbmVkIGluZGV4KSBjb25zdDsKKwogICAgIGJvb2wgdXNlc1Jl
bVVuaXRzKCkgY29uc3QgeyByZXR1cm4gbV91c2VzUmVtVW5pdHM7IH0KIAogICAgIHVuc2lnbmVk
IGVzdGltYXRlZFNpemVJbkJ5dGVzKCkgY29uc3Q7CkBAIC0xMjgsMTkgKzEyOSwyNCBAQCBwdWJs
aWM6CiAgICAgYm9vbCB3cmFwcGVySW5zZXJ0UnVsZShQYXNzUmVmUHRyPFN0eWxlUnVsZUJhc2U+
LCB1bnNpZ25lZCBpbmRleCk7CiAgICAgdm9pZCB3cmFwcGVyRGVsZXRlUnVsZSh1bnNpZ25lZCBp
bmRleCk7CiAKLSAgICBQYXNzUmVmUHRyPENTU1J1bGU+IGNyZWF0ZUNoaWxkUnVsZUNTU09NV3Jh
cHBlcih1bnNpZ25lZCBpbmRleCwgQ1NTU3R5bGVTaGVldCogcGFyZW50V3JhcHBlcik7Ci0KICAg
ICBQYXNzUmVmUHRyPFN0eWxlU2hlZXRJbnRlcm5hbD4gY29weSgpIGNvbnN0IHsgcmV0dXJuIGFk
b3B0UmVmKG5ldyBTdHlsZVNoZWV0SW50ZXJuYWwoKnRoaXMpKTsgfQogCiAgICAgdm9pZCByZWdp
c3RlckNsaWVudChDU1NTdHlsZVNoZWV0Kik7CiAgICAgdm9pZCB1bnJlZ2lzdGVyQ2xpZW50KENT
U1N0eWxlU2hlZXQqKTsKKyAgICBib29sIGhhc09uZUNsaWVudCgpIHsgcmV0dXJuIG1fY2xpZW50
cy5zaXplKCkgPT0gMTsgfQorCisgICAgYm9vbCBpc011dGFibGUoKSBjb25zdCB7IHJldHVybiBt
X2lzTXV0YWJsZTsgfQorICAgIHZvaWQgc2V0TXV0YWJsZSgpIHsgbV9pc011dGFibGUgPSB0cnVl
OyB9CisKKyAgICBib29sIGlzSW5NZW1vcnlDYWNoZSgpIGNvbnN0IHsgcmV0dXJuIG1faXNJbk1l
bW9yeUNhY2hlOyB9CisgICAgdm9pZCBhZGRlZFRvTWVtb3J5Q2FjaGUoKTsKKyAgICB2b2lkIHJl
bW92ZWRGcm9tTWVtb3J5Q2FjaGUoKTsKIAogcHJpdmF0ZToKICAgICBTdHlsZVNoZWV0SW50ZXJu
YWwoU3R5bGVSdWxlSW1wb3J0KiBvd25lclJ1bGUsIGNvbnN0IFN0cmluZyYgb3JpZ2luYWxVUkws
IGNvbnN0IEtVUkwmIGJhc2VVUkwsIGNvbnN0IENTU1BhcnNlckNvbnRleHQmKTsKICAgICBTdHls
ZVNoZWV0SW50ZXJuYWwoY29uc3QgU3R5bGVTaGVldEludGVybmFsJik7CiAKICAgICB2b2lkIGNs
ZWFyQ2hhcnNldFJ1bGUoKTsKLSAgICBib29sIGhhc0NoYXJzZXRSdWxlKCkgY29uc3QgeyByZXR1
cm4gIW1fZW5jb2RpbmdGcm9tQ2hhcnNldFJ1bGUuaXNOdWxsKCk7IH0KIAogICAgIFN0eWxlUnVs
ZUltcG9ydCogbV9vd25lclJ1bGU7CiAKQEAgLTE1OCw3ICsxNjQsOCBAQCBwcml2YXRlOgogICAg
IGJvb2wgbV9oYXNTeW50YWN0aWNhbGx5VmFsaWRDU1NIZWFkZXIgOiAxOwogICAgIGJvb2wgbV9k
aWRMb2FkRXJyb3JPY2N1ciA6IDE7CiAgICAgYm9vbCBtX3VzZXNSZW1Vbml0cyA6IDE7Ci0gICAg
Ym9vbCBtX2hhc011dGF0ZWQgOiAxOworICAgIGJvb2wgbV9pc011dGFibGUgOiAxOworICAgIGJv
b2wgbV9pc0luTWVtb3J5Q2FjaGUgOiAxOwogICAgIAogICAgIENTU1BhcnNlckNvbnRleHQgbV9w
YXJzZXJDb250ZXh0OwogCkBAIC0yMDcsMTMgKzIxNCwyNyBAQCBwdWJsaWM6CiAgICAgdmlydHVh
bCBib29sIGlzTG9hZGluZygpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1faW50ZXJuYWwtPmlz
TG9hZGluZygpOyB9CiAgICAgCiAgICAgdm9pZCBjbGVhck93bmVyUnVsZSgpIHsgbV9vd25lclJ1
bGUgPSAwOyB9Ci0gICAgdm9pZCBzdHlsZVNoZWV0Q2hhbmdlZCgpIHsgbV9pbnRlcm5hbC0+c3R5
bGVTaGVldENoYW5nZWQoKTsgfQogICAgIERvY3VtZW50KiBvd25lckRvY3VtZW50KCkgY29uc3Q7
CiAgICAgTWVkaWFRdWVyeVNldCogbWVkaWFRdWVyaWVzKCkgY29uc3QgeyByZXR1cm4gbV9tZWRp
YVF1ZXJpZXMuZ2V0KCk7IH0KICAgICB2b2lkIHNldE1lZGlhUXVlcmllcyhQYXNzUmVmUHRyPE1l
ZGlhUXVlcnlTZXQ+KTsKICAgICB2b2lkIHNldFRpdGxlKGNvbnN0IFN0cmluZyYgdGl0bGUpIHsg
bV90aXRsZSA9IHRpdGxlOyB9CisKKyAgICBjbGFzcyBSdWxlTXV0YXRpb24geworICAgIHB1Ymxp
YzoKKyAgICAgICAgUnVsZU11dGF0aW9uKENTU1N0eWxlU2hlZXQqKTsKKyAgICAgICAgUnVsZU11
dGF0aW9uKENTU1J1bGUqKTsKKyAgICAgICAgflJ1bGVNdXRhdGlvbigpOworCisgICAgcHJpdmF0
ZToKKyAgICAgICAgQ1NTU3R5bGVTaGVldCogbV9zdHlsZVNoZWV0OworICAgIH07CisKKyAgICB2
b2lkIHdpbGxNdXRhdGVSdWxlcygpOworICAgIHZvaWQgZGlkTXV0YXRlUnVsZXMoKTsKKyAgICB2
b2lkIGRpZE11dGF0ZSgpOwogICAgIAogICAgIHZvaWQgY2xlYXJDaGlsZFJ1bGVDU1NPTVdyYXBw
ZXJzKCk7CisgICAgdm9pZCByZWF0dGFjaENoaWxkUnVsZUNTU09NV3JhcHBlcnMoKTsKIAogICAg
IFN0eWxlU2hlZXRJbnRlcm5hbCogaW50ZXJuYWwoKSBjb25zdCB7IHJldHVybiBtX2ludGVybmFs
LmdldCgpOyB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYUxpc3QuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9NZWRpYUxpc3QuY3BwCShyZXZpc2lvbiAxMTU5
NTkpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvTWVkaWFMaXN0LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjMwLDEyICsyMzAsMTUgQEAgTWVkaWFMaXN0Ojp+TWVkaWFMaXN0KCkKIAogdm9pZCBNZWRp
YUxpc3Q6OnNldE1lZGlhVGV4dChjb25zdCBTdHJpbmcmIHZhbHVlLCBFeGNlcHRpb25Db2RlJiBl
YykKIHsKKyAgICBDU1NTdHlsZVNoZWV0OjpSdWxlTXV0YXRpb24gbXV0YXRpb24obV9wYXJlbnRS
dWxlKTsKKwogICAgIGJvb2wgc3VjY2VzcyA9IG1fbWVkaWFRdWVyaWVzLT5wYXJzZSh2YWx1ZSk7
CiAgICAgaWYgKCFzdWNjZXNzKSB7CiAgICAgICAgIGVjID0gU1lOVEFYX0VSUjsKICAgICAgICAg
cmV0dXJuOwogICAgIH0KLSAgICBub3RpZnlDaGFuZ2VkKCk7CisgICAgaWYgKG1fcGFyZW50U3R5
bGVTaGVldCkKKyAgICAgICAgbV9wYXJlbnRTdHlsZVNoZWV0LT5kaWRNdXRhdGUoKTsKIH0KIAog
U3RyaW5nIE1lZGlhTGlzdDo6aXRlbSh1bnNpZ25lZCBpbmRleCkgY29uc3QKQEAgLTI0OCwzMSAr
MjUxLDM1IEBAIFN0cmluZyBNZWRpYUxpc3Q6Oml0ZW0odW5zaWduZWQgaW5kZXgpIGMKIAogdm9p
ZCBNZWRpYUxpc3Q6OmRlbGV0ZU1lZGl1bShjb25zdCBTdHJpbmcmIG1lZGl1bSwgRXhjZXB0aW9u
Q29kZSYgZWMpCiB7CisgICAgQ1NTU3R5bGVTaGVldDo6UnVsZU11dGF0aW9uIG11dGF0aW9uKG1f
cGFyZW50UnVsZSk7CisKICAgICBib29sIHN1Y2Nlc3MgPSBtX21lZGlhUXVlcmllcy0+cmVtb3Zl
KG1lZGl1bSk7CiAgICAgaWYgKCFzdWNjZXNzKSB7CiAgICAgICAgIGVjID0gTk9UX0ZPVU5EX0VS
UjsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAgICBub3RpZnlDaGFuZ2VkKCk7CisgICAgaWYg
KG1fcGFyZW50U3R5bGVTaGVldCkKKyAgICAgICAgbV9wYXJlbnRTdHlsZVNoZWV0LT5kaWRNdXRh
dGUoKTsKIH0KIAogdm9pZCBNZWRpYUxpc3Q6OmFwcGVuZE1lZGl1bShjb25zdCBTdHJpbmcmIG1l
ZGl1bSwgRXhjZXB0aW9uQ29kZSYgZWMpCiB7CisgICAgQ1NTU3R5bGVTaGVldDo6UnVsZU11dGF0
aW9uIG11dGF0aW9uKG1fcGFyZW50UnVsZSk7CisKICAgICBib29sIHN1Y2Nlc3MgPSBtX21lZGlh
UXVlcmllcy0+YWRkKG1lZGl1bSk7CiAgICAgaWYgKCFzdWNjZXNzKSB7CiAgICAgICAgIC8vIEZJ
WE1FOiBTaG91bGQgdGhpcyByZWFsbHkgYmUgSU5WQUxJRF9DSEFSQUNURVJfRVJSPwogICAgICAg
ICBlYyA9IElOVkFMSURfQ0hBUkFDVEVSX0VSUjsKICAgICAgICAgcmV0dXJuOwogICAgIH0KLSAg
ICBub3RpZnlDaGFuZ2VkKCk7CisgICAgaWYgKG1fcGFyZW50U3R5bGVTaGVldCkKKyAgICAgICAg
bV9wYXJlbnRTdHlsZVNoZWV0LT5kaWRNdXRhdGUoKTsKIH0KIAotdm9pZCBNZWRpYUxpc3Q6Om5v
dGlmeUNoYW5nZWQoKQordm9pZCBNZWRpYUxpc3Q6OnJlYXR0YWNoKE1lZGlhUXVlcnlTZXQqIG1l
ZGlhUXVlcmllcykKIHsKLSAgICBDU1NTdHlsZVNoZWV0KiBwYXJlbnRTdHlsZVNoZWV0ID0gbV9w
YXJlbnRSdWxlID8gbV9wYXJlbnRSdWxlLT5wYXJlbnRTdHlsZVNoZWV0KCkgOiBtX3BhcmVudFN0
eWxlU2hlZXQ7Ci0gICAgaWYgKCFwYXJlbnRTdHlsZVNoZWV0KQotICAgICAgICByZXR1cm47Ci0g
ICAgcGFyZW50U3R5bGVTaGVldC0+c3R5bGVTaGVldENoYW5nZWQoKTsKKyAgICBBU1NFUlQobWVk
aWFRdWVyaWVzKTsKKyAgICBtX21lZGlhUXVlcmllcyA9IG1lZGlhUXVlcmllczsKIH0KIAogfQpJ
bmRleDogU291cmNlL1dlYkNvcmUvY3NzL01lZGlhTGlzdC5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2Nzcy9NZWRpYUxpc3QuaAkocmV2aXNpb24gMTE1OTU5KQorKysgU291cmNlL1dl
YkNvcmUvY3NzL01lZGlhTGlzdC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQsMTMgKzEwNCwxMyBA
QCBwdWJsaWM6CiAgICAgdm9pZCBjbGVhclBhcmVudFJ1bGUoKSB7IEFTU0VSVChtX3BhcmVudFJ1
bGUpOyBtX3BhcmVudFJ1bGUgPSAwOyB9CiAgICAgY29uc3QgTWVkaWFRdWVyeVNldCogcXVlcmll
cygpIGNvbnN0IHsgcmV0dXJuIG1fbWVkaWFRdWVyaWVzLmdldCgpOyB9CiAKKyAgICB2b2lkIHJl
YXR0YWNoKE1lZGlhUXVlcnlTZXQqKTsKKwogcHJpdmF0ZToKICAgICBNZWRpYUxpc3QoKTsKICAg
ICBNZWRpYUxpc3QoTWVkaWFRdWVyeVNldCosIENTU1N0eWxlU2hlZXQqIHBhcmVudFNoZWV0KTsK
ICAgICBNZWRpYUxpc3QoTWVkaWFRdWVyeVNldCosIENTU1J1bGUqIHBhcmVudFJ1bGUpOwogCi0g
ICAgdm9pZCBub3RpZnlDaGFuZ2VkKCk7Ci0KICAgICBSZWZQdHI8TWVkaWFRdWVyeVNldD4gbV9t
ZWRpYVF1ZXJpZXM7CiAgICAgQ1NTU3R5bGVTaGVldCogbV9wYXJlbnRTdHlsZVNoZWV0OwogICAg
IENTU1J1bGUqIG1fcGFyZW50UnVsZTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9Qcm9wZXJ0
eVNldENTU1N0eWxlRGVjbGFyYXRpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L2Nzcy9Qcm9wZXJ0eVNldENTU1N0eWxlRGVjbGFyYXRpb24uY3BwCShyZXZpc2lvbiAxMTU5NTkp
CisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTUxLDExICsxNTEsMTQgQEAgdm9pZCBQcm9wZXJ0eVNldENT
U1N0eWxlRGVjbGFyYXRpb246OnNldAogI2lmIEVOQUJMRShNVVRBVElPTl9PQlNFUlZFUlMpCiAg
ICAgU3R5bGVBdHRyaWJ1dGVNdXRhdGlvblNjb3BlIG11dGF0aW9uU2NvcGUodGhpcyk7CiAjZW5k
aWYKKyAgICB3aWxsTXV0YXRlKCk7CisKICAgICBlYyA9IDA7CiAgICAgLy8gRklYTUU6IERldGVj
dCBzeW50YXggZXJyb3JzIGFuZCBzZXQgZWMuCiAgICAgbV9wcm9wZXJ0eVNldC0+cGFyc2VEZWNs
YXJhdGlvbih0ZXh0LCBjb250ZXh0U3R5bGVTaGVldCgpKTsKIAotICAgIGRpZE11dGF0ZSgpOwor
ICAgIGRpZE11dGF0ZSh0cnVlKTsKKwogI2lmIEVOQUJMRShNVVRBVElPTl9PQlNFUlZFUlMpCiAg
ICAgbXV0YXRpb25TY29wZS5lbnF1ZXVlTXV0YXRpb25SZWNvcmQoKTsgICAgCiAjZW5kaWYKQEAg
LTIxMiwxMyArMjE1LDE5IEBAIHZvaWQgUHJvcGVydHlTZXRDU1NTdHlsZURlY2xhcmF0aW9uOjpz
ZXQKICAgICBDU1NQcm9wZXJ0eUlEIHByb3BlcnR5SUQgPSBjc3NQcm9wZXJ0eUlEKHByb3BlcnR5
TmFtZSk7CiAgICAgaWYgKCFwcm9wZXJ0eUlEKQogICAgICAgICByZXR1cm47CisKICAgICBib29s
IGltcG9ydGFudCA9IHByaW9yaXR5LmZpbmQoImltcG9ydGFudCIsIDAsIGZhbHNlKSAhPSBub3RG
b3VuZDsKKworICAgIHdpbGxNdXRhdGUoKTsKKwogICAgIGVjID0gMDsKICAgICBib29sIGNoYW5n
ZWQgPSBtX3Byb3BlcnR5U2V0LT5zZXRQcm9wZXJ0eShwcm9wZXJ0eUlELCB2YWx1ZSwgaW1wb3J0
YW50LCBjb250ZXh0U3R5bGVTaGVldCgpKTsKKworICAgIGRpZE11dGF0ZShjaGFuZ2VkKTsKKwog
ICAgIGlmIChjaGFuZ2VkKSB7CiAgICAgICAgIC8vIENTUyBET00gcmVxdWlyZXMgcmFpc2luZyBT
WU5UQVhfRVJSIG9mIHBhcnNpbmcgZmFpbGVkLCBidXQgdGhpcyBpcyB0b28gZGFuZ2Vyb3VzIGZv
ciBjb21wYXRpYmlsaXR5LAogICAgICAgICAvLyBzZWUgPGh0dHA6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTcyOTY+LgotICAgICAgICBkaWRNdXRhdGUoKTsKICNpZiBFTkFCTEUo
TVVUQVRJT05fT0JTRVJWRVJTKQogICAgICAgICBtdXRhdGlvblNjb3BlLmVucXVldWVNdXRhdGlv
blJlY29yZCgpOwogI2VuZGlmCkBAIC0yMzMsMTEgKzI0MiwxNiBAQCBTdHJpbmcgUHJvcGVydHlT
ZXRDU1NTdHlsZURlY2xhcmF0aW9uOjpyCiAgICAgQ1NTUHJvcGVydHlJRCBwcm9wZXJ0eUlEID0g
Y3NzUHJvcGVydHlJRChwcm9wZXJ0eU5hbWUpOwogICAgIGlmICghcHJvcGVydHlJRCkKICAgICAg
ICAgcmV0dXJuIFN0cmluZygpOworCisgICAgd2lsbE11dGF0ZSgpOworCiAgICAgZWMgPSAwOwog
ICAgIFN0cmluZyByZXN1bHQ7CiAgICAgYm9vbCBjaGFuZ2VzID0gbV9wcm9wZXJ0eVNldC0+cmVt
b3ZlUHJvcGVydHkocHJvcGVydHlJRCwgJnJlc3VsdCk7CisKKyAgICBkaWRNdXRhdGUoY2hhbmdl
cyk7CisKICAgICBpZiAoY2hhbmdlcykgewotICAgICAgICBkaWRNdXRhdGUoKTsKICNpZiBFTkFC
TEUoTVVUQVRJT05fT0JTRVJWRVJTKQogICAgICAgICBtdXRhdGlvblNjb3BlLmVucXVldWVNdXRh
dGlvblJlY29yZCgpOwogI2VuZGlmCkBAIC0yNjAsMjIgKzI3NCwyMCBAQCB2b2lkIFByb3BlcnR5
U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbjo6c2V0CiAjaWYgRU5BQkxFKE1VVEFUSU9OX09CU0VSVkVS
UykKICAgICBTdHlsZUF0dHJpYnV0ZU11dGF0aW9uU2NvcGUgbXV0YXRpb25TY29wZSh0aGlzKTsK
ICNlbmRpZgorICAgIHdpbGxNdXRhdGUoKTsKKwogICAgIGVjID0gMDsKICAgICBib29sIGNoYW5n
ZWQgPSBtX3Byb3BlcnR5U2V0LT5zZXRQcm9wZXJ0eShwcm9wZXJ0eUlELCB2YWx1ZSwgaW1wb3J0
YW50LCBjb250ZXh0U3R5bGVTaGVldCgpKTsKKworICAgIGRpZE11dGF0ZShjaGFuZ2VkKTsKKwog
ICAgIGlmIChjaGFuZ2VkKSB7Ci0gICAgICAgIGRpZE11dGF0ZSgpOwogI2lmIEVOQUJMRShNVVRB
VElPTl9PQlNFUlZFUlMpCiAgICAgICAgIG11dGF0aW9uU2NvcGUuZW5xdWV1ZU11dGF0aW9uUmVj
b3JkKCk7CiAjZW5kaWYKICAgICB9CiB9CiAKLXZvaWQgUHJvcGVydHlTZXRDU1NTdHlsZURlY2xh
cmF0aW9uOjpkaWRNdXRhdGUoKQotewotICAgIG1fY3Nzb21DU1NWYWx1ZUNsb25lcy5jbGVhcigp
OwotICAgIHNldE5lZWRzU3R5bGVSZWNhbGMoKTsKLX0KLQogQ1NTVmFsdWUqIFByb3BlcnR5U2V0
Q1NTU3R5bGVEZWNsYXJhdGlvbjo6Y2xvbmVBbmRDYWNoZUZvckNTU09NKENTU1ZhbHVlKiBpbnRl
cm5hbFZhbHVlKQogewogICAgIGlmICghaW50ZXJuYWxWYWx1ZSkKQEAgLTMzOCwxMiArMzUwLDIw
IEBAIHZvaWQgU3R5bGVSdWxlQ1NTU3R5bGVEZWNsYXJhdGlvbjo6ZGVyZWYKICAgICAgICAgZGVs
ZXRlIHRoaXM7CiB9CiAKLXZvaWQgU3R5bGVSdWxlQ1NTU3R5bGVEZWNsYXJhdGlvbjo6c2V0TmVl
ZHNTdHlsZVJlY2FsYygpCit2b2lkIFN0eWxlUnVsZUNTU1N0eWxlRGVjbGFyYXRpb246OndpbGxN
dXRhdGUoKQogewotICAgIGlmIChDU1NTdHlsZVNoZWV0KiBzdHlsZVNoZWV0ID0gcGFyZW50U3R5
bGVTaGVldCgpKSB7Ci0gICAgICAgIGlmIChEb2N1bWVudCogZG9jdW1lbnQgPSBzdHlsZVNoZWV0
LT5vd25lckRvY3VtZW50KCkpCi0gICAgICAgICAgICBkb2N1bWVudC0+c3R5bGVSZXNvbHZlckNo
YW5nZWQoRGVmZXJSZWNhbGNTdHlsZSk7Ci0gICAgfQorICAgIGlmIChtX3BhcmVudFJ1bGUgJiYg
bV9wYXJlbnRSdWxlLT5wYXJlbnRTdHlsZVNoZWV0KCkpCisgICAgICAgIG1fcGFyZW50UnVsZS0+
cGFyZW50U3R5bGVTaGVldCgpLT53aWxsTXV0YXRlUnVsZXMoKTsKK30KKwordm9pZCBTdHlsZVJ1
bGVDU1NTdHlsZURlY2xhcmF0aW9uOjpkaWRNdXRhdGUoYm9vbCBjaGFuZ2VzKQoreworICAgIGlm
IChjaGFuZ2VzKQorICAgICAgICBtX2Nzc29tQ1NTVmFsdWVDbG9uZXMuY2xlYXIoKTsKKworICAg
IC8vIFN0eWxlIHNoZWV0IG11dGF0aW9uIG5lZWRzIHRvIGJlIHNpZ25hbGVkIGV2ZW4gaWYgdGhl
IGNoYW5nZSBmYWlsZWQuIHdpbGxNdXRhdGVSdWxlcy9kaWRNdXRhdGVSdWxlcyBtdXN0IHBhaXIu
CisgICAgaWYgKG1fcGFyZW50UnVsZSAmJiBtX3BhcmVudFJ1bGUtPnBhcmVudFN0eWxlU2hlZXQo
KSkKKyAgICAgICAgbV9wYXJlbnRSdWxlLT5wYXJlbnRTdHlsZVNoZWV0KCktPmRpZE11dGF0ZVJ1
bGVzKCk7CiB9CiAKIENTU1N0eWxlU2hlZXQqIFN0eWxlUnVsZUNTU1N0eWxlRGVjbGFyYXRpb246
OnBhcmVudFN0eWxlU2hlZXQoKSBjb25zdApAQCAtMzUxLDE0ICszNzEsMjYgQEAgQ1NTU3R5bGVT
aGVldCogU3R5bGVSdWxlQ1NTU3R5bGVEZWNsYXJhdAogICAgIHJldHVybiBtX3BhcmVudFJ1bGUg
PyBtX3BhcmVudFJ1bGUtPnBhcmVudFN0eWxlU2hlZXQoKSA6IDA7CiB9CiAKLXZvaWQgSW5saW5l
Q1NTU3R5bGVEZWNsYXJhdGlvbjo6c2V0TmVlZHNTdHlsZVJlY2FsYygpCit2b2lkIFN0eWxlUnVs
ZUNTU1N0eWxlRGVjbGFyYXRpb246OnJlYXR0YWNoKFN0eWxlUHJvcGVydHlTZXQqIHByb3BlcnR5
U2V0KQoreworICAgIEFTU0VSVChwcm9wZXJ0eVNldCk7CisgICAgbV9wcm9wZXJ0eVNldC0+ZGVy
ZWYoKTsKKyAgICBtX3Byb3BlcnR5U2V0ID0gcHJvcGVydHlTZXQ7CisgICAgbV9wcm9wZXJ0eVNl
dC0+cmVmKCk7Cit9CisKK3ZvaWQgSW5saW5lQ1NTU3R5bGVEZWNsYXJhdGlvbjo6ZGlkTXV0YXRl
KGJvb2wgY2hhbmdlcykKIHsKKyAgICBpZiAoIWNoYW5nZXMpCisgICAgICAgIHJldHVybjsKKwor
ICAgIG1fY3Nzb21DU1NWYWx1ZUNsb25lcy5jbGVhcigpOworCiAgICAgaWYgKCFtX3BhcmVudEVs
ZW1lbnQpCiAgICAgICAgIHJldHVybjsKICAgICBtX3BhcmVudEVsZW1lbnQtPnNldE5lZWRzU3R5
bGVSZWNhbGMoSW5saW5lU3R5bGVDaGFuZ2UpOwogICAgIG1fcGFyZW50RWxlbWVudC0+aW52YWxp
ZGF0ZVN0eWxlQXR0cmlidXRlKCk7CiAgICAgU3R5bGVBdHRyaWJ1dGVNdXRhdGlvblNjb3BlKHRo
aXMpLmRpZEludmFsaWRhdGVTdHlsZUF0dHIoKTsKLSAgICByZXR1cm47CiB9CiAKIENTU1N0eWxl
U2hlZXQqIElubGluZUNTU1N0eWxlRGVjbGFyYXRpb246OnBhcmVudFN0eWxlU2hlZXQoKSBjb25z
dApJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL1Byb3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlv
bi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9Qcm9wZXJ0eVNldENTU1N0eWxl
RGVjbGFyYXRpb24uaAkocmV2aXNpb24gMTE1OTU5KQorKysgU291cmNlL1dlYkNvcmUvY3NzL1By
b3BlcnR5U2V0Q1NTU3R5bGVEZWNsYXJhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC02OCw5ICs2
OCw5IEBAIHByaXZhdGU6CiAgICAgdmlydHVhbCBib29sIGNzc1Byb3BlcnR5TWF0Y2hlcyhjb25z
dCBDU1NQcm9wZXJ0eSopIGNvbnN0IE9WRVJSSURFOwogICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxT
dHlsZVByb3BlcnR5U2V0PiBjb3B5KCkgY29uc3QgT1ZFUlJJREU7CiAgICAgdmlydHVhbCBQYXNz
UmVmUHRyPFN0eWxlUHJvcGVydHlTZXQ+IG1ha2VNdXRhYmxlKCkgT1ZFUlJJREU7Ci0gICAgdmly
dHVhbCB2b2lkIHNldE5lZWRzU3R5bGVSZWNhbGMoKSB7IH0KLSAgICAKLSAgICB2b2lkIGRpZE11
dGF0ZSgpOworCisgICAgdmlydHVhbCB2b2lkIHdpbGxNdXRhdGUoKSB7IH0KKyAgICB2aXJ0dWFs
IHZvaWQgZGlkTXV0YXRlKGJvb2wpIHsgfQogICAgIENTU1ZhbHVlKiBjbG9uZUFuZENhY2hlRm9y
Q1NTT00oQ1NTVmFsdWUqKTsKICAgICAKIHByb3RlY3RlZDoKQEAgLTkxLDYgKzkxLDggQEAgcHVi
bGljOgogICAgIHZpcnR1YWwgdm9pZCByZWYoKSBPVkVSUklERTsKICAgICB2aXJ0dWFsIHZvaWQg
ZGVyZWYoKSBPVkVSUklERTsKIAorICAgIHZvaWQgcmVhdHRhY2goU3R5bGVQcm9wZXJ0eVNldCop
OworCiBwcml2YXRlOgogICAgIFN0eWxlUnVsZUNTU1N0eWxlRGVjbGFyYXRpb24oU3R5bGVQcm9w
ZXJ0eVNldCosIENTU1J1bGUqKTsKICAgICB2aXJ0dWFsIH5TdHlsZVJ1bGVDU1NTdHlsZURlY2xh
cmF0aW9uKCk7CkBAIC05OCw4ICsxMDAsMTAgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIENTU1N0
eWxlU2hlZXQqIHBhcmVudFN0eWxlU2hlZXQoKSBjb25zdCBPVkVSUklERTsKIAogICAgIHZpcnR1
YWwgQ1NTUnVsZSogcGFyZW50UnVsZSgpIGNvbnN0IE9WRVJSSURFIHsgcmV0dXJuIG1fcGFyZW50
UnVsZTsgIH0KLSAgICB2aXJ0dWFsIHZvaWQgc2V0TmVlZHNTdHlsZVJlY2FsYygpIE9WRVJSSURF
OwotICAgIAorCisgICAgdmlydHVhbCB2b2lkIHdpbGxNdXRhdGUoKSBPVkVSUklERTsKKyAgICB2
aXJ0dWFsIHZvaWQgZGlkTXV0YXRlKGJvb2wgY2hhbmdlcykgT1ZFUlJJREU7CisKICAgICB1bnNp
Z25lZCBtX3JlZkNvdW50OwogICAgIENTU1J1bGUqIG1fcGFyZW50UnVsZTsKIH07CkBAIC0xMTcs
NyArMTIxLDggQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIENTU1N0eWxlU2hlZXQqIHBhcmVudFN0
eWxlU2hlZXQoKSBjb25zdCBPVkVSUklERTsKICAgICB2aXJ0dWFsIFN0eWxlZEVsZW1lbnQqIHBh
cmVudEVsZW1lbnQoKSBjb25zdCBPVkVSUklERSB7IHJldHVybiBtX3BhcmVudEVsZW1lbnQ7IH0K
ICAgICB2aXJ0dWFsIHZvaWQgY2xlYXJQYXJlbnRFbGVtZW50KCkgT1ZFUlJJREUgeyBtX3BhcmVu
dEVsZW1lbnQgPSAwOyB9Ci0gICAgdmlydHVhbCB2b2lkIHNldE5lZWRzU3R5bGVSZWNhbGMoKSBP
VkVSUklERTsKKworICAgIHZpcnR1YWwgdm9pZCBkaWRNdXRhdGUoYm9vbCBjaGFuZ2VzKSBPVkVS
UklERTsKICAgICAKICAgICBTdHlsZWRFbGVtZW50KiBtX3BhcmVudEVsZW1lbnQ7CiB9OwpJbmRl
eDogU291cmNlL1dlYkNvcmUvY3NzL1dlYktpdENTU0tleWZyYW1lc1J1bGUuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NLZXlmcmFtZXNSdWxlLmNwcAkocmV2
aXNpb24gMTE1OTU5KQorKysgU291cmNlL1dlYkNvcmUvY3NzL1dlYktpdENTU0tleWZyYW1lc1J1
bGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDQsMTIgKzEwNCw5IEBAIFdlYktpdENTU0tleWZy
YW1lc1J1bGU6On5XZWJLaXRDU1NLZXlmcmEKIAogdm9pZCBXZWJLaXRDU1NLZXlmcmFtZXNSdWxl
OjpzZXROYW1lKGNvbnN0IFN0cmluZyYgbmFtZSkKIHsKLSAgICBtX2tleWZyYW1lc1J1bGUtPnNl
dE5hbWUobmFtZSk7CisgICAgQ1NTU3R5bGVTaGVldDo6UnVsZU11dGF0aW9uIG11dGF0aW9uKHRo
aXMpOwogCi0gICAgLy8gU2luY2UgdGhlIG5hbWUgaXMgdXNlZCBpbiB0aGUga2V5ZnJhbWUgbWFw
IGxpc3QgaW4gU3R5bGVSZXNvbHZlciwgd2UgbmVlZAotICAgIC8vIHRvIHJlY29tcHV0ZSB0aGUg
c3R5bGUgc2hlZXQgdG8gZ2V0IHRoZSB1cGRhdGVkIG5hbWUuCi0gICAgaWYgKENTU1N0eWxlU2hl
ZXQqIHN0eWxlU2hlZXQgPSBwYXJlbnRTdHlsZVNoZWV0KCkpCi0gICAgICAgIHN0eWxlU2hlZXQt
PnN0eWxlU2hlZXRDaGFuZ2VkKCk7CisgICAgbV9rZXlmcmFtZXNSdWxlLT5zZXROYW1lKG5hbWUp
OwogfQogCiB2b2lkIFdlYktpdENTU0tleWZyYW1lc1J1bGU6Omluc2VydFJ1bGUoY29uc3QgU3Ry
aW5nJiBydWxlVGV4dCkKQEAgLTEyMiw2ICsxMTksOCBAQCB2b2lkIFdlYktpdENTU0tleWZyYW1l
c1J1bGU6Omluc2VydFJ1bGUoCiAgICAgaWYgKCFrZXlmcmFtZSkKICAgICAgICAgcmV0dXJuOwog
CisgICAgQ1NTU3R5bGVTaGVldDo6UnVsZU11dGF0aW9uIG11dGF0aW9uKHRoaXMpOworCiAgICAg
bV9rZXlmcmFtZXNSdWxlLT53cmFwcGVyQXBwZW5kS2V5ZnJhbWUoa2V5ZnJhbWUpOwogCiAgICAg
bV9jaGlsZFJ1bGVDU1NPTVdyYXBwZXJzLmdyb3cobGVuZ3RoKCkpOwpAQCAtMTM1LDYgKzEzNCw4
IEBAIHZvaWQgV2ViS2l0Q1NTS2V5ZnJhbWVzUnVsZTo6ZGVsZXRlUnVsZSgKICAgICBpZiAoaSA8
IDApCiAgICAgICAgIHJldHVybjsKIAorICAgIENTU1N0eWxlU2hlZXQ6OlJ1bGVNdXRhdGlvbiBt
dXRhdGlvbih0aGlzKTsKKwogICAgIG1fa2V5ZnJhbWVzUnVsZS0+d3JhcHBlclJlbW92ZUtleWZy
YW1lKGkpOwogCiAgICAgaWYgKG1fY2hpbGRSdWxlQ1NTT01XcmFwcGVyc1tpXSkKQEAgLTE5MCw0
ICsxOTEsMTAgQEAgQ1NTUnVsZUxpc3QqIFdlYktpdENTU0tleWZyYW1lc1J1bGU6OmNzcwogICAg
IHJldHVybiBtX3J1bGVMaXN0Q1NTT01XcmFwcGVyLmdldCgpOwogfQogCit2b2lkIFdlYktpdENT
U0tleWZyYW1lc1J1bGU6OnJlYXR0YWNoKFN0eWxlUnVsZUtleWZyYW1lcyogcnVsZSkKK3sKKyAg
ICBBU1NFUlQocnVsZSk7CisgICAgbV9rZXlmcmFtZXNSdWxlID0gcnVsZTsKK30KKwogfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQpJbmRleDogU291cmNlL1dlYkNvcmUvY3NzL1dlYktpdENTU0tleWZy
YW1lc1J1bGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9jc3MvV2ViS2l0Q1NTS2V5
ZnJhbWVzUnVsZS5oCShyZXZpc2lvbiAxMTU5NTkpCisrKyBTb3VyY2UvV2ViQ29yZS9jc3MvV2Vi
S2l0Q1NTS2V5ZnJhbWVzUnVsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC04Nyw2ICs4Nyw4IEBAIHB1
YmxpYzoKICAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdDsKICAgICBXZWJLaXRDU1NLZXlmcmFt
ZVJ1bGUqIGl0ZW0odW5zaWduZWQgaW5kZXgpIGNvbnN0OwogCisgICAgdm9pZCByZWF0dGFjaChT
dHlsZVJ1bGVLZXlmcmFtZXMqKTsKKwogcHJpdmF0ZToKICAgICBXZWJLaXRDU1NLZXlmcmFtZXNS
dWxlKFN0eWxlUnVsZUtleWZyYW1lcyosIENTU1N0eWxlU2hlZXQqIHBhcmVudCk7CiAKSW5kZXg6
IFNvdXJjZS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NSZWdpb25SdWxlLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9jc3MvV2ViS2l0Q1NTUmVnaW9uUnVsZS5jcHAJKHJldmlzaW9uIDEx
NTk1OSkKKysrIFNvdXJjZS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NSZWdpb25SdWxlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtOTYsNSArOTYsMTQgQEAgQ1NTUnVsZUxpc3QqIFdlYktpdENTU1JlZ2lv
blJ1bGU6OmNzc1J1bAogICAgIHJldHVybiBtX3J1bGVMaXN0Q1NTT01XcmFwcGVyLmdldCgpOwog
fQogCit2b2lkIFdlYktpdENTU1JlZ2lvblJ1bGU6OnJlYXR0YWNoKFN0eWxlUnVsZVJlZ2lvbiog
cnVsZSkKK3sKKyAgICBBU1NFUlQocnVsZSk7CisgICAgbV9yZWdpb25SdWxlID0gcnVsZTsKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9jaGlsZFJ1bGVDU1NPTVdyYXBwZXJzLnNpemUo
KTsgKytpKSB7CisgICAgICAgIGlmIChtX2NoaWxkUnVsZUNTU09NV3JhcHBlcnNbaV0pCisgICAg
ICAgICAgICBtX2NoaWxkUnVsZUNTU09NV3JhcHBlcnNbaV0tPnJlYXR0YWNoKG1fcmVnaW9uUnVs
ZS0+Y2hpbGRSdWxlcygpW2ldLmdldCgpKTsKKyAgICB9Cit9CiAKIH0gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Nzcy9XZWJLaXRDU1NSZWdpb25SdWxlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvY3NzL1dlYktpdENTU1JlZ2lvblJ1bGUuaAkocmV2
aXNpb24gMTE1OTU5KQorKysgU291cmNlL1dlYkNvcmUvY3NzL1dlYktpdENTU1JlZ2lvblJ1bGUu
aAkod29ya2luZyBjb3B5KQpAQCAtNTMsNiArNTMsOCBAQCBwdWJsaWM6CiAgICAgdW5zaWduZWQg
bGVuZ3RoKCkgY29uc3Q7CiAgICAgQ1NTUnVsZSogaXRlbSh1bnNpZ25lZCBpbmRleCkgY29uc3Q7
CiAKKyAgICB2b2lkIHJlYXR0YWNoKFN0eWxlUnVsZVJlZ2lvbiopOworCiBwcml2YXRlOgogICAg
IFdlYktpdENTU1JlZ2lvblJ1bGUoU3R5bGVSdWxlUmVnaW9uKiwgQ1NTU3R5bGVTaGVldCogcGFy
ZW50KTsKIApJbmRleDogU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclN0eWxlU2hl
ZXQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JT
dHlsZVNoZWV0LmNwcAkocmV2aXNpb24gMTE1OTU5KQorKysgU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvclN0eWxlU2hlZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03MTgsMTAgKzcx
OCwxMCBAQCBTdHJpbmcgSW5zcGVjdG9yU3R5bGVTaGVldDo6ZmluYWxVUkwoKSBjCiAKIHZvaWQg
SW5zcGVjdG9yU3R5bGVTaGVldDo6cmVwYXJzZVN0eWxlU2hlZXQoY29uc3QgU3RyaW5nJiB0ZXh0
KQogeworICAgIENTU1N0eWxlU2hlZXQ6OlJ1bGVNdXRhdGlvbiBtdXRhdGlvbihtX3BhZ2VTdHls
ZVNoZWV0LmdldCgpKTsKICAgICBtX3BhZ2VTdHlsZVNoZWV0LT5pbnRlcm5hbCgpLT5jbGVhclJ1
bGVzKCk7CiAgICAgbV9wYWdlU3R5bGVTaGVldC0+aW50ZXJuYWwoKS0+cGFyc2VTdHJpbmcodGV4
dCk7CiAgICAgbV9wYWdlU3R5bGVTaGVldC0+Y2xlYXJDaGlsZFJ1bGVDU1NPTVdyYXBwZXJzKCk7
Ci0gICAgbV9wYWdlU3R5bGVTaGVldC0+c3R5bGVTaGVldENoYW5nZWQoKTsKICAgICBtX2luc3Bl
Y3RvclN0eWxlcy5jbGVhcigpOwogICAgIGZpcmVTdHlsZVNoZWV0Q2hhbmdlZCgpOwogfQpJbmRl
eDogU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hlL0NhY2hlZENTU1N0eWxlU2hlZXQuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2xvYWRlci9jYWNoZS9DYWNoZWRDU1NTdHlsZVNo
ZWV0LmNwcAkocmV2aXNpb24gMTE1OTU5KQorKysgU291cmNlL1dlYkNvcmUvbG9hZGVyL2NhY2hl
L0NhY2hlZENTU1N0eWxlU2hlZXQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MCw2ICs1MCw4IEBA
IENhY2hlZENTU1N0eWxlU2hlZXQ6OkNhY2hlZENTU1N0eWxlU2hlZXQKIAogQ2FjaGVkQ1NTU3R5
bGVTaGVldDo6fkNhY2hlZENTU1N0eWxlU2hlZXQoKQogeworICAgIGlmIChtX3BhcnNlZFN0eWxl
U2hlZXRDYWNoZSkKKyAgICAgICAgbV9wYXJzZWRTdHlsZVNoZWV0Q2FjaGUtPnJlbW92ZWRGcm9t
TWVtb3J5Q2FjaGUoKTsKIH0KIAogdm9pZCBDYWNoZWRDU1NTdHlsZVNoZWV0OjpkaWRBZGRDbGll
bnQoQ2FjaGVkUmVzb3VyY2VDbGllbnQqIGMpCkBAIC0xNTMsNyArMTU1LDEyIEBAIGJvb2wgQ2Fj
aGVkQ1NTU3R5bGVTaGVldDo6Y2FuVXNlU2hlZXQoYm8KIAogdm9pZCBDYWNoZWRDU1NTdHlsZVNo
ZWV0OjpkZXN0cm95RGVjb2RlZERhdGEoKQogeworICAgIGlmICghbV9wYXJzZWRTdHlsZVNoZWV0
Q2FjaGUpCisgICAgICAgIHJldHVybjsKKworICAgIG1fcGFyc2VkU3R5bGVTaGVldENhY2hlLT5y
ZW1vdmVkRnJvbU1lbW9yeUNhY2hlKCk7CiAgICAgbV9wYXJzZWRTdHlsZVNoZWV0Q2FjaGUuY2xl
YXIoKTsKKwogICAgIHNldERlY29kZWRTaXplKDApOwogfQogCkBAIC0xNjEsMjUgKzE2OCwyNiBA
QCBQYXNzUmVmUHRyPFN0eWxlU2hlZXRJbnRlcm5hbD4gQ2FjaGVkQ1NTCiB7CiAgICAgaWYgKCFt
X3BhcnNlZFN0eWxlU2hlZXRDYWNoZSkKICAgICAgICAgcmV0dXJuIDA7Ci0gICAgLy8gQ2FjaGVk
IHBhcnNlZCBzdHlsZXNoZWV0IGhhcyBtdXRhdGVkLCBraWNrIGl0IG91dC4KLSAgICBpZiAoIW1f
cGFyc2VkU3R5bGVTaGVldENhY2hlLT5pc0NhY2hlYWJsZSgpKSB7Ci0gICAgICAgIG1fcGFyc2Vk
U3R5bGVTaGVldENhY2hlLmNsZWFyKCk7Ci0gICAgICAgIHNldERlY29kZWRTaXplKDApOwotICAg
ICAgICByZXR1cm4gMDsKLSAgICB9CisgICAgQVNTRVJUKG1fcGFyc2VkU3R5bGVTaGVldENhY2hl
LT5pc0NhY2hlYWJsZSgpKTsKKyAgICBBU1NFUlQobV9wYXJzZWRTdHlsZVNoZWV0Q2FjaGUtPmlz
SW5NZW1vcnlDYWNoZSgpKTsKKwogICAgIC8vIENvbnRleHRzIG11c3QgYmUgaWRlbnRpY2FsIHNv
IHdlIGtub3cgd2Ugd291bGQgZ2V0IHRoZSBzYW1lIGV4YWN0IHJlc3VsdCBpZiB3ZSBwYXJzZWQg
YWdhaW4uCiAgICAgaWYgKG1fcGFyc2VkU3R5bGVTaGVldENhY2hlLT5wYXJzZXJDb250ZXh0KCkg
IT0gY29udGV4dCkKICAgICAgICAgcmV0dXJuIDA7CiAKICAgICBkaWRBY2Nlc3NEZWNvZGVkRGF0
YShjdXJyZW50VGltZSgpKTsKLSAgICAvLyBGSVhNRTogSW1wbGVtZW50IGNvcHktb24td3JpdGUg
dG8gYXZvaWQgY29weWluZyB3aGVuIG5vdCBuZWNlc3NhcnkuCi0gICAgcmV0dXJuIG1fcGFyc2Vk
U3R5bGVTaGVldENhY2hlLT5jb3B5KCk7CisKKyAgICByZXR1cm4gbV9wYXJzZWRTdHlsZVNoZWV0
Q2FjaGU7CiB9CiAKIHZvaWQgQ2FjaGVkQ1NTU3R5bGVTaGVldDo6c2F2ZVBhcnNlZFN0eWxlU2hl
ZXQoUGFzc1JlZlB0cjxTdHlsZVNoZWV0SW50ZXJuYWw+IHNoZWV0KQogewogICAgIEFTU0VSVChz
aGVldCAmJiBzaGVldC0+aXNDYWNoZWFibGUoKSk7CisKKyAgICBpZiAobV9wYXJzZWRTdHlsZVNo
ZWV0Q2FjaGUpCisgICAgICAgIG1fcGFyc2VkU3R5bGVTaGVldENhY2hlLT5yZW1vdmVkRnJvbU1l
bW9yeUNhY2hlKCk7CiAgICAgbV9wYXJzZWRTdHlsZVNoZWV0Q2FjaGUgPSBzaGVldDsKKyAgICBt
X3BhcnNlZFN0eWxlU2hlZXRDYWNoZS0+YWRkZWRUb01lbW9yeUNhY2hlKCk7CiAKICAgICBzZXRE
ZWNvZGVkU2l6ZShtX3BhcnNlZFN0eWxlU2hlZXRDYWNoZS0+ZXN0aW1hdGVkU2l6ZUluQnl0ZXMo
KSk7CiB9CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMTYyMjApCisrKyBMYXlvdXRUZXN0cy9DaGFuZ2VM
b2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyNSBAQAorMjAxMi0wNS0wNSAgQW50dGkgS29p
dmlzdG8gIDxhbnR0aUBhcHBsZS5jb20+CisKKyAgICAgICAgU2hhcmUgc3R5bGVzaGVldCBkYXRh
IHN0cnVjdHVyZXMgYmV0d2VlbiBkb2N1bWVudHMKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTg1NTk4CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisgICAgICAgIAorICAgICAgICBUZXN0IHRoYXQgbXV0YXRpb25zIG9mIGEgc2hh
cmVkIHN0eWxlc2hlZXQgd29yayBhcyBleHBlY3RlZC4gCisgICAgICAgIAorICAgICAgICBUaGlz
IGlzIGFuIGh0dHAgdGVzdCBkdWUgdG8gY3Jvc3MtZG9jdW1lbnQgc2VjdXJpdHkgcmVzdHJpY3Rp
b25zIHdpdGggZmlsZSB1cmxzCisgICAgICAgICh0aGV5IGNhbiBiZSBvdmVycmlkZW4gaW4gRFJU
IGJ1dCBJJ2QgbGlrZSB0aGlzIHRvIHdvcmsgaW4gYnJvd3NlciB0b28pLgorCisgICAgICAgICog
aHR0cC90ZXN0cy9jc3MvcmVzb3VyY2VzL3NoYXJlZC5jc3M6IEFkZGVkLgorICAgICAgICAoI3Rl
c3RkaXYpOgorICAgICAgICAoQG1lZGlhIGFsbCk6CisgICAgICAgIChAcGFnZSA6cmlnaHQpOgor
ICAgICAgICAoQC13ZWJraXQta2V5ZnJhbWVzIGJvdW5jZSk6CisgICAgICAgICh0byk6CisgICAg
ICAgIChAZm9udC1mYWNlKToKKyAgICAgICAgKiBodHRwL3Rlc3RzL2Nzcy9zaGFyZWQtc3R5bGVz
aGVldC1tdXRhdGlvbi1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIGh0dHAvdGVzdHMv
Y3NzL3NoYXJlZC1zdHlsZXNoZWV0LW11dGF0aW9uLmh0bWw6IEFkZGVkLgorCiAyMDEyLTA1LTA1
ICAnUGF2ZWwgRmVsZG1hbicgIDxwZmVsZG1hbkBjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgTm90
IHJldmlld2VkOiBmb2xsb3cgdXAgdG8gcjExNjIxNiwgZml4aW5nIHRoZSBpbnNwZWN0b3IgdGVz
dC4KSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvY3NzL3NoYXJlZC1zdHlsZXNoZWV0LW11
dGF0aW9uLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3Rz
L2Nzcy9zaGFyZWQtc3R5bGVzaGVldC1tdXRhdGlvbi1leHBlY3RlZC50eHQJKHJldmlzaW9uIDAp
CisrKyBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2Nzcy9zaGFyZWQtc3R5bGVzaGVldC1tdXRhdGlv
bi1leHBlY3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMjM3IEBACitUaGUgdGVzdCBs
b2FkcyB0aGUgc2FtZSBzdHlsZXNoZWV0IHRvIGRpZmZlcmVudCBmcmFtZXMgYW5kIHRoZW4gbXV0
YXRlcyB0aGVtLiBUaGUgbXV0YXRpb25zIHNob3VsZCBub3QgYWZmZWN0IG90aGVyIGZyYW1lcy4K
KworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywg
Zm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1Rlc3QgMAorLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLQorUEFTUyB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0ZXN0RWxlbWVudCwg
bnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSgnYmFja2dyb3VuZC1jb2xvcicpIGlzICdyZ2IoMjU1LCAw
LCAwKScKK0BjaGFyc2V0ICJ1dGYtOCI7CisjdGVzdGRpdiB7IGJhY2tncm91bmQtY29sb3I6IGdy
ZWVuOyB9CitAbWVkaWEgYWxsIHsgCisgICN0ZXN0ZGl2IHsgYmFja2dyb3VuZC1jb2xvcjogcmVk
OyB9Cit9CitAcGFnZSA6cmlnaHQgeyBtYXJnaW4tbGVmdDogM2NtOyB9CitALXdlYmtpdC1rZXlm
cmFtZXMgYm91bmNlIHsgCisgIDAlIHsgbGVmdDogMHB4OyB9CisgIDEwMCUgeyBsZWZ0OiAyMDBw
eDsgfQorfQorQGZvbnQtZmFjZSB7IGZvbnQtZmFtaWx5OiBGb287IH0KKworVGVzdCAxCistLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitQQVNTIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRl
c3RFbGVtZW50LCBudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKCdiYWNrZ3JvdW5kLWNvbG9yJykgaXMg
J3JnYigwLCAxMjgsIDApJworQGNoYXJzZXQgInV0Zi04IjsKKyN0ZXN0ZGl2IHsgYmFja2dyb3Vu
ZC1jb2xvcjogZ3JlZW47IH0KK0BtZWRpYSBhbGwgeyAKKyAgI3Rlc3RkaXYgeyBiYWNrZ3JvdW5k
LWNvbG9yOiByZWQ7IH0KK30KKyN0ZXN0ZGl2IHsgYmFja2dyb3VuZC1jb2xvcjogZ3JlZW47IH0K
K0BwYWdlIDpyaWdodCB7IG1hcmdpbi1sZWZ0OiAzY207IH0KK0Atd2Via2l0LWtleWZyYW1lcyBi
b3VuY2UgeyAKKyAgMCUgeyBsZWZ0OiAwcHg7IH0KKyAgMTAwJSB7IGxlZnQ6IDIwMHB4OyB9Cit9
CitAZm9udC1mYWNlIHsgZm9udC1mYW1pbHk6IEZvbzsgfQorCitUZXN0IDIKKy0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0KK1BBU1Mgd2luZG93LmdldENvbXB1dGVkU3R5bGUodGVzdEVsZW1l
bnQsIG51bGwpLmdldFByb3BlcnR5VmFsdWUoJ2JhY2tncm91bmQtY29sb3InKSBpcyAncmdiKDAs
IDEyOCwgMCknCitAY2hhcnNldCAidXRmLTgiOworI3Rlc3RkaXYgeyBiYWNrZ3JvdW5kLWNvbG9y
OiBncmVlbjsgfQorQHBhZ2UgOnJpZ2h0IHsgbWFyZ2luLWxlZnQ6IDNjbTsgfQorQC13ZWJraXQt
a2V5ZnJhbWVzIGJvdW5jZSB7IAorICAwJSB7IGxlZnQ6IDBweDsgfQorICAxMDAlIHsgbGVmdDog
MjAwcHg7IH0KK30KK0Bmb250LWZhY2UgeyBmb250LWZhbWlseTogRm9vOyB9CisKK1Rlc3QgMwor
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorUEFTUyB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHls
ZSh0ZXN0RWxlbWVudCwgbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSgnYmFja2dyb3VuZC1jb2xvcicp
IGlzICdyZ2IoMCwgMTI4LCAwKScKK0BjaGFyc2V0ICJ1dGYtOCI7CisjdGVzdGRpdiB7IGJhY2tn
cm91bmQtY29sb3I6IGdyZWVuOyB9CitAbWVkaWEgYWxsIHsgCisgICN0ZXN0ZGl2IHsgYmFja2dy
b3VuZC1jb2xvcjogcmVkOyB9CisgICN0ZXN0ZGl2IHsgYmFja2dyb3VuZC1jb2xvcjogZ3JlZW47
IH0KK30KK0BwYWdlIDpyaWdodCB7IG1hcmdpbi1sZWZ0OiAzY207IH0KK0Atd2Via2l0LWtleWZy
YW1lcyBib3VuY2UgeyAKKyAgMCUgeyBsZWZ0OiAwcHg7IH0KKyAgMTAwJSB7IGxlZnQ6IDIwMHB4
OyB9Cit9CitAZm9udC1mYWNlIHsgZm9udC1mYW1pbHk6IEZvbzsgfQorCitUZXN0IDQKKy0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1BBU1Mgd2luZG93LmdldENvbXB1dGVkU3R5bGUodGVz
dEVsZW1lbnQsIG51bGwpLmdldFByb3BlcnR5VmFsdWUoJ2JhY2tncm91bmQtY29sb3InKSBpcyAn
cmdiKDAsIDEyOCwgMCknCitAY2hhcnNldCAidXRmLTgiOworI3Rlc3RkaXYgeyBiYWNrZ3JvdW5k
LWNvbG9yOiBncmVlbjsgfQorQG1lZGlhIGFsbCB7IAorfQorQHBhZ2UgOnJpZ2h0IHsgbWFyZ2lu
LWxlZnQ6IDNjbTsgfQorQC13ZWJraXQta2V5ZnJhbWVzIGJvdW5jZSB7IAorICAwJSB7IGxlZnQ6
IDBweDsgfQorICAxMDAlIHsgbGVmdDogMjAwcHg7IH0KK30KK0Bmb250LWZhY2UgeyBmb250LWZh
bWlseTogRm9vOyB9CisKK1Rlc3QgNQorLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorUEFT
UyB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0ZXN0RWxlbWVudCwgbnVsbCkuZ2V0UHJvcGVydHlW
YWx1ZSgnYmFja2dyb3VuZC1jb2xvcicpIGlzICdyZ2IoMCwgMTI4LCAwKScKK0BjaGFyc2V0ICJ1
dGYtOCI7CisjdGVzdGRpdiB7IGJhY2tncm91bmQtY29sb3I6IGdyZWVuOyB9CitAbWVkaWEgYWxs
IHsgCisgICN0ZXN0ZGl2IHsgYmFja2dyb3VuZC1jb2xvcjogZ3JlZW47IH0KK30KK0BwYWdlIDpy
aWdodCB7IG1hcmdpbi1sZWZ0OiAzY207IH0KK0Atd2Via2l0LWtleWZyYW1lcyBib3VuY2UgeyAK
KyAgMCUgeyBsZWZ0OiAwcHg7IH0KKyAgMTAwJSB7IGxlZnQ6IDIwMHB4OyB9Cit9CitAZm9udC1m
YWNlIHsgZm9udC1mYW1pbHk6IEZvbzsgfQorCitUZXN0IDYKKy0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KK1BBU1Mgd2luZG93LmdldENvbXB1dGVkU3R5bGUodGVzdEVsZW1lbnQsIG51bGwp
LmdldFByb3BlcnR5VmFsdWUoJ2JhY2tncm91bmQtY29sb3InKSBpcyAncmdiKDAsIDEyOCwgMCkn
CitAY2hhcnNldCAidXRmLTgiOworI3Rlc3RkaXYgeyBiYWNrZ3JvdW5kLWNvbG9yOiBncmVlbjsg
fQorQG1lZGlhIGFsbCB7IAorICAjdGVzdGRpdiB7IH0KK30KK0BwYWdlIDpyaWdodCB7IG1hcmdp
bi1sZWZ0OiAzY207IH0KK0Atd2Via2l0LWtleWZyYW1lcyBib3VuY2UgeyAKKyAgMCUgeyBsZWZ0
OiAwcHg7IH0KKyAgMTAwJSB7IGxlZnQ6IDIwMHB4OyB9Cit9CitAZm9udC1mYWNlIHsgZm9udC1m
YW1pbHk6IEZvbzsgfQorCitUZXN0IDcKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1BB
U1Mgd2luZG93LmdldENvbXB1dGVkU3R5bGUodGVzdEVsZW1lbnQsIG51bGwpLmdldFByb3BlcnR5
VmFsdWUoJ2JhY2tncm91bmQtY29sb3InKSBpcyAncmdiKDAsIDEyOCwgMCknCitAY2hhcnNldCAi
dXRmLTgiOworI3Rlc3RkaXYgeyBiYWNrZ3JvdW5kLWNvbG9yOiBncmVlbjsgfQorQG1lZGlhIGFs
bCB7IAorICAjdGVzdGRpdiB7IGJhY2tncm91bmQtY29sb3I6IGdyZWVuOyB9Cit9CitAcGFnZSA6
cmlnaHQgeyBtYXJnaW4tbGVmdDogM2NtOyB9CitALXdlYmtpdC1rZXlmcmFtZXMgYm91bmNlIHsg
CisgIDAlIHsgbGVmdDogMHB4OyB9CisgIDEwMCUgeyBsZWZ0OiAyMDBweDsgfQorfQorQGZvbnQt
ZmFjZSB7IGZvbnQtZmFtaWx5OiBGb287IH0KKworVGVzdCA4CistLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCitQQVNTIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRlc3RFbGVtZW50LCBudWxs
KS5nZXRQcm9wZXJ0eVZhbHVlKCdiYWNrZ3JvdW5kLWNvbG9yJykgaXMgJ3JnYigwLCAxMjgsIDAp
JworQGNoYXJzZXQgInV0Zi04IjsKKyN0ZXN0ZGl2IHsgYmFja2dyb3VuZC1jb2xvcjogZ3JlZW47
IH0KK0BtZWRpYSBhbGwgeyAKKyAgI2RvbnRtYXRjaCB7IGJhY2tncm91bmQtY29sb3I6IHJlZDsg
fQorfQorQHBhZ2UgOnJpZ2h0IHsgbWFyZ2luLWxlZnQ6IDNjbTsgfQorQC13ZWJraXQta2V5ZnJh
bWVzIGJvdW5jZSB7IAorICAwJSB7IGxlZnQ6IDBweDsgfQorICAxMDAlIHsgbGVmdDogMjAwcHg7
IH0KK30KK0Bmb250LWZhY2UgeyBmb250LWZhbWlseTogRm9vOyB9CisKK1Rlc3QgOQorLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorUEFTUyB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0ZXN0
RWxlbWVudCwgbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSgnYmFja2dyb3VuZC1jb2xvcicpIGlzICdy
Z2IoMCwgMTI4LCAwKScKK0BjaGFyc2V0ICJ1dGYtOCI7CisjdGVzdGRpdiB7IGJhY2tncm91bmQt
Y29sb3I6IGdyZWVuOyB9CitAbWVkaWEgcHJpbnQgeyAKKyAgI3Rlc3RkaXYgeyBiYWNrZ3JvdW5k
LWNvbG9yOiByZWQ7IH0KK30KK0BwYWdlIDpyaWdodCB7IG1hcmdpbi1sZWZ0OiAzY207IH0KK0At
d2Via2l0LWtleWZyYW1lcyBib3VuY2UgeyAKKyAgMCUgeyBsZWZ0OiAwcHg7IH0KKyAgMTAwJSB7
IGxlZnQ6IDIwMHB4OyB9Cit9CitAZm9udC1mYWNlIHsgZm9udC1mYW1pbHk6IEZvbzsgfQorCitU
ZXN0IDEwCistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitQQVNTIHdpbmRvdy5nZXRDb21w
dXRlZFN0eWxlKHRlc3RFbGVtZW50LCBudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKCdiYWNrZ3JvdW5k
LWNvbG9yJykgaXMgJ3JnYigwLCAxMjgsIDApJworQGNoYXJzZXQgInV0Zi04IjsKKyN0ZXN0ZGl2
IHsgYmFja2dyb3VuZC1jb2xvcjogZ3JlZW47IH0KK0BtZWRpYSBwcmludCB7IAorICAjdGVzdGRp
diB7IGJhY2tncm91bmQtY29sb3I6IHJlZDsgfQorfQorQHBhZ2UgOnJpZ2h0IHsgbWFyZ2luLWxl
ZnQ6IDNjbTsgfQorQC13ZWJraXQta2V5ZnJhbWVzIGJvdW5jZSB7IAorICAwJSB7IGxlZnQ6IDBw
eDsgfQorICAxMDAlIHsgbGVmdDogMjAwcHg7IH0KK30KK0Bmb250LWZhY2UgeyBmb250LWZhbWls
eTogRm9vOyB9CisKK1Rlc3QgMTEKKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KK1BBU1Mg
d2luZG93LmdldENvbXB1dGVkU3R5bGUodGVzdEVsZW1lbnQsIG51bGwpLmdldFByb3BlcnR5VmFs
dWUoJ2JhY2tncm91bmQtY29sb3InKSBpcyAncmdiKDAsIDEyOCwgMCknCisjdGVzdGRpdiB7IGJh
Y2tncm91bmQtY29sb3I6IGdyZWVuOyB9CisKK1Rlc3QgMTIKKy0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KK1BBU1Mgd2luZG93LmdldENvbXB1dGVkU3R5bGUodGVzdEVsZW1lbnQsIG51bGwp
LmdldFByb3BlcnR5VmFsdWUoJ2JhY2tncm91bmQtY29sb3InKSBpcyAncmdiKDI1NSwgMCwgMCkn
CitAY2hhcnNldCAidXRmLTgiOworI3Rlc3RkaXYgeyBiYWNrZ3JvdW5kLWNvbG9yOiBncmVlbjsg
fQorQG1lZGlhIGFsbCB7IAorICAjdGVzdGRpdiB7IGJhY2tncm91bmQtY29sb3I6IHJlZDsgfQor
fQorQHBhZ2UgOnJpZ2h0IHsgbWFyZ2luLWxlZnQ6IDNjbTsgfQorQC13ZWJraXQta2V5ZnJhbWVz
IGJvdW5jZSB7IAorICAwJSB7IGxlZnQ6IDBweDsgfQorICAxMDAlIHsgbGVmdDogMjAwcHg7IH0K
KyAgNDAlIHsgbGVmdDogNDBweDsgfQorfQorQGZvbnQtZmFjZSB7IGZvbnQtZmFtaWx5OiBGb287
IH0KKworVGVzdCAxMworLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQorUEFTUyB3aW5kb3cu
Z2V0Q29tcHV0ZWRTdHlsZSh0ZXN0RWxlbWVudCwgbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZSgnYmFj
a2dyb3VuZC1jb2xvcicpIGlzICdyZ2IoMjU1LCAwLCAwKScKK0BjaGFyc2V0ICJ1dGYtOCI7Cisj
dGVzdGRpdiB7IGJhY2tncm91bmQtY29sb3I6IGdyZWVuOyB9CitAbWVkaWEgYWxsIHsgCisgICN0
ZXN0ZGl2IHsgYmFja2dyb3VuZC1jb2xvcjogcmVkOyB9Cit9CitAcGFnZSA6cmlnaHQgeyBtYXJn
aW4tbGVmdDogM2NtOyB9CitALXdlYmtpdC1rZXlmcmFtZXMgYm91bmNlIHsgCisgIDAlIHsgbGVm
dDogMHB4OyB9Cit9CitAZm9udC1mYWNlIHsgZm9udC1mYW1pbHk6IEZvbzsgfQorCitUZXN0IDE0
CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitQQVNTIHdpbmRvdy5nZXRDb21wdXRlZFN0
eWxlKHRlc3RFbGVtZW50LCBudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKCdiYWNrZ3JvdW5kLWNvbG9y
JykgaXMgJ3JnYigyNTUsIDAsIDApJworQGNoYXJzZXQgInV0Zi04IjsKKyN0ZXN0ZGl2IHsgYmFj
a2dyb3VuZC1jb2xvcjogZ3JlZW47IH0KK0BtZWRpYSBhbGwgeyAKKyAgI3Rlc3RkaXYgeyBiYWNr
Z3JvdW5kLWNvbG9yOiByZWQ7IH0KK30KK0BwYWdlIDpyaWdodCB7IG1hcmdpbi1sZWZ0OiAzY207
IH0KK0Atd2Via2l0LWtleWZyYW1lcyBib3VuY2UgeyAKKyAgMCUgeyBsZWZ0OiAwcHg7IH0KKyAg
MTAwJSB7IGxlZnQ6IDIwMHB4OyB9Cit9CitAZm9udC1mYWNlIHsgZm9udC1mYW1pbHk6IEJhcjsg
fQorCitUZXN0IDE1CistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCitQQVNTIHdpbmRvdy5n
ZXRDb21wdXRlZFN0eWxlKHRlc3RFbGVtZW50LCBudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKCdiYWNr
Z3JvdW5kLWNvbG9yJykgaXMgJ3JnYigyNTUsIDAsIDApJworQGNoYXJzZXQgInV0Zi04IjsKKyN0
ZXN0ZGl2IHsgYmFja2dyb3VuZC1jb2xvcjogZ3JlZW47IH0KK0BtZWRpYSBhbGwgeyAKKyAgI3Rl
c3RkaXYgeyBiYWNrZ3JvdW5kLWNvbG9yOiByZWQ7IH0KK30KK0BwYWdlIGZvbyB7IG1hcmdpbi1s
ZWZ0OiAzY207IH0KK0Atd2Via2l0LWtleWZyYW1lcyBib3VuY2UgeyAKKyAgMCUgeyBsZWZ0OiAw
cHg7IH0KKyAgMTAwJSB7IGxlZnQ6IDIwMHB4OyB9Cit9CitAZm9udC1mYWNlIHsgZm9udC1mYW1p
bHk6IEZvbzsgfQorCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09N
UExFVEUKKwpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9jc3Mvc2hhcmVkLXN0eWxlc2hl
ZXQtbXV0YXRpb24uaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2Nz
cy9zaGFyZWQtc3R5bGVzaGVldC1tdXRhdGlvbi5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0
VGVzdHMvaHR0cC90ZXN0cy9jc3Mvc2hhcmVkLXN0eWxlc2hlZXQtbXV0YXRpb24uaHRtbAkocmV2
aXNpb24gMCkKQEAgLTAsMCArMSwxNDAgQEAKKzwhRE9DVFlQRSBIVE1MPgorPHNjcmlwdD5qc1Rl
c3RJc0FzeW5jID0gdHJ1ZTs8L3NjcmlwdD4KKzxzY3JpcHQgc3JjPSIvanMtdGVzdC1yZXNvdXJj
ZXMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0PgorPGJvZHk+Cis8c2NyaXB0PgorICAgIAorZGVz
Y3JpcHRpb24oIlRoZSB0ZXN0IGxvYWRzIHRoZSBzYW1lIHN0eWxlc2hlZXQgdG8gZGlmZmVyZW50
IGZyYW1lcyBhbmQgdGhlbiBtdXRhdGVzIHRoZW0uIFRoZSBtdXRhdGlvbnMgc2hvdWxkIG5vdCBh
ZmZlY3Qgb3RoZXIgZnJhbWVzLiIpOworCitmdW5jdGlvbiBidWlsZFRlc3RGcmFtZSgpCit7Cisg
ICAgdmFyIGlmcmFtZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlmcmFtZSIpOworICAgIGlm
cmFtZS5zZXRBdHRyaWJ1dGUoIndpZHRoIiwgIjEwMCIpOworICAgIGlmcmFtZS5zZXRBdHRyaWJ1
dGUoImhlaWdodCIsICI1MCIpOworICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoaWZyYW1l
KTsKKyAgICB2YXIgaWZyYW1lRG9jdW1lbnQgPSBpZnJhbWUuY29udGVudERvY3VtZW50OworICAg
IGlmcmFtZURvY3VtZW50LmJvZHkuaW5uZXJIVE1MID0gIjxsaW5rIHJlbD1zdHlsZXNoZWV0IGhy
ZWY9cmVzb3VyY2VzL3NoYXJlZC5jc3M+PGRpdiBpZD10ZXN0ZGl2PlRlc3Q8L2Rpdj4iOworICAg
IHJldHVybiBpZnJhbWVEb2N1bWVudDsKK30KKwordmFyIHRlc3RDb3VudCA9IDE2OworCit2YXIg
ZnJhbWVEb2N1bWVudHMgPSBbXTsKK3ZhciBzaGVldHMgPSBbXTsKK2ZvciAodmFyIGkgPSAwOyBp
IDwgdGVzdENvdW50OyArK2kpCisgICAgZnJhbWVEb2N1bWVudHMucHVzaChidWlsZFRlc3RGcmFt
ZSgpKTsKKworKGZ1bmN0aW9uIHdhaXRMb2FkQ29tcGxldGUoKQoreworICAgIHZhciBjb21wbGV0
ZSA9IHRydWU7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBmcmFtZURvY3VtZW50cy5sZW5ndGg7
ICsraSkgeworICAgICAgICBpZiAoZnJhbWVEb2N1bWVudHNbaV0uc3R5bGVTaGVldHMubGVuZ3Ro
ID09IDApCisgICAgICAgICAgICBjb21wbGV0ZSA9IGZhbHNlOworICAgIH0KKyAgICBpZiAoIWNv
bXBsZXRlKSB7CisgICAgICAgIHNldFRpbWVvdXQod2FpdExvYWRDb21wbGV0ZSwgMTApOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIGZvciAodmFyIGkgPSAwOyBpIDwgZnJhbWVEb2N1bWVu
dHMubGVuZ3RoOyArK2kpCisgICAgICAgIHNoZWV0cy5wdXNoKGZyYW1lRG9jdW1lbnRzW2ldLnN0
eWxlU2hlZXRzWzBdKTsKKyAgICBydW5UZXN0KCk7Cit9KSgpOworCitmdW5jdGlvbiBwcmludFJ1
bGVzKHJ1bGVMaXN0KQoreworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcnVsZUxpc3QubGVuZ3Ro
OyArK2kpCisgICAgICAgIGRlYnVnKHJ1bGVMaXN0W2ldLmNzc1RleHQpOworfQorCitmdW5jdGlv
biB0ZXN0UmVzdWx0cyhpbmRleCwgZXhwZWN0Q29sb3IpCit7CisgICAgdGVzdEVsZW1lbnQgPSBm
cmFtZURvY3VtZW50c1tpbmRleF0uZ2V0RWxlbWVudEJ5SWQoJ3Rlc3RkaXYnKTsKKworICAgIGRl
YnVnKCJUZXN0ICIgKyBpbmRleCk7CisgICAgZGVidWcoIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0iKTsKKyAgICBzaG91bGRCZSgid2luZG93LmdldENvbXB1dGVkU3R5bGUodGVzdEVsZW1l
bnQsIG51bGwpLmdldFByb3BlcnR5VmFsdWUoJ2JhY2tncm91bmQtY29sb3InKSIsCisgICAgICAg
ICAgICAgZXhwZWN0Q29sb3IgPT0gInJlZCIgPyAiJ3JnYigyNTUsIDAsIDApJyIgOiAiJ3JnYigw
LCAxMjgsIDApJyIpOworICAgIHByaW50UnVsZXMoc2hlZXRzW2luZGV4XS5jc3NSdWxlcyk7Cisg
ICAgZGVidWcoIiIpOworfQorCitmdW5jdGlvbiBlbnN1cmVXcmFwcGVycyhydWxlTGlzdCkKK3sK
KyAgICAvLyBUb3VjaCBhbGwgQ1NTT00gb2JqZWN0cyB0byBmb3JjZSB3cmFwcGVyIGNyZWF0aW9u
LgorICAgIGZvciAodmFyIGkgPSAwOyBpIDwgcnVsZUxpc3QubGVuZ3RoOyArK2kpIHsKKyAgICAg
ICAgcnVsZUxpc3RbaV0uc3R5bGU7CisgICAgICAgIHJ1bGVMaXN0W2ldLm1lZGlhOworICAgICAg
ICBydWxlTGlzdFtpXS5zZWxlY3RvclRleHQ7CisgICAgICAgIHJ1bGVMaXN0W2ldLm5hbWU7Cisg
ICAgICAgIHJ1bGVMaXN0W2ldLmtleVRleHQ7CisgICAgICAgIHJ1bGVMaXN0W2ldLmNzc1RleHQ7
CisgICAgICAgIGlmIChydWxlTGlzdFtpXS5jc3NSdWxlcykKKyAgICAgICAgICAgIGVuc3VyZVdy
YXBwZXJzKHJ1bGVMaXN0W2ldLmNzc1J1bGVzKTsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIG11dGF0
aW9uVGVzdChpbmRleCwgdGVzdFN0cmluZykKK3sKKyAgICB2YXIgc2hlZXQgPSBzaGVldHNbaW5k
ZXhdOworICAgIGV2YWwodGVzdFN0cmluZyk7Cit9CisKK2Z1bmN0aW9uIHJ1blRlc3QoKQorewor
ICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2hlZXRzLmxlbmd0aDsgKytpKQorICAgICAgICBlbnN1
cmVXcmFwcGVycyhzaGVldHNbaV0uY3NzUnVsZXMpOworCisgICAgbXV0YXRpb25UZXN0KDAsICcn
KTsKKyAgICBtdXRhdGlvblRlc3QoMSwgJ3NoZWV0Lmluc2VydFJ1bGUoIiN0ZXN0ZGl2IHsgYmFj
a2dyb3VuZC1jb2xvcjogZ3JlZW47IH0iLCAzKScpOworICAgIG11dGF0aW9uVGVzdCgyLCAnc2hl
ZXQuZGVsZXRlUnVsZSgyKScpOworICAgIG11dGF0aW9uVGVzdCgzLCAnc2hlZXQuY3NzUnVsZXNb
Ml0uaW5zZXJ0UnVsZSgiI3Rlc3RkaXYgeyBiYWNrZ3JvdW5kLWNvbG9yOiBncmVlbjsgfSIsIDEp
Jyk7CisgICAgbXV0YXRpb25UZXN0KDQsICdzaGVldC5jc3NSdWxlc1syXS5kZWxldGVSdWxlKDAp
Jyk7CisgICAgbXV0YXRpb25UZXN0KDUsICdzaGVldC5jc3NSdWxlc1syXS5jc3NSdWxlc1swXS5z
dHlsZS5zZXRQcm9wZXJ0eSgiYmFja2dyb3VuZC1jb2xvciIsICJncmVlbiIsICIiKScpOworICAg
IG11dGF0aW9uVGVzdCg2LCAnc2hlZXQuY3NzUnVsZXNbMl0uY3NzUnVsZXNbMF0uc3R5bGUucmVt
b3ZlUHJvcGVydHkoImJhY2tncm91bmQtY29sb3IiKScpOworICAgIG11dGF0aW9uVGVzdCg3LCAn
c2hlZXQuY3NzUnVsZXNbMl0uY3NzUnVsZXNbMF0uc3R5bGUuY3NzVGV4dCA9ICJiYWNrZ3JvdW5k
LWNvbG9yOiBncmVlbiInKTsKKyAgICBtdXRhdGlvblRlc3QoOCwgJ3NoZWV0LmNzc1J1bGVzWzJd
LmNzc1J1bGVzWzBdLnNlbGVjdG9yVGV4dCA9ICIjZG9udG1hdGNoIicpOworICAgIG11dGF0aW9u
VGVzdCg5LCAnc2hlZXQuY3NzUnVsZXNbMl0ubWVkaWEubWVkaWFUZXh0ID0gInByaW50IicpOwor
CisgICAgdmFyIHRlc3RTdHJpbmcgPSAnXAorICAgICAgICBzaGVldC5jc3NSdWxlc1syXS5tZWRp
YS5hcHBlbmRNZWRpdW0oInByaW50Iik7XAorICAgICAgICBzaGVldC5jc3NSdWxlc1syXS5tZWRp
YS5kZWxldGVNZWRpdW0oImFsbCIpO1wKKyAgICAnOworICAgIG11dGF0aW9uVGVzdCgxMCwgdGVz
dFN0cmluZyk7CisgICAgCisgICAgdmFyIHRlc3RTdHJpbmcgPSAnXAorICAgICAgICBzaGVldC5k
ZWxldGVSdWxlKDMpO1wKKyAgICAgICAgc2hlZXQuaW5zZXJ0UnVsZSgiI3Rlc3RkaXYgeyBiYWNr
Z3JvdW5kLWNvbG9yOiBncmVlbjsgfSIsIDEpO1wKKyAgICAgICAgc2hlZXQuZGVsZXRlUnVsZSgy
KTtcCisgICAgICAgIHNoZWV0LmRlbGV0ZVJ1bGUoMCk7XAorICAgICAgICBzaGVldC5kZWxldGVS
dWxlKDMpO1wKKyAgICAgICAgc2hlZXQuZGVsZXRlUnVsZSgxKTtcCisgICAgICAgIHNoZWV0LmRl
bGV0ZVJ1bGUoMSk7XAorICAgICc7CisgICAgbXV0YXRpb25UZXN0KDExLCB0ZXN0U3RyaW5nKTsK
KyAgICBtdXRhdGlvblRlc3QoMTIsICdzaGVldC5jc3NSdWxlc1s0XS5pbnNlcnRSdWxlKCI0MCUg
eyBsZWZ0OiA0MHB4OyB9IiknKTsKKyAgICBtdXRhdGlvblRlc3QoMTMsICdzaGVldC5jc3NSdWxl
c1s0XS5kZWxldGVSdWxlKCIxMDAlIiknKTsKKyAgICBtdXRhdGlvblRlc3QoMTQsICdzaGVldC5j
c3NSdWxlc1s1XS5zdHlsZS5zZXRQcm9wZXJ0eSgiZm9udC1mYW1pbHkiLCAiQmFyIiwgIiIpJyk7
CisgICAgbXV0YXRpb25UZXN0KDE1LCAnc2hlZXQuY3NzUnVsZXNbM10uc2VsZWN0b3JUZXh0ID0g
ImZvbyInKTsKKworICAgIHRlc3RSZXN1bHRzKDAsICJyZWQiKTsKKyAgICB0ZXN0UmVzdWx0cygx
LCAiZ3JlZW4iKTsKKyAgICB0ZXN0UmVzdWx0cygyLCAiZ3JlZW4iKTsKKyAgICB0ZXN0UmVzdWx0
cygzLCAiZ3JlZW4iKTsKKyAgICB0ZXN0UmVzdWx0cyg0LCAiZ3JlZW4iKTsKKyAgICB0ZXN0UmVz
dWx0cyg1LCAiZ3JlZW4iKTsKKyAgICB0ZXN0UmVzdWx0cyg2LCAiZ3JlZW4iKTsKKyAgICB0ZXN0
UmVzdWx0cyg3LCAiZ3JlZW4iKTsKKyAgICB0ZXN0UmVzdWx0cyg4LCAiZ3JlZW4iKTsKKyAgICB0
ZXN0UmVzdWx0cyg5LCAiZ3JlZW4iKTsKKyAgICB0ZXN0UmVzdWx0cygxMCwgImdyZWVuIik7Cisg
ICAgdGVzdFJlc3VsdHMoMTEsICJncmVlbiIpOworICAgIHRlc3RSZXN1bHRzKDEyLCAicmVkIik7
CisgICAgdGVzdFJlc3VsdHMoMTMsICJyZWQiKTsKKyAgICB0ZXN0UmVzdWx0cygxNCwgInJlZCIp
OworICAgIHRlc3RSZXN1bHRzKDE1LCAicmVkIik7CisKKyAgICBmaW5pc2hKU1Rlc3QoKTsKK30K
KworPC9zY3JpcHQ+Cis8c2NyaXB0IHNyYz0iL2pzLXRlc3QtcmVzb3VyY2VzL2pzLXRlc3QtcG9z
dC5qcyI+PC9zY3JpcHQ+CkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2Nzcy9yZXNvdXJj
ZXMvc2hhcmVkLmNzcwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2Nzcy9y
ZXNvdXJjZXMvc2hhcmVkLmNzcwkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVz
dHMvY3NzL3Jlc291cmNlcy9zaGFyZWQuY3NzCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDE1IEBA
CitAY2hhcnNldCAndXRmLTgnOworI3Rlc3RkaXYgeyBiYWNrZ3JvdW5kLWNvbG9yOiBncmVlbjsg
fQorQG1lZGlhIGFsbCB7CisgICAgI3Rlc3RkaXYgeyBiYWNrZ3JvdW5kLWNvbG9yOiByZWQ7IH0K
K30KK0BwYWdlIDpyaWdodCB7CisgIG1hcmdpbi1sZWZ0OiAzY207Cit9CitALXdlYmtpdC1rZXlm
cmFtZXMgYm91bmNlIHsKKyAgICBmcm9tIHsgbGVmdDogMHB4OyB9CisgICAgdG8geyBsZWZ0OiAy
MDBweDsgfQorfQorQGZvbnQtZmFjZSB7CisgIGZvbnQtZmFtaWx5OiBGb287Cit9Cg==
</data>
<flag name="review"
          id="146237"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
      

    </bug>

</bugzilla>