<?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>127986</bug_id>
          
          <creation_ts>2014-01-30 23:24:30 -0800</creation_ts>
          <short_desc>Remove inline member functions of FrameSelection that access m_selection</short_desc>
          <delta_ts>2014-01-31 20:53:45 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>HTML Editing</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>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>
          
          <blocked>127832</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>barraclough</cc>
    
    <cc>benjamin</cc>
    
    <cc>darin</cc>
    
    <cc>enrica</cc>
    
    <cc>kling</cc>
    
    <cc>sam</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>974226</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2014-01-30 23:24:30 -0800</bug_when>
    <thetext>In order to resolve the bug 127832, we need all call sites of FrameSelection&apos;s member functions
that depend on m_selection to decide whether they want the invalidated selection that&apos;s exposed to JS
or that the validated selection the editing &amp; rendering code will use.

In order to simplify this transition, all such access to m_selection should be done though FrameSelection::selection().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>974233</commentid>
    <comment_count>1</comment_count>
      <attachid>222798</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2014-01-30 23:48:26 -0800</bug_when>
    <thetext>Created attachment 222798
Cleanup</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>974245</commentid>
    <comment_count>2</comment_count>
      <attachid>222802</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2014-01-31 00:22:48 -0800</bug_when>
    <thetext>Created attachment 222802
Fixes GTK+ and EFL builds</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>974250</commentid>
    <comment_count>3</comment_count>
      <attachid>222805</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2014-01-31 00:39:15 -0800</bug_when>
    <thetext>Created attachment 222805
Another build fix</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>974265</commentid>
    <comment_count>4</comment_count>
      <attachid>222805</attachid>
    <who name="Sergio Villar Senin">svillar</who>
    <bug_when>2014-01-31 03:50:08 -0800</bug_when>
    <thetext>Comment on attachment 222805
Another build fix

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

Great to see how the FrameSelection interface gets smaller. Patch looks awesome to me. 

Just a minor nit, DumpRenderTreeSupportGtk also accesses rootEditableElement() so you&apos;d have to add a similar fix to the one you did for EFL.

&gt; Source/WebKit/gtk/WebCoreSupport/EditorClientGtk.cpp:219
&gt; +    const VisibleSelection&amp; selection = frame.selection();

This should be frame.selection().selection() right?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>974484</commentid>
    <comment_count>5</comment_count>
      <attachid>222855</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2014-01-31 14:39:55 -0800</bug_when>
    <thetext>Created attachment 222855
One more build fix for EFL &amp; GTK+</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>974516</commentid>
    <comment_count>6</comment_count>
      <attachid>222861</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2014-01-31 15:45:00 -0800</bug_when>
    <thetext>Created attachment 222861
Fix EFL build</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>974531</commentid>
    <comment_count>7</comment_count>
      <attachid>222861</attachid>
    <who name="Enrica Casucci">enrica</who>
    <bug_when>2014-01-31 16:37:06 -0800</bug_when>
    <thetext>Comment on attachment 222861
Fix EFL build

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

Looks good to me. Please fix FrameSelection.h before landing otherwise it will break iOS builds.

&gt; Source/WebCore/editing/FrameSelection.h:343
&gt; +    bool m_updateAppearanceEnabled : 1;DragController.cpp

This must be a typo. I&apos;m sure it doesn&apos;t build like this for iOS :-)

&gt; Source/WebCore/page/DragController.cpp:816
&gt; +        const VisibleSelection&amp; srcSelection = src.selection().selection();

I would call it sourceSelection.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>974562</commentid>
    <comment_count>8</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2014-01-31 20:06:05 -0800</bug_when>
    <thetext>Committed r163232: &lt;http://trac.webkit.org/changeset/163232&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>974568</commentid>
    <comment_count>9</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2014-01-31 20:53:45 -0800</bug_when>
    <thetext>Debug tests fix landed in http://trac.webkit.org/changeset/163233.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>222798</attachid>
            <date>2014-01-30 23:48:26 -0800</date>
            <delta_ts>2014-01-31 00:22:45 -0800</delta_ts>
            <desc>Cleanup</desc>
            <filename>bug-127986-20140130234825.patch</filename>
            <type>text/plain</type>
            <size>74190</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2MzE2MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwNSBAQAorMjAxNC0wMS0zMCAgUnlvc3Vr
ZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KKworICAgICAgICBSZW1vdmUgaW5saW5lIG1lbWJl
ciBmdW5jdGlvbnMgb2YgRnJhbWVTZWxlY3Rpb24gdGhhdCBhY2Nlc3MgbV9zZWxlY3Rpb24KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNzk4NgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlbW92ZWQgbnVt
ZXJvdXMgaW5saW5lIG1lbWJlciBmdW5jdGlvbnMgb2YgRnJhbWVTZWxlY3Rpb24gdGhhdCBkZXBl
bmQgb24gbV9zZWxlY3Rpb24uCisKKyAgICAgICAgVGhpcyBpcyBuZWVkZWQgdG8gZW5zdXJlIGFs
bCBhY2Nlc3NlcyB0byBtX3NlbGVjdGlvbiBoYXBwZW4gdGhyb3VnaCBGcmFtZVNlbGVjdGlvbjo6
c2VsZWN0aW9uKCksCisgICAgICAgIHdoaWNoIGluIHR1cm4sIGFsbG93cyB1cyB0byB1cGRhdGUg
aXRzIGNhbGwgc2l0ZXMgdG8gdXNlIGVpdGhlciB2YWxpZGF0ZWQgc2VsZWN0aW9uIHRoYXQgZWRp
dGluZworICAgICAgICBhbmQgcmVuZGVyaW5nIGNvZGUgdXNlcyBvciBpbnZhbGlkYXRlZCBzZWxl
Y3Rpb24gdGhhdCdzIGV4cG9zZWQgdG8gSmF2YVNjcmlwdC4KKworICAgICAgICAqIFdlYkNvcmUu
ZXhwLmluOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vzc2liaWxpdHlPYmpl
Y3RXcmFwcGVySU9TLm1tOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
ciBfY29udmVydFRvTlNSYW5nZTpdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVj
dFdyYXBwZXIgX2NvbnZlcnRUb0RPTVJhbmdlOl0pOgorICAgICAgICAqIGRvbS9FbGVtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnVwZGF0ZUZvY3VzQXBwZWFyYW5jZSk6Cisg
ICAgICAgICogZWRpdGluZy9FZGl0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpj
YW5FZGl0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Y2FuRWRpdFJpY2hseSk6CisgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3I6OmNhbkRIVE1MQ3V0KToKKyAgICAgICAgKFdlYkNvcmU6OkVk
aXRvcjo6Y2FuREhUTUxDb3B5KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Y2FuQ29weSk6
CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmNhbkRlbGV0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpFZGl0b3I6OnJlcGxhY2VTZWxlY3Rpb25XaXRoRnJhZ21lbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6RWRpdG9yOjp0cnlESFRNTENvcHkpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjp0cnlE
SFRNTEN1dCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmFwcGx5U3R5bGUpOgorICAgICAg
ICAoV2ViQ29yZTo6RWRpdG9yOjphcHBseVBhcmFncmFwaFN0eWxlKToKKyAgICAgICAgKFdlYkNv
cmU6OkVkaXRvcjo6Y3V0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Y29weSk6CisgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3I6OnBhc3RlKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6
c2V0Q29tcG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpndWVzc2VzRm9yTWlz
c3BlbGxlZE9yVW5ncmFtbWF0aWNhbCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Om1hcmtN
aXNzcGVsbGluZ3NBZnRlclR5cGluZ1RvV29yZCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6
OmlzU3BlbGxDaGVja2luZ0VuYWJsZWRJbkZvY3VzZWROb2RlKToKKyAgICAgICAgKFdlYkNvcmU6
OkVkaXRvcjo6bWFya0FuZFJlcGxhY2VGb3IpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpn
ZXRDb21wb3NpdGlvblNlbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnNlbGVj
dGlvblN0YXJ0SGFzTWFya2VyRm9yKToKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRvckNvbW1hbmQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6ZXhwYW5kU2VsZWN0aW9uVG9HcmFudWxhcml0eSk6Cisg
ICAgICAgIChXZWJDb3JlOjplbmFibGVkSW5SaWNobHlFZGl0YWJsZVRleHQpOgorICAgICAgICAo
V2ViQ29yZTo6ZW5hYmxlZFJhbmdlSW5FZGl0YWJsZVRleHQpOgorICAgICAgICAoV2ViQ29yZTo6
ZW5hYmxlZFJhbmdlSW5SaWNobHlFZGl0YWJsZVRleHQpOgorICAgICAgICAqIGVkaXRpbmcvRnJh
bWVTZWxlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnNldFNl
bGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDYXJldEJhc2U6OnVwZGF0ZUNhcmV0UmVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6cmVjb21wdXRlQ2FyZXRSZWN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpzZWxlY3RBbGwpOgorICAgICAgICAo
V2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnVwZGF0ZUFwcGVhcmFuY2UpOgorICAgICAgICAoV2Vi
Q29yZTo6RnJhbWVTZWxlY3Rpb246OnVwZGF0ZVNlbGVjdGlvbkNhY2hlc0lmU2VsZWN0aW9uSXNJ
bnNpZGVUZXh0Rm9ybUNvbnRyb2wpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246
OnNldEZvY3VzZWRFbGVtZW50SWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxl
Y3Rpb246OmN1cnJlbnRGb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpy
ZXZlYWxTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnNldFNl
bGVjdGlvbkZyb21Ob25lKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjp3b3Jk
U2VsZWN0aW9uQ29udGFpbmluZ0NhcmV0U2VsZWN0aW9uKToKKyAgICAgICAgKiBlZGl0aW5nL0Zy
YW1lU2VsZWN0aW9uLmg6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6aXNDYXJl
dE9yUmFuZ2UpOgorICAgICAgICAqIGVkaXRpbmcvUmVtb3ZlRm9ybWF0Q29tbWFuZC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW1vdmVGb3JtYXRDb21tYW5kOjpkb0FwcGx5KToKKyAgICAgICAg
KiBlZGl0aW5nL1Zpc2libGVTZWxlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6VmlzaWJs
ZVNlbGVjdGlvbjo6aXNJblBhc3N3b3JkRmllbGQpOgorICAgICAgICAqIGVkaXRpbmcvVmlzaWJs
ZVNlbGVjdGlvbi5oOgorICAgICAgICAqIGVkaXRpbmcvbWFjL0VkaXRvck1hYy5tbToKKyAgICAg
ICAgKFdlYkNvcmU6OkVkaXRvcjo6Y2FuQ29weUV4Y2x1ZGluZ1N0YW5kYWxvbmVJbWFnZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpyZWFkU2VsZWN0aW9uRnJvbVBhc3RlYm9hcmQpOgor
ICAgICAgICAqIGh0bWwvSFRNTEFuY2hvckVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTEFuY2hvckVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTEFuY2hvckVsZW1lbnQ6OnNldEFjdGl2ZSk6CisgICAgICAgICogaHRtbC9IVE1MVGV4
dEZvcm1Db250cm9sRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGV4dEZvcm1D
b250cm9sRWxlbWVudDo6Y29tcHV0ZVNlbGVjdGlvblN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50Ojpjb21wdXRlU2VsZWN0aW9uRW5kKToKKyAgICAg
ICAgKiBwYWdlL0NvbnRleHRNZW51Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
b250ZXh0TWVudUNvbnRyb2xsZXI6OmNvbnRleHRNZW51SXRlbVNlbGVjdGVkKToKKyAgICAgICAg
KFdlYkNvcmU6OkNvbnRleHRNZW51Q29udHJvbGxlcjo6cG9wdWxhdGUpOgorICAgICAgICAqIHBh
Z2UvRHJhZ0NvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0NvbnRyb2xsZXI6
OmRyYWdJc01vdmUpOgorICAgICAgICAoV2ViQ29yZTo6c2V0U2VsZWN0aW9uVG9EcmFnQ2FyZXQp
OgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0NvbnRyb2xsZXI6OmNvbmNsdWRlRWRpdERyYWcpOgor
ICAgICAgICAoV2ViQ29yZTo6RHJhZ0NvbnRyb2xsZXI6OnN0YXJ0RHJhZyk6CisgICAgICAgICog
cGFnZS9FdmVudEhhbmRsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bm9kZUlzTm90QmVpbmdF
ZGl0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpzZW5kQ29udGV4dE1lbnVF
dmVudCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnNlbmRDb250ZXh0TWVudUV2
ZW50Rm9yS2V5KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6aGFuZGxlRHJhZyk6
CisgICAgICAgICogcGFnZS9Gb2N1c0NvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Rm9jdXNDb250cm9sbGVyOjphZHZhbmNlRm9jdXNJbkRvY3VtZW50T3JkZXIpOgorICAgICAgICAo
V2ViQ29yZTo6Y2xlYXJTZWxlY3Rpb25JZk5lZWRlZCk6CisgICAgICAgICogcGFnZS9pb3MvRnJh
bWVJT1MubW06CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6Y2FyZXRSZWN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkZyYW1lOjpyZWN0Rm9yU2Nyb2xsVG9WaXNpYmxlKToKKyAgICAgICAgKFdlYkNv
cmU6OkZyYW1lOjpzdHlsZUF0U2VsZWN0aW9uU3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6RnJh
bWU6OnNldFJhbmdlZFNlbGVjdGlvbkJhc2VUb0N1cnJlbnRTZWxlY3Rpb25TdGFydCk6CisgICAg
ICAgIChXZWJDb3JlOjpGcmFtZTo6c2V0UmFuZ2VkU2VsZWN0aW9uQmFzZVRvQ3VycmVudFNlbGVj
dGlvbkVuZCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6c2V0UmFuZ2VkU2VsZWN0aW9uSW5p
dGlhbEV4dGVudFRvQ3VycmVudFNlbGVjdGlvblN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OkZy
YW1lOjpzZXRSYW5nZWRTZWxlY3Rpb25Jbml0aWFsRXh0ZW50VG9DdXJyZW50U2VsZWN0aW9uRW5k
KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjppbnRlcnByZXRhdGlvbnNGb3JDdXJyZW50Um9v
dCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckJsb2NrOjpwYWludENhcmV0KToKKwogMjAxNC0wMS0zMCAgU2ltb24gRnJhc2Vy
ICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBGaXggaU9TIGJ1aWxkIGFmdGVy
IHIxNjMxNTYuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgkocmV2aXNpb24gMTYzMTI4KQorKysg
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4JKHdvcmtpbmcgY29weSkKQEAgLTE1MzQsNyAr
MTUzNCw2IEBAIF9fWk5LN1dlYkNvcmUxNERvY3VtZW50TG9hZGVyOWlzTG9hZGluZ0UKIF9fWk5L
N1dlYkNvcmUxNERvY3VtZW50TWFya2VyMTFkZXNjcmlwdGlvbkV2CiBfX1pOSzdXZWJDb3JlMTRG
cmFtZVNlbGVjdGlvbjExY3VycmVudEZvcm1FdgogX19aTks3V2ViQ29yZTE0RnJhbWVTZWxlY3Rp
b24xNWNvcHlUeXBpbmdTdHlsZUV2Ci1fX1pOSzdXZWJDb3JlMTRGcmFtZVNlbGVjdGlvbjE3aXNJ
blBhc3N3b3JkRmllbGRFdgogX19aTks3V2ViQ29yZTE0RnJhbWVTZWxlY3Rpb24xOGlzRm9jdXNl
ZEFuZEFjdGl2ZUV2CiBfX1pOSzdXZWJDb3JlMTRGcmFtZVNlbGVjdGlvbjMxZ2V0Q2xpcHBlZFZp
c2libGVUZXh0UmVjdGFuZ2xlc0VSTjNXVEY2VmVjdG9ySU5TXzlGbG9hdFJlY3RFTG0wRU5TMV8x
NUNyYXNoT25PdmVyZmxvd0VFRQogX19aTks3V2ViQ29yZTE0RnJhbWVTZWxlY3Rpb24zNnJvb3RF
ZGl0YWJsZUVsZW1lbnRPckRvY3VtZW50RWxlbWVudEV2CkBAIC0xNjEzLDYgKzE2MTIsNyBAQCBf
X1pOSzdXZWJDb3JlMTZJY29uRGF0YWJhc2VCYXNlMTJkYXRhYmFzCiBfX1pOSzdXZWJDb3JlMTZS
ZXNvdXJjZVJlc3BvbnNlMTNuc1VSTFJlc3BvbnNlRXYKIF9fWk5LN1dlYkNvcmUxNlJlc291cmNl
UmVzcG9uc2UxNmNlcnRpZmljYXRlQ2hhaW5FdgogX19aTks3V2ViQ29yZTE2VmlzaWJsZVNlbGVj
dGlvbjE3aXNDb250ZW50RWRpdGFibGVFdgorX19aTks3V2ViQ29yZTE2VmlzaWJsZVNlbGVjdGlv
bjE3aXNJblBhc3N3b3JkRmllbGRFdgogX19aTks3V2ViQ29yZTE2VmlzaWJsZVNlbGVjdGlvbjE3
dG9Ob3JtYWxpemVkUmFuZ2VFdgogX19aTks3V2ViQ29yZTE2VmlzaWJsZVNlbGVjdGlvbjE5cm9v
dEVkaXRhYmxlRWxlbWVudEV2CiBfX1pOSzdXZWJDb3JlMTZWaXNpYmxlU2VsZWN0aW9uMjNpc0Nv
bnRlbnRSaWNobHlFZGl0YWJsZUV2CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcklPUy5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3Jh
cHBlcklPUy5tbQkocmV2aXNpb24gMTYzMTI4KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJT1MubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTE2NDEsOSArMTY0MSw3IEBAIC0gKE5TUmFuZ2UpX2NvbnZlcnRUb05TUmFuZ2U6KFJh
bmdlICopcmEKICAgICAgICAgcmV0dXJuIE5TTWFrZVJhbmdlKE5TTm90Rm91bmQsIDApOwogICAg
IAogICAgIERvY3VtZW50KiBkb2N1bWVudCA9IG1fb2JqZWN0LT5kb2N1bWVudCgpOwotICAgIEZy
YW1lU2VsZWN0aW9uJiBmcmFtZVNlbGVjdGlvbiA9IGRvY3VtZW50LT5mcmFtZSgpLT5zZWxlY3Rp
b24oKTsKLSAgICAKLSAgICBFbGVtZW50KiBzZWxlY3Rpb25Sb290ID0gZnJhbWVTZWxlY3Rpb24u
cm9vdEVkaXRhYmxlRWxlbWVudCgpOworICAgIEVsZW1lbnQqIHNlbGVjdGlvblJvb3QgPSBkb2N1
bWVudC0+ZnJhbWUoKS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkucm9vdEVkaXRhYmxlRWxlbWVu
dCgpOwogICAgIEVsZW1lbnQqIHNjb3BlID0gc2VsZWN0aW9uUm9vdCA/IHNlbGVjdGlvblJvb3Qg
OiBkb2N1bWVudC0+ZG9jdW1lbnRFbGVtZW50KCk7CiAgICAgCiAgICAgLy8gTW91c2UgZXZlbnRz
IG1heSBjYXVzZSBUU00gdG8gYXR0ZW1wdCB0byBjcmVhdGUgYW4gTlNSYW5nZSBmb3IgYSBwb3J0
aW9uIG9mIHRoZSB2aWV3CkBAIC0xNjc5LDggKzE2NzcsNyBAQCAtIChQYXNzUmVmUHRyPFJhbmdl
PilfY29udmVydFRvRE9NUmFuZ2U6CiAgICAgLy8gdG8gdXNlIHRoZSByb290IGVkaXRhYmxlIGVs
ZW1lbnQgb2YgdGhlIHNlbGVjdGlvbiBzdGFydCBhcyB0aGUgcG9zaXRpb25hbCBiYXNlLgogICAg
IC8vIFRoYXQgZml0cyB3aXRoIEFwcEtpdCdzIGlkZWEgb2YgYW4gaW5wdXQgY29udGV4dC4KICAg
ICBEb2N1bWVudCogZG9jdW1lbnQgPSBtX29iamVjdC0+ZG9jdW1lbnQoKTsKLSAgICBGcmFtZVNl
bGVjdGlvbiYgZnJhbWVTZWxlY3Rpb24gPSBkb2N1bWVudC0+ZnJhbWUoKS0+c2VsZWN0aW9uKCk7
Ci0gICAgRWxlbWVudCogc2VsZWN0aW9uUm9vdCA9IGZyYW1lU2VsZWN0aW9uLnJvb3RFZGl0YWJs
ZUVsZW1lbnQoKTsKKyAgICBFbGVtZW50KiBzZWxlY3Rpb25Sb290ID0gZG9jdW1lbnQtPmZyYW1l
KCktPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsKICAgICBF
bGVtZW50KiBzY29wZSA9IHNlbGVjdGlvblJvb3QgPyBzZWxlY3Rpb25Sb290IDogZG9jdW1lbnQt
PmRvY3VtZW50RWxlbWVudCgpOwogICAgIHJldHVybiBUZXh0SXRlcmF0b3I6OnJhbmdlRnJvbUxv
Y2F0aW9uQW5kTGVuZ3RoKHNjb3BlLCBuc3JhbmdlLmxvY2F0aW9uLCBuc3JhbmdlLmxlbmd0aCk7
CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCShyZXZpc2lvbiAxNjMxMjgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMDcsNyArMjAw
Nyw3IEBAIHZvaWQgRWxlbWVudDo6dXBkYXRlRm9jdXNBcHBlYXJhbmNlKGJvb2wKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgCiAgICAgICAgIC8vIFdoZW4gZm9jdXNpbmcgYW4gZWRpdGFi
bGUgZWxlbWVudCBpbiBhbiBpZnJhbWUsIGRvbid0IHJlc2V0IHRoZSBzZWxlY3Rpb24gaWYgaXQg
YWxyZWFkeSBjb250YWlucyBhIHNlbGVjdGlvbi4KLSAgICAgICAgaWYgKHRoaXMgPT0gZnJhbWUt
PnNlbGVjdGlvbigpLnJvb3RFZGl0YWJsZUVsZW1lbnQoKSkKKyAgICAgICAgaWYgKHRoaXMgPT0g
ZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnJvb3RFZGl0YWJsZUVsZW1lbnQoKSkKICAg
ICAgICAgICAgIHJldHVybjsKIAogICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHJlc3RvcmUg
dGhlIHByZXZpb3VzIHNlbGVjdGlvbiBpZiB0aGVyZSBpcyBvbmUuCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0VkaXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRp
dGluZy9FZGl0b3IuY3BwCShyZXZpc2lvbiAxNjMxMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0VkaXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4NiwxMiArMjg2LDEyIEBAIGJvb2wg
RWRpdG9yOjpoYW5kbGVUZXh0RXZlbnQoVGV4dEV2ZW50KiAKIAogYm9vbCBFZGl0b3I6OmNhbkVk
aXQoKSBjb25zdAogewotICAgIHJldHVybiBtX2ZyYW1lLnNlbGVjdGlvbigpLnJvb3RFZGl0YWJs
ZUVsZW1lbnQoKTsKKyAgICByZXR1cm4gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5y
b290RWRpdGFibGVFbGVtZW50KCk7CiB9CiAKIGJvb2wgRWRpdG9yOjpjYW5FZGl0UmljaGx5KCkg
Y29uc3QKIHsKLSAgICByZXR1cm4gbV9mcmFtZS5zZWxlY3Rpb24oKS5pc0NvbnRlbnRSaWNobHlF
ZGl0YWJsZSgpOworICAgIHJldHVybiBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlz
Q29udGVudFJpY2hseUVkaXRhYmxlKCk7CiB9CiAKIC8vIFdpbklFIHVzZXMgb25iZWZvcmVjdXQg
YW5kIG9uYmVmb3JlcGFzdGUgdG8gZW5hYmxlcyB0aGUgY3V0IGFuZCBwYXN0ZSBtZW51IGl0ZW1z
LiAgVGhleQpAQCAtMzAxLDEyICszMDEsMTIgQEAgYm9vbCBFZGl0b3I6OmNhbkVkaXRSaWNobHko
KSBjb25zdAogCiBib29sIEVkaXRvcjo6Y2FuREhUTUxDdXQoKQogewotICAgIHJldHVybiAhbV9m
cmFtZS5zZWxlY3Rpb24oKS5pc0luUGFzc3dvcmRGaWVsZCgpICYmICFkaXNwYXRjaENQUEV2ZW50
KGV2ZW50TmFtZXMoKS5iZWZvcmVjdXRFdmVudCwgQ2xpcGJvYXJkTnVtYik7CisgICAgcmV0dXJu
ICFtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlzSW5QYXNzd29yZEZpZWxkKCkgJiYg
IWRpc3BhdGNoQ1BQRXZlbnQoZXZlbnROYW1lcygpLmJlZm9yZWN1dEV2ZW50LCBDbGlwYm9hcmRO
dW1iKTsKIH0KIAogYm9vbCBFZGl0b3I6OmNhbkRIVE1MQ29weSgpCiB7Ci0gICAgcmV0dXJuICFt
X2ZyYW1lLnNlbGVjdGlvbigpLmlzSW5QYXNzd29yZEZpZWxkKCkgJiYgIWRpc3BhdGNoQ1BQRXZl
bnQoZXZlbnROYW1lcygpLmJlZm9yZWNvcHlFdmVudCwgQ2xpcGJvYXJkTnVtYik7CisgICAgcmV0
dXJuICFtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlzSW5QYXNzd29yZEZpZWxkKCkg
JiYgIWRpc3BhdGNoQ1BQRXZlbnQoZXZlbnROYW1lcygpLmJlZm9yZWNvcHlFdmVudCwgQ2xpcGJv
YXJkTnVtYik7CiB9CiAKIGJvb2wgRWRpdG9yOjpjYW5ESFRNTFBhc3RlKCkKQEAgLTM0MCw3ICsz
NDAsNyBAQCBib29sIEVkaXRvcjo6Y2FuQ29weSgpIGNvbnN0CiB7CiAgICAgaWYgKGltYWdlRWxl
bWVudEZyb21JbWFnZURvY3VtZW50KGRvY3VtZW50KCkpKQogICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICBGcmFtZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0gbV9mcmFtZS5zZWxlY3Rpb24oKTsKKyAg
ICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBtX2ZyYW1lLnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpOwogICAgIHJldHVybiBzZWxlY3Rpb24uaXNSYW5nZSgpICYmICFzZWxlY3Rp
b24uaXNJblBhc3N3b3JkRmllbGQoKTsKIH0KIApAQCAtMzUxLDcgKzM1MSw3IEBAIGJvb2wgRWRp
dG9yOjpjYW5QYXN0ZSgpIGNvbnN0CiAKIGJvb2wgRWRpdG9yOjpjYW5EZWxldGUoKSBjb25zdAog
ewotICAgIEZyYW1lU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBtX2ZyYW1lLnNlbGVjdGlvbigpOwor
ICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCk7CiAgICAgcmV0dXJuIHNlbGVjdGlvbi5pc1JhbmdlKCkgJiYgc2VsZWN0
aW9uLnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsKIH0KIApAQCAtNTk4LDcgKzU5OCw4IEBAIGJvb2wg
RWRpdG9yOjpzaG91bGRJbnNlcnRGcmFnbWVudChQYXNzUmUKIAogdm9pZCBFZGl0b3I6OnJlcGxh
Y2VTZWxlY3Rpb25XaXRoRnJhZ21lbnQoUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFn
bWVudCwgYm9vbCBzZWxlY3RSZXBsYWNlbWVudCwgYm9vbCBzbWFydFJlcGxhY2UsIGJvb2wgbWF0
Y2hTdHlsZSkKIHsKLSAgICBpZiAobV9mcmFtZS5zZWxlY3Rpb24oKS5pc05vbmUoKSB8fCAhbV9m
cmFtZS5zZWxlY3Rpb24oKS5pc0NvbnRlbnRFZGl0YWJsZSgpIHx8ICFmcmFnbWVudCkKKyAgICBW
aXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9u
KCk7CisgICAgaWYgKHNlbGVjdGlvbi5pc05vbmUoKSB8fCAhc2VsZWN0aW9uLmlzQ29udGVudEVk
aXRhYmxlKCkgfHwgIWZyYWdtZW50KQogICAgICAgICByZXR1cm47CiAKICAgICBSZXBsYWNlU2Vs
ZWN0aW9uQ29tbWFuZDo6Q29tbWFuZE9wdGlvbnMgb3B0aW9ucyA9IFJlcGxhY2VTZWxlY3Rpb25D
b21tYW5kOjpQcmV2ZW50TmVzdGluZyB8IFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpTYW5pdGl6
ZUZyYWdtZW50OwpAQCAtNjExLDkgKzYxMiwxMCBAQCB2b2lkIEVkaXRvcjo6cmVwbGFjZVNlbGVj
dGlvbldpdGhGcmFnbWVuCiAgICAgYXBwbHlDb21tYW5kKFJlcGxhY2VTZWxlY3Rpb25Db21tYW5k
OjpjcmVhdGUoZG9jdW1lbnQoKSwgZnJhZ21lbnQsIG9wdGlvbnMsIEVkaXRBY3Rpb25QYXN0ZSkp
OwogICAgIHJldmVhbFNlbGVjdGlvbkFmdGVyRWRpdGluZ09wZXJhdGlvbigpOwogCi0gICAgaWYg
KG1fZnJhbWUuc2VsZWN0aW9uKCkuaXNJblBhc3N3b3JkRmllbGQoKSB8fCAhaXNDb250aW51b3Vz
U3BlbGxDaGVja2luZ0VuYWJsZWQoKSkKKyAgICBzZWxlY3Rpb24gPSBtX2ZyYW1lLnNlbGVjdGlv
bigpLnNlbGVjdGlvbigpOworICAgIGlmIChzZWxlY3Rpb24uaXNJblBhc3N3b3JkRmllbGQoKSB8
fCAhaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwot
ICAgIE5vZGUqIG5vZGVUb0NoZWNrID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5yb290RWRpdGFibGVF
bGVtZW50KCk7CisgICAgTm9kZSogbm9kZVRvQ2hlY2sgPSBzZWxlY3Rpb24ucm9vdEVkaXRhYmxl
RWxlbWVudCgpOwogICAgIGlmICghbm9kZVRvQ2hlY2spCiAgICAgICAgIHJldHVybjsKIApAQCAt
NzI4LDcgKzczMCw3IEBAIGJvb2wgRWRpdG9yOjpzaG91bGREZWxldGVSYW5nZShSYW5nZSogcmEK
IAogYm9vbCBFZGl0b3I6OnRyeURIVE1MQ29weSgpCiB7ICAgCi0gICAgaWYgKG1fZnJhbWUuc2Vs
ZWN0aW9uKCkuaXNJblBhc3N3b3JkRmllbGQoKSkKKyAgICBpZiAobV9mcmFtZS5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKS5pc0luUGFzc3dvcmRGaWVsZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKICAgICByZXR1cm4gIWRpc3BhdGNoQ1BQRXZlbnQoZXZlbnROYW1lcygpLmNvcHlFdmVudCwg
Q2xpcGJvYXJkV3JpdGFibGUpOwpAQCAtNzM2LDcgKzczOCw3IEBAIGJvb2wgRWRpdG9yOjp0cnlE
SFRNTENvcHkoKQogCiBib29sIEVkaXRvcjo6dHJ5REhUTUxDdXQoKQogewotICAgIGlmIChtX2Zy
YW1lLnNlbGVjdGlvbigpLmlzSW5QYXNzd29yZEZpZWxkKCkpCisgICAgaWYgKG1fZnJhbWUuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNJblBhc3N3b3JkRmllbGQoKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIAogICAgIHJldHVybiAhZGlzcGF0Y2hDUFBFdmVudChldmVudE5hbWVzKCku
Y3V0RXZlbnQsIENsaXBib2FyZFdyaXRhYmxlKTsKQEAgLTk3MCw3ICs5NzIsNyBAQCBOb2RlKiBF
ZGl0b3I6OmZpbmRFdmVudFRhcmdldEZyb21TZWxlY3RpCiAKIHZvaWQgRWRpdG9yOjphcHBseVN0
eWxlKFN0eWxlUHJvcGVydGllcyogc3R5bGUsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlvbikKIHsK
LSAgICBzd2l0Y2ggKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uVHlwZSgpKSB7CisgICAg
c3dpdGNoIChtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnNlbGVjdGlvblR5cGUoKSkg
ewogICAgIGNhc2UgVmlzaWJsZVNlbGVjdGlvbjo6Tm9TZWxlY3Rpb246CiAgICAgICAgIC8vIGRv
IG5vdGhpbmcKICAgICAgICAgYnJlYWs7CkBAIC05OTEsNyArOTkzLDcgQEAgYm9vbCBFZGl0b3I6
OnNob3VsZEFwcGx5U3R5bGUoU3R5bGVQcm9wZQogICAgIAogdm9pZCBFZGl0b3I6OmFwcGx5UGFy
YWdyYXBoU3R5bGUoU3R5bGVQcm9wZXJ0aWVzKiBzdHlsZSwgRWRpdEFjdGlvbiBlZGl0aW5nQWN0
aW9uKQogewotICAgIHN3aXRjaCAobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb25UeXBlKCkp
IHsKKyAgICBzd2l0Y2ggKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9u
VHlwZSgpKSB7CiAgICAgY2FzZSBWaXNpYmxlU2VsZWN0aW9uOjpOb1NlbGVjdGlvbjoKICAgICAg
ICAgLy8gZG8gbm90aGluZwogICAgICAgICBicmVhazsKQEAgLTEyODAsNyArMTI4Miw3IEBAIHZv
aWQgRWRpdG9yOjpjdXQoKQogICAgIHdpbGxXcml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZChzZWxl
Y3Rpb24pOwogICAgIGlmIChzaG91bGREZWxldGVSYW5nZShzZWxlY3Rpb24uZ2V0KCkpKSB7CiAg
ICAgICAgIHVwZGF0ZU1hcmtlcnNGb3JXb3Jkc0FmZmVjdGVkQnlFZGl0aW5nKHRydWUpOwotICAg
ICAgICBpZiAoZW5jbG9zaW5nVGV4dEZvcm1Db250cm9sKG1fZnJhbWUuc2VsZWN0aW9uKCkuc3Rh
cnQoKSkpCisgICAgICAgIGlmIChlbmNsb3NpbmdUZXh0Rm9ybUNvbnRyb2wobV9mcmFtZS5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpKSkKICAgICAgICAgICAgIFBhc3RlYm9hcmQ6OmNy
ZWF0ZUZvckNvcHlBbmRQYXN0ZSgpLT53cml0ZVBsYWluVGV4dChzZWxlY3RlZFRleHRGb3JDbGlw
Ym9hcmQoKSwgY2FuU21hcnRDb3B5T3JEZWxldGUoKSA/IFBhc3RlYm9hcmQ6OkNhblNtYXJ0UmVw
bGFjZSA6IFBhc3RlYm9hcmQ6OkNhbm5vdFNtYXJ0UmVwbGFjZSk7CiAgICAgICAgIGVsc2Ugewog
I2lmIFBMQVRGT1JNKE1BQykgfHwgUExBVEZPUk0oRUZMKQpAQCAtMTMwNSw3ICsxMzA3LDcgQEAg
dm9pZCBFZGl0b3I6OmNvcHkoKQogICAgIH0KIAogICAgIHdpbGxXcml0ZVNlbGVjdGlvblRvUGFz
dGVib2FyZChzZWxlY3RlZFJhbmdlKCkpOwotICAgIGlmIChlbmNsb3NpbmdUZXh0Rm9ybUNvbnRy
b2wobV9mcmFtZS5zZWxlY3Rpb24oKS5zdGFydCgpKSkgeworICAgIGlmIChlbmNsb3NpbmdUZXh0
Rm9ybUNvbnRyb2wobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpKSkgewog
ICAgICAgICBQYXN0ZWJvYXJkOjpjcmVhdGVGb3JDb3B5QW5kUGFzdGUoKS0+d3JpdGVQbGFpblRl
eHQoc2VsZWN0ZWRUZXh0Rm9yQ2xpcGJvYXJkKCksCiAgICAgICAgICAgICBjYW5TbWFydENvcHlP
ckRlbGV0ZSgpID8gUGFzdGVib2FyZDo6Q2FuU21hcnRSZXBsYWNlIDogUGFzdGVib2FyZDo6Q2Fu
bm90U21hcnRSZXBsYWNlKTsKICAgICB9IGVsc2UgewpAQCAtMTM0Miw3ICsxMzQ0LDcgQEAgdm9p
ZCBFZGl0b3I6OnBhc3RlKFBhc3RlYm9hcmQmIHBhc3RlYm9hcgogICAgIHVwZGF0ZU1hcmtlcnNG
b3JXb3Jkc0FmZmVjdGVkQnlFZGl0aW5nKGZhbHNlKTsKICAgICBDYWNoZWRSZXNvdXJjZUxvYWRl
ciogbG9hZGVyID0gZG9jdW1lbnQoKS5jYWNoZWRSZXNvdXJjZUxvYWRlcigpOwogICAgIFJlc291
cmNlQ2FjaGVWYWxpZGF0aW9uU3VwcHJlc3NvciB2YWxpZGF0aW9uU3VwcHJlc3Nvcihsb2FkZXIp
OwotICAgIGlmIChtX2ZyYW1lLnNlbGVjdGlvbigpLmlzQ29udGVudFJpY2hseUVkaXRhYmxlKCkp
CisgICAgaWYgKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNDb250ZW50UmljaGx5
RWRpdGFibGUoKSkKICAgICAgICAgcGFzdGVXaXRoUGFzdGVib2FyZCgmcGFzdGVib2FyZCwgdHJ1
ZSk7CiAgICAgZWxzZQogICAgICAgICBwYXN0ZUFzUGxhaW5UZXh0V2l0aFBhc3RlYm9hcmQocGFz
dGVib2FyZCk7CkBAIC0xODQyLDggKzE4NDQsOCBAQCB2b2lkIEVkaXRvcjo6c2V0Q29tcG9zaXRp
b24oY29uc3QgU3RyaW5nCiAgICAgICAgIFR5cGluZ0NvbW1hbmQ6Omluc2VydFRleHQoZG9jdW1l
bnQoKSwgdGV4dCwgVHlwaW5nQ29tbWFuZDo6U2VsZWN0SW5zZXJ0ZWRUZXh0IHwgVHlwaW5nQ29t
bWFuZDo6UHJldmVudFNwZWxsQ2hlY2tpbmcsIFR5cGluZ0NvbW1hbmQ6OlRleHRDb21wb3NpdGlv
blVwZGF0ZSk7CiAKICAgICAgICAgLy8gRmluZCBvdXQgd2hhdCBub2RlIGhhcyB0aGUgY29tcG9z
aXRpb24gbm93LgotICAgICAgICBQb3NpdGlvbiBiYXNlID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5i
YXNlKCkuZG93bnN0cmVhbSgpOwotICAgICAgICBQb3NpdGlvbiBleHRlbnQgPSBtX2ZyYW1lLnNl
bGVjdGlvbigpLmV4dGVudCgpOworICAgICAgICBQb3NpdGlvbiBiYXNlID0gbV9mcmFtZS5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKS5iYXNlKCkuZG93bnN0cmVhbSgpOworICAgICAgICBQb3NpdGlv
biBleHRlbnQgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmV4dGVudCgpOwogICAg
ICAgICBOb2RlKiBiYXNlTm9kZSA9IGJhc2UuZGVwcmVjYXRlZE5vZGUoKTsKICAgICAgICAgdW5z
aWduZWQgYmFzZU9mZnNldCA9IGJhc2UuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKTsKICAgICAg
ICAgTm9kZSogZXh0ZW50Tm9kZSA9IGV4dGVudC5kZXByZWNhdGVkTm9kZSgpOwpAQCAtMjE2MSwx
MyArMjE2MywxMyBAQCBWZWN0b3I8U3RyaW5nPiBFZGl0b3I6Omd1ZXNzZXNGb3JNaXNzcGVsCiB7
CiAgICAgaWYgKHVuaWZpZWRUZXh0Q2hlY2tlckVuYWJsZWQoKSkgewogICAgICAgICBSZWZQdHI8
UmFuZ2U+IHJhbmdlOwotICAgICAgICBGcmFtZVNlbGVjdGlvbiYgZnJhbWVTZWxlY3Rpb24gPSBt
X2ZyYW1lLnNlbGVjdGlvbigpOwotICAgICAgICBpZiAoZnJhbWVTZWxlY3Rpb24uaXNDYXJldCgp
ICYmIGJlaGF2aW9yKCkuc2hvdWxkQWxsb3dTcGVsbGluZ1N1Z2dlc3Rpb25zV2l0aG91dFNlbGVj
dGlvbigpKSB7Ci0gICAgICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIHdvcmRTZWxlY3Rpb24gPSBW
aXNpYmxlU2VsZWN0aW9uKGZyYW1lU2VsZWN0aW9uLmJhc2UoKSk7CisgICAgICAgIFZpc2libGVT
ZWxlY3Rpb24gc2VsZWN0aW9uID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAg
ICAgICAgaWYgKHNlbGVjdGlvbi5pc0NhcmV0KCkgJiYgYmVoYXZpb3IoKS5zaG91bGRBbGxvd1Nw
ZWxsaW5nU3VnZ2VzdGlvbnNXaXRob3V0U2VsZWN0aW9uKCkpIHsKKyAgICAgICAgICAgIFZpc2li
bGVTZWxlY3Rpb24gd29yZFNlbGVjdGlvbiA9IFZpc2libGVTZWxlY3Rpb24oc2VsZWN0aW9uLmJh
c2UoKSk7CiAgICAgICAgICAgICB3b3JkU2VsZWN0aW9uLmV4cGFuZFVzaW5nR3JhbnVsYXJpdHko
V29yZEdyYW51bGFyaXR5KTsKICAgICAgICAgICAgIHJhbmdlID0gd29yZFNlbGVjdGlvbi50b05v
cm1hbGl6ZWRSYW5nZSgpOwogICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHJhbmdlID0gZnJh
bWVTZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICAgICAgICAgIHJhbmdlID0gc2Vs
ZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7CiAgICAgICAgIGlmICghcmFuZ2UpCiAgICAgICAg
ICAgICByZXR1cm4gVmVjdG9yPFN0cmluZz4oKTsKICAgICAgICAgcmV0dXJuIFRleHRDaGVja2lu
Z0hlbHBlcihjbGllbnQoKSwgcmFuZ2UpLmd1ZXNzZXNGb3JNaXNzcGVsbGVkT3JVbmdyYW1tYXRp
Y2FsUmFuZ2UoaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKCksIG1pc3NwZWxsZWQsIHVuZ3JhbW1h
dGljYWwpOwpAQCAtMjMwMSw3ICsyMzAzLDcgQEAgdm9pZCBFZGl0b3I6Om1hcmtNaXNzcGVsbGlu
Z3NBZnRlclR5cGluZwogICAgICAgICBtX2ZyYW1lLmVkaXRvcigpLnJlcGxhY2VTZWxlY3Rpb25X
aXRoVGV4dChhdXRvY29ycmVjdGVkU3RyaW5nLCBmYWxzZSwgZmFsc2UpOwogCiAgICAgICAgIC8v
IFJlc2V0IHRoZSBjaGFyZXQgb25lIGNoYXJhY3RlciBmdXJ0aGVyLgotICAgICAgICBtX2ZyYW1l
LnNlbGVjdGlvbigpLm1vdmVUbyhtX2ZyYW1lLnNlbGVjdGlvbigpLmVuZCgpKTsKKyAgICAgICAg
bV9mcmFtZS5zZWxlY3Rpb24oKS5tb3ZlVG8obV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24o
KS5lbmQoKSk7CiAgICAgICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkubW9kaWZ5KEZyYW1lU2VsZWN0
aW9uOjpBbHRlcmF0aW9uTW92ZSwgRGlyZWN0aW9uRm9yd2FyZCwgQ2hhcmFjdGVyR3JhbnVsYXJp
dHkpOwogICAgIH0KIApAQCAtMjM3MCw3ICsyMzcyLDcgQEAgYm9vbCBFZGl0b3I6OmlzU3BlbGxD
aGVja2luZ0VuYWJsZWRGb3IoTgogCiBib29sIEVkaXRvcjo6aXNTcGVsbENoZWNraW5nRW5hYmxl
ZEluRm9jdXNlZE5vZGUoKSBjb25zdAogewotICAgIHJldHVybiBpc1NwZWxsQ2hlY2tpbmdFbmFi
bGVkRm9yKG1fZnJhbWUuc2VsZWN0aW9uKCkuc3RhcnQoKS5kZXByZWNhdGVkTm9kZSgpKTsKKyAg
ICByZXR1cm4gaXNTcGVsbENoZWNraW5nRW5hYmxlZEZvcihtX2ZyYW1lLnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpLnN0YXJ0KCkuZGVwcmVjYXRlZE5vZGUoKSk7CiB9CiAKIHZvaWQgRWRpdG9yOjpt
YXJrTWlzc3BlbGxpbmdzKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiwgUmVmUHRy
PFJhbmdlPiYgZmlyc3RNaXNzcGVsbGluZ1JhbmdlKQpAQCAtMjQ5NCw5ICsyNDk2LDkgQEAgdm9p
ZCBFZGl0b3I6Om1hcmtBbmRSZXBsYWNlRm9yKFBhc3NSZWZQdAogICAgIGJvb2wgYWRqdXN0U2Vs
ZWN0aW9uRm9yUGFyYWdyYXBoQm91bmRhcmllcyA9IGZhbHNlOwogCiAgICAgaWYgKHNob3VsZFBl
cmZvcm1SZXBsYWNlbWVudCB8fCBzaG91bGRNYXJrU3BlbGxpbmcgfHwgc2hvdWxkQ2hlY2tGb3JD
b3JyZWN0aW9uKSB7Ci0gICAgICAgIGlmIChtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvblR5
cGUoKSA9PSBWaXNpYmxlU2VsZWN0aW9uOjpDYXJldFNlbGVjdGlvbikgeworICAgICAgICBpZiAo
bV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb25UeXBlKCkgPT0gVmlzaWJs
ZVNlbGVjdGlvbjo6Q2FyZXRTZWxlY3Rpb24pIHsKICAgICAgICAgICAgIC8vIEF0dGVtcHQgdG8g
c2F2ZSB0aGUgY2FyZXQgcG9zaXRpb24gc28gd2UgY2FuIHJlc3RvcmUgaXQgbGF0ZXIgaWYgbmVl
ZGVkCi0gICAgICAgICAgICBQb3NpdGlvbiBjYXJldFBvc2l0aW9uID0gbV9mcmFtZS5zZWxlY3Rp
b24oKS5lbmQoKTsKKyAgICAgICAgICAgIFBvc2l0aW9uIGNhcmV0UG9zaXRpb24gPSBtX2ZyYW1l
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmVuZCgpOwogICAgICAgICAgICAgc2VsZWN0aW9uT2Zm
c2V0ID0gcGFyYWdyYXBoLm9mZnNldFRvKGNhcmV0UG9zaXRpb24sIEFTU0VSVF9OT19FWENFUFRJ
T04pOwogICAgICAgICAgICAgcmVzdG9yZVNlbGVjdGlvbkFmdGVyQ2hhbmdlID0gdHJ1ZTsKICAg
ICAgICAgICAgIGlmIChzZWxlY3Rpb25PZmZzZXQgPiAwICYmIChzZWxlY3Rpb25PZmZzZXQgPiBw
YXJhZ3JhcGgudGV4dExlbmd0aCgpIHx8IHBhcmFncmFwaC50ZXh0Q2hhckF0KHNlbGVjdGlvbk9m
ZnNldCAtIDEpID09IG5ld2xpbmVDaGFyYWN0ZXIpKQpAQCAtMjYyNSw3ICsyNjI3LDcgQEAgdm9p
ZCBFZGl0b3I6Om1hcmtBbmRSZXBsYWNlRm9yKFBhc3NSZWZQdAogICAgICAgICAgICAgICAgIG1f
ZnJhbWUuc2VsZWN0aW9uKCkubW9kaWZ5KEZyYW1lU2VsZWN0aW9uOjpBbHRlcmF0aW9uTW92ZSwg
RGlyZWN0aW9uRm9yd2FyZCwgQ2hhcmFjdGVyR3JhbnVsYXJpdHkpOwogICAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgICAgLy8gSWYgdGhpcyBmYWlscyBmb3IgYW55IHJlYXNvbiwgdGhlIGZhbGxi
YWNrIGlzIHRvIGdvIG9uZSBwb3NpdGlvbiBiZXlvbmQgdGhlIGxhc3QgcmVwbGFjZW1lbnQKLSAg
ICAgICAgICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkubW92ZVRvKG1fZnJhbWUuc2VsZWN0aW9uKCku
ZW5kKCkpOworICAgICAgICAgICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5tb3ZlVG8obV9mcmFtZS5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5lbmQoKSk7CiAgICAgICAgICAgICBtX2ZyYW1lLnNlbGVj
dGlvbigpLm1vZGlmeShGcmFtZVNlbGVjdGlvbjo6QWx0ZXJhdGlvbk1vdmUsIERpcmVjdGlvbkZv
cndhcmQsIENoYXJhY3RlckdyYW51bGFyaXR5KTsKICAgICAgICAgfQogICAgIH0KQEAgLTI4MjIs
MTAgKzI4MjQsMTEgQEAgYm9vbCBFZGl0b3I6OmdldENvbXBvc2l0aW9uU2VsZWN0aW9uKHVucwog
ewogICAgIGlmICghbV9jb21wb3NpdGlvbk5vZGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICBQb3NpdGlvbiBzdGFydCA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc3RhcnQoKTsKKyAgICBjb25z
dCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpOworICAgIFBvc2l0aW9uIHN0YXJ0ID0gc2VsZWN0aW9uLnN0YXJ0KCk7CiAgICAgaWYg
KHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCkgIT0gbV9jb21wb3NpdGlvbk5vZGUpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICBQb3NpdGlvbiBlbmQgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLmVuZCgp
OworICAgIFBvc2l0aW9uIGVuZCA9IHNlbGVjdGlvbi5lbmQoKTsKICAgICBpZiAoZW5kLmRlcHJl
Y2F0ZWROb2RlKCkgIT0gbV9jb21wb3NpdGlvbk5vZGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IApAQCAtMzM4Miw3ICszMzg1LDcgQEAgc3RhdGljIE5vZGUqIGZpbmRGaXJzdE1hcmthYmxlKE5v
ZGUqIG5vZAogCiBib29sIEVkaXRvcjo6c2VsZWN0aW9uU3RhcnRIYXNNYXJrZXJGb3IoRG9jdW1l
bnRNYXJrZXI6Ok1hcmtlclR5cGUgbWFya2VyVHlwZSwgaW50IGZyb20sIGludCBsZW5ndGgpIGNv
bnN0CiB7Ci0gICAgTm9kZSogbm9kZSA9IGZpbmRGaXJzdE1hcmthYmxlKG1fZnJhbWUuc2VsZWN0
aW9uKCkuc3RhcnQoKS5kZXByZWNhdGVkTm9kZSgpKTsKKyAgICBOb2RlKiBub2RlID0gZmluZEZp
cnN0TWFya2FibGUobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpLmRlcHJl
Y2F0ZWROb2RlKCkpOwogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAJKHJldmlzaW9uIDE2
MzEyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIxNSw4ICsyMTUsOCBAQCBzdGF0aWMgYm9vbCBleHBhbmRTZWxlY3Rpb25U
b0dyYW51bGFyaXR5CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAobmV3UmFuZ2UtPmNv
bGxhcHNlZChJR05PUkVfRVhDRVBUSU9OKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIFJl
ZlB0cjxSYW5nZT4gb2xkUmFuZ2UgPSBmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05v
cm1hbGl6ZWRSYW5nZSgpOwotICAgIEVBZmZpbml0eSBhZmZpbml0eSA9IGZyYW1lLnNlbGVjdGlv
bigpLmFmZmluaXR5KCk7CisgICAgUmVmUHRyPFJhbmdlPiBvbGRSYW5nZSA9IHNlbGVjdGlvbi50
b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIEVBZmZpbml0eSBhZmZpbml0eSA9IHNlbGVjdGlvbi5h
ZmZpbml0eSgpOwogICAgIGlmICghZnJhbWUuZWRpdG9yKCkuY2xpZW50KCktPnNob3VsZENoYW5n
ZVNlbGVjdGVkUmFuZ2Uob2xkUmFuZ2UuZ2V0KCksIG5ld1JhbmdlLmdldCgpLCBhZmZpbml0eSwg
ZmFsc2UpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0
U2VsZWN0ZWRSYW5nZShuZXdSYW5nZS5nZXQoKSwgYWZmaW5pdHksIHRydWUpOwpAQCAtMTI5Nyw3
ICsxMjk3LDggQEAgc3RhdGljIGJvb2wgZW5hYmxlZEluRWRpdGFibGVUZXh0T3JDYXJldAogCiBz
dGF0aWMgYm9vbCBlbmFibGVkSW5SaWNobHlFZGl0YWJsZVRleHQoRnJhbWUmIGZyYW1lLCBFdmVu
dCosIEVkaXRvckNvbW1hbmRTb3VyY2UpCiB7Ci0gICAgcmV0dXJuIGZyYW1lLnNlbGVjdGlvbigp
LmlzQ2FyZXRPclJhbmdlKCkgJiYgZnJhbWUuc2VsZWN0aW9uKCkuaXNDb250ZW50UmljaGx5RWRp
dGFibGUoKSAmJiBmcmFtZS5zZWxlY3Rpb24oKS5yb290RWRpdGFibGVFbGVtZW50KCk7CisgICAg
Y29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0gZnJhbWUuc2VsZWN0aW9uKCkuc2Vs
ZWN0aW9uKCk7CisgICAgcmV0dXJuIHNlbGVjdGlvbi5pc0NhcmV0T3JSYW5nZSgpICYmIHNlbGVj
dGlvbi5pc0NvbnRlbnRSaWNobHlFZGl0YWJsZSgpICYmIHNlbGVjdGlvbi5yb290RWRpdGFibGVF
bGVtZW50KCk7CiB9CiAKIHN0YXRpYyBib29sIGVuYWJsZWRQYXN0ZShGcmFtZSYgZnJhbWUsIEV2
ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSkKQEAgLTEzMDcsMTIgKzEzMDgsMTIgQEAgc3RhdGlj
IGJvb2wgZW5hYmxlZFBhc3RlKEZyYW1lJiBmcmFtZSwgRQogCiBzdGF0aWMgYm9vbCBlbmFibGVk
UmFuZ2VJbkVkaXRhYmxlVGV4dChGcmFtZSYgZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNv
dXJjZSkKIHsKLSAgICByZXR1cm4gZnJhbWUuc2VsZWN0aW9uKCkuaXNSYW5nZSgpICYmIGZyYW1l
LnNlbGVjdGlvbigpLmlzQ29udGVudEVkaXRhYmxlKCk7CisgICAgcmV0dXJuIGZyYW1lLnNlbGVj
dGlvbigpLmlzUmFuZ2UoKSAmJiBmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0NvbnRl
bnRFZGl0YWJsZSgpOwogfQogCiBzdGF0aWMgYm9vbCBlbmFibGVkUmFuZ2VJblJpY2hseUVkaXRh
YmxlVGV4dChGcmFtZSYgZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSkKIHsKLSAg
ICByZXR1cm4gZnJhbWUuc2VsZWN0aW9uKCkuaXNSYW5nZSgpICYmIGZyYW1lLnNlbGVjdGlvbigp
LmlzQ29udGVudFJpY2hseUVkaXRhYmxlKCk7CisgICAgcmV0dXJuIGZyYW1lLnNlbGVjdGlvbigp
LmlzUmFuZ2UoKSAmJiBmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0NvbnRlbnRSaWNo
bHlFZGl0YWJsZSgpOwogfQogCiBzdGF0aWMgYm9vbCBlbmFibGVkUmVkbyhGcmFtZSYgZnJhbWUs
IEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvRnJhbWVTZWxlY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvRnJhbWVTZWxlY3Rpb24uY3BwCShyZXZpc2lvbiAxNjMxMjgpCisrKyBTb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzAyLDYgKzMw
Miw3IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnNldFNlbGVjdGlvbihjb25zdCAKICAgICBWaXNp
YmxlU2VsZWN0aW9uIG9sZFNlbGVjdGlvbiA9IG1fc2VsZWN0aW9uOwogCiAgICAgbV9zZWxlY3Rp
b24gPSBzOworCiAgICAgc2V0Q2FyZXRSZWN0TmVlZHNVcGRhdGUoKTsKICAgICAKICAgICBpZiAo
IXMuaXNOb25lKCkgJiYgIShvcHRpb25zICYgRG9Ob3RTZXRGb2N1cykpCkBAIC0xMzA3LDcgKzEz
MDgsNyBAQCBzdGF0aWMgUmVuZGVyT2JqZWN0KiBjYXJldFJlbmRlcmVyKE5vZGUqCiAKIGJvb2wg
Q2FyZXRCYXNlOjp1cGRhdGVDYXJldFJlY3QoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBWaXNp
YmxlUG9zaXRpb24mIGNhcmV0UG9zaXRpb24pCiB7Ci0gICAgZG9jdW1lbnQtPnVwZGF0ZVN0eWxl
SWZOZWVkZWQoKTsKKyAgICBkb2N1bWVudC0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxl
c2hlZXRzKCk7CiAgICAgbV9jYXJldExvY2FsUmVjdCA9IExheW91dFJlY3QoKTsKIAogICAgIG1f
Y2FyZXRSZWN0TmVlZHNVcGRhdGUgPSBmYWxzZTsKQEAgLTE0MjYsNyArMTQyNyw3IEBAIGJvb2wg
RnJhbWVTZWxlY3Rpb246OnJlY29tcHV0ZUNhcmV0UmVjdCgKIAogI2lmIEVOQUJMRShURVhUX0NB
UkVUKQogICAgIGlmIChSZW5kZXJWaWV3KiB2aWV3ID0gbV9mcmFtZS0+ZG9jdW1lbnQoKS0+cmVu
ZGVyVmlldygpKSB7Ci0gICAgICAgIGJvb2wgcHJldmlvdXNPck5ld0NhcmV0Tm9kZUlzQ29udGVu
dEVkaXRhYmxlID0gaXNDb250ZW50RWRpdGFibGUoKSB8fCAobV9wcmV2aW91c0NhcmV0Tm9kZSAm
JiBtX3ByZXZpb3VzQ2FyZXROb2RlLT5pc0NvbnRlbnRFZGl0YWJsZSgpKTsKKyAgICAgICAgYm9v
bCBwcmV2aW91c09yTmV3Q2FyZXROb2RlSXNDb250ZW50RWRpdGFibGUgPSBzZWxlY3Rpb24oKS5p
c0NvbnRlbnRFZGl0YWJsZSgpIHx8IChtX3ByZXZpb3VzQ2FyZXROb2RlICYmIG1fcHJldmlvdXND
YXJldE5vZGUtPmlzQ29udGVudEVkaXRhYmxlKCkpOwogICAgICAgICBpZiAoc2hvdWxkUmVwYWlu
dENhcmV0KHZpZXcsIHByZXZpb3VzT3JOZXdDYXJldE5vZGVJc0NvbnRlbnRFZGl0YWJsZSkpIHsK
ICAgICAgICAgICAgIGlmIChtX3ByZXZpb3VzQ2FyZXROb2RlKQogICAgICAgICAgICAgICAgIHJl
cGFpbnRDYXJldEZvckxvY2FsUmVjdChtX3ByZXZpb3VzQ2FyZXROb2RlLmdldCgpLCBvbGRSZWN0
KTsKQEAgLTE2NzUsNyArMTY3Niw3IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnNlbGVjdEFsbCgp
CiAKICAgICBSZWZQdHI8Tm9kZT4gcm9vdCA9IDA7CiAgICAgTm9kZSogc2VsZWN0U3RhcnRUYXJn
ZXQgPSAwOwotICAgIGlmIChpc0NvbnRlbnRFZGl0YWJsZSgpKSB7CisgICAgaWYgKG1fc2VsZWN0
aW9uLmlzQ29udGVudEVkaXRhYmxlKCkpIHsKICAgICAgICAgcm9vdCA9IGhpZ2hlc3RFZGl0YWJs
ZVJvb3QobV9zZWxlY3Rpb24uc3RhcnQoKSk7CiAgICAgICAgIGlmIChOb2RlKiBzaGFkb3dSb290
ID0gbV9zZWxlY3Rpb24ubm9uQm91bmRhcnlTaGFkb3dUcmVlUm9vdE5vZGUoKSkKICAgICAgICAg
ICAgIHNlbGVjdFN0YXJ0VGFyZ2V0ID0gc2hhZG93Um9vdC0+c2hhZG93SG9zdCgpOwpAQCAtMTcz
MywxMiArMTczNCw2IEBAIGJvb2wgRnJhbWVTZWxlY3Rpb246OnNldFNlbGVjdGVkUmFuZ2UoUmEK
ICAgICByZXR1cm4gdHJ1ZTsKIH0KIAotYm9vbCBGcmFtZVNlbGVjdGlvbjo6aXNJblBhc3N3b3Jk
RmllbGQoKSBjb25zdAotewotICAgIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50KiB0ZXh0Q29u
dHJvbCA9IGVuY2xvc2luZ1RleHRGb3JtQ29udHJvbChzdGFydCgpKTsKLSAgICByZXR1cm4gdGV4
dENvbnRyb2wgJiYgaXNIVE1MSW5wdXRFbGVtZW50KHRleHRDb250cm9sKSAmJiB0b0hUTUxJbnB1
dEVsZW1lbnQodGV4dENvbnRyb2wpLT5pc1Bhc3N3b3JkRmllbGQoKTsKLX0KLQogdm9pZCBGcmFt
ZVNlbGVjdGlvbjo6Zm9jdXNlZE9yQWN0aXZlU3RhdGVDaGFuZ2VkKCkKIHsKICAgICBib29sIGFj
dGl2ZUFuZEZvY3VzZWQgPSBpc0ZvY3VzZWRBbmRBY3RpdmUoKTsKQEAgLTE4MTMsOCArMTgwOCw5
IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnVwZGF0ZUFwcGVhcmFuY2UoKQogCiAgICAgLy8gUGFp
bnQgYSBibG9jayBjdXJzb3IgaW5zdGVhZCBvZiBhIGNhcmV0IGluIG92ZXJ0eXBlIG1vZGUgdW5s
ZXNzIHRoZSBjYXJldCBpcyBhdCB0aGUgZW5kIG9mIGEgbGluZSAoaW4gdGhpcyBjYXNlCiAgICAg
Ly8gdGhlIEZyYW1lU2VsZWN0aW9uIHdpbGwgcGFpbnQgYSBibGlua2luZyBjYXJldCBhcyB1c3Vh
bCkuCisgICAgVmlzaWJsZVNlbGVjdGlvbiBvbGRTZWxlY3Rpb24gPSBzZWxlY3Rpb24oKTsKICAg
ICBWaXNpYmxlUG9zaXRpb24gZm9yd2FyZFBvc2l0aW9uOwotICAgIGlmIChtX3Nob3VsZFNob3dC
bG9ja0N1cnNvciAmJiBtX3NlbGVjdGlvbi5pc0NhcmV0KCkpIHsKKyAgICBpZiAobV9zaG91bGRT
aG93QmxvY2tDdXJzb3IgJiYgb2xkU2VsZWN0aW9uLmlzQ2FyZXQoKSkgewogICAgICAgICBmb3J3
YXJkUG9zaXRpb24gPSBtb2RpZnlFeHRlbmRpbmdGb3J3YXJkKENoYXJhY3RlckdyYW51bGFyaXR5
KTsKICAgICAgICAgbV9jYXJldFBhaW50ID0gZm9yd2FyZFBvc2l0aW9uLmlzTnVsbCgpOwogICAg
IH0KQEAgLTE4MjMsNyArMTgxOSw3IEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnVwZGF0ZUFwcGVh
cmFuY2UoKQogICAgIGJvb2wgY2FyZXRSZWN0Q2hhbmdlZE9yQ2xlYXJlZCA9IHJlY29tcHV0ZUNh
cmV0UmVjdCgpOwogCiAgICAgYm9vbCBjYXJldEJyb3dzaW5nID0gbV9mcmFtZS0+c2V0dGluZ3Mo
KS5jYXJldEJyb3dzaW5nRW5hYmxlZCgpOwotICAgIGJvb2wgc2hvdWxkQmxpbmsgPSBjYXJldElz
VmlzaWJsZSgpICYmIGlzQ2FyZXQoKSAmJiAoaXNDb250ZW50RWRpdGFibGUoKSB8fCBjYXJldEJy
b3dzaW5nKSAmJiBmb3J3YXJkUG9zaXRpb24uaXNOdWxsKCk7CisgICAgYm9vbCBzaG91bGRCbGlu
ayA9IGNhcmV0SXNWaXNpYmxlKCkgJiYgaXNDYXJldCgpICYmIChvbGRTZWxlY3Rpb24uaXNDb250
ZW50RWRpdGFibGUoKSB8fCBjYXJldEJyb3dzaW5nKSAmJiBmb3J3YXJkUG9zaXRpb24uaXNOdWxs
KCk7CiAKICAgICAvLyBJZiB0aGUgY2FyZXQgbW92ZWQsIHN0b3AgdGhlIGJsaW5rIHRpbWVyIHNv
IHdlIGNhbiByZXN0YXJ0IHdpdGggYQogICAgIC8vIGJsYWNrIGNhcmV0IGluIHRoZSBuZXcgbG9j
YXRpb24uCkBAIC0xODQ5LDcgKzE4NDUsNyBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjp1cGRhdGVB
cHBlYXJhbmNlKCkKIAogICAgIC8vIENvbnN0cnVjdCBhIG5ldyBWaXNpYmxlU29sdXRpb24sIHNp
bmNlIG1fc2VsZWN0aW9uIGlzIG5vdCBuZWNlc3NhcmlseSB2YWxpZCwgYW5kIHRoZSBmb2xsb3dp
bmcgc3RlcHMKICAgICAvLyBhc3N1bWUgYSB2YWxpZCBzZWxlY3Rpb24uIFNlZSA8aHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTY5NTYzPiBhbmQgPHJkYXI6Ly9wcm9ibGVt
LzEwMjMyODY2Pi4KLSAgICBWaXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbihtX3NlbGVjdGlvbi52
aXNpYmxlU3RhcnQoKSwgZm9yd2FyZFBvc2l0aW9uLmlzTm90TnVsbCgpID8gZm9yd2FyZFBvc2l0
aW9uIDogbV9zZWxlY3Rpb24udmlzaWJsZUVuZCgpKTsKKyAgICBWaXNpYmxlU2VsZWN0aW9uIHNl
bGVjdGlvbihvbGRTZWxlY3Rpb24udmlzaWJsZVN0YXJ0KCksIGZvcndhcmRQb3NpdGlvbi5pc05v
dE51bGwoKSA/IGZvcndhcmRQb3NpdGlvbiA6IG9sZFNlbGVjdGlvbi52aXNpYmxlRW5kKCkpOwog
CiAgICAgaWYgKCFzZWxlY3Rpb24uaXNSYW5nZSgpKSB7CiAgICAgICAgIHZpZXctPmNsZWFyU2Vs
ZWN0aW9uKCk7CkBAIC0xOTEyLDcgKzE5MDgsNyBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpjYXJl
dEJsaW5rVGltZXJGaXJlCiAKIHZvaWQgRnJhbWVTZWxlY3Rpb246OnVwZGF0ZVNlbGVjdGlvbkNh
Y2hlc0lmU2VsZWN0aW9uSXNJbnNpZGVUZXh0Rm9ybUNvbnRyb2woRVVzZXJUcmlnZ2VyZWQgdXNl
clRyaWdnZXJlZCkKIHsKLSAgICBpZiAoSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQqIHRleHRD
b250cm9sID0gZW5jbG9zaW5nVGV4dEZvcm1Db250cm9sKHN0YXJ0KCkpKQorICAgIGlmIChIVE1M
VGV4dEZvcm1Db250cm9sRWxlbWVudCogdGV4dENvbnRyb2wgPSBlbmNsb3NpbmdUZXh0Rm9ybUNv
bnRyb2wobV9zZWxlY3Rpb24uc3RhcnQoKSkpCiAgICAgICAgIHRleHRDb250cm9sLT5zZWxlY3Rp
b25DaGFuZ2VkKHVzZXJUcmlnZ2VyZWQgPT0gVXNlclRyaWdnZXJlZCk7CiB9CiAKQEAgLTE5MzYs
MTMgKzE5MzIsMTMgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6c2V0Rm9jdXNlZEVsZW1lbnRJZgog
CiAgICAgYm9vbCBjYXJldEJyb3dzaW5nID0gbV9mcmFtZS0+c2V0dGluZ3MoKS5jYXJldEJyb3dz
aW5nRW5hYmxlZCgpOwogICAgIGlmIChjYXJldEJyb3dzaW5nKSB7Ci0gICAgICAgIGlmIChFbGVt
ZW50KiBhbmNob3IgPSBlbmNsb3NpbmdBbmNob3JFbGVtZW50KGJhc2UoKSkpIHsKKyAgICAgICAg
aWYgKEVsZW1lbnQqIGFuY2hvciA9IGVuY2xvc2luZ0FuY2hvckVsZW1lbnQobV9zZWxlY3Rpb24u
YmFzZSgpKSkgewogICAgICAgICAgICAgbV9mcmFtZS0+cGFnZSgpLT5mb2N1c0NvbnRyb2xsZXIo
KS5zZXRGb2N1c2VkRWxlbWVudChhbmNob3IsIG1fZnJhbWUpOwogICAgICAgICAgICAgcmV0dXJu
OwogICAgICAgICB9CiAgICAgfQogCi0gICAgaWYgKEVsZW1lbnQqIHRhcmdldCA9IHJvb3RFZGl0
YWJsZUVsZW1lbnQoKSkgeworICAgIGlmIChFbGVtZW50KiB0YXJnZXQgPSBtX3NlbGVjdGlvbi5y
b290RWRpdGFibGVFbGVtZW50KCkpIHsKICAgICAgICAgLy8gV2FsayB1cCB0aGUgRE9NIHRyZWUg
dG8gc2VhcmNoIGZvciBhbiBlbGVtZW50IHRvIGZvY3VzLgogICAgICAgICB3aGlsZSAodGFyZ2V0
KSB7CiAgICAgICAgICAgICAvLyBXZSBkb24ndCB3YW50IHRvIHNldCBmb2N1cyBvbiBhIHN1YmZy
YW1lIHdoZW4gc2VsZWN0aW5nIGluIGEgcGFyZW50IGZyYW1lLApAQCAtMjA1NCw3ICsyMDUwLDcg
QEAgSFRNTEZvcm1FbGVtZW50KiBGcmFtZVNlbGVjdGlvbjo6Y3VycmVudAogICAgIC8vIFN0YXJ0
IGxvb2tpbmcgZWl0aGVyIGF0IHRoZSBhY3RpdmUgKGZpcnN0IHJlc3BvbmRlcikgbm9kZSwgb3Ig
d2hlcmUgdGhlIHNlbGVjdGlvbiBpcy4KICAgICBFbGVtZW50KiBzdGFydCA9IG1fZnJhbWUtPmRv
Y3VtZW50KCktPmZvY3VzZWRFbGVtZW50KCk7CiAgICAgaWYgKCFzdGFydCkKLSAgICAgICAgc3Rh
cnQgPSB0aGlzLT5zdGFydCgpLmVsZW1lbnQoKTsKKyAgICAgICAgc3RhcnQgPSBtX3NlbGVjdGlv
bi5zdGFydCgpLmVsZW1lbnQoKTsKICAgICBpZiAoIXN0YXJ0KQogICAgICAgICByZXR1cm4gbnVs
bHB0cjsKIApAQCAtMjA3MSwxOCArMjA2NywxOCBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpyZXZl
YWxTZWxlY3Rpb24oY29uCiB7CiAgICAgTGF5b3V0UmVjdCByZWN0OwogCi0gICAgc3dpdGNoIChz
ZWxlY3Rpb25UeXBlKCkpIHsKKyAgICBzd2l0Y2ggKG1fc2VsZWN0aW9uLnNlbGVjdGlvblR5cGUo
KSkgewogICAgIGNhc2UgVmlzaWJsZVNlbGVjdGlvbjo6Tm9TZWxlY3Rpb246CiAgICAgICAgIHJl
dHVybjsKICAgICBjYXNlIFZpc2libGVTZWxlY3Rpb246OkNhcmV0U2VsZWN0aW9uOgogICAgICAg
ICByZWN0ID0gYWJzb2x1dGVDYXJldEJvdW5kcygpOwogICAgICAgICBicmVhazsKICAgICBjYXNl
IFZpc2libGVTZWxlY3Rpb246OlJhbmdlU2VsZWN0aW9uOgotICAgICAgICByZWN0ID0gcmV2ZWFs
RXh0ZW50T3B0aW9uID09IFJldmVhbEV4dGVudCA/IFZpc2libGVQb3NpdGlvbihleHRlbnQoKSku
YWJzb2x1dGVDYXJldEJvdW5kcygpIDogZW5jbG9zaW5nSW50UmVjdChib3VuZHMoZmFsc2UpKTsK
KyAgICAgICAgcmVjdCA9IHJldmVhbEV4dGVudE9wdGlvbiA9PSBSZXZlYWxFeHRlbnQgPyBWaXNp
YmxlUG9zaXRpb24obV9zZWxlY3Rpb24uZXh0ZW50KCkpLmFic29sdXRlQ2FyZXRCb3VuZHMoKSA6
IGVuY2xvc2luZ0ludFJlY3QoYm91bmRzKGZhbHNlKSk7CiAgICAgICAgIGJyZWFrOwogICAgIH0K
IAotICAgIFBvc2l0aW9uIHN0YXJ0ID0gdGhpcy0+c3RhcnQoKTsKKyAgICBQb3NpdGlvbiBzdGFy
dCA9IG1fc2VsZWN0aW9uLnN0YXJ0KCk7CiAgICAgQVNTRVJUKHN0YXJ0LmRlcHJlY2F0ZWROb2Rl
KCkpOwogICAgIGlmIChzdGFydC5kZXByZWNhdGVkTm9kZSgpICYmIHN0YXJ0LmRlcHJlY2F0ZWRO
b2RlKCktPnJlbmRlcmVyKCkpIHsKICNpZiBQTEFURk9STShJT1MpCkBAIC0yMTE3LDcgKzIxMTMs
NyBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpzZXRTZWxlY3Rpb25Gcm9tTm9uCiAgICAgaWYgKCFp
c05vbmUoKSB8fCAhKGRvY3VtZW50LT5oYXNFZGl0YWJsZVN0eWxlKCkgfHwgY2FyZXRCcm93c2lu
ZykpCiAgICAgICAgIHJldHVybjsKICNlbHNlCi0gICAgaWYgKCFkb2N1bWVudCB8fCAhKGlzTm9u
ZSgpIHx8IGlzU3RhcnRPZkRvY3VtZW50KFZpc2libGVQb3NpdGlvbihzZWxlY3Rpb24oKS5zdGFy
dCgpLCBzZWxlY3Rpb24oKS5hZmZpbml0eSgpKSkpIHx8ICFkb2N1bWVudC0+aGFzRWRpdGFibGVT
dHlsZSgpKQorICAgIGlmICghZG9jdW1lbnQgfHwgIShpc05vbmUoKSB8fCBpc1N0YXJ0T2ZEb2N1
bWVudChWaXNpYmxlUG9zaXRpb24obV9zZWxlY3Rpb24uc3RhcnQoKSwgbV9zZWxlY3Rpb24uYWZm
aW5pdHkoKSkpKSB8fCAhZG9jdW1lbnQtPmhhc0VkaXRhYmxlU3R5bGUoKSkKICAgICAgICAgcmV0
dXJuOwogI2VuZGlmCiAKQEAgLTI0MzEsOCArMjQyNyw4IEBAIFZpc2libGVTZWxlY3Rpb24gRnJh
bWVTZWxlY3Rpb246OndvcmRTZWwKICAgICBuZXdTZWxlY3Rpb24uZXhwYW5kVXNpbmdHcmFudWxh
cml0eShXb3JkR3JhbnVsYXJpdHkpOwogICAgIGZyYW1lU2VsZWN0aW9uLnNldFNlbGVjdGlvbihu
ZXdTZWxlY3Rpb24sIENsb3NlVHlwaW5nIHwgQ2xlYXJUeXBpbmdTdHlsZSwgQWxpZ25DdXJzb3JP
blNjcm9sbElmTmVlZGVkLCBmcmFtZVNlbGVjdGlvbi5ncmFudWxhcml0eSgpKTsKIAotICAgIFBv
c2l0aW9uIHN0YXJ0UG9zKGZyYW1lU2VsZWN0aW9uLnNlbGVjdGlvbigpLnN0YXJ0KCkpOwotICAg
IFBvc2l0aW9uIGVuZFBvcyhmcmFtZVNlbGVjdGlvbi5zZWxlY3Rpb24oKS5lbmQoKSk7CisgICAg
UG9zaXRpb24gc3RhcnRQb3MoZnJhbWVTZWxlY3Rpb24uc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCku
c3RhcnQoKSk7CisgICAgUG9zaXRpb24gZW5kUG9zKGZyYW1lU2VsZWN0aW9uLnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpLmVuZCgpKTsKIAogICAgIC8vIEV4cGFuc2lvbiBjYW5ub3QgYmUgYWxsb3dl
ZCB0byBjaGFuZ2Ugc2VsZWN0aW9uIHNvIHRoYXQgaXQgaXMgbm8gbG9uZ2VyCiAgICAgLy8gdG91
Y2hlcyAob3IgY29udGFpbnMpIHRoZSBvcmlnaW5hbCwgdW5leHBhbmRlZCBzZWxlY3Rpb24uCkBA
IC0yNDc5LDggKzI0NzUsOCBAQCBWaXNpYmxlU2VsZWN0aW9uIEZyYW1lU2VsZWN0aW9uOjp3b3Jk
U2VsCiAgICAgICAgIH0KICAgICAgICAgZnJhbWVTZWxlY3Rpb24ubW92ZVRvKHN0YXJ0VmlzaWJs
ZVBvcyk7CiAgICAgICAgIGZyYW1lU2VsZWN0aW9uLm1vZGlmeShGcmFtZVNlbGVjdGlvbjo6QWx0
ZXJhdGlvbkV4dGVuZCwgRGlyZWN0aW9uQmFja3dhcmQsIFdvcmRHcmFudWxhcml0eSk7Ci0gICAg
ICAgIHN0YXJ0UG9zID0gZnJhbWVTZWxlY3Rpb24uc2VsZWN0aW9uKCkuc3RhcnQoKTsKLSAgICAg
ICAgZW5kUG9zID0gZnJhbWVTZWxlY3Rpb24uc2VsZWN0aW9uKCkuZW5kKCk7CisgICAgICAgIHN0
YXJ0UG9zID0gZnJhbWVTZWxlY3Rpb24uc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKTsK
KyAgICAgICAgZW5kUG9zID0gZnJhbWVTZWxlY3Rpb24uc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCku
ZW5kKCk7CiAgICAgICAgIHN0YXJ0VmlzaWJsZVBvcyA9IFZpc2libGVQb3NpdGlvbihzdGFydFBv
cywgVlBfREVGQVVMVF9BRkZJTklUWSk7CiAgICAgICAgIGVuZFZpc2libGVQb3MgPSBWaXNpYmxl
UG9zaXRpb24oZW5kUG9zLCBWUF9ERUZBVUxUX0FGRklOSVRZKTsKICAgICAgICAgaWYgKHN0YXJ0
VmlzaWJsZVBvcy5pc051bGwoKSB8fCBlbmRWaXNpYmxlUG9zLmlzTnVsbCgpKSB7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5oCShyZXZpc2lvbiAxNjMxMjgpCisr
KyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmgJKHdvcmtpbmcgY29weSkK
QEAgLTEzNSwxMiArMTM1LDcgQEAgcHVibGljOgogCiAgICAgZXhwbGljaXQgRnJhbWVTZWxlY3Rp
b24oRnJhbWUqID0gMCk7CiAKLSAgICBFbGVtZW50KiByb290RWRpdGFibGVFbGVtZW50KCkgY29u
c3QgeyByZXR1cm4gbV9zZWxlY3Rpb24ucm9vdEVkaXRhYmxlRWxlbWVudCgpOyB9CiAgICAgRWxl
bWVudCogcm9vdEVkaXRhYmxlRWxlbWVudE9yRG9jdW1lbnRFbGVtZW50KCkgY29uc3Q7Ci0KLSAg
ICBib29sIGhhc0VkaXRhYmxlU3R5bGUoKSBjb25zdCB7IHJldHVybiBtX3NlbGVjdGlvbi5oYXNF
ZGl0YWJsZVN0eWxlKCk7IH0KLSAgICBib29sIGlzQ29udGVudEVkaXRhYmxlKCkgY29uc3QgeyBy
ZXR1cm4gbV9zZWxlY3Rpb24uaXNDb250ZW50RWRpdGFibGUoKTsgfQotICAgIGJvb2wgaXNDb250
ZW50UmljaGx5RWRpdGFibGUoKSBjb25zdCB7IHJldHVybiBtX3NlbGVjdGlvbi5pc0NvbnRlbnRS
aWNobHlFZGl0YWJsZSgpOyB9CiAgICAgIAogICAgIHZvaWQgbW92ZVRvKGNvbnN0IFJhbmdlKiwg
RUFmZmluaXR5LCBFVXNlclRyaWdnZXJlZCA9IE5vdFVzZXJUcmlnZ2VyZWQpOwogICAgIHZvaWQg
bW92ZVRvKGNvbnN0IFZpc2libGVQb3NpdGlvbiYsIEVVc2VyVHJpZ2dlcmVkID0gTm90VXNlclRy
aWdnZXJlZCwgQ3Vyc29yQWxpZ25PblNjcm9sbCA9IEFsaWduQ3Vyc29yT25TY3JvbGxJZk5lZWRl
ZCk7CkBAIC0xNTcsMTAgKzE1Miw2IEBAIHB1YmxpYzoKIAogICAgIGJvb2wgY29udGFpbnMoY29u
c3QgTGF5b3V0UG9pbnQmKTsKIAotICAgIFZpc2libGVTZWxlY3Rpb246OlNlbGVjdGlvblR5cGUg
c2VsZWN0aW9uVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0aW9uLnNlbGVjdGlvblR5cGUo
KTsgfQotCi0gICAgRUFmZmluaXR5IGFmZmluaXR5KCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3Rp
b24uYWZmaW5pdHkoKTsgfQotCiAgICAgYm9vbCBtb2RpZnkoRUFsdGVyYXRpb24sIFNlbGVjdGlv
bkRpcmVjdGlvbiwgVGV4dEdyYW51bGFyaXR5LCBFVXNlclRyaWdnZXJlZCA9IE5vdFVzZXJUcmln
Z2VyZWQpOwogICAgIGVudW0gVmVydGljYWxEaXJlY3Rpb24geyBEaXJlY3Rpb25VcCwgRGlyZWN0
aW9uRG93biB9OwogICAgIGJvb2wgbW9kaWZ5KEVBbHRlcmF0aW9uLCB1bnNpZ25lZCB2ZXJ0aWNh
bERpc3RhbmNlLCBWZXJ0aWNhbERpcmVjdGlvbiwgRVVzZXJUcmlnZ2VyZWQgPSBOb3RVc2VyVHJp
Z2dlcmVkLCBDdXJzb3JBbGlnbk9uU2Nyb2xsID0gQWxpZ25DdXJzb3JPblNjcm9sbElmTmVlZGVk
KTsKQEAgLTE3NSw5ICsxNjYsNiBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRFeHRlbnQoY29uc3Qg
VmlzaWJsZVBvc2l0aW9uJiwgRVVzZXJUcmlnZ2VyZWQgPSBOb3RVc2VyVHJpZ2dlcmVkKTsKICAg
ICB2b2lkIHNldEV4dGVudChjb25zdCBQb3NpdGlvbiYsIEVBZmZpbml0eSwgRVVzZXJUcmlnZ2Vy
ZWQgPSBOb3RVc2VyVHJpZ2dlcmVkKTsKIAotICAgIFBvc2l0aW9uIGJhc2UoKSBjb25zdCB7IHJl
dHVybiBtX3NlbGVjdGlvbi5iYXNlKCk7IH0KLSAgICBQb3NpdGlvbiBleHRlbnQoKSBjb25zdCB7
IHJldHVybiBtX3NlbGVjdGlvbi5leHRlbnQoKTsgfQotICAgIFBvc2l0aW9uIHN0YXJ0KCkgY29u
c3QgeyByZXR1cm4gbV9zZWxlY3Rpb24uc3RhcnQoKTsgfQogICAgIFBvc2l0aW9uIGVuZCgpIGNv
bnN0IHsgcmV0dXJuIG1fc2VsZWN0aW9uLmVuZCgpOyB9CiAKICAgICAvLyBSZXR1cm4gdGhlIHJl
bmRlcmVyIHRoYXQgaXMgcmVzcG9uc2libGUgZm9yIHBhaW50aW5nIHRoZSBjYXJldCAoaW4gdGhl
IHNlbGVjdGlvbiBzdGFydCBub2RlKQpAQCAtMTk2LDcgKzE4NCw2IEBAIHB1YmxpYzoKICAgICBi
b29sIGlzQ2FyZXQoKSBjb25zdCB7IHJldHVybiBtX3NlbGVjdGlvbi5pc0NhcmV0KCk7IH0KICAg
ICBib29sIGlzUmFuZ2UoKSBjb25zdCB7IHJldHVybiBtX3NlbGVjdGlvbi5pc1JhbmdlKCk7IH0K
ICAgICBib29sIGlzQ2FyZXRPclJhbmdlKCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3Rpb24uaXND
YXJldE9yUmFuZ2UoKTsgfQotICAgIGJvb2wgaXNJblBhc3N3b3JkRmllbGQoKSBjb25zdDsKICAg
ICBib29sIGlzQWxsKEVkaXRpbmdCb3VuZGFyeUNyb3NzaW5nUnVsZSBydWxlID0gQ2Fubm90Q3Jv
c3NFZGl0aW5nQm91bmRhcnkpIGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0aW9uLmlzQWxsKHJ1bGUp
OyB9CiAgICAgCiAgICAgUGFzc1JlZlB0cjxSYW5nZT4gdG9Ob3JtYWxpemVkUmFuZ2UoKSBjb25z
dCB7IHJldHVybiBtX3NlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOyB9CkBAIC0zMzUsNiAr
MzIyLDcgQEAgcHJpdmF0ZToKICAgICBMYXlvdXRVbml0IG1feFBvc0ZvclZlcnRpY2FsQXJyb3dO
YXZpZ2F0aW9uOwogCiAgICAgVmlzaWJsZVNlbGVjdGlvbiBtX3NlbGVjdGlvbjsKKyAgICBtdXRh
YmxlIFZpc2libGVTZWxlY3Rpb24gbV92YWxpZGF0ZWRTZWxlY3Rpb25DYWNoZTsKICAgICBWaXNp
YmxlUG9zaXRpb24gbV9vcmlnaW5hbEJhc2U7IC8vIFVzZWQgdG8gc3RvcmUgYmFzZSBiZWZvcmUg
dGhlIGFkanVzdG1lbnQgYXQgYmlkaSBib3VuZGFyeQogICAgIFRleHRHcmFudWxhcml0eSBtX2dy
YW51bGFyaXR5OwogCkBAIC0zOTEsNCArMzc5LDQgQEAgdm9pZCBzaG93VHJlZShjb25zdCBXZWJD
b3JlOjpGcmFtZVNlbGVjdAogdm9pZCBzaG93VHJlZShjb25zdCBXZWJDb3JlOjpGcmFtZVNlbGVj
dGlvbiopOwogI2VuZGlmCiAKLSNlbmRpZiAvLyBGcmFtZVNlbGVjdGlvbl9oCisjZW5kaWYgLy8g
RnJhbWVTZWxlY3Rpb24KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvUmVtb3ZlRm9ybWF0
Q29tbWFuZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZW1vdmVG
b3JtYXRDb21tYW5kLmNwcAkocmV2aXNpb24gMTYzMTI4KQorKysgU291cmNlL1dlYkNvcmUvZWRp
dGluZy9SZW1vdmVGb3JtYXRDb21tYW5kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNzcsMTIgKzc3
LDEyIEBAIHN0YXRpYyBib29sIGlzRWxlbWVudEZvclJlbW92ZUZvcm1hdENvbW0KIAogdm9pZCBS
ZW1vdmVGb3JtYXRDb21tYW5kOjpkb0FwcGx5KCkKIHsKLSAgICBpZiAoIWZyYW1lKCkuc2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCkuaXNOb25PcnBoYW5lZENhcmV0T3JSYW5nZSgpKQorICAgIGlmICgh
ZW5kaW5nU2VsZWN0aW9uKCkuaXNOb25PcnBoYW5lZENhcmV0T3JSYW5nZSgpKQogICAgICAgICBy
ZXR1cm47CiAKICAgICAvLyBHZXQgdGhlIGRlZmF1bHQgc3R5bGUgZm9yIHRoaXMgZWRpdGFibGUg
cm9vdCwgaXQncyB0aGUgc3R5bGUgdGhhdCB3ZSdsbCBnaXZlIHRoZQogICAgIC8vIGNvbnRlbnQg
dGhhdCB3ZSdyZSBvcGVyYXRpbmcgb24uCi0gICAgTm9kZSogcm9vdCA9IGZyYW1lKCkuc2VsZWN0
aW9uKCkucm9vdEVkaXRhYmxlRWxlbWVudCgpOworICAgIE5vZGUqIHJvb3QgPSBlbmRpbmdTZWxl
Y3Rpb24oKS5yb290RWRpdGFibGVFbGVtZW50KCk7CiAgICAgUmVmUHRyPEVkaXRpbmdTdHlsZT4g
ZGVmYXVsdFN0eWxlID0gRWRpdGluZ1N0eWxlOjpjcmVhdGUocm9vdCk7CiAKICAgICAvLyBXZSB3
YW50IHRvIHJlbW92ZSBldmVyeXRoaW5nIGJ1dCB0cmFuc3BhcmVudCBiYWNrZ3JvdW5kLgpJbmRl
eDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlU2VsZWN0aW9uLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVTZWxlY3Rpb24uY3BwCShyZXZpc2lv
biAxNjMxMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVTZWxlY3Rpb24uY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC0yOCw2ICsyOCw3IEBACiAKICNpbmNsdWRlICJEb2N1bWVudC5o
IgogI2luY2x1ZGUgIkVsZW1lbnQuaCIKKyNpbmNsdWRlICJIVE1MSW5wdXRFbGVtZW50LmgiCiAj
aW5jbHVkZSAiVGV4dEl0ZXJhdG9yLmgiCiAjaW5jbHVkZSAiVmlzaWJsZVVuaXRzLmgiCiAjaW5j
bHVkZSAiaHRtbGVkaXRpbmcuaCIKQEAgLTY2Niw2ICs2NjcsMTIgQEAgTm9kZSogVmlzaWJsZVNl
bGVjdGlvbjo6bm9uQm91bmRhcnlTaGFkbwogICAgIHJldHVybiBzdGFydCgpLmRlcHJlY2F0ZWRO
b2RlKCkgPyBzdGFydCgpLmRlcHJlY2F0ZWROb2RlKCktPm5vbkJvdW5kYXJ5U2hhZG93VHJlZVJv
b3ROb2RlKCkgOiAwOwogfQogCitib29sIFZpc2libGVTZWxlY3Rpb246OmlzSW5QYXNzd29yZEZp
ZWxkKCkgY29uc3QKK3sKKyAgICBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudCogdGV4dENvbnRy
b2wgPSBlbmNsb3NpbmdUZXh0Rm9ybUNvbnRyb2woc3RhcnQoKSk7CisgICAgcmV0dXJuIHRleHRD
b250cm9sICYmIGlzSFRNTElucHV0RWxlbWVudCh0ZXh0Q29udHJvbCkgJiYgdG9IVE1MSW5wdXRF
bGVtZW50KHRleHRDb250cm9sKS0+aXNQYXNzd29yZEZpZWxkKCk7Cit9CisKICNpZm5kZWYgTkRF
QlVHCiAKIHZvaWQgVmlzaWJsZVNlbGVjdGlvbjo6ZGVidWdQb3NpdGlvbigpIGNvbnN0CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVTZWxlY3Rpb24uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVTZWxlY3Rpb24uaAkocmV2aXNpb24gMTYz
MTI4KQorKysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9WaXNpYmxlU2VsZWN0aW9uLmgJKHdvcmtp
bmcgY29weSkKQEAgLTEwNSw2ICsxMDUsOCBAQCBwdWJsaWM6CiAgICAgLy8gU2hhZG93Um9vdCBu
b2RlIGZvciBuZXcgc2hhZG93IHRyZWVzLCBvciAwIGZvciBub24tc2hhZG93IHRyZWVzLgogICAg
IE5vZGUqIG5vbkJvdW5kYXJ5U2hhZG93VHJlZVJvb3ROb2RlKCkgY29uc3Q7CiAKKyAgICBib29s
IGlzSW5QYXNzd29yZEZpZWxkKCkgY29uc3Q7CisKICNpZm5kZWYgTkRFQlVHCiAgICAgdm9pZCBk
ZWJ1Z1Bvc2l0aW9uKCkgY29uc3Q7CiAgICAgdm9pZCBmb3JtYXRGb3JEZWJ1Z2dlcihjaGFyKiBi
dWZmZXIsIHVuc2lnbmVkIGxlbmd0aCkgY29uc3Q7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL21hYy9FZGl0b3JNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9tYWMvRWRpdG9yTWFjLm1tCShyZXZpc2lvbiAxNjMxMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9l
ZGl0aW5nL21hYy9FZGl0b3JNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTIzOSw3ICsyMzksNyBA
QCBOU0RpY3Rpb25hcnkqIEVkaXRvcjo6Zm9udEF0dHJpYnV0ZXNGb3JTCiAKIGJvb2wgRWRpdG9y
OjpjYW5Db3B5RXhjbHVkaW5nU3RhbmRhbG9uZUltYWdlcygpCiB7Ci0gICAgRnJhbWVTZWxlY3Rp
b24mIHNlbGVjdGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9uKCk7CisgICAgY29uc3QgVmlzaWJsZVNl
bGVjdGlvbiYgc2VsZWN0aW9uID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKICAg
ICByZXR1cm4gc2VsZWN0aW9uLmlzUmFuZ2UoKSAmJiAhc2VsZWN0aW9uLmlzSW5QYXNzd29yZEZp
ZWxkKCk7CiB9CiAKQEAgLTI1OSw3ICsyNTksNyBAQCB2b2lkIEVkaXRvcjo6dGFrZUZpbmRTdHJp
bmdGcm9tU2VsZWN0aW9uCiB2b2lkIEVkaXRvcjo6cmVhZFNlbGVjdGlvbkZyb21QYXN0ZWJvYXJk
KGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpCiB7CiAgICAgUGFzdGVib2FyZCBwYXN0ZWJv
YXJkKHBhc3RlYm9hcmROYW1lKTsKLSAgICBpZiAobV9mcmFtZS5zZWxlY3Rpb24oKS5pc0NvbnRl
bnRSaWNobHlFZGl0YWJsZSgpKQorICAgIGlmIChtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlv
bigpLmlzQ29udGVudFJpY2hseUVkaXRhYmxlKCkpCiAgICAgICAgIHBhc3RlV2l0aFBhc3RlYm9h
cmQoJnBhc3RlYm9hcmQsIHRydWUpOwogICAgIGVsc2UKICAgICAgICAgcGFzdGVBc1BsYWluVGV4
dFdpdGhQYXN0ZWJvYXJkKHBhc3RlYm9hcmQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MQW5jaG9yRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MQW5jaG9yRWxlbWVudC5jcHAJKHJldmlzaW9uIDE2MzEyOCkKKysrIFNvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTEFuY2hvckVsZW1lbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTUsNyArMTk1
LDcgQEAgdm9pZCBIVE1MQW5jaG9yRWxlbWVudDo6ZGVmYXVsdEV2ZW50SGFuZAogICAgICAgICAg
ICAgLy8gVGhpcyBrZWVwcyB0cmFjayBvZiB0aGUgZWRpdGFibGUgYmxvY2sgdGhhdCB0aGUgc2Vs
ZWN0aW9uIHdhcyBpbiAoaWYgaXQgd2FzIGluIG9uZSkganVzdCBiZWZvcmUgdGhlIGxpbmsgd2Fz
IGNsaWNrZWQKICAgICAgICAgICAgIC8vIGZvciB0aGUgTGl2ZVdoZW5Ob3RGb2N1c2VkIGVkaXRh
YmxlIGxpbmsgYmVoYXZpb3IKICAgICAgICAgICAgIGlmIChldmVudC0+dHlwZSgpID09IGV2ZW50
TmFtZXMoKS5tb3VzZWRvd25FdmVudCAmJiBldmVudC0+aXNNb3VzZUV2ZW50KCkgJiYgc3RhdGlj
X2Nhc3Q8TW91c2VFdmVudCo+KGV2ZW50KS0+YnV0dG9uKCkgIT0gUmlnaHRCdXR0b24gJiYgZG9j
dW1lbnQoKS5mcmFtZSgpKSB7Ci0gICAgICAgICAgICAgICAgc2V0Um9vdEVkaXRhYmxlRWxlbWVu
dEZvclNlbGVjdGlvbk9uTW91c2VEb3duKGRvY3VtZW50KCkuZnJhbWUoKS0+c2VsZWN0aW9uKCku
cm9vdEVkaXRhYmxlRWxlbWVudCgpKTsKKyAgICAgICAgICAgICAgICBzZXRSb290RWRpdGFibGVF
bGVtZW50Rm9yU2VsZWN0aW9uT25Nb3VzZURvd24oZG9jdW1lbnQoKS5mcmFtZSgpLT5zZWxlY3Rp
b24oKS5zZWxlY3Rpb24oKS5yb290RWRpdGFibGVFbGVtZW50KCkpOwogICAgICAgICAgICAgICAg
IG1fd2FzU2hpZnRLZXlEb3duT25Nb3VzZURvd24gPSBzdGF0aWNfY2FzdDxNb3VzZUV2ZW50Kj4o
ZXZlbnQpLT5zaGlmdEtleSgpOwogICAgICAgICAgICAgfSBlbHNlIGlmIChldmVudC0+dHlwZSgp
ID09IGV2ZW50TmFtZXMoKS5tb3VzZW92ZXJFdmVudCkgewogICAgICAgICAgICAgICAgIC8vIFRo
ZXNlIGFyZSBjbGVhcmVkIG9uIG1vdXNlb3ZlciBhbmQgbm90IG1vdXNlb3V0IGJlY2F1c2UgdGhl
aXIgdmFsdWVzIGFyZSBuZWVkZWQgZm9yIGRyYWcgZXZlbnRzLApAQCAtMjI4LDcgKzIyOCw3IEBA
IHZvaWQgSFRNTEFuY2hvckVsZW1lbnQ6OnNldEFjdGl2ZShib29sIGQKICAgICAgICAgICAgIC8v
IERvbid0IHNldCB0aGUgbGluayB0byBiZSBhY3RpdmUgaWYgdGhlIGN1cnJlbnQgc2VsZWN0aW9u
IGlzIGluIHRoZSBzYW1lIGVkaXRhYmxlIGJsb2NrIGFzCiAgICAgICAgICAgICAvLyB0aGlzIGxp
bmsKICAgICAgICAgICAgIGNhc2UgRWRpdGFibGVMaW5rTGl2ZVdoZW5Ob3RGb2N1c2VkOgotICAg
ICAgICAgICAgICAgIGlmIChkb3duICYmIGRvY3VtZW50KCkuZnJhbWUoKSAmJiBkb2N1bWVudCgp
LmZyYW1lKCktPnNlbGVjdGlvbigpLnJvb3RFZGl0YWJsZUVsZW1lbnQoKSA9PSByb290RWRpdGFi
bGVFbGVtZW50KCkpCisgICAgICAgICAgICAgICAgaWYgKGRvd24gJiYgZG9jdW1lbnQoKS5mcmFt
ZSgpICYmIGRvY3VtZW50KCkuZnJhbWUoKS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkucm9vdEVk
aXRhYmxlRWxlbWVudCgpID09IHJvb3RFZGl0YWJsZUVsZW1lbnQoKSkKICAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgCkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50LmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50
LmNwcAkocmV2aXNpb24gMTYzMTI4KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MVGV4dEZv
cm1Db250cm9sRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1Niw3ICszNTYsNyBAQCBp
bnQgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OmNvbXB1dGVTCiAgICAgaWYgKCFmcmFtZSkK
ICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICByZXR1cm4gaW5kZXhGb3JWaXNpYmxlUG9zaXRpb24o
ZnJhbWUtPnNlbGVjdGlvbigpLnN0YXJ0KCkpOworICAgIHJldHVybiBpbmRleEZvclZpc2libGVQ
b3NpdGlvbihmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKSk7CiB9CiAKIGlu
dCBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6c2VsZWN0aW9uRW5kKCkgY29uc3QKQEAgLTM3
NSw3ICszNzUsNyBAQCBpbnQgSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQ6OmNvbXB1dGVTCiAg
ICAgaWYgKCFmcmFtZSkKICAgICAgICAgcmV0dXJuIDA7CiAKLSAgICByZXR1cm4gaW5kZXhGb3JW
aXNpYmxlUG9zaXRpb24oZnJhbWUtPnNlbGVjdGlvbigpLmVuZCgpKTsKKyAgICByZXR1cm4gaW5k
ZXhGb3JWaXNpYmxlUG9zaXRpb24oZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmVuZCgp
KTsKIH0KIAogc3RhdGljIGNvbnN0IEF0b21pY1N0cmluZyYgZGlyZWN0aW9uU3RyaW5nKFRleHRG
aWVsZFNlbGVjdGlvbkRpcmVjdGlvbiBkaXJlY3Rpb24pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9w
YWdlL0NvbnRleHRNZW51Q29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvcGFnZS9Db250ZXh0TWVudUNvbnRyb2xsZXIuY3BwCShyZXZpc2lvbiAxNjMxMjgpCisrKyBT
b3VyY2UvV2ViQ29yZS9wYWdlL0NvbnRleHRNZW51Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM0MSwxNSArMzQxLDE1IEBAIHZvaWQgQ29udGV4dE1lbnVDb250cm9sbGVyOjpjb250
ZXh0TWVudUkKICAgICAgICAgYnJlYWs7CiAjZW5kaWYKICAgICBjYXNlIENvbnRleHRNZW51SXRl
bVRhZ1NwZWxsaW5nR3Vlc3M6IHsKLSAgICAgICAgRnJhbWVTZWxlY3Rpb24mIGZyYW1lU2VsZWN0
aW9uID0gZnJhbWUtPnNlbGVjdGlvbigpOwotICAgICAgICBpZiAoZnJhbWUtPmVkaXRvcigpLnNo
b3VsZEluc2VydFRleHQoaXRlbS0+dGl0bGUoKSwgZnJhbWVTZWxlY3Rpb24udG9Ob3JtYWxpemVk
UmFuZ2UoKS5nZXQoKSwgRWRpdG9ySW5zZXJ0QWN0aW9uUGFzdGVkKSkgeworICAgICAgICBWaXNp
YmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsK
KyAgICAgICAgaWYgKGZyYW1lLT5lZGl0b3IoKS5zaG91bGRJbnNlcnRUZXh0KGl0ZW0tPnRpdGxl
KCksIHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rp
b25QYXN0ZWQpKSB7CiAgICAgICAgICAgICBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6Q29tbWFu
ZE9wdGlvbnMgcmVwbGFjZU9wdGlvbnMgPSBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6TWF0Y2hT
dHlsZSB8IFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpQcmV2ZW50TmVzdGluZzsKIAogICAgICAg
ICAgICAgaWYgKGZyYW1lLT5lZGl0b3IoKS5iZWhhdmlvcigpLnNob3VsZEFsbG93U3BlbGxpbmdT
dWdnZXN0aW9uc1dpdGhvdXRTZWxlY3Rpb24oKSkgewotICAgICAgICAgICAgICAgIEFTU0VSVChm
cmFtZVNlbGVjdGlvbi5pc0NhcmV0T3JSYW5nZSgpKTsKLSAgICAgICAgICAgICAgICBWaXNpYmxl
U2VsZWN0aW9uIHdvcmRTZWxlY3Rpb24oZnJhbWVTZWxlY3Rpb24uYmFzZSgpKTsKKyAgICAgICAg
ICAgICAgICBBU1NFUlQoc2VsZWN0aW9uLmlzQ2FyZXRPclJhbmdlKCkpOworICAgICAgICAgICAg
ICAgIFZpc2libGVTZWxlY3Rpb24gd29yZFNlbGVjdGlvbihzZWxlY3Rpb24uYmFzZSgpKTsKICAg
ICAgICAgICAgICAgICB3b3JkU2VsZWN0aW9uLmV4cGFuZFVzaW5nR3JhbnVsYXJpdHkoV29yZEdy
YW51bGFyaXR5KTsKLSAgICAgICAgICAgICAgICBmcmFtZVNlbGVjdGlvbi5zZXRTZWxlY3Rpb24o
d29yZFNlbGVjdGlvbik7CisgICAgICAgICAgICAgICAgZnJhbWUtPnNlbGVjdGlvbigpLnNldFNl
bGVjdGlvbih3b3JkU2VsZWN0aW9uKTsKICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAg
ICAgICAgQVNTRVJUKGZyYW1lLT5lZGl0b3IoKS5zZWxlY3RlZFRleHQoKS5sZW5ndGgoKSk7CiAg
ICAgICAgICAgICAgICAgcmVwbGFjZU9wdGlvbnMgfD0gUmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6
OlNlbGVjdFJlcGxhY2VtZW50OwpAQCAtMzU5LDcgKzM1OSw3IEBAIHZvaWQgQ29udGV4dE1lbnVD
b250cm9sbGVyOjpjb250ZXh0TWVudUkKICAgICAgICAgICAgIEFTU0VSVChkb2N1bWVudCk7CiAg
ICAgICAgICAgICBSZWZQdHI8UmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ+IGNvbW1hbmQgPSBSZXBs
YWNlU2VsZWN0aW9uQ29tbWFuZDo6Y3JlYXRlKCpkb2N1bWVudCwgY3JlYXRlRnJhZ21lbnRGcm9t
TWFya3VwKCpkb2N1bWVudCwgaXRlbS0+dGl0bGUoKSwgIiIpLCByZXBsYWNlT3B0aW9ucyk7CiAg
ICAgICAgICAgICBhcHBseUNvbW1hbmQoY29tbWFuZCk7Ci0gICAgICAgICAgICBmcmFtZVNlbGVj
dGlvbi5yZXZlYWxTZWxlY3Rpb24oU2Nyb2xsQWxpZ25tZW50OjphbGlnblRvRWRnZUlmTmVlZGVk
KTsKKyAgICAgICAgICAgIGZyYW1lLT5zZWxlY3Rpb24oKS5yZXZlYWxTZWxlY3Rpb24oU2Nyb2xs
QWxpZ25tZW50OjphbGlnblRvRWRnZUlmTmVlZGVkKTsKICAgICAgICAgfQogICAgICAgICBicmVh
azsKICAgICB9CkBAIC05MjEsNyArOTIxLDcgQEAgdm9pZCBDb250ZXh0TWVudUNvbnRyb2xsZXI6
OnBvcHVsYXRlKCkKICAgICAgICAgICAgIH0KICAgICAgICAgfQogICAgIH0gZWxzZSB7IC8vIE1h
a2UgYW4gZWRpdGluZyBjb250ZXh0IG1lbnUKLSAgICAgICAgYm9vbCBpblBhc3N3b3JkRmllbGQg
PSBmcmFtZS0+c2VsZWN0aW9uKCkuaXNJblBhc3N3b3JkRmllbGQoKTsKKyAgICAgICAgYm9vbCBp
blBhc3N3b3JkRmllbGQgPSBmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNJblBhc3N3
b3JkRmllbGQoKTsKICAgICAgICAgaWYgKCFpblBhc3N3b3JkRmllbGQpIHsKICAgICAgICAgICAg
IGJvb2wgaGF2ZUNvbnRleHRNZW51SXRlbXNGb3JNaXNzcGVsbGluZ09yR3JhbW1lciA9IGZhbHNl
OwogICAgICAgICAgICAgYm9vbCBzcGVsbENoZWNraW5nRW5hYmxlZCA9IGZyYW1lLT5lZGl0b3Io
KS5pc1NwZWxsQ2hlY2tpbmdFbmFibGVkRm9yKG5vZGUpOwpJbmRleDogU291cmNlL1dlYkNvcmUv
cGFnZS9EcmFnQ29udHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFn
ZS9EcmFnQ29udHJvbGxlci5jcHAJKHJldmlzaW9uIDE2MzEyOCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvRHJhZ0NvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNTgsNyArMTU4LDgg
QEAgc3RhdGljIFBhc3NSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZG9jdQogCiBib29sIERyYWdD
b250cm9sbGVyOjpkcmFnSXNNb3ZlKEZyYW1lU2VsZWN0aW9uJiBzZWxlY3Rpb24sIERyYWdEYXRh
JiBkcmFnRGF0YSkKIHsKLSAgICByZXR1cm4gbV9kb2N1bWVudFVuZGVyTW91c2UgPT0gbV9kcmFn
SW5pdGlhdG9yICYmIHNlbGVjdGlvbi5pc0NvbnRlbnRFZGl0YWJsZSgpICYmIHNlbGVjdGlvbi5p
c1JhbmdlKCkgJiYgIWlzQ29weUtleURvd24oZHJhZ0RhdGEpOworICAgIGNvbnN0IFZpc2libGVT
ZWxlY3Rpb24mIHZhbGlkYXRlZFNlbGVjdGlvbiA9IHNlbGVjdGlvbi5zZWxlY3Rpb24oKTsKKyAg
ICByZXR1cm4gbV9kb2N1bWVudFVuZGVyTW91c2UgPT0gbV9kcmFnSW5pdGlhdG9yICYmIHZhbGlk
YXRlZFNlbGVjdGlvbi5pc0NvbnRlbnRFZGl0YWJsZSgpICYmIHZhbGlkYXRlZFNlbGVjdGlvbi5p
c1JhbmdlKCkgJiYgIWlzQ29weUtleURvd24oZHJhZ0RhdGEpOwogfQogCiAvLyBGSVhNRTogVGhp
cyBtZXRob2QgaXMgcG9vcmx5IG5hbWVkLiAgV2UncmUganVzdCBjbGVhcmluZyB0aGUgc2VsZWN0
aW9uIGZyb20gdGhlIGRvY3VtZW50IHRoaXMgZHJhZyBpcyBleGl0aW5nLgpAQCAtNDEzLDEyICs0
MTQsMTIgQEAgRHJhZ09wZXJhdGlvbiBEcmFnQ29udHJvbGxlcjo6b3BlcmF0aW9uRgogc3RhdGlj
IGJvb2wgc2V0U2VsZWN0aW9uVG9EcmFnQ2FyZXQoRnJhbWUqIGZyYW1lLCBWaXNpYmxlU2VsZWN0
aW9uJiBkcmFnQ2FyZXQsIFJlZlB0cjxSYW5nZT4mIHJhbmdlLCBjb25zdCBJbnRQb2ludCYgcG9p
bnQpCiB7CiAgICAgZnJhbWUtPnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihkcmFnQ2FyZXQpOwot
ICAgIGlmIChmcmFtZS0+c2VsZWN0aW9uKCkuaXNOb25lKCkpIHsKKyAgICBpZiAoZnJhbWUtPnNl
bGVjdGlvbigpLnNlbGVjdGlvbigpLmlzTm9uZSgpKSB7CiAgICAgICAgIGRyYWdDYXJldCA9IGZy
YW1lLT52aXNpYmxlUG9zaXRpb25Gb3JQb2ludChwb2ludCk7CiAgICAgICAgIGZyYW1lLT5zZWxl
Y3Rpb24oKS5zZXRTZWxlY3Rpb24oZHJhZ0NhcmV0KTsKICAgICAgICAgcmFuZ2UgPSBkcmFnQ2Fy
ZXQudG9Ob3JtYWxpemVkUmFuZ2UoKTsKICAgICB9Ci0gICAgcmV0dXJuICFmcmFtZS0+c2VsZWN0
aW9uKCkuaXNOb25lKCkgJiYgZnJhbWUtPnNlbGVjdGlvbigpLmlzQ29udGVudEVkaXRhYmxlKCk7
CisgICAgcmV0dXJuICFmcmFtZS0+c2VsZWN0aW9uKCkuaXNOb25lKCkgJiYgZnJhbWUtPnNlbGVj
dGlvbigpLnNlbGVjdGlvbigpLmlzQ29udGVudEVkaXRhYmxlKCk7CiB9CiAKIGJvb2wgRHJhZ0Nv
bnRyb2xsZXI6OmRpc3BhdGNoVGV4dElucHV0RXZlbnRGb3IoRnJhbWUqIGlubmVyRnJhbWUsIERy
YWdEYXRhJiBkcmFnRGF0YSkKQEAgLTQ4Miw3ICs0ODMsNyBAQCBib29sIERyYWdDb250cm9sbGVy
Ojpjb25jbHVkZUVkaXREcmFnKERyCiAgICAgVmlzaWJsZVNlbGVjdGlvbiBkcmFnQ2FyZXQgPSBt
X3BhZ2UuZHJhZ0NhcmV0Q29udHJvbGxlcigpLmNhcmV0UG9zaXRpb24oKTsKICAgICBtX3BhZ2Uu
ZHJhZ0NhcmV0Q29udHJvbGxlcigpLmNsZWFyKCk7CiAgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9
IGRyYWdDYXJldC50b05vcm1hbGl6ZWRSYW5nZSgpOwotICAgIFJlZlB0cjxFbGVtZW50PiByb290
RWRpdGFibGVFbGVtZW50ID0gaW5uZXJGcmFtZS0+c2VsZWN0aW9uKCkucm9vdEVkaXRhYmxlRWxl
bWVudCgpOworICAgIFJlZlB0cjxFbGVtZW50PiByb290RWRpdGFibGVFbGVtZW50ID0gaW5uZXJG
cmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkucm9vdEVkaXRhYmxlRWxlbWVudCgpOwogCiAg
ICAgLy8gRm9yIHJhbmdlIHRvIGJlIG51bGwgYSBXZWJLaXQgY2xpZW50IG11c3QgaGF2ZSBkb25l
IHNvbWV0aGluZyBiYWQgd2hpbGUKICAgICAvLyBtYW51YWxseSBjb250cm9sbGluZyBkcmFnIGJl
aGF2aW91cgpAQCAtNzY1LDcgKzc2Niw3IEBAIGJvb2wgRHJhZ0NvbnRyb2xsZXI6OnN0YXJ0RHJh
ZyhGcmFtZSYgc3IKIAogICAgICAgICAgICAgc3JjLmVkaXRvcigpLndpbGxXcml0ZVNlbGVjdGlv
blRvUGFzdGVib2FyZChzZWxlY3Rpb25SYW5nZS5nZXQoKSk7CiAKLSAgICAgICAgICAgIGlmIChl
bmNsb3NpbmdUZXh0Rm9ybUNvbnRyb2woc3JjLnNlbGVjdGlvbigpLnN0YXJ0KCkpKQorICAgICAg
ICAgICAgaWYgKGVuY2xvc2luZ1RleHRGb3JtQ29udHJvbChzcmMuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCkuc3RhcnQoKSkpCiAgICAgICAgICAgICAgICAgY2xpcGJvYXJkLnBhc3RlYm9hcmQoKS53
cml0ZVBsYWluVGV4dChzcmMuZWRpdG9yKCkuc2VsZWN0ZWRUZXh0Rm9yQ2xpcGJvYXJkKCksIFBh
c3RlYm9hcmQ6OkNhbm5vdFNtYXJ0UmVwbGFjZSk7CiAgICAgICAgICAgICBlbHNlIHsKICNpZiBQ
TEFURk9STShNQUMpIHx8IFBMQVRGT1JNKEVGTCkKQEAgLTgxMiwxMSArODEzLDEyIEBAIGJvb2wg
RHJhZ0NvbnRyb2xsZXI6OnN0YXJ0RHJhZyhGcmFtZSYgc3IKICAgICAgICAgICAgIC8vIG9uIHRo
ZSB3ZWIgcGFnZS4gVGhpcyBpbmNsdWRlcyByZXBsYWNpbmcgbmV3bGluZXMgd2l0aCBzcGFjZXMu
CiAgICAgICAgICAgICBzcmMuZWRpdG9yKCkuY29weVVSTChsaW5rVVJMLCBoaXRUZXN0UmVzdWx0
LnRleHRDb250ZW50KCkuc2ltcGxpZnlXaGl0ZVNwYWNlKCksIGNsaXBib2FyZC5wYXN0ZWJvYXJk
KCkpOwogCi0gICAgICAgIGlmIChzcmMuc2VsZWN0aW9uKCkuaXNDYXJldCgpICYmIHNyYy5zZWxl
Y3Rpb24oKS5pc0NvbnRlbnRFZGl0YWJsZSgpKSB7CisgICAgICAgIGNvbnN0IFZpc2libGVTZWxl
Y3Rpb24mIHNyY1NlbGVjdGlvbiA9IHNyYy5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAgICAg
ICAgaWYgKHNyY1NlbGVjdGlvbi5pc0NhcmV0KCkgJiYgc3JjU2VsZWN0aW9uLmlzQ29udGVudEVk
aXRhYmxlKCkpIHsKICAgICAgICAgICAgIC8vIGEgdXNlciBjYW4gaW5pdGlhdGUgYSBkcmFnIG9u
IGEgbGluayB3aXRob3V0IGhhdmluZyBhbnkgdGV4dAogICAgICAgICAgICAgLy8gc2VsZWN0ZWQu
ICBJbiB0aGlzIGNhc2UsIHdlIHNob3VsZCBleHBhbmQgdGhlIHNlbGVjdGlvbiB0bwogICAgICAg
ICAgICAgLy8gdGhlIGVuY2xvc2luZyBhbmNob3IgZWxlbWVudAotICAgICAgICAgICAgUG9zaXRp
b24gcG9zID0gc3JjLnNlbGVjdGlvbigpLmJhc2UoKTsKKyAgICAgICAgICAgIFBvc2l0aW9uIHBv
cyA9IHNyY1NlbGVjdGlvbi5iYXNlKCk7CiAgICAgICAgICAgICBOb2RlKiBub2RlID0gZW5jbG9z
aW5nQW5jaG9yRWxlbWVudChwb3MpOwogICAgICAgICAgICAgaWYgKG5vZGUpCiAgICAgICAgICAg
ICAgICAgc3JjLnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uOjpzZWxl
Y3Rpb25Gcm9tQ29udGVudHNPZk5vZGUobm9kZSkpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGFn
ZS9FdmVudEhhbmRsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BhZ2UvRXZl
bnRIYW5kbGVyLmNwcAkocmV2aXNpb24gMTYzMTI4KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9F
dmVudEhhbmRsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMjIzLDcgKzEyMjMsNyBAQCBzdGF0
aWMgYm9vbCBpc1N1Ym1pdEltYWdlKE5vZGUqIG5vZGUpCiAvLyBSZXR1cm5zIHRydWUgaWYgdGhl
IG5vZGUncyBlZGl0YWJsZSBibG9jayBpcyBub3QgY3VycmVudCBmb2N1c2VkIGZvciBlZGl0aW5n
CiBzdGF0aWMgYm9vbCBub2RlSXNOb3RCZWluZ0VkaXRlZChjb25zdCBOb2RlJiBub2RlLCBjb25z
dCBGcmFtZSYgZnJhbWUpCiB7Ci0gICAgcmV0dXJuIGZyYW1lLnNlbGVjdGlvbigpLnJvb3RFZGl0
YWJsZUVsZW1lbnQoKSAhPSBub2RlLnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsKKyAgICByZXR1cm4g
ZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkucm9vdEVkaXRhYmxlRWxlbWVudCgpICE9IG5v
ZGUucm9vdEVkaXRhYmxlRWxlbWVudCgpOwogfQogCiBib29sIEV2ZW50SGFuZGxlcjo6dXNlSGFu
ZEN1cnNvcihOb2RlKiBub2RlLCBib29sIGlzT3ZlckxpbmssIGJvb2wgc2hpZnRLZXkpCkBAIC0y
NjQwLDcgKzI2NDAsNyBAQCBib29sIEV2ZW50SGFuZGxlcjo6c2VuZENvbnRleHRNZW51RXZlbnQo
CiAgICAgICAgIC8vIEZJWE1FOiBJbiB0aGUgZWRpdGFibGUgY2FzZSwgd29yZCBzZWxlY3Rpb24g
c29tZXRpbWVzIHNlbGVjdHMgY29udGVudCB0aGF0IGlzbid0IHVuZGVybmVhdGggdGhlIG1vdXNl
LgogICAgICAgICAvLyBJZiB0aGUgc2VsZWN0aW9uIGlzIG5vbi1lZGl0YWJsZSwgd2UgZG8gd29y
ZCBzZWxlY3Rpb24gdG8gbWFrZSBpdCBlYXNpZXIgdG8gdXNlIHRoZSBjb250ZXh0dWFsIG1lbnUg
aXRlbXMKICAgICAgICAgLy8gYXZhaWxhYmxlIGZvciB0ZXh0IHNlbGVjdGlvbnMuICBCdXQgb25s
eSBpZiB3ZSdyZSBhYm92ZSB0ZXh0LgotICAgICAgICAmJiAobV9mcmFtZS5zZWxlY3Rpb24oKS5p
c0NvbnRlbnRFZGl0YWJsZSgpIHx8IChtZXYudGFyZ2V0Tm9kZSgpICYmIG1ldi50YXJnZXROb2Rl
KCktPmlzVGV4dE5vZGUoKSkpKSB7CisgICAgICAgICYmIChtX2ZyYW1lLnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpLmlzQ29udGVudEVkaXRhYmxlKCkgfHwgKG1ldi50YXJnZXROb2RlKCkgJiYgbWV2
LnRhcmdldE5vZGUoKS0+aXNUZXh0Tm9kZSgpKSkpIHsKICAgICAgICAgbV9tb3VzZURvd25NYXlT
dGFydFNlbGVjdCA9IHRydWU7IC8vIGNvbnRleHQgbWVudSBldmVudHMgYXJlIGFsd2F5cyBhbGxv
d2VkIHRvIHBlcmZvcm0gYSBzZWxlY3Rpb24KICAgICAgICAgc2VsZWN0Q2xvc2VzdFdvcmRPckxp
bmtGcm9tTW91c2VFdmVudChtZXYpOwogICAgIH0KQEAgLTI2NzMsOCArMjY3Myw4IEBAIGJvb2wg
RXZlbnRIYW5kbGVyOjpzZW5kQ29udGV4dE1lbnVFdmVudEYKICAgICBJbnRQb2ludCBsb2NhdGlv
bjsKIAogICAgIEVsZW1lbnQqIGZvY3VzZWRFbGVtZW50ID0gZG9jLT5mb2N1c2VkRWxlbWVudCgp
OwotICAgIEZyYW1lU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBtX2ZyYW1lLnNlbGVjdGlvbigpOwot
ICAgIFBvc2l0aW9uIHN0YXJ0ID0gc2VsZWN0aW9uLnNlbGVjdGlvbigpLnN0YXJ0KCk7CisgICAg
Y29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKTsKKyAgICBQb3NpdGlvbiBzdGFydCA9IHNlbGVjdGlvbi5zdGFydCgpOwogCiAg
ICAgaWYgKHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCkgJiYgKHNlbGVjdGlvbi5yb290RWRpdGFibGVF
bGVtZW50KCkgfHwgc2VsZWN0aW9uLmlzUmFuZ2UoKSkpIHsKICAgICAgICAgUmVmUHRyPFJhbmdl
PiBzZWxlY3Rpb25SYW5nZSA9IHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpOwpAQCAtMzI3
Myw3ICszMjczLDcgQEAgYm9vbCBFdmVudEhhbmRsZXI6OmhhbmRsZURyYWcoY29uc3QgTW91cwog
ICAgICAgICB9IAogICAgICAgICAKICAgICAgICAgbV9tb3VzZURvd25NYXlTdGFydERyYWcgPSBk
aXNwYXRjaERyYWdTcmNFdmVudChldmVudE5hbWVzKCkuZHJhZ3N0YXJ0RXZlbnQsIG1fbW91c2VE
b3duKQotICAgICAgICAgICAgJiYgIW1fZnJhbWUuc2VsZWN0aW9uKCkuaXNJblBhc3N3b3JkRmll
bGQoKTsKKyAgICAgICAgICAgICYmICFtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlz
SW5QYXNzd29yZEZpZWxkKCk7CiAgICAgICAgIAogICAgICAgICAvLyBJbnZhbGlkYXRlIGNsaXBi
b2FyZCBoZXJlIGFnYWluc3QgYW55bW9yZSBwYXN0ZWJvYXJkIHdyaXRpbmcgZm9yIHNlY3VyaXR5
LiAgVGhlIGRyYWcKICAgICAgICAgLy8gaW1hZ2UgY2FuIHN0aWxsIGJlIGNoYW5nZWQgYXMgd2Ug
ZHJhZywgYnV0IG5vdCB0aGUgcGFzdGVib2FyZCBkYXRhLgpJbmRleDogU291cmNlL1dlYkNvcmUv
cGFnZS9Gb2N1c0NvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Bh
Z2UvRm9jdXNDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMTYzMTI4KQorKysgU291cmNlL1dlYkNv
cmUvcGFnZS9Gb2N1c0NvbnRyb2xsZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yODEsNyArMjgx
LDcgQEAgYm9vbCBGb2N1c0NvbnRyb2xsZXI6OmFkdmFuY2VGb2N1c0luRG9jdQogICAgIGJvb2wg
Y2FyZXRCcm93c2luZyA9IGZyYW1lLnNldHRpbmdzKCkuY2FyZXRCcm93c2luZ0VuYWJsZWQoKTsK
IAogICAgIGlmIChjYXJldEJyb3dzaW5nICYmICFjdXJyZW50Tm9kZSkKLSAgICAgICAgY3VycmVu
dE5vZGUgPSBmcmFtZS5zZWxlY3Rpb24oKS5zdGFydCgpLmRlcHJlY2F0ZWROb2RlKCk7CisgICAg
ICAgIGN1cnJlbnROb2RlID0gZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc3RhcnQoKS5k
ZXByZWNhdGVkTm9kZSgpOwogCiAgICAgZG9jdW1lbnQtPnVwZGF0ZUxheW91dElnbm9yZVBlbmRp
bmdTdHlsZXNoZWV0cygpOwogCkBAIC01NTMsOCArNTUzLDggQEAgc3RhdGljIHZvaWQgY2xlYXJT
ZWxlY3Rpb25JZk5lZWRlZChGcmFtZQogICAgICAgICAKICAgICBpZiAob2xkRm9jdXNlZEZyYW1l
LT5kb2N1bWVudCgpICE9IG5ld0ZvY3VzZWRGcmFtZS0+ZG9jdW1lbnQoKSkKICAgICAgICAgcmV0
dXJuOwotICAgIAotICAgIEZyYW1lU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBvbGRGb2N1c2VkRnJh
bWUtPnNlbGVjdGlvbigpOworCisgICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9u
ID0gb2xkRm9jdXNlZEZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKICAgICBpZiAoc2Vs
ZWN0aW9uLmlzTm9uZSgpKQogICAgICAgICByZXR1cm47CiAKQEAgLTU2Miw3ICs1NjIsNyBAQCBz
dGF0aWMgdm9pZCBjbGVhclNlbGVjdGlvbklmTmVlZGVkKEZyYW1lCiAgICAgaWYgKGNhcmV0QnJv
d3NpbmcpCiAgICAgICAgIHJldHVybjsKIAotICAgIE5vZGUqIHNlbGVjdGlvblN0YXJ0Tm9kZSA9
IHNlbGVjdGlvbi5zZWxlY3Rpb24oKS5zdGFydCgpLmRlcHJlY2F0ZWROb2RlKCk7CisgICAgTm9k
ZSogc2VsZWN0aW9uU3RhcnROb2RlID0gc2VsZWN0aW9uLnN0YXJ0KCkuZGVwcmVjYXRlZE5vZGUo
KTsKICAgICBpZiAoc2VsZWN0aW9uU3RhcnROb2RlID09IG5ld0ZvY3VzZWROb2RlIHx8IHNlbGVj
dGlvblN0YXJ0Tm9kZS0+aXNEZXNjZW5kYW50T2YobmV3Rm9jdXNlZE5vZGUpIHx8IHNlbGVjdGlv
blN0YXJ0Tm9kZS0+ZGVwcmVjYXRlZFNoYWRvd0FuY2VzdG9yTm9kZSgpID09IG5ld0ZvY3VzZWRO
b2RlKQogICAgICAgICByZXR1cm47CiAgICAgICAgIApAQCAtNTc5LDggKzU3OSw4IEBAIHN0YXRp
YyB2b2lkIGNsZWFyU2VsZWN0aW9uSWZOZWVkZWQoRnJhbWUKICAgICAgICAgICAgIH0KICAgICAg
ICAgfQogICAgIH0KLSAgICAKLSAgICBzZWxlY3Rpb24uY2xlYXIoKTsKKworICAgIG9sZEZvY3Vz
ZWRGcmFtZS0+c2VsZWN0aW9uKCkuY2xlYXIoKTsKIH0KIAogYm9vbCBGb2N1c0NvbnRyb2xsZXI6
OnNldEZvY3VzZWRFbGVtZW50KEVsZW1lbnQqIGVsZW1lbnQsIFBhc3NSZWZQdHI8RnJhbWU+IG5l
d0ZvY3VzZWRGcmFtZSwgRm9jdXNEaXJlY3Rpb24gZGlyZWN0aW9uKQpJbmRleDogU291cmNlL1dl
YkNvcmUvcGFnZS9pb3MvRnJhbWVJT1MubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGFnZS9pb3MvRnJhbWVJT1MubW0JKHJldmlzaW9uIDE2MzEyOCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BhZ2UvaW9zL0ZyYW1lSU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC02MDEsMTUgKzYwMSwxNSBA
QCB2b2lkIEZyYW1lOjp1cGRhdGVMYXlvdXQoKSBjb25zdAogCiBOU1JlY3QgRnJhbWU6OmNhcmV0
UmVjdCgpIGNvbnN0CiB7Ci0gICAgaWYgKHNlbGVjdGlvbigpLmlzTm9uZSgpKQorICAgIFZpc2li
bGVTZWxlY3Rpb24gdmlzaWJsZVNlbGVjdGlvbiA9IHNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwor
ICAgIGlmICh2aXNpYmxlU2VsZWN0aW9uLmlzTm9uZSgpKQogICAgICAgICByZXR1cm4gQ0dSZWN0
WmVybzsKLSAgICByZXR1cm4gc2VsZWN0aW9uKCkuaXNDYXJldCgpID8gc2VsZWN0aW9uKCkuYWJz
b2x1dGVDYXJldEJvdW5kcygpIDogVmlzaWJsZVBvc2l0aW9uKHNlbGVjdGlvbigpLmVuZCgpKS5h
YnNvbHV0ZUNhcmV0Qm91bmRzKCk7CisgICAgcmV0dXJuIHZpc2libGVTZWxlY3Rpb24uaXNDYXJl
dCgpID8gc2VsZWN0aW9uKCkuYWJzb2x1dGVDYXJldEJvdW5kcygpIDogVmlzaWJsZVBvc2l0aW9u
KHZpc2libGVTZWxlY3Rpb24uZW5kKCkpLmFic29sdXRlQ2FyZXRCb3VuZHMoKTsKIH0KIAogTlNS
ZWN0IEZyYW1lOjpyZWN0Rm9yU2Nyb2xsVG9WaXNpYmxlKCkgY29uc3QKIHsKLSAgICBWaXNpYmxl
U2VsZWN0aW9uIHNlbGVjdGlvbih0aGlzLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7Ci0gICAg
cmV0dXJuIHJlY3RGb3JTZWxlY3Rpb24oc2VsZWN0aW9uKTsKKyAgICByZXR1cm4gcmVjdEZvclNl
bGVjdGlvbihzZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CiB9CiAKIE5TUmVjdCBGcmFtZTo6cmVj
dEZvclNlbGVjdGlvbihWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24pIGNvbnN0CkBAIC02NTgs
NyArNjU4LDYgQEAgTlNSZWN0IEZyYW1lOjpyZWN0Rm9yU2VsZWN0aW9uKFZpc2libGVTZQogCiBE
T01DU1NTdHlsZURlY2xhcmF0aW9uKiBGcmFtZTo6c3R5bGVBdFNlbGVjdGlvblN0YXJ0KCkgY29u
c3QKIHsKLSAgICBQb3NpdGlvbiBzdGFydCA9IHNlbGVjdGlvbigpLnN0YXJ0KCk7CiAgICAgUmVm
UHRyPEVkaXRpbmdTdHlsZT4gZWRpdGluZ1N0eWxlID0gRWRpdGluZ1N0eWxlOjpzdHlsZUF0U2Vs
ZWN0aW9uU3RhcnQoc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkpOwogICAgIGlmICghZWRpdGluZ1N0
eWxlKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTczNywxNCArNzM2LDE0IEBAIHZvaWQg
RnJhbWU6OnNldFJhbmdlZFNlbGVjdGlvbkJhc2VUb0N1cnIKIAogdm9pZCBGcmFtZTo6c2V0UmFu
Z2VkU2VsZWN0aW9uQmFzZVRvQ3VycmVudFNlbGVjdGlvblN0YXJ0KCkKIHsKLSAgICBGcmFtZVNl
bGVjdGlvbiYgZnJhbWVTZWxlY3Rpb24gPSBzZWxlY3Rpb24oKTsKLSAgICBtX3JhbmdlZFNlbGVj
dGlvbkJhc2UgPSBWaXNpYmxlU2VsZWN0aW9uKGZyYW1lU2VsZWN0aW9uLnNlbGVjdGlvbigpLnN0
YXJ0KCksIGZyYW1lU2VsZWN0aW9uLmFmZmluaXR5KCkpOworICAgIGNvbnN0IFZpc2libGVTZWxl
Y3Rpb24mIHNlbGVjdGlvbiA9IHNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgIG1fcmFuZ2Vk
U2VsZWN0aW9uQmFzZSA9IFZpc2libGVTZWxlY3Rpb24oc2VsZWN0aW9uLnN0YXJ0KCksIHNlbGVj
dGlvbi5hZmZpbml0eSgpKTsKIH0KIAogdm9pZCBGcmFtZTo6c2V0UmFuZ2VkU2VsZWN0aW9uQmFz
ZVRvQ3VycmVudFNlbGVjdGlvbkVuZCgpCiB7Ci0gICAgRnJhbWVTZWxlY3Rpb24mIGZyYW1lU2Vs
ZWN0aW9uID0gc2VsZWN0aW9uKCk7Ci0gICAgbV9yYW5nZWRTZWxlY3Rpb25CYXNlID0gVmlzaWJs
ZVNlbGVjdGlvbihmcmFtZVNlbGVjdGlvbi5zZWxlY3Rpb24oKS5lbmQoKSwgZnJhbWVTZWxlY3Rp
b24uYWZmaW5pdHkoKSk7CisgICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0g
c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgbV9yYW5nZWRTZWxlY3Rpb25CYXNlID0gVmlz
aWJsZVNlbGVjdGlvbihzZWxlY3Rpb24uZW5kKCksIHNlbGVjdGlvbi5hZmZpbml0eSgpKTsKIH0K
IAogVmlzaWJsZVNlbGVjdGlvbiBGcmFtZTo6cmFuZ2VkU2VsZWN0aW9uQmFzZSgpIGNvbnN0CkBA
IC03NTksMTQgKzc1OCwxNCBAQCB2b2lkIEZyYW1lOjpjbGVhclJhbmdlZFNlbGVjdGlvbkluaXRp
YWxFCiAKIHZvaWQgRnJhbWU6OnNldFJhbmdlZFNlbGVjdGlvbkluaXRpYWxFeHRlbnRUb0N1cnJl
bnRTZWxlY3Rpb25TdGFydCgpCiB7Ci0gICAgRnJhbWVTZWxlY3Rpb24mIGZyYW1lU2VsZWN0aW9u
ID0gc2VsZWN0aW9uKCk7Ci0gICAgbV9yYW5nZWRTZWxlY3Rpb25Jbml0aWFsRXh0ZW50ID0gVmlz
aWJsZVNlbGVjdGlvbihmcmFtZVNlbGVjdGlvbi5zZWxlY3Rpb24oKS5zdGFydCgpLCBmcmFtZVNl
bGVjdGlvbi5hZmZpbml0eSgpKTsKKyAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rp
b24gPSBzZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAgICBtX3JhbmdlZFNlbGVjdGlvbkluaXRp
YWxFeHRlbnQgPSBWaXNpYmxlU2VsZWN0aW9uKHNlbGVjdGlvbi5zdGFydCgpLCBzZWxlY3Rpb24u
YWZmaW5pdHkoKSk7CiB9CiAKIHZvaWQgRnJhbWU6OnNldFJhbmdlZFNlbGVjdGlvbkluaXRpYWxF
eHRlbnRUb0N1cnJlbnRTZWxlY3Rpb25FbmQoKQogewotICAgIEZyYW1lU2VsZWN0aW9uJiBmcmFt
ZVNlbGVjdGlvbiA9IHNlbGVjdGlvbigpOwotICAgIG1fcmFuZ2VkU2VsZWN0aW9uSW5pdGlhbEV4
dGVudCA9IFZpc2libGVTZWxlY3Rpb24oZnJhbWVTZWxlY3Rpb24uc2VsZWN0aW9uKCkuZW5kKCks
IGZyYW1lU2VsZWN0aW9uLmFmZmluaXR5KCkpOworICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24m
IHNlbGVjdGlvbiA9IHNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgIG1fcmFuZ2VkU2VsZWN0
aW9uSW5pdGlhbEV4dGVudCA9IFZpc2libGVTZWxlY3Rpb24oc2VsZWN0aW9uLmVuZCgpLCBzZWxl
Y3Rpb24uYWZmaW5pdHkoKSk7CiB9CiAKIFZpc2libGVTZWxlY3Rpb24gRnJhbWU6OnJhbmdlZFNl
bGVjdGlvbkluaXRpYWxFeHRlbnQoKSBjb25zdApAQCAtNzg3LDcgKzc4Niw3IEBAIE5TQXJyYXkg
KkZyYW1lOjppbnRlcnByZXRhdGlvbnNGb3JDdXJyZW4KICAgICBpZiAoIWRvY3VtZW50KCkpCiAg
ICAgICAgIHJldHVybiBuaWw7CiAKLSAgICBFbGVtZW50KiByb290ID0gc2VsZWN0aW9uKCkuc2Vs
ZWN0aW9uVHlwZSgpID09IFZpc2libGVTZWxlY3Rpb246Ok5vU2VsZWN0aW9uID8gZG9jdW1lbnQo
KS0+Ym9keSgpIDogc2VsZWN0aW9uKCkucm9vdEVkaXRhYmxlRWxlbWVudCgpOworICAgIEVsZW1l
bnQqIHJvb3QgPSBzZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb25UeXBlKCkgPT0gVmlz
aWJsZVNlbGVjdGlvbjo6Tm9TZWxlY3Rpb24gPyBkb2N1bWVudCgpLT5ib2R5KCkgOiBzZWxlY3Rp
b24oKS5zZWxlY3Rpb24oKS5yb290RWRpdGFibGVFbGVtZW50KCk7CiAgICAgdW5zaWduZWQgcm9v
dENoaWxkQ291bnQgPSByb290LT5jaGlsZE5vZGVDb3VudCgpOwogICAgIFJlZlB0cjxSYW5nZT4g
cmFuZ2VPZlJvb3RDb250ZW50cyA9IFJhbmdlOjpjcmVhdGUoKmRvY3VtZW50KCksIGNyZWF0ZUxl
Z2FjeUVkaXRpbmdQb3NpdGlvbihyb290LCAwKSwgY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9u
KHJvb3QsIHJvb3RDaGlsZENvdW50KSk7CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJCbG9jay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcmVuZGVyaW5n
L1JlbmRlckJsb2NrLmNwcAkocmV2aXNpb24gMTYzMTI4KQorKysgU291cmNlL1dlYkNvcmUvcmVu
ZGVyaW5nL1JlbmRlckJsb2NrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQ0NCw3ICsyNDQ0LDcg
QEAgdm9pZCBSZW5kZXJCbG9jazo6cGFpbnRDYXJldChQYWludEluZm8mIAogICAgIGJvb2wgaXND
b250ZW50RWRpdGFibGU7CiAgICAgaWYgKHR5cGUgPT0gQ3Vyc29yQ2FyZXQpIHsKICAgICAgICAg
Y2FyZXRQYWludGVyID0gZnJhbWUoKS5zZWxlY3Rpb24oKS5jYXJldFJlbmRlcmVyKCk7Ci0gICAg
ICAgIGlzQ29udGVudEVkaXRhYmxlID0gZnJhbWUoKS5zZWxlY3Rpb24oKS5oYXNFZGl0YWJsZVN0
eWxlKCk7CisgICAgICAgIGlzQ29udGVudEVkaXRhYmxlID0gZnJhbWUoKS5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKS5pc0NvbnRlbnRFZGl0YWJsZSgpOwogICAgIH0gZWxzZSB7CiAgICAgICAgIGNh
cmV0UGFpbnRlciA9IGZyYW1lKCkucGFnZSgpLT5kcmFnQ2FyZXRDb250cm9sbGVyKCkuY2FyZXRS
ZW5kZXJlcigpOwogICAgICAgICBpc0NvbnRlbnRFZGl0YWJsZSA9IGZyYW1lKCkucGFnZSgpLT5k
cmFnQ2FyZXRDb250cm9sbGVyKCkuaXNDb250ZW50RWRpdGFibGUoKTsKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJ
KHJldmlzaW9uIDE2MzE2MykKKysrIFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwkod29ya2luZyBj
b3B5KQpAQCAtMSwzICsxLDI0IEBACisKKzIwMTQtMDEtMzAgIFJ5b3N1a2UgTml3YSAgPHJuaXdh
QHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmVtb3ZlIGlubGluZSBtZW1iZXIgZnVuY3Rpb25zIG9m
IEZyYW1lU2VsZWN0aW9uIHRoYXQgYWNjZXNzIG1fc2VsZWN0aW9uCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjc5ODYKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2ViQ29yZVN1cHBv
cnQvZ3RrL1dlYkVkaXRvckNsaWVudEd0ay5jcHA6CisgICAgICAgIChXZWJLaXQ6OmNvbGxhcHNl
U2VsZWN0aW9uKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmVkaXRvclN0YXRlKToKKyAgICAgICAgKFdlYktpdDo6
V2ViUGFnZTo6Y29uZmlybUNvbXBvc2l0aW9uKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6
c2V0Q29tcG9zaXRpb24pOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFn
ZUlPUy5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6c2V0Q29tcG9zaXRpb24pOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQYWdlOjp1cGRhdGVTZWxlY3Rpb25XaXRoVG91Y2hlcyk6CisgICAg
ICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tOgorICAgICAgICAoV2Vi
S2l0OjpXZWJQYWdlOjpzZXRDb21wb3NpdGlvbik6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6
OmdldEF0dHJpYnV0ZWRTdWJzdHJpbmdGcm9tUmFuZ2UpOgorCiAyMDE0LTAxLTMwICBTaW1vbiBG
cmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAgIEZpeCBpT1MgV0syIGJ1
aWxkIGFmdGVyIHIxNjMxNTYuCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNv
cmVTdXBwb3J0L2d0ay9XZWJFZGl0b3JDbGllbnRHdGsuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvZ3RrL1dlYkVkaXRvckNsaWVudEd0
ay5jcHAJKHJldmlzaW9uIDE2MzEyOCkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
Q29yZVN1cHBvcnQvZ3RrL1dlYkVkaXRvckNsaWVudEd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTE2Niw3ICsxNjYsOCBAQCBzdGF0aWMgdm9pZCBjb2xsYXBzZVNlbGVjdGlvbihHdGtDbGlwYm9h
CiAKICAgICAvLyBDb2xsYXBzZSB0aGUgc2VsZWN0aW9uIHdpdGhvdXQgY2xlYXJpbmcgaXQuCiAg
ICAgQVNTRVJUKGZyYW1lKTsKLSAgICBmcmFtZS0+c2VsZWN0aW9uKCkuc2V0QmFzZShmcmFtZS0+
c2VsZWN0aW9uKCkuZXh0ZW50KCksIGZyYW1lLT5zZWxlY3Rpb24oKS5hZmZpbml0eSgpKTsKKyAg
ICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBmcmFtZS5zZWxlY3Rpb24oKTsK
KyAgICBmcmFtZS0+c2VsZWN0aW9uKCkuc2V0QmFzZShzZWxlY3Rpb24uZXh0ZW50KCksIHNlbGVj
dGlvbi5hZmZpbml0eSgpKTsKIH0KICNlbmRpZgogCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCShyZXZpc2lvbiAxNjMxMjgpCisrKyBTb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTY0MywxNiArNjQzLDE3IEBAIEVkaXRvclN0YXRlIFdlYlBhZ2U6OmVkaXRvclN0YXRlKCkg
Y29uc3QKICAgICAgICAgfQogICAgIH0KIAotICAgIHJlc3VsdC5zZWxlY3Rpb25Jc05vbmUgPSBm
cmFtZS5zZWxlY3Rpb24oKS5pc05vbmUoKTsKLSAgICByZXN1bHQuc2VsZWN0aW9uSXNSYW5nZSA9
IGZyYW1lLnNlbGVjdGlvbigpLmlzUmFuZ2UoKTsKLSAgICByZXN1bHQuaXNDb250ZW50RWRpdGFi
bGUgPSBmcmFtZS5zZWxlY3Rpb24oKS5pc0NvbnRlbnRFZGl0YWJsZSgpOwotICAgIHJlc3VsdC5p
c0NvbnRlbnRSaWNobHlFZGl0YWJsZSA9IGZyYW1lLnNlbGVjdGlvbigpLmlzQ29udGVudFJpY2hs
eUVkaXRhYmxlKCk7Ci0gICAgcmVzdWx0LmlzSW5QYXNzd29yZEZpZWxkID0gZnJhbWUuc2VsZWN0
aW9uKCkuaXNJblBhc3N3b3JkRmllbGQoKTsKKyAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBz
ZWxlY3Rpb24gPSBmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKworICAgIHJlc3VsdC5z
ZWxlY3Rpb25Jc05vbmUgPSBzZWxlY3Rpb24uaXNOb25lKCk7CisgICAgcmVzdWx0LnNlbGVjdGlv
bklzUmFuZ2UgPSBzZWxlY3Rpb24uaXNSYW5nZSgpOworICAgIHJlc3VsdC5pc0NvbnRlbnRFZGl0
YWJsZSA9IHNlbGVjdGlvbi5pc0NvbnRlbnRFZGl0YWJsZSgpOworICAgIHJlc3VsdC5pc0NvbnRl
bnRSaWNobHlFZGl0YWJsZSA9IHNlbGVjdGlvbi5pc0NvbnRlbnRSaWNobHlFZGl0YWJsZSgpOwor
ICAgIHJlc3VsdC5pc0luUGFzc3dvcmRGaWVsZCA9IHNlbGVjdGlvbi5pc0luUGFzc3dvcmRGaWVs
ZCgpOwogICAgIHJlc3VsdC5oYXNDb21wb3NpdGlvbiA9IGZyYW1lLmVkaXRvcigpLmhhc0NvbXBv
c2l0aW9uKCk7CiAgICAgcmVzdWx0LnNob3VsZElnbm9yZUNvbXBvc2l0aW9uU2VsZWN0aW9uQ2hh
bmdlID0gZnJhbWUuZWRpdG9yKCkuaWdub3JlQ29tcG9zaXRpb25TZWxlY3Rpb25DaGFuZ2UoKTsK
IAogI2lmIFBMQVRGT1JNKElPUykKLSAgICBGcmFtZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0gZnJh
bWUuc2VsZWN0aW9uKCk7CiAgICAgaWYgKGZyYW1lLmVkaXRvcigpLmhhc0NvbXBvc2l0aW9uKCkp
IHsKICAgICAgICAgUmVmUHRyPFJhbmdlPiBjb21wb3NpdGlvblJhbmdlID0gZnJhbWUuZWRpdG9y
KCkuY29tcG9zaXRpb25SYW5nZSgpOwogICAgICAgICBWZWN0b3I8V2ViQ29yZTo6U2VsZWN0aW9u
UmVjdD4gY29tcG9zaXRpb25SZWN0czsKQEAgLTY2Niw3ICs2NjcsNyBAQCBFZGl0b3JTdGF0ZSBX
ZWJQYWdlOjplZGl0b3JTdGF0ZSgpIGNvbnN0CiAgICAgICAgIHJlc3VsdC5tYXJrZWRUZXh0ID0g
cGxhaW5UZXh0KGNvbXBvc2l0aW9uUmFuZ2UuZ2V0KCkpOwogICAgIH0KICAgICBpZiAoc2VsZWN0
aW9uLmlzQ2FyZXQoKSkgewotICAgICAgICByZXN1bHQuY2FyZXRSZWN0QXRTdGFydCA9IHNlbGVj
dGlvbi5hYnNvbHV0ZUNhcmV0Qm91bmRzKCk7CisgICAgICAgIHJlc3VsdC5jYXJldFJlY3RBdFN0
YXJ0ID0gZnJhbWUuc2VsZWN0aW9uKCkuYWJzb2x1dGVDYXJldEJvdW5kcygpOwogICAgICAgICBy
ZXN1bHQuY2FyZXRSZWN0QXRFbmQgPSByZXN1bHQuY2FyZXRSZWN0QXRTdGFydDsKICAgICAgICAg
aWYgKG1fc2hvdWxkUmV0dXJuV29yZEF0U2VsZWN0aW9uKQogICAgICAgICAgICAgcmVzdWx0Lndv
cmRBdFNlbGVjdGlvbiA9IHBsYWluVGV4dCh3b3JkUmFuZ2VGcm9tUG9zaXRpb24oc2VsZWN0aW9u
LnN0YXJ0KCkpLmdldCgpKTsKQEAgLTM4MTIsNyArMzgxMyw3IEBAIHZvaWQgV2ViUGFnZTo6Y29u
ZmlybUNvbXBvc2l0aW9uKGNvbnN0IFMKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIEVs
ZW1lbnQqIHNjb3BlID0gdGFyZ2V0RnJhbWUtPnNlbGVjdGlvbigpLnJvb3RFZGl0YWJsZUVsZW1l
bnQoKTsKKyAgICBFbGVtZW50KiBzY29wZSA9IHRhcmdldEZyYW1lLT5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKS5yb290RWRpdGFibGVFbGVtZW50KCk7CiAgICAgUmVmUHRyPFJhbmdlPiBzZWxlY3Rp
b25SYW5nZSA9IFRleHRJdGVyYXRvcjo6cmFuZ2VGcm9tTG9jYXRpb25BbmRMZW5ndGgoc2NvcGUs
IHNlbGVjdGlvblN0YXJ0LCBzZWxlY3Rpb25MZW5ndGgpOwogICAgIEFTU0VSVF9XSVRIX01FU1NB
R0Uoc2VsZWN0aW9uUmFuZ2UsICJJbnZhbGlkIHNlbGVjdGlvbjogWyVsbGQ6JWxsZF0gaW4gdGV4
dCBvZiBsZW5ndGggJWQiLCBzdGF0aWNfY2FzdDxsb25nIGxvbmc+KHNlbGVjdGlvblN0YXJ0KSwg
c3RhdGljX2Nhc3Q8bG9uZyBsb25nPihzZWxlY3Rpb25MZW5ndGgpLCBzY29wZS0+aW5uZXJUZXh0
KCkubGVuZ3RoKCkpOwogCkBAIC0zODI2LDcgKzM4MjcsNyBAQCB2b2lkIFdlYlBhZ2U6OmNvbmZp
cm1Db21wb3NpdGlvbihjb25zdCBTCiB2b2lkIFdlYlBhZ2U6OnNldENvbXBvc2l0aW9uKGNvbnN0
IFN0cmluZyYgdGV4dCwgVmVjdG9yPENvbXBvc2l0aW9uVW5kZXJsaW5lPiB1bmRlcmxpbmVzLCB1
aW50NjRfdCBzZWxlY3Rpb25TdGFydCwgdWludDY0X3Qgc2VsZWN0aW9uRW5kLCB1aW50NjRfdCBy
ZXBsYWNlbWVudFN0YXJ0LCB1aW50NjRfdCByZXBsYWNlbWVudExlbmd0aCkKIHsKICAgICBGcmFt
ZSogdGFyZ2V0RnJhbWUgPSB0YXJnZXRGcmFtZUZvckVkaXRpbmcodGhpcyk7Ci0gICAgaWYgKCF0
YXJnZXRGcmFtZSB8fCAhdGFyZ2V0RnJhbWUtPnNlbGVjdGlvbigpLmlzQ29udGVudEVkaXRhYmxl
KCkpIHsKKyAgICBpZiAoIXRhcmdldEZyYW1lIHx8ICF0YXJnZXRGcmFtZS0+c2VsZWN0aW9uKCku
c2VsZWN0aW9uKCkuaXNDb250ZW50RWRpdGFibGUoKSkgewogICAgICAgICBzZW5kKE1lc3NhZ2Vz
OjpXZWJQYWdlUHJveHk6OkVkaXRvclN0YXRlQ2hhbmdlZChlZGl0b3JTdGF0ZSgpKSk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9CkBAIC0zODM1LDcgKzM4MzYsNyBAQCB2b2lkIFdlYlBhZ2U6OnNl
dENvbXBvc2l0aW9uKGNvbnN0IFN0cmluCiAgICAgICAgIC8vIFRoZSBsYXlvdXQgbmVlZHMgdG8g
YmUgdXB0b2RhdGUgYmVmb3JlIHNldHRpbmcgYSBzZWxlY3Rpb24KICAgICAgICAgdGFyZ2V0RnJh
bWUtPmRvY3VtZW50KCktPnVwZGF0ZUxheW91dCgpOwogCi0gICAgICAgIEVsZW1lbnQqIHNjb3Bl
ID0gdGFyZ2V0RnJhbWUtPnNlbGVjdGlvbigpLnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsKKyAgICAg
ICAgRWxlbWVudCogc2NvcGUgPSB0YXJnZXRGcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCku
cm9vdEVkaXRhYmxlRWxlbWVudCgpOwogICAgICAgICBSZWZQdHI8UmFuZ2U+IHJlcGxhY2VtZW50
UmFuZ2UgPSBUZXh0SXRlcmF0b3I6OnJhbmdlRnJvbUxvY2F0aW9uQW5kTGVuZ3RoKHNjb3BlLCBy
ZXBsYWNlbWVudFN0YXJ0LCByZXBsYWNlbWVudExlbmd0aCk7CiAgICAgICAgIHRhcmdldEZyYW1l
LT5lZGl0b3IoKS5zZXRJZ25vcmVDb21wb3NpdGlvblNlbGVjdGlvbkNoYW5nZSh0cnVlKTsKICAg
ICAgICAgdGFyZ2V0RnJhbWUtPnNlbGVjdGlvbigpLnNldFNlbGVjdGlvbihWaXNpYmxlU2VsZWN0
aW9uKHJlcGxhY2VtZW50UmFuZ2UuZ2V0KCksIFNFTF9ERUZBVUxUX0FGRklOSVRZKSk7CkluZGV4
OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdl
SU9TLm1tCShyZXZpc2lvbiAxNjMxMjgpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvaW9zL1dlYlBhZ2VJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTk2LDcgKzk2LDcgQEAg
dm9pZCBXZWJQYWdlOjpzZXRDb21wb3NpdGlvbihjb25zdCBTdHJpbgogewogICAgIEZyYW1lJiBm
cmFtZSA9IG1fcGFnZS0+Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCk7CiAK
LSAgICBpZiAoZnJhbWUuc2VsZWN0aW9uKCkuaXNDb250ZW50RWRpdGFibGUoKSkKKyAgICBpZiAo
ZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNDb250ZW50RWRpdGFibGUoKSkKICAgICAg
ICAgZnJhbWUuZWRpdG9yKCkuc2V0Q29tcG9zaXRpb24odGV4dCwgdW5kZXJsaW5lcywgc2VsZWN0
aW9uU3RhcnQsIHNlbGVjdGlvbkVuZCk7CiB9CiAKQEAgLTU5MCw3ICs1OTAsNyBAQCB2b2lkIFdl
YlBhZ2U6OnVwZGF0ZVNlbGVjdGlvbldpdGhUb3VjaGVzCiAgICAgICAgICAgICBicmVhazsKICAg
ICAgICAgCiAgICAgICAgIGNhc2UgV0tTZWxlY3Rpb25Ub3VjaEVuZGVkOgotICAgICAgICAgICAg
aWYgKGZyYW1lLnNlbGVjdGlvbigpLmlzQ29udGVudEVkaXRhYmxlKCkpIHsKKyAgICAgICAgICAg
IGlmIChmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0NvbnRlbnRFZGl0YWJsZSgpKSB7
CiAgICAgICAgICAgICAgICAgcmVzdWx0ID0gY2xvc2VzdFdvcmRCb3VuZGFyeUZvclBvc2l0aW9u
KHBvc2l0aW9uKTsKICAgICAgICAgICAgICAgICBpZiAocmVzdWx0LmlzTm90TnVsbCgpKQogICAg
ICAgICAgICAgICAgICAgICByYW5nZSA9IFJhbmdlOjpjcmVhdGUoKmZyYW1lLmRvY3VtZW50KCks
IHJlc3VsdCwgcmVzdWx0KTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9tYWMvV2ViUGFnZU1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0JKHJldmlzaW9uIDE2MzEyOCkKKysrIFNvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvV2ViUGFnZU1hYy5tbQkod29ya2luZyBj
b3B5KQpAQCAtMjYwLDcgKzI2MCw3IEBAIHZvaWQgV2ViUGFnZTo6c2V0Q29tcG9zaXRpb24oY29u
c3QgU3RyaW4KIHsKICAgICBGcmFtZSYgZnJhbWUgPSBtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigp
LmZvY3VzZWRPck1haW5GcmFtZSgpOwogCi0gICAgaWYgKGZyYW1lLnNlbGVjdGlvbigpLmlzQ29u
dGVudEVkaXRhYmxlKCkpIHsKKyAgICBpZiAoZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCku
aXNDb250ZW50RWRpdGFibGUoKSkgewogICAgICAgICBSZWZQdHI8UmFuZ2U+IHJlcGxhY2VtZW50
UmFuZ2U7CiAgICAgICAgIGlmIChyZXBsYWNlbWVudFJhbmdlU3RhcnQgIT0gTlNOb3RGb3VuZCkg
ewogICAgICAgICAgICAgcmVwbGFjZW1lbnRSYW5nZSA9IGNvbnZlcnRUb1JhbmdlKCZmcmFtZSwg
TlNNYWtlUmFuZ2UocmVwbGFjZW1lbnRSYW5nZVN0YXJ0LCByZXBsYWNlbWVudFJhbmdlRW5kIC0g
cmVwbGFjZW1lbnRSYW5nZVN0YXJ0KSk7CkBAIC0zNjAsNyArMzYwLDEwIEBAIHZvaWQgV2ViUGFn
ZTo6Z2V0QXR0cmlidXRlZFN1YnN0cmluZ0Zyb20KIHsKICAgICBGcmFtZSYgZnJhbWUgPSBtX3Bh
Z2UtPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpOwogCi0gICAgaWYgKGZy
YW1lLnNlbGVjdGlvbigpLmlzTm9uZSgpIHx8ICFmcmFtZS5zZWxlY3Rpb24oKS5pc0NvbnRlbnRF
ZGl0YWJsZSgpIHx8IGZyYW1lLnNlbGVjdGlvbigpLmlzSW5QYXNzd29yZEZpZWxkKCkpCisgICAg
aWYgKGZyYW1lLnNlbGVjdGlvbigpLmlzTm9uZSgpKQorICAgICAgICByZXR1cm47CisgICAgY29u
c3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0gZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCk7CisgICAgaWYgKCFzZWxlY3Rpb24uaXNDb250ZW50RWRpdGFibGUoKSB8fCBzZWxlY3Rp
b24uaXNJblBhc3N3b3JkRmllbGQoKSkKICAgICAgICAgcmV0dXJuOwogCiAgICAgTlNSYW5nZSBu
c1JhbmdlID0gTlNNYWtlUmFuZ2UobG9jYXRpb24sIGxlbmd0aCAtIGxvY2F0aW9uKTsKSW5kZXg6
IFNvdXJjZS9XZWJLaXQvZWZsL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L2VmbC9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2MzE2MykKKysrIFNvdXJjZS9XZWJLaXQvZWZsL0No
YW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDE0LTAxLTMwICBSeW9z
dWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIFJlbW92ZSBpbmxpbmUgbWVt
YmVyIGZ1bmN0aW9ucyBvZiBGcmFtZVNlbGVjdGlvbiB0aGF0IGFjY2VzcyBtX3NlbGVjdGlvbgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI3OTg2CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBld2svZXdr
X2ZyYW1lLmNwcDoKKyAgICAgICAgKGV3a19mcmFtZV90ZXh0X3NlbGVjdGlvbl90eXBlX2dldCk6
CisKIDIwMTQtMDEtMzAgIEFuZHJlaSBCdWN1ciAgPGFidWN1ckBhZG9iZS5jb20+CiAKICAgICAg
ICAgUmVtb3ZlIHRoZSBBQ0NFTEVSQVRFRF9DT01QT1NJVElORyBmbGFnCkluZGV4OiBTb3VyY2Uv
V2ViS2l0L2VmbC9ld2svZXdrX2ZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
L2VmbC9ld2svZXdrX2ZyYW1lLmNwcAkocmV2aXNpb24gMTYzMTI4KQorKysgU291cmNlL1dlYktp
dC9lZmwvZXdrL2V3a19mcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwNzMsOSArMTA3Myw5
IEBAIEV3a19UZXh0X1NlbGVjdGlvbl9UeXBlIGV3a19mcmFtZV90ZXh0X3MKICAgICBFV0tfRlJB
TUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc21hcnREYXRhLCBFV0tfVEVYVF9TRUxFQ1RJ
T05fTk9ORSk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVMTF9SRVRVUk5fVkFMKHNtYXJ0RGF0YS0+
ZnJhbWUsIEVXS19URVhUX1NFTEVDVElPTl9OT05FKTsKIAotICAgIFdlYkNvcmU6OkZyYW1lU2Vs
ZWN0aW9uJiBjb250cm9sbGVyID0gc21hcnREYXRhLT5mcmFtZS0+c2VsZWN0aW9uKCk7CisgICAg
V2ViQ29yZTo6RnJhbWVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9IHNtYXJ0RGF0YS0+ZnJhbWUtPnNl
bGVjdGlvbigpLnNlbGVjdGlvbigpOwogCi0gICAgc3dpdGNoIChjb250cm9sbGVyLnNlbGVjdGlv
blR5cGUoKSkgeworICAgIHN3aXRjaCAoc2VsZWN0aW9uLnNlbGVjdGlvblR5cGUoKSkgewogICAg
IGNhc2UgV2ViQ29yZTo6VmlzaWJsZVNlbGVjdGlvbjo6Tm9TZWxlY3Rpb246CiAgICAgICAgIHJl
dHVybiBFV0tfVEVYVF9TRUxFQ1RJT05fTk9ORTsKICAgICBjYXNlIFdlYkNvcmU6OlZpc2libGVT
ZWxlY3Rpb246OkNhcmV0U2VsZWN0aW9uOgpJbmRleDogU291cmNlL1dlYktpdC9ndGsvQ2hhbmdl
TG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZwkocmV2aXNpb24g
MTYzMTYzKQorKysgU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTMgQEAKKzIwMTQtMDEtMzAgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5v
cmc+CisKKyAgICAgICAgUmVtb3ZlIGlubGluZSBtZW1iZXIgZnVuY3Rpb25zIG9mIEZyYW1lU2Vs
ZWN0aW9uIHRoYXQgYWNjZXNzIG1fc2VsZWN0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjc5ODYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudEd0ay5j
cHA6CisgICAgICAgIChXZWJLaXQ6OmNvbGxhcHNlU2VsZWN0aW9uKToKKwogMjAxNC0wMS0zMCAg
QW5kcmVpIEJ1Y3VyICA8YWJ1Y3VyQGFkb2JlLmNvbT4KIAogICAgICAgICBSZW1vdmUgdGhlIEFD
Q0VMRVJBVEVEX0NPTVBPU0lUSU5HIGZsYWcKSW5kZXg6IFNvdXJjZS9XZWJLaXQvZ3RrL1dlYkNv
cmVTdXBwb3J0L0VkaXRvckNsaWVudEd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktp
dC9ndGsvV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50R3RrLmNwcAkocmV2aXNpb24gMTYzMTI4
KQorKysgU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50R3RrLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMjE2LDcgKzIxNiw4IEBAIHN0YXRpYyB2b2lkIGNvbGxhcHNl
U2VsZWN0aW9uKEd0a0NsaXBib2EKICAgICBGcmFtZSYgZnJhbWUgPSBjb3JlUGFnZS0+Zm9jdXND
b250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCk7CiAKICAgICAvLyBDb2xsYXBzZSB0aGUg
c2VsZWN0aW9uIHdpdGhvdXQgY2xlYXJpbmcgaXQKLSAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRC
YXNlKGZyYW1lLnNlbGVjdGlvbigpLmV4dGVudCgpLCBmcmFtZS5zZWxlY3Rpb24oKS5hZmZpbml0
eSgpKTsKKyAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBmcmFtZS5zZWxl
Y3Rpb24oKTsKKyAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRCYXNlKHNlbGVjdGlvbi5leHRlbnQo
KSwgc2VsZWN0aW9uLmFmZmluaXR5KCkpOwogfQogCiAjaWYgUExBVEZPUk0oWDExKQpJbmRleDog
U291cmNlL1dlYktpdC9pb3MvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQv
aW9zL0NoYW5nZUxvZwkocmV2aXNpb24gMTYzMTYzKQorKysgU291cmNlL1dlYktpdC9pb3MvQ2hh
bmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTQtMDEtMzAgIFJ5b3N1
a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmVtb3ZlIGlubGluZSBtZW1i
ZXIgZnVuY3Rpb25zIG9mIEZyYW1lU2VsZWN0aW9uIHRoYXQgYWNjZXNzIG1fc2VsZWN0aW9uCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjc5ODYKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYkNvcmVT
dXBwb3J0L1dlYkZyYW1lSU9TLm1tOgorICAgICAgICAoLVtXZWJGcmFtZSBzZXRCYXNlV3JpdGlu
Z0RpcmVjdGlvbjpdKToKKwogMjAxNC0wMS0zMCAgQW5kcmVpIEJ1Y3VyICA8YWJ1Y3VyQGFkb2Jl
LmNvbT4KIAogICAgICAgICBSZW1vdmUgdGhlIEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HIGZsYWcK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvaW9zL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lSU9TLm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvaW9zL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lSU9T
Lm1tCShyZXZpc2lvbiAxNjMxMjgpCisrKyBTb3VyY2UvV2ViS2l0L2lvcy9XZWJDb3JlU3VwcG9y
dC9XZWJGcmFtZUlPUy5tbQkod29ya2luZyBjb3B5KQpAQCAtNTc1LDcgKzU3NSw3IEBAIC0gKHZv
aWQpc2V0QmFzZVdyaXRpbmdEaXJlY3Rpb246KFdLV3JpdGkKICAgICBXS1dyaXRpbmdEaXJlY3Rp
b24gb3JpZ2luYWxEaXJlY3Rpb24gPSBbc2VsZiBzZWxlY3Rpb25CYXNlV3JpdGluZ0RpcmVjdGlv
bl07CiAKICAgICBGcmFtZSAqZnJhbWUgPSBbc2VsZiBjb3JlRnJhbWVdOwotICAgIGlmICghZnJh
bWUtPnNlbGVjdGlvbigpLmlzQ29udGVudEVkaXRhYmxlKCkpCisgICAgaWYgKCFmcmFtZS0+c2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNDb250ZW50RWRpdGFibGUoKSkKICAgICAgICAgcmV0dXJu
OwogICAgIAogICAgIFdyaXRpbmdEaXJlY3Rpb24gd2NEaXJlY3Rpb24gPSBMZWZ0VG9SaWdodFdy
aXRpbmdEaXJlY3Rpb247CkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNjMxNjMpCisr
KyBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwy
OCBAQAorMjAxNC0wMS0zMCAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KKworICAg
ICAgICBSZW1vdmUgaW5saW5lIG1lbWJlciBmdW5jdGlvbnMgb2YgRnJhbWVTZWxlY3Rpb24gdGhh
dCBhY2Nlc3MgbV9zZWxlY3Rpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTEyNzk4NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgICogV2ViVmlldy9XZWJGcmFtZS5tbToKKyAgICAgICAgKC1bV2ViRnJhbWUg
aGFzRWRpdGFibGVTZWxlY3Rpb25dKToKKyAgICAgICAgKC1bV2ViRnJhbWUgc2VsZWN0aW9uQWZm
aW5pdHldKToKKyAgICAgICAgKC1bV2ViRnJhbWUgZ2V0RGljdGF0aW9uUmVzdWx0UmFuZ2VzOmFu
ZE1ldGFkYXRhczpdKToKKyAgICAgICAgKC1bV2ViRnJhbWUgZm9jdXNlZE5vZGVIYXNDb250ZW50
XSk6CisgICAgICAgICogV2ViVmlldy9XZWJIVE1MVmlldy5tbToKKyAgICAgICAgKC1bV2ViSFRN
TFZpZXcgcmVhZFNlbGVjdGlvbkZyb21QYXN0ZWJvYXJkOl0pOgorICAgICAgICAoLVtXZWJIVE1M
VmlldyBfaGFzU2VsZWN0aW9uXSk6CisgICAgICAgICgtW1dlYkhUTUxWaWV3IF9oYXNTZWxlY3Rp
b25Pckluc2VydGlvblBvaW50XSk6CisgICAgICAgICgtW1dlYkhUTUxWaWV3IF9oYXNJbnNlcnRp
b25Qb2ludF0pOgorICAgICAgICAoLVtXZWJIVE1MVmlldyBfaXNFZGl0YWJsZV0pOgorICAgICAg
ICAoLVtXZWJIVE1MVmlldyB2YWxpZGF0ZVVzZXJJbnRlcmZhY2VJdGVtV2l0aG91dERlbGVnYXRl
Ol0pOgorICAgICAgICAoLVtXZWJIVE1MVmlldyBtYWludGFpbnNJbmFjdGl2ZVNlbGVjdGlvbl0p
OgorICAgICAgICAoaXNUZXh0SW5wdXQpOgorICAgICAgICAoaXNJblBhc3N3b3JkRmllbGQpOgor
ICAgICAgICAqIFdlYlZpZXcvV2ViVmlldy5tbToKKyAgICAgICAgKC1bV2ViVmlldyBzZWxlY3Rp
b25BZmZpbml0eV0pOgorCiAyMDE0LTAxLTMwICBEYXZpZCBLaWx6ZXIgIDxkZGtpbHplckBhcHBs
ZS5jb20+CiAKICAgICAgICAgQWRkIHNlY3VyaXR5LWNoZWNrZWQgY2FzdCBmb3IgV2ViQ29yZTo6
Q2FjaGVkSW1hZ2UKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQkocmV2
aXNpb24gMTYzMTI4KQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQko
d29ya2luZyBjb3B5KQpAQCAtMTM0OCw3ICsxMzQ4LDcgQEAgLSAodm9pZClyZXNldFNlbGVjdGlv
bgogLSAoQk9PTCloYXNFZGl0YWJsZVNlbGVjdGlvbgogewogICAgIFdlYkNvcmU6OkZyYW1lICpm
cmFtZSA9IGNvcmUoc2VsZik7Ci0gICAgcmV0dXJuIGZyYW1lLT5zZWxlY3Rpb24oKS5pc0NvbnRl
bnRFZGl0YWJsZSgpOworICAgIHJldHVybiBmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCku
aXNDb250ZW50RWRpdGFibGUoKTsKIH0KIAogLSAoaW50KXByZWZlcnJlZEhlaWdodApAQCAtMTQ3
Myw3ICsxNDczLDcgQEAgLSAodm9pZClzZXRTZWxlY3RlZERPTVJhbmdlOihET01SYW5nZSAqKQog
LSAoTlNTZWxlY3Rpb25BZmZpbml0eSlzZWxlY3Rpb25BZmZpbml0eQogewogICAgIFdlYkNvcmU6
OkZyYW1lICpmcmFtZSA9IGNvcmUoc2VsZik7Ci0gICAgcmV0dXJuIChOU1NlbGVjdGlvbkFmZmlu
aXR5KShmcmFtZS0+c2VsZWN0aW9uKCkuYWZmaW5pdHkoKSk7CisgICAgcmV0dXJuIChOU1NlbGVj
dGlvbkFmZmluaXR5KShmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuYWZmaW5pdHkoKSk7
CiB9CiAKIC0gKHZvaWQpZXhwYW5kU2VsZWN0aW9uVG9FbGVtZW50Q29udGFpbmluZ0NhcmV0U2Vs
ZWN0aW9uCkBAIC0xNzE0LDggKzE3MTQsOSBAQCAtICh2b2lkKWdldERpY3RhdGlvblJlc3VsdFJh
bmdlczooTlNBcnJhCiAgICAgCiAgICAgRnJhbWUgKmZyYW1lID0gY29yZShzZWxmKTsKICAgICBE
b2N1bWVudCAqZG9jdW1lbnQgPSBmcmFtZS0+ZG9jdW1lbnQoKTsKLSAgICAKLSAgICBFbGVtZW50
ICpyb290ID0gZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvblR5cGUoKSA9PSBWaXNpYmxlU2Vs
ZWN0aW9uOjpOb1NlbGVjdGlvbiA/IGZyYW1lLT5kb2N1bWVudCgpLT5ib2R5KCkgOiBmcmFtZS0+
c2VsZWN0aW9uKCkucm9vdEVkaXRhYmxlRWxlbWVudCgpOworCisgICAgY29uc3QgVmlzaWJsZVNl
bGVjdGlvbiYgc2VsZWN0aW9uID0gZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAg
IEVsZW1lbnQgKnJvb3QgPSBzZWxlY3Rpb24uc2VsZWN0aW9uVHlwZSgpID09IFZpc2libGVTZWxl
Y3Rpb246Ok5vU2VsZWN0aW9uID8gZnJhbWUtPmRvY3VtZW50KCktPmJvZHkoKSA6IHNlbGVjdGlv
bi5yb290RWRpdGFibGVFbGVtZW50KCk7CiAgICAgCiAgICAgRE9NUmFuZ2UgKnByZXZpb3VzRE9N
UmFuZ2UgPSBuaWw7CiAgICAgaWQgcHJldmlvdXNNZXRhZGF0YSA9IG5pbDsKQEAgLTIyNzEsMTEg
KzIyNzIsMTIgQEAgLSAoQk9PTClmb2N1c2VkTm9kZUhhc0NvbnRlbnQKICAgICBGcmFtZSogY29y
ZUZyYW1lID0gX3ByaXZhdGUtPmNvcmVGcmFtZTsKICAgIAogICAgIEVsZW1lbnQqIHJvb3Q7Ci0g
ICAgaWYgKGNvcmVGcmFtZS0+c2VsZWN0aW9uKCkuaXNOb25lKCkgfHwgIWNvcmVGcmFtZS0+c2Vs
ZWN0aW9uKCkuaXNDb250ZW50RWRpdGFibGUoKSkKKyAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9u
JiBzZWxlY3Rpb24gPSBjb3JlRnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgIGlm
IChzZWxlY3Rpb24uaXNOb25lKCkgfHwgIXNlbGVjdGlvbi5pc0NvbnRlbnRFZGl0YWJsZSgpKQog
ICAgICAgICByb290ID0gY29yZUZyYW1lLT5kb2N1bWVudCgpLT5ib2R5KCk7CiAgICAgZWxzZSB7
CiAgICAgICAgIC8vIENhbid0IHVzZSB0aGUgZm9jdXNlZE5vZGUgaGVyZSBiZWNhdXNlIHdlIHdh
bnQgdGhlIHJvb3Qgb2YgdGhlIHNoYWRvdyB0cmVlIGZvciBmb3JtIGVsZW1lbnRzLgotICAgICAg
ICByb290ID0gY29yZUZyYW1lLT5zZWxlY3Rpb24oKS5yb290RWRpdGFibGVFbGVtZW50KCk7Cisg
ICAgICAgIHJvb3QgPSBzZWxlY3Rpb24ucm9vdEVkaXRhYmxlRWxlbWVudCgpOwogICAgIH0KICAg
ICAvLyBFYXJseSByZXR1cm4gdG8gYXZvaWQgdGhlIGV4cGVuc2Ugb2YgY3JlYXRpbmcgVmlzaWJs
ZVBvc2l0aW9ucy4KICAgICAvLyBGSVhNRTogV2UgZmFpbCB0byBjb21wdXRlIGEgcm9vdCBmb3Ig
U1ZHLCB3ZSBoYXZlIGEgbnVsbCBjaGVjayBoZXJlIHNvIHRoYXQgd2UgZG9uJ3QgY3Jhc2guCklu
ZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0JKHJldmlzaW9uIDE2
MzEyOCkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0JKHdvcmtp
bmcgY29weSkKQEAgLTEwMDEsNyArMTAwMSw3IEBAIC0gKEJPT0wpcmVhZFNlbGVjdGlvbkZyb21Q
YXN0ZWJvYXJkOihOU1AKICAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVd
KTsgCiAgICAgaWYgKCFjb3JlRnJhbWUpIAogICAgICAgICByZXR1cm4gTk87IAotICAgIGlmIChj
b3JlRnJhbWUtPnNlbGVjdGlvbigpLmlzQ29udGVudFJpY2hseUVkaXRhYmxlKCkpCisgICAgaWYg
KGNvcmVGcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNDb250ZW50UmljaGx5RWRpdGFi
bGUoKSkKICAgICAgICAgW3NlbGYgX3Bhc3RlV2l0aFBhc3RlYm9hcmQ6cGFzdGVib2FyZCBhbGxv
d1BsYWluVGV4dDpZRVNdOyAKICAgICBlbHNlIAogICAgICAgICBbc2VsZiBfcGFzdGVBc1BsYWlu
VGV4dFdpdGhQYXN0ZWJvYXJkOnBhc3RlYm9hcmRdOyAKQEAgLTE5ODYsMjUgKzE5ODYsMjUgQEAg
LSAoQk9PTClfY2FuQWx0ZXJDdXJyZW50U2VsZWN0aW9uCiAtIChCT09MKV9oYXNTZWxlY3Rpb24K
IHsKICAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKLSAgICByZXR1
cm4gY29yZUZyYW1lICYmIGNvcmVGcmFtZS0+c2VsZWN0aW9uKCkuaXNSYW5nZSgpOworICAgIHJl
dHVybiBjb3JlRnJhbWUgJiYgY29yZUZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc1Jh
bmdlKCk7CiB9CiAKIC0gKEJPT0wpX2hhc1NlbGVjdGlvbk9ySW5zZXJ0aW9uUG9pbnQKIHsKICAg
ICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKLSAgICByZXR1cm4gY29y
ZUZyYW1lICYmIGNvcmVGcmFtZS0+c2VsZWN0aW9uKCkuaXNDYXJldE9yUmFuZ2UoKTsKKyAgICBy
ZXR1cm4gY29yZUZyYW1lICYmIGNvcmVGcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXND
YXJldE9yUmFuZ2UoKTsKIH0KIAogLSAoQk9PTClfaGFzSW5zZXJ0aW9uUG9pbnQKIHsKICAgICBG
cmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKLSAgICByZXR1cm4gY29yZUZy
YW1lICYmIGNvcmVGcmFtZS0+c2VsZWN0aW9uKCkuaXNDYXJldCgpOworICAgIHJldHVybiBjb3Jl
RnJhbWUgJiYgY29yZUZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0NhcmV0KCk7CiB9
CiAKIC0gKEJPT0wpX2lzRWRpdGFibGUKIHsKICAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShb
c2VsZiBfZnJhbWVdKTsKLSAgICByZXR1cm4gY29yZUZyYW1lICYmIGNvcmVGcmFtZS0+c2VsZWN0
aW9uKCkuaXNDb250ZW50RWRpdGFibGUoKTsKKyAgICByZXR1cm4gY29yZUZyYW1lICYmIGNvcmVG
cmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNDb250ZW50RWRpdGFibGUoKTsKIH0KIAog
LSAoQk9PTClfdHJhbnNwYXJlbnRCYWNrZ3JvdW5kCkBAIC0yODk5LDcgKzI4OTksNyBAQCAtIChC
T09MKXZhbGlkYXRlVXNlckludGVyZmFjZUl0ZW1XaXRob3V0CiAgICAgCiAgICAgaWYgKGFjdGlv
biA9PSBAc2VsZWN0b3IocGFzdGVBc1JpY2hUZXh0OikpCiAgICAgICAgIHJldHVybiBmcmFtZSAm
JiAoZnJhbWUtPmVkaXRvcigpLmNhbkRIVE1MUGFzdGUoKQotICAgICAgICAgICAgfHwgKGZyYW1l
LT5lZGl0b3IoKS5jYW5QYXN0ZSgpICYmIGZyYW1lLT5zZWxlY3Rpb24oKS5pc0NvbnRlbnRSaWNo
bHlFZGl0YWJsZSgpKSk7CisgICAgICAgICAgICB8fCAoZnJhbWUtPmVkaXRvcigpLmNhblBhc3Rl
KCkgJiYgZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlzQ29udGVudFJpY2hseUVkaXRh
YmxlKCkpKTsKICAgICAKICAgICBpZiAoYWN0aW9uID09IEBzZWxlY3RvcihwZXJmb3JtRmluZFBh
bmVsQWN0aW9uOikpCiAgICAgICAgIHJldHVybiBOTzsKQEAgLTMwMjYsNyArMzAyNiw3IEBAIC0g
KEJPT0wpbWFpbnRhaW5zSW5hY3RpdmVTZWxlY3Rpb24KICAgICAgICAgcmV0dXJuIFlFUzsKICAg
ICAKICAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKLSAgICByZXR1
cm4gY29yZUZyYW1lICYmIGNvcmVGcmFtZS0+c2VsZWN0aW9uKCkuaXNDb250ZW50RWRpdGFibGUo
KTsKKyAgICByZXR1cm4gY29yZUZyYW1lICYmIGNvcmVGcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCkuaXNDb250ZW50RWRpdGFibGUoKTsKICNlbHNlCiAgICAgLy8gVGhpcyBtZXRob2QgaGVs
cHMgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIFdlYkhUTUxWaWV3IHNob3VsZCBtYWludGFpbgog
ICAgIC8vIGFuIGluYWN0aXZlIHNlbGVjdGlvbiB3aGVuIGl0J3Mgbm90IGZpcnN0IHJlc3BvbmRl
ci4KQEAgLTMwNTcsNyArMzA1Nyw3IEBAIC0gKEJPT0wpbWFpbnRhaW5zSW5hY3RpdmVTZWxlY3Rp
b24KICAgICAgICAgcmV0dXJuIFlFUzsKIAogICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtz
ZWxmIF9mcmFtZV0pOwotICAgIGJvb2wgc2VsZWN0aW9uSXNFZGl0YWJsZSA9IGNvcmVGcmFtZSAm
JiBjb3JlRnJhbWUtPnNlbGVjdGlvbigpLmlzQ29udGVudEVkaXRhYmxlKCk7CisgICAgYm9vbCBz
ZWxlY3Rpb25Jc0VkaXRhYmxlID0gY29yZUZyYW1lICYmIGNvcmVGcmFtZS0+c2VsZWN0aW9uKCku
c2VsZWN0aW9uKCkuaXNDb250ZW50RWRpdGFibGUoKTsKICAgICBib29sIG5leHRSZXNwb25kZXJJ
c0luV2ViVmlldyA9IFtuZXh0UmVzcG9uZGVyIGlzS2luZE9mQ2xhc3M6W05TVmlldyBjbGFzc11d
CiAgICAgICAgICYmIFtuZXh0UmVzcG9uZGVyIGlzRGVzY2VuZGFudE9mOltbW3NlbGYgX3dlYlZp
ZXddIG1haW5GcmFtZV0gZnJhbWVWaWV3XV07CiAKQEAgLTQxMzcsMTMgKzQxMzcsMTYgQEAgLSAo
Qk9PTCluZWVkc1BhbmVsVG9CZWNvbWVLZXkKIC8vIEFQSSB3aGVuIGFuIGVkaXRhYmxlIHJlZ2lv
biBpcyBub3QgY3VycmVudGx5IGZvY3VzZWQuCiBzdGF0aWMgQk9PTCBpc1RleHRJbnB1dChGcmFt
ZSogY29yZUZyYW1lKQogewotICAgIHJldHVybiBjb3JlRnJhbWUgJiYgIWNvcmVGcmFtZS0+c2Vs
ZWN0aW9uKCkuaXNOb25lKCkgJiYgY29yZUZyYW1lLT5zZWxlY3Rpb24oKS5pc0NvbnRlbnRFZGl0
YWJsZSgpOworICAgIGlmICghY29yZUZyYW1lKQorICAgICAgICByZXR1cm4gTk87CisgICAgY29u
c3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0gY29yZUZyYW1lLT5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKTsKKyAgICByZXR1cm4gIXNlbGVjdGlvbi5pc05vbmUoKSAmJiBzZWxlY3Rpb24u
aXNDb250ZW50RWRpdGFibGUoKTsKIH0KIAogI2lmICFQTEFURk9STShJT1MpCiBzdGF0aWMgQk9P
TCBpc0luUGFzc3dvcmRGaWVsZChGcmFtZSogY29yZUZyYW1lKQogewotICAgIHJldHVybiBjb3Jl
RnJhbWUgJiYgY29yZUZyYW1lLT5zZWxlY3Rpb24oKS5pc0luUGFzc3dvcmRGaWVsZCgpOworICAg
IHJldHVybiBjb3JlRnJhbWUgJiYgY29yZUZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5p
c0luUGFzc3dvcmRGaWVsZCgpOwogfQogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFj
L1dlYlZpZXcvV2ViVmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJW
aWV3L1dlYlZpZXcubW0JKHJldmlzaW9uIDE2MzEyOCkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1dl
YlZpZXcvV2ViVmlldy5tbQkod29ya2luZyBjb3B5KQpAQCAtNzI0NCw3ICs3MjQ0LDcgQEAgLSAo
TlNTZWxlY3Rpb25BZmZpbml0eSlzZWxlY3Rpb25BZmZpbml0eQogICAgIEZyYW1lKiBjb3JlRnJh
bWUgPSBjb3JlKFtzZWxmIF9zZWxlY3RlZE9yTWFpbkZyYW1lXSk7CiAgICAgaWYgKCFjb3JlRnJh
bWUpCiAgICAgICAgIHJldHVybiBOU1NlbGVjdGlvbkFmZmluaXR5RG93bnN0cmVhbTsKLSAgICBy
ZXR1cm4ga2l0KGNvcmVGcmFtZS0+c2VsZWN0aW9uKCkuYWZmaW5pdHkoKSk7CisgICAgcmV0dXJu
IGtpdChjb3JlRnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmFmZmluaXR5KCkpOwogfQog
CiAtICh2b2lkKXNldEVkaXRhYmxlOihCT09MKWZsYWcK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>222802</attachid>
            <date>2014-01-31 00:22:48 -0800</date>
            <delta_ts>2014-01-31 00:39:13 -0800</delta_ts>
            <desc>Fixes GTK+ and EFL builds</desc>
            <filename>bug-127986-20140131002247.patch</filename>
            <type>text/plain</type>
            <size>74121</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2MzE2MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwNSBAQAorMjAxNC0wMS0zMCAgUnlvc3Vr
ZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KKworICAgICAgICBSZW1vdmUgaW5saW5lIG1lbWJl
ciBmdW5jdGlvbnMgb2YgRnJhbWVTZWxlY3Rpb24gdGhhdCBhY2Nlc3MgbV9zZWxlY3Rpb24KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNzk4NgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlbW92ZWQgbnVt
ZXJvdXMgaW5saW5lIG1lbWJlciBmdW5jdGlvbnMgb2YgRnJhbWVTZWxlY3Rpb24gdGhhdCBkZXBl
bmQgb24gbV9zZWxlY3Rpb24uCisKKyAgICAgICAgVGhpcyBpcyBuZWVkZWQgdG8gZW5zdXJlIGFs
bCBhY2Nlc3NlcyB0byBtX3NlbGVjdGlvbiBoYXBwZW4gdGhyb3VnaCBGcmFtZVNlbGVjdGlvbjo6
c2VsZWN0aW9uKCksCisgICAgICAgIHdoaWNoIGluIHR1cm4sIGFsbG93cyB1cyB0byB1cGRhdGUg
aXRzIGNhbGwgc2l0ZXMgdG8gdXNlIGVpdGhlciB2YWxpZGF0ZWQgc2VsZWN0aW9uIHRoYXQgZWRp
dGluZworICAgICAgICBhbmQgcmVuZGVyaW5nIGNvZGUgdXNlcyBvciBpbnZhbGlkYXRlZCBzZWxl
Y3Rpb24gdGhhdCdzIGV4cG9zZWQgdG8gSmF2YVNjcmlwdC4KKworICAgICAgICAqIFdlYkNvcmUu
ZXhwLmluOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vzc2liaWxpdHlPYmpl
Y3RXcmFwcGVySU9TLm1tOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
ciBfY29udmVydFRvTlNSYW5nZTpdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVj
dFdyYXBwZXIgX2NvbnZlcnRUb0RPTVJhbmdlOl0pOgorICAgICAgICAqIGRvbS9FbGVtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnVwZGF0ZUZvY3VzQXBwZWFyYW5jZSk6Cisg
ICAgICAgICogZWRpdGluZy9FZGl0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpj
YW5FZGl0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Y2FuRWRpdFJpY2hseSk6CisgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3I6OmNhbkRIVE1MQ3V0KToKKyAgICAgICAgKFdlYkNvcmU6OkVk
aXRvcjo6Y2FuREhUTUxDb3B5KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Y2FuQ29weSk6
CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmNhbkRlbGV0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpFZGl0b3I6OnJlcGxhY2VTZWxlY3Rpb25XaXRoRnJhZ21lbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6RWRpdG9yOjp0cnlESFRNTENvcHkpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjp0cnlE
SFRNTEN1dCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmFwcGx5U3R5bGUpOgorICAgICAg
ICAoV2ViQ29yZTo6RWRpdG9yOjphcHBseVBhcmFncmFwaFN0eWxlKToKKyAgICAgICAgKFdlYkNv
cmU6OkVkaXRvcjo6Y3V0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Y29weSk6CisgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3I6OnBhc3RlKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6
c2V0Q29tcG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpndWVzc2VzRm9yTWlz
c3BlbGxlZE9yVW5ncmFtbWF0aWNhbCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Om1hcmtN
aXNzcGVsbGluZ3NBZnRlclR5cGluZ1RvV29yZCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6
OmlzU3BlbGxDaGVja2luZ0VuYWJsZWRJbkZvY3VzZWROb2RlKToKKyAgICAgICAgKFdlYkNvcmU6
OkVkaXRvcjo6bWFya0FuZFJlcGxhY2VGb3IpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpn
ZXRDb21wb3NpdGlvblNlbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnNlbGVj
dGlvblN0YXJ0SGFzTWFya2VyRm9yKToKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRvckNvbW1hbmQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6ZXhwYW5kU2VsZWN0aW9uVG9HcmFudWxhcml0eSk6Cisg
ICAgICAgIChXZWJDb3JlOjplbmFibGVkSW5SaWNobHlFZGl0YWJsZVRleHQpOgorICAgICAgICAo
V2ViQ29yZTo6ZW5hYmxlZFJhbmdlSW5FZGl0YWJsZVRleHQpOgorICAgICAgICAoV2ViQ29yZTo6
ZW5hYmxlZFJhbmdlSW5SaWNobHlFZGl0YWJsZVRleHQpOgorICAgICAgICAqIGVkaXRpbmcvRnJh
bWVTZWxlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnNldFNl
bGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDYXJldEJhc2U6OnVwZGF0ZUNhcmV0UmVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6cmVjb21wdXRlQ2FyZXRSZWN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpzZWxlY3RBbGwpOgorICAgICAgICAo
V2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnVwZGF0ZUFwcGVhcmFuY2UpOgorICAgICAgICAoV2Vi
Q29yZTo6RnJhbWVTZWxlY3Rpb246OnVwZGF0ZVNlbGVjdGlvbkNhY2hlc0lmU2VsZWN0aW9uSXNJ
bnNpZGVUZXh0Rm9ybUNvbnRyb2wpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246
OnNldEZvY3VzZWRFbGVtZW50SWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxl
Y3Rpb246OmN1cnJlbnRGb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpy
ZXZlYWxTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnNldFNl
bGVjdGlvbkZyb21Ob25lKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjp3b3Jk
U2VsZWN0aW9uQ29udGFpbmluZ0NhcmV0U2VsZWN0aW9uKToKKyAgICAgICAgKiBlZGl0aW5nL0Zy
YW1lU2VsZWN0aW9uLmg6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6aXNDYXJl
dE9yUmFuZ2UpOgorICAgICAgICAqIGVkaXRpbmcvUmVtb3ZlRm9ybWF0Q29tbWFuZC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW1vdmVGb3JtYXRDb21tYW5kOjpkb0FwcGx5KToKKyAgICAgICAg
KiBlZGl0aW5nL1Zpc2libGVTZWxlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6VmlzaWJs
ZVNlbGVjdGlvbjo6aXNJblBhc3N3b3JkRmllbGQpOgorICAgICAgICAqIGVkaXRpbmcvVmlzaWJs
ZVNlbGVjdGlvbi5oOgorICAgICAgICAqIGVkaXRpbmcvbWFjL0VkaXRvck1hYy5tbToKKyAgICAg
ICAgKFdlYkNvcmU6OkVkaXRvcjo6Y2FuQ29weUV4Y2x1ZGluZ1N0YW5kYWxvbmVJbWFnZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpyZWFkU2VsZWN0aW9uRnJvbVBhc3RlYm9hcmQpOgor
ICAgICAgICAqIGh0bWwvSFRNTEFuY2hvckVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTEFuY2hvckVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTEFuY2hvckVsZW1lbnQ6OnNldEFjdGl2ZSk6CisgICAgICAgICogaHRtbC9IVE1MVGV4
dEZvcm1Db250cm9sRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGV4dEZvcm1D
b250cm9sRWxlbWVudDo6Y29tcHV0ZVNlbGVjdGlvblN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50Ojpjb21wdXRlU2VsZWN0aW9uRW5kKToKKyAgICAg
ICAgKiBwYWdlL0NvbnRleHRNZW51Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
b250ZXh0TWVudUNvbnRyb2xsZXI6OmNvbnRleHRNZW51SXRlbVNlbGVjdGVkKToKKyAgICAgICAg
KFdlYkNvcmU6OkNvbnRleHRNZW51Q29udHJvbGxlcjo6cG9wdWxhdGUpOgorICAgICAgICAqIHBh
Z2UvRHJhZ0NvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0NvbnRyb2xsZXI6
OmRyYWdJc01vdmUpOgorICAgICAgICAoV2ViQ29yZTo6c2V0U2VsZWN0aW9uVG9EcmFnQ2FyZXQp
OgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0NvbnRyb2xsZXI6OmNvbmNsdWRlRWRpdERyYWcpOgor
ICAgICAgICAoV2ViQ29yZTo6RHJhZ0NvbnRyb2xsZXI6OnN0YXJ0RHJhZyk6CisgICAgICAgICog
cGFnZS9FdmVudEhhbmRsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bm9kZUlzTm90QmVpbmdF
ZGl0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpzZW5kQ29udGV4dE1lbnVF
dmVudCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnNlbmRDb250ZXh0TWVudUV2
ZW50Rm9yS2V5KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6aGFuZGxlRHJhZyk6
CisgICAgICAgICogcGFnZS9Gb2N1c0NvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Rm9jdXNDb250cm9sbGVyOjphZHZhbmNlRm9jdXNJbkRvY3VtZW50T3JkZXIpOgorICAgICAgICAo
V2ViQ29yZTo6Y2xlYXJTZWxlY3Rpb25JZk5lZWRlZCk6CisgICAgICAgICogcGFnZS9pb3MvRnJh
bWVJT1MubW06CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6Y2FyZXRSZWN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkZyYW1lOjpyZWN0Rm9yU2Nyb2xsVG9WaXNpYmxlKToKKyAgICAgICAgKFdlYkNv
cmU6OkZyYW1lOjpzdHlsZUF0U2VsZWN0aW9uU3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6RnJh
bWU6OnNldFJhbmdlZFNlbGVjdGlvbkJhc2VUb0N1cnJlbnRTZWxlY3Rpb25TdGFydCk6CisgICAg
ICAgIChXZWJDb3JlOjpGcmFtZTo6c2V0UmFuZ2VkU2VsZWN0aW9uQmFzZVRvQ3VycmVudFNlbGVj
dGlvbkVuZCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6c2V0UmFuZ2VkU2VsZWN0aW9uSW5p
dGlhbEV4dGVudFRvQ3VycmVudFNlbGVjdGlvblN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OkZy
YW1lOjpzZXRSYW5nZWRTZWxlY3Rpb25Jbml0aWFsRXh0ZW50VG9DdXJyZW50U2VsZWN0aW9uRW5k
KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjppbnRlcnByZXRhdGlvbnNGb3JDdXJyZW50Um9v
dCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckJsb2NrOjpwYWludENhcmV0KToKKwogMjAxNC0wMS0zMCAgU2ltb24gRnJhc2Vy
ICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBGaXggaU9TIGJ1aWxkIGFmdGVy
IHIxNjMxNTYuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgkocmV2aXNpb24gMTYzMTI4KQorKysg
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4JKHdvcmtpbmcgY29weSkKQEAgLTE1MzQsNyAr
MTUzNCw2IEBAIF9fWk5LN1dlYkNvcmUxNERvY3VtZW50TG9hZGVyOWlzTG9hZGluZ0UKIF9fWk5L
N1dlYkNvcmUxNERvY3VtZW50TWFya2VyMTFkZXNjcmlwdGlvbkV2CiBfX1pOSzdXZWJDb3JlMTRG
cmFtZVNlbGVjdGlvbjExY3VycmVudEZvcm1FdgogX19aTks3V2ViQ29yZTE0RnJhbWVTZWxlY3Rp
b24xNWNvcHlUeXBpbmdTdHlsZUV2Ci1fX1pOSzdXZWJDb3JlMTRGcmFtZVNlbGVjdGlvbjE3aXNJ
blBhc3N3b3JkRmllbGRFdgogX19aTks3V2ViQ29yZTE0RnJhbWVTZWxlY3Rpb24xOGlzRm9jdXNl
ZEFuZEFjdGl2ZUV2CiBfX1pOSzdXZWJDb3JlMTRGcmFtZVNlbGVjdGlvbjMxZ2V0Q2xpcHBlZFZp
c2libGVUZXh0UmVjdGFuZ2xlc0VSTjNXVEY2VmVjdG9ySU5TXzlGbG9hdFJlY3RFTG0wRU5TMV8x
NUNyYXNoT25PdmVyZmxvd0VFRQogX19aTks3V2ViQ29yZTE0RnJhbWVTZWxlY3Rpb24zNnJvb3RF
ZGl0YWJsZUVsZW1lbnRPckRvY3VtZW50RWxlbWVudEV2CkBAIC0xNjEzLDYgKzE2MTIsNyBAQCBf
X1pOSzdXZWJDb3JlMTZJY29uRGF0YWJhc2VCYXNlMTJkYXRhYmFzCiBfX1pOSzdXZWJDb3JlMTZS
ZXNvdXJjZVJlc3BvbnNlMTNuc1VSTFJlc3BvbnNlRXYKIF9fWk5LN1dlYkNvcmUxNlJlc291cmNl
UmVzcG9uc2UxNmNlcnRpZmljYXRlQ2hhaW5FdgogX19aTks3V2ViQ29yZTE2VmlzaWJsZVNlbGVj
dGlvbjE3aXNDb250ZW50RWRpdGFibGVFdgorX19aTks3V2ViQ29yZTE2VmlzaWJsZVNlbGVjdGlv
bjE3aXNJblBhc3N3b3JkRmllbGRFdgogX19aTks3V2ViQ29yZTE2VmlzaWJsZVNlbGVjdGlvbjE3
dG9Ob3JtYWxpemVkUmFuZ2VFdgogX19aTks3V2ViQ29yZTE2VmlzaWJsZVNlbGVjdGlvbjE5cm9v
dEVkaXRhYmxlRWxlbWVudEV2CiBfX1pOSzdXZWJDb3JlMTZWaXNpYmxlU2VsZWN0aW9uMjNpc0Nv
bnRlbnRSaWNobHlFZGl0YWJsZUV2CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcklPUy5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3Jh
cHBlcklPUy5tbQkocmV2aXNpb24gMTYzMTI4KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJT1MubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTE2NDEsOSArMTY0MSw3IEBAIC0gKE5TUmFuZ2UpX2NvbnZlcnRUb05TUmFuZ2U6KFJh
bmdlICopcmEKICAgICAgICAgcmV0dXJuIE5TTWFrZVJhbmdlKE5TTm90Rm91bmQsIDApOwogICAg
IAogICAgIERvY3VtZW50KiBkb2N1bWVudCA9IG1fb2JqZWN0LT5kb2N1bWVudCgpOwotICAgIEZy
YW1lU2VsZWN0aW9uJiBmcmFtZVNlbGVjdGlvbiA9IGRvY3VtZW50LT5mcmFtZSgpLT5zZWxlY3Rp
b24oKTsKLSAgICAKLSAgICBFbGVtZW50KiBzZWxlY3Rpb25Sb290ID0gZnJhbWVTZWxlY3Rpb24u
cm9vdEVkaXRhYmxlRWxlbWVudCgpOworICAgIEVsZW1lbnQqIHNlbGVjdGlvblJvb3QgPSBkb2N1
bWVudC0+ZnJhbWUoKS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkucm9vdEVkaXRhYmxlRWxlbWVu
dCgpOwogICAgIEVsZW1lbnQqIHNjb3BlID0gc2VsZWN0aW9uUm9vdCA/IHNlbGVjdGlvblJvb3Qg
OiBkb2N1bWVudC0+ZG9jdW1lbnRFbGVtZW50KCk7CiAgICAgCiAgICAgLy8gTW91c2UgZXZlbnRz
IG1heSBjYXVzZSBUU00gdG8gYXR0ZW1wdCB0byBjcmVhdGUgYW4gTlNSYW5nZSBmb3IgYSBwb3J0
aW9uIG9mIHRoZSB2aWV3CkBAIC0xNjc5LDggKzE2NzcsNyBAQCAtIChQYXNzUmVmUHRyPFJhbmdl
PilfY29udmVydFRvRE9NUmFuZ2U6CiAgICAgLy8gdG8gdXNlIHRoZSByb290IGVkaXRhYmxlIGVs
ZW1lbnQgb2YgdGhlIHNlbGVjdGlvbiBzdGFydCBhcyB0aGUgcG9zaXRpb25hbCBiYXNlLgogICAg
IC8vIFRoYXQgZml0cyB3aXRoIEFwcEtpdCdzIGlkZWEgb2YgYW4gaW5wdXQgY29udGV4dC4KICAg
ICBEb2N1bWVudCogZG9jdW1lbnQgPSBtX29iamVjdC0+ZG9jdW1lbnQoKTsKLSAgICBGcmFtZVNl
bGVjdGlvbiYgZnJhbWVTZWxlY3Rpb24gPSBkb2N1bWVudC0+ZnJhbWUoKS0+c2VsZWN0aW9uKCk7
Ci0gICAgRWxlbWVudCogc2VsZWN0aW9uUm9vdCA9IGZyYW1lU2VsZWN0aW9uLnJvb3RFZGl0YWJs
ZUVsZW1lbnQoKTsKKyAgICBFbGVtZW50KiBzZWxlY3Rpb25Sb290ID0gZG9jdW1lbnQtPmZyYW1l
KCktPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsKICAgICBF
bGVtZW50KiBzY29wZSA9IHNlbGVjdGlvblJvb3QgPyBzZWxlY3Rpb25Sb290IDogZG9jdW1lbnQt
PmRvY3VtZW50RWxlbWVudCgpOwogICAgIHJldHVybiBUZXh0SXRlcmF0b3I6OnJhbmdlRnJvbUxv
Y2F0aW9uQW5kTGVuZ3RoKHNjb3BlLCBuc3JhbmdlLmxvY2F0aW9uLCBuc3JhbmdlLmxlbmd0aCk7
CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCShyZXZpc2lvbiAxNjMxMjgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMDcsNyArMjAw
Nyw3IEBAIHZvaWQgRWxlbWVudDo6dXBkYXRlRm9jdXNBcHBlYXJhbmNlKGJvb2wKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgCiAgICAgICAgIC8vIFdoZW4gZm9jdXNpbmcgYW4gZWRpdGFi
bGUgZWxlbWVudCBpbiBhbiBpZnJhbWUsIGRvbid0IHJlc2V0IHRoZSBzZWxlY3Rpb24gaWYgaXQg
YWxyZWFkeSBjb250YWlucyBhIHNlbGVjdGlvbi4KLSAgICAgICAgaWYgKHRoaXMgPT0gZnJhbWUt
PnNlbGVjdGlvbigpLnJvb3RFZGl0YWJsZUVsZW1lbnQoKSkKKyAgICAgICAgaWYgKHRoaXMgPT0g
ZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnJvb3RFZGl0YWJsZUVsZW1lbnQoKSkKICAg
ICAgICAgICAgIHJldHVybjsKIAogICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHJlc3RvcmUg
dGhlIHByZXZpb3VzIHNlbGVjdGlvbiBpZiB0aGVyZSBpcyBvbmUuCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0VkaXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRp
dGluZy9FZGl0b3IuY3BwCShyZXZpc2lvbiAxNjMxMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0VkaXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4NiwxMiArMjg2LDEyIEBAIGJvb2wg
RWRpdG9yOjpoYW5kbGVUZXh0RXZlbnQoVGV4dEV2ZW50KiAKIAogYm9vbCBFZGl0b3I6OmNhbkVk
aXQoKSBjb25zdAogewotICAgIHJldHVybiBtX2ZyYW1lLnNlbGVjdGlvbigpLnJvb3RFZGl0YWJs
ZUVsZW1lbnQoKTsKKyAgICByZXR1cm4gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5y
b290RWRpdGFibGVFbGVtZW50KCk7CiB9CiAKIGJvb2wgRWRpdG9yOjpjYW5FZGl0UmljaGx5KCkg
Y29uc3QKIHsKLSAgICByZXR1cm4gbV9mcmFtZS5zZWxlY3Rpb24oKS5pc0NvbnRlbnRSaWNobHlF
ZGl0YWJsZSgpOworICAgIHJldHVybiBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlz
Q29udGVudFJpY2hseUVkaXRhYmxlKCk7CiB9CiAKIC8vIFdpbklFIHVzZXMgb25iZWZvcmVjdXQg
YW5kIG9uYmVmb3JlcGFzdGUgdG8gZW5hYmxlcyB0aGUgY3V0IGFuZCBwYXN0ZSBtZW51IGl0ZW1z
LiAgVGhleQpAQCAtMzAxLDEyICszMDEsMTIgQEAgYm9vbCBFZGl0b3I6OmNhbkVkaXRSaWNobHko
KSBjb25zdAogCiBib29sIEVkaXRvcjo6Y2FuREhUTUxDdXQoKQogewotICAgIHJldHVybiAhbV9m
cmFtZS5zZWxlY3Rpb24oKS5pc0luUGFzc3dvcmRGaWVsZCgpICYmICFkaXNwYXRjaENQUEV2ZW50
KGV2ZW50TmFtZXMoKS5iZWZvcmVjdXRFdmVudCwgQ2xpcGJvYXJkTnVtYik7CisgICAgcmV0dXJu
ICFtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlzSW5QYXNzd29yZEZpZWxkKCkgJiYg
IWRpc3BhdGNoQ1BQRXZlbnQoZXZlbnROYW1lcygpLmJlZm9yZWN1dEV2ZW50LCBDbGlwYm9hcmRO
dW1iKTsKIH0KIAogYm9vbCBFZGl0b3I6OmNhbkRIVE1MQ29weSgpCiB7Ci0gICAgcmV0dXJuICFt
X2ZyYW1lLnNlbGVjdGlvbigpLmlzSW5QYXNzd29yZEZpZWxkKCkgJiYgIWRpc3BhdGNoQ1BQRXZl
bnQoZXZlbnROYW1lcygpLmJlZm9yZWNvcHlFdmVudCwgQ2xpcGJvYXJkTnVtYik7CisgICAgcmV0
dXJuICFtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlzSW5QYXNzd29yZEZpZWxkKCkg
JiYgIWRpc3BhdGNoQ1BQRXZlbnQoZXZlbnROYW1lcygpLmJlZm9yZWNvcHlFdmVudCwgQ2xpcGJv
YXJkTnVtYik7CiB9CiAKIGJvb2wgRWRpdG9yOjpjYW5ESFRNTFBhc3RlKCkKQEAgLTM0MCw3ICsz
NDAsNyBAQCBib29sIEVkaXRvcjo6Y2FuQ29weSgpIGNvbnN0CiB7CiAgICAgaWYgKGltYWdlRWxl
bWVudEZyb21JbWFnZURvY3VtZW50KGRvY3VtZW50KCkpKQogICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICBGcmFtZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0gbV9mcmFtZS5zZWxlY3Rpb24oKTsKKyAg
ICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBtX2ZyYW1lLnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpOwogICAgIHJldHVybiBzZWxlY3Rpb24uaXNSYW5nZSgpICYmICFzZWxlY3Rp
b24uaXNJblBhc3N3b3JkRmllbGQoKTsKIH0KIApAQCAtMzUxLDcgKzM1MSw3IEBAIGJvb2wgRWRp
dG9yOjpjYW5QYXN0ZSgpIGNvbnN0CiAKIGJvb2wgRWRpdG9yOjpjYW5EZWxldGUoKSBjb25zdAog
ewotICAgIEZyYW1lU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBtX2ZyYW1lLnNlbGVjdGlvbigpOwor
ICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCk7CiAgICAgcmV0dXJuIHNlbGVjdGlvbi5pc1JhbmdlKCkgJiYgc2VsZWN0
aW9uLnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsKIH0KIApAQCAtNTk4LDcgKzU5OCw4IEBAIGJvb2wg
RWRpdG9yOjpzaG91bGRJbnNlcnRGcmFnbWVudChQYXNzUmUKIAogdm9pZCBFZGl0b3I6OnJlcGxh
Y2VTZWxlY3Rpb25XaXRoRnJhZ21lbnQoUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFn
bWVudCwgYm9vbCBzZWxlY3RSZXBsYWNlbWVudCwgYm9vbCBzbWFydFJlcGxhY2UsIGJvb2wgbWF0
Y2hTdHlsZSkKIHsKLSAgICBpZiAobV9mcmFtZS5zZWxlY3Rpb24oKS5pc05vbmUoKSB8fCAhbV9m
cmFtZS5zZWxlY3Rpb24oKS5pc0NvbnRlbnRFZGl0YWJsZSgpIHx8ICFmcmFnbWVudCkKKyAgICBW
aXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9u
KCk7CisgICAgaWYgKHNlbGVjdGlvbi5pc05vbmUoKSB8fCAhc2VsZWN0aW9uLmlzQ29udGVudEVk
aXRhYmxlKCkgfHwgIWZyYWdtZW50KQogICAgICAgICByZXR1cm47CiAKICAgICBSZXBsYWNlU2Vs
ZWN0aW9uQ29tbWFuZDo6Q29tbWFuZE9wdGlvbnMgb3B0aW9ucyA9IFJlcGxhY2VTZWxlY3Rpb25D
b21tYW5kOjpQcmV2ZW50TmVzdGluZyB8IFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpTYW5pdGl6
ZUZyYWdtZW50OwpAQCAtNjExLDkgKzYxMiwxMCBAQCB2b2lkIEVkaXRvcjo6cmVwbGFjZVNlbGVj
dGlvbldpdGhGcmFnbWVuCiAgICAgYXBwbHlDb21tYW5kKFJlcGxhY2VTZWxlY3Rpb25Db21tYW5k
OjpjcmVhdGUoZG9jdW1lbnQoKSwgZnJhZ21lbnQsIG9wdGlvbnMsIEVkaXRBY3Rpb25QYXN0ZSkp
OwogICAgIHJldmVhbFNlbGVjdGlvbkFmdGVyRWRpdGluZ09wZXJhdGlvbigpOwogCi0gICAgaWYg
KG1fZnJhbWUuc2VsZWN0aW9uKCkuaXNJblBhc3N3b3JkRmllbGQoKSB8fCAhaXNDb250aW51b3Vz
U3BlbGxDaGVja2luZ0VuYWJsZWQoKSkKKyAgICBzZWxlY3Rpb24gPSBtX2ZyYW1lLnNlbGVjdGlv
bigpLnNlbGVjdGlvbigpOworICAgIGlmIChzZWxlY3Rpb24uaXNJblBhc3N3b3JkRmllbGQoKSB8
fCAhaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwot
ICAgIE5vZGUqIG5vZGVUb0NoZWNrID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5yb290RWRpdGFibGVF
bGVtZW50KCk7CisgICAgTm9kZSogbm9kZVRvQ2hlY2sgPSBzZWxlY3Rpb24ucm9vdEVkaXRhYmxl
RWxlbWVudCgpOwogICAgIGlmICghbm9kZVRvQ2hlY2spCiAgICAgICAgIHJldHVybjsKIApAQCAt
NzI4LDcgKzczMCw3IEBAIGJvb2wgRWRpdG9yOjpzaG91bGREZWxldGVSYW5nZShSYW5nZSogcmEK
IAogYm9vbCBFZGl0b3I6OnRyeURIVE1MQ29weSgpCiB7ICAgCi0gICAgaWYgKG1fZnJhbWUuc2Vs
ZWN0aW9uKCkuaXNJblBhc3N3b3JkRmllbGQoKSkKKyAgICBpZiAobV9mcmFtZS5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKS5pc0luUGFzc3dvcmRGaWVsZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKICAgICByZXR1cm4gIWRpc3BhdGNoQ1BQRXZlbnQoZXZlbnROYW1lcygpLmNvcHlFdmVudCwg
Q2xpcGJvYXJkV3JpdGFibGUpOwpAQCAtNzM2LDcgKzczOCw3IEBAIGJvb2wgRWRpdG9yOjp0cnlE
SFRNTENvcHkoKQogCiBib29sIEVkaXRvcjo6dHJ5REhUTUxDdXQoKQogewotICAgIGlmIChtX2Zy
YW1lLnNlbGVjdGlvbigpLmlzSW5QYXNzd29yZEZpZWxkKCkpCisgICAgaWYgKG1fZnJhbWUuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNJblBhc3N3b3JkRmllbGQoKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIAogICAgIHJldHVybiAhZGlzcGF0Y2hDUFBFdmVudChldmVudE5hbWVzKCku
Y3V0RXZlbnQsIENsaXBib2FyZFdyaXRhYmxlKTsKQEAgLTk3MCw3ICs5NzIsNyBAQCBOb2RlKiBF
ZGl0b3I6OmZpbmRFdmVudFRhcmdldEZyb21TZWxlY3RpCiAKIHZvaWQgRWRpdG9yOjphcHBseVN0
eWxlKFN0eWxlUHJvcGVydGllcyogc3R5bGUsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlvbikKIHsK
LSAgICBzd2l0Y2ggKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uVHlwZSgpKSB7CisgICAg
c3dpdGNoIChtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnNlbGVjdGlvblR5cGUoKSkg
ewogICAgIGNhc2UgVmlzaWJsZVNlbGVjdGlvbjo6Tm9TZWxlY3Rpb246CiAgICAgICAgIC8vIGRv
IG5vdGhpbmcKICAgICAgICAgYnJlYWs7CkBAIC05OTEsNyArOTkzLDcgQEAgYm9vbCBFZGl0b3I6
OnNob3VsZEFwcGx5U3R5bGUoU3R5bGVQcm9wZQogICAgIAogdm9pZCBFZGl0b3I6OmFwcGx5UGFy
YWdyYXBoU3R5bGUoU3R5bGVQcm9wZXJ0aWVzKiBzdHlsZSwgRWRpdEFjdGlvbiBlZGl0aW5nQWN0
aW9uKQogewotICAgIHN3aXRjaCAobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb25UeXBlKCkp
IHsKKyAgICBzd2l0Y2ggKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9u
VHlwZSgpKSB7CiAgICAgY2FzZSBWaXNpYmxlU2VsZWN0aW9uOjpOb1NlbGVjdGlvbjoKICAgICAg
ICAgLy8gZG8gbm90aGluZwogICAgICAgICBicmVhazsKQEAgLTEyODAsNyArMTI4Miw3IEBAIHZv
aWQgRWRpdG9yOjpjdXQoKQogICAgIHdpbGxXcml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZChzZWxl
Y3Rpb24pOwogICAgIGlmIChzaG91bGREZWxldGVSYW5nZShzZWxlY3Rpb24uZ2V0KCkpKSB7CiAg
ICAgICAgIHVwZGF0ZU1hcmtlcnNGb3JXb3Jkc0FmZmVjdGVkQnlFZGl0aW5nKHRydWUpOwotICAg
ICAgICBpZiAoZW5jbG9zaW5nVGV4dEZvcm1Db250cm9sKG1fZnJhbWUuc2VsZWN0aW9uKCkuc3Rh
cnQoKSkpCisgICAgICAgIGlmIChlbmNsb3NpbmdUZXh0Rm9ybUNvbnRyb2wobV9mcmFtZS5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpKSkKICAgICAgICAgICAgIFBhc3RlYm9hcmQ6OmNy
ZWF0ZUZvckNvcHlBbmRQYXN0ZSgpLT53cml0ZVBsYWluVGV4dChzZWxlY3RlZFRleHRGb3JDbGlw
Ym9hcmQoKSwgY2FuU21hcnRDb3B5T3JEZWxldGUoKSA/IFBhc3RlYm9hcmQ6OkNhblNtYXJ0UmVw
bGFjZSA6IFBhc3RlYm9hcmQ6OkNhbm5vdFNtYXJ0UmVwbGFjZSk7CiAgICAgICAgIGVsc2Ugewog
I2lmIFBMQVRGT1JNKE1BQykgfHwgUExBVEZPUk0oRUZMKQpAQCAtMTMwNSw3ICsxMzA3LDcgQEAg
dm9pZCBFZGl0b3I6OmNvcHkoKQogICAgIH0KIAogICAgIHdpbGxXcml0ZVNlbGVjdGlvblRvUGFz
dGVib2FyZChzZWxlY3RlZFJhbmdlKCkpOwotICAgIGlmIChlbmNsb3NpbmdUZXh0Rm9ybUNvbnRy
b2wobV9mcmFtZS5zZWxlY3Rpb24oKS5zdGFydCgpKSkgeworICAgIGlmIChlbmNsb3NpbmdUZXh0
Rm9ybUNvbnRyb2wobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpKSkgewog
ICAgICAgICBQYXN0ZWJvYXJkOjpjcmVhdGVGb3JDb3B5QW5kUGFzdGUoKS0+d3JpdGVQbGFpblRl
eHQoc2VsZWN0ZWRUZXh0Rm9yQ2xpcGJvYXJkKCksCiAgICAgICAgICAgICBjYW5TbWFydENvcHlP
ckRlbGV0ZSgpID8gUGFzdGVib2FyZDo6Q2FuU21hcnRSZXBsYWNlIDogUGFzdGVib2FyZDo6Q2Fu
bm90U21hcnRSZXBsYWNlKTsKICAgICB9IGVsc2UgewpAQCAtMTM0Miw3ICsxMzQ0LDcgQEAgdm9p
ZCBFZGl0b3I6OnBhc3RlKFBhc3RlYm9hcmQmIHBhc3RlYm9hcgogICAgIHVwZGF0ZU1hcmtlcnNG
b3JXb3Jkc0FmZmVjdGVkQnlFZGl0aW5nKGZhbHNlKTsKICAgICBDYWNoZWRSZXNvdXJjZUxvYWRl
ciogbG9hZGVyID0gZG9jdW1lbnQoKS5jYWNoZWRSZXNvdXJjZUxvYWRlcigpOwogICAgIFJlc291
cmNlQ2FjaGVWYWxpZGF0aW9uU3VwcHJlc3NvciB2YWxpZGF0aW9uU3VwcHJlc3Nvcihsb2FkZXIp
OwotICAgIGlmIChtX2ZyYW1lLnNlbGVjdGlvbigpLmlzQ29udGVudFJpY2hseUVkaXRhYmxlKCkp
CisgICAgaWYgKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNDb250ZW50UmljaGx5
RWRpdGFibGUoKSkKICAgICAgICAgcGFzdGVXaXRoUGFzdGVib2FyZCgmcGFzdGVib2FyZCwgdHJ1
ZSk7CiAgICAgZWxzZQogICAgICAgICBwYXN0ZUFzUGxhaW5UZXh0V2l0aFBhc3RlYm9hcmQocGFz
dGVib2FyZCk7CkBAIC0xODQyLDggKzE4NDQsOCBAQCB2b2lkIEVkaXRvcjo6c2V0Q29tcG9zaXRp
b24oY29uc3QgU3RyaW5nCiAgICAgICAgIFR5cGluZ0NvbW1hbmQ6Omluc2VydFRleHQoZG9jdW1l
bnQoKSwgdGV4dCwgVHlwaW5nQ29tbWFuZDo6U2VsZWN0SW5zZXJ0ZWRUZXh0IHwgVHlwaW5nQ29t
bWFuZDo6UHJldmVudFNwZWxsQ2hlY2tpbmcsIFR5cGluZ0NvbW1hbmQ6OlRleHRDb21wb3NpdGlv
blVwZGF0ZSk7CiAKICAgICAgICAgLy8gRmluZCBvdXQgd2hhdCBub2RlIGhhcyB0aGUgY29tcG9z
aXRpb24gbm93LgotICAgICAgICBQb3NpdGlvbiBiYXNlID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5i
YXNlKCkuZG93bnN0cmVhbSgpOwotICAgICAgICBQb3NpdGlvbiBleHRlbnQgPSBtX2ZyYW1lLnNl
bGVjdGlvbigpLmV4dGVudCgpOworICAgICAgICBQb3NpdGlvbiBiYXNlID0gbV9mcmFtZS5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKS5iYXNlKCkuZG93bnN0cmVhbSgpOworICAgICAgICBQb3NpdGlv
biBleHRlbnQgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmV4dGVudCgpOwogICAg
ICAgICBOb2RlKiBiYXNlTm9kZSA9IGJhc2UuZGVwcmVjYXRlZE5vZGUoKTsKICAgICAgICAgdW5z
aWduZWQgYmFzZU9mZnNldCA9IGJhc2UuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKTsKICAgICAg
ICAgTm9kZSogZXh0ZW50Tm9kZSA9IGV4dGVudC5kZXByZWNhdGVkTm9kZSgpOwpAQCAtMjE2MSwx
MyArMjE2MywxMyBAQCBWZWN0b3I8U3RyaW5nPiBFZGl0b3I6Omd1ZXNzZXNGb3JNaXNzcGVsCiB7
CiAgICAgaWYgKHVuaWZpZWRUZXh0Q2hlY2tlckVuYWJsZWQoKSkgewogICAgICAgICBSZWZQdHI8
UmFuZ2U+IHJhbmdlOwotICAgICAgICBGcmFtZVNlbGVjdGlvbiYgZnJhbWVTZWxlY3Rpb24gPSBt
X2ZyYW1lLnNlbGVjdGlvbigpOwotICAgICAgICBpZiAoZnJhbWVTZWxlY3Rpb24uaXNDYXJldCgp
ICYmIGJlaGF2aW9yKCkuc2hvdWxkQWxsb3dTcGVsbGluZ1N1Z2dlc3Rpb25zV2l0aG91dFNlbGVj
dGlvbigpKSB7Ci0gICAgICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIHdvcmRTZWxlY3Rpb24gPSBW
aXNpYmxlU2VsZWN0aW9uKGZyYW1lU2VsZWN0aW9uLmJhc2UoKSk7CisgICAgICAgIFZpc2libGVT
ZWxlY3Rpb24gc2VsZWN0aW9uID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAg
ICAgICAgaWYgKHNlbGVjdGlvbi5pc0NhcmV0KCkgJiYgYmVoYXZpb3IoKS5zaG91bGRBbGxvd1Nw
ZWxsaW5nU3VnZ2VzdGlvbnNXaXRob3V0U2VsZWN0aW9uKCkpIHsKKyAgICAgICAgICAgIFZpc2li
bGVTZWxlY3Rpb24gd29yZFNlbGVjdGlvbiA9IFZpc2libGVTZWxlY3Rpb24oc2VsZWN0aW9uLmJh
c2UoKSk7CiAgICAgICAgICAgICB3b3JkU2VsZWN0aW9uLmV4cGFuZFVzaW5nR3JhbnVsYXJpdHko
V29yZEdyYW51bGFyaXR5KTsKICAgICAgICAgICAgIHJhbmdlID0gd29yZFNlbGVjdGlvbi50b05v
cm1hbGl6ZWRSYW5nZSgpOwogICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHJhbmdlID0gZnJh
bWVTZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICAgICAgICAgIHJhbmdlID0gc2Vs
ZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7CiAgICAgICAgIGlmICghcmFuZ2UpCiAgICAgICAg
ICAgICByZXR1cm4gVmVjdG9yPFN0cmluZz4oKTsKICAgICAgICAgcmV0dXJuIFRleHRDaGVja2lu
Z0hlbHBlcihjbGllbnQoKSwgcmFuZ2UpLmd1ZXNzZXNGb3JNaXNzcGVsbGVkT3JVbmdyYW1tYXRp
Y2FsUmFuZ2UoaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKCksIG1pc3NwZWxsZWQsIHVuZ3JhbW1h
dGljYWwpOwpAQCAtMjMwMSw3ICsyMzAzLDcgQEAgdm9pZCBFZGl0b3I6Om1hcmtNaXNzcGVsbGlu
Z3NBZnRlclR5cGluZwogICAgICAgICBtX2ZyYW1lLmVkaXRvcigpLnJlcGxhY2VTZWxlY3Rpb25X
aXRoVGV4dChhdXRvY29ycmVjdGVkU3RyaW5nLCBmYWxzZSwgZmFsc2UpOwogCiAgICAgICAgIC8v
IFJlc2V0IHRoZSBjaGFyZXQgb25lIGNoYXJhY3RlciBmdXJ0aGVyLgotICAgICAgICBtX2ZyYW1l
LnNlbGVjdGlvbigpLm1vdmVUbyhtX2ZyYW1lLnNlbGVjdGlvbigpLmVuZCgpKTsKKyAgICAgICAg
bV9mcmFtZS5zZWxlY3Rpb24oKS5tb3ZlVG8obV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24o
KS5lbmQoKSk7CiAgICAgICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkubW9kaWZ5KEZyYW1lU2VsZWN0
aW9uOjpBbHRlcmF0aW9uTW92ZSwgRGlyZWN0aW9uRm9yd2FyZCwgQ2hhcmFjdGVyR3JhbnVsYXJp
dHkpOwogICAgIH0KIApAQCAtMjM3MCw3ICsyMzcyLDcgQEAgYm9vbCBFZGl0b3I6OmlzU3BlbGxD
aGVja2luZ0VuYWJsZWRGb3IoTgogCiBib29sIEVkaXRvcjo6aXNTcGVsbENoZWNraW5nRW5hYmxl
ZEluRm9jdXNlZE5vZGUoKSBjb25zdAogewotICAgIHJldHVybiBpc1NwZWxsQ2hlY2tpbmdFbmFi
bGVkRm9yKG1fZnJhbWUuc2VsZWN0aW9uKCkuc3RhcnQoKS5kZXByZWNhdGVkTm9kZSgpKTsKKyAg
ICByZXR1cm4gaXNTcGVsbENoZWNraW5nRW5hYmxlZEZvcihtX2ZyYW1lLnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpLnN0YXJ0KCkuZGVwcmVjYXRlZE5vZGUoKSk7CiB9CiAKIHZvaWQgRWRpdG9yOjpt
YXJrTWlzc3BlbGxpbmdzKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiwgUmVmUHRy
PFJhbmdlPiYgZmlyc3RNaXNzcGVsbGluZ1JhbmdlKQpAQCAtMjQ5NCw5ICsyNDk2LDkgQEAgdm9p
ZCBFZGl0b3I6Om1hcmtBbmRSZXBsYWNlRm9yKFBhc3NSZWZQdAogICAgIGJvb2wgYWRqdXN0U2Vs
ZWN0aW9uRm9yUGFyYWdyYXBoQm91bmRhcmllcyA9IGZhbHNlOwogCiAgICAgaWYgKHNob3VsZFBl
cmZvcm1SZXBsYWNlbWVudCB8fCBzaG91bGRNYXJrU3BlbGxpbmcgfHwgc2hvdWxkQ2hlY2tGb3JD
b3JyZWN0aW9uKSB7Ci0gICAgICAgIGlmIChtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvblR5
cGUoKSA9PSBWaXNpYmxlU2VsZWN0aW9uOjpDYXJldFNlbGVjdGlvbikgeworICAgICAgICBpZiAo
bV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb25UeXBlKCkgPT0gVmlzaWJs
ZVNlbGVjdGlvbjo6Q2FyZXRTZWxlY3Rpb24pIHsKICAgICAgICAgICAgIC8vIEF0dGVtcHQgdG8g
c2F2ZSB0aGUgY2FyZXQgcG9zaXRpb24gc28gd2UgY2FuIHJlc3RvcmUgaXQgbGF0ZXIgaWYgbmVl
ZGVkCi0gICAgICAgICAgICBQb3NpdGlvbiBjYXJldFBvc2l0aW9uID0gbV9mcmFtZS5zZWxlY3Rp
b24oKS5lbmQoKTsKKyAgICAgICAgICAgIFBvc2l0aW9uIGNhcmV0UG9zaXRpb24gPSBtX2ZyYW1l
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmVuZCgpOwogICAgICAgICAgICAgc2VsZWN0aW9uT2Zm
c2V0ID0gcGFyYWdyYXBoLm9mZnNldFRvKGNhcmV0UG9zaXRpb24sIEFTU0VSVF9OT19FWENFUFRJ
T04pOwogICAgICAgICAgICAgcmVzdG9yZVNlbGVjdGlvbkFmdGVyQ2hhbmdlID0gdHJ1ZTsKICAg
ICAgICAgICAgIGlmIChzZWxlY3Rpb25PZmZzZXQgPiAwICYmIChzZWxlY3Rpb25PZmZzZXQgPiBw
YXJhZ3JhcGgudGV4dExlbmd0aCgpIHx8IHBhcmFncmFwaC50ZXh0Q2hhckF0KHNlbGVjdGlvbk9m
ZnNldCAtIDEpID09IG5ld2xpbmVDaGFyYWN0ZXIpKQpAQCAtMjYyNSw3ICsyNjI3LDcgQEAgdm9p
ZCBFZGl0b3I6Om1hcmtBbmRSZXBsYWNlRm9yKFBhc3NSZWZQdAogICAgICAgICAgICAgICAgIG1f
ZnJhbWUuc2VsZWN0aW9uKCkubW9kaWZ5KEZyYW1lU2VsZWN0aW9uOjpBbHRlcmF0aW9uTW92ZSwg
RGlyZWN0aW9uRm9yd2FyZCwgQ2hhcmFjdGVyR3JhbnVsYXJpdHkpOwogICAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgICAgLy8gSWYgdGhpcyBmYWlscyBmb3IgYW55IHJlYXNvbiwgdGhlIGZhbGxi
YWNrIGlzIHRvIGdvIG9uZSBwb3NpdGlvbiBiZXlvbmQgdGhlIGxhc3QgcmVwbGFjZW1lbnQKLSAg
ICAgICAgICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkubW92ZVRvKG1fZnJhbWUuc2VsZWN0aW9uKCku
ZW5kKCkpOworICAgICAgICAgICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5tb3ZlVG8obV9mcmFtZS5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5lbmQoKSk7CiAgICAgICAgICAgICBtX2ZyYW1lLnNlbGVj
dGlvbigpLm1vZGlmeShGcmFtZVNlbGVjdGlvbjo6QWx0ZXJhdGlvbk1vdmUsIERpcmVjdGlvbkZv
cndhcmQsIENoYXJhY3RlckdyYW51bGFyaXR5KTsKICAgICAgICAgfQogICAgIH0KQEAgLTI4MjIs
MTAgKzI4MjQsMTEgQEAgYm9vbCBFZGl0b3I6OmdldENvbXBvc2l0aW9uU2VsZWN0aW9uKHVucwog
ewogICAgIGlmICghbV9jb21wb3NpdGlvbk5vZGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICBQb3NpdGlvbiBzdGFydCA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc3RhcnQoKTsKKyAgICBjb25z
dCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpOworICAgIFBvc2l0aW9uIHN0YXJ0ID0gc2VsZWN0aW9uLnN0YXJ0KCk7CiAgICAgaWYg
KHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCkgIT0gbV9jb21wb3NpdGlvbk5vZGUpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICBQb3NpdGlvbiBlbmQgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLmVuZCgp
OworICAgIFBvc2l0aW9uIGVuZCA9IHNlbGVjdGlvbi5lbmQoKTsKICAgICBpZiAoZW5kLmRlcHJl
Y2F0ZWROb2RlKCkgIT0gbV9jb21wb3NpdGlvbk5vZGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IApAQCAtMzM4Miw3ICszMzg1LDcgQEAgc3RhdGljIE5vZGUqIGZpbmRGaXJzdE1hcmthYmxlKE5v
ZGUqIG5vZAogCiBib29sIEVkaXRvcjo6c2VsZWN0aW9uU3RhcnRIYXNNYXJrZXJGb3IoRG9jdW1l
bnRNYXJrZXI6Ok1hcmtlclR5cGUgbWFya2VyVHlwZSwgaW50IGZyb20sIGludCBsZW5ndGgpIGNv
bnN0CiB7Ci0gICAgTm9kZSogbm9kZSA9IGZpbmRGaXJzdE1hcmthYmxlKG1fZnJhbWUuc2VsZWN0
aW9uKCkuc3RhcnQoKS5kZXByZWNhdGVkTm9kZSgpKTsKKyAgICBOb2RlKiBub2RlID0gZmluZEZp
cnN0TWFya2FibGUobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpLmRlcHJl
Y2F0ZWROb2RlKCkpOwogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAJKHJldmlzaW9uIDE2
MzEyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIxNSw4ICsyMTUsOCBAQCBzdGF0aWMgYm9vbCBleHBhbmRTZWxlY3Rpb25U
b0dyYW51bGFyaXR5CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAobmV3UmFuZ2UtPmNv
bGxhcHNlZChJR05PUkVfRVhDRVBUSU9OKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIFJl
ZlB0cjxSYW5nZT4gb2xkUmFuZ2UgPSBmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05v
cm1hbGl6ZWRSYW5nZSgpOwotICAgIEVBZmZpbml0eSBhZmZpbml0eSA9IGZyYW1lLnNlbGVjdGlv
bigpLmFmZmluaXR5KCk7CisgICAgUmVmUHRyPFJhbmdlPiBvbGRSYW5nZSA9IHNlbGVjdGlvbi50
b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIEVBZmZpbml0eSBhZmZpbml0eSA9IHNlbGVjdGlvbi5h
ZmZpbml0eSgpOwogICAgIGlmICghZnJhbWUuZWRpdG9yKCkuY2xpZW50KCktPnNob3VsZENoYW5n
ZVNlbGVjdGVkUmFuZ2Uob2xkUmFuZ2UuZ2V0KCksIG5ld1JhbmdlLmdldCgpLCBhZmZpbml0eSwg
ZmFsc2UpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0
U2VsZWN0ZWRSYW5nZShuZXdSYW5nZS5nZXQoKSwgYWZmaW5pdHksIHRydWUpOwpAQCAtMTI5Nyw3
ICsxMjk3LDggQEAgc3RhdGljIGJvb2wgZW5hYmxlZEluRWRpdGFibGVUZXh0T3JDYXJldAogCiBz
dGF0aWMgYm9vbCBlbmFibGVkSW5SaWNobHlFZGl0YWJsZVRleHQoRnJhbWUmIGZyYW1lLCBFdmVu
dCosIEVkaXRvckNvbW1hbmRTb3VyY2UpCiB7Ci0gICAgcmV0dXJuIGZyYW1lLnNlbGVjdGlvbigp
LmlzQ2FyZXRPclJhbmdlKCkgJiYgZnJhbWUuc2VsZWN0aW9uKCkuaXNDb250ZW50UmljaGx5RWRp
dGFibGUoKSAmJiBmcmFtZS5zZWxlY3Rpb24oKS5yb290RWRpdGFibGVFbGVtZW50KCk7CisgICAg
Y29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0gZnJhbWUuc2VsZWN0aW9uKCkuc2Vs
ZWN0aW9uKCk7CisgICAgcmV0dXJuIHNlbGVjdGlvbi5pc0NhcmV0T3JSYW5nZSgpICYmIHNlbGVj
dGlvbi5pc0NvbnRlbnRSaWNobHlFZGl0YWJsZSgpICYmIHNlbGVjdGlvbi5yb290RWRpdGFibGVF
bGVtZW50KCk7CiB9CiAKIHN0YXRpYyBib29sIGVuYWJsZWRQYXN0ZShGcmFtZSYgZnJhbWUsIEV2
ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSkKQEAgLTEzMDcsMTIgKzEzMDgsMTIgQEAgc3RhdGlj
IGJvb2wgZW5hYmxlZFBhc3RlKEZyYW1lJiBmcmFtZSwgRQogCiBzdGF0aWMgYm9vbCBlbmFibGVk
UmFuZ2VJbkVkaXRhYmxlVGV4dChGcmFtZSYgZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNv
dXJjZSkKIHsKLSAgICByZXR1cm4gZnJhbWUuc2VsZWN0aW9uKCkuaXNSYW5nZSgpICYmIGZyYW1l
LnNlbGVjdGlvbigpLmlzQ29udGVudEVkaXRhYmxlKCk7CisgICAgcmV0dXJuIGZyYW1lLnNlbGVj
dGlvbigpLmlzUmFuZ2UoKSAmJiBmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0NvbnRl
bnRFZGl0YWJsZSgpOwogfQogCiBzdGF0aWMgYm9vbCBlbmFibGVkUmFuZ2VJblJpY2hseUVkaXRh
YmxlVGV4dChGcmFtZSYgZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSkKIHsKLSAg
ICByZXR1cm4gZnJhbWUuc2VsZWN0aW9uKCkuaXNSYW5nZSgpICYmIGZyYW1lLnNlbGVjdGlvbigp
LmlzQ29udGVudFJpY2hseUVkaXRhYmxlKCk7CisgICAgcmV0dXJuIGZyYW1lLnNlbGVjdGlvbigp
LmlzUmFuZ2UoKSAmJiBmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0NvbnRlbnRSaWNo
bHlFZGl0YWJsZSgpOwogfQogCiBzdGF0aWMgYm9vbCBlbmFibGVkUmVkbyhGcmFtZSYgZnJhbWUs
IEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvRnJhbWVTZWxlY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvRnJhbWVTZWxlY3Rpb24uY3BwCShyZXZpc2lvbiAxNjMxMjgpCisrKyBTb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMwNyw3ICsx
MzA3LDcgQEAgc3RhdGljIFJlbmRlck9iamVjdCogY2FyZXRSZW5kZXJlcihOb2RlKgogCiBib29s
IENhcmV0QmFzZTo6dXBkYXRlQ2FyZXRSZWN0KERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgVmlz
aWJsZVBvc2l0aW9uJiBjYXJldFBvc2l0aW9uKQogewotICAgIGRvY3VtZW50LT51cGRhdGVTdHls
ZUlmTmVlZGVkKCk7CisgICAgZG9jdW1lbnQtPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHls
ZXNoZWV0cygpOwogICAgIG1fY2FyZXRMb2NhbFJlY3QgPSBMYXlvdXRSZWN0KCk7CiAKICAgICBt
X2NhcmV0UmVjdE5lZWRzVXBkYXRlID0gZmFsc2U7CkBAIC0xNDI2LDcgKzE0MjYsNyBAQCBib29s
IEZyYW1lU2VsZWN0aW9uOjpyZWNvbXB1dGVDYXJldFJlY3QoCiAKICNpZiBFTkFCTEUoVEVYVF9D
QVJFVCkKICAgICBpZiAoUmVuZGVyVmlldyogdmlldyA9IG1fZnJhbWUtPmRvY3VtZW50KCktPnJl
bmRlclZpZXcoKSkgewotICAgICAgICBib29sIHByZXZpb3VzT3JOZXdDYXJldE5vZGVJc0NvbnRl
bnRFZGl0YWJsZSA9IGlzQ29udGVudEVkaXRhYmxlKCkgfHwgKG1fcHJldmlvdXNDYXJldE5vZGUg
JiYgbV9wcmV2aW91c0NhcmV0Tm9kZS0+aXNDb250ZW50RWRpdGFibGUoKSk7CisgICAgICAgIGJv
b2wgcHJldmlvdXNPck5ld0NhcmV0Tm9kZUlzQ29udGVudEVkaXRhYmxlID0gbV9zZWxlY3Rpb24u
aXNDb250ZW50RWRpdGFibGUoKSB8fCAobV9wcmV2aW91c0NhcmV0Tm9kZSAmJiBtX3ByZXZpb3Vz
Q2FyZXROb2RlLT5pc0NvbnRlbnRFZGl0YWJsZSgpKTsKICAgICAgICAgaWYgKHNob3VsZFJlcGFp
bnRDYXJldCh2aWV3LCBwcmV2aW91c09yTmV3Q2FyZXROb2RlSXNDb250ZW50RWRpdGFibGUpKSB7
CiAgICAgICAgICAgICBpZiAobV9wcmV2aW91c0NhcmV0Tm9kZSkKICAgICAgICAgICAgICAgICBy
ZXBhaW50Q2FyZXRGb3JMb2NhbFJlY3QobV9wcmV2aW91c0NhcmV0Tm9kZS5nZXQoKSwgb2xkUmVj
dCk7CkBAIC0xNjc1LDcgKzE2NzUsNyBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpzZWxlY3RBbGwo
KQogCiAgICAgUmVmUHRyPE5vZGU+IHJvb3QgPSAwOwogICAgIE5vZGUqIHNlbGVjdFN0YXJ0VGFy
Z2V0ID0gMDsKLSAgICBpZiAoaXNDb250ZW50RWRpdGFibGUoKSkgeworICAgIGlmIChtX3NlbGVj
dGlvbi5pc0NvbnRlbnRFZGl0YWJsZSgpKSB7CiAgICAgICAgIHJvb3QgPSBoaWdoZXN0RWRpdGFi
bGVSb290KG1fc2VsZWN0aW9uLnN0YXJ0KCkpOwogICAgICAgICBpZiAoTm9kZSogc2hhZG93Um9v
dCA9IG1fc2VsZWN0aW9uLm5vbkJvdW5kYXJ5U2hhZG93VHJlZVJvb3ROb2RlKCkpCiAgICAgICAg
ICAgICBzZWxlY3RTdGFydFRhcmdldCA9IHNoYWRvd1Jvb3QtPnNoYWRvd0hvc3QoKTsKQEAgLTE3
MzMsMTIgKzE3MzMsNiBAQCBib29sIEZyYW1lU2VsZWN0aW9uOjpzZXRTZWxlY3RlZFJhbmdlKFJh
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgRnJhbWVTZWxlY3Rpb246OmlzSW5QYXNzd29y
ZEZpZWxkKCkgY29uc3QKLXsKLSAgICBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudCogdGV4dENv
bnRyb2wgPSBlbmNsb3NpbmdUZXh0Rm9ybUNvbnRyb2woc3RhcnQoKSk7Ci0gICAgcmV0dXJuIHRl
eHRDb250cm9sICYmIGlzSFRNTElucHV0RWxlbWVudCh0ZXh0Q29udHJvbCkgJiYgdG9IVE1MSW5w
dXRFbGVtZW50KHRleHRDb250cm9sKS0+aXNQYXNzd29yZEZpZWxkKCk7Ci19Ci0KIHZvaWQgRnJh
bWVTZWxlY3Rpb246OmZvY3VzZWRPckFjdGl2ZVN0YXRlQ2hhbmdlZCgpCiB7CiAgICAgYm9vbCBh
Y3RpdmVBbmRGb2N1c2VkID0gaXNGb2N1c2VkQW5kQWN0aXZlKCk7CkBAIC0xODEzLDggKzE4MDcs
OSBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjp1cGRhdGVBcHBlYXJhbmNlKCkKIAogICAgIC8vIFBh
aW50IGEgYmxvY2sgY3Vyc29yIGluc3RlYWQgb2YgYSBjYXJldCBpbiBvdmVydHlwZSBtb2RlIHVu
bGVzcyB0aGUgY2FyZXQgaXMgYXQgdGhlIGVuZCBvZiBhIGxpbmUgKGluIHRoaXMgY2FzZQogICAg
IC8vIHRoZSBGcmFtZVNlbGVjdGlvbiB3aWxsIHBhaW50IGEgYmxpbmtpbmcgY2FyZXQgYXMgdXN1
YWwpLgorICAgIFZpc2libGVTZWxlY3Rpb24gb2xkU2VsZWN0aW9uID0gc2VsZWN0aW9uKCk7CiAg
ICAgVmlzaWJsZVBvc2l0aW9uIGZvcndhcmRQb3NpdGlvbjsKLSAgICBpZiAobV9zaG91bGRTaG93
QmxvY2tDdXJzb3IgJiYgbV9zZWxlY3Rpb24uaXNDYXJldCgpKSB7CisgICAgaWYgKG1fc2hvdWxk
U2hvd0Jsb2NrQ3Vyc29yICYmIG9sZFNlbGVjdGlvbi5pc0NhcmV0KCkpIHsKICAgICAgICAgZm9y
d2FyZFBvc2l0aW9uID0gbW9kaWZ5RXh0ZW5kaW5nRm9yd2FyZChDaGFyYWN0ZXJHcmFudWxhcml0
eSk7CiAgICAgICAgIG1fY2FyZXRQYWludCA9IGZvcndhcmRQb3NpdGlvbi5pc051bGwoKTsKICAg
ICB9CkBAIC0xODIzLDcgKzE4MTgsNyBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjp1cGRhdGVBcHBl
YXJhbmNlKCkKICAgICBib29sIGNhcmV0UmVjdENoYW5nZWRPckNsZWFyZWQgPSByZWNvbXB1dGVD
YXJldFJlY3QoKTsKIAogICAgIGJvb2wgY2FyZXRCcm93c2luZyA9IG1fZnJhbWUtPnNldHRpbmdz
KCkuY2FyZXRCcm93c2luZ0VuYWJsZWQoKTsKLSAgICBib29sIHNob3VsZEJsaW5rID0gY2FyZXRJ
c1Zpc2libGUoKSAmJiBpc0NhcmV0KCkgJiYgKGlzQ29udGVudEVkaXRhYmxlKCkgfHwgY2FyZXRC
cm93c2luZykgJiYgZm9yd2FyZFBvc2l0aW9uLmlzTnVsbCgpOworICAgIGJvb2wgc2hvdWxkQmxp
bmsgPSBjYXJldElzVmlzaWJsZSgpICYmIGlzQ2FyZXQoKSAmJiAob2xkU2VsZWN0aW9uLmlzQ29u
dGVudEVkaXRhYmxlKCkgfHwgY2FyZXRCcm93c2luZykgJiYgZm9yd2FyZFBvc2l0aW9uLmlzTnVs
bCgpOwogCiAgICAgLy8gSWYgdGhlIGNhcmV0IG1vdmVkLCBzdG9wIHRoZSBibGluayB0aW1lciBz
byB3ZSBjYW4gcmVzdGFydCB3aXRoIGEKICAgICAvLyBibGFjayBjYXJldCBpbiB0aGUgbmV3IGxv
Y2F0aW9uLgpAQCAtMTg0OSw3ICsxODQ0LDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6dXBkYXRl
QXBwZWFyYW5jZSgpCiAKICAgICAvLyBDb25zdHJ1Y3QgYSBuZXcgVmlzaWJsZVNvbHV0aW9uLCBz
aW5jZSBtX3NlbGVjdGlvbiBpcyBub3QgbmVjZXNzYXJpbHkgdmFsaWQsIGFuZCB0aGUgZm9sbG93
aW5nIHN0ZXBzCiAgICAgLy8gYXNzdW1lIGEgdmFsaWQgc2VsZWN0aW9uLiBTZWUgPGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02OTU2Mz4gYW5kIDxyZGFyOi8vcHJvYmxl
bS8xMDIzMjg2Nj4uCi0gICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24obV9zZWxlY3Rpb24u
dmlzaWJsZVN0YXJ0KCksIGZvcndhcmRQb3NpdGlvbi5pc05vdE51bGwoKSA/IGZvcndhcmRQb3Np
dGlvbiA6IG1fc2VsZWN0aW9uLnZpc2libGVFbmQoKSk7CisgICAgVmlzaWJsZVNlbGVjdGlvbiBz
ZWxlY3Rpb24ob2xkU2VsZWN0aW9uLnZpc2libGVTdGFydCgpLCBmb3J3YXJkUG9zaXRpb24uaXNO
b3ROdWxsKCkgPyBmb3J3YXJkUG9zaXRpb24gOiBvbGRTZWxlY3Rpb24udmlzaWJsZUVuZCgpKTsK
IAogICAgIGlmICghc2VsZWN0aW9uLmlzUmFuZ2UoKSkgewogICAgICAgICB2aWV3LT5jbGVhclNl
bGVjdGlvbigpOwpAQCAtMTkxMiw3ICsxOTA3LDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6Y2Fy
ZXRCbGlua1RpbWVyRmlyZQogCiB2b2lkIEZyYW1lU2VsZWN0aW9uOjp1cGRhdGVTZWxlY3Rpb25D
YWNoZXNJZlNlbGVjdGlvbklzSW5zaWRlVGV4dEZvcm1Db250cm9sKEVVc2VyVHJpZ2dlcmVkIHVz
ZXJUcmlnZ2VyZWQpCiB7Ci0gICAgaWYgKEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50KiB0ZXh0
Q29udHJvbCA9IGVuY2xvc2luZ1RleHRGb3JtQ29udHJvbChzdGFydCgpKSkKKyAgICBpZiAoSFRN
TFRleHRGb3JtQ29udHJvbEVsZW1lbnQqIHRleHRDb250cm9sID0gZW5jbG9zaW5nVGV4dEZvcm1D
b250cm9sKG1fc2VsZWN0aW9uLnN0YXJ0KCkpKQogICAgICAgICB0ZXh0Q29udHJvbC0+c2VsZWN0
aW9uQ2hhbmdlZCh1c2VyVHJpZ2dlcmVkID09IFVzZXJUcmlnZ2VyZWQpOwogfQogCkBAIC0xOTM2
LDEzICsxOTMxLDEzIEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnNldEZvY3VzZWRFbGVtZW50SWYK
IAogICAgIGJvb2wgY2FyZXRCcm93c2luZyA9IG1fZnJhbWUtPnNldHRpbmdzKCkuY2FyZXRCcm93
c2luZ0VuYWJsZWQoKTsKICAgICBpZiAoY2FyZXRCcm93c2luZykgewotICAgICAgICBpZiAoRWxl
bWVudCogYW5jaG9yID0gZW5jbG9zaW5nQW5jaG9yRWxlbWVudChiYXNlKCkpKSB7CisgICAgICAg
IGlmIChFbGVtZW50KiBhbmNob3IgPSBlbmNsb3NpbmdBbmNob3JFbGVtZW50KG1fc2VsZWN0aW9u
LmJhc2UoKSkpIHsKICAgICAgICAgICAgIG1fZnJhbWUtPnBhZ2UoKS0+Zm9jdXNDb250cm9sbGVy
KCkuc2V0Rm9jdXNlZEVsZW1lbnQoYW5jaG9yLCBtX2ZyYW1lKTsKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChFbGVtZW50KiB0YXJnZXQgPSByb290RWRp
dGFibGVFbGVtZW50KCkpIHsKKyAgICBpZiAoRWxlbWVudCogdGFyZ2V0ID0gbV9zZWxlY3Rpb24u
cm9vdEVkaXRhYmxlRWxlbWVudCgpKSB7CiAgICAgICAgIC8vIFdhbGsgdXAgdGhlIERPTSB0cmVl
IHRvIHNlYXJjaCBmb3IgYW4gZWxlbWVudCB0byBmb2N1cy4KICAgICAgICAgd2hpbGUgKHRhcmdl
dCkgewogICAgICAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBzZXQgZm9jdXMgb24gYSBzdWJm
cmFtZSB3aGVuIHNlbGVjdGluZyBpbiBhIHBhcmVudCBmcmFtZSwKQEAgLTIwNTQsNyArMjA0OSw3
IEBAIEhUTUxGb3JtRWxlbWVudCogRnJhbWVTZWxlY3Rpb246OmN1cnJlbnQKICAgICAvLyBTdGFy
dCBsb29raW5nIGVpdGhlciBhdCB0aGUgYWN0aXZlIChmaXJzdCByZXNwb25kZXIpIG5vZGUsIG9y
IHdoZXJlIHRoZSBzZWxlY3Rpb24gaXMuCiAgICAgRWxlbWVudCogc3RhcnQgPSBtX2ZyYW1lLT5k
b2N1bWVudCgpLT5mb2N1c2VkRWxlbWVudCgpOwogICAgIGlmICghc3RhcnQpCi0gICAgICAgIHN0
YXJ0ID0gdGhpcy0+c3RhcnQoKS5lbGVtZW50KCk7CisgICAgICAgIHN0YXJ0ID0gbV9zZWxlY3Rp
b24uc3RhcnQoKS5lbGVtZW50KCk7CiAgICAgaWYgKCFzdGFydCkKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAKQEAgLTIwNzEsMTggKzIwNjYsMTggQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6cmV2
ZWFsU2VsZWN0aW9uKGNvbgogewogICAgIExheW91dFJlY3QgcmVjdDsKIAotICAgIHN3aXRjaCAo
c2VsZWN0aW9uVHlwZSgpKSB7CisgICAgc3dpdGNoIChtX3NlbGVjdGlvbi5zZWxlY3Rpb25UeXBl
KCkpIHsKICAgICBjYXNlIFZpc2libGVTZWxlY3Rpb246Ok5vU2VsZWN0aW9uOgogICAgICAgICBy
ZXR1cm47CiAgICAgY2FzZSBWaXNpYmxlU2VsZWN0aW9uOjpDYXJldFNlbGVjdGlvbjoKICAgICAg
ICAgcmVjdCA9IGFic29sdXRlQ2FyZXRCb3VuZHMoKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2Fz
ZSBWaXNpYmxlU2VsZWN0aW9uOjpSYW5nZVNlbGVjdGlvbjoKLSAgICAgICAgcmVjdCA9IHJldmVh
bEV4dGVudE9wdGlvbiA9PSBSZXZlYWxFeHRlbnQgPyBWaXNpYmxlUG9zaXRpb24oZXh0ZW50KCkp
LmFic29sdXRlQ2FyZXRCb3VuZHMoKSA6IGVuY2xvc2luZ0ludFJlY3QoYm91bmRzKGZhbHNlKSk7
CisgICAgICAgIHJlY3QgPSByZXZlYWxFeHRlbnRPcHRpb24gPT0gUmV2ZWFsRXh0ZW50ID8gVmlz
aWJsZVBvc2l0aW9uKG1fc2VsZWN0aW9uLmV4dGVudCgpKS5hYnNvbHV0ZUNhcmV0Qm91bmRzKCkg
OiBlbmNsb3NpbmdJbnRSZWN0KGJvdW5kcyhmYWxzZSkpOwogICAgICAgICBicmVhazsKICAgICB9
CiAKLSAgICBQb3NpdGlvbiBzdGFydCA9IHRoaXMtPnN0YXJ0KCk7CisgICAgUG9zaXRpb24gc3Rh
cnQgPSBtX3NlbGVjdGlvbi5zdGFydCgpOwogICAgIEFTU0VSVChzdGFydC5kZXByZWNhdGVkTm9k
ZSgpKTsKICAgICBpZiAoc3RhcnQuZGVwcmVjYXRlZE5vZGUoKSAmJiBzdGFydC5kZXByZWNhdGVk
Tm9kZSgpLT5yZW5kZXJlcigpKSB7CiAjaWYgUExBVEZPUk0oSU9TKQpAQCAtMjExNyw3ICsyMTEy
LDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6c2V0U2VsZWN0aW9uRnJvbU5vbgogICAgIGlmICgh
aXNOb25lKCkgfHwgIShkb2N1bWVudC0+aGFzRWRpdGFibGVTdHlsZSgpIHx8IGNhcmV0QnJvd3Np
bmcpKQogICAgICAgICByZXR1cm47CiAjZWxzZQotICAgIGlmICghZG9jdW1lbnQgfHwgIShpc05v
bmUoKSB8fCBpc1N0YXJ0T2ZEb2N1bWVudChWaXNpYmxlUG9zaXRpb24oc2VsZWN0aW9uKCkuc3Rh
cnQoKSwgc2VsZWN0aW9uKCkuYWZmaW5pdHkoKSkpKSB8fCAhZG9jdW1lbnQtPmhhc0VkaXRhYmxl
U3R5bGUoKSkKKyAgICBpZiAoIWRvY3VtZW50IHx8ICEoaXNOb25lKCkgfHwgaXNTdGFydE9mRG9j
dW1lbnQoVmlzaWJsZVBvc2l0aW9uKG1fc2VsZWN0aW9uLnN0YXJ0KCksIG1fc2VsZWN0aW9uLmFm
ZmluaXR5KCkpKSkgfHwgIWRvY3VtZW50LT5oYXNFZGl0YWJsZVN0eWxlKCkpCiAgICAgICAgIHJl
dHVybjsKICNlbmRpZgogCkBAIC0yNDMxLDggKzI0MjYsOCBAQCBWaXNpYmxlU2VsZWN0aW9uIEZy
YW1lU2VsZWN0aW9uOjp3b3JkU2VsCiAgICAgbmV3U2VsZWN0aW9uLmV4cGFuZFVzaW5nR3JhbnVs
YXJpdHkoV29yZEdyYW51bGFyaXR5KTsKICAgICBmcmFtZVNlbGVjdGlvbi5zZXRTZWxlY3Rpb24o
bmV3U2VsZWN0aW9uLCBDbG9zZVR5cGluZyB8IENsZWFyVHlwaW5nU3R5bGUsIEFsaWduQ3Vyc29y
T25TY3JvbGxJZk5lZWRlZCwgZnJhbWVTZWxlY3Rpb24uZ3JhbnVsYXJpdHkoKSk7CiAKLSAgICBQ
b3NpdGlvbiBzdGFydFBvcyhmcmFtZVNlbGVjdGlvbi5zZWxlY3Rpb24oKS5zdGFydCgpKTsKLSAg
ICBQb3NpdGlvbiBlbmRQb3MoZnJhbWVTZWxlY3Rpb24uc2VsZWN0aW9uKCkuZW5kKCkpOworICAg
IFBvc2l0aW9uIHN0YXJ0UG9zKGZyYW1lU2VsZWN0aW9uLnNlbGVjdGlvbigpLnNlbGVjdGlvbigp
LnN0YXJ0KCkpOworICAgIFBvc2l0aW9uIGVuZFBvcyhmcmFtZVNlbGVjdGlvbi5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKS5lbmQoKSk7CiAKICAgICAvLyBFeHBhbnNpb24gY2Fubm90IGJlIGFsbG93
ZWQgdG8gY2hhbmdlIHNlbGVjdGlvbiBzbyB0aGF0IGl0IGlzIG5vIGxvbmdlcgogICAgIC8vIHRv
dWNoZXMgKG9yIGNvbnRhaW5zKSB0aGUgb3JpZ2luYWwsIHVuZXhwYW5kZWQgc2VsZWN0aW9uLgpA
QCAtMjQ3OSw4ICsyNDc0LDggQEAgVmlzaWJsZVNlbGVjdGlvbiBGcmFtZVNlbGVjdGlvbjo6d29y
ZFNlbAogICAgICAgICB9CiAgICAgICAgIGZyYW1lU2VsZWN0aW9uLm1vdmVUbyhzdGFydFZpc2li
bGVQb3MpOwogICAgICAgICBmcmFtZVNlbGVjdGlvbi5tb2RpZnkoRnJhbWVTZWxlY3Rpb246OkFs
dGVyYXRpb25FeHRlbmQsIERpcmVjdGlvbkJhY2t3YXJkLCBXb3JkR3JhbnVsYXJpdHkpOwotICAg
ICAgICBzdGFydFBvcyA9IGZyYW1lU2VsZWN0aW9uLnNlbGVjdGlvbigpLnN0YXJ0KCk7Ci0gICAg
ICAgIGVuZFBvcyA9IGZyYW1lU2VsZWN0aW9uLnNlbGVjdGlvbigpLmVuZCgpOworICAgICAgICBz
dGFydFBvcyA9IGZyYW1lU2VsZWN0aW9uLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCk7
CisgICAgICAgIGVuZFBvcyA9IGZyYW1lU2VsZWN0aW9uLnNlbGVjdGlvbigpLnNlbGVjdGlvbigp
LmVuZCgpOwogICAgICAgICBzdGFydFZpc2libGVQb3MgPSBWaXNpYmxlUG9zaXRpb24oc3RhcnRQ
b3MsIFZQX0RFRkFVTFRfQUZGSU5JVFkpOwogICAgICAgICBlbmRWaXNpYmxlUG9zID0gVmlzaWJs
ZVBvc2l0aW9uKGVuZFBvcywgVlBfREVGQVVMVF9BRkZJTklUWSk7CiAgICAgICAgIGlmIChzdGFy
dFZpc2libGVQb3MuaXNOdWxsKCkgfHwgZW5kVmlzaWJsZVBvcy5pc051bGwoKSkgewpJbmRleDog
U291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uaAkocmV2aXNpb24gMTYzMTI4KQor
KysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xMzUsMTIgKzEzNSw3IEBAIHB1YmxpYzoKIAogICAgIGV4cGxpY2l0IEZyYW1lU2VsZWN0
aW9uKEZyYW1lKiA9IDApOwogCi0gICAgRWxlbWVudCogcm9vdEVkaXRhYmxlRWxlbWVudCgpIGNv
bnN0IHsgcmV0dXJuIG1fc2VsZWN0aW9uLnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsgfQogICAgIEVs
ZW1lbnQqIHJvb3RFZGl0YWJsZUVsZW1lbnRPckRvY3VtZW50RWxlbWVudCgpIGNvbnN0OwotCi0g
ICAgYm9vbCBoYXNFZGl0YWJsZVN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3Rpb24uaGFz
RWRpdGFibGVTdHlsZSgpOyB9Ci0gICAgYm9vbCBpc0NvbnRlbnRFZGl0YWJsZSgpIGNvbnN0IHsg
cmV0dXJuIG1fc2VsZWN0aW9uLmlzQ29udGVudEVkaXRhYmxlKCk7IH0KLSAgICBib29sIGlzQ29u
dGVudFJpY2hseUVkaXRhYmxlKCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3Rpb24uaXNDb250ZW50
UmljaGx5RWRpdGFibGUoKTsgfQogICAgICAKICAgICB2b2lkIG1vdmVUbyhjb25zdCBSYW5nZSos
IEVBZmZpbml0eSwgRVVzZXJUcmlnZ2VyZWQgPSBOb3RVc2VyVHJpZ2dlcmVkKTsKICAgICB2b2lk
IG1vdmVUbyhjb25zdCBWaXNpYmxlUG9zaXRpb24mLCBFVXNlclRyaWdnZXJlZCA9IE5vdFVzZXJU
cmlnZ2VyZWQsIEN1cnNvckFsaWduT25TY3JvbGwgPSBBbGlnbkN1cnNvck9uU2Nyb2xsSWZOZWVk
ZWQpOwpAQCAtMTU3LDEwICsxNTIsNiBAQCBwdWJsaWM6CiAKICAgICBib29sIGNvbnRhaW5zKGNv
bnN0IExheW91dFBvaW50Jik7CiAKLSAgICBWaXNpYmxlU2VsZWN0aW9uOjpTZWxlY3Rpb25UeXBl
IHNlbGVjdGlvblR5cGUoKSBjb25zdCB7IHJldHVybiBtX3NlbGVjdGlvbi5zZWxlY3Rpb25UeXBl
KCk7IH0KLQotICAgIEVBZmZpbml0eSBhZmZpbml0eSgpIGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0
aW9uLmFmZmluaXR5KCk7IH0KLQogICAgIGJvb2wgbW9kaWZ5KEVBbHRlcmF0aW9uLCBTZWxlY3Rp
b25EaXJlY3Rpb24sIFRleHRHcmFudWxhcml0eSwgRVVzZXJUcmlnZ2VyZWQgPSBOb3RVc2VyVHJp
Z2dlcmVkKTsKICAgICBlbnVtIFZlcnRpY2FsRGlyZWN0aW9uIHsgRGlyZWN0aW9uVXAsIERpcmVj
dGlvbkRvd24gfTsKICAgICBib29sIG1vZGlmeShFQWx0ZXJhdGlvbiwgdW5zaWduZWQgdmVydGlj
YWxEaXN0YW5jZSwgVmVydGljYWxEaXJlY3Rpb24sIEVVc2VyVHJpZ2dlcmVkID0gTm90VXNlclRy
aWdnZXJlZCwgQ3Vyc29yQWxpZ25PblNjcm9sbCA9IEFsaWduQ3Vyc29yT25TY3JvbGxJZk5lZWRl
ZCk7CkBAIC0xNzUsOSArMTY2LDYgQEAgcHVibGljOgogICAgIHZvaWQgc2V0RXh0ZW50KGNvbnN0
IFZpc2libGVQb3NpdGlvbiYsIEVVc2VyVHJpZ2dlcmVkID0gTm90VXNlclRyaWdnZXJlZCk7CiAg
ICAgdm9pZCBzZXRFeHRlbnQoY29uc3QgUG9zaXRpb24mLCBFQWZmaW5pdHksIEVVc2VyVHJpZ2dl
cmVkID0gTm90VXNlclRyaWdnZXJlZCk7CiAKLSAgICBQb3NpdGlvbiBiYXNlKCkgY29uc3QgeyBy
ZXR1cm4gbV9zZWxlY3Rpb24uYmFzZSgpOyB9Ci0gICAgUG9zaXRpb24gZXh0ZW50KCkgY29uc3Qg
eyByZXR1cm4gbV9zZWxlY3Rpb24uZXh0ZW50KCk7IH0KLSAgICBQb3NpdGlvbiBzdGFydCgpIGNv
bnN0IHsgcmV0dXJuIG1fc2VsZWN0aW9uLnN0YXJ0KCk7IH0KICAgICBQb3NpdGlvbiBlbmQoKSBj
b25zdCB7IHJldHVybiBtX3NlbGVjdGlvbi5lbmQoKTsgfQogCiAgICAgLy8gUmV0dXJuIHRoZSBy
ZW5kZXJlciB0aGF0IGlzIHJlc3BvbnNpYmxlIGZvciBwYWludGluZyB0aGUgY2FyZXQgKGluIHRo
ZSBzZWxlY3Rpb24gc3RhcnQgbm9kZSkKQEAgLTE5Niw3ICsxODQsNiBAQCBwdWJsaWM6CiAgICAg
Ym9vbCBpc0NhcmV0KCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3Rpb24uaXNDYXJldCgpOyB9CiAg
ICAgYm9vbCBpc1JhbmdlKCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3Rpb24uaXNSYW5nZSgpOyB9
CiAgICAgYm9vbCBpc0NhcmV0T3JSYW5nZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0aW9uLmlz
Q2FyZXRPclJhbmdlKCk7IH0KLSAgICBib29sIGlzSW5QYXNzd29yZEZpZWxkKCkgY29uc3Q7CiAg
ICAgYm9vbCBpc0FsbChFZGl0aW5nQm91bmRhcnlDcm9zc2luZ1J1bGUgcnVsZSA9IENhbm5vdENy
b3NzRWRpdGluZ0JvdW5kYXJ5KSBjb25zdCB7IHJldHVybiBtX3NlbGVjdGlvbi5pc0FsbChydWxl
KTsgfQogICAgIAogICAgIFBhc3NSZWZQdHI8UmFuZ2U+IHRvTm9ybWFsaXplZFJhbmdlKCkgY29u
c3QgeyByZXR1cm4gbV9zZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsgfQpAQCAtMzM1LDYg
KzMyMiw3IEBAIHByaXZhdGU6CiAgICAgTGF5b3V0VW5pdCBtX3hQb3NGb3JWZXJ0aWNhbEFycm93
TmF2aWdhdGlvbjsKIAogICAgIFZpc2libGVTZWxlY3Rpb24gbV9zZWxlY3Rpb247CisgICAgbXV0
YWJsZSBWaXNpYmxlU2VsZWN0aW9uIG1fdmFsaWRhdGVkU2VsZWN0aW9uQ2FjaGU7CiAgICAgVmlz
aWJsZVBvc2l0aW9uIG1fb3JpZ2luYWxCYXNlOyAvLyBVc2VkIHRvIHN0b3JlIGJhc2UgYmVmb3Jl
IHRoZSBhZGp1c3RtZW50IGF0IGJpZGkgYm91bmRhcnkKICAgICBUZXh0R3JhbnVsYXJpdHkgbV9n
cmFudWxhcml0eTsKIApAQCAtMzUyLDcgKzM0MCw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX3No
b3VsZFNob3dCbG9ja0N1cnNvciA6IDE7CiAKICNpZiBQTEFURk9STShJT1MpCi0gICAgYm9vbCBt
X3VwZGF0ZUFwcGVhcmFuY2VFbmFibGVkIDogMTsKKyAgICBib29sIG1fdXBkYXRlQXBwZWFyYW5j
ZUVuYWJsZWQgOiAxO0RyYWdDb250cm9sbGVyLmNwcAogICAgIGJvb2wgbV9jYXJldEJsaW5rcyA6
IDE7CiAgICAgQ29sb3IgbV9jYXJldENvbG9yOwogICAgIGludCBtX2Nsb3NlVHlwaW5nU3VwcHJl
c3Npb25zOwpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZW1vdmVGb3JtYXRDb21tYW5k
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlbW92ZUZvcm1hdENv
bW1hbmQuY3BwCShyZXZpc2lvbiAxNjMxMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Jl
bW92ZUZvcm1hdENvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NywxMiArNzcsMTIgQEAg
c3RhdGljIGJvb2wgaXNFbGVtZW50Rm9yUmVtb3ZlRm9ybWF0Q29tbQogCiB2b2lkIFJlbW92ZUZv
cm1hdENvbW1hbmQ6OmRvQXBwbHkoKQogewotICAgIGlmICghZnJhbWUoKS5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKS5pc05vbk9ycGhhbmVkQ2FyZXRPclJhbmdlKCkpCisgICAgaWYgKCFlbmRpbmdT
ZWxlY3Rpb24oKS5pc05vbk9ycGhhbmVkQ2FyZXRPclJhbmdlKCkpCiAgICAgICAgIHJldHVybjsK
IAogICAgIC8vIEdldCB0aGUgZGVmYXVsdCBzdHlsZSBmb3IgdGhpcyBlZGl0YWJsZSByb290LCBp
dCdzIHRoZSBzdHlsZSB0aGF0IHdlJ2xsIGdpdmUgdGhlCiAgICAgLy8gY29udGVudCB0aGF0IHdl
J3JlIG9wZXJhdGluZyBvbi4KLSAgICBOb2RlKiByb290ID0gZnJhbWUoKS5zZWxlY3Rpb24oKS5y
b290RWRpdGFibGVFbGVtZW50KCk7CisgICAgTm9kZSogcm9vdCA9IGVuZGluZ1NlbGVjdGlvbigp
LnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsKICAgICBSZWZQdHI8RWRpdGluZ1N0eWxlPiBkZWZhdWx0
U3R5bGUgPSBFZGl0aW5nU3R5bGU6OmNyZWF0ZShyb290KTsKIAogICAgIC8vIFdlIHdhbnQgdG8g
cmVtb3ZlIGV2ZXJ5dGhpbmcgYnV0IHRyYW5zcGFyZW50IGJhY2tncm91bmQuCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVTZWxlY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5jcHAJKHJldmlzaW9uIDE2MzEy
OCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5j
bHVkZSAiRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKICNpbmNsdWRl
ICJUZXh0SXRlcmF0b3IuaCIKICNpbmNsdWRlICJWaXNpYmxlVW5pdHMuaCIKICNpbmNsdWRlICJo
dG1sZWRpdGluZy5oIgpAQCAtNjY2LDYgKzY2NywxMiBAQCBOb2RlKiBWaXNpYmxlU2VsZWN0aW9u
Ojpub25Cb3VuZGFyeVNoYWRvCiAgICAgcmV0dXJuIHN0YXJ0KCkuZGVwcmVjYXRlZE5vZGUoKSA/
IHN0YXJ0KCkuZGVwcmVjYXRlZE5vZGUoKS0+bm9uQm91bmRhcnlTaGFkb3dUcmVlUm9vdE5vZGUo
KSA6IDA7CiB9CiAKK2Jvb2wgVmlzaWJsZVNlbGVjdGlvbjo6aXNJblBhc3N3b3JkRmllbGQoKSBj
b25zdAoreworICAgIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50KiB0ZXh0Q29udHJvbCA9IGVu
Y2xvc2luZ1RleHRGb3JtQ29udHJvbChzdGFydCgpKTsKKyAgICByZXR1cm4gdGV4dENvbnRyb2wg
JiYgaXNIVE1MSW5wdXRFbGVtZW50KHRleHRDb250cm9sKSAmJiB0b0hUTUxJbnB1dEVsZW1lbnQo
dGV4dENvbnRyb2wpLT5pc1Bhc3N3b3JkRmllbGQoKTsKK30KKwogI2lmbmRlZiBOREVCVUcKIAog
dm9pZCBWaXNpYmxlU2VsZWN0aW9uOjpkZWJ1Z1Bvc2l0aW9uKCkgY29uc3QKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5oCShyZXZpc2lvbiAxNjMxMjgpCisr
KyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVTZWxlY3Rpb24uaAkod29ya2luZyBjb3B5
KQpAQCAtMTA1LDYgKzEwNSw4IEBAIHB1YmxpYzoKICAgICAvLyBTaGFkb3dSb290IG5vZGUgZm9y
IG5ldyBzaGFkb3cgdHJlZXMsIG9yIDAgZm9yIG5vbi1zaGFkb3cgdHJlZXMuCiAgICAgTm9kZSog
bm9uQm91bmRhcnlTaGFkb3dUcmVlUm9vdE5vZGUoKSBjb25zdDsKIAorICAgIGJvb2wgaXNJblBh
c3N3b3JkRmllbGQoKSBjb25zdDsKKwogI2lmbmRlZiBOREVCVUcKICAgICB2b2lkIGRlYnVnUG9z
aXRpb24oKSBjb25zdDsKICAgICB2b2lkIGZvcm1hdEZvckRlYnVnZ2VyKGNoYXIqIGJ1ZmZlciwg
dW5zaWduZWQgbGVuZ3RoKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFj
L0VkaXRvck1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9F
ZGl0b3JNYWMubW0JKHJldmlzaW9uIDE2MzEyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
bWFjL0VkaXRvck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjM5LDcgKzIzOSw3IEBAIE5TRGlj
dGlvbmFyeSogRWRpdG9yOjpmb250QXR0cmlidXRlc0ZvclMKIAogYm9vbCBFZGl0b3I6OmNhbkNv
cHlFeGNsdWRpbmdTdGFuZGFsb25lSW1hZ2VzKCkKIHsKLSAgICBGcmFtZVNlbGVjdGlvbiYgc2Vs
ZWN0aW9uID0gbV9mcmFtZS5zZWxlY3Rpb24oKTsKKyAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9u
JiBzZWxlY3Rpb24gPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwogICAgIHJldHVy
biBzZWxlY3Rpb24uaXNSYW5nZSgpICYmICFzZWxlY3Rpb24uaXNJblBhc3N3b3JkRmllbGQoKTsK
IH0KIApAQCAtMjU5LDcgKzI1OSw3IEBAIHZvaWQgRWRpdG9yOjp0YWtlRmluZFN0cmluZ0Zyb21T
ZWxlY3Rpb24KIHZvaWQgRWRpdG9yOjpyZWFkU2VsZWN0aW9uRnJvbVBhc3RlYm9hcmQoY29uc3Qg
U3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkKIHsKICAgICBQYXN0ZWJvYXJkIHBhc3RlYm9hcmQocGFz
dGVib2FyZE5hbWUpOwotICAgIGlmIChtX2ZyYW1lLnNlbGVjdGlvbigpLmlzQ29udGVudFJpY2hs
eUVkaXRhYmxlKCkpCisgICAgaWYgKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXND
b250ZW50UmljaGx5RWRpdGFibGUoKSkKICAgICAgICAgcGFzdGVXaXRoUGFzdGVib2FyZCgmcGFz
dGVib2FyZCwgdHJ1ZSk7CiAgICAgZWxzZQogICAgICAgICBwYXN0ZUFzUGxhaW5UZXh0V2l0aFBh
c3RlYm9hcmQocGFzdGVib2FyZCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBbmNo
b3JFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBbmNo
b3JFbGVtZW50LmNwcAkocmV2aXNpb24gMTYzMTI4KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MQW5jaG9yRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5NSw3ICsxOTUsNyBAQCB2
b2lkIEhUTUxBbmNob3JFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kCiAgICAgICAgICAgICAvLyBU
aGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBlZGl0YWJsZSBibG9jayB0aGF0IHRoZSBzZWxlY3Rpb24g
d2FzIGluIChpZiBpdCB3YXMgaW4gb25lKSBqdXN0IGJlZm9yZSB0aGUgbGluayB3YXMgY2xpY2tl
ZAogICAgICAgICAgICAgLy8gZm9yIHRoZSBMaXZlV2hlbk5vdEZvY3VzZWQgZWRpdGFibGUgbGlu
ayBiZWhhdmlvcgogICAgICAgICAgICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygp
Lm1vdXNlZG93bkV2ZW50ICYmIGV2ZW50LT5pc01vdXNlRXZlbnQoKSAmJiBzdGF0aWNfY2FzdDxN
b3VzZUV2ZW50Kj4oZXZlbnQpLT5idXR0b24oKSAhPSBSaWdodEJ1dHRvbiAmJiBkb2N1bWVudCgp
LmZyYW1lKCkpIHsKLSAgICAgICAgICAgICAgICBzZXRSb290RWRpdGFibGVFbGVtZW50Rm9yU2Vs
ZWN0aW9uT25Nb3VzZURvd24oZG9jdW1lbnQoKS5mcmFtZSgpLT5zZWxlY3Rpb24oKS5yb290RWRp
dGFibGVFbGVtZW50KCkpOworICAgICAgICAgICAgICAgIHNldFJvb3RFZGl0YWJsZUVsZW1lbnRG
b3JTZWxlY3Rpb25Pbk1vdXNlRG93bihkb2N1bWVudCgpLmZyYW1lKCktPnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpLnJvb3RFZGl0YWJsZUVsZW1lbnQoKSk7CiAgICAgICAgICAgICAgICAgbV93YXNT
aGlmdEtleURvd25Pbk1vdXNlRG93biA9IHN0YXRpY19jYXN0PE1vdXNlRXZlbnQqPihldmVudCkt
PnNoaWZ0S2V5KCk7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZl
bnROYW1lcygpLm1vdXNlb3ZlckV2ZW50KSB7CiAgICAgICAgICAgICAgICAgLy8gVGhlc2UgYXJl
IGNsZWFyZWQgb24gbW91c2VvdmVyIGFuZCBub3QgbW91c2VvdXQgYmVjYXVzZSB0aGVpciB2YWx1
ZXMgYXJlIG5lZWRlZCBmb3IgZHJhZyBldmVudHMsCkBAIC0yMjgsNyArMjI4LDcgQEAgdm9pZCBI
VE1MQW5jaG9yRWxlbWVudDo6c2V0QWN0aXZlKGJvb2wgZAogICAgICAgICAgICAgLy8gRG9uJ3Qg
c2V0IHRoZSBsaW5rIHRvIGJlIGFjdGl2ZSBpZiB0aGUgY3VycmVudCBzZWxlY3Rpb24gaXMgaW4g
dGhlIHNhbWUgZWRpdGFibGUgYmxvY2sgYXMKICAgICAgICAgICAgIC8vIHRoaXMgbGluawogICAg
ICAgICAgICAgY2FzZSBFZGl0YWJsZUxpbmtMaXZlV2hlbk5vdEZvY3VzZWQ6Ci0gICAgICAgICAg
ICAgICAgaWYgKGRvd24gJiYgZG9jdW1lbnQoKS5mcmFtZSgpICYmIGRvY3VtZW50KCkuZnJhbWUo
KS0+c2VsZWN0aW9uKCkucm9vdEVkaXRhYmxlRWxlbWVudCgpID09IHJvb3RFZGl0YWJsZUVsZW1l
bnQoKSkKKyAgICAgICAgICAgICAgICBpZiAoZG93biAmJiBkb2N1bWVudCgpLmZyYW1lKCkgJiYg
ZG9jdW1lbnQoKS5mcmFtZSgpLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5yb290RWRpdGFibGVF
bGVtZW50KCkgPT0gcm9vdEVkaXRhYmxlRWxlbWVudCgpKQogICAgICAgICAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQuY3BwCShy
ZXZpc2lvbiAxNjMxMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0Rm9ybUNvbnRy
b2xFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzU2LDcgKzM1Niw3IEBAIGludCBIVE1M
VGV4dEZvcm1Db250cm9sRWxlbWVudDo6Y29tcHV0ZVMKICAgICBpZiAoIWZyYW1lKQogICAgICAg
ICByZXR1cm4gMDsKIAotICAgIHJldHVybiBpbmRleEZvclZpc2libGVQb3NpdGlvbihmcmFtZS0+
c2VsZWN0aW9uKCkuc3RhcnQoKSk7CisgICAgcmV0dXJuIGluZGV4Rm9yVmlzaWJsZVBvc2l0aW9u
KGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpKTsKIH0KIAogaW50IEhUTUxU
ZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpzZWxlY3Rpb25FbmQoKSBjb25zdApAQCAtMzc1LDcgKzM3
NSw3IEBAIGludCBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6Y29tcHV0ZVMKICAgICBpZiAo
IWZyYW1lKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIHJldHVybiBpbmRleEZvclZpc2libGVQ
b3NpdGlvbihmcmFtZS0+c2VsZWN0aW9uKCkuZW5kKCkpOworICAgIHJldHVybiBpbmRleEZvclZp
c2libGVQb3NpdGlvbihmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZW5kKCkpOwogfQog
CiBzdGF0aWMgY29uc3QgQXRvbWljU3RyaW5nJiBkaXJlY3Rpb25TdHJpbmcoVGV4dEZpZWxkU2Vs
ZWN0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvQ29u
dGV4dE1lbnVDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdl
L0NvbnRleHRNZW51Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDE2MzEyOCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvQ29udGV4dE1lbnVDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzQxLDE1ICszNDEsMTUgQEAgdm9pZCBDb250ZXh0TWVudUNvbnRyb2xsZXI6OmNvbnRleHRNZW51
SQogICAgICAgICBicmVhazsKICNlbmRpZgogICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnU3Bl
bGxpbmdHdWVzczogewotICAgICAgICBGcmFtZVNlbGVjdGlvbiYgZnJhbWVTZWxlY3Rpb24gPSBm
cmFtZS0+c2VsZWN0aW9uKCk7Ci0gICAgICAgIGlmIChmcmFtZS0+ZWRpdG9yKCkuc2hvdWxkSW5z
ZXJ0VGV4dChpdGVtLT50aXRsZSgpLCBmcmFtZVNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgp
LmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rpb25QYXN0ZWQpKSB7CisgICAgICAgIFZpc2libGVTZWxl
Y3Rpb24gc2VsZWN0aW9uID0gZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgICAg
ICBpZiAoZnJhbWUtPmVkaXRvcigpLnNob3VsZEluc2VydFRleHQoaXRlbS0+dGl0bGUoKSwgc2Vs
ZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvblBhc3Rl
ZCkpIHsKICAgICAgICAgICAgIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpDb21tYW5kT3B0aW9u
cyByZXBsYWNlT3B0aW9ucyA9IFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpNYXRjaFN0eWxlIHwg
UmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OlByZXZlbnROZXN0aW5nOwogCiAgICAgICAgICAgICBp
ZiAoZnJhbWUtPmVkaXRvcigpLmJlaGF2aW9yKCkuc2hvdWxkQWxsb3dTcGVsbGluZ1N1Z2dlc3Rp
b25zV2l0aG91dFNlbGVjdGlvbigpKSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKGZyYW1lU2Vs
ZWN0aW9uLmlzQ2FyZXRPclJhbmdlKCkpOwotICAgICAgICAgICAgICAgIFZpc2libGVTZWxlY3Rp
b24gd29yZFNlbGVjdGlvbihmcmFtZVNlbGVjdGlvbi5iYXNlKCkpOworICAgICAgICAgICAgICAg
IEFTU0VSVChzZWxlY3Rpb24uaXNDYXJldE9yUmFuZ2UoKSk7CisgICAgICAgICAgICAgICAgVmlz
aWJsZVNlbGVjdGlvbiB3b3JkU2VsZWN0aW9uKHNlbGVjdGlvbi5iYXNlKCkpOwogICAgICAgICAg
ICAgICAgIHdvcmRTZWxlY3Rpb24uZXhwYW5kVXNpbmdHcmFudWxhcml0eShXb3JkR3JhbnVsYXJp
dHkpOwotICAgICAgICAgICAgICAgIGZyYW1lU2VsZWN0aW9uLnNldFNlbGVjdGlvbih3b3JkU2Vs
ZWN0aW9uKTsKKyAgICAgICAgICAgICAgICBmcmFtZS0+c2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9u
KHdvcmRTZWxlY3Rpb24pOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBB
U1NFUlQoZnJhbWUtPmVkaXRvcigpLnNlbGVjdGVkVGV4dCgpLmxlbmd0aCgpKTsKICAgICAgICAg
ICAgICAgICByZXBsYWNlT3B0aW9ucyB8PSBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6U2VsZWN0
UmVwbGFjZW1lbnQ7CkBAIC0zNTksNyArMzU5LDcgQEAgdm9pZCBDb250ZXh0TWVudUNvbnRyb2xs
ZXI6OmNvbnRleHRNZW51SQogICAgICAgICAgICAgQVNTRVJUKGRvY3VtZW50KTsKICAgICAgICAg
ICAgIFJlZlB0cjxSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZD4gY29tbWFuZCA9IFJlcGxhY2VTZWxl
Y3Rpb25Db21tYW5kOjpjcmVhdGUoKmRvY3VtZW50LCBjcmVhdGVGcmFnbWVudEZyb21NYXJrdXAo
KmRvY3VtZW50LCBpdGVtLT50aXRsZSgpLCAiIiksIHJlcGxhY2VPcHRpb25zKTsKICAgICAgICAg
ICAgIGFwcGx5Q29tbWFuZChjb21tYW5kKTsKLSAgICAgICAgICAgIGZyYW1lU2VsZWN0aW9uLnJl
dmVhbFNlbGVjdGlvbihTY3JvbGxBbGlnbm1lbnQ6OmFsaWduVG9FZGdlSWZOZWVkZWQpOworICAg
ICAgICAgICAgZnJhbWUtPnNlbGVjdGlvbigpLnJldmVhbFNlbGVjdGlvbihTY3JvbGxBbGlnbm1l
bnQ6OmFsaWduVG9FZGdlSWZOZWVkZWQpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAg
IH0KQEAgLTkyMSw3ICs5MjEsNyBAQCB2b2lkIENvbnRleHRNZW51Q29udHJvbGxlcjo6cG9wdWxh
dGUoKQogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfSBlbHNlIHsgLy8gTWFrZSBhbiBl
ZGl0aW5nIGNvbnRleHQgbWVudQotICAgICAgICBib29sIGluUGFzc3dvcmRGaWVsZCA9IGZyYW1l
LT5zZWxlY3Rpb24oKS5pc0luUGFzc3dvcmRGaWVsZCgpOworICAgICAgICBib29sIGluUGFzc3dv
cmRGaWVsZCA9IGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0luUGFzc3dvcmRGaWVs
ZCgpOwogICAgICAgICBpZiAoIWluUGFzc3dvcmRGaWVsZCkgewogICAgICAgICAgICAgYm9vbCBo
YXZlQ29udGV4dE1lbnVJdGVtc0Zvck1pc3NwZWxsaW5nT3JHcmFtbWVyID0gZmFsc2U7CiAgICAg
ICAgICAgICBib29sIHNwZWxsQ2hlY2tpbmdFbmFibGVkID0gZnJhbWUtPmVkaXRvcigpLmlzU3Bl
bGxDaGVja2luZ0VuYWJsZWRGb3Iobm9kZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0Ry
YWdDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdD
b250cm9sbGVyLmNwcAkocmV2aXNpb24gMTYzMTI4KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9E
cmFnQ29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1OCw3ICsxNTgsOCBAQCBzdGF0
aWMgUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBkb2N1CiAKIGJvb2wgRHJhZ0NvbnRyb2xs
ZXI6OmRyYWdJc01vdmUoRnJhbWVTZWxlY3Rpb24mIHNlbGVjdGlvbiwgRHJhZ0RhdGEmIGRyYWdE
YXRhKQogewotICAgIHJldHVybiBtX2RvY3VtZW50VW5kZXJNb3VzZSA9PSBtX2RyYWdJbml0aWF0
b3IgJiYgc2VsZWN0aW9uLmlzQ29udGVudEVkaXRhYmxlKCkgJiYgc2VsZWN0aW9uLmlzUmFuZ2Uo
KSAmJiAhaXNDb3B5S2V5RG93bihkcmFnRGF0YSk7CisgICAgY29uc3QgVmlzaWJsZVNlbGVjdGlv
biYgdmlzaWJsZVNlbGVjdGlvbiA9IHNlbGVjdGlvbi5zZWxlY3Rpb24oKTsKKyAgICByZXR1cm4g
bV9kb2N1bWVudFVuZGVyTW91c2UgPT0gbV9kcmFnSW5pdGlhdG9yICYmIHZpc2libGVTZWxlY3Rp
b24uaXNDb250ZW50RWRpdGFibGUoKSAmJiB2aXNpYmxlU2VsZWN0aW9uLmlzUmFuZ2UoKSAmJiAh
aXNDb3B5S2V5RG93bihkcmFnRGF0YSk7CiB9CiAKIC8vIEZJWE1FOiBUaGlzIG1ldGhvZCBpcyBw
b29ybHkgbmFtZWQuICBXZSdyZSBqdXN0IGNsZWFyaW5nIHRoZSBzZWxlY3Rpb24gZnJvbSB0aGUg
ZG9jdW1lbnQgdGhpcyBkcmFnIGlzIGV4aXRpbmcuCkBAIC00MTMsMTIgKzQxNCwxMiBAQCBEcmFn
T3BlcmF0aW9uIERyYWdDb250cm9sbGVyOjpvcGVyYXRpb25GCiBzdGF0aWMgYm9vbCBzZXRTZWxl
Y3Rpb25Ub0RyYWdDYXJldChGcmFtZSogZnJhbWUsIFZpc2libGVTZWxlY3Rpb24mIGRyYWdDYXJl
dCwgUmVmUHRyPFJhbmdlPiYgcmFuZ2UsIGNvbnN0IEludFBvaW50JiBwb2ludCkKIHsKICAgICBm
cmFtZS0+c2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKGRyYWdDYXJldCk7Ci0gICAgaWYgKGZyYW1l
LT5zZWxlY3Rpb24oKS5pc05vbmUoKSkgeworICAgIGlmIChmcmFtZS0+c2VsZWN0aW9uKCkuc2Vs
ZWN0aW9uKCkuaXNOb25lKCkpIHsKICAgICAgICAgZHJhZ0NhcmV0ID0gZnJhbWUtPnZpc2libGVQ
b3NpdGlvbkZvclBvaW50KHBvaW50KTsKICAgICAgICAgZnJhbWUtPnNlbGVjdGlvbigpLnNldFNl
bGVjdGlvbihkcmFnQ2FyZXQpOwogICAgICAgICByYW5nZSA9IGRyYWdDYXJldC50b05vcm1hbGl6
ZWRSYW5nZSgpOwogICAgIH0KLSAgICByZXR1cm4gIWZyYW1lLT5zZWxlY3Rpb24oKS5pc05vbmUo
KSAmJiBmcmFtZS0+c2VsZWN0aW9uKCkuaXNDb250ZW50RWRpdGFibGUoKTsKKyAgICByZXR1cm4g
IWZyYW1lLT5zZWxlY3Rpb24oKS5pc05vbmUoKSAmJiBmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCkuaXNDb250ZW50RWRpdGFibGUoKTsKIH0KIAogYm9vbCBEcmFnQ29udHJvbGxlcjo6ZGlz
cGF0Y2hUZXh0SW5wdXRFdmVudEZvcihGcmFtZSogaW5uZXJGcmFtZSwgRHJhZ0RhdGEmIGRyYWdE
YXRhKQpAQCAtNDgyLDcgKzQ4Myw3IEBAIGJvb2wgRHJhZ0NvbnRyb2xsZXI6OmNvbmNsdWRlRWRp
dERyYWcoRHIKICAgICBWaXNpYmxlU2VsZWN0aW9uIGRyYWdDYXJldCA9IG1fcGFnZS5kcmFnQ2Fy
ZXRDb250cm9sbGVyKCkuY2FyZXRQb3NpdGlvbigpOwogICAgIG1fcGFnZS5kcmFnQ2FyZXRDb250
cm9sbGVyKCkuY2xlYXIoKTsKICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gZHJhZ0NhcmV0LnRv
Tm9ybWFsaXplZFJhbmdlKCk7Ci0gICAgUmVmUHRyPEVsZW1lbnQ+IHJvb3RFZGl0YWJsZUVsZW1l
bnQgPSBpbm5lckZyYW1lLT5zZWxlY3Rpb24oKS5yb290RWRpdGFibGVFbGVtZW50KCk7CisgICAg
UmVmUHRyPEVsZW1lbnQ+IHJvb3RFZGl0YWJsZUVsZW1lbnQgPSBpbm5lckZyYW1lLT5zZWxlY3Rp
b24oKS5zZWxlY3Rpb24oKS5yb290RWRpdGFibGVFbGVtZW50KCk7CiAKICAgICAvLyBGb3IgcmFu
Z2UgdG8gYmUgbnVsbCBhIFdlYktpdCBjbGllbnQgbXVzdCBoYXZlIGRvbmUgc29tZXRoaW5nIGJh
ZCB3aGlsZQogICAgIC8vIG1hbnVhbGx5IGNvbnRyb2xsaW5nIGRyYWcgYmVoYXZpb3VyCkBAIC03
NjUsNyArNzY2LDcgQEAgYm9vbCBEcmFnQ29udHJvbGxlcjo6c3RhcnREcmFnKEZyYW1lJiBzcgog
CiAgICAgICAgICAgICBzcmMuZWRpdG9yKCkud2lsbFdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJk
KHNlbGVjdGlvblJhbmdlLmdldCgpKTsKIAotICAgICAgICAgICAgaWYgKGVuY2xvc2luZ1RleHRG
b3JtQ29udHJvbChzcmMuc2VsZWN0aW9uKCkuc3RhcnQoKSkpCisgICAgICAgICAgICBpZiAoZW5j
bG9zaW5nVGV4dEZvcm1Db250cm9sKHNyYy5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgp
KSkKICAgICAgICAgICAgICAgICBjbGlwYm9hcmQucGFzdGVib2FyZCgpLndyaXRlUGxhaW5UZXh0
KHNyYy5lZGl0b3IoKS5zZWxlY3RlZFRleHRGb3JDbGlwYm9hcmQoKSwgUGFzdGVib2FyZDo6Q2Fu
bm90U21hcnRSZXBsYWNlKTsKICAgICAgICAgICAgIGVsc2UgewogI2lmIFBMQVRGT1JNKE1BQykg
fHwgUExBVEZPUk0oRUZMKQpAQCAtODEyLDExICs4MTMsMTIgQEAgYm9vbCBEcmFnQ29udHJvbGxl
cjo6c3RhcnREcmFnKEZyYW1lJiBzcgogICAgICAgICAgICAgLy8gb24gdGhlIHdlYiBwYWdlLiBU
aGlzIGluY2x1ZGVzIHJlcGxhY2luZyBuZXdsaW5lcyB3aXRoIHNwYWNlcy4KICAgICAgICAgICAg
IHNyYy5lZGl0b3IoKS5jb3B5VVJMKGxpbmtVUkwsIGhpdFRlc3RSZXN1bHQudGV4dENvbnRlbnQo
KS5zaW1wbGlmeVdoaXRlU3BhY2UoKSwgY2xpcGJvYXJkLnBhc3RlYm9hcmQoKSk7CiAKLSAgICAg
ICAgaWYgKHNyYy5zZWxlY3Rpb24oKS5pc0NhcmV0KCkgJiYgc3JjLnNlbGVjdGlvbigpLmlzQ29u
dGVudEVkaXRhYmxlKCkpIHsKKyAgICAgICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc3JjU2Vs
ZWN0aW9uID0gc3JjLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgICAgICBpZiAoc3JjU2Vs
ZWN0aW9uLmlzQ2FyZXQoKSAmJiBzcmNTZWxlY3Rpb24uaXNDb250ZW50RWRpdGFibGUoKSkgewog
ICAgICAgICAgICAgLy8gYSB1c2VyIGNhbiBpbml0aWF0ZSBhIGRyYWcgb24gYSBsaW5rIHdpdGhv
dXQgaGF2aW5nIGFueSB0ZXh0CiAgICAgICAgICAgICAvLyBzZWxlY3RlZC4gIEluIHRoaXMgY2Fz
ZSwgd2Ugc2hvdWxkIGV4cGFuZCB0aGUgc2VsZWN0aW9uIHRvCiAgICAgICAgICAgICAvLyB0aGUg
ZW5jbG9zaW5nIGFuY2hvciBlbGVtZW50Ci0gICAgICAgICAgICBQb3NpdGlvbiBwb3MgPSBzcmMu
c2VsZWN0aW9uKCkuYmFzZSgpOworICAgICAgICAgICAgUG9zaXRpb24gcG9zID0gc3JjU2VsZWN0
aW9uLmJhc2UoKTsKICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBlbmNsb3NpbmdBbmNob3JFbGVt
ZW50KHBvcyk7CiAgICAgICAgICAgICBpZiAobm9kZSkKICAgICAgICAgICAgICAgICBzcmMuc2Vs
ZWN0aW9uKCkuc2V0U2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb246OnNlbGVjdGlvbkZyb21Db250
ZW50c09mTm9kZShub2RlKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3Bw
CShyZXZpc2lvbiAxNjMxMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMjMsNyArMTIyMyw3IEBAIHN0YXRpYyBib29sIGlzU3Vi
bWl0SW1hZ2UoTm9kZSogbm9kZSkKIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgbm9kZSdzIGVkaXRh
YmxlIGJsb2NrIGlzIG5vdCBjdXJyZW50IGZvY3VzZWQgZm9yIGVkaXRpbmcKIHN0YXRpYyBib29s
IG5vZGVJc05vdEJlaW5nRWRpdGVkKGNvbnN0IE5vZGUmIG5vZGUsIGNvbnN0IEZyYW1lJiBmcmFt
ZSkKIHsKLSAgICByZXR1cm4gZnJhbWUuc2VsZWN0aW9uKCkucm9vdEVkaXRhYmxlRWxlbWVudCgp
ICE9IG5vZGUucm9vdEVkaXRhYmxlRWxlbWVudCgpOworICAgIHJldHVybiBmcmFtZS5zZWxlY3Rp
b24oKS5zZWxlY3Rpb24oKS5yb290RWRpdGFibGVFbGVtZW50KCkgIT0gbm9kZS5yb290RWRpdGFi
bGVFbGVtZW50KCk7CiB9CiAKIGJvb2wgRXZlbnRIYW5kbGVyOjp1c2VIYW5kQ3Vyc29yKE5vZGUq
IG5vZGUsIGJvb2wgaXNPdmVyTGluaywgYm9vbCBzaGlmdEtleSkKQEAgLTI2NDAsNyArMjY0MCw3
IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpzZW5kQ29udGV4dE1lbnVFdmVudCgKICAgICAgICAgLy8g
RklYTUU6IEluIHRoZSBlZGl0YWJsZSBjYXNlLCB3b3JkIHNlbGVjdGlvbiBzb21ldGltZXMgc2Vs
ZWN0cyBjb250ZW50IHRoYXQgaXNuJ3QgdW5kZXJuZWF0aCB0aGUgbW91c2UuCiAgICAgICAgIC8v
IElmIHRoZSBzZWxlY3Rpb24gaXMgbm9uLWVkaXRhYmxlLCB3ZSBkbyB3b3JkIHNlbGVjdGlvbiB0
byBtYWtlIGl0IGVhc2llciB0byB1c2UgdGhlIGNvbnRleHR1YWwgbWVudSBpdGVtcwogICAgICAg
ICAvLyBhdmFpbGFibGUgZm9yIHRleHQgc2VsZWN0aW9ucy4gIEJ1dCBvbmx5IGlmIHdlJ3JlIGFi
b3ZlIHRleHQuCi0gICAgICAgICYmIChtX2ZyYW1lLnNlbGVjdGlvbigpLmlzQ29udGVudEVkaXRh
YmxlKCkgfHwgKG1ldi50YXJnZXROb2RlKCkgJiYgbWV2LnRhcmdldE5vZGUoKS0+aXNUZXh0Tm9k
ZSgpKSkpIHsKKyAgICAgICAgJiYgKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXND
b250ZW50RWRpdGFibGUoKSB8fCAobWV2LnRhcmdldE5vZGUoKSAmJiBtZXYudGFyZ2V0Tm9kZSgp
LT5pc1RleHROb2RlKCkpKSkgewogICAgICAgICBtX21vdXNlRG93bk1heVN0YXJ0U2VsZWN0ID0g
dHJ1ZTsgLy8gY29udGV4dCBtZW51IGV2ZW50cyBhcmUgYWx3YXlzIGFsbG93ZWQgdG8gcGVyZm9y
bSBhIHNlbGVjdGlvbgogICAgICAgICBzZWxlY3RDbG9zZXN0V29yZE9yTGlua0Zyb21Nb3VzZUV2
ZW50KG1ldik7CiAgICAgfQpAQCAtMjY3Myw4ICsyNjczLDggQEAgYm9vbCBFdmVudEhhbmRsZXI6
OnNlbmRDb250ZXh0TWVudUV2ZW50RgogICAgIEludFBvaW50IGxvY2F0aW9uOwogCiAgICAgRWxl
bWVudCogZm9jdXNlZEVsZW1lbnQgPSBkb2MtPmZvY3VzZWRFbGVtZW50KCk7Ci0gICAgRnJhbWVT
ZWxlY3Rpb24mIHNlbGVjdGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9uKCk7Ci0gICAgUG9zaXRpb24g
c3RhcnQgPSBzZWxlY3Rpb24uc2VsZWN0aW9uKCkuc3RhcnQoKTsKKyAgICBjb25zdCBWaXNpYmxl
U2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwor
ICAgIFBvc2l0aW9uIHN0YXJ0ID0gc2VsZWN0aW9uLnN0YXJ0KCk7CiAKICAgICBpZiAoc3RhcnQu
ZGVwcmVjYXRlZE5vZGUoKSAmJiAoc2VsZWN0aW9uLnJvb3RFZGl0YWJsZUVsZW1lbnQoKSB8fCBz
ZWxlY3Rpb24uaXNSYW5nZSgpKSkgewogICAgICAgICBSZWZQdHI8UmFuZ2U+IHNlbGVjdGlvblJh
bmdlID0gc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7CkBAIC0zMjczLDcgKzMyNzMsNyBA
QCBib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlRHJhZyhjb25zdCBNb3VzCiAgICAgICAgIH0gCiAg
ICAgICAgIAogICAgICAgICBtX21vdXNlRG93bk1heVN0YXJ0RHJhZyA9IGRpc3BhdGNoRHJhZ1Ny
Y0V2ZW50KGV2ZW50TmFtZXMoKS5kcmFnc3RhcnRFdmVudCwgbV9tb3VzZURvd24pCi0gICAgICAg
ICAgICAmJiAhbV9mcmFtZS5zZWxlY3Rpb24oKS5pc0luUGFzc3dvcmRGaWVsZCgpOworICAgICAg
ICAgICAgJiYgIW1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNJblBhc3N3b3JkRmll
bGQoKTsKICAgICAgICAgCiAgICAgICAgIC8vIEludmFsaWRhdGUgY2xpcGJvYXJkIGhlcmUgYWdh
aW5zdCBhbnltb3JlIHBhc3RlYm9hcmQgd3JpdGluZyBmb3Igc2VjdXJpdHkuICBUaGUgZHJhZwog
ICAgICAgICAvLyBpbWFnZSBjYW4gc3RpbGwgYmUgY2hhbmdlZCBhcyB3ZSBkcmFnLCBidXQgbm90
IHRoZSBwYXN0ZWJvYXJkIGRhdGEuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZvY3VzQ29u
dHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9Gb2N1c0NvbnRy
b2xsZXIuY3BwCShyZXZpc2lvbiAxNjMxMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZvY3Vz
Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4MSw3ICsyODEsNyBAQCBib29sIEZv
Y3VzQ29udHJvbGxlcjo6YWR2YW5jZUZvY3VzSW5Eb2N1CiAgICAgYm9vbCBjYXJldEJyb3dzaW5n
ID0gZnJhbWUuc2V0dGluZ3MoKS5jYXJldEJyb3dzaW5nRW5hYmxlZCgpOwogCiAgICAgaWYgKGNh
cmV0QnJvd3NpbmcgJiYgIWN1cnJlbnROb2RlKQotICAgICAgICBjdXJyZW50Tm9kZSA9IGZyYW1l
LnNlbGVjdGlvbigpLnN0YXJ0KCkuZGVwcmVjYXRlZE5vZGUoKTsKKyAgICAgICAgY3VycmVudE5v
ZGUgPSBmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpLmRlcHJlY2F0ZWROb2Rl
KCk7CiAKICAgICBkb2N1bWVudC0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRz
KCk7CiAKQEAgLTU1Myw4ICs1NTMsOCBAQCBzdGF0aWMgdm9pZCBjbGVhclNlbGVjdGlvbklmTmVl
ZGVkKEZyYW1lCiAgICAgICAgIAogICAgIGlmIChvbGRGb2N1c2VkRnJhbWUtPmRvY3VtZW50KCkg
IT0gbmV3Rm9jdXNlZEZyYW1lLT5kb2N1bWVudCgpKQogICAgICAgICByZXR1cm47Ci0gICAgCi0g
ICAgRnJhbWVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9IG9sZEZvY3VzZWRGcmFtZS0+c2VsZWN0aW9u
KCk7CisKKyAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBvbGRGb2N1c2Vk
RnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwogICAgIGlmIChzZWxlY3Rpb24uaXNOb25l
KCkpCiAgICAgICAgIHJldHVybjsKIApAQCAtNTYyLDcgKzU2Miw3IEBAIHN0YXRpYyB2b2lkIGNs
ZWFyU2VsZWN0aW9uSWZOZWVkZWQoRnJhbWUKICAgICBpZiAoY2FyZXRCcm93c2luZykKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgTm9kZSogc2VsZWN0aW9uU3RhcnROb2RlID0gc2VsZWN0aW9uLnNl
bGVjdGlvbigpLnN0YXJ0KCkuZGVwcmVjYXRlZE5vZGUoKTsKKyAgICBOb2RlKiBzZWxlY3Rpb25T
dGFydE5vZGUgPSBzZWxlY3Rpb24uc3RhcnQoKS5kZXByZWNhdGVkTm9kZSgpOwogICAgIGlmIChz
ZWxlY3Rpb25TdGFydE5vZGUgPT0gbmV3Rm9jdXNlZE5vZGUgfHwgc2VsZWN0aW9uU3RhcnROb2Rl
LT5pc0Rlc2NlbmRhbnRPZihuZXdGb2N1c2VkTm9kZSkgfHwgc2VsZWN0aW9uU3RhcnROb2RlLT5k
ZXByZWNhdGVkU2hhZG93QW5jZXN0b3JOb2RlKCkgPT0gbmV3Rm9jdXNlZE5vZGUpCiAgICAgICAg
IHJldHVybjsKICAgICAgICAgCkBAIC01NzksOCArNTc5LDggQEAgc3RhdGljIHZvaWQgY2xlYXJT
ZWxlY3Rpb25JZk5lZWRlZChGcmFtZQogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQot
ICAgIAotICAgIHNlbGVjdGlvbi5jbGVhcigpOworCisgICAgb2xkRm9jdXNlZEZyYW1lLT5zZWxl
Y3Rpb24oKS5jbGVhcigpOwogfQogCiBib29sIEZvY3VzQ29udHJvbGxlcjo6c2V0Rm9jdXNlZEVs
ZW1lbnQoRWxlbWVudCogZWxlbWVudCwgUGFzc1JlZlB0cjxGcmFtZT4gbmV3Rm9jdXNlZEZyYW1l
LCBGb2N1c0RpcmVjdGlvbiBkaXJlY3Rpb24pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL2lv
cy9GcmFtZUlPUy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL2lvcy9GcmFt
ZUlPUy5tbQkocmV2aXNpb24gMTYzMTI4KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9pb3MvRnJh
bWVJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTYwMSwxNSArNjAxLDE1IEBAIHZvaWQgRnJhbWU6
OnVwZGF0ZUxheW91dCgpIGNvbnN0CiAKIE5TUmVjdCBGcmFtZTo6Y2FyZXRSZWN0KCkgY29uc3QK
IHsKLSAgICBpZiAoc2VsZWN0aW9uKCkuaXNOb25lKCkpCisgICAgVmlzaWJsZVNlbGVjdGlvbiB2
aXNpYmxlU2VsZWN0aW9uID0gc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgaWYgKHZpc2li
bGVTZWxlY3Rpb24uaXNOb25lKCkpCiAgICAgICAgIHJldHVybiBDR1JlY3RaZXJvOwotICAgIHJl
dHVybiBzZWxlY3Rpb24oKS5pc0NhcmV0KCkgPyBzZWxlY3Rpb24oKS5hYnNvbHV0ZUNhcmV0Qm91
bmRzKCkgOiBWaXNpYmxlUG9zaXRpb24oc2VsZWN0aW9uKCkuZW5kKCkpLmFic29sdXRlQ2FyZXRC
b3VuZHMoKTsKKyAgICByZXR1cm4gdmlzaWJsZVNlbGVjdGlvbi5pc0NhcmV0KCkgPyBzZWxlY3Rp
b24oKS5hYnNvbHV0ZUNhcmV0Qm91bmRzKCkgOiBWaXNpYmxlUG9zaXRpb24odmlzaWJsZVNlbGVj
dGlvbi5lbmQoKSkuYWJzb2x1dGVDYXJldEJvdW5kcygpOwogfQogCiBOU1JlY3QgRnJhbWU6OnJl
Y3RGb3JTY3JvbGxUb1Zpc2libGUoKSBjb25zdAogewotICAgIFZpc2libGVTZWxlY3Rpb24gc2Vs
ZWN0aW9uKHRoaXMtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKLSAgICByZXR1cm4gcmVjdEZv
clNlbGVjdGlvbihzZWxlY3Rpb24pOworICAgIHJldHVybiByZWN0Rm9yU2VsZWN0aW9uKHNlbGVj
dGlvbigpLnNlbGVjdGlvbigpKTsKIH0KIAogTlNSZWN0IEZyYW1lOjpyZWN0Rm9yU2VsZWN0aW9u
KFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbikgY29uc3QKQEAgLTY1OCw3ICs2NTgsNiBAQCBO
U1JlY3QgRnJhbWU6OnJlY3RGb3JTZWxlY3Rpb24oVmlzaWJsZVNlCiAKIERPTUNTU1N0eWxlRGVj
bGFyYXRpb24qIEZyYW1lOjpzdHlsZUF0U2VsZWN0aW9uU3RhcnQoKSBjb25zdAogewotICAgIFBv
c2l0aW9uIHN0YXJ0ID0gc2VsZWN0aW9uKCkuc3RhcnQoKTsKICAgICBSZWZQdHI8RWRpdGluZ1N0
eWxlPiBlZGl0aW5nU3R5bGUgPSBFZGl0aW5nU3R5bGU6OnN0eWxlQXRTZWxlY3Rpb25TdGFydChz
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CiAgICAgaWYgKCFlZGl0aW5nU3R5bGUpCiAgICAgICAg
IHJldHVybiBudWxscHRyOwpAQCAtNzM3LDE0ICs3MzYsMTQgQEAgdm9pZCBGcmFtZTo6c2V0UmFu
Z2VkU2VsZWN0aW9uQmFzZVRvQ3VycgogCiB2b2lkIEZyYW1lOjpzZXRSYW5nZWRTZWxlY3Rpb25C
YXNlVG9DdXJyZW50U2VsZWN0aW9uU3RhcnQoKQogewotICAgIEZyYW1lU2VsZWN0aW9uJiBmcmFt
ZVNlbGVjdGlvbiA9IHNlbGVjdGlvbigpOwotICAgIG1fcmFuZ2VkU2VsZWN0aW9uQmFzZSA9IFZp
c2libGVTZWxlY3Rpb24oZnJhbWVTZWxlY3Rpb24uc2VsZWN0aW9uKCkuc3RhcnQoKSwgZnJhbWVT
ZWxlY3Rpb24uYWZmaW5pdHkoKSk7CisgICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgdmlzaWJs
ZVNlbGVjdGlvbiA9IHNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgIG1fcmFuZ2VkU2VsZWN0
aW9uQmFzZSA9IFZpc2libGVTZWxlY3Rpb24odmlzaWJsZVNlbGVjdGlvbi5zdGFydCgpLCB2aXNp
YmxlU2VsZWN0aW9uLmFmZmluaXR5KCkpOwogfQogCiB2b2lkIEZyYW1lOjpzZXRSYW5nZWRTZWxl
Y3Rpb25CYXNlVG9DdXJyZW50U2VsZWN0aW9uRW5kKCkKIHsKLSAgICBGcmFtZVNlbGVjdGlvbiYg
ZnJhbWVTZWxlY3Rpb24gPSBzZWxlY3Rpb24oKTsKLSAgICBtX3JhbmdlZFNlbGVjdGlvbkJhc2Ug
PSBWaXNpYmxlU2VsZWN0aW9uKGZyYW1lU2VsZWN0aW9uLnNlbGVjdGlvbigpLmVuZCgpLCBmcmFt
ZVNlbGVjdGlvbi5hZmZpbml0eSgpKTsKKyAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiB2aXNp
YmxlU2VsZWN0aW9uID0gc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgbV9yYW5nZWRTZWxl
Y3Rpb25CYXNlID0gVmlzaWJsZVNlbGVjdGlvbih2aXNpYmxlU2VsZWN0aW9uLmVuZCgpLCB2aXNp
YmxlU2VsZWN0aW9uLmFmZmluaXR5KCkpOwogfQogCiBWaXNpYmxlU2VsZWN0aW9uIEZyYW1lOjpy
YW5nZWRTZWxlY3Rpb25CYXNlKCkgY29uc3QKQEAgLTc1OSwxNCArNzU4LDE0IEBAIHZvaWQgRnJh
bWU6OmNsZWFyUmFuZ2VkU2VsZWN0aW9uSW5pdGlhbEUKIAogdm9pZCBGcmFtZTo6c2V0UmFuZ2Vk
U2VsZWN0aW9uSW5pdGlhbEV4dGVudFRvQ3VycmVudFNlbGVjdGlvblN0YXJ0KCkKIHsKLSAgICBG
cmFtZVNlbGVjdGlvbiYgZnJhbWVTZWxlY3Rpb24gPSBzZWxlY3Rpb24oKTsKLSAgICBtX3Jhbmdl
ZFNlbGVjdGlvbkluaXRpYWxFeHRlbnQgPSBWaXNpYmxlU2VsZWN0aW9uKGZyYW1lU2VsZWN0aW9u
LnNlbGVjdGlvbigpLnN0YXJ0KCksIGZyYW1lU2VsZWN0aW9uLmFmZmluaXR5KCkpOworICAgIGNv
bnN0IFZpc2libGVTZWxlY3Rpb24mIHZpc2libGVTZWxlY3Rpb24gPSBzZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKTsKKyAgICBtX3JhbmdlZFNlbGVjdGlvbkluaXRpYWxFeHRlbnQgPSBWaXNpYmxlU2Vs
ZWN0aW9uKHZpc2libGVTZWxlY3Rpb24uc3RhcnQoKSwgdmlzaWJsZVNlbGVjdGlvbi5hZmZpbml0
eSgpKTsKIH0KIAogdm9pZCBGcmFtZTo6c2V0UmFuZ2VkU2VsZWN0aW9uSW5pdGlhbEV4dGVudFRv
Q3VycmVudFNlbGVjdGlvbkVuZCgpCiB7Ci0gICAgRnJhbWVTZWxlY3Rpb24mIGZyYW1lU2VsZWN0
aW9uID0gc2VsZWN0aW9uKCk7Ci0gICAgbV9yYW5nZWRTZWxlY3Rpb25Jbml0aWFsRXh0ZW50ID0g
VmlzaWJsZVNlbGVjdGlvbihmcmFtZVNlbGVjdGlvbi5zZWxlY3Rpb24oKS5lbmQoKSwgZnJhbWVT
ZWxlY3Rpb24uYWZmaW5pdHkoKSk7CisgICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgdmlzaWJs
ZVNlbGVjdGlvbiA9IHNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgIG1fcmFuZ2VkU2VsZWN0
aW9uSW5pdGlhbEV4dGVudCA9IFZpc2libGVTZWxlY3Rpb24odmlzaWJsZVNlbGVjdGlvbi5lbmQo
KSwgdmlzaWJsZVNlbGVjdGlvbi5hZmZpbml0eSgpKTsKIH0KIAogVmlzaWJsZVNlbGVjdGlvbiBG
cmFtZTo6cmFuZ2VkU2VsZWN0aW9uSW5pdGlhbEV4dGVudCgpIGNvbnN0CkBAIC03ODcsNyArNzg2
LDcgQEAgTlNBcnJheSAqRnJhbWU6OmludGVycHJldGF0aW9uc0ZvckN1cnJlbgogICAgIGlmICgh
ZG9jdW1lbnQoKSkKICAgICAgICAgcmV0dXJuIG5pbDsKIAotICAgIEVsZW1lbnQqIHJvb3QgPSBz
ZWxlY3Rpb24oKS5zZWxlY3Rpb25UeXBlKCkgPT0gVmlzaWJsZVNlbGVjdGlvbjo6Tm9TZWxlY3Rp
b24gPyBkb2N1bWVudCgpLT5ib2R5KCkgOiBzZWxlY3Rpb24oKS5yb290RWRpdGFibGVFbGVtZW50
KCk7CisgICAgRWxlbWVudCogcm9vdCA9IHNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnNlbGVjdGlv
blR5cGUoKSA9PSBWaXNpYmxlU2VsZWN0aW9uOjpOb1NlbGVjdGlvbiA/IGRvY3VtZW50KCktPmJv
ZHkoKSA6IHNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsKICAg
ICB1bnNpZ25lZCByb290Q2hpbGRDb3VudCA9IHJvb3QtPmNoaWxkTm9kZUNvdW50KCk7CiAgICAg
UmVmUHRyPFJhbmdlPiByYW5nZU9mUm9vdENvbnRlbnRzID0gUmFuZ2U6OmNyZWF0ZSgqZG9jdW1l
bnQoKSwgY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKHJvb3QsIDApLCBjcmVhdGVMZWdhY3lF
ZGl0aW5nUG9zaXRpb24ocm9vdCwgcm9vdENoaWxkQ291bnQpKTsKIApJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCShyZXZpc2lvbiAxNjMxMjgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
NDQ0LDcgKzI0NDQsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpwYWludENhcmV0KFBhaW50SW5mbyYg
CiAgICAgYm9vbCBpc0NvbnRlbnRFZGl0YWJsZTsKICAgICBpZiAodHlwZSA9PSBDdXJzb3JDYXJl
dCkgewogICAgICAgICBjYXJldFBhaW50ZXIgPSBmcmFtZSgpLnNlbGVjdGlvbigpLmNhcmV0UmVu
ZGVyZXIoKTsKLSAgICAgICAgaXNDb250ZW50RWRpdGFibGUgPSBmcmFtZSgpLnNlbGVjdGlvbigp
Lmhhc0VkaXRhYmxlU3R5bGUoKTsKKyAgICAgICAgaXNDb250ZW50RWRpdGFibGUgPSBmcmFtZSgp
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlzQ29udGVudEVkaXRhYmxlKCk7CiAgICAgfSBlbHNl
IHsKICAgICAgICAgY2FyZXRQYWludGVyID0gZnJhbWUoKS5wYWdlKCktPmRyYWdDYXJldENvbnRy
b2xsZXIoKS5jYXJldFJlbmRlcmVyKCk7CiAgICAgICAgIGlzQ29udGVudEVkaXRhYmxlID0gZnJh
bWUoKS5wYWdlKCktPmRyYWdDYXJldENvbnRyb2xsZXIoKS5pc0NvbnRlbnRFZGl0YWJsZSgpOwpJ
bmRleDogU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQyL0NoYW5nZUxvZwkocmV2aXNpb24gMTYzMTYzKQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjMgQEAKKzIwMTQtMDEtMzAgIFJ5b3N1a2Ug
Tml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmVtb3ZlIGlubGluZSBtZW1iZXIg
ZnVuY3Rpb25zIG9mIEZyYW1lU2VsZWN0aW9uIHRoYXQgYWNjZXNzIG1fc2VsZWN0aW9uCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjc5ODYKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvZ3RrL1dlYkVkaXRvckNsaWVudEd0ay5jcHA6CisgICAgICAgIChXZWJL
aXQ6OmNvbGxhcHNlU2VsZWN0aW9uKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
UGFnZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmVkaXRvclN0YXRlKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUGFnZTo6Y29uZmlybUNvbXBvc2l0aW9uKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUGFnZTo6c2V0Q29tcG9zaXRpb24pOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFn
ZS9pb3MvV2ViUGFnZUlPUy5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6c2V0Q29tcG9z
aXRpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjp1cGRhdGVTZWxlY3Rpb25XaXRoVG91
Y2hlcyk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpzZXRDb21wb3NpdGlvbik6CisgICAgICAgIChXZWJL
aXQ6OldlYlBhZ2U6OmdldEF0dHJpYnV0ZWRTdWJzdHJpbmdGcm9tUmFuZ2UpOgorCiAyMDE0LTAx
LTMwICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAgIEZp
eCBpT1MgV0syIGJ1aWxkIGFmdGVyIHIxNjMxNTYuCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYkNvcmVTdXBwb3J0L2d0ay9XZWJFZGl0b3JDbGllbnRHdGsuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvZ3RrL1dlYkVk
aXRvckNsaWVudEd0ay5jcHAJKHJldmlzaW9uIDE2MzEyOCkKKysrIFNvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvZ3RrL1dlYkVkaXRvckNsaWVudEd0ay5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE2Niw3ICsxNjYsOCBAQCBzdGF0aWMgdm9pZCBjb2xsYXBzZVNlbGVjdGlv
bihHdGtDbGlwYm9hCiAKICAgICAvLyBDb2xsYXBzZSB0aGUgc2VsZWN0aW9uIHdpdGhvdXQgY2xl
YXJpbmcgaXQuCiAgICAgQVNTRVJUKGZyYW1lKTsKLSAgICBmcmFtZS0+c2VsZWN0aW9uKCkuc2V0
QmFzZShmcmFtZS0+c2VsZWN0aW9uKCkuZXh0ZW50KCksIGZyYW1lLT5zZWxlY3Rpb24oKS5hZmZp
bml0eSgpKTsKKyAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBmcmFtZS0+
c2VsZWN0aW9uKCk7CisgICAgZnJhbWUtPnNlbGVjdGlvbigpLnNldEJhc2Uoc2VsZWN0aW9uLmV4
dGVudCgpLCBzZWxlY3Rpb24uYWZmaW5pdHkoKSk7CiB9CiAjZW5kaWYKIApJbmRleDogU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAkocmV2aXNpb24gMTYz
MTI4KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC02NDMsMTYgKzY0MywxNyBAQCBFZGl0b3JTdGF0ZSBXZWJQYWdlOjpl
ZGl0b3JTdGF0ZSgpIGNvbnN0CiAgICAgICAgIH0KICAgICB9CiAKLSAgICByZXN1bHQuc2VsZWN0
aW9uSXNOb25lID0gZnJhbWUuc2VsZWN0aW9uKCkuaXNOb25lKCk7Ci0gICAgcmVzdWx0LnNlbGVj
dGlvbklzUmFuZ2UgPSBmcmFtZS5zZWxlY3Rpb24oKS5pc1JhbmdlKCk7Ci0gICAgcmVzdWx0Lmlz
Q29udGVudEVkaXRhYmxlID0gZnJhbWUuc2VsZWN0aW9uKCkuaXNDb250ZW50RWRpdGFibGUoKTsK
LSAgICByZXN1bHQuaXNDb250ZW50UmljaGx5RWRpdGFibGUgPSBmcmFtZS5zZWxlY3Rpb24oKS5p
c0NvbnRlbnRSaWNobHlFZGl0YWJsZSgpOwotICAgIHJlc3VsdC5pc0luUGFzc3dvcmRGaWVsZCA9
IGZyYW1lLnNlbGVjdGlvbigpLmlzSW5QYXNzd29yZEZpZWxkKCk7CisgICAgY29uc3QgVmlzaWJs
ZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0gZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisK
KyAgICByZXN1bHQuc2VsZWN0aW9uSXNOb25lID0gc2VsZWN0aW9uLmlzTm9uZSgpOworICAgIHJl
c3VsdC5zZWxlY3Rpb25Jc1JhbmdlID0gc2VsZWN0aW9uLmlzUmFuZ2UoKTsKKyAgICByZXN1bHQu
aXNDb250ZW50RWRpdGFibGUgPSBzZWxlY3Rpb24uaXNDb250ZW50RWRpdGFibGUoKTsKKyAgICBy
ZXN1bHQuaXNDb250ZW50UmljaGx5RWRpdGFibGUgPSBzZWxlY3Rpb24uaXNDb250ZW50UmljaGx5
RWRpdGFibGUoKTsKKyAgICByZXN1bHQuaXNJblBhc3N3b3JkRmllbGQgPSBzZWxlY3Rpb24uaXNJ
blBhc3N3b3JkRmllbGQoKTsKICAgICByZXN1bHQuaGFzQ29tcG9zaXRpb24gPSBmcmFtZS5lZGl0
b3IoKS5oYXNDb21wb3NpdGlvbigpOwogICAgIHJlc3VsdC5zaG91bGRJZ25vcmVDb21wb3NpdGlv
blNlbGVjdGlvbkNoYW5nZSA9IGZyYW1lLmVkaXRvcigpLmlnbm9yZUNvbXBvc2l0aW9uU2VsZWN0
aW9uQ2hhbmdlKCk7CiAKICNpZiBQTEFURk9STShJT1MpCi0gICAgRnJhbWVTZWxlY3Rpb24mIHNl
bGVjdGlvbiA9IGZyYW1lLnNlbGVjdGlvbigpOwogICAgIGlmIChmcmFtZS5lZGl0b3IoKS5oYXND
b21wb3NpdGlvbigpKSB7CiAgICAgICAgIFJlZlB0cjxSYW5nZT4gY29tcG9zaXRpb25SYW5nZSA9
IGZyYW1lLmVkaXRvcigpLmNvbXBvc2l0aW9uUmFuZ2UoKTsKICAgICAgICAgVmVjdG9yPFdlYkNv
cmU6OlNlbGVjdGlvblJlY3Q+IGNvbXBvc2l0aW9uUmVjdHM7CkBAIC02NjYsNyArNjY3LDcgQEAg
RWRpdG9yU3RhdGUgV2ViUGFnZTo6ZWRpdG9yU3RhdGUoKSBjb25zdAogICAgICAgICByZXN1bHQu
bWFya2VkVGV4dCA9IHBsYWluVGV4dChjb21wb3NpdGlvblJhbmdlLmdldCgpKTsKICAgICB9CiAg
ICAgaWYgKHNlbGVjdGlvbi5pc0NhcmV0KCkpIHsKLSAgICAgICAgcmVzdWx0LmNhcmV0UmVjdEF0
U3RhcnQgPSBzZWxlY3Rpb24uYWJzb2x1dGVDYXJldEJvdW5kcygpOworICAgICAgICByZXN1bHQu
Y2FyZXRSZWN0QXRTdGFydCA9IGZyYW1lLnNlbGVjdGlvbigpLmFic29sdXRlQ2FyZXRCb3VuZHMo
KTsKICAgICAgICAgcmVzdWx0LmNhcmV0UmVjdEF0RW5kID0gcmVzdWx0LmNhcmV0UmVjdEF0U3Rh
cnQ7CiAgICAgICAgIGlmIChtX3Nob3VsZFJldHVybldvcmRBdFNlbGVjdGlvbikKICAgICAgICAg
ICAgIHJlc3VsdC53b3JkQXRTZWxlY3Rpb24gPSBwbGFpblRleHQod29yZFJhbmdlRnJvbVBvc2l0
aW9uKHNlbGVjdGlvbi5zdGFydCgpKS5nZXQoKSk7CkBAIC0zODEyLDcgKzM4MTMsNyBAQCB2b2lk
IFdlYlBhZ2U6OmNvbmZpcm1Db21wb3NpdGlvbihjb25zdCBTCiAgICAgICAgIHJldHVybjsKICAg
ICB9CiAKLSAgICBFbGVtZW50KiBzY29wZSA9IHRhcmdldEZyYW1lLT5zZWxlY3Rpb24oKS5yb290
RWRpdGFibGVFbGVtZW50KCk7CisgICAgRWxlbWVudCogc2NvcGUgPSB0YXJnZXRGcmFtZS0+c2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCkucm9vdEVkaXRhYmxlRWxlbWVudCgpOwogICAgIFJlZlB0cjxS
YW5nZT4gc2VsZWN0aW9uUmFuZ2UgPSBUZXh0SXRlcmF0b3I6OnJhbmdlRnJvbUxvY2F0aW9uQW5k
TGVuZ3RoKHNjb3BlLCBzZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9uTGVuZ3RoKTsKICAgICBBU1NF
UlRfV0lUSF9NRVNTQUdFKHNlbGVjdGlvblJhbmdlLCAiSW52YWxpZCBzZWxlY3Rpb246IFslbGxk
OiVsbGRdIGluIHRleHQgb2YgbGVuZ3RoICVkIiwgc3RhdGljX2Nhc3Q8bG9uZyBsb25nPihzZWxl
Y3Rpb25TdGFydCksIHN0YXRpY19jYXN0PGxvbmcgbG9uZz4oc2VsZWN0aW9uTGVuZ3RoKSwgc2Nv
cGUtPmlubmVyVGV4dCgpLmxlbmd0aCgpKTsKIApAQCAtMzgyNiw3ICszODI3LDcgQEAgdm9pZCBX
ZWJQYWdlOjpjb25maXJtQ29tcG9zaXRpb24oY29uc3QgUwogdm9pZCBXZWJQYWdlOjpzZXRDb21w
b3NpdGlvbihjb25zdCBTdHJpbmcmIHRleHQsIFZlY3RvcjxDb21wb3NpdGlvblVuZGVybGluZT4g
dW5kZXJsaW5lcywgdWludDY0X3Qgc2VsZWN0aW9uU3RhcnQsIHVpbnQ2NF90IHNlbGVjdGlvbkVu
ZCwgdWludDY0X3QgcmVwbGFjZW1lbnRTdGFydCwgdWludDY0X3QgcmVwbGFjZW1lbnRMZW5ndGgp
CiB7CiAgICAgRnJhbWUqIHRhcmdldEZyYW1lID0gdGFyZ2V0RnJhbWVGb3JFZGl0aW5nKHRoaXMp
OwotICAgIGlmICghdGFyZ2V0RnJhbWUgfHwgIXRhcmdldEZyYW1lLT5zZWxlY3Rpb24oKS5pc0Nv
bnRlbnRFZGl0YWJsZSgpKSB7CisgICAgaWYgKCF0YXJnZXRGcmFtZSB8fCAhdGFyZ2V0RnJhbWUt
PnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlzQ29udGVudEVkaXRhYmxlKCkpIHsKICAgICAgICAg
c2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpFZGl0b3JTdGF0ZUNoYW5nZWQoZWRpdG9yU3Rh
dGUoKSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMzgzNSw3ICszODM2LDcgQEAgdm9p
ZCBXZWJQYWdlOjpzZXRDb21wb3NpdGlvbihjb25zdCBTdHJpbgogICAgICAgICAvLyBUaGUgbGF5
b3V0IG5lZWRzIHRvIGJlIHVwdG9kYXRlIGJlZm9yZSBzZXR0aW5nIGEgc2VsZWN0aW9uCiAgICAg
ICAgIHRhcmdldEZyYW1lLT5kb2N1bWVudCgpLT51cGRhdGVMYXlvdXQoKTsKIAotICAgICAgICBF
bGVtZW50KiBzY29wZSA9IHRhcmdldEZyYW1lLT5zZWxlY3Rpb24oKS5yb290RWRpdGFibGVFbGVt
ZW50KCk7CisgICAgICAgIEVsZW1lbnQqIHNjb3BlID0gdGFyZ2V0RnJhbWUtPnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpLnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsKICAgICAgICAgUmVmUHRyPFJhbmdl
PiByZXBsYWNlbWVudFJhbmdlID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUZyb21Mb2NhdGlvbkFuZExl
bmd0aChzY29wZSwgcmVwbGFjZW1lbnRTdGFydCwgcmVwbGFjZW1lbnRMZW5ndGgpOwogICAgICAg
ICB0YXJnZXRGcmFtZS0+ZWRpdG9yKCkuc2V0SWdub3JlQ29tcG9zaXRpb25TZWxlY3Rpb25DaGFu
Z2UodHJ1ZSk7CiAgICAgICAgIHRhcmdldEZyYW1lLT5zZWxlY3Rpb24oKS5zZXRTZWxlY3Rpb24o
VmlzaWJsZVNlbGVjdGlvbihyZXBsYWNlbWVudFJhbmdlLmdldCgpLCBTRUxfREVGQVVMVF9BRkZJ
TklUWSkpOwpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQ
YWdlSU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9pb3MvV2ViUGFnZUlPUy5tbQkocmV2aXNpb24gMTYzMTI4KQorKysgU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCSh3b3JraW5nIGNvcHkpCkBAIC05
Niw3ICs5Niw3IEBAIHZvaWQgV2ViUGFnZTo6c2V0Q29tcG9zaXRpb24oY29uc3QgU3RyaW4KIHsK
ICAgICBGcmFtZSYgZnJhbWUgPSBtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1h
aW5GcmFtZSgpOwogCi0gICAgaWYgKGZyYW1lLnNlbGVjdGlvbigpLmlzQ29udGVudEVkaXRhYmxl
KCkpCisgICAgaWYgKGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlzQ29udGVudEVkaXRh
YmxlKCkpCiAgICAgICAgIGZyYW1lLmVkaXRvcigpLnNldENvbXBvc2l0aW9uKHRleHQsIHVuZGVy
bGluZXMsIHNlbGVjdGlvblN0YXJ0LCBzZWxlY3Rpb25FbmQpOwogfQogCkBAIC01OTAsNyArNTkw
LDcgQEAgdm9pZCBXZWJQYWdlOjp1cGRhdGVTZWxlY3Rpb25XaXRoVG91Y2hlcwogICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIAogICAgICAgICBjYXNlIFdLU2VsZWN0aW9uVG91Y2hFbmRlZDoK
LSAgICAgICAgICAgIGlmIChmcmFtZS5zZWxlY3Rpb24oKS5pc0NvbnRlbnRFZGl0YWJsZSgpKSB7
CisgICAgICAgICAgICBpZiAoZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNDb250ZW50
RWRpdGFibGUoKSkgewogICAgICAgICAgICAgICAgIHJlc3VsdCA9IGNsb3Nlc3RXb3JkQm91bmRh
cnlGb3JQb3NpdGlvbihwb3NpdGlvbik7CiAgICAgICAgICAgICAgICAgaWYgKHJlc3VsdC5pc05v
dE51bGwoKSkKICAgICAgICAgICAgICAgICAgICAgcmFuZ2UgPSBSYW5nZTo6Y3JlYXRlKCpmcmFt
ZS5kb2N1bWVudCgpLCByZXN1bHQsIHJlc3VsdCk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCShyZXZpc2lvbiAxNjMx
MjgpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTI2MCw3ICsyNjAsNyBAQCB2b2lkIFdlYlBhZ2U6OnNldENv
bXBvc2l0aW9uKGNvbnN0IFN0cmluCiB7CiAgICAgRnJhbWUmIGZyYW1lID0gbV9wYWdlLT5mb2N1
c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKTsKIAotICAgIGlmIChmcmFtZS5zZWxl
Y3Rpb24oKS5pc0NvbnRlbnRFZGl0YWJsZSgpKSB7CisgICAgaWYgKGZyYW1lLnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpLmlzQ29udGVudEVkaXRhYmxlKCkpIHsKICAgICAgICAgUmVmUHRyPFJhbmdl
PiByZXBsYWNlbWVudFJhbmdlOwogICAgICAgICBpZiAocmVwbGFjZW1lbnRSYW5nZVN0YXJ0ICE9
IE5TTm90Rm91bmQpIHsKICAgICAgICAgICAgIHJlcGxhY2VtZW50UmFuZ2UgPSBjb252ZXJ0VG9S
YW5nZSgmZnJhbWUsIE5TTWFrZVJhbmdlKHJlcGxhY2VtZW50UmFuZ2VTdGFydCwgcmVwbGFjZW1l
bnRSYW5nZUVuZCAtIHJlcGxhY2VtZW50UmFuZ2VTdGFydCkpOwpAQCAtMzYwLDcgKzM2MCw4IEBA
IHZvaWQgV2ViUGFnZTo6Z2V0QXR0cmlidXRlZFN1YnN0cmluZ0Zyb20KIHsKICAgICBGcmFtZSYg
ZnJhbWUgPSBtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpOwog
Ci0gICAgaWYgKGZyYW1lLnNlbGVjdGlvbigpLmlzTm9uZSgpIHx8ICFmcmFtZS5zZWxlY3Rpb24o
KS5pc0NvbnRlbnRFZGl0YWJsZSgpIHx8IGZyYW1lLnNlbGVjdGlvbigpLmlzSW5QYXNzd29yZEZp
ZWxkKCkpCisgICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0gZnJhbWUuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgaWYgKHNlbGVjdGlvbi5pc05vbmUoKSB8fCAhc2Vs
ZWN0aW9uLmlzQ29udGVudEVkaXRhYmxlKCkgfHwgc2VsZWN0aW9uLmlzSW5QYXNzd29yZEZpZWxk
KCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIE5TUmFuZ2UgbnNSYW5nZSA9IE5TTWFrZVJhbmdl
KGxvY2F0aW9uLCBsZW5ndGggLSBsb2NhdGlvbik7CkluZGV4OiBTb3VyY2UvV2ViS2l0L2VmbC9D
aGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9lZmwvQ2hhbmdlTG9nCShyZXZp
c2lvbiAxNjMxNjMpCisrKyBTb3VyY2UvV2ViS2l0L2VmbC9DaGFuZ2VMb2cJKHdvcmtpbmcgY29w
eSkKQEAgLTEsMyArMSwxMyBAQAorMjAxNC0wMS0zMCAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Vi
a2l0Lm9yZz4KKworICAgICAgICBSZW1vdmUgaW5saW5lIG1lbWJlciBmdW5jdGlvbnMgb2YgRnJh
bWVTZWxlY3Rpb24gdGhhdCBhY2Nlc3MgbV9zZWxlY3Rpb24KKyAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNzk4NgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogZXdrL2V3a19mcmFtZS5jcHA6CisgICAgICAg
IChld2tfZnJhbWVfdGV4dF9zZWxlY3Rpb25fdHlwZV9nZXQpOgorCiAyMDE0LTAxLTMwICBBbmRy
ZWkgQnVjdXIgIDxhYnVjdXJAYWRvYmUuY29tPgogCiAgICAgICAgIFJlbW92ZSB0aGUgQUNDRUxF
UkFURURfQ09NUE9TSVRJTkcgZmxhZwpJbmRleDogU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19m
cmFtZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19mcmFtZS5j
cHAJKHJldmlzaW9uIDE2MzEyOCkKKysrIFNvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfZnJhbWUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xMDczLDkgKzEwNzMsOSBAQCBFd2tfVGV4dF9TZWxlY3Rp
b25fVHlwZSBld2tfZnJhbWVfdGV4dF9zCiAgICAgRVdLX0ZSQU1FX1NEX0dFVF9PUl9SRVRVUk4o
ZXdrRnJhbWUsIHNtYXJ0RGF0YSwgRVdLX1RFWFRfU0VMRUNUSU9OX05PTkUpOwogICAgIEVJTkFf
U0FGRVRZX09OX05VTExfUkVUVVJOX1ZBTChzbWFydERhdGEtPmZyYW1lLCBFV0tfVEVYVF9TRUxF
Q1RJT05fTk9ORSk7CiAKLSAgICBXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbiYgY29udHJvbGxlciA9
IHNtYXJ0RGF0YS0+ZnJhbWUtPnNlbGVjdGlvbigpOworICAgIGNvbnN0IFdlYkNvcmU6OlZpc2li
bGVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9IHNtYXJ0RGF0YS0+ZnJhbWUtPnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpOwogCi0gICAgc3dpdGNoIChjb250cm9sbGVyLnNlbGVjdGlvblR5cGUoKSkgewor
ICAgIHN3aXRjaCAoc2VsZWN0aW9uLnNlbGVjdGlvblR5cGUoKSkgewogICAgIGNhc2UgV2ViQ29y
ZTo6VmlzaWJsZVNlbGVjdGlvbjo6Tm9TZWxlY3Rpb246CiAgICAgICAgIHJldHVybiBFV0tfVEVY
VF9TRUxFQ1RJT05fTk9ORTsKICAgICBjYXNlIFdlYkNvcmU6OlZpc2libGVTZWxlY3Rpb246OkNh
cmV0U2VsZWN0aW9uOgpJbmRleDogU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZwkocmV2aXNpb24gMTYzMTYzKQorKysg
U291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMg
QEAKKzIwMTQtMDEtMzAgIFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAg
ICAgUmVtb3ZlIGlubGluZSBtZW1iZXIgZnVuY3Rpb25zIG9mIEZyYW1lU2VsZWN0aW9uIHRoYXQg
YWNjZXNzIG1fc2VsZWN0aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xMjc5ODYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudEd0ay5jcHA6CisgICAgICAg
IChXZWJLaXQ6OmNvbGxhcHNlU2VsZWN0aW9uKToKKwogMjAxNC0wMS0zMCAgQW5kcmVpIEJ1Y3Vy
ICA8YWJ1Y3VyQGFkb2JlLmNvbT4KIAogICAgICAgICBSZW1vdmUgdGhlIEFDQ0VMRVJBVEVEX0NP
TVBPU0lUSU5HIGZsYWcKSW5kZXg6IFNvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Vk
aXRvckNsaWVudEd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9ndGsvV2ViQ29y
ZVN1cHBvcnQvRWRpdG9yQ2xpZW50R3RrLmNwcAkocmV2aXNpb24gMTYzMTI4KQorKysgU291cmNl
L1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50R3RrLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMjE2LDcgKzIxNiw4IEBAIHN0YXRpYyB2b2lkIGNvbGxhcHNlU2VsZWN0aW9uKEd0
a0NsaXBib2EKICAgICBGcmFtZSYgZnJhbWUgPSBjb3JlUGFnZS0+Zm9jdXNDb250cm9sbGVyKCku
Zm9jdXNlZE9yTWFpbkZyYW1lKCk7CiAKICAgICAvLyBDb2xsYXBzZSB0aGUgc2VsZWN0aW9uIHdp
dGhvdXQgY2xlYXJpbmcgaXQKLSAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRCYXNlKGZyYW1lLnNl
bGVjdGlvbigpLmV4dGVudCgpLCBmcmFtZS5zZWxlY3Rpb24oKS5hZmZpbml0eSgpKTsKKyAgICBj
b25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBmcmFtZS5zZWxlY3Rpb24oKTsKKyAg
ICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRCYXNlKHNlbGVjdGlvbi5leHRlbnQoKSwgc2VsZWN0aW9u
LmFmZmluaXR5KCkpOwogfQogCiAjaWYgUExBVEZPUk0oWDExKQpJbmRleDogU291cmNlL1dlYktp
dC9pb3MvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvaW9zL0NoYW5nZUxv
ZwkocmV2aXNpb24gMTYzMTYzKQorKysgU291cmNlL1dlYktpdC9pb3MvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTQtMDEtMzAgIFJ5b3N1a2UgTml3YSAgPHJu
aXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmVtb3ZlIGlubGluZSBtZW1iZXIgZnVuY3Rpb25z
IG9mIEZyYW1lU2VsZWN0aW9uIHRoYXQgYWNjZXNzIG1fc2VsZWN0aW9uCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjc5ODYKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L1dlYkZy
YW1lSU9TLm1tOgorICAgICAgICAoLVtXZWJGcmFtZSBzZXRCYXNlV3JpdGluZ0RpcmVjdGlvbjpd
KToKKwogMjAxNC0wMS0zMCAgQW5kcmVpIEJ1Y3VyICA8YWJ1Y3VyQGFkb2JlLmNvbT4KIAogICAg
ICAgICBSZW1vdmUgdGhlIEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HIGZsYWcKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQvaW9zL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lSU9TLm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvaW9zL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lSU9TLm1tCShyZXZpc2lv
biAxNjMxMjgpCisrKyBTb3VyY2UvV2ViS2l0L2lvcy9XZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUlP
Uy5tbQkod29ya2luZyBjb3B5KQpAQCAtNTc1LDcgKzU3NSw3IEBAIC0gKHZvaWQpc2V0QmFzZVdy
aXRpbmdEaXJlY3Rpb246KFdLV3JpdGkKICAgICBXS1dyaXRpbmdEaXJlY3Rpb24gb3JpZ2luYWxE
aXJlY3Rpb24gPSBbc2VsZiBzZWxlY3Rpb25CYXNlV3JpdGluZ0RpcmVjdGlvbl07CiAKICAgICBG
cmFtZSAqZnJhbWUgPSBbc2VsZiBjb3JlRnJhbWVdOwotICAgIGlmICghZnJhbWUtPnNlbGVjdGlv
bigpLmlzQ29udGVudEVkaXRhYmxlKCkpCisgICAgaWYgKCFmcmFtZS0+c2VsZWN0aW9uKCkuc2Vs
ZWN0aW9uKCkuaXNDb250ZW50RWRpdGFibGUoKSkKICAgICAgICAgcmV0dXJuOwogICAgIAogICAg
IFdyaXRpbmdEaXJlY3Rpb24gd2NEaXJlY3Rpb24gPSBMZWZ0VG9SaWdodFdyaXRpbmdEaXJlY3Rp
b247CkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNjMxNjMpCisrKyBTb3VyY2UvV2Vi
S2l0L21hYy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyOCBAQAorMjAxNC0w
MS0zMCAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KKworICAgICAgICBSZW1vdmUg
aW5saW5lIG1lbWJlciBmdW5jdGlvbnMgb2YgRnJhbWVTZWxlY3Rpb24gdGhhdCBhY2Nlc3MgbV9z
ZWxlY3Rpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTEyNzk4NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogV2ViVmlldy9XZWJGcmFtZS5tbToKKyAgICAgICAgKC1bV2ViRnJhbWUgaGFzRWRpdGFibGVT
ZWxlY3Rpb25dKToKKyAgICAgICAgKC1bV2ViRnJhbWUgc2VsZWN0aW9uQWZmaW5pdHldKToKKyAg
ICAgICAgKC1bV2ViRnJhbWUgZ2V0RGljdGF0aW9uUmVzdWx0UmFuZ2VzOmFuZE1ldGFkYXRhczpd
KToKKyAgICAgICAgKC1bV2ViRnJhbWUgZm9jdXNlZE5vZGVIYXNDb250ZW50XSk6CisgICAgICAg
ICogV2ViVmlldy9XZWJIVE1MVmlldy5tbToKKyAgICAgICAgKC1bV2ViSFRNTFZpZXcgcmVhZFNl
bGVjdGlvbkZyb21QYXN0ZWJvYXJkOl0pOgorICAgICAgICAoLVtXZWJIVE1MVmlldyBfaGFzU2Vs
ZWN0aW9uXSk6CisgICAgICAgICgtW1dlYkhUTUxWaWV3IF9oYXNTZWxlY3Rpb25Pckluc2VydGlv
blBvaW50XSk6CisgICAgICAgICgtW1dlYkhUTUxWaWV3IF9oYXNJbnNlcnRpb25Qb2ludF0pOgor
ICAgICAgICAoLVtXZWJIVE1MVmlldyBfaXNFZGl0YWJsZV0pOgorICAgICAgICAoLVtXZWJIVE1M
VmlldyB2YWxpZGF0ZVVzZXJJbnRlcmZhY2VJdGVtV2l0aG91dERlbGVnYXRlOl0pOgorICAgICAg
ICAoLVtXZWJIVE1MVmlldyBtYWludGFpbnNJbmFjdGl2ZVNlbGVjdGlvbl0pOgorICAgICAgICAo
aXNUZXh0SW5wdXQpOgorICAgICAgICAoaXNJblBhc3N3b3JkRmllbGQpOgorICAgICAgICAqIFdl
YlZpZXcvV2ViVmlldy5tbToKKyAgICAgICAgKC1bV2ViVmlldyBzZWxlY3Rpb25BZmZpbml0eV0p
OgorCiAyMDE0LTAxLTMwICBEYXZpZCBLaWx6ZXIgIDxkZGtpbHplckBhcHBsZS5jb20+CiAKICAg
ICAgICAgQWRkIHNlY3VyaXR5LWNoZWNrZWQgY2FzdCBmb3IgV2ViQ29yZTo6Q2FjaGVkSW1hZ2UK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQkocmV2aXNpb24gMTYzMTI4
KQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQkod29ya2luZyBjb3B5
KQpAQCAtMTM0OCw3ICsxMzQ4LDcgQEAgLSAodm9pZClyZXNldFNlbGVjdGlvbgogLSAoQk9PTClo
YXNFZGl0YWJsZVNlbGVjdGlvbgogewogICAgIFdlYkNvcmU6OkZyYW1lICpmcmFtZSA9IGNvcmUo
c2VsZik7Ci0gICAgcmV0dXJuIGZyYW1lLT5zZWxlY3Rpb24oKS5pc0NvbnRlbnRFZGl0YWJsZSgp
OworICAgIHJldHVybiBmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNDb250ZW50RWRp
dGFibGUoKTsKIH0KIAogLSAoaW50KXByZWZlcnJlZEhlaWdodApAQCAtMTQ3Myw3ICsxNDczLDcg
QEAgLSAodm9pZClzZXRTZWxlY3RlZERPTVJhbmdlOihET01SYW5nZSAqKQogLSAoTlNTZWxlY3Rp
b25BZmZpbml0eSlzZWxlY3Rpb25BZmZpbml0eQogewogICAgIFdlYkNvcmU6OkZyYW1lICpmcmFt
ZSA9IGNvcmUoc2VsZik7Ci0gICAgcmV0dXJuIChOU1NlbGVjdGlvbkFmZmluaXR5KShmcmFtZS0+
c2VsZWN0aW9uKCkuYWZmaW5pdHkoKSk7CisgICAgcmV0dXJuIChOU1NlbGVjdGlvbkFmZmluaXR5
KShmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuYWZmaW5pdHkoKSk7CiB9CiAKIC0gKHZv
aWQpZXhwYW5kU2VsZWN0aW9uVG9FbGVtZW50Q29udGFpbmluZ0NhcmV0U2VsZWN0aW9uCkBAIC0x
NzE0LDggKzE3MTQsOSBAQCAtICh2b2lkKWdldERpY3RhdGlvblJlc3VsdFJhbmdlczooTlNBcnJh
CiAgICAgCiAgICAgRnJhbWUgKmZyYW1lID0gY29yZShzZWxmKTsKICAgICBEb2N1bWVudCAqZG9j
dW1lbnQgPSBmcmFtZS0+ZG9jdW1lbnQoKTsKLSAgICAKLSAgICBFbGVtZW50ICpyb290ID0gZnJh
bWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvblR5cGUoKSA9PSBWaXNpYmxlU2VsZWN0aW9uOjpOb1Nl
bGVjdGlvbiA/IGZyYW1lLT5kb2N1bWVudCgpLT5ib2R5KCkgOiBmcmFtZS0+c2VsZWN0aW9uKCku
cm9vdEVkaXRhYmxlRWxlbWVudCgpOworCisgICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2Vs
ZWN0aW9uID0gZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgIEVsZW1lbnQgKnJv
b3QgPSBzZWxlY3Rpb24uc2VsZWN0aW9uVHlwZSgpID09IFZpc2libGVTZWxlY3Rpb246Ok5vU2Vs
ZWN0aW9uID8gZnJhbWUtPmRvY3VtZW50KCktPmJvZHkoKSA6IHNlbGVjdGlvbi5yb290RWRpdGFi
bGVFbGVtZW50KCk7CiAgICAgCiAgICAgRE9NUmFuZ2UgKnByZXZpb3VzRE9NUmFuZ2UgPSBuaWw7
CiAgICAgaWQgcHJldmlvdXNNZXRhZGF0YSA9IG5pbDsKQEAgLTIyNzEsMTEgKzIyNzIsMTIgQEAg
LSAoQk9PTClmb2N1c2VkTm9kZUhhc0NvbnRlbnQKICAgICBGcmFtZSogY29yZUZyYW1lID0gX3By
aXZhdGUtPmNvcmVGcmFtZTsKICAgIAogICAgIEVsZW1lbnQqIHJvb3Q7Ci0gICAgaWYgKGNvcmVG
cmFtZS0+c2VsZWN0aW9uKCkuaXNOb25lKCkgfHwgIWNvcmVGcmFtZS0+c2VsZWN0aW9uKCkuaXND
b250ZW50RWRpdGFibGUoKSkKKyAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24g
PSBjb3JlRnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgIGlmIChzZWxlY3Rpb24u
aXNOb25lKCkgfHwgIXNlbGVjdGlvbi5pc0NvbnRlbnRFZGl0YWJsZSgpKQogICAgICAgICByb290
ID0gY29yZUZyYW1lLT5kb2N1bWVudCgpLT5ib2R5KCk7CiAgICAgZWxzZSB7CiAgICAgICAgIC8v
IENhbid0IHVzZSB0aGUgZm9jdXNlZE5vZGUgaGVyZSBiZWNhdXNlIHdlIHdhbnQgdGhlIHJvb3Qg
b2YgdGhlIHNoYWRvdyB0cmVlIGZvciBmb3JtIGVsZW1lbnRzLgotICAgICAgICByb290ID0gY29y
ZUZyYW1lLT5zZWxlY3Rpb24oKS5yb290RWRpdGFibGVFbGVtZW50KCk7CisgICAgICAgIHJvb3Qg
PSBzZWxlY3Rpb24ucm9vdEVkaXRhYmxlRWxlbWVudCgpOwogICAgIH0KICAgICAvLyBFYXJseSBy
ZXR1cm4gdG8gYXZvaWQgdGhlIGV4cGVuc2Ugb2YgY3JlYXRpbmcgVmlzaWJsZVBvc2l0aW9ucy4K
ICAgICAvLyBGSVhNRTogV2UgZmFpbCB0byBjb21wdXRlIGEgcm9vdCBmb3IgU1ZHLCB3ZSBoYXZl
IGEgbnVsbCBjaGVjayBoZXJlIHNvIHRoYXQgd2UgZG9uJ3QgY3Jhc2guCkluZGV4OiBTb3VyY2Uv
V2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0JKHJldmlzaW9uIDE2MzEyOCkKKysrIFNv
dXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0JKHdvcmtpbmcgY29weSkKQEAg
LTEwMDEsNyArMTAwMSw3IEBAIC0gKEJPT0wpcmVhZFNlbGVjdGlvbkZyb21QYXN0ZWJvYXJkOihO
U1AKICAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsgCiAgICAgaWYg
KCFjb3JlRnJhbWUpIAogICAgICAgICByZXR1cm4gTk87IAotICAgIGlmIChjb3JlRnJhbWUtPnNl
bGVjdGlvbigpLmlzQ29udGVudFJpY2hseUVkaXRhYmxlKCkpCisgICAgaWYgKGNvcmVGcmFtZS0+
c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNDb250ZW50UmljaGx5RWRpdGFibGUoKSkKICAgICAg
ICAgW3NlbGYgX3Bhc3RlV2l0aFBhc3RlYm9hcmQ6cGFzdGVib2FyZCBhbGxvd1BsYWluVGV4dDpZ
RVNdOyAKICAgICBlbHNlIAogICAgICAgICBbc2VsZiBfcGFzdGVBc1BsYWluVGV4dFdpdGhQYXN0
ZWJvYXJkOnBhc3RlYm9hcmRdOyAKQEAgLTE5ODYsMjUgKzE5ODYsMjUgQEAgLSAoQk9PTClfY2Fu
QWx0ZXJDdXJyZW50U2VsZWN0aW9uCiAtIChCT09MKV9oYXNTZWxlY3Rpb24KIHsKICAgICBGcmFt
ZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKLSAgICByZXR1cm4gY29yZUZyYW1l
ICYmIGNvcmVGcmFtZS0+c2VsZWN0aW9uKCkuaXNSYW5nZSgpOworICAgIHJldHVybiBjb3JlRnJh
bWUgJiYgY29yZUZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc1JhbmdlKCk7CiB9CiAK
IC0gKEJPT0wpX2hhc1NlbGVjdGlvbk9ySW5zZXJ0aW9uUG9pbnQKIHsKICAgICBGcmFtZSogY29y
ZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKLSAgICByZXR1cm4gY29yZUZyYW1lICYmIGNv
cmVGcmFtZS0+c2VsZWN0aW9uKCkuaXNDYXJldE9yUmFuZ2UoKTsKKyAgICByZXR1cm4gY29yZUZy
YW1lICYmIGNvcmVGcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNDYXJldE9yUmFuZ2Uo
KTsKIH0KIAogLSAoQk9PTClfaGFzSW5zZXJ0aW9uUG9pbnQKIHsKICAgICBGcmFtZSogY29yZUZy
YW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKLSAgICByZXR1cm4gY29yZUZyYW1lICYmIGNvcmVG
cmFtZS0+c2VsZWN0aW9uKCkuaXNDYXJldCgpOworICAgIHJldHVybiBjb3JlRnJhbWUgJiYgY29y
ZUZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0NhcmV0KCk7CiB9CiAKIC0gKEJPT0wp
X2lzRWRpdGFibGUKIHsKICAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVd
KTsKLSAgICByZXR1cm4gY29yZUZyYW1lICYmIGNvcmVGcmFtZS0+c2VsZWN0aW9uKCkuaXNDb250
ZW50RWRpdGFibGUoKTsKKyAgICByZXR1cm4gY29yZUZyYW1lICYmIGNvcmVGcmFtZS0+c2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCkuaXNDb250ZW50RWRpdGFibGUoKTsKIH0KIAogLSAoQk9PTClfdHJh
bnNwYXJlbnRCYWNrZ3JvdW5kCkBAIC0yODk5LDcgKzI4OTksNyBAQCAtIChCT09MKXZhbGlkYXRl
VXNlckludGVyZmFjZUl0ZW1XaXRob3V0CiAgICAgCiAgICAgaWYgKGFjdGlvbiA9PSBAc2VsZWN0
b3IocGFzdGVBc1JpY2hUZXh0OikpCiAgICAgICAgIHJldHVybiBmcmFtZSAmJiAoZnJhbWUtPmVk
aXRvcigpLmNhbkRIVE1MUGFzdGUoKQotICAgICAgICAgICAgfHwgKGZyYW1lLT5lZGl0b3IoKS5j
YW5QYXN0ZSgpICYmIGZyYW1lLT5zZWxlY3Rpb24oKS5pc0NvbnRlbnRSaWNobHlFZGl0YWJsZSgp
KSk7CisgICAgICAgICAgICB8fCAoZnJhbWUtPmVkaXRvcigpLmNhblBhc3RlKCkgJiYgZnJhbWUt
PnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlzQ29udGVudFJpY2hseUVkaXRhYmxlKCkpKTsKICAg
ICAKICAgICBpZiAoYWN0aW9uID09IEBzZWxlY3RvcihwZXJmb3JtRmluZFBhbmVsQWN0aW9uOikp
CiAgICAgICAgIHJldHVybiBOTzsKQEAgLTMwMjYsNyArMzAyNiw3IEBAIC0gKEJPT0wpbWFpbnRh
aW5zSW5hY3RpdmVTZWxlY3Rpb24KICAgICAgICAgcmV0dXJuIFlFUzsKICAgICAKICAgICBGcmFt
ZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKLSAgICByZXR1cm4gY29yZUZyYW1l
ICYmIGNvcmVGcmFtZS0+c2VsZWN0aW9uKCkuaXNDb250ZW50RWRpdGFibGUoKTsKKyAgICByZXR1
cm4gY29yZUZyYW1lICYmIGNvcmVGcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNDb250
ZW50RWRpdGFibGUoKTsKICNlbHNlCiAgICAgLy8gVGhpcyBtZXRob2QgaGVscHMgdG8gZGV0ZXJt
aW5lIHdoZXRoZXIgdGhlIFdlYkhUTUxWaWV3IHNob3VsZCBtYWludGFpbgogICAgIC8vIGFuIGlu
YWN0aXZlIHNlbGVjdGlvbiB3aGVuIGl0J3Mgbm90IGZpcnN0IHJlc3BvbmRlci4KQEAgLTMwNTcs
NyArMzA1Nyw3IEBAIC0gKEJPT0wpbWFpbnRhaW5zSW5hY3RpdmVTZWxlY3Rpb24KICAgICAgICAg
cmV0dXJuIFlFUzsKIAogICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9mcmFtZV0p
OwotICAgIGJvb2wgc2VsZWN0aW9uSXNFZGl0YWJsZSA9IGNvcmVGcmFtZSAmJiBjb3JlRnJhbWUt
PnNlbGVjdGlvbigpLmlzQ29udGVudEVkaXRhYmxlKCk7CisgICAgYm9vbCBzZWxlY3Rpb25Jc0Vk
aXRhYmxlID0gY29yZUZyYW1lICYmIGNvcmVGcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCku
aXNDb250ZW50RWRpdGFibGUoKTsKICAgICBib29sIG5leHRSZXNwb25kZXJJc0luV2ViVmlldyA9
IFtuZXh0UmVzcG9uZGVyIGlzS2luZE9mQ2xhc3M6W05TVmlldyBjbGFzc11dCiAgICAgICAgICYm
IFtuZXh0UmVzcG9uZGVyIGlzRGVzY2VuZGFudE9mOltbW3NlbGYgX3dlYlZpZXddIG1haW5GcmFt
ZV0gZnJhbWVWaWV3XV07CiAKQEAgLTQxMzcsMTMgKzQxMzcsMTYgQEAgLSAoQk9PTCluZWVkc1Bh
bmVsVG9CZWNvbWVLZXkKIC8vIEFQSSB3aGVuIGFuIGVkaXRhYmxlIHJlZ2lvbiBpcyBub3QgY3Vy
cmVudGx5IGZvY3VzZWQuCiBzdGF0aWMgQk9PTCBpc1RleHRJbnB1dChGcmFtZSogY29yZUZyYW1l
KQogewotICAgIHJldHVybiBjb3JlRnJhbWUgJiYgIWNvcmVGcmFtZS0+c2VsZWN0aW9uKCkuaXNO
b25lKCkgJiYgY29yZUZyYW1lLT5zZWxlY3Rpb24oKS5pc0NvbnRlbnRFZGl0YWJsZSgpOworICAg
IGlmICghY29yZUZyYW1lKQorICAgICAgICByZXR1cm4gTk87CisgICAgY29uc3QgVmlzaWJsZVNl
bGVjdGlvbiYgc2VsZWN0aW9uID0gY29yZUZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsK
KyAgICByZXR1cm4gIXNlbGVjdGlvbi5pc05vbmUoKSAmJiBzZWxlY3Rpb24uaXNDb250ZW50RWRp
dGFibGUoKTsKIH0KIAogI2lmICFQTEFURk9STShJT1MpCiBzdGF0aWMgQk9PTCBpc0luUGFzc3dv
cmRGaWVsZChGcmFtZSogY29yZUZyYW1lKQogewotICAgIHJldHVybiBjb3JlRnJhbWUgJiYgY29y
ZUZyYW1lLT5zZWxlY3Rpb24oKS5pc0luUGFzc3dvcmRGaWVsZCgpOworICAgIHJldHVybiBjb3Jl
RnJhbWUgJiYgY29yZUZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0luUGFzc3dvcmRG
aWVsZCgpOwogfQogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2Vi
Vmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcu
bW0JKHJldmlzaW9uIDE2MzEyOCkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViVmll
dy5tbQkod29ya2luZyBjb3B5KQpAQCAtNzI0NCw3ICs3MjQ0LDcgQEAgLSAoTlNTZWxlY3Rpb25B
ZmZpbml0eSlzZWxlY3Rpb25BZmZpbml0eQogICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtz
ZWxmIF9zZWxlY3RlZE9yTWFpbkZyYW1lXSk7CiAgICAgaWYgKCFjb3JlRnJhbWUpCiAgICAgICAg
IHJldHVybiBOU1NlbGVjdGlvbkFmZmluaXR5RG93bnN0cmVhbTsKLSAgICByZXR1cm4ga2l0KGNv
cmVGcmFtZS0+c2VsZWN0aW9uKCkuYWZmaW5pdHkoKSk7CisgICAgcmV0dXJuIGtpdChjb3JlRnJh
bWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmFmZmluaXR5KCkpOwogfQogCiAtICh2b2lkKXNl
dEVkaXRhYmxlOihCT09MKWZsYWcK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>222805</attachid>
            <date>2014-01-31 00:39:15 -0800</date>
            <delta_ts>2014-01-31 14:39:53 -0800</delta_ts>
            <desc>Another build fix</desc>
            <filename>bug-127986-20140131003914.patch</filename>
            <type>text/plain</type>
            <size>75295</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2MzE2MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwNSBAQAorMjAxNC0wMS0zMCAgUnlvc3Vr
ZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KKworICAgICAgICBSZW1vdmUgaW5saW5lIG1lbWJl
ciBmdW5jdGlvbnMgb2YgRnJhbWVTZWxlY3Rpb24gdGhhdCBhY2Nlc3MgbV9zZWxlY3Rpb24KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNzk4NgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlbW92ZWQgbnVt
ZXJvdXMgaW5saW5lIG1lbWJlciBmdW5jdGlvbnMgb2YgRnJhbWVTZWxlY3Rpb24gdGhhdCBkZXBl
bmQgb24gbV9zZWxlY3Rpb24uCisKKyAgICAgICAgVGhpcyBpcyBuZWVkZWQgdG8gZW5zdXJlIGFs
bCBhY2Nlc3NlcyB0byBtX3NlbGVjdGlvbiBoYXBwZW4gdGhyb3VnaCBGcmFtZVNlbGVjdGlvbjo6
c2VsZWN0aW9uKCksCisgICAgICAgIHdoaWNoIGluIHR1cm4sIGFsbG93cyB1cyB0byB1cGRhdGUg
aXRzIGNhbGwgc2l0ZXMgdG8gdXNlIGVpdGhlciB2YWxpZGF0ZWQgc2VsZWN0aW9uIHRoYXQgZWRp
dGluZworICAgICAgICBhbmQgcmVuZGVyaW5nIGNvZGUgdXNlcyBvciBpbnZhbGlkYXRlZCBzZWxl
Y3Rpb24gdGhhdCdzIGV4cG9zZWQgdG8gSmF2YVNjcmlwdC4KKworICAgICAgICAqIFdlYkNvcmUu
ZXhwLmluOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vzc2liaWxpdHlPYmpl
Y3RXcmFwcGVySU9TLm1tOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
ciBfY29udmVydFRvTlNSYW5nZTpdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVj
dFdyYXBwZXIgX2NvbnZlcnRUb0RPTVJhbmdlOl0pOgorICAgICAgICAqIGRvbS9FbGVtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnVwZGF0ZUZvY3VzQXBwZWFyYW5jZSk6Cisg
ICAgICAgICogZWRpdGluZy9FZGl0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpj
YW5FZGl0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Y2FuRWRpdFJpY2hseSk6CisgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3I6OmNhbkRIVE1MQ3V0KToKKyAgICAgICAgKFdlYkNvcmU6OkVk
aXRvcjo6Y2FuREhUTUxDb3B5KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Y2FuQ29weSk6
CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmNhbkRlbGV0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpFZGl0b3I6OnJlcGxhY2VTZWxlY3Rpb25XaXRoRnJhZ21lbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6RWRpdG9yOjp0cnlESFRNTENvcHkpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjp0cnlE
SFRNTEN1dCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmFwcGx5U3R5bGUpOgorICAgICAg
ICAoV2ViQ29yZTo6RWRpdG9yOjphcHBseVBhcmFncmFwaFN0eWxlKToKKyAgICAgICAgKFdlYkNv
cmU6OkVkaXRvcjo6Y3V0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Y29weSk6CisgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3I6OnBhc3RlKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6
c2V0Q29tcG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpndWVzc2VzRm9yTWlz
c3BlbGxlZE9yVW5ncmFtbWF0aWNhbCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Om1hcmtN
aXNzcGVsbGluZ3NBZnRlclR5cGluZ1RvV29yZCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6
OmlzU3BlbGxDaGVja2luZ0VuYWJsZWRJbkZvY3VzZWROb2RlKToKKyAgICAgICAgKFdlYkNvcmU6
OkVkaXRvcjo6bWFya0FuZFJlcGxhY2VGb3IpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpn
ZXRDb21wb3NpdGlvblNlbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnNlbGVj
dGlvblN0YXJ0SGFzTWFya2VyRm9yKToKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRvckNvbW1hbmQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6ZXhwYW5kU2VsZWN0aW9uVG9HcmFudWxhcml0eSk6Cisg
ICAgICAgIChXZWJDb3JlOjplbmFibGVkSW5SaWNobHlFZGl0YWJsZVRleHQpOgorICAgICAgICAo
V2ViQ29yZTo6ZW5hYmxlZFJhbmdlSW5FZGl0YWJsZVRleHQpOgorICAgICAgICAoV2ViQ29yZTo6
ZW5hYmxlZFJhbmdlSW5SaWNobHlFZGl0YWJsZVRleHQpOgorICAgICAgICAqIGVkaXRpbmcvRnJh
bWVTZWxlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnNldFNl
bGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDYXJldEJhc2U6OnVwZGF0ZUNhcmV0UmVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6cmVjb21wdXRlQ2FyZXRSZWN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpzZWxlY3RBbGwpOgorICAgICAgICAo
V2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnVwZGF0ZUFwcGVhcmFuY2UpOgorICAgICAgICAoV2Vi
Q29yZTo6RnJhbWVTZWxlY3Rpb246OnVwZGF0ZVNlbGVjdGlvbkNhY2hlc0lmU2VsZWN0aW9uSXNJ
bnNpZGVUZXh0Rm9ybUNvbnRyb2wpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246
OnNldEZvY3VzZWRFbGVtZW50SWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxl
Y3Rpb246OmN1cnJlbnRGb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpy
ZXZlYWxTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnNldFNl
bGVjdGlvbkZyb21Ob25lKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjp3b3Jk
U2VsZWN0aW9uQ29udGFpbmluZ0NhcmV0U2VsZWN0aW9uKToKKyAgICAgICAgKiBlZGl0aW5nL0Zy
YW1lU2VsZWN0aW9uLmg6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6aXNDYXJl
dE9yUmFuZ2UpOgorICAgICAgICAqIGVkaXRpbmcvUmVtb3ZlRm9ybWF0Q29tbWFuZC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW1vdmVGb3JtYXRDb21tYW5kOjpkb0FwcGx5KToKKyAgICAgICAg
KiBlZGl0aW5nL1Zpc2libGVTZWxlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6VmlzaWJs
ZVNlbGVjdGlvbjo6aXNJblBhc3N3b3JkRmllbGQpOgorICAgICAgICAqIGVkaXRpbmcvVmlzaWJs
ZVNlbGVjdGlvbi5oOgorICAgICAgICAqIGVkaXRpbmcvbWFjL0VkaXRvck1hYy5tbToKKyAgICAg
ICAgKFdlYkNvcmU6OkVkaXRvcjo6Y2FuQ29weUV4Y2x1ZGluZ1N0YW5kYWxvbmVJbWFnZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpyZWFkU2VsZWN0aW9uRnJvbVBhc3RlYm9hcmQpOgor
ICAgICAgICAqIGh0bWwvSFRNTEFuY2hvckVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTEFuY2hvckVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTEFuY2hvckVsZW1lbnQ6OnNldEFjdGl2ZSk6CisgICAgICAgICogaHRtbC9IVE1MVGV4
dEZvcm1Db250cm9sRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGV4dEZvcm1D
b250cm9sRWxlbWVudDo6Y29tcHV0ZVNlbGVjdGlvblN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50Ojpjb21wdXRlU2VsZWN0aW9uRW5kKToKKyAgICAg
ICAgKiBwYWdlL0NvbnRleHRNZW51Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
b250ZXh0TWVudUNvbnRyb2xsZXI6OmNvbnRleHRNZW51SXRlbVNlbGVjdGVkKToKKyAgICAgICAg
KFdlYkNvcmU6OkNvbnRleHRNZW51Q29udHJvbGxlcjo6cG9wdWxhdGUpOgorICAgICAgICAqIHBh
Z2UvRHJhZ0NvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0NvbnRyb2xsZXI6
OmRyYWdJc01vdmUpOgorICAgICAgICAoV2ViQ29yZTo6c2V0U2VsZWN0aW9uVG9EcmFnQ2FyZXQp
OgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0NvbnRyb2xsZXI6OmNvbmNsdWRlRWRpdERyYWcpOgor
ICAgICAgICAoV2ViQ29yZTo6RHJhZ0NvbnRyb2xsZXI6OnN0YXJ0RHJhZyk6CisgICAgICAgICog
cGFnZS9FdmVudEhhbmRsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bm9kZUlzTm90QmVpbmdF
ZGl0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpzZW5kQ29udGV4dE1lbnVF
dmVudCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnNlbmRDb250ZXh0TWVudUV2
ZW50Rm9yS2V5KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6aGFuZGxlRHJhZyk6
CisgICAgICAgICogcGFnZS9Gb2N1c0NvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Rm9jdXNDb250cm9sbGVyOjphZHZhbmNlRm9jdXNJbkRvY3VtZW50T3JkZXIpOgorICAgICAgICAo
V2ViQ29yZTo6Y2xlYXJTZWxlY3Rpb25JZk5lZWRlZCk6CisgICAgICAgICogcGFnZS9pb3MvRnJh
bWVJT1MubW06CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6Y2FyZXRSZWN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkZyYW1lOjpyZWN0Rm9yU2Nyb2xsVG9WaXNpYmxlKToKKyAgICAgICAgKFdlYkNv
cmU6OkZyYW1lOjpzdHlsZUF0U2VsZWN0aW9uU3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6RnJh
bWU6OnNldFJhbmdlZFNlbGVjdGlvbkJhc2VUb0N1cnJlbnRTZWxlY3Rpb25TdGFydCk6CisgICAg
ICAgIChXZWJDb3JlOjpGcmFtZTo6c2V0UmFuZ2VkU2VsZWN0aW9uQmFzZVRvQ3VycmVudFNlbGVj
dGlvbkVuZCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6c2V0UmFuZ2VkU2VsZWN0aW9uSW5p
dGlhbEV4dGVudFRvQ3VycmVudFNlbGVjdGlvblN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OkZy
YW1lOjpzZXRSYW5nZWRTZWxlY3Rpb25Jbml0aWFsRXh0ZW50VG9DdXJyZW50U2VsZWN0aW9uRW5k
KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjppbnRlcnByZXRhdGlvbnNGb3JDdXJyZW50Um9v
dCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckJsb2NrOjpwYWludENhcmV0KToKKwogMjAxNC0wMS0zMCAgU2ltb24gRnJhc2Vy
ICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBGaXggaU9TIGJ1aWxkIGFmdGVy
IHIxNjMxNTYuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgkocmV2aXNpb24gMTYzMTI4KQorKysg
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4JKHdvcmtpbmcgY29weSkKQEAgLTE1MzQsNyAr
MTUzNCw2IEBAIF9fWk5LN1dlYkNvcmUxNERvY3VtZW50TG9hZGVyOWlzTG9hZGluZ0UKIF9fWk5L
N1dlYkNvcmUxNERvY3VtZW50TWFya2VyMTFkZXNjcmlwdGlvbkV2CiBfX1pOSzdXZWJDb3JlMTRG
cmFtZVNlbGVjdGlvbjExY3VycmVudEZvcm1FdgogX19aTks3V2ViQ29yZTE0RnJhbWVTZWxlY3Rp
b24xNWNvcHlUeXBpbmdTdHlsZUV2Ci1fX1pOSzdXZWJDb3JlMTRGcmFtZVNlbGVjdGlvbjE3aXNJ
blBhc3N3b3JkRmllbGRFdgogX19aTks3V2ViQ29yZTE0RnJhbWVTZWxlY3Rpb24xOGlzRm9jdXNl
ZEFuZEFjdGl2ZUV2CiBfX1pOSzdXZWJDb3JlMTRGcmFtZVNlbGVjdGlvbjMxZ2V0Q2xpcHBlZFZp
c2libGVUZXh0UmVjdGFuZ2xlc0VSTjNXVEY2VmVjdG9ySU5TXzlGbG9hdFJlY3RFTG0wRU5TMV8x
NUNyYXNoT25PdmVyZmxvd0VFRQogX19aTks3V2ViQ29yZTE0RnJhbWVTZWxlY3Rpb24zNnJvb3RF
ZGl0YWJsZUVsZW1lbnRPckRvY3VtZW50RWxlbWVudEV2CkBAIC0xNjEzLDYgKzE2MTIsNyBAQCBf
X1pOSzdXZWJDb3JlMTZJY29uRGF0YWJhc2VCYXNlMTJkYXRhYmFzCiBfX1pOSzdXZWJDb3JlMTZS
ZXNvdXJjZVJlc3BvbnNlMTNuc1VSTFJlc3BvbnNlRXYKIF9fWk5LN1dlYkNvcmUxNlJlc291cmNl
UmVzcG9uc2UxNmNlcnRpZmljYXRlQ2hhaW5FdgogX19aTks3V2ViQ29yZTE2VmlzaWJsZVNlbGVj
dGlvbjE3aXNDb250ZW50RWRpdGFibGVFdgorX19aTks3V2ViQ29yZTE2VmlzaWJsZVNlbGVjdGlv
bjE3aXNJblBhc3N3b3JkRmllbGRFdgogX19aTks3V2ViQ29yZTE2VmlzaWJsZVNlbGVjdGlvbjE3
dG9Ob3JtYWxpemVkUmFuZ2VFdgogX19aTks3V2ViQ29yZTE2VmlzaWJsZVNlbGVjdGlvbjE5cm9v
dEVkaXRhYmxlRWxlbWVudEV2CiBfX1pOSzdXZWJDb3JlMTZWaXNpYmxlU2VsZWN0aW9uMjNpc0Nv
bnRlbnRSaWNobHlFZGl0YWJsZUV2CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcklPUy5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3Jh
cHBlcklPUy5tbQkocmV2aXNpb24gMTYzMTI4KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJT1MubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTE2NDEsOSArMTY0MSw3IEBAIC0gKE5TUmFuZ2UpX2NvbnZlcnRUb05TUmFuZ2U6KFJh
bmdlICopcmEKICAgICAgICAgcmV0dXJuIE5TTWFrZVJhbmdlKE5TTm90Rm91bmQsIDApOwogICAg
IAogICAgIERvY3VtZW50KiBkb2N1bWVudCA9IG1fb2JqZWN0LT5kb2N1bWVudCgpOwotICAgIEZy
YW1lU2VsZWN0aW9uJiBmcmFtZVNlbGVjdGlvbiA9IGRvY3VtZW50LT5mcmFtZSgpLT5zZWxlY3Rp
b24oKTsKLSAgICAKLSAgICBFbGVtZW50KiBzZWxlY3Rpb25Sb290ID0gZnJhbWVTZWxlY3Rpb24u
cm9vdEVkaXRhYmxlRWxlbWVudCgpOworICAgIEVsZW1lbnQqIHNlbGVjdGlvblJvb3QgPSBkb2N1
bWVudC0+ZnJhbWUoKS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkucm9vdEVkaXRhYmxlRWxlbWVu
dCgpOwogICAgIEVsZW1lbnQqIHNjb3BlID0gc2VsZWN0aW9uUm9vdCA/IHNlbGVjdGlvblJvb3Qg
OiBkb2N1bWVudC0+ZG9jdW1lbnRFbGVtZW50KCk7CiAgICAgCiAgICAgLy8gTW91c2UgZXZlbnRz
IG1heSBjYXVzZSBUU00gdG8gYXR0ZW1wdCB0byBjcmVhdGUgYW4gTlNSYW5nZSBmb3IgYSBwb3J0
aW9uIG9mIHRoZSB2aWV3CkBAIC0xNjc5LDggKzE2NzcsNyBAQCAtIChQYXNzUmVmUHRyPFJhbmdl
PilfY29udmVydFRvRE9NUmFuZ2U6CiAgICAgLy8gdG8gdXNlIHRoZSByb290IGVkaXRhYmxlIGVs
ZW1lbnQgb2YgdGhlIHNlbGVjdGlvbiBzdGFydCBhcyB0aGUgcG9zaXRpb25hbCBiYXNlLgogICAg
IC8vIFRoYXQgZml0cyB3aXRoIEFwcEtpdCdzIGlkZWEgb2YgYW4gaW5wdXQgY29udGV4dC4KICAg
ICBEb2N1bWVudCogZG9jdW1lbnQgPSBtX29iamVjdC0+ZG9jdW1lbnQoKTsKLSAgICBGcmFtZVNl
bGVjdGlvbiYgZnJhbWVTZWxlY3Rpb24gPSBkb2N1bWVudC0+ZnJhbWUoKS0+c2VsZWN0aW9uKCk7
Ci0gICAgRWxlbWVudCogc2VsZWN0aW9uUm9vdCA9IGZyYW1lU2VsZWN0aW9uLnJvb3RFZGl0YWJs
ZUVsZW1lbnQoKTsKKyAgICBFbGVtZW50KiBzZWxlY3Rpb25Sb290ID0gZG9jdW1lbnQtPmZyYW1l
KCktPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsKICAgICBF
bGVtZW50KiBzY29wZSA9IHNlbGVjdGlvblJvb3QgPyBzZWxlY3Rpb25Sb290IDogZG9jdW1lbnQt
PmRvY3VtZW50RWxlbWVudCgpOwogICAgIHJldHVybiBUZXh0SXRlcmF0b3I6OnJhbmdlRnJvbUxv
Y2F0aW9uQW5kTGVuZ3RoKHNjb3BlLCBuc3JhbmdlLmxvY2F0aW9uLCBuc3JhbmdlLmxlbmd0aCk7
CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCShyZXZpc2lvbiAxNjMxMjgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMDcsNyArMjAw
Nyw3IEBAIHZvaWQgRWxlbWVudDo6dXBkYXRlRm9jdXNBcHBlYXJhbmNlKGJvb2wKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgCiAgICAgICAgIC8vIFdoZW4gZm9jdXNpbmcgYW4gZWRpdGFi
bGUgZWxlbWVudCBpbiBhbiBpZnJhbWUsIGRvbid0IHJlc2V0IHRoZSBzZWxlY3Rpb24gaWYgaXQg
YWxyZWFkeSBjb250YWlucyBhIHNlbGVjdGlvbi4KLSAgICAgICAgaWYgKHRoaXMgPT0gZnJhbWUt
PnNlbGVjdGlvbigpLnJvb3RFZGl0YWJsZUVsZW1lbnQoKSkKKyAgICAgICAgaWYgKHRoaXMgPT0g
ZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnJvb3RFZGl0YWJsZUVsZW1lbnQoKSkKICAg
ICAgICAgICAgIHJldHVybjsKIAogICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHJlc3RvcmUg
dGhlIHByZXZpb3VzIHNlbGVjdGlvbiBpZiB0aGVyZSBpcyBvbmUuCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0VkaXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRp
dGluZy9FZGl0b3IuY3BwCShyZXZpc2lvbiAxNjMxMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0VkaXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4NiwxMiArMjg2LDEyIEBAIGJvb2wg
RWRpdG9yOjpoYW5kbGVUZXh0RXZlbnQoVGV4dEV2ZW50KiAKIAogYm9vbCBFZGl0b3I6OmNhbkVk
aXQoKSBjb25zdAogewotICAgIHJldHVybiBtX2ZyYW1lLnNlbGVjdGlvbigpLnJvb3RFZGl0YWJs
ZUVsZW1lbnQoKTsKKyAgICByZXR1cm4gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5y
b290RWRpdGFibGVFbGVtZW50KCk7CiB9CiAKIGJvb2wgRWRpdG9yOjpjYW5FZGl0UmljaGx5KCkg
Y29uc3QKIHsKLSAgICByZXR1cm4gbV9mcmFtZS5zZWxlY3Rpb24oKS5pc0NvbnRlbnRSaWNobHlF
ZGl0YWJsZSgpOworICAgIHJldHVybiBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlz
Q29udGVudFJpY2hseUVkaXRhYmxlKCk7CiB9CiAKIC8vIFdpbklFIHVzZXMgb25iZWZvcmVjdXQg
YW5kIG9uYmVmb3JlcGFzdGUgdG8gZW5hYmxlcyB0aGUgY3V0IGFuZCBwYXN0ZSBtZW51IGl0ZW1z
LiAgVGhleQpAQCAtMzAxLDEyICszMDEsMTIgQEAgYm9vbCBFZGl0b3I6OmNhbkVkaXRSaWNobHko
KSBjb25zdAogCiBib29sIEVkaXRvcjo6Y2FuREhUTUxDdXQoKQogewotICAgIHJldHVybiAhbV9m
cmFtZS5zZWxlY3Rpb24oKS5pc0luUGFzc3dvcmRGaWVsZCgpICYmICFkaXNwYXRjaENQUEV2ZW50
KGV2ZW50TmFtZXMoKS5iZWZvcmVjdXRFdmVudCwgQ2xpcGJvYXJkTnVtYik7CisgICAgcmV0dXJu
ICFtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlzSW5QYXNzd29yZEZpZWxkKCkgJiYg
IWRpc3BhdGNoQ1BQRXZlbnQoZXZlbnROYW1lcygpLmJlZm9yZWN1dEV2ZW50LCBDbGlwYm9hcmRO
dW1iKTsKIH0KIAogYm9vbCBFZGl0b3I6OmNhbkRIVE1MQ29weSgpCiB7Ci0gICAgcmV0dXJuICFt
X2ZyYW1lLnNlbGVjdGlvbigpLmlzSW5QYXNzd29yZEZpZWxkKCkgJiYgIWRpc3BhdGNoQ1BQRXZl
bnQoZXZlbnROYW1lcygpLmJlZm9yZWNvcHlFdmVudCwgQ2xpcGJvYXJkTnVtYik7CisgICAgcmV0
dXJuICFtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlzSW5QYXNzd29yZEZpZWxkKCkg
JiYgIWRpc3BhdGNoQ1BQRXZlbnQoZXZlbnROYW1lcygpLmJlZm9yZWNvcHlFdmVudCwgQ2xpcGJv
YXJkTnVtYik7CiB9CiAKIGJvb2wgRWRpdG9yOjpjYW5ESFRNTFBhc3RlKCkKQEAgLTM0MCw3ICsz
NDAsNyBAQCBib29sIEVkaXRvcjo6Y2FuQ29weSgpIGNvbnN0CiB7CiAgICAgaWYgKGltYWdlRWxl
bWVudEZyb21JbWFnZURvY3VtZW50KGRvY3VtZW50KCkpKQogICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICBGcmFtZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0gbV9mcmFtZS5zZWxlY3Rpb24oKTsKKyAg
ICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBtX2ZyYW1lLnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpOwogICAgIHJldHVybiBzZWxlY3Rpb24uaXNSYW5nZSgpICYmICFzZWxlY3Rp
b24uaXNJblBhc3N3b3JkRmllbGQoKTsKIH0KIApAQCAtMzUxLDcgKzM1MSw3IEBAIGJvb2wgRWRp
dG9yOjpjYW5QYXN0ZSgpIGNvbnN0CiAKIGJvb2wgRWRpdG9yOjpjYW5EZWxldGUoKSBjb25zdAog
ewotICAgIEZyYW1lU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBtX2ZyYW1lLnNlbGVjdGlvbigpOwor
ICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCk7CiAgICAgcmV0dXJuIHNlbGVjdGlvbi5pc1JhbmdlKCkgJiYgc2VsZWN0
aW9uLnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsKIH0KIApAQCAtNTk4LDcgKzU5OCw4IEBAIGJvb2wg
RWRpdG9yOjpzaG91bGRJbnNlcnRGcmFnbWVudChQYXNzUmUKIAogdm9pZCBFZGl0b3I6OnJlcGxh
Y2VTZWxlY3Rpb25XaXRoRnJhZ21lbnQoUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFn
bWVudCwgYm9vbCBzZWxlY3RSZXBsYWNlbWVudCwgYm9vbCBzbWFydFJlcGxhY2UsIGJvb2wgbWF0
Y2hTdHlsZSkKIHsKLSAgICBpZiAobV9mcmFtZS5zZWxlY3Rpb24oKS5pc05vbmUoKSB8fCAhbV9m
cmFtZS5zZWxlY3Rpb24oKS5pc0NvbnRlbnRFZGl0YWJsZSgpIHx8ICFmcmFnbWVudCkKKyAgICBW
aXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9u
KCk7CisgICAgaWYgKHNlbGVjdGlvbi5pc05vbmUoKSB8fCAhc2VsZWN0aW9uLmlzQ29udGVudEVk
aXRhYmxlKCkgfHwgIWZyYWdtZW50KQogICAgICAgICByZXR1cm47CiAKICAgICBSZXBsYWNlU2Vs
ZWN0aW9uQ29tbWFuZDo6Q29tbWFuZE9wdGlvbnMgb3B0aW9ucyA9IFJlcGxhY2VTZWxlY3Rpb25D
b21tYW5kOjpQcmV2ZW50TmVzdGluZyB8IFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpTYW5pdGl6
ZUZyYWdtZW50OwpAQCAtNjExLDkgKzYxMiwxMCBAQCB2b2lkIEVkaXRvcjo6cmVwbGFjZVNlbGVj
dGlvbldpdGhGcmFnbWVuCiAgICAgYXBwbHlDb21tYW5kKFJlcGxhY2VTZWxlY3Rpb25Db21tYW5k
OjpjcmVhdGUoZG9jdW1lbnQoKSwgZnJhZ21lbnQsIG9wdGlvbnMsIEVkaXRBY3Rpb25QYXN0ZSkp
OwogICAgIHJldmVhbFNlbGVjdGlvbkFmdGVyRWRpdGluZ09wZXJhdGlvbigpOwogCi0gICAgaWYg
KG1fZnJhbWUuc2VsZWN0aW9uKCkuaXNJblBhc3N3b3JkRmllbGQoKSB8fCAhaXNDb250aW51b3Vz
U3BlbGxDaGVja2luZ0VuYWJsZWQoKSkKKyAgICBzZWxlY3Rpb24gPSBtX2ZyYW1lLnNlbGVjdGlv
bigpLnNlbGVjdGlvbigpOworICAgIGlmIChzZWxlY3Rpb24uaXNJblBhc3N3b3JkRmllbGQoKSB8
fCAhaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwot
ICAgIE5vZGUqIG5vZGVUb0NoZWNrID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5yb290RWRpdGFibGVF
bGVtZW50KCk7CisgICAgTm9kZSogbm9kZVRvQ2hlY2sgPSBzZWxlY3Rpb24ucm9vdEVkaXRhYmxl
RWxlbWVudCgpOwogICAgIGlmICghbm9kZVRvQ2hlY2spCiAgICAgICAgIHJldHVybjsKIApAQCAt
NzI4LDcgKzczMCw3IEBAIGJvb2wgRWRpdG9yOjpzaG91bGREZWxldGVSYW5nZShSYW5nZSogcmEK
IAogYm9vbCBFZGl0b3I6OnRyeURIVE1MQ29weSgpCiB7ICAgCi0gICAgaWYgKG1fZnJhbWUuc2Vs
ZWN0aW9uKCkuaXNJblBhc3N3b3JkRmllbGQoKSkKKyAgICBpZiAobV9mcmFtZS5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKS5pc0luUGFzc3dvcmRGaWVsZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKICAgICByZXR1cm4gIWRpc3BhdGNoQ1BQRXZlbnQoZXZlbnROYW1lcygpLmNvcHlFdmVudCwg
Q2xpcGJvYXJkV3JpdGFibGUpOwpAQCAtNzM2LDcgKzczOCw3IEBAIGJvb2wgRWRpdG9yOjp0cnlE
SFRNTENvcHkoKQogCiBib29sIEVkaXRvcjo6dHJ5REhUTUxDdXQoKQogewotICAgIGlmIChtX2Zy
YW1lLnNlbGVjdGlvbigpLmlzSW5QYXNzd29yZEZpZWxkKCkpCisgICAgaWYgKG1fZnJhbWUuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNJblBhc3N3b3JkRmllbGQoKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIAogICAgIHJldHVybiAhZGlzcGF0Y2hDUFBFdmVudChldmVudE5hbWVzKCku
Y3V0RXZlbnQsIENsaXBib2FyZFdyaXRhYmxlKTsKQEAgLTk3MCw3ICs5NzIsNyBAQCBOb2RlKiBF
ZGl0b3I6OmZpbmRFdmVudFRhcmdldEZyb21TZWxlY3RpCiAKIHZvaWQgRWRpdG9yOjphcHBseVN0
eWxlKFN0eWxlUHJvcGVydGllcyogc3R5bGUsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlvbikKIHsK
LSAgICBzd2l0Y2ggKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uVHlwZSgpKSB7CisgICAg
c3dpdGNoIChtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnNlbGVjdGlvblR5cGUoKSkg
ewogICAgIGNhc2UgVmlzaWJsZVNlbGVjdGlvbjo6Tm9TZWxlY3Rpb246CiAgICAgICAgIC8vIGRv
IG5vdGhpbmcKICAgICAgICAgYnJlYWs7CkBAIC05OTEsNyArOTkzLDcgQEAgYm9vbCBFZGl0b3I6
OnNob3VsZEFwcGx5U3R5bGUoU3R5bGVQcm9wZQogICAgIAogdm9pZCBFZGl0b3I6OmFwcGx5UGFy
YWdyYXBoU3R5bGUoU3R5bGVQcm9wZXJ0aWVzKiBzdHlsZSwgRWRpdEFjdGlvbiBlZGl0aW5nQWN0
aW9uKQogewotICAgIHN3aXRjaCAobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb25UeXBlKCkp
IHsKKyAgICBzd2l0Y2ggKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9u
VHlwZSgpKSB7CiAgICAgY2FzZSBWaXNpYmxlU2VsZWN0aW9uOjpOb1NlbGVjdGlvbjoKICAgICAg
ICAgLy8gZG8gbm90aGluZwogICAgICAgICBicmVhazsKQEAgLTEyODAsNyArMTI4Miw3IEBAIHZv
aWQgRWRpdG9yOjpjdXQoKQogICAgIHdpbGxXcml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZChzZWxl
Y3Rpb24pOwogICAgIGlmIChzaG91bGREZWxldGVSYW5nZShzZWxlY3Rpb24uZ2V0KCkpKSB7CiAg
ICAgICAgIHVwZGF0ZU1hcmtlcnNGb3JXb3Jkc0FmZmVjdGVkQnlFZGl0aW5nKHRydWUpOwotICAg
ICAgICBpZiAoZW5jbG9zaW5nVGV4dEZvcm1Db250cm9sKG1fZnJhbWUuc2VsZWN0aW9uKCkuc3Rh
cnQoKSkpCisgICAgICAgIGlmIChlbmNsb3NpbmdUZXh0Rm9ybUNvbnRyb2wobV9mcmFtZS5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpKSkKICAgICAgICAgICAgIFBhc3RlYm9hcmQ6OmNy
ZWF0ZUZvckNvcHlBbmRQYXN0ZSgpLT53cml0ZVBsYWluVGV4dChzZWxlY3RlZFRleHRGb3JDbGlw
Ym9hcmQoKSwgY2FuU21hcnRDb3B5T3JEZWxldGUoKSA/IFBhc3RlYm9hcmQ6OkNhblNtYXJ0UmVw
bGFjZSA6IFBhc3RlYm9hcmQ6OkNhbm5vdFNtYXJ0UmVwbGFjZSk7CiAgICAgICAgIGVsc2Ugewog
I2lmIFBMQVRGT1JNKE1BQykgfHwgUExBVEZPUk0oRUZMKQpAQCAtMTMwNSw3ICsxMzA3LDcgQEAg
dm9pZCBFZGl0b3I6OmNvcHkoKQogICAgIH0KIAogICAgIHdpbGxXcml0ZVNlbGVjdGlvblRvUGFz
dGVib2FyZChzZWxlY3RlZFJhbmdlKCkpOwotICAgIGlmIChlbmNsb3NpbmdUZXh0Rm9ybUNvbnRy
b2wobV9mcmFtZS5zZWxlY3Rpb24oKS5zdGFydCgpKSkgeworICAgIGlmIChlbmNsb3NpbmdUZXh0
Rm9ybUNvbnRyb2wobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpKSkgewog
ICAgICAgICBQYXN0ZWJvYXJkOjpjcmVhdGVGb3JDb3B5QW5kUGFzdGUoKS0+d3JpdGVQbGFpblRl
eHQoc2VsZWN0ZWRUZXh0Rm9yQ2xpcGJvYXJkKCksCiAgICAgICAgICAgICBjYW5TbWFydENvcHlP
ckRlbGV0ZSgpID8gUGFzdGVib2FyZDo6Q2FuU21hcnRSZXBsYWNlIDogUGFzdGVib2FyZDo6Q2Fu
bm90U21hcnRSZXBsYWNlKTsKICAgICB9IGVsc2UgewpAQCAtMTM0Miw3ICsxMzQ0LDcgQEAgdm9p
ZCBFZGl0b3I6OnBhc3RlKFBhc3RlYm9hcmQmIHBhc3RlYm9hcgogICAgIHVwZGF0ZU1hcmtlcnNG
b3JXb3Jkc0FmZmVjdGVkQnlFZGl0aW5nKGZhbHNlKTsKICAgICBDYWNoZWRSZXNvdXJjZUxvYWRl
ciogbG9hZGVyID0gZG9jdW1lbnQoKS5jYWNoZWRSZXNvdXJjZUxvYWRlcigpOwogICAgIFJlc291
cmNlQ2FjaGVWYWxpZGF0aW9uU3VwcHJlc3NvciB2YWxpZGF0aW9uU3VwcHJlc3Nvcihsb2FkZXIp
OwotICAgIGlmIChtX2ZyYW1lLnNlbGVjdGlvbigpLmlzQ29udGVudFJpY2hseUVkaXRhYmxlKCkp
CisgICAgaWYgKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNDb250ZW50UmljaGx5
RWRpdGFibGUoKSkKICAgICAgICAgcGFzdGVXaXRoUGFzdGVib2FyZCgmcGFzdGVib2FyZCwgdHJ1
ZSk7CiAgICAgZWxzZQogICAgICAgICBwYXN0ZUFzUGxhaW5UZXh0V2l0aFBhc3RlYm9hcmQocGFz
dGVib2FyZCk7CkBAIC0xODQyLDggKzE4NDQsOCBAQCB2b2lkIEVkaXRvcjo6c2V0Q29tcG9zaXRp
b24oY29uc3QgU3RyaW5nCiAgICAgICAgIFR5cGluZ0NvbW1hbmQ6Omluc2VydFRleHQoZG9jdW1l
bnQoKSwgdGV4dCwgVHlwaW5nQ29tbWFuZDo6U2VsZWN0SW5zZXJ0ZWRUZXh0IHwgVHlwaW5nQ29t
bWFuZDo6UHJldmVudFNwZWxsQ2hlY2tpbmcsIFR5cGluZ0NvbW1hbmQ6OlRleHRDb21wb3NpdGlv
blVwZGF0ZSk7CiAKICAgICAgICAgLy8gRmluZCBvdXQgd2hhdCBub2RlIGhhcyB0aGUgY29tcG9z
aXRpb24gbm93LgotICAgICAgICBQb3NpdGlvbiBiYXNlID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5i
YXNlKCkuZG93bnN0cmVhbSgpOwotICAgICAgICBQb3NpdGlvbiBleHRlbnQgPSBtX2ZyYW1lLnNl
bGVjdGlvbigpLmV4dGVudCgpOworICAgICAgICBQb3NpdGlvbiBiYXNlID0gbV9mcmFtZS5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKS5iYXNlKCkuZG93bnN0cmVhbSgpOworICAgICAgICBQb3NpdGlv
biBleHRlbnQgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmV4dGVudCgpOwogICAg
ICAgICBOb2RlKiBiYXNlTm9kZSA9IGJhc2UuZGVwcmVjYXRlZE5vZGUoKTsKICAgICAgICAgdW5z
aWduZWQgYmFzZU9mZnNldCA9IGJhc2UuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKTsKICAgICAg
ICAgTm9kZSogZXh0ZW50Tm9kZSA9IGV4dGVudC5kZXByZWNhdGVkTm9kZSgpOwpAQCAtMjE2MSwx
MyArMjE2MywxMyBAQCBWZWN0b3I8U3RyaW5nPiBFZGl0b3I6Omd1ZXNzZXNGb3JNaXNzcGVsCiB7
CiAgICAgaWYgKHVuaWZpZWRUZXh0Q2hlY2tlckVuYWJsZWQoKSkgewogICAgICAgICBSZWZQdHI8
UmFuZ2U+IHJhbmdlOwotICAgICAgICBGcmFtZVNlbGVjdGlvbiYgZnJhbWVTZWxlY3Rpb24gPSBt
X2ZyYW1lLnNlbGVjdGlvbigpOwotICAgICAgICBpZiAoZnJhbWVTZWxlY3Rpb24uaXNDYXJldCgp
ICYmIGJlaGF2aW9yKCkuc2hvdWxkQWxsb3dTcGVsbGluZ1N1Z2dlc3Rpb25zV2l0aG91dFNlbGVj
dGlvbigpKSB7Ci0gICAgICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIHdvcmRTZWxlY3Rpb24gPSBW
aXNpYmxlU2VsZWN0aW9uKGZyYW1lU2VsZWN0aW9uLmJhc2UoKSk7CisgICAgICAgIFZpc2libGVT
ZWxlY3Rpb24gc2VsZWN0aW9uID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAg
ICAgICAgaWYgKHNlbGVjdGlvbi5pc0NhcmV0KCkgJiYgYmVoYXZpb3IoKS5zaG91bGRBbGxvd1Nw
ZWxsaW5nU3VnZ2VzdGlvbnNXaXRob3V0U2VsZWN0aW9uKCkpIHsKKyAgICAgICAgICAgIFZpc2li
bGVTZWxlY3Rpb24gd29yZFNlbGVjdGlvbiA9IFZpc2libGVTZWxlY3Rpb24oc2VsZWN0aW9uLmJh
c2UoKSk7CiAgICAgICAgICAgICB3b3JkU2VsZWN0aW9uLmV4cGFuZFVzaW5nR3JhbnVsYXJpdHko
V29yZEdyYW51bGFyaXR5KTsKICAgICAgICAgICAgIHJhbmdlID0gd29yZFNlbGVjdGlvbi50b05v
cm1hbGl6ZWRSYW5nZSgpOwogICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHJhbmdlID0gZnJh
bWVTZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICAgICAgICAgIHJhbmdlID0gc2Vs
ZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7CiAgICAgICAgIGlmICghcmFuZ2UpCiAgICAgICAg
ICAgICByZXR1cm4gVmVjdG9yPFN0cmluZz4oKTsKICAgICAgICAgcmV0dXJuIFRleHRDaGVja2lu
Z0hlbHBlcihjbGllbnQoKSwgcmFuZ2UpLmd1ZXNzZXNGb3JNaXNzcGVsbGVkT3JVbmdyYW1tYXRp
Y2FsUmFuZ2UoaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKCksIG1pc3NwZWxsZWQsIHVuZ3JhbW1h
dGljYWwpOwpAQCAtMjMwMSw3ICsyMzAzLDcgQEAgdm9pZCBFZGl0b3I6Om1hcmtNaXNzcGVsbGlu
Z3NBZnRlclR5cGluZwogICAgICAgICBtX2ZyYW1lLmVkaXRvcigpLnJlcGxhY2VTZWxlY3Rpb25X
aXRoVGV4dChhdXRvY29ycmVjdGVkU3RyaW5nLCBmYWxzZSwgZmFsc2UpOwogCiAgICAgICAgIC8v
IFJlc2V0IHRoZSBjaGFyZXQgb25lIGNoYXJhY3RlciBmdXJ0aGVyLgotICAgICAgICBtX2ZyYW1l
LnNlbGVjdGlvbigpLm1vdmVUbyhtX2ZyYW1lLnNlbGVjdGlvbigpLmVuZCgpKTsKKyAgICAgICAg
bV9mcmFtZS5zZWxlY3Rpb24oKS5tb3ZlVG8obV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24o
KS5lbmQoKSk7CiAgICAgICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkubW9kaWZ5KEZyYW1lU2VsZWN0
aW9uOjpBbHRlcmF0aW9uTW92ZSwgRGlyZWN0aW9uRm9yd2FyZCwgQ2hhcmFjdGVyR3JhbnVsYXJp
dHkpOwogICAgIH0KIApAQCAtMjM3MCw3ICsyMzcyLDcgQEAgYm9vbCBFZGl0b3I6OmlzU3BlbGxD
aGVja2luZ0VuYWJsZWRGb3IoTgogCiBib29sIEVkaXRvcjo6aXNTcGVsbENoZWNraW5nRW5hYmxl
ZEluRm9jdXNlZE5vZGUoKSBjb25zdAogewotICAgIHJldHVybiBpc1NwZWxsQ2hlY2tpbmdFbmFi
bGVkRm9yKG1fZnJhbWUuc2VsZWN0aW9uKCkuc3RhcnQoKS5kZXByZWNhdGVkTm9kZSgpKTsKKyAg
ICByZXR1cm4gaXNTcGVsbENoZWNraW5nRW5hYmxlZEZvcihtX2ZyYW1lLnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpLnN0YXJ0KCkuZGVwcmVjYXRlZE5vZGUoKSk7CiB9CiAKIHZvaWQgRWRpdG9yOjpt
YXJrTWlzc3BlbGxpbmdzKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiwgUmVmUHRy
PFJhbmdlPiYgZmlyc3RNaXNzcGVsbGluZ1JhbmdlKQpAQCAtMjQ5NCw5ICsyNDk2LDkgQEAgdm9p
ZCBFZGl0b3I6Om1hcmtBbmRSZXBsYWNlRm9yKFBhc3NSZWZQdAogICAgIGJvb2wgYWRqdXN0U2Vs
ZWN0aW9uRm9yUGFyYWdyYXBoQm91bmRhcmllcyA9IGZhbHNlOwogCiAgICAgaWYgKHNob3VsZFBl
cmZvcm1SZXBsYWNlbWVudCB8fCBzaG91bGRNYXJrU3BlbGxpbmcgfHwgc2hvdWxkQ2hlY2tGb3JD
b3JyZWN0aW9uKSB7Ci0gICAgICAgIGlmIChtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvblR5
cGUoKSA9PSBWaXNpYmxlU2VsZWN0aW9uOjpDYXJldFNlbGVjdGlvbikgeworICAgICAgICBpZiAo
bV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb25UeXBlKCkgPT0gVmlzaWJs
ZVNlbGVjdGlvbjo6Q2FyZXRTZWxlY3Rpb24pIHsKICAgICAgICAgICAgIC8vIEF0dGVtcHQgdG8g
c2F2ZSB0aGUgY2FyZXQgcG9zaXRpb24gc28gd2UgY2FuIHJlc3RvcmUgaXQgbGF0ZXIgaWYgbmVl
ZGVkCi0gICAgICAgICAgICBQb3NpdGlvbiBjYXJldFBvc2l0aW9uID0gbV9mcmFtZS5zZWxlY3Rp
b24oKS5lbmQoKTsKKyAgICAgICAgICAgIFBvc2l0aW9uIGNhcmV0UG9zaXRpb24gPSBtX2ZyYW1l
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmVuZCgpOwogICAgICAgICAgICAgc2VsZWN0aW9uT2Zm
c2V0ID0gcGFyYWdyYXBoLm9mZnNldFRvKGNhcmV0UG9zaXRpb24sIEFTU0VSVF9OT19FWENFUFRJ
T04pOwogICAgICAgICAgICAgcmVzdG9yZVNlbGVjdGlvbkFmdGVyQ2hhbmdlID0gdHJ1ZTsKICAg
ICAgICAgICAgIGlmIChzZWxlY3Rpb25PZmZzZXQgPiAwICYmIChzZWxlY3Rpb25PZmZzZXQgPiBw
YXJhZ3JhcGgudGV4dExlbmd0aCgpIHx8IHBhcmFncmFwaC50ZXh0Q2hhckF0KHNlbGVjdGlvbk9m
ZnNldCAtIDEpID09IG5ld2xpbmVDaGFyYWN0ZXIpKQpAQCAtMjYyNSw3ICsyNjI3LDcgQEAgdm9p
ZCBFZGl0b3I6Om1hcmtBbmRSZXBsYWNlRm9yKFBhc3NSZWZQdAogICAgICAgICAgICAgICAgIG1f
ZnJhbWUuc2VsZWN0aW9uKCkubW9kaWZ5KEZyYW1lU2VsZWN0aW9uOjpBbHRlcmF0aW9uTW92ZSwg
RGlyZWN0aW9uRm9yd2FyZCwgQ2hhcmFjdGVyR3JhbnVsYXJpdHkpOwogICAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgICAgLy8gSWYgdGhpcyBmYWlscyBmb3IgYW55IHJlYXNvbiwgdGhlIGZhbGxi
YWNrIGlzIHRvIGdvIG9uZSBwb3NpdGlvbiBiZXlvbmQgdGhlIGxhc3QgcmVwbGFjZW1lbnQKLSAg
ICAgICAgICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkubW92ZVRvKG1fZnJhbWUuc2VsZWN0aW9uKCku
ZW5kKCkpOworICAgICAgICAgICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5tb3ZlVG8obV9mcmFtZS5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5lbmQoKSk7CiAgICAgICAgICAgICBtX2ZyYW1lLnNlbGVj
dGlvbigpLm1vZGlmeShGcmFtZVNlbGVjdGlvbjo6QWx0ZXJhdGlvbk1vdmUsIERpcmVjdGlvbkZv
cndhcmQsIENoYXJhY3RlckdyYW51bGFyaXR5KTsKICAgICAgICAgfQogICAgIH0KQEAgLTI4MjIs
MTAgKzI4MjQsMTEgQEAgYm9vbCBFZGl0b3I6OmdldENvbXBvc2l0aW9uU2VsZWN0aW9uKHVucwog
ewogICAgIGlmICghbV9jb21wb3NpdGlvbk5vZGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICBQb3NpdGlvbiBzdGFydCA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc3RhcnQoKTsKKyAgICBjb25z
dCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpOworICAgIFBvc2l0aW9uIHN0YXJ0ID0gc2VsZWN0aW9uLnN0YXJ0KCk7CiAgICAgaWYg
KHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCkgIT0gbV9jb21wb3NpdGlvbk5vZGUpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICBQb3NpdGlvbiBlbmQgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLmVuZCgp
OworICAgIFBvc2l0aW9uIGVuZCA9IHNlbGVjdGlvbi5lbmQoKTsKICAgICBpZiAoZW5kLmRlcHJl
Y2F0ZWROb2RlKCkgIT0gbV9jb21wb3NpdGlvbk5vZGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IApAQCAtMzM4Miw3ICszMzg1LDcgQEAgc3RhdGljIE5vZGUqIGZpbmRGaXJzdE1hcmthYmxlKE5v
ZGUqIG5vZAogCiBib29sIEVkaXRvcjo6c2VsZWN0aW9uU3RhcnRIYXNNYXJrZXJGb3IoRG9jdW1l
bnRNYXJrZXI6Ok1hcmtlclR5cGUgbWFya2VyVHlwZSwgaW50IGZyb20sIGludCBsZW5ndGgpIGNv
bnN0CiB7Ci0gICAgTm9kZSogbm9kZSA9IGZpbmRGaXJzdE1hcmthYmxlKG1fZnJhbWUuc2VsZWN0
aW9uKCkuc3RhcnQoKS5kZXByZWNhdGVkTm9kZSgpKTsKKyAgICBOb2RlKiBub2RlID0gZmluZEZp
cnN0TWFya2FibGUobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpLmRlcHJl
Y2F0ZWROb2RlKCkpOwogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAJKHJldmlzaW9uIDE2
MzEyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIxNSw4ICsyMTUsOCBAQCBzdGF0aWMgYm9vbCBleHBhbmRTZWxlY3Rpb25U
b0dyYW51bGFyaXR5CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAobmV3UmFuZ2UtPmNv
bGxhcHNlZChJR05PUkVfRVhDRVBUSU9OKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIFJl
ZlB0cjxSYW5nZT4gb2xkUmFuZ2UgPSBmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05v
cm1hbGl6ZWRSYW5nZSgpOwotICAgIEVBZmZpbml0eSBhZmZpbml0eSA9IGZyYW1lLnNlbGVjdGlv
bigpLmFmZmluaXR5KCk7CisgICAgUmVmUHRyPFJhbmdlPiBvbGRSYW5nZSA9IHNlbGVjdGlvbi50
b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIEVBZmZpbml0eSBhZmZpbml0eSA9IHNlbGVjdGlvbi5h
ZmZpbml0eSgpOwogICAgIGlmICghZnJhbWUuZWRpdG9yKCkuY2xpZW50KCktPnNob3VsZENoYW5n
ZVNlbGVjdGVkUmFuZ2Uob2xkUmFuZ2UuZ2V0KCksIG5ld1JhbmdlLmdldCgpLCBhZmZpbml0eSwg
ZmFsc2UpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0
U2VsZWN0ZWRSYW5nZShuZXdSYW5nZS5nZXQoKSwgYWZmaW5pdHksIHRydWUpOwpAQCAtMTI5Nyw3
ICsxMjk3LDggQEAgc3RhdGljIGJvb2wgZW5hYmxlZEluRWRpdGFibGVUZXh0T3JDYXJldAogCiBz
dGF0aWMgYm9vbCBlbmFibGVkSW5SaWNobHlFZGl0YWJsZVRleHQoRnJhbWUmIGZyYW1lLCBFdmVu
dCosIEVkaXRvckNvbW1hbmRTb3VyY2UpCiB7Ci0gICAgcmV0dXJuIGZyYW1lLnNlbGVjdGlvbigp
LmlzQ2FyZXRPclJhbmdlKCkgJiYgZnJhbWUuc2VsZWN0aW9uKCkuaXNDb250ZW50UmljaGx5RWRp
dGFibGUoKSAmJiBmcmFtZS5zZWxlY3Rpb24oKS5yb290RWRpdGFibGVFbGVtZW50KCk7CisgICAg
Y29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0gZnJhbWUuc2VsZWN0aW9uKCkuc2Vs
ZWN0aW9uKCk7CisgICAgcmV0dXJuIHNlbGVjdGlvbi5pc0NhcmV0T3JSYW5nZSgpICYmIHNlbGVj
dGlvbi5pc0NvbnRlbnRSaWNobHlFZGl0YWJsZSgpICYmIHNlbGVjdGlvbi5yb290RWRpdGFibGVF
bGVtZW50KCk7CiB9CiAKIHN0YXRpYyBib29sIGVuYWJsZWRQYXN0ZShGcmFtZSYgZnJhbWUsIEV2
ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSkKQEAgLTEzMDcsMTIgKzEzMDgsMTIgQEAgc3RhdGlj
IGJvb2wgZW5hYmxlZFBhc3RlKEZyYW1lJiBmcmFtZSwgRQogCiBzdGF0aWMgYm9vbCBlbmFibGVk
UmFuZ2VJbkVkaXRhYmxlVGV4dChGcmFtZSYgZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNv
dXJjZSkKIHsKLSAgICByZXR1cm4gZnJhbWUuc2VsZWN0aW9uKCkuaXNSYW5nZSgpICYmIGZyYW1l
LnNlbGVjdGlvbigpLmlzQ29udGVudEVkaXRhYmxlKCk7CisgICAgcmV0dXJuIGZyYW1lLnNlbGVj
dGlvbigpLmlzUmFuZ2UoKSAmJiBmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0NvbnRl
bnRFZGl0YWJsZSgpOwogfQogCiBzdGF0aWMgYm9vbCBlbmFibGVkUmFuZ2VJblJpY2hseUVkaXRh
YmxlVGV4dChGcmFtZSYgZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSkKIHsKLSAg
ICByZXR1cm4gZnJhbWUuc2VsZWN0aW9uKCkuaXNSYW5nZSgpICYmIGZyYW1lLnNlbGVjdGlvbigp
LmlzQ29udGVudFJpY2hseUVkaXRhYmxlKCk7CisgICAgcmV0dXJuIGZyYW1lLnNlbGVjdGlvbigp
LmlzUmFuZ2UoKSAmJiBmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0NvbnRlbnRSaWNo
bHlFZGl0YWJsZSgpOwogfQogCiBzdGF0aWMgYm9vbCBlbmFibGVkUmVkbyhGcmFtZSYgZnJhbWUs
IEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvRnJhbWVTZWxlY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvRnJhbWVTZWxlY3Rpb24uY3BwCShyZXZpc2lvbiAxNjMxMjgpCisrKyBTb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMwNyw3ICsx
MzA3LDcgQEAgc3RhdGljIFJlbmRlck9iamVjdCogY2FyZXRSZW5kZXJlcihOb2RlKgogCiBib29s
IENhcmV0QmFzZTo6dXBkYXRlQ2FyZXRSZWN0KERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgVmlz
aWJsZVBvc2l0aW9uJiBjYXJldFBvc2l0aW9uKQogewotICAgIGRvY3VtZW50LT51cGRhdGVTdHls
ZUlmTmVlZGVkKCk7CisgICAgZG9jdW1lbnQtPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHls
ZXNoZWV0cygpOwogICAgIG1fY2FyZXRMb2NhbFJlY3QgPSBMYXlvdXRSZWN0KCk7CiAKICAgICBt
X2NhcmV0UmVjdE5lZWRzVXBkYXRlID0gZmFsc2U7CkBAIC0xNDI2LDcgKzE0MjYsNyBAQCBib29s
IEZyYW1lU2VsZWN0aW9uOjpyZWNvbXB1dGVDYXJldFJlY3QoCiAKICNpZiBFTkFCTEUoVEVYVF9D
QVJFVCkKICAgICBpZiAoUmVuZGVyVmlldyogdmlldyA9IG1fZnJhbWUtPmRvY3VtZW50KCktPnJl
bmRlclZpZXcoKSkgewotICAgICAgICBib29sIHByZXZpb3VzT3JOZXdDYXJldE5vZGVJc0NvbnRl
bnRFZGl0YWJsZSA9IGlzQ29udGVudEVkaXRhYmxlKCkgfHwgKG1fcHJldmlvdXNDYXJldE5vZGUg
JiYgbV9wcmV2aW91c0NhcmV0Tm9kZS0+aXNDb250ZW50RWRpdGFibGUoKSk7CisgICAgICAgIGJv
b2wgcHJldmlvdXNPck5ld0NhcmV0Tm9kZUlzQ29udGVudEVkaXRhYmxlID0gbV9zZWxlY3Rpb24u
aXNDb250ZW50RWRpdGFibGUoKSB8fCAobV9wcmV2aW91c0NhcmV0Tm9kZSAmJiBtX3ByZXZpb3Vz
Q2FyZXROb2RlLT5pc0NvbnRlbnRFZGl0YWJsZSgpKTsKICAgICAgICAgaWYgKHNob3VsZFJlcGFp
bnRDYXJldCh2aWV3LCBwcmV2aW91c09yTmV3Q2FyZXROb2RlSXNDb250ZW50RWRpdGFibGUpKSB7
CiAgICAgICAgICAgICBpZiAobV9wcmV2aW91c0NhcmV0Tm9kZSkKICAgICAgICAgICAgICAgICBy
ZXBhaW50Q2FyZXRGb3JMb2NhbFJlY3QobV9wcmV2aW91c0NhcmV0Tm9kZS5nZXQoKSwgb2xkUmVj
dCk7CkBAIC0xNjc1LDcgKzE2NzUsNyBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpzZWxlY3RBbGwo
KQogCiAgICAgUmVmUHRyPE5vZGU+IHJvb3QgPSAwOwogICAgIE5vZGUqIHNlbGVjdFN0YXJ0VGFy
Z2V0ID0gMDsKLSAgICBpZiAoaXNDb250ZW50RWRpdGFibGUoKSkgeworICAgIGlmIChtX3NlbGVj
dGlvbi5pc0NvbnRlbnRFZGl0YWJsZSgpKSB7CiAgICAgICAgIHJvb3QgPSBoaWdoZXN0RWRpdGFi
bGVSb290KG1fc2VsZWN0aW9uLnN0YXJ0KCkpOwogICAgICAgICBpZiAoTm9kZSogc2hhZG93Um9v
dCA9IG1fc2VsZWN0aW9uLm5vbkJvdW5kYXJ5U2hhZG93VHJlZVJvb3ROb2RlKCkpCiAgICAgICAg
ICAgICBzZWxlY3RTdGFydFRhcmdldCA9IHNoYWRvd1Jvb3QtPnNoYWRvd0hvc3QoKTsKQEAgLTE3
MzMsMTIgKzE3MzMsNiBAQCBib29sIEZyYW1lU2VsZWN0aW9uOjpzZXRTZWxlY3RlZFJhbmdlKFJh
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgRnJhbWVTZWxlY3Rpb246OmlzSW5QYXNzd29y
ZEZpZWxkKCkgY29uc3QKLXsKLSAgICBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudCogdGV4dENv
bnRyb2wgPSBlbmNsb3NpbmdUZXh0Rm9ybUNvbnRyb2woc3RhcnQoKSk7Ci0gICAgcmV0dXJuIHRl
eHRDb250cm9sICYmIGlzSFRNTElucHV0RWxlbWVudCh0ZXh0Q29udHJvbCkgJiYgdG9IVE1MSW5w
dXRFbGVtZW50KHRleHRDb250cm9sKS0+aXNQYXNzd29yZEZpZWxkKCk7Ci19Ci0KIHZvaWQgRnJh
bWVTZWxlY3Rpb246OmZvY3VzZWRPckFjdGl2ZVN0YXRlQ2hhbmdlZCgpCiB7CiAgICAgYm9vbCBh
Y3RpdmVBbmRGb2N1c2VkID0gaXNGb2N1c2VkQW5kQWN0aXZlKCk7CkBAIC0xODEzLDggKzE4MDcs
OSBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjp1cGRhdGVBcHBlYXJhbmNlKCkKIAogICAgIC8vIFBh
aW50IGEgYmxvY2sgY3Vyc29yIGluc3RlYWQgb2YgYSBjYXJldCBpbiBvdmVydHlwZSBtb2RlIHVu
bGVzcyB0aGUgY2FyZXQgaXMgYXQgdGhlIGVuZCBvZiBhIGxpbmUgKGluIHRoaXMgY2FzZQogICAg
IC8vIHRoZSBGcmFtZVNlbGVjdGlvbiB3aWxsIHBhaW50IGEgYmxpbmtpbmcgY2FyZXQgYXMgdXN1
YWwpLgorICAgIFZpc2libGVTZWxlY3Rpb24gb2xkU2VsZWN0aW9uID0gc2VsZWN0aW9uKCk7CiAg
ICAgVmlzaWJsZVBvc2l0aW9uIGZvcndhcmRQb3NpdGlvbjsKLSAgICBpZiAobV9zaG91bGRTaG93
QmxvY2tDdXJzb3IgJiYgbV9zZWxlY3Rpb24uaXNDYXJldCgpKSB7CisgICAgaWYgKG1fc2hvdWxk
U2hvd0Jsb2NrQ3Vyc29yICYmIG9sZFNlbGVjdGlvbi5pc0NhcmV0KCkpIHsKICAgICAgICAgZm9y
d2FyZFBvc2l0aW9uID0gbW9kaWZ5RXh0ZW5kaW5nRm9yd2FyZChDaGFyYWN0ZXJHcmFudWxhcml0
eSk7CiAgICAgICAgIG1fY2FyZXRQYWludCA9IGZvcndhcmRQb3NpdGlvbi5pc051bGwoKTsKICAg
ICB9CkBAIC0xODIzLDcgKzE4MTgsNyBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjp1cGRhdGVBcHBl
YXJhbmNlKCkKICAgICBib29sIGNhcmV0UmVjdENoYW5nZWRPckNsZWFyZWQgPSByZWNvbXB1dGVD
YXJldFJlY3QoKTsKIAogICAgIGJvb2wgY2FyZXRCcm93c2luZyA9IG1fZnJhbWUtPnNldHRpbmdz
KCkuY2FyZXRCcm93c2luZ0VuYWJsZWQoKTsKLSAgICBib29sIHNob3VsZEJsaW5rID0gY2FyZXRJ
c1Zpc2libGUoKSAmJiBpc0NhcmV0KCkgJiYgKGlzQ29udGVudEVkaXRhYmxlKCkgfHwgY2FyZXRC
cm93c2luZykgJiYgZm9yd2FyZFBvc2l0aW9uLmlzTnVsbCgpOworICAgIGJvb2wgc2hvdWxkQmxp
bmsgPSBjYXJldElzVmlzaWJsZSgpICYmIGlzQ2FyZXQoKSAmJiAob2xkU2VsZWN0aW9uLmlzQ29u
dGVudEVkaXRhYmxlKCkgfHwgY2FyZXRCcm93c2luZykgJiYgZm9yd2FyZFBvc2l0aW9uLmlzTnVs
bCgpOwogCiAgICAgLy8gSWYgdGhlIGNhcmV0IG1vdmVkLCBzdG9wIHRoZSBibGluayB0aW1lciBz
byB3ZSBjYW4gcmVzdGFydCB3aXRoIGEKICAgICAvLyBibGFjayBjYXJldCBpbiB0aGUgbmV3IGxv
Y2F0aW9uLgpAQCAtMTg0OSw3ICsxODQ0LDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6dXBkYXRl
QXBwZWFyYW5jZSgpCiAKICAgICAvLyBDb25zdHJ1Y3QgYSBuZXcgVmlzaWJsZVNvbHV0aW9uLCBz
aW5jZSBtX3NlbGVjdGlvbiBpcyBub3QgbmVjZXNzYXJpbHkgdmFsaWQsIGFuZCB0aGUgZm9sbG93
aW5nIHN0ZXBzCiAgICAgLy8gYXNzdW1lIGEgdmFsaWQgc2VsZWN0aW9uLiBTZWUgPGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02OTU2Mz4gYW5kIDxyZGFyOi8vcHJvYmxl
bS8xMDIzMjg2Nj4uCi0gICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24obV9zZWxlY3Rpb24u
dmlzaWJsZVN0YXJ0KCksIGZvcndhcmRQb3NpdGlvbi5pc05vdE51bGwoKSA/IGZvcndhcmRQb3Np
dGlvbiA6IG1fc2VsZWN0aW9uLnZpc2libGVFbmQoKSk7CisgICAgVmlzaWJsZVNlbGVjdGlvbiBz
ZWxlY3Rpb24ob2xkU2VsZWN0aW9uLnZpc2libGVTdGFydCgpLCBmb3J3YXJkUG9zaXRpb24uaXNO
b3ROdWxsKCkgPyBmb3J3YXJkUG9zaXRpb24gOiBvbGRTZWxlY3Rpb24udmlzaWJsZUVuZCgpKTsK
IAogICAgIGlmICghc2VsZWN0aW9uLmlzUmFuZ2UoKSkgewogICAgICAgICB2aWV3LT5jbGVhclNl
bGVjdGlvbigpOwpAQCAtMTkxMiw3ICsxOTA3LDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6Y2Fy
ZXRCbGlua1RpbWVyRmlyZQogCiB2b2lkIEZyYW1lU2VsZWN0aW9uOjp1cGRhdGVTZWxlY3Rpb25D
YWNoZXNJZlNlbGVjdGlvbklzSW5zaWRlVGV4dEZvcm1Db250cm9sKEVVc2VyVHJpZ2dlcmVkIHVz
ZXJUcmlnZ2VyZWQpCiB7Ci0gICAgaWYgKEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50KiB0ZXh0
Q29udHJvbCA9IGVuY2xvc2luZ1RleHRGb3JtQ29udHJvbChzdGFydCgpKSkKKyAgICBpZiAoSFRN
TFRleHRGb3JtQ29udHJvbEVsZW1lbnQqIHRleHRDb250cm9sID0gZW5jbG9zaW5nVGV4dEZvcm1D
b250cm9sKG1fc2VsZWN0aW9uLnN0YXJ0KCkpKQogICAgICAgICB0ZXh0Q29udHJvbC0+c2VsZWN0
aW9uQ2hhbmdlZCh1c2VyVHJpZ2dlcmVkID09IFVzZXJUcmlnZ2VyZWQpOwogfQogCkBAIC0xOTM2
LDEzICsxOTMxLDEzIEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnNldEZvY3VzZWRFbGVtZW50SWYK
IAogICAgIGJvb2wgY2FyZXRCcm93c2luZyA9IG1fZnJhbWUtPnNldHRpbmdzKCkuY2FyZXRCcm93
c2luZ0VuYWJsZWQoKTsKICAgICBpZiAoY2FyZXRCcm93c2luZykgewotICAgICAgICBpZiAoRWxl
bWVudCogYW5jaG9yID0gZW5jbG9zaW5nQW5jaG9yRWxlbWVudChiYXNlKCkpKSB7CisgICAgICAg
IGlmIChFbGVtZW50KiBhbmNob3IgPSBlbmNsb3NpbmdBbmNob3JFbGVtZW50KG1fc2VsZWN0aW9u
LmJhc2UoKSkpIHsKICAgICAgICAgICAgIG1fZnJhbWUtPnBhZ2UoKS0+Zm9jdXNDb250cm9sbGVy
KCkuc2V0Rm9jdXNlZEVsZW1lbnQoYW5jaG9yLCBtX2ZyYW1lKTsKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChFbGVtZW50KiB0YXJnZXQgPSByb290RWRp
dGFibGVFbGVtZW50KCkpIHsKKyAgICBpZiAoRWxlbWVudCogdGFyZ2V0ID0gbV9zZWxlY3Rpb24u
cm9vdEVkaXRhYmxlRWxlbWVudCgpKSB7CiAgICAgICAgIC8vIFdhbGsgdXAgdGhlIERPTSB0cmVl
IHRvIHNlYXJjaCBmb3IgYW4gZWxlbWVudCB0byBmb2N1cy4KICAgICAgICAgd2hpbGUgKHRhcmdl
dCkgewogICAgICAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBzZXQgZm9jdXMgb24gYSBzdWJm
cmFtZSB3aGVuIHNlbGVjdGluZyBpbiBhIHBhcmVudCBmcmFtZSwKQEAgLTIwNTQsNyArMjA0OSw3
IEBAIEhUTUxGb3JtRWxlbWVudCogRnJhbWVTZWxlY3Rpb246OmN1cnJlbnQKICAgICAvLyBTdGFy
dCBsb29raW5nIGVpdGhlciBhdCB0aGUgYWN0aXZlIChmaXJzdCByZXNwb25kZXIpIG5vZGUsIG9y
IHdoZXJlIHRoZSBzZWxlY3Rpb24gaXMuCiAgICAgRWxlbWVudCogc3RhcnQgPSBtX2ZyYW1lLT5k
b2N1bWVudCgpLT5mb2N1c2VkRWxlbWVudCgpOwogICAgIGlmICghc3RhcnQpCi0gICAgICAgIHN0
YXJ0ID0gdGhpcy0+c3RhcnQoKS5lbGVtZW50KCk7CisgICAgICAgIHN0YXJ0ID0gbV9zZWxlY3Rp
b24uc3RhcnQoKS5lbGVtZW50KCk7CiAgICAgaWYgKCFzdGFydCkKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAKQEAgLTIwNzEsMTggKzIwNjYsMTggQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6cmV2
ZWFsU2VsZWN0aW9uKGNvbgogewogICAgIExheW91dFJlY3QgcmVjdDsKIAotICAgIHN3aXRjaCAo
c2VsZWN0aW9uVHlwZSgpKSB7CisgICAgc3dpdGNoIChtX3NlbGVjdGlvbi5zZWxlY3Rpb25UeXBl
KCkpIHsKICAgICBjYXNlIFZpc2libGVTZWxlY3Rpb246Ok5vU2VsZWN0aW9uOgogICAgICAgICBy
ZXR1cm47CiAgICAgY2FzZSBWaXNpYmxlU2VsZWN0aW9uOjpDYXJldFNlbGVjdGlvbjoKICAgICAg
ICAgcmVjdCA9IGFic29sdXRlQ2FyZXRCb3VuZHMoKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2Fz
ZSBWaXNpYmxlU2VsZWN0aW9uOjpSYW5nZVNlbGVjdGlvbjoKLSAgICAgICAgcmVjdCA9IHJldmVh
bEV4dGVudE9wdGlvbiA9PSBSZXZlYWxFeHRlbnQgPyBWaXNpYmxlUG9zaXRpb24oZXh0ZW50KCkp
LmFic29sdXRlQ2FyZXRCb3VuZHMoKSA6IGVuY2xvc2luZ0ludFJlY3QoYm91bmRzKGZhbHNlKSk7
CisgICAgICAgIHJlY3QgPSByZXZlYWxFeHRlbnRPcHRpb24gPT0gUmV2ZWFsRXh0ZW50ID8gVmlz
aWJsZVBvc2l0aW9uKG1fc2VsZWN0aW9uLmV4dGVudCgpKS5hYnNvbHV0ZUNhcmV0Qm91bmRzKCkg
OiBlbmNsb3NpbmdJbnRSZWN0KGJvdW5kcyhmYWxzZSkpOwogICAgICAgICBicmVhazsKICAgICB9
CiAKLSAgICBQb3NpdGlvbiBzdGFydCA9IHRoaXMtPnN0YXJ0KCk7CisgICAgUG9zaXRpb24gc3Rh
cnQgPSBtX3NlbGVjdGlvbi5zdGFydCgpOwogICAgIEFTU0VSVChzdGFydC5kZXByZWNhdGVkTm9k
ZSgpKTsKICAgICBpZiAoc3RhcnQuZGVwcmVjYXRlZE5vZGUoKSAmJiBzdGFydC5kZXByZWNhdGVk
Tm9kZSgpLT5yZW5kZXJlcigpKSB7CiAjaWYgUExBVEZPUk0oSU9TKQpAQCAtMjExNyw3ICsyMTEy
LDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6c2V0U2VsZWN0aW9uRnJvbU5vbgogICAgIGlmICgh
aXNOb25lKCkgfHwgIShkb2N1bWVudC0+aGFzRWRpdGFibGVTdHlsZSgpIHx8IGNhcmV0QnJvd3Np
bmcpKQogICAgICAgICByZXR1cm47CiAjZWxzZQotICAgIGlmICghZG9jdW1lbnQgfHwgIShpc05v
bmUoKSB8fCBpc1N0YXJ0T2ZEb2N1bWVudChWaXNpYmxlUG9zaXRpb24oc2VsZWN0aW9uKCkuc3Rh
cnQoKSwgc2VsZWN0aW9uKCkuYWZmaW5pdHkoKSkpKSB8fCAhZG9jdW1lbnQtPmhhc0VkaXRhYmxl
U3R5bGUoKSkKKyAgICBpZiAoIWRvY3VtZW50IHx8ICEoaXNOb25lKCkgfHwgaXNTdGFydE9mRG9j
dW1lbnQoVmlzaWJsZVBvc2l0aW9uKG1fc2VsZWN0aW9uLnN0YXJ0KCksIG1fc2VsZWN0aW9uLmFm
ZmluaXR5KCkpKSkgfHwgIWRvY3VtZW50LT5oYXNFZGl0YWJsZVN0eWxlKCkpCiAgICAgICAgIHJl
dHVybjsKICNlbmRpZgogCkBAIC0yNDMxLDggKzI0MjYsOCBAQCBWaXNpYmxlU2VsZWN0aW9uIEZy
YW1lU2VsZWN0aW9uOjp3b3JkU2VsCiAgICAgbmV3U2VsZWN0aW9uLmV4cGFuZFVzaW5nR3JhbnVs
YXJpdHkoV29yZEdyYW51bGFyaXR5KTsKICAgICBmcmFtZVNlbGVjdGlvbi5zZXRTZWxlY3Rpb24o
bmV3U2VsZWN0aW9uLCBDbG9zZVR5cGluZyB8IENsZWFyVHlwaW5nU3R5bGUsIEFsaWduQ3Vyc29y
T25TY3JvbGxJZk5lZWRlZCwgZnJhbWVTZWxlY3Rpb24uZ3JhbnVsYXJpdHkoKSk7CiAKLSAgICBQ
b3NpdGlvbiBzdGFydFBvcyhmcmFtZVNlbGVjdGlvbi5zZWxlY3Rpb24oKS5zdGFydCgpKTsKLSAg
ICBQb3NpdGlvbiBlbmRQb3MoZnJhbWVTZWxlY3Rpb24uc2VsZWN0aW9uKCkuZW5kKCkpOworICAg
IFBvc2l0aW9uIHN0YXJ0UG9zKGZyYW1lU2VsZWN0aW9uLnNlbGVjdGlvbigpLnNlbGVjdGlvbigp
LnN0YXJ0KCkpOworICAgIFBvc2l0aW9uIGVuZFBvcyhmcmFtZVNlbGVjdGlvbi5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKS5lbmQoKSk7CiAKICAgICAvLyBFeHBhbnNpb24gY2Fubm90IGJlIGFsbG93
ZWQgdG8gY2hhbmdlIHNlbGVjdGlvbiBzbyB0aGF0IGl0IGlzIG5vIGxvbmdlcgogICAgIC8vIHRv
dWNoZXMgKG9yIGNvbnRhaW5zKSB0aGUgb3JpZ2luYWwsIHVuZXhwYW5kZWQgc2VsZWN0aW9uLgpA
QCAtMjQ3OSw4ICsyNDc0LDggQEAgVmlzaWJsZVNlbGVjdGlvbiBGcmFtZVNlbGVjdGlvbjo6d29y
ZFNlbAogICAgICAgICB9CiAgICAgICAgIGZyYW1lU2VsZWN0aW9uLm1vdmVUbyhzdGFydFZpc2li
bGVQb3MpOwogICAgICAgICBmcmFtZVNlbGVjdGlvbi5tb2RpZnkoRnJhbWVTZWxlY3Rpb246OkFs
dGVyYXRpb25FeHRlbmQsIERpcmVjdGlvbkJhY2t3YXJkLCBXb3JkR3JhbnVsYXJpdHkpOwotICAg
ICAgICBzdGFydFBvcyA9IGZyYW1lU2VsZWN0aW9uLnNlbGVjdGlvbigpLnN0YXJ0KCk7Ci0gICAg
ICAgIGVuZFBvcyA9IGZyYW1lU2VsZWN0aW9uLnNlbGVjdGlvbigpLmVuZCgpOworICAgICAgICBz
dGFydFBvcyA9IGZyYW1lU2VsZWN0aW9uLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCk7
CisgICAgICAgIGVuZFBvcyA9IGZyYW1lU2VsZWN0aW9uLnNlbGVjdGlvbigpLnNlbGVjdGlvbigp
LmVuZCgpOwogICAgICAgICBzdGFydFZpc2libGVQb3MgPSBWaXNpYmxlUG9zaXRpb24oc3RhcnRQ
b3MsIFZQX0RFRkFVTFRfQUZGSU5JVFkpOwogICAgICAgICBlbmRWaXNpYmxlUG9zID0gVmlzaWJs
ZVBvc2l0aW9uKGVuZFBvcywgVlBfREVGQVVMVF9BRkZJTklUWSk7CiAgICAgICAgIGlmIChzdGFy
dFZpc2libGVQb3MuaXNOdWxsKCkgfHwgZW5kVmlzaWJsZVBvcy5pc051bGwoKSkgewpJbmRleDog
U291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uaAkocmV2aXNpb24gMTYzMTI4KQor
KysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xMzUsMTIgKzEzNSw3IEBAIHB1YmxpYzoKIAogICAgIGV4cGxpY2l0IEZyYW1lU2VsZWN0
aW9uKEZyYW1lKiA9IDApOwogCi0gICAgRWxlbWVudCogcm9vdEVkaXRhYmxlRWxlbWVudCgpIGNv
bnN0IHsgcmV0dXJuIG1fc2VsZWN0aW9uLnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsgfQogICAgIEVs
ZW1lbnQqIHJvb3RFZGl0YWJsZUVsZW1lbnRPckRvY3VtZW50RWxlbWVudCgpIGNvbnN0OwotCi0g
ICAgYm9vbCBoYXNFZGl0YWJsZVN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3Rpb24uaGFz
RWRpdGFibGVTdHlsZSgpOyB9Ci0gICAgYm9vbCBpc0NvbnRlbnRFZGl0YWJsZSgpIGNvbnN0IHsg
cmV0dXJuIG1fc2VsZWN0aW9uLmlzQ29udGVudEVkaXRhYmxlKCk7IH0KLSAgICBib29sIGlzQ29u
dGVudFJpY2hseUVkaXRhYmxlKCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3Rpb24uaXNDb250ZW50
UmljaGx5RWRpdGFibGUoKTsgfQogICAgICAKICAgICB2b2lkIG1vdmVUbyhjb25zdCBSYW5nZSos
IEVBZmZpbml0eSwgRVVzZXJUcmlnZ2VyZWQgPSBOb3RVc2VyVHJpZ2dlcmVkKTsKICAgICB2b2lk
IG1vdmVUbyhjb25zdCBWaXNpYmxlUG9zaXRpb24mLCBFVXNlclRyaWdnZXJlZCA9IE5vdFVzZXJU
cmlnZ2VyZWQsIEN1cnNvckFsaWduT25TY3JvbGwgPSBBbGlnbkN1cnNvck9uU2Nyb2xsSWZOZWVk
ZWQpOwpAQCAtMTU3LDEwICsxNTIsNiBAQCBwdWJsaWM6CiAKICAgICBib29sIGNvbnRhaW5zKGNv
bnN0IExheW91dFBvaW50Jik7CiAKLSAgICBWaXNpYmxlU2VsZWN0aW9uOjpTZWxlY3Rpb25UeXBl
IHNlbGVjdGlvblR5cGUoKSBjb25zdCB7IHJldHVybiBtX3NlbGVjdGlvbi5zZWxlY3Rpb25UeXBl
KCk7IH0KLQotICAgIEVBZmZpbml0eSBhZmZpbml0eSgpIGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0
aW9uLmFmZmluaXR5KCk7IH0KLQogICAgIGJvb2wgbW9kaWZ5KEVBbHRlcmF0aW9uLCBTZWxlY3Rp
b25EaXJlY3Rpb24sIFRleHRHcmFudWxhcml0eSwgRVVzZXJUcmlnZ2VyZWQgPSBOb3RVc2VyVHJp
Z2dlcmVkKTsKICAgICBlbnVtIFZlcnRpY2FsRGlyZWN0aW9uIHsgRGlyZWN0aW9uVXAsIERpcmVj
dGlvbkRvd24gfTsKICAgICBib29sIG1vZGlmeShFQWx0ZXJhdGlvbiwgdW5zaWduZWQgdmVydGlj
YWxEaXN0YW5jZSwgVmVydGljYWxEaXJlY3Rpb24sIEVVc2VyVHJpZ2dlcmVkID0gTm90VXNlclRy
aWdnZXJlZCwgQ3Vyc29yQWxpZ25PblNjcm9sbCA9IEFsaWduQ3Vyc29yT25TY3JvbGxJZk5lZWRl
ZCk7CkBAIC0xNzUsOSArMTY2LDYgQEAgcHVibGljOgogICAgIHZvaWQgc2V0RXh0ZW50KGNvbnN0
IFZpc2libGVQb3NpdGlvbiYsIEVVc2VyVHJpZ2dlcmVkID0gTm90VXNlclRyaWdnZXJlZCk7CiAg
ICAgdm9pZCBzZXRFeHRlbnQoY29uc3QgUG9zaXRpb24mLCBFQWZmaW5pdHksIEVVc2VyVHJpZ2dl
cmVkID0gTm90VXNlclRyaWdnZXJlZCk7CiAKLSAgICBQb3NpdGlvbiBiYXNlKCkgY29uc3QgeyBy
ZXR1cm4gbV9zZWxlY3Rpb24uYmFzZSgpOyB9Ci0gICAgUG9zaXRpb24gZXh0ZW50KCkgY29uc3Qg
eyByZXR1cm4gbV9zZWxlY3Rpb24uZXh0ZW50KCk7IH0KLSAgICBQb3NpdGlvbiBzdGFydCgpIGNv
bnN0IHsgcmV0dXJuIG1fc2VsZWN0aW9uLnN0YXJ0KCk7IH0KICAgICBQb3NpdGlvbiBlbmQoKSBj
b25zdCB7IHJldHVybiBtX3NlbGVjdGlvbi5lbmQoKTsgfQogCiAgICAgLy8gUmV0dXJuIHRoZSBy
ZW5kZXJlciB0aGF0IGlzIHJlc3BvbnNpYmxlIGZvciBwYWludGluZyB0aGUgY2FyZXQgKGluIHRo
ZSBzZWxlY3Rpb24gc3RhcnQgbm9kZSkKQEAgLTE5Niw3ICsxODQsNiBAQCBwdWJsaWM6CiAgICAg
Ym9vbCBpc0NhcmV0KCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3Rpb24uaXNDYXJldCgpOyB9CiAg
ICAgYm9vbCBpc1JhbmdlKCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3Rpb24uaXNSYW5nZSgpOyB9
CiAgICAgYm9vbCBpc0NhcmV0T3JSYW5nZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0aW9uLmlz
Q2FyZXRPclJhbmdlKCk7IH0KLSAgICBib29sIGlzSW5QYXNzd29yZEZpZWxkKCkgY29uc3Q7CiAg
ICAgYm9vbCBpc0FsbChFZGl0aW5nQm91bmRhcnlDcm9zc2luZ1J1bGUgcnVsZSA9IENhbm5vdENy
b3NzRWRpdGluZ0JvdW5kYXJ5KSBjb25zdCB7IHJldHVybiBtX3NlbGVjdGlvbi5pc0FsbChydWxl
KTsgfQogICAgIAogICAgIFBhc3NSZWZQdHI8UmFuZ2U+IHRvTm9ybWFsaXplZFJhbmdlKCkgY29u
c3QgeyByZXR1cm4gbV9zZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsgfQpAQCAtMzM1LDYg
KzMyMiw3IEBAIHByaXZhdGU6CiAgICAgTGF5b3V0VW5pdCBtX3hQb3NGb3JWZXJ0aWNhbEFycm93
TmF2aWdhdGlvbjsKIAogICAgIFZpc2libGVTZWxlY3Rpb24gbV9zZWxlY3Rpb247CisgICAgbXV0
YWJsZSBWaXNpYmxlU2VsZWN0aW9uIG1fdmFsaWRhdGVkU2VsZWN0aW9uQ2FjaGU7CiAgICAgVmlz
aWJsZVBvc2l0aW9uIG1fb3JpZ2luYWxCYXNlOyAvLyBVc2VkIHRvIHN0b3JlIGJhc2UgYmVmb3Jl
IHRoZSBhZGp1c3RtZW50IGF0IGJpZGkgYm91bmRhcnkKICAgICBUZXh0R3JhbnVsYXJpdHkgbV9n
cmFudWxhcml0eTsKIApAQCAtMzUyLDcgKzM0MCw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX3No
b3VsZFNob3dCbG9ja0N1cnNvciA6IDE7CiAKICNpZiBQTEFURk9STShJT1MpCi0gICAgYm9vbCBt
X3VwZGF0ZUFwcGVhcmFuY2VFbmFibGVkIDogMTsKKyAgICBib29sIG1fdXBkYXRlQXBwZWFyYW5j
ZUVuYWJsZWQgOiAxO0RyYWdDb250cm9sbGVyLmNwcAogICAgIGJvb2wgbV9jYXJldEJsaW5rcyA6
IDE7CiAgICAgQ29sb3IgbV9jYXJldENvbG9yOwogICAgIGludCBtX2Nsb3NlVHlwaW5nU3VwcHJl
c3Npb25zOwpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZW1vdmVGb3JtYXRDb21tYW5k
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlbW92ZUZvcm1hdENv
bW1hbmQuY3BwCShyZXZpc2lvbiAxNjMxMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Jl
bW92ZUZvcm1hdENvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NywxMiArNzcsMTIgQEAg
c3RhdGljIGJvb2wgaXNFbGVtZW50Rm9yUmVtb3ZlRm9ybWF0Q29tbQogCiB2b2lkIFJlbW92ZUZv
cm1hdENvbW1hbmQ6OmRvQXBwbHkoKQogewotICAgIGlmICghZnJhbWUoKS5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKS5pc05vbk9ycGhhbmVkQ2FyZXRPclJhbmdlKCkpCisgICAgaWYgKCFlbmRpbmdT
ZWxlY3Rpb24oKS5pc05vbk9ycGhhbmVkQ2FyZXRPclJhbmdlKCkpCiAgICAgICAgIHJldHVybjsK
IAogICAgIC8vIEdldCB0aGUgZGVmYXVsdCBzdHlsZSBmb3IgdGhpcyBlZGl0YWJsZSByb290LCBp
dCdzIHRoZSBzdHlsZSB0aGF0IHdlJ2xsIGdpdmUgdGhlCiAgICAgLy8gY29udGVudCB0aGF0IHdl
J3JlIG9wZXJhdGluZyBvbi4KLSAgICBOb2RlKiByb290ID0gZnJhbWUoKS5zZWxlY3Rpb24oKS5y
b290RWRpdGFibGVFbGVtZW50KCk7CisgICAgTm9kZSogcm9vdCA9IGVuZGluZ1NlbGVjdGlvbigp
LnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsKICAgICBSZWZQdHI8RWRpdGluZ1N0eWxlPiBkZWZhdWx0
U3R5bGUgPSBFZGl0aW5nU3R5bGU6OmNyZWF0ZShyb290KTsKIAogICAgIC8vIFdlIHdhbnQgdG8g
cmVtb3ZlIGV2ZXJ5dGhpbmcgYnV0IHRyYW5zcGFyZW50IGJhY2tncm91bmQuCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVTZWxlY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5jcHAJKHJldmlzaW9uIDE2MzEy
OCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5j
bHVkZSAiRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKICNpbmNsdWRl
ICJUZXh0SXRlcmF0b3IuaCIKICNpbmNsdWRlICJWaXNpYmxlVW5pdHMuaCIKICNpbmNsdWRlICJo
dG1sZWRpdGluZy5oIgpAQCAtNjY2LDYgKzY2NywxMiBAQCBOb2RlKiBWaXNpYmxlU2VsZWN0aW9u
Ojpub25Cb3VuZGFyeVNoYWRvCiAgICAgcmV0dXJuIHN0YXJ0KCkuZGVwcmVjYXRlZE5vZGUoKSA/
IHN0YXJ0KCkuZGVwcmVjYXRlZE5vZGUoKS0+bm9uQm91bmRhcnlTaGFkb3dUcmVlUm9vdE5vZGUo
KSA6IDA7CiB9CiAKK2Jvb2wgVmlzaWJsZVNlbGVjdGlvbjo6aXNJblBhc3N3b3JkRmllbGQoKSBj
b25zdAoreworICAgIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50KiB0ZXh0Q29udHJvbCA9IGVu
Y2xvc2luZ1RleHRGb3JtQ29udHJvbChzdGFydCgpKTsKKyAgICByZXR1cm4gdGV4dENvbnRyb2wg
JiYgaXNIVE1MSW5wdXRFbGVtZW50KHRleHRDb250cm9sKSAmJiB0b0hUTUxJbnB1dEVsZW1lbnQo
dGV4dENvbnRyb2wpLT5pc1Bhc3N3b3JkRmllbGQoKTsKK30KKwogI2lmbmRlZiBOREVCVUcKIAog
dm9pZCBWaXNpYmxlU2VsZWN0aW9uOjpkZWJ1Z1Bvc2l0aW9uKCkgY29uc3QKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5oCShyZXZpc2lvbiAxNjMxMjgpCisr
KyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVTZWxlY3Rpb24uaAkod29ya2luZyBjb3B5
KQpAQCAtMTA1LDYgKzEwNSw4IEBAIHB1YmxpYzoKICAgICAvLyBTaGFkb3dSb290IG5vZGUgZm9y
IG5ldyBzaGFkb3cgdHJlZXMsIG9yIDAgZm9yIG5vbi1zaGFkb3cgdHJlZXMuCiAgICAgTm9kZSog
bm9uQm91bmRhcnlTaGFkb3dUcmVlUm9vdE5vZGUoKSBjb25zdDsKIAorICAgIGJvb2wgaXNJblBh
c3N3b3JkRmllbGQoKSBjb25zdDsKKwogI2lmbmRlZiBOREVCVUcKICAgICB2b2lkIGRlYnVnUG9z
aXRpb24oKSBjb25zdDsKICAgICB2b2lkIGZvcm1hdEZvckRlYnVnZ2VyKGNoYXIqIGJ1ZmZlciwg
dW5zaWduZWQgbGVuZ3RoKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFj
L0VkaXRvck1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9F
ZGl0b3JNYWMubW0JKHJldmlzaW9uIDE2MzEyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
bWFjL0VkaXRvck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjM5LDcgKzIzOSw3IEBAIE5TRGlj
dGlvbmFyeSogRWRpdG9yOjpmb250QXR0cmlidXRlc0ZvclMKIAogYm9vbCBFZGl0b3I6OmNhbkNv
cHlFeGNsdWRpbmdTdGFuZGFsb25lSW1hZ2VzKCkKIHsKLSAgICBGcmFtZVNlbGVjdGlvbiYgc2Vs
ZWN0aW9uID0gbV9mcmFtZS5zZWxlY3Rpb24oKTsKKyAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9u
JiBzZWxlY3Rpb24gPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwogICAgIHJldHVy
biBzZWxlY3Rpb24uaXNSYW5nZSgpICYmICFzZWxlY3Rpb24uaXNJblBhc3N3b3JkRmllbGQoKTsK
IH0KIApAQCAtMjU5LDcgKzI1OSw3IEBAIHZvaWQgRWRpdG9yOjp0YWtlRmluZFN0cmluZ0Zyb21T
ZWxlY3Rpb24KIHZvaWQgRWRpdG9yOjpyZWFkU2VsZWN0aW9uRnJvbVBhc3RlYm9hcmQoY29uc3Qg
U3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkKIHsKICAgICBQYXN0ZWJvYXJkIHBhc3RlYm9hcmQocGFz
dGVib2FyZE5hbWUpOwotICAgIGlmIChtX2ZyYW1lLnNlbGVjdGlvbigpLmlzQ29udGVudFJpY2hs
eUVkaXRhYmxlKCkpCisgICAgaWYgKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXND
b250ZW50UmljaGx5RWRpdGFibGUoKSkKICAgICAgICAgcGFzdGVXaXRoUGFzdGVib2FyZCgmcGFz
dGVib2FyZCwgdHJ1ZSk7CiAgICAgZWxzZQogICAgICAgICBwYXN0ZUFzUGxhaW5UZXh0V2l0aFBh
c3RlYm9hcmQocGFzdGVib2FyZCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBbmNo
b3JFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBbmNo
b3JFbGVtZW50LmNwcAkocmV2aXNpb24gMTYzMTI4KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MQW5jaG9yRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5NSw3ICsxOTUsNyBAQCB2
b2lkIEhUTUxBbmNob3JFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kCiAgICAgICAgICAgICAvLyBU
aGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBlZGl0YWJsZSBibG9jayB0aGF0IHRoZSBzZWxlY3Rpb24g
d2FzIGluIChpZiBpdCB3YXMgaW4gb25lKSBqdXN0IGJlZm9yZSB0aGUgbGluayB3YXMgY2xpY2tl
ZAogICAgICAgICAgICAgLy8gZm9yIHRoZSBMaXZlV2hlbk5vdEZvY3VzZWQgZWRpdGFibGUgbGlu
ayBiZWhhdmlvcgogICAgICAgICAgICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygp
Lm1vdXNlZG93bkV2ZW50ICYmIGV2ZW50LT5pc01vdXNlRXZlbnQoKSAmJiBzdGF0aWNfY2FzdDxN
b3VzZUV2ZW50Kj4oZXZlbnQpLT5idXR0b24oKSAhPSBSaWdodEJ1dHRvbiAmJiBkb2N1bWVudCgp
LmZyYW1lKCkpIHsKLSAgICAgICAgICAgICAgICBzZXRSb290RWRpdGFibGVFbGVtZW50Rm9yU2Vs
ZWN0aW9uT25Nb3VzZURvd24oZG9jdW1lbnQoKS5mcmFtZSgpLT5zZWxlY3Rpb24oKS5yb290RWRp
dGFibGVFbGVtZW50KCkpOworICAgICAgICAgICAgICAgIHNldFJvb3RFZGl0YWJsZUVsZW1lbnRG
b3JTZWxlY3Rpb25Pbk1vdXNlRG93bihkb2N1bWVudCgpLmZyYW1lKCktPnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpLnJvb3RFZGl0YWJsZUVsZW1lbnQoKSk7CiAgICAgICAgICAgICAgICAgbV93YXNT
aGlmdEtleURvd25Pbk1vdXNlRG93biA9IHN0YXRpY19jYXN0PE1vdXNlRXZlbnQqPihldmVudCkt
PnNoaWZ0S2V5KCk7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZl
bnROYW1lcygpLm1vdXNlb3ZlckV2ZW50KSB7CiAgICAgICAgICAgICAgICAgLy8gVGhlc2UgYXJl
IGNsZWFyZWQgb24gbW91c2VvdmVyIGFuZCBub3QgbW91c2VvdXQgYmVjYXVzZSB0aGVpciB2YWx1
ZXMgYXJlIG5lZWRlZCBmb3IgZHJhZyBldmVudHMsCkBAIC0yMjgsNyArMjI4LDcgQEAgdm9pZCBI
VE1MQW5jaG9yRWxlbWVudDo6c2V0QWN0aXZlKGJvb2wgZAogICAgICAgICAgICAgLy8gRG9uJ3Qg
c2V0IHRoZSBsaW5rIHRvIGJlIGFjdGl2ZSBpZiB0aGUgY3VycmVudCBzZWxlY3Rpb24gaXMgaW4g
dGhlIHNhbWUgZWRpdGFibGUgYmxvY2sgYXMKICAgICAgICAgICAgIC8vIHRoaXMgbGluawogICAg
ICAgICAgICAgY2FzZSBFZGl0YWJsZUxpbmtMaXZlV2hlbk5vdEZvY3VzZWQ6Ci0gICAgICAgICAg
ICAgICAgaWYgKGRvd24gJiYgZG9jdW1lbnQoKS5mcmFtZSgpICYmIGRvY3VtZW50KCkuZnJhbWUo
KS0+c2VsZWN0aW9uKCkucm9vdEVkaXRhYmxlRWxlbWVudCgpID09IHJvb3RFZGl0YWJsZUVsZW1l
bnQoKSkKKyAgICAgICAgICAgICAgICBpZiAoZG93biAmJiBkb2N1bWVudCgpLmZyYW1lKCkgJiYg
ZG9jdW1lbnQoKS5mcmFtZSgpLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5yb290RWRpdGFibGVF
bGVtZW50KCkgPT0gcm9vdEVkaXRhYmxlRWxlbWVudCgpKQogICAgICAgICAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQuY3BwCShy
ZXZpc2lvbiAxNjMxMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0Rm9ybUNvbnRy
b2xFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzU2LDcgKzM1Niw3IEBAIGludCBIVE1M
VGV4dEZvcm1Db250cm9sRWxlbWVudDo6Y29tcHV0ZVMKICAgICBpZiAoIWZyYW1lKQogICAgICAg
ICByZXR1cm4gMDsKIAotICAgIHJldHVybiBpbmRleEZvclZpc2libGVQb3NpdGlvbihmcmFtZS0+
c2VsZWN0aW9uKCkuc3RhcnQoKSk7CisgICAgcmV0dXJuIGluZGV4Rm9yVmlzaWJsZVBvc2l0aW9u
KGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpKTsKIH0KIAogaW50IEhUTUxU
ZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpzZWxlY3Rpb25FbmQoKSBjb25zdApAQCAtMzc1LDcgKzM3
NSw3IEBAIGludCBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6Y29tcHV0ZVMKICAgICBpZiAo
IWZyYW1lKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIHJldHVybiBpbmRleEZvclZpc2libGVQ
b3NpdGlvbihmcmFtZS0+c2VsZWN0aW9uKCkuZW5kKCkpOworICAgIHJldHVybiBpbmRleEZvclZp
c2libGVQb3NpdGlvbihmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZW5kKCkpOwogfQog
CiBzdGF0aWMgY29uc3QgQXRvbWljU3RyaW5nJiBkaXJlY3Rpb25TdHJpbmcoVGV4dEZpZWxkU2Vs
ZWN0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvQ29u
dGV4dE1lbnVDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdl
L0NvbnRleHRNZW51Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDE2MzEyOCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvQ29udGV4dE1lbnVDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzQxLDE1ICszNDEsMTUgQEAgdm9pZCBDb250ZXh0TWVudUNvbnRyb2xsZXI6OmNvbnRleHRNZW51
SQogICAgICAgICBicmVhazsKICNlbmRpZgogICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnU3Bl
bGxpbmdHdWVzczogewotICAgICAgICBGcmFtZVNlbGVjdGlvbiYgZnJhbWVTZWxlY3Rpb24gPSBm
cmFtZS0+c2VsZWN0aW9uKCk7Ci0gICAgICAgIGlmIChmcmFtZS0+ZWRpdG9yKCkuc2hvdWxkSW5z
ZXJ0VGV4dChpdGVtLT50aXRsZSgpLCBmcmFtZVNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgp
LmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rpb25QYXN0ZWQpKSB7CisgICAgICAgIFZpc2libGVTZWxl
Y3Rpb24gc2VsZWN0aW9uID0gZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgICAg
ICBpZiAoZnJhbWUtPmVkaXRvcigpLnNob3VsZEluc2VydFRleHQoaXRlbS0+dGl0bGUoKSwgc2Vs
ZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvblBhc3Rl
ZCkpIHsKICAgICAgICAgICAgIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpDb21tYW5kT3B0aW9u
cyByZXBsYWNlT3B0aW9ucyA9IFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpNYXRjaFN0eWxlIHwg
UmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OlByZXZlbnROZXN0aW5nOwogCiAgICAgICAgICAgICBp
ZiAoZnJhbWUtPmVkaXRvcigpLmJlaGF2aW9yKCkuc2hvdWxkQWxsb3dTcGVsbGluZ1N1Z2dlc3Rp
b25zV2l0aG91dFNlbGVjdGlvbigpKSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKGZyYW1lU2Vs
ZWN0aW9uLmlzQ2FyZXRPclJhbmdlKCkpOwotICAgICAgICAgICAgICAgIFZpc2libGVTZWxlY3Rp
b24gd29yZFNlbGVjdGlvbihmcmFtZVNlbGVjdGlvbi5iYXNlKCkpOworICAgICAgICAgICAgICAg
IEFTU0VSVChzZWxlY3Rpb24uaXNDYXJldE9yUmFuZ2UoKSk7CisgICAgICAgICAgICAgICAgVmlz
aWJsZVNlbGVjdGlvbiB3b3JkU2VsZWN0aW9uKHNlbGVjdGlvbi5iYXNlKCkpOwogICAgICAgICAg
ICAgICAgIHdvcmRTZWxlY3Rpb24uZXhwYW5kVXNpbmdHcmFudWxhcml0eShXb3JkR3JhbnVsYXJp
dHkpOwotICAgICAgICAgICAgICAgIGZyYW1lU2VsZWN0aW9uLnNldFNlbGVjdGlvbih3b3JkU2Vs
ZWN0aW9uKTsKKyAgICAgICAgICAgICAgICBmcmFtZS0+c2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9u
KHdvcmRTZWxlY3Rpb24pOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBB
U1NFUlQoZnJhbWUtPmVkaXRvcigpLnNlbGVjdGVkVGV4dCgpLmxlbmd0aCgpKTsKICAgICAgICAg
ICAgICAgICByZXBsYWNlT3B0aW9ucyB8PSBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6U2VsZWN0
UmVwbGFjZW1lbnQ7CkBAIC0zNTksNyArMzU5LDcgQEAgdm9pZCBDb250ZXh0TWVudUNvbnRyb2xs
ZXI6OmNvbnRleHRNZW51SQogICAgICAgICAgICAgQVNTRVJUKGRvY3VtZW50KTsKICAgICAgICAg
ICAgIFJlZlB0cjxSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZD4gY29tbWFuZCA9IFJlcGxhY2VTZWxl
Y3Rpb25Db21tYW5kOjpjcmVhdGUoKmRvY3VtZW50LCBjcmVhdGVGcmFnbWVudEZyb21NYXJrdXAo
KmRvY3VtZW50LCBpdGVtLT50aXRsZSgpLCAiIiksIHJlcGxhY2VPcHRpb25zKTsKICAgICAgICAg
ICAgIGFwcGx5Q29tbWFuZChjb21tYW5kKTsKLSAgICAgICAgICAgIGZyYW1lU2VsZWN0aW9uLnJl
dmVhbFNlbGVjdGlvbihTY3JvbGxBbGlnbm1lbnQ6OmFsaWduVG9FZGdlSWZOZWVkZWQpOworICAg
ICAgICAgICAgZnJhbWUtPnNlbGVjdGlvbigpLnJldmVhbFNlbGVjdGlvbihTY3JvbGxBbGlnbm1l
bnQ6OmFsaWduVG9FZGdlSWZOZWVkZWQpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAg
IH0KQEAgLTkyMSw3ICs5MjEsNyBAQCB2b2lkIENvbnRleHRNZW51Q29udHJvbGxlcjo6cG9wdWxh
dGUoKQogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfSBlbHNlIHsgLy8gTWFrZSBhbiBl
ZGl0aW5nIGNvbnRleHQgbWVudQotICAgICAgICBib29sIGluUGFzc3dvcmRGaWVsZCA9IGZyYW1l
LT5zZWxlY3Rpb24oKS5pc0luUGFzc3dvcmRGaWVsZCgpOworICAgICAgICBib29sIGluUGFzc3dv
cmRGaWVsZCA9IGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0luUGFzc3dvcmRGaWVs
ZCgpOwogICAgICAgICBpZiAoIWluUGFzc3dvcmRGaWVsZCkgewogICAgICAgICAgICAgYm9vbCBo
YXZlQ29udGV4dE1lbnVJdGVtc0Zvck1pc3NwZWxsaW5nT3JHcmFtbWVyID0gZmFsc2U7CiAgICAg
ICAgICAgICBib29sIHNwZWxsQ2hlY2tpbmdFbmFibGVkID0gZnJhbWUtPmVkaXRvcigpLmlzU3Bl
bGxDaGVja2luZ0VuYWJsZWRGb3Iobm9kZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0Ry
YWdDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdD
b250cm9sbGVyLmNwcAkocmV2aXNpb24gMTYzMTI4KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9E
cmFnQ29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1OCw3ICsxNTgsOCBAQCBzdGF0
aWMgUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBkb2N1CiAKIGJvb2wgRHJhZ0NvbnRyb2xs
ZXI6OmRyYWdJc01vdmUoRnJhbWVTZWxlY3Rpb24mIHNlbGVjdGlvbiwgRHJhZ0RhdGEmIGRyYWdE
YXRhKQogewotICAgIHJldHVybiBtX2RvY3VtZW50VW5kZXJNb3VzZSA9PSBtX2RyYWdJbml0aWF0
b3IgJiYgc2VsZWN0aW9uLmlzQ29udGVudEVkaXRhYmxlKCkgJiYgc2VsZWN0aW9uLmlzUmFuZ2Uo
KSAmJiAhaXNDb3B5S2V5RG93bihkcmFnRGF0YSk7CisgICAgY29uc3QgVmlzaWJsZVNlbGVjdGlv
biYgdmlzaWJsZVNlbGVjdGlvbiA9IHNlbGVjdGlvbi5zZWxlY3Rpb24oKTsKKyAgICByZXR1cm4g
bV9kb2N1bWVudFVuZGVyTW91c2UgPT0gbV9kcmFnSW5pdGlhdG9yICYmIHZpc2libGVTZWxlY3Rp
b24uaXNDb250ZW50RWRpdGFibGUoKSAmJiB2aXNpYmxlU2VsZWN0aW9uLmlzUmFuZ2UoKSAmJiAh
aXNDb3B5S2V5RG93bihkcmFnRGF0YSk7CiB9CiAKIC8vIEZJWE1FOiBUaGlzIG1ldGhvZCBpcyBw
b29ybHkgbmFtZWQuICBXZSdyZSBqdXN0IGNsZWFyaW5nIHRoZSBzZWxlY3Rpb24gZnJvbSB0aGUg
ZG9jdW1lbnQgdGhpcyBkcmFnIGlzIGV4aXRpbmcuCkBAIC00MTMsMTIgKzQxNCwxMiBAQCBEcmFn
T3BlcmF0aW9uIERyYWdDb250cm9sbGVyOjpvcGVyYXRpb25GCiBzdGF0aWMgYm9vbCBzZXRTZWxl
Y3Rpb25Ub0RyYWdDYXJldChGcmFtZSogZnJhbWUsIFZpc2libGVTZWxlY3Rpb24mIGRyYWdDYXJl
dCwgUmVmUHRyPFJhbmdlPiYgcmFuZ2UsIGNvbnN0IEludFBvaW50JiBwb2ludCkKIHsKICAgICBm
cmFtZS0+c2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKGRyYWdDYXJldCk7Ci0gICAgaWYgKGZyYW1l
LT5zZWxlY3Rpb24oKS5pc05vbmUoKSkgeworICAgIGlmIChmcmFtZS0+c2VsZWN0aW9uKCkuc2Vs
ZWN0aW9uKCkuaXNOb25lKCkpIHsKICAgICAgICAgZHJhZ0NhcmV0ID0gZnJhbWUtPnZpc2libGVQ
b3NpdGlvbkZvclBvaW50KHBvaW50KTsKICAgICAgICAgZnJhbWUtPnNlbGVjdGlvbigpLnNldFNl
bGVjdGlvbihkcmFnQ2FyZXQpOwogICAgICAgICByYW5nZSA9IGRyYWdDYXJldC50b05vcm1hbGl6
ZWRSYW5nZSgpOwogICAgIH0KLSAgICByZXR1cm4gIWZyYW1lLT5zZWxlY3Rpb24oKS5pc05vbmUo
KSAmJiBmcmFtZS0+c2VsZWN0aW9uKCkuaXNDb250ZW50RWRpdGFibGUoKTsKKyAgICByZXR1cm4g
IWZyYW1lLT5zZWxlY3Rpb24oKS5pc05vbmUoKSAmJiBmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCkuaXNDb250ZW50RWRpdGFibGUoKTsKIH0KIAogYm9vbCBEcmFnQ29udHJvbGxlcjo6ZGlz
cGF0Y2hUZXh0SW5wdXRFdmVudEZvcihGcmFtZSogaW5uZXJGcmFtZSwgRHJhZ0RhdGEmIGRyYWdE
YXRhKQpAQCAtNDgyLDcgKzQ4Myw3IEBAIGJvb2wgRHJhZ0NvbnRyb2xsZXI6OmNvbmNsdWRlRWRp
dERyYWcoRHIKICAgICBWaXNpYmxlU2VsZWN0aW9uIGRyYWdDYXJldCA9IG1fcGFnZS5kcmFnQ2Fy
ZXRDb250cm9sbGVyKCkuY2FyZXRQb3NpdGlvbigpOwogICAgIG1fcGFnZS5kcmFnQ2FyZXRDb250
cm9sbGVyKCkuY2xlYXIoKTsKICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gZHJhZ0NhcmV0LnRv
Tm9ybWFsaXplZFJhbmdlKCk7Ci0gICAgUmVmUHRyPEVsZW1lbnQ+IHJvb3RFZGl0YWJsZUVsZW1l
bnQgPSBpbm5lckZyYW1lLT5zZWxlY3Rpb24oKS5yb290RWRpdGFibGVFbGVtZW50KCk7CisgICAg
UmVmUHRyPEVsZW1lbnQ+IHJvb3RFZGl0YWJsZUVsZW1lbnQgPSBpbm5lckZyYW1lLT5zZWxlY3Rp
b24oKS5zZWxlY3Rpb24oKS5yb290RWRpdGFibGVFbGVtZW50KCk7CiAKICAgICAvLyBGb3IgcmFu
Z2UgdG8gYmUgbnVsbCBhIFdlYktpdCBjbGllbnQgbXVzdCBoYXZlIGRvbmUgc29tZXRoaW5nIGJh
ZCB3aGlsZQogICAgIC8vIG1hbnVhbGx5IGNvbnRyb2xsaW5nIGRyYWcgYmVoYXZpb3VyCkBAIC03
NjUsNyArNzY2LDcgQEAgYm9vbCBEcmFnQ29udHJvbGxlcjo6c3RhcnREcmFnKEZyYW1lJiBzcgog
CiAgICAgICAgICAgICBzcmMuZWRpdG9yKCkud2lsbFdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJk
KHNlbGVjdGlvblJhbmdlLmdldCgpKTsKIAotICAgICAgICAgICAgaWYgKGVuY2xvc2luZ1RleHRG
b3JtQ29udHJvbChzcmMuc2VsZWN0aW9uKCkuc3RhcnQoKSkpCisgICAgICAgICAgICBpZiAoZW5j
bG9zaW5nVGV4dEZvcm1Db250cm9sKHNyYy5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgp
KSkKICAgICAgICAgICAgICAgICBjbGlwYm9hcmQucGFzdGVib2FyZCgpLndyaXRlUGxhaW5UZXh0
KHNyYy5lZGl0b3IoKS5zZWxlY3RlZFRleHRGb3JDbGlwYm9hcmQoKSwgUGFzdGVib2FyZDo6Q2Fu
bm90U21hcnRSZXBsYWNlKTsKICAgICAgICAgICAgIGVsc2UgewogI2lmIFBMQVRGT1JNKE1BQykg
fHwgUExBVEZPUk0oRUZMKQpAQCAtODEyLDExICs4MTMsMTIgQEAgYm9vbCBEcmFnQ29udHJvbGxl
cjo6c3RhcnREcmFnKEZyYW1lJiBzcgogICAgICAgICAgICAgLy8gb24gdGhlIHdlYiBwYWdlLiBU
aGlzIGluY2x1ZGVzIHJlcGxhY2luZyBuZXdsaW5lcyB3aXRoIHNwYWNlcy4KICAgICAgICAgICAg
IHNyYy5lZGl0b3IoKS5jb3B5VVJMKGxpbmtVUkwsIGhpdFRlc3RSZXN1bHQudGV4dENvbnRlbnQo
KS5zaW1wbGlmeVdoaXRlU3BhY2UoKSwgY2xpcGJvYXJkLnBhc3RlYm9hcmQoKSk7CiAKLSAgICAg
ICAgaWYgKHNyYy5zZWxlY3Rpb24oKS5pc0NhcmV0KCkgJiYgc3JjLnNlbGVjdGlvbigpLmlzQ29u
dGVudEVkaXRhYmxlKCkpIHsKKyAgICAgICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc3JjU2Vs
ZWN0aW9uID0gc3JjLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgICAgICBpZiAoc3JjU2Vs
ZWN0aW9uLmlzQ2FyZXQoKSAmJiBzcmNTZWxlY3Rpb24uaXNDb250ZW50RWRpdGFibGUoKSkgewog
ICAgICAgICAgICAgLy8gYSB1c2VyIGNhbiBpbml0aWF0ZSBhIGRyYWcgb24gYSBsaW5rIHdpdGhv
dXQgaGF2aW5nIGFueSB0ZXh0CiAgICAgICAgICAgICAvLyBzZWxlY3RlZC4gIEluIHRoaXMgY2Fz
ZSwgd2Ugc2hvdWxkIGV4cGFuZCB0aGUgc2VsZWN0aW9uIHRvCiAgICAgICAgICAgICAvLyB0aGUg
ZW5jbG9zaW5nIGFuY2hvciBlbGVtZW50Ci0gICAgICAgICAgICBQb3NpdGlvbiBwb3MgPSBzcmMu
c2VsZWN0aW9uKCkuYmFzZSgpOworICAgICAgICAgICAgUG9zaXRpb24gcG9zID0gc3JjU2VsZWN0
aW9uLmJhc2UoKTsKICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBlbmNsb3NpbmdBbmNob3JFbGVt
ZW50KHBvcyk7CiAgICAgICAgICAgICBpZiAobm9kZSkKICAgICAgICAgICAgICAgICBzcmMuc2Vs
ZWN0aW9uKCkuc2V0U2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb246OnNlbGVjdGlvbkZyb21Db250
ZW50c09mTm9kZShub2RlKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3Bw
CShyZXZpc2lvbiAxNjMxMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMjMsNyArMTIyMyw3IEBAIHN0YXRpYyBib29sIGlzU3Vi
bWl0SW1hZ2UoTm9kZSogbm9kZSkKIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgbm9kZSdzIGVkaXRh
YmxlIGJsb2NrIGlzIG5vdCBjdXJyZW50IGZvY3VzZWQgZm9yIGVkaXRpbmcKIHN0YXRpYyBib29s
IG5vZGVJc05vdEJlaW5nRWRpdGVkKGNvbnN0IE5vZGUmIG5vZGUsIGNvbnN0IEZyYW1lJiBmcmFt
ZSkKIHsKLSAgICByZXR1cm4gZnJhbWUuc2VsZWN0aW9uKCkucm9vdEVkaXRhYmxlRWxlbWVudCgp
ICE9IG5vZGUucm9vdEVkaXRhYmxlRWxlbWVudCgpOworICAgIHJldHVybiBmcmFtZS5zZWxlY3Rp
b24oKS5zZWxlY3Rpb24oKS5yb290RWRpdGFibGVFbGVtZW50KCkgIT0gbm9kZS5yb290RWRpdGFi
bGVFbGVtZW50KCk7CiB9CiAKIGJvb2wgRXZlbnRIYW5kbGVyOjp1c2VIYW5kQ3Vyc29yKE5vZGUq
IG5vZGUsIGJvb2wgaXNPdmVyTGluaywgYm9vbCBzaGlmdEtleSkKQEAgLTI2NDAsNyArMjY0MCw3
IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpzZW5kQ29udGV4dE1lbnVFdmVudCgKICAgICAgICAgLy8g
RklYTUU6IEluIHRoZSBlZGl0YWJsZSBjYXNlLCB3b3JkIHNlbGVjdGlvbiBzb21ldGltZXMgc2Vs
ZWN0cyBjb250ZW50IHRoYXQgaXNuJ3QgdW5kZXJuZWF0aCB0aGUgbW91c2UuCiAgICAgICAgIC8v
IElmIHRoZSBzZWxlY3Rpb24gaXMgbm9uLWVkaXRhYmxlLCB3ZSBkbyB3b3JkIHNlbGVjdGlvbiB0
byBtYWtlIGl0IGVhc2llciB0byB1c2UgdGhlIGNvbnRleHR1YWwgbWVudSBpdGVtcwogICAgICAg
ICAvLyBhdmFpbGFibGUgZm9yIHRleHQgc2VsZWN0aW9ucy4gIEJ1dCBvbmx5IGlmIHdlJ3JlIGFi
b3ZlIHRleHQuCi0gICAgICAgICYmIChtX2ZyYW1lLnNlbGVjdGlvbigpLmlzQ29udGVudEVkaXRh
YmxlKCkgfHwgKG1ldi50YXJnZXROb2RlKCkgJiYgbWV2LnRhcmdldE5vZGUoKS0+aXNUZXh0Tm9k
ZSgpKSkpIHsKKyAgICAgICAgJiYgKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXND
b250ZW50RWRpdGFibGUoKSB8fCAobWV2LnRhcmdldE5vZGUoKSAmJiBtZXYudGFyZ2V0Tm9kZSgp
LT5pc1RleHROb2RlKCkpKSkgewogICAgICAgICBtX21vdXNlRG93bk1heVN0YXJ0U2VsZWN0ID0g
dHJ1ZTsgLy8gY29udGV4dCBtZW51IGV2ZW50cyBhcmUgYWx3YXlzIGFsbG93ZWQgdG8gcGVyZm9y
bSBhIHNlbGVjdGlvbgogICAgICAgICBzZWxlY3RDbG9zZXN0V29yZE9yTGlua0Zyb21Nb3VzZUV2
ZW50KG1ldik7CiAgICAgfQpAQCAtMjY3Myw4ICsyNjczLDggQEAgYm9vbCBFdmVudEhhbmRsZXI6
OnNlbmRDb250ZXh0TWVudUV2ZW50RgogICAgIEludFBvaW50IGxvY2F0aW9uOwogCiAgICAgRWxl
bWVudCogZm9jdXNlZEVsZW1lbnQgPSBkb2MtPmZvY3VzZWRFbGVtZW50KCk7Ci0gICAgRnJhbWVT
ZWxlY3Rpb24mIHNlbGVjdGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9uKCk7Ci0gICAgUG9zaXRpb24g
c3RhcnQgPSBzZWxlY3Rpb24uc2VsZWN0aW9uKCkuc3RhcnQoKTsKKyAgICBjb25zdCBWaXNpYmxl
U2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwor
ICAgIFBvc2l0aW9uIHN0YXJ0ID0gc2VsZWN0aW9uLnN0YXJ0KCk7CiAKICAgICBpZiAoc3RhcnQu
ZGVwcmVjYXRlZE5vZGUoKSAmJiAoc2VsZWN0aW9uLnJvb3RFZGl0YWJsZUVsZW1lbnQoKSB8fCBz
ZWxlY3Rpb24uaXNSYW5nZSgpKSkgewogICAgICAgICBSZWZQdHI8UmFuZ2U+IHNlbGVjdGlvblJh
bmdlID0gc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7CkBAIC0zMjczLDcgKzMyNzMsNyBA
QCBib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlRHJhZyhjb25zdCBNb3VzCiAgICAgICAgIH0gCiAg
ICAgICAgIAogICAgICAgICBtX21vdXNlRG93bk1heVN0YXJ0RHJhZyA9IGRpc3BhdGNoRHJhZ1Ny
Y0V2ZW50KGV2ZW50TmFtZXMoKS5kcmFnc3RhcnRFdmVudCwgbV9tb3VzZURvd24pCi0gICAgICAg
ICAgICAmJiAhbV9mcmFtZS5zZWxlY3Rpb24oKS5pc0luUGFzc3dvcmRGaWVsZCgpOworICAgICAg
ICAgICAgJiYgIW1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNJblBhc3N3b3JkRmll
bGQoKTsKICAgICAgICAgCiAgICAgICAgIC8vIEludmFsaWRhdGUgY2xpcGJvYXJkIGhlcmUgYWdh
aW5zdCBhbnltb3JlIHBhc3RlYm9hcmQgd3JpdGluZyBmb3Igc2VjdXJpdHkuICBUaGUgZHJhZwog
ICAgICAgICAvLyBpbWFnZSBjYW4gc3RpbGwgYmUgY2hhbmdlZCBhcyB3ZSBkcmFnLCBidXQgbm90
IHRoZSBwYXN0ZWJvYXJkIGRhdGEuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZvY3VzQ29u
dHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9Gb2N1c0NvbnRy
b2xsZXIuY3BwCShyZXZpc2lvbiAxNjMxMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZvY3Vz
Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4MSw3ICsyODEsNyBAQCBib29sIEZv
Y3VzQ29udHJvbGxlcjo6YWR2YW5jZUZvY3VzSW5Eb2N1CiAgICAgYm9vbCBjYXJldEJyb3dzaW5n
ID0gZnJhbWUuc2V0dGluZ3MoKS5jYXJldEJyb3dzaW5nRW5hYmxlZCgpOwogCiAgICAgaWYgKGNh
cmV0QnJvd3NpbmcgJiYgIWN1cnJlbnROb2RlKQotICAgICAgICBjdXJyZW50Tm9kZSA9IGZyYW1l
LnNlbGVjdGlvbigpLnN0YXJ0KCkuZGVwcmVjYXRlZE5vZGUoKTsKKyAgICAgICAgY3VycmVudE5v
ZGUgPSBmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpLmRlcHJlY2F0ZWROb2Rl
KCk7CiAKICAgICBkb2N1bWVudC0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRz
KCk7CiAKQEAgLTU1Myw4ICs1NTMsOCBAQCBzdGF0aWMgdm9pZCBjbGVhclNlbGVjdGlvbklmTmVl
ZGVkKEZyYW1lCiAgICAgICAgIAogICAgIGlmIChvbGRGb2N1c2VkRnJhbWUtPmRvY3VtZW50KCkg
IT0gbmV3Rm9jdXNlZEZyYW1lLT5kb2N1bWVudCgpKQogICAgICAgICByZXR1cm47Ci0gICAgCi0g
ICAgRnJhbWVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9IG9sZEZvY3VzZWRGcmFtZS0+c2VsZWN0aW9u
KCk7CisKKyAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBvbGRGb2N1c2Vk
RnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwogICAgIGlmIChzZWxlY3Rpb24uaXNOb25l
KCkpCiAgICAgICAgIHJldHVybjsKIApAQCAtNTYyLDcgKzU2Miw3IEBAIHN0YXRpYyB2b2lkIGNs
ZWFyU2VsZWN0aW9uSWZOZWVkZWQoRnJhbWUKICAgICBpZiAoY2FyZXRCcm93c2luZykKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgTm9kZSogc2VsZWN0aW9uU3RhcnROb2RlID0gc2VsZWN0aW9uLnNl
bGVjdGlvbigpLnN0YXJ0KCkuZGVwcmVjYXRlZE5vZGUoKTsKKyAgICBOb2RlKiBzZWxlY3Rpb25T
dGFydE5vZGUgPSBzZWxlY3Rpb24uc3RhcnQoKS5kZXByZWNhdGVkTm9kZSgpOwogICAgIGlmIChz
ZWxlY3Rpb25TdGFydE5vZGUgPT0gbmV3Rm9jdXNlZE5vZGUgfHwgc2VsZWN0aW9uU3RhcnROb2Rl
LT5pc0Rlc2NlbmRhbnRPZihuZXdGb2N1c2VkTm9kZSkgfHwgc2VsZWN0aW9uU3RhcnROb2RlLT5k
ZXByZWNhdGVkU2hhZG93QW5jZXN0b3JOb2RlKCkgPT0gbmV3Rm9jdXNlZE5vZGUpCiAgICAgICAg
IHJldHVybjsKICAgICAgICAgCkBAIC01NzksOCArNTc5LDggQEAgc3RhdGljIHZvaWQgY2xlYXJT
ZWxlY3Rpb25JZk5lZWRlZChGcmFtZQogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQot
ICAgIAotICAgIHNlbGVjdGlvbi5jbGVhcigpOworCisgICAgb2xkRm9jdXNlZEZyYW1lLT5zZWxl
Y3Rpb24oKS5jbGVhcigpOwogfQogCiBib29sIEZvY3VzQ29udHJvbGxlcjo6c2V0Rm9jdXNlZEVs
ZW1lbnQoRWxlbWVudCogZWxlbWVudCwgUGFzc1JlZlB0cjxGcmFtZT4gbmV3Rm9jdXNlZEZyYW1l
LCBGb2N1c0RpcmVjdGlvbiBkaXJlY3Rpb24pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL2lv
cy9GcmFtZUlPUy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL2lvcy9GcmFt
ZUlPUy5tbQkocmV2aXNpb24gMTYzMTI4KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9pb3MvRnJh
bWVJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTYwMSwxNSArNjAxLDE1IEBAIHZvaWQgRnJhbWU6
OnVwZGF0ZUxheW91dCgpIGNvbnN0CiAKIE5TUmVjdCBGcmFtZTo6Y2FyZXRSZWN0KCkgY29uc3QK
IHsKLSAgICBpZiAoc2VsZWN0aW9uKCkuaXNOb25lKCkpCisgICAgVmlzaWJsZVNlbGVjdGlvbiB2
aXNpYmxlU2VsZWN0aW9uID0gc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgaWYgKHZpc2li
bGVTZWxlY3Rpb24uaXNOb25lKCkpCiAgICAgICAgIHJldHVybiBDR1JlY3RaZXJvOwotICAgIHJl
dHVybiBzZWxlY3Rpb24oKS5pc0NhcmV0KCkgPyBzZWxlY3Rpb24oKS5hYnNvbHV0ZUNhcmV0Qm91
bmRzKCkgOiBWaXNpYmxlUG9zaXRpb24oc2VsZWN0aW9uKCkuZW5kKCkpLmFic29sdXRlQ2FyZXRC
b3VuZHMoKTsKKyAgICByZXR1cm4gdmlzaWJsZVNlbGVjdGlvbi5pc0NhcmV0KCkgPyBzZWxlY3Rp
b24oKS5hYnNvbHV0ZUNhcmV0Qm91bmRzKCkgOiBWaXNpYmxlUG9zaXRpb24odmlzaWJsZVNlbGVj
dGlvbi5lbmQoKSkuYWJzb2x1dGVDYXJldEJvdW5kcygpOwogfQogCiBOU1JlY3QgRnJhbWU6OnJl
Y3RGb3JTY3JvbGxUb1Zpc2libGUoKSBjb25zdAogewotICAgIFZpc2libGVTZWxlY3Rpb24gc2Vs
ZWN0aW9uKHRoaXMtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKLSAgICByZXR1cm4gcmVjdEZv
clNlbGVjdGlvbihzZWxlY3Rpb24pOworICAgIHJldHVybiByZWN0Rm9yU2VsZWN0aW9uKHNlbGVj
dGlvbigpLnNlbGVjdGlvbigpKTsKIH0KIAogTlNSZWN0IEZyYW1lOjpyZWN0Rm9yU2VsZWN0aW9u
KFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbikgY29uc3QKQEAgLTY1OCw3ICs2NTgsNiBAQCBO
U1JlY3QgRnJhbWU6OnJlY3RGb3JTZWxlY3Rpb24oVmlzaWJsZVNlCiAKIERPTUNTU1N0eWxlRGVj
bGFyYXRpb24qIEZyYW1lOjpzdHlsZUF0U2VsZWN0aW9uU3RhcnQoKSBjb25zdAogewotICAgIFBv
c2l0aW9uIHN0YXJ0ID0gc2VsZWN0aW9uKCkuc3RhcnQoKTsKICAgICBSZWZQdHI8RWRpdGluZ1N0
eWxlPiBlZGl0aW5nU3R5bGUgPSBFZGl0aW5nU3R5bGU6OnN0eWxlQXRTZWxlY3Rpb25TdGFydChz
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CiAgICAgaWYgKCFlZGl0aW5nU3R5bGUpCiAgICAgICAg
IHJldHVybiBudWxscHRyOwpAQCAtNzM3LDE0ICs3MzYsMTQgQEAgdm9pZCBGcmFtZTo6c2V0UmFu
Z2VkU2VsZWN0aW9uQmFzZVRvQ3VycgogCiB2b2lkIEZyYW1lOjpzZXRSYW5nZWRTZWxlY3Rpb25C
YXNlVG9DdXJyZW50U2VsZWN0aW9uU3RhcnQoKQogewotICAgIEZyYW1lU2VsZWN0aW9uJiBmcmFt
ZVNlbGVjdGlvbiA9IHNlbGVjdGlvbigpOwotICAgIG1fcmFuZ2VkU2VsZWN0aW9uQmFzZSA9IFZp
c2libGVTZWxlY3Rpb24oZnJhbWVTZWxlY3Rpb24uc2VsZWN0aW9uKCkuc3RhcnQoKSwgZnJhbWVT
ZWxlY3Rpb24uYWZmaW5pdHkoKSk7CisgICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgdmlzaWJs
ZVNlbGVjdGlvbiA9IHNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgIG1fcmFuZ2VkU2VsZWN0
aW9uQmFzZSA9IFZpc2libGVTZWxlY3Rpb24odmlzaWJsZVNlbGVjdGlvbi5zdGFydCgpLCB2aXNp
YmxlU2VsZWN0aW9uLmFmZmluaXR5KCkpOwogfQogCiB2b2lkIEZyYW1lOjpzZXRSYW5nZWRTZWxl
Y3Rpb25CYXNlVG9DdXJyZW50U2VsZWN0aW9uRW5kKCkKIHsKLSAgICBGcmFtZVNlbGVjdGlvbiYg
ZnJhbWVTZWxlY3Rpb24gPSBzZWxlY3Rpb24oKTsKLSAgICBtX3JhbmdlZFNlbGVjdGlvbkJhc2Ug
PSBWaXNpYmxlU2VsZWN0aW9uKGZyYW1lU2VsZWN0aW9uLnNlbGVjdGlvbigpLmVuZCgpLCBmcmFt
ZVNlbGVjdGlvbi5hZmZpbml0eSgpKTsKKyAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiB2aXNp
YmxlU2VsZWN0aW9uID0gc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgbV9yYW5nZWRTZWxl
Y3Rpb25CYXNlID0gVmlzaWJsZVNlbGVjdGlvbih2aXNpYmxlU2VsZWN0aW9uLmVuZCgpLCB2aXNp
YmxlU2VsZWN0aW9uLmFmZmluaXR5KCkpOwogfQogCiBWaXNpYmxlU2VsZWN0aW9uIEZyYW1lOjpy
YW5nZWRTZWxlY3Rpb25CYXNlKCkgY29uc3QKQEAgLTc1OSwxNCArNzU4LDE0IEBAIHZvaWQgRnJh
bWU6OmNsZWFyUmFuZ2VkU2VsZWN0aW9uSW5pdGlhbEUKIAogdm9pZCBGcmFtZTo6c2V0UmFuZ2Vk
U2VsZWN0aW9uSW5pdGlhbEV4dGVudFRvQ3VycmVudFNlbGVjdGlvblN0YXJ0KCkKIHsKLSAgICBG
cmFtZVNlbGVjdGlvbiYgZnJhbWVTZWxlY3Rpb24gPSBzZWxlY3Rpb24oKTsKLSAgICBtX3Jhbmdl
ZFNlbGVjdGlvbkluaXRpYWxFeHRlbnQgPSBWaXNpYmxlU2VsZWN0aW9uKGZyYW1lU2VsZWN0aW9u
LnNlbGVjdGlvbigpLnN0YXJ0KCksIGZyYW1lU2VsZWN0aW9uLmFmZmluaXR5KCkpOworICAgIGNv
bnN0IFZpc2libGVTZWxlY3Rpb24mIHZpc2libGVTZWxlY3Rpb24gPSBzZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKTsKKyAgICBtX3JhbmdlZFNlbGVjdGlvbkluaXRpYWxFeHRlbnQgPSBWaXNpYmxlU2Vs
ZWN0aW9uKHZpc2libGVTZWxlY3Rpb24uc3RhcnQoKSwgdmlzaWJsZVNlbGVjdGlvbi5hZmZpbml0
eSgpKTsKIH0KIAogdm9pZCBGcmFtZTo6c2V0UmFuZ2VkU2VsZWN0aW9uSW5pdGlhbEV4dGVudFRv
Q3VycmVudFNlbGVjdGlvbkVuZCgpCiB7Ci0gICAgRnJhbWVTZWxlY3Rpb24mIGZyYW1lU2VsZWN0
aW9uID0gc2VsZWN0aW9uKCk7Ci0gICAgbV9yYW5nZWRTZWxlY3Rpb25Jbml0aWFsRXh0ZW50ID0g
VmlzaWJsZVNlbGVjdGlvbihmcmFtZVNlbGVjdGlvbi5zZWxlY3Rpb24oKS5lbmQoKSwgZnJhbWVT
ZWxlY3Rpb24uYWZmaW5pdHkoKSk7CisgICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgdmlzaWJs
ZVNlbGVjdGlvbiA9IHNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgIG1fcmFuZ2VkU2VsZWN0
aW9uSW5pdGlhbEV4dGVudCA9IFZpc2libGVTZWxlY3Rpb24odmlzaWJsZVNlbGVjdGlvbi5lbmQo
KSwgdmlzaWJsZVNlbGVjdGlvbi5hZmZpbml0eSgpKTsKIH0KIAogVmlzaWJsZVNlbGVjdGlvbiBG
cmFtZTo6cmFuZ2VkU2VsZWN0aW9uSW5pdGlhbEV4dGVudCgpIGNvbnN0CkBAIC03ODcsNyArNzg2
LDcgQEAgTlNBcnJheSAqRnJhbWU6OmludGVycHJldGF0aW9uc0ZvckN1cnJlbgogICAgIGlmICgh
ZG9jdW1lbnQoKSkKICAgICAgICAgcmV0dXJuIG5pbDsKIAotICAgIEVsZW1lbnQqIHJvb3QgPSBz
ZWxlY3Rpb24oKS5zZWxlY3Rpb25UeXBlKCkgPT0gVmlzaWJsZVNlbGVjdGlvbjo6Tm9TZWxlY3Rp
b24gPyBkb2N1bWVudCgpLT5ib2R5KCkgOiBzZWxlY3Rpb24oKS5yb290RWRpdGFibGVFbGVtZW50
KCk7CisgICAgRWxlbWVudCogcm9vdCA9IHNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnNlbGVjdGlv
blR5cGUoKSA9PSBWaXNpYmxlU2VsZWN0aW9uOjpOb1NlbGVjdGlvbiA/IGRvY3VtZW50KCktPmJv
ZHkoKSA6IHNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsKICAg
ICB1bnNpZ25lZCByb290Q2hpbGRDb3VudCA9IHJvb3QtPmNoaWxkTm9kZUNvdW50KCk7CiAgICAg
UmVmUHRyPFJhbmdlPiByYW5nZU9mUm9vdENvbnRlbnRzID0gUmFuZ2U6OmNyZWF0ZSgqZG9jdW1l
bnQoKSwgY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKHJvb3QsIDApLCBjcmVhdGVMZWdhY3lF
ZGl0aW5nUG9zaXRpb24ocm9vdCwgcm9vdENoaWxkQ291bnQpKTsKIApJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCShyZXZpc2lvbiAxNjMxMjgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
NDQ0LDcgKzI0NDQsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpwYWludENhcmV0KFBhaW50SW5mbyYg
CiAgICAgYm9vbCBpc0NvbnRlbnRFZGl0YWJsZTsKICAgICBpZiAodHlwZSA9PSBDdXJzb3JDYXJl
dCkgewogICAgICAgICBjYXJldFBhaW50ZXIgPSBmcmFtZSgpLnNlbGVjdGlvbigpLmNhcmV0UmVu
ZGVyZXIoKTsKLSAgICAgICAgaXNDb250ZW50RWRpdGFibGUgPSBmcmFtZSgpLnNlbGVjdGlvbigp
Lmhhc0VkaXRhYmxlU3R5bGUoKTsKKyAgICAgICAgaXNDb250ZW50RWRpdGFibGUgPSBmcmFtZSgp
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlzQ29udGVudEVkaXRhYmxlKCk7CiAgICAgfSBlbHNl
IHsKICAgICAgICAgY2FyZXRQYWludGVyID0gZnJhbWUoKS5wYWdlKCktPmRyYWdDYXJldENvbnRy
b2xsZXIoKS5jYXJldFJlbmRlcmVyKCk7CiAgICAgICAgIGlzQ29udGVudEVkaXRhYmxlID0gZnJh
bWUoKS5wYWdlKCktPmRyYWdDYXJldENvbnRyb2xsZXIoKS5pc0NvbnRlbnRFZGl0YWJsZSgpOwpJ
bmRleDogU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQyL0NoYW5nZUxvZwkocmV2aXNpb24gMTYzMTYzKQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjMgQEAKKzIwMTQtMDEtMzAgIFJ5b3N1a2Ug
Tml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmVtb3ZlIGlubGluZSBtZW1iZXIg
ZnVuY3Rpb25zIG9mIEZyYW1lU2VsZWN0aW9uIHRoYXQgYWNjZXNzIG1fc2VsZWN0aW9uCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjc5ODYKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvZ3RrL1dlYkVkaXRvckNsaWVudEd0ay5jcHA6CisgICAgICAgIChXZWJL
aXQ6OmNvbGxhcHNlU2VsZWN0aW9uKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
UGFnZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmVkaXRvclN0YXRlKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUGFnZTo6Y29uZmlybUNvbXBvc2l0aW9uKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUGFnZTo6c2V0Q29tcG9zaXRpb24pOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFn
ZS9pb3MvV2ViUGFnZUlPUy5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6c2V0Q29tcG9z
aXRpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjp1cGRhdGVTZWxlY3Rpb25XaXRoVG91
Y2hlcyk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpzZXRDb21wb3NpdGlvbik6CisgICAgICAgIChXZWJL
aXQ6OldlYlBhZ2U6OmdldEF0dHJpYnV0ZWRTdWJzdHJpbmdGcm9tUmFuZ2UpOgorCiAyMDE0LTAx
LTMwICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAgIEZp
eCBpT1MgV0syIGJ1aWxkIGFmdGVyIHIxNjMxNTYuCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYkNvcmVTdXBwb3J0L2d0ay9XZWJFZGl0b3JDbGllbnRHdGsuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvZ3RrL1dlYkVk
aXRvckNsaWVudEd0ay5jcHAJKHJldmlzaW9uIDE2MzEyOCkKKysrIFNvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvZ3RrL1dlYkVkaXRvckNsaWVudEd0ay5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE2Niw3ICsxNjYsOCBAQCBzdGF0aWMgdm9pZCBjb2xsYXBzZVNlbGVjdGlv
bihHdGtDbGlwYm9hCiAKICAgICAvLyBDb2xsYXBzZSB0aGUgc2VsZWN0aW9uIHdpdGhvdXQgY2xl
YXJpbmcgaXQuCiAgICAgQVNTRVJUKGZyYW1lKTsKLSAgICBmcmFtZS0+c2VsZWN0aW9uKCkuc2V0
QmFzZShmcmFtZS0+c2VsZWN0aW9uKCkuZXh0ZW50KCksIGZyYW1lLT5zZWxlY3Rpb24oKS5hZmZp
bml0eSgpKTsKKyAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBmcmFtZS0+
c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgZnJhbWUtPnNlbGVjdGlvbigpLnNldEJhc2Uo
c2VsZWN0aW9uLmV4dGVudCgpLCBzZWxlY3Rpb24uYWZmaW5pdHkoKSk7CiB9CiAjZW5kaWYKIApJ
bmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAko
cmV2aXNpb24gMTYzMTI4KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YlBhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NDMsMTYgKzY0MywxNyBAQCBFZGl0b3JTdGF0
ZSBXZWJQYWdlOjplZGl0b3JTdGF0ZSgpIGNvbnN0CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBy
ZXN1bHQuc2VsZWN0aW9uSXNOb25lID0gZnJhbWUuc2VsZWN0aW9uKCkuaXNOb25lKCk7Ci0gICAg
cmVzdWx0LnNlbGVjdGlvbklzUmFuZ2UgPSBmcmFtZS5zZWxlY3Rpb24oKS5pc1JhbmdlKCk7Ci0g
ICAgcmVzdWx0LmlzQ29udGVudEVkaXRhYmxlID0gZnJhbWUuc2VsZWN0aW9uKCkuaXNDb250ZW50
RWRpdGFibGUoKTsKLSAgICByZXN1bHQuaXNDb250ZW50UmljaGx5RWRpdGFibGUgPSBmcmFtZS5z
ZWxlY3Rpb24oKS5pc0NvbnRlbnRSaWNobHlFZGl0YWJsZSgpOwotICAgIHJlc3VsdC5pc0luUGFz
c3dvcmRGaWVsZCA9IGZyYW1lLnNlbGVjdGlvbigpLmlzSW5QYXNzd29yZEZpZWxkKCk7CisgICAg
Y29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0gZnJhbWUuc2VsZWN0aW9uKCkuc2Vs
ZWN0aW9uKCk7CisKKyAgICByZXN1bHQuc2VsZWN0aW9uSXNOb25lID0gc2VsZWN0aW9uLmlzTm9u
ZSgpOworICAgIHJlc3VsdC5zZWxlY3Rpb25Jc1JhbmdlID0gc2VsZWN0aW9uLmlzUmFuZ2UoKTsK
KyAgICByZXN1bHQuaXNDb250ZW50RWRpdGFibGUgPSBzZWxlY3Rpb24uaXNDb250ZW50RWRpdGFi
bGUoKTsKKyAgICByZXN1bHQuaXNDb250ZW50UmljaGx5RWRpdGFibGUgPSBzZWxlY3Rpb24uaXND
b250ZW50UmljaGx5RWRpdGFibGUoKTsKKyAgICByZXN1bHQuaXNJblBhc3N3b3JkRmllbGQgPSBz
ZWxlY3Rpb24uaXNJblBhc3N3b3JkRmllbGQoKTsKICAgICByZXN1bHQuaGFzQ29tcG9zaXRpb24g
PSBmcmFtZS5lZGl0b3IoKS5oYXNDb21wb3NpdGlvbigpOwogICAgIHJlc3VsdC5zaG91bGRJZ25v
cmVDb21wb3NpdGlvblNlbGVjdGlvbkNoYW5nZSA9IGZyYW1lLmVkaXRvcigpLmlnbm9yZUNvbXBv
c2l0aW9uU2VsZWN0aW9uQ2hhbmdlKCk7CiAKICNpZiBQTEFURk9STShJT1MpCi0gICAgRnJhbWVT
ZWxlY3Rpb24mIHNlbGVjdGlvbiA9IGZyYW1lLnNlbGVjdGlvbigpOwogICAgIGlmIChmcmFtZS5l
ZGl0b3IoKS5oYXNDb21wb3NpdGlvbigpKSB7CiAgICAgICAgIFJlZlB0cjxSYW5nZT4gY29tcG9z
aXRpb25SYW5nZSA9IGZyYW1lLmVkaXRvcigpLmNvbXBvc2l0aW9uUmFuZ2UoKTsKICAgICAgICAg
VmVjdG9yPFdlYkNvcmU6OlNlbGVjdGlvblJlY3Q+IGNvbXBvc2l0aW9uUmVjdHM7CkBAIC02NjYs
NyArNjY3LDcgQEAgRWRpdG9yU3RhdGUgV2ViUGFnZTo6ZWRpdG9yU3RhdGUoKSBjb25zdAogICAg
ICAgICByZXN1bHQubWFya2VkVGV4dCA9IHBsYWluVGV4dChjb21wb3NpdGlvblJhbmdlLmdldCgp
KTsKICAgICB9CiAgICAgaWYgKHNlbGVjdGlvbi5pc0NhcmV0KCkpIHsKLSAgICAgICAgcmVzdWx0
LmNhcmV0UmVjdEF0U3RhcnQgPSBzZWxlY3Rpb24uYWJzb2x1dGVDYXJldEJvdW5kcygpOworICAg
ICAgICByZXN1bHQuY2FyZXRSZWN0QXRTdGFydCA9IGZyYW1lLnNlbGVjdGlvbigpLmFic29sdXRl
Q2FyZXRCb3VuZHMoKTsKICAgICAgICAgcmVzdWx0LmNhcmV0UmVjdEF0RW5kID0gcmVzdWx0LmNh
cmV0UmVjdEF0U3RhcnQ7CiAgICAgICAgIGlmIChtX3Nob3VsZFJldHVybldvcmRBdFNlbGVjdGlv
bikKICAgICAgICAgICAgIHJlc3VsdC53b3JkQXRTZWxlY3Rpb24gPSBwbGFpblRleHQod29yZFJh
bmdlRnJvbVBvc2l0aW9uKHNlbGVjdGlvbi5zdGFydCgpKS5nZXQoKSk7CkBAIC0zODEyLDcgKzM4
MTMsNyBAQCB2b2lkIFdlYlBhZ2U6OmNvbmZpcm1Db21wb3NpdGlvbihjb25zdCBTCiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKLSAgICBFbGVtZW50KiBzY29wZSA9IHRhcmdldEZyYW1lLT5zZWxl
Y3Rpb24oKS5yb290RWRpdGFibGVFbGVtZW50KCk7CisgICAgRWxlbWVudCogc2NvcGUgPSB0YXJn
ZXRGcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkucm9vdEVkaXRhYmxlRWxlbWVudCgpOwog
ICAgIFJlZlB0cjxSYW5nZT4gc2VsZWN0aW9uUmFuZ2UgPSBUZXh0SXRlcmF0b3I6OnJhbmdlRnJv
bUxvY2F0aW9uQW5kTGVuZ3RoKHNjb3BlLCBzZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9uTGVuZ3Ro
KTsKICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKHNlbGVjdGlvblJhbmdlLCAiSW52YWxpZCBzZWxl
Y3Rpb246IFslbGxkOiVsbGRdIGluIHRleHQgb2YgbGVuZ3RoICVkIiwgc3RhdGljX2Nhc3Q8bG9u
ZyBsb25nPihzZWxlY3Rpb25TdGFydCksIHN0YXRpY19jYXN0PGxvbmcgbG9uZz4oc2VsZWN0aW9u
TGVuZ3RoKSwgc2NvcGUtPmlubmVyVGV4dCgpLmxlbmd0aCgpKTsKIApAQCAtMzgyNiw3ICszODI3
LDcgQEAgdm9pZCBXZWJQYWdlOjpjb25maXJtQ29tcG9zaXRpb24oY29uc3QgUwogdm9pZCBXZWJQ
YWdlOjpzZXRDb21wb3NpdGlvbihjb25zdCBTdHJpbmcmIHRleHQsIFZlY3RvcjxDb21wb3NpdGlv
blVuZGVybGluZT4gdW5kZXJsaW5lcywgdWludDY0X3Qgc2VsZWN0aW9uU3RhcnQsIHVpbnQ2NF90
IHNlbGVjdGlvbkVuZCwgdWludDY0X3QgcmVwbGFjZW1lbnRTdGFydCwgdWludDY0X3QgcmVwbGFj
ZW1lbnRMZW5ndGgpCiB7CiAgICAgRnJhbWUqIHRhcmdldEZyYW1lID0gdGFyZ2V0RnJhbWVGb3JF
ZGl0aW5nKHRoaXMpOwotICAgIGlmICghdGFyZ2V0RnJhbWUgfHwgIXRhcmdldEZyYW1lLT5zZWxl
Y3Rpb24oKS5pc0NvbnRlbnRFZGl0YWJsZSgpKSB7CisgICAgaWYgKCF0YXJnZXRGcmFtZSB8fCAh
dGFyZ2V0RnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlzQ29udGVudEVkaXRhYmxlKCkp
IHsKICAgICAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpFZGl0b3JTdGF0ZUNoYW5n
ZWQoZWRpdG9yU3RhdGUoKSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMzgzNSw3ICsz
ODM2LDcgQEAgdm9pZCBXZWJQYWdlOjpzZXRDb21wb3NpdGlvbihjb25zdCBTdHJpbgogICAgICAg
ICAvLyBUaGUgbGF5b3V0IG5lZWRzIHRvIGJlIHVwdG9kYXRlIGJlZm9yZSBzZXR0aW5nIGEgc2Vs
ZWN0aW9uCiAgICAgICAgIHRhcmdldEZyYW1lLT5kb2N1bWVudCgpLT51cGRhdGVMYXlvdXQoKTsK
IAotICAgICAgICBFbGVtZW50KiBzY29wZSA9IHRhcmdldEZyYW1lLT5zZWxlY3Rpb24oKS5yb290
RWRpdGFibGVFbGVtZW50KCk7CisgICAgICAgIEVsZW1lbnQqIHNjb3BlID0gdGFyZ2V0RnJhbWUt
PnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsKICAgICAgICAg
UmVmUHRyPFJhbmdlPiByZXBsYWNlbWVudFJhbmdlID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUZyb21M
b2NhdGlvbkFuZExlbmd0aChzY29wZSwgcmVwbGFjZW1lbnRTdGFydCwgcmVwbGFjZW1lbnRMZW5n
dGgpOwogICAgICAgICB0YXJnZXRGcmFtZS0+ZWRpdG9yKCkuc2V0SWdub3JlQ29tcG9zaXRpb25T
ZWxlY3Rpb25DaGFuZ2UodHJ1ZSk7CiAgICAgICAgIHRhcmdldEZyYW1lLT5zZWxlY3Rpb24oKS5z
ZXRTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbihyZXBsYWNlbWVudFJhbmdlLmdldCgpLCBTRUxf
REVGQVVMVF9BRkZJTklUWSkpOwpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL2lvcy9XZWJQYWdlSU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQkocmV2aXNpb24gMTYzMTI4KQorKysgU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCSh3b3JraW5n
IGNvcHkpCkBAIC05Niw3ICs5Niw3IEBAIHZvaWQgV2ViUGFnZTo6c2V0Q29tcG9zaXRpb24oY29u
c3QgU3RyaW4KIHsKICAgICBGcmFtZSYgZnJhbWUgPSBtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigp
LmZvY3VzZWRPck1haW5GcmFtZSgpOwogCi0gICAgaWYgKGZyYW1lLnNlbGVjdGlvbigpLmlzQ29u
dGVudEVkaXRhYmxlKCkpCisgICAgaWYgKGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlz
Q29udGVudEVkaXRhYmxlKCkpCiAgICAgICAgIGZyYW1lLmVkaXRvcigpLnNldENvbXBvc2l0aW9u
KHRleHQsIHVuZGVybGluZXMsIHNlbGVjdGlvblN0YXJ0LCBzZWxlY3Rpb25FbmQpOwogfQogCkBA
IC01OTAsNyArNTkwLDcgQEAgdm9pZCBXZWJQYWdlOjp1cGRhdGVTZWxlY3Rpb25XaXRoVG91Y2hl
cwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgICAgICBjYXNlIFdLU2VsZWN0aW9u
VG91Y2hFbmRlZDoKLSAgICAgICAgICAgIGlmIChmcmFtZS5zZWxlY3Rpb24oKS5pc0NvbnRlbnRF
ZGl0YWJsZSgpKSB7CisgICAgICAgICAgICBpZiAoZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9u
KCkuaXNDb250ZW50RWRpdGFibGUoKSkgewogICAgICAgICAgICAgICAgIHJlc3VsdCA9IGNsb3Nl
c3RXb3JkQm91bmRhcnlGb3JQb3NpdGlvbihwb3NpdGlvbik7CiAgICAgICAgICAgICAgICAgaWYg
KHJlc3VsdC5pc05vdE51bGwoKSkKICAgICAgICAgICAgICAgICAgICAgcmFuZ2UgPSBSYW5nZTo6
Y3JlYXRlKCpmcmFtZS5kb2N1bWVudCgpLCByZXN1bHQsIHJlc3VsdCk7CkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCShy
ZXZpc2lvbiAxNjMxMjgpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFj
L1dlYlBhZ2VNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTI2MCw3ICsyNjAsNyBAQCB2b2lkIFdl
YlBhZ2U6OnNldENvbXBvc2l0aW9uKGNvbnN0IFN0cmluCiB7CiAgICAgRnJhbWUmIGZyYW1lID0g
bV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKTsKIAotICAgIGlm
IChmcmFtZS5zZWxlY3Rpb24oKS5pc0NvbnRlbnRFZGl0YWJsZSgpKSB7CisgICAgaWYgKGZyYW1l
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlzQ29udGVudEVkaXRhYmxlKCkpIHsKICAgICAgICAg
UmVmUHRyPFJhbmdlPiByZXBsYWNlbWVudFJhbmdlOwogICAgICAgICBpZiAocmVwbGFjZW1lbnRS
YW5nZVN0YXJ0ICE9IE5TTm90Rm91bmQpIHsKICAgICAgICAgICAgIHJlcGxhY2VtZW50UmFuZ2Ug
PSBjb252ZXJ0VG9SYW5nZSgmZnJhbWUsIE5TTWFrZVJhbmdlKHJlcGxhY2VtZW50UmFuZ2VTdGFy
dCwgcmVwbGFjZW1lbnRSYW5nZUVuZCAtIHJlcGxhY2VtZW50UmFuZ2VTdGFydCkpOwpAQCAtMzYw
LDcgKzM2MCw4IEBAIHZvaWQgV2ViUGFnZTo6Z2V0QXR0cmlidXRlZFN1YnN0cmluZ0Zyb20KIHsK
ICAgICBGcmFtZSYgZnJhbWUgPSBtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1h
aW5GcmFtZSgpOwogCi0gICAgaWYgKGZyYW1lLnNlbGVjdGlvbigpLmlzTm9uZSgpIHx8ICFmcmFt
ZS5zZWxlY3Rpb24oKS5pc0NvbnRlbnRFZGl0YWJsZSgpIHx8IGZyYW1lLnNlbGVjdGlvbigpLmlz
SW5QYXNzd29yZEZpZWxkKCkpCisgICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9u
ID0gZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgaWYgKHNlbGVjdGlvbi5pc05v
bmUoKSB8fCAhc2VsZWN0aW9uLmlzQ29udGVudEVkaXRhYmxlKCkgfHwgc2VsZWN0aW9uLmlzSW5Q
YXNzd29yZEZpZWxkKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIE5TUmFuZ2UgbnNSYW5nZSA9
IE5TTWFrZVJhbmdlKGxvY2F0aW9uLCBsZW5ndGggLSBsb2NhdGlvbik7CkluZGV4OiBTb3VyY2Uv
V2ViS2l0L2VmbC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9lZmwvQ2hh
bmdlTG9nCShyZXZpc2lvbiAxNjMxNjMpCisrKyBTb3VyY2UvV2ViS2l0L2VmbC9DaGFuZ2VMb2cJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMyBAQAorMjAxNC0wMS0zMCAgUnlvc3VrZSBOaXdh
ICA8cm5pd2FAd2Via2l0Lm9yZz4KKworICAgICAgICBSZW1vdmUgaW5saW5lIG1lbWJlciBmdW5j
dGlvbnMgb2YgRnJhbWVTZWxlY3Rpb24gdGhhdCBhY2Nlc3MgbV9zZWxlY3Rpb24KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNzk4NgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogZXdrL2V3a19mcmFtZS5j
cHA6CisgICAgICAgIChld2tfZnJhbWVfdGV4dF9zZWxlY3Rpb25fdHlwZV9nZXQpOgorCiAyMDE0
LTAxLTMwICBBbmRyZWkgQnVjdXIgIDxhYnVjdXJAYWRvYmUuY29tPgogCiAgICAgICAgIFJlbW92
ZSB0aGUgQUNDRUxFUkFURURfQ09NUE9TSVRJTkcgZmxhZwpJbmRleDogU291cmNlL1dlYktpdC9l
ZmwvV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L2VmbC9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBv
cnRFZmwuY3BwCShyZXZpc2lvbiAxNjMxMjgpCisrKyBTb3VyY2UvV2ViS2l0L2VmbC9XZWJDb3Jl
U3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02
MzksMTEgKzYzOSwxMiBAQCBib29sIER1bXBSZW5kZXJUcmVlU3VwcG9ydEVmbDo6c2VsZWN0ZWRS
CiAgICAgRFJUX1NVUFBSVF9QQUdFX0dFVF9PUl9SRVRVUk4oZXdrVmlldywgcGFnZSwgZmFsc2Up
OwogCiAgICAgV2ViQ29yZTo6RnJhbWUmIGZyYW1lID0gcGFnZS0+Zm9jdXNDb250cm9sbGVyKCku
Zm9jdXNlZE9yTWFpbkZyYW1lKCk7Ci0gICAgUmVmUHRyPFdlYkNvcmU6OlJhbmdlPiByYW5nZSA9
IGZyYW1lLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCk7CisgICAgY29uc3Qg
VmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0gZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9u
KCk7CisgICAgUmVmUHRyPFdlYkNvcmU6OlJhbmdlPiByYW5nZSA9IHNlbGVjdGlvbi50b05vcm1h
bGl6ZWRSYW5nZSgpLmdldCgpOwogICAgIGlmICghcmFuZ2UpCiAgICAgICAgIHJldHVybiBmYWxz
ZTsKIAotICAgIFdlYkNvcmU6OkVsZW1lbnQqIHNlbGVjdGlvblJvb3QgPSBmcmFtZS5zZWxlY3Rp
b24oKS5yb290RWRpdGFibGVFbGVtZW50KCk7CisgICAgV2ViQ29yZTo6RWxlbWVudCogc2VsZWN0
aW9uUm9vdCA9IHNlbGVjdGlvbi5yb290RWRpdGFibGVFbGVtZW50KCk7CiAgICAgV2ViQ29yZTo6
RWxlbWVudCogc2NvcGUgPSBzZWxlY3Rpb25Sb290ID8gc2VsZWN0aW9uUm9vdCA6IGZyYW1lLmRv
Y3VtZW50KCktPmRvY3VtZW50RWxlbWVudCgpOwogCiAgICAgUmVmUHRyPFdlYkNvcmU6OlJhbmdl
PiB0ZXN0UmFuZ2UgPSBXZWJDb3JlOjpSYW5nZTo6Y3JlYXRlKHNjb3BlLT5kb2N1bWVudCgpLCBz
Y29wZSwgMCwgcmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCksIHJhbmdlLT5zdGFydE9mZnNldCgpKTsK
SW5kZXg6IFNvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfZnJhbWUuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvZWZsL2V3ay9ld2tfZnJhbWUuY3BwCShyZXZpc2lvbiAxNjMxMjgpCisr
KyBTb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX2ZyYW1lLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MTA3Myw5ICsxMDczLDkgQEAgRXdrX1RleHRfU2VsZWN0aW9uX1R5cGUgZXdrX2ZyYW1lX3RleHRf
cwogICAgIEVXS19GUkFNRV9TRF9HRVRfT1JfUkVUVVJOKGV3a0ZyYW1lLCBzbWFydERhdGEsIEVX
S19URVhUX1NFTEVDVElPTl9OT05FKTsKICAgICBFSU5BX1NBRkVUWV9PTl9OVUxMX1JFVFVSTl9W
QUwoc21hcnREYXRhLT5mcmFtZSwgRVdLX1RFWFRfU0VMRUNUSU9OX05PTkUpOwogCi0gICAgV2Vi
Q29yZTo6RnJhbWVTZWxlY3Rpb24mIGNvbnRyb2xsZXIgPSBzbWFydERhdGEtPmZyYW1lLT5zZWxl
Y3Rpb24oKTsKKyAgICBjb25zdCBXZWJDb3JlOjpWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24g
PSBzbWFydERhdGEtPmZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKIAotICAgIHN3aXRj
aCAoY29udHJvbGxlci5zZWxlY3Rpb25UeXBlKCkpIHsKKyAgICBzd2l0Y2ggKHNlbGVjdGlvbi5z
ZWxlY3Rpb25UeXBlKCkpIHsKICAgICBjYXNlIFdlYkNvcmU6OlZpc2libGVTZWxlY3Rpb246Ok5v
U2VsZWN0aW9uOgogICAgICAgICByZXR1cm4gRVdLX1RFWFRfU0VMRUNUSU9OX05PTkU7CiAgICAg
Y2FzZSBXZWJDb3JlOjpWaXNpYmxlU2VsZWN0aW9uOjpDYXJldFNlbGVjdGlvbjoKSW5kZXg6IFNv
dXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2d0
ay9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2MzE2MykKKysrIFNvdXJjZS9XZWJLaXQvZ3RrL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEzIEBACisyMDE0LTAxLTMwICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIFJlbW92ZSBpbmxpbmUgbWVtYmVy
IGZ1bmN0aW9ucyBvZiBGcmFtZVNlbGVjdGlvbiB0aGF0IGFjY2VzcyBtX3NlbGVjdGlvbgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTI3OTg2CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJDb3JlU3Vw
cG9ydC9FZGl0b3JDbGllbnRHdGsuY3BwOgorICAgICAgICAoV2ViS2l0Ojpjb2xsYXBzZVNlbGVj
dGlvbik6CisKIDIwMTQtMDEtMzAgIEFuZHJlaSBCdWN1ciAgPGFidWN1ckBhZG9iZS5jb20+CiAK
ICAgICAgICAgUmVtb3ZlIHRoZSBBQ0NFTEVSQVRFRF9DT01QT1NJVElORyBmbGFnCkluZGV4OiBT
b3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9FZGl0b3JDbGllbnRHdGsuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudEd0
ay5jcHAJKHJldmlzaW9uIDE2MzEyOCkKKysrIFNvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBw
b3J0L0VkaXRvckNsaWVudEd0ay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxNiw3ICsyMTYsOCBA
QCBzdGF0aWMgdm9pZCBjb2xsYXBzZVNlbGVjdGlvbihHdGtDbGlwYm9hCiAgICAgRnJhbWUmIGZy
YW1lID0gY29yZVBhZ2UtPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpOwog
CiAgICAgLy8gQ29sbGFwc2UgdGhlIHNlbGVjdGlvbiB3aXRob3V0IGNsZWFyaW5nIGl0Ci0gICAg
ZnJhbWUuc2VsZWN0aW9uKCkuc2V0QmFzZShmcmFtZS5zZWxlY3Rpb24oKS5leHRlbnQoKSwgZnJh
bWUuc2VsZWN0aW9uKCkuYWZmaW5pdHkoKSk7CisgICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYg
c2VsZWN0aW9uID0gZnJhbWUuc2VsZWN0aW9uKCk7CisgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0
QmFzZShzZWxlY3Rpb24uZXh0ZW50KCksIHNlbGVjdGlvbi5hZmZpbml0eSgpKTsKIH0KIAogI2lm
IFBMQVRGT1JNKFgxMSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQvaW9zL0NoYW5nZUxvZwo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2lvcy9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2MzE2MykKKysr
IFNvdXJjZS9XZWJLaXQvaW9zL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEz
IEBACisyMDE0LTAxLTMwICBSeW9zdWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAg
ICAgIFJlbW92ZSBpbmxpbmUgbWVtYmVyIGZ1bmN0aW9ucyBvZiBGcmFtZVNlbGVjdGlvbiB0aGF0
IGFjY2VzcyBtX3NlbGVjdGlvbgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MTI3OTg2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISku
CisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9XZWJGcmFtZUlPUy5tbToKKyAgICAgICAgKC1b
V2ViRnJhbWUgc2V0QmFzZVdyaXRpbmdEaXJlY3Rpb246XSk6CisKIDIwMTQtMDEtMzAgIEFuZHJl
aSBCdWN1ciAgPGFidWN1ckBhZG9iZS5jb20+CiAKICAgICAgICAgUmVtb3ZlIHRoZSBBQ0NFTEVS
QVRFRF9DT01QT1NJVElORyBmbGFnCkluZGV4OiBTb3VyY2UvV2ViS2l0L2lvcy9XZWJDb3JlU3Vw
cG9ydC9XZWJGcmFtZUlPUy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2lvcy9XZWJD
b3JlU3VwcG9ydC9XZWJGcmFtZUlPUy5tbQkocmV2aXNpb24gMTYzMTI4KQorKysgU291cmNlL1dl
YktpdC9pb3MvV2ViQ29yZVN1cHBvcnQvV2ViRnJhbWVJT1MubW0JKHdvcmtpbmcgY29weSkKQEAg
LTU3NSw3ICs1NzUsNyBAQCAtICh2b2lkKXNldEJhc2VXcml0aW5nRGlyZWN0aW9uOihXS1dyaXRp
CiAgICAgV0tXcml0aW5nRGlyZWN0aW9uIG9yaWdpbmFsRGlyZWN0aW9uID0gW3NlbGYgc2VsZWN0
aW9uQmFzZVdyaXRpbmdEaXJlY3Rpb25dOwogCiAgICAgRnJhbWUgKmZyYW1lID0gW3NlbGYgY29y
ZUZyYW1lXTsKLSAgICBpZiAoIWZyYW1lLT5zZWxlY3Rpb24oKS5pc0NvbnRlbnRFZGl0YWJsZSgp
KQorICAgIGlmICghZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlzQ29udGVudEVkaXRh
YmxlKCkpCiAgICAgICAgIHJldHVybjsKICAgICAKICAgICBXcml0aW5nRGlyZWN0aW9uIHdjRGly
ZWN0aW9uID0gTGVmdFRvUmlnaHRXcml0aW5nRGlyZWN0aW9uOwpJbmRleDogU291cmNlL1dlYktp
dC9tYWMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL0NoYW5nZUxv
ZwkocmV2aXNpb24gMTYzMTYzKQorKysgU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCSh3b3Jr
aW5nIGNvcHkpCkBAIC0xLDMgKzEsMjggQEAKKzIwMTQtMDEtMzAgIFJ5b3N1a2UgTml3YSAgPHJu
aXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmVtb3ZlIGlubGluZSBtZW1iZXIgZnVuY3Rpb25z
IG9mIEZyYW1lU2VsZWN0aW9uIHRoYXQgYWNjZXNzIG1fc2VsZWN0aW9uCisgICAgICAgIGh0dHBz
Oi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjc5ODYKKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYlZpZXcvV2ViRnJhbWUubW06
CisgICAgICAgICgtW1dlYkZyYW1lIGhhc0VkaXRhYmxlU2VsZWN0aW9uXSk6CisgICAgICAgICgt
W1dlYkZyYW1lIHNlbGVjdGlvbkFmZmluaXR5XSk6CisgICAgICAgICgtW1dlYkZyYW1lIGdldERp
Y3RhdGlvblJlc3VsdFJhbmdlczphbmRNZXRhZGF0YXM6XSk6CisgICAgICAgICgtW1dlYkZyYW1l
IGZvY3VzZWROb2RlSGFzQ29udGVudF0pOgorICAgICAgICAqIFdlYlZpZXcvV2ViSFRNTFZpZXcu
bW06CisgICAgICAgICgtW1dlYkhUTUxWaWV3IHJlYWRTZWxlY3Rpb25Gcm9tUGFzdGVib2FyZDpd
KToKKyAgICAgICAgKC1bV2ViSFRNTFZpZXcgX2hhc1NlbGVjdGlvbl0pOgorICAgICAgICAoLVtX
ZWJIVE1MVmlldyBfaGFzU2VsZWN0aW9uT3JJbnNlcnRpb25Qb2ludF0pOgorICAgICAgICAoLVtX
ZWJIVE1MVmlldyBfaGFzSW5zZXJ0aW9uUG9pbnRdKToKKyAgICAgICAgKC1bV2ViSFRNTFZpZXcg
X2lzRWRpdGFibGVdKToKKyAgICAgICAgKC1bV2ViSFRNTFZpZXcgdmFsaWRhdGVVc2VySW50ZXJm
YWNlSXRlbVdpdGhvdXREZWxlZ2F0ZTpdKToKKyAgICAgICAgKC1bV2ViSFRNTFZpZXcgbWFpbnRh
aW5zSW5hY3RpdmVTZWxlY3Rpb25dKToKKyAgICAgICAgKGlzVGV4dElucHV0KToKKyAgICAgICAg
KGlzSW5QYXNzd29yZEZpZWxkKToKKyAgICAgICAgKiBXZWJWaWV3L1dlYlZpZXcubW06CisgICAg
ICAgICgtW1dlYlZpZXcgc2VsZWN0aW9uQWZmaW5pdHldKToKKwogMjAxNC0wMS0zMCAgRGF2aWQg
S2lsemVyICA8ZGRraWx6ZXJAYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBzZWN1cml0eS1jaGVj
a2VkIGNhc3QgZm9yIFdlYkNvcmU6OkNhY2hlZEltYWdlCkluZGV4OiBTb3VyY2UvV2ViS2l0L21h
Yy9XZWJWaWV3L1dlYkZyYW1lLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dl
YlZpZXcvV2ViRnJhbWUubW0JKHJldmlzaW9uIDE2MzEyOCkKKysrIFNvdXJjZS9XZWJLaXQvbWFj
L1dlYlZpZXcvV2ViRnJhbWUubW0JKHdvcmtpbmcgY29weSkKQEAgLTEzNDgsNyArMTM0OCw3IEBA
IC0gKHZvaWQpcmVzZXRTZWxlY3Rpb24KIC0gKEJPT0wpaGFzRWRpdGFibGVTZWxlY3Rpb24KIHsK
ICAgICBXZWJDb3JlOjpGcmFtZSAqZnJhbWUgPSBjb3JlKHNlbGYpOwotICAgIHJldHVybiBmcmFt
ZS0+c2VsZWN0aW9uKCkuaXNDb250ZW50RWRpdGFibGUoKTsKKyAgICByZXR1cm4gZnJhbWUtPnNl
bGVjdGlvbigpLnNlbGVjdGlvbigpLmlzQ29udGVudEVkaXRhYmxlKCk7CiB9CiAKIC0gKGludClw
cmVmZXJyZWRIZWlnaHQKQEAgLTE0NzMsNyArMTQ3Myw3IEBAIC0gKHZvaWQpc2V0U2VsZWN0ZWRE
T01SYW5nZTooRE9NUmFuZ2UgKikKIC0gKE5TU2VsZWN0aW9uQWZmaW5pdHkpc2VsZWN0aW9uQWZm
aW5pdHkKIHsKICAgICBXZWJDb3JlOjpGcmFtZSAqZnJhbWUgPSBjb3JlKHNlbGYpOwotICAgIHJl
dHVybiAoTlNTZWxlY3Rpb25BZmZpbml0eSkoZnJhbWUtPnNlbGVjdGlvbigpLmFmZmluaXR5KCkp
OworICAgIHJldHVybiAoTlNTZWxlY3Rpb25BZmZpbml0eSkoZnJhbWUtPnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpLmFmZmluaXR5KCkpOwogfQogCiAtICh2b2lkKWV4cGFuZFNlbGVjdGlvblRvRWxl
bWVudENvbnRhaW5pbmdDYXJldFNlbGVjdGlvbgpAQCAtMTcxNCw4ICsxNzE0LDkgQEAgLSAodm9p
ZClnZXREaWN0YXRpb25SZXN1bHRSYW5nZXM6KE5TQXJyYQogICAgIAogICAgIEZyYW1lICpmcmFt
ZSA9IGNvcmUoc2VsZik7CiAgICAgRG9jdW1lbnQgKmRvY3VtZW50ID0gZnJhbWUtPmRvY3VtZW50
KCk7Ci0gICAgCi0gICAgRWxlbWVudCAqcm9vdCA9IGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rp
b25UeXBlKCkgPT0gVmlzaWJsZVNlbGVjdGlvbjo6Tm9TZWxlY3Rpb24gPyBmcmFtZS0+ZG9jdW1l
bnQoKS0+Ym9keSgpIDogZnJhbWUtPnNlbGVjdGlvbigpLnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsK
KworICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9IGZyYW1lLT5zZWxlY3Rp
b24oKS5zZWxlY3Rpb24oKTsKKyAgICBFbGVtZW50ICpyb290ID0gc2VsZWN0aW9uLnNlbGVjdGlv
blR5cGUoKSA9PSBWaXNpYmxlU2VsZWN0aW9uOjpOb1NlbGVjdGlvbiA/IGZyYW1lLT5kb2N1bWVu
dCgpLT5ib2R5KCkgOiBzZWxlY3Rpb24ucm9vdEVkaXRhYmxlRWxlbWVudCgpOwogICAgIAogICAg
IERPTVJhbmdlICpwcmV2aW91c0RPTVJhbmdlID0gbmlsOwogICAgIGlkIHByZXZpb3VzTWV0YWRh
dGEgPSBuaWw7CkBAIC0yMjcxLDExICsyMjcyLDEyIEBAIC0gKEJPT0wpZm9jdXNlZE5vZGVIYXND
b250ZW50CiAgICAgRnJhbWUqIGNvcmVGcmFtZSA9IF9wcml2YXRlLT5jb3JlRnJhbWU7CiAgICAK
ICAgICBFbGVtZW50KiByb290OwotICAgIGlmIChjb3JlRnJhbWUtPnNlbGVjdGlvbigpLmlzTm9u
ZSgpIHx8ICFjb3JlRnJhbWUtPnNlbGVjdGlvbigpLmlzQ29udGVudEVkaXRhYmxlKCkpCisgICAg
Y29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0gY29yZUZyYW1lLT5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKTsKKyAgICBpZiAoc2VsZWN0aW9uLmlzTm9uZSgpIHx8ICFzZWxlY3Rpb24u
aXNDb250ZW50RWRpdGFibGUoKSkKICAgICAgICAgcm9vdCA9IGNvcmVGcmFtZS0+ZG9jdW1lbnQo
KS0+Ym9keSgpOwogICAgIGVsc2UgewogICAgICAgICAvLyBDYW4ndCB1c2UgdGhlIGZvY3VzZWRO
b2RlIGhlcmUgYmVjYXVzZSB3ZSB3YW50IHRoZSByb290IG9mIHRoZSBzaGFkb3cgdHJlZSBmb3Ig
Zm9ybSBlbGVtZW50cy4KLSAgICAgICAgcm9vdCA9IGNvcmVGcmFtZS0+c2VsZWN0aW9uKCkucm9v
dEVkaXRhYmxlRWxlbWVudCgpOworICAgICAgICByb290ID0gc2VsZWN0aW9uLnJvb3RFZGl0YWJs
ZUVsZW1lbnQoKTsKICAgICB9CiAgICAgLy8gRWFybHkgcmV0dXJuIHRvIGF2b2lkIHRoZSBleHBl
bnNlIG9mIGNyZWF0aW5nIFZpc2libGVQb3NpdGlvbnMuCiAgICAgLy8gRklYTUU6IFdlIGZhaWwg
dG8gY29tcHV0ZSBhIHJvb3QgZm9yIFNWRywgd2UgaGF2ZSBhIG51bGwgY2hlY2sgaGVyZSBzbyB0
aGF0IHdlIGRvbid0IGNyYXNoLgpJbmRleDogU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJI
VE1MVmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhU
TUxWaWV3Lm1tCShyZXZpc2lvbiAxNjMxMjgpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3
L1dlYkhUTUxWaWV3Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC0xMDAxLDcgKzEwMDEsNyBAQCAtIChC
T09MKXJlYWRTZWxlY3Rpb25Gcm9tUGFzdGVib2FyZDooTlNQCiAgICAgRnJhbWUqIGNvcmVGcmFt
ZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7IAogICAgIGlmICghY29yZUZyYW1lKSAKICAgICAgICAg
cmV0dXJuIE5POyAKLSAgICBpZiAoY29yZUZyYW1lLT5zZWxlY3Rpb24oKS5pc0NvbnRlbnRSaWNo
bHlFZGl0YWJsZSgpKQorICAgIGlmIChjb3JlRnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigp
LmlzQ29udGVudFJpY2hseUVkaXRhYmxlKCkpCiAgICAgICAgIFtzZWxmIF9wYXN0ZVdpdGhQYXN0
ZWJvYXJkOnBhc3RlYm9hcmQgYWxsb3dQbGFpblRleHQ6WUVTXTsgCiAgICAgZWxzZSAKICAgICAg
ICAgW3NlbGYgX3Bhc3RlQXNQbGFpblRleHRXaXRoUGFzdGVib2FyZDpwYXN0ZWJvYXJkXTsgCkBA
IC0xOTg2LDI1ICsxOTg2LDI1IEBAIC0gKEJPT0wpX2NhbkFsdGVyQ3VycmVudFNlbGVjdGlvbgog
LSAoQk9PTClfaGFzU2VsZWN0aW9uCiB7CiAgICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3Nl
bGYgX2ZyYW1lXSk7Ci0gICAgcmV0dXJuIGNvcmVGcmFtZSAmJiBjb3JlRnJhbWUtPnNlbGVjdGlv
bigpLmlzUmFuZ2UoKTsKKyAgICByZXR1cm4gY29yZUZyYW1lICYmIGNvcmVGcmFtZS0+c2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCkuaXNSYW5nZSgpOwogfQogCiAtIChCT09MKV9oYXNTZWxlY3Rpb25P
ckluc2VydGlvblBvaW50CiB7CiAgICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2Zy
YW1lXSk7Ci0gICAgcmV0dXJuIGNvcmVGcmFtZSAmJiBjb3JlRnJhbWUtPnNlbGVjdGlvbigpLmlz
Q2FyZXRPclJhbmdlKCk7CisgICAgcmV0dXJuIGNvcmVGcmFtZSAmJiBjb3JlRnJhbWUtPnNlbGVj
dGlvbigpLnNlbGVjdGlvbigpLmlzQ2FyZXRPclJhbmdlKCk7CiB9CiAKIC0gKEJPT0wpX2hhc0lu
c2VydGlvblBvaW50CiB7CiAgICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1l
XSk7Ci0gICAgcmV0dXJuIGNvcmVGcmFtZSAmJiBjb3JlRnJhbWUtPnNlbGVjdGlvbigpLmlzQ2Fy
ZXQoKTsKKyAgICByZXR1cm4gY29yZUZyYW1lICYmIGNvcmVGcmFtZS0+c2VsZWN0aW9uKCkuc2Vs
ZWN0aW9uKCkuaXNDYXJldCgpOwogfQogCiAtIChCT09MKV9pc0VkaXRhYmxlCiB7CiAgICAgRnJh
bWUqIGNvcmVGcmFtZSA9IGNvcmUoW3NlbGYgX2ZyYW1lXSk7Ci0gICAgcmV0dXJuIGNvcmVGcmFt
ZSAmJiBjb3JlRnJhbWUtPnNlbGVjdGlvbigpLmlzQ29udGVudEVkaXRhYmxlKCk7CisgICAgcmV0
dXJuIGNvcmVGcmFtZSAmJiBjb3JlRnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlzQ29u
dGVudEVkaXRhYmxlKCk7CiB9CiAKIC0gKEJPT0wpX3RyYW5zcGFyZW50QmFja2dyb3VuZApAQCAt
Mjg5OSw3ICsyODk5LDcgQEAgLSAoQk9PTCl2YWxpZGF0ZVVzZXJJbnRlcmZhY2VJdGVtV2l0aG91
dAogICAgIAogICAgIGlmIChhY3Rpb24gPT0gQHNlbGVjdG9yKHBhc3RlQXNSaWNoVGV4dDopKQog
ICAgICAgICByZXR1cm4gZnJhbWUgJiYgKGZyYW1lLT5lZGl0b3IoKS5jYW5ESFRNTFBhc3RlKCkK
LSAgICAgICAgICAgIHx8IChmcmFtZS0+ZWRpdG9yKCkuY2FuUGFzdGUoKSAmJiBmcmFtZS0+c2Vs
ZWN0aW9uKCkuaXNDb250ZW50UmljaGx5RWRpdGFibGUoKSkpOworICAgICAgICAgICAgfHwgKGZy
YW1lLT5lZGl0b3IoKS5jYW5QYXN0ZSgpICYmIGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24o
KS5pc0NvbnRlbnRSaWNobHlFZGl0YWJsZSgpKSk7CiAgICAgCiAgICAgaWYgKGFjdGlvbiA9PSBA
c2VsZWN0b3IocGVyZm9ybUZpbmRQYW5lbEFjdGlvbjopKQogICAgICAgICByZXR1cm4gTk87CkBA
IC0zMDI2LDcgKzMwMjYsNyBAQCAtIChCT09MKW1haW50YWluc0luYWN0aXZlU2VsZWN0aW9uCiAg
ICAgICAgIHJldHVybiBZRVM7CiAgICAgCiAgICAgRnJhbWUqIGNvcmVGcmFtZSA9IGNvcmUoW3Nl
bGYgX2ZyYW1lXSk7Ci0gICAgcmV0dXJuIGNvcmVGcmFtZSAmJiBjb3JlRnJhbWUtPnNlbGVjdGlv
bigpLmlzQ29udGVudEVkaXRhYmxlKCk7CisgICAgcmV0dXJuIGNvcmVGcmFtZSAmJiBjb3JlRnJh
bWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlzQ29udGVudEVkaXRhYmxlKCk7CiAjZWxzZQog
ICAgIC8vIFRoaXMgbWV0aG9kIGhlbHBzIHRvIGRldGVybWluZSB3aGV0aGVyIHRoZSBXZWJIVE1M
VmlldyBzaG91bGQgbWFpbnRhaW4KICAgICAvLyBhbiBpbmFjdGl2ZSBzZWxlY3Rpb24gd2hlbiBp
dCdzIG5vdCBmaXJzdCByZXNwb25kZXIuCkBAIC0zMDU3LDcgKzMwNTcsNyBAQCAtIChCT09MKW1h
aW50YWluc0luYWN0aXZlU2VsZWN0aW9uCiAgICAgICAgIHJldHVybiBZRVM7CiAKICAgICBGcmFt
ZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKLSAgICBib29sIHNlbGVjdGlvbklz
RWRpdGFibGUgPSBjb3JlRnJhbWUgJiYgY29yZUZyYW1lLT5zZWxlY3Rpb24oKS5pc0NvbnRlbnRF
ZGl0YWJsZSgpOworICAgIGJvb2wgc2VsZWN0aW9uSXNFZGl0YWJsZSA9IGNvcmVGcmFtZSAmJiBj
b3JlRnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlzQ29udGVudEVkaXRhYmxlKCk7CiAg
ICAgYm9vbCBuZXh0UmVzcG9uZGVySXNJbldlYlZpZXcgPSBbbmV4dFJlc3BvbmRlciBpc0tpbmRP
ZkNsYXNzOltOU1ZpZXcgY2xhc3NdXQogICAgICAgICAmJiBbbmV4dFJlc3BvbmRlciBpc0Rlc2Nl
bmRhbnRPZjpbW1tzZWxmIF93ZWJWaWV3XSBtYWluRnJhbWVdIGZyYW1lVmlld11dOwogCkBAIC00
MTM3LDEzICs0MTM3LDE2IEBAIC0gKEJPT0wpbmVlZHNQYW5lbFRvQmVjb21lS2V5CiAvLyBBUEkg
d2hlbiBhbiBlZGl0YWJsZSByZWdpb24gaXMgbm90IGN1cnJlbnRseSBmb2N1c2VkLgogc3RhdGlj
IEJPT0wgaXNUZXh0SW5wdXQoRnJhbWUqIGNvcmVGcmFtZSkKIHsKLSAgICByZXR1cm4gY29yZUZy
YW1lICYmICFjb3JlRnJhbWUtPnNlbGVjdGlvbigpLmlzTm9uZSgpICYmIGNvcmVGcmFtZS0+c2Vs
ZWN0aW9uKCkuaXNDb250ZW50RWRpdGFibGUoKTsKKyAgICBpZiAoIWNvcmVGcmFtZSkKKyAgICAg
ICAgcmV0dXJuIE5POworICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9IGNv
cmVGcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgcmV0dXJuICFzZWxlY3Rpb24u
aXNOb25lKCkgJiYgc2VsZWN0aW9uLmlzQ29udGVudEVkaXRhYmxlKCk7CiB9CiAKICNpZiAhUExB
VEZPUk0oSU9TKQogc3RhdGljIEJPT0wgaXNJblBhc3N3b3JkRmllbGQoRnJhbWUqIGNvcmVGcmFt
ZSkKIHsKLSAgICByZXR1cm4gY29yZUZyYW1lICYmIGNvcmVGcmFtZS0+c2VsZWN0aW9uKCkuaXNJ
blBhc3N3b3JkRmllbGQoKTsKKyAgICByZXR1cm4gY29yZUZyYW1lICYmIGNvcmVGcmFtZS0+c2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNJblBhc3N3b3JkRmllbGQoKTsKIH0KICNlbmRpZgogCklu
ZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0KPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJWaWV3Lm1tCShyZXZpc2lvbiAxNjMxMjgpCisr
KyBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYlZpZXcubW0JKHdvcmtpbmcgY29weSkKQEAg
LTcyNDQsNyArNzI0NCw3IEBAIC0gKE5TU2VsZWN0aW9uQWZmaW5pdHkpc2VsZWN0aW9uQWZmaW5p
dHkKICAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfc2VsZWN0ZWRPck1haW5GcmFt
ZV0pOwogICAgIGlmICghY29yZUZyYW1lKQogICAgICAgICByZXR1cm4gTlNTZWxlY3Rpb25BZmZp
bml0eURvd25zdHJlYW07Ci0gICAgcmV0dXJuIGtpdChjb3JlRnJhbWUtPnNlbGVjdGlvbigpLmFm
ZmluaXR5KCkpOworICAgIHJldHVybiBraXQoY29yZUZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKS5hZmZpbml0eSgpKTsKIH0KIAogLSAodm9pZClzZXRFZGl0YWJsZTooQk9PTClmbGFnCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>222855</attachid>
            <date>2014-01-31 14:39:55 -0800</date>
            <delta_ts>2014-01-31 15:44:57 -0800</delta_ts>
            <desc>One more build fix for EFL &amp; GTK+</desc>
            <filename>bug-127986-20140131143954.patch</filename>
            <type>text/plain</type>
            <size>76809</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2MzE2MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwNSBAQAorMjAxNC0wMS0zMCAgUnlvc3Vr
ZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KKworICAgICAgICBSZW1vdmUgaW5saW5lIG1lbWJl
ciBmdW5jdGlvbnMgb2YgRnJhbWVTZWxlY3Rpb24gdGhhdCBhY2Nlc3MgbV9zZWxlY3Rpb24KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNzk4NgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlbW92ZWQgbnVt
ZXJvdXMgaW5saW5lIG1lbWJlciBmdW5jdGlvbnMgb2YgRnJhbWVTZWxlY3Rpb24gdGhhdCBkZXBl
bmQgb24gbV9zZWxlY3Rpb24uCisKKyAgICAgICAgVGhpcyBpcyBuZWVkZWQgdG8gZW5zdXJlIGFs
bCBhY2Nlc3NlcyB0byBtX3NlbGVjdGlvbiBoYXBwZW4gdGhyb3VnaCBGcmFtZVNlbGVjdGlvbjo6
c2VsZWN0aW9uKCksCisgICAgICAgIHdoaWNoIGluIHR1cm4sIGFsbG93cyB1cyB0byB1cGRhdGUg
aXRzIGNhbGwgc2l0ZXMgdG8gdXNlIGVpdGhlciB2YWxpZGF0ZWQgc2VsZWN0aW9uIHRoYXQgZWRp
dGluZworICAgICAgICBhbmQgcmVuZGVyaW5nIGNvZGUgdXNlcyBvciBpbnZhbGlkYXRlZCBzZWxl
Y3Rpb24gdGhhdCdzIGV4cG9zZWQgdG8gSmF2YVNjcmlwdC4KKworICAgICAgICAqIFdlYkNvcmUu
ZXhwLmluOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vzc2liaWxpdHlPYmpl
Y3RXcmFwcGVySU9TLm1tOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
ciBfY29udmVydFRvTlNSYW5nZTpdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVj
dFdyYXBwZXIgX2NvbnZlcnRUb0RPTVJhbmdlOl0pOgorICAgICAgICAqIGRvbS9FbGVtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnVwZGF0ZUZvY3VzQXBwZWFyYW5jZSk6Cisg
ICAgICAgICogZWRpdGluZy9FZGl0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpj
YW5FZGl0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Y2FuRWRpdFJpY2hseSk6CisgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3I6OmNhbkRIVE1MQ3V0KToKKyAgICAgICAgKFdlYkNvcmU6OkVk
aXRvcjo6Y2FuREhUTUxDb3B5KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Y2FuQ29weSk6
CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmNhbkRlbGV0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpFZGl0b3I6OnJlcGxhY2VTZWxlY3Rpb25XaXRoRnJhZ21lbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6RWRpdG9yOjp0cnlESFRNTENvcHkpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjp0cnlE
SFRNTEN1dCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmFwcGx5U3R5bGUpOgorICAgICAg
ICAoV2ViQ29yZTo6RWRpdG9yOjphcHBseVBhcmFncmFwaFN0eWxlKToKKyAgICAgICAgKFdlYkNv
cmU6OkVkaXRvcjo6Y3V0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Y29weSk6CisgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3I6OnBhc3RlKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6
c2V0Q29tcG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpndWVzc2VzRm9yTWlz
c3BlbGxlZE9yVW5ncmFtbWF0aWNhbCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Om1hcmtN
aXNzcGVsbGluZ3NBZnRlclR5cGluZ1RvV29yZCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6
OmlzU3BlbGxDaGVja2luZ0VuYWJsZWRJbkZvY3VzZWROb2RlKToKKyAgICAgICAgKFdlYkNvcmU6
OkVkaXRvcjo6bWFya0FuZFJlcGxhY2VGb3IpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpn
ZXRDb21wb3NpdGlvblNlbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnNlbGVj
dGlvblN0YXJ0SGFzTWFya2VyRm9yKToKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRvckNvbW1hbmQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6ZXhwYW5kU2VsZWN0aW9uVG9HcmFudWxhcml0eSk6Cisg
ICAgICAgIChXZWJDb3JlOjplbmFibGVkSW5SaWNobHlFZGl0YWJsZVRleHQpOgorICAgICAgICAo
V2ViQ29yZTo6ZW5hYmxlZFJhbmdlSW5FZGl0YWJsZVRleHQpOgorICAgICAgICAoV2ViQ29yZTo6
ZW5hYmxlZFJhbmdlSW5SaWNobHlFZGl0YWJsZVRleHQpOgorICAgICAgICAqIGVkaXRpbmcvRnJh
bWVTZWxlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnNldFNl
bGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDYXJldEJhc2U6OnVwZGF0ZUNhcmV0UmVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6cmVjb21wdXRlQ2FyZXRSZWN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpzZWxlY3RBbGwpOgorICAgICAgICAo
V2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnVwZGF0ZUFwcGVhcmFuY2UpOgorICAgICAgICAoV2Vi
Q29yZTo6RnJhbWVTZWxlY3Rpb246OnVwZGF0ZVNlbGVjdGlvbkNhY2hlc0lmU2VsZWN0aW9uSXNJ
bnNpZGVUZXh0Rm9ybUNvbnRyb2wpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246
OnNldEZvY3VzZWRFbGVtZW50SWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxl
Y3Rpb246OmN1cnJlbnRGb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpy
ZXZlYWxTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnNldFNl
bGVjdGlvbkZyb21Ob25lKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjp3b3Jk
U2VsZWN0aW9uQ29udGFpbmluZ0NhcmV0U2VsZWN0aW9uKToKKyAgICAgICAgKiBlZGl0aW5nL0Zy
YW1lU2VsZWN0aW9uLmg6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6aXNDYXJl
dE9yUmFuZ2UpOgorICAgICAgICAqIGVkaXRpbmcvUmVtb3ZlRm9ybWF0Q29tbWFuZC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW1vdmVGb3JtYXRDb21tYW5kOjpkb0FwcGx5KToKKyAgICAgICAg
KiBlZGl0aW5nL1Zpc2libGVTZWxlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6VmlzaWJs
ZVNlbGVjdGlvbjo6aXNJblBhc3N3b3JkRmllbGQpOgorICAgICAgICAqIGVkaXRpbmcvVmlzaWJs
ZVNlbGVjdGlvbi5oOgorICAgICAgICAqIGVkaXRpbmcvbWFjL0VkaXRvck1hYy5tbToKKyAgICAg
ICAgKFdlYkNvcmU6OkVkaXRvcjo6Y2FuQ29weUV4Y2x1ZGluZ1N0YW5kYWxvbmVJbWFnZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpyZWFkU2VsZWN0aW9uRnJvbVBhc3RlYm9hcmQpOgor
ICAgICAgICAqIGh0bWwvSFRNTEFuY2hvckVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTEFuY2hvckVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTEFuY2hvckVsZW1lbnQ6OnNldEFjdGl2ZSk6CisgICAgICAgICogaHRtbC9IVE1MVGV4
dEZvcm1Db250cm9sRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGV4dEZvcm1D
b250cm9sRWxlbWVudDo6Y29tcHV0ZVNlbGVjdGlvblN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50Ojpjb21wdXRlU2VsZWN0aW9uRW5kKToKKyAgICAg
ICAgKiBwYWdlL0NvbnRleHRNZW51Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
b250ZXh0TWVudUNvbnRyb2xsZXI6OmNvbnRleHRNZW51SXRlbVNlbGVjdGVkKToKKyAgICAgICAg
KFdlYkNvcmU6OkNvbnRleHRNZW51Q29udHJvbGxlcjo6cG9wdWxhdGUpOgorICAgICAgICAqIHBh
Z2UvRHJhZ0NvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0NvbnRyb2xsZXI6
OmRyYWdJc01vdmUpOgorICAgICAgICAoV2ViQ29yZTo6c2V0U2VsZWN0aW9uVG9EcmFnQ2FyZXQp
OgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0NvbnRyb2xsZXI6OmNvbmNsdWRlRWRpdERyYWcpOgor
ICAgICAgICAoV2ViQ29yZTo6RHJhZ0NvbnRyb2xsZXI6OnN0YXJ0RHJhZyk6CisgICAgICAgICog
cGFnZS9FdmVudEhhbmRsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bm9kZUlzTm90QmVpbmdF
ZGl0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpzZW5kQ29udGV4dE1lbnVF
dmVudCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnNlbmRDb250ZXh0TWVudUV2
ZW50Rm9yS2V5KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6aGFuZGxlRHJhZyk6
CisgICAgICAgICogcGFnZS9Gb2N1c0NvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Rm9jdXNDb250cm9sbGVyOjphZHZhbmNlRm9jdXNJbkRvY3VtZW50T3JkZXIpOgorICAgICAgICAo
V2ViQ29yZTo6Y2xlYXJTZWxlY3Rpb25JZk5lZWRlZCk6CisgICAgICAgICogcGFnZS9pb3MvRnJh
bWVJT1MubW06CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6Y2FyZXRSZWN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkZyYW1lOjpyZWN0Rm9yU2Nyb2xsVG9WaXNpYmxlKToKKyAgICAgICAgKFdlYkNv
cmU6OkZyYW1lOjpzdHlsZUF0U2VsZWN0aW9uU3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6RnJh
bWU6OnNldFJhbmdlZFNlbGVjdGlvbkJhc2VUb0N1cnJlbnRTZWxlY3Rpb25TdGFydCk6CisgICAg
ICAgIChXZWJDb3JlOjpGcmFtZTo6c2V0UmFuZ2VkU2VsZWN0aW9uQmFzZVRvQ3VycmVudFNlbGVj
dGlvbkVuZCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6c2V0UmFuZ2VkU2VsZWN0aW9uSW5p
dGlhbEV4dGVudFRvQ3VycmVudFNlbGVjdGlvblN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OkZy
YW1lOjpzZXRSYW5nZWRTZWxlY3Rpb25Jbml0aWFsRXh0ZW50VG9DdXJyZW50U2VsZWN0aW9uRW5k
KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjppbnRlcnByZXRhdGlvbnNGb3JDdXJyZW50Um9v
dCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckJsb2NrOjpwYWludENhcmV0KToKKwogMjAxNC0wMS0zMCAgU2ltb24gRnJhc2Vy
ICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBGaXggaU9TIGJ1aWxkIGFmdGVy
IHIxNjMxNTYuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgkocmV2aXNpb24gMTYzMTI4KQorKysg
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4JKHdvcmtpbmcgY29weSkKQEAgLTE1MzQsNyAr
MTUzNCw2IEBAIF9fWk5LN1dlYkNvcmUxNERvY3VtZW50TG9hZGVyOWlzTG9hZGluZ0UKIF9fWk5L
N1dlYkNvcmUxNERvY3VtZW50TWFya2VyMTFkZXNjcmlwdGlvbkV2CiBfX1pOSzdXZWJDb3JlMTRG
cmFtZVNlbGVjdGlvbjExY3VycmVudEZvcm1FdgogX19aTks3V2ViQ29yZTE0RnJhbWVTZWxlY3Rp
b24xNWNvcHlUeXBpbmdTdHlsZUV2Ci1fX1pOSzdXZWJDb3JlMTRGcmFtZVNlbGVjdGlvbjE3aXNJ
blBhc3N3b3JkRmllbGRFdgogX19aTks3V2ViQ29yZTE0RnJhbWVTZWxlY3Rpb24xOGlzRm9jdXNl
ZEFuZEFjdGl2ZUV2CiBfX1pOSzdXZWJDb3JlMTRGcmFtZVNlbGVjdGlvbjMxZ2V0Q2xpcHBlZFZp
c2libGVUZXh0UmVjdGFuZ2xlc0VSTjNXVEY2VmVjdG9ySU5TXzlGbG9hdFJlY3RFTG0wRU5TMV8x
NUNyYXNoT25PdmVyZmxvd0VFRQogX19aTks3V2ViQ29yZTE0RnJhbWVTZWxlY3Rpb24zNnJvb3RF
ZGl0YWJsZUVsZW1lbnRPckRvY3VtZW50RWxlbWVudEV2CkBAIC0xNjEzLDYgKzE2MTIsNyBAQCBf
X1pOSzdXZWJDb3JlMTZJY29uRGF0YWJhc2VCYXNlMTJkYXRhYmFzCiBfX1pOSzdXZWJDb3JlMTZS
ZXNvdXJjZVJlc3BvbnNlMTNuc1VSTFJlc3BvbnNlRXYKIF9fWk5LN1dlYkNvcmUxNlJlc291cmNl
UmVzcG9uc2UxNmNlcnRpZmljYXRlQ2hhaW5FdgogX19aTks3V2ViQ29yZTE2VmlzaWJsZVNlbGVj
dGlvbjE3aXNDb250ZW50RWRpdGFibGVFdgorX19aTks3V2ViQ29yZTE2VmlzaWJsZVNlbGVjdGlv
bjE3aXNJblBhc3N3b3JkRmllbGRFdgogX19aTks3V2ViQ29yZTE2VmlzaWJsZVNlbGVjdGlvbjE3
dG9Ob3JtYWxpemVkUmFuZ2VFdgogX19aTks3V2ViQ29yZTE2VmlzaWJsZVNlbGVjdGlvbjE5cm9v
dEVkaXRhYmxlRWxlbWVudEV2CiBfX1pOSzdXZWJDb3JlMTZWaXNpYmxlU2VsZWN0aW9uMjNpc0Nv
bnRlbnRSaWNobHlFZGl0YWJsZUV2CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcklPUy5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3Jh
cHBlcklPUy5tbQkocmV2aXNpb24gMTYzMTI4KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJT1MubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTE2NDEsOSArMTY0MSw3IEBAIC0gKE5TUmFuZ2UpX2NvbnZlcnRUb05TUmFuZ2U6KFJh
bmdlICopcmEKICAgICAgICAgcmV0dXJuIE5TTWFrZVJhbmdlKE5TTm90Rm91bmQsIDApOwogICAg
IAogICAgIERvY3VtZW50KiBkb2N1bWVudCA9IG1fb2JqZWN0LT5kb2N1bWVudCgpOwotICAgIEZy
YW1lU2VsZWN0aW9uJiBmcmFtZVNlbGVjdGlvbiA9IGRvY3VtZW50LT5mcmFtZSgpLT5zZWxlY3Rp
b24oKTsKLSAgICAKLSAgICBFbGVtZW50KiBzZWxlY3Rpb25Sb290ID0gZnJhbWVTZWxlY3Rpb24u
cm9vdEVkaXRhYmxlRWxlbWVudCgpOworICAgIEVsZW1lbnQqIHNlbGVjdGlvblJvb3QgPSBkb2N1
bWVudC0+ZnJhbWUoKS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkucm9vdEVkaXRhYmxlRWxlbWVu
dCgpOwogICAgIEVsZW1lbnQqIHNjb3BlID0gc2VsZWN0aW9uUm9vdCA/IHNlbGVjdGlvblJvb3Qg
OiBkb2N1bWVudC0+ZG9jdW1lbnRFbGVtZW50KCk7CiAgICAgCiAgICAgLy8gTW91c2UgZXZlbnRz
IG1heSBjYXVzZSBUU00gdG8gYXR0ZW1wdCB0byBjcmVhdGUgYW4gTlNSYW5nZSBmb3IgYSBwb3J0
aW9uIG9mIHRoZSB2aWV3CkBAIC0xNjc5LDggKzE2NzcsNyBAQCAtIChQYXNzUmVmUHRyPFJhbmdl
PilfY29udmVydFRvRE9NUmFuZ2U6CiAgICAgLy8gdG8gdXNlIHRoZSByb290IGVkaXRhYmxlIGVs
ZW1lbnQgb2YgdGhlIHNlbGVjdGlvbiBzdGFydCBhcyB0aGUgcG9zaXRpb25hbCBiYXNlLgogICAg
IC8vIFRoYXQgZml0cyB3aXRoIEFwcEtpdCdzIGlkZWEgb2YgYW4gaW5wdXQgY29udGV4dC4KICAg
ICBEb2N1bWVudCogZG9jdW1lbnQgPSBtX29iamVjdC0+ZG9jdW1lbnQoKTsKLSAgICBGcmFtZVNl
bGVjdGlvbiYgZnJhbWVTZWxlY3Rpb24gPSBkb2N1bWVudC0+ZnJhbWUoKS0+c2VsZWN0aW9uKCk7
Ci0gICAgRWxlbWVudCogc2VsZWN0aW9uUm9vdCA9IGZyYW1lU2VsZWN0aW9uLnJvb3RFZGl0YWJs
ZUVsZW1lbnQoKTsKKyAgICBFbGVtZW50KiBzZWxlY3Rpb25Sb290ID0gZG9jdW1lbnQtPmZyYW1l
KCktPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsKICAgICBF
bGVtZW50KiBzY29wZSA9IHNlbGVjdGlvblJvb3QgPyBzZWxlY3Rpb25Sb290IDogZG9jdW1lbnQt
PmRvY3VtZW50RWxlbWVudCgpOwogICAgIHJldHVybiBUZXh0SXRlcmF0b3I6OnJhbmdlRnJvbUxv
Y2F0aW9uQW5kTGVuZ3RoKHNjb3BlLCBuc3JhbmdlLmxvY2F0aW9uLCBuc3JhbmdlLmxlbmd0aCk7
CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCShyZXZpc2lvbiAxNjMxMjgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMDcsNyArMjAw
Nyw3IEBAIHZvaWQgRWxlbWVudDo6dXBkYXRlRm9jdXNBcHBlYXJhbmNlKGJvb2wKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgCiAgICAgICAgIC8vIFdoZW4gZm9jdXNpbmcgYW4gZWRpdGFi
bGUgZWxlbWVudCBpbiBhbiBpZnJhbWUsIGRvbid0IHJlc2V0IHRoZSBzZWxlY3Rpb24gaWYgaXQg
YWxyZWFkeSBjb250YWlucyBhIHNlbGVjdGlvbi4KLSAgICAgICAgaWYgKHRoaXMgPT0gZnJhbWUt
PnNlbGVjdGlvbigpLnJvb3RFZGl0YWJsZUVsZW1lbnQoKSkKKyAgICAgICAgaWYgKHRoaXMgPT0g
ZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnJvb3RFZGl0YWJsZUVsZW1lbnQoKSkKICAg
ICAgICAgICAgIHJldHVybjsKIAogICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHJlc3RvcmUg
dGhlIHByZXZpb3VzIHNlbGVjdGlvbiBpZiB0aGVyZSBpcyBvbmUuCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0VkaXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRp
dGluZy9FZGl0b3IuY3BwCShyZXZpc2lvbiAxNjMxMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0VkaXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4NiwxMiArMjg2LDEyIEBAIGJvb2wg
RWRpdG9yOjpoYW5kbGVUZXh0RXZlbnQoVGV4dEV2ZW50KiAKIAogYm9vbCBFZGl0b3I6OmNhbkVk
aXQoKSBjb25zdAogewotICAgIHJldHVybiBtX2ZyYW1lLnNlbGVjdGlvbigpLnJvb3RFZGl0YWJs
ZUVsZW1lbnQoKTsKKyAgICByZXR1cm4gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5y
b290RWRpdGFibGVFbGVtZW50KCk7CiB9CiAKIGJvb2wgRWRpdG9yOjpjYW5FZGl0UmljaGx5KCkg
Y29uc3QKIHsKLSAgICByZXR1cm4gbV9mcmFtZS5zZWxlY3Rpb24oKS5pc0NvbnRlbnRSaWNobHlF
ZGl0YWJsZSgpOworICAgIHJldHVybiBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlz
Q29udGVudFJpY2hseUVkaXRhYmxlKCk7CiB9CiAKIC8vIFdpbklFIHVzZXMgb25iZWZvcmVjdXQg
YW5kIG9uYmVmb3JlcGFzdGUgdG8gZW5hYmxlcyB0aGUgY3V0IGFuZCBwYXN0ZSBtZW51IGl0ZW1z
LiAgVGhleQpAQCAtMzAxLDEyICszMDEsMTIgQEAgYm9vbCBFZGl0b3I6OmNhbkVkaXRSaWNobHko
KSBjb25zdAogCiBib29sIEVkaXRvcjo6Y2FuREhUTUxDdXQoKQogewotICAgIHJldHVybiAhbV9m
cmFtZS5zZWxlY3Rpb24oKS5pc0luUGFzc3dvcmRGaWVsZCgpICYmICFkaXNwYXRjaENQUEV2ZW50
KGV2ZW50TmFtZXMoKS5iZWZvcmVjdXRFdmVudCwgQ2xpcGJvYXJkTnVtYik7CisgICAgcmV0dXJu
ICFtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlzSW5QYXNzd29yZEZpZWxkKCkgJiYg
IWRpc3BhdGNoQ1BQRXZlbnQoZXZlbnROYW1lcygpLmJlZm9yZWN1dEV2ZW50LCBDbGlwYm9hcmRO
dW1iKTsKIH0KIAogYm9vbCBFZGl0b3I6OmNhbkRIVE1MQ29weSgpCiB7Ci0gICAgcmV0dXJuICFt
X2ZyYW1lLnNlbGVjdGlvbigpLmlzSW5QYXNzd29yZEZpZWxkKCkgJiYgIWRpc3BhdGNoQ1BQRXZl
bnQoZXZlbnROYW1lcygpLmJlZm9yZWNvcHlFdmVudCwgQ2xpcGJvYXJkTnVtYik7CisgICAgcmV0
dXJuICFtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlzSW5QYXNzd29yZEZpZWxkKCkg
JiYgIWRpc3BhdGNoQ1BQRXZlbnQoZXZlbnROYW1lcygpLmJlZm9yZWNvcHlFdmVudCwgQ2xpcGJv
YXJkTnVtYik7CiB9CiAKIGJvb2wgRWRpdG9yOjpjYW5ESFRNTFBhc3RlKCkKQEAgLTM0MCw3ICsz
NDAsNyBAQCBib29sIEVkaXRvcjo6Y2FuQ29weSgpIGNvbnN0CiB7CiAgICAgaWYgKGltYWdlRWxl
bWVudEZyb21JbWFnZURvY3VtZW50KGRvY3VtZW50KCkpKQogICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICBGcmFtZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0gbV9mcmFtZS5zZWxlY3Rpb24oKTsKKyAg
ICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBtX2ZyYW1lLnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpOwogICAgIHJldHVybiBzZWxlY3Rpb24uaXNSYW5nZSgpICYmICFzZWxlY3Rp
b24uaXNJblBhc3N3b3JkRmllbGQoKTsKIH0KIApAQCAtMzUxLDcgKzM1MSw3IEBAIGJvb2wgRWRp
dG9yOjpjYW5QYXN0ZSgpIGNvbnN0CiAKIGJvb2wgRWRpdG9yOjpjYW5EZWxldGUoKSBjb25zdAog
ewotICAgIEZyYW1lU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBtX2ZyYW1lLnNlbGVjdGlvbigpOwor
ICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCk7CiAgICAgcmV0dXJuIHNlbGVjdGlvbi5pc1JhbmdlKCkgJiYgc2VsZWN0
aW9uLnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsKIH0KIApAQCAtNTk4LDcgKzU5OCw4IEBAIGJvb2wg
RWRpdG9yOjpzaG91bGRJbnNlcnRGcmFnbWVudChQYXNzUmUKIAogdm9pZCBFZGl0b3I6OnJlcGxh
Y2VTZWxlY3Rpb25XaXRoRnJhZ21lbnQoUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFn
bWVudCwgYm9vbCBzZWxlY3RSZXBsYWNlbWVudCwgYm9vbCBzbWFydFJlcGxhY2UsIGJvb2wgbWF0
Y2hTdHlsZSkKIHsKLSAgICBpZiAobV9mcmFtZS5zZWxlY3Rpb24oKS5pc05vbmUoKSB8fCAhbV9m
cmFtZS5zZWxlY3Rpb24oKS5pc0NvbnRlbnRFZGl0YWJsZSgpIHx8ICFmcmFnbWVudCkKKyAgICBW
aXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9u
KCk7CisgICAgaWYgKHNlbGVjdGlvbi5pc05vbmUoKSB8fCAhc2VsZWN0aW9uLmlzQ29udGVudEVk
aXRhYmxlKCkgfHwgIWZyYWdtZW50KQogICAgICAgICByZXR1cm47CiAKICAgICBSZXBsYWNlU2Vs
ZWN0aW9uQ29tbWFuZDo6Q29tbWFuZE9wdGlvbnMgb3B0aW9ucyA9IFJlcGxhY2VTZWxlY3Rpb25D
b21tYW5kOjpQcmV2ZW50TmVzdGluZyB8IFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpTYW5pdGl6
ZUZyYWdtZW50OwpAQCAtNjExLDkgKzYxMiwxMCBAQCB2b2lkIEVkaXRvcjo6cmVwbGFjZVNlbGVj
dGlvbldpdGhGcmFnbWVuCiAgICAgYXBwbHlDb21tYW5kKFJlcGxhY2VTZWxlY3Rpb25Db21tYW5k
OjpjcmVhdGUoZG9jdW1lbnQoKSwgZnJhZ21lbnQsIG9wdGlvbnMsIEVkaXRBY3Rpb25QYXN0ZSkp
OwogICAgIHJldmVhbFNlbGVjdGlvbkFmdGVyRWRpdGluZ09wZXJhdGlvbigpOwogCi0gICAgaWYg
KG1fZnJhbWUuc2VsZWN0aW9uKCkuaXNJblBhc3N3b3JkRmllbGQoKSB8fCAhaXNDb250aW51b3Vz
U3BlbGxDaGVja2luZ0VuYWJsZWQoKSkKKyAgICBzZWxlY3Rpb24gPSBtX2ZyYW1lLnNlbGVjdGlv
bigpLnNlbGVjdGlvbigpOworICAgIGlmIChzZWxlY3Rpb24uaXNJblBhc3N3b3JkRmllbGQoKSB8
fCAhaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwot
ICAgIE5vZGUqIG5vZGVUb0NoZWNrID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5yb290RWRpdGFibGVF
bGVtZW50KCk7CisgICAgTm9kZSogbm9kZVRvQ2hlY2sgPSBzZWxlY3Rpb24ucm9vdEVkaXRhYmxl
RWxlbWVudCgpOwogICAgIGlmICghbm9kZVRvQ2hlY2spCiAgICAgICAgIHJldHVybjsKIApAQCAt
NzI4LDcgKzczMCw3IEBAIGJvb2wgRWRpdG9yOjpzaG91bGREZWxldGVSYW5nZShSYW5nZSogcmEK
IAogYm9vbCBFZGl0b3I6OnRyeURIVE1MQ29weSgpCiB7ICAgCi0gICAgaWYgKG1fZnJhbWUuc2Vs
ZWN0aW9uKCkuaXNJblBhc3N3b3JkRmllbGQoKSkKKyAgICBpZiAobV9mcmFtZS5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKS5pc0luUGFzc3dvcmRGaWVsZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKICAgICByZXR1cm4gIWRpc3BhdGNoQ1BQRXZlbnQoZXZlbnROYW1lcygpLmNvcHlFdmVudCwg
Q2xpcGJvYXJkV3JpdGFibGUpOwpAQCAtNzM2LDcgKzczOCw3IEBAIGJvb2wgRWRpdG9yOjp0cnlE
SFRNTENvcHkoKQogCiBib29sIEVkaXRvcjo6dHJ5REhUTUxDdXQoKQogewotICAgIGlmIChtX2Zy
YW1lLnNlbGVjdGlvbigpLmlzSW5QYXNzd29yZEZpZWxkKCkpCisgICAgaWYgKG1fZnJhbWUuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNJblBhc3N3b3JkRmllbGQoKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIAogICAgIHJldHVybiAhZGlzcGF0Y2hDUFBFdmVudChldmVudE5hbWVzKCku
Y3V0RXZlbnQsIENsaXBib2FyZFdyaXRhYmxlKTsKQEAgLTk3MCw3ICs5NzIsNyBAQCBOb2RlKiBF
ZGl0b3I6OmZpbmRFdmVudFRhcmdldEZyb21TZWxlY3RpCiAKIHZvaWQgRWRpdG9yOjphcHBseVN0
eWxlKFN0eWxlUHJvcGVydGllcyogc3R5bGUsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlvbikKIHsK
LSAgICBzd2l0Y2ggKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uVHlwZSgpKSB7CisgICAg
c3dpdGNoIChtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnNlbGVjdGlvblR5cGUoKSkg
ewogICAgIGNhc2UgVmlzaWJsZVNlbGVjdGlvbjo6Tm9TZWxlY3Rpb246CiAgICAgICAgIC8vIGRv
IG5vdGhpbmcKICAgICAgICAgYnJlYWs7CkBAIC05OTEsNyArOTkzLDcgQEAgYm9vbCBFZGl0b3I6
OnNob3VsZEFwcGx5U3R5bGUoU3R5bGVQcm9wZQogICAgIAogdm9pZCBFZGl0b3I6OmFwcGx5UGFy
YWdyYXBoU3R5bGUoU3R5bGVQcm9wZXJ0aWVzKiBzdHlsZSwgRWRpdEFjdGlvbiBlZGl0aW5nQWN0
aW9uKQogewotICAgIHN3aXRjaCAobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb25UeXBlKCkp
IHsKKyAgICBzd2l0Y2ggKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9u
VHlwZSgpKSB7CiAgICAgY2FzZSBWaXNpYmxlU2VsZWN0aW9uOjpOb1NlbGVjdGlvbjoKICAgICAg
ICAgLy8gZG8gbm90aGluZwogICAgICAgICBicmVhazsKQEAgLTEyODAsNyArMTI4Miw3IEBAIHZv
aWQgRWRpdG9yOjpjdXQoKQogICAgIHdpbGxXcml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZChzZWxl
Y3Rpb24pOwogICAgIGlmIChzaG91bGREZWxldGVSYW5nZShzZWxlY3Rpb24uZ2V0KCkpKSB7CiAg
ICAgICAgIHVwZGF0ZU1hcmtlcnNGb3JXb3Jkc0FmZmVjdGVkQnlFZGl0aW5nKHRydWUpOwotICAg
ICAgICBpZiAoZW5jbG9zaW5nVGV4dEZvcm1Db250cm9sKG1fZnJhbWUuc2VsZWN0aW9uKCkuc3Rh
cnQoKSkpCisgICAgICAgIGlmIChlbmNsb3NpbmdUZXh0Rm9ybUNvbnRyb2wobV9mcmFtZS5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpKSkKICAgICAgICAgICAgIFBhc3RlYm9hcmQ6OmNy
ZWF0ZUZvckNvcHlBbmRQYXN0ZSgpLT53cml0ZVBsYWluVGV4dChzZWxlY3RlZFRleHRGb3JDbGlw
Ym9hcmQoKSwgY2FuU21hcnRDb3B5T3JEZWxldGUoKSA/IFBhc3RlYm9hcmQ6OkNhblNtYXJ0UmVw
bGFjZSA6IFBhc3RlYm9hcmQ6OkNhbm5vdFNtYXJ0UmVwbGFjZSk7CiAgICAgICAgIGVsc2Ugewog
I2lmIFBMQVRGT1JNKE1BQykgfHwgUExBVEZPUk0oRUZMKQpAQCAtMTMwNSw3ICsxMzA3LDcgQEAg
dm9pZCBFZGl0b3I6OmNvcHkoKQogICAgIH0KIAogICAgIHdpbGxXcml0ZVNlbGVjdGlvblRvUGFz
dGVib2FyZChzZWxlY3RlZFJhbmdlKCkpOwotICAgIGlmIChlbmNsb3NpbmdUZXh0Rm9ybUNvbnRy
b2wobV9mcmFtZS5zZWxlY3Rpb24oKS5zdGFydCgpKSkgeworICAgIGlmIChlbmNsb3NpbmdUZXh0
Rm9ybUNvbnRyb2wobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpKSkgewog
ICAgICAgICBQYXN0ZWJvYXJkOjpjcmVhdGVGb3JDb3B5QW5kUGFzdGUoKS0+d3JpdGVQbGFpblRl
eHQoc2VsZWN0ZWRUZXh0Rm9yQ2xpcGJvYXJkKCksCiAgICAgICAgICAgICBjYW5TbWFydENvcHlP
ckRlbGV0ZSgpID8gUGFzdGVib2FyZDo6Q2FuU21hcnRSZXBsYWNlIDogUGFzdGVib2FyZDo6Q2Fu
bm90U21hcnRSZXBsYWNlKTsKICAgICB9IGVsc2UgewpAQCAtMTM0Miw3ICsxMzQ0LDcgQEAgdm9p
ZCBFZGl0b3I6OnBhc3RlKFBhc3RlYm9hcmQmIHBhc3RlYm9hcgogICAgIHVwZGF0ZU1hcmtlcnNG
b3JXb3Jkc0FmZmVjdGVkQnlFZGl0aW5nKGZhbHNlKTsKICAgICBDYWNoZWRSZXNvdXJjZUxvYWRl
ciogbG9hZGVyID0gZG9jdW1lbnQoKS5jYWNoZWRSZXNvdXJjZUxvYWRlcigpOwogICAgIFJlc291
cmNlQ2FjaGVWYWxpZGF0aW9uU3VwcHJlc3NvciB2YWxpZGF0aW9uU3VwcHJlc3Nvcihsb2FkZXIp
OwotICAgIGlmIChtX2ZyYW1lLnNlbGVjdGlvbigpLmlzQ29udGVudFJpY2hseUVkaXRhYmxlKCkp
CisgICAgaWYgKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNDb250ZW50UmljaGx5
RWRpdGFibGUoKSkKICAgICAgICAgcGFzdGVXaXRoUGFzdGVib2FyZCgmcGFzdGVib2FyZCwgdHJ1
ZSk7CiAgICAgZWxzZQogICAgICAgICBwYXN0ZUFzUGxhaW5UZXh0V2l0aFBhc3RlYm9hcmQocGFz
dGVib2FyZCk7CkBAIC0xODQyLDggKzE4NDQsOCBAQCB2b2lkIEVkaXRvcjo6c2V0Q29tcG9zaXRp
b24oY29uc3QgU3RyaW5nCiAgICAgICAgIFR5cGluZ0NvbW1hbmQ6Omluc2VydFRleHQoZG9jdW1l
bnQoKSwgdGV4dCwgVHlwaW5nQ29tbWFuZDo6U2VsZWN0SW5zZXJ0ZWRUZXh0IHwgVHlwaW5nQ29t
bWFuZDo6UHJldmVudFNwZWxsQ2hlY2tpbmcsIFR5cGluZ0NvbW1hbmQ6OlRleHRDb21wb3NpdGlv
blVwZGF0ZSk7CiAKICAgICAgICAgLy8gRmluZCBvdXQgd2hhdCBub2RlIGhhcyB0aGUgY29tcG9z
aXRpb24gbm93LgotICAgICAgICBQb3NpdGlvbiBiYXNlID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5i
YXNlKCkuZG93bnN0cmVhbSgpOwotICAgICAgICBQb3NpdGlvbiBleHRlbnQgPSBtX2ZyYW1lLnNl
bGVjdGlvbigpLmV4dGVudCgpOworICAgICAgICBQb3NpdGlvbiBiYXNlID0gbV9mcmFtZS5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKS5iYXNlKCkuZG93bnN0cmVhbSgpOworICAgICAgICBQb3NpdGlv
biBleHRlbnQgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmV4dGVudCgpOwogICAg
ICAgICBOb2RlKiBiYXNlTm9kZSA9IGJhc2UuZGVwcmVjYXRlZE5vZGUoKTsKICAgICAgICAgdW5z
aWduZWQgYmFzZU9mZnNldCA9IGJhc2UuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKTsKICAgICAg
ICAgTm9kZSogZXh0ZW50Tm9kZSA9IGV4dGVudC5kZXByZWNhdGVkTm9kZSgpOwpAQCAtMjE2MSwx
MyArMjE2MywxMyBAQCBWZWN0b3I8U3RyaW5nPiBFZGl0b3I6Omd1ZXNzZXNGb3JNaXNzcGVsCiB7
CiAgICAgaWYgKHVuaWZpZWRUZXh0Q2hlY2tlckVuYWJsZWQoKSkgewogICAgICAgICBSZWZQdHI8
UmFuZ2U+IHJhbmdlOwotICAgICAgICBGcmFtZVNlbGVjdGlvbiYgZnJhbWVTZWxlY3Rpb24gPSBt
X2ZyYW1lLnNlbGVjdGlvbigpOwotICAgICAgICBpZiAoZnJhbWVTZWxlY3Rpb24uaXNDYXJldCgp
ICYmIGJlaGF2aW9yKCkuc2hvdWxkQWxsb3dTcGVsbGluZ1N1Z2dlc3Rpb25zV2l0aG91dFNlbGVj
dGlvbigpKSB7Ci0gICAgICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIHdvcmRTZWxlY3Rpb24gPSBW
aXNpYmxlU2VsZWN0aW9uKGZyYW1lU2VsZWN0aW9uLmJhc2UoKSk7CisgICAgICAgIFZpc2libGVT
ZWxlY3Rpb24gc2VsZWN0aW9uID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAg
ICAgICAgaWYgKHNlbGVjdGlvbi5pc0NhcmV0KCkgJiYgYmVoYXZpb3IoKS5zaG91bGRBbGxvd1Nw
ZWxsaW5nU3VnZ2VzdGlvbnNXaXRob3V0U2VsZWN0aW9uKCkpIHsKKyAgICAgICAgICAgIFZpc2li
bGVTZWxlY3Rpb24gd29yZFNlbGVjdGlvbiA9IFZpc2libGVTZWxlY3Rpb24oc2VsZWN0aW9uLmJh
c2UoKSk7CiAgICAgICAgICAgICB3b3JkU2VsZWN0aW9uLmV4cGFuZFVzaW5nR3JhbnVsYXJpdHko
V29yZEdyYW51bGFyaXR5KTsKICAgICAgICAgICAgIHJhbmdlID0gd29yZFNlbGVjdGlvbi50b05v
cm1hbGl6ZWRSYW5nZSgpOwogICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHJhbmdlID0gZnJh
bWVTZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICAgICAgICAgIHJhbmdlID0gc2Vs
ZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7CiAgICAgICAgIGlmICghcmFuZ2UpCiAgICAgICAg
ICAgICByZXR1cm4gVmVjdG9yPFN0cmluZz4oKTsKICAgICAgICAgcmV0dXJuIFRleHRDaGVja2lu
Z0hlbHBlcihjbGllbnQoKSwgcmFuZ2UpLmd1ZXNzZXNGb3JNaXNzcGVsbGVkT3JVbmdyYW1tYXRp
Y2FsUmFuZ2UoaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKCksIG1pc3NwZWxsZWQsIHVuZ3JhbW1h
dGljYWwpOwpAQCAtMjMwMSw3ICsyMzAzLDcgQEAgdm9pZCBFZGl0b3I6Om1hcmtNaXNzcGVsbGlu
Z3NBZnRlclR5cGluZwogICAgICAgICBtX2ZyYW1lLmVkaXRvcigpLnJlcGxhY2VTZWxlY3Rpb25X
aXRoVGV4dChhdXRvY29ycmVjdGVkU3RyaW5nLCBmYWxzZSwgZmFsc2UpOwogCiAgICAgICAgIC8v
IFJlc2V0IHRoZSBjaGFyZXQgb25lIGNoYXJhY3RlciBmdXJ0aGVyLgotICAgICAgICBtX2ZyYW1l
LnNlbGVjdGlvbigpLm1vdmVUbyhtX2ZyYW1lLnNlbGVjdGlvbigpLmVuZCgpKTsKKyAgICAgICAg
bV9mcmFtZS5zZWxlY3Rpb24oKS5tb3ZlVG8obV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24o
KS5lbmQoKSk7CiAgICAgICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkubW9kaWZ5KEZyYW1lU2VsZWN0
aW9uOjpBbHRlcmF0aW9uTW92ZSwgRGlyZWN0aW9uRm9yd2FyZCwgQ2hhcmFjdGVyR3JhbnVsYXJp
dHkpOwogICAgIH0KIApAQCAtMjM3MCw3ICsyMzcyLDcgQEAgYm9vbCBFZGl0b3I6OmlzU3BlbGxD
aGVja2luZ0VuYWJsZWRGb3IoTgogCiBib29sIEVkaXRvcjo6aXNTcGVsbENoZWNraW5nRW5hYmxl
ZEluRm9jdXNlZE5vZGUoKSBjb25zdAogewotICAgIHJldHVybiBpc1NwZWxsQ2hlY2tpbmdFbmFi
bGVkRm9yKG1fZnJhbWUuc2VsZWN0aW9uKCkuc3RhcnQoKS5kZXByZWNhdGVkTm9kZSgpKTsKKyAg
ICByZXR1cm4gaXNTcGVsbENoZWNraW5nRW5hYmxlZEZvcihtX2ZyYW1lLnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpLnN0YXJ0KCkuZGVwcmVjYXRlZE5vZGUoKSk7CiB9CiAKIHZvaWQgRWRpdG9yOjpt
YXJrTWlzc3BlbGxpbmdzKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiwgUmVmUHRy
PFJhbmdlPiYgZmlyc3RNaXNzcGVsbGluZ1JhbmdlKQpAQCAtMjQ5NCw5ICsyNDk2LDkgQEAgdm9p
ZCBFZGl0b3I6Om1hcmtBbmRSZXBsYWNlRm9yKFBhc3NSZWZQdAogICAgIGJvb2wgYWRqdXN0U2Vs
ZWN0aW9uRm9yUGFyYWdyYXBoQm91bmRhcmllcyA9IGZhbHNlOwogCiAgICAgaWYgKHNob3VsZFBl
cmZvcm1SZXBsYWNlbWVudCB8fCBzaG91bGRNYXJrU3BlbGxpbmcgfHwgc2hvdWxkQ2hlY2tGb3JD
b3JyZWN0aW9uKSB7Ci0gICAgICAgIGlmIChtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvblR5
cGUoKSA9PSBWaXNpYmxlU2VsZWN0aW9uOjpDYXJldFNlbGVjdGlvbikgeworICAgICAgICBpZiAo
bV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb25UeXBlKCkgPT0gVmlzaWJs
ZVNlbGVjdGlvbjo6Q2FyZXRTZWxlY3Rpb24pIHsKICAgICAgICAgICAgIC8vIEF0dGVtcHQgdG8g
c2F2ZSB0aGUgY2FyZXQgcG9zaXRpb24gc28gd2UgY2FuIHJlc3RvcmUgaXQgbGF0ZXIgaWYgbmVl
ZGVkCi0gICAgICAgICAgICBQb3NpdGlvbiBjYXJldFBvc2l0aW9uID0gbV9mcmFtZS5zZWxlY3Rp
b24oKS5lbmQoKTsKKyAgICAgICAgICAgIFBvc2l0aW9uIGNhcmV0UG9zaXRpb24gPSBtX2ZyYW1l
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmVuZCgpOwogICAgICAgICAgICAgc2VsZWN0aW9uT2Zm
c2V0ID0gcGFyYWdyYXBoLm9mZnNldFRvKGNhcmV0UG9zaXRpb24sIEFTU0VSVF9OT19FWENFUFRJ
T04pOwogICAgICAgICAgICAgcmVzdG9yZVNlbGVjdGlvbkFmdGVyQ2hhbmdlID0gdHJ1ZTsKICAg
ICAgICAgICAgIGlmIChzZWxlY3Rpb25PZmZzZXQgPiAwICYmIChzZWxlY3Rpb25PZmZzZXQgPiBw
YXJhZ3JhcGgudGV4dExlbmd0aCgpIHx8IHBhcmFncmFwaC50ZXh0Q2hhckF0KHNlbGVjdGlvbk9m
ZnNldCAtIDEpID09IG5ld2xpbmVDaGFyYWN0ZXIpKQpAQCAtMjYyNSw3ICsyNjI3LDcgQEAgdm9p
ZCBFZGl0b3I6Om1hcmtBbmRSZXBsYWNlRm9yKFBhc3NSZWZQdAogICAgICAgICAgICAgICAgIG1f
ZnJhbWUuc2VsZWN0aW9uKCkubW9kaWZ5KEZyYW1lU2VsZWN0aW9uOjpBbHRlcmF0aW9uTW92ZSwg
RGlyZWN0aW9uRm9yd2FyZCwgQ2hhcmFjdGVyR3JhbnVsYXJpdHkpOwogICAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgICAgLy8gSWYgdGhpcyBmYWlscyBmb3IgYW55IHJlYXNvbiwgdGhlIGZhbGxi
YWNrIGlzIHRvIGdvIG9uZSBwb3NpdGlvbiBiZXlvbmQgdGhlIGxhc3QgcmVwbGFjZW1lbnQKLSAg
ICAgICAgICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkubW92ZVRvKG1fZnJhbWUuc2VsZWN0aW9uKCku
ZW5kKCkpOworICAgICAgICAgICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5tb3ZlVG8obV9mcmFtZS5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5lbmQoKSk7CiAgICAgICAgICAgICBtX2ZyYW1lLnNlbGVj
dGlvbigpLm1vZGlmeShGcmFtZVNlbGVjdGlvbjo6QWx0ZXJhdGlvbk1vdmUsIERpcmVjdGlvbkZv
cndhcmQsIENoYXJhY3RlckdyYW51bGFyaXR5KTsKICAgICAgICAgfQogICAgIH0KQEAgLTI4MjIs
MTAgKzI4MjQsMTEgQEAgYm9vbCBFZGl0b3I6OmdldENvbXBvc2l0aW9uU2VsZWN0aW9uKHVucwog
ewogICAgIGlmICghbV9jb21wb3NpdGlvbk5vZGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICBQb3NpdGlvbiBzdGFydCA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc3RhcnQoKTsKKyAgICBjb25z
dCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpOworICAgIFBvc2l0aW9uIHN0YXJ0ID0gc2VsZWN0aW9uLnN0YXJ0KCk7CiAgICAgaWYg
KHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCkgIT0gbV9jb21wb3NpdGlvbk5vZGUpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICBQb3NpdGlvbiBlbmQgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLmVuZCgp
OworICAgIFBvc2l0aW9uIGVuZCA9IHNlbGVjdGlvbi5lbmQoKTsKICAgICBpZiAoZW5kLmRlcHJl
Y2F0ZWROb2RlKCkgIT0gbV9jb21wb3NpdGlvbk5vZGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IApAQCAtMzM4Miw3ICszMzg1LDcgQEAgc3RhdGljIE5vZGUqIGZpbmRGaXJzdE1hcmthYmxlKE5v
ZGUqIG5vZAogCiBib29sIEVkaXRvcjo6c2VsZWN0aW9uU3RhcnRIYXNNYXJrZXJGb3IoRG9jdW1l
bnRNYXJrZXI6Ok1hcmtlclR5cGUgbWFya2VyVHlwZSwgaW50IGZyb20sIGludCBsZW5ndGgpIGNv
bnN0CiB7Ci0gICAgTm9kZSogbm9kZSA9IGZpbmRGaXJzdE1hcmthYmxlKG1fZnJhbWUuc2VsZWN0
aW9uKCkuc3RhcnQoKS5kZXByZWNhdGVkTm9kZSgpKTsKKyAgICBOb2RlKiBub2RlID0gZmluZEZp
cnN0TWFya2FibGUobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpLmRlcHJl
Y2F0ZWROb2RlKCkpOwogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAJKHJldmlzaW9uIDE2
MzEyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIxNSw4ICsyMTUsOCBAQCBzdGF0aWMgYm9vbCBleHBhbmRTZWxlY3Rpb25U
b0dyYW51bGFyaXR5CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAobmV3UmFuZ2UtPmNv
bGxhcHNlZChJR05PUkVfRVhDRVBUSU9OKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIFJl
ZlB0cjxSYW5nZT4gb2xkUmFuZ2UgPSBmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05v
cm1hbGl6ZWRSYW5nZSgpOwotICAgIEVBZmZpbml0eSBhZmZpbml0eSA9IGZyYW1lLnNlbGVjdGlv
bigpLmFmZmluaXR5KCk7CisgICAgUmVmUHRyPFJhbmdlPiBvbGRSYW5nZSA9IHNlbGVjdGlvbi50
b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIEVBZmZpbml0eSBhZmZpbml0eSA9IHNlbGVjdGlvbi5h
ZmZpbml0eSgpOwogICAgIGlmICghZnJhbWUuZWRpdG9yKCkuY2xpZW50KCktPnNob3VsZENoYW5n
ZVNlbGVjdGVkUmFuZ2Uob2xkUmFuZ2UuZ2V0KCksIG5ld1JhbmdlLmdldCgpLCBhZmZpbml0eSwg
ZmFsc2UpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0
U2VsZWN0ZWRSYW5nZShuZXdSYW5nZS5nZXQoKSwgYWZmaW5pdHksIHRydWUpOwpAQCAtMTI5Nyw3
ICsxMjk3LDggQEAgc3RhdGljIGJvb2wgZW5hYmxlZEluRWRpdGFibGVUZXh0T3JDYXJldAogCiBz
dGF0aWMgYm9vbCBlbmFibGVkSW5SaWNobHlFZGl0YWJsZVRleHQoRnJhbWUmIGZyYW1lLCBFdmVu
dCosIEVkaXRvckNvbW1hbmRTb3VyY2UpCiB7Ci0gICAgcmV0dXJuIGZyYW1lLnNlbGVjdGlvbigp
LmlzQ2FyZXRPclJhbmdlKCkgJiYgZnJhbWUuc2VsZWN0aW9uKCkuaXNDb250ZW50UmljaGx5RWRp
dGFibGUoKSAmJiBmcmFtZS5zZWxlY3Rpb24oKS5yb290RWRpdGFibGVFbGVtZW50KCk7CisgICAg
Y29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0gZnJhbWUuc2VsZWN0aW9uKCkuc2Vs
ZWN0aW9uKCk7CisgICAgcmV0dXJuIHNlbGVjdGlvbi5pc0NhcmV0T3JSYW5nZSgpICYmIHNlbGVj
dGlvbi5pc0NvbnRlbnRSaWNobHlFZGl0YWJsZSgpICYmIHNlbGVjdGlvbi5yb290RWRpdGFibGVF
bGVtZW50KCk7CiB9CiAKIHN0YXRpYyBib29sIGVuYWJsZWRQYXN0ZShGcmFtZSYgZnJhbWUsIEV2
ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSkKQEAgLTEzMDcsMTIgKzEzMDgsMTIgQEAgc3RhdGlj
IGJvb2wgZW5hYmxlZFBhc3RlKEZyYW1lJiBmcmFtZSwgRQogCiBzdGF0aWMgYm9vbCBlbmFibGVk
UmFuZ2VJbkVkaXRhYmxlVGV4dChGcmFtZSYgZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNv
dXJjZSkKIHsKLSAgICByZXR1cm4gZnJhbWUuc2VsZWN0aW9uKCkuaXNSYW5nZSgpICYmIGZyYW1l
LnNlbGVjdGlvbigpLmlzQ29udGVudEVkaXRhYmxlKCk7CisgICAgcmV0dXJuIGZyYW1lLnNlbGVj
dGlvbigpLmlzUmFuZ2UoKSAmJiBmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0NvbnRl
bnRFZGl0YWJsZSgpOwogfQogCiBzdGF0aWMgYm9vbCBlbmFibGVkUmFuZ2VJblJpY2hseUVkaXRh
YmxlVGV4dChGcmFtZSYgZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSkKIHsKLSAg
ICByZXR1cm4gZnJhbWUuc2VsZWN0aW9uKCkuaXNSYW5nZSgpICYmIGZyYW1lLnNlbGVjdGlvbigp
LmlzQ29udGVudFJpY2hseUVkaXRhYmxlKCk7CisgICAgcmV0dXJuIGZyYW1lLnNlbGVjdGlvbigp
LmlzUmFuZ2UoKSAmJiBmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0NvbnRlbnRSaWNo
bHlFZGl0YWJsZSgpOwogfQogCiBzdGF0aWMgYm9vbCBlbmFibGVkUmVkbyhGcmFtZSYgZnJhbWUs
IEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvRnJhbWVTZWxlY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvRnJhbWVTZWxlY3Rpb24uY3BwCShyZXZpc2lvbiAxNjMxMjgpCisrKyBTb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMwNyw3ICsx
MzA3LDcgQEAgc3RhdGljIFJlbmRlck9iamVjdCogY2FyZXRSZW5kZXJlcihOb2RlKgogCiBib29s
IENhcmV0QmFzZTo6dXBkYXRlQ2FyZXRSZWN0KERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgVmlz
aWJsZVBvc2l0aW9uJiBjYXJldFBvc2l0aW9uKQogewotICAgIGRvY3VtZW50LT51cGRhdGVTdHls
ZUlmTmVlZGVkKCk7CisgICAgZG9jdW1lbnQtPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHls
ZXNoZWV0cygpOwogICAgIG1fY2FyZXRMb2NhbFJlY3QgPSBMYXlvdXRSZWN0KCk7CiAKICAgICBt
X2NhcmV0UmVjdE5lZWRzVXBkYXRlID0gZmFsc2U7CkBAIC0xNDI2LDcgKzE0MjYsNyBAQCBib29s
IEZyYW1lU2VsZWN0aW9uOjpyZWNvbXB1dGVDYXJldFJlY3QoCiAKICNpZiBFTkFCTEUoVEVYVF9D
QVJFVCkKICAgICBpZiAoUmVuZGVyVmlldyogdmlldyA9IG1fZnJhbWUtPmRvY3VtZW50KCktPnJl
bmRlclZpZXcoKSkgewotICAgICAgICBib29sIHByZXZpb3VzT3JOZXdDYXJldE5vZGVJc0NvbnRl
bnRFZGl0YWJsZSA9IGlzQ29udGVudEVkaXRhYmxlKCkgfHwgKG1fcHJldmlvdXNDYXJldE5vZGUg
JiYgbV9wcmV2aW91c0NhcmV0Tm9kZS0+aXNDb250ZW50RWRpdGFibGUoKSk7CisgICAgICAgIGJv
b2wgcHJldmlvdXNPck5ld0NhcmV0Tm9kZUlzQ29udGVudEVkaXRhYmxlID0gbV9zZWxlY3Rpb24u
aXNDb250ZW50RWRpdGFibGUoKSB8fCAobV9wcmV2aW91c0NhcmV0Tm9kZSAmJiBtX3ByZXZpb3Vz
Q2FyZXROb2RlLT5pc0NvbnRlbnRFZGl0YWJsZSgpKTsKICAgICAgICAgaWYgKHNob3VsZFJlcGFp
bnRDYXJldCh2aWV3LCBwcmV2aW91c09yTmV3Q2FyZXROb2RlSXNDb250ZW50RWRpdGFibGUpKSB7
CiAgICAgICAgICAgICBpZiAobV9wcmV2aW91c0NhcmV0Tm9kZSkKICAgICAgICAgICAgICAgICBy
ZXBhaW50Q2FyZXRGb3JMb2NhbFJlY3QobV9wcmV2aW91c0NhcmV0Tm9kZS5nZXQoKSwgb2xkUmVj
dCk7CkBAIC0xNjc1LDcgKzE2NzUsNyBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpzZWxlY3RBbGwo
KQogCiAgICAgUmVmUHRyPE5vZGU+IHJvb3QgPSAwOwogICAgIE5vZGUqIHNlbGVjdFN0YXJ0VGFy
Z2V0ID0gMDsKLSAgICBpZiAoaXNDb250ZW50RWRpdGFibGUoKSkgeworICAgIGlmIChtX3NlbGVj
dGlvbi5pc0NvbnRlbnRFZGl0YWJsZSgpKSB7CiAgICAgICAgIHJvb3QgPSBoaWdoZXN0RWRpdGFi
bGVSb290KG1fc2VsZWN0aW9uLnN0YXJ0KCkpOwogICAgICAgICBpZiAoTm9kZSogc2hhZG93Um9v
dCA9IG1fc2VsZWN0aW9uLm5vbkJvdW5kYXJ5U2hhZG93VHJlZVJvb3ROb2RlKCkpCiAgICAgICAg
ICAgICBzZWxlY3RTdGFydFRhcmdldCA9IHNoYWRvd1Jvb3QtPnNoYWRvd0hvc3QoKTsKQEAgLTE3
MzMsMTIgKzE3MzMsNiBAQCBib29sIEZyYW1lU2VsZWN0aW9uOjpzZXRTZWxlY3RlZFJhbmdlKFJh
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgRnJhbWVTZWxlY3Rpb246OmlzSW5QYXNzd29y
ZEZpZWxkKCkgY29uc3QKLXsKLSAgICBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudCogdGV4dENv
bnRyb2wgPSBlbmNsb3NpbmdUZXh0Rm9ybUNvbnRyb2woc3RhcnQoKSk7Ci0gICAgcmV0dXJuIHRl
eHRDb250cm9sICYmIGlzSFRNTElucHV0RWxlbWVudCh0ZXh0Q29udHJvbCkgJiYgdG9IVE1MSW5w
dXRFbGVtZW50KHRleHRDb250cm9sKS0+aXNQYXNzd29yZEZpZWxkKCk7Ci19Ci0KIHZvaWQgRnJh
bWVTZWxlY3Rpb246OmZvY3VzZWRPckFjdGl2ZVN0YXRlQ2hhbmdlZCgpCiB7CiAgICAgYm9vbCBh
Y3RpdmVBbmRGb2N1c2VkID0gaXNGb2N1c2VkQW5kQWN0aXZlKCk7CkBAIC0xODEzLDggKzE4MDcs
OSBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjp1cGRhdGVBcHBlYXJhbmNlKCkKIAogICAgIC8vIFBh
aW50IGEgYmxvY2sgY3Vyc29yIGluc3RlYWQgb2YgYSBjYXJldCBpbiBvdmVydHlwZSBtb2RlIHVu
bGVzcyB0aGUgY2FyZXQgaXMgYXQgdGhlIGVuZCBvZiBhIGxpbmUgKGluIHRoaXMgY2FzZQogICAg
IC8vIHRoZSBGcmFtZVNlbGVjdGlvbiB3aWxsIHBhaW50IGEgYmxpbmtpbmcgY2FyZXQgYXMgdXN1
YWwpLgorICAgIFZpc2libGVTZWxlY3Rpb24gb2xkU2VsZWN0aW9uID0gc2VsZWN0aW9uKCk7CiAg
ICAgVmlzaWJsZVBvc2l0aW9uIGZvcndhcmRQb3NpdGlvbjsKLSAgICBpZiAobV9zaG91bGRTaG93
QmxvY2tDdXJzb3IgJiYgbV9zZWxlY3Rpb24uaXNDYXJldCgpKSB7CisgICAgaWYgKG1fc2hvdWxk
U2hvd0Jsb2NrQ3Vyc29yICYmIG9sZFNlbGVjdGlvbi5pc0NhcmV0KCkpIHsKICAgICAgICAgZm9y
d2FyZFBvc2l0aW9uID0gbW9kaWZ5RXh0ZW5kaW5nRm9yd2FyZChDaGFyYWN0ZXJHcmFudWxhcml0
eSk7CiAgICAgICAgIG1fY2FyZXRQYWludCA9IGZvcndhcmRQb3NpdGlvbi5pc051bGwoKTsKICAg
ICB9CkBAIC0xODIzLDcgKzE4MTgsNyBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjp1cGRhdGVBcHBl
YXJhbmNlKCkKICAgICBib29sIGNhcmV0UmVjdENoYW5nZWRPckNsZWFyZWQgPSByZWNvbXB1dGVD
YXJldFJlY3QoKTsKIAogICAgIGJvb2wgY2FyZXRCcm93c2luZyA9IG1fZnJhbWUtPnNldHRpbmdz
KCkuY2FyZXRCcm93c2luZ0VuYWJsZWQoKTsKLSAgICBib29sIHNob3VsZEJsaW5rID0gY2FyZXRJ
c1Zpc2libGUoKSAmJiBpc0NhcmV0KCkgJiYgKGlzQ29udGVudEVkaXRhYmxlKCkgfHwgY2FyZXRC
cm93c2luZykgJiYgZm9yd2FyZFBvc2l0aW9uLmlzTnVsbCgpOworICAgIGJvb2wgc2hvdWxkQmxp
bmsgPSBjYXJldElzVmlzaWJsZSgpICYmIGlzQ2FyZXQoKSAmJiAob2xkU2VsZWN0aW9uLmlzQ29u
dGVudEVkaXRhYmxlKCkgfHwgY2FyZXRCcm93c2luZykgJiYgZm9yd2FyZFBvc2l0aW9uLmlzTnVs
bCgpOwogCiAgICAgLy8gSWYgdGhlIGNhcmV0IG1vdmVkLCBzdG9wIHRoZSBibGluayB0aW1lciBz
byB3ZSBjYW4gcmVzdGFydCB3aXRoIGEKICAgICAvLyBibGFjayBjYXJldCBpbiB0aGUgbmV3IGxv
Y2F0aW9uLgpAQCAtMTg0OSw3ICsxODQ0LDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6dXBkYXRl
QXBwZWFyYW5jZSgpCiAKICAgICAvLyBDb25zdHJ1Y3QgYSBuZXcgVmlzaWJsZVNvbHV0aW9uLCBz
aW5jZSBtX3NlbGVjdGlvbiBpcyBub3QgbmVjZXNzYXJpbHkgdmFsaWQsIGFuZCB0aGUgZm9sbG93
aW5nIHN0ZXBzCiAgICAgLy8gYXNzdW1lIGEgdmFsaWQgc2VsZWN0aW9uLiBTZWUgPGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02OTU2Mz4gYW5kIDxyZGFyOi8vcHJvYmxl
bS8xMDIzMjg2Nj4uCi0gICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24obV9zZWxlY3Rpb24u
dmlzaWJsZVN0YXJ0KCksIGZvcndhcmRQb3NpdGlvbi5pc05vdE51bGwoKSA/IGZvcndhcmRQb3Np
dGlvbiA6IG1fc2VsZWN0aW9uLnZpc2libGVFbmQoKSk7CisgICAgVmlzaWJsZVNlbGVjdGlvbiBz
ZWxlY3Rpb24ob2xkU2VsZWN0aW9uLnZpc2libGVTdGFydCgpLCBmb3J3YXJkUG9zaXRpb24uaXNO
b3ROdWxsKCkgPyBmb3J3YXJkUG9zaXRpb24gOiBvbGRTZWxlY3Rpb24udmlzaWJsZUVuZCgpKTsK
IAogICAgIGlmICghc2VsZWN0aW9uLmlzUmFuZ2UoKSkgewogICAgICAgICB2aWV3LT5jbGVhclNl
bGVjdGlvbigpOwpAQCAtMTkxMiw3ICsxOTA3LDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6Y2Fy
ZXRCbGlua1RpbWVyRmlyZQogCiB2b2lkIEZyYW1lU2VsZWN0aW9uOjp1cGRhdGVTZWxlY3Rpb25D
YWNoZXNJZlNlbGVjdGlvbklzSW5zaWRlVGV4dEZvcm1Db250cm9sKEVVc2VyVHJpZ2dlcmVkIHVz
ZXJUcmlnZ2VyZWQpCiB7Ci0gICAgaWYgKEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50KiB0ZXh0
Q29udHJvbCA9IGVuY2xvc2luZ1RleHRGb3JtQ29udHJvbChzdGFydCgpKSkKKyAgICBpZiAoSFRN
TFRleHRGb3JtQ29udHJvbEVsZW1lbnQqIHRleHRDb250cm9sID0gZW5jbG9zaW5nVGV4dEZvcm1D
b250cm9sKG1fc2VsZWN0aW9uLnN0YXJ0KCkpKQogICAgICAgICB0ZXh0Q29udHJvbC0+c2VsZWN0
aW9uQ2hhbmdlZCh1c2VyVHJpZ2dlcmVkID09IFVzZXJUcmlnZ2VyZWQpOwogfQogCkBAIC0xOTM2
LDEzICsxOTMxLDEzIEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnNldEZvY3VzZWRFbGVtZW50SWYK
IAogICAgIGJvb2wgY2FyZXRCcm93c2luZyA9IG1fZnJhbWUtPnNldHRpbmdzKCkuY2FyZXRCcm93
c2luZ0VuYWJsZWQoKTsKICAgICBpZiAoY2FyZXRCcm93c2luZykgewotICAgICAgICBpZiAoRWxl
bWVudCogYW5jaG9yID0gZW5jbG9zaW5nQW5jaG9yRWxlbWVudChiYXNlKCkpKSB7CisgICAgICAg
IGlmIChFbGVtZW50KiBhbmNob3IgPSBlbmNsb3NpbmdBbmNob3JFbGVtZW50KG1fc2VsZWN0aW9u
LmJhc2UoKSkpIHsKICAgICAgICAgICAgIG1fZnJhbWUtPnBhZ2UoKS0+Zm9jdXNDb250cm9sbGVy
KCkuc2V0Rm9jdXNlZEVsZW1lbnQoYW5jaG9yLCBtX2ZyYW1lKTsKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChFbGVtZW50KiB0YXJnZXQgPSByb290RWRp
dGFibGVFbGVtZW50KCkpIHsKKyAgICBpZiAoRWxlbWVudCogdGFyZ2V0ID0gbV9zZWxlY3Rpb24u
cm9vdEVkaXRhYmxlRWxlbWVudCgpKSB7CiAgICAgICAgIC8vIFdhbGsgdXAgdGhlIERPTSB0cmVl
IHRvIHNlYXJjaCBmb3IgYW4gZWxlbWVudCB0byBmb2N1cy4KICAgICAgICAgd2hpbGUgKHRhcmdl
dCkgewogICAgICAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBzZXQgZm9jdXMgb24gYSBzdWJm
cmFtZSB3aGVuIHNlbGVjdGluZyBpbiBhIHBhcmVudCBmcmFtZSwKQEAgLTIwNTQsNyArMjA0OSw3
IEBAIEhUTUxGb3JtRWxlbWVudCogRnJhbWVTZWxlY3Rpb246OmN1cnJlbnQKICAgICAvLyBTdGFy
dCBsb29raW5nIGVpdGhlciBhdCB0aGUgYWN0aXZlIChmaXJzdCByZXNwb25kZXIpIG5vZGUsIG9y
IHdoZXJlIHRoZSBzZWxlY3Rpb24gaXMuCiAgICAgRWxlbWVudCogc3RhcnQgPSBtX2ZyYW1lLT5k
b2N1bWVudCgpLT5mb2N1c2VkRWxlbWVudCgpOwogICAgIGlmICghc3RhcnQpCi0gICAgICAgIHN0
YXJ0ID0gdGhpcy0+c3RhcnQoKS5lbGVtZW50KCk7CisgICAgICAgIHN0YXJ0ID0gbV9zZWxlY3Rp
b24uc3RhcnQoKS5lbGVtZW50KCk7CiAgICAgaWYgKCFzdGFydCkKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAKQEAgLTIwNzEsMTggKzIwNjYsMTggQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6cmV2
ZWFsU2VsZWN0aW9uKGNvbgogewogICAgIExheW91dFJlY3QgcmVjdDsKIAotICAgIHN3aXRjaCAo
c2VsZWN0aW9uVHlwZSgpKSB7CisgICAgc3dpdGNoIChtX3NlbGVjdGlvbi5zZWxlY3Rpb25UeXBl
KCkpIHsKICAgICBjYXNlIFZpc2libGVTZWxlY3Rpb246Ok5vU2VsZWN0aW9uOgogICAgICAgICBy
ZXR1cm47CiAgICAgY2FzZSBWaXNpYmxlU2VsZWN0aW9uOjpDYXJldFNlbGVjdGlvbjoKICAgICAg
ICAgcmVjdCA9IGFic29sdXRlQ2FyZXRCb3VuZHMoKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2Fz
ZSBWaXNpYmxlU2VsZWN0aW9uOjpSYW5nZVNlbGVjdGlvbjoKLSAgICAgICAgcmVjdCA9IHJldmVh
bEV4dGVudE9wdGlvbiA9PSBSZXZlYWxFeHRlbnQgPyBWaXNpYmxlUG9zaXRpb24oZXh0ZW50KCkp
LmFic29sdXRlQ2FyZXRCb3VuZHMoKSA6IGVuY2xvc2luZ0ludFJlY3QoYm91bmRzKGZhbHNlKSk7
CisgICAgICAgIHJlY3QgPSByZXZlYWxFeHRlbnRPcHRpb24gPT0gUmV2ZWFsRXh0ZW50ID8gVmlz
aWJsZVBvc2l0aW9uKG1fc2VsZWN0aW9uLmV4dGVudCgpKS5hYnNvbHV0ZUNhcmV0Qm91bmRzKCkg
OiBlbmNsb3NpbmdJbnRSZWN0KGJvdW5kcyhmYWxzZSkpOwogICAgICAgICBicmVhazsKICAgICB9
CiAKLSAgICBQb3NpdGlvbiBzdGFydCA9IHRoaXMtPnN0YXJ0KCk7CisgICAgUG9zaXRpb24gc3Rh
cnQgPSBtX3NlbGVjdGlvbi5zdGFydCgpOwogICAgIEFTU0VSVChzdGFydC5kZXByZWNhdGVkTm9k
ZSgpKTsKICAgICBpZiAoc3RhcnQuZGVwcmVjYXRlZE5vZGUoKSAmJiBzdGFydC5kZXByZWNhdGVk
Tm9kZSgpLT5yZW5kZXJlcigpKSB7CiAjaWYgUExBVEZPUk0oSU9TKQpAQCAtMjExNyw3ICsyMTEy
LDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6c2V0U2VsZWN0aW9uRnJvbU5vbgogICAgIGlmICgh
aXNOb25lKCkgfHwgIShkb2N1bWVudC0+aGFzRWRpdGFibGVTdHlsZSgpIHx8IGNhcmV0QnJvd3Np
bmcpKQogICAgICAgICByZXR1cm47CiAjZWxzZQotICAgIGlmICghZG9jdW1lbnQgfHwgIShpc05v
bmUoKSB8fCBpc1N0YXJ0T2ZEb2N1bWVudChWaXNpYmxlUG9zaXRpb24oc2VsZWN0aW9uKCkuc3Rh
cnQoKSwgc2VsZWN0aW9uKCkuYWZmaW5pdHkoKSkpKSB8fCAhZG9jdW1lbnQtPmhhc0VkaXRhYmxl
U3R5bGUoKSkKKyAgICBpZiAoIWRvY3VtZW50IHx8ICEoaXNOb25lKCkgfHwgaXNTdGFydE9mRG9j
dW1lbnQoVmlzaWJsZVBvc2l0aW9uKG1fc2VsZWN0aW9uLnN0YXJ0KCksIG1fc2VsZWN0aW9uLmFm
ZmluaXR5KCkpKSkgfHwgIWRvY3VtZW50LT5oYXNFZGl0YWJsZVN0eWxlKCkpCiAgICAgICAgIHJl
dHVybjsKICNlbmRpZgogCkBAIC0yNDMxLDggKzI0MjYsOCBAQCBWaXNpYmxlU2VsZWN0aW9uIEZy
YW1lU2VsZWN0aW9uOjp3b3JkU2VsCiAgICAgbmV3U2VsZWN0aW9uLmV4cGFuZFVzaW5nR3JhbnVs
YXJpdHkoV29yZEdyYW51bGFyaXR5KTsKICAgICBmcmFtZVNlbGVjdGlvbi5zZXRTZWxlY3Rpb24o
bmV3U2VsZWN0aW9uLCBDbG9zZVR5cGluZyB8IENsZWFyVHlwaW5nU3R5bGUsIEFsaWduQ3Vyc29y
T25TY3JvbGxJZk5lZWRlZCwgZnJhbWVTZWxlY3Rpb24uZ3JhbnVsYXJpdHkoKSk7CiAKLSAgICBQ
b3NpdGlvbiBzdGFydFBvcyhmcmFtZVNlbGVjdGlvbi5zZWxlY3Rpb24oKS5zdGFydCgpKTsKLSAg
ICBQb3NpdGlvbiBlbmRQb3MoZnJhbWVTZWxlY3Rpb24uc2VsZWN0aW9uKCkuZW5kKCkpOworICAg
IFBvc2l0aW9uIHN0YXJ0UG9zKGZyYW1lU2VsZWN0aW9uLnNlbGVjdGlvbigpLnNlbGVjdGlvbigp
LnN0YXJ0KCkpOworICAgIFBvc2l0aW9uIGVuZFBvcyhmcmFtZVNlbGVjdGlvbi5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKS5lbmQoKSk7CiAKICAgICAvLyBFeHBhbnNpb24gY2Fubm90IGJlIGFsbG93
ZWQgdG8gY2hhbmdlIHNlbGVjdGlvbiBzbyB0aGF0IGl0IGlzIG5vIGxvbmdlcgogICAgIC8vIHRv
dWNoZXMgKG9yIGNvbnRhaW5zKSB0aGUgb3JpZ2luYWwsIHVuZXhwYW5kZWQgc2VsZWN0aW9uLgpA
QCAtMjQ3OSw4ICsyNDc0LDggQEAgVmlzaWJsZVNlbGVjdGlvbiBGcmFtZVNlbGVjdGlvbjo6d29y
ZFNlbAogICAgICAgICB9CiAgICAgICAgIGZyYW1lU2VsZWN0aW9uLm1vdmVUbyhzdGFydFZpc2li
bGVQb3MpOwogICAgICAgICBmcmFtZVNlbGVjdGlvbi5tb2RpZnkoRnJhbWVTZWxlY3Rpb246OkFs
dGVyYXRpb25FeHRlbmQsIERpcmVjdGlvbkJhY2t3YXJkLCBXb3JkR3JhbnVsYXJpdHkpOwotICAg
ICAgICBzdGFydFBvcyA9IGZyYW1lU2VsZWN0aW9uLnNlbGVjdGlvbigpLnN0YXJ0KCk7Ci0gICAg
ICAgIGVuZFBvcyA9IGZyYW1lU2VsZWN0aW9uLnNlbGVjdGlvbigpLmVuZCgpOworICAgICAgICBz
dGFydFBvcyA9IGZyYW1lU2VsZWN0aW9uLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCk7
CisgICAgICAgIGVuZFBvcyA9IGZyYW1lU2VsZWN0aW9uLnNlbGVjdGlvbigpLnNlbGVjdGlvbigp
LmVuZCgpOwogICAgICAgICBzdGFydFZpc2libGVQb3MgPSBWaXNpYmxlUG9zaXRpb24oc3RhcnRQ
b3MsIFZQX0RFRkFVTFRfQUZGSU5JVFkpOwogICAgICAgICBlbmRWaXNpYmxlUG9zID0gVmlzaWJs
ZVBvc2l0aW9uKGVuZFBvcywgVlBfREVGQVVMVF9BRkZJTklUWSk7CiAgICAgICAgIGlmIChzdGFy
dFZpc2libGVQb3MuaXNOdWxsKCkgfHwgZW5kVmlzaWJsZVBvcy5pc051bGwoKSkgewpJbmRleDog
U291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uaAkocmV2aXNpb24gMTYzMTI4KQor
KysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xMzUsMTIgKzEzNSw3IEBAIHB1YmxpYzoKIAogICAgIGV4cGxpY2l0IEZyYW1lU2VsZWN0
aW9uKEZyYW1lKiA9IDApOwogCi0gICAgRWxlbWVudCogcm9vdEVkaXRhYmxlRWxlbWVudCgpIGNv
bnN0IHsgcmV0dXJuIG1fc2VsZWN0aW9uLnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsgfQogICAgIEVs
ZW1lbnQqIHJvb3RFZGl0YWJsZUVsZW1lbnRPckRvY3VtZW50RWxlbWVudCgpIGNvbnN0OwotCi0g
ICAgYm9vbCBoYXNFZGl0YWJsZVN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3Rpb24uaGFz
RWRpdGFibGVTdHlsZSgpOyB9Ci0gICAgYm9vbCBpc0NvbnRlbnRFZGl0YWJsZSgpIGNvbnN0IHsg
cmV0dXJuIG1fc2VsZWN0aW9uLmlzQ29udGVudEVkaXRhYmxlKCk7IH0KLSAgICBib29sIGlzQ29u
dGVudFJpY2hseUVkaXRhYmxlKCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3Rpb24uaXNDb250ZW50
UmljaGx5RWRpdGFibGUoKTsgfQogICAgICAKICAgICB2b2lkIG1vdmVUbyhjb25zdCBSYW5nZSos
IEVBZmZpbml0eSwgRVVzZXJUcmlnZ2VyZWQgPSBOb3RVc2VyVHJpZ2dlcmVkKTsKICAgICB2b2lk
IG1vdmVUbyhjb25zdCBWaXNpYmxlUG9zaXRpb24mLCBFVXNlclRyaWdnZXJlZCA9IE5vdFVzZXJU
cmlnZ2VyZWQsIEN1cnNvckFsaWduT25TY3JvbGwgPSBBbGlnbkN1cnNvck9uU2Nyb2xsSWZOZWVk
ZWQpOwpAQCAtMTU3LDEwICsxNTIsNiBAQCBwdWJsaWM6CiAKICAgICBib29sIGNvbnRhaW5zKGNv
bnN0IExheW91dFBvaW50Jik7CiAKLSAgICBWaXNpYmxlU2VsZWN0aW9uOjpTZWxlY3Rpb25UeXBl
IHNlbGVjdGlvblR5cGUoKSBjb25zdCB7IHJldHVybiBtX3NlbGVjdGlvbi5zZWxlY3Rpb25UeXBl
KCk7IH0KLQotICAgIEVBZmZpbml0eSBhZmZpbml0eSgpIGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0
aW9uLmFmZmluaXR5KCk7IH0KLQogICAgIGJvb2wgbW9kaWZ5KEVBbHRlcmF0aW9uLCBTZWxlY3Rp
b25EaXJlY3Rpb24sIFRleHRHcmFudWxhcml0eSwgRVVzZXJUcmlnZ2VyZWQgPSBOb3RVc2VyVHJp
Z2dlcmVkKTsKICAgICBlbnVtIFZlcnRpY2FsRGlyZWN0aW9uIHsgRGlyZWN0aW9uVXAsIERpcmVj
dGlvbkRvd24gfTsKICAgICBib29sIG1vZGlmeShFQWx0ZXJhdGlvbiwgdW5zaWduZWQgdmVydGlj
YWxEaXN0YW5jZSwgVmVydGljYWxEaXJlY3Rpb24sIEVVc2VyVHJpZ2dlcmVkID0gTm90VXNlclRy
aWdnZXJlZCwgQ3Vyc29yQWxpZ25PblNjcm9sbCA9IEFsaWduQ3Vyc29yT25TY3JvbGxJZk5lZWRl
ZCk7CkBAIC0xNzUsOSArMTY2LDYgQEAgcHVibGljOgogICAgIHZvaWQgc2V0RXh0ZW50KGNvbnN0
IFZpc2libGVQb3NpdGlvbiYsIEVVc2VyVHJpZ2dlcmVkID0gTm90VXNlclRyaWdnZXJlZCk7CiAg
ICAgdm9pZCBzZXRFeHRlbnQoY29uc3QgUG9zaXRpb24mLCBFQWZmaW5pdHksIEVVc2VyVHJpZ2dl
cmVkID0gTm90VXNlclRyaWdnZXJlZCk7CiAKLSAgICBQb3NpdGlvbiBiYXNlKCkgY29uc3QgeyBy
ZXR1cm4gbV9zZWxlY3Rpb24uYmFzZSgpOyB9Ci0gICAgUG9zaXRpb24gZXh0ZW50KCkgY29uc3Qg
eyByZXR1cm4gbV9zZWxlY3Rpb24uZXh0ZW50KCk7IH0KLSAgICBQb3NpdGlvbiBzdGFydCgpIGNv
bnN0IHsgcmV0dXJuIG1fc2VsZWN0aW9uLnN0YXJ0KCk7IH0KICAgICBQb3NpdGlvbiBlbmQoKSBj
b25zdCB7IHJldHVybiBtX3NlbGVjdGlvbi5lbmQoKTsgfQogCiAgICAgLy8gUmV0dXJuIHRoZSBy
ZW5kZXJlciB0aGF0IGlzIHJlc3BvbnNpYmxlIGZvciBwYWludGluZyB0aGUgY2FyZXQgKGluIHRo
ZSBzZWxlY3Rpb24gc3RhcnQgbm9kZSkKQEAgLTE5Niw3ICsxODQsNiBAQCBwdWJsaWM6CiAgICAg
Ym9vbCBpc0NhcmV0KCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3Rpb24uaXNDYXJldCgpOyB9CiAg
ICAgYm9vbCBpc1JhbmdlKCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3Rpb24uaXNSYW5nZSgpOyB9
CiAgICAgYm9vbCBpc0NhcmV0T3JSYW5nZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0aW9uLmlz
Q2FyZXRPclJhbmdlKCk7IH0KLSAgICBib29sIGlzSW5QYXNzd29yZEZpZWxkKCkgY29uc3Q7CiAg
ICAgYm9vbCBpc0FsbChFZGl0aW5nQm91bmRhcnlDcm9zc2luZ1J1bGUgcnVsZSA9IENhbm5vdENy
b3NzRWRpdGluZ0JvdW5kYXJ5KSBjb25zdCB7IHJldHVybiBtX3NlbGVjdGlvbi5pc0FsbChydWxl
KTsgfQogICAgIAogICAgIFBhc3NSZWZQdHI8UmFuZ2U+IHRvTm9ybWFsaXplZFJhbmdlKCkgY29u
c3QgeyByZXR1cm4gbV9zZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsgfQpAQCAtMzM1LDYg
KzMyMiw3IEBAIHByaXZhdGU6CiAgICAgTGF5b3V0VW5pdCBtX3hQb3NGb3JWZXJ0aWNhbEFycm93
TmF2aWdhdGlvbjsKIAogICAgIFZpc2libGVTZWxlY3Rpb24gbV9zZWxlY3Rpb247CisgICAgbXV0
YWJsZSBWaXNpYmxlU2VsZWN0aW9uIG1fdmFsaWRhdGVkU2VsZWN0aW9uQ2FjaGU7CiAgICAgVmlz
aWJsZVBvc2l0aW9uIG1fb3JpZ2luYWxCYXNlOyAvLyBVc2VkIHRvIHN0b3JlIGJhc2UgYmVmb3Jl
IHRoZSBhZGp1c3RtZW50IGF0IGJpZGkgYm91bmRhcnkKICAgICBUZXh0R3JhbnVsYXJpdHkgbV9n
cmFudWxhcml0eTsKIApAQCAtMzUyLDcgKzM0MCw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX3No
b3VsZFNob3dCbG9ja0N1cnNvciA6IDE7CiAKICNpZiBQTEFURk9STShJT1MpCi0gICAgYm9vbCBt
X3VwZGF0ZUFwcGVhcmFuY2VFbmFibGVkIDogMTsKKyAgICBib29sIG1fdXBkYXRlQXBwZWFyYW5j
ZUVuYWJsZWQgOiAxO0RyYWdDb250cm9sbGVyLmNwcAogICAgIGJvb2wgbV9jYXJldEJsaW5rcyA6
IDE7CiAgICAgQ29sb3IgbV9jYXJldENvbG9yOwogICAgIGludCBtX2Nsb3NlVHlwaW5nU3VwcHJl
c3Npb25zOwpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZW1vdmVGb3JtYXRDb21tYW5k
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlbW92ZUZvcm1hdENv
bW1hbmQuY3BwCShyZXZpc2lvbiAxNjMxMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Jl
bW92ZUZvcm1hdENvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NywxMiArNzcsMTIgQEAg
c3RhdGljIGJvb2wgaXNFbGVtZW50Rm9yUmVtb3ZlRm9ybWF0Q29tbQogCiB2b2lkIFJlbW92ZUZv
cm1hdENvbW1hbmQ6OmRvQXBwbHkoKQogewotICAgIGlmICghZnJhbWUoKS5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKS5pc05vbk9ycGhhbmVkQ2FyZXRPclJhbmdlKCkpCisgICAgaWYgKCFlbmRpbmdT
ZWxlY3Rpb24oKS5pc05vbk9ycGhhbmVkQ2FyZXRPclJhbmdlKCkpCiAgICAgICAgIHJldHVybjsK
IAogICAgIC8vIEdldCB0aGUgZGVmYXVsdCBzdHlsZSBmb3IgdGhpcyBlZGl0YWJsZSByb290LCBp
dCdzIHRoZSBzdHlsZSB0aGF0IHdlJ2xsIGdpdmUgdGhlCiAgICAgLy8gY29udGVudCB0aGF0IHdl
J3JlIG9wZXJhdGluZyBvbi4KLSAgICBOb2RlKiByb290ID0gZnJhbWUoKS5zZWxlY3Rpb24oKS5y
b290RWRpdGFibGVFbGVtZW50KCk7CisgICAgTm9kZSogcm9vdCA9IGVuZGluZ1NlbGVjdGlvbigp
LnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsKICAgICBSZWZQdHI8RWRpdGluZ1N0eWxlPiBkZWZhdWx0
U3R5bGUgPSBFZGl0aW5nU3R5bGU6OmNyZWF0ZShyb290KTsKIAogICAgIC8vIFdlIHdhbnQgdG8g
cmVtb3ZlIGV2ZXJ5dGhpbmcgYnV0IHRyYW5zcGFyZW50IGJhY2tncm91bmQuCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVTZWxlY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5jcHAJKHJldmlzaW9uIDE2MzEy
OCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5j
bHVkZSAiRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKICNpbmNsdWRl
ICJUZXh0SXRlcmF0b3IuaCIKICNpbmNsdWRlICJWaXNpYmxlVW5pdHMuaCIKICNpbmNsdWRlICJo
dG1sZWRpdGluZy5oIgpAQCAtNjY2LDYgKzY2NywxMiBAQCBOb2RlKiBWaXNpYmxlU2VsZWN0aW9u
Ojpub25Cb3VuZGFyeVNoYWRvCiAgICAgcmV0dXJuIHN0YXJ0KCkuZGVwcmVjYXRlZE5vZGUoKSA/
IHN0YXJ0KCkuZGVwcmVjYXRlZE5vZGUoKS0+bm9uQm91bmRhcnlTaGFkb3dUcmVlUm9vdE5vZGUo
KSA6IDA7CiB9CiAKK2Jvb2wgVmlzaWJsZVNlbGVjdGlvbjo6aXNJblBhc3N3b3JkRmllbGQoKSBj
b25zdAoreworICAgIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50KiB0ZXh0Q29udHJvbCA9IGVu
Y2xvc2luZ1RleHRGb3JtQ29udHJvbChzdGFydCgpKTsKKyAgICByZXR1cm4gdGV4dENvbnRyb2wg
JiYgaXNIVE1MSW5wdXRFbGVtZW50KHRleHRDb250cm9sKSAmJiB0b0hUTUxJbnB1dEVsZW1lbnQo
dGV4dENvbnRyb2wpLT5pc1Bhc3N3b3JkRmllbGQoKTsKK30KKwogI2lmbmRlZiBOREVCVUcKIAog
dm9pZCBWaXNpYmxlU2VsZWN0aW9uOjpkZWJ1Z1Bvc2l0aW9uKCkgY29uc3QKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5oCShyZXZpc2lvbiAxNjMxMjgpCisr
KyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVTZWxlY3Rpb24uaAkod29ya2luZyBjb3B5
KQpAQCAtMTA1LDYgKzEwNSw4IEBAIHB1YmxpYzoKICAgICAvLyBTaGFkb3dSb290IG5vZGUgZm9y
IG5ldyBzaGFkb3cgdHJlZXMsIG9yIDAgZm9yIG5vbi1zaGFkb3cgdHJlZXMuCiAgICAgTm9kZSog
bm9uQm91bmRhcnlTaGFkb3dUcmVlUm9vdE5vZGUoKSBjb25zdDsKIAorICAgIGJvb2wgaXNJblBh
c3N3b3JkRmllbGQoKSBjb25zdDsKKwogI2lmbmRlZiBOREVCVUcKICAgICB2b2lkIGRlYnVnUG9z
aXRpb24oKSBjb25zdDsKICAgICB2b2lkIGZvcm1hdEZvckRlYnVnZ2VyKGNoYXIqIGJ1ZmZlciwg
dW5zaWduZWQgbGVuZ3RoKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFj
L0VkaXRvck1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9F
ZGl0b3JNYWMubW0JKHJldmlzaW9uIDE2MzEyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
bWFjL0VkaXRvck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjM5LDcgKzIzOSw3IEBAIE5TRGlj
dGlvbmFyeSogRWRpdG9yOjpmb250QXR0cmlidXRlc0ZvclMKIAogYm9vbCBFZGl0b3I6OmNhbkNv
cHlFeGNsdWRpbmdTdGFuZGFsb25lSW1hZ2VzKCkKIHsKLSAgICBGcmFtZVNlbGVjdGlvbiYgc2Vs
ZWN0aW9uID0gbV9mcmFtZS5zZWxlY3Rpb24oKTsKKyAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9u
JiBzZWxlY3Rpb24gPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwogICAgIHJldHVy
biBzZWxlY3Rpb24uaXNSYW5nZSgpICYmICFzZWxlY3Rpb24uaXNJblBhc3N3b3JkRmllbGQoKTsK
IH0KIApAQCAtMjU5LDcgKzI1OSw3IEBAIHZvaWQgRWRpdG9yOjp0YWtlRmluZFN0cmluZ0Zyb21T
ZWxlY3Rpb24KIHZvaWQgRWRpdG9yOjpyZWFkU2VsZWN0aW9uRnJvbVBhc3RlYm9hcmQoY29uc3Qg
U3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkKIHsKICAgICBQYXN0ZWJvYXJkIHBhc3RlYm9hcmQocGFz
dGVib2FyZE5hbWUpOwotICAgIGlmIChtX2ZyYW1lLnNlbGVjdGlvbigpLmlzQ29udGVudFJpY2hs
eUVkaXRhYmxlKCkpCisgICAgaWYgKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXND
b250ZW50UmljaGx5RWRpdGFibGUoKSkKICAgICAgICAgcGFzdGVXaXRoUGFzdGVib2FyZCgmcGFz
dGVib2FyZCwgdHJ1ZSk7CiAgICAgZWxzZQogICAgICAgICBwYXN0ZUFzUGxhaW5UZXh0V2l0aFBh
c3RlYm9hcmQocGFzdGVib2FyZCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBbmNo
b3JFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBbmNo
b3JFbGVtZW50LmNwcAkocmV2aXNpb24gMTYzMTI4KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MQW5jaG9yRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5NSw3ICsxOTUsNyBAQCB2
b2lkIEhUTUxBbmNob3JFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kCiAgICAgICAgICAgICAvLyBU
aGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBlZGl0YWJsZSBibG9jayB0aGF0IHRoZSBzZWxlY3Rpb24g
d2FzIGluIChpZiBpdCB3YXMgaW4gb25lKSBqdXN0IGJlZm9yZSB0aGUgbGluayB3YXMgY2xpY2tl
ZAogICAgICAgICAgICAgLy8gZm9yIHRoZSBMaXZlV2hlbk5vdEZvY3VzZWQgZWRpdGFibGUgbGlu
ayBiZWhhdmlvcgogICAgICAgICAgICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygp
Lm1vdXNlZG93bkV2ZW50ICYmIGV2ZW50LT5pc01vdXNlRXZlbnQoKSAmJiBzdGF0aWNfY2FzdDxN
b3VzZUV2ZW50Kj4oZXZlbnQpLT5idXR0b24oKSAhPSBSaWdodEJ1dHRvbiAmJiBkb2N1bWVudCgp
LmZyYW1lKCkpIHsKLSAgICAgICAgICAgICAgICBzZXRSb290RWRpdGFibGVFbGVtZW50Rm9yU2Vs
ZWN0aW9uT25Nb3VzZURvd24oZG9jdW1lbnQoKS5mcmFtZSgpLT5zZWxlY3Rpb24oKS5yb290RWRp
dGFibGVFbGVtZW50KCkpOworICAgICAgICAgICAgICAgIHNldFJvb3RFZGl0YWJsZUVsZW1lbnRG
b3JTZWxlY3Rpb25Pbk1vdXNlRG93bihkb2N1bWVudCgpLmZyYW1lKCktPnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpLnJvb3RFZGl0YWJsZUVsZW1lbnQoKSk7CiAgICAgICAgICAgICAgICAgbV93YXNT
aGlmdEtleURvd25Pbk1vdXNlRG93biA9IHN0YXRpY19jYXN0PE1vdXNlRXZlbnQqPihldmVudCkt
PnNoaWZ0S2V5KCk7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZl
bnROYW1lcygpLm1vdXNlb3ZlckV2ZW50KSB7CiAgICAgICAgICAgICAgICAgLy8gVGhlc2UgYXJl
IGNsZWFyZWQgb24gbW91c2VvdmVyIGFuZCBub3QgbW91c2VvdXQgYmVjYXVzZSB0aGVpciB2YWx1
ZXMgYXJlIG5lZWRlZCBmb3IgZHJhZyBldmVudHMsCkBAIC0yMjgsNyArMjI4LDcgQEAgdm9pZCBI
VE1MQW5jaG9yRWxlbWVudDo6c2V0QWN0aXZlKGJvb2wgZAogICAgICAgICAgICAgLy8gRG9uJ3Qg
c2V0IHRoZSBsaW5rIHRvIGJlIGFjdGl2ZSBpZiB0aGUgY3VycmVudCBzZWxlY3Rpb24gaXMgaW4g
dGhlIHNhbWUgZWRpdGFibGUgYmxvY2sgYXMKICAgICAgICAgICAgIC8vIHRoaXMgbGluawogICAg
ICAgICAgICAgY2FzZSBFZGl0YWJsZUxpbmtMaXZlV2hlbk5vdEZvY3VzZWQ6Ci0gICAgICAgICAg
ICAgICAgaWYgKGRvd24gJiYgZG9jdW1lbnQoKS5mcmFtZSgpICYmIGRvY3VtZW50KCkuZnJhbWUo
KS0+c2VsZWN0aW9uKCkucm9vdEVkaXRhYmxlRWxlbWVudCgpID09IHJvb3RFZGl0YWJsZUVsZW1l
bnQoKSkKKyAgICAgICAgICAgICAgICBpZiAoZG93biAmJiBkb2N1bWVudCgpLmZyYW1lKCkgJiYg
ZG9jdW1lbnQoKS5mcmFtZSgpLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5yb290RWRpdGFibGVF
bGVtZW50KCkgPT0gcm9vdEVkaXRhYmxlRWxlbWVudCgpKQogICAgICAgICAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQuY3BwCShy
ZXZpc2lvbiAxNjMxMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0Rm9ybUNvbnRy
b2xFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzU2LDcgKzM1Niw3IEBAIGludCBIVE1M
VGV4dEZvcm1Db250cm9sRWxlbWVudDo6Y29tcHV0ZVMKICAgICBpZiAoIWZyYW1lKQogICAgICAg
ICByZXR1cm4gMDsKIAotICAgIHJldHVybiBpbmRleEZvclZpc2libGVQb3NpdGlvbihmcmFtZS0+
c2VsZWN0aW9uKCkuc3RhcnQoKSk7CisgICAgcmV0dXJuIGluZGV4Rm9yVmlzaWJsZVBvc2l0aW9u
KGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpKTsKIH0KIAogaW50IEhUTUxU
ZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpzZWxlY3Rpb25FbmQoKSBjb25zdApAQCAtMzc1LDcgKzM3
NSw3IEBAIGludCBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6Y29tcHV0ZVMKICAgICBpZiAo
IWZyYW1lKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIHJldHVybiBpbmRleEZvclZpc2libGVQ
b3NpdGlvbihmcmFtZS0+c2VsZWN0aW9uKCkuZW5kKCkpOworICAgIHJldHVybiBpbmRleEZvclZp
c2libGVQb3NpdGlvbihmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZW5kKCkpOwogfQog
CiBzdGF0aWMgY29uc3QgQXRvbWljU3RyaW5nJiBkaXJlY3Rpb25TdHJpbmcoVGV4dEZpZWxkU2Vs
ZWN0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvQ29u
dGV4dE1lbnVDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdl
L0NvbnRleHRNZW51Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDE2MzEyOCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvQ29udGV4dE1lbnVDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzQxLDE1ICszNDEsMTUgQEAgdm9pZCBDb250ZXh0TWVudUNvbnRyb2xsZXI6OmNvbnRleHRNZW51
SQogICAgICAgICBicmVhazsKICNlbmRpZgogICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnU3Bl
bGxpbmdHdWVzczogewotICAgICAgICBGcmFtZVNlbGVjdGlvbiYgZnJhbWVTZWxlY3Rpb24gPSBm
cmFtZS0+c2VsZWN0aW9uKCk7Ci0gICAgICAgIGlmIChmcmFtZS0+ZWRpdG9yKCkuc2hvdWxkSW5z
ZXJ0VGV4dChpdGVtLT50aXRsZSgpLCBmcmFtZVNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgp
LmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rpb25QYXN0ZWQpKSB7CisgICAgICAgIFZpc2libGVTZWxl
Y3Rpb24gc2VsZWN0aW9uID0gZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgICAg
ICBpZiAoZnJhbWUtPmVkaXRvcigpLnNob3VsZEluc2VydFRleHQoaXRlbS0+dGl0bGUoKSwgc2Vs
ZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvblBhc3Rl
ZCkpIHsKICAgICAgICAgICAgIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpDb21tYW5kT3B0aW9u
cyByZXBsYWNlT3B0aW9ucyA9IFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpNYXRjaFN0eWxlIHwg
UmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OlByZXZlbnROZXN0aW5nOwogCiAgICAgICAgICAgICBp
ZiAoZnJhbWUtPmVkaXRvcigpLmJlaGF2aW9yKCkuc2hvdWxkQWxsb3dTcGVsbGluZ1N1Z2dlc3Rp
b25zV2l0aG91dFNlbGVjdGlvbigpKSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKGZyYW1lU2Vs
ZWN0aW9uLmlzQ2FyZXRPclJhbmdlKCkpOwotICAgICAgICAgICAgICAgIFZpc2libGVTZWxlY3Rp
b24gd29yZFNlbGVjdGlvbihmcmFtZVNlbGVjdGlvbi5iYXNlKCkpOworICAgICAgICAgICAgICAg
IEFTU0VSVChzZWxlY3Rpb24uaXNDYXJldE9yUmFuZ2UoKSk7CisgICAgICAgICAgICAgICAgVmlz
aWJsZVNlbGVjdGlvbiB3b3JkU2VsZWN0aW9uKHNlbGVjdGlvbi5iYXNlKCkpOwogICAgICAgICAg
ICAgICAgIHdvcmRTZWxlY3Rpb24uZXhwYW5kVXNpbmdHcmFudWxhcml0eShXb3JkR3JhbnVsYXJp
dHkpOwotICAgICAgICAgICAgICAgIGZyYW1lU2VsZWN0aW9uLnNldFNlbGVjdGlvbih3b3JkU2Vs
ZWN0aW9uKTsKKyAgICAgICAgICAgICAgICBmcmFtZS0+c2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9u
KHdvcmRTZWxlY3Rpb24pOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBB
U1NFUlQoZnJhbWUtPmVkaXRvcigpLnNlbGVjdGVkVGV4dCgpLmxlbmd0aCgpKTsKICAgICAgICAg
ICAgICAgICByZXBsYWNlT3B0aW9ucyB8PSBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6U2VsZWN0
UmVwbGFjZW1lbnQ7CkBAIC0zNTksNyArMzU5LDcgQEAgdm9pZCBDb250ZXh0TWVudUNvbnRyb2xs
ZXI6OmNvbnRleHRNZW51SQogICAgICAgICAgICAgQVNTRVJUKGRvY3VtZW50KTsKICAgICAgICAg
ICAgIFJlZlB0cjxSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZD4gY29tbWFuZCA9IFJlcGxhY2VTZWxl
Y3Rpb25Db21tYW5kOjpjcmVhdGUoKmRvY3VtZW50LCBjcmVhdGVGcmFnbWVudEZyb21NYXJrdXAo
KmRvY3VtZW50LCBpdGVtLT50aXRsZSgpLCAiIiksIHJlcGxhY2VPcHRpb25zKTsKICAgICAgICAg
ICAgIGFwcGx5Q29tbWFuZChjb21tYW5kKTsKLSAgICAgICAgICAgIGZyYW1lU2VsZWN0aW9uLnJl
dmVhbFNlbGVjdGlvbihTY3JvbGxBbGlnbm1lbnQ6OmFsaWduVG9FZGdlSWZOZWVkZWQpOworICAg
ICAgICAgICAgZnJhbWUtPnNlbGVjdGlvbigpLnJldmVhbFNlbGVjdGlvbihTY3JvbGxBbGlnbm1l
bnQ6OmFsaWduVG9FZGdlSWZOZWVkZWQpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAg
IH0KQEAgLTkyMSw3ICs5MjEsNyBAQCB2b2lkIENvbnRleHRNZW51Q29udHJvbGxlcjo6cG9wdWxh
dGUoKQogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfSBlbHNlIHsgLy8gTWFrZSBhbiBl
ZGl0aW5nIGNvbnRleHQgbWVudQotICAgICAgICBib29sIGluUGFzc3dvcmRGaWVsZCA9IGZyYW1l
LT5zZWxlY3Rpb24oKS5pc0luUGFzc3dvcmRGaWVsZCgpOworICAgICAgICBib29sIGluUGFzc3dv
cmRGaWVsZCA9IGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0luUGFzc3dvcmRGaWVs
ZCgpOwogICAgICAgICBpZiAoIWluUGFzc3dvcmRGaWVsZCkgewogICAgICAgICAgICAgYm9vbCBo
YXZlQ29udGV4dE1lbnVJdGVtc0Zvck1pc3NwZWxsaW5nT3JHcmFtbWVyID0gZmFsc2U7CiAgICAg
ICAgICAgICBib29sIHNwZWxsQ2hlY2tpbmdFbmFibGVkID0gZnJhbWUtPmVkaXRvcigpLmlzU3Bl
bGxDaGVja2luZ0VuYWJsZWRGb3Iobm9kZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0Ry
YWdDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdD
b250cm9sbGVyLmNwcAkocmV2aXNpb24gMTYzMTI4KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9E
cmFnQ29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1OCw3ICsxNTgsOCBAQCBzdGF0
aWMgUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBkb2N1CiAKIGJvb2wgRHJhZ0NvbnRyb2xs
ZXI6OmRyYWdJc01vdmUoRnJhbWVTZWxlY3Rpb24mIHNlbGVjdGlvbiwgRHJhZ0RhdGEmIGRyYWdE
YXRhKQogewotICAgIHJldHVybiBtX2RvY3VtZW50VW5kZXJNb3VzZSA9PSBtX2RyYWdJbml0aWF0
b3IgJiYgc2VsZWN0aW9uLmlzQ29udGVudEVkaXRhYmxlKCkgJiYgc2VsZWN0aW9uLmlzUmFuZ2Uo
KSAmJiAhaXNDb3B5S2V5RG93bihkcmFnRGF0YSk7CisgICAgY29uc3QgVmlzaWJsZVNlbGVjdGlv
biYgdmlzaWJsZVNlbGVjdGlvbiA9IHNlbGVjdGlvbi5zZWxlY3Rpb24oKTsKKyAgICByZXR1cm4g
bV9kb2N1bWVudFVuZGVyTW91c2UgPT0gbV9kcmFnSW5pdGlhdG9yICYmIHZpc2libGVTZWxlY3Rp
b24uaXNDb250ZW50RWRpdGFibGUoKSAmJiB2aXNpYmxlU2VsZWN0aW9uLmlzUmFuZ2UoKSAmJiAh
aXNDb3B5S2V5RG93bihkcmFnRGF0YSk7CiB9CiAKIC8vIEZJWE1FOiBUaGlzIG1ldGhvZCBpcyBw
b29ybHkgbmFtZWQuICBXZSdyZSBqdXN0IGNsZWFyaW5nIHRoZSBzZWxlY3Rpb24gZnJvbSB0aGUg
ZG9jdW1lbnQgdGhpcyBkcmFnIGlzIGV4aXRpbmcuCkBAIC00MTMsMTIgKzQxNCwxMiBAQCBEcmFn
T3BlcmF0aW9uIERyYWdDb250cm9sbGVyOjpvcGVyYXRpb25GCiBzdGF0aWMgYm9vbCBzZXRTZWxl
Y3Rpb25Ub0RyYWdDYXJldChGcmFtZSogZnJhbWUsIFZpc2libGVTZWxlY3Rpb24mIGRyYWdDYXJl
dCwgUmVmUHRyPFJhbmdlPiYgcmFuZ2UsIGNvbnN0IEludFBvaW50JiBwb2ludCkKIHsKICAgICBm
cmFtZS0+c2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKGRyYWdDYXJldCk7Ci0gICAgaWYgKGZyYW1l
LT5zZWxlY3Rpb24oKS5pc05vbmUoKSkgeworICAgIGlmIChmcmFtZS0+c2VsZWN0aW9uKCkuc2Vs
ZWN0aW9uKCkuaXNOb25lKCkpIHsKICAgICAgICAgZHJhZ0NhcmV0ID0gZnJhbWUtPnZpc2libGVQ
b3NpdGlvbkZvclBvaW50KHBvaW50KTsKICAgICAgICAgZnJhbWUtPnNlbGVjdGlvbigpLnNldFNl
bGVjdGlvbihkcmFnQ2FyZXQpOwogICAgICAgICByYW5nZSA9IGRyYWdDYXJldC50b05vcm1hbGl6
ZWRSYW5nZSgpOwogICAgIH0KLSAgICByZXR1cm4gIWZyYW1lLT5zZWxlY3Rpb24oKS5pc05vbmUo
KSAmJiBmcmFtZS0+c2VsZWN0aW9uKCkuaXNDb250ZW50RWRpdGFibGUoKTsKKyAgICByZXR1cm4g
IWZyYW1lLT5zZWxlY3Rpb24oKS5pc05vbmUoKSAmJiBmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCkuaXNDb250ZW50RWRpdGFibGUoKTsKIH0KIAogYm9vbCBEcmFnQ29udHJvbGxlcjo6ZGlz
cGF0Y2hUZXh0SW5wdXRFdmVudEZvcihGcmFtZSogaW5uZXJGcmFtZSwgRHJhZ0RhdGEmIGRyYWdE
YXRhKQpAQCAtNDgyLDcgKzQ4Myw3IEBAIGJvb2wgRHJhZ0NvbnRyb2xsZXI6OmNvbmNsdWRlRWRp
dERyYWcoRHIKICAgICBWaXNpYmxlU2VsZWN0aW9uIGRyYWdDYXJldCA9IG1fcGFnZS5kcmFnQ2Fy
ZXRDb250cm9sbGVyKCkuY2FyZXRQb3NpdGlvbigpOwogICAgIG1fcGFnZS5kcmFnQ2FyZXRDb250
cm9sbGVyKCkuY2xlYXIoKTsKICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gZHJhZ0NhcmV0LnRv
Tm9ybWFsaXplZFJhbmdlKCk7Ci0gICAgUmVmUHRyPEVsZW1lbnQ+IHJvb3RFZGl0YWJsZUVsZW1l
bnQgPSBpbm5lckZyYW1lLT5zZWxlY3Rpb24oKS5yb290RWRpdGFibGVFbGVtZW50KCk7CisgICAg
UmVmUHRyPEVsZW1lbnQ+IHJvb3RFZGl0YWJsZUVsZW1lbnQgPSBpbm5lckZyYW1lLT5zZWxlY3Rp
b24oKS5zZWxlY3Rpb24oKS5yb290RWRpdGFibGVFbGVtZW50KCk7CiAKICAgICAvLyBGb3IgcmFu
Z2UgdG8gYmUgbnVsbCBhIFdlYktpdCBjbGllbnQgbXVzdCBoYXZlIGRvbmUgc29tZXRoaW5nIGJh
ZCB3aGlsZQogICAgIC8vIG1hbnVhbGx5IGNvbnRyb2xsaW5nIGRyYWcgYmVoYXZpb3VyCkBAIC03
NjUsNyArNzY2LDcgQEAgYm9vbCBEcmFnQ29udHJvbGxlcjo6c3RhcnREcmFnKEZyYW1lJiBzcgog
CiAgICAgICAgICAgICBzcmMuZWRpdG9yKCkud2lsbFdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJk
KHNlbGVjdGlvblJhbmdlLmdldCgpKTsKIAotICAgICAgICAgICAgaWYgKGVuY2xvc2luZ1RleHRG
b3JtQ29udHJvbChzcmMuc2VsZWN0aW9uKCkuc3RhcnQoKSkpCisgICAgICAgICAgICBpZiAoZW5j
bG9zaW5nVGV4dEZvcm1Db250cm9sKHNyYy5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgp
KSkKICAgICAgICAgICAgICAgICBjbGlwYm9hcmQucGFzdGVib2FyZCgpLndyaXRlUGxhaW5UZXh0
KHNyYy5lZGl0b3IoKS5zZWxlY3RlZFRleHRGb3JDbGlwYm9hcmQoKSwgUGFzdGVib2FyZDo6Q2Fu
bm90U21hcnRSZXBsYWNlKTsKICAgICAgICAgICAgIGVsc2UgewogI2lmIFBMQVRGT1JNKE1BQykg
fHwgUExBVEZPUk0oRUZMKQpAQCAtODEyLDExICs4MTMsMTIgQEAgYm9vbCBEcmFnQ29udHJvbGxl
cjo6c3RhcnREcmFnKEZyYW1lJiBzcgogICAgICAgICAgICAgLy8gb24gdGhlIHdlYiBwYWdlLiBU
aGlzIGluY2x1ZGVzIHJlcGxhY2luZyBuZXdsaW5lcyB3aXRoIHNwYWNlcy4KICAgICAgICAgICAg
IHNyYy5lZGl0b3IoKS5jb3B5VVJMKGxpbmtVUkwsIGhpdFRlc3RSZXN1bHQudGV4dENvbnRlbnQo
KS5zaW1wbGlmeVdoaXRlU3BhY2UoKSwgY2xpcGJvYXJkLnBhc3RlYm9hcmQoKSk7CiAKLSAgICAg
ICAgaWYgKHNyYy5zZWxlY3Rpb24oKS5pc0NhcmV0KCkgJiYgc3JjLnNlbGVjdGlvbigpLmlzQ29u
dGVudEVkaXRhYmxlKCkpIHsKKyAgICAgICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc3JjU2Vs
ZWN0aW9uID0gc3JjLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgICAgICBpZiAoc3JjU2Vs
ZWN0aW9uLmlzQ2FyZXQoKSAmJiBzcmNTZWxlY3Rpb24uaXNDb250ZW50RWRpdGFibGUoKSkgewog
ICAgICAgICAgICAgLy8gYSB1c2VyIGNhbiBpbml0aWF0ZSBhIGRyYWcgb24gYSBsaW5rIHdpdGhv
dXQgaGF2aW5nIGFueSB0ZXh0CiAgICAgICAgICAgICAvLyBzZWxlY3RlZC4gIEluIHRoaXMgY2Fz
ZSwgd2Ugc2hvdWxkIGV4cGFuZCB0aGUgc2VsZWN0aW9uIHRvCiAgICAgICAgICAgICAvLyB0aGUg
ZW5jbG9zaW5nIGFuY2hvciBlbGVtZW50Ci0gICAgICAgICAgICBQb3NpdGlvbiBwb3MgPSBzcmMu
c2VsZWN0aW9uKCkuYmFzZSgpOworICAgICAgICAgICAgUG9zaXRpb24gcG9zID0gc3JjU2VsZWN0
aW9uLmJhc2UoKTsKICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBlbmNsb3NpbmdBbmNob3JFbGVt
ZW50KHBvcyk7CiAgICAgICAgICAgICBpZiAobm9kZSkKICAgICAgICAgICAgICAgICBzcmMuc2Vs
ZWN0aW9uKCkuc2V0U2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb246OnNlbGVjdGlvbkZyb21Db250
ZW50c09mTm9kZShub2RlKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3Bw
CShyZXZpc2lvbiAxNjMxMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMjMsNyArMTIyMyw3IEBAIHN0YXRpYyBib29sIGlzU3Vi
bWl0SW1hZ2UoTm9kZSogbm9kZSkKIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgbm9kZSdzIGVkaXRh
YmxlIGJsb2NrIGlzIG5vdCBjdXJyZW50IGZvY3VzZWQgZm9yIGVkaXRpbmcKIHN0YXRpYyBib29s
IG5vZGVJc05vdEJlaW5nRWRpdGVkKGNvbnN0IE5vZGUmIG5vZGUsIGNvbnN0IEZyYW1lJiBmcmFt
ZSkKIHsKLSAgICByZXR1cm4gZnJhbWUuc2VsZWN0aW9uKCkucm9vdEVkaXRhYmxlRWxlbWVudCgp
ICE9IG5vZGUucm9vdEVkaXRhYmxlRWxlbWVudCgpOworICAgIHJldHVybiBmcmFtZS5zZWxlY3Rp
b24oKS5zZWxlY3Rpb24oKS5yb290RWRpdGFibGVFbGVtZW50KCkgIT0gbm9kZS5yb290RWRpdGFi
bGVFbGVtZW50KCk7CiB9CiAKIGJvb2wgRXZlbnRIYW5kbGVyOjp1c2VIYW5kQ3Vyc29yKE5vZGUq
IG5vZGUsIGJvb2wgaXNPdmVyTGluaywgYm9vbCBzaGlmdEtleSkKQEAgLTI2NDAsNyArMjY0MCw3
IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpzZW5kQ29udGV4dE1lbnVFdmVudCgKICAgICAgICAgLy8g
RklYTUU6IEluIHRoZSBlZGl0YWJsZSBjYXNlLCB3b3JkIHNlbGVjdGlvbiBzb21ldGltZXMgc2Vs
ZWN0cyBjb250ZW50IHRoYXQgaXNuJ3QgdW5kZXJuZWF0aCB0aGUgbW91c2UuCiAgICAgICAgIC8v
IElmIHRoZSBzZWxlY3Rpb24gaXMgbm9uLWVkaXRhYmxlLCB3ZSBkbyB3b3JkIHNlbGVjdGlvbiB0
byBtYWtlIGl0IGVhc2llciB0byB1c2UgdGhlIGNvbnRleHR1YWwgbWVudSBpdGVtcwogICAgICAg
ICAvLyBhdmFpbGFibGUgZm9yIHRleHQgc2VsZWN0aW9ucy4gIEJ1dCBvbmx5IGlmIHdlJ3JlIGFi
b3ZlIHRleHQuCi0gICAgICAgICYmIChtX2ZyYW1lLnNlbGVjdGlvbigpLmlzQ29udGVudEVkaXRh
YmxlKCkgfHwgKG1ldi50YXJnZXROb2RlKCkgJiYgbWV2LnRhcmdldE5vZGUoKS0+aXNUZXh0Tm9k
ZSgpKSkpIHsKKyAgICAgICAgJiYgKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXND
b250ZW50RWRpdGFibGUoKSB8fCAobWV2LnRhcmdldE5vZGUoKSAmJiBtZXYudGFyZ2V0Tm9kZSgp
LT5pc1RleHROb2RlKCkpKSkgewogICAgICAgICBtX21vdXNlRG93bk1heVN0YXJ0U2VsZWN0ID0g
dHJ1ZTsgLy8gY29udGV4dCBtZW51IGV2ZW50cyBhcmUgYWx3YXlzIGFsbG93ZWQgdG8gcGVyZm9y
bSBhIHNlbGVjdGlvbgogICAgICAgICBzZWxlY3RDbG9zZXN0V29yZE9yTGlua0Zyb21Nb3VzZUV2
ZW50KG1ldik7CiAgICAgfQpAQCAtMjY3Myw4ICsyNjczLDggQEAgYm9vbCBFdmVudEhhbmRsZXI6
OnNlbmRDb250ZXh0TWVudUV2ZW50RgogICAgIEludFBvaW50IGxvY2F0aW9uOwogCiAgICAgRWxl
bWVudCogZm9jdXNlZEVsZW1lbnQgPSBkb2MtPmZvY3VzZWRFbGVtZW50KCk7Ci0gICAgRnJhbWVT
ZWxlY3Rpb24mIHNlbGVjdGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9uKCk7Ci0gICAgUG9zaXRpb24g
c3RhcnQgPSBzZWxlY3Rpb24uc2VsZWN0aW9uKCkuc3RhcnQoKTsKKyAgICBjb25zdCBWaXNpYmxl
U2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwor
ICAgIFBvc2l0aW9uIHN0YXJ0ID0gc2VsZWN0aW9uLnN0YXJ0KCk7CiAKICAgICBpZiAoc3RhcnQu
ZGVwcmVjYXRlZE5vZGUoKSAmJiAoc2VsZWN0aW9uLnJvb3RFZGl0YWJsZUVsZW1lbnQoKSB8fCBz
ZWxlY3Rpb24uaXNSYW5nZSgpKSkgewogICAgICAgICBSZWZQdHI8UmFuZ2U+IHNlbGVjdGlvblJh
bmdlID0gc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7CkBAIC0zMjczLDcgKzMyNzMsNyBA
QCBib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlRHJhZyhjb25zdCBNb3VzCiAgICAgICAgIH0gCiAg
ICAgICAgIAogICAgICAgICBtX21vdXNlRG93bk1heVN0YXJ0RHJhZyA9IGRpc3BhdGNoRHJhZ1Ny
Y0V2ZW50KGV2ZW50TmFtZXMoKS5kcmFnc3RhcnRFdmVudCwgbV9tb3VzZURvd24pCi0gICAgICAg
ICAgICAmJiAhbV9mcmFtZS5zZWxlY3Rpb24oKS5pc0luUGFzc3dvcmRGaWVsZCgpOworICAgICAg
ICAgICAgJiYgIW1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNJblBhc3N3b3JkRmll
bGQoKTsKICAgICAgICAgCiAgICAgICAgIC8vIEludmFsaWRhdGUgY2xpcGJvYXJkIGhlcmUgYWdh
aW5zdCBhbnltb3JlIHBhc3RlYm9hcmQgd3JpdGluZyBmb3Igc2VjdXJpdHkuICBUaGUgZHJhZwog
ICAgICAgICAvLyBpbWFnZSBjYW4gc3RpbGwgYmUgY2hhbmdlZCBhcyB3ZSBkcmFnLCBidXQgbm90
IHRoZSBwYXN0ZWJvYXJkIGRhdGEuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZvY3VzQ29u
dHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9Gb2N1c0NvbnRy
b2xsZXIuY3BwCShyZXZpc2lvbiAxNjMxMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZvY3Vz
Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4MSw3ICsyODEsNyBAQCBib29sIEZv
Y3VzQ29udHJvbGxlcjo6YWR2YW5jZUZvY3VzSW5Eb2N1CiAgICAgYm9vbCBjYXJldEJyb3dzaW5n
ID0gZnJhbWUuc2V0dGluZ3MoKS5jYXJldEJyb3dzaW5nRW5hYmxlZCgpOwogCiAgICAgaWYgKGNh
cmV0QnJvd3NpbmcgJiYgIWN1cnJlbnROb2RlKQotICAgICAgICBjdXJyZW50Tm9kZSA9IGZyYW1l
LnNlbGVjdGlvbigpLnN0YXJ0KCkuZGVwcmVjYXRlZE5vZGUoKTsKKyAgICAgICAgY3VycmVudE5v
ZGUgPSBmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpLmRlcHJlY2F0ZWROb2Rl
KCk7CiAKICAgICBkb2N1bWVudC0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRz
KCk7CiAKQEAgLTU1Myw4ICs1NTMsOCBAQCBzdGF0aWMgdm9pZCBjbGVhclNlbGVjdGlvbklmTmVl
ZGVkKEZyYW1lCiAgICAgICAgIAogICAgIGlmIChvbGRGb2N1c2VkRnJhbWUtPmRvY3VtZW50KCkg
IT0gbmV3Rm9jdXNlZEZyYW1lLT5kb2N1bWVudCgpKQogICAgICAgICByZXR1cm47Ci0gICAgCi0g
ICAgRnJhbWVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9IG9sZEZvY3VzZWRGcmFtZS0+c2VsZWN0aW9u
KCk7CisKKyAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBvbGRGb2N1c2Vk
RnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwogICAgIGlmIChzZWxlY3Rpb24uaXNOb25l
KCkpCiAgICAgICAgIHJldHVybjsKIApAQCAtNTYyLDcgKzU2Miw3IEBAIHN0YXRpYyB2b2lkIGNs
ZWFyU2VsZWN0aW9uSWZOZWVkZWQoRnJhbWUKICAgICBpZiAoY2FyZXRCcm93c2luZykKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgTm9kZSogc2VsZWN0aW9uU3RhcnROb2RlID0gc2VsZWN0aW9uLnNl
bGVjdGlvbigpLnN0YXJ0KCkuZGVwcmVjYXRlZE5vZGUoKTsKKyAgICBOb2RlKiBzZWxlY3Rpb25T
dGFydE5vZGUgPSBzZWxlY3Rpb24uc3RhcnQoKS5kZXByZWNhdGVkTm9kZSgpOwogICAgIGlmIChz
ZWxlY3Rpb25TdGFydE5vZGUgPT0gbmV3Rm9jdXNlZE5vZGUgfHwgc2VsZWN0aW9uU3RhcnROb2Rl
LT5pc0Rlc2NlbmRhbnRPZihuZXdGb2N1c2VkTm9kZSkgfHwgc2VsZWN0aW9uU3RhcnROb2RlLT5k
ZXByZWNhdGVkU2hhZG93QW5jZXN0b3JOb2RlKCkgPT0gbmV3Rm9jdXNlZE5vZGUpCiAgICAgICAg
IHJldHVybjsKICAgICAgICAgCkBAIC01NzksOCArNTc5LDggQEAgc3RhdGljIHZvaWQgY2xlYXJT
ZWxlY3Rpb25JZk5lZWRlZChGcmFtZQogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQot
ICAgIAotICAgIHNlbGVjdGlvbi5jbGVhcigpOworCisgICAgb2xkRm9jdXNlZEZyYW1lLT5zZWxl
Y3Rpb24oKS5jbGVhcigpOwogfQogCiBib29sIEZvY3VzQ29udHJvbGxlcjo6c2V0Rm9jdXNlZEVs
ZW1lbnQoRWxlbWVudCogZWxlbWVudCwgUGFzc1JlZlB0cjxGcmFtZT4gbmV3Rm9jdXNlZEZyYW1l
LCBGb2N1c0RpcmVjdGlvbiBkaXJlY3Rpb24pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL2lv
cy9GcmFtZUlPUy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL2lvcy9GcmFt
ZUlPUy5tbQkocmV2aXNpb24gMTYzMTI4KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9pb3MvRnJh
bWVJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTYwMSwxNSArNjAxLDE1IEBAIHZvaWQgRnJhbWU6
OnVwZGF0ZUxheW91dCgpIGNvbnN0CiAKIE5TUmVjdCBGcmFtZTo6Y2FyZXRSZWN0KCkgY29uc3QK
IHsKLSAgICBpZiAoc2VsZWN0aW9uKCkuaXNOb25lKCkpCisgICAgVmlzaWJsZVNlbGVjdGlvbiB2
aXNpYmxlU2VsZWN0aW9uID0gc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgaWYgKHZpc2li
bGVTZWxlY3Rpb24uaXNOb25lKCkpCiAgICAgICAgIHJldHVybiBDR1JlY3RaZXJvOwotICAgIHJl
dHVybiBzZWxlY3Rpb24oKS5pc0NhcmV0KCkgPyBzZWxlY3Rpb24oKS5hYnNvbHV0ZUNhcmV0Qm91
bmRzKCkgOiBWaXNpYmxlUG9zaXRpb24oc2VsZWN0aW9uKCkuZW5kKCkpLmFic29sdXRlQ2FyZXRC
b3VuZHMoKTsKKyAgICByZXR1cm4gdmlzaWJsZVNlbGVjdGlvbi5pc0NhcmV0KCkgPyBzZWxlY3Rp
b24oKS5hYnNvbHV0ZUNhcmV0Qm91bmRzKCkgOiBWaXNpYmxlUG9zaXRpb24odmlzaWJsZVNlbGVj
dGlvbi5lbmQoKSkuYWJzb2x1dGVDYXJldEJvdW5kcygpOwogfQogCiBOU1JlY3QgRnJhbWU6OnJl
Y3RGb3JTY3JvbGxUb1Zpc2libGUoKSBjb25zdAogewotICAgIFZpc2libGVTZWxlY3Rpb24gc2Vs
ZWN0aW9uKHRoaXMtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKLSAgICByZXR1cm4gcmVjdEZv
clNlbGVjdGlvbihzZWxlY3Rpb24pOworICAgIHJldHVybiByZWN0Rm9yU2VsZWN0aW9uKHNlbGVj
dGlvbigpLnNlbGVjdGlvbigpKTsKIH0KIAogTlNSZWN0IEZyYW1lOjpyZWN0Rm9yU2VsZWN0aW9u
KFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbikgY29uc3QKQEAgLTY1OCw3ICs2NTgsNiBAQCBO
U1JlY3QgRnJhbWU6OnJlY3RGb3JTZWxlY3Rpb24oVmlzaWJsZVNlCiAKIERPTUNTU1N0eWxlRGVj
bGFyYXRpb24qIEZyYW1lOjpzdHlsZUF0U2VsZWN0aW9uU3RhcnQoKSBjb25zdAogewotICAgIFBv
c2l0aW9uIHN0YXJ0ID0gc2VsZWN0aW9uKCkuc3RhcnQoKTsKICAgICBSZWZQdHI8RWRpdGluZ1N0
eWxlPiBlZGl0aW5nU3R5bGUgPSBFZGl0aW5nU3R5bGU6OnN0eWxlQXRTZWxlY3Rpb25TdGFydChz
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CiAgICAgaWYgKCFlZGl0aW5nU3R5bGUpCiAgICAgICAg
IHJldHVybiBudWxscHRyOwpAQCAtNzM3LDE0ICs3MzYsMTQgQEAgdm9pZCBGcmFtZTo6c2V0UmFu
Z2VkU2VsZWN0aW9uQmFzZVRvQ3VycgogCiB2b2lkIEZyYW1lOjpzZXRSYW5nZWRTZWxlY3Rpb25C
YXNlVG9DdXJyZW50U2VsZWN0aW9uU3RhcnQoKQogewotICAgIEZyYW1lU2VsZWN0aW9uJiBmcmFt
ZVNlbGVjdGlvbiA9IHNlbGVjdGlvbigpOwotICAgIG1fcmFuZ2VkU2VsZWN0aW9uQmFzZSA9IFZp
c2libGVTZWxlY3Rpb24oZnJhbWVTZWxlY3Rpb24uc2VsZWN0aW9uKCkuc3RhcnQoKSwgZnJhbWVT
ZWxlY3Rpb24uYWZmaW5pdHkoKSk7CisgICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgdmlzaWJs
ZVNlbGVjdGlvbiA9IHNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgIG1fcmFuZ2VkU2VsZWN0
aW9uQmFzZSA9IFZpc2libGVTZWxlY3Rpb24odmlzaWJsZVNlbGVjdGlvbi5zdGFydCgpLCB2aXNp
YmxlU2VsZWN0aW9uLmFmZmluaXR5KCkpOwogfQogCiB2b2lkIEZyYW1lOjpzZXRSYW5nZWRTZWxl
Y3Rpb25CYXNlVG9DdXJyZW50U2VsZWN0aW9uRW5kKCkKIHsKLSAgICBGcmFtZVNlbGVjdGlvbiYg
ZnJhbWVTZWxlY3Rpb24gPSBzZWxlY3Rpb24oKTsKLSAgICBtX3JhbmdlZFNlbGVjdGlvbkJhc2Ug
PSBWaXNpYmxlU2VsZWN0aW9uKGZyYW1lU2VsZWN0aW9uLnNlbGVjdGlvbigpLmVuZCgpLCBmcmFt
ZVNlbGVjdGlvbi5hZmZpbml0eSgpKTsKKyAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiB2aXNp
YmxlU2VsZWN0aW9uID0gc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgbV9yYW5nZWRTZWxl
Y3Rpb25CYXNlID0gVmlzaWJsZVNlbGVjdGlvbih2aXNpYmxlU2VsZWN0aW9uLmVuZCgpLCB2aXNp
YmxlU2VsZWN0aW9uLmFmZmluaXR5KCkpOwogfQogCiBWaXNpYmxlU2VsZWN0aW9uIEZyYW1lOjpy
YW5nZWRTZWxlY3Rpb25CYXNlKCkgY29uc3QKQEAgLTc1OSwxNCArNzU4LDE0IEBAIHZvaWQgRnJh
bWU6OmNsZWFyUmFuZ2VkU2VsZWN0aW9uSW5pdGlhbEUKIAogdm9pZCBGcmFtZTo6c2V0UmFuZ2Vk
U2VsZWN0aW9uSW5pdGlhbEV4dGVudFRvQ3VycmVudFNlbGVjdGlvblN0YXJ0KCkKIHsKLSAgICBG
cmFtZVNlbGVjdGlvbiYgZnJhbWVTZWxlY3Rpb24gPSBzZWxlY3Rpb24oKTsKLSAgICBtX3Jhbmdl
ZFNlbGVjdGlvbkluaXRpYWxFeHRlbnQgPSBWaXNpYmxlU2VsZWN0aW9uKGZyYW1lU2VsZWN0aW9u
LnNlbGVjdGlvbigpLnN0YXJ0KCksIGZyYW1lU2VsZWN0aW9uLmFmZmluaXR5KCkpOworICAgIGNv
bnN0IFZpc2libGVTZWxlY3Rpb24mIHZpc2libGVTZWxlY3Rpb24gPSBzZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKTsKKyAgICBtX3JhbmdlZFNlbGVjdGlvbkluaXRpYWxFeHRlbnQgPSBWaXNpYmxlU2Vs
ZWN0aW9uKHZpc2libGVTZWxlY3Rpb24uc3RhcnQoKSwgdmlzaWJsZVNlbGVjdGlvbi5hZmZpbml0
eSgpKTsKIH0KIAogdm9pZCBGcmFtZTo6c2V0UmFuZ2VkU2VsZWN0aW9uSW5pdGlhbEV4dGVudFRv
Q3VycmVudFNlbGVjdGlvbkVuZCgpCiB7Ci0gICAgRnJhbWVTZWxlY3Rpb24mIGZyYW1lU2VsZWN0
aW9uID0gc2VsZWN0aW9uKCk7Ci0gICAgbV9yYW5nZWRTZWxlY3Rpb25Jbml0aWFsRXh0ZW50ID0g
VmlzaWJsZVNlbGVjdGlvbihmcmFtZVNlbGVjdGlvbi5zZWxlY3Rpb24oKS5lbmQoKSwgZnJhbWVT
ZWxlY3Rpb24uYWZmaW5pdHkoKSk7CisgICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgdmlzaWJs
ZVNlbGVjdGlvbiA9IHNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgIG1fcmFuZ2VkU2VsZWN0
aW9uSW5pdGlhbEV4dGVudCA9IFZpc2libGVTZWxlY3Rpb24odmlzaWJsZVNlbGVjdGlvbi5lbmQo
KSwgdmlzaWJsZVNlbGVjdGlvbi5hZmZpbml0eSgpKTsKIH0KIAogVmlzaWJsZVNlbGVjdGlvbiBG
cmFtZTo6cmFuZ2VkU2VsZWN0aW9uSW5pdGlhbEV4dGVudCgpIGNvbnN0CkBAIC03ODcsNyArNzg2
LDcgQEAgTlNBcnJheSAqRnJhbWU6OmludGVycHJldGF0aW9uc0ZvckN1cnJlbgogICAgIGlmICgh
ZG9jdW1lbnQoKSkKICAgICAgICAgcmV0dXJuIG5pbDsKIAotICAgIEVsZW1lbnQqIHJvb3QgPSBz
ZWxlY3Rpb24oKS5zZWxlY3Rpb25UeXBlKCkgPT0gVmlzaWJsZVNlbGVjdGlvbjo6Tm9TZWxlY3Rp
b24gPyBkb2N1bWVudCgpLT5ib2R5KCkgOiBzZWxlY3Rpb24oKS5yb290RWRpdGFibGVFbGVtZW50
KCk7CisgICAgRWxlbWVudCogcm9vdCA9IHNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnNlbGVjdGlv
blR5cGUoKSA9PSBWaXNpYmxlU2VsZWN0aW9uOjpOb1NlbGVjdGlvbiA/IGRvY3VtZW50KCktPmJv
ZHkoKSA6IHNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsKICAg
ICB1bnNpZ25lZCByb290Q2hpbGRDb3VudCA9IHJvb3QtPmNoaWxkTm9kZUNvdW50KCk7CiAgICAg
UmVmUHRyPFJhbmdlPiByYW5nZU9mUm9vdENvbnRlbnRzID0gUmFuZ2U6OmNyZWF0ZSgqZG9jdW1l
bnQoKSwgY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKHJvb3QsIDApLCBjcmVhdGVMZWdhY3lF
ZGl0aW5nUG9zaXRpb24ocm9vdCwgcm9vdENoaWxkQ291bnQpKTsKIApJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCShyZXZpc2lvbiAxNjMxMjgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
NDQ0LDcgKzI0NDQsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpwYWludENhcmV0KFBhaW50SW5mbyYg
CiAgICAgYm9vbCBpc0NvbnRlbnRFZGl0YWJsZTsKICAgICBpZiAodHlwZSA9PSBDdXJzb3JDYXJl
dCkgewogICAgICAgICBjYXJldFBhaW50ZXIgPSBmcmFtZSgpLnNlbGVjdGlvbigpLmNhcmV0UmVu
ZGVyZXIoKTsKLSAgICAgICAgaXNDb250ZW50RWRpdGFibGUgPSBmcmFtZSgpLnNlbGVjdGlvbigp
Lmhhc0VkaXRhYmxlU3R5bGUoKTsKKyAgICAgICAgaXNDb250ZW50RWRpdGFibGUgPSBmcmFtZSgp
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlzQ29udGVudEVkaXRhYmxlKCk7CiAgICAgfSBlbHNl
IHsKICAgICAgICAgY2FyZXRQYWludGVyID0gZnJhbWUoKS5wYWdlKCktPmRyYWdDYXJldENvbnRy
b2xsZXIoKS5jYXJldFJlbmRlcmVyKCk7CiAgICAgICAgIGlzQ29udGVudEVkaXRhYmxlID0gZnJh
bWUoKS5wYWdlKCktPmRyYWdDYXJldENvbnRyb2xsZXIoKS5pc0NvbnRlbnRFZGl0YWJsZSgpOwpJ
bmRleDogU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQyL0NoYW5nZUxvZwkocmV2aXNpb24gMTYzMTYzKQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjMgQEAKKzIwMTQtMDEtMzAgIFJ5b3N1a2Ug
Tml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmVtb3ZlIGlubGluZSBtZW1iZXIg
ZnVuY3Rpb25zIG9mIEZyYW1lU2VsZWN0aW9uIHRoYXQgYWNjZXNzIG1fc2VsZWN0aW9uCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjc5ODYKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvZ3RrL1dlYkVkaXRvckNsaWVudEd0ay5jcHA6CisgICAgICAgIChXZWJL
aXQ6OmNvbGxhcHNlU2VsZWN0aW9uKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
UGFnZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmVkaXRvclN0YXRlKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUGFnZTo6Y29uZmlybUNvbXBvc2l0aW9uKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUGFnZTo6c2V0Q29tcG9zaXRpb24pOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFn
ZS9pb3MvV2ViUGFnZUlPUy5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6c2V0Q29tcG9z
aXRpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjp1cGRhdGVTZWxlY3Rpb25XaXRoVG91
Y2hlcyk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpzZXRDb21wb3NpdGlvbik6CisgICAgICAgIChXZWJL
aXQ6OldlYlBhZ2U6OmdldEF0dHJpYnV0ZWRTdWJzdHJpbmdGcm9tUmFuZ2UpOgorCiAyMDE0LTAx
LTMwICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAgIEZp
eCBpT1MgV0syIGJ1aWxkIGFmdGVyIHIxNjMxNTYuCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYkNvcmVTdXBwb3J0L2d0ay9XZWJFZGl0b3JDbGllbnRHdGsuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvZ3RrL1dlYkVk
aXRvckNsaWVudEd0ay5jcHAJKHJldmlzaW9uIDE2MzEyOCkKKysrIFNvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvZ3RrL1dlYkVkaXRvckNsaWVudEd0ay5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE2Niw3ICsxNjYsOCBAQCBzdGF0aWMgdm9pZCBjb2xsYXBzZVNlbGVjdGlv
bihHdGtDbGlwYm9hCiAKICAgICAvLyBDb2xsYXBzZSB0aGUgc2VsZWN0aW9uIHdpdGhvdXQgY2xl
YXJpbmcgaXQuCiAgICAgQVNTRVJUKGZyYW1lKTsKLSAgICBmcmFtZS0+c2VsZWN0aW9uKCkuc2V0
QmFzZShmcmFtZS0+c2VsZWN0aW9uKCkuZXh0ZW50KCksIGZyYW1lLT5zZWxlY3Rpb24oKS5hZmZp
bml0eSgpKTsKKyAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBmcmFtZS0+
c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgZnJhbWUtPnNlbGVjdGlvbigpLnNldEJhc2Uo
c2VsZWN0aW9uLmV4dGVudCgpLCBzZWxlY3Rpb24uYWZmaW5pdHkoKSk7CiB9CiAjZW5kaWYKIApJ
bmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAko
cmV2aXNpb24gMTYzMTI4KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YlBhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NDMsMTYgKzY0MywxNyBAQCBFZGl0b3JTdGF0
ZSBXZWJQYWdlOjplZGl0b3JTdGF0ZSgpIGNvbnN0CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBy
ZXN1bHQuc2VsZWN0aW9uSXNOb25lID0gZnJhbWUuc2VsZWN0aW9uKCkuaXNOb25lKCk7Ci0gICAg
cmVzdWx0LnNlbGVjdGlvbklzUmFuZ2UgPSBmcmFtZS5zZWxlY3Rpb24oKS5pc1JhbmdlKCk7Ci0g
ICAgcmVzdWx0LmlzQ29udGVudEVkaXRhYmxlID0gZnJhbWUuc2VsZWN0aW9uKCkuaXNDb250ZW50
RWRpdGFibGUoKTsKLSAgICByZXN1bHQuaXNDb250ZW50UmljaGx5RWRpdGFibGUgPSBmcmFtZS5z
ZWxlY3Rpb24oKS5pc0NvbnRlbnRSaWNobHlFZGl0YWJsZSgpOwotICAgIHJlc3VsdC5pc0luUGFz
c3dvcmRGaWVsZCA9IGZyYW1lLnNlbGVjdGlvbigpLmlzSW5QYXNzd29yZEZpZWxkKCk7CisgICAg
Y29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0gZnJhbWUuc2VsZWN0aW9uKCkuc2Vs
ZWN0aW9uKCk7CisKKyAgICByZXN1bHQuc2VsZWN0aW9uSXNOb25lID0gc2VsZWN0aW9uLmlzTm9u
ZSgpOworICAgIHJlc3VsdC5zZWxlY3Rpb25Jc1JhbmdlID0gc2VsZWN0aW9uLmlzUmFuZ2UoKTsK
KyAgICByZXN1bHQuaXNDb250ZW50RWRpdGFibGUgPSBzZWxlY3Rpb24uaXNDb250ZW50RWRpdGFi
bGUoKTsKKyAgICByZXN1bHQuaXNDb250ZW50UmljaGx5RWRpdGFibGUgPSBzZWxlY3Rpb24uaXND
b250ZW50UmljaGx5RWRpdGFibGUoKTsKKyAgICByZXN1bHQuaXNJblBhc3N3b3JkRmllbGQgPSBz
ZWxlY3Rpb24uaXNJblBhc3N3b3JkRmllbGQoKTsKICAgICByZXN1bHQuaGFzQ29tcG9zaXRpb24g
PSBmcmFtZS5lZGl0b3IoKS5oYXNDb21wb3NpdGlvbigpOwogICAgIHJlc3VsdC5zaG91bGRJZ25v
cmVDb21wb3NpdGlvblNlbGVjdGlvbkNoYW5nZSA9IGZyYW1lLmVkaXRvcigpLmlnbm9yZUNvbXBv
c2l0aW9uU2VsZWN0aW9uQ2hhbmdlKCk7CiAKICNpZiBQTEFURk9STShJT1MpCi0gICAgRnJhbWVT
ZWxlY3Rpb24mIHNlbGVjdGlvbiA9IGZyYW1lLnNlbGVjdGlvbigpOwogICAgIGlmIChmcmFtZS5l
ZGl0b3IoKS5oYXNDb21wb3NpdGlvbigpKSB7CiAgICAgICAgIFJlZlB0cjxSYW5nZT4gY29tcG9z
aXRpb25SYW5nZSA9IGZyYW1lLmVkaXRvcigpLmNvbXBvc2l0aW9uUmFuZ2UoKTsKICAgICAgICAg
VmVjdG9yPFdlYkNvcmU6OlNlbGVjdGlvblJlY3Q+IGNvbXBvc2l0aW9uUmVjdHM7CkBAIC02NjYs
NyArNjY3LDcgQEAgRWRpdG9yU3RhdGUgV2ViUGFnZTo6ZWRpdG9yU3RhdGUoKSBjb25zdAogICAg
ICAgICByZXN1bHQubWFya2VkVGV4dCA9IHBsYWluVGV4dChjb21wb3NpdGlvblJhbmdlLmdldCgp
KTsKICAgICB9CiAgICAgaWYgKHNlbGVjdGlvbi5pc0NhcmV0KCkpIHsKLSAgICAgICAgcmVzdWx0
LmNhcmV0UmVjdEF0U3RhcnQgPSBzZWxlY3Rpb24uYWJzb2x1dGVDYXJldEJvdW5kcygpOworICAg
ICAgICByZXN1bHQuY2FyZXRSZWN0QXRTdGFydCA9IGZyYW1lLnNlbGVjdGlvbigpLmFic29sdXRl
Q2FyZXRCb3VuZHMoKTsKICAgICAgICAgcmVzdWx0LmNhcmV0UmVjdEF0RW5kID0gcmVzdWx0LmNh
cmV0UmVjdEF0U3RhcnQ7CiAgICAgICAgIGlmIChtX3Nob3VsZFJldHVybldvcmRBdFNlbGVjdGlv
bikKICAgICAgICAgICAgIHJlc3VsdC53b3JkQXRTZWxlY3Rpb24gPSBwbGFpblRleHQod29yZFJh
bmdlRnJvbVBvc2l0aW9uKHNlbGVjdGlvbi5zdGFydCgpKS5nZXQoKSk7CkBAIC0zODEyLDcgKzM4
MTMsNyBAQCB2b2lkIFdlYlBhZ2U6OmNvbmZpcm1Db21wb3NpdGlvbihjb25zdCBTCiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKLSAgICBFbGVtZW50KiBzY29wZSA9IHRhcmdldEZyYW1lLT5zZWxl
Y3Rpb24oKS5yb290RWRpdGFibGVFbGVtZW50KCk7CisgICAgRWxlbWVudCogc2NvcGUgPSB0YXJn
ZXRGcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkucm9vdEVkaXRhYmxlRWxlbWVudCgpOwog
ICAgIFJlZlB0cjxSYW5nZT4gc2VsZWN0aW9uUmFuZ2UgPSBUZXh0SXRlcmF0b3I6OnJhbmdlRnJv
bUxvY2F0aW9uQW5kTGVuZ3RoKHNjb3BlLCBzZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9uTGVuZ3Ro
KTsKICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKHNlbGVjdGlvblJhbmdlLCAiSW52YWxpZCBzZWxl
Y3Rpb246IFslbGxkOiVsbGRdIGluIHRleHQgb2YgbGVuZ3RoICVkIiwgc3RhdGljX2Nhc3Q8bG9u
ZyBsb25nPihzZWxlY3Rpb25TdGFydCksIHN0YXRpY19jYXN0PGxvbmcgbG9uZz4oc2VsZWN0aW9u
TGVuZ3RoKSwgc2NvcGUtPmlubmVyVGV4dCgpLmxlbmd0aCgpKTsKIApAQCAtMzgyNiw3ICszODI3
LDcgQEAgdm9pZCBXZWJQYWdlOjpjb25maXJtQ29tcG9zaXRpb24oY29uc3QgUwogdm9pZCBXZWJQ
YWdlOjpzZXRDb21wb3NpdGlvbihjb25zdCBTdHJpbmcmIHRleHQsIFZlY3RvcjxDb21wb3NpdGlv
blVuZGVybGluZT4gdW5kZXJsaW5lcywgdWludDY0X3Qgc2VsZWN0aW9uU3RhcnQsIHVpbnQ2NF90
IHNlbGVjdGlvbkVuZCwgdWludDY0X3QgcmVwbGFjZW1lbnRTdGFydCwgdWludDY0X3QgcmVwbGFj
ZW1lbnRMZW5ndGgpCiB7CiAgICAgRnJhbWUqIHRhcmdldEZyYW1lID0gdGFyZ2V0RnJhbWVGb3JF
ZGl0aW5nKHRoaXMpOwotICAgIGlmICghdGFyZ2V0RnJhbWUgfHwgIXRhcmdldEZyYW1lLT5zZWxl
Y3Rpb24oKS5pc0NvbnRlbnRFZGl0YWJsZSgpKSB7CisgICAgaWYgKCF0YXJnZXRGcmFtZSB8fCAh
dGFyZ2V0RnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlzQ29udGVudEVkaXRhYmxlKCkp
IHsKICAgICAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpFZGl0b3JTdGF0ZUNoYW5n
ZWQoZWRpdG9yU3RhdGUoKSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMzgzNSw3ICsz
ODM2LDcgQEAgdm9pZCBXZWJQYWdlOjpzZXRDb21wb3NpdGlvbihjb25zdCBTdHJpbgogICAgICAg
ICAvLyBUaGUgbGF5b3V0IG5lZWRzIHRvIGJlIHVwdG9kYXRlIGJlZm9yZSBzZXR0aW5nIGEgc2Vs
ZWN0aW9uCiAgICAgICAgIHRhcmdldEZyYW1lLT5kb2N1bWVudCgpLT51cGRhdGVMYXlvdXQoKTsK
IAotICAgICAgICBFbGVtZW50KiBzY29wZSA9IHRhcmdldEZyYW1lLT5zZWxlY3Rpb24oKS5yb290
RWRpdGFibGVFbGVtZW50KCk7CisgICAgICAgIEVsZW1lbnQqIHNjb3BlID0gdGFyZ2V0RnJhbWUt
PnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsKICAgICAgICAg
UmVmUHRyPFJhbmdlPiByZXBsYWNlbWVudFJhbmdlID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUZyb21M
b2NhdGlvbkFuZExlbmd0aChzY29wZSwgcmVwbGFjZW1lbnRTdGFydCwgcmVwbGFjZW1lbnRMZW5n
dGgpOwogICAgICAgICB0YXJnZXRGcmFtZS0+ZWRpdG9yKCkuc2V0SWdub3JlQ29tcG9zaXRpb25T
ZWxlY3Rpb25DaGFuZ2UodHJ1ZSk7CiAgICAgICAgIHRhcmdldEZyYW1lLT5zZWxlY3Rpb24oKS5z
ZXRTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbihyZXBsYWNlbWVudFJhbmdlLmdldCgpLCBTRUxf
REVGQVVMVF9BRkZJTklUWSkpOwpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL2lvcy9XZWJQYWdlSU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQkocmV2aXNpb24gMTYzMTI4KQorKysgU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCSh3b3JraW5n
IGNvcHkpCkBAIC05Niw3ICs5Niw3IEBAIHZvaWQgV2ViUGFnZTo6c2V0Q29tcG9zaXRpb24oY29u
c3QgU3RyaW4KIHsKICAgICBGcmFtZSYgZnJhbWUgPSBtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigp
LmZvY3VzZWRPck1haW5GcmFtZSgpOwogCi0gICAgaWYgKGZyYW1lLnNlbGVjdGlvbigpLmlzQ29u
dGVudEVkaXRhYmxlKCkpCisgICAgaWYgKGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlz
Q29udGVudEVkaXRhYmxlKCkpCiAgICAgICAgIGZyYW1lLmVkaXRvcigpLnNldENvbXBvc2l0aW9u
KHRleHQsIHVuZGVybGluZXMsIHNlbGVjdGlvblN0YXJ0LCBzZWxlY3Rpb25FbmQpOwogfQogCkBA
IC01OTAsNyArNTkwLDcgQEAgdm9pZCBXZWJQYWdlOjp1cGRhdGVTZWxlY3Rpb25XaXRoVG91Y2hl
cwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgICAgICBjYXNlIFdLU2VsZWN0aW9u
VG91Y2hFbmRlZDoKLSAgICAgICAgICAgIGlmIChmcmFtZS5zZWxlY3Rpb24oKS5pc0NvbnRlbnRF
ZGl0YWJsZSgpKSB7CisgICAgICAgICAgICBpZiAoZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9u
KCkuaXNDb250ZW50RWRpdGFibGUoKSkgewogICAgICAgICAgICAgICAgIHJlc3VsdCA9IGNsb3Nl
c3RXb3JkQm91bmRhcnlGb3JQb3NpdGlvbihwb3NpdGlvbik7CiAgICAgICAgICAgICAgICAgaWYg
KHJlc3VsdC5pc05vdE51bGwoKSkKICAgICAgICAgICAgICAgICAgICAgcmFuZ2UgPSBSYW5nZTo6
Y3JlYXRlKCpmcmFtZS5kb2N1bWVudCgpLCByZXN1bHQsIHJlc3VsdCk7CkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCShy
ZXZpc2lvbiAxNjMxMjgpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFj
L1dlYlBhZ2VNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTI2MCw3ICsyNjAsNyBAQCB2b2lkIFdl
YlBhZ2U6OnNldENvbXBvc2l0aW9uKGNvbnN0IFN0cmluCiB7CiAgICAgRnJhbWUmIGZyYW1lID0g
bV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKTsKIAotICAgIGlm
IChmcmFtZS5zZWxlY3Rpb24oKS5pc0NvbnRlbnRFZGl0YWJsZSgpKSB7CisgICAgaWYgKGZyYW1l
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlzQ29udGVudEVkaXRhYmxlKCkpIHsKICAgICAgICAg
UmVmUHRyPFJhbmdlPiByZXBsYWNlbWVudFJhbmdlOwogICAgICAgICBpZiAocmVwbGFjZW1lbnRS
YW5nZVN0YXJ0ICE9IE5TTm90Rm91bmQpIHsKICAgICAgICAgICAgIHJlcGxhY2VtZW50UmFuZ2Ug
PSBjb252ZXJ0VG9SYW5nZSgmZnJhbWUsIE5TTWFrZVJhbmdlKHJlcGxhY2VtZW50UmFuZ2VTdGFy
dCwgcmVwbGFjZW1lbnRSYW5nZUVuZCAtIHJlcGxhY2VtZW50UmFuZ2VTdGFydCkpOwpAQCAtMzYw
LDcgKzM2MCw4IEBAIHZvaWQgV2ViUGFnZTo6Z2V0QXR0cmlidXRlZFN1YnN0cmluZ0Zyb20KIHsK
ICAgICBGcmFtZSYgZnJhbWUgPSBtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1h
aW5GcmFtZSgpOwogCi0gICAgaWYgKGZyYW1lLnNlbGVjdGlvbigpLmlzTm9uZSgpIHx8ICFmcmFt
ZS5zZWxlY3Rpb24oKS5pc0NvbnRlbnRFZGl0YWJsZSgpIHx8IGZyYW1lLnNlbGVjdGlvbigpLmlz
SW5QYXNzd29yZEZpZWxkKCkpCisgICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9u
ID0gZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgaWYgKHNlbGVjdGlvbi5pc05v
bmUoKSB8fCAhc2VsZWN0aW9uLmlzQ29udGVudEVkaXRhYmxlKCkgfHwgc2VsZWN0aW9uLmlzSW5Q
YXNzd29yZEZpZWxkKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIE5TUmFuZ2UgbnNSYW5nZSA9
IE5TTWFrZVJhbmdlKGxvY2F0aW9uLCBsZW5ndGggLSBsb2NhdGlvbik7CkluZGV4OiBTb3VyY2Uv
V2ViS2l0L2VmbC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9lZmwvQ2hh
bmdlTG9nCShyZXZpc2lvbiAxNjMxNjMpCisrKyBTb3VyY2UvV2ViS2l0L2VmbC9DaGFuZ2VMb2cJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMyBAQAorMjAxNC0wMS0zMCAgUnlvc3VrZSBOaXdh
ICA8cm5pd2FAd2Via2l0Lm9yZz4KKworICAgICAgICBSZW1vdmUgaW5saW5lIG1lbWJlciBmdW5j
dGlvbnMgb2YgRnJhbWVTZWxlY3Rpb24gdGhhdCBhY2Nlc3MgbV9zZWxlY3Rpb24KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNzk4NgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogZXdrL2V3a19mcmFtZS5j
cHA6CisgICAgICAgIChld2tfZnJhbWVfdGV4dF9zZWxlY3Rpb25fdHlwZV9nZXQpOgorCiAyMDE0
LTAxLTMwICBBbmRyZWkgQnVjdXIgIDxhYnVjdXJAYWRvYmUuY29tPgogCiAgICAgICAgIFJlbW92
ZSB0aGUgQUNDRUxFUkFURURfQ09NUE9TSVRJTkcgZmxhZwpJbmRleDogU291cmNlL1dlYktpdC9l
ZmwvV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L2VmbC9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBv
cnRFZmwuY3BwCShyZXZpc2lvbiAxNjMxMjgpCisrKyBTb3VyY2UvV2ViS2l0L2VmbC9XZWJDb3Jl
U3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02
MSw2ICs2MSw3IEBACiAjaW5jbHVkZSA8U2NyaXB0Q29udHJvbGxlci5oPgogI2luY2x1ZGUgPFNl
dHRpbmdzLmg+CiAjaW5jbHVkZSA8VGV4dEl0ZXJhdG9yLmg+CisjaW5jbHVkZSA8VmlzaWJsZVNl
bGVjdGlvbi5oPgogI2luY2x1ZGUgPGJpbmRpbmdzL1NjcmlwdFZhbHVlLmg+CiAjaW5jbHVkZSA8
YmluZGluZ3MvanMvR0NDb250cm9sbGVyLmg+CiAjaW5jbHVkZSA8aGlzdG9yeS9IaXN0b3J5SXRl
bS5oPgpAQCAtNjM5LDExICs2NDAsMTIgQEAgYm9vbCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6
OnNlbGVjdGVkUgogICAgIERSVF9TVVBQUlRfUEFHRV9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHBh
Z2UsIGZhbHNlKTsKIAogICAgIFdlYkNvcmU6OkZyYW1lJiBmcmFtZSA9IHBhZ2UtPmZvY3VzQ29u
dHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpOwotICAgIFJlZlB0cjxXZWJDb3JlOjpSYW5n
ZT4gcmFuZ2UgPSBmcmFtZS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpOwor
ICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9IGZyYW1lLnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpOworICAgIFJlZlB0cjxXZWJDb3JlOjpSYW5nZT4gcmFuZ2UgPSBzZWxlY3Rp
b24udG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKTsKICAgICBpZiAoIXJhbmdlKQogICAgICAgICBy
ZXR1cm4gZmFsc2U7CiAKLSAgICBXZWJDb3JlOjpFbGVtZW50KiBzZWxlY3Rpb25Sb290ID0gZnJh
bWUuc2VsZWN0aW9uKCkucm9vdEVkaXRhYmxlRWxlbWVudCgpOworICAgIFdlYkNvcmU6OkVsZW1l
bnQqIHNlbGVjdGlvblJvb3QgPSBzZWxlY3Rpb24ucm9vdEVkaXRhYmxlRWxlbWVudCgpOwogICAg
IFdlYkNvcmU6OkVsZW1lbnQqIHNjb3BlID0gc2VsZWN0aW9uUm9vdCA/IHNlbGVjdGlvblJvb3Qg
OiBmcmFtZS5kb2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKTsKIAogICAgIFJlZlB0cjxXZWJD
b3JlOjpSYW5nZT4gdGVzdFJhbmdlID0gV2ViQ29yZTo6UmFuZ2U6OmNyZWF0ZShzY29wZS0+ZG9j
dW1lbnQoKSwgc2NvcGUsIDAsIHJhbmdlLT5zdGFydENvbnRhaW5lcigpLCByYW5nZS0+c3RhcnRP
ZmZzZXQoKSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX2ZyYW1lLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX2ZyYW1lLmNwcAkocmV2aXNpb24g
MTYzMTI4KQorKysgU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19mcmFtZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEwNzMsOSArMTA3Myw5IEBAIEV3a19UZXh0X1NlbGVjdGlvbl9UeXBlIGV3a19m
cmFtZV90ZXh0X3MKICAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tGcmFtZSwgc21h
cnREYXRhLCBFV0tfVEVYVF9TRUxFQ1RJT05fTk9ORSk7CiAgICAgRUlOQV9TQUZFVFlfT05fTlVM
TF9SRVRVUk5fVkFMKHNtYXJ0RGF0YS0+ZnJhbWUsIEVXS19URVhUX1NFTEVDVElPTl9OT05FKTsK
IAotICAgIFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uJiBjb250cm9sbGVyID0gc21hcnREYXRhLT5m
cmFtZS0+c2VsZWN0aW9uKCk7CisgICAgY29uc3QgV2ViQ29yZTo6VmlzaWJsZVNlbGVjdGlvbiYg
c2VsZWN0aW9uID0gc21hcnREYXRhLT5mcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CiAK
LSAgICBzd2l0Y2ggKGNvbnRyb2xsZXIuc2VsZWN0aW9uVHlwZSgpKSB7CisgICAgc3dpdGNoIChz
ZWxlY3Rpb24uc2VsZWN0aW9uVHlwZSgpKSB7CiAgICAgY2FzZSBXZWJDb3JlOjpWaXNpYmxlU2Vs
ZWN0aW9uOjpOb1NlbGVjdGlvbjoKICAgICAgICAgcmV0dXJuIEVXS19URVhUX1NFTEVDVElPTl9O
T05FOwogICAgIGNhc2UgV2ViQ29yZTo6VmlzaWJsZVNlbGVjdGlvbjo6Q2FyZXRTZWxlY3Rpb246
CkluZGV4OiBTb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9ndGsvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNjMxNjMpCisrKyBTb3VyY2UvV2ViS2l0
L2d0ay9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMyBAQAorMjAxNC0wMS0z
MCAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KKworICAgICAgICBSZW1vdmUgaW5s
aW5lIG1lbWJlciBmdW5jdGlvbnMgb2YgRnJhbWVTZWxlY3Rpb24gdGhhdCBhY2Nlc3MgbV9zZWxl
Y3Rpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEy
Nzk4NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
V2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50R3RrLmNwcDoKKyAgICAgICAgKFdlYktpdDo6Y29s
bGFwc2VTZWxlY3Rpb24pOgorCiAyMDE0LTAxLTMwICBBbmRyZWkgQnVjdXIgIDxhYnVjdXJAYWRv
YmUuY29tPgogCiAgICAgICAgIFJlbW92ZSB0aGUgQUNDRUxFUkFURURfQ09NUE9TSVRJTkcgZmxh
ZwpJbmRleDogU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVT
dXBwb3J0R3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3Vw
cG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGsuY3BwCShyZXZpc2lvbiAxNjMxMjgpCisrKyBT
b3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGsu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw2ICs2Nyw3IEBACiAjaW5jbHVkZSAiU2VjdXJpdHlQ
b2xpY3kuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlRleHRJdGVyYXRvci5o
IgorI2luY2x1ZGUgIlZpc2libGVTZWxlY3Rpb24uaCIKICNpbmNsdWRlICJXZWJLaXRBY2Nlc3Np
YmxlV3JhcHBlckF0ay5oIgogI2luY2x1ZGUgIndlYmtpdGdsb2JhbHNwcml2YXRlLmgiCiAjaW5j
bHVkZSAid2Via2l0d2ViZnJhbWUuaCIKQEAgLTM4OSwxMSArMzkwLDEyIEBAIGJvb2wgRHVtcFJl
bmRlclRyZWVTdXBwb3J0R3RrOjpzZWxlY3RlZFIKIAogICAgIEZyYW1lJiBmcmFtZSA9IGNvcmUo
d2ViVmlldyktPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpOwogCi0gICAg
UmVmUHRyPFJhbmdlPiByYW5nZSA9IGZyYW1lLnNlbGVjdGlvbigpLnRvTm9ybWFsaXplZFJhbmdl
KCkuZ2V0KCk7CisgICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0gZnJhbWUu
c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IHNlbGVj
dGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpOwogICAgIGlmICghcmFuZ2UpCiAgICAgICAg
IHJldHVybiBmYWxzZTsKIAotICAgIEVsZW1lbnQqIHNlbGVjdGlvblJvb3QgPSBmcmFtZS5zZWxl
Y3Rpb24oKS5yb290RWRpdGFibGVFbGVtZW50KCk7CisgICAgRWxlbWVudCogc2VsZWN0aW9uUm9v
dCA9IHNlbGVjdGlvbi5yb290RWRpdGFibGVFbGVtZW50KCk7CiAgICAgRWxlbWVudCogc2NvcGUg
PSBzZWxlY3Rpb25Sb290ID8gc2VsZWN0aW9uUm9vdCA6IGZyYW1lLmRvY3VtZW50KCktPmRvY3Vt
ZW50RWxlbWVudCgpOwogCiAgICAgUmVmUHRyPFJhbmdlPiB0ZXN0UmFuZ2UgPSBSYW5nZTo6Y3Jl
YXRlKHNjb3BlLT5kb2N1bWVudCgpLCBzY29wZSwgMCwgcmFuZ2UtPnN0YXJ0Q29udGFpbmVyKCks
IHJhbmdlLT5zdGFydE9mZnNldCgpKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVT
dXBwb3J0L0VkaXRvckNsaWVudEd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9n
dGsvV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50R3RrLmNwcAkocmV2aXNpb24gMTYzMTI4KQor
KysgU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50R3RrLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjE2LDcgKzIxNiw4IEBAIHN0YXRpYyB2b2lkIGNvbGxhcHNlU2Vs
ZWN0aW9uKEd0a0NsaXBib2EKICAgICBGcmFtZSYgZnJhbWUgPSBjb3JlUGFnZS0+Zm9jdXNDb250
cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCk7CiAKICAgICAvLyBDb2xsYXBzZSB0aGUgc2Vs
ZWN0aW9uIHdpdGhvdXQgY2xlYXJpbmcgaXQKLSAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRCYXNl
KGZyYW1lLnNlbGVjdGlvbigpLmV4dGVudCgpLCBmcmFtZS5zZWxlY3Rpb24oKS5hZmZpbml0eSgp
KTsKKyAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBmcmFtZS5zZWxlY3Rp
b24oKTsKKyAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRCYXNlKHNlbGVjdGlvbi5leHRlbnQoKSwg
c2VsZWN0aW9uLmFmZmluaXR5KCkpOwogfQogCiAjaWYgUExBVEZPUk0oWDExKQpJbmRleDogU291
cmNlL1dlYktpdC9pb3MvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvaW9z
L0NoYW5nZUxvZwkocmV2aXNpb24gMTYzMTYzKQorKysgU291cmNlL1dlYktpdC9pb3MvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTQtMDEtMzAgIFJ5b3N1a2Ug
Tml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmVtb3ZlIGlubGluZSBtZW1iZXIg
ZnVuY3Rpb25zIG9mIEZyYW1lU2VsZWN0aW9uIHRoYXQgYWNjZXNzIG1fc2VsZWN0aW9uCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjc5ODYKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYkNvcmVTdXBw
b3J0L1dlYkZyYW1lSU9TLm1tOgorICAgICAgICAoLVtXZWJGcmFtZSBzZXRCYXNlV3JpdGluZ0Rp
cmVjdGlvbjpdKToKKwogMjAxNC0wMS0zMCAgQW5kcmVpIEJ1Y3VyICA8YWJ1Y3VyQGFkb2JlLmNv
bT4KIAogICAgICAgICBSZW1vdmUgdGhlIEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HIGZsYWcKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQvaW9zL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lSU9TLm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvaW9zL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lSU9TLm1t
CShyZXZpc2lvbiAxNjMxMjgpCisrKyBTb3VyY2UvV2ViS2l0L2lvcy9XZWJDb3JlU3VwcG9ydC9X
ZWJGcmFtZUlPUy5tbQkod29ya2luZyBjb3B5KQpAQCAtNTc1LDcgKzU3NSw3IEBAIC0gKHZvaWQp
c2V0QmFzZVdyaXRpbmdEaXJlY3Rpb246KFdLV3JpdGkKICAgICBXS1dyaXRpbmdEaXJlY3Rpb24g
b3JpZ2luYWxEaXJlY3Rpb24gPSBbc2VsZiBzZWxlY3Rpb25CYXNlV3JpdGluZ0RpcmVjdGlvbl07
CiAKICAgICBGcmFtZSAqZnJhbWUgPSBbc2VsZiBjb3JlRnJhbWVdOwotICAgIGlmICghZnJhbWUt
PnNlbGVjdGlvbigpLmlzQ29udGVudEVkaXRhYmxlKCkpCisgICAgaWYgKCFmcmFtZS0+c2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCkuaXNDb250ZW50RWRpdGFibGUoKSkKICAgICAgICAgcmV0dXJuOwog
ICAgIAogICAgIFdyaXRpbmdEaXJlY3Rpb24gd2NEaXJlY3Rpb24gPSBMZWZ0VG9SaWdodFdyaXRp
bmdEaXJlY3Rpb247CkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNjMxNjMpCisrKyBT
b3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwyOCBA
QAorMjAxNC0wMS0zMCAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KKworICAgICAg
ICBSZW1vdmUgaW5saW5lIG1lbWJlciBmdW5jdGlvbnMgb2YgRnJhbWVTZWxlY3Rpb24gdGhhdCBh
Y2Nlc3MgbV9zZWxlY3Rpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTEyNzk4NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgor
CisgICAgICAgICogV2ViVmlldy9XZWJGcmFtZS5tbToKKyAgICAgICAgKC1bV2ViRnJhbWUgaGFz
RWRpdGFibGVTZWxlY3Rpb25dKToKKyAgICAgICAgKC1bV2ViRnJhbWUgc2VsZWN0aW9uQWZmaW5p
dHldKToKKyAgICAgICAgKC1bV2ViRnJhbWUgZ2V0RGljdGF0aW9uUmVzdWx0UmFuZ2VzOmFuZE1l
dGFkYXRhczpdKToKKyAgICAgICAgKC1bV2ViRnJhbWUgZm9jdXNlZE5vZGVIYXNDb250ZW50XSk6
CisgICAgICAgICogV2ViVmlldy9XZWJIVE1MVmlldy5tbToKKyAgICAgICAgKC1bV2ViSFRNTFZp
ZXcgcmVhZFNlbGVjdGlvbkZyb21QYXN0ZWJvYXJkOl0pOgorICAgICAgICAoLVtXZWJIVE1MVmll
dyBfaGFzU2VsZWN0aW9uXSk6CisgICAgICAgICgtW1dlYkhUTUxWaWV3IF9oYXNTZWxlY3Rpb25P
ckluc2VydGlvblBvaW50XSk6CisgICAgICAgICgtW1dlYkhUTUxWaWV3IF9oYXNJbnNlcnRpb25Q
b2ludF0pOgorICAgICAgICAoLVtXZWJIVE1MVmlldyBfaXNFZGl0YWJsZV0pOgorICAgICAgICAo
LVtXZWJIVE1MVmlldyB2YWxpZGF0ZVVzZXJJbnRlcmZhY2VJdGVtV2l0aG91dERlbGVnYXRlOl0p
OgorICAgICAgICAoLVtXZWJIVE1MVmlldyBtYWludGFpbnNJbmFjdGl2ZVNlbGVjdGlvbl0pOgor
ICAgICAgICAoaXNUZXh0SW5wdXQpOgorICAgICAgICAoaXNJblBhc3N3b3JkRmllbGQpOgorICAg
ICAgICAqIFdlYlZpZXcvV2ViVmlldy5tbToKKyAgICAgICAgKC1bV2ViVmlldyBzZWxlY3Rpb25B
ZmZpbml0eV0pOgorCiAyMDE0LTAxLTMwICBEYXZpZCBLaWx6ZXIgIDxkZGtpbHplckBhcHBsZS5j
b20+CiAKICAgICAgICAgQWRkIHNlY3VyaXR5LWNoZWNrZWQgY2FzdCBmb3IgV2ViQ29yZTo6Q2Fj
aGVkSW1hZ2UKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJhbWUubW0KPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQkocmV2aXNp
b24gMTYzMTI4KQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZS5tbQkod29y
a2luZyBjb3B5KQpAQCAtMTM0OCw3ICsxMzQ4LDcgQEAgLSAodm9pZClyZXNldFNlbGVjdGlvbgog
LSAoQk9PTCloYXNFZGl0YWJsZVNlbGVjdGlvbgogewogICAgIFdlYkNvcmU6OkZyYW1lICpmcmFt
ZSA9IGNvcmUoc2VsZik7Ci0gICAgcmV0dXJuIGZyYW1lLT5zZWxlY3Rpb24oKS5pc0NvbnRlbnRF
ZGl0YWJsZSgpOworICAgIHJldHVybiBmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXND
b250ZW50RWRpdGFibGUoKTsKIH0KIAogLSAoaW50KXByZWZlcnJlZEhlaWdodApAQCAtMTQ3Myw3
ICsxNDczLDcgQEAgLSAodm9pZClzZXRTZWxlY3RlZERPTVJhbmdlOihET01SYW5nZSAqKQogLSAo
TlNTZWxlY3Rpb25BZmZpbml0eSlzZWxlY3Rpb25BZmZpbml0eQogewogICAgIFdlYkNvcmU6OkZy
YW1lICpmcmFtZSA9IGNvcmUoc2VsZik7Ci0gICAgcmV0dXJuIChOU1NlbGVjdGlvbkFmZmluaXR5
KShmcmFtZS0+c2VsZWN0aW9uKCkuYWZmaW5pdHkoKSk7CisgICAgcmV0dXJuIChOU1NlbGVjdGlv
bkFmZmluaXR5KShmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuYWZmaW5pdHkoKSk7CiB9
CiAKIC0gKHZvaWQpZXhwYW5kU2VsZWN0aW9uVG9FbGVtZW50Q29udGFpbmluZ0NhcmV0U2VsZWN0
aW9uCkBAIC0xNzE0LDggKzE3MTQsOSBAQCAtICh2b2lkKWdldERpY3RhdGlvblJlc3VsdFJhbmdl
czooTlNBcnJhCiAgICAgCiAgICAgRnJhbWUgKmZyYW1lID0gY29yZShzZWxmKTsKICAgICBEb2N1
bWVudCAqZG9jdW1lbnQgPSBmcmFtZS0+ZG9jdW1lbnQoKTsKLSAgICAKLSAgICBFbGVtZW50ICpy
b290ID0gZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvblR5cGUoKSA9PSBWaXNpYmxlU2VsZWN0
aW9uOjpOb1NlbGVjdGlvbiA/IGZyYW1lLT5kb2N1bWVudCgpLT5ib2R5KCkgOiBmcmFtZS0+c2Vs
ZWN0aW9uKCkucm9vdEVkaXRhYmxlRWxlbWVudCgpOworCisgICAgY29uc3QgVmlzaWJsZVNlbGVj
dGlvbiYgc2VsZWN0aW9uID0gZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgIEVs
ZW1lbnQgKnJvb3QgPSBzZWxlY3Rpb24uc2VsZWN0aW9uVHlwZSgpID09IFZpc2libGVTZWxlY3Rp
b246Ok5vU2VsZWN0aW9uID8gZnJhbWUtPmRvY3VtZW50KCktPmJvZHkoKSA6IHNlbGVjdGlvbi5y
b290RWRpdGFibGVFbGVtZW50KCk7CiAgICAgCiAgICAgRE9NUmFuZ2UgKnByZXZpb3VzRE9NUmFu
Z2UgPSBuaWw7CiAgICAgaWQgcHJldmlvdXNNZXRhZGF0YSA9IG5pbDsKQEAgLTIyNzEsMTEgKzIy
NzIsMTIgQEAgLSAoQk9PTClmb2N1c2VkTm9kZUhhc0NvbnRlbnQKICAgICBGcmFtZSogY29yZUZy
YW1lID0gX3ByaXZhdGUtPmNvcmVGcmFtZTsKICAgIAogICAgIEVsZW1lbnQqIHJvb3Q7Ci0gICAg
aWYgKGNvcmVGcmFtZS0+c2VsZWN0aW9uKCkuaXNOb25lKCkgfHwgIWNvcmVGcmFtZS0+c2VsZWN0
aW9uKCkuaXNDb250ZW50RWRpdGFibGUoKSkKKyAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBz
ZWxlY3Rpb24gPSBjb3JlRnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgIGlmIChz
ZWxlY3Rpb24uaXNOb25lKCkgfHwgIXNlbGVjdGlvbi5pc0NvbnRlbnRFZGl0YWJsZSgpKQogICAg
ICAgICByb290ID0gY29yZUZyYW1lLT5kb2N1bWVudCgpLT5ib2R5KCk7CiAgICAgZWxzZSB7CiAg
ICAgICAgIC8vIENhbid0IHVzZSB0aGUgZm9jdXNlZE5vZGUgaGVyZSBiZWNhdXNlIHdlIHdhbnQg
dGhlIHJvb3Qgb2YgdGhlIHNoYWRvdyB0cmVlIGZvciBmb3JtIGVsZW1lbnRzLgotICAgICAgICBy
b290ID0gY29yZUZyYW1lLT5zZWxlY3Rpb24oKS5yb290RWRpdGFibGVFbGVtZW50KCk7CisgICAg
ICAgIHJvb3QgPSBzZWxlY3Rpb24ucm9vdEVkaXRhYmxlRWxlbWVudCgpOwogICAgIH0KICAgICAv
LyBFYXJseSByZXR1cm4gdG8gYXZvaWQgdGhlIGV4cGVuc2Ugb2YgY3JlYXRpbmcgVmlzaWJsZVBv
c2l0aW9ucy4KICAgICAvLyBGSVhNRTogV2UgZmFpbCB0byBjb21wdXRlIGEgcm9vdCBmb3IgU1ZH
LCB3ZSBoYXZlIGEgbnVsbCBjaGVjayBoZXJlIHNvIHRoYXQgd2UgZG9uJ3QgY3Jhc2guCkluZGV4
OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0JKHJldmlzaW9uIDE2MzEy
OCkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0JKHdvcmtpbmcg
Y29weSkKQEAgLTEwMDEsNyArMTAwMSw3IEBAIC0gKEJPT0wpcmVhZFNlbGVjdGlvbkZyb21QYXN0
ZWJvYXJkOihOU1AKICAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsg
CiAgICAgaWYgKCFjb3JlRnJhbWUpIAogICAgICAgICByZXR1cm4gTk87IAotICAgIGlmIChjb3Jl
RnJhbWUtPnNlbGVjdGlvbigpLmlzQ29udGVudFJpY2hseUVkaXRhYmxlKCkpCisgICAgaWYgKGNv
cmVGcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNDb250ZW50UmljaGx5RWRpdGFibGUo
KSkKICAgICAgICAgW3NlbGYgX3Bhc3RlV2l0aFBhc3RlYm9hcmQ6cGFzdGVib2FyZCBhbGxvd1Bs
YWluVGV4dDpZRVNdOyAKICAgICBlbHNlIAogICAgICAgICBbc2VsZiBfcGFzdGVBc1BsYWluVGV4
dFdpdGhQYXN0ZWJvYXJkOnBhc3RlYm9hcmRdOyAKQEAgLTE5ODYsMjUgKzE5ODYsMjUgQEAgLSAo
Qk9PTClfY2FuQWx0ZXJDdXJyZW50U2VsZWN0aW9uCiAtIChCT09MKV9oYXNTZWxlY3Rpb24KIHsK
ICAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKLSAgICByZXR1cm4g
Y29yZUZyYW1lICYmIGNvcmVGcmFtZS0+c2VsZWN0aW9uKCkuaXNSYW5nZSgpOworICAgIHJldHVy
biBjb3JlRnJhbWUgJiYgY29yZUZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc1Jhbmdl
KCk7CiB9CiAKIC0gKEJPT0wpX2hhc1NlbGVjdGlvbk9ySW5zZXJ0aW9uUG9pbnQKIHsKICAgICBG
cmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKLSAgICByZXR1cm4gY29yZUZy
YW1lICYmIGNvcmVGcmFtZS0+c2VsZWN0aW9uKCkuaXNDYXJldE9yUmFuZ2UoKTsKKyAgICByZXR1
cm4gY29yZUZyYW1lICYmIGNvcmVGcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNDYXJl
dE9yUmFuZ2UoKTsKIH0KIAogLSAoQk9PTClfaGFzSW5zZXJ0aW9uUG9pbnQKIHsKICAgICBGcmFt
ZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKLSAgICByZXR1cm4gY29yZUZyYW1l
ICYmIGNvcmVGcmFtZS0+c2VsZWN0aW9uKCkuaXNDYXJldCgpOworICAgIHJldHVybiBjb3JlRnJh
bWUgJiYgY29yZUZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0NhcmV0KCk7CiB9CiAK
IC0gKEJPT0wpX2lzRWRpdGFibGUKIHsKICAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2Vs
ZiBfZnJhbWVdKTsKLSAgICByZXR1cm4gY29yZUZyYW1lICYmIGNvcmVGcmFtZS0+c2VsZWN0aW9u
KCkuaXNDb250ZW50RWRpdGFibGUoKTsKKyAgICByZXR1cm4gY29yZUZyYW1lICYmIGNvcmVGcmFt
ZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNDb250ZW50RWRpdGFibGUoKTsKIH0KIAogLSAo
Qk9PTClfdHJhbnNwYXJlbnRCYWNrZ3JvdW5kCkBAIC0yODk5LDcgKzI4OTksNyBAQCAtIChCT09M
KXZhbGlkYXRlVXNlckludGVyZmFjZUl0ZW1XaXRob3V0CiAgICAgCiAgICAgaWYgKGFjdGlvbiA9
PSBAc2VsZWN0b3IocGFzdGVBc1JpY2hUZXh0OikpCiAgICAgICAgIHJldHVybiBmcmFtZSAmJiAo
ZnJhbWUtPmVkaXRvcigpLmNhbkRIVE1MUGFzdGUoKQotICAgICAgICAgICAgfHwgKGZyYW1lLT5l
ZGl0b3IoKS5jYW5QYXN0ZSgpICYmIGZyYW1lLT5zZWxlY3Rpb24oKS5pc0NvbnRlbnRSaWNobHlF
ZGl0YWJsZSgpKSk7CisgICAgICAgICAgICB8fCAoZnJhbWUtPmVkaXRvcigpLmNhblBhc3RlKCkg
JiYgZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlzQ29udGVudFJpY2hseUVkaXRhYmxl
KCkpKTsKICAgICAKICAgICBpZiAoYWN0aW9uID09IEBzZWxlY3RvcihwZXJmb3JtRmluZFBhbmVs
QWN0aW9uOikpCiAgICAgICAgIHJldHVybiBOTzsKQEAgLTMwMjYsNyArMzAyNiw3IEBAIC0gKEJP
T0wpbWFpbnRhaW5zSW5hY3RpdmVTZWxlY3Rpb24KICAgICAgICAgcmV0dXJuIFlFUzsKICAgICAK
ICAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKLSAgICByZXR1cm4g
Y29yZUZyYW1lICYmIGNvcmVGcmFtZS0+c2VsZWN0aW9uKCkuaXNDb250ZW50RWRpdGFibGUoKTsK
KyAgICByZXR1cm4gY29yZUZyYW1lICYmIGNvcmVGcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9u
KCkuaXNDb250ZW50RWRpdGFibGUoKTsKICNlbHNlCiAgICAgLy8gVGhpcyBtZXRob2QgaGVscHMg
dG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIFdlYkhUTUxWaWV3IHNob3VsZCBtYWludGFpbgogICAg
IC8vIGFuIGluYWN0aXZlIHNlbGVjdGlvbiB3aGVuIGl0J3Mgbm90IGZpcnN0IHJlc3BvbmRlci4K
QEAgLTMwNTcsNyArMzA1Nyw3IEBAIC0gKEJPT0wpbWFpbnRhaW5zSW5hY3RpdmVTZWxlY3Rpb24K
ICAgICAgICAgcmV0dXJuIFlFUzsKIAogICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBjb3JlKFtzZWxm
IF9mcmFtZV0pOwotICAgIGJvb2wgc2VsZWN0aW9uSXNFZGl0YWJsZSA9IGNvcmVGcmFtZSAmJiBj
b3JlRnJhbWUtPnNlbGVjdGlvbigpLmlzQ29udGVudEVkaXRhYmxlKCk7CisgICAgYm9vbCBzZWxl
Y3Rpb25Jc0VkaXRhYmxlID0gY29yZUZyYW1lICYmIGNvcmVGcmFtZS0+c2VsZWN0aW9uKCkuc2Vs
ZWN0aW9uKCkuaXNDb250ZW50RWRpdGFibGUoKTsKICAgICBib29sIG5leHRSZXNwb25kZXJJc0lu
V2ViVmlldyA9IFtuZXh0UmVzcG9uZGVyIGlzS2luZE9mQ2xhc3M6W05TVmlldyBjbGFzc11dCiAg
ICAgICAgICYmIFtuZXh0UmVzcG9uZGVyIGlzRGVzY2VuZGFudE9mOltbW3NlbGYgX3dlYlZpZXdd
IG1haW5GcmFtZV0gZnJhbWVWaWV3XV07CiAKQEAgLTQxMzcsMTMgKzQxMzcsMTYgQEAgLSAoQk9P
TCluZWVkc1BhbmVsVG9CZWNvbWVLZXkKIC8vIEFQSSB3aGVuIGFuIGVkaXRhYmxlIHJlZ2lvbiBp
cyBub3QgY3VycmVudGx5IGZvY3VzZWQuCiBzdGF0aWMgQk9PTCBpc1RleHRJbnB1dChGcmFtZSog
Y29yZUZyYW1lKQogewotICAgIHJldHVybiBjb3JlRnJhbWUgJiYgIWNvcmVGcmFtZS0+c2VsZWN0
aW9uKCkuaXNOb25lKCkgJiYgY29yZUZyYW1lLT5zZWxlY3Rpb24oKS5pc0NvbnRlbnRFZGl0YWJs
ZSgpOworICAgIGlmICghY29yZUZyYW1lKQorICAgICAgICByZXR1cm4gTk87CisgICAgY29uc3Qg
VmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0gY29yZUZyYW1lLT5zZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKTsKKyAgICByZXR1cm4gIXNlbGVjdGlvbi5pc05vbmUoKSAmJiBzZWxlY3Rpb24uaXND
b250ZW50RWRpdGFibGUoKTsKIH0KIAogI2lmICFQTEFURk9STShJT1MpCiBzdGF0aWMgQk9PTCBp
c0luUGFzc3dvcmRGaWVsZChGcmFtZSogY29yZUZyYW1lKQogewotICAgIHJldHVybiBjb3JlRnJh
bWUgJiYgY29yZUZyYW1lLT5zZWxlY3Rpb24oKS5pc0luUGFzc3dvcmRGaWVsZCgpOworICAgIHJl
dHVybiBjb3JlRnJhbWUgJiYgY29yZUZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0lu
UGFzc3dvcmRGaWVsZCgpOwogfQogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dl
YlZpZXcvV2ViVmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3
L1dlYlZpZXcubW0JKHJldmlzaW9uIDE2MzEyOCkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZp
ZXcvV2ViVmlldy5tbQkod29ya2luZyBjb3B5KQpAQCAtNzI0NCw3ICs3MjQ0LDcgQEAgLSAoTlNT
ZWxlY3Rpb25BZmZpbml0eSlzZWxlY3Rpb25BZmZpbml0eQogICAgIEZyYW1lKiBjb3JlRnJhbWUg
PSBjb3JlKFtzZWxmIF9zZWxlY3RlZE9yTWFpbkZyYW1lXSk7CiAgICAgaWYgKCFjb3JlRnJhbWUp
CiAgICAgICAgIHJldHVybiBOU1NlbGVjdGlvbkFmZmluaXR5RG93bnN0cmVhbTsKLSAgICByZXR1
cm4ga2l0KGNvcmVGcmFtZS0+c2VsZWN0aW9uKCkuYWZmaW5pdHkoKSk7CisgICAgcmV0dXJuIGtp
dChjb3JlRnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmFmZmluaXR5KCkpOwogfQogCiAt
ICh2b2lkKXNldEVkaXRhYmxlOihCT09MKWZsYWcK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>222861</attachid>
            <date>2014-01-31 15:45:00 -0800</date>
            <delta_ts>2014-01-31 16:37:06 -0800</delta_ts>
            <desc>Fix EFL build</desc>
            <filename>bug-127986-20140131154500.patch</filename>
            <type>text/plain</type>
            <size>76818</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE2MzE2MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDEwNSBAQAorMjAxNC0wMS0zMCAgUnlvc3Vr
ZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KKworICAgICAgICBSZW1vdmUgaW5saW5lIG1lbWJl
ciBmdW5jdGlvbnMgb2YgRnJhbWVTZWxlY3Rpb24gdGhhdCBhY2Nlc3MgbV9zZWxlY3Rpb24KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNzk4NgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFJlbW92ZWQgbnVt
ZXJvdXMgaW5saW5lIG1lbWJlciBmdW5jdGlvbnMgb2YgRnJhbWVTZWxlY3Rpb24gdGhhdCBkZXBl
bmQgb24gbV9zZWxlY3Rpb24uCisKKyAgICAgICAgVGhpcyBpcyBuZWVkZWQgdG8gZW5zdXJlIGFs
bCBhY2Nlc3NlcyB0byBtX3NlbGVjdGlvbiBoYXBwZW4gdGhyb3VnaCBGcmFtZVNlbGVjdGlvbjo6
c2VsZWN0aW9uKCksCisgICAgICAgIHdoaWNoIGluIHR1cm4sIGFsbG93cyB1cyB0byB1cGRhdGUg
aXRzIGNhbGwgc2l0ZXMgdG8gdXNlIGVpdGhlciB2YWxpZGF0ZWQgc2VsZWN0aW9uIHRoYXQgZWRp
dGluZworICAgICAgICBhbmQgcmVuZGVyaW5nIGNvZGUgdXNlcyBvciBpbnZhbGlkYXRlZCBzZWxl
Y3Rpb24gdGhhdCdzIGV4cG9zZWQgdG8gSmF2YVNjcmlwdC4KKworICAgICAgICAqIFdlYkNvcmUu
ZXhwLmluOgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvaW9zL1dlYkFjY2Vzc2liaWxpdHlPYmpl
Y3RXcmFwcGVySU9TLm1tOgorICAgICAgICAoLVtXZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBl
ciBfY29udmVydFRvTlNSYW5nZTpdKToKKyAgICAgICAgKC1bV2ViQWNjZXNzaWJpbGl0eU9iamVj
dFdyYXBwZXIgX2NvbnZlcnRUb0RPTVJhbmdlOl0pOgorICAgICAgICAqIGRvbS9FbGVtZW50LmNw
cDoKKyAgICAgICAgKFdlYkNvcmU6OkVsZW1lbnQ6OnVwZGF0ZUZvY3VzQXBwZWFyYW5jZSk6Cisg
ICAgICAgICogZWRpdGluZy9FZGl0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpj
YW5FZGl0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Y2FuRWRpdFJpY2hseSk6CisgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3I6OmNhbkRIVE1MQ3V0KToKKyAgICAgICAgKFdlYkNvcmU6OkVk
aXRvcjo6Y2FuREhUTUxDb3B5KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Y2FuQ29weSk6
CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmNhbkRlbGV0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpFZGl0b3I6OnJlcGxhY2VTZWxlY3Rpb25XaXRoRnJhZ21lbnQpOgorICAgICAgICAoV2ViQ29y
ZTo6RWRpdG9yOjp0cnlESFRNTENvcHkpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjp0cnlE
SFRNTEN1dCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OmFwcGx5U3R5bGUpOgorICAgICAg
ICAoV2ViQ29yZTo6RWRpdG9yOjphcHBseVBhcmFncmFwaFN0eWxlKToKKyAgICAgICAgKFdlYkNv
cmU6OkVkaXRvcjo6Y3V0KToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6Y29weSk6CisgICAg
ICAgIChXZWJDb3JlOjpFZGl0b3I6OnBhc3RlKToKKyAgICAgICAgKFdlYkNvcmU6OkVkaXRvcjo6
c2V0Q29tcG9zaXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpndWVzc2VzRm9yTWlz
c3BlbGxlZE9yVW5ncmFtbWF0aWNhbCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Om1hcmtN
aXNzcGVsbGluZ3NBZnRlclR5cGluZ1RvV29yZCk6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6
OmlzU3BlbGxDaGVja2luZ0VuYWJsZWRJbkZvY3VzZWROb2RlKToKKyAgICAgICAgKFdlYkNvcmU6
OkVkaXRvcjo6bWFya0FuZFJlcGxhY2VGb3IpOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpn
ZXRDb21wb3NpdGlvblNlbGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6OnNlbGVj
dGlvblN0YXJ0SGFzTWFya2VyRm9yKToKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRvckNvbW1hbmQu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6ZXhwYW5kU2VsZWN0aW9uVG9HcmFudWxhcml0eSk6Cisg
ICAgICAgIChXZWJDb3JlOjplbmFibGVkSW5SaWNobHlFZGl0YWJsZVRleHQpOgorICAgICAgICAo
V2ViQ29yZTo6ZW5hYmxlZFJhbmdlSW5FZGl0YWJsZVRleHQpOgorICAgICAgICAoV2ViQ29yZTo6
ZW5hYmxlZFJhbmdlSW5SaWNobHlFZGl0YWJsZVRleHQpOgorICAgICAgICAqIGVkaXRpbmcvRnJh
bWVTZWxlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnNldFNl
bGVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpDYXJldEJhc2U6OnVwZGF0ZUNhcmV0UmVjdCk6
CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6cmVjb21wdXRlQ2FyZXRSZWN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpzZWxlY3RBbGwpOgorICAgICAgICAo
V2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnVwZGF0ZUFwcGVhcmFuY2UpOgorICAgICAgICAoV2Vi
Q29yZTo6RnJhbWVTZWxlY3Rpb246OnVwZGF0ZVNlbGVjdGlvbkNhY2hlc0lmU2VsZWN0aW9uSXNJ
bnNpZGVUZXh0Rm9ybUNvbnRyb2wpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246
OnNldEZvY3VzZWRFbGVtZW50SWZOZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxl
Y3Rpb246OmN1cnJlbnRGb3JtKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjpy
ZXZlYWxTZWxlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6RnJhbWVTZWxlY3Rpb246OnNldFNl
bGVjdGlvbkZyb21Ob25lKToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uOjp3b3Jk
U2VsZWN0aW9uQ29udGFpbmluZ0NhcmV0U2VsZWN0aW9uKToKKyAgICAgICAgKiBlZGl0aW5nL0Zy
YW1lU2VsZWN0aW9uLmg6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZVNlbGVjdGlvbjo6aXNDYXJl
dE9yUmFuZ2UpOgorICAgICAgICAqIGVkaXRpbmcvUmVtb3ZlRm9ybWF0Q29tbWFuZC5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW1vdmVGb3JtYXRDb21tYW5kOjpkb0FwcGx5KToKKyAgICAgICAg
KiBlZGl0aW5nL1Zpc2libGVTZWxlY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6VmlzaWJs
ZVNlbGVjdGlvbjo6aXNJblBhc3N3b3JkRmllbGQpOgorICAgICAgICAqIGVkaXRpbmcvVmlzaWJs
ZVNlbGVjdGlvbi5oOgorICAgICAgICAqIGVkaXRpbmcvbWFjL0VkaXRvck1hYy5tbToKKyAgICAg
ICAgKFdlYkNvcmU6OkVkaXRvcjo6Y2FuQ29weUV4Y2x1ZGluZ1N0YW5kYWxvbmVJbWFnZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjpyZWFkU2VsZWN0aW9uRnJvbVBhc3RlYm9hcmQpOgor
ICAgICAgICAqIGh0bWwvSFRNTEFuY2hvckVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
SFRNTEFuY2hvckVsZW1lbnQ6OmRlZmF1bHRFdmVudEhhbmRsZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6SFRNTEFuY2hvckVsZW1lbnQ6OnNldEFjdGl2ZSk6CisgICAgICAgICogaHRtbC9IVE1MVGV4
dEZvcm1Db250cm9sRWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MVGV4dEZvcm1D
b250cm9sRWxlbWVudDo6Y29tcHV0ZVNlbGVjdGlvblN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6
OkhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50Ojpjb21wdXRlU2VsZWN0aW9uRW5kKToKKyAgICAg
ICAgKiBwYWdlL0NvbnRleHRNZW51Q29udHJvbGxlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpD
b250ZXh0TWVudUNvbnRyb2xsZXI6OmNvbnRleHRNZW51SXRlbVNlbGVjdGVkKToKKyAgICAgICAg
KFdlYkNvcmU6OkNvbnRleHRNZW51Q29udHJvbGxlcjo6cG9wdWxhdGUpOgorICAgICAgICAqIHBh
Z2UvRHJhZ0NvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0NvbnRyb2xsZXI6
OmRyYWdJc01vdmUpOgorICAgICAgICAoV2ViQ29yZTo6c2V0U2VsZWN0aW9uVG9EcmFnQ2FyZXQp
OgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0NvbnRyb2xsZXI6OmNvbmNsdWRlRWRpdERyYWcpOgor
ICAgICAgICAoV2ViQ29yZTo6RHJhZ0NvbnRyb2xsZXI6OnN0YXJ0RHJhZyk6CisgICAgICAgICog
cGFnZS9FdmVudEhhbmRsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6bm9kZUlzTm90QmVpbmdF
ZGl0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpzZW5kQ29udGV4dE1lbnVF
dmVudCk6CisgICAgICAgIChXZWJDb3JlOjpFdmVudEhhbmRsZXI6OnNlbmRDb250ZXh0TWVudUV2
ZW50Rm9yS2V5KToKKyAgICAgICAgKFdlYkNvcmU6OkV2ZW50SGFuZGxlcjo6aGFuZGxlRHJhZyk6
CisgICAgICAgICogcGFnZS9Gb2N1c0NvbnRyb2xsZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Rm9jdXNDb250cm9sbGVyOjphZHZhbmNlRm9jdXNJbkRvY3VtZW50T3JkZXIpOgorICAgICAgICAo
V2ViQ29yZTo6Y2xlYXJTZWxlY3Rpb25JZk5lZWRlZCk6CisgICAgICAgICogcGFnZS9pb3MvRnJh
bWVJT1MubW06CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6Y2FyZXRSZWN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkZyYW1lOjpyZWN0Rm9yU2Nyb2xsVG9WaXNpYmxlKToKKyAgICAgICAgKFdlYkNv
cmU6OkZyYW1lOjpzdHlsZUF0U2VsZWN0aW9uU3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6RnJh
bWU6OnNldFJhbmdlZFNlbGVjdGlvbkJhc2VUb0N1cnJlbnRTZWxlY3Rpb25TdGFydCk6CisgICAg
ICAgIChXZWJDb3JlOjpGcmFtZTo6c2V0UmFuZ2VkU2VsZWN0aW9uQmFzZVRvQ3VycmVudFNlbGVj
dGlvbkVuZCk6CisgICAgICAgIChXZWJDb3JlOjpGcmFtZTo6c2V0UmFuZ2VkU2VsZWN0aW9uSW5p
dGlhbEV4dGVudFRvQ3VycmVudFNlbGVjdGlvblN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OkZy
YW1lOjpzZXRSYW5nZWRTZWxlY3Rpb25Jbml0aWFsRXh0ZW50VG9DdXJyZW50U2VsZWN0aW9uRW5k
KToKKyAgICAgICAgKFdlYkNvcmU6OkZyYW1lOjppbnRlcnByZXRhdGlvbnNGb3JDdXJyZW50Um9v
dCk6CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlckJsb2NrOjpwYWludENhcmV0KToKKwogMjAxNC0wMS0zMCAgU2ltb24gRnJhc2Vy
ICA8c2ltb24uZnJhc2VyQGFwcGxlLmNvbT4KIAogICAgICAgICBGaXggaU9TIGJ1aWxkIGFmdGVy
IHIxNjMxNTYuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9XZWJDb3JlLmV4cC5pbgkocmV2aXNpb24gMTYzMTI4KQorKysg
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5leHAuaW4JKHdvcmtpbmcgY29weSkKQEAgLTE1MzQsNyAr
MTUzNCw2IEBAIF9fWk5LN1dlYkNvcmUxNERvY3VtZW50TG9hZGVyOWlzTG9hZGluZ0UKIF9fWk5L
N1dlYkNvcmUxNERvY3VtZW50TWFya2VyMTFkZXNjcmlwdGlvbkV2CiBfX1pOSzdXZWJDb3JlMTRG
cmFtZVNlbGVjdGlvbjExY3VycmVudEZvcm1FdgogX19aTks3V2ViQ29yZTE0RnJhbWVTZWxlY3Rp
b24xNWNvcHlUeXBpbmdTdHlsZUV2Ci1fX1pOSzdXZWJDb3JlMTRGcmFtZVNlbGVjdGlvbjE3aXNJ
blBhc3N3b3JkRmllbGRFdgogX19aTks3V2ViQ29yZTE0RnJhbWVTZWxlY3Rpb24xOGlzRm9jdXNl
ZEFuZEFjdGl2ZUV2CiBfX1pOSzdXZWJDb3JlMTRGcmFtZVNlbGVjdGlvbjMxZ2V0Q2xpcHBlZFZp
c2libGVUZXh0UmVjdGFuZ2xlc0VSTjNXVEY2VmVjdG9ySU5TXzlGbG9hdFJlY3RFTG0wRU5TMV8x
NUNyYXNoT25PdmVyZmxvd0VFRQogX19aTks3V2ViQ29yZTE0RnJhbWVTZWxlY3Rpb24zNnJvb3RF
ZGl0YWJsZUVsZW1lbnRPckRvY3VtZW50RWxlbWVudEV2CkBAIC0xNjEzLDYgKzE2MTIsNyBAQCBf
X1pOSzdXZWJDb3JlMTZJY29uRGF0YWJhc2VCYXNlMTJkYXRhYmFzCiBfX1pOSzdXZWJDb3JlMTZS
ZXNvdXJjZVJlc3BvbnNlMTNuc1VSTFJlc3BvbnNlRXYKIF9fWk5LN1dlYkNvcmUxNlJlc291cmNl
UmVzcG9uc2UxNmNlcnRpZmljYXRlQ2hhaW5FdgogX19aTks3V2ViQ29yZTE2VmlzaWJsZVNlbGVj
dGlvbjE3aXNDb250ZW50RWRpdGFibGVFdgorX19aTks3V2ViQ29yZTE2VmlzaWJsZVNlbGVjdGlv
bjE3aXNJblBhc3N3b3JkRmllbGRFdgogX19aTks3V2ViQ29yZTE2VmlzaWJsZVNlbGVjdGlvbjE3
dG9Ob3JtYWxpemVkUmFuZ2VFdgogX19aTks3V2ViQ29yZTE2VmlzaWJsZVNlbGVjdGlvbjE5cm9v
dEVkaXRhYmxlRWxlbWVudEV2CiBfX1pOSzdXZWJDb3JlMTZWaXNpYmxlU2VsZWN0aW9uMjNpc0Nv
bnRlbnRSaWNobHlFZGl0YWJsZUV2CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3JhcHBlcklPUy5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L2lvcy9XZWJBY2Nlc3NpYmlsaXR5T2JqZWN0V3Jh
cHBlcklPUy5tbQkocmV2aXNpb24gMTYzMTI4KQorKysgU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9pb3MvV2ViQWNjZXNzaWJpbGl0eU9iamVjdFdyYXBwZXJJT1MubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTE2NDEsOSArMTY0MSw3IEBAIC0gKE5TUmFuZ2UpX2NvbnZlcnRUb05TUmFuZ2U6KFJh
bmdlICopcmEKICAgICAgICAgcmV0dXJuIE5TTWFrZVJhbmdlKE5TTm90Rm91bmQsIDApOwogICAg
IAogICAgIERvY3VtZW50KiBkb2N1bWVudCA9IG1fb2JqZWN0LT5kb2N1bWVudCgpOwotICAgIEZy
YW1lU2VsZWN0aW9uJiBmcmFtZVNlbGVjdGlvbiA9IGRvY3VtZW50LT5mcmFtZSgpLT5zZWxlY3Rp
b24oKTsKLSAgICAKLSAgICBFbGVtZW50KiBzZWxlY3Rpb25Sb290ID0gZnJhbWVTZWxlY3Rpb24u
cm9vdEVkaXRhYmxlRWxlbWVudCgpOworICAgIEVsZW1lbnQqIHNlbGVjdGlvblJvb3QgPSBkb2N1
bWVudC0+ZnJhbWUoKS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkucm9vdEVkaXRhYmxlRWxlbWVu
dCgpOwogICAgIEVsZW1lbnQqIHNjb3BlID0gc2VsZWN0aW9uUm9vdCA/IHNlbGVjdGlvblJvb3Qg
OiBkb2N1bWVudC0+ZG9jdW1lbnRFbGVtZW50KCk7CiAgICAgCiAgICAgLy8gTW91c2UgZXZlbnRz
IG1heSBjYXVzZSBUU00gdG8gYXR0ZW1wdCB0byBjcmVhdGUgYW4gTlNSYW5nZSBmb3IgYSBwb3J0
aW9uIG9mIHRoZSB2aWV3CkBAIC0xNjc5LDggKzE2NzcsNyBAQCAtIChQYXNzUmVmUHRyPFJhbmdl
PilfY29udmVydFRvRE9NUmFuZ2U6CiAgICAgLy8gdG8gdXNlIHRoZSByb290IGVkaXRhYmxlIGVs
ZW1lbnQgb2YgdGhlIHNlbGVjdGlvbiBzdGFydCBhcyB0aGUgcG9zaXRpb25hbCBiYXNlLgogICAg
IC8vIFRoYXQgZml0cyB3aXRoIEFwcEtpdCdzIGlkZWEgb2YgYW4gaW5wdXQgY29udGV4dC4KICAg
ICBEb2N1bWVudCogZG9jdW1lbnQgPSBtX29iamVjdC0+ZG9jdW1lbnQoKTsKLSAgICBGcmFtZVNl
bGVjdGlvbiYgZnJhbWVTZWxlY3Rpb24gPSBkb2N1bWVudC0+ZnJhbWUoKS0+c2VsZWN0aW9uKCk7
Ci0gICAgRWxlbWVudCogc2VsZWN0aW9uUm9vdCA9IGZyYW1lU2VsZWN0aW9uLnJvb3RFZGl0YWJs
ZUVsZW1lbnQoKTsKKyAgICBFbGVtZW50KiBzZWxlY3Rpb25Sb290ID0gZG9jdW1lbnQtPmZyYW1l
KCktPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsKICAgICBF
bGVtZW50KiBzY29wZSA9IHNlbGVjdGlvblJvb3QgPyBzZWxlY3Rpb25Sb290IDogZG9jdW1lbnQt
PmRvY3VtZW50RWxlbWVudCgpOwogICAgIHJldHVybiBUZXh0SXRlcmF0b3I6OnJhbmdlRnJvbUxv
Y2F0aW9uQW5kTGVuZ3RoKHNjb3BlLCBuc3JhbmdlLmxvY2F0aW9uLCBuc3JhbmdlLmxlbmd0aCk7
CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvZG9tL0VsZW1lbnQuY3BwCShyZXZpc2lvbiAxNjMxMjgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9kb20vRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMDcsNyArMjAw
Nyw3IEBAIHZvaWQgRWxlbWVudDo6dXBkYXRlRm9jdXNBcHBlYXJhbmNlKGJvb2wKICAgICAgICAg
ICAgIHJldHVybjsKICAgICAgICAgCiAgICAgICAgIC8vIFdoZW4gZm9jdXNpbmcgYW4gZWRpdGFi
bGUgZWxlbWVudCBpbiBhbiBpZnJhbWUsIGRvbid0IHJlc2V0IHRoZSBzZWxlY3Rpb24gaWYgaXQg
YWxyZWFkeSBjb250YWlucyBhIHNlbGVjdGlvbi4KLSAgICAgICAgaWYgKHRoaXMgPT0gZnJhbWUt
PnNlbGVjdGlvbigpLnJvb3RFZGl0YWJsZUVsZW1lbnQoKSkKKyAgICAgICAgaWYgKHRoaXMgPT0g
ZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnJvb3RFZGl0YWJsZUVsZW1lbnQoKSkKICAg
ICAgICAgICAgIHJldHVybjsKIAogICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHJlc3RvcmUg
dGhlIHByZXZpb3VzIHNlbGVjdGlvbiBpZiB0aGVyZSBpcyBvbmUuCkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9lZGl0aW5nL0VkaXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvZWRp
dGluZy9FZGl0b3IuY3BwCShyZXZpc2lvbiAxNjMxMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL0VkaXRvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4NiwxMiArMjg2LDEyIEBAIGJvb2wg
RWRpdG9yOjpoYW5kbGVUZXh0RXZlbnQoVGV4dEV2ZW50KiAKIAogYm9vbCBFZGl0b3I6OmNhbkVk
aXQoKSBjb25zdAogewotICAgIHJldHVybiBtX2ZyYW1lLnNlbGVjdGlvbigpLnJvb3RFZGl0YWJs
ZUVsZW1lbnQoKTsKKyAgICByZXR1cm4gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5y
b290RWRpdGFibGVFbGVtZW50KCk7CiB9CiAKIGJvb2wgRWRpdG9yOjpjYW5FZGl0UmljaGx5KCkg
Y29uc3QKIHsKLSAgICByZXR1cm4gbV9mcmFtZS5zZWxlY3Rpb24oKS5pc0NvbnRlbnRSaWNobHlF
ZGl0YWJsZSgpOworICAgIHJldHVybiBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlz
Q29udGVudFJpY2hseUVkaXRhYmxlKCk7CiB9CiAKIC8vIFdpbklFIHVzZXMgb25iZWZvcmVjdXQg
YW5kIG9uYmVmb3JlcGFzdGUgdG8gZW5hYmxlcyB0aGUgY3V0IGFuZCBwYXN0ZSBtZW51IGl0ZW1z
LiAgVGhleQpAQCAtMzAxLDEyICszMDEsMTIgQEAgYm9vbCBFZGl0b3I6OmNhbkVkaXRSaWNobHko
KSBjb25zdAogCiBib29sIEVkaXRvcjo6Y2FuREhUTUxDdXQoKQogewotICAgIHJldHVybiAhbV9m
cmFtZS5zZWxlY3Rpb24oKS5pc0luUGFzc3dvcmRGaWVsZCgpICYmICFkaXNwYXRjaENQUEV2ZW50
KGV2ZW50TmFtZXMoKS5iZWZvcmVjdXRFdmVudCwgQ2xpcGJvYXJkTnVtYik7CisgICAgcmV0dXJu
ICFtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlzSW5QYXNzd29yZEZpZWxkKCkgJiYg
IWRpc3BhdGNoQ1BQRXZlbnQoZXZlbnROYW1lcygpLmJlZm9yZWN1dEV2ZW50LCBDbGlwYm9hcmRO
dW1iKTsKIH0KIAogYm9vbCBFZGl0b3I6OmNhbkRIVE1MQ29weSgpCiB7Ci0gICAgcmV0dXJuICFt
X2ZyYW1lLnNlbGVjdGlvbigpLmlzSW5QYXNzd29yZEZpZWxkKCkgJiYgIWRpc3BhdGNoQ1BQRXZl
bnQoZXZlbnROYW1lcygpLmJlZm9yZWNvcHlFdmVudCwgQ2xpcGJvYXJkTnVtYik7CisgICAgcmV0
dXJuICFtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlzSW5QYXNzd29yZEZpZWxkKCkg
JiYgIWRpc3BhdGNoQ1BQRXZlbnQoZXZlbnROYW1lcygpLmJlZm9yZWNvcHlFdmVudCwgQ2xpcGJv
YXJkTnVtYik7CiB9CiAKIGJvb2wgRWRpdG9yOjpjYW5ESFRNTFBhc3RlKCkKQEAgLTM0MCw3ICsz
NDAsNyBAQCBib29sIEVkaXRvcjo6Y2FuQ29weSgpIGNvbnN0CiB7CiAgICAgaWYgKGltYWdlRWxl
bWVudEZyb21JbWFnZURvY3VtZW50KGRvY3VtZW50KCkpKQogICAgICAgICByZXR1cm4gdHJ1ZTsK
LSAgICBGcmFtZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0gbV9mcmFtZS5zZWxlY3Rpb24oKTsKKyAg
ICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBtX2ZyYW1lLnNlbGVjdGlvbigp
LnNlbGVjdGlvbigpOwogICAgIHJldHVybiBzZWxlY3Rpb24uaXNSYW5nZSgpICYmICFzZWxlY3Rp
b24uaXNJblBhc3N3b3JkRmllbGQoKTsKIH0KIApAQCAtMzUxLDcgKzM1MSw3IEBAIGJvb2wgRWRp
dG9yOjpjYW5QYXN0ZSgpIGNvbnN0CiAKIGJvb2wgRWRpdG9yOjpjYW5EZWxldGUoKSBjb25zdAog
ewotICAgIEZyYW1lU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBtX2ZyYW1lLnNlbGVjdGlvbigpOwor
ICAgIGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9u
KCkuc2VsZWN0aW9uKCk7CiAgICAgcmV0dXJuIHNlbGVjdGlvbi5pc1JhbmdlKCkgJiYgc2VsZWN0
aW9uLnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsKIH0KIApAQCAtNTk4LDcgKzU5OCw4IEBAIGJvb2wg
RWRpdG9yOjpzaG91bGRJbnNlcnRGcmFnbWVudChQYXNzUmUKIAogdm9pZCBFZGl0b3I6OnJlcGxh
Y2VTZWxlY3Rpb25XaXRoRnJhZ21lbnQoUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBmcmFn
bWVudCwgYm9vbCBzZWxlY3RSZXBsYWNlbWVudCwgYm9vbCBzbWFydFJlcGxhY2UsIGJvb2wgbWF0
Y2hTdHlsZSkKIHsKLSAgICBpZiAobV9mcmFtZS5zZWxlY3Rpb24oKS5pc05vbmUoKSB8fCAhbV9m
cmFtZS5zZWxlY3Rpb24oKS5pc0NvbnRlbnRFZGl0YWJsZSgpIHx8ICFmcmFnbWVudCkKKyAgICBW
aXNpYmxlU2VsZWN0aW9uIHNlbGVjdGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9u
KCk7CisgICAgaWYgKHNlbGVjdGlvbi5pc05vbmUoKSB8fCAhc2VsZWN0aW9uLmlzQ29udGVudEVk
aXRhYmxlKCkgfHwgIWZyYWdtZW50KQogICAgICAgICByZXR1cm47CiAKICAgICBSZXBsYWNlU2Vs
ZWN0aW9uQ29tbWFuZDo6Q29tbWFuZE9wdGlvbnMgb3B0aW9ucyA9IFJlcGxhY2VTZWxlY3Rpb25D
b21tYW5kOjpQcmV2ZW50TmVzdGluZyB8IFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpTYW5pdGl6
ZUZyYWdtZW50OwpAQCAtNjExLDkgKzYxMiwxMCBAQCB2b2lkIEVkaXRvcjo6cmVwbGFjZVNlbGVj
dGlvbldpdGhGcmFnbWVuCiAgICAgYXBwbHlDb21tYW5kKFJlcGxhY2VTZWxlY3Rpb25Db21tYW5k
OjpjcmVhdGUoZG9jdW1lbnQoKSwgZnJhZ21lbnQsIG9wdGlvbnMsIEVkaXRBY3Rpb25QYXN0ZSkp
OwogICAgIHJldmVhbFNlbGVjdGlvbkFmdGVyRWRpdGluZ09wZXJhdGlvbigpOwogCi0gICAgaWYg
KG1fZnJhbWUuc2VsZWN0aW9uKCkuaXNJblBhc3N3b3JkRmllbGQoKSB8fCAhaXNDb250aW51b3Vz
U3BlbGxDaGVja2luZ0VuYWJsZWQoKSkKKyAgICBzZWxlY3Rpb24gPSBtX2ZyYW1lLnNlbGVjdGlv
bigpLnNlbGVjdGlvbigpOworICAgIGlmIChzZWxlY3Rpb24uaXNJblBhc3N3b3JkRmllbGQoKSB8
fCAhaXNDb250aW51b3VzU3BlbGxDaGVja2luZ0VuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuOwot
ICAgIE5vZGUqIG5vZGVUb0NoZWNrID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5yb290RWRpdGFibGVF
bGVtZW50KCk7CisgICAgTm9kZSogbm9kZVRvQ2hlY2sgPSBzZWxlY3Rpb24ucm9vdEVkaXRhYmxl
RWxlbWVudCgpOwogICAgIGlmICghbm9kZVRvQ2hlY2spCiAgICAgICAgIHJldHVybjsKIApAQCAt
NzI4LDcgKzczMCw3IEBAIGJvb2wgRWRpdG9yOjpzaG91bGREZWxldGVSYW5nZShSYW5nZSogcmEK
IAogYm9vbCBFZGl0b3I6OnRyeURIVE1MQ29weSgpCiB7ICAgCi0gICAgaWYgKG1fZnJhbWUuc2Vs
ZWN0aW9uKCkuaXNJblBhc3N3b3JkRmllbGQoKSkKKyAgICBpZiAobV9mcmFtZS5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKS5pc0luUGFzc3dvcmRGaWVsZCgpKQogICAgICAgICByZXR1cm4gZmFsc2U7
CiAKICAgICByZXR1cm4gIWRpc3BhdGNoQ1BQRXZlbnQoZXZlbnROYW1lcygpLmNvcHlFdmVudCwg
Q2xpcGJvYXJkV3JpdGFibGUpOwpAQCAtNzM2LDcgKzczOCw3IEBAIGJvb2wgRWRpdG9yOjp0cnlE
SFRNTENvcHkoKQogCiBib29sIEVkaXRvcjo6dHJ5REhUTUxDdXQoKQogewotICAgIGlmIChtX2Zy
YW1lLnNlbGVjdGlvbigpLmlzSW5QYXNzd29yZEZpZWxkKCkpCisgICAgaWYgKG1fZnJhbWUuc2Vs
ZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNJblBhc3N3b3JkRmllbGQoKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogICAgIAogICAgIHJldHVybiAhZGlzcGF0Y2hDUFBFdmVudChldmVudE5hbWVzKCku
Y3V0RXZlbnQsIENsaXBib2FyZFdyaXRhYmxlKTsKQEAgLTk3MCw3ICs5NzIsNyBAQCBOb2RlKiBF
ZGl0b3I6OmZpbmRFdmVudFRhcmdldEZyb21TZWxlY3RpCiAKIHZvaWQgRWRpdG9yOjphcHBseVN0
eWxlKFN0eWxlUHJvcGVydGllcyogc3R5bGUsIEVkaXRBY3Rpb24gZWRpdGluZ0FjdGlvbikKIHsK
LSAgICBzd2l0Y2ggKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uVHlwZSgpKSB7CisgICAg
c3dpdGNoIChtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnNlbGVjdGlvblR5cGUoKSkg
ewogICAgIGNhc2UgVmlzaWJsZVNlbGVjdGlvbjo6Tm9TZWxlY3Rpb246CiAgICAgICAgIC8vIGRv
IG5vdGhpbmcKICAgICAgICAgYnJlYWs7CkBAIC05OTEsNyArOTkzLDcgQEAgYm9vbCBFZGl0b3I6
OnNob3VsZEFwcGx5U3R5bGUoU3R5bGVQcm9wZQogICAgIAogdm9pZCBFZGl0b3I6OmFwcGx5UGFy
YWdyYXBoU3R5bGUoU3R5bGVQcm9wZXJ0aWVzKiBzdHlsZSwgRWRpdEFjdGlvbiBlZGl0aW5nQWN0
aW9uKQogewotICAgIHN3aXRjaCAobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb25UeXBlKCkp
IHsKKyAgICBzd2l0Y2ggKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuc2VsZWN0aW9u
VHlwZSgpKSB7CiAgICAgY2FzZSBWaXNpYmxlU2VsZWN0aW9uOjpOb1NlbGVjdGlvbjoKICAgICAg
ICAgLy8gZG8gbm90aGluZwogICAgICAgICBicmVhazsKQEAgLTEyODAsNyArMTI4Miw3IEBAIHZv
aWQgRWRpdG9yOjpjdXQoKQogICAgIHdpbGxXcml0ZVNlbGVjdGlvblRvUGFzdGVib2FyZChzZWxl
Y3Rpb24pOwogICAgIGlmIChzaG91bGREZWxldGVSYW5nZShzZWxlY3Rpb24uZ2V0KCkpKSB7CiAg
ICAgICAgIHVwZGF0ZU1hcmtlcnNGb3JXb3Jkc0FmZmVjdGVkQnlFZGl0aW5nKHRydWUpOwotICAg
ICAgICBpZiAoZW5jbG9zaW5nVGV4dEZvcm1Db250cm9sKG1fZnJhbWUuc2VsZWN0aW9uKCkuc3Rh
cnQoKSkpCisgICAgICAgIGlmIChlbmNsb3NpbmdUZXh0Rm9ybUNvbnRyb2wobV9mcmFtZS5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpKSkKICAgICAgICAgICAgIFBhc3RlYm9hcmQ6OmNy
ZWF0ZUZvckNvcHlBbmRQYXN0ZSgpLT53cml0ZVBsYWluVGV4dChzZWxlY3RlZFRleHRGb3JDbGlw
Ym9hcmQoKSwgY2FuU21hcnRDb3B5T3JEZWxldGUoKSA/IFBhc3RlYm9hcmQ6OkNhblNtYXJ0UmVw
bGFjZSA6IFBhc3RlYm9hcmQ6OkNhbm5vdFNtYXJ0UmVwbGFjZSk7CiAgICAgICAgIGVsc2Ugewog
I2lmIFBMQVRGT1JNKE1BQykgfHwgUExBVEZPUk0oRUZMKQpAQCAtMTMwNSw3ICsxMzA3LDcgQEAg
dm9pZCBFZGl0b3I6OmNvcHkoKQogICAgIH0KIAogICAgIHdpbGxXcml0ZVNlbGVjdGlvblRvUGFz
dGVib2FyZChzZWxlY3RlZFJhbmdlKCkpOwotICAgIGlmIChlbmNsb3NpbmdUZXh0Rm9ybUNvbnRy
b2wobV9mcmFtZS5zZWxlY3Rpb24oKS5zdGFydCgpKSkgeworICAgIGlmIChlbmNsb3NpbmdUZXh0
Rm9ybUNvbnRyb2wobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpKSkgewog
ICAgICAgICBQYXN0ZWJvYXJkOjpjcmVhdGVGb3JDb3B5QW5kUGFzdGUoKS0+d3JpdGVQbGFpblRl
eHQoc2VsZWN0ZWRUZXh0Rm9yQ2xpcGJvYXJkKCksCiAgICAgICAgICAgICBjYW5TbWFydENvcHlP
ckRlbGV0ZSgpID8gUGFzdGVib2FyZDo6Q2FuU21hcnRSZXBsYWNlIDogUGFzdGVib2FyZDo6Q2Fu
bm90U21hcnRSZXBsYWNlKTsKICAgICB9IGVsc2UgewpAQCAtMTM0Miw3ICsxMzQ0LDcgQEAgdm9p
ZCBFZGl0b3I6OnBhc3RlKFBhc3RlYm9hcmQmIHBhc3RlYm9hcgogICAgIHVwZGF0ZU1hcmtlcnNG
b3JXb3Jkc0FmZmVjdGVkQnlFZGl0aW5nKGZhbHNlKTsKICAgICBDYWNoZWRSZXNvdXJjZUxvYWRl
ciogbG9hZGVyID0gZG9jdW1lbnQoKS5jYWNoZWRSZXNvdXJjZUxvYWRlcigpOwogICAgIFJlc291
cmNlQ2FjaGVWYWxpZGF0aW9uU3VwcHJlc3NvciB2YWxpZGF0aW9uU3VwcHJlc3Nvcihsb2FkZXIp
OwotICAgIGlmIChtX2ZyYW1lLnNlbGVjdGlvbigpLmlzQ29udGVudFJpY2hseUVkaXRhYmxlKCkp
CisgICAgaWYgKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNDb250ZW50UmljaGx5
RWRpdGFibGUoKSkKICAgICAgICAgcGFzdGVXaXRoUGFzdGVib2FyZCgmcGFzdGVib2FyZCwgdHJ1
ZSk7CiAgICAgZWxzZQogICAgICAgICBwYXN0ZUFzUGxhaW5UZXh0V2l0aFBhc3RlYm9hcmQocGFz
dGVib2FyZCk7CkBAIC0xODQyLDggKzE4NDQsOCBAQCB2b2lkIEVkaXRvcjo6c2V0Q29tcG9zaXRp
b24oY29uc3QgU3RyaW5nCiAgICAgICAgIFR5cGluZ0NvbW1hbmQ6Omluc2VydFRleHQoZG9jdW1l
bnQoKSwgdGV4dCwgVHlwaW5nQ29tbWFuZDo6U2VsZWN0SW5zZXJ0ZWRUZXh0IHwgVHlwaW5nQ29t
bWFuZDo6UHJldmVudFNwZWxsQ2hlY2tpbmcsIFR5cGluZ0NvbW1hbmQ6OlRleHRDb21wb3NpdGlv
blVwZGF0ZSk7CiAKICAgICAgICAgLy8gRmluZCBvdXQgd2hhdCBub2RlIGhhcyB0aGUgY29tcG9z
aXRpb24gbm93LgotICAgICAgICBQb3NpdGlvbiBiYXNlID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5i
YXNlKCkuZG93bnN0cmVhbSgpOwotICAgICAgICBQb3NpdGlvbiBleHRlbnQgPSBtX2ZyYW1lLnNl
bGVjdGlvbigpLmV4dGVudCgpOworICAgICAgICBQb3NpdGlvbiBiYXNlID0gbV9mcmFtZS5zZWxl
Y3Rpb24oKS5zZWxlY3Rpb24oKS5iYXNlKCkuZG93bnN0cmVhbSgpOworICAgICAgICBQb3NpdGlv
biBleHRlbnQgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmV4dGVudCgpOwogICAg
ICAgICBOb2RlKiBiYXNlTm9kZSA9IGJhc2UuZGVwcmVjYXRlZE5vZGUoKTsKICAgICAgICAgdW5z
aWduZWQgYmFzZU9mZnNldCA9IGJhc2UuZGVwcmVjYXRlZEVkaXRpbmdPZmZzZXQoKTsKICAgICAg
ICAgTm9kZSogZXh0ZW50Tm9kZSA9IGV4dGVudC5kZXByZWNhdGVkTm9kZSgpOwpAQCAtMjE2MSwx
MyArMjE2MywxMyBAQCBWZWN0b3I8U3RyaW5nPiBFZGl0b3I6Omd1ZXNzZXNGb3JNaXNzcGVsCiB7
CiAgICAgaWYgKHVuaWZpZWRUZXh0Q2hlY2tlckVuYWJsZWQoKSkgewogICAgICAgICBSZWZQdHI8
UmFuZ2U+IHJhbmdlOwotICAgICAgICBGcmFtZVNlbGVjdGlvbiYgZnJhbWVTZWxlY3Rpb24gPSBt
X2ZyYW1lLnNlbGVjdGlvbigpOwotICAgICAgICBpZiAoZnJhbWVTZWxlY3Rpb24uaXNDYXJldCgp
ICYmIGJlaGF2aW9yKCkuc2hvdWxkQWxsb3dTcGVsbGluZ1N1Z2dlc3Rpb25zV2l0aG91dFNlbGVj
dGlvbigpKSB7Ci0gICAgICAgICAgICBWaXNpYmxlU2VsZWN0aW9uIHdvcmRTZWxlY3Rpb24gPSBW
aXNpYmxlU2VsZWN0aW9uKGZyYW1lU2VsZWN0aW9uLmJhc2UoKSk7CisgICAgICAgIFZpc2libGVT
ZWxlY3Rpb24gc2VsZWN0aW9uID0gbV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKTsKKyAg
ICAgICAgaWYgKHNlbGVjdGlvbi5pc0NhcmV0KCkgJiYgYmVoYXZpb3IoKS5zaG91bGRBbGxvd1Nw
ZWxsaW5nU3VnZ2VzdGlvbnNXaXRob3V0U2VsZWN0aW9uKCkpIHsKKyAgICAgICAgICAgIFZpc2li
bGVTZWxlY3Rpb24gd29yZFNlbGVjdGlvbiA9IFZpc2libGVTZWxlY3Rpb24oc2VsZWN0aW9uLmJh
c2UoKSk7CiAgICAgICAgICAgICB3b3JkU2VsZWN0aW9uLmV4cGFuZFVzaW5nR3JhbnVsYXJpdHko
V29yZEdyYW51bGFyaXR5KTsKICAgICAgICAgICAgIHJhbmdlID0gd29yZFNlbGVjdGlvbi50b05v
cm1hbGl6ZWRSYW5nZSgpOwogICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgIHJhbmdlID0gZnJh
bWVTZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsKKyAgICAgICAgICAgIHJhbmdlID0gc2Vs
ZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7CiAgICAgICAgIGlmICghcmFuZ2UpCiAgICAgICAg
ICAgICByZXR1cm4gVmVjdG9yPFN0cmluZz4oKTsKICAgICAgICAgcmV0dXJuIFRleHRDaGVja2lu
Z0hlbHBlcihjbGllbnQoKSwgcmFuZ2UpLmd1ZXNzZXNGb3JNaXNzcGVsbGVkT3JVbmdyYW1tYXRp
Y2FsUmFuZ2UoaXNHcmFtbWFyQ2hlY2tpbmdFbmFibGVkKCksIG1pc3NwZWxsZWQsIHVuZ3JhbW1h
dGljYWwpOwpAQCAtMjMwMSw3ICsyMzAzLDcgQEAgdm9pZCBFZGl0b3I6Om1hcmtNaXNzcGVsbGlu
Z3NBZnRlclR5cGluZwogICAgICAgICBtX2ZyYW1lLmVkaXRvcigpLnJlcGxhY2VTZWxlY3Rpb25X
aXRoVGV4dChhdXRvY29ycmVjdGVkU3RyaW5nLCBmYWxzZSwgZmFsc2UpOwogCiAgICAgICAgIC8v
IFJlc2V0IHRoZSBjaGFyZXQgb25lIGNoYXJhY3RlciBmdXJ0aGVyLgotICAgICAgICBtX2ZyYW1l
LnNlbGVjdGlvbigpLm1vdmVUbyhtX2ZyYW1lLnNlbGVjdGlvbigpLmVuZCgpKTsKKyAgICAgICAg
bV9mcmFtZS5zZWxlY3Rpb24oKS5tb3ZlVG8obV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24o
KS5lbmQoKSk7CiAgICAgICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkubW9kaWZ5KEZyYW1lU2VsZWN0
aW9uOjpBbHRlcmF0aW9uTW92ZSwgRGlyZWN0aW9uRm9yd2FyZCwgQ2hhcmFjdGVyR3JhbnVsYXJp
dHkpOwogICAgIH0KIApAQCAtMjM3MCw3ICsyMzcyLDcgQEAgYm9vbCBFZGl0b3I6OmlzU3BlbGxD
aGVja2luZ0VuYWJsZWRGb3IoTgogCiBib29sIEVkaXRvcjo6aXNTcGVsbENoZWNraW5nRW5hYmxl
ZEluRm9jdXNlZE5vZGUoKSBjb25zdAogewotICAgIHJldHVybiBpc1NwZWxsQ2hlY2tpbmdFbmFi
bGVkRm9yKG1fZnJhbWUuc2VsZWN0aW9uKCkuc3RhcnQoKS5kZXByZWNhdGVkTm9kZSgpKTsKKyAg
ICByZXR1cm4gaXNTcGVsbENoZWNraW5nRW5hYmxlZEZvcihtX2ZyYW1lLnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpLnN0YXJ0KCkuZGVwcmVjYXRlZE5vZGUoKSk7CiB9CiAKIHZvaWQgRWRpdG9yOjpt
YXJrTWlzc3BlbGxpbmdzKGNvbnN0IFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiwgUmVmUHRy
PFJhbmdlPiYgZmlyc3RNaXNzcGVsbGluZ1JhbmdlKQpAQCAtMjQ5NCw5ICsyNDk2LDkgQEAgdm9p
ZCBFZGl0b3I6Om1hcmtBbmRSZXBsYWNlRm9yKFBhc3NSZWZQdAogICAgIGJvb2wgYWRqdXN0U2Vs
ZWN0aW9uRm9yUGFyYWdyYXBoQm91bmRhcmllcyA9IGZhbHNlOwogCiAgICAgaWYgKHNob3VsZFBl
cmZvcm1SZXBsYWNlbWVudCB8fCBzaG91bGRNYXJrU3BlbGxpbmcgfHwgc2hvdWxkQ2hlY2tGb3JD
b3JyZWN0aW9uKSB7Ci0gICAgICAgIGlmIChtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvblR5
cGUoKSA9PSBWaXNpYmxlU2VsZWN0aW9uOjpDYXJldFNlbGVjdGlvbikgeworICAgICAgICBpZiAo
bV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zZWxlY3Rpb25UeXBlKCkgPT0gVmlzaWJs
ZVNlbGVjdGlvbjo6Q2FyZXRTZWxlY3Rpb24pIHsKICAgICAgICAgICAgIC8vIEF0dGVtcHQgdG8g
c2F2ZSB0aGUgY2FyZXQgcG9zaXRpb24gc28gd2UgY2FuIHJlc3RvcmUgaXQgbGF0ZXIgaWYgbmVl
ZGVkCi0gICAgICAgICAgICBQb3NpdGlvbiBjYXJldFBvc2l0aW9uID0gbV9mcmFtZS5zZWxlY3Rp
b24oKS5lbmQoKTsKKyAgICAgICAgICAgIFBvc2l0aW9uIGNhcmV0UG9zaXRpb24gPSBtX2ZyYW1l
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmVuZCgpOwogICAgICAgICAgICAgc2VsZWN0aW9uT2Zm
c2V0ID0gcGFyYWdyYXBoLm9mZnNldFRvKGNhcmV0UG9zaXRpb24sIEFTU0VSVF9OT19FWENFUFRJ
T04pOwogICAgICAgICAgICAgcmVzdG9yZVNlbGVjdGlvbkFmdGVyQ2hhbmdlID0gdHJ1ZTsKICAg
ICAgICAgICAgIGlmIChzZWxlY3Rpb25PZmZzZXQgPiAwICYmIChzZWxlY3Rpb25PZmZzZXQgPiBw
YXJhZ3JhcGgudGV4dExlbmd0aCgpIHx8IHBhcmFncmFwaC50ZXh0Q2hhckF0KHNlbGVjdGlvbk9m
ZnNldCAtIDEpID09IG5ld2xpbmVDaGFyYWN0ZXIpKQpAQCAtMjYyNSw3ICsyNjI3LDcgQEAgdm9p
ZCBFZGl0b3I6Om1hcmtBbmRSZXBsYWNlRm9yKFBhc3NSZWZQdAogICAgICAgICAgICAgICAgIG1f
ZnJhbWUuc2VsZWN0aW9uKCkubW9kaWZ5KEZyYW1lU2VsZWN0aW9uOjpBbHRlcmF0aW9uTW92ZSwg
RGlyZWN0aW9uRm9yd2FyZCwgQ2hhcmFjdGVyR3JhbnVsYXJpdHkpOwogICAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgICAgLy8gSWYgdGhpcyBmYWlscyBmb3IgYW55IHJlYXNvbiwgdGhlIGZhbGxi
YWNrIGlzIHRvIGdvIG9uZSBwb3NpdGlvbiBiZXlvbmQgdGhlIGxhc3QgcmVwbGFjZW1lbnQKLSAg
ICAgICAgICAgIG1fZnJhbWUuc2VsZWN0aW9uKCkubW92ZVRvKG1fZnJhbWUuc2VsZWN0aW9uKCku
ZW5kKCkpOworICAgICAgICAgICAgbV9mcmFtZS5zZWxlY3Rpb24oKS5tb3ZlVG8obV9mcmFtZS5z
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5lbmQoKSk7CiAgICAgICAgICAgICBtX2ZyYW1lLnNlbGVj
dGlvbigpLm1vZGlmeShGcmFtZVNlbGVjdGlvbjo6QWx0ZXJhdGlvbk1vdmUsIERpcmVjdGlvbkZv
cndhcmQsIENoYXJhY3RlckdyYW51bGFyaXR5KTsKICAgICAgICAgfQogICAgIH0KQEAgLTI4MjIs
MTAgKzI4MjQsMTEgQEAgYm9vbCBFZGl0b3I6OmdldENvbXBvc2l0aW9uU2VsZWN0aW9uKHVucwog
ewogICAgIGlmICghbV9jb21wb3NpdGlvbk5vZGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICBQb3NpdGlvbiBzdGFydCA9IG1fZnJhbWUuc2VsZWN0aW9uKCkuc3RhcnQoKTsKKyAgICBjb25z
dCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVj
dGlvbigpOworICAgIFBvc2l0aW9uIHN0YXJ0ID0gc2VsZWN0aW9uLnN0YXJ0KCk7CiAgICAgaWYg
KHN0YXJ0LmRlcHJlY2F0ZWROb2RlKCkgIT0gbV9jb21wb3NpdGlvbk5vZGUpCiAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICBQb3NpdGlvbiBlbmQgPSBtX2ZyYW1lLnNlbGVjdGlvbigpLmVuZCgp
OworICAgIFBvc2l0aW9uIGVuZCA9IHNlbGVjdGlvbi5lbmQoKTsKICAgICBpZiAoZW5kLmRlcHJl
Y2F0ZWROb2RlKCkgIT0gbV9jb21wb3NpdGlvbk5vZGUpCiAgICAgICAgIHJldHVybiBmYWxzZTsK
IApAQCAtMzM4Miw3ICszMzg1LDcgQEAgc3RhdGljIE5vZGUqIGZpbmRGaXJzdE1hcmthYmxlKE5v
ZGUqIG5vZAogCiBib29sIEVkaXRvcjo6c2VsZWN0aW9uU3RhcnRIYXNNYXJrZXJGb3IoRG9jdW1l
bnRNYXJrZXI6Ok1hcmtlclR5cGUgbWFya2VyVHlwZSwgaW50IGZyb20sIGludCBsZW5ndGgpIGNv
bnN0CiB7Ci0gICAgTm9kZSogbm9kZSA9IGZpbmRGaXJzdE1hcmthYmxlKG1fZnJhbWUuc2VsZWN0
aW9uKCkuc3RhcnQoKS5kZXByZWNhdGVkTm9kZSgpKTsKKyAgICBOb2RlKiBub2RlID0gZmluZEZp
cnN0TWFya2FibGUobV9mcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpLmRlcHJl
Y2F0ZWROb2RlKCkpOwogICAgIGlmICghbm9kZSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvckNvbW1hbmQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAJKHJldmlzaW9uIDE2
MzEyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yQ29tbWFuZC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTIxNSw4ICsyMTUsOCBAQCBzdGF0aWMgYm9vbCBleHBhbmRTZWxlY3Rpb25U
b0dyYW51bGFyaXR5CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICBpZiAobmV3UmFuZ2UtPmNv
bGxhcHNlZChJR05PUkVfRVhDRVBUSU9OKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIFJl
ZlB0cjxSYW5nZT4gb2xkUmFuZ2UgPSBmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS50b05v
cm1hbGl6ZWRSYW5nZSgpOwotICAgIEVBZmZpbml0eSBhZmZpbml0eSA9IGZyYW1lLnNlbGVjdGlv
bigpLmFmZmluaXR5KCk7CisgICAgUmVmUHRyPFJhbmdlPiBvbGRSYW5nZSA9IHNlbGVjdGlvbi50
b05vcm1hbGl6ZWRSYW5nZSgpOworICAgIEVBZmZpbml0eSBhZmZpbml0eSA9IHNlbGVjdGlvbi5h
ZmZpbml0eSgpOwogICAgIGlmICghZnJhbWUuZWRpdG9yKCkuY2xpZW50KCktPnNob3VsZENoYW5n
ZVNlbGVjdGVkUmFuZ2Uob2xkUmFuZ2UuZ2V0KCksIG5ld1JhbmdlLmdldCgpLCBhZmZpbml0eSwg
ZmFsc2UpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgZnJhbWUuc2VsZWN0aW9uKCkuc2V0
U2VsZWN0ZWRSYW5nZShuZXdSYW5nZS5nZXQoKSwgYWZmaW5pdHksIHRydWUpOwpAQCAtMTI5Nyw3
ICsxMjk3LDggQEAgc3RhdGljIGJvb2wgZW5hYmxlZEluRWRpdGFibGVUZXh0T3JDYXJldAogCiBz
dGF0aWMgYm9vbCBlbmFibGVkSW5SaWNobHlFZGl0YWJsZVRleHQoRnJhbWUmIGZyYW1lLCBFdmVu
dCosIEVkaXRvckNvbW1hbmRTb3VyY2UpCiB7Ci0gICAgcmV0dXJuIGZyYW1lLnNlbGVjdGlvbigp
LmlzQ2FyZXRPclJhbmdlKCkgJiYgZnJhbWUuc2VsZWN0aW9uKCkuaXNDb250ZW50UmljaGx5RWRp
dGFibGUoKSAmJiBmcmFtZS5zZWxlY3Rpb24oKS5yb290RWRpdGFibGVFbGVtZW50KCk7CisgICAg
Y29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0gZnJhbWUuc2VsZWN0aW9uKCkuc2Vs
ZWN0aW9uKCk7CisgICAgcmV0dXJuIHNlbGVjdGlvbi5pc0NhcmV0T3JSYW5nZSgpICYmIHNlbGVj
dGlvbi5pc0NvbnRlbnRSaWNobHlFZGl0YWJsZSgpICYmIHNlbGVjdGlvbi5yb290RWRpdGFibGVF
bGVtZW50KCk7CiB9CiAKIHN0YXRpYyBib29sIGVuYWJsZWRQYXN0ZShGcmFtZSYgZnJhbWUsIEV2
ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSkKQEAgLTEzMDcsMTIgKzEzMDgsMTIgQEAgc3RhdGlj
IGJvb2wgZW5hYmxlZFBhc3RlKEZyYW1lJiBmcmFtZSwgRQogCiBzdGF0aWMgYm9vbCBlbmFibGVk
UmFuZ2VJbkVkaXRhYmxlVGV4dChGcmFtZSYgZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNv
dXJjZSkKIHsKLSAgICByZXR1cm4gZnJhbWUuc2VsZWN0aW9uKCkuaXNSYW5nZSgpICYmIGZyYW1l
LnNlbGVjdGlvbigpLmlzQ29udGVudEVkaXRhYmxlKCk7CisgICAgcmV0dXJuIGZyYW1lLnNlbGVj
dGlvbigpLmlzUmFuZ2UoKSAmJiBmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0NvbnRl
bnRFZGl0YWJsZSgpOwogfQogCiBzdGF0aWMgYm9vbCBlbmFibGVkUmFuZ2VJblJpY2hseUVkaXRh
YmxlVGV4dChGcmFtZSYgZnJhbWUsIEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSkKIHsKLSAg
ICByZXR1cm4gZnJhbWUuc2VsZWN0aW9uKCkuaXNSYW5nZSgpICYmIGZyYW1lLnNlbGVjdGlvbigp
LmlzQ29udGVudFJpY2hseUVkaXRhYmxlKCk7CisgICAgcmV0dXJuIGZyYW1lLnNlbGVjdGlvbigp
LmlzUmFuZ2UoKSAmJiBmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0NvbnRlbnRSaWNo
bHlFZGl0YWJsZSgpOwogfQogCiBzdGF0aWMgYm9vbCBlbmFibGVkUmVkbyhGcmFtZSYgZnJhbWUs
IEV2ZW50KiwgRWRpdG9yQ29tbWFuZFNvdXJjZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvRnJhbWVTZWxlY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvRnJhbWVTZWxlY3Rpb24uY3BwCShyZXZpc2lvbiAxNjMxMjgpCisrKyBTb3VyY2UvV2ViQ29y
ZS9lZGl0aW5nL0ZyYW1lU2VsZWN0aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMwNyw3ICsx
MzA3LDcgQEAgc3RhdGljIFJlbmRlck9iamVjdCogY2FyZXRSZW5kZXJlcihOb2RlKgogCiBib29s
IENhcmV0QmFzZTo6dXBkYXRlQ2FyZXRSZWN0KERvY3VtZW50KiBkb2N1bWVudCwgY29uc3QgVmlz
aWJsZVBvc2l0aW9uJiBjYXJldFBvc2l0aW9uKQogewotICAgIGRvY3VtZW50LT51cGRhdGVTdHls
ZUlmTmVlZGVkKCk7CisgICAgZG9jdW1lbnQtPnVwZGF0ZUxheW91dElnbm9yZVBlbmRpbmdTdHls
ZXNoZWV0cygpOwogICAgIG1fY2FyZXRMb2NhbFJlY3QgPSBMYXlvdXRSZWN0KCk7CiAKICAgICBt
X2NhcmV0UmVjdE5lZWRzVXBkYXRlID0gZmFsc2U7CkBAIC0xNDI2LDcgKzE0MjYsNyBAQCBib29s
IEZyYW1lU2VsZWN0aW9uOjpyZWNvbXB1dGVDYXJldFJlY3QoCiAKICNpZiBFTkFCTEUoVEVYVF9D
QVJFVCkKICAgICBpZiAoUmVuZGVyVmlldyogdmlldyA9IG1fZnJhbWUtPmRvY3VtZW50KCktPnJl
bmRlclZpZXcoKSkgewotICAgICAgICBib29sIHByZXZpb3VzT3JOZXdDYXJldE5vZGVJc0NvbnRl
bnRFZGl0YWJsZSA9IGlzQ29udGVudEVkaXRhYmxlKCkgfHwgKG1fcHJldmlvdXNDYXJldE5vZGUg
JiYgbV9wcmV2aW91c0NhcmV0Tm9kZS0+aXNDb250ZW50RWRpdGFibGUoKSk7CisgICAgICAgIGJv
b2wgcHJldmlvdXNPck5ld0NhcmV0Tm9kZUlzQ29udGVudEVkaXRhYmxlID0gbV9zZWxlY3Rpb24u
aXNDb250ZW50RWRpdGFibGUoKSB8fCAobV9wcmV2aW91c0NhcmV0Tm9kZSAmJiBtX3ByZXZpb3Vz
Q2FyZXROb2RlLT5pc0NvbnRlbnRFZGl0YWJsZSgpKTsKICAgICAgICAgaWYgKHNob3VsZFJlcGFp
bnRDYXJldCh2aWV3LCBwcmV2aW91c09yTmV3Q2FyZXROb2RlSXNDb250ZW50RWRpdGFibGUpKSB7
CiAgICAgICAgICAgICBpZiAobV9wcmV2aW91c0NhcmV0Tm9kZSkKICAgICAgICAgICAgICAgICBy
ZXBhaW50Q2FyZXRGb3JMb2NhbFJlY3QobV9wcmV2aW91c0NhcmV0Tm9kZS5nZXQoKSwgb2xkUmVj
dCk7CkBAIC0xNjc1LDcgKzE2NzUsNyBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjpzZWxlY3RBbGwo
KQogCiAgICAgUmVmUHRyPE5vZGU+IHJvb3QgPSAwOwogICAgIE5vZGUqIHNlbGVjdFN0YXJ0VGFy
Z2V0ID0gMDsKLSAgICBpZiAoaXNDb250ZW50RWRpdGFibGUoKSkgeworICAgIGlmIChtX3NlbGVj
dGlvbi5pc0NvbnRlbnRFZGl0YWJsZSgpKSB7CiAgICAgICAgIHJvb3QgPSBoaWdoZXN0RWRpdGFi
bGVSb290KG1fc2VsZWN0aW9uLnN0YXJ0KCkpOwogICAgICAgICBpZiAoTm9kZSogc2hhZG93Um9v
dCA9IG1fc2VsZWN0aW9uLm5vbkJvdW5kYXJ5U2hhZG93VHJlZVJvb3ROb2RlKCkpCiAgICAgICAg
ICAgICBzZWxlY3RTdGFydFRhcmdldCA9IHNoYWRvd1Jvb3QtPnNoYWRvd0hvc3QoKTsKQEAgLTE3
MzMsMTIgKzE3MzMsNiBAQCBib29sIEZyYW1lU2VsZWN0aW9uOjpzZXRTZWxlY3RlZFJhbmdlKFJh
CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgRnJhbWVTZWxlY3Rpb246OmlzSW5QYXNzd29y
ZEZpZWxkKCkgY29uc3QKLXsKLSAgICBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudCogdGV4dENv
bnRyb2wgPSBlbmNsb3NpbmdUZXh0Rm9ybUNvbnRyb2woc3RhcnQoKSk7Ci0gICAgcmV0dXJuIHRl
eHRDb250cm9sICYmIGlzSFRNTElucHV0RWxlbWVudCh0ZXh0Q29udHJvbCkgJiYgdG9IVE1MSW5w
dXRFbGVtZW50KHRleHRDb250cm9sKS0+aXNQYXNzd29yZEZpZWxkKCk7Ci19Ci0KIHZvaWQgRnJh
bWVTZWxlY3Rpb246OmZvY3VzZWRPckFjdGl2ZVN0YXRlQ2hhbmdlZCgpCiB7CiAgICAgYm9vbCBh
Y3RpdmVBbmRGb2N1c2VkID0gaXNGb2N1c2VkQW5kQWN0aXZlKCk7CkBAIC0xODEzLDggKzE4MDcs
OSBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjp1cGRhdGVBcHBlYXJhbmNlKCkKIAogICAgIC8vIFBh
aW50IGEgYmxvY2sgY3Vyc29yIGluc3RlYWQgb2YgYSBjYXJldCBpbiBvdmVydHlwZSBtb2RlIHVu
bGVzcyB0aGUgY2FyZXQgaXMgYXQgdGhlIGVuZCBvZiBhIGxpbmUgKGluIHRoaXMgY2FzZQogICAg
IC8vIHRoZSBGcmFtZVNlbGVjdGlvbiB3aWxsIHBhaW50IGEgYmxpbmtpbmcgY2FyZXQgYXMgdXN1
YWwpLgorICAgIFZpc2libGVTZWxlY3Rpb24gb2xkU2VsZWN0aW9uID0gc2VsZWN0aW9uKCk7CiAg
ICAgVmlzaWJsZVBvc2l0aW9uIGZvcndhcmRQb3NpdGlvbjsKLSAgICBpZiAobV9zaG91bGRTaG93
QmxvY2tDdXJzb3IgJiYgbV9zZWxlY3Rpb24uaXNDYXJldCgpKSB7CisgICAgaWYgKG1fc2hvdWxk
U2hvd0Jsb2NrQ3Vyc29yICYmIG9sZFNlbGVjdGlvbi5pc0NhcmV0KCkpIHsKICAgICAgICAgZm9y
d2FyZFBvc2l0aW9uID0gbW9kaWZ5RXh0ZW5kaW5nRm9yd2FyZChDaGFyYWN0ZXJHcmFudWxhcml0
eSk7CiAgICAgICAgIG1fY2FyZXRQYWludCA9IGZvcndhcmRQb3NpdGlvbi5pc051bGwoKTsKICAg
ICB9CkBAIC0xODIzLDcgKzE4MTgsNyBAQCB2b2lkIEZyYW1lU2VsZWN0aW9uOjp1cGRhdGVBcHBl
YXJhbmNlKCkKICAgICBib29sIGNhcmV0UmVjdENoYW5nZWRPckNsZWFyZWQgPSByZWNvbXB1dGVD
YXJldFJlY3QoKTsKIAogICAgIGJvb2wgY2FyZXRCcm93c2luZyA9IG1fZnJhbWUtPnNldHRpbmdz
KCkuY2FyZXRCcm93c2luZ0VuYWJsZWQoKTsKLSAgICBib29sIHNob3VsZEJsaW5rID0gY2FyZXRJ
c1Zpc2libGUoKSAmJiBpc0NhcmV0KCkgJiYgKGlzQ29udGVudEVkaXRhYmxlKCkgfHwgY2FyZXRC
cm93c2luZykgJiYgZm9yd2FyZFBvc2l0aW9uLmlzTnVsbCgpOworICAgIGJvb2wgc2hvdWxkQmxp
bmsgPSBjYXJldElzVmlzaWJsZSgpICYmIGlzQ2FyZXQoKSAmJiAob2xkU2VsZWN0aW9uLmlzQ29u
dGVudEVkaXRhYmxlKCkgfHwgY2FyZXRCcm93c2luZykgJiYgZm9yd2FyZFBvc2l0aW9uLmlzTnVs
bCgpOwogCiAgICAgLy8gSWYgdGhlIGNhcmV0IG1vdmVkLCBzdG9wIHRoZSBibGluayB0aW1lciBz
byB3ZSBjYW4gcmVzdGFydCB3aXRoIGEKICAgICAvLyBibGFjayBjYXJldCBpbiB0aGUgbmV3IGxv
Y2F0aW9uLgpAQCAtMTg0OSw3ICsxODQ0LDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6dXBkYXRl
QXBwZWFyYW5jZSgpCiAKICAgICAvLyBDb25zdHJ1Y3QgYSBuZXcgVmlzaWJsZVNvbHV0aW9uLCBz
aW5jZSBtX3NlbGVjdGlvbiBpcyBub3QgbmVjZXNzYXJpbHkgdmFsaWQsIGFuZCB0aGUgZm9sbG93
aW5nIHN0ZXBzCiAgICAgLy8gYXNzdW1lIGEgdmFsaWQgc2VsZWN0aW9uLiBTZWUgPGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD02OTU2Mz4gYW5kIDxyZGFyOi8vcHJvYmxl
bS8xMDIzMjg2Nj4uCi0gICAgVmlzaWJsZVNlbGVjdGlvbiBzZWxlY3Rpb24obV9zZWxlY3Rpb24u
dmlzaWJsZVN0YXJ0KCksIGZvcndhcmRQb3NpdGlvbi5pc05vdE51bGwoKSA/IGZvcndhcmRQb3Np
dGlvbiA6IG1fc2VsZWN0aW9uLnZpc2libGVFbmQoKSk7CisgICAgVmlzaWJsZVNlbGVjdGlvbiBz
ZWxlY3Rpb24ob2xkU2VsZWN0aW9uLnZpc2libGVTdGFydCgpLCBmb3J3YXJkUG9zaXRpb24uaXNO
b3ROdWxsKCkgPyBmb3J3YXJkUG9zaXRpb24gOiBvbGRTZWxlY3Rpb24udmlzaWJsZUVuZCgpKTsK
IAogICAgIGlmICghc2VsZWN0aW9uLmlzUmFuZ2UoKSkgewogICAgICAgICB2aWV3LT5jbGVhclNl
bGVjdGlvbigpOwpAQCAtMTkxMiw3ICsxOTA3LDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6Y2Fy
ZXRCbGlua1RpbWVyRmlyZQogCiB2b2lkIEZyYW1lU2VsZWN0aW9uOjp1cGRhdGVTZWxlY3Rpb25D
YWNoZXNJZlNlbGVjdGlvbklzSW5zaWRlVGV4dEZvcm1Db250cm9sKEVVc2VyVHJpZ2dlcmVkIHVz
ZXJUcmlnZ2VyZWQpCiB7Ci0gICAgaWYgKEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50KiB0ZXh0
Q29udHJvbCA9IGVuY2xvc2luZ1RleHRGb3JtQ29udHJvbChzdGFydCgpKSkKKyAgICBpZiAoSFRN
TFRleHRGb3JtQ29udHJvbEVsZW1lbnQqIHRleHRDb250cm9sID0gZW5jbG9zaW5nVGV4dEZvcm1D
b250cm9sKG1fc2VsZWN0aW9uLnN0YXJ0KCkpKQogICAgICAgICB0ZXh0Q29udHJvbC0+c2VsZWN0
aW9uQ2hhbmdlZCh1c2VyVHJpZ2dlcmVkID09IFVzZXJUcmlnZ2VyZWQpOwogfQogCkBAIC0xOTM2
LDEzICsxOTMxLDEzIEBAIHZvaWQgRnJhbWVTZWxlY3Rpb246OnNldEZvY3VzZWRFbGVtZW50SWYK
IAogICAgIGJvb2wgY2FyZXRCcm93c2luZyA9IG1fZnJhbWUtPnNldHRpbmdzKCkuY2FyZXRCcm93
c2luZ0VuYWJsZWQoKTsKICAgICBpZiAoY2FyZXRCcm93c2luZykgewotICAgICAgICBpZiAoRWxl
bWVudCogYW5jaG9yID0gZW5jbG9zaW5nQW5jaG9yRWxlbWVudChiYXNlKCkpKSB7CisgICAgICAg
IGlmIChFbGVtZW50KiBhbmNob3IgPSBlbmNsb3NpbmdBbmNob3JFbGVtZW50KG1fc2VsZWN0aW9u
LmJhc2UoKSkpIHsKICAgICAgICAgICAgIG1fZnJhbWUtPnBhZ2UoKS0+Zm9jdXNDb250cm9sbGVy
KCkuc2V0Rm9jdXNlZEVsZW1lbnQoYW5jaG9yLCBtX2ZyYW1lKTsKICAgICAgICAgICAgIHJldHVy
bjsKICAgICAgICAgfQogICAgIH0KIAotICAgIGlmIChFbGVtZW50KiB0YXJnZXQgPSByb290RWRp
dGFibGVFbGVtZW50KCkpIHsKKyAgICBpZiAoRWxlbWVudCogdGFyZ2V0ID0gbV9zZWxlY3Rpb24u
cm9vdEVkaXRhYmxlRWxlbWVudCgpKSB7CiAgICAgICAgIC8vIFdhbGsgdXAgdGhlIERPTSB0cmVl
IHRvIHNlYXJjaCBmb3IgYW4gZWxlbWVudCB0byBmb2N1cy4KICAgICAgICAgd2hpbGUgKHRhcmdl
dCkgewogICAgICAgICAgICAgLy8gV2UgZG9uJ3Qgd2FudCB0byBzZXQgZm9jdXMgb24gYSBzdWJm
cmFtZSB3aGVuIHNlbGVjdGluZyBpbiBhIHBhcmVudCBmcmFtZSwKQEAgLTIwNTQsNyArMjA0OSw3
IEBAIEhUTUxGb3JtRWxlbWVudCogRnJhbWVTZWxlY3Rpb246OmN1cnJlbnQKICAgICAvLyBTdGFy
dCBsb29raW5nIGVpdGhlciBhdCB0aGUgYWN0aXZlIChmaXJzdCByZXNwb25kZXIpIG5vZGUsIG9y
IHdoZXJlIHRoZSBzZWxlY3Rpb24gaXMuCiAgICAgRWxlbWVudCogc3RhcnQgPSBtX2ZyYW1lLT5k
b2N1bWVudCgpLT5mb2N1c2VkRWxlbWVudCgpOwogICAgIGlmICghc3RhcnQpCi0gICAgICAgIHN0
YXJ0ID0gdGhpcy0+c3RhcnQoKS5lbGVtZW50KCk7CisgICAgICAgIHN0YXJ0ID0gbV9zZWxlY3Rp
b24uc3RhcnQoKS5lbGVtZW50KCk7CiAgICAgaWYgKCFzdGFydCkKICAgICAgICAgcmV0dXJuIG51
bGxwdHI7CiAKQEAgLTIwNzEsMTggKzIwNjYsMTggQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6cmV2
ZWFsU2VsZWN0aW9uKGNvbgogewogICAgIExheW91dFJlY3QgcmVjdDsKIAotICAgIHN3aXRjaCAo
c2VsZWN0aW9uVHlwZSgpKSB7CisgICAgc3dpdGNoIChtX3NlbGVjdGlvbi5zZWxlY3Rpb25UeXBl
KCkpIHsKICAgICBjYXNlIFZpc2libGVTZWxlY3Rpb246Ok5vU2VsZWN0aW9uOgogICAgICAgICBy
ZXR1cm47CiAgICAgY2FzZSBWaXNpYmxlU2VsZWN0aW9uOjpDYXJldFNlbGVjdGlvbjoKICAgICAg
ICAgcmVjdCA9IGFic29sdXRlQ2FyZXRCb3VuZHMoKTsKICAgICAgICAgYnJlYWs7CiAgICAgY2Fz
ZSBWaXNpYmxlU2VsZWN0aW9uOjpSYW5nZVNlbGVjdGlvbjoKLSAgICAgICAgcmVjdCA9IHJldmVh
bEV4dGVudE9wdGlvbiA9PSBSZXZlYWxFeHRlbnQgPyBWaXNpYmxlUG9zaXRpb24oZXh0ZW50KCkp
LmFic29sdXRlQ2FyZXRCb3VuZHMoKSA6IGVuY2xvc2luZ0ludFJlY3QoYm91bmRzKGZhbHNlKSk7
CisgICAgICAgIHJlY3QgPSByZXZlYWxFeHRlbnRPcHRpb24gPT0gUmV2ZWFsRXh0ZW50ID8gVmlz
aWJsZVBvc2l0aW9uKG1fc2VsZWN0aW9uLmV4dGVudCgpKS5hYnNvbHV0ZUNhcmV0Qm91bmRzKCkg
OiBlbmNsb3NpbmdJbnRSZWN0KGJvdW5kcyhmYWxzZSkpOwogICAgICAgICBicmVhazsKICAgICB9
CiAKLSAgICBQb3NpdGlvbiBzdGFydCA9IHRoaXMtPnN0YXJ0KCk7CisgICAgUG9zaXRpb24gc3Rh
cnQgPSBtX3NlbGVjdGlvbi5zdGFydCgpOwogICAgIEFTU0VSVChzdGFydC5kZXByZWNhdGVkTm9k
ZSgpKTsKICAgICBpZiAoc3RhcnQuZGVwcmVjYXRlZE5vZGUoKSAmJiBzdGFydC5kZXByZWNhdGVk
Tm9kZSgpLT5yZW5kZXJlcigpKSB7CiAjaWYgUExBVEZPUk0oSU9TKQpAQCAtMjExNyw3ICsyMTEy
LDcgQEAgdm9pZCBGcmFtZVNlbGVjdGlvbjo6c2V0U2VsZWN0aW9uRnJvbU5vbgogICAgIGlmICgh
aXNOb25lKCkgfHwgIShkb2N1bWVudC0+aGFzRWRpdGFibGVTdHlsZSgpIHx8IGNhcmV0QnJvd3Np
bmcpKQogICAgICAgICByZXR1cm47CiAjZWxzZQotICAgIGlmICghZG9jdW1lbnQgfHwgIShpc05v
bmUoKSB8fCBpc1N0YXJ0T2ZEb2N1bWVudChWaXNpYmxlUG9zaXRpb24oc2VsZWN0aW9uKCkuc3Rh
cnQoKSwgc2VsZWN0aW9uKCkuYWZmaW5pdHkoKSkpKSB8fCAhZG9jdW1lbnQtPmhhc0VkaXRhYmxl
U3R5bGUoKSkKKyAgICBpZiAoIWRvY3VtZW50IHx8ICEoaXNOb25lKCkgfHwgaXNTdGFydE9mRG9j
dW1lbnQoVmlzaWJsZVBvc2l0aW9uKG1fc2VsZWN0aW9uLnN0YXJ0KCksIG1fc2VsZWN0aW9uLmFm
ZmluaXR5KCkpKSkgfHwgIWRvY3VtZW50LT5oYXNFZGl0YWJsZVN0eWxlKCkpCiAgICAgICAgIHJl
dHVybjsKICNlbmRpZgogCkBAIC0yNDMxLDggKzI0MjYsOCBAQCBWaXNpYmxlU2VsZWN0aW9uIEZy
YW1lU2VsZWN0aW9uOjp3b3JkU2VsCiAgICAgbmV3U2VsZWN0aW9uLmV4cGFuZFVzaW5nR3JhbnVs
YXJpdHkoV29yZEdyYW51bGFyaXR5KTsKICAgICBmcmFtZVNlbGVjdGlvbi5zZXRTZWxlY3Rpb24o
bmV3U2VsZWN0aW9uLCBDbG9zZVR5cGluZyB8IENsZWFyVHlwaW5nU3R5bGUsIEFsaWduQ3Vyc29y
T25TY3JvbGxJZk5lZWRlZCwgZnJhbWVTZWxlY3Rpb24uZ3JhbnVsYXJpdHkoKSk7CiAKLSAgICBQ
b3NpdGlvbiBzdGFydFBvcyhmcmFtZVNlbGVjdGlvbi5zZWxlY3Rpb24oKS5zdGFydCgpKTsKLSAg
ICBQb3NpdGlvbiBlbmRQb3MoZnJhbWVTZWxlY3Rpb24uc2VsZWN0aW9uKCkuZW5kKCkpOworICAg
IFBvc2l0aW9uIHN0YXJ0UG9zKGZyYW1lU2VsZWN0aW9uLnNlbGVjdGlvbigpLnNlbGVjdGlvbigp
LnN0YXJ0KCkpOworICAgIFBvc2l0aW9uIGVuZFBvcyhmcmFtZVNlbGVjdGlvbi5zZWxlY3Rpb24o
KS5zZWxlY3Rpb24oKS5lbmQoKSk7CiAKICAgICAvLyBFeHBhbnNpb24gY2Fubm90IGJlIGFsbG93
ZWQgdG8gY2hhbmdlIHNlbGVjdGlvbiBzbyB0aGF0IGl0IGlzIG5vIGxvbmdlcgogICAgIC8vIHRv
dWNoZXMgKG9yIGNvbnRhaW5zKSB0aGUgb3JpZ2luYWwsIHVuZXhwYW5kZWQgc2VsZWN0aW9uLgpA
QCAtMjQ3OSw4ICsyNDc0LDggQEAgVmlzaWJsZVNlbGVjdGlvbiBGcmFtZVNlbGVjdGlvbjo6d29y
ZFNlbAogICAgICAgICB9CiAgICAgICAgIGZyYW1lU2VsZWN0aW9uLm1vdmVUbyhzdGFydFZpc2li
bGVQb3MpOwogICAgICAgICBmcmFtZVNlbGVjdGlvbi5tb2RpZnkoRnJhbWVTZWxlY3Rpb246OkFs
dGVyYXRpb25FeHRlbmQsIERpcmVjdGlvbkJhY2t3YXJkLCBXb3JkR3JhbnVsYXJpdHkpOwotICAg
ICAgICBzdGFydFBvcyA9IGZyYW1lU2VsZWN0aW9uLnNlbGVjdGlvbigpLnN0YXJ0KCk7Ci0gICAg
ICAgIGVuZFBvcyA9IGZyYW1lU2VsZWN0aW9uLnNlbGVjdGlvbigpLmVuZCgpOworICAgICAgICBz
dGFydFBvcyA9IGZyYW1lU2VsZWN0aW9uLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnN0YXJ0KCk7
CisgICAgICAgIGVuZFBvcyA9IGZyYW1lU2VsZWN0aW9uLnNlbGVjdGlvbigpLnNlbGVjdGlvbigp
LmVuZCgpOwogICAgICAgICBzdGFydFZpc2libGVQb3MgPSBWaXNpYmxlUG9zaXRpb24oc3RhcnRQ
b3MsIFZQX0RFRkFVTFRfQUZGSU5JVFkpOwogICAgICAgICBlbmRWaXNpYmxlUG9zID0gVmlzaWJs
ZVBvc2l0aW9uKGVuZFBvcywgVlBfREVGQVVMVF9BRkZJTklUWSk7CiAgICAgICAgIGlmIChzdGFy
dFZpc2libGVQb3MuaXNOdWxsKCkgfHwgZW5kVmlzaWJsZVBvcy5pc051bGwoKSkgewpJbmRleDog
U291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvRnJhbWVTZWxlY3Rpb24uaAkocmV2aXNpb24gMTYzMTI4KQor
KysgU291cmNlL1dlYkNvcmUvZWRpdGluZy9GcmFtZVNlbGVjdGlvbi5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xMzUsMTIgKzEzNSw3IEBAIHB1YmxpYzoKIAogICAgIGV4cGxpY2l0IEZyYW1lU2VsZWN0
aW9uKEZyYW1lKiA9IDApOwogCi0gICAgRWxlbWVudCogcm9vdEVkaXRhYmxlRWxlbWVudCgpIGNv
bnN0IHsgcmV0dXJuIG1fc2VsZWN0aW9uLnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsgfQogICAgIEVs
ZW1lbnQqIHJvb3RFZGl0YWJsZUVsZW1lbnRPckRvY3VtZW50RWxlbWVudCgpIGNvbnN0OwotCi0g
ICAgYm9vbCBoYXNFZGl0YWJsZVN0eWxlKCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3Rpb24uaGFz
RWRpdGFibGVTdHlsZSgpOyB9Ci0gICAgYm9vbCBpc0NvbnRlbnRFZGl0YWJsZSgpIGNvbnN0IHsg
cmV0dXJuIG1fc2VsZWN0aW9uLmlzQ29udGVudEVkaXRhYmxlKCk7IH0KLSAgICBib29sIGlzQ29u
dGVudFJpY2hseUVkaXRhYmxlKCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3Rpb24uaXNDb250ZW50
UmljaGx5RWRpdGFibGUoKTsgfQogICAgICAKICAgICB2b2lkIG1vdmVUbyhjb25zdCBSYW5nZSos
IEVBZmZpbml0eSwgRVVzZXJUcmlnZ2VyZWQgPSBOb3RVc2VyVHJpZ2dlcmVkKTsKICAgICB2b2lk
IG1vdmVUbyhjb25zdCBWaXNpYmxlUG9zaXRpb24mLCBFVXNlclRyaWdnZXJlZCA9IE5vdFVzZXJU
cmlnZ2VyZWQsIEN1cnNvckFsaWduT25TY3JvbGwgPSBBbGlnbkN1cnNvck9uU2Nyb2xsSWZOZWVk
ZWQpOwpAQCAtMTU3LDEwICsxNTIsNiBAQCBwdWJsaWM6CiAKICAgICBib29sIGNvbnRhaW5zKGNv
bnN0IExheW91dFBvaW50Jik7CiAKLSAgICBWaXNpYmxlU2VsZWN0aW9uOjpTZWxlY3Rpb25UeXBl
IHNlbGVjdGlvblR5cGUoKSBjb25zdCB7IHJldHVybiBtX3NlbGVjdGlvbi5zZWxlY3Rpb25UeXBl
KCk7IH0KLQotICAgIEVBZmZpbml0eSBhZmZpbml0eSgpIGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0
aW9uLmFmZmluaXR5KCk7IH0KLQogICAgIGJvb2wgbW9kaWZ5KEVBbHRlcmF0aW9uLCBTZWxlY3Rp
b25EaXJlY3Rpb24sIFRleHRHcmFudWxhcml0eSwgRVVzZXJUcmlnZ2VyZWQgPSBOb3RVc2VyVHJp
Z2dlcmVkKTsKICAgICBlbnVtIFZlcnRpY2FsRGlyZWN0aW9uIHsgRGlyZWN0aW9uVXAsIERpcmVj
dGlvbkRvd24gfTsKICAgICBib29sIG1vZGlmeShFQWx0ZXJhdGlvbiwgdW5zaWduZWQgdmVydGlj
YWxEaXN0YW5jZSwgVmVydGljYWxEaXJlY3Rpb24sIEVVc2VyVHJpZ2dlcmVkID0gTm90VXNlclRy
aWdnZXJlZCwgQ3Vyc29yQWxpZ25PblNjcm9sbCA9IEFsaWduQ3Vyc29yT25TY3JvbGxJZk5lZWRl
ZCk7CkBAIC0xNzUsOSArMTY2LDYgQEAgcHVibGljOgogICAgIHZvaWQgc2V0RXh0ZW50KGNvbnN0
IFZpc2libGVQb3NpdGlvbiYsIEVVc2VyVHJpZ2dlcmVkID0gTm90VXNlclRyaWdnZXJlZCk7CiAg
ICAgdm9pZCBzZXRFeHRlbnQoY29uc3QgUG9zaXRpb24mLCBFQWZmaW5pdHksIEVVc2VyVHJpZ2dl
cmVkID0gTm90VXNlclRyaWdnZXJlZCk7CiAKLSAgICBQb3NpdGlvbiBiYXNlKCkgY29uc3QgeyBy
ZXR1cm4gbV9zZWxlY3Rpb24uYmFzZSgpOyB9Ci0gICAgUG9zaXRpb24gZXh0ZW50KCkgY29uc3Qg
eyByZXR1cm4gbV9zZWxlY3Rpb24uZXh0ZW50KCk7IH0KLSAgICBQb3NpdGlvbiBzdGFydCgpIGNv
bnN0IHsgcmV0dXJuIG1fc2VsZWN0aW9uLnN0YXJ0KCk7IH0KICAgICBQb3NpdGlvbiBlbmQoKSBj
b25zdCB7IHJldHVybiBtX3NlbGVjdGlvbi5lbmQoKTsgfQogCiAgICAgLy8gUmV0dXJuIHRoZSBy
ZW5kZXJlciB0aGF0IGlzIHJlc3BvbnNpYmxlIGZvciBwYWludGluZyB0aGUgY2FyZXQgKGluIHRo
ZSBzZWxlY3Rpb24gc3RhcnQgbm9kZSkKQEAgLTE5Niw3ICsxODQsNiBAQCBwdWJsaWM6CiAgICAg
Ym9vbCBpc0NhcmV0KCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3Rpb24uaXNDYXJldCgpOyB9CiAg
ICAgYm9vbCBpc1JhbmdlKCkgY29uc3QgeyByZXR1cm4gbV9zZWxlY3Rpb24uaXNSYW5nZSgpOyB9
CiAgICAgYm9vbCBpc0NhcmV0T3JSYW5nZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2VsZWN0aW9uLmlz
Q2FyZXRPclJhbmdlKCk7IH0KLSAgICBib29sIGlzSW5QYXNzd29yZEZpZWxkKCkgY29uc3Q7CiAg
ICAgYm9vbCBpc0FsbChFZGl0aW5nQm91bmRhcnlDcm9zc2luZ1J1bGUgcnVsZSA9IENhbm5vdENy
b3NzRWRpdGluZ0JvdW5kYXJ5KSBjb25zdCB7IHJldHVybiBtX3NlbGVjdGlvbi5pc0FsbChydWxl
KTsgfQogICAgIAogICAgIFBhc3NSZWZQdHI8UmFuZ2U+IHRvTm9ybWFsaXplZFJhbmdlKCkgY29u
c3QgeyByZXR1cm4gbV9zZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKTsgfQpAQCAtMzM1LDYg
KzMyMiw3IEBAIHByaXZhdGU6CiAgICAgTGF5b3V0VW5pdCBtX3hQb3NGb3JWZXJ0aWNhbEFycm93
TmF2aWdhdGlvbjsKIAogICAgIFZpc2libGVTZWxlY3Rpb24gbV9zZWxlY3Rpb247CisgICAgbXV0
YWJsZSBWaXNpYmxlU2VsZWN0aW9uIG1fdmFsaWRhdGVkU2VsZWN0aW9uQ2FjaGU7CiAgICAgVmlz
aWJsZVBvc2l0aW9uIG1fb3JpZ2luYWxCYXNlOyAvLyBVc2VkIHRvIHN0b3JlIGJhc2UgYmVmb3Jl
IHRoZSBhZGp1c3RtZW50IGF0IGJpZGkgYm91bmRhcnkKICAgICBUZXh0R3JhbnVsYXJpdHkgbV9n
cmFudWxhcml0eTsKIApAQCAtMzUyLDcgKzM0MCw3IEBAIHByaXZhdGU6CiAgICAgYm9vbCBtX3No
b3VsZFNob3dCbG9ja0N1cnNvciA6IDE7CiAKICNpZiBQTEFURk9STShJT1MpCi0gICAgYm9vbCBt
X3VwZGF0ZUFwcGVhcmFuY2VFbmFibGVkIDogMTsKKyAgICBib29sIG1fdXBkYXRlQXBwZWFyYW5j
ZUVuYWJsZWQgOiAxO0RyYWdDb250cm9sbGVyLmNwcAogICAgIGJvb2wgbV9jYXJldEJsaW5rcyA6
IDE7CiAgICAgQ29sb3IgbV9jYXJldENvbG9yOwogICAgIGludCBtX2Nsb3NlVHlwaW5nU3VwcHJl
c3Npb25zOwpJbmRleDogU291cmNlL1dlYkNvcmUvZWRpdGluZy9SZW1vdmVGb3JtYXRDb21tYW5k
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1JlbW92ZUZvcm1hdENv
bW1hbmQuY3BwCShyZXZpc2lvbiAxNjMxMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Jl
bW92ZUZvcm1hdENvbW1hbmQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NywxMiArNzcsMTIgQEAg
c3RhdGljIGJvb2wgaXNFbGVtZW50Rm9yUmVtb3ZlRm9ybWF0Q29tbQogCiB2b2lkIFJlbW92ZUZv
cm1hdENvbW1hbmQ6OmRvQXBwbHkoKQogewotICAgIGlmICghZnJhbWUoKS5zZWxlY3Rpb24oKS5z
ZWxlY3Rpb24oKS5pc05vbk9ycGhhbmVkQ2FyZXRPclJhbmdlKCkpCisgICAgaWYgKCFlbmRpbmdT
ZWxlY3Rpb24oKS5pc05vbk9ycGhhbmVkQ2FyZXRPclJhbmdlKCkpCiAgICAgICAgIHJldHVybjsK
IAogICAgIC8vIEdldCB0aGUgZGVmYXVsdCBzdHlsZSBmb3IgdGhpcyBlZGl0YWJsZSByb290LCBp
dCdzIHRoZSBzdHlsZSB0aGF0IHdlJ2xsIGdpdmUgdGhlCiAgICAgLy8gY29udGVudCB0aGF0IHdl
J3JlIG9wZXJhdGluZyBvbi4KLSAgICBOb2RlKiByb290ID0gZnJhbWUoKS5zZWxlY3Rpb24oKS5y
b290RWRpdGFibGVFbGVtZW50KCk7CisgICAgTm9kZSogcm9vdCA9IGVuZGluZ1NlbGVjdGlvbigp
LnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsKICAgICBSZWZQdHI8RWRpdGluZ1N0eWxlPiBkZWZhdWx0
U3R5bGUgPSBFZGl0aW5nU3R5bGU6OmNyZWF0ZShyb290KTsKIAogICAgIC8vIFdlIHdhbnQgdG8g
cmVtb3ZlIGV2ZXJ5dGhpbmcgYnV0IHRyYW5zcGFyZW50IGJhY2tncm91bmQuCkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVTZWxlY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5jcHAJKHJldmlzaW9uIDE2MzEy
OCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgIkRvY3VtZW50LmgiCiAjaW5j
bHVkZSAiRWxlbWVudC5oIgorI2luY2x1ZGUgIkhUTUxJbnB1dEVsZW1lbnQuaCIKICNpbmNsdWRl
ICJUZXh0SXRlcmF0b3IuaCIKICNpbmNsdWRlICJWaXNpYmxlVW5pdHMuaCIKICNpbmNsdWRlICJo
dG1sZWRpdGluZy5oIgpAQCAtNjY2LDYgKzY2NywxMiBAQCBOb2RlKiBWaXNpYmxlU2VsZWN0aW9u
Ojpub25Cb3VuZGFyeVNoYWRvCiAgICAgcmV0dXJuIHN0YXJ0KCkuZGVwcmVjYXRlZE5vZGUoKSA/
IHN0YXJ0KCkuZGVwcmVjYXRlZE5vZGUoKS0+bm9uQm91bmRhcnlTaGFkb3dUcmVlUm9vdE5vZGUo
KSA6IDA7CiB9CiAKK2Jvb2wgVmlzaWJsZVNlbGVjdGlvbjo6aXNJblBhc3N3b3JkRmllbGQoKSBj
b25zdAoreworICAgIEhUTUxUZXh0Rm9ybUNvbnRyb2xFbGVtZW50KiB0ZXh0Q29udHJvbCA9IGVu
Y2xvc2luZ1RleHRGb3JtQ29udHJvbChzdGFydCgpKTsKKyAgICByZXR1cm4gdGV4dENvbnRyb2wg
JiYgaXNIVE1MSW5wdXRFbGVtZW50KHRleHRDb250cm9sKSAmJiB0b0hUTUxJbnB1dEVsZW1lbnQo
dGV4dENvbnRyb2wpLT5pc1Bhc3N3b3JkRmllbGQoKTsKK30KKwogI2lmbmRlZiBOREVCVUcKIAog
dm9pZCBWaXNpYmxlU2VsZWN0aW9uOjpkZWJ1Z1Bvc2l0aW9uKCkgY29uc3QKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5oCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL2VkaXRpbmcvVmlzaWJsZVNlbGVjdGlvbi5oCShyZXZpc2lvbiAxNjMxMjgpCisr
KyBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL1Zpc2libGVTZWxlY3Rpb24uaAkod29ya2luZyBjb3B5
KQpAQCAtMTA1LDYgKzEwNSw4IEBAIHB1YmxpYzoKICAgICAvLyBTaGFkb3dSb290IG5vZGUgZm9y
IG5ldyBzaGFkb3cgdHJlZXMsIG9yIDAgZm9yIG5vbi1zaGFkb3cgdHJlZXMuCiAgICAgTm9kZSog
bm9uQm91bmRhcnlTaGFkb3dUcmVlUm9vdE5vZGUoKSBjb25zdDsKIAorICAgIGJvb2wgaXNJblBh
c3N3b3JkRmllbGQoKSBjb25zdDsKKwogI2lmbmRlZiBOREVCVUcKICAgICB2b2lkIGRlYnVnUG9z
aXRpb24oKSBjb25zdDsKICAgICB2b2lkIGZvcm1hdEZvckRlYnVnZ2VyKGNoYXIqIGJ1ZmZlciwg
dW5zaWduZWQgbGVuZ3RoKSBjb25zdDsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcvbWFj
L0VkaXRvck1hYy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9lZGl0aW5nL21hYy9F
ZGl0b3JNYWMubW0JKHJldmlzaW9uIDE2MzEyOCkKKysrIFNvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
bWFjL0VkaXRvck1hYy5tbQkod29ya2luZyBjb3B5KQpAQCAtMjM5LDcgKzIzOSw3IEBAIE5TRGlj
dGlvbmFyeSogRWRpdG9yOjpmb250QXR0cmlidXRlc0ZvclMKIAogYm9vbCBFZGl0b3I6OmNhbkNv
cHlFeGNsdWRpbmdTdGFuZGFsb25lSW1hZ2VzKCkKIHsKLSAgICBGcmFtZVNlbGVjdGlvbiYgc2Vs
ZWN0aW9uID0gbV9mcmFtZS5zZWxlY3Rpb24oKTsKKyAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9u
JiBzZWxlY3Rpb24gPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwogICAgIHJldHVy
biBzZWxlY3Rpb24uaXNSYW5nZSgpICYmICFzZWxlY3Rpb24uaXNJblBhc3N3b3JkRmllbGQoKTsK
IH0KIApAQCAtMjU5LDcgKzI1OSw3IEBAIHZvaWQgRWRpdG9yOjp0YWtlRmluZFN0cmluZ0Zyb21T
ZWxlY3Rpb24KIHZvaWQgRWRpdG9yOjpyZWFkU2VsZWN0aW9uRnJvbVBhc3RlYm9hcmQoY29uc3Qg
U3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkKIHsKICAgICBQYXN0ZWJvYXJkIHBhc3RlYm9hcmQocGFz
dGVib2FyZE5hbWUpOwotICAgIGlmIChtX2ZyYW1lLnNlbGVjdGlvbigpLmlzQ29udGVudFJpY2hs
eUVkaXRhYmxlKCkpCisgICAgaWYgKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXND
b250ZW50UmljaGx5RWRpdGFibGUoKSkKICAgICAgICAgcGFzdGVXaXRoUGFzdGVib2FyZCgmcGFz
dGVib2FyZCwgdHJ1ZSk7CiAgICAgZWxzZQogICAgICAgICBwYXN0ZUFzUGxhaW5UZXh0V2l0aFBh
c3RlYm9hcmQocGFzdGVib2FyZCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBbmNo
b3JFbGVtZW50LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBbmNo
b3JFbGVtZW50LmNwcAkocmV2aXNpb24gMTYzMTI4KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9I
VE1MQW5jaG9yRWxlbWVudC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5NSw3ICsxOTUsNyBAQCB2
b2lkIEhUTUxBbmNob3JFbGVtZW50OjpkZWZhdWx0RXZlbnRIYW5kCiAgICAgICAgICAgICAvLyBU
aGlzIGtlZXBzIHRyYWNrIG9mIHRoZSBlZGl0YWJsZSBibG9jayB0aGF0IHRoZSBzZWxlY3Rpb24g
d2FzIGluIChpZiBpdCB3YXMgaW4gb25lKSBqdXN0IGJlZm9yZSB0aGUgbGluayB3YXMgY2xpY2tl
ZAogICAgICAgICAgICAgLy8gZm9yIHRoZSBMaXZlV2hlbk5vdEZvY3VzZWQgZWRpdGFibGUgbGlu
ayBiZWhhdmlvcgogICAgICAgICAgICAgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZlbnROYW1lcygp
Lm1vdXNlZG93bkV2ZW50ICYmIGV2ZW50LT5pc01vdXNlRXZlbnQoKSAmJiBzdGF0aWNfY2FzdDxN
b3VzZUV2ZW50Kj4oZXZlbnQpLT5idXR0b24oKSAhPSBSaWdodEJ1dHRvbiAmJiBkb2N1bWVudCgp
LmZyYW1lKCkpIHsKLSAgICAgICAgICAgICAgICBzZXRSb290RWRpdGFibGVFbGVtZW50Rm9yU2Vs
ZWN0aW9uT25Nb3VzZURvd24oZG9jdW1lbnQoKS5mcmFtZSgpLT5zZWxlY3Rpb24oKS5yb290RWRp
dGFibGVFbGVtZW50KCkpOworICAgICAgICAgICAgICAgIHNldFJvb3RFZGl0YWJsZUVsZW1lbnRG
b3JTZWxlY3Rpb25Pbk1vdXNlRG93bihkb2N1bWVudCgpLmZyYW1lKCktPnNlbGVjdGlvbigpLnNl
bGVjdGlvbigpLnJvb3RFZGl0YWJsZUVsZW1lbnQoKSk7CiAgICAgICAgICAgICAgICAgbV93YXNT
aGlmdEtleURvd25Pbk1vdXNlRG93biA9IHN0YXRpY19jYXN0PE1vdXNlRXZlbnQqPihldmVudCkt
PnNoaWZ0S2V5KCk7CiAgICAgICAgICAgICB9IGVsc2UgaWYgKGV2ZW50LT50eXBlKCkgPT0gZXZl
bnROYW1lcygpLm1vdXNlb3ZlckV2ZW50KSB7CiAgICAgICAgICAgICAgICAgLy8gVGhlc2UgYXJl
IGNsZWFyZWQgb24gbW91c2VvdmVyIGFuZCBub3QgbW91c2VvdXQgYmVjYXVzZSB0aGVpciB2YWx1
ZXMgYXJlIG5lZWRlZCBmb3IgZHJhZyBldmVudHMsCkBAIC0yMjgsNyArMjI4LDcgQEAgdm9pZCBI
VE1MQW5jaG9yRWxlbWVudDo6c2V0QWN0aXZlKGJvb2wgZAogICAgICAgICAgICAgLy8gRG9uJ3Qg
c2V0IHRoZSBsaW5rIHRvIGJlIGFjdGl2ZSBpZiB0aGUgY3VycmVudCBzZWxlY3Rpb24gaXMgaW4g
dGhlIHNhbWUgZWRpdGFibGUgYmxvY2sgYXMKICAgICAgICAgICAgIC8vIHRoaXMgbGluawogICAg
ICAgICAgICAgY2FzZSBFZGl0YWJsZUxpbmtMaXZlV2hlbk5vdEZvY3VzZWQ6Ci0gICAgICAgICAg
ICAgICAgaWYgKGRvd24gJiYgZG9jdW1lbnQoKS5mcmFtZSgpICYmIGRvY3VtZW50KCkuZnJhbWUo
KS0+c2VsZWN0aW9uKCkucm9vdEVkaXRhYmxlRWxlbWVudCgpID09IHJvb3RFZGl0YWJsZUVsZW1l
bnQoKSkKKyAgICAgICAgICAgICAgICBpZiAoZG93biAmJiBkb2N1bWVudCgpLmZyYW1lKCkgJiYg
ZG9jdW1lbnQoKS5mcmFtZSgpLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5yb290RWRpdGFibGVF
bGVtZW50KCkgPT0gcm9vdEVkaXRhYmxlRWxlbWVudCgpKQogICAgICAgICAgICAgICAgICAgICBy
ZXR1cm47CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTFRleHRGb3JtQ29udHJvbEVsZW1lbnQuY3BwCShy
ZXZpc2lvbiAxNjMxMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxUZXh0Rm9ybUNvbnRy
b2xFbGVtZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzU2LDcgKzM1Niw3IEBAIGludCBIVE1M
VGV4dEZvcm1Db250cm9sRWxlbWVudDo6Y29tcHV0ZVMKICAgICBpZiAoIWZyYW1lKQogICAgICAg
ICByZXR1cm4gMDsKIAotICAgIHJldHVybiBpbmRleEZvclZpc2libGVQb3NpdGlvbihmcmFtZS0+
c2VsZWN0aW9uKCkuc3RhcnQoKSk7CisgICAgcmV0dXJuIGluZGV4Rm9yVmlzaWJsZVBvc2l0aW9u
KGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpKTsKIH0KIAogaW50IEhUTUxU
ZXh0Rm9ybUNvbnRyb2xFbGVtZW50OjpzZWxlY3Rpb25FbmQoKSBjb25zdApAQCAtMzc1LDcgKzM3
NSw3IEBAIGludCBIVE1MVGV4dEZvcm1Db250cm9sRWxlbWVudDo6Y29tcHV0ZVMKICAgICBpZiAo
IWZyYW1lKQogICAgICAgICByZXR1cm4gMDsKIAotICAgIHJldHVybiBpbmRleEZvclZpc2libGVQ
b3NpdGlvbihmcmFtZS0+c2VsZWN0aW9uKCkuZW5kKCkpOworICAgIHJldHVybiBpbmRleEZvclZp
c2libGVQb3NpdGlvbihmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuZW5kKCkpOwogfQog
CiBzdGF0aWMgY29uc3QgQXRvbWljU3RyaW5nJiBkaXJlY3Rpb25TdHJpbmcoVGV4dEZpZWxkU2Vs
ZWN0aW9uRGlyZWN0aW9uIGRpcmVjdGlvbikKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BhZ2UvQ29u
dGV4dE1lbnVDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdl
L0NvbnRleHRNZW51Q29udHJvbGxlci5jcHAJKHJldmlzaW9uIDE2MzEyOCkKKysrIFNvdXJjZS9X
ZWJDb3JlL3BhZ2UvQ29udGV4dE1lbnVDb250cm9sbGVyLmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MzQxLDE1ICszNDEsMTUgQEAgdm9pZCBDb250ZXh0TWVudUNvbnRyb2xsZXI6OmNvbnRleHRNZW51
SQogICAgICAgICBicmVhazsKICNlbmRpZgogICAgIGNhc2UgQ29udGV4dE1lbnVJdGVtVGFnU3Bl
bGxpbmdHdWVzczogewotICAgICAgICBGcmFtZVNlbGVjdGlvbiYgZnJhbWVTZWxlY3Rpb24gPSBm
cmFtZS0+c2VsZWN0aW9uKCk7Ci0gICAgICAgIGlmIChmcmFtZS0+ZWRpdG9yKCkuc2hvdWxkSW5z
ZXJ0VGV4dChpdGVtLT50aXRsZSgpLCBmcmFtZVNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgp
LmdldCgpLCBFZGl0b3JJbnNlcnRBY3Rpb25QYXN0ZWQpKSB7CisgICAgICAgIFZpc2libGVTZWxl
Y3Rpb24gc2VsZWN0aW9uID0gZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgICAg
ICBpZiAoZnJhbWUtPmVkaXRvcigpLnNob3VsZEluc2VydFRleHQoaXRlbS0+dGl0bGUoKSwgc2Vs
ZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCkuZ2V0KCksIEVkaXRvckluc2VydEFjdGlvblBhc3Rl
ZCkpIHsKICAgICAgICAgICAgIFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpDb21tYW5kT3B0aW9u
cyByZXBsYWNlT3B0aW9ucyA9IFJlcGxhY2VTZWxlY3Rpb25Db21tYW5kOjpNYXRjaFN0eWxlIHwg
UmVwbGFjZVNlbGVjdGlvbkNvbW1hbmQ6OlByZXZlbnROZXN0aW5nOwogCiAgICAgICAgICAgICBp
ZiAoZnJhbWUtPmVkaXRvcigpLmJlaGF2aW9yKCkuc2hvdWxkQWxsb3dTcGVsbGluZ1N1Z2dlc3Rp
b25zV2l0aG91dFNlbGVjdGlvbigpKSB7Ci0gICAgICAgICAgICAgICAgQVNTRVJUKGZyYW1lU2Vs
ZWN0aW9uLmlzQ2FyZXRPclJhbmdlKCkpOwotICAgICAgICAgICAgICAgIFZpc2libGVTZWxlY3Rp
b24gd29yZFNlbGVjdGlvbihmcmFtZVNlbGVjdGlvbi5iYXNlKCkpOworICAgICAgICAgICAgICAg
IEFTU0VSVChzZWxlY3Rpb24uaXNDYXJldE9yUmFuZ2UoKSk7CisgICAgICAgICAgICAgICAgVmlz
aWJsZVNlbGVjdGlvbiB3b3JkU2VsZWN0aW9uKHNlbGVjdGlvbi5iYXNlKCkpOwogICAgICAgICAg
ICAgICAgIHdvcmRTZWxlY3Rpb24uZXhwYW5kVXNpbmdHcmFudWxhcml0eShXb3JkR3JhbnVsYXJp
dHkpOwotICAgICAgICAgICAgICAgIGZyYW1lU2VsZWN0aW9uLnNldFNlbGVjdGlvbih3b3JkU2Vs
ZWN0aW9uKTsKKyAgICAgICAgICAgICAgICBmcmFtZS0+c2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9u
KHdvcmRTZWxlY3Rpb24pOwogICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICBB
U1NFUlQoZnJhbWUtPmVkaXRvcigpLnNlbGVjdGVkVGV4dCgpLmxlbmd0aCgpKTsKICAgICAgICAg
ICAgICAgICByZXBsYWNlT3B0aW9ucyB8PSBSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZDo6U2VsZWN0
UmVwbGFjZW1lbnQ7CkBAIC0zNTksNyArMzU5LDcgQEAgdm9pZCBDb250ZXh0TWVudUNvbnRyb2xs
ZXI6OmNvbnRleHRNZW51SQogICAgICAgICAgICAgQVNTRVJUKGRvY3VtZW50KTsKICAgICAgICAg
ICAgIFJlZlB0cjxSZXBsYWNlU2VsZWN0aW9uQ29tbWFuZD4gY29tbWFuZCA9IFJlcGxhY2VTZWxl
Y3Rpb25Db21tYW5kOjpjcmVhdGUoKmRvY3VtZW50LCBjcmVhdGVGcmFnbWVudEZyb21NYXJrdXAo
KmRvY3VtZW50LCBpdGVtLT50aXRsZSgpLCAiIiksIHJlcGxhY2VPcHRpb25zKTsKICAgICAgICAg
ICAgIGFwcGx5Q29tbWFuZChjb21tYW5kKTsKLSAgICAgICAgICAgIGZyYW1lU2VsZWN0aW9uLnJl
dmVhbFNlbGVjdGlvbihTY3JvbGxBbGlnbm1lbnQ6OmFsaWduVG9FZGdlSWZOZWVkZWQpOworICAg
ICAgICAgICAgZnJhbWUtPnNlbGVjdGlvbigpLnJldmVhbFNlbGVjdGlvbihTY3JvbGxBbGlnbm1l
bnQ6OmFsaWduVG9FZGdlSWZOZWVkZWQpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogICAg
IH0KQEAgLTkyMSw3ICs5MjEsNyBAQCB2b2lkIENvbnRleHRNZW51Q29udHJvbGxlcjo6cG9wdWxh
dGUoKQogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfSBlbHNlIHsgLy8gTWFrZSBhbiBl
ZGl0aW5nIGNvbnRleHQgbWVudQotICAgICAgICBib29sIGluUGFzc3dvcmRGaWVsZCA9IGZyYW1l
LT5zZWxlY3Rpb24oKS5pc0luUGFzc3dvcmRGaWVsZCgpOworICAgICAgICBib29sIGluUGFzc3dv
cmRGaWVsZCA9IGZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0luUGFzc3dvcmRGaWVs
ZCgpOwogICAgICAgICBpZiAoIWluUGFzc3dvcmRGaWVsZCkgewogICAgICAgICAgICAgYm9vbCBo
YXZlQ29udGV4dE1lbnVJdGVtc0Zvck1pc3NwZWxsaW5nT3JHcmFtbWVyID0gZmFsc2U7CiAgICAg
ICAgICAgICBib29sIHNwZWxsQ2hlY2tpbmdFbmFibGVkID0gZnJhbWUtPmVkaXRvcigpLmlzU3Bl
bGxDaGVja2luZ0VuYWJsZWRGb3Iobm9kZSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0Ry
YWdDb250cm9sbGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL0RyYWdD
b250cm9sbGVyLmNwcAkocmV2aXNpb24gMTYzMTI4KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9E
cmFnQ29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1OCw3ICsxNTgsOCBAQCBzdGF0
aWMgUGFzc1JlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBkb2N1CiAKIGJvb2wgRHJhZ0NvbnRyb2xs
ZXI6OmRyYWdJc01vdmUoRnJhbWVTZWxlY3Rpb24mIHNlbGVjdGlvbiwgRHJhZ0RhdGEmIGRyYWdE
YXRhKQogewotICAgIHJldHVybiBtX2RvY3VtZW50VW5kZXJNb3VzZSA9PSBtX2RyYWdJbml0aWF0
b3IgJiYgc2VsZWN0aW9uLmlzQ29udGVudEVkaXRhYmxlKCkgJiYgc2VsZWN0aW9uLmlzUmFuZ2Uo
KSAmJiAhaXNDb3B5S2V5RG93bihkcmFnRGF0YSk7CisgICAgY29uc3QgVmlzaWJsZVNlbGVjdGlv
biYgdmlzaWJsZVNlbGVjdGlvbiA9IHNlbGVjdGlvbi5zZWxlY3Rpb24oKTsKKyAgICByZXR1cm4g
bV9kb2N1bWVudFVuZGVyTW91c2UgPT0gbV9kcmFnSW5pdGlhdG9yICYmIHZpc2libGVTZWxlY3Rp
b24uaXNDb250ZW50RWRpdGFibGUoKSAmJiB2aXNpYmxlU2VsZWN0aW9uLmlzUmFuZ2UoKSAmJiAh
aXNDb3B5S2V5RG93bihkcmFnRGF0YSk7CiB9CiAKIC8vIEZJWE1FOiBUaGlzIG1ldGhvZCBpcyBw
b29ybHkgbmFtZWQuICBXZSdyZSBqdXN0IGNsZWFyaW5nIHRoZSBzZWxlY3Rpb24gZnJvbSB0aGUg
ZG9jdW1lbnQgdGhpcyBkcmFnIGlzIGV4aXRpbmcuCkBAIC00MTMsMTIgKzQxNCwxMiBAQCBEcmFn
T3BlcmF0aW9uIERyYWdDb250cm9sbGVyOjpvcGVyYXRpb25GCiBzdGF0aWMgYm9vbCBzZXRTZWxl
Y3Rpb25Ub0RyYWdDYXJldChGcmFtZSogZnJhbWUsIFZpc2libGVTZWxlY3Rpb24mIGRyYWdDYXJl
dCwgUmVmUHRyPFJhbmdlPiYgcmFuZ2UsIGNvbnN0IEludFBvaW50JiBwb2ludCkKIHsKICAgICBm
cmFtZS0+c2VsZWN0aW9uKCkuc2V0U2VsZWN0aW9uKGRyYWdDYXJldCk7Ci0gICAgaWYgKGZyYW1l
LT5zZWxlY3Rpb24oKS5pc05vbmUoKSkgeworICAgIGlmIChmcmFtZS0+c2VsZWN0aW9uKCkuc2Vs
ZWN0aW9uKCkuaXNOb25lKCkpIHsKICAgICAgICAgZHJhZ0NhcmV0ID0gZnJhbWUtPnZpc2libGVQ
b3NpdGlvbkZvclBvaW50KHBvaW50KTsKICAgICAgICAgZnJhbWUtPnNlbGVjdGlvbigpLnNldFNl
bGVjdGlvbihkcmFnQ2FyZXQpOwogICAgICAgICByYW5nZSA9IGRyYWdDYXJldC50b05vcm1hbGl6
ZWRSYW5nZSgpOwogICAgIH0KLSAgICByZXR1cm4gIWZyYW1lLT5zZWxlY3Rpb24oKS5pc05vbmUo
KSAmJiBmcmFtZS0+c2VsZWN0aW9uKCkuaXNDb250ZW50RWRpdGFibGUoKTsKKyAgICByZXR1cm4g
IWZyYW1lLT5zZWxlY3Rpb24oKS5pc05vbmUoKSAmJiBmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCkuaXNDb250ZW50RWRpdGFibGUoKTsKIH0KIAogYm9vbCBEcmFnQ29udHJvbGxlcjo6ZGlz
cGF0Y2hUZXh0SW5wdXRFdmVudEZvcihGcmFtZSogaW5uZXJGcmFtZSwgRHJhZ0RhdGEmIGRyYWdE
YXRhKQpAQCAtNDgyLDcgKzQ4Myw3IEBAIGJvb2wgRHJhZ0NvbnRyb2xsZXI6OmNvbmNsdWRlRWRp
dERyYWcoRHIKICAgICBWaXNpYmxlU2VsZWN0aW9uIGRyYWdDYXJldCA9IG1fcGFnZS5kcmFnQ2Fy
ZXRDb250cm9sbGVyKCkuY2FyZXRQb3NpdGlvbigpOwogICAgIG1fcGFnZS5kcmFnQ2FyZXRDb250
cm9sbGVyKCkuY2xlYXIoKTsKICAgICBSZWZQdHI8UmFuZ2U+IHJhbmdlID0gZHJhZ0NhcmV0LnRv
Tm9ybWFsaXplZFJhbmdlKCk7Ci0gICAgUmVmUHRyPEVsZW1lbnQ+IHJvb3RFZGl0YWJsZUVsZW1l
bnQgPSBpbm5lckZyYW1lLT5zZWxlY3Rpb24oKS5yb290RWRpdGFibGVFbGVtZW50KCk7CisgICAg
UmVmUHRyPEVsZW1lbnQ+IHJvb3RFZGl0YWJsZUVsZW1lbnQgPSBpbm5lckZyYW1lLT5zZWxlY3Rp
b24oKS5zZWxlY3Rpb24oKS5yb290RWRpdGFibGVFbGVtZW50KCk7CiAKICAgICAvLyBGb3IgcmFu
Z2UgdG8gYmUgbnVsbCBhIFdlYktpdCBjbGllbnQgbXVzdCBoYXZlIGRvbmUgc29tZXRoaW5nIGJh
ZCB3aGlsZQogICAgIC8vIG1hbnVhbGx5IGNvbnRyb2xsaW5nIGRyYWcgYmVoYXZpb3VyCkBAIC03
NjUsNyArNzY2LDcgQEAgYm9vbCBEcmFnQ29udHJvbGxlcjo6c3RhcnREcmFnKEZyYW1lJiBzcgog
CiAgICAgICAgICAgICBzcmMuZWRpdG9yKCkud2lsbFdyaXRlU2VsZWN0aW9uVG9QYXN0ZWJvYXJk
KHNlbGVjdGlvblJhbmdlLmdldCgpKTsKIAotICAgICAgICAgICAgaWYgKGVuY2xvc2luZ1RleHRG
b3JtQ29udHJvbChzcmMuc2VsZWN0aW9uKCkuc3RhcnQoKSkpCisgICAgICAgICAgICBpZiAoZW5j
bG9zaW5nVGV4dEZvcm1Db250cm9sKHNyYy5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgp
KSkKICAgICAgICAgICAgICAgICBjbGlwYm9hcmQucGFzdGVib2FyZCgpLndyaXRlUGxhaW5UZXh0
KHNyYy5lZGl0b3IoKS5zZWxlY3RlZFRleHRGb3JDbGlwYm9hcmQoKSwgUGFzdGVib2FyZDo6Q2Fu
bm90U21hcnRSZXBsYWNlKTsKICAgICAgICAgICAgIGVsc2UgewogI2lmIFBMQVRGT1JNKE1BQykg
fHwgUExBVEZPUk0oRUZMKQpAQCAtODEyLDExICs4MTMsMTIgQEAgYm9vbCBEcmFnQ29udHJvbGxl
cjo6c3RhcnREcmFnKEZyYW1lJiBzcgogICAgICAgICAgICAgLy8gb24gdGhlIHdlYiBwYWdlLiBU
aGlzIGluY2x1ZGVzIHJlcGxhY2luZyBuZXdsaW5lcyB3aXRoIHNwYWNlcy4KICAgICAgICAgICAg
IHNyYy5lZGl0b3IoKS5jb3B5VVJMKGxpbmtVUkwsIGhpdFRlc3RSZXN1bHQudGV4dENvbnRlbnQo
KS5zaW1wbGlmeVdoaXRlU3BhY2UoKSwgY2xpcGJvYXJkLnBhc3RlYm9hcmQoKSk7CiAKLSAgICAg
ICAgaWYgKHNyYy5zZWxlY3Rpb24oKS5pc0NhcmV0KCkgJiYgc3JjLnNlbGVjdGlvbigpLmlzQ29u
dGVudEVkaXRhYmxlKCkpIHsKKyAgICAgICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc3JjU2Vs
ZWN0aW9uID0gc3JjLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgICAgICBpZiAoc3JjU2Vs
ZWN0aW9uLmlzQ2FyZXQoKSAmJiBzcmNTZWxlY3Rpb24uaXNDb250ZW50RWRpdGFibGUoKSkgewog
ICAgICAgICAgICAgLy8gYSB1c2VyIGNhbiBpbml0aWF0ZSBhIGRyYWcgb24gYSBsaW5rIHdpdGhv
dXQgaGF2aW5nIGFueSB0ZXh0CiAgICAgICAgICAgICAvLyBzZWxlY3RlZC4gIEluIHRoaXMgY2Fz
ZSwgd2Ugc2hvdWxkIGV4cGFuZCB0aGUgc2VsZWN0aW9uIHRvCiAgICAgICAgICAgICAvLyB0aGUg
ZW5jbG9zaW5nIGFuY2hvciBlbGVtZW50Ci0gICAgICAgICAgICBQb3NpdGlvbiBwb3MgPSBzcmMu
c2VsZWN0aW9uKCkuYmFzZSgpOworICAgICAgICAgICAgUG9zaXRpb24gcG9zID0gc3JjU2VsZWN0
aW9uLmJhc2UoKTsKICAgICAgICAgICAgIE5vZGUqIG5vZGUgPSBlbmNsb3NpbmdBbmNob3JFbGVt
ZW50KHBvcyk7CiAgICAgICAgICAgICBpZiAobm9kZSkKICAgICAgICAgICAgICAgICBzcmMuc2Vs
ZWN0aW9uKCkuc2V0U2VsZWN0aW9uKFZpc2libGVTZWxlY3Rpb246OnNlbGVjdGlvbkZyb21Db250
ZW50c09mTm9kZShub2RlKSk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9FdmVudEhhbmRsZXIuY3Bw
CShyZXZpc2lvbiAxNjMxMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0V2ZW50SGFuZGxlci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMjMsNyArMTIyMyw3IEBAIHN0YXRpYyBib29sIGlzU3Vi
bWl0SW1hZ2UoTm9kZSogbm9kZSkKIC8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgbm9kZSdzIGVkaXRh
YmxlIGJsb2NrIGlzIG5vdCBjdXJyZW50IGZvY3VzZWQgZm9yIGVkaXRpbmcKIHN0YXRpYyBib29s
IG5vZGVJc05vdEJlaW5nRWRpdGVkKGNvbnN0IE5vZGUmIG5vZGUsIGNvbnN0IEZyYW1lJiBmcmFt
ZSkKIHsKLSAgICByZXR1cm4gZnJhbWUuc2VsZWN0aW9uKCkucm9vdEVkaXRhYmxlRWxlbWVudCgp
ICE9IG5vZGUucm9vdEVkaXRhYmxlRWxlbWVudCgpOworICAgIHJldHVybiBmcmFtZS5zZWxlY3Rp
b24oKS5zZWxlY3Rpb24oKS5yb290RWRpdGFibGVFbGVtZW50KCkgIT0gbm9kZS5yb290RWRpdGFi
bGVFbGVtZW50KCk7CiB9CiAKIGJvb2wgRXZlbnRIYW5kbGVyOjp1c2VIYW5kQ3Vyc29yKE5vZGUq
IG5vZGUsIGJvb2wgaXNPdmVyTGluaywgYm9vbCBzaGlmdEtleSkKQEAgLTI2NDAsNyArMjY0MCw3
IEBAIGJvb2wgRXZlbnRIYW5kbGVyOjpzZW5kQ29udGV4dE1lbnVFdmVudCgKICAgICAgICAgLy8g
RklYTUU6IEluIHRoZSBlZGl0YWJsZSBjYXNlLCB3b3JkIHNlbGVjdGlvbiBzb21ldGltZXMgc2Vs
ZWN0cyBjb250ZW50IHRoYXQgaXNuJ3QgdW5kZXJuZWF0aCB0aGUgbW91c2UuCiAgICAgICAgIC8v
IElmIHRoZSBzZWxlY3Rpb24gaXMgbm9uLWVkaXRhYmxlLCB3ZSBkbyB3b3JkIHNlbGVjdGlvbiB0
byBtYWtlIGl0IGVhc2llciB0byB1c2UgdGhlIGNvbnRleHR1YWwgbWVudSBpdGVtcwogICAgICAg
ICAvLyBhdmFpbGFibGUgZm9yIHRleHQgc2VsZWN0aW9ucy4gIEJ1dCBvbmx5IGlmIHdlJ3JlIGFi
b3ZlIHRleHQuCi0gICAgICAgICYmIChtX2ZyYW1lLnNlbGVjdGlvbigpLmlzQ29udGVudEVkaXRh
YmxlKCkgfHwgKG1ldi50YXJnZXROb2RlKCkgJiYgbWV2LnRhcmdldE5vZGUoKS0+aXNUZXh0Tm9k
ZSgpKSkpIHsKKyAgICAgICAgJiYgKG1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXND
b250ZW50RWRpdGFibGUoKSB8fCAobWV2LnRhcmdldE5vZGUoKSAmJiBtZXYudGFyZ2V0Tm9kZSgp
LT5pc1RleHROb2RlKCkpKSkgewogICAgICAgICBtX21vdXNlRG93bk1heVN0YXJ0U2VsZWN0ID0g
dHJ1ZTsgLy8gY29udGV4dCBtZW51IGV2ZW50cyBhcmUgYWx3YXlzIGFsbG93ZWQgdG8gcGVyZm9y
bSBhIHNlbGVjdGlvbgogICAgICAgICBzZWxlY3RDbG9zZXN0V29yZE9yTGlua0Zyb21Nb3VzZUV2
ZW50KG1ldik7CiAgICAgfQpAQCAtMjY3Myw4ICsyNjczLDggQEAgYm9vbCBFdmVudEhhbmRsZXI6
OnNlbmRDb250ZXh0TWVudUV2ZW50RgogICAgIEludFBvaW50IGxvY2F0aW9uOwogCiAgICAgRWxl
bWVudCogZm9jdXNlZEVsZW1lbnQgPSBkb2MtPmZvY3VzZWRFbGVtZW50KCk7Ci0gICAgRnJhbWVT
ZWxlY3Rpb24mIHNlbGVjdGlvbiA9IG1fZnJhbWUuc2VsZWN0aW9uKCk7Ci0gICAgUG9zaXRpb24g
c3RhcnQgPSBzZWxlY3Rpb24uc2VsZWN0aW9uKCkuc3RhcnQoKTsKKyAgICBjb25zdCBWaXNpYmxl
U2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBtX2ZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwor
ICAgIFBvc2l0aW9uIHN0YXJ0ID0gc2VsZWN0aW9uLnN0YXJ0KCk7CiAKICAgICBpZiAoc3RhcnQu
ZGVwcmVjYXRlZE5vZGUoKSAmJiAoc2VsZWN0aW9uLnJvb3RFZGl0YWJsZUVsZW1lbnQoKSB8fCBz
ZWxlY3Rpb24uaXNSYW5nZSgpKSkgewogICAgICAgICBSZWZQdHI8UmFuZ2U+IHNlbGVjdGlvblJh
bmdlID0gc2VsZWN0aW9uLnRvTm9ybWFsaXplZFJhbmdlKCk7CkBAIC0zMjczLDcgKzMyNzMsNyBA
QCBib29sIEV2ZW50SGFuZGxlcjo6aGFuZGxlRHJhZyhjb25zdCBNb3VzCiAgICAgICAgIH0gCiAg
ICAgICAgIAogICAgICAgICBtX21vdXNlRG93bk1heVN0YXJ0RHJhZyA9IGRpc3BhdGNoRHJhZ1Ny
Y0V2ZW50KGV2ZW50TmFtZXMoKS5kcmFnc3RhcnRFdmVudCwgbV9tb3VzZURvd24pCi0gICAgICAg
ICAgICAmJiAhbV9mcmFtZS5zZWxlY3Rpb24oKS5pc0luUGFzc3dvcmRGaWVsZCgpOworICAgICAg
ICAgICAgJiYgIW1fZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNJblBhc3N3b3JkRmll
bGQoKTsKICAgICAgICAgCiAgICAgICAgIC8vIEludmFsaWRhdGUgY2xpcGJvYXJkIGhlcmUgYWdh
aW5zdCBhbnltb3JlIHBhc3RlYm9hcmQgd3JpdGluZyBmb3Igc2VjdXJpdHkuICBUaGUgZHJhZwog
ICAgICAgICAvLyBpbWFnZSBjYW4gc3RpbGwgYmUgY2hhbmdlZCBhcyB3ZSBkcmFnLCBidXQgbm90
IHRoZSBwYXN0ZWJvYXJkIGRhdGEuCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZvY3VzQ29u
dHJvbGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGFnZS9Gb2N1c0NvbnRy
b2xsZXIuY3BwCShyZXZpc2lvbiAxNjMxMjgpCisrKyBTb3VyY2UvV2ViQ29yZS9wYWdlL0ZvY3Vz
Q29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI4MSw3ICsyODEsNyBAQCBib29sIEZv
Y3VzQ29udHJvbGxlcjo6YWR2YW5jZUZvY3VzSW5Eb2N1CiAgICAgYm9vbCBjYXJldEJyb3dzaW5n
ID0gZnJhbWUuc2V0dGluZ3MoKS5jYXJldEJyb3dzaW5nRW5hYmxlZCgpOwogCiAgICAgaWYgKGNh
cmV0QnJvd3NpbmcgJiYgIWN1cnJlbnROb2RlKQotICAgICAgICBjdXJyZW50Tm9kZSA9IGZyYW1l
LnNlbGVjdGlvbigpLnN0YXJ0KCkuZGVwcmVjYXRlZE5vZGUoKTsKKyAgICAgICAgY3VycmVudE5v
ZGUgPSBmcmFtZS5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5zdGFydCgpLmRlcHJlY2F0ZWROb2Rl
KCk7CiAKICAgICBkb2N1bWVudC0+dXBkYXRlTGF5b3V0SWdub3JlUGVuZGluZ1N0eWxlc2hlZXRz
KCk7CiAKQEAgLTU1Myw4ICs1NTMsOCBAQCBzdGF0aWMgdm9pZCBjbGVhclNlbGVjdGlvbklmTmVl
ZGVkKEZyYW1lCiAgICAgICAgIAogICAgIGlmIChvbGRGb2N1c2VkRnJhbWUtPmRvY3VtZW50KCkg
IT0gbmV3Rm9jdXNlZEZyYW1lLT5kb2N1bWVudCgpKQogICAgICAgICByZXR1cm47Ci0gICAgCi0g
ICAgRnJhbWVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9IG9sZEZvY3VzZWRGcmFtZS0+c2VsZWN0aW9u
KCk7CisKKyAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBvbGRGb2N1c2Vk
RnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwogICAgIGlmIChzZWxlY3Rpb24uaXNOb25l
KCkpCiAgICAgICAgIHJldHVybjsKIApAQCAtNTYyLDcgKzU2Miw3IEBAIHN0YXRpYyB2b2lkIGNs
ZWFyU2VsZWN0aW9uSWZOZWVkZWQoRnJhbWUKICAgICBpZiAoY2FyZXRCcm93c2luZykKICAgICAg
ICAgcmV0dXJuOwogCi0gICAgTm9kZSogc2VsZWN0aW9uU3RhcnROb2RlID0gc2VsZWN0aW9uLnNl
bGVjdGlvbigpLnN0YXJ0KCkuZGVwcmVjYXRlZE5vZGUoKTsKKyAgICBOb2RlKiBzZWxlY3Rpb25T
dGFydE5vZGUgPSBzZWxlY3Rpb24uc3RhcnQoKS5kZXByZWNhdGVkTm9kZSgpOwogICAgIGlmIChz
ZWxlY3Rpb25TdGFydE5vZGUgPT0gbmV3Rm9jdXNlZE5vZGUgfHwgc2VsZWN0aW9uU3RhcnROb2Rl
LT5pc0Rlc2NlbmRhbnRPZihuZXdGb2N1c2VkTm9kZSkgfHwgc2VsZWN0aW9uU3RhcnROb2RlLT5k
ZXByZWNhdGVkU2hhZG93QW5jZXN0b3JOb2RlKCkgPT0gbmV3Rm9jdXNlZE5vZGUpCiAgICAgICAg
IHJldHVybjsKICAgICAgICAgCkBAIC01NzksOCArNTc5LDggQEAgc3RhdGljIHZvaWQgY2xlYXJT
ZWxlY3Rpb25JZk5lZWRlZChGcmFtZQogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgfQot
ICAgIAotICAgIHNlbGVjdGlvbi5jbGVhcigpOworCisgICAgb2xkRm9jdXNlZEZyYW1lLT5zZWxl
Y3Rpb24oKS5jbGVhcigpOwogfQogCiBib29sIEZvY3VzQ29udHJvbGxlcjo6c2V0Rm9jdXNlZEVs
ZW1lbnQoRWxlbWVudCogZWxlbWVudCwgUGFzc1JlZlB0cjxGcmFtZT4gbmV3Rm9jdXNlZEZyYW1l
LCBGb2N1c0RpcmVjdGlvbiBkaXJlY3Rpb24pCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wYWdlL2lv
cy9GcmFtZUlPUy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wYWdlL2lvcy9GcmFt
ZUlPUy5tbQkocmV2aXNpb24gMTYzMTI4KQorKysgU291cmNlL1dlYkNvcmUvcGFnZS9pb3MvRnJh
bWVJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTYwMSwxNSArNjAxLDE1IEBAIHZvaWQgRnJhbWU6
OnVwZGF0ZUxheW91dCgpIGNvbnN0CiAKIE5TUmVjdCBGcmFtZTo6Y2FyZXRSZWN0KCkgY29uc3QK
IHsKLSAgICBpZiAoc2VsZWN0aW9uKCkuaXNOb25lKCkpCisgICAgVmlzaWJsZVNlbGVjdGlvbiB2
aXNpYmxlU2VsZWN0aW9uID0gc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgaWYgKHZpc2li
bGVTZWxlY3Rpb24uaXNOb25lKCkpCiAgICAgICAgIHJldHVybiBDR1JlY3RaZXJvOwotICAgIHJl
dHVybiBzZWxlY3Rpb24oKS5pc0NhcmV0KCkgPyBzZWxlY3Rpb24oKS5hYnNvbHV0ZUNhcmV0Qm91
bmRzKCkgOiBWaXNpYmxlUG9zaXRpb24oc2VsZWN0aW9uKCkuZW5kKCkpLmFic29sdXRlQ2FyZXRC
b3VuZHMoKTsKKyAgICByZXR1cm4gdmlzaWJsZVNlbGVjdGlvbi5pc0NhcmV0KCkgPyBzZWxlY3Rp
b24oKS5hYnNvbHV0ZUNhcmV0Qm91bmRzKCkgOiBWaXNpYmxlUG9zaXRpb24odmlzaWJsZVNlbGVj
dGlvbi5lbmQoKSkuYWJzb2x1dGVDYXJldEJvdW5kcygpOwogfQogCiBOU1JlY3QgRnJhbWU6OnJl
Y3RGb3JTY3JvbGxUb1Zpc2libGUoKSBjb25zdAogewotICAgIFZpc2libGVTZWxlY3Rpb24gc2Vs
ZWN0aW9uKHRoaXMtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpKTsKLSAgICByZXR1cm4gcmVjdEZv
clNlbGVjdGlvbihzZWxlY3Rpb24pOworICAgIHJldHVybiByZWN0Rm9yU2VsZWN0aW9uKHNlbGVj
dGlvbigpLnNlbGVjdGlvbigpKTsKIH0KIAogTlNSZWN0IEZyYW1lOjpyZWN0Rm9yU2VsZWN0aW9u
KFZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbikgY29uc3QKQEAgLTY1OCw3ICs2NTgsNiBAQCBO
U1JlY3QgRnJhbWU6OnJlY3RGb3JTZWxlY3Rpb24oVmlzaWJsZVNlCiAKIERPTUNTU1N0eWxlRGVj
bGFyYXRpb24qIEZyYW1lOjpzdHlsZUF0U2VsZWN0aW9uU3RhcnQoKSBjb25zdAogewotICAgIFBv
c2l0aW9uIHN0YXJ0ID0gc2VsZWN0aW9uKCkuc3RhcnQoKTsKICAgICBSZWZQdHI8RWRpdGluZ1N0
eWxlPiBlZGl0aW5nU3R5bGUgPSBFZGl0aW5nU3R5bGU6OnN0eWxlQXRTZWxlY3Rpb25TdGFydChz
ZWxlY3Rpb24oKS5zZWxlY3Rpb24oKSk7CiAgICAgaWYgKCFlZGl0aW5nU3R5bGUpCiAgICAgICAg
IHJldHVybiBudWxscHRyOwpAQCAtNzM3LDE0ICs3MzYsMTQgQEAgdm9pZCBGcmFtZTo6c2V0UmFu
Z2VkU2VsZWN0aW9uQmFzZVRvQ3VycgogCiB2b2lkIEZyYW1lOjpzZXRSYW5nZWRTZWxlY3Rpb25C
YXNlVG9DdXJyZW50U2VsZWN0aW9uU3RhcnQoKQogewotICAgIEZyYW1lU2VsZWN0aW9uJiBmcmFt
ZVNlbGVjdGlvbiA9IHNlbGVjdGlvbigpOwotICAgIG1fcmFuZ2VkU2VsZWN0aW9uQmFzZSA9IFZp
c2libGVTZWxlY3Rpb24oZnJhbWVTZWxlY3Rpb24uc2VsZWN0aW9uKCkuc3RhcnQoKSwgZnJhbWVT
ZWxlY3Rpb24uYWZmaW5pdHkoKSk7CisgICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgdmlzaWJs
ZVNlbGVjdGlvbiA9IHNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgIG1fcmFuZ2VkU2VsZWN0
aW9uQmFzZSA9IFZpc2libGVTZWxlY3Rpb24odmlzaWJsZVNlbGVjdGlvbi5zdGFydCgpLCB2aXNp
YmxlU2VsZWN0aW9uLmFmZmluaXR5KCkpOwogfQogCiB2b2lkIEZyYW1lOjpzZXRSYW5nZWRTZWxl
Y3Rpb25CYXNlVG9DdXJyZW50U2VsZWN0aW9uRW5kKCkKIHsKLSAgICBGcmFtZVNlbGVjdGlvbiYg
ZnJhbWVTZWxlY3Rpb24gPSBzZWxlY3Rpb24oKTsKLSAgICBtX3JhbmdlZFNlbGVjdGlvbkJhc2Ug
PSBWaXNpYmxlU2VsZWN0aW9uKGZyYW1lU2VsZWN0aW9uLnNlbGVjdGlvbigpLmVuZCgpLCBmcmFt
ZVNlbGVjdGlvbi5hZmZpbml0eSgpKTsKKyAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiB2aXNp
YmxlU2VsZWN0aW9uID0gc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgbV9yYW5nZWRTZWxl
Y3Rpb25CYXNlID0gVmlzaWJsZVNlbGVjdGlvbih2aXNpYmxlU2VsZWN0aW9uLmVuZCgpLCB2aXNp
YmxlU2VsZWN0aW9uLmFmZmluaXR5KCkpOwogfQogCiBWaXNpYmxlU2VsZWN0aW9uIEZyYW1lOjpy
YW5nZWRTZWxlY3Rpb25CYXNlKCkgY29uc3QKQEAgLTc1OSwxNCArNzU4LDE0IEBAIHZvaWQgRnJh
bWU6OmNsZWFyUmFuZ2VkU2VsZWN0aW9uSW5pdGlhbEUKIAogdm9pZCBGcmFtZTo6c2V0UmFuZ2Vk
U2VsZWN0aW9uSW5pdGlhbEV4dGVudFRvQ3VycmVudFNlbGVjdGlvblN0YXJ0KCkKIHsKLSAgICBG
cmFtZVNlbGVjdGlvbiYgZnJhbWVTZWxlY3Rpb24gPSBzZWxlY3Rpb24oKTsKLSAgICBtX3Jhbmdl
ZFNlbGVjdGlvbkluaXRpYWxFeHRlbnQgPSBWaXNpYmxlU2VsZWN0aW9uKGZyYW1lU2VsZWN0aW9u
LnNlbGVjdGlvbigpLnN0YXJ0KCksIGZyYW1lU2VsZWN0aW9uLmFmZmluaXR5KCkpOworICAgIGNv
bnN0IFZpc2libGVTZWxlY3Rpb24mIHZpc2libGVTZWxlY3Rpb24gPSBzZWxlY3Rpb24oKS5zZWxl
Y3Rpb24oKTsKKyAgICBtX3JhbmdlZFNlbGVjdGlvbkluaXRpYWxFeHRlbnQgPSBWaXNpYmxlU2Vs
ZWN0aW9uKHZpc2libGVTZWxlY3Rpb24uc3RhcnQoKSwgdmlzaWJsZVNlbGVjdGlvbi5hZmZpbml0
eSgpKTsKIH0KIAogdm9pZCBGcmFtZTo6c2V0UmFuZ2VkU2VsZWN0aW9uSW5pdGlhbEV4dGVudFRv
Q3VycmVudFNlbGVjdGlvbkVuZCgpCiB7Ci0gICAgRnJhbWVTZWxlY3Rpb24mIGZyYW1lU2VsZWN0
aW9uID0gc2VsZWN0aW9uKCk7Ci0gICAgbV9yYW5nZWRTZWxlY3Rpb25Jbml0aWFsRXh0ZW50ID0g
VmlzaWJsZVNlbGVjdGlvbihmcmFtZVNlbGVjdGlvbi5zZWxlY3Rpb24oKS5lbmQoKSwgZnJhbWVT
ZWxlY3Rpb24uYWZmaW5pdHkoKSk7CisgICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgdmlzaWJs
ZVNlbGVjdGlvbiA9IHNlbGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgIG1fcmFuZ2VkU2VsZWN0
aW9uSW5pdGlhbEV4dGVudCA9IFZpc2libGVTZWxlY3Rpb24odmlzaWJsZVNlbGVjdGlvbi5lbmQo
KSwgdmlzaWJsZVNlbGVjdGlvbi5hZmZpbml0eSgpKTsKIH0KIAogVmlzaWJsZVNlbGVjdGlvbiBG
cmFtZTo6cmFuZ2VkU2VsZWN0aW9uSW5pdGlhbEV4dGVudCgpIGNvbnN0CkBAIC03ODcsNyArNzg2
LDcgQEAgTlNBcnJheSAqRnJhbWU6OmludGVycHJldGF0aW9uc0ZvckN1cnJlbgogICAgIGlmICgh
ZG9jdW1lbnQoKSkKICAgICAgICAgcmV0dXJuIG5pbDsKIAotICAgIEVsZW1lbnQqIHJvb3QgPSBz
ZWxlY3Rpb24oKS5zZWxlY3Rpb25UeXBlKCkgPT0gVmlzaWJsZVNlbGVjdGlvbjo6Tm9TZWxlY3Rp
b24gPyBkb2N1bWVudCgpLT5ib2R5KCkgOiBzZWxlY3Rpb24oKS5yb290RWRpdGFibGVFbGVtZW50
KCk7CisgICAgRWxlbWVudCogcm9vdCA9IHNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnNlbGVjdGlv
blR5cGUoKSA9PSBWaXNpYmxlU2VsZWN0aW9uOjpOb1NlbGVjdGlvbiA/IGRvY3VtZW50KCktPmJv
ZHkoKSA6IHNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsKICAg
ICB1bnNpZ25lZCByb290Q2hpbGRDb3VudCA9IHJvb3QtPmNoaWxkTm9kZUNvdW50KCk7CiAgICAg
UmVmUHRyPFJhbmdlPiByYW5nZU9mUm9vdENvbnRlbnRzID0gUmFuZ2U6OmNyZWF0ZSgqZG9jdW1l
bnQoKSwgY3JlYXRlTGVnYWN5RWRpdGluZ1Bvc2l0aW9uKHJvb3QsIDApLCBjcmVhdGVMZWdhY3lF
ZGl0aW5nUG9zaXRpb24ocm9vdCwgcm9vdENoaWxkQ291bnQpKTsKIApJbmRleDogU291cmNlL1dl
YkNvcmUvcmVuZGVyaW5nL1JlbmRlckJsb2NrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCShyZXZpc2lvbiAxNjMxMjgpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0y
NDQ0LDcgKzI0NDQsNyBAQCB2b2lkIFJlbmRlckJsb2NrOjpwYWludENhcmV0KFBhaW50SW5mbyYg
CiAgICAgYm9vbCBpc0NvbnRlbnRFZGl0YWJsZTsKICAgICBpZiAodHlwZSA9PSBDdXJzb3JDYXJl
dCkgewogICAgICAgICBjYXJldFBhaW50ZXIgPSBmcmFtZSgpLnNlbGVjdGlvbigpLmNhcmV0UmVu
ZGVyZXIoKTsKLSAgICAgICAgaXNDb250ZW50RWRpdGFibGUgPSBmcmFtZSgpLnNlbGVjdGlvbigp
Lmhhc0VkaXRhYmxlU3R5bGUoKTsKKyAgICAgICAgaXNDb250ZW50RWRpdGFibGUgPSBmcmFtZSgp
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlzQ29udGVudEVkaXRhYmxlKCk7CiAgICAgfSBlbHNl
IHsKICAgICAgICAgY2FyZXRQYWludGVyID0gZnJhbWUoKS5wYWdlKCktPmRyYWdDYXJldENvbnRy
b2xsZXIoKS5jYXJldFJlbmRlcmVyKCk7CiAgICAgICAgIGlzQ29udGVudEVkaXRhYmxlID0gZnJh
bWUoKS5wYWdlKCktPmRyYWdDYXJldENvbnRyb2xsZXIoKS5pc0NvbnRlbnRFZGl0YWJsZSgpOwpJ
bmRleDogU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQyL0NoYW5nZUxvZwkocmV2aXNpb24gMTYzMTYzKQorKysgU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjMgQEAKKzIwMTQtMDEtMzAgIFJ5b3N1a2Ug
Tml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmVtb3ZlIGlubGluZSBtZW1iZXIg
ZnVuY3Rpb25zIG9mIEZyYW1lU2VsZWN0aW9uIHRoYXQgYWNjZXNzIG1fc2VsZWN0aW9uCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjc5ODYKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvZ3RrL1dlYkVkaXRvckNsaWVudEd0ay5jcHA6CisgICAgICAgIChXZWJL
aXQ6OmNvbGxhcHNlU2VsZWN0aW9uKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
UGFnZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OmVkaXRvclN0YXRlKToKKyAgICAg
ICAgKFdlYktpdDo6V2ViUGFnZTo6Y29uZmlybUNvbXBvc2l0aW9uKToKKyAgICAgICAgKFdlYktp
dDo6V2ViUGFnZTo6c2V0Q29tcG9zaXRpb24pOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFn
ZS9pb3MvV2ViUGFnZUlPUy5tbToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6c2V0Q29tcG9z
aXRpb24pOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjp1cGRhdGVTZWxlY3Rpb25XaXRoVG91
Y2hlcyk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjpzZXRDb21wb3NpdGlvbik6CisgICAgICAgIChXZWJL
aXQ6OldlYlBhZ2U6OmdldEF0dHJpYnV0ZWRTdWJzdHJpbmdGcm9tUmFuZ2UpOgorCiAyMDE0LTAx
LTMwICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAgIEZp
eCBpT1MgV0syIGJ1aWxkIGFmdGVyIHIxNjMxNTYuCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYkNvcmVTdXBwb3J0L2d0ay9XZWJFZGl0b3JDbGllbnRHdGsuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvZ3RrL1dlYkVk
aXRvckNsaWVudEd0ay5jcHAJKHJldmlzaW9uIDE2MzEyOCkKKysrIFNvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvZ3RrL1dlYkVkaXRvckNsaWVudEd0ay5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE2Niw3ICsxNjYsOCBAQCBzdGF0aWMgdm9pZCBjb2xsYXBzZVNlbGVjdGlv
bihHdGtDbGlwYm9hCiAKICAgICAvLyBDb2xsYXBzZSB0aGUgc2VsZWN0aW9uIHdpdGhvdXQgY2xl
YXJpbmcgaXQuCiAgICAgQVNTRVJUKGZyYW1lKTsKLSAgICBmcmFtZS0+c2VsZWN0aW9uKCkuc2V0
QmFzZShmcmFtZS0+c2VsZWN0aW9uKCkuZXh0ZW50KCksIGZyYW1lLT5zZWxlY3Rpb24oKS5hZmZp
bml0eSgpKTsKKyAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBmcmFtZS0+
c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgZnJhbWUtPnNlbGVjdGlvbigpLnNldEJhc2Uo
c2VsZWN0aW9uLmV4dGVudCgpLCBzZWxlY3Rpb24uYWZmaW5pdHkoKSk7CiB9CiAjZW5kaWYKIApJ
bmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAko
cmV2aXNpb24gMTYzMTI4KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dl
YlBhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NDMsMTYgKzY0MywxNyBAQCBFZGl0b3JTdGF0
ZSBXZWJQYWdlOjplZGl0b3JTdGF0ZSgpIGNvbnN0CiAgICAgICAgIH0KICAgICB9CiAKLSAgICBy
ZXN1bHQuc2VsZWN0aW9uSXNOb25lID0gZnJhbWUuc2VsZWN0aW9uKCkuaXNOb25lKCk7Ci0gICAg
cmVzdWx0LnNlbGVjdGlvbklzUmFuZ2UgPSBmcmFtZS5zZWxlY3Rpb24oKS5pc1JhbmdlKCk7Ci0g
ICAgcmVzdWx0LmlzQ29udGVudEVkaXRhYmxlID0gZnJhbWUuc2VsZWN0aW9uKCkuaXNDb250ZW50
RWRpdGFibGUoKTsKLSAgICByZXN1bHQuaXNDb250ZW50UmljaGx5RWRpdGFibGUgPSBmcmFtZS5z
ZWxlY3Rpb24oKS5pc0NvbnRlbnRSaWNobHlFZGl0YWJsZSgpOwotICAgIHJlc3VsdC5pc0luUGFz
c3dvcmRGaWVsZCA9IGZyYW1lLnNlbGVjdGlvbigpLmlzSW5QYXNzd29yZEZpZWxkKCk7CisgICAg
Y29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0gZnJhbWUuc2VsZWN0aW9uKCkuc2Vs
ZWN0aW9uKCk7CisKKyAgICByZXN1bHQuc2VsZWN0aW9uSXNOb25lID0gc2VsZWN0aW9uLmlzTm9u
ZSgpOworICAgIHJlc3VsdC5zZWxlY3Rpb25Jc1JhbmdlID0gc2VsZWN0aW9uLmlzUmFuZ2UoKTsK
KyAgICByZXN1bHQuaXNDb250ZW50RWRpdGFibGUgPSBzZWxlY3Rpb24uaXNDb250ZW50RWRpdGFi
bGUoKTsKKyAgICByZXN1bHQuaXNDb250ZW50UmljaGx5RWRpdGFibGUgPSBzZWxlY3Rpb24uaXND
b250ZW50UmljaGx5RWRpdGFibGUoKTsKKyAgICByZXN1bHQuaXNJblBhc3N3b3JkRmllbGQgPSBz
ZWxlY3Rpb24uaXNJblBhc3N3b3JkRmllbGQoKTsKICAgICByZXN1bHQuaGFzQ29tcG9zaXRpb24g
PSBmcmFtZS5lZGl0b3IoKS5oYXNDb21wb3NpdGlvbigpOwogICAgIHJlc3VsdC5zaG91bGRJZ25v
cmVDb21wb3NpdGlvblNlbGVjdGlvbkNoYW5nZSA9IGZyYW1lLmVkaXRvcigpLmlnbm9yZUNvbXBv
c2l0aW9uU2VsZWN0aW9uQ2hhbmdlKCk7CiAKICNpZiBQTEFURk9STShJT1MpCi0gICAgRnJhbWVT
ZWxlY3Rpb24mIHNlbGVjdGlvbiA9IGZyYW1lLnNlbGVjdGlvbigpOwogICAgIGlmIChmcmFtZS5l
ZGl0b3IoKS5oYXNDb21wb3NpdGlvbigpKSB7CiAgICAgICAgIFJlZlB0cjxSYW5nZT4gY29tcG9z
aXRpb25SYW5nZSA9IGZyYW1lLmVkaXRvcigpLmNvbXBvc2l0aW9uUmFuZ2UoKTsKICAgICAgICAg
VmVjdG9yPFdlYkNvcmU6OlNlbGVjdGlvblJlY3Q+IGNvbXBvc2l0aW9uUmVjdHM7CkBAIC02NjYs
NyArNjY3LDcgQEAgRWRpdG9yU3RhdGUgV2ViUGFnZTo6ZWRpdG9yU3RhdGUoKSBjb25zdAogICAg
ICAgICByZXN1bHQubWFya2VkVGV4dCA9IHBsYWluVGV4dChjb21wb3NpdGlvblJhbmdlLmdldCgp
KTsKICAgICB9CiAgICAgaWYgKHNlbGVjdGlvbi5pc0NhcmV0KCkpIHsKLSAgICAgICAgcmVzdWx0
LmNhcmV0UmVjdEF0U3RhcnQgPSBzZWxlY3Rpb24uYWJzb2x1dGVDYXJldEJvdW5kcygpOworICAg
ICAgICByZXN1bHQuY2FyZXRSZWN0QXRTdGFydCA9IGZyYW1lLnNlbGVjdGlvbigpLmFic29sdXRl
Q2FyZXRCb3VuZHMoKTsKICAgICAgICAgcmVzdWx0LmNhcmV0UmVjdEF0RW5kID0gcmVzdWx0LmNh
cmV0UmVjdEF0U3RhcnQ7CiAgICAgICAgIGlmIChtX3Nob3VsZFJldHVybldvcmRBdFNlbGVjdGlv
bikKICAgICAgICAgICAgIHJlc3VsdC53b3JkQXRTZWxlY3Rpb24gPSBwbGFpblRleHQod29yZFJh
bmdlRnJvbVBvc2l0aW9uKHNlbGVjdGlvbi5zdGFydCgpKS5nZXQoKSk7CkBAIC0zODEyLDcgKzM4
MTMsNyBAQCB2b2lkIFdlYlBhZ2U6OmNvbmZpcm1Db21wb3NpdGlvbihjb25zdCBTCiAgICAgICAg
IHJldHVybjsKICAgICB9CiAKLSAgICBFbGVtZW50KiBzY29wZSA9IHRhcmdldEZyYW1lLT5zZWxl
Y3Rpb24oKS5yb290RWRpdGFibGVFbGVtZW50KCk7CisgICAgRWxlbWVudCogc2NvcGUgPSB0YXJn
ZXRGcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkucm9vdEVkaXRhYmxlRWxlbWVudCgpOwog
ICAgIFJlZlB0cjxSYW5nZT4gc2VsZWN0aW9uUmFuZ2UgPSBUZXh0SXRlcmF0b3I6OnJhbmdlRnJv
bUxvY2F0aW9uQW5kTGVuZ3RoKHNjb3BlLCBzZWxlY3Rpb25TdGFydCwgc2VsZWN0aW9uTGVuZ3Ro
KTsKICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKHNlbGVjdGlvblJhbmdlLCAiSW52YWxpZCBzZWxl
Y3Rpb246IFslbGxkOiVsbGRdIGluIHRleHQgb2YgbGVuZ3RoICVkIiwgc3RhdGljX2Nhc3Q8bG9u
ZyBsb25nPihzZWxlY3Rpb25TdGFydCksIHN0YXRpY19jYXN0PGxvbmcgbG9uZz4oc2VsZWN0aW9u
TGVuZ3RoKSwgc2NvcGUtPmlubmVyVGV4dCgpLmxlbmd0aCgpKTsKIApAQCAtMzgyNiw3ICszODI3
LDcgQEAgdm9pZCBXZWJQYWdlOjpjb25maXJtQ29tcG9zaXRpb24oY29uc3QgUwogdm9pZCBXZWJQ
YWdlOjpzZXRDb21wb3NpdGlvbihjb25zdCBTdHJpbmcmIHRleHQsIFZlY3RvcjxDb21wb3NpdGlv
blVuZGVybGluZT4gdW5kZXJsaW5lcywgdWludDY0X3Qgc2VsZWN0aW9uU3RhcnQsIHVpbnQ2NF90
IHNlbGVjdGlvbkVuZCwgdWludDY0X3QgcmVwbGFjZW1lbnRTdGFydCwgdWludDY0X3QgcmVwbGFj
ZW1lbnRMZW5ndGgpCiB7CiAgICAgRnJhbWUqIHRhcmdldEZyYW1lID0gdGFyZ2V0RnJhbWVGb3JF
ZGl0aW5nKHRoaXMpOwotICAgIGlmICghdGFyZ2V0RnJhbWUgfHwgIXRhcmdldEZyYW1lLT5zZWxl
Y3Rpb24oKS5pc0NvbnRlbnRFZGl0YWJsZSgpKSB7CisgICAgaWYgKCF0YXJnZXRGcmFtZSB8fCAh
dGFyZ2V0RnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlzQ29udGVudEVkaXRhYmxlKCkp
IHsKICAgICAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVByb3h5OjpFZGl0b3JTdGF0ZUNoYW5n
ZWQoZWRpdG9yU3RhdGUoKSkpOwogICAgICAgICByZXR1cm47CiAgICAgfQpAQCAtMzgzNSw3ICsz
ODM2LDcgQEAgdm9pZCBXZWJQYWdlOjpzZXRDb21wb3NpdGlvbihjb25zdCBTdHJpbgogICAgICAg
ICAvLyBUaGUgbGF5b3V0IG5lZWRzIHRvIGJlIHVwdG9kYXRlIGJlZm9yZSBzZXR0aW5nIGEgc2Vs
ZWN0aW9uCiAgICAgICAgIHRhcmdldEZyYW1lLT5kb2N1bWVudCgpLT51cGRhdGVMYXlvdXQoKTsK
IAotICAgICAgICBFbGVtZW50KiBzY29wZSA9IHRhcmdldEZyYW1lLT5zZWxlY3Rpb24oKS5yb290
RWRpdGFibGVFbGVtZW50KCk7CisgICAgICAgIEVsZW1lbnQqIHNjb3BlID0gdGFyZ2V0RnJhbWUt
PnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLnJvb3RFZGl0YWJsZUVsZW1lbnQoKTsKICAgICAgICAg
UmVmUHRyPFJhbmdlPiByZXBsYWNlbWVudFJhbmdlID0gVGV4dEl0ZXJhdG9yOjpyYW5nZUZyb21M
b2NhdGlvbkFuZExlbmd0aChzY29wZSwgcmVwbGFjZW1lbnRTdGFydCwgcmVwbGFjZW1lbnRMZW5n
dGgpOwogICAgICAgICB0YXJnZXRGcmFtZS0+ZWRpdG9yKCkuc2V0SWdub3JlQ29tcG9zaXRpb25T
ZWxlY3Rpb25DaGFuZ2UodHJ1ZSk7CiAgICAgICAgIHRhcmdldEZyYW1lLT5zZWxlY3Rpb24oKS5z
ZXRTZWxlY3Rpb24oVmlzaWJsZVNlbGVjdGlvbihyZXBsYWNlbWVudFJhbmdlLmdldCgpLCBTRUxf
REVGQVVMVF9BRkZJTklUWSkpOwpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL2lvcy9XZWJQYWdlSU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9pb3MvV2ViUGFnZUlPUy5tbQkocmV2aXNpb24gMTYzMTI4KQorKysgU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL2lvcy9XZWJQYWdlSU9TLm1tCSh3b3JraW5n
IGNvcHkpCkBAIC05Niw3ICs5Niw3IEBAIHZvaWQgV2ViUGFnZTo6c2V0Q29tcG9zaXRpb24oY29u
c3QgU3RyaW4KIHsKICAgICBGcmFtZSYgZnJhbWUgPSBtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigp
LmZvY3VzZWRPck1haW5GcmFtZSgpOwogCi0gICAgaWYgKGZyYW1lLnNlbGVjdGlvbigpLmlzQ29u
dGVudEVkaXRhYmxlKCkpCisgICAgaWYgKGZyYW1lLnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlz
Q29udGVudEVkaXRhYmxlKCkpCiAgICAgICAgIGZyYW1lLmVkaXRvcigpLnNldENvbXBvc2l0aW9u
KHRleHQsIHVuZGVybGluZXMsIHNlbGVjdGlvblN0YXJ0LCBzZWxlY3Rpb25FbmQpOwogfQogCkBA
IC01OTAsNyArNTkwLDcgQEAgdm9pZCBXZWJQYWdlOjp1cGRhdGVTZWxlY3Rpb25XaXRoVG91Y2hl
cwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIAogICAgICAgICBjYXNlIFdLU2VsZWN0aW9u
VG91Y2hFbmRlZDoKLSAgICAgICAgICAgIGlmIChmcmFtZS5zZWxlY3Rpb24oKS5pc0NvbnRlbnRF
ZGl0YWJsZSgpKSB7CisgICAgICAgICAgICBpZiAoZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9u
KCkuaXNDb250ZW50RWRpdGFibGUoKSkgewogICAgICAgICAgICAgICAgIHJlc3VsdCA9IGNsb3Nl
c3RXb3JkQm91bmRhcnlGb3JQb3NpdGlvbihwb3NpdGlvbik7CiAgICAgICAgICAgICAgICAgaWYg
KHJlc3VsdC5pc05vdE51bGwoKSkKICAgICAgICAgICAgICAgICAgICAgcmFuZ2UgPSBSYW5nZTo6
Y3JlYXRlKCpmcmFtZS5kb2N1bWVudCgpLCByZXN1bHQsIHJlc3VsdCk7CkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1dlYlBhZ2VNYWMubW0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9XZWJQYWdlTWFjLm1tCShy
ZXZpc2lvbiAxNjMxMjgpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFj
L1dlYlBhZ2VNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTI2MCw3ICsyNjAsNyBAQCB2b2lkIFdl
YlBhZ2U6OnNldENvbXBvc2l0aW9uKGNvbnN0IFN0cmluCiB7CiAgICAgRnJhbWUmIGZyYW1lID0g
bV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJhbWUoKTsKIAotICAgIGlm
IChmcmFtZS5zZWxlY3Rpb24oKS5pc0NvbnRlbnRFZGl0YWJsZSgpKSB7CisgICAgaWYgKGZyYW1l
LnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlzQ29udGVudEVkaXRhYmxlKCkpIHsKICAgICAgICAg
UmVmUHRyPFJhbmdlPiByZXBsYWNlbWVudFJhbmdlOwogICAgICAgICBpZiAocmVwbGFjZW1lbnRS
YW5nZVN0YXJ0ICE9IE5TTm90Rm91bmQpIHsKICAgICAgICAgICAgIHJlcGxhY2VtZW50UmFuZ2Ug
PSBjb252ZXJ0VG9SYW5nZSgmZnJhbWUsIE5TTWFrZVJhbmdlKHJlcGxhY2VtZW50UmFuZ2VTdGFy
dCwgcmVwbGFjZW1lbnRSYW5nZUVuZCAtIHJlcGxhY2VtZW50UmFuZ2VTdGFydCkpOwpAQCAtMzYw
LDcgKzM2MCw4IEBAIHZvaWQgV2ViUGFnZTo6Z2V0QXR0cmlidXRlZFN1YnN0cmluZ0Zyb20KIHsK
ICAgICBGcmFtZSYgZnJhbWUgPSBtX3BhZ2UtPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1h
aW5GcmFtZSgpOwogCi0gICAgaWYgKGZyYW1lLnNlbGVjdGlvbigpLmlzTm9uZSgpIHx8ICFmcmFt
ZS5zZWxlY3Rpb24oKS5pc0NvbnRlbnRFZGl0YWJsZSgpIHx8IGZyYW1lLnNlbGVjdGlvbigpLmlz
SW5QYXNzd29yZEZpZWxkKCkpCisgICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9u
ID0gZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgaWYgKHNlbGVjdGlvbi5pc05v
bmUoKSB8fCAhc2VsZWN0aW9uLmlzQ29udGVudEVkaXRhYmxlKCkgfHwgc2VsZWN0aW9uLmlzSW5Q
YXNzd29yZEZpZWxkKCkpCiAgICAgICAgIHJldHVybjsKIAogICAgIE5TUmFuZ2UgbnNSYW5nZSA9
IE5TTWFrZVJhbmdlKGxvY2F0aW9uLCBsZW5ndGggLSBsb2NhdGlvbik7CkluZGV4OiBTb3VyY2Uv
V2ViS2l0L2VmbC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9lZmwvQ2hh
bmdlTG9nCShyZXZpc2lvbiAxNjMxNjMpCisrKyBTb3VyY2UvV2ViS2l0L2VmbC9DaGFuZ2VMb2cJ
KHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMyBAQAorMjAxNC0wMS0zMCAgUnlvc3VrZSBOaXdh
ICA8cm5pd2FAd2Via2l0Lm9yZz4KKworICAgICAgICBSZW1vdmUgaW5saW5lIG1lbWJlciBmdW5j
dGlvbnMgb2YgRnJhbWVTZWxlY3Rpb24gdGhhdCBhY2Nlc3MgbV9zZWxlY3Rpb24KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTEyNzk4NgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogZXdrL2V3a19mcmFtZS5j
cHA6CisgICAgICAgIChld2tfZnJhbWVfdGV4dF9zZWxlY3Rpb25fdHlwZV9nZXQpOgorCiAyMDE0
LTAxLTMwICBBbmRyZWkgQnVjdXIgIDxhYnVjdXJAYWRvYmUuY29tPgogCiAgICAgICAgIFJlbW92
ZSB0aGUgQUNDRUxFUkFURURfQ09NUE9TSVRJTkcgZmxhZwpJbmRleDogU291cmNlL1dlYktpdC9l
ZmwvV2ViQ29yZVN1cHBvcnQvRHVtcFJlbmRlclRyZWVTdXBwb3J0RWZsLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0L2VmbC9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBv
cnRFZmwuY3BwCShyZXZpc2lvbiAxNjMxMjgpCisrKyBTb3VyY2UvV2ViS2l0L2VmbC9XZWJDb3Jl
U3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmwuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02
MSw2ICs2MSw3IEBACiAjaW5jbHVkZSA8U2NyaXB0Q29udHJvbGxlci5oPgogI2luY2x1ZGUgPFNl
dHRpbmdzLmg+CiAjaW5jbHVkZSA8VGV4dEl0ZXJhdG9yLmg+CisjaW5jbHVkZSA8VmlzaWJsZVNl
bGVjdGlvbi5oPgogI2luY2x1ZGUgPGJpbmRpbmdzL1NjcmlwdFZhbHVlLmg+CiAjaW5jbHVkZSA8
YmluZGluZ3MvanMvR0NDb250cm9sbGVyLmg+CiAjaW5jbHVkZSA8aGlzdG9yeS9IaXN0b3J5SXRl
bS5oPgpAQCAtNjM5LDExICs2NDAsMTIgQEAgYm9vbCBEdW1wUmVuZGVyVHJlZVN1cHBvcnRFZmw6
OnNlbGVjdGVkUgogICAgIERSVF9TVVBQUlRfUEFHRV9HRVRfT1JfUkVUVVJOKGV3a1ZpZXcsIHBh
Z2UsIGZhbHNlKTsKIAogICAgIFdlYkNvcmU6OkZyYW1lJiBmcmFtZSA9IHBhZ2UtPmZvY3VzQ29u
dHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpOwotICAgIFJlZlB0cjxXZWJDb3JlOjpSYW5n
ZT4gcmFuZ2UgPSBmcmFtZS5zZWxlY3Rpb24oKS50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpOwor
ICAgIGNvbnN0IFdlYkNvcmU6OlZpc2libGVTZWxlY3Rpb24mIHNlbGVjdGlvbiA9IGZyYW1lLnNl
bGVjdGlvbigpLnNlbGVjdGlvbigpOworICAgIFJlZlB0cjxXZWJDb3JlOjpSYW5nZT4gcmFuZ2Ug
PSBzZWxlY3Rpb24udG9Ob3JtYWxpemVkUmFuZ2UoKS5nZXQoKTsKICAgICBpZiAoIXJhbmdlKQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBXZWJDb3JlOjpFbGVtZW50KiBzZWxlY3Rpb25S
b290ID0gZnJhbWUuc2VsZWN0aW9uKCkucm9vdEVkaXRhYmxlRWxlbWVudCgpOworICAgIFdlYkNv
cmU6OkVsZW1lbnQqIHNlbGVjdGlvblJvb3QgPSBzZWxlY3Rpb24ucm9vdEVkaXRhYmxlRWxlbWVu
dCgpOwogICAgIFdlYkNvcmU6OkVsZW1lbnQqIHNjb3BlID0gc2VsZWN0aW9uUm9vdCA/IHNlbGVj
dGlvblJvb3QgOiBmcmFtZS5kb2N1bWVudCgpLT5kb2N1bWVudEVsZW1lbnQoKTsKIAogICAgIFJl
ZlB0cjxXZWJDb3JlOjpSYW5nZT4gdGVzdFJhbmdlID0gV2ViQ29yZTo6UmFuZ2U6OmNyZWF0ZShz
Y29wZS0+ZG9jdW1lbnQoKSwgc2NvcGUsIDAsIHJhbmdlLT5zdGFydENvbnRhaW5lcigpLCByYW5n
ZS0+c3RhcnRPZmZzZXQoKSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX2ZyYW1l
LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2VmbC9ld2svZXdrX2ZyYW1lLmNwcAko
cmV2aXNpb24gMTYzMTI4KQorKysgU291cmNlL1dlYktpdC9lZmwvZXdrL2V3a19mcmFtZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTEwNzMsOSArMTA3Myw5IEBAIEV3a19UZXh0X1NlbGVjdGlvbl9U
eXBlIGV3a19mcmFtZV90ZXh0X3MKICAgICBFV0tfRlJBTUVfU0RfR0VUX09SX1JFVFVSTihld2tG
cmFtZSwgc21hcnREYXRhLCBFV0tfVEVYVF9TRUxFQ1RJT05fTk9ORSk7CiAgICAgRUlOQV9TQUZF
VFlfT05fTlVMTF9SRVRVUk5fVkFMKHNtYXJ0RGF0YS0+ZnJhbWUsIEVXS19URVhUX1NFTEVDVElP
Tl9OT05FKTsKIAotICAgIFdlYkNvcmU6OkZyYW1lU2VsZWN0aW9uJiBjb250cm9sbGVyID0gc21h
cnREYXRhLT5mcmFtZS0+c2VsZWN0aW9uKCk7CisgICAgY29uc3QgV2ViQ29yZTo6VmlzaWJsZVNl
bGVjdGlvbiYgc2VsZWN0aW9uID0gc21hcnREYXRhLT5mcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCk7CiAKLSAgICBzd2l0Y2ggKGNvbnRyb2xsZXIuc2VsZWN0aW9uVHlwZSgpKSB7CisgICAg
c3dpdGNoIChzZWxlY3Rpb24uc2VsZWN0aW9uVHlwZSgpKSB7CiAgICAgY2FzZSBXZWJDb3JlOjpW
aXNpYmxlU2VsZWN0aW9uOjpOb1NlbGVjdGlvbjoKICAgICAgICAgcmV0dXJuIEVXS19URVhUX1NF
TEVDVElPTl9OT05FOwogICAgIGNhc2UgV2ViQ29yZTo6VmlzaWJsZVNlbGVjdGlvbjo6Q2FyZXRT
ZWxlY3Rpb246CkluZGV4OiBTb3VyY2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNjMxNjMpCisrKyBTb3Vy
Y2UvV2ViS2l0L2d0ay9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSwxMyBAQAor
MjAxNC0wMS0zMCAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KKworICAgICAgICBS
ZW1vdmUgaW5saW5lIG1lbWJlciBmdW5jdGlvbnMgb2YgRnJhbWVTZWxlY3Rpb24gdGhhdCBhY2Nl
c3MgbV9zZWxlY3Rpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTEyNzk4NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgICogV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50R3RrLmNwcDoKKyAgICAgICAgKFdl
YktpdDo6Y29sbGFwc2VTZWxlY3Rpb24pOgorCiAyMDE0LTAxLTMwICBBbmRyZWkgQnVjdXIgIDxh
YnVjdXJAYWRvYmUuY29tPgogCiAgICAgICAgIFJlbW92ZSB0aGUgQUNDRUxFUkFURURfQ09NUE9T
SVRJTkcgZmxhZwpJbmRleDogU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRHVtcFJl
bmRlclRyZWVTdXBwb3J0R3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L2d0ay9X
ZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1cHBvcnRHdGsuY3BwCShyZXZpc2lvbiAxNjMx
MjgpCisrKyBTb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9EdW1wUmVuZGVyVHJlZVN1
cHBvcnRHdGsuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw2ICs2Nyw3IEBACiAjaW5jbHVkZSAi
U2VjdXJpdHlQb2xpY3kuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlRleHRJ
dGVyYXRvci5oIgorI2luY2x1ZGUgIlZpc2libGVTZWxlY3Rpb24uaCIKICNpbmNsdWRlICJXZWJL
aXRBY2Nlc3NpYmxlV3JhcHBlckF0ay5oIgogI2luY2x1ZGUgIndlYmtpdGdsb2JhbHNwcml2YXRl
LmgiCiAjaW5jbHVkZSAid2Via2l0d2ViZnJhbWUuaCIKQEAgLTM4OSwxMSArMzkwLDEyIEBAIGJv
b2wgRHVtcFJlbmRlclRyZWVTdXBwb3J0R3RrOjpzZWxlY3RlZFIKIAogICAgIEZyYW1lJiBmcmFt
ZSA9IGNvcmUod2ViVmlldyktPmZvY3VzQ29udHJvbGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgp
OwogCi0gICAgUmVmUHRyPFJhbmdlPiByYW5nZSA9IGZyYW1lLnNlbGVjdGlvbigpLnRvTm9ybWFs
aXplZFJhbmdlKCkuZ2V0KCk7CisgICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9u
ID0gZnJhbWUuc2VsZWN0aW9uKCkuc2VsZWN0aW9uKCk7CisgICAgUmVmUHRyPFJhbmdlPiByYW5n
ZSA9IHNlbGVjdGlvbi50b05vcm1hbGl6ZWRSYW5nZSgpLmdldCgpOwogICAgIGlmICghcmFuZ2Up
CiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIEVsZW1lbnQqIHNlbGVjdGlvblJvb3QgPSBm
cmFtZS5zZWxlY3Rpb24oKS5yb290RWRpdGFibGVFbGVtZW50KCk7CisgICAgRWxlbWVudCogc2Vs
ZWN0aW9uUm9vdCA9IHNlbGVjdGlvbi5yb290RWRpdGFibGVFbGVtZW50KCk7CiAgICAgRWxlbWVu
dCogc2NvcGUgPSBzZWxlY3Rpb25Sb290ID8gc2VsZWN0aW9uUm9vdCA6IGZyYW1lLmRvY3VtZW50
KCktPmRvY3VtZW50RWxlbWVudCgpOwogCiAgICAgUmVmUHRyPFJhbmdlPiB0ZXN0UmFuZ2UgPSBS
YW5nZTo6Y3JlYXRlKHNjb3BlLT5kb2N1bWVudCgpLCBzY29wZSwgMCwgcmFuZ2UtPnN0YXJ0Q29u
dGFpbmVyKCksIHJhbmdlLT5zdGFydE9mZnNldCgpKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQvZ3Rr
L1dlYkNvcmVTdXBwb3J0L0VkaXRvckNsaWVudEd0ay5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50R3RrLmNwcAkocmV2aXNpb24g
MTYzMTI4KQorKysgU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvRWRpdG9yQ2xpZW50
R3RrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjE2LDcgKzIxNiw4IEBAIHN0YXRpYyB2b2lkIGNv
bGxhcHNlU2VsZWN0aW9uKEd0a0NsaXBib2EKICAgICBGcmFtZSYgZnJhbWUgPSBjb3JlUGFnZS0+
Zm9jdXNDb250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCk7CiAKICAgICAvLyBDb2xsYXBz
ZSB0aGUgc2VsZWN0aW9uIHdpdGhvdXQgY2xlYXJpbmcgaXQKLSAgICBmcmFtZS5zZWxlY3Rpb24o
KS5zZXRCYXNlKGZyYW1lLnNlbGVjdGlvbigpLmV4dGVudCgpLCBmcmFtZS5zZWxlY3Rpb24oKS5h
ZmZpbml0eSgpKTsKKyAgICBjb25zdCBWaXNpYmxlU2VsZWN0aW9uJiBzZWxlY3Rpb24gPSBmcmFt
ZS5zZWxlY3Rpb24oKTsKKyAgICBmcmFtZS5zZWxlY3Rpb24oKS5zZXRCYXNlKHNlbGVjdGlvbi5l
eHRlbnQoKSwgc2VsZWN0aW9uLmFmZmluaXR5KCkpOwogfQogCiAjaWYgUExBVEZPUk0oWDExKQpJ
bmRleDogU291cmNlL1dlYktpdC9pb3MvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQvaW9zL0NoYW5nZUxvZwkocmV2aXNpb24gMTYzMTYzKQorKysgU291cmNlL1dlYktpdC9p
b3MvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMTMgQEAKKzIwMTQtMDEtMzAg
IFJ5b3N1a2UgTml3YSAgPHJuaXdhQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmVtb3ZlIGlubGlu
ZSBtZW1iZXIgZnVuY3Rpb25zIG9mIEZyYW1lU2VsZWN0aW9uIHRoYXQgYWNjZXNzIG1fc2VsZWN0
aW9uCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMjc5
ODYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdl
YkNvcmVTdXBwb3J0L1dlYkZyYW1lSU9TLm1tOgorICAgICAgICAoLVtXZWJGcmFtZSBzZXRCYXNl
V3JpdGluZ0RpcmVjdGlvbjpdKToKKwogMjAxNC0wMS0zMCAgQW5kcmVpIEJ1Y3VyICA8YWJ1Y3Vy
QGFkb2JlLmNvbT4KIAogICAgICAgICBSZW1vdmUgdGhlIEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5H
IGZsYWcKSW5kZXg6IFNvdXJjZS9XZWJLaXQvaW9zL1dlYkNvcmVTdXBwb3J0L1dlYkZyYW1lSU9T
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvaW9zL1dlYkNvcmVTdXBwb3J0L1dlYkZy
YW1lSU9TLm1tCShyZXZpc2lvbiAxNjMxMjgpCisrKyBTb3VyY2UvV2ViS2l0L2lvcy9XZWJDb3Jl
U3VwcG9ydC9XZWJGcmFtZUlPUy5tbQkod29ya2luZyBjb3B5KQpAQCAtNTc1LDcgKzU3NSw3IEBA
IC0gKHZvaWQpc2V0QmFzZVdyaXRpbmdEaXJlY3Rpb246KFdLV3JpdGkKICAgICBXS1dyaXRpbmdE
aXJlY3Rpb24gb3JpZ2luYWxEaXJlY3Rpb24gPSBbc2VsZiBzZWxlY3Rpb25CYXNlV3JpdGluZ0Rp
cmVjdGlvbl07CiAKICAgICBGcmFtZSAqZnJhbWUgPSBbc2VsZiBjb3JlRnJhbWVdOwotICAgIGlm
ICghZnJhbWUtPnNlbGVjdGlvbigpLmlzQ29udGVudEVkaXRhYmxlKCkpCisgICAgaWYgKCFmcmFt
ZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNDb250ZW50RWRpdGFibGUoKSkKICAgICAgICAg
cmV0dXJuOwogICAgIAogICAgIFdyaXRpbmdEaXJlY3Rpb24gd2NEaXJlY3Rpb24gPSBMZWZ0VG9S
aWdodFdyaXRpbmdEaXJlY3Rpb247CkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvQ2hhbmdlTG9nCShyZXZpc2lvbiAxNjMx
NjMpCisrKyBTb3VyY2UvV2ViS2l0L21hYy9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEs
MyArMSwyOCBAQAorMjAxNC0wMS0zMCAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4K
KworICAgICAgICBSZW1vdmUgaW5saW5lIG1lbWJlciBmdW5jdGlvbnMgb2YgRnJhbWVTZWxlY3Rp
b24gdGhhdCBhY2Nlc3MgbV9zZWxlY3Rpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTEyNzk4NgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgICogV2ViVmlldy9XZWJGcmFtZS5tbToKKyAgICAgICAgKC1bV2Vi
RnJhbWUgaGFzRWRpdGFibGVTZWxlY3Rpb25dKToKKyAgICAgICAgKC1bV2ViRnJhbWUgc2VsZWN0
aW9uQWZmaW5pdHldKToKKyAgICAgICAgKC1bV2ViRnJhbWUgZ2V0RGljdGF0aW9uUmVzdWx0UmFu
Z2VzOmFuZE1ldGFkYXRhczpdKToKKyAgICAgICAgKC1bV2ViRnJhbWUgZm9jdXNlZE5vZGVIYXND
b250ZW50XSk6CisgICAgICAgICogV2ViVmlldy9XZWJIVE1MVmlldy5tbToKKyAgICAgICAgKC1b
V2ViSFRNTFZpZXcgcmVhZFNlbGVjdGlvbkZyb21QYXN0ZWJvYXJkOl0pOgorICAgICAgICAoLVtX
ZWJIVE1MVmlldyBfaGFzU2VsZWN0aW9uXSk6CisgICAgICAgICgtW1dlYkhUTUxWaWV3IF9oYXNT
ZWxlY3Rpb25Pckluc2VydGlvblBvaW50XSk6CisgICAgICAgICgtW1dlYkhUTUxWaWV3IF9oYXNJ
bnNlcnRpb25Qb2ludF0pOgorICAgICAgICAoLVtXZWJIVE1MVmlldyBfaXNFZGl0YWJsZV0pOgor
ICAgICAgICAoLVtXZWJIVE1MVmlldyB2YWxpZGF0ZVVzZXJJbnRlcmZhY2VJdGVtV2l0aG91dERl
bGVnYXRlOl0pOgorICAgICAgICAoLVtXZWJIVE1MVmlldyBtYWludGFpbnNJbmFjdGl2ZVNlbGVj
dGlvbl0pOgorICAgICAgICAoaXNUZXh0SW5wdXQpOgorICAgICAgICAoaXNJblBhc3N3b3JkRmll
bGQpOgorICAgICAgICAqIFdlYlZpZXcvV2ViVmlldy5tbToKKyAgICAgICAgKC1bV2ViVmlldyBz
ZWxlY3Rpb25BZmZpbml0eV0pOgorCiAyMDE0LTAxLTMwICBEYXZpZCBLaWx6ZXIgIDxkZGtpbHpl
ckBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkIHNlY3VyaXR5LWNoZWNrZWQgY2FzdCBmb3IgV2Vi
Q29yZTo6Q2FjaGVkSW1hZ2UKSW5kZXg6IFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViRnJh
bWUubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFtZS5t
bQkocmV2aXNpb24gMTYzMTI4KQorKysgU291cmNlL1dlYktpdC9tYWMvV2ViVmlldy9XZWJGcmFt
ZS5tbQkod29ya2luZyBjb3B5KQpAQCAtMTM0OCw3ICsxMzQ4LDcgQEAgLSAodm9pZClyZXNldFNl
bGVjdGlvbgogLSAoQk9PTCloYXNFZGl0YWJsZVNlbGVjdGlvbgogewogICAgIFdlYkNvcmU6OkZy
YW1lICpmcmFtZSA9IGNvcmUoc2VsZik7Ci0gICAgcmV0dXJuIGZyYW1lLT5zZWxlY3Rpb24oKS5p
c0NvbnRlbnRFZGl0YWJsZSgpOworICAgIHJldHVybiBmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0
aW9uKCkuaXNDb250ZW50RWRpdGFibGUoKTsKIH0KIAogLSAoaW50KXByZWZlcnJlZEhlaWdodApA
QCAtMTQ3Myw3ICsxNDczLDcgQEAgLSAodm9pZClzZXRTZWxlY3RlZERPTVJhbmdlOihET01SYW5n
ZSAqKQogLSAoTlNTZWxlY3Rpb25BZmZpbml0eSlzZWxlY3Rpb25BZmZpbml0eQogewogICAgIFdl
YkNvcmU6OkZyYW1lICpmcmFtZSA9IGNvcmUoc2VsZik7Ci0gICAgcmV0dXJuIChOU1NlbGVjdGlv
bkFmZmluaXR5KShmcmFtZS0+c2VsZWN0aW9uKCkuYWZmaW5pdHkoKSk7CisgICAgcmV0dXJuIChO
U1NlbGVjdGlvbkFmZmluaXR5KShmcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuYWZmaW5p
dHkoKSk7CiB9CiAKIC0gKHZvaWQpZXhwYW5kU2VsZWN0aW9uVG9FbGVtZW50Q29udGFpbmluZ0Nh
cmV0U2VsZWN0aW9uCkBAIC0xNzE0LDggKzE3MTQsOSBAQCAtICh2b2lkKWdldERpY3RhdGlvblJl
c3VsdFJhbmdlczooTlNBcnJhCiAgICAgCiAgICAgRnJhbWUgKmZyYW1lID0gY29yZShzZWxmKTsK
ICAgICBEb2N1bWVudCAqZG9jdW1lbnQgPSBmcmFtZS0+ZG9jdW1lbnQoKTsKLSAgICAKLSAgICBF
bGVtZW50ICpyb290ID0gZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvblR5cGUoKSA9PSBWaXNp
YmxlU2VsZWN0aW9uOjpOb1NlbGVjdGlvbiA/IGZyYW1lLT5kb2N1bWVudCgpLT5ib2R5KCkgOiBm
cmFtZS0+c2VsZWN0aW9uKCkucm9vdEVkaXRhYmxlRWxlbWVudCgpOworCisgICAgY29uc3QgVmlz
aWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0gZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigp
OworICAgIEVsZW1lbnQgKnJvb3QgPSBzZWxlY3Rpb24uc2VsZWN0aW9uVHlwZSgpID09IFZpc2li
bGVTZWxlY3Rpb246Ok5vU2VsZWN0aW9uID8gZnJhbWUtPmRvY3VtZW50KCktPmJvZHkoKSA6IHNl
bGVjdGlvbi5yb290RWRpdGFibGVFbGVtZW50KCk7CiAgICAgCiAgICAgRE9NUmFuZ2UgKnByZXZp
b3VzRE9NUmFuZ2UgPSBuaWw7CiAgICAgaWQgcHJldmlvdXNNZXRhZGF0YSA9IG5pbDsKQEAgLTIy
NzEsMTEgKzIyNzIsMTIgQEAgLSAoQk9PTClmb2N1c2VkTm9kZUhhc0NvbnRlbnQKICAgICBGcmFt
ZSogY29yZUZyYW1lID0gX3ByaXZhdGUtPmNvcmVGcmFtZTsKICAgIAogICAgIEVsZW1lbnQqIHJv
b3Q7Ci0gICAgaWYgKGNvcmVGcmFtZS0+c2VsZWN0aW9uKCkuaXNOb25lKCkgfHwgIWNvcmVGcmFt
ZS0+c2VsZWN0aW9uKCkuaXNDb250ZW50RWRpdGFibGUoKSkKKyAgICBjb25zdCBWaXNpYmxlU2Vs
ZWN0aW9uJiBzZWxlY3Rpb24gPSBjb3JlRnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpOwor
ICAgIGlmIChzZWxlY3Rpb24uaXNOb25lKCkgfHwgIXNlbGVjdGlvbi5pc0NvbnRlbnRFZGl0YWJs
ZSgpKQogICAgICAgICByb290ID0gY29yZUZyYW1lLT5kb2N1bWVudCgpLT5ib2R5KCk7CiAgICAg
ZWxzZSB7CiAgICAgICAgIC8vIENhbid0IHVzZSB0aGUgZm9jdXNlZE5vZGUgaGVyZSBiZWNhdXNl
IHdlIHdhbnQgdGhlIHJvb3Qgb2YgdGhlIHNoYWRvdyB0cmVlIGZvciBmb3JtIGVsZW1lbnRzLgot
ICAgICAgICByb290ID0gY29yZUZyYW1lLT5zZWxlY3Rpb24oKS5yb290RWRpdGFibGVFbGVtZW50
KCk7CisgICAgICAgIHJvb3QgPSBzZWxlY3Rpb24ucm9vdEVkaXRhYmxlRWxlbWVudCgpOwogICAg
IH0KICAgICAvLyBFYXJseSByZXR1cm4gdG8gYXZvaWQgdGhlIGV4cGVuc2Ugb2YgY3JlYXRpbmcg
VmlzaWJsZVBvc2l0aW9ucy4KICAgICAvLyBGSVhNRTogV2UgZmFpbCB0byBjb21wdXRlIGEgcm9v
dCBmb3IgU1ZHLCB3ZSBoYXZlIGEgbnVsbCBjaGVjayBoZXJlIHNvIHRoYXQgd2UgZG9uJ3QgY3Jh
c2guCkluZGV4OiBTb3VyY2UvV2ViS2l0L21hYy9XZWJWaWV3L1dlYkhUTUxWaWV3Lm1tCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0JKHJldmlz
aW9uIDE2MzEyOCkKKysrIFNvdXJjZS9XZWJLaXQvbWFjL1dlYlZpZXcvV2ViSFRNTFZpZXcubW0J
KHdvcmtpbmcgY29weSkKQEAgLTEwMDEsNyArMTAwMSw3IEBAIC0gKEJPT0wpcmVhZFNlbGVjdGlv
bkZyb21QYXN0ZWJvYXJkOihOU1AKICAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBf
ZnJhbWVdKTsgCiAgICAgaWYgKCFjb3JlRnJhbWUpIAogICAgICAgICByZXR1cm4gTk87IAotICAg
IGlmIChjb3JlRnJhbWUtPnNlbGVjdGlvbigpLmlzQ29udGVudFJpY2hseUVkaXRhYmxlKCkpCisg
ICAgaWYgKGNvcmVGcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNDb250ZW50UmljaGx5
RWRpdGFibGUoKSkKICAgICAgICAgW3NlbGYgX3Bhc3RlV2l0aFBhc3RlYm9hcmQ6cGFzdGVib2Fy
ZCBhbGxvd1BsYWluVGV4dDpZRVNdOyAKICAgICBlbHNlIAogICAgICAgICBbc2VsZiBfcGFzdGVB
c1BsYWluVGV4dFdpdGhQYXN0ZWJvYXJkOnBhc3RlYm9hcmRdOyAKQEAgLTE5ODYsMjUgKzE5ODYs
MjUgQEAgLSAoQk9PTClfY2FuQWx0ZXJDdXJyZW50U2VsZWN0aW9uCiAtIChCT09MKV9oYXNTZWxl
Y3Rpb24KIHsKICAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKLSAg
ICByZXR1cm4gY29yZUZyYW1lICYmIGNvcmVGcmFtZS0+c2VsZWN0aW9uKCkuaXNSYW5nZSgpOwor
ICAgIHJldHVybiBjb3JlRnJhbWUgJiYgY29yZUZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24o
KS5pc1JhbmdlKCk7CiB9CiAKIC0gKEJPT0wpX2hhc1NlbGVjdGlvbk9ySW5zZXJ0aW9uUG9pbnQK
IHsKICAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKLSAgICByZXR1
cm4gY29yZUZyYW1lICYmIGNvcmVGcmFtZS0+c2VsZWN0aW9uKCkuaXNDYXJldE9yUmFuZ2UoKTsK
KyAgICByZXR1cm4gY29yZUZyYW1lICYmIGNvcmVGcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9u
KCkuaXNDYXJldE9yUmFuZ2UoKTsKIH0KIAogLSAoQk9PTClfaGFzSW5zZXJ0aW9uUG9pbnQKIHsK
ICAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKLSAgICByZXR1cm4g
Y29yZUZyYW1lICYmIGNvcmVGcmFtZS0+c2VsZWN0aW9uKCkuaXNDYXJldCgpOworICAgIHJldHVy
biBjb3JlRnJhbWUgJiYgY29yZUZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rpb24oKS5pc0NhcmV0
KCk7CiB9CiAKIC0gKEJPT0wpX2lzRWRpdGFibGUKIHsKICAgICBGcmFtZSogY29yZUZyYW1lID0g
Y29yZShbc2VsZiBfZnJhbWVdKTsKLSAgICByZXR1cm4gY29yZUZyYW1lICYmIGNvcmVGcmFtZS0+
c2VsZWN0aW9uKCkuaXNDb250ZW50RWRpdGFibGUoKTsKKyAgICByZXR1cm4gY29yZUZyYW1lICYm
IGNvcmVGcmFtZS0+c2VsZWN0aW9uKCkuc2VsZWN0aW9uKCkuaXNDb250ZW50RWRpdGFibGUoKTsK
IH0KIAogLSAoQk9PTClfdHJhbnNwYXJlbnRCYWNrZ3JvdW5kCkBAIC0yODk5LDcgKzI4OTksNyBA
QCAtIChCT09MKXZhbGlkYXRlVXNlckludGVyZmFjZUl0ZW1XaXRob3V0CiAgICAgCiAgICAgaWYg
KGFjdGlvbiA9PSBAc2VsZWN0b3IocGFzdGVBc1JpY2hUZXh0OikpCiAgICAgICAgIHJldHVybiBm
cmFtZSAmJiAoZnJhbWUtPmVkaXRvcigpLmNhbkRIVE1MUGFzdGUoKQotICAgICAgICAgICAgfHwg
KGZyYW1lLT5lZGl0b3IoKS5jYW5QYXN0ZSgpICYmIGZyYW1lLT5zZWxlY3Rpb24oKS5pc0NvbnRl
bnRSaWNobHlFZGl0YWJsZSgpKSk7CisgICAgICAgICAgICB8fCAoZnJhbWUtPmVkaXRvcigpLmNh
blBhc3RlKCkgJiYgZnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmlzQ29udGVudFJpY2hs
eUVkaXRhYmxlKCkpKTsKICAgICAKICAgICBpZiAoYWN0aW9uID09IEBzZWxlY3RvcihwZXJmb3Jt
RmluZFBhbmVsQWN0aW9uOikpCiAgICAgICAgIHJldHVybiBOTzsKQEAgLTMwMjYsNyArMzAyNiw3
IEBAIC0gKEJPT0wpbWFpbnRhaW5zSW5hY3RpdmVTZWxlY3Rpb24KICAgICAgICAgcmV0dXJuIFlF
UzsKICAgICAKICAgICBGcmFtZSogY29yZUZyYW1lID0gY29yZShbc2VsZiBfZnJhbWVdKTsKLSAg
ICByZXR1cm4gY29yZUZyYW1lICYmIGNvcmVGcmFtZS0+c2VsZWN0aW9uKCkuaXNDb250ZW50RWRp
dGFibGUoKTsKKyAgICByZXR1cm4gY29yZUZyYW1lICYmIGNvcmVGcmFtZS0+c2VsZWN0aW9uKCku
c2VsZWN0aW9uKCkuaXNDb250ZW50RWRpdGFibGUoKTsKICNlbHNlCiAgICAgLy8gVGhpcyBtZXRo
b2QgaGVscHMgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhlIFdlYkhUTUxWaWV3IHNob3VsZCBtYWlu
dGFpbgogICAgIC8vIGFuIGluYWN0aXZlIHNlbGVjdGlvbiB3aGVuIGl0J3Mgbm90IGZpcnN0IHJl
c3BvbmRlci4KQEAgLTMwNTcsNyArMzA1Nyw3IEBAIC0gKEJPT0wpbWFpbnRhaW5zSW5hY3RpdmVT
ZWxlY3Rpb24KICAgICAgICAgcmV0dXJuIFlFUzsKIAogICAgIEZyYW1lKiBjb3JlRnJhbWUgPSBj
b3JlKFtzZWxmIF9mcmFtZV0pOwotICAgIGJvb2wgc2VsZWN0aW9uSXNFZGl0YWJsZSA9IGNvcmVG
cmFtZSAmJiBjb3JlRnJhbWUtPnNlbGVjdGlvbigpLmlzQ29udGVudEVkaXRhYmxlKCk7CisgICAg
Ym9vbCBzZWxlY3Rpb25Jc0VkaXRhYmxlID0gY29yZUZyYW1lICYmIGNvcmVGcmFtZS0+c2VsZWN0
aW9uKCkuc2VsZWN0aW9uKCkuaXNDb250ZW50RWRpdGFibGUoKTsKICAgICBib29sIG5leHRSZXNw
b25kZXJJc0luV2ViVmlldyA9IFtuZXh0UmVzcG9uZGVyIGlzS2luZE9mQ2xhc3M6W05TVmlldyBj
bGFzc11dCiAgICAgICAgICYmIFtuZXh0UmVzcG9uZGVyIGlzRGVzY2VuZGFudE9mOltbW3NlbGYg
X3dlYlZpZXddIG1haW5GcmFtZV0gZnJhbWVWaWV3XV07CiAKQEAgLTQxMzcsMTMgKzQxMzcsMTYg
QEAgLSAoQk9PTCluZWVkc1BhbmVsVG9CZWNvbWVLZXkKIC8vIEFQSSB3aGVuIGFuIGVkaXRhYmxl
IHJlZ2lvbiBpcyBub3QgY3VycmVudGx5IGZvY3VzZWQuCiBzdGF0aWMgQk9PTCBpc1RleHRJbnB1
dChGcmFtZSogY29yZUZyYW1lKQogewotICAgIHJldHVybiBjb3JlRnJhbWUgJiYgIWNvcmVGcmFt
ZS0+c2VsZWN0aW9uKCkuaXNOb25lKCkgJiYgY29yZUZyYW1lLT5zZWxlY3Rpb24oKS5pc0NvbnRl
bnRFZGl0YWJsZSgpOworICAgIGlmICghY29yZUZyYW1lKQorICAgICAgICByZXR1cm4gTk87Cisg
ICAgY29uc3QgVmlzaWJsZVNlbGVjdGlvbiYgc2VsZWN0aW9uID0gY29yZUZyYW1lLT5zZWxlY3Rp
b24oKS5zZWxlY3Rpb24oKTsKKyAgICByZXR1cm4gIXNlbGVjdGlvbi5pc05vbmUoKSAmJiBzZWxl
Y3Rpb24uaXNDb250ZW50RWRpdGFibGUoKTsKIH0KIAogI2lmICFQTEFURk9STShJT1MpCiBzdGF0
aWMgQk9PTCBpc0luUGFzc3dvcmRGaWVsZChGcmFtZSogY29yZUZyYW1lKQogewotICAgIHJldHVy
biBjb3JlRnJhbWUgJiYgY29yZUZyYW1lLT5zZWxlY3Rpb24oKS5pc0luUGFzc3dvcmRGaWVsZCgp
OworICAgIHJldHVybiBjb3JlRnJhbWUgJiYgY29yZUZyYW1lLT5zZWxlY3Rpb24oKS5zZWxlY3Rp
b24oKS5pc0luUGFzc3dvcmRGaWVsZCgpOwogfQogI2VuZGlmCiAKSW5kZXg6IFNvdXJjZS9XZWJL
aXQvbWFjL1dlYlZpZXcvV2ViVmlldy5tbQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0L21h
Yy9XZWJWaWV3L1dlYlZpZXcubW0JKHJldmlzaW9uIDE2MzEyOCkKKysrIFNvdXJjZS9XZWJLaXQv
bWFjL1dlYlZpZXcvV2ViVmlldy5tbQkod29ya2luZyBjb3B5KQpAQCAtNzI0NCw3ICs3MjQ0LDcg
QEAgLSAoTlNTZWxlY3Rpb25BZmZpbml0eSlzZWxlY3Rpb25BZmZpbml0eQogICAgIEZyYW1lKiBj
b3JlRnJhbWUgPSBjb3JlKFtzZWxmIF9zZWxlY3RlZE9yTWFpbkZyYW1lXSk7CiAgICAgaWYgKCFj
b3JlRnJhbWUpCiAgICAgICAgIHJldHVybiBOU1NlbGVjdGlvbkFmZmluaXR5RG93bnN0cmVhbTsK
LSAgICByZXR1cm4ga2l0KGNvcmVGcmFtZS0+c2VsZWN0aW9uKCkuYWZmaW5pdHkoKSk7CisgICAg
cmV0dXJuIGtpdChjb3JlRnJhbWUtPnNlbGVjdGlvbigpLnNlbGVjdGlvbigpLmFmZmluaXR5KCkp
OwogfQogCiAtICh2b2lkKXNldEVkaXRhYmxlOihCT09MKWZsYWcK
</data>
<flag name="review"
          id="246887"
          type_id="1"
          status="+"
          setter="enrica"
    />
          </attachment>
      

    </bug>

</bugzilla>