<?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>49938</bug_id>
          
          <creation_ts>2010-11-22 14:21:00 -0800</creation_ts>
          <short_desc>ApplyStyleCommand should take EditingStyle instead of CSSStyleDeclaration</short_desc>
          <delta_ts>2010-12-06 17:00:39 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>HTML Editing</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>49813</dependson>
          <blocked>27818</blocked>
    
    <blocked>49956</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>darin</cc>
    
    <cc>eric</cc>
    
    <cc>ojan</cc>
    
    <cc>tkent</cc>
    
    <cc>tony</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>312520</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-11-22 14:21:00 -0800</bug_when>
    <thetext>ApplyStyleCommand::ApplyStyleCommand and ApplyStyleCommand::create should take EditingStyle instead of CSSStyleDeclaration so that we can move / integrate the StyleChange in ApplyStyleCommand into EditingStyle.  This change is required to fix the bug 27818.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>312679</commentid>
    <comment_count>1</comment_count>
      <attachid>74630</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-11-22 20:26:44 -0800</bug_when>
    <thetext>Created attachment 74630
refactoring</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>312680</commentid>
    <comment_count>2</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-11-22 20:27:28 -0800</bug_when>
    <thetext>Since deploying EditingStyle in ApplyStyleCommand will be a considerable amount of work, I&apos;ll do in a followup patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>315283</commentid>
    <comment_count>3</comment_count>
      <attachid>74630</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2010-11-30 13:39:20 -0800</bug_when>
    <thetext>Comment on attachment 74630
refactoring

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

&gt; WebCore/editing/ApplyStyleCommand.cpp:521
&gt; +        // apply the block-centric properties of the style

Nit: Convert to a sentence (capitalize first letter and add a period) please.

&gt; WebCore/editing/ApplyStyleCommand.cpp:525
&gt; +        // apply any remaining styles to the inline elements

Nit: Convert to a sentence (capitalize first letter and add a period) please.

&gt; WebCore/editing/Editor.cpp:858
&gt; +            applyCommand(ApplyStyleCommand::create(m_frame-&gt;document(), EditingStyle::create(style).get(), editingAction));

If there&apos;s no refptr to hold the EditingStyle returned by ::create, will it get deleted properly?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>315284</commentid>
    <comment_count>4</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-11-30 13:40:25 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; &gt; WebCore/editing/Editor.cpp:858
&gt; &gt; +            applyCommand(ApplyStyleCommand::create(m_frame-&gt;document(), EditingStyle::create(style).get(), editingAction));
&gt; 
&gt; If there&apos;s no refptr to hold the EditingStyle returned by ::create, will it get deleted properly?

Yes. The PassRefPtr that is the result of create takes care of this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>315292</commentid>
    <comment_count>5</comment_count>
      <attachid>74630</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2010-11-30 13:48:33 -0800</bug_when>
    <thetext>Comment on attachment 74630
refactoring

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

&gt; WebCore/editing/EditingStyle.h:74
&gt; +    void overrideWith(const CSSMutableStyleDeclaration* style);

Seems that the argument name “style” isn’t so helpful here.

I’m also not entirely sure that overrideWith is a great name for this function. Even overrideWithStyle would be better, but maybe we can come up with an even better name. I’m worried about the different verbs we’re using, “merge”, “apply”, “override”. It would be best if we chose more-consistent usage.

Is there some reason this argument needs to be CSSMutableStyleDeclaration and not just CSSStyleDeclaration?

&gt;&gt; WebCore/editing/Editor.cpp:858
&gt;&gt; +            applyCommand(ApplyStyleCommand::create(m_frame-&gt;document(), EditingStyle::create(style).get(), editingAction));
&gt; 
&gt; If there&apos;s no refptr to hold the EditingStyle returned by ::create, will it get deleted properly?

Yes, the PassRefPtr that is the result of create takes care of that.

&gt; WebCore/editing/SelectionController.h:29
&gt; +#include &quot;CSSMutableStyleDeclaration.h&quot;

Maybe instead of adding this include we could make copyTypingStyle non-inline. Seems unlikely we get a lot of benefit from inlining it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>315310</commentid>
    <comment_count>6</comment_count>
      <attachid>74630</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-11-30 14:22:51 -0800</bug_when>
    <thetext>Comment on attachment 74630
refactoring

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

I&apos;ll post a new patch for another review since quite few changes are requested.

&gt;&gt; WebCore/editing/ApplyStyleCommand.cpp:521
&gt;&gt; +        // apply the block-centric properties of the style
&gt; 
&gt; Nit: Convert to a sentence (capitalize first letter and add a period) please.

Will do.

&gt;&gt; WebCore/editing/ApplyStyleCommand.cpp:525
&gt;&gt; +        // apply any remaining styles to the inline elements
&gt; 
&gt; Nit: Convert to a sentence (capitalize first letter and add a period) please.

Will do.

&gt;&gt; WebCore/editing/EditingStyle.h:74
&gt;&gt; +    void overrideWith(const CSSMutableStyleDeclaration* style);
&gt; 
&gt; Seems that the argument name “style” isn’t so helpful here.
&gt; 
&gt; I’m also not entirely sure that overrideWith is a great name for this function. Even overrideWithStyle would be better, but maybe we can come up with an even better name. I’m worried about the different verbs we’re using, “merge”, “apply”, “override”. It would be best if we chose more-consistent usage.
&gt; 
&gt; Is there some reason this argument needs to be CSSMutableStyleDeclaration and not just CSSStyleDeclaration?

Will remove the argument name.  How about mergeAndOverride, mergeOverridingConflictingStyles, or mergeStyleOverridingConflicts?

It needs to take CSSMutableStyleDeclaration because CSSMutableStyleDeclaration::merge takes CSSMutableStyleDeclaration and accesses m_properties.  I&apos;m not happy about it either.

&gt;&gt; WebCore/editing/SelectionController.h:29
&gt;&gt; +#include &quot;CSSMutableStyleDeclaration.h&quot;
&gt; 
&gt; Maybe instead of adding this include we could make copyTypingStyle non-inline. Seems unlikely we get a lot of benefit from inlining it.

Doing so will require adding ~EditingStyle but I guess the cost of adding it is negligible.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>315402</commentid>
    <comment_count>7</comment_count>
      <attachid>75224</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-11-30 16:44:21 -0800</bug_when>
    <thetext>Created attachment 75224
fixed per Tony&apos;s &amp; Darin&apos;s comments</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>315987</commentid>
    <comment_count>8</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-12-01 18:46:45 -0800</bug_when>
    <thetext>Hi Tony &amp; Darin,

Could either one of you review this patch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>317846</commentid>
    <comment_count>9</comment_count>
      <attachid>75224</attachid>
    <who name="Tony Chang">tony</who>
    <bug_when>2010-12-06 14:25:54 -0800</bug_when>
    <thetext>Comment on attachment 75224
fixed per Tony&apos;s &amp; Darin&apos;s comments

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

Darin may want to comment on the function name overrideWithStyle.

&gt; WebCore/ChangeLog:10
&gt; +        by calls to EditingStyle&apos;s member functions and extracted EditingStyle::overrideWith and

Nit: overrideWithStyle</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>317940</commentid>
    <comment_count>10</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2010-12-06 17:00:39 -0800</bug_when>
    <thetext>Committed r73416: &lt;http://trac.webkit.org/changeset/73416&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>74630</attachid>
            <date>2010-11-22 20:26:44 -0800</date>
            <delta_ts>2010-11-30 14:23:03 -0800</delta_ts>
            <desc>refactoring</desc>
            <filename>bug-49938-20101122202643.patch</filename>
            <type>text/plain</type>
            <size>28766</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3MjU4MCkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTUgQEAKKzIwMTAtMTEtMjIgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQXBw
