<?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>136461</bug_id>
          
          <creation_ts>2014-09-02 13:38:28 -0700</creation_ts>
          <short_desc>Move computeInlinePreferredLogicalWidths() from RenderBlock to RenderBlockFlow</short_desc>
          <delta_ts>2014-09-05 07:18:26 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="alan">zalan</reporter>
          <assigned_to name="alan">zalan</assigned_to>
          <cc>commit-queue</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>glenn</cc>
    
    <cc>hyatt</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1032729</commentid>
    <comment_count>0</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2014-09-02 13:38:28 -0700</bug_when>
    <thetext>and make it const function.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1032732</commentid>
    <comment_count>1</comment_count>
      <attachid>237511</attachid>
    <who name="alan">zalan</who>
    <bug_when>2014-09-02 13:50:56 -0700</bug_when>
    <thetext>Created attachment 237511
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1032734</commentid>
    <comment_count>2</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-09-02 13:52:41 -0700</bug_when>
    <thetext>Attachment 237511 did not pass style-queue:


ERROR: Source/WebCore/rendering/RenderBlockFlow.cpp:3869:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/rendering/RenderBlockFlow.cpp:3870:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/rendering/RenderBlockFlow.cpp:3873:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/rendering/RenderBlockFlow.cpp:3874:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/rendering/RenderBlockFlow.cpp:4088:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/rendering/RenderBlockFlow.cpp:4089:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 6 in 3 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1033170</commentid>
    <comment_count>3</comment_count>
      <attachid>237511</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2014-09-04 01:30:09 -0700</bug_when>
    <thetext>Comment on attachment 237511
Patch

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

&gt; Source/WebCore/rendering/RenderBlockFlow.cpp:3794
&gt; +    const RenderObject* parent;

Should be RenderBlockFlow&amp;, not RenderObject*.

&gt; Source/WebCore/rendering/RenderBlockFlow.cpp:3799
&gt; +    InlineMinMaxIterator(const RenderObject* p)

Should be RenderBlockFlow&amp;, not RenderObject*.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1033214</commentid>
    <comment_count>4</comment_count>
      <attachid>237628</attachid>
    <who name="alan">zalan</who>
    <bug_when>2014-09-04 09:17:55 -0700</bug_when>
    <thetext>Created attachment 237628
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1033215</commentid>
    <comment_count>5</comment_count>
    <who name="alan">zalan</who>
    <bug_when>2014-09-04 09:18:28 -0700</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 237511 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=237511&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/rendering/RenderBlockFlow.cpp:3794
&gt; &gt; +    const RenderObject* parent;
&gt; 
&gt; Should be RenderBlockFlow&amp;, not RenderObject*.
Done.

&gt; 
&gt; &gt; Source/WebCore/rendering/RenderBlockFlow.cpp:3799
&gt; &gt; +    InlineMinMaxIterator(const RenderObject* p)
&gt; 
&gt; Should be RenderBlockFlow&amp;, not RenderObject*.
Done. Thanks!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1033217</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-09-04 09:19:48 -0700</bug_when>
    <thetext>Attachment 237628 did not pass style-queue:


ERROR: Source/WebCore/rendering/RenderBlockFlow.cpp:3900:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/rendering/RenderBlockFlow.cpp:3901:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/rendering/RenderBlockFlow.cpp:3904:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/rendering/RenderBlockFlow.cpp:3905:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/rendering/RenderBlockFlow.cpp:4119:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
ERROR: Source/WebCore/rendering/RenderBlockFlow.cpp:4120:  Weird number of spaces at line-start.  Are you using a 4-space indent?  [whitespace/indent] [3]
Total errors found: 6 in 3 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1033454</commentid>
    <comment_count>7</comment_count>
      <attachid>237628</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-09-05 07:18:22 -0700</bug_when>
    <thetext>Comment on attachment 237628
Patch

Clearing flags on attachment: 237628

Committed r173311: &lt;http://trac.webkit.org/changeset/173311&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1033455</commentid>
    <comment_count>8</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2014-09-05 07:18:26 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>237511</attachid>
            <date>2014-09-02 13:50:56 -0700</date>
            <delta_ts>2014-09-04 09:17:51 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-136461-20140902135051.patch</filename>
            <type>text/plain</type>
            <size>42665</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTczMTcwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGZiZjVjYjU1NmQ0NWE5
MTdhYmU4MGNiYWM0Y2I5YzgyNzM4N2ZkZC4uNzlmMGE1OWIxM2Q1NTdmN2VlYTI4MmYzYmY5ZDhk
ZDQ0MjQ2MjNiOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM2IEBACisyMDE0LTA5LTAyICBaYWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKKyAgICAgICAgTW92ZSBjb21wdXRlSW5saW5l
UHJlZmVycmVkTG9naWNhbFdpZHRocygpIGZyb20gUmVuZGVyQmxvY2sgdG8gUmVuZGVyQmxvY2tG
bG93CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzY0
NjEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUaGlz
IHBhdGNoIGVuYWJsZXMgdXMgdG8gZ28gZnJvbSBjb25zdF9jYXN0PFJlbmRlckJsb2NrRmxvdyo+
KHRoaXMpLT5jb21wdXRlSW5saW5lUHJlZmVycmVkTG9naWNhbFdpZHRocygpCisgICAgICAgIHRv
IGNvbXB1dGVJbmxpbmVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKCkuCisKKyAgICAgICAgQ292ZXJl
ZCBieSBleGlzdGluZyB0ZXN0cy4KKworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9jay5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVNaW5NYXhJdGVyYXRvcjo6ZW5kT2ZJbmxpbmUp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lTWluTWF4SXRlcmF0b3I6Om5leHQp
OiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Z2V0QlBNV2lkdGgpOiBEZWxldGVkLgorICAg
ICAgICAoV2ViQ29yZTo6Z2V0Qm9yZGVyUGFkZGluZ01hcmdpbik6IERlbGV0ZWQuCisgICAgICAg
IChXZWJDb3JlOjpzdHJpcFRyYWlsaW5nU3BhY2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6cHJlZmVycmVkV2lkdGgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxv
Y2s6OmNvbXB1dGVJbmxpbmVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKTogRGVsZXRlZC4KKyAgICAg
ICAgKiByZW5kZXJpbmcvUmVuZGVyQmxvY2suaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVy
QmxvY2tGbG93LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrRmxvdzo6Y29tcHV0
ZUludHJpbnNpY0xvZ2ljYWxXaWR0aHMpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lTWluTWF4
SXRlcmF0b3I6OmluaXRpYWwpOiBUaGUgKHBhcmVudCA9PSBjdXJyZW50KSBjb25kaXRpb24gd2Fz
IHVzZWQgYXMgJ2luaXRpYWwnIHN0YXRlIGJlZm9yZS4KKyAgICAgICAgYW5kIGluIG9yZGVyIHRv
IG1ha2UgY29tcHV0ZUlubGluZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMgY29uc3QsIElubGluZU1p
bk1heEl0ZXJhdG9yKCkgbmVlZHMgdG8gdGFrZSBjb25zdCBSZW5kZXJPYmplY3QqLgorICAgICAg
ICAoV2ViQ29yZTo6SW5saW5lTWluTWF4SXRlcmF0b3I6Om5leHQpOgorICAgICAgICAoV2ViQ29y
ZTo6Z2V0QlBNV2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0Qm9yZGVyUGFkZGluZ01hcmdp
bik6CisgICAgICAgIChXZWJDb3JlOjpzdHJpcFRyYWlsaW5nU3BhY2UpOgorICAgICAgICAoV2Vi
Q29yZTo6cHJlZmVycmVkV2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2tGbG93
Ojpjb21wdXRlSW5saW5lUHJlZmVycmVkTG9naWNhbFdpZHRocyk6CisgICAgICAgICogcmVuZGVy
aW5nL1JlbmRlckJsb2NrRmxvdy5oOgorCiAyMDE0LTA5LTAxICBUaW0gSG9ydG9uICA8dGltb3Ro
eV9ob3J0b25AYXBwbGUuY29tPgogCiAgICAgICAgIFJlbmRlclRoZW1lTWFjOjpwYWludFByb2dy
ZXNzQmFyIGNyZWF0ZXMgYSBidWZmZXIgd2l0aG91dCByZXNwZWN0aW5nIHRoZSBkZXN0aW5hdGlv
bidzIGFjY2VsZXJhdGlvbiBzZXR0aW5nCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5k
ZXJpbmcvUmVuZGVyQmxvY2suY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJs
b2NrLmNwcAppbmRleCAzNGJiZTAzMzdmOGYyNmQ1ODhjMDJkNjI3YWFjMTI1N2IxMWM2ZGQ2Li5k
YzNhZDQ1YTJlYWRmZmI2NzE2Yzg1MzhkMTgzZGY4YmI3NTYzNjQ0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3JlbmRlcmluZy9SZW5kZXJCbG9jay5jcHAKQEAgLTI3OTksNDEwICsyNzk5LDYgQEAgdm9pZCBS
ZW5kZXJCbG9jazo6Y29tcHV0ZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMoKQogICAgIHNldFByZWZl
cnJlZExvZ2ljYWxXaWR0aHNEaXJ0eShmYWxzZSk7CiB9CiAKLXN0cnVjdCBJbmxpbmVNaW5NYXhJ
dGVyYXRvciB7Ci0vKiBJbmxpbmVNaW5NYXhJdGVyYXRvciBpcyBhIGNsYXNzIHRoYXQgd2lsbCBp
dGVyYXRlIG92ZXIgYWxsIHJlbmRlciBvYmplY3RzIHRoYXQgY29udHJpYnV0ZSB0bwotICAgaW5s
aW5lIG1pbi9tYXggd2lkdGggY2FsY3VsYXRpb25zLiAgTm90ZSB0aGUgZm9sbG93aW5nIGFib3V0
IHRoZSB3YXkgaXQgd2Fsa3M6Ci0gICAoMSkgUG9zaXRpb25lZCBjb250ZW50IGlzIHNraXBwZWQg
KHNpbmNlIGl0IGRvZXMgbm90IGNvbnRyaWJ1dGUgdG8gbWluL21heCB3aWR0aCBvZiBhIGJsb2Nr
KQotICAgKDIpIFdlIGRvIG5vdCBkcmlsbCBpbnRvIHRoZSBjaGlsZHJlbiBvZiBmbG9hdHMgb3Ig
cmVwbGFjZWQgZWxlbWVudHMsIHNpbmNlIHlvdSBjYW4ndCBicmVhawotICAgICAgIGluIHRoZSBt
aWRkbGUgb2Ygc3VjaCBhbiBlbGVtZW50LgotICAgKDMpIElubGluZSBmbG93cyAoZS5nLiwgPGE+
LCA8c3Bhbj4sIDxpPikgYXJlIHdhbGtlZCB0d2ljZSwgc2luY2UgZWFjaCBzaWRlIGNhbiBoYXZl
Ci0gICAgICAgZGlzdGluY3QgYm9yZGVycy9tYXJnaW4vcGFkZGluZyB0aGF0IGNvbnRyaWJ1dGUg
dG8gdGhlIG1pbi9tYXggd2lkdGguCi0qLwotICAgIFJlbmRlck9iamVjdCogcGFyZW50OwotICAg
IFJlbmRlck9iamVjdCogY3VycmVudDsKLSAgICBib29sIGVuZE9mSW5saW5lOwotCi0gICAgSW5s
aW5lTWluTWF4SXRlcmF0b3IoUmVuZGVyT2JqZWN0KiBwLCBib29sIGVuZCA9IGZhbHNlKQotICAg
ICAgICA6cGFyZW50KHApLCBjdXJyZW50KHApLCBlbmRPZklubGluZShlbmQpIHt9Ci0KLSAgICBS
ZW5kZXJPYmplY3QqIG5leHQoKTsKLX07Ci0KLVJlbmRlck9iamVjdCogSW5saW5lTWluTWF4SXRl
cmF0b3I6Om5leHQoKQotewotICAgIFJlbmRlck9iamVjdCogcmVzdWx0ID0gMDsKLSAgICBib29s
IG9sZEVuZE9mSW5saW5lID0gZW5kT2ZJbmxpbmU7Ci0gICAgZW5kT2ZJbmxpbmUgPSBmYWxzZTsK
LSAgICB3aGlsZSAoY3VycmVudCB8fCBjdXJyZW50ID09IHBhcmVudCkgewotICAgICAgICBpZiAo
IW9sZEVuZE9mSW5saW5lICYmCi0gICAgICAgICAgICAoY3VycmVudCA9PSBwYXJlbnQgfHwKLSAg
ICAgICAgICAgICAoIWN1cnJlbnQtPmlzRmxvYXRpbmcoKSAmJiAhY3VycmVudC0+aXNSZXBsYWNl
ZCgpICYmICFjdXJyZW50LT5pc091dE9mRmxvd1Bvc2l0aW9uZWQoKSkpKQotICAgICAgICAgICAg
cmVzdWx0ID0gY3VycmVudC0+Zmlyc3RDaGlsZFNsb3coKTsKLSAgICAgICAgaWYgKCFyZXN1bHQp
IHsKLSAgICAgICAgICAgIC8vIFdlIGhpdCB0aGUgZW5kIG9mIG91ciBpbmxpbmUuIChJdCB3YXMg
ZW1wdHksIGUuZy4sIDxzcGFuPjwvc3Bhbj4uKQotICAgICAgICAgICAgaWYgKCFvbGRFbmRPZklu
bGluZSAmJiBjdXJyZW50LT5pc1JlbmRlcklubGluZSgpKSB7Ci0gICAgICAgICAgICAgICAgcmVz
dWx0ID0gY3VycmVudDsKLSAgICAgICAgICAgICAgICBlbmRPZklubGluZSA9IHRydWU7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgIHdoaWxlIChj
dXJyZW50ICYmIGN1cnJlbnQgIT0gcGFyZW50KSB7Ci0gICAgICAgICAgICAgICAgcmVzdWx0ID0g
Y3VycmVudC0+bmV4dFNpYmxpbmcoKTsKLSAgICAgICAgICAgICAgICBpZiAocmVzdWx0KSBicmVh
azsKLSAgICAgICAgICAgICAgICBjdXJyZW50ID0gY3VycmVudC0+cGFyZW50KCk7Ci0gICAgICAg
ICAgICAgICAgaWYgKGN1cnJlbnQgJiYgY3VycmVudCAhPSBwYXJlbnQgJiYgY3VycmVudC0+aXNS
ZW5kZXJJbmxpbmUoKSkgewotICAgICAgICAgICAgICAgICAgICByZXN1bHQgPSBjdXJyZW50Owot
ICAgICAgICAgICAgICAgICAgICBlbmRPZklubGluZSA9IHRydWU7Ci0gICAgICAgICAgICAgICAg
ICAgIGJyZWFrOwotICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgIH0KLSAgICAgICAgfQot
Ci0gICAgICAgIGlmICghcmVzdWx0KQotICAgICAgICAgICAgYnJlYWs7Ci0KLSAgICAgICAgaWYg
KCFyZXN1bHQtPmlzT3V0T2ZGbG93UG9zaXRpb25lZCgpICYmIChyZXN1bHQtPmlzVGV4dE9yTGlu
ZUJyZWFrKCkgfHwgcmVzdWx0LT5pc0Zsb2F0aW5nKCkgfHwgcmVzdWx0LT5pc1JlcGxhY2VkKCkg
fHwgcmVzdWx0LT5pc1JlbmRlcklubGluZSgpKSkKLSAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgCi0gICAgICAgIGN1cnJlbnQgPSByZXN1bHQ7Ci0gICAgICAgIHJlc3VsdCA9IDA7Ci0gICAg
fQotCi0gICAgLy8gVXBkYXRlIG91ciBwb3NpdGlvbi4KLSAgICBjdXJyZW50ID0gcmVzdWx0Owot
ICAgIHJldHVybiBjdXJyZW50OwotfQotCi1zdGF0aWMgTGF5b3V0VW5pdCBnZXRCUE1XaWR0aChM
YXlvdXRVbml0IGNoaWxkVmFsdWUsIExlbmd0aCBjc3NVbml0KQotewotICAgIGlmIChjc3NVbml0
LnR5cGUoKSAhPSBBdXRvKQotICAgICAgICByZXR1cm4gKGNzc1VuaXQuaXNGaXhlZCgpID8gTGF5
b3V0VW5pdChjc3NVbml0LnZhbHVlKCkpIDogY2hpbGRWYWx1ZSk7Ci0gICAgcmV0dXJuIDA7Ci19
Ci0KLXN0YXRpYyBMYXlvdXRVbml0IGdldEJvcmRlclBhZGRpbmdNYXJnaW4oY29uc3QgUmVuZGVy
Qm94TW9kZWxPYmplY3QqIGNoaWxkLCBib29sIGVuZE9mSW5saW5lKQotewotICAgIGNvbnN0IFJl
bmRlclN0eWxlJiBjaGlsZFN0eWxlID0gY2hpbGQtPnN0eWxlKCk7Ci0gICAgaWYgKGVuZE9mSW5s
aW5lKQotICAgICAgICByZXR1cm4gZ2V0QlBNV2lkdGgoY2hpbGQtPm1hcmdpbkVuZCgpLCBjaGls
ZFN0eWxlLm1hcmdpbkVuZCgpKSArCi0gICAgICAgICAgICAgICBnZXRCUE1XaWR0aChjaGlsZC0+
cGFkZGluZ0VuZCgpLCBjaGlsZFN0eWxlLnBhZGRpbmdFbmQoKSkgKwotICAgICAgICAgICAgICAg
Y2hpbGQtPmJvcmRlckVuZCgpOwotICAgIHJldHVybiBnZXRCUE1XaWR0aChjaGlsZC0+bWFyZ2lu
U3RhcnQoKSwgY2hpbGRTdHlsZS5tYXJnaW5TdGFydCgpKSArCi0gICAgICAgICAgICAgICBnZXRC
UE1XaWR0aChjaGlsZC0+cGFkZGluZ1N0YXJ0KCksIGNoaWxkU3R5bGUucGFkZGluZ1N0YXJ0KCkp
ICsKLSAgICAgICAgICAgICAgIGNoaWxkLT5ib3JkZXJTdGFydCgpOwotfQotCi1zdGF0aWMgaW5s
aW5lIHZvaWQgc3RyaXBUcmFpbGluZ1NwYWNlKGZsb2F0JiBpbmxpbmVNYXgsIGZsb2F0JiBpbmxp
bmVNaW4sCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFJlbmRlck9iamVj
dCogdHJhaWxpbmdTcGFjZUNoaWxkKQotewotICAgIGlmICh0cmFpbGluZ1NwYWNlQ2hpbGQgJiYg
dHJhaWxpbmdTcGFjZUNoaWxkLT5pc1RleHQoKSkgewotICAgICAgICAvLyBDb2xsYXBzZSBhd2F5
IHRoZSB0cmFpbGluZyBzcGFjZSBhdCB0aGUgZW5kIG9mIGEgYmxvY2suCi0gICAgICAgIFJlbmRl
clRleHQqIHQgPSB0b1JlbmRlclRleHQodHJhaWxpbmdTcGFjZUNoaWxkKTsKLSAgICAgICAgY29u
c3QgVUNoYXIgc3BhY2UgPSAnICc7Ci0gICAgICAgIGNvbnN0IEZvbnQmIGZvbnQgPSB0LT5zdHls
ZSgpLmZvbnQoKTsgLy8gRklYTUU6IFRoaXMgaWdub3JlcyBmaXJzdC1saW5lLgotICAgICAgICBm
bG9hdCBzcGFjZVdpZHRoID0gZm9udC53aWR0aChSZW5kZXJCbG9jazo6Y29uc3RydWN0VGV4dFJ1
bih0LCBmb250LCAmc3BhY2UsIDEsIHQtPnN0eWxlKCkpKTsKLSAgICAgICAgaW5saW5lTWF4IC09
IHNwYWNlV2lkdGggKyBmb250LndvcmRTcGFjaW5nKCk7Ci0gICAgICAgIGlmIChpbmxpbmVNaW4g
PiBpbmxpbmVNYXgpCi0gICAgICAgICAgICBpbmxpbmVNaW4gPSBpbmxpbmVNYXg7Ci0gICAgfQot
fQotCi1zdGF0aWMgaW5saW5lIExheW91dFVuaXQgcHJlZmVycmVkV2lkdGgoTGF5b3V0VW5pdCBw
cmVmZXJyZWRXaWR0aCwgZmxvYXQgcmVzdWx0KQotewotICAgIHJldHVybiBzdGQ6Om1heChwcmVm
ZXJyZWRXaWR0aCwgTGF5b3V0VW5pdDo6ZnJvbUZsb2F0Q2VpbChyZXN1bHQpKTsKLX0KLQotdm9p
ZCBSZW5kZXJCbG9jazo6Y29tcHV0ZUlubGluZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMoTGF5b3V0
VW5pdCYgbWluTG9naWNhbFdpZHRoLCBMYXlvdXRVbml0JiBtYXhMb2dpY2FsV2lkdGgpCi17Ci0g
ICAgZmxvYXQgaW5saW5lTWF4ID0gMDsKLSAgICBmbG9hdCBpbmxpbmVNaW4gPSAwOwotCi0gICAg
Y29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlVG9Vc2UgPSBzdHlsZSgpOwotICAgIFJlbmRlckJsb2Nr
KiBjb250YWluaW5nQmxvY2sgPSB0aGlzLT5jb250YWluaW5nQmxvY2soKTsKLSAgICBMYXlvdXRV
bml0IGN3ID0gY29udGFpbmluZ0Jsb2NrID8gY29udGFpbmluZ0Jsb2NrLT5jb250ZW50TG9naWNh
bFdpZHRoKCkgOiBMYXlvdXRVbml0KCk7Ci0KLSAgICAvLyBJZiB3ZSBhcmUgYXQgdGhlIHN0YXJ0
IG9mIGEgbGluZSwgd2Ugd2FudCB0byBpZ25vcmUgYWxsIHdoaXRlLXNwYWNlLgotICAgIC8vIEFs
c28gc3RyaXAgc3BhY2VzIGlmIHdlIHByZXZpb3VzbHkgaGFkIHRleHQgdGhhdCBlbmRlZCBpbiBh
IHRyYWlsaW5nIHNwYWNlLgotICAgIGJvb2wgc3RyaXBGcm9udFNwYWNlcyA9IHRydWU7Ci0gICAg
UmVuZGVyT2JqZWN0KiB0cmFpbGluZ1NwYWNlQ2hpbGQgPSAwOwotCi0gICAgLy8gRmlyZWZveCBh
bmQgT3BlcmEgd2lsbCBhbGxvdyBhIHRhYmxlIGNlbGwgdG8gZ3JvdyB0byBmaXQgYW4gaW1hZ2Ug
aW5zaWRlIGl0IHVuZGVyCi0gICAgLy8gdmVyeSBzcGVjaWZpYyBjaXJ1Y3Vtc3RhbmNlcyAoaW4g
b3JkZXIgdG8gbWF0Y2ggY29tbW9uIFdpbklFIHJlbmRlcmluZ3MpLiAKLSAgICAvLyBOb3Qgc3Vw
cG9ydGluZyB0aGUgcXVpcmsgaGFzIGNhdXNlZCB1cyB0byBtaXMtcmVuZGVyIHNvbWUgcmVhbCBz
aXRlcy4gKFNlZSBCdWd6aWxsYSAxMDUxNy4pIAotICAgIGJvb2wgYWxsb3dJbWFnZXNUb0JyZWFr
ID0gIWRvY3VtZW50KCkuaW5RdWlya3NNb2RlKCkgfHwgIWlzVGFibGVDZWxsKCkgfHwgIXN0eWxl
VG9Vc2UubG9naWNhbFdpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKTsKLQotICAgIGJvb2wgYXV0
b1dyYXAsIG9sZEF1dG9XcmFwOwotICAgIGF1dG9XcmFwID0gb2xkQXV0b1dyYXAgPSBzdHlsZVRv
VXNlLmF1dG9XcmFwKCk7Ci0KLSAgICBJbmxpbmVNaW5NYXhJdGVyYXRvciBjaGlsZEl0ZXJhdG9y
KHRoaXMpOwotCi0gICAgLy8gT25seSBnZXRzIGFkZGVkIHRvIHRoZSBtYXggcHJlZmZlcmVkIHdp
ZHRoIG9uY2UuCi0gICAgYm9vbCBhZGRlZFRleHRJbmRlbnQgPSBmYWxzZTsKLSAgICAvLyBTaWdu
YWxzIHRoZSB0ZXh0IGluZGVudCB3YXMgbW9yZSBuZWdhdGl2ZSB0aGFuIHRoZSBtaW4gcHJlZmVy
cmVkIHdpZHRoCi0gICAgYm9vbCBoYXNSZW1haW5pbmdOZWdhdGl2ZVRleHRJbmRlbnQgPSBmYWxz
ZTsKLQotICAgIExheW91dFVuaXQgdGV4dEluZGVudCA9IG1pbmltdW1WYWx1ZUZvckxlbmd0aChz
dHlsZVRvVXNlLnRleHRJbmRlbnQoKSwgY3cpOwotICAgIFJlbmRlck9iamVjdCogcHJldkZsb2F0
ID0gMDsKLSAgICBib29sIGlzUHJldkNoaWxkSW5saW5lRmxvdyA9IGZhbHNlOwotICAgIGJvb2wg
c2hvdWxkQnJlYWtMaW5lQWZ0ZXJUZXh0ID0gZmFsc2U7Ci0gICAgd2hpbGUgKFJlbmRlck9iamVj
dCogY2hpbGQgPSBjaGlsZEl0ZXJhdG9yLm5leHQoKSkgewotICAgICAgICBhdXRvV3JhcCA9IGNo
aWxkLT5pc1JlcGxhY2VkKCkgPyBjaGlsZC0+cGFyZW50KCktPnN0eWxlKCkuYXV0b1dyYXAoKSA6
IAotICAgICAgICAgICAgY2hpbGQtPnN0eWxlKCkuYXV0b1dyYXAoKTsKLQotICAgICAgICBpZiAo
IWNoaWxkLT5pc0JSKCkpIHsKLSAgICAgICAgICAgIC8vIFN0ZXAgT25lOiBkZXRlcm1pbmUgd2hl
dGhlciBvciBub3Qgd2UgbmVlZCB0byBnbyBhaGVhZCBhbmQKLSAgICAgICAgICAgIC8vIHRlcm1p
bmF0ZSBvdXIgY3VycmVudCBsaW5lLiAgRWFjaCBkaXNjcmV0ZSBjaHVuayBjYW4gYmVjb21lCi0g
ICAgICAgICAgICAvLyB0aGUgbmV3IG1pbi13aWR0aCwgaWYgaXQgaXMgdGhlIHdpZGVzdCBjaHVu
ayBzZWVuIHNvIGZhciwgYW5kCi0gICAgICAgICAgICAvLyBpdCBjYW4gYWxzbyBiZWNvbWUgdGhl
IG1heC13aWR0aC4KLQotICAgICAgICAgICAgLy8gQ2hpbGRyZW4gZmFsbCBpbnRvIHRocmVlIGNh
dGVnb3JpZXM6Ci0gICAgICAgICAgICAvLyAoMSkgQW4gaW5saW5lIGZsb3cgb2JqZWN0LiAgVGhl
c2Ugb2JqZWN0cyBhbHdheXMgaGF2ZSBhIG1pbi9tYXggb2YgMCwKLSAgICAgICAgICAgIC8vIGFu
ZCBhcmUgaW5jbHVkZWQgaW4gdGhlIGl0ZXJhdGlvbiBzb2xlbHkgc28gdGhhdCB0aGVpciBtYXJn
aW5zIGNhbgotICAgICAgICAgICAgLy8gYmUgYWRkZWQgaW4uCi0gICAgICAgICAgICAvLwotICAg
ICAgICAgICAgLy8gKDIpIEFuIGlubGluZSBub24tdGV4dCBub24tZmxvdyBvYmplY3QsIGUuZy4s
IGFuIGlubGluZSByZXBsYWNlZCBlbGVtZW50LgotICAgICAgICAgICAgLy8gVGhlc2Ugb2JqZWN0
cyBjYW4gYWx3YXlzIGJlIG9uIGEgbGluZSBieSB0aGVtc2VsdmVzLCBzbyBpbiB0aGlzIHNpdHVh
dGlvbgotICAgICAgICAgICAgLy8gd2UgbmVlZCB0byBnbyBhaGVhZCBhbmQgYnJlYWsgdGhlIGN1
cnJlbnQgbGluZSwgYW5kIHRoZW4gYWRkIGluIG91ciBvd24KLSAgICAgICAgICAgIC8vIG1hcmdp
bnMgYW5kIG1pbi9tYXggd2lkdGggb24gaXRzIG93biBsaW5lLCBhbmQgdGhlbiB0ZXJtaW5hdGUg
dGhlIGxpbmUuCi0gICAgICAgICAgICAvLwotICAgICAgICAgICAgLy8gKDMpIEEgdGV4dCBvYmpl
Y3QuICBUZXh0IHJ1bnMgY2FuIGhhdmUgYnJlYWthYmxlIGNoYXJhY3RlcnMgYXQgdGhlIHN0YXJ0
LAotICAgICAgICAgICAgLy8gdGhlIG1pZGRsZSBvciB0aGUgZW5kLiAgVGhleSBtYXkgYWxzbyBs
b3NlIHdoaXRlc3BhY2Ugb2ZmIHRoZSBmcm9udCBpZgotICAgICAgICAgICAgLy8gd2UncmUgYWxy
ZWFkeSBpZ25vcmluZyB3aGl0ZXNwYWNlLiAgSW4gb3JkZXIgdG8gY29tcHV0ZSBhY2N1cmF0ZSBt
aW4td2lkdGgKLSAgICAgICAgICAgIC8vIGluZm9ybWF0aW9uLCB3ZSBuZWVkIHRocmVlIHBpZWNl
cyBvZiBpbmZvcm1hdGlvbi4KLSAgICAgICAgICAgIC8vIChhKSB0aGUgbWluLXdpZHRoIG9mIHRo
ZSBmaXJzdCBub24tYnJlYWthYmxlIHJ1bi4gIFNob3VsZCBiZSAwIGlmIHRoZSB0ZXh0IHN0cmlu
ZwotICAgICAgICAgICAgLy8gc3RhcnRzIHdpdGggd2hpdGVzcGFjZS4KLSAgICAgICAgICAgIC8v
IChiKSB0aGUgbWluLXdpZHRoIG9mIHRoZSBsYXN0IG5vbi1icmVha2FibGUgcnVuLiBTaG91bGQg
YmUgMCBpZiB0aGUgdGV4dCBzdHJpbmcKLSAgICAgICAgICAgIC8vIGVuZHMgd2l0aCB3aGl0ZXNw
YWNlLgotICAgICAgICAgICAgLy8gKGMpIHRoZSBtaW4vbWF4IHdpZHRoIG9mIHRoZSBzdHJpbmcg
KHRyaW1tZWQgZm9yIHdoaXRlc3BhY2UpLgotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8v
IElmIHRoZSB0ZXh0IHN0cmluZyBzdGFydHMgd2l0aCB3aGl0ZXNwYWNlLCB0aGVuIHdlIG5lZWQg
dG8gZ28gYWhlYWQgYW5kCi0gICAgICAgICAgICAvLyB0ZXJtaW5hdGUgb3VyIGN1cnJlbnQgbGlu
ZSAodW5sZXNzIHdlJ3JlIGFscmVhZHkgaW4gYSB3aGl0ZXNwYWNlIHN0cmlwcGluZwotICAgICAg
ICAgICAgLy8gbW9kZS4KLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAvLyBJZiB0aGUgdGV4
dCBzdHJpbmcgaGFzIGEgYnJlYWthYmxlIGNoYXJhY3RlciBpbiB0aGUgbWlkZGxlLCBidXQgZGlk
bid0IHN0YXJ0Ci0gICAgICAgICAgICAvLyB3aXRoIHdoaXRlc3BhY2UsIHRoZW4gd2UgYWRkIHRo
ZSB3aWR0aCBvZiB0aGUgZmlyc3Qgbm9uLWJyZWFrYWJsZSBydW4gYW5kCi0gICAgICAgICAgICAv
LyB0aGVuIGVuZCB0aGUgY3VycmVudCBsaW5lLiAgV2UgdGhlbiBuZWVkIHRvIHVzZSB0aGUgaW50
ZXJtZWRpYXRlIG1pbi9tYXggd2lkdGgKLSAgICAgICAgICAgIC8vIHZhbHVlcyAoaWYgYW55IG9m
IHRoZW0gYXJlIGxhcmdlciB0aGFuIG91ciBjdXJyZW50IG1pbi9tYXgpLiAgV2UgdGhlbiBsb29r
IGF0Ci0gICAgICAgICAgICAvLyB0aGUgd2lkdGggb2YgdGhlIGxhc3Qgbm9uLWJyZWFrYWJsZSBy
dW4gYW5kIHVzZSB0aGF0IHRvIHN0YXJ0IGEgbmV3IGxpbmUKLSAgICAgICAgICAgIC8vICh1bmxl
c3Mgd2UgZW5kIGluIHdoaXRlc3BhY2UpLgotICAgICAgICAgICAgY29uc3QgUmVuZGVyU3R5bGUm
IGNoaWxkU3R5bGUgPSBjaGlsZC0+c3R5bGUoKTsKLSAgICAgICAgICAgIGZsb2F0IGNoaWxkTWlu
ID0gMDsKLSAgICAgICAgICAgIGZsb2F0IGNoaWxkTWF4ID0gMDsKLQotICAgICAgICAgICAgaWYg
KCFjaGlsZC0+aXNUZXh0KCkpIHsKLSAgICAgICAgICAgICAgICBpZiAoY2hpbGQtPmlzTGluZUJy
ZWFrT3Bwb3J0dW5pdHkoKSkgewotICAgICAgICAgICAgICAgICAgICBtaW5Mb2dpY2FsV2lkdGgg
PSBwcmVmZXJyZWRXaWR0aChtaW5Mb2dpY2FsV2lkdGgsIGlubGluZU1pbik7Ci0gICAgICAgICAg
ICAgICAgICAgIGlubGluZU1pbiA9IDA7Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAvLyBDYXNlICgxKSBhbmQgKDIpLiAg
SW5saW5lIHJlcGxhY2VkIGFuZCBpbmxpbmUgZmxvdyBlbGVtZW50cy4KLSAgICAgICAgICAgICAg
ICBpZiAoY2hpbGQtPmlzUmVuZGVySW5saW5lKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgLy8g
QWRkIGluIHBhZGRpbmcvYm9yZGVyL21hcmdpbiBmcm9tIHRoZSBhcHByb3ByaWF0ZSBzaWRlIG9m
Ci0gICAgICAgICAgICAgICAgICAgIC8vIHRoZSBlbGVtZW50LgotICAgICAgICAgICAgICAgICAg
ICBmbG9hdCBicG0gPSBnZXRCb3JkZXJQYWRkaW5nTWFyZ2luKHRvUmVuZGVySW5saW5lKGNoaWxk
KSwgY2hpbGRJdGVyYXRvci5lbmRPZklubGluZSk7Ci0gICAgICAgICAgICAgICAgICAgIGNoaWxk
TWluICs9IGJwbTsKLSAgICAgICAgICAgICAgICAgICAgY2hpbGRNYXggKz0gYnBtOwotCi0gICAg
ICAgICAgICAgICAgICAgIGlubGluZU1pbiArPSBjaGlsZE1pbjsKLSAgICAgICAgICAgICAgICAg
ICAgaW5saW5lTWF4ICs9IGNoaWxkTWF4OwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgICAgICAgICAgY2hpbGQtPnNldFByZWZlcnJlZExvZ2ljYWxXaWR0aHNEaXJ0eShmYWxzZSk7
Ci0gICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgLy8gSW5saW5l
IHJlcGxhY2VkIGVsdHMgYWRkIGluIHRoZWlyIG1hcmdpbnMgdG8gdGhlaXIgbWluL21heCB2YWx1
ZXMuCi0gICAgICAgICAgICAgICAgICAgIExheW91dFVuaXQgbWFyZ2lucyA9IDA7Ci0gICAgICAg
ICAgICAgICAgICAgIExlbmd0aCBzdGFydE1hcmdpbiA9IGNoaWxkU3R5bGUubWFyZ2luU3RhcnQo
KTsKLSAgICAgICAgICAgICAgICAgICAgTGVuZ3RoIGVuZE1hcmdpbiA9IGNoaWxkU3R5bGUubWFy
Z2luRW5kKCk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChzdGFydE1hcmdpbi5pc0ZpeGVkKCkp
Ci0gICAgICAgICAgICAgICAgICAgICAgICBtYXJnaW5zICs9IExheW91dFVuaXQ6OmZyb21GbG9h
dENlaWwoc3RhcnRNYXJnaW4udmFsdWUoKSk7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChlbmRN
YXJnaW4uaXNGaXhlZCgpKQotICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2lucyArPSBMYXlv
dXRVbml0Ojpmcm9tRmxvYXRDZWlsKGVuZE1hcmdpbi52YWx1ZSgpKTsKLSAgICAgICAgICAgICAg
ICAgICAgY2hpbGRNaW4gKz0gbWFyZ2lucy5jZWlsVG9GbG9hdCgpOwotICAgICAgICAgICAgICAg
ICAgICBjaGlsZE1heCArPSBtYXJnaW5zLmNlaWxUb0Zsb2F0KCk7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAoIWNoaWxkLT5pc1JlbmRlcklubGlu
ZSgpICYmICFjaGlsZC0+aXNUZXh0KCkpIHsKLSAgICAgICAgICAgICAgICAvLyBDYXNlICgyKS4g
SW5saW5lIHJlcGxhY2VkIGVsZW1lbnRzIGFuZCBmbG9hdHMuCi0gICAgICAgICAgICAgICAgLy8g
R28gYWhlYWQgYW5kIHRlcm1pbmF0ZSB0aGUgY3VycmVudCBsaW5lIGFzIGZhciBhcwotICAgICAg
ICAgICAgICAgIC8vIG1pbndpZHRoIGlzIGNvbmNlcm5lZC4KLSAgICAgICAgICAgICAgICBjaGls
ZE1pbiArPSBjaGlsZC0+bWluUHJlZmVycmVkTG9naWNhbFdpZHRoKCkuY2VpbFRvRmxvYXQoKTsK
LSAgICAgICAgICAgICAgICBjaGlsZE1heCArPSBjaGlsZC0+bWF4UHJlZmVycmVkTG9naWNhbFdp
ZHRoKCkuY2VpbFRvRmxvYXQoKTsKLQotICAgICAgICAgICAgICAgIGJvb2wgY2xlYXJQcmV2aW91
c0Zsb2F0OwotICAgICAgICAgICAgICAgIGlmIChjaGlsZC0+aXNGbG9hdGluZygpKSB7Ci0gICAg
ICAgICAgICAgICAgICAgIGNsZWFyUHJldmlvdXNGbG9hdCA9IChwcmV2RmxvYXQKLSAgICAgICAg
ICAgICAgICAgICAgICAgICYmICgocHJldkZsb2F0LT5zdHlsZSgpLmZsb2F0aW5nKCkgPT0gTGVm
dEZsb2F0ICYmIChjaGlsZFN0eWxlLmNsZWFyKCkgJiBDTEVGVCkpCi0gICAgICAgICAgICAgICAg
ICAgICAgICAgICAgfHwgKHByZXZGbG9hdC0+c3R5bGUoKS5mbG9hdGluZygpID09IFJpZ2h0Rmxv
YXQgJiYgKGNoaWxkU3R5bGUuY2xlYXIoKSAmIENSSUdIVCkpKSk7Ci0gICAgICAgICAgICAgICAg
ICAgIHByZXZGbG9hdCA9IGNoaWxkOwotICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAg
ICAgICAgICAgICBjbGVhclByZXZpb3VzRmxvYXQgPSBmYWxzZTsKLQotICAgICAgICAgICAgICAg
IGJvb2wgY2FuQnJlYWtSZXBsYWNlZEVsZW1lbnQgPSAhY2hpbGQtPmlzSW1hZ2UoKSB8fCBhbGxv
d0ltYWdlc1RvQnJlYWs7Ci0gICAgICAgICAgICAgICAgaWYgKChjYW5CcmVha1JlcGxhY2VkRWxl
bWVudCAmJiAoYXV0b1dyYXAgfHwgb2xkQXV0b1dyYXApICYmICghaXNQcmV2Q2hpbGRJbmxpbmVG
bG93IHx8IHNob3VsZEJyZWFrTGluZUFmdGVyVGV4dCkpIHx8IGNsZWFyUHJldmlvdXNGbG9hdCkg
ewotICAgICAgICAgICAgICAgICAgICBtaW5Mb2dpY2FsV2lkdGggPSBwcmVmZXJyZWRXaWR0aCht
aW5Mb2dpY2FsV2lkdGgsIGlubGluZU1pbik7Ci0gICAgICAgICAgICAgICAgICAgIGlubGluZU1p
biA9IDA7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gSWYgd2UncmUg
c3VwcG9zZWQgdG8gY2xlYXIgdGhlIHByZXZpb3VzIGZsb2F0LCB0aGVuIHRlcm1pbmF0ZSBtYXh3
aWR0aCBhcyB3ZWxsLgotICAgICAgICAgICAgICAgIGlmIChjbGVhclByZXZpb3VzRmxvYXQpIHsK
LSAgICAgICAgICAgICAgICAgICAgbWF4TG9naWNhbFdpZHRoID0gcHJlZmVycmVkV2lkdGgobWF4
TG9naWNhbFdpZHRoLCBpbmxpbmVNYXgpOwotICAgICAgICAgICAgICAgICAgICBpbmxpbmVNYXgg
PSAwOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIEFkZCBpbiB0ZXh0
LWluZGVudC4gIFRoaXMgaXMgYWRkZWQgaW4gb25seSBvbmNlLgotICAgICAgICAgICAgICAgIGlm
ICghYWRkZWRUZXh0SW5kZW50ICYmICFjaGlsZC0+aXNGbG9hdGluZygpKSB7Ci0gICAgICAgICAg
ICAgICAgICAgIExheW91dFVuaXQgY2VpbGVkSW5kZW50ID0gdGV4dEluZGVudC5jZWlsVG9GbG9h
dCgpOwotICAgICAgICAgICAgICAgICAgICBjaGlsZE1pbiArPSBjZWlsZWRJbmRlbnQ7Ci0gICAg
ICAgICAgICAgICAgICAgIGNoaWxkTWF4ICs9IGNlaWxlZEluZGVudDsKLQotICAgICAgICAgICAg
ICAgICAgICBpZiAoY2hpbGRNaW4gPCAwKQotICAgICAgICAgICAgICAgICAgICAgICAgdGV4dElu
ZGVudCA9IExheW91dFVuaXQ6OmZyb21GbG9hdENlaWwoY2hpbGRNaW4pOwotICAgICAgICAgICAg
ICAgICAgICBlbHNlCi0gICAgICAgICAgICAgICAgICAgICAgICBhZGRlZFRleHRJbmRlbnQgPSB0
cnVlOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIEFkZCBvdXIgd2lk
dGggdG8gdGhlIG1heC4KLSAgICAgICAgICAgICAgICBpbmxpbmVNYXggKz0gc3RkOjptYXg8Zmxv
YXQ+KDAsIGNoaWxkTWF4KTsKLQotICAgICAgICAgICAgICAgIGlmICghYXV0b1dyYXAgfHwgIWNh
bkJyZWFrUmVwbGFjZWRFbGVtZW50IHx8IChpc1ByZXZDaGlsZElubGluZUZsb3cgJiYgIXNob3Vs
ZEJyZWFrTGluZUFmdGVyVGV4dCkpIHsKLSAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkLT5p
c0Zsb2F0aW5nKCkpCi0gICAgICAgICAgICAgICAgICAgICAgICBtaW5Mb2dpY2FsV2lkdGggPSBw
cmVmZXJyZWRXaWR0aChtaW5Mb2dpY2FsV2lkdGgsIGNoaWxkTWluKTsKLSAgICAgICAgICAgICAg
ICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgaW5saW5lTWluICs9IGNoaWxkTWlu
OwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIE5vdyBj
aGVjayBvdXIgbGluZS4KLSAgICAgICAgICAgICAgICAgICAgbWluTG9naWNhbFdpZHRoID0gcHJl
ZmVycmVkV2lkdGgobWluTG9naWNhbFdpZHRoLCBjaGlsZE1pbik7Ci0KLSAgICAgICAgICAgICAg
ICAgICAgLy8gTm93IHN0YXJ0IGEgbmV3IGxpbmUuCi0gICAgICAgICAgICAgICAgICAgIGlubGlu
ZU1pbiA9IDA7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgaWYgKGF1dG9X
cmFwICYmIGNhbkJyZWFrUmVwbGFjZWRFbGVtZW50ICYmIGlzUHJldkNoaWxkSW5saW5lRmxvdykg
ewotICAgICAgICAgICAgICAgICAgICBtaW5Mb2dpY2FsV2lkdGggPSBwcmVmZXJyZWRXaWR0aCht
aW5Mb2dpY2FsV2lkdGgsIGlubGluZU1pbik7Ci0gICAgICAgICAgICAgICAgICAgIGlubGluZU1p
biA9IDA7Ci0gICAgICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAgICAgLy8gV2UgYXJlIG5v
IGxvbmdlciBzdHJpcHBpbmcgd2hpdGVzcGFjZSBhdCB0aGUgc3RhcnQgb2YKLSAgICAgICAgICAg
ICAgICAvLyBhIGxpbmUuCi0gICAgICAgICAgICAgICAgaWYgKCFjaGlsZC0+aXNGbG9hdGluZygp
KSB7Ci0gICAgICAgICAgICAgICAgICAgIHN0cmlwRnJvbnRTcGFjZXMgPSBmYWxzZTsKLSAgICAg
ICAgICAgICAgICAgICAgdHJhaWxpbmdTcGFjZUNoaWxkID0gMDsKLSAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGNoaWxkLT5pc1RleHQoKSkgewotICAgICAgICAgICAg
ICAgIC8vIENhc2UgKDMpLiBUZXh0LgotICAgICAgICAgICAgICAgIFJlbmRlclRleHQqIHQgPSB0
b1JlbmRlclRleHQoY2hpbGQpOwotCi0gICAgICAgICAgICAgICAgaWYgKHQtPnN0eWxlKCkuaGFz
VGV4dENvbWJpbmUoKSAmJiB0LT5pc0NvbWJpbmVUZXh0KCkpCi0gICAgICAgICAgICAgICAgICAg
IHRvUmVuZGVyQ29tYmluZVRleHQoKnQpLmNvbWJpbmVUZXh0KCk7Ci0KLSAgICAgICAgICAgICAg
ICAvLyBEZXRlcm1pbmUgaWYgd2UgaGF2ZSBhIGJyZWFrYWJsZSBjaGFyYWN0ZXIuICBQYXNzIGlu
Ci0gICAgICAgICAgICAgICAgLy8gd2hldGhlciBvciBub3Qgd2Ugc2hvdWxkIGlnbm9yZSBhbnkg
c3BhY2VzIGF0IHRoZSBmcm9udAotICAgICAgICAgICAgICAgIC8vIG9mIHRoZSBzdHJpbmcuICBJ
ZiB0aG9zZSBhcmUgZ29pbmcgdG8gYmUgc3RyaXBwZWQgb3V0LAotICAgICAgICAgICAgICAgIC8v
IHRoZW4gdGhleSBzaG91bGRuJ3QgYmUgY29uc2lkZXJlZCBpbiB0aGUgYnJlYWthYmxlIGNoYXIK
LSAgICAgICAgICAgICAgICAvLyBjaGVjay4KLSAgICAgICAgICAgICAgICBib29sIGhhc0JyZWFr
YWJsZUNoYXIsIGhhc0JyZWFrOwotICAgICAgICAgICAgICAgIGZsb2F0IGJlZ2luTWluLCBlbmRN
aW47Ci0gICAgICAgICAgICAgICAgYm9vbCBiZWdpbldTLCBlbmRXUzsKLSAgICAgICAgICAgICAg
ICBmbG9hdCBiZWdpbk1heCwgZW5kTWF4OwotICAgICAgICAgICAgICAgIHQtPnRyaW1tZWRQcmVm
V2lkdGhzKGlubGluZU1heCwgYmVnaW5NaW4sIGJlZ2luV1MsIGVuZE1pbiwgZW5kV1MsCi0gICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzQnJlYWthYmxlQ2hhciwgaGFzQnJl
YWssIGJlZ2luTWF4LCBlbmRNYXgsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgY2hpbGRNaW4sIGNoaWxkTWF4LCBzdHJpcEZyb250U3BhY2VzKTsKLQotICAgICAgICAgICAg
ICAgIC8vIFRoaXMgdGV4dCBvYmplY3Qgd2lsbCBub3QgYmUgcmVuZGVyZWQsIGJ1dCBpdCBtYXkg
c3RpbGwgcHJvdmlkZSBhIGJyZWFraW5nIG9wcG9ydHVuaXR5LgotICAgICAgICAgICAgICAgIGlm
ICghaGFzQnJlYWsgJiYgY2hpbGRNYXggPT0gMCkgewotICAgICAgICAgICAgICAgICAgICBpZiAo
YXV0b1dyYXAgJiYgKGJlZ2luV1MgfHwgZW5kV1MpKSB7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBtaW5Mb2dpY2FsV2lkdGggPSBwcmVmZXJyZWRXaWR0aChtaW5Mb2dpY2FsV2lkdGgsIGlubGlu
ZU1pbik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbmxpbmVNaW4gPSAwOwotICAgICAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAg
ICAgIH0KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICBpZiAoc3RyaXBGcm9udFNw
YWNlcykKLSAgICAgICAgICAgICAgICAgICAgdHJhaWxpbmdTcGFjZUNoaWxkID0gY2hpbGQ7Ci0g
ICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICB0cmFpbGluZ1NwYWNlQ2hp
bGQgPSAwOwotCi0gICAgICAgICAgICAgICAgLy8gQWRkIGluIHRleHQtaW5kZW50LiAgVGhpcyBp
cyBhZGRlZCBpbiBvbmx5IG9uY2UuCi0gICAgICAgICAgICAgICAgZmxvYXQgdGkgPSAwOwotICAg
ICAgICAgICAgICAgIGlmICghYWRkZWRUZXh0SW5kZW50IHx8IGhhc1JlbWFpbmluZ05lZ2F0aXZl
VGV4dEluZGVudCkgewotICAgICAgICAgICAgICAgICAgICB0aSA9IHRleHRJbmRlbnQuY2VpbFRv
RmxvYXQoKTsKLSAgICAgICAgICAgICAgICAgICAgY2hpbGRNaW4gKz0gdGk7Ci0gICAgICAgICAg
ICAgICAgICAgIGJlZ2luTWluICs9IHRpOwotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAg
ICAgICAgICAgICAgLy8gSXQgdGhlIHRleHQgaW5kZW50IG5lZ2F0aXZlIGFuZCBsYXJnZXIgdGhh
biB0aGUgY2hpbGQgbWluaW11bSwgd2UgcmUtdXNlIHRoZSByZW1haW5kZXIKLSAgICAgICAgICAg
ICAgICAgICAgLy8gaW4gZnV0dXJlIG1pbmltdW0gY2FsY3VsYXRpb25zLCBidXQgdXNpbmcgdGhl
IG5lZ2F0aXZlIHZhbHVlIGFnYWluIG9uIHRoZSBtYXhpbXVtCi0gICAgICAgICAgICAgICAgICAg
IC8vIHdpbGwgbGVhZCB0byB1bmRlci1jb3VudGluZyB0aGUgbWF4IHByZWYgd2lkdGguCi0gICAg
ICAgICAgICAgICAgICAgIGlmICghYWRkZWRUZXh0SW5kZW50KSB7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBjaGlsZE1heCArPSB0aTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJlZ2luTWF4
ICs9IHRpOwotICAgICAgICAgICAgICAgICAgICAgICAgYWRkZWRUZXh0SW5kZW50ID0gdHJ1ZTsK
LSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKGNoaWxkTWluIDwgMCkgewotICAgICAgICAgICAgICAgICAgICAgICAgdGV4
dEluZGVudCA9IGNoaWxkTWluOwotICAgICAgICAgICAgICAgICAgICAgICAgaGFzUmVtYWluaW5n
TmVnYXRpdmVUZXh0SW5kZW50ID0gdHJ1ZTsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAg
ICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAvLyBJZiB3ZSBo
YXZlIG5vIGJyZWFrYWJsZSBjaGFyYWN0ZXJzIGF0IGFsbCwKLSAgICAgICAgICAgICAgICAvLyB0
aGVuIHRoaXMgaXMgdGhlIGVhc3kgY2FzZS4gV2UgYWRkIG91cnNlbHZlcyB0byB0aGUgY3VycmVu
dAotICAgICAgICAgICAgICAgIC8vIG1pbiBhbmQgbWF4IGFuZCBjb250aW51ZS4KLSAgICAgICAg
ICAgICAgICBpZiAoIWhhc0JyZWFrYWJsZUNoYXIpIHsKLSAgICAgICAgICAgICAgICAgICAgaW5s
aW5lTWluICs9IGNoaWxkTWluOwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAg
ICAgICAgICAgIC8vIFdlIGhhdmUgYSBicmVha2FibGUgY2hhcmFjdGVyLiAgTm93IHdlIG5lZWQg
dG8ga25vdyBpZgotICAgICAgICAgICAgICAgICAgICAvLyB3ZSBzdGFydCBhbmQgZW5kIHdpdGgg
d2hpdGVzcGFjZS4KLSAgICAgICAgICAgICAgICAgICAgaWYgKGJlZ2luV1MpCi0gICAgICAgICAg
ICAgICAgICAgICAgICAvLyBHbyBhaGVhZCBhbmQgZW5kIHRoZSBjdXJyZW50IGxpbmUuCi0gICAg
ICAgICAgICAgICAgICAgICAgICBtaW5Mb2dpY2FsV2lkdGggPSBwcmVmZXJyZWRXaWR0aChtaW5M
b2dpY2FsV2lkdGgsIGlubGluZU1pbik7Ci0gICAgICAgICAgICAgICAgICAgIGVsc2UgewotICAg
ICAgICAgICAgICAgICAgICAgICAgaW5saW5lTWluICs9IGJlZ2luTWluOwotICAgICAgICAgICAg
ICAgICAgICAgICAgbWluTG9naWNhbFdpZHRoID0gcHJlZmVycmVkV2lkdGgobWluTG9naWNhbFdp
ZHRoLCBpbmxpbmVNaW4pOwotICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRNaW4gLT0gdGk7
Ci0gICAgICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgICAgICBpbmxpbmVNaW4g
PSBjaGlsZE1pbjsKLQotICAgICAgICAgICAgICAgICAgICBpZiAoZW5kV1MpIHsKLSAgICAgICAg
ICAgICAgICAgICAgICAgIC8vIFdlIGVuZCBpbiB3aGl0ZXNwYWNlLCB3aGljaCBtZWFucyB3ZSBj
YW4gZ28gYWhlYWQKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFuZCBlbmQgb3VyIGN1cnJl
bnQgbGluZS4KLSAgICAgICAgICAgICAgICAgICAgICAgIG1pbkxvZ2ljYWxXaWR0aCA9IHByZWZl
cnJlZFdpZHRoKG1pbkxvZ2ljYWxXaWR0aCwgaW5saW5lTWluKTsKLSAgICAgICAgICAgICAgICAg
ICAgICAgIGlubGluZU1pbiA9IDA7Ci0gICAgICAgICAgICAgICAgICAgICAgICBzaG91bGRCcmVh
a0xpbmVBZnRlclRleHQgPSBmYWxzZTsKLSAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIG1pbkxvZ2ljYWxXaWR0aCA9IHByZWZlcnJlZFdpZHRoKG1p
bkxvZ2ljYWxXaWR0aCwgaW5saW5lTWluKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGlubGlu
ZU1pbiA9IGVuZE1pbjsKLSAgICAgICAgICAgICAgICAgICAgICAgIHNob3VsZEJyZWFrTGluZUFm
dGVyVGV4dCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICB9
Ci0KLSAgICAgICAgICAgICAgICBpZiAoaGFzQnJlYWspIHsKLSAgICAgICAgICAgICAgICAgICAg
aW5saW5lTWF4ICs9IGJlZ2luTWF4OwotICAgICAgICAgICAgICAgICAgICBtYXhMb2dpY2FsV2lk
dGggPSBwcmVmZXJyZWRXaWR0aChtYXhMb2dpY2FsV2lkdGgsIGlubGluZU1heCk7Ci0gICAgICAg
ICAgICAgICAgICAgIG1heExvZ2ljYWxXaWR0aCA9IHByZWZlcnJlZFdpZHRoKG1heExvZ2ljYWxX
aWR0aCwgY2hpbGRNYXgpOwotICAgICAgICAgICAgICAgICAgICBpbmxpbmVNYXggPSBlbmRNYXg7
Ci0gICAgICAgICAgICAgICAgICAgIGFkZGVkVGV4dEluZGVudCA9IHRydWU7Ci0gICAgICAgICAg
ICAgICAgfSBlbHNlCi0gICAgICAgICAgICAgICAgICAgIGlubGluZU1heCArPSBzdGQ6Om1heDxm
bG9hdD4oMCwgY2hpbGRNYXgpOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICAvLyBJZ25v
cmUgc3BhY2VzIGFmdGVyIGEgbGlzdCBtYXJrZXIuCi0gICAgICAgICAgICBpZiAoY2hpbGQtPmlz
TGlzdE1hcmtlcigpKQotICAgICAgICAgICAgICAgIHN0cmlwRnJvbnRTcGFjZXMgPSB0cnVlOwot
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgbWluTG9naWNhbFdpZHRoID0gcHJlZmVycmVk
V2lkdGgobWluTG9naWNhbFdpZHRoLCBpbmxpbmVNaW4pOwotICAgICAgICAgICAgbWF4TG9naWNh
bFdpZHRoID0gcHJlZmVycmVkV2lkdGgobWF4TG9naWNhbFdpZHRoLCBpbmxpbmVNYXgpOwotICAg
ICAgICAgICAgaW5saW5lTWluID0gaW5saW5lTWF4ID0gMDsKLSAgICAgICAgICAgIHN0cmlwRnJv
bnRTcGFjZXMgPSB0cnVlOwotICAgICAgICAgICAgdHJhaWxpbmdTcGFjZUNoaWxkID0gMDsKLSAg
ICAgICAgICAgIGFkZGVkVGV4dEluZGVudCA9IHRydWU7Ci0gICAgICAgIH0KLQotICAgICAgICBp
ZiAoIWNoaWxkLT5pc1RleHQoKSAmJiBjaGlsZC0+aXNSZW5kZXJJbmxpbmUoKSkKLSAgICAgICAg
ICAgIGlzUHJldkNoaWxkSW5saW5lRmxvdyA9IHRydWU7Ci0gICAgICAgIGVsc2UKLSAgICAgICAg
ICAgIGlzUHJldkNoaWxkSW5saW5lRmxvdyA9IGZhbHNlOwotCi0gICAgICAgIG9sZEF1dG9XcmFw
ID0gYXV0b1dyYXA7Ci0gICAgfQotCi0gICAgaWYgKHN0eWxlVG9Vc2UuY29sbGFwc2VXaGl0ZVNw
YWNlKCkpCi0gICAgICAgIHN0cmlwVHJhaWxpbmdTcGFjZShpbmxpbmVNYXgsIGlubGluZU1pbiwg
dHJhaWxpbmdTcGFjZUNoaWxkKTsKLQotICAgIG1pbkxvZ2ljYWxXaWR0aCA9IHByZWZlcnJlZFdp
ZHRoKG1pbkxvZ2ljYWxXaWR0aCwgaW5saW5lTWluKTsKLSAgICBtYXhMb2dpY2FsV2lkdGggPSBw
cmVmZXJyZWRXaWR0aChtYXhMb2dpY2FsV2lkdGgsIGlubGluZU1heCk7Ci19Ci0KIHZvaWQgUmVu
ZGVyQmxvY2s6OmNvbXB1dGVCbG9ja1ByZWZlcnJlZExvZ2ljYWxXaWR0aHMoTGF5b3V0VW5pdCYg
bWluTG9naWNhbFdpZHRoLCBMYXlvdXRVbml0JiBtYXhMb2dpY2FsV2lkdGgpIGNvbnN0CiB7CiAg
ICAgY29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlVG9Vc2UgPSBzdHlsZSgpOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmggYi9Tb3VyY2UvV2ViQ29yZS9y
ZW5kZXJpbmcvUmVuZGVyQmxvY2suaAppbmRleCBlZTcwZTc2M2JjOGUyYTAwMDVkYTM2YzE5ODc4
NmFjNjJlYTBiOTNhLi45YTRjZjg4YTNjNDUyNTU1M2Q2ODgwODA0YTA5NDYzNmYzZGVmOGViIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suaApAQCAtNDQxLDggKzQ0MSw2IEBA
IHByaXZhdGU6CiAKICAgICB2aXJ0dWFsIGJvb2wgaXNQb2ludEluT3ZlcmZsb3dDb250cm9sKEhp
dFRlc3RSZXN1bHQmLCBjb25zdCBMYXlvdXRQb2ludCYgbG9jYXRpb25JbkNvbnRhaW5lciwgY29u
c3QgTGF5b3V0UG9pbnQmIGFjY3VtdWxhdGVkT2Zmc2V0KTsKIAotICAgIC8vIEZJWE1FOiBNYWtl
IHRoaXMgbWV0aG9kIGNvbnN0IHNvIHdlIGNhbiByZW1vdmUgdGhlIGNvbnN0X2Nhc3QgaW4gY29t
cHV0ZUludHJpbnNpY0xvZ2ljYWxXaWR0aHMuCi0gICAgdm9pZCBjb21wdXRlSW5saW5lUHJlZmVy
cmVkTG9naWNhbFdpZHRocyhMYXlvdXRVbml0JiBtaW5Mb2dpY2FsV2lkdGgsIExheW91dFVuaXQm
IG1heExvZ2ljYWxXaWR0aCk7CiAgICAgdm9pZCBjb21wdXRlQmxvY2tQcmVmZXJyZWRMb2dpY2Fs
V2lkdGhzKExheW91dFVuaXQmIG1pbkxvZ2ljYWxXaWR0aCwgTGF5b3V0VW5pdCYgbWF4TG9naWNh
bFdpZHRoKSBjb25zdDsKIAogICAgIC8vIE9idGFpbnMgdGhlIG5lYXJlc3QgZW5jbG9zaW5nIGJs
b2NrIChpbmNsdWRpbmcgdGhpcyBibG9jaykgdGhhdCBjb250cmlidXRlcyBhIGZpcnN0LWxpbmUg
c3R5bGUgdG8gb3VyIGlubGluZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJsb2NrRmxvdy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxv
Y2tGbG93LmNwcAppbmRleCA1ZDk1ZjNlMTZiYTNiMTY0NmM4OWIyNGI1ZjA2NzRhYTAxNGI3NzY4
Li5jMThhYjhjMzUyYTM3OGYzYjdmYzQ0YjFjMTk3MWYyNDZlNTdhYzllIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmNwcApAQCAtMzIsNyArMzIsOSBAQAog
I2luY2x1ZGUgIkhpdFRlc3RMb2NhdGlvbi5oIgogI2luY2x1ZGUgIklubGluZVRleHRCb3guaCIK
ICNpbmNsdWRlICJMYXlvdXRSZXBhaW50ZXIuaCIKKyNpbmNsdWRlICJSZW5kZXJDb21iaW5lVGV4
dC5oIgogI2luY2x1ZGUgIlJlbmRlckZsb3dUaHJlYWQuaCIKKyNpbmNsdWRlICJSZW5kZXJJbmxp
bmUuaCIKICNpbmNsdWRlICJSZW5kZXJJdGVyYXRvci5oIgogI2luY2x1ZGUgIlJlbmRlckxheWVy
LmgiCiAjaW5jbHVkZSAiUmVuZGVyTGlzdEl0ZW0uaCIKQEAgLTM1MSwxMCArMzUzLDkgQEAgdm9p
ZCBSZW5kZXJCbG9ja0Zsb3c6OmFkanVzdEludHJpbnNpY0xvZ2ljYWxXaWR0aHNGb3JDb2x1bW5z
KExheW91dFVuaXQmIG1pbkxvZ2kKIAogdm9pZCBSZW5kZXJCbG9ja0Zsb3c6OmNvbXB1dGVJbnRy
aW5zaWNMb2dpY2FsV2lkdGhzKExheW91dFVuaXQmIG1pbkxvZ2ljYWxXaWR0aCwgTGF5b3V0VW5p
dCYgbWF4TG9naWNhbFdpZHRoKSBjb25zdAogewotICAgIGlmIChjaGlsZHJlbklubGluZSgpKSB7
Ci0gICAgICAgIC8vIEZJWE1FOiBSZW1vdmUgdGhpcyBjb25zdF9jYXN0LgotICAgICAgICBjb25z
dF9jYXN0PFJlbmRlckJsb2NrRmxvdyo+KHRoaXMpLT5jb21wdXRlSW5saW5lUHJlZmVycmVkTG9n
aWNhbFdpZHRocyhtaW5Mb2dpY2FsV2lkdGgsIG1heExvZ2ljYWxXaWR0aCk7Ci0gICAgfSBlbHNl
CisgICAgaWYgKGNoaWxkcmVuSW5saW5lKCkpCisgICAgICAgIGNvbXB1dGVJbmxpbmVQcmVmZXJy
ZWRMb2dpY2FsV2lkdGhzKG1pbkxvZ2ljYWxXaWR0aCwgbWF4TG9naWNhbFdpZHRoKTsKKyAgICBl
bHNlCiAgICAgICAgIGNvbXB1dGVCbG9ja1ByZWZlcnJlZExvZ2ljYWxXaWR0aHMobWluTG9naWNh
bFdpZHRoLCBtYXhMb2dpY2FsV2lkdGgpOwogCiAgICAgbWF4TG9naWNhbFdpZHRoID0gc3RkOjpt
YXgobWluTG9naWNhbFdpZHRoLCBtYXhMb2dpY2FsV2lkdGgpOwpAQCAtMzc4MSw1ICszNzgyLDQx
NiBAQCBib29sIFJlbmRlckJsb2NrRmxvdzo6aXNMZWZ0TGF5b3V0T3ZlcmZsb3dBbGxvd2VkKCkg
Y29uc3QKICAgICByZXR1cm4gaGFzTGVmdE92ZXJmbG93OwogfQogCitzdHJ1Y3QgSW5saW5lTWlu
TWF4SXRlcmF0b3IgeworLyogSW5saW5lTWluTWF4SXRlcmF0b3IgaXMgYSBjbGFzcyB0aGF0IHdp
bGwgaXRlcmF0ZSBvdmVyIGFsbCByZW5kZXIgb2JqZWN0cyB0aGF0IGNvbnRyaWJ1dGUgdG8KKyAg
IGlubGluZSBtaW4vbWF4IHdpZHRoIGNhbGN1bGF0aW9ucy4gIE5vdGUgdGhlIGZvbGxvd2luZyBh
Ym91dCB0aGUgd2F5IGl0IHdhbGtzOgorICAgKDEpIFBvc2l0aW9uZWQgY29udGVudCBpcyBza2lw
cGVkIChzaW5jZSBpdCBkb2VzIG5vdCBjb250cmlidXRlIHRvIG1pbi9tYXggd2lkdGggb2YgYSBi
bG9jaykKKyAgICgyKSBXZSBkbyBub3QgZHJpbGwgaW50byB0aGUgY2hpbGRyZW4gb2YgZmxvYXRz
IG9yIHJlcGxhY2VkIGVsZW1lbnRzLCBzaW5jZSB5b3UgY2FuJ3QgYnJlYWsKKyAgICAgICBpbiB0
aGUgbWlkZGxlIG9mIHN1Y2ggYW4gZWxlbWVudC4KKyAgICgzKSBJbmxpbmUgZmxvd3MgKGUuZy4s
IDxhPiwgPHNwYW4+LCA8aT4pIGFyZSB3YWxrZWQgdHdpY2UsIHNpbmNlIGVhY2ggc2lkZSBjYW4g
aGF2ZQorICAgICAgIGRpc3RpbmN0IGJvcmRlcnMvbWFyZ2luL3BhZGRpbmcgdGhhdCBjb250cmli
dXRlIHRvIHRoZSBtaW4vbWF4IHdpZHRoLgorKi8KKyAgICBjb25zdCBSZW5kZXJPYmplY3QqIHBh
cmVudDsKKyAgICBSZW5kZXJPYmplY3QqIGN1cnJlbnQ7CisgICAgYm9vbCBlbmRPZklubGluZTsK
KyAgICBib29sIGluaXRpYWw7CisKKyAgICBJbmxpbmVNaW5NYXhJdGVyYXRvcihjb25zdCBSZW5k
ZXJPYmplY3QqIHApCisgICAgICAgIDogcGFyZW50KHApCisgICAgICAgICwgY3VycmVudChudWxs
cHRyKQorICAgICAgICAsIGVuZE9mSW5saW5lKGZhbHNlKQorICAgICAgICAsIGluaXRpYWwodHJ1
ZSkKKyAgICAgICAgeyB9CisKKyAgICBSZW5kZXJPYmplY3QqIG5leHQoKTsKK307CisKK1JlbmRl
ck9iamVjdCogSW5saW5lTWluTWF4SXRlcmF0b3I6Om5leHQoKQoreworICAgIFJlbmRlck9iamVj
dCogcmVzdWx0ID0gbnVsbHB0cjsKKyAgICBib29sIG9sZEVuZE9mSW5saW5lID0gZW5kT2ZJbmxp
bmU7CisgICAgZW5kT2ZJbmxpbmUgPSBmYWxzZTsKKyAgICBkbyB7CisgICAgICAgIGlmICghb2xk
RW5kT2ZJbmxpbmUgJiYgKGN1cnJlbnQgJiYgIWN1cnJlbnQtPmlzRmxvYXRpbmcoKSAmJiAhY3Vy
cmVudC0+aXNSZXBsYWNlZCgpICYmICFjdXJyZW50LT5pc091dE9mRmxvd1Bvc2l0aW9uZWQoKSkp
CisgICAgICAgICAgICByZXN1bHQgPSBjdXJyZW50LT5maXJzdENoaWxkU2xvdygpOworICAgICAg
ICBlbHNlIGlmIChpbml0aWFsKSB7CisgICAgICAgICAgICByZXN1bHQgPSBwYXJlbnQtPmZpcnN0
Q2hpbGRTbG93KCk7CisgICAgICAgICAgICBpbml0aWFsID0gZmFsc2U7CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAoIXJlc3VsdCkgeworICAgICAgICAgICAgLy8gV2UgaGl0IHRoZSBlbmQgb2Yg
b3VyIGlubGluZS4gKEl0IHdhcyBlbXB0eSwgZS5nLiwgPHNwYW4+PC9zcGFuPi4pCisgICAgICAg
ICAgICBpZiAoIW9sZEVuZE9mSW5saW5lICYmIGN1cnJlbnQgJiYgY3VycmVudC0+aXNSZW5kZXJJ
bmxpbmUoKSkgeworICAgICAgICAgICAgICAgIHJlc3VsdCA9IGN1cnJlbnQ7CisgICAgICAgICAg
ICAgICAgZW5kT2ZJbmxpbmUgPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICB3aGlsZSAoY3VycmVudCAmJiBjdXJyZW50ICE9IHBhcmVu
dCkgeworICAgICAgICAgICAgICAgIHJlc3VsdCA9IGN1cnJlbnQtPm5leHRTaWJsaW5nKCk7Cisg
ICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICAgICAgY3VycmVudCA9IGN1cnJlbnQtPnBhcmVudCgpOworICAgICAgICAgICAg
ICAgIGlmIChjdXJyZW50ICYmIGN1cnJlbnQgIT0gcGFyZW50ICYmIGN1cnJlbnQtPmlzUmVuZGVy
SW5saW5lKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gY3VycmVudDsKKyAgICAg
ICAgICAgICAgICAgICAgZW5kT2ZJbmxpbmUgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAg
ICAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIGlmICghcmVz
dWx0LT5pc091dE9mRmxvd1Bvc2l0aW9uZWQoKSAmJiAocmVzdWx0LT5pc1RleHRPckxpbmVCcmVh
aygpIHx8IHJlc3VsdC0+aXNGbG9hdGluZygpIHx8IHJlc3VsdC0+aXNSZXBsYWNlZCgpIHx8IHJl
c3VsdC0+aXNSZW5kZXJJbmxpbmUoKSkpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBj
dXJyZW50ID0gcmVzdWx0OworICAgICAgICByZXN1bHQgPSBudWxscHRyOworICAgIH0gd2hpbGUg
KGN1cnJlbnQgfHwgY3VycmVudCA9PSBwYXJlbnQpOworICAgIC8vIFVwZGF0ZSBvdXIgcG9zaXRp
b24uCisgICAgY3VycmVudCA9IHJlc3VsdDsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitzdGF0
aWMgTGF5b3V0VW5pdCBnZXRCUE1XaWR0aChMYXlvdXRVbml0IGNoaWxkVmFsdWUsIExlbmd0aCBj
c3NVbml0KQoreworICAgIGlmIChjc3NVbml0LnR5cGUoKSAhPSBBdXRvKQorICAgICAgICByZXR1
cm4gKGNzc1VuaXQuaXNGaXhlZCgpID8gTGF5b3V0VW5pdChjc3NVbml0LnZhbHVlKCkpIDogY2hp
bGRWYWx1ZSk7CisgICAgcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBMYXlvdXRVbml0IGdldEJvcmRl
clBhZGRpbmdNYXJnaW4oY29uc3QgUmVuZGVyQm94TW9kZWxPYmplY3QmIGNoaWxkLCBib29sIGVu
ZE9mSW5saW5lKQoreworICAgIGNvbnN0IFJlbmRlclN0eWxlJiBjaGlsZFN0eWxlID0gY2hpbGQu
c3R5bGUoKTsKKyAgICBpZiAoZW5kT2ZJbmxpbmUpIHsKKyAgICAgICAgcmV0dXJuIGdldEJQTVdp
ZHRoKGNoaWxkLm1hcmdpbkVuZCgpLCBjaGlsZFN0eWxlLm1hcmdpbkVuZCgpKSArCisgICAgICAg
ICAgICAgICBnZXRCUE1XaWR0aChjaGlsZC5wYWRkaW5nRW5kKCksIGNoaWxkU3R5bGUucGFkZGlu
Z0VuZCgpKSArCisgICAgICAgICAgICAgICBjaGlsZC5ib3JkZXJFbmQoKTsKKyAgICB9CisgICAg
cmV0dXJuIGdldEJQTVdpZHRoKGNoaWxkLm1hcmdpblN0YXJ0KCksIGNoaWxkU3R5bGUubWFyZ2lu
U3RhcnQoKSkgKworICAgICAgICAgICAgICAgZ2V0QlBNV2lkdGgoY2hpbGQucGFkZGluZ1N0YXJ0
KCksIGNoaWxkU3R5bGUucGFkZGluZ1N0YXJ0KCkpICsKKyAgICAgICAgICAgICAgIGNoaWxkLmJv
cmRlclN0YXJ0KCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBzdHJpcFRyYWlsaW5nU3BhY2Uo
ZmxvYXQmIGlubGluZU1heCwgZmxvYXQmIGlubGluZU1pbiwgUmVuZGVyT2JqZWN0KiB0cmFpbGlu
Z1NwYWNlQ2hpbGQpCit7CisgICAgaWYgKHRyYWlsaW5nU3BhY2VDaGlsZCAmJiB0cmFpbGluZ1Nw
YWNlQ2hpbGQtPmlzVGV4dCgpKSB7CisgICAgICAgIC8vIENvbGxhcHNlIGF3YXkgdGhlIHRyYWls
aW5nIHNwYWNlIGF0IHRoZSBlbmQgb2YgYSBibG9jay4KKyAgICAgICAgUmVuZGVyVGV4dCogdCA9
IHRvUmVuZGVyVGV4dCh0cmFpbGluZ1NwYWNlQ2hpbGQpOworICAgICAgICBjb25zdCBVQ2hhciBz
cGFjZSA9ICcgJzsKKyAgICAgICAgY29uc3QgRm9udCYgZm9udCA9IHQtPnN0eWxlKCkuZm9udCgp
OyAvLyBGSVhNRTogVGhpcyBpZ25vcmVzIGZpcnN0LWxpbmUuCisgICAgICAgIGZsb2F0IHNwYWNl
V2lkdGggPSBmb250LndpZHRoKFJlbmRlckJsb2NrOjpjb25zdHJ1Y3RUZXh0UnVuKHQsIGZvbnQs
ICZzcGFjZSwgMSwgdC0+c3R5bGUoKSkpOworICAgICAgICBpbmxpbmVNYXggLT0gc3BhY2VXaWR0
aCArIGZvbnQud29yZFNwYWNpbmcoKTsKKyAgICAgICAgaWYgKGlubGluZU1pbiA+IGlubGluZU1h
eCkKKyAgICAgICAgICAgIGlubGluZU1pbiA9IGlubGluZU1heDsKKyAgICB9Cit9CisKK3N0YXRp
YyBpbmxpbmUgTGF5b3V0VW5pdCBwcmVmZXJyZWRXaWR0aChMYXlvdXRVbml0IHByZWZlcnJlZFdp
ZHRoLCBmbG9hdCByZXN1bHQpCit7CisgICAgcmV0dXJuIHN0ZDo6bWF4KHByZWZlcnJlZFdpZHRo
LCBMYXlvdXRVbml0Ojpmcm9tRmxvYXRDZWlsKHJlc3VsdCkpOworfQorCit2b2lkIFJlbmRlckJs
b2NrRmxvdzo6Y29tcHV0ZUlubGluZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMoTGF5b3V0VW5pdCYg
bWluTG9naWNhbFdpZHRoLCBMYXlvdXRVbml0JiBtYXhMb2dpY2FsV2lkdGgpIGNvbnN0Cit7Cisg
ICAgZmxvYXQgaW5saW5lTWF4ID0gMDsKKyAgICBmbG9hdCBpbmxpbmVNaW4gPSAwOworCisgICAg
Y29uc3QgUmVuZGVyU3R5bGUmIHN0eWxlVG9Vc2UgPSBzdHlsZSgpOworICAgIFJlbmRlckJsb2Nr
KiBjb250YWluaW5nQmxvY2sgPSB0aGlzLT5jb250YWluaW5nQmxvY2soKTsKKyAgICBMYXlvdXRV
bml0IGN3ID0gY29udGFpbmluZ0Jsb2NrID8gY29udGFpbmluZ0Jsb2NrLT5jb250ZW50TG9naWNh
bFdpZHRoKCkgOiBMYXlvdXRVbml0KCk7CisKKyAgICAvLyBJZiB3ZSBhcmUgYXQgdGhlIHN0YXJ0
IG9mIGEgbGluZSwgd2Ugd2FudCB0byBpZ25vcmUgYWxsIHdoaXRlLXNwYWNlLgorICAgIC8vIEFs
c28gc3RyaXAgc3BhY2VzIGlmIHdlIHByZXZpb3VzbHkgaGFkIHRleHQgdGhhdCBlbmRlZCBpbiBh
IHRyYWlsaW5nIHNwYWNlLgorICAgIGJvb2wgc3RyaXBGcm9udFNwYWNlcyA9IHRydWU7CisgICAg
UmVuZGVyT2JqZWN0KiB0cmFpbGluZ1NwYWNlQ2hpbGQgPSAwOworCisgICAgLy8gRmlyZWZveCBh
bmQgT3BlcmEgd2lsbCBhbGxvdyBhIHRhYmxlIGNlbGwgdG8gZ3JvdyB0byBmaXQgYW4gaW1hZ2Ug
aW5zaWRlIGl0IHVuZGVyCisgICAgLy8gdmVyeSBzcGVjaWZpYyBjaXJ1Y3Vtc3RhbmNlcyAoaW4g
b3JkZXIgdG8gbWF0Y2ggY29tbW9uIFdpbklFIHJlbmRlcmluZ3MpLiAKKyAgICAvLyBOb3Qgc3Vw
cG9ydGluZyB0aGUgcXVpcmsgaGFzIGNhdXNlZCB1cyB0byBtaXMtcmVuZGVyIHNvbWUgcmVhbCBz
aXRlcy4gKFNlZSBCdWd6aWxsYSAxMDUxNy4pIAorICAgIGJvb2wgYWxsb3dJbWFnZXNUb0JyZWFr
ID0gIWRvY3VtZW50KCkuaW5RdWlya3NNb2RlKCkgfHwgIWlzVGFibGVDZWxsKCkgfHwgIXN0eWxl
VG9Vc2UubG9naWNhbFdpZHRoKCkuaXNJbnRyaW5zaWNPckF1dG8oKTsKKworICAgIGJvb2wgYXV0
b1dyYXAsIG9sZEF1dG9XcmFwOworICAgIGF1dG9XcmFwID0gb2xkQXV0b1dyYXAgPSBzdHlsZVRv
VXNlLmF1dG9XcmFwKCk7CisKKyAgICBJbmxpbmVNaW5NYXhJdGVyYXRvciBjaGlsZEl0ZXJhdG9y
KHRoaXMpOworCisgICAgLy8gT25seSBnZXRzIGFkZGVkIHRvIHRoZSBtYXggcHJlZmZlcmVkIHdp
ZHRoIG9uY2UuCisgICAgYm9vbCBhZGRlZFRleHRJbmRlbnQgPSBmYWxzZTsKKyAgICAvLyBTaWdu
YWxzIHRoZSB0ZXh0IGluZGVudCB3YXMgbW9yZSBuZWdhdGl2ZSB0aGFuIHRoZSBtaW4gcHJlZmVy
cmVkIHdpZHRoCisgICAgYm9vbCBoYXNSZW1haW5pbmdOZWdhdGl2ZVRleHRJbmRlbnQgPSBmYWxz
ZTsKKworICAgIExheW91dFVuaXQgdGV4dEluZGVudCA9IG1pbmltdW1WYWx1ZUZvckxlbmd0aChz
dHlsZVRvVXNlLnRleHRJbmRlbnQoKSwgY3cpOworICAgIFJlbmRlck9iamVjdCogcHJldkZsb2F0
ID0gMDsKKyAgICBib29sIGlzUHJldkNoaWxkSW5saW5lRmxvdyA9IGZhbHNlOworICAgIGJvb2wg
c2hvdWxkQnJlYWtMaW5lQWZ0ZXJUZXh0ID0gZmFsc2U7CisgICAgd2hpbGUgKFJlbmRlck9iamVj
dCogY2hpbGQgPSBjaGlsZEl0ZXJhdG9yLm5leHQoKSkgeworICAgICAgICBhdXRvV3JhcCA9IGNo
aWxkLT5pc1JlcGxhY2VkKCkgPyBjaGlsZC0+cGFyZW50KCktPnN0eWxlKCkuYXV0b1dyYXAoKSA6
IAorICAgICAgICAgICAgY2hpbGQtPnN0eWxlKCkuYXV0b1dyYXAoKTsKKworICAgICAgICBpZiAo
IWNoaWxkLT5pc0JSKCkpIHsKKyAgICAgICAgICAgIC8vIFN0ZXAgT25lOiBkZXRlcm1pbmUgd2hl
dGhlciBvciBub3Qgd2UgbmVlZCB0byBnbyBhaGVhZCBhbmQKKyAgICAgICAgICAgIC8vIHRlcm1p
bmF0ZSBvdXIgY3VycmVudCBsaW5lLiBFYWNoIGRpc2NyZXRlIGNodW5rIGNhbiBiZWNvbWUKKyAg
ICAgICAgICAgIC8vIHRoZSBuZXcgbWluLXdpZHRoLCBpZiBpdCBpcyB0aGUgd2lkZXN0IGNodW5r
IHNlZW4gc28gZmFyLCBhbmQKKyAgICAgICAgICAgIC8vIGl0IGNhbiBhbHNvIGJlY29tZSB0aGUg
bWF4LXdpZHRoLgorCisgICAgICAgICAgICAvLyBDaGlsZHJlbiBmYWxsIGludG8gdGhyZWUgY2F0
ZWdvcmllczoKKyAgICAgICAgICAgIC8vICgxKSBBbiBpbmxpbmUgZmxvdyBvYmplY3QuIFRoZXNl
IG9iamVjdHMgYWx3YXlzIGhhdmUgYSBtaW4vbWF4IG9mIDAsCisgICAgICAgICAgICAvLyBhbmQg
YXJlIGluY2x1ZGVkIGluIHRoZSBpdGVyYXRpb24gc29sZWx5IHNvIHRoYXQgdGhlaXIgbWFyZ2lu
cyBjYW4KKyAgICAgICAgICAgIC8vIGJlIGFkZGVkIGluLgorICAgICAgICAgICAgLy8KKyAgICAg
ICAgICAgIC8vICgyKSBBbiBpbmxpbmUgbm9uLXRleHQgbm9uLWZsb3cgb2JqZWN0LCBlLmcuLCBh
biBpbmxpbmUgcmVwbGFjZWQgZWxlbWVudC4KKyAgICAgICAgICAgIC8vIFRoZXNlIG9iamVjdHMg
Y2FuIGFsd2F5cyBiZSBvbiBhIGxpbmUgYnkgdGhlbXNlbHZlcywgc28gaW4gdGhpcyBzaXR1YXRp
b24KKyAgICAgICAgICAgIC8vIHdlIG5lZWQgdG8gZ28gYWhlYWQgYW5kIGJyZWFrIHRoZSBjdXJy
ZW50IGxpbmUsIGFuZCB0aGVuIGFkZCBpbiBvdXIgb3duCisgICAgICAgICAgICAvLyBtYXJnaW5z
IGFuZCBtaW4vbWF4IHdpZHRoIG9uIGl0cyBvd24gbGluZSwgYW5kIHRoZW4gdGVybWluYXRlIHRo
ZSBsaW5lLgorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vICgzKSBBIHRleHQgb2JqZWN0
LiBUZXh0IHJ1bnMgY2FuIGhhdmUgYnJlYWthYmxlIGNoYXJhY3RlcnMgYXQgdGhlIHN0YXJ0LAor
ICAgICAgICAgICAgLy8gdGhlIG1pZGRsZSBvciB0aGUgZW5kLiBUaGV5IG1heSBhbHNvIGxvc2Ug
d2hpdGVzcGFjZSBvZmYgdGhlIGZyb250IGlmCisgICAgICAgICAgICAvLyB3ZSdyZSBhbHJlYWR5
IGlnbm9yaW5nIHdoaXRlc3BhY2UuIEluIG9yZGVyIHRvIGNvbXB1dGUgYWNjdXJhdGUgbWluLXdp
ZHRoCisgICAgICAgICAgICAvLyBpbmZvcm1hdGlvbiwgd2UgbmVlZCB0aHJlZSBwaWVjZXMgb2Yg
aW5mb3JtYXRpb24uCisgICAgICAgICAgICAvLyAoYSkgdGhlIG1pbi13aWR0aCBvZiB0aGUgZmly
c3Qgbm9uLWJyZWFrYWJsZSBydW4uIFNob3VsZCBiZSAwIGlmIHRoZSB0ZXh0IHN0cmluZworICAg
ICAgICAgICAgLy8gc3RhcnRzIHdpdGggd2hpdGVzcGFjZS4KKyAgICAgICAgICAgIC8vIChiKSB0
aGUgbWluLXdpZHRoIG9mIHRoZSBsYXN0IG5vbi1icmVha2FibGUgcnVuLiBTaG91bGQgYmUgMCBp
ZiB0aGUgdGV4dCBzdHJpbmcKKyAgICAgICAgICAgIC8vIGVuZHMgd2l0aCB3aGl0ZXNwYWNlLgor
ICAgICAgICAgICAgLy8gKGMpIHRoZSBtaW4vbWF4IHdpZHRoIG9mIHRoZSBzdHJpbmcgKHRyaW1t
ZWQgZm9yIHdoaXRlc3BhY2UpLgorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vIElmIHRo
ZSB0ZXh0IHN0cmluZyBzdGFydHMgd2l0aCB3aGl0ZXNwYWNlLCB0aGVuIHdlIG5lZWQgdG8gZ28g
YWhlYWQgYW5kCisgICAgICAgICAgICAvLyB0ZXJtaW5hdGUgb3VyIGN1cnJlbnQgbGluZSAodW5s
ZXNzIHdlJ3JlIGFscmVhZHkgaW4gYSB3aGl0ZXNwYWNlIHN0cmlwcGluZworICAgICAgICAgICAg
Ly8gbW9kZS4KKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBJZiB0aGUgdGV4dCBzdHJp
bmcgaGFzIGEgYnJlYWthYmxlIGNoYXJhY3RlciBpbiB0aGUgbWlkZGxlLCBidXQgZGlkbid0IHN0
YXJ0CisgICAgICAgICAgICAvLyB3aXRoIHdoaXRlc3BhY2UsIHRoZW4gd2UgYWRkIHRoZSB3aWR0
aCBvZiB0aGUgZmlyc3Qgbm9uLWJyZWFrYWJsZSBydW4gYW5kCisgICAgICAgICAgICAvLyB0aGVu
IGVuZCB0aGUgY3VycmVudCBsaW5lLiBXZSB0aGVuIG5lZWQgdG8gdXNlIHRoZSBpbnRlcm1lZGlh
dGUgbWluL21heCB3aWR0aAorICAgICAgICAgICAgLy8gdmFsdWVzIChpZiBhbnkgb2YgdGhlbSBh
cmUgbGFyZ2VyIHRoYW4gb3VyIGN1cnJlbnQgbWluL21heCkuIFdlIHRoZW4gbG9vayBhdAorICAg
ICAgICAgICAgLy8gdGhlIHdpZHRoIG9mIHRoZSBsYXN0IG5vbi1icmVha2FibGUgcnVuIGFuZCB1
c2UgdGhhdCB0byBzdGFydCBhIG5ldyBsaW5lCisgICAgICAgICAgICAvLyAodW5sZXNzIHdlIGVu
ZCBpbiB3aGl0ZXNwYWNlKS4KKyAgICAgICAgICAgIGNvbnN0IFJlbmRlclN0eWxlJiBjaGlsZFN0
eWxlID0gY2hpbGQtPnN0eWxlKCk7CisgICAgICAgICAgICBmbG9hdCBjaGlsZE1pbiA9IDA7Cisg
ICAgICAgICAgICBmbG9hdCBjaGlsZE1heCA9IDA7CisKKyAgICAgICAgICAgIGlmICghY2hpbGQt
PmlzVGV4dCgpKSB7CisgICAgICAgICAgICAgICAgaWYgKGNoaWxkLT5pc0xpbmVCcmVha09wcG9y
dHVuaXR5KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgbWluTG9naWNhbFdpZHRoID0gcHJlZmVy
cmVkV2lkdGgobWluTG9naWNhbFdpZHRoLCBpbmxpbmVNaW4pOworICAgICAgICAgICAgICAgICAg
ICBpbmxpbmVNaW4gPSAwOworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgLy8gQ2FzZSAoMSkgYW5kICgyKS4gSW5saW5lIHJl
cGxhY2VkIGFuZCBpbmxpbmUgZmxvdyBlbGVtZW50cy4KKyAgICAgICAgICAgICAgICBpZiAoY2hp
bGQtPmlzUmVuZGVySW5saW5lKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gQWRkIGluIHBh
ZGRpbmcvYm9yZGVyL21hcmdpbiBmcm9tIHRoZSBhcHByb3ByaWF0ZSBzaWRlIG9mCisgICAgICAg
ICAgICAgICAgICAgIC8vIHRoZSBlbGVtZW50LgorICAgICAgICAgICAgICAgICAgICBmbG9hdCBi
cG0gPSBnZXRCb3JkZXJQYWRkaW5nTWFyZ2luKCp0b1JlbmRlcklubGluZShjaGlsZCksIGNoaWxk
SXRlcmF0b3IuZW5kT2ZJbmxpbmUpOworICAgICAgICAgICAgICAgICAgICBjaGlsZE1pbiArPSBi
cG07CisgICAgICAgICAgICAgICAgICAgIGNoaWxkTWF4ICs9IGJwbTsKKworICAgICAgICAgICAg
ICAgICAgICBpbmxpbmVNaW4gKz0gY2hpbGRNaW47CisgICAgICAgICAgICAgICAgICAgIGlubGlu
ZU1heCArPSBjaGlsZE1heDsKKworICAgICAgICAgICAgICAgICAgICBjaGlsZC0+c2V0UHJlZmVy
cmVkTG9naWNhbFdpZHRoc0RpcnR5KGZhbHNlKTsKKyAgICAgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgICAgICAvLyBJbmxpbmUgcmVwbGFjZWQgZWx0cyBhZGQgaW4gdGhlaXIg
bWFyZ2lucyB0byB0aGVpciBtaW4vbWF4IHZhbHVlcy4KKyAgICAgICAgICAgICAgICAgICAgTGF5
b3V0VW5pdCBtYXJnaW5zID0gMDsKKyAgICAgICAgICAgICAgICAgICAgTGVuZ3RoIHN0YXJ0TWFy
Z2luID0gY2hpbGRTdHlsZS5tYXJnaW5TdGFydCgpOworICAgICAgICAgICAgICAgICAgICBMZW5n
dGggZW5kTWFyZ2luID0gY2hpbGRTdHlsZS5tYXJnaW5FbmQoKTsKKyAgICAgICAgICAgICAgICAg
ICAgaWYgKHN0YXJ0TWFyZ2luLmlzRml4ZWQoKSkKKyAgICAgICAgICAgICAgICAgICAgICAgIG1h
cmdpbnMgKz0gTGF5b3V0VW5pdDo6ZnJvbUZsb2F0Q2VpbChzdGFydE1hcmdpbi52YWx1ZSgpKTsK
KyAgICAgICAgICAgICAgICAgICAgaWYgKGVuZE1hcmdpbi5pc0ZpeGVkKCkpCisgICAgICAgICAg
ICAgICAgICAgICAgICBtYXJnaW5zICs9IExheW91dFVuaXQ6OmZyb21GbG9hdENlaWwoZW5kTWFy
Z2luLnZhbHVlKCkpOworICAgICAgICAgICAgICAgICAgICBjaGlsZE1pbiArPSBtYXJnaW5zLmNl
aWxUb0Zsb2F0KCk7CisgICAgICAgICAgICAgICAgICAgIGNoaWxkTWF4ICs9IG1hcmdpbnMuY2Vp
bFRvRmxvYXQoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgIGlmICghY2hpbGQtPmlzUmVuZGVySW5saW5lKCkgJiYgIWNoaWxkLT5pc1RleHQoKSkgewor
ICAgICAgICAgICAgICAgIC8vIENhc2UgKDIpLiBJbmxpbmUgcmVwbGFjZWQgZWxlbWVudHMgYW5k
IGZsb2F0cy4KKyAgICAgICAgICAgICAgICAvLyBHbyBhaGVhZCBhbmQgdGVybWluYXRlIHRoZSBj
dXJyZW50IGxpbmUgYXMgZmFyIGFzCisgICAgICAgICAgICAgICAgLy8gbWlud2lkdGggaXMgY29u
Y2VybmVkLgorICAgICAgICAgICAgICAgIGNoaWxkTWluICs9IGNoaWxkLT5taW5QcmVmZXJyZWRM
b2dpY2FsV2lkdGgoKS5jZWlsVG9GbG9hdCgpOworICAgICAgICAgICAgICAgIGNoaWxkTWF4ICs9
IGNoaWxkLT5tYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGgoKS5jZWlsVG9GbG9hdCgpOworCisgICAg
ICAgICAgICAgICAgYm9vbCBjbGVhclByZXZpb3VzRmxvYXQ7CisgICAgICAgICAgICAgICAgaWYg
KGNoaWxkLT5pc0Zsb2F0aW5nKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgY2xlYXJQcmV2aW91
c0Zsb2F0ID0gKHByZXZGbG9hdAorICAgICAgICAgICAgICAgICAgICAgICAgJiYgKChwcmV2Rmxv
YXQtPnN0eWxlKCkuZmxvYXRpbmcoKSA9PSBMZWZ0RmxvYXQgJiYgKGNoaWxkU3R5bGUuY2xlYXIo
KSAmIENMRUZUKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAocHJldkZsb2F0LT5z
dHlsZSgpLmZsb2F0aW5nKCkgPT0gUmlnaHRGbG9hdCAmJiAoY2hpbGRTdHlsZS5jbGVhcigpICYg
Q1JJR0hUKSkpKTsKKyAgICAgICAgICAgICAgICAgICAgcHJldkZsb2F0ID0gY2hpbGQ7CisgICAg
ICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgIGNsZWFyUHJldmlvdXNGbG9h
dCA9IGZhbHNlOworCisgICAgICAgICAgICAgICAgYm9vbCBjYW5CcmVha1JlcGxhY2VkRWxlbWVu
dCA9ICFjaGlsZC0+aXNJbWFnZSgpIHx8IGFsbG93SW1hZ2VzVG9CcmVhazsKKyAgICAgICAgICAg
ICAgICBpZiAoKGNhbkJyZWFrUmVwbGFjZWRFbGVtZW50ICYmIChhdXRvV3JhcCB8fCBvbGRBdXRv
V3JhcCkgJiYgKCFpc1ByZXZDaGlsZElubGluZUZsb3cgfHwgc2hvdWxkQnJlYWtMaW5lQWZ0ZXJU
ZXh0KSkgfHwgY2xlYXJQcmV2aW91c0Zsb2F0KSB7CisgICAgICAgICAgICAgICAgICAgIG1pbkxv
Z2ljYWxXaWR0aCA9IHByZWZlcnJlZFdpZHRoKG1pbkxvZ2ljYWxXaWR0aCwgaW5saW5lTWluKTsK
KyAgICAgICAgICAgICAgICAgICAgaW5saW5lTWluID0gMDsKKyAgICAgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgICAgICAvLyBJZiB3ZSdyZSBzdXBwb3NlZCB0byBjbGVhciB0aGUgcHJldmlv
dXMgZmxvYXQsIHRoZW4gdGVybWluYXRlIG1heHdpZHRoIGFzIHdlbGwuCisgICAgICAgICAgICAg
ICAgaWYgKGNsZWFyUHJldmlvdXNGbG9hdCkgeworICAgICAgICAgICAgICAgICAgICBtYXhMb2dp
Y2FsV2lkdGggPSBwcmVmZXJyZWRXaWR0aChtYXhMb2dpY2FsV2lkdGgsIGlubGluZU1heCk7Cisg
ICAgICAgICAgICAgICAgICAgIGlubGluZU1heCA9IDA7CisgICAgICAgICAgICAgICAgfQorCisg
ICAgICAgICAgICAgICAgLy8gQWRkIGluIHRleHQtaW5kZW50LiBUaGlzIGlzIGFkZGVkIGluIG9u
bHkgb25jZS4KKyAgICAgICAgICAgICAgICBpZiAoIWFkZGVkVGV4dEluZGVudCAmJiAhY2hpbGQt
PmlzRmxvYXRpbmcoKSkgeworICAgICAgICAgICAgICAgICAgICBMYXlvdXRVbml0IGNlaWxlZElu
ZGVudCA9IHRleHRJbmRlbnQuY2VpbFRvRmxvYXQoKTsKKyAgICAgICAgICAgICAgICAgICAgY2hp
bGRNaW4gKz0gY2VpbGVkSW5kZW50OworICAgICAgICAgICAgICAgICAgICBjaGlsZE1heCArPSBj
ZWlsZWRJbmRlbnQ7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkTWluIDwgMCkKKyAg
ICAgICAgICAgICAgICAgICAgICAgIHRleHRJbmRlbnQgPSBMYXlvdXRVbml0Ojpmcm9tRmxvYXRD
ZWlsKGNoaWxkTWluKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAg
ICAgICAgICAgYWRkZWRUZXh0SW5kZW50ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICAvLyBBZGQgb3VyIHdpZHRoIHRvIHRoZSBtYXguCisgICAgICAgICAgICAg
ICAgaW5saW5lTWF4ICs9IHN0ZDo6bWF4PGZsb2F0PigwLCBjaGlsZE1heCk7CisKKyAgICAgICAg
ICAgICAgICBpZiAoIWF1dG9XcmFwIHx8ICFjYW5CcmVha1JlcGxhY2VkRWxlbWVudCB8fCAoaXNQ
cmV2Q2hpbGRJbmxpbmVGbG93ICYmICFzaG91bGRCcmVha0xpbmVBZnRlclRleHQpKSB7CisgICAg
ICAgICAgICAgICAgICAgIGlmIChjaGlsZC0+aXNGbG9hdGluZygpKQorICAgICAgICAgICAgICAg
ICAgICAgICAgbWluTG9naWNhbFdpZHRoID0gcHJlZmVycmVkV2lkdGgobWluTG9naWNhbFdpZHRo
LCBjaGlsZE1pbik7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGlubGluZU1pbiArPSBjaGlsZE1pbjsKKyAgICAgICAgICAgICAgICB9IGVsc2Ugewor
ICAgICAgICAgICAgICAgICAgICAvLyBOb3cgY2hlY2sgb3VyIGxpbmUuCisgICAgICAgICAgICAg
ICAgICAgIG1pbkxvZ2ljYWxXaWR0aCA9IHByZWZlcnJlZFdpZHRoKG1pbkxvZ2ljYWxXaWR0aCwg
Y2hpbGRNaW4pOworCisgICAgICAgICAgICAgICAgICAgIC8vIE5vdyBzdGFydCBhIG5ldyBsaW5l
LgorICAgICAgICAgICAgICAgICAgICBpbmxpbmVNaW4gPSAwOworICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgIGlmIChhdXRvV3JhcCAmJiBjYW5CcmVha1JlcGxhY2VkRWxlbWVu
dCAmJiBpc1ByZXZDaGlsZElubGluZUZsb3cpIHsKKyAgICAgICAgICAgICAgICAgICAgbWluTG9n
aWNhbFdpZHRoID0gcHJlZmVycmVkV2lkdGgobWluTG9naWNhbFdpZHRoLCBpbmxpbmVNaW4pOwor
ICAgICAgICAgICAgICAgICAgICBpbmxpbmVNaW4gPSAwOworICAgICAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgICAgIC8vIFdlIGFyZSBubyBsb25nZXIgc3RyaXBwaW5nIHdoaXRlc3BhY2Ug
YXQgdGhlIHN0YXJ0IG9mIGEgbGluZS4KKyAgICAgICAgICAgICAgICBpZiAoIWNoaWxkLT5pc0Zs
b2F0aW5nKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgc3RyaXBGcm9udFNwYWNlcyA9IGZhbHNl
OworICAgICAgICAgICAgICAgICAgICB0cmFpbGluZ1NwYWNlQ2hpbGQgPSAwOworICAgICAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSBpZiAoY2hpbGQtPmlzVGV4dCgpKSB7CisgICAg
ICAgICAgICAgICAgLy8gQ2FzZSAoMykuIFRleHQuCisgICAgICAgICAgICAgICAgUmVuZGVyVGV4
dCogdCA9IHRvUmVuZGVyVGV4dChjaGlsZCk7CisKKyAgICAgICAgICAgICAgICBpZiAodC0+c3R5
bGUoKS5oYXNUZXh0Q29tYmluZSgpICYmIHQtPmlzQ29tYmluZVRleHQoKSkKKyAgICAgICAgICAg
ICAgICAgICAgdG9SZW5kZXJDb21iaW5lVGV4dCgqdCkuY29tYmluZVRleHQoKTsKKworICAgICAg
ICAgICAgICAgIC8vIERldGVybWluZSBpZiB3ZSBoYXZlIGEgYnJlYWthYmxlIGNoYXJhY3Rlci4g
UGFzcyBpbgorICAgICAgICAgICAgICAgIC8vIHdoZXRoZXIgb3Igbm90IHdlIHNob3VsZCBpZ25v
cmUgYW55IHNwYWNlcyBhdCB0aGUgZnJvbnQKKyAgICAgICAgICAgICAgICAvLyBvZiB0aGUgc3Ry
aW5nLiBJZiB0aG9zZSBhcmUgZ29pbmcgdG8gYmUgc3RyaXBwZWQgb3V0LAorICAgICAgICAgICAg
ICAgIC8vIHRoZW4gdGhleSBzaG91bGRuJ3QgYmUgY29uc2lkZXJlZCBpbiB0aGUgYnJlYWthYmxl
IGNoYXIKKyAgICAgICAgICAgICAgICAvLyBjaGVjay4KKyAgICAgICAgICAgICAgICBib29sIGhh
c0JyZWFrYWJsZUNoYXIsIGhhc0JyZWFrOworICAgICAgICAgICAgICAgIGZsb2F0IGJlZ2luTWlu
LCBlbmRNaW47CisgICAgICAgICAgICAgICAgYm9vbCBiZWdpbldTLCBlbmRXUzsKKyAgICAgICAg
ICAgICAgICBmbG9hdCBiZWdpbk1heCwgZW5kTWF4OworICAgICAgICAgICAgICAgIHQtPnRyaW1t
ZWRQcmVmV2lkdGhzKGlubGluZU1heCwgYmVnaW5NaW4sIGJlZ2luV1MsIGVuZE1pbiwgZW5kV1Ms
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzQnJlYWthYmxlQ2hhciwg
aGFzQnJlYWssIGJlZ2luTWF4LCBlbmRNYXgsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgY2hpbGRNaW4sIGNoaWxkTWF4LCBzdHJpcEZyb250U3BhY2VzKTsKKworICAgICAg
ICAgICAgICAgIC8vIFRoaXMgdGV4dCBvYmplY3Qgd2lsbCBub3QgYmUgcmVuZGVyZWQsIGJ1dCBp
dCBtYXkgc3RpbGwgcHJvdmlkZSBhIGJyZWFraW5nIG9wcG9ydHVuaXR5LgorICAgICAgICAgICAg
ICAgIGlmICghaGFzQnJlYWsgJiYgIWNoaWxkTWF4KSB7CisgICAgICAgICAgICAgICAgICAgIGlm
IChhdXRvV3JhcCAmJiAoYmVnaW5XUyB8fCBlbmRXUykpIHsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG1pbkxvZ2ljYWxXaWR0aCA9IHByZWZlcnJlZFdpZHRoKG1pbkxvZ2ljYWxXaWR0aCwgaW5s
aW5lTWluKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlubGluZU1pbiA9IDA7CisgICAgICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKHN0cmlwRnJvbnRTcGFjZXMpCisgICAgICAg
ICAgICAgICAgICAgIHRyYWlsaW5nU3BhY2VDaGlsZCA9IGNoaWxkOworICAgICAgICAgICAgICAg
IGVsc2UKKyAgICAgICAgICAgICAgICAgICAgdHJhaWxpbmdTcGFjZUNoaWxkID0gMDsKKworICAg
ICAgICAgICAgICAgIC8vIEFkZCBpbiB0ZXh0LWluZGVudC4gVGhpcyBpcyBhZGRlZCBpbiBvbmx5
IG9uY2UuCisgICAgICAgICAgICAgICAgZmxvYXQgdGkgPSAwOworICAgICAgICAgICAgICAgIGlm
ICghYWRkZWRUZXh0SW5kZW50IHx8IGhhc1JlbWFpbmluZ05lZ2F0aXZlVGV4dEluZGVudCkgewor
ICAgICAgICAgICAgICAgICAgICB0aSA9IHRleHRJbmRlbnQuY2VpbFRvRmxvYXQoKTsKKyAgICAg
ICAgICAgICAgICAgICAgY2hpbGRNaW4gKz0gdGk7CisgICAgICAgICAgICAgICAgICAgIGJlZ2lu
TWluICs9IHRpOworCisgICAgICAgICAgICAgICAgICAgIC8vIEl0IHRoZSB0ZXh0IGluZGVudCBu
ZWdhdGl2ZSBhbmQgbGFyZ2VyIHRoYW4gdGhlIGNoaWxkIG1pbmltdW0sIHdlIHJlLXVzZSB0aGUg
cmVtYWluZGVyCisgICAgICAgICAgICAgICAgICAgIC8vIGluIGZ1dHVyZSBtaW5pbXVtIGNhbGN1
bGF0aW9ucywgYnV0IHVzaW5nIHRoZSBuZWdhdGl2ZSB2YWx1ZSBhZ2FpbiBvbiB0aGUgbWF4aW11
bQorICAgICAgICAgICAgICAgICAgICAvLyB3aWxsIGxlYWQgdG8gdW5kZXItY291bnRpbmcgdGhl
IG1heCBwcmVmIHdpZHRoLgorICAgICAgICAgICAgICAgICAgICBpZiAoIWFkZGVkVGV4dEluZGVu
dCkgeworICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRNYXggKz0gdGk7CisgICAgICAgICAg
ICAgICAgICAgICAgICBiZWdpbk1heCArPSB0aTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFk
ZGVkVGV4dEluZGVudCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgICAgICBpZiAoY2hpbGRNaW4gPCAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICB0
ZXh0SW5kZW50ID0gY2hpbGRNaW47CisgICAgICAgICAgICAgICAgICAgICAgICBoYXNSZW1haW5p
bmdOZWdhdGl2ZVRleHRJbmRlbnQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gSWYgd2UgaGF2ZSBubyBicmVha2Fi
bGUgY2hhcmFjdGVycyBhdCBhbGwsCisgICAgICAgICAgICAgICAgLy8gdGhlbiB0aGlzIGlzIHRo
ZSBlYXN5IGNhc2UuIFdlIGFkZCBvdXJzZWx2ZXMgdG8gdGhlIGN1cnJlbnQKKyAgICAgICAgICAg
ICAgICAvLyBtaW4gYW5kIG1heCBhbmQgY29udGludWUuCisgICAgICAgICAgICAgICAgaWYgKCFo
YXNCcmVha2FibGVDaGFyKQorICAgICAgICAgICAgICAgICAgICBpbmxpbmVNaW4gKz0gY2hpbGRN
aW47CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIC8vIFdlIGhh
dmUgYSBicmVha2FibGUgY2hhcmFjdGVyLiBOb3cgd2UgbmVlZCB0byBrbm93IGlmCisgICAgICAg
ICAgICAgICAgICAgIC8vIHdlIHN0YXJ0IGFuZCBlbmQgd2l0aCB3aGl0ZXNwYWNlLgorICAgICAg
ICAgICAgICAgICAgICBpZiAoYmVnaW5XUykgeworICAgICAgICAgICAgICAgICAgICAgICAgLy8g
R28gYWhlYWQgYW5kIGVuZCB0aGUgY3VycmVudCBsaW5lLgorICAgICAgICAgICAgICAgICAgICAg
ICAgbWluTG9naWNhbFdpZHRoID0gcHJlZmVycmVkV2lkdGgobWluTG9naWNhbFdpZHRoLCBpbmxp
bmVNaW4pOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgICAg
ICAgICAgaW5saW5lTWluICs9IGJlZ2luTWluOworICAgICAgICAgICAgICAgICAgICAgICAgbWlu
TG9naWNhbFdpZHRoID0gcHJlZmVycmVkV2lkdGgobWluTG9naWNhbFdpZHRoLCBpbmxpbmVNaW4p
OworICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRNaW4gLT0gdGk7CisgICAgICAgICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBpbmxpbmVNaW4gPSBjaGlsZE1pbjsKKwor
ICAgICAgICAgICAgICAgICAgICBpZiAoZW5kV1MpIHsKKyAgICAgICAgICAgICAgICAgICAgICAg
IC8vIFdlIGVuZCBpbiB3aGl0ZXNwYWNlLCB3aGljaCBtZWFucyB3ZSBjYW4gZ28gYWhlYWQKKyAg
ICAgICAgICAgICAgICAgICAgICAgIC8vIGFuZCBlbmQgb3VyIGN1cnJlbnQgbGluZS4KKyAgICAg
ICAgICAgICAgICAgICAgICAgIG1pbkxvZ2ljYWxXaWR0aCA9IHByZWZlcnJlZFdpZHRoKG1pbkxv
Z2ljYWxXaWR0aCwgaW5saW5lTWluKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlubGluZU1p
biA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICBzaG91bGRCcmVha0xpbmVBZnRlclRleHQg
PSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIG1pbkxvZ2ljYWxXaWR0aCA9IHByZWZlcnJlZFdpZHRoKG1pbkxvZ2ljYWxXaWR0aCwg
aW5saW5lTWluKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlubGluZU1pbiA9IGVuZE1pbjsK
KyAgICAgICAgICAgICAgICAgICAgICAgIHNob3VsZEJyZWFrTGluZUFmdGVyVGV4dCA9IHRydWU7
CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAg
ICAgICBpZiAoaGFzQnJlYWspIHsKKyAgICAgICAgICAgICAgICAgICAgaW5saW5lTWF4ICs9IGJl
Z2luTWF4OworICAgICAgICAgICAgICAgICAgICBtYXhMb2dpY2FsV2lkdGggPSBwcmVmZXJyZWRX
aWR0aChtYXhMb2dpY2FsV2lkdGgsIGlubGluZU1heCk7CisgICAgICAgICAgICAgICAgICAgIG1h
eExvZ2ljYWxXaWR0aCA9IHByZWZlcnJlZFdpZHRoKG1heExvZ2ljYWxXaWR0aCwgY2hpbGRNYXgp
OworICAgICAgICAgICAgICAgICAgICBpbmxpbmVNYXggPSBlbmRNYXg7CisgICAgICAgICAgICAg
ICAgICAgIGFkZGVkVGV4dEluZGVudCA9IHRydWU7CisgICAgICAgICAgICAgICAgfSBlbHNlCisg
ICAgICAgICAgICAgICAgICAgIGlubGluZU1heCArPSBzdGQ6Om1heDxmbG9hdD4oMCwgY2hpbGRN
YXgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBJZ25vcmUgc3BhY2VzIGFmdGVy
IGEgbGlzdCBtYXJrZXIuCisgICAgICAgICAgICBpZiAoY2hpbGQtPmlzTGlzdE1hcmtlcigpKQor
ICAgICAgICAgICAgICAgIHN0cmlwRnJvbnRTcGFjZXMgPSB0cnVlOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgbWluTG9naWNhbFdpZHRoID0gcHJlZmVycmVkV2lkdGgobWluTG9naWNh
bFdpZHRoLCBpbmxpbmVNaW4pOworICAgICAgICAgICAgbWF4TG9naWNhbFdpZHRoID0gcHJlZmVy
cmVkV2lkdGgobWF4TG9naWNhbFdpZHRoLCBpbmxpbmVNYXgpOworICAgICAgICAgICAgaW5saW5l
TWluID0gaW5saW5lTWF4ID0gMDsKKyAgICAgICAgICAgIHN0cmlwRnJvbnRTcGFjZXMgPSB0cnVl
OworICAgICAgICAgICAgdHJhaWxpbmdTcGFjZUNoaWxkID0gMDsKKyAgICAgICAgICAgIGFkZGVk
VGV4dEluZGVudCA9IHRydWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIWNoaWxkLT5pc1Rl
eHQoKSAmJiBjaGlsZC0+aXNSZW5kZXJJbmxpbmUoKSkKKyAgICAgICAgICAgIGlzUHJldkNoaWxk
SW5saW5lRmxvdyA9IHRydWU7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGlzUHJldkNoaWxk
SW5saW5lRmxvdyA9IGZhbHNlOworCisgICAgICAgIG9sZEF1dG9XcmFwID0gYXV0b1dyYXA7Cisg
ICAgfQorCisgICAgaWYgKHN0eWxlVG9Vc2UuY29sbGFwc2VXaGl0ZVNwYWNlKCkpCisgICAgICAg
IHN0cmlwVHJhaWxpbmdTcGFjZShpbmxpbmVNYXgsIGlubGluZU1pbiwgdHJhaWxpbmdTcGFjZUNo
aWxkKTsKKworICAgIG1pbkxvZ2ljYWxXaWR0aCA9IHByZWZlcnJlZFdpZHRoKG1pbkxvZ2ljYWxX
aWR0aCwgaW5saW5lTWluKTsKKyAgICBtYXhMb2dpY2FsV2lkdGggPSBwcmVmZXJyZWRXaWR0aCht
YXhMb2dpY2FsV2lkdGgsIGlubGluZU1heCk7Cit9CisKIH0KIC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93Lmgg
Yi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmgKaW5kZXggZmU1YWYx
N2RkN2VjZGE4NmVmMzI1NDdiNDhlZDUzN2YxMGNhYTllNC4uMThiZWM1ODgxN2ZjYzBlM2QwMGE0
ZGE3NjYwNjY5M2Q0OGZkYmQyZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJsb2NrRmxvdy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
bG9ja0Zsb3cuaApAQCAtNTc4LDYgKzU3OCw4IEBAIHByaXZhdGU6CiAgICAgYm9vbCBuYW1lZEZs
b3dGcmFnbWVudE5lZWRzVXBkYXRlKCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGNhbkhhdmVD
aGlsZHJlbigpIGNvbnN0IG92ZXJyaWRlOwogCisgICAgdm9pZCBjb21wdXRlSW5saW5lUHJlZmVy
cmVkTG9naWNhbFdpZHRocyhMYXlvdXRVbml0JiBtaW5Mb2dpY2FsV2lkdGgsIExheW91dFVuaXQm
IG1heExvZ2ljYWxXaWR0aCkgY29uc3Q7CisKICNpZiBFTkFCTEUoSU9TX1RFWFRfQVVUT1NJWklO
RykKICAgICBpbnQgbV93aWR0aEZvclRleHRBdXRvc2l6aW5nOwogICAgIHVuc2lnbmVkIG1fbGlu
ZUNvdW50Rm9yVGV4dEF1dG9zaXppbmcgOiAyOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>237628</attachid>
            <date>2014-09-04 09:17:55 -0700</date>
            <delta_ts>2014-09-05 07:18:22 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-136461-20140904091749.patch</filename>
            <type>text/plain</type>
            <size>42614</size>
            <attacher name="alan">zalan</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTczMjU3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNzY3NDA3NDQyNTdiY2Vk