bHlTdHlsZUNvbW1hbmQgc2hvdWxkIHRha2UgRWRpdGluZ1N0eWxlIGluc3RlYWQgb2YgQ1NTU3R5
bGVEZWNsYXJhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NDk5MzgKKworICAgICAgICBNb2RpZmllZCBBcHBseVN0eWxlQ29tbWFuZDo6QXBwbHlT
dHlsZUNvbW1hbmQgYW5kIEFwcGx5U3R5bGVDb21tYW5kOjpjcmVhdGUgdG8gdGFrZSBFZGl0aW5n
U3R5bGUqCisgICAgICAgIGluc3RlYWQgb2YgQ1NTU3R5bGVEZWNsYXJhdGlvbiouIEFsc28gcmVw
bGFjZWQgbXVjaCBvZiBjb2RlIGluIEVkaXRvcjo6Y29tcHV0ZUFuZFNldFR5cGluZ1N0eWxlCisg
ICAgICAgIGJ5IGNhbGxzIHRvIEVkaXRpbmdTdHlsZSdzIG1lbWJlciBmdW5jdGlvbnMgYW5kIGV4
dHJhY3RlZCBFZGl0aW5nU3R5bGU6Om92ZXJyaWRlV2l0aCBhbmQKKyAgICAgICAgRWRpdGluZ1N0
eWxlOjpleHRyYWN0QW5kUmVtb3ZlQmxvY2tQcm9wZXJ0aWVzLgorCisgICAgICAgIE5vIG5ldyB0
ZXN0cyBhcmUgYWRkZWQgc2luY2UgdGhpcyBpcyBhIHJlZmFjdG9yaW5nLgorCisgICAgICAgICog
Y3NzL0NTU011dGFibGVTdHlsZURlY2xhcmF0aW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkNT
U011dGFibGVTdHlsZURlY2xhcmF0aW9uOjptZXJnZSk6IE1hZGUgQ1NTTXV0YWJsZVN0eWxlRGVj
bGFyYXRpb24qIGluIHRoZSBhcmd1bWVudCBsaXN0IGNvbnN0LgorICAgICAgICAqIGNzcy9DU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbi5oOgorICAgICAgICAqIGVkaXRpbmcvQXBwbHlTdHlsZUNv
bW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6OkFwcGx5U3R5
bGVDb21tYW5kKTogVGFrZXMgRWRpdGluZ1N0eWxlKiBpbnN0ZWFkIG9mIENTU1N0eWxlRGVjbGFy
YXRpb24qLgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6OmRvQXBwbHkpOiBV
c2VzIEVkaXRpbmdTdHlsZS4KKyAgICAgICAgKiBlZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmg6
IG1fc3R5bGUgaXMgbm93IGEgcmVmLXBvaW50ZXIgdG8gRWRpdGluZ1N0eWxlIGluc3RlYWQgb2Yg
Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24uCisgICAgICAgIChXZWJDb3JlOjpBcHBseVN0eWxl
Q29tbWFuZDo6Y3JlYXRlKTogVGFrZXMgRWRpdGluZ1N0eWxlKiBpbnN0ZWFkIG9mIENTU1N0eWxl
RGVjbGFyYXRpb24qLgorICAgICAgICAqIGVkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQ6OmFwcGx5U3R5bGUpOiBE
aXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjptb3ZlUGFyYWdy
YXBocyk6IENhbGxzIGFwcGx5U3R5bGUuCisgICAgICAgIChXZWJDb3JlOjpDb21wb3NpdGVFZGl0
Q29tbWFuZDo6YnJlYWtPdXRPZkVtcHR5TGlzdEl0ZW0pOiBEaXR0by4KKyAgICAgICAgKiBlZGl0
aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmg6CisgICAgICAgICogZWRpdGluZy9EZWxldGVTZWxl
Y3Rpb25Db21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRlbGV0ZVNlbGVjdGlvbkNvbW1h
bmQ6OmNhbGN1bGF0ZVR5cGluZ1N0eWxlQWZ0ZXJEZWxldGUpOiBEaXR0by4KKyAgICAgICAgKiBl
ZGl0aW5nL0VkaXRDb21tYW5kLmNwcDoKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRDb21tYW5kLmg6
CisgICAgICAgICogZWRpdGluZy9FZGl0aW5nU3R5bGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
RWRpdGluZ1N0eWxlOjpvdmVycmlkZVdpdGgpOiBFeHRyYWN0ZWQgZnJvbSBFZGl0b3I6OmNhbGN1
bGF0ZVR5cGluZ1N0eWxlQWZ0ZXJEZWxldGUuCisgICAgICAgIChXZWJDb3JlOjpFZGl0aW5nU3R5
bGU6OmNvcHkpOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRpbmdTdHlsZTo6ZXh0cmFj
dEFuZFJlbW92ZUJsb2NrUHJvcGVydGllcyk6IEV4dHJhY3RlZCBmcm9tIEVkaXRvcjo6Y2FsY3Vs
YXRlVHlwaW5nU3R5bGVBZnRlckRlbGV0ZS4KKyAgICAgICAgKiBlZGl0aW5nL0VkaXRpbmdTdHls
ZS5oOgorICAgICAgICAqIGVkaXRpbmcvRWRpdG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVk
aXRvcjo6YXBwbHlTdHlsZSk6IENhbGxzIEFwcGx5U3R5bGVDb21tYW5kOjpjcmVhdGUuCisgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3I6OmFwcGx5UGFyYWdyYXBoU3R5bGUpOiBEaXR0by4KKyAgICAg
ICAgKFdlYkNvcmU6OkVkaXRvcjo6Y29tcHV0ZUFuZFNldFR5cGluZ1N0eWxlKTogRGl0dG8uCisg
ICAgICAgICogZWRpdGluZy9JbnNlcnRMaW5lQnJlYWtDb21tYW5kLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6Okluc2VydExpbmVCcmVha0NvbW1hbmQ6OmRvQXBwbHkpOiBDYWxscyBhcHBseVN0eWxl
LgorICAgICAgICAqIGVkaXRpbmcvSW5zZXJ0UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFuZC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpJbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5kOjphcHBs
eVN0eWxlQWZ0ZXJJbnNlcnRpb24pOiBEaXR0by4KKyAgICAgICAgKiBlZGl0aW5nL0luc2VydFRl
eHRDb21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc2VydFRleHRDb21tYW5kOjppbnB1
dCk6IERpdHRvLgorICAgICAgICAqIGVkaXRpbmcvUmVtb3ZlRm9ybWF0Q29tbWFuZC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW1vdmVGb3JtYXRDb21tYW5kOjpkb0FwcGx5KTogQ2FsbHMgQXBw
bHlTdHlsZUNvbW1hbmQ6OmNyZWF0ZS4KKyAgICAgICAgKiBlZGl0aW5nL1JlcGxhY2VTZWxlY3Rp
b25Db21tYW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlcGxhY2VTZWxlY3Rpb25Db21tYW5k
Ojpjb21wbGV0ZUhUTUxSZXBsYWNlbWVudCk6IENhbGxzIGFwcGx5U3R5bGUuCisgICAgICAgICog
ZWRpdGluZy9TZWxlY3Rpb25Db250cm9sbGVyLmg6CisKIDIwMTAtMTEtMjIgIFRvbnkgR2VudGls
Y29yZSAgPHRvbnlnQGNocm9taXVtLm9yZz4KIAogICAgICAgICBSZXZpZXdlZCBieSBBZGFtIEJh
cnRoLgpJbmRleDogV2ViQ29yZS9jc3MvQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24uY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFdlYkNvcmUvY3NzL0NTU011dGFibGVTdHlsZURlY2xhcmF0aW9uLmNwcAko
cmV2aXNpb24gNzI1NzYpCisrKyBXZWJDb3JlL2Nzcy9DU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlv
bi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTcwOCwxMyArNzA4LDEzIEBAIHZvaWQgQ1NTTXV0YWJs
ZVN0eWxlRGVjbGFyYXRpb246OnNldENzc1QKICAgICBzZXROZWVkc1N0eWxlUmVjYWxjKCk7CiB9
CiAKLXZvaWQgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246Om1lcmdlKENTU011dGFibGVTdHls
ZURlY2xhcmF0aW9uKiBvdGhlciwgYm9vbCBhcmdPdmVycmlkZXNPbkNvbmZsaWN0KQordm9pZCBD
U1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6bWVyZ2UoY29uc3QgQ1NTTXV0YWJsZVN0eWxlRGVj
bGFyYXRpb24qIG90aGVyLCBib29sIGFyZ092ZXJyaWRlc09uQ29uZmxpY3QpCiB7CiAgICAgQVNT
RVJUKCFtX2l0ZXJhdG9yQ291bnQpOwogCiAgICAgdW5zaWduZWQgc2l6ZSA9IG90aGVyLT5tX3By
b3BlcnRpZXMuc2l6ZSgpOwogICAgIGZvciAodW5zaWduZWQgbiA9IDA7IG4gPCBzaXplOyArK24p
IHsKLSAgICAgICAgQ1NTUHJvcGVydHkmIHRvTWVyZ2UgPSBvdGhlci0+bV9wcm9wZXJ0aWVzW25d
OworICAgICAgICBjb25zdCBDU1NQcm9wZXJ0eSYgdG9NZXJnZSA9IG90aGVyLT5tX3Byb3BlcnRp
ZXNbbl07CiAgICAgICAgIENTU1Byb3BlcnR5KiBvbGQgPSBmaW5kUHJvcGVydHlXaXRoSWQodG9N
ZXJnZS5pZCgpKTsKICAgICAgICAgaWYgKG9sZCkgewogICAgICAgICAgICAgaWYgKCFhcmdPdmVy
cmlkZXNPbkNvbmZsaWN0ICYmIG9sZC0+dmFsdWUoKSkKSW5kZXg6IFdlYkNvcmUvY3NzL0NTU011
dGFibGVTdHlsZURlY2xhcmF0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9jc3MvQ1NTTXV0
YWJsZVN0eWxlRGVjbGFyYXRpb24uaAkocmV2aXNpb24gNzI1NzYpCisrKyBXZWJDb3JlL2Nzcy9D
U1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbi5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMjksNyArMTI5
LDcgQEAgcHVibGljOgogICAgIHZvaWQgcmVtb3ZlQmxvY2tQcm9wZXJ0aWVzKCk7CiAgICAgdm9p
ZCByZW1vdmVQcm9wZXJ0aWVzSW5TZXQoY29uc3QgaW50KiBzZXQsIHVuc2lnbmVkIGxlbmd0aCwg
Ym9vbCBub3RpZnlDaGFuZ2VkID0gdHJ1ZSk7CiAKLSAgICB2b2lkIG1lcmdlKENTU011dGFibGVT
dHlsZURlY2xhcmF0aW9uKiwgYm9vbCBhcmdPdmVycmlkZXNPbkNvbmZsaWN0ID0gdHJ1ZSk7Cisg
ICAgdm9pZCBtZXJnZShjb25zdCBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbiosIGJvb2wgYXJn
T3ZlcnJpZGVzT25Db25mbGljdCA9IHRydWUpOwogCiAgICAgdm9pZCBzZXRTdHJpY3RQYXJzaW5n
KGJvb2wgYikgeyBtX3N0cmljdFBhcnNpbmcgPSBiOyB9CiAgICAgYm9vbCB1c2VTdHJpY3RQYXJz
aW5nKCkgY29uc3QgeyByZXR1cm4gbV9zdHJpY3RQYXJzaW5nOyB9CkluZGV4OiBXZWJDb3JlL2Vk
aXRpbmcvQXBwbHlTdHlsZUNvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGlu
Zy9BcHBseVN0eWxlQ29tbWFuZC5jcHAJKHJldmlzaW9uIDcyNTc2KQorKysgV2ViQ29yZS9lZGl0
aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsNiArMzQsNyBA
QAogI2luY2x1ZGUgIkNTU1N0eWxlU2VsZWN0b3IuaCIKICNpbmNsdWRlICJDU1NWYWx1ZUtleXdv
cmRzLmgiCiAjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJFZGl0aW5nU3R5bGUuaCIK
ICNpbmNsdWRlICJFZGl0b3IuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkhUTUxG
b250RWxlbWVudC5oIgpAQCAtNDI5LDkgKzQzMCw5IEBAIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVE
ZWNsYXJhdGlvbj4gZ2V0UHIKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1BcHBseVN0eWxlQ29t
bWFuZDo6QXBwbHlTdHlsZUNvbW1hbmQoRG9jdW1lbnQqIGRvY3VtZW50LCBDU1NTdHlsZURlY2xh
cmF0aW9uKiBzdHlsZSwgRWRpdEFjdGlvbiBlZGl0aW5nQWN0aW9uLCBFUHJvcGVydHlMZXZlbCBw
cm9wZXJ0eUxldmVsKQorQXBwbHlTdHlsZUNvbW1hbmQ6OkFwcGx5U3R5bGVDb21tYW5kKERvY3Vt
ZW50KiBkb2N1bWVudCwgY29uc3QgRWRpdGluZ1N0eWxlKiBzdHlsZSwgRWRpdEFjdGlvbiBlZGl0
aW5nQWN0aW9uLCBFUHJvcGVydHlMZXZlbCBwcm9wZXJ0eUxldmVsKQogICAgIDogQ29tcG9zaXRl
RWRpdENvbW1hbmQoZG9jdW1lbnQpCi0gICAgLCBtX3N0eWxlKHN0eWxlLT5tYWtlTXV0YWJsZSgp
KQorICAgICwgbV9zdHlsZShzdHlsZS0+Y29weSgpKQogICAgICwgbV9lZGl0aW5nQWN0aW9uKGVk
aXRpbmdBY3Rpb24pCiAgICAgLCBtX3Byb3BlcnR5TGV2ZWwocHJvcGVydHlMZXZlbCkKICAgICAs
IG1fc3RhcnQoZW5kaW5nU2VsZWN0aW9uKCkuc3RhcnQoKS5kb3duc3RyZWFtKCkpCkBAIC00NDMs
OSArNDQ0LDkgQEAgQXBwbHlTdHlsZUNvbW1hbmQ6OkFwcGx5U3R5bGVDb21tYW5kKERvYwogewog
fQogCi1BcHBseVN0eWxlQ29tbWFuZDo6QXBwbHlTdHlsZUNvbW1hbmQoRG9jdW1lbnQqIGRvY3Vt
ZW50LCBDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSwgY29uc3QgUG9zaXRpb24mIHN0YXJ0LCBj
b25zdCBQb3NpdGlvbiYgZW5kLCBFZGl0QWN0aW9uIGVkaXRpbmdBY3Rpb24sIEVQcm9wZXJ0eUxl
dmVsIHByb3BlcnR5TGV2ZWwpCitBcHBseVN0eWxlQ29tbWFuZDo6QXBwbHlTdHlsZUNvbW1hbmQo
RG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBFZGl0aW5nU3R5bGUqIHN0eWxlLCBjb25zdCBQb3Np
dGlvbiYgc3RhcnQsIGNvbnN0IFBvc2l0aW9uJiBlbmQsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlv
biwgRVByb3BlcnR5TGV2ZWwgcHJvcGVydHlMZXZlbCkKICAgICA6IENvbXBvc2l0ZUVkaXRDb21t
YW5kKGRvY3VtZW50KQotICAgICwgbV9zdHlsZShzdHlsZS0+bWFrZU11dGFibGUoKSkKKyAgICAs
IG1fc3R5bGUoc3R5bGUtPmNvcHkoKSkKICAgICAsIG1fZWRpdGluZ0FjdGlvbihlZGl0aW5nQWN0
aW9uKQogICAgICwgbV9wcm9wZXJ0eUxldmVsKHByb3BlcnR5TGV2ZWwpCiAgICAgLCBtX3N0YXJ0
KHN0YXJ0KQpAQCAtNDU5LDcgKzQ2MCw3IEBAIEFwcGx5U3R5bGVDb21tYW5kOjpBcHBseVN0eWxl
Q29tbWFuZChEb2MKIAogQXBwbHlTdHlsZUNvbW1hbmQ6OkFwcGx5U3R5bGVDb21tYW5kKFBhc3NS
ZWZQdHI8RWxlbWVudD4gZWxlbWVudCwgYm9vbCByZW1vdmVPbmx5LCBFZGl0QWN0aW9uIGVkaXRp
bmdBY3Rpb24pCiAgICAgOiBDb21wb3NpdGVFZGl0Q29tbWFuZChlbGVtZW50LT5kb2N1bWVudCgp
KQotICAgICwgbV9zdHlsZShDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Y3JlYXRlKCkpCisg
ICAgLCBtX3N0eWxlKEVkaXRpbmdTdHlsZTo6Y3JlYXRlKCkpCiAgICAgLCBtX2VkaXRpbmdBY3Rp
b24oZWRpdGluZ0FjdGlvbikKICAgICAsIG1fcHJvcGVydHlMZXZlbChQcm9wZXJ0eURlZmF1bHQp
CiAgICAgLCBtX3N0YXJ0KGVuZGluZ1NlbGVjdGlvbigpLnN0YXJ0KCkuZG93bnN0cmVhbSgpKQpA
QCAtNDcxLDkgKzQ3Miw5IEBAIEFwcGx5U3R5bGVDb21tYW5kOjpBcHBseVN0eWxlQ29tbWFuZChQ
YXMKIHsKIH0KIAotQXBwbHlTdHlsZUNvbW1hbmQ6OkFwcGx5U3R5bGVDb21tYW5kKERvY3VtZW50
KiBkb2N1bWVudCwgQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUsIElzSW5saW5lRWxlbWVudFRv
UmVtb3ZlRnVuY3Rpb24gaXNJbmxpbmVFbGVtZW50VG9SZW1vdmVGdW5jdGlvbiwgRWRpdEFjdGlv
biBlZGl0aW5nQWN0aW9uKQorQXBwbHlTdHlsZUNvbW1hbmQ6OkFwcGx5U3R5bGVDb21tYW5kKERv
Y3VtZW50KiBkb2N1bWVudCwgY29uc3QgRWRpdGluZ1N0eWxlKiBzdHlsZSwgSXNJbmxpbmVFbGVt
ZW50VG9SZW1vdmVGdW5jdGlvbiBpc0lubGluZUVsZW1lbnRUb1JlbW92ZUZ1bmN0aW9uLCBFZGl0
QWN0aW9uIGVkaXRpbmdBY3Rpb24pCiAgICAgOiBDb21wb3NpdGVFZGl0Q29tbWFuZChkb2N1bWVu
dCkKLSAgICAsIG1fc3R5bGUoc3R5bGUtPm1ha2VNdXRhYmxlKCkpCisgICAgLCBtX3N0eWxlKHN0
eWxlLT5jb3B5KCkpCiAgICAgLCBtX2VkaXRpbmdBY3Rpb24oZWRpdGluZ0FjdGlvbikKICAgICAs
IG1fcHJvcGVydHlMZXZlbChQcm9wZXJ0eURlZmF1bHQpCiAgICAgLCBtX3N0YXJ0KGVuZGluZ1Nl
bGVjdGlvbigpLnN0YXJ0KCkuZG93bnN0cmVhbSgpKQpAQCAtNTE2LDI1ICs1MTcsMjMgQEAgUG9z
aXRpb24gQXBwbHlTdHlsZUNvbW1hbmQ6OmVuZFBvc2l0aW9uKAogdm9pZCBBcHBseVN0eWxlQ29t
bWFuZDo6ZG9BcHBseSgpCiB7CiAgICAgc3dpdGNoIChtX3Byb3BlcnR5TGV2ZWwpIHsKLSAgICAg
ICAgY2FzZSBQcm9wZXJ0eURlZmF1bHQ6IHsKLSAgICAgICAgICAgIC8vIGFwcGx5IHRoZSBibG9j
ay1jZW50cmljIHByb3BlcnRpZXMgb2YgdGhlIHN0eWxlCi0gICAgICAgICAgICBSZWZQdHI8Q1NT
TXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IGJsb2NrU3R5bGUgPSBtX3N0eWxlLT5jb3B5QmxvY2tQ
cm9wZXJ0aWVzKCk7Ci0gICAgICAgICAgICBpZiAoYmxvY2tTdHlsZS0+bGVuZ3RoKCkpCi0gICAg
ICAgICAgICAgICAgYXBwbHlCbG9ja1N0eWxlKGJsb2NrU3R5bGUuZ2V0KCkpOwotICAgICAgICAg
ICAgLy8gYXBwbHkgYW55IHJlbWFpbmluZyBzdHlsZXMgdG8gdGhlIGlubGluZSBlbGVtZW50cwot
ICAgICAgICAgICAgLy8gTk9URTogaG9wZWZ1bGx5LCB0aGlzIHN0cmluZyBjb21wYXJpc29uIGlz
IHRoZSBzYW1lIGFzIGNoZWNraW5nIGZvciBhIG5vbi1udWxsIGRpZmYKLSAgICAgICAgICAgIGlm
IChibG9ja1N0eWxlLT5sZW5ndGgoKSA8IG1fc3R5bGUtPmxlbmd0aCgpIHx8IG1fc3R5bGVkSW5s
aW5lRWxlbWVudCB8fCBtX2lzSW5saW5lRWxlbWVudFRvUmVtb3ZlRnVuY3Rpb24pIHsKLSAgICAg
ICAgICAgICAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IGlubGluZVN0eWxl
ID0gbV9zdHlsZS0+Y29weSgpOwotICAgICAgICAgICAgICAgIGFwcGx5UmVsYXRpdmVGb250U3R5
bGVDaGFuZ2UoaW5saW5lU3R5bGUuZ2V0KCkpOwotICAgICAgICAgICAgICAgIGJsb2NrU3R5bGUt
PmRpZmYoaW5saW5lU3R5bGUuZ2V0KCkpOwotICAgICAgICAgICAgICAgIGFwcGx5SW5saW5lU3R5
bGUoaW5saW5lU3R5bGUuZ2V0KCkpOwotICAgICAgICAgICAgfQotICAgICAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBQcm9wZXJ0eURlZmF1bHQ6IHsKKyAgICAgICAgLy8gYXBwbHkgdGhlIGJsb2Nr
LWNlbnRyaWMgcHJvcGVydGllcyBvZiB0aGUgc3R5bGUKKyAgICAgICAgUmVmUHRyPEVkaXRpbmdT
dHlsZT4gYmxvY2tTdHlsZSA9IG1fc3R5bGUtPmV4dHJhY3RBbmRSZW1vdmVCbG9ja1Byb3BlcnRp
ZXMoKTsKKyAgICAgICAgaWYgKCFibG9ja1N0eWxlLT5pc0VtcHR5KCkpCisgICAgICAgICAgICBh
cHBseUJsb2NrU3R5bGUoYmxvY2tTdHlsZS0+c3R5bGUoKSk7CisgICAgICAgIC8vIGFwcGx5IGFu
eSByZW1haW5pbmcgc3R5bGVzIHRvIHRoZSBpbmxpbmUgZWxlbWVudHMKKyAgICAgICAgaWYgKCFt
X3N0eWxlLT5pc0VtcHR5KCkgfHwgbV9zdHlsZWRJbmxpbmVFbGVtZW50IHx8IG1faXNJbmxpbmVF
bGVtZW50VG9SZW1vdmVGdW5jdGlvbikgeworICAgICAgICAgICAgUmVmUHRyPENTU011dGFibGVT
dHlsZURlY2xhcmF0aW9uPiBzdHlsZSA9IG1fc3R5bGUtPnN0eWxlKCkgPyBtX3N0eWxlLT5zdHls
ZSgpIDogQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmNyZWF0ZSgpOworICAgICAgICAgICAg
YXBwbHlSZWxhdGl2ZUZvbnRTdHlsZUNoYW5nZShzdHlsZS5nZXQoKSk7CisgICAgICAgICAgICBh
cHBseUlubGluZVN0eWxlKHN0eWxlLmdldCgpKTsKICAgICAgICAgfQotICAgICAgICBjYXNlIEZv
cmNlQmxvY2tQcm9wZXJ0aWVzOgotICAgICAgICAgICAgLy8gRm9yY2UgYWxsIHByb3BlcnRpZXMg
dG8gYmUgYXBwbGllZCBhcyBibG9jayBzdHlsZXMuCi0gICAgICAgICAgICBhcHBseUJsb2NrU3R5
bGUobV9zdHlsZS5nZXQoKSk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorICAgIGNhc2UgRm9yY2VCbG9ja1Byb3BlcnRpZXM6CisgICAgICAgIC8vIEZvcmNlIGFs
bCBwcm9wZXJ0aWVzIHRvIGJlIGFwcGxpZWQgYXMgYmxvY2sgc3R5bGVzLgorICAgICAgICBhcHBs
eUJsb2NrU3R5bGUobV9zdHlsZS0+c3R5bGUoKSk7CisgICAgICAgIGJyZWFrOwogICAgIH0KIH0K
IApJbmRleDogV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmgJKHJldmlzaW9uIDcyNTc2KQor
KysgV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmgJKHdvcmtpbmcgY29weSkKQEAg
LTMyLDYgKzMyLDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ1NTUHJpbWl0aXZl
VmFsdWU7CitjbGFzcyBFZGl0aW5nU3R5bGU7CiBjbGFzcyBIVE1MRWxlbWVudDsKIGNsYXNzIFN0
eWxlQ2hhbmdlOwogCkBAIC00NywxMSArNDgsMTEgQEAgcHVibGljOgogICAgIGVudW0gRUFkZFN0
eWxlZEVsZW1lbnQgeyBBZGRTdHlsZWRFbGVtZW50LCBEb05vdEFkZFN0eWxlZEVsZW1lbnQgfTsK
ICAgICB0eXBlZGVmIGJvb2wgKCpJc0lubGluZUVsZW1lbnRUb1JlbW92ZUZ1bmN0aW9uKShjb25z
dCBFbGVtZW50Kik7CiAKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxBcHBseVN0eWxlQ29tbWFuZD4g
Y3JlYXRlKERvY3VtZW50KiBkb2N1bWVudCwgQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUsIEVk
aXRBY3Rpb24gYWN0aW9uID0gRWRpdEFjdGlvbkNoYW5nZUF0dHJpYnV0ZXMsIEVQcm9wZXJ0eUxl
dmVsIGxldmVsID0gUHJvcGVydHlEZWZhdWx0KQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEFwcGx5
U3R5bGVDb21tYW5kPiBjcmVhdGUoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBFZGl0aW5nU3R5
bGUqIHN0eWxlLCBFZGl0QWN0aW9uIGFjdGlvbiA9IEVkaXRBY3Rpb25DaGFuZ2VBdHRyaWJ1dGVz
LCBFUHJvcGVydHlMZXZlbCBsZXZlbCA9IFByb3BlcnR5RGVmYXVsdCkKICAgICB7CiAgICAgICAg
IHJldHVybiBhZG9wdFJlZihuZXcgQXBwbHlTdHlsZUNvbW1hbmQoZG9jdW1lbnQsIHN0eWxlLCBh
Y3Rpb24sIGxldmVsKSk7CiAgICAgfQotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEFwcGx5U3R5bGVD
b21tYW5kPiBjcmVhdGUoRG9jdW1lbnQqIGRvY3VtZW50LCBDU1NTdHlsZURlY2xhcmF0aW9uKiBz
dHlsZSwgY29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQb3NpdGlvbiYgZW5kLCBFZGl0QWN0
aW9uIGFjdGlvbiA9IEVkaXRBY3Rpb25DaGFuZ2VBdHRyaWJ1dGVzLCBFUHJvcGVydHlMZXZlbCBs
ZXZlbCA9IFByb3BlcnR5RGVmYXVsdCkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxBcHBseVN0eWxl
Q29tbWFuZD4gY3JlYXRlKERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgRWRpdGluZ1N0eWxlKiBz
dHlsZSwgY29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQb3NpdGlvbiYgZW5kLCBFZGl0QWN0
aW9uIGFjdGlvbiA9IEVkaXRBY3Rpb25DaGFuZ2VBdHRyaWJ1dGVzLCBFUHJvcGVydHlMZXZlbCBs
ZXZlbCA9IFByb3BlcnR5RGVmYXVsdCkKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgQXBwbHlTdHlsZUNvbW1hbmQoZG9jdW1lbnQsIHN0eWxlLCBzdGFydCwgZW5kLCBhY3Rpb24s
IGxldmVsKSk7CiAgICAgfQpAQCAtNTksMjIgKzYwLDIwIEBAIHB1YmxpYzoKICAgICB7CiAgICAg
ICAgIHJldHVybiBhZG9wdFJlZihuZXcgQXBwbHlTdHlsZUNvbW1hbmQoZWxlbWVudCwgcmVtb3Zl
T25seSwgYWN0aW9uKSk7CiAgICAgfQotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEFwcGx5U3R5bGVD
b21tYW5kPiBjcmVhdGUoRG9jdW1lbnQqIGRvY3VtZW50LCBDU1NTdHlsZURlY2xhcmF0aW9uKiBz
dHlsZSwgSXNJbmxpbmVFbGVtZW50VG9SZW1vdmVGdW5jdGlvbiBpc0lubGluZUVsZW1lbnRUb1Jl
bW92ZUZ1bmN0aW9uLCBFZGl0QWN0aW9uIGFjdGlvbiA9IEVkaXRBY3Rpb25DaGFuZ2VBdHRyaWJ1
dGVzKQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEFwcGx5U3R5bGVDb21tYW5kPiBjcmVhdGUoRG9j
dW1lbnQqIGRvY3VtZW50LCBjb25zdCBFZGl0aW5nU3R5bGUqIHN0eWxlLCBJc0lubGluZUVsZW1l
bnRUb1JlbW92ZUZ1bmN0aW9uIGlzSW5saW5lRWxlbWVudFRvUmVtb3ZlRnVuY3Rpb24sIEVkaXRB
Y3Rpb24gYWN0aW9uID0gRWRpdEFjdGlvbkNoYW5nZUF0dHJpYnV0ZXMpCiAgICAgewogICAgICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IEFwcGx5U3R5bGVDb21tYW5kKGRvY3VtZW50LCBzdHlsZSwg
aXNJbmxpbmVFbGVtZW50VG9SZW1vdmVGdW5jdGlvbiwgYWN0aW9uKSk7CiAgICAgfQogCiBwcml2
YXRlOgotICAgIEFwcGx5U3R5bGVDb21tYW5kKERvY3VtZW50KiwgQ1NTU3R5bGVEZWNsYXJhdGlv
biosIEVkaXRBY3Rpb24sIEVQcm9wZXJ0eUxldmVsKTsKLSAgICBBcHBseVN0eWxlQ29tbWFuZChE
b2N1bWVudCosIENTU1N0eWxlRGVjbGFyYXRpb24qLCBjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNv
bnN0IFBvc2l0aW9uJiBlbmQsIEVkaXRBY3Rpb24sIEVQcm9wZXJ0eUxldmVsKTsKKyAgICBBcHBs
eVN0eWxlQ29tbWFuZChEb2N1bWVudCosIGNvbnN0IEVkaXRpbmdTdHlsZSosIEVkaXRBY3Rpb24s
IEVQcm9wZXJ0eUxldmVsKTsKKyAgICBBcHBseVN0eWxlQ29tbWFuZChEb2N1bWVudCosIGNvbnN0
IEVkaXRpbmdTdHlsZSosIGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29uc3QgUG9zaXRpb24mIGVu
ZCwgRWRpdEFjdGlvbiwgRVByb3BlcnR5TGV2ZWwpOwogICAgIEFwcGx5U3R5bGVDb21tYW5kKFBh
c3NSZWZQdHI8RWxlbWVudD4sIGJvb2wgcmVtb3ZlT25seSwgRWRpdEFjdGlvbik7Ci0gICAgQXBw
bHlTdHlsZUNvbW1hbmQoRG9jdW1lbnQqLCBDU1NTdHlsZURlY2xhcmF0aW9uKiwgYm9vbCAoKmlz
SW5saW5lRWxlbWVudFRvUmVtb3ZlKShjb25zdCBFbGVtZW50KiksIEVkaXRBY3Rpb24pOworICAg
IEFwcGx5U3R5bGVDb21tYW5kKERvY3VtZW50KiwgY29uc3QgRWRpdGluZ1N0eWxlKiwgYm9vbCAo
KmlzSW5saW5lRWxlbWVudFRvUmVtb3ZlKShjb25zdCBFbGVtZW50KiksIEVkaXRBY3Rpb24pOwog
CiAgICAgdmlydHVhbCB2b2lkIGRvQXBwbHkoKTsKICAgICB2aXJ0dWFsIEVkaXRBY3Rpb24gZWRp
dGluZ0FjdGlvbigpIGNvbnN0OwogCi0gICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIHN0
eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zdHlsZS5nZXQoKTsgfQotCiAgICAgLy8gc3R5bGUtcmVt
b3ZhbCBoZWxwZXJzCiAgICAgYm9vbCBpc1N0eWxlZElubGluZUVsZW1lbnRUb1JlbW92ZShFbGVt
ZW50KikgY29uc3Q7CiAgICAgYm9vbCByZW1vdmVTdHlsZUZyb21SdW5CZWZvcmVBcHBseWluZ1N0
eWxlKENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSwgUmVmUHRyPE5vZGU+JiBydW5T
dGFydCwgUmVmUHRyPE5vZGU+JiBydW5FbmQpOwpAQCAtMTE5LDcgKzExOCw3IEBAIHByaXZhdGU6
CiAgICAgUG9zaXRpb24gc3RhcnRQb3NpdGlvbigpOwogICAgIFBvc2l0aW9uIGVuZFBvc2l0aW9u
KCk7CiAKLSAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IG1fc3R5bGU7Cisg
ICAgUmVmUHRyPEVkaXRpbmdTdHlsZT4gbV9zdHlsZTsKICAgICBFZGl0QWN0aW9uIG1fZWRpdGlu
Z0FjdGlvbjsKICAgICBFUHJvcGVydHlMZXZlbCBtX3Byb3BlcnR5TGV2ZWw7CiAgICAgUG9zaXRp
b24gbV9zdGFydDsKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNw
cAkocmV2aXNpb24gNzI1NzYpCisrKyBXZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1h
bmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw4ICsyOCw2IEBACiAKICNpbmNsdWRlICJBcHBl
bmROb2RlQ29tbWFuZC5oIgogI2luY2x1ZGUgIkFwcGx5U3R5bGVDb21tYW5kLmgiCi0jaW5jbHVk
ZSAiQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmgiCi0jaW5jbHVkZSAiQ1NTTXV0YWJsZVN0
eWxlRGVjbGFyYXRpb24uaCIKICNpbmNsdWRlICJDaGFyYWN0ZXJOYW1lcy5oIgogI2luY2x1ZGUg
IkRlbGV0ZUZyb21UZXh0Tm9kZUNvbW1hbmQuaCIKICNpbmNsdWRlICJEZWxldGVTZWxlY3Rpb25D
b21tYW5kLmgiCkBAIC0xMDUsMTIgKzEwMywxMiBAQCB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5k
OjphcHBseUNvbW1hbmRUCiAgICAgbV9jb21tYW5kcy5hcHBlbmQoY21kKTsKIH0KIAotdm9pZCBD
b21wb3NpdGVFZGl0Q29tbWFuZDo6YXBwbHlTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHls
ZSwgRWRpdEFjdGlvbiBlZGl0aW5nQWN0aW9uKQordm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6
YXBwbHlTdHlsZShjb25zdCBFZGl0aW5nU3R5bGUqIHN0eWxlLCBFZGl0QWN0aW9uIGVkaXRpbmdB
Y3Rpb24pCiB7CiAgICAgYXBwbHlDb21tYW5kVG9Db21wb3NpdGUoQXBwbHlTdHlsZUNvbW1hbmQ6
OmNyZWF0ZShkb2N1bWVudCgpLCBzdHlsZSwgZWRpdGluZ0FjdGlvbikpOwogfQogCi12b2lkIENv
bXBvc2l0ZUVkaXRDb21tYW5kOjphcHBseVN0eWxlKENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxl
LCBjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IFBvc2l0aW9uJiBlbmQsIEVkaXRBY3Rpb24g
ZWRpdGluZ0FjdGlvbikKK3ZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OmFwcGx5U3R5bGUoY29u
c3QgRWRpdGluZ1N0eWxlKiBzdHlsZSwgY29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQb3Np
dGlvbiYgZW5kLCBFZGl0QWN0aW9uIGVkaXRpbmdBY3Rpb24pCiB7CiAgICAgYXBwbHlDb21tYW5k
VG9Db21wb3NpdGUoQXBwbHlTdHlsZUNvbW1hbmQ6OmNyZWF0ZShkb2N1bWVudCgpLCBzdHlsZSwg
c3RhcnQsIGVuZCwgZWRpdGluZ0FjdGlvbikpOwogfQpAQCAtOTgzLDcgKzk4MSw3IEBAIHZvaWQg
Q29tcG9zaXRlRWRpdENvbW1hbmQ6Om1vdmVQYXJhZ3JhcGgKICAgICAvLyBJZiB0aGUgc2VsZWN0
aW9uIGlzIGluIGFuIGVtcHR5IHBhcmFncmFwaCwgcmVzdG9yZSBzdHlsZXMgZnJvbSB0aGUgb2xk
IGVtcHR5IHBhcmFncmFwaCB0byB0aGUgbmV3IGVtcHR5IHBhcmFncmFwaC4KICAgICBib29sIHNl
bGVjdGlvbklzRW1wdHlQYXJhZ3JhcGggPSBlbmRpbmdTZWxlY3Rpb24oKS5pc0NhcmV0KCkgJiYg
aXNTdGFydE9mUGFyYWdyYXBoKGVuZGluZ1NlbGVjdGlvbigpLnZpc2libGVTdGFydCgpKSAmJiBp
c0VuZE9mUGFyYWdyYXBoKGVuZGluZ1NlbGVjdGlvbigpLnZpc2libGVTdGFydCgpKTsKICAgICBp
ZiAoc3R5bGVJbkVtcHR5UGFyYWdyYXBoICYmIHNlbGVjdGlvbklzRW1wdHlQYXJhZ3JhcGgpCi0g
ICAgICAgIGFwcGx5U3R5bGUoc3R5bGVJbkVtcHR5UGFyYWdyYXBoLT5zdHlsZSgpKTsKKyAgICAg
ICAgYXBwbHlTdHlsZShzdHlsZUluRW1wdHlQYXJhZ3JhcGguZ2V0KCkpOwogCiAgICAgaWYgKHBy
ZXNlcnZlU2VsZWN0aW9uICYmIHN0YXJ0SW5kZXggIT0gLTEpIHsKICAgICAgICAgLy8gRnJhZ21l
bnQgY3JlYXRpb24gKHVzaW5nIGNyZWF0ZU1hcmt1cCkgaW5jb3JyZWN0bHkgdXNlcyByZWd1bGFy
CkBAIC0xMDU2LDcgKzEwNTQsNyBAQCBib29sIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpicmVha091
dE9mRW1wCiAKICAgICBzdHlsZS0+cHJlcGFyZVRvQXBwbHlBdChlbmRpbmdTZWxlY3Rpb24oKS5z
dGFydCgpKTsKICAgICBpZiAoIXN0eWxlLT5pc0VtcHR5KCkpCi0gICAgICAgIGFwcGx5U3R5bGUo
c3R5bGUtPnN0eWxlKCkpOworICAgICAgICBhcHBseVN0eWxlKHN0eWxlLmdldCgpKTsKIAogICAg
IHJldHVybiB0cnVlOwogfQpJbmRleDogV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21t
YW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5k
LmgJKHJldmlzaW9uIDcyNTc2KQorKysgV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21t
YW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAKIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIAogY2xhc3MgQ1NTU3R5bGVEZWNsYXJhdGlvbjsKK2NsYXNzIEVkaXRpbmdTdHlsZTsKIGNs
YXNzIEhUTUxFbGVtZW50OwogY2xhc3MgU3R5bGVkRWxlbWVudDsKIGNsYXNzIFRleHQ7CkBAIC01
MSw4ICs1Miw4IEBAIHByb3RlY3RlZDoKICAgICAvLwogICAgIHZvaWQgYXBwZW5kTm9kZShQYXNz
UmVmUHRyPE5vZGU+LCBQYXNzUmVmUHRyPEVsZW1lbnQ+IHBhcmVudCk7CiAgICAgdm9pZCBhcHBs
eUNvbW1hbmRUb0NvbXBvc2l0ZShQYXNzUmVmUHRyPEVkaXRDb21tYW5kPik7Ci0gICAgdm9pZCBh
cHBseVN0eWxlKENTU1N0eWxlRGVjbGFyYXRpb24qLCBFZGl0QWN0aW9uID0gRWRpdEFjdGlvbkNo
YW5nZUF0dHJpYnV0ZXMpOwotICAgIHZvaWQgYXBwbHlTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9u
KiwgY29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQb3NpdGlvbiYgZW5kLCBFZGl0QWN0aW9u
ID0gRWRpdEFjdGlvbkNoYW5nZUF0dHJpYnV0ZXMpOworICAgIHZvaWQgYXBwbHlTdHlsZShjb25z
dCBFZGl0aW5nU3R5bGUqLCBFZGl0QWN0aW9uID0gRWRpdEFjdGlvbkNoYW5nZUF0dHJpYnV0ZXMp
OworICAgIHZvaWQgYXBwbHlTdHlsZShjb25zdCBFZGl0aW5nU3R5bGUqLCBjb25zdCBQb3NpdGlv
biYgc3RhcnQsIGNvbnN0IFBvc2l0aW9uJiBlbmQsIEVkaXRBY3Rpb24gPSBFZGl0QWN0aW9uQ2hh
bmdlQXR0cmlidXRlcyk7CiAgICAgdm9pZCBhcHBseVN0eWxlZEVsZW1lbnQoUGFzc1JlZlB0cjxF
bGVtZW50Pik7CiAgICAgdm9pZCByZW1vdmVTdHlsZWRFbGVtZW50KFBhc3NSZWZQdHI8RWxlbWVu
dD4pOwogICAgIHZvaWQgZGVsZXRlU2VsZWN0aW9uKGJvb2wgc21hcnREZWxldGUgPSBmYWxzZSwg
Ym9vbCBtZXJnZUJsb2Nrc0FmdGVyRGVsZXRlID0gdHJ1ZSwgYm9vbCByZXBsYWNlID0gZmFsc2Us
IGJvb2wgZXhwYW5kRm9yU3BlY2lhbEVsZW1lbnRzID0gdHJ1ZSk7CkluZGV4OiBXZWJDb3JlL2Vk
aXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9l
ZGl0aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCShyZXZpc2lvbiA3MjU3NikKKysrIFdl
YkNvcmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtNjkwLDcgKzY5MCw3IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6Y2FsY3VsYXRl
VHkKICAgICAgICAgLy8gdGhlbiBtb3ZlIGl0IGJhY2sgKHdoaWNoIHdpbGwgY2xlYXIgdHlwaW5n
IHN0eWxlKS4KIAogICAgICAgICBzZXRFbmRpbmdTZWxlY3Rpb24odmlzaWJsZUVuZCk7Ci0gICAg
ICAgIGFwcGx5U3R5bGUobV90eXBpbmdTdHlsZS0+c3R5bGUoKSwgRWRpdEFjdGlvblVuc3BlY2lm
aWVkKTsKKyAgICAgICAgYXBwbHlTdHlsZShtX3R5cGluZ1N0eWxlLmdldCgpLCBFZGl0QWN0aW9u
VW5zcGVjaWZpZWQpOwogICAgICAgICAvLyBhcHBseVN0eWxlIGNhbiBkZXN0cm95IHRoZSBwbGFj
ZWhvbGRlciB0aGF0IHdhcyBhdCBtX2VuZGluZ1Bvc2l0aW9uIGlmIGl0IG5lZWRzIHRvIAogICAg
ICAgICAvLyBtb3ZlIGl0LCBidXQgaXQgd2lsbCBzZXQgYW4gZW5kaW5nU2VsZWN0aW9uKCkgYXQg
W21vdmVkUGxhY2Vob2xkZXIsIDBdIGlmIGl0IGRvZXMgc28uCiAgICAgICAgIG1fZW5kaW5nUG9z
aXRpb24gPSBlbmRpbmdTZWxlY3Rpb24oKS5zdGFydCgpOwpJbmRleDogV2ViQ29yZS9lZGl0aW5n
L0VkaXRDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvRWRpdENvbW1h
bmQuY3BwCShyZXZpc2lvbiA3MjU3NikKKysrIFdlYkNvcmUvZWRpdGluZy9FZGl0Q29tbWFuZC5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI3LDggKzI3LDYgQEAKICNpbmNsdWRlICJFZGl0Q29tbWFu
ZC5oIgogCiAjaW5jbHVkZSAiQ29tcG9zaXRlRWRpdENvbW1hbmQuaCIKLSNpbmNsdWRlICJDU1ND
b21wdXRlZFN0eWxlRGVjbGFyYXRpb24uaCIKLSNpbmNsdWRlICJDU1NNdXRhYmxlU3R5bGVEZWNs
YXJhdGlvbi5oIgogI2luY2x1ZGUgIkRlbGV0ZUJ1dHRvbkNvbnRyb2xsZXIuaCIKICNpbmNsdWRl
ICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkVkaXRvci5oIgpJbmRleDogV2ViQ29yZS9lZGl0aW5n
L0VkaXRDb21tYW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL0VkaXRDb21tYW5k
LmgJKHJldmlzaW9uIDcyNTc2KQorKysgV2ViQ29yZS9lZGl0aW5nL0VkaXRDb21tYW5kLmgJKHdv
cmtpbmcgY29weSkKQEAgLTMzLDcgKzMzLDYgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xh
c3MgQ29tcG9zaXRlRWRpdENvbW1hbmQ7Ci1jbGFzcyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlv
bjsKIAogY2xhc3MgRWRpdENvbW1hbmQgOiBwdWJsaWMgUmVmQ291bnRlZDxFZGl0Q29tbWFuZD4g
ewogcHVibGljOgpJbmRleDogV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5jcHAJKHJldmlzaW9uIDcyNTc2
KQorKysgV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE3NywxMiArMTc3LDQyIEBAIHZvaWQgRWRpdGluZ1N0eWxlOjpzZXRTdHlsZShQYXNzUmVmUHRy
PEMKICAgICBtX3Nob3VsZFVzZUZpeGVkRGVmYXVsdEZvbnRTaXplID0gZmFsc2U7CiB9CiAKK3Zv
aWQgRWRpdGluZ1N0eWxlOjpvdmVycmlkZVdpdGgoY29uc3QgQ1NTTXV0YWJsZVN0eWxlRGVjbGFy
YXRpb24qIHN0eWxlKQoreworICAgIGlmICghc3R5bGUgfHwgIXN0eWxlLT5sZW5ndGgoKSkKKyAg
ICAgICAgcmV0dXJuOworICAgIGlmICghbV9tdXRhYmxlU3R5bGUpCisgICAgICAgIG1fbXV0YWJs
ZVN0eWxlID0gQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmNyZWF0ZSgpOworICAgIG1fbXV0
YWJsZVN0eWxlLT5tZXJnZShzdHlsZSk7Cit9CisKIHZvaWQgRWRpdGluZ1N0eWxlOjpjbGVhcigp
CiB7CiAgICAgbV9tdXRhYmxlU3R5bGUuY2xlYXIoKTsKICAgICBtX3Nob3VsZFVzZUZpeGVkRGVm
YXVsdEZvbnRTaXplID0gZmFsc2U7CiB9CiAKK1Bhc3NSZWZQdHI8RWRpdGluZ1N0eWxlPiBFZGl0
aW5nU3R5bGU6OmNvcHkoKSBjb25zdAoreworICAgIFJlZlB0cjxFZGl0aW5nU3R5bGU+IGNvcHkg
PSBFZGl0aW5nU3R5bGU6OmNyZWF0ZSgpOworICAgIGlmIChtX211dGFibGVTdHlsZSkKKyAgICAg
ICAgY29weS0+bV9tdXRhYmxlU3R5bGUgPSBtX211dGFibGVTdHlsZS0+Y29weSgpOworICAgIGNv
cHktPm1fc2hvdWxkVXNlRml4ZWREZWZhdWx0Rm9udFNpemUgPSBtX3Nob3VsZFVzZUZpeGVkRGVm
YXVsdEZvbnRTaXplOworICAgIHJldHVybiBjb3B5OworfQorCitQYXNzUmVmUHRyPEVkaXRpbmdT
dHlsZT4gRWRpdGluZ1N0eWxlOjpleHRyYWN0QW5kUmVtb3ZlQmxvY2tQcm9wZXJ0aWVzKCkKK3sK
KyAgICBSZWZQdHI8RWRpdGluZ1N0eWxlPiBibG9ja1Byb3BlcnRpZXMgPSBFZGl0aW5nU3R5bGU6
OmNyZWF0ZSgpOworICAgIGlmICghbV9tdXRhYmxlU3R5bGUpCisgICAgICAgIHJldHVybiBibG9j
a1Byb3BlcnRpZXM7CisKKyAgICBibG9ja1Byb3BlcnRpZXMtPm1fbXV0YWJsZVN0eWxlID0gbV9t
dXRhYmxlU3R5bGUtPmNvcHlCbG9ja1Byb3BlcnRpZXMoKTsKKyAgICBtX211dGFibGVTdHlsZS0+
cmVtb3ZlQmxvY2tQcm9wZXJ0aWVzKCk7CisKKyAgICByZXR1cm4gYmxvY2tQcm9wZXJ0aWVzOwor
fQorCiB2b2lkIEVkaXRpbmdTdHlsZTo6cmVtb3ZlQmxvY2tQcm9wZXJ0aWVzKCkKIHsKICAgICBp
ZiAoIW1fbXV0YWJsZVN0eWxlKQpJbmRleDogV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5o
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuaAkocmV2aXNpb24g
NzI1NzYpCisrKyBXZWJDb3JlL2VkaXRpbmcvRWRpdGluZ1N0eWxlLmgJKHdvcmtpbmcgY29weSkK
QEAgLTMxLDcgKzMxLDYgQEAKICNpZm5kZWYgRWRpdGluZ1N0eWxlX2gKICNkZWZpbmUgRWRpdGlu
Z1N0eWxlX2gKIAotI2luY2x1ZGUgIkNTU011dGFibGVTdHlsZURlY2xhcmF0aW9uLmgiCiAjaW5j
bHVkZSAiRG9jdW1lbnQuaCIKICNpbmNsdWRlICJQb3NpdGlvbi5oIgogCkBAIC0zOSw2ICszOCw3
IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ1NTU3R5bGVEZWNsYXJhdGlvbjsKIGNs
YXNzIENTU0NvbXB1dGVkU3R5bGVEZWNsYXJhdGlvbjsKK2NsYXNzIENTU011dGFibGVTdHlsZURl
Y2xhcmF0aW9uOwogCiBlbnVtIFdyaXRpbmdEaXJlY3Rpb24geyBOYXR1cmFsV3JpdGluZ0RpcmVj
dGlvbiwgTGVmdFRvUmlnaHRXcml0aW5nRGlyZWN0aW9uLCBSaWdodFRvTGVmdFdyaXRpbmdEaXJl
Y3Rpb24gfTsKIApAQCAtNzEsNyArNzEsMTAgQEAgcHVibGljOgogICAgIGJvb2wgdGV4dERpcmVj
dGlvbihXcml0aW5nRGlyZWN0aW9uJikgY29uc3Q7CiAgICAgYm9vbCBpc0VtcHR5KCkgY29uc3Q7
CiAgICAgdm9pZCBzZXRTdHlsZShQYXNzUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9u
Pik7CisgICAgdm9pZCBvdmVycmlkZVdpdGgoY29uc3QgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRp
b24qIHN0eWxlKTsKICAgICB2b2lkIGNsZWFyKCk7CisgICAgUGFzc1JlZlB0cjxFZGl0aW5nU3R5
bGU+IGNvcHkoKSBjb25zdDsKKyAgICBQYXNzUmVmUHRyPEVkaXRpbmdTdHlsZT4gZXh0cmFjdEFu
ZFJlbW92ZUJsb2NrUHJvcGVydGllcygpOwogICAgIHZvaWQgcmVtb3ZlQmxvY2tQcm9wZXJ0aWVz
KCk7CiAgICAgdm9pZCByZW1vdmVTdHlsZUFkZGVkQnlOb2RlKE5vZGUqIG5vZGUpOwogICAgIHZv
aWQgcmVtb3ZlU3R5bGVDb25mbGljdGluZ1dpdGhTdHlsZU9mTm9kZShOb2RlKiBub2RlKTsKSW5k
ZXg6IFdlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRp
dGluZy9FZGl0b3IuY3BwCShyZXZpc2lvbiA3MjU3NikKKysrIFdlYkNvcmUvZWRpdGluZy9FZGl0
b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NTUsNyArODU1LDcgQEAgdm9pZCBFZGl0b3I6OmFw
cGx5U3R5bGUoQ1NTU3R5bGVEZWNsYXJhdAogICAgICAgICBicmVhazsKICAgICBjYXNlIFZpc2li
bGVTZWxlY3Rpb246OlJhbmdlU2VsZWN0aW9uOgogICAgICAgICBpZiAoc3R5bGUpCi0gICAgICAg
ICAgICBhcHBseUNvbW1hbmQoQXBwbHlTdHlsZUNvbW1hbmQ6OmNyZWF0ZShtX2ZyYW1lLT5kb2N1
bWVudCgpLCBzdHlsZSwgZWRpdGluZ0FjdGlvbikpOworICAgICAgICAgICAgYXBwbHlDb21tYW5k
KEFwcGx5U3R5bGVDb21tYW5kOjpjcmVhdGUobV9mcmFtZS0+ZG9jdW1lbnQoKSwgRWRpdGluZ1N0
eWxlOjpjcmVhdGUoc3R5bGUpLmdldCgpLCBlZGl0aW5nQWN0aW9uKSk7CiAgICAgICAgIGJyZWFr
OwogICAgIH0KIH0KQEAgLTg3NCw3ICs4NzQsNyBAQCB2b2lkIEVkaXRvcjo6YXBwbHlQYXJhZ3Jh
cGhTdHlsZShDU1NTdHlsCiAgICAgY2FzZSBWaXNpYmxlU2VsZWN0aW9uOjpDYXJldFNlbGVjdGlv
bjoKICAgICBjYXNlIFZpc2libGVTZWxlY3Rpb246OlJhbmdlU2VsZWN0aW9uOgogICAgICAgICBp
ZiAoc3R5bGUpCi0gICAgICAgICAgICBhcHBseUNvbW1hbmQoQXBwbHlTdHlsZUNvbW1hbmQ6OmNy
ZWF0ZShtX2ZyYW1lLT5kb2N1bWVudCgpLCBzdHlsZSwgZWRpdGluZ0FjdGlvbiwgQXBwbHlTdHls
ZUNvbW1hbmQ6OkZvcmNlQmxvY2tQcm9wZXJ0aWVzKSk7CisgICAgICAgICAgICBhcHBseUNvbW1h
bmQoQXBwbHlTdHlsZUNvbW1hbmQ6OmNyZWF0ZShtX2ZyYW1lLT5kb2N1bWVudCgpLCBFZGl0aW5n
U3R5bGU6OmNyZWF0ZShzdHlsZSkuZ2V0KCksIGVkaXRpbmdBY3Rpb24sIEFwcGx5U3R5bGVDb21t
YW5kOjpGb3JjZUJsb2NrUHJvcGVydGllcykpOwogICAgICAgICBicmVhazsKICAgICB9CiB9CkBA
IC0zMDEzLDQwICszMDEzLDIyIEBAIHZvaWQgRWRpdG9yOjpjb21wdXRlQW5kU2V0VHlwaW5nU3R5
bGUoQ1MKICAgICB9CiAKICAgICAvLyBDYWxjdWxhdGUgdGhlIGN1cnJlbnQgdHlwaW5nIHN0eWxl
LgotICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gbXV0YWJsZVN0eWxlID0g
c3R5bGUtPm1ha2VNdXRhYmxlKCk7Ci0gICAgUmVmUHRyPEVkaXRpbmdTdHlsZT4gdHlwaW5nU3R5
bGUgPSBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+dHlwaW5nU3R5bGUoKTsKLSAgICBpZiAodHlwaW5n
U3R5bGUgJiYgdHlwaW5nU3R5bGUtPnN0eWxlKCkpIHsKLSAgICAgICAgdHlwaW5nU3R5bGUtPnN0
eWxlKCktPm1lcmdlKG11dGFibGVTdHlsZS5nZXQoKSk7Ci0gICAgICAgIG11dGFibGVTdHlsZSA9
IHR5cGluZ1N0eWxlLT5zdHlsZSgpOwotICAgIH0KLQotICAgIFJlZlB0cjxDU1NWYWx1ZT4gdW5p
Y29kZUJpZGk7Ci0gICAgUmVmUHRyPENTU1ZhbHVlPiBkaXJlY3Rpb247Ci0gICAgaWYgKGVkaXRp
bmdBY3Rpb24gPT0gRWRpdEFjdGlvblNldFdyaXRpbmdEaXJlY3Rpb24pIHsKLSAgICAgICAgdW5p
Y29kZUJpZGkgPSBtdXRhYmxlU3R5bGUtPmdldFByb3BlcnR5Q1NTVmFsdWUoQ1NTUHJvcGVydHlV
bmljb2RlQmlkaSk7Ci0gICAgICAgIGRpcmVjdGlvbiA9IG11dGFibGVTdHlsZS0+Z2V0UHJvcGVy
dHlDU1NWYWx1ZShDU1NQcm9wZXJ0eURpcmVjdGlvbik7Ci0gICAgfQotCi0gICAgTm9kZSogbm9k
ZSA9IG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKS52aXNpYmxlU3RhcnQoKS5kZWVw
RXF1aXZhbGVudCgpLm5vZGUoKTsKLSAgICBjb21wdXRlZFN0eWxlKG5vZGUpLT5kaWZmKG11dGFi
bGVTdHlsZS5nZXQoKSk7Ci0KLSAgICBpZiAoZWRpdGluZ0FjdGlvbiA9PSBFZGl0QWN0aW9uU2V0
V3JpdGluZ0RpcmVjdGlvbiAmJiB1bmljb2RlQmlkaSkgewotICAgICAgICBBU1NFUlQodW5pY29k
ZUJpZGktPmlzUHJpbWl0aXZlVmFsdWUoKSk7Ci0gICAgICAgIG11dGFibGVTdHlsZS0+c2V0UHJv
cGVydHkoQ1NTUHJvcGVydHlVbmljb2RlQmlkaSwgc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFs
dWUqPih1bmljb2RlQmlkaS5nZXQoKSktPmdldElkZW50KCkpOwotICAgICAgICBpZiAoZGlyZWN0
aW9uKSB7Ci0gICAgICAgICAgICBBU1NFUlQoZGlyZWN0aW9uLT5pc1ByaW1pdGl2ZVZhbHVlKCkp
OwotICAgICAgICAgICAgbXV0YWJsZVN0eWxlLT5zZXRQcm9wZXJ0eShDU1NQcm9wZXJ0eURpcmVj
dGlvbiwgc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPihkaXJlY3Rpb24uZ2V0KCkpLT5n
ZXRJZGVudCgpKTsKLSAgICAgICAgfQotICAgIH0KKyAgICBSZWZQdHI8RWRpdGluZ1N0eWxlPiB0
eXBpbmdTdHlsZTsKKyAgICBpZiAobV9mcmFtZS0+c2VsZWN0aW9uKCktPnR5cGluZ1N0eWxlKCkp
IHsKKyAgICAgICAgdHlwaW5nU3R5bGUgPSBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+dHlwaW5nU3R5
bGUoKS0+Y29weSgpOworICAgICAgICB0eXBpbmdTdHlsZS0+b3ZlcnJpZGVXaXRoKHN0eWxlLT5t
YWtlTXV0YWJsZSgpLmdldCgpKTsKKyAgICB9IGVsc2UKKyAgICAgICAgdHlwaW5nU3R5bGUgPSBF
ZGl0aW5nU3R5bGU6OmNyZWF0ZShzdHlsZSk7CisKKyAgICB0eXBpbmdTdHlsZS0+cHJlcGFyZVRv
QXBwbHlBdChtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2VsZWN0aW9uKCkudmlzaWJsZVN0YXJ0KCku
ZGVlcEVxdWl2YWxlbnQoKSwgRWRpdGluZ1N0eWxlOjpQcmVzZXJ2ZVdyaXRpbmdEaXJlY3Rpb24p
OwogCiAgICAgLy8gSGFuZGxlIGJsb2NrIHN0eWxlcywgc3Vic3RyYWN0aW5nIHRoZXNlIGZyb20g
dGhlIHR5cGluZyBzdHlsZS4KLSAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+
IGJsb2NrU3R5bGUgPSBtdXRhYmxlU3R5bGUtPmNvcHlCbG9ja1Byb3BlcnRpZXMoKTsKLSAgICBi
bG9ja1N0eWxlLT5kaWZmKG11dGFibGVTdHlsZS5nZXQoKSk7Ci0gICAgaWYgKGJsb2NrU3R5bGUt
Pmxlbmd0aCgpID4gMCkKKyAgICBSZWZQdHI8RWRpdGluZ1N0eWxlPiBibG9ja1N0eWxlID0gdHlw
aW5nU3R5bGUtPmV4dHJhY3RBbmRSZW1vdmVCbG9ja1Byb3BlcnRpZXMoKTsKKyAgICBpZiAoIWJs
b2NrU3R5bGUtPmlzRW1wdHkoKSkKICAgICAgICAgYXBwbHlDb21tYW5kKEFwcGx5U3R5bGVDb21t
YW5kOjpjcmVhdGUobV9mcmFtZS0+ZG9jdW1lbnQoKSwgYmxvY2tTdHlsZS5nZXQoKSwgZWRpdGlu
Z0FjdGlvbikpOwogCiAgICAgLy8gU2V0IHRoZSByZW1haW5pbmcgc3R5bGUgYXMgdGhlIHR5cGlu
ZyBzdHlsZS4KLSAgICBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2V0VHlwaW5nU3R5bGUoRWRpdGlu
Z1N0eWxlOjpjcmVhdGUobXV0YWJsZVN0eWxlLmdldCgpKSk7CisgICAgbV9mcmFtZS0+c2VsZWN0
aW9uKCktPnNldFR5cGluZ1N0eWxlKHR5cGluZ1N0eWxlKTsKIH0KIAogUGFzc1JlZlB0cjxDU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gRWRpdG9yOjpzZWxlY3Rpb25Db21wdXRlZFN0eWxlKGJv
b2wmIHNob3VsZFVzZUZpeGVkRm9udERlZmF1bHRTaXplKSBjb25zdApJbmRleDogV2ViQ29yZS9l
ZGl0aW5nL0luc2VydExpbmVCcmVha0NvbW1hbmQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUv
ZWRpdGluZy9JbnNlcnRMaW5lQnJlYWtDb21tYW5kLmNwcAkocmV2aXNpb24gNzI1NzYpCisrKyBX
ZWJDb3JlL2VkaXRpbmcvSW5zZXJ0TGluZUJyZWFrQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE3Miw3ICsxNzIsNyBAQCB2b2lkIEluc2VydExpbmVCcmVha0NvbW1hbmQ6OmRvQXBwbHko
KQogICAgICAgICAvLyBsZWF2ZXMgYW5kIHRoZW4gY29tZXMgYmFjaywgbmV3IGlucHV0IHdpbGwg
aGF2ZSB0aGUgcmlnaHQgc3R5bGUuCiAgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGRuJ3QgYWx3
YXlzIGFwcGx5IHRoZSB0eXBpbmcgc3R5bGUgdG8gdGhlIGxpbmUgYnJlYWsgaGVyZSwKICAgICAg
ICAgLy8gc2VlIDxyZGFyOi8vcHJvYmxlbS81Nzk0NDYyPi4KLSAgICAgICAgYXBwbHlTdHlsZSh0
eXBpbmdTdHlsZS0+c3R5bGUoKSwgZmlyc3REZWVwRWRpdGluZ1Bvc2l0aW9uRm9yTm9kZShub2Rl
VG9JbnNlcnQuZ2V0KCkpLCBsYXN0RGVlcEVkaXRpbmdQb3NpdGlvbkZvck5vZGUobm9kZVRvSW5z
ZXJ0LmdldCgpKSk7CisgICAgICAgIGFwcGx5U3R5bGUodHlwaW5nU3R5bGUuZ2V0KCksIGZpcnN0
RGVlcEVkaXRpbmdQb3NpdGlvbkZvck5vZGUobm9kZVRvSW5zZXJ0LmdldCgpKSwgbGFzdERlZXBF
ZGl0aW5nUG9zaXRpb25Gb3JOb2RlKG5vZGVUb0luc2VydC5nZXQoKSkpOwogICAgICAgICAvLyBF
dmVuIHRob3VnaCB0aGlzIGFwcGx5U3R5bGUgb3BlcmF0ZXMgb24gYSBSYW5nZSwgaXQgc3RpbGwg
c2V0cyBhbiBlbmRpbmdTZWxlY3Rpb24oKS4KICAgICAgICAgLy8gSXQgdHJpZXMgdG8gc2V0IGEg
VmlzaWJsZVNlbGVjdGlvbiBhcm91bmQgdGhlIGNvbnRlbnQgaXQgb3BlcmF0ZWQgb24uIFNvLCB0
aGF0IFZpc2libGVTZWxlY3Rpb24KICAgICAgICAgLy8gd2lsbCBlaXRoZXIgKGEpIHNlbGVjdCB0
aGUgbGluZSBicmVhayB3ZSBpbnNlcnRlZCwgb3IgaXQgd2lsbCAoYikgYmUgYSBjYXJldCBqdXN0
IApJbmRleDogV2ViQ29yZS9lZGl0aW5nL0luc2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1hbmQu
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9JbnNlcnRQYXJhZ3JhcGhTZXBhcmF0
b3JDb21tYW5kLmNwcAkocmV2aXNpb24gNzI1NzYpCisrKyBXZWJDb3JlL2VkaXRpbmcvSW5zZXJ0
UGFyYWdyYXBoU2VwYXJhdG9yQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTk4LDcgKzk4
LDcgQEAgdm9pZCBJbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5kOjphcAogCiAgICAgbV9z
dHlsZS0+cHJlcGFyZVRvQXBwbHlBdChlbmRpbmdTZWxlY3Rpb24oKS5zdGFydCgpKTsKICAgICBp
ZiAoIW1fc3R5bGUtPmlzRW1wdHkoKSkKLSAgICAgICAgYXBwbHlTdHlsZShtX3N0eWxlLT5zdHls
ZSgpKTsKKyAgICAgICAgYXBwbHlTdHlsZShtX3N0eWxlLmdldCgpKTsKIH0KIAogYm9vbCBJbnNl
cnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5kOjpzaG91bGRVc2VEZWZhdWx0UGFyYWdyYXBoRWxl
bWVudChOb2RlKiBlbmNsb3NpbmdCbG9jaykgY29uc3QKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9J
bnNlcnRUZXh0Q29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL0luc2Vy
dFRleHRDb21tYW5kLmNwcAkocmV2aXNpb24gNzI1NzYpCisrKyBXZWJDb3JlL2VkaXRpbmcvSW5z
ZXJ0VGV4dENvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTMsNyArMTkzLDcgQEAgdm9p
ZCBJbnNlcnRUZXh0Q29tbWFuZDo6aW5wdXQoY29uc3QgU3RyaQogICAgIGlmIChSZWZQdHI8RWRp
dGluZ1N0eWxlPiB0eXBpbmdTdHlsZSA9IGRvY3VtZW50KCktPmZyYW1lKCktPnNlbGVjdGlvbigp
LT50eXBpbmdTdHlsZSgpKSB7CiAgICAgICAgIHR5cGluZ1N0eWxlLT5wcmVwYXJlVG9BcHBseUF0
KGVuZFBvc2l0aW9uLCBFZGl0aW5nU3R5bGU6OlByZXNlcnZlV3JpdGluZ0RpcmVjdGlvbik7CiAg
ICAgICAgIGlmICghdHlwaW5nU3R5bGUtPmlzRW1wdHkoKSkKLSAgICAgICAgICAgIGFwcGx5U3R5
bGUodHlwaW5nU3R5bGUtPnN0eWxlKCkpOworICAgICAgICAgICAgYXBwbHlTdHlsZSh0eXBpbmdT
dHlsZS5nZXQoKSk7CiAgICAgfQogCiAgICAgaWYgKCFzZWxlY3RJbnNlcnRlZFRleHQpCkluZGV4
OiBXZWJDb3JlL2VkaXRpbmcvUmVtb3ZlRm9ybWF0Q29tbWFuZC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9lZGl0aW5nL1JlbW92ZUZvcm1hdENvbW1hbmQuY3BwCShyZXZpc2lvbiA3MjU3NikK
KysrIFdlYkNvcmUvZWRpdGluZy9SZW1vdmVGb3JtYXRDb21tYW5kLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtODcsNyArODcsNyBAQCB2b2lkIFJlbW92ZUZvcm1hdENvbW1hbmQ6OmRvQXBwbHkoKQog
ICAgIE5vZGUqIHJvb3QgPSBmcmFtZS0+c2VsZWN0aW9uKCktPnJvb3RFZGl0YWJsZUVsZW1lbnQo
KTsKICAgICBSZWZQdHI8RWRpdGluZ1N0eWxlPiBkZWZhdWx0U3R5bGUgPSBFZGl0aW5nU3R5bGU6
OmNyZWF0ZShyb290KTsKIAotICAgIGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKEFwcGx5U3R5bGVD
b21tYW5kOjpjcmVhdGUoZG9jdW1lbnQoKSwgZGVmYXVsdFN0eWxlLT5zdHlsZSgpLCBpc0VsZW1l
bnRGb3JSZW1vdmVGb3JtYXRDb21tYW5kLCBlZGl0aW5nQWN0aW9uKCkpKTsKKyAgICBhcHBseUNv
bW1hbmRUb0NvbXBvc2l0ZShBcHBseVN0eWxlQ29tbWFuZDo6Y3JlYXRlKGRvY3VtZW50KCksIGRl
ZmF1bHRTdHlsZS5nZXQoKSwgaXNFbGVtZW50Rm9yUmVtb3ZlRm9ybWF0Q29tbWFuZCwgZWRpdGlu
Z0FjdGlvbigpKSk7CiB9CiAKIH0KSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0
aW9uQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL1JlcGxhY2VTZWxl
Y3Rpb25Db21tYW5kLmNwcAkocmV2aXNpb24gNzI1NzYpCisrKyBXZWJDb3JlL2VkaXRpbmcvUmVw
bGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMTQzLDcgKzExNDMs
NyBAQCB2b2lkIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpjb21wbGV0ZUhUCiAKICAgICAgICAg
aWYgKG1fbWF0Y2hTdHlsZSkgewogICAgICAgICAgICAgQVNTRVJUKG1faW5zZXJ0aW9uU3R5bGUp
OwotICAgICAgICAgICAgYXBwbHlTdHlsZShtX2luc2VydGlvblN0eWxlLT5zdHlsZSgpLCBzdGFy
dCwgZW5kKTsKKyAgICAgICAgICAgIGFwcGx5U3R5bGUobV9pbnNlcnRpb25TdHlsZS5nZXQoKSwg
c3RhcnQsIGVuZCk7CiAgICAgICAgIH0gICAgCiAgICAgICAgIAogICAgICAgICBpZiAobGFzdFBv
c2l0aW9uVG9TZWxlY3QuaXNOb3ROdWxsKCkpCkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvU2VsZWN0
aW9uQ29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9TZWxlY3Rpb25D
b250cm9sbGVyLmgJKHJldmlzaW9uIDcyNTc2KQorKysgV2ViQ29yZS9lZGl0aW5nL1NlbGVjdGlv
bkNvbnRyb2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjYsNiArMjYsNyBAQAogI2lmbmRlZiBT
ZWxlY3Rpb25Db250cm9sbGVyX2gKICNkZWZpbmUgU2VsZWN0aW9uQ29udHJvbGxlcl9oCiAKKyNp
bmNsdWRlICJDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbi5oIgogI2luY2x1ZGUgIkVkaXRpbmdT
dHlsZS5oIgogI2luY2x1ZGUgIkludFJlY3QuaCIKICNpbmNsdWRlICJSYW5nZS5oIgpAQCAtMzcs
NyArMzgsNiBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBGcmFtZTsKLWNsYXNzIENT
U011dGFibGVTdHlsZURlY2xhcmF0aW9uOwogY2xhc3MgR3JhcGhpY3NDb250ZXh0OwogY2xhc3Mg
SFRNTEZvcm1FbGVtZW50OwogY2xhc3MgUmVuZGVyT2JqZWN0Owo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>75224</attachid>
            <date>2010-11-30 16:44:21 -0800</date>
            <delta_ts>2010-12-06 14:25:54 -0800</delta_ts>
            <desc>fixed per Tony&apos;s &amp; Darin&apos;s comments</desc>
            <filename>bug-49938-20101130164419.patch</filename>
            <type>text/plain</type>
            <size>31831</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA3Mjk2NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNTkgQEAKKzIwMTAtMTEtMzAgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5v
cmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQXBw
bHlTdHlsZUNvbW1hbmQgc2hvdWxkIHRha2UgRWRpdGluZ1N0eWxlIGluc3RlYWQgb2YgQ1NTU3R5
bGVEZWNsYXJhdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9NDk5MzgKKworICAgICAgICBNb2RpZmllZCBBcHBseVN0eWxlQ29tbWFuZDo6QXBwbHlT
dHlsZUNvbW1hbmQgYW5kIEFwcGx5U3R5bGVDb21tYW5kOjpjcmVhdGUgdG8gdGFrZSBFZGl0aW5n
U3R5bGUqCisgICAgICAgIGluc3RlYWQgb2YgQ1NTU3R5bGVEZWNsYXJhdGlvbiouIEFsc28gcmVw
bGFjZWQgbXVjaCBvZiBjb2RlIGluIEVkaXRvcjo6Y29tcHV0ZUFuZFNldFR5cGluZ1N0eWxlCisg
ICAgICAgIGJ5IGNhbGxzIHRvIEVkaXRpbmdTdHlsZSdzIG1lbWJlciBmdW5jdGlvbnMgYW5kIGV4
dHJhY3RlZCBFZGl0aW5nU3R5bGU6Om92ZXJyaWRlV2l0aCBhbmQKKyAgICAgICAgRWRpdGluZ1N0
eWxlOjpleHRyYWN0QW5kUmVtb3ZlQmxvY2tQcm9wZXJ0aWVzLgorCisgICAgICAgIE5vIG5ldyB0
ZXN0cyBhcmUgYWRkZWQgc2luY2UgdGhpcyBpcyBhIHJlZmFjdG9yaW5nLgorCisgICAgICAgICog
V2ViQ29yZS5leHAuaW46IEFkZGVkIFNlbGVjdGlvbkNvbnRyb2xsZXI6OmNvcHlUeXBpbmdTdHls
ZSBhbmQgRWRpdGluZ1N0eWxlOjp+RWRpdGluZ1N0eWxlLgorICAgICAgICAqIGNzcy9DU1NNdXRh
YmxlU3R5bGVEZWNsYXJhdGlvbi5jcHA6IE1hZGUgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24q
IGluIHRoZSBhcmd1bWVudCBsaXN0IGNvbnN0LgorICAgICAgICAoV2ViQ29yZTo6Q1NTTXV0YWJs
ZVN0eWxlRGVjbGFyYXRpb246Om1lcmdlKToKKyAgICAgICAgKiBjc3MvQ1NTTXV0YWJsZVN0eWxl
RGVjbGFyYXRpb24uaDoKKyAgICAgICAgKiBlZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjpBcHBseVN0eWxlQ29tbWFuZCk6
IFRha2VzIEVkaXRpbmdTdHlsZSogaW5zdGVhZCBvZiBDU1NTdHlsZURlY2xhcmF0aW9uKi4KKyAg
ICAgICAgKFdlYkNvcmU6OkFwcGx5U3R5bGVDb21tYW5kOjpkb0FwcGx5KTogVXNlcyBFZGl0aW5n
U3R5bGUuCisgICAgICAgICogZWRpdGluZy9BcHBseVN0eWxlQ29tbWFuZC5oOiBtX3N0eWxlIGlz
IG5vdyBhIHJlZi1wb2ludGVyIHRvIEVkaXRpbmdTdHlsZSBpbnN0ZWFkIG9mIENTU011dGFibGVT
dHlsZURlY2xhcmF0aW9uLgorICAgICAgICAoV2ViQ29yZTo6QXBwbHlTdHlsZUNvbW1hbmQ6OmNy
ZWF0ZSk6IFRha2VzIEVkaXRpbmdTdHlsZSogaW5zdGVhZCBvZiBDU1NTdHlsZURlY2xhcmF0aW9u
Ki4KKyAgICAgICAgKiBlZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNvbXBvc2l0ZUVkaXRDb21tYW5kOjphcHBseVN0eWxlKTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpDb21wb3NpdGVFZGl0Q29tbWFuZDo6bW92ZVBhcmFncmFwaHMpOiBDYWxs
cyBhcHBseVN0eWxlLgorICAgICAgICAoV2ViQ29yZTo6Q29tcG9zaXRlRWRpdENvbW1hbmQ6OmJy
ZWFrT3V0T2ZFbXB0eUxpc3RJdGVtKTogRGl0dG8uCisgICAgICAgICogZWRpdGluZy9Db21wb3Np
dGVFZGl0Q29tbWFuZC5oOgorICAgICAgICAqIGVkaXRpbmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFu
ZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEZWxldGVTZWxlY3Rpb25Db21tYW5kOjpjYWxjdWxh
dGVUeXBpbmdTdHlsZUFmdGVyRGVsZXRlKTogRGl0dG8uCisgICAgICAgICogZWRpdGluZy9FZGl0
Q29tbWFuZC5jcHA6CisgICAgICAgICogZWRpdGluZy9FZGl0Q29tbWFuZC5oOgorICAgICAgICAq
IGVkaXRpbmcvRWRpdGluZ1N0eWxlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRpbmdTdHls
ZTo6fkVkaXRpbmdTdHlsZSk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RWRpdGluZ1N0eWxl
OjpvdmVycmlkZVdpdGhTdHlsZSk6IEV4dHJhY3RlZCBmcm9tIEVkaXRvcjo6Y2FsY3VsYXRlVHlw
aW5nU3R5bGVBZnRlckRlbGV0ZS4KKyAgICAgICAgKFdlYkNvcmU6OkVkaXRpbmdTdHlsZTo6Y29w
eSk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RWRpdGluZ1N0eWxlOjpleHRyYWN0QW5kUmVt
b3ZlQmxvY2tQcm9wZXJ0aWVzKTogRXh0cmFjdGVkIGZyb20gRWRpdG9yOjpjYWxjdWxhdGVUeXBp
bmdTdHlsZUFmdGVyRGVsZXRlLgorICAgICAgICAqIGVkaXRpbmcvRWRpdGluZ1N0eWxlLmg6Cisg
ICAgICAgICogZWRpdGluZy9FZGl0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjph
cHBseVN0eWxlKTogQ2FsbHMgQXBwbHlTdHlsZUNvbW1hbmQ6OmNyZWF0ZS4KKyAgICAgICAgKFdl
YkNvcmU6OkVkaXRvcjo6YXBwbHlQYXJhZ3JhcGhTdHlsZSk6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6RWRpdG9yOjpjb21wdXRlQW5kU2V0VHlwaW5nU3R5bGUpOiBEaXR0by4KKyAgICAgICAg
KiBlZGl0aW5nL0luc2VydExpbmVCcmVha0NvbW1hbmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SW5zZXJ0TGluZUJyZWFrQ29tbWFuZDo6ZG9BcHBseSk6IENhbGxzIGFwcGx5U3R5bGUuCisgICAg
ICAgICogZWRpdGluZy9JbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5kLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6Okluc2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1hbmQ6OmFwcGx5U3R5bGVB
ZnRlckluc2VydGlvbik6IERpdHRvLgorICAgICAgICAqIGVkaXRpbmcvSW5zZXJ0VGV4dENvbW1h
bmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zZXJ0VGV4dENvbW1hbmQ6OmlucHV0KTogRGl0
dG8uCisgICAgICAgICogZWRpdGluZy9SZW1vdmVGb3JtYXRDb21tYW5kLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJlbW92ZUZvcm1hdENvbW1hbmQ6OmRvQXBwbHkpOiBDYWxscyBBcHBseVN0eWxl
Q29tbWFuZDo6Y3JlYXRlLgorICAgICAgICAqIGVkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1h
bmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OmNvbXBs
ZXRlSFRNTFJlcGxhY2VtZW50KTogQ2FsbHMgYXBwbHlTdHlsZS4KKyAgICAgICAgKiBlZGl0aW5n
L1NlbGVjdGlvbkNvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U2VsZWN0aW9uQ29u
dHJvbGxlcjo6Y29weVR5cGluZ1N0eWxlKTogTW92ZWQgZnJvbSBTZWxlY3Rpb25Db250cm9sbGVy
LmgKKyAgICAgICAgKiBlZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuaDoKKwogMjAxMC0xMS0z
MCAgRGFuaWVsIEJhdGVzICA8ZGJhdGVzQHJpbS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkg
RGF2aWQgSHlhdHQuCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUuZXhwLmluCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFdlYkNvcmUvV2ViQ29yZS5leHAuaW4JKHJldmlzaW9uIDcyOTY3KQorKysgV2ViQ29yZS9XZWJD
b3JlLmV4cC5pbgkod29ya2luZyBjb3B5KQpAQCAtMjA5LDYgKzIwOSw3IEBAIF9fWk43V2ViQ29y
ZTExdG9Vc2VyU3BhY2VFUks3X05TUmVjdFA4TlMKIF9fWk43V2ViQ29yZTExd3JpdGVUb0ZpbGVF
aVBLY2kKIF9fWk43V2ViQ29yZTEyQ2hyb21lQ2xpZW50MjBwYWludEN1c3RvbVNjcm9sbGJhckVQ
TlNfMTVHcmFwaGljc0NvbnRleHRFUktOU185RmxvYXRSZWN0RU5TXzIwU2Nyb2xsYmFyQ29udHJv
bFNpemVFak5TXzEzU2Nyb2xsYmFyUGFydEViZmZqCiBfX1pON1dlYkNvcmUxMkNocm9tZUNsaWVu
dDIzcGFpbnRDdXN0b21TY3JvbGxDb3JuZXJFUE5TXzE1R3JhcGhpY3NDb250ZXh0RVJLTlNfOUZs
b2F0UmVjdEUKK19fWk43V2ViQ29yZTEyRWRpdGluZ1N0eWxlRDFFdgogX19aTjdXZWJDb3JlMTJF
dmVudEhhbmRsZXIxMG1vdXNlTW92ZWRFUDdOU0V2ZW50CiBfX1pON1dlYkNvcmUxMkV2ZW50SGFu
ZGxlcjEwbW91c2VNb3ZlZEVSS05TXzE4UGxhdGZvcm1Nb3VzZUV2ZW50RQogX19aTjdXZWJDb3Jl
MTJFdmVudEhhbmRsZXIxMHdoZWVsRXZlbnRFUDdOU0V2ZW50CkBAIC0xMDI3LDYgKzEwMjgsNyBA
QCBfX1pOSzdXZWJDb3JlMTlSZXNvdXJjZVJlcXVlc3RCYXNlMTVodHRwCiBfX1pOSzdXZWJDb3Jl
MTlSZXNvdXJjZVJlcXVlc3RCYXNlM3VybEV2CiBfX1pOSzdXZWJDb3JlMTlSZXNvdXJjZVJlcXVl
c3RCYXNlN2lzRW1wdHlFdgogX19aTks3V2ViQ29yZTE5U2VsZWN0aW9uQ29udHJvbGxlcjExY3Vy
cmVudEZvcm1FdgorX19aTks3V2ViQ29yZTE5U2VsZWN0aW9uQ29udHJvbGxlcjE1Y29weVR5cGlu
Z1N0eWxlRXYKIF9fWk5LN1dlYkNvcmUxOVNlbGVjdGlvbkNvbnRyb2xsZXIxN2lzSW5QYXNzd29y
ZEZpZWxkRXYKIF9fWk5LN1dlYkNvcmUxOVNlbGVjdGlvbkNvbnRyb2xsZXIxOGlzRm9jdXNlZEFu
ZEFjdGl2ZUV2CiBfX1pOSzdXZWJDb3JlMTlTZWxlY3Rpb25Db250cm9sbGVyMzFnZXRDbGlwcGVk
VmlzaWJsZVRleHRSZWN0YW5nbGVzRVJOM1dURjZWZWN0b3JJTlNfOUZsb2F0UmVjdEVMbTBFRUUK
SW5kZXg6IFdlYkNvcmUvY3NzL0NTU011dGFibGVTdHlsZURlY2xhcmF0aW9uLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBXZWJDb3JlL2Nzcy9DU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbi5jcHAJKHJldmlz
aW9uIDcyOTY3KQorKysgV2ViQ29yZS9jc3MvQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC03MDgsMTMgKzcwOCwxMyBAQCB2b2lkIENTU011dGFibGVTdHls
ZURlY2xhcmF0aW9uOjpzZXRDc3NUCiAgICAgc2V0TmVlZHNTdHlsZVJlY2FsYygpOwogfQogCi12
b2lkIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOjptZXJnZShDU1NNdXRhYmxlU3R5bGVEZWNs
YXJhdGlvbiogb3RoZXIsIGJvb2wgYXJnT3ZlcnJpZGVzT25Db25mbGljdCkKK3ZvaWQgQ1NTTXV0
YWJsZVN0eWxlRGVjbGFyYXRpb246Om1lcmdlKGNvbnN0IENTU011dGFibGVTdHlsZURlY2xhcmF0
aW9uKiBvdGhlciwgYm9vbCBhcmdPdmVycmlkZXNPbkNvbmZsaWN0KQogewogICAgIEFTU0VSVCgh
bV9pdGVyYXRvckNvdW50KTsKIAogICAgIHVuc2lnbmVkIHNpemUgPSBvdGhlci0+bV9wcm9wZXJ0
aWVzLnNpemUoKTsKICAgICBmb3IgKHVuc2lnbmVkIG4gPSAwOyBuIDwgc2l6ZTsgKytuKSB7Ci0g
ICAgICAgIENTU1Byb3BlcnR5JiB0b01lcmdlID0gb3RoZXItPm1fcHJvcGVydGllc1tuXTsKKyAg
ICAgICAgY29uc3QgQ1NTUHJvcGVydHkmIHRvTWVyZ2UgPSBvdGhlci0+bV9wcm9wZXJ0aWVzW25d
OwogICAgICAgICBDU1NQcm9wZXJ0eSogb2xkID0gZmluZFByb3BlcnR5V2l0aElkKHRvTWVyZ2Uu
aWQoKSk7CiAgICAgICAgIGlmIChvbGQpIHsKICAgICAgICAgICAgIGlmICghYXJnT3ZlcnJpZGVz
T25Db25mbGljdCAmJiBvbGQtPnZhbHVlKCkpCkluZGV4OiBXZWJDb3JlL2Nzcy9DU1NNdXRhYmxl
U3R5bGVEZWNsYXJhdGlvbi5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvY3NzL0NTU011dGFibGVT
dHlsZURlY2xhcmF0aW9uLmgJKHJldmlzaW9uIDcyOTY3KQorKysgV2ViQ29yZS9jc3MvQ1NTTXV0
YWJsZVN0eWxlRGVjbGFyYXRpb24uaAkod29ya2luZyBjb3B5KQpAQCAtMTI5LDcgKzEyOSw3IEBA
IHB1YmxpYzoKICAgICB2b2lkIHJlbW92ZUJsb2NrUHJvcGVydGllcygpOwogICAgIHZvaWQgcmVt
b3ZlUHJvcGVydGllc0luU2V0KGNvbnN0IGludCogc2V0LCB1bnNpZ25lZCBsZW5ndGgsIGJvb2wg
bm90aWZ5Q2hhbmdlZCA9IHRydWUpOwogCi0gICAgdm9pZCBtZXJnZShDU1NNdXRhYmxlU3R5bGVE
ZWNsYXJhdGlvbiosIGJvb2wgYXJnT3ZlcnJpZGVzT25Db25mbGljdCA9IHRydWUpOworICAgIHZv
aWQgbWVyZ2UoY29uc3QgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qLCBib29sIGFyZ092ZXJy
aWRlc09uQ29uZmxpY3QgPSB0cnVlKTsKIAogICAgIHZvaWQgc2V0U3RyaWN0UGFyc2luZyhib29s
IGIpIHsgbV9zdHJpY3RQYXJzaW5nID0gYjsgfQogICAgIGJvb2wgdXNlU3RyaWN0UGFyc2luZygp
IGNvbnN0IHsgcmV0dXJuIG1fc3RyaWN0UGFyc2luZzsgfQpJbmRleDogV2ViQ29yZS9lZGl0aW5n
L0FwcGx5U3R5bGVDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvQXBw
bHlTdHlsZUNvbW1hbmQuY3BwCShyZXZpc2lvbiA3Mjk2NykKKysrIFdlYkNvcmUvZWRpdGluZy9B
cHBseVN0eWxlQ29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAKICNp
bmNsdWRlICJDU1NTdHlsZVNlbGVjdG9yLmgiCiAjaW5jbHVkZSAiQ1NTVmFsdWVLZXl3b3Jkcy5o
IgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiRWRpdGluZ1N0eWxlLmgiCiAjaW5j
bHVkZSAiRWRpdG9yLmgiCiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJIVE1MRm9udEVs
ZW1lbnQuaCIKQEAgLTQyOSw5ICs0MzAsOSBAQCBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFy
YXRpb24+IGdldFByCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KIAotQXBwbHlTdHlsZUNvbW1hbmQ6
OkFwcGx5U3R5bGVDb21tYW5kKERvY3VtZW50KiBkb2N1bWVudCwgQ1NTU3R5bGVEZWNsYXJhdGlv
biogc3R5bGUsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlvbiwgRVByb3BlcnR5TGV2ZWwgcHJvcGVy
dHlMZXZlbCkKK0FwcGx5U3R5bGVDb21tYW5kOjpBcHBseVN0eWxlQ29tbWFuZChEb2N1bWVudCog
ZG9jdW1lbnQsIGNvbnN0IEVkaXRpbmdTdHlsZSogc3R5bGUsIEVkaXRBY3Rpb24gZWRpdGluZ0Fj
dGlvbiwgRVByb3BlcnR5TGV2ZWwgcHJvcGVydHlMZXZlbCkKICAgICA6IENvbXBvc2l0ZUVkaXRD
b21tYW5kKGRvY3VtZW50KQotICAgICwgbV9zdHlsZShzdHlsZS0+bWFrZU11dGFibGUoKSkKKyAg
ICAsIG1fc3R5bGUoc3R5bGUtPmNvcHkoKSkKICAgICAsIG1fZWRpdGluZ0FjdGlvbihlZGl0aW5n
QWN0aW9uKQogICAgICwgbV9wcm9wZXJ0eUxldmVsKHByb3BlcnR5TGV2ZWwpCiAgICAgLCBtX3N0
YXJ0KGVuZGluZ1NlbGVjdGlvbigpLnN0YXJ0KCkuZG93bnN0cmVhbSgpKQpAQCAtNDQzLDkgKzQ0
NCw5IEBAIEFwcGx5U3R5bGVDb21tYW5kOjpBcHBseVN0eWxlQ29tbWFuZChEb2MKIHsKIH0KIAot
QXBwbHlTdHlsZUNvbW1hbmQ6OkFwcGx5U3R5bGVDb21tYW5kKERvY3VtZW50KiBkb2N1bWVudCwg
Q1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUsIGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29uc3Qg
UG9zaXRpb24mIGVuZCwgRWRpdEFjdGlvbiBlZGl0aW5nQWN0aW9uLCBFUHJvcGVydHlMZXZlbCBw
cm9wZXJ0eUxldmVsKQorQXBwbHlTdHlsZUNvbW1hbmQ6OkFwcGx5U3R5bGVDb21tYW5kKERvY3Vt
ZW50KiBkb2N1bWVudCwgY29uc3QgRWRpdGluZ1N0eWxlKiBzdHlsZSwgY29uc3QgUG9zaXRpb24m
IHN0YXJ0LCBjb25zdCBQb3NpdGlvbiYgZW5kLCBFZGl0QWN0aW9uIGVkaXRpbmdBY3Rpb24sIEVQ
cm9wZXJ0eUxldmVsIHByb3BlcnR5TGV2ZWwpCiAgICAgOiBDb21wb3NpdGVFZGl0Q29tbWFuZChk
b2N1bWVudCkKLSAgICAsIG1fc3R5bGUoc3R5bGUtPm1ha2VNdXRhYmxlKCkpCisgICAgLCBtX3N0
eWxlKHN0eWxlLT5jb3B5KCkpCiAgICAgLCBtX2VkaXRpbmdBY3Rpb24oZWRpdGluZ0FjdGlvbikK
ICAgICAsIG1fcHJvcGVydHlMZXZlbChwcm9wZXJ0eUxldmVsKQogICAgICwgbV9zdGFydChzdGFy
dCkKQEAgLTQ1OSw3ICs0NjAsNyBAQCBBcHBseVN0eWxlQ29tbWFuZDo6QXBwbHlTdHlsZUNvbW1h
bmQoRG9jCiAKIEFwcGx5U3R5bGVDb21tYW5kOjpBcHBseVN0eWxlQ29tbWFuZChQYXNzUmVmUHRy
PEVsZW1lbnQ+IGVsZW1lbnQsIGJvb2wgcmVtb3ZlT25seSwgRWRpdEFjdGlvbiBlZGl0aW5nQWN0
aW9uKQogICAgIDogQ29tcG9zaXRlRWRpdENvbW1hbmQoZWxlbWVudC0+ZG9jdW1lbnQoKSkKLSAg
ICAsIG1fc3R5bGUoQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmNyZWF0ZSgpKQorICAgICwg
bV9zdHlsZShFZGl0aW5nU3R5bGU6OmNyZWF0ZSgpKQogICAgICwgbV9lZGl0aW5nQWN0aW9uKGVk
aXRpbmdBY3Rpb24pCiAgICAgLCBtX3Byb3BlcnR5TGV2ZWwoUHJvcGVydHlEZWZhdWx0KQogICAg
ICwgbV9zdGFydChlbmRpbmdTZWxlY3Rpb24oKS5zdGFydCgpLmRvd25zdHJlYW0oKSkKQEAgLTQ3
MSw5ICs0NzIsOSBAQCBBcHBseVN0eWxlQ29tbWFuZDo6QXBwbHlTdHlsZUNvbW1hbmQoUGFzCiB7
CiB9CiAKLUFwcGx5U3R5bGVDb21tYW5kOjpBcHBseVN0eWxlQ29tbWFuZChEb2N1bWVudCogZG9j
dW1lbnQsIENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlLCBJc0lubGluZUVsZW1lbnRUb1JlbW92
ZUZ1bmN0aW9uIGlzSW5saW5lRWxlbWVudFRvUmVtb3ZlRnVuY3Rpb24sIEVkaXRBY3Rpb24gZWRp
dGluZ0FjdGlvbikKK0FwcGx5U3R5bGVDb21tYW5kOjpBcHBseVN0eWxlQ29tbWFuZChEb2N1bWVu
dCogZG9jdW1lbnQsIGNvbnN0IEVkaXRpbmdTdHlsZSogc3R5bGUsIElzSW5saW5lRWxlbWVudFRv
UmVtb3ZlRnVuY3Rpb24gaXNJbmxpbmVFbGVtZW50VG9SZW1vdmVGdW5jdGlvbiwgRWRpdEFjdGlv
biBlZGl0aW5nQWN0aW9uKQogICAgIDogQ29tcG9zaXRlRWRpdENvbW1hbmQoZG9jdW1lbnQpCi0g
ICAgLCBtX3N0eWxlKHN0eWxlLT5tYWtlTXV0YWJsZSgpKQorICAgICwgbV9zdHlsZShzdHlsZS0+
Y29weSgpKQogICAgICwgbV9lZGl0aW5nQWN0aW9uKGVkaXRpbmdBY3Rpb24pCiAgICAgLCBtX3By
b3BlcnR5TGV2ZWwoUHJvcGVydHlEZWZhdWx0KQogICAgICwgbV9zdGFydChlbmRpbmdTZWxlY3Rp
b24oKS5zdGFydCgpLmRvd25zdHJlYW0oKSkKQEAgLTUxNiwyNSArNTE3LDIzIEBAIFBvc2l0aW9u
IEFwcGx5U3R5bGVDb21tYW5kOjplbmRQb3NpdGlvbigKIHZvaWQgQXBwbHlTdHlsZUNvbW1hbmQ6
OmRvQXBwbHkoKQogewogICAgIHN3aXRjaCAobV9wcm9wZXJ0eUxldmVsKSB7Ci0gICAgICAgIGNh
c2UgUHJvcGVydHlEZWZhdWx0OiB7Ci0gICAgICAgICAgICAvLyBhcHBseSB0aGUgYmxvY2stY2Vu
dHJpYyBwcm9wZXJ0aWVzIG9mIHRoZSBzdHlsZQotICAgICAgICAgICAgUmVmUHRyPENTU011dGFi
bGVTdHlsZURlY2xhcmF0aW9uPiBibG9ja1N0eWxlID0gbV9zdHlsZS0+Y29weUJsb2NrUHJvcGVy
dGllcygpOwotICAgICAgICAgICAgaWYgKGJsb2NrU3R5bGUtPmxlbmd0aCgpKQotICAgICAgICAg
ICAgICAgIGFwcGx5QmxvY2tTdHlsZShibG9ja1N0eWxlLmdldCgpKTsKLSAgICAgICAgICAgIC8v
IGFwcGx5IGFueSByZW1haW5pbmcgc3R5bGVzIHRvIHRoZSBpbmxpbmUgZWxlbWVudHMKLSAgICAg
ICAgICAgIC8vIE5PVEU6IGhvcGVmdWxseSwgdGhpcyBzdHJpbmcgY29tcGFyaXNvbiBpcyB0aGUg
c2FtZSBhcyBjaGVja2luZyBmb3IgYSBub24tbnVsbCBkaWZmCi0gICAgICAgICAgICBpZiAoYmxv
Y2tTdHlsZS0+bGVuZ3RoKCkgPCBtX3N0eWxlLT5sZW5ndGgoKSB8fCBtX3N0eWxlZElubGluZUVs
ZW1lbnQgfHwgbV9pc0lubGluZUVsZW1lbnRUb1JlbW92ZUZ1bmN0aW9uKSB7Ci0gICAgICAgICAg
ICAgICAgUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBpbmxpbmVTdHlsZSA9IG1f
c3R5bGUtPmNvcHkoKTsKLSAgICAgICAgICAgICAgICBhcHBseVJlbGF0aXZlRm9udFN0eWxlQ2hh
bmdlKGlubGluZVN0eWxlLmdldCgpKTsKLSAgICAgICAgICAgICAgICBibG9ja1N0eWxlLT5kaWZm
KGlubGluZVN0eWxlLmdldCgpKTsKLSAgICAgICAgICAgICAgICBhcHBseUlubGluZVN0eWxlKGlu
bGluZVN0eWxlLmdldCgpKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJyZWFrOworICAg
IGNhc2UgUHJvcGVydHlEZWZhdWx0OiB7CisgICAgICAgIC8vIEFwcGx5IHRoZSBibG9jay1jZW50
cmljIHByb3BlcnRpZXMgb2YgdGhlIHN0eWxlLgorICAgICAgICBSZWZQdHI8RWRpdGluZ1N0eWxl
PiBibG9ja1N0eWxlID0gbV9zdHlsZS0+ZXh0cmFjdEFuZFJlbW92ZUJsb2NrUHJvcGVydGllcygp
OworICAgICAgICBpZiAoIWJsb2NrU3R5bGUtPmlzRW1wdHkoKSkKKyAgICAgICAgICAgIGFwcGx5
QmxvY2tTdHlsZShibG9ja1N0eWxlLT5zdHlsZSgpKTsKKyAgICAgICAgLy8gQXBwbHkgYW55IHJl
bWFpbmluZyBzdHlsZXMgdG8gdGhlIGlubGluZSBlbGVtZW50cy4KKyAgICAgICAgaWYgKCFtX3N0
eWxlLT5pc0VtcHR5KCkgfHwgbV9zdHlsZWRJbmxpbmVFbGVtZW50IHx8IG1faXNJbmxpbmVFbGVt
ZW50VG9SZW1vdmVGdW5jdGlvbikgeworICAgICAgICAgICAgUmVmUHRyPENTU011dGFibGVTdHls
ZURlY2xhcmF0aW9uPiBzdHlsZSA9IG1fc3R5bGUtPnN0eWxlKCkgPyBtX3N0eWxlLT5zdHlsZSgp
IDogQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb246OmNyZWF0ZSgpOworICAgICAgICAgICAgYXBw
bHlSZWxhdGl2ZUZvbnRTdHlsZUNoYW5nZShzdHlsZS5nZXQoKSk7CisgICAgICAgICAgICBhcHBs
eUlubGluZVN0eWxlKHN0eWxlLmdldCgpKTsKICAgICAgICAgfQotICAgICAgICBjYXNlIEZvcmNl
QmxvY2tQcm9wZXJ0aWVzOgotICAgICAgICAgICAgLy8gRm9yY2UgYWxsIHByb3BlcnRpZXMgdG8g
YmUgYXBwbGllZCBhcyBibG9jayBzdHlsZXMuCi0gICAgICAgICAgICBhcHBseUJsb2NrU3R5bGUo
bV9zdHlsZS5nZXQoKSk7Ci0gICAgICAgICAgICBicmVhazsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorICAgIGNhc2UgRm9yY2VCbG9ja1Byb3BlcnRpZXM6CisgICAgICAgIC8vIEZvcmNlIGFsbCBw
cm9wZXJ0aWVzIHRvIGJlIGFwcGxpZWQgYXMgYmxvY2sgc3R5bGVzLgorICAgICAgICBhcHBseUJs
b2NrU3R5bGUobV9zdHlsZS0+c3R5bGUoKSk7CisgICAgICAgIGJyZWFrOwogICAgIH0KIH0KIApJ
bmRleDogV2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
V2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmgJKHJldmlzaW9uIDcyOTY3KQorKysg
V2ViQ29yZS9lZGl0aW5nL0FwcGx5U3R5bGVDb21tYW5kLmgJKHdvcmtpbmcgY29weSkKQEAgLTMy
LDYgKzMyLDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgQ1NTUHJpbWl0aXZlVmFs
dWU7CitjbGFzcyBFZGl0aW5nU3R5bGU7CiBjbGFzcyBIVE1MRWxlbWVudDsKIGNsYXNzIFN0eWxl
Q2hhbmdlOwogCkBAIC00NywxMSArNDgsMTEgQEAgcHVibGljOgogICAgIGVudW0gRUFkZFN0eWxl
ZEVsZW1lbnQgeyBBZGRTdHlsZWRFbGVtZW50LCBEb05vdEFkZFN0eWxlZEVsZW1lbnQgfTsKICAg
ICB0eXBlZGVmIGJvb2wgKCpJc0lubGluZUVsZW1lbnRUb1JlbW92ZUZ1bmN0aW9uKShjb25zdCBF
bGVtZW50Kik7CiAKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxBcHBseVN0eWxlQ29tbWFuZD4gY3Jl
YXRlKERvY3VtZW50KiBkb2N1bWVudCwgQ1NTU3R5bGVEZWNsYXJhdGlvbiogc3R5bGUsIEVkaXRB
Y3Rpb24gYWN0aW9uID0gRWRpdEFjdGlvbkNoYW5nZUF0dHJpYnV0ZXMsIEVQcm9wZXJ0eUxldmVs
IGxldmVsID0gUHJvcGVydHlEZWZhdWx0KQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEFwcGx5U3R5
bGVDb21tYW5kPiBjcmVhdGUoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBFZGl0aW5nU3R5bGUq
IHN0eWxlLCBFZGl0QWN0aW9uIGFjdGlvbiA9IEVkaXRBY3Rpb25DaGFuZ2VBdHRyaWJ1dGVzLCBF
UHJvcGVydHlMZXZlbCBsZXZlbCA9IFByb3BlcnR5RGVmYXVsdCkKICAgICB7CiAgICAgICAgIHJl
dHVybiBhZG9wdFJlZihuZXcgQXBwbHlTdHlsZUNvbW1hbmQoZG9jdW1lbnQsIHN0eWxlLCBhY3Rp
b24sIGxldmVsKSk7CiAgICAgfQotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEFwcGx5U3R5bGVDb21t
YW5kPiBjcmVhdGUoRG9jdW1lbnQqIGRvY3VtZW50LCBDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHls
ZSwgY29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQb3NpdGlvbiYgZW5kLCBFZGl0QWN0aW9u
IGFjdGlvbiA9IEVkaXRBY3Rpb25DaGFuZ2VBdHRyaWJ1dGVzLCBFUHJvcGVydHlMZXZlbCBsZXZl
bCA9IFByb3BlcnR5RGVmYXVsdCkKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxBcHBseVN0eWxlQ29t
bWFuZD4gY3JlYXRlKERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgRWRpdGluZ1N0eWxlKiBzdHls
ZSwgY29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQb3NpdGlvbiYgZW5kLCBFZGl0QWN0aW9u
IGFjdGlvbiA9IEVkaXRBY3Rpb25DaGFuZ2VBdHRyaWJ1dGVzLCBFUHJvcGVydHlMZXZlbCBsZXZl
bCA9IFByb3BlcnR5RGVmYXVsdCkKICAgICB7CiAgICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcg
QXBwbHlTdHlsZUNvbW1hbmQoZG9jdW1lbnQsIHN0eWxlLCBzdGFydCwgZW5kLCBhY3Rpb24sIGxl
dmVsKSk7CiAgICAgfQpAQCAtNTksMjIgKzYwLDIwIEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAg
IHJldHVybiBhZG9wdFJlZihuZXcgQXBwbHlTdHlsZUNvbW1hbmQoZWxlbWVudCwgcmVtb3ZlT25s
eSwgYWN0aW9uKSk7CiAgICAgfQotICAgIHN0YXRpYyBQYXNzUmVmUHRyPEFwcGx5U3R5bGVDb21t
YW5kPiBjcmVhdGUoRG9jdW1lbnQqIGRvY3VtZW50LCBDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHls
ZSwgSXNJbmxpbmVFbGVtZW50VG9SZW1vdmVGdW5jdGlvbiBpc0lubGluZUVsZW1lbnRUb1JlbW92
ZUZ1bmN0aW9uLCBFZGl0QWN0aW9uIGFjdGlvbiA9IEVkaXRBY3Rpb25DaGFuZ2VBdHRyaWJ1dGVz
KQorICAgIHN0YXRpYyBQYXNzUmVmUHRyPEFwcGx5U3R5bGVDb21tYW5kPiBjcmVhdGUoRG9jdW1l
bnQqIGRvY3VtZW50LCBjb25zdCBFZGl0aW5nU3R5bGUqIHN0eWxlLCBJc0lubGluZUVsZW1lbnRU
b1JlbW92ZUZ1bmN0aW9uIGlzSW5saW5lRWxlbWVudFRvUmVtb3ZlRnVuY3Rpb24sIEVkaXRBY3Rp
b24gYWN0aW9uID0gRWRpdEFjdGlvbkNoYW5nZUF0dHJpYnV0ZXMpCiAgICAgewogICAgICAgICBy
ZXR1cm4gYWRvcHRSZWYobmV3IEFwcGx5U3R5bGVDb21tYW5kKGRvY3VtZW50LCBzdHlsZSwgaXNJ
bmxpbmVFbGVtZW50VG9SZW1vdmVGdW5jdGlvbiwgYWN0aW9uKSk7CiAgICAgfQogCiBwcml2YXRl
OgotICAgIEFwcGx5U3R5bGVDb21tYW5kKERvY3VtZW50KiwgQ1NTU3R5bGVEZWNsYXJhdGlvbios
IEVkaXRBY3Rpb24sIEVQcm9wZXJ0eUxldmVsKTsKLSAgICBBcHBseVN0eWxlQ29tbWFuZChEb2N1
bWVudCosIENTU1N0eWxlRGVjbGFyYXRpb24qLCBjb25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0
IFBvc2l0aW9uJiBlbmQsIEVkaXRBY3Rpb24sIEVQcm9wZXJ0eUxldmVsKTsKKyAgICBBcHBseVN0
eWxlQ29tbWFuZChEb2N1bWVudCosIGNvbnN0IEVkaXRpbmdTdHlsZSosIEVkaXRBY3Rpb24sIEVQ
cm9wZXJ0eUxldmVsKTsKKyAgICBBcHBseVN0eWxlQ29tbWFuZChEb2N1bWVudCosIGNvbnN0IEVk
aXRpbmdTdHlsZSosIGNvbnN0IFBvc2l0aW9uJiBzdGFydCwgY29uc3QgUG9zaXRpb24mIGVuZCwg
RWRpdEFjdGlvbiwgRVByb3BlcnR5TGV2ZWwpOwogICAgIEFwcGx5U3R5bGVDb21tYW5kKFBhc3NS
ZWZQdHI8RWxlbWVudD4sIGJvb2wgcmVtb3ZlT25seSwgRWRpdEFjdGlvbik7Ci0gICAgQXBwbHlT
dHlsZUNvbW1hbmQoRG9jdW1lbnQqLCBDU1NTdHlsZURlY2xhcmF0aW9uKiwgYm9vbCAoKmlzSW5s
aW5lRWxlbWVudFRvUmVtb3ZlKShjb25zdCBFbGVtZW50KiksIEVkaXRBY3Rpb24pOworICAgIEFw
cGx5U3R5bGVDb21tYW5kKERvY3VtZW50KiwgY29uc3QgRWRpdGluZ1N0eWxlKiwgYm9vbCAoKmlz
SW5saW5lRWxlbWVudFRvUmVtb3ZlKShjb25zdCBFbGVtZW50KiksIEVkaXRBY3Rpb24pOwogCiAg
ICAgdmlydHVhbCB2b2lkIGRvQXBwbHkoKTsKICAgICB2aXJ0dWFsIEVkaXRBY3Rpb24gZWRpdGlu
Z0FjdGlvbigpIGNvbnN0OwogCi0gICAgQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24qIHN0eWxl
KCkgY29uc3QgeyByZXR1cm4gbV9zdHlsZS5nZXQoKTsgfQotCiAgICAgLy8gc3R5bGUtcmVtb3Zh
bCBoZWxwZXJzCiAgICAgYm9vbCBpc1N0eWxlZElubGluZUVsZW1lbnRUb1JlbW92ZShFbGVtZW50
KikgY29uc3Q7CiAgICAgYm9vbCByZW1vdmVTdHlsZUZyb21SdW5CZWZvcmVBcHBseWluZ1N0eWxl
KENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSwgUmVmUHRyPE5vZGU+JiBydW5TdGFy
dCwgUmVmUHRyPE5vZGU+JiBydW5FbmQpOwpAQCAtMTE5LDcgKzExOCw3IEBAIHByaXZhdGU6CiAg
ICAgUG9zaXRpb24gc3RhcnRQb3NpdGlvbigpOwogICAgIFBvc2l0aW9uIGVuZFBvc2l0aW9uKCk7
CiAKLSAgICBSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+IG1fc3R5bGU7CisgICAg
UmVmUHRyPEVkaXRpbmdTdHlsZT4gbV9zdHlsZTsKICAgICBFZGl0QWN0aW9uIG1fZWRpdGluZ0Fj
dGlvbjsKICAgICBFUHJvcGVydHlMZXZlbCBtX3Byb3BlcnR5TGV2ZWw7CiAgICAgUG9zaXRpb24g
bV9zdGFydDsKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9Db21wb3NpdGVFZGl0Q29tbWFuZC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmNwcAko
cmV2aXNpb24gNzI5NjcpCisrKyBXZWJDb3JlL2VkaXRpbmcvQ29tcG9zaXRlRWRpdENvbW1hbmQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yOCw4ICsyOCw2IEBACiAKICNpbmNsdWRlICJBcHBlbmRO
b2RlQ29tbWFuZC5oIgogI2luY2x1ZGUgIkFwcGx5U3R5bGVDb21tYW5kLmgiCi0jaW5jbHVkZSAi
Q1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uLmgiCi0jaW5jbHVkZSAiQ1NTTXV0YWJsZVN0eWxl
RGVjbGFyYXRpb24uaCIKICNpbmNsdWRlICJDaGFyYWN0ZXJOYW1lcy5oIgogI2luY2x1ZGUgIkRl
bGV0ZUZyb21UZXh0Tm9kZUNvbW1hbmQuaCIKICNpbmNsdWRlICJEZWxldGVTZWxlY3Rpb25Db21t
YW5kLmgiCkBAIC0xMDUsMTIgKzEwMywxMiBAQCB2b2lkIENvbXBvc2l0ZUVkaXRDb21tYW5kOjph
cHBseUNvbW1hbmRUCiAgICAgbV9jb21tYW5kcy5hcHBlbmQoY21kKTsKIH0KIAotdm9pZCBDb21w
b3NpdGVFZGl0Q29tbWFuZDo6YXBwbHlTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9uKiBzdHlsZSwg
RWRpdEFjdGlvbiBlZGl0aW5nQWN0aW9uKQordm9pZCBDb21wb3NpdGVFZGl0Q29tbWFuZDo6YXBw
bHlTdHlsZShjb25zdCBFZGl0aW5nU3R5bGUqIHN0eWxlLCBFZGl0QWN0aW9uIGVkaXRpbmdBY3Rp
b24pCiB7CiAgICAgYXBwbHlDb21tYW5kVG9Db21wb3NpdGUoQXBwbHlTdHlsZUNvbW1hbmQ6OmNy
ZWF0ZShkb2N1bWVudCgpLCBzdHlsZSwgZWRpdGluZ0FjdGlvbikpOwogfQogCi12b2lkIENvbXBv
c2l0ZUVkaXRDb21tYW5kOjphcHBseVN0eWxlKENTU1N0eWxlRGVjbGFyYXRpb24qIHN0eWxlLCBj
b25zdCBQb3NpdGlvbiYgc3RhcnQsIGNvbnN0IFBvc2l0aW9uJiBlbmQsIEVkaXRBY3Rpb24gZWRp
dGluZ0FjdGlvbikKK3ZvaWQgQ29tcG9zaXRlRWRpdENvbW1hbmQ6OmFwcGx5U3R5bGUoY29uc3Qg
RWRpdGluZ1N0eWxlKiBzdHlsZSwgY29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQb3NpdGlv
biYgZW5kLCBFZGl0QWN0aW9uIGVkaXRpbmdBY3Rpb24pCiB7CiAgICAgYXBwbHlDb21tYW5kVG9D
b21wb3NpdGUoQXBwbHlTdHlsZUNvbW1hbmQ6OmNyZWF0ZShkb2N1bWVudCgpLCBzdHlsZSwgc3Rh
cnQsIGVuZCwgZWRpdGluZ0FjdGlvbikpOwogfQpAQCAtOTgzLDcgKzk4MSw3IEBAIHZvaWQgQ29t
cG9zaXRlRWRpdENvbW1hbmQ6Om1vdmVQYXJhZ3JhcGgKICAgICAvLyBJZiB0aGUgc2VsZWN0aW9u
IGlzIGluIGFuIGVtcHR5IHBhcmFncmFwaCwgcmVzdG9yZSBzdHlsZXMgZnJvbSB0aGUgb2xkIGVt
cHR5IHBhcmFncmFwaCB0byB0aGUgbmV3IGVtcHR5IHBhcmFncmFwaC4KICAgICBib29sIHNlbGVj
dGlvbklzRW1wdHlQYXJhZ3JhcGggPSBlbmRpbmdTZWxlY3Rpb24oKS5pc0NhcmV0KCkgJiYgaXNT
dGFydE9mUGFyYWdyYXBoKGVuZGluZ1NlbGVjdGlvbigpLnZpc2libGVTdGFydCgpKSAmJiBpc0Vu
ZE9mUGFyYWdyYXBoKGVuZGluZ1NlbGVjdGlvbigpLnZpc2libGVTdGFydCgpKTsKICAgICBpZiAo
c3R5bGVJbkVtcHR5UGFyYWdyYXBoICYmIHNlbGVjdGlvbklzRW1wdHlQYXJhZ3JhcGgpCi0gICAg
ICAgIGFwcGx5U3R5bGUoc3R5bGVJbkVtcHR5UGFyYWdyYXBoLT5zdHlsZSgpKTsKKyAgICAgICAg
YXBwbHlTdHlsZShzdHlsZUluRW1wdHlQYXJhZ3JhcGguZ2V0KCkpOwogCiAgICAgaWYgKHByZXNl
cnZlU2VsZWN0aW9uICYmIHN0YXJ0SW5kZXggIT0gLTEpIHsKICAgICAgICAgLy8gRnJhZ21lbnQg
Y3JlYXRpb24gKHVzaW5nIGNyZWF0ZU1hcmt1cCkgaW5jb3JyZWN0bHkgdXNlcyByZWd1bGFyCkBA
IC0xMDU2LDcgKzEwNTQsNyBAQCBib29sIENvbXBvc2l0ZUVkaXRDb21tYW5kOjpicmVha091dE9m
RW1wCiAKICAgICBzdHlsZS0+cHJlcGFyZVRvQXBwbHlBdChlbmRpbmdTZWxlY3Rpb24oKS5zdGFy
dCgpKTsKICAgICBpZiAoIXN0eWxlLT5pc0VtcHR5KCkpCi0gICAgICAgIGFwcGx5U3R5bGUoc3R5
bGUtPnN0eWxlKCkpOworICAgICAgICBhcHBseVN0eWxlKHN0eWxlLmdldCgpKTsKIAogICAgIHJl
dHVybiB0cnVlOwogfQpJbmRleDogV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5k
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5kLmgJ
KHJldmlzaW9uIDcyOTY3KQorKysgV2ViQ29yZS9lZGl0aW5nL0NvbXBvc2l0ZUVkaXRDb21tYW5k
LmgJKHdvcmtpbmcgY29weSkKQEAgLTMzLDYgKzMzLDcgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsK
IAogY2xhc3MgQ1NTU3R5bGVEZWNsYXJhdGlvbjsKK2NsYXNzIEVkaXRpbmdTdHlsZTsKIGNsYXNz
IEhUTUxFbGVtZW50OwogY2xhc3MgU3R5bGVkRWxlbWVudDsKIGNsYXNzIFRleHQ7CkBAIC01MSw4
ICs1Miw4IEBAIHByb3RlY3RlZDoKICAgICAvLwogICAgIHZvaWQgYXBwZW5kTm9kZShQYXNzUmVm
UHRyPE5vZGU+LCBQYXNzUmVmUHRyPEVsZW1lbnQ+IHBhcmVudCk7CiAgICAgdm9pZCBhcHBseUNv
bW1hbmRUb0NvbXBvc2l0ZShQYXNzUmVmUHRyPEVkaXRDb21tYW5kPik7Ci0gICAgdm9pZCBhcHBs
eVN0eWxlKENTU1N0eWxlRGVjbGFyYXRpb24qLCBFZGl0QWN0aW9uID0gRWRpdEFjdGlvbkNoYW5n
ZUF0dHJpYnV0ZXMpOwotICAgIHZvaWQgYXBwbHlTdHlsZShDU1NTdHlsZURlY2xhcmF0aW9uKiwg
Y29uc3QgUG9zaXRpb24mIHN0YXJ0LCBjb25zdCBQb3NpdGlvbiYgZW5kLCBFZGl0QWN0aW9uID0g
RWRpdEFjdGlvbkNoYW5nZUF0dHJpYnV0ZXMpOworICAgIHZvaWQgYXBwbHlTdHlsZShjb25zdCBF
ZGl0aW5nU3R5bGUqLCBFZGl0QWN0aW9uID0gRWRpdEFjdGlvbkNoYW5nZUF0dHJpYnV0ZXMpOwor
ICAgIHZvaWQgYXBwbHlTdHlsZShjb25zdCBFZGl0aW5nU3R5bGUqLCBjb25zdCBQb3NpdGlvbiYg
c3RhcnQsIGNvbnN0IFBvc2l0aW9uJiBlbmQsIEVkaXRBY3Rpb24gPSBFZGl0QWN0aW9uQ2hhbmdl
QXR0cmlidXRlcyk7CiAgICAgdm9pZCBhcHBseVN0eWxlZEVsZW1lbnQoUGFzc1JlZlB0cjxFbGVt
ZW50Pik7CiAgICAgdm9pZCByZW1vdmVTdHlsZWRFbGVtZW50KFBhc3NSZWZQdHI8RWxlbWVudD4p
OwogICAgIHZvaWQgZGVsZXRlU2VsZWN0aW9uKGJvb2wgc21hcnREZWxldGUgPSBmYWxzZSwgYm9v
bCBtZXJnZUJsb2Nrc0FmdGVyRGVsZXRlID0gdHJ1ZSwgYm9vbCByZXBsYWNlID0gZmFsc2UsIGJv
b2wgZXhwYW5kRm9yU3BlY2lhbEVsZW1lbnRzID0gdHJ1ZSk7CkluZGV4OiBXZWJDb3JlL2VkaXRp
bmcvRGVsZXRlU2VsZWN0aW9uQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0
aW5nL0RlbGV0ZVNlbGVjdGlvbkNvbW1hbmQuY3BwCShyZXZpc2lvbiA3Mjk2NykKKysrIFdlYkNv
cmUvZWRpdGluZy9EZWxldGVTZWxlY3Rpb25Db21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
NjkxLDcgKzY5MSw3IEBAIHZvaWQgRGVsZXRlU2VsZWN0aW9uQ29tbWFuZDo6Y2FsY3VsYXRlVHkK
ICAgICAgICAgLy8gdGhlbiBtb3ZlIGl0IGJhY2sgKHdoaWNoIHdpbGwgY2xlYXIgdHlwaW5nIHN0
eWxlKS4KIAogICAgICAgICBzZXRFbmRpbmdTZWxlY3Rpb24odmlzaWJsZUVuZCk7Ci0gICAgICAg
IGFwcGx5U3R5bGUobV90eXBpbmdTdHlsZS0+c3R5bGUoKSwgRWRpdEFjdGlvblVuc3BlY2lmaWVk
KTsKKyAgICAgICAgYXBwbHlTdHlsZShtX3R5cGluZ1N0eWxlLmdldCgpLCBFZGl0QWN0aW9uVW5z
cGVjaWZpZWQpOwogICAgICAgICAvLyBhcHBseVN0eWxlIGNhbiBkZXN0cm95IHRoZSBwbGFjZWhv
bGRlciB0aGF0IHdhcyBhdCBtX2VuZGluZ1Bvc2l0aW9uIGlmIGl0IG5lZWRzIHRvIAogICAgICAg
ICAvLyBtb3ZlIGl0LCBidXQgaXQgd2lsbCBzZXQgYW4gZW5kaW5nU2VsZWN0aW9uKCkgYXQgW21v
dmVkUGxhY2Vob2xkZXIsIDBdIGlmIGl0IGRvZXMgc28uCiAgICAgICAgIG1fZW5kaW5nUG9zaXRp
b24gPSBlbmRpbmdTZWxlY3Rpb24oKS5zdGFydCgpOwpJbmRleDogV2ViQ29yZS9lZGl0aW5nL0Vk
aXRDb21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvRWRpdENvbW1hbmQu
Y3BwCShyZXZpc2lvbiA3Mjk2NykKKysrIFdlYkNvcmUvZWRpdGluZy9FZGl0Q29tbWFuZC5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTI3LDggKzI3LDYgQEAKICNpbmNsdWRlICJFZGl0Q29tbWFuZC5o
IgogCiAjaW5jbHVkZSAiQ29tcG9zaXRlRWRpdENvbW1hbmQuaCIKLSNpbmNsdWRlICJDU1NDb21w
dXRlZFN0eWxlRGVjbGFyYXRpb24uaCIKLSNpbmNsdWRlICJDU1NNdXRhYmxlU3R5bGVEZWNsYXJh
dGlvbi5oIgogI2luY2x1ZGUgIkRlbGV0ZUJ1dHRvbkNvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJE
b2N1bWVudC5oIgogI2luY2x1ZGUgIkVkaXRvci5oIgpJbmRleDogV2ViQ29yZS9lZGl0aW5nL0Vk
aXRDb21tYW5kLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL0VkaXRDb21tYW5kLmgJ
KHJldmlzaW9uIDcyOTY3KQorKysgV2ViQ29yZS9lZGl0aW5nL0VkaXRDb21tYW5kLmgJKHdvcmtp
bmcgY29weSkKQEAgLTMzLDcgKzMzLDYgQEAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3Mg
Q29tcG9zaXRlRWRpdENvbW1hbmQ7Ci1jbGFzcyBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjsK
IAogY2xhc3MgRWRpdENvbW1hbmQgOiBwdWJsaWMgUmVmQ291bnRlZDxFZGl0Q29tbWFuZD4gewog
cHVibGljOgpJbmRleDogV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5jcHAKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5jcHAJKHJldmlzaW9uIDcyOTY3KQor
KysgV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEw
Myw2ICsxMDMsMTAgQEAgRWRpdGluZ1N0eWxlOjpFZGl0aW5nU3R5bGUoY29uc3QgQ1NTU3R5bAog
ewogfQogCitFZGl0aW5nU3R5bGU6On5FZGl0aW5nU3R5bGUoKQoreworfQorCiB2b2lkIEVkaXRp
bmdTdHlsZTo6aW5pdChOb2RlKiBub2RlKQogewogICAgIFJlZlB0cjxDU1NDb21wdXRlZFN0eWxl
RGVjbGFyYXRpb24+IGNvbXB1dGVkU3R5bGVBdFBvc2l0aW9uID0gY29tcHV0ZWRTdHlsZShub2Rl
KTsKQEAgLTE3NywxMiArMTgxLDQyIEBAIHZvaWQgRWRpdGluZ1N0eWxlOjpzZXRTdHlsZShQYXNz
UmVmUHRyPEMKICAgICBtX3Nob3VsZFVzZUZpeGVkRGVmYXVsdEZvbnRTaXplID0gZmFsc2U7CiB9
CiAKK3ZvaWQgRWRpdGluZ1N0eWxlOjpvdmVycmlkZVdpdGhTdHlsZShjb25zdCBDU1NNdXRhYmxl
U3R5bGVEZWNsYXJhdGlvbiogc3R5bGUpCit7CisgICAgaWYgKCFzdHlsZSB8fCAhc3R5bGUtPmxl
bmd0aCgpKQorICAgICAgICByZXR1cm47CisgICAgaWYgKCFtX211dGFibGVTdHlsZSkKKyAgICAg
ICAgbV9tdXRhYmxlU3R5bGUgPSBDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlvbjo6Y3JlYXRlKCk7
CisgICAgbV9tdXRhYmxlU3R5bGUtPm1lcmdlKHN0eWxlKTsKK30KKwogdm9pZCBFZGl0aW5nU3R5
bGU6OmNsZWFyKCkKIHsKICAgICBtX211dGFibGVTdHlsZS5jbGVhcigpOwogICAgIG1fc2hvdWxk
VXNlRml4ZWREZWZhdWx0Rm9udFNpemUgPSBmYWxzZTsKIH0KIAorUGFzc1JlZlB0cjxFZGl0aW5n
U3R5bGU+IEVkaXRpbmdTdHlsZTo6Y29weSgpIGNvbnN0Cit7CisgICAgUmVmUHRyPEVkaXRpbmdT
dHlsZT4gY29weSA9IEVkaXRpbmdTdHlsZTo6Y3JlYXRlKCk7CisgICAgaWYgKG1fbXV0YWJsZVN0
eWxlKQorICAgICAgICBjb3B5LT5tX211dGFibGVTdHlsZSA9IG1fbXV0YWJsZVN0eWxlLT5jb3B5
KCk7CisgICAgY29weS0+bV9zaG91bGRVc2VGaXhlZERlZmF1bHRGb250U2l6ZSA9IG1fc2hvdWxk
VXNlRml4ZWREZWZhdWx0Rm9udFNpemU7CisgICAgcmV0dXJuIGNvcHk7Cit9CisKK1Bhc3NSZWZQ
dHI8RWRpdGluZ1N0eWxlPiBFZGl0aW5nU3R5bGU6OmV4dHJhY3RBbmRSZW1vdmVCbG9ja1Byb3Bl
cnRpZXMoKQoreworICAgIFJlZlB0cjxFZGl0aW5nU3R5bGU+IGJsb2NrUHJvcGVydGllcyA9IEVk
aXRpbmdTdHlsZTo6Y3JlYXRlKCk7CisgICAgaWYgKCFtX211dGFibGVTdHlsZSkKKyAgICAgICAg
cmV0dXJuIGJsb2NrUHJvcGVydGllczsKKworICAgIGJsb2NrUHJvcGVydGllcy0+bV9tdXRhYmxl
U3R5bGUgPSBtX211dGFibGVTdHlsZS0+Y29weUJsb2NrUHJvcGVydGllcygpOworICAgIG1fbXV0
YWJsZVN0eWxlLT5yZW1vdmVCbG9ja1Byb3BlcnRpZXMoKTsKKworICAgIHJldHVybiBibG9ja1By
b3BlcnRpZXM7Cit9CisKIHZvaWQgRWRpdGluZ1N0eWxlOjpyZW1vdmVCbG9ja1Byb3BlcnRpZXMo
KQogewogICAgIGlmICghbV9tdXRhYmxlU3R5bGUpCkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvRWRp
dGluZ1N0eWxlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL0VkaXRpbmdTdHlsZS5o
CShyZXZpc2lvbiA3Mjk2NykKKysrIFdlYkNvcmUvZWRpdGluZy9FZGl0aW5nU3R5bGUuaAkod29y
a2luZyBjb3B5KQpAQCAtMzEsNyArMzEsNiBAQAogI2lmbmRlZiBFZGl0aW5nU3R5bGVfaAogI2Rl
ZmluZSBFZGl0aW5nU3R5bGVfaAogCi0jaW5jbHVkZSAiQ1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRp
b24uaCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIlBvc2l0aW9uLmgiCiAKQEAg
LTM5LDYgKzM4LDcgQEAgbmFtZXNwYWNlIFdlYkNvcmUgewogCiBjbGFzcyBDU1NTdHlsZURlY2xh
cmF0aW9uOwogY2xhc3MgQ1NTQ29tcHV0ZWRTdHlsZURlY2xhcmF0aW9uOworY2xhc3MgQ1NTTXV0
YWJsZVN0eWxlRGVjbGFyYXRpb247CiAKIGVudW0gV3JpdGluZ0RpcmVjdGlvbiB7IE5hdHVyYWxX
cml0aW5nRGlyZWN0aW9uLCBMZWZ0VG9SaWdodFdyaXRpbmdEaXJlY3Rpb24sIFJpZ2h0VG9MZWZ0
V3JpdGluZ0RpcmVjdGlvbiB9OwogCkBAIC02NywxNCArNjcsMTkgQEAgcHVibGljOgogICAgICAg
ICByZXR1cm4gYWRvcHRSZWYobmV3IEVkaXRpbmdTdHlsZShzdHlsZSkpOwogICAgIH0KIAorICAg
IH5FZGl0aW5nU3R5bGUoKTsKKwogICAgIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uKiBzdHls
ZSgpIHsgcmV0dXJuIG1fbXV0YWJsZVN0eWxlLmdldCgpOyB9CiAgICAgYm9vbCB0ZXh0RGlyZWN0
aW9uKFdyaXRpbmdEaXJlY3Rpb24mKSBjb25zdDsKICAgICBib29sIGlzRW1wdHkoKSBjb25zdDsK
ICAgICB2b2lkIHNldFN0eWxlKFBhc3NSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+
KTsKKyAgICB2b2lkIG92ZXJyaWRlV2l0aFN0eWxlKGNvbnN0IENTU011dGFibGVTdHlsZURlY2xh
cmF0aW9uKik7CiAgICAgdm9pZCBjbGVhcigpOworICAgIFBhc3NSZWZQdHI8RWRpdGluZ1N0eWxl
PiBjb3B5KCkgY29uc3Q7CisgICAgUGFzc1JlZlB0cjxFZGl0aW5nU3R5bGU+IGV4dHJhY3RBbmRS
ZW1vdmVCbG9ja1Byb3BlcnRpZXMoKTsKICAgICB2b2lkIHJlbW92ZUJsb2NrUHJvcGVydGllcygp
OwotICAgIHZvaWQgcmVtb3ZlU3R5bGVBZGRlZEJ5Tm9kZShOb2RlKiBub2RlKTsKLSAgICB2b2lk
IHJlbW92ZVN0eWxlQ29uZmxpY3RpbmdXaXRoU3R5bGVPZk5vZGUoTm9kZSogbm9kZSk7CisgICAg
dm9pZCByZW1vdmVTdHlsZUFkZGVkQnlOb2RlKE5vZGUqKTsKKyAgICB2b2lkIHJlbW92ZVN0eWxl
Q29uZmxpY3RpbmdXaXRoU3R5bGVPZk5vZGUoTm9kZSopOwogICAgIHZvaWQgcmVtb3ZlTm9uRWRp
dGluZ1Byb3BlcnRpZXMoKTsKICAgICB2b2lkIHByZXBhcmVUb0FwcGx5QXQoY29uc3QgUG9zaXRp
b24mLCBTaG91bGRQcmVzZXJ2ZVdyaXRpbmdEaXJlY3Rpb24gPSBEb05vdFByZXNlcnZlV3JpdGlu
Z0RpcmVjdGlvbik7CiAKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFdlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCShyZXZpc2lvbiA3Mjk2NykKKysrIFdl
YkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04NTUsNyArODU1LDcg
QEAgdm9pZCBFZGl0b3I6OmFwcGx5U3R5bGUoQ1NTU3R5bGVEZWNsYXJhdAogICAgICAgICBicmVh
azsKICAgICBjYXNlIFZpc2libGVTZWxlY3Rpb246OlJhbmdlU2VsZWN0aW9uOgogICAgICAgICBp
ZiAoc3R5bGUpCi0gICAgICAgICAgICBhcHBseUNvbW1hbmQoQXBwbHlTdHlsZUNvbW1hbmQ6OmNy
ZWF0ZShtX2ZyYW1lLT5kb2N1bWVudCgpLCBzdHlsZSwgZWRpdGluZ0FjdGlvbikpOworICAgICAg
ICAgICAgYXBwbHlDb21tYW5kKEFwcGx5U3R5bGVDb21tYW5kOjpjcmVhdGUobV9mcmFtZS0+ZG9j
dW1lbnQoKSwgRWRpdGluZ1N0eWxlOjpjcmVhdGUoc3R5bGUpLmdldCgpLCBlZGl0aW5nQWN0aW9u
KSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0KIH0KQEAgLTg3NCw3ICs4NzQsNyBAQCB2b2lkIEVk
aXRvcjo6YXBwbHlQYXJhZ3JhcGhTdHlsZShDU1NTdHlsCiAgICAgY2FzZSBWaXNpYmxlU2VsZWN0
aW9uOjpDYXJldFNlbGVjdGlvbjoKICAgICBjYXNlIFZpc2libGVTZWxlY3Rpb246OlJhbmdlU2Vs
ZWN0aW9uOgogICAgICAgICBpZiAoc3R5bGUpCi0gICAgICAgICAgICBhcHBseUNvbW1hbmQoQXBw
bHlTdHlsZUNvbW1hbmQ6OmNyZWF0ZShtX2ZyYW1lLT5kb2N1bWVudCgpLCBzdHlsZSwgZWRpdGlu
Z0FjdGlvbiwgQXBwbHlTdHlsZUNvbW1hbmQ6OkZvcmNlQmxvY2tQcm9wZXJ0aWVzKSk7CisgICAg
ICAgICAgICBhcHBseUNvbW1hbmQoQXBwbHlTdHlsZUNvbW1hbmQ6OmNyZWF0ZShtX2ZyYW1lLT5k
b2N1bWVudCgpLCBFZGl0aW5nU3R5bGU6OmNyZWF0ZShzdHlsZSkuZ2V0KCksIGVkaXRpbmdBY3Rp
b24sIEFwcGx5U3R5bGVDb21tYW5kOjpGb3JjZUJsb2NrUHJvcGVydGllcykpOwogICAgICAgICBi
cmVhazsKICAgICB9CiB9CkBAIC0zMDEzLDQwICszMDEzLDIyIEBAIHZvaWQgRWRpdG9yOjpjb21w
dXRlQW5kU2V0VHlwaW5nU3R5bGUoQ1MKICAgICB9CiAKICAgICAvLyBDYWxjdWxhdGUgdGhlIGN1
cnJlbnQgdHlwaW5nIHN0eWxlLgotICAgIFJlZlB0cjxDU1NNdXRhYmxlU3R5bGVEZWNsYXJhdGlv
bj4gbXV0YWJsZVN0eWxlID0gc3R5bGUtPm1ha2VNdXRhYmxlKCk7Ci0gICAgUmVmUHRyPEVkaXRp
bmdTdHlsZT4gdHlwaW5nU3R5bGUgPSBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+dHlwaW5nU3R5bGUo
KTsKLSAgICBpZiAodHlwaW5nU3R5bGUgJiYgdHlwaW5nU3R5bGUtPnN0eWxlKCkpIHsKLSAgICAg
ICAgdHlwaW5nU3R5bGUtPnN0eWxlKCktPm1lcmdlKG11dGFibGVTdHlsZS5nZXQoKSk7Ci0gICAg
ICAgIG11dGFibGVTdHlsZSA9IHR5cGluZ1N0eWxlLT5zdHlsZSgpOwotICAgIH0KLQotICAgIFJl
ZlB0cjxDU1NWYWx1ZT4gdW5pY29kZUJpZGk7Ci0gICAgUmVmUHRyPENTU1ZhbHVlPiBkaXJlY3Rp
b247Ci0gICAgaWYgKGVkaXRpbmdBY3Rpb24gPT0gRWRpdEFjdGlvblNldFdyaXRpbmdEaXJlY3Rp
b24pIHsKLSAgICAgICAgdW5pY29kZUJpZGkgPSBtdXRhYmxlU3R5bGUtPmdldFByb3BlcnR5Q1NT
VmFsdWUoQ1NTUHJvcGVydHlVbmljb2RlQmlkaSk7Ci0gICAgICAgIGRpcmVjdGlvbiA9IG11dGFi
bGVTdHlsZS0+Z2V0UHJvcGVydHlDU1NWYWx1ZShDU1NQcm9wZXJ0eURpcmVjdGlvbik7Ci0gICAg
fQotCi0gICAgTm9kZSogbm9kZSA9IG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxlY3Rpb24oKS52
aXNpYmxlU3RhcnQoKS5kZWVwRXF1aXZhbGVudCgpLm5vZGUoKTsKLSAgICBjb21wdXRlZFN0eWxl
KG5vZGUpLT5kaWZmKG11dGFibGVTdHlsZS5nZXQoKSk7Ci0KLSAgICBpZiAoZWRpdGluZ0FjdGlv
biA9PSBFZGl0QWN0aW9uU2V0V3JpdGluZ0RpcmVjdGlvbiAmJiB1bmljb2RlQmlkaSkgewotICAg
ICAgICBBU1NFUlQodW5pY29kZUJpZGktPmlzUHJpbWl0aXZlVmFsdWUoKSk7Ci0gICAgICAgIG11
dGFibGVTdHlsZS0+c2V0UHJvcGVydHkoQ1NTUHJvcGVydHlVbmljb2RlQmlkaSwgc3RhdGljX2Nh
c3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPih1bmljb2RlQmlkaS5nZXQoKSktPmdldElkZW50KCkpOwot
ICAgICAgICBpZiAoZGlyZWN0aW9uKSB7Ci0gICAgICAgICAgICBBU1NFUlQoZGlyZWN0aW9uLT5p
c1ByaW1pdGl2ZVZhbHVlKCkpOwotICAgICAgICAgICAgbXV0YWJsZVN0eWxlLT5zZXRQcm9wZXJ0
eShDU1NQcm9wZXJ0eURpcmVjdGlvbiwgc3RhdGljX2Nhc3Q8Q1NTUHJpbWl0aXZlVmFsdWUqPihk
aXJlY3Rpb24uZ2V0KCkpLT5nZXRJZGVudCgpKTsKLSAgICAgICAgfQotICAgIH0KKyAgICBSZWZQ
dHI8RWRpdGluZ1N0eWxlPiB0eXBpbmdTdHlsZTsKKyAgICBpZiAobV9mcmFtZS0+c2VsZWN0aW9u
KCktPnR5cGluZ1N0eWxlKCkpIHsKKyAgICAgICAgdHlwaW5nU3R5bGUgPSBtX2ZyYW1lLT5zZWxl
Y3Rpb24oKS0+dHlwaW5nU3R5bGUoKS0+Y29weSgpOworICAgICAgICB0eXBpbmdTdHlsZS0+b3Zl
cnJpZGVXaXRoU3R5bGUoc3R5bGUtPm1ha2VNdXRhYmxlKCkuZ2V0KCkpOworICAgIH0gZWxzZQor
ICAgICAgICB0eXBpbmdTdHlsZSA9IEVkaXRpbmdTdHlsZTo6Y3JlYXRlKHN0eWxlKTsKKworICAg
IHR5cGluZ1N0eWxlLT5wcmVwYXJlVG9BcHBseUF0KG1fZnJhbWUtPnNlbGVjdGlvbigpLT5zZWxl
Y3Rpb24oKS52aXNpYmxlU3RhcnQoKS5kZWVwRXF1aXZhbGVudCgpLCBFZGl0aW5nU3R5bGU6OlBy
ZXNlcnZlV3JpdGluZ0RpcmVjdGlvbik7CiAKICAgICAvLyBIYW5kbGUgYmxvY2sgc3R5bGVzLCBz
dWJzdHJhY3RpbmcgdGhlc2UgZnJvbSB0aGUgdHlwaW5nIHN0eWxlLgotICAgIFJlZlB0cjxDU1NN
dXRhYmxlU3R5bGVEZWNsYXJhdGlvbj4gYmxvY2tTdHlsZSA9IG11dGFibGVTdHlsZS0+Y29weUJs
b2NrUHJvcGVydGllcygpOwotICAgIGJsb2NrU3R5bGUtPmRpZmYobXV0YWJsZVN0eWxlLmdldCgp
KTsKLSAgICBpZiAoYmxvY2tTdHlsZS0+bGVuZ3RoKCkgPiAwKQorICAgIFJlZlB0cjxFZGl0aW5n
U3R5bGU+IGJsb2NrU3R5bGUgPSB0eXBpbmdTdHlsZS0+ZXh0cmFjdEFuZFJlbW92ZUJsb2NrUHJv
cGVydGllcygpOworICAgIGlmICghYmxvY2tTdHlsZS0+aXNFbXB0eSgpKQogICAgICAgICBhcHBs
eUNvbW1hbmQoQXBwbHlTdHlsZUNvbW1hbmQ6OmNyZWF0ZShtX2ZyYW1lLT5kb2N1bWVudCgpLCBi
bG9ja1N0eWxlLmdldCgpLCBlZGl0aW5nQWN0aW9uKSk7CiAKICAgICAvLyBTZXQgdGhlIHJlbWFp
bmluZyBzdHlsZSBhcyB0aGUgdHlwaW5nIHN0eWxlLgotICAgIG1fZnJhbWUtPnNlbGVjdGlvbigp
LT5zZXRUeXBpbmdTdHlsZShFZGl0aW5nU3R5bGU6OmNyZWF0ZShtdXRhYmxlU3R5bGUuZ2V0KCkp
KTsKKyAgICBtX2ZyYW1lLT5zZWxlY3Rpb24oKS0+c2V0VHlwaW5nU3R5bGUodHlwaW5nU3R5bGUp
OwogfQogCiBQYXNzUmVmUHRyPENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uPiBFZGl0b3I6OnNl
bGVjdGlvbkNvbXB1dGVkU3R5bGUoYm9vbCYgc2hvdWxkVXNlRml4ZWRGb250RGVmYXVsdFNpemUp
IGNvbnN0CkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvSW5zZXJ0TGluZUJyZWFrQ29tbWFuZC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5nL0luc2VydExpbmVCcmVha0NvbW1hbmQuY3Bw
CShyZXZpc2lvbiA3Mjk2NykKKysrIFdlYkNvcmUvZWRpdGluZy9JbnNlcnRMaW5lQnJlYWtDb21t
YW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTcyLDcgKzE3Miw3IEBAIHZvaWQgSW5zZXJ0TGlu
ZUJyZWFrQ29tbWFuZDo6ZG9BcHBseSgpCiAgICAgICAgIC8vIGxlYXZlcyBhbmQgdGhlbiBjb21l
cyBiYWNrLCBuZXcgaW5wdXQgd2lsbCBoYXZlIHRoZSByaWdodCBzdHlsZS4KICAgICAgICAgLy8g
RklYTUU6IFdlIHNob3VsZG4ndCBhbHdheXMgYXBwbHkgdGhlIHR5cGluZyBzdHlsZSB0byB0aGUg
bGluZSBicmVhayBoZXJlLAogICAgICAgICAvLyBzZWUgPHJkYXI6Ly9wcm9ibGVtLzU3OTQ0NjI+
LgotICAgICAgICBhcHBseVN0eWxlKHR5cGluZ1N0eWxlLT5zdHlsZSgpLCBmaXJzdERlZXBFZGl0
aW5nUG9zaXRpb25Gb3JOb2RlKG5vZGVUb0luc2VydC5nZXQoKSksIGxhc3REZWVwRWRpdGluZ1Bv
c2l0aW9uRm9yTm9kZShub2RlVG9JbnNlcnQuZ2V0KCkpKTsKKyAgICAgICAgYXBwbHlTdHlsZSh0
eXBpbmdTdHlsZS5nZXQoKSwgZmlyc3REZWVwRWRpdGluZ1Bvc2l0aW9uRm9yTm9kZShub2RlVG9J
bnNlcnQuZ2V0KCkpLCBsYXN0RGVlcEVkaXRpbmdQb3NpdGlvbkZvck5vZGUobm9kZVRvSW5zZXJ0
LmdldCgpKSk7CiAgICAgICAgIC8vIEV2ZW4gdGhvdWdoIHRoaXMgYXBwbHlTdHlsZSBvcGVyYXRl
cyBvbiBhIFJhbmdlLCBpdCBzdGlsbCBzZXRzIGFuIGVuZGluZ1NlbGVjdGlvbigpLgogICAgICAg
ICAvLyBJdCB0cmllcyB0byBzZXQgYSBWaXNpYmxlU2VsZWN0aW9uIGFyb3VuZCB0aGUgY29udGVu
dCBpdCBvcGVyYXRlZCBvbi4gU28sIHRoYXQgVmlzaWJsZVNlbGVjdGlvbgogICAgICAgICAvLyB3
aWxsIGVpdGhlciAoYSkgc2VsZWN0IHRoZSBsaW5lIGJyZWFrIHdlIGluc2VydGVkLCBvciBpdCB3
aWxsIChiKSBiZSBhIGNhcmV0IGp1c3QgCkluZGV4OiBXZWJDb3JlL2VkaXRpbmcvSW5zZXJ0UGFy
YWdyYXBoU2VwYXJhdG9yQ29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9lZGl0aW5n
L0luc2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1hbmQuY3BwCShyZXZpc2lvbiA3Mjk2NykKKysr
IFdlYkNvcmUvZWRpdGluZy9JbnNlcnRQYXJhZ3JhcGhTZXBhcmF0b3JDb21tYW5kLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtOTgsNyArOTgsNyBAQCB2b2lkIEluc2VydFBhcmFncmFwaFNlcGFyYXRv
ckNvbW1hbmQ6OmFwCiAKICAgICBtX3N0eWxlLT5wcmVwYXJlVG9BcHBseUF0KGVuZGluZ1NlbGVj
dGlvbigpLnN0YXJ0KCkpOwogICAgIGlmICghbV9zdHlsZS0+aXNFbXB0eSgpKQotICAgICAgICBh
cHBseVN0eWxlKG1fc3R5bGUtPnN0eWxlKCkpOworICAgICAgICBhcHBseVN0eWxlKG1fc3R5bGUu
Z2V0KCkpOwogfQogCiBib29sIEluc2VydFBhcmFncmFwaFNlcGFyYXRvckNvbW1hbmQ6OnNob3Vs
ZFVzZURlZmF1bHRQYXJhZ3JhcGhFbGVtZW50KE5vZGUqIGVuY2xvc2luZ0Jsb2NrKSBjb25zdApJ
bmRleDogV2ViQ29yZS9lZGl0aW5nL0luc2VydFRleHRDb21tYW5kLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBXZWJDb3JlL2VkaXRpbmcvSW5zZXJ0VGV4dENvbW1hbmQuY3BwCShyZXZpc2lvbiA3Mjk2NykK
KysrIFdlYkNvcmUvZWRpdGluZy9JbnNlcnRUZXh0Q29tbWFuZC5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTE5Myw3ICsxOTMsNyBAQCB2b2lkIEluc2VydFRleHRDb21tYW5kOjppbnB1dChjb25zdCBT
dHJpCiAgICAgaWYgKFJlZlB0cjxFZGl0aW5nU3R5bGU+IHR5cGluZ1N0eWxlID0gZG9jdW1lbnQo
KS0+ZnJhbWUoKS0+c2VsZWN0aW9uKCktPnR5cGluZ1N0eWxlKCkpIHsKICAgICAgICAgdHlwaW5n
U3R5bGUtPnByZXBhcmVUb0FwcGx5QXQoZW5kUG9zaXRpb24sIEVkaXRpbmdTdHlsZTo6UHJlc2Vy
dmVXcml0aW5nRGlyZWN0aW9uKTsKICAgICAgICAgaWYgKCF0eXBpbmdTdHlsZS0+aXNFbXB0eSgp
KQotICAgICAgICAgICAgYXBwbHlTdHlsZSh0eXBpbmdTdHlsZS0+c3R5bGUoKSk7CisgICAgICAg
ICAgICBhcHBseVN0eWxlKHR5cGluZ1N0eWxlLmdldCgpKTsKICAgICB9CiAKICAgICBpZiAoIXNl
bGVjdEluc2VydGVkVGV4dCkKSW5kZXg6IFdlYkNvcmUvZWRpdGluZy9SZW1vdmVGb3JtYXRDb21t
YW5kLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvUmVtb3ZlRm9ybWF0Q29tbWFu
ZC5jcHAJKHJldmlzaW9uIDcyOTY3KQorKysgV2ViQ29yZS9lZGl0aW5nL1JlbW92ZUZvcm1hdENv
bW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Nyw3ICs4Nyw3IEBAIHZvaWQgUmVtb3ZlRm9y
bWF0Q29tbWFuZDo6ZG9BcHBseSgpCiAgICAgTm9kZSogcm9vdCA9IGZyYW1lLT5zZWxlY3Rpb24o
KS0+cm9vdEVkaXRhYmxlRWxlbWVudCgpOwogICAgIFJlZlB0cjxFZGl0aW5nU3R5bGU+IGRlZmF1
bHRTdHlsZSA9IEVkaXRpbmdTdHlsZTo6Y3JlYXRlKHJvb3QpOwogCi0gICAgYXBwbHlDb21tYW5k
VG9Db21wb3NpdGUoQXBwbHlTdHlsZUNvbW1hbmQ6OmNyZWF0ZShkb2N1bWVudCgpLCBkZWZhdWx0
U3R5bGUtPnN0eWxlKCksIGlzRWxlbWVudEZvclJlbW92ZUZvcm1hdENvbW1hbmQsIGVkaXRpbmdB
Y3Rpb24oKSkpOworICAgIGFwcGx5Q29tbWFuZFRvQ29tcG9zaXRlKEFwcGx5U3R5bGVDb21tYW5k
OjpjcmVhdGUoZG9jdW1lbnQoKSwgZGVmYXVsdFN0eWxlLmdldCgpLCBpc0VsZW1lbnRGb3JSZW1v
dmVGb3JtYXRDb21tYW5kLCBlZGl0aW5nQWN0aW9uKCkpKTsKIH0KIAogfQpJbmRleDogV2ViQ29y
ZS9lZGl0aW5nL1JlcGxhY2VTZWxlY3Rpb25Db21tYW5kLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2VkaXRpbmcvUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQuY3BwCShyZXZpc2lvbiA3Mjk2NykK
KysrIFdlYkNvcmUvZWRpdGluZy9SZXBsYWNlU2VsZWN0aW9uQ29tbWFuZC5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTExNDMsNyArMTE0Myw3IEBAIHZvaWQgUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6
OmNvbXBsZXRlSFQKIAogICAgICAgICBpZiAobV9tYXRjaFN0eWxlKSB7CiAgICAgICAgICAgICBB
U1NFUlQobV9pbnNlcnRpb25TdHlsZSk7Ci0gICAgICAgICAgICBhcHBseVN0eWxlKG1faW5zZXJ0
aW9uU3R5bGUtPnN0eWxlKCksIHN0YXJ0LCBlbmQpOworICAgICAgICAgICAgYXBwbHlTdHlsZSht
X2luc2VydGlvblN0eWxlLmdldCgpLCBzdGFydCwgZW5kKTsKICAgICAgICAgfSAgICAKICAgICAg
ICAgCiAgICAgICAgIGlmIChsYXN0UG9zaXRpb25Ub1NlbGVjdC5pc05vdE51bGwoKSkKSW5kZXg6
IFdlYkNvcmUvZWRpdGluZy9TZWxlY3Rpb25Db250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBX
ZWJDb3JlL2VkaXRpbmcvU2VsZWN0aW9uQ29udHJvbGxlci5jcHAJKHJldmlzaW9uIDcyOTY3KQor
KysgV2ViQ29yZS9lZGl0aW5nL1NlbGVjdGlvbkNvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xNTkwLDYgKzE1OTAsMTMgQEAgdm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjpwYWludERy
YWdDYXJldAogI2VuZGlmCiB9CiAKK1Bhc3NSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRp
b24+IFNlbGVjdGlvbkNvbnRyb2xsZXI6OmNvcHlUeXBpbmdTdHlsZSgpIGNvbnN0Cit7CisgICAg
aWYgKCFtX3R5cGluZ1N0eWxlIHx8ICFtX3R5cGluZ1N0eWxlLT5zdHlsZSgpKQorICAgICAgICBy
ZXR1cm4gMDsKKyAgICByZXR1cm4gbV90eXBpbmdTdHlsZS0+c3R5bGUoKS0+Y29weSgpOworfQor
CiBib29sIFNlbGVjdGlvbkNvbnRyb2xsZXI6OnNob3VsZERlbGV0ZVNlbGVjdGlvbihjb25zdCBW
aXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24pIGNvbnN0CiB7CiAgICAgcmV0dXJuIG1fZnJhbWUt
PmVkaXRvcigpLT5jbGllbnQoKS0+c2hvdWxkRGVsZXRlUmFuZ2Uoc2VsZWN0aW9uLnRvTm9ybWFs
aXplZFJhbmdlKCkuZ2V0KCkpOwpJbmRleDogV2ViQ29yZS9lZGl0aW5nL1NlbGVjdGlvbkNvbnRy
b2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2VkaXRpbmcvU2VsZWN0aW9uQ29udHJvbGxl
ci5oCShyZXZpc2lvbiA3Mjk2NykKKysrIFdlYkNvcmUvZWRpdGluZy9TZWxlY3Rpb25Db250cm9s
bGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM2LDggKzM2LDggQEAKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCi1jbGFzcyBGcmFtZTsKIGNsYXNzIENTU011dGFibGVTdHlsZURlY2xhcmF0aW9uOwor
Y2xhc3MgRnJhbWU7CiBjbGFzcyBHcmFwaGljc0NvbnRleHQ7CiBjbGFzcyBIVE1MRm9ybUVsZW1l
bnQ7CiBjbGFzcyBSZW5kZXJPYmplY3Q7CkBAIC0yMzksMTMgKzIzOSw2IEBAIGlubGluZSBFZGl0
aW5nU3R5bGUqIFNlbGVjdGlvbkNvbnRyb2xsZXIKICAgICByZXR1cm4gbV90eXBpbmdTdHlsZS5n
ZXQoKTsKIH0KIAotaW5saW5lIFBhc3NSZWZQdHI8Q1NTTXV0YWJsZVN0eWxlRGVjbGFyYXRpb24+
IFNlbGVjdGlvbkNvbnRyb2xsZXI6OmNvcHlUeXBpbmdTdHlsZSgpIGNvbnN0Ci17Ci0gICAgaWYg
KCFtX3R5cGluZ1N0eWxlIHx8ICFtX3R5cGluZ1N0eWxlLT5zdHlsZSgpKQotICAgICAgICByZXR1
cm4gMDsKLSAgICByZXR1cm4gbV90eXBpbmdTdHlsZS0+c3R5bGUoKS0+Y29weSgpOwotfQotCiBp
bmxpbmUgdm9pZCBTZWxlY3Rpb25Db250cm9sbGVyOjpjbGVhclR5cGluZ1N0eWxlKCkKIHsKICAg
ICBtX3R5cGluZ1N0eWxlLmNsZWFyKCk7Cg==
</data>
<flag name="review"
          id="65987"
          type_id="1"
          status="+"
          setter="tony"
    />
          </attachment>
      

    </bug>

</bugzilla>