Yzk5ZWIxNTQ4NWI5OTBkYTdkMWI4YWEzZS4uZjVkMDQyMWIyNDA1NDM3YTA4ZDc3ZTcyMDM1ZDQy
ZTNmNDFhYTQyZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM2IEBACisyMDE0LTA5LTA0ICBaYWxh
biBCdWp0YXMgIDx6YWxhbkBhcHBsZS5jb20+CisKKyAgICAgICAgTW92ZSBjb21wdXRlSW5saW5l
UHJlZmVycmVkTG9naWNhbFdpZHRocygpIGZyb20gUmVuZGVyQmxvY2sgdG8gUmVuZGVyQmxvY2tG
bG93CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMzY0
NjEKKworICAgICAgICBSZXZpZXdlZCBieSBEYXJpbiBBZGxlci4KKworICAgICAgICBUaGlzIHBh
dGNoIGVuYWJsZXMgdXMgdG8gZ28gZnJvbSBjb25zdF9jYXN0PFJlbmRlckJsb2NrRmxvdyo+KHRo
aXMpLT5jb21wdXRlSW5saW5lUHJlZmVycmVkTG9naWNhbFdpZHRocygpCisgICAgICAgIHRvIGNv
bXB1dGVJbmxpbmVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKCkuCisKKyAgICAgICAgQ292ZXJlZCBi
eSBleGlzdGluZyB0ZXN0cy4KKworICAgICAgICAqIHJlbmRlcmluZy9SZW5kZXJCbG9jay5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpJbmxpbmVNaW5NYXhJdGVyYXRvcjo6ZW5kT2ZJbmxpbmUpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lTWluTWF4SXRlcmF0b3I6Om5leHQpOiBE
ZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6Z2V0QlBNV2lkdGgpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6Z2V0Qm9yZGVyUGFkZGluZ01hcmdpbik6IERlbGV0ZWQuCisgICAgICAgIChX
ZWJDb3JlOjpzdHJpcFRyYWlsaW5nU3BhY2UpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6
cHJlZmVycmVkV2lkdGgpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2s6
OmNvbXB1dGVJbmxpbmVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKTogRGVsZXRlZC4KKyAgICAgICAg
KiByZW5kZXJpbmcvUmVuZGVyQmxvY2suaDoKKyAgICAgICAgKiByZW5kZXJpbmcvUmVuZGVyQmxv
Y2tGbG93LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlckJsb2NrRmxvdzo6Y29tcHV0ZUlu
dHJpbnNpY0xvZ2ljYWxXaWR0aHMpOgorICAgICAgICAoV2ViQ29yZTo6SW5saW5lTWluTWF4SXRl
cmF0b3I6OmluaXRpYWwpOiBUaGUgKHBhcmVudCA9PSBjdXJyZW50KSBjb25kaXRpb24gd2FzIHVz
ZWQgYXMgJ2luaXRpYWwnIHN0YXRlIGJlZm9yZS4KKyAgICAgICAgYW5kIGluIG9yZGVyIHRvIG1h
a2UgY29tcHV0ZUlubGluZVByZWZlcnJlZExvZ2ljYWxXaWR0aHMgY29uc3QsIElubGluZU1pbk1h
eEl0ZXJhdG9yKCkgbmVlZHMgdG8gdGFrZSBjb25zdCBSZW5kZXJPYmplY3QqLgorICAgICAgICAo
V2ViQ29yZTo6SW5saW5lTWluTWF4SXRlcmF0b3I6Om5leHQpOgorICAgICAgICAoV2ViQ29yZTo6
Z2V0QlBNV2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6Z2V0Qm9yZGVyUGFkZGluZ01hcmdpbik6
CisgICAgICAgIChXZWJDb3JlOjpzdHJpcFRyYWlsaW5nU3BhY2UpOgorICAgICAgICAoV2ViQ29y
ZTo6cHJlZmVycmVkV2lkdGgpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyQmxvY2tGbG93Ojpj
b21wdXRlSW5saW5lUHJlZmVycmVkTG9naWNhbFdpZHRocyk6CisgICAgICAgICogcmVuZGVyaW5n
L1JlbmRlckJsb2NrRmxvdy5oOgorCiAyMDE0LTA5LTA0ICBDYXJsb3MgQWxiZXJ0byBMb3BleiBQ
ZXJleiAgPGNsb3BlekBpZ2FsaWEuY29tPgogCiAgICAgICAgIFJFR1JFU1NJT04ocjE3MzI0MCkg
W0dUS10gRGVidWcgYnVpbGQgYnJva2VuLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJsb2NrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJC
bG9jay5jcHAKaW5kZXggYmM4MTc1Yjc0YWQ0NmQzZWIzZjU5MDkwMDQwY2Y4NmQ1ZGFmZDg0MS4u
NmJiZTRiZTU5MjNiMDI2NmVmMTM3OGQxNDFkYzNjOTE3YjczYjA5ZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCkBAIC0yNzk5LDQxMCArMjc5OSw2IEBAIHZvaWQg
UmVuZGVyQmxvY2s6OmNvbXB1dGVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKCkKICAgICBzZXRQcmVm
ZXJyZWRMb2dpY2FsV2lkdGhzRGlydHkoZmFsc2UpOwogfQogCi1zdHJ1Y3QgSW5saW5lTWluTWF4
SXRlcmF0b3IgewotLyogSW5saW5lTWluTWF4SXRlcmF0b3IgaXMgYSBjbGFzcyB0aGF0IHdpbGwg
aXRlcmF0ZSBvdmVyIGFsbCByZW5kZXIgb2JqZWN0cyB0aGF0IGNvbnRyaWJ1dGUgdG8KLSAgIGlu
bGluZSBtaW4vbWF4IHdpZHRoIGNhbGN1bGF0aW9ucy4gIE5vdGUgdGhlIGZvbGxvd2luZyBhYm91
dCB0aGUgd2F5IGl0IHdhbGtzOgotICAgKDEpIFBvc2l0aW9uZWQgY29udGVudCBpcyBza2lwcGVk
IChzaW5jZSBpdCBkb2VzIG5vdCBjb250cmlidXRlIHRvIG1pbi9tYXggd2lkdGggb2YgYSBibG9j
aykKLSAgICgyKSBXZSBkbyBub3QgZHJpbGwgaW50byB0aGUgY2hpbGRyZW4gb2YgZmxvYXRzIG9y
IHJlcGxhY2VkIGVsZW1lbnRzLCBzaW5jZSB5b3UgY2FuJ3QgYnJlYWsKLSAgICAgICBpbiB0aGUg
bWlkZGxlIG9mIHN1Y2ggYW4gZWxlbWVudC4KLSAgICgzKSBJbmxpbmUgZmxvd3MgKGUuZy4sIDxh
PiwgPHNwYW4+LCA8aT4pIGFyZSB3YWxrZWQgdHdpY2UsIHNpbmNlIGVhY2ggc2lkZSBjYW4gaGF2
ZQotICAgICAgIGRpc3RpbmN0IGJvcmRlcnMvbWFyZ2luL3BhZGRpbmcgdGhhdCBjb250cmlidXRl
IHRvIHRoZSBtaW4vbWF4IHdpZHRoLgotKi8KLSAgICBSZW5kZXJPYmplY3QqIHBhcmVudDsKLSAg
ICBSZW5kZXJPYmplY3QqIGN1cnJlbnQ7Ci0gICAgYm9vbCBlbmRPZklubGluZTsKLQotICAgIElu
bGluZU1pbk1heEl0ZXJhdG9yKFJlbmRlck9iamVjdCogcCwgYm9vbCBlbmQgPSBmYWxzZSkKLSAg
ICAgICAgOnBhcmVudChwKSwgY3VycmVudChwKSwgZW5kT2ZJbmxpbmUoZW5kKSB7fQotCi0gICAg
UmVuZGVyT2JqZWN0KiBuZXh0KCk7Ci19OwotCi1SZW5kZXJPYmplY3QqIElubGluZU1pbk1heEl0
ZXJhdG9yOjpuZXh0KCkKLXsKLSAgICBSZW5kZXJPYmplY3QqIHJlc3VsdCA9IDA7Ci0gICAgYm9v
bCBvbGRFbmRPZklubGluZSA9IGVuZE9mSW5saW5lOwotICAgIGVuZE9mSW5saW5lID0gZmFsc2U7
Ci0gICAgd2hpbGUgKGN1cnJlbnQgfHwgY3VycmVudCA9PSBwYXJlbnQpIHsKLSAgICAgICAgaWYg
KCFvbGRFbmRPZklubGluZSAmJgotICAgICAgICAgICAgKGN1cnJlbnQgPT0gcGFyZW50IHx8Ci0g
ICAgICAgICAgICAgKCFjdXJyZW50LT5pc0Zsb2F0aW5nKCkgJiYgIWN1cnJlbnQtPmlzUmVwbGFj
ZWQoKSAmJiAhY3VycmVudC0+aXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkpKSkKLSAgICAgICAgICAg
IHJlc3VsdCA9IGN1cnJlbnQtPmZpcnN0Q2hpbGRTbG93KCk7Ci0gICAgICAgIGlmICghcmVzdWx0
KSB7Ci0gICAgICAgICAgICAvLyBXZSBoaXQgdGhlIGVuZCBvZiBvdXIgaW5saW5lLiAoSXQgd2Fz
IGVtcHR5LCBlLmcuLCA8c3Bhbj48L3NwYW4+LikKLSAgICAgICAgICAgIGlmICghb2xkRW5kT2ZJ
bmxpbmUgJiYgY3VycmVudC0+aXNSZW5kZXJJbmxpbmUoKSkgewotICAgICAgICAgICAgICAgIHJl
c3VsdCA9IGN1cnJlbnQ7Ci0gICAgICAgICAgICAgICAgZW5kT2ZJbmxpbmUgPSB0cnVlOwotICAg
ICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICB3aGlsZSAo
Y3VycmVudCAmJiBjdXJyZW50ICE9IHBhcmVudCkgewotICAgICAgICAgICAgICAgIHJlc3VsdCA9
IGN1cnJlbnQtPm5leHRTaWJsaW5nKCk7Ci0gICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkgYnJl
YWs7Ci0gICAgICAgICAgICAgICAgY3VycmVudCA9IGN1cnJlbnQtPnBhcmVudCgpOwotICAgICAg
ICAgICAgICAgIGlmIChjdXJyZW50ICYmIGN1cnJlbnQgIT0gcGFyZW50ICYmIGN1cnJlbnQtPmlz
UmVuZGVySW5saW5lKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgcmVzdWx0ID0gY3VycmVudDsK
LSAgICAgICAgICAgICAgICAgICAgZW5kT2ZJbmxpbmUgPSB0cnVlOwotICAgICAgICAgICAgICAg
ICAgICBicmVhazsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0K
LQotICAgICAgICBpZiAoIXJlc3VsdCkKLSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIGlm
ICghcmVzdWx0LT5pc091dE9mRmxvd1Bvc2l0aW9uZWQoKSAmJiAocmVzdWx0LT5pc1RleHRPckxp
bmVCcmVhaygpIHx8IHJlc3VsdC0+aXNGbG9hdGluZygpIHx8IHJlc3VsdC0+aXNSZXBsYWNlZCgp
IHx8IHJlc3VsdC0+aXNSZW5kZXJJbmxpbmUoKSkpCi0gICAgICAgICAgICAgYnJlYWs7Ci0gICAg
ICAgIAotICAgICAgICBjdXJyZW50ID0gcmVzdWx0OwotICAgICAgICByZXN1bHQgPSAwOwotICAg
IH0KLQotICAgIC8vIFVwZGF0ZSBvdXIgcG9zaXRpb24uCi0gICAgY3VycmVudCA9IHJlc3VsdDsK
LSAgICByZXR1cm4gY3VycmVudDsKLX0KLQotc3RhdGljIExheW91dFVuaXQgZ2V0QlBNV2lkdGgo
TGF5b3V0VW5pdCBjaGlsZFZhbHVlLCBMZW5ndGggY3NzVW5pdCkKLXsKLSAgICBpZiAoY3NzVW5p
dC50eXBlKCkgIT0gQXV0bykKLSAgICAgICAgcmV0dXJuIChjc3NVbml0LmlzRml4ZWQoKSA/IExh
eW91dFVuaXQoY3NzVW5pdC52YWx1ZSgpKSA6IGNoaWxkVmFsdWUpOwotICAgIHJldHVybiAwOwot
fQotCi1zdGF0aWMgTGF5b3V0VW5pdCBnZXRCb3JkZXJQYWRkaW5nTWFyZ2luKGNvbnN0IFJlbmRl
ckJveE1vZGVsT2JqZWN0KiBjaGlsZCwgYm9vbCBlbmRPZklubGluZSkKLXsKLSAgICBjb25zdCBS
ZW5kZXJTdHlsZSYgY2hpbGRTdHlsZSA9IGNoaWxkLT5zdHlsZSgpOwotICAgIGlmIChlbmRPZklu
bGluZSkKLSAgICAgICAgcmV0dXJuIGdldEJQTVdpZHRoKGNoaWxkLT5tYXJnaW5FbmQoKSwgY2hp
bGRTdHlsZS5tYXJnaW5FbmQoKSkgKwotICAgICAgICAgICAgICAgZ2V0QlBNV2lkdGgoY2hpbGQt
PnBhZGRpbmdFbmQoKSwgY2hpbGRTdHlsZS5wYWRkaW5nRW5kKCkpICsKLSAgICAgICAgICAgICAg
IGNoaWxkLT5ib3JkZXJFbmQoKTsKLSAgICByZXR1cm4gZ2V0QlBNV2lkdGgoY2hpbGQtPm1hcmdp
blN0YXJ0KCksIGNoaWxkU3R5bGUubWFyZ2luU3RhcnQoKSkgKwotICAgICAgICAgICAgICAgZ2V0
QlBNV2lkdGgoY2hpbGQtPnBhZGRpbmdTdGFydCgpLCBjaGlsZFN0eWxlLnBhZGRpbmdTdGFydCgp
KSArCi0gICAgICAgICAgICAgICBjaGlsZC0+Ym9yZGVyU3RhcnQoKTsKLX0KLQotc3RhdGljIGlu
bGluZSB2b2lkIHN0cmlwVHJhaWxpbmdTcGFjZShmbG9hdCYgaW5saW5lTWF4LCBmbG9hdCYgaW5s
aW5lTWluLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZW5kZXJPYmpl
Y3QqIHRyYWlsaW5nU3BhY2VDaGlsZCkKLXsKLSAgICBpZiAodHJhaWxpbmdTcGFjZUNoaWxkICYm
IHRyYWlsaW5nU3BhY2VDaGlsZC0+aXNUZXh0KCkpIHsKLSAgICAgICAgLy8gQ29sbGFwc2UgYXdh
eSB0aGUgdHJhaWxpbmcgc3BhY2UgYXQgdGhlIGVuZCBvZiBhIGJsb2NrLgotICAgICAgICBSZW5k
ZXJUZXh0KiB0ID0gdG9SZW5kZXJUZXh0KHRyYWlsaW5nU3BhY2VDaGlsZCk7Ci0gICAgICAgIGNv
bnN0IFVDaGFyIHNwYWNlID0gJyAnOwotICAgICAgICBjb25zdCBGb250JiBmb250ID0gdC0+c3R5
bGUoKS5mb250KCk7IC8vIEZJWE1FOiBUaGlzIGlnbm9yZXMgZmlyc3QtbGluZS4KLSAgICAgICAg
ZmxvYXQgc3BhY2VXaWR0aCA9IGZvbnQud2lkdGgoUmVuZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRS
dW4odCwgZm9udCwgJnNwYWNlLCAxLCB0LT5zdHlsZSgpKSk7Ci0gICAgICAgIGlubGluZU1heCAt
PSBzcGFjZVdpZHRoICsgZm9udC53b3JkU3BhY2luZygpOwotICAgICAgICBpZiAoaW5saW5lTWlu
ID4gaW5saW5lTWF4KQotICAgICAgICAgICAgaW5saW5lTWluID0gaW5saW5lTWF4OwotICAgIH0K
LX0KLQotc3RhdGljIGlubGluZSBMYXlvdXRVbml0IHByZWZlcnJlZFdpZHRoKExheW91dFVuaXQg
cHJlZmVycmVkV2lkdGgsIGZsb2F0IHJlc3VsdCkKLXsKLSAgICByZXR1cm4gc3RkOjptYXgocHJl
ZmVycmVkV2lkdGgsIExheW91dFVuaXQ6OmZyb21GbG9hdENlaWwocmVzdWx0KSk7Ci19Ci0KLXZv
aWQgUmVuZGVyQmxvY2s6OmNvbXB1dGVJbmxpbmVQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKExheW91
dFVuaXQmIG1pbkxvZ2ljYWxXaWR0aCwgTGF5b3V0VW5pdCYgbWF4TG9naWNhbFdpZHRoKQotewot
ICAgIGZsb2F0IGlubGluZU1heCA9IDA7Ci0gICAgZmxvYXQgaW5saW5lTWluID0gMDsKLQotICAg
IGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZVRvVXNlID0gc3R5bGUoKTsKLSAgICBSZW5kZXJCbG9j
ayogY29udGFpbmluZ0Jsb2NrID0gdGhpcy0+Y29udGFpbmluZ0Jsb2NrKCk7Ci0gICAgTGF5b3V0
VW5pdCBjdyA9IGNvbnRhaW5pbmdCbG9jayA/IGNvbnRhaW5pbmdCbG9jay0+Y29udGVudExvZ2lj
YWxXaWR0aCgpIDogTGF5b3V0VW5pdCgpOwotCi0gICAgLy8gSWYgd2UgYXJlIGF0IHRoZSBzdGFy
dCBvZiBhIGxpbmUsIHdlIHdhbnQgdG8gaWdub3JlIGFsbCB3aGl0ZS1zcGFjZS4KLSAgICAvLyBB
bHNvIHN0cmlwIHNwYWNlcyBpZiB3ZSBwcmV2aW91c2x5IGhhZCB0ZXh0IHRoYXQgZW5kZWQgaW4g
YSB0cmFpbGluZyBzcGFjZS4KLSAgICBib29sIHN0cmlwRnJvbnRTcGFjZXMgPSB0cnVlOwotICAg
IFJlbmRlck9iamVjdCogdHJhaWxpbmdTcGFjZUNoaWxkID0gMDsKLQotICAgIC8vIEZpcmVmb3gg
YW5kIE9wZXJhIHdpbGwgYWxsb3cgYSB0YWJsZSBjZWxsIHRvIGdyb3cgdG8gZml0IGFuIGltYWdl
IGluc2lkZSBpdCB1bmRlcgotICAgIC8vIHZlcnkgc3BlY2lmaWMgY2lydWN1bXN0YW5jZXMgKGlu
IG9yZGVyIHRvIG1hdGNoIGNvbW1vbiBXaW5JRSByZW5kZXJpbmdzKS4gCi0gICAgLy8gTm90IHN1
cHBvcnRpbmcgdGhlIHF1aXJrIGhhcyBjYXVzZWQgdXMgdG8gbWlzLXJlbmRlciBzb21lIHJlYWwg
c2l0ZXMuIChTZWUgQnVnemlsbGEgMTA1MTcuKSAKLSAgICBib29sIGFsbG93SW1hZ2VzVG9CcmVh
ayA9ICFkb2N1bWVudCgpLmluUXVpcmtzTW9kZSgpIHx8ICFpc1RhYmxlQ2VsbCgpIHx8ICFzdHls
ZVRvVXNlLmxvZ2ljYWxXaWR0aCgpLmlzSW50cmluc2ljT3JBdXRvKCk7Ci0KLSAgICBib29sIGF1
dG9XcmFwLCBvbGRBdXRvV3JhcDsKLSAgICBhdXRvV3JhcCA9IG9sZEF1dG9XcmFwID0gc3R5bGVU
b1VzZS5hdXRvV3JhcCgpOwotCi0gICAgSW5saW5lTWluTWF4SXRlcmF0b3IgY2hpbGRJdGVyYXRv
cih0aGlzKTsKLQotICAgIC8vIE9ubHkgZ2V0cyBhZGRlZCB0byB0aGUgbWF4IHByZWZmZXJlZCB3
aWR0aCBvbmNlLgotICAgIGJvb2wgYWRkZWRUZXh0SW5kZW50ID0gZmFsc2U7Ci0gICAgLy8gU2ln
bmFscyB0aGUgdGV4dCBpbmRlbnQgd2FzIG1vcmUgbmVnYXRpdmUgdGhhbiB0aGUgbWluIHByZWZl
cnJlZCB3aWR0aAotICAgIGJvb2wgaGFzUmVtYWluaW5nTmVnYXRpdmVUZXh0SW5kZW50ID0gZmFs
c2U7Ci0KLSAgICBMYXlvdXRVbml0IHRleHRJbmRlbnQgPSBtaW5pbXVtVmFsdWVGb3JMZW5ndGgo
c3R5bGVUb1VzZS50ZXh0SW5kZW50KCksIGN3KTsKLSAgICBSZW5kZXJPYmplY3QqIHByZXZGbG9h
dCA9IDA7Ci0gICAgYm9vbCBpc1ByZXZDaGlsZElubGluZUZsb3cgPSBmYWxzZTsKLSAgICBib29s
IHNob3VsZEJyZWFrTGluZUFmdGVyVGV4dCA9IGZhbHNlOwotICAgIHdoaWxlIChSZW5kZXJPYmpl
Y3QqIGNoaWxkID0gY2hpbGRJdGVyYXRvci5uZXh0KCkpIHsKLSAgICAgICAgYXV0b1dyYXAgPSBj
aGlsZC0+aXNSZXBsYWNlZCgpID8gY2hpbGQtPnBhcmVudCgpLT5zdHlsZSgpLmF1dG9XcmFwKCkg
OiAKLSAgICAgICAgICAgIGNoaWxkLT5zdHlsZSgpLmF1dG9XcmFwKCk7Ci0KLSAgICAgICAgaWYg
KCFjaGlsZC0+aXNCUigpKSB7Ci0gICAgICAgICAgICAvLyBTdGVwIE9uZTogZGV0ZXJtaW5lIHdo
ZXRoZXIgb3Igbm90IHdlIG5lZWQgdG8gZ28gYWhlYWQgYW5kCi0gICAgICAgICAgICAvLyB0ZXJt
aW5hdGUgb3VyIGN1cnJlbnQgbGluZS4gIEVhY2ggZGlzY3JldGUgY2h1bmsgY2FuIGJlY29tZQot
ICAgICAgICAgICAgLy8gdGhlIG5ldyBtaW4td2lkdGgsIGlmIGl0IGlzIHRoZSB3aWRlc3QgY2h1
bmsgc2VlbiBzbyBmYXIsIGFuZAotICAgICAgICAgICAgLy8gaXQgY2FuIGFsc28gYmVjb21lIHRo
ZSBtYXgtd2lkdGguCi0KLSAgICAgICAgICAgIC8vIENoaWxkcmVuIGZhbGwgaW50byB0aHJlZSBj
YXRlZ29yaWVzOgotICAgICAgICAgICAgLy8gKDEpIEFuIGlubGluZSBmbG93IG9iamVjdC4gIFRo
ZXNlIG9iamVjdHMgYWx3YXlzIGhhdmUgYSBtaW4vbWF4IG9mIDAsCi0gICAgICAgICAgICAvLyBh
bmQgYXJlIGluY2x1ZGVkIGluIHRoZSBpdGVyYXRpb24gc29sZWx5IHNvIHRoYXQgdGhlaXIgbWFy
Z2lucyBjYW4KLSAgICAgICAgICAgIC8vIGJlIGFkZGVkIGluLgotICAgICAgICAgICAgLy8KLSAg
ICAgICAgICAgIC8vICgyKSBBbiBpbmxpbmUgbm9uLXRleHQgbm9uLWZsb3cgb2JqZWN0LCBlLmcu
LCBhbiBpbmxpbmUgcmVwbGFjZWQgZWxlbWVudC4KLSAgICAgICAgICAgIC8vIFRoZXNlIG9iamVj
dHMgY2FuIGFsd2F5cyBiZSBvbiBhIGxpbmUgYnkgdGhlbXNlbHZlcywgc28gaW4gdGhpcyBzaXR1
YXRpb24KLSAgICAgICAgICAgIC8vIHdlIG5lZWQgdG8gZ28gYWhlYWQgYW5kIGJyZWFrIHRoZSBj
dXJyZW50IGxpbmUsIGFuZCB0aGVuIGFkZCBpbiBvdXIgb3duCi0gICAgICAgICAgICAvLyBtYXJn
aW5zIGFuZCBtaW4vbWF4IHdpZHRoIG9uIGl0cyBvd24gbGluZSwgYW5kIHRoZW4gdGVybWluYXRl
IHRoZSBsaW5lLgotICAgICAgICAgICAgLy8KLSAgICAgICAgICAgIC8vICgzKSBBIHRleHQgb2Jq
ZWN0LiAgVGV4dCBydW5zIGNhbiBoYXZlIGJyZWFrYWJsZSBjaGFyYWN0ZXJzIGF0IHRoZSBzdGFy
dCwKLSAgICAgICAgICAgIC8vIHRoZSBtaWRkbGUgb3IgdGhlIGVuZC4gIFRoZXkgbWF5IGFsc28g
bG9zZSB3aGl0ZXNwYWNlIG9mZiB0aGUgZnJvbnQgaWYKLSAgICAgICAgICAgIC8vIHdlJ3JlIGFs
cmVhZHkgaWdub3Jpbmcgd2hpdGVzcGFjZS4gIEluIG9yZGVyIHRvIGNvbXB1dGUgYWNjdXJhdGUg
bWluLXdpZHRoCi0gICAgICAgICAgICAvLyBpbmZvcm1hdGlvbiwgd2UgbmVlZCB0aHJlZSBwaWVj
ZXMgb2YgaW5mb3JtYXRpb24uCi0gICAgICAgICAgICAvLyAoYSkgdGhlIG1pbi13aWR0aCBvZiB0
aGUgZmlyc3Qgbm9uLWJyZWFrYWJsZSBydW4uICBTaG91bGQgYmUgMCBpZiB0aGUgdGV4dCBzdHJp
bmcKLSAgICAgICAgICAgIC8vIHN0YXJ0cyB3aXRoIHdoaXRlc3BhY2UuCi0gICAgICAgICAgICAv
LyAoYikgdGhlIG1pbi13aWR0aCBvZiB0aGUgbGFzdCBub24tYnJlYWthYmxlIHJ1bi4gU2hvdWxk
IGJlIDAgaWYgdGhlIHRleHQgc3RyaW5nCi0gICAgICAgICAgICAvLyBlbmRzIHdpdGggd2hpdGVz
cGFjZS4KLSAgICAgICAgICAgIC8vIChjKSB0aGUgbWluL21heCB3aWR0aCBvZiB0aGUgc3RyaW5n
ICh0cmltbWVkIGZvciB3aGl0ZXNwYWNlKS4KLSAgICAgICAgICAgIC8vCi0gICAgICAgICAgICAv
LyBJZiB0aGUgdGV4dCBzdHJpbmcgc3RhcnRzIHdpdGggd2hpdGVzcGFjZSwgdGhlbiB3ZSBuZWVk
IHRvIGdvIGFoZWFkIGFuZAotICAgICAgICAgICAgLy8gdGVybWluYXRlIG91ciBjdXJyZW50IGxp
bmUgKHVubGVzcyB3ZSdyZSBhbHJlYWR5IGluIGEgd2hpdGVzcGFjZSBzdHJpcHBpbmcKLSAgICAg
ICAgICAgIC8vIG1vZGUuCi0gICAgICAgICAgICAvLwotICAgICAgICAgICAgLy8gSWYgdGhlIHRl
eHQgc3RyaW5nIGhhcyBhIGJyZWFrYWJsZSBjaGFyYWN0ZXIgaW4gdGhlIG1pZGRsZSwgYnV0IGRp
ZG4ndCBzdGFydAotICAgICAgICAgICAgLy8gd2l0aCB3aGl0ZXNwYWNlLCB0aGVuIHdlIGFkZCB0
aGUgd2lkdGggb2YgdGhlIGZpcnN0IG5vbi1icmVha2FibGUgcnVuIGFuZAotICAgICAgICAgICAg
Ly8gdGhlbiBlbmQgdGhlIGN1cnJlbnQgbGluZS4gIFdlIHRoZW4gbmVlZCB0byB1c2UgdGhlIGlu
dGVybWVkaWF0ZSBtaW4vbWF4IHdpZHRoCi0gICAgICAgICAgICAvLyB2YWx1ZXMgKGlmIGFueSBv
ZiB0aGVtIGFyZSBsYXJnZXIgdGhhbiBvdXIgY3VycmVudCBtaW4vbWF4KS4gIFdlIHRoZW4gbG9v
ayBhdAotICAgICAgICAgICAgLy8gdGhlIHdpZHRoIG9mIHRoZSBsYXN0IG5vbi1icmVha2FibGUg
cnVuIGFuZCB1c2UgdGhhdCB0byBzdGFydCBhIG5ldyBsaW5lCi0gICAgICAgICAgICAvLyAodW5s
ZXNzIHdlIGVuZCBpbiB3aGl0ZXNwYWNlKS4KLSAgICAgICAgICAgIGNvbnN0IFJlbmRlclN0eWxl
JiBjaGlsZFN0eWxlID0gY2hpbGQtPnN0eWxlKCk7Ci0gICAgICAgICAgICBmbG9hdCBjaGlsZE1p
biA9IDA7Ci0gICAgICAgICAgICBmbG9hdCBjaGlsZE1heCA9IDA7Ci0KLSAgICAgICAgICAgIGlm
ICghY2hpbGQtPmlzVGV4dCgpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGNoaWxkLT5pc0xpbmVC
cmVha09wcG9ydHVuaXR5KCkpIHsKLSAgICAgICAgICAgICAgICAgICAgbWluTG9naWNhbFdpZHRo
ID0gcHJlZmVycmVkV2lkdGgobWluTG9naWNhbFdpZHRoLCBpbmxpbmVNaW4pOwotICAgICAgICAg
ICAgICAgICAgICBpbmxpbmVNaW4gPSAwOwotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgLy8gQ2FzZSAoMSkgYW5kICgyKS4g
IElubGluZSByZXBsYWNlZCBhbmQgaW5saW5lIGZsb3cgZWxlbWVudHMuCi0gICAgICAgICAgICAg
ICAgaWYgKGNoaWxkLT5pc1JlbmRlcklubGluZSgpKSB7Ci0gICAgICAgICAgICAgICAgICAgIC8v
IEFkZCBpbiBwYWRkaW5nL2JvcmRlci9tYXJnaW4gZnJvbSB0aGUgYXBwcm9wcmlhdGUgc2lkZSBv
ZgotICAgICAgICAgICAgICAgICAgICAvLyB0aGUgZWxlbWVudC4KLSAgICAgICAgICAgICAgICAg
ICAgZmxvYXQgYnBtID0gZ2V0Qm9yZGVyUGFkZGluZ01hcmdpbih0b1JlbmRlcklubGluZShjaGls
ZCksIGNoaWxkSXRlcmF0b3IuZW5kT2ZJbmxpbmUpOwotICAgICAgICAgICAgICAgICAgICBjaGls
ZE1pbiArPSBicG07Ci0gICAgICAgICAgICAgICAgICAgIGNoaWxkTWF4ICs9IGJwbTsKLQotICAg
ICAgICAgICAgICAgICAgICBpbmxpbmVNaW4gKz0gY2hpbGRNaW47Ci0gICAgICAgICAgICAgICAg
ICAgIGlubGluZU1heCArPSBjaGlsZE1heDsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICAgICAgICAgIGNoaWxkLT5zZXRQcmVmZXJyZWRMb2dpY2FsV2lkdGhzRGlydHkoZmFsc2Up
OwotICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIC8vIElubGlu
ZSByZXBsYWNlZCBlbHRzIGFkZCBpbiB0aGVpciBtYXJnaW5zIHRvIHRoZWlyIG1pbi9tYXggdmFs
dWVzLgotICAgICAgICAgICAgICAgICAgICBMYXlvdXRVbml0IG1hcmdpbnMgPSAwOwotICAgICAg
ICAgICAgICAgICAgICBMZW5ndGggc3RhcnRNYXJnaW4gPSBjaGlsZFN0eWxlLm1hcmdpblN0YXJ0
KCk7Ci0gICAgICAgICAgICAgICAgICAgIExlbmd0aCBlbmRNYXJnaW4gPSBjaGlsZFN0eWxlLm1h
cmdpbkVuZCgpOwotICAgICAgICAgICAgICAgICAgICBpZiAoc3RhcnRNYXJnaW4uaXNGaXhlZCgp
KQotICAgICAgICAgICAgICAgICAgICAgICAgbWFyZ2lucyArPSBMYXlvdXRVbml0Ojpmcm9tRmxv
YXRDZWlsKHN0YXJ0TWFyZ2luLnZhbHVlKCkpOwotICAgICAgICAgICAgICAgICAgICBpZiAoZW5k
TWFyZ2luLmlzRml4ZWQoKSkKLSAgICAgICAgICAgICAgICAgICAgICAgIG1hcmdpbnMgKz0gTGF5
b3V0VW5pdDo6ZnJvbUZsb2F0Q2VpbChlbmRNYXJnaW4udmFsdWUoKSk7Ci0gICAgICAgICAgICAg
ICAgICAgIGNoaWxkTWluICs9IG1hcmdpbnMuY2VpbFRvRmxvYXQoKTsKLSAgICAgICAgICAgICAg
ICAgICAgY2hpbGRNYXggKz0gbWFyZ2lucy5jZWlsVG9GbG9hdCgpOwotICAgICAgICAgICAgICAg
IH0KLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgaWYgKCFjaGlsZC0+aXNSZW5kZXJJbmxp
bmUoKSAmJiAhY2hpbGQtPmlzVGV4dCgpKSB7Ci0gICAgICAgICAgICAgICAgLy8gQ2FzZSAoMiku
IElubGluZSByZXBsYWNlZCBlbGVtZW50cyBhbmQgZmxvYXRzLgotICAgICAgICAgICAgICAgIC8v
IEdvIGFoZWFkIGFuZCB0ZXJtaW5hdGUgdGhlIGN1cnJlbnQgbGluZSBhcyBmYXIgYXMKLSAgICAg
ICAgICAgICAgICAvLyBtaW53aWR0aCBpcyBjb25jZXJuZWQuCi0gICAgICAgICAgICAgICAgY2hp
bGRNaW4gKz0gY2hpbGQtPm1pblByZWZlcnJlZExvZ2ljYWxXaWR0aCgpLmNlaWxUb0Zsb2F0KCk7
Ci0gICAgICAgICAgICAgICAgY2hpbGRNYXggKz0gY2hpbGQtPm1heFByZWZlcnJlZExvZ2ljYWxX
aWR0aCgpLmNlaWxUb0Zsb2F0KCk7Ci0KLSAgICAgICAgICAgICAgICBib29sIGNsZWFyUHJldmlv
dXNGbG9hdDsKLSAgICAgICAgICAgICAgICBpZiAoY2hpbGQtPmlzRmxvYXRpbmcoKSkgewotICAg
ICAgICAgICAgICAgICAgICBjbGVhclByZXZpb3VzRmxvYXQgPSAocHJldkZsb2F0Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAmJiAoKHByZXZGbG9hdC0+c3R5bGUoKS5mbG9hdGluZygpID09IExl
ZnRGbG9hdCAmJiAoY2hpbGRTdHlsZS5jbGVhcigpICYgQ0xFRlQpKQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHx8IChwcmV2RmxvYXQtPnN0eWxlKCkuZmxvYXRpbmcoKSA9PSBSaWdodEZs
b2F0ICYmIChjaGlsZFN0eWxlLmNsZWFyKCkgJiBDUklHSFQpKSkpOwotICAgICAgICAgICAgICAg
ICAgICBwcmV2RmxvYXQgPSBjaGlsZDsKLSAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAg
ICAgICAgICAgICAgY2xlYXJQcmV2aW91c0Zsb2F0ID0gZmFsc2U7Ci0KLSAgICAgICAgICAgICAg
ICBib29sIGNhbkJyZWFrUmVwbGFjZWRFbGVtZW50ID0gIWNoaWxkLT5pc0ltYWdlKCkgfHwgYWxs
b3dJbWFnZXNUb0JyZWFrOwotICAgICAgICAgICAgICAgIGlmICgoY2FuQnJlYWtSZXBsYWNlZEVs
ZW1lbnQgJiYgKGF1dG9XcmFwIHx8IG9sZEF1dG9XcmFwKSAmJiAoIWlzUHJldkNoaWxkSW5saW5l
RmxvdyB8fCBzaG91bGRCcmVha0xpbmVBZnRlclRleHQpKSB8fCBjbGVhclByZXZpb3VzRmxvYXQp
IHsKLSAgICAgICAgICAgICAgICAgICAgbWluTG9naWNhbFdpZHRoID0gcHJlZmVycmVkV2lkdGgo
bWluTG9naWNhbFdpZHRoLCBpbmxpbmVNaW4pOwotICAgICAgICAgICAgICAgICAgICBpbmxpbmVN
aW4gPSAwOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIElmIHdlJ3Jl
IHN1cHBvc2VkIHRvIGNsZWFyIHRoZSBwcmV2aW91cyBmbG9hdCwgdGhlbiB0ZXJtaW5hdGUgbWF4
d2lkdGggYXMgd2VsbC4KLSAgICAgICAgICAgICAgICBpZiAoY2xlYXJQcmV2aW91c0Zsb2F0KSB7
Ci0gICAgICAgICAgICAgICAgICAgIG1heExvZ2ljYWxXaWR0aCA9IHByZWZlcnJlZFdpZHRoKG1h
eExvZ2ljYWxXaWR0aCwgaW5saW5lTWF4KTsKLSAgICAgICAgICAgICAgICAgICAgaW5saW5lTWF4
ID0gMDsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBBZGQgaW4gdGV4
dC1pbmRlbnQuICBUaGlzIGlzIGFkZGVkIGluIG9ubHkgb25jZS4KLSAgICAgICAgICAgICAgICBp
ZiAoIWFkZGVkVGV4dEluZGVudCAmJiAhY2hpbGQtPmlzRmxvYXRpbmcoKSkgewotICAgICAgICAg
ICAgICAgICAgICBMYXlvdXRVbml0IGNlaWxlZEluZGVudCA9IHRleHRJbmRlbnQuY2VpbFRvRmxv
YXQoKTsKLSAgICAgICAgICAgICAgICAgICAgY2hpbGRNaW4gKz0gY2VpbGVkSW5kZW50OwotICAg
ICAgICAgICAgICAgICAgICBjaGlsZE1heCArPSBjZWlsZWRJbmRlbnQ7Ci0KLSAgICAgICAgICAg
ICAgICAgICAgaWYgKGNoaWxkTWluIDwgMCkKLSAgICAgICAgICAgICAgICAgICAgICAgIHRleHRJ
bmRlbnQgPSBMYXlvdXRVbml0Ojpmcm9tRmxvYXRDZWlsKGNoaWxkTWluKTsKLSAgICAgICAgICAg
ICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICAgICAgYWRkZWRUZXh0SW5kZW50ID0g
dHJ1ZTsKLSAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAvLyBBZGQgb3VyIHdp
ZHRoIHRvIHRoZSBtYXguCi0gICAgICAgICAgICAgICAgaW5saW5lTWF4ICs9IHN0ZDo6bWF4PGZs
b2F0PigwLCBjaGlsZE1heCk7Ci0KLSAgICAgICAgICAgICAgICBpZiAoIWF1dG9XcmFwIHx8ICFj
YW5CcmVha1JlcGxhY2VkRWxlbWVudCB8fCAoaXNQcmV2Q2hpbGRJbmxpbmVGbG93ICYmICFzaG91
bGRCcmVha0xpbmVBZnRlclRleHQpKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZC0+
aXNGbG9hdGluZygpKQotICAgICAgICAgICAgICAgICAgICAgICAgbWluTG9naWNhbFdpZHRoID0g
cHJlZmVycmVkV2lkdGgobWluTG9naWNhbFdpZHRoLCBjaGlsZE1pbik7Ci0gICAgICAgICAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgICAgIGlubGluZU1pbiArPSBjaGlsZE1p
bjsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgICAgICAvLyBOb3cg
Y2hlY2sgb3VyIGxpbmUuCi0gICAgICAgICAgICAgICAgICAgIG1pbkxvZ2ljYWxXaWR0aCA9IHBy
ZWZlcnJlZFdpZHRoKG1pbkxvZ2ljYWxXaWR0aCwgY2hpbGRNaW4pOwotCi0gICAgICAgICAgICAg
ICAgICAgIC8vIE5vdyBzdGFydCBhIG5ldyBsaW5lLgotICAgICAgICAgICAgICAgICAgICBpbmxp
bmVNaW4gPSAwOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIGlmIChhdXRv
V3JhcCAmJiBjYW5CcmVha1JlcGxhY2VkRWxlbWVudCAmJiBpc1ByZXZDaGlsZElubGluZUZsb3cp
IHsKLSAgICAgICAgICAgICAgICAgICAgbWluTG9naWNhbFdpZHRoID0gcHJlZmVycmVkV2lkdGgo
bWluTG9naWNhbFdpZHRoLCBpbmxpbmVNaW4pOwotICAgICAgICAgICAgICAgICAgICBpbmxpbmVN
aW4gPSAwOwotICAgICAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgICAgIC8vIFdlIGFyZSBu
byBsb25nZXIgc3RyaXBwaW5nIHdoaXRlc3BhY2UgYXQgdGhlIHN0YXJ0IG9mCi0gICAgICAgICAg
ICAgICAgLy8gYSBsaW5lLgotICAgICAgICAgICAgICAgIGlmICghY2hpbGQtPmlzRmxvYXRpbmco
KSkgewotICAgICAgICAgICAgICAgICAgICBzdHJpcEZyb250U3BhY2VzID0gZmFsc2U7Ci0gICAg
ICAgICAgICAgICAgICAgIHRyYWlsaW5nU3BhY2VDaGlsZCA9IDA7Ci0gICAgICAgICAgICAgICAg
fQotICAgICAgICAgICAgfSBlbHNlIGlmIChjaGlsZC0+aXNUZXh0KCkpIHsKLSAgICAgICAgICAg
ICAgICAvLyBDYXNlICgzKS4gVGV4dC4KLSAgICAgICAgICAgICAgICBSZW5kZXJUZXh0KiB0ID0g
dG9SZW5kZXJUZXh0KGNoaWxkKTsKLQotICAgICAgICAgICAgICAgIGlmICh0LT5zdHlsZSgpLmhh
c1RleHRDb21iaW5lKCkgJiYgdC0+aXNDb21iaW5lVGV4dCgpKQotICAgICAgICAgICAgICAgICAg
ICB0b1JlbmRlckNvbWJpbmVUZXh0KCp0KS5jb21iaW5lVGV4dCgpOwotCi0gICAgICAgICAgICAg
ICAgLy8gRGV0ZXJtaW5lIGlmIHdlIGhhdmUgYSBicmVha2FibGUgY2hhcmFjdGVyLiAgUGFzcyBp
bgotICAgICAgICAgICAgICAgIC8vIHdoZXRoZXIgb3Igbm90IHdlIHNob3VsZCBpZ25vcmUgYW55
IHNwYWNlcyBhdCB0aGUgZnJvbnQKLSAgICAgICAgICAgICAgICAvLyBvZiB0aGUgc3RyaW5nLiAg
SWYgdGhvc2UgYXJlIGdvaW5nIHRvIGJlIHN0cmlwcGVkIG91dCwKLSAgICAgICAgICAgICAgICAv
LyB0aGVuIHRoZXkgc2hvdWxkbid0IGJlIGNvbnNpZGVyZWQgaW4gdGhlIGJyZWFrYWJsZSBjaGFy
Ci0gICAgICAgICAgICAgICAgLy8gY2hlY2suCi0gICAgICAgICAgICAgICAgYm9vbCBoYXNCcmVh
a2FibGVDaGFyLCBoYXNCcmVhazsKLSAgICAgICAgICAgICAgICBmbG9hdCBiZWdpbk1pbiwgZW5k
TWluOwotICAgICAgICAgICAgICAgIGJvb2wgYmVnaW5XUywgZW5kV1M7Ci0gICAgICAgICAgICAg
ICAgZmxvYXQgYmVnaW5NYXgsIGVuZE1heDsKLSAgICAgICAgICAgICAgICB0LT50cmltbWVkUHJl
ZldpZHRocyhpbmxpbmVNYXgsIGJlZ2luTWluLCBiZWdpbldTLCBlbmRNaW4sIGVuZFdTLAotICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhhc0JyZWFrYWJsZUNoYXIsIGhhc0Jy
ZWFrLCBiZWdpbk1heCwgZW5kTWF4LAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIGNoaWxkTWluLCBjaGlsZE1heCwgc3RyaXBGcm9udFNwYWNlcyk7Ci0KLSAgICAgICAgICAg
ICAgICAvLyBUaGlzIHRleHQgb2JqZWN0IHdpbGwgbm90IGJlIHJlbmRlcmVkLCBidXQgaXQgbWF5
IHN0aWxsIHByb3ZpZGUgYSBicmVha2luZyBvcHBvcnR1bml0eS4KLSAgICAgICAgICAgICAgICBp
ZiAoIWhhc0JyZWFrICYmIGNoaWxkTWF4ID09IDApIHsKLSAgICAgICAgICAgICAgICAgICAgaWYg
KGF1dG9XcmFwICYmIChiZWdpbldTIHx8IGVuZFdTKSkgewotICAgICAgICAgICAgICAgICAgICAg
ICAgbWluTG9naWNhbFdpZHRoID0gcHJlZmVycmVkV2lkdGgobWluTG9naWNhbFdpZHRoLCBpbmxp
bmVNaW4pOwotICAgICAgICAgICAgICAgICAgICAgICAgaW5saW5lTWluID0gMDsKLSAgICAgICAg
ICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAg
ICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgaWYgKHN0cmlwRnJvbnRT
cGFjZXMpCi0gICAgICAgICAgICAgICAgICAgIHRyYWlsaW5nU3BhY2VDaGlsZCA9IGNoaWxkOwot
ICAgICAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICAgICAgdHJhaWxpbmdTcGFjZUNo
aWxkID0gMDsKLQotICAgICAgICAgICAgICAgIC8vIEFkZCBpbiB0ZXh0LWluZGVudC4gIFRoaXMg
aXMgYWRkZWQgaW4gb25seSBvbmNlLgotICAgICAgICAgICAgICAgIGZsb2F0IHRpID0gMDsKLSAg
ICAgICAgICAgICAgICBpZiAoIWFkZGVkVGV4dEluZGVudCB8fCBoYXNSZW1haW5pbmdOZWdhdGl2
ZVRleHRJbmRlbnQpIHsKLSAgICAgICAgICAgICAgICAgICAgdGkgPSB0ZXh0SW5kZW50LmNlaWxU
b0Zsb2F0KCk7Ci0gICAgICAgICAgICAgICAgICAgIGNoaWxkTWluICs9IHRpOwotICAgICAgICAg
ICAgICAgICAgICBiZWdpbk1pbiArPSB0aTsKLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAg
ICAgICAgICAgICAgIC8vIEl0IHRoZSB0ZXh0IGluZGVudCBuZWdhdGl2ZSBhbmQgbGFyZ2VyIHRo
YW4gdGhlIGNoaWxkIG1pbmltdW0sIHdlIHJlLXVzZSB0aGUgcmVtYWluZGVyCi0gICAgICAgICAg
ICAgICAgICAgIC8vIGluIGZ1dHVyZSBtaW5pbXVtIGNhbGN1bGF0aW9ucywgYnV0IHVzaW5nIHRo
ZSBuZWdhdGl2ZSB2YWx1ZSBhZ2FpbiBvbiB0aGUgbWF4aW11bQotICAgICAgICAgICAgICAgICAg
ICAvLyB3aWxsIGxlYWQgdG8gdW5kZXItY291bnRpbmcgdGhlIG1heCBwcmVmIHdpZHRoLgotICAg
ICAgICAgICAgICAgICAgICBpZiAoIWFkZGVkVGV4dEluZGVudCkgewotICAgICAgICAgICAgICAg
ICAgICAgICAgY2hpbGRNYXggKz0gdGk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBiZWdpbk1h
eCArPSB0aTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGFkZGVkVGV4dEluZGVudCA9IHRydWU7
Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAgICAgICAgICAgICAgICAgCi0gICAgICAgICAg
ICAgICAgICAgIGlmIChjaGlsZE1pbiA8IDApIHsKLSAgICAgICAgICAgICAgICAgICAgICAgIHRl
eHRJbmRlbnQgPSBjaGlsZE1pbjsKLSAgICAgICAgICAgICAgICAgICAgICAgIGhhc1JlbWFpbmlu
Z05lZ2F0aXZlVGV4dEluZGVudCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgIH0KLSAgICAg
ICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgLy8gSWYgd2Ug
aGF2ZSBubyBicmVha2FibGUgY2hhcmFjdGVycyBhdCBhbGwsCi0gICAgICAgICAgICAgICAgLy8g
dGhlbiB0aGlzIGlzIHRoZSBlYXN5IGNhc2UuIFdlIGFkZCBvdXJzZWx2ZXMgdG8gdGhlIGN1cnJl
bnQKLSAgICAgICAgICAgICAgICAvLyBtaW4gYW5kIG1heCBhbmQgY29udGludWUuCi0gICAgICAg
ICAgICAgICAgaWYgKCFoYXNCcmVha2FibGVDaGFyKSB7Ci0gICAgICAgICAgICAgICAgICAgIGlu
bGluZU1pbiArPSBjaGlsZE1pbjsKLSAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAg
ICAgICAgICAgICAvLyBXZSBoYXZlIGEgYnJlYWthYmxlIGNoYXJhY3Rlci4gIE5vdyB3ZSBuZWVk
IHRvIGtub3cgaWYKLSAgICAgICAgICAgICAgICAgICAgLy8gd2Ugc3RhcnQgYW5kIGVuZCB3aXRo
IHdoaXRlc3BhY2UuCi0gICAgICAgICAgICAgICAgICAgIGlmIChiZWdpbldTKQotICAgICAgICAg
ICAgICAgICAgICAgICAgLy8gR28gYWhlYWQgYW5kIGVuZCB0aGUgY3VycmVudCBsaW5lLgotICAg
ICAgICAgICAgICAgICAgICAgICAgbWluTG9naWNhbFdpZHRoID0gcHJlZmVycmVkV2lkdGgobWlu
TG9naWNhbFdpZHRoLCBpbmxpbmVNaW4pOwotICAgICAgICAgICAgICAgICAgICBlbHNlIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGlubGluZU1pbiArPSBiZWdpbk1pbjsKLSAgICAgICAgICAg
ICAgICAgICAgICAgIG1pbkxvZ2ljYWxXaWR0aCA9IHByZWZlcnJlZFdpZHRoKG1pbkxvZ2ljYWxX
aWR0aCwgaW5saW5lTWluKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGNoaWxkTWluIC09IHRp
OwotICAgICAgICAgICAgICAgICAgICB9Ci0KLSAgICAgICAgICAgICAgICAgICAgaW5saW5lTWlu
ID0gY2hpbGRNaW47Ci0KLSAgICAgICAgICAgICAgICAgICAgaWYgKGVuZFdTKSB7Ci0gICAgICAg
ICAgICAgICAgICAgICAgICAvLyBXZSBlbmQgaW4gd2hpdGVzcGFjZSwgd2hpY2ggbWVhbnMgd2Ug
Y2FuIGdvIGFoZWFkCi0gICAgICAgICAgICAgICAgICAgICAgICAvLyBhbmQgZW5kIG91ciBjdXJy
ZW50IGxpbmUuCi0gICAgICAgICAgICAgICAgICAgICAgICBtaW5Mb2dpY2FsV2lkdGggPSBwcmVm
ZXJyZWRXaWR0aChtaW5Mb2dpY2FsV2lkdGgsIGlubGluZU1pbik7Ci0gICAgICAgICAgICAgICAg
ICAgICAgICBpbmxpbmVNaW4gPSAwOwotICAgICAgICAgICAgICAgICAgICAgICAgc2hvdWxkQnJl
YWtMaW5lQWZ0ZXJUZXh0ID0gZmFsc2U7Ci0gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBtaW5Mb2dpY2FsV2lkdGggPSBwcmVmZXJyZWRXaWR0aCht
aW5Mb2dpY2FsV2lkdGgsIGlubGluZU1pbik7Ci0gICAgICAgICAgICAgICAgICAgICAgICBpbmxp
bmVNaW4gPSBlbmRNaW47Ci0gICAgICAgICAgICAgICAgICAgICAgICBzaG91bGRCcmVha0xpbmVB
ZnRlclRleHQgPSB0cnVlOwotICAgICAgICAgICAgICAgICAgICB9Ci0gICAgICAgICAgICAgICAg
fQotCi0gICAgICAgICAgICAgICAgaWYgKGhhc0JyZWFrKSB7Ci0gICAgICAgICAgICAgICAgICAg
IGlubGluZU1heCArPSBiZWdpbk1heDsKLSAgICAgICAgICAgICAgICAgICAgbWF4TG9naWNhbFdp
ZHRoID0gcHJlZmVycmVkV2lkdGgobWF4TG9naWNhbFdpZHRoLCBpbmxpbmVNYXgpOwotICAgICAg
ICAgICAgICAgICAgICBtYXhMb2dpY2FsV2lkdGggPSBwcmVmZXJyZWRXaWR0aChtYXhMb2dpY2Fs
V2lkdGgsIGNoaWxkTWF4KTsKLSAgICAgICAgICAgICAgICAgICAgaW5saW5lTWF4ID0gZW5kTWF4
OwotICAgICAgICAgICAgICAgICAgICBhZGRlZFRleHRJbmRlbnQgPSB0cnVlOwotICAgICAgICAg
ICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICBpbmxpbmVNYXggKz0gc3RkOjptYXg8
ZmxvYXQ+KDAsIGNoaWxkTWF4KTsKLSAgICAgICAgICAgIH0KLQotICAgICAgICAgICAgLy8gSWdu
b3JlIHNwYWNlcyBhZnRlciBhIGxpc3QgbWFya2VyLgotICAgICAgICAgICAgaWYgKGNoaWxkLT5p
c0xpc3RNYXJrZXIoKSkKLSAgICAgICAgICAgICAgICBzdHJpcEZyb250U3BhY2VzID0gdHJ1ZTsK
LSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIG1pbkxvZ2ljYWxXaWR0aCA9IHByZWZlcnJl
ZFdpZHRoKG1pbkxvZ2ljYWxXaWR0aCwgaW5saW5lTWluKTsKLSAgICAgICAgICAgIG1heExvZ2lj
YWxXaWR0aCA9IHByZWZlcnJlZFdpZHRoKG1heExvZ2ljYWxXaWR0aCwgaW5saW5lTWF4KTsKLSAg
ICAgICAgICAgIGlubGluZU1pbiA9IGlubGluZU1heCA9IDA7Ci0gICAgICAgICAgICBzdHJpcEZy
b250U3BhY2VzID0gdHJ1ZTsKLSAgICAgICAgICAgIHRyYWlsaW5nU3BhY2VDaGlsZCA9IDA7Ci0g
ICAgICAgICAgICBhZGRlZFRleHRJbmRlbnQgPSB0cnVlOwotICAgICAgICB9Ci0KLSAgICAgICAg
aWYgKCFjaGlsZC0+aXNUZXh0KCkgJiYgY2hpbGQtPmlzUmVuZGVySW5saW5lKCkpCi0gICAgICAg
ICAgICBpc1ByZXZDaGlsZElubGluZUZsb3cgPSB0cnVlOwotICAgICAgICBlbHNlCi0gICAgICAg
ICAgICBpc1ByZXZDaGlsZElubGluZUZsb3cgPSBmYWxzZTsKLQotICAgICAgICBvbGRBdXRvV3Jh
cCA9IGF1dG9XcmFwOwotICAgIH0KLQotICAgIGlmIChzdHlsZVRvVXNlLmNvbGxhcHNlV2hpdGVT
cGFjZSgpKQotICAgICAgICBzdHJpcFRyYWlsaW5nU3BhY2UoaW5saW5lTWF4LCBpbmxpbmVNaW4s
IHRyYWlsaW5nU3BhY2VDaGlsZCk7Ci0KLSAgICBtaW5Mb2dpY2FsV2lkdGggPSBwcmVmZXJyZWRX
aWR0aChtaW5Mb2dpY2FsV2lkdGgsIGlubGluZU1pbik7Ci0gICAgbWF4TG9naWNhbFdpZHRoID0g
cHJlZmVycmVkV2lkdGgobWF4TG9naWNhbFdpZHRoLCBpbmxpbmVNYXgpOwotfQotCiB2b2lkIFJl
bmRlckJsb2NrOjpjb21wdXRlQmxvY2tQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKExheW91dFVuaXQm
IG1pbkxvZ2ljYWxXaWR0aCwgTGF5b3V0VW5pdCYgbWF4TG9naWNhbFdpZHRoKSBjb25zdAogewog
ICAgIGNvbnN0IFJlbmRlclN0eWxlJiBzdHlsZVRvVXNlID0gc3R5bGUoKTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJCbG9jay5oIGIvU291cmNlL1dlYkNvcmUv
cmVuZGVyaW5nL1JlbmRlckJsb2NrLmgKaW5kZXggZWU3MGU3NjNiYzhlMmEwMDA1ZGEzNmMxOTg3
ODZhYzYyZWEwYjkzYS4uOWE0Y2Y4OGEzYzQ1MjU1NTNkNjg4MDgwNGEwOTQ2MzZmM2RlZjhlYiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmgKQEAgLTQ0MSw4ICs0NDEsNiBA
QCBwcml2YXRlOgogCiAgICAgdmlydHVhbCBib29sIGlzUG9pbnRJbk92ZXJmbG93Q29udHJvbChI
aXRUZXN0UmVzdWx0JiwgY29uc3QgTGF5b3V0UG9pbnQmIGxvY2F0aW9uSW5Db250YWluZXIsIGNv
bnN0IExheW91dFBvaW50JiBhY2N1bXVsYXRlZE9mZnNldCk7CiAKLSAgICAvLyBGSVhNRTogTWFr
ZSB0aGlzIG1ldGhvZCBjb25zdCBzbyB3ZSBjYW4gcmVtb3ZlIHRoZSBjb25zdF9jYXN0IGluIGNv
bXB1dGVJbnRyaW5zaWNMb2dpY2FsV2lkdGhzLgotICAgIHZvaWQgY29tcHV0ZUlubGluZVByZWZl
cnJlZExvZ2ljYWxXaWR0aHMoTGF5b3V0VW5pdCYgbWluTG9naWNhbFdpZHRoLCBMYXlvdXRVbml0
JiBtYXhMb2dpY2FsV2lkdGgpOwogICAgIHZvaWQgY29tcHV0ZUJsb2NrUHJlZmVycmVkTG9naWNh
bFdpZHRocyhMYXlvdXRVbml0JiBtaW5Mb2dpY2FsV2lkdGgsIExheW91dFVuaXQmIG1heExvZ2lj
YWxXaWR0aCkgY29uc3Q7CiAKICAgICAvLyBPYnRhaW5zIHRoZSBuZWFyZXN0IGVuY2xvc2luZyBi
bG9jayAoaW5jbHVkaW5nIHRoaXMgYmxvY2spIHRoYXQgY29udHJpYnV0ZXMgYSBmaXJzdC1saW5l
IHN0eWxlIHRvIG91ciBpbmxpbmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJCbG9ja0Zsb3cuY3BwIGIvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJs
b2NrRmxvdy5jcHAKaW5kZXggODNiZjFhZWNkYTdiNGMzNjUzOTVhNDdmNjNmZTliOWE2Mzg5OWM3
Yy4uYmY3M2EyNmVhYjA5OWUwZjhjOTEzMzFlNDU3NGM3MGVlOWU0MDlmNyAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5jcHAKQEAgLTMyLDcgKzMyLDkgQEAK
ICNpbmNsdWRlICJIaXRUZXN0TG9jYXRpb24uaCIKICNpbmNsdWRlICJJbmxpbmVUZXh0Qm94Lmgi
CiAjaW5jbHVkZSAiTGF5b3V0UmVwYWludGVyLmgiCisjaW5jbHVkZSAiUmVuZGVyQ29tYmluZVRl
eHQuaCIKICNpbmNsdWRlICJSZW5kZXJGbG93VGhyZWFkLmgiCisjaW5jbHVkZSAiUmVuZGVySW5s
aW5lLmgiCiAjaW5jbHVkZSAiUmVuZGVySXRlcmF0b3IuaCIKICNpbmNsdWRlICJSZW5kZXJMYXll
ci5oIgogI2luY2x1ZGUgIlJlbmRlckxpc3RJdGVtLmgiCkBAIC0zNTEsMTAgKzM1Myw5IEBAIHZv
aWQgUmVuZGVyQmxvY2tGbG93OjphZGp1c3RJbnRyaW5zaWNMb2dpY2FsV2lkdGhzRm9yQ29sdW1u
cyhMYXlvdXRVbml0JiBtaW5Mb2dpCiAKIHZvaWQgUmVuZGVyQmxvY2tGbG93Ojpjb21wdXRlSW50
cmluc2ljTG9naWNhbFdpZHRocyhMYXlvdXRVbml0JiBtaW5Mb2dpY2FsV2lkdGgsIExheW91dFVu
aXQmIG1heExvZ2ljYWxXaWR0aCkgY29uc3QKIHsKLSAgICBpZiAoY2hpbGRyZW5JbmxpbmUoKSkg
ewotICAgICAgICAvLyBGSVhNRTogUmVtb3ZlIHRoaXMgY29uc3RfY2FzdC4KLSAgICAgICAgY29u
c3RfY2FzdDxSZW5kZXJCbG9ja0Zsb3cqPih0aGlzKS0+Y29tcHV0ZUlubGluZVByZWZlcnJlZExv
Z2ljYWxXaWR0aHMobWluTG9naWNhbFdpZHRoLCBtYXhMb2dpY2FsV2lkdGgpOwotICAgIH0gZWxz
ZQorICAgIGlmIChjaGlsZHJlbklubGluZSgpKQorICAgICAgICBjb21wdXRlSW5saW5lUHJlZmVy
cmVkTG9naWNhbFdpZHRocyhtaW5Mb2dpY2FsV2lkdGgsIG1heExvZ2ljYWxXaWR0aCk7CisgICAg
ZWxzZQogICAgICAgICBjb21wdXRlQmxvY2tQcmVmZXJyZWRMb2dpY2FsV2lkdGhzKG1pbkxvZ2lj
YWxXaWR0aCwgbWF4TG9naWNhbFdpZHRoKTsKIAogICAgIG1heExvZ2ljYWxXaWR0aCA9IHN0ZDo6
bWF4KG1pbkxvZ2ljYWxXaWR0aCwgbWF4TG9naWNhbFdpZHRoKTsKQEAgLTM4MTIsNSArMzgxMyw0
MTYgQEAgYm9vbCBSZW5kZXJCbG9ja0Zsb3c6OmlzTGVmdExheW91dE92ZXJmbG93QWxsb3dlZCgp
IGNvbnN0CiAgICAgcmV0dXJuIGhhc0xlZnRPdmVyZmxvdzsKIH0KIAorc3RydWN0IElubGluZU1p
bk1heEl0ZXJhdG9yIHsKKy8qIElubGluZU1pbk1heEl0ZXJhdG9yIGlzIGEgY2xhc3MgdGhhdCB3
aWxsIGl0ZXJhdGUgb3ZlciBhbGwgcmVuZGVyIG9iamVjdHMgdGhhdCBjb250cmlidXRlIHRvCisg
ICBpbmxpbmUgbWluL21heCB3aWR0aCBjYWxjdWxhdGlvbnMuICBOb3RlIHRoZSBmb2xsb3dpbmcg
YWJvdXQgdGhlIHdheSBpdCB3YWxrczoKKyAgICgxKSBQb3NpdGlvbmVkIGNvbnRlbnQgaXMgc2tp
cHBlZCAoc2luY2UgaXQgZG9lcyBub3QgY29udHJpYnV0ZSB0byBtaW4vbWF4IHdpZHRoIG9mIGEg
YmxvY2spCisgICAoMikgV2UgZG8gbm90IGRyaWxsIGludG8gdGhlIGNoaWxkcmVuIG9mIGZsb2F0
cyBvciByZXBsYWNlZCBlbGVtZW50cywgc2luY2UgeW91IGNhbid0IGJyZWFrCisgICAgICAgaW4g
dGhlIG1pZGRsZSBvZiBzdWNoIGFuIGVsZW1lbnQuCisgICAoMykgSW5saW5lIGZsb3dzIChlLmcu
LCA8YT4sIDxzcGFuPiwgPGk+KSBhcmUgd2Fsa2VkIHR3aWNlLCBzaW5jZSBlYWNoIHNpZGUgY2Fu
IGhhdmUKKyAgICAgICBkaXN0aW5jdCBib3JkZXJzL21hcmdpbi9wYWRkaW5nIHRoYXQgY29udHJp
YnV0ZSB0byB0aGUgbWluL21heCB3aWR0aC4KKyovCisgICAgY29uc3QgUmVuZGVyQmxvY2tGbG93
JiBwYXJlbnQ7CisgICAgUmVuZGVyT2JqZWN0KiBjdXJyZW50OworICAgIGJvb2wgZW5kT2ZJbmxp
bmU7CisgICAgYm9vbCBpbml0aWFsOworCisgICAgSW5saW5lTWluTWF4SXRlcmF0b3IoY29uc3Qg
UmVuZGVyQmxvY2tGbG93JiBwKQorICAgICAgICA6IHBhcmVudChwKQorICAgICAgICAsIGN1cnJl
bnQobnVsbHB0cikKKyAgICAgICAgLCBlbmRPZklubGluZShmYWxzZSkKKyAgICAgICAgLCBpbml0
aWFsKHRydWUpCisgICAgICAgIHsgfQorCisgICAgUmVuZGVyT2JqZWN0KiBuZXh0KCk7Cit9Owor
CitSZW5kZXJPYmplY3QqIElubGluZU1pbk1heEl0ZXJhdG9yOjpuZXh0KCkKK3sKKyAgICBSZW5k
ZXJPYmplY3QqIHJlc3VsdCA9IG51bGxwdHI7CisgICAgYm9vbCBvbGRFbmRPZklubGluZSA9IGVu
ZE9mSW5saW5lOworICAgIGVuZE9mSW5saW5lID0gZmFsc2U7CisgICAgZG8geworICAgICAgICBp
ZiAoIW9sZEVuZE9mSW5saW5lICYmIChjdXJyZW50ICYmICFjdXJyZW50LT5pc0Zsb2F0aW5nKCkg
JiYgIWN1cnJlbnQtPmlzUmVwbGFjZWQoKSAmJiAhY3VycmVudC0+aXNPdXRPZkZsb3dQb3NpdGlv
bmVkKCkpKQorICAgICAgICAgICAgcmVzdWx0ID0gY3VycmVudC0+Zmlyc3RDaGlsZFNsb3coKTsK
KyAgICAgICAgZWxzZSBpZiAoaW5pdGlhbCkgeworICAgICAgICAgICAgcmVzdWx0ID0gcGFyZW50
LmZpcnN0Q2hpbGQoKTsKKyAgICAgICAgICAgIGluaXRpYWwgPSBmYWxzZTsKKyAgICAgICAgfQor
CisgICAgICAgIGlmICghcmVzdWx0KSB7CisgICAgICAgICAgICAvLyBXZSBoaXQgdGhlIGVuZCBv
ZiBvdXIgaW5saW5lLiAoSXQgd2FzIGVtcHR5LCBlLmcuLCA8c3Bhbj48L3NwYW4+LikKKyAgICAg
ICAgICAgIGlmICghb2xkRW5kT2ZJbmxpbmUgJiYgY3VycmVudCAmJiBjdXJyZW50LT5pc1JlbmRl
cklubGluZSgpKSB7CisgICAgICAgICAgICAgICAgcmVzdWx0ID0gY3VycmVudDsKKyAgICAgICAg
ICAgICAgICBlbmRPZklubGluZSA9IHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgIHdoaWxlIChjdXJyZW50ICYmIGN1cnJlbnQgIT0gJnBh
cmVudCkgeworICAgICAgICAgICAgICAgIHJlc3VsdCA9IGN1cnJlbnQtPm5leHRTaWJsaW5nKCk7
CisgICAgICAgICAgICAgICAgaWYgKHJlc3VsdCkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgY3VycmVudCA9IGN1cnJlbnQtPnBhcmVudCgpOworICAgICAgICAg
ICAgICAgIGlmIChjdXJyZW50ICYmIGN1cnJlbnQgIT0gJnBhcmVudCAmJiBjdXJyZW50LT5pc1Jl
bmRlcklubGluZSgpKSB7CisgICAgICAgICAgICAgICAgICAgIHJlc3VsdCA9IGN1cnJlbnQ7Cisg
ICAgICAgICAgICAgICAgICAgIGVuZE9mSW5saW5lID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisK
KyAgICAgICAgaWYgKCFyZXN1bHQpCisgICAgICAgICAgICBicmVhazsKKworICAgICAgICBpZiAo
IXJlc3VsdC0+aXNPdXRPZkZsb3dQb3NpdGlvbmVkKCkgJiYgKHJlc3VsdC0+aXNUZXh0T3JMaW5l
QnJlYWsoKSB8fCByZXN1bHQtPmlzRmxvYXRpbmcoKSB8fCByZXN1bHQtPmlzUmVwbGFjZWQoKSB8
fCByZXN1bHQtPmlzUmVuZGVySW5saW5lKCkpKQorICAgICAgICAgICAgYnJlYWs7CisKKyAgICAg
ICAgY3VycmVudCA9IHJlc3VsdDsKKyAgICAgICAgcmVzdWx0ID0gbnVsbHB0cjsKKyAgICB9IHdo
aWxlIChjdXJyZW50IHx8IGN1cnJlbnQgPT0gJnBhcmVudCk7CisgICAgLy8gVXBkYXRlIG91ciBw
b3NpdGlvbi4KKyAgICBjdXJyZW50ID0gcmVzdWx0OworICAgIHJldHVybiByZXN1bHQ7Cit9CisK
K3N0YXRpYyBMYXlvdXRVbml0IGdldEJQTVdpZHRoKExheW91dFVuaXQgY2hpbGRWYWx1ZSwgTGVu
Z3RoIGNzc1VuaXQpCit7CisgICAgaWYgKGNzc1VuaXQudHlwZSgpICE9IEF1dG8pCisgICAgICAg
IHJldHVybiAoY3NzVW5pdC5pc0ZpeGVkKCkgPyBMYXlvdXRVbml0KGNzc1VuaXQudmFsdWUoKSkg
OiBjaGlsZFZhbHVlKTsKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIExheW91dFVuaXQgZ2V0
Qm9yZGVyUGFkZGluZ01hcmdpbihjb25zdCBSZW5kZXJCb3hNb2RlbE9iamVjdCYgY2hpbGQsIGJv
b2wgZW5kT2ZJbmxpbmUpCit7CisgICAgY29uc3QgUmVuZGVyU3R5bGUmIGNoaWxkU3R5bGUgPSBj
aGlsZC5zdHlsZSgpOworICAgIGlmIChlbmRPZklubGluZSkgeworICAgICAgICByZXR1cm4gZ2V0
QlBNV2lkdGgoY2hpbGQubWFyZ2luRW5kKCksIGNoaWxkU3R5bGUubWFyZ2luRW5kKCkpICsKKyAg
ICAgICAgICAgICAgIGdldEJQTVdpZHRoKGNoaWxkLnBhZGRpbmdFbmQoKSwgY2hpbGRTdHlsZS5w
YWRkaW5nRW5kKCkpICsKKyAgICAgICAgICAgICAgIGNoaWxkLmJvcmRlckVuZCgpOworICAgIH0K
KyAgICByZXR1cm4gZ2V0QlBNV2lkdGgoY2hpbGQubWFyZ2luU3RhcnQoKSwgY2hpbGRTdHlsZS5t
YXJnaW5TdGFydCgpKSArCisgICAgICAgICAgICAgICBnZXRCUE1XaWR0aChjaGlsZC5wYWRkaW5n
U3RhcnQoKSwgY2hpbGRTdHlsZS5wYWRkaW5nU3RhcnQoKSkgKworICAgICAgICAgICAgICAgY2hp
bGQuYm9yZGVyU3RhcnQoKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHN0cmlwVHJhaWxpbmdT
cGFjZShmbG9hdCYgaW5saW5lTWF4LCBmbG9hdCYgaW5saW5lTWluLCBSZW5kZXJPYmplY3QqIHRy
YWlsaW5nU3BhY2VDaGlsZCkKK3sKKyAgICBpZiAodHJhaWxpbmdTcGFjZUNoaWxkICYmIHRyYWls
aW5nU3BhY2VDaGlsZC0+aXNUZXh0KCkpIHsKKyAgICAgICAgLy8gQ29sbGFwc2UgYXdheSB0aGUg
dHJhaWxpbmcgc3BhY2UgYXQgdGhlIGVuZCBvZiBhIGJsb2NrLgorICAgICAgICBSZW5kZXJUZXh0
KiB0ID0gdG9SZW5kZXJUZXh0KHRyYWlsaW5nU3BhY2VDaGlsZCk7CisgICAgICAgIGNvbnN0IFVD
aGFyIHNwYWNlID0gJyAnOworICAgICAgICBjb25zdCBGb250JiBmb250ID0gdC0+c3R5bGUoKS5m
b250KCk7IC8vIEZJWE1FOiBUaGlzIGlnbm9yZXMgZmlyc3QtbGluZS4KKyAgICAgICAgZmxvYXQg
c3BhY2VXaWR0aCA9IGZvbnQud2lkdGgoUmVuZGVyQmxvY2s6OmNvbnN0cnVjdFRleHRSdW4odCwg
Zm9udCwgJnNwYWNlLCAxLCB0LT5zdHlsZSgpKSk7CisgICAgICAgIGlubGluZU1heCAtPSBzcGFj
ZVdpZHRoICsgZm9udC53b3JkU3BhY2luZygpOworICAgICAgICBpZiAoaW5saW5lTWluID4gaW5s
aW5lTWF4KQorICAgICAgICAgICAgaW5saW5lTWluID0gaW5saW5lTWF4OworICAgIH0KK30KKwor
c3RhdGljIGlubGluZSBMYXlvdXRVbml0IHByZWZlcnJlZFdpZHRoKExheW91dFVuaXQgcHJlZmVy
cmVkV2lkdGgsIGZsb2F0IHJlc3VsdCkKK3sKKyAgICByZXR1cm4gc3RkOjptYXgocHJlZmVycmVk
V2lkdGgsIExheW91dFVuaXQ6OmZyb21GbG9hdENlaWwocmVzdWx0KSk7Cit9CisKK3ZvaWQgUmVu
ZGVyQmxvY2tGbG93Ojpjb21wdXRlSW5saW5lUHJlZmVycmVkTG9naWNhbFdpZHRocyhMYXlvdXRV
bml0JiBtaW5Mb2dpY2FsV2lkdGgsIExheW91dFVuaXQmIG1heExvZ2ljYWxXaWR0aCkgY29uc3QK
K3sKKyAgICBmbG9hdCBpbmxpbmVNYXggPSAwOworICAgIGZsb2F0IGlubGluZU1pbiA9IDA7CisK
KyAgICBjb25zdCBSZW5kZXJTdHlsZSYgc3R5bGVUb1VzZSA9IHN0eWxlKCk7CisgICAgUmVuZGVy
QmxvY2sqIGNvbnRhaW5pbmdCbG9jayA9IHRoaXMtPmNvbnRhaW5pbmdCbG9jaygpOworICAgIExh
eW91dFVuaXQgY3cgPSBjb250YWluaW5nQmxvY2sgPyBjb250YWluaW5nQmxvY2stPmNvbnRlbnRM
b2dpY2FsV2lkdGgoKSA6IExheW91dFVuaXQoKTsKKworICAgIC8vIElmIHdlIGFyZSBhdCB0aGUg
c3RhcnQgb2YgYSBsaW5lLCB3ZSB3YW50IHRvIGlnbm9yZSBhbGwgd2hpdGUtc3BhY2UuCisgICAg
Ly8gQWxzbyBzdHJpcCBzcGFjZXMgaWYgd2UgcHJldmlvdXNseSBoYWQgdGV4dCB0aGF0IGVuZGVk
IGluIGEgdHJhaWxpbmcgc3BhY2UuCisgICAgYm9vbCBzdHJpcEZyb250U3BhY2VzID0gdHJ1ZTsK
KyAgICBSZW5kZXJPYmplY3QqIHRyYWlsaW5nU3BhY2VDaGlsZCA9IDA7CisKKyAgICAvLyBGaXJl
Zm94IGFuZCBPcGVyYSB3aWxsIGFsbG93IGEgdGFibGUgY2VsbCB0byBncm93IHRvIGZpdCBhbiBp
bWFnZSBpbnNpZGUgaXQgdW5kZXIKKyAgICAvLyB2ZXJ5IHNwZWNpZmljIGNpcnVjdW1zdGFuY2Vz
IChpbiBvcmRlciB0byBtYXRjaCBjb21tb24gV2luSUUgcmVuZGVyaW5ncykuIAorICAgIC8vIE5v
dCBzdXBwb3J0aW5nIHRoZSBxdWlyayBoYXMgY2F1c2VkIHVzIHRvIG1pcy1yZW5kZXIgc29tZSBy
ZWFsIHNpdGVzLiAoU2VlIEJ1Z3ppbGxhIDEwNTE3LikgCisgICAgYm9vbCBhbGxvd0ltYWdlc1Rv
QnJlYWsgPSAhZG9jdW1lbnQoKS5pblF1aXJrc01vZGUoKSB8fCAhaXNUYWJsZUNlbGwoKSB8fCAh
c3R5bGVUb1VzZS5sb2dpY2FsV2lkdGgoKS5pc0ludHJpbnNpY09yQXV0bygpOworCisgICAgYm9v
bCBhdXRvV3JhcCwgb2xkQXV0b1dyYXA7CisgICAgYXV0b1dyYXAgPSBvbGRBdXRvV3JhcCA9IHN0
eWxlVG9Vc2UuYXV0b1dyYXAoKTsKKworICAgIElubGluZU1pbk1heEl0ZXJhdG9yIGNoaWxkSXRl
cmF0b3IoKnRoaXMpOworCisgICAgLy8gT25seSBnZXRzIGFkZGVkIHRvIHRoZSBtYXggcHJlZmZl
cmVkIHdpZHRoIG9uY2UuCisgICAgYm9vbCBhZGRlZFRleHRJbmRlbnQgPSBmYWxzZTsKKyAgICAv
LyBTaWduYWxzIHRoZSB0ZXh0IGluZGVudCB3YXMgbW9yZSBuZWdhdGl2ZSB0aGFuIHRoZSBtaW4g
cHJlZmVycmVkIHdpZHRoCisgICAgYm9vbCBoYXNSZW1haW5pbmdOZWdhdGl2ZVRleHRJbmRlbnQg
PSBmYWxzZTsKKworICAgIExheW91dFVuaXQgdGV4dEluZGVudCA9IG1pbmltdW1WYWx1ZUZvckxl
bmd0aChzdHlsZVRvVXNlLnRleHRJbmRlbnQoKSwgY3cpOworICAgIFJlbmRlck9iamVjdCogcHJl
dkZsb2F0ID0gMDsKKyAgICBib29sIGlzUHJldkNoaWxkSW5saW5lRmxvdyA9IGZhbHNlOworICAg
IGJvb2wgc2hvdWxkQnJlYWtMaW5lQWZ0ZXJUZXh0ID0gZmFsc2U7CisgICAgd2hpbGUgKFJlbmRl
ck9iamVjdCogY2hpbGQgPSBjaGlsZEl0ZXJhdG9yLm5leHQoKSkgeworICAgICAgICBhdXRvV3Jh
cCA9IGNoaWxkLT5pc1JlcGxhY2VkKCkgPyBjaGlsZC0+cGFyZW50KCktPnN0eWxlKCkuYXV0b1dy
YXAoKSA6IAorICAgICAgICAgICAgY2hpbGQtPnN0eWxlKCkuYXV0b1dyYXAoKTsKKworICAgICAg
ICBpZiAoIWNoaWxkLT5pc0JSKCkpIHsKKyAgICAgICAgICAgIC8vIFN0ZXAgT25lOiBkZXRlcm1p
bmUgd2hldGhlciBvciBub3Qgd2UgbmVlZCB0byBnbyBhaGVhZCBhbmQKKyAgICAgICAgICAgIC8v
IHRlcm1pbmF0ZSBvdXIgY3VycmVudCBsaW5lLiBFYWNoIGRpc2NyZXRlIGNodW5rIGNhbiBiZWNv
bWUKKyAgICAgICAgICAgIC8vIHRoZSBuZXcgbWluLXdpZHRoLCBpZiBpdCBpcyB0aGUgd2lkZXN0
IGNodW5rIHNlZW4gc28gZmFyLCBhbmQKKyAgICAgICAgICAgIC8vIGl0IGNhbiBhbHNvIGJlY29t
ZSB0aGUgbWF4LXdpZHRoLgorCisgICAgICAgICAgICAvLyBDaGlsZHJlbiBmYWxsIGludG8gdGhy
ZWUgY2F0ZWdvcmllczoKKyAgICAgICAgICAgIC8vICgxKSBBbiBpbmxpbmUgZmxvdyBvYmplY3Qu
IFRoZXNlIG9iamVjdHMgYWx3YXlzIGhhdmUgYSBtaW4vbWF4IG9mIDAsCisgICAgICAgICAgICAv
LyBhbmQgYXJlIGluY2x1ZGVkIGluIHRoZSBpdGVyYXRpb24gc29sZWx5IHNvIHRoYXQgdGhlaXIg
bWFyZ2lucyBjYW4KKyAgICAgICAgICAgIC8vIGJlIGFkZGVkIGluLgorICAgICAgICAgICAgLy8K
KyAgICAgICAgICAgIC8vICgyKSBBbiBpbmxpbmUgbm9uLXRleHQgbm9uLWZsb3cgb2JqZWN0LCBl
LmcuLCBhbiBpbmxpbmUgcmVwbGFjZWQgZWxlbWVudC4KKyAgICAgICAgICAgIC8vIFRoZXNlIG9i
amVjdHMgY2FuIGFsd2F5cyBiZSBvbiBhIGxpbmUgYnkgdGhlbXNlbHZlcywgc28gaW4gdGhpcyBz
aXR1YXRpb24KKyAgICAgICAgICAgIC8vIHdlIG5lZWQgdG8gZ28gYWhlYWQgYW5kIGJyZWFrIHRo
ZSBjdXJyZW50IGxpbmUsIGFuZCB0aGVuIGFkZCBpbiBvdXIgb3duCisgICAgICAgICAgICAvLyBt
YXJnaW5zIGFuZCBtaW4vbWF4IHdpZHRoIG9uIGl0cyBvd24gbGluZSwgYW5kIHRoZW4gdGVybWlu
YXRlIHRoZSBsaW5lLgorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8vICgzKSBBIHRleHQg
b2JqZWN0LiBUZXh0IHJ1bnMgY2FuIGhhdmUgYnJlYWthYmxlIGNoYXJhY3RlcnMgYXQgdGhlIHN0
YXJ0LAorICAgICAgICAgICAgLy8gdGhlIG1pZGRsZSBvciB0aGUgZW5kLiBUaGV5IG1heSBhbHNv
IGxvc2Ugd2hpdGVzcGFjZSBvZmYgdGhlIGZyb250IGlmCisgICAgICAgICAgICAvLyB3ZSdyZSBh
bHJlYWR5IGlnbm9yaW5nIHdoaXRlc3BhY2UuIEluIG9yZGVyIHRvIGNvbXB1dGUgYWNjdXJhdGUg
bWluLXdpZHRoCisgICAgICAgICAgICAvLyBpbmZvcm1hdGlvbiwgd2UgbmVlZCB0aHJlZSBwaWVj
ZXMgb2YgaW5mb3JtYXRpb24uCisgICAgICAgICAgICAvLyAoYSkgdGhlIG1pbi13aWR0aCBvZiB0
aGUgZmlyc3Qgbm9uLWJyZWFrYWJsZSBydW4uIFNob3VsZCBiZSAwIGlmIHRoZSB0ZXh0IHN0cmlu
ZworICAgICAgICAgICAgLy8gc3RhcnRzIHdpdGggd2hpdGVzcGFjZS4KKyAgICAgICAgICAgIC8v
IChiKSB0aGUgbWluLXdpZHRoIG9mIHRoZSBsYXN0IG5vbi1icmVha2FibGUgcnVuLiBTaG91bGQg
YmUgMCBpZiB0aGUgdGV4dCBzdHJpbmcKKyAgICAgICAgICAgIC8vIGVuZHMgd2l0aCB3aGl0ZXNw
YWNlLgorICAgICAgICAgICAgLy8gKGMpIHRoZSBtaW4vbWF4IHdpZHRoIG9mIHRoZSBzdHJpbmcg
KHRyaW1tZWQgZm9yIHdoaXRlc3BhY2UpLgorICAgICAgICAgICAgLy8KKyAgICAgICAgICAgIC8v
IElmIHRoZSB0ZXh0IHN0cmluZyBzdGFydHMgd2l0aCB3aGl0ZXNwYWNlLCB0aGVuIHdlIG5lZWQg
dG8gZ28gYWhlYWQgYW5kCisgICAgICAgICAgICAvLyB0ZXJtaW5hdGUgb3VyIGN1cnJlbnQgbGlu
ZSAodW5sZXNzIHdlJ3JlIGFscmVhZHkgaW4gYSB3aGl0ZXNwYWNlIHN0cmlwcGluZworICAgICAg
ICAgICAgLy8gbW9kZS4KKyAgICAgICAgICAgIC8vCisgICAgICAgICAgICAvLyBJZiB0aGUgdGV4
dCBzdHJpbmcgaGFzIGEgYnJlYWthYmxlIGNoYXJhY3RlciBpbiB0aGUgbWlkZGxlLCBidXQgZGlk
bid0IHN0YXJ0CisgICAgICAgICAgICAvLyB3aXRoIHdoaXRlc3BhY2UsIHRoZW4gd2UgYWRkIHRo
ZSB3aWR0aCBvZiB0aGUgZmlyc3Qgbm9uLWJyZWFrYWJsZSBydW4gYW5kCisgICAgICAgICAgICAv
LyB0aGVuIGVuZCB0aGUgY3VycmVudCBsaW5lLiBXZSB0aGVuIG5lZWQgdG8gdXNlIHRoZSBpbnRl
cm1lZGlhdGUgbWluL21heCB3aWR0aAorICAgICAgICAgICAgLy8gdmFsdWVzIChpZiBhbnkgb2Yg
dGhlbSBhcmUgbGFyZ2VyIHRoYW4gb3VyIGN1cnJlbnQgbWluL21heCkuIFdlIHRoZW4gbG9vayBh
dAorICAgICAgICAgICAgLy8gdGhlIHdpZHRoIG9mIHRoZSBsYXN0IG5vbi1icmVha2FibGUgcnVu
IGFuZCB1c2UgdGhhdCB0byBzdGFydCBhIG5ldyBsaW5lCisgICAgICAgICAgICAvLyAodW5sZXNz
IHdlIGVuZCBpbiB3aGl0ZXNwYWNlKS4KKyAgICAgICAgICAgIGNvbnN0IFJlbmRlclN0eWxlJiBj
aGlsZFN0eWxlID0gY2hpbGQtPnN0eWxlKCk7CisgICAgICAgICAgICBmbG9hdCBjaGlsZE1pbiA9
IDA7CisgICAgICAgICAgICBmbG9hdCBjaGlsZE1heCA9IDA7CisKKyAgICAgICAgICAgIGlmICgh
Y2hpbGQtPmlzVGV4dCgpKSB7CisgICAgICAgICAgICAgICAgaWYgKGNoaWxkLT5pc0xpbmVCcmVh
a09wcG9ydHVuaXR5KCkpIHsKKyAgICAgICAgICAgICAgICAgICAgbWluTG9naWNhbFdpZHRoID0g
cHJlZmVycmVkV2lkdGgobWluTG9naWNhbFdpZHRoLCBpbmxpbmVNaW4pOworICAgICAgICAgICAg
ICAgICAgICBpbmxpbmVNaW4gPSAwOworICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgLy8gQ2FzZSAoMSkgYW5kICgyKS4gSW5s
aW5lIHJlcGxhY2VkIGFuZCBpbmxpbmUgZmxvdyBlbGVtZW50cy4KKyAgICAgICAgICAgICAgICBp
ZiAoY2hpbGQtPmlzUmVuZGVySW5saW5lKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gQWRk
IGluIHBhZGRpbmcvYm9yZGVyL21hcmdpbiBmcm9tIHRoZSBhcHByb3ByaWF0ZSBzaWRlIG9mCisg
ICAgICAgICAgICAgICAgICAgIC8vIHRoZSBlbGVtZW50LgorICAgICAgICAgICAgICAgICAgICBm
bG9hdCBicG0gPSBnZXRCb3JkZXJQYWRkaW5nTWFyZ2luKCp0b1JlbmRlcklubGluZShjaGlsZCks
IGNoaWxkSXRlcmF0b3IuZW5kT2ZJbmxpbmUpOworICAgICAgICAgICAgICAgICAgICBjaGlsZE1p
biArPSBicG07CisgICAgICAgICAgICAgICAgICAgIGNoaWxkTWF4ICs9IGJwbTsKKworICAgICAg
ICAgICAgICAgICAgICBpbmxpbmVNaW4gKz0gY2hpbGRNaW47CisgICAgICAgICAgICAgICAgICAg
IGlubGluZU1heCArPSBjaGlsZE1heDsKKworICAgICAgICAgICAgICAgICAgICBjaGlsZC0+c2V0
UHJlZmVycmVkTG9naWNhbFdpZHRoc0RpcnR5KGZhbHNlKTsKKyAgICAgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgICAgICAvLyBJbmxpbmUgcmVwbGFjZWQgZWx0cyBhZGQgaW4g
dGhlaXIgbWFyZ2lucyB0byB0aGVpciBtaW4vbWF4IHZhbHVlcy4KKyAgICAgICAgICAgICAgICAg
ICAgTGF5b3V0VW5pdCBtYXJnaW5zID0gMDsKKyAgICAgICAgICAgICAgICAgICAgTGVuZ3RoIHN0
YXJ0TWFyZ2luID0gY2hpbGRTdHlsZS5tYXJnaW5TdGFydCgpOworICAgICAgICAgICAgICAgICAg
ICBMZW5ndGggZW5kTWFyZ2luID0gY2hpbGRTdHlsZS5tYXJnaW5FbmQoKTsKKyAgICAgICAgICAg
ICAgICAgICAgaWYgKHN0YXJ0TWFyZ2luLmlzRml4ZWQoKSkKKyAgICAgICAgICAgICAgICAgICAg
ICAgIG1hcmdpbnMgKz0gTGF5b3V0VW5pdDo6ZnJvbUZsb2F0Q2VpbChzdGFydE1hcmdpbi52YWx1
ZSgpKTsKKyAgICAgICAgICAgICAgICAgICAgaWYgKGVuZE1hcmdpbi5pc0ZpeGVkKCkpCisgICAg
ICAgICAgICAgICAgICAgICAgICBtYXJnaW5zICs9IExheW91dFVuaXQ6OmZyb21GbG9hdENlaWwo
ZW5kTWFyZ2luLnZhbHVlKCkpOworICAgICAgICAgICAgICAgICAgICBjaGlsZE1pbiArPSBtYXJn
aW5zLmNlaWxUb0Zsb2F0KCk7CisgICAgICAgICAgICAgICAgICAgIGNoaWxkTWF4ICs9IG1hcmdp
bnMuY2VpbFRvRmxvYXQoKTsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgIGlmICghY2hpbGQtPmlzUmVuZGVySW5saW5lKCkgJiYgIWNoaWxkLT5pc1RleHQo
KSkgeworICAgICAgICAgICAgICAgIC8vIENhc2UgKDIpLiBJbmxpbmUgcmVwbGFjZWQgZWxlbWVu
dHMgYW5kIGZsb2F0cy4KKyAgICAgICAgICAgICAgICAvLyBHbyBhaGVhZCBhbmQgdGVybWluYXRl
IHRoZSBjdXJyZW50IGxpbmUgYXMgZmFyIGFzCisgICAgICAgICAgICAgICAgLy8gbWlud2lkdGgg
aXMgY29uY2VybmVkLgorICAgICAgICAgICAgICAgIGNoaWxkTWluICs9IGNoaWxkLT5taW5QcmVm
ZXJyZWRMb2dpY2FsV2lkdGgoKS5jZWlsVG9GbG9hdCgpOworICAgICAgICAgICAgICAgIGNoaWxk
TWF4ICs9IGNoaWxkLT5tYXhQcmVmZXJyZWRMb2dpY2FsV2lkdGgoKS5jZWlsVG9GbG9hdCgpOwor
CisgICAgICAgICAgICAgICAgYm9vbCBjbGVhclByZXZpb3VzRmxvYXQ7CisgICAgICAgICAgICAg
ICAgaWYgKGNoaWxkLT5pc0Zsb2F0aW5nKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgY2xlYXJQ
cmV2aW91c0Zsb2F0ID0gKHByZXZGbG9hdAorICAgICAgICAgICAgICAgICAgICAgICAgJiYgKChw
cmV2RmxvYXQtPnN0eWxlKCkuZmxvYXRpbmcoKSA9PSBMZWZ0RmxvYXQgJiYgKGNoaWxkU3R5bGUu
Y2xlYXIoKSAmIENMRUZUKSkKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCAocHJldkZs
b2F0LT5zdHlsZSgpLmZsb2F0aW5nKCkgPT0gUmlnaHRGbG9hdCAmJiAoY2hpbGRTdHlsZS5jbGVh
cigpICYgQ1JJR0hUKSkpKTsKKyAgICAgICAgICAgICAgICAgICAgcHJldkZsb2F0ID0gY2hpbGQ7
CisgICAgICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAgICAgICAgICAgIGNsZWFyUHJldmlv
dXNGbG9hdCA9IGZhbHNlOworCisgICAgICAgICAgICAgICAgYm9vbCBjYW5CcmVha1JlcGxhY2Vk
RWxlbWVudCA9ICFjaGlsZC0+aXNJbWFnZSgpIHx8IGFsbG93SW1hZ2VzVG9CcmVhazsKKyAgICAg
ICAgICAgICAgICBpZiAoKGNhbkJyZWFrUmVwbGFjZWRFbGVtZW50ICYmIChhdXRvV3JhcCB8fCBv
bGRBdXRvV3JhcCkgJiYgKCFpc1ByZXZDaGlsZElubGluZUZsb3cgfHwgc2hvdWxkQnJlYWtMaW5l
QWZ0ZXJUZXh0KSkgfHwgY2xlYXJQcmV2aW91c0Zsb2F0KSB7CisgICAgICAgICAgICAgICAgICAg
IG1pbkxvZ2ljYWxXaWR0aCA9IHByZWZlcnJlZFdpZHRoKG1pbkxvZ2ljYWxXaWR0aCwgaW5saW5l
TWluKTsKKyAgICAgICAgICAgICAgICAgICAgaW5saW5lTWluID0gMDsKKyAgICAgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgICAgICAvLyBJZiB3ZSdyZSBzdXBwb3NlZCB0byBjbGVhciB0aGUg
cHJldmlvdXMgZmxvYXQsIHRoZW4gdGVybWluYXRlIG1heHdpZHRoIGFzIHdlbGwuCisgICAgICAg
ICAgICAgICAgaWYgKGNsZWFyUHJldmlvdXNGbG9hdCkgeworICAgICAgICAgICAgICAgICAgICBt
YXhMb2dpY2FsV2lkdGggPSBwcmVmZXJyZWRXaWR0aChtYXhMb2dpY2FsV2lkdGgsIGlubGluZU1h
eCk7CisgICAgICAgICAgICAgICAgICAgIGlubGluZU1heCA9IDA7CisgICAgICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAgICAgLy8gQWRkIGluIHRleHQtaW5kZW50LiBUaGlzIGlzIGFkZGVk
IGluIG9ubHkgb25jZS4KKyAgICAgICAgICAgICAgICBpZiAoIWFkZGVkVGV4dEluZGVudCAmJiAh
Y2hpbGQtPmlzRmxvYXRpbmcoKSkgeworICAgICAgICAgICAgICAgICAgICBMYXlvdXRVbml0IGNl
aWxlZEluZGVudCA9IHRleHRJbmRlbnQuY2VpbFRvRmxvYXQoKTsKKyAgICAgICAgICAgICAgICAg
ICAgY2hpbGRNaW4gKz0gY2VpbGVkSW5kZW50OworICAgICAgICAgICAgICAgICAgICBjaGlsZE1h
eCArPSBjZWlsZWRJbmRlbnQ7CisKKyAgICAgICAgICAgICAgICAgICAgaWYgKGNoaWxkTWluIDwg
MCkKKyAgICAgICAgICAgICAgICAgICAgICAgIHRleHRJbmRlbnQgPSBMYXlvdXRVbml0Ojpmcm9t
RmxvYXRDZWlsKGNoaWxkTWluKTsKKyAgICAgICAgICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgICAgICAgICAgYWRkZWRUZXh0SW5kZW50ID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgICAgICAvLyBBZGQgb3VyIHdpZHRoIHRvIHRoZSBtYXguCisgICAgICAg
ICAgICAgICAgaW5saW5lTWF4ICs9IHN0ZDo6bWF4PGZsb2F0PigwLCBjaGlsZE1heCk7CisKKyAg
ICAgICAgICAgICAgICBpZiAoIWF1dG9XcmFwIHx8ICFjYW5CcmVha1JlcGxhY2VkRWxlbWVudCB8
fCAoaXNQcmV2Q2hpbGRJbmxpbmVGbG93ICYmICFzaG91bGRCcmVha0xpbmVBZnRlclRleHQpKSB7
CisgICAgICAgICAgICAgICAgICAgIGlmIChjaGlsZC0+aXNGbG9hdGluZygpKQorICAgICAgICAg
ICAgICAgICAgICAgICAgbWluTG9naWNhbFdpZHRoID0gcHJlZmVycmVkV2lkdGgobWluTG9naWNh
bFdpZHRoLCBjaGlsZE1pbik7CisgICAgICAgICAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGlubGluZU1pbiArPSBjaGlsZE1pbjsKKyAgICAgICAgICAgICAgICB9IGVs
c2UgeworICAgICAgICAgICAgICAgICAgICAvLyBOb3cgY2hlY2sgb3VyIGxpbmUuCisgICAgICAg
ICAgICAgICAgICAgIG1pbkxvZ2ljYWxXaWR0aCA9IHByZWZlcnJlZFdpZHRoKG1pbkxvZ2ljYWxX
aWR0aCwgY2hpbGRNaW4pOworCisgICAgICAgICAgICAgICAgICAgIC8vIE5vdyBzdGFydCBhIG5l
dyBsaW5lLgorICAgICAgICAgICAgICAgICAgICBpbmxpbmVNaW4gPSAwOworICAgICAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgICAgIGlmIChhdXRvV3JhcCAmJiBjYW5CcmVha1JlcGxhY2Vk
RWxlbWVudCAmJiBpc1ByZXZDaGlsZElubGluZUZsb3cpIHsKKyAgICAgICAgICAgICAgICAgICAg
bWluTG9naWNhbFdpZHRoID0gcHJlZmVycmVkV2lkdGgobWluTG9naWNhbFdpZHRoLCBpbmxpbmVN
aW4pOworICAgICAgICAgICAgICAgICAgICBpbmxpbmVNaW4gPSAwOworICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgIC8vIFdlIGFyZSBubyBsb25nZXIgc3RyaXBwaW5nIHdoaXRl
c3BhY2UgYXQgdGhlIHN0YXJ0IG9mIGEgbGluZS4KKyAgICAgICAgICAgICAgICBpZiAoIWNoaWxk
LT5pc0Zsb2F0aW5nKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgc3RyaXBGcm9udFNwYWNlcyA9
IGZhbHNlOworICAgICAgICAgICAgICAgICAgICB0cmFpbGluZ1NwYWNlQ2hpbGQgPSAwOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZSBpZiAoY2hpbGQtPmlzVGV4dCgpKSB7
CisgICAgICAgICAgICAgICAgLy8gQ2FzZSAoMykuIFRleHQuCisgICAgICAgICAgICAgICAgUmVu
ZGVyVGV4dCogdCA9IHRvUmVuZGVyVGV4dChjaGlsZCk7CisKKyAgICAgICAgICAgICAgICBpZiAo
dC0+c3R5bGUoKS5oYXNUZXh0Q29tYmluZSgpICYmIHQtPmlzQ29tYmluZVRleHQoKSkKKyAgICAg
ICAgICAgICAgICAgICAgdG9SZW5kZXJDb21iaW5lVGV4dCgqdCkuY29tYmluZVRleHQoKTsKKwor
ICAgICAgICAgICAgICAgIC8vIERldGVybWluZSBpZiB3ZSBoYXZlIGEgYnJlYWthYmxlIGNoYXJh
Y3Rlci4gUGFzcyBpbgorICAgICAgICAgICAgICAgIC8vIHdoZXRoZXIgb3Igbm90IHdlIHNob3Vs
ZCBpZ25vcmUgYW55IHNwYWNlcyBhdCB0aGUgZnJvbnQKKyAgICAgICAgICAgICAgICAvLyBvZiB0
aGUgc3RyaW5nLiBJZiB0aG9zZSBhcmUgZ29pbmcgdG8gYmUgc3RyaXBwZWQgb3V0LAorICAgICAg
ICAgICAgICAgIC8vIHRoZW4gdGhleSBzaG91bGRuJ3QgYmUgY29uc2lkZXJlZCBpbiB0aGUgYnJl
YWthYmxlIGNoYXIKKyAgICAgICAgICAgICAgICAvLyBjaGVjay4KKyAgICAgICAgICAgICAgICBi
b29sIGhhc0JyZWFrYWJsZUNoYXIsIGhhc0JyZWFrOworICAgICAgICAgICAgICAgIGZsb2F0IGJl
Z2luTWluLCBlbmRNaW47CisgICAgICAgICAgICAgICAgYm9vbCBiZWdpbldTLCBlbmRXUzsKKyAg
ICAgICAgICAgICAgICBmbG9hdCBiZWdpbk1heCwgZW5kTWF4OworICAgICAgICAgICAgICAgIHQt
PnRyaW1tZWRQcmVmV2lkdGhzKGlubGluZU1heCwgYmVnaW5NaW4sIGJlZ2luV1MsIGVuZE1pbiwg
ZW5kV1MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaGFzQnJlYWthYmxl
Q2hhciwgaGFzQnJlYWssIGJlZ2luTWF4LCBlbmRNYXgsCisgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgY2hpbGRNaW4sIGNoaWxkTWF4LCBzdHJpcEZyb250U3BhY2VzKTsKKwor
ICAgICAgICAgICAgICAgIC8vIFRoaXMgdGV4dCBvYmplY3Qgd2lsbCBub3QgYmUgcmVuZGVyZWQs
IGJ1dCBpdCBtYXkgc3RpbGwgcHJvdmlkZSBhIGJyZWFraW5nIG9wcG9ydHVuaXR5LgorICAgICAg
ICAgICAgICAgIGlmICghaGFzQnJlYWsgJiYgIWNoaWxkTWF4KSB7CisgICAgICAgICAgICAgICAg
ICAgIGlmIChhdXRvV3JhcCAmJiAoYmVnaW5XUyB8fCBlbmRXUykpIHsKKyAgICAgICAgICAgICAg
ICAgICAgICAgIG1pbkxvZ2ljYWxXaWR0aCA9IHByZWZlcnJlZFdpZHRoKG1pbkxvZ2ljYWxXaWR0
aCwgaW5saW5lTWluKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlubGluZU1pbiA9IDA7Cisg
ICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgaWYgKHN0cmlwRnJvbnRTcGFjZXMpCisg
ICAgICAgICAgICAgICAgICAgIHRyYWlsaW5nU3BhY2VDaGlsZCA9IGNoaWxkOworICAgICAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICAgICAgdHJhaWxpbmdTcGFjZUNoaWxkID0gMDsK
KworICAgICAgICAgICAgICAgIC8vIEFkZCBpbiB0ZXh0LWluZGVudC4gVGhpcyBpcyBhZGRlZCBp
biBvbmx5IG9uY2UuCisgICAgICAgICAgICAgICAgZmxvYXQgdGkgPSAwOworICAgICAgICAgICAg
ICAgIGlmICghYWRkZWRUZXh0SW5kZW50IHx8IGhhc1JlbWFpbmluZ05lZ2F0aXZlVGV4dEluZGVu
dCkgeworICAgICAgICAgICAgICAgICAgICB0aSA9IHRleHRJbmRlbnQuY2VpbFRvRmxvYXQoKTsK
KyAgICAgICAgICAgICAgICAgICAgY2hpbGRNaW4gKz0gdGk7CisgICAgICAgICAgICAgICAgICAg
IGJlZ2luTWluICs9IHRpOworCisgICAgICAgICAgICAgICAgICAgIC8vIEl0IHRoZSB0ZXh0IGlu
ZGVudCBuZWdhdGl2ZSBhbmQgbGFyZ2VyIHRoYW4gdGhlIGNoaWxkIG1pbmltdW0sIHdlIHJlLXVz
ZSB0aGUgcmVtYWluZGVyCisgICAgICAgICAgICAgICAgICAgIC8vIGluIGZ1dHVyZSBtaW5pbXVt
IGNhbGN1bGF0aW9ucywgYnV0IHVzaW5nIHRoZSBuZWdhdGl2ZSB2YWx1ZSBhZ2FpbiBvbiB0aGUg
bWF4aW11bQorICAgICAgICAgICAgICAgICAgICAvLyB3aWxsIGxlYWQgdG8gdW5kZXItY291bnRp
bmcgdGhlIG1heCBwcmVmIHdpZHRoLgorICAgICAgICAgICAgICAgICAgICBpZiAoIWFkZGVkVGV4
dEluZGVudCkgeworICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRNYXggKz0gdGk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBiZWdpbk1heCArPSB0aTsKKyAgICAgICAgICAgICAgICAgICAg
ICAgIGFkZGVkVGV4dEluZGVudCA9IHRydWU7CisgICAgICAgICAgICAgICAgICAgIH0KKworICAg
ICAgICAgICAgICAgICAgICBpZiAoY2hpbGRNaW4gPCAwKSB7CisgICAgICAgICAgICAgICAgICAg
ICAgICB0ZXh0SW5kZW50ID0gY2hpbGRNaW47CisgICAgICAgICAgICAgICAgICAgICAgICBoYXNS
ZW1haW5pbmdOZWdhdGl2ZVRleHRJbmRlbnQgPSB0cnVlOworICAgICAgICAgICAgICAgICAgICB9
CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgLy8gSWYgd2UgaGF2ZSBubyBi
cmVha2FibGUgY2hhcmFjdGVycyBhdCBhbGwsCisgICAgICAgICAgICAgICAgLy8gdGhlbiB0aGlz
IGlzIHRoZSBlYXN5IGNhc2UuIFdlIGFkZCBvdXJzZWx2ZXMgdG8gdGhlIGN1cnJlbnQKKyAgICAg
ICAgICAgICAgICAvLyBtaW4gYW5kIG1heCBhbmQgY29udGludWUuCisgICAgICAgICAgICAgICAg
aWYgKCFoYXNCcmVha2FibGVDaGFyKQorICAgICAgICAgICAgICAgICAgICBpbmxpbmVNaW4gKz0g
Y2hpbGRNaW47CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIC8v
IFdlIGhhdmUgYSBicmVha2FibGUgY2hhcmFjdGVyLiBOb3cgd2UgbmVlZCB0byBrbm93IGlmCisg
ICAgICAgICAgICAgICAgICAgIC8vIHdlIHN0YXJ0IGFuZCBlbmQgd2l0aCB3aGl0ZXNwYWNlLgor
ICAgICAgICAgICAgICAgICAgICBpZiAoYmVnaW5XUykgeworICAgICAgICAgICAgICAgICAgICAg
ICAgLy8gR28gYWhlYWQgYW5kIGVuZCB0aGUgY3VycmVudCBsaW5lLgorICAgICAgICAgICAgICAg
ICAgICAgICAgbWluTG9naWNhbFdpZHRoID0gcHJlZmVycmVkV2lkdGgobWluTG9naWNhbFdpZHRo
LCBpbmxpbmVNaW4pOworICAgICAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgICAgICAgICAgaW5saW5lTWluICs9IGJlZ2luTWluOworICAgICAgICAgICAgICAgICAgICAg
ICAgbWluTG9naWNhbFdpZHRoID0gcHJlZmVycmVkV2lkdGgobWluTG9naWNhbFdpZHRoLCBpbmxp
bmVNaW4pOworICAgICAgICAgICAgICAgICAgICAgICAgY2hpbGRNaW4gLT0gdGk7CisgICAgICAg
ICAgICAgICAgICAgIH0KKworICAgICAgICAgICAgICAgICAgICBpbmxpbmVNaW4gPSBjaGlsZE1p
bjsKKworICAgICAgICAgICAgICAgICAgICBpZiAoZW5kV1MpIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIFdlIGVuZCBpbiB3aGl0ZXNwYWNlLCB3aGljaCBtZWFucyB3ZSBjYW4gZ28gYWhl
YWQKKyAgICAgICAgICAgICAgICAgICAgICAgIC8vIGFuZCBlbmQgb3VyIGN1cnJlbnQgbGluZS4K
KyAgICAgICAgICAgICAgICAgICAgICAgIG1pbkxvZ2ljYWxXaWR0aCA9IHByZWZlcnJlZFdpZHRo
KG1pbkxvZ2ljYWxXaWR0aCwgaW5saW5lTWluKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlu
bGluZU1pbiA9IDA7CisgICAgICAgICAgICAgICAgICAgICAgICBzaG91bGRCcmVha0xpbmVBZnRl
clRleHQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIG1pbkxvZ2ljYWxXaWR0aCA9IHByZWZlcnJlZFdpZHRoKG1pbkxvZ2ljYWxX
aWR0aCwgaW5saW5lTWluKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGlubGluZU1pbiA9IGVu
ZE1pbjsKKyAgICAgICAgICAgICAgICAgICAgICAgIHNob3VsZEJyZWFrTGluZUFmdGVyVGV4dCA9
IHRydWU7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgICAgICBpZiAoaGFzQnJlYWspIHsKKyAgICAgICAgICAgICAgICAgICAgaW5saW5lTWF4
ICs9IGJlZ2luTWF4OworICAgICAgICAgICAgICAgICAgICBtYXhMb2dpY2FsV2lkdGggPSBwcmVm
ZXJyZWRXaWR0aChtYXhMb2dpY2FsV2lkdGgsIGlubGluZU1heCk7CisgICAgICAgICAgICAgICAg
ICAgIG1heExvZ2ljYWxXaWR0aCA9IHByZWZlcnJlZFdpZHRoKG1heExvZ2ljYWxXaWR0aCwgY2hp
bGRNYXgpOworICAgICAgICAgICAgICAgICAgICBpbmxpbmVNYXggPSBlbmRNYXg7CisgICAgICAg
ICAgICAgICAgICAgIGFkZGVkVGV4dEluZGVudCA9IHRydWU7CisgICAgICAgICAgICAgICAgfSBl
bHNlCisgICAgICAgICAgICAgICAgICAgIGlubGluZU1heCArPSBzdGQ6Om1heDxmbG9hdD4oMCwg
Y2hpbGRNYXgpOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBJZ25vcmUgc3BhY2Vz
IGFmdGVyIGEgbGlzdCBtYXJrZXIuCisgICAgICAgICAgICBpZiAoY2hpbGQtPmlzTGlzdE1hcmtl
cigpKQorICAgICAgICAgICAgICAgIHN0cmlwRnJvbnRTcGFjZXMgPSB0cnVlOworICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgbWluTG9naWNhbFdpZHRoID0gcHJlZmVycmVkV2lkdGgobWlu
TG9naWNhbFdpZHRoLCBpbmxpbmVNaW4pOworICAgICAgICAgICAgbWF4TG9naWNhbFdpZHRoID0g
cHJlZmVycmVkV2lkdGgobWF4TG9naWNhbFdpZHRoLCBpbmxpbmVNYXgpOworICAgICAgICAgICAg
aW5saW5lTWluID0gaW5saW5lTWF4ID0gMDsKKyAgICAgICAgICAgIHN0cmlwRnJvbnRTcGFjZXMg
PSB0cnVlOworICAgICAgICAgICAgdHJhaWxpbmdTcGFjZUNoaWxkID0gMDsKKyAgICAgICAgICAg
IGFkZGVkVGV4dEluZGVudCA9IHRydWU7CisgICAgICAgIH0KKworICAgICAgICBpZiAoIWNoaWxk
LT5pc1RleHQoKSAmJiBjaGlsZC0+aXNSZW5kZXJJbmxpbmUoKSkKKyAgICAgICAgICAgIGlzUHJl
dkNoaWxkSW5saW5lRmxvdyA9IHRydWU7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIGlzUHJl
dkNoaWxkSW5saW5lRmxvdyA9IGZhbHNlOworCisgICAgICAgIG9sZEF1dG9XcmFwID0gYXV0b1dy
YXA7CisgICAgfQorCisgICAgaWYgKHN0eWxlVG9Vc2UuY29sbGFwc2VXaGl0ZVNwYWNlKCkpCisg
ICAgICAgIHN0cmlwVHJhaWxpbmdTcGFjZShpbmxpbmVNYXgsIGlubGluZU1pbiwgdHJhaWxpbmdT
cGFjZUNoaWxkKTsKKworICAgIG1pbkxvZ2ljYWxXaWR0aCA9IHByZWZlcnJlZFdpZHRoKG1pbkxv
Z2ljYWxXaWR0aCwgaW5saW5lTWluKTsKKyAgICBtYXhMb2dpY2FsV2lkdGggPSBwcmVmZXJyZWRX
aWR0aChtYXhMb2dpY2FsV2lkdGgsIGlubGluZU1heCk7Cit9CisKIH0KIC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tG
bG93LmggYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2tGbG93LmgKaW5kZXgg
YjNiMTI3OGU0ODU5NWUyOTc5N2FmNjhjYTUwZDE2OTI4ZThhMDJhZS4uYzRmYTk4NmEzYzczZTdj
N2Q0MDM5NTNmNzA2ZmI5YWJlYmU1MTcxNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJsb2NrRmxvdy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9S
ZW5kZXJCbG9ja0Zsb3cuaApAQCAtNTc4LDYgKzU3OCw4IEBAIHByaXZhdGU6CiAgICAgYm9vbCBu
YW1lZEZsb3dGcmFnbWVudE5lZWRzVXBkYXRlKCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGNh
bkhhdmVDaGlsZHJlbigpIGNvbnN0IG92ZXJyaWRlOwogCisgICAgdm9pZCBjb21wdXRlSW5saW5l
UHJlZmVycmVkTG9naWNhbFdpZHRocyhMYXlvdXRVbml0JiBtaW5Mb2dpY2FsV2lkdGgsIExheW91
dFVuaXQmIG1heExvZ2ljYWxXaWR0aCkgY29uc3Q7CisKICNpZiBFTkFCTEUoSU9TX1RFWFRfQVVU
T1NJWklORykKICAgICBpbnQgbV93aWR0aEZvclRleHRBdXRvc2l6aW5nOwogICAgIHVuc2lnbmVk
IG1fbGluZUNvdW50Rm9yVGV4dEF1dG9zaXppbmcgOiAyOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>